This commit was manufactured by cvs2svn to create tag 'Root_SSQ_build'.

Sprout from master 2006-04-11 21:11:49 UTC Silenio Quarti <silenio> '135946 - Virtual Tree eats shell activations'
Cherrypick from master 2009-06-19 19:29:25 UTC Silenio Quarti <silenio> '*** empty log message ***':
    bundles/org.eclipse.swt.tools/.classpath
    bundles/org.eclipse.swt.tools/.project
    bundles/org.eclipse.swt.tools/.settings/org.eclipse.jdt.core.prefs
    bundles/org.eclipse.swt.tools/Icon Exe/org/eclipse/swt/tools/internal/IconExe.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTClass.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTField.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTItem.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTMethod.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTParameter.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTType.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/AbstractItem.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/CleanupClass.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/CleanupConstants.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/CleanupNatives.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ConstantsGenerator.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/EmbedMetaData.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/Flags.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIClass.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIField.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGenerator.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGeneratorApp.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGeneratorAppUI.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIItem.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIMethod.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIParameter.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIType.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/LockGenerator.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/MetaData.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/MetaDataGenerator.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/NativesGenerator.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectClass.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectField.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectItem.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectMethod.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectParameter.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectType.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/SizeofGenerator.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/StatsGenerator.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/StructsGenerator.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.accessibility.gtk.properties
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.cairo.properties
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gnome.properties
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gtk.properties
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.properties
    bundles/org.eclipse.swt.tools/META-INF/p2.inf
    bundles/org.eclipse.swt.tools/Mac Generation/org/eclipse/swt/tools/internal/DOMWriter.java
    bundles/org.eclipse.swt.tools/Mac Generation/org/eclipse/swt/tools/internal/MacGenerator.java
    bundles/org.eclipse.swt.tools/Mac Generation/org/eclipse/swt/tools/internal/MacGeneratorUI.java
    bundles/org.eclipse.swt.tools/Mozilla Generation/org/eclipse/swt/tools/internal/MozillaGenerator.java
    bundles/org.eclipse.swt.tools/NativeStats/org/eclipse/swt/tools/internal/NativeStats.java
    bundles/org.eclipse.swt.tools/Sleak/org/eclipse/swt/tools/internal/Sleak.java
    bundles/org.eclipse.swt.tools/about.html
    bundles/org.eclipse.swt.tools/build.properties
    bundles/org.eclipse.swt.tools/feature/.project
    bundles/org.eclipse.swt.tools/feature/build.properties
    bundles/org.eclipse.swt.tools/feature/feature.xml
    bundles/org.eclipse.swt.tools/icons/mac.gif
    bundles/org.eclipse.swt.tools/icons/sleak.gif
    bundles/org.eclipse.swt.tools/icons/spy.gif
    bundles/org.eclipse.swt.tools/plugin.properties
    bundles/org.eclipse.swt.tools/plugin.xml
    bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/Activator.java
    bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/builders/Check64CompilationParticipant.java
    bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/builders/Check64EnableAction.java
    bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/builders/JNIBuilder.java
    bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/views/MacGeneratorView.java
    bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/views/SleakView.java
    bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/views/SpyView.java
    bundles/org.eclipse.swt.tools/templates/jnitemplates.properties
    bundles/org.eclipse.swt.tools/templates/jnitemplates.xml
    bundles/org.eclipse.swt/.classpath_cocoa
    bundles/org.eclipse.swt/.classpath_dojo
    bundles/org.eclipse.swt/.classpath_flex
    bundles/org.eclipse.swt/.classpath_wpf
    bundles/org.eclipse.swt/.classpath_wpf_e4
    bundles/org.eclipse.swt/.project_e4
    bundles/org.eclipse.swt/.settings/.api_filters
    bundles/org.eclipse.swt/.settings/org.eclipse.jdt.core.prefs
    bundles/org.eclipse.swt/.settings/org.eclipse.pde.api.tools.prefs
    bundles/org.eclipse.swt/Eclipse SWT AWT/carbon/org/eclipse/swt/awt/SWT_AWT.java
    bundles/org.eclipse.swt/Eclipse SWT AWT/cocoa/library/swt_awt.c
    bundles/org.eclipse.swt/Eclipse SWT AWT/cocoa/org/eclipse/swt/awt/SWT_AWT.java
    bundles/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/Accessible.java
    bundles/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/SWTAccessibleDelegate.java
    bundles/org.eclipse.swt/Eclipse SWT Browser/carbon/org/eclipse/swt/browser/Safari.java
    bundles/org.eclipse.swt/Eclipse SWT Browser/cocoa/org/eclipse/swt/browser/Safari.java
    bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/AuthenticationEvent.java
    bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/AuthenticationListener.java
    bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/Browser.java
    bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/BrowserFunction.java
    bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/WebBrowser.java
    bundles/org.eclipse.swt/Eclipse SWT Browser/forms/org/eclipse/swt/browser/IE.java
    bundles/org.eclipse.swt/Eclipse SWT Browser/photon/org/eclipse/swt/browser/Voyager.java
    bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/IE.java
    bundles/org.eclipse.swt/Eclipse SWT Browser/wpf/org/eclipse/swt/browser/IE.java
    bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CaretEvent.java
    bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CaretListener.java
    bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/MovementEvent.java
    bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/MovementListener.java
    bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledTextDropTargetEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/ImageTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TableDragSourceEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TableDropTargetEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TreeDragSourceEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TreeDropTargetEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/URLTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/ByteArrayTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/Clipboard.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/DragSource.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/DropTarget.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/FileTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/HTMLTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/ImageTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/RTFTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TableDragSourceEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TableDropTargetEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TextTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/Transfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TransferData.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TreeDragSourceEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TreeDropTargetEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/URLTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DragSourceEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DropTargetEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/ImageTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/TableDragSourceEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/TableDropTargetEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/TreeDragSourceEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/TreeDropTargetEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/URLTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/ImageTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TableDragSourceEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TableDropTargetEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TreeDragSourceEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TreeDropTargetEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/URLTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/ImageTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/TableDragSourceEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/TableDropTargetEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/TreeDragSourceEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/TreeDropTargetEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/URLTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/ImageTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/TableDragSourceEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/TableDropTargetEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/TreeDragSourceEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/TreeDropTargetEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/URLTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/ImageTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/TableDragSourceEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/TableDropTargetEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/TreeDragSourceEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/TreeDropTargetEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/ByteArrayTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/Clipboard.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/DragSource.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/DropTarget.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/FileTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/HTMLTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/ImageTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/RTFTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TableDragSourceEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TableDropTargetEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TextTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/Transfer.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TransferData.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TreeDragSourceEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TreeDropTargetEffect.java
    bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/URLTransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Effects/emulated/org/eclipse/swt/effects/Effect.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/carbon/org/eclipse/swt/browser/MozillaDelegate.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/cocoa/org/eclipse/swt/browser/MozillaDelegate.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/nsIScriptContext.h
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/nsIScriptGlobalObject.h
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/swt_xpcom.rc
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_custom.h
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit.cpp
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit.h
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_stats.cpp
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_stats.h
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_structs.cpp
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_structs.h
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/AppFileLocProvider.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Download.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/DownloadFactory.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/DownloadFactory_1_8.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Download_1_8.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/External.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/ExternalFactory.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/FilePicker.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/FilePickerFactory.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/FilePickerFactory_1_8.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/FilePicker_1_8.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/HelperAppLauncherDialog.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/HelperAppLauncherDialogFactory.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/HelperAppLauncherDialog_1_9.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/InputStream.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Mozilla.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/PromptDialog.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/PromptService2.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/PromptService2Factory.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/SimpleEnumerator.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/WindowCreator2.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/XPCOMObject.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/init/GREVersionRange.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/init/XPCOMInit.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsDynamicFunctionLoad.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIAuthInformation.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsICancelable.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIChannel.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIClassInfo.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsICookieService.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsICookieService_1_9.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDOMEventTarget.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDOMKeyEvent.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDOMSerializer.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDOMSerializer_1_7.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDOMWindowCollection.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDataType.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDirectoryService.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDirectoryServiceProvider.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDirectoryServiceProvider2.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDocShell_1_8.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDownload_1_8.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIFilePicker_1_8.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIHelperAppLauncherDialog_1_9.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIHelperAppLauncher_1_8.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIHelperAppLauncher_1_9.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIJSContextStack.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIObserverService.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIPrincipal.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIProgressDialog_1_8.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIPromptService2.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIProperties.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIScriptSecurityManager_1_9.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIScriptSecurityManager_1_9_1.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsISecurityCheckedComponent.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsISerializable.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsITransfer.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIVariant.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIWebBrowserSetup.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIWebNavigationInfo.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIWebProgressListener2.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIWindowCreator2.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIWritableVariant.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIXPCSecurityManager.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/motif/org/eclipse/swt/browser/MozillaDelegate.java
    bundles/org.eclipse.swt/Eclipse SWT Mozilla/win32/org/eclipse/swt/browser/MozillaDelegate.java
    bundles/org.eclipse.swt/Eclipse SWT OpenGL/cocoa/org/eclipse/swt/opengl/GLCanvas.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_custom.h
    bundles/org.eclipse.swt/Eclipse SWT PI/cairo/org/eclipse/swt/internal/cairo/cairo_text_extents_t.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa.c
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa.h
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_custom.c
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_custom.h
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_stats.c
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_stats.h
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_structs.c
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_structs.h
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/Lock.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/ATSFontMetrics.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/CFRunLoopSourceContext.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/CGSize.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/DataBrowserAccessibilityItemInfo.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HIAxisPosition.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HIAxisScale.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HIBinding.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HILayoutInfo.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HIPositioning.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HIScaling.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HISideBinding.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/LSApplicationParameters.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/LongDateRec.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/NavCBRec.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/NavEventData.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/NavEventDataInfo.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/NavFileOrFolderInfo.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/NavMenuItemSpec.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/TextRange.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/cocoa/Cocoa.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/cocoa/NSPoint.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/cocoa/NSRect.java
    bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/cocoa/NSSize.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/build.sh
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/build.xml
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/build32.sh
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/build64.sh
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/make_macosx.mak
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os.c
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os.h
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_custom.c
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_custom.h
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.c
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.h
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_structs.c
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_structs.h
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/Lock.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/Platform.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/AppKitFull.bridgesupport.extras
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CGPathElement.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CGPoint.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CGRect.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CGSize.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CoreFoundationFull.bridgesupport.extras
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CoreGraphicsFull.bridgesupport.extras
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMDocument.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMEvent.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMKeyboardEvent.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMMouseEvent.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMUIEvent.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMWheelEvent.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/FoundationFull.bridgesupport.extras
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSActionCell.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAffineTransform.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAffineTransformStruct.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAlert.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAppleEventDescriptor.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSApplication.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSArray.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAttributedString.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAutoreleasePool.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBezierPath.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBitmapImageRep.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBox.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBrowserCell.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBundle.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSButton.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSButtonCell.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCalendarDate.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCell.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCharacterSet.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSClipView.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCoder.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColor.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColorPanel.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColorSpace.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSComboBox.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSComboBoxCell.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSControl.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCursor.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSData.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSDate.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSDatePicker.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSDictionary.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSDirectoryEnumerator.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSEnumerator.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSError.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSEvent.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFileManager.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFileWrapper.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFont.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFontManager.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFontPanel.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFormatter.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSGradient.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSGraphicsContext.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSHTTPCookie.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSHTTPCookieStorage.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSImage.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSImageRep.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSImageView.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSIndexSet.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSInputManager.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSKeyedArchiver.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSKeyedUnarchiver.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSLayoutManager.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMenu.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMenuItem.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableArray.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableAttributedString.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableDictionary.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableIndexSet.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableParagraphStyle.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableSet.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableString.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableURLRequest.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSNotification.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSNotificationCenter.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSNumber.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSNumberFormatter.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSObject.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSOpenGLContext.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSOpenGLPixelFormat.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSOpenPanel.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSOutlineView.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPanel.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSParagraphStyle.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPasteboard.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPoint.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPopUpButton.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPrintInfo.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPrintOperation.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPrintPanel.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPrinter.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSProgressIndicator.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSRange.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSRect.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSResponder.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSRunLoop.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSavePanel.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSScreen.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSScrollView.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSScroller.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSearchField.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSearchFieldCell.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSecureTextField.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSegmentedCell.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSet.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSize.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSlider.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSStatusBar.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSStatusItem.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSStepper.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSString.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTabView.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTabViewItem.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTableColumn.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTableHeaderCell.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTableHeaderView.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTableView.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSText.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextAttachment.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextContainer.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextField.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextFieldCell.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextStorage.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextTab.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextView.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSThread.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTimeZone.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTimer.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSToolbar.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSToolbarItem.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTrackingArea.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTypesetter.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURL.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURLAuthenticationChallenge.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURLCredential.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURLDownload.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURLProtectionSpace.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURLRequest.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSValue.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSView.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSWindow.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSWorkspace.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/Protocol.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTApplicationDelegate.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTBox.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTButton.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTButtonCell.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTCanvasView.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTComboBox.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTDatePicker.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTDragSourceDelegate.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTImageTextCell.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTImageView.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTMenu.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTMenuItem.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTOutlineView.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTPanelDelegate.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTPopUpButton.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTPrintPanelDelegate.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTPrinterView.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTProgressIndicator.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTScrollView.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTScroller.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTSearchField.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTSecureTextField.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTSlider.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTStepper.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTabView.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTableHeaderCell.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTableHeaderView.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTableView.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTextField.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTextView.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTToolbar.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTreeItem.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTView.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTWebViewDelegate.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTWindow.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTWindowDelegate.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebDataSource.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebDocumentRepresentation.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebFrame.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebFrameView.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebKitFull.bridgesupport.extras
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebOpenPanelResultListener.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebPolicyDecisionListener.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebPreferences.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebScriptObject.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebUndefined.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebView.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/id.java
    bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/objc_super.java
    bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c.c
    bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c.h
    bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c_stats.c
    bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c_stats.h
    bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c_structs.c
    bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c_structs.h
    bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/C.java
    bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/LONG.java
    bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_freebsd.mak
    bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_solaris_x86.mak
    bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/Lock.java
    bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/PangoAttrColor.java
    bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/PangoAttrInt.java
    bundles/org.eclipse.swt/Eclipse SWT PI/motif/org/eclipse/swt/internal/Lock.java
    bundles/org.eclipse.swt/Eclipse SWT PI/photon/org/eclipse/swt/internal/photon/PtWebClient2Data_t.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/com_custom.c
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/Lock.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/IDispatchEx.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/IDragSourceHelper.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/IDragSourceHelper2.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/IDropTargetHelper.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/IPersistFile.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/VARIANT.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/BP_PAINTPARAMS.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CANDIDATEFORM.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/DEVMODE.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/DEVMODEA.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/DEVMODEW.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/DOCHOSTUIINFO.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/DWM_BLURBEHIND.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/EMR.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/EMREXTCREATEFONTINDIRECTW.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/EXTLOGFONTW.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/HDHITTESTINFO.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/MCHITTESTINFO.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/NMLVODSTATECHANGE.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/NMTREEVIEW.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/NMTTCUSTOMDRAW.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/NMTVITEMCHANGE.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OFNOTIFY.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OSVERSIONINFOEX.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OSVERSIONINFOEXA.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OSVERSIONINFOEXW.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OUTLINETEXTMETRIC.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OUTLINETEXTMETRICA.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OUTLINETEXTMETRICW.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/PANOSE.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/PROCESS_INFORMATION.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SCRIPT_DIGITSUBSTITUTE.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SCROLLBARINFO.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHDRAGIMAGE.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHFILEINFO.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHFILEINFOA.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHFILEINFOW.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/STARTUPINFO.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SYSTEMTIME.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/TCHITTESTINFO.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/TF_DA_COLOR.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/TF_DISPLAYATTRIBUTE.java
    bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/TVSORTCB.java
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/build.bat
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/build.xml
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/make_wpf.mak
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os.cpp
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os.h
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os_custom.cpp
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os_stats.cpp
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os_stats.h
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os_structs.cpp
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os_structs.h
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf/org/eclipse/swt/internal/Platform.java
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf/org/eclipse/swt/internal/wpf/OS.java
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32.c
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32.h
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32_stats.c
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32_stats.h
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32_structs.c
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32_structs.h
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/ICONINFO.java
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/POINT.java
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/PROCESS_INFORMATION.java
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/SHELLEXECUTEINFOW.java
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/STARTUPINFOW.java
    bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/Win32.java
    bundles/org.eclipse.swt/Eclipse SWT Printing/cocoa/org/eclipse/swt/printing/PrintDialog.java
    bundles/org.eclipse.swt/Eclipse SWT Printing/cocoa/org/eclipse/swt/printing/Printer.java
    bundles/org.eclipse.swt/Eclipse SWT Printing/emulated/org/eclipse/swt/printing/PrintDialog.java
    bundles/org.eclipse.swt/Eclipse SWT Printing/emulated/org/eclipse/swt/printing/Printer.java
    bundles/org.eclipse.swt/Eclipse SWT Printing/wpf/org/eclipse/swt/printing/PrintDialog.java
    bundles/org.eclipse.swt/Eclipse SWT Printing/wpf/org/eclipse/swt/printing/Printer.java
    bundles/org.eclipse.swt/Eclipse SWT Program/cocoa/org/eclipse/swt/program/Program.java
    bundles/org.eclipse.swt/Eclipse SWT Program/emulated/org/eclipse/swt/program/Program.java
    bundles/org.eclipse.swt/Eclipse SWT Program/wpf/org/eclipse/swt/program/Program.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ButtonDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ComboDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/DrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ExpanderDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/GroupDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ProgressBarDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/RangeDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ScaleDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ScrollBarDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/TabFolderDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/TabItemDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/Theme.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ToolBarDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ToolItemDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ButtonDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ComboDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/DrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ExpanderDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/GroupDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ProgressBarDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/RangeDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ScaleDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ScrollBarDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/TabFolderDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/TabItemDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/Theme.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ToolBarDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ToolItemDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ButtonDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ComboDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/DrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ExpanderDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/GroupDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ProgressBarDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/RangeDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ScaleDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ScrollBarDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/TabFolderDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/TabItemDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/Theme.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ToolBarDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ToolItemDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ButtonDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ComboDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/DrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ExpanderDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/GroupDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ProgressBarDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/RangeDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ScaleDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ScrollBarDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/TabFolderDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/TabItemDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/Theme.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ToolBarDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ToolItemDrawData.java
    bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/DateTime.java
    bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/IME.java
    bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/TrayItem.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Color.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Cursor.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Device.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/DeviceData.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Font.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/FontData.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/FontMetrics.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/GC.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/GCData.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Path.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Pattern.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Region.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/TextLayout.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Transform.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Button.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Canvas.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Caret.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ColorDialog.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Combo.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Composite.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/DateTime.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Decorations.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/DirectoryDialog.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/FileDialog.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/FontDialog.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Group.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/IME.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Label.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Link.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/List.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Menu.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/MenuItem.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/MessageBox.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ProgressBar.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Sash.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scale.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ScrollBar.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scrollable.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Shell.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Slider.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Spinner.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TabFolder.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TabItem.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Table.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TableColumn.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TableItem.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Text.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ToolBar.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ToolItem.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tracker.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TrayItem.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tree.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TreeColumn.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TreeItem.java
    bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Widget.java
    bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/DragDetectEvent.java
    bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/DragDetectListener.java
    bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MenuDetectEvent.java
    bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MenuDetectListener.java
    bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MouseWheelListener.java
    bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/LineAttributes.java
    bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGDecoder.java
    bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngDeflater.java
    bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngEncoder.java
    bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngInputStream.java
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ar._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_cs._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_da._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_de._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_el._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_es._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_fi._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_fr._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_hu._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_it._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_iw._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ja._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ko._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_mn._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_nl._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_no._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pl._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pt._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pt_BR._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ro._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ru._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_sv._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_tr._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_uk._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_zh._properties
    bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_zh_TW._properties
    bundles/org.eclipse.swt/Eclipse SWT/emulated/datetime/org/eclipse/swt/widgets/DateTime.java
    bundles/org.eclipse.swt/Eclipse SWT/emulated/ime/org/eclipse/swt/widgets/IME.java
    bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java
    bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/IME.java
    bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ImageList.java
    bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/DateTime.java
    bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/IME.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Color.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Cursor.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Device.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/DeviceData.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Font.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/FontData.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/FontMetrics.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/GC.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/GCData.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Image.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Path.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Pattern.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Region.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/TextLayout.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Transform.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Button.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Canvas.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Caret.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ColorDialog.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Combo.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Composite.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Control.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/CoolBar.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/CoolItem.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Decorations.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/DirectoryDialog.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Display.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ExpandBar.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ExpandItem.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/FileDialog.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/FontDialog.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Group.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Label.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Link.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/List.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Menu.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/MenuItem.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/MessageBox.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ProgressBar.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Sash.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Scale.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ScrollBar.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Scrollable.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Shell.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Slider.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Spinner.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TabFolder.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TabItem.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Table.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TableColumn.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TableItem.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Text.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ToolBar.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ToolItem.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Tracker.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TrayItem.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Tree.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TreeColumn.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TreeItem.java
    bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Widget.java
    bundles/org.eclipse.swt/META-INF/p2.inf
    bundles/org.eclipse.swt/about_files/IJG_README
    bundles/org.eclipse.swt/components/external.idl
    bundles/org.eclipse.swt/components/external.xpt
    bundles/org.eclipse.swt/extra_jars/exceptions.jar
    bundles/org.eclipse.swt/extra_jars/readme.txt
    tests/org.eclipse.swt.tests/.settings/org.eclipse.jdt.core.prefs
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllCarbonTests.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllCocoaTests.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllGtkTests.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllMotifTests.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllTests.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllWidgetTests.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/ConsistencyUtility.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/SwtJunit.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/SwtTestCase.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_SWT.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_SWTError.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_SWTException.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_ACC.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_Accessible.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleAdapter.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleControlAdapter.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleControlEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleControlListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleTextAdapter.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleTextEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleTextListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_awt_SWT_AWT.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_CloseWindowListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_LocationAdapter.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_LocationListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_OpenWindowListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_ProgressAdapter.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_ProgressListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_StatusTextListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_TitleListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_VisibilityWindowAdapter.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_VisibilityWindowListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_AnimatedProgress.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_BidiSegmentEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_BidiSegmentListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_BusyIndicator.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CCombo.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CLabel.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolder.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolderAdapter.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolderEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolderListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabItem.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ControlEditor.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ExtendedModifyEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ExtendedModifyListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_LineBackgroundEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_LineBackgroundListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_LineStyleEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_LineStyleListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_PopupList.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ST.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_SashForm.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ScrolledComposite.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StackLayout.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyleRange.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledText.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledTextContent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableCursor.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableEditor.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableTree.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableTreeEditor.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableTreeItem.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TextChangeListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TextChangedEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TextChangingEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TreeEditor.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_VerifyKeyListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ViewForm.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_ByteArrayTransfer.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_Clipboard.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DND.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DragSource.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DragSourceAdapter.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DragSourceEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DragSourceListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DropTarget.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DropTargetAdapter.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DropTargetEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DropTargetListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_FileTransfer.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_RTFTransfer.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_TextTransfer.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_Transfer.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_TransferData.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ArmEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ArmListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ControlAdapter.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ControlEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ControlListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_DisposeEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_DisposeListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_FocusAdapter.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_FocusEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_FocusListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_HelpEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_HelpListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_KeyAdapter.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_KeyEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_KeyListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MenuAdapter.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MenuEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MenuListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ModifyEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ModifyListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseAdapter.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseMoveListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseTrackAdapter.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseTrackListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_PaintEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_PaintListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_SelectionAdapter.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_SelectionEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_SelectionListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ShellAdapter.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ShellEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ShellListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TraverseEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TraverseListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TreeAdapter.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TreeEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TreeListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TypedEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_VerifyEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_VerifyListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Color.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Cursor.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Device.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_DeviceData.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Drawable.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Font.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_FontData.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_FontMetrics.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_GC.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_GCData.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Image.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_ImageData.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_ImageLoader.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_ImageLoaderEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_ImageLoaderListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_PaletteData.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Point.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_RGB.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Rectangle.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Region.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_FillLayout.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_FormAttachment.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_FormData.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_FormLayout.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_GridData.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_GridLayout.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_RowData.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_RowLayout.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OLE.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleAutomation.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleClientSite.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleControlSite.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleEvent.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleFrame.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleFunctionDescription.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleParameterDescription.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OlePropertyDescription.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_Variant.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_printing_PrintDialog.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_printing_Printer.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_printing_PrinterData.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_program_Program.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Button.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Canvas.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Caret.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ColorDialog.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Combo.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Composite.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Control.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_CoolBar.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_CoolItem.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_DateTime.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Decorations.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Dialog.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_DirectoryDialog.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Display.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Event.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ExpandBar.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ExpandItem.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_FileDialog.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_FontDialog.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Group.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Label.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Layout.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Link.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_List.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Listener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Menu.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_MenuItem.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_MessageBox.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Monitor.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ProgressBar.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Sash.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Scale.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ScrollBar.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Scrollable.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Shell.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Slider.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Synchronizer.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TabFolder.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TabItem.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Table.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TableColumn.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TableItem.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Text.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ToolBar.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ToolItem.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Tracker.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Tree.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TreeColumn.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TreeItem.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TypedListener.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Widget.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser1.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser2.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser3.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser4.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser5.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser6.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser7.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser8.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/performance/Test_situational.java
    tests/org.eclipse.swt.tests/META-INF/MANIFEST.MF
    tests/org.eclipse.swt.tests/about.html
    tests/org.eclipse.swt.tests/build.properties
    tests/org.eclipse.swt.tests/test.xml
Cherrypick from master 2009-06-29 21:46:05 UTC Felipe Heidrich <fheidric> '*** empty log message ***':
    bundles/org.eclipse.swt.tools/META-INF/MANIFEST.MF
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser9.java
    tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Test_BrowserSuite.java
Cherrypick from master 2006-02-21 23:32:24 UTC Carolyn MacLeod <carolyn> 'Reorg color/font setting controls in order to add cell font/color setting.':
    examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/StyledTextTab.java
Delete:
    bundles/org.eclipse.swt.opengl/.classpath_carbon
    bundles/org.eclipse.swt.opengl/.classpath_gtk
    bundles/org.eclipse.swt.opengl/.classpath_motif
    bundles/org.eclipse.swt.opengl/.classpath_win32
    bundles/org.eclipse.swt.opengl/.cvsignore
    bundles/org.eclipse.swt.opengl/.project
    bundles/org.eclipse.swt.opengl/META-INF/MANIFEST.MF
    bundles/org.eclipse.swt.opengl/about.html
    bundles/org.eclipse.swt.opengl/carbon/library/agl.c
    bundles/org.eclipse.swt.opengl/carbon/library/agl.h
    bundles/org.eclipse.swt.opengl/carbon/library/agl_stats.c
    bundles/org.eclipse.swt.opengl/carbon/library/agl_stats.h
    bundles/org.eclipse.swt.opengl/carbon/library/agl_structs.h
    bundles/org.eclipse.swt.opengl/carbon/org/eclipse/swt/internal/opengl/carbon/AGL.java
    bundles/org.eclipse.swt.opengl/carbon/org/eclipse/swt/opengl/GLCanvas.java
    bundles/org.eclipse.swt.opengl/common/library/gl.c
    bundles/org.eclipse.swt.opengl/common/library/gl.h
    bundles/org.eclipse.swt.opengl/common/library/gl_stats.c
    bundles/org.eclipse.swt.opengl/common/library/gl_stats.h
    bundles/org.eclipse.swt.opengl/common/library/gl_structs.c
    bundles/org.eclipse.swt.opengl/common/library/gl_structs.h
    bundles/org.eclipse.swt.opengl/common/library/glu.c
    bundles/org.eclipse.swt.opengl/common/library/glu.h
    bundles/org.eclipse.swt.opengl/common/library/glu_stats.c
    bundles/org.eclipse.swt.opengl/common/library/glu_stats.h
    bundles/org.eclipse.swt.opengl/common/library/glu_structs.c
    bundles/org.eclipse.swt.opengl/common/library/glu_structs.h
    bundles/org.eclipse.swt.opengl/common/library/swt.c
    bundles/org.eclipse.swt.opengl/common/library/swt.h
    bundles/org.eclipse.swt.opengl/common/org/eclipse/opengl/GL.java
    bundles/org.eclipse.swt.opengl/common/org/eclipse/opengl/GLU.java
    bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/GLData.java
    bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/ImageDataUtil.java
    bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/Library.java
    bundles/org.eclipse.swt.opengl/gtk/library/build.sh
    bundles/org.eclipse.swt.opengl/gtk/library/glx.c
    bundles/org.eclipse.swt.opengl/gtk/library/glx.h
    bundles/org.eclipse.swt.opengl/gtk/library/glx_stats.c
    bundles/org.eclipse.swt.opengl/gtk/library/glx_stats.h
    bundles/org.eclipse.swt.opengl/gtk/library/glx_structs.c
    bundles/org.eclipse.swt.opengl/gtk/library/glx_structs.h
    bundles/org.eclipse.swt.opengl/gtk/library/make_linux.mak
    bundles/org.eclipse.swt.opengl/gtk/library/structs.c
    bundles/org.eclipse.swt.opengl/gtk/library/structs.h
    bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/internal/opengl/gtk/GLX.java
    bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/internal/opengl/gtk/XVisualInfo.java
    bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/opengl/GLCanvas.java
    bundles/org.eclipse.swt.opengl/motif/library/build.sh
    bundles/org.eclipse.swt.opengl/motif/library/glx.c
    bundles/org.eclipse.swt.opengl/motif/library/make_aix.mak
    bundles/org.eclipse.swt.opengl/motif/library/make_hpux.mak
    bundles/org.eclipse.swt.opengl/motif/library/make_linux.mak
    bundles/org.eclipse.swt.opengl/motif/library/make_solaris.mak
    bundles/org.eclipse.swt.opengl/motif/library/structs.c
    bundles/org.eclipse.swt.opengl/motif/library/structs.h
    bundles/org.eclipse.swt.opengl/motif/org/eclipse/swt/opengl/GLContext.java
    bundles/org.eclipse.swt.opengl/motif/org/eclipse/swt/opengl/internal/motif/XGL.java
    bundles/org.eclipse.swt.opengl/motif/org/eclipse/swt/opengl/internal/motif/XVisualInfo.java
    bundles/org.eclipse.swt.opengl/plugin.properties
    bundles/org.eclipse.swt.opengl/plugin.xml
    bundles/org.eclipse.swt.opengl/win32/library/build.bat
    bundles/org.eclipse.swt.opengl/win32/library/glw.c
    bundles/org.eclipse.swt.opengl/win32/library/make_win32.mak
    bundles/org.eclipse.swt.opengl/win32/library/structs.c
    bundles/org.eclipse.swt.opengl/win32/library/structs.h
    bundles/org.eclipse.swt.opengl/win32/library/swt.rc
    bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/GLCanvas.java
    bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/LAYERPLANEDESCRIPTOR.java
    bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/PIXELFORMATDESCRIPTOR.java
    bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/WGL.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ClassData.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/FieldData.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ItemData.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/MethodData.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ParameterData.java
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.accessibility.gtk.ATK.properties
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.cairo.Cairo.properties
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.carbon.OS.properties
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.cde.CDE.properties
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gdip.Gdip.properties
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gnome.GNOME.properties
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gtk.GTK.properties
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gtk.OS.properties
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.motif.OS.properties
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.mozilla.XPCOM.properties
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.mozilla.properties
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.ole.win32.COM.properties
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.opengl.glx.GLX.properties
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.opengl.gtk.GLX.properties
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.opengl.win32.WGL.properties
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.photon.OS.properties
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.win32.OS.properties
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.opengl.GL.properties
    bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.opengl.GLU.properties
    examples/org.eclipse.swt.examples.browser.demos/.classpath
    examples/org.eclipse.swt.examples.browser.demos/.project
    examples/org.eclipse.swt.examples.browser.demos/about.html
    examples/org.eclipse.swt.examples.browser.demos/build.properties
    examples/org.eclipse.swt.examples.browser.demos/css1/back1.jpg
    examples/org.eclipse.swt.examples.browser.demos/css1/back2.jpg
    examples/org.eclipse.swt.examples.browser.demos/css1/black.gif
    examples/org.eclipse.swt.examples.browser.demos/css1/board1.jpg
    examples/org.eclipse.swt.examples.browser.demos/css1/empty.gif
    examples/org.eclipse.swt.examples.browser.demos/css1/line1.gif
    examples/org.eclipse.swt.examples.browser.demos/css1/style.css
    examples/org.eclipse.swt.examples.browser.demos/css1/wall.gif
    examples/org.eclipse.swt.examples.browser.demos/css1/welcome.html
    examples/org.eclipse.swt.examples.browser.demos/css1/white.gif
    examples/org.eclipse.swt.examples.browser.demos/css2/Back640x440.gif
    examples/org.eclipse.swt.examples.browser.demos/css2/black_chip.gif
    examples/org.eclipse.swt.examples.browser.demos/css2/line1.gif
    examples/org.eclipse.swt.examples.browser.demos/css2/style.css
    examples/org.eclipse.swt.examples.browser.demos/css2/texture_cells.gif
    examples/org.eclipse.swt.examples.browser.demos/css2/wall_chip.gif
    examples/org.eclipse.swt.examples.browser.demos/css2/welcome.html
    examples/org.eclipse.swt.examples.browser.demos/css2/white_chip.gif
    examples/org.eclipse.swt.examples.browser.demos/css3/Back640x440.gif
    examples/org.eclipse.swt.examples.browser.demos/css3/black_pawn.gif
    examples/org.eclipse.swt.examples.browser.demos/css3/line1.gif
    examples/org.eclipse.swt.examples.browser.demos/css3/style.css
    examples/org.eclipse.swt.examples.browser.demos/css3/texture_cells.gif
    examples/org.eclipse.swt.examples.browser.demos/css3/wall_pawn.gif
    examples/org.eclipse.swt.examples.browser.demos/css3/welcome.html
    examples/org.eclipse.swt.examples.browser.demos/css3/white_pawn.gif
    examples/org.eclipse.swt.examples.browser.demos/css4/Back640x440.gif
    examples/org.eclipse.swt.examples.browser.demos/css4/blue_people.gif
    examples/org.eclipse.swt.examples.browser.demos/css4/gold_people.gif
    examples/org.eclipse.swt.examples.browser.demos/css4/line1.gif
    examples/org.eclipse.swt.examples.browser.demos/css4/style.css
    examples/org.eclipse.swt.examples.browser.demos/css4/texture_cells.gif
    examples/org.eclipse.swt.examples.browser.demos/css4/wall_people.gif
    examples/org.eclipse.swt.examples.browser.demos/css4/welcome.html
    examples/org.eclipse.swt.examples.browser.demos/doc-html/swt_browser_demos_ex.html
    examples/org.eclipse.swt.examples.browser.demos/icons/pawn.gif
    examples/org.eclipse.swt.examples.browser.demos/plugin.properties
    examples/org.eclipse.swt.examples.browser.demos/plugin.xml
    examples/org.eclipse.swt.examples.browser.demos/src/org/eclipse/swt/examples/browser/demos/BrowserDemoPlugin.java
    examples/org.eclipse.swt.examples.browser.demos/src/org/eclipse/swt/examples/browser/demos/Pawns.java
    examples/org.eclipse.swt.examples.browser.demos/src/org/eclipse/swt/examples/browser/demos/views/BrowserDemoView.java
    examples/org.eclipse.swt.examples.browser.demos/src/org/eclipse/swt/examples/browser/demos/views/EditorTab.java
    examples/org.eclipse.swt.examples.browser.demos/src/org/eclipse/swt/examples/browser/demos/views/PawnTab.java
    examples/org.eclipse.swt.examples.browser/.classpath
    examples/org.eclipse.swt.examples.browser/.cvsignore
    examples/org.eclipse.swt.examples.browser/.project
    examples/org.eclipse.swt.examples.browser/about.html
    examples/org.eclipse.swt.examples.browser/build.properties
    examples/org.eclipse.swt.examples.browser/doc-html/swt_browser_ex.html
    examples/org.eclipse.swt.examples.browser/icons/browser_example.gif
    examples/org.eclipse.swt.examples.browser/plugin.properties
    examples/org.eclipse.swt.examples.browser/plugin.xml
    examples/org.eclipse.swt.examples.browser/src/import.properties
    examples/org.eclipse.swt.examples.browser/src/org/eclipse/swt/examples/browserexample/BrowserPlugin.java
    examples/org.eclipse.swt.examples.browser/src/org/eclipse/swt/examples/browserexample/BrowserView.java
    examples/org.eclipse.swt.examples.controls/.classpath
    examples/org.eclipse.swt.examples.controls/.cvsignore
    examples/org.eclipse.swt.examples.controls/.project
    examples/org.eclipse.swt.examples.controls/about.html
    examples/org.eclipse.swt.examples.controls/build.properties
    examples/org.eclipse.swt.examples.controls/doc-html/swt_controls_ex.html
    examples/org.eclipse.swt.examples.controls/doc-html/swt_customcontrols_ex.html
    examples/org.eclipse.swt.examples.controls/icons/controls_example.gif
    examples/org.eclipse.swt.examples.controls/plugin.properties
    examples/org.eclipse.swt.examples.controls/plugin.xml
    examples/org.eclipse.swt.examples.controls/src/import.properties
    examples/org.eclipse.swt.examples.controls/src/org/eclipse/swt/examples/controls/ControlPlugin.java
    examples/org.eclipse.swt.examples.controls/src/org/eclipse/swt/examples/controls/ControlView.java
    examples/org.eclipse.swt.examples.controls/src/org/eclipse/swt/examples/controls/CustomControlView.java
    examples/org.eclipse.swt.examples.launcher/.classpath
    examples/org.eclipse.swt.examples.launcher/.cvsignore
    examples/org.eclipse.swt.examples.launcher/.project
    examples/org.eclipse.swt.examples.launcher/about.html
    examples/org.eclipse.swt.examples.launcher/build.properties
    examples/org.eclipse.swt.examples.launcher/doc-html/swt_launcher_ex.html
    examples/org.eclipse.swt.examples.launcher/doc/org.eclipse.swt.examples.launcher.launchItems.html
    examples/org.eclipse.swt.examples.launcher/icons/closedFolder.gif
    examples/org.eclipse.swt.examples.launcher/icons/generic_example.gif
    examples/org.eclipse.swt.examples.launcher/icons/launcher_example.gif
    examples/org.eclipse.swt.examples.launcher/icons/openFolder.gif
    examples/org.eclipse.swt.examples.launcher/plugin.properties
    examples/org.eclipse.swt.examples.launcher/plugin.xml
    examples/org.eclipse.swt.examples.launcher/schema/org.eclipse.swt.examples.launcher.launchItems.exsd
    examples/org.eclipse.swt.examples.launcher/src/import.properties
    examples/org.eclipse.swt.examples.launcher/src/org/eclipse/swt/examples/launcher/ItemDescriptor.java
    examples/org.eclipse.swt.examples.launcher/src/org/eclipse/swt/examples/launcher/ItemTreeNode.java
    examples/org.eclipse.swt.examples.launcher/src/org/eclipse/swt/examples/launcher/LauncherPlugin.java
    examples/org.eclipse.swt.examples.launcher/src/org/eclipse/swt/examples/launcher/LauncherView.java
    examples/org.eclipse.swt.examples.launcher/src/org/eclipse/swt/examples/launcher/SplitLayout.java
    examples/org.eclipse.swt.examples.layouts/.classpath
    examples/org.eclipse.swt.examples.layouts/.cvsignore
    examples/org.eclipse.swt.examples.layouts/.project
    examples/org.eclipse.swt.examples.layouts/about.html
    examples/org.eclipse.swt.examples.layouts/build.properties
    examples/org.eclipse.swt.examples.layouts/doc-html/swt_layout_ex.html
    examples/org.eclipse.swt.examples.layouts/icons/layouts_example.gif
    examples/org.eclipse.swt.examples.layouts/plugin.properties
    examples/org.eclipse.swt.examples.layouts/plugin.xml
    examples/org.eclipse.swt.examples.layouts/src/import.properties
    examples/org.eclipse.swt.examples.layouts/src/org/eclipse/swt/examples/layouts/LayoutPlugin.java
    examples/org.eclipse.swt.examples.layouts/src/org/eclipse/swt/examples/layouts/LayoutView.java
    examples/org.eclipse.swt.examples.ole.win32/.classpath
    examples/org.eclipse.swt.examples.ole.win32/.cvsignore
    examples/org.eclipse.swt.examples.ole.win32/.project
    examples/org.eclipse.swt.examples.ole.win32/about.html
    examples/org.eclipse.swt.examples.ole.win32/build.properties
    examples/org.eclipse.swt.examples.ole.win32/doc-html/swt_ole_ex.html
    examples/org.eclipse.swt.examples.ole.win32/icons/backward_nav.gif
    examples/org.eclipse.swt.examples.ole.win32/icons/forward_nav.gif
    examples/org.eclipse.swt.examples.ole.win32/icons/home_nav.gif
    examples/org.eclipse.swt.examples.ole.win32/icons/refresh_nav.gif
    examples/org.eclipse.swt.examples.ole.win32/icons/search_nav.gif
    examples/org.eclipse.swt.examples.ole.win32/icons/stop_nav.gif
    examples/org.eclipse.swt.examples.ole.win32/icons/webbrowser_example.gif
    examples/org.eclipse.swt.examples.ole.win32/plugin.properties
    examples/org.eclipse.swt.examples.ole.win32/plugin.xml
    examples/org.eclipse.swt.examples.ole.win32/src/import.properties
    examples/org.eclipse.swt.examples.ole.win32/src/org/eclipse/swt/examples/ole/win32/OleBrowserView.java
    examples/org.eclipse.swt.examples.ole.win32/src/org/eclipse/swt/examples/ole/win32/OlePlugin.java
    examples/org.eclipse.swt.examples.ole.win32/src/org/eclipse/swt/examples/ole/win32/OleWebBrowser.java
    examples/org.eclipse.swt.examples.paint/.classpath
    examples/org.eclipse.swt.examples.paint/.cvsignore
    examples/org.eclipse.swt.examples.paint/.project
    examples/org.eclipse.swt.examples.paint/about.html
    examples/org.eclipse.swt.examples.paint/build.properties
    examples/org.eclipse.swt.examples.paint/doc-html/swt_paint_ex.html
    examples/org.eclipse.swt.examples.paint/icons/paint_example.gif
    examples/org.eclipse.swt.examples.paint/plugin.properties
    examples/org.eclipse.swt.examples.paint/plugin.xml
    examples/org.eclipse.swt.examples.paint/src/import.properties
    examples/org.eclipse.swt.examples.paint/src/org/eclipse/swt/examples/paint/PaintPlugin.java
    examples/org.eclipse.swt.examples.paint/src/org/eclipse/swt/examples/paint/PaintView.java
    examples/org.eclipse.swt.opengl.examples/.classpath
    examples/org.eclipse.swt.opengl.examples/.cvsignore
    examples/org.eclipse.swt.opengl.examples/.project
    examples/org.eclipse.swt.opengl.examples/about.html
    examples/org.eclipse.swt.opengl.examples/build.properties
    examples/org.eclipse.swt.opengl.examples/plugin.properties
    examples/org.eclipse.swt.opengl.examples/plugin.xml
    examples/org.eclipse.swt.opengl.examples/src/examples_opengl.properties
    examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/AntialiasingTab.java
    examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/AreaTab.java
    examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ColorSelectionGroup.java
    examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/FogTab.java
    examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/GradientTab.java
    examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/IColorSelectionListener.java
    examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ImageDataUtil.java
    examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/LWJGLExample.java
    examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/LightTab.java
    examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/NurbTab.java
    examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ObjectsTab.java
    examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/OpenGLExample.java
    examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/OpenGLTab.java
    examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ReflectionTab.java
    examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/StencilTab.java
    examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/TextureTab.java
    examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/TransparencyTab.java
    examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/Ball.jpg
    examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/Box.bmp
    examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/Floor.jpg
    examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/splash.bmp
    examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/untitled.jpg
    examples/org.eclipse.swt.snippets/.classpath
    examples/org.eclipse.swt.snippets/.cvsignore
    examples/org.eclipse.swt.snippets/.project
    examples/org.eclipse.swt.snippets/about.html
    examples/org.eclipse.swt.snippets/build.properties
    examples/org.eclipse.swt.snippets/plugin.properties
    examples/org.eclipse.swt.snippets/plugin.xml
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet1.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet10.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet100.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet101.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet102.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet103.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet104.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet105.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet106.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet107.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet108.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet109.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet11.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet110.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet111.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet112.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet113.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet114.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet115.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet116.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet117.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet118.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet119.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet12.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet120.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet121.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet122.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet123.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet124.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet125.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet126.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet127.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet128.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet129.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet13.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet130.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet131.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet132.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet133.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet134.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet135.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet136.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet137.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet138.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet139.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet14.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet140.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet141.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet142.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet143.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet144.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet145.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet146.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet147.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet148.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet149.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet15.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet150.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet151.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet152.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet153.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet154.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet155.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet156.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet157.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet158.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet159.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet16.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet160.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet161.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet162.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet163.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet164.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet165.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet166.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet167.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet168.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet169.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet17.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet170.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet171.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet172.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet173.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet174.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet175.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet176.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet177.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet178.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet179.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet18.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet180.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet181.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet182.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet183.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet184.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet185.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet186.html
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet186.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet187.html
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet187.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet188.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet189.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet19.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet190.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet191.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet192.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet193.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet194.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet195.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet196.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet197.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet198.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet199.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet2.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet20.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet200.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet201.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet202.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet203.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet204.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet205.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet206.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet207.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet208.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet209.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet21.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet210.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet211.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet212.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet213.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet214.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet215.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet216.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet217.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet218.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet219.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet22.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet220.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet221.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet222.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet223.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet224.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet225.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet226.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet227.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet228.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet229.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet23.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet230.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet231.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet232.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet233.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet24.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet25.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet26.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet27.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet28.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet29.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet3.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet30.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet31.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet32.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet33.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet34.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet35.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet36.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet37.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet38.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet39.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet4.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet40.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet41.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet42.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet43.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet44.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet45.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet46.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet47.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet48.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet49.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet5.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet50.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet51.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet52.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet53.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet54.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet55.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet56.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet57.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet58.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet59.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet6.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet60.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet61.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet62.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet63.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet64.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet65.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet66.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet67.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet68.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet69.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet7.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet70.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet71.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet72.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet73.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet74.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet75.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet76.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet77.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet78.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet79.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet8.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet80.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet81.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet82.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet83.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet84.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet85.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet86.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet87.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet88.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet89.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet9.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet90.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet91.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet92.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet93.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet94.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet95.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet96.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet97.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet98.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet99.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/SnippetLauncher.java
    examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/eclipse.png
    tests/org.eclipse.swt.tests/plugin.xml
diff --git a/bundles/org.eclipse.swt.opengl/.classpath_carbon b/bundles/org.eclipse.swt.opengl/.classpath_carbon
deleted file mode 100755
index 027aa0d..0000000
--- a/bundles/org.eclipse.swt.opengl/.classpath_carbon
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry sourcepath="JRE_SRC" kind="var" path="JRE_LIB"/>
-	<classpathentry kind="src" path="common"/>
-	<classpathentry kind="src" path="carbon">
-	    <attributes>
-			<attribute value="org.eclipse.swt.opengl.carbon" name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="/org.eclipse.swt"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt.opengl/.classpath_gtk b/bundles/org.eclipse.swt.opengl/.classpath_gtk
deleted file mode 100644
index f310079..0000000
--- a/bundles/org.eclipse.swt.opengl/.classpath_gtk
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry sourcepath="JRE_SRC" kind="var" path="JRE_LIB"/>
-	<classpathentry kind="src" path="common"/>
-	<classpathentry kind="src" path="gtk">
-	    <attributes>
-			<attribute value="org.eclipse.swt.opengl.gtk/os/linux/x86" name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="/org.eclipse.swt"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt.opengl/.classpath_motif b/bundles/org.eclipse.swt.opengl/.classpath_motif
deleted file mode 100644
index 75b5fe1..0000000
--- a/bundles/org.eclipse.swt.opengl/.classpath_motif
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry sourcepath="JRE_SRC" kind="var" path="JRE_LIB"/>
-	<classpathentry kind="src" path="common"/>
-	<classpathentry kind="src" path="motif"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="/org.eclipse.swt"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt.opengl/.classpath_win32 b/bundles/org.eclipse.swt.opengl/.classpath_win32
deleted file mode 100644
index 478159e..0000000
--- a/bundles/org.eclipse.swt.opengl/.classpath_win32
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry sourcepath="JRE_SRC" kind="var" path="JRE_LIB"/>
-	<classpathentry kind="src" path="common"/>
-	<classpathentry kind="src" path="win32">
-	    <attributes>
-			<attribute value="org.eclipse.swt.opengl.win32/os/win32/x86" name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="/org.eclipse.swt"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/bundles/org.eclipse.swt.opengl/.cvsignore b/bundles/org.eclipse.swt.opengl/.cvsignore
deleted file mode 100644
index 661113b..0000000
--- a/bundles/org.eclipse.swt.opengl/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-bin
-.classpath
-ws
diff --git a/bundles/org.eclipse.swt.opengl/.project b/bundles/org.eclipse.swt.opengl/.project
deleted file mode 100644
index 577537a..0000000
--- a/bundles/org.eclipse.swt.opengl/.project
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.swt.opengl</name>
-	<comment></comment>
-	<projects>
-		<project>org.eclipse.swt</project>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.team.cvs.core.cvsnature</nature>
-	</natures>
-</projectDescription>
diff --git a/bundles/org.eclipse.swt.opengl/META-INF/MANIFEST.MF b/bundles/org.eclipse.swt.opengl/META-INF/MANIFEST.MF
deleted file mode 100644
index 8da336d..0000000
--- a/bundles/org.eclipse.swt.opengl/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,9 +0,0 @@
-Manifest-Version: 1.0
-Bundle-Name: %pluginName
-Bundle-Vendor: %providerName
-Bundle-SymbolicName: org.eclipse.swt.opengl; singleton=true
-Bundle-Version: 3.1.0
-Bundle-ClassPath: $ws$/opengl.jar
-Bundle-Localization: plugin
-Provide-Package: 
-  org.eclipse.swt.opengl
diff --git a/bundles/org.eclipse.swt.opengl/about.html b/bundles/org.eclipse.swt.opengl/about.html
deleted file mode 100644
index 6f6b96c..0000000
--- a/bundles/org.eclipse.swt.opengl/about.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>February 24, 2005</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt.opengl/carbon/library/agl.c b/bundles/org.eclipse.swt.opengl/carbon/library/agl.c
deleted file mode 100644
index 6b612c0..0000000
--- a/bundles/org.eclipse.swt.opengl/carbon/library/agl.c
+++ /dev/null
@@ -1,193 +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
-*******************************************************************************/
-
-#include "swt.h"
-#include "agl_structs.h"
-#include "agl_stats.h"
-
-#define AGL_NATIVE(func) Java_org_eclipse_swt_internal_opengl_carbon_AGL_##func
-
-#ifndef NO_aglChoosePixelFormat
-JNIEXPORT jint JNICALL AGL_NATIVE(aglChoosePixelFormat)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
-{
-	jint *lparg2=NULL;
-	jint rc = 0;
-	AGL_NATIVE_ENTER(env, that, aglChoosePixelFormat_FUNC);
-	if (arg2) if ((lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL)) == NULL) goto fail;
-	rc = (jint)aglChoosePixelFormat(arg0, arg1, lparg2);
-fail:
-	if (arg2 && lparg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	AGL_NATIVE_EXIT(env, that, aglChoosePixelFormat_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_aglCreateContext
-JNIEXPORT jint JNICALL AGL_NATIVE(aglCreateContext)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	jint rc = 0;
-	AGL_NATIVE_ENTER(env, that, aglCreateContext_FUNC);
-	rc = (jint)aglCreateContext(arg0, arg1);
-	AGL_NATIVE_EXIT(env, that, aglCreateContext_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_aglDescribePixelFormat
-JNIEXPORT jboolean JNICALL AGL_NATIVE(aglDescribePixelFormat)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
-{
-	jint *lparg2=NULL;
-	jboolean rc = 0;
-	AGL_NATIVE_ENTER(env, that, aglDescribePixelFormat_FUNC);
-	if (arg2) if ((lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL)) == NULL) goto fail;
-	rc = (jboolean)aglDescribePixelFormat(arg0, arg1, lparg2);
-fail:
-	if (arg2 && lparg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	AGL_NATIVE_EXIT(env, that, aglDescribePixelFormat_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_aglDestroyContext
-JNIEXPORT jboolean JNICALL AGL_NATIVE(aglDestroyContext)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	jboolean rc = 0;
-	AGL_NATIVE_ENTER(env, that, aglDestroyContext_FUNC);
-	rc = (jboolean)aglDestroyContext(arg0);
-	AGL_NATIVE_EXIT(env, that, aglDestroyContext_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_aglDestroyPixelFormat
-JNIEXPORT void JNICALL AGL_NATIVE(aglDestroyPixelFormat)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	AGL_NATIVE_ENTER(env, that, aglDestroyPixelFormat_FUNC);
-	aglDestroyPixelFormat(arg0);
-	AGL_NATIVE_EXIT(env, that, aglDestroyPixelFormat_FUNC);
-}
-#endif
-
-#ifndef NO_aglEnable
-JNIEXPORT jboolean JNICALL AGL_NATIVE(aglEnable)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	jboolean rc = 0;
-	AGL_NATIVE_ENTER(env, that, aglEnable_FUNC);
-	rc = (jboolean)aglEnable(arg0, arg1);
-	AGL_NATIVE_EXIT(env, that, aglEnable_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_aglGetCurrentContext
-JNIEXPORT jint JNICALL AGL_NATIVE(aglGetCurrentContext)
-	(JNIEnv *env, jclass that)
-{
-	jint rc = 0;
-	AGL_NATIVE_ENTER(env, that, aglGetCurrentContext_FUNC);
-	rc = (jint)aglGetCurrentContext();
-	AGL_NATIVE_EXIT(env, that, aglGetCurrentContext_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_aglGetDrawable
-JNIEXPORT jint JNICALL AGL_NATIVE(aglGetDrawable)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	jint rc = 0;
-	AGL_NATIVE_ENTER(env, that, aglGetDrawable_FUNC);
-	rc = (jint)aglGetDrawable(arg0);
-	AGL_NATIVE_EXIT(env, that, aglGetDrawable_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_aglSetCurrentContext
-JNIEXPORT jboolean JNICALL AGL_NATIVE(aglSetCurrentContext)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	jboolean rc = 0;
-	AGL_NATIVE_ENTER(env, that, aglSetCurrentContext_FUNC);
-	rc = (jboolean)aglSetCurrentContext(arg0);
-	AGL_NATIVE_EXIT(env, that, aglSetCurrentContext_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_aglSetDrawable
-JNIEXPORT jboolean JNICALL AGL_NATIVE(aglSetDrawable)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	jboolean rc = 0;
-	AGL_NATIVE_ENTER(env, that, aglSetDrawable_FUNC);
-	rc = (jboolean)aglSetDrawable(arg0, arg1);
-	AGL_NATIVE_EXIT(env, that, aglSetDrawable_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_aglSetInteger__III
-JNIEXPORT jboolean JNICALL AGL_NATIVE(aglSetInteger__III)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	jboolean rc = 0;
-	AGL_NATIVE_ENTER(env, that, aglSetInteger__III_FUNC);
-	rc = (jboolean)aglSetInteger(arg0, arg1, arg2);
-	AGL_NATIVE_EXIT(env, that, aglSetInteger__III_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_aglSetInteger__II_3I
-JNIEXPORT jboolean JNICALL AGL_NATIVE(aglSetInteger__II_3I)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
-{
-	jint *lparg2=NULL;
-	jboolean rc = 0;
-	AGL_NATIVE_ENTER(env, that, aglSetInteger__II_3I_FUNC);
-	if (arg2) if ((lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL)) == NULL) goto fail;
-	rc = (jboolean)aglSetInteger(arg0, arg1, lparg2);
-fail:
-	if (arg2 && lparg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	AGL_NATIVE_EXIT(env, that, aglSetInteger__II_3I_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_aglSwapBuffers
-JNIEXPORT void JNICALL AGL_NATIVE(aglSwapBuffers)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	AGL_NATIVE_ENTER(env, that, aglSwapBuffers_FUNC);
-	aglSwapBuffers(arg0);
-	AGL_NATIVE_EXIT(env, that, aglSwapBuffers_FUNC);
-}
-#endif
-
-#ifndef NO_aglUpdateContext
-JNIEXPORT jboolean JNICALL AGL_NATIVE(aglUpdateContext)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	jboolean rc = 0;
-	AGL_NATIVE_ENTER(env, that, aglUpdateContext_FUNC);
-	rc = (jboolean)aglUpdateContext(arg0);
-	AGL_NATIVE_EXIT(env, that, aglUpdateContext_FUNC);
-	return rc;
-}
-#endif
-
diff --git a/bundles/org.eclipse.swt.opengl/carbon/library/agl.h b/bundles/org.eclipse.swt.opengl/carbon/library/agl.h
deleted file mode 100644
index 9a87d42..0000000
--- a/bundles/org.eclipse.swt.opengl/carbon/library/agl.h
+++ /dev/null
@@ -1,3 +0,0 @@
-
-#include <OpenGL/gl.h>
-
diff --git a/bundles/org.eclipse.swt.opengl/carbon/library/agl_stats.c b/bundles/org.eclipse.swt.opengl/carbon/library/agl_stats.c
deleted file mode 100644
index c1f0167..0000000
--- a/bundles/org.eclipse.swt.opengl/carbon/library/agl_stats.c
+++ /dev/null
@@ -1,56 +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
-*******************************************************************************/
-
-#include "swt.h"
-#include "agl_stats.h"
-
-#ifdef NATIVE_STATS
-
-int AGL_nativeFunctionCount = 14;
-int AGL_nativeFunctionCallCount[14];
-char * AGL_nativeFunctionNames[] = {
-	"aglChoosePixelFormat",
-	"aglCreateContext",
-	"aglDescribePixelFormat",
-	"aglDestroyContext",
-	"aglDestroyPixelFormat",
-	"aglEnable",
-	"aglGetCurrentContext",
-	"aglGetDrawable",
-	"aglSetCurrentContext",
-	"aglSetDrawable",
-	"aglSetInteger__III",
-	"aglSetInteger__II_3I",
-	"aglSwapBuffers",
-	"aglUpdateContext",
-};
-
-#define STATS_NATIVE(func) Java_org_eclipse_swt_tools_internal_NativeStats_##func
-
-JNIEXPORT jint JNICALL STATS_NATIVE(AGL_1GetFunctionCount)
-	(JNIEnv *env, jclass that)
-{
-	return AGL_nativeFunctionCount;
-}
-
-JNIEXPORT jstring JNICALL STATS_NATIVE(AGL_1GetFunctionName)
-	(JNIEnv *env, jclass that, jint index)
-{
-	return (*env)->NewStringUTF(env, AGL_nativeFunctionNames[index]);
-}
-
-JNIEXPORT jint JNICALL STATS_NATIVE(AGL_1GetFunctionCallCount)
-	(JNIEnv *env, jclass that, jint index)
-{
-	return AGL_nativeFunctionCallCount[index];
-}
-
-#endif
diff --git a/bundles/org.eclipse.swt.opengl/carbon/library/agl_stats.h b/bundles/org.eclipse.swt.opengl/carbon/library/agl_stats.h
deleted file mode 100644
index fc359af..0000000
--- a/bundles/org.eclipse.swt.opengl/carbon/library/agl_stats.h
+++ /dev/null
@@ -1,38 +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
-*******************************************************************************/
-
-#ifdef NATIVE_STATS
-extern int AGL_nativeFunctionCount;
-extern int AGL_nativeFunctionCallCount[];
-extern char* AGL_nativeFunctionNames[];
-#define AGL_NATIVE_ENTER(env, that, func) AGL_nativeFunctionCallCount[func]++;
-#define AGL_NATIVE_EXIT(env, that, func) 
-#else
-#define AGL_NATIVE_ENTER(env, that, func) 
-#define AGL_NATIVE_EXIT(env, that, func) 
-#endif
-
-typedef enum {
-	aglChoosePixelFormat_FUNC,
-	aglCreateContext_FUNC,
-	aglDescribePixelFormat_FUNC,
-	aglDestroyContext_FUNC,
-	aglDestroyPixelFormat_FUNC,
-	aglEnable_FUNC,
-	aglGetCurrentContext_FUNC,
-	aglGetDrawable_FUNC,
-	aglSetCurrentContext_FUNC,
-	aglSetDrawable_FUNC,
-	aglSetInteger__III_FUNC,
-	aglSetInteger__II_3I_FUNC,
-	aglSwapBuffers_FUNC,
-	aglUpdateContext_FUNC,
-} AGL_FUNCS;
diff --git a/bundles/org.eclipse.swt.opengl/carbon/library/agl_structs.h b/bundles/org.eclipse.swt.opengl/carbon/library/agl_structs.h
deleted file mode 100644
index 36531f5..0000000
--- a/bundles/org.eclipse.swt.opengl/carbon/library/agl_structs.h
+++ /dev/null
@@ -1,13 +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
-*******************************************************************************/
-
-#include "agl.h"
-
diff --git a/bundles/org.eclipse.swt.opengl/carbon/org/eclipse/swt/internal/opengl/carbon/AGL.java b/bundles/org.eclipse.swt.opengl/carbon/org/eclipse/swt/internal/opengl/carbon/AGL.java
deleted file mode 100644
index 3c1339e..0000000
--- a/bundles/org.eclipse.swt.opengl/carbon/org/eclipse/swt/internal/opengl/carbon/AGL.java
+++ /dev/null
@@ -1,63 +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.internal.opengl.carbon;
-
-import org.eclipse.swt.opengl.Library;
-
-public class AGL {
-
-static {
-	Library.loadLibrary("gl");
-}
-
-/* Attributes */
-public static final int AGL_NONE = 0;
-public static final int AGL_BUFFER_SIZE = 2;
-public static final int AGL_LEVEL = 3;
-public static final int AGL_RGBA = 4;
-public static final int AGL_DOUBLEBUFFER = 5;
-public static final int AGL_STEREO = 6;
-public static final int AGL_AUX_BUFFERS = 7;
-public static final int AGL_RED_SIZE = 8;
-public static final int AGL_GREEN_SIZE = 9;
-public static final int AGL_BLUE_SIZE = 10;
-public static final int AGL_ALPHA_SIZE = 11;
-public static final int AGL_DEPTH_SIZE = 12;
-public static final int AGL_STENCIL_SIZE = 13;
-public static final int AGL_ACCUM_RED_SIZE = 14;
-public static final int AGL_ACCUM_GREEN_SIZE = 15;
-public static final int AGL_ACCUM_BLUE_SIZE = 16;
-public static final int AGL_ACCUM_ALPHA_SIZE = 17;
-
-public static final int AGL_SAMPLE_BUFFERS_ARB = 55;
-public static final int AGL_SAMPLES_ARB = 56;
-
-/* Integer parameters */
-public static final int AGL_BUFFER_RECT = 202;
-public static final int AGL_SWAP_INTERVAL = 222;
-public static final int AGL_BUFFER_NAME = 231;
-public static final int AGL_CLIP_REGION = 254;
-
-public static final native int aglChoosePixelFormat(int gdevs, int ndev, int[] attribs);
-public static final native int aglCreateContext(int pix, int share);
-public static final native boolean aglDescribePixelFormat(int pix, int attrib, int[] value);
-public static final native boolean aglDestroyContext(int ctx);
-public static final native void aglDestroyPixelFormat(int pix);
-public static final native boolean aglEnable(int ctx, int pname);
-public static final native int aglGetCurrentContext();
-public static final native int aglGetDrawable(int ctx);
-public static final native boolean aglSetCurrentContext(int ctx);
-public static final native boolean aglSetDrawable(int ctx, int draw);
-public static final native boolean aglSetInteger(int ctx, int pname, int[] params);
-public static final native boolean aglSetInteger(int ctx, int pname, int param);
-public static final native void aglSwapBuffers(int ctx);
-public static final native boolean aglUpdateContext(int ctx);
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt.opengl/carbon/org/eclipse/swt/opengl/GLCanvas.java b/bundles/org.eclipse.swt.opengl/carbon/org/eclipse/swt/opengl/GLCanvas.java
deleted file mode 100755
index ebfc775..0000000
--- a/bundles/org.eclipse.swt.opengl/carbon/org/eclipse/swt/opengl/GLCanvas.java
+++ /dev/null
@@ -1,255 +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.opengl;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.internal.carbon.*;
-import org.eclipse.swt.internal.opengl.carbon.*;
-
-/**
- * GLCanvas is a widget capable of displaying OpenGL content.
- */
-
-public class GLCanvas extends Canvas {	
-	int context;
-	int pixelFormat;
-	static final int MAX_ATTRIBUTES = 32;
-
-/**
- * Create a GLCanvas widget using the attributes described in the GLData
- * object provided.
- *
- * @param parent a composite widget
- * @param style the bitwise OR'ing of widget styles
- * @param data the requested attributes of the GLCanvas
- *
- * @exception IllegalArgumentException
- * <ul><li>ERROR_NULL_ARGUMENT when the data is null
- *     <li>ERROR_UNSUPPORTED_DEPTH when the requested attributes cannot be provided</ul> 
- * @exception SWTException
- * <ul><li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread
- *     <li>ERROR_CANNOT_CREATE_OBJECT when failed to create OLE Object
- *     <li>ERROR_CANNOT_OPEN_FILE when failed to open file
- *     <li>ERROR_INTERFACE_NOT_FOUND when unable to create callbacks for OLE Interfaces
- *     <li>ERROR_INVALID_CLASSID
- * </ul>
- */
-public GLCanvas (Composite parent, int style, GLData data) {
-	super (parent, style);
-	if (data == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
-	int aglAttrib [] = new int [MAX_ATTRIBUTES];
-	int pos = 0;
-	aglAttrib [pos++] = AGL.AGL_RGBA;
-	if (data.doubleBuffer) aglAttrib [pos++] = AGL.AGL_DOUBLEBUFFER;
-	if (data.stereo) aglAttrib [pos++] = AGL.AGL_STEREO;
-	if (data.redSize > 0) {
-		aglAttrib [pos++] = AGL.AGL_RED_SIZE;
-		aglAttrib [pos++] = data.redSize;
-	}
-	if (data.greenSize > 0) {
-		aglAttrib [pos++] = AGL.AGL_GREEN_SIZE;
-		aglAttrib [pos++] = data.greenSize;
-	}
-	if (data.blueSize > 0) {
-		aglAttrib [pos++] = AGL.AGL_BLUE_SIZE;
-		aglAttrib [pos++] = data.blueSize;
-	}
-	if (data.alphaSize > 0) {
-		aglAttrib [pos++] = AGL.AGL_ALPHA_SIZE;
-		aglAttrib [pos++] = data.alphaSize;
-	}
-	if (data.depthSize > 0) {
-		aglAttrib [pos++] = AGL.AGL_DEPTH_SIZE;
-		aglAttrib [pos++] = data.depthSize;
-	}
-	if (data.stencilSize > 0) {
-		aglAttrib [pos++] = AGL.AGL_STENCIL_SIZE;
-		aglAttrib [pos++] = data.stencilSize;
-	}
-	if (data.accumRedSize > 0) {
-		aglAttrib [pos++] = AGL.AGL_ACCUM_RED_SIZE;
-		aglAttrib [pos++] = data.accumRedSize;
-	}
-	if (data.accumGreenSize > 0) {
-		aglAttrib [pos++] = AGL.AGL_ACCUM_GREEN_SIZE;
-		aglAttrib [pos++] = data.accumGreenSize;
-	}
-	if (data.accumBlueSize > 0) {
-		aglAttrib [pos++] = AGL.AGL_ACCUM_BLUE_SIZE;
-		aglAttrib [pos++] = data.accumBlueSize;
-	}
-	if (data.accumAlphaSize > 0) {
-		aglAttrib [pos++] = AGL.AGL_ACCUM_ALPHA_SIZE;
-		aglAttrib [pos++] = data.accumAlphaSize;
-	}
-	if (data.sampleBuffers > 0) {
-		aglAttrib [pos++] = AGL.AGL_SAMPLE_BUFFERS_ARB;
-		aglAttrib [pos++] = data.sampleBuffers;
-	}
-	if (data.samples > 0) {
-		aglAttrib [pos++] = AGL.AGL_SAMPLES_ARB;
-		aglAttrib [pos++] = data.samples;
-	}
-	aglAttrib [pos++] = AGL.AGL_NONE;
-	pixelFormat = AGL.aglChoosePixelFormat (0, 0, aglAttrib);
-//	context = AGL.aglCreateContext (pixelFormat, share == null ? 0 : share.context);
-	context = AGL.aglCreateContext (pixelFormat, 0);
-	int window = OS.GetControlOwner (handle);
-	int port = OS.GetWindowPort (window);
-	AGL.aglSetDrawable (context, port);
-
-	Listener listener = new Listener () {
-		public void handleEvent (Event event) {
-			switch (event.type) {
-			case SWT.Dispose:
-				AGL.aglDestroyContext (context);
-				AGL.aglDestroyPixelFormat (pixelFormat);
-				break;
-			case SWT.Resize:
-			case SWT.Hide:
-			case SWT.Show:
-				getDisplay().asyncExec(new Runnable() {
-					public void run() {
-						fixBounds();
-					}
-				});
-				break;
-			}
-		}
-	};
-	addListener (SWT.Resize, listener);
-	Shell shell = getShell();
-	shell.addListener(SWT.Resize, listener);
-	shell.addListener(SWT.Show, listener);
-	shell.addListener(SWT.Hide, listener);
-	Control c = this;
-	do {
-		c.addListener(SWT.Show, listener);
-		c.addListener(SWT.Hide, listener);
-		c = c.getParent();
-	} while (c != shell);
-	addListener (SWT.Dispose, listener);
-}
-
-void fixBounds () {
-	GCData data = new GCData ();
-	int gc = internal_new_GC (data);
-	Rect bounds = new Rect ();
-	OS.GetRegionBounds (data.visibleRgn, bounds);
-	int width = bounds.right - bounds.left;
-	int height = bounds.bottom - bounds.top;
-	Rect rect = new Rect ();
-	int window = OS.GetControlOwner (handle);
-	int port = OS.GetWindowPort (window);
-	OS.GetPortBounds (port, rect);
-	int [] glbounds = new int [4];
-	glbounds[0] = bounds.left;
-	glbounds[1] = rect.bottom - rect.top - bounds.top - height;
-	glbounds[2] = width;
-	glbounds[3] = height;
-	AGL.aglSetInteger (context, AGL.AGL_BUFFER_RECT, glbounds);
-	AGL.aglEnable (context, AGL.AGL_BUFFER_RECT);
-	AGL.aglSetInteger (context, AGL.AGL_CLIP_REGION, data.visibleRgn);
-	AGL.aglUpdateContext (context);
-	internal_dispose_GC (gc, data);
-}
-
-/**
- * Returns a GLData object describing the created context.
- *  
- * @return GLData description of the OpenGL context attributes
- * @exception SWTException <ul>
- *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
-public GLData getGLData () {
-	checkWidget ();
-	GLData data = new GLData ();
-	int [] value = new int [1];
-	AGL.aglDescribePixelFormat (pixelFormat, AGL.AGL_DOUBLEBUFFER, value);
-	data.doubleBuffer = value [0] != 0;
-	AGL.aglDescribePixelFormat (pixelFormat, AGL.AGL_STEREO, value);
-	data.stereo = value [0] != 0;
-	AGL.aglDescribePixelFormat (pixelFormat, AGL.AGL_RED_SIZE, value);
-	data.redSize = value [0];
-	AGL.aglDescribePixelFormat (pixelFormat, AGL.AGL_GREEN_SIZE, value);
-	data.greenSize = value [0];
-	AGL.aglDescribePixelFormat (pixelFormat, AGL.AGL_BLUE_SIZE, value);
-	data.blueSize = value [0];
-	AGL.aglDescribePixelFormat (pixelFormat, AGL.AGL_ALPHA_SIZE, value);
-	data.alphaSize = value [0];
-	AGL.aglDescribePixelFormat (pixelFormat, AGL.AGL_DEPTH_SIZE, value);
-	data.depthSize = value [0];
-	AGL.aglDescribePixelFormat (pixelFormat, AGL.AGL_STENCIL_SIZE, value);
-	data.stencilSize = value [0];
-	AGL.aglDescribePixelFormat (pixelFormat, AGL.AGL_ACCUM_RED_SIZE, value);
-	data.accumRedSize = value [0];
-	AGL.aglDescribePixelFormat (pixelFormat, AGL.AGL_ACCUM_GREEN_SIZE, value);
-	data.accumGreenSize = value [0];
-	AGL.aglDescribePixelFormat (pixelFormat, AGL.AGL_ACCUM_BLUE_SIZE, value);
-	data.accumBlueSize = value [0];
-	AGL.aglDescribePixelFormat (pixelFormat, AGL.AGL_ACCUM_ALPHA_SIZE, value);
-	data.accumAlphaSize = value [0];
-	AGL.aglDescribePixelFormat (pixelFormat, AGL.AGL_SAMPLE_BUFFERS_ARB, value);
-	data.sampleBuffers = value [0];
-	AGL.aglDescribePixelFormat (pixelFormat, AGL.AGL_SAMPLES_ARB, value);
-	data.samples = value [0];
-	return data;
-}
-
-/**
- * Returns a boolean indicating whether the receiver's OpenGL context
- * is the current context.
- *  
- * @return true if the receiver holds the current OpenGL context,
- * false otherwise
- * @exception SWTException <ul>
- *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
-public boolean isCurrent () {
-	checkWidget ();
-	return AGL.aglGetCurrentContext () == context;
-}
-
-/**
- * Sets the OpenGL context associated with this GLCanvas to be the
- * current GL context.
- * 
- * @exception SWTException <ul>
- *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
-public void setCurrent () {
-	checkWidget ();
-	if (AGL.aglGetCurrentContext () != context) {
-		AGL.aglSetCurrentContext (context);
-	}
-}
-
-/**
- * Swaps the front and back color buffers.
- * 
- * @exception SWTException <ul>
- *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
-public void swapBuffers () {
-	checkWidget ();
-	AGL.aglSwapBuffers (context);
-}
-}
diff --git a/bundles/org.eclipse.swt.opengl/common/library/gl.c b/bundles/org.eclipse.swt.opengl/common/library/gl.c
deleted file mode 100644
index 18b5e9f..0000000
--- a/bundles/org.eclipse.swt.opengl/common/library/gl.c
+++ /dev/null
@@ -1,5927 +0,0 @@
-#include "swt.h"
-#include "gl_structs.h"
-#include "gl_stats.h"
-
-#define GL_NATIVE(func) Java_org_eclipse_opengl_GL_##func
-
-#ifndef NO_glAccum
-JNIEXPORT void JNICALL GL_NATIVE(glAccum)
-	(JNIEnv *env, jclass that, jint arg0, jfloat arg1)
-{
-	GL_NATIVE_ENTER(env, that, glAccum_FUNC);
-	glAccum(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glAccum_FUNC);
-}
-#endif
-
-#ifndef NO_glAlphaFunc
-JNIEXPORT void JNICALL GL_NATIVE(glAlphaFunc)
-	(JNIEnv *env, jclass that, jint arg0, jfloat arg1)
-{
-	GL_NATIVE_ENTER(env, that, glAlphaFunc_FUNC);
-	glAlphaFunc(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glAlphaFunc_FUNC);
-}
-#endif
-
-#ifndef NO_glAreTexturesResident
-JNIEXPORT jboolean JNICALL GL_NATIVE(glAreTexturesResident)
-	(JNIEnv *env, jclass that, jint arg0, jintArray arg1, jbooleanArray arg2)
-{
-	jint *lparg1=NULL;
-	jboolean *lparg2=NULL;
-	jboolean rc;
-	GL_NATIVE_ENTER(env, that, glAreTexturesResident_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL);
-		if (arg2) lparg2 = (*env)->GetBooleanArrayElements(env, arg2, NULL);
-	}
-	rc = (jboolean)glAreTexturesResident(arg0, (const GLuint *)lparg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseBooleanArrayElements(env, arg2, lparg2, 0);
-		if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glAreTexturesResident_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_glArrayElement
-JNIEXPORT void JNICALL GL_NATIVE(glArrayElement)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glArrayElement_FUNC);
-	glArrayElement(arg0);
-	GL_NATIVE_EXIT(env, that, glArrayElement_FUNC);
-}
-#endif
-
-#ifndef NO_glBegin
-JNIEXPORT void JNICALL GL_NATIVE(glBegin)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glBegin_FUNC);
-	glBegin(arg0);
-	GL_NATIVE_EXIT(env, that, glBegin_FUNC);
-}
-#endif
-
-#ifndef NO_glBindTexture
-JNIEXPORT void JNICALL GL_NATIVE(glBindTexture)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GL_NATIVE_ENTER(env, that, glBindTexture_FUNC);
-	glBindTexture(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glBindTexture_FUNC);
-}
-#endif
-
-#ifndef NO_glBitmap
-JNIEXPORT void JNICALL GL_NATIVE(glBitmap)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloat arg2, jfloat arg3, jfloat arg4, jfloat arg5, jbyteArray arg6)
-{
-	jbyte *lparg6=NULL;
-	GL_NATIVE_ENTER(env, that, glBitmap_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg6) lparg6 = (*env)->GetPrimitiveArrayCritical(env, arg6, NULL);
-	} else
-#endif
-	{
-		if (arg6) lparg6 = (*env)->GetByteArrayElements(env, arg6, NULL);
-	}
-	glBitmap(arg0, arg1, arg2, arg3, arg4, arg5, (const GLubyte *)lparg6);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg6) (*env)->ReleasePrimitiveArrayCritical(env, arg6, lparg6, 0);
-	} else
-#endif
-	{
-		if (arg6) (*env)->ReleaseByteArrayElements(env, arg6, lparg6, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glBitmap_FUNC);
-}
-#endif
-
-#ifndef NO_glBlendFunc
-JNIEXPORT void JNICALL GL_NATIVE(glBlendFunc)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GL_NATIVE_ENTER(env, that, glBlendFunc_FUNC);
-	glBlendFunc(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glBlendFunc_FUNC);
-}
-#endif
-
-#ifndef NO_glCallList
-JNIEXPORT void JNICALL GL_NATIVE(glCallList)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glCallList_FUNC);
-	glCallList(arg0);
-	GL_NATIVE_EXIT(env, that, glCallList_FUNC);
-}
-#endif
-
-#ifndef NO_glCallLists__II_3B
-JNIEXPORT void JNICALL GL_NATIVE(glCallLists__II_3B)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jbyteArray arg2)
-{
-	jbyte *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glCallLists__II_3B_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetByteArrayElements(env, arg2, NULL);
-	}
-	glCallLists(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseByteArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glCallLists__II_3B_FUNC);
-}
-#endif
-
-#ifndef NO_glCallLists__II_3C
-JNIEXPORT void JNICALL GL_NATIVE(glCallLists__II_3C)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jcharArray arg2)
-{
-	jchar *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glCallLists__II_3C_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetCharArrayElements(env, arg2, NULL);
-	}
-	glCallLists(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseCharArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glCallLists__II_3C_FUNC);
-}
-#endif
-
-#ifndef NO_glCallLists__II_3I
-JNIEXPORT void JNICALL GL_NATIVE(glCallLists__II_3I)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
-{
-	jint *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glCallLists__II_3I_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
-	}
-	glCallLists(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glCallLists__II_3I_FUNC);
-}
-#endif
-
-#ifndef NO_glClear
-JNIEXPORT void JNICALL GL_NATIVE(glClear)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glClear_FUNC);
-	glClear(arg0);
-	GL_NATIVE_EXIT(env, that, glClear_FUNC);
-}
-#endif
-
-#ifndef NO_glClearAccum
-JNIEXPORT void JNICALL GL_NATIVE(glClearAccum)
-	(JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2, jfloat arg3)
-{
-	GL_NATIVE_ENTER(env, that, glClearAccum_FUNC);
-	glClearAccum(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glClearAccum_FUNC);
-}
-#endif
-
-#ifndef NO_glClearColor
-JNIEXPORT void JNICALL GL_NATIVE(glClearColor)
-	(JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2, jfloat arg3)
-{
-	GL_NATIVE_ENTER(env, that, glClearColor_FUNC);
-	glClearColor(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glClearColor_FUNC);
-}
-#endif
-
-#ifndef NO_glClearDepth
-JNIEXPORT void JNICALL GL_NATIVE(glClearDepth)
-	(JNIEnv *env, jclass that, jdouble arg0)
-{
-	GL_NATIVE_ENTER(env, that, glClearDepth_FUNC);
-	glClearDepth(arg0);
-	GL_NATIVE_EXIT(env, that, glClearDepth_FUNC);
-}
-#endif
-
-#ifndef NO_glClearIndex
-JNIEXPORT void JNICALL GL_NATIVE(glClearIndex)
-	(JNIEnv *env, jclass that, jfloat arg0)
-{
-	GL_NATIVE_ENTER(env, that, glClearIndex_FUNC);
-	glClearIndex(arg0);
-	GL_NATIVE_EXIT(env, that, glClearIndex_FUNC);
-}
-#endif
-
-#ifndef NO_glClearStencil
-JNIEXPORT void JNICALL GL_NATIVE(glClearStencil)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glClearStencil_FUNC);
-	glClearStencil(arg0);
-	GL_NATIVE_EXIT(env, that, glClearStencil_FUNC);
-}
-#endif
-
-#ifndef NO_glClipPlane
-JNIEXPORT void JNICALL GL_NATIVE(glClipPlane)
-	(JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1)
-{
-	jdouble *lparg1=NULL;
-	GL_NATIVE_ENTER(env, that, glClipPlane_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-	} else
-#endif
-	{
-		if (arg1) lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL);
-	}
-	glClipPlane(arg0, lparg1);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-	} else
-#endif
-	{
-		if (arg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glClipPlane_FUNC);
-}
-#endif
-
-#ifndef NO_glColor3b
-JNIEXPORT void JNICALL GL_NATIVE(glColor3b)
-	(JNIEnv *env, jclass that, jbyte arg0, jbyte arg1, jbyte arg2)
-{
-	GL_NATIVE_ENTER(env, that, glColor3b_FUNC);
-	glColor3b(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glColor3b_FUNC);
-}
-#endif
-
-#ifndef NO_glColor3bv
-JNIEXPORT void JNICALL GL_NATIVE(glColor3bv)
-	(JNIEnv *env, jclass that, jbyteArray arg0)
-{
-	jbyte *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glColor3bv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL);
-	}
-	glColor3bv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glColor3bv_FUNC);
-}
-#endif
-
-#ifndef NO_glColor3d
-JNIEXPORT void JNICALL GL_NATIVE(glColor3d)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2)
-{
-	GL_NATIVE_ENTER(env, that, glColor3d_FUNC);
-	glColor3d(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glColor3d_FUNC);
-}
-#endif
-
-#ifndef NO_glColor3dv
-JNIEXPORT void JNICALL GL_NATIVE(glColor3dv)
-	(JNIEnv *env, jclass that, jdoubleArray arg0)
-{
-	jdouble *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glColor3dv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
-	}
-	glColor3dv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glColor3dv_FUNC);
-}
-#endif
-
-#ifndef NO_glColor3f
-JNIEXPORT void JNICALL GL_NATIVE(glColor3f)
-	(JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2)
-{
-	GL_NATIVE_ENTER(env, that, glColor3f_FUNC);
-	glColor3f(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glColor3f_FUNC);
-}
-#endif
-
-#ifndef NO_glColor3fv
-JNIEXPORT void JNICALL GL_NATIVE(glColor3fv)
-	(JNIEnv *env, jclass that, jfloatArray arg0)
-{
-	jfloat *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glColor3fv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
-	}
-	glColor3fv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glColor3fv_FUNC);
-}
-#endif
-
-#ifndef NO_glColor3i
-JNIEXPORT void JNICALL GL_NATIVE(glColor3i)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	GL_NATIVE_ENTER(env, that, glColor3i_FUNC);
-	glColor3i(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glColor3i_FUNC);
-}
-#endif
-
-#ifndef NO_glColor3iv
-JNIEXPORT void JNICALL GL_NATIVE(glColor3iv)
-	(JNIEnv *env, jclass that, jintArray arg0)
-{
-	jint *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glColor3iv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
-	}
-	glColor3iv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glColor3iv_FUNC);
-}
-#endif
-
-#ifndef NO_glColor3s
-JNIEXPORT void JNICALL GL_NATIVE(glColor3s)
-	(JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2)
-{
-	GL_NATIVE_ENTER(env, that, glColor3s_FUNC);
-	glColor3s(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glColor3s_FUNC);
-}
-#endif
-
-#ifndef NO_glColor3sv
-JNIEXPORT void JNICALL GL_NATIVE(glColor3sv)
-	(JNIEnv *env, jclass that, jshortArray arg0)
-{
-	jshort *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glColor3sv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
-	}
-	glColor3sv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glColor3sv_FUNC);
-}
-#endif
-
-#ifndef NO_glColor3ub
-JNIEXPORT void JNICALL GL_NATIVE(glColor3ub)
-	(JNIEnv *env, jclass that, jbyte arg0, jbyte arg1, jbyte arg2)
-{
-	GL_NATIVE_ENTER(env, that, glColor3ub_FUNC);
-	glColor3ub(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glColor3ub_FUNC);
-}
-#endif
-
-#ifndef NO_glColor3ubv
-JNIEXPORT void JNICALL GL_NATIVE(glColor3ubv)
-	(JNIEnv *env, jclass that, jbyteArray arg0)
-{
-	jbyte *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glColor3ubv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL);
-	}
-	glColor3ubv((const GLubyte *)lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glColor3ubv_FUNC);
-}
-#endif
-
-#ifndef NO_glColor3ui
-JNIEXPORT void JNICALL GL_NATIVE(glColor3ui)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	GL_NATIVE_ENTER(env, that, glColor3ui_FUNC);
-	glColor3ui(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glColor3ui_FUNC);
-}
-#endif
-
-#ifndef NO_glColor3uiv
-JNIEXPORT void JNICALL GL_NATIVE(glColor3uiv)
-	(JNIEnv *env, jclass that, jintArray arg0)
-{
-	jint *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glColor3uiv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
-	}
-	glColor3uiv((const GLuint *)lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glColor3uiv_FUNC);
-}
-#endif
-
-#ifndef NO_glColor3us
-JNIEXPORT void JNICALL GL_NATIVE(glColor3us)
-	(JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2)
-{
-	GL_NATIVE_ENTER(env, that, glColor3us_FUNC);
-	glColor3us(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glColor3us_FUNC);
-}
-#endif
-
-#ifndef NO_glColor3usv
-JNIEXPORT void JNICALL GL_NATIVE(glColor3usv)
-	(JNIEnv *env, jclass that, jshortArray arg0)
-{
-	jshort *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glColor3usv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
-	}
-	glColor3usv((const GLushort *)lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glColor3usv_FUNC);
-}
-#endif
-
-#ifndef NO_glColor4b
-JNIEXPORT void JNICALL GL_NATIVE(glColor4b)
-	(JNIEnv *env, jclass that, jbyte arg0, jbyte arg1, jbyte arg2, jbyte arg3)
-{
-	GL_NATIVE_ENTER(env, that, glColor4b_FUNC);
-	glColor4b(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glColor4b_FUNC);
-}
-#endif
-
-#ifndef NO_glColor4bv
-JNIEXPORT void JNICALL GL_NATIVE(glColor4bv)
-	(JNIEnv *env, jclass that, jbyteArray arg0)
-{
-	jbyte *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glColor4bv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL);
-	}
-	glColor4bv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glColor4bv_FUNC);
-}
-#endif
-
-#ifndef NO_glColor4d
-JNIEXPORT void JNICALL GL_NATIVE(glColor4d)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3)
-{
-	GL_NATIVE_ENTER(env, that, glColor4d_FUNC);
-	glColor4d(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glColor4d_FUNC);
-}
-#endif
-
-#ifndef NO_glColor4dv
-JNIEXPORT void JNICALL GL_NATIVE(glColor4dv)
-	(JNIEnv *env, jclass that, jdoubleArray arg0)
-{
-	jdouble *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glColor4dv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
-	}
-	glColor4dv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glColor4dv_FUNC);
-}
-#endif
-
-#ifndef NO_glColor4f
-JNIEXPORT void JNICALL GL_NATIVE(glColor4f)
-	(JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2, jfloat arg3)
-{
-	GL_NATIVE_ENTER(env, that, glColor4f_FUNC);
-	glColor4f(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glColor4f_FUNC);
-}
-#endif
-
-#ifndef NO_glColor4fv
-JNIEXPORT void JNICALL GL_NATIVE(glColor4fv)
-	(JNIEnv *env, jclass that, jfloatArray arg0)
-{
-	jfloat *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glColor4fv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
-	}
-	glColor4fv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glColor4fv_FUNC);
-}
-#endif
-
-#ifndef NO_glColor4i
-JNIEXPORT void JNICALL GL_NATIVE(glColor4i)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
-{
-	GL_NATIVE_ENTER(env, that, glColor4i_FUNC);
-	glColor4i(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glColor4i_FUNC);
-}
-#endif
-
-#ifndef NO_glColor4iv
-JNIEXPORT void JNICALL GL_NATIVE(glColor4iv)
-	(JNIEnv *env, jclass that, jintArray arg0)
-{
-	jint *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glColor4iv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
-	}
-	glColor4iv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glColor4iv_FUNC);
-}
-#endif
-
-#ifndef NO_glColor4s
-JNIEXPORT void JNICALL GL_NATIVE(glColor4s)
-	(JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2, jshort arg3)
-{
-	GL_NATIVE_ENTER(env, that, glColor4s_FUNC);
-	glColor4s(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glColor4s_FUNC);
-}
-#endif
-
-#ifndef NO_glColor4ub
-JNIEXPORT void JNICALL GL_NATIVE(glColor4ub)
-	(JNIEnv *env, jclass that, jbyte arg0, jbyte arg1, jbyte arg2, jbyte arg3)
-{
-	GL_NATIVE_ENTER(env, that, glColor4ub_FUNC);
-	glColor4ub(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glColor4ub_FUNC);
-}
-#endif
-
-#ifndef NO_glColor4ubv
-JNIEXPORT void JNICALL GL_NATIVE(glColor4ubv)
-	(JNIEnv *env, jclass that, jbyteArray arg0)
-{
-	jbyte *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glColor4ubv_FUNC);
-	if (arg0) lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL);
-	glColor4ubv((const GLubyte *)lparg0);
-	if (arg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
-	GL_NATIVE_EXIT(env, that, glColor4ubv_FUNC);
-}
-#endif
-
-#ifndef NO_glColor4ui
-JNIEXPORT void JNICALL GL_NATIVE(glColor4ui)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
-{
-	GL_NATIVE_ENTER(env, that, glColor4ui_FUNC);
-	glColor4ui(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glColor4ui_FUNC);
-}
-#endif
-
-#ifndef NO_glColor4uiv
-JNIEXPORT void JNICALL GL_NATIVE(glColor4uiv)
-	(JNIEnv *env, jclass that, jintArray arg0)
-{
-	jint *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glColor4uiv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
-	}
-	glColor4uiv((const GLuint *)lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glColor4uiv_FUNC);
-}
-#endif
-
-#ifndef NO_glColor4us
-JNIEXPORT void JNICALL GL_NATIVE(glColor4us)
-	(JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2, jshort arg3)
-{
-	GL_NATIVE_ENTER(env, that, glColor4us_FUNC);
-	glColor4us(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glColor4us_FUNC);
-}
-#endif
-
-#ifndef NO_glColor4usv
-JNIEXPORT void JNICALL GL_NATIVE(glColor4usv)
-	(JNIEnv *env, jclass that, jshortArray arg0)
-{
-	jshort *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glColor4usv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
-	}
-	glColor4usv((const GLushort *)lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glColor4usv_FUNC);
-}
-#endif
-
-#ifndef NO_glColorMask
-JNIEXPORT void JNICALL GL_NATIVE(glColorMask)
-	(JNIEnv *env, jclass that, jboolean arg0, jboolean arg1, jboolean arg2, jboolean arg3)
-{
-	GL_NATIVE_ENTER(env, that, glColorMask_FUNC);
-	glColorMask(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glColorMask_FUNC);
-}
-#endif
-
-#ifndef NO_glColorMaterial
-JNIEXPORT void JNICALL GL_NATIVE(glColorMaterial)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GL_NATIVE_ENTER(env, that, glColorMaterial_FUNC);
-	glColorMaterial(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glColorMaterial_FUNC);
-}
-#endif
-
-#ifndef NO_glColorPointer
-JNIEXPORT void JNICALL GL_NATIVE(glColorPointer)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jintArray arg3)
-{
-	jint *lparg3=NULL;
-	GL_NATIVE_ENTER(env, that, glColorPointer_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg3) lparg3 = (*env)->GetPrimitiveArrayCritical(env, arg3, NULL);
-	} else
-#endif
-	{
-		if (arg3) lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL);
-	}
-	glColorPointer(arg0, arg1, arg2, lparg3);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg3) (*env)->ReleasePrimitiveArrayCritical(env, arg3, lparg3, 0);
-	} else
-#endif
-	{
-		if (arg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glColorPointer_FUNC);
-}
-#endif
-
-#ifndef NO_glCopyPixels
-JNIEXPORT void JNICALL GL_NATIVE(glCopyPixels)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4)
-{
-	GL_NATIVE_ENTER(env, that, glCopyPixels_FUNC);
-	glCopyPixels(arg0, arg1, arg2, arg3, arg4);
-	GL_NATIVE_EXIT(env, that, glCopyPixels_FUNC);
-}
-#endif
-
-#ifndef NO_glCopyTexImage1D
-JNIEXPORT void JNICALL GL_NATIVE(glCopyTexImage1D)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5, jint arg6)
-{
-	GL_NATIVE_ENTER(env, that, glCopyTexImage1D_FUNC);
-	glCopyTexImage1D(arg0, arg1, arg2, arg3, arg4, arg5, arg6);
-	GL_NATIVE_EXIT(env, that, glCopyTexImage1D_FUNC);
-}
-#endif
-
-#ifndef NO_glCopyTexImage2D
-JNIEXPORT void JNICALL GL_NATIVE(glCopyTexImage2D)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5, jint arg6, jint arg7)
-{
-	GL_NATIVE_ENTER(env, that, glCopyTexImage2D_FUNC);
-	glCopyTexImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
-	GL_NATIVE_EXIT(env, that, glCopyTexImage2D_FUNC);
-}
-#endif
-
-#ifndef NO_glCopyTexSubImage1D
-JNIEXPORT void JNICALL GL_NATIVE(glCopyTexSubImage1D)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5)
-{
-	GL_NATIVE_ENTER(env, that, glCopyTexSubImage1D_FUNC);
-	glCopyTexSubImage1D(arg0, arg1, arg2, arg3, arg4, arg5);
-	GL_NATIVE_EXIT(env, that, glCopyTexSubImage1D_FUNC);
-}
-#endif
-
-#ifndef NO_glCopyTexSubImage2D
-JNIEXPORT void JNICALL GL_NATIVE(glCopyTexSubImage2D)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5, jint arg6, jint arg7)
-{
-	GL_NATIVE_ENTER(env, that, glCopyTexSubImage2D_FUNC);
-	glCopyTexSubImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
-	GL_NATIVE_EXIT(env, that, glCopyTexSubImage2D_FUNC);
-}
-#endif
-
-#ifndef NO_glCullFace
-JNIEXPORT void JNICALL GL_NATIVE(glCullFace)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glCullFace_FUNC);
-	glCullFace(arg0);
-	GL_NATIVE_EXIT(env, that, glCullFace_FUNC);
-}
-#endif
-
-#ifndef NO_glDeleteLists
-JNIEXPORT void JNICALL GL_NATIVE(glDeleteLists)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GL_NATIVE_ENTER(env, that, glDeleteLists_FUNC);
-	glDeleteLists(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glDeleteLists_FUNC);
-}
-#endif
-
-#ifndef NO_glDeleteTextures
-JNIEXPORT void JNICALL GL_NATIVE(glDeleteTextures)
-	(JNIEnv *env, jclass that, jint arg0, jintArray arg1)
-{
-	jint *lparg1=NULL;
-	GL_NATIVE_ENTER(env, that, glDeleteTextures_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-	} else
-#endif
-	{
-		if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL);
-	}
-	glDeleteTextures(arg0, (const GLuint *)lparg1);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-	} else
-#endif
-	{
-		if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glDeleteTextures_FUNC);
-}
-#endif
-
-#ifndef NO_glDepthFunc
-JNIEXPORT void JNICALL GL_NATIVE(glDepthFunc)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glDepthFunc_FUNC);
-	glDepthFunc(arg0);
-	GL_NATIVE_EXIT(env, that, glDepthFunc_FUNC);
-}
-#endif
-
-#ifndef NO_glDepthMask
-JNIEXPORT void JNICALL GL_NATIVE(glDepthMask)
-	(JNIEnv *env, jclass that, jboolean arg0)
-{
-	GL_NATIVE_ENTER(env, that, glDepthMask_FUNC);
-	glDepthMask(arg0);
-	GL_NATIVE_EXIT(env, that, glDepthMask_FUNC);
-}
-#endif
-
-#ifndef NO_glDepthRange
-JNIEXPORT void JNICALL GL_NATIVE(glDepthRange)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1)
-{
-	GL_NATIVE_ENTER(env, that, glDepthRange_FUNC);
-	glDepthRange(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glDepthRange_FUNC);
-}
-#endif
-
-#ifndef NO_glDisable
-JNIEXPORT void JNICALL GL_NATIVE(glDisable)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glDisable_FUNC);
-	glDisable(arg0);
-	GL_NATIVE_EXIT(env, that, glDisable_FUNC);
-}
-#endif
-
-#ifndef NO_glDisableClientState
-JNIEXPORT void JNICALL GL_NATIVE(glDisableClientState)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glDisableClientState_FUNC);
-	glDisableClientState(arg0);
-	GL_NATIVE_EXIT(env, that, glDisableClientState_FUNC);
-}
-#endif
-
-#ifndef NO_glDrawArrays
-JNIEXPORT void JNICALL GL_NATIVE(glDrawArrays)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	GL_NATIVE_ENTER(env, that, glDrawArrays_FUNC);
-	glDrawArrays(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glDrawArrays_FUNC);
-}
-#endif
-
-#ifndef NO_glDrawBuffer
-JNIEXPORT void JNICALL GL_NATIVE(glDrawBuffer)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glDrawBuffer_FUNC);
-	glDrawBuffer(arg0);
-	GL_NATIVE_EXIT(env, that, glDrawBuffer_FUNC);
-}
-#endif
-
-#ifndef NO_glDrawElements
-JNIEXPORT void JNICALL GL_NATIVE(glDrawElements)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jintArray arg3)
-{
-	jint *lparg3=NULL;
-	GL_NATIVE_ENTER(env, that, glDrawElements_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg3) lparg3 = (*env)->GetPrimitiveArrayCritical(env, arg3, NULL);
-	} else
-#endif
-	{
-		if (arg3) lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL);
-	}
-	glDrawElements(arg0, arg1, arg2, lparg3);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg3) (*env)->ReleasePrimitiveArrayCritical(env, arg3, lparg3, 0);
-	} else
-#endif
-	{
-		if (arg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glDrawElements_FUNC);
-}
-#endif
-
-#ifndef NO_glDrawPixels
-JNIEXPORT void JNICALL GL_NATIVE(glDrawPixels)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jintArray arg4)
-{
-	jint *lparg4=NULL;
-	GL_NATIVE_ENTER(env, that, glDrawPixels_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg4) lparg4 = (*env)->GetPrimitiveArrayCritical(env, arg4, NULL);
-	} else
-#endif
-	{
-		if (arg4) lparg4 = (*env)->GetIntArrayElements(env, arg4, NULL);
-	}
-	glDrawPixels(arg0, arg1, arg2, arg3, lparg4);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg4) (*env)->ReleasePrimitiveArrayCritical(env, arg4, lparg4, 0);
-	} else
-#endif
-	{
-		if (arg4) (*env)->ReleaseIntArrayElements(env, arg4, lparg4, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glDrawPixels_FUNC);
-}
-#endif
-
-#ifndef NO_glEdgeFlag
-JNIEXPORT void JNICALL GL_NATIVE(glEdgeFlag)
-	(JNIEnv *env, jclass that, jboolean arg0)
-{
-	GL_NATIVE_ENTER(env, that, glEdgeFlag_FUNC);
-	glEdgeFlag(arg0);
-	GL_NATIVE_EXIT(env, that, glEdgeFlag_FUNC);
-}
-#endif
-
-#ifndef NO_glEdgeFlagPointer
-JNIEXPORT void JNICALL GL_NATIVE(glEdgeFlagPointer)
-	(JNIEnv *env, jclass that, jint arg0, jbooleanArray arg1)
-{
-	jboolean *lparg1=NULL;
-	GL_NATIVE_ENTER(env, that, glEdgeFlagPointer_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-	} else
-#endif
-	{
-		if (arg1) lparg1 = (*env)->GetBooleanArrayElements(env, arg1, NULL);
-	}
-	glEdgeFlagPointer(arg0, lparg1);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-	} else
-#endif
-	{
-		if (arg1) (*env)->ReleaseBooleanArrayElements(env, arg1, lparg1, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glEdgeFlagPointer_FUNC);
-}
-#endif
-
-#ifndef NO_glEdgeFlagv
-JNIEXPORT void JNICALL GL_NATIVE(glEdgeFlagv)
-	(JNIEnv *env, jclass that, jbooleanArray arg0)
-{
-	jboolean *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glEdgeFlagv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetBooleanArrayElements(env, arg0, NULL);
-	}
-	glEdgeFlagv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseBooleanArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glEdgeFlagv_FUNC);
-}
-#endif
-
-#ifndef NO_glEnable
-JNIEXPORT void JNICALL GL_NATIVE(glEnable)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glEnable_FUNC);
-	glEnable(arg0);
-	GL_NATIVE_EXIT(env, that, glEnable_FUNC);
-}
-#endif
-
-#ifndef NO_glEnableClientState
-JNIEXPORT void JNICALL GL_NATIVE(glEnableClientState)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glEnableClientState_FUNC);
-	glEnableClientState(arg0);
-	GL_NATIVE_EXIT(env, that, glEnableClientState_FUNC);
-}
-#endif
-
-#ifndef NO_glEnd
-JNIEXPORT void JNICALL GL_NATIVE(glEnd)
-	(JNIEnv *env, jclass that)
-{
-	GL_NATIVE_ENTER(env, that, glEnd_FUNC);
-	glEnd();
-	GL_NATIVE_EXIT(env, that, glEnd_FUNC);
-}
-#endif
-
-#ifndef NO_glEndList
-JNIEXPORT void JNICALL GL_NATIVE(glEndList)
-	(JNIEnv *env, jclass that)
-{
-	GL_NATIVE_ENTER(env, that, glEndList_FUNC);
-	glEndList();
-	GL_NATIVE_EXIT(env, that, glEndList_FUNC);
-}
-#endif
-
-#ifndef NO_glEvalCoord1d
-JNIEXPORT void JNICALL GL_NATIVE(glEvalCoord1d)
-	(JNIEnv *env, jclass that, jdouble arg0)
-{
-	GL_NATIVE_ENTER(env, that, glEvalCoord1d_FUNC);
-	glEvalCoord1d(arg0);
-	GL_NATIVE_EXIT(env, that, glEvalCoord1d_FUNC);
-}
-#endif
-
-#ifndef NO_glEvalCoord1dv
-JNIEXPORT void JNICALL GL_NATIVE(glEvalCoord1dv)
-	(JNIEnv *env, jclass that, jdoubleArray arg0)
-{
-	jdouble *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glEvalCoord1dv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
-	}
-	glEvalCoord1dv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glEvalCoord1dv_FUNC);
-}
-#endif
-
-#ifndef NO_glEvalCoord1f
-JNIEXPORT void JNICALL GL_NATIVE(glEvalCoord1f)
-	(JNIEnv *env, jclass that, jfloat arg0)
-{
-	GL_NATIVE_ENTER(env, that, glEvalCoord1f_FUNC);
-	glEvalCoord1f(arg0);
-	GL_NATIVE_EXIT(env, that, glEvalCoord1f_FUNC);
-}
-#endif
-
-#ifndef NO_glEvalCoord1fv
-JNIEXPORT void JNICALL GL_NATIVE(glEvalCoord1fv)
-	(JNIEnv *env, jclass that, jfloatArray arg0)
-{
-	jfloat *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glEvalCoord1fv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
-	}
-	glEvalCoord1fv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glEvalCoord1fv_FUNC);
-}
-#endif
-
-#ifndef NO_glEvalCoord2d
-JNIEXPORT void JNICALL GL_NATIVE(glEvalCoord2d)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1)
-{
-	GL_NATIVE_ENTER(env, that, glEvalCoord2d_FUNC);
-	glEvalCoord2d(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glEvalCoord2d_FUNC);
-}
-#endif
-
-#ifndef NO_glEvalCoord2dv
-JNIEXPORT void JNICALL GL_NATIVE(glEvalCoord2dv)
-	(JNIEnv *env, jclass that, jdoubleArray arg0)
-{
-	jdouble *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glEvalCoord2dv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
-	}
-	glEvalCoord2dv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glEvalCoord2dv_FUNC);
-}
-#endif
-
-#ifndef NO_glEvalCoord2f
-JNIEXPORT void JNICALL GL_NATIVE(glEvalCoord2f)
-	(JNIEnv *env, jclass that, jfloat arg0, jfloat arg1)
-{
-	GL_NATIVE_ENTER(env, that, glEvalCoord2f_FUNC);
-	glEvalCoord2f(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glEvalCoord2f_FUNC);
-}
-#endif
-
-#ifndef NO_glEvalCoord2fv
-JNIEXPORT void JNICALL GL_NATIVE(glEvalCoord2fv)
-	(JNIEnv *env, jclass that, jfloatArray arg0)
-{
-	jfloat *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glEvalCoord2fv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
-	}
-	glEvalCoord2fv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glEvalCoord2fv_FUNC);
-}
-#endif
-
-#ifndef NO_glEvalMesh1
-JNIEXPORT void JNICALL GL_NATIVE(glEvalMesh1)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	GL_NATIVE_ENTER(env, that, glEvalMesh1_FUNC);
-	glEvalMesh1(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glEvalMesh1_FUNC);
-}
-#endif
-
-#ifndef NO_glEvalMesh2
-JNIEXPORT void JNICALL GL_NATIVE(glEvalMesh2)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4)
-{
-	GL_NATIVE_ENTER(env, that, glEvalMesh2_FUNC);
-	glEvalMesh2(arg0, arg1, arg2, arg3, arg4);
-	GL_NATIVE_EXIT(env, that, glEvalMesh2_FUNC);
-}
-#endif
-
-#ifndef NO_glEvalPoint1
-JNIEXPORT void JNICALL GL_NATIVE(glEvalPoint1)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glEvalPoint1_FUNC);
-	glEvalPoint1(arg0);
-	GL_NATIVE_EXIT(env, that, glEvalPoint1_FUNC);
-}
-#endif
-
-#ifndef NO_glEvalPoint2
-JNIEXPORT void JNICALL GL_NATIVE(glEvalPoint2)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GL_NATIVE_ENTER(env, that, glEvalPoint2_FUNC);
-	glEvalPoint2(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glEvalPoint2_FUNC);
-}
-#endif
-
-#ifndef NO_glFeedbackBuffer
-JNIEXPORT void JNICALL GL_NATIVE(glFeedbackBuffer)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
-{
-	jfloat *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glFeedbackBuffer_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
-	}
-	glFeedbackBuffer(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glFeedbackBuffer_FUNC);
-}
-#endif
-
-#ifndef NO_glFinish
-JNIEXPORT void JNICALL GL_NATIVE(glFinish)
-	(JNIEnv *env, jclass that)
-{
-	GL_NATIVE_ENTER(env, that, glFinish_FUNC);
-	glFinish();
-	GL_NATIVE_EXIT(env, that, glFinish_FUNC);
-}
-#endif
-
-#ifndef NO_glFlush
-JNIEXPORT void JNICALL GL_NATIVE(glFlush)
-	(JNIEnv *env, jclass that)
-{
-	GL_NATIVE_ENTER(env, that, glFlush_FUNC);
-	glFlush();
-	GL_NATIVE_EXIT(env, that, glFlush_FUNC);
-}
-#endif
-
-#ifndef NO_glFogf
-JNIEXPORT void JNICALL GL_NATIVE(glFogf)
-	(JNIEnv *env, jclass that, jint arg0, jfloat arg1)
-{
-	GL_NATIVE_ENTER(env, that, glFogf_FUNC);
-	glFogf(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glFogf_FUNC);
-}
-#endif
-
-#ifndef NO_glFogfv
-JNIEXPORT void JNICALL GL_NATIVE(glFogfv)
-	(JNIEnv *env, jclass that, jint arg0, jfloatArray arg1)
-{
-	jfloat *lparg1=NULL;
-	GL_NATIVE_ENTER(env, that, glFogfv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-	} else
-#endif
-	{
-		if (arg1) lparg1 = (*env)->GetFloatArrayElements(env, arg1, NULL);
-	}
-	glFogfv(arg0, lparg1);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-	} else
-#endif
-	{
-		if (arg1) (*env)->ReleaseFloatArrayElements(env, arg1, lparg1, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glFogfv_FUNC);
-}
-#endif
-
-#ifndef NO_glFogi
-JNIEXPORT void JNICALL GL_NATIVE(glFogi)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GL_NATIVE_ENTER(env, that, glFogi_FUNC);
-	glFogi(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glFogi_FUNC);
-}
-#endif
-
-#ifndef NO_glFogiv
-JNIEXPORT void JNICALL GL_NATIVE(glFogiv)
-	(JNIEnv *env, jclass that, jint arg0, jintArray arg1)
-{
-	jint *lparg1=NULL;
-	GL_NATIVE_ENTER(env, that, glFogiv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-	} else
-#endif
-	{
-		if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL);
-	}
-	glFogiv(arg0, lparg1);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-	} else
-#endif
-	{
-		if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glFogiv_FUNC);
-}
-#endif
-
-#ifndef NO_glFrontFace
-JNIEXPORT void JNICALL GL_NATIVE(glFrontFace)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glFrontFace_FUNC);
-	glFrontFace(arg0);
-	GL_NATIVE_EXIT(env, that, glFrontFace_FUNC);
-}
-#endif
-
-#ifndef NO_glFrustum
-JNIEXPORT void JNICALL GL_NATIVE(glFrustum)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3, jdouble arg4, jdouble arg5)
-{
-	GL_NATIVE_ENTER(env, that, glFrustum_FUNC);
-	glFrustum(arg0, arg1, arg2, arg3, arg4, arg5);
-	GL_NATIVE_EXIT(env, that, glFrustum_FUNC);
-}
-#endif
-
-#ifndef NO_glGenLists
-JNIEXPORT jint JNICALL GL_NATIVE(glGenLists)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	jint rc;
-	GL_NATIVE_ENTER(env, that, glGenLists_FUNC);
-	rc = (jint)glGenLists(arg0);
-	GL_NATIVE_EXIT(env, that, glGenLists_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_glGenTextures
-JNIEXPORT void JNICALL GL_NATIVE(glGenTextures)
-	(JNIEnv *env, jclass that, jint arg0, jintArray arg1)
-{
-	jint *lparg1=NULL;
-	GL_NATIVE_ENTER(env, that, glGenTextures_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-	} else
-#endif
-	{
-		if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL);
-	}
-	glGenTextures(arg0, (GLuint *)lparg1);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-	} else
-#endif
-	{
-		if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGenTextures_FUNC);
-}
-#endif
-
-#ifndef NO_glGetBooleanv
-JNIEXPORT void JNICALL GL_NATIVE(glGetBooleanv)
-	(JNIEnv *env, jclass that, jint arg0, jbooleanArray arg1)
-{
-	jboolean *lparg1=NULL;
-	GL_NATIVE_ENTER(env, that, glGetBooleanv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-	} else
-#endif
-	{
-		if (arg1) lparg1 = (*env)->GetBooleanArrayElements(env, arg1, NULL);
-	}
-	glGetBooleanv(arg0, lparg1);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-	} else
-#endif
-	{
-		if (arg1) (*env)->ReleaseBooleanArrayElements(env, arg1, lparg1, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetBooleanv_FUNC);
-}
-#endif
-
-#ifndef NO_glGetClipPlane
-JNIEXPORT void JNICALL GL_NATIVE(glGetClipPlane)
-	(JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1)
-{
-	jdouble *lparg1=NULL;
-	GL_NATIVE_ENTER(env, that, glGetClipPlane_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-	} else
-#endif
-	{
-		if (arg1) lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL);
-	}
-	glGetClipPlane(arg0, lparg1);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-	} else
-#endif
-	{
-		if (arg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetClipPlane_FUNC);
-}
-#endif
-
-#ifndef NO_glGetDoublev
-JNIEXPORT void JNICALL GL_NATIVE(glGetDoublev)
-	(JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1)
-{
-	jdouble *lparg1=NULL;
-	GL_NATIVE_ENTER(env, that, glGetDoublev_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-	} else
-#endif
-	{
-		if (arg1) lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL);
-	}
-	glGetDoublev(arg0, lparg1);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-	} else
-#endif
-	{
-		if (arg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetDoublev_FUNC);
-}
-#endif
-
-#ifndef NO_glGetError
-JNIEXPORT jint JNICALL GL_NATIVE(glGetError)
-	(JNIEnv *env, jclass that)
-{
-	jint rc;
-	GL_NATIVE_ENTER(env, that, glGetError_FUNC);
-	rc = (jint)glGetError();
-	GL_NATIVE_EXIT(env, that, glGetError_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_glGetFloatv
-JNIEXPORT void JNICALL GL_NATIVE(glGetFloatv)
-	(JNIEnv *env, jclass that, jint arg0, jfloatArray arg1)
-{
-	jfloat *lparg1=NULL;
-	GL_NATIVE_ENTER(env, that, glGetFloatv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-	} else
-#endif
-	{
-		if (arg1) lparg1 = (*env)->GetFloatArrayElements(env, arg1, NULL);
-	}
-	glGetFloatv(arg0, lparg1);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-	} else
-#endif
-	{
-		if (arg1) (*env)->ReleaseFloatArrayElements(env, arg1, lparg1, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetFloatv_FUNC);
-}
-#endif
-
-#ifndef NO_glGetIntegerv
-JNIEXPORT void JNICALL GL_NATIVE(glGetIntegerv)
-	(JNIEnv *env, jclass that, jint arg0, jintArray arg1)
-{
-	jint *lparg1=NULL;
-	GL_NATIVE_ENTER(env, that, glGetIntegerv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-	} else
-#endif
-	{
-		if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL);
-	}
-	glGetIntegerv(arg0, lparg1);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-	} else
-#endif
-	{
-		if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetIntegerv_FUNC);
-}
-#endif
-
-#ifndef NO_glGetLightfv
-JNIEXPORT void JNICALL GL_NATIVE(glGetLightfv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
-{
-	jfloat *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glGetLightfv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
-	}
-	glGetLightfv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetLightfv_FUNC);
-}
-#endif
-
-#ifndef NO_glGetLightiv
-JNIEXPORT void JNICALL GL_NATIVE(glGetLightiv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
-{
-	jint *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glGetLightiv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
-	}
-	glGetLightiv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetLightiv_FUNC);
-}
-#endif
-
-#ifndef NO_glGetMapdv
-JNIEXPORT void JNICALL GL_NATIVE(glGetMapdv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jdoubleArray arg2)
-{
-	jdouble *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glGetMapdv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetDoubleArrayElements(env, arg2, NULL);
-	}
-	glGetMapdv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseDoubleArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetMapdv_FUNC);
-}
-#endif
-
-#ifndef NO_glGetMapfv
-JNIEXPORT void JNICALL GL_NATIVE(glGetMapfv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
-{
-	jfloat *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glGetMapfv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
-	}
-	glGetMapfv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetMapfv_FUNC);
-}
-#endif
-
-#ifndef NO_glGetMapiv
-JNIEXPORT void JNICALL GL_NATIVE(glGetMapiv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
-{
-	jint *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glGetMapiv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
-	}
-	glGetMapiv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetMapiv_FUNC);
-}
-#endif
-
-#ifndef NO_glGetMaterialfv
-JNIEXPORT void JNICALL GL_NATIVE(glGetMaterialfv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
-{
-	jfloat *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glGetMaterialfv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
-	}
-	glGetMaterialfv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetMaterialfv_FUNC);
-}
-#endif
-
-#ifndef NO_glGetMaterialiv
-JNIEXPORT void JNICALL GL_NATIVE(glGetMaterialiv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
-{
-	jint *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glGetMaterialiv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
-	}
-	glGetMaterialiv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetMaterialiv_FUNC);
-}
-#endif
-
-#ifndef NO_glGetPixelMapfv
-JNIEXPORT void JNICALL GL_NATIVE(glGetPixelMapfv)
-	(JNIEnv *env, jclass that, jint arg0, jfloatArray arg1)
-{
-	jfloat *lparg1=NULL;
-	GL_NATIVE_ENTER(env, that, glGetPixelMapfv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-	} else
-#endif
-	{
-		if (arg1) lparg1 = (*env)->GetFloatArrayElements(env, arg1, NULL);
-	}
-	glGetPixelMapfv(arg0, lparg1);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-	} else
-#endif
-	{
-		if (arg1) (*env)->ReleaseFloatArrayElements(env, arg1, lparg1, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetPixelMapfv_FUNC);
-}
-#endif
-
-#ifndef NO_glGetPixelMapuiv
-JNIEXPORT void JNICALL GL_NATIVE(glGetPixelMapuiv)
-	(JNIEnv *env, jclass that, jint arg0, jintArray arg1)
-{
-	jint *lparg1=NULL;
-	GL_NATIVE_ENTER(env, that, glGetPixelMapuiv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-	} else
-#endif
-	{
-		if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL);
-	}
-	glGetPixelMapuiv(arg0, (GLuint *)lparg1);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-	} else
-#endif
-	{
-		if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetPixelMapuiv_FUNC);
-}
-#endif
-
-#ifndef NO_glGetPixelMapusv
-JNIEXPORT void JNICALL GL_NATIVE(glGetPixelMapusv)
-	(JNIEnv *env, jclass that, jint arg0, jshortArray arg1)
-{
-	jshort *lparg1=NULL;
-	GL_NATIVE_ENTER(env, that, glGetPixelMapusv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-	} else
-#endif
-	{
-		if (arg1) lparg1 = (*env)->GetShortArrayElements(env, arg1, NULL);
-	}
-	glGetPixelMapusv(arg0, (GLushort *)lparg1);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-	} else
-#endif
-	{
-		if (arg1) (*env)->ReleaseShortArrayElements(env, arg1, lparg1, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetPixelMapusv_FUNC);
-}
-#endif
-
-#ifndef NO_glGetPointerv
-JNIEXPORT void JNICALL GL_NATIVE(glGetPointerv)
-	(JNIEnv *env, jclass that, jint arg0, jintArray arg1)
-{
-	jint *lparg1=NULL;
-	GL_NATIVE_ENTER(env, that, glGetPointerv_FUNC);
-	if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL);
-	glGetPointerv(arg0, (GLvoid **)lparg1);
-	if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
-	GL_NATIVE_EXIT(env, that, glGetPointerv_FUNC);
-}
-#endif
-
-#ifndef NO_glGetPolygonStipple
-JNIEXPORT void JNICALL GL_NATIVE(glGetPolygonStipple)
-	(JNIEnv *env, jclass that, jbyteArray arg0)
-{
-	jbyte *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glGetPolygonStipple_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL);
-	}
-	glGetPolygonStipple((GLubyte *)lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetPolygonStipple_FUNC);
-}
-#endif
-
-#ifndef NO_glGetString
-JNIEXPORT jint JNICALL GL_NATIVE(glGetString)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	jint rc;
-	GL_NATIVE_ENTER(env, that, glGetString_FUNC);
-	rc = (jint)glGetString(arg0);
-	GL_NATIVE_EXIT(env, that, glGetString_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_glGetTexEnvfv
-JNIEXPORT void JNICALL GL_NATIVE(glGetTexEnvfv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
-{
-	jfloat *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glGetTexEnvfv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
-	}
-	glGetTexEnvfv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetTexEnvfv_FUNC);
-}
-#endif
-
-#ifndef NO_glGetTexEnviv
-JNIEXPORT void JNICALL GL_NATIVE(glGetTexEnviv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
-{
-	jint *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glGetTexEnviv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
-	}
-	glGetTexEnviv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetTexEnviv_FUNC);
-}
-#endif
-
-#ifndef NO_glGetTexGendv
-JNIEXPORT void JNICALL GL_NATIVE(glGetTexGendv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jdoubleArray arg2)
-{
-	jdouble *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glGetTexGendv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetDoubleArrayElements(env, arg2, NULL);
-	}
-	glGetTexGendv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseDoubleArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetTexGendv_FUNC);
-}
-#endif
-
-#ifndef NO_glGetTexGenfv
-JNIEXPORT void JNICALL GL_NATIVE(glGetTexGenfv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
-{
-	jfloat *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glGetTexGenfv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
-	}
-	glGetTexGenfv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetTexGenfv_FUNC);
-}
-#endif
-
-#ifndef NO_glGetTexGeniv
-JNIEXPORT void JNICALL GL_NATIVE(glGetTexGeniv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
-{
-	jint *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glGetTexGeniv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
-	}
-	glGetTexGeniv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetTexGeniv_FUNC);
-}
-#endif
-
-#ifndef NO_glGetTexImage
-JNIEXPORT void JNICALL GL_NATIVE(glGetTexImage)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jintArray arg4)
-{
-	jint *lparg4=NULL;
-	GL_NATIVE_ENTER(env, that, glGetTexImage_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg4) lparg4 = (*env)->GetPrimitiveArrayCritical(env, arg4, NULL);
-	} else
-#endif
-	{
-		if (arg4) lparg4 = (*env)->GetIntArrayElements(env, arg4, NULL);
-	}
-	glGetTexImage(arg0, arg1, arg2, arg3, lparg4);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg4) (*env)->ReleasePrimitiveArrayCritical(env, arg4, lparg4, 0);
-	} else
-#endif
-	{
-		if (arg4) (*env)->ReleaseIntArrayElements(env, arg4, lparg4, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetTexImage_FUNC);
-}
-#endif
-
-#ifndef NO_glGetTexLevelParameterfv
-JNIEXPORT void JNICALL GL_NATIVE(glGetTexLevelParameterfv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jfloatArray arg3)
-{
-	jfloat *lparg3=NULL;
-	GL_NATIVE_ENTER(env, that, glGetTexLevelParameterfv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg3) lparg3 = (*env)->GetPrimitiveArrayCritical(env, arg3, NULL);
-	} else
-#endif
-	{
-		if (arg3) lparg3 = (*env)->GetFloatArrayElements(env, arg3, NULL);
-	}
-	glGetTexLevelParameterfv(arg0, arg1, arg2, lparg3);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg3) (*env)->ReleasePrimitiveArrayCritical(env, arg3, lparg3, 0);
-	} else
-#endif
-	{
-		if (arg3) (*env)->ReleaseFloatArrayElements(env, arg3, lparg3, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetTexLevelParameterfv_FUNC);
-}
-#endif
-
-#ifndef NO_glGetTexLevelParameteriv
-JNIEXPORT void JNICALL GL_NATIVE(glGetTexLevelParameteriv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jintArray arg3)
-{
-	jint *lparg3=NULL;
-	GL_NATIVE_ENTER(env, that, glGetTexLevelParameteriv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg3) lparg3 = (*env)->GetPrimitiveArrayCritical(env, arg3, NULL);
-	} else
-#endif
-	{
-		if (arg3) lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL);
-	}
-	glGetTexLevelParameteriv(arg0, arg1, arg2, lparg3);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg3) (*env)->ReleasePrimitiveArrayCritical(env, arg3, lparg3, 0);
-	} else
-#endif
-	{
-		if (arg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetTexLevelParameteriv_FUNC);
-}
-#endif
-
-#ifndef NO_glGetTexParameterfv
-JNIEXPORT void JNICALL GL_NATIVE(glGetTexParameterfv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
-{
-	jfloat *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glGetTexParameterfv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
-	}
-	glGetTexParameterfv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetTexParameterfv_FUNC);
-}
-#endif
-
-#ifndef NO_glGetTexParameteriv
-JNIEXPORT void JNICALL GL_NATIVE(glGetTexParameteriv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
-{
-	jint *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glGetTexParameteriv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
-	}
-	glGetTexParameteriv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glGetTexParameteriv_FUNC);
-}
-#endif
-
-#ifndef NO_glHint
-JNIEXPORT void JNICALL GL_NATIVE(glHint)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GL_NATIVE_ENTER(env, that, glHint_FUNC);
-	glHint(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glHint_FUNC);
-}
-#endif
-
-#ifndef NO_glIndexMask
-JNIEXPORT void JNICALL GL_NATIVE(glIndexMask)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glIndexMask_FUNC);
-	glIndexMask(arg0);
-	GL_NATIVE_EXIT(env, that, glIndexMask_FUNC);
-}
-#endif
-
-#ifndef NO_glIndexPointer
-JNIEXPORT void JNICALL GL_NATIVE(glIndexPointer)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
-{
-	jint *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glIndexPointer_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
-	}
-	glIndexPointer(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glIndexPointer_FUNC);
-}
-#endif
-
-#ifndef NO_glIndexd
-JNIEXPORT void JNICALL GL_NATIVE(glIndexd)
-	(JNIEnv *env, jclass that, jdouble arg0)
-{
-	GL_NATIVE_ENTER(env, that, glIndexd_FUNC);
-	glIndexd(arg0);
-	GL_NATIVE_EXIT(env, that, glIndexd_FUNC);
-}
-#endif
-
-#ifndef NO_glIndexdv
-JNIEXPORT void JNICALL GL_NATIVE(glIndexdv)
-	(JNIEnv *env, jclass that, jdoubleArray arg0)
-{
-	jdouble *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glIndexdv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
-	}
-	glIndexdv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glIndexdv_FUNC);
-}
-#endif
-
-#ifndef NO_glIndexf
-JNIEXPORT void JNICALL GL_NATIVE(glIndexf)
-	(JNIEnv *env, jclass that, jfloat arg0)
-{
-	GL_NATIVE_ENTER(env, that, glIndexf_FUNC);
-	glIndexf(arg0);
-	GL_NATIVE_EXIT(env, that, glIndexf_FUNC);
-}
-#endif
-
-#ifndef NO_glIndexfv
-JNIEXPORT void JNICALL GL_NATIVE(glIndexfv)
-	(JNIEnv *env, jclass that, jfloatArray arg0)
-{
-	jfloat *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glIndexfv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
-	}
-	glIndexfv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glIndexfv_FUNC);
-}
-#endif
-
-#ifndef NO_glIndexi
-JNIEXPORT void JNICALL GL_NATIVE(glIndexi)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glIndexi_FUNC);
-	glIndexi(arg0);
-	GL_NATIVE_EXIT(env, that, glIndexi_FUNC);
-}
-#endif
-
-#ifndef NO_glIndexiv
-JNIEXPORT void JNICALL GL_NATIVE(glIndexiv)
-	(JNIEnv *env, jclass that, jintArray arg0)
-{
-	jint *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glIndexiv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
-	}
-	glIndexiv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glIndexiv_FUNC);
-}
-#endif
-
-#ifndef NO_glIndexs
-JNIEXPORT void JNICALL GL_NATIVE(glIndexs)
-	(JNIEnv *env, jclass that, jshort arg0)
-{
-	GL_NATIVE_ENTER(env, that, glIndexs_FUNC);
-	glIndexs(arg0);
-	GL_NATIVE_EXIT(env, that, glIndexs_FUNC);
-}
-#endif
-
-#ifndef NO_glIndexsv
-JNIEXPORT void JNICALL GL_NATIVE(glIndexsv)
-	(JNIEnv *env, jclass that, jshortArray arg0)
-{
-	jshort *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glIndexsv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
-	}
-	glIndexsv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glIndexsv_FUNC);
-}
-#endif
-
-#ifndef NO_glInitNames
-JNIEXPORT void JNICALL GL_NATIVE(glInitNames)
-	(JNIEnv *env, jclass that)
-{
-	GL_NATIVE_ENTER(env, that, glInitNames_FUNC);
-	glInitNames();
-	GL_NATIVE_EXIT(env, that, glInitNames_FUNC);
-}
-#endif
-
-#ifndef NO_glInterleavedArrays
-JNIEXPORT void JNICALL GL_NATIVE(glInterleavedArrays)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
-{
-	jint *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glInterleavedArrays_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
-	}
-	glInterleavedArrays(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glInterleavedArrays_FUNC);
-}
-#endif
-
-#ifndef NO_glIsEnabled
-JNIEXPORT jboolean JNICALL GL_NATIVE(glIsEnabled)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	jboolean rc;
-	GL_NATIVE_ENTER(env, that, glIsEnabled_FUNC);
-	rc = (jboolean)glIsEnabled(arg0);
-	GL_NATIVE_EXIT(env, that, glIsEnabled_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_glIsList
-JNIEXPORT jboolean JNICALL GL_NATIVE(glIsList)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	jboolean rc;
-	GL_NATIVE_ENTER(env, that, glIsList_FUNC);
-	rc = (jboolean)glIsList(arg0);
-	GL_NATIVE_EXIT(env, that, glIsList_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_glIsTexture
-JNIEXPORT jboolean JNICALL GL_NATIVE(glIsTexture)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	jboolean rc;
-	GL_NATIVE_ENTER(env, that, glIsTexture_FUNC);
-	rc = (jboolean)glIsTexture(arg0);
-	GL_NATIVE_EXIT(env, that, glIsTexture_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_glLightModelf
-JNIEXPORT void JNICALL GL_NATIVE(glLightModelf)
-	(JNIEnv *env, jclass that, jint arg0, jfloat arg1)
-{
-	GL_NATIVE_ENTER(env, that, glLightModelf_FUNC);
-	glLightModelf(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glLightModelf_FUNC);
-}
-#endif
-
-#ifndef NO_glLightModelfv
-JNIEXPORT void JNICALL GL_NATIVE(glLightModelfv)
-	(JNIEnv *env, jclass that, jint arg0, jfloatArray arg1)
-{
-	jfloat *lparg1=NULL;
-	GL_NATIVE_ENTER(env, that, glLightModelfv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-	} else
-#endif
-	{
-		if (arg1) lparg1 = (*env)->GetFloatArrayElements(env, arg1, NULL);
-	}
-	glLightModelfv(arg0, lparg1);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-	} else
-#endif
-	{
-		if (arg1) (*env)->ReleaseFloatArrayElements(env, arg1, lparg1, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glLightModelfv_FUNC);
-}
-#endif
-
-#ifndef NO_glLightModeli
-JNIEXPORT void JNICALL GL_NATIVE(glLightModeli)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GL_NATIVE_ENTER(env, that, glLightModeli_FUNC);
-	glLightModeli(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glLightModeli_FUNC);
-}
-#endif
-
-#ifndef NO_glLightModeliv
-JNIEXPORT void JNICALL GL_NATIVE(glLightModeliv)
-	(JNIEnv *env, jclass that, jint arg0, jintArray arg1)
-{
-	jint *lparg1=NULL;
-	GL_NATIVE_ENTER(env, that, glLightModeliv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-	} else
-#endif
-	{
-		if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL);
-	}
-	glLightModeliv(arg0, lparg1);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-	} else
-#endif
-	{
-		if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glLightModeliv_FUNC);
-}
-#endif
-
-#ifndef NO_glLightf
-JNIEXPORT void JNICALL GL_NATIVE(glLightf)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloat arg2)
-{
-	GL_NATIVE_ENTER(env, that, glLightf_FUNC);
-	glLightf(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glLightf_FUNC);
-}
-#endif
-
-#ifndef NO_glLightfv
-JNIEXPORT void JNICALL GL_NATIVE(glLightfv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
-{
-	jfloat *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glLightfv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
-	}
-	glLightfv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glLightfv_FUNC);
-}
-#endif
-
-#ifndef NO_glLighti
-JNIEXPORT void JNICALL GL_NATIVE(glLighti)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	GL_NATIVE_ENTER(env, that, glLighti_FUNC);
-	glLighti(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glLighti_FUNC);
-}
-#endif
-
-#ifndef NO_glLightiv
-JNIEXPORT void JNICALL GL_NATIVE(glLightiv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
-{
-	jint *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glLightiv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
-	}
-	glLightiv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glLightiv_FUNC);
-}
-#endif
-
-#ifndef NO_glLineStipple
-JNIEXPORT void JNICALL GL_NATIVE(glLineStipple)
-	(JNIEnv *env, jclass that, jint arg0, jshort arg1)
-{
-	GL_NATIVE_ENTER(env, that, glLineStipple_FUNC);
-	glLineStipple(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glLineStipple_FUNC);
-}
-#endif
-
-#ifndef NO_glLineWidth
-JNIEXPORT void JNICALL GL_NATIVE(glLineWidth)
-	(JNIEnv *env, jclass that, jfloat arg0)
-{
-	GL_NATIVE_ENTER(env, that, glLineWidth_FUNC);
-	glLineWidth(arg0);
-	GL_NATIVE_EXIT(env, that, glLineWidth_FUNC);
-}
-#endif
-
-#ifndef NO_glListBase
-JNIEXPORT void JNICALL GL_NATIVE(glListBase)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glListBase_FUNC);
-	glListBase(arg0);
-	GL_NATIVE_EXIT(env, that, glListBase_FUNC);
-}
-#endif
-
-#ifndef NO_glLoadIdentity
-JNIEXPORT void JNICALL GL_NATIVE(glLoadIdentity)
-	(JNIEnv *env, jclass that)
-{
-	GL_NATIVE_ENTER(env, that, glLoadIdentity_FUNC);
-	glLoadIdentity();
-	GL_NATIVE_EXIT(env, that, glLoadIdentity_FUNC);
-}
-#endif
-
-#ifndef NO_glLoadMatrixd
-JNIEXPORT void JNICALL GL_NATIVE(glLoadMatrixd)
-	(JNIEnv *env, jclass that, jdoubleArray arg0)
-{
-	jdouble *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glLoadMatrixd_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
-	}
-	glLoadMatrixd(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glLoadMatrixd_FUNC);
-}
-#endif
-
-#ifndef NO_glLoadMatrixf
-JNIEXPORT void JNICALL GL_NATIVE(glLoadMatrixf)
-	(JNIEnv *env, jclass that, jfloatArray arg0)
-{
-	jfloat *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glLoadMatrixf_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
-	}
-	glLoadMatrixf(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glLoadMatrixf_FUNC);
-}
-#endif
-
-#ifndef NO_glLoadName
-JNIEXPORT void JNICALL GL_NATIVE(glLoadName)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glLoadName_FUNC);
-	glLoadName(arg0);
-	GL_NATIVE_EXIT(env, that, glLoadName_FUNC);
-}
-#endif
-
-#ifndef NO_glLogicOp
-JNIEXPORT void JNICALL GL_NATIVE(glLogicOp)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glLogicOp_FUNC);
-	glLogicOp(arg0);
-	GL_NATIVE_EXIT(env, that, glLogicOp_FUNC);
-}
-#endif
-
-#ifndef NO_glMap1d
-JNIEXPORT void JNICALL GL_NATIVE(glMap1d)
-	(JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jint arg3, jint arg4, jdoubleArray arg5)
-{
-	jdouble *lparg5=NULL;
-	GL_NATIVE_ENTER(env, that, glMap1d_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg5) lparg5 = (*env)->GetPrimitiveArrayCritical(env, arg5, NULL);
-	} else
-#endif
-	{
-		if (arg5) lparg5 = (*env)->GetDoubleArrayElements(env, arg5, NULL);
-	}
-	glMap1d(arg0, arg1, arg2, arg3, arg4, lparg5);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg5) (*env)->ReleasePrimitiveArrayCritical(env, arg5, lparg5, 0);
-	} else
-#endif
-	{
-		if (arg5) (*env)->ReleaseDoubleArrayElements(env, arg5, lparg5, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glMap1d_FUNC);
-}
-#endif
-
-#ifndef NO_glMap1f
-JNIEXPORT void JNICALL GL_NATIVE(glMap1f)
-	(JNIEnv *env, jclass that, jint arg0, jfloat arg1, jfloat arg2, jint arg3, jint arg4, jfloatArray arg5)
-{
-	jfloat *lparg5=NULL;
-	GL_NATIVE_ENTER(env, that, glMap1f_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg5) lparg5 = (*env)->GetPrimitiveArrayCritical(env, arg5, NULL);
-	} else
-#endif
-	{
-		if (arg5) lparg5 = (*env)->GetFloatArrayElements(env, arg5, NULL);
-	}
-	glMap1f(arg0, arg1, arg2, arg3, arg4, lparg5);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg5) (*env)->ReleasePrimitiveArrayCritical(env, arg5, lparg5, 0);
-	} else
-#endif
-	{
-		if (arg5) (*env)->ReleaseFloatArrayElements(env, arg5, lparg5, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glMap1f_FUNC);
-}
-#endif
-
-#ifndef NO_glMap2d
-JNIEXPORT void JNICALL GL_NATIVE(glMap2d)
-	(JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jint arg3, jint arg4, jdouble arg5, jdouble arg6, jint arg7, jint arg8, jdoubleArray arg9)
-{
-	jdouble *lparg9=NULL;
-	GL_NATIVE_ENTER(env, that, glMap2d_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg9) lparg9 = (*env)->GetPrimitiveArrayCritical(env, arg9, NULL);
-	} else
-#endif
-	{
-		if (arg9) lparg9 = (*env)->GetDoubleArrayElements(env, arg9, NULL);
-	}
-	glMap2d(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, lparg9);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg9) (*env)->ReleasePrimitiveArrayCritical(env, arg9, lparg9, 0);
-	} else
-#endif
-	{
-		if (arg9) (*env)->ReleaseDoubleArrayElements(env, arg9, lparg9, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glMap2d_FUNC);
-}
-#endif
-
-#ifndef NO_glMap2f
-JNIEXPORT void JNICALL GL_NATIVE(glMap2f)
-	(JNIEnv *env, jclass that, jint arg0, jfloat arg1, jfloat arg2, jint arg3, jint arg4, jfloat arg5, jfloat arg6, jint arg7, jint arg8, jfloatArray arg9)
-{
-	jfloat *lparg9=NULL;
-	GL_NATIVE_ENTER(env, that, glMap2f_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg9) lparg9 = (*env)->GetPrimitiveArrayCritical(env, arg9, NULL);
-	} else
-#endif
-	{
-		if (arg9) lparg9 = (*env)->GetFloatArrayElements(env, arg9, NULL);
-	}
-	glMap2f(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, lparg9);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg9) (*env)->ReleasePrimitiveArrayCritical(env, arg9, lparg9, 0);
-	} else
-#endif
-	{
-		if (arg9) (*env)->ReleaseFloatArrayElements(env, arg9, lparg9, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glMap2f_FUNC);
-}
-#endif
-
-#ifndef NO_glMapGrid1d
-JNIEXPORT void JNICALL GL_NATIVE(glMapGrid1d)
-	(JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2)
-{
-	GL_NATIVE_ENTER(env, that, glMapGrid1d_FUNC);
-	glMapGrid1d(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glMapGrid1d_FUNC);
-}
-#endif
-
-#ifndef NO_glMapGrid1f
-JNIEXPORT void JNICALL GL_NATIVE(glMapGrid1f)
-	(JNIEnv *env, jclass that, jint arg0, jfloat arg1, jfloat arg2)
-{
-	GL_NATIVE_ENTER(env, that, glMapGrid1f_FUNC);
-	glMapGrid1f(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glMapGrid1f_FUNC);
-}
-#endif
-
-#ifndef NO_glMapGrid2d
-JNIEXPORT void JNICALL GL_NATIVE(glMapGrid2d)
-	(JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jint arg3, jdouble arg4, jdouble arg5)
-{
-	GL_NATIVE_ENTER(env, that, glMapGrid2d_FUNC);
-	glMapGrid2d(arg0, arg1, arg2, arg3, arg4, arg5);
-	GL_NATIVE_EXIT(env, that, glMapGrid2d_FUNC);
-}
-#endif
-
-#ifndef NO_glMapGrid2f
-JNIEXPORT void JNICALL GL_NATIVE(glMapGrid2f)
-	(JNIEnv *env, jclass that, jint arg0, jfloat arg1, jfloat arg2, jint arg3, jfloat arg4, jfloat arg5)
-{
-	GL_NATIVE_ENTER(env, that, glMapGrid2f_FUNC);
-	glMapGrid2f(arg0, arg1, arg2, arg3, arg4, arg5);
-	GL_NATIVE_EXIT(env, that, glMapGrid2f_FUNC);
-}
-#endif
-
-#ifndef NO_glMaterialf
-JNIEXPORT void JNICALL GL_NATIVE(glMaterialf)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloat arg2)
-{
-	GL_NATIVE_ENTER(env, that, glMaterialf_FUNC);
-	glMaterialf(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glMaterialf_FUNC);
-}
-#endif
-
-#ifndef NO_glMaterialfv
-JNIEXPORT void JNICALL GL_NATIVE(glMaterialfv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
-{
-	jfloat *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glMaterialfv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
-	}
-	glMaterialfv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glMaterialfv_FUNC);
-}
-#endif
-
-#ifndef NO_glMateriali
-JNIEXPORT void JNICALL GL_NATIVE(glMateriali)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	GL_NATIVE_ENTER(env, that, glMateriali_FUNC);
-	glMateriali(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glMateriali_FUNC);
-}
-#endif
-
-#ifndef NO_glMaterialiv
-JNIEXPORT void JNICALL GL_NATIVE(glMaterialiv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
-{
-	jint *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glMaterialiv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
-	}
-	glMaterialiv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glMaterialiv_FUNC);
-}
-#endif
-
-#ifndef NO_glMatrixMode
-JNIEXPORT void JNICALL GL_NATIVE(glMatrixMode)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glMatrixMode_FUNC);
-	glMatrixMode(arg0);
-	GL_NATIVE_EXIT(env, that, glMatrixMode_FUNC);
-}
-#endif
-
-#ifndef NO_glMultMatrixd
-JNIEXPORT void JNICALL GL_NATIVE(glMultMatrixd)
-	(JNIEnv *env, jclass that, jdoubleArray arg0)
-{
-	jdouble *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glMultMatrixd_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
-	}
-	glMultMatrixd(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glMultMatrixd_FUNC);
-}
-#endif
-
-#ifndef NO_glMultMatrixf
-JNIEXPORT void JNICALL GL_NATIVE(glMultMatrixf)
-	(JNIEnv *env, jclass that, jfloatArray arg0)
-{
-	jfloat *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glMultMatrixf_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
-	}
-	glMultMatrixf(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glMultMatrixf_FUNC);
-}
-#endif
-
-#ifndef NO_glNewList
-JNIEXPORT void JNICALL GL_NATIVE(glNewList)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GL_NATIVE_ENTER(env, that, glNewList_FUNC);
-	glNewList(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glNewList_FUNC);
-}
-#endif
-
-#ifndef NO_glNormal3b
-JNIEXPORT void JNICALL GL_NATIVE(glNormal3b)
-	(JNIEnv *env, jclass that, jbyte arg0, jbyte arg1, jbyte arg2)
-{
-	GL_NATIVE_ENTER(env, that, glNormal3b_FUNC);
-	glNormal3b(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glNormal3b_FUNC);
-}
-#endif
-
-#ifndef NO_glNormal3bv
-JNIEXPORT void JNICALL GL_NATIVE(glNormal3bv)
-	(JNIEnv *env, jclass that, jbyteArray arg0)
-{
-	jbyte *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glNormal3bv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL);
-	}
-	glNormal3bv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glNormal3bv_FUNC);
-}
-#endif
-
-#ifndef NO_glNormal3d
-JNIEXPORT void JNICALL GL_NATIVE(glNormal3d)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2)
-{
-	GL_NATIVE_ENTER(env, that, glNormal3d_FUNC);
-	glNormal3d(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glNormal3d_FUNC);
-}
-#endif
-
-#ifndef NO_glNormal3dv
-JNIEXPORT void JNICALL GL_NATIVE(glNormal3dv)
-	(JNIEnv *env, jclass that, jdoubleArray arg0)
-{
-	jdouble *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glNormal3dv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
-	}
-	glNormal3dv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glNormal3dv_FUNC);
-}
-#endif
-
-#ifndef NO_glNormal3f
-JNIEXPORT void JNICALL GL_NATIVE(glNormal3f)
-	(JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2)
-{
-	GL_NATIVE_ENTER(env, that, glNormal3f_FUNC);
-	glNormal3f(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glNormal3f_FUNC);
-}
-#endif
-
-#ifndef NO_glNormal3fv
-JNIEXPORT void JNICALL GL_NATIVE(glNormal3fv)
-	(JNIEnv *env, jclass that, jfloatArray arg0)
-{
-	jfloat *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glNormal3fv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
-	}
-	glNormal3fv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glNormal3fv_FUNC);
-}
-#endif
-
-#ifndef NO_glNormal3i
-JNIEXPORT void JNICALL GL_NATIVE(glNormal3i)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	GL_NATIVE_ENTER(env, that, glNormal3i_FUNC);
-	glNormal3i(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glNormal3i_FUNC);
-}
-#endif
-
-#ifndef NO_glNormal3iv
-JNIEXPORT void JNICALL GL_NATIVE(glNormal3iv)
-	(JNIEnv *env, jclass that, jintArray arg0)
-{
-	jint *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glNormal3iv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
-	}
-	glNormal3iv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glNormal3iv_FUNC);
-}
-#endif
-
-#ifndef NO_glNormal3s
-JNIEXPORT void JNICALL GL_NATIVE(glNormal3s)
-	(JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2)
-{
-	GL_NATIVE_ENTER(env, that, glNormal3s_FUNC);
-	glNormal3s(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glNormal3s_FUNC);
-}
-#endif
-
-#ifndef NO_glNormal3sv
-JNIEXPORT void JNICALL GL_NATIVE(glNormal3sv)
-	(JNIEnv *env, jclass that, jshortArray arg0)
-{
-	jshort *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glNormal3sv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
-	}
-	glNormal3sv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glNormal3sv_FUNC);
-}
-#endif
-
-#ifndef NO_glNormalPointer
-JNIEXPORT void JNICALL GL_NATIVE(glNormalPointer)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
-{
-	jint *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glNormalPointer_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
-	}
-	glNormalPointer(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glNormalPointer_FUNC);
-}
-#endif
-
-#ifndef NO_glOrtho
-JNIEXPORT void JNICALL GL_NATIVE(glOrtho)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3, jdouble arg4, jdouble arg5)
-{
-	GL_NATIVE_ENTER(env, that, glOrtho_FUNC);
-	glOrtho(arg0, arg1, arg2, arg3, arg4, arg5);
-	GL_NATIVE_EXIT(env, that, glOrtho_FUNC);
-}
-#endif
-
-#ifndef NO_glPassThrough
-JNIEXPORT void JNICALL GL_NATIVE(glPassThrough)
-	(JNIEnv *env, jclass that, jfloat arg0)
-{
-	GL_NATIVE_ENTER(env, that, glPassThrough_FUNC);
-	glPassThrough(arg0);
-	GL_NATIVE_EXIT(env, that, glPassThrough_FUNC);
-}
-#endif
-
-#ifndef NO_glPixelMapfv
-JNIEXPORT void JNICALL GL_NATIVE(glPixelMapfv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
-{
-	jfloat *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glPixelMapfv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
-	}
-	glPixelMapfv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glPixelMapfv_FUNC);
-}
-#endif
-
-#ifndef NO_glPixelMapuiv
-JNIEXPORT void JNICALL GL_NATIVE(glPixelMapuiv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
-{
-	jint *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glPixelMapuiv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
-	}
-	glPixelMapuiv(arg0, arg1, (const GLuint *)lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glPixelMapuiv_FUNC);
-}
-#endif
-
-#ifndef NO_glPixelMapusv
-JNIEXPORT void JNICALL GL_NATIVE(glPixelMapusv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jshortArray arg2)
-{
-	jshort *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glPixelMapusv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetShortArrayElements(env, arg2, NULL);
-	}
-	glPixelMapusv(arg0, arg1, (const GLushort *)lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseShortArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glPixelMapusv_FUNC);
-}
-#endif
-
-#ifndef NO_glPixelStoref
-JNIEXPORT void JNICALL GL_NATIVE(glPixelStoref)
-	(JNIEnv *env, jclass that, jint arg0, jfloat arg1)
-{
-	GL_NATIVE_ENTER(env, that, glPixelStoref_FUNC);
-	glPixelStoref(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glPixelStoref_FUNC);
-}
-#endif
-
-#ifndef NO_glPixelStorei
-JNIEXPORT void JNICALL GL_NATIVE(glPixelStorei)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GL_NATIVE_ENTER(env, that, glPixelStorei_FUNC);
-	glPixelStorei(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glPixelStorei_FUNC);
-}
-#endif
-
-#ifndef NO_glPixelTransferf
-JNIEXPORT void JNICALL GL_NATIVE(glPixelTransferf)
-	(JNIEnv *env, jclass that, jint arg0, jfloat arg1)
-{
-	GL_NATIVE_ENTER(env, that, glPixelTransferf_FUNC);
-	glPixelTransferf(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glPixelTransferf_FUNC);
-}
-#endif
-
-#ifndef NO_glPixelTransferi
-JNIEXPORT void JNICALL GL_NATIVE(glPixelTransferi)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GL_NATIVE_ENTER(env, that, glPixelTransferi_FUNC);
-	glPixelTransferi(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glPixelTransferi_FUNC);
-}
-#endif
-
-#ifndef NO_glPixelZoom
-JNIEXPORT void JNICALL GL_NATIVE(glPixelZoom)
-	(JNIEnv *env, jclass that, jfloat arg0, jfloat arg1)
-{
-	GL_NATIVE_ENTER(env, that, glPixelZoom_FUNC);
-	glPixelZoom(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glPixelZoom_FUNC);
-}
-#endif
-
-#ifndef NO_glPointSize
-JNIEXPORT void JNICALL GL_NATIVE(glPointSize)
-	(JNIEnv *env, jclass that, jfloat arg0)
-{
-	GL_NATIVE_ENTER(env, that, glPointSize_FUNC);
-	glPointSize(arg0);
-	GL_NATIVE_EXIT(env, that, glPointSize_FUNC);
-}
-#endif
-
-#ifndef NO_glPolygonMode
-JNIEXPORT void JNICALL GL_NATIVE(glPolygonMode)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GL_NATIVE_ENTER(env, that, glPolygonMode_FUNC);
-	glPolygonMode(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glPolygonMode_FUNC);
-}
-#endif
-
-#ifndef NO_glPolygonOffset
-JNIEXPORT void JNICALL GL_NATIVE(glPolygonOffset)
-	(JNIEnv *env, jclass that, jfloat arg0, jfloat arg1)
-{
-	GL_NATIVE_ENTER(env, that, glPolygonOffset_FUNC);
-	glPolygonOffset(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glPolygonOffset_FUNC);
-}
-#endif
-
-#ifndef NO_glPolygonStipple
-JNIEXPORT void JNICALL GL_NATIVE(glPolygonStipple)
-	(JNIEnv *env, jclass that, jbyteArray arg0)
-{
-	jbyte *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glPolygonStipple_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL);
-	}
-	glPolygonStipple((GLubyte *)lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glPolygonStipple_FUNC);
-}
-#endif
-
-#ifndef NO_glPopAttrib
-JNIEXPORT void JNICALL GL_NATIVE(glPopAttrib)
-	(JNIEnv *env, jclass that)
-{
-	GL_NATIVE_ENTER(env, that, glPopAttrib_FUNC);
-	glPopAttrib();
-	GL_NATIVE_EXIT(env, that, glPopAttrib_FUNC);
-}
-#endif
-
-#ifndef NO_glPopClientAttrib
-JNIEXPORT void JNICALL GL_NATIVE(glPopClientAttrib)
-	(JNIEnv *env, jclass that)
-{
-	GL_NATIVE_ENTER(env, that, glPopClientAttrib_FUNC);
-	glPopClientAttrib();
-	GL_NATIVE_EXIT(env, that, glPopClientAttrib_FUNC);
-}
-#endif
-
-#ifndef NO_glPopMatrix
-JNIEXPORT void JNICALL GL_NATIVE(glPopMatrix)
-	(JNIEnv *env, jclass that)
-{
-	GL_NATIVE_ENTER(env, that, glPopMatrix_FUNC);
-	glPopMatrix();
-	GL_NATIVE_EXIT(env, that, glPopMatrix_FUNC);
-}
-#endif
-
-#ifndef NO_glPopName
-JNIEXPORT void JNICALL GL_NATIVE(glPopName)
-	(JNIEnv *env, jclass that)
-{
-	GL_NATIVE_ENTER(env, that, glPopName_FUNC);
-	glPopName();
-	GL_NATIVE_EXIT(env, that, glPopName_FUNC);
-}
-#endif
-
-#ifndef NO_glPrioritizeTextures
-JNIEXPORT void JNICALL GL_NATIVE(glPrioritizeTextures)
-	(JNIEnv *env, jclass that, jint arg0, jintArray arg1, jfloatArray arg2)
-{
-	jint *lparg1=NULL;
-	jfloat *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glPrioritizeTextures_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL);
-		if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
-	}
-	glPrioritizeTextures(arg0, (const GLuint *)lparg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
-		if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glPrioritizeTextures_FUNC);
-}
-#endif
-
-#ifndef NO_glPushAttrib
-JNIEXPORT void JNICALL GL_NATIVE(glPushAttrib)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glPushAttrib_FUNC);
-	glPushAttrib(arg0);
-	GL_NATIVE_EXIT(env, that, glPushAttrib_FUNC);
-}
-#endif
-
-#ifndef NO_glPushClientAttrib
-JNIEXPORT void JNICALL GL_NATIVE(glPushClientAttrib)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glPushClientAttrib_FUNC);
-	glPushClientAttrib(arg0);
-	GL_NATIVE_EXIT(env, that, glPushClientAttrib_FUNC);
-}
-#endif
-
-#ifndef NO_glPushMatrix
-JNIEXPORT void JNICALL GL_NATIVE(glPushMatrix)
-	(JNIEnv *env, jclass that)
-{
-	GL_NATIVE_ENTER(env, that, glPushMatrix_FUNC);
-	glPushMatrix();
-	GL_NATIVE_EXIT(env, that, glPushMatrix_FUNC);
-}
-#endif
-
-#ifndef NO_glPushName
-JNIEXPORT void JNICALL GL_NATIVE(glPushName)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glPushName_FUNC);
-	glPushName(arg0);
-	GL_NATIVE_EXIT(env, that, glPushName_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos2d
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos2d)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1)
-{
-	GL_NATIVE_ENTER(env, that, glRasterPos2d_FUNC);
-	glRasterPos2d(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glRasterPos2d_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos2dv
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos2dv)
-	(JNIEnv *env, jclass that, jdoubleArray arg0)
-{
-	jdouble *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glRasterPos2dv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
-	}
-	glRasterPos2dv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glRasterPos2dv_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos2f
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos2f)
-	(JNIEnv *env, jclass that, jfloat arg0, jfloat arg1)
-{
-	GL_NATIVE_ENTER(env, that, glRasterPos2f_FUNC);
-	glRasterPos2f(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glRasterPos2f_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos2fv
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos2fv)
-	(JNIEnv *env, jclass that, jfloatArray arg0)
-{
-	jfloat *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glRasterPos2fv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
-	}
-	glRasterPos2fv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glRasterPos2fv_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos2i
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos2i)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GL_NATIVE_ENTER(env, that, glRasterPos2i_FUNC);
-	glRasterPos2i(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glRasterPos2i_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos2iv
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos2iv)
-	(JNIEnv *env, jclass that, jintArray arg0)
-{
-	jint *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glRasterPos2iv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
-	}
-	glRasterPos2iv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glRasterPos2iv_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos2s
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos2s)
-	(JNIEnv *env, jclass that, jshort arg0, jshort arg1)
-{
-	GL_NATIVE_ENTER(env, that, glRasterPos2s_FUNC);
-	glRasterPos2s(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glRasterPos2s_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos2sv
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos2sv)
-	(JNIEnv *env, jclass that, jshortArray arg0)
-{
-	jshort *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glRasterPos2sv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
-	}
-	glRasterPos2sv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glRasterPos2sv_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos3d
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos3d)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2)
-{
-	GL_NATIVE_ENTER(env, that, glRasterPos3d_FUNC);
-	glRasterPos3d(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glRasterPos3d_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos3dv
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos3dv)
-	(JNIEnv *env, jclass that, jdoubleArray arg0)
-{
-	jdouble *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glRasterPos3dv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
-	}
-	glRasterPos3dv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glRasterPos3dv_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos3f
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos3f)
-	(JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2)
-{
-	GL_NATIVE_ENTER(env, that, glRasterPos3f_FUNC);
-	glRasterPos3f(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glRasterPos3f_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos3fv
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos3fv)
-	(JNIEnv *env, jclass that, jfloatArray arg0)
-{
-	jfloat *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glRasterPos3fv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
-	}
-	glRasterPos3fv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glRasterPos3fv_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos3i
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos3i)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	GL_NATIVE_ENTER(env, that, glRasterPos3i_FUNC);
-	glRasterPos3i(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glRasterPos3i_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos3iv
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos3iv)
-	(JNIEnv *env, jclass that, jintArray arg0)
-{
-	jint *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glRasterPos3iv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
-	}
-	glRasterPos3iv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glRasterPos3iv_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos3s
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos3s)
-	(JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2)
-{
-	GL_NATIVE_ENTER(env, that, glRasterPos3s_FUNC);
-	glRasterPos3s(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glRasterPos3s_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos3sv
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos3sv)
-	(JNIEnv *env, jclass that, jshortArray arg0)
-{
-	jshort *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glRasterPos3sv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
-	}
-	glRasterPos3sv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glRasterPos3sv_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos4d
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos4d)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3)
-{
-	GL_NATIVE_ENTER(env, that, glRasterPos4d_FUNC);
-	glRasterPos4d(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glRasterPos4d_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos4dv
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos4dv)
-	(JNIEnv *env, jclass that, jdoubleArray arg0)
-{
-	jdouble *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glRasterPos4dv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
-	}
-	glRasterPos4dv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glRasterPos4dv_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos4f
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos4f)
-	(JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2, jfloat arg3)
-{
-	GL_NATIVE_ENTER(env, that, glRasterPos4f_FUNC);
-	glRasterPos4f(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glRasterPos4f_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos4fv
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos4fv)
-	(JNIEnv *env, jclass that, jfloatArray arg0)
-{
-	jfloat *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glRasterPos4fv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
-	}
-	glRasterPos4fv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glRasterPos4fv_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos4i
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos4i)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
-{
-	GL_NATIVE_ENTER(env, that, glRasterPos4i_FUNC);
-	glRasterPos4i(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glRasterPos4i_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos4iv
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos4iv)
-	(JNIEnv *env, jclass that, jintArray arg0)
-{
-	jint *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glRasterPos4iv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
-	}
-	glRasterPos4iv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glRasterPos4iv_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos4s
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos4s)
-	(JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2, jshort arg3)
-{
-	GL_NATIVE_ENTER(env, that, glRasterPos4s_FUNC);
-	glRasterPos4s(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glRasterPos4s_FUNC);
-}
-#endif
-
-#ifndef NO_glRasterPos4sv
-JNIEXPORT void JNICALL GL_NATIVE(glRasterPos4sv)
-	(JNIEnv *env, jclass that, jshortArray arg0)
-{
-	jshort *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glRasterPos4sv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
-	}
-	glRasterPos4sv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glRasterPos4sv_FUNC);
-}
-#endif
-
-#ifndef NO_glReadBuffer
-JNIEXPORT void JNICALL GL_NATIVE(glReadBuffer)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glReadBuffer_FUNC);
-	glReadBuffer(arg0);
-	GL_NATIVE_EXIT(env, that, glReadBuffer_FUNC);
-}
-#endif
-
-#ifndef NO_glReadPixels
-JNIEXPORT void JNICALL GL_NATIVE(glReadPixels)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5, jintArray arg6)
-{
-	jint *lparg6=NULL;
-	GL_NATIVE_ENTER(env, that, glReadPixels_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg6) lparg6 = (*env)->GetPrimitiveArrayCritical(env, arg6, NULL);
-	} else
-#endif
-	{
-		if (arg6) lparg6 = (*env)->GetIntArrayElements(env, arg6, NULL);
-	}
-	glReadPixels(arg0, arg1, arg2, arg3, arg4, arg5, lparg6);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg6) (*env)->ReleasePrimitiveArrayCritical(env, arg6, lparg6, 0);
-	} else
-#endif
-	{
-		if (arg6) (*env)->ReleaseIntArrayElements(env, arg6, lparg6, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glReadPixels_FUNC);
-}
-#endif
-
-#ifndef NO_glRectd
-JNIEXPORT void JNICALL GL_NATIVE(glRectd)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3)
-{
-	GL_NATIVE_ENTER(env, that, glRectd_FUNC);
-	glRectd(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glRectd_FUNC);
-}
-#endif
-
-#ifndef NO_glRectdv
-JNIEXPORT void JNICALL GL_NATIVE(glRectdv)
-	(JNIEnv *env, jclass that, jdoubleArray arg0, jdoubleArray arg1)
-{
-	jdouble *lparg0=NULL;
-	jdouble *lparg1=NULL;
-	GL_NATIVE_ENTER(env, that, glRectdv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
-		if (arg1) lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL);
-	}
-	glRectdv(lparg0, lparg1);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
-		if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glRectdv_FUNC);
-}
-#endif
-
-#ifndef NO_glRectf
-JNIEXPORT void JNICALL GL_NATIVE(glRectf)
-	(JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2, jfloat arg3)
-{
-	GL_NATIVE_ENTER(env, that, glRectf_FUNC);
-	glRectf(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glRectf_FUNC);
-}
-#endif
-
-#ifndef NO_glRectfv
-JNIEXPORT void JNICALL GL_NATIVE(glRectfv)
-	(JNIEnv *env, jclass that, jfloatArray arg0, jfloatArray arg1)
-{
-	jfloat *lparg0=NULL;
-	jfloat *lparg1=NULL;
-	GL_NATIVE_ENTER(env, that, glRectfv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
-		if (arg1) lparg1 = (*env)->GetFloatArrayElements(env, arg1, NULL);
-	}
-	glRectfv(lparg0, lparg1);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg1) (*env)->ReleaseFloatArrayElements(env, arg1, lparg1, 0);
-		if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glRectfv_FUNC);
-}
-#endif
-
-#ifndef NO_glRecti
-JNIEXPORT void JNICALL GL_NATIVE(glRecti)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
-{
-	GL_NATIVE_ENTER(env, that, glRecti_FUNC);
-	glRecti(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glRecti_FUNC);
-}
-#endif
-
-#ifndef NO_glRectiv
-JNIEXPORT void JNICALL GL_NATIVE(glRectiv)
-	(JNIEnv *env, jclass that, jintArray arg0, jintArray arg1)
-{
-	jint *lparg0=NULL;
-	jint *lparg1=NULL;
-	GL_NATIVE_ENTER(env, that, glRectiv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
-		if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL);
-	}
-	glRectiv(lparg0, lparg1);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
-		if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glRectiv_FUNC);
-}
-#endif
-
-#ifndef NO_glRects
-JNIEXPORT void JNICALL GL_NATIVE(glRects)
-	(JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2, jshort arg3)
-{
-	GL_NATIVE_ENTER(env, that, glRects_FUNC);
-	glRects(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glRects_FUNC);
-}
-#endif
-
-#ifndef NO_glRectsv
-JNIEXPORT void JNICALL GL_NATIVE(glRectsv)
-	(JNIEnv *env, jclass that, jshortArray arg0, jshortArray arg1)
-{
-	jshort *lparg0=NULL;
-	jshort *lparg1=NULL;
-	GL_NATIVE_ENTER(env, that, glRectsv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
-		if (arg1) lparg1 = (*env)->GetShortArrayElements(env, arg1, NULL);
-	}
-	glRectsv(lparg0, lparg1);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg1) (*env)->ReleaseShortArrayElements(env, arg1, lparg1, 0);
-		if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glRectsv_FUNC);
-}
-#endif
-
-#ifndef NO_glRenderMode
-JNIEXPORT jint JNICALL GL_NATIVE(glRenderMode)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	jint rc;
-	GL_NATIVE_ENTER(env, that, glRenderMode_FUNC);
-	rc = (jint)glRenderMode(arg0);
-	GL_NATIVE_EXIT(env, that, glRenderMode_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_glRotated
-JNIEXPORT void JNICALL GL_NATIVE(glRotated)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3)
-{
-	GL_NATIVE_ENTER(env, that, glRotated_FUNC);
-	glRotated(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glRotated_FUNC);
-}
-#endif
-
-#ifndef NO_glRotatef
-JNIEXPORT void JNICALL GL_NATIVE(glRotatef)
-	(JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2, jfloat arg3)
-{
-	GL_NATIVE_ENTER(env, that, glRotatef_FUNC);
-	glRotatef(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glRotatef_FUNC);
-}
-#endif
-
-#ifndef NO_glScaled
-JNIEXPORT void JNICALL GL_NATIVE(glScaled)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2)
-{
-	GL_NATIVE_ENTER(env, that, glScaled_FUNC);
-	glScaled(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glScaled_FUNC);
-}
-#endif
-
-#ifndef NO_glScalef
-JNIEXPORT void JNICALL GL_NATIVE(glScalef)
-	(JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2)
-{
-	GL_NATIVE_ENTER(env, that, glScalef_FUNC);
-	glScalef(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glScalef_FUNC);
-}
-#endif
-
-#ifndef NO_glScissor
-JNIEXPORT void JNICALL GL_NATIVE(glScissor)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
-{
-	GL_NATIVE_ENTER(env, that, glScissor_FUNC);
-	glScissor(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glScissor_FUNC);
-}
-#endif
-
-#ifndef NO_glSelectBuffer
-JNIEXPORT void JNICALL GL_NATIVE(glSelectBuffer)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GL_NATIVE_ENTER(env, that, glSelectBuffer_FUNC);
-	glSelectBuffer(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glSelectBuffer_FUNC);
-}
-#endif
-
-#ifndef NO_glShadeModel
-JNIEXPORT void JNICALL GL_NATIVE(glShadeModel)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glShadeModel_FUNC);
-	glShadeModel(arg0);
-	GL_NATIVE_EXIT(env, that, glShadeModel_FUNC);
-}
-#endif
-
-#ifndef NO_glStencilFunc
-JNIEXPORT void JNICALL GL_NATIVE(glStencilFunc)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	GL_NATIVE_ENTER(env, that, glStencilFunc_FUNC);
-	glStencilFunc(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glStencilFunc_FUNC);
-}
-#endif
-
-#ifndef NO_glStencilMask
-JNIEXPORT void JNICALL GL_NATIVE(glStencilMask)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glStencilMask_FUNC);
-	glStencilMask(arg0);
-	GL_NATIVE_EXIT(env, that, glStencilMask_FUNC);
-}
-#endif
-
-#ifndef NO_glStencilOp
-JNIEXPORT void JNICALL GL_NATIVE(glStencilOp)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	GL_NATIVE_ENTER(env, that, glStencilOp_FUNC);
-	glStencilOp(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glStencilOp_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord1d
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord1d)
-	(JNIEnv *env, jclass that, jdouble arg0)
-{
-	GL_NATIVE_ENTER(env, that, glTexCoord1d_FUNC);
-	glTexCoord1d(arg0);
-	GL_NATIVE_EXIT(env, that, glTexCoord1d_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord1dv
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord1dv)
-	(JNIEnv *env, jclass that, jdoubleArray arg0)
-{
-	jdouble *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glTexCoord1dv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
-	}
-	glTexCoord1dv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexCoord1dv_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord1f
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord1f)
-	(JNIEnv *env, jclass that, jfloat arg0)
-{
-	GL_NATIVE_ENTER(env, that, glTexCoord1f_FUNC);
-	glTexCoord1f(arg0);
-	GL_NATIVE_EXIT(env, that, glTexCoord1f_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord1fv
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord1fv)
-	(JNIEnv *env, jclass that, jfloatArray arg0)
-{
-	jfloat *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glTexCoord1fv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
-	}
-	glTexCoord1fv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexCoord1fv_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord1i
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord1i)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GL_NATIVE_ENTER(env, that, glTexCoord1i_FUNC);
-	glTexCoord1i(arg0);
-	GL_NATIVE_EXIT(env, that, glTexCoord1i_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord1iv
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord1iv)
-	(JNIEnv *env, jclass that, jintArray arg0)
-{
-	jint *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glTexCoord1iv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
-	}
-	glTexCoord1iv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexCoord1iv_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord1s
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord1s)
-	(JNIEnv *env, jclass that, jshort arg0)
-{
-	GL_NATIVE_ENTER(env, that, glTexCoord1s_FUNC);
-	glTexCoord1s(arg0);
-	GL_NATIVE_EXIT(env, that, glTexCoord1s_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord1sv
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord1sv)
-	(JNIEnv *env, jclass that, jshortArray arg0)
-{
-	jshort *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glTexCoord1sv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
-	}
-	glTexCoord1sv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexCoord1sv_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord2d
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord2d)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1)
-{
-	GL_NATIVE_ENTER(env, that, glTexCoord2d_FUNC);
-	glTexCoord2d(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glTexCoord2d_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord2dv
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord2dv)
-	(JNIEnv *env, jclass that, jdoubleArray arg0)
-{
-	jdouble *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glTexCoord2dv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
-	}
-	glTexCoord2dv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexCoord2dv_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord2f
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord2f)
-	(JNIEnv *env, jclass that, jfloat arg0, jfloat arg1)
-{
-	GL_NATIVE_ENTER(env, that, glTexCoord2f_FUNC);
-	glTexCoord2f(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glTexCoord2f_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord2fv
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord2fv)
-	(JNIEnv *env, jclass that, jfloatArray arg0)
-{
-	jfloat *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glTexCoord2fv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
-	}
-	glTexCoord2fv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexCoord2fv_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord2i
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord2i)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GL_NATIVE_ENTER(env, that, glTexCoord2i_FUNC);
-	glTexCoord2i(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glTexCoord2i_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord2iv
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord2iv)
-	(JNIEnv *env, jclass that, jintArray arg0)
-{
-	jint *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glTexCoord2iv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
-	}
-	glTexCoord2iv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexCoord2iv_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord2s
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord2s)
-	(JNIEnv *env, jclass that, jshort arg0, jshort arg1)
-{
-	GL_NATIVE_ENTER(env, that, glTexCoord2s_FUNC);
-	glTexCoord2s(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glTexCoord2s_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord2sv
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord2sv)
-	(JNIEnv *env, jclass that, jshortArray arg0)
-{
-	jshort *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glTexCoord2sv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
-	}
-	glTexCoord2sv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexCoord2sv_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord3d
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord3d)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2)
-{
-	GL_NATIVE_ENTER(env, that, glTexCoord3d_FUNC);
-	glTexCoord3d(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glTexCoord3d_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord3dv
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord3dv)
-	(JNIEnv *env, jclass that, jdoubleArray arg0)
-{
-	jdouble *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glTexCoord3dv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
-	}
-	glTexCoord3dv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexCoord3dv_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord3f
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord3f)
-	(JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2)
-{
-	GL_NATIVE_ENTER(env, that, glTexCoord3f_FUNC);
-	glTexCoord3f(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glTexCoord3f_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord3fv
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord3fv)
-	(JNIEnv *env, jclass that, jfloatArray arg0)
-{
-	jfloat *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glTexCoord3fv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
-	}
-	glTexCoord3fv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexCoord3fv_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord3i
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord3i)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	GL_NATIVE_ENTER(env, that, glTexCoord3i_FUNC);
-	glTexCoord3i(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glTexCoord3i_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord3iv
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord3iv)
-	(JNIEnv *env, jclass that, jintArray arg0)
-{
-	jint *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glTexCoord3iv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
-	}
-	glTexCoord3iv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexCoord3iv_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord3s
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord3s)
-	(JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2)
-{
-	GL_NATIVE_ENTER(env, that, glTexCoord3s_FUNC);
-	glTexCoord3s(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glTexCoord3s_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord3sv
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord3sv)
-	(JNIEnv *env, jclass that, jshortArray arg0)
-{
-	jshort *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glTexCoord3sv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
-	}
-	glTexCoord3sv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexCoord3sv_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord4d
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord4d)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3)
-{
-	GL_NATIVE_ENTER(env, that, glTexCoord4d_FUNC);
-	glTexCoord4d(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glTexCoord4d_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord4dv
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord4dv)
-	(JNIEnv *env, jclass that, jdoubleArray arg0)
-{
-	jdouble *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glTexCoord4dv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
-	}
-	glTexCoord4dv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexCoord4dv_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord4f
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord4f)
-	(JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2, jfloat arg3)
-{
-	GL_NATIVE_ENTER(env, that, glTexCoord4f_FUNC);
-	glTexCoord4f(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glTexCoord4f_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord4fv
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord4fv)
-	(JNIEnv *env, jclass that, jfloatArray arg0)
-{
-	jfloat *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glTexCoord4fv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
-	}
-	glTexCoord4fv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexCoord4fv_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord4i
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord4i)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
-{
-	GL_NATIVE_ENTER(env, that, glTexCoord4i_FUNC);
-	glTexCoord4i(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glTexCoord4i_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord4iv
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord4iv)
-	(JNIEnv *env, jclass that, jintArray arg0)
-{
-	jint *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glTexCoord4iv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
-	}
-	glTexCoord4iv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexCoord4iv_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord4s
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord4s)
-	(JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2, jshort arg3)
-{
-	GL_NATIVE_ENTER(env, that, glTexCoord4s_FUNC);
-	glTexCoord4s(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glTexCoord4s_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoord4sv
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoord4sv)
-	(JNIEnv *env, jclass that, jshortArray arg0)
-{
-	jshort *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glTexCoord4sv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
-	}
-	glTexCoord4sv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexCoord4sv_FUNC);
-}
-#endif
-
-#ifndef NO_glTexCoordPointer
-JNIEXPORT void JNICALL GL_NATIVE(glTexCoordPointer)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jintArray arg3)
-{
-	jint *lparg3=NULL;
-	GL_NATIVE_ENTER(env, that, glTexCoordPointer_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg3) lparg3 = (*env)->GetPrimitiveArrayCritical(env, arg3, NULL);
-	} else
-#endif
-	{
-		if (arg3) lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL);
-	}
-	glTexCoordPointer(arg0, arg1, arg2, lparg3);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg3) (*env)->ReleasePrimitiveArrayCritical(env, arg3, lparg3, 0);
-	} else
-#endif
-	{
-		if (arg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexCoordPointer_FUNC);
-}
-#endif
-
-#ifndef NO_glTexEnvf
-JNIEXPORT void JNICALL GL_NATIVE(glTexEnvf)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloat arg2)
-{
-	GL_NATIVE_ENTER(env, that, glTexEnvf_FUNC);
-	glTexEnvf(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glTexEnvf_FUNC);
-}
-#endif
-
-#ifndef NO_glTexEnvfv
-JNIEXPORT void JNICALL GL_NATIVE(glTexEnvfv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
-{
-	jfloat *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glTexEnvfv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
-	}
-	glTexEnvfv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexEnvfv_FUNC);
-}
-#endif
-
-#ifndef NO_glTexEnvi
-JNIEXPORT void JNICALL GL_NATIVE(glTexEnvi)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	GL_NATIVE_ENTER(env, that, glTexEnvi_FUNC);
-	glTexEnvi(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glTexEnvi_FUNC);
-}
-#endif
-
-#ifndef NO_glTexEnviv
-JNIEXPORT void JNICALL GL_NATIVE(glTexEnviv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
-{
-	jint *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glTexEnviv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
-	}
-	glTexEnviv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexEnviv_FUNC);
-}
-#endif
-
-#ifndef NO_glTexGend
-JNIEXPORT void JNICALL GL_NATIVE(glTexGend)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jdouble arg2)
-{
-	GL_NATIVE_ENTER(env, that, glTexGend_FUNC);
-	glTexGend(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glTexGend_FUNC);
-}
-#endif
-
-#ifndef NO_glTexGendv
-JNIEXPORT void JNICALL GL_NATIVE(glTexGendv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jdoubleArray arg2)
-{
-	jdouble *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glTexGendv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetDoubleArrayElements(env, arg2, NULL);
-	}
-	glTexGendv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseDoubleArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexGendv_FUNC);
-}
-#endif
-
-#ifndef NO_glTexGenf
-JNIEXPORT void JNICALL GL_NATIVE(glTexGenf)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloat arg2)
-{
-	GL_NATIVE_ENTER(env, that, glTexGenf_FUNC);
-	glTexGenf(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glTexGenf_FUNC);
-}
-#endif
-
-#ifndef NO_glTexGenfv
-JNIEXPORT void JNICALL GL_NATIVE(glTexGenfv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
-{
-	jfloat *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glTexGenfv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
-	}
-	glTexGenfv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexGenfv_FUNC);
-}
-#endif
-
-#ifndef NO_glTexGeni
-JNIEXPORT void JNICALL GL_NATIVE(glTexGeni)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	GL_NATIVE_ENTER(env, that, glTexGeni_FUNC);
-	glTexGeni(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glTexGeni_FUNC);
-}
-#endif
-
-#ifndef NO_glTexGeniv
-JNIEXPORT void JNICALL GL_NATIVE(glTexGeniv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
-{
-	jint *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glTexGeniv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
-	}
-	glTexGeniv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexGeniv_FUNC);
-}
-#endif
-
-#ifndef NO_glTexImage1D
-JNIEXPORT void JNICALL GL_NATIVE(glTexImage1D)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5, jint arg6, jintArray arg7)
-{
-	jint *lparg7=NULL;
-	GL_NATIVE_ENTER(env, that, glTexImage1D_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg7) lparg7 = (*env)->GetPrimitiveArrayCritical(env, arg7, NULL);
-	} else
-#endif
-	{
-		if (arg7) lparg7 = (*env)->GetIntArrayElements(env, arg7, NULL);
-	}
-	glTexImage1D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, lparg7);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg7) (*env)->ReleasePrimitiveArrayCritical(env, arg7, lparg7, 0);
-	} else
-#endif
-	{
-		if (arg7) (*env)->ReleaseIntArrayElements(env, arg7, lparg7, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexImage1D_FUNC);
-}
-#endif
-
-#ifndef NO_glTexImage2D
-JNIEXPORT void JNICALL GL_NATIVE(glTexImage2D)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5, jint arg6, jint arg7, jbyteArray arg8)
-{
-	jbyte *lparg8=NULL;
-	GL_NATIVE_ENTER(env, that, glTexImage2D_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg8) lparg8 = (*env)->GetPrimitiveArrayCritical(env, arg8, NULL);
-	} else
-#endif
-	{
-		if (arg8) lparg8 = (*env)->GetByteArrayElements(env, arg8, NULL);
-	}
-	glTexImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, lparg8);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg8) (*env)->ReleasePrimitiveArrayCritical(env, arg8, lparg8, 0);
-	} else
-#endif
-	{
-		if (arg8) (*env)->ReleaseByteArrayElements(env, arg8, lparg8, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexImage2D_FUNC);
-}
-#endif
-
-#ifndef NO_glTexParameterf
-JNIEXPORT void JNICALL GL_NATIVE(glTexParameterf)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloat arg2)
-{
-	GL_NATIVE_ENTER(env, that, glTexParameterf_FUNC);
-	glTexParameterf(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glTexParameterf_FUNC);
-}
-#endif
-
-#ifndef NO_glTexParameterfv
-JNIEXPORT void JNICALL GL_NATIVE(glTexParameterfv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
-{
-	jfloat *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glTexParameterfv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
-	}
-	glTexParameterfv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexParameterfv_FUNC);
-}
-#endif
-
-#ifndef NO_glTexParameteri
-JNIEXPORT void JNICALL GL_NATIVE(glTexParameteri)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	GL_NATIVE_ENTER(env, that, glTexParameteri_FUNC);
-	glTexParameteri(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glTexParameteri_FUNC);
-}
-#endif
-
-#ifndef NO_glTexParameteriv
-JNIEXPORT void JNICALL GL_NATIVE(glTexParameteriv)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
-{
-	jint *lparg2=NULL;
-	GL_NATIVE_ENTER(env, that, glTexParameteriv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
-	}
-	glTexParameteriv(arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexParameteriv_FUNC);
-}
-#endif
-
-#ifndef NO_glTexSubImage1D
-JNIEXPORT void JNICALL GL_NATIVE(glTexSubImage1D)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5, jintArray arg6)
-{
-	jint *lparg6=NULL;
-	GL_NATIVE_ENTER(env, that, glTexSubImage1D_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg6) lparg6 = (*env)->GetPrimitiveArrayCritical(env, arg6, NULL);
-	} else
-#endif
-	{
-		if (arg6) lparg6 = (*env)->GetIntArrayElements(env, arg6, NULL);
-	}
-	glTexSubImage1D(arg0, arg1, arg2, arg3, arg4, arg5, lparg6);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg6) (*env)->ReleasePrimitiveArrayCritical(env, arg6, lparg6, 0);
-	} else
-#endif
-	{
-		if (arg6) (*env)->ReleaseIntArrayElements(env, arg6, lparg6, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexSubImage1D_FUNC);
-}
-#endif
-
-#ifndef NO_glTexSubImage2D
-JNIEXPORT void JNICALL GL_NATIVE(glTexSubImage2D)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5, jint arg6, jint arg7, jintArray arg8)
-{
-	jint *lparg8=NULL;
-	GL_NATIVE_ENTER(env, that, glTexSubImage2D_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg8) lparg8 = (*env)->GetPrimitiveArrayCritical(env, arg8, NULL);
-	} else
-#endif
-	{
-		if (arg8) lparg8 = (*env)->GetIntArrayElements(env, arg8, NULL);
-	}
-	glTexSubImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, lparg8);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg8) (*env)->ReleasePrimitiveArrayCritical(env, arg8, lparg8, 0);
-	} else
-#endif
-	{
-		if (arg8) (*env)->ReleaseIntArrayElements(env, arg8, lparg8, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glTexSubImage2D_FUNC);
-}
-#endif
-
-#ifndef NO_glTranslated
-JNIEXPORT void JNICALL GL_NATIVE(glTranslated)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2)
-{
-	GL_NATIVE_ENTER(env, that, glTranslated_FUNC);
-	glTranslated(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glTranslated_FUNC);
-}
-#endif
-
-#ifndef NO_glTranslatef
-JNIEXPORT void JNICALL GL_NATIVE(glTranslatef)
-	(JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2)
-{
-	GL_NATIVE_ENTER(env, that, glTranslatef_FUNC);
-	glTranslatef(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glTranslatef_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex2d
-JNIEXPORT void JNICALL GL_NATIVE(glVertex2d)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1)
-{
-	GL_NATIVE_ENTER(env, that, glVertex2d_FUNC);
-	glVertex2d(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glVertex2d_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex2dv
-JNIEXPORT void JNICALL GL_NATIVE(glVertex2dv)
-	(JNIEnv *env, jclass that, jdoubleArray arg0)
-{
-	jdouble *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glVertex2dv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
-	}
-	glVertex2dv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glVertex2dv_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex2f
-JNIEXPORT void JNICALL GL_NATIVE(glVertex2f)
-	(JNIEnv *env, jclass that, jfloat arg0, jfloat arg1)
-{
-	GL_NATIVE_ENTER(env, that, glVertex2f_FUNC);
-	glVertex2f(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glVertex2f_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex2fv
-JNIEXPORT void JNICALL GL_NATIVE(glVertex2fv)
-	(JNIEnv *env, jclass that, jfloatArray arg0)
-{
-	jfloat *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glVertex2fv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
-	}
-	glVertex2fv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glVertex2fv_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex2i
-JNIEXPORT void JNICALL GL_NATIVE(glVertex2i)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GL_NATIVE_ENTER(env, that, glVertex2i_FUNC);
-	glVertex2i(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glVertex2i_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex2iv
-JNIEXPORT void JNICALL GL_NATIVE(glVertex2iv)
-	(JNIEnv *env, jclass that, jintArray arg0)
-{
-	jint *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glVertex2iv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
-	}
-	glVertex2iv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glVertex2iv_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex2s
-JNIEXPORT void JNICALL GL_NATIVE(glVertex2s)
-	(JNIEnv *env, jclass that, jshort arg0, jshort arg1)
-{
-	GL_NATIVE_ENTER(env, that, glVertex2s_FUNC);
-	glVertex2s(arg0, arg1);
-	GL_NATIVE_EXIT(env, that, glVertex2s_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex2sv
-JNIEXPORT void JNICALL GL_NATIVE(glVertex2sv)
-	(JNIEnv *env, jclass that, jshortArray arg0)
-{
-	jshort *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glVertex2sv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
-	}
-	glVertex2sv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glVertex2sv_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex3d
-JNIEXPORT void JNICALL GL_NATIVE(glVertex3d)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2)
-{
-	GL_NATIVE_ENTER(env, that, glVertex3d_FUNC);
-	glVertex3d(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glVertex3d_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex3dv
-JNIEXPORT void JNICALL GL_NATIVE(glVertex3dv)
-	(JNIEnv *env, jclass that, jdoubleArray arg0)
-{
-	jdouble *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glVertex3dv_FUNC);
-	if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
-	glVertex3dv(lparg0);
-	if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
-	GL_NATIVE_EXIT(env, that, glVertex3dv_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex3f
-JNIEXPORT void JNICALL GL_NATIVE(glVertex3f)
-	(JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2)
-{
-	GL_NATIVE_ENTER(env, that, glVertex3f_FUNC);
-	glVertex3f(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glVertex3f_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex3fv
-JNIEXPORT void JNICALL GL_NATIVE(glVertex3fv)
-	(JNIEnv *env, jclass that, jfloatArray arg0)
-{
-	jfloat *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glVertex3fv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
-	}
-	glVertex3fv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glVertex3fv_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex3i
-JNIEXPORT void JNICALL GL_NATIVE(glVertex3i)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	GL_NATIVE_ENTER(env, that, glVertex3i_FUNC);
-	glVertex3i(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glVertex3i_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex3iv
-JNIEXPORT void JNICALL GL_NATIVE(glVertex3iv)
-	(JNIEnv *env, jclass that, jintArray arg0)
-{
-	jint *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glVertex3iv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
-	}
-	glVertex3iv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glVertex3iv_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex3s
-JNIEXPORT void JNICALL GL_NATIVE(glVertex3s)
-	(JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2)
-{
-	GL_NATIVE_ENTER(env, that, glVertex3s_FUNC);
-	glVertex3s(arg0, arg1, arg2);
-	GL_NATIVE_EXIT(env, that, glVertex3s_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex3sv
-JNIEXPORT void JNICALL GL_NATIVE(glVertex3sv)
-	(JNIEnv *env, jclass that, jshortArray arg0)
-{
-	jshort *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glVertex3sv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
-	}
-	glVertex3sv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glVertex3sv_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex4d
-JNIEXPORT void JNICALL GL_NATIVE(glVertex4d)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3)
-{
-	GL_NATIVE_ENTER(env, that, glVertex4d_FUNC);
-	glVertex4d(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glVertex4d_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex4dv
-JNIEXPORT void JNICALL GL_NATIVE(glVertex4dv)
-	(JNIEnv *env, jclass that, jdoubleArray arg0)
-{
-	jdouble *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glVertex4dv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
-	}
-	glVertex4dv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glVertex4dv_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex4f
-JNIEXPORT void JNICALL GL_NATIVE(glVertex4f)
-	(JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2, jfloat arg3)
-{
-	GL_NATIVE_ENTER(env, that, glVertex4f_FUNC);
-	glVertex4f(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glVertex4f_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex4fv
-JNIEXPORT void JNICALL GL_NATIVE(glVertex4fv)
-	(JNIEnv *env, jclass that, jfloatArray arg0)
-{
-	jfloat *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glVertex4fv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
-	}
-	glVertex4fv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glVertex4fv_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex4i
-JNIEXPORT void JNICALL GL_NATIVE(glVertex4i)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
-{
-	GL_NATIVE_ENTER(env, that, glVertex4i_FUNC);
-	glVertex4i(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glVertex4i_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex4iv
-JNIEXPORT void JNICALL GL_NATIVE(glVertex4iv)
-	(JNIEnv *env, jclass that, jintArray arg0)
-{
-	jint *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glVertex4iv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
-	}
-	glVertex4iv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glVertex4iv_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex4s
-JNIEXPORT void JNICALL GL_NATIVE(glVertex4s)
-	(JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2, jshort arg3)
-{
-	GL_NATIVE_ENTER(env, that, glVertex4s_FUNC);
-	glVertex4s(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glVertex4s_FUNC);
-}
-#endif
-
-#ifndef NO_glVertex4sv
-JNIEXPORT void JNICALL GL_NATIVE(glVertex4sv)
-	(JNIEnv *env, jclass that, jshortArray arg0)
-{
-	jshort *lparg0=NULL;
-	GL_NATIVE_ENTER(env, that, glVertex4sv_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL);
-	} else
-#endif
-	{
-		if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
-	}
-	glVertex4sv(lparg0);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
-	} else
-#endif
-	{
-		if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glVertex4sv_FUNC);
-}
-#endif
-
-#ifndef NO_glVertexPointer
-JNIEXPORT void JNICALL GL_NATIVE(glVertexPointer)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jintArray arg3)
-{
-	jint *lparg3=NULL;
-	GL_NATIVE_ENTER(env, that, glVertexPointer_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg3) lparg3 = (*env)->GetPrimitiveArrayCritical(env, arg3, NULL);
-	} else
-#endif
-	{
-		if (arg3) lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL);
-	}
-	glVertexPointer(arg0, arg1, arg2, lparg3);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg3) (*env)->ReleasePrimitiveArrayCritical(env, arg3, lparg3, 0);
-	} else
-#endif
-	{
-		if (arg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
-	}
-	GL_NATIVE_EXIT(env, that, glVertexPointer_FUNC);
-}
-#endif
-
-#ifndef NO_glViewport
-JNIEXPORT void JNICALL GL_NATIVE(glViewport)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
-{
-	GL_NATIVE_ENTER(env, that, glViewport_FUNC);
-	glViewport(arg0, arg1, arg2, arg3);
-	GL_NATIVE_EXIT(env, that, glViewport_FUNC);
-}
-#endif
-
diff --git a/bundles/org.eclipse.swt.opengl/common/library/gl.h b/bundles/org.eclipse.swt.opengl/common/library/gl.h
deleted file mode 100644
index c8f0a12..0000000
--- a/bundles/org.eclipse.swt.opengl/common/library/gl.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifdef __APPLE__
-#include <OpenGL/gl.h>
-#else
-#ifdef WIN32
-#include <windows.h>
-#endif
-#include <GL/gl.h>
-#endif
-
-extern int IS_JNI_1_2;
diff --git a/bundles/org.eclipse.swt.opengl/common/library/gl_stats.c b/bundles/org.eclipse.swt.opengl/common/library/gl_stats.c
deleted file mode 100644
index 257efe0..0000000
--- a/bundles/org.eclipse.swt.opengl/common/library/gl_stats.c
+++ /dev/null
@@ -1,366 +0,0 @@
-#include "swt.h"
-#include "gl_stats.h"
-
-#ifdef NATIVE_STATS
-
-int GL_nativeFunctionCount = 335;
-int GL_nativeFunctionCallCount[335];
-char * GL_nativeFunctionNames[] = {
-	"glAccum", 
-	"glAlphaFunc", 
-	"glAreTexturesResident", 
-	"glArrayElement", 
-	"glBegin", 
-	"glBindTexture", 
-	"glBitmap", 
-	"glBlendFunc", 
-	"glCallList", 
-	"glCallLists__II_3B", 
-	"glCallLists__II_3C", 
-	"glCallLists__II_3I", 
-	"glClear", 
-	"glClearAccum", 
-	"glClearColor", 
-	"glClearDepth", 
-	"glClearIndex", 
-	"glClearStencil", 
-	"glClipPlane", 
-	"glColor3b", 
-	"glColor3bv", 
-	"glColor3d", 
-	"glColor3dv", 
-	"glColor3f", 
-	"glColor3fv", 
-	"glColor3i", 
-	"glColor3iv", 
-	"glColor3s", 
-	"glColor3sv", 
-	"glColor3ub", 
-	"glColor3ubv", 
-	"glColor3ui", 
-	"glColor3uiv", 
-	"glColor3us", 
-	"glColor3usv", 
-	"glColor4b", 
-	"glColor4bv", 
-	"glColor4d", 
-	"glColor4dv", 
-	"glColor4f", 
-	"glColor4fv", 
-	"glColor4i", 
-	"glColor4iv", 
-	"glColor4s", 
-	"glColor4ub", 
-	"glColor4ubv", 
-	"glColor4ui", 
-	"glColor4uiv", 
-	"glColor4us", 
-	"glColor4usv", 
-	"glColorMask", 
-	"glColorMaterial", 
-	"glColorPointer", 
-	"glCopyPixels", 
-	"glCopyTexImage1D", 
-	"glCopyTexImage2D", 
-	"glCopyTexSubImage1D", 
-	"glCopyTexSubImage2D", 
-	"glCullFace", 
-	"glDeleteLists", 
-	"glDeleteTextures", 
-	"glDepthFunc", 
-	"glDepthMask", 
-	"glDepthRange", 
-	"glDisable", 
-	"glDisableClientState", 
-	"glDrawArrays", 
-	"glDrawBuffer", 
-	"glDrawElements", 
-	"glDrawPixels", 
-	"glEdgeFlag", 
-	"glEdgeFlagPointer", 
-	"glEdgeFlagv", 
-	"glEnable", 
-	"glEnableClientState", 
-	"glEnd", 
-	"glEndList", 
-	"glEvalCoord1d", 
-	"glEvalCoord1dv", 
-	"glEvalCoord1f", 
-	"glEvalCoord1fv", 
-	"glEvalCoord2d", 
-	"glEvalCoord2dv", 
-	"glEvalCoord2f", 
-	"glEvalCoord2fv", 
-	"glEvalMesh1", 
-	"glEvalMesh2", 
-	"glEvalPoint1", 
-	"glEvalPoint2", 
-	"glFeedbackBuffer", 
-	"glFinish", 
-	"glFlush", 
-	"glFogf", 
-	"glFogfv", 
-	"glFogi", 
-	"glFogiv", 
-	"glFrontFace", 
-	"glFrustum", 
-	"glGenLists", 
-	"glGenTextures", 
-	"glGetBooleanv", 
-	"glGetClipPlane", 
-	"glGetDoublev", 
-	"glGetError", 
-	"glGetFloatv", 
-	"glGetIntegerv", 
-	"glGetLightfv", 
-	"glGetLightiv", 
-	"glGetMapdv", 
-	"glGetMapfv", 
-	"glGetMapiv", 
-	"glGetMaterialfv", 
-	"glGetMaterialiv", 
-	"glGetPixelMapfv", 
-	"glGetPixelMapuiv", 
-	"glGetPixelMapusv", 
-	"glGetPointerv", 
-	"glGetPolygonStipple", 
-	"glGetString", 
-	"glGetTexEnvfv", 
-	"glGetTexEnviv", 
-	"glGetTexGendv", 
-	"glGetTexGenfv", 
-	"glGetTexGeniv", 
-	"glGetTexImage", 
-	"glGetTexLevelParameterfv", 
-	"glGetTexLevelParameteriv", 
-	"glGetTexParameterfv", 
-	"glGetTexParameteriv", 
-	"glHint", 
-	"glIndexMask", 
-	"glIndexPointer", 
-	"glIndexd", 
-	"glIndexdv", 
-	"glIndexf", 
-	"glIndexfv", 
-	"glIndexi", 
-	"glIndexiv", 
-	"glIndexs", 
-	"glIndexsv", 
-	"glInitNames", 
-	"glInterleavedArrays", 
-	"glIsEnabled", 
-	"glIsList", 
-	"glIsTexture", 
-	"glLightModelf", 
-	"glLightModelfv", 
-	"glLightModeli", 
-	"glLightModeliv", 
-	"glLightf", 
-	"glLightfv", 
-	"glLighti", 
-	"glLightiv", 
-	"glLineStipple", 
-	"glLineWidth", 
-	"glListBase", 
-	"glLoadIdentity", 
-	"glLoadMatrixd", 
-	"glLoadMatrixf", 
-	"glLoadName", 
-	"glLogicOp", 
-	"glMap1d", 
-	"glMap1f", 
-	"glMap2d", 
-	"glMap2f", 
-	"glMapGrid1d", 
-	"glMapGrid1f", 
-	"glMapGrid2d", 
-	"glMapGrid2f", 
-	"glMaterialf", 
-	"glMaterialfv", 
-	"glMateriali", 
-	"glMaterialiv", 
-	"glMatrixMode", 
-	"glMultMatrixd", 
-	"glMultMatrixf", 
-	"glNewList", 
-	"glNormal3b", 
-	"glNormal3bv", 
-	"glNormal3d", 
-	"glNormal3dv", 
-	"glNormal3f", 
-	"glNormal3fv", 
-	"glNormal3i", 
-	"glNormal3iv", 
-	"glNormal3s", 
-	"glNormal3sv", 
-	"glNormalPointer", 
-	"glOrtho", 
-	"glPassThrough", 
-	"glPixelMapfv", 
-	"glPixelMapuiv", 
-	"glPixelMapusv", 
-	"glPixelStoref", 
-	"glPixelStorei", 
-	"glPixelTransferf", 
-	"glPixelTransferi", 
-	"glPixelZoom", 
-	"glPointSize", 
-	"glPolygonMode", 
-	"glPolygonOffset", 
-	"glPolygonStipple", 
-	"glPopAttrib", 
-	"glPopClientAttrib", 
-	"glPopMatrix", 
-	"glPopName", 
-	"glPrioritizeTextures", 
-	"glPushAttrib", 
-	"glPushClientAttrib", 
-	"glPushMatrix", 
-	"glPushName", 
-	"glRasterPos2d", 
-	"glRasterPos2dv", 
-	"glRasterPos2f", 
-	"glRasterPos2fv", 
-	"glRasterPos2i", 
-	"glRasterPos2iv", 
-	"glRasterPos2s", 
-	"glRasterPos2sv", 
-	"glRasterPos3d", 
-	"glRasterPos3dv", 
-	"glRasterPos3f", 
-	"glRasterPos3fv", 
-	"glRasterPos3i", 
-	"glRasterPos3iv", 
-	"glRasterPos3s", 
-	"glRasterPos3sv", 
-	"glRasterPos4d", 
-	"glRasterPos4dv", 
-	"glRasterPos4f", 
-	"glRasterPos4fv", 
-	"glRasterPos4i", 
-	"glRasterPos4iv", 
-	"glRasterPos4s", 
-	"glRasterPos4sv", 
-	"glReadBuffer", 
-	"glReadPixels", 
-	"glRectd", 
-	"glRectdv", 
-	"glRectf", 
-	"glRectfv", 
-	"glRecti", 
-	"glRectiv", 
-	"glRects", 
-	"glRectsv", 
-	"glRenderMode", 
-	"glRotated", 
-	"glRotatef", 
-	"glScaled", 
-	"glScalef", 
-	"glScissor", 
-	"glSelectBuffer", 
-	"glShadeModel", 
-	"glStencilFunc", 
-	"glStencilMask", 
-	"glStencilOp", 
-	"glTexCoord1d", 
-	"glTexCoord1dv", 
-	"glTexCoord1f", 
-	"glTexCoord1fv", 
-	"glTexCoord1i", 
-	"glTexCoord1iv", 
-	"glTexCoord1s", 
-	"glTexCoord1sv", 
-	"glTexCoord2d", 
-	"glTexCoord2dv", 
-	"glTexCoord2f", 
-	"glTexCoord2fv", 
-	"glTexCoord2i", 
-	"glTexCoord2iv", 
-	"glTexCoord2s", 
-	"glTexCoord2sv", 
-	"glTexCoord3d", 
-	"glTexCoord3dv", 
-	"glTexCoord3f", 
-	"glTexCoord3fv", 
-	"glTexCoord3i", 
-	"glTexCoord3iv", 
-	"glTexCoord3s", 
-	"glTexCoord3sv", 
-	"glTexCoord4d", 
-	"glTexCoord4dv", 
-	"glTexCoord4f", 
-	"glTexCoord4fv", 
-	"glTexCoord4i", 
-	"glTexCoord4iv", 
-	"glTexCoord4s", 
-	"glTexCoord4sv", 
-	"glTexCoordPointer", 
-	"glTexEnvf", 
-	"glTexEnvfv", 
-	"glTexEnvi", 
-	"glTexEnviv", 
-	"glTexGend", 
-	"glTexGendv", 
-	"glTexGenf", 
-	"glTexGenfv", 
-	"glTexGeni", 
-	"glTexGeniv", 
-	"glTexImage1D", 
-	"glTexImage2D", 
-	"glTexParameterf", 
-	"glTexParameterfv", 
-	"glTexParameteri", 
-	"glTexParameteriv", 
-	"glTexSubImage1D", 
-	"glTexSubImage2D", 
-	"glTranslated", 
-	"glTranslatef", 
-	"glVertex2d", 
-	"glVertex2dv", 
-	"glVertex2f", 
-	"glVertex2fv", 
-	"glVertex2i", 
-	"glVertex2iv", 
-	"glVertex2s", 
-	"glVertex2sv", 
-	"glVertex3d", 
-	"glVertex3dv", 
-	"glVertex3f", 
-	"glVertex3fv", 
-	"glVertex3i", 
-	"glVertex3iv", 
-	"glVertex3s", 
-	"glVertex3sv", 
-	"glVertex4d", 
-	"glVertex4dv", 
-	"glVertex4f", 
-	"glVertex4fv", 
-	"glVertex4i", 
-	"glVertex4iv", 
-	"glVertex4s", 
-	"glVertex4sv", 
-	"glVertexPointer", 
-	"glViewport", 
-};
-
-#define STATS_NATIVE(func) Java_org_eclipse_swt_tools_internal_NativeStats_##func
-
-JNIEXPORT jint JNICALL STATS_NATIVE(GL_1GetFunctionCount)
-	(JNIEnv *env, jclass that)
-{
-	return GL_nativeFunctionCount;
-}
-
-JNIEXPORT jstring JNICALL STATS_NATIVE(GL_1GetFunctionName)
-	(JNIEnv *env, jclass that, jint index)
-{
-	return (*env)->NewStringUTF(env, GL_nativeFunctionNames[index]);
-}
-
-JNIEXPORT jint JNICALL STATS_NATIVE(GL_1GetFunctionCallCount)
-	(JNIEnv *env, jclass that, jint index)
-{
-	return GL_nativeFunctionCallCount[index];
-}
-
-#endif
diff --git a/bundles/org.eclipse.swt.opengl/common/library/gl_stats.h b/bundles/org.eclipse.swt.opengl/common/library/gl_stats.h
deleted file mode 100644
index 6e1feee..0000000
--- a/bundles/org.eclipse.swt.opengl/common/library/gl_stats.h
+++ /dev/null
@@ -1,348 +0,0 @@
-#ifdef NATIVE_STATS
-extern int GL_nativeFunctionCount;
-extern int GL_nativeFunctionCallCount[];
-extern char* GL_nativeFunctionNames[];
-#define GL_NATIVE_ENTER(env, that, func) GL_nativeFunctionCallCount[func]++;
-#define GL_NATIVE_EXIT(env, that, func) 
-#else
-#define GL_NATIVE_ENTER(env, that, func) 
-#define GL_NATIVE_EXIT(env, that, func) 
-#endif
-
-typedef enum {
-	glAccum_FUNC,
-	glAlphaFunc_FUNC,
-	glAreTexturesResident_FUNC,
-	glArrayElement_FUNC,
-	glBegin_FUNC,
-	glBindTexture_FUNC,
-	glBitmap_FUNC,
-	glBlendFunc_FUNC,
-	glCallList_FUNC,
-	glCallLists__II_3B_FUNC,
-	glCallLists__II_3C_FUNC,
-	glCallLists__II_3I_FUNC,
-	glClear_FUNC,
-	glClearAccum_FUNC,
-	glClearColor_FUNC,
-	glClearDepth_FUNC,
-	glClearIndex_FUNC,
-	glClearStencil_FUNC,
-	glClipPlane_FUNC,
-	glColor3b_FUNC,
-	glColor3bv_FUNC,
-	glColor3d_FUNC,
-	glColor3dv_FUNC,
-	glColor3f_FUNC,
-	glColor3fv_FUNC,
-	glColor3i_FUNC,
-	glColor3iv_FUNC,
-	glColor3s_FUNC,
-	glColor3sv_FUNC,
-	glColor3ub_FUNC,
-	glColor3ubv_FUNC,
-	glColor3ui_FUNC,
-	glColor3uiv_FUNC,
-	glColor3us_FUNC,
-	glColor3usv_FUNC,
-	glColor4b_FUNC,
-	glColor4bv_FUNC,
-	glColor4d_FUNC,
-	glColor4dv_FUNC,
-	glColor4f_FUNC,
-	glColor4fv_FUNC,
-	glColor4i_FUNC,
-	glColor4iv_FUNC,
-	glColor4s_FUNC,
-	glColor4ub_FUNC,
-	glColor4ubv_FUNC,
-	glColor4ui_FUNC,
-	glColor4uiv_FUNC,
-	glColor4us_FUNC,
-	glColor4usv_FUNC,
-	glColorMask_FUNC,
-	glColorMaterial_FUNC,
-	glColorPointer_FUNC,
-	glCopyPixels_FUNC,
-	glCopyTexImage1D_FUNC,
-	glCopyTexImage2D_FUNC,
-	glCopyTexSubImage1D_FUNC,
-	glCopyTexSubImage2D_FUNC,
-	glCullFace_FUNC,
-	glDeleteLists_FUNC,
-	glDeleteTextures_FUNC,
-	glDepthFunc_FUNC,
-	glDepthMask_FUNC,
-	glDepthRange_FUNC,
-	glDisable_FUNC,
-	glDisableClientState_FUNC,
-	glDrawArrays_FUNC,
-	glDrawBuffer_FUNC,
-	glDrawElements_FUNC,
-	glDrawPixels_FUNC,
-	glEdgeFlag_FUNC,
-	glEdgeFlagPointer_FUNC,
-	glEdgeFlagv_FUNC,
-	glEnable_FUNC,
-	glEnableClientState_FUNC,
-	glEnd_FUNC,
-	glEndList_FUNC,
-	glEvalCoord1d_FUNC,
-	glEvalCoord1dv_FUNC,
-	glEvalCoord1f_FUNC,
-	glEvalCoord1fv_FUNC,
-	glEvalCoord2d_FUNC,
-	glEvalCoord2dv_FUNC,
-	glEvalCoord2f_FUNC,
-	glEvalCoord2fv_FUNC,
-	glEvalMesh1_FUNC,
-	glEvalMesh2_FUNC,
-	glEvalPoint1_FUNC,
-	glEvalPoint2_FUNC,
-	glFeedbackBuffer_FUNC,
-	glFinish_FUNC,
-	glFlush_FUNC,
-	glFogf_FUNC,
-	glFogfv_FUNC,
-	glFogi_FUNC,
-	glFogiv_FUNC,
-	glFrontFace_FUNC,
-	glFrustum_FUNC,
-	glGenLists_FUNC,
-	glGenTextures_FUNC,
-	glGetBooleanv_FUNC,
-	glGetClipPlane_FUNC,
-	glGetDoublev_FUNC,
-	glGetError_FUNC,
-	glGetFloatv_FUNC,
-	glGetIntegerv_FUNC,
-	glGetLightfv_FUNC,
-	glGetLightiv_FUNC,
-	glGetMapdv_FUNC,
-	glGetMapfv_FUNC,
-	glGetMapiv_FUNC,
-	glGetMaterialfv_FUNC,
-	glGetMaterialiv_FUNC,
-	glGetPixelMapfv_FUNC,
-	glGetPixelMapuiv_FUNC,
-	glGetPixelMapusv_FUNC,
-	glGetPointerv_FUNC,
-	glGetPolygonStipple_FUNC,
-	glGetString_FUNC,
-	glGetTexEnvfv_FUNC,
-	glGetTexEnviv_FUNC,
-	glGetTexGendv_FUNC,
-	glGetTexGenfv_FUNC,
-	glGetTexGeniv_FUNC,
-	glGetTexImage_FUNC,
-	glGetTexLevelParameterfv_FUNC,
-	glGetTexLevelParameteriv_FUNC,
-	glGetTexParameterfv_FUNC,
-	glGetTexParameteriv_FUNC,
-	glHint_FUNC,
-	glIndexMask_FUNC,
-	glIndexPointer_FUNC,
-	glIndexd_FUNC,
-	glIndexdv_FUNC,
-	glIndexf_FUNC,
-	glIndexfv_FUNC,
-	glIndexi_FUNC,
-	glIndexiv_FUNC,
-	glIndexs_FUNC,
-	glIndexsv_FUNC,
-	glInitNames_FUNC,
-	glInterleavedArrays_FUNC,
-	glIsEnabled_FUNC,
-	glIsList_FUNC,
-	glIsTexture_FUNC,
-	glLightModelf_FUNC,
-	glLightModelfv_FUNC,
-	glLightModeli_FUNC,
-	glLightModeliv_FUNC,
-	glLightf_FUNC,
-	glLightfv_FUNC,
-	glLighti_FUNC,
-	glLightiv_FUNC,
-	glLineStipple_FUNC,
-	glLineWidth_FUNC,
-	glListBase_FUNC,
-	glLoadIdentity_FUNC,
-	glLoadMatrixd_FUNC,
-	glLoadMatrixf_FUNC,
-	glLoadName_FUNC,
-	glLogicOp_FUNC,
-	glMap1d_FUNC,
-	glMap1f_FUNC,
-	glMap2d_FUNC,
-	glMap2f_FUNC,
-	glMapGrid1d_FUNC,
-	glMapGrid1f_FUNC,
-	glMapGrid2d_FUNC,
-	glMapGrid2f_FUNC,
-	glMaterialf_FUNC,
-	glMaterialfv_FUNC,
-	glMateriali_FUNC,
-	glMaterialiv_FUNC,
-	glMatrixMode_FUNC,
-	glMultMatrixd_FUNC,
-	glMultMatrixf_FUNC,
-	glNewList_FUNC,
-	glNormal3b_FUNC,
-	glNormal3bv_FUNC,
-	glNormal3d_FUNC,
-	glNormal3dv_FUNC,
-	glNormal3f_FUNC,
-	glNormal3fv_FUNC,
-	glNormal3i_FUNC,
-	glNormal3iv_FUNC,
-	glNormal3s_FUNC,
-	glNormal3sv_FUNC,
-	glNormalPointer_FUNC,
-	glOrtho_FUNC,
-	glPassThrough_FUNC,
-	glPixelMapfv_FUNC,
-	glPixelMapuiv_FUNC,
-	glPixelMapusv_FUNC,
-	glPixelStoref_FUNC,
-	glPixelStorei_FUNC,
-	glPixelTransferf_FUNC,
-	glPixelTransferi_FUNC,
-	glPixelZoom_FUNC,
-	glPointSize_FUNC,
-	glPolygonMode_FUNC,
-	glPolygonOffset_FUNC,
-	glPolygonStipple_FUNC,
-	glPopAttrib_FUNC,
-	glPopClientAttrib_FUNC,
-	glPopMatrix_FUNC,
-	glPopName_FUNC,
-	glPrioritizeTextures_FUNC,
-	glPushAttrib_FUNC,
-	glPushClientAttrib_FUNC,
-	glPushMatrix_FUNC,
-	glPushName_FUNC,
-	glRasterPos2d_FUNC,
-	glRasterPos2dv_FUNC,
-	glRasterPos2f_FUNC,
-	glRasterPos2fv_FUNC,
-	glRasterPos2i_FUNC,
-	glRasterPos2iv_FUNC,
-	glRasterPos2s_FUNC,
-	glRasterPos2sv_FUNC,
-	glRasterPos3d_FUNC,
-	glRasterPos3dv_FUNC,
-	glRasterPos3f_FUNC,
-	glRasterPos3fv_FUNC,
-	glRasterPos3i_FUNC,
-	glRasterPos3iv_FUNC,
-	glRasterPos3s_FUNC,
-	glRasterPos3sv_FUNC,
-	glRasterPos4d_FUNC,
-	glRasterPos4dv_FUNC,
-	glRasterPos4f_FUNC,
-	glRasterPos4fv_FUNC,
-	glRasterPos4i_FUNC,
-	glRasterPos4iv_FUNC,
-	glRasterPos4s_FUNC,
-	glRasterPos4sv_FUNC,
-	glReadBuffer_FUNC,
-	glReadPixels_FUNC,
-	glRectd_FUNC,
-	glRectdv_FUNC,
-	glRectf_FUNC,
-	glRectfv_FUNC,
-	glRecti_FUNC,
-	glRectiv_FUNC,
-	glRects_FUNC,
-	glRectsv_FUNC,
-	glRenderMode_FUNC,
-	glRotated_FUNC,
-	glRotatef_FUNC,
-	glScaled_FUNC,
-	glScalef_FUNC,
-	glScissor_FUNC,
-	glSelectBuffer_FUNC,
-	glShadeModel_FUNC,
-	glStencilFunc_FUNC,
-	glStencilMask_FUNC,
-	glStencilOp_FUNC,
-	glTexCoord1d_FUNC,
-	glTexCoord1dv_FUNC,
-	glTexCoord1f_FUNC,
-	glTexCoord1fv_FUNC,
-	glTexCoord1i_FUNC,
-	glTexCoord1iv_FUNC,
-	glTexCoord1s_FUNC,
-	glTexCoord1sv_FUNC,
-	glTexCoord2d_FUNC,
-	glTexCoord2dv_FUNC,
-	glTexCoord2f_FUNC,
-	glTexCoord2fv_FUNC,
-	glTexCoord2i_FUNC,
-	glTexCoord2iv_FUNC,
-	glTexCoord2s_FUNC,
-	glTexCoord2sv_FUNC,
-	glTexCoord3d_FUNC,
-	glTexCoord3dv_FUNC,
-	glTexCoord3f_FUNC,
-	glTexCoord3fv_FUNC,
-	glTexCoord3i_FUNC,
-	glTexCoord3iv_FUNC,
-	glTexCoord3s_FUNC,
-	glTexCoord3sv_FUNC,
-	glTexCoord4d_FUNC,
-	glTexCoord4dv_FUNC,
-	glTexCoord4f_FUNC,
-	glTexCoord4fv_FUNC,
-	glTexCoord4i_FUNC,
-	glTexCoord4iv_FUNC,
-	glTexCoord4s_FUNC,
-	glTexCoord4sv_FUNC,
-	glTexCoordPointer_FUNC,
-	glTexEnvf_FUNC,
-	glTexEnvfv_FUNC,
-	glTexEnvi_FUNC,
-	glTexEnviv_FUNC,
-	glTexGend_FUNC,
-	glTexGendv_FUNC,
-	glTexGenf_FUNC,
-	glTexGenfv_FUNC,
-	glTexGeni_FUNC,
-	glTexGeniv_FUNC,
-	glTexImage1D_FUNC,
-	glTexImage2D_FUNC,
-	glTexParameterf_FUNC,
-	glTexParameterfv_FUNC,
-	glTexParameteri_FUNC,
-	glTexParameteriv_FUNC,
-	glTexSubImage1D_FUNC,
-	glTexSubImage2D_FUNC,
-	glTranslated_FUNC,
-	glTranslatef_FUNC,
-	glVertex2d_FUNC,
-	glVertex2dv_FUNC,
-	glVertex2f_FUNC,
-	glVertex2fv_FUNC,
-	glVertex2i_FUNC,
-	glVertex2iv_FUNC,
-	glVertex2s_FUNC,
-	glVertex2sv_FUNC,
-	glVertex3d_FUNC,
-	glVertex3dv_FUNC,
-	glVertex3f_FUNC,
-	glVertex3fv_FUNC,
-	glVertex3i_FUNC,
-	glVertex3iv_FUNC,
-	glVertex3s_FUNC,
-	glVertex3sv_FUNC,
-	glVertex4d_FUNC,
-	glVertex4dv_FUNC,
-	glVertex4f_FUNC,
-	glVertex4fv_FUNC,
-	glVertex4i_FUNC,
-	glVertex4iv_FUNC,
-	glVertex4s_FUNC,
-	glVertex4sv_FUNC,
-	glVertexPointer_FUNC,
-	glViewport_FUNC,
-} GL_FUNCS;
diff --git a/bundles/org.eclipse.swt.opengl/common/library/gl_structs.c b/bundles/org.eclipse.swt.opengl/common/library/gl_structs.c
deleted file mode 100644
index 92490df..0000000
--- a/bundles/org.eclipse.swt.opengl/common/library/gl_structs.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "swt.h"
-#include "gl_structs.h"
-
diff --git a/bundles/org.eclipse.swt.opengl/common/library/gl_structs.h b/bundles/org.eclipse.swt.opengl/common/library/gl_structs.h
deleted file mode 100644
index 8ae9679..0000000
--- a/bundles/org.eclipse.swt.opengl/common/library/gl_structs.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "gl.h"
-
diff --git a/bundles/org.eclipse.swt.opengl/common/library/glu.c b/bundles/org.eclipse.swt.opengl/common/library/glu.c
deleted file mode 100644
index 5ef7075..0000000
--- a/bundles/org.eclipse.swt.opengl/common/library/glu.c
+++ /dev/null
@@ -1,798 +0,0 @@
-#include "swt.h"
-#include "glu_structs.h"
-#include "glu_stats.h"
-
-#define GLU_NATIVE(func) Java_org_eclipse_opengl_GLU_##func
-
-#ifndef NO_gluBeginCurve
-JNIEXPORT void JNICALL GLU_NATIVE(gluBeginCurve)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GLU_NATIVE_ENTER(env, that, gluBeginCurve_FUNC);
-	gluBeginCurve((GLUnurbs *)arg0);
-	GLU_NATIVE_EXIT(env, that, gluBeginCurve_FUNC);
-}
-#endif
-
-#ifndef NO_gluBeginPolygon
-JNIEXPORT void JNICALL GLU_NATIVE(gluBeginPolygon)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GLU_NATIVE_ENTER(env, that, gluBeginPolygon_FUNC);
-	gluBeginPolygon((GLUtesselator*)arg0);
-	GLU_NATIVE_EXIT(env, that, gluBeginPolygon_FUNC);
-}
-#endif
-
-#ifndef NO_gluBeginSurface
-JNIEXPORT void JNICALL GLU_NATIVE(gluBeginSurface)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GLU_NATIVE_ENTER(env, that, gluBeginSurface_FUNC);
-	gluBeginSurface((GLUnurbs *)arg0);
-	GLU_NATIVE_EXIT(env, that, gluBeginSurface_FUNC);
-}
-#endif
-
-#ifndef NO_gluBeginTrim
-JNIEXPORT void JNICALL GLU_NATIVE(gluBeginTrim)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GLU_NATIVE_ENTER(env, that, gluBeginTrim_FUNC);
-	gluBeginTrim((GLUnurbs *)arg0);
-	GLU_NATIVE_EXIT(env, that, gluBeginTrim_FUNC);
-}
-#endif
-
-#ifndef NO_gluBuild1DMipmaps
-JNIEXPORT jint JNICALL GLU_NATIVE(gluBuild1DMipmaps)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5)
-{
-	jint rc;
-	GLU_NATIVE_ENTER(env, that, gluBuild1DMipmaps_FUNC);
-	rc = (jint)gluBuild1DMipmaps(arg0, arg1, arg2, arg3, arg4, (const void *)arg5);
-	GLU_NATIVE_EXIT(env, that, gluBuild1DMipmaps_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_gluBuild2DMipmaps
-JNIEXPORT jint JNICALL GLU_NATIVE(gluBuild2DMipmaps)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5, jbyteArray arg6)
-{
-	jbyte *lparg6=NULL;
-	jint rc;
-	GLU_NATIVE_ENTER(env, that, gluBuild2DMipmaps_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg6) lparg6 = (*env)->GetPrimitiveArrayCritical(env, arg6, NULL);
-	} else
-#endif
-	{
-		if (arg6) lparg6 = (*env)->GetByteArrayElements(env, arg6, NULL);
-	}
-	rc = (jint)gluBuild2DMipmaps(arg0, arg1, arg2, arg3, arg4, arg5, lparg6);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg6) (*env)->ReleasePrimitiveArrayCritical(env, arg6, lparg6, 0);
-	} else
-#endif
-	{
-		if (arg6) (*env)->ReleaseByteArrayElements(env, arg6, lparg6, 0);
-	}
-	GLU_NATIVE_EXIT(env, that, gluBuild2DMipmaps_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_gluCylinder
-JNIEXPORT void JNICALL GLU_NATIVE(gluCylinder)
-	(JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jdouble arg3, jint arg4, jint arg5)
-{
-	GLU_NATIVE_ENTER(env, that, gluCylinder_FUNC);
-	gluCylinder((GLUquadric *)arg0, arg1, arg2, arg3, arg4, arg5);
-	GLU_NATIVE_EXIT(env, that, gluCylinder_FUNC);
-}
-#endif
-
-#ifndef NO_gluDeleteNurbsRenderer
-JNIEXPORT void JNICALL GLU_NATIVE(gluDeleteNurbsRenderer)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GLU_NATIVE_ENTER(env, that, gluDeleteNurbsRenderer_FUNC);
-	gluDeleteNurbsRenderer((GLUnurbs *)arg0);
-	GLU_NATIVE_EXIT(env, that, gluDeleteNurbsRenderer_FUNC);
-}
-#endif
-
-#ifndef NO_gluDeleteQuadric
-JNIEXPORT void JNICALL GLU_NATIVE(gluDeleteQuadric)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GLU_NATIVE_ENTER(env, that, gluDeleteQuadric_FUNC);
-	gluDeleteQuadric((GLUquadric *)arg0);
-	GLU_NATIVE_EXIT(env, that, gluDeleteQuadric_FUNC);
-}
-#endif
-
-#ifndef NO_gluDeleteTess
-JNIEXPORT void JNICALL GLU_NATIVE(gluDeleteTess)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GLU_NATIVE_ENTER(env, that, gluDeleteTess_FUNC);
-	gluDeleteTess((GLUtesselator *)arg0);
-	GLU_NATIVE_EXIT(env, that, gluDeleteTess_FUNC);
-}
-#endif
-
-#ifndef NO_gluDisk
-JNIEXPORT void JNICALL GLU_NATIVE(gluDisk)
-	(JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jint arg3, jint arg4)
-{
-	GLU_NATIVE_ENTER(env, that, gluDisk_FUNC);
-	gluDisk((GLUquadricObj *)arg0, arg1, arg2, arg3, arg4);
-	GLU_NATIVE_EXIT(env, that, gluDisk_FUNC);
-}
-#endif
-
-#ifndef NO_gluEndCurve
-JNIEXPORT void JNICALL GLU_NATIVE(gluEndCurve)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GLU_NATIVE_ENTER(env, that, gluEndCurve_FUNC);
-	gluEndCurve((GLUnurbsObj *)arg0);
-	GLU_NATIVE_EXIT(env, that, gluEndCurve_FUNC);
-}
-#endif
-
-#ifndef NO_gluEndPolygon
-JNIEXPORT void JNICALL GLU_NATIVE(gluEndPolygon)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GLU_NATIVE_ENTER(env, that, gluEndPolygon_FUNC);
-	gluEndPolygon((GLUtriangulatorObj *)arg0);
-	GLU_NATIVE_EXIT(env, that, gluEndPolygon_FUNC);
-}
-#endif
-
-#ifndef NO_gluEndSurface
-JNIEXPORT void JNICALL GLU_NATIVE(gluEndSurface)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GLU_NATIVE_ENTER(env, that, gluEndSurface_FUNC);
-	gluEndSurface((GLUnurbsObj *)arg0);
-	GLU_NATIVE_EXIT(env, that, gluEndSurface_FUNC);
-}
-#endif
-
-#ifndef NO_gluEndTrim
-JNIEXPORT void JNICALL GLU_NATIVE(gluEndTrim)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GLU_NATIVE_ENTER(env, that, gluEndTrim_FUNC);
-	gluEndTrim((GLUnurbsObj *)arg0);
-	GLU_NATIVE_EXIT(env, that, gluEndTrim_FUNC);
-}
-#endif
-
-#ifndef NO_gluErrorString
-JNIEXPORT jint JNICALL GLU_NATIVE(gluErrorString)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	jint rc;
-	GLU_NATIVE_ENTER(env, that, gluErrorString_FUNC);
-	rc = (jint)gluErrorString(arg0);
-	GLU_NATIVE_EXIT(env, that, gluErrorString_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_gluGetNurbsProperty
-JNIEXPORT void JNICALL GLU_NATIVE(gluGetNurbsProperty)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
-{
-	jfloat *lparg2=NULL;
-	GLU_NATIVE_ENTER(env, that, gluGetNurbsProperty_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
-	}
-	gluGetNurbsProperty((GLUnurbs *)arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
-	}
-	GLU_NATIVE_EXIT(env, that, gluGetNurbsProperty_FUNC);
-}
-#endif
-
-#ifndef NO_gluGetString
-JNIEXPORT jint JNICALL GLU_NATIVE(gluGetString)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	jint rc;
-	GLU_NATIVE_ENTER(env, that, gluGetString_FUNC);
-	rc = (jint)gluGetString(arg0);
-	GLU_NATIVE_EXIT(env, that, gluGetString_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_gluGetTessProperty
-JNIEXPORT void JNICALL GLU_NATIVE(gluGetTessProperty)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jdoubleArray arg2)
-{
-	jdouble *lparg2=NULL;
-	GLU_NATIVE_ENTER(env, that, gluGetTessProperty_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetDoubleArrayElements(env, arg2, NULL);
-	}
-	gluGetTessProperty((GLUtesselator *)arg0, arg1, lparg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseDoubleArrayElements(env, arg2, lparg2, 0);
-	}
-	GLU_NATIVE_EXIT(env, that, gluGetTessProperty_FUNC);
-}
-#endif
-
-#ifndef NO_gluLoadSamplingMatrices
-JNIEXPORT void JNICALL GLU_NATIVE(gluLoadSamplingMatrices)
-	(JNIEnv *env, jclass that, jint arg0, jfloatArray arg1, jfloatArray arg2, jintArray arg3)
-{
-	jfloat *lparg1=NULL;
-	jfloat *lparg2=NULL;
-	jint *lparg3=NULL;
-	GLU_NATIVE_ENTER(env, that, gluLoadSamplingMatrices_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-		if (arg3) lparg3 = (*env)->GetPrimitiveArrayCritical(env, arg3, NULL);
-	} else
-#endif
-	{
-		if (arg1) lparg1 = (*env)->GetFloatArrayElements(env, arg1, NULL);
-		if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
-		if (arg3) lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL);
-	}
-	gluLoadSamplingMatrices((GLUnurbs *)arg0, lparg1, lparg2, lparg3);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg3) (*env)->ReleasePrimitiveArrayCritical(env, arg3, lparg3, 0);
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-	} else
-#endif
-	{
-		if (arg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
-		if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
-		if (arg1) (*env)->ReleaseFloatArrayElements(env, arg1, lparg1, 0);
-	}
-	GLU_NATIVE_EXIT(env, that, gluLoadSamplingMatrices_FUNC);
-}
-#endif
-
-#ifndef NO_gluLookAt
-JNIEXPORT void JNICALL GLU_NATIVE(gluLookAt)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3, jdouble arg4, jdouble arg5, jdouble arg6, jdouble arg7, jdouble arg8)
-{
-	GLU_NATIVE_ENTER(env, that, gluLookAt_FUNC);
-	gluLookAt(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
-	GLU_NATIVE_EXIT(env, that, gluLookAt_FUNC);
-}
-#endif
-
-#ifndef NO_gluNewNurbsRenderer
-JNIEXPORT jint JNICALL GLU_NATIVE(gluNewNurbsRenderer)
-	(JNIEnv *env, jclass that)
-{
-	jint rc;
-	GLU_NATIVE_ENTER(env, that, gluNewNurbsRenderer_FUNC);
-	rc = (jint)gluNewNurbsRenderer();
-	GLU_NATIVE_EXIT(env, that, gluNewNurbsRenderer_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_gluNewQuadric
-JNIEXPORT jint JNICALL GLU_NATIVE(gluNewQuadric)
-	(JNIEnv *env, jclass that)
-{
-	jint rc;
-	GLU_NATIVE_ENTER(env, that, gluNewQuadric_FUNC);
-	rc = (jint)gluNewQuadric();
-	GLU_NATIVE_EXIT(env, that, gluNewQuadric_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_gluNewTess
-JNIEXPORT jint JNICALL GLU_NATIVE(gluNewTess)
-	(JNIEnv *env, jclass that)
-{
-	jint rc;
-	GLU_NATIVE_ENTER(env, that, gluNewTess_FUNC);
-	rc = (jint)gluNewTess();
-	GLU_NATIVE_EXIT(env, that, gluNewTess_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_gluNextContour
-JNIEXPORT void JNICALL GLU_NATIVE(gluNextContour)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GLU_NATIVE_ENTER(env, that, gluNextContour_FUNC);
-	gluNextContour((GLUtesselator *)arg0, arg1);
-	GLU_NATIVE_EXIT(env, that, gluNextContour_FUNC);
-}
-#endif
-
-#ifndef NO_gluNurbsCallback
-JNIEXPORT void JNICALL GLU_NATIVE(gluNurbsCallback)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	GLU_NATIVE_ENTER(env, that, gluNurbsCallback_FUNC);
-	gluNurbsCallback((GLUnurbs *)arg0, arg1, (GLvoid(*))arg2);
-	GLU_NATIVE_EXIT(env, that, gluNurbsCallback_FUNC);
-}
-#endif
-
-#ifndef NO_gluNurbsCurve
-JNIEXPORT void JNICALL GLU_NATIVE(gluNurbsCurve)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2, jint arg3, jfloatArray arg4, jint arg5, jint arg6)
-{
-	jfloat *lparg2=NULL;
-	jfloat *lparg4=NULL;
-	GLU_NATIVE_ENTER(env, that, gluNurbsCurve_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-		if (arg4) lparg4 = (*env)->GetPrimitiveArrayCritical(env, arg4, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
-		if (arg4) lparg4 = (*env)->GetFloatArrayElements(env, arg4, NULL);
-	}
-	gluNurbsCurve((GLUnurbs *)arg0, arg1, lparg2, arg3, lparg4, arg5, arg6);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg4) (*env)->ReleasePrimitiveArrayCritical(env, arg4, lparg4, 0);
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg4) (*env)->ReleaseFloatArrayElements(env, arg4, lparg4, 0);
-		if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
-	}
-	GLU_NATIVE_EXIT(env, that, gluNurbsCurve_FUNC);
-}
-#endif
-
-#ifndef NO_gluNurbsProperty
-JNIEXPORT void JNICALL GLU_NATIVE(gluNurbsProperty)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloat arg2)
-{
-	GLU_NATIVE_ENTER(env, that, gluNurbsProperty_FUNC);
-	gluNurbsProperty((GLUnurbs *)arg0, arg1, arg2);
-	GLU_NATIVE_EXIT(env, that, gluNurbsProperty_FUNC);
-}
-#endif
-
-#ifndef NO_gluNurbsSurface
-JNIEXPORT void JNICALL GLU_NATIVE(gluNurbsSurface)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2, jint arg3, jfloatArray arg4, jint arg5, jint arg6, jfloatArray arg7, jint arg8, jint arg9, jint arg10)
-{
-	jfloat *lparg2=NULL;
-	jfloat *lparg4=NULL;
-	jfloat *lparg7=NULL;
-	GLU_NATIVE_ENTER(env, that, gluNurbsSurface_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-		if (arg4) lparg4 = (*env)->GetPrimitiveArrayCritical(env, arg4, NULL);
-		if (arg7) lparg7 = (*env)->GetPrimitiveArrayCritical(env, arg7, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
-		if (arg4) lparg4 = (*env)->GetFloatArrayElements(env, arg4, NULL);
-		if (arg7) lparg7 = (*env)->GetFloatArrayElements(env, arg7, NULL);
-	}
-	gluNurbsSurface((GLUnurbsObj *)arg0, arg1, lparg2, arg3, lparg4, arg5, arg6, lparg7, arg8, arg9, arg10);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg7) (*env)->ReleasePrimitiveArrayCritical(env, arg7, lparg7, 0);
-		if (arg4) (*env)->ReleasePrimitiveArrayCritical(env, arg4, lparg4, 0);
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg7) (*env)->ReleaseFloatArrayElements(env, arg7, lparg7, 0);
-		if (arg4) (*env)->ReleaseFloatArrayElements(env, arg4, lparg4, 0);
-		if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
-	}
-	GLU_NATIVE_EXIT(env, that, gluNurbsSurface_FUNC);
-}
-#endif
-
-#ifndef NO_gluOrtho2D
-JNIEXPORT void JNICALL GLU_NATIVE(gluOrtho2D)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3)
-{
-	GLU_NATIVE_ENTER(env, that, gluOrtho2D_FUNC);
-	gluOrtho2D(arg0, arg1, arg2, arg3);
-	GLU_NATIVE_EXIT(env, that, gluOrtho2D_FUNC);
-}
-#endif
-
-#ifndef NO_gluPartialDisk
-JNIEXPORT void JNICALL GLU_NATIVE(gluPartialDisk)
-	(JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jint arg3, jint arg4, jdouble arg5, jdouble arg6)
-{
-	GLU_NATIVE_ENTER(env, that, gluPartialDisk_FUNC);
-	gluPartialDisk((GLUquadric *)arg0, arg1, arg2, arg3, arg4, arg5, arg6);
-	GLU_NATIVE_EXIT(env, that, gluPartialDisk_FUNC);
-}
-#endif
-
-#ifndef NO_gluPerspective
-JNIEXPORT void JNICALL GLU_NATIVE(gluPerspective)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3)
-{
-	GLU_NATIVE_ENTER(env, that, gluPerspective_FUNC);
-	gluPerspective(arg0, arg1, arg2, arg3);
-	GLU_NATIVE_EXIT(env, that, gluPerspective_FUNC);
-}
-#endif
-
-#ifndef NO_gluPickMatrix
-JNIEXPORT void JNICALL GLU_NATIVE(gluPickMatrix)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3, jintArray arg4)
-{
-	jint *lparg4=NULL;
-	GLU_NATIVE_ENTER(env, that, gluPickMatrix_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg4) lparg4 = (*env)->GetPrimitiveArrayCritical(env, arg4, NULL);
-	} else
-#endif
-	{
-		if (arg4) lparg4 = (*env)->GetIntArrayElements(env, arg4, NULL);
-	}
-	gluPickMatrix(arg0, arg1, arg2, arg3, lparg4);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg4) (*env)->ReleasePrimitiveArrayCritical(env, arg4, lparg4, 0);
-	} else
-#endif
-	{
-		if (arg4) (*env)->ReleaseIntArrayElements(env, arg4, lparg4, 0);
-	}
-	GLU_NATIVE_EXIT(env, that, gluPickMatrix_FUNC);
-}
-#endif
-
-#ifndef NO_gluProject
-JNIEXPORT jint JNICALL GLU_NATIVE(gluProject)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdoubleArray arg3, jdoubleArray arg4, jintArray arg5, jdoubleArray arg6, jdoubleArray arg7, jdoubleArray arg8)
-{
-	jdouble *lparg3=NULL;
-	jdouble *lparg4=NULL;
-	jint *lparg5=NULL;
-	jdouble *lparg6=NULL;
-	jdouble *lparg7=NULL;
-	jdouble *lparg8=NULL;
-	jint rc;
-	GLU_NATIVE_ENTER(env, that, gluProject_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg3) lparg3 = (*env)->GetPrimitiveArrayCritical(env, arg3, NULL);
-		if (arg4) lparg4 = (*env)->GetPrimitiveArrayCritical(env, arg4, NULL);
-		if (arg5) lparg5 = (*env)->GetPrimitiveArrayCritical(env, arg5, NULL);
-		if (arg6) lparg6 = (*env)->GetPrimitiveArrayCritical(env, arg6, NULL);
-		if (arg7) lparg7 = (*env)->GetPrimitiveArrayCritical(env, arg7, NULL);
-		if (arg8) lparg8 = (*env)->GetPrimitiveArrayCritical(env, arg8, NULL);
-	} else
-#endif
-	{
-		if (arg3) lparg3 = (*env)->GetDoubleArrayElements(env, arg3, NULL);
-		if (arg4) lparg4 = (*env)->GetDoubleArrayElements(env, arg4, NULL);
-		if (arg5) lparg5 = (*env)->GetIntArrayElements(env, arg5, NULL);
-		if (arg6) lparg6 = (*env)->GetDoubleArrayElements(env, arg6, NULL);
-		if (arg7) lparg7 = (*env)->GetDoubleArrayElements(env, arg7, NULL);
-		if (arg8) lparg8 = (*env)->GetDoubleArrayElements(env, arg8, NULL);
-	}
-	rc = (jint)gluProject(arg0, arg1, arg2, lparg3, lparg4, lparg5, lparg6, lparg7, lparg8);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg8) (*env)->ReleasePrimitiveArrayCritical(env, arg8, lparg8, 0);
-		if (arg7) (*env)->ReleasePrimitiveArrayCritical(env, arg7, lparg7, 0);
-		if (arg6) (*env)->ReleasePrimitiveArrayCritical(env, arg6, lparg6, 0);
-		if (arg5) (*env)->ReleasePrimitiveArrayCritical(env, arg5, lparg5, 0);
-		if (arg4) (*env)->ReleasePrimitiveArrayCritical(env, arg4, lparg4, 0);
-		if (arg3) (*env)->ReleasePrimitiveArrayCritical(env, arg3, lparg3, 0);
-	} else
-#endif
-	{
-		if (arg8) (*env)->ReleaseDoubleArrayElements(env, arg8, lparg8, 0);
-		if (arg7) (*env)->ReleaseDoubleArrayElements(env, arg7, lparg7, 0);
-		if (arg6) (*env)->ReleaseDoubleArrayElements(env, arg6, lparg6, 0);
-		if (arg5) (*env)->ReleaseIntArrayElements(env, arg5, lparg5, 0);
-		if (arg4) (*env)->ReleaseDoubleArrayElements(env, arg4, lparg4, 0);
-		if (arg3) (*env)->ReleaseDoubleArrayElements(env, arg3, lparg3, 0);
-	}
-	GLU_NATIVE_EXIT(env, that, gluProject_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_gluPwlCurve
-JNIEXPORT void JNICALL GLU_NATIVE(gluPwlCurve)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2, jint arg3, jint arg4)
-{
-	jfloat *lparg2=NULL;
-	GLU_NATIVE_ENTER(env, that, gluPwlCurve_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL);
-	} else
-#endif
-	{
-		if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
-	}
-	gluPwlCurve((GLUnurbs *)arg0, arg1, lparg2, arg3, arg4);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
-	} else
-#endif
-	{
-		if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
-	}
-	GLU_NATIVE_EXIT(env, that, gluPwlCurve_FUNC);
-}
-#endif
-
-#ifndef NO_gluQuadricCallback
-JNIEXPORT void JNICALL GLU_NATIVE(gluQuadricCallback)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	GLU_NATIVE_ENTER(env, that, gluQuadricCallback_FUNC);
-	gluQuadricCallback((GLUquadricObj *)arg0, arg1, (GLvoid(*))arg2);
-	GLU_NATIVE_EXIT(env, that, gluQuadricCallback_FUNC);
-}
-#endif
-
-#ifndef NO_gluQuadricDrawStyle
-JNIEXPORT void JNICALL GLU_NATIVE(gluQuadricDrawStyle)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GLU_NATIVE_ENTER(env, that, gluQuadricDrawStyle_FUNC);
-	gluQuadricDrawStyle((GLUquadricObj *)arg0, arg1);
-	GLU_NATIVE_EXIT(env, that, gluQuadricDrawStyle_FUNC);
-}
-#endif
-
-#ifndef NO_gluQuadricNormals
-JNIEXPORT void JNICALL GLU_NATIVE(gluQuadricNormals)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GLU_NATIVE_ENTER(env, that, gluQuadricNormals_FUNC);
-	gluQuadricNormals((GLUquadricObj *)arg0, arg1);
-	GLU_NATIVE_EXIT(env, that, gluQuadricNormals_FUNC);
-}
-#endif
-
-#ifndef NO_gluQuadricOrientation
-JNIEXPORT void JNICALL GLU_NATIVE(gluQuadricOrientation)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GLU_NATIVE_ENTER(env, that, gluQuadricOrientation_FUNC);
-	gluQuadricOrientation((GLUquadric *)arg0, arg1);
-	GLU_NATIVE_EXIT(env, that, gluQuadricOrientation_FUNC);
-}
-#endif
-
-#ifndef NO_gluQuadricTexture
-JNIEXPORT void JNICALL GLU_NATIVE(gluQuadricTexture)
-	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
-{
-	GLU_NATIVE_ENTER(env, that, gluQuadricTexture_FUNC);
-	gluQuadricTexture((GLUquadric *)arg0, arg1);
-	GLU_NATIVE_EXIT(env, that, gluQuadricTexture_FUNC);
-}
-#endif
-
-#ifndef NO_gluScaleImage
-JNIEXPORT jint JNICALL GLU_NATIVE(gluScaleImage)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5, jint arg6, jint arg7, jint arg8)
-{
-	jint rc;
-	GLU_NATIVE_ENTER(env, that, gluScaleImage_FUNC);
-	rc = (jint)gluScaleImage(arg0, arg1, arg2, arg3, (const void *)arg4, arg5, arg6, arg7, (void *)arg8);
-	GLU_NATIVE_EXIT(env, that, gluScaleImage_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_gluSphere
-JNIEXPORT void JNICALL GLU_NATIVE(gluSphere)
-	(JNIEnv *env, jclass that, jint arg0, jdouble arg1, jint arg2, jint arg3)
-{
-	GLU_NATIVE_ENTER(env, that, gluSphere_FUNC);
-	gluSphere((GLUquadric *)arg0, arg1, arg2, arg3);
-	GLU_NATIVE_EXIT(env, that, gluSphere_FUNC);
-}
-#endif
-
-#ifndef NO_gluTessBeginContour
-JNIEXPORT void JNICALL GLU_NATIVE(gluTessBeginContour)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GLU_NATIVE_ENTER(env, that, gluTessBeginContour_FUNC);
-	gluTessBeginContour((GLUtesselator *)arg0);
-	GLU_NATIVE_EXIT(env, that, gluTessBeginContour_FUNC);
-}
-#endif
-
-#ifndef NO_gluTessBeginPolygon
-JNIEXPORT void JNICALL GLU_NATIVE(gluTessBeginPolygon)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GLU_NATIVE_ENTER(env, that, gluTessBeginPolygon_FUNC);
-	gluTessBeginPolygon((GLUtesselator *)arg0, (GLvoid *)arg1);
-	GLU_NATIVE_EXIT(env, that, gluTessBeginPolygon_FUNC);
-}
-#endif
-
-#ifndef NO_gluTessCallback
-JNIEXPORT void JNICALL GLU_NATIVE(gluTessCallback)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	GLU_NATIVE_ENTER(env, that, gluTessCallback_FUNC);
-	gluTessCallback((GLUtesselator *)arg0, arg1, (GLvoid(*))arg2);
-	GLU_NATIVE_EXIT(env, that, gluTessCallback_FUNC);
-}
-#endif
-
-#ifndef NO_gluTessEndContour
-JNIEXPORT void JNICALL GLU_NATIVE(gluTessEndContour)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GLU_NATIVE_ENTER(env, that, gluTessEndContour_FUNC);
-	gluTessEndContour((GLUtesselator *)arg0);
-	GLU_NATIVE_EXIT(env, that, gluTessEndContour_FUNC);
-}
-#endif
-
-#ifndef NO_gluTessEndPolygon
-JNIEXPORT void JNICALL GLU_NATIVE(gluTessEndPolygon)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	GLU_NATIVE_ENTER(env, that, gluTessEndPolygon_FUNC);
-	gluTessEndPolygon((GLUtesselator *)arg0);
-	GLU_NATIVE_EXIT(env, that, gluTessEndPolygon_FUNC);
-}
-#endif
-
-#ifndef NO_gluTessNormal
-JNIEXPORT void JNICALL GLU_NATIVE(gluTessNormal)
-	(JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jdouble arg3)
-{
-	GLU_NATIVE_ENTER(env, that, gluTessNormal_FUNC);
-	gluTessNormal((GLUtesselator *)arg0, arg1, arg2, arg3);
-	GLU_NATIVE_EXIT(env, that, gluTessNormal_FUNC);
-}
-#endif
-
-#ifndef NO_gluTessProperty
-JNIEXPORT void JNICALL GLU_NATIVE(gluTessProperty)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jdouble arg2)
-{
-	GLU_NATIVE_ENTER(env, that, gluTessProperty_FUNC);
-	gluTessProperty((GLUtesselator *)arg0, arg1, arg2);
-	GLU_NATIVE_EXIT(env, that, gluTessProperty_FUNC);
-}
-#endif
-
-#ifndef NO_gluTessVertex
-JNIEXPORT void JNICALL GLU_NATIVE(gluTessVertex)
-	(JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1, jint arg2)
-{
-	jdouble *lparg1=NULL;
-	GLU_NATIVE_ENTER(env, that, gluTessVertex_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL);
-	} else
-#endif
-	{
-		if (arg1) lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL);
-	}
-	gluTessVertex((GLUtesselator *)arg0, lparg1, (GLvoid *)arg2);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
-	} else
-#endif
-	{
-		if (arg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
-	}
-	GLU_NATIVE_EXIT(env, that, gluTessVertex_FUNC);
-}
-#endif
-
-#ifndef NO_gluUnProject
-JNIEXPORT jint JNICALL GLU_NATIVE(gluUnProject)
-	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdoubleArray arg3, jdoubleArray arg4, jintArray arg5, jdoubleArray arg6, jdoubleArray arg7, jdoubleArray arg8)
-{
-	jdouble *lparg3=NULL;
-	jdouble *lparg4=NULL;
-	jint *lparg5=NULL;
-	jdouble *lparg6=NULL;
-	jdouble *lparg7=NULL;
-	jdouble *lparg8=NULL;
-	jint rc;
-	GLU_NATIVE_ENTER(env, that, gluUnProject_FUNC);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg3) lparg3 = (*env)->GetPrimitiveArrayCritical(env, arg3, NULL);
-		if (arg4) lparg4 = (*env)->GetPrimitiveArrayCritical(env, arg4, NULL);
-		if (arg5) lparg5 = (*env)->GetPrimitiveArrayCritical(env, arg5, NULL);
-		if (arg6) lparg6 = (*env)->GetPrimitiveArrayCritical(env, arg6, NULL);
-		if (arg7) lparg7 = (*env)->GetPrimitiveArrayCritical(env, arg7, NULL);
-		if (arg8) lparg8 = (*env)->GetPrimitiveArrayCritical(env, arg8, NULL);
-	} else
-#endif
-	{
-		if (arg3) lparg3 = (*env)->GetDoubleArrayElements(env, arg3, NULL);
-		if (arg4) lparg4 = (*env)->GetDoubleArrayElements(env, arg4, NULL);
-		if (arg5) lparg5 = (*env)->GetIntArrayElements(env, arg5, NULL);
-		if (arg6) lparg6 = (*env)->GetDoubleArrayElements(env, arg6, NULL);
-		if (arg7) lparg7 = (*env)->GetDoubleArrayElements(env, arg7, NULL);
-		if (arg8) lparg8 = (*env)->GetDoubleArrayElements(env, arg8, NULL);
-	}
-	rc = (jint)gluUnProject(arg0, arg1, arg2, lparg3, lparg4, lparg5, lparg6, lparg7, lparg8);
-#ifdef JNI_VERSION_1_2
-	if (IS_JNI_1_2) {
-		if (arg8) (*env)->ReleasePrimitiveArrayCritical(env, arg8, lparg8, 0);
-		if (arg7) (*env)->ReleasePrimitiveArrayCritical(env, arg7, lparg7, 0);
-		if (arg6) (*env)->ReleasePrimitiveArrayCritical(env, arg6, lparg6, 0);
-		if (arg5) (*env)->ReleasePrimitiveArrayCritical(env, arg5, lparg5, 0);
-		if (arg4) (*env)->ReleasePrimitiveArrayCritical(env, arg4, lparg4, 0);
-		if (arg3) (*env)->ReleasePrimitiveArrayCritical(env, arg3, lparg3, 0);
-	} else
-#endif
-	{
-		if (arg8) (*env)->ReleaseDoubleArrayElements(env, arg8, lparg8, 0);
-		if (arg7) (*env)->ReleaseDoubleArrayElements(env, arg7, lparg7, 0);
-		if (arg6) (*env)->ReleaseDoubleArrayElements(env, arg6, lparg6, 0);
-		if (arg5) (*env)->ReleaseIntArrayElements(env, arg5, lparg5, 0);
-		if (arg4) (*env)->ReleaseDoubleArrayElements(env, arg4, lparg4, 0);
-		if (arg3) (*env)->ReleaseDoubleArrayElements(env, arg3, lparg3, 0);
-	}
-	GLU_NATIVE_EXIT(env, that, gluUnProject_FUNC);
-	return rc;
-}
-#endif
-
diff --git a/bundles/org.eclipse.swt.opengl/common/library/glu.h b/bundles/org.eclipse.swt.opengl/common/library/glu.h
deleted file mode 100644
index 96f8b03..0000000
--- a/bundles/org.eclipse.swt.opengl/common/library/glu.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifdef __APPLE__
-#include <OpenGL/glu.h>
-#else
-#ifdef WIN32
-#include <windows.h>
-#endif
-#include <GL/glu.h>
-#endif
-
-extern int IS_JNI_1_2;
diff --git a/bundles/org.eclipse.swt.opengl/common/library/glu_stats.c b/bundles/org.eclipse.swt.opengl/common/library/glu_stats.c
deleted file mode 100644
index 3befc26..0000000
--- a/bundles/org.eclipse.swt.opengl/common/library/glu_stats.c
+++ /dev/null
@@ -1,82 +0,0 @@
-#include "swt.h"
-#include "glu_stats.h"
-
-#ifdef NATIVE_STATS
-
-int GLU_nativeFunctionCount = 51;
-int GLU_nativeFunctionCallCount[51];
-char * GLU_nativeFunctionNames[] = {
-	"gluBeginCurve", 
-	"gluBeginPolygon", 
-	"gluBeginSurface", 
-	"gluBeginTrim", 
-	"gluBuild1DMipmaps", 
-	"gluBuild2DMipmaps", 
-	"gluCylinder", 
-	"gluDeleteNurbsRenderer", 
-	"gluDeleteQuadric", 
-	"gluDeleteTess", 
-	"gluDisk", 
-	"gluEndCurve", 
-	"gluEndPolygon", 
-	"gluEndSurface", 
-	"gluEndTrim", 
-	"gluErrorString", 
-	"gluGetNurbsProperty", 
-	"gluGetString", 
-	"gluGetTessProperty", 
-	"gluLoadSamplingMatrices", 
-	"gluLookAt", 
-	"gluNewNurbsRenderer", 
-	"gluNewQuadric", 
-	"gluNewTess", 
-	"gluNextContour", 
-	"gluNurbsCallback", 
-	"gluNurbsCurve", 
-	"gluNurbsProperty", 
-	"gluNurbsSurface", 
-	"gluOrtho2D", 
-	"gluPartialDisk", 
-	"gluPerspective", 
-	"gluPickMatrix", 
-	"gluProject", 
-	"gluPwlCurve", 
-	"gluQuadricCallback", 
-	"gluQuadricDrawStyle", 
-	"gluQuadricNormals", 
-	"gluQuadricOrientation", 
-	"gluQuadricTexture", 
-	"gluScaleImage", 
-	"gluSphere", 
-	"gluTessBeginContour", 
-	"gluTessBeginPolygon", 
-	"gluTessCallback", 
-	"gluTessEndContour", 
-	"gluTessEndPolygon", 
-	"gluTessNormal", 
-	"gluTessProperty", 
-	"gluTessVertex", 
-	"gluUnProject", 
-};
-
-#define STATS_NATIVE(func) Java_org_eclipse_swt_tools_internal_NativeStats_##func
-
-JNIEXPORT jint JNICALL STATS_NATIVE(GLU_1GetFunctionCount)
-	(JNIEnv *env, jclass that)
-{
-	return GLU_nativeFunctionCount;
-}
-
-JNIEXPORT jstring JNICALL STATS_NATIVE(GLU_1GetFunctionName)
-	(JNIEnv *env, jclass that, jint index)
-{
-	return (*env)->NewStringUTF(env, GLU_nativeFunctionNames[index]);
-}
-
-JNIEXPORT jint JNICALL STATS_NATIVE(GLU_1GetFunctionCallCount)
-	(JNIEnv *env, jclass that, jint index)
-{
-	return GLU_nativeFunctionCallCount[index];
-}
-
-#endif
diff --git a/bundles/org.eclipse.swt.opengl/common/library/glu_stats.h b/bundles/org.eclipse.swt.opengl/common/library/glu_stats.h
deleted file mode 100644
index 99173e6..0000000
--- a/bundles/org.eclipse.swt.opengl/common/library/glu_stats.h
+++ /dev/null
@@ -1,64 +0,0 @@
-#ifdef NATIVE_STATS
-extern int GLU_nativeFunctionCount;
-extern int GLU_nativeFunctionCallCount[];
-extern char* GLU_nativeFunctionNames[];
-#define GLU_NATIVE_ENTER(env, that, func) GLU_nativeFunctionCallCount[func]++;
-#define GLU_NATIVE_EXIT(env, that, func) 
-#else
-#define GLU_NATIVE_ENTER(env, that, func) 
-#define GLU_NATIVE_EXIT(env, that, func) 
-#endif
-
-typedef enum {
-	gluBeginCurve_FUNC,
-	gluBeginPolygon_FUNC,
-	gluBeginSurface_FUNC,
-	gluBeginTrim_FUNC,
-	gluBuild1DMipmaps_FUNC,
-	gluBuild2DMipmaps_FUNC,
-	gluCylinder_FUNC,
-	gluDeleteNurbsRenderer_FUNC,
-	gluDeleteQuadric_FUNC,
-	gluDeleteTess_FUNC,
-	gluDisk_FUNC,
-	gluEndCurve_FUNC,
-	gluEndPolygon_FUNC,
-	gluEndSurface_FUNC,
-	gluEndTrim_FUNC,
-	gluErrorString_FUNC,
-	gluGetNurbsProperty_FUNC,
-	gluGetString_FUNC,
-	gluGetTessProperty_FUNC,
-	gluLoadSamplingMatrices_FUNC,
-	gluLookAt_FUNC,
-	gluNewNurbsRenderer_FUNC,
-	gluNewQuadric_FUNC,
-	gluNewTess_FUNC,
-	gluNextContour_FUNC,
-	gluNurbsCallback_FUNC,
-	gluNurbsCurve_FUNC,
-	gluNurbsProperty_FUNC,
-	gluNurbsSurface_FUNC,
-	gluOrtho2D_FUNC,
-	gluPartialDisk_FUNC,
-	gluPerspective_FUNC,
-	gluPickMatrix_FUNC,
-	gluProject_FUNC,
-	gluPwlCurve_FUNC,
-	gluQuadricCallback_FUNC,
-	gluQuadricDrawStyle_FUNC,
-	gluQuadricNormals_FUNC,
-	gluQuadricOrientation_FUNC,
-	gluQuadricTexture_FUNC,
-	gluScaleImage_FUNC,
-	gluSphere_FUNC,
-	gluTessBeginContour_FUNC,
-	gluTessBeginPolygon_FUNC,
-	gluTessCallback_FUNC,
-	gluTessEndContour_FUNC,
-	gluTessEndPolygon_FUNC,
-	gluTessNormal_FUNC,
-	gluTessProperty_FUNC,
-	gluTessVertex_FUNC,
-	gluUnProject_FUNC,
-} GLU_FUNCS;
diff --git a/bundles/org.eclipse.swt.opengl/common/library/glu_structs.c b/bundles/org.eclipse.swt.opengl/common/library/glu_structs.c
deleted file mode 100644
index 620ce43..0000000
--- a/bundles/org.eclipse.swt.opengl/common/library/glu_structs.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "swt.h"
-#include "glu_structs.h"
-
diff --git a/bundles/org.eclipse.swt.opengl/common/library/glu_structs.h b/bundles/org.eclipse.swt.opengl/common/library/glu_structs.h
deleted file mode 100644
index 5d11acf..0000000
--- a/bundles/org.eclipse.swt.opengl/common/library/glu_structs.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "glu.h"
-
diff --git a/bundles/org.eclipse.swt.opengl/common/library/swt.c b/bundles/org.eclipse.swt.opengl/common/library/swt.c
deleted file mode 100644
index 6740c65..0000000
--- a/bundles/org.eclipse.swt.opengl/common/library/swt.c
+++ /dev/null
@@ -1,21 +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
- *******************************************************************************/
- 
-#include "swt.h"
-
-int IS_JNI_1_2 = 0;
-
-#ifdef JNI_VERSION_1_2
-JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
-	IS_JNI_1_2 = 1;
-	return JNI_VERSION_1_2;
-}
-#endif
diff --git a/bundles/org.eclipse.swt.opengl/common/library/swt.h b/bundles/org.eclipse.swt.opengl/common/library/swt.h
deleted file mode 100644
index 2729037..0000000
--- a/bundles/org.eclipse.swt.opengl/common/library/swt.h
+++ /dev/null
@@ -1,50 +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
- *******************************************************************************/
-
-#ifndef INC_swt_H
-#define INC_swt_H
-
-#include "jni.h"
-
-/* For debugging */
-#define DEBUG_PRINTF(x)
-/*#define DEBUG_PRINTF(x) printf x; */
-
-/* define this to print out debug statements */
-/* #define DEBUG_CALL_PRINTS */
-/* #define DEBUG_CHECK_NULL_EXCEPTIONS */
-
-#ifdef DEBUG_CALL_PRINTS
-#define DEBUG_CALL(func) fprintf(stderr, func);
-#else
-#define DEBUG_CALL(func)
-#endif
-
-#ifdef DEBUG_CHECK_NULL_EXCEPTIONS
-#define DEBUG_CHECK_NULL(env, address) \
-	if (address == 0) { \
-		jclass clazz = (*env)->FindClass(env, "org/eclipse/swt/SWTError"); \
-		if (clazz != NULL) { \
-			(*env)->ThrowNew(env, clazz, "Argument cannot be NULL"); \
-		} \
-		return; \
-	}
-#else
-#define DEBUG_CHECK_NULL(env, address)
-#endif
-
-#define DECL_GLOB(pSym)
-#define PGLOB(x) x
-
-#define NATIVE_ENTER(env,clazz,func)
-#define NATIVE_EXIT(env,clazz,func)
-
-#endif /* ifndef INC_swt_H */
diff --git a/bundles/org.eclipse.swt.opengl/common/org/eclipse/opengl/GL.java b/bundles/org.eclipse.swt.opengl/common/org/eclipse/opengl/GL.java
deleted file mode 100755
index 01a4fca..0000000
--- a/bundles/org.eclipse.swt.opengl/common/org/eclipse/opengl/GL.java
+++ /dev/null
@@ -1,1447 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.opengl;
-
-public class GL {
-
-	public static final int GL_VERSION_1_1 = 1;
-
-	/* AccumOp */
-	public static final int GL_ACCUM = 0x0100;
-	public static final int GL_LOAD = 0x0101;
-	public static final int GL_RETURN = 0x0102;
-	public static final int GL_MULT = 0x0103;
-	public static final int GL_ADD = 0x0104;
-
-	/* AlphaFunction */
-	public static final int GL_NEVER = 0x0200;
-	public static final int GL_LESS = 0x0201;
-	public static final int GL_EQUAL = 0x0202;
-	public static final int GL_LEQUAL = 0x0203;
-	public static final int GL_GREATER = 0x0204;
-	public static final int GL_NOTEQUAL = 0x0205;
-	public static final int GL_GEQUAL = 0x0206;
-	public static final int GL_ALWAYS = 0x0207;
-
-	/* AttribMask */
-	public static final int GL_CURRENT_BIT = 0x00000001;
-	public static final int GL_POINT_BIT = 0x00000002;
-	public static final int GL_LINE_BIT = 0x00000004;
-	public static final int GL_POLYGON_BIT = 0x00000008;
-	public static final int GL_POLYGON_STIPPLE_BIT = 0x00000010;
-	public static final int GL_PIXEL_MODE_BIT = 0x00000020;
-	public static final int GL_LIGHTING_BIT = 0x00000040;
-	public static final int GL_FOG_BIT = 0x00000080;
-	public static final int GL_DEPTH_BUFFER_BIT = 0x00000100;
-	public static final int GL_ACCUM_BUFFER_BIT = 0x00000200;
-	public static final int GL_STENCIL_BUFFER_BIT = 0x00000400;
-	public static final int GL_VIEWPORT_BIT = 0x00000800;
-	public static final int GL_TRANSFORM_BIT = 0x00001000;
-	public static final int GL_ENABLE_BIT = 0x00002000;
-	public static final int GL_COLOR_BUFFER_BIT = 0x00004000;
-	public static final int GL_HINT_BIT = 0x00008000;
-	public static final int GL_EVAL_BIT = 0x00010000;
-	public static final int GL_LIST_BIT = 0x00020000;
-	public static final int GL_TEXTURE_BIT = 0x00040000;
-	public static final int GL_SCISSOR_BIT = 0x00080000;
-	public static final int GL_ALL_ATTRIB_BITS = 0x000fffff;
-
-	/* BeginMode */
-	public static final int GL_POINTS = 0x0000;
-	public static final int GL_LINES = 0x0001;
-	public static final int GL_LINE_LOOP = 0x0002;
-	public static final int GL_LINE_STRIP = 0x0003;
-	public static final int GL_TRIANGLES = 0x0004;
-	public static final int GL_TRIANGLE_STRIP = 0x0005;
-	public static final int GL_TRIANGLE_FAN = 0x0006;
-	public static final int GL_QUADS = 0x0007;
-	public static final int GL_QUAD_STRIP = 0x0008;
-	public static final int GL_POLYGON = 0x0009;
-
-	/* BlendingFactorDest */
-	public static final int GL_ZERO = 0;
-	public static final int GL_ONE = 1;
-	public static final int GL_SRC_COLOR = 0x0300;
-	public static final int GL_ONE_MINUS_SRC_COLOR = 0x0301;
-	public static final int GL_SRC_ALPHA = 0x0302;
-	public static final int GL_ONE_MINUS_SRC_ALPHA = 0x0303;
-	public static final int GL_DST_ALPHA = 0x0304;
-	public static final int GL_ONE_MINUS_DST_ALPHA = 0x0305;
-
-	/* BlendingFactorSrc */
-	/*      GL_ZERO */
-	/*      GL_ONE */
-	public static final int GL_DST_COLOR = 0x0306;
-	public static final int GL_ONE_MINUS_DST_COLOR = 0x0307;
-	public static final int GL_SRC_ALPHA_SATURATE = 0x0308;
-	/*      GL_SRC_ALPHA */
-	/*      GL_ONE_MINUS_SRC_ALPHA */
-	/*      GL_DST_ALPHA */
-	/*      GL_ONE_MINUS_DST_ALPHA */
-
-	/* Boolean */
-	public static final int GL_TRUE = 1;
-	public static final int GL_FALSE = 0;
-
-	/* ClearBufferMask */
-	/*      GL_COLOR_BUFFER_BIT */
-	/*      GL_ACCUM_BUFFER_BIT */
-	/*      GL_STENCIL_BUFFER_BIT */
-	/*      GL_DEPTH_BUFFER_BIT */
-
-	/* ClientArrayType */
-	/*      GL_VERTEX_ARRAY */
-	/*      GL_NORMAL_ARRAY */
-	/*      GL_COLOR_ARRAY */
-	/*      GL_INDEX_ARRAY */
-	/*      GL_TEXTURE_COORD_ARRAY */
-	/*      GL_EDGE_FLAG_ARRAY */
-
-	/* ClipPlaneName */
-	public static final int GL_CLIP_PLANE0 = 0x3000;
-	public static final int GL_CLIP_PLANE1 = 0x3001;
-	public static final int GL_CLIP_PLANE2 = 0x3002;
-	public static final int GL_CLIP_PLANE3 = 0x3003;
-	public static final int GL_CLIP_PLANE4 = 0x3004;
-	public static final int GL_CLIP_PLANE5 = 0x3005;
-
-	/* ColorMaterialFace */
-	/*      GL_FRONT */
-	/*      GL_BACK */
-	/*      GL_FRONT_AND_BACK */
-
-	/* ColorMaterialParameter */
-	/*      GL_AMBIENT */
-	/*      GL_DIFFUSE */
-	/*      GL_SPECULAR */
-	/*      GL_EMISSION */
-	/*      GL_AMBIENT_AND_DIFFUSE */
-
-	/* ColorPointerType */
-	/*      GL_BYTE */
-	/*      GL_UNSIGNED_BYTE */
-	/*      GL_SHORT */
-	/*      GL_UNSIGNED_SHORT */
-	/*      GL_INT */
-	/*      GL_UNSIGNED_INT */
-	/*      GL_FLOAT */
-	/*      GL_DOUBLE */
-
-	/* CullFaceMode */
-	/*      GL_FRONT */
-	/*      GL_BACK */
-	/*      GL_FRONT_AND_BACK */
-
-	/* DataType */
-	public static final int GL_BYTE = 0x1400;
-	public static final int GL_UNSIGNED_BYTE = 0x1401;
-	public static final int GL_SHORT = 0x1402;
-	public static final int GL_UNSIGNED_SHORT = 0x1403;
-	public static final int GL_INT = 0x1404;
-	public static final int GL_UNSIGNED_INT = 0x1405;
-	public static final int GL_FLOAT = 0x1406;
-	public static final int GL_2_BYTES = 0x1407;
-	public static final int GL_3_BYTES = 0x1408;
-	public static final int GL_4_BYTES = 0x1409;
-	public static final int GL_DOUBLE = 0x140A;
-
-	/* DepthFunction */
-	/*      GL_NEVER */
-	/*      GL_LESS */
-	/*      GL_EQUAL */
-	/*      GL_LEQUAL */
-	/*      GL_GREATER */
-	/*      GL_NOTEQUAL */
-	/*      GL_GEQUAL */
-	/*      GL_ALWAYS */
-
-	/* DrawBufferMode */
-	public static final int GL_NONE = 0;
-	public static final int GL_FRONT_LEFT = 0x0400;
-	public static final int GL_FRONT_RIGHT = 0x0401;
-	public static final int GL_BACK_LEFT = 0x0402;
-	public static final int GL_BACK_RIGHT = 0x0403;
-	public static final int GL_FRONT = 0x0404;
-	public static final int GL_BACK = 0x0405;
-	public static final int GL_LEFT = 0x0406;
-	public static final int GL_RIGHT = 0x0407;
-	public static final int GL_FRONT_AND_BACK = 0x0408;
-	public static final int GL_AUX0 = 0x0409;
-	public static final int GL_AUX1 = 0x040A;
-	public static final int GL_AUX2 = 0x040B;
-	public static final int GL_AUX3 = 0x040C;
-
-	/* Enable */
-	/*      GL_FOG */
-	/*      GL_LIGHTING */
-	/*      GL_TEXTURE_1D */
-	/*      GL_TEXTURE_2D */
-	/*      GL_LINE_STIPPLE */
-	/*      GL_POLYGON_STIPPLE */
-	/*      GL_CULL_FACE */
-	/*      GL_ALPHA_TEST */
-	/*      GL_BLEND */
-	/*      GL_INDEX_LOGIC_OP */
-	/*      GL_COLOR_LOGIC_OP */
-	/*      GL_DITHER */
-	/*      GL_STENCIL_TEST */
-	/*      GL_DEPTH_TEST */
-	/*      GL_CLIP_PLANE0 */
-	/*      GL_CLIP_PLANE1 */
-	/*      GL_CLIP_PLANE2 */
-	/*      GL_CLIP_PLANE3 */
-	/*      GL_CLIP_PLANE4 */
-	/*      GL_CLIP_PLANE5 */
-	/*      GL_LIGHT0 */
-	/*      GL_LIGHT1 */
-	/*      GL_LIGHT2 */
-	/*      GL_LIGHT3 */
-	/*      GL_LIGHT4 */
-	/*      GL_LIGHT5 */
-	/*      GL_LIGHT6 */
-	/*      GL_LIGHT7 */
-	/*      GL_TEXTURE_GEN_S */
-	/*      GL_TEXTURE_GEN_T */
-	/*      GL_TEXTURE_GEN_R */
-	/*      GL_TEXTURE_GEN_Q */
-	/*      GL_MAP1_VERTEX_3 */
-	/*      GL_MAP1_VERTEX_4 */
-	/*      GL_MAP1_COLOR_4 */
-	/*      GL_MAP1_INDEX */
-	/*      GL_MAP1_NORMAL */
-	/*      GL_MAP1_TEXTURE_COORD_1 */
-	/*      GL_MAP1_TEXTURE_COORD_2 */
-	/*      GL_MAP1_TEXTURE_COORD_3 */
-	/*      GL_MAP1_TEXTURE_COORD_4 */
-	/*      GL_MAP2_VERTEX_3 */
-	/*      GL_MAP2_VERTEX_4 */
-	/*      GL_MAP2_COLOR_4 */
-	/*      GL_MAP2_INDEX */
-	/*      GL_MAP2_NORMAL */
-	/*      GL_MAP2_TEXTURE_COORD_1 */
-	/*      GL_MAP2_TEXTURE_COORD_2 */
-	/*      GL_MAP2_TEXTURE_COORD_3 */
-	/*      GL_MAP2_TEXTURE_COORD_4 */
-	/*      GL_POINT_SMOOTH */
-	/*      GL_LINE_SMOOTH */
-	/*      GL_POLYGON_SMOOTH */
-	/*      GL_SCISSOR_TEST */
-	/*      GL_COLOR_MATERIAL */
-	/*      GL_NORMALIZE */
-	/*      GL_AUTO_NORMAL */
-	/*      GL_VERTEX_ARRAY */
-	/*      GL_NORMAL_ARRAY */
-	/*      GL_COLOR_ARRAY */
-	/*      GL_INDEX_ARRAY */
-	/*      GL_TEXTURE_COORD_ARRAY */
-	/*      GL_EDGE_FLAG_ARRAY */
-	/*      GL_POLYGON_OFFSET_POINT */
-	/*      GL_POLYGON_OFFSET_LINE */
-	/*      GL_POLYGON_OFFSET_FILL */
-
-	/* ErrorCode */
-	public static final int GL_NO_ERROR = 0;
-	public static final int GL_INVALID_ENUM = 0x0500;
-	public static final int GL_INVALID_VALUE = 0x0501;
-	public static final int GL_INVALID_OPERATION = 0x0502;
-	public static final int GL_STACK_OVERFLOW = 0x0503;
-	public static final int GL_STACK_UNDERFLOW = 0x0504;
-	public static final int GL_OUT_OF_MEMORY = 0x0505;
-
-	/* FeedBackMode */
-	public static final int GL_2D = 0x0600;
-	public static final int GL_3D = 0x0601;
-	public static final int GL_3D_COLOR = 0x0602;
-	public static final int GL_3D_COLOR_TEXTURE = 0x0603;
-	public static final int GL_4D_COLOR_TEXTURE = 0x0604;
-
-	/* FeedBackToken */
-	public static final int GL_PASS_THROUGH_TOKEN = 0x0700;
-	public static final int GL_POINT_TOKEN = 0x0701;
-	public static final int GL_LINE_TOKEN = 0x0702;
-	public static final int GL_POLYGON_TOKEN = 0x0703;
-	public static final int GL_BITMAP_TOKEN = 0x0704;
-	public static final int GL_DRAW_PIXEL_TOKEN = 0x0705;
-	public static final int GL_COPY_PIXEL_TOKEN = 0x0706;
-	public static final int GL_LINE_RESET_TOKEN = 0x0707;
-
-	/* FogMode */
-	/*      GL_LINEAR */
-	public static final int GL_EXP = 0x0800;
-	public static final int GL_EXP2 = 0x0801;
-
-	/* FogParameter */
-	/*      GL_FOG_COLOR */
-	/*      GL_FOG_DENSITY */
-	/*      GL_FOG_END */
-	/*      GL_FOG_INDEX */
-	/*      GL_FOG_MODE */
-	/*      GL_FOG_START */
-
-	/* FrontFaceDirection */
-	public static final int GL_CW = 0x0900;
-	public static final int GL_CCW = 0x0901;
-
-	/* GetMapTarget */
-	public static final int GL_COEFF = 0x0A00;
-	public static final int GL_ORDER = 0x0A01;
-	public static final int GL_DOMAIN = 0x0A02;
-
-	/* GetPixelMap */
-	/*      GL_PIXEL_MAP_I_TO_I */
-	/*      GL_PIXEL_MAP_S_TO_S */
-	/*      GL_PIXEL_MAP_I_TO_R */
-	/*      GL_PIXEL_MAP_I_TO_G */
-	/*      GL_PIXEL_MAP_I_TO_B */
-	/*      GL_PIXEL_MAP_I_TO_A */
-	/*      GL_PIXEL_MAP_R_TO_R */
-	/*      GL_PIXEL_MAP_G_TO_G */
-	/*      GL_PIXEL_MAP_B_TO_B */
-	/*      GL_PIXEL_MAP_A_TO_A */
-
-	/* GetPointerTarget */
-	/*      GL_VERTEX_ARRAY_POINTER */
-	/*      GL_NORMAL_ARRAY_POINTER */
-	/*      GL_COLOR_ARRAY_POINTER */
-	/*      GL_INDEX_ARRAY_POINTER */
-	/*      GL_TEXTURE_COORD_ARRAY_POINTER */
-	/*      GL_EDGE_FLAG_ARRAY_POINTER */
-
-	/* GetTarget */
-	public static final int GL_CURRENT_COLOR = 0x0B00;
-	public static final int GL_CURRENT_INDEX = 0x0B01;
-	public static final int GL_CURRENT_NORMAL = 0x0B02;
-	public static final int GL_CURRENT_TEXTURE_COORDS = 0x0B03;
-	public static final int GL_CURRENT_RASTER_COLOR = 0x0B04;
-	public static final int GL_CURRENT_RASTER_INDEX = 0x0B05;
-	public static final int GL_CURRENT_RASTER_TEXTURE_COORDS = 0x0B06;
-	public static final int GL_CURRENT_RASTER_POSITION = 0x0B07;
-	public static final int GL_CURRENT_RASTER_POSITION_VALID = 0x0B08;
-	public static final int GL_CURRENT_RASTER_DISTANCE = 0x0B09;
-	public static final int GL_POINT_SMOOTH = 0x0B10;
-	public static final int GL_POINT_SIZE = 0x0B11;
-	public static final int GL_POINT_SIZE_RANGE = 0x0B12;
-	public static final int GL_POINT_SIZE_GRANULARITY = 0x0B13;
-	public static final int GL_LINE_SMOOTH = 0x0B20;
-	public static final int GL_LINE_WIDTH = 0x0B21;
-	public static final int GL_LINE_WIDTH_RANGE = 0x0B22;
-	public static final int GL_LINE_WIDTH_GRANULARITY = 0x0B23;
-	public static final int GL_LINE_STIPPLE = 0x0B24;
-	public static final int GL_LINE_STIPPLE_PATTERN = 0x0B25;
-	public static final int GL_LINE_STIPPLE_REPEAT = 0x0B26;
-	public static final int GL_LIST_MODE = 0x0B30;
-	public static final int GL_MAX_LIST_NESTING = 0x0B31;
-	public static final int GL_LIST_BASE = 0x0B32;
-	public static final int GL_LIST_INDEX = 0x0B33;
-	public static final int GL_POLYGON_MODE = 0x0B40;
-	public static final int GL_POLYGON_SMOOTH = 0x0B41;
-	public static final int GL_POLYGON_STIPPLE = 0x0B42;
-	public static final int GL_EDGE_FLAG = 0x0B43;
-	public static final int GL_CULL_FACE = 0x0B44;
-	public static final int GL_CULL_FACE_MODE = 0x0B45;
-	public static final int GL_FRONT_FACE = 0x0B46;
-	public static final int GL_LIGHTING = 0x0B50;
-	public static final int GL_LIGHT_MODEL_LOCAL_VIEWER = 0x0B51;
-	public static final int GL_LIGHT_MODEL_TWO_SIDE = 0x0B52;
-	public static final int GL_LIGHT_MODEL_AMBIENT = 0x0B53;
-	public static final int GL_SHADE_MODEL = 0x0B54;
-	public static final int GL_COLOR_MATERIAL_FACE = 0x0B55;
-	public static final int GL_COLOR_MATERIAL_PARAMETER = 0x0B56;
-	public static final int GL_COLOR_MATERIAL = 0x0B57;
-	public static final int GL_FOG = 0x0B60;
-	public static final int GL_FOG_INDEX = 0x0B61;
-	public static final int GL_FOG_DENSITY = 0x0B62;
-	public static final int GL_FOG_START = 0x0B63;
-	public static final int GL_FOG_END = 0x0B64;
-	public static final int GL_FOG_MODE = 0x0B65;
-	public static final int GL_FOG_COLOR = 0x0B66;
-	public static final int GL_DEPTH_RANGE = 0x0B70;
-	public static final int GL_DEPTH_TEST = 0x0B71;
-	public static final int GL_DEPTH_WRITEMASK = 0x0B72;
-	public static final int GL_DEPTH_CLEAR_VALUE = 0x0B73;
-	public static final int GL_DEPTH_FUNC = 0x0B74;
-	public static final int GL_ACCUM_CLEAR_VALUE = 0x0B80;
-	public static final int GL_STENCIL_TEST = 0x0B90;
-	public static final int GL_STENCIL_CLEAR_VALUE = 0x0B91;
-	public static final int GL_STENCIL_FUNC = 0x0B92;
-	public static final int GL_STENCIL_VALUE_MASK = 0x0B93;
-	public static final int GL_STENCIL_FAIL = 0x0B94;
-	public static final int GL_STENCIL_PASS_DEPTH_FAIL = 0x0B95;
-	public static final int GL_STENCIL_PASS_DEPTH_PASS = 0x0B96;
-	public static final int GL_STENCIL_REF = 0x0B97;
-	public static final int GL_STENCIL_WRITEMASK = 0x0B98;
-	public static final int GL_MATRIX_MODE = 0x0BA0;
-	public static final int GL_NORMALIZE = 0x0BA1;
-	public static final int GL_VIEWPORT = 0x0BA2;
-	public static final int GL_MODELVIEW_STACK_DEPTH = 0x0BA3;
-	public static final int GL_PROJECTION_STACK_DEPTH = 0x0BA4;
-	public static final int GL_TEXTURE_STACK_DEPTH = 0x0BA5;
-	public static final int GL_MODELVIEW_MATRIX = 0x0BA6;
-	public static final int GL_PROJECTION_MATRIX = 0x0BA7;
-	public static final int GL_TEXTURE_MATRIX = 0x0BA8;
-	public static final int GL_ATTRIB_STACK_DEPTH = 0x0BB0;
-	public static final int GL_CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1;
-	public static final int GL_ALPHA_TEST = 0x0BC0;
-	public static final int GL_ALPHA_TEST_FUNC = 0x0BC1;
-	public static final int GL_ALPHA_TEST_REF = 0x0BC2;
-	public static final int GL_DITHER = 0x0BD0;
-	public static final int GL_BLEND_DST = 0x0BE0;
-	public static final int GL_BLEND_SRC = 0x0BE1;
-	public static final int GL_BLEND = 0x0BE2;
-	public static final int GL_LOGIC_OP_MODE = 0x0BF0;
-	public static final int GL_INDEX_LOGIC_OP = 0x0BF1;
-	public static final int GL_COLOR_LOGIC_OP = 0x0BF2;
-	public static final int GL_AUX_BUFFERS = 0x0C00;
-	public static final int GL_DRAW_BUFFER = 0x0C01;
-	public static final int GL_READ_BUFFER = 0x0C02;
-	public static final int GL_SCISSOR_BOX = 0x0C10;
-	public static final int GL_SCISSOR_TEST = 0x0C11;
-	public static final int GL_INDEX_CLEAR_VALUE = 0x0C20;
-	public static final int GL_INDEX_WRITEMASK = 0x0C21;
-	public static final int GL_COLOR_CLEAR_VALUE = 0x0C22;
-	public static final int GL_COLOR_WRITEMASK = 0x0C23;
-	public static final int GL_INDEX_MODE = 0x0C30;
-	public static final int GL_RGBA_MODE = 0x0C31;
-	public static final int GL_DOUBLEBUFFER = 0x0C32;
-	public static final int GL_STEREO = 0x0C33;
-	public static final int GL_RENDER_MODE = 0x0C40;
-	public static final int GL_PERSPECTIVE_CORRECTION_HINT = 0x0C50;
-	public static final int GL_POINT_SMOOTH_HINT = 0x0C51;
-	public static final int GL_LINE_SMOOTH_HINT = 0x0C52;
-	public static final int GL_POLYGON_SMOOTH_HINT = 0x0C53;
-	public static final int GL_FOG_HINT = 0x0C54;
-	public static final int GL_TEXTURE_GEN_S = 0x0C60;
-	public static final int GL_TEXTURE_GEN_T = 0x0C61;
-	public static final int GL_TEXTURE_GEN_R = 0x0C62;
-	public static final int GL_TEXTURE_GEN_Q = 0x0C63;
-	public static final int GL_PIXEL_MAP_I_TO_I = 0x0C70;
-	public static final int GL_PIXEL_MAP_S_TO_S = 0x0C71;
-	public static final int GL_PIXEL_MAP_I_TO_R = 0x0C72;
-	public static final int GL_PIXEL_MAP_I_TO_G = 0x0C73;
-	public static final int GL_PIXEL_MAP_I_TO_B = 0x0C74;
-	public static final int GL_PIXEL_MAP_I_TO_A = 0x0C75;
-	public static final int GL_PIXEL_MAP_R_TO_R = 0x0C76;
-	public static final int GL_PIXEL_MAP_G_TO_G = 0x0C77;
-	public static final int GL_PIXEL_MAP_B_TO_B = 0x0C78;
-	public static final int GL_PIXEL_MAP_A_TO_A = 0x0C79;
-	public static final int GL_PIXEL_MAP_I_TO_I_SIZE = 0x0CB0;
-	public static final int GL_PIXEL_MAP_S_TO_S_SIZE = 0x0CB1;
-	public static final int GL_PIXEL_MAP_I_TO_R_SIZE = 0x0CB2;
-	public static final int GL_PIXEL_MAP_I_TO_G_SIZE = 0x0CB3;
-	public static final int GL_PIXEL_MAP_I_TO_B_SIZE = 0x0CB4;
-	public static final int GL_PIXEL_MAP_I_TO_A_SIZE = 0x0CB5;
-	public static final int GL_PIXEL_MAP_R_TO_R_SIZE = 0x0CB6;
-	public static final int GL_PIXEL_MAP_G_TO_G_SIZE = 0x0CB7;
-	public static final int GL_PIXEL_MAP_B_TO_B_SIZE = 0x0CB8;
-	public static final int GL_PIXEL_MAP_A_TO_A_SIZE = 0x0CB9;
-	public static final int GL_UNPACK_SWAP_BYTES = 0x0CF0;
-	public static final int GL_UNPACK_LSB_FIRST = 0x0CF1;
-	public static final int GL_UNPACK_ROW_LENGTH = 0x0CF2;
-	public static final int GL_UNPACK_SKIP_ROWS = 0x0CF3;
-	public static final int GL_UNPACK_SKIP_PIXELS = 0x0CF4;
-	public static final int GL_UNPACK_ALIGNMENT = 0x0CF5;
-	public static final int GL_PACK_SWAP_BYTES = 0x0D00;
-	public static final int GL_PACK_LSB_FIRST = 0x0D01;
-	public static final int GL_PACK_ROW_LENGTH = 0x0D02;
-	public static final int GL_PACK_SKIP_ROWS = 0x0D03;
-	public static final int GL_PACK_SKIP_PIXELS = 0x0D04;
-	public static final int GL_PACK_ALIGNMENT = 0x0D05;
-	public static final int GL_MAP_COLOR = 0x0D10;
-	public static final int GL_MAP_STENCIL = 0x0D11;
-	public static final int GL_INDEX_SHIFT = 0x0D12;
-	public static final int GL_INDEX_OFFSET = 0x0D13;
-	public static final int GL_RED_SCALE = 0x0D14;
-	public static final int GL_RED_BIAS = 0x0D15;
-	public static final int GL_ZOOM_X = 0x0D16;
-	public static final int GL_ZOOM_Y = 0x0D17;
-	public static final int GL_GREEN_SCALE = 0x0D18;
-	public static final int GL_GREEN_BIAS = 0x0D19;
-	public static final int GL_BLUE_SCALE = 0x0D1A;
-	public static final int GL_BLUE_BIAS = 0x0D1B;
-	public static final int GL_ALPHA_SCALE = 0x0D1C;
-	public static final int GL_ALPHA_BIAS = 0x0D1D;
-	public static final int GL_DEPTH_SCALE = 0x0D1E;
-	public static final int GL_DEPTH_BIAS = 0x0D1F;
-	public static final int GL_MAX_EVAL_ORDER = 0x0D30;
-	public static final int GL_MAX_LIGHTS = 0x0D31;
-	public static final int GL_MAX_CLIP_PLANES = 0x0D32;
-	public static final int GL_MAX_TEXTURE_SIZE = 0x0D33;
-	public static final int GL_MAX_PIXEL_MAP_TABLE = 0x0D34;
-	public static final int GL_MAX_ATTRIB_STACK_DEPTH = 0x0D35;
-	public static final int GL_MAX_MODELVIEW_STACK_DEPTH = 0x0D36;
-	public static final int GL_MAX_NAME_STACK_DEPTH = 0x0D37;
-	public static final int GL_MAX_PROJECTION_STACK_DEPTH = 0x0D38;
-	public static final int GL_MAX_TEXTURE_STACK_DEPTH = 0x0D39;
-	public static final int GL_MAX_VIEWPORT_DIMS = 0x0D3A;
-	public static final int GL_MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B;
-	public static final int GL_SUBPIXEL_BITS = 0x0D50;
-	public static final int GL_INDEX_BITS = 0x0D51;
-	public static final int GL_RED_BITS = 0x0D52;
-	public static final int GL_GREEN_BITS = 0x0D53;
-	public static final int GL_BLUE_BITS = 0x0D54;
-	public static final int GL_ALPHA_BITS = 0x0D55;
-	public static final int GL_DEPTH_BITS = 0x0D56;
-	public static final int GL_STENCIL_BITS = 0x0D57;
-	public static final int GL_ACCUM_RED_BITS = 0x0D58;
-	public static final int GL_ACCUM_GREEN_BITS = 0x0D59;
-	public static final int GL_ACCUM_BLUE_BITS = 0x0D5A;
-	public static final int GL_ACCUM_ALPHA_BITS = 0x0D5B;
-	public static final int GL_NAME_STACK_DEPTH = 0x0D70;
-	public static final int GL_AUTO_NORMAL = 0x0D80;
-	public static final int GL_MAP1_COLOR_4 = 0x0D90;
-	public static final int GL_MAP1_INDEX = 0x0D91;
-	public static final int GL_MAP1_NORMAL = 0x0D92;
-	public static final int GL_MAP1_TEXTURE_COORD_1 = 0x0D93;
-	public static final int GL_MAP1_TEXTURE_COORD_2 = 0x0D94;
-	public static final int GL_MAP1_TEXTURE_COORD_3 = 0x0D95;
-	public static final int GL_MAP1_TEXTURE_COORD_4 = 0x0D96;
-	public static final int GL_MAP1_VERTEX_3 = 0x0D97;
-	public static final int GL_MAP1_VERTEX_4 = 0x0D98;
-	public static final int GL_MAP2_COLOR_4 = 0x0DB0;
-	public static final int GL_MAP2_INDEX = 0x0DB1;
-	public static final int GL_MAP2_NORMAL = 0x0DB2;
-	public static final int GL_MAP2_TEXTURE_COORD_1 = 0x0DB3;
-	public static final int GL_MAP2_TEXTURE_COORD_2 = 0x0DB4;
-	public static final int GL_MAP2_TEXTURE_COORD_3 = 0x0DB5;
-	public static final int GL_MAP2_TEXTURE_COORD_4 = 0x0DB6;
-	public static final int GL_MAP2_VERTEX_3 = 0x0DB7;
-	public static final int GL_MAP2_VERTEX_4 = 0x0DB8;
-	public static final int GL_MAP1_GRID_DOMAIN = 0x0DD0;
-	public static final int GL_MAP1_GRID_SEGMENTS = 0x0DD1;
-	public static final int GL_MAP2_GRID_DOMAIN = 0x0DD2;
-	public static final int GL_MAP2_GRID_SEGMENTS = 0x0DD3;
-	public static final int GL_TEXTURE_1D = 0x0DE0;
-	public static final int GL_TEXTURE_2D = 0x0DE1;
-	public static final int GL_FEEDBACK_BUFFER_POINTER = 0x0DF0;
-	public static final int GL_FEEDBACK_BUFFER_SIZE = 0x0DF1;
-	public static final int GL_FEEDBACK_BUFFER_TYPE = 0x0DF2;
-	public static final int GL_SELECTION_BUFFER_POINTER = 0x0DF3;
-	public static final int GL_SELECTION_BUFFER_SIZE = 0x0DF4;
-	/*      GL_TEXTURE_BINDING_1D */
-	/*      GL_TEXTURE_BINDING_2D */
-	/*      GL_VERTEX_ARRAY */
-	/*      GL_NORMAL_ARRAY */
-	/*      GL_COLOR_ARRAY */
-	/*      GL_INDEX_ARRAY */
-	/*      GL_TEXTURE_COORD_ARRAY */
-	/*      GL_EDGE_FLAG_ARRAY */
-	/*      GL_VERTEX_ARRAY_SIZE */
-	/*      GL_VERTEX_ARRAY_TYPE */
-	/*      GL_VERTEX_ARRAY_STRIDE */
-	/*      GL_NORMAL_ARRAY_TYPE */
-	/*      GL_NORMAL_ARRAY_STRIDE */
-	/*      GL_COLOR_ARRAY_SIZE */
-	/*      GL_COLOR_ARRAY_TYPE */
-	/*      GL_COLOR_ARRAY_STRIDE */
-	/*      GL_INDEX_ARRAY_TYPE */
-	/*      GL_INDEX_ARRAY_STRIDE */
-	/*      GL_TEXTURE_COORD_ARRAY_SIZE */
-	/*      GL_TEXTURE_COORD_ARRAY_TYPE */
-	/*      GL_TEXTURE_COORD_ARRAY_STRIDE */
-	/*      GL_EDGE_FLAG_ARRAY_STRIDE */
-	/*      GL_POLYGON_OFFSET_FACTOR */
-	/*      GL_POLYGON_OFFSET_UNITS */
-
-	/* GetTextureParameter */
-	/*      GL_TEXTURE_MAG_FILTER */
-	/*      GL_TEXTURE_MIN_FILTER */
-	/*      GL_TEXTURE_WRAP_S */
-	/*      GL_TEXTURE_WRAP_T */
-	public static final int GL_TEXTURE_WIDTH = 0x1000;
-	public static final int GL_TEXTURE_HEIGHT = 0x1001;
-	public static final int GL_TEXTURE_INTERNAL_FORMAT = 0x1003;
-	public static final int GL_TEXTURE_BORDER_COLOR = 0x1004;
-	public static final int GL_TEXTURE_BORDER = 0x1005;
-	/*      GL_TEXTURE_RED_SIZE */
-	/*      GL_TEXTURE_GREEN_SIZE */
-	/*      GL_TEXTURE_BLUE_SIZE */
-	/*      GL_TEXTURE_ALPHA_SIZE */
-	/*      GL_TEXTURE_LUMINANCE_SIZE */
-	/*      GL_TEXTURE_INTENSITY_SIZE */
-	/*      GL_TEXTURE_PRIORITY */
-	/*      GL_TEXTURE_RESIDENT */
-
-	/* HintMode */
-	public static final int GL_DONT_CARE = 0x1100;
-	public static final int GL_FASTEST = 0x1101;
-	public static final int GL_NICEST = 0x1102;
-
-	/* HintTarget */
-	/*      GL_PERSPECTIVE_CORRECTION_HINT */
-	/*      GL_POINT_SMOOTH_HINT */
-	/*      GL_LINE_SMOOTH_HINT */
-	/*      GL_POLYGON_SMOOTH_HINT */
-	/*      GL_FOG_HINT */
-	/*      GL_PHONG_HINT */
-
-	/* IndexPointerType */
-	/*      GL_SHORT */
-	/*      GL_INT */
-	/*      GL_FLOAT */
-	/*      GL_DOUBLE */
-
-	/* LightModelParameter */
-	/*      GL_LIGHT_MODEL_AMBIENT */
-	/*      GL_LIGHT_MODEL_LOCAL_VIEWER */
-	/*      GL_LIGHT_MODEL_TWO_SIDE */
-
-	/* LightName */
-	public static final int GL_LIGHT0 = 0x4000;
-	public static final int GL_LIGHT1 = 0x4001;
-	public static final int GL_LIGHT2 = 0x4002;
-	public static final int GL_LIGHT3 = 0x4003;
-	public static final int GL_LIGHT4 = 0x4004;
-	public static final int GL_LIGHT5 = 0x4005;
-	public static final int GL_LIGHT6 = 0x4006;
-	public static final int GL_LIGHT7 = 0x4007;
-
-	/* LightParameter */
-	public static final int GL_AMBIENT = 0x1200;
-	public static final int GL_DIFFUSE = 0x1201;
-	public static final int GL_SPECULAR = 0x1202;
-	public static final int GL_POSITION = 0x1203;
-	public static final int GL_SPOT_DIRECTION = 0x1204;
-	public static final int GL_SPOT_EXPONENT = 0x1205;
-	public static final int GL_SPOT_CUTOFF = 0x1206;
-	public static final int GL_CONSTANT_ATTENUATION = 0x1207;
-	public static final int GL_LINEAR_ATTENUATION = 0x1208;
-	public static final int GL_QUADRATIC_ATTENUATION = 0x1209;
-
-	/* InterleavedArrays */
-	/*      GL_V2F */
-	/*      GL_V3F */
-	/*      GL_C4UB_V2F */
-	/*      GL_C4UB_V3F */
-	/*      GL_C3F_V3F */
-	/*      GL_N3F_V3F */
-	/*      GL_C4F_N3F_V3F */
-	/*      GL_T2F_V3F */
-	/*      GL_T4F_V4F */
-	/*      GL_T2F_C4UB_V3F */
-	/*      GL_T2F_C3F_V3F */
-	/*      GL_T2F_N3F_V3F */
-	/*      GL_T2F_C4F_N3F_V3F */
-	/*      GL_T4F_C4F_N3F_V4F */
-
-	/* ListMode */
-	public static final int GL_COMPILE = 0x1300;
-	public static final int GL_COMPILE_AND_EXECUTE = 0x1301;
-
-	/* ListNameType */
-	/*      GL_BYTE */
-	/*      GL_UNSIGNED_BYTE */
-	/*      GL_SHORT */
-	/*      GL_UNSIGNED_SHORT */
-	/*      GL_INT */
-	/*      GL_UNSIGNED_INT */
-	/*      GL_FLOAT */
-	/*      GL_2_BYTES */
-	/*      GL_3_BYTES */
-	/*      GL_4_BYTES */
-
-	/* LogicOp */
-	public static final int GL_CLEAR = 0x1500;
-	public static final int GL_AND = 0x1501;
-	public static final int GL_AND_REVERSE = 0x1502;
-	public static final int GL_COPY = 0x1503;
-	public static final int GL_AND_INVERTED = 0x1504;
-	public static final int GL_NOOP = 0x1505;
-	public static final int GL_XOR = 0x1506;
-	public static final int GL_OR = 0x1507;
-	public static final int GL_NOR = 0x1508;
-	public static final int GL_EQUIV = 0x1509;
-	public static final int GL_INVERT = 0x150A;
-	public static final int GL_OR_REVERSE = 0x150B;
-	public static final int GL_COPY_INVERTED = 0x150C;
-	public static final int GL_OR_INVERTED = 0x150D;
-	public static final int GL_NAND = 0x150E;
-	public static final int GL_SET = 0x150F;
-
-	/* MapTarget */
-	/*      GL_MAP1_COLOR_4 */
-	/*      GL_MAP1_INDEX */
-	/*      GL_MAP1_NORMAL */
-	/*      GL_MAP1_TEXTURE_COORD_1 */
-	/*      GL_MAP1_TEXTURE_COORD_2 */
-	/*      GL_MAP1_TEXTURE_COORD_3 */
-	/*      GL_MAP1_TEXTURE_COORD_4 */
-	/*      GL_MAP1_VERTEX_3 */
-	/*      GL_MAP1_VERTEX_4 */
-	/*      GL_MAP2_COLOR_4 */
-	/*      GL_MAP2_INDEX */
-	/*      GL_MAP2_NORMAL */
-	/*      GL_MAP2_TEXTURE_COORD_1 */
-	/*      GL_MAP2_TEXTURE_COORD_2 */
-	/*      GL_MAP2_TEXTURE_COORD_3 */
-	/*      GL_MAP2_TEXTURE_COORD_4 */
-	/*      GL_MAP2_VERTEX_3 */
-	/*      GL_MAP2_VERTEX_4 */
-
-	/* MaterialFace */
-	/*      GL_FRONT */
-	/*      GL_BACK */
-	/*      GL_FRONT_AND_BACK */
-
-	/* MaterialParameter */
-	public static final int GL_EMISSION = 0x1600;
-	public static final int GL_SHININESS = 0x1601;
-	public static final int GL_AMBIENT_AND_DIFFUSE = 0x1602;
-	public static final int GL_COLOR_INDEXES = 0x1603;
-	/*      GL_AMBIENT */
-	/*      GL_DIFFUSE */
-	/*      GL_SPECULAR */
-
-	/* MatrixMode */
-	public static final int GL_MODELVIEW = 0x1700;
-	public static final int GL_PROJECTION = 0x1701;
-	public static final int GL_TEXTURE = 0x1702;
-
-	/* MeshMode1 */
-	/*      GL_POINT */
-	/*      GL_LINE */
-
-	/* MeshMode2 */
-	/*      GL_POINT */
-	/*      GL_LINE */
-	/*      GL_FILL */
-
-	/* NormalPointerType */
-	/*      GL_BYTE */
-	/*      GL_SHORT */
-	/*      GL_INT */
-	/*      GL_FLOAT */
-	/*      GL_DOUBLE */
-
-	/* PixelCopyType */
-	public static final int GL_COLOR = 0x1800;
-	public static final int GL_DEPTH = 0x1801;
-	public static final int GL_STENCIL = 0x1802;
-
-	/* PixelFormat */
-	public static final int GL_COLOR_INDEX = 0x1900;
-	public static final int GL_STENCIL_INDEX = 0x1901;
-	public static final int GL_DEPTH_COMPONENT = 0x1902;
-	public static final int GL_RED = 0x1903;
-	public static final int GL_GREEN = 0x1904;
-	public static final int GL_BLUE = 0x1905;
-	public static final int GL_ALPHA = 0x1906;
-	public static final int GL_RGB = 0x1907;
-	public static final int GL_RGBA = 0x1908;
-	public static final int GL_LUMINANCE = 0x1909;
-	public static final int GL_LUMINANCE_ALPHA = 0x190A;
-
-	/* PixelMap */
-	/*      GL_PIXEL_MAP_I_TO_I */
-	/*      GL_PIXEL_MAP_S_TO_S */
-	/*      GL_PIXEL_MAP_I_TO_R */
-	/*      GL_PIXEL_MAP_I_TO_G */
-	/*      GL_PIXEL_MAP_I_TO_B */
-	/*      GL_PIXEL_MAP_I_TO_A */
-	/*      GL_PIXEL_MAP_R_TO_R */
-	/*      GL_PIXEL_MAP_G_TO_G */
-	/*      GL_PIXEL_MAP_B_TO_B */
-	/*      GL_PIXEL_MAP_A_TO_A */
-
-	/* PixelStore */
-	/*      GL_UNPACK_SWAP_BYTES */
-	/*      GL_UNPACK_LSB_FIRST */
-	/*      GL_UNPACK_ROW_LENGTH */
-	/*      GL_UNPACK_SKIP_ROWS */
-	/*      GL_UNPACK_SKIP_PIXELS */
-	/*      GL_UNPACK_ALIGNMENT */
-	/*      GL_PACK_SWAP_BYTES */
-	/*      GL_PACK_LSB_FIRST */
-	/*      GL_PACK_ROW_LENGTH */
-	/*      GL_PACK_SKIP_ROWS */
-	/*      GL_PACK_SKIP_PIXELS */
-	/*      GL_PACK_ALIGNMENT */
-
-	/* PixelTransfer */
-	/*      GL_MAP_COLOR */
-	/*      GL_MAP_STENCIL */
-	/*      GL_INDEX_SHIFT */
-	/*      GL_INDEX_OFFSET */
-	/*      GL_RED_SCALE */
-	/*      GL_RED_BIAS */
-	/*      GL_GREEN_SCALE */
-	/*      GL_GREEN_BIAS */
-	/*      GL_BLUE_SCALE */
-	/*      GL_BLUE_BIAS */
-	/*      GL_ALPHA_SCALE */
-	/*      GL_ALPHA_BIAS */
-	/*      GL_DEPTH_SCALE */
-	/*      GL_DEPTH_BIAS */
-
-	/* PixelType */
-	public static final int GL_BITMAP = 0x1A00;
-	/*      GL_BYTE */
-	/*      GL_UNSIGNED_BYTE */
-	/*      GL_SHORT */
-	/*      GL_UNSIGNED_SHORT */
-	/*      GL_INT */
-	/*      GL_UNSIGNED_INT */
-	/*      GL_FLOAT */
-
-	/* PolygonMode */
-	public static final int GL_POINT = 0x1B00;
-	public static final int GL_LINE = 0x1B01;
-	public static final int GL_FILL = 0x1B02;
-
-	/* ReadBufferMode */
-	/*      GL_FRONT_LEFT */
-	/*      GL_FRONT_RIGHT */
-	/*      GL_BACK_LEFT */
-	/*      GL_BACK_RIGHT */
-	/*      GL_FRONT */
-	/*      GL_BACK */
-	/*      GL_LEFT */
-	/*      GL_RIGHT */
-	/*      GL_AUX0 */
-	/*      GL_AUX1 */
-	/*      GL_AUX2 */
-	/*      GL_AUX3 */
-
-	/* RenderingMode */
-	public static final int GL_RENDER = 0x1C00;
-	public static final int GL_FEEDBACK = 0x1C01;
-	public static final int GL_SELECT = 0x1C02;
-
-	/* ShadingModel */
-	public static final int GL_FLAT = 0x1D00;
-	public static final int GL_SMOOTH = 0x1D01;
-
-	/* StencilFunction */
-	/*      GL_NEVER */
-	/*      GL_LESS */
-	/*      GL_EQUAL */
-	/*      GL_LEQUAL */
-	/*      GL_GREATER */
-	/*      GL_NOTEQUAL */
-	/*      GL_GEQUAL */
-	/*      GL_ALWAYS */
-
-	/* StencilOp */
-	/*      GL_ZERO */
-	public static final int GL_KEEP = 0x1E00;
-	public static final int GL_REPLACE = 0x1E01;
-	public static final int GL_INCR = 0x1E02;
-	public static final int GL_DECR = 0x1E03;
-	/*      GL_INVERT */
-
-	/* StringName */
-	public static final int GL_VENDOR = 0x1F00;
-	public static final int GL_RENDERER = 0x1F01;
-	public static final int GL_VERSION = 0x1F02;
-	public static final int GL_EXTENSIONS = 0x1F03;
-
-	/* TextureCoordName */
-	public static final int GL_S = 0x2000;
-	public static final int GL_T = 0x2001;
-	public static final int GL_R = 0x2002;
-	public static final int GL_Q = 0x2003;
-
-	/* TexCoordPointerType */
-	/*      GL_SHORT */
-	/*      GL_INT */
-	/*      GL_FLOAT */
-	/*      GL_DOUBLE */
-
-	/* TextureEnvMode */
-	public static final int GL_MODULATE = 0x2100;
-	public static final int GL_DECAL = 0x2101;
-	/*      GL_BLEND */
-	/*      GL_REPLACE */
-
-	/* TextureEnvParameter */
-	public static final int GL_TEXTURE_ENV_MODE = 0x2200;
-	public static final int GL_TEXTURE_ENV_COLOR = 0x2201;
-
-	/* TextureEnvTarget */
-	public static final int GL_TEXTURE_ENV = 0x2300;
-
-	/* TextureGenMode */
-	public static final int GL_EYE_LINEAR = 0x2400;
-	public static final int GL_OBJECT_LINEAR = 0x2401;
-	public static final int GL_SPHERE_MAP = 0x2402;
-
-	/* TextureGenParameter */
-	public static final int GL_TEXTURE_GEN_MODE = 0x2500;
-	public static final int GL_OBJECT_PLANE = 0x2501;
-	public static final int GL_EYE_PLANE = 0x2502;
-
-	/* TextureMagFilter */
-	public static final int GL_NEAREST = 0x2600;
-	public static final int GL_LINEAR = 0x2601;
-
-	/* TextureMinFilter */
-	/*      GL_NEAREST */
-	/*      GL_LINEAR */
-	public static final int GL_NEAREST_MIPMAP_NEAREST = 0x2700;
-	public static final int GL_LINEAR_MIPMAP_NEAREST = 0x2701;
-	public static final int GL_NEAREST_MIPMAP_LINEAR = 0x2702;
-	public static final int GL_LINEAR_MIPMAP_LINEAR = 0x2703;
-
-	/* TextureParameterName */
-	public static final int GL_TEXTURE_MAG_FILTER = 0x2800;
-	public static final int GL_TEXTURE_MIN_FILTER = 0x2801;
-	public static final int GL_TEXTURE_WRAP_S = 0x2802;
-	public static final int GL_TEXTURE_WRAP_T = 0x2803;
-	/*      GL_TEXTURE_BORDER_COLOR */
-	/*      GL_TEXTURE_PRIORITY */
-
-	/* TextureTarget */
-	/*      GL_TEXTURE_1D */
-	/*      GL_TEXTURE_2D */
-	/*      GL_PROXY_TEXTURE_1D */
-	/*      GL_PROXY_TEXTURE_2D */
-
-	/* TextureWrapMode */
-	public static final int GL_CLAMP = 0x2900;
-	public static final int GL_REPEAT = 0x2901;
-
-	/* VertexPointerType */
-	/*      GL_SHORT */
-	/*      GL_INT */
-	/*      GL_FLOAT */
-	/*      GL_DOUBLE */
-
-	/* ClientAttribMask */
-	public static final int GL_CLIENT_PIXEL_STORE_BIT = 0x00000001;
-	public static final int GL_CLIENT_VERTEX_ARRAY_BIT = 0x00000002;
-	public static final int GL_CLIENT_ALL_ATTRIB_BITS = 0xffffffff;
-
-	/* polygon_offset */
-	public static final int GL_POLYGON_OFFSET_FACTOR = 0x8038;
-	public static final int GL_POLYGON_OFFSET_UNITS = 0x2A00;
-	public static final int GL_POLYGON_OFFSET_POINT = 0x2A01;
-	public static final int GL_POLYGON_OFFSET_LINE = 0x2A02;
-	public static final int GL_POLYGON_OFFSET_FILL = 0x8037;
-
-	/* texture */
-	public static final int GL_ALPHA4 = 0x803B;
-	public static final int GL_ALPHA8 = 0x803C;
-	public static final int GL_ALPHA12 = 0x803D;
-	public static final int GL_ALPHA16 = 0x803E;
-	public static final int GL_LUMINANCE4 = 0x803F;
-	public static final int GL_LUMINANCE8 = 0x8040;
-	public static final int GL_LUMINANCE12 = 0x8041;
-	public static final int GL_LUMINANCE16 = 0x8042;
-	public static final int GL_LUMINANCE4_ALPHA4 = 0x8043;
-	public static final int GL_LUMINANCE6_ALPHA2 = 0x8044;
-	public static final int GL_LUMINANCE8_ALPHA8 = 0x8045;
-	public static final int GL_LUMINANCE12_ALPHA4 = 0x8046;
-	public static final int GL_LUMINANCE12_ALPHA12 = 0x8047;
-	public static final int GL_LUMINANCE16_ALPHA16 = 0x8048;
-	public static final int GL_INTENSITY = 0x8049;
-	public static final int GL_INTENSITY4 = 0x804A;
-	public static final int GL_INTENSITY8 = 0x804B;
-	public static final int GL_INTENSITY12 = 0x804C;
-	public static final int GL_INTENSITY16 = 0x804D;
-	public static final int GL_R3_G3_B2 = 0x2A10;
-	public static final int GL_RGB4 = 0x804F;
-	public static final int GL_RGB5 = 0x8050;
-	public static final int GL_RGB8 = 0x8051;
-	public static final int GL_RGB10 = 0x8052;
-	public static final int GL_RGB12 = 0x8053;
-	public static final int GL_RGB16 = 0x8054;
-	public static final int GL_RGBA2 = 0x8055;
-	public static final int GL_RGBA4 = 0x8056;
-	public static final int GL_RGB5_A1 = 0x8057;
-	public static final int GL_RGBA8 = 0x8058;
-	public static final int GL_RGB10_A2 = 0x8059;
-	public static final int GL_RGBA12 = 0x805A;
-	public static final int GL_RGBA16 = 0x805B;
-	public static final int GL_TEXTURE_RED_SIZE = 0x805C;
-	public static final int GL_TEXTURE_GREEN_SIZE = 0x805D;
-	public static final int GL_TEXTURE_BLUE_SIZE = 0x805E;
-	public static final int GL_TEXTURE_ALPHA_SIZE = 0x805F;
-	public static final int GL_TEXTURE_LUMINANCE_SIZE = 0x8060;
-	public static final int GL_TEXTURE_INTENSITY_SIZE = 0x8061;
-	public static final int GL_PROXY_TEXTURE_1D = 0x8063;
-	public static final int GL_PROXY_TEXTURE_2D = 0x8064;
-
-	/* texture_object */
-	public static final int GL_TEXTURE_PRIORITY = 0x8066;
-	public static final int GL_TEXTURE_RESIDENT = 0x8067;
-	public static final int GL_TEXTURE_BINDING_1D = 0x8068;
-	public static final int GL_TEXTURE_BINDING_2D = 0x8069;
-
-	/* vertex_array */
-	public static final int GL_VERTEX_ARRAY = 0x8074;
-	public static final int GL_NORMAL_ARRAY = 0x8075;
-	public static final int GL_COLOR_ARRAY = 0x8076;
-	public static final int GL_INDEX_ARRAY = 0x8077;
-	public static final int GL_TEXTURE_COORD_ARRAY = 0x8078;
-	public static final int GL_EDGE_FLAG_ARRAY = 0x8079;
-	public static final int GL_VERTEX_ARRAY_SIZE = 0x807A;
-	public static final int GL_VERTEX_ARRAY_TYPE = 0x807B;
-	public static final int GL_VERTEX_ARRAY_STRIDE = 0x807C;
-	public static final int GL_NORMAL_ARRAY_TYPE = 0x807E;
-	public static final int GL_NORMAL_ARRAY_STRIDE = 0x807F;
-	public static final int GL_COLOR_ARRAY_SIZE = 0x8081;
-	public static final int GL_COLOR_ARRAY_TYPE = 0x8082;
-	public static final int GL_COLOR_ARRAY_STRIDE = 0x8083;
-	public static final int GL_INDEX_ARRAY_TYPE = 0x8085;
-	public static final int GL_INDEX_ARRAY_STRIDE = 0x8086;
-	public static final int GL_TEXTURE_COORD_ARRAY_SIZE = 0x8088;
-	public static final int GL_TEXTURE_COORD_ARRAY_TYPE = 0x8089;
-	public static final int GL_TEXTURE_COORD_ARRAY_STRIDE = 0x808A;
-	public static final int GL_EDGE_FLAG_ARRAY_STRIDE = 0x808C;
-	public static final int GL_VERTEX_ARRAY_POINTER = 0x808E;
-	public static final int GL_NORMAL_ARRAY_POINTER = 0x808F;
-	public static final int GL_COLOR_ARRAY_POINTER = 0x8090;
-	public static final int GL_INDEX_ARRAY_POINTER = 0x8091;
-	public static final int GL_TEXTURE_COORD_ARRAY_POINTER = 0x8092;
-	public static final int GL_EDGE_FLAG_ARRAY_POINTER = 0x8093;
-	public static final int GL_V2F = 0x2A20;
-	public static final int GL_V3F = 0x2A21;
-	public static final int GL_C4UB_V2F = 0x2A22;
-	public static final int GL_C4UB_V3F = 0x2A23;
-	public static final int GL_C3F_V3F = 0x2A24;
-	public static final int GL_N3F_V3F = 0x2A25;
-	public static final int GL_C4F_N3F_V3F = 0x2A26;
-	public static final int GL_T2F_V3F = 0x2A27;
-	public static final int GL_T4F_V4F = 0x2A28;
-	public static final int GL_T2F_C4UB_V3F = 0x2A29;
-	public static final int GL_T2F_C3F_V3F = 0x2A2A;
-	public static final int GL_T2F_N3F_V3F = 0x2A2B;
-	public static final int GL_T2F_C4F_N3F_V3F = 0x2A2C;
-	public static final int GL_T4F_C4F_N3F_V4F = 0x2A2D;
-
-	/* Extensions */
-	public static final int GL_EXT_vertex_array = 1;
-	public static final int GL_EXT_bgra = 1;
-	public static final int GL_EXT_paletted_texture = 1;
-	public static final int GL_WIN_swap_hint = 1;
-	public static final int GL_WIN_draw_range_elements = 1;
-	// public static final int GL_WIN_phong_shading              = 1;
-	// public static final int GL_WIN_specular_fog               = 1;
-
-	/* EXT_vertex_array */
-	public static final int GL_VERTEX_ARRAY_EXT = 0x8074;
-	public static final int GL_NORMAL_ARRAY_EXT = 0x8075;
-	public static final int GL_COLOR_ARRAY_EXT = 0x8076;
-	public static final int GL_INDEX_ARRAY_EXT = 0x8077;
-	public static final int GL_TEXTURE_COORD_ARRAY_EXT = 0x8078;
-	public static final int GL_EDGE_FLAG_ARRAY_EXT = 0x8079;
-	public static final int GL_VERTEX_ARRAY_SIZE_EXT = 0x807A;
-	public static final int GL_VERTEX_ARRAY_TYPE_EXT = 0x807B;
-	public static final int GL_VERTEX_ARRAY_STRIDE_EXT = 0x807C;
-	public static final int GL_VERTEX_ARRAY_COUNT_EXT = 0x807D;
-	public static final int GL_NORMAL_ARRAY_TYPE_EXT = 0x807E;
-	public static final int GL_NORMAL_ARRAY_STRIDE_EXT = 0x807F;
-	public static final int GL_NORMAL_ARRAY_COUNT_EXT = 0x8080;
-	public static final int GL_COLOR_ARRAY_SIZE_EXT = 0x8081;
-	public static final int GL_COLOR_ARRAY_TYPE_EXT = 0x8082;
-	public static final int GL_COLOR_ARRAY_STRIDE_EXT = 0x8083;
-	public static final int GL_COLOR_ARRAY_COUNT_EXT = 0x8084;
-	public static final int GL_INDEX_ARRAY_TYPE_EXT = 0x8085;
-	public static final int GL_INDEX_ARRAY_STRIDE_EXT = 0x8086;
-	public static final int GL_INDEX_ARRAY_COUNT_EXT = 0x8087;
-	public static final int GL_TEXTURE_COORD_ARRAY_SIZE_EXT = 0x8088;
-	public static final int GL_TEXTURE_COORD_ARRAY_TYPE_EXT = 0x8089;
-	public static final int GL_TEXTURE_COORD_ARRAY_STRIDE_EXT = 0x808A;
-	public static final int GL_TEXTURE_COORD_ARRAY_COUNT_EXT = 0x808B;
-	public static final int GL_EDGE_FLAG_ARRAY_STRIDE_EXT = 0x808C;
-	public static final int GL_EDGE_FLAG_ARRAY_COUNT_EXT = 0x808D;
-	public static final int GL_VERTEX_ARRAY_POINTER_EXT = 0x808E;
-	public static final int GL_NORMAL_ARRAY_POINTER_EXT = 0x808F;
-	public static final int GL_COLOR_ARRAY_POINTER_EXT = 0x8090;
-	public static final int GL_INDEX_ARRAY_POINTER_EXT = 0x8091;
-	public static final int GL_TEXTURE_COORD_ARRAY_POINTER_EXT = 0x8092;
-	public static final int GL_EDGE_FLAG_ARRAY_POINTER_EXT = 0x8093;
-	public static final int GL_DOUBLE_EXT = GL_DOUBLE;
-
-	/* EXT_bgra */
-	public static final int GL_BGR_EXT = 0x80E0;
-	public static final int GL_BGRA_EXT = 0x80E1;
-
-	/* EXT_paletted_texture */
-
-	/* These must match the GL_COLOR_TABLE_*_SGI enumerants */
-	public static final int GL_COLOR_TABLE_FORMAT_EXT = 0x80D8;
-	public static final int GL_COLOR_TABLE_WIDTH_EXT = 0x80D9;
-	public static final int GL_COLOR_TABLE_RED_SIZE_EXT = 0x80DA;
-	public static final int GL_COLOR_TABLE_GREEN_SIZE_EXT = 0x80DB;
-	public static final int GL_COLOR_TABLE_BLUE_SIZE_EXT = 0x80DC;
-	public static final int GL_COLOR_TABLE_ALPHA_SIZE_EXT = 0x80DD;
-	public static final int GL_COLOR_TABLE_LUMINANCE_SIZE_EXT = 0x80DE;
-	public static final int GL_COLOR_TABLE_INTENSITY_SIZE_EXT = 0x80DF;
-
-	public static final int GL_COLOR_INDEX1_EXT = 0x80E2;
-	public static final int GL_COLOR_INDEX2_EXT = 0x80E3;
-	public static final int GL_COLOR_INDEX4_EXT = 0x80E4;
-	public static final int GL_COLOR_INDEX8_EXT = 0x80E5;
-	public static final int GL_COLOR_INDEX12_EXT = 0x80E6;
-	public static final int GL_COLOR_INDEX16_EXT = 0x80E7;
-
-	/* WIN_draw_range_elements */
-	public static final int GL_MAX_ELEMENTS_VERTICES_WIN = 0x80E8;
-	public static final int GL_MAX_ELEMENTS_INDICES_WIN = 0x80E9;
-
-	/* WIN_phong_shading */
-	public static final int GL_PHONG_WIN = 0x80EA;
-	public static final int GL_PHONG_HINT_WIN = 0x80EB;
-
-	/* WIN_specular_fog */
-	public static final int GL_FOG_SPECULAR_TEXTURE_WIN = 0x80EC;
-
-	/* For compatibility with OpenGL v1.0 */
-	public static final int GL_LOGIC_OP = GL_INDEX_LOGIC_OP;
-	public static final int GL_TEXTURE_COMPONENTS = GL_TEXTURE_INTERNAL_FORMAT;
-
-	public static final native void glAccum (int op, float value);
-	public static final native void glAlphaFunc (int func, float ref);
-	public static final native boolean glAreTexturesResident (int n, int[] textures, boolean[] residences);
-	public static final native void glArrayElement (int index);
-	public static final native void glBegin (int mode);
-	public static final native void glEnd ();
-	public static final native void glBindTexture (int target, int texture);
-	public static final native void glBitmap (int width, int height, float xorig, float yorig, float xmove, float ymove, byte[] bitmap);
-	public static final native void glBlendFunc (int sfactor, int dfactor);
-	public static final native void glCallList (int list);
-	public static final native void glCallLists (int n, int type, byte[] lists);
-	public static final native void glCallLists (int n, int type, char[] lists);
-	public static final native void glCallLists (int n, int type, int[] lists);
-	public static final native void glClear (int mask);
-	public static final native void glClearAccum (float red, float green, float blue, float alpha);
-	public static final native void glClearColor (float red, float green, float blue, float alpha);
-	public static final native void glClearDepth (double depth);
-	public static final native void glClearIndex (float c);
-	public static final native void glClearStencil (int s);
-	public static final native void glClipPlane (int plane, double[] equation);
-	public static final native void glColor3b (byte red, byte green, byte blue);
-	public static final native void glColor3d (double red, double green, double blue);
-	public static final native void glColor3f (float red, float green, float blue);
-	public static final native void glColor3i (int red, int green, int blue);
-	public static final native void glColor3s (short red, short green, short blue);
-	public static final native void glColor3ub (byte red, byte green, byte blue);
-	public static final native void glColor3ui (int red, int green, int blue);
-	public static final native void glColor3us (short red, short green, short blue);
-	public static final native void glColor4b (byte red, byte green, byte blue, byte alpha);
-	public static final native void glColor4d (double red, double green, double blue, double alpha);
-	public static final native void glColor4f (float red, float green, float blue, float alpha);
-	public static final native void glColor4i (int red, int green, int blue, int alpha);
-	public static final native void glColor4s (short red, short green, short blue, short alpha);
-	public static final native void glColor4ub (byte red, byte green, byte blue, byte alpha);
-	public static final native void glColor4ui (int red, int green, int blue, int alpha);
-	public static final native void glColor4us (short red, short green, short blue, short alpha);
-	public static final native void glColor3bv (byte[] v);
-	public static final native void glColor3dv (double[] v);
-	public static final native void glColor3fv (float[] v);
-	public static final native void glColor3iv (int[] v);
-	public static final native void glColor3sv (short[] v);
-	public static final native void glColor3ubv (byte[] v);
-	public static final native void glColor3uiv (int[] v);
-	public static final native void glColor3usv (short[] v);
-	public static final native void glColor4bv (byte[] v);
-	public static final native void glColor4dv (double[] v);
-	public static final native void glColor4fv (float[] v);
-	public static final native void glColor4iv (int[] v);
-	public static final native void glColor4ubv (byte[] v);
-	public static final native void glColor4uiv (int[] v);
-	public static final native void glColor4usv (short[] v);
-	public static final native void glColorMask (boolean red, boolean green, boolean blue, boolean alpha);
-	public static final native void glColorMaterial (int face, int mode);
-	public static final native void glColorPointer (int size, int type, int stride, int[] pointer);
-	//public static final native void glColorTableEXT (int target, int internalFormat, int width, int format, int type, int[] data);
-	//public static final native void glColorSubTableEXT (int target, int start, int count, int format, int type, int[] data);
-	public static final native void glCopyPixels (int x, int y, int width, int height, int type);
-	public static final native void glCopyTexImage1D (int target, int level, int internalFormat, int x, int y, int width, int border);
-	public static final native void glCopyTexImage2D (int target, int level, int internalFormat, int x, int y, int width, int height, int border);
-	public static final native void glCopyTexSubImage1D (int target, int level, int xoffset, int x, int y, int width); 
-	public static final native void glCopyTexSubImage2D (int target, int level, int xoffset, int yoffset, int x, int y, int width, int height);
-	public static final native void glCullFace (int mode);
-	public static final native void glDeleteLists (int list, int range);
-	public static final native void glDeleteTextures (int n, int[] textures);
-	public static final native void glDepthFunc (int func);
-	public static final native void glDepthMask (boolean flag);
-	public static final native void glDepthRange (double znear, double zfar);
-	public static final native void glDrawArrays (int mode, int first, int count);
-	public static final native void glDrawBuffer (int mode);
-	public static final native void glDrawElements (int mode, int count, int type, int[] indices); /* MULTIPLES TYPES */
-	public static final native void glDrawPixels (int width, int height, int format, int type, int[] pixels); /* MULTIPLES TYPES */
-	public static final native void glEdgeFlag (boolean flag);
-	public static final native void glEdgeFlagv (boolean[] flag);
-	public static final native void glEdgeFlagPointer (int stride, boolean[] pointer);
-	public static final native void glEnable (int cap);
-	public static final native void glDisable (int cap);
-	public static final native void glEnableClientState (int array);
-	public static final native void glDisableClientState (int array);
-	public static final native void glEvalCoord1d (double u);
-	public static final native void glEvalCoord1f (float u);
-	public static final native void glEvalCoord2d (double u, double v);
-	public static final native void glEvalCoord2f (float u, float v);
-	public static final native void glEvalCoord1dv (double[] u);
-	public static final native void glEvalCoord1fv (float[] u);
-	public static final native void glEvalCoord2dv (double[] u);
-	public static final native void glEvalCoord2fv (float[] u);
-	public static final native void glEvalMesh1 (int mode, int i1, int i2);
-	public static final native void glEvalMesh2 (int mode, int i1, int i2, int j1, int j2);
-	public static final native void glEvalPoint1 (int i);
-	public static final native void glEvalPoint2 (int i, int j);
-	public static final native void glFeedbackBuffer (int size, int type, float[] buffer);
-	public static final native void glFinish ();
-	public static final native void glFlush ();
-	public static final native void glFogf (int pname, float param);
-	public static final native void glFogi (int pname, int param);
-	public static final native void glFogfv (int pname, float[] params);
-	public static final native void glFogiv (int pname, int[] params);
-	public static final native void glFrontFace (int mode);
-	public static final native void glFrustum (double left, double right, double bottom, double top, double znear, double zfar);
-	public static final native int glGenLists (int range);
-	public static final native void glGenTextures (int n, int[] textures);
-	public static final native void glGetBooleanv (int pname, boolean[] params);
-	public static final native void glGetDoublev (int pname, double[] params);
-	public static final native void glGetFloatv (int pname, float[] params);
-	public static final native void glGetIntegerv (int pname, int[] params);
-	public static final native void glGetClipPlane (int plane, double[] equation);
-	//public static final native void glGetColorTableEXT (int target, int format, int type, int[] data);
-	//public static final native void glGetColorTableParameterfvEXT (int target, int pname, float[] params);
-	//public static final native void glGetColorTableParameterivEXT (int target, int pname, int[] params);
-	public static final native int glGetError ();
-	public static final native void glGetLightfv (int light, int pname, float[] params);
-	public static final native void glGetLightiv (int light, int pname, int[] params);
-	public static final native void glGetMapdv (int tagert, int query, double[] v);
-	public static final native void glGetMapfv (int tagert, int query, float[] v);
-	public static final native void glGetMapiv (int tagert, int query, int[] v);
-	public static final native void glGetMaterialfv (int face, int pname, float[] params);
-	public static final native void glGetMaterialiv (int face, int pname, int[] params);
-	public static final native void glGetPixelMapfv (int map, float[] values);
-	public static final native void glGetPixelMapuiv (int map, int[] values);
-	public static final native void glGetPixelMapusv (int map, short[] values);
-	public static final native void glGetPointerv (int pname, int[] params);
-	/* TEST */
-	public static final native void glGetPolygonStipple (byte[] mask);
-	public static final native int glGetString (int name);
-	/* SHOULD RETURN A STRING */
-	public static final native void glGetTexEnvfv (int target, int pname, float[] params);
-	public static final native void glGetTexEnviv (int target, int pname, int[] params);
-	public static final native void glGetTexGendv (int coord, int pname, double[] params);
-	public static final native void glGetTexGenfv (int coord, int pname, float[] params);
-	public static final native void glGetTexGeniv (int coord, int pname, int[] params);
-	public static final native void glGetTexImage (int target, int level, int format, int type, int[] pixels); /* MULTIPLES TYPES ARRAY */
-	public static final native void glGetTexLevelParameterfv (int target, int level, int pname, float[] params);
-	public static final native void glGetTexLevelParameteriv (int target, int level, int pname, int[] params);
-	public static final native void glGetTexParameterfv (int target, int pname, float[] params);
-	public static final native void glGetTexParameteriv (int target, int pname, int[] params);
-	public static final native void glHint (int target, int mode);
-	public static final native void glIndexd (double c);
-	public static final native void glIndexf (float c);
-	public static final native void glIndexi (int c);
-	public static final native void glIndexs (short c);
-	public static final native void glIndexdv (double[] c);
-	public static final native void glIndexfv (float[] c);
-	public static final native void glIndexiv (int[] c);
-	public static final native void glIndexsv (short[] c);
-	public static final native void glIndexMask (int mask);
-	public static final native void glIndexPointer (int type, int stride, int[] pointer);
-	/* MULTIPLES TYPES */
-	public static final native void glInitNames ();
-	public static final native void glInterleavedArrays (int format, int stride, int[] pointer);
-	/* CHECK */
-	public static final native boolean glIsEnabled (int cap);
-	public static final native boolean glIsList (int list);
-	public static final native boolean glIsTexture (int texture);
-	public static final native void glLightf (int light, int pname, float param);
-	public static final native void glLighti (int light, int pname, int param);
-	public static final native void glLightfv (int light, int pname, float[] param);
-	//public static final native void glLightfv (int light, int pname, int param);
-	public static final native void glLightiv (int light, int pname, int[] param);
-	public static final native void glLightModelf (int pname, float param);
-	public static final native void glLightModeli (int pname, int param);
-	public static final native void glLightModelfv (int pname, float[] param);
-	public static final native void glLightModeliv (int pname, int[] param);
-	public static final native void glLineStipple (int factor, short pattern);
-	public static final native void glLineWidth (float width);
-	public static final native void glListBase (int base);
-	public static final native void glLoadIdentity ();
-	public static final native void glLoadMatrixd (double[] m);
-	public static final native void glLoadMatrixf (float[] m);
-	public static final native void glLoadName (int name);
-	public static final native void glLogicOp (int opcode);
-	public static final native void glMap1d (int target, double u1, double u2, int stride, int order, double[] points);
-	public static final native void glMap1f (int target, float u1, float u2, int stride, int order, float[] points);
-	public static final native void glMap2d (int target, double u1, double u2, int ustride, int uorder, double v1, double v2, int vstride, int vorder, double[] points);
-	public static final native void glMap2f (int target, float u1, float u2, int ustride, int uorder, float v1, float v2, int vstride, int vorder, float[] points);
-	public static final native void glMapGrid1d (int un, double u1, double u2);
-	public static final native void glMapGrid1f (int un, float u1, float u2);
-	public static final native void glMapGrid2d (int un, double u1, double u2, int vm, double v1, double v2);
-	public static final native void glMapGrid2f (int un, float u1, float u2, int vm, float v1, float v2);
-	public static final native void glMaterialf (int face, int pname, float param);
-	public static final native void glMateriali (int face, int pname, int param);
-	public static final native void glMaterialfv (int face, int pname, float[] param);
-	public static final native void glMaterialiv (int face, int pname, int[] param);
-	public static final native void glMatrixMode (int mode);
-	public static final native void glMultMatrixd (double[] m);
-	public static final native void glMultMatrixf (float[] m);
-	public static final native void glNewList (int list, int mode);
-	public static final native void glEndList ();
-	public static final native void glNormal3b (byte nx, byte ny, byte nz);
-	public static final native void glNormal3d (double nx, double ny, double nz);
-	public static final native void glNormal3f (float nx, float ny, float nz);
-	public static final native void glNormal3i (int nx, int ny, int nz);
-	public static final native void glNormal3s (short nx, short ny, short nz);
-	public static final native void glNormal3bv (byte[] v);
-	public static final native void glNormal3dv (double[] v);
-	public static final native void glNormal3fv (float[] v);
-	public static final native void glNormal3iv (int[] v);
-	public static final native void glNormal3sv (short[] v);
-	public static final native void glNormalPointer (int type, int stride, int[] pointer); /* MULTIPLES TYPES ARRAY */
-	public static final native void glOrtho (double left, double right, double bottom, double top, double znear, double zfar);
-	public static final native void glPassThrough (float token);
-	public static final native void glPixelMapfv (int map, int mapsize, float[] values);
-	public static final native void glPixelMapuiv (int map, int mapsize, int[] values);
-	public static final native void glPixelMapusv (int map, int mapsize, short[] values);
-	public static final native void glPixelStoref (int pname, float param);
-	public static final native void glPixelStorei (int pname, int param);
-	public static final native void glPixelTransferf (int pname, float param);
-	public static final native void glPixelTransferi (int pname, int param);
-	public static final native void glPixelZoom (float xfactor, float yfactor);
-	public static final native void glPointSize (float size);
-	public static final native void glPolygonMode (int face, int mode);
-	public static final native void glPolygonOffset (float factor, float units);
-	public static final native void glPolygonStipple (byte[] mask);
-	public static final native void glPrioritizeTextures (int n, int[] textures, float[] priorities);
-	public static final native void glPushAttrib (int mask);
-	public static final native void glPopAttrib ();
-	public static final native void glPushClientAttrib (int mask);
-	public static final native void glPopClientAttrib ();
-	public static final native void glPushMatrix ();
-	public static final native void glPopMatrix ();
-	public static final native void glPushName (int name);
-	public static final native void glPopName ();
-	public static final native void glRasterPos2d (double x, double y);
-	public static final native void glRasterPos2f (float x, float y);
-	public static final native void glRasterPos2i (int x, int y);
-	public static final native void glRasterPos2s (short x, short y);
-	public static final native void glRasterPos3d (double x, double y, double z);
-	public static final native void glRasterPos3f (float x, float y, float z);
-	public static final native void glRasterPos3i (int x, int y, int z);
-	public static final native void glRasterPos3s (short x, short y, short z);
-	public static final native void glRasterPos4d (double x, double y, double z, double w);
-	public static final native void glRasterPos4f (float x, float y, float z, float w);
-	public static final native void glRasterPos4i (int x, int y, int z, int w);
-	public static final native void glRasterPos4s (short x, short y, short z, short w);
-	public static final native void glRasterPos2dv (double[] v);
-	public static final native void glRasterPos2fv (float[] v);
-	public static final native void glRasterPos2iv (int[] v);
-	public static final native void glRasterPos2sv (short[] v);
-	public static final native void glRasterPos3dv (double[] v);
-	public static final native void glRasterPos3fv (float[] v);
-	public static final native void glRasterPos3iv (int[] v);
-	public static final native void glRasterPos3sv (short[] v);
-	public static final native void glRasterPos4dv (double[] v);
-	public static final native void glRasterPos4fv (float[] v);
-	public static final native void glRasterPos4iv (int[] v);
-	public static final native void glRasterPos4sv (short[] v);
-	public static final native void glReadBuffer (int mode);
-	public static final native void glReadPixels (int x, int y, int width, int height, int format, int type, int[] pixels); /* MULTIPLES TYPES ARRAY */
-	public static final native void glRectd (double x1, double y1, double x2, double y2);
-	public static final native void glRectf (float x1, float y1, float x2, float y2);
-	public static final native void glRecti (int x1, int y1, int x2, int y2);
-	public static final native void glRects (short x1, short y1, short x2, short y2);
-	public static final native void glRectdv (double[] v1, double[] v2);
-	public static final native void glRectfv (float[] v1, float[] v2);
-	public static final native void glRectiv (int[] v1, int[] v2);
-	public static final native void glRectsv (short[] v, short[] v2);
-	public static final native int glRenderMode (int mode);
-	public static final native void glRotated (double angle, double x, double y, double z);
-	public static final native void glRotatef (float angle, float x, float y, float z);
-	public static final native void glScaled (double x, double y, double z);
-	public static final native void glScalef (float x, float y, float z);
-	public static final native void glScissor (int x, int y, int width, int height);
-	//public static final native void glSelectBuffer (int size, int[] buffer);
-	public static final native void glSelectBuffer (int size, int buffer);
-	public static final native void glShadeModel (int mode);
-	public static final native void glStencilFunc (int func, int ref, int mask);
-	public static final native void glStencilMask (int mask);
-	public static final native void glStencilOp (int fail, int zfail, int zpass);
-	public static final native void glTexCoord1d (double s);
-	public static final native void glTexCoord1f (float s);
-	public static final native void glTexCoord1i (int s);
-	public static final native void glTexCoord1s (short s);
-	public static final native void glTexCoord2d (double s, double t);
-	public static final native void glTexCoord2f (float s, float t);
-	public static final native void glTexCoord2i (int s, int t);
-	public static final native void glTexCoord2s (short s, short t);
-	public static final native void glTexCoord3d (double s, double t, double r);
-	public static final native void glTexCoord3f (float s, float t, float r);
-	public static final native void glTexCoord3i (int s, int t, int r);
-	public static final native void glTexCoord3s (short s, short t, short r);
-	public static final native void glTexCoord4d (double s, double t, double r, double q);
-	public static final native void glTexCoord4f (float s, float t, float r, float q);
-	public static final native void glTexCoord4i (int s, int t, int r, int q);
-	public static final native void glTexCoord4s (short s, short t, short r, short q);
-	public static final native void glTexCoord1dv (double[] v);
-	public static final native void glTexCoord1fv (float[] v);
-	public static final native void glTexCoord1iv (int[] v);
-	public static final native void glTexCoord1sv (short[] v);
-	public static final native void glTexCoord2dv (double[] v);
-	public static final native void glTexCoord2fv (float[] v);
-	public static final native void glTexCoord2iv (int[] v);
-	public static final native void glTexCoord2sv (short[] v);
-	public static final native void glTexCoord3dv (double[] v);
-	public static final native void glTexCoord3fv (float[] v);
-	public static final native void glTexCoord3iv (int[] v);
-	public static final native void glTexCoord3sv (short[] v);
-	public static final native void glTexCoord4dv (double[] v);
-	public static final native void glTexCoord4fv (float[] v);
-	public static final native void glTexCoord4iv (int[] v);
-	public static final native void glTexCoord4sv (short[] v);
-	public static final native void glTexCoordPointer (int size, int type, int stride, int[] pointer); /*MULTIPLES ARRAYS - CHECK MSDK, COUNT PARAM MISSING */
-	public static final native void glTexEnvf (int target, int pname, float param);
-	public static final native void glTexEnvi (int target, int pname, int param);
-	public static final native void glTexEnvfv (int target, int pname, float[] params);
-	public static final native void glTexEnviv (int target, int pname, int[] params);
-	public static final native void glTexGend (int coord, int pname, double param);
-	public static final native void glTexGenf (int coord, int pname, float param);
-	public static final native void glTexGeni (int coord, int pname, int param);
-	public static final native void glTexGendv (int coord, int pname, double[] params);
-	public static final native void glTexGenfv (int coord, int pname, float[] params);
-	public static final native void glTexGeniv (int coord, int pname, int[] params);
-	public static final native void glTexImage1D (int target, int level, int internalFormat, int width, int border, int format, int type, int[] pixels); /* MULTIPLES ARRAYS */
-	public static final native void glTexImage2D (int target, int level, int internalFormat, int width, int height, int border, int format, int type, byte[] pixels); /* MULTIPLES ARRAYS */
-	public static final native void glTexParameterf (int target, int pname, float param);
-	public static final native void glTexParameteri (int target, int pname, int param);
-	public static final native void glTexParameterfv (int target, int pname, float[] params);
-	public static final native void glTexParameteriv (int target, int pname, int[] params);
-	public static final native void glTexSubImage1D (int target, int level, int xoffset, int width, int format, int type, int[] pixels); /* MULTIPLES ARRAYS */
-	public static final native void glTexSubImage2D (int target, int level, int xoffset, int yoffset, int width, int height, int format, int type, int[] pixels); /* MULTIPLES ARRAYS */
-	public static final native void glTranslated (double x, double y, double z);
-	public static final native void glTranslatef (float x, float y, float z);
-	public static final native void glVertex2d (double x, double y);
-	public static final native void glVertex2f (float x, float y);
-	public static final native void glVertex2i (int x, int y);
-	public static final native void glVertex2s (short x, short y);
-	public static final native void glVertex3d (double x, double y, double z);
-	public static final native void glVertex3f (float x, float y, float z);
-	public static final native void glVertex3i (int x, int y, int z);
-	public static final native void glVertex3s (short x, short y, short z);
-	public static final native void glVertex4d (double x, double y, double z, double w);
-	public static final native void glVertex4f (float x, float y, float z, float w);
-	public static final native void glVertex4i (int x, int y, int z, int w);
-	public static final native void glVertex4s (short x, short y, short z, short w);
-	public static final native void glVertex2dv (double[] v);
-	public static final native void glVertex2fv (float[] v);
-	public static final native void glVertex2iv (int[] v);
-	public static final native void glVertex2sv (short[] v);
-	public static final native void glVertex3dv (double[] v);
-	public static final native void glVertex3fv (float[] v);
-	public static final native void glVertex3iv (int[] v);
-	public static final native void glVertex3sv (short[] v);
-	public static final native void glVertex4dv (double[] v);
-	public static final native void glVertex4fv (float[] v);
-	public static final native void glVertex4iv (int[] v);
-	public static final native void glVertex4sv (short[] v);
-	public static final native void glVertexPointer (int size, int type, int stride, int[] pointer); /* MULTIPLES ARRAYS */
-	public static final native void glViewport (int x, int y, int width, int height);
-}
diff --git a/bundles/org.eclipse.swt.opengl/common/org/eclipse/opengl/GLU.java b/bundles/org.eclipse.swt.opengl/common/org/eclipse/opengl/GLU.java
deleted file mode 100755
index 4c1e333..0000000
--- a/bundles/org.eclipse.swt.opengl/common/org/eclipse/opengl/GLU.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl;
-
-
-public class GLU {
-
-	/* Version */
-	public static final int GLU_VERSION_1_1 = 1;
-	public static final int GLU_VERSION_1_2 = 1;
-	
-	/* Errors: (return value 0 = no error) */
-	public static final int GLU_INVALID_ENUM = 100900;
-	public static final int GLU_INVALID_VALUE = 100901;
-	public static final int GLU_OUT_OF_MEMORY = 100902;
-	public static final int GLU_INCOMPATIBLE_GL_VERSION = 100903;
-	
-	/* StringName */
-	public static final int GLU_VERSION = 100800;
-	public static final int GLU_EXTENSIONS = 100801;
-	
-	
-	/****           Quadric constants               ****/
-	
-	/* QuadricNormal */
-	public static final int GLU_SMOOTH = 100000;
-	public static final int GLU_FLAT = 100001;
-	public static final int GLU_NONE = 100002;
-	
-	/* QuadricDrawStyle */
-	public static final int GLU_POINT = 100010;
-	public static final int GLU_LINE = 100011;
-	public static final int GLU_FILL = 100012;
-	public static final int GLU_SILHOUETTE = 100013;
-	
-	/* QuadricOrientation */
-	public static final int GLU_OUTSIDE = 100020;
-	public static final int GLU_INSIDE = 100021;
-	
-	/* Callback types: */
-	/*      GLU_ERROR               100103 */
-	
-	
-	/****           Tesselation constants           ****/
-	
-	public static final double GLU_TESS_MAX_COORD = 1.0e150;
-	
-	/* TessProperty */
-	public static final int GLU_TESS_WINDING_RULE = 100140;
-	public static final int GLU_TESS_BOUNDARY_ONLY = 100141;
-	public static final int GLU_TESS_TOLERANCE = 100142;
-	
-	/* TessWinding */
-	public static final int GLU_TESS_WINDING_ODD = 100130;
-	public static final int GLU_TESS_WINDING_NONZERO = 100131;
-	public static final int GLU_TESS_WINDING_POSITIVE = 100132;
-	public static final int GLU_TESS_WINDING_NEGATIVE = 100133;
-	public static final int GLU_TESS_WINDING_ABS_GEQ_TWO = 100134;
-	
-	/* TessCallback */
-	public static final int GLU_TESS_BEGIN = 100100;  /* void (CALLBACK*)(GLenum    type)  */
-	public static final int GLU_TESS_VERTEX = 100101;  /* void (CALLBACK*)(void      *data) */
-	public static final int GLU_TESS_END = 100102;  /* void (CALLBACK*)(void)            */
-	public static final int GLU_TESS_ERROR = 100103;  /* void (CALLBACK*)(GLenum    errno) */
-	public static final int GLU_TESS_EDGE_FLAG = 100104;  /* void (CALLBACK*)(GLboolean boundaryEdge)  */
-	public static final int GLU_TESS_COMBINE = 100105;  /* void (CALLBACK*)(GLdouble  coords[3],
-	                                                            void      *data[4],
-	                                                            GLfloat   weight[4],
-	                                                            void      **dataOut)     */
-	public static final int GLU_TESS_BEGIN_DATA = 100106;  /* void (CALLBACK*)(GLenum    type,  
-	                                                            void      *polygon_data) */
-	public static final int GLU_TESS_VERTEX_DATA = 100107;  /* void (CALLBACK*)(void      *data, 
-	                                                            void      *polygon_data) */
-	public static final int GLU_TESS_END_DATA = 100108;  /* void (CALLBACK*)(void      *polygon_data) */
-	public static final int GLU_TESS_ERROR_DATA = 100109;  /* void (CALLBACK*)(GLenum    errno, 
-	                                                            void      *polygon_data) */
-	public static final int GLU_TESS_EDGE_FLAG_DATA = 100110;  /* void (CALLBACK*)(GLboolean boundaryEdge,
-	                                                            void      *polygon_data) */
-	public static final int GLU_TESS_COMBINE_DATA = 100111;  /* void (CALLBACK*)(GLdouble  coords[3],
-	                                                            void      *data[4],
-	                                                            GLfloat   weight[4],
-	                                                            void      **dataOut,
-	                                                            void      *polygon_data) */
-	
-	/* TessError */
-	public static final int GLU_TESS_ERROR1 = 100151;
-	public static final int GLU_TESS_ERROR2 = 100152;
-	public static final int GLU_TESS_ERROR3 = 100153;
-	public static final int GLU_TESS_ERROR4 = 100154;
-	public static final int GLU_TESS_ERROR5 = 100155;
-	public static final int GLU_TESS_ERROR6 = 100156;
-	public static final int GLU_TESS_ERROR7 = 100157;
-	public static final int GLU_TESS_ERROR8 = 100158;
-	
-	public static final int GLU_TESS_MISSING_BEGIN_POLYGON = GLU_TESS_ERROR1;
-	public static final int GLU_TESS_MISSING_BEGIN_CONTOUR = GLU_TESS_ERROR2;
-	public static final int GLU_TESS_MISSING_END_POLYGON = GLU_TESS_ERROR3;
-	public static final int GLU_TESS_MISSING_END_CONTOUR = GLU_TESS_ERROR4;
-	public static final int GLU_TESS_COORD_TOO_LARGE = GLU_TESS_ERROR5;
-	public static final int GLU_TESS_NEED_COMBINE_CALLBACK = GLU_TESS_ERROR6;
-	
-	/****           NURBS constants                 ****/
-	
-	/* NurbsProperty */
-	public static final int GLU_AUTO_LOAD_MATRIX = 100200;
-	public static final int GLU_CULLING = 100201;
-	public static final int GLU_SAMPLING_TOLERANCE = 100203;
-	public static final int GLU_DISPLAY_MODE = 100204;
-	public static final int GLU_PARAMETRIC_TOLERANCE = 100202;
-	public static final int GLU_SAMPLING_METHOD = 100205;
-	public static final int GLU_U_STEP = 100206;
-	public static final int GLU_V_STEP = 100207;
-	
-	/* NurbsSampling */
-	public static final int GLU_PATH_LENGTH = 100215;
-	public static final int GLU_PARAMETRIC_ERROR = 100216;
-	public static final int GLU_DOMAIN_DISTANCE = 100217;
-	
-	
-	/* NurbsTrim */
-	public static final int GLU_MAP1_TRIM_2 = 100210;
-	public static final int GLU_MAP1_TRIM_3 = 100211;
-	
-	/* NurbsDisplay */
-	/*      GLU_FILL                100012 */
-	public static final int GLU_OUTLINE_POLYGON = 100240;
-	public static final int GLU_OUTLINE_PATCH = 100241;
-	
-	/* NurbsCallback */
-	/*      GLU_ERROR               100103 */
-	
-	/* NurbsErrors */
-	public static final int GLU_NURBS_ERROR1 = 100251;
-	public static final int GLU_NURBS_ERROR2 = 100252;
-	public static final int GLU_NURBS_ERROR3 = 100253;
-	public static final int GLU_NURBS_ERROR4 = 100254;
-	public static final int GLU_NURBS_ERROR5 = 100255;
-	public static final int GLU_NURBS_ERROR6 = 100256;
-	public static final int GLU_NURBS_ERROR7 = 100257;
-	public static final int GLU_NURBS_ERROR8 = 100258;
-	public static final int GLU_NURBS_ERROR9 = 100259;
-	public static final int GLU_NURBS_ERROR10 = 100260;
-	public static final int GLU_NURBS_ERROR11 = 100261;
-	public static final int GLU_NURBS_ERROR12 = 100262;
-	public static final int GLU_NURBS_ERROR13 = 100263;
-	public static final int GLU_NURBS_ERROR14 = 100264;
-	public static final int GLU_NURBS_ERROR15 = 100265;
-	public static final int GLU_NURBS_ERROR16 = 100266;
-	public static final int GLU_NURBS_ERROR17 = 100267;
-	public static final int GLU_NURBS_ERROR18 = 100268;
-	public static final int GLU_NURBS_ERROR19 = 100269;
-	public static final int GLU_NURBS_ERROR20 = 100270;
-	public static final int GLU_NURBS_ERROR21 = 100271;
-	public static final int GLU_NURBS_ERROR22 = 100272;
-	public static final int GLU_NURBS_ERROR23 = 100273;
-	public static final int GLU_NURBS_ERROR24 = 100274;
-	public static final int GLU_NURBS_ERROR25 = 100275;
-	public static final int GLU_NURBS_ERROR26 = 100276;
-	public static final int GLU_NURBS_ERROR27 = 100277;
-	public static final int GLU_NURBS_ERROR28 = 100278;
-	public static final int GLU_NURBS_ERROR29 = 100279;
-	public static final int GLU_NURBS_ERROR30 = 100280;
-	public static final int GLU_NURBS_ERROR31 = 100281;
-	public static final int GLU_NURBS_ERROR32 = 100282;
-	public static final int GLU_NURBS_ERROR33 = 100283;
-	public static final int GLU_NURBS_ERROR34 = 100284;
-	public static final int GLU_NURBS_ERROR35 = 100285;
-	public static final int GLU_NURBS_ERROR36 = 100286;
-	public static final int GLU_NURBS_ERROR37 = 100287;
-	
-	/* Contours types -- obsolete! */
-	public static final int GLU_CW = 100120;
-	public static final int GLU_CCW = 100121;
-	public static final int GLU_INTERIOR = 100122;
-	public static final int GLU_EXTERIOR = 100123;
-	public static final int GLU_UNKNOWN = 100124;
-	
-	/* Names without "TESS_" prefix */
-	public static final int GLU_BEGIN = GLU_TESS_BEGIN;
-	public static final int GLU_VERTEX = GLU_TESS_VERTEX;
-	public static final int GLU_END = GLU_TESS_END;
-	public static final int GLU_ERROR = GLU_TESS_ERROR;
-	public static final int GLU_EDGE_FLAG = GLU_TESS_EDGE_FLAG;
-	
-	
-	public static final native void gluBeginCurve (int nobj);
-	public static final native void gluEndCurve (int nobj);
-	public static final native void gluBeginPolygon (int tess);
-	public static final native void gluEndPolygon (int tess);
-	public static final native void gluBeginSurface (int nobj);
-	public static final native void gluEndSurface (int nobj);
-	public static final native void gluBeginTrim (int nobj);
-	public static final native void gluEndTrim (int nobj);
-	public static final native int gluBuild1DMipmaps (int target, int componenets, int width, int format, int type, int data); /* MULTIPLES TYPES ARRAY */
-	public static final native int gluBuild2DMipmaps (int target, int componenets, int width, int height, int format, int type, byte[] data); /* MULTIPLES TYPES ARRAY */
-	public static final native void gluCylinder (int qobj, double baseRadius, double topRadius, double height, int slices, int stacks);
-	public static final native void gluDeleteNurbsRenderer (int nobj);
-	public static final native void gluDeleteQuadric (int qobj);
-	public static final native void gluDeleteTess (int tess);
-	public static final native void gluDisk (int qobj, double innerRadius, double outerRadius, int slices, int loops);
-	public static final native int gluErrorString (int errCode);  /* SHOULD RETURN A STRING */
-	public static final native void gluGetNurbsProperty (int nobj, int property, float[] value);
-	public static final native int gluGetString (int name); /* SHOULD RETURN A STRING */
-	public static final native void gluGetTessProperty (int tess, int which, double[] value);
-	public static final native void gluLoadSamplingMatrices (int nobj, float[] modelMatrix, float[] projMatrix, int[] viewport);
-	public static final native void gluLookAt (double eyex, double eyey, double eyez, double centerx, double centery, double centerz, double upx, double upy, double upz);
-	public static final native int gluNewNurbsRenderer ();
-	public static final native int gluNewQuadric ();
-	public static final native int gluNewTess ();
-	public static final native void gluNextContour (int tess, int type);
-	public static final native void gluNurbsCallback (int nobj, int which, int fn);
-	public static final native void gluNurbsCurve (int nobj, int nknots, float[] knot, int stride, float[] ctlarray, int order, int type);
-	public static final native void gluNurbsProperty (int nobj, int property, float value);
-	public static final native void gluNurbsSurface (int nobj, int sknot_count, float[] sknot, int tknot_count, float[] tknot, int s_stride, int t_stride, float[] ctlarray, int sorder, int torder, int type);
-	public static final native void gluOrtho2D (double left, double right, double bottom, double top);
-	public static final native void gluPartialDisk (int qobj, double innerRadius, double outerRadius, int slices, int loops, double startAngle, double sweepAngle);
-	public static final native void gluPerspective (double fovy, double aspect, double zNear, double zFar);
-	public static final native void gluPickMatrix (double x, double y, double width, double height, int[] viewport);
-	public static final native int gluProject (double objx, double objy, double objz,double[] modelMatrix, double[] projMatrix, int[] viewport, double[] winx, double[] winy, double[] winz);
-	public static final native void gluPwlCurve (int nobj, int count, float[] array, int stride, int type);
-	public static final native void gluQuadricCallback (int qobj, int which, int fn);
-	public static final native void gluQuadricDrawStyle (int qobj, int drawStyle);
-	public static final native void gluQuadricNormals (int qobj, int normals);
-	public static final native void gluQuadricOrientation (int qobj, int orientation);
-	public static final native void gluQuadricTexture (int qobj, boolean textureCoords);
-	public static final native int gluScaleImage (int format, int widthin, int heightin, int typein, int datain, int widthout, int heightout, int typeout, int dataout); /*MULTIPLES TYPES ARRAYS*/
-	public static final native void gluSphere (int qobj, double radius, int slices, int stacks);
-	public static final native void gluTessBeginContour (int tess);
-	public static final native void gluTessEndContour (int tess);
-	public static final native void gluTessBeginPolygon (int tess, int polygon_data);
-	public static final native void gluTessEndPolygon (int tess);
-	public static final native void gluTessCallback (int tess, int which, int fn);
-	public static final native void gluTessNormal (int tess, double x, double y, double z);
-	public static final native void gluTessProperty (int tess, int property, double value); /* CHECK MSDN, VALUE'S TYPE IS DOUBLE */
-	public static final native void gluTessVertex (int tess, double[] coords, int data);
-	public static final native int gluUnProject (double winx, double winy, double winz, double[] modelMatrix, double[] projMatrix, int[] viewport, double[] objx, double[] objy, double[] objz);
-}
diff --git a/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/GLData.java b/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/GLData.java
deleted file mode 100644
index f25f11d..0000000
--- a/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/GLData.java
+++ /dev/null
@@ -1,135 +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.opengl;
-
-/**
- * The GLData class is a device-independent description
- * of the pixel format attributes of a GL drawable.
- *
- * @see GLCanvas
- */
-
-public class GLData {
-	/**
-	 * Specifies a double-buffered surface.  During context
-	 * creation, only double-buffered formats are considered
-	 * when set to true. 
-	 */
-	public boolean doubleBuffer;
-
-	/**
-	 * Specifies a stereo surface.  During context creation,
-	 * only stereo formats are considered when set to true. 
-	 */
-	public boolean stereo;
-
-	/**
-	 * The size in bits of the color buffer's red channel.
-	 * During context creation, this specifies the minimum
-	 * required red bits.
-	 */
-	public int redSize;
-
-	/**
-	 * The size in bits of the color buffer's green channel.
-	 * During context creation, this specifies the minimum
-	 * required green bits.
-	 */
-	public int greenSize;
-
-	/**
-	 * The size in bits of the color buffer's blue channel.
-	 * During context creation, this specifies the minimum
-	 * required blue bits.
-	 */
-	public int blueSize;
-
-	/**
-	 * The size in bits of the color buffer's alpha channel.
-	 * During context creation, this specifies the minimum
-	 * required alpha bits.
-	 */
-	public int alphaSize;
-
-	/**
-	 * The size in bits of the depth buffer.  During context
-	 * creation, the smallest depth buffer of at least the
-	 * specified value is preferred, or zero for no depth
-	 * buffer.
-	 */
-	public int depthSize;
-
-	/**
-	 * The desired number of stencil bitplanes.  During
-	 * context creation, the smallest stencil buffer of at
-	 * least the specified value is preferred, or zero for
-	 * no stencil buffer.
-	 */
-	public int stencilSize;
-
-	/**
-	 * The size in bits of the accumulation buffer's red
-	 * channel. During context creation, this specifies the
-	 * minimum required red bits.
-	 */
-	public int accumRedSize;
-
-	/**
-	 * The size in bits of the accumulation buffer's green
-	 * channel. During context creation, this specifies the
-	 * minimum required green bits.
-	 */
-	public int accumGreenSize;
-
-	/**
-	 * The size in bits of the accumulation buffer's blue
-	 * channel. During context creation, this specifies the
-	 * minimum required blue bits.
-	 */
-	public int accumBlueSize;
-
-	/**
-	 * The size in bits of the accumulation buffer's alpha
-	 * channel. During context creation, this specifies the
-	 * minimum required alpha bits.
-	 */
-	public int accumAlphaSize;
-
-	/**
-	 * The number of multisample buffers used by this context.
-	 * During context creation, this specifies the minimum
-	 * number of multisample buffers requested.
-	 */
-	public int sampleBuffers;
-
-	/**
-	 * The number of samples accepted in the multisample buffer.
-	 * During creation, pixel formats with the smallest number of
-	 * samples that meets or exceeds the specified minimum number
-	 * are preferred.
-	 */
-	public int samples;
-	
-/**
- * Returns a string containing a concise, human-readable
- * description of the receiver.
- *
- * @return a string representation of the data
- */
-public String toString() {
-	return (doubleBuffer ? "doubleBuffer," : "") +
-		(stereo ? "stereo," : "") +
-		"r:" + redSize + " g:" + greenSize + " b:" + blueSize + " a:" + alphaSize + "," +
-		"depth:" + depthSize + ",stencil:" + stencilSize +
-		",accum r:" + accumRedSize + "g:" + accumGreenSize + "b:" + accumBlueSize + "a:" + accumAlphaSize +
-		",sampleBuffers:" + sampleBuffers + ",samples:" + samples;
-}
-}
diff --git a/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/ImageDataUtil.java b/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/ImageDataUtil.java
deleted file mode 100644
index 2069032..0000000
--- a/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/ImageDataUtil.java
+++ /dev/null
@@ -1,566 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl;
-
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.PaletteData;
-
-
-public class ImageDataUtil {
-	/**
-	 * Alpha mode, values 0 - 255 specify global alpha level
-	 */
-	static final int
-		ALPHA_OPAQUE = 255,           // Fully opaque (ignores any alpha data)
-		ALPHA_TRANSPARENT = 0,        // Fully transparent (ignores any alpha data)
-		ALPHA_CHANNEL_SEPARATE = -1,  // Use alpha channel from separate alphaData
-		ALPHA_CHANNEL_SOURCE = -2,    // Use alpha channel embedded in sourceData
-		ALPHA_MASK_UNPACKED = -3,     // Use transparency mask formed by bytes in alphaData (non-zero is opaque)
-		ALPHA_MASK_PACKED = -4,       // Use transparency mask formed by packed bits in alphaData
-		ALPHA_MASK_INDEX = -5,        // Consider source palette indices transparent if in alphaData array
-		ALPHA_MASK_RGB = -6;          // Consider source RGBs transparent if in RGB888 format alphaData array
-		
-	/**
-	 * Data types (internal)
-	 */
-	private static final int
-		// direct / true color formats with arbitrary masks & shifts
-		TYPE_GENERIC_8 = 0,
-		TYPE_GENERIC_16_MSB = 1,
-		TYPE_GENERIC_16_LSB = 2,
-		TYPE_GENERIC_24 = 3,
-		TYPE_GENERIC_32_MSB = 4,
-		TYPE_GENERIC_32_LSB = 5,
-		// palette indexed color formats
-		TYPE_INDEX_8 = 6,
-		TYPE_INDEX_4 = 7,
-		TYPE_INDEX_2 = 8,
-		TYPE_INDEX_1_MSB = 9,
-		TYPE_INDEX_1_LSB = 10;
-		
-	/**
-	 * Byte and bit order constants.
-	 */
-	static final int LSB_FIRST = 0;
-	static final int MSB_FIRST = 1;
-	
-	/**
-	 * Blit operation bits to be OR'ed together to specify the desired operation.
-	 */
-	static final int
-		BLIT_SRC = 1,     // copy source directly, else applies logic operations
-		BLIT_ALPHA = 2,   // enable alpha blending
-		BLIT_DITHER = 4;  // enable dithering in low color modes
-		
-	/**
-	 * Arbitrary channel width data to 8-bit conversion table.
-	 */
-	static final byte[][] ANY_TO_EIGHT = new byte[9][];
-	static {
-		for (int b = 0; b < 9; ++b) {
-			byte[] data = ANY_TO_EIGHT[b] = new byte[1 << b];
-			if (b == 0) continue;
-			int inc = 0;
-			for (int bit = 0x10000; (bit >>= b) != 0;) inc |= bit;
-			for (int v = 0, p = 0; v < 0x10000; v+= inc) data[p++] = (byte)(v >> 8);
-		}
-	}
-
-	/**
-	 * Blits a direct palette image into a direct palette image.
-	 * <p>
-	 * Note: When the source and destination depth, order and masks
-	 * are pairwise equal and the blitter operation is BLIT_SRC,
-	 * the masks are ignored.  Hence when not changing the image
-	 * data format, 0 may be specified for the masks.
-	 * </p>
-	 * 
-	 * @param op the blitter operation: a combination of BLIT_xxx flags
-	 *        (see BLIT_xxx constants)
-	 * @param srcData the source byte array containing image data
-	 * @param srcDepth the source depth: one of 8, 16, 24, 32
-	 * @param srcStride the source number of bytes per line
-	 * @param srcOrder the source byte ordering: one of MSB_FIRST or LSB_FIRST;
-	 *        ignored if srcDepth is not 16 or 32
-	 * @param srcX the top-left x-coord of the source blit region
-	 * @param srcY the top-left y-coord of the source blit region
-	 * @param srcWidth the width of the source blit region
-	 * @param srcHeight the height of the source blit region
-	 * @param srcRedMask the source red channel mask
-	 * @param srcGreenMask the source green channel mask
-	 * @param srcBlueMask the source blue channel mask
-	 * @param alphaMode the alpha blending or mask mode, may be
-	 *        an integer 0-255 for global alpha; ignored if BLIT_ALPHA
-	 *        not specified in the blitter operations
-	 *        (see ALPHA_MODE_xxx constants)
-	 * @param alphaData the alpha blending or mask data, varies depending
-	 *        on the value of alphaMode and sometimes ignored
-	 * @param alphaStride the alpha data number of bytes per line
-	 * @param alphaX the top-left x-coord of the alpha blit region
-	 * @param alphaY the top-left y-coord of the alpha blit region
-	 * @param destData the destination byte array containing image data
-	 * @param destDepth the destination depth: one of 8, 16, 24, 32
-	 * @param destStride the destination number of bytes per line
-	 * @param destOrder the destination byte ordering: one of MSB_FIRST or LSB_FIRST;
-	 *        ignored if destDepth is not 16 or 32
-	 * @param destX the top-left x-coord of the destination blit region
-	 * @param destY the top-left y-coord of the destination blit region
-	 * @param destWidth the width of the destination blit region
-	 * @param destHeight the height of the destination blit region
-	 * @param destRedMask the destination red channel mask
-	 * @param destGreenMask the destination green channel mask
-	 * @param destBlueMask the destination blue channel mask
-	 * @param flipX if true the resulting image is flipped along the vertical axis
-	 * @param flipY if true the resulting image is flipped along the horizontal axis
-	 */
-	static void blit(int op,
-		byte[] srcData, int srcDepth, int srcStride, int srcOrder,
-		int srcX, int srcY, int srcWidth, int srcHeight,
-		int srcRedMask, int srcGreenMask, int srcBlueMask,
-		int alphaMode, byte[] alphaData, int alphaStride, int alphaX, int alphaY,
-		byte[] destData, int destDepth, int destStride, int destOrder,
-		int destX, int destY, int destWidth, int destHeight,
-		int destRedMask, int destGreenMask, int destBlueMask,
-		boolean flipX, boolean flipY) {
-		if ((destWidth <= 0) || (destHeight <= 0) || (alphaMode == ALPHA_TRANSPARENT)) return;
-
-		// these should be supplied as params later
-		final int srcAlphaMask = 0, destAlphaMask = 0;
-
-		/*** Prepare scaling data ***/
-		final int dwm1 = destWidth - 1;
-		final int sfxi = (dwm1 != 0) ? (int)((((long)srcWidth << 16) - 1) / dwm1) : 0;
-		final int dhm1 = destHeight - 1;
-		final int sfyi = (dhm1 != 0) ? (int)((((long)srcHeight << 16) - 1) / dhm1) : 0;
-
-		/*** Prepare source-related data ***/
-		final int sbpp, stype;
-		switch (srcDepth) {
-			case 8:
-				sbpp = 1;
-				stype = TYPE_GENERIC_8;
-				break;
-			case 16:
-				sbpp = 2;
-				stype = (srcOrder == MSB_FIRST) ? TYPE_GENERIC_16_MSB : TYPE_GENERIC_16_LSB;
-				break;
-			case 24:
-				sbpp = 3;
-				stype = TYPE_GENERIC_24;
-				break;
-			case 32:
-				sbpp = 4;
-				stype = (srcOrder == MSB_FIRST) ? TYPE_GENERIC_32_MSB : TYPE_GENERIC_32_LSB;
-				break;
-			default:
-				//throw new IllegalArgumentException("Invalid source type");
-				return;
-		}			
-		int spr = srcY * srcStride + srcX * sbpp;
-
-		/*** Prepare destination-related data ***/
-		final int dbpp, dtype;
-		switch (destDepth) {
-			case 8:
-				dbpp = 1;
-				dtype = TYPE_GENERIC_8;
-				break;
-			case 16:
-				dbpp = 2;
-				dtype = (destOrder == MSB_FIRST) ? TYPE_GENERIC_16_MSB : TYPE_GENERIC_16_LSB;
-				break;
-			case 24:
-				dbpp = 3;
-				dtype = TYPE_GENERIC_24;
-				break;
-			case 32:
-				dbpp = 4;
-				dtype = (destOrder == MSB_FIRST) ? TYPE_GENERIC_32_MSB : TYPE_GENERIC_32_LSB;
-				break;
-			default:
-				//throw new IllegalArgumentException("Invalid destination type");
-				return;
-		}			
-		int dpr = ((flipY) ? destY + dhm1 : destY) * destStride + ((flipX) ? destX + dwm1 : destX) * dbpp;
-		final int dprxi = (flipX) ? -dbpp : dbpp;
-		final int dpryi = (flipY) ? -destStride : destStride;
-
-		/*** Prepare special processing data ***/
-		int apr;
-		if ((op & BLIT_ALPHA) != 0) {
-			switch (alphaMode) {
-				case ALPHA_MASK_UNPACKED:
-				case ALPHA_CHANNEL_SEPARATE:
-					if (alphaData == null) alphaMode = 0x10000;
-					apr = alphaY * alphaStride + alphaX;
-					break;
-				case ALPHA_MASK_PACKED:
-					if (alphaData == null) alphaMode = 0x10000;
-					alphaStride <<= 3;
-					apr = alphaY * alphaStride + alphaX;
-					break;
-				case ALPHA_MASK_INDEX:
-					//throw new IllegalArgumentException("Invalid alpha type");
-					return;
-				case ALPHA_MASK_RGB:
-					if (alphaData == null) alphaMode = 0x10000;
-					apr = 0;
-					break;
-				default:
-					alphaMode = (alphaMode << 16) / 255; // prescale
-				case ALPHA_CHANNEL_SOURCE:
-					apr = 0;
-					break;
-			}
-		} else {
-			alphaMode = 0x10000;
-			apr = 0;
-		}
-
-		/*** Blit ***/
-		int dp = dpr;
-		int sp = spr;
-		if ((alphaMode == 0x10000) && (stype == dtype) &&
-			(srcRedMask == destRedMask) && (srcGreenMask == destGreenMask) &&
-			(srcBlueMask == destBlueMask) && (srcAlphaMask == destAlphaMask)) {
-			/*** Fast blit (straight copy) ***/
-			switch (sbpp) {
-				case 1:
-					for (int dy = destHeight, sfy = sfyi; dy > 0; --dy, sp = spr += (sfy >>> 16) * srcStride, sfy = (sfy & 0xffff) + sfyi, dp = dpr += dpryi) {
-						for (int dx = destWidth, sfx = sfxi; dx > 0; --dx, dp += dprxi, sfx = (sfx & 0xffff) + sfxi) {
-							destData[dp] = srcData[sp];
-							sp += (sfx >>> 16);
-						}
-					}
-					break;					
-				case 2:
-					for (int dy = destHeight, sfy = sfyi; dy > 0; --dy, sp = spr += (sfy >>> 16) * srcStride, sfy = (sfy & 0xffff) + sfyi, dp = dpr += dpryi) {
-						for (int dx = destWidth, sfx = sfxi; dx > 0; --dx, dp += dprxi, sfx = (sfx & 0xffff) + sfxi) {
-							destData[dp] = srcData[sp];
-							destData[dp + 1] = srcData[sp + 1];
-							sp += (sfx >>> 16) * 2;
-						}
-					}
-					break;
-				case 3:
-					for (int dy = destHeight, sfy = sfyi; dy > 0; --dy, sp = spr += (sfy >>> 16) * srcStride, sfy = (sfy & 0xffff) + sfyi, dp = dpr += dpryi) {
-						for (int dx = destWidth, sfx = sfxi; dx > 0; --dx, dp += dprxi, sfx = (sfx & 0xffff) + sfxi) {
-							destData[dp] = srcData[sp];
-							destData[dp + 1] = srcData[sp + 1];
-							destData[dp + 2] = srcData[sp + 2];
-							sp += (sfx >>> 16) * 3;
-						}
-					}
-					break;
-				case 4:
-					for (int dy = destHeight, sfy = sfyi; dy > 0; --dy, sp = spr += (sfy >>> 16) * srcStride, sfy = (sfy & 0xffff) + sfyi, dp = dpr += dpryi) {
-						for (int dx = destWidth, sfx = sfxi; dx > 0; --dx, dp += dprxi, sfx = (sfx & 0xffff) + sfxi) {
-							destData[dp] = srcData[sp];
-							destData[dp + 1] = srcData[sp + 1];
-							destData[dp + 2] = srcData[sp + 2];
-							destData[dp + 3] = srcData[sp + 3];
-							sp += (sfx >>> 16) * 4;
-						}
-					}
-					break;
-			}
-			return;
-		}
-		/*** Comprehensive blit (apply transformations) ***/
-		final int srcRedShift = getChannelShift(srcRedMask);
-		final byte[] srcReds = ANY_TO_EIGHT[getChannelWidth(srcRedMask, srcRedShift)];
-		final int srcGreenShift = getChannelShift(srcGreenMask);
-		final byte[] srcGreens = ANY_TO_EIGHT[getChannelWidth(srcGreenMask, srcGreenShift)];
-		final int srcBlueShift = getChannelShift(srcBlueMask);
-		final byte[] srcBlues = ANY_TO_EIGHT[getChannelWidth(srcBlueMask, srcBlueShift)];
-		final int srcAlphaShift = getChannelShift(srcAlphaMask);
-		final byte[] srcAlphas = ANY_TO_EIGHT[getChannelWidth(srcAlphaMask, srcAlphaShift)];
-
-		final int destRedShift = getChannelShift(destRedMask);
-		final int destRedWidth = getChannelWidth(destRedMask, destRedShift);
-		final byte[] destReds = ANY_TO_EIGHT[destRedWidth];
-		final int destRedPreShift = 8 - destRedWidth;
-		final int destGreenShift = getChannelShift(destGreenMask);
-		final int destGreenWidth = getChannelWidth(destGreenMask, destGreenShift);
-		final byte[] destGreens = ANY_TO_EIGHT[destGreenWidth];
-		final int destGreenPreShift = 8 - destGreenWidth;
-		final int destBlueShift = getChannelShift(destBlueMask);
-		final int destBlueWidth = getChannelWidth(destBlueMask, destBlueShift);
-		final byte[] destBlues = ANY_TO_EIGHT[destBlueWidth];
-		final int destBluePreShift = 8 - destBlueWidth;
-		final int destAlphaShift = getChannelShift(destAlphaMask);
-		final int destAlphaWidth = getChannelWidth(destAlphaMask, destAlphaShift);
-		final byte[] destAlphas = ANY_TO_EIGHT[destAlphaWidth];
-		final int destAlphaPreShift = 8 - destAlphaWidth;
-
-		int ap = apr, alpha = alphaMode;
-		int r = 0, g = 0, b = 0, a = 0;
-		int rq = 0, gq = 0, bq = 0, aq = 0;
-		for (int dy = destHeight, sfy = sfyi; dy > 0; --dy,
-				sp = spr += (sfy >>> 16) * srcStride,
-				ap = apr += (sfy >>> 16) * alphaStride,
-				sfy = (sfy & 0xffff) + sfyi,
-				dp = dpr += dpryi) {
-			for (int dx = destWidth, sfx = sfxi; dx > 0; --dx,
-					dp += dprxi,
-					sfx = (sfx & 0xffff) + sfxi) {
-				/*** READ NEXT PIXEL ***/
-				switch (stype) {
-					case TYPE_GENERIC_8: {
-						final int data = srcData[sp] & 0xff;
-						sp += (sfx >>> 16);
-						r = srcReds[(data & srcRedMask) >>> srcRedShift] & 0xff;
-						g = srcGreens[(data & srcGreenMask) >>> srcGreenShift] & 0xff;
-						b = srcBlues[(data & srcBlueMask) >>> srcBlueShift] & 0xff;
-						a = srcAlphas[(data & srcAlphaMask) >>> srcAlphaShift] & 0xff;
-					} break;
-					case TYPE_GENERIC_16_MSB: {
-						final int data = ((srcData[sp] & 0xff) << 8) | (srcData[sp + 1] & 0xff);
-						sp += (sfx >>> 16) * 2;
-						r = srcReds[(data & srcRedMask) >>> srcRedShift] & 0xff;
-						g = srcGreens[(data & srcGreenMask) >>> srcGreenShift] & 0xff;
-						b = srcBlues[(data & srcBlueMask) >>> srcBlueShift] & 0xff;
-						a = srcAlphas[(data & srcAlphaMask) >>> srcAlphaShift] & 0xff;
-					} break;
-					case TYPE_GENERIC_16_LSB: {
-						final int data = ((srcData[sp + 1] & 0xff) << 8) | (srcData[sp] & 0xff);
-						sp += (sfx >>> 16) * 2;
-						r = srcReds[(data & srcRedMask) >>> srcRedShift] & 0xff;
-						g = srcGreens[(data & srcGreenMask) >>> srcGreenShift] & 0xff;
-						b = srcBlues[(data & srcBlueMask) >>> srcBlueShift] & 0xff;
-						a = srcAlphas[(data & srcAlphaMask) >>> srcAlphaShift] & 0xff;
-					} break;
-					case TYPE_GENERIC_24: {
-						final int data = (( ((srcData[sp] & 0xff) << 8) |
-							(srcData[sp + 1] & 0xff)) << 8) |
-							(srcData[sp + 2] & 0xff);
-						sp += (sfx >>> 16) * 3;
-						r = srcReds[(data & srcRedMask) >>> srcRedShift] & 0xff;
-						g = srcGreens[(data & srcGreenMask) >>> srcGreenShift] & 0xff;
-						b = srcBlues[(data & srcBlueMask) >>> srcBlueShift] & 0xff;
-						a = srcAlphas[(data & srcAlphaMask) >>> srcAlphaShift] & 0xff;
-					} break;
-					case TYPE_GENERIC_32_MSB: {
-						final int data = (( (( ((srcData[sp] & 0xff) << 8) |
-							(srcData[sp + 1] & 0xff)) << 8) |
-							(srcData[sp + 2] & 0xff)) << 8) |
-							(srcData[sp + 3] & 0xff);
-						sp += (sfx >>> 16) * 4;
-						r = srcReds[(data & srcRedMask) >>> srcRedShift] & 0xff;
-						g = srcGreens[(data & srcGreenMask) >>> srcGreenShift] & 0xff;
-						b = srcBlues[(data & srcBlueMask) >>> srcBlueShift] & 0xff;
-						a = srcAlphas[(data & srcAlphaMask) >>> srcAlphaShift] & 0xff;
-					} break;
-					case TYPE_GENERIC_32_LSB: {
-						final int data = (( (( ((srcData[sp + 3] & 0xff) << 8) |
-							(srcData[sp + 2] & 0xff)) << 8) |
-							(srcData[sp + 1] & 0xff)) << 8) |
-							(srcData[sp] & 0xff);
-						sp += (sfx >>> 16) * 4;
-						r = srcReds[(data & srcRedMask) >>> srcRedShift] & 0xff;
-						g = srcGreens[(data & srcGreenMask) >>> srcGreenShift] & 0xff;
-						b = srcBlues[(data & srcBlueMask) >>> srcBlueShift] & 0xff;
-						a = srcAlphas[(data & srcAlphaMask) >>> srcAlphaShift] & 0xff;
-					} break;
-				}
-
-				/*** DO SPECIAL PROCESSING IF REQUIRED ***/
-				switch (alphaMode) {
-					case ALPHA_CHANNEL_SEPARATE:
-						alpha = ((alphaData[ap] & 0xff) << 16) / 255;
-						ap += (sfx >> 16);
-						break;
-					case ALPHA_CHANNEL_SOURCE:
-						alpha = (a << 16) / 255;
-						break;
-					case ALPHA_MASK_UNPACKED:
-						alpha = (alphaData[ap] != 0) ? 0x10000 : 0;
-						ap += (sfx >> 16);
-						break;						
-					case ALPHA_MASK_PACKED:
-						alpha = (alphaData[ap >> 3] << ((ap & 7) + 9)) & 0x10000;
-						ap += (sfx >> 16);
-						break;
-					case ALPHA_MASK_RGB:
-						alpha = 0x10000;
-						for (int i = 0; i < alphaData.length; i += 3) {
-							if ((r == alphaData[i]) && (g == alphaData[i + 1]) && (b == alphaData[i + 2])) {
-								alpha = 0x0000;
-								break;
-							}
-						}
-						break;
-				}
-				if (alpha != 0x10000) {
-					if (alpha == 0x0000) continue;
-					switch (dtype) {
-						case TYPE_GENERIC_8: {
-							final int data = destData[dp] & 0xff;
-							rq = destReds[(data & destRedMask) >>> destRedShift] & 0xff;
-							gq = destGreens[(data & destGreenMask) >>> destGreenShift] & 0xff;
-							bq = destBlues[(data & destBlueMask) >>> destBlueShift] & 0xff;
-							aq = destAlphas[(data & destAlphaMask) >>> destAlphaShift] & 0xff;
-						} break;
-						case TYPE_GENERIC_16_MSB: {
-							final int data = ((destData[dp] & 0xff) << 8) | (destData[dp + 1] & 0xff);
-							rq = destReds[(data & destRedMask) >>> destRedShift] & 0xff;
-							gq = destGreens[(data & destGreenMask) >>> destGreenShift] & 0xff;
-							bq = destBlues[(data & destBlueMask) >>> destBlueShift] & 0xff;
-							aq = destAlphas[(data & destAlphaMask) >>> destAlphaShift] & 0xff;
-						} break;
-						case TYPE_GENERIC_16_LSB: {
-							final int data = ((destData[dp + 1] & 0xff) << 8) | (destData[dp] & 0xff);
-							rq = destReds[(data & destRedMask) >>> destRedShift] & 0xff;
-							gq = destGreens[(data & destGreenMask) >>> destGreenShift] & 0xff;
-							bq = destBlues[(data & destBlueMask) >>> destBlueShift] & 0xff;
-							aq = destAlphas[(data & destAlphaMask) >>> destAlphaShift] & 0xff;
-						} break;
-						case TYPE_GENERIC_24: {
-							final int data = (( ((destData[dp] & 0xff) << 8) |
-								(destData[dp + 1] & 0xff)) << 8) |
-								(destData[dp + 2] & 0xff);
-							rq = destReds[(data & destRedMask) >>> destRedShift] & 0xff;
-							gq = destGreens[(data & destGreenMask) >>> destGreenShift] & 0xff;
-							bq = destBlues[(data & destBlueMask) >>> destBlueShift] & 0xff;
-							aq = destAlphas[(data & destAlphaMask) >>> destAlphaShift] & 0xff;
-						} break;
-						case TYPE_GENERIC_32_MSB: {
-							final int data = (( (( ((destData[dp] & 0xff) << 8) |
-								(destData[dp + 1] & 0xff)) << 8) |
-								(destData[dp + 2] & 0xff)) << 8) |
-								(destData[dp + 3] & 0xff);
-							rq = destReds[(data & destRedMask) >>> destRedShift] & 0xff;
-							gq = destGreens[(data & destGreenMask) >>> destGreenShift] & 0xff;
-							bq = destBlues[(data & destBlueMask) >>> destBlueShift] & 0xff;
-							aq = destAlphas[(data & destAlphaMask) >>> destAlphaShift] & 0xff;
-						} break;
-						case TYPE_GENERIC_32_LSB: {
-							final int data = (( (( ((destData[dp + 3] & 0xff) << 8) |
-								(destData[dp + 2] & 0xff)) << 8) |
-								(destData[dp + 1] & 0xff)) << 8) |
-								(destData[dp] & 0xff);
-							rq = destReds[(data & destRedMask) >>> destRedShift] & 0xff;
-							gq = destGreens[(data & destGreenMask) >>> destGreenShift] & 0xff;
-							bq = destBlues[(data & destBlueMask) >>> destBlueShift] & 0xff;
-							aq = destAlphas[(data & destAlphaMask) >>> destAlphaShift] & 0xff;
-						} break;
-					}
-					// Perform alpha blending
-					a = aq + ((a - aq) * alpha >> 16);
-					r = rq + ((r - rq) * alpha >> 16);
-					g = gq + ((g - gq) * alpha >> 16);
-					b = bq + ((b - bq) * alpha >> 16);
-				}
-
-				/*** WRITE NEXT PIXEL ***/
-				final int data = 
-					(r >>> destRedPreShift << destRedShift) |
-					(g >>> destGreenPreShift << destGreenShift) |
-					(b >>> destBluePreShift << destBlueShift) |
-					(a >>> destAlphaPreShift << destAlphaShift);
-				switch (dtype) {
-					case TYPE_GENERIC_8: {
-						destData[dp] = (byte) data;
-					} break;
-					case TYPE_GENERIC_16_MSB: {
-						destData[dp] = (byte) (data >>> 8);
-						destData[dp + 1] = (byte) (data & 0xff);
-					} break;
-					case TYPE_GENERIC_16_LSB: {
-						destData[dp] = (byte) (data & 0xff);
-						destData[dp + 1] = (byte) (data >>> 8);
-					} break;
-					case TYPE_GENERIC_24: {
-						destData[dp] = (byte) (data >>> 16);
-						destData[dp + 1] = (byte) (data >>> 8);
-						destData[dp + 2] = (byte) (data & 0xff);
-					} break;
-					case TYPE_GENERIC_32_MSB: {
-						destData[dp] = (byte) (data >>> 24);
-						destData[dp + 1] = (byte) (data >>> 16);
-						destData[dp + 2] = (byte) (data >>> 8);
-						destData[dp + 3] = (byte) (data & 0xff);
-					} break;
-					case TYPE_GENERIC_32_LSB: {
-						destData[dp] = (byte) (data & 0xff);
-						destData[dp + 1] = (byte) (data >>> 8);
-						destData[dp + 2] = (byte) (data >>> 16);
-						destData[dp + 3] = (byte) (data >>> 24);
-					} break;
-				}
-			}
-		}			
-	}
-
-	/**
-	 * Computes the required channel shift from a mask.
-	 */
-	static int getChannelShift(int mask) {
-		if (mask == 0) return 0;
-		int i;
-		for (i = 0; ((mask & 1) == 0) && (i < 32); ++i) {
-			mask >>>= 1;
-		}
-		return i;
-	}
-	
-	/**
-	 * Computes the required channel width (depth) from a mask.
-	 */
-	static int getChannelWidth(int mask, int shift) {
-		if (mask == 0) return 0;
-		int i;
-		mask >>>= shift;
-		for (i = shift; ((mask & 1) != 0) && (i < 32); ++i) {
-			mask >>>= 1;
-		}
-		return i - shift;
-	}
-
-	public static ImageData convertImageData (ImageData source) {
-		PaletteData palette = new PaletteData (0xff0000, 0xff00, 0xff);
-		ImageData newSource = new ImageData (source.width, source.height, 24, palette);
-
-		ImageDataUtil.blit (
-			1,
-			source.data,
-			source.depth,
-			source.bytesPerLine,
-			(source.depth != 16) ? MSB_FIRST : LSB_FIRST,
-			0,
-			0,
-			source.width,
-			source.height,
-			source.palette.redMask,
-			source.palette.greenMask,
-			source.palette.blueMask,
-			255,
-			null,
-			0,
-			0,
-			0,
-			newSource.data,
-			newSource.depth,
-			newSource.bytesPerLine,
-			(newSource.depth != 16) ? MSB_FIRST : LSB_FIRST,
-			0,
-			0,
-			newSource.width,
-			newSource.height,
-			newSource.palette.redMask,
-			newSource.palette.greenMask,
-			newSource.palette.blueMask,
-			false,
-			true);
-
-		return newSource;
-	}
-}
diff --git a/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/Library.java b/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/Library.java
deleted file mode 100644
index 26467bc..0000000
--- a/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/Library.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl;
-
-import org.eclipse.swt.*;
-
-public class Library {
-
-public static void loadLibrary (String name) {
-	String platform = SWT.getPlatform ();	
-	try {
-		String newName = name + '-' + platform;
-		System.loadLibrary (newName);
-		return;
-	} catch (UnsatisfiedLinkError e1) {		
-		throw e1;
-	}
-}
-}
diff --git a/bundles/org.eclipse.swt.opengl/gtk/library/build.sh b/bundles/org.eclipse.swt.opengl/gtk/library/build.sh
deleted file mode 100644
index dc26d12..0000000
--- a/bundles/org.eclipse.swt.opengl/gtk/library/build.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#*******************************************************************************
-# 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
-#*******************************************************************************
-
-if [ "${OS}" = "" ]; then
-	OS=`uname -s`
-fi
-
-case $OS in
-	"Linux")
-		makefile="make_linux.mak"
-		echo "Building Linux GTK version of SWT OpenGL"
-		;;
-	*)
-		echo "*** Unknown OS <${OS}>"
-		;;
-esac
-
-export JAVA_HOME
-
-make -f $makefile ${1+"$@"}
diff --git a/bundles/org.eclipse.swt.opengl/gtk/library/glx.c b/bundles/org.eclipse.swt.opengl/gtk/library/glx.c
deleted file mode 100644
index e3615ca..0000000
--- a/bundles/org.eclipse.swt.opengl/gtk/library/glx.c
+++ /dev/null
@@ -1,290 +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
-*******************************************************************************/
-
-#include "swt.h"
-#include "glx_structs.h"
-#include "glx_stats.h"
-
-#define GLX_NATIVE(func) Java_org_eclipse_swt_internal_opengl_gtk_GLX_##func
-
-#ifndef NO_glXChooseVisual
-JNIEXPORT jint JNICALL GLX_NATIVE(glXChooseVisual)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
-{
-	jint *lparg2=NULL;
-	jint rc = 0;
-	GLX_NATIVE_ENTER(env, that, glXChooseVisual_FUNC);
-	if (arg2) if ((lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL)) == NULL) goto fail;
-	rc = (jint)glXChooseVisual(arg0, arg1, lparg2);
-fail:
-	if (arg2 && lparg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	GLX_NATIVE_EXIT(env, that, glXChooseVisual_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_glXCopyContext
-JNIEXPORT void JNICALL GLX_NATIVE(glXCopyContext)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
-{
-	GLX_NATIVE_ENTER(env, that, glXCopyContext_FUNC);
-	glXCopyContext(arg0, arg1, arg2, arg3);
-	GLX_NATIVE_EXIT(env, that, glXCopyContext_FUNC);
-}
-#endif
-
-#ifndef NO_glXCreateContext
-JNIEXPORT jint JNICALL GLX_NATIVE(glXCreateContext)
-	(JNIEnv *env, jclass that, jint arg0, jobject arg1, jint arg2, jboolean arg3)
-{
-	XVisualInfo _arg1, *lparg1=NULL;
-	jint rc = 0;
-	GLX_NATIVE_ENTER(env, that, glXCreateContext_FUNC);
-	if (arg1) if ((lparg1 = getXVisualInfoFields(env, arg1, &_arg1)) == NULL) goto fail;
-	rc = (jint)glXCreateContext(arg0, lparg1, arg2, arg3);
-fail:
-	if (arg1 && lparg1) setXVisualInfoFields(env, arg1, lparg1);
-	GLX_NATIVE_EXIT(env, that, glXCreateContext_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_glXCreateGLXPixmap
-JNIEXPORT jint JNICALL GLX_NATIVE(glXCreateGLXPixmap)
-	(JNIEnv *env, jclass that, jint arg0, jobject arg1, jint arg2)
-{
-	XVisualInfo _arg1, *lparg1=NULL;
-	jint rc = 0;
-	GLX_NATIVE_ENTER(env, that, glXCreateGLXPixmap_FUNC);
-	if (arg1) if ((lparg1 = getXVisualInfoFields(env, arg1, &_arg1)) == NULL) goto fail;
-	rc = (jint)glXCreateGLXPixmap(arg0, lparg1, arg2);
-fail:
-	if (arg1 && lparg1) setXVisualInfoFields(env, arg1, lparg1);
-	GLX_NATIVE_EXIT(env, that, glXCreateGLXPixmap_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_glXDestroyContext
-JNIEXPORT void JNICALL GLX_NATIVE(glXDestroyContext)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GLX_NATIVE_ENTER(env, that, glXDestroyContext_FUNC);
-	glXDestroyContext(arg0, arg1);
-	GLX_NATIVE_EXIT(env, that, glXDestroyContext_FUNC);
-}
-#endif
-
-#ifndef NO_glXDestroyGLXPixmap
-JNIEXPORT void JNICALL GLX_NATIVE(glXDestroyGLXPixmap)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GLX_NATIVE_ENTER(env, that, glXDestroyGLXPixmap_FUNC);
-	glXDestroyGLXPixmap(arg0, arg1);
-	GLX_NATIVE_EXIT(env, that, glXDestroyGLXPixmap_FUNC);
-}
-#endif
-
-#ifndef NO_glXGetClientString
-JNIEXPORT jint JNICALL GLX_NATIVE(glXGetClientString)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	jint rc = 0;
-	GLX_NATIVE_ENTER(env, that, glXGetClientString_FUNC);
-	rc = (jint)glXGetClientString(arg0, arg1);
-	GLX_NATIVE_EXIT(env, that, glXGetClientString_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_glXGetConfig
-JNIEXPORT jint JNICALL GLX_NATIVE(glXGetConfig)
-	(JNIEnv *env, jclass that, jint arg0, jobject arg1, jint arg2, jintArray arg3)
-{
-	XVisualInfo _arg1, *lparg1=NULL;
-	jint *lparg3=NULL;
-	jint rc = 0;
-	GLX_NATIVE_ENTER(env, that, glXGetConfig_FUNC);
-	if (arg1) if ((lparg1 = getXVisualInfoFields(env, arg1, &_arg1)) == NULL) goto fail;
-	if (arg3) if ((lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL)) == NULL) goto fail;
-	rc = (jint)glXGetConfig(arg0, lparg1, arg2, lparg3);
-fail:
-	if (arg3 && lparg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
-	if (arg1 && lparg1) setXVisualInfoFields(env, arg1, lparg1);
-	GLX_NATIVE_EXIT(env, that, glXGetConfig_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_glXGetCurrentContext
-JNIEXPORT jint JNICALL GLX_NATIVE(glXGetCurrentContext)
-	(JNIEnv *env, jclass that)
-{
-	jint rc = 0;
-	GLX_NATIVE_ENTER(env, that, glXGetCurrentContext_FUNC);
-	rc = (jint)glXGetCurrentContext();
-	GLX_NATIVE_EXIT(env, that, glXGetCurrentContext_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_glXGetCurrentDrawable
-JNIEXPORT jint JNICALL GLX_NATIVE(glXGetCurrentDrawable)
-	(JNIEnv *env, jclass that)
-{
-	jint rc = 0;
-	GLX_NATIVE_ENTER(env, that, glXGetCurrentDrawable_FUNC);
-	rc = (jint)glXGetCurrentDrawable();
-	GLX_NATIVE_EXIT(env, that, glXGetCurrentDrawable_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_glXIsDirect
-JNIEXPORT jboolean JNICALL GLX_NATIVE(glXIsDirect)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	jboolean rc = 0;
-	GLX_NATIVE_ENTER(env, that, glXIsDirect_FUNC);
-	rc = (jboolean)glXIsDirect(arg0, arg1);
-	GLX_NATIVE_EXIT(env, that, glXIsDirect_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_glXMakeCurrent
-JNIEXPORT jboolean JNICALL GLX_NATIVE(glXMakeCurrent)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	jboolean rc = 0;
-	GLX_NATIVE_ENTER(env, that, glXMakeCurrent_FUNC);
-	rc = (jboolean)glXMakeCurrent(arg0, arg1, arg2);
-	GLX_NATIVE_EXIT(env, that, glXMakeCurrent_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_glXQueryExtension
-JNIEXPORT jboolean JNICALL GLX_NATIVE(glXQueryExtension)
-	(JNIEnv *env, jclass that, jint arg0, jintArray arg1, jintArray arg2)
-{
-	jint *lparg1=NULL;
-	jint *lparg2=NULL;
-	jboolean rc = 0;
-	GLX_NATIVE_ENTER(env, that, glXQueryExtension_FUNC);
-	if (arg1) if ((lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL)) == NULL) goto fail;
-	if (arg2) if ((lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL)) == NULL) goto fail;
-	rc = (jboolean)glXQueryExtension(arg0, lparg1, lparg2);
-fail:
-	if (arg2 && lparg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	if (arg1 && lparg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
-	GLX_NATIVE_EXIT(env, that, glXQueryExtension_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_glXQueryExtensionsString
-JNIEXPORT jint JNICALL GLX_NATIVE(glXQueryExtensionsString)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	jint rc = 0;
-	GLX_NATIVE_ENTER(env, that, glXQueryExtensionsString_FUNC);
-	rc = (jint)glXQueryExtensionsString(arg0, arg1);
-	GLX_NATIVE_EXIT(env, that, glXQueryExtensionsString_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_glXQueryServerString
-JNIEXPORT jint JNICALL GLX_NATIVE(glXQueryServerString)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	jint rc = 0;
-	GLX_NATIVE_ENTER(env, that, glXQueryServerString_FUNC);
-	rc = (jint)glXQueryServerString(arg0, arg1, arg2);
-	GLX_NATIVE_EXIT(env, that, glXQueryServerString_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_glXQueryVersion
-JNIEXPORT jboolean JNICALL GLX_NATIVE(glXQueryVersion)
-	(JNIEnv *env, jclass that, jint arg0, jintArray arg1, jintArray arg2)
-{
-	jint *lparg1=NULL;
-	jint *lparg2=NULL;
-	jboolean rc = 0;
-	GLX_NATIVE_ENTER(env, that, glXQueryVersion_FUNC);
-	if (arg1) if ((lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL)) == NULL) goto fail;
-	if (arg2) if ((lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL)) == NULL) goto fail;
-	rc = (jboolean)glXQueryVersion(arg0, lparg1, lparg2);
-fail:
-	if (arg2 && lparg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	if (arg1 && lparg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
-	GLX_NATIVE_EXIT(env, that, glXQueryVersion_FUNC);
-	return rc;
-}
-#endif
-
-#ifndef NO_glXSwapBuffers
-JNIEXPORT void JNICALL GLX_NATIVE(glXSwapBuffers)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	GLX_NATIVE_ENTER(env, that, glXSwapBuffers_FUNC);
-	glXSwapBuffers(arg0, arg1);
-	GLX_NATIVE_EXIT(env, that, glXSwapBuffers_FUNC);
-}
-#endif
-
-#ifndef NO_glXUseXFont
-JNIEXPORT void JNICALL GLX_NATIVE(glXUseXFont)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
-{
-	GLX_NATIVE_ENTER(env, that, glXUseXFont_FUNC);
-	glXUseXFont(arg0, arg1, arg2, arg3);
-	GLX_NATIVE_EXIT(env, that, glXUseXFont_FUNC);
-}
-#endif
-
-#ifndef NO_glXWaitGL
-JNIEXPORT void JNICALL GLX_NATIVE(glXWaitGL)
-	(JNIEnv *env, jclass that)
-{
-	GLX_NATIVE_ENTER(env, that, glXWaitGL_FUNC);
-	glXWaitGL();
-	GLX_NATIVE_EXIT(env, that, glXWaitGL_FUNC);
-}
-#endif
-
-#ifndef NO_glXWaitX
-JNIEXPORT void JNICALL GLX_NATIVE(glXWaitX)
-	(JNIEnv *env, jclass that)
-{
-	GLX_NATIVE_ENTER(env, that, glXWaitX_FUNC);
-	glXWaitX();
-	GLX_NATIVE_EXIT(env, that, glXWaitX_FUNC);
-}
-#endif
-
-#ifndef NO_memmove
-JNIEXPORT void JNICALL GLX_NATIVE(memmove)
-	(JNIEnv *env, jclass that, jobject arg0, jint arg1, jint arg2)
-{
-	XVisualInfo _arg0, *lparg0=NULL;
-	GLX_NATIVE_ENTER(env, that, memmove_FUNC);
-	if (arg0) if ((lparg0 = getXVisualInfoFields(env, arg0, &_arg0)) == NULL) goto fail;
-	memmove(lparg0, arg1, arg2);
-fail:
-	if (arg0 && lparg0) setXVisualInfoFields(env, arg0, lparg0);
-	GLX_NATIVE_EXIT(env, that, memmove_FUNC);
-}
-#endif
-
diff --git a/bundles/org.eclipse.swt.opengl/gtk/library/glx.h b/bundles/org.eclipse.swt.opengl/gtk/library/glx.h
deleted file mode 100644
index 4129ee5..0000000
--- a/bundles/org.eclipse.swt.opengl/gtk/library/glx.h
+++ /dev/null
@@ -1,2 +0,0 @@
-
-#include <GL/glx.h>
diff --git a/bundles/org.eclipse.swt.opengl/gtk/library/glx_stats.c b/bundles/org.eclipse.swt.opengl/gtk/library/glx_stats.c
deleted file mode 100644
index 111d187..0000000
--- a/bundles/org.eclipse.swt.opengl/gtk/library/glx_stats.c
+++ /dev/null
@@ -1,63 +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
-*******************************************************************************/
-
-#include "swt.h"
-#include "glx_stats.h"
-
-#ifdef NATIVE_STATS
-
-int GLX_nativeFunctionCount = 21;
-int GLX_nativeFunctionCallCount[21];
-char * GLX_nativeFunctionNames[] = {
-	"glXChooseVisual",
-	"glXCopyContext",
-	"glXCreateContext",
-	"glXCreateGLXPixmap",
-	"glXDestroyContext",
-	"glXDestroyGLXPixmap",
-	"glXGetClientString",
-	"glXGetConfig",
-	"glXGetCurrentContext",
-	"glXGetCurrentDrawable",
-	"glXIsDirect",
-	"glXMakeCurrent",
-	"glXQueryExtension",
-	"glXQueryExtensionsString",
-	"glXQueryServerString",
-	"glXQueryVersion",
-	"glXSwapBuffers",
-	"glXUseXFont",
-	"glXWaitGL",
-	"glXWaitX",
-	"memmove",
-};
-
-#define STATS_NATIVE(func) Java_org_eclipse_swt_tools_internal_NativeStats_##func
-
-JNIEXPORT jint JNICALL STATS_NATIVE(GLX_1GetFunctionCount)
-	(JNIEnv *env, jclass that)
-{
-	return GLX_nativeFunctionCount;
-}
-
-JNIEXPORT jstring JNICALL STATS_NATIVE(GLX_1GetFunctionName)
-	(JNIEnv *env, jclass that, jint index)
-{
-	return (*env)->NewStringUTF(env, GLX_nativeFunctionNames[index]);
-}
-
-JNIEXPORT jint JNICALL STATS_NATIVE(GLX_1GetFunctionCallCount)
-	(JNIEnv *env, jclass that, jint index)
-{
-	return GLX_nativeFunctionCallCount[index];
-}
-
-#endif
diff --git a/bundles/org.eclipse.swt.opengl/gtk/library/glx_stats.h b/bundles/org.eclipse.swt.opengl/gtk/library/glx_stats.h
deleted file mode 100644
index 8ec1695..0000000
--- a/bundles/org.eclipse.swt.opengl/gtk/library/glx_stats.h
+++ /dev/null
@@ -1,45 +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
-*******************************************************************************/
-
-#ifdef NATIVE_STATS
-extern int GLX_nativeFunctionCount;
-extern int GLX_nativeFunctionCallCount[];
-extern char* GLX_nativeFunctionNames[];
-#define GLX_NATIVE_ENTER(env, that, func) GLX_nativeFunctionCallCount[func]++;
-#define GLX_NATIVE_EXIT(env, that, func) 
-#else
-#define GLX_NATIVE_ENTER(env, that, func) 
-#define GLX_NATIVE_EXIT(env, that, func) 
-#endif
-
-typedef enum {
-	glXChooseVisual_FUNC,
-	glXCopyContext_FUNC,
-	glXCreateContext_FUNC,
-	glXCreateGLXPixmap_FUNC,
-	glXDestroyContext_FUNC,
-	glXDestroyGLXPixmap_FUNC,
-	glXGetClientString_FUNC,
-	glXGetConfig_FUNC,
-	glXGetCurrentContext_FUNC,
-	glXGetCurrentDrawable_FUNC,
-	glXIsDirect_FUNC,
-	glXMakeCurrent_FUNC,
-	glXQueryExtension_FUNC,
-	glXQueryExtensionsString_FUNC,
-	glXQueryServerString_FUNC,
-	glXQueryVersion_FUNC,
-	glXSwapBuffers_FUNC,
-	glXUseXFont_FUNC,
-	glXWaitGL_FUNC,
-	glXWaitX_FUNC,
-	memmove_FUNC,
-} GLX_FUNCS;
diff --git a/bundles/org.eclipse.swt.opengl/gtk/library/glx_structs.c b/bundles/org.eclipse.swt.opengl/gtk/library/glx_structs.c
deleted file mode 100644
index b873c1d..0000000
--- a/bundles/org.eclipse.swt.opengl/gtk/library/glx_structs.c
+++ /dev/null
@@ -1,72 +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
-*******************************************************************************/
-
-#include "swt.h"
-#include "glx_structs.h"
-
-#ifndef NO_XVisualInfo
-typedef struct XVisualInfo_FID_CACHE {
-	int cached;
-	jclass clazz;
-	jfieldID visual, visualid, screen, depth, cclass, red_mask, green_mask, blue_mask, colormap_size, bits_per_rgb;
-} XVisualInfo_FID_CACHE;
-
-XVisualInfo_FID_CACHE XVisualInfoFc;
-
-void cacheXVisualInfoFields(JNIEnv *env, jobject lpObject)
-{
-	if (XVisualInfoFc.cached) return;
-	XVisualInfoFc.clazz = (*env)->GetObjectClass(env, lpObject);
-	XVisualInfoFc.visual = (*env)->GetFieldID(env, XVisualInfoFc.clazz, "visual", "I");
-	XVisualInfoFc.visualid = (*env)->GetFieldID(env, XVisualInfoFc.clazz, "visualid", "I");
-	XVisualInfoFc.screen = (*env)->GetFieldID(env, XVisualInfoFc.clazz, "screen", "I");
-	XVisualInfoFc.depth = (*env)->GetFieldID(env, XVisualInfoFc.clazz, "depth", "I");
-	XVisualInfoFc.cclass = (*env)->GetFieldID(env, XVisualInfoFc.clazz, "cclass", "I");
-	XVisualInfoFc.red_mask = (*env)->GetFieldID(env, XVisualInfoFc.clazz, "red_mask", "I");
-	XVisualInfoFc.green_mask = (*env)->GetFieldID(env, XVisualInfoFc.clazz, "green_mask", "I");
-	XVisualInfoFc.blue_mask = (*env)->GetFieldID(env, XVisualInfoFc.clazz, "blue_mask", "I");
-	XVisualInfoFc.colormap_size = (*env)->GetFieldID(env, XVisualInfoFc.clazz, "colormap_size", "I");
-	XVisualInfoFc.bits_per_rgb = (*env)->GetFieldID(env, XVisualInfoFc.clazz, "bits_per_rgb", "I");
-	XVisualInfoFc.cached = 1;
-}
-
-XVisualInfo *getXVisualInfoFields(JNIEnv *env, jobject lpObject, XVisualInfo *lpStruct)
-{
-	if (!XVisualInfoFc.cached) cacheXVisualInfoFields(env, lpObject);
-	lpStruct->visual = (*env)->GetIntField(env, lpObject, XVisualInfoFc.visual);
-	lpStruct->visualid = (*env)->GetIntField(env, lpObject, XVisualInfoFc.visualid);
-	lpStruct->screen = (*env)->GetIntField(env, lpObject, XVisualInfoFc.screen);
-	lpStruct->depth = (*env)->GetIntField(env, lpObject, XVisualInfoFc.depth);
-	lpStruct->cclass = (*env)->GetIntField(env, lpObject, XVisualInfoFc.cclass);
-	lpStruct->red_mask = (*env)->GetIntField(env, lpObject, XVisualInfoFc.red_mask);
-	lpStruct->green_mask = (*env)->GetIntField(env, lpObject, XVisualInfoFc.green_mask);
-	lpStruct->blue_mask = (*env)->GetIntField(env, lpObject, XVisualInfoFc.blue_mask);
-	lpStruct->colormap_size = (*env)->GetIntField(env, lpObject, XVisualInfoFc.colormap_size);
-	lpStruct->bits_per_rgb = (*env)->GetIntField(env, lpObject, XVisualInfoFc.bits_per_rgb);
-	return lpStruct;
-}
-
-void setXVisualInfoFields(JNIEnv *env, jobject lpObject, XVisualInfo *lpStruct)
-{
-	if (!XVisualInfoFc.cached) cacheXVisualInfoFields(env, lpObject);
-	(*env)->SetIntField(env, lpObject, XVisualInfoFc.visual, (jint)lpStruct->visual);
-	(*env)->SetIntField(env, lpObject, XVisualInfoFc.visualid, (jint)lpStruct->visualid);
-	(*env)->SetIntField(env, lpObject, XVisualInfoFc.screen, (jint)lpStruct->screen);
-	(*env)->SetIntField(env, lpObject, XVisualInfoFc.depth, (jint)lpStruct->depth);
-	(*env)->SetIntField(env, lpObject, XVisualInfoFc.cclass, (jint)lpStruct->cclass);
-	(*env)->SetIntField(env, lpObject, XVisualInfoFc.red_mask, (jint)lpStruct->red_mask);
-	(*env)->SetIntField(env, lpObject, XVisualInfoFc.green_mask, (jint)lpStruct->green_mask);
-	(*env)->SetIntField(env, lpObject, XVisualInfoFc.blue_mask, (jint)lpStruct->blue_mask);
-	(*env)->SetIntField(env, lpObject, XVisualInfoFc.colormap_size, (jint)lpStruct->colormap_size);
-	(*env)->SetIntField(env, lpObject, XVisualInfoFc.bits_per_rgb, (jint)lpStruct->bits_per_rgb);
-}
-#endif
-
diff --git a/bundles/org.eclipse.swt.opengl/gtk/library/glx_structs.h b/bundles/org.eclipse.swt.opengl/gtk/library/glx_structs.h
deleted file mode 100644
index c04f092..0000000
--- a/bundles/org.eclipse.swt.opengl/gtk/library/glx_structs.h
+++ /dev/null
@@ -1,25 +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
-*******************************************************************************/
-
-#include "glx.h"
-
-#ifndef NO_XVisualInfo
-void cacheXVisualInfoFields(JNIEnv *env, jobject lpObject);
-XVisualInfo *getXVisualInfoFields(JNIEnv *env, jobject lpObject, XVisualInfo *lpStruct);
-void setXVisualInfoFields(JNIEnv *env, jobject lpObject, XVisualInfo *lpStruct);
-#define XVisualInfo_sizeof() sizeof(XVisualInfo)
-#else
-#define cacheXVisualInfoFields(a,b)
-#define getXVisualInfoFields(a,b,c) NULL
-#define setXVisualInfoFields(a,b,c)
-#define XVisualInfo_sizeof() 0
-#endif
-
diff --git a/bundles/org.eclipse.swt.opengl/gtk/library/make_linux.mak b/bundles/org.eclipse.swt.opengl/gtk/library/make_linux.mak
deleted file mode 100644
index f2e954c..0000000
--- a/bundles/org.eclipse.swt.opengl/gtk/library/make_linux.mak
+++ /dev/null
@@ -1,34 +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
-#*******************************************************************************
-
-# Define the installation directories for various products.
-CC=gcc
-LD=gcc
-
-# Define the various shared libraries to be made.
-WS_PREFIX   = gtk
-GL_PREFIX   = gl
-GL_DLL      = lib$(GL_PREFIX)-$(WS_PREFIX).so
-GL_OBJ      = swt.o gl.o glu.o structs.o glx.o
-GL_LIB      = -shared -L/usr/X11R6/lib -lGL -lGLU -lm
-
-CFLAGS = -O2 -Wall -I.
-
-all: make_gl
-
-make_gl: $(GL_DLL)
-	$(LD) $(GL_LIB) -o $(GL_DLL) $(GL_OBJ)
-
-$(GL_DLL): $(GL_OBJ)
-	$(CC) $(CFLAGS) -c glx.c
-
-clean:
-	rm -f *.so *.o
diff --git a/bundles/org.eclipse.swt.opengl/gtk/library/structs.c b/bundles/org.eclipse.swt.opengl/gtk/library/structs.c
deleted file mode 100644
index f11d22d..0000000
--- a/bundles/org.eclipse.swt.opengl/gtk/library/structs.c
+++ /dev/null
@@ -1,73 +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
- *******************************************************************************/
-#include <X11/X.h>
-#include <X11/Xlib.h>
-#include "swt.h"
-#include "structs.h"
-
-typedef struct XVisualInfo_FID_CACHE {
-	int cached;
-	jclass clazz;
-	jfieldID visual, visualid, screen, depth, cclass, red_mask, green_mask, blue_mask, colormap_size, bits_per_rgb;
-} XVisualInfo_FID_CACHE;
-typedef XVisualInfo_FID_CACHE *PXVisualInfo_FID_CACHE;
-
-XVisualInfo_FID_CACHE XVisualInfoFc;
-
-void cacheXVisualInfoFids(JNIEnv *env, jobject lpObject, PXVisualInfo_FID_CACHE lpCache)
-{
-	if (lpCache->cached) return;
-	lpCache->clazz = (*env)->GetObjectClass(env, lpObject);
-	lpCache->visual = (*env)->GetFieldID(env, lpCache->clazz, "visual", "I");
-	lpCache->visualid = (*env)->GetFieldID(env, lpCache->clazz, "visualid", "I");
-	lpCache->screen = (*env)->GetFieldID(env, lpCache->clazz, "screen", "I");
-	lpCache->depth = (*env)->GetFieldID(env, lpCache->clazz, "depth", "I");
-	lpCache->cclass = (*env)->GetFieldID(env, lpCache->clazz, "cclass", "I");
-	lpCache->red_mask = (*env)->GetFieldID(env, lpCache->clazz, "red_mask", "I");
-	lpCache->green_mask = (*env)->GetFieldID(env, lpCache->clazz, "green_mask", "I");
-	lpCache->blue_mask = (*env)->GetFieldID(env, lpCache->clazz, "blue_mask", "I");
-	lpCache->colormap_size = (*env)->GetFieldID(env, lpCache->clazz, "colormap_size", "I");
-	lpCache->bits_per_rgb = (*env)->GetFieldID(env, lpCache->clazz, "bits_per_rgb", "I");
-	lpCache->cached = 1;
-}
-
-XVisualInfo *getXVisualInfoFields(JNIEnv *env, jobject lpObject, XVisualInfo *lpStruct)
-{
-	PXVisualInfo_FID_CACHE lpCache = &XVisualInfoFc;
-	if (!lpCache->cached) cacheXVisualInfoFids(env, lpObject, lpCache);
-	lpStruct->visual = (Visual *)(*env)->GetIntField(env, lpObject, lpCache->visual);
-	lpStruct->visualid = (*env)->GetIntField(env, lpObject, lpCache->visualid);
-	lpStruct->screen = (*env)->GetIntField(env, lpObject, lpCache->screen);
-	lpStruct->depth = (*env)->GetIntField(env, lpObject, lpCache->depth);
-	lpStruct->class = (*env)->GetIntField(env, lpObject, lpCache->cclass);
-	lpStruct->red_mask = (*env)->GetIntField(env, lpObject, lpCache->red_mask);
-	lpStruct->green_mask = (*env)->GetIntField(env, lpObject, lpCache->green_mask);
-	lpStruct->blue_mask = (*env)->GetIntField(env, lpObject, lpCache->blue_mask);
-	lpStruct->colormap_size = (*env)->GetIntField(env, lpObject, lpCache->colormap_size);
-	lpStruct->bits_per_rgb = (*env)->GetIntField(env, lpObject, lpCache->bits_per_rgb);
-	return lpStruct;
-}
-
-void setXVisualInfoFields(JNIEnv *env, jobject lpObject, XVisualInfo *lpStruct)
-{
-	PXVisualInfo_FID_CACHE lpCache = &XVisualInfoFc;
-	if (!lpCache->cached) cacheXVisualInfoFids(env, lpObject, lpCache);
-	(*env)->SetIntField(env, lpObject, lpCache->visual, (jint)lpStruct->visual);
-	(*env)->SetIntField(env, lpObject, lpCache->visualid, (jint)lpStruct->visualid);
-	(*env)->SetIntField(env, lpObject, lpCache->screen, (jint)lpStruct->screen);
-	(*env)->SetIntField(env, lpObject, lpCache->depth, (jint)lpStruct->depth);
-	(*env)->SetIntField(env, lpObject, lpCache->cclass, (jint)lpStruct->class);
-	(*env)->SetIntField(env, lpObject, lpCache->red_mask, (jint)lpStruct->red_mask);
-	(*env)->SetIntField(env, lpObject, lpCache->green_mask, (jint)lpStruct->green_mask);
-	(*env)->SetIntField(env, lpObject, lpCache->blue_mask, (jint)lpStruct->blue_mask);
-	(*env)->SetIntField(env, lpObject, lpCache->colormap_size, (jint)lpStruct->colormap_size);
-	(*env)->SetIntField(env, lpObject, lpCache->bits_per_rgb, (jint)lpStruct->bits_per_rgb);
-}
diff --git a/bundles/org.eclipse.swt.opengl/gtk/library/structs.h b/bundles/org.eclipse.swt.opengl/gtk/library/structs.h
deleted file mode 100644
index 5d98fdd..0000000
--- a/bundles/org.eclipse.swt.opengl/gtk/library/structs.h
+++ /dev/null
@@ -1,16 +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
- *******************************************************************************/
-#include <X11/X.h>
-#include <X11/Xutil.h>
-
-XVisualInfo *getXVisualInfoFields(JNIEnv *env, jobject lpObject, XVisualInfo *lpStruct);
-void setXVisualInfoFields(JNIEnv *env, jobject lpObject, XVisualInfo *lpStruct);
-
diff --git a/bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/internal/opengl/gtk/GLX.java b/bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/internal/opengl/gtk/GLX.java
deleted file mode 100755
index 3507933..0000000
--- a/bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/internal/opengl/gtk/GLX.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.internal.opengl.gtk;
-
-import org.eclipse.swt.opengl.Library;
-
-public class GLX {
-	
-static {
-	Library.loadLibrary("gl");
-}
-
-/*
-** Visual Config Attributes (glXGetConfig, glXGetFBConfigAttrib)
-*/
-public static final int GLX_USE_GL				= 1;	/* support GLX rendering */
-public static final int GLX_BUFFER_SIZE			= 2;	/* depth of the color buffer */
-public static final int GLX_LEVEL				= 3;	/* level in plane stacking */
-public static final int GLX_RGBA				= 4;	/* true if RGBA mode */
-public static final int GLX_DOUBLEBUFFER		= 5;	/* double buffering supported */
-public static final int GLX_STEREO				= 6;	/* stereo buffering supported */
-public static final int GLX_AUX_BUFFERS			= 7;	/* number of aux buffers */
-public static final int GLX_RED_SIZE			= 8;	/* number of red component bits */
-public static final int GLX_GREEN_SIZE			= 9;	/* number of green component bits */
-public static final int GLX_BLUE_SIZE			= 10;	/* number of blue component bits */
-public static final int GLX_ALPHA_SIZE			= 11;	/* number of alpha component bits */
-public static final int GLX_DEPTH_SIZE			= 12;	/* number of depth bits */
-public static final int GLX_STENCIL_SIZE		= 13;	/* number of stencil bits */
-public static final int GLX_ACCUM_RED_SIZE		= 14;	/* number of red accum bits */
-public static final int GLX_ACCUM_GREEN_SIZE	= 15;	/* number of green accum bits */
-public static final int GLX_ACCUM_BLUE_SIZE		= 16;	/* number of blue accum bits */
-public static final int GLX_ACCUM_ALPHA_SIZE	= 17;	/* number of alpha accum bits */
-/*
-** FBConfig-specific attributes
-*/
-public static final int GLX_X_VISUAL_TYPE		= 0x22;
-public static final int GLX_CONFIG_CAVEAT		= 0x20;	/* Like visual_info VISUAL_CAVEAT_EXT */
-public static final int GLX_TRANSPARENT_TYPE	= 0x23;
-public static final int GLX_TRANSPARENT_INDEX_VALUE	= 0x24;
-public static final int GLX_TRANSPARENT_RED_VALUE	= 0x25;
-public static final int GLX_TRANSPARENT_GREEN_VALUE	= 0x26;
-public static final int GLX_TRANSPARENT_BLUE_VALUE	= 0x27;
-public static final int GLX_TRANSPARENT_ALPHA_VALUE	= 0x28;
-public static final int GLX_DRAWABLE_TYPE		= 0x8010;
-public static final int GLX_RENDER_TYPE			= 0x8011;
-public static final int GLX_X_RENDERABLE		= 0x8012;
-public static final int GLX_FBCONFIG_ID			= 0x8013;
-public static final int GLX_MAX_PBUFFER_WIDTH	= 0x8016;
-public static final int GLX_MAX_PBUFFER_HEIGHT	= 0x8017;
-public static final int GLX_MAX_PBUFFER_PIXELS	= 0x8018;
-public static final int GLX_VISUAL_ID			= 0x800B;
-
-/*
-** Error return values from glXGetConfig.  Success is indicated by
-** a value of 0.
-*/
-public static final int GLX_BAD_SCREEN		= 1;	/* screen # is bad */
-public static final int GLX_BAD_ATTRIBUTE	= 2;	/* attribute to get is bad */
-public static final int GLX_NO_EXTENSION	= 3;	/* no glx extension on server */
-public static final int GLX_BAD_VISUAL		= 4;	/* visual # not known by GLX */
-public static final int GLX_BAD_CONTEXT		= 5;	/* returned only by import_context EXT? */
-public static final int GLX_BAD_VALUE		= 6;	/* returned only by glXSwapIntervalSGI? */
-public static final int GLX_BAD_ENUM		= 7;	/* unused? */
-
-/* FBConfig attribute values */
-
-/*
-** Generic "don't care" value for glX ChooseFBConfig attributes (except
-** GLX_LEVEL)
-*/
-public static final int GLX_DONT_CARE			= 0xFFFFFFFF;
-
-/* GLX_RENDER_TYPE bits */
-public static final int GLX_RGBA_BIT			= 0x00000001;
-public static final int GLX_COLOR_INDEX_BIT		= 0x00000002;
-
-/* GLX_DRAWABLE_TYPE bits */
-public static final int GLX_WINDOW_BIT			= 0x00000001;
-public static final int GLX_PIXMAP_BIT			= 0x00000002;
-public static final int GLX_PBUFFER_BIT			= 0x00000004;
-
-/* GLX_CONFIG_CAVEAT attribute values */
-public static final int GLX_NONE				= 0x8000;
-public static final int GLX_SLOW_CONFIG			= 0x8001;
-public static final int GLX_NON_CONFORMANT_CONFIG	= 0x800D;
-
-/* GLX_X_VISUAL_TYPE attribute values */
-public static final int GLX_TRUE_COLOR			= 0x8002;
-public static final int GLX_DIRECT_COLOR		= 0x8003;
-public static final int GLX_PSEUDO_COLOR		= 0x8004;
-public static final int GLX_STATIC_COLOR		= 0x8005;
-public static final int GLX_GRAY_SCALE			= 0x8006;
-public static final int GLX_STATIC_GRAY			= 0x8007;
-
-/* GLX_TRANSPARENT_TYPE attribute values */
-/* public static final int GLX_NONE			   0x8000 */
-public static final int GLX_TRANSPARENT_RGB		= 0x8008;
-public static final int GLX_TRANSPARENT_INDEX	= 0x8009;
-
-/* glXCreateGLXPbuffer attributes */
-public static final int GLX_PRESERVED_CONTENTS	= 0x801B;
-public static final int GLX_LARGEST_PBUFFER		= 0x801C;
-public static final int GLX_PBUFFER_HEIGHT		= 0x8040;	/* New for GLX 1.3 */
-public static final int GLX_PBUFFER_WIDTH		= 0x8041;	/* New for GLX 1.3 */
-
-/* glXQueryGLXPBuffer attributes */
-public static final int GLX_WIDTH		= 0x801D;
-public static final int GLX_HEIGHT		= 0x801E;
-public static final int GLX_EVENT_MASK	= 0x801F;
-
-/* glXCreateNewContext render_type attribute values */
-public static final int GLX_RGBA_TYPE			= 0x8014;
-public static final int GLX_COLOR_INDEX_TYPE	= 0x8015;
-
-/* glXQueryContext attributes */
-/* public static final int GLX_FBCONFIG_ID		  0x8013 */
-/* public static final int GLX_RENDER_TYPE		  0x8011 */
-public static final int GLX_SCREEN			= 0x800C;
-
-/* glXSelectEvent event mask bits */
-public static final int GLX_PBUFFER_CLOBBER_MASK	= 0x08000000;
-
-/* GLXPbufferClobberEvent event_type values */
-public static final int GLX_DAMAGED			= 0x8020;
-public static final int GLX_SAVED			= 0x8021;
-
-/* GLXPbufferClobberEvent draw_type values */
-public static final int GLX_WINDOW			= 0x8022;
-public static final int GLX_PBUFFER			= 0x8023;
-
-/* GLXPbufferClobberEvent buffer_mask bits */
-public static final int GLX_FRONT_LEFT_BUFFER_BIT	= 0x00000001;
-public static final int GLX_FRONT_RIGHT_BUFFER_BIT	= 0x00000002;
-public static final int GLX_BACK_LEFT_BUFFER_BIT	= 0x00000004;
-public static final int GLX_BACK_RIGHT_BUFFER_BIT	= 0x00000008;
-public static final int GLX_AUX_BUFFERS_BIT		= 0x00000010;
-public static final int GLX_DEPTH_BUFFER_BIT		= 0x00000020;
-public static final int GLX_STENCIL_BUFFER_BIT		= 0x00000040;
-public static final int GLX_ACCUM_BUFFER_BIT		= 0x00000080;
-
-/*
-** Extension return values from glXGetConfig.  These are also
-** accepted as parameter values for glXChooseVisual.
-*/
-
-public static final int GLX_X_VISUAL_TYPE_EXT = 0x22;	/* visual_info extension type */
-public static final int GLX_TRANSPARENT_TYPE_EXT = 0x23;	/* visual_info extension */
-public static final int GLX_TRANSPARENT_INDEX_VALUE_EXT = 0x24;	/* visual_info extension */
-public static final int GLX_TRANSPARENT_RED_VALUE_EXT	= 0x25;	/* visual_info extension */
-public static final int GLX_TRANSPARENT_GREEN_VALUE_EXT = 0x26;	/* visual_info extension */
-public static final int GLX_TRANSPARENT_BLUE_VALUE_EXT	= 0x27;	/* visual_info extension */
-public static final int GLX_TRANSPARENT_ALPHA_VALUE_EXT = 0x28;	/* visual_info extension */
-
-/* Property values for visual_type */
-public static final int GLX_TRUE_COLOR_EXT	= 0x8002;
-public static final int GLX_DIRECT_COLOR_EXT	= 0x8003;
-public static final int GLX_PSEUDO_COLOR_EXT	= 0x8004;
-public static final int GLX_STATIC_COLOR_EXT	= 0x8005;
-public static final int GLX_GRAY_SCALE_EXT	= 0x8006;
-public static final int GLX_STATIC_GRAY_EXT	= 0x8007;
-
-/* Property values for transparent pixel */
-public static final int GLX_NONE_EXT		= 0x8000;
-public static final int GLX_TRANSPARENT_RGB_EXT		= 0x8008;
-public static final int GLX_TRANSPARENT_INDEX_EXT	= 0x8009;
-
-/* Property values for visual_rating */
-public static final int GLX_VISUAL_CAVEAT_EXT		= 0x20;  /* visual_rating extension type */
-public static final int GLX_SLOW_VISUAL_EXT		= 0x8001;
-public static final int GLX_NON_CONFORMANT_VISUAL_EXT	= 0x800D;
-
-/*
-** Names for attributes to glXGetClientString.
-*/
-public static final int GLX_VENDOR		= 0x1;
-public static final int GLX_VERSION		= 0x2;
-public static final int GLX_EXTENSIONS	= 0x3;
-
-/*
-** Names for attributes to glXQueryContextInfoEXT.
-*/
-public static final int GLX_SHARE_CONTEXT_EXT = 0x800A;	/* id of share context */
-public static final int GLX_VISUAL_ID_EXT = 0x800B;	/* id of context's visual */
-public static final int GLX_SCREEN_EXT = 0x800C;	/* screen number */
-
-/*
-* GLX 1.4 
-*/
-public static final int GLX_SAMPLE_BUFFERS = 100000;
-public static final int GLX_SAMPLES = 100001;
-
-public static final native int glXChooseVisual(int dpy, int screen, int[] attribList);
-public static final native void glXCopyContext(int dpy, int src, int dst, int mask);
-public static final native int glXCreateContext(int dpy, XVisualInfo vis, int shareList, boolean direct);
-public static final native int glXCreateGLXPixmap(int dpy, XVisualInfo vis, int pixmap);
-public static final native void glXDestroyContext(int dpy, int ctx);
-public static final native void glXDestroyGLXPixmap(int dpy, int pix);
-public static final native int glXGetConfig(int dpy, XVisualInfo vis, int attrib, int[] value);
-public static final native int glXGetCurrentContext();
-public static final native int glXGetCurrentDrawable();
-public static final native boolean glXIsDirect(int dpy, int ctx);
-public static final native boolean glXMakeCurrent(int dpy, int drawable, int ctx);
-public static final native boolean glXQueryExtension(int dpy, int[] errorBase, int[] eventBase);
-public static final native boolean glXQueryVersion(int dpy, int[] major, int[] minor);
-public static final native void glXSwapBuffers(int dpy, int drawable);
-public static final native void glXUseXFont(int font, int first, int count, int listBase);
-public static final native void glXWaitGL();
-public static final native void glXWaitX();
-public static final native int glXGetClientString(int dpy, int name);
-public static final native int glXQueryServerString(int dpy, int screen, int name);
-public static final native int glXQueryExtensionsString(int dpy, int screen);
-public static final native void memmove(XVisualInfo dest, int src, int size);
-}
diff --git a/bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/internal/opengl/gtk/XVisualInfo.java b/bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/internal/opengl/gtk/XVisualInfo.java
deleted file mode 100755
index 8f39696..0000000
--- a/bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/internal/opengl/gtk/XVisualInfo.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.internal.opengl.gtk;
-
- 
-public class XVisualInfo {
-	public int visual;
-	public int visualid;
-	public int screen;
-	public int depth;
-	public int cclass;
-	public int red_mask, green_mask, blue_mask;
-	public int colormap_size;
-	public int bits_per_rgb;
-	public static final int sizeof = 40;
-}
diff --git a/bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/opengl/GLCanvas.java b/bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/opengl/GLCanvas.java
deleted file mode 100644
index 113f3ed..0000000
--- a/bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/opengl/GLCanvas.java
+++ /dev/null
@@ -1,257 +0,0 @@
-package org.eclipse.swt.opengl;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.internal.gtk.*;
-import org.eclipse.swt.internal.opengl.gtk.*;
-import org.eclipse.opengl.*;
-
-/**
- * GLCanvas is a widget capable of displaying OpenGL content.
- */
-
-public class GLCanvas extends Canvas {
-	int /*long*/ xdisplay;
-	int /*long*/ xid;
-	int /*long*/ context;
-	int /*long*/ glWindow;
-	XVisualInfo vinfo;
-
-	private static final int MAX_ATTRIBUTES = 32;
-
-/**
- * Create a GLCanvas widget using the attributes described in the GLData
- * object provided.
- *
- * @param parent a composite widget
- * @param style the bitwise OR'ing of widget styles
- * @param data the requested attributes of the GLCanvas
- *
- * @exception IllegalArgumentException
- * <ul><li>ERROR_NULL_ARGUMENT when the data is null
- *     <li>ERROR_UNSUPPORTED_DEPTH when the requested attributes cannot be provided</ul> 
- * @exception SWTException
- * <ul><li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread
- *     <li>ERROR_CANNOT_CREATE_OBJECT when failed to create OLE Object
- *     <li>ERROR_CANNOT_OPEN_FILE when failed to open file
- *     <li>ERROR_INTERFACE_NOT_FOUND when unable to create callbacks for OLE Interfaces
- *     <li>ERROR_INVALID_CLASSID
- * </ul>
- */
-public GLCanvas (Composite parent, int style, GLData data) {
-	super (parent, style);	
-	if (data == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
-	int glxAttrib [] = new int [MAX_ATTRIBUTES];
-	int pos = 0;
-
-	OS.gtk_widget_realize (handle);
-	int /*long*/ window = OS.GTK_WIDGET_WINDOW (handle);
-	xdisplay = OS.gdk_x11_drawable_get_xdisplay (window);
-	int xscreen = OS.XDefaultScreen (xdisplay);
-
-	glxAttrib [pos++] = GLX.GLX_RGBA;
-	if (data.doubleBuffer) glxAttrib [pos++] = GLX.GLX_DOUBLEBUFFER;
-	if (data.stereo) glxAttrib [pos++] = GLX.GLX_STEREO;
-	if (data.redSize > 0) {
-		glxAttrib [pos++] = GLX.GLX_RED_SIZE;
-		glxAttrib [pos++] = data.redSize;
-	}
-	if (data.greenSize > 0) {
-		glxAttrib [pos++] = GLX.GLX_GREEN_SIZE;
-		glxAttrib [pos++] = data.greenSize;
-	}
-	if (data.blueSize > 0) {
-		glxAttrib [pos++] = GLX.GLX_BLUE_SIZE;
-		glxAttrib [pos++] = data.blueSize;
-	}
-	if (data.alphaSize > 0) {
-		glxAttrib [pos++] = GLX.GLX_ALPHA_SIZE;
-		glxAttrib [pos++] = data.alphaSize;
-	}
-	if (data.depthSize > 0) {
-		glxAttrib [pos++] = GLX.GLX_DEPTH_SIZE;
-		glxAttrib [pos++] = data.depthSize;
-	}
-	if (data.stencilSize > 0) {
-		glxAttrib [pos++] = GLX.GLX_STENCIL_SIZE;
-		glxAttrib [pos++] = data.stencilSize;
-	}
-	if (data.accumRedSize > 0) {
-		glxAttrib [pos++] = GLX.GLX_ACCUM_RED_SIZE;
-		glxAttrib [pos++] = data.accumRedSize;
-	}
-	if (data.accumGreenSize > 0) {
-		glxAttrib [pos++] = GLX.GLX_ACCUM_GREEN_SIZE;
-		glxAttrib [pos++] = data.accumGreenSize;
-	}
-	if (data.accumBlueSize > 0) {
-		glxAttrib [pos++] = GLX.GLX_ACCUM_BLUE_SIZE;
-		glxAttrib [pos++] = data.accumBlueSize;
-	}
-	if (data.accumAlphaSize > 0) {
-		glxAttrib [pos++] = GLX.GLX_ACCUM_ALPHA_SIZE;
-		glxAttrib [pos++] = data.accumAlphaSize;
-	}
-	if (data.sampleBuffers > 0) {
-		glxAttrib [pos++] = GLX.GLX_SAMPLE_BUFFERS;
-		glxAttrib [pos++] = data.sampleBuffers;
-	}
-	if (data.samples > 0) {
-		glxAttrib [pos++] = GLX.GLX_SAMPLES;
-		glxAttrib [pos++] = data.samples;
-	}
-	glxAttrib [pos++] = 0;
-	int infoPtr = GLX.glXChooseVisual (xdisplay, xscreen, glxAttrib);
-	if (infoPtr == 0) SWT.error (SWT.ERROR_UNSUPPORTED_DEPTH);
-	vinfo = new XVisualInfo ();
-	GLX.memmove (vinfo, infoPtr, XVisualInfo.sizeof);
-	OS.XFree (infoPtr);
-	int /*long*/ screen = OS.gdk_screen_get_default ();
-	int /*long*/ gdkvisual = OS.gdk_x11_screen_lookup_visual (screen, vinfo.visualid);
-	//context = GLX.glXCreateContext (xdisplay, info, share == null ? 0 : share.context, true);
-	context = GLX.glXCreateContext (xdisplay, vinfo, 0, true);
-	if (context == 0) SWT.error (SWT.ERROR_NO_HANDLES);
-	GdkWindowAttr attrs = new GdkWindowAttr ();
-	attrs.width = 1;
-	attrs.height = 1;
-	attrs.event_mask = OS.GDK_KEY_PRESS_MASK | OS.GDK_KEY_RELEASE_MASK |
-		OS.GDK_FOCUS_CHANGE_MASK | OS.GDK_POINTER_MOTION_MASK |
-		OS.GDK_BUTTON_PRESS_MASK | OS.GDK_BUTTON_RELEASE_MASK |
-		OS.GDK_ENTER_NOTIFY_MASK | OS.GDK_LEAVE_NOTIFY_MASK |
-		OS.GDK_EXPOSURE_MASK | OS.GDK_VISIBILITY_NOTIFY_MASK;
-	attrs.window_type = OS.GDK_WINDOW_CHILD;
-	attrs.visual = gdkvisual;
-	glWindow = OS.gdk_window_new (window, attrs, OS.GDK_WA_VISUAL);
-	OS.gdk_window_set_user_data (glWindow, handle);
-	xid = OS.gdk_x11_drawable_get_xid (glWindow);
-	OS.gdk_window_show (glWindow);
-
-	Listener listener = new Listener () {
-		public void handleEvent (Event event) {
-			switch (event.type) {
-			case SWT.Paint:
-				/**
-				* Bug in MESA.  MESA does some nasty sort of polling to try
-				* and ensure that their buffer sizes match the current X state.
-				* This state can be updated using glViewport().
-				* FIXME: There has to be a better way of doing this.
-				*/
-				int [] viewport = new int [4];
-				GL.glGetIntegerv (GL.GL_VIEWPORT, viewport);
-				GL.glViewport (viewport [0],viewport [1],viewport [2],viewport [3]);
-				break;
-			case SWT.Resize:
-				Rectangle clientArea = getClientArea();
-				OS.gdk_window_move (glWindow, clientArea.x, clientArea.y);
-				OS.gdk_window_resize (glWindow, clientArea.width, clientArea.height);
-				break;
-			case SWT.Dispose:
-				if (context != 0) {
-					if (GLX.glXGetCurrentContext () == context) {
-						GLX.glXMakeCurrent(xdisplay, 0, 0);
-					}
-					GLX.glXDestroyContext (xdisplay, context);
-					context = 0;
-				}
-				if (glWindow != 0) {
-					OS.gdk_window_destroy (glWindow);
-					glWindow = 0;
-				}
-				break;
-			}
-		}
-	};
-	addListener (SWT.Resize, listener);
-	addListener (SWT.Paint, listener);
-	addListener (SWT.Dispose, listener);
-}
-
-/**
- * Returns a GLData object describing the created context.
- *  
- * @return GLData description of the OpenGL context attributes
- * @exception SWTException <ul>
- *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
-public GLData getGLData () {
-	checkWidget ();
-	GLData data = new GLData ();
-	int [] value = new int [1];
-	GLX.glXGetConfig (xdisplay, vinfo, GLX.GLX_DOUBLEBUFFER, value);
-	data.doubleBuffer = value [0] != 0;
-	GLX.glXGetConfig (xdisplay, vinfo, GLX.GLX_STEREO, value);
-	data.stereo = value [0] != 0;
-	GLX.glXGetConfig (xdisplay, vinfo, GLX.GLX_RED_SIZE, value);
-	data.redSize = value [0];
-	GLX.glXGetConfig (xdisplay, vinfo, GLX.GLX_GREEN_SIZE, value);
-	data.greenSize = value [0];
-	GLX.glXGetConfig (xdisplay, vinfo, GLX.GLX_BLUE_SIZE, value);
-	data.blueSize = value [0];
-	GLX.glXGetConfig (xdisplay, vinfo, GLX.GLX_ALPHA_SIZE, value);
-	data.alphaSize = value [0];
-	GLX.glXGetConfig (xdisplay, vinfo, GLX.GLX_DEPTH_SIZE, value);
-	data.depthSize = value [0];
-	GLX.glXGetConfig (xdisplay, vinfo, GLX.GLX_STENCIL_SIZE, value);
-	data.stencilSize = value [0];
-	GLX.glXGetConfig (xdisplay, vinfo, GLX.GLX_ACCUM_RED_SIZE, value);
-	data.accumRedSize = value [0];
-	GLX.glXGetConfig (xdisplay, vinfo, GLX.GLX_ACCUM_GREEN_SIZE, value);
-	data.accumGreenSize = value [0];
-	GLX.glXGetConfig (xdisplay, vinfo, GLX.GLX_ACCUM_BLUE_SIZE, value);
-	data.accumBlueSize = value [0];
-	GLX.glXGetConfig (xdisplay, vinfo, GLX.GLX_ACCUM_ALPHA_SIZE, value);
-	data.accumAlphaSize = value [0];
-	GLX.glXGetConfig (xdisplay, vinfo, GLX.GLX_SAMPLE_BUFFERS, value);
-	data.sampleBuffers = value [0];
-	GLX.glXGetConfig (xdisplay, vinfo, GLX.GLX_SAMPLES, value);
-	data.samples = value [0];
-	return data;
-}
-
-/**
- * Returns a boolean indicating whether the receiver's OpenGL context
- * is the current context.
- *  
- * @return true if the receiver holds the current OpenGL context,
- * false otherwise
- * @exception SWTException <ul>
- *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
-public boolean isCurrent () {
-	checkWidget ();
-	return GLX.glXGetCurrentContext () == context;
-}
-
-/**
- * Sets the OpenGL context associated with this GLCanvas to be the
- * current GL context.
- * 
- * @exception SWTException <ul>
- *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
-public void setCurrent () {
-	checkWidget ();
-	if (GLX.glXGetCurrentContext () == context) return;
-	GLX.glXMakeCurrent (xdisplay, xid, context);
-}
-
-/**
- * Swaps the front and back color buffers.
- * 
- * @exception SWTException <ul>
- *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
-public void swapBuffers () {
-	checkWidget ();
-	GLX.glXSwapBuffers (xdisplay, xid);
-}
-}
diff --git a/bundles/org.eclipse.swt.opengl/motif/library/build.sh b/bundles/org.eclipse.swt.opengl/motif/library/build.sh
deleted file mode 100644
index afec19d..0000000
--- a/bundles/org.eclipse.swt.opengl/motif/library/build.sh
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/bin/sh
-#*******************************************************************************
-# 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
-#     Kevin Cornell (Rational Software Corporation)
-#     Tom Tromey (Red Hat, Inc.)
-#     Sridhar Bidigalu (ICS)
-#*******************************************************************************
-
-cd `dirname $0`
-
-# Determine the operating system being built
-makefile=""
-OS=`uname -s`
-MODEL=`uname -m`
-
-case $OS in
-	"AIX")
-		JAVA_HOME=/bluebird/teamswt/swt-builddir/aixj9
-		MOTIF_HOME=/usr
-		CDE_HOME=/usr/dt
-		makefile="make_aix.mak"
-		echo "Building AIX version of SWT"
-		;;
-	"Linux")
-		JAVA_HOME=/bluebird/teamswt/swt-builddir/IBMJava2-141
-		MOTIF_HOME=/bluebird/teamswt/swt-builddir/motif21
-		QT_HOME=$QTDIR
-		makefile="make_linux.mak"
-		echo "Building Linux version of SWT"
-		;;
-	"SunOS")
-		JAVA_HOME=/usr/java
-		MOTIF_HOME=/usr/dt
-		CDE_HOME=/usr/dt
-		PATH=/opt/SUNWspro/bin:$PATH
-		export PATH		
-		makefile="make_solaris.mak"
-		echo "Building Solaris version of SWT"
-		;;
-	"HP-UX")
-		JAVA_HOME=/opt/jdk14101
-		MOTIF_HOME=/usr
-		CDE_HOME=/usr/dt
-		case $MODEL in
-			"ia64")
-				makefile="make_hpux_ia64.mak"
-				echo "Building HPUX ia64 version of SWT"
-				;;
-			*)
-				makefile="make_hpux_PA_RISC.mak"
-				echo "Building HPUX risc version of SWT"
-				;;
-		esac
-		;;
-
-	*)
-		echo "Unknown OS -- build aborted"
-		;;
-esac
-
-export JAVA_HOME MOTIF_HOME CDE_HOME QT_HOME
-
-make -f $makefile $1 $2 $3 $4
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt.opengl/motif/library/glx.c b/bundles/org.eclipse.swt.opengl/motif/library/glx.c
deleted file mode 100644
index df8e102..0000000
--- a/bundles/org.eclipse.swt.opengl/motif/library/glx.c
+++ /dev/null
@@ -1,232 +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
- *******************************************************************************/
-#include <GL/glx.h>
-#include "swt.h"
-#include "structs.h"
-
-#define XGL_NATIVE(func) Java_org_eclipse_swt_opengl_internal_motif_XGL_##func
-
-JNIEXPORT jint JNICALL XGL_NATIVE(glXChooseVisual)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
-{
-	jint *lparg2=NULL;
-	jint rc;
-
-	DEBUG_CALL("glXChooseVisual\n")
-
-	if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
-	rc = (jint)glXChooseVisual((Display *)arg0, arg1, (int *)lparg2);
-	if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	return rc;
-}
-
-JNIEXPORT void JNICALL XGL_NATIVE(glXCopyContext)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
-{
-	DEBUG_CALL("glXCopyContext\n")
-
-	glXCopyContext((Display *)arg0, (GLXContext)arg1, (GLXContext)arg2, arg3);
-}
-
-JNIEXPORT jint JNICALL XGL_NATIVE(glXCreateContext)
-	(JNIEnv *env, jclass that, jint arg0, jobject arg1, jint arg2, jboolean arg3)
-{
-	XVisualInfo _arg1, *lparg1=NULL;
-	jint rc;
-
-	DEBUG_CALL("glXCreateContext\n")
-
-	if (arg1) lparg1 = getXVisualInfoFields(env, arg1, &_arg1);
-	rc = (jint)glXCreateContext((Display *)arg0, lparg1, (GLXContext)arg2, arg3);
-	if (arg1) setXVisualInfoFields(env, arg1, lparg1);
-	return rc;
-}
-
-JNIEXPORT jint JNICALL XGL_NATIVE(glXCreateGLXPixmap)
-	(JNIEnv *env, jclass that, jint arg0, jobject arg1, jint arg2)
-{
-	XVisualInfo _arg1, *lparg1=NULL;
-	jint rc;
-
-	DEBUG_CALL("glXCreateGLXPixmap\n")
-
-	if (arg1) lparg1 = getXVisualInfoFields(env, arg1, &_arg1);
-	rc = (jint)glXCreateGLXPixmap((Display *)arg0, lparg1, arg2);
-	if (arg1) setXVisualInfoFields(env, arg1, lparg1);
-	return rc;
-}
-
-JNIEXPORT void JNICALL XGL_NATIVE(glXDestroyContext)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	DEBUG_CALL("glXDestroyContext\n")
-
-	glXDestroyContext((Display *)arg0, (GLXContext)arg1);
-}
-
-JNIEXPORT void JNICALL XGL_NATIVE(glXDestroyGLXPixmap)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	DEBUG_CALL("glXDestroyGLXPixmap\n")
-
-	glXDestroyGLXPixmap((Display *)arg0, arg1);
-}
-
-JNIEXPORT jint JNICALL XGL_NATIVE(glXGetClientString)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	DEBUG_CALL("glXGetClientString\n")
-
-	return (jint)glXGetClientString((Display *)arg0, arg1);
-}
-
-JNIEXPORT jint JNICALL XGL_NATIVE(glXGetConfig)
-	(JNIEnv *env, jclass that, jint arg0, jobject arg1, jint arg2, jintArray arg3)
-{
-	XVisualInfo _arg1, *lparg1=NULL;
-	jint *lparg3=NULL;
-	jint rc;
-
-	DEBUG_CALL("glXGetConfig\n")
-
-	if (arg1) lparg1 = getXVisualInfoFields(env, arg1, &_arg1);
-	if (arg3) lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL);
-	rc = (jint)glXGetConfig((Display *)arg0, lparg1, arg2, (int *)lparg3);
-	if (arg1) setXVisualInfoFields(env, arg1, lparg1);
-	if (arg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
-	return rc;
-}
-
-JNIEXPORT jint JNICALL XGL_NATIVE(glXGetCurrentContext)
-	(JNIEnv *env, jclass that)
-{
-	DEBUG_CALL("glXGetCurrentContext\n")
-
-	return (jint)glXGetCurrentContext();
-}
-
-JNIEXPORT jint JNICALL XGL_NATIVE(glXGetCurrentDrawable)
-	(JNIEnv *env, jclass that)
-{
-	DEBUG_CALL("glXGetCurrentDrawable\n")
-
-	return (jint)glXGetCurrentDrawable();
-}
-
-JNIEXPORT jboolean JNICALL XGL_NATIVE(glXIsDirect)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	DEBUG_CALL("glXIsDirect\n")
-
-	return (jboolean)glXIsDirect((Display *)arg0, (GLXContext)arg1);
-}
-
-JNIEXPORT jboolean JNICALL XGL_NATIVE(glXMakeCurrent)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	DEBUG_CALL("glXMakeCurrent\n")
-
-	return (jboolean)glXMakeCurrent((Display *)arg0, (GLXDrawable)arg1, (GLXContext)arg2);
-}
-
-JNIEXPORT jboolean JNICALL XGL_NATIVE(glXQueryExtension)
-	(JNIEnv *env, jclass that, jint arg0, jintArray arg1, jintArray arg2)
-{
-	jint *lparg1=NULL;
-	jint *lparg2=NULL;
-	jboolean rc;
-
-	DEBUG_CALL("glXQueryExtension\n")
-
-	if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL);
-	if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
-	rc = (jboolean)glXQueryExtension((Display *)arg0, (int *)lparg1, (int *)lparg2);
-	if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
-	if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	return rc;
-}
-
-JNIEXPORT jint JNICALL XGL_NATIVE(glXQueryExtensionsString)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	DEBUG_CALL("glXQueryExtensionsString\n")
-
-	return (jint)glXQueryExtensionsString((Display *)arg0, arg1);
-}
-
-JNIEXPORT jint JNICALL XGL_NATIVE(glXQueryServerString)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	DEBUG_CALL("glXQueryServerString\n")
-
-	return (jint)glXQueryServerString((Display *)arg0, arg1, arg2);
-}
-
-JNIEXPORT jboolean JNICALL XGL_NATIVE(glXQueryVersion)
-	(JNIEnv *env, jclass that, jint arg0, jintArray arg1, jintArray arg2)
-{
-	jint *lparg1=NULL;
-	jint *lparg2=NULL;
-	jboolean rc;
-
-	DEBUG_CALL("glXQueryVersion\n")
-
-	if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL);
-	if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
-	rc = (jboolean)glXQueryVersion((Display *)arg0, (int *)lparg1, (int *)lparg2);
-	if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
-	if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
-	return rc;
-}
-
-JNIEXPORT void JNICALL XGL_NATIVE(glXSwapBuffers)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	DEBUG_CALL("glXSwapBuffers\n")
-
-	glXSwapBuffers((Display *)arg0, (GLXDrawable)arg1);
-}
-
-JNIEXPORT void JNICALL XGL_NATIVE(glXUseXFont)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
-{
-	DEBUG_CALL("glXUseXFont\n")
-
-	glXUseXFont(arg0, arg1, arg2, arg3);
-}
-
-JNIEXPORT void JNICALL XGL_NATIVE(glXWaitGL)
-	(JNIEnv *env, jclass that)
-{
-	DEBUG_CALL("glXWaitGL\n")
-
-	glXWaitGL();
-}
-
-JNIEXPORT void JNICALL XGL_NATIVE(glXWaitX)
-	(JNIEnv *env, jclass that)
-{
-	DEBUG_CALL("glXWaitX\n")
-
-	glXWaitX();
-}
-
-JNIEXPORT void JNICALL XGL_NATIVE(memmove__Lorg_eclipse_swt_opengl_internal_motif_XVisualInfo_2II)
-	(JNIEnv *env, jclass that, jobject arg0, jint arg1, jint arg2)
-{
-	XVisualInfo _arg0, *lparg0=NULL;
-
-	DEBUG_CALL("memmove__Lorg_eclipse_swt_opengl_internal_motif_XVisualInfo_2II\n")
-
-	if (arg0) lparg0 = &_arg0;
-	memmove((void *)lparg0, (const void *)arg1, (size_t)arg2);
-	if (arg0) setXVisualInfoFields(env, arg0, lparg0);
-}
diff --git a/bundles/org.eclipse.swt.opengl/motif/library/make_aix.mak b/bundles/org.eclipse.swt.opengl/motif/library/make_aix.mak
deleted file mode 100644
index 78b7b7a..0000000
--- a/bundles/org.eclipse.swt.opengl/motif/library/make_aix.mak
+++ /dev/null
@@ -1,40 +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
-#*******************************************************************************
-
-# Define the installation directories for various products.
-#    JAVA_HOME  - The JDK > 1.3
-JAVA_HOME   = /usr/java131
-
-# Define the various shared libraries to be made.
-SWT_PREFIX   = swt
-WS_PREFIX    = motif
-SWT_DLL      = lib$(SWT_PREFIX)-$(WS_PREFIX).so
-SWT_OBJ      = swt.o gl.o glu.o structs.o glx.o
-SWT_LIB      = -G -bnoentry -lc_r -lC_r -lm -bexpall -lMrm -lX11 -lXext -liconv -lGL -lGLU
-
-#
-# The following CFLAGS are for compiling the SWT OpenGL library.
-#
-CFLAGS = -O -s \
-	-DAIX \
-	-DNO_XINERAMA_EXTENSIONS \
-	-q mbcs -qlanglvl=extended -qmaxmem=8192 \
-	-I$(JAVA_HOME)/include
-
-all: make_swt
-
-make_swt: $(SWT_DLL)
-
-$(SWT_DLL): $(SWT_OBJ)
-	ld $(SWT_LIB) -o $(SWT_DLL) $(SWT_OBJ)
-
-clean:
-	rm -f *.o *.so *.a
diff --git a/bundles/org.eclipse.swt.opengl/motif/library/make_hpux.mak b/bundles/org.eclipse.swt.opengl/motif/library/make_hpux.mak
deleted file mode 100644
index e0afb28..0000000
--- a/bundles/org.eclipse.swt.opengl/motif/library/make_hpux.mak
+++ /dev/null
@@ -1,44 +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
-#*******************************************************************************
-
-# Define the installation directories for various products.
-JAVA_HOME  = /opt/java1.3
-
-# Define the various shared libraries to be made.
-SWT_PREFIX   = gl
-WS_PREFIX    = motif
-SWT_DLL      = lib$(SWT_PREFIX)-$(WS_PREFIX).sl
-SWT_OBJ      = swt.o gl.o glu.o structs.o glx.o
-SWT_LIB      = -L/usr/lib -L/opt/graphics/OpenGL/lib -G -lGL -lGLU -lc -ldld -lm
-
-#
-# The following CFLAGS are for compiling the SWT OpenGL library.
-#
-# Note:
-#   The flag -xarch=generic ensure the compiled modules will be targeted
-#   for 32-bit architectures. If this flag is not
-#
-CFLAGS = -Ae +z \
-	-DNO_XINERAMA_EXTENSIONS \
-	-D_HPUX -D_POSIX_C_SOURCE=199506L \
-	-I./ \
-	-I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/hp-ux \
-	-I/opt/graphics/OpenGL/include
-
-all: make_swt
-
-make_swt: $(SWT_DLL)
-
-$(SWT_DLL): $(SWT_OBJ)
-	ld -b -z -o $@ $(SWT_OBJ) $(SWT_LIB)
-
-clean:
-	rm -f *.sl *.o
diff --git a/bundles/org.eclipse.swt.opengl/motif/library/make_linux.mak b/bundles/org.eclipse.swt.opengl/motif/library/make_linux.mak
deleted file mode 100644
index 2c995c0..0000000
--- a/bundles/org.eclipse.swt.opengl/motif/library/make_linux.mak
+++ /dev/null
@@ -1,38 +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
-#*******************************************************************************
-
-# Define the installation directories for various products.
-JAVA_HOME   = /bluebird/teamswt/swt-builddir/ive/bin
-
-
-# Define the various shared libraries to be made.
-SWT_PREFIX   = gl
-WS_PREFIX    = motif
-SWT_DLL      = lib$(SWT_PREFIX)-$(WS_PREFIX).so
-SWT_OBJ      = swt.o gl.o glu.o structs.o glx.o
-SWT_LIB      = -shared -L/usr/X11R6/lib -lGL -lGLU -lm
-
-#
-# The following CFLAGS are for compiling the SWT OpenGL library.
-#
-CFLAGS = -O -s \
-	-I./ \
-	-I$(JAVA_HOME)/include
-
-all: make_swt
-
-make_swt: $(SWT_DLL)
-
-$(SWT_DLL): $(SWT_OBJ)
-	ld -o $@ $(SWT_OBJ) $(SWT_LIB)
-
-clean:
-	rm -f *.so *.o
diff --git a/bundles/org.eclipse.swt.opengl/motif/library/make_solaris.mak b/bundles/org.eclipse.swt.opengl/motif/library/make_solaris.mak
deleted file mode 100644
index c9510b7..0000000
--- a/bundles/org.eclipse.swt.opengl/motif/library/make_solaris.mak
+++ /dev/null
@@ -1,45 +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
-#*******************************************************************************
-
-# Define the installation directories for various products.
-JAVA_HOME   = /bluebird/teamswt/swt-builddir/ive/bin
-
-# Define the various shared libraries to be made.
-SWT_PREFIX   = gl
-WS_PREFIX    = motif
-SWT_DLL      = lib$(SWT_PREFIX)-$(WS_PREFIX).so
-SWT_OBJ      = swt.o gl.o glu.o structs.o glx.o
-SWT_LIB      = -G -L/usr/lib -lm -lGL -lGLU
-
-#
-# The following CFLAGS are for compiling the SWT OpenGL library.
-#
-# Note:
-#   The flag -xarch=generic ensure the compiled modules will be targeted
-#   for 32-bit architectures.
-#
-CFLAGS = -O -s \
-	-xarch=generic \
-	-KPIC \
-	-I./ \
-	-I$(JAVA_HOME)/include
-
-all: make_swt
-
-make_swt: $(SWT_DLL)
-
-$(SWT_DLL): $(SWT_OBJ)
-	ld -o $@ $(SWT_OBJ) $(SWT_LIB)
-
-clean:
-	rm -f *.so *.o
-
-
diff --git a/bundles/org.eclipse.swt.opengl/motif/library/structs.c b/bundles/org.eclipse.swt.opengl/motif/library/structs.c
deleted file mode 100644
index f11d22d..0000000
--- a/bundles/org.eclipse.swt.opengl/motif/library/structs.c
+++ /dev/null
@@ -1,73 +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
- *******************************************************************************/
-#include <X11/X.h>
-#include <X11/Xlib.h>
-#include "swt.h"
-#include "structs.h"
-
-typedef struct XVisualInfo_FID_CACHE {
-	int cached;
-	jclass clazz;
-	jfieldID visual, visualid, screen, depth, cclass, red_mask, green_mask, blue_mask, colormap_size, bits_per_rgb;
-} XVisualInfo_FID_CACHE;
-typedef XVisualInfo_FID_CACHE *PXVisualInfo_FID_CACHE;
-
-XVisualInfo_FID_CACHE XVisualInfoFc;
-
-void cacheXVisualInfoFids(JNIEnv *env, jobject lpObject, PXVisualInfo_FID_CACHE lpCache)
-{
-	if (lpCache->cached) return;
-	lpCache->clazz = (*env)->GetObjectClass(env, lpObject);
-	lpCache->visual = (*env)->GetFieldID(env, lpCache->clazz, "visual", "I");
-	lpCache->visualid = (*env)->GetFieldID(env, lpCache->clazz, "visualid", "I");
-	lpCache->screen = (*env)->GetFieldID(env, lpCache->clazz, "screen", "I");
-	lpCache->depth = (*env)->GetFieldID(env, lpCache->clazz, "depth", "I");
-	lpCache->cclass = (*env)->GetFieldID(env, lpCache->clazz, "cclass", "I");
-	lpCache->red_mask = (*env)->GetFieldID(env, lpCache->clazz, "red_mask", "I");
-	lpCache->green_mask = (*env)->GetFieldID(env, lpCache->clazz, "green_mask", "I");
-	lpCache->blue_mask = (*env)->GetFieldID(env, lpCache->clazz, "blue_mask", "I");
-	lpCache->colormap_size = (*env)->GetFieldID(env, lpCache->clazz, "colormap_size", "I");
-	lpCache->bits_per_rgb = (*env)->GetFieldID(env, lpCache->clazz, "bits_per_rgb", "I");
-	lpCache->cached = 1;
-}
-
-XVisualInfo *getXVisualInfoFields(JNIEnv *env, jobject lpObject, XVisualInfo *lpStruct)
-{
-	PXVisualInfo_FID_CACHE lpCache = &XVisualInfoFc;
-	if (!lpCache->cached) cacheXVisualInfoFids(env, lpObject, lpCache);
-	lpStruct->visual = (Visual *)(*env)->GetIntField(env, lpObject, lpCache->visual);
-	lpStruct->visualid = (*env)->GetIntField(env, lpObject, lpCache->visualid);
-	lpStruct->screen = (*env)->GetIntField(env, lpObject, lpCache->screen);
-	lpStruct->depth = (*env)->GetIntField(env, lpObject, lpCache->depth);
-	lpStruct->class = (*env)->GetIntField(env, lpObject, lpCache->cclass);
-	lpStruct->red_mask = (*env)->GetIntField(env, lpObject, lpCache->red_mask);
-	lpStruct->green_mask = (*env)->GetIntField(env, lpObject, lpCache->green_mask);
-	lpStruct->blue_mask = (*env)->GetIntField(env, lpObject, lpCache->blue_mask);
-	lpStruct->colormap_size = (*env)->GetIntField(env, lpObject, lpCache->colormap_size);
-	lpStruct->bits_per_rgb = (*env)->GetIntField(env, lpObject, lpCache->bits_per_rgb);
-	return lpStruct;
-}
-
-void setXVisualInfoFields(JNIEnv *env, jobject lpObject, XVisualInfo *lpStruct)
-{
-	PXVisualInfo_FID_CACHE lpCache = &XVisualInfoFc;
-	if (!lpCache->cached) cacheXVisualInfoFids(env, lpObject, lpCache);
-	(*env)->SetIntField(env, lpObject, lpCache->visual, (jint)lpStruct->visual);
-	(*env)->SetIntField(env, lpObject, lpCache->visualid, (jint)lpStruct->visualid);
-	(*env)->SetIntField(env, lpObject, lpCache->screen, (jint)lpStruct->screen);
-	(*env)->SetIntField(env, lpObject, lpCache->depth, (jint)lpStruct->depth);
-	(*env)->SetIntField(env, lpObject, lpCache->cclass, (jint)lpStruct->class);
-	(*env)->SetIntField(env, lpObject, lpCache->red_mask, (jint)lpStruct->red_mask);
-	(*env)->SetIntField(env, lpObject, lpCache->green_mask, (jint)lpStruct->green_mask);
-	(*env)->SetIntField(env, lpObject, lpCache->blue_mask, (jint)lpStruct->blue_mask);
-	(*env)->SetIntField(env, lpObject, lpCache->colormap_size, (jint)lpStruct->colormap_size);
-	(*env)->SetIntField(env, lpObject, lpCache->bits_per_rgb, (jint)lpStruct->bits_per_rgb);
-}
diff --git a/bundles/org.eclipse.swt.opengl/motif/library/structs.h b/bundles/org.eclipse.swt.opengl/motif/library/structs.h
deleted file mode 100644
index 5d98fdd..0000000
--- a/bundles/org.eclipse.swt.opengl/motif/library/structs.h
+++ /dev/null
@@ -1,16 +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
- *******************************************************************************/
-#include <X11/X.h>
-#include <X11/Xutil.h>
-
-XVisualInfo *getXVisualInfoFields(JNIEnv *env, jobject lpObject, XVisualInfo *lpStruct);
-void setXVisualInfoFields(JNIEnv *env, jobject lpObject, XVisualInfo *lpStruct);
-
diff --git a/bundles/org.eclipse.swt.opengl/motif/org/eclipse/swt/opengl/GLContext.java b/bundles/org.eclipse.swt.opengl/motif/org/eclipse/swt/opengl/GLContext.java
deleted file mode 100644
index 29df45c..0000000
--- a/bundles/org.eclipse.swt.opengl/motif/org/eclipse/swt/opengl/GLContext.java
+++ /dev/null
@@ -1,303 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.opengl;
-
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.internal.motif.*;
-import org.eclipse.swt.opengl.internal.motif.*;
-
-/**
- * Instances of <code>GLContext</code> are used to draw on swt <code>Drawable</code>s 
- * through invocations of provided OpenGL functions.
- * <p>
- * Application code must explicitly invoke the <code>GLContext.dispose ()</code> 
- * method to release the operating system resources managed by each instance
- * when those instances are no longer required. This is <em>particularly</em>
- * important on Windows95 and Windows98 where the operating system has a limited
- * number of device contexts available.
- * </p>
- */
-public class GLContext {
-	int handle;
-	int gc;
-	GCData data;
-	Drawable drawable;
-	int selectBufferPtr = 0;
-
-	static final int MSB_FIRST = 1;
-	static final int LSB_FIRST = 2;
-
-	/**
-	 * Constructs a new instance of this class which has been
-	 * configured to draw on the specified drawable.
-	 * <p>
-	 * You must dispose the <code>GLContext</code> when it is no longer required. 
-	 * </p>
-	 * 
-	 * @param drawable the drawable to draw on
-	 * @exception IllegalArgumentException <ul>
-	 *    <li>ERROR_NULL_ARGUMENT - if the drawable is null</li>
-	 * </ul>
-	 * @exception SWTError <ul>
-	 *    <li>ERROR_NO_HANDLES if a handle could not be obtained for gc creation</li>
-	 *    <li>ERROR_UNSUPPORTED_DEPTH - if the current display depth is not supported</li>
-	 * </ul>
-	 */
-	public GLContext (Drawable drawable) {
-		if (drawable == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
-		this.drawable = drawable;
-		this.data = new GCData ();
-		gc = drawable.internal_new_GC (data);
-		if (gc == 0) SWT.error (SWT.ERROR_NO_HANDLES);
-		int xDisplay = data.display;
-		int screen = OS.XDefaultScreen (xDisplay);
-		int depth = OS.XDefaultDepthOfScreen (OS.XDefaultScreenOfDisplay (xDisplay));
-		int attrib [] = {
-			XGL.GLX_LEVEL,
-			0,
-			XGL.GLX_RGBA,
-			XGL.GLX_DOUBLEBUFFER,
-//			XGL.GLX_DEPTH_SIZE,
-//			depth,
-			0
-		};
-		int infoPtr = XGL.glXChooseVisual (xDisplay, screen, attrib);
-		if (infoPtr == 0) SWT.error (SWT.ERROR_UNSUPPORTED_DEPTH);
-		XVisualInfo info = new XVisualInfo ();
-		XGL.memmove (info, infoPtr, XVisualInfo.sizeof);
-		OS.XFree (infoPtr);
-		handle = XGL.glXCreateContext (xDisplay, info, 0, false);
-		if (handle == 0) SWT.error (SWT.ERROR_NO_HANDLES);
-	}
-	
-	public ImageData convertImageData (ImageData source) {
-		PaletteData palette = new PaletteData (0xff0000, 0xff00, 0xff);
-		ImageData newSource = new ImageData (source.width, source.height, 24, palette);
-		ImageDataUtil.blit (
-			1,
-			source.data,
-			source.depth,
-			source.bytesPerLine,
-			(source.depth != 16) ? MSB_FIRST : LSB_FIRST,
-			0,
-			0,
-			source.width,
-			source.height,
-			source.palette.redMask,
-			source.palette.greenMask,
-			source.palette.blueMask,
-			255,
-			null,
-			0,
-			0,
-			0,
-			newSource.data,
-			newSource.depth,
-			newSource.bytesPerLine,
-			(newSource.depth != 16) ? MSB_FIRST : LSB_FIRST,
-			0,
-			0,
-			newSource.width,
-			newSource.height,
-			newSource.palette.redMask,
-			newSource.palette.greenMask,
-			newSource.palette.blueMask,
-			false,
-			true);
-
-		return newSource;
-	}
-
-	/**
-	 * Disposes of the operating system resources associated with
-	 * the receiver. Applications must dispose of all <code>GLContext</code>s
-	 * that they allocate.
-	 */
-	public void dispose () {
-		if (handle == 0) return;
-		int xDisplay = data.display;
-		if (XGL.glXGetCurrentContext () == handle) {
-			XGL.glXMakeCurrent (xDisplay, 0, 0);
-		}
-		if (selectBufferPtr != 0) OS.XtFree (selectBufferPtr);
-		XGL.glXDestroyContext (xDisplay, handle);
-		handle = 0;
-		// drawable may be disposed
-		try {
-			drawable.internal_dispose_GC (gc, data);
-		} catch (SWTException e) {
-		}
-		gc = 0;
-		data.display = data.drawable = data.colormap = 0;
-		/*data.fontList =*/ data.clipRgn = data.renderTable = 0;
-		drawable = null;
-		data.device = null;
-		data.image = null;
-		//data.codePage = null;
-		data = null;
-	}
-
-	public int[] getSelectBuffer (int selectBufferPtr, int[] selectBuffer) {
-		OS.memmove (selectBuffer, selectBufferPtr, selectBuffer.length * 4);
-		return selectBuffer;
-	}
-
-	public int getSelectBufferPtr (int[] selectBuffer) {
-		if (selectBufferPtr == 0) {
-			selectBufferPtr = OS.XtMalloc (selectBuffer.length * 4);
-		}
-		OS.memmove (selectBufferPtr, selectBuffer, selectBuffer.length * 4);
-		return selectBufferPtr;
-	}
-
-	/**
-	 * Returns a boolean indicating whether the receiver is the current
-	 * <code>GLContext</code>.
-	 *  
-	 * @return true if the receiver is the current <code>GLContext</code>,
-	 * false otherwise
-	 * @exception SWTError <ul>
-	 *    <li>ERROR_GRAPHIC_DISPOSED if the receiver is disposed</li>
-	 * </ul>
-	 */
-	public boolean isCurrent () {
-		if (isDisposed ()) 	SWT.error (SWT.ERROR_GRAPHIC_DISPOSED);
-		return XGL.glXGetCurrentContext () == handle;
-	}
-
-	/**
-	 * Returns a boolean indicating whether the <code>GLContext</code> has been
-	 * disposed.
-	 * <p>
-	 * This method gets the dispose state for the <code>GLContext</code>.
-	 * When a <code>GLContext</code> has been disposed, it is an error to
-	 * invoke any other method using the <code>GLContext</code>.
-	 *
-	 * @return true if the <code>GLContext</code> is disposed, false otherwise
-	 */
-	public boolean isDisposed () {
-		return handle == 0;
-	}
-
-	/**
-	 * Loads the specified bitmap font.
-	 * 
-	 * @param fdata
-	 * @param device
-	 * @param base
-	 * @param first
-	 * @param count
-	 */
-	public void loadBitmapFont (FontData fdata, Device device, int base, int startIndex, int length) {
-		/* Temporary code, due some problems when running on UTF-8 loadBitmapFont ()
-		 * is restrict to works only for ascii. 
-		 * Note: en_US.ISO8859-1 also code be used.
-		 */
-		fdata.setLocale ("C");
-		Font font = new Font (device, fdata);
-		int fontList = font.handle;
-		int[] buffer = new int [1];
-		if (!OS.XmFontListInitFontContext (buffer, fontList)) return;
-		int context = buffer [0];
-		XFontStruct fontStruct = new XFontStruct ();
-		int fontListEntry;
-		int[] fontStructPtr = new int [1];
-		int[] fontNamePtr = new int [1];
-		int xfont = 0;
-		// go through each entry in the font list
-		while ((fontListEntry = OS.XmFontListNextEntry (context)) != 0) {
-			int fontPtr = OS.XmFontListEntryGetFont (fontListEntry, buffer);
-			if (buffer [0] == OS.XmFONT_IS_FONT) {
-				// FontList contains a single font
-				OS.memmove (fontStruct, fontPtr, 20 * 4);
-				xfont = fontStruct.fid;
-			} else {
-				// FontList contains a fontSet
-				int nFonts = OS.XFontsOfFontSet (fontPtr, fontStructPtr, fontNamePtr);
-				int[] fontStructs = new int [nFonts];
-				OS.memmove (fontStructs, fontStructPtr [0], nFonts * 4);
-				// Go through each fontStruct in the font set.
-				for (int i = 0; i < nFonts; i++) {
-					OS.memmove (fontStruct, fontStructs [i], XFontStruct.sizeof);
-					xfont = fontStruct.fid;
-				}
-			}
-		}
-		if (xfont != 0) {
-			XGL.glXUseXFont (xfont, startIndex, length, base);
-		}
-		font.dispose ();
-		OS.XmFontListFreeFontContext (context);
-	}
-
-	/**
-	 * Loads the specified outline font.
-	 * 
-	 * @param fdata
-	 * @param device
-	 * @param base
-	 * @param first
-	 * @param count
-	 * @param deviation
-	 * @param extrusion
-	 * @param format
-	 * @param lpgmf
-	 */
-	public void loadOutlineFont (FontData fdata, Device device, int base, int first,
-	int count, float deviation, float extrusion, int format, GLYPHMETRICSFLOAT[] lpgmf) {
-		// stub
-	}
-
-	/**
-	 * Resizes the receiver.
-	 * 
-	 * @param x
-	 * @param y
-	 * @param width
-	 * @param height
-	 */
-	public void resize (int x, int y, int width, int height) {
-		if (height == 0) height = 1;
-		GL.glViewport (x, y, width, height);
-		GL.glMatrixMode (GL.GL_PROJECTION);
-		GL.glLoadIdentity ();
-		GLU.gluPerspective (45.0f, (float) width / (float) height, 0.1f, 100.0f);
-		GL.glMatrixMode (GL.GL_MODELVIEW);
-		GL.glLoadIdentity ();
-	}
-
-	/**
-	 * Sets the receiver to be the current <code>GLContext</code>.
-	 * 
-	 * @exception SWTError <ul>
-	 *    <li>ERROR_GRAPHIC_DISPOSED if the receiver is disposed</li>
-	 * </ul>
-	 */
-	public void setCurrent () {
-		if (isDisposed ()) SWT.error (SWT.ERROR_GRAPHIC_DISPOSED);
-		if (XGL.glXGetCurrentContext () == handle) return;
-		XGL.glXMakeCurrent (data.display, data.drawable, handle);
-	}
-
-	/**
-	 * Swaps the receiver's buffers.
-	 * 
-	 * @exception SWTError <ul>
-	 *    <li>ERROR_GRAPHIC_DISPOSED if the receiver is disposed</li>
-	 * </ul>
-	 */
-	public void swapBuffers () {
-		if (isDisposed ()) SWT.error (SWT.ERROR_GRAPHIC_DISPOSED);
-		XGL.glXSwapBuffers (data.display, data.drawable);
-	}
-}
diff --git a/bundles/org.eclipse.swt.opengl/motif/org/eclipse/swt/opengl/internal/motif/XGL.java b/bundles/org.eclipse.swt.opengl/motif/org/eclipse/swt/opengl/internal/motif/XGL.java
deleted file mode 100644
index a5a3e5a..0000000
--- a/bundles/org.eclipse.swt.opengl/motif/org/eclipse/swt/opengl/internal/motif/XGL.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl.internal.motif;
-
-import org.eclipse.swt.opengl.Library;
-
-public class XGL {
-	
-static {
-	Library.loadLibrary("gl");
-}
-
-public static final int GLX_VERSION_1_1 = 1;
-public static final int GLX_VERSION_1_2 = 1;
-public static final int GLX_VERSION_1_3 = 1;
-
-/*
-** Visual Config Attributes (glXGetConfig, glXGetFBConfigAttrib)
-*/
-public static final int GLX_USE_GL		= 1;	/* support GLX rendering */
-public static final int GLX_BUFFER_SIZE		= 2;	/* depth of the color buffer */
-public static final int GLX_LEVEL		= 3;	/* level in plane stacking */
-public static final int GLX_RGBA		= 4;	/* true if RGBA mode */
-public static final int GLX_DOUBLEBUFFER	= 5;	/* double buffering supported */
-public static final int GLX_STEREO		= 6;	/* stereo buffering supported */
-public static final int GLX_AUX_BUFFERS		= 7;	/* number of aux buffers */
-public static final int GLX_RED_SIZE		= 8;	/* number of red component bits */
-public static final int GLX_GREEN_SIZE		= 9;	/* number of green component bits */
-public static final int GLX_BLUE_SIZE		= 10;	/* number of blue component bits */
-public static final int GLX_ALPHA_SIZE		= 11;	/* number of alpha component bits */
-public static final int GLX_DEPTH_SIZE		= 12;	/* number of depth bits */
-public static final int GLX_STENCIL_SIZE	= 13;	/* number of stencil bits */
-public static final int GLX_ACCUM_RED_SIZE	= 14;	/* number of red accum bits */
-public static final int GLX_ACCUM_GREEN_SIZE	= 15;	/* number of green accum bits */
-public static final int GLX_ACCUM_BLUE_SIZE	= 16;	/* number of blue accum bits */
-public static final int GLX_ACCUM_ALPHA_SIZE	= 17;	/* number of alpha accum bits */
-/*
-** FBConfig-specific attributes
-*/
-public static final int GLX_X_VISUAL_TYPE		= 0x22;
-public static final int GLX_CONFIG_CAVEAT		= 0x20;	/* Like visual_info VISUAL_CAVEAT_EXT */
-public static final int GLX_TRANSPARENT_TYPE		= 0x23;
-public static final int GLX_TRANSPARENT_INDEX_VALUE	= 0x24;
-public static final int GLX_TRANSPARENT_RED_VALUE	= 0x25;
-public static final int GLX_TRANSPARENT_GREEN_VALUE	= 0x26;
-public static final int GLX_TRANSPARENT_BLUE_VALUE	= 0x27;
-public static final int GLX_TRANSPARENT_ALPHA_VALUE	= 0x28;
-public static final int GLX_DRAWABLE_TYPE		= 0x8010;
-public static final int GLX_RENDER_TYPE			= 0x8011;
-public static final int GLX_X_RENDERABLE		= 0x8012;
-public static final int GLX_FBCONFIG_ID			= 0x8013;
-public static final int GLX_MAX_PBUFFER_WIDTH		= 0x8016;
-public static final int GLX_MAX_PBUFFER_HEIGHT		= 0x8017;
-public static final int GLX_MAX_PBUFFER_PIXELS		= 0x8018;
-public static final int GLX_VISUAL_ID			= 0x800B;
-
-/*
-** Error return values from glXGetConfig.  Success is indicated by
-** a value of 0.
-*/
-public static final int GLX_BAD_SCREEN		= 1;	/* screen # is bad */
-public static final int GLX_BAD_ATTRIBUTE	= 2;	/* attribute to get is bad */
-public static final int GLX_NO_EXTENSION	= 3;	/* no glx extension on server */
-public static final int GLX_BAD_VISUAL		= 4;	/* visual # not known by GLX */
-public static final int GLX_BAD_CONTEXT		= 5;	/* returned only by import_context EXT? */
-public static final int GLX_BAD_VALUE		= 6;	/* returned only by glXSwapIntervalSGI? */
-public static final int GLX_BAD_ENUM		= 7;	/* unused? */
-
-/* FBConfig attribute values */
-
-/*
-** Generic "don't care" value for glX ChooseFBConfig attributes (except
-** GLX_LEVEL)
-*/
-public static final int GLX_DONT_CARE			= 0xFFFFFFFF;
-
-/* GLX_RENDER_TYPE bits */
-public static final int GLX_RGBA_BIT			= 0x00000001;
-public static final int GLX_COLOR_INDEX_BIT		= 0x00000002;
-
-/* GLX_DRAWABLE_TYPE bits */
-public static final int GLX_WINDOW_BIT			= 0x00000001;
-public static final int GLX_PIXMAP_BIT			= 0x00000002;
-public static final int GLX_PBUFFER_BIT			= 0x00000004;
-
-/* GLX_CONFIG_CAVEAT attribute values */
-public static final int GLX_NONE			= 0x8000;
-public static final int GLX_SLOW_CONFIG			= 0x8001;
-public static final int GLX_NON_CONFORMANT_CONFIG	= 0x800D;
-
-/* GLX_X_VISUAL_TYPE attribute values */
-public static final int GLX_TRUE_COLOR			= 0x8002;
-public static final int GLX_DIRECT_COLOR		= 0x8003;
-public static final int GLX_PSEUDO_COLOR		= 0x8004;
-public static final int GLX_STATIC_COLOR		= 0x8005;
-public static final int GLX_GRAY_SCALE			= 0x8006;
-public static final int GLX_STATIC_GRAY			= 0x8007;
-
-/* GLX_TRANSPARENT_TYPE attribute values */
-/* public static final int GLX_NONE			   0x8000 */
-public static final int GLX_TRANSPARENT_RGB		= 0x8008;
-public static final int GLX_TRANSPARENT_INDEX		= 0x8009;
-
-/* glXCreateGLXPbuffer attributes */
-public static final int GLX_PRESERVED_CONTENTS		= 0x801B;
-public static final int GLX_LARGEST_PBUFFER		= 0x801C;
-public static final int GLX_PBUFFER_HEIGHT		= 0x8040;	/* New for GLX 1.3 */
-public static final int GLX_PBUFFER_WIDTH		= 0x8041;	/* New for GLX 1.3 */
-
-/* glXQueryGLXPBuffer attributes */
-public static final int GLX_WIDTH			= 0x801D;
-public static final int GLX_HEIGHT			= 0x801E;
-public static final int GLX_EVENT_MASK			= 0x801F;
-
-/* glXCreateNewContext render_type attribute values */
-public static final int GLX_RGBA_TYPE			= 0x8014;
-public static final int GLX_COLOR_INDEX_TYPE		= 0x8015;
-
-/* glXQueryContext attributes */
-/* public static final int GLX_FBCONFIG_ID		  0x8013 */
-/* public static final int GLX_RENDER_TYPE		  0x8011 */
-public static final int GLX_SCREEN			= 0x800C;
-
-/* glXSelectEvent event mask bits */
-public static final int GLX_PBUFFER_CLOBBER_MASK	= 0x08000000;
-
-/* GLXPbufferClobberEvent event_type values */
-public static final int GLX_DAMAGED			= 0x8020;
-public static final int GLX_SAVED			= 0x8021;
-
-/* GLXPbufferClobberEvent draw_type values */
-public static final int GLX_WINDOW			= 0x8022;
-public static final int GLX_PBUFFER			= 0x8023;
-
-/* GLXPbufferClobberEvent buffer_mask bits */
-public static final int GLX_FRONT_LEFT_BUFFER_BIT	= 0x00000001;
-public static final int GLX_FRONT_RIGHT_BUFFER_BIT	= 0x00000002;
-public static final int GLX_BACK_LEFT_BUFFER_BIT	= 0x00000004;
-public static final int GLX_BACK_RIGHT_BUFFER_BIT	= 0x00000008;
-public static final int GLX_AUX_BUFFERS_BIT		= 0x00000010;
-public static final int GLX_DEPTH_BUFFER_BIT		= 0x00000020;
-public static final int GLX_STENCIL_BUFFER_BIT		= 0x00000040;
-public static final int GLX_ACCUM_BUFFER_BIT		= 0x00000080;
-
-/*
-** Extension return values from glXGetConfig.  These are also
-** accepted as parameter values for glXChooseVisual.
-*/
-
-public static final int GLX_X_VISUAL_TYPE_EXT	= 0x22;	/* visual_info extension type */
-public static final int GLX_TRANSPARENT_TYPE_EXT = 0x23;	/* visual_info extension */
-public static final int GLX_TRANSPARENT_INDEX_VALUE_EXT = 0x24;	/* visual_info extension */
-public static final int GLX_TRANSPARENT_RED_VALUE_EXT	= 0x25;	/* visual_info extension */
-public static final int GLX_TRANSPARENT_GREEN_VALUE_EXT = 0x26;	/* visual_info extension */
-public static final int GLX_TRANSPARENT_BLUE_VALUE_EXT	= 0x27;	/* visual_info extension */
-public static final int GLX_TRANSPARENT_ALPHA_VALUE_EXT = 0x28;	/* visual_info extension */
-
-/* Property values for visual_type */
-public static final int GLX_TRUE_COLOR_EXT	= 0x8002;
-public static final int GLX_DIRECT_COLOR_EXT	= 0x8003;
-public static final int GLX_PSEUDO_COLOR_EXT	= 0x8004;
-public static final int GLX_STATIC_COLOR_EXT	= 0x8005;
-public static final int GLX_GRAY_SCALE_EXT	= 0x8006;
-public static final int GLX_STATIC_GRAY_EXT	= 0x8007;
-
-/* Property values for transparent pixel */
-public static final int GLX_NONE_EXT		= 0x8000;
-public static final int GLX_TRANSPARENT_RGB_EXT		= 0x8008;
-public static final int GLX_TRANSPARENT_INDEX_EXT	= 0x8009;
-
-/* Property values for visual_rating */
-public static final int GLX_VISUAL_CAVEAT_EXT		= 0x20;  /* visual_rating extension type */
-public static final int GLX_SLOW_VISUAL_EXT		= 0x8001;
-public static final int GLX_NON_CONFORMANT_VISUAL_EXT	= 0x800D;
-
-/*
-** Names for attributes to glXGetClientString.
-*/
-public static final int GLX_VENDOR		= 0x1;
-public static final int GLX_VERSION		= 0x2;
-public static final int GLX_EXTENSIONS		= 0x3;
-
-/*
-** Names for attributes to glXQueryContextInfoEXT.
-*/
-public static final int GLX_SHARE_CONTEXT_EXT	= 0x800A;	/* id of share context */
-public static final int GLX_VISUAL_ID_EXT	= 0x800B;	/* id of context's visual */
-public static final int GLX_SCREEN_EXT		= 0x800C;	/* screen number */
-
-/* GLX Extension Strings */
-public static final int GLX_EXT_import_context	= 1;
-public static final int GLX_EXT_visual_info	= 1;
-public static final int GLX_EXT_visual_rating	= 1;
-public static final int GLX_ARB_get_proc_address = 1;
-
-public static final native int glXChooseVisual(int dpy, int screen, int[] attribList);
-public static final native void glXCopyContext(int dpy, int src, int dst, int mask);
-//public static final native int glXCreateContext(int dpy, int vis, int shareList, boolean direct);
-public static final native int glXCreateContext(int dpy, XVisualInfo vis, int shareList, boolean direct);
-public static final native int glXCreateGLXPixmap(int dpy, XVisualInfo vis, int pixmap);
-public static final native void glXDestroyContext(int dpy, int ctx);
-public static final native void glXDestroyGLXPixmap(int dpy, int pix);
-public static final native int glXGetConfig(int dpy, XVisualInfo vis, int attrib, int[] value);
-public static final native int glXGetCurrentContext();
-public static final native int glXGetCurrentDrawable();
-public static final native boolean glXIsDirect(int dpy, int ctx);
-public static final native boolean glXMakeCurrent(int dpy, int drawable, int ctx);
-public static final native boolean glXQueryExtension(int dpy, int[] errorBase, int[] eventBase);
-public static final native boolean glXQueryVersion(int dpy, int[] major, int[] minor);
-public static final native void glXSwapBuffers(int dpy, int drawable);
-public static final native void glXUseXFont(int font, int first, int count, int listBase);
-public static final native void glXWaitGL();
-public static final native void glXWaitX();
-public static final native int glXGetClientString(int dpy, int name);
-public static final native int glXQueryServerString(int dpy, int screen, int name);
-public static final native int glXQueryExtensionsString(int dpy, int screen);
-public static final native void memmove(XVisualInfo dest, int src, int size);
-
-}
diff --git a/bundles/org.eclipse.swt.opengl/motif/org/eclipse/swt/opengl/internal/motif/XVisualInfo.java b/bundles/org.eclipse.swt.opengl/motif/org/eclipse/swt/opengl/internal/motif/XVisualInfo.java
deleted file mode 100644
index 028032d..0000000
--- a/bundles/org.eclipse.swt.opengl/motif/org/eclipse/swt/opengl/internal/motif/XVisualInfo.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl.internal.motif;
-
- 
-public class XVisualInfo {
-	public int visual;
-	public int visualid;
-	public int screen;
-	public int depth;
-	public int cclass;
-	public int red_mask, green_mask, blue_mask;
-	public int colormap_size;
-	public int bits_per_rgb;
-	public static final int sizeof = 40;
-}
diff --git a/bundles/org.eclipse.swt.opengl/plugin.properties b/bundles/org.eclipse.swt.opengl/plugin.properties
deleted file mode 100644
index 4e303e2..0000000
--- a/bundles/org.eclipse.swt.opengl/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 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
-###############################################################################
-pluginName = Standard Widget Toolkit OpenGL Bindings
-providerName = Eclipse.org
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt.opengl/plugin.xml b/bundles/org.eclipse.swt.opengl/plugin.xml
deleted file mode 100644
index feaf868..0000000
--- a/bundles/org.eclipse.swt.opengl/plugin.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<plugin
-   id="org.eclipse.swt.opengl"
-   name="%pluginName"
-   version="3.1.0"
-   provider-name="%providerName">
-
-   <runtime>
-      <library name="$ws$/swt.jar">
-         <export name="*"/>
-         <packages prefixes="org.eclipse.swt.opengl"/>
-      </library>
-   </runtime>
-   <requires>
-      <import plugin="org.eclipse.swt" export="true"/>
-   </requires>
-
-
-</plugin>
diff --git a/bundles/org.eclipse.swt.opengl/win32/library/build.bat b/bundles/org.eclipse.swt.opengl/win32/library/build.bat
deleted file mode 100644
index e3cd949..0000000
--- a/bundles/org.eclipse.swt.opengl/win32/library/build.bat
+++ /dev/null
@@ -1,34 +0,0 @@
-rem *******************************************************************************
-rem  Copyright (c) 2000, 2005 IBM Corporation and others.
-rem  All rights reserved. This program and the accompanying materials
-rem  are made available under the terms of the Eclipse Public License v1.0
-rem  which accompanies this distribution, and is available at 
-rem  http://www.eclipse.org/legal/epl-v10.html
-rem  
-rem  Contributors:
-rem      IBM Corporation - initial API and implementation
-rem *******************************************************************************
-
-@echo off
-
-IF NOT "%JAVA_HOME%"=="" GOTO MAKE
-
-rem *****
-rem Javah
-rem *****
-set JAVA_HOME=j:\teamswt\swt-builddir\ive\bin
-set path=%JAVA_HOME%;%path%
-
-rem ********
-rem MSVC 6.0
-rem ********
-call k:\dev\products\msvc60\vc98\bin\vcvars32.bat
-
-rem ****** 
-rem MS-SDK
-rem ******
-set Mssdk=j:\teamswt\swt-builddir\mssdk
-call %mssdk%\setenv.bat
-
-:MAKE
-nmake -f make_win32.mak %1 %2 %3 %4
diff --git a/bundles/org.eclipse.swt.opengl/win32/library/glw.c b/bundles/org.eclipse.swt.opengl/win32/library/glw.c
deleted file mode 100644
index 81c8ed5..0000000
--- a/bundles/org.eclipse.swt.opengl/win32/library/glw.c
+++ /dev/null
@@ -1,283 +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
- *******************************************************************************/
-#include <windows.h>
-#include <wingdi.h>
-#include "jni.h"
-#include "swt.h"
-#include "structs.h"
-
-#define WGL_NATIVE(func) Java_org_eclipse_swt_opengl_internal_win32_WGL_##func
-
-JNIEXPORT jint JNICALL WGL_NATIVE(ChoosePixelFormat)
-	(JNIEnv *env, jclass that, jint arg0, jobject arg1)
-{
-	PIXELFORMATDESCRIPTOR _arg1, *lparg1=NULL;
-	jint rc;
-
-	DEBUG_CALL("ChoosePixelFormat\n")
-
-	if (arg1) lparg1 = getPIXELFORMATDESCRIPTORFields(env, arg1, &_arg1);
-	rc = (jint)ChoosePixelFormat((HDC)arg0, (CONST PIXELFORMATDESCRIPTOR *)lparg1);
-	if (arg1) setPIXELFORMATDESCRIPTORFields(env, arg1, lparg1);
-	return rc;
-}
-
-JNIEXPORT jint JNICALL WGL_NATIVE(DescribePixelFormat)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jobject arg3)
-{
-	PIXELFORMATDESCRIPTOR _arg3, *lparg3=NULL;
-	jint rc;
-
-	DEBUG_CALL("DescribePixelFormat\n")
-
-	if (arg3) lparg3 = getPIXELFORMATDESCRIPTORFields(env, arg3, &_arg3);
-	rc = (jint)DescribePixelFormat((HDC)arg0, arg1, arg2, (LPPIXELFORMATDESCRIPTOR)lparg3);
-	if (arg3) setPIXELFORMATDESCRIPTORFields(env, arg3, lparg3);
-	return rc;
-}
-
-JNIEXPORT jint JNICALL WGL_NATIVE(GetPixelFormat)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	DEBUG_CALL("GetPixelFormat\n")
-
-	return (jint)GetPixelFormat((HDC)arg0);
-}
-
-JNIEXPORT jboolean JNICALL WGL_NATIVE(SetPixelFormat)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jobject arg2)
-{
-	PIXELFORMATDESCRIPTOR _arg2, *lparg2=NULL;
-	jboolean rc;
-
-	DEBUG_CALL("SetPixelFormat\n")
-
-	if (arg2) lparg2 = getPIXELFORMATDESCRIPTORFields(env, arg2, &_arg2);
-	rc = (jboolean)SetPixelFormat((HDC)arg0, arg1, (CONST PIXELFORMATDESCRIPTOR *)lparg2);
-	if (arg2) setPIXELFORMATDESCRIPTORFields(env, arg2, lparg2);
-	return rc;
-}
-
-JNIEXPORT jboolean JNICALL WGL_NATIVE(SwapBuffers)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	DEBUG_CALL("SwapBuffers\n")
-
-	return (jboolean)SwapBuffers((HDC)arg0);
-}
-
-JNIEXPORT jboolean JNICALL WGL_NATIVE(wglCopyContext)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
-{
-	DEBUG_CALL("wglCopyContext\n")
-
-	return (jboolean)wglCopyContext((HGLRC)arg0, (HGLRC)arg1, (UINT)arg2);
-}
-
-JNIEXPORT jint JNICALL WGL_NATIVE(wglCreateContext)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	DEBUG_CALL("wglCreateContext\n")
-
-	return (jint)wglCreateContext((HDC)arg0);
-}
-
-JNIEXPORT jint JNICALL WGL_NATIVE(wglCreateLayerContext)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	DEBUG_CALL("wglCreateLayerContext\n")
-
-	return (jint)wglCreateLayerContext((HDC)arg0, arg1);
-}
-
-JNIEXPORT jboolean JNICALL WGL_NATIVE(wglDeleteContext)
-	(JNIEnv *env, jclass that, jint arg0)
-{
-	DEBUG_CALL("wglDeleteContext\n")
-
-	return (jboolean)wglDeleteContext((HGLRC)arg0);
-}
-
-JNIEXPORT jboolean JNICALL WGL_NATIVE(wglDescribeLayerPlane)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jobject arg4)
-{
-	LAYERPLANEDESCRIPTOR _arg4, *lparg4=NULL;
-	jboolean rc;
-
-	DEBUG_CALL("wglDescribeLayerPlane\n")
-
-	if (arg4) lparg4 = getLAYERPLANEDESCRIPTORFields(env, arg4, &_arg4);
-	rc = (jboolean)wglDescribeLayerPlane((HDC)arg0, arg1, arg2, arg3, (LPLAYERPLANEDESCRIPTOR)lparg4);
-	if (arg4) setLAYERPLANEDESCRIPTORFields(env, arg4, lparg4);
-	return rc;
-}
-
-JNIEXPORT jint JNICALL WGL_NATIVE(wglGetCurrentContext)
-	(JNIEnv *env, jclass that)
-{
-	DEBUG_CALL("wglGetCurrentContext\n")
-
-	return (jint)wglGetCurrentContext();
-}
-
-JNIEXPORT jint JNICALL WGL_NATIVE(wglGetCurrentDC)
-	(JNIEnv *env, jclass that)
-{
-	DEBUG_CALL("wglGetCurrentDC\n")
-
-	return (jint)wglGetCurrentDC();
-}
-
-JNIEXPORT jint JNICALL WGL_NATIVE(wglGetLayerPaletteEntries)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jintArray arg4)
-{
-	jint *lparg4=NULL;
-	jint rc;
-
-	DEBUG_CALL("wglGetLayerPaletteEntries\n")
-
-	if (arg4) lparg4 = (*env)->GetIntArrayElements(env, arg4, NULL);
-	rc = (jint)wglGetLayerPaletteEntries((HDC)arg0, arg1, arg2, arg3, (COLORREF *)lparg4);
-	if (arg4) (*env)->ReleaseIntArrayElements(env, arg4, lparg4, 0);
-	return rc;
-}
-
-JNIEXPORT jint JNICALL WGL_NATIVE(wglGetProcAddress)
-	(JNIEnv *env, jclass that, jbyteArray arg0)
-{
-	jbyte *lparg0=NULL;
-	jint rc;
-
-	DEBUG_CALL("wglGetProcAddress\n")
-
-	if (arg0) lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL);
-	rc = (jint)wglGetProcAddress((LPCSTR)lparg0);
-	if (arg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
-	return rc;
-}
-
-JNIEXPORT jboolean JNICALL WGL_NATIVE(wglMakeCurrent)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	DEBUG_CALL("wglMakeCurrent\n")
-
-	return (jboolean)wglMakeCurrent((HDC)arg0, (HGLRC)arg1);
-}
-
-JNIEXPORT jboolean JNICALL WGL_NATIVE(wglRealizeLayerPalette)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jboolean arg2)
-{
-	DEBUG_CALL("wglRealizeLayerPalette\n")
-
-	return (jboolean)wglRealizeLayerPalette((HDC)arg0, arg1, (BOOL)arg2);
-}
-
-JNIEXPORT jint JNICALL WGL_NATIVE(wglSetLayerPaletteEntries)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jintArray arg4)
-{
-	jint *lparg4=NULL;
-	jint rc;
-
-	DEBUG_CALL("wglSetLayerPaletteEntries\n")
-
-	if (arg4) lparg4 = (*env)->GetIntArrayElements(env, arg4, NULL);
-	rc = (jint)wglSetLayerPaletteEntries((HDC)arg0, arg1, arg2, arg3, (CONST COLORREF *)lparg4);
-	if (arg4) (*env)->ReleaseIntArrayElements(env, arg4, lparg4, 0);
-	return rc;
-}
-
-JNIEXPORT jboolean JNICALL WGL_NATIVE(wglShareLists)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	DEBUG_CALL("wglShareLists\n")
-
-	return (jboolean)wglShareLists((HGLRC)arg0, (HGLRC)arg1);
-}
-
-JNIEXPORT jboolean JNICALL WGL_NATIVE(wglSwapLayerBuffers)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1)
-{
-	DEBUG_CALL("wglSwapLayerBuffers\n")
-
-	return (jboolean)wglSwapLayerBuffers((HDC)arg0, arg1);
-}
-
-JNIEXPORT jboolean JNICALL WGL_NATIVE(wglUseFontBitmapsA)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
-{
-	DEBUG_CALL("wglUseFontBitmapsA\n")
-
-	return (jboolean)wglUseFontBitmapsA((HDC)arg0, arg1, arg2, arg3);
-}
-
-JNIEXPORT jboolean JNICALL WGL_NATIVE(wglUseFontBitmapsW)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
-{
-	DEBUG_CALL("wglUseFontBitmapsW\n")
-
-	return (jboolean)wglUseFontBitmapsW((HDC)arg0, arg1, arg2, arg3);
-}
-
-JNIEXPORT jboolean JNICALL WGL_NATIVE(wglUseFontOutlinesA)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jfloat arg4, jfloat arg5, jint arg6, jobject arg7)
-{
-//	GLYPHMETRICSFLOAT _arg7, *lparg7=NULL;
-	jboolean rc;
-
-	DEBUG_CALL("wglUseFontOutlinesA\n")
-
-//	if (arg7) lparg7 = getGLYPHMETRICSFLOATFields(env, arg7, &_arg7);
-	rc = (jboolean)wglUseFontOutlinesA((HDC)arg0, arg1, arg2, arg3, (FLOAT)arg4, (FLOAT)arg5, arg6, (LPGLYPHMETRICSFLOAT)arg7);
-//	if (arg7) setGLYPHMETRICSFLOATFields(env, arg7, lparg7);
-	return rc;
-}
-
-JNIEXPORT jboolean JNICALL WGL_NATIVE(wglUseFontOutlinesW)
-	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jfloat arg4, jfloat arg5, jint arg6, jobject arg7)
-{
-//	GLYPHMETRICSFLOAT _arg7, *lparg7=NULL;
-	jboolean rc;
-
-	DEBUG_CALL("wglUseFontOutlinesW\n")
-
-//	if (arg7) lparg7 = getGLYPHMETRICSFLOATFields(env, arg7, &_arg7);
-	rc = (jboolean)wglUseFontOutlinesW((HDC)arg0, arg1, arg2, arg3, (FLOAT)arg4, (FLOAT)arg5, arg6, (LPGLYPHMETRICSFLOAT)arg7);
-//	if (arg7) setGLYPHMETRICSFLOATFields(env, arg7, lparg7);
-	return rc;
-}
-
-JNIEXPORT void JNICALL WGL_NATIVE(MoveMemoryW__Lorg_eclipse_swt_opengl_internal_win32_GLYPHMETRICSFLOAT_2II)
-	(JNIEnv *env, jclass that, jobject arg0, jint arg1, jint arg2)
-{
-	GLYPHMETRICSFLOAT _arg0, *lparg0=NULL;
-
-	DEBUG_CALL("MoveMemoryW__Lorg_eclipse_swt_opengl_internal_win32_GLYPHMETRICSFLOAT_2II\n")
-	DEBUG_CHECK_NULL(env, arg1)
-	
-	if (arg0) lparg0 = &_arg0;
-	MoveMemory((PVOID)lparg0, (CONST VOID *)arg1, arg2);
-	if (arg0) setGLYPHMETRICSFLOATFields(env, arg0, lparg0);
-}
-
-JNIEXPORT void JNICALL WGL_NATIVE(MoveMemoryA__Lorg_eclipse_swt_opengl_internal_win32_GLYPHMETRICSFLOAT_2II)
-	(JNIEnv *env, jclass that, jobject arg0, jint arg1, jint arg2)
-{
-	GLYPHMETRICSFLOAT _arg0, *lparg0=NULL;
-
-	DEBUG_CALL("MoveMemoryA__Lorg_eclipse_swt_opengl_internal_win32_GLYPHMETRICSFLOAT_2II\n")
-	DEBUG_CHECK_NULL(env, arg1)
-	
-	if (arg0) lparg0 = &_arg0;
-	MoveMemory((PVOID)lparg0, (CONST VOID *)arg1, arg2);
-	if (arg0) setGLYPHMETRICSFLOATFields(env, arg0, lparg0);
-}
-
-
diff --git a/bundles/org.eclipse.swt.opengl/win32/library/make_win32.mak b/bundles/org.eclipse.swt.opengl/win32/library/make_win32.mak
deleted file mode 100644
index af6a861..0000000
--- a/bundles/org.eclipse.swt.opengl/win32/library/make_win32.mak
+++ /dev/null
@@ -1,56 +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
-#*******************************************************************************
-
-# assumes JAVA_HOME is set in the environment from which nmake is run
-
-APPVER=5.0
-!include <win32.mak>
-
-pgm_ver_str="SWT $(maj_ver).$(min_ver) for Windows"
-timestamp_str=__DATE__\" \"__TIME__\" (EST)\"
-copyright = "Copyright (C) 1999, 2003 IBM Corp.  All rights reserved."
-
-SWT_PREFIX=gl
-WS_PREFIX=win32
-SWT_LIB     = $(SWT_PREFIX)-$(WS_PREFIX).dll
-
-LINK_LIBS = opengl32.lib glu32.lib gdi32.lib
-
-# note: thoroughly test all examples after changing any optimization flags
-SWT_CDEBUG = #-Zi -Odi
-SWT_LDEBUG = #/DEBUG /DEBUGTYPE:both
-CFLAGS = -c -W3 -G6 -GD -O1 $(SWT_CDEBUG) -nologo -D_X86_=1 -D_WIN32 -D_WIN95 -D_WIN32_WINDOWS=0x0400 -D_MT -MT -DWIN32 -D_WIN32_DCOM /I$(JAVA_HOME)\include /I.
-RCFLAGS = -DSWT_COMMA_VERSION=$(comma_ver)
-LFLAGS = /INCREMENTAL:NO /PDB:NONE /RELEASE /NOLOGO $(SWT_LDEBUG) -entry:_DllMainCRTStartup@12 -dll /BASE:0x10000000 /comment:$(pgm_ver_str) /comment:$(copyright) /DLL
-
-SWT_OBJS = swt.obj gl.obj glu.obj glw.obj structs.obj
-
-all: $(SWT_LIB)
-
-.c.obj:
-	cl $(CFLAGS) $*.c
-
-$(SWT_LIB): $(SWT_OBJS) swt.res
-	echo $(LFLAGS) >templrf
-	echo $(LINK_LIBS) >>templrf
-	echo -machine:IX86 >>templrf
-	echo -subsystem:windows >>templrf
-	echo -out:$(SWT_LIB) >>templrf
-	echo $(SWT_OBJS) >>templrf
-	echo swt.res >>templrf
-	link @templrf
-	del templrf
-	
-swt.res:
-	rc $(RCFLAGS) -DSWT_ORG_FILENAME=\"$(SWT_LIB)\" -r -fo swt.res swt.rc
-	
-clean:
-    del *.obj *.res *.dll *.lib *.exp
diff --git a/bundles/org.eclipse.swt.opengl/win32/library/structs.c b/bundles/org.eclipse.swt.opengl/win32/library/structs.c
deleted file mode 100644
index a38435b..0000000
--- a/bundles/org.eclipse.swt.opengl/win32/library/structs.c
+++ /dev/null
@@ -1,304 +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
- *******************************************************************************/
-
-#include "swt.h"
-#include "structs.h"
-
-typedef struct GLYPHMETRICSFLOAT_FID_CACHE {
-	int cached;
-	jclass clazz;
-	jfieldID gmfCellIncY, gmfCellIncX, gmfptGlyphOrigin_y, gmfptGlyphOrigin_x, gmfBlackBoxY, gmfBlackBoxX;
-} GLYPHMETRICSFLOAT_FID_CACHE;
-typedef GLYPHMETRICSFLOAT_FID_CACHE *PGLYPHMETRICSFLOAT_FID_CACHE;
-
-GLYPHMETRICSFLOAT_FID_CACHE GLYPHMETRICSFLOATFc;
-
-void cacheGLYPHMETRICSFLOATFids(JNIEnv *env, jobject lpObject, PGLYPHMETRICSFLOAT_FID_CACHE lpCache)
-{
-	if (lpCache->cached) return;
-	lpCache->clazz = (*env)->GetObjectClass(env, lpObject);
-	lpCache->gmfCellIncY = (*env)->GetFieldID(env, lpCache->clazz, "gmfCellIncY", "F");
-	lpCache->gmfCellIncX = (*env)->GetFieldID(env, lpCache->clazz, "gmfCellIncX", "F");
-	lpCache->gmfptGlyphOrigin_y = (*env)->GetFieldID(env, lpCache->clazz, "gmfptGlyphOrigin_y", "F");
-	lpCache->gmfptGlyphOrigin_x = (*env)->GetFieldID(env, lpCache->clazz, "gmfptGlyphOrigin_x", "F");
-	lpCache->gmfBlackBoxY = (*env)->GetFieldID(env, lpCache->clazz, "gmfBlackBoxY", "F");
-	lpCache->gmfBlackBoxX = (*env)->GetFieldID(env, lpCache->clazz, "gmfBlackBoxX", "F");
-	lpCache->cached = 1;
-}
-
-GLYPHMETRICSFLOAT *getGLYPHMETRICSFLOATFields(JNIEnv *env, jobject lpObject, GLYPHMETRICSFLOAT *lpStruct)
-{
-	PGLYPHMETRICSFLOAT_FID_CACHE lpCache = &GLYPHMETRICSFLOATFc;
-	if (!lpCache->cached) cacheGLYPHMETRICSFLOATFids(env, lpObject, lpCache);
-	lpStruct->gmfCellIncY = (*env)->GetFloatField(env, lpObject, lpCache->gmfCellIncY);
-	lpStruct->gmfCellIncX = (*env)->GetFloatField(env, lpObject, lpCache->gmfCellIncX);
-	lpStruct->gmfptGlyphOrigin.y = (*env)->GetFloatField(env, lpObject, lpCache->gmfptGlyphOrigin_y);
-	lpStruct->gmfptGlyphOrigin.x = (*env)->GetFloatField(env, lpObject, lpCache->gmfptGlyphOrigin_x);
-	lpStruct->gmfBlackBoxY = (*env)->GetFloatField(env, lpObject, lpCache->gmfBlackBoxY);
-	lpStruct->gmfBlackBoxX = (*env)->GetFloatField(env, lpObject, lpCache->gmfBlackBoxX);
-	return lpStruct;
-}
-
-void setGLYPHMETRICSFLOATFields(JNIEnv *env, jobject lpObject, GLYPHMETRICSFLOAT *lpStruct)
-{
-	PGLYPHMETRICSFLOAT_FID_CACHE lpCache = &GLYPHMETRICSFLOATFc;
-	if (!lpCache->cached) cacheGLYPHMETRICSFLOATFids(env, lpObject, lpCache);
-	(*env)->SetFloatField(env, lpObject, lpCache->gmfCellIncY, (jfloat)lpStruct->gmfCellIncY);
-	(*env)->SetFloatField(env, lpObject, lpCache->gmfCellIncX, (jfloat)lpStruct->gmfCellIncX);
-	(*env)->SetFloatField(env, lpObject, lpCache->gmfptGlyphOrigin_y, (jfloat)lpStruct->gmfptGlyphOrigin.y);
-	(*env)->SetFloatField(env, lpObject, lpCache->gmfptGlyphOrigin_x, (jfloat)lpStruct->gmfptGlyphOrigin.x);
-	(*env)->SetFloatField(env, lpObject, lpCache->gmfBlackBoxY, (jfloat)lpStruct->gmfBlackBoxY);
-	(*env)->SetFloatField(env, lpObject, lpCache->gmfBlackBoxX, (jfloat)lpStruct->gmfBlackBoxX);
-}
-
-typedef struct LAYERPLANEDESCRIPTOR_FID_CACHE {
-	int cached;
-	jclass clazz;
-	jfieldID crTransparent, bReserved, iLayerPlane, cAuxBuffers, cStencilBits, cDepthBits, cAccumAlphaBits, cAccumBlueBits, cAccumGreenBits, cAccumRedBits, cAccumBits, cAlphaShift, cAlphaBits, cBlueShift, cBlueBits, cGreenShift, cGreenBits, cRedShift, cRedBits, cColorBits, iPixelType, dwFlags, nVersion, nSize;
-} LAYERPLANEDESCRIPTOR_FID_CACHE;
-typedef LAYERPLANEDESCRIPTOR_FID_CACHE *PLAYERPLANEDESCRIPTOR_FID_CACHE;
-
-LAYERPLANEDESCRIPTOR_FID_CACHE LAYERPLANEDESCRIPTORFc;
-
-void cacheLAYERPLANEDESCRIPTORFids(JNIEnv *env, jobject lpObject, PLAYERPLANEDESCRIPTOR_FID_CACHE lpCache)
-{
-	if (lpCache->cached) return;
-	lpCache->clazz = (*env)->GetObjectClass(env, lpObject);
-	lpCache->crTransparent = (*env)->GetFieldID(env, lpCache->clazz, "crTransparent", "I");
-	lpCache->bReserved = (*env)->GetFieldID(env, lpCache->clazz, "bReserved", "B");
-	lpCache->iLayerPlane = (*env)->GetFieldID(env, lpCache->clazz, "iLayerPlane", "B");
-	lpCache->cAuxBuffers = (*env)->GetFieldID(env, lpCache->clazz, "cAuxBuffers", "B");
-	lpCache->cStencilBits = (*env)->GetFieldID(env, lpCache->clazz, "cStencilBits", "B");
-	lpCache->cDepthBits = (*env)->GetFieldID(env, lpCache->clazz, "cDepthBits", "B");
-	lpCache->cAccumAlphaBits = (*env)->GetFieldID(env, lpCache->clazz, "cAccumAlphaBits", "B");
-	lpCache->cAccumBlueBits = (*env)->GetFieldID(env, lpCache->clazz, "cAccumBlueBits", "B");
-	lpCache->cAccumGreenBits = (*env)->GetFieldID(env, lpCache->clazz, "cAccumGreenBits", "B");
-	lpCache->cAccumRedBits = (*env)->GetFieldID(env, lpCache->clazz, "cAccumRedBits", "B");
-	lpCache->cAccumBits = (*env)->GetFieldID(env, lpCache->clazz, "cAccumBits", "B");
-	lpCache->cAlphaShift = (*env)->GetFieldID(env, lpCache->clazz, "cAlphaShift", "B");
-	lpCache->cAlphaBits = (*env)->GetFieldID(env, lpCache->clazz, "cAlphaBits", "B");
-	lpCache->cBlueShift = (*env)->GetFieldID(env, lpCache->clazz, "cBlueShift", "B");
-	lpCache->cBlueBits = (*env)->GetFieldID(env, lpCache->clazz, "cBlueBits", "B");
-	lpCache->cGreenShift = (*env)->GetFieldID(env, lpCache->clazz, "cGreenShift", "B");
-	lpCache->cGreenBits = (*env)->GetFieldID(env, lpCache->clazz, "cGreenBits", "B");
-	lpCache->cRedShift = (*env)->GetFieldID(env, lpCache->clazz, "cRedShift", "B");
-	lpCache->cRedBits = (*env)->GetFieldID(env, lpCache->clazz, "cRedBits", "B");
-	lpCache->cColorBits = (*env)->GetFieldID(env, lpCache->clazz, "cColorBits", "B");
-	lpCache->iPixelType = (*env)->GetFieldID(env, lpCache->clazz, "iPixelType", "B");
-	lpCache->dwFlags = (*env)->GetFieldID(env, lpCache->clazz, "dwFlags", "I");
-	lpCache->nVersion = (*env)->GetFieldID(env, lpCache->clazz, "nVersion", "S");
-	lpCache->nSize = (*env)->GetFieldID(env, lpCache->clazz, "nSize", "S");
-	lpCache->cached = 1;
-}
-
-LAYERPLANEDESCRIPTOR *getLAYERPLANEDESCRIPTORFields(JNIEnv *env, jobject lpObject, LAYERPLANEDESCRIPTOR *lpStruct)
-{
-	PLAYERPLANEDESCRIPTOR_FID_CACHE lpCache = &LAYERPLANEDESCRIPTORFc;
-	if (!lpCache->cached) cacheLAYERPLANEDESCRIPTORFids(env, lpObject, lpCache);
-	lpStruct->crTransparent = (*env)->GetIntField(env, lpObject, lpCache->crTransparent);
-	lpStruct->bReserved = (*env)->GetByteField(env, lpObject, lpCache->bReserved);
-	lpStruct->iLayerPlane = (*env)->GetByteField(env, lpObject, lpCache->iLayerPlane);
-	lpStruct->cAuxBuffers = (*env)->GetByteField(env, lpObject, lpCache->cAuxBuffers);
-	lpStruct->cStencilBits = (*env)->GetByteField(env, lpObject, lpCache->cStencilBits);
-	lpStruct->cDepthBits = (*env)->GetByteField(env, lpObject, lpCache->cDepthBits);
-	lpStruct->cAccumAlphaBits = (*env)->GetByteField(env, lpObject, lpCache->cAccumAlphaBits);
-	lpStruct->cAccumBlueBits = (*env)->GetByteField(env, lpObject, lpCache->cAccumBlueBits);
-	lpStruct->cAccumGreenBits = (*env)->GetByteField(env, lpObject, lpCache->cAccumGreenBits);
-	lpStruct->cAccumRedBits = (*env)->GetByteField(env, lpObject, lpCache->cAccumRedBits);
-	lpStruct->cAccumBits = (*env)->GetByteField(env, lpObject, lpCache->cAccumBits);
-	lpStruct->cAlphaShift = (*env)->GetByteField(env, lpObject, lpCache->cAlphaShift);
-	lpStruct->cAlphaBits = (*env)->GetByteField(env, lpObject, lpCache->cAlphaBits);
-	lpStruct->cBlueShift = (*env)->GetByteField(env, lpObject, lpCache->cBlueShift);
-	lpStruct->cBlueBits = (*env)->GetByteField(env, lpObject, lpCache->cBlueBits);
-	lpStruct->cGreenShift = (*env)->GetByteField(env, lpObject, lpCache->cGreenShift);
-	lpStruct->cGreenBits = (*env)->GetByteField(env, lpObject, lpCache->cGreenBits);
-	lpStruct->cRedShift = (*env)->GetByteField(env, lpObject, lpCache->cRedShift);
-	lpStruct->cRedBits = (*env)->GetByteField(env, lpObject, lpCache->cRedBits);
-	lpStruct->cColorBits = (*env)->GetByteField(env, lpObject, lpCache->cColorBits);
-	lpStruct->iPixelType = (*env)->GetByteField(env, lpObject, lpCache->iPixelType);
-	lpStruct->dwFlags = (*env)->GetIntField(env, lpObject, lpCache->dwFlags);
-	lpStruct->nVersion = (*env)->GetShortField(env, lpObject, lpCache->nVersion);
-	lpStruct->nSize = (*env)->GetShortField(env, lpObject, lpCache->nSize);
-	return lpStruct;
-}
-
-void setLAYERPLANEDESCRIPTORFields(JNIEnv *env, jobject lpObject, LAYERPLANEDESCRIPTOR *lpStruct)
-{
-	PLAYERPLANEDESCRIPTOR_FID_CACHE lpCache = &LAYERPLANEDESCRIPTORFc;
-	if (!lpCache->cached) cacheLAYERPLANEDESCRIPTORFids(env, lpObject, lpCache);
-	(*env)->SetIntField(env, lpObject, lpCache->crTransparent, (jint)lpStruct->crTransparent);
-	(*env)->SetByteField(env, lpObject, lpCache->bReserved, (jbyte)lpStruct->bReserved);
-	(*env)->SetByteField(env, lpObject, lpCache->iLayerPlane, (jbyte)lpStruct->iLayerPlane);
-	(*env)->SetByteField(env, lpObject, lpCache->cAuxBuffers, (jbyte)lpStruct->cAuxBuffers);
-	(*env)->SetByteField(env, lpObject, lpCache->cStencilBits, (jbyte)lpStruct->cStencilBits);
-	(*env)->SetByteField(env, lpObject, lpCache->cDepthBits, (jbyte)lpStruct->cDepthBits);
-	(*env)->SetByteField(env, lpObject, lpCache->cAccumAlphaBits, (jbyte)lpStruct->cAccumAlphaBits);
-	(*env)->SetByteField(env, lpObject, lpCache->cAccumBlueBits, (jbyte)lpStruct->cAccumBlueBits);
-	(*env)->SetByteField(env, lpObject, lpCache->cAccumGreenBits, (jbyte)lpStruct->cAccumGreenBits);
-	(*env)->SetByteField(env, lpObject, lpCache->cAccumRedBits, (jbyte)lpStruct->cAccumRedBits);
-	(*env)->SetByteField(env, lpObject, lpCache->cAccumBits, (jbyte)lpStruct->cAccumBits);
-	(*env)->SetByteField(env, lpObject, lpCache->cAlphaShift, (jbyte)lpStruct->cAlphaShift);
-	(*env)->SetByteField(env, lpObject, lpCache->cAlphaBits, (jbyte)lpStruct->cAlphaBits);
-	(*env)->SetByteField(env, lpObject, lpCache->cBlueShift, (jbyte)lpStruct->cBlueShift);
-	(*env)->SetByteField(env, lpObject, lpCache->cBlueBits, (jbyte)lpStruct->cBlueBits);
-	(*env)->SetByteField(env, lpObject, lpCache->cGreenShift, (jbyte)lpStruct->cGreenShift);
-	(*env)->SetByteField(env, lpObject, lpCache->cGreenBits, (jbyte)lpStruct->cGreenBits);
-	(*env)->SetByteField(env, lpObject, lpCache->cRedShift, (jbyte)lpStruct->cRedShift);
-	(*env)->SetByteField(env, lpObject, lpCache->cRedBits, (jbyte)lpStruct->cRedBits);
-	(*env)->SetByteField(env, lpObject, lpCache->cColorBits, (jbyte)lpStruct->cColorBits);
-	(*env)->SetByteField(env, lpObject, lpCache->iPixelType, (jbyte)lpStruct->iPixelType);
-	(*env)->SetIntField(env, lpObject, lpCache->dwFlags, (jint)lpStruct->dwFlags);
-	(*env)->SetShortField(env, lpObject, lpCache->nVersion, (jshort)lpStruct->nVersion);
-	(*env)->SetShortField(env, lpObject, lpCache->nSize, (jshort)lpStruct->nSize);
-}
-
-typedef struct POINTFLOAT_FID_CACHE {
-	int cached;
-	jclass clazz;
-	jfieldID y, x;
-} POINTFLOAT_FID_CACHE;
-typedef POINTFLOAT_FID_CACHE *PPOINTFLOAT_FID_CACHE;
-
-POINTFLOAT_FID_CACHE POINTFLOATFc;
-
-void cachePOINTFLOATFids(JNIEnv *env, jobject lpObject, PPOINTFLOAT_FID_CACHE lpCache)
-{
-	if (lpCache->cached) return;
-	lpCache->clazz = (*env)->GetObjectClass(env, lpObject);
-	lpCache->y = (*env)->GetFieldID(env, lpCache->clazz, "y", "F");
-	lpCache->x = (*env)->GetFieldID(env, lpCache->clazz, "x", "F");
-	lpCache->cached = 1;
-}
-
-POINTFLOAT *getPOINTFLOATFields(JNIEnv *env, jobject lpObject, POINTFLOAT *lpStruct)
-{
-	PPOINTFLOAT_FID_CACHE lpCache = &POINTFLOATFc;
-	if (!lpCache->cached) cachePOINTFLOATFids(env, lpObject, lpCache);
-	lpStruct->y = (*env)->GetFloatField(env, lpObject, lpCache->y);
-	lpStruct->x = (*env)->GetFloatField(env, lpObject, lpCache->x);
-	return lpStruct;
-}
-
-void setPOINTFLOATFields(JNIEnv *env, jobject lpObject, POINTFLOAT *lpStruct)
-{
-	PPOINTFLOAT_FID_CACHE lpCache = &POINTFLOATFc;
-	if (!lpCache->cached) cachePOINTFLOATFids(env, lpObject, lpCache);
-	(*env)->SetFloatField(env, lpObject, lpCache->y, (jfloat)lpStruct->y);
-	(*env)->SetFloatField(env, lpObject, lpCache->x, (jfloat)lpStruct->x);
-}
-
-typedef struct PIXELFORMATDESCRIPTOR_FID_CACHE {
-	int cached;
-	jclass clazz;
-	jfieldID dwDamageMask, dwVisibleMask, dwLayerMask, bReserved, iLayerType, cAuxBuffers, cStencilBits, cDepthBits, cAccumAlphaBits, cAccumBlueBits, cAccumGreenBits, cAccumRedBits, cAccumBits, cAlphaShift, cAlphaBits, cBlueShift, cBlueBits, cGreenShift, cGreenBits, cRedShift, cRedBits, cColorBits, iPixelType, dwFlags, nVersion, nSize;
-} PIXELFORMATDESCRIPTOR_FID_CACHE;
-typedef PIXELFORMATDESCRIPTOR_FID_CACHE *PPIXELFORMATDESCRIPTOR_FID_CACHE;
-
-PIXELFORMATDESCRIPTOR_FID_CACHE PIXELFORMATDESCRIPTORFc;
-
-void cachePIXELFORMATDESCRIPTORFids(JNIEnv *env, jobject lpObject, PPIXELFORMATDESCRIPTOR_FID_CACHE lpCache)
-{
-	if (lpCache->cached) return;
-	lpCache->clazz = (*env)->GetObjectClass(env, lpObject);
-	lpCache->dwDamageMask = (*env)->GetFieldID(env, lpCache->clazz, "dwDamageMask", "I");
-	lpCache->dwVisibleMask = (*env)->GetFieldID(env, lpCache->clazz, "dwVisibleMask", "I");
-	lpCache->dwLayerMask = (*env)->GetFieldID(env, lpCache->clazz, "dwLayerMask", "I");
-	lpCache->bReserved = (*env)->GetFieldID(env, lpCache->clazz, "bReserved", "B");
-	lpCache->iLayerType = (*env)->GetFieldID(env, lpCache->clazz, "iLayerType", "B");
-	lpCache->cAuxBuffers = (*env)->GetFieldID(env, lpCache->clazz, "cAuxBuffers", "B");
-	lpCache->cStencilBits = (*env)->GetFieldID(env, lpCache->clazz, "cStencilBits", "B");
-	lpCache->cDepthBits = (*env)->GetFieldID(env, lpCache->clazz, "cDepthBits", "B");
-	lpCache->cAccumAlphaBits = (*env)->GetFieldID(env, lpCache->clazz, "cAccumAlphaBits", "B");
-	lpCache->cAccumBlueBits = (*env)->GetFieldID(env, lpCache->clazz, "cAccumBlueBits", "B");
-	lpCache->cAccumGreenBits = (*env)->GetFieldID(env, lpCache->clazz, "cAccumGreenBits", "B");
-	lpCache->cAccumRedBits = (*env)->GetFieldID(env, lpCache->clazz, "cAccumRedBits", "B");
-	lpCache->cAccumBits = (*env)->GetFieldID(env, lpCache->clazz, "cAccumBits", "B");
-	lpCache->cAlphaShift = (*env)->GetFieldID(env, lpCache->clazz, "cAlphaShift", "B");
-	lpCache->cAlphaBits = (*env)->GetFieldID(env, lpCache->clazz, "cAlphaBits", "B");
-	lpCache->cBlueShift = (*env)->GetFieldID(env, lpCache->clazz, "cBlueShift", "B");
-	lpCache->cBlueBits = (*env)->GetFieldID(env, lpCache->clazz, "cBlueBits", "B");
-	lpCache->cGreenShift = (*env)->GetFieldID(env, lpCache->clazz, "cGreenShift", "B");
-	lpCache->cGreenBits = (*env)->GetFieldID(env, lpCache->clazz, "cGreenBits", "B");
-	lpCache->cRedShift = (*env)->GetFieldID(env, lpCache->clazz, "cRedShift", "B");
-	lpCache->cRedBits = (*env)->GetFieldID(env, lpCache->clazz, "cRedBits", "B");
-	lpCache->cColorBits = (*env)->GetFieldID(env, lpCache->clazz, "cColorBits", "B");
-	lpCache->iPixelType = (*env)->GetFieldID(env, lpCache->clazz, "iPixelType", "B");
-	lpCache->dwFlags = (*env)->GetFieldID(env, lpCache->clazz, "dwFlags", "I");
-	lpCache->nVersion = (*env)->GetFieldID(env, lpCache->clazz, "nVersion", "S");
-	lpCache->nSize = (*env)->GetFieldID(env, lpCache->clazz, "nSize", "S");
-	lpCache->cached = 1;
-}
-
-PIXELFORMATDESCRIPTOR *getPIXELFORMATDESCRIPTORFields(JNIEnv *env, jobject lpObject, PIXELFORMATDESCRIPTOR *lpStruct)
-{
-	PPIXELFORMATDESCRIPTOR_FID_CACHE lpCache = &PIXELFORMATDESCRIPTORFc;
-	if (!lpCache->cached) cachePIXELFORMATDESCRIPTORFids(env, lpObject, lpCache);
-	lpStruct->dwDamageMask = (*env)->GetIntField(env, lpObject, lpCache->dwDamageMask);
-	lpStruct->dwVisibleMask = (*env)->GetIntField(env, lpObject, lpCache->dwVisibleMask);
-	lpStruct->dwLayerMask = (*env)->GetIntField(env, lpObject, lpCache->dwLayerMask);
-	lpStruct->bReserved = (*env)->GetByteField(env, lpObject, lpCache->bReserved);
-	lpStruct->iLayerType = (*env)->GetByteField(env, lpObject, lpCache->iLayerType);
-	lpStruct->cAuxBuffers = (*env)->GetByteField(env, lpObject, lpCache->cAuxBuffers);
-	lpStruct->cStencilBits = (*env)->GetByteField(env, lpObject, lpCache->cStencilBits);
-	lpStruct->cDepthBits = (*env)->GetByteField(env, lpObject, lpCache->cDepthBits);
-	lpStruct->cAccumAlphaBits = (*env)->GetByteField(env, lpObject, lpCache->cAccumAlphaBits);
-	lpStruct->cAccumBlueBits = (*env)->GetByteField(env, lpObject, lpCache->cAccumBlueBits);
-	lpStruct->cAccumGreenBits = (*env)->GetByteField(env, lpObject, lpCache->cAccumGreenBits);
-	lpStruct->cAccumRedBits = (*env)->GetByteField(env, lpObject, lpCache->cAccumRedBits);
-	lpStruct->cAccumBits = (*env)->GetByteField(env, lpObject, lpCache->cAccumBits);
-	lpStruct->cAlphaShift = (*env)->GetByteField(env, lpObject, lpCache->cAlphaShift);
-	lpStruct->cAlphaBits = (*env)->GetByteField(env, lpObject, lpCache->cAlphaBits);
-	lpStruct->cBlueShift = (*env)->GetByteField(env, lpObject, lpCache->cBlueShift);
-	lpStruct->cBlueBits = (*env)->GetByteField(env, lpObject, lpCache->cBlueBits);
-	lpStruct->cGreenShift = (*env)->GetByteField(env, lpObject, lpCache->cGreenShift);
-	lpStruct->cGreenBits = (*env)->GetByteField(env, lpObject, lpCache->cGreenBits);
-	lpStruct->cRedShift = (*env)->GetByteField(env, lpObject, lpCache->cRedShift);
-	lpStruct->cRedBits = (*env)->GetByteField(env, lpObject, lpCache->cRedBits);
-	lpStruct->cColorBits = (*env)->GetByteField(env, lpObject, lpCache->cColorBits);
-	lpStruct->iPixelType = (*env)->GetByteField(env, lpObject, lpCache->iPixelType);
-	lpStruct->dwFlags = (*env)->GetIntField(env, lpObject, lpCache->dwFlags);
-	lpStruct->nVersion = (*env)->GetShortField(env, lpObject, lpCache->nVersion);
-	lpStruct->nSize = (*env)->GetShortField(env, lpObject, lpCache->nSize);
-	return lpStruct;
-}
-
-void setPIXELFORMATDESCRIPTORFields(JNIEnv *env, jobject lpObject, PIXELFORMATDESCRIPTOR *lpStruct)
-{
-	PPIXELFORMATDESCRIPTOR_FID_CACHE lpCache = &PIXELFORMATDESCRIPTORFc;
-	if (!lpCache->cached) cachePIXELFORMATDESCRIPTORFids(env, lpObject, lpCache);
-	(*env)->SetIntField(env, lpObject, lpCache->dwDamageMask, (jint)lpStruct->dwDamageMask);
-	(*env)->SetIntField(env, lpObject, lpCache->dwVisibleMask, (jint)lpStruct->dwVisibleMask);
-	(*env)->SetIntField(env, lpObject, lpCache->dwLayerMask, (jint)lpStruct->dwLayerMask);
-	(*env)->SetByteField(env, lpObject, lpCache->bReserved, (jbyte)lpStruct->bReserved);
-	(*env)->SetByteField(env, lpObject, lpCache->iLayerType, (jbyte)lpStruct->iLayerType);
-	(*env)->SetByteField(env, lpObject, lpCache->cAuxBuffers, (jbyte)lpStruct->cAuxBuffers);
-	(*env)->SetByteField(env, lpObject, lpCache->cStencilBits, (jbyte)lpStruct->cStencilBits);
-	(*env)->SetByteField(env, lpObject, lpCache->cDepthBits, (jbyte)lpStruct->cDepthBits);
-	(*env)->SetByteField(env, lpObject, lpCache->cAccumAlphaBits, (jbyte)lpStruct->cAccumAlphaBits);
-	(*env)->SetByteField(env, lpObject, lpCache->cAccumBlueBits, (jbyte)lpStruct->cAccumBlueBits);
-	(*env)->SetByteField(env, lpObject, lpCache->cAccumGreenBits, (jbyte)lpStruct->cAccumGreenBits);
-	(*env)->SetByteField(env, lpObject, lpCache->cAccumRedBits, (jbyte)lpStruct->cAccumRedBits);
-	(*env)->SetByteField(env, lpObject, lpCache->cAccumBits, (jbyte)lpStruct->cAccumBits);
-	(*env)->SetByteField(env, lpObject, lpCache->cAlphaShift, (jbyte)lpStruct->cAlphaShift);
-	(*env)->SetByteField(env, lpObject, lpCache->cAlphaBits, (jbyte)lpStruct->cAlphaBits);
-	(*env)->SetByteField(env, lpObject, lpCache->cBlueShift, (jbyte)lpStruct->cBlueShift);
-	(*env)->SetByteField(env, lpObject, lpCache->cBlueBits, (jbyte)lpStruct->cBlueBits);
-	(*env)->SetByteField(env, lpObject, lpCache->cGreenShift, (jbyte)lpStruct->cGreenShift);
-	(*env)->SetByteField(env, lpObject, lpCache->cGreenBits, (jbyte)lpStruct->cGreenBits);
-	(*env)->SetByteField(env, lpObject, lpCache->cRedShift, (jbyte)lpStruct->cRedShift);
-	(*env)->SetByteField(env, lpObject, lpCache->cRedBits, (jbyte)lpStruct->cRedBits);
-	(*env)->SetByteField(env, lpObject, lpCache->cColorBits, (jbyte)lpStruct->cColorBits);
-	(*env)->SetByteField(env, lpObject, lpCache->iPixelType, (jbyte)lpStruct->iPixelType);
-	(*env)->SetIntField(env, lpObject, lpCache->dwFlags, (jint)lpStruct->dwFlags);
-	(*env)->SetShortField(env, lpObject, lpCache->nVersion, (jshort)lpStruct->nVersion);
-	(*env)->SetShortField(env, lpObject, lpCache->nSize, (jshort)lpStruct->nSize);
-}
-
diff --git a/bundles/org.eclipse.swt.opengl/win32/library/structs.h b/bundles/org.eclipse.swt.opengl/win32/library/structs.h
deleted file mode 100644
index 14c62a8..0000000
--- a/bundles/org.eclipse.swt.opengl/win32/library/structs.h
+++ /dev/null
@@ -1,24 +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
- *******************************************************************************/
-#include <windows.h>
-
-GLYPHMETRICSFLOAT *getGLYPHMETRICSFLOATFields(JNIEnv *env, jobject lpObject, GLYPHMETRICSFLOAT *lpStruct);
-void setGLYPHMETRICSFLOATFields(JNIEnv *env, jobject lpObject, GLYPHMETRICSFLOAT *lpStruct);
-
-LAYERPLANEDESCRIPTOR *getLAYERPLANEDESCRIPTORFields(JNIEnv *env, jobject lpObject, LAYERPLANEDESCRIPTOR *lpStruct);
-void setLAYERPLANEDESCRIPTORFields(JNIEnv *env, jobject lpObject, LAYERPLANEDESCRIPTOR *lpStruct);
-
-POINTFLOAT *getPOINTFLOATFields(JNIEnv *env, jobject lpObject, POINTFLOAT *lpStruct);
-void setPOINTFLOATFields(JNIEnv *env, jobject lpObject, POINTFLOAT *lpStruct);
-
-PIXELFORMATDESCRIPTOR *getPIXELFORMATDESCRIPTORFields(JNIEnv *env, jobject lpObject, PIXELFORMATDESCRIPTOR *lpStruct);
-void setPIXELFORMATDESCRIPTORFields(JNIEnv *env, jobject lpObject, PIXELFORMATDESCRIPTOR *lpStruct);
-
diff --git a/bundles/org.eclipse.swt.opengl/win32/library/swt.rc b/bundles/org.eclipse.swt.opengl/win32/library/swt.rc
deleted file mode 100644
index c5b350c..0000000
--- a/bundles/org.eclipse.swt.opengl/win32/library/swt.rc
+++ /dev/null
@@ -1,67 +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
- *******************************************************************************/
- 
-#include "windows.h"
-
-VS_VERSION_INFO VERSIONINFO
- PRODUCTVERSION 0,0,0,0
- FILEFLAGSMASK 0x3fL
-#ifdef _DEBUG
- FILEFLAGS 0x1L
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS 0x40000L
- FILETYPE 0x2L
- FILESUBTYPE 0x0L
-BEGIN
-    BLOCK "StringFileInfo"
-    BEGIN
-        BLOCK "040904b0"
-        BEGIN
-            VALUE "CompanyName", "IBM Corporation\0"
-            VALUE "FileDescription", "Standard Widget Toolkit\0"
-            VALUE "InternalName", "SWT\0"
-            VALUE "LegalCopyright", "© Copyright 2000, 2003 IBM Corp.  All Rights Reserved.\0"
-            VALUE "OriginalFilename", SWT_ORG_FILENAME
-            VALUE "ProductName", "\0"
-            VALUE "ProductVersion", "0,0,0,0\0"
-        END
-    END
-    BLOCK "VarFileInfo"
-    BEGIN
-        VALUE "Translation", 0x409, 1200
-    END
-END
-
-/* SHMENUBAR Pocket PC 
- * ID_MENU SHMENUBAR DISCARDABLE
- * BEGIN
- * 	ID_MENU, 1,
- *  IMAGE_NONE, ID_MENU_ITEM1, 0, 0,
- *  0, 0, 0,
- * END
- * ID_MENU MENU DISCARDABLE
- * BEGIN
- *  MENUITEM "", ID_MENU_ITEM1
- * END
- */
-100 RCDATA DISCARDABLE 
-BEGIN
-    100, 1,
-    -2, 101, 0, 0, 
-    0, 0, 0,
-END
-
-100 MENU DISCARDABLE
-BEGIN
-	MENUITEM "", 101
-END
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/GLCanvas.java b/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/GLCanvas.java
deleted file mode 100644
index 32b1a1a..0000000
--- a/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/GLCanvas.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.opengl.internal.win32.*;
-import org.eclipse.swt.internal.win32.*;
-import org.eclipse.swt.widgets.*;
-
-/**
- * GLCanvas is a widget capable of displaying OpenGL content.
- */
-
-public class GLCanvas extends Canvas {
-	int context;
-	int pixelFormat;
-
-/**
- * Create a GLCanvas widget using the attributes described in the GLData
- * object provided.
- *
- * @param parent a composite widget
- * @param style the bitwise OR'ing of widget styles
- * @param data the requested attributes of the GLCanvas
- *
- * @exception IllegalArgumentException
- * <ul><li>ERROR_NULL_ARGUMENT when the data is null
- *     <li>ERROR_UNSUPPORTED_DEPTH when the requested attributes cannot be provided</ul> 
- * @exception SWTException
- * <ul><li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread
- *     <li>ERROR_CANNOT_CREATE_OBJECT when failed to create OLE Object
- *     <li>ERROR_CANNOT_OPEN_FILE when failed to open file
- *     <li>ERROR_INTERFACE_NOT_FOUND when unable to create callbacks for OLE Interfaces
- *     <li>ERROR_INVALID_CLASSID
- * </ul>
- */
-public GLCanvas (Composite parent, int style, GLData data) {
-	super (parent, style);
-	if (data == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
-
-	PIXELFORMATDESCRIPTOR pfd = new PIXELFORMATDESCRIPTOR ();
-	pfd.nSize = (short) PIXELFORMATDESCRIPTOR.sizeof;
-	pfd.nVersion = 1;
-	pfd.dwFlags = WGL.PFD_DRAW_TO_WINDOW | WGL.PFD_SUPPORT_OPENGL;
-	pfd.dwLayerMask = WGL.PFD_MAIN_PLANE;
-	pfd.iPixelType = (byte) WGL.PFD_TYPE_RGBA;
-	if (data.doubleBuffer) pfd.dwFlags |= WGL.PFD_DOUBLEBUFFER;
-	if (data.stereo) pfd.dwFlags |= WGL.PFD_STEREO;
-	pfd.cRedBits = (byte) data.redSize;
-	pfd.cGreenBits = (byte) data.greenSize;
-	pfd.cBlueBits = (byte) data.blueSize;
-	pfd.cAlphaBits = (byte) data.alphaSize;
-	pfd.cDepthBits = (byte) data.depthSize;
-	pfd.cStencilBits = (byte) data.stencilSize;
-	pfd.cAccumRedBits = (byte) data.accumRedSize;
-	pfd.cAccumGreenBits = (byte) data.accumGreenSize;
-	pfd.cAccumBlueBits = (byte) data.accumBlueSize;
-	pfd.cAccumAlphaBits = (byte) data.accumAlphaSize;
-	pfd.cAccumBits = (byte) (pfd.cAccumRedBits + pfd.cAccumGreenBits + pfd.cAccumBlueBits + pfd.cAccumAlphaBits);
-	//FIXME - use wglChoosePixelFormatARB
-//	if (data.sampleBuffers > 0) {
-//		wglAttrib [pos++] = WGL.WGL_SAMPLE_BUFFERS_ARB;
-//		wglAttrib [pos++] = data.sampleBuffers;
-//	}
-//	if (data.samples > 0) {
-//		wglAttrib [pos++] = WGL.WGL_SAMPLES_ARB;
-//		wglAttrib [pos++] = data.samples;
-//	}
-
-	int hDC = OS.GetDC (handle);
-	pixelFormat = WGL.ChoosePixelFormat (hDC, pfd);
-	if (pixelFormat == 0) {
-		OS.ReleaseDC (handle, hDC);
-		SWT.error (SWT.ERROR_UNSUPPORTED_DEPTH);
-	}
-	if (!WGL.SetPixelFormat (hDC, pixelFormat, pfd)) {
-		OS.ReleaseDC (handle, hDC);
-		SWT.error (SWT.ERROR_UNSUPPORTED_DEPTH);
-	}
-	context = WGL.wglCreateContext (hDC);
-	if (context == 0) {
-		OS.ReleaseDC (handle, hDC);
-		SWT.error (SWT.ERROR_NO_HANDLES);
-	}
-	OS.ReleaseDC (handle, hDC);
-//	if (share != null) {
-//		WGL.wglShareLists (context, share.context);
-//	}
-	
-	Listener listener = new Listener () {
-		public void handleEvent (Event event) {
-			switch (event.type) {
-			case SWT.Dispose:
-				WGL.wglDeleteContext (context);
-				break;
-			}
-		}
-	};
-	addListener (SWT.Dispose, listener);
-}
-
-/**
- * Returns a GLData object describing the created context.
- *  
- * @return GLData description of the OpenGL context attributes
- * @exception SWTException <ul>
- *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
-public GLData getGLData () {
-	checkWidget ();
-	GLData data = new GLData ();
-	PIXELFORMATDESCRIPTOR pfd = new PIXELFORMATDESCRIPTOR ();
-	pfd.nSize = (short) PIXELFORMATDESCRIPTOR.sizeof;
-	int hDC = OS.GetDC (handle);
-	WGL.DescribePixelFormat(hDC, pixelFormat, PIXELFORMATDESCRIPTOR.sizeof, pfd);
-	OS.ReleaseDC (handle, hDC);
-	data.doubleBuffer = (pfd.dwFlags & WGL.PFD_DOUBLEBUFFER) != 0;
-	data.stereo = (pfd.dwFlags & WGL.PFD_STEREO) != 0;
-	data.redSize = pfd.cRedBits;
-	data.greenSize = pfd.cGreenBits;
-	data.blueSize = pfd.cBlueBits;
-	data.alphaSize = pfd.cAlphaBits;
-	data.depthSize = pfd.cDepthBits;
-	data.stencilSize = pfd.cStencilBits;
-	data.accumRedSize = pfd.cAccumRedBits;
-	data.accumGreenSize = pfd.cAccumGreenBits;
-	data.accumBlueSize = pfd.cAccumBlueBits;
-	data.accumAlphaSize = pfd.cAccumAlphaBits;
-	return data;
-}
-
-/**
- * Returns a boolean indicating whether the receiver's OpenGL context
- * is the current context.
- *  
- * @return true if the receiver holds the current OpenGL context,
- * false otherwise
- * @exception SWTException <ul>
- *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
-public boolean isCurrent () {
-	checkWidget ();
-	return WGL.wglGetCurrentContext () == handle;
-}
-
-/**
- * Sets the OpenGL context associated with this GLCanvas to be the
- * current GL context.
- * 
- * @exception SWTException <ul>
- *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
-public void setCurrent () {
-	checkWidget ();
-	if (WGL.wglGetCurrentContext () == handle) return;
-	int hDC = OS.GetDC (handle);
-	WGL.wglMakeCurrent (hDC, context);
-	OS.ReleaseDC (handle, hDC);
-}
-
-/**
- * Swaps the front and back color buffers.
- * 
- * @exception SWTException <ul>
- *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- */
-public void swapBuffers () {
-	checkWidget ();
-	int hDC = OS.GetDC (handle);
-	WGL.SwapBuffers (hDC);
-	OS.ReleaseDC (handle, hDC);
-}
-}
diff --git a/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/LAYERPLANEDESCRIPTOR.java b/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/LAYERPLANEDESCRIPTOR.java
deleted file mode 100644
index 8f674ae..0000000
--- a/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/LAYERPLANEDESCRIPTOR.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl.internal.win32;
-
-
-public class LAYERPLANEDESCRIPTOR {
-    public short nSize;
-    public short nVersion;
-    public int dwFlags;
-    public byte iPixelType;
-    public byte cColorBits;
-    public byte cRedBits;
-    public byte cRedShift;
-    public byte cGreenBits;
-    public byte cGreenShift;
-    public byte cBlueBits;
-    public byte cBlueShift;
-    public byte cAlphaBits;
-    public byte cAlphaShift;
-    public byte cAccumBits;
-    public byte cAccumRedBits;
-    public byte cAccumGreenBits;
-    public byte cAccumBlueBits;
-    public byte cAccumAlphaBits;
-    public byte cDepthBits;
-    public byte cStencilBits;
-    public byte cAuxBuffers;
-    public byte iLayerPlane;
-    public byte bReserved;
-    public int crTransparent;
-	public static final int sizeof = 36;
-}
diff --git a/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/PIXELFORMATDESCRIPTOR.java b/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/PIXELFORMATDESCRIPTOR.java
deleted file mode 100644
index a817010..0000000
--- a/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/PIXELFORMATDESCRIPTOR.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl.internal.win32;
-
-
-public class PIXELFORMATDESCRIPTOR {
-   	public short nSize;
-    public short nVersion;
-    public int dwFlags;
-    public byte iPixelType;
-    public byte cColorBits;
-    public byte cRedBits;
-    public byte cRedShift;
-    public byte cGreenBits;
-    public byte cGreenShift;
-    public byte cBlueBits;
-    public byte cBlueShift;
-    public byte cAlphaBits;
-    public byte cAlphaShift;
-    public byte cAccumBits;
-    public byte cAccumRedBits;
-    public byte cAccumGreenBits;
-    public byte cAccumBlueBits;
-    public byte cAccumAlphaBits;
-    public byte cDepthBits;
-    public byte cStencilBits;
-    public byte cAuxBuffers;
-    public byte iLayerType;
-    public byte bReserved;
-    public int dwLayerMask;
-    public int dwVisibleMask;
-    public int dwDamageMask;
-	public static final int sizeof = 40;
-}
diff --git a/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/WGL.java b/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/WGL.java
deleted file mode 100644
index 52db669..0000000
--- a/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/WGL.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl.internal.win32;
-
-
-import org.eclipse.swt.opengl.*;
-import org.eclipse.swt.opengl.Library;
-import org.eclipse.swt.internal.win32.OS;
-
-public class WGL {
-	
-static {
-	Library.loadLibrary("gl");
-}
-	
-public static final int WGL_FONT_LINES      = 0;
-public static final int WGL_FONT_POLYGONS   = 1;
-
-/* LAYERPLANEDESCRIPTOR flags */
-public static final int LPD_DOUBLEBUFFER        = 0x00000001;
-public static final int LPD_STEREO              = 0x00000002;
-public static final int LPD_SUPPORT_GDI         = 0x00000010;
-public static final int LPD_SUPPORT_OPENGL      = 0x00000020;
-public static final int LPD_SHARE_DEPTH         = 0x00000040;
-public static final int LPD_SHARE_STENCIL       = 0x00000080;
-public static final int LPD_SHARE_ACCUM         = 0x00000100;
-public static final int LPD_SWAP_EXCHANGE       = 0x00000200;
-public static final int LPD_SWAP_COPY           = 0x00000400;
-public static final int LPD_TRANSPARENT         = 0x00001000;
-
-public static final int LPD_TYPE_RGBA        = 0;
-public static final int LPD_TYPE_COLORINDEX  = 1;
-
-/* wglSwapLayerBuffers flags */
-public static final int WGL_SWAP_MAIN_PLANE     = 0x00000001;
-public static final int WGL_SWAP_OVERLAY1       = 0x00000002;
-public static final int WGL_SWAP_OVERLAY2       = 0x00000004;
-public static final int WGL_SWAP_OVERLAY3       = 0x00000008;
-public static final int WGL_SWAP_OVERLAY4       = 0x00000010;
-public static final int WGL_SWAP_OVERLAY5       = 0x00000020;
-public static final int WGL_SWAP_OVERLAY6       = 0x00000040;
-public static final int WGL_SWAP_OVERLAY7       = 0x00000080;
-public static final int WGL_SWAP_OVERLAY8       = 0x00000100;
-public static final int WGL_SWAP_OVERLAY9       = 0x00000200;
-public static final int WGL_SWAP_OVERLAY10      = 0x00000400;
-public static final int WGL_SWAP_OVERLAY11      = 0x00000800;
-public static final int WGL_SWAP_OVERLAY12      = 0x00001000;
-public static final int WGL_SWAP_OVERLAY13      = 0x00002000;
-public static final int WGL_SWAP_OVERLAY14      = 0x00004000;
-public static final int WGL_SWAP_OVERLAY15      = 0x00008000;
-public static final int WGL_SWAP_UNDERLAY1      = 0x00010000;
-public static final int WGL_SWAP_UNDERLAY2      = 0x00020000;
-public static final int WGL_SWAP_UNDERLAY3      = 0x00040000;
-public static final int WGL_SWAP_UNDERLAY4      = 0x00080000;
-public static final int WGL_SWAP_UNDERLAY5      = 0x00100000;
-public static final int WGL_SWAP_UNDERLAY6      = 0x00200000;
-public static final int WGL_SWAP_UNDERLAY7      = 0x00400000;
-public static final int WGL_SWAP_UNDERLAY8      = 0x00800000;
-public static final int WGL_SWAP_UNDERLAY9      = 0x01000000;
-public static final int WGL_SWAP_UNDERLAY10     = 0x02000000;
-public static final int WGL_SWAP_UNDERLAY11     = 0x04000000;
-public static final int WGL_SWAP_UNDERLAY12     = 0x08000000;
-public static final int WGL_SWAP_UNDERLAY13     = 0x10000000;
-public static final int WGL_SWAP_UNDERLAY14     = 0x20000000;
-public static final int WGL_SWAP_UNDERLAY15     = 0x40000000;
-
-/* pixel types */
-public static final int PFD_TYPE_RGBA        = 0;
-public static final int PFD_TYPE_COLORINDEX  = 1;
-
-/* layer types */
-public static final int PFD_MAIN_PLANE       = 0;
-public static final int PFD_OVERLAY_PLANE    = 1;
-public static final int PFD_UNDERLAY_PLANE   = (-1);
-
-/* PIXELFORMATDESCRIPTOR flags */
-public static final int PFD_DOUBLEBUFFER            = 0x00000001;
-public static final int PFD_STEREO                  = 0x00000002;
-public static final int PFD_DRAW_TO_WINDOW          = 0x00000004;
-public static final int PFD_DRAW_TO_BITMAP          = 0x00000008;
-public static final int PFD_SUPPORT_GDI             = 0x00000010;
-public static final int PFD_SUPPORT_OPENGL          = 0x00000020;
-public static final int PFD_GENERIC_FORMAT          = 0x00000040;
-public static final int PFD_NEED_PALETTE            = 0x00000080;
-public static final int PFD_NEED_SYSTEM_PALETTE     = 0x00000100;
-public static final int PFD_SWAP_EXCHANGE           = 0x00000200;
-public static final int PFD_SWAP_COPY               = 0x00000400;
-public static final int PFD_SWAP_LAYER_BUFFERS      = 0x00000800;
-public static final int PFD_GENERIC_ACCELERATED     = 0x00001000;
-public static final int PFD_SUPPORT_DIRECTDRAW      = 0x00002000;
-
-/* PIXELFORMATDESCRIPTOR flags for use in ChoosePixelFormat only */
-public static final int PFD_DEPTH_DONTCARE          = 0x20000000;
-public static final int PFD_DOUBLEBUFFER_DONTCARE   = 0x40000000;
-public static final int PFD_STEREO_DONTCARE         = 0x80000000;
-
-public static final native int ChoosePixelFormat(int hdc, PIXELFORMATDESCRIPTOR ppfd);
-public static final native int DescribePixelFormat(int hdc, int iPixelFormat, int nBytes, PIXELFORMATDESCRIPTOR ppfd);
-public static final native int GetPixelFormat(int hdc);
-public static final native boolean SetPixelFormat(int hdc, int iPixelFormat, PIXELFORMATDESCRIPTOR ppfd);
-public static final native boolean SwapBuffers(int hdc);
-public static final native boolean wglCopyContext(int hglrcSrc, int hglrcDst, int mask);
-public static final native int wglCreateContext(int hdc);
-public static final native int wglCreateLayerContext(int hdc, int iLayerPlane);
-public static final native boolean wglDeleteContext(int hglrc);
-public static final native int wglGetCurrentContext();
-public static final native int wglGetCurrentDC();
-public static final native int wglGetProcAddress(byte[] lpszProc);
-public static final native boolean wglMakeCurrent(int hdc, int hglrc);
-public static final native boolean wglShareLists(int hglrc1, int hglrc2);
-public static final native boolean wglUseFontBitmapsA(int hdc, int first, int count, int listBase);
-public static final native boolean wglUseFontBitmapsW(int hdc, int first, int count, int listBase);
-public static final boolean wglUseFontBitmaps(int hdc, int first, int count, int listBase) {
-	if (OS.IsUnicode) return wglUseFontBitmapsW(hdc, first, count, listBase);
-	return wglUseFontBitmapsA(hdc, first, count, listBase);
-}
-public static final native boolean wglUseFontOutlinesA(int hdc, int first, int count, int listBase, float deviation, float extrusion, int format, int lpgmf);
-public static final native boolean wglUseFontOutlinesW(int hdc, int first, int count, int listBase, float deviation, float extrusion, int format, int lpgmf);
-public static final boolean wglUseFontOutlines(int hdc, int first, int count, int listBase, float deviation, float extrusion, int format, int lpgmf) {
-	if (OS.IsUnicode) return wglUseFontOutlinesW(hdc, first, count, listBase, deviation, extrusion, format, lpgmf);
-	return wglUseFontOutlinesA(hdc, first, count, listBase, deviation, extrusion, format, lpgmf);
-}
-public static final native boolean wglDescribeLayerPlane(int hdc, int iPixelFormat, int iLayerPlane, int nBytes, LAYERPLANEDESCRIPTOR plpd);
-public static final native int wglSetLayerPaletteEntries(int hdc, int iLayerPlane, int iStart, int cEntries, int[] pcr);
-public static final native int wglGetLayerPaletteEntries(int hdc, int iLayerPlane, int iStart, int cEntries, int[] pcr);
-public static final native boolean wglRealizeLayerPalette(int hdc, int iLayerPlane, boolean bRealize);
-public static final native boolean wglSwapLayerBuffers(int hdc, int fuPlanes);
-}
diff --git a/bundles/org.eclipse.swt.tools/.classpath b/bundles/org.eclipse.swt.tools/.classpath
index 95580a7..22ab26b 100644
--- a/bundles/org.eclipse.swt.tools/.classpath
+++ b/bundles/org.eclipse.swt.tools/.classpath
@@ -1,11 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="JNI Generation"/>
+	<classpathentry kind="src" path="Mac Generation"/>
 	<classpathentry kind="src" path="Sleak"/>
-	<classpathentry kind="src" path="NativeStats"/>
 	<classpathentry kind="src" path="Mozilla Generation"/>
+	<classpathentry kind="src" path="NativeStats"/>
 	<classpathentry kind="src" path="Icon Exe"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/bundles/org.eclipse.swt.tools/.project b/bundles/org.eclipse.swt.tools/.project
index 8dd524d..d03eade 100644
--- a/bundles/org.eclipse.swt.tools/.project
+++ b/bundles/org.eclipse.swt.tools/.project
@@ -12,8 +12,19 @@
 			<arguments>
 			</arguments>
 		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
 	</buildSpec>
 	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
 		<nature>org.eclipse.jdt.core.javanature</nature>
 	</natures>
 </projectDescription>
diff --git a/bundles/org.eclipse.swt.tools/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.swt.tools/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..7f64b31
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Mon Dec 11 15:13:24 EST 2006
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.3
diff --git a/bundles/org.eclipse.swt.tools/Icon Exe/org/eclipse/swt/tools/internal/IconExe.java b/bundles/org.eclipse.swt.tools/Icon Exe/org/eclipse/swt/tools/internal/IconExe.java
index 26226a3..d8cb468 100644
--- a/bundles/org.eclipse.swt.tools/Icon Exe/org/eclipse/swt/tools/internal/IconExe.java
+++ b/bundles/org.eclipse.swt.tools/Icon Exe/org/eclipse/swt/tools/internal/IconExe.java
@@ -222,7 +222,7 @@
 		}
 		System.out.println("Resource Directory ["+sType+"]"+" (Named "+imageResourceDirectory.NumberOfNamedEntries+", ID "+imageResourceDirectory.NumberOfIdEntries+")");
 	}
-	int IRDE_StartOffset = imageResourceDirectoryOffset + IMAGE_RESOURCE_DIRECTORY.SIZEOF;	
+//	int IRDE_StartOffset = imageResourceDirectoryOffset + IMAGE_RESOURCE_DIRECTORY.SIZEOF;	
 	IMAGE_RESOURCE_DIRECTORY_ENTRY[] imageResourceDirectoryEntries = new IMAGE_RESOURCE_DIRECTORY_ENTRY[imageResourceDirectory.NumberOfIdEntries];
 	for (int i = 0; i < imageResourceDirectoryEntries.length; i++) {
 		imageResourceDirectoryEntries[i] = new IMAGE_RESOURCE_DIRECTORY_ENTRY();
@@ -2458,20 +2458,20 @@
 /**
  * Data types (internal)
  */
-private static final int
-	// direct / true color formats with arbitrary masks & shifts
-	TYPE_GENERIC_8 = 0,
-	TYPE_GENERIC_16_MSB = 1,
-	TYPE_GENERIC_16_LSB = 2,
-	TYPE_GENERIC_24 = 3,
-	TYPE_GENERIC_32_MSB = 4,
-	TYPE_GENERIC_32_LSB = 5,
-	// palette indexed color formats
-	TYPE_INDEX_8 = 6,
-	TYPE_INDEX_4 = 7,
-	TYPE_INDEX_2 = 8,
-	TYPE_INDEX_1_MSB = 9,
-	TYPE_INDEX_1_LSB = 10;
+//private static final int
+//	// direct / true color formats with arbitrary masks & shifts
+//	TYPE_GENERIC_8 = 0,
+//	TYPE_GENERIC_16_MSB = 1,
+//	TYPE_GENERIC_16_LSB = 2,
+//	TYPE_GENERIC_24 = 3,
+//	TYPE_GENERIC_32_MSB = 4,
+//	TYPE_GENERIC_32_LSB = 5,
+//	// palette indexed color formats
+//	TYPE_INDEX_8 = 6,
+//	TYPE_INDEX_4 = 7,
+//	TYPE_INDEX_2 = 8,
+//	TYPE_INDEX_1_MSB = 9,
+//	TYPE_INDEX_1_LSB = 10;
 
 /**
  * Computes the required channel shift from a mask.
@@ -2982,8 +2982,8 @@
 	byte[] data = loadData(infoHeader);
 	this.compression = (infoHeader[16] & 0xFF) | ((infoHeader[17] & 0xFF) << 8) | ((infoHeader[18] & 0xFF) << 16) | ((infoHeader[19] & 0xFF) << 24);
 	this.importantColors = (infoHeader[36] & 0xFF) | ((infoHeader[37] & 0xFF) << 8) | ((infoHeader[38] & 0xFF) << 16) | ((infoHeader[39] & 0xFF) << 24);
-	int xPelsPerMeter = (infoHeader[24] & 0xFF) | ((infoHeader[25] & 0xFF) << 8) | ((infoHeader[26] & 0xFF) << 16) | ((infoHeader[27] & 0xFF) << 24);
-	int yPelsPerMeter = (infoHeader[28] & 0xFF) | ((infoHeader[29] & 0xFF) << 8) | ((infoHeader[30] & 0xFF) << 16) | ((infoHeader[31] & 0xFF) << 24);
+//	int xPelsPerMeter = (infoHeader[24] & 0xFF) | ((infoHeader[25] & 0xFF) << 8) | ((infoHeader[26] & 0xFF) << 16) | ((infoHeader[27] & 0xFF) << 24);
+//	int yPelsPerMeter = (infoHeader[28] & 0xFF) | ((infoHeader[29] & 0xFF) << 8) | ((infoHeader[30] & 0xFF) << 16) | ((infoHeader[31] & 0xFF) << 24);
 	int type = (this.compression == 1 /*BMP_RLE8_COMPRESSION*/) || (this.compression == 2 
 
 /*BMP_RLE4_COMPRESSION*/) ? SWT.IMAGE_BMP_RLE : SWT.IMAGE_BMP;
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTClass.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTClass.java
new file mode 100644
index 0000000..219da19
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTClass.java
@@ -0,0 +1,190 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 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.tools.internal;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jdt.core.dom.AST;
+import org.eclipse.jdt.core.dom.ASTParser;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.FieldDeclaration;
+import org.eclipse.jdt.core.dom.ImportDeclaration;
+import org.eclipse.jdt.core.dom.Javadoc;
+import org.eclipse.jdt.core.dom.MethodDeclaration;
+import org.eclipse.jdt.core.dom.TagElement;
+import org.eclipse.jdt.core.dom.TypeDeclaration;
+import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
+import org.eclipse.swt.tools.internal.ASTType.TypeResolver;
+
+public class ASTClass extends ASTItem implements JNIClass {
+	String sourcePath;
+	MetaData metaData;
+
+	ASTClass superclass;
+	ASTField[] fields;
+	ASTMethod[] methods;
+	String name, simpleName, superclassName, packageName;
+	String[] imports;
+	String data;
+	int start;
+	
+	TypeResolver resolver = new TypeResolver() {
+		public String findPath(String simpleName) {
+			if (simpleName.equals(ASTClass.this.simpleName)) return sourcePath;
+			String basePath = sourcePath.substring(0, sourcePath.length() - name.length() - ".java".length());
+			File file = new File(basePath + packageName.replace('.', '/') + "/" + simpleName + ".java");
+			if (file.exists()) {
+				return file.getAbsolutePath();
+			}
+			for (int i = 0; i < imports.length; i++) {
+				file = new File(basePath + imports[i].replace('.', '/') + "/" + simpleName + ".java");
+				if (file.exists()) {
+					return file.getAbsolutePath();				
+				}
+			}
+			return "";
+		}
+		public String resolve(String simpleName) {
+			if (simpleName.equals(ASTClass.this.simpleName)) return packageName + "." + simpleName;
+			String basePath = sourcePath.substring(0, sourcePath.length() - name.length() - ".java".length());
+			File file = new File(basePath + packageName.replace('.', '/') + "/" + simpleName + ".java");
+			if (file.exists()) {
+				return packageName + "." + simpleName;				
+			}
+			for (int i = 0; i < imports.length; i++) {
+				file = new File(basePath + imports[i].replace('.', '/') + "/" + simpleName + ".java");
+				if (file.exists()) {
+					return imports[i] + "." + simpleName;				
+				}
+			}
+			return simpleName;
+		}
+	};
+
+public ASTClass(String sourcePath, MetaData metaData) {
+	this.sourcePath = sourcePath;
+	this.metaData = metaData;
+	
+	String source = JNIGenerator.loadFile(sourcePath);
+	ASTParser parser = ASTParser.newParser(AST.JLS3);
+	parser.setSource(source.toCharArray());
+	CompilationUnit unit = (CompilationUnit)parser.createAST(null);
+	TypeDeclaration type = (TypeDeclaration)unit.types().get(0);
+	simpleName = type.getName().getIdentifier();
+	packageName = unit.getPackage().getName().getFullyQualifiedName();
+	name = packageName + "." + simpleName;
+	superclassName = type.getSuperclassType() != null ? type.getSuperclassType().toString() : null;
+	List imports = unit.imports();
+	this.imports = new String[imports.size()];
+	int count = 0;
+	for (Iterator iterator = imports.iterator(); iterator.hasNext();) {
+		ImportDeclaration imp = (ImportDeclaration) iterator.next();
+		this.imports[count++] = imp.getName().getFullyQualifiedName();
+	}
+	start = type.getStartPosition();
+	
+	Javadoc doc = type.getJavadoc();
+	List tags = null;
+	if (doc != null) {
+		tags = doc.tags();
+		for (Iterator iterator = tags.iterator(); iterator.hasNext();) {
+			TagElement tag = (TagElement) iterator.next();
+			if ("@jniclass".equals(tag.getTagName())) {
+				String data = tag.fragments().get(0).toString();
+				setMetaData(data);
+				break;
+			}
+		}
+	}
+
+	FieldDeclaration[] fields = type.getFields();
+	ArrayList fid = new ArrayList();
+	for (int i = 0; i < fields.length; i++) {
+		FieldDeclaration field = fields[i];
+		List fragments = field.fragments();
+		for (Iterator iterator = fragments.iterator(); iterator.hasNext();) {
+			VariableDeclarationFragment fragment = (VariableDeclarationFragment) iterator.next();
+			fid.add(new ASTField(this, source, field, fragment));
+		}
+	}
+	this.fields = (ASTField[])fid.toArray(new ASTField[fid.size()]);
+	MethodDeclaration[] methods = type.getMethods();
+	ArrayList mid = new ArrayList();
+	for (int i = 0; i < methods.length; i++) {
+		if (methods[i].getReturnType2() == null) continue;
+		mid.add(new ASTMethod(this, source, methods[i]));
+	}
+	this.methods = (ASTMethod[])mid.toArray(new ASTMethod[mid.size()]);
+}
+
+public int hashCode() {
+	return getName().hashCode();
+}
+
+public boolean equals(Object obj) {
+	if (this == obj) return true;
+	if (!(obj instanceof ASTClass)) return false;
+	return ((ASTClass)obj).getName().equals(getName());
+}
+
+public JNIField[] getDeclaredFields() {
+	JNIField[] result = new JNIField[fields.length];
+	System.arraycopy(fields, 0, result, 0, result.length);
+	return result;
+}
+
+public JNIMethod[] getDeclaredMethods() {
+	JNIMethod[] result = new JNIMethod[methods.length];
+	System.arraycopy(methods, 0, result, 0, result.length);
+	return result;
+}
+
+public String getName() {
+	return name;
+}
+
+public JNIClass getSuperclass() {
+	if (superclassName == null) return new ReflectClass(Object.class);
+	if (superclass != null) return superclass;
+	String sourcePath = resolver.findPath(superclassName);
+	return superclass = new ASTClass(sourcePath, metaData);
+}
+
+public String getSimpleName() {
+	return simpleName;
+}
+
+public String getExclude() {
+	return (String)getParam("exclude");
+}
+
+public String getMetaData() {
+	if (data != null) return data;
+	String key = JNIGenerator.toC(getName());
+	return metaData.getMetaData(key, "");
+}
+
+public void setExclude(String str) { 
+	setParam("exclude", str);
+}
+
+public void setMetaData(String value) {
+	data = value;
+}
+
+public String toString() {
+	return getName();
+}
+
+}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTField.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTField.java
new file mode 100644
index 0000000..272dce0
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTField.java
@@ -0,0 +1,137 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 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.tools.internal;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jdt.core.dom.FieldDeclaration;
+import org.eclipse.jdt.core.dom.Javadoc;
+import org.eclipse.jdt.core.dom.TagElement;
+import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
+
+public class ASTField extends ASTItem implements JNIField {
+	ASTClass declaringClass;
+	String name;
+	int modifiers;
+	ASTType type, type64;
+	String data;
+	int start;
+	
+public ASTField(ASTClass declaringClass, String source, FieldDeclaration field, VariableDeclarationFragment fragment) {
+	this.declaringClass = declaringClass;	
+	name = fragment.getName().getIdentifier();
+	modifiers = field.getModifiers();
+	start = field.getStartPosition();
+	
+	Javadoc doc = field.getJavadoc();
+	List tags = null;
+	if (doc != null) {
+		tags = doc.tags();
+		for (Iterator iterator = tags.iterator(); iterator.hasNext();) {
+			TagElement tag = (TagElement) iterator.next();
+			if ("@field".equals(tag.getTagName())) {
+				String data = tag.fragments().get(0).toString();
+				setMetaData(data);
+				break;
+			}
+		}
+	}
+	type = new ASTType(declaringClass.resolver, field.getType(), fragment.getExtraDimensions());
+	type64 =  this.type;
+	if (GEN64) {
+		String s = source.substring(field.getStartPosition(), field.getStartPosition() + field.getLength());
+		if (type.isType("int") && s.indexOf("int /*long*/") != -1) type64 = new ASTType("J");
+		else if (type.isType("float") && s.indexOf("float /*double*/") != -1) type64 = new ASTType("D");
+		else if (type.isType("[I") && (s.indexOf("int /*long*/") != -1 || s.indexOf("int[] /*long[]*/") != -1)) type64 = new ASTType("[J");
+		else if (type.isType("[F") && (s.indexOf("float /*double*/") != -1|| s.indexOf("float[] /*double[]*/") != -1)) type64 = new ASTType("[D");
+		else if (type.isType("long") && s.indexOf("long /*int*/") != -1) type = new ASTType("I");
+		else if (type.isType("double") && s.indexOf("double /*float*/") != -1) type = new ASTType("F");
+		else if (type.isType("[J") && (s.indexOf("long /*int*/") != -1|| s.indexOf("long[] /*int[]*/") != -1)) type = new ASTType("[I");
+		else if (type.isType("[D") && (s.indexOf("double /*float*/") != -1|| s.indexOf("double[] /*float[]*/") != -1)) type = new ASTType("[F");
+	}
+}
+
+public int hashCode() {
+	return getName().hashCode();
+}
+
+public boolean equals(Object obj) {
+	if (this == obj) return true;
+	if (!(obj instanceof ASTField)) return false;
+	return ((ASTField)obj).getName().equals(getName());
+}
+
+public JNIClass getDeclaringClass() {
+	return declaringClass;
+}
+
+public int getModifiers() {
+	return modifiers;
+}
+
+public String getName() {
+	return name;
+}
+
+public JNIType getType() {
+	return type;
+}
+
+public JNIType getType64() {
+	return type64;
+}
+
+public String getAccessor() {
+	return (String)getParam("accessor");
+}
+
+public String getCast() {
+	String cast = ((String)getParam("cast")).trim();
+	if (cast.length() > 0) {
+		if (!cast.startsWith("(")) cast = "(" + cast;
+		if (!cast.endsWith(")")) cast = cast + ")";
+	}
+	return cast;
+}
+
+public String getExclude() {
+	return (String)getParam("exclude");
+}
+
+public String getMetaData() {
+	if (data != null) return data;
+	String className = getDeclaringClass().getSimpleName();
+	String key = className + "_" + getName();
+	return declaringClass.metaData.getMetaData(key, "");
+}
+
+public void setAccessor(String str) { 
+	setParam("accessor", str);
+}
+
+public void setCast(String str) {
+	setParam("cast", str);
+}
+
+public void setExclude(String str) { 
+	setParam("exclude", str);
+}
+
+public void setMetaData(String value) {
+	data = value;
+}
+
+public String toString() {
+	return getName();
+}
+
+}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTItem.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTItem.java
new file mode 100644
index 0000000..9edfd7a
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTItem.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2009 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.tools.internal;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Set;
+
+public abstract class ASTItem extends AbstractItem {
+
+public String flatten() {
+	checkParams();
+	StringBuffer buffer = new StringBuffer();
+	Set set = params.keySet();
+	String[] keys = (String[])set.toArray(new String[set.size()]);
+	Arrays.sort(keys);
+	for (int j = 0; j < keys.length; j++) {
+		String key = keys[j];
+		Object value = params.get(key);
+		String valueStr = "";
+		if (value instanceof String) {
+			valueStr = (String)value;
+		} else if (value instanceof String[]) {
+			String[] values = (String[])value;
+			StringBuffer valueBuffer = new StringBuffer();
+			for (int i = 0; i < values.length; i++) {
+				if (i != 0) valueBuffer.append(" ");
+				valueBuffer.append(values[i]);
+			}
+			valueStr = valueBuffer.toString();
+		} else {
+			valueStr = value.toString();
+		}
+		if (valueStr.length() > 0) {
+			if (buffer.length() != 0) buffer.append(",");
+			buffer.append(key);
+			buffer.append("=");
+			buffer.append(valueStr);
+		}
+	}
+	return buffer.toString();
+}
+
+public void parse(String str) {
+	this.params = new HashMap();
+	if (str.length() == 0) return;
+	String[] params = split(str, ",");
+	for (int i = 0; i < params.length; i++) {
+		String param = params[i];
+		int equals = param.indexOf('=');
+		if (equals ==  -1) {
+			System.out.println("Error: " + str + " param " + param);
+		}
+		String key = param.substring(0, equals).trim();
+		String value = param.substring(equals + 1).trim();
+		setParam(key, value);
+	}
+}
+
+}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTMethod.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTMethod.java
new file mode 100644
index 0000000..0708c16
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTMethod.java
@@ -0,0 +1,204 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 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.tools.internal;
+
+import java.lang.reflect.Modifier;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jdt.core.dom.Javadoc;
+import org.eclipse.jdt.core.dom.MethodDeclaration;
+import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
+import org.eclipse.jdt.core.dom.TagElement;
+
+public class ASTMethod extends ASTItem implements JNIMethod {
+	String name, qualifiedName;
+	int modifiers;
+	ASTClass declaringClass;
+	ASTType[] paramTypes, paramTypes64;
+	ASTType returnType, returnType64;
+	ASTParameter[] parameters;
+	Boolean unique;
+	String data;
+	int start;
+	
+public ASTMethod(ASTClass declaringClass, String source, MethodDeclaration method) {
+	this.declaringClass = declaringClass;
+	
+	name = method.getName().getIdentifier();
+	modifiers = method.getModifiers();
+	start = method.getStartPosition();
+	
+	Javadoc doc = method.getJavadoc();
+	List tags = null;
+	if (doc != null) {
+		tags = doc.tags();
+		for (Iterator iterator = tags.iterator(); iterator.hasNext();) {
+			TagElement tag = (TagElement) iterator.next();
+			if ("@method".equals(tag.getTagName())) {
+				String data = tag.fragments().get(0).toString();
+				setMetaData(data);
+				break;
+			}
+		}
+	}
+	returnType = new ASTType(declaringClass.resolver, method.getReturnType2(), method.getExtraDimensions());
+	returnType64 = returnType;
+	if (GEN64) {
+		String s = source.substring(method.getReturnType2().getStartPosition(), method.getName().getStartPosition());
+		if (returnType.isType("int") && s.indexOf("int /*long*/") != -1) returnType64 = new ASTType("J");
+		else if (returnType.isType("float") && s.indexOf("float /*double*/") != -1) returnType64 = new ASTType("D");
+		else if (returnType.isType("[I") && (s.indexOf("int /*long*/") != -1 || s.indexOf("int[] /*long[]*/") != -1)) returnType64 = new ASTType("[J");
+		else if (returnType.isType("[F") && (s.indexOf("float /*double*/") != -1|| s.indexOf("float[] /*double[]*/") != -1)) returnType64 = new ASTType("[D");
+		else if (returnType.isType("long") && s.indexOf("long /*int*/") != -1) returnType = new ASTType("I");
+		else if (returnType.isType("double") && s.indexOf("double /*float*/") != -1) returnType = new ASTType("F");
+		else if (returnType.isType("[J") && (s.indexOf("long /*int*/") != -1|| s.indexOf("long[] /*int[]*/") != -1)) returnType = new ASTType("[I");
+		else if (returnType.isType("[D") && (s.indexOf("double /*float*/") != -1|| s.indexOf("double[] /*float[]*/") != -1)) returnType = new ASTType("[F");
+	}
+	
+	List parameters = method.parameters();
+	paramTypes = new ASTType[parameters.size()];
+	paramTypes64 = new ASTType[parameters.size()];
+	this.parameters = new ASTParameter[paramTypes.length];
+	int i = 0;
+	for (Iterator iterator = parameters.iterator(); iterator.hasNext(); i++) {
+		SingleVariableDeclaration param = (SingleVariableDeclaration) iterator.next();
+		paramTypes[i] = new ASTType(declaringClass.resolver, param.getType(), param.getExtraDimensions());
+		paramTypes64[i] = paramTypes[i];
+		this.parameters[i] = new ASTParameter(this, i, param.getName().getIdentifier());
+		if (GEN64) {
+			String s = source.substring(param.getStartPosition(), param.getStartPosition() + param.getLength());
+			if (paramTypes[i].isType("int") && s.indexOf("int /*long*/") != -1) paramTypes64[i] = new ASTType("J");
+			else if (paramTypes[i].isType("float") && s.indexOf("float /*double*/") != -1) paramTypes64[i] = new ASTType("D");
+			else if (paramTypes[i].isType("[I") && (s.indexOf("int /*long*/") != -1 || s.indexOf("int[] /*long[]*/") != -1)) paramTypes64[i] = new ASTType("[J");
+			else if (paramTypes[i].isType("[F") && (s.indexOf("float /*double*/") != -1|| s.indexOf("float[] /*double[]*/") != -1)) paramTypes64[i] = new ASTType("[D");
+			else if (paramTypes[i].isType("long") && s.indexOf("long /*int*/") != -1) paramTypes[i] = new ASTType("I");
+			else if (paramTypes[i].isType("double") && s.indexOf("double /*float*/") != -1) paramTypes[i] = new ASTType("F");
+			else if (paramTypes[i].isType("[J") && (s.indexOf("long /*int*/") != -1|| s.indexOf("long[] /*int[]*/") != -1)) paramTypes[i] = new ASTType("[I");
+			else if (paramTypes[i].isType("[D") && (s.indexOf("double /*float*/") != -1|| s.indexOf("double[] /*float[]*/") != -1)) paramTypes[i] = new ASTType("[F");
+		}
+		if (tags != null) {
+			String name = param.getName().getIdentifier();
+			for (Iterator iterator1 = tags.iterator(); iterator1.hasNext();) {
+				TagElement tag = (TagElement) iterator1.next();
+				if ("@param".equals(tag.getTagName())) {
+					List fragments = tag.fragments();
+					if (name.equals(fragments.get(0).toString())) {
+						String data = fragments.get(1).toString();
+						this.parameters[i].setMetaData(data);
+					}
+				}
+			}
+		}
+	}
+}
+
+public JNIClass getDeclaringClass() {
+	return declaringClass;
+}
+
+public int getModifiers() {
+	return modifiers;
+}
+
+public String getName() {
+	return name;
+}
+
+public boolean isNativeUnique() {
+	if (unique != null) return unique.booleanValue();
+	boolean result = true;
+	String name = getName();
+	JNIMethod[] methods = declaringClass.getDeclaredMethods();
+	for (int i = 0; i < methods.length; i++) {
+		JNIMethod mth = methods[i];
+		if ((mth.getModifiers() & Modifier.NATIVE) != 0 &&
+			this != mth && !this.equals(mth) &&
+			name.equals(mth.getName()))
+			{
+				result = false;
+				break;
+			}
+	}
+	unique = new Boolean(result);
+	return result;
+}
+
+public JNIType[] getParameterTypes() {
+	return paramTypes;
+}
+
+public JNIType[] getParameterTypes64() {
+	return paramTypes64;
+}
+
+public JNIParameter[] getParameters() {
+	return this.parameters;
+}
+
+public JNIType getReturnType() {
+	return returnType;
+}
+
+public JNIType getReturnType64() {
+	return returnType64;
+}
+
+public String getAccessor() {
+	return (String)getParam("accessor");
+}
+
+public String getExclude() {
+	return (String)getParam("exclude");
+}
+
+public String getMetaData() {
+	if (data != null) return data;
+	String className = getDeclaringClass().getSimpleName();
+	String key = className + "_" + JNIGenerator.getFunctionName(this);
+	MetaData metaData = declaringClass.metaData;
+	String value = metaData.getMetaData(key, null);
+	if (value == null) {
+		key = className + "_" + getName();
+		value = metaData.getMetaData(key, null);
+	}
+	/*
+	* Support for lock.
+	*/
+	if (value == null && getName().startsWith("_")) {
+		key = className + "_" + JNIGenerator.getFunctionName(this).substring(2);
+		value = metaData.getMetaData(key, null);
+		if (value == null) {
+			key = className + "_" + getName().substring(1);
+			value = metaData.getMetaData(key, null);
+		}
+	}
+	if (value == null) value = "";	
+	return value;
+}
+
+public void setAccessor(String str) { 
+	setParam("accessor", str);
+}
+
+public void setExclude(String str) { 
+	setParam("exclude", str);
+}
+
+public void setMetaData(String value) {
+	data = value;
+}
+
+public String toString() {
+	return getName();
+}
+
+}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTParameter.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTParameter.java
new file mode 100644
index 0000000..ee217a5
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTParameter.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 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.tools.internal;
+
+public class ASTParameter extends ASTItem implements JNIParameter {
+	ASTMethod method;
+	int parameter;
+	String name;
+	String data;
+
+public ASTParameter(ASTMethod method, int parameter, String name) {
+	this.method = method;
+	this.parameter = parameter;
+	this.name = name;
+}
+
+public String getCast() {
+	String cast = ((String)getParam("cast")).trim();
+	if (cast.length() > 0) {
+		if (!cast.startsWith("(")) cast = "(" + cast;
+		if (!cast.endsWith(")")) cast = cast + ")";
+	}
+	return cast;
+}
+
+public String getMetaData() {
+	if (data != null) return data;
+	String className = method.getDeclaringClass().getSimpleName();
+	String key = className + "_" + JNIGenerator.getFunctionName(method) + "_" + parameter;
+	MetaData metaData = method.declaringClass.metaData;
+	String value = metaData.getMetaData(key, null);
+	if (value == null) {
+		key = className + "_" + method.getName() + "_" + parameter;
+		value = metaData.getMetaData(key, null);
+	}
+	/*
+	* Support for lock.
+	*/
+	if (value == null && method.getName().startsWith("_")) {
+		key = className + "_" + JNIGenerator.getFunctionName(method).substring(2) + "_" + parameter;
+		value = metaData.getMetaData(key, null);
+		if (value == null) {
+			key = className + "_" + method.getName().substring(1) + "_" + parameter;
+			value = metaData.getMetaData(key, null);
+		}
+	}
+	if (value == null) value = "";	
+	return value;
+}
+
+public JNIMethod getMethod() {
+	return method;
+}
+
+public String getName() {
+	return name;
+}
+
+public JNIClass getTypeClass() {
+	ASTType type = (ASTType)getType();
+	ASTClass declaringClass = method.declaringClass;
+	String sourcePath = declaringClass.resolver.findPath(type.getSimpleName());
+	return new ASTClass(sourcePath, declaringClass.metaData);
+}
+
+public JNIType getType() {
+	return method.getParameterTypes()[parameter];
+}
+
+public JNIType getType64() {
+	return method.getParameterTypes64()[parameter];
+}
+
+public int getParameter() {
+	return parameter;
+}
+
+public void setCast(String str) {
+	setParam("cast", str);
+}
+
+public void setMetaData(String value) {
+	data = value;
+}
+}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTType.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTType.java
new file mode 100644
index 0000000..a98ac50
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ASTType.java
@@ -0,0 +1,214 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 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.tools.internal;
+
+import org.eclipse.jdt.core.dom.ArrayType;
+import org.eclipse.jdt.core.dom.Type;
+
+public class ASTType implements JNIType {
+	
+	static interface TypeResolver {
+		public String findPath(String simpleName);
+		public String resolve(String simpleName);
+	}	
+	
+	String name;
+
+public ASTType(String name) {
+	this.name = name;
+}
+
+public ASTType(TypeResolver resolver, Type type, int extraDimensions) {
+	name = from(resolver, type, extraDimensions);
+}
+
+String from(TypeResolver resolver, Type type, int extraDimensions) {
+	String name = "";
+	String str = type.toString();
+	if (type.isPrimitiveType()) {
+		if (str.equals("void")) name = "V";
+		else if (str.equals("int")) name = "I";
+		else if (str.equals("boolean")) name = "Z";
+		else if (str.equals("long")) name = "J";
+		else if (str.equals("short")) name = "S";
+		else if (str.equals("char")) name = "C";
+		else if (str.equals("byte")) name = "B";
+		else if (str.equals("float")) name = "F";
+		else if (str.equals("double")) name = "D";
+	} else if (type.isArrayType()) {
+		ArrayType arrayType = (ArrayType)type;
+		name = from(resolver, arrayType.getElementType(), arrayType.getDimensions());
+	} else if (str.indexOf('.') != -1) {
+		name = "L" + type.toString().replace('.', '/') + ";";
+	} else if (str.equals("String")){
+		name = "Ljava/lang/String;";
+	} else if (str.equals("Class")){
+		name = "Ljava/lang/Class;";
+	} else if (str.equals("Object")){
+		name = "Ljava/lang/Object;";
+	} else {
+		String qualifiedName = resolver != null  ? resolver.resolve(str) : str;
+		name = "L" + qualifiedName.replace('.', '/') + ";";
+	}
+	for (int i = 0; i < extraDimensions; i++) {
+		name = "[" + name;
+	}
+	return name;
+}
+
+public boolean equals(Object obj) {
+	if (obj == this) return true;
+	if (!(obj instanceof ASTType)) return false;
+	return ((ASTType)obj).name.equals(name);
+}
+
+public JNIType getComponentType() {
+	if (!name.startsWith("[")) throw new RuntimeException();
+	return new ASTType(name.substring(1));
+}
+
+public String getName() {
+	if (isPrimitive()) {
+		if (name.equals("V")) return "void";
+		if (name.equals("I")) return "int";
+		if (name.equals("Z")) return "boolean";
+		if (name.equals("J")) return "long";
+		if (name.equals("S")) return "short";
+		if (name.equals("C")) return "char";
+		if (name.equals("B")) return "byte";
+		if (name.equals("F")) return "float";
+		if (name.equals("D")) return "double";
+	}
+	if (isArray()) return name;
+	return name.substring(1, name.length() - 1).replace('/', '.');
+}
+
+public String getSimpleName() {
+	String name = getName();
+	if (isArray() || isPrimitive()) return name;
+	int index = name.lastIndexOf('.') + 1;
+	return name.substring(index, name.length());
+}
+
+public String getTypeSignature(boolean define) {
+	if (isPrimitive()) {
+		if (define) {
+			if (name.equals("I")) return "I_J";
+			if (name.equals("J")) return "I_J";
+			if (name.equals("F")) return "F_D";
+			if (name.equals("D")) return "F_D";
+		}
+		return name;
+	}
+	if (isArray()) {
+		if (define) return getComponentType().getTypeSignature(define) + "Array";
+		return "[" + getComponentType().getTypeSignature(define);
+	}
+	return name;
+}
+
+public String getTypeSignature1(boolean define) {
+	if (isPrimitive()) {
+		if (name.equals("V")) return "Void";
+		if (name.equals("I")) return define ? "IntLong" : "Int";
+		if (name.equals("Z")) return "Boolean";
+		if (name.equals("J")) return define ? "IntLong" : "Long";
+		if (name.equals("S")) return "Short";
+		if (name.equals("C")) return "Char";
+		if (name.equals("B")) return "Byte";
+		if (name.equals("F")) return define ? "FloatDouble" : "Float";
+		if (name.equals("D")) return define ? "FloatDouble" : "Double";
+	}
+	if (name.equals("Ljava/lang/String;")) return "String";
+	return "Object";
+}
+
+public String getTypeSignature2(boolean define) {
+	if (isPrimitive()) {
+		if (name.equals("V")) return "void";
+		if (name.equals("I")) return define ? "jintLong" : "jint";
+		if (name.equals("Z")) return "jboolean";
+		if (name.equals("J")) return define ? "jintLong" : "jlong";
+		if (name.equals("S")) return "jshort";
+		if (name.equals("C")) return "jchar";
+		if (name.equals("B")) return "jbyte";
+		if (name.equals("F")) return define ? "jfloatDouble" : "jfloat";
+		if (name.equals("D")) return define ? "jfloatDouble" : "jdouble";
+	}
+	if (name.equals("Ljava/lang/String;")) return "jstring";
+	if (name.equals("Ljava/lang/Class;")) return "jclass";
+	if (isArray()) {
+		return getComponentType().getTypeSignature2(define) + "Array";
+	}
+	return "jobject";
+}
+
+public String getTypeSignature3(boolean define) {
+	if (isPrimitive()) {
+		if (name.equals("V")) return "void";
+		if (name.equals("I")) return "int";
+		if (name.equals("Z")) return "boolean";
+		if (name.equals("J")) return "long";
+		if (name.equals("S")) return "short";
+		if (name.equals("C")) return "char";
+		if (name.equals("B")) return "byte";
+		if (name.equals("F")) return "float";
+		if (name.equals("D")) return "double";
+	}
+	if (name.equals("Ljava/lang/String;")) return "String";
+	if (isArray()) {
+		return getComponentType().getTypeSignature3(define) + "[]";
+	}
+	return getName();
+}
+
+public String getTypeSignature4(boolean define, boolean struct) {
+	if (isPrimitive()) {
+		if (name.equals("V")) return "void";
+		if (name.equals("I")) return define ? "jintLong" : "jint";
+		if (name.equals("Z")) return "jboolean";
+		if (name.equals("J")) return define ? "jintLong" : "jlong";
+		if (name.equals("S")) return "jshort";
+		if (name.equals("C")) return "jchar";
+		if (name.equals("B")) return "jbyte";
+		if (name.equals("F")) return define ? "jfloatDouble" : "jfloat";
+		if (name.equals("D")) return define ? "jfloatDouble" : "jdouble";
+	}
+	if (name.equals("Ljava/lang/String;")) return "jstring";
+	if (isArray()) {
+		String sig = getComponentType().getTypeSignature4(define, struct);
+		return struct ? sig : sig + " *";
+	}
+	String sig = getSimpleName(); 
+	return struct ? sig : sig + " *";
+}
+
+public int hashCode() {
+	return name.hashCode();
+}
+
+public boolean isArray() {
+	return name.startsWith("[");
+}
+
+public boolean isPrimitive() {
+	return !name.startsWith("L") && !name.startsWith("[");
+}
+
+public boolean isType(String type) {
+	return getName().equals(type);
+}
+
+public String toString() {
+	return name;
+}
+
+}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/AbstractItem.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/AbstractItem.java
new file mode 100644
index 0000000..8e566a2
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/AbstractItem.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2009 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.tools.internal;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+
+public abstract class AbstractItem implements JNIItem {
+
+	HashMap params;
+
+static String[] split(String str, String separator) {
+	return JNIGenerator.split(str, separator);
+}
+
+void checkParams() {
+	if (params != null) return;
+	parse(getMetaData());
+}
+
+public abstract String flatten();
+
+public String[] getFlags() {
+	Object flags = getParam("flags");
+	if (flags == null) return new String[0];
+	if (flags instanceof String[]) return (String[])flags;
+	String[] result = split((String)flags, " ");
+	setParam("flags", result);
+	return result;
+}
+
+public boolean getFlag(String flag) {
+	String[] flags = getFlags();
+	for (int i = 0; i < flags.length; i++) {
+		if (flags[i].equals(flag)) return true;
+	}
+	return false;
+}
+
+public abstract String getMetaData();
+
+public Object getParam(String key) {
+	checkParams();
+	Object value = params.get(key);
+	return value == null ? "" : value;
+}
+
+public boolean getGenerate() {
+	return !getFlag(FLAG_NO_GEN);
+}
+
+public void setFlags(String[] flags) { 
+	setParam("flags", flags);
+}
+
+public abstract void parse(String str);
+
+public void setFlag(String flag, boolean value) {
+	String[] flags = getFlags();
+	HashSet set = new HashSet(Arrays.asList(flags));
+	if (value) {
+		set.add(flag);
+	} else {
+		set.remove(flag);
+	}
+	setFlags((String[])set.toArray(new String[set.size()]));
+}
+
+public void setGenerate(boolean value) {
+	setFlag(FLAG_NO_GEN, !value);
+}
+
+public abstract void setMetaData(String value);
+
+public void setParam(String key, Object value) {
+	checkParams();
+	params.put(key, value);
+	setMetaData(flatten());
+}
+	
+}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ClassData.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ClassData.java
deleted file mode 100644
index 914b033..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ClassData.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.tools.internal;
-
-public class ClassData extends ItemData {
-	
-	Class clazz;
-
-public ClassData(Class clazz, String str) {
-	super(str);
-	this.clazz = clazz;
-}
-	
-public static String[] getAllFlags() {
-	return new String[]{"no_gen", "cpp"};
-}
-
-public Class getClazz() {
-	return clazz;
-}
-
-public String getExclude() {
-	return (String)getParam("exclude");
-}
-
-public void setExclude(String str) { 
-	setParam("exclude", str);
-}
-
-}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/CleanupClass.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/CleanupClass.java
index e18d0d7..ee81cd2 100644
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/CleanupClass.java
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/CleanupClass.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2007 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
@@ -21,6 +21,38 @@
 Hashtable files;
 int usedCount, unusedCount;
 
+String[] getArgNames(JNIMethod method) {
+	int n_args = method.getParameters().length;
+	if (n_args == 0) return new String[0];
+	String name = method.getName();
+	String params = "";
+	int index = 0;
+	while (true) {
+		index = classSource.indexOf(name, index + 1);
+		if (!Character.isWhitespace(classSource.charAt(index - 1))) continue;
+		if (index == -1) return null;
+		int parantesesStart = classSource.indexOf("(", index);
+		if (classSource.substring(index + name.length(), parantesesStart).trim().length() == 0) {
+			int parantesesEnd = classSource.indexOf(")", parantesesStart);
+ 			params = classSource.substring(parantesesStart + 1, parantesesEnd);
+ 			break;
+		}
+	}
+	String[] names = new String[n_args];
+	StringTokenizer tk = new StringTokenizer(params, ",");
+	for (int i = 0; i < names.length; i++) {
+		String s = tk.nextToken().trim();
+		StringTokenizer tk1 = new StringTokenizer(s, " ");
+		String s1 = null;
+		while (tk1.hasMoreTokens()) {
+			s1 = tk1.nextToken();
+		}
+		names[i] = s1.trim();
+	}
+	return names;	
+}
+
+
 void loadClassSource() {
 	if (classSourcePath == null) return;
 	File f = new File(classSourcePath);
@@ -78,7 +110,7 @@
 	}
 }
 
-public void generate(Class clazz) {
+public void generate(JNIClass clazz) {
 	loadFiles ();
 	loadClassSource();
 }
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/CleanupConstants.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/CleanupConstants.java
index ef51aeb..1f0ade3 100644
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/CleanupConstants.java
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/CleanupConstants.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2007 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
@@ -10,12 +10,12 @@
  *******************************************************************************/
 package org.eclipse.swt.tools.internal;
 
-import java.lang.reflect.*;
+import java.lang.reflect.Modifier;
 import java.util.*;
 
 public class CleanupConstants extends CleanupClass {
 
-String getFieldValue(Field field) {
+String getFieldValue(JNIField field) {
 	String name = field.getName();
 	int index = 0;
 	while (true) {
@@ -29,24 +29,24 @@
 	}
 }
 
-public void generate(Class clazz) {
+public void generate(JNIClass clazz) {
 	unusedCount = usedCount = 0;
 	super.generate(clazz);
-	Field[] fields = clazz.getDeclaredFields();
+	JNIField[] fields = clazz.getDeclaredFields();
 	generate(fields);
 	output("used=" + usedCount + " unused=" + unusedCount + " total=" + (unusedCount + usedCount));
 }
 
-public void generate(Field[] fields) {
+public void generate(JNIField[] fields) {
 	sort(fields);
 	for (int i = 0; i < fields.length; i++) {
-		Field field = fields[i];
+		JNIField field = fields[i];
 		if ((field.getModifiers() & Modifier.FINAL) == 0) continue;
 		generate(field);
 	}
 }
 
-public void generate(Field field) {
+public void generate(JNIField field) {
 	String name = field.getName();
 	Enumeration keys = files.keys();
 	while (keys.hasMoreElements()) {
@@ -58,7 +58,7 @@
 			output("\t");
 			output(modifiersStr);
 			if (modifiersStr.length() > 0) output(" ");
-			output(getTypeSignature3(field.getType()));
+			output(field.getType().getTypeSignature3(false));
 			output(" " );
 			output(field.getName());
 			output(" = ");
@@ -69,23 +69,24 @@
 		}
 	}
 	unusedCount++;
-//	output("NOT USED=" + field.toString() + " \n");
+	//output("NOT USED=" + field.toString() + " \n");
 }
 
 public static void main(String[] args) {
-	if (args.length < 2) {
-		System.out.println("Usage: java CleanupConstants <OS className> <src path> <class source>");
+	if (args.length < 3) {
+		System.out.println("Usage: java CleanupConstants <OS className> <class source> <src path1> <src path2>");
 		return;
 	}
 	try {
 		CleanupConstants gen = new CleanupConstants();
 		String clazzName = args[0];
-		String[] sourcePath = new String[]{args[1]};
-		String classSource = args[2];
+		String classSource = args[1];
+		String[] sourcePath = new String[args.length - 2];
+		System.arraycopy(args, 2, sourcePath, 0, sourcePath.length);
 		Class clazz = Class.forName(clazzName);
 		gen.setSourcePath(sourcePath);
 		gen.setClassSourcePath(classSource);
-		gen.generate(clazz);
+		gen.generate(new ReflectClass(clazz));
 	} catch (Exception e) {
 		System.out.println("Problem");
 		e.printStackTrace(System.out);
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/CleanupNatives.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/CleanupNatives.java
index c99dfc9..a0c4e9d 100644
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/CleanupNatives.java
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/CleanupNatives.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2007 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
@@ -18,103 +18,74 @@
 public CleanupNatives() {
 }
 
-String[] getArgNames(Method method) {
-	int n_args = method.getParameterTypes().length;
-	if (n_args == 0) return new String[0];
-	String name = method.getName();
-	String params = "";
-	int index = 0;
-	while (true) {
-		index = classSource.indexOf(name, index + 1);
-		if (index == -1) return null;
-		int parantesesStart = classSource.indexOf("(", index);
-		if (classSource.substring(index + name.length(), parantesesStart).trim().length() == 0) {
-			int parantesesEnd = classSource.indexOf(")", parantesesStart);
- 			params = classSource.substring(parantesesStart + 1, parantesesEnd);
- 			break;
-		}
-	}
-	String[] names = new String[n_args];
-	StringTokenizer tk = new StringTokenizer(params, ",");
-	for (int i = 0; i < names.length; i++) {
-		String s = tk.nextToken().trim();
-		StringTokenizer tk1 = new StringTokenizer(s, " ");
-		String s1 = null;
-		while (tk1.hasMoreTokens()) {
-			s1 = tk1.nextToken();
-		}
-		names[i] = s1.trim();
-	}
-	return names;	
-}
-
-public void generate(Class clazz) {
+public void generate(JNIClass clazz) {
 	unusedCount = usedCount = 0;
 	super.generate(clazz);
-	Method[] methods = clazz.getDeclaredMethods();
+	JNIMethod[] methods = clazz.getDeclaredMethods();
 	generate(methods);
 	output("used=" + usedCount + " unused=" + unusedCount + " total=" + (unusedCount + usedCount));
 }
 
-public void generate(Method[] methods) {
+public void generate(JNIMethod[] methods) {
 	sort(methods);	
 	for (int i = 0; i < methods.length; i++) {
-		Method method = methods[i];
+		JNIMethod method = methods[i];
 		if ((method.getModifiers() & Modifier.NATIVE) == 0) continue;
 		generate(method);
 	}
 }
 
-public void generate(Method method) {
+public void generate(JNIMethod method) {
 	String name = method.getName();
 	Enumeration keys = files.keys();
 	while (keys.hasMoreElements()) {
 		Object key = keys.nextElement();
 		String str = (String)files.get(key);
 		if (str.indexOf(name) != -1) {
-			int modifiers = method.getModifiers();
-			Class clazz = method.getDeclaringClass();
-			String modifiersStr = Modifier.toString(modifiers);
-			output(modifiersStr);
-			if (modifiersStr.length() > 0) output(" ");
-			output(getTypeSignature3(method.getReturnType()));
-			output(" " );
-			output(method.getName());
-			output("(");
-			Class[] paramTypes = method.getParameterTypes();
-			String[] paramNames = getArgNames(method);
-			for (int i = 0; i < paramTypes.length; i++) {
-				Class paramType = paramTypes[i];
-				if (i != 0) output(", ");
-				String sig = getTypeSignature3(paramType);
-				if (clazz.getPackage().equals(paramType.getPackage())) sig = getClassName(paramType);
-				output(sig);
-				output(" ");
-				output(paramNames[i]);
-			}
-			outputln(");");
+//			int modifiers = method.getModifiers();
+//			Class clazz = method.getDeclaringClass();
+//			String modifiersStr = Modifier.toString(modifiers);
+//			output(modifiersStr);
+//			if (modifiersStr.length() > 0) output(" ");
+//			output(getTypeSignature3(method.getReturnType()));
+//			output(" " );
+//			output(method.getName());
+//			output("(");
+//			Class[] paramTypes = method.getParameterTypes();
+//			String[] paramNames = getArgNames(method);
+//			for (int i = 0; i < paramTypes.length; i++) {
+//				Class paramType = paramTypes[i];
+//				if (i != 0) output(", ");
+//				String sig = getTypeSignature3(paramType);
+//				if (clazz.getPackage().equals(paramType.getPackage())) sig = getClassName(paramType);
+//				output(sig);
+//				output(" ");
+//				output(paramNames[i]);
+//			}
+//			outputln(");");
 			usedCount++;
 			return;
 		}
 	}
 	unusedCount++;
-//	output("NOT USED=" + method.toString() + "\n");
+	output("NOT USED=" + method.toString() + "\n");
 }
 
 public static void main(String[] args) {
 	if (args.length < 2) {
-		System.out.println("Usage: java CleanupNatives <OS className> <src path> <class source>");
+		System.out.println("Usage: java CleanupNatives <OS className> <OS class source> <src path0> <src path1>");
 		return;
 	}
 	try {
 		CleanupNatives gen = new CleanupNatives();
 		String clazzName = args[0];
-		String[] sourcePath = new String[]{args[1]};
-		String classSource = args[2]; 
+		String classSource = args[1]; 
+		String[] sourcePath = new String[args.length - 2];
+		System.arraycopy(args, 2, sourcePath, 0, sourcePath.length);
 		Class clazz = Class.forName(clazzName);
 		gen.setSourcePath(sourcePath);
 		gen.setClassSourcePath(classSource);
-		gen.generate(clazz);
+		gen.generate(new ReflectClass(clazz));
 	} catch (Exception e) {
 		System.out.println("Problem");
 		e.printStackTrace(System.out);
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ConstantsGenerator.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ConstantsGenerator.java
index 9bf3d13..83bc94b 100644
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ConstantsGenerator.java
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ConstantsGenerator.java
@@ -10,34 +10,34 @@
  *******************************************************************************/
 package org.eclipse.swt.tools.internal;
 
-import java.lang.reflect.*;
+import java.lang.reflect.Modifier;
 
 public class ConstantsGenerator extends JNIGenerator {
 
-public void generate(Class clazz) {
-	Field[] fields = clazz.getDeclaredFields();
+public void generate(JNIClass clazz) {
+	JNIField[] fields = clazz.getDeclaredFields();
 	generate(fields);
 }
 
-public void generate(Field[] fields) {
+public void generate(JNIField[] fields) {
 	sort(fields);
 	outputln("int main() {");
 	for (int i = 0; i < fields.length; i++) {
-		Field field = fields[i];
+		JNIField field = fields[i];
 		if ((field.getModifiers() & Modifier.FINAL) == 0) continue;
 		generate(field);
 	}
 	outputln("}");
 }
 
-public void generate(Field field) {
-	Class type = field.getType();
+public void generate(JNIField field) {
+	JNIType type = field.getType();
 	output("\tprintf(\"public static final ");
-	output(getTypeSignature3(field.getType()));
+	output(field.getType().getTypeSignature3(false));
 	output(" ");
 	output(field.getName());
 	output(" = ");
-	if (type == String.class || type == byte[].class) output("\"%s\"");
+	if (type.isType("java.lang.String") || type.isType("[B")) output("\"%s\"");
 	else output("0x%x");
 	output(";\\n\", ");
 	output(field.getName());
@@ -54,7 +54,7 @@
 		for (int i = 0; i < args.length; i++) {
 			String clazzName = args[i];
 			Class clazz = Class.forName(clazzName);
-			gen.generate(clazz);
+			gen.generate(new ReflectClass(clazz));
 		}
 	} catch (Exception e) {
 		System.out.println("Problem");
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/EmbedMetaData.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/EmbedMetaData.java
new file mode 100644
index 0000000..24b8507
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/EmbedMetaData.java
@@ -0,0 +1,119 @@
+/*******************************************************************************
+ * Copyright (c) 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.tools.internal;
+
+import java.lang.reflect.Modifier;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.ArrayList;
+
+public class EmbedMetaData extends JNIGenerator {
+	TreeMap inserts;
+
+public void generate(JNIClass clazz) {
+	inserts = new TreeMap();
+	String data = ((AbstractItem)clazz).flatten();
+	if (data != null && data.length() != 0) {
+		String doc = "/** @jniclass " + data + " */" + delimiter;
+		inserts.put(new Integer(((ASTClass)clazz).start), doc);
+	}
+	JNIField[] fields = clazz.getDeclaredFields();
+	generate(fields);
+	JNIMethod[] methods = clazz.getDeclaredMethods();
+	generate(methods);
+	if (inserts.size() == 0) return;
+	String sourcePath = ((ASTClass)clazz).sourcePath;
+	String source = JNIGenerator.loadFile(sourcePath);
+	Set set = inserts.keySet();
+	ArrayList keys = new ArrayList();
+	keys.addAll(set);
+	Collections.reverse(keys);
+	StringBuffer buffer = new StringBuffer(source);
+	for (Iterator iterator = keys.iterator(); iterator.hasNext();) {
+		Integer index = (Integer) iterator.next();
+		String doc = (String)inserts.get(index);
+		buffer.insert(index.intValue(), doc);
+	}
+	try {
+		output(buffer.toString().getBytes(), sourcePath);
+	} catch (Exception e) {
+		e.printStackTrace();
+	}
+	inserts = null;
+}
+
+public void generate(JNIField[] fields) {
+	for (int i = 0; i < fields.length; i++) {
+		JNIField field = fields[i];
+		int mods = field.getModifiers();
+		if ((mods & Modifier.PUBLIC) == 0) continue;
+		if ((mods & Modifier.FINAL) != 0) continue;
+		if ((mods & Modifier.STATIC) != 0) continue;
+		generate(field);
+	}
+}
+
+public void generate(JNIField field) {
+	//wrap cast with parentheses
+	field.setCast(field.getCast());
+	String data = ((AbstractItem)field).flatten();
+	if (data != null && data.length() != 0) {
+		String doc = "/** @field " + data + " */" + delimiter + "\t";
+		inserts.put(new Integer(((ASTField)field).start), doc);
+	}
+}
+
+public void generate(JNIMethod[] methods) {
+	for (int i = 0; i < methods.length; i++) {
+		JNIMethod method = methods[i];
+		if ((method.getModifiers() & Modifier.NATIVE) == 0) continue;
+		generate(method);
+	}
+}
+
+public void generate(JNIMethod method) {
+	ArrayList tags = new ArrayList();
+	String data = ((AbstractItem)method).flatten();
+	if (data != null && data.length() != 0) {
+		tags.add("@method " + data);
+	}
+	JNIParameter[] params = method.getParameters();
+	for (int i = 0; i < params.length; i++) {
+		ASTParameter param = (ASTParameter)params[i];
+		//wrap cast with parentheses
+		param.setCast(param.getCast());
+		data = ((AbstractItem)param).flatten();
+		if (data != null && data.length() != 0) {
+			tags.add("@param " + param.getName() + " " + data);
+		}
+	}
+	if (tags.size() == 0) return;
+	if (tags.size() == 1) {
+		String doc = "/** " + (String)tags.get(0) + " */" + delimiter;
+		inserts.put(new Integer(((ASTMethod)method).start), doc);
+	} else {
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("/**");
+		buffer.append(delimiter);
+		for (Iterator iterator = tags.iterator(); iterator.hasNext();) {
+			String tag = (String) iterator.next();
+			buffer.append(" * ");
+			buffer.append(tag);
+			buffer.append(delimiter);
+		}
+		buffer.append(" */");
+		buffer.append(delimiter);
+		inserts.put(new Integer(((ASTMethod)method).start), buffer.toString());
+	}
+}
+}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/FieldData.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/FieldData.java
deleted file mode 100644
index 8228856..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/FieldData.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.tools.internal;
-
-import java.lang.reflect.Field;
-
-public class FieldData extends ItemData {
-	
-	Field field;
-	
-public FieldData(Field field, String str) {
-	super(str);
-	this.field = field;
-}
-
-public static String[] getAllFlags() {
-	return new String[]{"no_gen", "no_wince"};
-}
-
-public String getAccessor() {
-	return (String)getParam("accessor");
-}
-
-public String getCast() {
-	String cast = ((String)getParam("cast")).trim();
-	if (cast.length() > 0) {
-		if (!cast.startsWith("(")) cast = "(" + cast;
-		if (!cast.endsWith(")")) cast = cast + ")";
-	}
-	return cast;
-}
-
-public String getExclude() {
-	return (String)getParam("exclude");
-}
-
-public Field getField() {
-	return field;
-}
-
-public void setAccessor(String str) { 
-	setParam("accessor", str);
-}
-
-public void setCast(String str) {
-	setParam("cast", str);
-}
-
-public void setExclude(String str) { 
-	setParam("exclude", str);
-}
-
-}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/Flags.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/Flags.java
new file mode 100644
index 0000000..770f869
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/Flags.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2007 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.tools.internal;
+
+public interface Flags {
+
+	public static final String FLAG_NO_GEN = "no_gen";
+	public static final String FLAG_NO_IN = "no_in";
+	public static final String FLAG_NO_OUT = "no_out";
+	public static final String FLAG_NO_WINCE = "no_wince";
+	public static final String FLAG_CRITICAL = "critical";
+	public static final String FLAG_INIT = "init";
+	public static final String FLAG_STRUCT = "struct";
+	public static final String FLAG_UNICODE = "unicode";
+	public static final String FLAG_SENTINEL = "sentinel";
+	public static final String FLAG_CPP = "cpp";
+	public static final String FLAG_NEW = "new";
+	public static final String FLAG_DELETE ="delete";
+	public static final String FLAG_CONST = "const";
+	public static final String FLAG_CAST = "cast";
+	public static final String FLAG_DYNAMIC = "dynamic";
+	public static final String FLAG_JNI = "jni";
+	public static final String FLAG_ADDRESS = "address";
+	public static final String FLAG_GCNEW = "gcnew";
+	public static final String FLAG_GCOBJECT = "gcobject";
+	public static final String FLAG_SETTER = "setter";
+	public static final String FLAG_GETTER = "getter";
+	public static final String FLAG_ADDER = "adder";
+}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ItemData.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ItemData.java
deleted file mode 100644
index 4870409..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ItemData.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.tools.internal;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.StringTokenizer;
-
-public abstract class ItemData {
-
-	HashMap params;
-
-public ItemData(String str) {
-	parse(str);
-}
-
-static String[] split(String str, String separator) {
-	StringTokenizer tk = new StringTokenizer(str, separator);
-	ArrayList result = new ArrayList();
-	while (tk.hasMoreElements()) {
-		result.add(tk.nextElement());
-	}
-	return (String[])result.toArray(new String[result.size()]);
-}
-
-public String[] getFlags() {
-	Object flags = getParam("flags");
-	if (flags == null) return new String[0];
-	if (flags instanceof String[]) return (String[])flags;
-	String[] result = split((String)flags, " ");
-	params.put("flags", result);
-	return result;
-}
-
-public boolean getFlag(String flag) {
-	String[] flags = getFlags();
-	for (int i = 0; i < flags.length; i++) {
-		if (flags[i].equals(flag)) return true;
-	}
-	return false;
-}
-
-public Object getParam(String key) {
-	Object value = params.get(key);
-	return value == null ? "" : value;
-}
-
-public boolean getGenerate() {
-	return !getFlag("no_gen");
-}
-
-public void parse(String str) {
-	this.params = new HashMap();
-	if (str.length() == 0) return;
-	String[] params = split(str, ",");
-	for (int i = 0; i < params.length; i++) {
-		String param = params[i];
-		int equals = param.indexOf('=');
-		if (equals ==  -1) {
-			System.out.println("Error: " + str + " param " + param);
-		}
-		String key = param.substring(0, equals).trim();
-		String value = param.substring(equals + 1).trim();
-		setParam(key, value);
-	}
-}
-
-public void setFlags(String[] flags) { 
-	setParam("flags", flags);
-}
-
-public void setFlag(String flag, boolean value) {
-	String[] flags = getFlags();
-	HashSet set = new HashSet(Arrays.asList(flags));
-	if (value) {
-		set.add(flag);
-	} else {
-		set.remove(flag);
-	}
-	setFlags((String[])set.toArray(new String[set.size()]));
-}
-
-public void setGenerate(boolean value) {
-	setFlag("no_gen", !value);
-}
-
-public void setParam(String key, Object value) {
-	params.put(key, value);
-}
-
-public String toString() {
-	StringBuffer buffer = new StringBuffer();
-	Set set = params.keySet();
-	String[] keys = (String[])set.toArray(new String[set.size()]);
-	Arrays.sort(keys);
-	for (int j = 0; j < keys.length; j++) {
-		String key = keys[j];
-		Object value = params.get(key);
-		String valueStr = "";
-		if (value instanceof String) {
-			valueStr = (String)value;
-		} else if (value instanceof String[]) {
-			String[] values = (String[])value;
-			StringBuffer valueBuffer = new StringBuffer();
-			for (int i = 0; i < values.length; i++) {
-				if (i != 0) valueBuffer.append(" ");
-				valueBuffer.append(values[i]);
-			}
-			valueStr = valueBuffer.toString();
-		} else {
-			valueStr = value.toString();
-		}
-		if (valueStr.length() > 0) {
-			if (buffer.length() != 0) buffer.append(",");
-			buffer.append(key);
-			buffer.append("=");
-			buffer.append(valueStr);
-		}
-	}
-	return buffer.toString();
-}
-
-}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIClass.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIClass.java
new file mode 100644
index 0000000..70ad183
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIClass.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 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.tools.internal;
+
+public interface JNIClass extends JNIItem {
+	
+public static String[] FLAGS = {FLAG_NO_GEN, FLAG_CPP};
+
+public String getName();
+
+public String getSimpleName();
+
+public JNIClass getSuperclass();
+
+public JNIField[] getDeclaredFields();
+
+public JNIMethod[] getDeclaredMethods();
+
+public String getExclude();
+
+public void setExclude(String str);
+}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIField.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIField.java
new file mode 100644
index 0000000..5e36593
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIField.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 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.tools.internal;
+
+public interface JNIField extends JNIItem {
+	
+public static final String[] FLAGS = {FLAG_NO_GEN, FLAG_NO_WINCE};
+
+public String getName();
+	
+public int getModifiers();
+
+public JNIType getType();
+
+public JNIType getType64();
+
+public JNIClass getDeclaringClass();
+
+public String getAccessor();
+
+public String getCast();
+
+public String getExclude();
+
+public void setAccessor(String str);
+
+public void setCast(String str);
+
+public void setExclude(String str);
+}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGenerator.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGenerator.java
index 5be7b89..cdddd0d 100644
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGenerator.java
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2006 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
@@ -11,20 +11,20 @@
 package org.eclipse.swt.tools.internal;
 
 import java.io.*;
-import java.lang.reflect.*;
+import java.lang.reflect.Modifier;
 import java.util.*;
 
-import org.eclipse.swt.SWT;
+public abstract class JNIGenerator implements Flags {
 
-public abstract class JNIGenerator {
-
-	Class mainClass;
-	Class[] classes;
+	JNIClass mainClass;
+	JNIClass[] classes;
 	MetaData metaData;
 	boolean isCPP;
 	String delimiter;
 	PrintStream output;
 	ProgressMonitor progress;
+	
+	static final String JNI64 = "JNI64";
 
 public JNIGenerator() {
 	delimiter = System.getProperty("line.separator");
@@ -32,6 +32,64 @@
 	metaData = new MetaData(new Properties());
 }
 
+public static String skipCopyrights(InputStream is) throws IOException {
+	int state = 0;
+	StringBuffer copyrights = new StringBuffer();
+	while (state != 5) {
+		int c = is.read();
+		if (c == -1) return null;
+		switch (state) {
+			case 0:
+				if (!Character.isWhitespace((char)c)) state = 1;
+			case 1:
+				if (c == '/') state = 2;
+				else return null;
+				break;
+			case 2:
+				if (c == '*') state = 3;
+				else return null;
+				break;
+			case 3:
+				if (c == '*') state = 4;
+				break;
+			case 4:
+				if (c == '/') state = 5;
+				else state = 3;
+				break;
+		}
+		if (state > 0) copyrights.append((char)c);
+	}
+	return copyrights.toString();
+}
+
+public static boolean compare(InputStream is1, InputStream is2) throws IOException {
+	skipCopyrights(is1);
+	skipCopyrights(is2);
+	while (true) {
+		int c1 = is1.read();
+		int c2 = is2.read();
+		if (c1 != c2) return false;
+		if (c1 == -1) break;
+	}
+	return true;
+}
+
+public static void output(byte[] bytes, String fileName) throws IOException {
+	FileInputStream is = null;
+	try {
+		is = new FileInputStream(fileName);
+		if (compare(new ByteArrayInputStream(bytes), new BufferedInputStream(is))) return;
+	} catch (FileNotFoundException e) {
+	} finally {
+		try {
+			if (is != null) is.close();
+		} catch (IOException e) {}
+	}
+	FileOutputStream out = new FileOutputStream(fileName);
+	out.write(bytes);
+	out.close();
+}
+
 String fixDelimiter(String str) {
 	if (delimiter.equals("\n")) return str;
 	int index = 0, length = str.length();
@@ -50,198 +108,79 @@
 	return buffer.toString();
 }
 
-static String getClassName(Class clazz) {
-	String name = clazz.getName();
-	int index = name.lastIndexOf('.') + 1;
-	return name.substring(index, name.length());
-}
-
-static String getFunctionName(Method method) {
+static String getFunctionName(JNIMethod method) {
 	return getFunctionName(method, method.getParameterTypes());
 }
 
-static String getFunctionName(Method method, Class[] paramTypes) {
+static String getFunctionName(JNIMethod method, JNIType[] paramTypes) {
 	if ((method.getModifiers() & Modifier.NATIVE) == 0) return method.getName();
 	String function = toC(method.getName());
-	if (!isNativeUnique(method)) {
+	if (!method.isNativeUnique()) {
 		StringBuffer buffer = new StringBuffer();
 		buffer.append(function);
 		buffer.append("__");
-		if (paramTypes.length > 0) {
-			for (int i = 0; i < paramTypes.length; i++) {
-				Class paramType = paramTypes[i];
-				buffer.append(toC(getTypeSignature(paramType)));
-			}
+		for (int i = 0; i < paramTypes.length; i++) {
+			JNIType paramType = paramTypes[i];
+			buffer.append(toC(paramType.getTypeSignature(false)));
 		}
 		return buffer.toString();
 	}
 	return function;
 }
 
-static int getByteCount(Class clazz) {
-	if (clazz == Integer.TYPE) return 4;
-	if (clazz == Boolean.TYPE) return 4;
-	if (clazz == Long.TYPE) return 8;
-	if (clazz == Short.TYPE) return 2;
-	if (clazz == Character.TYPE) return 2;
-	if (clazz == Byte.TYPE) return 1;
-	if (clazz == Float.TYPE) return 4;
-	if (clazz == Double.TYPE) return 8;
-	return 4;
-}
-
-static String getTypeSignature(Class clazz) {
-	if (clazz == Void.TYPE) return "V";
-	if (clazz == Integer.TYPE) return "I";
-	if (clazz == Boolean.TYPE) return "Z";
-	if (clazz == Long.TYPE) return "J";
-	if (clazz == Short.TYPE) return "S";
-	if (clazz == Character.TYPE) return "C";
-	if (clazz == Byte.TYPE) return "B";
-	if (clazz == Float.TYPE) return "F";
-	if (clazz == Double.TYPE) return "D";
-	if (clazz == String.class) return "Ljava/lang/String;";
-	if (clazz.isArray()) {
-		Class componentType = clazz.getComponentType();
-		return "[" + getTypeSignature(componentType);
+static String loadFile (String file) {
+	try {
+		FileReader fr = new FileReader(file);
+		BufferedReader br = new BufferedReader(fr);
+		StringBuffer str = new StringBuffer();
+		char[] buffer = new char[1024];
+		int read;
+		while ((read = br.read(buffer)) != -1) {
+			str.append(buffer, 0, read);
+		}
+		fr.close();
+		return str.toString();
+	} catch (IOException e) {
+		throw new RuntimeException("File not found:" + file, e);
 	}
-	return "L" + clazz.getName().replace('.', '/') + ";";
 }
 
-static String getTypeSignature1(Class clazz) {
-	if (clazz == Void.TYPE) return "Void";
-	if (clazz == Integer.TYPE) return "Int";
-	if (clazz == Boolean.TYPE) return "Boolean";
-	if (clazz == Long.TYPE) return "Long";
-	if (clazz == Short.TYPE) return "Short";
-	if (clazz == Character.TYPE) return "Char";
-	if (clazz == Byte.TYPE) return "Byte";
-	if (clazz == Float.TYPE) return "Float";
-	if (clazz == Double.TYPE) return "Double";
-	if (clazz == String.class) return "String";
-	return "Object";
-}
-
-static String getTypeSignature2(Class clazz) {
-	if (clazz == Void.TYPE) return "void";
-	if (clazz == Integer.TYPE) return "jint";
-	if (clazz == Boolean.TYPE) return "jboolean";
-	if (clazz == Long.TYPE) return "jlong";
-	if (clazz == Short.TYPE) return "jshort";
-	if (clazz == Character.TYPE) return "jchar";
-	if (clazz == Byte.TYPE) return "jbyte";
-	if (clazz == Float.TYPE) return "jfloat";
-	if (clazz == Double.TYPE) return "jdouble";
-	if (clazz == String.class) return "jstring";
-	if (clazz == Class.class) return "jclass";
-	if (clazz.isArray()) {
-		Class componentType = clazz.getComponentType();
-		return getTypeSignature2(componentType) + "Array";
-	}
-	return "jobject";
-}
-
-static String getTypeSignature3(Class clazz) {
-	if (clazz == Void.TYPE) return "void";
-	if (clazz == Integer.TYPE) return "int";
-	if (clazz == Boolean.TYPE) return "boolean";
-	if (clazz == Long.TYPE) return "long";
-	if (clazz == Short.TYPE) return "short";
-	if (clazz == Character.TYPE) return "char";
-	if (clazz == Byte.TYPE) return "byte";
-	if (clazz == Float.TYPE) return "float";
-	if (clazz == Double.TYPE) return "double";
-	if (clazz == String.class) return "String";
-	if (clazz.isArray()) {
-		Class componentType = clazz.getComponentType();
-		return getTypeSignature3(componentType) + "[]";
-	}
-	return clazz.getName();
-}
-
-static String getTypeSignature4(Class clazz) {
-	return getTypeSignature4(clazz, false);
-}
-
-static String getTypeSignature4(Class clazz, boolean struct) {
-	if (clazz == Void.TYPE) return "void";
-	if (clazz == Integer.TYPE) return "jint";
-	if (clazz == Boolean.TYPE) return "jboolean";
-	if (clazz == Long.TYPE) return "jlong";
-	if (clazz == Short.TYPE) return "jshort";
-	if (clazz == Character.TYPE) return "jchar";
-	if (clazz == Byte.TYPE) return "jbyte";
-	if (clazz == Float.TYPE) return "jfloat";
-	if (clazz == Double.TYPE) return "jdouble";
-	if (clazz == String.class) return "jstring";
-	if (clazz.isArray()) {
-		Class componentType = clazz.getComponentType();
-		String sig = getTypeSignature4(componentType);
-		return struct ? sig : sig + " *";
-	}
-	String sig = getClassName(clazz); 
-	return struct ? sig : sig + " *";
-}
-
-static HashMap uniqueCache = new HashMap();
-static Class uniqueClassCache;
-static Method[] uniqueMethodsCache;
-static synchronized boolean isNativeUnique(Method method) {
-	if ((method.getModifiers() & Modifier.NATIVE) == 0) return false;
-	Object unique = uniqueCache.get(method);
-	if (unique != null) return ((Boolean)unique).booleanValue();
-	boolean result = true;
-	Method[] methods;
-	String name = method.getName();
-	Class clazz = method.getDeclaringClass();
-	if (clazz.equals(uniqueClassCache)) {
-		methods = uniqueMethodsCache;
-	} else {
-		methods = clazz.getDeclaredMethods();
-		uniqueClassCache = clazz;
-		uniqueMethodsCache = methods;
-	}
-	for (int i = 0; i < methods.length; i++) {
-		Method mth = methods[i];
-		if ((mth.getModifiers() & Modifier.NATIVE) != 0 &&
-			method != mth && !method.equals(mth) &&
-			name.equals(mth.getName()))
-			{
-				result = false;
-				break;
-			}
-	}
-	uniqueCache.put(method, new Boolean(result));
-	return result;
-}
-
-static void sort(Method[] methods) {
+static void sort(JNIMethod[] methods) {
 	Arrays.sort(methods, new Comparator() {
 		public int compare(Object a, Object b) {
-			Method mth1 = (Method)a;
-			Method mth2 = (Method)b;
+			JNIMethod mth1 = (JNIMethod)a;
+			JNIMethod mth2 = (JNIMethod)b;
 			int result = mth1.getName().compareTo(mth2.getName());
 			return result != 0 ? result : getFunctionName(mth1).compareTo(getFunctionName(mth2));
 		}
 	});
 }
 
-static void sort(Field[] fields) {
+static void sort(JNIField[] fields) {
 	Arrays.sort(fields, new Comparator() {
 		public int compare(Object a, Object b) {
-			return ((Field)a).getName().compareTo(((Field)b).getName());
+			return ((JNIField)a).getName().compareTo(((JNIField)b).getName());
 		}
 	});
 }
 
-static void sort(Class[] classes) {
+static void sort(JNIClass[] classes) {
 	Arrays.sort(classes, new Comparator() {
 		public int compare(Object a, Object b) {
-			return ((Class)a).getName().compareTo(((Class)b).getName());
+			return ((JNIClass)a).getName().compareTo(((JNIClass)b).getName());
 		}
 	});	
 }
 
+static String[] split(String str, String separator) {
+	StringTokenizer tk = new StringTokenizer(str, separator);
+	ArrayList result = new ArrayList();
+	while (tk.hasMoreElements()) {
+		result.add(tk.nextElement());
+	}
+	return (String[])result.toArray(new String[result.size()]);
+}
+
 static String toC(String str) {
 	int length = str.length();
 	StringBuffer buffer = new StringBuffer(length * 2);
@@ -259,7 +198,7 @@
 	return buffer.toString();
 }
 
-public abstract void generate(Class clazz);
+public abstract void generate(JNIClass clazz);
 
 public void generateCopyright() {
 }
@@ -273,15 +212,14 @@
 	generateIncludes();
 	sort(classes);
 	for (int i = 0; i < classes.length; i++) {
-		Class clazz = classes[i];
-		ClassData data = getMetaData().getMetaData(clazz);
-		if (data.getFlag("cpp")) {
+		JNIClass clazz = classes[i];
+		if (clazz.getFlag(FLAG_CPP)) {
 			isCPP = true;
 			break;
 		}
 	}
 	for (int i = 0; i < classes.length; i++) {
-		Class clazz = classes[i];
+		JNIClass clazz = classes[i];
 		if (getGenerate(clazz)) generate(clazz);
 		if (progress != null) progress.step();
 	}
@@ -296,15 +234,10 @@
 	outputln(fixDelimiter(data));
 }
 
-public Class[] getClasses() {
+public JNIClass[] getClasses() {
 	return classes;
 }
 
-protected boolean getGenerate(Class clazz) {
-	ClassData data = getMetaData().getMetaData(clazz);
-	return !data.getFlag("no_gen");
-}
-
 public boolean getCPP() {
 	return isCPP;
 }
@@ -321,15 +254,19 @@
 	return getOutputName() + getSuffix() + getExtension();
 }
 
+protected boolean getGenerate(JNIItem item) {
+	return item.getGenerate();
+}
+
 public PrintStream getOutput() {
 	return output;
 }
 
 public String getOutputName() {
-	return getClassName(getMainClass()).toLowerCase();
+	return getMainClass().getSimpleName().toLowerCase();
 }
 
-public Class getMainClass() {
+public JNIClass getMainClass() {
 	return mainClass;
 }
 
@@ -337,10 +274,6 @@
 	return metaData;
 }
 
-public String getPlatform() {
-	return SWT.getPlatform();
-}
-
 public ProgressMonitor getProgressMonitor() {
 	return progress;
 }
@@ -362,7 +295,7 @@
 	output(getDelimiter());
 }
 
-public void setClasses(Class[] classes) {
+public void setClasses(JNIClass[] classes) {
 	this.classes = classes;
 }
 
@@ -370,7 +303,7 @@
 	this.delimiter = delimiter;
 }
 
-public void setMainClass(Class mainClass) {
+public void setMainClass(JNIClass mainClass) {
 	this.mainClass = mainClass;
 }
 
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGeneratorApp.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGeneratorApp.java
index 050283d..8830185 100644
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGeneratorApp.java
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGeneratorApp.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2007 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
@@ -21,10 +21,13 @@
 
 public class JNIGeneratorApp {
 
-	Class mainClass;
+	JNIClass mainClass;
+	JNIClass[] classes;
 	ProgressMonitor progress;
 	String mainClassName, outputDir, classpath;
 	MetaData metaData;
+	
+	static boolean USE_AST = true;
 
 public JNIGeneratorApp() {
 }
@@ -33,7 +36,7 @@
 	return classpath;
 }
 
-public Class getMainClass() {
+public JNIClass getMainClass() {
 	return mainClass;
 }
 
@@ -53,7 +56,27 @@
 	return outputDir;
 }
 
-void generateSTATS_C(Class[] classes) {
+public void generateAll() {
+	String mainClasses = new MetaData(getDefaultMainClass()).getMetaData("swt_main_classes", null);
+	if (mainClasses != null) {
+		String[] list = JNIGenerator.split(mainClasses, ",");
+		for (int i = 0; i < list.length; i += 2) {
+			String className = list[i].trim();
+			if (!USE_AST) {
+				try {
+					Class.forName(className, false, getClass().getClassLoader());
+				} catch (Throwable e) {
+					continue;
+				}
+			}
+			System.out.println("Generating \"" + className + "\"");
+			setMainClassName(className);
+			generate();
+		}
+	}
+}
+
+void generateSTATS_C(JNIClass[] classes) {
 	try {
 		StatsGenerator gen = new StatsGenerator(false);
 		gen.setMainClass(mainClass);
@@ -63,14 +86,14 @@
 		ByteArrayOutputStream out = new ByteArrayOutputStream();
 		gen.setOutput(new PrintStream(out));
 		gen.generate();
-		if (out.size() > 0) output(out.toByteArray(), outputDir + gen.getFileName());
+		if (out.size() > 0) JNIGenerator.output(out.toByteArray(), outputDir + gen.getFileName());
 	} catch (Exception e) {
 		System.out.println("Problem");
 		e.printStackTrace(System.out);
 	}
 }
 
-void generateSTATS_H(Class[] classes) {
+void generateSTATS_H(JNIClass[] classes) {
 	try {
 		StatsGenerator gen = new StatsGenerator(true);
 		gen.setMainClass(mainClass);
@@ -80,14 +103,14 @@
 		ByteArrayOutputStream out = new ByteArrayOutputStream();
 		gen.setOutput(new PrintStream(out));
 		gen.generate();
-		if (out.size() > 0) output(out.toByteArray(), outputDir + gen.getFileName());
+		if (out.size() > 0) JNIGenerator.output(out.toByteArray(), outputDir + gen.getFileName());
 	} catch (Exception e) {
 		System.out.println("Problem");
 		e.printStackTrace(System.out);
 	}
 }
 
-void generateSTRUCTS_H(Class[] classes) {
+void generateSTRUCTS_H(JNIClass[] classes) {
 	try {
 		StructsGenerator gen = new StructsGenerator(true);
 		gen.setMainClass(mainClass);
@@ -97,7 +120,7 @@
 		ByteArrayOutputStream out = new ByteArrayOutputStream();
 		gen.setOutput(new PrintStream(out));
 		gen.generate();
-		if (out.size() > 0) output(out.toByteArray(), outputDir + gen.getFileName());
+		if (out.size() > 0) JNIGenerator.output(out.toByteArray(), outputDir + gen.getFileName());
 	} catch (Exception e) {
 		System.out.println("Problem");
 		e.printStackTrace(System.out);
@@ -105,7 +128,7 @@
 
 }
 
-void generateSTRUCTS_C(Class[] classes) {
+void generateSTRUCTS_C(JNIClass[] classes) {
 	try {
 		StructsGenerator gen = new StructsGenerator(false);
 		gen.setMainClass(mainClass);
@@ -115,7 +138,7 @@
 		ByteArrayOutputStream out = new ByteArrayOutputStream();
 		gen.setOutput(new PrintStream(out));
 		gen.generate();
-		if (out.size() > 0) output(out.toByteArray(), outputDir + gen.getFileName());
+		if (out.size() > 0) JNIGenerator.output(out.toByteArray(), outputDir + gen.getFileName());
 	} catch (Exception e) {
 		System.out.println("Problem");
 		e.printStackTrace(System.out);
@@ -123,7 +146,7 @@
 
 }
 
-void generateSWT_C(Class[] classes) {
+void generateSWT_C(JNIClass[] classes) {
 	try {
 		NativesGenerator gen = new NativesGenerator();
 		gen.setMainClass(mainClass);
@@ -133,7 +156,7 @@
 		ByteArrayOutputStream out = new ByteArrayOutputStream();
 		gen.setOutput(new PrintStream(out));
 		gen.generate();
-		if (out.size() > 0) output(out.toByteArray(), outputDir + gen.getFileName());
+		if (out.size() > 0) JNIGenerator.output(out.toByteArray(), outputDir + gen.getFileName());
 	} catch (Exception e) {
 		System.out.println("Problem");
 		e.printStackTrace(System.out);
@@ -141,7 +164,7 @@
 }
 
 
-void generateMetaData(Class[] classes) {
+void generateMetaData(JNIClass[] classes) {
 	try {
 		MetaDataGenerator gen = new MetaDataGenerator();
 		gen.setMainClass(mainClass);
@@ -150,12 +173,27 @@
 		gen.setProgressMonitor(progress);
 		ByteArrayOutputStream out = new ByteArrayOutputStream();
 		gen.setOutput(new PrintStream(out));
-		gen.generate();
-		if (!new File(getMetaDataDir()).exists()) {
-			System.out.println("Warning: Meta data output dir does not exist");
-			return;
+		if (new File(getMetaDataDir() + gen.getFileName()).exists()) {
+			gen.generate();
+			if (!new File(getMetaDataDir()).exists()) {
+				System.out.println("Warning: Meta data output dir does not exist");
+				return;
+			}
+			if (out.size() > 0) JNIGenerator.output(out.toByteArray(), getMetaDataDir() + gen.getFileName());
 		}
-		if (out.size() > 0) output(out.toByteArray(), getMetaDataDir() + gen.getFileName());
+	} catch (Exception e) {
+		System.out.println("Problem");
+		e.printStackTrace(System.out);
+	}
+}
+
+void generateEmbededMetaData(JNIClass[] classes) {
+	try {
+		EmbedMetaData gen = new EmbedMetaData();
+		gen.setMainClass(mainClass);
+		gen.setClasses(classes);
+		gen.setMetaData(metaData);
+		gen.generate();
 	} catch (Exception e) {
 		System.out.println("Problem");
 		e.printStackTrace(System.out);
@@ -167,26 +205,26 @@
 }
 
 public void generate(ProgressMonitor progress) {
-	if (mainClassName == null) return;
+	if (mainClass == null) return;
 	if (progress != null) progress.setMessage("Initializing...");
-	Class[] classes = getClasses();
-	Class[] natives = getNativesClasses();
-	Class[] structs = getStructureClasses();
+	JNIClass[] classes = getClasses();
+	JNIClass[] natives = getNativesClasses(classes);
+	JNIClass[] structs = getStructureClasses(classes);
 	this.progress = progress;
 	if (progress != null) {
 		int nativeCount = 0;
 		for (int i = 0; i < natives.length; i++) {
-			Class clazz = natives[i];
-			Method[] methods = clazz.getDeclaredMethods();
+			JNIClass clazz = natives[i];
+			JNIMethod[] methods = clazz.getDeclaredMethods();
 			for (int j = 0; j < methods.length; j++) {
-				Method method = methods[j];
+				JNIMethod method = methods[j];
 				if ((method.getModifiers() & Modifier.NATIVE) == 0) continue;
 				nativeCount++;
 			}
 		}
 		int total = nativeCount * 4;
 		total += classes.length;
-		total += natives.length * 3;
+		total += natives.length * (3);
 		total += structs.length * 2;
 		progress.setTotal(total);
 		progress.setMessage("Generating structs.h ...");
@@ -202,36 +240,12 @@
 	generateSTATS_C(natives);
 	if (progress != null) progress.setMessage("Generating meta data ...");
 	generateMetaData(classes);
+//	if (progress != null) progress.setMessage("Generating embeded meta data ...");
+//	generateEmbededMetaData(classes);
 	if (progress != null) progress.setMessage("Done.");
 	this.progress = null;
 }
 
-boolean compare(InputStream is1, InputStream is2) throws IOException {
-	while (true) {
-		int c1 = is1.read();
-		int c2 = is2.read();
-		if (c1 != c2) return false;
-		if (c1 == -1) break;
-	}
-	return true;
-}
-
-void output(byte[] bytes, String fileName) throws IOException {
-	FileInputStream is = null;
-	try {
-		is = new FileInputStream(fileName);
-		if (compare(new ByteArrayInputStream(bytes), new BufferedInputStream(is))) return;
-	} catch (FileNotFoundException e) {
-	} finally {
-		try {
-			if (is != null) is.close();
-		} catch (IOException e) {}
-	}
-	FileOutputStream out = new FileOutputStream(fileName);
-	out.write(bytes);
-	out.close();
-}
-
 String getPackageName(String className) {
 	int dot = mainClassName.lastIndexOf('.');
 	if (dot == -1) return "";
@@ -259,7 +273,7 @@
 				while (entries.hasMoreElements()) {
 					ZipEntry entry = (ZipEntry)entries.nextElement();
 					String name = entry.getName();
-					if (name.startsWith(pkgZipPath) && name.endsWith(".class")) {
+					if (name.startsWith(pkgZipPath) && name.indexOf('/', pkgZipPath.length() + 1) == -1 && name.endsWith(".class")) {
 						String className = name.substring(pkgZipPath.length() + 1, name.length() - 6);
 						className.replace('/', '.');
 						classes.add(className);
@@ -283,8 +297,6 @@
 							String className = entry.substring(0, entry.length() - 6);
 							classes.add(className);
 						}
-					} else {
-						throw new Error("SUBDIR NOT DONE=" + f);
 					}					
 				}
 			}
@@ -294,16 +306,24 @@
 	return (String[])classes.toArray(new String[classes.size()]);
 }
 
-public Class[] getClasses() {
-	if (mainClassName == null) return new Class[0];
+public JNIClass[] getClasses() {
+	if (classes != null) return classes;
+	if (mainClassName == null) return new JNIClass[0];
+	if (USE_AST) return getASTClasses();
 	String[] classNames = getClassNames(mainClassName);
 	Arrays.sort(classNames);
 	String packageName = getPackageName(mainClassName);
-	Class[] classes = new Class[classNames.length];
+	JNIClass[] classes = new JNIClass[classNames.length];
 	for (int i = 0; i < classNames.length; i++) {
 		String className = classNames[i];
 		try {
-			classes[i] = Class.forName(packageName + "." + className, false, getClass().getClassLoader());
+			String qualifiedName = packageName + "." + className;
+			if (qualifiedName.equals(mainClassName)) {
+				classes[i] = mainClass;
+			} else {
+				String sourcePath = new File(outputDir).getParent() + "/" + qualifiedName.replace('.', '/') + ".java";
+				classes[i] = new ReflectClass(Class.forName(qualifiedName, false, getClass().getClassLoader()), metaData, sourcePath);
+			}
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
@@ -311,15 +331,41 @@
 	return classes;
 }
 
-public Class[] getNativesClasses() {
-	if (mainClassName == null) return new Class[0];
+JNIClass[] getASTClasses() {
+	if (classes != null) return classes;
+	if (mainClassName == null) return new JNIClass[0];
+	String root = new File(outputDir).getParent();
+	String mainPath = new File(root + "/" + mainClassName.replace('.', '/') + ".java").getAbsolutePath();
+	ArrayList classes = new ArrayList();
+	String packageName = getPackageName(mainClassName);
+	File dir = new File(root + "/" + packageName.replace('.', '/'));
+	File[] files = dir.listFiles();
+	for (int i = 0; i < files.length; i++) {
+		File file = files[i];
+		try {
+			String path = file.getAbsolutePath().replace('\\', '/');
+			if (path.endsWith(".java")) {
+				if (mainPath.equals(path)){
+					classes.add(mainClass);
+				} else {
+					classes.add(new ASTClass(path, metaData));
+				}
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	return (JNIClass[])classes.toArray(new JNIClass[classes.size()]);
+}
+
+public JNIClass[] getNativesClasses(JNIClass[] classes) {
+	if (mainClass == null) return new JNIClass[0];
 	ArrayList result = new ArrayList();
-	Class[] classes = getClasses();
 	for (int i = 0; i < classes.length; i++) {
-		Class clazz = classes[i];
-		Method[] methods = clazz.getDeclaredMethods();
+		JNIClass clazz = classes[i];
+		JNIMethod[] methods = clazz.getDeclaredMethods();
 		for (int j = 0; j < methods.length; j++) {
-			Method method = methods[j];
+			JNIMethod method = methods[j];
 			int mods = method.getModifiers();
 			if ((mods & Modifier.NATIVE) != 0) {
 				result.add(clazz);
@@ -327,26 +373,25 @@
 			}
 		}
 	}
-	return (Class[])result.toArray(new Class[result.size()]);
+	return (JNIClass[])result.toArray(new JNIClass[result.size()]);
 }
 
-public Class[] getStructureClasses() {
-	if (mainClassName == null) return new Class[0];
+public JNIClass[] getStructureClasses(JNIClass[] classes) {
+	if (mainClass == null) return new JNIClass[0];
 	ArrayList result = new ArrayList();
-	Class[] classes = getClasses();
 	outer:
 	for (int i = 0; i < classes.length; i++) {
-		Class clazz = classes[i];
-		Method[] methods = clazz.getDeclaredMethods();
+		JNIClass clazz = classes[i];
+		JNIMethod[] methods = clazz.getDeclaredMethods();
 		for (int j = 0; j < methods.length; j++) {
-			Method method = methods[j];
+			JNIMethod method = methods[j];
 			int mods = method.getModifiers();
 			if ((mods & Modifier.NATIVE) != 0) continue outer;
 		}
-		Field[] fields = clazz.getFields();
+		JNIField[] fields = clazz.getDeclaredFields();
 		boolean hasPublicFields = false;
 		for (int j = 0; j < fields.length; j++) {
-			Field field = fields[j];
+			JNIField field = fields[j];
 			int mods = field.getModifiers();
 			if ((mods & Modifier.PUBLIC) != 0 && (mods & Modifier.STATIC) == 0) {
 				hasPublicFields = true;
@@ -356,19 +401,31 @@
 		if (!hasPublicFields) continue;
 		result.add(clazz);
 	}
-	return (Class[])result.toArray(new Class[result.size()]);
+	return (JNIClass[])result.toArray(new JNIClass[result.size()]);
 }
 
 public void setClasspath(String classpath) {
 	this.classpath = classpath;
 }
 
+public void setMainClass(JNIClass mainClass) {
+	this.mainClass = mainClass;
+}
+
+public void setMetaData(MetaData data) {
+	this.metaData = data;
+}
+
+public void setClasses(JNIClass[] classes) {
+	this.classes = classes;
+}
+
 public void setMainClassName(String str) {
 	mainClassName = str;
 	metaData = new MetaData(mainClassName);
 	String mainClasses = getMetaData().getMetaData("swt_main_classes", null);
 	if (mainClasses != null) {
-		String[] list = ItemData.split(mainClasses, ",");
+		String[] list = JNIGenerator.split(mainClasses, ",");
 		for (int i = 0; i < list.length; i += 2) {
 			if (mainClassName.equals(list[i].trim())) {
 				setOutputDir(list[i + 1].trim());
@@ -377,12 +434,32 @@
 	}
 	if (mainClassName != null) {
 		try {
-			mainClass = Class.forName(mainClassName, false, getClass().getClassLoader());
+			String sourcePath = new File(outputDir).getParent() + "/" + mainClassName.replace('.', '/') + ".java";
+			if (USE_AST) {
+				mainClass = new ASTClass(sourcePath, metaData);
+			} else {
+				mainClass = new ReflectClass(Class.forName(mainClassName, false, getClass().getClassLoader()), metaData, sourcePath);
+			}
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
 	}
 }
+public void setMainClassName(String str, String outputDir) {
+	mainClassName = str;
+	setOutputDir(outputDir);
+	metaData = new MetaData(mainClassName);
+	try {
+		String sourcePath = new File(this.outputDir).getParent() + "/" + mainClassName.replace('.', '/') + ".java";
+		if (USE_AST) {
+			mainClass = new ASTClass(sourcePath, metaData);
+		} else {
+			mainClass = new ReflectClass(Class.forName(mainClassName, false, getClass().getClassLoader()), metaData, sourcePath);
+		}
+	} catch (Exception e) {
+		e.printStackTrace();
+	}
+}
 
 public void setOutputDir(String str) {
 	if (str != null) {
@@ -390,7 +467,7 @@
 			str += File.separator;
 		}
 	}
-	outputDir = str;
+	outputDir = str.replace('\\', '/');
 }
 
 public static String getDefaultMainClass() {
@@ -403,6 +480,10 @@
 
 public static void main(String[] args) {
 	JNIGeneratorApp gen = new JNIGeneratorApp ();
+	if (args.length == 1 && (args[0].equals("*") || args[0].equals("all"))) {
+		gen.generateAll();
+		return;
+	}
 	if (args.length > 0) {
 		gen.setMainClassName(args[0]);
 		if (args.length > 1) gen.setOutputDir(args[1]);
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGeneratorAppUI.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGeneratorAppUI.java
index 9a68eab..ff548e5 100644
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGeneratorAppUI.java
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGeneratorAppUI.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2007 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
@@ -124,7 +124,7 @@
 	MetaDataGenerator gen = new MetaDataGenerator();
 	gen.setMainClass(app.getMainClass());
 	gen.setMetaData(app.getMetaData());
-	Method[] methods = getSelectedMethods();
+	JNIMethod[] methods = getSelectedMethods();
 	if (methods.length != 0) {
 		gen.generate(methods);
 	} else {
@@ -137,7 +137,7 @@
 	NativesGenerator gen = new NativesGenerator();
 	gen.setMainClass(app.getMainClass());
 	gen.setMetaData(app.getMetaData());
-	Method[] methods = getSelectedMethods();
+	JNIMethod[] methods = getSelectedMethods();
 	if (methods.length != 0) {
 		gen.generate(methods);
 	} else {
@@ -156,7 +156,8 @@
 		Control child = children[i];
 		if (child instanceof Button) child.setEnabled(false);				
 	}
-	final boolean showProgress = true;
+	boolean showProgress = true;
+	final boolean finalShowProgress = showProgress; /* avoid dead code warning below */
 	if (showProgress) {
 		progressLabel.setText("");
 		progressBar.setSelection(0);
@@ -167,18 +168,24 @@
 	new Thread() {
 		public void run() {
 			try {
-				app.generate(!showProgress ? null : new ProgressMonitor() {
+				app.generate(!finalShowProgress ? null : new ProgressMonitor() {
+					int total, step, maximum = 100;
 					public void setTotal(final int total) {
+						this.total = total;
 						display.syncExec(new Runnable() {
 							public void run() {
-								progressBar.setMaximum(total);
+								progressBar.setMaximum(maximum);
 							}
 						});
 					}
 					public void step() {
+						int oldValue = step * maximum / total;
+						step++;
+						final int newValue = step * maximum / total;
+						if (oldValue == newValue) return;
 						display.syncExec(new Runnable() {
 							public void run() {
-								progressBar.setSelection(progressBar.getSelection() + 1);
+								progressBar.setSelection(newValue);
 							}
 						});					
 					}
@@ -216,7 +223,7 @@
 	ConstantsGenerator gen = new ConstantsGenerator();
 	gen.setMainClass(app.getMainClass());
 	gen.setMetaData(app.getMetaData());
-	Field[] fields = getSelectedFields();
+	JNIField[] fields = getSelectedFields();
 	if (fields.length != 0) {
 		gen.generate(fields);
 	} else {
@@ -225,50 +232,48 @@
 	}
 }
 
-Class[] getSelectedClasses() {
+JNIClass[] getSelectedClasses() {
 	TableItem[] items = classesLt.getSelection();
-	Class[] classes = new Class[items.length];
+	JNIClass[] classes = new JNIClass[items.length];
 	for (int i = 0; i < items.length; i++) {
 		TableItem item = items[i];
-		classes[i] = ((ClassData)item.getData()).getClazz();
+		classes[i] = (JNIClass)item.getData();
 	}
 	return classes;
 }
 
-Method[] getSelectedMethods() {
+JNIMethod[] getSelectedMethods() {
 	TableItem[] selection = membersLt.getSelection();
-	Method[] methods = new Method[selection.length];
+	JNIMethod[] methods = new JNIMethod[selection.length];
 	int count = 0;
 	for (int i = 0; i < selection.length; i++) {
 		TableItem item = selection [i];
 		Object data = item.getData();
-		if (data instanceof MethodData) {
-			Method method = ((MethodData)data).getMethod();
-			methods[count++] = method;
+		if (data instanceof JNIMethod) {
+			methods[count++] = (JNIMethod)data;
 		}
 	}
 	if (count != methods.length) {
-		Method[] result = new Method[count];
+		JNIMethod[] result = new JNIMethod[count];
 		System.arraycopy(methods, 0, result, 0, count);
 		methods = result;
 	}
 	return methods;
 }
 
-Field[] getSelectedFields() {
+JNIField[] getSelectedFields() {
 	TableItem[] selection = membersLt.getSelection();
-	Field[] fields = new Field[selection.length];
+	JNIField[] fields = new JNIField[selection.length];
 	int count = 0;
 	for (int i = 0; i < selection.length; i++) {
 		TableItem item = selection [i];
 		Object data = item.getData();
-		if (data instanceof FieldData) {
-			Field field = ((FieldData)data).getField();
-			fields[count++] = field;
+		if (data instanceof JNIField) {
+			fields[count++] = (JNIField)data;
 		}
 	}
 	if (count != fields.length) {
-		Field[] result = new Field[count];
+		JNIField[] result = new JNIField[count];
 		System.arraycopy(fields, 0, result, 0, count);
 		fields = result;
 	}
@@ -343,10 +348,14 @@
 
 	String mainClasses = app.getMetaData().getMetaData("swt_main_classes", null);
 	if (mainClasses != null) {
-		String[] list = ItemData.split(mainClasses, ",");
+		String[] list = JNIGenerator.split(mainClasses, ",");
 		for (int i = 0; i < list.length; i += 2) {
-			mainClassCb.add(list[i].trim());
-			outputDirCb.add(list[i + 1].trim());
+			String className = list[i].trim();
+			try {
+				Class.forName(className, false, getClass().getClassLoader());
+				mainClassCb.add(className);
+				outputDirCb.add(list[i + 1].trim());
+			} catch (Exception e) {}
 		}
 	}
 }
@@ -400,13 +409,11 @@
 			TableItem item = classTextEditor.getItem();
 			if (item == null) return;
 			int column = classTextEditor.getColumn();
-			ClassData classData = (ClassData)item.getData();
+			JNIClass clazz = (JNIClass)item.getData();
 			if (column == CLASS_EXCLUDE_COLUMN) {
 				String text = classEditorTx.getText();
-				classData.setExclude(text);
-				item.setText(column, classData.getExclude());
-				MetaData metaData = app.getMetaData();
-				metaData.setMetaData(classData.getClazz(), classData);
+				clazz.setExclude(text);
+				item.setText(column, clazz.getExclude());
 				classesLt.getColumn(column).pack();
 			}
 		}
@@ -419,7 +426,7 @@
 	floater.setLayout(new FillLayout());
 	classListEditor = new FlagsEditor(classesLt);
 	classEditorLt = new List(floater, SWT.MULTI | SWT.BORDER);
-	classEditorLt.setItems(ClassData.getAllFlags());
+	classEditorLt.setItems(JNIClass.FLAGS);
 	floater.pack();
 	floater.addListener(SWT.Close, new Listener() {
 		public void handleEvent(Event e) {
@@ -442,14 +449,12 @@
 			TableItem item = classListEditor.getItem();
 			if (item == null) return;
 			int column = classListEditor.getColumn();
-			ClassData classData = (ClassData)item.getData();
+			JNIClass clazz = (JNIClass)item.getData();
 			if (column == CLASS_FLAGS_COLUMN) {
 				String[] flags = classEditorLt.getSelection();
-				classData.setFlags(flags);
-				item.setText(column, getFlagsString(classData.getFlags()));
-				item.setChecked(classData.getGenerate());
-				MetaData metaData = app.getMetaData();
-				metaData.setMetaData(classData.getClazz(), classData);
+				clazz.setFlags(flags);
+				item.setText(column, getFlagsString(clazz.getFlags()));
+				item.setChecked(clazz.getGenerate());
 				classesLt.getColumn(column).pack();
 			}
 		}
@@ -475,7 +480,7 @@
 						}				
 					}
 					if (column == -1) return;
-					ClassData data = (ClassData)item.getData();
+					JNIClass data = (JNIClass)item.getData();
 					if (column == CLASS_EXCLUDE_COLUMN) {
 						classTextEditor.setColumn(column);
 						classTextEditor.setItem(item);
@@ -498,10 +503,45 @@
 }
 
 void createMembersPanel(Composite panel) {
-	Label membersLb = new Label(panel, SWT.NONE);
-	membersLb.setText("Mem&bers:");
-
 	GridData data;
+	Composite comp = new Composite(panel, SWT.NONE);
+	data = new GridData(GridData.FILL_HORIZONTAL);
+	comp.setLayoutData(data);	
+	GridLayout layout = new GridLayout(2, false);
+	layout.marginWidth = layout.marginHeight = 0;
+	comp.setLayout(layout);
+	Label membersLb = new Label(comp, SWT.NONE);
+	membersLb.setText("Mem&bers [regex]:");
+	final Text searchText = new Text(comp, SWT.SINGLE | SWT.SEARCH);
+	searchText.setText(".*");
+	data = new GridData(GridData.FILL_HORIZONTAL);
+	searchText.setLayoutData(data);
+	searchText.addListener(SWT.DefaultSelection, new Listener() {
+		boolean match (int index, String pattern) {
+			TableItem item = membersLt.getItem(index);
+			String text = item.getText();
+			try {
+				if (text.matches(pattern)) {
+					membersLt.setSelection(index);
+					return true;
+				}
+			} catch (Exception ex) {}
+			return false;
+		}
+		public void handleEvent(Event e) {
+			String pattern = searchText.getText();
+			int selection = membersLt.getSelectionIndex();
+			int count = membersLt.getItemCount();
+			selection++;
+			for (int i = selection; i < count; i++) {
+				if (match (i, pattern)) return;
+			}
+			for (int i = 0; i < selection; i++) {
+				if (match (i, pattern)) return;
+			}
+		}
+	});
+
 	membersLt = new Table(panel, SWT.CHECK | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
 	data = new GridData(GridData.FILL_BOTH);
 	data.heightHint = membersLt.getItemHeight() * 6;
@@ -535,45 +575,42 @@
 			TableItem item = memberTextEditor.getItem();
 			if (item == null) return;
 			int column = memberTextEditor.getColumn();
-			ItemData memberData = (ItemData)item.getData();
+			JNIItem memberData = (JNIItem)item.getData();
 			String text = memberEditorTx.getText();
-			MetaData metaData = app.getMetaData();
-			if (memberData instanceof FieldData) {
-				FieldData fieldData = (FieldData)memberData;
+			if (memberData instanceof JNIField) {
+				JNIField field = (JNIField)memberData;
 				switch (column) {
 					case FIELD_CAST_COLUMN: {
-						fieldData.setCast(text);
-						item.setText(column, fieldData.getCast());
+						field.setCast(text);
+						item.setText(column, field.getCast());
 						break;
 					}
 					case FIELD_ACCESSOR_COLUMN: {
-						fieldData.setAccessor(text);
-						item.setText(column, fieldData.getAccessor());
+						field.setAccessor(text.equals(field.getName()) ? "" : text);
+						item.setText(column, field.getAccessor());
 						break;
 					}
 					case FIELD_EXCLUDE_COLUMN: {
-						fieldData.setExclude(text);
-						item.setText(column, fieldData.getExclude());
+						field.setExclude(text);
+						item.setText(column, field.getExclude());
 						break;
 					}
 				}
-				metaData.setMetaData(fieldData.getField(), fieldData);
 				membersLt.getColumn(column).pack();
-			} else if (memberData instanceof MethodData) {
-				MethodData methodData = (MethodData)memberData;
+			} else if (memberData instanceof JNIMethod) {
+				JNIMethod method = (JNIMethod)memberData;
 				switch (column) {
 					case METHOD_ACCESSOR_COLUMN: {
-						methodData.setAccessor(text);
-						item.setText(column, methodData.getAccessor());
+						method.setAccessor(text.equals(method.getName()) ? "" : text);
+						item.setText(column, method.getAccessor());
 						break;
 					}
 					case METHOD_EXCLUDE_COLUMN: {
-						methodData.setExclude(text);
-						item.setText(column, methodData.getExclude());
+						method.setExclude(text);
+						item.setText(column, method.getExclude());
 						break;
 					}
 				}
-				metaData.setMetaData(methodData.getMethod(), methodData);
 				membersLt.getColumn(column).pack();
 			}
 		}
@@ -607,21 +644,12 @@
 			TableItem item = memberListEditor.getItem();
 			if (item == null) return;
 			int column = memberListEditor.getColumn();
-			ItemData data = (ItemData)item.getData();
+			JNIItem data = (JNIItem)item.getData();
 			String[] flags = memberEditorLt.getSelection();
 			data.setFlags(flags);
 			item.setText(column, getFlagsString(data.getFlags()));
 			item.setChecked(data.getGenerate());
-			MetaData metaData = app.getMetaData();
-			if (data instanceof FieldData) {
-				FieldData fieldData = (FieldData)data;
-				metaData.setMetaData(fieldData.getField(), fieldData);
-				membersLt.getColumn(column).pack();
-			} else if (data instanceof MethodData) {
-				MethodData methodData = (MethodData)data;
-				metaData.setMetaData(methodData.getMethod(), methodData);
-				membersLt.getColumn(column).pack();
-			}
+			membersLt.getColumn(column).pack();
 		}
 	};
 	memberEditorLt.addListener(SWT.DefaultSelection, memberListListener);
@@ -645,17 +673,29 @@
 						}				
 					}
 					if (column == -1) return;
-					ItemData itemData = (ItemData)item.getData();
-					if (itemData instanceof FieldData) {
-						FieldData data = (FieldData)itemData;
+					Object itemData = item.getData();
+					if (itemData instanceof JNIField) {
+						JNIField field = (JNIField)itemData;
 						if (column == FIELD_CAST_COLUMN || column == FIELD_ACCESSOR_COLUMN || column == FIELD_EXCLUDE_COLUMN) {
 							memberTextEditor.setColumn(column);
 							memberTextEditor.setItem(item);
 							String text = "";
 							switch (column) {
-								case FIELD_CAST_COLUMN: text = data.getCast(); break;
-								case FIELD_ACCESSOR_COLUMN: text = data.getAccessor(); break;
-								case FIELD_EXCLUDE_COLUMN: text = data.getExclude(); break;
+								case FIELD_CAST_COLUMN: text = field.getCast(); break;
+								case FIELD_ACCESSOR_COLUMN: {
+									text = field.getAccessor(); 
+									if (text.length() == 0) {
+										text = field.getName();
+										int index = text.lastIndexOf('_');
+										if (index != -1) {
+											char[] chars = text.toCharArray();
+											chars[index] = '.';
+											text = new String(chars);
+										}
+									}
+									break;
+								}
+								case FIELD_EXCLUDE_COLUMN: text = field.getExclude(); break;
 							}
 							memberEditorTx.setText(text);
 							memberEditorTx.selectAll();
@@ -664,22 +704,26 @@
 						} else if (column == FIELD_FLAGS_COLUMN) {
 							memberListEditor.setColumn(column);
 							memberListEditor.setItem(item);
-							memberEditorLt.setItems(FieldData.getAllFlags());
-							memberEditorLt.setSelection(data.getFlags());
+							memberEditorLt.setItems(JNIField.FLAGS);
+							memberEditorLt.setSelection(field.getFlags());
 							floater.setLocation(membersLt.toDisplay(e.x, e.y));
 							floater.pack();
 							floater.setVisible(true);
 							memberEditorLt.setFocus();
 						}
-					} else if (itemData instanceof MethodData) {
-						MethodData data = (MethodData)itemData;
+					} else if (itemData instanceof JNIMethod) {
+						JNIMethod method = (JNIMethod)itemData;
 						if (column == METHOD_EXCLUDE_COLUMN || column == METHOD_ACCESSOR_COLUMN) {
 							memberTextEditor.setColumn(column);
 							memberTextEditor.setItem(item);
 							String text = "";
 							switch (column) {
-								case METHOD_ACCESSOR_COLUMN: text = data.getAccessor(); break;
-								case METHOD_EXCLUDE_COLUMN: text = data.getExclude(); break;
+								case METHOD_ACCESSOR_COLUMN: {
+									text = method.getAccessor();
+									if (text.length() == 0) text = method.getName();
+									break;
+								}
+								case METHOD_EXCLUDE_COLUMN: text = method.getExclude(); break;
 							}
 							memberEditorTx.setText(text);
 							memberEditorTx.selectAll();
@@ -688,8 +732,8 @@
 						} else if (column == METHOD_FLAGS_COLUMN) {
 							memberListEditor.setColumn(column);
 							memberListEditor.setItem(item);
-							memberEditorLt.setItems(MethodData.getAllFlags());
-							memberEditorLt.setSelection(data.getFlags());
+							memberEditorLt.setItems(JNIMethod.FLAGS);
+							memberEditorLt.setSelection(method.getFlags());
 							floater.setLocation(membersLt.toDisplay(e.x, e.y));
 							floater.pack();
 							floater.setVisible(true);
@@ -748,13 +792,11 @@
 			TableItem item = paramTextEditor.getItem();
 			if (item == null) return;
 			int column = paramTextEditor.getColumn();
-			ParameterData paramData = (ParameterData)item.getData();
+			JNIParameter param = (JNIParameter)item.getData();
 			if (column == PARAM_CAST_COLUMN) {
 				String text = paramEditorTx.getText();
-				paramData.setCast(text);
-				item.setText(column, paramData.getCast());
-				MetaData metaData = app.getMetaData();
-				metaData.setMetaData(paramData.getMethod(), paramData.getParameter(), paramData);
+				param.setCast(text);
+				item.setText(column, param.getCast());
 				paramsLt.getColumn(column).pack();
 			}
 		}
@@ -767,7 +809,7 @@
 	floater.setLayout(new FillLayout());
 	paramListEditor = new FlagsEditor(paramsLt);
 	paramEditorLt = new List(floater, SWT.MULTI | SWT.BORDER);
-	paramEditorLt.setItems(ParameterData.getAllFlags());
+	paramEditorLt.setItems(JNIParameter.FLAGS);
 	floater.pack();
 	floater.addListener(SWT.Close, new Listener() {
 		public void handleEvent(Event e) {
@@ -790,13 +832,11 @@
 			TableItem item = paramListEditor.getItem();
 			if (item == null) return;
 			int column = paramListEditor.getColumn();
-			ParameterData paramData = (ParameterData)item.getData();
+			JNIParameter param = (JNIParameter)item.getData();
 			if (column == PARAM_FLAGS_COLUMN) {
 				String[] flags = paramEditorLt.getSelection();
-				paramData.setFlags(flags);
-				item.setText(column, getFlagsString(paramData.getFlags()));
-				MetaData metaData = app.getMetaData();
-				metaData.setMetaData(paramData.getMethod(), paramData.getParameter(), paramData);
+				param.setFlags(flags);
+				item.setText(column, getFlagsString(param.getFlags()));
 				paramsLt.getColumn(column).pack();
 			}
 		}
@@ -822,18 +862,18 @@
 						}				
 					}
 					if (column == -1) return;
-					ParameterData data = (ParameterData)item.getData();
+					JNIParameter param = (JNIParameter)item.getData();
 					if (column == PARAM_CAST_COLUMN) {
 						paramTextEditor.setColumn(column);
 						paramTextEditor.setItem(item);
-						paramEditorTx.setText(data.getCast());
+						paramEditorTx.setText(param.getCast());
 						paramEditorTx.selectAll();
 						paramEditorTx.setVisible(true);
 						paramEditorTx.setFocus();
 					} else if (column == PARAM_FLAGS_COLUMN) {
 						paramListEditor.setColumn(column);
 						paramListEditor.setItem(item);
-						paramEditorLt.setSelection(data.getFlags());
+						paramEditorLt.setSelection(param.getFlags());
 						floater.setLocation(paramsLt.toDisplay(e.x, e.y));
 						floater.setVisible(true);
 						paramEditorLt.setFocus();
@@ -923,6 +963,13 @@
 
 public void run() {
 	shell.open();
+	MessageBox box = new MessageBox(shell, SWT.YES | SWT.NO);
+	box.setText("Warning");
+	box.setMessage("This tool is obsolete as of Eclipse 3.5 M2.\nThe meta data has been embedded in java source files.\nThere is a new plugin tool that replaces this tool.\nSee http://www.eclipse.org/swt/jnigen.php.\n\n Continue?");
+	int result = box.open();
+	if (result == SWT.NO) {
+		shell.dispose();
+	}
 	while (!shell.isDisposed()) {
 		if (!display.readAndDispatch()) display.sleep ();
 	}
@@ -935,8 +982,8 @@
 	return app.getMainClassName().substring(0, dot);
 }
 
-String getClassString(Class clazz) {
-	String name = JNIGenerator.getTypeSignature3(clazz);
+String getClassString(JNIType type) {
+	String name = type.getTypeSignature3(false);
 	int index = name.lastIndexOf('.');
 	if (index == -1) return name;
 	return name.substring(index + 1, name.length());
@@ -953,16 +1000,16 @@
 	return buffer.toString();
 }
 
-String getMethodString(Method method) {
+String getMethodString(JNIMethod method) {
 	String pkgName = getPackageString(method.getDeclaringClass().getName());
 	StringBuffer buffer = new StringBuffer();
 	buffer.append(method.getName());
 	buffer.append("(");
-	Class[] params = method.getParameterTypes();
+	JNIParameter[] params = method.getParameters();
 	for (int i = 0; i < params.length; i++) {
-		Class param = params[i];
+		JNIParameter param = params[i];
 		if (i != 0) buffer.append(",");
-		String string = JNIGenerator.getTypeSignature3(param);
+		String string = param.getType().getTypeSignature3(false);
 		if (string.startsWith(pkgName)) string = string.substring(pkgName.length() + 1);
 		buffer.append(string);
 	}
@@ -970,33 +1017,33 @@
 	return buffer.toString();
 }
 
-String getFieldString(Field field) {
+String getFieldString(JNIField field) {
 	return field.getName();
 }
 
 void updateClasses() {
 	classesLt.removeAll();
-	MetaData metaData = app.getMetaData();
-	Class[] classes = app.getClasses();
+	JNIClass[] classes = app.getClasses();
+	int mainIndex = 0;
 	for (int i = 0; i < classes.length; i++) {
-		Class clazz = classes[i];
-		ClassData classData = metaData.getMetaData(clazz);
+		JNIClass clazz = classes[i];
+		if (clazz.equals(app.getMainClass())) mainIndex = i;
 		TableItem item = new TableItem(classesLt, SWT.NONE);
-		item.setData(classData);
-		item.setText(CLASS_NAME_COLUMN, getClassString(clazz));
-		item.setText(CLASS_FLAGS_COLUMN, getFlagsString(classData.getFlags()));
-		item.setChecked(classData.getGenerate());
+		item.setData(clazz);
+		item.setText(CLASS_NAME_COLUMN, clazz.getSimpleName());
+		item.setText(CLASS_FLAGS_COLUMN, getFlagsString(clazz.getFlags()));
+		item.setChecked(clazz.getGenerate());
 	}
 	TableColumn[] columns = classesLt.getColumns();
 	for (int i = 0; i < columns.length; i++) {
 		TableColumn column = columns[i];
 		column.pack();
 	}
+	classesLt.setSelection(mainIndex);
 }
 
 void updateMembers() {
 	membersLt.removeAll();
-	MetaData metaData = app.getMetaData();
 	membersLt.setHeaderVisible(false);
 	TableColumn[] columns = membersLt.getColumns();
 	for (int i = 0; i < columns.length; i++) {
@@ -1006,12 +1053,11 @@
 	int[] indices = classesLt.getSelectionIndices();
 	if (indices.length != 1) return;
 	TableItem classItem = classesLt.getItem(indices[0]);
-	ClassData classData = (ClassData)classItem.getData();
-	Class clazz = classData.getClazz();
+	JNIClass clazz = (JNIClass)classItem.getData();
 	boolean hasNatives = false;
-	Method[] methods = clazz.getDeclaredMethods();
+	JNIMethod[] methods = clazz.getDeclaredMethods();
 	for (int i = 0; i < methods.length; i++) {
-		Method method = methods[i];
+		JNIMethod method = methods[i];
 		int mods = method.getModifiers();
 		if (hasNatives =((mods & Modifier.NATIVE) != 0)) break;
 	}
@@ -1030,15 +1076,14 @@
 		*/
 		JNIGenerator.sort(methods);
 		for (int i = 0; i < methods.length; i++) {
-			Method method = methods[i];
+			JNIMethod method = methods[i];
 			if ((method.getModifiers() & Modifier.NATIVE) == 0) continue;
-			MethodData methodData = metaData.getMetaData(method);
 			TableItem item = new TableItem(membersLt, SWT.NONE);
-			item.setData(methodData);
+			item.setData(method);
 			item.setText(METHOD_NAME_COLUMN, getMethodString(method));
-			item.setChecked(methodData.getGenerate());
-			item.setText(METHOD_FLAGS_COLUMN, getFlagsString(methodData.getFlags()));
-			item.setText(METHOD_ACCESSOR_COLUMN, methodData.getAccessor());
+			item.setChecked(method.getGenerate());
+			item.setText(METHOD_FLAGS_COLUMN, getFlagsString(method.getFlags()));
+			item.setText(METHOD_ACCESSOR_COLUMN, method.getAccessor());
 			/*
 			item.setText(METHOD_EXCLUDE_COLUMN, methodData.getExclude());
 			*/
@@ -1057,21 +1102,20 @@
 		column = new TableColumn(membersLt, SWT.NONE, FIELD_EXCLUDE_COLUMN);
 		column.setText("Exclude");
 		*/
-		Field[] fields = clazz.getDeclaredFields();	
+		JNIField[] fields = clazz.getDeclaredFields();	
 		for (int i = 0; i < fields.length; i++) {
-			Field field = fields[i];
+			JNIField field = fields[i];
 			int mods = field.getModifiers(); 
 			if (((mods & Modifier.PUBLIC) == 0) ||
 				((mods & Modifier.FINAL) != 0) ||
 				((mods & Modifier.STATIC) != 0)) continue;
-			FieldData fieldData = metaData.getMetaData(field);
 			TableItem item = new TableItem(membersLt, SWT.NONE);
-			item.setData(fieldData);
+			item.setData(field);
 			item.setText(FIELD_NAME_COLUMN, getFieldString(field));
-			item.setChecked(fieldData.getGenerate());
-			item.setText(FIELD_CAST_COLUMN, fieldData.getCast());
-			item.setText(FIELD_FLAGS_COLUMN, getFlagsString(fieldData.getFlags()));
-			item.setText(FIELD_ACCESSOR_COLUMN, fieldData.getAccessor());
+			item.setChecked(field.getGenerate());
+			item.setText(FIELD_CAST_COLUMN, field.getCast());
+			item.setText(FIELD_FLAGS_COLUMN, getFlagsString(field.getFlags()));
+			item.setText(FIELD_ACCESSOR_COLUMN, field.getAccessor());
 			/*
 			item.setText(FIELD_EXCLUDE_COLUMN, fieldData.getExclude());
 			*/
@@ -1088,7 +1132,6 @@
 
 void updateParameters() {
 	paramsLt.removeAll();
-	MetaData metaData = app.getMetaData();
 	int[] indices = membersLt.getSelectionIndices();
 	if (indices.length != 1) {
 		paramsLt.setHeaderVisible(false);
@@ -1096,20 +1139,18 @@
 	}
 	TableItem memberItem = membersLt.getItem(indices[0]);
 	Object data = memberItem.getData();
-	if (!(data instanceof MethodData)) return;
+	if (!(data instanceof JNIMethod)) return;
 	paramsLt.setRedraw(false);
-	MethodData methodData = (MethodData)memberItem.getData();
-	Method method = methodData.getMethod();
-	Class[] params = method.getParameterTypes();
+	JNIMethod method = (JNIMethod)data;
+	JNIParameter[] params = method.getParameters();
 	for (int i = 0; i < params.length; i++) {
-		Class param = params[i];
-		ParameterData paramData = metaData.getMetaData(method, i);
+		JNIParameter param = params[i];
 		TableItem item = new TableItem(paramsLt, SWT.NONE);
-		item.setData(paramData);
+		item.setData(param);
 		item.setText(PARAM_INDEX_COLUMN, String.valueOf(i));
-		item.setText(PARAM_TYPE_COLUMN, getClassString(param));
-		item.setText(PARAM_CAST_COLUMN, paramData.getCast());
-		item.setText(PARAM_FLAGS_COLUMN, getFlagsString(paramData.getFlags()));
+		item.setText(PARAM_TYPE_COLUMN, getClassString(param.getType()));
+		item.setText(PARAM_CAST_COLUMN, param.getCast());
+		item.setText(PARAM_FLAGS_COLUMN, getFlagsString(param.getFlags()));
 	}
 	TableColumn[] columns = paramsLt.getColumns();
 	for (int i = 0; i < columns.length; i++) {
@@ -1121,25 +1162,25 @@
 }
 
 void updateGenerate(TableItem item) {
-	MetaData metaData = app.getMetaData();
-	ItemData itemData = (ItemData)item.getData();
+	JNIItem itemData = (JNIItem)item.getData();
 	itemData.setGenerate(item.getChecked());
-	if (itemData instanceof ClassData) {
-		ClassData data = (ClassData)itemData;
-		metaData.setMetaData(data.getClazz(), data);
-	} else if (itemData instanceof FieldData) {
-		FieldData data = (FieldData)itemData;
-		item.setText(FIELD_FLAGS_COLUMN, getFlagsString(data.getFlags()));
-		metaData.setMetaData(data.getField(), data);
-	} else if (itemData instanceof MethodData) {
-		MethodData data = (MethodData)itemData;
-		item.setText(METHOD_FLAGS_COLUMN, getFlagsString(data.getFlags()));
-		metaData.setMetaData(data.getMethod(), data);
-	} else if (itemData instanceof ParameterData) {
-		ParameterData data = (ParameterData)itemData;
-		item.setText(PARAM_FLAGS_COLUMN, getFlagsString(data.getFlags()));
-		metaData.setMetaData(data.getMethod(), data.getParameter(), data);
-	}
+//	MetaData metaData = app.getMetaData();
+//	if (itemData instanceof JNIClass) {
+//		ClassData data = (ClassData)itemData;
+//		metaData.setMetaData(data.getClazz(), data);
+//	} else if (itemData instanceof FieldData) {
+//		FieldData data = (FieldData)itemData;
+//		item.setText(FIELD_FLAGS_COLUMN, getFlagsString(data.getFlags()));
+//		metaData.setMetaData(data.getField(), data);
+//	} else if (itemData instanceof MethodData) {
+//		MethodData data = (MethodData)itemData;
+//		item.setText(METHOD_FLAGS_COLUMN, getFlagsString(data.getFlags()));
+//		metaData.setMetaData(data.getMethod(), data);
+//	} else if (itemData instanceof ParameterData) {
+//		ParameterData data = (ParameterData)itemData;
+//		item.setText(PARAM_FLAGS_COLUMN, getFlagsString(data.getFlags()));
+//		metaData.setMetaData(data.getMethod(), data.getParameter(), data);
+//	}
 }
 
 boolean updateOutputDir() {
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIItem.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIItem.java
new file mode 100644
index 0000000..8558d47
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIItem.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2009 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.tools.internal;
+
+public interface JNIItem extends Flags {
+	
+	public static final boolean GEN64 = true;
+
+public String[] getFlags();
+
+public boolean getFlag(String flag);
+
+public Object getParam(String key);
+
+public boolean getGenerate();
+
+public void setFlags(String[] flags);
+
+public void setFlag(String flag, boolean value);
+
+public void setGenerate(boolean value);
+
+public void setParam(String key, Object value);
+		
+}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIMethod.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIMethod.java
new file mode 100644
index 0000000..ab41c6c
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIMethod.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 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.tools.internal;
+
+public interface JNIMethod extends JNIItem {
+
+	public static final String[] FLAGS = {FLAG_NO_GEN, FLAG_ADDRESS, FLAG_CONST, FLAG_DYNAMIC, FLAG_JNI, FLAG_CAST, FLAG_CPP, FLAG_NEW, FLAG_DELETE, FLAG_GCNEW, FLAG_GCOBJECT, FLAG_SETTER, FLAG_GETTER, FLAG_ADDER};
+	
+public String getName();
+
+public int getModifiers();
+
+public boolean isNativeUnique();
+
+public JNIParameter[] getParameters();
+
+public JNIType getReturnType();
+
+public JNIType getReturnType64();
+
+public JNIType[] getParameterTypes();
+
+public JNIType[] getParameterTypes64();
+
+public JNIClass getDeclaringClass();
+
+public String getAccessor();
+
+public String getExclude();
+
+public void setAccessor(String str);
+
+public void setExclude(String str);
+}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIParameter.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIParameter.java
new file mode 100644
index 0000000..4212430
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIParameter.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2009 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.tools.internal;
+
+public interface JNIParameter extends JNIItem {
+
+	public static final String[] FLAGS = {FLAG_NO_IN, FLAG_NO_OUT, FLAG_CRITICAL, FLAG_INIT, FLAG_STRUCT, FLAG_UNICODE, FLAG_SENTINEL, FLAG_GCOBJECT};
+
+public String getCast();
+
+public JNIMethod getMethod();
+
+public int getParameter();
+
+public JNIClass getTypeClass();
+
+public JNIType getType();
+
+public JNIType getType64();
+
+public void setCast(String str);
+}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIType.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIType.java
new file mode 100644
index 0000000..805248a
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIType.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2009 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.tools.internal;
+
+public interface JNIType {
+
+public boolean isPrimitive();
+
+public boolean isArray();
+
+public JNIType getComponentType();
+
+public boolean isType(String type);
+
+public String getName();
+
+public String getSimpleName();
+
+public String getTypeSignature(boolean define);
+
+public String getTypeSignature1(boolean define);
+
+public String getTypeSignature2(boolean define);
+
+public String getTypeSignature3(boolean define);
+
+public String getTypeSignature4(boolean define, boolean struct);
+
+}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/LockGenerator.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/LockGenerator.java
new file mode 100644
index 0000000..11affd6
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/LockGenerator.java
@@ -0,0 +1,143 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 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.tools.internal;
+
+import java.lang.reflect.Modifier;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class LockGenerator extends CleanupClass {
+	
+public LockGenerator() {
+}
+
+String getParams(JNIMethod method) {
+	int n_args = method.getParameters().length;
+	if (n_args == 0) return "";
+	String name = method.getName();
+	String params = "";
+	int index = 0;
+	while (true) {
+		index = classSource.indexOf(name, index + 1);
+		if (!Character.isWhitespace(classSource.charAt(index - 1))) continue;
+		if (index == -1) return null;
+		int parantesesStart = classSource.indexOf("(", index);
+		if (classSource.substring(index + name.length(), parantesesStart).trim().length() == 0) {
+			int parantesesEnd = classSource.indexOf(")", parantesesStart);
+ 			params = classSource.substring(parantesesStart + 1, parantesesEnd);
+ 			break;
+		}
+	}
+	return params;
+}
+
+String getReturn(JNIMethod method) {
+	JNIType returnType = method.getReturnType();
+	if (!returnType.isType("int")) return returnType.getTypeSignature3(false);
+	String modifierStr = Modifier.toString(method.getModifiers());
+	String name = method.getName();
+	Pattern p = Pattern.compile(modifierStr + ".*" + name + ".*(.*)");
+	Matcher m = p.matcher(classSource);
+	if (m.find()) {
+		String methodStr = classSource.substring(m.start(), m.end());
+		int index = methodStr.indexOf("/*long*/");
+		if (index != -1 && index < methodStr.indexOf(name)) {
+			return new ReflectType(Integer.TYPE).getTypeSignature3(false) + " /*long*/";
+		}		
+	}
+	return new ReflectType(Integer.TYPE).getTypeSignature3(false);
+}
+
+public void generate(JNIClass clazz) {
+	super.generate(clazz);
+	JNIMethod[] methods = clazz.getDeclaredMethods();
+	generate(methods);
+}
+
+public void generate(JNIMethod[] methods) {
+	sort(methods);	
+	for (int i = 0; i < methods.length; i++) {
+		JNIMethod method = methods[i];
+		if ((method.getModifiers() & Modifier.NATIVE) == 0) continue;
+		generate(method);
+	}
+}
+
+public void generate(JNIMethod method) {
+	int modifiers = method.getModifiers();
+	boolean lock = (modifiers & Modifier.SYNCHRONIZED) != 0;
+	String returnStr = getReturn(method);
+	String paramsStr = getParams(method);
+	if (lock) {
+		String modifiersStr = Modifier.toString(modifiers & ~Modifier.SYNCHRONIZED);
+		output(modifiersStr);
+		if (modifiersStr.length() > 0) output(" ");
+		output(returnStr);
+		output(" _");
+		output(method.getName());
+		output("(");
+		output(paramsStr);
+		outputln(");");
+	}
+	String modifiersStr = Modifier.toString(modifiers & ~(Modifier.SYNCHRONIZED | (lock ? Modifier.NATIVE : 0)));
+	output(modifiersStr);
+	if (modifiersStr.length() > 0) output(" ");
+	output(returnStr);
+	output(" ");
+	output(method.getName());
+	output("(");
+	output(paramsStr);
+	output(")");
+	if (lock) {
+		outputln(" {");
+		outputln("\tlock.lock();");
+		outputln("\ttry {");
+		output("\t\t");
+		if (!method.getReturnType().isType("void")) {
+			output("return ");
+		}
+		output("_");
+		output(method.getName());
+		output("(");
+		String[] paramNames = getArgNames(method);
+		for (int i = 0; i < paramNames.length; i++) {
+			if (i != 0) output(", ");
+			output(paramNames[i]);
+		}
+		outputln(");");
+		outputln("\t} finally {");
+		outputln("\t\tlock.unlock();");
+		outputln("\t}");
+		outputln("}");
+	} else {
+		outputln(";");
+	}
+}
+
+public static void main(String[] args) {
+	if (args.length < 2) {
+		System.out.println("Usage: java LockGenerator <OS className> <OS class source>");
+		return;
+	}
+	try {
+		LockGenerator gen = new LockGenerator();
+		String clazzName = args[0];
+		String classSource = args[1]; 
+		Class clazz = Class.forName(clazzName);
+		gen.setClassSourcePath(classSource);
+		gen.generate(new ReflectClass(clazz));
+	} catch (Exception e) {
+		System.out.println("Problem");
+		e.printStackTrace(System.out);
+	}
+}
+
+}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/MetaData.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/MetaData.java
index 6d89e83..0bb0c19 100644
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/MetaData.java
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/MetaData.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2007 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
@@ -12,9 +12,8 @@
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
 import java.util.Properties;
+import java.util.Calendar;
 
 public class MetaData {
 	
@@ -48,116 +47,25 @@
 	this.data = data;
 }
 
-public ClassData getMetaData(Class clazz) {
-	String key = JNIGenerator.toC(clazz.getName());
-	String value = getMetaData(key, "");
-	return new ClassData(clazz, value);
-}
-
-public FieldData getMetaData(Field field) {
-	String className = JNIGenerator.getClassName(field.getDeclaringClass());
-	String key = className + "_" + field.getName();
-	String value = getMetaData(key, "");
-	return new FieldData(field, value);
-}
-
-boolean convertTo32Bit(Class[] paramTypes) {
-	boolean changed = false;
-	for (int i = 0; i < paramTypes.length; i++) {
-		Class paramType = paramTypes[i];
-		if (paramType == Long.TYPE) {
-			paramTypes[i] = Integer.TYPE;
-			changed = true;
-		}
-		if (paramType == long[].class) {
-			paramTypes[i] = int[].class;
-			changed = true;
-		}
+public String getCopyright() {
+	String copyright = getMetaData("swt_copyright", null);
+	if (copyright == null) return "";
+	if (copyright.length() == 0) return "";
+	String end_year_tag = "%END_YEAR";
+	int index = copyright.indexOf(end_year_tag);
+	if (index != -1) {
+		String temp = copyright.substring(0, index);
+		temp += Calendar.getInstance().get(Calendar.YEAR);
+		temp += copyright.substring(index + end_year_tag.length());
+		copyright = temp;
 	}
-	return changed;	
-}
-
-public MethodData getMetaData(Method method) {
-	String className = JNIGenerator.getClassName(method.getDeclaringClass());
-	String key = className + "_" + JNIGenerator.getFunctionName(method);
-	String value = getMetaData(key, null);
-	if (value == null) {
-		key = className + "_" + method.getName();
-		value = getMetaData(key, null);
-	}
-	/*
-	* Support for 64 bit port.
-	*/
-	if (value == null) {
-		Class[] paramTypes = method.getParameterTypes();
-		if (convertTo32Bit(paramTypes)) {
-			key = className + "_" + JNIGenerator.getFunctionName(method, paramTypes);
-			value = getMetaData(key, null);
-		}
-	}	
-	if (value == null) value = "";	
-	return new MethodData(method, value);
-}
-
-public ParameterData getMetaData(Method method, int parameter) {
-	String className = JNIGenerator.getClassName(method.getDeclaringClass());
-	String key = className + "_" + JNIGenerator.getFunctionName(method) + "_" + parameter;
-	String value = getMetaData(key, null);
-	if (value == null) {
-		key = className + "_" + method.getName() + "_" + parameter;
-		value = getMetaData(key, null);
-	}	
-	/*
-	* Support for 64 bit port.
-	*/
-	if (value == null) {
-		Class[] paramTypes = method.getParameterTypes();
-		if (convertTo32Bit(paramTypes)) {
-			key = className + "_" + JNIGenerator.getFunctionName(method, paramTypes) + "_" + parameter;
-			value = getMetaData(key, null);
-		}
-	}	
-	if (value == null) value = "";	
-	return new ParameterData(method, parameter, value);
+	return copyright;
 }
 
 public String getMetaData(String key, String defaultValue) {
 	return data.getProperty(key, defaultValue);
 }
 
-public void setMetaData(Class clazz, ClassData value) {
-	String key = JNIGenerator.toC(clazz.getName());
-	setMetaData(key, value.toString());
-}
-
-public void setMetaData(Field field, FieldData value) {
-	String className = JNIGenerator.getClassName(field.getDeclaringClass());
-	String key = className + "_" + field.getName();
-	setMetaData(key, value.toString());
-}
-
-public void setMetaData(Method method, MethodData value) {
-	String key;
-	String className = JNIGenerator.getClassName(method.getDeclaringClass());
-	if (JNIGenerator.isNativeUnique(method)) {
-		key = className + "_" + method.getName ();
-	} else {
-		key = className + "_" + JNIGenerator.getFunctionName(method);
-	}
-	setMetaData(key, value.toString());
-}
-
-public void setMetaData(Method method, int arg, ParameterData value) {
-	String key;
-	String className = JNIGenerator.getClassName(method.getDeclaringClass());
-	if (JNIGenerator.isNativeUnique(method)) {
-		key = className + "_" + method.getName () + "_" + arg;
-	} else {
-		key = className + "_" + JNIGenerator.getFunctionName(method) + "_" + arg;
-	}
-	setMetaData(key, value.toString());
-}
-
 public void setMetaData(String key, String value) {
 	data.setProperty(key, value);
 }
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/MetaDataGenerator.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/MetaDataGenerator.java
index c7077df..d90c663 100644
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/MetaDataGenerator.java
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/MetaDataGenerator.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.swt.tools.internal;
 
-import java.lang.reflect.*;
+import java.lang.reflect.Modifier;
 
 public class MetaDataGenerator extends JNIGenerator {
 
@@ -18,22 +18,21 @@
 	generateMetaData("swt_properties_copyright");
 }
 
-public void generate(Class clazz) {
+public void generate(JNIClass clazz) {
 	output(toC(clazz.getName()));
 	output("=");
-	ClassData data = getMetaData().getMetaData(clazz);
-	if (data != null) output(data.toString());
+	output(((AbstractItem)clazz).flatten());
 	outputln();
-	Field[] fields = clazz.getDeclaredFields();
+	JNIField[] fields = clazz.getDeclaredFields();
 	generate(fields);
-	Method[] methods = clazz.getDeclaredMethods();
+	JNIMethod[] methods = clazz.getDeclaredMethods();
 	generate(methods);
 	outputln();
 }
 
-public void generate(Field[] fields) {
+public void generate(JNIField[] fields) {
 	for (int i = 0; i < fields.length; i++) {
-		Field field = fields[i];
+		JNIField field = fields[i];
 		int mods = field.getModifiers();
 		if ((mods & Modifier.PUBLIC) == 0) continue;
 		if ((mods & Modifier.FINAL) != 0) continue;
@@ -43,19 +42,18 @@
 	}
 }
 
-public void generate(Field field) {
-	output(getClassName(field.getDeclaringClass()));
+public void generate(JNIField field) {
+	output(field.getDeclaringClass().getSimpleName());
 	output("_");
 	output(field.getName());
 	output("=");
-	FieldData data = getMetaData().getMetaData(field);
-	if (data != null) output(data.toString());
+	output(((AbstractItem)field).flatten());
 }
 
-public void generate(Method[] methods) {
+public void generate(JNIMethod[] methods) {
 	sort(methods);
 	for (int i = 0; i < methods.length; i++) {
-		Method method = methods[i];
+		JNIMethod method = methods[i];
 		if ((method.getModifiers() & Modifier.NATIVE) == 0) continue;
 		generate(method);
 		outputln();
@@ -63,11 +61,11 @@
 	}
 }
 
-public void generate(Method method) {
+public void generate(JNIMethod method) {
 	StringBuffer buffer = new StringBuffer();
-	buffer.append(getClassName(method.getDeclaringClass()));
+	buffer.append(method.getDeclaringClass().getSimpleName());
 	buffer.append("_");
-	if (isNativeUnique(method)) {
+	if (method.isNativeUnique()) {
 		buffer.append(method.getName());
 	} else {
 		buffer.append(getFunctionName(method));
@@ -75,16 +73,14 @@
 	String key = buffer.toString();
 	output(key);
 	output("=");
-	MethodData methodData = getMetaData().getMetaData(method);
-	if (methodData != null) output(methodData.toString());
+	output(((AbstractItem)method).flatten());
 	outputln();
-	int length = method.getParameterTypes().length;
-	for (int i = 0; i < length; i++) {
+	JNIParameter[] params = method.getParameters();
+	for (int i = 0; i < params.length; i++) {
 		output(key);
 		output("_");
 		output(i + "=");
-		ParameterData paramData = getMetaData().getMetaData(method, i);
-		if (paramData != null) output(paramData.toString());
+		output(((AbstractItem)params[i]).flatten());
 		outputln();		
 	}
 }
@@ -93,11 +89,15 @@
 	return ".properties";
 }
 
+protected boolean getGenerate(JNIItem item) {
+	return true;
+}
+
 public String getOutputName() {
 	return getMainClass().getName();
 }
 
-protected boolean getGenerate(Class clazz) {
+protected boolean getGenerate(JNIClass clazz) {
 	return true;
 }
 
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/MethodData.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/MethodData.java
deleted file mode 100644
index e02d698..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/MethodData.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.tools.internal;
-
-import java.lang.reflect.Method;
-
-public class MethodData extends ItemData {
-	
-	Method method;
-
-public MethodData(Method method, String str) {
-	super(str);
-	this.method = method;
-}
-
-public static String[] getAllFlags() {
-	return new String[]{"no_gen", "address", "const", "dynamic", "jni", "cpp", "new", "delete"};
-}
-
-public Method getMethod() {
-	return method;
-}
-
-public String getAccessor() {
-	return (String)getParam("accessor");
-}
-
-public String getExclude() {
-	return (String)getParam("exclude");
-}
-
-public void setAccessor(String str) { 
-	setParam("accessor", str);
-}
-
-public void setExclude(String str) { 
-	setParam("exclude", str);
-}
-
-}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/NativesGenerator.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/NativesGenerator.java
index 2f8cd02..a48d2fb 100644
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/NativesGenerator.java
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/NativesGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2007 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
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.swt.tools.internal;
 
-import java.lang.reflect.*;
+import java.lang.reflect.Modifier;
 import java.util.HashSet;
 import java.util.Iterator;
 
@@ -23,7 +23,7 @@
 }
 
 public void generateCopyright() {
-	generateMetaData("swt_copyright");
+	outputln(fixDelimiter(getMetaData().getCopyright()));
 }
 
 public void generateIncludes() {
@@ -38,13 +38,13 @@
 	outputln();
 }
 
-public void generate(Class clazz, String methodName) {
-	Method[] methods = clazz.getDeclaredMethods();
+public void generate(JNIClass clazz, String methodName) {
+	JNIMethod[] methods = clazz.getDeclaredMethods();
 	int count = 0;
 	for (int i = 0; i < methods.length; i++) {
 		if (methods[i].getName().startsWith(methodName)) count++;
 	}
-	Method[] result = new Method[count];
+	JNIMethod[] result = new JNIMethod[count];
 	count = 0;
 	for (int i = 0; i < methods.length; i++) {
 		if (methods[i].getName().startsWith(methodName)) result[count++] = methods[i];
@@ -52,53 +52,158 @@
 	generate(result);
 }
 
-public void generate(Class clazz) {
-	Method[] methods = clazz.getDeclaredMethods();
+public void generate(JNIClass clazz) {
+	JNIMethod[] methods = clazz.getDeclaredMethods();
 	int i = 0;
 	for (; i < methods.length; i++) {
-		Method method = methods[i];
+		JNIMethod method = methods[i];
 		if ((method.getModifiers() & Modifier.NATIVE) != 0) break;
 	}
 	if (i == methods.length) return;
 	sort(methods);
-	if (isCPP) {
-		outputln("extern \"C\" {");
-		outputln();
-	}
 	generateNativeMacro(clazz);
 	generateExcludes(methods);
 	generate(methods);
-	if (isCPP) {
-		outputln("}");
-	}
 }
 
-public void generate(Method[] methods) {
+public void generate(JNIMethod[] methods) {
 	sort(methods);	
 	for (int i = 0; i < methods.length; i++) {
-		Method method = methods[i];
+		JNIMethod method = methods[i];
 		if ((method.getModifiers() & Modifier.NATIVE) == 0) continue;
 		generate(method);
 		if (progress != null) progress.step();
 	}
 }
 
-public void generate(Method method) {
-	MethodData methodData = getMetaData().getMetaData(method);
-	if (methodData.getFlag("no_gen")) return;
-	Class returnType = method.getReturnType();
-	Class[] paramTypes = method.getParameterTypes();
-	String function = getFunctionName(method);
+boolean isStruct(String flagsStr) {
+	String[] flags = split(flagsStr, " ");
+	for (int i = 0; i < flags.length; i++) {
+		if (flags[i].equals(Flags.FLAG_STRUCT)) return true;
+	}
+	return false;
+}
+
+void generateCallback(JNIMethod method, String function, JNIParameter[] params, JNIType returnType) {
+	output("static jintLong ");
+	output(function);
+	outputln(";");
+	output("static ");
+	String[] types = split((String)method.getParam("callback_types"), ";");
+	String[] flags = split((String)method.getParam("callback_flags"), ";");
+	output(types[0]);
+	output(" ");
+	output("proc_");
+	output(function);
+	output("(");
+	boolean first = true;
+	for (int i = 1; i < types.length; i++) {
+		if (!first) output(", ");
+		output(types[i]);
+		output(" ");
+		output("arg");
+		output(String.valueOf(i - 1));
+		first = false;
+	}
+	outputln(") {");
 	
-	if (!(returnType == Void.TYPE || returnType.isPrimitive() || isSystemClass(returnType) || returnType == String.class)) {
+	output("\t");
+	if (isStruct(flags[0])) {
+		output(types[0]);
+		output("* lprc = ");
+	} else if (!types[0].equals("void")) {
+		output("return ");
+	}
+	output("((");
+	output(types[0]);
+	if (isStruct(flags[0])) output("*");
+	output(" (*)(");
+	first = true;
+	for (int i = 1; i < types.length; i++) {
+		if (!first) output(", ");
+		first = false;
+		output(types[i]);
+		if (isStruct(flags[i])) output("*");
+	}
+	output("))");
+	output(function);
+	output(")(");
+	first = true;
+	for (int i = 1; i < types.length; i++) {
+		if (!first) output(", ");
+		first = false;
+		if (isStruct(flags[i])) output("&");
+		output("arg");
+		output(String.valueOf(i -1));
+	}
+	outputln(");");
+	if (isStruct(flags[0])) {
+		output("\t");
+		output(types[0]);
+		outputln(" rc;");
+		outputln("\tif (lprc) {");
+		outputln("\t\trc = *lprc;");
+		outputln("\t\tfree(lprc);");
+		outputln("\t} else {");
+		output("\t\tmemset(&rc, 0, sizeof(");
+		output(types[0]);
+		outputln("));");
+		outputln("\t}");
+		outputln("\treturn rc;");
+	}
+	outputln("}");
+	
+	output("static jintLong ");
+	output(method.getName());
+	outputln("(jintLong func) {");
+	output("\t");
+	output(function);
+	outputln(" = func;");
+	output("\treturn (jintLong)proc_");
+	output(function);
+	outputln(";");
+	outputln("}");
+}
+
+public void generate(JNIMethod method) {
+	if (method.getFlag(FLAG_NO_GEN)) return;
+	JNIType returnType = method.getReturnType(), returnType64 = method.getReturnType64();	
+	if (!(returnType.isType("void") || returnType.isPrimitive() || isSystemClass(returnType) || returnType.isType("java.lang.String"))) {
 		output("Warning: bad return type. :");
 		outputln(method.toString());
 		return;
 	}
-	
-	generateSourceStart(function);
-	generateFunctionPrototype(method, function, paramTypes, returnType);
-	generateFunctionBody(method, methodData, function, paramTypes, returnType);
+	JNIParameter[] params = method.getParameters();
+	String function = getFunctionName(method), function64 = getFunctionName(method, method.getParameterTypes64());	
+	generateSourceStart(function, function64);
+	boolean sameFunction = function.equals(function64);
+	if (!sameFunction) {
+		output("#ifndef ");
+		output(JNI64);
+		outputln();
+	}
+	if (isCPP) {
+		output("extern \"C\" ");
+		generateFunctionPrototype(method, function, params, returnType, returnType64, true);
+		outputln(";");
+	}
+	if (function.startsWith("CALLBACK_")) {
+		generateCallback(method, function, params, returnType);
+	}
+	generateFunctionPrototype(method, function, params, returnType, returnType64, !sameFunction);
+	if (!function.equals(function64)) {
+		outputln();
+		outputln("#else");
+		if (isCPP) {
+			output("extern \"C\" ");
+			generateFunctionPrototype(method, function64, params, returnType, returnType64, true);
+			outputln(";");
+		}
+		generateFunctionPrototype(method, function64, params, returnType, returnType64, !sameFunction);
+		outputln();
+		outputln("#endif");
+	}
+	generateFunctionBody(method, function, function64, params, returnType, returnType64);
 	generateSourceEnd(function);
 	outputln();
 }
@@ -107,13 +212,12 @@
 	this.enterExitMacro = enterExitMacro;
 }
 
-void generateExcludes(Method[] methods) {
+void generateExcludes(JNIMethod[] methods) {
 	HashSet excludes = new HashSet();
 	for (int i = 0; i < methods.length; i++) {
-		Method method = methods[i];
+		JNIMethod method = methods[i];
 		if ((method.getModifiers() & Modifier.NATIVE) == 0) continue;
-		MethodData methodData = getMetaData().getMetaData(method);
-		String exclude = methodData.getExclude();
+		String exclude = method.getExclude();
 		if (exclude.length() != 0) {
 			excludes.add(exclude);
 		}
@@ -122,10 +226,9 @@
 		String exclude = (String)iter.next();
 		outputln(exclude);
 		for (int i = 0; i < methods.length; i++) {
-			Method method = methods[i];
+			JNIMethod method = methods[i];
 			if ((method.getModifiers() & Modifier.NATIVE) == 0) continue;
-			MethodData methodData = getMetaData().getMetaData(method);
-			String methodExclude = methodData.getExclude();
+			String methodExclude = method.getExclude();
 			if (exclude.equals(methodExclude)) {
 				output("#define NO_");
 				outputln(getFunctionName(method));
@@ -136,18 +239,19 @@
 	}
 }
 
-void generateNativeMacro(Class clazz) {
+void generateNativeMacro(JNIClass clazz) {
 	output("#define ");
-	output(getClassName(clazz));
+	output(clazz.getSimpleName());
 	output("_NATIVE(func) Java_");
 	output(toC(clazz.getName()));
 	outputln("_##func");
 	outputln();
 }
 
-boolean generateGetParameter(Method method, int i, Class paramType, ParameterData paramData, boolean critical, int indent) {
+boolean generateGetParameter(JNIMethod method, JNIParameter param, boolean critical, int indent) {
+	JNIType paramType = param.getType(), paramType64 = param.getType64();
 	if (paramType.isPrimitive() || isSystemClass(paramType)) return false;
-	String iStr = String.valueOf(i);
+	String iStr = String.valueOf(param.getParameter());
 	for (int j = 0; j < indent; j++) output("\t");
 	output("if (arg");
 	output(iStr);
@@ -155,10 +259,13 @@
 	output(iStr);
 	output(" = ");
 	if (paramType.isArray()) {
-		Class componentType = paramType.getComponentType();
+		JNIType componentType = paramType.getComponentType();
 		if (componentType.isPrimitive()) {
 			if (critical) {
 				if (isCPP) {
+					output("(");
+					output(componentType.getTypeSignature2(!paramType.equals(paramType64)));
+					output("*)");
 					output("env->GetPrimitiveArrayCritical(arg");
 				} else {
 					output("(*env)->GetPrimitiveArrayCritical(env, arg");
@@ -171,7 +278,7 @@
 				} else {
 					output("(*env)->Get");
 				}
-				output(getTypeSignature1(componentType));
+				output(componentType.getTypeSignature1(!paramType.equals(paramType64)));
 				if (isCPP) {
 					output("ArrayElements(arg");
 				} else {
@@ -183,8 +290,8 @@
 		} else {
 			throw new Error("not done");
 		}
-	} else if (paramType == String.class) {
-		if (paramData.getFlag("unicode")) {
+	} else if (paramType.isType("java.lang.String")) {
+		if (param.getFlag(FLAG_UNICODE)) {
 			if (isCPP) {
 				output("env->GetStringChars(arg");
 			} else {
@@ -202,12 +309,12 @@
 			output(", NULL)");
 		}
 	} else {
-		if (paramData.getFlag("no_in")) {
+		if (param.getFlag(FLAG_NO_IN)) {
 			output("&_arg");
 			output(iStr);
 		} else {
 			output("get");
-			output(getClassName(paramType));
+			output(paramType.getSimpleName());
 			output("Fields(env, arg");
 			output(iStr);
 			output(", &_arg");
@@ -219,16 +326,17 @@
 	return true;
 }
 
-void generateSetParameter(int i, Class paramType, ParameterData paramData, boolean critical) {
+void generateSetParameter(JNIParameter param, boolean critical) {
+	JNIType paramType = param.getType(), paramType64 = param.getType64();
 	if (paramType.isPrimitive() || isSystemClass(paramType)) return;
-	String iStr = String.valueOf(i);
+	String iStr = String.valueOf(param.getParameter());
 	if (paramType.isArray()) {
 		output("\tif (arg");
 		output(iStr);
 		output(" && lparg");
 		output(iStr);
 		output(") ");
-		Class componentType = paramType.getComponentType();
+		JNIType componentType = paramType.getComponentType();
 		if (componentType.isPrimitive()) {
 			if (critical) {
 				if (isCPP) {
@@ -243,7 +351,7 @@
 				} else {
 					output("(*env)->Release");
 				}
-				output(getTypeSignature1(componentType));
+				output(componentType.getTypeSignature1(!paramType.equals(paramType64)));
 				if (isCPP) {
 					output("ArrayElements(arg");
 				} else {
@@ -254,7 +362,7 @@
 			output(", lparg");
 			output(iStr);
 			output(", ");
-			if (paramData.getFlag("no_out")) {
+			if (param.getFlag(FLAG_NO_OUT)) {
 				output("JNI_ABORT");
 			} else {				
 				output("0");
@@ -264,13 +372,13 @@
 			throw new Error("not done");
 		}
 		outputln();
-	} else if (paramType == String.class) {
+	} else if (paramType.isType("java.lang.String")) {
 		output("\tif (arg");
 		output(iStr);
 		output(" && lparg");
 		output(iStr);
 		output(") ");
-		if (paramData.getFlag("unicode")) {
+		if (param.getFlag(FLAG_UNICODE)) {
 			if (isCPP) {
 				output("env->ReleaseStringChars(arg");
 			} else {
@@ -288,14 +396,14 @@
 		output(iStr);
 		outputln(");");
 	} else {
-		if (!paramData.getFlag("no_out")) {
+		if (!param.getFlag(FLAG_NO_OUT)) {
 			output("\tif (arg");
 			output(iStr);
 			output(" && lparg");
 			output(iStr);
 			output(") ");
 			output("set");
-			output(getClassName(paramType));
+			output(paramType.getSimpleName());
 			output("Fields(env, arg");
 			output(iStr);
 			output(", lparg");
@@ -305,51 +413,63 @@
 	}
 }
 
-void generateExitMacro(Method method, String function) {
+void generateEnterExitMacro(JNIMethod method, String function, String function64, boolean enter) {
 	if (!enterExitMacro) return;
+	if (!function.equals(function64)) {
+		output("#ifndef ");
+		output(JNI64);
+		outputln();
+	}
 	output("\t");
-	output(getClassName(method.getDeclaringClass()));
-	output("_NATIVE_EXIT(env, that, ");
+	output(method.getDeclaringClass().getSimpleName());
+	output("_NATIVE_");
+	output(enter ? "ENTER" : "EXIT");
+	output("(env, that, ");
 	output(function);
 	outputln("_FUNC);");
+	if (!function.equals(function64)) {
+		outputln("#else");
+		output("\t");
+		output(method.getDeclaringClass().getSimpleName());
+		output("_NATIVE_");
+		output(enter ? "ENTER" : "EXIT");
+		output("(env, that, ");
+		output(function64);
+		outputln("_FUNC);");
+		outputln("#endif");
+	}
 }
 
-void generateEnterMacro(Method method, String function) {
-	if (!enterExitMacro) return;
-	output("\t");
-	output(getClassName(method.getDeclaringClass()));
-	output("_NATIVE_ENTER(env, that, ");
-	output(function);
-	outputln("_FUNC);");
-}
-
-boolean generateLocalVars(Method method, Class[] paramTypes, Class returnType) {
+boolean generateLocalVars(JNIMethod method, JNIParameter[] params, JNIType returnType, JNIType returnType64) {
 	boolean needsReturn = enterExitMacro;
-	for (int i = 0; i < paramTypes.length; i++) {
-		Class paramType = paramTypes[i];
+	for (int i = 0; i < params.length; i++) {
+		JNIParameter param = params[i];
+		JNIType paramType = param.getType(), paramType64 = param.getType64();
 		if (paramType.isPrimitive() || isSystemClass(paramType)) continue;
-		ParameterData paramData = getMetaData().getMetaData(method, i);
 		output("\t");
 		if (paramType.isArray()) {
-			Class componentType = paramType.getComponentType();
+			JNIType componentType = paramType.getComponentType();
 			if (componentType.isPrimitive()) {
-				output(getTypeSignature2(componentType));
+				output(componentType.getTypeSignature2(!paramType.equals(paramType64)));
 				output(" *lparg" + i);
 				output("=NULL;");
 			} else {
 				throw new Error("not done");
 			}
-		} else if (paramType == String.class) {
-			if (paramData.getFlag("unicode")) {
+		} else if (paramType.isType("java.lang.String")) {
+			if (param.getFlag(FLAG_UNICODE)) {
 				output("const jchar *lparg" + i);				
 			} else {
 				output("const char *lparg" + i);
 			}
 			output("= NULL;");
 		} else {
-			output(getClassName(paramType));
+			if (param.getTypeClass().getFlag(Flags.FLAG_STRUCT)) {
+				output("struct ");
+			}
+			output(paramType.getSimpleName());
 			output(" _arg" + i);
-			if (paramData.getFlag("init")) output("={0}");
+			if (param.getFlag(FLAG_INIT)) output("={0}");
 			output(", *lparg" + i);
 			output("=NULL;");
 		}
@@ -357,23 +477,22 @@
 		needsReturn = true;
 	}
 	if (needsReturn) {
-		if (returnType != Void.TYPE) {
+		if (!returnType.isType("void")) {
 			output("\t");
-			output(getTypeSignature2(returnType));
+			output(returnType.getTypeSignature2(!returnType.equals(returnType64)));
 			outputln(" rc = 0;");
 		}
 	}
 	return needsReturn;
 }
 
-boolean generateGetters(Method method, Class[] paramTypes) {
+boolean generateGetters(JNIMethod method, JNIParameter[] params) {
 	boolean genFailTag = false;
 	int criticalCount = 0;
-	for (int i = 0; i < paramTypes.length; i++) {
-		Class paramType = paramTypes[i];
-		ParameterData paramData = getMetaData().getMetaData(method, i);
-		if (!isCritical(paramType, paramData)) {
-			genFailTag |= generateGetParameter(method, i, paramType, paramData, false, 1);
+	for (int i = 0; i < params.length; i++) {
+		JNIParameter param = params[i];
+		if (!isCritical(param)) {
+			genFailTag |= generateGetParameter(method, param, false, 1);
 		} else {
 			criticalCount++;
 		}
@@ -381,21 +500,19 @@
 	if (criticalCount != 0) {
 		outputln("#ifdef JNI_VERSION_1_2");
 		outputln("\tif (IS_JNI_1_2) {");
-		for (int i = 0; i < paramTypes.length; i++) {
-			Class paramType = paramTypes[i];
-			ParameterData paramData = getMetaData().getMetaData(method, i);
-			if (isCritical(paramType, paramData)) {
-				genFailTag |= generateGetParameter(method, i, paramType, paramData, true, 2);
+		for (int i = 0; i < params.length; i++) {
+			JNIParameter param = params[i];
+			if (isCritical(param)) {
+				genFailTag |= generateGetParameter(method, param, true, 2);
 			}
 		}
 		outputln("\t} else");
 		outputln("#endif");
 		outputln("\t{");
-		for (int i = 0; i < paramTypes.length; i++) {
-			Class paramType = paramTypes[i];
-			ParameterData paramData = getMetaData().getMetaData(method, i);
-			if (isCritical(paramType, paramData)) {
-				genFailTag |= generateGetParameter(method, i, paramType, paramData, false, 2);
+		for (int i = 0; i < params.length; i++) {
+			JNIParameter param = params[i];
+			if (isCritical(param)) {
+				genFailTag |= generateGetParameter(method, param, false, 2);
 			}
 		}
 		outputln("\t}");
@@ -403,255 +520,200 @@
 	return genFailTag;
 }
 
-void generateSetters(Method method, Class[] paramTypes) {
+void generateSetters(JNIMethod method, JNIParameter[] params) {
 	int criticalCount = 0;
-	for (int i = paramTypes.length - 1; i >= 0; i--) {
-		Class paramType = paramTypes[i];
-		ParameterData paramData = getMetaData().getMetaData(method, i);
-		if (isCritical(paramType, paramData)) {
+	for (int i = params.length - 1; i >= 0; i--) {
+		JNIParameter param = params[i];
+		if (isCritical(param)) {
 			criticalCount++;
 		}
 	}
 	if (criticalCount != 0) {
 		outputln("#ifdef JNI_VERSION_1_2");
 		outputln("\tif (IS_JNI_1_2) {");
-		for (int i = paramTypes.length - 1; i >= 0; i--) {
-			Class paramType = paramTypes[i];
-			ParameterData paramData = getMetaData().getMetaData(method, i);
-			if (isCritical(paramType, paramData)) {
+		for (int i = params.length - 1; i >= 0; i--) {
+			JNIParameter param = params[i];
+			if (isCritical(param)) {
 				output("\t");
-				generateSetParameter(i, paramType, paramData, true);
+				generateSetParameter(param, true);
 			}
 		}
 		outputln("\t} else");
 		outputln("#endif");
 		outputln("\t{");
-		for (int i = paramTypes.length - 1; i >= 0; i--) {
-			Class paramType = paramTypes[i];
-			ParameterData paramData = getMetaData().getMetaData(method, i);
-			if (isCritical(paramType, paramData)) {
+		for (int i = params.length - 1; i >= 0; i--) {
+			JNIParameter param = params[i];
+			if (isCritical(param)) {
 				output("\t");
-				generateSetParameter(i, paramType, paramData, false);
+				generateSetParameter(param, false);
 			}
 		}
 		outputln("\t}");
 	}
-	for (int i = paramTypes.length - 1; i >= 0; i--) {
-		Class paramType = paramTypes[i];
-		ParameterData paramData = getMetaData().getMetaData(method, i);
-		if (!isCritical(paramType, paramData)) {
-			generateSetParameter(i, paramType, paramData, false);
+	for (int i = params.length - 1; i >= 0; i--) {
+		JNIParameter param = params[i];
+		if (!isCritical(param)) {
+			generateSetParameter(param, false);
 		}
 	}
 }
 
-void generateDynamicFunctionCall(Method method, MethodData methodData, Class[] paramTypes, Class returnType, boolean needsReturn) {
+void generateDynamicFunctionCall(JNIMethod method, JNIParameter[] params, JNIType returnType, JNIType returnType64, boolean needsReturn) {
 	outputln("/*");
-	generateFunctionCall(method, methodData, paramTypes, returnType, needsReturn);
+	generateFunctionCall(method, params, returnType, returnType64, needsReturn);
 	outputln("*/");
 	outputln("\t{");
 
 	String name = method.getName();
 	if (name.startsWith("_")) name = name.substring(1);
-	if (getPlatform().equals("win32")) {
-		outputln("\t\tstatic int initialized = 0;");
-		outputln("\t\tstatic HMODULE hm = NULL;");
-		outputln("\t\tstatic FARPROC fp = NULL;");
-		if (returnType != Void.TYPE) {
-			if (needsReturn) {
-				outputln("\t\trc = 0;");
+	output("\t\tLOAD_FUNCTION(fp, ");
+	output(name);
+	outputln(")");
+	outputln("\t\tif (fp) {");
+	output("\t\t");
+	generateFunctionCallLeftSide(method, returnType, returnType64, needsReturn);
+	output("((");
+	output(returnType.getTypeSignature2(!returnType.equals(returnType64)));
+	output(" (CALLING_CONVENTION*)(");
+	for (int i = 0; i < params.length; i++) {
+		if (i != 0) output(", ");
+		JNIParameter param = params[i];
+		String cast = param.getCast();
+		boolean isStruct = param.getFlag(FLAG_STRUCT);
+		if (cast.length() > 2) {
+			cast = cast.substring(1, cast.length() - 1);
+			if (isStruct) {
+				int index = cast.lastIndexOf('*');
+				if (index != -1) cast = cast.substring(0, index).trim();
 			}
+			output(cast);
+		} else {
+			JNIType paramType = param.getType(), paramType64 = param.getType64();
+			output(paramType.getTypeSignature4(!paramType.equals(paramType64), isStruct));
 		}
-		outputln("\t\tif (!initialized) {");
-		output("\t\t\tif (!hm) hm = LoadLibrary(");
-		output(name);
-		outputln("_LIB);");
-		output("\t\t\tif (hm) fp = GetProcAddress(hm, \"");
-		output(name);
-		outputln("\");");
-		outputln("\t\t\tinitialized = 1;");
-		outputln("\t\t}");
-		outputln("\t\tif (fp) {");
-		output("\t\t");
-		generateFunctionCallLeftSide(method, methodData, returnType, needsReturn);
-		output("fp");
-		generateFunctionCallRightSide(method, methodData, paramTypes, 0);
-		outputln();
-		outputln("\t\t}");
-	} else if (getPlatform().equals("carbon")) {
-		outputln("\t\tstatic int initialized = 0;");
-		outputln("\t\tstatic CFBundleRef bundle = NULL;");
-		output("\t\ttypedef ");
-		output(getTypeSignature2(returnType));
-		output(" (*FPTR)(");
-		for (int i = 0; i < paramTypes.length; i++) {
-			if (i != 0) output(", ");
-			Class paramType = paramTypes[i];
-			ParameterData paramData = getMetaData().getMetaData(method, i);
-			String cast = paramData.getCast();
-			if (cast.length() > 2) {
-				output(cast.substring(1, cast.length() - 1));
-			} else {
-				output(getTypeSignature4(paramType, paramData.getFlag("struct")));
-			}
-		}
-		outputln(");");
-		outputln("\t\tstatic FPTR fptr;");
-		if (returnType != Void.TYPE) {
-			if (needsReturn) {
-				outputln("\t\trc = 0;");
-			}
-		}
-		outputln("\t\tif (!initialized) {");
-		output("\t\t\tif (!bundle) bundle = CFBundleGetBundleWithIdentifier(CFSTR(");
-		output(name);
-		outputln("_LIB));");
-		output("\t\t\tif (bundle) fptr = (FPTR)CFBundleGetFunctionPointerForName(bundle, CFSTR(\"");
-		output(name);
-		outputln("\"));");
-		outputln("\t\t\tinitialized = 1;");
-		outputln("\t\t}");
-		outputln("\t\tif (fptr) {");
-		output("\t\t");
-		generateFunctionCallLeftSide(method, methodData, returnType, needsReturn);
-		output("(*fptr)");
-		generateFunctionCallRightSide(method, methodData, paramTypes, 0);
-		outputln();
-		outputln("\t\t}");
-	} else {
-		outputln("\t\tstatic int initialized = 0;");
-		outputln("\t\tstatic void *handle = NULL;");
-		output("\t\ttypedef ");
-		output(getTypeSignature2(returnType));
-		output(" (*FPTR)(");
-		for (int i = 0; i < paramTypes.length; i++) {
-			if (i != 0) output(", ");
-			Class paramType = paramTypes[i];
-			ParameterData paramData = getMetaData().getMetaData(method, i);
-			String cast = paramData.getCast();
-			if (cast.length() > 2) {
-				output(cast.substring(1, cast.length() - 1));
-			} else {
-				output(getTypeSignature4(paramType, paramData.getFlag("struct")));
-			}
-		}
-		outputln(");");
-		outputln("\t\tstatic FPTR fptr;");
-		if (returnType != Void.TYPE) {
-			if (needsReturn) {
-				outputln("\t\trc = 0;");
-			}
-		}
-		outputln("\t\tif (!initialized) {");
-		output("\t\t\tif (!handle) handle = dlopen(");
-		output(name);
-		outputln("_LIB, RTLD_LAZY);");
-		output("\t\t\tif (handle) fptr = (FPTR)dlsym(handle, \"");
-		output(name);
-		outputln("\");");
-		outputln("\t\t\tinitialized = 1;");
-		outputln("\t\t}");
-		outputln("\t\tif (fptr) {");
-		output("\t\t");
-		generateFunctionCallLeftSide(method, methodData, returnType, needsReturn);
-		output("(*fptr)");
-		generateFunctionCallRightSide(method, methodData, paramTypes, 0);
-		outputln();
-		outputln("\t\t}");
 	}
-
+	output("))");
+	output("fp");
+	output(")");
+	generateFunctionCallRightSide(method, params, 0);
+	output(";");
+	outputln();
+	outputln("\t\t}");
 	outputln("\t}");
 }
 
-void generateFunctionCallLeftSide(Method method, MethodData methodData, Class returnType, boolean needsReturn) {
+void generateFunctionCallLeftSide(JNIMethod method, JNIType returnType, JNIType returnType64, boolean needsReturn) {
 	output("\t");
-	if (returnType != Void.TYPE) {
+	if (!returnType.isType("void")) {
 		if (needsReturn) {
 			output("rc = ");
 		} else {
 			output("return ");
 		}
 		output("(");
-		output(getTypeSignature2(returnType));
+		output(returnType.getTypeSignature2(!returnType.equals(returnType64)));
 		output(")");
 	}
-	if (methodData.getFlag("address")) {
+	if (method.getFlag(FLAG_ADDRESS)) {
 		output("&");
 	}	
-	if (methodData.getFlag("jni")) {
+	if (method.getFlag(FLAG_JNI)) {
 		output(isCPP ? "env->" : "(*env)->");
 	}
 }
 
-void generateFunctionCallRightSide(Method method, MethodData methodData, Class[] paramTypes, int paramStart) {
-	if (!methodData.getFlag("const")) {
+void generateFunctionCallRightSide(JNIMethod method, JNIParameter[] params, int paramStart) {
+	if (!method.getFlag(FLAG_CONST)) {
 		output("(");
-		if (methodData.getFlag("jni")) {
+		if (method.getFlag(FLAG_JNI)) {
 			if (!isCPP) output("env, ");
 		}
-		for (int i = paramStart; i < paramTypes.length; i++) {
-			Class paramType = paramTypes[i];
-			ParameterData paramData = getMetaData().getMetaData(method, i);
+		for (int i = paramStart; i < params.length; i++) {
+			JNIParameter param = params[i];
 			if (i != paramStart) output(", ");
-			if (paramData.getFlag("struct")) output("*");
-			output(paramData.getCast());
-			if (!paramType.isPrimitive() && !isSystemClass(paramType)) output("lp");
-			output("arg" + i);
+			if (param.getFlag(FLAG_STRUCT)) output("*");
+			output(param.getCast());
+			if (param.getFlag(FLAG_GCOBJECT)) output("TO_OBJECT(");
+			if (i == params.length - 1 && param.getFlag(FLAG_SENTINEL)) {
+				output("NULL");
+			} else {
+				JNIType paramType = param.getType();
+				if (!paramType.isPrimitive() && !isSystemClass(paramType)) output("lp");
+				output("arg" + i);
+			}
+			if (param.getFlag(FLAG_GCOBJECT)) output(")");
 		}
 		output(")");
 	}
-	output(";");
 }
 
-void generateFunctionCall(Method method, MethodData methodData, Class[] paramTypes, Class returnType, boolean needsReturn) {
-	String copy = (String)methodData.getParam("copy");
-	boolean makeCopy = copy.length() != 0 && isCPP && returnType != Void.TYPE;
+void generateFunctionCall(JNIMethod method, JNIParameter[] params, JNIType returnType, JNIType returnType64, boolean needsReturn) {
+	String name = method.getName();
+	String copy = (String)method.getParam("copy");
+	boolean makeCopy = copy.length() != 0 && isCPP && !returnType.isType("void");
 	if (makeCopy) {
 		output("\t");
 		output(copy);
 		output(" temp = ");
 	} else {
-		generateFunctionCallLeftSide(method, methodData, returnType, needsReturn);
+		generateFunctionCallLeftSide(method, returnType, returnType64, needsReturn);
 	}
 	int paramStart = 0;
-	String name = method.getName();
 	if (name.startsWith("_")) name = name.substring(1);
-	if (name.equalsIgnoreCase("call")) {
+
+	boolean objc_struct = false;
+	if (name.equals("objc_msgSend_stret") || name.equals("objc_msgSendSuper_stret")) objc_struct = true;
+	if (objc_struct) {
+		outputln("if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {");
+		generate_objc_msgSend_stret (method, params, name);
+		paramStart = 1;
+	} else if (name.equalsIgnoreCase("call")) {
 		output("(");
-		ParameterData paramData = getMetaData().getMetaData(method, 0);
-		String cast = paramData.getCast(); 
+		String cast = params[0].getCast(); 
 		if (cast.length() != 0 && !cast.equals("()")) {
 			output(cast);
 		} else {
 			output("(");
-			output(getTypeSignature2(returnType));
+			output(returnType.getTypeSignature2(!returnType.equals(returnType64)));
 			output(" (*)())");
 		}
 		output("arg0)");
 		paramStart = 1;
-	} else if (name.startsWith("VtblCall")) {
+	} else if (name.startsWith("VtblCall") || name.startsWith("_VtblCall")) {
 		output("((");
-		output(getTypeSignature2(returnType));
+		output(returnType.getTypeSignature2(!returnType.equals(returnType64)));
 		output(" (STDMETHODCALLTYPE *)(");
-		for (int i = 1; i < paramTypes.length; i++) {
+		for (int i = 1; i < params.length; i++) {
 			if (i != 1) output(", ");
-			Class paramType = paramTypes[i];
-			output(getTypeSignature4(paramType));
+			JNIParameter param = params[i];
+			JNIType paramType = param.getType(), paramType64 = param.getType64();
+			output(paramType.getTypeSignature4(!paramType.equals(paramType64), false));
 		}
 		output("))(*(");
-		output(getTypeSignature4(paramTypes[1]));
+		JNIType paramType = params[1].getType(), paramType64 = params[1].getType64();
+		output(paramType.getTypeSignature4(!paramType.equals(paramType64), false));
 		output(" **)arg1)[arg0])");
 		paramStart = 1;
-	} else if (methodData.getFlag("cpp")) {
+	} else if (method.getFlag(FLAG_CPP) || method.getFlag(FLAG_SETTER) || method.getFlag(FLAG_GETTER) || method.getFlag(FLAG_ADDER)) {
+		if (method.getFlag(FLAG_GCOBJECT)) {
+			output("TO_HANDLE(");
+		}
 		output("(");
-		ParameterData paramData = getMetaData().getMetaData(method, 0);
-		if (paramData.getFlag("struct")) output("*");
-		String cast = paramData.getCast(); 
+		JNIParameter param = params[0];
+		if (param.getFlag(FLAG_STRUCT)) output("*");
+		String cast = param.getCast(); 
 		if (cast.length() != 0 && !cast.equals("()")) {
 			output(cast);
 		}
-		output("arg0)->");
-		String accessor = methodData.getAccessor();
+		if (param.getFlag(FLAG_GCOBJECT)) {
+			output("TO_OBJECT(");
+		}
+		output("arg0");
+		if (param.getFlag(FLAG_GCOBJECT)) {
+			output(")");
+		}
+		output(")->");
+		String accessor = method.getAccessor();
 		if (accessor.length() != 0) {
 			output(accessor);
 		} else {
@@ -663,9 +725,22 @@
 			}
 		}
 		paramStart = 1;
-	} else if (methodData.getFlag("new")) {
+	} else if (method.getFlag(FLAG_GCNEW)) {
+		output("TO_HANDLE(gcnew ");
+		String accessor = method.getAccessor();
+		if (accessor.length() != 0) {
+			output(accessor);
+		} else {
+			int index = -1;
+			if ((index = name.indexOf('_')) != -1) {
+				output(name.substring(index + 1));
+			} else {
+				output(name);
+			}
+		}
+	} else if (method.getFlag(FLAG_NEW)) {
 		output("new ");
-		String accessor = methodData.getAccessor();
+		String accessor = method.getAccessor();
 		if (accessor.length() != 0) {
 			output(accessor);
 		} else {
@@ -676,10 +751,10 @@
 				output(name);
 			}
 		}
-	} else if (methodData.getFlag("delete")) {
+	} else if (method.getFlag(FLAG_DELETE)) {
 		output("delete ");
-		ParameterData paramData = getMetaData().getMetaData(method, 0);
-		String cast = paramData.getCast(); 
+		JNIParameter param = params[0];
+		String cast = param.getCast(); 
 		if (cast.length() != 0 && !cast.equals("()")) {
 			output(cast);
 		} else {
@@ -690,14 +765,60 @@
 		outputln("arg0;");
 		return;
 	} else {
-		String accessor = methodData.getAccessor();
+		if (method.getFlag(FLAG_GCOBJECT)) {
+			output("TO_HANDLE(");				
+		}
+		if (method.getFlag(Flags.FLAG_CAST)) {
+			output("((");
+			String returnCast = returnType.getTypeSignature2(!returnType.equals(returnType64));
+			if (name.equals("objc_msgSend_bool") && returnCast.equals("jboolean")) {
+				returnCast = "BOOL";
+			}
+			output(returnCast);
+			output(" (*)(");
+			for (int i = 0; i < params.length; i++) {
+				if (i != 0) output(", ");
+				JNIParameter param = params[i];
+				String cast = param.getCast();
+				if (cast != null && cast.length() != 0) {
+					if (cast.startsWith("(")) cast = cast.substring(1);
+					if (cast.endsWith(")")) cast = cast.substring(0, cast.length() - 1);
+					output(cast);
+				} else {
+					JNIType paramType = param.getType(), paramType64 = param.getType64();
+					if (!(paramType.isPrimitive() || paramType.isArray())) {
+						if (param.getTypeClass().getFlag(FLAG_STRUCT)) {
+							output("struct ");
+						}
+					}
+					output(paramType.getTypeSignature4(!paramType.equals(paramType64), param.getFlag(FLAG_STRUCT)));
+				}
+			}
+			output("))");
+		}
+		String accessor = method.getAccessor();
 		if (accessor.length() != 0) {
 			output(accessor);
 		} else {
 			output(name);
 		}
+		if (method.getFlag(Flags.FLAG_CAST)) {
+			output(")");
+		}
 	}
-	generateFunctionCallRightSide(method, methodData, paramTypes, paramStart);
+	if ((method.getFlag(FLAG_SETTER) && params.length == 3) || (method.getFlag(FLAG_GETTER) && params.length == 2)) {
+		output("[arg1]");
+		paramStart++;
+	}
+	if (method.getFlag(FLAG_SETTER)) output(" = ");
+	if (method.getFlag(FLAG_ADDER)) output(" += ");
+	if (!method.getFlag(FLAG_GETTER)) {
+		generateFunctionCallRightSide(method, params, paramStart);
+	}
+	if (method.getFlag(FLAG_GCNEW) || method.getFlag(FLAG_GCOBJECT)) {
+		output(")");
+	}
+	output(";");
 	outputln();
 	if (makeCopy) {
 		outputln("\t{");
@@ -709,119 +830,153 @@
 		outputln("\t\t*copy = temp;");
 		output("\t\trc = ");
 		output("(");
-		output(getTypeSignature2(returnType));
+		output(returnType.getTypeSignature2(!returnType.equals(returnType64)));
 		output(")");
 		outputln("copy;");
 		outputln("\t}");
 	}
+	if (objc_struct) {
+		outputln("\t} else {");
+		generate_objc_msgSend_stret (method, params, name.substring(0, name.length() - "_stret".length()));
+		generateFunctionCallRightSide(method, params, 1);
+		outputln(";");
+		outputln("\t}");
+	}
 }
 
-void generateReturn(Method method, Class returnType, boolean needsReturn) {
-	if (needsReturn && returnType != Void.TYPE) {
+void generate_objc_msgSend_stret (JNIMethod method, JNIParameter[] params, String func) {
+	output("\t\t*lparg0 = (*(");
+	JNIType paramType = params[0].getType(), paramType64 = params[0].getType64();
+	output(paramType.getTypeSignature4(!paramType.equals(paramType64), true));
+	output(" (*)(");
+	for (int i = 1; i < params.length; i++) {
+		if (i != 1) output(", ");
+		JNIParameter param = params[i];
+		String cast = param.getCast();
+		if (cast != null && cast.length() != 0) {
+			if (cast.startsWith("(")) cast = cast.substring(1);
+			if (cast.endsWith(")")) cast = cast.substring(0, cast.length() - 1);
+			output(cast);
+		} else {
+			paramType = param.getType(); paramType64 = param.getType64();
+			if (!(paramType.isPrimitive() || paramType.isArray())) {
+				if (param.getTypeClass().getFlag(FLAG_STRUCT)) {
+					output("struct ");
+				}
+			}
+			output(paramType.getTypeSignature4(!paramType.equals(paramType64), param.getFlag(FLAG_STRUCT)));
+		}
+	}
+	output("))");
+	output(func);
+	output(")");
+}
+
+void generateReturn(JNIMethod method, JNIType returnType, boolean needsReturn) {
+	if (needsReturn && !returnType.isType("void")) {
 		outputln("\treturn rc;");
 	}
 }
 
-void generateGTKmemmove(Method method, String function, Class[] paramTypes) {
-	generateEnterMacro(method, function);
+void generateMemmove(JNIMethod method, String function, String function64, JNIParameter[] params) {
+	generateEnterExitMacro(method, function, function64, true);
 	output("\t");
-	boolean get = paramTypes[0].isPrimitive();
-	String className = getClassName(paramTypes[get ? 1 : 0]);
+	boolean get = params[0].getType().isPrimitive();
+	String className = params[get ? 1 : 0].getType().getSimpleName();
 	output(get ? "if (arg1) get" : "if (arg0) set");
 	output(className);
 	output(get ? "Fields(env, arg1, (" : "Fields(env, arg0, (");
 	output(className);
 	output(get ? " *)arg0)" : " *)arg1)");
 	outputln(";");
-	generateExitMacro(method, function);	
+	generateEnterExitMacro(method, function, function64, false);	
 }
 
-void generateFunctionBody(Method method, MethodData methodData, String function, Class[] paramTypes, Class returnType) {
+void generateFunctionBody(JNIMethod method, String function, String function64, JNIParameter[] params, JNIType returnType, JNIType returnType64) {
 	outputln("{");
 	
 	/* Custom GTK memmoves. */
 	String name = method.getName();
 	if (name.startsWith("_")) name = name.substring(1);
-	boolean isGTKmemove = name.equals("memmove") && paramTypes.length == 2 && returnType == Void.TYPE;
-	if (isGTKmemove) {
-		generateGTKmemmove(method, function, paramTypes);
+	boolean isMemove = (name.equals("memmove") || name.equals("MoveMemory")) && params.length == 2 && returnType.isType("void");
+	if (isMemove) {
+		generateMemmove(method, function, function64, params);
 	} else {
-		boolean needsReturn = generateLocalVars(method, paramTypes, returnType);
-		generateEnterMacro(method, function);
-		boolean genFailTag = generateGetters(method, paramTypes);
-		if (methodData.getFlag("dynamic")) {
-			generateDynamicFunctionCall(method, methodData, paramTypes, returnType, needsReturn);
+		boolean needsReturn = generateLocalVars(method, params, returnType, returnType64);
+		generateEnterExitMacro(method, function, function64, true);
+		boolean genFailTag = generateGetters(method, params);
+		if (method.getFlag(FLAG_DYNAMIC)) {
+			generateDynamicFunctionCall(method, params, returnType, returnType64, needsReturn);
 		} else {
-			generateFunctionCall(method, methodData, paramTypes, returnType, needsReturn);
+			generateFunctionCall(method, params, returnType, returnType64, needsReturn);
 		}
 		if (genFailTag) outputln("fail:");
-		generateSetters(method, paramTypes);
-		generateExitMacro(method, function);
+		generateSetters(method, params);
+		generateEnterExitMacro(method, function, function64, false);
 		generateReturn(method, returnType, needsReturn);
 	}
 	
 	outputln("}");
 }
 
-void generateFunctionPrototype(Method method, String function, Class[] paramTypes, Class returnType) {
+void generateFunctionPrototype(JNIMethod method, String function, JNIParameter[] params, JNIType returnType, JNIType returnType64, boolean singleLine) {
 	output("JNIEXPORT ");
-	output(getTypeSignature2(returnType));
+	output(returnType.getTypeSignature2(!returnType.equals(returnType64)));
 	output(" JNICALL ");
-	output(getClassName(method.getDeclaringClass()));
+	output(method.getDeclaringClass().getSimpleName());
 	output("_NATIVE(");
 	output(function);
-	outputln(")");
-	output("\t(JNIEnv *env, ");
+	if (singleLine) {
+		output(")");
+		output("(JNIEnv *env, ");
+	} else {
+		outputln(")");
+		output("\t(JNIEnv *env, ");
+	}
 	if ((method.getModifiers() & Modifier.STATIC) != 0) {
 		output("jclass");
 	} else {
 		output("jobject");
 	}
 	output(" that");
-	for (int i = 0; i < paramTypes.length; i++) {
-		Class paramType = paramTypes[i];
+	for (int i = 0; i < params.length; i++) {
 		output(", ");
-		output(getTypeSignature2(paramType));
+		JNIType paramType = params[i].getType(), paramType64 = params[i].getType64();
+		output(paramType.getTypeSignature2(!paramType.equals(paramType64)));
 		output(" arg" + i);
 	}
-	outputln(")");
+	output(")");
+	if (!singleLine) outputln();
 }
 
-void generateSourceStart(String function) {
-	output("#ifndef NO_");
-	outputln(function);
+void generateSourceStart(String function, String function64) {
+	if (function.equals(function64)) {
+		output("#ifndef NO_");
+		outputln(function);
+	} else {
+		output("#if (!defined(NO_");
+		output(function);
+		output(") && !defined(");
+		output(JNI64);
+		output(")) || (!defined(NO_");
+		output(function64);
+		output(") && defined(");
+		output(JNI64);
+		outputln("))");
+	}
 }
 
 void generateSourceEnd(String function) {
 	outputln("#endif");
 }
 
-boolean isCritical(Class paramType, ParameterData paramData) {
-	return paramType.isArray() && paramType.getComponentType().isPrimitive() && paramData.getFlag("critical");
+boolean isCritical(JNIParameter param) {
+	JNIType paramType = param.getType();
+	return paramType.isArray() && paramType.getComponentType().isPrimitive() && param.getFlag(FLAG_CRITICAL);
 }
 
-boolean isSystemClass(Class type) {
-	return type == Object.class || type == Class.class;
-}
-
-public static void main(String[] args) {
-//	args = new String[]{"org.eclipse.swt.internal.win32.OS"};
-	if (args.length < 1) {
-		System.out.println("Usage: java NativesGenerator <className1> <className2>");
-		return;
-	}
-	try {
-		NativesGenerator gen = new NativesGenerator();
-		for (int i = 0; i < args.length; i++) {
-			String clazzName = args[i];
-			Class clazz = Class.forName(clazzName);
-			gen.generate(clazz);
-//			gen.generate(clazz, "CommandBar_Destroy");
-		}
-	} catch (Exception e) {
-		System.out.println("Problem");
-		e.printStackTrace(System.out);
-	}
+boolean isSystemClass(JNIType type) {
+	return type.isType("java.lang.Object") || type.isType("java.lang.Class") ;
 }
 
 }
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ParameterData.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ParameterData.java
deleted file mode 100644
index 1268e67..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ParameterData.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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.tools.internal;
-
-import java.lang.reflect.Method;
-
-public class ParameterData extends ItemData {
-	
-	Method method;
-	int parameter;
-
-public ParameterData(Method method, int parameter, String str) {
-	super(str);
-	this.method = method;
-	this.parameter = parameter;
-}
-
-public static String[] getAllFlags() {
-	return new String[]{"no_in", "no_out", "critical", "init", "struct", "unicode"};
-}
-
-public String getCast() {
-	String cast = ((String)getParam("cast")).trim();
-	if (cast.length() > 0) {
-		if (!cast.startsWith("(")) cast = "(" + cast;
-		if (!cast.endsWith(")")) cast = cast + ")";
-	}
-	return cast;
-}
-
-public Method getMethod() {
-	return method;
-}
-
-public int getParameter() {
-	return parameter;
-}
-
-public void setCast(String str) {
-	setParam("cast", str);
-}
-
-}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectClass.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectClass.java
new file mode 100644
index 0000000..64321d1
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectClass.java
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 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.tools.internal;
+
+import java.io.File;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+import org.eclipse.jdt.core.dom.AST;
+import org.eclipse.jdt.core.dom.ASTParser;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+
+public class ReflectClass extends ReflectItem implements JNIClass {
+	Class clazz;
+	ReflectField[] fields;
+	ReflectMethod[] methods;
+	MetaData metaData;
+	String sourcePath;
+
+public ReflectClass(Class clazz) {
+	this(clazz, null, null);
+}
+
+public ReflectClass(Class clazz, MetaData data, String sourcePath) {
+	this.clazz = clazz;
+	this.metaData = data;
+	this.sourcePath = sourcePath;
+}
+
+void checkMembers() {
+	if (fields != null) return;
+	String source = null;
+	CompilationUnit unit = null;
+	if (JNIItem.GEN64) {
+		source = JNIGenerator.loadFile(sourcePath);
+		ASTParser parser = ASTParser.newParser(AST.JLS3);
+		parser.setSource(source.toCharArray());
+		unit = (CompilationUnit)parser.createAST(null);
+	}
+	Field[] fields = clazz.getDeclaredFields();
+	this.fields = new ReflectField[fields.length];
+	for (int i = 0; i < fields.length; i++) {
+		this.fields[i] = new ReflectField(this, fields[i], source, unit);
+	}
+	Method[] methods = clazz.getDeclaredMethods();
+	this.methods = new ReflectMethod[methods.length];
+	for (int i = 0; i < methods.length; i++) {
+		this.methods[i] = new ReflectMethod(this, methods[i], source, unit);
+	}
+}
+
+public int hashCode() {
+	return clazz.hashCode();
+}
+
+public boolean equals(Object obj) {
+	if (!(obj instanceof ReflectClass)) return false;
+	return ((ReflectClass)obj).clazz.equals(clazz);
+}
+
+public JNIField[] getDeclaredFields() {
+	checkMembers();
+	JNIField[] result = new JNIField[fields.length];
+	System.arraycopy(fields, 0, result, 0, result.length);
+	return result;
+}
+
+public JNIMethod[] getDeclaredMethods() {
+	checkMembers();
+	JNIMethod[] result = new JNIMethod[methods.length];
+	System.arraycopy(methods, 0, result, 0, result.length);
+	return result;
+}
+
+public String getName() {
+	return clazz.getName();
+}
+
+public JNIClass getSuperclass() {
+	Class superclazz = clazz.getSuperclass();
+	String path = new File(sourcePath).getParent() + "/" + getSimpleName(superclazz) + ".java";
+	return new ReflectClass(superclazz, metaData, path);
+}
+
+String getSimpleName(Class type) {
+	String name = type.getName();
+	int index = name.lastIndexOf('.') + 1;
+	return name.substring(index, name.length());
+}
+
+public String getSimpleName() {
+	return getSimpleName(clazz);
+}
+
+public String getExclude() {
+	return (String)getParam("exclude");
+}
+
+public String getMetaData() {
+	String key = JNIGenerator.toC(clazz.getName());
+	return metaData.getMetaData(key, "");
+}
+
+public void setExclude(String str) { 
+	setParam("exclude", str);
+}
+
+public void setMetaData(String value) {
+	String key = JNIGenerator.toC(clazz.getName());
+	metaData.setMetaData(key, value);
+}
+
+public String toString() {
+	return clazz.toString();
+}
+
+}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectField.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectField.java
new file mode 100644
index 0000000..350662f
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectField.java
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 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.tools.internal;
+
+import java.io.File;
+import java.lang.reflect.Field;
+import java.util.Iterator;
+
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.FieldDeclaration;
+import org.eclipse.jdt.core.dom.TypeDeclaration;
+import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
+
+public class ReflectField extends ReflectItem implements JNIField {
+	Field field;
+	ReflectType type, type64;
+	ReflectClass declaringClass;
+	
+public ReflectField(ReflectClass declaringClass, Field field, String source, CompilationUnit unit) {
+	this.declaringClass = declaringClass;
+	this.field = field;
+	Class clazz = field.getType();
+	type = new ReflectType(clazz);
+	type64 = type;
+	boolean changes = canChange64(clazz);
+	if (changes && new File(declaringClass.sourcePath).exists()) {
+		TypeDeclaration type1 = (TypeDeclaration)unit.types().get(0);
+		Class result = null;
+		FieldDeclaration[] fields = type1.getFields();
+		for (int i = 0; i < fields.length && result == null; i++) {
+			FieldDeclaration node = fields[i];
+			for (Iterator iterator = node.fragments().iterator(); iterator.hasNext();) {
+				VariableDeclarationFragment decl = (VariableDeclarationFragment) iterator.next();
+				if (decl.getName().getIdentifier().equals(field.getName())) {
+					String s = source.substring(node.getStartPosition(), node.getStartPosition() + node.getLength());
+					if (clazz == int.class && s.indexOf("int /*long*/") != -1) type64 = new ReflectType(long.class);
+					else if (clazz == float.class && s.indexOf("float /*double*/") != -1) type64 = new ReflectType(double.class);
+					else if (clazz == int[].class && (s.indexOf("int /*long*/") != -1 || s.indexOf("int[] /*long[]*/") != -1)) type64 = new ReflectType(long[].class);
+					else if (clazz == float[].class && (s.indexOf("float /*double*/") != -1|| s.indexOf("float[] /*double[]*/") != -1)) type = new ReflectType(double[].class);
+					else if (clazz == long.class && s.indexOf("long /*int*/") != -1) type = new ReflectType(int.class);
+					else if (clazz == double.class && s.indexOf("double /*float*/") != -1) type = new ReflectType(float.class);
+					else if (clazz == long[].class && (s.indexOf("long /*int*/") != -1|| s.indexOf("long[] /*int[]*/") != -1)) type = new ReflectType(int[].class);
+					else if (clazz == double[].class && (s.indexOf("double /*float*/") != -1|| s.indexOf("double[] /*float[]*/") != -1)) type = new ReflectType(float[].class);
+					break;
+				}
+			}
+		}
+	}	
+}
+
+public int hashCode() {
+	return field.hashCode();
+}
+
+public boolean equals(Object obj) {
+	if (!(obj instanceof ReflectField)) return false;
+	return ((ReflectField)obj).field.equals(field);
+}
+
+public JNIClass getDeclaringClass() {
+	return declaringClass;
+}
+
+public int getModifiers() {
+	return field.getModifiers();
+}
+
+public String getName() {
+	return field.getName();
+}
+
+public JNIType getType() {
+	return type;
+}
+
+public JNIType getType64() {
+	return type64;
+}
+
+public String getAccessor() {
+	return (String)getParam("accessor");
+}
+
+public String getCast() {
+	String cast = ((String)getParam("cast")).trim();
+	if (cast.length() > 0) {
+		if (!cast.startsWith("(")) cast = "(" + cast;
+		if (!cast.endsWith(")")) cast = cast + ")";
+	}
+	return cast;
+}
+
+public String getExclude() {
+	return (String)getParam("exclude");
+}
+
+public String getMetaData() {
+	String className = getDeclaringClass().getSimpleName();
+	String key = className + "_" + field.getName();
+	return declaringClass.metaData.getMetaData(key, "");
+}
+
+public void setAccessor(String str) { 
+	setParam("accessor", str);
+}
+
+public void setCast(String str) {
+	setParam("cast", str);
+}
+
+public void setExclude(String str) { 
+	setParam("exclude", str);
+}
+
+public void setMetaData(String value) {
+	String className = declaringClass.getSimpleName();
+	String key = className + "_" + field.getName();
+	declaringClass.metaData.setMetaData(key, value);
+}
+
+public String toString() {
+	return field.toString();
+}
+
+}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectItem.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectItem.java
new file mode 100644
index 0000000..acd9e67
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectItem.java
@@ -0,0 +1,106 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2009 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.tools.internal;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Set;
+
+public abstract class ReflectItem extends AbstractItem {
+
+static boolean convertTo32Bit(JNIType[] paramTypes, boolean floatingPointTypes) {
+	boolean changed = false;
+	for (int i = 0; i < paramTypes.length; i++) {
+		JNIType paramType = paramTypes[i];
+		if (paramType.isType("long")) {
+			paramTypes[i] = new ReflectType(Integer.TYPE);
+			changed = true;
+		}
+		if (paramType.isType("[J")) {
+			paramTypes[i] = new ReflectType(int[].class);
+			changed = true;
+		}
+		if (floatingPointTypes) {
+			if (paramType.isType("double")) {
+				paramTypes[i] = new ReflectType(Float.TYPE);
+				changed = true;
+			}
+			if (paramType.isType("[D")) {
+				paramTypes[i] = new ReflectType(float[].class);
+				changed = true;
+			}
+		}
+	}
+	return changed;	
+}
+
+boolean canChange64(Class clazz) {
+	if (!GEN64) return false;
+	return clazz == Integer.TYPE ||
+		clazz == Long.TYPE ||
+		clazz == Float.TYPE ||
+		clazz == Double.TYPE ||
+		clazz == int[].class ||
+		clazz == long[].class ||
+		clazz == float[].class ||
+		clazz == double[].class;
+}
+
+public String flatten() {
+	checkParams();
+	StringBuffer buffer = new StringBuffer();
+	Set set = params.keySet();
+	String[] keys = (String[])set.toArray(new String[set.size()]);
+	Arrays.sort(keys);
+	for (int j = 0; j < keys.length; j++) {
+		String key = keys[j];
+		Object value = params.get(key);
+		String valueStr = "";
+		if (value instanceof String) {
+			valueStr = (String)value;
+		} else if (value instanceof String[]) {
+			String[] values = (String[])value;
+			StringBuffer valueBuffer = new StringBuffer();
+			for (int i = 0; i < values.length; i++) {
+				if (i != 0) valueBuffer.append(" ");
+				valueBuffer.append(values[i]);
+			}
+			valueStr = valueBuffer.toString();
+		} else {
+			valueStr = value.toString();
+		}
+		if (valueStr.length() > 0) {
+			if (buffer.length() != 0) buffer.append(",");
+			buffer.append(key);
+			buffer.append("=");
+			buffer.append(valueStr);
+		}
+	}
+	return buffer.toString();
+}
+
+public void parse(String str) {
+	this.params = new HashMap();
+	if (str.length() == 0) return;
+	String[] params = split(str, ",");
+	for (int i = 0; i < params.length; i++) {
+		String param = params[i];
+		int equals = param.indexOf('=');
+		if (equals ==  -1) {
+			System.out.println("Error: " + str + " param " + param);
+		}
+		String key = param.substring(0, equals).trim();
+		String value = param.substring(equals + 1).trim();
+		setParam(key, value);
+	}
+}
+
+}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectMethod.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectMethod.java
new file mode 100644
index 0000000..2120a29
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectMethod.java
@@ -0,0 +1,240 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 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.tools.internal;
+
+import java.io.File;
+import java.lang.reflect.Method;
+import java.util.List;
+
+import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.MethodDeclaration;
+import org.eclipse.jdt.core.dom.Modifier;
+import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
+import org.eclipse.jdt.core.dom.TypeDeclaration;
+
+public class ReflectMethod extends ReflectItem implements JNIMethod {
+	Method method;
+	ReflectType returnType, returnType64;
+	ReflectType[] paramTypes, paramTypes64;
+	ReflectClass declaringClass;
+	Boolean unique;
+	
+public ReflectMethod(ReflectClass declaringClass, Method method, String source, CompilationUnit unit) {
+	this.method = method;
+	this.declaringClass = declaringClass;	
+	Class returnType = method.getReturnType();
+	Class[] paramTypes = method.getParameterTypes();
+	this.returnType = new ReflectType(returnType);
+	this.returnType64 = this.returnType;
+	this.paramTypes = new ReflectType[paramTypes.length];
+	this.paramTypes64 = new ReflectType[paramTypes.length];
+	for (int i = 0; i < this.paramTypes.length; i++) {
+		this.paramTypes[i] = this.paramTypes64[i] = new ReflectType(paramTypes[i]);
+	}
+	boolean changes = false;
+	if ((method.getModifiers() & Modifier.NATIVE) != 0) {
+		changes = canChange64(returnType);
+		if (!changes) {
+			for (int i = 0; i < paramTypes.length && !changes; i++) {
+				changes |= canChange64(paramTypes[i]);
+			}
+		}
+	}
+	if (changes && new File(declaringClass.sourcePath).exists()) {
+		String name = method.getName();
+		TypeDeclaration type = (TypeDeclaration)unit.types().get(0);
+		MethodDeclaration decl = null;
+		MethodDeclaration[] methods = type.getMethods();
+		for (int i = 0; i < methods.length && decl == null; i++) {
+			MethodDeclaration node = methods[i];
+			if (node.getName().getIdentifier().equals(name)) {
+				if (!declaringClass.getSimpleName(returnType).equals(node.getReturnType2().toString())) continue;
+				List parameters = node.parameters();
+				if (parameters.size() != paramTypes.length) continue;
+				decl = node;
+				for (int j = 0; j < paramTypes.length; j++) {
+					if (!declaringClass.getSimpleName(paramTypes[j]).equals(((SingleVariableDeclaration)parameters.get(j)).getType().toString())) {
+						decl = null;
+						break;
+					}
+				}
+			}
+		}
+		for (int i = 0; i < paramTypes.length; i++) {
+			if (canChange64(paramTypes[i])) {
+				Class clazz = paramTypes[i];
+				SingleVariableDeclaration node = (SingleVariableDeclaration)decl.parameters().get(i);
+				String s = source.substring(node.getStartPosition(), node.getStartPosition() + node.getLength());
+				if (clazz == int.class && s.indexOf("int /*long*/") != -1) this.paramTypes64[i] = new ReflectType(long.class);
+				else if (clazz == int[].class && (s.indexOf("int /*long*/") != -1 || s.indexOf("int[] /*long[]*/") != -1)) this.paramTypes64[i] = new ReflectType(long[].class);
+				else if (clazz == float.class && s.indexOf("float /*double*/") != -1) this.paramTypes64[i] = new ReflectType(double.class);
+				else if (clazz == float[].class && (s.indexOf("float /*double*/") != -1|| s.indexOf("float[] /*double[]*/") != -1)) this.paramTypes64[i] = new ReflectType(double[].class);
+				else if (clazz == long.class && s.indexOf("long /*int*/") != -1) this.paramTypes[i] = new ReflectType(int.class);
+				else if (clazz == long[].class && (s.indexOf("long /*int*/") != -1|| s.indexOf("long[] /*int[]*/") != -1)) this.paramTypes[i] = new ReflectType(int[].class);
+				else if (clazz == double.class && s.indexOf("double /*float*/") != -1) this.paramTypes[i] = new ReflectType(float.class);
+				else if (clazz == double[].class && (s.indexOf("double /*float*/") != -1|| s.indexOf("double[] /*float[]*/") != -1)) this.paramTypes[i] = new ReflectType(float[].class);
+			}
+		}
+		if (canChange64(returnType)) {
+			Class clazz = returnType;
+			ASTNode node = decl.getReturnType2();
+			String s = source.substring(node.getStartPosition(), decl.getName().getStartPosition());
+			if (clazz == int.class && s.indexOf("int /*long*/") != -1) this.returnType64 = new ReflectType(long.class);
+			else if (clazz == int[].class && (s.indexOf("int /*long*/") != -1 || s.indexOf("int[] /*long[]*/") != -1)) this.returnType64 = new ReflectType(long[].class);
+			else if (clazz == float.class && s.indexOf("float /*double*/") != -1) this.returnType64 = new ReflectType(double.class);
+			else if (clazz == float[].class && (s.indexOf("float /*double*/") != -1|| s.indexOf("float[] /*double[]*/") != -1)) this.returnType64 = new ReflectType(double[].class);
+			else if (clazz == long.class && s.indexOf("long /*int*/") != -1) this.returnType = new ReflectType(int.class);
+			else if (clazz == long[].class && (s.indexOf("long /*int*/") != -1|| s.indexOf("long[] /*int[]*/") != -1)) this.returnType = new ReflectType(int[].class);
+			else if (clazz == double.class && s.indexOf("double /*float*/") != -1) this.returnType = new ReflectType(float.class);
+			else if (clazz == double[].class && (s.indexOf("double /*float*/") != -1|| s.indexOf("double[] /*float[]*/") != -1)) this.returnType = new ReflectType(float[].class);
+		}		
+	}
+}
+
+public int hashCode() {
+	return method.hashCode();
+}
+
+public boolean equals(Object obj) {
+	if (!(obj instanceof ReflectMethod)) return false;
+	return ((ReflectMethod)obj).method.equals(method);
+}
+
+public JNIClass getDeclaringClass() {
+	return declaringClass;
+}
+
+public int getModifiers() {
+	return method.getModifiers();
+}
+
+public String getName() {
+	return method.getName();
+}
+
+public boolean isNativeUnique() {
+	if (unique != null) return unique.booleanValue();
+	boolean result = true;
+	String name = getName();
+	JNIMethod[] methods = declaringClass.getDeclaredMethods();
+	for (int i = 0; i < methods.length; i++) {
+		JNIMethod mth = methods[i];
+		if ((mth.getModifiers() & Modifier.NATIVE) != 0 &&
+			this != mth && !this.equals(mth) &&
+			name.equals(mth.getName()))
+			{
+				result = false;
+				break;
+			}
+	}
+	unique = new Boolean(result);
+	return result;
+}
+
+public JNIType[] getParameterTypes() {
+	return paramTypes;
+}
+
+public JNIType[] getParameterTypes64() {
+	return paramTypes64;
+}
+
+public JNIParameter[] getParameters() {
+	Class[] paramTypes = method.getParameterTypes();
+	ReflectParameter[] result = new ReflectParameter[paramTypes.length];
+	for (int i = 0; i < paramTypes.length; i++) {
+		result[i] = new ReflectParameter(this, i);
+	}
+	return result;
+}
+
+public JNIType getReturnType() {
+	return returnType;
+}
+
+public JNIType getReturnType64() {
+	return returnType64;
+}
+
+public String getAccessor() {
+	return (String)getParam("accessor");
+}
+
+public String getExclude() {
+	return (String)getParam("exclude");
+}
+
+public String getMetaData() {
+	String className = getDeclaringClass().getSimpleName();
+	String key = className + "_" + JNIGenerator.getFunctionName(this);
+	MetaData metaData = declaringClass.metaData;
+	String value = metaData.getMetaData(key, null);
+	if (value == null) {
+		key = className + "_" + method.getName();
+		value = metaData.getMetaData(key, null);
+	}
+	/*
+	* Support for 64 bit port.
+	*/
+	if (value == null) {
+		JNIType[] paramTypes = getParameterTypes();
+		if (convertTo32Bit(paramTypes, true)) {
+			key = className + "_" + JNIGenerator.getFunctionName(this, paramTypes);
+			value = metaData.getMetaData(key, null);
+		}
+		if (value == null) {
+			paramTypes = getParameterTypes();
+			if (convertTo32Bit(paramTypes, false)) {
+				key = className + "_" + JNIGenerator.getFunctionName(this, paramTypes);
+				value = metaData.getMetaData(key, null);
+			}
+		}
+	}
+	/*
+	* Support for lock.
+	*/
+	if (value == null && method.getName().startsWith("_")) {
+		key = className + "_" + JNIGenerator.getFunctionName(this).substring(2);
+		value = metaData.getMetaData(key, null);
+		if (value == null) {
+			key = className + "_" + method.getName().substring(1);
+			value = metaData.getMetaData(key, null);
+		}
+	}
+	if (value == null) value = "";	
+	return value;
+}
+
+public void setAccessor(String str) { 
+	setParam("accessor", str);
+}
+
+public void setExclude(String str) { 
+	setParam("exclude", str);
+}
+
+public void setMetaData(String value) {
+	String key;
+	String className = declaringClass.getSimpleName();
+	if (isNativeUnique()) {
+		key = className + "_" + method.getName ();
+	} else {
+		key = className + "_" + JNIGenerator.getFunctionName(this);
+	}
+	declaringClass.metaData.setMetaData(key, value);
+}
+
+public String toString() {
+	return method.toString();
+}
+
+}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectParameter.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectParameter.java
new file mode 100644
index 0000000..1fc669e
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectParameter.java
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2009 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.tools.internal;
+
+import java.io.File;
+
+public class ReflectParameter extends ReflectItem implements JNIParameter {
+	ReflectMethod method;
+	int parameter;
+
+public ReflectParameter(ReflectMethod method, int parameter) {
+	this.method = method;
+	this.parameter = parameter;
+}
+
+public String getCast() {
+	String cast = ((String)getParam("cast")).trim();
+	if (cast.length() > 0) {
+		if (!cast.startsWith("(")) cast = "(" + cast;
+		if (!cast.endsWith(")")) cast = cast + ")";
+	}
+	return cast;
+}
+
+public String getMetaData() {
+	String className = method.getDeclaringClass().getSimpleName();
+	String key = className + "_" + JNIGenerator.getFunctionName(method) + "_" + parameter;
+	MetaData metaData = method.declaringClass.metaData;
+	String value = metaData.getMetaData(key, null);
+	if (value == null) {
+		key = className + "_" + method.getName() + "_" + parameter;
+		value = metaData.getMetaData(key, null);
+	}
+	/*
+	* Support for 64 bit port.
+	*/
+	if (value == null) {
+		JNIType[] paramTypes = method.getParameterTypes();
+		if (ReflectItem.convertTo32Bit(paramTypes, true)) {
+			key = className + "_" + JNIGenerator.getFunctionName(method, paramTypes) + "_" + parameter;
+			value = metaData.getMetaData(key, null);
+		}
+		if (value == null) {
+			paramTypes = method.getParameterTypes();
+			if (ReflectItem.convertTo32Bit(paramTypes, false)) {
+				key = className + "_" + JNIGenerator.getFunctionName(method, paramTypes) + "_" + parameter;
+				value = metaData.getMetaData(key, null);
+			}
+		}
+	}
+	/*
+	* Support for lock.
+	*/
+	if (value == null && method.getName().startsWith("_")) {
+		key = className + "_" + JNIGenerator.getFunctionName(method).substring(2) + "_" + parameter;
+		value = metaData.getMetaData(key, null);
+		if (value == null) {
+			key = className + "_" + method.getName().substring(1) + "_" + parameter;
+			value = metaData.getMetaData(key, null);
+		}
+	}
+	if (value == null) value = "";	
+	return value;
+}
+
+public JNIMethod getMethod() {
+	return method;
+}
+
+public JNIClass getTypeClass() {
+	ReflectType type = (ReflectType)getType();
+	ReflectClass declaringClass = method.declaringClass;
+	String sourcePath  = declaringClass.sourcePath;
+	sourcePath = new File(sourcePath).getParent() + "/" + type.getSimpleName() + ".java";
+	return new ReflectClass(type.clazz, declaringClass.metaData, sourcePath);
+}
+
+public JNIType getType() {
+	return method.getParameterTypes()[parameter];
+}
+
+public JNIType getType64() {
+	return method.getParameterTypes64()[parameter];
+}
+
+public int getParameter() {
+	return parameter;
+}
+
+public void setCast(String str) {
+	setParam("cast", str);
+}
+
+public void setMetaData(String value) {
+	String key;
+	String className = method.getDeclaringClass().getSimpleName();
+	if (method.isNativeUnique()) {
+		key = className + "_" + method.getName () + "_" + parameter;
+	} else {
+		key = className + "_" + JNIGenerator.getFunctionName(method) + "_" + parameter;
+	}
+	method.declaringClass.metaData.setMetaData(key, value);
+}
+}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectType.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectType.java
new file mode 100644
index 0000000..ce1f401
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ReflectType.java
@@ -0,0 +1,142 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2009 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.tools.internal;
+
+public class ReflectType implements JNIType {
+	Class clazz;
+
+public ReflectType(Class clazz) {
+	this.clazz = clazz;
+}
+
+public boolean equals(Object obj) {
+	if (obj == this) return true;
+	if (!(obj instanceof ReflectType)) return false;
+	return ((ReflectType)obj).clazz == clazz;
+}
+
+public JNIType getComponentType() {
+	return new ReflectType(clazz.getComponentType());
+}
+
+public String getName() {
+	return clazz.getName();
+}
+
+public String getSimpleName() {
+	String name = clazz.getName();
+	int index = name.lastIndexOf('.') + 1;
+	return name.substring(index, name.length());
+}
+
+public String getTypeSignature(boolean define) {
+	if (clazz == Void.TYPE) return "V";
+	if (clazz == Integer.TYPE) return define ? "I_J" : "I";
+	if (clazz == Boolean.TYPE) return "Z";
+	if (clazz == Long.TYPE) return define ? "J_J" : "J";
+	if (clazz == Short.TYPE) return "S";
+	if (clazz == Character.TYPE) return "C";
+	if (clazz == Byte.TYPE) return "B";
+	if (clazz == Float.TYPE) return define ? "F_D" : "F";
+	if (clazz == Double.TYPE) return define ? "F_D" : "D";
+	if (clazz == String.class) return "Ljava/lang/String;";
+	if (clazz.isArray()) {
+		if (define) return getComponentType().getTypeSignature(define) + "Array";
+		return "[" + getComponentType().getTypeSignature(define);
+	}
+	return "L" + clazz.getName().replace('.', '/') + ";";
+}
+
+public String getTypeSignature1(boolean define) {
+	if (clazz == Void.TYPE) return "Void";
+	if (clazz == Integer.TYPE) return define ? "IntLong" : "Int";
+	if (clazz == Boolean.TYPE) return "Boolean";
+	if (clazz == Long.TYPE) return define ? "IntLong" : "Long";
+	if (clazz == Short.TYPE) return "Short";
+	if (clazz == Character.TYPE) return "Char";
+	if (clazz == Byte.TYPE) return "Byte";
+	if (clazz == Float.TYPE) return define ? "FloatDouble" : "Float";
+	if (clazz == Double.TYPE) return define ? "FloatDouble" : "Double";
+	if (clazz == String.class) return "String";
+	return "Object";
+}
+
+public String getTypeSignature2(boolean define) {
+	if (clazz == Void.TYPE) return "void";
+	if (clazz == Integer.TYPE) return define ? "jintLong" : "jint";
+	if (clazz == Boolean.TYPE) return "jboolean";
+	if (clazz == Long.TYPE) return define ? "jintLong" : "jlong";
+	if (clazz == Short.TYPE) return "jshort";
+	if (clazz == Character.TYPE) return "jchar";
+	if (clazz == Byte.TYPE) return "jbyte";
+	if (clazz == Float.TYPE) return define ? "jfloatDouble" : "jfloat";
+	if (clazz == Double.TYPE) return define ? "jfloatDouble" : "jdouble";
+	if (clazz == String.class) return "jstring";
+	if (clazz == Class.class) return "jclass";
+	if (clazz.isArray()) {
+		return getComponentType().getTypeSignature2(define) + "Array";
+	}
+	return "jobject";
+}
+
+public String getTypeSignature3(boolean define) {
+	if (clazz == Void.TYPE) return "void";
+	if (clazz == Integer.TYPE) return "int";
+	if (clazz == Boolean.TYPE) return "boolean";
+	if (clazz == Long.TYPE) return "long";
+	if (clazz == Short.TYPE) return "short";
+	if (clazz == Character.TYPE) return "char";
+	if (clazz == Byte.TYPE) return "byte";
+	if (clazz == Float.TYPE) return "float";
+	if (clazz == Double.TYPE) return "double";
+	if (clazz == String.class) return "String";
+	if (clazz.isArray()) {
+		return getComponentType().getTypeSignature3(define) + "[]";
+	}
+	return clazz.getName();
+}
+
+public String getTypeSignature4(boolean define, boolean struct) {
+	if (clazz == Void.TYPE) return "void";
+	if (clazz == Integer.TYPE) return define ? "jintLong" : "jint";
+	if (clazz == Boolean.TYPE) return "jboolean";
+	if (clazz == Long.TYPE) return define ? "jintLong" : "jlong";
+	if (clazz == Short.TYPE) return "jshort";
+	if (clazz == Character.TYPE) return "jchar";
+	if (clazz == Byte.TYPE) return "jbyte";
+	if (clazz == Float.TYPE) return define ? "jfloatDouble" : "jfloat";
+	if (clazz == Double.TYPE) return define ? "jfloatDouble" : "jdouble";
+	if (clazz == String.class) return "jstring";
+	if (clazz.isArray()) {
+		String sig = getComponentType().getTypeSignature4(define, struct);
+		return struct ? sig : sig + " *";
+	}
+	String sig = getSimpleName(); 
+	return struct ? sig : sig + " *";
+}
+
+public int hashCode() {
+	return clazz.hashCode();
+}
+
+public boolean isArray() {
+	return clazz.isArray();
+}
+
+public boolean isPrimitive() {
+	return clazz.isPrimitive();
+}
+
+public boolean isType(String type) {
+	return clazz.getName().equals(type);
+}
+
+}
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/SizeofGenerator.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/SizeofGenerator.java
index 8926089..408b220 100644
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/SizeofGenerator.java
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/SizeofGenerator.java
@@ -10,13 +10,13 @@
  *******************************************************************************/
 package org.eclipse.swt.tools.internal;
 
-import java.lang.reflect.*;
+import java.lang.reflect.Modifier;
 
 public class SizeofGenerator extends JNIGenerator {
 
 
-public void generate(Class clazz) {
-	String className = getClassName(clazz);
+public void generate(JNIClass clazz) {
+	String className = clazz.getSimpleName();
 	output("\tprintf(\"");
 	output(className);
 	output("=%d\\n\", sizeof(");
@@ -32,16 +32,16 @@
 	outputln("}");
 }
 
-public void generate(Field[] fields) {
+public void generate(JNIField[] fields) {
 	sort(fields);	
 	for (int i = 0; i < fields.length; i++) {
-		Field field = fields[i];
+		JNIField field = fields[i];
 		if ((field.getModifiers() & Modifier.FINAL) == 0) continue;
 		generate(field);
 	}
 }
 
-public void generate(Field field) {
+public void generate(JNIField field) {
 	output("\tprintf(\"");
 	output(field.getName());
 	output("=%d\\n\", sizeof(");
@@ -59,7 +59,7 @@
 		for (int i = 0; i < args.length; i++) {
 			String clazzName = args[i];
 			Class clazz = Class.forName(clazzName);
-			gen.generate(clazz);
+			gen.generate(new ReflectClass(clazz));
 		}
 	} catch (Exception e) {
 		System.out.println("Problem");
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/StatsGenerator.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/StatsGenerator.java
index 5d50cad..8a2bf8e 100644
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/StatsGenerator.java
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/StatsGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2007 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
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.swt.tools.internal;
 
-import java.lang.reflect.*;
+import java.lang.reflect.Modifier;
 
 public class StatsGenerator extends JNIGenerator {
 
@@ -21,7 +21,7 @@
 }
 
 public void generateCopyright() {
-	generateMetaData("swt_copyright");
+	outputln(fixDelimiter(getMetaData().getCopyright()));
 }
 
 public void generateIncludes() {
@@ -34,7 +34,7 @@
 	}
 }
 
-public void generate(Class clazz) {
+public void generate(JNIClass clazz) {
 	if (header) {
 		generateHeaderFile(clazz);
 	} else {
@@ -50,15 +50,15 @@
 	return "_stats";
 }
 
-void generateHeaderFile(Class clazz){
+void generateHeaderFile(JNIClass clazz){
 	generateNATIVEMacros(clazz);
-	Method[] methods = clazz.getDeclaredMethods();
+	JNIMethod[] methods = clazz.getDeclaredMethods();
 	sort(methods);
 	generateFunctionEnum(methods);	
 }
 
-void generateNATIVEMacros(Class clazz) {
-	String className = getClassName(clazz);
+void generateNATIVEMacros(JNIClass clazz) {
+	String className = clazz.getSimpleName();
 	outputln("#ifdef NATIVE_STATS");
 	output("extern int ");
 	output(className);
@@ -78,27 +78,35 @@
 	output(className);
 	outputln("_NATIVE_EXIT(env, that, func) ");
 	outputln("#else");
+	output("#ifndef ");
+	output(className);
+	outputln("_NATIVE_ENTER");
 	output("#define ");
 	output(className);
 	outputln("_NATIVE_ENTER(env, that, func) ");
+	outputln("#endif");
+	output("#ifndef ");
+	output(className);
+	outputln("_NATIVE_EXIT");
 	output("#define ");
 	output(className);
 	outputln("_NATIVE_EXIT(env, that, func) ");
 	outputln("#endif");
+	outputln("#endif");
 	outputln();	
 }
 
-void generateSourceFile(Class clazz) {
+void generateSourceFile(JNIClass clazz) {
 	outputln("#ifdef NATIVE_STATS");
 	outputln();
-	Method[] methods = clazz.getDeclaredMethods();
+	JNIMethod[] methods = clazz.getDeclaredMethods();
 	int methodCount = 0;
 	for (int i = 0; i < methods.length; i++) {
-		Method method = methods[i];
+		JNIMethod method = methods[i];
 		if ((method.getModifiers() & Modifier.NATIVE) == 0) continue;
 		methodCount++;
 	}
-	String className = getClassName(clazz);
+	String className = clazz.getSimpleName();
 	output("int ");
 	output(className);
 	output("_nativeFunctionCount = ");
@@ -114,11 +122,24 @@
 	outputln("_nativeFunctionNames[] = {");
 	sort(methods);
 	for (int i = 0; i < methods.length; i++) {
-		Method method = methods[i];
+		JNIMethod method = methods[i];
 		if ((method.getModifiers() & Modifier.NATIVE) == 0) continue;
+		String function = getFunctionName(method), function64 = getFunctionName(method, method.getParameterTypes64());
+		if (!function.equals(function64)) {
+			output("#ifndef ");
+			output(JNI64);
+			outputln();
+		}
 		output("\t\"");
-		output(getFunctionName(method));
+		output(function);
 		outputln("\",");
+		if (!function.equals(function64)) {
+			outputln("#else");
+			output("\t\"");
+			output(function64);
+			outputln("\",");
+			outputln("#endif");
+		}
 		if (progress != null) progress.step();
 	}
 	outputln("};");
@@ -170,20 +191,33 @@
 	outputln("}");
 }
 
-void generateFunctionEnum(Method[] methods) {
+void generateFunctionEnum(JNIMethod[] methods) {
 	if (methods.length == 0) return;
 	outputln("typedef enum {");
 	for (int i = 0; i < methods.length; i++) {
-		Method method = methods[i];
+		JNIMethod method = methods[i];
 		if ((method.getModifiers() & Modifier.NATIVE) == 0) continue;
+		String function = getFunctionName(method), function64 = getFunctionName(method, method.getParameterTypes64());
+		if (!function.equals(function64)) {
+			output("#ifndef ");
+			output(JNI64);
+			outputln();
+		}
 		output("\t");
-		output(getFunctionName(method));
+		output(function);
 		outputln("_FUNC,");
+		if (!function.equals(function64)) {
+			outputln("#else");
+			output("\t");
+			output(function64);
+			outputln("_FUNC,");
+			outputln("#endif");
+		}
 		if (progress != null) progress.step();
 	}
-	Class clazz = methods[0].getDeclaringClass();
+	JNIClass clazz = methods[0].getDeclaringClass();
 	output("} ");
-	output(getClassName(clazz));
+	output(clazz.getSimpleName());
 	outputln("_FUNCS;");
 }
 
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/StructsGenerator.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/StructsGenerator.java
index 52c8a69..067aace 100644
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/StructsGenerator.java
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/StructsGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2007 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
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.swt.tools.internal;
 
-import java.lang.reflect.*;
+import java.lang.reflect.Modifier;
 import java.util.HashSet;
 import java.util.Iterator;
 
@@ -18,12 +18,14 @@
 
 boolean header;
 
+static final boolean GLOBAL_REF = false;
+
 public StructsGenerator(boolean header) {
 	this.header = header;
 }
 
 public void generateCopyright() {
-	generateMetaData("swt_copyright");
+	outputln(fixDelimiter(getMetaData().getCopyright()));
 }
 
 public void generateIncludes() {
@@ -40,11 +42,11 @@
 	outputln();
 }
 
-public void generate(Class clazz) {
+public void generate(JNIClass clazz) {
 	int j = 0;
-	Field[] fields = clazz.getDeclaredFields();
+	JNIField[] fields = clazz.getDeclaredFields();
 	for (; j < fields.length; j++) {
-		Field field = fields[j];
+		JNIField field = fields[j];
 		int mods = field.getModifiers();
 		if ((mods & Modifier.PUBLIC) != 0 && (mods & Modifier.STATIC) == 0) {
 			break;
@@ -71,12 +73,11 @@
 	return "_structs";
 }
 
-void generateExcludes(Class[] classes) {
+void generateExcludes(JNIClass[] classes) {
 	HashSet excludes = new HashSet();
 	for (int i = 0; i < classes.length; i++) {
-		Class clazz = classes[i];
-		ClassData classData = getMetaData().getMetaData(clazz);
-		String exclude = classData.getExclude();
+		JNIClass clazz = classes[i];
+		String exclude = clazz.getExclude();
 		if (exclude.length() != 0) {
 			excludes.add(exclude);
 		}
@@ -85,12 +86,11 @@
 		String exclude = (String)iter.next();
 		outputln(exclude);
 		for (int i = 0; i < classes.length; i++) {
-			Class clazz = classes[i];
-			ClassData classData = getMetaData().getMetaData(clazz);
-			String classExclude = classData.getExclude();
+			JNIClass clazz = classes[i];
+			String classExclude = clazz.getExclude();
 			if (exclude.equals(classExclude)) {
 				output("#define NO_");
-				outputln(getClassName(clazz));
+				outputln(clazz.getSimpleName());
 			}
 		}
 		outputln("#endif");
@@ -98,7 +98,7 @@
 	}
 }
 
-void generateHeaderFile(Class clazz) {
+void generateHeaderFile(JNIClass clazz) {
 	generateSourceStart(clazz);
 	generatePrototypes(clazz);
 	generateBlankMacros(clazz);
@@ -106,7 +106,7 @@
 	outputln();
 }
 
-void generateSourceFile(Class clazz) {
+void generateSourceFile(JNIClass clazz) {
 	generateSourceStart(clazz);
 	generateFIDsStructure(clazz);
 	outputln();
@@ -117,26 +117,26 @@
 	outputln();
 }
 
-void generateSourceStart(Class clazz) {
-	String clazzName = getClassName(clazz);
+void generateSourceStart(JNIClass clazz) {
+	String clazzName = clazz.getSimpleName();
 	output("#ifndef NO_");
 	outputln(clazzName);
 }
 
-void generateSourceEnd(Class clazz) {
+void generateSourceEnd(JNIClass clazz) {
 	outputln("#endif");
 }
 
-void generateGlobalVar(Class clazz) {
-	String clazzName = getClassName(clazz);
+void generateGlobalVar(JNIClass clazz) {
+	String clazzName = clazz.getSimpleName();
 	output(clazzName);
 	output("_FID_CACHE ");
 	output(clazzName);
 	outputln("Fc;");
 }
 
-void generateBlankMacros(Class clazz) {
-	String clazzName = getClassName(clazz);
+void generateBlankMacros(JNIClass clazz) {
+	String clazzName = clazz.getSimpleName();
 	outputln("#else");
 	output("#define cache");
 	output(clazzName);
@@ -152,41 +152,53 @@
 	outputln("_sizeof() 0");
 }
 
-void generatePrototypes(Class clazz) {
-	String clazzName = getClassName(clazz);
+void generatePrototypes(JNIClass clazz) {
+	String clazzName = clazz.getSimpleName();
 	output("void cache");
 	output(clazzName);
 	outputln("Fields(JNIEnv *env, jobject lpObject);");
+	if (clazz.getFlag(Flags.FLAG_STRUCT)) {
+		output("struct ");
+	}
 	output(clazzName);
 	output(" *get");
 	output(clazzName);
 	output("Fields(JNIEnv *env, jobject lpObject, ");
+	if (clazz.getFlag(Flags.FLAG_STRUCT)) {
+		output("struct ");
+	}
 	output(clazzName);
 	outputln(" *lpStruct);");
 	output("void set");
 	output(clazzName);
 	output("Fields(JNIEnv *env, jobject lpObject, ");
+	if (clazz.getFlag(Flags.FLAG_STRUCT)) {
+		output("struct ");
+	}
 	output(clazzName);
 	outputln(" *lpStruct);");
 	output("#define ");
 	output(clazzName);
 	output("_sizeof() sizeof(");
+	if (clazz.getFlag(Flags.FLAG_STRUCT)) {
+		output("struct ");
+	}
 	output(clazzName);
 	outputln(")");
 }
 
-void generateFIDsStructure(Class clazz) {
-	String clazzName = getClassName(clazz);
+void generateFIDsStructure(JNIClass clazz) {
+	String clazzName = clazz.getSimpleName();
 	output("typedef struct ");
 	output(clazzName);
 	outputln("_FID_CACHE {");
 	outputln("\tint cached;");
 	outputln("\tjclass clazz;");
 	output("\tjfieldID ");
-	Field[] fields = clazz.getDeclaredFields();
+	JNIField[] fields = clazz.getDeclaredFields();
 	boolean first = true;
 	for (int i = 0; i < fields.length; i++) {
-		Field field = fields[i];
+		JNIField field = fields[i];
 		if (ignoreField(field)) continue;
 		if (!first) output(", ");
 		output(field.getName());
@@ -198,8 +210,8 @@
 	outputln("_FID_CACHE;");
 }
 
-void generateCacheFunction(Class clazz) {
-	String clazzName = getClassName(clazz);
+void generateCacheFunction(JNIClass clazz) {
+	String clazzName = clazz.getSimpleName();
 	output("void cache");
 	output(clazzName);
 	outputln("Fields(JNIEnv *env, jobject lpObject)");
@@ -207,9 +219,9 @@
 	output("\tif (");
 	output(clazzName);
 	outputln("Fc.cached) return;");
-	Class superclazz = clazz.getSuperclass();
-	if (superclazz != Object.class) {
-		String superName = getClassName(superclazz);
+	JNIClass superclazz = clazz.getSuperclass();
+	if (!superclazz.getName().equals("java.lang.Object")) {
+		String superName = superclazz.getSimpleName();
 		output("\tcache");
 		output(superName);
 		outputln("Fields(env, lpObject);");
@@ -217,14 +229,22 @@
 	output("\t");
 	output(clazzName);
 	if (isCPP) {
-		output("Fc.clazz = env->GetObjectClass(lpObject);");
+		if (GLOBAL_REF) {
+			output("Fc.clazz = (jclass)env->NewGlobalRef(env->GetObjectClass(lpObject));");
+		} else {
+			output("Fc.clazz = env->GetObjectClass(lpObject);");
+		}
 	} else {
-		output("Fc.clazz = (*env)->GetObjectClass(env, lpObject);");
+		if (GLOBAL_REF) {
+			output("Fc.clazz = (*env)->NewGlobalRef(env, (*env)->GetObjectClass(env, lpObject));");
+		} else {
+			output("Fc.clazz = (*env)->GetObjectClass(env, lpObject);");
+		}
 	}
 	outputln();
-	Field[] fields = clazz.getDeclaredFields();
+	JNIField[] fields = clazz.getDeclaredFields();
 	for (int i = 0; i < fields.length; i++) {
-		Field field = fields[i];
+		JNIField field = fields[i];
 		if (ignoreField(field)) continue;
 		output("\t");
 		output(clazzName);
@@ -238,9 +258,12 @@
 		output(clazzName);
 		output("Fc.clazz, \"");
 		output(field.getName());
-		output("\", \"");
-		output(getTypeSignature(field.getType()));
-		outputln("\");");
+		JNIType type = field.getType(), type64 = field.getType64();
+		output("\", ");
+		if (type.equals(type64)) output("\"");
+		output(type.getTypeSignature(!type.equals(type64)));
+		if (type.equals(type64)) output("\"");
+		outputln(");");
 	}
 	output("\t");
 	output(clazzName);
@@ -248,11 +271,11 @@
 	outputln("}");
 }
 
-void generateGetFields(Class clazz) {
-	Class superclazz = clazz.getSuperclass();
-	String clazzName = getClassName(clazz);
-	String superName = getClassName(superclazz);
-	if (superclazz != Object.class) {
+void generateGetFields(JNIClass clazz) {
+	JNIClass superclazz = clazz.getSuperclass();
+	String clazzName = clazz.getSimpleName();
+	String superName = superclazz.getSimpleName();
+	if (!superclazz.getName().equals("java.lang.Object")) {
 		/* Windows exception - cannot call get/set function of super class in this case */
 		if (!(clazzName.equals(superName + "A") || clazzName.equals(superName + "W"))) {
 			output("\tget");
@@ -264,57 +287,56 @@
 			generateGetFields(superclazz);
 		}
 	}
-	Field[] fields = clazz.getDeclaredFields();
+	JNIField[] fields = clazz.getDeclaredFields();
 	for (int i = 0; i < fields.length; i++) {
-		Field field = fields[i];
+		JNIField field = fields[i];
 		if (ignoreField(field)) continue;
-		FieldData fieldData = getMetaData().getMetaData(field);
-		String exclude = fieldData.getExclude();
+		String exclude = field.getExclude();
 		if (exclude.length() != 0) {
 			outputln(exclude);
 		}
-		boolean noWinCE = fieldData.getFlag("no_wince");
+		boolean noWinCE = field.getFlag(FLAG_NO_WINCE);
 		if (noWinCE) {
 			outputln("#ifndef _WIN32_WCE");
 		}
-		Class type = field.getType();
-		String typeName = getClassName(type);
-		String accessor = fieldData.getAccessor();
+		JNIType type = field.getType(), type64 = field.getType64();
+		String typeName = type.getSimpleName();
+		String accessor = field.getAccessor();
 		if (accessor == null || accessor.length() == 0) accessor = field.getName();
 		if (type.isPrimitive()) {
 			output("\tlpStruct->");
 			output(accessor);
 			output(" = ");
-			output(fieldData.getCast());
+			output(field.getCast());
 			if (isCPP) {
 				output("env->Get");
 			} else {
 				output("(*env)->Get");
 			}
-			output(getTypeSignature1(field.getType()));
+			output(type.getTypeSignature1(!type.equals(type64)));
 			if (isCPP) {
 				output("Field(lpObject, ");
 			} else {
 				output("Field(env, lpObject, ");
 			}
-			output(getClassName(field.getDeclaringClass()));
+			output(field.getDeclaringClass().getSimpleName());
 			output("Fc.");
 			output(field.getName());
 			output(");");
 		} else if (type.isArray()) {
-			Class componentType = type.getComponentType();
+			JNIType componentType = type.getComponentType(), componentType64 = type64.getComponentType();
 			if (componentType.isPrimitive()) {
 				outputln("\t{");
 				output("\t");				
-				output(getTypeSignature2(field.getType()));
+				output(type.getTypeSignature2(!type.equals(type64)));
 				output(" lpObject1 = (");
-				output(getTypeSignature2(field.getType()));
+				output(type.getTypeSignature2(!type.equals(type64)));
 				if (isCPP) {
 					output(")env->GetObjectField(lpObject, ");
 				} else {
 					output(")(*env)->GetObjectField(env, lpObject, ");
 				}
-				output(getClassName(field.getDeclaringClass()));
+				output(field.getDeclaringClass().getSimpleName());
 				output("Fc.");
 				output(field.getName());
 				outputln(");");
@@ -323,7 +345,7 @@
 				} else {
 					output("\t(*env)->Get");
 				}
-				output(getTypeSignature1(componentType));
+				output(componentType.getTypeSignature1(!componentType.equals(componentType64)));
 				if (isCPP) {
 					output("ArrayRegion(lpObject1, 0, sizeof(lpStruct->");
 				} else {
@@ -331,13 +353,13 @@
 				}
 				output(accessor);
 				output(")");
-				int byteCount = getByteCount(componentType);
-				if (byteCount > 1) {
-					output(" / ");
-					output(String.valueOf(byteCount));
+				if (!componentType.isType("byte")) {
+					output(" / sizeof(");
+					output(componentType.getTypeSignature2(!componentType.equals(componentType64)));
+					output(")");
 				}
 				output(", (");
-				output(getTypeSignature4(type));				
+				output(type.getTypeSignature4(!type.equals(type64), false));				
 				output(")lpStruct->");
 				output(accessor);
 				outputln(");");
@@ -352,7 +374,7 @@
 			} else {
 				output("\tjobject lpObject1 = (*env)->GetObjectField(env, lpObject, ");
 			}
-			output(getClassName(field.getDeclaringClass()));
+			output(field.getDeclaringClass().getSimpleName());
 			output("Fc.");
 			output(field.getName());
 			outputln(");");
@@ -373,12 +395,18 @@
 	}
 }
 
-void generateGetFunction(Class clazz) {
-	String clazzName = getClassName(clazz);
+void generateGetFunction(JNIClass clazz) {
+	String clazzName = clazz.getSimpleName();
+	if (clazz.getFlag(Flags.FLAG_STRUCT)) {
+		output("struct ");
+	}
 	output(clazzName);
 	output(" *get");
 	output(clazzName);
 	output("Fields(JNIEnv *env, jobject lpObject, ");
+	if (clazz.getFlag(Flags.FLAG_STRUCT)) {
+		output("struct ");
+	}
 	output(clazzName);
 	outputln(" *lpStruct)");
 	outputln("{");
@@ -392,11 +420,11 @@
 	outputln("}");
 }
 
-void generateSetFields(Class clazz) {
-	Class superclazz = clazz.getSuperclass();
-	String clazzName = getClassName(clazz);
-	String superName = getClassName(superclazz);
-	if (superclazz != Object.class) {
+void generateSetFields(JNIClass clazz) {
+	JNIClass superclazz = clazz.getSuperclass();
+	String clazzName = clazz.getSimpleName();
+	String superName = superclazz.getSimpleName();
+	if (!superclazz.getName().equals("java.lang.Object")) {
 		/* Windows exception - cannot call get/set function of super class in this case */
 		if (!(clazzName.equals(superName + "A") || clazzName.equals(superName + "W"))) {
 			output("\tset");
@@ -408,22 +436,21 @@
 			generateSetFields(superclazz);
 		}
 	}
-	Field[] fields = clazz.getDeclaredFields();
+	JNIField[] fields = clazz.getDeclaredFields();
 	for (int i = 0; i < fields.length; i++) {
-		Field field = fields[i];
+		JNIField field = fields[i];
 		if (ignoreField(field)) continue;
-		FieldData fieldData = getMetaData().getMetaData(field);
-		String exclude = fieldData.getExclude();
+		String exclude = field.getExclude();
 		if (exclude.length() != 0) {
 			outputln(exclude);
 		}
-		boolean noWinCE = fieldData.getFlag("no_wince");
+		boolean noWinCE = field.getFlag(FLAG_NO_WINCE);
 		if (noWinCE) {
 			outputln("#ifndef _WIN32_WCE");
 		}
-		Class type = field.getType();
-		String typeName = getClassName(type);
-		String accessor = fieldData.getAccessor();
+		JNIType type = field.getType(), type64 = field.getType64();
+		String typeName = type.getSimpleName();
+		String accessor = field.getAccessor();
 		if (accessor == null || accessor.length() == 0) accessor = field.getName();
 		if (type.isPrimitive()) {
 			if (isCPP) {
@@ -431,34 +458,34 @@
 			} else {
 				output("\t(*env)->Set");
 			}
-			output(getTypeSignature1(field.getType()));
+			output(type.getTypeSignature1(!type.equals(type64)));
 			if (isCPP) {
 				output("Field(lpObject, ");
 			} else {
 				output("Field(env, lpObject, ");
 			}
-			output(getClassName(field.getDeclaringClass()));
+			output(field.getDeclaringClass().getSimpleName());
 			output("Fc.");
 			output(field.getName());
 			output(", (");
-			output(getTypeSignature2(field.getType()));
+			output(type.getTypeSignature2(!type.equals(type64)));
 			output(")lpStruct->");
 			output(accessor);
 			output(");");
 		} else if (type.isArray()) {
-			Class componentType = type.getComponentType();
+			JNIType componentType = type.getComponentType(), componentType64 = type64.getComponentType();
 			if (componentType.isPrimitive()) {
 				outputln("\t{");
 				output("\t");				
-				output(getTypeSignature2(field.getType()));
+				output(type.getTypeSignature2(!type.equals(type64)));
 				output(" lpObject1 = (");
-				output(getTypeSignature2(field.getType()));
+				output(type.getTypeSignature2(!type.equals(type64)));
 				if (isCPP) {
 					output(")env->GetObjectField(lpObject, ");
 				} else {
 					output(")(*env)->GetObjectField(env, lpObject, ");
 				}
-				output(getClassName(field.getDeclaringClass()));
+				output(field.getDeclaringClass().getSimpleName());
 				output("Fc.");
 				output(field.getName());
 				outputln(");");
@@ -467,7 +494,7 @@
 				} else {
 					output("\t(*env)->Set");
 				}
-				output(getTypeSignature1(componentType));
+				output(componentType.getTypeSignature1(!componentType.equals(componentType64)));
 				if (isCPP) {
 					output("ArrayRegion(lpObject1, 0, sizeof(lpStruct->");
 				} else {
@@ -475,13 +502,13 @@
 				}
 				output(accessor);
 				output(")");
-				int byteCount = getByteCount(componentType);
-				if (byteCount > 1) {
-					output(" / ");
-					output(String.valueOf(byteCount));
+				if (!componentType.isType("byte")) {
+					output(" / sizeof(");
+					output(componentType.getTypeSignature2(!componentType.equals(componentType64)));
+					output(")");
 				}
 				output(", (");
-				output(getTypeSignature4(type));				
+				output(type.getTypeSignature4(!type.equals(type64), false));				
 				output(")lpStruct->");
 				output(accessor);
 				outputln(");");
@@ -492,7 +519,7 @@
 		} else {
 			outputln("\t{");
 			output("\tjobject lpObject1 = (*env)->GetObjectField(env, lpObject, ");
-			output(getClassName(field.getDeclaringClass()));
+			output(field.getDeclaringClass().getSimpleName());
 			output("Fc.");
 			output(field.getName());
 			outputln(");");
@@ -513,11 +540,14 @@
 	}
 }
 
-void generateSetFunction(Class clazz) {
-	String clazzName = getClassName(clazz);
+void generateSetFunction(JNIClass clazz) {
+	String clazzName = clazz.getSimpleName();
 	output("void set");
 	output(clazzName);
 	output("Fields(JNIEnv *env, jobject lpObject, ");
+	if (clazz.getFlag(Flags.FLAG_STRUCT)) {
+		output("struct ");
+	}
 	output(clazzName);
 	outputln(" *lpStruct)");
 	outputln("{");
@@ -530,7 +560,7 @@
 	outputln("}");
 }
 
-void generateFunctions(Class clazz) {
+void generateFunctions(JNIClass clazz) {
 	generateCacheFunction(clazz);
 	outputln();
 	generateGetFunction(clazz);
@@ -538,7 +568,7 @@
 	generateSetFunction(clazz);
 }
 
-boolean ignoreField(Field field) {
+boolean ignoreField(JNIField field) {
 	int mods = field.getModifiers();
 	return
 		((mods & Modifier.PUBLIC) == 0) ||
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.accessibility.gtk.ATK.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.accessibility.gtk.ATK.properties
deleted file mode 100644
index 03558b6..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.accessibility.gtk.ATK.properties
+++ /dev/null
@@ -1,271 +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
-###############################################################################
-org_eclipse_swt_internal_accessibility_gtk_ATK=
-ATK_AtkObjectFactoryClass_sizeof=
-
-ATK_AtkObjectFactory_sizeof=
-
-ATK__ATK_ACTION_GET_IFACE=
-ATK__ATK_ACTION_GET_IFACE_0=
-
-ATK__ATK_COMPONENT_GET_IFACE=
-ATK__ATK_COMPONENT_GET_IFACE_0=
-
-ATK__ATK_OBJECT_FACTORY_CLASS=
-ATK__ATK_OBJECT_FACTORY_CLASS_0=
-
-ATK__ATK_SELECTION_GET_IFACE=
-ATK__ATK_SELECTION_GET_IFACE_0=
-
-ATK__ATK_TEXT_GET_IFACE=
-ATK__ATK_TEXT_GET_IFACE_0=
-
-ATK__GTK_ACCESSIBLE=
-ATK__GTK_ACCESSIBLE_0=
-
-ATK__atk_focus_tracker_notify=
-ATK__atk_focus_tracker_notify_0=cast=(AtkObject *)
-
-ATK__atk_get_default_registry=
-
-ATK__atk_object_factory_create_accessible=
-ATK__atk_object_factory_create_accessible_0=cast=(AtkObjectFactory *)
-ATK__atk_object_factory_create_accessible_1=cast=(GObject *)
-
-ATK__atk_object_factory_get_accessible_type=
-ATK__atk_object_factory_get_accessible_type_0=cast=(AtkObjectFactory *)
-
-ATK__atk_object_initialize=
-ATK__atk_object_initialize_0=cast=(AtkObject *)
-ATK__atk_object_initialize_1=cast=(gpointer)
-
-ATK__atk_object_ref_relation_set=
-ATK__atk_object_ref_relation_set_0=cast=(AtkObject *)
-
-ATK__atk_registry_get_factory=
-ATK__atk_registry_get_factory_0=cast=(AtkRegistry *)
-ATK__atk_registry_get_factory_1=cast=(GType)
-
-ATK__atk_registry_set_factory_type=
-ATK__atk_registry_set_factory_type_0=cast=(AtkRegistry *)
-ATK__atk_registry_set_factory_type_1=cast=(GType)
-ATK__atk_registry_set_factory_type_2=cast=(GType)
-
-ATK__atk_relation_set_get_n_relations=
-ATK__atk_relation_set_get_n_relations_0=cast=(AtkRelationSet *)
-
-ATK__atk_relation_set_get_relation=
-ATK__atk_relation_set_get_relation_0=cast=(AtkRelationSet *)
-ATK__atk_relation_set_get_relation_1=
-
-ATK__atk_relation_set_remove=
-ATK__atk_relation_set_remove_0=cast=(AtkRelationSet *)
-ATK__atk_relation_set_remove_1=cast=(AtkRelation *)
-
-ATK__atk_state_set_add_state=
-ATK__atk_state_set_add_state_0=cast=(AtkStateSet *)
-ATK__atk_state_set_add_state_1=cast=(AtkStateType)
-
-ATK__atk_state_set_new=
-
-ATK__1call__II=
-ATK__1call__II_0=
-ATK__1call__II_1=
-
-ATK__1call__III=
-ATK__1call__III_0=
-ATK__1call__III_1=
-ATK__1call__III_2=
-
-ATK__1call__IIII=
-ATK__1call__IIII_0=
-ATK__1call__IIII_1=
-ATK__1call__IIII_2=
-ATK__1call__IIII_3=
-
-ATK__1call__IIIII=
-ATK__1call__IIIII_0=
-ATK__1call__IIIII_1=
-ATK__1call__IIIII_2=
-ATK__1call__IIIII_3=
-ATK__1call__IIIII_4=
-
-ATK__1call__IIIIII=
-ATK__1call__IIIIII_0=
-ATK__1call__IIIIII_1=
-ATK__1call__IIIIII_2=
-ATK__1call__IIIIII_3=
-ATK__1call__IIIIII_4=
-ATK__1call__IIIIII_5=
-
-ATK__1call__IIIIIII=
-ATK__1call__IIIIIII_0=
-ATK__1call__IIIIIII_1=
-ATK__1call__IIIIIII_2=
-ATK__1call__IIIIIII_3=
-ATK__1call__IIIIIII_4=
-ATK__1call__IIIIIII_5=
-ATK__1call__IIIIIII_6=
-
-ATK_memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkActionIface_2=
-ATK_memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkActionIface_2_0=
-ATK_memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkActionIface_2_1=
-
-ATK_memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkComponentIface_2=
-ATK_memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkComponentIface_2_0=
-ATK_memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkComponentIface_2_1=
-
-ATK_memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkHypertextIface_2=
-ATK_memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkHypertextIface_2_0=
-ATK_memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkHypertextIface_2_1=
-
-ATK_memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkObjectClass_2=
-ATK_memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkObjectClass_2_0=
-ATK_memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkObjectClass_2_1=
-
-ATK_memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkObjectFactoryClass_2=
-ATK_memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkObjectFactoryClass_2_0=
-ATK_memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkObjectFactoryClass_2_1=
-
-ATK_memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkSelectionIface_2=
-ATK_memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkSelectionIface_2_0=
-ATK_memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkSelectionIface_2_1=
-
-ATK_memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkTextIface_2=
-ATK_memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkTextIface_2_0=
-ATK_memmove__ILorg_eclipse_swt_internal_accessibility_gtk_AtkTextIface_2_1=
-
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkActionIface_2I=
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkActionIface_2I_0=
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkActionIface_2I_1=
-
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkComponentIface_2I=
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkComponentIface_2I_0=
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkComponentIface_2I_1=
-
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkHypertextIface_2I=
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkHypertextIface_2I_0=
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkHypertextIface_2I_1=
-
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkObjectClass_2I=
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkObjectClass_2I_0=
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkObjectClass_2I_1=
-
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkObjectFactoryClass_2I=
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkObjectFactoryClass_2I_0=
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkObjectFactoryClass_2I_1=
-
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkSelectionIface_2I=
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkSelectionIface_2I_0=
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkSelectionIface_2I_1=
-
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkTextIface_2I=
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkTextIface_2I_0=
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_AtkTextIface_2I_1=
-
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_GtkAccessible_2I=
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_GtkAccessible_2I_0=
-ATK_memmove__Lorg_eclipse_swt_internal_accessibility_gtk_GtkAccessible_2I_1=
-
-
-org_eclipse_swt_internal_accessibility_gtk_AtkActionIface=
-AtkActionIface_do_action=cast=(gboolean (*)())
-AtkActionIface_get_n_actions=cast=(gint (*)())
-AtkActionIface_get_description=cast=(G_CONST_RETURN gchar *(*)())
-AtkActionIface_get_name=cast=(G_CONST_RETURN gchar *(*)())
-AtkActionIface_get_keybinding=cast=(G_CONST_RETURN gchar *(*)())
-AtkActionIface_set_description=cast=(gboolean (*)())
-
-org_eclipse_swt_internal_accessibility_gtk_AtkComponentIface=
-AtkComponentIface_add_focus_handler=cast=(guint (*)())
-AtkComponentIface_contains=cast=(gboolean (*)())
-AtkComponentIface_ref_accessible_at_point=cast=(AtkObject *(*)())
-AtkComponentIface_get_extents=cast=(void (*)())
-AtkComponentIface_get_position=cast=(void (*)())
-AtkComponentIface_get_size=cast=(void (*)())
-AtkComponentIface_grab_focus=cast=(gboolean (*)())
-AtkComponentIface_remove_focus_handler=cast=(void (*)())
-AtkComponentIface_set_extents=cast=(gboolean (*)())
-AtkComponentIface_set_position=cast=(gboolean (*)())
-AtkComponentIface_set_size=cast=(gboolean (*)())
-AtkComponentIface_get_layer=cast=(AtkLayer (*)())
-AtkComponentIface_get_mdi_zorder=cast=(gint (*)())
-
-org_eclipse_swt_internal_accessibility_gtk_AtkHypertextIface=
-AtkHypertextIface_get_link=cast=(AtkHyperlink *(*)())
-AtkHypertextIface_get_n_links=cast=(gint (*)())
-AtkHypertextIface_get_link_index=cast=(gint (*)())
-
-org_eclipse_swt_internal_accessibility_gtk_AtkObjectClass=
-AtkObjectClass_get_name=cast=(G_CONST_RETURN gchar *(*)())
-AtkObjectClass_get_description=cast=(G_CONST_RETURN gchar *(*)())
-AtkObjectClass_get_parent=cast=(AtkObject *(*)())
-AtkObjectClass_get_n_children=cast=(gint (*)())
-AtkObjectClass_ref_child=cast=(AtkObject *(*)())
-AtkObjectClass_get_index_in_parent=cast=(gint (*)())
-AtkObjectClass_ref_relation_set=cast=(AtkRelationSet *(*)())
-AtkObjectClass_get_role=cast=(AtkRole (*)())
-AtkObjectClass_get_layer=cast=(AtkLayer (*)())
-AtkObjectClass_get_mdi_zorder=cast=(gint (*)())
-AtkObjectClass_ref_state_set=cast=(AtkStateSet *(*)())
-AtkObjectClass_set_name=cast=(void (*)())
-AtkObjectClass_set_description=cast=(void (*)())
-AtkObjectClass_set_parent=cast=(void (*)())
-AtkObjectClass_set_role=cast=(void (*)())
-AtkObjectClass_connect_property_change_handler=cast=(guint (*)())
-AtkObjectClass_remove_property_change_handler=cast=(void (*)())
-AtkObjectClass_initialize=cast=(void (*)())
-AtkObjectClass_children_changed=cast=(void (*)())
-AtkObjectClass_focus_event=cast=(void (*)())
-AtkObjectClass_property_change=cast=(void (*)())
-AtkObjectClass_state_change=cast=(void (*)())
-AtkObjectClass_visible_data_changed=cast=(void (*)())
-
-org_eclipse_swt_internal_accessibility_gtk_AtkObjectFactoryClass=
-AtkObjectFactoryClass_create_accessible=cast=(AtkObject *(*)())
-AtkObjectFactoryClass_invalidate=cast=(void (*)())
-AtkObjectFactoryClass_get_accessible_type=cast=(GType (*)())
-
-org_eclipse_swt_internal_accessibility_gtk_AtkSelectionIface=
-AtkSelectionIface_add_selection=cast=(gboolean (*)())
-AtkSelectionIface_clear_selection=cast=(gboolean (*)())
-AtkSelectionIface_ref_selection=cast=(AtkObject *(*)())
-AtkSelectionIface_get_selection_count=cast=(gint (*)())
-AtkSelectionIface_is_child_selected=cast=(gboolean (*)())
-AtkSelectionIface_remove_selection=cast=(gboolean (*)())
-AtkSelectionIface_select_all_selection=cast=(gboolean (*)())
-AtkSelectionIface_selection_changed=cast=(void (*)())
-
-org_eclipse_swt_internal_accessibility_gtk_AtkTextIface=
-AtkTextIface_get_text=cast=(gchar *(*)())
-AtkTextIface_get_text_after_offset=cast=(gchar *(*)())
-AtkTextIface_get_text_at_offset=cast=(gchar *(*)())
-AtkTextIface_get_character_at_offset=cast=(gunichar (*)())
-AtkTextIface_get_text_before_offset=cast=(gchar *(*)())
-AtkTextIface_get_caret_offset=cast=(gint (*)())
-AtkTextIface_get_run_attributes=cast=(AtkAttributeSet *(*)())
-AtkTextIface_get_default_attributes=cast=(AtkAttributeSet *(*)())
-AtkTextIface_get_character_extents=cast=(void (*)())
-AtkTextIface_get_character_count=cast=(gint (*)())
-AtkTextIface_get_offset_at_point=cast=(gint (*)())
-AtkTextIface_get_n_selections=cast=(gint (*)())
-AtkTextIface_get_selection=cast=(gchar *(*)())
-AtkTextIface_add_selection=cast=(gboolean (*)())
-AtkTextIface_remove_selection=cast=(gboolean (*)())
-AtkTextIface_set_selection=cast=(gboolean (*)())
-AtkTextIface_set_caret_offset=cast=(gboolean (*)())
-AtkTextIface_text_changed=cast=(void (*)())
-AtkTextIface_text_caret_moved=cast=(void (*)())
-AtkTextIface_text_selection_changed=cast=(void (*)())
-
-org_eclipse_swt_internal_accessibility_gtk_GtkAccessible=
-GtkAccessible_widget=cast=(GtkWidget *)
-
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.accessibility.gtk.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.accessibility.gtk.properties
index 61cc5e8..296709e 100644
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.accessibility.gtk.properties
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.accessibility.gtk.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2004 IBM Corporation and others.
+# Copyright (c) 2006, 2009 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
@@ -8,18 +8,18 @@
 # Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-swt_copyright=/*******************************************************************************\n\
- * Copyright (c) 2000, 2005 IBM Corporation and others. All rights reserved.\n\
- * The contents of this file are made available under the terms\n\
- * of the GNU Lesser General Public License (LGPL) Version 2.1 that\n\
- * accompanies this distribution (lgpl-v21.txt).  The LGPL is also\n\
- * available at http://www.gnu.org/licenses/lgpl.html.  If the version\n\
- * of the LGPL at http://www.gnu.org is different to the version of\n\
- * the LGPL accompanying this distribution and there is any conflict\n\
- * between the two license versions, the terms of the LGPL accompanying\n\
- * this distribution shall govern.\n\
- * \n\
- * Contributors:\n\
- *     IBM Corporation - initial API and implementation\n\
+swt_copyright=/*******************************************************************************\n \
+ * Copyright (c) 2000, %END_YEAR IBM Corporation and others. All rights reserved.\n \
+ * The contents of this file are made available under the terms\n \
+ * of the GNU Lesser General Public License (LGPL) Version 2.1 that\n \
+ * accompanies this distribution (lgpl-v21.txt).  The LGPL is also\n \
+ * available at http://www.gnu.org/licenses/lgpl.html.  If the version\n \
+ * of the LGPL at http://www.gnu.org is different to the version of\n \
+ * the LGPL accompanying this distribution and there is any conflict\n \
+ * between the two license versions, the terms of the LGPL accompanying\n \
+ * this distribution shall govern.\n \
+ * \n \
+ * Contributors:\n \
+ *     IBM Corporation - initial API and implementation\n \
  *******************************************************************************/\n
- 
\ No newline at end of file
+ 
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.cairo.Cairo.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.cairo.Cairo.properties
deleted file mode 100644
index b81bf47..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.cairo.Cairo.properties
+++ /dev/null
@@ -1,626 +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
-###############################################################################
-org_eclipse_swt_internal_cairo_Cairo=
-Cairo_cairo_append_path=
-Cairo_cairo_append_path_0=cast=(cairo_t *)
-Cairo_cairo_append_path_1=cast=(cairo_path_t *)
-
-Cairo_cairo_arc=
-Cairo_cairo_arc_0=cast=(cairo_t *)
-Cairo_cairo_arc_1=
-Cairo_cairo_arc_2=
-Cairo_cairo_arc_3=
-Cairo_cairo_arc_4=
-Cairo_cairo_arc_5=
-
-Cairo_cairo_arc_negative=
-Cairo_cairo_arc_negative_0=cast=(cairo_t *)
-Cairo_cairo_arc_negative_1=
-Cairo_cairo_arc_negative_2=
-Cairo_cairo_arc_negative_3=
-Cairo_cairo_arc_negative_4=
-Cairo_cairo_arc_negative_5=
-
-Cairo_cairo_clip=
-Cairo_cairo_clip_0=cast=(cairo_t *)
-
-Cairo_cairo_clip_preserve=
-Cairo_cairo_clip_preserve_0=cast=(cairo_t *)
-
-Cairo_cairo_close_path=
-Cairo_cairo_close_path_0=cast=(cairo_t *)
-
-Cairo_cairo_copy_page=
-Cairo_cairo_copy_page_0=cast=(cairo_t *)
-
-Cairo_cairo_copy_path=
-Cairo_cairo_copy_path_0=cast=(cairo_t *)
-
-Cairo_cairo_copy_path_flat=
-Cairo_cairo_copy_path_flat_0=cast=(cairo_t *)
-
-Cairo_cairo_create=
-Cairo_cairo_create_0=cast=cairo_surface_t *
-
-Cairo_cairo_curve_to=
-Cairo_cairo_curve_to_0=cast=(cairo_t *)
-Cairo_cairo_curve_to_1=
-Cairo_cairo_curve_to_2=
-Cairo_cairo_curve_to_3=
-Cairo_cairo_curve_to_4=
-Cairo_cairo_curve_to_5=
-Cairo_cairo_curve_to_6=
-
-Cairo_cairo_destroy=
-Cairo_cairo_destroy_0=cast=(cairo_t *)
-
-Cairo_cairo_device_to_user=
-Cairo_cairo_device_to_user_0=cast=(cairo_t *)
-Cairo_cairo_device_to_user_1=
-Cairo_cairo_device_to_user_2=
-
-Cairo_cairo_device_to_user_distance=
-Cairo_cairo_device_to_user_distance_0=cast=(cairo_t *)
-Cairo_cairo_device_to_user_distance_1=
-Cairo_cairo_device_to_user_distance_2=
-
-Cairo_cairo_fill=
-Cairo_cairo_fill_0=cast=(cairo_t *)
-
-Cairo_cairo_fill_extents=
-Cairo_cairo_fill_extents_0=cast=(cairo_t *)
-Cairo_cairo_fill_extents_1=
-Cairo_cairo_fill_extents_2=
-Cairo_cairo_fill_extents_3=
-Cairo_cairo_fill_extents_4=
-
-Cairo_cairo_fill_preserve=
-Cairo_cairo_fill_preserve_0=cast=(cairo_t *)
-
-Cairo_cairo_font_extents=
-Cairo_cairo_font_extents_0=cast=(cairo_t *)
-Cairo_cairo_font_extents_1=
-
-Cairo_cairo_font_extents_t_sizeof=
-
-Cairo_cairo_font_options_create=
-
-Cairo_cairo_font_options_destroy=
-Cairo_cairo_font_options_destroy_0=cast=cairo_font_options_t *
-
-Cairo_cairo_font_options_get_antialias=
-Cairo_cairo_font_options_get_antialias_0=cast=cairo_font_options_t *
-
-Cairo_cairo_font_options_set_antialias=
-Cairo_cairo_font_options_set_antialias_0=cast=cairo_font_options_t *
-Cairo_cairo_font_options_set_antialias_1=
-
-Cairo_cairo_get_antialias=
-Cairo_cairo_get_antialias_0=cast=(cairo_t *)
-
-Cairo_cairo_get_current_point=
-Cairo_cairo_get_current_point_0=cast=(cairo_t *)
-Cairo_cairo_get_current_point_1=
-Cairo_cairo_get_current_point_2=
-
-Cairo_cairo_get_fill_rule=
-Cairo_cairo_get_fill_rule_0=cast=(cairo_t *)
-
-Cairo_cairo_get_font_face=
-Cairo_cairo_get_font_face_0=cast=(cairo_t *)
-
-Cairo_cairo_get_font_matrix=
-Cairo_cairo_get_font_matrix_0=cast=(cairo_t *)
-Cairo_cairo_get_font_matrix_1=cast=cairo_matrix_t *
-
-Cairo_cairo_get_font_options=
-Cairo_cairo_get_font_options_0=cast=cairo_t *
-Cairo_cairo_get_font_options_1=cast=cairo_font_options_t *
-
-Cairo_cairo_get_line_cap=
-Cairo_cairo_get_line_cap_0=cast=(cairo_t *)
-
-Cairo_cairo_get_line_join=
-Cairo_cairo_get_line_join_0=cast=(cairo_t *)
-
-Cairo_cairo_get_line_width=
-Cairo_cairo_get_line_width_0=cast=(cairo_t *)
-
-Cairo_cairo_get_matrix=
-Cairo_cairo_get_matrix_0=cast=(cairo_t *)
-Cairo_cairo_get_matrix_1=cast=(cairo_matrix_t *)
-
-Cairo_cairo_get_miter_limit=
-Cairo_cairo_get_miter_limit_0=cast=(cairo_t *)
-
-Cairo_cairo_get_operator=
-Cairo_cairo_get_operator_0=cast=(cairo_t *)
-
-Cairo_cairo_get_source=
-Cairo_cairo_get_source_0=cast=(cairo_t *)
-
-Cairo_cairo_get_target=
-Cairo_cairo_get_target_0=cast=(cairo_t *)
-
-Cairo_cairo_get_tolerance=
-Cairo_cairo_get_tolerance_0=cast=(cairo_t *)
-
-Cairo_cairo_glyph_extents=
-Cairo_cairo_glyph_extents_0=cast=(cairo_t *)
-Cairo_cairo_glyph_extents_1=cast=(cairo_glyph_t *)
-Cairo_cairo_glyph_extents_2=
-Cairo_cairo_glyph_extents_3=cast=cairo_text_extents_t *
-
-Cairo_cairo_glyph_path=
-Cairo_cairo_glyph_path_0=cast=(cairo_t *)
-Cairo_cairo_glyph_path_1=cast=(cairo_glyph_t *)
-Cairo_cairo_glyph_path_2=
-
-Cairo_cairo_identity_matrix=
-Cairo_cairo_identity_matrix_0=cast=(cairo_t *)
-
-Cairo_cairo_image_surface_create=
-Cairo_cairo_image_surface_create_0=
-Cairo_cairo_image_surface_create_1=
-Cairo_cairo_image_surface_create_2=
-
-Cairo_cairo_image_surface_create_for_data=
-Cairo_cairo_image_surface_create_for_data_0=cast=char *
-Cairo_cairo_image_surface_create_for_data_1=
-Cairo_cairo_image_surface_create_for_data_2=
-Cairo_cairo_image_surface_create_for_data_3=
-Cairo_cairo_image_surface_create_for_data_4=
-
-Cairo_cairo_image_surface_get_height=
-Cairo_cairo_image_surface_get_height_0=cast=(cairo_surface_t *)
-
-Cairo_cairo_image_surface_get_width=
-Cairo_cairo_image_surface_get_width_0=cast=(cairo_surface_t *)
-
-Cairo_cairo_in_fill=
-Cairo_cairo_in_fill_0=cast=(cairo_t *)
-Cairo_cairo_in_fill_1=
-Cairo_cairo_in_fill_2=
-
-Cairo_cairo_in_stroke=
-Cairo_cairo_in_stroke_0=cast=(cairo_t *)
-Cairo_cairo_in_stroke_1=
-Cairo_cairo_in_stroke_2=
-
-Cairo_cairo_line_to=
-Cairo_cairo_line_to_0=cast=(cairo_t *)
-Cairo_cairo_line_to_1=
-Cairo_cairo_line_to_2=
-
-Cairo_cairo_mask=
-Cairo_cairo_mask_0=cast=cairo_t *
-Cairo_cairo_mask_1=cast=cairo_pattern_t *
-
-Cairo_cairo_mask_surface=
-Cairo_cairo_mask_surface_0=cast=cairo_t *
-Cairo_cairo_mask_surface_1=cast=cairo_surface_t *
-Cairo_cairo_mask_surface_2=
-Cairo_cairo_mask_surface_3=
-
-Cairo_cairo_matrix_init=
-Cairo_cairo_matrix_init_0=cast=(cairo_matrix_t *)
-Cairo_cairo_matrix_init_1=
-Cairo_cairo_matrix_init_2=
-Cairo_cairo_matrix_init_3=
-Cairo_cairo_matrix_init_4=
-Cairo_cairo_matrix_init_5=
-Cairo_cairo_matrix_init_6=
-
-Cairo_cairo_matrix_init_identity=
-Cairo_cairo_matrix_init_identity_0=cast=(cairo_matrix_t *)
-
-Cairo_cairo_matrix_init_rotate=
-Cairo_cairo_matrix_init_rotate_0=cast=(cairo_matrix_t *)
-Cairo_cairo_matrix_init_rotate_1=
-
-Cairo_cairo_matrix_init_scale=
-Cairo_cairo_matrix_init_scale_0=cast=(cairo_matrix_t *)
-Cairo_cairo_matrix_init_scale_1=
-Cairo_cairo_matrix_init_scale_2=
-
-Cairo_cairo_matrix_init_translate=
-Cairo_cairo_matrix_init_translate_0=cast=(cairo_matrix_t *)
-Cairo_cairo_matrix_init_translate_1=
-Cairo_cairo_matrix_init_translate_2=
-
-Cairo_cairo_matrix_invert=
-Cairo_cairo_matrix_invert_0=cast=(cairo_matrix_t *)
-
-Cairo_cairo_matrix_multiply=
-Cairo_cairo_matrix_multiply_0=cast=(cairo_matrix_t *)
-Cairo_cairo_matrix_multiply_1=cast=(cairo_matrix_t *)
-Cairo_cairo_matrix_multiply_2=cast=(cairo_matrix_t *)
-
-Cairo_cairo_matrix_rotate=
-Cairo_cairo_matrix_rotate_0=cast=(cairo_matrix_t *)
-Cairo_cairo_matrix_rotate_1=
-
-Cairo_cairo_matrix_scale=
-Cairo_cairo_matrix_scale_0=cast=(cairo_matrix_t *)
-Cairo_cairo_matrix_scale_1=
-Cairo_cairo_matrix_scale_2=
-
-Cairo_cairo_matrix_transform_distance=
-Cairo_cairo_matrix_transform_distance_0=cast=(cairo_matrix_t *)
-Cairo_cairo_matrix_transform_distance_1=
-Cairo_cairo_matrix_transform_distance_2=
-
-Cairo_cairo_matrix_transform_point=
-Cairo_cairo_matrix_transform_point_0=cast=(cairo_matrix_t *)
-Cairo_cairo_matrix_transform_point_1=
-Cairo_cairo_matrix_transform_point_2=
-
-Cairo_cairo_matrix_translate=
-Cairo_cairo_matrix_translate_0=cast=(cairo_matrix_t *)
-Cairo_cairo_matrix_translate_1=
-Cairo_cairo_matrix_translate_2=
-
-Cairo_cairo_move_to=
-Cairo_cairo_move_to_0=cast=(cairo_t *)
-Cairo_cairo_move_to_1=
-Cairo_cairo_move_to_2=
-
-Cairo_cairo_new_path=
-Cairo_cairo_new_path_0=cast=(cairo_t *)
-
-Cairo_cairo_paint=
-Cairo_cairo_paint_0=cast=(cairo_t *)
-
-Cairo_cairo_paint_with_alpha=
-Cairo_cairo_paint_with_alpha_0=cast=(cairo_t *)
-Cairo_cairo_paint_with_alpha_1=
-
-Cairo_cairo_path_data_t_sizeof=
-
-Cairo_cairo_path_destroy=
-Cairo_cairo_path_destroy_0=cast=cairo_path_t *
-
-Cairo_cairo_path_t_sizeof=
-
-Cairo_cairo_pattern_add_color_stop_rgb=
-Cairo_cairo_pattern_add_color_stop_rgb_0=cast=(cairo_pattern_t *)
-Cairo_cairo_pattern_add_color_stop_rgb_1=
-Cairo_cairo_pattern_add_color_stop_rgb_2=
-Cairo_cairo_pattern_add_color_stop_rgb_3=
-Cairo_cairo_pattern_add_color_stop_rgb_4=
-
-Cairo_cairo_pattern_add_color_stop_rgba=
-Cairo_cairo_pattern_add_color_stop_rgba_0=cast=(cairo_pattern_t *)
-Cairo_cairo_pattern_add_color_stop_rgba_1=
-Cairo_cairo_pattern_add_color_stop_rgba_2=
-Cairo_cairo_pattern_add_color_stop_rgba_3=
-Cairo_cairo_pattern_add_color_stop_rgba_4=
-Cairo_cairo_pattern_add_color_stop_rgba_5=
-
-Cairo_cairo_pattern_create_for_surface=
-Cairo_cairo_pattern_create_for_surface_0=cast=(cairo_surface_t *)
-
-Cairo_cairo_pattern_create_linear=
-Cairo_cairo_pattern_create_linear_0=
-Cairo_cairo_pattern_create_linear_1=
-Cairo_cairo_pattern_create_linear_2=
-Cairo_cairo_pattern_create_linear_3=
-
-Cairo_cairo_pattern_create_radial=
-Cairo_cairo_pattern_create_radial_0=
-Cairo_cairo_pattern_create_radial_1=
-Cairo_cairo_pattern_create_radial_2=
-Cairo_cairo_pattern_create_radial_3=
-Cairo_cairo_pattern_create_radial_4=
-Cairo_cairo_pattern_create_radial_5=
-
-Cairo_cairo_pattern_destroy=
-Cairo_cairo_pattern_destroy_0=cast=(cairo_pattern_t *)
-
-Cairo_cairo_pattern_get_extend=
-Cairo_cairo_pattern_get_extend_0=cast=(cairo_pattern_t *)
-
-Cairo_cairo_pattern_get_filter=
-Cairo_cairo_pattern_get_filter_0=cast=(cairo_pattern_t *)
-
-Cairo_cairo_pattern_get_matrix=
-Cairo_cairo_pattern_get_matrix_0=cast=(cairo_pattern_t *)
-Cairo_cairo_pattern_get_matrix_1=cast=(cairo_matrix_t *)
-
-Cairo_cairo_pattern_reference=
-Cairo_cairo_pattern_reference_0=cast=(cairo_pattern_t *)
-
-Cairo_cairo_pattern_set_extend=
-Cairo_cairo_pattern_set_extend_0=cast=(cairo_pattern_t *)
-Cairo_cairo_pattern_set_extend_1=
-
-Cairo_cairo_pattern_set_filter=
-Cairo_cairo_pattern_set_filter_0=cast=(cairo_pattern_t *)
-Cairo_cairo_pattern_set_filter_1=
-
-Cairo_cairo_pattern_set_matrix=
-Cairo_cairo_pattern_set_matrix_0=cast=(cairo_pattern_t *)
-Cairo_cairo_pattern_set_matrix_1=cast=(cairo_matrix_t *)
-
-Cairo_cairo_rectangle=
-Cairo_cairo_rectangle_0=cast=(cairo_t *)
-Cairo_cairo_rectangle_1=
-Cairo_cairo_rectangle_2=
-Cairo_cairo_rectangle_3=
-Cairo_cairo_rectangle_4=
-
-Cairo_cairo_reference=
-Cairo_cairo_reference_0=cast=(cairo_t *)
-
-Cairo_cairo_rel_curve_to=
-Cairo_cairo_rel_curve_to_0=cast=(cairo_t *)
-Cairo_cairo_rel_curve_to_1=
-Cairo_cairo_rel_curve_to_2=
-Cairo_cairo_rel_curve_to_3=
-Cairo_cairo_rel_curve_to_4=
-Cairo_cairo_rel_curve_to_5=
-Cairo_cairo_rel_curve_to_6=
-
-Cairo_cairo_rel_line_to=
-Cairo_cairo_rel_line_to_0=cast=(cairo_t *)
-Cairo_cairo_rel_line_to_1=
-Cairo_cairo_rel_line_to_2=
-
-Cairo_cairo_rel_move_to=
-Cairo_cairo_rel_move_to_0=cast=(cairo_t *)
-Cairo_cairo_rel_move_to_1=
-Cairo_cairo_rel_move_to_2=
-
-Cairo_cairo_reset_clip=
-Cairo_cairo_reset_clip_0=cast=(cairo_t *)
-
-Cairo_cairo_restore=
-Cairo_cairo_restore_0=cast=(cairo_t *)
-
-Cairo_cairo_rotate=
-Cairo_cairo_rotate_0=cast=(cairo_t *)
-Cairo_cairo_rotate_1=
-
-Cairo_cairo_save=
-Cairo_cairo_save_0=cast=(cairo_t *)
-
-Cairo_cairo_scale=
-Cairo_cairo_scale_0=cast=(cairo_t *)
-Cairo_cairo_scale_1=
-Cairo_cairo_scale_2=
-
-Cairo_cairo_select_font_face=
-Cairo_cairo_select_font_face_0=cast=(cairo_t *)
-Cairo_cairo_select_font_face_1=
-Cairo_cairo_select_font_face_2=
-Cairo_cairo_select_font_face_3=
-
-Cairo_cairo_set_antialias=
-Cairo_cairo_set_antialias_0=cast=(cairo_t *)
-Cairo_cairo_set_antialias_1=
-
-Cairo_cairo_set_dash=
-Cairo_cairo_set_dash_0=cast=(cairo_t *)
-Cairo_cairo_set_dash_1=
-Cairo_cairo_set_dash_2=
-Cairo_cairo_set_dash_3=
-
-Cairo_cairo_set_fill_rule=
-Cairo_cairo_set_fill_rule_0=cast=(cairo_t *)
-Cairo_cairo_set_fill_rule_1=
-
-Cairo_cairo_set_font_face=
-Cairo_cairo_set_font_face_0=cast=(cairo_t *)
-Cairo_cairo_set_font_face_1=cast=cairo_font_face_t *
-
-Cairo_cairo_set_font_matrix=
-Cairo_cairo_set_font_matrix_0=cast=(cairo_t *)
-Cairo_cairo_set_font_matrix_1=cast=cairo_matrix_t *
-
-Cairo_cairo_set_font_options=
-Cairo_cairo_set_font_options_0=cast=cairo_t *
-Cairo_cairo_set_font_options_1=cast=cairo_font_options_t *
-
-Cairo_cairo_set_font_size=
-Cairo_cairo_set_font_size_0=cast=(cairo_t *)
-Cairo_cairo_set_font_size_1=
-
-Cairo_cairo_set_line_cap=
-Cairo_cairo_set_line_cap_0=cast=(cairo_t *)
-Cairo_cairo_set_line_cap_1=
-
-Cairo_cairo_set_line_join=
-Cairo_cairo_set_line_join_0=cast=(cairo_t *)
-Cairo_cairo_set_line_join_1=
-
-Cairo_cairo_set_line_width=
-Cairo_cairo_set_line_width_0=cast=(cairo_t *)
-Cairo_cairo_set_line_width_1=
-
-Cairo_cairo_set_matrix=
-Cairo_cairo_set_matrix_0=cast=(cairo_t *)
-Cairo_cairo_set_matrix_1=cast=cairo_matrix_t *
-
-Cairo_cairo_set_miter_limit=
-Cairo_cairo_set_miter_limit_0=cast=(cairo_t *)
-Cairo_cairo_set_miter_limit_1=
-
-Cairo_cairo_set_operator=
-Cairo_cairo_set_operator_0=cast=(cairo_t *)
-Cairo_cairo_set_operator_1=
-
-Cairo_cairo_set_source=
-Cairo_cairo_set_source_0=cast=cairo_t *
-Cairo_cairo_set_source_1=cast=cairo_pattern_t *
-
-Cairo_cairo_set_source_rgb=
-Cairo_cairo_set_source_rgb_0=cast=cairo_t *
-Cairo_cairo_set_source_rgb_1=
-Cairo_cairo_set_source_rgb_2=
-Cairo_cairo_set_source_rgb_3=
-
-Cairo_cairo_set_source_rgba=
-Cairo_cairo_set_source_rgba_0=cast=cairo_t *
-Cairo_cairo_set_source_rgba_1=
-Cairo_cairo_set_source_rgba_2=
-Cairo_cairo_set_source_rgba_3=
-Cairo_cairo_set_source_rgba_4=
-
-Cairo_cairo_set_source_surface=
-Cairo_cairo_set_source_surface_0=cast=cairo_t *
-Cairo_cairo_set_source_surface_1=cast=cairo_surface_t *
-Cairo_cairo_set_source_surface_2=
-Cairo_cairo_set_source_surface_3=
-
-Cairo_cairo_set_tolerance=
-Cairo_cairo_set_tolerance_0=cast=(cairo_t *)
-Cairo_cairo_set_tolerance_1=
-
-Cairo_cairo_show_glyphs=
-Cairo_cairo_show_glyphs_0=cast=(cairo_t *)
-Cairo_cairo_show_glyphs_1=cast=(cairo_glyph_t *)
-Cairo_cairo_show_glyphs_2=
-
-Cairo_cairo_show_page=
-Cairo_cairo_show_page_0=cast=(cairo_t *)
-
-Cairo_cairo_show_text=
-Cairo_cairo_show_text_0=cast=(cairo_t *)
-Cairo_cairo_show_text_1=
-
-Cairo_cairo_status=
-Cairo_cairo_status_0=cast=(cairo_t *)
-
-Cairo_cairo_status_to_string=
-Cairo_cairo_status_to_string_0=
-
-Cairo_cairo_stroke=
-Cairo_cairo_stroke_0=cast=(cairo_t *)
-
-Cairo_cairo_stroke_extents=
-Cairo_cairo_stroke_extents_0=cast=(cairo_t *)
-Cairo_cairo_stroke_extents_1=
-Cairo_cairo_stroke_extents_2=
-Cairo_cairo_stroke_extents_3=
-Cairo_cairo_stroke_extents_4=
-
-Cairo_cairo_stroke_preserve=
-Cairo_cairo_stroke_preserve_0=cast=(cairo_t *)
-
-Cairo_cairo_surface_create_similar=
-Cairo_cairo_surface_create_similar_0=cast=(cairo_surface_t *)
-Cairo_cairo_surface_create_similar_1=
-Cairo_cairo_surface_create_similar_2=
-Cairo_cairo_surface_create_similar_3=
-
-Cairo_cairo_surface_destroy=
-Cairo_cairo_surface_destroy_0=cast=(cairo_surface_t *)
-
-Cairo_cairo_surface_finish=
-Cairo_cairo_surface_finish_0=cast=(cairo_surface_t *)
-
-Cairo_cairo_surface_get_user_data=
-Cairo_cairo_surface_get_user_data_0=cast=(cairo_surface_t *)
-Cairo_cairo_surface_get_user_data_1=cast=cairo_user_data_key_t *
-
-Cairo_cairo_surface_reference=
-Cairo_cairo_surface_reference_0=cast=(cairo_surface_t *)
-
-Cairo_cairo_surface_set_device_offset=
-Cairo_cairo_surface_set_device_offset_0=cast=(cairo_surface_t *)
-Cairo_cairo_surface_set_device_offset_1=
-Cairo_cairo_surface_set_device_offset_2=
-
-Cairo_cairo_surface_set_user_data=
-Cairo_cairo_surface_set_user_data_0=cast=(cairo_surface_t *)
-Cairo_cairo_surface_set_user_data_1=cast=cairo_user_data_key_t *
-Cairo_cairo_surface_set_user_data_2=cast=void *
-Cairo_cairo_surface_set_user_data_3=cast=cairo_destroy_func_t
-
-Cairo_cairo_text_extents=
-Cairo_cairo_text_extents_0=cast=(cairo_t *)
-Cairo_cairo_text_extents_1=
-Cairo_cairo_text_extents_2=cast=cairo_text_extents_t *
-
-Cairo_cairo_text_path=
-Cairo_cairo_text_path_0=cast=(cairo_t *)
-Cairo_cairo_text_path_1=
-
-Cairo_cairo_transform=
-Cairo_cairo_transform_0=cast=(cairo_t *)
-Cairo_cairo_transform_1=cast=(cairo_matrix_t *)
-
-Cairo_cairo_translate=
-Cairo_cairo_translate_0=cast=(cairo_t *)
-Cairo_cairo_translate_1=
-Cairo_cairo_translate_2=
-
-Cairo_cairo_user_to_device=
-Cairo_cairo_user_to_device_0=cast=(cairo_t *)
-Cairo_cairo_user_to_device_1=
-Cairo_cairo_user_to_device_2=
-
-Cairo_cairo_user_to_device_distance=
-Cairo_cairo_user_to_device_distance_0=cast=(cairo_t *)
-Cairo_cairo_user_to_device_distance_1=
-Cairo_cairo_user_to_device_distance_2=
-
-Cairo_cairo_xlib_surface_create=
-Cairo_cairo_xlib_surface_create_0=cast=(Display *)
-Cairo_cairo_xlib_surface_create_1=cast=(Drawable)
-Cairo_cairo_xlib_surface_create_2=cast=(Visual *)
-Cairo_cairo_xlib_surface_create_3=
-Cairo_cairo_xlib_surface_create_4=
-
-Cairo_cairo_xlib_surface_create_for_bitmap=
-Cairo_cairo_xlib_surface_create_for_bitmap_0=cast=(Display *)
-Cairo_cairo_xlib_surface_create_for_bitmap_1=cast=Pixmap
-Cairo_cairo_xlib_surface_create_for_bitmap_2=cast=(Screen *
-Cairo_cairo_xlib_surface_create_for_bitmap_3=
-Cairo_cairo_xlib_surface_create_for_bitmap_4=
-
-Cairo_cairo_xlib_surface_set_size=
-Cairo_cairo_xlib_surface_set_size_0=cast=cairo_surface_t *
-Cairo_cairo_xlib_surface_set_size_1=
-Cairo_cairo_xlib_surface_set_size_2=
-
-Cairo_memmove__Lorg_eclipse_swt_internal_cairo_cairo_1path_1data_1t_2II=
-Cairo_memmove__Lorg_eclipse_swt_internal_cairo_cairo_1path_1data_1t_2II_0=cast=void *
-Cairo_memmove__Lorg_eclipse_swt_internal_cairo_cairo_1path_1data_1t_2II_1=cast=const void *
-Cairo_memmove__Lorg_eclipse_swt_internal_cairo_cairo_1path_1data_1t_2II_2=cast=size_t
-
-Cairo_memmove__Lorg_eclipse_swt_internal_cairo_cairo_1path_1t_2II=
-Cairo_memmove__Lorg_eclipse_swt_internal_cairo_cairo_1path_1t_2II_0=cast=(void *)
-Cairo_memmove__Lorg_eclipse_swt_internal_cairo_cairo_1path_1t_2II_1=cast=(const void *)
-Cairo_memmove__Lorg_eclipse_swt_internal_cairo_cairo_1path_1t_2II_2=cast=(size_t)
-
-Cairo_memmove___3DII=
-Cairo_memmove___3DII_0=cast=(void *)
-Cairo_memmove___3DII_1=cast=(const void *)
-Cairo_memmove___3DII_2=cast=(size_t)
-
-
-org_eclipse_swt_internal_cairo_cairo_1font_1extents_1t=
-cairo_font_extents_t_ascent=
-cairo_font_extents_t_descent=
-cairo_font_extents_t_height=
-cairo_font_extents_t_max_x_advance=
-cairo_font_extents_t_max_y_advance=
-
-org_eclipse_swt_internal_cairo_cairo_1path_1data_1t=
-cairo_path_data_t_type=accessor=header.type
-cairo_path_data_t_length=accessor=header.length
-
-org_eclipse_swt_internal_cairo_cairo_1path_1t=
-cairo_path_t_status=
-cairo_path_t_data=cast=cairo_path_data_t *
-cairo_path_t_num_data=
-
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.cairo.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.cairo.properties
index 2bbe7ad..ab58993 100644
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.cairo.properties
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.cairo.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2004, 2005 IBM Corporation and others.
+# Copyright (c) 2004, 2009 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
@@ -8,24 +8,24 @@
 # Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-swt_copyright=/* ***** BEGIN LICENSE BLOCK *****\n\
- * Version: MPL 1.1\n\
- *\n\
- * The contents of this file are subject to the Mozilla Public License Version\n\
- * 1.1 (the "License"); you may not use this file except in compliance with\n\
- * the License. You may obtain a copy of the License at\n\
- * http://www.mozilla.org/MPL/\n\
- *\n\
- * Software distributed under the License is distributed on an "AS IS" basis,\n\
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License\n\
- * for the specific language governing rights and limitations under the\n\
- * License.\n\
- *\n\
- * Contributor(s):\n\
- *\n\
- * IBM\n\
- * -  Binding to permit interfacing between Cairo and SWT\n\
- * -  Copyright (C) 2005 IBM Corp.  All Rights Reserved.\n\
- *\n\
+swt_copyright=/* ***** BEGIN LICENSE BLOCK *****\n \
+ * Version: MPL 1.1\n \
+ *\n \
+ * The contents of this file are subject to the Mozilla Public License Version\n \
+ * 1.1 (the "License"); you may not use this file except in compliance with\n \
+ * the License. You may obtain a copy of the License at\n \
+ * http://www.mozilla.org/MPL/\n \
+ *\n \
+ * Software distributed under the License is distributed on an "AS IS" basis,\n \
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License\n \
+ * for the specific language governing rights and limitations under the\n \
+ * License.\n \
+ *\n \
+ * Contributor(s):\n \
+ *\n \
+ * IBM\n \
+ * -  Binding to permit interfacing between Cairo and SWT\n \
+ * -  Copyright (C) 2005, %END_YEAR IBM Corp.  All Rights Reserved.\n \
+ *\n \
  * ***** END LICENSE BLOCK ***** */\n
- 
\ No newline at end of file
+ 
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.carbon.OS.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.carbon.OS.properties
deleted file mode 100644
index 844b3a8..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.carbon.OS.properties
+++ /dev/null
@@ -1,4798 +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
-###############################################################################
-org_eclipse_swt_internal_carbon_AEDesc=
-AEDesc_descriptorType=cast=(DescType)
-AEDesc_dataHandle=cast=(AEDataStorage)
-
-org_eclipse_swt_internal_carbon_ATSLayoutRecord=
-ATSLayoutRecord_glyphID=
-ATSLayoutRecord_flags=
-ATSLayoutRecord_originalOffset=
-ATSLayoutRecord_realPos=
-
-org_eclipse_swt_internal_carbon_ATSTrapezoid=
-ATSTrapezoid_upperLeft_x=accessor=upperLeft.x
-ATSTrapezoid_upperLeft_y=accessor=upperLeft.y
-ATSTrapezoid_upperRight_x=accessor=upperRight.x
-ATSTrapezoid_upperRight_y=accessor=upperRight.y
-ATSTrapezoid_lowerRight_x=accessor=lowerRight.x
-ATSTrapezoid_lowerRight_y=accessor=lowerRight.y
-ATSTrapezoid_lowerLeft_x=accessor=lowerLeft.x
-ATSTrapezoid_lowerLeft_y=accessor=lowerLeft.y
-
-org_eclipse_swt_internal_carbon_ATSUCaret=
-ATSUCaret_fX=
-ATSUCaret_fY=
-ATSUCaret_fDeltaX=
-ATSUCaret_fDeltaY=
-
-org_eclipse_swt_internal_carbon_ATSUTab=
-ATSUTab_tabPosition=
-ATSUTab_tabType=
-
-org_eclipse_swt_internal_carbon_ATSUUnhighlightData=
-ATSUUnhighlightData_dataType=
-ATSUUnhighlightData_red=accessor=unhighlightData.backgroundColor.red
-ATSUUnhighlightData_green=accessor=unhighlightData.backgroundColor.green
-ATSUUnhighlightData_blue=accessor=unhighlightData.backgroundColor.blue
-ATSUUnhighlightData_alpha=accessor=unhighlightData.backgroundColor.alpha
-
-org_eclipse_swt_internal_carbon_AlertStdCFStringAlertParamRec=
-AlertStdCFStringAlertParamRec_version=
-AlertStdCFStringAlertParamRec_movable=
-AlertStdCFStringAlertParamRec_helpButton=
-AlertStdCFStringAlertParamRec_defaultText=cast=(CFStringRef)
-AlertStdCFStringAlertParamRec_cancelText=cast=(CFStringRef)
-AlertStdCFStringAlertParamRec_otherText=cast=(CFStringRef)
-AlertStdCFStringAlertParamRec_defaultButton=
-AlertStdCFStringAlertParamRec_cancelButton=
-AlertStdCFStringAlertParamRec_position=
-AlertStdCFStringAlertParamRec_flags=
-
-org_eclipse_swt_internal_carbon_BitMap=
-BitMap_baseAddr=cast=(void *)
-BitMap_rowBytes=
-BitMap_top=accessor=bounds.top
-BitMap_left=accessor=bounds.left
-BitMap_bottom=accessor=bounds.bottom
-BitMap_right=accessor=bounds.right
-
-org_eclipse_swt_internal_carbon_CFRange=
-CFRange_location=cast=(CFIndex)
-CFRange_length=cast=(CFIndex)
-
-org_eclipse_swt_internal_carbon_CGFunctionCallbacks=
-CGFunctionCallbacks_version=
-CGFunctionCallbacks_evaluate=cast=CGFunctionEvaluateCallback
-CGFunctionCallbacks_releaseInfo=cast=CGFunctionReleaseInfoCallback
-
-org_eclipse_swt_internal_carbon_CGPathElement=
-CGPathElement_type=cast=CGPathElementType
-CGPathElement_points=cast=CGPoint *
-
-org_eclipse_swt_internal_carbon_CGPatternCallbacks=
-CGPatternCallbacks_version=
-CGPatternCallbacks_drawPattern=cast=CGPatternDrawPatternCallback
-CGPatternCallbacks_releaseInfo=cast=CGPatternReleaseInfoCallback
-
-org_eclipse_swt_internal_carbon_CGPoint=
-CGPoint_x=cast=(float)
-CGPoint_y=cast=(float)
-
-org_eclipse_swt_internal_carbon_CGRect=
-CGRect_x=accessor=origin.x,cast=(float)
-CGRect_y=accessor=origin.y,cast=(float)
-CGRect_width=accessor=size.width,cast=(float)
-CGRect_height=accessor=size.height,cast=(float)
-
-org_eclipse_swt_internal_carbon_ColorPickerInfo=
-ColorPickerInfo_profile=accessor=theColor.profile,cast=(CMProfileHandle)
-ColorPickerInfo_red=accessor=theColor.color.rgb.red,cast=(UInt16)
-ColorPickerInfo_green=accessor=theColor.color.rgb.green,cast=(UInt16)
-ColorPickerInfo_blue=accessor=theColor.color.rgb.blue,cast=(UInt16)
-ColorPickerInfo_dstProfile=cast=(CMProfileHandle)
-ColorPickerInfo_flags=cast=(UInt32)
-ColorPickerInfo_placeWhere=cast=(DialogPlacementSpec)
-ColorPickerInfo_h=accessor=dialogOrigin.h,cast=(short)
-ColorPickerInfo_v=accessor=dialogOrigin.v,cast=(short)
-ColorPickerInfo_pickerType=cast=(OSType)
-ColorPickerInfo_eventProc=cast=(UserEventUPP)
-ColorPickerInfo_colorProc=cast=(ColorChangedUPP)
-ColorPickerInfo_colorProcData=cast=(UInt32)
-ColorPickerInfo_prompt=cast=(Str255)
-ColorPickerInfo_editMenuID=accessor=mInfo.editMenuID,cast=(SInt16)
-ColorPickerInfo_cutItem=accessor=mInfo.cutItem,cast=(SInt16)
-ColorPickerInfo_copyItem=accessor=mInfo.copyItem,cast=(SInt16)
-ColorPickerInfo_pasteItem=accessor=mInfo.pasteItem,cast=(SInt16)
-ColorPickerInfo_clearItem=accessor=mInfo.clearItem,cast=(SInt16)
-ColorPickerInfo_undoItem=accessor=mInfo.undoItem,cast=(SInt16)
-ColorPickerInfo_newColorChosen=cast=(Boolean)
-
-org_eclipse_swt_internal_carbon_ControlButtonContentInfo=
-ControlButtonContentInfo_contentType=cast=(ControlContentType)
-ControlButtonContentInfo_iconRef=accessor=u.iconRef,cast=(void *)
-
-org_eclipse_swt_internal_carbon_ControlEditTextSelectionRec=
-ControlEditTextSelectionRec_selStart=
-ControlEditTextSelectionRec_selEnd=
-
-org_eclipse_swt_internal_carbon_ControlFontStyleRec=
-ControlFontStyleRec_flags=
-ControlFontStyleRec_font=
-ControlFontStyleRec_size=
-ControlFontStyleRec_style=
-ControlFontStyleRec_mode=
-ControlFontStyleRec_just=
-ControlFontStyleRec_foreColor_red=accessor=foreColor.red
-ControlFontStyleRec_foreColor_green=accessor=foreColor.green
-ControlFontStyleRec_foreColor_blue=accessor=foreColor.blue
-ControlFontStyleRec_backColor_red=accessor=backColor.red
-ControlFontStyleRec_backColor_green=accessor=backColor.green
-ControlFontStyleRec_backColor_blue=accessor=backColor.blue
-
-org_eclipse_swt_internal_carbon_ControlKind=
-ControlKind_signature=
-ControlKind_kind=
-
-org_eclipse_swt_internal_carbon_ControlTabEntry=
-ControlTabEntry_icon=cast=(ControlButtonContentInfo *)
-ControlTabEntry_name=cast=(CFStringRef)
-ControlTabEntry_enabled=cast=(Boolean)
-
-org_eclipse_swt_internal_carbon_ControlTabInfoRecV1=
-ControlTabInfoRecV1_version=cast=(SInt16)
-ControlTabInfoRecV1_iconSuiteID=cast=(SInt16)
-ControlTabInfoRecV1_name=cast=(CFStringRef)
-
-org_eclipse_swt_internal_carbon_Cursor=
-Cursor_data=
-Cursor_mask=
-Cursor_hotSpot_v=accessor=hotSpot.v
-Cursor_hotSpot_h=accessor=hotSpot.h
-
-org_eclipse_swt_internal_carbon_DataBrowserCallbacks=
-DataBrowserCallbacks_version=cast=(UInt32)
-DataBrowserCallbacks_v1_itemDataCallback=accessor=u.v1.itemDataCallback,cast=(DataBrowserItemDataUPP)
-DataBrowserCallbacks_v1_itemCompareCallback=accessor=u.v1.itemCompareCallback,cast=(DataBrowserItemCompareUPP)
-DataBrowserCallbacks_v1_itemNotificationCallback=accessor=u.v1.itemNotificationCallback,cast=(DataBrowserItemNotificationUPP)
-DataBrowserCallbacks_v1_addDragItemCallback=accessor=u.v1.addDragItemCallback,cast=(DataBrowserAddDragItemUPP)
-DataBrowserCallbacks_v1_acceptDragCallback=accessor=u.v1.acceptDragCallback,cast=(DataBrowserAcceptDragUPP)
-DataBrowserCallbacks_v1_receiveDragCallback=accessor=u.v1.receiveDragCallback,cast=(DataBrowserReceiveDragUPP)
-DataBrowserCallbacks_v1_postProcessDragCallback=accessor=u.v1.postProcessDragCallback,cast=(DataBrowserPostProcessDragUPP)
-DataBrowserCallbacks_v1_itemHelpContentCallback=accessor=u.v1.itemHelpContentCallback,cast=(DataBrowserItemHelpContentUPP)
-DataBrowserCallbacks_v1_getContextualMenuCallback=accessor=u.v1.getContextualMenuCallback,cast=(DataBrowserGetContextualMenuUPP)
-DataBrowserCallbacks_v1_selectContextualMenuCallback=accessor=u.v1.selectContextualMenuCallback,cast=(DataBrowserSelectContextualMenuUPP)
-
-org_eclipse_swt_internal_carbon_DataBrowserCustomCallbacks=
-DataBrowserCustomCallbacks_version=
-DataBrowserCustomCallbacks_v1_drawItemCallback=accessor=u.v1.drawItemCallback,cast=(DataBrowserDrawItemUPP)
-DataBrowserCustomCallbacks_v1_editTextCallback=accessor=u.v1.editTextCallback,cast=(DataBrowserEditItemUPP)
-DataBrowserCustomCallbacks_v1_hitTestCallback=accessor=u.v1.hitTestCallback,cast=(DataBrowserHitTestUPP)
-DataBrowserCustomCallbacks_v1_trackingCallback=accessor=u.v1.trackingCallback,cast=(DataBrowserTrackingUPP)
-DataBrowserCustomCallbacks_v1_dragRegionCallback=accessor=u.v1.dragRegionCallback,cast=(DataBrowserItemDragRgnUPP)
-DataBrowserCustomCallbacks_v1_acceptDragCallback=accessor=u.v1.acceptDragCallback,cast=(DataBrowserItemAcceptDragUPP)
-DataBrowserCustomCallbacks_v1_receiveDragCallback=accessor=u.v1.receiveDragCallback,cast=(DataBrowserItemReceiveDragUPP)
-
-org_eclipse_swt_internal_carbon_DataBrowserListViewColumnDesc=
-DataBrowserListViewColumnDesc_propertyDesc_propertyID=accessor=propertyDesc.propertyID,cast=(DataBrowserPropertyID)
-DataBrowserListViewColumnDesc_propertyDesc_propertyType=accessor=propertyDesc.propertyType,cast=(OSType)
-DataBrowserListViewColumnDesc_propertyDesc_propertyFlags=accessor=propertyDesc.propertyFlags,cast=(DataBrowserPropertyFlags)
-DataBrowserListViewColumnDesc_headerBtnDesc_version=accessor=headerBtnDesc.version,cast=(UInt32)
-DataBrowserListViewColumnDesc_headerBtnDesc_minimumWidth=accessor=headerBtnDesc.minimumWidth,cast=(UInt16)
-DataBrowserListViewColumnDesc_headerBtnDesc_maximumWidth=accessor=headerBtnDesc.maximumWidth,cast=(UInt16)
-DataBrowserListViewColumnDesc_headerBtnDesc_titleOffset=accessor=headerBtnDesc.titleOffset,cast=(SInt16)
-DataBrowserListViewColumnDesc_headerBtnDesc_titleString=accessor=headerBtnDesc.titleString,cast=(CFStringRef)
-DataBrowserListViewColumnDesc_headerBtnDesc_initialOrder=accessor=headerBtnDesc.initialOrder,cast=(DataBrowserSortOrder)
-DataBrowserListViewColumnDesc_headerBtnDesc_btnFontStyle_flags=accessor=headerBtnDesc.btnFontStyle.flags,cast=(SInt16)
-DataBrowserListViewColumnDesc_headerBtnDesc_btnFontStyle_font=accessor=headerBtnDesc.btnFontStyle.font,cast=(SInt16)
-DataBrowserListViewColumnDesc_headerBtnDesc_btnFontStyle_size=accessor=headerBtnDesc.btnFontStyle.size,cast=(SInt16)
-DataBrowserListViewColumnDesc_headerBtnDesc_btnFontStyle_style=accessor=headerBtnDesc.btnFontStyle.style,cast=(SInt16)
-DataBrowserListViewColumnDesc_headerBtnDesc_btnFontStyle_mode=accessor=headerBtnDesc.btnFontStyle.mode,cast=(SInt16)
-DataBrowserListViewColumnDesc_headerBtnDesc_btnFontStyle_just=accessor=headerBtnDesc.btnFontStyle.just,cast=(SInt16)
-DataBrowserListViewColumnDesc_headerBtnDesc_btnFontStyle_foreColor_red=accessor=headerBtnDesc.btnFontStyle.foreColor.red,cast=(unsigned short)
-DataBrowserListViewColumnDesc_headerBtnDesc_btnFontStyle_foreColor_green=accessor=headerBtnDesc.btnFontStyle.foreColor.green,cast=(unsigned short)
-DataBrowserListViewColumnDesc_headerBtnDesc_btnFontStyle_foreColor_blue=accessor=headerBtnDesc.btnFontStyle.foreColor.blue,cast=(unsigned short)
-DataBrowserListViewColumnDesc_headerBtnDesc_btnFontStyle_backColor_red=accessor=headerBtnDesc.btnFontStyle.backColor.red,cast=(unsigned short)
-DataBrowserListViewColumnDesc_headerBtnDesc_btnFontStyle_backColor_green=accessor=headerBtnDesc.btnFontStyle.backColor.green,cast=(unsigned short)
-DataBrowserListViewColumnDesc_headerBtnDesc_btnFontStyle_backColor_blue=accessor=headerBtnDesc.btnFontStyle.backColor.blue,cast=(unsigned short)
-DataBrowserListViewColumnDesc_headerBtnDesc_btnContentInfo_contentType=accessor=headerBtnDesc.btnContentInfo.contentType,cast=(ControlContentType)
-DataBrowserListViewColumnDesc_headerBtnDesc_btnContentInfo_iconRef=accessor=headerBtnDesc.btnContentInfo.u.iconRef,cast=(IconRef)
-
-org_eclipse_swt_internal_carbon_DataBrowserListViewHeaderDesc=
-DataBrowserListViewHeaderDesc_version=
-DataBrowserListViewHeaderDesc_minimumWidth=
-DataBrowserListViewHeaderDesc_maximumWidth=
-DataBrowserListViewHeaderDesc_titleOffset=
-DataBrowserListViewHeaderDesc_titleString=cast=(CFStringRef)
-DataBrowserListViewHeaderDesc_initialOrder=
-DataBrowserListViewHeaderDesc_btnFontStyle_flags=accessor=btnFontStyle.flags
-DataBrowserListViewHeaderDesc_btnFontStyle_font=accessor=btnFontStyle.font
-DataBrowserListViewHeaderDesc_btnFontStyle_size=accessor=btnFontStyle.size
-DataBrowserListViewHeaderDesc_btnFontStyle_style=accessor=btnFontStyle.style
-DataBrowserListViewHeaderDesc_btnFontStyle_mode=accessor=btnFontStyle.mode
-DataBrowserListViewHeaderDesc_btnFontStyle_just=accessor=btnFontStyle.just
-DataBrowserListViewHeaderDesc_btnFontStyle_foreColor_red=accessor=btnFontStyle.foreColor.red
-DataBrowserListViewHeaderDesc_btnFontStyle_foreColor_green=accessor=btnFontStyle.foreColor.green
-DataBrowserListViewHeaderDesc_btnFontStyle_foreColor_blue=accessor=btnFontStyle.foreColor.blue
-DataBrowserListViewHeaderDesc_btnFontStyle_backColor_red=accessor=btnFontStyle.backColor.red
-DataBrowserListViewHeaderDesc_btnFontStyle_backColor_green=accessor=btnFontStyle.backColor.green
-DataBrowserListViewHeaderDesc_btnFontStyle_backColor_blue=accessor=btnFontStyle.backColor.blue
-DataBrowserListViewHeaderDesc_btnContentInfo_contentType=accessor=btnContentInfo.contentType
-DataBrowserListViewHeaderDesc_btnContentInfo_iconRef=accessor=btnContentInfo.u.iconRef,cast=(IconRef)
-
-org_eclipse_swt_internal_carbon_EventRecord=
-EventRecord_what=cast=(EventKind)
-EventRecord_message=
-EventRecord_when=
-EventRecord_where_v=accessor=where.v
-EventRecord_where_h=accessor=where.h
-EventRecord_modifiers=cast=(EventModifiers)
-
-org_eclipse_swt_internal_carbon_FontInfo=
-FontInfo_ascent=
-FontInfo_descent=
-FontInfo_widMax=
-FontInfo_leading=
-
-org_eclipse_swt_internal_carbon_FontSelectionQDStyle=
-FontSelectionQDStyle_version=
-FontSelectionQDStyle_instance_fontFamily=accessor=instance.fontFamily
-FontSelectionQDStyle_instance_fontStyle=accessor=instance.fontStyle
-FontSelectionQDStyle_size=
-FontSelectionQDStyle_hasColor=
-FontSelectionQDStyle_reserved=
-FontSelectionQDStyle_color_red=accessor=color.red
-FontSelectionQDStyle_color_green=accessor=color.green
-FontSelectionQDStyle_color_blue=accessor=color.blue
-
-org_eclipse_swt_internal_carbon_GDevice=
-GDevice_gdRefNum=
-GDevice_gdID=
-GDevice_gdType=
-GDevice_gdITable=cast=(ITabHandle)
-GDevice_gdResPref=
-GDevice_gdSearchProc=cast=(SProcHndl)
-GDevice_gdCompProc=cast=(CProcHndl)
-GDevice_gdFlags=
-GDevice_gdPMap=cast=(PixMapHandle)
-GDevice_gdRefCon=
-GDevice_gdNextGD=cast=(GDHandle)
-GDevice_left=accessor=gdRect.left
-GDevice_top=accessor=gdRect.top
-GDevice_right=accessor=gdRect.right
-GDevice_bottom=accessor=gdRect.bottom
-GDevice_gdMode=
-GDevice_gdCCBytes=
-GDevice_gdCCDepth=
-GDevice_gdCCXData=cast=(Handle)
-GDevice_gdCCXMask=cast=(Handle)
-GDevice_gdExt=cast=(Handle)
-
-org_eclipse_swt_internal_carbon_HICommand=
-HICommand_attributes=
-HICommand_commandID=
-HICommand_menu_menuRef=accessor=menu.menuRef,cast=(MenuRef)
-HICommand_menu_menuItemIndex=accessor=menu.menuItemIndex,cast=(MenuItemIndex)
-
-org_eclipse_swt_internal_carbon_HIScrollBarTrackInfo=
-HIScrollBarTrackInfo_version=
-HIScrollBarTrackInfo_enableState=
-HIScrollBarTrackInfo_pressState=
-HIScrollBarTrackInfo_viewsize=
-
-org_eclipse_swt_internal_carbon_HIThemeAnimationFrameInfo=
-HIThemeAnimationFrameInfo_index=
-
-org_eclipse_swt_internal_carbon_HIThemeAnimationTimeInfo=
-HIThemeAnimationTimeInfo_start=
-HIThemeAnimationTimeInfo_current=
-
-org_eclipse_swt_internal_carbon_HIThemeBackgroundDrawInfo=
-HIThemeBackgroundDrawInfo_version=
-HIThemeBackgroundDrawInfo_state=
-HIThemeBackgroundDrawInfo_kind=
-
-org_eclipse_swt_internal_carbon_HIThemeButtonDrawInfo=
-HIThemeButtonDrawInfo_version=
-HIThemeButtonDrawInfo_state=
-HIThemeButtonDrawInfo_kind=
-HIThemeButtonDrawInfo_value=
-HIThemeButtonDrawInfo_adornment=
-HIThemeButtonDrawInfo_time=accessor=animation.time
-HIThemeButtonDrawInfo_frame=accessor=animation.frame
-
-org_eclipse_swt_internal_carbon_HIThemeFrameDrawInfo=
-HIThemeFrameDrawInfo_version=
-HIThemeFrameDrawInfo_state=
-HIThemeFrameDrawInfo_kind=
-HIThemeFrameDrawInfo_isFocused=
-
-org_eclipse_swt_internal_carbon_HIThemeGroupBoxDrawInfo=
-HIThemeGroupBoxDrawInfo_version=
-HIThemeGroupBoxDrawInfo_state=
-HIThemeGroupBoxDrawInfo_kind=
-
-org_eclipse_swt_internal_carbon_HIThemeGrowBoxDrawInfo=
-HIThemeGrowBoxDrawInfo_version=
-HIThemeGrowBoxDrawInfo_kind=
-HIThemeGrowBoxDrawInfo_state=
-HIThemeGrowBoxDrawInfo_direction=
-HIThemeGrowBoxDrawInfo_size=
-
-org_eclipse_swt_internal_carbon_HIThemePopupArrowDrawInfo=
-HIThemePopupArrowDrawInfo_version=
-HIThemePopupArrowDrawInfo_state=
-HIThemePopupArrowDrawInfo_orientation=
-HIThemePopupArrowDrawInfo_size=
-
-org_eclipse_swt_internal_carbon_HIThemeSeparatorDrawInfo=
-HIThemeSeparatorDrawInfo_version=
-HIThemeSeparatorDrawInfo_state=
-
-org_eclipse_swt_internal_carbon_HIThemeTabDrawInfo=
-HIThemeTabDrawInfo_version=
-HIThemeTabDrawInfo_style=
-HIThemeTabDrawInfo_direction=
-HIThemeTabDrawInfo_size=
-HIThemeTabDrawInfo_adornment=
-HIThemeTabDrawInfo_kind=exclude=#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
-HIThemeTabDrawInfo_position=exclude=#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
-
-org_eclipse_swt_internal_carbon_HIThemeTabPaneDrawInfo=
-HIThemeTabPaneDrawInfo_version=
-HIThemeTabPaneDrawInfo_state=
-HIThemeTabPaneDrawInfo_direction=
-HIThemeTabPaneDrawInfo_size=
-HIThemeTabPaneDrawInfo_kind=exclude=#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
-HIThemeTabPaneDrawInfo_adornment=exclude=#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
-
-org_eclipse_swt_internal_carbon_HIThemeTextInfo=
-HIThemeTextInfo_version=
-HIThemeTextInfo_state=
-HIThemeTextInfo_fontID=
-HIThemeTextInfo_horizontalFlushness=
-HIThemeTextInfo_verticalFlushness=
-HIThemeTextInfo_options=
-HIThemeTextInfo_truncationPosition=
-HIThemeTextInfo_truncationMaxLines=
-HIThemeTextInfo_truncationHappened=
-
-org_eclipse_swt_internal_carbon_HIThemeTrackDrawInfo=
-HIThemeTrackDrawInfo_version=
-HIThemeTrackDrawInfo_kind=cast=ThemeTrackKind
-HIThemeTrackDrawInfo_bounds_x=accessor=bounds.origin.x
-HIThemeTrackDrawInfo_bounds_y=accessor=bounds.origin.y
-HIThemeTrackDrawInfo_bounds_width=accessor=bounds.size.width
-HIThemeTrackDrawInfo_bounds_height=accessor=bounds.size.height
-HIThemeTrackDrawInfo_min=
-HIThemeTrackDrawInfo_max=
-HIThemeTrackDrawInfo_value=
-HIThemeTrackDrawInfo_reserved=
-HIThemeTrackDrawInfo_attributes=cast=ThemeTrackAttributes
-HIThemeTrackDrawInfo_enableState=cast=ThemeTrackEnableState
-HIThemeTrackDrawInfo_filler1=
-HIThemeTrackDrawInfo_scrollbar=accessor=trackInfo.scrollbar
-HIThemeTrackDrawInfo_slider=accessor=trackInfo.slider
-HIThemeTrackDrawInfo_progress=accessor=trackInfo.progress
-
-org_eclipse_swt_internal_carbon_HMHelpContentRec=
-HMHelpContentRec_version=
-HMHelpContentRec_absHotRect_top=accessor=absHotRect.top
-HMHelpContentRec_absHotRect_left=accessor=absHotRect.left
-HMHelpContentRec_absHotRect_bottom=accessor=absHotRect.bottom
-HMHelpContentRec_absHotRect_right=accessor=absHotRect.right
-HMHelpContentRec_tagSide=
-HMHelpContentRec_content0_contentType=accessor=content[0].contentType
-HMHelpContentRec_content0_tagCFString=accessor=content[0].u.tagCFString,cast=(CFStringRef)
-HMHelpContentRec_content1_contentType=accessor=content[1].contentType
-HMHelpContentRec_content1_tagCFString=accessor=content[1].u.tagCFString,cast=(CFStringRef)
-
-org_eclipse_swt_internal_carbon_MenuTrackingData=
-MenuTrackingData_menu=cast=(MenuRef)
-MenuTrackingData_itemSelected=
-MenuTrackingData_itemUnderMouse=
-MenuTrackingData_top=accessor=itemRect.top
-MenuTrackingData_left=accessor=itemRect.left
-MenuTrackingData_bottom=accessor=itemRect.bottom
-MenuTrackingData_right=accessor=itemRect.right
-MenuTrackingData_virtualMenuTop=
-MenuTrackingData_virtualMenuBottom=
-
-org_eclipse_swt_internal_carbon_NavDialogCreationOptions=
-NavDialogCreationOptions_version=
-NavDialogCreationOptions_optionFlags=cast=(NavDialogOptionFlags)
-NavDialogCreationOptions_location_h=accessor=location.h
-NavDialogCreationOptions_location_v=accessor=location.v
-NavDialogCreationOptions_clientName=cast=(CFStringRef)
-NavDialogCreationOptions_windowTitle=cast=(CFStringRef)
-NavDialogCreationOptions_actionButtonLabel=cast=(CFStringRef)
-NavDialogCreationOptions_cancelButtonLabel=cast=(CFStringRef)
-NavDialogCreationOptions_saveFileName=cast=(CFStringRef)
-NavDialogCreationOptions_message=cast=(CFStringRef)
-NavDialogCreationOptions_preferenceKey=
-NavDialogCreationOptions_popupExtension=cast=(CFArrayRef)
-NavDialogCreationOptions_modality=cast=(WindowModality)
-NavDialogCreationOptions_parentWindow=cast=(WindowRef)
-
-org_eclipse_swt_internal_carbon_NavReplyRecord=
-NavReplyRecord_version=cast=(UInt16)
-NavReplyRecord_validRecord=cast=(Boolean)
-NavReplyRecord_replacing=cast=(Boolean)
-NavReplyRecord_isStationery=cast=(Boolean)
-NavReplyRecord_translationNeeded=cast=(Boolean)
-NavReplyRecord_selection_descriptorType=accessor=selection.descriptorType,cast=(DescType)
-NavReplyRecord_selection_dataHandle=accessor=selection.dataHandle,cast=(AEDataStorage)
-NavReplyRecord_keyScript=cast=(ScriptCode)
-NavReplyRecord_fileTranslation=cast=(FileTranslationSpecArrayHandle)
-NavReplyRecord_reserved1=cast=(UInt32)
-NavReplyRecord_saveFileName=cast=(CFStringRef)
-NavReplyRecord_saveFileExtensionHidden=cast=(Boolean)
-NavReplyRecord_reserved2=cast=(UInt8)
-NavReplyRecord_reserved=cast=(char[])
-
-org_eclipse_swt_internal_carbon_OS=
-OS_AECountItems=
-OS_AECountItems_0=cast=(const AEDescList *)
-OS_AECountItems_1=cast=(long *)
-
-OS_AEGetNthPtr=
-OS_AEGetNthPtr_0=cast=(const AEDescList *)
-OS_AEGetNthPtr_1=
-OS_AEGetNthPtr_2=cast=(DescType)
-OS_AEGetNthPtr_3=cast=(AEKeyword *)
-OS_AEGetNthPtr_4=cast=(DescType *)
-OS_AEGetNthPtr_5=cast=(void *)
-OS_AEGetNthPtr_6=cast=(Size)
-OS_AEGetNthPtr_7=cast=(Size *)
-
-OS_AEInstallEventHandler=
-OS_AEInstallEventHandler_0=cast=AEEventClass
-OS_AEInstallEventHandler_1=cast=AEEventID
-OS_AEInstallEventHandler_2=cast=(AEEventHandlerUPP)
-OS_AEInstallEventHandler_3=cast=(long)
-OS_AEInstallEventHandler_4=
-
-OS_AEProcessAppleEvent=
-OS_AEProcessAppleEvent_0=cast=(const EventRecord *)
-
-OS_ATSFontGetPostScriptName=
-OS_ATSFontGetPostScriptName_0=cast=(ATSFontRef)
-OS_ATSFontGetPostScriptName_1=cast=(ATSOptionFlags)
-OS_ATSFontGetPostScriptName_2=cast=(CFStringRef *)
-
-OS_ATSUBatchBreakLines=
-OS_ATSUBatchBreakLines_0=cast=(ATSUTextLayout)
-OS_ATSUBatchBreakLines_1=
-OS_ATSUBatchBreakLines_2=
-OS_ATSUBatchBreakLines_3=
-OS_ATSUBatchBreakLines_4=cast=(ItemCount *)
-
-OS_ATSUCreateStyle=
-OS_ATSUCreateStyle_0=cast=(ATSUStyle *)
-
-OS_ATSUCreateTextLayout=
-OS_ATSUCreateTextLayout_0=cast=(ATSUTextLayout *)
-
-OS_ATSUCreateTextLayoutWithTextPtr=
-OS_ATSUCreateTextLayoutWithTextPtr_0=cast=(ConstUniCharArrayPtr)
-OS_ATSUCreateTextLayoutWithTextPtr_1=
-OS_ATSUCreateTextLayoutWithTextPtr_2=
-OS_ATSUCreateTextLayoutWithTextPtr_3=
-OS_ATSUCreateTextLayoutWithTextPtr_4=
-OS_ATSUCreateTextLayoutWithTextPtr_5=cast=(const UniCharCount *)
-OS_ATSUCreateTextLayoutWithTextPtr_6=cast=(ATSUStyle *)
-OS_ATSUCreateTextLayoutWithTextPtr_7=cast=(ATSUTextLayout *)
-
-OS_ATSUDirectGetLayoutDataArrayPtrFromTextLayout=
-OS_ATSUDirectGetLayoutDataArrayPtrFromTextLayout_0=cast=ATSUTextLayout
-OS_ATSUDirectGetLayoutDataArrayPtrFromTextLayout_1=cast=UniCharArrayOffset
-OS_ATSUDirectGetLayoutDataArrayPtrFromTextLayout_2=cast=ATSUDirectDataSelector
-OS_ATSUDirectGetLayoutDataArrayPtrFromTextLayout_3=cast=void *
-OS_ATSUDirectGetLayoutDataArrayPtrFromTextLayout_4=cast=ItemCount *
-
-OS_ATSUDirectReleaseLayoutDataArrayPtr=
-OS_ATSUDirectReleaseLayoutDataArrayPtr_0=cast=ATSULineRef
-OS_ATSUDirectReleaseLayoutDataArrayPtr_1=cast=ATSUDirectDataSelector
-OS_ATSUDirectReleaseLayoutDataArrayPtr_2=cast=void *
-
-OS_ATSUDisposeStyle=
-OS_ATSUDisposeStyle_0=cast=(ATSUStyle)
-
-OS_ATSUDisposeTextLayout=
-OS_ATSUDisposeTextLayout_0=cast=(ATSUTextLayout)
-
-OS_ATSUDrawText=
-OS_ATSUDrawText_0=cast=(ATSUTextLayout)
-OS_ATSUDrawText_1=cast=(UniCharArrayOffset)
-OS_ATSUDrawText_2=cast=(UniCharCount)
-OS_ATSUDrawText_3=cast=(ATSUTextMeasurement)
-OS_ATSUDrawText_4=cast=(ATSUTextMeasurement)
-
-OS_ATSUFindFontFromName=
-OS_ATSUFindFontFromName_0=cast=const void *
-OS_ATSUFindFontFromName_1=
-OS_ATSUFindFontFromName_2=
-OS_ATSUFindFontFromName_3=
-OS_ATSUFindFontFromName_4=
-OS_ATSUFindFontFromName_5=
-OS_ATSUFindFontFromName_6=cast=ATSUFontID *
-
-OS_ATSUFindFontName=
-OS_ATSUFindFontName_0=cast=ATSUFontID
-OS_ATSUFindFontName_1=
-OS_ATSUFindFontName_2=
-OS_ATSUFindFontName_3=
-OS_ATSUFindFontName_4=
-OS_ATSUFindFontName_5=
-OS_ATSUFindFontName_6=cast=Ptr
-OS_ATSUFindFontName_7=cast=ByteCount *
-OS_ATSUFindFontName_8=cast=ItemCount *
-
-OS_ATSUGetFontIDs=
-OS_ATSUGetFontIDs_0=cast=ATSUFontID *
-OS_ATSUGetFontIDs_1=
-OS_ATSUGetFontIDs_2=cast=ItemCount *
-
-OS_ATSUGetGlyphBounds__IIIIISII_3I=
-OS_ATSUGetGlyphBounds__IIIIISII_3I_0=cast=(ATSUTextLayout)
-OS_ATSUGetGlyphBounds__IIIIISII_3I_1=cast=(ATSUTextMeasurement)
-OS_ATSUGetGlyphBounds__IIIIISII_3I_2=cast=(ATSUTextMeasurement)
-OS_ATSUGetGlyphBounds__IIIIISII_3I_3=cast=(UniCharArrayOffset)
-OS_ATSUGetGlyphBounds__IIIIISII_3I_4=
-OS_ATSUGetGlyphBounds__IIIIISII_3I_5=
-OS_ATSUGetGlyphBounds__IIIIISII_3I_6=
-OS_ATSUGetGlyphBounds__IIIIISII_3I_7=cast=(ATSTrapezoid *)
-OS_ATSUGetGlyphBounds__IIIIISII_3I_8=cast=(ItemCount *)
-
-OS_ATSUGetGlyphBounds__IIIIISILorg_eclipse_swt_internal_carbon_ATSTrapezoid_2_3I=
-OS_ATSUGetGlyphBounds__IIIIISILorg_eclipse_swt_internal_carbon_ATSTrapezoid_2_3I_0=cast=(ATSUTextLayout)
-OS_ATSUGetGlyphBounds__IIIIISILorg_eclipse_swt_internal_carbon_ATSTrapezoid_2_3I_1=cast=(ATSUTextMeasurement)
-OS_ATSUGetGlyphBounds__IIIIISILorg_eclipse_swt_internal_carbon_ATSTrapezoid_2_3I_2=cast=(ATSUTextMeasurement)
-OS_ATSUGetGlyphBounds__IIIIISILorg_eclipse_swt_internal_carbon_ATSTrapezoid_2_3I_3=cast=(UniCharArrayOffset)
-OS_ATSUGetGlyphBounds__IIIIISILorg_eclipse_swt_internal_carbon_ATSTrapezoid_2_3I_4=
-OS_ATSUGetGlyphBounds__IIIIISILorg_eclipse_swt_internal_carbon_ATSTrapezoid_2_3I_5=
-OS_ATSUGetGlyphBounds__IIIIISILorg_eclipse_swt_internal_carbon_ATSTrapezoid_2_3I_6=
-OS_ATSUGetGlyphBounds__IIIIISILorg_eclipse_swt_internal_carbon_ATSTrapezoid_2_3I_7=cast=(ATSTrapezoid *)
-OS_ATSUGetGlyphBounds__IIIIISILorg_eclipse_swt_internal_carbon_ATSTrapezoid_2_3I_8=cast=(ItemCount *)
-
-OS_ATSUGetLayoutControl=
-OS_ATSUGetLayoutControl_0=cast=(ATSUTextLayout)
-OS_ATSUGetLayoutControl_1=cast=ATSUAttributeTag
-OS_ATSUGetLayoutControl_2=
-OS_ATSUGetLayoutControl_3=cast=ATSUAttributeValuePtr
-OS_ATSUGetLayoutControl_4=cast=ByteCount *
-
-OS_ATSUGetLineControl=
-OS_ATSUGetLineControl_0=cast=(ATSUTextLayout)
-OS_ATSUGetLineControl_1=cast=UniCharArrayOffset
-OS_ATSUGetLineControl_2=cast=ATSUAttributeTag
-OS_ATSUGetLineControl_3=cast=ByteCount
-OS_ATSUGetLineControl_4=cast=ATSUAttributeValuePtr
-OS_ATSUGetLineControl_5=cast=ByteCount *
-
-OS_ATSUGetSoftLineBreaks=
-OS_ATSUGetSoftLineBreaks_0=cast=(ATSUTextLayout)
-OS_ATSUGetSoftLineBreaks_1=cast=(UniCharArrayOffset)
-OS_ATSUGetSoftLineBreaks_2=cast=(UniCharCount)
-OS_ATSUGetSoftLineBreaks_3=cast=(ItemCount)
-OS_ATSUGetSoftLineBreaks_4=cast=(UniCharArrayOffset *)
-OS_ATSUGetSoftLineBreaks_5=cast=(ItemCount *)
-
-OS_ATSUGetTextHighlight=
-OS_ATSUGetTextHighlight_0=cast=(ATSUTextLayout)
-OS_ATSUGetTextHighlight_1=
-OS_ATSUGetTextHighlight_2=
-OS_ATSUGetTextHighlight_3=
-OS_ATSUGetTextHighlight_4=
-OS_ATSUGetTextHighlight_5=cast=RgnHandle
-
-OS_ATSUGetUnjustifiedBounds=
-OS_ATSUGetUnjustifiedBounds_0=cast=(ATSUTextLayout)
-OS_ATSUGetUnjustifiedBounds_1=
-OS_ATSUGetUnjustifiedBounds_2=
-OS_ATSUGetUnjustifiedBounds_3=cast=ATSUTextMeasurement *
-OS_ATSUGetUnjustifiedBounds_4=cast=ATSUTextMeasurement *
-OS_ATSUGetUnjustifiedBounds_5=cast=ATSUTextMeasurement *
-OS_ATSUGetUnjustifiedBounds_6=cast=ATSUTextMeasurement *
-
-OS_ATSUGlyphGetQuadraticPaths=
-OS_ATSUGlyphGetQuadraticPaths_0=cast=ATSUStyle
-OS_ATSUGlyphGetQuadraticPaths_1=cast=GlyphID
-OS_ATSUGlyphGetQuadraticPaths_2=cast=ATSQuadraticNewPathUPP
-OS_ATSUGlyphGetQuadraticPaths_3=cast=ATSQuadraticLineUPP
-OS_ATSUGlyphGetQuadraticPaths_4=cast=ATSQuadraticCurveUPP
-OS_ATSUGlyphGetQuadraticPaths_5=cast=ATSQuadraticClosePathUPP
-OS_ATSUGlyphGetQuadraticPaths_6=cast=void *
-OS_ATSUGlyphGetQuadraticPaths_7=cast=OSStatus *
-
-OS_ATSUHighlightText=
-OS_ATSUHighlightText_0=cast=ATSUTextLayout
-OS_ATSUHighlightText_1=cast=ATSUTextMeasurement
-OS_ATSUHighlightText_2=cast=ATSUTextMeasurement
-OS_ATSUHighlightText_3=
-OS_ATSUHighlightText_4=
-
-OS_ATSUNextCursorPosition=
-OS_ATSUNextCursorPosition_0=cast=(ATSUTextLayout)
-OS_ATSUNextCursorPosition_1=cast=(UniCharArrayOffset)
-OS_ATSUNextCursorPosition_2=cast=(ATSUCursorMovementType)
-OS_ATSUNextCursorPosition_3=cast=(UniCharArrayOffset *)
-
-OS_ATSUOffsetToPosition=
-OS_ATSUOffsetToPosition_0=cast=(ATSUTextLayout)
-OS_ATSUOffsetToPosition_1=
-OS_ATSUOffsetToPosition_2=
-OS_ATSUOffsetToPosition_3=
-OS_ATSUOffsetToPosition_4=
-OS_ATSUOffsetToPosition_5=cast=Boolean *
-
-OS_ATSUPositionToOffset=
-OS_ATSUPositionToOffset_0=cast=(ATSUTextLayout)
-OS_ATSUPositionToOffset_1=
-OS_ATSUPositionToOffset_2=
-OS_ATSUPositionToOffset_3=cast=UniCharArrayOffset *
-OS_ATSUPositionToOffset_4=cast=Boolean *
-OS_ATSUPositionToOffset_5=cast=UniCharArrayOffset *
-
-OS_ATSUPreviousCursorPosition=
-OS_ATSUPreviousCursorPosition_0=cast=(ATSUTextLayout)
-OS_ATSUPreviousCursorPosition_1=cast=(UniCharArrayOffset)
-OS_ATSUPreviousCursorPosition_2=cast=(ATSUCursorMovementType)
-OS_ATSUPreviousCursorPosition_3=cast=(UniCharArrayOffset *)
-
-OS_ATSUSetAttributes=
-OS_ATSUSetAttributes_0=cast=(ATSUStyle)
-OS_ATSUSetAttributes_1=cast=(ItemCount)
-OS_ATSUSetAttributes_2=cast=(ATSUAttributeTag *)
-OS_ATSUSetAttributes_3=cast=(ByteCount *)
-OS_ATSUSetAttributes_4=cast=(ATSUAttributeValuePtr *)
-
-OS_ATSUSetFontFeatures=
-OS_ATSUSetFontFeatures_0=cast=(ATSUStyle)
-OS_ATSUSetFontFeatures_1=cast=(ItemCount)
-OS_ATSUSetFontFeatures_2=cast=(const ATSUFontFeatureType *)
-OS_ATSUSetFontFeatures_3=cast=(const ATSUFontFeatureSelector *)
-
-OS_ATSUSetHighlightingMethod=
-OS_ATSUSetHighlightingMethod_0=cast=(ATSUTextLayout)
-OS_ATSUSetHighlightingMethod_1=
-OS_ATSUSetHighlightingMethod_2=
-
-OS_ATSUSetLayoutControls=
-OS_ATSUSetLayoutControls_0=cast=(ATSUTextLayout)
-OS_ATSUSetLayoutControls_1=cast=(ItemCount)
-OS_ATSUSetLayoutControls_2=cast=(ATSUAttributeTag *)
-OS_ATSUSetLayoutControls_3=cast=(ByteCount *)
-OS_ATSUSetLayoutControls_4=cast=(ATSUAttributeValuePtr *)
-
-OS_ATSUSetLineControls=
-OS_ATSUSetLineControls_0=cast=ATSUTextLayout
-OS_ATSUSetLineControls_1=cast=UniCharArrayOffset
-OS_ATSUSetLineControls_2=cast=ItemCount
-OS_ATSUSetLineControls_3=cast=const ATSUAttributeTag *
-OS_ATSUSetLineControls_4=cast=const ByteCount *
-OS_ATSUSetLineControls_5=cast=const ATSUAttributeValuePtr *
-
-OS_ATSUSetRunStyle=
-OS_ATSUSetRunStyle_0=cast=(ATSUTextLayout)
-OS_ATSUSetRunStyle_1=cast=(ATSUStyle)
-OS_ATSUSetRunStyle_2=cast=(UniCharArrayOffset)
-OS_ATSUSetRunStyle_3=cast=(UniCharCount)
-
-OS_ATSUSetSoftLineBreak=
-OS_ATSUSetSoftLineBreak_0=cast=(ATSUTextLayout)
-OS_ATSUSetSoftLineBreak_1=
-
-OS_ATSUSetTabArray=
-OS_ATSUSetTabArray_0=cast=(ATSUTextLayout)
-OS_ATSUSetTabArray_1=cast=const ATSUTab *
-OS_ATSUSetTabArray_2=
-
-OS_ATSUSetTextPointerLocation=
-OS_ATSUSetTextPointerLocation_0=cast=(ATSUTextLayout)
-OS_ATSUSetTextPointerLocation_1=cast=(ConstUniCharArrayPtr)
-OS_ATSUSetTextPointerLocation_2=cast=(UniCharArrayOffset)
-OS_ATSUSetTextPointerLocation_3=cast=(UniCharCount)
-OS_ATSUSetTextPointerLocation_4=cast=(UniCharCount)
-
-OS_ATSUSetTransientFontMatching=
-OS_ATSUSetTransientFontMatching_0=cast=(ATSUTextLayout)
-OS_ATSUSetTransientFontMatching_1=
-
-OS_ATSUTextDeleted=
-OS_ATSUTextDeleted_0=cast=(ATSUTextLayout)
-OS_ATSUTextDeleted_1=
-OS_ATSUTextDeleted_2=
-
-OS_ATSUTextInserted=
-OS_ATSUTextInserted_0=cast=(ATSUTextLayout)
-OS_ATSUTextInserted_1=
-OS_ATSUTextInserted_2=
-
-OS_AXNotificationHIObjectNotify=
-OS_AXNotificationHIObjectNotify_0=cast=(CFStringRef)
-OS_AXNotificationHIObjectNotify_1=cast=(HIObjectRef)
-OS_AXNotificationHIObjectNotify_2=cast=(UInt64)
-
-OS_AXUIElementCreateWithHIObjectAndIdentifier=
-OS_AXUIElementCreateWithHIObjectAndIdentifier_0=cast=(HIObjectRef)
-OS_AXUIElementCreateWithHIObjectAndIdentifier_1=cast=(UInt64)
-
-OS_AXUIElementGetIdentifier=
-OS_AXUIElementGetIdentifier_0=cast=(AXUIElementRef)
-OS_AXUIElementGetIdentifier_1=cast=(UInt64 *)
-
-OS_ActiveNonFloatingWindow=
-
-OS_AddDataBrowserItems=
-OS_AddDataBrowserItems_0=cast=(ControlRef)
-OS_AddDataBrowserItems_1=cast=(DataBrowserItemID)
-OS_AddDataBrowserItems_2=cast=(UInt32)
-OS_AddDataBrowserItems_3=cast=(const DataBrowserItemID *)
-OS_AddDataBrowserItems_4=cast=(DataBrowserPropertyID)
-
-OS_AddDataBrowserListViewColumn=
-OS_AddDataBrowserListViewColumn_0=cast=(ControlRef)
-OS_AddDataBrowserListViewColumn_1=cast=(DataBrowserListViewColumnDesc *),flags=init
-OS_AddDataBrowserListViewColumn_2=cast=(DataBrowserTableViewColumnIndex)
-
-OS_AddDragItemFlavor=
-OS_AddDragItemFlavor_0=cast=(DragRef)
-OS_AddDragItemFlavor_1=cast=(DragItemRef)
-OS_AddDragItemFlavor_2=cast=(FlavorType)
-OS_AddDragItemFlavor_3=cast=(const void *)
-OS_AddDragItemFlavor_4=cast=(Size)
-OS_AddDragItemFlavor_5=cast=(FlavorFlags)
-
-OS_AppendMenuItemTextWithCFString=
-OS_AppendMenuItemTextWithCFString_0=cast=(MenuRef)
-OS_AppendMenuItemTextWithCFString_1=cast=(CFStringRef)
-OS_AppendMenuItemTextWithCFString_2=cast=(MenuItemAttributes)
-OS_AppendMenuItemTextWithCFString_3=cast=(MenuCommand)
-OS_AppendMenuItemTextWithCFString_4=cast=(MenuItemIndex *)
-
-OS_AutoSizeDataBrowserListViewColumns=
-OS_AutoSizeDataBrowserListViewColumns_0=cast=(ControlRef)
-
-OS_BeginUpdate=
-OS_BeginUpdate_0=cast=(WindowRef)
-
-OS_BringToFront=
-OS_BringToFront_0=cast=(WindowRef)
-
-OS_CFArrayAppendValue=
-OS_CFArrayAppendValue_0=cast=(CFMutableArrayRef)
-OS_CFArrayAppendValue_1=cast=(const void *)
-
-OS_CFArrayCreateMutable=
-OS_CFArrayCreateMutable_0=cast=(CFAllocatorRef)
-OS_CFArrayCreateMutable_1=cast=(CFIndex)
-OS_CFArrayCreateMutable_2=cast=(const CFArrayCallBacks *)
-
-OS_CFArrayGetCount=
-OS_CFArrayGetCount_0=cast=(CFArrayRef)
-
-OS_CFArrayGetValueAtIndex=
-OS_CFArrayGetValueAtIndex_0=cast=(CFArrayRef)
-OS_CFArrayGetValueAtIndex_1=
-
-OS_CFDataGetBytes=
-OS_CFDataGetBytes_0=cast=(CFDataRef)
-OS_CFDataGetBytes_1=flags=struct
-OS_CFDataGetBytes_2=cast=(UInt8 *)
-
-OS_CFDataGetLength=
-OS_CFDataGetLength_0=cast=(CFDataRef)
-
-OS_CFEqual=
-OS_CFEqual_0=cast=CFStringRef
-OS_CFEqual_1=cast=CFStringRef
-
-OS_CFLocaleCopyCurrent=
-
-OS_CFNumberFormatterCopyProperty=
-OS_CFNumberFormatterCopyProperty_0=cast=CFNumberFormatterRef
-OS_CFNumberFormatterCopyProperty_1=cast=CFStringRef
-
-OS_CFNumberFormatterCreate=
-OS_CFNumberFormatterCreate_0=cast=CFAllocatorRef
-OS_CFNumberFormatterCreate_1=cast=CFLocaleRef
-OS_CFNumberFormatterCreate_2=cast=CFNumberFormatterStyle
-
-OS_CFRelease=
-OS_CFRelease_0=cast=(CFTypeRef)
-
-OS_CFStringCreateWithBytes=
-OS_CFStringCreateWithBytes_0=cast=(CFAllocatorRef)
-OS_CFStringCreateWithBytes_1=cast=(const UInt8 *)
-OS_CFStringCreateWithBytes_2=cast=(CFIndex)
-OS_CFStringCreateWithBytes_3=cast=(CFStringEncoding)
-OS_CFStringCreateWithBytes_4=
-
-OS_CFStringCreateWithCharacters__III=
-OS_CFStringCreateWithCharacters__III_0=cast=(CFAllocatorRef)
-OS_CFStringCreateWithCharacters__III_1=cast=(const UniChar *)
-OS_CFStringCreateWithCharacters__III_2=cast=(CFIndex)
-
-OS_CFStringCreateWithCharacters__I_3CI=
-OS_CFStringCreateWithCharacters__I_3CI_0=cast=(CFAllocatorRef)
-OS_CFStringCreateWithCharacters__I_3CI_1=cast=(const UniChar *)
-OS_CFStringCreateWithCharacters__I_3CI_2=cast=(CFIndex)
-
-OS_CFStringGetBytes=
-OS_CFStringGetBytes_0=cast=(CFStringRef)
-OS_CFStringGetBytes_1=cast=(CFRange *),flags=struct
-OS_CFStringGetBytes_2=cast=(CFStringEncoding)
-OS_CFStringGetBytes_3=cast=(UInt8)
-OS_CFStringGetBytes_4=cast=(Boolean)
-OS_CFStringGetBytes_5=cast=(UInt8 *)
-OS_CFStringGetBytes_6=cast=(CFIndex)
-OS_CFStringGetBytes_7=cast=(CFIndex *)
-
-OS_CFStringGetCharacters=
-OS_CFStringGetCharacters_0=cast=(CFStringRef)
-OS_CFStringGetCharacters_1=cast=(CFRange *),flags=struct
-OS_CFStringGetCharacters_2=cast=(UniChar *)
-
-OS_CFStringGetLength=
-OS_CFStringGetLength_0=cast=(CFStringRef)
-
-OS_CFStringGetSystemEncoding=
-
-OS_CFURLCopyFileSystemPath=
-OS_CFURLCopyFileSystemPath_0=cast=(CFURLRef)
-OS_CFURLCopyFileSystemPath_1=cast=(CFURLPathStyle)
-
-OS_CFURLCopyLastPathComponent=
-OS_CFURLCopyLastPathComponent_0=cast=(CFURLRef)
-
-OS_CFURLCopyPathExtension=
-OS_CFURLCopyPathExtension_0=cast=CFURLRef
-
-OS_CFURLCreateCopyAppendingPathComponent=
-OS_CFURLCreateCopyAppendingPathComponent_0=cast=(CFAllocatorRef)
-OS_CFURLCreateCopyAppendingPathComponent_1=cast=(CFURLRef)
-OS_CFURLCreateCopyAppendingPathComponent_2=cast=(CFStringRef)
-OS_CFURLCreateCopyAppendingPathComponent_3=cast=(Boolean)
-
-OS_CFURLCreateCopyDeletingLastPathComponent=
-OS_CFURLCreateCopyDeletingLastPathComponent_0=cast=(CFAllocatorRef)
-OS_CFURLCreateCopyDeletingLastPathComponent_1=cast=(CFURLRef)
-
-OS_CFURLCreateData=
-OS_CFURLCreateData_0=cast=(CFAllocatorRef)
-OS_CFURLCreateData_1=cast=(CFURLRef)
-OS_CFURLCreateData_2=cast=(CFStringEncoding)
-OS_CFURLCreateData_3=cast=(Boolean)
-
-OS_CFURLCreateFromFSRef=
-OS_CFURLCreateFromFSRef_0=cast=(CFAllocatorRef)
-OS_CFURLCreateFromFSRef_1=cast=(const struct FSRef *)
-
-OS_CFURLCreateFromFileSystemRepresentation=
-OS_CFURLCreateFromFileSystemRepresentation_0=cast=CFAllocatorRef
-OS_CFURLCreateFromFileSystemRepresentation_1=cast=const UInt8 *
-OS_CFURLCreateFromFileSystemRepresentation_2=
-OS_CFURLCreateFromFileSystemRepresentation_3=
-
-OS_CFURLCreateWithBytes=
-OS_CFURLCreateWithBytes_0=cast=(CFAllocatorRef)
-OS_CFURLCreateWithBytes_1=cast=(const UInt8 *)
-OS_CFURLCreateWithBytes_2=cast=(CFIndex)
-OS_CFURLCreateWithBytes_3=cast=(CFStringEncoding)
-OS_CFURLCreateWithBytes_4=cast=(CFURLRef)
-
-OS_CFURLCreateWithFileSystemPath=
-OS_CFURLCreateWithFileSystemPath_0=cast=(CFAllocatorRef)
-OS_CFURLCreateWithFileSystemPath_1=cast=(CFStringRef)
-OS_CFURLCreateWithFileSystemPath_2=cast=(CFURLPathStyle)
-OS_CFURLCreateWithFileSystemPath_3=
-
-OS_CFURLGetFSRef=
-OS_CFURLGetFSRef_0=cast=(CFURLRef)
-OS_CFURLGetFSRef_1=cast=(struct FSRef *)
-
-OS_CGAffineTransformConcat=flags=no_gen
-OS_CGAffineTransformConcat_0=
-OS_CGAffineTransformConcat_1=
-OS_CGAffineTransformConcat_2=
-
-OS_CGAffineTransformInvert=flags=no_gen
-OS_CGAffineTransformInvert_0=
-OS_CGAffineTransformInvert_1=
-
-OS_CGAffineTransformMake=flags=no_gen
-OS_CGAffineTransformMake_0=
-OS_CGAffineTransformMake_1=
-OS_CGAffineTransformMake_2=
-OS_CGAffineTransformMake_3=
-OS_CGAffineTransformMake_4=
-OS_CGAffineTransformMake_5=
-OS_CGAffineTransformMake_6=
-
-OS_CGAffineTransformRotate=flags=no_gen
-OS_CGAffineTransformRotate_0=
-OS_CGAffineTransformRotate_1=
-OS_CGAffineTransformRotate_2=
-
-OS_CGAffineTransformScale=flags=no_gen
-OS_CGAffineTransformScale_0=
-OS_CGAffineTransformScale_1=
-OS_CGAffineTransformScale_2=
-OS_CGAffineTransformScale_3=
-
-OS_CGAffineTransformTranslate=flags=no_gen
-OS_CGAffineTransformTranslate_0=
-OS_CGAffineTransformTranslate_1=
-OS_CGAffineTransformTranslate_2=
-OS_CGAffineTransformTranslate_3=
-
-OS_CGBitmapContextCreate=
-OS_CGBitmapContextCreate_0=cast=(void *)
-OS_CGBitmapContextCreate_1=cast=(size_t)
-OS_CGBitmapContextCreate_2=cast=(size_t)
-OS_CGBitmapContextCreate_3=cast=(size_t)
-OS_CGBitmapContextCreate_4=cast=(size_t)
-OS_CGBitmapContextCreate_5=cast=(CGColorSpaceRef)
-OS_CGBitmapContextCreate_6=cast=(CGImageAlphaInfo)
-
-OS_CGColorCreate=
-OS_CGColorCreate_0=cast=(CGColorSpaceRef)
-OS_CGColorCreate_1=
-
-OS_CGColorRelease=
-OS_CGColorRelease_0=cast=CGColorRef
-
-OS_CGColorSpaceCreateDeviceRGB=
-
-OS_CGColorSpaceCreatePattern=
-OS_CGColorSpaceCreatePattern_0=cast=CGColorSpaceRef
-
-OS_CGColorSpaceRelease=
-OS_CGColorSpaceRelease_0=cast=(CGColorSpaceRef)
-
-OS_CGContextAddArc=
-OS_CGContextAddArc_0=cast=(CGContextRef)
-OS_CGContextAddArc_1=cast=(float)
-OS_CGContextAddArc_2=cast=(float)
-OS_CGContextAddArc_3=cast=(float)
-OS_CGContextAddArc_4=cast=(float)
-OS_CGContextAddArc_5=cast=(float)
-OS_CGContextAddArc_6=cast=(Boolean)
-
-OS_CGContextAddArcToPoint=
-OS_CGContextAddArcToPoint_0=cast=(CGContextRef)
-OS_CGContextAddArcToPoint_1=
-OS_CGContextAddArcToPoint_2=
-OS_CGContextAddArcToPoint_3=
-OS_CGContextAddArcToPoint_4=
-OS_CGContextAddArcToPoint_5=
-
-OS_CGContextAddLineToPoint=
-OS_CGContextAddLineToPoint_0=cast=(CGContextRef)
-OS_CGContextAddLineToPoint_1=
-OS_CGContextAddLineToPoint_2=
-
-OS_CGContextAddLines=
-OS_CGContextAddLines_0=cast=(CGContextRef)
-OS_CGContextAddLines_1=cast=(const CGPoint *)
-OS_CGContextAddLines_2=cast=(size_t)
-
-OS_CGContextAddPath=
-OS_CGContextAddPath_0=cast=(CGContextRef)
-OS_CGContextAddPath_1=cast=CGPathRef
-
-OS_CGContextBeginPath=
-OS_CGContextBeginPath_0=cast=(CGContextRef)
-
-OS_CGContextClearRect=
-OS_CGContextClearRect_0=cast=(CGContextRef)
-OS_CGContextClearRect_1=cast=(CGRect *),flags=struct
-
-OS_CGContextClip=
-OS_CGContextClip_0=cast=(CGContextRef)
-
-OS_CGContextClosePath=
-OS_CGContextClosePath_0=cast=(CGContextRef)
-
-OS_CGContextConcatCTM=
-OS_CGContextConcatCTM_0=cast=(CGContextRef)
-OS_CGContextConcatCTM_1=cast=(CGAffineTransform *),flags=struct
-
-OS_CGContextDrawImage=
-OS_CGContextDrawImage_0=cast=(CGContextRef)
-OS_CGContextDrawImage_1=cast=(CGRect *),flags=struct
-OS_CGContextDrawImage_2=cast=(CGImageRef)
-
-OS_CGContextDrawShading=
-OS_CGContextDrawShading_0=cast=(CGContextRef)
-OS_CGContextDrawShading_1=cast=CGShadingRef
-
-OS_CGContextEOClip=
-OS_CGContextEOClip_0=cast=(CGContextRef)
-
-OS_CGContextEOFillPath=
-OS_CGContextEOFillPath_0=cast=(CGContextRef)
-
-OS_CGContextFillPath=
-OS_CGContextFillPath_0=cast=(CGContextRef)
-
-OS_CGContextFillRect=
-OS_CGContextFillRect_0=cast=(CGContextRef)
-OS_CGContextFillRect_1=cast=(CGRect *),flags=struct
-
-OS_CGContextFlush=
-OS_CGContextFlush_0=cast=(CGContextRef)
-
-OS_CGContextGetCTM=flags=no_gen
-OS_CGContextGetCTM_0=
-OS_CGContextGetCTM_1=
-
-OS_CGContextGetInterpolationQuality=
-OS_CGContextGetInterpolationQuality_0=cast=(CGContextRef)
-
-OS_CGContextGetPathBoundingBox=flags=no_gen
-OS_CGContextGetPathBoundingBox_0=cast=(CGContextRef)
-OS_CGContextGetPathBoundingBox_1=
-
-OS_CGContextGetTextPosition=flags=no_gen
-OS_CGContextGetTextPosition_0=cast=(CGContextRef)
-OS_CGContextGetTextPosition_1=cast=(CGPoint)
-
-OS_CGContextMoveToPoint=
-OS_CGContextMoveToPoint_0=cast=(CGContextRef)
-OS_CGContextMoveToPoint_1=cast=(float)
-OS_CGContextMoveToPoint_2=cast=(float)
-
-OS_CGContextRelease=
-OS_CGContextRelease_0=cast=(CGContextRef)
-
-OS_CGContextRestoreGState=
-OS_CGContextRestoreGState_0=cast=(CGContextRef)
-
-OS_CGContextSaveGState=
-OS_CGContextSaveGState_0=cast=(CGContextRef)
-
-OS_CGContextScaleCTM=
-OS_CGContextScaleCTM_0=cast=(CGContextRef)
-OS_CGContextScaleCTM_1=cast=(float)
-OS_CGContextScaleCTM_2=cast=(float)
-
-OS_CGContextSelectFont=
-OS_CGContextSelectFont_0=cast=(CGContextRef)
-OS_CGContextSelectFont_1=cast=(const char *)
-OS_CGContextSelectFont_2=cast=(float)
-OS_CGContextSelectFont_3=cast=(CGTextEncoding)
-
-OS_CGContextSetAlpha=
-OS_CGContextSetAlpha_0=cast=(CGContextRef)
-OS_CGContextSetAlpha_1=
-
-OS_CGContextSetFillColor=
-OS_CGContextSetFillColor_0=cast=(CGContextRef)
-OS_CGContextSetFillColor_1=cast=(const float *)
-
-OS_CGContextSetFillColorSpace=
-OS_CGContextSetFillColorSpace_0=cast=(CGContextRef)
-OS_CGContextSetFillColorSpace_1=cast=(CGColorSpaceRef)
-
-OS_CGContextSetFillPattern=
-OS_CGContextSetFillPattern_0=cast=(CGContextRef)
-OS_CGContextSetFillPattern_1=cast=CGPatternRef
-OS_CGContextSetFillPattern_2=
-
-OS_CGContextSetFont=
-OS_CGContextSetFont_0=cast=(CGContextRef)
-OS_CGContextSetFont_1=cast=(CGFontRef)
-
-OS_CGContextSetFontSize=
-OS_CGContextSetFontSize_0=cast=(CGContextRef)
-OS_CGContextSetFontSize_1=cast=(float)
-
-OS_CGContextSetInterpolationQuality=
-OS_CGContextSetInterpolationQuality_0=cast=(CGContextRef)
-OS_CGContextSetInterpolationQuality_1=
-
-OS_CGContextSetLineCap=
-OS_CGContextSetLineCap_0=cast=(CGContextRef)
-OS_CGContextSetLineCap_1=
-
-OS_CGContextSetLineDash=
-OS_CGContextSetLineDash_0=cast=(CGContextRef)
-OS_CGContextSetLineDash_1=cast=(float)
-OS_CGContextSetLineDash_2=cast=(const float *)
-OS_CGContextSetLineDash_3=cast=(size_t)
-
-OS_CGContextSetLineJoin=
-OS_CGContextSetLineJoin_0=cast=(CGContextRef)
-OS_CGContextSetLineJoin_1=
-
-OS_CGContextSetLineWidth=
-OS_CGContextSetLineWidth_0=cast=(CGContextRef)
-OS_CGContextSetLineWidth_1=cast=(float)
-
-OS_CGContextSetRGBFillColor=
-OS_CGContextSetRGBFillColor_0=cast=(CGContextRef)
-OS_CGContextSetRGBFillColor_1=cast=(float)
-OS_CGContextSetRGBFillColor_2=cast=(float)
-OS_CGContextSetRGBFillColor_3=cast=(float)
-OS_CGContextSetRGBFillColor_4=cast=(float)
-
-OS_CGContextSetRGBStrokeColor=
-OS_CGContextSetRGBStrokeColor_0=cast=(CGContextRef)
-OS_CGContextSetRGBStrokeColor_1=cast=(float)
-OS_CGContextSetRGBStrokeColor_2=cast=(float)
-OS_CGContextSetRGBStrokeColor_3=cast=(float)
-OS_CGContextSetRGBStrokeColor_4=cast=(float)
-
-OS_CGContextSetRenderingIntent=
-OS_CGContextSetRenderingIntent_0=cast=(CGContextRef)
-OS_CGContextSetRenderingIntent_1=
-
-OS_CGContextSetShouldAntialias=
-OS_CGContextSetShouldAntialias_0=cast=(CGContextRef)
-OS_CGContextSetShouldAntialias_1=
-
-OS_CGContextSetShouldSmoothFonts=
-OS_CGContextSetShouldSmoothFonts_0=cast=(CGContextRef)
-OS_CGContextSetShouldSmoothFonts_1=
-
-OS_CGContextSetStrokeColor=
-OS_CGContextSetStrokeColor_0=cast=(CGContextRef)
-OS_CGContextSetStrokeColor_1=cast=(const float *)
-
-OS_CGContextSetStrokeColorSpace=
-OS_CGContextSetStrokeColorSpace_0=cast=(CGContextRef)
-OS_CGContextSetStrokeColorSpace_1=cast=(CGColorSpaceRef)
-
-OS_CGContextSetStrokePattern=
-OS_CGContextSetStrokePattern_0=cast=(CGContextRef)
-OS_CGContextSetStrokePattern_1=cast=CGPatternRef
-OS_CGContextSetStrokePattern_2=
-
-OS_CGContextSetTextDrawingMode=
-OS_CGContextSetTextDrawingMode_0=cast=(CGContextRef)
-OS_CGContextSetTextDrawingMode_1=cast=(CGTextDrawingMode)
-
-OS_CGContextSetTextMatrix=
-OS_CGContextSetTextMatrix_0=cast=(CGContextRef)
-OS_CGContextSetTextMatrix_1=cast=(CGAffineTransform *),flags=struct
-
-OS_CGContextSetTextPosition=
-OS_CGContextSetTextPosition_0=cast=(CGContextRef)
-OS_CGContextSetTextPosition_1=cast=(float)
-OS_CGContextSetTextPosition_2=cast=(float)
-
-OS_CGContextShowText=
-OS_CGContextShowText_0=cast=(CGContextRef)
-OS_CGContextShowText_1=cast=(const char *)
-OS_CGContextShowText_2=cast=(size_t)
-
-OS_CGContextShowTextAtPoint=
-OS_CGContextShowTextAtPoint_0=cast=(CGContextRef)
-OS_CGContextShowTextAtPoint_1=cast=(float)
-OS_CGContextShowTextAtPoint_2=cast=(float)
-OS_CGContextShowTextAtPoint_3=cast=(const char *)
-OS_CGContextShowTextAtPoint_4=cast=(size_t)
-
-OS_CGContextStrokePath=
-OS_CGContextStrokePath_0=cast=(CGContextRef)
-
-OS_CGContextStrokeRect=
-OS_CGContextStrokeRect_0=cast=(CGContextRef)
-OS_CGContextStrokeRect_1=cast=(CGRect *),flags=struct
-
-OS_CGContextSynchronize=
-OS_CGContextSynchronize_0=cast=(CGContextRef)
-
-OS_CGContextTranslateCTM=
-OS_CGContextTranslateCTM_0=cast=(CGContextRef)
-OS_CGContextTranslateCTM_1=cast=(float)
-OS_CGContextTranslateCTM_2=cast=(float)
-
-OS_CGDataProviderCreateWithData=
-OS_CGDataProviderCreateWithData_0=cast=(void *)
-OS_CGDataProviderCreateWithData_1=cast=(const void *)
-OS_CGDataProviderCreateWithData_2=cast=(size_t)
-OS_CGDataProviderCreateWithData_3=cast=(void *)
-
-OS_CGDataProviderCreateWithURL=
-OS_CGDataProviderCreateWithURL_0=cast=CFURLRef
-
-OS_CGDataProviderRelease=
-OS_CGDataProviderRelease_0=cast=(CGDataProviderRef)
-
-OS_CGDisplayBaseAddress=
-OS_CGDisplayBaseAddress_0=cast=(CGDirectDisplayID)
-
-OS_CGDisplayBitsPerPixel=
-OS_CGDisplayBitsPerPixel_0=cast=(CGDirectDisplayID)
-
-OS_CGDisplayBitsPerSample=
-OS_CGDisplayBitsPerSample_0=cast=(CGDirectDisplayID)
-
-OS_CGDisplayBytesPerRow=
-OS_CGDisplayBytesPerRow_0=cast=(CGDirectDisplayID)
-
-OS_CGDisplayPixelsHigh=
-OS_CGDisplayPixelsHigh_0=cast=(CGDirectDisplayID)
-
-OS_CGDisplayPixelsWide=
-OS_CGDisplayPixelsWide_0=cast=(CGDirectDisplayID)
-
-OS_CGFontCreateWithPlatformFont=
-OS_CGFontCreateWithPlatformFont_0=
-
-OS_CGFontRelease=
-OS_CGFontRelease_0=cast=(CGFontRef)
-
-OS_CGFunctionCreate=
-OS_CGFunctionCreate_0=cast=void *
-OS_CGFunctionCreate_1=cast=size_t
-OS_CGFunctionCreate_2=cast=const float *
-OS_CGFunctionCreate_3=cast=size_t
-OS_CGFunctionCreate_4=cast=const float *
-OS_CGFunctionCreate_5=cast=const CGFunctionCallbacks *
-
-OS_CGFunctionRelease=
-OS_CGFunctionRelease_0=cast=CGFunctionRef
-
-OS_CGGetDisplaysWithRect=
-OS_CGGetDisplaysWithRect_0=flags=struct
-OS_CGGetDisplaysWithRect_1=cast=CGDisplayCount
-OS_CGGetDisplaysWithRect_2=cast=(CGDirectDisplayID *)
-OS_CGGetDisplaysWithRect_3=cast=CGDisplayCount *
-
-OS_CGImageCreate=
-OS_CGImageCreate_0=cast=(size_t)
-OS_CGImageCreate_1=cast=(size_t)
-OS_CGImageCreate_2=cast=(size_t)
-OS_CGImageCreate_3=cast=(size_t)
-OS_CGImageCreate_4=cast=(size_t)
-OS_CGImageCreate_5=cast=(CGColorSpaceRef)
-OS_CGImageCreate_6=cast=(CGImageAlphaInfo)
-OS_CGImageCreate_7=cast=(CGDataProviderRef)
-OS_CGImageCreate_8=cast=(const float *)
-OS_CGImageCreate_9=cast=(Boolean)
-OS_CGImageCreate_10=cast=(CGColorRenderingIntent)
-
-OS_CGImageCreateWithImageInRect=flags=dynamic
-OS_CGImageCreateWithImageInRect_0=
-OS_CGImageCreateWithImageInRect_1=flags=struct
-
-OS_CGImageCreateWithJPEGDataProvider=
-OS_CGImageCreateWithJPEGDataProvider_0=cast=CGDataProviderRef
-OS_CGImageCreateWithJPEGDataProvider_1=
-OS_CGImageCreateWithJPEGDataProvider_2=
-OS_CGImageCreateWithJPEGDataProvider_3=
-
-OS_CGImageCreateWithPNGDataProvider=
-OS_CGImageCreateWithPNGDataProvider_0=cast=CGDataProviderRef
-OS_CGImageCreateWithPNGDataProvider_1=
-OS_CGImageCreateWithPNGDataProvider_2=
-OS_CGImageCreateWithPNGDataProvider_3=
-
-OS_CGImageGetAlphaInfo=
-OS_CGImageGetAlphaInfo_0=cast=(CGImageRef)
-
-OS_CGImageGetBitsPerComponent=
-OS_CGImageGetBitsPerComponent_0=cast=(CGImageRef)
-
-OS_CGImageGetBitsPerPixel=
-OS_CGImageGetBitsPerPixel_0=cast=(CGImageRef)
-
-OS_CGImageGetBytesPerRow=
-OS_CGImageGetBytesPerRow_0=cast=(CGImageRef)
-
-OS_CGImageGetColorSpace=
-OS_CGImageGetColorSpace_0=cast=(CGImageRef)
-
-OS_CGImageGetHeight=
-OS_CGImageGetHeight_0=cast=(CGImageRef)
-
-OS_CGImageGetWidth=
-OS_CGImageGetWidth_0=cast=(CGImageRef)
-
-OS_CGImageRelease=
-OS_CGImageRelease_0=cast=(CGImageRef)
-
-OS_CGPathAddArc=
-OS_CGPathAddArc_0=cast=CGMutablePathRef
-OS_CGPathAddArc_1=cast=(const CGAffineTransform *)
-OS_CGPathAddArc_2=
-OS_CGPathAddArc_3=
-OS_CGPathAddArc_4=
-OS_CGPathAddArc_5=
-OS_CGPathAddArc_6=
-OS_CGPathAddArc_7=
-
-OS_CGPathAddCurveToPoint=
-OS_CGPathAddCurveToPoint_0=cast=(CGMutablePathRef)
-OS_CGPathAddCurveToPoint_1=cast=(const CGAffineTransform *)
-OS_CGPathAddCurveToPoint_2=
-OS_CGPathAddCurveToPoint_3=
-OS_CGPathAddCurveToPoint_4=
-OS_CGPathAddCurveToPoint_5=
-OS_CGPathAddCurveToPoint_6=
-OS_CGPathAddCurveToPoint_7=
-
-OS_CGPathAddLineToPoint=
-OS_CGPathAddLineToPoint_0=cast=CGMutablePathRef
-OS_CGPathAddLineToPoint_1=cast=const CGAffineTransform *
-OS_CGPathAddLineToPoint_2=
-OS_CGPathAddLineToPoint_3=
-
-OS_CGPathAddPath=
-OS_CGPathAddPath_0=cast=(CGMutablePathRef)
-OS_CGPathAddPath_1=cast=const CGAffineTransform *
-OS_CGPathAddPath_2=cast=CGPathRef
-
-OS_CGPathAddQuadCurveToPoint=
-OS_CGPathAddQuadCurveToPoint_0=cast=(CGMutablePathRef)
-OS_CGPathAddQuadCurveToPoint_1=cast=(const CGAffineTransform *)
-OS_CGPathAddQuadCurveToPoint_2=
-OS_CGPathAddQuadCurveToPoint_3=
-OS_CGPathAddQuadCurveToPoint_4=
-OS_CGPathAddQuadCurveToPoint_5=
-
-OS_CGPathAddRect=
-OS_CGPathAddRect_0=cast=(CGMutablePathRef)
-OS_CGPathAddRect_1=cast=const CGAffineTransform *
-OS_CGPathAddRect_2=flags=struct
-
-OS_CGPathApply=
-OS_CGPathApply_0=cast=CGPathRef
-OS_CGPathApply_1=cast=void *
-OS_CGPathApply_2=cast=CGPathApplierFunction
-
-OS_CGPathCloseSubpath=
-OS_CGPathCloseSubpath_0=cast=(CGMutablePathRef)
-
-OS_CGPathCreateMutable=
-
-OS_CGPathGetBoundingBox=flags=no_gen
-OS_CGPathGetBoundingBox_0=cast=CGPathRef
-OS_CGPathGetBoundingBox_1=
-
-OS_CGPathGetCurrentPoint=flags=no_gen
-OS_CGPathGetCurrentPoint_0=cast=CGPathRef
-OS_CGPathGetCurrentPoint_1=
-
-OS_CGPathIsEmpty=
-OS_CGPathIsEmpty_0=cast=CGPathRef
-
-OS_CGPathMoveToPoint=
-OS_CGPathMoveToPoint_0=cast=CGMutablePathRef
-OS_CGPathMoveToPoint_1=cast=const CGAffineTransform *
-OS_CGPathMoveToPoint_2=
-OS_CGPathMoveToPoint_3=
-
-OS_CGPathRelease=
-OS_CGPathRelease_0=cast=CGPathRef
-
-OS_CGPatternCreate=
-OS_CGPatternCreate_0=cast=void *
-OS_CGPatternCreate_1=flags=struct
-OS_CGPatternCreate_2=cast=CGAffineTransform *,flags=struct
-OS_CGPatternCreate_3=
-OS_CGPatternCreate_4=
-OS_CGPatternCreate_5=cast=CGPatternTiling
-OS_CGPatternCreate_6=
-OS_CGPatternCreate_7=cast=(const CGPatternCallbacks *)
-
-OS_CGPatternRelease=
-OS_CGPatternRelease_0=cast=CGPatternRef
-
-OS_CGPointApplyAffineTransform=flags=no_gen
-OS_CGPointApplyAffineTransform_0=
-OS_CGPointApplyAffineTransform_1=
-OS_CGPointApplyAffineTransform_2=
-
-OS_CGPostKeyboardEvent=
-OS_CGPostKeyboardEvent_0=cast=(CGCharCode)
-OS_CGPostKeyboardEvent_1=cast=CGKeyCode
-OS_CGPostKeyboardEvent_2=cast=boolean_t
-
-OS_CGPostMouseEvent=
-OS_CGPostMouseEvent_0=flags=struct
-OS_CGPostMouseEvent_1=cast=boolean_t
-OS_CGPostMouseEvent_2=
-OS_CGPostMouseEvent_3=cast=boolean_t
-OS_CGPostMouseEvent_4=cast=boolean_t
-OS_CGPostMouseEvent_5=cast=boolean_t
-
-OS_CGRectContainsPoint=
-OS_CGRectContainsPoint_0=flags=struct
-OS_CGRectContainsPoint_1=flags=struct
-
-OS_CGShadingCreateAxial=
-OS_CGShadingCreateAxial_0=cast=CGColorSpaceRef
-OS_CGShadingCreateAxial_1=flags=struct
-OS_CGShadingCreateAxial_2=flags=struct
-OS_CGShadingCreateAxial_3=cast=CGFunctionRef
-OS_CGShadingCreateAxial_4=
-OS_CGShadingCreateAxial_5=
-
-OS_CGShadingCreateRadial=
-OS_CGShadingCreateRadial_0=cast=CGColorSpaceRef
-OS_CGShadingCreateRadial_1=flags=struct
-OS_CGShadingCreateRadial_2=
-OS_CGShadingCreateRadial_3=flags=struct
-OS_CGShadingCreateRadial_4=
-OS_CGShadingCreateRadial_5=cast=CGFunctionRef
-OS_CGShadingCreateRadial_6=
-OS_CGShadingCreateRadial_7=
-
-OS_CGShadingRelease=
-OS_CGShadingRelease_0=cast=CGShadingRef
-
-OS_CGWarpMouseCursorPosition=
-OS_CGWarpMouseCursorPosition_0=flags=struct
-
-OS_CPSEnableForegroundOperation=
-OS_CPSEnableForegroundOperation_0=
-OS_CPSEnableForegroundOperation_1=
-OS_CPSEnableForegroundOperation_2=
-OS_CPSEnableForegroundOperation_3=
-OS_CPSEnableForegroundOperation_4=
-
-OS_CPSSetProcessName=
-OS_CPSSetProcessName_0=
-OS_CPSSetProcessName_1=
-
-OS_CalcMenuSize=
-OS_CalcMenuSize_0=cast=MenuRef
-
-OS_Call=
-OS_Call_0=
-OS_Call_1=
-OS_Call_2=
-
-OS_CallNextEventHandler=
-OS_CallNextEventHandler_0=cast=(EventHandlerCallRef)
-OS_CallNextEventHandler_1=cast=(EventRef)
-
-OS_CancelMenuTracking=
-OS_CancelMenuTracking_0=cast=MenuRef
-OS_CancelMenuTracking_1=
-OS_CancelMenuTracking_2=
-
-OS_ChangeWindowAttributes=
-OS_ChangeWindowAttributes_0=cast=WindowRef
-OS_ChangeWindowAttributes_1=cast=WindowAttributes
-OS_ChangeWindowAttributes_2=cast=WindowAttributes
-
-OS_CharWidth=
-OS_CharWidth_0=cast=(CharParameter)
-
-OS_ClearCurrentScrap=
-
-OS_ClearKeyboardFocus=
-OS_ClearKeyboardFocus_0=cast=(WindowRef)
-
-OS_ClearMenuBar=
-
-OS_ClipCGContextToRegion=
-OS_ClipCGContextToRegion_0=cast=(CGContextRef)
-OS_ClipCGContextToRegion_1=cast=(const Rect *)
-OS_ClipCGContextToRegion_2=cast=(RgnHandle)
-
-OS_CloseDataBrowserContainer=
-OS_CloseDataBrowserContainer_0=cast=(ControlRef)
-OS_CloseDataBrowserContainer_1=cast=(DataBrowserItemID)
-
-OS_ClosePoly=
-
-OS_CloseRgn=
-OS_CloseRgn_0=cast=(RgnHandle)
-
-OS_CollapseWindow=
-OS_CollapseWindow_0=cast=(WindowRef)
-OS_CollapseWindow_1=cast=(Boolean)
-
-OS_ConvertEventRefToEventRecord=
-OS_ConvertEventRefToEventRecord_0=cast=(EventRef)
-OS_ConvertEventRefToEventRecord_1=cast=(EventRecord *)
-
-OS_ConvertFromPStringToUnicode=
-OS_ConvertFromPStringToUnicode_0=cast=TextToUnicodeInfo
-OS_ConvertFromPStringToUnicode_1=cast=ConstStr255Param
-OS_ConvertFromPStringToUnicode_2=
-OS_ConvertFromPStringToUnicode_3=cast=ByteCount *
-OS_ConvertFromPStringToUnicode_4=
-
-OS_ConvertFromUnicodeToPString=
-OS_ConvertFromUnicodeToPString_0=cast=UnicodeToTextInfo
-OS_ConvertFromUnicodeToPString_1=
-OS_ConvertFromUnicodeToPString_2=cast=ConstUniCharArrayPtr
-OS_ConvertFromUnicodeToPString_3=cast=(unsigned char *)
-
-OS_CopyBits=
-OS_CopyBits_0=cast=(const BitMap *)
-OS_CopyBits_1=cast=(const BitMap *)
-OS_CopyBits_2=cast=(const Rect *)
-OS_CopyBits_3=cast=(const Rect *)
-OS_CopyBits_4=cast=(short)
-OS_CopyBits_5=cast=(RgnHandle)
-
-OS_CopyControlTitleAsCFString=
-OS_CopyControlTitleAsCFString_0=cast=(ControlRef)
-OS_CopyControlTitleAsCFString_1=cast=(CFStringRef *)
-
-OS_CopyDeepMask=
-OS_CopyDeepMask_0=cast=(const BitMap *)
-OS_CopyDeepMask_1=cast=(const BitMap *)
-OS_CopyDeepMask_2=cast=(const BitMap *)
-OS_CopyDeepMask_3=cast=(const Rect *)
-OS_CopyDeepMask_4=cast=(const Rect *)
-OS_CopyDeepMask_5=cast=(const Rect *)
-OS_CopyDeepMask_6=cast=(short)
-OS_CopyDeepMask_7=cast=(RgnHandle)
-
-OS_CopyMenuItemTextAsCFString=
-OS_CopyMenuItemTextAsCFString_0=cast=(MenuRef)
-OS_CopyMenuItemTextAsCFString_1=cast=(MenuItemIndex)
-OS_CopyMenuItemTextAsCFString_2=cast=(CFStringRef *)
-
-OS_CopyRgn=
-OS_CopyRgn_0=cast=(RgnHandle)
-OS_CopyRgn_1=cast=(RgnHandle)
-
-OS_CountDragItemFlavors=
-OS_CountDragItemFlavors_0=cast=(DragRef)
-OS_CountDragItemFlavors_1=cast=(DragItemRef)
-OS_CountDragItemFlavors_2=cast=(UInt16 *)
-
-OS_CountDragItems=
-OS_CountDragItems_0=cast=(DragRef)
-OS_CountDragItems_1=cast=(UInt16 *)
-
-OS_CountMenuItems=
-OS_CountMenuItems_0=cast=(MenuRef)
-
-OS_CountSubControls=
-OS_CountSubControls_0=cast=(ControlRef)
-OS_CountSubControls_1=cast=(UInt16 *)
-
-OS_CreateBevelButtonControl=
-OS_CreateBevelButtonControl_0=cast=(WindowRef)
-OS_CreateBevelButtonControl_1=cast=(const Rect *)
-OS_CreateBevelButtonControl_2=cast=(CFStringRef)
-OS_CreateBevelButtonControl_3=cast=(ControlBevelThickness)
-OS_CreateBevelButtonControl_4=cast=(ControlBevelButtonBehavior)
-OS_CreateBevelButtonControl_5=cast=(ControlButtonContentInfoPtr)
-OS_CreateBevelButtonControl_6=cast=(SInt16)
-OS_CreateBevelButtonControl_7=cast=(ControlBevelButtonMenuBehavior)
-OS_CreateBevelButtonControl_8=cast=(ControlBevelButtonMenuPlacement)
-OS_CreateBevelButtonControl_9=cast=(ControlRef *)
-
-OS_CreateCGContextForPort=
-OS_CreateCGContextForPort_0=cast=(CGrafPtr)
-OS_CreateCGContextForPort_1=cast=(CGContextRef *)
-
-OS_CreateCheckBoxControl=
-OS_CreateCheckBoxControl_0=cast=(WindowRef)
-OS_CreateCheckBoxControl_1=cast=(const Rect *)
-OS_CreateCheckBoxControl_2=cast=(CFStringRef)
-OS_CreateCheckBoxControl_3=cast=(SInt32)
-OS_CreateCheckBoxControl_4=cast=(Boolean)
-OS_CreateCheckBoxControl_5=cast=(ControlRef *)
-
-OS_CreateDataBrowserControl=
-OS_CreateDataBrowserControl_0=cast=(WindowRef)
-OS_CreateDataBrowserControl_1=cast=(const Rect *)
-OS_CreateDataBrowserControl_2=cast=(DataBrowserViewStyle)
-OS_CreateDataBrowserControl_3=cast=(ControlRef *)
-
-OS_CreateEditUnicodeTextControl=
-OS_CreateEditUnicodeTextControl_0=cast=(WindowRef)
-OS_CreateEditUnicodeTextControl_1=
-OS_CreateEditUnicodeTextControl_2=cast=(CFStringRef)
-OS_CreateEditUnicodeTextControl_3=
-OS_CreateEditUnicodeTextControl_4=
-OS_CreateEditUnicodeTextControl_5=cast=(ControlRef *)
-
-OS_CreateEvent=
-OS_CreateEvent_0=cast=(CFAllocatorRef)
-OS_CreateEvent_1=cast=(UInt32)
-OS_CreateEvent_2=cast=(UInt32)
-OS_CreateEvent_3=cast=(EventTime)
-OS_CreateEvent_4=cast=(EventAttributes)
-OS_CreateEvent_5=cast=(EventRef *)
-
-OS_CreateGroupBoxControl=
-OS_CreateGroupBoxControl_0=cast=(WindowRef)
-OS_CreateGroupBoxControl_1=cast=(const Rect *)
-OS_CreateGroupBoxControl_2=cast=(CFStringRef)
-OS_CreateGroupBoxControl_3=cast=(Boolean)
-OS_CreateGroupBoxControl_4=cast=(ControlRef *)
-
-OS_CreateIconControl=
-OS_CreateIconControl_0=cast=(WindowRef)
-OS_CreateIconControl_1=
-OS_CreateIconControl_2=
-OS_CreateIconControl_3=
-OS_CreateIconControl_4=cast=(ControlRef *)
-
-OS_CreateLittleArrowsControl=
-OS_CreateLittleArrowsControl_0=cast=WindowRef
-OS_CreateLittleArrowsControl_1=cast=const Rect *
-OS_CreateLittleArrowsControl_2=
-OS_CreateLittleArrowsControl_3=
-OS_CreateLittleArrowsControl_4=
-OS_CreateLittleArrowsControl_5=
-OS_CreateLittleArrowsControl_6=cast=(ControlRef *)
-
-OS_CreateNewMenu=
-OS_CreateNewMenu_0=cast=(MenuID)
-OS_CreateNewMenu_1=cast=(MenuAttributes)
-OS_CreateNewMenu_2=cast=(MenuRef *)
-
-OS_CreateNewWindow=
-OS_CreateNewWindow_0=cast=(WindowClass)
-OS_CreateNewWindow_1=cast=(WindowAttributes)
-OS_CreateNewWindow_2=cast=(const Rect *)
-OS_CreateNewWindow_3=cast=(WindowRef *)
-
-OS_CreatePopupArrowControl=
-OS_CreatePopupArrowControl_0=cast=(WindowRef)
-OS_CreatePopupArrowControl_1=cast=(const Rect *)
-OS_CreatePopupArrowControl_2=cast=(ControlPopupArrowOrientation)
-OS_CreatePopupArrowControl_3=cast=(ControlPopupArrowSize)
-OS_CreatePopupArrowControl_4=cast=(ControlRef *)
-
-OS_CreatePopupButtonControl=
-OS_CreatePopupButtonControl_0=cast=(WindowRef)
-OS_CreatePopupButtonControl_1=
-OS_CreatePopupButtonControl_2=cast=(CFStringRef)
-OS_CreatePopupButtonControl_3=
-OS_CreatePopupButtonControl_4=
-OS_CreatePopupButtonControl_5=
-OS_CreatePopupButtonControl_6=
-OS_CreatePopupButtonControl_7=
-OS_CreatePopupButtonControl_8=cast=(ControlRef *)
-
-OS_CreateProgressBarControl=
-OS_CreateProgressBarControl_0=cast=(WindowRef)
-OS_CreateProgressBarControl_1=
-OS_CreateProgressBarControl_2=
-OS_CreateProgressBarControl_3=
-OS_CreateProgressBarControl_4=
-OS_CreateProgressBarControl_5=
-OS_CreateProgressBarControl_6=cast=(ControlRef *)
-
-OS_CreatePushButtonControl=
-OS_CreatePushButtonControl_0=cast=(WindowRef)
-OS_CreatePushButtonControl_1=cast=(const Rect *)
-OS_CreatePushButtonControl_2=cast=(CFStringRef)
-OS_CreatePushButtonControl_3=cast=(ControlRef *)
-
-OS_CreatePushButtonWithIconControl=
-OS_CreatePushButtonWithIconControl_0=cast=(WindowRef)
-OS_CreatePushButtonWithIconControl_1=
-OS_CreatePushButtonWithIconControl_2=cast=(CFStringRef)
-OS_CreatePushButtonWithIconControl_3=cast=(ControlButtonContentInfo *)
-OS_CreatePushButtonWithIconControl_4=cast=(ControlPushButtonIconAlignment)
-OS_CreatePushButtonWithIconControl_5=cast=(ControlRef *)
-
-OS_CreateRadioButtonControl=
-OS_CreateRadioButtonControl_0=cast=(WindowRef)
-OS_CreateRadioButtonControl_1=cast=(const Rect *)
-OS_CreateRadioButtonControl_2=cast=(CFStringRef)
-OS_CreateRadioButtonControl_3=cast=(SInt32)
-OS_CreateRadioButtonControl_4=cast=(Boolean)
-OS_CreateRadioButtonControl_5=cast=(ControlRef *)
-
-OS_CreateRootControl=
-OS_CreateRootControl_0=cast=(WindowRef)
-OS_CreateRootControl_1=cast=(ControlRef *)
-
-OS_CreateScrollBarControl=
-OS_CreateScrollBarControl_0=cast=(WindowRef)
-OS_CreateScrollBarControl_1=
-OS_CreateScrollBarControl_2=
-OS_CreateScrollBarControl_3=
-OS_CreateScrollBarControl_4=
-OS_CreateScrollBarControl_5=
-OS_CreateScrollBarControl_6=
-OS_CreateScrollBarControl_7=cast=(ControlActionUPP)
-OS_CreateScrollBarControl_8=cast=(ControlRef *)
-
-OS_CreateSeparatorControl=
-OS_CreateSeparatorControl_0=cast=(WindowRef)
-OS_CreateSeparatorControl_1=
-OS_CreateSeparatorControl_2=cast=(ControlRef *)
-
-OS_CreateSliderControl=
-OS_CreateSliderControl_0=cast=(WindowRef)
-OS_CreateSliderControl_1=cast=(const Rect *)
-OS_CreateSliderControl_2=cast=(SInt32)
-OS_CreateSliderControl_3=cast=(SInt32)
-OS_CreateSliderControl_4=cast=(SInt32)
-OS_CreateSliderControl_5=cast=(ControlSliderOrientation)
-OS_CreateSliderControl_6=cast=(UInt16)
-OS_CreateSliderControl_7=cast=(Boolean)
-OS_CreateSliderControl_8=cast=(ControlActionUPP)
-OS_CreateSliderControl_9=cast=(ControlRef *)
-
-OS_CreateStandardAlert=
-OS_CreateStandardAlert_0=cast=(AlertType)
-OS_CreateStandardAlert_1=cast=(CFStringRef)
-OS_CreateStandardAlert_2=cast=(CFStringRef)
-OS_CreateStandardAlert_3=cast=(const AlertStdCFStringAlertParamRec *)
-OS_CreateStandardAlert_4=cast=(DialogRef *)
-
-OS_CreateStaticTextControl=
-OS_CreateStaticTextControl_0=cast=(WindowRef)
-OS_CreateStaticTextControl_1=
-OS_CreateStaticTextControl_2=cast=(CFStringRef)
-OS_CreateStaticTextControl_3=cast=(const ControlFontStyleRec *)
-OS_CreateStaticTextControl_4=cast=(ControlRef *)
-
-OS_CreateTabsControl=
-OS_CreateTabsControl_0=cast=(WindowRef)
-OS_CreateTabsControl_1=cast=(const Rect *)
-OS_CreateTabsControl_2=cast=(ControlTabSize)
-OS_CreateTabsControl_3=cast=(ControlTabDirection)
-OS_CreateTabsControl_4=cast=(UInt16)
-OS_CreateTabsControl_5=cast=(const ControlTabEntry *)
-OS_CreateTabsControl_6=cast=(ControlRef *)
-
-OS_CreateTextToUnicodeInfoByEncoding=
-OS_CreateTextToUnicodeInfoByEncoding_0=cast=(TextEncoding)
-OS_CreateTextToUnicodeInfoByEncoding_1=cast=(TextToUnicodeInfo *)
-
-OS_CreateUnicodeToTextInfoByEncoding=
-OS_CreateUnicodeToTextInfoByEncoding_0=cast=(TextEncoding)
-OS_CreateUnicodeToTextInfoByEncoding_1=cast=(UnicodeToTextInfo *)
-
-OS_CreateUserPaneControl=
-OS_CreateUserPaneControl_0=cast=(WindowRef)
-OS_CreateUserPaneControl_1=
-OS_CreateUserPaneControl_2=
-OS_CreateUserPaneControl_3=cast=(ControlRef *)
-
-OS_CreateWindowGroup=
-OS_CreateWindowGroup_0=cast=(WindowGroupAttributes)
-OS_CreateWindowGroup_1=cast=(WindowGroupRef *)
-
-OS_DMGetFirstScreenDevice=
-OS_DMGetFirstScreenDevice_0=cast=(Boolean)
-
-OS_DMGetNextScreenDevice=
-OS_DMGetNextScreenDevice_0=cast=(GDHandle)
-OS_DMGetNextScreenDevice_1=cast=(Boolean)
-
-OS_DataBrowserChangeAttributes=flags=dynamic
-OS_DataBrowserChangeAttributes_0=
-OS_DataBrowserChangeAttributes_1=
-OS_DataBrowserChangeAttributes_2=
-
-OS_DataBrowserGetAttributes=flags=dynamic
-OS_DataBrowserGetAttributes_0=
-OS_DataBrowserGetAttributes_1=
-
-OS_DataBrowserGetMetric=flags=dynamic
-OS_DataBrowserGetMetric_0=
-OS_DataBrowserGetMetric_1=
-OS_DataBrowserGetMetric_2=
-OS_DataBrowserGetMetric_3=
-
-OS_DataBrowserSetMetric=flags=dynamic
-OS_DataBrowserSetMetric_0=
-OS_DataBrowserSetMetric_1=
-OS_DataBrowserSetMetric_2=
-OS_DataBrowserSetMetric_3=
-
-OS_DeleteGlobalRef=flags=no_gen
-OS_DeleteGlobalRef_0=
-
-OS_DeleteMenu=
-OS_DeleteMenu_0=cast=(MenuID)
-
-OS_DeleteMenuItem=
-OS_DeleteMenuItem_0=cast=(MenuRef)
-OS_DeleteMenuItem_1=cast=(short)
-
-OS_DeleteMenuItems=
-OS_DeleteMenuItems_0=cast=(MenuRef)
-OS_DeleteMenuItems_1=cast=(MenuItemIndex)
-OS_DeleteMenuItems_2=cast=(ItemCount)
-
-OS_DiffRgn=
-OS_DiffRgn_0=cast=(RgnHandle)
-OS_DiffRgn_1=cast=(RgnHandle)
-OS_DiffRgn_2=cast=(RgnHandle)
-
-OS_DisableControl=
-OS_DisableControl_0=cast=(ControlRef)
-
-OS_DisableMenuCommand=
-OS_DisableMenuCommand_0=cast=(MenuRef)
-OS_DisableMenuCommand_1=cast=(MenuCommand)
-
-OS_DisableMenuItem=
-OS_DisableMenuItem_0=cast=(MenuRef)
-OS_DisableMenuItem_1=cast=(MenuItemIndex)
-
-OS_DisposeControl=
-OS_DisposeControl_0=cast=(ControlRef)
-
-OS_DisposeDrag=
-OS_DisposeDrag_0=cast=(DragRef)
-
-OS_DisposeGWorld=
-OS_DisposeGWorld_0=cast=(GWorldPtr)
-
-OS_DisposeHandle=
-OS_DisposeHandle_0=cast=(Handle)
-
-OS_DisposeMenu=
-OS_DisposeMenu_0=cast=(MenuRef)
-
-OS_DisposePtr=
-OS_DisposePtr_0=cast=(Ptr)
-
-OS_DisposeRgn=
-OS_DisposeRgn_0=cast=(RgnHandle)
-
-OS_DisposeTextToUnicodeInfo=
-OS_DisposeTextToUnicodeInfo_0=cast=TextToUnicodeInfo *
-
-OS_DisposeUnicodeToTextInfo=
-OS_DisposeUnicodeToTextInfo_0=cast=UnicodeToTextInfo *
-
-OS_DisposeWindow=
-OS_DisposeWindow_0=cast=(WindowRef)
-
-OS_DrawControlInCurrentPort=
-OS_DrawControlInCurrentPort_0=cast=(ControlRef)
-
-OS_DrawMenuBar=
-
-OS_DrawText=
-OS_DrawText_0=cast=(const void *)
-OS_DrawText_1=cast=(short)
-OS_DrawText_2=cast=(short)
-
-OS_DrawThemeButton=
-OS_DrawThemeButton_0=cast=(Rect *)
-OS_DrawThemeButton_1=cast=(ThemeButtonKind)
-OS_DrawThemeButton_2=cast=(const ThemeButtonDrawInfo *)
-OS_DrawThemeButton_3=cast=(const ThemeButtonDrawInfo *)
-OS_DrawThemeButton_4=cast=(ThemeEraseUPP)
-OS_DrawThemeButton_5=cast=(ThemeButtonDrawUPP)
-OS_DrawThemeButton_6=cast=(UInt32)
-
-OS_DrawThemeEditTextFrame=
-OS_DrawThemeEditTextFrame_0=cast=(const Rect *)
-OS_DrawThemeEditTextFrame_1=cast=(ThemeDrawState)
-
-OS_DrawThemeFocusRect=
-OS_DrawThemeFocusRect_0=cast=(const Rect *)
-OS_DrawThemeFocusRect_1=cast=(Boolean)
-
-OS_DrawThemePopupArrow=
-OS_DrawThemePopupArrow_0=
-OS_DrawThemePopupArrow_1=cast=ThemeArrowOrientation
-OS_DrawThemePopupArrow_2=cast=(ThemePopupArrowSize)
-OS_DrawThemePopupArrow_3=cast=(ThemeDrawState)
-OS_DrawThemePopupArrow_4=cast=(ThemeEraseUPP)
-OS_DrawThemePopupArrow_5=cast=(UInt32)
-
-OS_DrawThemeSeparator=
-OS_DrawThemeSeparator_0=cast=(const Rect *)
-OS_DrawThemeSeparator_1=cast=(ThemeDrawState)
-
-OS_DrawThemeTextBox=
-OS_DrawThemeTextBox_0=cast=(CFStringRef)
-OS_DrawThemeTextBox_1=cast=(ThemeFontID)
-OS_DrawThemeTextBox_2=cast=(ThemeDrawState)
-OS_DrawThemeTextBox_3=cast=(Boolean)
-OS_DrawThemeTextBox_4=cast=(const Rect *)
-OS_DrawThemeTextBox_5=cast=(SInt16)
-OS_DrawThemeTextBox_6=cast=(void *)
-
-OS_EmbedControl=
-OS_EmbedControl_0=cast=(ControlRef)
-OS_EmbedControl_1=cast=(ControlRef)
-
-OS_EmptyRect=
-OS_EmptyRect_0=cast=(const Rect *)
-
-OS_EmptyRgn=
-OS_EmptyRgn_0=cast=(RgnHandle)
-
-OS_EnableControl=
-OS_EnableControl_0=cast=(ControlRef)
-
-OS_EnableMenuCommand=
-OS_EnableMenuCommand_0=cast=(MenuRef)
-OS_EnableMenuCommand_1=cast=(MenuCommand)
-
-OS_EnableMenuItem=
-OS_EnableMenuItem_0=cast=(MenuRef)
-OS_EnableMenuItem_1=cast=(MenuItemIndex)
-
-OS_EndUpdate=
-OS_EndUpdate_0=cast=(WindowRef)
-
-OS_EqualRect=
-OS_EqualRect_0=
-OS_EqualRect_1=
-
-OS_EraseRect=
-OS_EraseRect_0=cast=(const Rect *)
-
-OS_EraseRgn=
-OS_EraseRgn_0=cast=(RgnHandle)
-
-OS_FMCreateFontFamilyInstanceIterator=
-OS_FMCreateFontFamilyInstanceIterator_0=cast=(FMFontFamily)
-OS_FMCreateFontFamilyInstanceIterator_1=cast=(FMFontFamilyInstanceIterator *)
-
-OS_FMCreateFontFamilyIterator=
-OS_FMCreateFontFamilyIterator_0=cast=(const FMFilter *)
-OS_FMCreateFontFamilyIterator_1=cast=(void *)
-OS_FMCreateFontFamilyIterator_2=cast=(OptionBits)
-OS_FMCreateFontFamilyIterator_3=cast=(FMFontFamilyIterator *)
-
-OS_FMDisposeFontFamilyInstanceIterator=
-OS_FMDisposeFontFamilyInstanceIterator_0=cast=(FMFontFamilyInstanceIterator *)
-
-OS_FMDisposeFontFamilyIterator=
-OS_FMDisposeFontFamilyIterator_0=cast=(FMFontFamilyIterator *)
-
-OS_FMGetATSFontRefFromFont=
-OS_FMGetATSFontRefFromFont_0=
-
-OS_FMGetFontFamilyFromName=
-OS_FMGetFontFamilyFromName_0=cast=(ConstStr255Param)
-
-OS_FMGetFontFamilyInstanceFromFont=
-OS_FMGetFontFamilyInstanceFromFont_0=cast=FMFont
-OS_FMGetFontFamilyInstanceFromFont_1=cast=FMFontFamily *
-OS_FMGetFontFamilyInstanceFromFont_2=cast=FMFontStyle *
-
-OS_FMGetFontFamilyName=
-OS_FMGetFontFamilyName_0=cast=FMFontFamily
-OS_FMGetFontFamilyName_1=cast=(unsigned char *)
-
-OS_FMGetFontFromFontFamilyInstance=
-OS_FMGetFontFromFontFamilyInstance_0=cast=(FMFontFamily)
-OS_FMGetFontFromFontFamilyInstance_1=cast=(FMFontStyle)
-OS_FMGetFontFromFontFamilyInstance_2=cast=(FMFont *)
-OS_FMGetFontFromFontFamilyInstance_3=cast=(FMFontStyle *)
-
-OS_FMGetNextFontFamily=
-OS_FMGetNextFontFamily_0=cast=(FMFontFamilyIterator *)
-OS_FMGetNextFontFamily_1=cast=(FMFontFamily *)
-
-OS_FMGetNextFontFamilyInstance=
-OS_FMGetNextFontFamilyInstance_0=cast=(FMFontFamilyInstanceIterator *)
-OS_FMGetNextFontFamilyInstance_1=cast=(FMFont *)
-OS_FMGetNextFontFamilyInstance_2=cast=(FMFontStyle *)
-OS_FMGetNextFontFamilyInstance_3=cast=(FMFontSize *)
-
-OS_FPIsFontPanelVisible=
-
-OS_FPShowHideFontPanel=
-
-OS_FSGetCatalogInfo=
-OS_FSGetCatalogInfo_0=cast=(FSRef *)
-OS_FSGetCatalogInfo_1=cast=(FSCatalogInfoBitmap)
-OS_FSGetCatalogInfo_2=cast=(FSCatalogInfo *)
-OS_FSGetCatalogInfo_3=cast=(HFSUniStr255 *)
-OS_FSGetCatalogInfo_4=cast=(FSSpec *)
-OS_FSGetCatalogInfo_5=cast=(FSRef *)
-
-OS_FSpGetFInfo=
-OS_FSpGetFInfo_0=cast=(FSSpec *)
-OS_FSpGetFInfo_1=cast=(FInfo *)
-
-OS_FSpMakeFSRef=
-OS_FSpMakeFSRef_0=cast=(const FSSpec *)
-OS_FSpMakeFSRef_1=cast=(FSRef *)
-
-OS_FetchFontInfo=
-OS_FetchFontInfo_0=
-OS_FetchFontInfo_1=
-OS_FetchFontInfo_2=
-OS_FetchFontInfo_3=
-
-OS_FindWindow=
-OS_FindWindow_0=cast=(Point *),flags=struct
-OS_FindWindow_1=cast=(WindowRef *)
-
-OS_Fix2Long=
-OS_Fix2Long_0=
-
-OS_Fix2X=
-OS_Fix2X_0=cast=Fixed
-
-OS_FrameOval=
-OS_FrameOval_0=cast=(const Rect *)
-
-OS_FramePoly=
-OS_FramePoly_0=cast=(PolyHandle)
-
-OS_FrameRect=
-OS_FrameRect_0=cast=(const Rect *)
-
-OS_FrameRoundRect=
-OS_FrameRoundRect_0=cast=(const Rect *)
-OS_FrameRoundRect_1=cast=(short)
-OS_FrameRoundRect_2=cast=(short)
-
-OS_FrontWindow=
-
-OS_Gestalt=
-OS_Gestalt_0=cast=OSType
-OS_Gestalt_1=cast=long *
-
-OS_GetAppFont=
-
-OS_GetApplicationEventTarget=
-
-OS_GetAvailableWindowAttributes=
-OS_GetAvailableWindowAttributes_0=cast=(WindowClass)
-
-OS_GetAvailableWindowPositioningBounds=
-OS_GetAvailableWindowPositioningBounds_0=cast=(GDHandle)
-OS_GetAvailableWindowPositioningBounds_1=cast=(Rect *)
-
-OS_GetBestControlRect=
-OS_GetBestControlRect_0=cast=(ControlRef)
-OS_GetBestControlRect_1=cast=(Rect *)
-OS_GetBestControlRect_2=cast=(SInt16 *)
-
-OS_GetCaretTime=
-
-OS_GetClip=
-OS_GetClip_0=cast=(RgnHandle)
-
-OS_GetControl32BitMaximum=
-OS_GetControl32BitMaximum_0=cast=(ControlRef)
-
-OS_GetControl32BitMinimum=
-OS_GetControl32BitMinimum_0=cast=(ControlRef)
-
-OS_GetControl32BitValue=
-OS_GetControl32BitValue_0=cast=(ControlRef)
-
-OS_GetControlAction=
-OS_GetControlAction_0=cast=ControlRef
-
-OS_GetControlBounds=
-OS_GetControlBounds_0=cast=(ControlRef)
-OS_GetControlBounds_1=cast=(Rect *)
-
-OS_GetControlData__ISIILorg_eclipse_swt_internal_carbon_ControlEditTextSelectionRec_2_3I=
-OS_GetControlData__ISIILorg_eclipse_swt_internal_carbon_ControlEditTextSelectionRec_2_3I_0=cast=(ControlRef)
-OS_GetControlData__ISIILorg_eclipse_swt_internal_carbon_ControlEditTextSelectionRec_2_3I_1=cast=(ControlPartCode)
-OS_GetControlData__ISIILorg_eclipse_swt_internal_carbon_ControlEditTextSelectionRec_2_3I_2=cast=(ResType)
-OS_GetControlData__ISIILorg_eclipse_swt_internal_carbon_ControlEditTextSelectionRec_2_3I_3=cast=(Size)
-OS_GetControlData__ISIILorg_eclipse_swt_internal_carbon_ControlEditTextSelectionRec_2_3I_4=cast=(void *)
-OS_GetControlData__ISIILorg_eclipse_swt_internal_carbon_ControlEditTextSelectionRec_2_3I_5=
-
-OS_GetControlData__ISIILorg_eclipse_swt_internal_carbon_ControlFontStyleRec_2_3I=
-OS_GetControlData__ISIILorg_eclipse_swt_internal_carbon_ControlFontStyleRec_2_3I_0=cast=(ControlRef)
-OS_GetControlData__ISIILorg_eclipse_swt_internal_carbon_ControlFontStyleRec_2_3I_1=cast=(ControlPartCode)
-OS_GetControlData__ISIILorg_eclipse_swt_internal_carbon_ControlFontStyleRec_2_3I_2=cast=(ResType)
-OS_GetControlData__ISIILorg_eclipse_swt_internal_carbon_ControlFontStyleRec_2_3I_3=cast=(Size)
-OS_GetControlData__ISIILorg_eclipse_swt_internal_carbon_ControlFontStyleRec_2_3I_4=cast=(void *)
-OS_GetControlData__ISIILorg_eclipse_swt_internal_carbon_ControlFontStyleRec_2_3I_5=cast=(Size *)
-
-OS_GetControlData__ISIILorg_eclipse_swt_internal_carbon_Rect_2_3I=
-OS_GetControlData__ISIILorg_eclipse_swt_internal_carbon_Rect_2_3I_0=cast=(ControlRef)
-OS_GetControlData__ISIILorg_eclipse_swt_internal_carbon_Rect_2_3I_1=cast=(ControlPartCode)
-OS_GetControlData__ISIILorg_eclipse_swt_internal_carbon_Rect_2_3I_2=cast=(ResType)
-OS_GetControlData__ISIILorg_eclipse_swt_internal_carbon_Rect_2_3I_3=cast=(Size)
-OS_GetControlData__ISIILorg_eclipse_swt_internal_carbon_Rect_2_3I_4=cast=(void *)
-OS_GetControlData__ISIILorg_eclipse_swt_internal_carbon_Rect_2_3I_5=cast=(Size *)
-
-OS_GetControlData__ISII_3B_3I=
-OS_GetControlData__ISII_3B_3I_0=cast=(ControlRef)
-OS_GetControlData__ISII_3B_3I_1=cast=(ControlPartCode)
-OS_GetControlData__ISII_3B_3I_2=cast=(ResType)
-OS_GetControlData__ISII_3B_3I_3=cast=(Size)
-OS_GetControlData__ISII_3B_3I_4=cast=(void *)
-OS_GetControlData__ISII_3B_3I_5=cast=(Size *)
-
-OS_GetControlData__ISII_3I_3I=
-OS_GetControlData__ISII_3I_3I_0=cast=(ControlRef)
-OS_GetControlData__ISII_3I_3I_1=cast=(ControlPartCode)
-OS_GetControlData__ISII_3I_3I_2=cast=(ResType)
-OS_GetControlData__ISII_3I_3I_3=cast=(Size)
-OS_GetControlData__ISII_3I_3I_4=cast=(void *)
-OS_GetControlData__ISII_3I_3I_5=cast=(Size *)
-
-OS_GetControlData__ISII_3S_3I=
-OS_GetControlData__ISII_3S_3I_0=cast=(ControlRef)
-OS_GetControlData__ISII_3S_3I_1=cast=(ControlPartCode)
-OS_GetControlData__ISII_3S_3I_2=cast=(ResType)
-OS_GetControlData__ISII_3S_3I_3=cast=(Size)
-OS_GetControlData__ISII_3S_3I_4=cast=(void *)
-OS_GetControlData__ISII_3S_3I_5=cast=(Size *)
-
-OS_GetControlEventTarget=
-OS_GetControlEventTarget_0=cast=(ControlRef)
-
-OS_GetControlFeatures=
-OS_GetControlFeatures_0=cast=(ControlRef)
-OS_GetControlFeatures_1=cast=UInt32 *
-
-OS_GetControlKind=
-OS_GetControlKind_0=cast=ControlRef
-OS_GetControlKind_1=
-
-OS_GetControlOwner=
-OS_GetControlOwner_0=cast=(ControlRef)
-
-OS_GetControlProperty=
-OS_GetControlProperty_0=cast=(ControlRef)
-OS_GetControlProperty_1=
-OS_GetControlProperty_2=
-OS_GetControlProperty_3=
-OS_GetControlProperty_4=cast=UInt32 *
-OS_GetControlProperty_5=cast=void *
-
-OS_GetControlReference=
-OS_GetControlReference_0=cast=(ControlRef)
-
-OS_GetControlRegion=
-OS_GetControlRegion_0=cast=(ControlRef)
-OS_GetControlRegion_1=cast=(ControlPartCode)
-OS_GetControlRegion_2=cast=(RgnHandle)
-
-OS_GetControlValue=
-OS_GetControlValue_0=cast=(ControlRef)
-
-OS_GetControlViewSize=
-OS_GetControlViewSize_0=cast=(ControlRef)
-
-OS_GetCurrentEventButtonState=
-
-OS_GetCurrentEventKeyModifiers=
-
-OS_GetCurrentEventLoop=
-
-OS_GetCurrentEventQueue=
-
-OS_GetCurrentProcess=
-OS_GetCurrentProcess_0=cast=(ProcessSerialNumber *)
-
-OS_GetCurrentScrap=
-OS_GetCurrentScrap_0=cast=(ScrapRef *)
-
-OS_GetDataBrowserCallbacks=
-OS_GetDataBrowserCallbacks_0=cast=(ControlRef)
-OS_GetDataBrowserCallbacks_1=cast=(DataBrowserCallbacks *)
-
-OS_GetDataBrowserItemCount=
-OS_GetDataBrowserItemCount_0=cast=(ControlRef)
-OS_GetDataBrowserItemCount_1=cast=(DataBrowserItemID)
-OS_GetDataBrowserItemCount_2=cast=(Boolean)
-OS_GetDataBrowserItemCount_3=cast=(DataBrowserItemState)
-OS_GetDataBrowserItemCount_4=cast=(UInt32 *)
-
-OS_GetDataBrowserItemDataButtonValue=
-OS_GetDataBrowserItemDataButtonValue_0=cast=(ControlRef)
-OS_GetDataBrowserItemDataButtonValue_1=cast=ThemeButtonValue *
-
-OS_GetDataBrowserItemPartBounds=
-OS_GetDataBrowserItemPartBounds_0=cast=(ControlRef)
-OS_GetDataBrowserItemPartBounds_1=cast=(DataBrowserItemID)
-OS_GetDataBrowserItemPartBounds_2=cast=(DataBrowserPropertyID)
-OS_GetDataBrowserItemPartBounds_3=cast=(DataBrowserPropertyPart)
-OS_GetDataBrowserItemPartBounds_4=cast=(Rect *)
-
-OS_GetDataBrowserItemState=
-OS_GetDataBrowserItemState_0=cast=(ControlRef)
-OS_GetDataBrowserItemState_1=
-OS_GetDataBrowserItemState_2=cast=DataBrowserItemState *
-
-OS_GetDataBrowserItems=
-OS_GetDataBrowserItems_0=cast=(ControlRef)
-OS_GetDataBrowserItems_1=cast=(DataBrowserItemID)
-OS_GetDataBrowserItems_2=cast=(Boolean)
-OS_GetDataBrowserItems_3=cast=(DataBrowserItemState)
-OS_GetDataBrowserItems_4=cast=(Handle)
-
-OS_GetDataBrowserListViewDisclosureColumn=
-OS_GetDataBrowserListViewDisclosureColumn_0=cast=ControlRef
-OS_GetDataBrowserListViewDisclosureColumn_1=cast=(DataBrowserTableViewColumnID *)
-OS_GetDataBrowserListViewDisclosureColumn_2=cast=Boolean *
-
-OS_GetDataBrowserListViewHeaderBtnHeight=
-OS_GetDataBrowserListViewHeaderBtnHeight_0=cast=(ControlRef)
-OS_GetDataBrowserListViewHeaderBtnHeight_1=cast=UInt16 *
-
-OS_GetDataBrowserListViewHeaderDesc=
-OS_GetDataBrowserListViewHeaderDesc_0=cast=(ControlRef)
-OS_GetDataBrowserListViewHeaderDesc_1=cast=(DataBrowserTableViewColumnID)
-OS_GetDataBrowserListViewHeaderDesc_2=cast=(DataBrowserListViewHeaderDesc *)
-
-OS_GetDataBrowserPropertyFlags=
-OS_GetDataBrowserPropertyFlags_0=cast=(ControlRef)
-OS_GetDataBrowserPropertyFlags_1=cast=DataBrowserPropertyID
-OS_GetDataBrowserPropertyFlags_2=cast=(DataBrowserPropertyFlags *)
-
-OS_GetDataBrowserScrollBarInset=
-OS_GetDataBrowserScrollBarInset_0=cast=(ControlRef)
-OS_GetDataBrowserScrollBarInset_1=
-
-OS_GetDataBrowserScrollPosition=
-OS_GetDataBrowserScrollPosition_0=cast=(ControlRef)
-OS_GetDataBrowserScrollPosition_1=cast=(UInt32 *)
-OS_GetDataBrowserScrollPosition_2=cast=(UInt32 *)
-
-OS_GetDataBrowserSelectionAnchor=
-OS_GetDataBrowserSelectionAnchor_0=cast=(ControlRef)
-OS_GetDataBrowserSelectionAnchor_1=cast=(UInt32 *)
-OS_GetDataBrowserSelectionAnchor_2=cast=(UInt32 *)
-
-OS_GetDataBrowserSelectionFlags=
-OS_GetDataBrowserSelectionFlags_0=cast=(ControlRef)
-OS_GetDataBrowserSelectionFlags_1=cast=DataBrowserSelectionFlags *
-
-OS_GetDataBrowserSortProperty=
-OS_GetDataBrowserSortProperty_0=cast=(ControlRef)
-OS_GetDataBrowserSortProperty_1=cast=DataBrowserPropertyID *
-
-OS_GetDataBrowserTableViewColumnPosition=
-OS_GetDataBrowserTableViewColumnPosition_0=cast=(ControlRef)
-OS_GetDataBrowserTableViewColumnPosition_1=cast=(DataBrowserTableViewColumnID)
-OS_GetDataBrowserTableViewColumnPosition_2=cast=(DataBrowserTableViewColumnIndex *)
-
-OS_GetDataBrowserTableViewItemID=
-OS_GetDataBrowserTableViewItemID_0=cast=(ControlRef)
-OS_GetDataBrowserTableViewItemID_1=cast=(DataBrowserTableViewRowIndex)
-OS_GetDataBrowserTableViewItemID_2=cast=(DataBrowserItemID *)
-
-OS_GetDataBrowserTableViewItemRow=
-OS_GetDataBrowserTableViewItemRow_0=cast=(ControlRef)
-OS_GetDataBrowserTableViewItemRow_1=cast=(DataBrowserTableViewRowIndex)
-OS_GetDataBrowserTableViewItemRow_2=cast=(DataBrowserItemID *)
-
-OS_GetDataBrowserTableViewNamedColumnWidth=
-OS_GetDataBrowserTableViewNamedColumnWidth_0=cast=(ControlRef)
-OS_GetDataBrowserTableViewNamedColumnWidth_1=cast=(DataBrowserTableViewColumnID)
-OS_GetDataBrowserTableViewNamedColumnWidth_2=cast=(UInt16 *)
-
-OS_GetDataBrowserTableViewRowHeight=
-OS_GetDataBrowserTableViewRowHeight_0=cast=(ControlRef)
-OS_GetDataBrowserTableViewRowHeight_1=cast=(UInt16 *)
-
-OS_GetDblTime=
-
-OS_GetDefFontSize=
-
-OS_GetDeviceList=
-
-OS_GetDragAllowableActions=
-OS_GetDragAllowableActions_0=cast=(DragRef)
-OS_GetDragAllowableActions_1=cast=(DragActions *)
-
-OS_GetDragDropAction=
-OS_GetDragDropAction_0=cast=(DragRef)
-OS_GetDragDropAction_1=cast=(DragActions *)
-
-OS_GetDragItemReferenceNumber=
-OS_GetDragItemReferenceNumber_0=cast=(DragRef)
-OS_GetDragItemReferenceNumber_1=
-OS_GetDragItemReferenceNumber_2=cast=(DragItemRef *)
-
-OS_GetDragModifiers=
-OS_GetDragModifiers_0=cast=(DragRef)
-OS_GetDragModifiers_1=cast=(SInt16 *)
-OS_GetDragModifiers_2=cast=(SInt16 *)
-OS_GetDragModifiers_3=cast=(SInt16 *)
-
-OS_GetDragMouse=
-OS_GetDragMouse_0=cast=(DragRef)
-OS_GetDragMouse_1=cast=(Point *)
-OS_GetDragMouse_2=cast=(Point *)
-
-OS_GetEventClass=
-OS_GetEventClass_0=cast=(EventRef)
-
-OS_GetEventDispatcherTarget=
-
-OS_GetEventKind=
-OS_GetEventKind_0=cast=(EventRef)
-
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_CGPoint_2=
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_CGPoint_2_0=cast=(EventRef)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_CGPoint_2_1=cast=(EventParamName)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_CGPoint_2_2=cast=(EventParamType)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_CGPoint_2_3=cast=(EventParamType *)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_CGPoint_2_4=cast=(UInt32)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_CGPoint_2_5=cast=(UInt32 *)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_CGPoint_2_6=cast=(void *)
-
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_CGRect_2=
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_CGRect_2_0=cast=EventRef
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_CGRect_2_1=cast=EventParamName
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_CGRect_2_2=cast=EventParamType
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_CGRect_2_3=cast=EventParamType *
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_CGRect_2_4=cast=(UInt32)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_CGRect_2_5=cast=UInt32 *
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_CGRect_2_6=cast=void *
-
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_HICommand_2=
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_HICommand_2_0=cast=(EventRef)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_HICommand_2_1=cast=(EventParamName)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_HICommand_2_2=cast=(EventParamType)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_HICommand_2_3=cast=(EventParamType *)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_HICommand_2_4=cast=(UInt32)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_HICommand_2_5=cast=(UInt32 *)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_HICommand_2_6=cast=(void *)
-
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_Point_2=
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_Point_2_0=cast=(EventRef)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_Point_2_1=cast=(EventParamName)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_Point_2_2=cast=(EventParamType)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_Point_2_3=cast=(EventParamType *)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_Point_2_4=cast=(UInt32)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_Point_2_5=cast=(UInt32 *)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_Point_2_6=cast=(void *)
-
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_RGBColor_2=
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_RGBColor_2_0=cast=(EventRef)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_RGBColor_2_1=cast=(EventParamName)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_RGBColor_2_2=cast=(EventParamType)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_RGBColor_2_3=cast=(EventParamType *)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_RGBColor_2_4=cast=(UInt32)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_RGBColor_2_5=cast=(UInt32 *)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_RGBColor_2_6=cast=(void *)
-
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_Rect_2=
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_Rect_2_0=cast=(EventRef)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_Rect_2_1=cast=(EventParamName)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_Rect_2_2=cast=(EventParamType)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_Rect_2_3=cast=(EventParamType *)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_Rect_2_4=cast=(UInt32)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_Rect_2_5=cast=(UInt32 *)
-OS_GetEventParameter__III_3II_3ILorg_eclipse_swt_internal_carbon_Rect_2_6=cast=(void *)
-
-OS_GetEventParameter__III_3II_3I_3B=
-OS_GetEventParameter__III_3II_3I_3B_0=cast=(EventRef)
-OS_GetEventParameter__III_3II_3I_3B_1=cast=(EventParamName)
-OS_GetEventParameter__III_3II_3I_3B_2=cast=(EventParamType)
-OS_GetEventParameter__III_3II_3I_3B_3=cast=(EventParamType *)
-OS_GetEventParameter__III_3II_3I_3B_4=cast=(UInt32)
-OS_GetEventParameter__III_3II_3I_3B_5=cast=(UInt32 *)
-OS_GetEventParameter__III_3II_3I_3B_6=cast=(void *)
-
-OS_GetEventParameter__III_3II_3I_3C=
-OS_GetEventParameter__III_3II_3I_3C_0=cast=(EventRef)
-OS_GetEventParameter__III_3II_3I_3C_1=cast=(EventParamName)
-OS_GetEventParameter__III_3II_3I_3C_2=cast=(EventParamType)
-OS_GetEventParameter__III_3II_3I_3C_3=cast=(EventParamType *)
-OS_GetEventParameter__III_3II_3I_3C_4=cast=(UInt32)
-OS_GetEventParameter__III_3II_3I_3C_5=cast=(UInt32 *)
-OS_GetEventParameter__III_3II_3I_3C_6=cast=(void *)
-
-OS_GetEventParameter__III_3II_3I_3I=
-OS_GetEventParameter__III_3II_3I_3I_0=cast=(EventRef)
-OS_GetEventParameter__III_3II_3I_3I_1=cast=(EventParamName)
-OS_GetEventParameter__III_3II_3I_3I_2=cast=(EventParamType)
-OS_GetEventParameter__III_3II_3I_3I_3=cast=(EventParamType *)
-OS_GetEventParameter__III_3II_3I_3I_4=cast=(UInt32)
-OS_GetEventParameter__III_3II_3I_3I_5=cast=(UInt32 *)
-OS_GetEventParameter__III_3II_3I_3I_6=cast=(void *)
-
-OS_GetEventParameter__III_3II_3I_3S=
-OS_GetEventParameter__III_3II_3I_3S_0=cast=(EventRef)
-OS_GetEventParameter__III_3II_3I_3S_1=cast=(EventParamName)
-OS_GetEventParameter__III_3II_3I_3S_2=cast=(EventParamType)
-OS_GetEventParameter__III_3II_3I_3S_3=cast=(EventParamType *)
-OS_GetEventParameter__III_3II_3I_3S_4=cast=(UInt32)
-OS_GetEventParameter__III_3II_3I_3S_5=cast=(UInt32 *)
-OS_GetEventParameter__III_3II_3I_3S_6=cast=(void *)
-
-OS_GetEventTime=
-OS_GetEventTime_0=cast=(EventRef)
-
-OS_GetFlavorData=
-OS_GetFlavorData_0=cast=(DragRef)
-OS_GetFlavorData_1=cast=(DragItemRef)
-OS_GetFlavorData_2=cast=(FlavorType)
-OS_GetFlavorData_3=cast=(void *)
-OS_GetFlavorData_4=cast=(Size *)
-OS_GetFlavorData_5=
-
-OS_GetFlavorDataSize=
-OS_GetFlavorDataSize_0=cast=(DragRef)
-OS_GetFlavorDataSize_1=cast=(DragItemRef)
-OS_GetFlavorDataSize_2=cast=(FlavorType)
-OS_GetFlavorDataSize_3=cast=(Size *)
-
-OS_GetFlavorType=
-OS_GetFlavorType_0=cast=(DragRef)
-OS_GetFlavorType_1=cast=(DragItemRef)
-OS_GetFlavorType_2=
-OS_GetFlavorType_3=cast=(FlavorType *)
-
-OS_GetFontInfo=
-OS_GetFontInfo_0=cast=(FontInfo *)
-
-OS_GetGDevice=
-
-OS_GetGWorld=
-OS_GetGWorld_0=cast=(CGrafPtr *)
-OS_GetGWorld_1=cast=(GDHandle *)
-
-OS_GetGlobalMouse=
-OS_GetGlobalMouse_0=cast=(Point *)
-
-OS_GetHandleSize=
-OS_GetHandleSize_0=cast=(Handle)
-
-OS_GetIconFamilyData=
-OS_GetIconFamilyData_0=cast=IconFamilyHandle
-OS_GetIconFamilyData_1=cast=OSType
-OS_GetIconFamilyData_2=cast=(Handle)
-
-OS_GetIconRef=
-OS_GetIconRef_0=cast=(SInt16)
-OS_GetIconRef_1=cast=(OSType)
-OS_GetIconRef_2=cast=(OSType)
-OS_GetIconRef_3=cast=(IconRef *)
-
-OS_GetIconRefFromIconFamilyPtr=flags=dynamic
-OS_GetIconRefFromIconFamilyPtr_0=
-OS_GetIconRefFromIconFamilyPtr_1=
-OS_GetIconRefFromIconFamilyPtr_2=
-
-OS_GetIndMenuItemWithCommandID=
-OS_GetIndMenuItemWithCommandID_0=cast=(MenuRef)
-OS_GetIndMenuItemWithCommandID_1=cast=(MenuCommand)
-OS_GetIndMenuItemWithCommandID_2=cast=(UInt32)
-OS_GetIndMenuItemWithCommandID_3=cast=(MenuRef *)
-OS_GetIndMenuItemWithCommandID_4=cast=(MenuItemIndex *)
-
-OS_GetIndexedSubControl=
-OS_GetIndexedSubControl_0=cast=(ControlRef)
-OS_GetIndexedSubControl_1=cast=(UInt16)
-OS_GetIndexedSubControl_2=cast=(ControlRef *)
-
-OS_GetItemMark=
-OS_GetItemMark_0=cast=(MenuRef)
-OS_GetItemMark_1=
-OS_GetItemMark_2=
-
-OS_GetKeyboardFocus=
-OS_GetKeyboardFocus_0=cast=(WindowRef)
-OS_GetKeyboardFocus_1=cast=(ControlRef *)
-
-OS_GetLastUserEventTime=
-
-OS_GetMBarHeight=
-
-OS_GetMainDevice=
-
-OS_GetMainEventQueue=
-
-OS_GetMenuCommandMark=
-OS_GetMenuCommandMark_0=cast=(MenuRef)
-OS_GetMenuCommandMark_1=cast=(MenuCommand)
-OS_GetMenuCommandMark_2=cast=(UniChar *)
-
-OS_GetMenuEventTarget=
-OS_GetMenuEventTarget_0=cast=(MenuRef)
-
-OS_GetMenuFont=
-OS_GetMenuFont_0=cast=(MenuRef)
-OS_GetMenuFont_1=cast=(SInt16 *)
-OS_GetMenuFont_2=cast=(UInt16 *)
-
-OS_GetMenuHeight=
-OS_GetMenuHeight_0=cast=(MenuRef)
-
-OS_GetMenuID=
-OS_GetMenuID_0=cast=(MenuRef)
-
-OS_GetMenuItemCommandID=
-OS_GetMenuItemCommandID_0=cast=(MenuRef)
-OS_GetMenuItemCommandID_1=cast=(SInt16)
-OS_GetMenuItemCommandID_2=cast=(MenuCommand *)
-
-OS_GetMenuItemHierarchicalMenu=
-OS_GetMenuItemHierarchicalMenu_0=cast=(MenuRef)
-OS_GetMenuItemHierarchicalMenu_1=cast=(SInt16)
-OS_GetMenuItemHierarchicalMenu_2=cast=(MenuRef *)
-
-OS_GetMenuItemRefCon=
-OS_GetMenuItemRefCon_0=cast=(MenuRef)
-OS_GetMenuItemRefCon_1=cast=(SInt16)
-OS_GetMenuItemRefCon_2=cast=(UInt32 *)
-
-OS_GetMenuTrackingData=
-OS_GetMenuTrackingData_0=cast=(MenuRef)
-OS_GetMenuTrackingData_1=
-
-OS_GetMenuWidth=
-OS_GetMenuWidth_0=cast=(MenuRef)
-
-OS_GetMouse=
-OS_GetMouse_0=cast=(Point *)
-
-OS_GetNextDevice=
-OS_GetNextDevice_0=cast=(GDHandle)
-
-OS_GetNextWindow=
-OS_GetNextWindow_0=cast=WindowRef
-
-OS_GetPixBounds=
-OS_GetPixBounds_0=cast=(PixMapHandle)
-OS_GetPixBounds_1=cast=(Rect *)
-
-OS_GetPixDepth=
-OS_GetPixDepth_0=cast=(PixMapHandle)
-
-OS_GetPort=
-OS_GetPort_0=cast=(GrafPtr *)
-
-OS_GetPortBitMapForCopyBits=
-OS_GetPortBitMapForCopyBits_0=cast=(CGrafPtr)
-
-OS_GetPortBounds=
-OS_GetPortBounds_0=cast=(CGrafPtr)
-OS_GetPortBounds_1=cast=(Rect *)
-
-OS_GetPortClipRegion=
-OS_GetPortClipRegion_0=cast=(CGrafPtr)
-OS_GetPortClipRegion_1=cast=(RgnHandle)
-
-OS_GetPortVisibleRegion=
-OS_GetPortVisibleRegion_0=cast=(CGrafPtr)
-OS_GetPortVisibleRegion_1=cast=(RgnHandle)
-
-OS_GetPreviousWindow=
-OS_GetPreviousWindow_0=cast=(WindowRef)
-
-OS_GetPtrSize=
-OS_GetPtrSize_0=cast=(Ptr)
-
-OS_GetRegionBounds=
-OS_GetRegionBounds_0=cast=(RgnHandle)
-OS_GetRegionBounds_1=cast=(Rect *)
-
-OS_GetRootControl=
-OS_GetRootControl_0=cast=(WindowRef)
-OS_GetRootControl_1=cast=(ControlRef *)
-
-OS_GetScrapFlavorCount=
-OS_GetScrapFlavorCount_0=cast=(ScrapRef)
-OS_GetScrapFlavorCount_1=cast=(UInt32 *)
-
-OS_GetScrapFlavorData__II_3I_3B=
-OS_GetScrapFlavorData__II_3I_3B_0=cast=(ScrapRef)
-OS_GetScrapFlavorData__II_3I_3B_1=cast=(ScrapFlavorType)
-OS_GetScrapFlavorData__II_3I_3B_2=cast=(Size *)
-OS_GetScrapFlavorData__II_3I_3B_3=cast=(void *)
-
-OS_GetScrapFlavorData__II_3I_3C=
-OS_GetScrapFlavorData__II_3I_3C_0=cast=(ScrapRef)
-OS_GetScrapFlavorData__II_3I_3C_1=cast=(ScrapFlavorType)
-OS_GetScrapFlavorData__II_3I_3C_2=cast=(Size *)
-OS_GetScrapFlavorData__II_3I_3C_3=cast=(void *)
-
-OS_GetScrapFlavorInfoList=
-OS_GetScrapFlavorInfoList_0=cast=(ScrapRef)
-OS_GetScrapFlavorInfoList_1=cast=(UInt32 *)
-OS_GetScrapFlavorInfoList_2=cast=(ScrapFlavorInfo *)
-
-OS_GetScrapFlavorSize=
-OS_GetScrapFlavorSize_0=cast=(ScrapRef)
-OS_GetScrapFlavorSize_1=cast=(ScrapFlavorType)
-OS_GetScrapFlavorSize_2=cast=(Size *)
-
-OS_GetScriptManagerVariable=
-OS_GetScriptManagerVariable_0=
-
-OS_GetSuperControl=
-OS_GetSuperControl_0=cast=(ControlRef)
-OS_GetSuperControl_1=cast=(ControlRef *)
-
-OS_GetTabContentRect=
-OS_GetTabContentRect_0=cast=ControlRef
-OS_GetTabContentRect_1=
-
-OS_GetThemeBrushAsColor=
-OS_GetThemeBrushAsColor_0=
-OS_GetThemeBrushAsColor_1=
-OS_GetThemeBrushAsColor_2=
-OS_GetThemeBrushAsColor_3=
-
-OS_GetThemeButtonContentBounds=
-OS_GetThemeButtonContentBounds_0=
-OS_GetThemeButtonContentBounds_1=
-OS_GetThemeButtonContentBounds_2=
-OS_GetThemeButtonContentBounds_3=
-
-OS_GetThemeButtonRegion=
-OS_GetThemeButtonRegion_0=
-OS_GetThemeButtonRegion_1=
-OS_GetThemeButtonRegion_2=
-OS_GetThemeButtonRegion_3=cast=(RgnHandle)
-
-OS_GetThemeDrawingState=
-OS_GetThemeDrawingState_0=cast=(ThemeDrawingState *)
-
-OS_GetThemeFont=
-OS_GetThemeFont_0=cast=(ThemeFontID)
-OS_GetThemeFont_1=cast=(ScriptCode)
-OS_GetThemeFont_2=cast=(unsigned char *)
-OS_GetThemeFont_3=cast=(SInt16 *)
-OS_GetThemeFont_4=cast=(Style *)
-
-OS_GetThemeMenuItemExtra=
-OS_GetThemeMenuItemExtra_0=
-OS_GetThemeMenuItemExtra_1=
-OS_GetThemeMenuItemExtra_2=
-
-OS_GetThemeMetric=
-OS_GetThemeMetric_0=
-OS_GetThemeMetric_1=
-
-OS_GetThemeTextColor=
-OS_GetThemeTextColor_0=
-OS_GetThemeTextColor_1=
-OS_GetThemeTextColor_2=
-OS_GetThemeTextColor_3=
-
-OS_GetThemeTextDimensions=
-OS_GetThemeTextDimensions_0=cast=(CFStringRef)
-OS_GetThemeTextDimensions_1=cast=(ThemeFontID)
-OS_GetThemeTextDimensions_2=cast=(ThemeDrawState)
-OS_GetThemeTextDimensions_3=cast=(Boolean)
-OS_GetThemeTextDimensions_4=cast=(Point *)
-OS_GetThemeTextDimensions_5=cast=(SInt16 *)
-
-OS_GetUserFocusEventTarget=
-
-OS_GetUserFocusWindow=
-
-OS_GetWRefCon=
-OS_GetWRefCon_0=cast=(WindowRef)
-
-OS_GetWindowActivationScope=
-OS_GetWindowActivationScope_0=cast=(WindowRef)
-OS_GetWindowActivationScope_1=cast=(WindowActivationScope *)
-
-OS_GetWindowBounds=
-OS_GetWindowBounds_0=cast=(WindowRef)
-OS_GetWindowBounds_1=cast=(WindowRegionCode)
-OS_GetWindowBounds_2=cast=(Rect *)
-
-OS_GetWindowClass=
-OS_GetWindowClass_0=cast=(WindowRef)
-OS_GetWindowClass_1=cast=WindowClass *
-
-OS_GetWindowDefaultButton=
-OS_GetWindowDefaultButton_0=cast=(WindowRef)
-OS_GetWindowDefaultButton_1=cast=(ControlRef *)
-
-OS_GetWindowEventTarget=
-OS_GetWindowEventTarget_0=cast=(WindowRef)
-
-OS_GetWindowFromPort=
-OS_GetWindowFromPort_0=cast=(CGrafPtr)
-
-OS_GetWindowGroupOfClass=
-OS_GetWindowGroupOfClass_0=
-
-OS_GetWindowList=
-
-OS_GetWindowModality=
-OS_GetWindowModality_0=cast=(WindowRef)
-OS_GetWindowModality_1=cast=(WindowModality *)
-OS_GetWindowModality_2=cast=(WindowRef *)
-
-OS_GetWindowPort=
-OS_GetWindowPort_0=cast=(WindowRef)
-
-OS_GetWindowRegion=
-OS_GetWindowRegion_0=cast=(WindowRef)
-OS_GetWindowRegion_1=cast=(WindowRegionCode)
-OS_GetWindowRegion_2=cast=(RgnHandle)
-
-OS_GetWindowResizeLimits=
-OS_GetWindowResizeLimits_0=cast=WindowRef
-OS_GetWindowResizeLimits_1=cast=HISize *
-OS_GetWindowResizeLimits_2=cast=HISize *
-
-OS_GetWindowStructureWidths=
-OS_GetWindowStructureWidths_0=cast=(WindowRef)
-OS_GetWindowStructureWidths_1=cast=(Rect *)
-
-OS_HIComboBoxAppendTextItem=
-OS_HIComboBoxAppendTextItem_0=cast=(HIViewRef)
-OS_HIComboBoxAppendTextItem_1=cast=(CFStringRef)
-OS_HIComboBoxAppendTextItem_2=cast=(CFIndex *)
-
-OS_HIComboBoxCopyTextItemAtIndex=
-OS_HIComboBoxCopyTextItemAtIndex_0=cast=(HIViewRef)
-OS_HIComboBoxCopyTextItemAtIndex_1=cast=(CFIndex)
-OS_HIComboBoxCopyTextItemAtIndex_2=cast=(CFStringRef *)
-
-OS_HIComboBoxCreate=
-OS_HIComboBoxCreate_0=cast=(const HIRect *)
-OS_HIComboBoxCreate_1=cast=(CFStringRef)
-OS_HIComboBoxCreate_2=cast=(const ControlFontStyleRec *)
-OS_HIComboBoxCreate_3=cast=(CFArrayRef)
-OS_HIComboBoxCreate_4=cast=(OptionBits)
-OS_HIComboBoxCreate_5=cast=(HIViewRef *)
-
-OS_HIComboBoxGetItemCount=
-OS_HIComboBoxGetItemCount_0=cast=(HIViewRef)
-
-OS_HIComboBoxInsertTextItemAtIndex=
-OS_HIComboBoxInsertTextItemAtIndex_0=cast=(HIViewRef)
-OS_HIComboBoxInsertTextItemAtIndex_1=cast=(CFIndex)
-OS_HIComboBoxInsertTextItemAtIndex_2=cast=(CFStringRef)
-
-OS_HIComboBoxRemoveItemAtIndex=
-OS_HIComboBoxRemoveItemAtIndex_0=cast=(HIViewRef)
-OS_HIComboBoxRemoveItemAtIndex_1=cast=(CFIndex)
-
-OS_HICopyAccessibilityRoleDescription=
-OS_HICopyAccessibilityRoleDescription_0=cast=(CFStringRef)
-OS_HICopyAccessibilityRoleDescription_1=cast=(CFStringRef)
-
-OS_HICreateTransformedCGImage=flags=dynamic
-OS_HICreateTransformedCGImage_0=cast=CGImageRef
-OS_HICreateTransformedCGImage_1=
-OS_HICreateTransformedCGImage_2=cast=CGImageRef *
-
-OS_HIObjectCopyClassID=
-OS_HIObjectCopyClassID_0=cast=(HIObjectRef)
-
-OS_HIObjectCreate=
-OS_HIObjectCreate_0=cast=(CFStringRef)
-OS_HIObjectCreate_1=cast=(EventRef)
-OS_HIObjectCreate_2=cast=(HIObjectRef *)
-
-OS_HIObjectRegisterSubclass=
-OS_HIObjectRegisterSubclass_0=cast=(CFStringRef)
-OS_HIObjectRegisterSubclass_1=cast=(CFStringRef)
-OS_HIObjectRegisterSubclass_2=cast=(OptionBits)
-OS_HIObjectRegisterSubclass_3=cast=(EventHandlerUPP)
-OS_HIObjectRegisterSubclass_4=cast=(UInt32)
-OS_HIObjectRegisterSubclass_5=cast=(const EventTypeSpec *)
-OS_HIObjectRegisterSubclass_6=cast=(void *)
-OS_HIObjectRegisterSubclass_7=cast=(HIObjectClassRef *)
-
-OS_HIScrollViewCreate=
-OS_HIScrollViewCreate_0=
-OS_HIScrollViewCreate_1=cast=HIViewRef*
-
-OS_HITextViewCreate=
-OS_HITextViewCreate_0=
-OS_HITextViewCreate_1=
-OS_HITextViewCreate_2=
-OS_HITextViewCreate_3=cast=HIViewRef *
-
-OS_HITextViewGetTXNObject=
-OS_HITextViewGetTXNObject_0=cast=(HIViewRef)
-
-OS_HIThemeDrawBackground=
-OS_HIThemeDrawBackground_0=
-OS_HIThemeDrawBackground_1=
-OS_HIThemeDrawBackground_2=cast=CGContextRef
-OS_HIThemeDrawBackground_3=
-
-OS_HIThemeDrawButton=
-OS_HIThemeDrawButton_0=cast=(const HIRect *),flags=no_out
-OS_HIThemeDrawButton_1=cast=(const HIThemeButtonDrawInfo *)
-OS_HIThemeDrawButton_2=cast=(CGContextRef)
-OS_HIThemeDrawButton_3=cast=(HIThemeOrientation)
-OS_HIThemeDrawButton_4=cast=(HIRect *),flags=no_in
-
-OS_HIThemeDrawFocusRect=
-OS_HIThemeDrawFocusRect_0=
-OS_HIThemeDrawFocusRect_1=
-OS_HIThemeDrawFocusRect_2=cast=CGContextRef
-OS_HIThemeDrawFocusRect_3=
-
-OS_HIThemeDrawFrame=
-OS_HIThemeDrawFrame_0=
-OS_HIThemeDrawFrame_1=
-OS_HIThemeDrawFrame_2=cast=CGContextRef
-OS_HIThemeDrawFrame_3=
-
-OS_HIThemeDrawGenericWell=
-OS_HIThemeDrawGenericWell_0=cast=(const HIRect *)
-OS_HIThemeDrawGenericWell_1=cast=(const HIThemeButtonDrawInfo *)
-OS_HIThemeDrawGenericWell_2=cast=(CGContextRef)
-OS_HIThemeDrawGenericWell_3=cast=(HIThemeOrientation)
-
-OS_HIThemeDrawGroupBox=
-OS_HIThemeDrawGroupBox_0=
-OS_HIThemeDrawGroupBox_1=
-OS_HIThemeDrawGroupBox_2=cast=CGContextRef
-OS_HIThemeDrawGroupBox_3=
-
-OS_HIThemeDrawGrowBox=
-OS_HIThemeDrawGrowBox_0=
-OS_HIThemeDrawGrowBox_1=
-OS_HIThemeDrawGrowBox_2=cast=CGContextRef
-OS_HIThemeDrawGrowBox_3=
-
-OS_HIThemeDrawPopupArrow=
-OS_HIThemeDrawPopupArrow_0=
-OS_HIThemeDrawPopupArrow_1=
-OS_HIThemeDrawPopupArrow_2=cast=CGContextRef
-OS_HIThemeDrawPopupArrow_3=
-
-OS_HIThemeDrawSeparator=
-OS_HIThemeDrawSeparator_0=
-OS_HIThemeDrawSeparator_1=
-OS_HIThemeDrawSeparator_2=cast=CGContextRef
-OS_HIThemeDrawSeparator_3=
-
-OS_HIThemeDrawTab=
-OS_HIThemeDrawTab_0=cast=(const HIRect *),flags=no_out
-OS_HIThemeDrawTab_1=cast=(const HIThemeTabDrawInfo *)
-OS_HIThemeDrawTab_2=cast=(CGContextRef)
-OS_HIThemeDrawTab_3=cast=(HIThemeOrientation)
-OS_HIThemeDrawTab_4=cast=(HIRect *),flags=no_in
-
-OS_HIThemeDrawTabPane=
-OS_HIThemeDrawTabPane_0=cast=(const HIRect *)
-OS_HIThemeDrawTabPane_1=cast=(const HIThemeTabPaneDrawInfo *)
-OS_HIThemeDrawTabPane_2=cast=(CGContextRef)
-OS_HIThemeDrawTabPane_3=cast=(HIThemeOrientation)
-
-OS_HIThemeDrawTextBox=
-OS_HIThemeDrawTextBox_0=cast=CFStringRef
-OS_HIThemeDrawTextBox_1=
-OS_HIThemeDrawTextBox_2=
-OS_HIThemeDrawTextBox_3=cast=CGContextRef
-OS_HIThemeDrawTextBox_4=
-
-OS_HIThemeDrawTrack=
-OS_HIThemeDrawTrack_0=
-OS_HIThemeDrawTrack_1=
-OS_HIThemeDrawTrack_2=cast=CGContextRef
-OS_HIThemeDrawTrack_3=
-
-OS_HIThemeGetButtonBackgroundBounds=
-OS_HIThemeGetButtonBackgroundBounds_0=
-OS_HIThemeGetButtonBackgroundBounds_1=
-OS_HIThemeGetButtonBackgroundBounds_2=
-
-OS_HIThemeGetButtonContentBounds=
-OS_HIThemeGetButtonContentBounds_0=
-OS_HIThemeGetButtonContentBounds_1=
-OS_HIThemeGetButtonContentBounds_2=
-
-OS_HIThemeGetScrollBarTrackRect=
-OS_HIThemeGetScrollBarTrackRect_0=
-OS_HIThemeGetScrollBarTrackRect_1=
-OS_HIThemeGetScrollBarTrackRect_2=
-OS_HIThemeGetScrollBarTrackRect_3=
-
-OS_HIThemeGetTextDimensions=
-OS_HIThemeGetTextDimensions_0=cast=CFStringRef
-OS_HIThemeGetTextDimensions_1=
-OS_HIThemeGetTextDimensions_2=
-OS_HIThemeGetTextDimensions_3=
-OS_HIThemeGetTextDimensions_4=
-OS_HIThemeGetTextDimensions_5=
-
-OS_HIThemeGetTrackBounds=
-OS_HIThemeGetTrackBounds_0=
-OS_HIThemeGetTrackBounds_1=
-
-OS_HIThemeGetTrackLiveValue=
-OS_HIThemeGetTrackLiveValue_0=
-OS_HIThemeGetTrackLiveValue_1=
-OS_HIThemeGetTrackLiveValue_2=
-
-OS_HIThemeGetTrackPartBounds=
-OS_HIThemeGetTrackPartBounds_0=
-OS_HIThemeGetTrackPartBounds_1=
-OS_HIThemeGetTrackPartBounds_2=
-
-OS_HIThemeGetTrackThumbPositionFromBounds=
-OS_HIThemeGetTrackThumbPositionFromBounds_0=
-OS_HIThemeGetTrackThumbPositionFromBounds_1=
-OS_HIThemeGetTrackThumbPositionFromBounds_2=
-
-OS_HIThemeGetTrackThumbPositionFromOffset=
-OS_HIThemeGetTrackThumbPositionFromOffset_0=cast=HIThemeTrackDrawInfo *
-OS_HIThemeGetTrackThumbPositionFromOffset_1=cast=HIPoint *
-OS_HIThemeGetTrackThumbPositionFromOffset_2=
-
-OS_HIThemeHitTestScrollBarArrows=
-OS_HIThemeHitTestScrollBarArrows_0=
-OS_HIThemeHitTestScrollBarArrows_1=
-OS_HIThemeHitTestScrollBarArrows_2=
-OS_HIThemeHitTestScrollBarArrows_3=
-OS_HIThemeHitTestScrollBarArrows_4=
-OS_HIThemeHitTestScrollBarArrows_5=
-
-OS_HIThemeHitTestTrack=
-OS_HIThemeHitTestTrack_0=
-OS_HIThemeHitTestTrack_1=
-OS_HIThemeHitTestTrack_2=
-
-OS_HIThemeSetFill=flags=dynamic
-OS_HIThemeSetFill_0=cast=ThemeBrush
-OS_HIThemeSetFill_1=cast=void *
-OS_HIThemeSetFill_2=cast=CGContextRef
-OS_HIThemeSetFill_3=cast=HIThemeOrientation
-
-OS_HIViewAddSubview=
-OS_HIViewAddSubview_0=cast=(HIViewRef)
-OS_HIViewAddSubview_1=cast=(HIViewRef)
-
-OS_HIViewChangeAttributes=
-OS_HIViewChangeAttributes_0=cast=(HIViewRef)
-OS_HIViewChangeAttributes_1=
-OS_HIViewChangeAttributes_2=
-
-OS_HIViewChangeFeatures=
-OS_HIViewChangeFeatures_0=cast=HIViewRef
-OS_HIViewChangeFeatures_1=
-OS_HIViewChangeFeatures_2=
-
-OS_HIViewClick=
-OS_HIViewClick_0=cast=(HIViewRef)
-OS_HIViewClick_1=cast=(EventRef)
-
-OS_HIViewConvertPoint=
-OS_HIViewConvertPoint_0=cast=(HIPoint *)
-OS_HIViewConvertPoint_1=cast=(HIViewRef)
-OS_HIViewConvertPoint_2=cast=(HIViewRef)
-
-OS_HIViewConvertRect=
-OS_HIViewConvertRect_0=
-OS_HIViewConvertRect_1=cast=(HIViewRef)
-OS_HIViewConvertRect_2=cast=(HIViewRef)
-
-OS_HIViewConvertRegion=
-OS_HIViewConvertRegion_0=cast=RgnHandle
-OS_HIViewConvertRegion_1=cast=(HIViewRef)
-OS_HIViewConvertRegion_2=cast=(HIViewRef)
-
-OS_HIViewCreateOffscreenImage=
-OS_HIViewCreateOffscreenImage_0=cast=HIViewRef
-OS_HIViewCreateOffscreenImage_1=cast=OptionBits
-OS_HIViewCreateOffscreenImage_2=cast=(HIRect *)
-OS_HIViewCreateOffscreenImage_3=cast=CGImageRef *
-
-OS_HIViewFindByID=
-OS_HIViewFindByID_0=cast=(HIViewRef)
-OS_HIViewFindByID_1=cast=(HIViewID *),flags=struct
-OS_HIViewFindByID_2=cast=(HIViewRef *)
-
-OS_HIViewGetBounds=
-OS_HIViewGetBounds_0=cast=HIViewRef
-OS_HIViewGetBounds_1=
-
-OS_HIViewGetFeatures=
-OS_HIViewGetFeatures_0=cast=(HIViewRef)
-OS_HIViewGetFeatures_1=cast=HIViewFeatures *
-
-OS_HIViewGetFirstSubview=
-OS_HIViewGetFirstSubview_0=cast=(HIViewRef)
-
-OS_HIViewGetFrame=
-OS_HIViewGetFrame_0=cast=(HIViewRef)
-OS_HIViewGetFrame_1=cast=(HIRect *)
-
-OS_HIViewGetLastSubview=
-OS_HIViewGetLastSubview_0=cast=(HIViewRef)
-
-OS_HIViewGetNextView=
-OS_HIViewGetNextView_0=cast=(HIViewRef)
-
-OS_HIViewGetRoot=
-OS_HIViewGetRoot_0=cast=(WindowRef)
-
-OS_HIViewGetSizeConstraints=
-OS_HIViewGetSizeConstraints_0=cast=(HIViewRef)
-OS_HIViewGetSizeConstraints_1=cast=(HISize *)
-OS_HIViewGetSizeConstraints_2=cast=(HISize *)
-
-OS_HIViewGetSubviewHit=
-OS_HIViewGetSubviewHit_0=cast=(HIViewRef)
-OS_HIViewGetSubviewHit_1=cast=(CGPoint *)
-OS_HIViewGetSubviewHit_2=cast=(Boolean)
-OS_HIViewGetSubviewHit_3=cast=(HIViewRef *)
-
-OS_HIViewGetSuperview=
-OS_HIViewGetSuperview_0=cast=(HIViewRef)
-
-OS_HIViewGetViewForMouseEvent=
-OS_HIViewGetViewForMouseEvent_0=cast=(HIViewRef)
-OS_HIViewGetViewForMouseEvent_1=cast=(EventRef)
-OS_HIViewGetViewForMouseEvent_2=cast=(HIViewRef *)
-
-OS_HIViewIsDrawingEnabled=
-OS_HIViewIsDrawingEnabled_0=cast=(HIViewRef)
-
-OS_HIViewIsVisible=
-OS_HIViewIsVisible_0=cast=(HIViewRef)
-
-OS_HIViewRemoveFromSuperview=
-OS_HIViewRemoveFromSuperview_0=cast=(HIViewRef)
-
-OS_HIViewRender=
-OS_HIViewRender_0=cast=HIViewRef
-
-OS_HIViewScrollRect=
-OS_HIViewScrollRect_0=cast=(HIViewRef)
-OS_HIViewScrollRect_1=
-OS_HIViewScrollRect_2=
-OS_HIViewScrollRect_3=
-
-OS_HIViewSetBoundsOrigin=
-OS_HIViewSetBoundsOrigin_0=cast=(HIViewRef)
-OS_HIViewSetBoundsOrigin_1=
-OS_HIViewSetBoundsOrigin_2=
-
-OS_HIViewSetDrawingEnabled=
-OS_HIViewSetDrawingEnabled_0=cast=(HIViewRef)
-OS_HIViewSetDrawingEnabled_1=cast=(Boolean)
-
-OS_HIViewSetFrame=
-OS_HIViewSetFrame_0=cast=(HIViewRef)
-OS_HIViewSetFrame_1=cast=(const HIRect *)
-
-OS_HIViewSetNeedsDisplay=
-OS_HIViewSetNeedsDisplay_0=cast=(HIViewRef)
-OS_HIViewSetNeedsDisplay_1=cast=(Boolean)
-
-OS_HIViewSetNeedsDisplayInRegion=
-OS_HIViewSetNeedsDisplayInRegion_0=cast=(HIViewRef)
-OS_HIViewSetNeedsDisplayInRegion_1=cast=(RgnHandle)
-OS_HIViewSetNeedsDisplayInRegion_2=cast=(Boolean)
-
-OS_HIViewSetVisible=
-OS_HIViewSetVisible_0=cast=(HIViewRef)
-OS_HIViewSetVisible_1=cast=(Boolean)
-
-OS_HIViewSetZOrder=
-OS_HIViewSetZOrder_0=cast=(HIViewRef)
-OS_HIViewSetZOrder_1=cast=(HIViewZOrderOp)
-OS_HIViewSetZOrder_2=cast=(HIViewRef)
-
-OS_HIViewSimulateClick=
-OS_HIViewSimulateClick_0=cast=(HIViewRef)
-OS_HIViewSimulateClick_1=cast=(HIViewPartCode)
-OS_HIViewSimulateClick_2=cast=(UInt32)
-OS_HIViewSimulateClick_3=cast=(ControlPartCode *)
-
-OS_HLock=
-OS_HLock_0=cast=(Handle)
-
-OS_HMDisplayTag=
-OS_HMDisplayTag_0=cast=const HMHelpContentRec *
-
-OS_HMGetTagDelay=
-OS_HMGetTagDelay_0=
-
-OS_HMHideTag=
-
-OS_HMInstallControlContentCallback=
-OS_HMInstallControlContentCallback_0=cast=(ControlRef)
-OS_HMInstallControlContentCallback_1=cast=(HMControlContentUPP)
-
-OS_HMSetTagDelay=
-OS_HMSetTagDelay_0=
-
-OS_HUnlock=
-OS_HUnlock_0=cast=(Handle)
-
-OS_HandleControlClick=
-OS_HandleControlClick_0=cast=(ControlRef)
-OS_HandleControlClick_1=flags=struct
-OS_HandleControlClick_2=cast=(EventModifiers)
-OS_HandleControlClick_3=cast=(ControlActionUPP)
-
-OS_HandleControlSetCursor=
-OS_HandleControlSetCursor_0=cast=(ControlRef)
-OS_HandleControlSetCursor_1=flags=struct
-OS_HandleControlSetCursor_2=cast=(EventModifiers)
-OS_HandleControlSetCursor_3=cast=(Boolean *)
-
-OS_HiWord=
-OS_HiWord_0=
-
-OS_HideWindow=
-OS_HideWindow_0=cast=(WindowRef)
-
-OS_HiliteMenu=
-OS_HiliteMenu_0=cast=(MenuID)
-
-OS_IconRefToIconFamily=
-OS_IconRefToIconFamily_0=cast=IconRef
-OS_IconRefToIconFamily_1=cast=IconSelectorValue
-OS_IconRefToIconFamily_2=cast=IconFamilyHandle *
-
-OS_InitContextualMenus=
-
-OS_InitCursor=
-
-OS_InitDataBrowserCallbacks=
-OS_InitDataBrowserCallbacks_0=cast=(DataBrowserCallbacks *),flags=init
-
-OS_InitDataBrowserCustomCallbacks=
-OS_InitDataBrowserCustomCallbacks_0=
-
-OS_InsertMenu=
-OS_InsertMenu_0=cast=(MenuRef)
-OS_InsertMenu_1=cast=(MenuID)
-
-OS_InsertMenuItemTextWithCFString=
-OS_InsertMenuItemTextWithCFString_0=cast=(MenuRef)
-OS_InsertMenuItemTextWithCFString_1=cast=(CFStringRef)
-OS_InsertMenuItemTextWithCFString_2=cast=(MenuItemIndex)
-OS_InsertMenuItemTextWithCFString_3=cast=(MenuItemAttributes)
-OS_InsertMenuItemTextWithCFString_4=cast=(MenuCommand)
-
-OS_InstallEventHandler=
-OS_InstallEventHandler_0=cast=(EventTargetRef)
-OS_InstallEventHandler_1=cast=(EventHandlerUPP)
-OS_InstallEventHandler_2=cast=(UInt32)
-OS_InstallEventHandler_3=cast=(const EventTypeSpec *)
-OS_InstallEventHandler_4=cast=(void *)
-OS_InstallEventHandler_5=cast=(EventHandlerRef *)
-
-OS_InstallEventLoopIdleTimer=
-OS_InstallEventLoopIdleTimer_0=cast=(EventLoopRef)
-OS_InstallEventLoopIdleTimer_1=cast=(EventTimerInterval)
-OS_InstallEventLoopIdleTimer_2=cast=(EventTimerInterval)
-OS_InstallEventLoopIdleTimer_3=cast=(EventLoopIdleTimerUPP)
-OS_InstallEventLoopIdleTimer_4=cast=(void *)
-OS_InstallEventLoopIdleTimer_5=cast=(EventLoopTimerRef *)
-
-OS_InstallEventLoopTimer=
-OS_InstallEventLoopTimer_0=cast=(EventLoopRef)
-OS_InstallEventLoopTimer_1=cast=(EventTimerInterval)
-OS_InstallEventLoopTimer_2=cast=(EventTimerInterval)
-OS_InstallEventLoopTimer_3=cast=(EventLoopTimerUPP)
-OS_InstallEventLoopTimer_4=cast=(void *)
-OS_InstallEventLoopTimer_5=cast=(EventLoopTimerRef *)
-
-OS_InstallReceiveHandler=
-OS_InstallReceiveHandler_0=cast=(DragReceiveHandlerUPP)
-OS_InstallReceiveHandler_1=cast=(WindowRef)
-OS_InstallReceiveHandler_2=cast=(void *)
-
-OS_InstallTrackingHandler=
-OS_InstallTrackingHandler_0=cast=(DragTrackingHandlerUPP)
-OS_InstallTrackingHandler_1=cast=(WindowRef)
-OS_InstallTrackingHandler_2=cast=(void *)
-
-OS_InvalWindowRect=
-OS_InvalWindowRect_0=cast=(WindowRef)
-OS_InvalWindowRect_1=cast=(const Rect *)
-
-OS_InvalWindowRgn=
-OS_InvalWindowRgn_0=cast=(WindowRef)
-OS_InvalWindowRgn_1=cast=(RgnHandle)
-
-OS_InvertRect=
-OS_InvertRect_0=cast=(const Rect *)
-
-OS_InvertRgn=
-OS_InvertRgn_0=cast=(RgnHandle)
-
-OS_IsControlActive=
-OS_IsControlActive_0=cast=(ControlRef)
-
-OS_IsControlEnabled=
-OS_IsControlEnabled_0=cast=(ControlRef)
-
-OS_IsControlVisible=
-OS_IsControlVisible_0=cast=(ControlRef)
-
-OS_IsDataBrowserItemSelected=
-OS_IsDataBrowserItemSelected_0=cast=(ControlRef)
-OS_IsDataBrowserItemSelected_1=cast=(DataBrowserItemID)
-
-OS_IsMenuCommandEnabled=
-OS_IsMenuCommandEnabled_0=cast=(MenuRef)
-OS_IsMenuCommandEnabled_1=cast=(MenuCommand)
-
-OS_IsMenuItemEnabled=
-OS_IsMenuItemEnabled_0=cast=(MenuRef)
-OS_IsMenuItemEnabled_1=cast=(MenuItemIndex)
-
-OS_IsValidControlHandle=
-OS_IsValidControlHandle_0=cast=(ControlRef)
-
-OS_IsValidMenu=
-OS_IsValidMenu_0=cast=(MenuRef)
-
-OS_IsValidWindowPtr=
-OS_IsValidWindowPtr_0=cast=(WindowRef)
-
-OS_IsWindowActive=
-OS_IsWindowActive_0=cast=(WindowRef)
-
-OS_IsWindowCollapsed=
-OS_IsWindowCollapsed_0=cast=(WindowRef)
-
-OS_IsWindowVisible=
-OS_IsWindowVisible_0=cast=(WindowRef)
-
-OS_JNIGetObject=flags=no_gen
-OS_JNIGetObject_0=
-
-OS_KeyTranslate=
-OS_KeyTranslate_0=cast=const void *
-OS_KeyTranslate_1=
-OS_KeyTranslate_2=cast=UInt32 *
-
-OS_KillPoly=
-OS_KillPoly_0=cast=(PolyHandle)
-
-OS_LineTo=
-OS_LineTo_0=cast=(short)
-OS_LineTo_1=cast=(short)
-
-OS_LoWord=
-OS_LoWord_0=
-
-OS_LockPortBits=
-OS_LockPortBits_0=cast=(GrafPtr)
-
-OS_Long2Fix=
-OS_Long2Fix_0=
-
-OS_MenuSelect=
-OS_MenuSelect_0=cast=(Point *),flags=struct
-
-OS_MoveControl=
-OS_MoveControl_0=cast=(ControlRef)
-OS_MoveControl_1=cast=(SInt16)
-OS_MoveControl_2=cast=(SInt16)
-
-OS_MoveTo=
-OS_MoveTo_0=cast=(short)
-OS_MoveTo_1=cast=(short)
-
-OS_MoveWindow=
-OS_MoveWindow_0=cast=(WindowRef)
-OS_MoveWindow_1=cast=(short)
-OS_MoveWindow_2=cast=(short)
-OS_MoveWindow_3=cast=(Boolean)
-
-OS_NavCreateChooseFolderDialog=
-OS_NavCreateChooseFolderDialog_0=cast=(const NavDialogCreationOptions *)
-OS_NavCreateChooseFolderDialog_1=cast=(NavEventUPP)
-OS_NavCreateChooseFolderDialog_2=cast=(NavObjectFilterUPP)
-OS_NavCreateChooseFolderDialog_3=cast=(void *)
-OS_NavCreateChooseFolderDialog_4=cast=(NavDialogRef *)
-
-OS_NavCreateGetFileDialog=
-OS_NavCreateGetFileDialog_0=cast=(const NavDialogCreationOptions *)
-OS_NavCreateGetFileDialog_1=cast=(NavTypeListHandle)
-OS_NavCreateGetFileDialog_2=cast=(NavEventUPP)
-OS_NavCreateGetFileDialog_3=cast=(NavPreviewUPP)
-OS_NavCreateGetFileDialog_4=cast=(NavObjectFilterUPP)
-OS_NavCreateGetFileDialog_5=cast=(void *)
-OS_NavCreateGetFileDialog_6=cast=(NavDialogRef *)
-
-OS_NavCreatePutFileDialog=
-OS_NavCreatePutFileDialog_0=cast=(const NavDialogCreationOptions *)
-OS_NavCreatePutFileDialog_1=cast=(OSType)
-OS_NavCreatePutFileDialog_2=cast=(OSType)
-OS_NavCreatePutFileDialog_3=cast=(NavEventUPP)
-OS_NavCreatePutFileDialog_4=cast=(void *)
-OS_NavCreatePutFileDialog_5=cast=(NavDialogRef *)
-
-OS_NavDialogDispose=
-OS_NavDialogDispose_0=cast=(NavDialogRef)
-
-OS_NavDialogGetReply=
-OS_NavDialogGetReply_0=cast=(NavDialogRef)
-OS_NavDialogGetReply_1=cast=(NavReplyRecord *)
-
-OS_NavDialogGetSaveFileName=
-OS_NavDialogGetSaveFileName_0=cast=(NavDialogRef)
-
-OS_NavDialogGetUserAction=
-OS_NavDialogGetUserAction_0=cast=(NavDialogRef)
-
-OS_NavDialogRun=
-OS_NavDialogRun_0=cast=(NavDialogRef)
-
-OS_NavDialogSetFilterTypeIdentifiers=flags=dynamic
-OS_NavDialogSetFilterTypeIdentifiers_0=
-OS_NavDialogSetFilterTypeIdentifiers_1=
-
-OS_NavDialogSetSaveFileName=
-OS_NavDialogSetSaveFileName_0=cast=(NavDialogRef)
-OS_NavDialogSetSaveFileName_1=cast=(CFStringRef)
-
-OS_NavGetDefaultDialogCreationOptions=
-OS_NavGetDefaultDialogCreationOptions_0=cast=(NavDialogCreationOptions *)
-
-OS_NewControl=
-OS_NewControl_0=cast=(WindowRef)
-OS_NewControl_1=cast=(const Rect *)
-OS_NewControl_2=cast=(ConstStr255Param)
-OS_NewControl_3=cast=(Boolean)
-OS_NewControl_4=cast=(SInt16)
-OS_NewControl_5=cast=(SInt16)
-OS_NewControl_6=cast=(SInt16)
-OS_NewControl_7=cast=(SInt16)
-OS_NewControl_8=cast=(SInt32)
-
-OS_NewDrag=
-OS_NewDrag_0=cast=(DragRef *)
-
-OS_NewGWorldFromPtr=
-OS_NewGWorldFromPtr_0=cast=(GWorldPtr *)
-OS_NewGWorldFromPtr_1=cast=(unsigned long)
-OS_NewGWorldFromPtr_2=cast=(const Rect *)
-OS_NewGWorldFromPtr_3=cast=(CTabHandle)
-OS_NewGWorldFromPtr_4=cast=(GDHandle)
-OS_NewGWorldFromPtr_5=cast=(GWorldFlags)
-OS_NewGWorldFromPtr_6=cast=(Ptr)
-OS_NewGWorldFromPtr_7=cast=(long)
-
-OS_NewGlobalRef=flags=no_gen
-OS_NewGlobalRef_0=
-
-OS_NewHandle=
-OS_NewHandle_0=cast=(Size)
-
-OS_NewHandleClear=
-OS_NewHandleClear_0=cast=(Size)
-
-OS_NewPtr=
-OS_NewPtr_0=cast=(Size)
-
-OS_NewPtrClear=
-OS_NewPtrClear_0=cast=(Size)
-
-OS_NewRgn=
-
-OS_OffsetRect=
-OS_OffsetRect_0=
-OS_OffsetRect_1=
-OS_OffsetRect_2=
-
-OS_OffsetRgn=
-OS_OffsetRgn_0=cast=(RgnHandle)
-OS_OffsetRgn_1=cast=(short)
-OS_OffsetRgn_2=cast=(short)
-
-OS_OpenDataBrowserContainer=
-OS_OpenDataBrowserContainer_0=cast=(ControlRef)
-OS_OpenDataBrowserContainer_1=cast=(DataBrowserItemID)
-
-OS_OpenPoly=
-
-OS_OpenRgn=
-
-OS_PMCreatePageFormat=
-OS_PMCreatePageFormat_0=cast=(PMPageFormat *)
-
-OS_PMCreatePrintSettings=
-OS_PMCreatePrintSettings_0=cast=(PMPrintSettings *)
-
-OS_PMCreateSession=
-OS_PMCreateSession_0=cast=(PMPrintSession *)
-
-OS_PMFlattenPageFormat=
-OS_PMFlattenPageFormat_0=cast=PMPageFormat
-OS_PMFlattenPageFormat_1=cast=Handle *
-
-OS_PMFlattenPrintSettings=
-OS_PMFlattenPrintSettings_0=cast=PMPrintSettings
-OS_PMFlattenPrintSettings_1=cast=Handle *
-
-OS_PMGetAdjustedPageRect=
-OS_PMGetAdjustedPageRect_0=cast=(PMPageFormat)
-OS_PMGetAdjustedPageRect_1=cast=(PMRect *)
-
-OS_PMGetAdjustedPaperRect=
-OS_PMGetAdjustedPaperRect_0=cast=(PMPageFormat)
-OS_PMGetAdjustedPaperRect_1=cast=(PMRect *)
-
-OS_PMGetCollate=
-OS_PMGetCollate_0=cast=PMPrintSettings
-OS_PMGetCollate_1=
-
-OS_PMGetCopies=
-OS_PMGetCopies_0=cast=(PMPrintSettings)
-OS_PMGetCopies_1=cast=(UInt32 *)
-
-OS_PMGetFirstPage=
-OS_PMGetFirstPage_0=cast=(PMPrintSettings)
-OS_PMGetFirstPage_1=cast=(UInt32 *)
-
-OS_PMGetJobNameCFString=
-OS_PMGetJobNameCFString_0=cast=(PMPrintSettings)
-OS_PMGetJobNameCFString_1=cast=(CFStringRef *)
-
-OS_PMGetLastPage=
-OS_PMGetLastPage_0=cast=(PMPrintSettings)
-OS_PMGetLastPage_1=cast=(UInt32 *)
-
-OS_PMGetPageRange=
-OS_PMGetPageRange_0=cast=(PMPrintSettings)
-OS_PMGetPageRange_1=cast=(UInt32 *)
-OS_PMGetPageRange_2=cast=(UInt32 *)
-
-OS_PMGetResolution=
-OS_PMGetResolution_0=cast=(PMPageFormat)
-OS_PMGetResolution_1=cast=(PMResolution *)
-
-OS_PMRelease=
-OS_PMRelease_0=cast=(PMObject)
-
-OS_PMSessionBeginDocumentNoDialog=
-OS_PMSessionBeginDocumentNoDialog_0=cast=(PMPrintSession)
-OS_PMSessionBeginDocumentNoDialog_1=cast=(PMPrintSettings)
-OS_PMSessionBeginDocumentNoDialog_2=cast=(PMPageFormat)
-
-OS_PMSessionBeginPageNoDialog=
-OS_PMSessionBeginPageNoDialog_0=cast=(PMPrintSession)
-OS_PMSessionBeginPageNoDialog_1=cast=(PMPageFormat)
-OS_PMSessionBeginPageNoDialog_2=cast=(const PMRect *)
-
-OS_PMSessionCopyDestinationLocation=
-OS_PMSessionCopyDestinationLocation_0=cast=PMPrintSession
-OS_PMSessionCopyDestinationLocation_1=cast=PMPrintSettings
-OS_PMSessionCopyDestinationLocation_2=cast=(CFURLRef *)
-
-OS_PMSessionCreatePrinterList=
-OS_PMSessionCreatePrinterList_0=cast=PMPrintSession
-OS_PMSessionCreatePrinterList_1=cast=CFArrayRef *
-OS_PMSessionCreatePrinterList_2=cast=CFIndex *
-OS_PMSessionCreatePrinterList_3=cast=PMPrinter *
-
-OS_PMSessionDefaultPageFormat=
-OS_PMSessionDefaultPageFormat_0=cast=(PMPrintSession)
-OS_PMSessionDefaultPageFormat_1=cast=(PMPageFormat)
-
-OS_PMSessionDefaultPrintSettings=
-OS_PMSessionDefaultPrintSettings_0=cast=(PMPrintSession)
-OS_PMSessionDefaultPrintSettings_1=cast=(PMPrintSettings)
-
-OS_PMSessionEndDocumentNoDialog=
-OS_PMSessionEndDocumentNoDialog_0=cast=(PMPrintSession)
-
-OS_PMSessionEndPageNoDialog=
-OS_PMSessionEndPageNoDialog_0=cast=(PMPrintSession)
-
-OS_PMSessionError=
-OS_PMSessionError_0=cast=(PMPrintSession)
-
-OS_PMSessionGetDestinationType=
-OS_PMSessionGetDestinationType_0=cast=PMPrintSession
-OS_PMSessionGetDestinationType_1=cast=PMPrintSettings
-OS_PMSessionGetDestinationType_2=cast=(PMDestinationType *)
-
-OS_PMSessionGetGraphicsContext=
-OS_PMSessionGetGraphicsContext_0=cast=(PMPrintSession)
-OS_PMSessionGetGraphicsContext_1=cast=(CFStringRef)
-OS_PMSessionGetGraphicsContext_2=cast=(void **)
-
-OS_PMSessionPageSetupDialog=
-OS_PMSessionPageSetupDialog_0=cast=(PMPrintSession)
-OS_PMSessionPageSetupDialog_1=cast=(PMPageFormat)
-OS_PMSessionPageSetupDialog_2=cast=(Boolean *)
-
-OS_PMSessionPrintDialog=
-OS_PMSessionPrintDialog_0=cast=(PMPrintSession)
-OS_PMSessionPrintDialog_1=cast=(PMPrintSettings)
-OS_PMSessionPrintDialog_2=cast=(PMPageFormat)
-OS_PMSessionPrintDialog_3=cast=(Boolean *)
-
-OS_PMSessionSetCurrentPrinter=
-OS_PMSessionSetCurrentPrinter_0=cast=PMPrintSession
-OS_PMSessionSetCurrentPrinter_1=cast=CFStringRef
-
-OS_PMSessionSetDestination=
-OS_PMSessionSetDestination_0=cast=PMPrintSession
-OS_PMSessionSetDestination_1=cast=PMPrintSettings
-OS_PMSessionSetDestination_2=cast=PMDestinationType
-OS_PMSessionSetDestination_3=cast=CFStringRef
-OS_PMSessionSetDestination_4=cast=CFURLRef
-
-OS_PMSessionSetDocumentFormatGeneration=
-OS_PMSessionSetDocumentFormatGeneration_0=cast=(PMPrintSession)
-OS_PMSessionSetDocumentFormatGeneration_1=cast=(CFStringRef)
-OS_PMSessionSetDocumentFormatGeneration_2=cast=(CFArrayRef)
-OS_PMSessionSetDocumentFormatGeneration_3=cast=(CFTypeRef)
-
-OS_PMSessionSetError=
-OS_PMSessionSetError_0=cast=(PMPrintSession)
-OS_PMSessionSetError_1=
-
-OS_PMSessionUseSheets=
-OS_PMSessionUseSheets_0=cast=(PMPrintSession)
-OS_PMSessionUseSheets_1=cast=(WindowRef)
-OS_PMSessionUseSheets_2=cast=(PMSheetDoneUPP)
-
-OS_PMSessionValidatePageFormat=
-OS_PMSessionValidatePageFormat_0=cast=(PMPrintSession)
-OS_PMSessionValidatePageFormat_1=cast=(PMPageFormat)
-OS_PMSessionValidatePageFormat_2=cast=(Boolean *)
-
-OS_PMSessionValidatePrintSettings=
-OS_PMSessionValidatePrintSettings_0=cast=(PMPrintSession)
-OS_PMSessionValidatePrintSettings_1=cast=(PMPrintSettings)
-OS_PMSessionValidatePrintSettings_2=cast=(Boolean *)
-
-OS_PMSetCollate=
-OS_PMSetCollate_0=cast=PMPrintSettings
-OS_PMSetCollate_1=
-
-OS_PMSetFirstPage=
-OS_PMSetFirstPage_0=cast=(PMPrintSettings)
-OS_PMSetFirstPage_1=cast=(UInt32)
-OS_PMSetFirstPage_2=cast=(Boolean)
-
-OS_PMSetJobNameCFString=
-OS_PMSetJobNameCFString_0=cast=(PMPrintSettings)
-OS_PMSetJobNameCFString_1=cast=CFStringRef
-
-OS_PMSetLastPage=
-OS_PMSetLastPage_0=cast=(PMPrintSettings)
-OS_PMSetLastPage_1=cast=(UInt32)
-OS_PMSetLastPage_2=cast=(Boolean)
-
-OS_PMSetPageRange=
-OS_PMSetPageRange_0=cast=(PMPrintSettings)
-OS_PMSetPageRange_1=cast=(UInt32)
-OS_PMSetPageRange_2=cast=(UInt32)
-
-OS_PMUnflattenPageFormat=
-OS_PMUnflattenPageFormat_0=cast=Handle
-OS_PMUnflattenPageFormat_1=cast=PMPageFormat *
-
-OS_PMUnflattenPrintSettings=
-OS_PMUnflattenPrintSettings_0=cast=Handle
-OS_PMUnflattenPrintSettings_1=cast=(PMPrintSettings *)
-
-OS_PaintOval=
-OS_PaintOval_0=cast=(const Rect *)
-
-OS_PaintPoly=
-OS_PaintPoly_0=cast=(PolyHandle)
-
-OS_PaintRect=
-OS_PaintRect_0=cast=(const Rect *)
-
-OS_PaintRoundRect=
-OS_PaintRoundRect_0=cast=(const Rect *)
-OS_PaintRoundRect_1=cast=(short)
-OS_PaintRoundRect_2=cast=(short)
-
-OS_PenSize=
-OS_PenSize_0=cast=(short)
-OS_PenSize_1=cast=(short)
-
-OS_PickColor=
-OS_PickColor_0=cast=(ColorPickerInfo *)
-
-OS_PopUpMenuSelect=
-OS_PopUpMenuSelect_0=cast=(MenuRef)
-OS_PopUpMenuSelect_1=cast=(short)
-OS_PopUpMenuSelect_2=cast=(short)
-OS_PopUpMenuSelect_3=cast=(short)
-
-OS_PostEvent=
-OS_PostEvent_0=cast=(EventKind)
-OS_PostEvent_1=cast=(UInt32)
-
-OS_PostEventToQueue=
-OS_PostEventToQueue_0=cast=(EventQueueRef)
-OS_PostEventToQueue_1=cast=(EventRef)
-OS_PostEventToQueue_2=cast=(EventPriority)
-
-OS_PtInRect=
-OS_PtInRect_0=cast=(Point *),flags=struct
-OS_PtInRect_1=cast=(const Rect *)
-
-OS_PtInRgn=
-OS_PtInRgn_0=cast=(Point *),flags=struct
-OS_PtInRgn_1=cast=(RgnHandle)
-
-OS_PutScrapFlavor__IIII_3B=
-OS_PutScrapFlavor__IIII_3B_0=cast=(ScrapRef)
-OS_PutScrapFlavor__IIII_3B_1=cast=(ScrapFlavorType)
-OS_PutScrapFlavor__IIII_3B_2=cast=(ScrapFlavorFlags)
-OS_PutScrapFlavor__IIII_3B_3=cast=(Size)
-OS_PutScrapFlavor__IIII_3B_4=cast=(const void *)
-
-OS_PutScrapFlavor__IIII_3C=
-OS_PutScrapFlavor__IIII_3C_0=cast=(ScrapRef)
-OS_PutScrapFlavor__IIII_3C_1=cast=(ScrapFlavorType)
-OS_PutScrapFlavor__IIII_3C_2=cast=(ScrapFlavorFlags)
-OS_PutScrapFlavor__IIII_3C_3=cast=(Size)
-OS_PutScrapFlavor__IIII_3C_4=cast=(const void *)
-
-OS_QDBeginCGContext=
-OS_QDBeginCGContext_0=cast=(CGrafPtr)
-OS_QDBeginCGContext_1=cast=(CGContextRef *)
-
-OS_QDEndCGContext=
-OS_QDEndCGContext_0=cast=(CGrafPtr)
-OS_QDEndCGContext_1=cast=(CGContextRef *)
-
-OS_QDFlushPortBuffer=
-OS_QDFlushPortBuffer_0=cast=(CGrafPtr)
-OS_QDFlushPortBuffer_1=cast=(RgnHandle)
-
-OS_QDGlobalToLocalPoint=
-OS_QDGlobalToLocalPoint_0=cast=(CGrafPtr)
-OS_QDGlobalToLocalPoint_1=cast=(Point *)
-
-OS_QDLocalToGlobalPoint=
-OS_QDLocalToGlobalPoint_0=cast=(CGrafPtr)
-OS_QDLocalToGlobalPoint_1=cast=(Point *)
-
-OS_QDRegionToRects=
-OS_QDRegionToRects_0=cast=RgnHandle
-OS_QDRegionToRects_1=cast=QDRegionParseDirection
-OS_QDRegionToRects_2=cast=RegionToRectsUPP
-OS_QDRegionToRects_3=cast=void *
-
-OS_QDSetDirtyRegion=
-OS_QDSetDirtyRegion_0=cast=(CGrafPtr)
-OS_QDSetDirtyRegion_1=cast=(RgnHandle)
-
-OS_QDSetPatternOrigin=
-OS_QDSetPatternOrigin_0=cast=(Point *),flags=struct
-
-OS_QDSwapTextFlags=
-OS_QDSwapTextFlags_0=cast=(UInt32)
-
-OS_RGBBackColor=
-OS_RGBBackColor_0=cast=(const RGBColor *)
-
-OS_RGBForeColor=
-OS_RGBForeColor_0=cast=(const RGBColor *)
-
-OS_ReadIconFile=
-OS_ReadIconFile_0=cast=const FSSpec *
-OS_ReadIconFile_1=cast=IconFamilyHandle *
-
-OS_ReceiveNextEvent=
-OS_ReceiveNextEvent_0=cast=(UInt32)
-OS_ReceiveNextEvent_1=cast=(const EventTypeSpec *)
-OS_ReceiveNextEvent_2=cast=(EventTimeout)
-OS_ReceiveNextEvent_3=cast=(Boolean)
-OS_ReceiveNextEvent_4=cast=(EventRef *)
-
-OS_RectInRgn=
-OS_RectInRgn_0=cast=(const Rect *)
-OS_RectInRgn_1=cast=(RgnHandle)
-
-OS_RectRgn=
-OS_RectRgn_0=cast=(RgnHandle)
-OS_RectRgn_1=cast=(const Rect *)
-
-OS_RegisterAppearanceClient=
-
-OS_ReleaseEvent=
-OS_ReleaseEvent_0=cast=(EventRef)
-
-OS_ReleaseIconRef=
-OS_ReleaseIconRef_0=cast=IconRef
-
-OS_ReleaseMenu=
-OS_ReleaseMenu_0=cast=(MenuRef)
-
-OS_ReleaseWindow=
-OS_ReleaseWindow_0=cast=WindowRef
-
-OS_ReleaseWindowGroup=
-OS_ReleaseWindowGroup_0=cast=(WindowGroupRef)
-
-OS_RemoveControlProperty=
-OS_RemoveControlProperty_0=cast=(ControlRef)
-OS_RemoveControlProperty_1=
-OS_RemoveControlProperty_2=
-
-OS_RemoveDataBrowserItems=
-OS_RemoveDataBrowserItems_0=cast=(ControlRef)
-OS_RemoveDataBrowserItems_1=cast=(DataBrowserItemID)
-OS_RemoveDataBrowserItems_2=cast=(UInt32)
-OS_RemoveDataBrowserItems_3=cast=(const DataBrowserItemID *)
-OS_RemoveDataBrowserItems_4=cast=(DataBrowserPropertyID)
-
-OS_RemoveDataBrowserTableViewColumn=
-OS_RemoveDataBrowserTableViewColumn_0=cast=(ControlRef)
-OS_RemoveDataBrowserTableViewColumn_1=cast=(DataBrowserTableViewColumnID)
-
-OS_RemoveEventHandler=
-OS_RemoveEventHandler_0=cast=(EventHandlerRef)
-
-OS_RemoveEventLoopTimer=
-OS_RemoveEventLoopTimer_0=cast=(EventLoopTimerRef)
-
-OS_RemoveReceiveHandler=
-OS_RemoveReceiveHandler_0=cast=(DragReceiveHandlerUPP)
-OS_RemoveReceiveHandler_1=cast=(WindowRef)
-
-OS_RemoveTrackingHandler=
-OS_RemoveTrackingHandler_0=cast=(DragTrackingHandlerUPP)
-OS_RemoveTrackingHandler_1=cast=(WindowRef)
-
-OS_RepositionWindow=
-OS_RepositionWindow_0=cast=(WindowRef)
-OS_RepositionWindow_1=cast=(WindowRef)
-OS_RepositionWindow_2=
-
-OS_ReshapeCustomWindow=
-OS_ReshapeCustomWindow_0=cast=WindowRef
-
-OS_RestoreApplicationDockTileImage=
-
-OS_RetainEvent=
-OS_RetainEvent_0=cast=(EventRef)
-
-OS_RetainMenu=
-OS_RetainMenu_0=cast=(MenuRef)
-
-OS_RetainWindow=
-OS_RetainWindow_0=cast=(WindowRef)
-
-OS_RevealDataBrowserItem=
-OS_RevealDataBrowserItem_0=cast=(ControlRef)
-OS_RevealDataBrowserItem_1=cast=(DataBrowserItemID)
-OS_RevealDataBrowserItem_2=cast=(DataBrowserPropertyID)
-OS_RevealDataBrowserItem_3=cast=(DataBrowserRevealOptions)
-
-OS_RunStandardAlert=
-OS_RunStandardAlert_0=cast=(DialogRef)
-OS_RunStandardAlert_1=cast=(ModalFilterUPP)
-OS_RunStandardAlert_2=cast=(DialogItemIndex *)
-
-OS_ScrollRect=
-OS_ScrollRect_0=cast=(const Rect *)
-OS_ScrollRect_1=cast=(short)
-OS_ScrollRect_2=cast=(short)
-OS_ScrollRect_3=cast=(RgnHandle)
-
-OS_SectRect=
-OS_SectRect_0=flags=no_out
-OS_SectRect_1=flags=no_out
-OS_SectRect_2=flags=no_in
-
-OS_SectRgn=
-OS_SectRgn_0=cast=(RgnHandle)
-OS_SectRgn_1=cast=(RgnHandle)
-OS_SectRgn_2=cast=(RgnHandle)
-
-OS_SelectWindow=
-OS_SelectWindow_0=cast=(WindowRef)
-
-OS_SendBehind=
-OS_SendBehind_0=cast=(WindowRef)
-OS_SendBehind_1=cast=(WindowRef)
-
-OS_SendEventToEventTarget=
-OS_SendEventToEventTarget_0=cast=(EventRef)
-OS_SendEventToEventTarget_1=cast=(EventTargetRef)
-
-OS_SendEventToEventTargetWithOptions=
-OS_SendEventToEventTargetWithOptions_0=cast=EventRef
-OS_SendEventToEventTargetWithOptions_1=cast=(EventTargetRef)
-OS_SendEventToEventTargetWithOptions_2=
-
-OS_SetApplicationDockTileImage=
-OS_SetApplicationDockTileImage_0=cast=(CGImageRef)
-
-OS_SetAutomaticControlDragTrackingEnabledForWindow=
-OS_SetAutomaticControlDragTrackingEnabledForWindow_0=cast=(WindowRef)
-OS_SetAutomaticControlDragTrackingEnabledForWindow_1=cast=Boolean
-
-OS_SetBevelButtonContentInfo=
-OS_SetBevelButtonContentInfo_0=cast=(ControlRef)
-OS_SetBevelButtonContentInfo_1=cast=(ControlButtonContentInfoPtr)
-
-OS_SetClip=
-OS_SetClip_0=cast=(RgnHandle)
-
-OS_SetControl32BitMaximum=
-OS_SetControl32BitMaximum_0=cast=(ControlRef)
-OS_SetControl32BitMaximum_1=cast=(SInt32)
-
-OS_SetControl32BitMinimum=
-OS_SetControl32BitMinimum_0=cast=(ControlRef)
-OS_SetControl32BitMinimum_1=cast=(SInt32)
-
-OS_SetControl32BitValue=
-OS_SetControl32BitValue_0=cast=(ControlRef)
-OS_SetControl32BitValue_1=cast=(SInt32)
-
-OS_SetControlAction=
-OS_SetControlAction_0=cast=(ControlRef)
-OS_SetControlAction_1=cast=(ControlActionUPP)
-
-OS_SetControlBounds=
-OS_SetControlBounds_0=cast=(ControlRef)
-OS_SetControlBounds_1=cast=(const Rect *)
-
-OS_SetControlColorProc=
-OS_SetControlColorProc_0=cast=(ControlRef)
-OS_SetControlColorProc_1=cast=(ControlColorUPP)
-
-OS_SetControlData__IIIII=
-OS_SetControlData__IIIII_0=cast=(ControlRef)
-OS_SetControlData__IIIII_1=cast=(ControlPartCode)
-OS_SetControlData__IIIII_2=cast=(ResType)
-OS_SetControlData__IIIII_3=cast=(Size)
-OS_SetControlData__IIIII_4=cast=(const void *)
-
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_ControlButtonContentInfo_2=
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_ControlButtonContentInfo_2_0=cast=(ControlRef)
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_ControlButtonContentInfo_2_1=cast=(ControlPartCode)
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_ControlButtonContentInfo_2_2=cast=(ResType)
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_ControlButtonContentInfo_2_3=cast=(Size)
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_ControlButtonContentInfo_2_4=cast=(const void *)
-
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_ControlEditTextSelectionRec_2=
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_ControlEditTextSelectionRec_2_0=cast=(ControlRef)
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_ControlEditTextSelectionRec_2_1=cast=(ControlPartCode)
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_ControlEditTextSelectionRec_2_2=cast=(ResType)
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_ControlEditTextSelectionRec_2_3=cast=(Size)
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_ControlEditTextSelectionRec_2_4=cast=(const void *)
-
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_ControlTabInfoRecV1_2=
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_ControlTabInfoRecV1_2_0=cast=(ControlRef)
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_ControlTabInfoRecV1_2_1=cast=(ControlPartCode)
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_ControlTabInfoRecV1_2_2=cast=(ResType)
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_ControlTabInfoRecV1_2_3=cast=(Size)
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_ControlTabInfoRecV1_2_4=cast=(const void *)
-
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_Rect_2=
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_Rect_2_0=cast=(ControlRef)
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_Rect_2_1=cast=(ControlPartCode)
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_Rect_2_2=cast=(ResType)
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_Rect_2_3=cast=(Size)
-OS_SetControlData__IIIILorg_eclipse_swt_internal_carbon_Rect_2_4=cast=(const void *)
-
-OS_SetControlData__IIII_3B=
-OS_SetControlData__IIII_3B_0=cast=(ControlRef)
-OS_SetControlData__IIII_3B_1=cast=(ControlPartCode)
-OS_SetControlData__IIII_3B_2=cast=(ResType)
-OS_SetControlData__IIII_3B_3=cast=(Size)
-OS_SetControlData__IIII_3B_4=cast=(const void *)
-
-OS_SetControlData__IIII_3I=
-OS_SetControlData__IIII_3I_0=cast=(ControlRef)
-OS_SetControlData__IIII_3I_1=cast=(ControlPartCode)
-OS_SetControlData__IIII_3I_2=cast=(ResType)
-OS_SetControlData__IIII_3I_3=cast=(Size)
-OS_SetControlData__IIII_3I_4=cast=(const void *)
-
-OS_SetControlData__IIII_3S=
-OS_SetControlData__IIII_3S_0=cast=(ControlRef)
-OS_SetControlData__IIII_3S_1=cast=(ControlPartCode)
-OS_SetControlData__IIII_3S_2=cast=(ResType)
-OS_SetControlData__IIII_3S_3=cast=(Size)
-OS_SetControlData__IIII_3S_4=cast=(const void *)
-
-OS_SetControlFontStyle=
-OS_SetControlFontStyle_0=cast=(ControlRef)
-OS_SetControlFontStyle_1=cast=(const ControlFontStyleRec *)
-
-OS_SetControlPopupMenuHandle=
-OS_SetControlPopupMenuHandle_0=cast=(ControlRef)
-OS_SetControlPopupMenuHandle_1=cast=(MenuRef)
-
-OS_SetControlProperty=
-OS_SetControlProperty_0=cast=(ControlRef)
-OS_SetControlProperty_1=
-OS_SetControlProperty_2=
-OS_SetControlProperty_3=
-OS_SetControlProperty_4=cast=(const void *)
-
-OS_SetControlReference=
-OS_SetControlReference_0=cast=(ControlRef)
-OS_SetControlReference_1=cast=(SInt32)
-
-OS_SetControlTitleWithCFString=
-OS_SetControlTitleWithCFString_0=cast=(ControlRef)
-OS_SetControlTitleWithCFString_1=cast=(CFStringRef)
-
-OS_SetControlViewSize=
-OS_SetControlViewSize_0=cast=(ControlRef)
-OS_SetControlViewSize_1=cast=(SInt32)
-
-OS_SetControlVisibility=
-OS_SetControlVisibility_0=cast=(ControlRef)
-OS_SetControlVisibility_1=
-OS_SetControlVisibility_2=
-
-OS_SetCursor=
-OS_SetCursor_0=cast=(const Cursor *)
-
-OS_SetDataBrowserCallbacks=
-OS_SetDataBrowserCallbacks_0=cast=(ControlRef)
-OS_SetDataBrowserCallbacks_1=cast=(const DataBrowserCallbacks *),flags=init
-
-OS_SetDataBrowserCustomCallbacks=
-OS_SetDataBrowserCustomCallbacks_0=cast=(ControlRef)
-OS_SetDataBrowserCustomCallbacks_1=
-
-OS_SetDataBrowserHasScrollBars=
-OS_SetDataBrowserHasScrollBars_0=cast=(ControlRef)
-OS_SetDataBrowserHasScrollBars_1=cast=(Boolean)
-OS_SetDataBrowserHasScrollBars_2=cast=(Boolean)
-
-OS_SetDataBrowserItemDataBooleanValue=
-OS_SetDataBrowserItemDataBooleanValue_0=cast=(DataBrowserItemDataRef)
-OS_SetDataBrowserItemDataBooleanValue_1=cast=(Boolean)
-
-OS_SetDataBrowserItemDataButtonValue=
-OS_SetDataBrowserItemDataButtonValue_0=cast=(DataBrowserItemDataRef)
-OS_SetDataBrowserItemDataButtonValue_1=cast=(ThemeButtonValue)
-
-OS_SetDataBrowserItemDataIcon=
-OS_SetDataBrowserItemDataIcon_0=cast=(DataBrowserItemDataRef)
-OS_SetDataBrowserItemDataIcon_1=cast=(IconRef)
-
-OS_SetDataBrowserItemDataItemID=
-OS_SetDataBrowserItemDataItemID_0=cast=(DataBrowserItemDataRef)
-OS_SetDataBrowserItemDataItemID_1=cast=(DataBrowserItemID)
-
-OS_SetDataBrowserItemDataText=
-OS_SetDataBrowserItemDataText_0=cast=(DataBrowserItemDataRef)
-OS_SetDataBrowserItemDataText_1=cast=(CFStringRef)
-
-OS_SetDataBrowserListViewDisclosureColumn=
-OS_SetDataBrowserListViewDisclosureColumn_0=cast=(ControlRef)
-OS_SetDataBrowserListViewDisclosureColumn_1=cast=(DataBrowserTableViewColumnID)
-OS_SetDataBrowserListViewDisclosureColumn_2=cast=(Boolean)
-
-OS_SetDataBrowserListViewHeaderBtnHeight=
-OS_SetDataBrowserListViewHeaderBtnHeight_0=cast=(ControlRef)
-OS_SetDataBrowserListViewHeaderBtnHeight_1=cast=(UInt16)
-
-OS_SetDataBrowserListViewHeaderDesc=
-OS_SetDataBrowserListViewHeaderDesc_0=cast=(ControlRef)
-OS_SetDataBrowserListViewHeaderDesc_1=
-OS_SetDataBrowserListViewHeaderDesc_2=
-
-OS_SetDataBrowserPropertyFlags=
-OS_SetDataBrowserPropertyFlags_0=cast=ControlRef
-OS_SetDataBrowserPropertyFlags_1=cast=DataBrowserPropertyID
-OS_SetDataBrowserPropertyFlags_2=cast=(DataBrowserPropertyFlags)
-
-OS_SetDataBrowserScrollPosition=
-OS_SetDataBrowserScrollPosition_0=cast=(ControlRef)
-OS_SetDataBrowserScrollPosition_1=cast=(UInt32)
-OS_SetDataBrowserScrollPosition_2=cast=(UInt32)
-
-OS_SetDataBrowserSelectedItems=
-OS_SetDataBrowserSelectedItems_0=cast=(ControlRef)
-OS_SetDataBrowserSelectedItems_1=cast=(UInt32)
-OS_SetDataBrowserSelectedItems_2=cast=(const DataBrowserItemID *)
-OS_SetDataBrowserSelectedItems_3=cast=(DataBrowserSetOption)
-
-OS_SetDataBrowserSelectionFlags=
-OS_SetDataBrowserSelectionFlags_0=cast=(ControlRef)
-OS_SetDataBrowserSelectionFlags_1=cast=(DataBrowserSelectionFlags)
-
-OS_SetDataBrowserSortOrder=
-OS_SetDataBrowserSortOrder_0=cast=(ControlRef)
-OS_SetDataBrowserSortOrder_1=
-
-OS_SetDataBrowserSortProperty=
-OS_SetDataBrowserSortProperty_0=cast=(ControlRef)
-OS_SetDataBrowserSortProperty_1=cast=(DataBrowserPropertyID)
-
-OS_SetDataBrowserTableViewColumnPosition=
-OS_SetDataBrowserTableViewColumnPosition_0=cast=(ControlRef)
-OS_SetDataBrowserTableViewColumnPosition_1=
-OS_SetDataBrowserTableViewColumnPosition_2=
-
-OS_SetDataBrowserTableViewHiliteStyle=
-OS_SetDataBrowserTableViewHiliteStyle_0=cast=(ControlRef)
-OS_SetDataBrowserTableViewHiliteStyle_1=
-
-OS_SetDataBrowserTableViewItemRow=
-OS_SetDataBrowserTableViewItemRow_0=cast=(ControlRef)
-OS_SetDataBrowserTableViewItemRow_1=
-OS_SetDataBrowserTableViewItemRow_2=
-
-OS_SetDataBrowserTableViewNamedColumnWidth=
-OS_SetDataBrowserTableViewNamedColumnWidth_0=cast=(ControlRef)
-OS_SetDataBrowserTableViewNamedColumnWidth_1=cast=(DataBrowserTableViewColumnID)
-OS_SetDataBrowserTableViewNamedColumnWidth_2=cast=(UInt16)
-
-OS_SetDataBrowserTableViewRowHeight=
-OS_SetDataBrowserTableViewRowHeight_0=cast=(ControlRef)
-OS_SetDataBrowserTableViewRowHeight_1=
-
-OS_SetDataBrowserTarget=
-OS_SetDataBrowserTarget_0=cast=(ControlRef)
-OS_SetDataBrowserTarget_1=cast=(DataBrowserItemID)
-
-OS_SetDragAllowableActions=
-OS_SetDragAllowableActions_0=cast=(DragRef)
-OS_SetDragAllowableActions_1=cast=(DragActions)
-OS_SetDragAllowableActions_2=cast=(Boolean)
-
-OS_SetDragDropAction=
-OS_SetDragDropAction_0=cast=(DragRef)
-OS_SetDragDropAction_1=cast=(DragActions)
-
-OS_SetDragImageWithCGImage=
-OS_SetDragImageWithCGImage_0=cast=(DragRef)
-OS_SetDragImageWithCGImage_1=cast=(CGImageRef)
-OS_SetDragImageWithCGImage_2=cast=(HIPoint *)
-OS_SetDragImageWithCGImage_3=cast=(DragImageFlags)
-
-OS_SetDragInputProc=
-OS_SetDragInputProc_0=cast=(DragRef)
-OS_SetDragInputProc_1=cast=(DragInputUPP)
-OS_SetDragInputProc_2=cast=(void *)
-
-OS_SetDragItemFlavorData=
-OS_SetDragItemFlavorData_0=cast=(DragRef)
-OS_SetDragItemFlavorData_1=cast=(DragItemRef)
-OS_SetDragItemFlavorData_2=cast=(FlavorType)
-OS_SetDragItemFlavorData_3=cast=(const void *)
-OS_SetDragItemFlavorData_4=cast=(Size)
-OS_SetDragItemFlavorData_5=cast=(UInt32)
-
-OS_SetDragSendProc=
-OS_SetDragSendProc_0=cast=(DragRef)
-OS_SetDragSendProc_1=cast=(DragSendDataUPP)
-OS_SetDragSendProc_2=cast=(void *)
-
-OS_SetEventLoopTimerNextFireTime=
-OS_SetEventLoopTimerNextFireTime_0=cast=(EventLoopTimerRef)
-OS_SetEventLoopTimerNextFireTime_1=cast=(EventTimerInterval)
-
-OS_SetEventParameter__IIIILorg_eclipse_swt_internal_carbon_CGPoint_2=
-OS_SetEventParameter__IIIILorg_eclipse_swt_internal_carbon_CGPoint_2_0=cast=(EventRef)
-OS_SetEventParameter__IIIILorg_eclipse_swt_internal_carbon_CGPoint_2_1=cast=(EventParamName)
-OS_SetEventParameter__IIIILorg_eclipse_swt_internal_carbon_CGPoint_2_2=cast=(EventParamType)
-OS_SetEventParameter__IIIILorg_eclipse_swt_internal_carbon_CGPoint_2_3=cast=(UInt32)
-OS_SetEventParameter__IIIILorg_eclipse_swt_internal_carbon_CGPoint_2_4=cast=(const void *)
-
-OS_SetEventParameter__IIIILorg_eclipse_swt_internal_carbon_HICommand_2=
-OS_SetEventParameter__IIIILorg_eclipse_swt_internal_carbon_HICommand_2_0=cast=(EventRef)
-OS_SetEventParameter__IIIILorg_eclipse_swt_internal_carbon_HICommand_2_1=cast=(EventParamName)
-OS_SetEventParameter__IIIILorg_eclipse_swt_internal_carbon_HICommand_2_2=cast=(EventParamType)
-OS_SetEventParameter__IIIILorg_eclipse_swt_internal_carbon_HICommand_2_3=cast=(UInt32)
-OS_SetEventParameter__IIIILorg_eclipse_swt_internal_carbon_HICommand_2_4=cast=(const void *)
-
-OS_SetEventParameter__IIII_3C=
-OS_SetEventParameter__IIII_3C_0=cast=(EventRef)
-OS_SetEventParameter__IIII_3C_1=cast=(EventParamName)
-OS_SetEventParameter__IIII_3C_2=cast=(EventParamType)
-OS_SetEventParameter__IIII_3C_3=cast=(UInt32)
-OS_SetEventParameter__IIII_3C_4=cast=(const void *)
-
-OS_SetEventParameter__IIII_3I=
-OS_SetEventParameter__IIII_3I_0=cast=(EventRef)
-OS_SetEventParameter__IIII_3I_1=cast=(EventParamName)
-OS_SetEventParameter__IIII_3I_2=cast=(EventParamType)
-OS_SetEventParameter__IIII_3I_3=cast=(UInt32)
-OS_SetEventParameter__IIII_3I_4=cast=(const void *)
-
-OS_SetEventParameter__IIII_3S=
-OS_SetEventParameter__IIII_3S_0=cast=(EventRef)
-OS_SetEventParameter__IIII_3S_1=cast=(EventParamName)
-OS_SetEventParameter__IIII_3S_2=cast=(EventParamType)
-OS_SetEventParameter__IIII_3S_3=cast=(UInt32)
-OS_SetEventParameter__IIII_3S_4=cast=(const void *)
-
-OS_SetFontInfoForSelection=
-OS_SetFontInfoForSelection_0=cast=(OSType)
-OS_SetFontInfoForSelection_1=cast=(UInt32)
-OS_SetFontInfoForSelection_2=cast=(void *)
-OS_SetFontInfoForSelection_3=cast=void *
-
-OS_SetFrontProcess=
-OS_SetFrontProcess_0=cast=(const ProcessSerialNumber *)
-
-OS_SetFrontProcessWithOptions=
-OS_SetFrontProcessWithOptions_0=cast=(const ProcessSerialNumber *)
-OS_SetFrontProcessWithOptions_1=
-
-OS_SetGWorld=
-OS_SetGWorld_0=cast=(CGrafPtr)
-OS_SetGWorld_1=cast=(GDHandle)
-
-OS_SetIconFamilyData=
-OS_SetIconFamilyData_0=cast=IconFamilyHandle
-OS_SetIconFamilyData_1=cast=OSType
-OS_SetIconFamilyData_2=cast=Handle
-
-OS_SetItemMark=
-OS_SetItemMark_0=cast=(MenuRef)
-OS_SetItemMark_1=
-OS_SetItemMark_2=
-
-OS_SetKeyboardFocus=
-OS_SetKeyboardFocus_0=cast=(WindowRef)
-OS_SetKeyboardFocus_1=cast=(ControlRef)
-OS_SetKeyboardFocus_2=cast=(ControlFocusPart)
-
-OS_SetMenuCommandMark=
-OS_SetMenuCommandMark_0=cast=(MenuRef)
-OS_SetMenuCommandMark_1=cast=(MenuCommand)
-OS_SetMenuCommandMark_2=cast=(UniChar)
-
-OS_SetMenuFont=
-OS_SetMenuFont_0=cast=(MenuRef)
-OS_SetMenuFont_1=cast=(SInt16)
-OS_SetMenuFont_2=cast=(UInt16)
-
-OS_SetMenuItemCommandKey=
-OS_SetMenuItemCommandKey_0=cast=(MenuRef)
-OS_SetMenuItemCommandKey_1=cast=(MenuItemIndex)
-OS_SetMenuItemCommandKey_2=cast=(Boolean)
-OS_SetMenuItemCommandKey_3=cast=(UInt16)
-
-OS_SetMenuItemHierarchicalMenu=
-OS_SetMenuItemHierarchicalMenu_0=cast=(MenuRef)
-OS_SetMenuItemHierarchicalMenu_1=cast=(MenuItemIndex)
-OS_SetMenuItemHierarchicalMenu_2=cast=(MenuRef)
-
-OS_SetMenuItemIconHandle=
-OS_SetMenuItemIconHandle_0=cast=(MenuRef)
-OS_SetMenuItemIconHandle_1=cast=(SInt16)
-OS_SetMenuItemIconHandle_2=cast=(UInt8)
-OS_SetMenuItemIconHandle_3=cast=(Handle)
-
-OS_SetMenuItemKeyGlyph=
-OS_SetMenuItemKeyGlyph_0=cast=(MenuRef)
-OS_SetMenuItemKeyGlyph_1=cast=(SInt16)
-OS_SetMenuItemKeyGlyph_2=cast=(SInt16)
-
-OS_SetMenuItemModifiers=
-OS_SetMenuItemModifiers_0=cast=(MenuRef)
-OS_SetMenuItemModifiers_1=cast=(SInt16)
-OS_SetMenuItemModifiers_2=cast=(UInt8)
-
-OS_SetMenuItemRefCon=
-OS_SetMenuItemRefCon_0=cast=(MenuRef)
-OS_SetMenuItemRefCon_1=cast=(SInt16)
-OS_SetMenuItemRefCon_2=cast=(UInt32)
-
-OS_SetMenuItemTextWithCFString=
-OS_SetMenuItemTextWithCFString_0=cast=(MenuRef)
-OS_SetMenuItemTextWithCFString_1=cast=(MenuItemIndex)
-OS_SetMenuItemTextWithCFString_2=cast=(CFStringRef)
-
-OS_SetMenuTitleWithCFString=
-OS_SetMenuTitleWithCFString_0=cast=(MenuRef)
-OS_SetMenuTitleWithCFString_1=cast=(CFStringRef)
-
-OS_SetOrigin=
-OS_SetOrigin_0=cast=(short)
-OS_SetOrigin_1=cast=(short)
-
-OS_SetPort=
-OS_SetPort_0=cast=(GrafPtr)
-
-OS_SetPortBounds=
-OS_SetPortBounds_0=cast=(CGrafPtr)
-OS_SetPortBounds_1=cast=(const Rect *)
-
-OS_SetPortWindowPort=
-OS_SetPortWindowPort_0=cast=(WindowRef)
-
-OS_SetPt=
-OS_SetPt_0=cast=(Point *)
-OS_SetPt_1=cast=(short)
-OS_SetPt_2=cast=(short)
-
-OS_SetRect=
-OS_SetRect_0=cast=(Rect *)
-OS_SetRect_1=cast=(short)
-OS_SetRect_2=cast=(short)
-OS_SetRect_3=cast=(short)
-OS_SetRect_4=cast=(short)
-
-OS_SetRectRgn=
-OS_SetRectRgn_0=cast=(RgnHandle)
-OS_SetRectRgn_1=cast=(short)
-OS_SetRectRgn_2=cast=(short)
-OS_SetRectRgn_3=cast=(short)
-OS_SetRectRgn_4=cast=(short)
-
-OS_SetRootMenu=
-OS_SetRootMenu_0=cast=(MenuRef)
-
-OS_SetThemeBackground=
-OS_SetThemeBackground_0=cast=(ThemeBrush)
-OS_SetThemeBackground_1=cast=(SInt16)
-OS_SetThemeBackground_2=cast=(Boolean)
-
-OS_SetThemeCursor=
-OS_SetThemeCursor_0=cast=(ThemeCursor)
-
-OS_SetThemeDrawingState=
-OS_SetThemeDrawingState_0=cast=(ThemeDrawingState)
-OS_SetThemeDrawingState_1=cast=(Boolean)
-
-OS_SetThemeTextColor=
-OS_SetThemeTextColor_0=
-OS_SetThemeTextColor_1=
-OS_SetThemeTextColor_2=
-
-OS_SetThemeWindowBackground=
-OS_SetThemeWindowBackground_0=cast=(WindowRef)
-OS_SetThemeWindowBackground_1=cast=(ThemeBrush)
-OS_SetThemeWindowBackground_2=cast=(Boolean)
-
-OS_SetUpControlBackground=
-OS_SetUpControlBackground_0=cast=(ControlRef)
-OS_SetUpControlBackground_1=cast=(SInt16)
-OS_SetUpControlBackground_2=cast=(Boolean)
-
-OS_SetWRefCon=
-OS_SetWRefCon_0=cast=(WindowRef)
-OS_SetWRefCon_1=cast=(long)
-
-OS_SetWindowActivationScope=
-OS_SetWindowActivationScope_0=cast=(WindowRef)
-OS_SetWindowActivationScope_1=cast=(WindowActivationScope)
-
-OS_SetWindowBounds=
-OS_SetWindowBounds_0=cast=(WindowRef)
-OS_SetWindowBounds_1=cast=(WindowRegionCode)
-OS_SetWindowBounds_2=cast=(Rect *)
-
-OS_SetWindowDefaultButton=
-OS_SetWindowDefaultButton_0=cast=(WindowRef)
-OS_SetWindowDefaultButton_1=cast=(ControlRef)
-
-OS_SetWindowGroup=
-OS_SetWindowGroup_0=cast=(WindowRef)
-OS_SetWindowGroup_1=cast=(WindowGroupRef)
-
-OS_SetWindowGroupOwner=
-OS_SetWindowGroupOwner_0=cast=(WindowGroupRef)
-OS_SetWindowGroupOwner_1=cast=(WindowRef)
-
-OS_SetWindowGroupParent=
-OS_SetWindowGroupParent_0=cast=(WindowGroupRef)
-OS_SetWindowGroupParent_1=cast=(WindowGroupRef)
-
-OS_SetWindowModality=
-OS_SetWindowModality_0=cast=(WindowRef)
-OS_SetWindowModality_1=cast=(WindowModality)
-OS_SetWindowModality_2=cast=(WindowRef)
-
-OS_SetWindowResizeLimits=
-OS_SetWindowResizeLimits_0=cast=WindowRef
-OS_SetWindowResizeLimits_1=cast=(HISize *)
-OS_SetWindowResizeLimits_2=cast=(HISize *)
-
-OS_SetWindowTitleWithCFString=
-OS_SetWindowTitleWithCFString_0=cast=(WindowRef)
-OS_SetWindowTitleWithCFString_1=cast=(CFStringRef)
-
-OS_ShowWindow=
-OS_ShowWindow_0=cast=(WindowRef)
-
-OS_SizeControl=
-OS_SizeControl_0=cast=(ControlRef)
-OS_SizeControl_1=cast=(SInt16)
-OS_SizeControl_2=cast=(SInt16)
-
-OS_SizeWindow=
-OS_SizeWindow_0=cast=(WindowRef)
-OS_SizeWindow_1=cast=(short)
-OS_SizeWindow_2=cast=(short)
-OS_SizeWindow_3=cast=(Boolean)
-
-OS_StillDown=
-
-OS_SyncCGContextOriginWithPort=
-OS_SyncCGContextOriginWithPort_0=cast=(CGContextRef)
-OS_SyncCGContextOriginWithPort_1=cast=(CGrafPtr)
-
-OS_SysBeep=
-OS_SysBeep_0=cast=(short)
-
-OS_TXNActivate=
-OS_TXNActivate_0=cast=(TXNObject)
-OS_TXNActivate_1=cast=(TXNFrameID)
-OS_TXNActivate_2=cast=(TXNScrollBarState)
-
-OS_TXNAdjustCursor=
-OS_TXNAdjustCursor_0=cast=(TXNObject)
-OS_TXNAdjustCursor_1=cast=(RgnHandle)
-
-OS_TXNClick=
-OS_TXNClick_0=cast=(TXNObject)
-OS_TXNClick_1=cast=(const EventRecord *)
-
-OS_TXNCopy=
-OS_TXNCopy_0=cast=(TXNObject)
-
-OS_TXNCut=
-OS_TXNCut_0=cast=(TXNObject)
-
-OS_TXNDataSize=
-OS_TXNDataSize_0=cast=(TXNObject)
-
-OS_TXNDeleteObject=
-OS_TXNDeleteObject_0=cast=(TXNObject)
-
-OS_TXNDraw=
-OS_TXNDraw_0=cast=(TXNObject)
-OS_TXNDraw_1=cast=(GWorldPtr)
-
-OS_TXNEchoMode=
-OS_TXNEchoMode_0=cast=(TXNObject)
-OS_TXNEchoMode_1=cast=(UniChar)
-OS_TXNEchoMode_2=cast=(TextEncoding)
-OS_TXNEchoMode_3=cast=(Boolean)
-
-OS_TXNFocus=
-OS_TXNFocus_0=cast=(TXNObject)
-OS_TXNFocus_1=cast=(Boolean)
-
-OS_TXNGetData=
-OS_TXNGetData_0=cast=(TXNObject)
-OS_TXNGetData_1=cast=(TXNOffset)
-OS_TXNGetData_2=cast=(TXNOffset)
-OS_TXNGetData_3=cast=(Handle *)
-
-OS_TXNGetHIRect=
-OS_TXNGetHIRect_0=cast=TXNObject
-OS_TXNGetHIRect_1=
-OS_TXNGetHIRect_2=
-
-OS_TXNGetLineCount=
-OS_TXNGetLineCount_0=cast=(TXNObject)
-OS_TXNGetLineCount_1=cast=(ItemCount *)
-
-OS_TXNGetLineMetrics=
-OS_TXNGetLineMetrics_0=cast=(TXNObject)
-OS_TXNGetLineMetrics_1=cast=(UInt32)
-OS_TXNGetLineMetrics_2=cast=(Fixed *)
-OS_TXNGetLineMetrics_3=cast=(Fixed *)
-
-OS_TXNGetRectBounds=
-OS_TXNGetRectBounds_0=cast=(TXNObject)
-OS_TXNGetRectBounds_1=cast=(Rect *)
-OS_TXNGetRectBounds_2=cast=(TXNLongRect *)
-OS_TXNGetRectBounds_3=cast=(TXNLongRect *)
-
-OS_TXNGetSelection=
-OS_TXNGetSelection_0=cast=(TXNObject)
-OS_TXNGetSelection_1=cast=(TXNOffset *)
-OS_TXNGetSelection_2=cast=(TXNOffset *)
-
-OS_TXNGetTXNObjectControls=
-OS_TXNGetTXNObjectControls_0=cast=(TXNObject)
-OS_TXNGetTXNObjectControls_1=cast=(ItemCount)
-OS_TXNGetTXNObjectControls_2=cast=(const TXNControlTag *)
-OS_TXNGetTXNObjectControls_3=cast=(TXNControlData *)
-
-OS_TXNGetViewRect=
-OS_TXNGetViewRect_0=cast=(TXNObject)
-OS_TXNGetViewRect_1=
-
-OS_TXNInitTextension=
-OS_TXNInitTextension_0=cast=(const TXNMacOSPreferredFontDescription *)
-OS_TXNInitTextension_1=cast=(ItemCount)
-OS_TXNInitTextension_2=cast=(TXNInitOptions)
-
-OS_TXNNewObject=
-OS_TXNNewObject_0=cast=(const FSSpec *)
-OS_TXNNewObject_1=cast=(WindowRef)
-OS_TXNNewObject_2=cast=(const Rect *)
-OS_TXNNewObject_3=cast=(TXNFrameOptions)
-OS_TXNNewObject_4=cast=(TXNFrameType)
-OS_TXNNewObject_5=cast=(TXNFileType)
-OS_TXNNewObject_6=cast=(TXNPermanentTextEncodingType)
-OS_TXNNewObject_7=cast=(TXNObject *)
-OS_TXNNewObject_8=cast=(TXNFrameID *)
-OS_TXNNewObject_9=cast=(TXNObjectRefcon)
-
-OS_TXNOffsetToPoint=
-OS_TXNOffsetToPoint_0=cast=(TXNObject)
-OS_TXNOffsetToPoint_1=cast=(TXNOffset)
-OS_TXNOffsetToPoint_2=cast=(Point *)
-
-OS_TXNPaste=
-OS_TXNPaste_0=cast=(TXNObject)
-
-OS_TXNPointToOffset=
-OS_TXNPointToOffset_0=cast=(TXNObject)
-OS_TXNPointToOffset_1=flags=struct
-OS_TXNPointToOffset_2=cast=(TXNOffset *)
-
-OS_TXNSelectAll=
-OS_TXNSelectAll_0=cast=(TXNObject)
-
-OS_TXNSetBackground=
-OS_TXNSetBackground_0=cast=(TXNObject)
-OS_TXNSetBackground_1=cast=(const TXNBackground *)
-
-OS_TXNSetData=
-OS_TXNSetData_0=cast=(TXNObject)
-OS_TXNSetData_1=cast=(TXNDataType)
-OS_TXNSetData_2=cast=(const void *)
-OS_TXNSetData_3=cast=(ByteCount)
-OS_TXNSetData_4=cast=(TXNOffset)
-OS_TXNSetData_5=cast=(TXNOffset)
-
-OS_TXNSetFrameBounds=
-OS_TXNSetFrameBounds_0=cast=(TXNObject)
-OS_TXNSetFrameBounds_1=cast=(SInt32)
-OS_TXNSetFrameBounds_2=cast=(SInt32)
-OS_TXNSetFrameBounds_3=cast=(SInt32)
-OS_TXNSetFrameBounds_4=cast=(SInt32)
-OS_TXNSetFrameBounds_5=cast=(TXNFrameID)
-
-OS_TXNSetRectBounds=
-OS_TXNSetRectBounds_0=cast=(TXNObject)
-OS_TXNSetRectBounds_1=cast=(Rect *)
-OS_TXNSetRectBounds_2=cast=(TXNLongRect *)
-OS_TXNSetRectBounds_3=cast=(Boolean)
-
-OS_TXNSetSelection=
-OS_TXNSetSelection_0=cast=(TXNObject)
-OS_TXNSetSelection_1=cast=(TXNOffset)
-OS_TXNSetSelection_2=cast=(TXNOffset)
-
-OS_TXNSetTXNObjectControls=
-OS_TXNSetTXNObjectControls_0=cast=(TXNObject)
-OS_TXNSetTXNObjectControls_1=cast=(Boolean)
-OS_TXNSetTXNObjectControls_2=cast=(ItemCount)
-OS_TXNSetTXNObjectControls_3=cast=(const TXNControlTag *)
-OS_TXNSetTXNObjectControls_4=cast=(const TXNControlData *)
-
-OS_TXNSetTypeAttributes=
-OS_TXNSetTypeAttributes_0=cast=(TXNObject)
-OS_TXNSetTypeAttributes_1=cast=(ItemCount)
-OS_TXNSetTypeAttributes_2=cast=(const TXNTypeAttributes *)
-OS_TXNSetTypeAttributes_3=cast=(TXNOffset)
-OS_TXNSetTypeAttributes_4=cast=(TXNOffset)
-
-OS_TXNShowSelection=
-OS_TXNShowSelection_0=cast=(TXNObject)
-OS_TXNShowSelection_1=cast=(Boolean)
-
-OS_TestControl=
-OS_TestControl_0=cast=(ControlRef)
-OS_TestControl_1=cast=(Point *),flags=struct
-
-OS_TextFace=
-OS_TextFace_0=cast=(StyleParameter)
-
-OS_TextFont=
-OS_TextFont_0=cast=(short)
-
-OS_TextMode=
-OS_TextMode_0=cast=(short)
-
-OS_TextSize=
-OS_TextSize_0=cast=(short)
-
-OS_TextWidth=
-OS_TextWidth_0=cast=(const void *)
-OS_TextWidth_1=cast=(short)
-OS_TextWidth_2=cast=(short)
-
-OS_TrackDrag=
-OS_TrackDrag_0=cast=(DragRef)
-OS_TrackDrag_1=cast=(const EventRecord *)
-OS_TrackDrag_2=cast=(RgnHandle)
-
-OS_TrackMouseLocationWithOptions=
-OS_TrackMouseLocationWithOptions_0=cast=(GrafPtr)
-OS_TrackMouseLocationWithOptions_1=cast=(OptionBits)
-OS_TrackMouseLocationWithOptions_2=cast=(EventTimeout)
-OS_TrackMouseLocationWithOptions_3=cast=(Point *)
-OS_TrackMouseLocationWithOptions_4=cast=(UInt32 *)
-OS_TrackMouseLocationWithOptions_5=cast=(MouseTrackingResult *)
-
-OS_UTTypeCreatePreferredIdentifierForTag=
-OS_UTTypeCreatePreferredIdentifierForTag_0=cast=CFStringRef
-OS_UTTypeCreatePreferredIdentifierForTag_1=cast=CFStringRef
-OS_UTTypeCreatePreferredIdentifierForTag_2=cast=CFStringRef
-
-OS_UnionRect=
-OS_UnionRect_0=flags=no_out
-OS_UnionRect_1=flags=no_out
-OS_UnionRect_2=flags=no_in
-
-OS_UnionRgn=
-OS_UnionRgn_0=cast=(RgnHandle)
-OS_UnionRgn_1=cast=(RgnHandle)
-OS_UnionRgn_2=cast=(RgnHandle)
-
-OS_UnlockPortBits=
-OS_UnlockPortBits_0=cast=(GrafPtr)
-
-OS_UpdateControls=
-OS_UpdateControls_0=cast=(WindowRef)
-OS_UpdateControls_1=cast=(RgnHandle)
-
-OS_UpdateDataBrowserItems=
-OS_UpdateDataBrowserItems_0=cast=(ControlRef)
-OS_UpdateDataBrowserItems_1=cast=(DataBrowserItemID)
-OS_UpdateDataBrowserItems_2=cast=(UInt32)
-OS_UpdateDataBrowserItems_3=cast=(const DataBrowserItemID *)
-OS_UpdateDataBrowserItems_4=cast=(DataBrowserPropertyID)
-OS_UpdateDataBrowserItems_5=cast=(DataBrowserPropertyID)
-
-OS_UpgradeScriptInfoToTextEncoding=
-OS_UpgradeScriptInfoToTextEncoding_0=cast=ScriptCode
-OS_UpgradeScriptInfoToTextEncoding_1=cast=LangCode
-OS_UpgradeScriptInfoToTextEncoding_2=cast=(RegionCode)
-OS_UpgradeScriptInfoToTextEncoding_3=cast=ConstStr255Param
-OS_UpgradeScriptInfoToTextEncoding_4=cast=TextEncoding *
-
-OS_WaitMouseMoved=
-OS_WaitMouseMoved_0=flags=struct
-
-OS_X2Fix=
-OS_X2Fix_0=
-
-OS_ZoomWindowIdeal=
-OS_ZoomWindowIdeal_0=cast=(WindowRef)
-OS_ZoomWindowIdeal_1=cast=(WindowPartCode)
-OS_ZoomWindowIdeal_2=cast=(Point *)
-
-OS_getenv=
-OS_getenv_0=cast=(const char *)
-
-OS_getpid=
-
-OS_kCFNumberFormatterDecimalSeparator=flags=const
-
-OS_kHIViewWindowContentID=flags=const address
-
-OS_kPMDocumentFormatPDF=flags=const
-
-OS_kPMGraphicsContextCoreGraphics=flags=const
-
-OS_kUTTagClassFilenameExtension=flags=const
-
-OS_memcpy__III=
-OS_memcpy__III_0=cast=(void *)
-OS_memcpy__III_1=cast=(const void *)
-OS_memcpy__III_2=cast=(size_t)
-
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_ATSUTab_2I=
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_ATSUTab_2I_0=cast=(void *)
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_ATSUTab_2I_1=cast=(const void *),flags=no_out
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_ATSUTab_2I_2=cast=(size_t)
-
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_BitMap_2I=
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_BitMap_2I_0=cast=(void *)
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_BitMap_2I_1=cast=(const void *),flags=no_out
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_BitMap_2I_2=cast=(size_t)
-
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_Cursor_2I=
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_Cursor_2I_0=cast=(void *)
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_Cursor_2I_1=cast=(const void *),flags=no_out
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_Cursor_2I_2=cast=(size_t)
-
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_EventRecord_2I=
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_EventRecord_2I_0=cast=(void *)
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_EventRecord_2I_1=cast=(const void *),flags=no_out
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_EventRecord_2I_2=cast=(size_t)
-
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_FontSelectionQDStyle_2I=
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_FontSelectionQDStyle_2I_0=cast=(void *)
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_FontSelectionQDStyle_2I_1=cast=(const void *),flags=no_out
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_FontSelectionQDStyle_2I_2=cast=(size_t)
-
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_HMHelpContentRec_2I=
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_HMHelpContentRec_2I_0=cast=(void *)
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_HMHelpContentRec_2I_1=cast=(const void *),flags=no_out
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_HMHelpContentRec_2I_2=cast=(size_t)
-
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_PixMap_2I=
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_PixMap_2I_0=cast=(void *)
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_PixMap_2I_1=cast=(const void *),flags=no_out
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_PixMap_2I_2=cast=(size_t)
-
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_RGBColor_2I=
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_RGBColor_2I_0=cast=(void *)
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_RGBColor_2I_1=cast=(const void *),flags=no_out
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_RGBColor_2I_2=cast=(size_t)
-
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_Rect_2I=
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_Rect_2I_0=cast=(void *)
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_Rect_2I_1=cast=(const void *),flags=no_out
-OS_memcpy__ILorg_eclipse_swt_internal_carbon_Rect_2I_2=cast=(size_t)
-
-OS_memcpy__I_3BI=
-OS_memcpy__I_3BI_0=cast=(void *)
-OS_memcpy__I_3BI_1=cast=(const void *),flags=critical no_out
-OS_memcpy__I_3BI_2=cast=(size_t)
-
-OS_memcpy__I_3CI=
-OS_memcpy__I_3CI_0=cast=(void *)
-OS_memcpy__I_3CI_1=cast=(const void *),flags=critical no_out
-OS_memcpy__I_3CI_2=cast=(size_t)
-
-OS_memcpy__I_3FI=
-OS_memcpy__I_3FI_0=cast=(void *)
-OS_memcpy__I_3FI_1=cast=(const void *),flags=critical no_out
-OS_memcpy__I_3FI_2=cast=(size_t)
-
-OS_memcpy__I_3II=
-OS_memcpy__I_3II_0=cast=(void *)
-OS_memcpy__I_3II_1=cast=(const void *),flags=critical no_out
-OS_memcpy__I_3II_2=cast=(size_t)
-
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_ATSLayoutRecord_2II=
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_ATSLayoutRecord_2II_0=cast=(void *),flags=no_in
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_ATSLayoutRecord_2II_1=cast=(const void *)
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_ATSLayoutRecord_2II_2=cast=(size_t)
-
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_ATSTrapezoid_2II=
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_ATSTrapezoid_2II_0=cast=(void *),flags=no_in
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_ATSTrapezoid_2II_1=cast=(const void *)
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_ATSTrapezoid_2II_2=cast=(size_t)
-
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_CGPathElement_2II=
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_CGPathElement_2II_0=cast=(void *),flags=no_in
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_CGPathElement_2II_1=cast=(const void *)
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_CGPathElement_2II_2=cast=(size_t)
-
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_FontSelectionQDStyle_2II=
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_FontSelectionQDStyle_2II_0=cast=(void *),flags=no_in
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_FontSelectionQDStyle_2II_1=cast=(const void *)
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_FontSelectionQDStyle_2II_2=cast=(size_t)
-
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_GDevice_2II=
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_GDevice_2II_0=cast=(void *),flags=no_in
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_GDevice_2II_1=cast=(const void *)
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_GDevice_2II_2=cast=(size_t)
-
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_HMHelpContentRec_2II=
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_HMHelpContentRec_2II_0=cast=(void *),flags=no_in
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_HMHelpContentRec_2II_1=cast=(const void *)
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_HMHelpContentRec_2II_2=cast=(size_t)
-
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_PixMap_2II=
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_PixMap_2II_0=cast=(void *),flags=no_in
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_PixMap_2II_1=cast=(const void *)
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_PixMap_2II_2=cast=(size_t)
-
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_Rect_2II=
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_Rect_2II_0=cast=(void *),flags=no_in
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_Rect_2II_1=cast=(const void *)
-OS_memcpy__Lorg_eclipse_swt_internal_carbon_Rect_2II_2=cast=(size_t)
-
-OS_memcpy___3BII=
-OS_memcpy___3BII_0=cast=(void *),flags=critical no_in
-OS_memcpy___3BII_1=cast=(const void *)
-OS_memcpy___3BII_2=cast=(size_t)
-
-OS_memcpy___3B_3CI=
-OS_memcpy___3B_3CI_0=cast=(void *),flags=critical no_in
-OS_memcpy___3B_3CI_1=cast=(const void *),flags=critical no_out
-OS_memcpy___3B_3CI_2=cast=(size_t)
-
-OS_memcpy___3CII=
-OS_memcpy___3CII_0=cast=(void *),flags=critical no_in
-OS_memcpy___3CII_1=cast=(const void *)
-OS_memcpy___3CII_2=cast=(size_t)
-
-OS_memcpy___3C_3BI=
-OS_memcpy___3C_3BI_0=cast=(void *),flags=critical no_in
-OS_memcpy___3C_3BI_1=cast=(const void *),flags=critical no_out
-OS_memcpy___3C_3BI_2=cast=(size_t)
-
-OS_memcpy___3FII=
-OS_memcpy___3FII_0=cast=(void *),flags=critical no_in
-OS_memcpy___3FII_1=cast=(const void *)
-OS_memcpy___3FII_2=cast=(size_t)
-
-OS_memcpy___3III=
-OS_memcpy___3III_0=cast=(void *),flags=critical no_in
-OS_memcpy___3III_1=cast=(const void *)
-OS_memcpy___3III_2=cast=(size_t)
-
-OS_memcpy___3ILorg_eclipse_swt_internal_carbon_TXNTab_2I=
-OS_memcpy___3ILorg_eclipse_swt_internal_carbon_TXNTab_2I_0=cast=(void *),flags=critical no_in
-OS_memcpy___3ILorg_eclipse_swt_internal_carbon_TXNTab_2I_1=cast=(const void *),flags=no_out
-OS_memcpy___3ILorg_eclipse_swt_internal_carbon_TXNTab_2I_2=cast=(size_t)
-
-OS_memset=
-OS_memset_0=cast=(void *)
-OS_memset_1=
-OS_memset_2=
-
-OS_strlen=
-OS_strlen_0=cast=char *
-
-
-org_eclipse_swt_internal_carbon_PMRect=
-PMRect_top=cast=(double)
-PMRect_left=cast=(double)
-PMRect_bottom=cast=(double)
-PMRect_right=cast=(double)
-
-org_eclipse_swt_internal_carbon_PMResolution=
-PMResolution_hRes=
-PMResolution_vRes=
-
-org_eclipse_swt_internal_carbon_PixMap=
-PixMap_pmVersion=
-PixMap_packType=
-PixMap_packSize=
-PixMap_hRes=
-PixMap_vRes=
-PixMap_pixelType=
-PixMap_pixelSize=
-PixMap_cmpCount=
-PixMap_cmpSize=
-PixMap_pixelFormat=
-PixMap_pmTable=cast=(CTabHandle)
-PixMap_pmExt=cast=(void *)
-
-org_eclipse_swt_internal_carbon_Point=
-Point_v=
-Point_h=
-
-org_eclipse_swt_internal_carbon_ProgressTrackInfo=
-ProgressTrackInfo_phase=
-
-org_eclipse_swt_internal_carbon_RGBColor=
-RGBColor_red=
-RGBColor_green=
-RGBColor_blue=
-
-org_eclipse_swt_internal_carbon_Rect=
-Rect_top=
-Rect_left=
-Rect_bottom=
-Rect_right=
-
-org_eclipse_swt_internal_carbon_ScrollBarTrackInfo=
-ScrollBarTrackInfo_viewsize=
-ScrollBarTrackInfo_pressState=
-
-org_eclipse_swt_internal_carbon_SliderTrackInfo=
-SliderTrackInfo_thumbDir=
-SliderTrackInfo_pressState=
-
-org_eclipse_swt_internal_carbon_TXNBackground=
-TXNBackground_bgType=
-TXNBackground_bg_red=accessor=bg.color.red
-TXNBackground_bg_green=accessor=bg.color.green
-TXNBackground_bg_blue=accessor=bg.color.blue
-
-org_eclipse_swt_internal_carbon_TXNLongRect=
-TXNLongRect_top=
-TXNLongRect_left=
-TXNLongRect_bottom=
-TXNLongRect_right=
-
-org_eclipse_swt_internal_carbon_TXNTab=
-TXNTab_value=
-TXNTab_tabType=
-TXNTab_filler=
-
-org_eclipse_swt_internal_carbon_ThemeButtonDrawInfo=
-ThemeButtonDrawInfo_state=cast=(ThemeDrawState)
-ThemeButtonDrawInfo_value=cast=(ThemeButtonValue)
-ThemeButtonDrawInfo_adornment=cast=(ThemeButtonAdornment)
-
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.cde.CDE.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.cde.CDE.properties
deleted file mode 100644
index 6280d9b..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.cde.CDE.properties
+++ /dev/null
@@ -1,98 +0,0 @@
-###############################################################################
-# Copyright (c) 2004 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
-###############################################################################
-org_eclipse_swt_internal_cde_CDE=
-CDE_DtActionArg_sizeof=
-
-CDE__DtActionInvoke=
-CDE__DtActionInvoke_0=cast=Widget
-CDE__DtActionInvoke_1=cast=char *
-CDE__DtActionInvoke_2=
-CDE__DtActionInvoke_3=
-CDE__DtActionInvoke_4=cast=char *
-CDE__DtActionInvoke_5=cast=char *
-CDE__DtActionInvoke_6=cast=char *
-CDE__DtActionInvoke_7=
-CDE__DtActionInvoke_8=cast=DtActionCallbackProc
-CDE__DtActionInvoke_9=cast=XtPointer
-
-CDE__DtAppInitialize=
-CDE__DtAppInitialize_0=cast=(XtAppContext)
-CDE__DtAppInitialize_1=cast=(Display *)
-CDE__DtAppInitialize_2=cast=Widget
-CDE__DtAppInitialize_3=cast=(char *)
-CDE__DtAppInitialize_4=cast=(char *)
-
-CDE__DtDbLoad=
-
-CDE__DtDtsDataTypeIsAction=
-CDE__DtDtsDataTypeIsAction_0=cast=char *
-
-CDE__DtDtsDataTypeNames=
-
-CDE__DtDtsDataTypeToAttributeValue=
-CDE__DtDtsDataTypeToAttributeValue_0=cast=char *
-CDE__DtDtsDataTypeToAttributeValue_1=cast=char *
-CDE__DtDtsDataTypeToAttributeValue_2=cast=char *
-
-CDE__DtDtsFileToDataType=
-CDE__DtDtsFileToDataType_0=cast=char *
-
-CDE__DtDtsFreeAttributeValue=
-CDE__DtDtsFreeAttributeValue_0=cast=char *
-
-CDE__DtDtsFreeDataType=
-CDE__DtDtsFreeDataType_0=cast=char *
-
-CDE__DtDtsFreeDataTypeNames=
-CDE__DtDtsFreeDataTypeNames_0=cast=char **
-
-CDE__XtAppCreateShell=
-CDE__XtAppCreateShell_0=cast=(String)
-CDE__XtAppCreateShell_1=cast=(String)
-CDE__XtAppCreateShell_2=cast=(WidgetClass)
-CDE__XtAppCreateShell_3=cast=(Display *)
-CDE__XtAppCreateShell_4=cast=(ArgList)
-CDE__XtAppCreateShell_5=
-
-CDE__XtCreateApplicationContext=
-
-CDE__XtDisplayInitialize=
-CDE__XtDisplayInitialize_0=cast=(XtAppContext)
-CDE__XtDisplayInitialize_1=cast=(Display *)
-CDE__XtDisplayInitialize_2=cast=(String)
-CDE__XtDisplayInitialize_3=cast=(String)
-CDE__XtDisplayInitialize_4=cast=(XrmOptionDescRec *)
-CDE__XtDisplayInitialize_5=cast=(Cardinal)
-CDE__XtDisplayInitialize_6=cast=(int *)
-CDE__XtDisplayInitialize_7=cast=(String *)
-
-CDE__XtRealizeWidget=
-CDE__XtRealizeWidget_0=cast=(Widget)
-
-CDE__XtResizeWidget=
-CDE__XtResizeWidget_0=cast=(Widget)
-CDE__XtResizeWidget_1=
-CDE__XtResizeWidget_2=
-CDE__XtResizeWidget_3=
-
-CDE__XtSetMappedWhenManaged=
-CDE__XtSetMappedWhenManaged_0=cast=(Widget)
-CDE__XtSetMappedWhenManaged_1=
-
-CDE__XtToolkitInitialize=
-
-CDE__topLevelShellWidgetClass=flags=const
-
-
-org_eclipse_swt_internal_cde_DtActionArg=
-DtActionArg_argClass=
-DtActionArg_name=accessor=u.file.name,cast=char *
-
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gdip.Gdip.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gdip.Gdip.properties
deleted file mode 100644
index 8a5e160..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gdip.Gdip.properties
+++ /dev/null
@@ -1,771 +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
-###############################################################################
-org_eclipse_swt_internal_gdip_BitmapData=
-BitmapData_Width=
-BitmapData_Height=
-BitmapData_Stride=
-BitmapData_PixelFormat=cast=PixelFormat
-BitmapData_Scan0=cast=void*
-BitmapData_Reserved=cast=UINT_PTR
-
-org_eclipse_swt_internal_gdip_ColorPalette=
-ColorPalette_Flags=
-ColorPalette_Count=
-ColorPalette_Entries=
-
-org_eclipse_swt_internal_gdip_Gdip=flags=cpp
-Gdip_BitmapData_delete=flags=delete
-Gdip_BitmapData_delete_0=
-
-Gdip_BitmapData_new=flags=new
-
-Gdip_Bitmap_GetHBITMAP=flags=cpp
-Gdip_Bitmap_GetHBITMAP_0=cast=(Bitmap*)
-Gdip_Bitmap_GetHBITMAP_1=cast=(Color*),flags=struct
-Gdip_Bitmap_GetHBITMAP_2=cast=(HBITMAP*)
-
-Gdip_Bitmap_GetHICON=flags=cpp
-Gdip_Bitmap_GetHICON_0=cast=(Bitmap*)
-Gdip_Bitmap_GetHICON_1=cast=(HICON*)
-
-Gdip_Bitmap_LockBits=flags=cpp
-Gdip_Bitmap_LockBits_0=cast=Bitmap*
-Gdip_Bitmap_LockBits_1=cast=Rect*
-Gdip_Bitmap_LockBits_2=
-Gdip_Bitmap_LockBits_3=cast=(PixelFormat)
-Gdip_Bitmap_LockBits_4=cast=BitmapData*
-
-Gdip_Bitmap_UnlockBits=flags=cpp
-Gdip_Bitmap_UnlockBits_0=cast=(Bitmap*
-Gdip_Bitmap_UnlockBits_1=cast=(BitmapData*)
-
-Gdip_Bitmap_delete=flags=delete
-Gdip_Bitmap_delete_0=
-
-Gdip_Bitmap_1new__I=flags=new
-Gdip_Bitmap_1new__I_0=cast=HICON
-
-Gdip_Bitmap_1new__II=flags=new
-Gdip_Bitmap_1new__II_0=cast=HBITMAP
-Gdip_Bitmap_1new__II_1=cast=HPALETTE
-
-Gdip_Bitmap_1new__IIIII=flags=new
-Gdip_Bitmap_1new__IIIII_0=
-Gdip_Bitmap_1new__IIIII_1=
-Gdip_Bitmap_1new__IIIII_2=
-Gdip_Bitmap_1new__IIIII_3=cast=PixelFormat
-Gdip_Bitmap_1new__IIIII_4=cast=BYTE *
-
-Gdip_Bitmap_1new___3CZ=flags=new
-Gdip_Bitmap_1new___3CZ_0=cast=(WCHAR*)
-Gdip_Bitmap_1new___3CZ_1=
-
-Gdip_Brush_Clone=flags=cpp
-Gdip_Brush_Clone_0=cast=(Brush *)
-
-Gdip_Brush_GetType=flags=cpp
-Gdip_Brush_GetType_0=cast=(Brush *)
-
-Gdip_Color_delete=flags=delete
-Gdip_Color_delete_0=
-
-Gdip_Color_new=flags=new
-Gdip_Color_new_0=cast=ARGB
-
-Gdip_FontFamily_GetFamilyName=flags=cpp
-Gdip_FontFamily_GetFamilyName_0=cast=FontFamily *
-Gdip_FontFamily_GetFamilyName_1=cast=WCHAR *
-Gdip_FontFamily_GetFamilyName_2=cast=WCHAR
-
-Gdip_FontFamily_delete=flags=delete
-Gdip_FontFamily_delete_0=
-
-Gdip_FontFamily_new=flags=new
-
-Gdip_Font_GetFamily=flags=cpp
-Gdip_Font_GetFamily_0=cast=(Font *)
-Gdip_Font_GetFamily_1=cast=(FontFamily *)
-
-Gdip_Font_GetSize=flags=cpp
-Gdip_Font_GetSize_0=cast=(Font *)
-
-Gdip_Font_GetStyle=flags=cpp
-Gdip_Font_GetStyle_0=cast=(Font *)
-
-Gdip_Font_IsAvailable=flags=cpp
-Gdip_Font_IsAvailable_0=cast=Font *
-
-Gdip_Font_delete=flags=delete
-Gdip_Font_delete_0=
-
-Gdip_Font_1new__II=flags=new
-Gdip_Font_1new__II_0=cast=(HDC)
-Gdip_Font_1new__II_1=cast=(HFONT
-
-Gdip_Font_1new___3CFIII=flags=new
-Gdip_Font_1new___3CFIII_0=cast=const WCHAR *
-Gdip_Font_1new___3CFIII_1=cast=REAL
-Gdip_Font_1new___3CFIII_2=cast=INT
-Gdip_Font_1new___3CFIII_3=cast=Unit
-Gdip_Font_1new___3CFIII_4=cast=const FontCollection *
-
-Gdip_GdiplusShutdown=
-Gdip_GdiplusShutdown_0=cast=ULONG_PTR
-
-Gdip_GdiplusStartup=
-Gdip_GdiplusStartup_0=cast=(ULONG_PTR *)
-Gdip_GdiplusStartup_1=cast=const GdiplusStartupInput *
-Gdip_GdiplusStartup_2=cast=GdiplusStartupOutput *
-
-Gdip_GraphicsPath_AddArc=flags=cpp
-Gdip_GraphicsPath_AddArc_0=cast=(GraphicsPath *)
-Gdip_GraphicsPath_AddArc_1=cast=(REAL)
-Gdip_GraphicsPath_AddArc_2=cast=(REAL)
-Gdip_GraphicsPath_AddArc_3=cast=(REAL)
-Gdip_GraphicsPath_AddArc_4=cast=(REAL)
-Gdip_GraphicsPath_AddArc_5=cast=(REAL)
-Gdip_GraphicsPath_AddArc_6=cast=(REAL)
-
-Gdip_GraphicsPath_AddBezier=flags=cpp
-Gdip_GraphicsPath_AddBezier_0=cast=(GraphicsPath *)
-Gdip_GraphicsPath_AddBezier_1=cast=(REAL)
-Gdip_GraphicsPath_AddBezier_2=cast=REAL
-Gdip_GraphicsPath_AddBezier_3=cast=REAL
-Gdip_GraphicsPath_AddBezier_4=cast=(REAL)
-Gdip_GraphicsPath_AddBezier_5=cast=REAL
-Gdip_GraphicsPath_AddBezier_6=cast=(REAL)
-Gdip_GraphicsPath_AddBezier_7=cast=(REAL)
-Gdip_GraphicsPath_AddBezier_8=cast=(REAL)
-
-Gdip_GraphicsPath_AddLine=flags=cpp
-Gdip_GraphicsPath_AddLine_0=cast=(GraphicsPath *)
-Gdip_GraphicsPath_AddLine_1=cast=REAL
-Gdip_GraphicsPath_AddLine_2=cast=REAL
-Gdip_GraphicsPath_AddLine_3=cast=REAL
-Gdip_GraphicsPath_AddLine_4=cast=REAL
-
-Gdip_GraphicsPath_AddPath=flags=cpp
-Gdip_GraphicsPath_AddPath_0=cast=(GraphicsPath *)
-Gdip_GraphicsPath_AddPath_1=cast=(GraphicsPath *)
-Gdip_GraphicsPath_AddPath_2=cast=BOOL
-
-Gdip_GraphicsPath_AddRectangle=flags=cpp
-Gdip_GraphicsPath_AddRectangle_0=cast=(GraphicsPath *)
-Gdip_GraphicsPath_AddRectangle_1=flags=struct
-
-Gdip_GraphicsPath_AddString=flags=cpp
-Gdip_GraphicsPath_AddString_0=cast=(GraphicsPath *)
-Gdip_GraphicsPath_AddString_1=cast=const WCHAR *
-Gdip_GraphicsPath_AddString_2=cast=INT
-Gdip_GraphicsPath_AddString_3=cast=const FontFamily *
-Gdip_GraphicsPath_AddString_4=cast=INT
-Gdip_GraphicsPath_AddString_5=cast=(REAL)
-Gdip_GraphicsPath_AddString_6=cast=const PointF *,flags=struct
-Gdip_GraphicsPath_AddString_7=cast=const StringFormat *
-
-Gdip_GraphicsPath_CloseFigure=flags=cpp
-Gdip_GraphicsPath_CloseFigure_0=cast=(GraphicsPath *)
-
-Gdip_GraphicsPath_Flatten=flags=cpp
-Gdip_GraphicsPath_Flatten_0=cast=GraphicsPath *
-Gdip_GraphicsPath_Flatten_1=cast=Matrix *
-Gdip_GraphicsPath_Flatten_2=
-
-Gdip_GraphicsPath_GetBounds=flags=cpp
-Gdip_GraphicsPath_GetBounds_0=cast=(GraphicsPath *)
-Gdip_GraphicsPath_GetBounds_1=
-Gdip_GraphicsPath_GetBounds_2=cast=Matrix *
-Gdip_GraphicsPath_GetBounds_3=cast=Pen *
-
-Gdip_GraphicsPath_GetLastPoint=flags=cpp
-Gdip_GraphicsPath_GetLastPoint_0=cast=(GraphicsPath *)
-Gdip_GraphicsPath_GetLastPoint_1=cast=(PointF *)
-
-Gdip_GraphicsPath_GetPathPoints=flags=no_gen cpp
-Gdip_GraphicsPath_GetPathPoints_0=cast=(GraphicsPath *)
-Gdip_GraphicsPath_GetPathPoints_1=cast=PointF *
-Gdip_GraphicsPath_GetPathPoints_2=
-
-Gdip_GraphicsPath_GetPathTypes=flags=cpp
-Gdip_GraphicsPath_GetPathTypes_0=cast=(GraphicsPath *)
-Gdip_GraphicsPath_GetPathTypes_1=cast=BYTE *
-Gdip_GraphicsPath_GetPathTypes_2=
-
-Gdip_GraphicsPath_GetPointCount=flags=cpp
-Gdip_GraphicsPath_GetPointCount_0=cast=(GraphicsPath *)
-
-Gdip_GraphicsPath_IsOutlineVisible=flags=cpp
-Gdip_GraphicsPath_IsOutlineVisible_0=cast=(GraphicsPath *)
-Gdip_GraphicsPath_IsOutlineVisible_1=
-Gdip_GraphicsPath_IsOutlineVisible_2=
-Gdip_GraphicsPath_IsOutlineVisible_3=cast=const Pen *
-Gdip_GraphicsPath_IsOutlineVisible_4=cast=const Graphics *
-
-Gdip_GraphicsPath_IsVisible=flags=cpp
-Gdip_GraphicsPath_IsVisible_0=cast=(GraphicsPath *)
-Gdip_GraphicsPath_IsVisible_1=
-Gdip_GraphicsPath_IsVisible_2=
-Gdip_GraphicsPath_IsVisible_3=cast=const Graphics *
-
-Gdip_GraphicsPath_SetFillMode=flags=cpp
-Gdip_GraphicsPath_SetFillMode_0=cast=(GraphicsPath *)
-Gdip_GraphicsPath_SetFillMode_1=cast=FillMode
-
-Gdip_GraphicsPath_StartFigure=flags=cpp
-Gdip_GraphicsPath_StartFigure_0=cast=(GraphicsPath *)
-
-Gdip_GraphicsPath_Transform=flags=cpp
-Gdip_GraphicsPath_Transform_0=cast=GraphicsPath *
-Gdip_GraphicsPath_Transform_1=cast=Matrix *
-
-Gdip_GraphicsPath_delete=flags=delete
-Gdip_GraphicsPath_delete_0=
-
-Gdip_GraphicsPath_new=flags=new
-Gdip_GraphicsPath_new_0=cast=FillMode
-
-Gdip_Graphics_DrawArc=flags=cpp
-Gdip_Graphics_DrawArc_0=cast=(Graphics *)
-Gdip_Graphics_DrawArc_1=cast=(Pen *)
-Gdip_Graphics_DrawArc_2=
-Gdip_Graphics_DrawArc_3=
-Gdip_Graphics_DrawArc_4=
-Gdip_Graphics_DrawArc_5=
-Gdip_Graphics_DrawArc_6=
-Gdip_Graphics_DrawArc_7=
-
-Gdip_Graphics_DrawEllipse=flags=cpp
-Gdip_Graphics_DrawEllipse_0=cast=(Graphics *)
-Gdip_Graphics_DrawEllipse_1=cast=(Pen *)
-Gdip_Graphics_DrawEllipse_2=
-Gdip_Graphics_DrawEllipse_3=
-Gdip_Graphics_DrawEllipse_4=
-Gdip_Graphics_DrawEllipse_5=
-
-Gdip_Graphics_1DrawImage__IIII=flags=cpp
-Gdip_Graphics_1DrawImage__IIII_0=cast=(Graphics *)
-Gdip_Graphics_1DrawImage__IIII_1=cast=(Image *)
-Gdip_Graphics_1DrawImage__IIII_2=cast=(INT)
-Gdip_Graphics_1DrawImage__IIII_3=cast=(INT)
-
-Gdip_Graphics_1DrawImage__IILorg_eclipse_swt_internal_gdip_Rect_2IIIIIIII=flags=cpp
-Gdip_Graphics_1DrawImage__IILorg_eclipse_swt_internal_gdip_Rect_2IIIIIIII_0=cast=(Graphics *)
-Gdip_Graphics_1DrawImage__IILorg_eclipse_swt_internal_gdip_Rect_2IIIIIIII_1=cast=(Image *)
-Gdip_Graphics_1DrawImage__IILorg_eclipse_swt_internal_gdip_Rect_2IIIIIIII_2=cast=const Rect *,flags=struct
-Gdip_Graphics_1DrawImage__IILorg_eclipse_swt_internal_gdip_Rect_2IIIIIIII_3=cast=(INT)
-Gdip_Graphics_1DrawImage__IILorg_eclipse_swt_internal_gdip_Rect_2IIIIIIII_4=cast=(INT)
-Gdip_Graphics_1DrawImage__IILorg_eclipse_swt_internal_gdip_Rect_2IIIIIIII_5=cast=INT
-Gdip_Graphics_1DrawImage__IILorg_eclipse_swt_internal_gdip_Rect_2IIIIIIII_6=cast=INT
-Gdip_Graphics_1DrawImage__IILorg_eclipse_swt_internal_gdip_Rect_2IIIIIIII_7=cast=(Unit)
-Gdip_Graphics_1DrawImage__IILorg_eclipse_swt_internal_gdip_Rect_2IIIIIIII_8=cast=ImageAttributes *
-Gdip_Graphics_1DrawImage__IILorg_eclipse_swt_internal_gdip_Rect_2IIIIIIII_9=cast=DrawImageAbort
-Gdip_Graphics_1DrawImage__IILorg_eclipse_swt_internal_gdip_Rect_2IIIIIIII_10=cast=VOID *
-
-Gdip_Graphics_DrawLine=flags=cpp
-Gdip_Graphics_DrawLine_0=cast=(Graphics *)
-Gdip_Graphics_DrawLine_1=cast=(Pen *)
-Gdip_Graphics_DrawLine_2=
-Gdip_Graphics_DrawLine_3=
-Gdip_Graphics_DrawLine_4=
-Gdip_Graphics_DrawLine_5=
-
-Gdip_Graphics_DrawLines=flags=no_gen cpp
-Gdip_Graphics_DrawLines_0=cast=(Graphics *)
-Gdip_Graphics_DrawLines_1=cast=(Pen *)
-Gdip_Graphics_DrawLines_2=
-Gdip_Graphics_DrawLines_3=cast=INT
-
-Gdip_Graphics_DrawPath=flags=cpp
-Gdip_Graphics_DrawPath_0=cast=(Graphics *)
-Gdip_Graphics_DrawPath_1=cast=(Pen *)
-Gdip_Graphics_DrawPath_2=cast=(GraphicsPath *)
-
-Gdip_Graphics_DrawPolygon=flags=no_gen cpp
-Gdip_Graphics_DrawPolygon_0=cast=(Graphics *)
-Gdip_Graphics_DrawPolygon_1=cast=(Pen *)
-Gdip_Graphics_DrawPolygon_2=
-Gdip_Graphics_DrawPolygon_3=cast=INT
-
-Gdip_Graphics_DrawRectangle=flags=cpp
-Gdip_Graphics_DrawRectangle_0=cast=(Graphics *)
-Gdip_Graphics_DrawRectangle_1=cast=(Pen *)
-Gdip_Graphics_DrawRectangle_2=
-Gdip_Graphics_DrawRectangle_3=
-Gdip_Graphics_DrawRectangle_4=
-Gdip_Graphics_DrawRectangle_5=
-
-Gdip_Graphics_1DrawString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2I=flags=cpp
-Gdip_Graphics_1DrawString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2I_0=cast=(Graphics *)
-Gdip_Graphics_1DrawString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2I_1=cast=WCHAR *
-Gdip_Graphics_1DrawString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2I_2=cast=int
-Gdip_Graphics_1DrawString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2I_3=cast=Font *
-Gdip_Graphics_1DrawString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2I_4=flags=struct
-Gdip_Graphics_1DrawString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2I_5=cast=Brush *
-
-Gdip_Graphics_1DrawString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2II=flags=cpp
-Gdip_Graphics_1DrawString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2II_0=cast=(Graphics *)
-Gdip_Graphics_1DrawString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2II_1=cast=WCHAR *
-Gdip_Graphics_1DrawString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2II_2=cast=int
-Gdip_Graphics_1DrawString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2II_3=cast=Font *
-Gdip_Graphics_1DrawString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2II_4=flags=struct
-Gdip_Graphics_1DrawString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2II_5=cast=StringFormat *
-Gdip_Graphics_1DrawString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2II_6=cast=(Brush *)
-
-Gdip_Graphics_FillEllipse=flags=cpp
-Gdip_Graphics_FillEllipse_0=cast=(Graphics *)
-Gdip_Graphics_FillEllipse_1=cast=(Brush *)
-Gdip_Graphics_FillEllipse_2=cast=(INT)
-Gdip_Graphics_FillEllipse_3=cast=(INT)
-Gdip_Graphics_FillEllipse_4=cast=(INT)
-Gdip_Graphics_FillEllipse_5=cast=(INT)
-
-Gdip_Graphics_FillPath=flags=cpp
-Gdip_Graphics_FillPath_0=cast=(Graphics *)
-Gdip_Graphics_FillPath_1=cast=(Brush *)
-Gdip_Graphics_FillPath_2=cast=(GraphicsPath *)
-
-Gdip_Graphics_FillPie=flags=cpp
-Gdip_Graphics_FillPie_0=cast=(Graphics *)
-Gdip_Graphics_FillPie_1=cast=(Brush *)
-Gdip_Graphics_FillPie_2=cast=(INT)
-Gdip_Graphics_FillPie_3=cast=(INT)
-Gdip_Graphics_FillPie_4=cast=(INT)
-Gdip_Graphics_FillPie_5=cast=(INT)
-Gdip_Graphics_FillPie_6=cast=(REAL)
-Gdip_Graphics_FillPie_7=cast=(REAL)
-
-Gdip_Graphics_FillPolygon=flags=no_gen cpp
-Gdip_Graphics_FillPolygon_0=cast=(Graphics *)
-Gdip_Graphics_FillPolygon_1=cast=(Brush *)
-Gdip_Graphics_FillPolygon_2=cast=Point *
-Gdip_Graphics_FillPolygon_3=cast=(INT)
-Gdip_Graphics_FillPolygon_4=cast=FillMode
-
-Gdip_Graphics_FillRectangle=flags=cpp
-Gdip_Graphics_FillRectangle_0=cast=(Graphics *)
-Gdip_Graphics_FillRectangle_1=cast=(Brush *)
-Gdip_Graphics_FillRectangle_2=cast=(INT)
-Gdip_Graphics_FillRectangle_3=cast=INT
-Gdip_Graphics_FillRectangle_4=cast=INT
-Gdip_Graphics_FillRectangle_5=cast=INT
-
-Gdip_Graphics_Flush=flags=cpp
-Gdip_Graphics_Flush_0=cast=Graphics *
-Gdip_Graphics_Flush_1=cast=FlushIntention
-
-Gdip_Graphics_GetClip=flags=cpp
-Gdip_Graphics_GetClip_0=cast=(Graphics *)
-Gdip_Graphics_GetClip_1=cast=Region *
-
-Gdip_Graphics_1GetClipBounds__ILorg_eclipse_swt_internal_gdip_RectF_2=flags=cpp
-Gdip_Graphics_1GetClipBounds__ILorg_eclipse_swt_internal_gdip_RectF_2_0=cast=Graphics *
-Gdip_Graphics_1GetClipBounds__ILorg_eclipse_swt_internal_gdip_RectF_2_1=
-
-Gdip_Graphics_1GetClipBounds__ILorg_eclipse_swt_internal_gdip_Rect_2=flags=cpp
-Gdip_Graphics_1GetClipBounds__ILorg_eclipse_swt_internal_gdip_Rect_2_0=cast=(Graphics *)
-Gdip_Graphics_1GetClipBounds__ILorg_eclipse_swt_internal_gdip_Rect_2_1=
-
-Gdip_Graphics_GetHDC=flags=cpp
-Gdip_Graphics_GetHDC_0=cast=Graphics *
-
-Gdip_Graphics_GetInterpolationMode=flags=cpp
-Gdip_Graphics_GetInterpolationMode_0=cast=(Graphics *)
-
-Gdip_Graphics_GetSmoothingMode=flags=cpp
-Gdip_Graphics_GetSmoothingMode_0=cast=(Graphics *)
-
-Gdip_Graphics_GetTextRenderingHint=flags=cpp
-Gdip_Graphics_GetTextRenderingHint_0=cast=(Graphics *)
-
-Gdip_Graphics_GetTransform=flags=cpp
-Gdip_Graphics_GetTransform_0=cast=(Graphics *)
-Gdip_Graphics_GetTransform_1=cast=Matrix *
-
-Gdip_Graphics_GetVisibleClipBounds=flags=cpp
-Gdip_Graphics_GetVisibleClipBounds_0=cast=(Graphics *)
-Gdip_Graphics_GetVisibleClipBounds_1=
-
-Gdip_Graphics_1MeasureString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2ILorg_eclipse_swt_internal_gdip_RectF_2=flags=cpp
-Gdip_Graphics_1MeasureString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2ILorg_eclipse_swt_internal_gdip_RectF_2_0=cast=(Graphics *)
-Gdip_Graphics_1MeasureString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2ILorg_eclipse_swt_internal_gdip_RectF_2_1=cast=const WCHAR *
-Gdip_Graphics_1MeasureString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2ILorg_eclipse_swt_internal_gdip_RectF_2_2=cast=INT
-Gdip_Graphics_1MeasureString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2ILorg_eclipse_swt_internal_gdip_RectF_2_3=cast=const Font *
-Gdip_Graphics_1MeasureString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2ILorg_eclipse_swt_internal_gdip_RectF_2_4=cast=const PointF *,flags=struct
-Gdip_Graphics_1MeasureString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2ILorg_eclipse_swt_internal_gdip_RectF_2_5=cast=StringFormat *
-Gdip_Graphics_1MeasureString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2ILorg_eclipse_swt_internal_gdip_RectF_2_6=
-
-Gdip_Graphics_1MeasureString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2Lorg_eclipse_swt_internal_gdip_RectF_2=flags=cpp
-Gdip_Graphics_1MeasureString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2Lorg_eclipse_swt_internal_gdip_RectF_2_0=cast=(Graphics *)
-Gdip_Graphics_1MeasureString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2Lorg_eclipse_swt_internal_gdip_RectF_2_1=cast=const WCHAR *
-Gdip_Graphics_1MeasureString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2Lorg_eclipse_swt_internal_gdip_RectF_2_2=cast=INT
-Gdip_Graphics_1MeasureString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2Lorg_eclipse_swt_internal_gdip_RectF_2_3=cast=const Font *
-Gdip_Graphics_1MeasureString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2Lorg_eclipse_swt_internal_gdip_RectF_2_4=cast=const PointF *,flags=struct
-Gdip_Graphics_1MeasureString__I_3CIILorg_eclipse_swt_internal_gdip_PointF_2Lorg_eclipse_swt_internal_gdip_RectF_2_5=cast=RectF *
-
-Gdip_Graphics_ReleaseHDC=flags=cpp
-Gdip_Graphics_ReleaseHDC_0=cast=Graphics *
-Gdip_Graphics_ReleaseHDC_1=cast=HDC
-
-Gdip_Graphics_ResetClip=flags=cpp
-Gdip_Graphics_ResetClip_0=cast=(Graphics *)
-
-Gdip_Graphics_Restore=flags=cpp
-Gdip_Graphics_Restore_0=cast=(Graphics *)
-Gdip_Graphics_Restore_1=cast=GraphicsState
-
-Gdip_Graphics_Save=flags=cpp
-Gdip_Graphics_Save_0=cast=(Graphics *)
-
-Gdip_Graphics_ScaleTransform=flags=cpp
-Gdip_Graphics_ScaleTransform_0=cast=(Graphics *)
-Gdip_Graphics_ScaleTransform_1=
-Gdip_Graphics_ScaleTransform_2=
-Gdip_Graphics_ScaleTransform_3=cast=(MatrixOrder)
-
-Gdip_Graphics_1SetClip__II=flags=cpp
-Gdip_Graphics_1SetClip__II_0=cast=(Graphics *)
-Gdip_Graphics_1SetClip__II_1=cast=GraphicsPath *
-
-Gdip_Graphics_1SetClip__III=flags=cpp
-Gdip_Graphics_1SetClip__III_0=cast=(Graphics *)
-Gdip_Graphics_1SetClip__III_1=cast=Region *
-Gdip_Graphics_1SetClip__III_2=cast=CombineMode
-
-Gdip_Graphics_1SetClip__ILorg_eclipse_swt_internal_gdip_RectF_2=flags=cpp
-Gdip_Graphics_1SetClip__ILorg_eclipse_swt_internal_gdip_RectF_2_0=cast=(Graphics *)
-Gdip_Graphics_1SetClip__ILorg_eclipse_swt_internal_gdip_RectF_2_1=flags=struct
-
-Gdip_Graphics_SetCompositingQuality=flags=cpp
-Gdip_Graphics_SetCompositingQuality_0=cast=Graphics *
-Gdip_Graphics_SetCompositingQuality_1=cast=CompositingQuality
-
-Gdip_Graphics_SetInterpolationMode=flags=cpp
-Gdip_Graphics_SetInterpolationMode_0=cast=(Graphics *)
-Gdip_Graphics_SetInterpolationMode_1=cast=InterpolationMode
-
-Gdip_Graphics_SetPixelOffsetMode=flags=cpp
-Gdip_Graphics_SetPixelOffsetMode_0=cast=(Graphics *)
-Gdip_Graphics_SetPixelOffsetMode_1=cast=PixelOffsetMode
-
-Gdip_Graphics_SetSmoothingMode=flags=cpp
-Gdip_Graphics_SetSmoothingMode_0=cast=(Graphics *)
-Gdip_Graphics_SetSmoothingMode_1=cast=(SmoothingMode)
-
-Gdip_Graphics_SetTextRenderingHint=flags=cpp
-Gdip_Graphics_SetTextRenderingHint_0=cast=(Graphics *)
-Gdip_Graphics_SetTextRenderingHint_1=cast=TextRenderingHint
-
-Gdip_Graphics_SetTransform=flags=cpp
-Gdip_Graphics_SetTransform_0=cast=(Graphics *)
-Gdip_Graphics_SetTransform_1=cast=(Matrix *)
-
-Gdip_Graphics_TranslateTransform=flags=cpp
-Gdip_Graphics_TranslateTransform_0=cast=Graphics *
-Gdip_Graphics_TranslateTransform_1=
-Gdip_Graphics_TranslateTransform_2=
-Gdip_Graphics_TranslateTransform_3=cast=(MatrixOrder)
-
-Gdip_Graphics_delete=flags=delete
-Gdip_Graphics_delete_0=
-
-Gdip_Graphics_new=flags=new
-Gdip_Graphics_new_0=cast=(HDC)
-
-Gdip_HatchBrush_delete=flags=delete
-Gdip_HatchBrush_delete_0=
-
-Gdip_HatchBrush_new=flags=new
-Gdip_HatchBrush_new_0=cast=HatchStyle
-Gdip_HatchBrush_new_1=cast=Color *,flags=struct
-Gdip_HatchBrush_new_2=cast=Color *,flags=struct
-
-Gdip_ImageAttributes_SetColorMatrix=flags=cpp
-Gdip_ImageAttributes_SetColorMatrix_0=cast=(ImageAttributes *)
-Gdip_ImageAttributes_SetColorMatrix_1=cast=ColorMatrix *
-Gdip_ImageAttributes_SetColorMatrix_2=cast=ColorMatrixFlags
-Gdip_ImageAttributes_SetColorMatrix_3=cast=ColorAdjustType
-
-Gdip_ImageAttributes_SetWrapMode=flags=cpp
-Gdip_ImageAttributes_SetWrapMode_0=cast=(ImageAttributes *)
-Gdip_ImageAttributes_SetWrapMode_1=cast=WrapMode
-
-Gdip_ImageAttributes_delete=flags=delete
-Gdip_ImageAttributes_delete_0=
-
-Gdip_ImageAttributes_new=flags=new
-
-Gdip_Image_GetHeight=flags=cpp
-Gdip_Image_GetHeight_0=cast=(Image *)
-
-Gdip_Image_GetLastStatus=flags=cpp
-Gdip_Image_GetLastStatus_0=cast=(Image*)
-
-Gdip_Image_GetPalette=flags=cpp
-Gdip_Image_GetPalette_0=cast=(Image*)
-Gdip_Image_GetPalette_1=cast=ColorPalette*
-Gdip_Image_GetPalette_2=
-
-Gdip_Image_GetPaletteSize=flags=cpp
-Gdip_Image_GetPaletteSize_0=cast=Image*
-
-Gdip_Image_GetPixelFormat=flags=cpp
-Gdip_Image_GetPixelFormat_0=cast=(Image*)
-
-Gdip_Image_GetWidth=flags=cpp
-Gdip_Image_GetWidth_0=cast=Image *
-
-Gdip_LinearGradientBrush_SetInterpolationColors=flags=no_gen cpp
-Gdip_LinearGradientBrush_SetInterpolationColors_0=cast=LinearGradientBrush *
-Gdip_LinearGradientBrush_SetInterpolationColors_1=cast=const Color *
-Gdip_LinearGradientBrush_SetInterpolationColors_2=cast=const REAL *
-Gdip_LinearGradientBrush_SetInterpolationColors_3=
-
-Gdip_LinearGradientBrush_SetWrapMode=flags=cpp
-Gdip_LinearGradientBrush_SetWrapMode_0=cast=LinearGradientBrush *
-Gdip_LinearGradientBrush_SetWrapMode_1=cast=WrapMode
-
-Gdip_LinearGradientBrush_delete=flags=delete
-Gdip_LinearGradientBrush_delete_0=
-
-Gdip_LinearGradientBrush_new=flags=new
-Gdip_LinearGradientBrush_new_0=flags=struct
-Gdip_LinearGradientBrush_new_1=flags=struct
-Gdip_LinearGradientBrush_new_2=cast=Color *,flags=struct
-Gdip_LinearGradientBrush_new_3=cast=Color *,flags=struct
-
-Gdip_Matrix_GetElements=flags=cpp
-Gdip_Matrix_GetElements_0=cast=(Matrix *)
-Gdip_Matrix_GetElements_1=cast=(REAL *)
-
-Gdip_Matrix_Invert=flags=cpp
-Gdip_Matrix_Invert_0=cast=(Matrix *)
-
-Gdip_Matrix_IsIdentity=flags=cpp
-Gdip_Matrix_IsIdentity_0=cast=(Matrix *)
-
-Gdip_Matrix_Multiply=flags=cpp
-Gdip_Matrix_Multiply_0=cast=(Matrix *)
-Gdip_Matrix_Multiply_1=cast=(Matrix *)
-Gdip_Matrix_Multiply_2=cast=(MatrixOrder)
-
-Gdip_Matrix_Rotate=flags=cpp
-Gdip_Matrix_Rotate_0=cast=(Matrix *)
-Gdip_Matrix_Rotate_1=cast=(REAL)
-Gdip_Matrix_Rotate_2=cast=(MatrixOrder)
-
-Gdip_Matrix_Scale=flags=cpp
-Gdip_Matrix_Scale_0=cast=(Matrix *)
-Gdip_Matrix_Scale_1=cast=(REAL)
-Gdip_Matrix_Scale_2=cast=(REAL)
-Gdip_Matrix_Scale_3=cast=(MatrixOrder)
-
-Gdip_Matrix_SetElements=flags=cpp
-Gdip_Matrix_SetElements_0=cast=(Matrix *)
-Gdip_Matrix_SetElements_1=cast=(REAL)
-Gdip_Matrix_SetElements_2=cast=(REAL)
-Gdip_Matrix_SetElements_3=cast=(REAL)
-Gdip_Matrix_SetElements_4=cast=(REAL)
-Gdip_Matrix_SetElements_5=cast=(REAL)
-Gdip_Matrix_SetElements_6=cast=(REAL)
-
-Gdip_Matrix_Shear=flags=cpp
-Gdip_Matrix_Shear_0=cast=(Matrix *)
-Gdip_Matrix_Shear_1=cast=(REAL)
-Gdip_Matrix_Shear_2=cast=(REAL)
-Gdip_Matrix_Shear_3=cast=(MatrixOrder)
-
-Gdip_Matrix_1TransformPoints__ILorg_eclipse_swt_internal_gdip_PointF_2I=flags=cpp
-Gdip_Matrix_1TransformPoints__ILorg_eclipse_swt_internal_gdip_PointF_2I_0=cast=(Matrix *)
-Gdip_Matrix_1TransformPoints__ILorg_eclipse_swt_internal_gdip_PointF_2I_1=
-Gdip_Matrix_1TransformPoints__ILorg_eclipse_swt_internal_gdip_PointF_2I_2=
-
-Gdip_Matrix_1TransformPoints__I_3FI=flags=no_gen
-Gdip_Matrix_1TransformPoints__I_3FI_0=
-Gdip_Matrix_1TransformPoints__I_3FI_1=
-Gdip_Matrix_1TransformPoints__I_3FI_2=
-
-Gdip_Matrix_Translate=flags=cpp
-Gdip_Matrix_Translate_0=cast=(Matrix *)
-Gdip_Matrix_Translate_1=cast=(REAL)
-Gdip_Matrix_Translate_2=cast=(REAL)
-Gdip_Matrix_Translate_3=cast=(MatrixOrder)
-
-Gdip_Matrix_delete=flags=delete
-Gdip_Matrix_delete_0=
-
-Gdip_Matrix_new=flags=new
-Gdip_Matrix_new_0=cast=(REAL)
-Gdip_Matrix_new_1=cast=(REAL)
-Gdip_Matrix_new_2=cast=(REAL)
-Gdip_Matrix_new_3=cast=(REAL)
-Gdip_Matrix_new_4=cast=(REAL)
-Gdip_Matrix_new_5=cast=(REAL)
-
-Gdip_MoveMemory__Lorg_eclipse_swt_internal_gdip_BitmapData_2II=
-Gdip_MoveMemory__Lorg_eclipse_swt_internal_gdip_BitmapData_2II_0=cast=PVOID
-Gdip_MoveMemory__Lorg_eclipse_swt_internal_gdip_BitmapData_2II_1=cast=CONST VOID*
-Gdip_MoveMemory__Lorg_eclipse_swt_internal_gdip_BitmapData_2II_2=
-
-Gdip_MoveMemory__Lorg_eclipse_swt_internal_gdip_ColorPalette_2II=
-Gdip_MoveMemory__Lorg_eclipse_swt_internal_gdip_ColorPalette_2II_0=cast=PVOID
-Gdip_MoveMemory__Lorg_eclipse_swt_internal_gdip_ColorPalette_2II_1=cast=(CONST VOID*)
-Gdip_MoveMemory__Lorg_eclipse_swt_internal_gdip_ColorPalette_2II_2=
-
-Gdip_PathGradientBrush_SetCenterColor=flags=cpp
-Gdip_PathGradientBrush_SetCenterColor_0=cast=(PathGradientBrush *)
-Gdip_PathGradientBrush_SetCenterColor_1=cast=(Color *),flags=struct
-
-Gdip_PathGradientBrush_SetCenterPoint=flags=cpp
-Gdip_PathGradientBrush_SetCenterPoint_0=cast=(PathGradientBrush *)
-Gdip_PathGradientBrush_SetCenterPoint_1=flags=struct
-
-Gdip_PathGradientBrush_SetGraphicsPath=flags=cpp
-Gdip_PathGradientBrush_SetGraphicsPath_0=cast=(PathGradientBrush *)
-Gdip_PathGradientBrush_SetGraphicsPath_1=cast=(GraphicsPath *)
-
-Gdip_PathGradientBrush_SetSurroundColors=flags=no_gen
-Gdip_PathGradientBrush_SetSurroundColors_0=cast=(PathGradientBrush *)
-Gdip_PathGradientBrush_SetSurroundColors_1=cast=Color *
-Gdip_PathGradientBrush_SetSurroundColors_2=cast=INT *
-
-Gdip_PathGradientBrush_delete=flags=delete
-Gdip_PathGradientBrush_delete_0=
-
-Gdip_PathGradientBrush_new=flags=new
-Gdip_PathGradientBrush_new_0=cast=(GraphicsPath *)
-
-Gdip_Pen_GetBrush=flags=cpp
-Gdip_Pen_GetBrush_0=cast=(Pen *)
-
-Gdip_Pen_SetBrush=flags=cpp
-Gdip_Pen_SetBrush_0=cast=(Pen *)
-Gdip_Pen_SetBrush_1=cast=Brush *
-
-Gdip_Pen_SetDashPattern=flags=cpp
-Gdip_Pen_SetDashPattern_0=cast=(Pen *)
-Gdip_Pen_SetDashPattern_1=cast=(REAL *)
-Gdip_Pen_SetDashPattern_2=cast=int
-
-Gdip_Pen_SetDashStyle=flags=cpp
-Gdip_Pen_SetDashStyle_0=cast=Pen *
-Gdip_Pen_SetDashStyle_1=cast=DashStyle
-
-Gdip_Pen_SetLineCap=flags=cpp
-Gdip_Pen_SetLineCap_0=cast=(Pen *)
-Gdip_Pen_SetLineCap_1=cast=(LineCap)
-Gdip_Pen_SetLineCap_2=cast=(LineCap)
-Gdip_Pen_SetLineCap_3=cast=(DashCap)
-
-Gdip_Pen_SetLineJoin=flags=cpp
-Gdip_Pen_SetLineJoin_0=cast=(Pen *)
-Gdip_Pen_SetLineJoin_1=cast=(LineJoin)
-
-Gdip_Pen_delete=flags=delete
-Gdip_Pen_delete_0=
-
-Gdip_Pen_new=flags=new
-Gdip_Pen_new_0=cast=(Color *),flags=struct
-Gdip_Pen_new_1=cast=REAL
-
-Gdip_Point_delete=flags=delete
-Gdip_Point_delete_0=
-
-Gdip_Point_new=flags=new
-Gdip_Point_new_0=
-Gdip_Point_new_1=
-
-Gdip_Region_GetHRGN=flags=cpp
-Gdip_Region_GetHRGN_0=cast=(Region *)
-Gdip_Region_GetHRGN_1=cast=(Graphics *)
-
-Gdip_Region_IsInfinite=flags=cpp
-Gdip_Region_IsInfinite_0=cast=(Region *)
-Gdip_Region_IsInfinite_1=cast=(Graphics *)
-
-Gdip_Region_delete=flags=delete
-Gdip_Region_delete_0=
-
-Gdip_Region_1new__=flags=new
-
-Gdip_Region_1new__I=flags=new
-Gdip_Region_1new__I_0=cast=HRGN
-
-Gdip_SolidBrush_delete=flags=delete
-Gdip_SolidBrush_delete_0=
-
-Gdip_SolidBrush_new=flags=new
-Gdip_SolidBrush_new_0=cast=(Color *,flags=struct
-
-Gdip_StringFormat_Clone=flags=cpp
-Gdip_StringFormat_Clone_0=cast=(StringFormat *)
-
-Gdip_StringFormat_GenericDefault=accessor=StringFormat::GenericDefault
-
-Gdip_StringFormat_GenericTypographic=accessor=StringFormat::GenericTypographic
-
-Gdip_StringFormat_GetFormatFlags=flags=cpp
-Gdip_StringFormat_GetFormatFlags_0=cast=(StringFormat *)
-
-Gdip_StringFormat_SetFormatFlags=flags=cpp
-Gdip_StringFormat_SetFormatFlags_0=cast=(StringFormat *)
-Gdip_StringFormat_SetFormatFlags_1=cast=StringFormatFlags
-
-Gdip_StringFormat_SetHotkeyPrefix=flags=cpp
-Gdip_StringFormat_SetHotkeyPrefix_0=cast=(StringFormat *)
-Gdip_StringFormat_SetHotkeyPrefix_1=cast=HotkeyPrefix
-
-Gdip_StringFormat_SetTabStops=flags=cpp
-Gdip_StringFormat_SetTabStops_0=cast=(StringFormat *)
-Gdip_StringFormat_SetTabStops_1=
-Gdip_StringFormat_SetTabStops_2=
-Gdip_StringFormat_SetTabStops_3=
-
-Gdip_StringFormat_delete=flags=delete
-Gdip_StringFormat_delete_0=
-
-Gdip_TextureBrush_SetTransform=flags=cpp
-Gdip_TextureBrush_SetTransform_0=cast=(TextureBrush *)
-Gdip_TextureBrush_SetTransform_1=cast=Matrix *
-
-Gdip_TextureBrush_delete=flags=delete
-Gdip_TextureBrush_delete_0=
-
-Gdip_TextureBrush_new=flags=new
-Gdip_TextureBrush_new_0=cast=Image *
-Gdip_TextureBrush_new_1=cast=WrapMode
-Gdip_TextureBrush_new_2=
-Gdip_TextureBrush_new_3=
-Gdip_TextureBrush_new_4=
-Gdip_TextureBrush_new_5=
-
-
-org_eclipse_swt_internal_gdip_GdiplusStartupInput=flags=cpp
-GdiplusStartupInput_GdiplusVersion=
-GdiplusStartupInput_DebugEventCallback=cast=DebugEventProc
-GdiplusStartupInput_SuppressBackgroundThread=cast=BOOL
-GdiplusStartupInput_SuppressExternalCodecs=cast=BOOL
-
-org_eclipse_swt_internal_gdip_PointF=
-PointF_X=cast=REAL
-PointF_Y=cast=REAL
-
-org_eclipse_swt_internal_gdip_Rect=
-Rect_X=
-Rect_Y=
-Rect_Width=
-Rect_Height=
-
-org_eclipse_swt_internal_gdip_RectF=
-RectF_X=
-RectF_Y=
-RectF_Width=
-RectF_Height=
-
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gnome.GNOME.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gnome.GNOME.properties
deleted file mode 100644
index 6825d9d..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gnome.GNOME.properties
+++ /dev/null
@@ -1,99 +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
-###############################################################################
-org_eclipse_swt_internal_gnome_GNOME=
-GNOME_GnomeVFSMimeApplication_sizeof=
-
-GNOME__g_free=
-GNOME__g_free_0=cast=gpointer
-
-GNOME__g_list_append=
-GNOME__g_list_append_0=cast=(GList *)
-GNOME__g_list_append_1=cast=(gpointer)
-
-GNOME__g_list_free=
-GNOME__g_list_free_0=cast=(GList *)
-
-GNOME__g_list_next=
-GNOME__g_list_next_0=
-
-GNOME__g_object_unref=
-GNOME__g_object_unref_0=cast=gpointer
-
-GNOME__gnome_icon_lookup=
-GNOME__gnome_icon_lookup_0=cast=(GnomeIconTheme *)
-GNOME__gnome_icon_lookup_1=cast=GnomeThumbnailFactory *
-GNOME__gnome_icon_lookup_2=cast=const char *
-GNOME__gnome_icon_lookup_3=cast=const char *
-GNOME__gnome_icon_lookup_4=cast=GnomeVFSFileInfo *
-GNOME__gnome_icon_lookup_5=cast=const char *
-GNOME__gnome_icon_lookup_6=cast=GnomeIconLookupFlags
-GNOME__gnome_icon_lookup_7=cast=GnomeIconLookupResultFlags *
-
-GNOME__gnome_icon_theme_lookup_icon=
-GNOME__gnome_icon_theme_lookup_icon_0=cast=GnomeIconTheme *
-GNOME__gnome_icon_theme_lookup_icon_1=cast=const char *
-GNOME__gnome_icon_theme_lookup_icon_2=
-GNOME__gnome_icon_theme_lookup_icon_3=cast=(const GnomeIconData **)
-GNOME__gnome_icon_theme_lookup_icon_4=
-
-GNOME__gnome_icon_theme_new=
-
-GNOME__gnome_vfs_get_registered_mime_types=
-
-GNOME__gnome_vfs_init=
-
-GNOME__gnome_vfs_make_uri_from_input=
-GNOME__gnome_vfs_make_uri_from_input_0=cast=(const char *)
-
-GNOME__gnome_vfs_make_uri_from_input_with_dirs=flags=dynamic
-GNOME__gnome_vfs_make_uri_from_input_with_dirs_0=cast=(const char *)
-GNOME__gnome_vfs_make_uri_from_input_with_dirs_1=
-
-GNOME__gnome_vfs_mime_application_free=
-GNOME__gnome_vfs_mime_application_free_0=cast=GnomeVFSMimeApplication *
-
-GNOME__gnome_vfs_mime_application_launch=flags=dynamic
-GNOME__gnome_vfs_mime_application_launch_0=cast=(GnomeVFSMimeApplication *)
-GNOME__gnome_vfs_mime_application_launch_1=cast=(GList *)
-
-GNOME__gnome_vfs_mime_extensions_list_free=
-GNOME__gnome_vfs_mime_extensions_list_free_0=cast=GList *
-
-GNOME__gnome_vfs_mime_get_default_application=
-GNOME__gnome_vfs_mime_get_default_application_0=cast=(const char *)
-
-GNOME__gnome_vfs_mime_get_extensions_list=
-GNOME__gnome_vfs_mime_get_extensions_list_0=cast=const char *
-
-GNOME__gnome_vfs_mime_registered_mime_type_list_free=
-GNOME__gnome_vfs_mime_registered_mime_type_list_free_0=cast=GList *
-
-GNOME__gnome_vfs_mime_type_from_name=
-GNOME__gnome_vfs_mime_type_from_name_0=cast=(const char *)
-
-GNOME__gnome_vfs_url_show=flags=dynamic
-GNOME__gnome_vfs_url_show_0=cast=(const char *)
-
-GNOME_memmove=
-GNOME_memmove_0=cast=void *,flags=no_in
-GNOME_memmove_1=cast=const void *
-GNOME_memmove_2=cast=size_t
-
-
-org_eclipse_swt_internal_gnome_GnomeVFSMimeApplication=
-GnomeVFSMimeApplication_id=cast=char *
-GnomeVFSMimeApplication_name=cast=char *
-GnomeVFSMimeApplication_command=cast=char *
-GnomeVFSMimeApplication_can_open_multiple_files=cast=gboolean
-GnomeVFSMimeApplication_expects_uris=cast=GnomeVFSMimeApplicationArgumentType
-GnomeVFSMimeApplication_supported_uri_schemes=cast=(GList *)
-GnomeVFSMimeApplication_requires_terminal=cast=gboolean
-
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gnome.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gnome.properties
index 61cc5e8..afa0cf4 100644
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gnome.properties
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gnome.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2004 IBM Corporation and others.
+# Copyright (c) 2004, 2009 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
@@ -8,18 +8,18 @@
 # Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-swt_copyright=/*******************************************************************************\n\
- * Copyright (c) 2000, 2005 IBM Corporation and others. All rights reserved.\n\
- * The contents of this file are made available under the terms\n\
- * of the GNU Lesser General Public License (LGPL) Version 2.1 that\n\
- * accompanies this distribution (lgpl-v21.txt).  The LGPL is also\n\
- * available at http://www.gnu.org/licenses/lgpl.html.  If the version\n\
- * of the LGPL at http://www.gnu.org is different to the version of\n\
- * the LGPL accompanying this distribution and there is any conflict\n\
- * between the two license versions, the terms of the LGPL accompanying\n\
- * this distribution shall govern.\n\
- * \n\
- * Contributors:\n\
- *     IBM Corporation - initial API and implementation\n\
+swt_copyright=/*******************************************************************************\n \
+ * Copyright (c) 2000, %END_YEAR IBM Corporation and others. All rights reserved.\n \
+ * The contents of this file are made available under the terms\n \
+ * of the GNU Lesser General Public License (LGPL) Version 2.1 that\n \
+ * accompanies this distribution (lgpl-v21.txt).  The LGPL is also\n \
+ * available at http://www.gnu.org/licenses/lgpl.html.  If the version\n \
+ * of the LGPL at http://www.gnu.org is different to the version of\n \
+ * the LGPL accompanying this distribution and there is any conflict\n \
+ * between the two license versions, the terms of the LGPL accompanying\n \
+ * this distribution shall govern.\n \
+ * \n \
+ * Contributors:\n \
+ *     IBM Corporation - initial API and implementation\n \
  *******************************************************************************/\n
- 
\ No newline at end of file
+ 
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gtk.GTK.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gtk.GTK.properties
deleted file mode 100644
index 977560c..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gtk.GTK.properties
+++ /dev/null
@@ -1,49 +0,0 @@
-###############################################################################
-# Copyright (c) 2004 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
-###############################################################################
-org_eclipse_swt_internal_gtk_GTK=
-GTK__GTK_WIDGET_HEIGHT=
-GTK__GTK_WIDGET_HEIGHT_0=cast=GtkWidget *
-
-GTK__GTK_WIDGET_WIDTH=
-GTK__GTK_WIDGET_WIDTH_0=cast=GtkWidget *
-
-GTK__g_signal_connect=
-GTK__g_signal_connect_0=cast=(gpointer)
-GTK__g_signal_connect_1=cast=(const gchar *),flags=no_out
-GTK__g_signal_connect_2=cast=(GCallback)
-GTK__g_signal_connect_3=cast=gpointer
-
-GTK__gtk_events_pending=
-
-GTK__gtk_init_check=
-GTK__gtk_init_check_0=cast=int *
-GTK__gtk_init_check_1=cast=char ***
-
-GTK__gtk_main=
-
-GTK__gtk_main_iteration=
-
-GTK__gtk_plug_new=
-GTK__gtk_plug_new_0=
-
-GTK__gtk_widget_destroy=
-GTK__gtk_widget_destroy_0=cast=GtkWidget *
-
-GTK__gtk_widget_show=
-GTK__gtk_widget_show_0=cast=GtkWidget *
-
-GTK__gtk_widget_show_now=
-GTK__gtk_widget_show_now_0=cast=GtkWidget *
-
-GTK__gtk_window_new=
-GTK__gtk_window_new_0=cast=GtkWindowType
-
-
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gtk.OS.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gtk.OS.properties
deleted file mode 100644
index 020bbba..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gtk.OS.properties
+++ /dev/null
@@ -1,5130 +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
-###############################################################################
-org_eclipse_swt_internal_gtk_GInterfaceInfo=
-GInterfaceInfo_interface_init=cast=(GInterfaceInitFunc)
-GInterfaceInfo_interface_finalize=cast=(GInterfaceFinalizeFunc)
-GInterfaceInfo_interface_data=cast=(gpointer)
-
-org_eclipse_swt_internal_gtk_GObjectClass=
-GObjectClass_constructor=cast=(GObject *(*)())
-GObjectClass_set_property=cast=(void (*)())
-GObjectClass_get_property=cast=(void (*)())
-GObjectClass_dispose=cast=(void (*)())
-GObjectClass_finalize=cast=(void (*)())
-GObjectClass_dispatch_properties_changed=cast=(void (*)())
-GObjectClass_notify=cast=(void (*)())
-
-org_eclipse_swt_internal_gtk_GTypeInfo=
-GTypeInfo_class_size=cast=(guint16)
-GTypeInfo_base_init=cast=(GBaseInitFunc)
-GTypeInfo_base_finalize=cast=(GBaseFinalizeFunc)
-GTypeInfo_class_init=cast=(GClassInitFunc)
-GTypeInfo_class_finalize=cast=(GClassFinalizeFunc)
-GTypeInfo_class_data=cast=(gconstpointer)
-GTypeInfo_instance_size=cast=(guint16)
-GTypeInfo_n_preallocs=cast=(guint16)
-GTypeInfo_instance_init=cast=(GInstanceInitFunc)
-GTypeInfo_value_table=cast=(GTypeValueTable *)
-
-org_eclipse_swt_internal_gtk_GTypeQuery=
-GTypeQuery_type=cast=(GType)
-GTypeQuery_type_name=cast=(const gchar *)
-GTypeQuery_class_size=cast=(guint)
-GTypeQuery_instance_size=cast=(guint)
-
-org_eclipse_swt_internal_gtk_GdkColor=
-GdkColor_pixel=cast=(guint32)
-GdkColor_red=cast=(guint16)
-GdkColor_green=cast=(guint16)
-GdkColor_blue=cast=(guint16)
-
-org_eclipse_swt_internal_gtk_GdkDragContext=
-GdkDragContext_protocol=cast=(GdkDragProtocol)
-GdkDragContext_is_source=cast=(gboolean)
-GdkDragContext_source_window=cast=(GdkWindow *)
-GdkDragContext_dest_window=cast=(GdkWindow *)
-GdkDragContext_targets=cast=(GList *)
-GdkDragContext_actions=cast=(GdkDragAction)
-GdkDragContext_suggested_action=cast=(GdkDragAction)
-GdkDragContext_action=cast=(GdkDragAction)
-GdkDragContext_start_time=cast=(guint32)
-
-org_eclipse_swt_internal_gtk_GdkEvent=
-GdkEvent_type=cast=(GdkEventType)
-
-org_eclipse_swt_internal_gtk_GdkEventAny=
-GdkEventAny_window=cast=(GdkWindow *)
-GdkEventAny_send_event=cast=(gint8)
-
-org_eclipse_swt_internal_gtk_GdkEventButton=
-GdkEventButton_window=cast=(GdkWindow *)
-GdkEventButton_send_event=cast=(gint8)
-GdkEventButton_time=cast=(guint32)
-GdkEventButton_x=cast=(gdouble)
-GdkEventButton_y=cast=(gdouble)
-GdkEventButton_axes=cast=(gdouble *)
-GdkEventButton_state=cast=(guint)
-GdkEventButton_button=cast=(guint)
-GdkEventButton_device=cast=(GdkDevice *)
-GdkEventButton_x_root=cast=(gdouble)
-GdkEventButton_y_root=cast=(gdouble)
-
-org_eclipse_swt_internal_gtk_GdkEventCrossing=
-GdkEventCrossing_window=cast=(GdkWindow *)
-GdkEventCrossing_send_event=cast=(gint8)
-GdkEventCrossing_subwindow=cast=(GdkWindow *)
-GdkEventCrossing_time=
-GdkEventCrossing_x=
-GdkEventCrossing_y=
-GdkEventCrossing_x_root=
-GdkEventCrossing_y_root=
-GdkEventCrossing_mode=cast=(GdkCrossingMode)
-GdkEventCrossing_detail=cast=(GdkNotifyType)
-GdkEventCrossing_focus=cast=(gboolean)
-GdkEventCrossing_state=
-
-org_eclipse_swt_internal_gtk_GdkEventExpose=
-GdkEventExpose_window=cast=(GdkWindow *)
-GdkEventExpose_send_event=cast=(gint8)
-GdkEventExpose_area_x=accessor=area.x
-GdkEventExpose_area_y=accessor=area.y
-GdkEventExpose_area_width=accessor=area.width
-GdkEventExpose_area_height=accessor=area.height
-GdkEventExpose_region=cast=(GdkRegion *)
-GdkEventExpose_count=cast=(gint)
-
-org_eclipse_swt_internal_gtk_GdkEventFocus=
-GdkEventFocus_window=cast=(GdkWindow *)
-GdkEventFocus_send_event=cast=(gint8)
-GdkEventFocus_in=cast=(gint16)
-
-org_eclipse_swt_internal_gtk_GdkEventKey=
-GdkEventKey_window=cast=(GdkWindow *)
-GdkEventKey_send_event=cast=(gint8)
-GdkEventKey_time=cast=(guint32)
-GdkEventKey_state=cast=(guint)
-GdkEventKey_keyval=cast=(guint)
-GdkEventKey_length=cast=(gint)
-GdkEventKey_string=cast=(gchar *)
-GdkEventKey_hardware_keycode=cast=(guint16)
-GdkEventKey_group=cast=(guint8)
-
-org_eclipse_swt_internal_gtk_GdkEventMotion=
-GdkEventMotion_window=cast=(GdkWindow *)
-GdkEventMotion_send_event=cast=(gint8)
-GdkEventMotion_time=cast=(guint32)
-GdkEventMotion_x=cast=(gdouble)
-GdkEventMotion_y=cast=(gdouble)
-GdkEventMotion_axes=cast=(gdouble *)
-GdkEventMotion_state=cast=(guint)
-GdkEventMotion_is_hint=cast=(gint16)
-GdkEventMotion_device=cast=(GdkDevice *)
-GdkEventMotion_x_root=cast=(gdouble)
-GdkEventMotion_y_root=cast=(gdouble)
-
-org_eclipse_swt_internal_gtk_GdkEventScroll=
-GdkEventScroll_window=cast=(GdkWindow *)
-GdkEventScroll_send_event=cast=(gint8)
-GdkEventScroll_time=cast=(guint32)
-GdkEventScroll_x=cast=(gdouble)
-GdkEventScroll_y=cast=(gdouble)
-GdkEventScroll_state=cast=(guint)
-GdkEventScroll_direction=cast=(GdkScrollDirection)
-GdkEventScroll_device=cast=(GdkDevice *)
-GdkEventScroll_x_root=cast=(gdouble)
-GdkEventScroll_y_root=cast=(gdouble)
-
-org_eclipse_swt_internal_gtk_GdkEventVisibility=
-GdkEventVisibility_window=cast=(GdkWindow *)
-GdkEventVisibility_send_event=cast=(gint8)
-GdkEventVisibility_state=cast=GdkVisibilityState
-
-org_eclipse_swt_internal_gtk_GdkEventWindowState=
-GdkEventWindowState_window=cast=(GdkWindow *)
-GdkEventWindowState_send_event=
-GdkEventWindowState_changed_mask=
-GdkEventWindowState_new_window_state=
-
-org_eclipse_swt_internal_gtk_GdkGCValues=
-GdkGCValues_foreground_pixel=accessor=foreground.pixel,cast=(guint32)
-GdkGCValues_foreground_red=accessor=foreground.red,cast=(guint16)
-GdkGCValues_foreground_green=accessor=foreground.green,cast=(guint16)
-GdkGCValues_foreground_blue=accessor=foreground.blue,cast=(guint16)
-GdkGCValues_background_pixel=accessor=background.pixel,cast=(guint32)
-GdkGCValues_background_red=accessor=background.red,cast=(guint16)
-GdkGCValues_background_green=accessor=background.green,cast=(guint16)
-GdkGCValues_background_blue=accessor=background.blue,cast=(guint16)
-GdkGCValues_font=cast=(GdkFont *)
-GdkGCValues_function=cast=(GdkFunction)
-GdkGCValues_fill=cast=(GdkFill)
-GdkGCValues_tile=cast=(GdkPixmap *)
-GdkGCValues_stipple=cast=(GdkPixmap *)
-GdkGCValues_clip_mask=cast=(GdkPixmap *)
-GdkGCValues_subwindow_mode=cast=(GdkSubwindowMode)
-GdkGCValues_ts_x_origin=cast=(gint)
-GdkGCValues_ts_y_origin=cast=(gint)
-GdkGCValues_clip_x_origin=cast=(gint)
-GdkGCValues_clip_y_origin=cast=(gint)
-GdkGCValues_graphics_exposures=cast=(gint)
-GdkGCValues_line_width=cast=(gint)
-GdkGCValues_line_style=cast=(GdkLineStyle)
-GdkGCValues_cap_style=cast=(GdkCapStyle)
-GdkGCValues_join_style=cast=(GdkJoinStyle)
-
-org_eclipse_swt_internal_gtk_GdkGeometry=
-GdkGeometry_min_width=
-GdkGeometry_min_height=
-GdkGeometry_max_width=
-GdkGeometry_max_height=
-GdkGeometry_base_width=
-GdkGeometry_base_height=
-GdkGeometry_width_inc=
-GdkGeometry_height_inc=
-GdkGeometry_min_aspect=
-GdkGeometry_max_aspect=
-GdkGeometry_win_gravity=
-
-org_eclipse_swt_internal_gtk_GdkImage=
-GdkImage_type=cast=(GdkImageType)
-GdkImage_visual=cast=(GdkVisual *)
-GdkImage_byte_order=cast=(GdkByteOrder)
-GdkImage_width=cast=(gint)
-GdkImage_height=cast=(gint)
-GdkImage_depth=cast=(guint16)
-GdkImage_bpp=cast=(guint16)
-GdkImage_bpl=cast=(guint16)
-GdkImage_bits_per_pixel=cast=(guint16)
-GdkImage_mem=cast=(gpointer)
-GdkImage_colormap=cast=(GdkColormap *)
-GdkImage_windowing_data=cast=(gpointer)
-
-org_eclipse_swt_internal_gtk_GdkRectangle=
-GdkRectangle_x=cast=(gint)
-GdkRectangle_y=cast=(gint)
-GdkRectangle_width=cast=(gint)
-GdkRectangle_height=cast=(gint)
-
-org_eclipse_swt_internal_gtk_GdkVisual=
-GdkVisual_type=cast=(GdkVisualType)
-GdkVisual_depth=cast=(gint)
-GdkVisual_byte_order=cast=(GdkByteOrder)
-GdkVisual_colormap_size=cast=(gint)
-GdkVisual_bits_per_rgb=cast=(gint)
-GdkVisual_red_mask=cast=(guint32)
-GdkVisual_red_shift=cast=(gint)
-GdkVisual_red_prec=cast=(gint)
-GdkVisual_green_mask=cast=(guint32)
-GdkVisual_green_shift=cast=(gint)
-GdkVisual_green_prec=cast=(gint)
-GdkVisual_blue_mask=cast=(guint32)
-GdkVisual_blue_shift=cast=(gint)
-GdkVisual_blue_prec=cast=(gint)
-
-org_eclipse_swt_internal_gtk_GdkWindowAttr=
-GdkWindowAttr_title=cast=gchar *
-GdkWindowAttr_event_mask=
-GdkWindowAttr_x=
-GdkWindowAttr_y=
-GdkWindowAttr_width=
-GdkWindowAttr_height=
-GdkWindowAttr_wclass=
-GdkWindowAttr_visual=cast=GdkVisual *
-GdkWindowAttr_colormap=cast=GdkColormap *
-GdkWindowAttr_window_type=
-GdkWindowAttr_cursor=cast=GdkCursor *
-GdkWindowAttr_wmclass_name=cast=gchar *
-GdkWindowAttr_wmclass_class=cast=gchar *
-GdkWindowAttr_override_redirect=
-
-org_eclipse_swt_internal_gtk_GtkAdjustment=
-GtkAdjustment_lower=cast=(gdouble)
-GtkAdjustment_upper=cast=(gdouble)
-GtkAdjustment_value=cast=(gdouble)
-GtkAdjustment_step_increment=cast=(gdouble)
-GtkAdjustment_page_increment=cast=(gdouble)
-GtkAdjustment_page_size=cast=(gdouble)
-
-org_eclipse_swt_internal_gtk_GtkAllocation=
-GtkAllocation_x=
-GtkAllocation_y=
-GtkAllocation_width=
-GtkAllocation_height=
-
-org_eclipse_swt_internal_gtk_GtkBorder=
-GtkBorder_left=
-GtkBorder_right=
-GtkBorder_top=
-GtkBorder_bottom=
-
-org_eclipse_swt_internal_gtk_GtkCellRendererClass=
-GtkCellRendererClass_render=cast=(void(*)())
-GtkCellRendererClass_get_size=cast=(void(*)())
-
-org_eclipse_swt_internal_gtk_GtkColorSelectionDialog=
-GtkColorSelectionDialog_colorsel=cast=(GtkWidget *)
-GtkColorSelectionDialog_ok_button=cast=(GtkWidget *)
-GtkColorSelectionDialog_cancel_button=cast=(GtkWidget *)
-GtkColorSelectionDialog_help_button=cast=(GtkWidget *)
-
-org_eclipse_swt_internal_gtk_GtkCombo=
-GtkCombo_entry=cast=(GtkWidget *)
-GtkCombo_list=cast=(GtkWidget *)
-
-org_eclipse_swt_internal_gtk_GtkFileSelection=
-GtkFileSelection_dir_list=cast=(GtkWidget *)
-GtkFileSelection_file_list=cast=(GtkWidget *)
-GtkFileSelection_selection_entry=cast=(GtkWidget *)
-GtkFileSelection_selection_text=cast=(GtkWidget *)
-GtkFileSelection_main_vbox=cast=(GtkWidget *)
-GtkFileSelection_ok_button=cast=(GtkWidget *)
-GtkFileSelection_cancel_button=cast=(GtkWidget *)
-GtkFileSelection_help_button=cast=(GtkWidget *)
-GtkFileSelection_history_pulldown=cast=(GtkWidget *)
-GtkFileSelection_history_menu=cast=(GtkWidget *)
-GtkFileSelection_history_list=cast=(GList *)
-GtkFileSelection_fileop_dialog=cast=(GtkWidget *)
-GtkFileSelection_fileop_entry=cast=(GtkWidget *)
-GtkFileSelection_fileop_file=cast=(gchar *)
-GtkFileSelection_cmpl_state=cast=(gpointer)
-GtkFileSelection_fileop_c_dir=cast=(GtkWidget *)
-GtkFileSelection_fileop_del_file=cast=(GtkWidget *)
-GtkFileSelection_fileop_ren_file=cast=(GtkWidget *)
-GtkFileSelection_button_area=cast=(GtkWidget *)
-GtkFileSelection_action_area=cast=(GtkWidget *)
-
-org_eclipse_swt_internal_gtk_GtkFixed=
-GtkFixed_children=cast=(GList *)
-
-org_eclipse_swt_internal_gtk_GtkRequisition=
-GtkRequisition_width=
-GtkRequisition_height=
-
-org_eclipse_swt_internal_gtk_GtkSelectionData=
-GtkSelectionData_selection=cast=(GdkAtom)
-GtkSelectionData_target=cast=(GdkAtom)
-GtkSelectionData_type=cast=(GdkAtom)
-GtkSelectionData_format=cast=(gint)
-GtkSelectionData_data=cast=(guchar *)
-GtkSelectionData_length=cast=(gint)
-
-org_eclipse_swt_internal_gtk_GtkTargetEntry=
-GtkTargetEntry_target=cast=(gchar *)
-GtkTargetEntry_flags=cast=(guint)
-GtkTargetEntry_info=cast=(guint)
-
-org_eclipse_swt_internal_gtk_GtkTargetPair=
-GtkTargetPair_target=cast=(GdkAtom)
-GtkTargetPair_flags=cast=(guint)
-GtkTargetPair_info=cast=(guint)
-
-org_eclipse_swt_internal_gtk_GtkWidgetClass=
-GtkWidgetClass_activate_signal=
-GtkWidgetClass_set_scroll_adjustments_signal=
-GtkWidgetClass_dispatch_child_properties_changed=cast=(void(*)())
-GtkWidgetClass_show=cast=(void(*)())
-GtkWidgetClass_show_all=cast=(void(*)())
-GtkWidgetClass_hide=cast=(void(*)())
-GtkWidgetClass_hide_all=cast=(void(*)())
-GtkWidgetClass_map=cast=(void(*)())
-GtkWidgetClass_unmap=cast=(void(*)())
-GtkWidgetClass_realize=cast=(void(*)())
-GtkWidgetClass_unrealize=cast=(void(*)())
-GtkWidgetClass_size_request=cast=(void(*)())
-GtkWidgetClass_size_allocate=cast=(void(*)())
-GtkWidgetClass_state_changed=cast=(void(*)())
-GtkWidgetClass_parent_set=cast=(void(*)())
-GtkWidgetClass_hierarchy_changed=cast=(void(*)())
-GtkWidgetClass_style_set=cast=(void(*)())
-GtkWidgetClass_direction_changed=cast=(void(*)())
-GtkWidgetClass_grab_notify=cast=(void(*)())
-GtkWidgetClass_child_notify=cast=(void(*)())
-GtkWidgetClass_mnemonic_activate=cast=(gboolean(*)())
-GtkWidgetClass_grab_focus=cast=(void(*)())
-GtkWidgetClass_focus=cast=(gboolean(*)())
-GtkWidgetClass_event=cast=(gboolean(*)())
-GtkWidgetClass_button_press_event=cast=(gboolean(*)())
-GtkWidgetClass_button_release_event=cast=(gboolean(*)())
-GtkWidgetClass_scroll_event=cast=(gboolean(*)())
-GtkWidgetClass_motion_notify_event=cast=(gboolean(*)())
-GtkWidgetClass_delete_event=cast=(gboolean(*)())
-GtkWidgetClass_destroy_event=cast=(gboolean(*)())
-GtkWidgetClass_expose_event=cast=(gboolean(*)())
-GtkWidgetClass_key_press_event=cast=(gboolean(*)())
-GtkWidgetClass_key_release_event=cast=(gboolean(*)())
-GtkWidgetClass_enter_notify_event=cast=(gboolean(*)())
-GtkWidgetClass_leave_notify_event=cast=(gboolean(*)())
-GtkWidgetClass_configure_event=cast=(gboolean(*)())
-GtkWidgetClass_focus_in_event=cast=(gboolean(*)())
-GtkWidgetClass_focus_out_event=cast=(gboolean(*)())
-GtkWidgetClass_map_event=cast=(gboolean(*)())
-GtkWidgetClass_unmap_event=cast=(gboolean(*)())
-GtkWidgetClass_property_notify_event=cast=(gboolean(*)())
-GtkWidgetClass_selection_clear_event=cast=(gboolean(*)())
-GtkWidgetClass_selection_request_event=cast=(gboolean(*)())
-GtkWidgetClass_selection_notify_event=cast=(gboolean(*)())
-GtkWidgetClass_proximity_in_event=cast=(gboolean(*)())
-GtkWidgetClass_proximity_out_event=cast=(gboolean(*)())
-GtkWidgetClass_visibility_notify_event=cast=(gboolean(*)())
-GtkWidgetClass_client_event=cast=(gboolean(*)())
-GtkWidgetClass_no_expose_event=cast=(gboolean(*)())
-GtkWidgetClass_window_state_event=cast=(gboolean(*)())
-GtkWidgetClass_selection_get=cast=(void(*)())
-GtkWidgetClass_selection_received=cast=(void(*)())
-GtkWidgetClass_drag_begin=cast=(void(*)())
-GtkWidgetClass_drag_end=cast=(void(*)())
-GtkWidgetClass_drag_data_get=cast=(void(*)())
-GtkWidgetClass_drag_data_delete=cast=(void(*)())
-GtkWidgetClass_drag_leave=cast=(void(*)())
-GtkWidgetClass_drag_motion=cast=(gboolean(*)())
-GtkWidgetClass_drag_drop=cast=(gboolean(*)())
-GtkWidgetClass_drag_data_received=cast=(void(*)())
-GtkWidgetClass_popup_menu=cast=(gboolean(*)())
-GtkWidgetClass_show_help=cast=(gboolean(*)())
-GtkWidgetClass_get_accessible=cast=(AtkObject*(*)())
-GtkWidgetClass_screen_changed=cast=(void(*)())
-
-org_eclipse_swt_internal_gtk_LONG=flags=no_gen
-LONG_value=
-
-org_eclipse_swt_internal_gtk_OS=
-OS_Call=
-OS_Call_0=
-OS_Call_1=
-OS_Call_2=
-OS_Call_3=
-
-OS_GDK_EVENT_TYPE=
-OS_GDK_EVENT_TYPE_0=cast=(GdkEvent *)
-
-OS_GDK_EVENT_WINDOW=
-OS_GDK_EVENT_WINDOW_0=cast=(GdkEventAny *)
-
-OS_GDK_WINDOWING_X11=flags=no_gen
-
-OS_GInterfaceInfo_sizeof=
-
-OS_GPollFD_sizeof=
-
-OS_GTK_ACCEL_LABEL_GET_ACCEL_STRING=
-OS_GTK_ACCEL_LABEL_GET_ACCEL_STRING_0=cast=(GtkAccelLabel *)
-
-OS_GTK_ACCEL_LABEL_SET_ACCEL_STRING=
-OS_GTK_ACCEL_LABEL_SET_ACCEL_STRING_0=cast=(GtkAccelLabel *)
-OS_GTK_ACCEL_LABEL_SET_ACCEL_STRING_1=cast=(gchar *)
-
-OS_GTK_ENTRY_IM_CONTEXT=
-OS_GTK_ENTRY_IM_CONTEXT_0=cast=(GtkEntry *)
-
-OS_GTK_SCROLLED_WINDOW_HSCROLLBAR=
-OS_GTK_SCROLLED_WINDOW_HSCROLLBAR_0=cast=(GtkScrolledWindow *)
-
-OS_GTK_SCROLLED_WINDOW_SCROLLBAR_SPACING=
-OS_GTK_SCROLLED_WINDOW_SCROLLBAR_SPACING_0=cast=(GtkScrolledWindow *)
-
-OS_GTK_SCROLLED_WINDOW_VSCROLLBAR=
-OS_GTK_SCROLLED_WINDOW_VSCROLLBAR_0=cast=(GtkScrolledWindow *)
-
-OS_GTK_TEXTVIEW_IM_CONTEXT=
-OS_GTK_TEXTVIEW_IM_CONTEXT_0=cast=(GtkTextView *)
-
-OS_GTK_TOOLTIPS_SET_ACTIVE=
-OS_GTK_TOOLTIPS_SET_ACTIVE_0=cast=(GtkTooltips *)
-OS_GTK_TOOLTIPS_SET_ACTIVE_1=cast=GtkTooltipsData *
-
-OS_GTK_TOOLTIPS_TIP_WINDOW=
-OS_GTK_TOOLTIPS_TIP_WINDOW_0=cast=(GtkTooltips *)
-
-OS_GTK_WIDGET_HEIGHT=
-OS_GTK_WIDGET_HEIGHT_0=cast=(GtkWidget *)
-
-OS_GTK_WIDGET_REQUISITION_HEIGHT=
-OS_GTK_WIDGET_REQUISITION_HEIGHT_0=cast=(GtkWidget *)
-
-OS_GTK_WIDGET_REQUISITION_WIDTH=
-OS_GTK_WIDGET_REQUISITION_WIDTH_0=cast=(GtkWidget *)
-
-OS_GTK_WIDGET_SET_HEIGHT=
-OS_GTK_WIDGET_SET_HEIGHT_0=cast=(GtkWidget *)
-OS_GTK_WIDGET_SET_HEIGHT_1=
-
-OS_GTK_WIDGET_SET_WIDTH=
-OS_GTK_WIDGET_SET_WIDTH_0=cast=(GtkWidget *)
-OS_GTK_WIDGET_SET_WIDTH_1=
-
-OS_GTK_WIDGET_SET_X=
-OS_GTK_WIDGET_SET_X_0=cast=(GtkWidget *)
-OS_GTK_WIDGET_SET_X_1=
-
-OS_GTK_WIDGET_SET_Y=
-OS_GTK_WIDGET_SET_Y_0=cast=(GtkWidget *)
-OS_GTK_WIDGET_SET_Y_1=
-
-OS_GTK_WIDGET_WIDTH=
-OS_GTK_WIDGET_WIDTH_0=cast=(GtkWidget *)
-
-OS_GTK_WIDGET_WINDOW=
-OS_GTK_WIDGET_WINDOW_0=cast=(GtkWidget *)
-
-OS_GTK_WIDGET_X=
-OS_GTK_WIDGET_X_0=cast=(GtkWidget *)
-
-OS_GTK_WIDGET_Y=
-OS_GTK_WIDGET_Y_0=cast=(GtkWidget *)
-
-OS_GTypeInfo_sizeof=
-
-OS_GTypeQuery_sizeof=
-
-OS_GdkColor_sizeof=
-
-OS_GdkDragContext_sizeof=
-
-OS_GdkEventAny_sizeof=
-
-OS_GdkEventButton_sizeof=
-
-OS_GdkEventCrossing_sizeof=
-
-OS_GdkEventExpose_sizeof=
-
-OS_GdkEventFocus_sizeof=
-
-OS_GdkEventKey_sizeof=
-
-OS_GdkEventMotion_sizeof=
-
-OS_GdkEventScroll_sizeof=
-
-OS_GdkEventVisibility_sizeof=
-
-OS_GdkEventWindowState_sizeof=
-
-OS_GdkEvent_sizeof=
-
-OS_GdkGCValues_sizeof=
-
-OS_GdkGeometry_sizeof=
-
-OS_GdkImage_sizeof=
-
-OS_GdkRectangle_sizeof=
-
-OS_GdkVisual_sizeof=
-
-OS_GdkWindowAttr_sizeof=
-
-OS_GtkAdjustment_sizeof=
-
-OS_GtkAllocation_sizeof=
-
-OS_GtkBorder_sizeof=
-
-OS_GtkCellRendererPixbufClass_sizeof=
-
-OS_GtkCellRendererPixbuf_sizeof=
-
-OS_GtkCellRendererTextClass_sizeof=
-
-OS_GtkCellRendererText_sizeof=
-
-OS_GtkCellRendererToggleClass_sizeof=
-
-OS_GtkCellRendererToggle_sizeof=
-
-OS_GtkColorSelectionDialog_sizeof=
-
-OS_GtkCombo_sizeof=
-
-OS_GtkFileSelection_sizeof=
-
-OS_GtkFixedClass_sizeof=
-
-OS_GtkFixed_sizeof=
-
-OS_GtkRequisition_sizeof=
-
-OS_GtkSelectionData_sizeof=
-
-OS_GtkTargetEntry_sizeof=
-
-OS_GtkTargetPair_sizeof=
-
-OS_GtkTextIter_sizeof=
-
-OS_GtkTreeIter_sizeof=
-
-OS_PTR_sizeof=
-
-OS_PangoAttribute_sizeof=
-
-OS_PangoItem_sizeof=
-
-OS_PangoLayoutLine_sizeof=
-
-OS_PangoLayoutRun_sizeof=
-
-OS_PangoLogAttr_sizeof=
-
-OS_PangoRectangle_sizeof=
-
-OS_XAnyEvent_sizeof=
-
-OS_XButtonEvent_sizeof=
-
-OS_XClientMessageEvent_sizeof=
-
-OS_XCrossingEvent_sizeof=
-
-OS_XEvent_sizeof=
-
-OS_XExposeEvent_sizeof=
-
-OS_XFocusChangeEvent_sizeof=
-
-OS_XRenderPictureAttributes_sizeof=
-
-OS_XVisibilityEvent_sizeof=
-
-OS_XWindowChanges_sizeof=
-
-OS_X_EVENT_TYPE=
-OS_X_EVENT_TYPE_0=cast=(XEvent *)
-
-OS_X_EVENT_WINDOW=
-OS_X_EVENT_WINDOW_0=cast=(XAnyEvent *)
-
-OS__Call=
-OS__Call_0=
-OS__Call_1=
-OS__Call_2=
-
-OS__GDK_DISPLAY=
-
-OS__GDK_PIXMAP_XID=
-OS__GDK_PIXMAP_XID_0=cast=GdkPixmap *
-
-OS__GDK_ROOT_PARENT=
-
-OS__GDK_TYPE_COLOR=flags=const
-
-OS__GDK_TYPE_PIXBUF=flags=const
-
-OS__GTK_IS_BUTTON=
-OS__GTK_IS_BUTTON_0=
-
-OS__GTK_IS_CELL_RENDERER_PIXBUF=
-OS__GTK_IS_CELL_RENDERER_PIXBUF_0=
-
-OS__GTK_IS_CELL_RENDERER_TEXT=
-OS__GTK_IS_CELL_RENDERER_TEXT_0=
-
-OS__GTK_IS_CELL_RENDERER_TOGGLE=
-OS__GTK_IS_CELL_RENDERER_TOGGLE_0=
-
-OS__GTK_IS_CONTAINER=
-OS__GTK_IS_CONTAINER_0=
-
-OS__GTK_IS_IMAGE_MENU_ITEM=
-OS__GTK_IS_IMAGE_MENU_ITEM_0=
-
-OS__GTK_IS_PLUG=
-OS__GTK_IS_PLUG_0=
-
-OS__GTK_STOCK_CANCEL=flags=const
-
-OS__GTK_STOCK_OK=flags=const
-
-OS__GTK_TYPE_CELL_RENDERER_PIXBUF=flags=const
-
-OS__GTK_TYPE_CELL_RENDERER_TEXT=flags=const
-
-OS__GTK_TYPE_CELL_RENDERER_TOGGLE=flags=const
-
-OS__GTK_TYPE_FIXED=flags=const
-
-OS__GTK_TYPE_WIDGET=flags=const
-
-OS__GTK_WIDGET_FLAGS=
-OS__GTK_WIDGET_FLAGS_0=
-
-OS__GTK_WIDGET_HAS_DEFAULT=
-OS__GTK_WIDGET_HAS_DEFAULT_0=
-
-OS__GTK_WIDGET_HAS_FOCUS=
-OS__GTK_WIDGET_HAS_FOCUS_0=
-
-OS__GTK_WIDGET_IS_SENSITIVE=
-OS__GTK_WIDGET_IS_SENSITIVE_0=
-
-OS__GTK_WIDGET_MAPPED=
-OS__GTK_WIDGET_MAPPED_0=
-
-OS__GTK_WIDGET_SENSITIVE=
-OS__GTK_WIDGET_SENSITIVE_0=
-
-OS__GTK_WIDGET_SET_FLAGS=
-OS__GTK_WIDGET_SET_FLAGS_0=
-OS__GTK_WIDGET_SET_FLAGS_1=
-
-OS__GTK_WIDGET_STATE=
-OS__GTK_WIDGET_STATE_0=
-
-OS__GTK_WIDGET_UNSET_FLAGS=
-OS__GTK_WIDGET_UNSET_FLAGS_0=
-OS__GTK_WIDGET_UNSET_FLAGS_1=
-
-OS__GTK_WIDGET_VISIBLE=
-OS__GTK_WIDGET_VISIBLE_0=
-
-OS__G_OBJECT_CLASS=
-OS__G_OBJECT_CLASS_0=
-
-OS__G_OBJECT_GET_CLASS=
-OS__G_OBJECT_GET_CLASS_0=
-
-OS__G_OBJECT_TYPE=
-OS__G_OBJECT_TYPE_0=
-
-OS__G_TYPE_BOOLEAN=flags=const
-
-OS__G_TYPE_INT=flags=const
-
-OS__G_TYPE_STRING=flags=const
-
-OS__PANGO_PIXELS=
-OS__PANGO_PIXELS_0=
-
-OS__PANGO_TYPE_FONT_DESCRIPTION=flags=const
-
-OS__XCheckIfEvent=
-OS__XCheckIfEvent_0=cast=(Display *)
-OS__XCheckIfEvent_1=cast=XEvent *
-OS__XCheckIfEvent_2=cast=(Bool (*)())
-OS__XCheckIfEvent_3=cast=(XPointer)
-
-OS__XCheckMaskEvent=
-OS__XCheckMaskEvent_0=cast=(Display *)
-OS__XCheckMaskEvent_1=cast=(long)
-OS__XCheckMaskEvent_2=cast=(XEvent *)
-
-OS__XCheckWindowEvent=
-OS__XCheckWindowEvent_0=cast=(Display *)
-OS__XCheckWindowEvent_1=cast=Window
-OS__XCheckWindowEvent_2=cast=(long)
-OS__XCheckWindowEvent_3=cast=(XEvent *)
-
-OS__XDefaultRootWindow=
-OS__XDefaultRootWindow_0=cast=Display *
-
-OS__XDefaultScreen=
-OS__XDefaultScreen_0=cast=Display *
-
-OS__XFlush=
-OS__XFlush_0=cast=(Display *)
-
-OS__XFree=
-OS__XFree_0=cast=void *
-
-OS__XGetSelectionOwner=
-OS__XGetSelectionOwner_0=cast=(Display *)
-OS__XGetSelectionOwner_1=cast=(Atom)
-
-OS__XInternAtom=
-OS__XInternAtom_0=cast=Display *
-OS__XInternAtom_1=cast=char *
-OS__XInternAtom_2=cast=Bool
-
-OS__XKeysymToKeycode=
-OS__XKeysymToKeycode_0=cast=Display *
-OS__XKeysymToKeycode_1=cast=KeySym
-
-OS__XListProperties=
-OS__XListProperties_0=cast=Display *
-OS__XListProperties_1=cast=Window
-OS__XListProperties_2=cast=int *
-
-OS__XQueryTree=
-OS__XQueryTree_0=cast=Display *
-OS__XQueryTree_1=cast=Window
-OS__XQueryTree_2=cast=Window *
-OS__XQueryTree_3=cast=Window *
-OS__XQueryTree_4=cast=Window **
-OS__XQueryTree_5=cast=unsigned int *
-
-OS__XReconfigureWMWindow=
-OS__XReconfigureWMWindow_0=cast=Display *
-OS__XReconfigureWMWindow_1=cast=(Window)
-OS__XReconfigureWMWindow_2=
-OS__XReconfigureWMWindow_3=
-OS__XReconfigureWMWindow_4=flags=no_out
-
-OS__XRenderComposite=flags=dynamic
-OS__XRenderComposite_0=
-OS__XRenderComposite_1=
-OS__XRenderComposite_2=
-OS__XRenderComposite_3=
-OS__XRenderComposite_4=
-OS__XRenderComposite_5=
-OS__XRenderComposite_6=
-OS__XRenderComposite_7=
-OS__XRenderComposite_8=
-OS__XRenderComposite_9=
-OS__XRenderComposite_10=
-OS__XRenderComposite_11=
-OS__XRenderComposite_12=
-
-OS__XRenderCreatePicture=flags=dynamic
-OS__XRenderCreatePicture_0=
-OS__XRenderCreatePicture_1=
-OS__XRenderCreatePicture_2=
-OS__XRenderCreatePicture_3=
-OS__XRenderCreatePicture_4=flags=no_out
-
-OS__XRenderFindStandardFormat=flags=dynamic
-OS__XRenderFindStandardFormat_0=
-OS__XRenderFindStandardFormat_1=
-
-OS__XRenderFindVisualFormat=flags=dynamic
-OS__XRenderFindVisualFormat_0=
-OS__XRenderFindVisualFormat_1=
-
-OS__XRenderFreePicture=flags=dynamic
-OS__XRenderFreePicture_0=
-OS__XRenderFreePicture_1=
-
-OS__XRenderQueryExtension=flags=dynamic
-OS__XRenderQueryExtension_0=
-OS__XRenderQueryExtension_1=
-OS__XRenderQueryExtension_2=
-
-OS__XRenderSetPictureClipRectangles=flags=dynamic
-OS__XRenderSetPictureClipRectangles_0=
-OS__XRenderSetPictureClipRectangles_1=
-OS__XRenderSetPictureClipRectangles_2=
-OS__XRenderSetPictureClipRectangles_3=
-OS__XRenderSetPictureClipRectangles_4=
-OS__XRenderSetPictureClipRectangles_5=
-
-OS__XRenderSetPictureTransform=flags=dynamic
-OS__XRenderSetPictureTransform_0=
-OS__XRenderSetPictureTransform_1=
-OS__XRenderSetPictureTransform_2=
-
-OS__XSendEvent=
-OS__XSendEvent_0=cast=(Display *)
-OS__XSendEvent_1=cast=(Window)
-OS__XSendEvent_2=
-OS__XSendEvent_3=
-OS__XSendEvent_4=cast=(XEvent *)
-
-OS__XSetErrorHandler=
-OS__XSetErrorHandler_0=cast=(XErrorHandler)
-
-OS__XSetIOErrorHandler=
-OS__XSetIOErrorHandler_0=cast=(XIOErrorHandler)
-
-OS__XSetInputFocus=
-OS__XSetInputFocus_0=cast=Display *
-OS__XSetInputFocus_1=cast=Window
-OS__XSetInputFocus_2=
-OS__XSetInputFocus_3=
-
-OS__XSynchronize=
-OS__XSynchronize_0=cast=(Display *)
-OS__XSynchronize_1=
-
-OS__XTestFakeButtonEvent=
-OS__XTestFakeButtonEvent_0=cast=Display *
-OS__XTestFakeButtonEvent_1=
-OS__XTestFakeButtonEvent_2=cast=Bool
-OS__XTestFakeButtonEvent_3=cast=(unsigned long)
-
-OS__XTestFakeKeyEvent=
-OS__XTestFakeKeyEvent_0=cast=Display *
-OS__XTestFakeKeyEvent_1=
-OS__XTestFakeKeyEvent_2=cast=Bool
-OS__XTestFakeKeyEvent_3=cast=unsigned long
-
-OS__XTestFakeMotionEvent=
-OS__XTestFakeMotionEvent_0=cast=Display *
-OS__XTestFakeMotionEvent_1=
-OS__XTestFakeMotionEvent_2=
-OS__XTestFakeMotionEvent_3=
-OS__XTestFakeMotionEvent_4=cast=unsigned long
-
-OS__XWarpPointer=
-OS__XWarpPointer_0=cast=Display *
-OS__XWarpPointer_1=cast=Window
-OS__XWarpPointer_2=cast=Window
-OS__XWarpPointer_3=
-OS__XWarpPointer_4=
-OS__XWarpPointer_5=
-OS__XWarpPointer_6=
-OS__XWarpPointer_7=
-OS__XWarpPointer_8=
-
-OS__atk_object_add_relationship=flags=dynamic
-OS__atk_object_add_relationship_0=cast=(AtkObject *)
-OS__atk_object_add_relationship_1=cast=(AtkRelationType)
-OS__atk_object_add_relationship_2=cast=(AtkObject *)
-
-OS__call=
-OS__call_0=
-OS__call_1=
-OS__call_2=
-OS__call_3=
-OS__call_4=
-OS__call_5=
-OS__call_6=
-OS__call_7=
-
-OS__dlclose=
-OS__dlclose_0=cast=(void *)
-
-OS__dlopen=
-OS__dlopen_0=cast=(const char *)
-OS__dlopen_1=
-
-OS__dlsym=
-OS__dlsym_0=cast=(void *)
-OS__dlsym_1=cast=(const char *)
-
-OS__g_cclosure_new=
-OS__g_cclosure_new_0=cast=(GCallback)
-OS__g_cclosure_new_1=cast=(gpointer)
-OS__g_cclosure_new_2=cast=(GClosureNotify)
-
-OS__g_closure_ref=
-OS__g_closure_ref_0=cast=(GClosure *)
-
-OS__g_closure_unref=
-OS__g_closure_unref_0=cast=(GClosure *)
-
-OS__g_filename_from_uri=
-OS__g_filename_from_uri_0=cast=(const char *)
-OS__g_filename_from_uri_1=cast=(char **)
-OS__g_filename_from_uri_2=cast=(GError **)
-
-OS__g_filename_from_utf8=
-OS__g_filename_from_utf8_0=cast=(const gchar *)
-OS__g_filename_from_utf8_1=cast=(gssize)
-OS__g_filename_from_utf8_2=cast=(gsize *)
-OS__g_filename_from_utf8_3=cast=(gsize *)
-OS__g_filename_from_utf8_4=cast=(GError **)
-
-OS__g_filename_to_uri=
-OS__g_filename_to_uri_0=cast=(const char *)
-OS__g_filename_to_uri_1=cast=(const char *)
-OS__g_filename_to_uri_2=cast=(GError **)
-
-OS__g_filename_to_utf8=
-OS__g_filename_to_utf8_0=cast=(const gchar *)
-OS__g_filename_to_utf8_1=cast=(gssize)
-OS__g_filename_to_utf8_2=cast=(gsize *)
-OS__g_filename_to_utf8_3=cast=(gsize *)
-OS__g_filename_to_utf8_4=cast=(GError **)
-
-OS__g_free=
-OS__g_free_0=cast=(gpointer)
-
-OS__g_list_append=
-OS__g_list_append_0=cast=(GList *)
-OS__g_list_append_1=cast=(gpointer)
-
-OS__g_list_data=
-OS__g_list_data_0=cast=(GList *)
-
-OS__g_list_free=
-OS__g_list_free_0=cast=(GList *)
-
-OS__g_list_free_1=
-OS__g_list_free_1_0=cast=(GList *)
-
-OS__g_list_length=
-OS__g_list_length_0=cast=(GList *)
-
-OS__g_list_next=
-OS__g_list_next_0=
-
-OS__g_list_nth=
-OS__g_list_nth_0=cast=(GList *)
-OS__g_list_nth_1=cast=(guint)
-
-OS__g_list_nth_data=
-OS__g_list_nth_data_0=cast=(GList *)
-OS__g_list_nth_data_1=cast=(guint)
-
-OS__g_list_prepend=
-OS__g_list_prepend_0=cast=(GList *)
-OS__g_list_prepend_1=cast=(gpointer)
-
-OS__g_list_previous=
-OS__g_list_previous_0=
-
-OS__g_list_remove_link=
-OS__g_list_remove_link_0=cast=(GList *)
-OS__g_list_remove_link_1=cast=(GList *)
-
-OS__g_list_reverse=
-OS__g_list_reverse_0=cast=(GList *)
-
-OS__g_list_set_next=
-OS__g_list_set_next_0=cast=(GList *)
-OS__g_list_set_next_1=cast=(GList *)
-
-OS__g_list_set_previous=
-OS__g_list_set_previous_0=cast=(GList *)
-OS__g_list_set_previous_1=cast=(GList *)
-
-OS__g_locale_from_utf8=
-OS__g_locale_from_utf8_0=cast=(const gchar *)
-OS__g_locale_from_utf8_1=cast=(gssize)
-OS__g_locale_from_utf8_2=cast=(gsize *)
-OS__g_locale_from_utf8_3=cast=(gsize *)
-OS__g_locale_from_utf8_4=cast=(GError **)
-
-OS__g_locale_to_utf8=
-OS__g_locale_to_utf8_0=cast=(const gchar *)
-OS__g_locale_to_utf8_1=cast=(gssize)
-OS__g_locale_to_utf8_2=cast=(gsize *)
-OS__g_locale_to_utf8_3=cast=(gsize *)
-OS__g_locale_to_utf8_4=cast=(GError **)
-
-OS__g_log_default_handler=
-OS__g_log_default_handler_0=cast=(gchar *)
-OS__g_log_default_handler_1=cast=(GLogLevelFlags)
-OS__g_log_default_handler_2=cast=(gchar *)
-OS__g_log_default_handler_3=cast=(gpointer)
-
-OS__g_log_remove_handler=
-OS__g_log_remove_handler_0=cast=(gchar *),flags=no_out
-OS__g_log_remove_handler_1=cast=(gint)
-
-OS__g_log_set_handler=
-OS__g_log_set_handler_0=cast=(gchar *),flags=no_out
-OS__g_log_set_handler_1=cast=(GLogLevelFlags)
-OS__g_log_set_handler_2=cast=(GLogFunc)
-OS__g_log_set_handler_3=cast=(gpointer)
-
-OS__g_main_context_acquire=
-OS__g_main_context_acquire_0=cast=GMainContext *
-
-OS__g_main_context_check=
-OS__g_main_context_check_0=cast=GMainContext *
-OS__g_main_context_check_1=
-OS__g_main_context_check_2=cast=GPollFD *
-OS__g_main_context_check_3=
-
-OS__g_main_context_default=
-
-OS__g_main_context_get_poll_func=
-OS__g_main_context_get_poll_func_0=cast=GMainContext *
-
-OS__g_main_context_iteration=
-OS__g_main_context_iteration_0=cast=GMainContext *
-OS__g_main_context_iteration_1=
-
-OS__g_main_context_pending=
-OS__g_main_context_pending_0=cast=GMainContext *
-
-OS__g_main_context_prepare=
-OS__g_main_context_prepare_0=cast=GMainContext *
-OS__g_main_context_prepare_1=
-
-OS__g_main_context_query=
-OS__g_main_context_query_0=cast=GMainContext *
-OS__g_main_context_query_1=
-OS__g_main_context_query_2=
-OS__g_main_context_query_3=cast=GPollFD *
-OS__g_main_context_query_4=
-
-OS__g_main_context_release=
-OS__g_main_context_release_0=cast=GMainContext *
-
-OS__g_malloc=
-OS__g_malloc_0=cast=(gulong)
-
-OS__g_object_get=
-OS__g_object_get_0=cast=GObject *
-OS__g_object_get_1=cast=(const gchar *),flags=no_out
-OS__g_object_get_2=
-OS__g_object_get_3=
-
-OS__g_object_get_qdata=
-OS__g_object_get_qdata_0=cast=(GObject *)
-OS__g_object_get_qdata_1=cast=(GQuark)
-
-OS__g_object_new=
-OS__g_object_new_0=cast=(GType)
-OS__g_object_new_1=cast=(const gchar *)
-
-OS__g_object_ref=
-OS__g_object_ref_0=cast=(gpointer)
-
-OS__1g_1object_1set__I_3BFI=
-OS__1g_1object_1set__I_3BFI_0=cast=(gpointer)
-OS__1g_1object_1set__I_3BFI_1=cast=(const gchar *),flags=no_out
-OS__1g_1object_1set__I_3BFI_2=
-OS__1g_1object_1set__I_3BFI_3=
-
-OS__1g_1object_1set__I_3BII=
-OS__1g_1object_1set__I_3BII_0=cast=(gpointer)
-OS__1g_1object_1set__I_3BII_1=cast=(const gchar *),flags=no_out
-OS__1g_1object_1set__I_3BII_2=
-OS__1g_1object_1set__I_3BII_3=
-
-OS__1g_1object_1set__I_3BJI=
-OS__1g_1object_1set__I_3BJI_0=cast=(gpointer)
-OS__1g_1object_1set__I_3BJI_1=cast=(const gchar *),flags=no_out
-OS__1g_1object_1set__I_3BJI_2=
-OS__1g_1object_1set__I_3BJI_3=
-
-OS__1g_1object_1set__I_3BZI=
-OS__1g_1object_1set__I_3BZI_0=cast=(gpointer)
-OS__1g_1object_1set__I_3BZI_1=cast=(const gchar *),flags=no_out
-OS__1g_1object_1set__I_3BZI_2=
-OS__1g_1object_1set__I_3BZI_3=
-
-OS__g_object_set_qdata=
-OS__g_object_set_qdata_0=cast=(GObject *)
-OS__g_object_set_qdata_1=cast=(GQuark)
-OS__g_object_set_qdata_2=cast=(gpointer)
-
-OS__g_object_unref=
-OS__g_object_unref_0=cast=(gpointer)
-
-OS__g_quark_from_string=
-OS__g_quark_from_string_0=cast=const gchar *,flags=no_out
-
-OS__g_set_prgname=
-OS__g_set_prgname_0=cast=(const gchar *),flags=no_out
-
-OS__g_signal_connect=
-OS__g_signal_connect_0=cast=(gpointer)
-OS__g_signal_connect_1=cast=(const gchar *),flags=no_out
-OS__g_signal_connect_2=cast=(GCallback)
-OS__g_signal_connect_3=cast=(gpointer)
-
-OS__g_signal_connect_after=
-OS__g_signal_connect_after_0=cast=(gpointer)
-OS__g_signal_connect_after_1=cast=(const gchar *),flags=no_out
-OS__g_signal_connect_after_2=cast=(GCallback)
-OS__g_signal_connect_after_3=cast=(gpointer)
-
-OS__g_signal_connect_closure=
-OS__g_signal_connect_closure_0=cast=(gpointer)
-OS__g_signal_connect_closure_1=cast=(const gchar *)
-OS__g_signal_connect_closure_2=cast=(GClosure *)
-OS__g_signal_connect_closure_3=cast=(gboolean)
-
-OS__g_signal_connect_closure_by_id=
-OS__g_signal_connect_closure_by_id_0=cast=(gpointer)
-OS__g_signal_connect_closure_by_id_1=cast=(guint)
-OS__g_signal_connect_closure_by_id_2=cast=(GQuark)
-OS__g_signal_connect_closure_by_id_3=cast=(GClosure *)
-OS__g_signal_connect_closure_by_id_4=cast=(gboolean)
-
-OS__1g_1signal_1emit_1by_1name__I_3B=
-OS__1g_1signal_1emit_1by_1name__I_3B_0=cast=(gpointer)
-OS__1g_1signal_1emit_1by_1name__I_3B_1=cast=(const gchar *),flags=no_out
-
-OS__1g_1signal_1emit_1by_1name__I_3BI=
-OS__1g_1signal_1emit_1by_1name__I_3BI_0=cast=(gpointer)
-OS__1g_1signal_1emit_1by_1name__I_3BI_1=cast=(const gchar *),flags=no_out
-OS__1g_1signal_1emit_1by_1name__I_3BI_2=
-
-OS__1g_1signal_1emit_1by_1name__I_3BII=
-OS__1g_1signal_1emit_1by_1name__I_3BII_0=cast=(gpointer)
-OS__1g_1signal_1emit_1by_1name__I_3BII_1=cast=(const gchar *),flags=no_out
-OS__1g_1signal_1emit_1by_1name__I_3BII_2=
-OS__1g_1signal_1emit_1by_1name__I_3BII_3=
-
-OS__1g_1signal_1emit_1by_1name__I_3B_3B=
-OS__1g_1signal_1emit_1by_1name__I_3B_3B_0=cast=(gpointer)
-OS__1g_1signal_1emit_1by_1name__I_3B_3B_1=cast=(const gchar *),flags=no_out
-OS__1g_1signal_1emit_1by_1name__I_3B_3B_2=
-
-OS__g_signal_handler_disconnect=
-OS__g_signal_handler_disconnect_0=cast=(gpointer)
-OS__g_signal_handler_disconnect_1=cast=(gulong)
-
-OS__g_signal_handlers_block_matched=
-OS__g_signal_handlers_block_matched_0=cast=(gpointer)
-OS__g_signal_handlers_block_matched_1=cast=(GSignalMatchType)
-OS__g_signal_handlers_block_matched_2=cast=(guint)
-OS__g_signal_handlers_block_matched_3=cast=(GQuark)
-OS__g_signal_handlers_block_matched_4=cast=(GClosure *)
-OS__g_signal_handlers_block_matched_5=cast=(gpointer)
-OS__g_signal_handlers_block_matched_6=cast=(gpointer)
-
-OS__g_signal_handlers_disconnect_matched=
-OS__g_signal_handlers_disconnect_matched_0=cast=(gpointer)
-OS__g_signal_handlers_disconnect_matched_1=cast=(GSignalMatchType)
-OS__g_signal_handlers_disconnect_matched_2=cast=(guint)
-OS__g_signal_handlers_disconnect_matched_3=cast=(GQuark)
-OS__g_signal_handlers_disconnect_matched_4=cast=(GClosure *)
-OS__g_signal_handlers_disconnect_matched_5=cast=(gpointer)
-OS__g_signal_handlers_disconnect_matched_6=cast=(gpointer)
-
-OS__g_signal_handlers_unblock_matched=
-OS__g_signal_handlers_unblock_matched_0=cast=(gpointer)
-OS__g_signal_handlers_unblock_matched_1=cast=(GSignalMatchType)
-OS__g_signal_handlers_unblock_matched_2=cast=(guint)
-OS__g_signal_handlers_unblock_matched_3=cast=(GQuark)
-OS__g_signal_handlers_unblock_matched_4=cast=(GClosure *)
-OS__g_signal_handlers_unblock_matched_5=cast=(gpointer)
-OS__g_signal_handlers_unblock_matched_6=cast=(gpointer)
-
-OS__g_signal_lookup=
-OS__g_signal_lookup_0=cast=const gchar *,flags=no_out
-OS__g_signal_lookup_1=
-
-OS__g_signal_stop_emission_by_name=
-OS__g_signal_stop_emission_by_name_0=cast=(gpointer)
-OS__g_signal_stop_emission_by_name_1=cast=(const gchar *),flags=no_out
-
-OS__g_slist_data=
-OS__g_slist_data_0=cast=(GSList *)
-
-OS__g_slist_free=
-OS__g_slist_free_0=cast=(GSList *)
-
-OS__g_slist_length=
-OS__g_slist_length_0=cast=(GSList *)
-
-OS__g_slist_next=
-OS__g_slist_next_0=cast=GSList *
-
-OS__g_strfreev=
-OS__g_strfreev_0=cast=(gchar **)
-
-OS__g_thread_init=
-OS__g_thread_init_0=cast=GThreadFunctions *
-
-OS__g_thread_supported=
-
-OS__g_type_add_interface_static=
-OS__g_type_add_interface_static_0=cast=(GType)
-OS__g_type_add_interface_static_1=cast=(GType)
-OS__g_type_add_interface_static_2=cast=(const GInterfaceInfo *)
-
-OS__g_type_class_peek=
-OS__g_type_class_peek_0=cast=(GType)
-
-OS__g_type_class_peek_parent=
-OS__g_type_class_peek_parent_0=cast=(gpointer)
-
-OS__g_type_from_name=
-OS__g_type_from_name_0=cast=(const gchar *)
-
-OS__g_type_interface_peek_parent=
-OS__g_type_interface_peek_parent_0=cast=(gpointer)
-
-OS__g_type_is_a=
-OS__g_type_is_a_0=cast=(GType)
-OS__g_type_is_a_1=cast=(GType)
-
-OS__g_type_name=
-OS__g_type_name_0=cast=(GType)
-
-OS__g_type_parent=
-OS__g_type_parent_0=cast=(GType)
-
-OS__g_type_query=
-OS__g_type_query_0=cast=(GType)
-OS__g_type_query_1=cast=(GTypeQuery *)
-
-OS__g_type_register_static=
-OS__g_type_register_static_0=cast=(GType)
-OS__g_type_register_static_1=cast=(const gchar *)
-OS__g_type_register_static_2=cast=(const GTypeInfo *)
-OS__g_type_register_static_3=cast=(GTypeFlags)
-
-OS__g_utf16_to_utf8=
-OS__g_utf16_to_utf8_0=cast=(const gunichar2 *),flags=no_out critical
-OS__g_utf16_to_utf8_1=cast=(glong)
-OS__g_utf16_to_utf8_2=cast=(glong *),flags=critical
-OS__g_utf16_to_utf8_3=cast=(glong *),flags=critical
-OS__g_utf16_to_utf8_4=cast=(GError **),flags=critical
-
-OS__g_utf8_offset_to_pointer=
-OS__g_utf8_offset_to_pointer_0=cast=const gchar *
-OS__g_utf8_offset_to_pointer_1=
-
-OS__g_utf8_pointer_to_offset=
-OS__g_utf8_pointer_to_offset_0=cast=const gchar *
-OS__g_utf8_pointer_to_offset_1=cast=const gchar *
-
-OS__g_utf8_strlen=
-OS__g_utf8_strlen_0=cast=const gchar *
-OS__g_utf8_strlen_1=
-
-OS__1g_1utf8_1to_1utf16__II_3I_3I_3I=
-OS__1g_1utf8_1to_1utf16__II_3I_3I_3I_0=cast=(const gchar *)
-OS__1g_1utf8_1to_1utf16__II_3I_3I_3I_1=cast=(glong)
-OS__1g_1utf8_1to_1utf16__II_3I_3I_3I_2=cast=(glong *),flags=critical
-OS__1g_1utf8_1to_1utf16__II_3I_3I_3I_3=cast=(glong *),flags=critical
-OS__1g_1utf8_1to_1utf16__II_3I_3I_3I_4=cast=(GError **),flags=critical
-
-OS__1g_1utf8_1to_1utf16___3BI_3I_3I_3I=
-OS__1g_1utf8_1to_1utf16___3BI_3I_3I_3I_0=cast=(const gchar *),flags=no_out critical
-OS__1g_1utf8_1to_1utf16___3BI_3I_3I_3I_1=cast=(glong)
-OS__1g_1utf8_1to_1utf16___3BI_3I_3I_3I_2=cast=(glong *),flags=critical
-OS__1g_1utf8_1to_1utf16___3BI_3I_3I_3I_3=cast=(glong *),flags=critical
-OS__1g_1utf8_1to_1utf16___3BI_3I_3I_3I_4=cast=(GError **),flags=critical
-
-OS__gdk_atom_intern=
-OS__gdk_atom_intern_0=cast=(const gchar *),flags=no_out critical
-OS__gdk_atom_intern_1=
-
-OS__gdk_atom_name=
-OS__gdk_atom_name_0=cast=(GdkAtom)
-
-OS__gdk_beep=
-
-OS__gdk_bitmap_create_from_data=
-OS__gdk_bitmap_create_from_data_0=cast=(GdkWindow *)
-OS__gdk_bitmap_create_from_data_1=cast=(const gchar *),flags=no_out critical
-OS__gdk_bitmap_create_from_data_2=cast=(gint)
-OS__gdk_bitmap_create_from_data_3=cast=(gint)
-
-OS__gdk_color_white=
-OS__gdk_color_white_0=cast=(GdkColormap *)
-OS__gdk_color_white_1=cast=(GdkColor *),flags=no_in
-
-OS__gdk_colormap_alloc_color=
-OS__gdk_colormap_alloc_color_0=cast=(GdkColormap *)
-OS__gdk_colormap_alloc_color_1=cast=(GdkColor *)
-OS__gdk_colormap_alloc_color_2=cast=(gboolean)
-OS__gdk_colormap_alloc_color_3=cast=(gboolean)
-
-OS__gdk_colormap_free_colors=
-OS__gdk_colormap_free_colors_0=cast=(GdkColormap *)
-OS__gdk_colormap_free_colors_1=cast=(GdkColor *),flags=no_out
-OS__gdk_colormap_free_colors_2=cast=(gint)
-
-OS__gdk_colormap_get_system=
-
-OS__gdk_colormap_query_color=
-OS__gdk_colormap_query_color_0=cast=(GdkColormap *)
-OS__gdk_colormap_query_color_1=cast=(gulong)
-OS__gdk_colormap_query_color_2=cast=(GdkColor *)
-
-OS__gdk_cursor_destroy=
-OS__gdk_cursor_destroy_0=cast=(GdkCursor *)
-
-OS__gdk_cursor_new=
-OS__gdk_cursor_new_0=cast=(GdkCursorType)
-
-OS__gdk_cursor_new_from_pixmap=
-OS__gdk_cursor_new_from_pixmap_0=cast=(GdkPixmap *)
-OS__gdk_cursor_new_from_pixmap_1=cast=(GdkPixmap *)
-OS__gdk_cursor_new_from_pixmap_2=cast=(GdkColor *),flags=no_out
-OS__gdk_cursor_new_from_pixmap_3=cast=(GdkColor *),flags=no_out
-OS__gdk_cursor_new_from_pixmap_4=cast=(gint)
-OS__gdk_cursor_new_from_pixmap_5=cast=(gint)
-
-OS__gdk_drag_status=
-OS__gdk_drag_status_0=cast=(GdkDragContext *)
-OS__gdk_drag_status_1=cast=(GdkDragAction)
-OS__gdk_drag_status_2=cast=(guint32)
-
-OS__gdk_draw_arc=
-OS__gdk_draw_arc_0=cast=(GdkDrawable *)
-OS__gdk_draw_arc_1=cast=(GdkGC *)
-OS__gdk_draw_arc_2=cast=(gint)
-OS__gdk_draw_arc_3=cast=(gint)
-OS__gdk_draw_arc_4=cast=(gint)
-OS__gdk_draw_arc_5=cast=(gint)
-OS__gdk_draw_arc_6=cast=(gint)
-OS__gdk_draw_arc_7=cast=(gint)
-OS__gdk_draw_arc_8=cast=(gint)
-
-OS__gdk_draw_drawable=
-OS__gdk_draw_drawable_0=cast=(GdkDrawable *)
-OS__gdk_draw_drawable_1=cast=(GdkGC *)
-OS__gdk_draw_drawable_2=cast=(GdkDrawable *)
-OS__gdk_draw_drawable_3=cast=(gint)
-OS__gdk_draw_drawable_4=cast=(gint)
-OS__gdk_draw_drawable_5=cast=(gint)
-OS__gdk_draw_drawable_6=cast=(gint)
-OS__gdk_draw_drawable_7=cast=(gint)
-OS__gdk_draw_drawable_8=cast=(gint)
-
-OS__gdk_draw_image=
-OS__gdk_draw_image_0=cast=(GdkDrawable *)
-OS__gdk_draw_image_1=cast=(GdkGC *)
-OS__gdk_draw_image_2=cast=GdkImage *
-OS__gdk_draw_image_3=
-OS__gdk_draw_image_4=
-OS__gdk_draw_image_5=
-OS__gdk_draw_image_6=
-OS__gdk_draw_image_7=
-OS__gdk_draw_image_8=
-
-OS__gdk_draw_layout=
-OS__gdk_draw_layout_0=cast=(GdkDrawable *)
-OS__gdk_draw_layout_1=cast=(GdkGC *)
-OS__gdk_draw_layout_2=cast=(gint)
-OS__gdk_draw_layout_3=cast=(gint)
-OS__gdk_draw_layout_4=cast=(PangoLayout *)
-
-OS__gdk_draw_layout_with_colors=
-OS__gdk_draw_layout_with_colors_0=cast=GdkDrawable *
-OS__gdk_draw_layout_with_colors_1=cast=(GdkGC *)
-OS__gdk_draw_layout_with_colors_2=cast=(gint)
-OS__gdk_draw_layout_with_colors_3=cast=(gint)
-OS__gdk_draw_layout_with_colors_4=cast=(PangoLayout *)
-OS__gdk_draw_layout_with_colors_5=flags=no_out
-OS__gdk_draw_layout_with_colors_6=flags=no_out
-
-OS__gdk_draw_line=
-OS__gdk_draw_line_0=cast=(GdkDrawable *)
-OS__gdk_draw_line_1=cast=(GdkGC *)
-OS__gdk_draw_line_2=cast=(gint)
-OS__gdk_draw_line_3=cast=(gint)
-OS__gdk_draw_line_4=cast=(gint)
-OS__gdk_draw_line_5=cast=(gint)
-
-OS__gdk_draw_lines=
-OS__gdk_draw_lines_0=cast=(GdkDrawable *)
-OS__gdk_draw_lines_1=cast=(GdkGC *)
-OS__gdk_draw_lines_2=cast=(GdkPoint *),flags=no_out critical
-OS__gdk_draw_lines_3=cast=(gint)
-
-OS__gdk_draw_pixbuf=flags=dynamic
-OS__gdk_draw_pixbuf_0=cast=(GdkDrawable *)
-OS__gdk_draw_pixbuf_1=cast=(GdkGC *)
-OS__gdk_draw_pixbuf_2=cast=(GdkPixbuf *)
-OS__gdk_draw_pixbuf_3=cast=(gint)
-OS__gdk_draw_pixbuf_4=cast=(gint)
-OS__gdk_draw_pixbuf_5=cast=(gint)
-OS__gdk_draw_pixbuf_6=cast=(gint)
-OS__gdk_draw_pixbuf_7=cast=(gint)
-OS__gdk_draw_pixbuf_8=cast=(gint)
-OS__gdk_draw_pixbuf_9=cast=(GdkRgbDither)
-OS__gdk_draw_pixbuf_10=cast=(gint)
-OS__gdk_draw_pixbuf_11=cast=(gint)
-
-OS__gdk_draw_point=
-OS__gdk_draw_point_0=cast=(GdkDrawable *)
-OS__gdk_draw_point_1=cast=GdkGC *
-OS__gdk_draw_point_2=
-OS__gdk_draw_point_3=
-
-OS__gdk_draw_polygon=
-OS__gdk_draw_polygon_0=cast=(GdkDrawable *)
-OS__gdk_draw_polygon_1=cast=(GdkGC *)
-OS__gdk_draw_polygon_2=cast=(gint)
-OS__gdk_draw_polygon_3=cast=(GdkPoint *),flags=no_out critical
-OS__gdk_draw_polygon_4=cast=(gint)
-
-OS__gdk_draw_rectangle=
-OS__gdk_draw_rectangle_0=cast=(GdkDrawable *)
-OS__gdk_draw_rectangle_1=cast=(GdkGC *)
-OS__gdk_draw_rectangle_2=cast=(gint)
-OS__gdk_draw_rectangle_3=cast=(gint)
-OS__gdk_draw_rectangle_4=cast=(gint)
-OS__gdk_draw_rectangle_5=cast=(gint)
-OS__gdk_draw_rectangle_6=cast=(gint)
-
-OS__gdk_drawable_get_depth=
-OS__gdk_drawable_get_depth_0=cast=(GdkDrawable *)
-
-OS__gdk_drawable_get_image=
-OS__gdk_drawable_get_image_0=cast=(GdkDrawable *)
-OS__gdk_drawable_get_image_1=cast=(gint)
-OS__gdk_drawable_get_image_2=cast=(gint)
-OS__gdk_drawable_get_image_3=cast=(gint)
-OS__gdk_drawable_get_image_4=cast=(gint)
-
-OS__gdk_drawable_get_size=
-OS__gdk_drawable_get_size_0=cast=(GdkDrawable *)
-OS__gdk_drawable_get_size_1=cast=(gint *),flags=no_in critical
-OS__gdk_drawable_get_size_2=cast=(gint *),flags=no_in critical
-
-OS__gdk_drawable_get_visible_region=
-OS__gdk_drawable_get_visible_region_0=cast=(GdkDrawable *)
-
-OS__gdk_error_trap_pop=
-
-OS__gdk_error_trap_push=
-
-OS__gdk_event_copy=
-OS__gdk_event_copy_0=cast=(GdkEvent *)
-
-OS__gdk_event_free=
-OS__gdk_event_free_0=cast=(GdkEvent *)
-
-OS__gdk_event_get=
-
-OS__gdk_event_get_coords=
-OS__gdk_event_get_coords_0=cast=(GdkEvent *)
-OS__gdk_event_get_coords_1=cast=(gdouble *)
-OS__gdk_event_get_coords_2=cast=(gdouble *)
-
-OS__gdk_event_get_graphics_expose=
-OS__gdk_event_get_graphics_expose_0=cast=(GdkWindow *)
-
-OS__gdk_event_get_root_coords=
-OS__gdk_event_get_root_coords_0=cast=(GdkEvent *)
-OS__gdk_event_get_root_coords_1=cast=(gdouble *)
-OS__gdk_event_get_root_coords_2=cast=(gdouble *)
-
-OS__gdk_event_get_state=
-OS__gdk_event_get_state_0=cast=(GdkEvent *)
-OS__gdk_event_get_state_1=cast=(GdkModifierType *)
-
-OS__gdk_event_get_time=
-OS__gdk_event_get_time_0=cast=(GdkEvent *)
-
-OS__gdk_event_handler_set=
-OS__gdk_event_handler_set_0=cast=(GdkEventFunc)
-OS__gdk_event_handler_set_1=cast=(gpointer)
-OS__gdk_event_handler_set_2=cast=(GDestroyNotify)
-
-OS__gdk_event_put=
-OS__gdk_event_put_0=cast=(GdkEvent *)
-
-OS__gdk_flush=
-
-OS__gdk_free_text_list=
-OS__gdk_free_text_list_0=cast=(gchar **)
-
-OS__gdk_gc_get_values=
-OS__gdk_gc_get_values_0=cast=(GdkGC *)
-OS__gdk_gc_get_values_1=cast=(GdkGCValues *),flags=no_in
-
-OS__gdk_gc_new=
-OS__gdk_gc_new_0=cast=(GdkDrawable *)
-
-OS__gdk_gc_set_background=
-OS__gdk_gc_set_background_0=cast=(GdkGC *)
-OS__gdk_gc_set_background_1=cast=(GdkColor *),flags=no_out
-
-OS__gdk_gc_set_clip_mask=
-OS__gdk_gc_set_clip_mask_0=cast=(GdkGC *)
-OS__gdk_gc_set_clip_mask_1=cast=(GdkBitmap *)
-
-OS__gdk_gc_set_clip_origin=
-OS__gdk_gc_set_clip_origin_0=cast=(GdkGC *)
-OS__gdk_gc_set_clip_origin_1=cast=(gint)
-OS__gdk_gc_set_clip_origin_2=cast=(gint)
-
-OS__gdk_gc_set_clip_rectangle=
-OS__gdk_gc_set_clip_rectangle_0=cast=(GdkGC *)
-OS__gdk_gc_set_clip_rectangle_1=cast=(GdkRectangle *),flags=no_out
-
-OS__gdk_gc_set_clip_region=
-OS__gdk_gc_set_clip_region_0=cast=(GdkGC *)
-OS__gdk_gc_set_clip_region_1=cast=(GdkRegion *)
-
-OS__gdk_gc_set_dashes=
-OS__gdk_gc_set_dashes_0=cast=(GdkGC *)
-OS__gdk_gc_set_dashes_1=cast=(gint)
-OS__gdk_gc_set_dashes_2=cast=(gint8 *),flags=no_out critical
-OS__gdk_gc_set_dashes_3=cast=(gint)
-
-OS__gdk_gc_set_exposures=
-OS__gdk_gc_set_exposures_0=cast=(GdkGC *)
-OS__gdk_gc_set_exposures_1=cast=(gboolean)
-
-OS__gdk_gc_set_fill=
-OS__gdk_gc_set_fill_0=cast=(GdkGC *)
-OS__gdk_gc_set_fill_1=cast=(GdkFill)
-
-OS__gdk_gc_set_foreground=
-OS__gdk_gc_set_foreground_0=cast=(GdkGC *)
-OS__gdk_gc_set_foreground_1=cast=(GdkColor *),flags=no_out
-
-OS__gdk_gc_set_function=
-OS__gdk_gc_set_function_0=cast=(GdkGC *)
-OS__gdk_gc_set_function_1=cast=(GdkFunction)
-
-OS__gdk_gc_set_line_attributes=
-OS__gdk_gc_set_line_attributes_0=cast=(GdkGC *)
-OS__gdk_gc_set_line_attributes_1=cast=(gint)
-OS__gdk_gc_set_line_attributes_2=cast=(GdkLineStyle)
-OS__gdk_gc_set_line_attributes_3=cast=(GdkCapStyle)
-OS__gdk_gc_set_line_attributes_4=cast=(GdkJoinStyle)
-
-OS__gdk_gc_set_stipple=
-OS__gdk_gc_set_stipple_0=cast=(GdkGC *)
-OS__gdk_gc_set_stipple_1=cast=(GdkPixmap *)
-
-OS__gdk_gc_set_subwindow=
-OS__gdk_gc_set_subwindow_0=cast=(GdkGC *)
-OS__gdk_gc_set_subwindow_1=cast=(GdkSubwindowMode)
-
-OS__gdk_gc_set_tile=
-OS__gdk_gc_set_tile_0=cast=(GdkGC *)
-OS__gdk_gc_set_tile_1=cast=(GdkPixmap *)
-
-OS__gdk_gc_set_ts_origin=
-OS__gdk_gc_set_ts_origin_0=cast=(GdkGC *)
-OS__gdk_gc_set_ts_origin_1=
-OS__gdk_gc_set_ts_origin_2=
-
-OS__gdk_gc_set_values=
-OS__gdk_gc_set_values_0=cast=(GdkGC *)
-OS__gdk_gc_set_values_1=cast=(GdkGCValues *),flags=no_out
-OS__gdk_gc_set_values_2=cast=(GdkGCValuesMask)
-
-OS__gdk_keyboard_ungrab=
-OS__gdk_keyboard_ungrab_0=
-
-OS__gdk_keymap_get_default=
-
-OS__gdk_keymap_translate_keyboard_state=
-OS__gdk_keymap_translate_keyboard_state_0=cast=GdkKeymap*
-OS__gdk_keymap_translate_keyboard_state_1=
-OS__gdk_keymap_translate_keyboard_state_2=cast=GdkModifierType
-OS__gdk_keymap_translate_keyboard_state_3=
-OS__gdk_keymap_translate_keyboard_state_4=cast=guint*
-OS__gdk_keymap_translate_keyboard_state_5=cast=gint*
-OS__gdk_keymap_translate_keyboard_state_6=cast=gint*
-OS__gdk_keymap_translate_keyboard_state_7=cast=GdkModifierType *
-
-OS__gdk_keyval_to_lower=
-OS__gdk_keyval_to_lower_0=
-
-OS__gdk_keyval_to_unicode=
-OS__gdk_keyval_to_unicode_0=
-
-OS__gdk_pango_context_get=
-
-OS__gdk_pango_context_set_colormap=
-OS__gdk_pango_context_set_colormap_0=cast=PangoContext *
-OS__gdk_pango_context_set_colormap_1=cast=(GdkColormap *)
-
-OS__gdk_pango_layout_get_clip_region=
-OS__gdk_pango_layout_get_clip_region_0=cast=(PangoLayout *)
-OS__gdk_pango_layout_get_clip_region_1=
-OS__gdk_pango_layout_get_clip_region_2=
-OS__gdk_pango_layout_get_clip_region_3=
-OS__gdk_pango_layout_get_clip_region_4=
-
-OS__gdk_pixbuf_copy_area=
-OS__gdk_pixbuf_copy_area_0=cast=(GdkPixbuf *)
-OS__gdk_pixbuf_copy_area_1=
-OS__gdk_pixbuf_copy_area_2=
-OS__gdk_pixbuf_copy_area_3=
-OS__gdk_pixbuf_copy_area_4=
-OS__gdk_pixbuf_copy_area_5=cast=(GdkPixbuf *)
-OS__gdk_pixbuf_copy_area_6=
-OS__gdk_pixbuf_copy_area_7=
-
-OS__gdk_pixbuf_get_from_drawable=
-OS__gdk_pixbuf_get_from_drawable_0=cast=(GdkPixbuf *)
-OS__gdk_pixbuf_get_from_drawable_1=cast=(GdkDrawable *)
-OS__gdk_pixbuf_get_from_drawable_2=cast=(GdkColormap *)
-OS__gdk_pixbuf_get_from_drawable_3=
-OS__gdk_pixbuf_get_from_drawable_4=
-OS__gdk_pixbuf_get_from_drawable_5=
-OS__gdk_pixbuf_get_from_drawable_6=
-OS__gdk_pixbuf_get_from_drawable_7=
-OS__gdk_pixbuf_get_from_drawable_8=
-
-OS__gdk_pixbuf_get_has_alpha=
-OS__gdk_pixbuf_get_has_alpha_0=cast=(const GdkPixbuf *)
-
-OS__gdk_pixbuf_get_height=
-OS__gdk_pixbuf_get_height_0=cast=(const GdkPixbuf *)
-
-OS__gdk_pixbuf_get_pixels=
-OS__gdk_pixbuf_get_pixels_0=cast=(const GdkPixbuf *)
-
-OS__gdk_pixbuf_get_rowstride=
-OS__gdk_pixbuf_get_rowstride_0=cast=(const GdkPixbuf *)
-
-OS__gdk_pixbuf_get_width=
-OS__gdk_pixbuf_get_width_0=cast=(const GdkPixbuf *)
-
-OS__gdk_pixbuf_new=
-OS__gdk_pixbuf_new_0=cast=(GdkColorspace)
-OS__gdk_pixbuf_new_1=cast=(gboolean)
-OS__gdk_pixbuf_new_2=
-OS__gdk_pixbuf_new_3=
-OS__gdk_pixbuf_new_4=
-
-OS__gdk_pixbuf_new_from_file=
-OS__gdk_pixbuf_new_from_file_0=cast=const char *
-OS__gdk_pixbuf_new_from_file_1=cast=GError**
-
-OS__gdk_pixbuf_render_pixmap_and_mask=
-OS__gdk_pixbuf_render_pixmap_and_mask_0=cast=(GdkPixbuf *)
-OS__gdk_pixbuf_render_pixmap_and_mask_1=cast=(GdkDrawable **)
-OS__gdk_pixbuf_render_pixmap_and_mask_2=cast=(GdkBitmap **)
-OS__gdk_pixbuf_render_pixmap_and_mask_3=
-
-OS__gdk_pixbuf_render_to_drawable=
-OS__gdk_pixbuf_render_to_drawable_0=cast=(GdkPixbuf *)
-OS__gdk_pixbuf_render_to_drawable_1=cast=(GdkDrawable *)
-OS__gdk_pixbuf_render_to_drawable_2=cast=(GdkGC *)
-OS__gdk_pixbuf_render_to_drawable_3=
-OS__gdk_pixbuf_render_to_drawable_4=
-OS__gdk_pixbuf_render_to_drawable_5=
-OS__gdk_pixbuf_render_to_drawable_6=
-OS__gdk_pixbuf_render_to_drawable_7=
-OS__gdk_pixbuf_render_to_drawable_8=
-OS__gdk_pixbuf_render_to_drawable_9=cast=(GdkRgbDither)
-OS__gdk_pixbuf_render_to_drawable_10=
-OS__gdk_pixbuf_render_to_drawable_11=
-
-OS__gdk_pixbuf_render_to_drawable_alpha=
-OS__gdk_pixbuf_render_to_drawable_alpha_0=cast=(GdkPixbuf *)
-OS__gdk_pixbuf_render_to_drawable_alpha_1=cast=(GdkDrawable *)
-OS__gdk_pixbuf_render_to_drawable_alpha_2=
-OS__gdk_pixbuf_render_to_drawable_alpha_3=
-OS__gdk_pixbuf_render_to_drawable_alpha_4=
-OS__gdk_pixbuf_render_to_drawable_alpha_5=
-OS__gdk_pixbuf_render_to_drawable_alpha_6=
-OS__gdk_pixbuf_render_to_drawable_alpha_7=
-OS__gdk_pixbuf_render_to_drawable_alpha_8=cast=(GdkPixbufAlphaMode)
-OS__gdk_pixbuf_render_to_drawable_alpha_9=
-OS__gdk_pixbuf_render_to_drawable_alpha_10=cast=(GdkRgbDither)
-OS__gdk_pixbuf_render_to_drawable_alpha_11=
-OS__gdk_pixbuf_render_to_drawable_alpha_12=
-
-OS__gdk_pixbuf_scale=
-OS__gdk_pixbuf_scale_0=cast=(const GdkPixbuf *)
-OS__gdk_pixbuf_scale_1=cast=(GdkPixbuf *)
-OS__gdk_pixbuf_scale_2=
-OS__gdk_pixbuf_scale_3=
-OS__gdk_pixbuf_scale_4=
-OS__gdk_pixbuf_scale_5=
-OS__gdk_pixbuf_scale_6=cast=(double)
-OS__gdk_pixbuf_scale_7=cast=(double)
-OS__gdk_pixbuf_scale_8=cast=(double)
-OS__gdk_pixbuf_scale_9=cast=(double)
-OS__gdk_pixbuf_scale_10=
-
-OS__gdk_pixbuf_scale_simple=
-OS__gdk_pixbuf_scale_simple_0=cast=(const GdkPixbuf *)
-OS__gdk_pixbuf_scale_simple_1=
-OS__gdk_pixbuf_scale_simple_2=
-OS__gdk_pixbuf_scale_simple_3=cast=(GdkInterpType)
-
-OS__gdk_pixmap_foreign_new=
-OS__gdk_pixmap_foreign_new_0=
-
-OS__gdk_pixmap_new=
-OS__gdk_pixmap_new_0=cast=(GdkWindow *)
-OS__gdk_pixmap_new_1=cast=(gint)
-OS__gdk_pixmap_new_2=cast=(gint)
-OS__gdk_pixmap_new_3=cast=(gint)
-
-OS__gdk_pointer_grab=
-OS__gdk_pointer_grab_0=cast=(GdkWindow *)
-OS__gdk_pointer_grab_1=cast=(gboolean)
-OS__gdk_pointer_grab_2=cast=(GdkEventMask)
-OS__gdk_pointer_grab_3=cast=(GdkWindow *)
-OS__gdk_pointer_grab_4=cast=(GdkCursor *)
-OS__gdk_pointer_grab_5=cast=(guint32)
-
-OS__gdk_pointer_is_grabbed=
-
-OS__gdk_pointer_ungrab=
-OS__gdk_pointer_ungrab_0=cast=(guint32)
-
-OS__gdk_property_get=
-OS__gdk_property_get_0=cast=(GdkWindow *)
-OS__gdk_property_get_1=cast=(GdkAtom)
-OS__gdk_property_get_2=cast=(GdkAtom)
-OS__gdk_property_get_3=
-OS__gdk_property_get_4=
-OS__gdk_property_get_5=
-OS__gdk_property_get_6=cast=(GdkAtom *)
-OS__gdk_property_get_7=cast=(gint *)
-OS__gdk_property_get_8=cast=(gint *)
-OS__gdk_property_get_9=cast=(guchar **)
-
-OS__gdk_region_destroy=
-OS__gdk_region_destroy_0=cast=(GdkRegion *)
-
-OS__gdk_region_empty=
-OS__gdk_region_empty_0=cast=(GdkRegion *)
-
-OS__gdk_region_get_clipbox=
-OS__gdk_region_get_clipbox_0=cast=(GdkRegion *)
-OS__gdk_region_get_clipbox_1=cast=(GdkRectangle *),flags=no_in
-
-OS__gdk_region_get_rectangles=
-OS__gdk_region_get_rectangles_0=cast=(GdkRegion *)
-OS__gdk_region_get_rectangles_1=cast=(GdkRectangle **)
-OS__gdk_region_get_rectangles_2=cast=(gint *)
-
-OS__gdk_region_intersect=
-OS__gdk_region_intersect_0=cast=(GdkRegion *)
-OS__gdk_region_intersect_1=cast=(GdkRegion *)
-
-OS__gdk_region_new=
-
-OS__gdk_region_offset=
-OS__gdk_region_offset_0=cast=(GdkRegion *)
-OS__gdk_region_offset_1=cast=(gint)
-OS__gdk_region_offset_2=cast=(gint)
-
-OS__gdk_region_point_in=
-OS__gdk_region_point_in_0=cast=(GdkRegion *)
-OS__gdk_region_point_in_1=cast=(gint)
-OS__gdk_region_point_in_2=cast=(gint)
-
-OS__gdk_region_polygon=
-OS__gdk_region_polygon_0=cast=(GdkPoint *)
-OS__gdk_region_polygon_1=
-OS__gdk_region_polygon_2=cast=(GdkFillRule)
-
-OS__gdk_region_rect_in=
-OS__gdk_region_rect_in_0=cast=(GdkRegion *)
-OS__gdk_region_rect_in_1=cast=(GdkRectangle *),flags=no_out
-
-OS__gdk_region_rectangle=
-OS__gdk_region_rectangle_0=flags=no_out
-
-OS__gdk_region_subtract=
-OS__gdk_region_subtract_0=cast=(GdkRegion *)
-OS__gdk_region_subtract_1=cast=(GdkRegion *)
-
-OS__gdk_region_union=
-OS__gdk_region_union_0=cast=(GdkRegion *)
-OS__gdk_region_union_1=cast=(GdkRegion *)
-
-OS__gdk_region_union_with_rect=
-OS__gdk_region_union_with_rect_0=cast=(GdkRegion *)
-OS__gdk_region_union_with_rect_1=cast=(GdkRectangle *),flags=no_out
-
-OS__gdk_rgb_init=
-
-OS__gdk_screen_get_default=flags=dynamic
-
-OS__gdk_screen_get_monitor_at_window=flags=dynamic
-OS__gdk_screen_get_monitor_at_window_0=cast=(GdkScreen *)
-OS__gdk_screen_get_monitor_at_window_1=cast=(GdkWindow *)
-
-OS__gdk_screen_get_monitor_geometry=flags=dynamic
-OS__gdk_screen_get_monitor_geometry_0=cast=(GdkScreen *)
-OS__gdk_screen_get_monitor_geometry_1=
-OS__gdk_screen_get_monitor_geometry_2=flags=no_in
-
-OS__gdk_screen_get_n_monitors=flags=dynamic
-OS__gdk_screen_get_n_monitors_0=cast=(GdkScreen *)
-
-OS__gdk_screen_get_number=flags=dynamic
-OS__gdk_screen_get_number_0=cast=(GdkScreen *)
-
-OS__gdk_screen_height=
-
-OS__gdk_screen_width=
-
-OS__gdk_screen_width_mm=
-
-OS__gdk_set_program_class=
-OS__gdk_set_program_class_0=cast=(const char *)
-
-OS__gdk_text_property_to_utf8_list=
-OS__gdk_text_property_to_utf8_list_0=cast=(GdkAtom)
-OS__gdk_text_property_to_utf8_list_1=
-OS__gdk_text_property_to_utf8_list_2=cast=(guchar *)
-OS__gdk_text_property_to_utf8_list_3=
-OS__gdk_text_property_to_utf8_list_4=cast=(gchar ***)
-
-OS__gdk_unicode_to_keyval=
-OS__gdk_unicode_to_keyval_0=
-
-OS__gdk_utf8_to_compound_text=
-OS__gdk_utf8_to_compound_text_0=cast=(const gchar *)
-OS__gdk_utf8_to_compound_text_1=cast=(GdkAtom *)
-OS__gdk_utf8_to_compound_text_2=cast=(gint *)
-OS__gdk_utf8_to_compound_text_3=cast=(guchar **)
-OS__gdk_utf8_to_compound_text_4=cast=(gint *)
-
-OS__gdk_utf8_to_string_target=
-OS__gdk_utf8_to_string_target_0=cast=(const gchar *)
-
-OS__gdk_visual_get_system=
-
-OS__gdk_window_add_filter=
-OS__gdk_window_add_filter_0=cast=GdkWindow *
-OS__gdk_window_add_filter_1=cast=GdkFilterFunc
-OS__gdk_window_add_filter_2=cast=gpointer
-
-OS__gdk_window_at_pointer=
-OS__gdk_window_at_pointer_0=cast=(gint *)
-OS__gdk_window_at_pointer_1=cast=(gint *)
-
-OS__gdk_window_begin_paint_rect=
-OS__gdk_window_begin_paint_rect_0=cast=GdkWindow *
-OS__gdk_window_begin_paint_rect_1=cast=GdkRectangle *,flags=no_out
-
-OS__gdk_window_clear_area=
-OS__gdk_window_clear_area_0=cast=GdkWindow *
-OS__gdk_window_clear_area_1=
-OS__gdk_window_clear_area_2=
-OS__gdk_window_clear_area_3=
-OS__gdk_window_clear_area_4=
-
-OS__gdk_window_destroy=
-OS__gdk_window_destroy_0=cast=GdkWindow *
-
-OS__gdk_window_end_paint=
-OS__gdk_window_end_paint_0=cast=GdkWindow *
-
-OS__gdk_window_focus=
-OS__gdk_window_focus_0=cast=GdkWindow *
-OS__gdk_window_focus_1=
-
-OS__gdk_window_freeze_updates=
-OS__gdk_window_freeze_updates_0=cast=GdkWindow *
-
-OS__gdk_window_get_children=
-OS__gdk_window_get_children_0=cast=GdkWindow *
-
-OS__gdk_window_get_events=
-OS__gdk_window_get_events_0=cast=GdkWindow *
-
-OS__gdk_window_get_frame_extents=
-OS__gdk_window_get_frame_extents_0=cast=(GdkWindow *)
-OS__gdk_window_get_frame_extents_1=cast=(GdkRectangle *),flags=no_in
-
-OS__gdk_window_get_internal_paint_info=
-OS__gdk_window_get_internal_paint_info_0=cast=GdkWindow *
-OS__gdk_window_get_internal_paint_info_1=cast=GdkDrawable **
-OS__gdk_window_get_internal_paint_info_2=cast=gint *
-OS__gdk_window_get_internal_paint_info_3=cast=gint *
-
-OS__gdk_window_get_origin=
-OS__gdk_window_get_origin_0=cast=(GdkWindow *)
-OS__gdk_window_get_origin_1=cast=(gint *)
-OS__gdk_window_get_origin_2=cast=(gint *)
-
-OS__gdk_window_get_parent=
-OS__gdk_window_get_parent_0=cast=(GdkWindow *)
-
-OS__gdk_window_get_pointer=
-OS__gdk_window_get_pointer_0=cast=(GdkWindow *)
-OS__gdk_window_get_pointer_1=cast=(gint *)
-OS__gdk_window_get_pointer_2=cast=(gint *)
-OS__gdk_window_get_pointer_3=cast=(GdkModifierType *)
-
-OS__gdk_window_get_user_data=
-OS__gdk_window_get_user_data_0=cast=(GdkWindow *)
-OS__gdk_window_get_user_data_1=cast=(gpointer *)
-
-OS__gdk_window_hide=
-OS__gdk_window_hide_0=cast=(GdkWindow *)
-
-OS__gdk_window_invalidate_rect=
-OS__gdk_window_invalidate_rect_0=cast=(GdkWindow *)
-OS__gdk_window_invalidate_rect_1=cast=(GdkRectangle *),flags=no_out
-OS__gdk_window_invalidate_rect_2=cast=(gboolean)
-
-OS__gdk_window_invalidate_region=
-OS__gdk_window_invalidate_region_0=cast=(GdkWindow *)
-OS__gdk_window_invalidate_region_1=cast=(GdkRegion *)
-OS__gdk_window_invalidate_region_2=cast=(gboolean)
-
-OS__gdk_window_lookup=
-OS__gdk_window_lookup_0=
-
-OS__gdk_window_lower=
-OS__gdk_window_lower_0=cast=(GdkWindow *)
-
-OS__gdk_window_move=
-OS__gdk_window_move_0=cast=GdkWindow *
-OS__gdk_window_move_1=
-OS__gdk_window_move_2=
-
-OS__gdk_window_new=
-OS__gdk_window_new_0=cast=(GdkWindow *)
-OS__gdk_window_new_1=flags=no_out
-OS__gdk_window_new_2=
-
-OS__gdk_window_process_all_updates=
-
-OS__gdk_window_process_updates=
-OS__gdk_window_process_updates_0=cast=(GdkWindow *)
-OS__gdk_window_process_updates_1=cast=(gboolean)
-
-OS__gdk_window_raise=
-OS__gdk_window_raise_0=cast=(GdkWindow *)
-
-OS__gdk_window_remove_filter=
-OS__gdk_window_remove_filter_0=cast=(GdkWindow *)
-OS__gdk_window_remove_filter_1=cast=(GdkFilterFunc)
-OS__gdk_window_remove_filter_2=cast=(gpointer)
-
-OS__gdk_window_resize=
-OS__gdk_window_resize_0=cast=GdkWindow *
-OS__gdk_window_resize_1=
-OS__gdk_window_resize_2=
-
-OS__gdk_window_scroll=
-OS__gdk_window_scroll_0=cast=(GdkWindow *)
-OS__gdk_window_scroll_1=
-OS__gdk_window_scroll_2=
-
-OS__gdk_window_set_accept_focus=flags=dynamic
-OS__gdk_window_set_accept_focus_0=cast=GdkWindow *
-OS__gdk_window_set_accept_focus_1=cast=gboolean
-
-OS__gdk_window_set_back_pixmap=
-OS__gdk_window_set_back_pixmap_0=cast=(GdkWindow *)
-OS__gdk_window_set_back_pixmap_1=cast=(GdkPixmap *)
-OS__gdk_window_set_back_pixmap_2=cast=gboolean
-
-OS__gdk_window_set_cursor=
-OS__gdk_window_set_cursor_0=cast=(GdkWindow *)
-OS__gdk_window_set_cursor_1=cast=(GdkCursor *)
-
-OS__gdk_window_set_debug_updates=
-OS__gdk_window_set_debug_updates_0=cast=(gboolean)
-
-OS__gdk_window_set_decorations=
-OS__gdk_window_set_decorations_0=cast=(GdkWindow *)
-OS__gdk_window_set_decorations_1=cast=(GdkWMDecoration)
-
-OS__gdk_window_set_events=
-OS__gdk_window_set_events_0=cast=GdkWindow *
-OS__gdk_window_set_events_1=
-
-OS__gdk_window_set_icon=
-OS__gdk_window_set_icon_0=cast=(GdkWindow *)
-OS__gdk_window_set_icon_1=cast=(GdkWindow *)
-OS__gdk_window_set_icon_2=cast=(GdkPixmap *)
-OS__gdk_window_set_icon_3=cast=(GdkBitmap *)
-
-OS__gdk_window_set_icon_list=
-OS__gdk_window_set_icon_list_0=cast=GdkWindow *
-OS__gdk_window_set_icon_list_1=cast=GList *
-
-OS__gdk_window_set_keep_above=flags=dynamic
-OS__gdk_window_set_keep_above_0=cast=(GdkWindow *)
-OS__gdk_window_set_keep_above_1=cast=gboolean
-
-OS__gdk_window_set_override_redirect=
-OS__gdk_window_set_override_redirect_0=cast=(GdkWindow *)
-OS__gdk_window_set_override_redirect_1=cast=(gboolean)
-
-OS__gdk_window_set_user_data=
-OS__gdk_window_set_user_data_0=cast=(GdkWindow *)
-OS__gdk_window_set_user_data_1=cast=gpointer
-
-OS__gdk_window_shape_combine_region=
-OS__gdk_window_shape_combine_region_0=cast=GdkWindow *
-OS__gdk_window_shape_combine_region_1=cast=(GdkRegion *)
-OS__gdk_window_shape_combine_region_2=
-OS__gdk_window_shape_combine_region_3=
-
-OS__gdk_window_show=
-OS__gdk_window_show_0=cast=(GdkWindow *)
-
-OS__gdk_window_show_unraised=
-OS__gdk_window_show_unraised_0=cast=(GdkWindow *)
-
-OS__gdk_window_thaw_updates=
-OS__gdk_window_thaw_updates_0=cast=GdkWindow *
-
-OS__gdk_x11_atom_to_xatom=
-OS__gdk_x11_atom_to_xatom_0=cast=(GdkAtom)
-
-OS__gdk_x11_colormap_get_xcolormap=
-OS__gdk_x11_colormap_get_xcolormap_0=cast=GdkColormap *
-
-OS__gdk_x11_drawable_get_xdisplay=
-OS__gdk_x11_drawable_get_xdisplay_0=cast=GdkDrawable *
-
-OS__gdk_x11_drawable_get_xid=
-OS__gdk_x11_drawable_get_xid_0=cast=GdkDrawable *
-
-OS__gdk_x11_screen_get_window_manager_name=flags=dynamic
-OS__gdk_x11_screen_get_window_manager_name_0=cast=(GdkScreen *)
-
-OS__gdk_x11_screen_lookup_visual=flags=dynamic
-OS__gdk_x11_screen_lookup_visual_0=cast=(GdkScreen *)
-OS__gdk_x11_screen_lookup_visual_1=cast=(VisualID)
-
-OS__gdk_x11_visual_get_xvisual=
-OS__gdk_x11_visual_get_xvisual_0=cast=GdkVisual *
-
-OS__gtk_accel_group_new=
-
-OS__gtk_accel_groups_activate=
-OS__gtk_accel_groups_activate_0=cast=(GObject *)
-OS__gtk_accel_groups_activate_1=cast=(guint)
-OS__gtk_accel_groups_activate_2=cast=(GdkModifierType)
-
-OS__gtk_accel_label_set_accel_widget=
-OS__gtk_accel_label_set_accel_widget_0=cast=(GtkAccelLabel *)
-OS__gtk_accel_label_set_accel_widget_1=cast=(GtkWidget *)
-
-OS__gtk_adjustment_changed=
-OS__gtk_adjustment_changed_0=cast=(GtkAdjustment *)
-
-OS__gtk_adjustment_new=
-OS__gtk_adjustment_new_0=cast=(gdouble)
-OS__gtk_adjustment_new_1=cast=(gdouble)
-OS__gtk_adjustment_new_2=cast=(gdouble)
-OS__gtk_adjustment_new_3=cast=(gdouble)
-OS__gtk_adjustment_new_4=cast=(gdouble)
-OS__gtk_adjustment_new_5=
-
-OS__gtk_adjustment_set_value=
-OS__gtk_adjustment_set_value_0=cast=(GtkAdjustment *)
-OS__gtk_adjustment_set_value_1=cast=(gdouble)
-
-OS__gtk_adjustment_value_changed=
-OS__gtk_adjustment_value_changed_0=cast=(GtkAdjustment *)
-
-OS__gtk_arrow_new=
-OS__gtk_arrow_new_0=cast=(GtkArrowType)
-OS__gtk_arrow_new_1=cast=(GtkShadowType)
-
-OS__gtk_arrow_set=
-OS__gtk_arrow_set_0=cast=(GtkArrow *)
-OS__gtk_arrow_set_1=cast=(GtkArrowType)
-OS__gtk_arrow_set_2=cast=(GtkShadowType)
-
-OS__gtk_bin_get_child=
-OS__gtk_bin_get_child_0=cast=(GtkBin *)
-
-OS__gtk_box_set_child_packing=
-OS__gtk_box_set_child_packing_0=cast=(GtkBox *)
-OS__gtk_box_set_child_packing_1=cast=(GtkWidget *)
-OS__gtk_box_set_child_packing_2=
-OS__gtk_box_set_child_packing_3=
-OS__gtk_box_set_child_packing_4=
-OS__gtk_box_set_child_packing_5=
-
-OS__gtk_box_set_spacing=
-OS__gtk_box_set_spacing_0=cast=(GtkBox *)
-OS__gtk_box_set_spacing_1=
-
-OS__gtk_button_clicked=
-OS__gtk_button_clicked_0=cast=(GtkButton *)
-
-OS__gtk_button_get_relief=
-OS__gtk_button_get_relief_0=cast=GtkButton *
-
-OS__gtk_button_new=
-
-OS__gtk_button_set_relief=
-OS__gtk_button_set_relief_0=cast=(GtkButton *)
-OS__gtk_button_set_relief_1=cast=(GtkReliefStyle)
-
-OS__gtk_cell_renderer_get_size=
-OS__gtk_cell_renderer_get_size_0=cast=(GtkCellRenderer *)
-OS__gtk_cell_renderer_get_size_1=cast=(GtkWidget *)
-OS__gtk_cell_renderer_get_size_2=cast=(GdkRectangle *),flags=no_in
-OS__gtk_cell_renderer_get_size_3=cast=(gint *)
-OS__gtk_cell_renderer_get_size_4=cast=(gint *)
-OS__gtk_cell_renderer_get_size_5=cast=(gint *)
-OS__gtk_cell_renderer_get_size_6=cast=(gint *)
-
-OS__gtk_cell_renderer_pixbuf_new=
-
-OS__gtk_cell_renderer_text_new=
-
-OS__gtk_cell_renderer_toggle_new=
-
-OS__gtk_check_button_new=
-
-OS__gtk_check_menu_item_get_active=
-OS__gtk_check_menu_item_get_active_0=cast=(GtkCheckMenuItem *)
-
-OS__gtk_check_menu_item_new_with_label=
-OS__gtk_check_menu_item_new_with_label_0=cast=(const gchar *)
-
-OS__gtk_check_menu_item_set_active=
-OS__gtk_check_menu_item_set_active_0=cast=(GtkCheckMenuItem *)
-OS__gtk_check_menu_item_set_active_1=cast=(gboolean)
-
-OS__gtk_check_version=
-OS__gtk_check_version_0=
-OS__gtk_check_version_1=
-OS__gtk_check_version_2=
-
-OS__gtk_clipboard_clear=
-OS__gtk_clipboard_clear_0=cast=(GtkClipboard *)
-
-OS__gtk_clipboard_get=
-OS__gtk_clipboard_get_0=cast=(GdkAtom)
-
-OS__gtk_clipboard_set_with_data=
-OS__gtk_clipboard_set_with_data_0=cast=(GtkClipboard *)
-OS__gtk_clipboard_set_with_data_1=cast=(const GtkTargetEntry *)
-OS__gtk_clipboard_set_with_data_2=cast=(guint)
-OS__gtk_clipboard_set_with_data_3=cast=(GtkClipboardGetFunc)
-OS__gtk_clipboard_set_with_data_4=cast=(GtkClipboardClearFunc)
-OS__gtk_clipboard_set_with_data_5=cast=(GObject *)
-
-OS__gtk_clipboard_wait_for_contents=
-OS__gtk_clipboard_wait_for_contents_0=cast=(GtkClipboard *)
-OS__gtk_clipboard_wait_for_contents_1=cast=(GdkAtom)
-
-OS__gtk_color_selection_dialog_new=
-OS__gtk_color_selection_dialog_new_0=cast=(const gchar *)
-
-OS__gtk_color_selection_get_current_color=
-OS__gtk_color_selection_get_current_color_0=cast=(GtkColorSelection *)
-OS__gtk_color_selection_get_current_color_1=cast=(GdkColor *),flags=no_in
-
-OS__gtk_color_selection_set_current_color=
-OS__gtk_color_selection_set_current_color_0=cast=(GtkColorSelection *)
-OS__gtk_color_selection_set_current_color_1=cast=(GdkColor *),flags=no_out
-
-OS__gtk_color_selection_set_has_palette=
-OS__gtk_color_selection_set_has_palette_0=cast=(GtkColorSelection *)
-OS__gtk_color_selection_set_has_palette_1=
-
-OS__gtk_combo_disable_activate=
-OS__gtk_combo_disable_activate_0=cast=(GtkCombo *)
-
-OS__gtk_combo_new=
-
-OS__gtk_combo_set_case_sensitive=
-OS__gtk_combo_set_case_sensitive_0=cast=(GtkCombo *)
-OS__gtk_combo_set_case_sensitive_1=cast=(gboolean)
-
-OS__gtk_combo_set_popdown_strings=
-OS__gtk_combo_set_popdown_strings_0=cast=(GtkCombo *)
-OS__gtk_combo_set_popdown_strings_1=cast=(GList *)
-
-OS__gtk_container_add=
-OS__gtk_container_add_0=cast=(GtkContainer *)
-OS__gtk_container_add_1=cast=(GtkWidget *)
-
-OS__gtk_container_forall=
-OS__gtk_container_forall_0=cast=(GtkContainer *)
-OS__gtk_container_forall_1=cast=GtkCallback
-OS__gtk_container_forall_2=cast=gpointer
-
-OS__gtk_container_get_border_width=
-OS__gtk_container_get_border_width_0=cast=(GtkContainer *)
-
-OS__gtk_container_get_children=
-OS__gtk_container_get_children_0=cast=(GtkContainer *)
-
-OS__gtk_container_remove=
-OS__gtk_container_remove_0=cast=(GtkContainer *)
-OS__gtk_container_remove_1=cast=(GtkWidget *)
-
-OS__gtk_container_resize_children=
-OS__gtk_container_resize_children_0=cast=(GtkContainer *)
-
-OS__gtk_container_set_border_width=
-OS__gtk_container_set_border_width_0=cast=(GtkContainer *)
-OS__gtk_container_set_border_width_1=cast=(guint)
-
-OS__gtk_dialog_add_button=
-OS__gtk_dialog_add_button_0=cast=(GtkDialog *)
-OS__gtk_dialog_add_button_1=cast=(const gchar *)
-OS__gtk_dialog_add_button_2=cast=(gint)
-
-OS__gtk_dialog_run=
-OS__gtk_dialog_run_0=cast=(GtkDialog *)
-
-OS__gtk_drag_begin=
-OS__gtk_drag_begin_0=cast=(GtkWidget *)
-OS__gtk_drag_begin_1=cast=(GtkTargetList *)
-OS__gtk_drag_begin_2=cast=(GdkDragAction)
-OS__gtk_drag_begin_3=cast=(gint)
-OS__gtk_drag_begin_4=cast=(GdkEvent *)
-
-OS__gtk_drag_check_threshold=
-OS__gtk_drag_check_threshold_0=cast=(GtkWidget *)
-OS__gtk_drag_check_threshold_1=cast=(gint)
-OS__gtk_drag_check_threshold_2=cast=(gint)
-OS__gtk_drag_check_threshold_3=cast=(gint)
-OS__gtk_drag_check_threshold_4=cast=(gint)
-
-OS__gtk_drag_dest_find_target=
-OS__gtk_drag_dest_find_target_0=cast=(GtkWidget *)
-OS__gtk_drag_dest_find_target_1=cast=(GdkDragContext *)
-OS__gtk_drag_dest_find_target_2=cast=(GtkTargetList *)
-
-OS__gtk_drag_dest_set=
-OS__gtk_drag_dest_set_0=cast=(GtkWidget *)
-OS__gtk_drag_dest_set_1=cast=(GtkDestDefaults)
-OS__gtk_drag_dest_set_2=cast=(const GtkTargetEntry *)
-OS__gtk_drag_dest_set_3=cast=(gint)
-OS__gtk_drag_dest_set_4=cast=(GdkDragAction)
-
-OS__gtk_drag_dest_unset=
-OS__gtk_drag_dest_unset_0=cast=(GtkWidget *)
-
-OS__gtk_drag_finish=
-OS__gtk_drag_finish_0=cast=(GdkDragContext *)
-OS__gtk_drag_finish_1=cast=(gboolean)
-OS__gtk_drag_finish_2=cast=(gboolean)
-OS__gtk_drag_finish_3=cast=(guint32)
-
-OS__gtk_drag_get_data=
-OS__gtk_drag_get_data_0=cast=(GtkWidget *)
-OS__gtk_drag_get_data_1=cast=(GdkDragContext *)
-OS__gtk_drag_get_data_2=cast=(GdkAtom)
-OS__gtk_drag_get_data_3=cast=(guint32)
-
-OS__gtk_drag_set_icon_pixbuf=
-OS__gtk_drag_set_icon_pixbuf_0=cast=(GdkDragContext *)
-OS__gtk_drag_set_icon_pixbuf_1=cast=(GdkPixbuf *)
-OS__gtk_drag_set_icon_pixbuf_2=
-OS__gtk_drag_set_icon_pixbuf_3=
-
-OS__gtk_drawing_area_new=
-
-OS__gtk_editable_copy_clipboard=
-OS__gtk_editable_copy_clipboard_0=cast=(GtkEditable *)
-
-OS__gtk_editable_cut_clipboard=
-OS__gtk_editable_cut_clipboard_0=cast=(GtkEditable *)
-
-OS__gtk_editable_delete_selection=
-OS__gtk_editable_delete_selection_0=cast=(GtkEditable *)
-
-OS__gtk_editable_delete_text=
-OS__gtk_editable_delete_text_0=cast=(GtkEditable *)
-OS__gtk_editable_delete_text_1=cast=(gint)
-OS__gtk_editable_delete_text_2=cast=(gint)
-
-OS__gtk_editable_get_chars=
-OS__gtk_editable_get_chars_0=cast=(GtkEditable *)
-OS__gtk_editable_get_chars_1=cast=(gint)
-OS__gtk_editable_get_chars_2=cast=(gint)
-
-OS__gtk_editable_get_editable=
-OS__gtk_editable_get_editable_0=cast=(GtkEditable *)
-
-OS__gtk_editable_get_position=
-OS__gtk_editable_get_position_0=cast=(GtkEditable *)
-
-OS__gtk_editable_get_selection_bounds=
-OS__gtk_editable_get_selection_bounds_0=cast=(GtkEditable *)
-OS__gtk_editable_get_selection_bounds_1=cast=(gint *)
-OS__gtk_editable_get_selection_bounds_2=cast=(gint *)
-
-OS__gtk_editable_insert_text=
-OS__gtk_editable_insert_text_0=cast=(GtkEditable *)
-OS__gtk_editable_insert_text_1=cast=(gchar *)
-OS__gtk_editable_insert_text_2=cast=(gint)
-OS__gtk_editable_insert_text_3=cast=(gint *)
-
-OS__gtk_editable_paste_clipboard=
-OS__gtk_editable_paste_clipboard_0=cast=(GtkEditable *)
-
-OS__gtk_editable_select_region=
-OS__gtk_editable_select_region_0=cast=(GtkEditable *)
-OS__gtk_editable_select_region_1=cast=(gint)
-OS__gtk_editable_select_region_2=cast=(gint)
-
-OS__gtk_editable_set_editable=
-OS__gtk_editable_set_editable_0=cast=(GtkEditable *)
-OS__gtk_editable_set_editable_1=cast=(gboolean)
-
-OS__gtk_editable_set_position=
-OS__gtk_editable_set_position_0=cast=(GtkEditable *)
-OS__gtk_editable_set_position_1=cast=(gint)
-
-OS__gtk_entry_get_invisible_char=
-OS__gtk_entry_get_invisible_char_0=cast=(GtkEntry *)
-
-OS__gtk_entry_get_layout=
-OS__gtk_entry_get_layout_0=cast=(GtkEntry *)
-
-OS__gtk_entry_get_layout_offsets=
-OS__gtk_entry_get_layout_offsets_0=cast=(GtkEntry *)
-OS__gtk_entry_get_layout_offsets_1=
-OS__gtk_entry_get_layout_offsets_2=
-
-OS__gtk_entry_get_max_length=
-OS__gtk_entry_get_max_length_0=cast=(GtkEntry *)
-
-OS__gtk_entry_get_text=
-OS__gtk_entry_get_text_0=cast=(GtkEntry *)
-
-OS__gtk_entry_get_visibility=
-OS__gtk_entry_get_visibility_0=cast=(GtkEntry *)
-
-OS__gtk_entry_new=
-
-OS__gtk_entry_set_activates_default=
-OS__gtk_entry_set_activates_default_0=cast=(GtkEntry *)
-OS__gtk_entry_set_activates_default_1=cast=(gboolean)
-
-OS__gtk_entry_set_alignment=flags=dynamic
-OS__gtk_entry_set_alignment_0=cast=(GtkEntry *)
-OS__gtk_entry_set_alignment_1=cast=(gfloat)
-
-OS__gtk_entry_set_has_frame=
-OS__gtk_entry_set_has_frame_0=cast=(GtkEntry *)
-OS__gtk_entry_set_has_frame_1=cast=(gboolean)
-
-OS__gtk_entry_set_invisible_char=
-OS__gtk_entry_set_invisible_char_0=cast=(GtkEntry *)
-OS__gtk_entry_set_invisible_char_1=cast=(gint)
-
-OS__gtk_entry_set_max_length=
-OS__gtk_entry_set_max_length_0=cast=(GtkEntry *)
-OS__gtk_entry_set_max_length_1=cast=(gint)
-
-OS__gtk_entry_set_text=
-OS__gtk_entry_set_text_0=cast=(GtkEntry *)
-OS__gtk_entry_set_text_1=cast=(const gchar *)
-
-OS__gtk_entry_set_visibility=
-OS__gtk_entry_set_visibility_0=cast=(GtkEntry *)
-OS__gtk_entry_set_visibility_1=cast=(gboolean)
-
-OS__gtk_entry_text_index_to_layout_index=flags=dynamic
-OS__gtk_entry_text_index_to_layout_index_0=
-OS__gtk_entry_text_index_to_layout_index_1=
-
-OS__gtk_events_pending=
-
-OS__gtk_expander_get_expanded=flags=dynamic
-OS__gtk_expander_get_expanded_0=
-
-OS__gtk_expander_get_label_widget=flags=dynamic
-OS__gtk_expander_get_label_widget_0=
-
-OS__gtk_expander_new=flags=dynamic
-OS__gtk_expander_new_0=cast=const gchar *
-
-OS__gtk_expander_set_expanded=flags=dynamic
-OS__gtk_expander_set_expanded_0=
-OS__gtk_expander_set_expanded_1=
-
-OS__gtk_expander_set_label=flags=dynamic
-OS__gtk_expander_set_label_0=
-OS__gtk_expander_set_label_1=cast=const gchar *
-
-OS__gtk_expander_set_label_widget=flags=dynamic
-OS__gtk_expander_set_label_widget_0=
-OS__gtk_expander_set_label_widget_1=
-
-OS__gtk_file_chooser_add_filter=flags=dynamic
-OS__gtk_file_chooser_add_filter_0=
-OS__gtk_file_chooser_add_filter_1=
-
-OS__gtk_file_chooser_dialog_new=flags=no_gen
-OS__gtk_file_chooser_dialog_new_0=
-OS__gtk_file_chooser_dialog_new_1=
-OS__gtk_file_chooser_dialog_new_2=
-OS__gtk_file_chooser_dialog_new_3=
-OS__gtk_file_chooser_dialog_new_4=
-OS__gtk_file_chooser_dialog_new_5=
-OS__gtk_file_chooser_dialog_new_6=
-OS__gtk_file_chooser_dialog_new_7=
-
-OS__gtk_file_chooser_get_current_folder=flags=dynamic
-OS__gtk_file_chooser_get_current_folder_0=
-
-OS__gtk_file_chooser_get_filename=flags=dynamic
-OS__gtk_file_chooser_get_filename_0=
-
-OS__gtk_file_chooser_get_filenames=flags=dynamic
-OS__gtk_file_chooser_get_filenames_0=
-
-OS__gtk_file_chooser_set_current_folder=flags=dynamic
-OS__gtk_file_chooser_set_current_folder_0=
-OS__gtk_file_chooser_set_current_folder_1=
-
-OS__gtk_file_chooser_set_current_name=flags=dynamic
-OS__gtk_file_chooser_set_current_name_0=
-OS__gtk_file_chooser_set_current_name_1=
-
-OS__gtk_file_chooser_set_extra_widget=flags=dynamic
-OS__gtk_file_chooser_set_extra_widget_0=
-OS__gtk_file_chooser_set_extra_widget_1=
-
-OS__gtk_file_chooser_set_filename=flags=dynamic
-OS__gtk_file_chooser_set_filename_0=
-OS__gtk_file_chooser_set_filename_1=
-
-OS__gtk_file_chooser_set_select_multiple=flags=dynamic
-OS__gtk_file_chooser_set_select_multiple_0=
-OS__gtk_file_chooser_set_select_multiple_1=
-
-OS__gtk_file_filter_add_pattern=flags=dynamic
-OS__gtk_file_filter_add_pattern_0=
-OS__gtk_file_filter_add_pattern_1=
-
-OS__gtk_file_filter_new=flags=dynamic
-
-OS__gtk_file_filter_set_name=flags=dynamic
-OS__gtk_file_filter_set_name_0=
-OS__gtk_file_filter_set_name_1=
-
-OS__gtk_file_selection_get_filename=
-OS__gtk_file_selection_get_filename_0=cast=(GtkFileSelection *)
-
-OS__gtk_file_selection_get_selections=
-OS__gtk_file_selection_get_selections_0=cast=(GtkFileSelection *)
-
-OS__gtk_file_selection_hide_fileop_buttons=
-OS__gtk_file_selection_hide_fileop_buttons_0=cast=(GtkFileSelection *)
-
-OS__gtk_file_selection_new=
-OS__gtk_file_selection_new_0=cast=(const gchar *)
-
-OS__gtk_file_selection_set_filename=
-OS__gtk_file_selection_set_filename_0=cast=(GtkFileSelection *)
-OS__gtk_file_selection_set_filename_1=cast=(const gchar *)
-
-OS__gtk_file_selection_set_select_multiple=
-OS__gtk_file_selection_set_select_multiple_0=cast=(GtkFileSelection *)
-OS__gtk_file_selection_set_select_multiple_1=cast=(gboolean)
-
-OS__gtk_fixed_move=
-OS__gtk_fixed_move_0=cast=(GtkFixed *)
-OS__gtk_fixed_move_1=cast=(GtkWidget *)
-OS__gtk_fixed_move_2=cast=(gint)
-OS__gtk_fixed_move_3=cast=(gint)
-
-OS__gtk_fixed_new=
-
-OS__gtk_fixed_set_has_window=
-OS__gtk_fixed_set_has_window_0=cast=(GtkFixed *)
-OS__gtk_fixed_set_has_window_1=cast=(gboolean)
-
-OS__gtk_font_selection_dialog_get_font_name=
-OS__gtk_font_selection_dialog_get_font_name_0=cast=(GtkFontSelectionDialog *)
-
-OS__gtk_font_selection_dialog_new=
-OS__gtk_font_selection_dialog_new_0=cast=(const gchar *)
-
-OS__gtk_font_selection_dialog_set_font_name=
-OS__gtk_font_selection_dialog_set_font_name_0=cast=(GtkFontSelectionDialog *)
-OS__gtk_font_selection_dialog_set_font_name_1=cast=(const gchar *)
-
-OS__gtk_frame_get_label_widget=
-OS__gtk_frame_get_label_widget_0=cast=(GtkFrame *)
-
-OS__gtk_frame_new=
-OS__gtk_frame_new_0=cast=(const gchar *)
-
-OS__gtk_frame_set_label=
-OS__gtk_frame_set_label_0=cast=(GtkFrame *)
-OS__gtk_frame_set_label_1=cast=(const gchar *)
-
-OS__gtk_frame_set_label_widget=
-OS__gtk_frame_set_label_widget_0=cast=(GtkFrame *)
-OS__gtk_frame_set_label_widget_1=cast=(GtkWidget *)
-
-OS__gtk_frame_set_shadow_type=
-OS__gtk_frame_set_shadow_type_0=cast=(GtkFrame *)
-OS__gtk_frame_set_shadow_type_1=cast=(GtkShadowType)
-
-OS__gtk_get_current_event=
-
-OS__gtk_get_current_event_state=
-OS__gtk_get_current_event_state_0=cast=GdkModifierType*
-
-OS__gtk_get_current_event_time=
-
-OS__gtk_get_default_language=
-
-OS__gtk_get_event_widget=
-OS__gtk_get_event_widget_0=cast=GdkEvent *
-
-OS__gtk_grab_add=
-OS__gtk_grab_add_0=cast=GtkWidget *
-
-OS__gtk_grab_get_current=
-
-OS__gtk_grab_remove=
-OS__gtk_grab_remove_0=cast=(GtkWidget *)
-
-OS__gtk_hbox_new=
-OS__gtk_hbox_new_0=cast=(gboolean)
-OS__gtk_hbox_new_1=cast=(gint)
-
-OS__gtk_hscale_new=
-OS__gtk_hscale_new_0=cast=(GtkAdjustment *)
-
-OS__gtk_hscrollbar_new=
-OS__gtk_hscrollbar_new_0=cast=(GtkAdjustment *)
-
-OS__gtk_hseparator_new=
-
-OS__gtk_icon_factory_lookup_default=
-OS__gtk_icon_factory_lookup_default_0=cast=(const gchar *)
-
-OS__gtk_icon_set_render_icon=
-OS__gtk_icon_set_render_icon_0=cast=(GtkIconSet *)
-OS__gtk_icon_set_render_icon_1=cast=(GtkStyle *)
-OS__gtk_icon_set_render_icon_2=cast=GtkTextDirection)
-OS__gtk_icon_set_render_icon_3=cast=(GtkStateType)
-OS__gtk_icon_set_render_icon_4=cast=(GtkIconSize)
-OS__gtk_icon_set_render_icon_5=cast=(GtkWidget *)
-OS__gtk_icon_set_render_icon_6=cast=(const char *)
-
-OS__gtk_icon_source_free=
-OS__gtk_icon_source_free_0=cast=GtkIconSource *
-
-OS__gtk_icon_source_new=
-
-OS__gtk_icon_source_set_pixbuf=
-OS__gtk_icon_source_set_pixbuf_0=cast=GtkIconSource *
-OS__gtk_icon_source_set_pixbuf_1=cast=GdkPixbuf *
-
-OS__gtk_im_context_filter_keypress=
-OS__gtk_im_context_filter_keypress_0=cast=(GtkIMContext *)
-OS__gtk_im_context_filter_keypress_1=cast=(GdkEventKey *)
-
-OS__gtk_im_context_focus_in=
-OS__gtk_im_context_focus_in_0=cast=(GtkIMContext *)
-
-OS__gtk_im_context_focus_out=
-OS__gtk_im_context_focus_out_0=cast=(GtkIMContext *)
-
-OS__gtk_im_context_get_preedit_string=
-OS__gtk_im_context_get_preedit_string_0=cast=(GtkIMContext *)
-OS__gtk_im_context_get_preedit_string_1=cast=(gchar **)
-OS__gtk_im_context_get_preedit_string_2=cast=(PangoAttrList **)
-OS__gtk_im_context_get_preedit_string_3=cast=(gint *)
-
-OS__gtk_im_context_get_type=
-
-OS__gtk_im_context_reset=
-OS__gtk_im_context_reset_0=cast=(GtkIMContext *)
-
-OS__gtk_im_context_set_client_window=
-OS__gtk_im_context_set_client_window_0=cast=(GtkIMContext *)
-OS__gtk_im_context_set_client_window_1=cast=(GdkWindow *)
-
-OS__gtk_im_context_set_cursor_location=
-OS__gtk_im_context_set_cursor_location_0=cast=(GtkIMContext *)
-OS__gtk_im_context_set_cursor_location_1=cast=(GdkRectangle *),flags=no_out
-
-OS__gtk_im_multicontext_append_menuitems=
-OS__gtk_im_multicontext_append_menuitems_0=cast=(GtkIMMulticontext *)
-OS__gtk_im_multicontext_append_menuitems_1=cast=(GtkMenuShell *)
-
-OS__gtk_im_multicontext_new=
-
-OS__gtk_image_menu_item_new_with_label=
-OS__gtk_image_menu_item_new_with_label_0=cast=(const gchar *)
-
-OS__gtk_image_menu_item_set_image=
-OS__gtk_image_menu_item_set_image_0=cast=(GtkImageMenuItem *)
-OS__gtk_image_menu_item_set_image_1=cast=(GtkWidget *)
-
-OS__gtk_image_new=
-
-OS__gtk_image_new_from_pixbuf=
-OS__gtk_image_new_from_pixbuf_0=cast=GdkPixbuf *
-
-OS__gtk_image_new_from_pixmap=
-OS__gtk_image_new_from_pixmap_0=cast=(GdkPixmap *)
-OS__gtk_image_new_from_pixmap_1=cast=(GdkBitmap *)
-
-OS__gtk_image_set_from_pixbuf=
-OS__gtk_image_set_from_pixbuf_0=cast=(GtkImage *)
-OS__gtk_image_set_from_pixbuf_1=cast=(GdkPixbuf *)
-
-OS__gtk_image_set_from_pixmap=
-OS__gtk_image_set_from_pixmap_0=cast=(GtkImage *)
-OS__gtk_image_set_from_pixmap_1=cast=(GdkBitmap *)
-OS__gtk_image_set_from_pixmap_2=cast=(GdkBitmap *)
-
-OS__gtk_init_check=
-OS__gtk_init_check_0=cast=(int *)
-OS__gtk_init_check_1=cast=(char ***)
-
-OS__gtk_label_get_mnemonic_keyval=
-OS__gtk_label_get_mnemonic_keyval_0=cast=GtkLabel *
-
-OS__gtk_label_new=
-OS__gtk_label_new_0=cast=(const gchar *)
-
-OS__gtk_label_new_with_mnemonic=
-OS__gtk_label_new_with_mnemonic_0=cast=(const gchar *)
-
-OS__gtk_label_set_attributes=
-OS__gtk_label_set_attributes_0=cast=(GtkLabel *)
-OS__gtk_label_set_attributes_1=cast=(PangoAttrList *)
-
-OS__gtk_label_set_justify=
-OS__gtk_label_set_justify_0=cast=(GtkLabel *)
-OS__gtk_label_set_justify_1=cast=(GtkJustification)
-
-OS__gtk_label_set_line_wrap=
-OS__gtk_label_set_line_wrap_0=cast=(GtkLabel *)
-OS__gtk_label_set_line_wrap_1=cast=(gboolean)
-
-OS__1gtk_1label_1set_1text__II=
-OS__1gtk_1label_1set_1text__II_0=cast=(GtkLabel *)
-OS__1gtk_1label_1set_1text__II_1=cast=(const gchar *)
-
-OS__1gtk_1label_1set_1text__I_3B=
-OS__1gtk_1label_1set_1text__I_3B_0=cast=(GtkLabel *)
-OS__1gtk_1label_1set_1text__I_3B_1=cast=(const gchar *)
-
-OS__gtk_label_set_text_with_mnemonic=
-OS__gtk_label_set_text_with_mnemonic_0=cast=(GtkLabel *)
-OS__gtk_label_set_text_with_mnemonic_1=cast=(const gchar *)
-
-OS__gtk_list_append_items=
-OS__gtk_list_append_items_0=cast=(GtkList *)
-OS__gtk_list_append_items_1=cast=(GList *)
-
-OS__gtk_list_clear_items=
-OS__gtk_list_clear_items_0=cast=(GtkList *)
-OS__gtk_list_clear_items_1=
-OS__gtk_list_clear_items_2=
-
-OS__gtk_list_insert_items=
-OS__gtk_list_insert_items_0=cast=(GtkList *)
-OS__gtk_list_insert_items_1=cast=(GList *)
-OS__gtk_list_insert_items_2=
-
-OS__gtk_list_item_new_with_label=
-OS__gtk_list_item_new_with_label_0=cast=(const gchar *)
-
-OS__gtk_list_remove_items=
-OS__gtk_list_remove_items_0=cast=(GtkList *)
-OS__gtk_list_remove_items_1=cast=(GList *)
-
-OS__gtk_list_select_item=
-OS__gtk_list_select_item_0=cast=(GtkList *)
-OS__gtk_list_select_item_1=
-
-OS__gtk_list_store_append=
-OS__gtk_list_store_append_0=cast=(GtkListStore *)
-OS__gtk_list_store_append_1=cast=(GtkTreeIter *)
-
-OS__gtk_list_store_clear=
-OS__gtk_list_store_clear_0=cast=(GtkListStore *)
-
-OS__gtk_list_store_insert=
-OS__gtk_list_store_insert_0=cast=(GtkListStore *)
-OS__gtk_list_store_insert_1=cast=(GtkTreeIter *)
-OS__gtk_list_store_insert_2=cast=(gint)
-
-OS__gtk_list_store_newv=
-OS__gtk_list_store_newv_0=cast=(gint)
-OS__gtk_list_store_newv_1=cast=(GType *)
-
-OS__gtk_list_store_remove=
-OS__gtk_list_store_remove_0=cast=(GtkListStore *)
-OS__gtk_list_store_remove_1=cast=(GtkTreeIter *)
-
-OS__1gtk_1list_1store_1set__IIIII=
-OS__1gtk_1list_1store_1set__IIIII_0=cast=(GtkListStore *)
-OS__1gtk_1list_1store_1set__IIIII_1=cast=(GtkTreeIter *)
-OS__1gtk_1list_1store_1set__IIIII_2=
-OS__1gtk_1list_1store_1set__IIIII_3=
-OS__1gtk_1list_1store_1set__IIIII_4=
-
-OS__1gtk_1list_1store_1set__IIIJI=
-OS__1gtk_1list_1store_1set__IIIJI_0=cast=(GtkListStore *)
-OS__1gtk_1list_1store_1set__IIIJI_1=cast=(GtkTreeIter *)
-OS__1gtk_1list_1store_1set__IIIJI_2=
-OS__1gtk_1list_1store_1set__IIIJI_3=
-OS__1gtk_1list_1store_1set__IIIJI_4=
-
-OS__1gtk_1list_1store_1set__IIILorg_eclipse_swt_internal_gtk_GdkColor_2I=
-OS__1gtk_1list_1store_1set__IIILorg_eclipse_swt_internal_gtk_GdkColor_2I_0=cast=(GtkListStore *)
-OS__1gtk_1list_1store_1set__IIILorg_eclipse_swt_internal_gtk_GdkColor_2I_1=cast=(GtkTreeIter *)
-OS__1gtk_1list_1store_1set__IIILorg_eclipse_swt_internal_gtk_GdkColor_2I_2=
-OS__1gtk_1list_1store_1set__IIILorg_eclipse_swt_internal_gtk_GdkColor_2I_3=flags=no_out
-OS__1gtk_1list_1store_1set__IIILorg_eclipse_swt_internal_gtk_GdkColor_2I_4=
-
-OS__1gtk_1list_1store_1set__IIIZI=
-OS__1gtk_1list_1store_1set__IIIZI_0=cast=(GtkListStore *)
-OS__1gtk_1list_1store_1set__IIIZI_1=cast=(GtkTreeIter *)
-OS__1gtk_1list_1store_1set__IIIZI_2=
-OS__1gtk_1list_1store_1set__IIIZI_3=
-OS__1gtk_1list_1store_1set__IIIZI_4=
-
-OS__1gtk_1list_1store_1set__III_3BI=
-OS__1gtk_1list_1store_1set__III_3BI_0=cast=(GtkListStore *)
-OS__1gtk_1list_1store_1set__III_3BI_1=cast=(GtkTreeIter *)
-OS__1gtk_1list_1store_1set__III_3BI_2=
-OS__1gtk_1list_1store_1set__III_3BI_3=
-OS__1gtk_1list_1store_1set__III_3BI_4=
-
-OS__gtk_list_unselect_all=
-OS__gtk_list_unselect_all_0=cast=(GtkList *)
-
-OS__gtk_list_unselect_item=
-OS__gtk_list_unselect_item_0=cast=(GtkList *)
-OS__gtk_list_unselect_item_1=
-
-OS__gtk_main=
-
-OS__gtk_main_do_event=
-OS__gtk_main_do_event_0=cast=(GdkEvent *)
-
-OS__gtk_main_iteration=
-
-OS__gtk_major_version=flags=const
-
-OS__gtk_menu_bar_new=
-
-OS__gtk_menu_item_remove_submenu=
-OS__gtk_menu_item_remove_submenu_0=cast=(GtkMenuItem *)
-
-OS__gtk_menu_item_set_submenu=
-OS__gtk_menu_item_set_submenu_0=cast=(GtkMenuItem *)
-OS__gtk_menu_item_set_submenu_1=cast=(GtkWidget *)
-
-OS__gtk_menu_new=
-
-OS__gtk_menu_popdown=
-OS__gtk_menu_popdown_0=cast=(GtkMenu *)
-
-OS__gtk_menu_popup=
-OS__gtk_menu_popup_0=cast=(GtkMenu *)
-OS__gtk_menu_popup_1=cast=(GtkWidget *)
-OS__gtk_menu_popup_2=cast=(GtkWidget *)
-OS__gtk_menu_popup_3=cast=(GtkMenuPositionFunc)
-OS__gtk_menu_popup_4=cast=(gpointer)
-OS__gtk_menu_popup_5=cast=(guint)
-OS__gtk_menu_popup_6=cast=(guint32)
-
-OS__gtk_menu_shell_deactivate=
-OS__gtk_menu_shell_deactivate_0=cast=(GtkMenuShell *)
-
-OS__gtk_menu_shell_insert=
-OS__gtk_menu_shell_insert_0=cast=(GtkMenuShell *)
-OS__gtk_menu_shell_insert_1=cast=(GtkWidget *)
-OS__gtk_menu_shell_insert_2=cast=(gint)
-
-OS__gtk_menu_shell_select_item=
-OS__gtk_menu_shell_select_item_0=cast=(GtkMenuShell *)
-OS__gtk_menu_shell_select_item_1=cast=(GtkWidget *)
-
-OS__gtk_message_dialog_new=
-OS__gtk_message_dialog_new_0=cast=(GtkWindow *)
-OS__gtk_message_dialog_new_1=cast=(GtkDialogFlags)
-OS__gtk_message_dialog_new_2=cast=(GtkMessageType)
-OS__gtk_message_dialog_new_3=cast=(GtkButtonsType)
-OS__gtk_message_dialog_new_4=cast=(const gchar *)
-
-OS__gtk_micro_version=flags=const
-
-OS__gtk_minor_version=flags=const
-
-OS__gtk_misc_set_alignment=
-OS__gtk_misc_set_alignment_0=cast=(GtkMisc *)
-OS__gtk_misc_set_alignment_1=cast=(gfloat)
-OS__gtk_misc_set_alignment_2=cast=(gfloat)
-
-OS__gtk_notebook_get_current_page=
-OS__gtk_notebook_get_current_page_0=cast=(GtkNotebook *)
-
-OS__gtk_notebook_get_scrollable=
-OS__gtk_notebook_get_scrollable_0=cast=(GtkNotebook *)
-
-OS__gtk_notebook_insert_page=
-OS__gtk_notebook_insert_page_0=cast=(GtkNotebook *)
-OS__gtk_notebook_insert_page_1=cast=(GtkWidget *)
-OS__gtk_notebook_insert_page_2=cast=(GtkWidget *)
-OS__gtk_notebook_insert_page_3=cast=(gint)
-
-OS__gtk_notebook_new=
-
-OS__gtk_notebook_remove_page=
-OS__gtk_notebook_remove_page_0=cast=(GtkNotebook *)
-OS__gtk_notebook_remove_page_1=cast=(gint)
-
-OS__gtk_notebook_set_current_page=
-OS__gtk_notebook_set_current_page_0=cast=(GtkNotebook *)
-OS__gtk_notebook_set_current_page_1=cast=(gint)
-
-OS__gtk_notebook_set_scrollable=
-OS__gtk_notebook_set_scrollable_0=cast=(GtkNotebook *)
-OS__gtk_notebook_set_scrollable_1=cast=(gboolean)
-
-OS__gtk_notebook_set_show_tabs=
-OS__gtk_notebook_set_show_tabs_0=cast=(GtkNotebook *)
-OS__gtk_notebook_set_show_tabs_1=cast=(gboolean)
-
-OS__gtk_notebook_set_tab_pos=
-OS__gtk_notebook_set_tab_pos_0=cast=(GtkNotebook *)
-OS__gtk_notebook_set_tab_pos_1=cast=(GtkPositionType)
-
-OS__gtk_object_sink=
-OS__gtk_object_sink_0=cast=(GtkObject *)
-
-OS__gtk_paint_arrow=
-OS__gtk_paint_arrow_0=cast=(GtkStyle *)
-OS__gtk_paint_arrow_1=cast=(GdkWindow *)
-OS__gtk_paint_arrow_2=
-OS__gtk_paint_arrow_3=
-OS__gtk_paint_arrow_4=
-OS__gtk_paint_arrow_5=cast=(GtkWidget *)
-OS__gtk_paint_arrow_6=cast=(const gchar *)
-OS__gtk_paint_arrow_7=
-OS__gtk_paint_arrow_8=
-OS__gtk_paint_arrow_9=
-OS__gtk_paint_arrow_10=
-OS__gtk_paint_arrow_11=
-OS__gtk_paint_arrow_12=
-
-OS__gtk_paint_box=
-OS__gtk_paint_box_0=cast=(GtkStyle *)
-OS__gtk_paint_box_1=cast=(GdkWindow *)
-OS__gtk_paint_box_2=
-OS__gtk_paint_box_3=
-OS__gtk_paint_box_4=
-OS__gtk_paint_box_5=cast=(GtkWidget *)
-OS__gtk_paint_box_6=cast=(const gchar *)
-OS__gtk_paint_box_7=
-OS__gtk_paint_box_8=
-OS__gtk_paint_box_9=
-OS__gtk_paint_box_10=
-
-OS__gtk_paint_box_gap=
-OS__gtk_paint_box_gap_0=cast=(GtkStyle *)
-OS__gtk_paint_box_gap_1=cast=(GdkWindow *)
-OS__gtk_paint_box_gap_2=
-OS__gtk_paint_box_gap_3=
-OS__gtk_paint_box_gap_4=
-OS__gtk_paint_box_gap_5=cast=(GtkWidget *)
-OS__gtk_paint_box_gap_6=cast=(gchar *)
-OS__gtk_paint_box_gap_7=
-OS__gtk_paint_box_gap_8=
-OS__gtk_paint_box_gap_9=
-OS__gtk_paint_box_gap_10=
-OS__gtk_paint_box_gap_11=
-OS__gtk_paint_box_gap_12=
-OS__gtk_paint_box_gap_13=
-
-OS__gtk_paint_check=
-OS__gtk_paint_check_0=cast=(GtkStyle *)
-OS__gtk_paint_check_1=cast=(GdkWindow *)
-OS__gtk_paint_check_2=
-OS__gtk_paint_check_3=
-OS__gtk_paint_check_4=
-OS__gtk_paint_check_5=cast=(GtkWidget *)
-OS__gtk_paint_check_6=cast=(const gchar *)
-OS__gtk_paint_check_7=
-OS__gtk_paint_check_8=
-OS__gtk_paint_check_9=
-OS__gtk_paint_check_10=
-
-OS__gtk_paint_expander=
-OS__gtk_paint_expander_0=cast=(GtkStyle *)
-OS__gtk_paint_expander_1=cast=(GdkWindow *)
-OS__gtk_paint_expander_2=
-OS__gtk_paint_expander_3=
-OS__gtk_paint_expander_4=cast=(GtkWidget *)
-OS__gtk_paint_expander_5=cast=(const gchar *)
-OS__gtk_paint_expander_6=
-OS__gtk_paint_expander_7=
-OS__gtk_paint_expander_8=
-
-OS__gtk_paint_extension=
-OS__gtk_paint_extension_0=cast=(GtkStyle *)
-OS__gtk_paint_extension_1=cast=(GdkWindow *)
-OS__gtk_paint_extension_2=
-OS__gtk_paint_extension_3=
-OS__gtk_paint_extension_4=
-OS__gtk_paint_extension_5=cast=(GtkWidget *)
-OS__gtk_paint_extension_6=cast=(gchar *)
-OS__gtk_paint_extension_7=
-OS__gtk_paint_extension_8=
-OS__gtk_paint_extension_9=
-OS__gtk_paint_extension_10=
-OS__gtk_paint_extension_11=
-
-OS__gtk_paint_flat_box=
-OS__gtk_paint_flat_box_0=cast=(GtkStyle *)
-OS__gtk_paint_flat_box_1=cast=(GdkWindow *)
-OS__gtk_paint_flat_box_2=
-OS__gtk_paint_flat_box_3=
-OS__gtk_paint_flat_box_4=
-OS__gtk_paint_flat_box_5=cast=(GtkWidget *)
-OS__gtk_paint_flat_box_6=cast=(const gchar *)
-OS__gtk_paint_flat_box_7=
-OS__gtk_paint_flat_box_8=
-OS__gtk_paint_flat_box_9=
-OS__gtk_paint_flat_box_10=
-
-OS__gtk_paint_focus=
-OS__gtk_paint_focus_0=cast=(GtkStyle *)
-OS__gtk_paint_focus_1=cast=(GdkWindow *)
-OS__gtk_paint_focus_2=
-OS__gtk_paint_focus_3=flags=no_out
-OS__gtk_paint_focus_4=cast=(GtkWidget *)
-OS__gtk_paint_focus_5=cast=(const gchar *)
-OS__gtk_paint_focus_6=
-OS__gtk_paint_focus_7=
-OS__gtk_paint_focus_8=
-OS__gtk_paint_focus_9=
-
-OS__gtk_paint_handle=
-OS__gtk_paint_handle_0=cast=GtkStyle *
-OS__gtk_paint_handle_1=cast=GdkWindow *
-OS__gtk_paint_handle_2=
-OS__gtk_paint_handle_3=
-OS__gtk_paint_handle_4=flags=no_out
-OS__gtk_paint_handle_5=cast=(GtkWidget *)
-OS__gtk_paint_handle_6=cast=(const gchar *)
-OS__gtk_paint_handle_7=
-OS__gtk_paint_handle_8=
-OS__gtk_paint_handle_9=
-OS__gtk_paint_handle_10=
-OS__gtk_paint_handle_11=
-
-OS__gtk_paint_hline=
-OS__gtk_paint_hline_0=cast=(GtkStyle *)
-OS__gtk_paint_hline_1=cast=(GdkWindow *)
-OS__gtk_paint_hline_2=
-OS__gtk_paint_hline_3=
-OS__gtk_paint_hline_4=cast=(GtkWidget *)
-OS__gtk_paint_hline_5=cast=(const gchar *)
-OS__gtk_paint_hline_6=
-OS__gtk_paint_hline_7=
-OS__gtk_paint_hline_8=
-
-OS__gtk_paint_layout=
-OS__gtk_paint_layout_0=cast=(GtkStyle *)
-OS__gtk_paint_layout_1=cast=(GdkWindow *)
-OS__gtk_paint_layout_2=
-OS__gtk_paint_layout_3=
-OS__gtk_paint_layout_4=
-OS__gtk_paint_layout_5=cast=(GtkWidget *)
-OS__gtk_paint_layout_6=cast=(const gchar *)
-OS__gtk_paint_layout_7=
-OS__gtk_paint_layout_8=
-OS__gtk_paint_layout_9=cast=PangoLayout *
-
-OS__gtk_paint_option=
-OS__gtk_paint_option_0=cast=(GtkStyle *)
-OS__gtk_paint_option_1=cast=(GdkWindow *)
-OS__gtk_paint_option_2=
-OS__gtk_paint_option_3=
-OS__gtk_paint_option_4=
-OS__gtk_paint_option_5=cast=GtkWidget *
-OS__gtk_paint_option_6=cast=(const gchar *)
-OS__gtk_paint_option_7=
-OS__gtk_paint_option_8=
-OS__gtk_paint_option_9=
-OS__gtk_paint_option_10=
-
-OS__gtk_paint_shadow=
-OS__gtk_paint_shadow_0=cast=(GtkStyle *)
-OS__gtk_paint_shadow_1=cast=(GdkWindow *)
-OS__gtk_paint_shadow_2=
-OS__gtk_paint_shadow_3=
-OS__gtk_paint_shadow_4=
-OS__gtk_paint_shadow_5=cast=(GtkWidget *)
-OS__gtk_paint_shadow_6=cast=(gchar *)
-OS__gtk_paint_shadow_7=
-OS__gtk_paint_shadow_8=
-OS__gtk_paint_shadow_9=
-OS__gtk_paint_shadow_10=
-
-OS__gtk_paint_shadow_gap=
-OS__gtk_paint_shadow_gap_0=cast=(GtkStyle *)
-OS__gtk_paint_shadow_gap_1=cast=(GdkWindow *)
-OS__gtk_paint_shadow_gap_2=
-OS__gtk_paint_shadow_gap_3=
-OS__gtk_paint_shadow_gap_4=
-OS__gtk_paint_shadow_gap_5=cast=(GtkWidget *)
-OS__gtk_paint_shadow_gap_6=cast=(gchar *)
-OS__gtk_paint_shadow_gap_7=
-OS__gtk_paint_shadow_gap_8=
-OS__gtk_paint_shadow_gap_9=
-OS__gtk_paint_shadow_gap_10=
-OS__gtk_paint_shadow_gap_11=
-OS__gtk_paint_shadow_gap_12=
-OS__gtk_paint_shadow_gap_13=
-
-OS__gtk_paint_slider=
-OS__gtk_paint_slider_0=cast=(GtkStyle *)
-OS__gtk_paint_slider_1=cast=(GdkWindow *)
-OS__gtk_paint_slider_2=
-OS__gtk_paint_slider_3=
-OS__gtk_paint_slider_4=
-OS__gtk_paint_slider_5=cast=(GtkWidget *)
-OS__gtk_paint_slider_6=cast=(const gchar *)
-OS__gtk_paint_slider_7=
-OS__gtk_paint_slider_8=
-OS__gtk_paint_slider_9=
-OS__gtk_paint_slider_10=
-OS__gtk_paint_slider_11=
-
-OS__gtk_paint_tab=
-OS__gtk_paint_tab_0=cast=(GtkStyle *)
-OS__gtk_paint_tab_1=cast=(GdkWindow *)
-OS__gtk_paint_tab_2=
-OS__gtk_paint_tab_3=
-OS__gtk_paint_tab_4=
-OS__gtk_paint_tab_5=cast=(GtkWidget *)
-OS__gtk_paint_tab_6=cast=(const gchar *)
-OS__gtk_paint_tab_7=
-OS__gtk_paint_tab_8=
-OS__gtk_paint_tab_9=
-OS__gtk_paint_tab_10=
-
-OS__gtk_paint_vline=
-OS__gtk_paint_vline_0=cast=(GtkStyle *)
-OS__gtk_paint_vline_1=cast=(GdkWindow *)
-OS__gtk_paint_vline_2=
-OS__gtk_paint_vline_3=
-OS__gtk_paint_vline_4=cast=(GtkWidget *)
-OS__gtk_paint_vline_5=cast=(const gchar *)
-OS__gtk_paint_vline_6=
-OS__gtk_paint_vline_7=
-OS__gtk_paint_vline_8=
-
-OS__gtk_plug_get_id=
-OS__gtk_plug_get_id_0=cast=(GtkPlug *)
-
-OS__gtk_plug_new=
-OS__gtk_plug_new_0=
-
-OS__gtk_progress_bar_new=
-
-OS__gtk_progress_bar_pulse=
-OS__gtk_progress_bar_pulse_0=cast=(GtkProgressBar *)
-
-OS__gtk_progress_bar_set_fraction=
-OS__gtk_progress_bar_set_fraction_0=cast=(GtkProgressBar *)
-OS__gtk_progress_bar_set_fraction_1=cast=(gdouble)
-
-OS__gtk_progress_bar_set_orientation=
-OS__gtk_progress_bar_set_orientation_0=cast=(GtkProgressBar *)
-OS__gtk_progress_bar_set_orientation_1=cast=(GtkProgressBarOrientation)
-
-OS__gtk_radio_button_get_group=
-OS__gtk_radio_button_get_group_0=cast=(GtkRadioButton *)
-
-OS__gtk_radio_button_new=
-OS__gtk_radio_button_new_0=cast=(GSList *)
-
-OS__gtk_radio_menu_item_get_group=
-OS__gtk_radio_menu_item_get_group_0=cast=GtkRadioMenuItem *
-
-OS__gtk_radio_menu_item_new=
-OS__gtk_radio_menu_item_new_0=cast=(GSList *)
-
-OS__gtk_radio_menu_item_new_with_label=
-OS__gtk_radio_menu_item_new_with_label_0=cast=(GSList *)
-OS__gtk_radio_menu_item_new_with_label_1=cast=(const gchar *)
-
-OS__gtk_range_get_adjustment=
-OS__gtk_range_get_adjustment_0=cast=(GtkRange *)
-
-OS__gtk_range_set_increments=
-OS__gtk_range_set_increments_0=cast=(GtkRange *)
-OS__gtk_range_set_increments_1=
-OS__gtk_range_set_increments_2=
-
-OS__gtk_range_set_inverted=
-OS__gtk_range_set_inverted_0=cast=(GtkRange *)
-OS__gtk_range_set_inverted_1=
-
-OS__gtk_range_set_range=
-OS__gtk_range_set_range_0=cast=(GtkRange *)
-OS__gtk_range_set_range_1=
-OS__gtk_range_set_range_2=
-
-OS__gtk_range_set_value=
-OS__gtk_range_set_value_0=cast=(GtkRange *)
-OS__gtk_range_set_value_1=
-
-OS__gtk_rc_parse_string=
-OS__gtk_rc_parse_string_0=cast=(const gchar *)
-
-OS__gtk_rc_style_get_bg_pixmap_name=
-OS__gtk_rc_style_get_bg_pixmap_name_0=cast=(GtkRcStyle *)
-OS__gtk_rc_style_get_bg_pixmap_name_1=
-
-OS__gtk_rc_style_get_color_flags=
-OS__gtk_rc_style_get_color_flags_0=cast=(GtkRcStyle *)
-OS__gtk_rc_style_get_color_flags_1=
-
-OS__gtk_rc_style_set_bg=
-OS__gtk_rc_style_set_bg_0=cast=(GtkRcStyle *)
-OS__gtk_rc_style_set_bg_1=
-OS__gtk_rc_style_set_bg_2=flags=no_out
-
-OS__gtk_rc_style_set_bg_pixmap_name=
-OS__gtk_rc_style_set_bg_pixmap_name_0=cast=(GtkRcStyle *)
-OS__gtk_rc_style_set_bg_pixmap_name_1=
-OS__gtk_rc_style_set_bg_pixmap_name_2=cast=(char *)
-
-OS__gtk_rc_style_set_color_flags=
-OS__gtk_rc_style_set_color_flags_0=cast=(GtkRcStyle *)
-OS__gtk_rc_style_set_color_flags_1=
-OS__gtk_rc_style_set_color_flags_2=
-
-OS__gtk_scale_set_digits=
-OS__gtk_scale_set_digits_0=cast=(GtkScale *)
-OS__gtk_scale_set_digits_1=cast=(gint)
-
-OS__gtk_scale_set_draw_value=
-OS__gtk_scale_set_draw_value_0=cast=(GtkScale *)
-OS__gtk_scale_set_draw_value_1=cast=(gboolean)
-
-OS__gtk_scrolled_window_add_with_viewport=
-OS__gtk_scrolled_window_add_with_viewport_0=cast=GtkScrolledWindow *
-OS__gtk_scrolled_window_add_with_viewport_1=cast=GtkWidget *
-
-OS__gtk_scrolled_window_get_hadjustment=
-OS__gtk_scrolled_window_get_hadjustment_0=cast=(GtkScrolledWindow *)
-
-OS__gtk_scrolled_window_get_policy=
-OS__gtk_scrolled_window_get_policy_0=cast=(GtkScrolledWindow *)
-OS__gtk_scrolled_window_get_policy_1=cast=(GtkPolicyType *)
-OS__gtk_scrolled_window_get_policy_2=cast=(GtkPolicyType *)
-
-OS__gtk_scrolled_window_get_shadow_type=
-OS__gtk_scrolled_window_get_shadow_type_0=cast=(GtkScrolledWindow *)
-
-OS__gtk_scrolled_window_get_vadjustment=
-OS__gtk_scrolled_window_get_vadjustment_0=cast=(GtkScrolledWindow *)
-
-OS__gtk_scrolled_window_new=
-OS__gtk_scrolled_window_new_0=cast=(GtkAdjustment *)
-OS__gtk_scrolled_window_new_1=cast=(GtkAdjustment *)
-
-OS__gtk_scrolled_window_set_placement=
-OS__gtk_scrolled_window_set_placement_0=cast=(GtkScrolledWindow *)
-OS__gtk_scrolled_window_set_placement_1=cast=(GtkCornerType)
-
-OS__gtk_scrolled_window_set_policy=
-OS__gtk_scrolled_window_set_policy_0=cast=(GtkScrolledWindow *)
-OS__gtk_scrolled_window_set_policy_1=cast=(GtkPolicyType)
-OS__gtk_scrolled_window_set_policy_2=cast=(GtkPolicyType)
-
-OS__gtk_scrolled_window_set_shadow_type=
-OS__gtk_scrolled_window_set_shadow_type_0=cast=(GtkScrolledWindow *)
-OS__gtk_scrolled_window_set_shadow_type_1=cast=(GtkShadowType)
-
-OS__gtk_selection_data_free=
-OS__gtk_selection_data_free_0=cast=(GtkSelectionData *)
-
-OS__gtk_selection_data_set=
-OS__gtk_selection_data_set_0=cast=(GtkSelectionData *)
-OS__gtk_selection_data_set_1=cast=(GdkAtom)
-OS__gtk_selection_data_set_2=cast=(gint)
-OS__gtk_selection_data_set_3=cast=(const guchar *)
-OS__gtk_selection_data_set_4=cast=(gint)
-
-OS__gtk_separator_menu_item_new=
-
-OS__gtk_set_locale=
-
-OS__gtk_settings_get_default=
-
-OS__gtk_socket_get_id=
-OS__gtk_socket_get_id_0=cast=GtkSocket *
-
-OS__gtk_socket_new=
-
-OS__gtk_spin_button_get_adjustment=
-OS__gtk_spin_button_get_adjustment_0=cast=GtkSpinButton*
-
-OS__gtk_spin_button_get_digits=
-OS__gtk_spin_button_get_digits_0=cast=GtkSpinButton*
-
-OS__gtk_spin_button_new=
-OS__gtk_spin_button_new_0=cast=GtkAdjustment *
-OS__gtk_spin_button_new_1=
-OS__gtk_spin_button_new_2=
-
-OS__gtk_spin_button_set_digits=
-OS__gtk_spin_button_set_digits_0=cast=GtkSpinButton*
-OS__gtk_spin_button_set_digits_1=
-
-OS__gtk_spin_button_set_increments=
-OS__gtk_spin_button_set_increments_0=cast=GtkSpinButton*
-OS__gtk_spin_button_set_increments_1=
-OS__gtk_spin_button_set_increments_2=
-
-OS__gtk_spin_button_set_range=
-OS__gtk_spin_button_set_range_0=cast=GtkSpinButton*
-OS__gtk_spin_button_set_range_1=
-OS__gtk_spin_button_set_range_2=
-
-OS__gtk_spin_button_set_value=
-OS__gtk_spin_button_set_value_0=cast=GtkSpinButton*
-OS__gtk_spin_button_set_value_1=
-
-OS__gtk_spin_button_set_wrap=
-OS__gtk_spin_button_set_wrap_0=cast=GtkSpinButton*
-OS__gtk_spin_button_set_wrap_1=
-
-OS__gtk_style_get_base=
-OS__gtk_style_get_base_0=cast=(GtkStyle *)
-OS__gtk_style_get_base_1=
-OS__gtk_style_get_base_2=flags=no_in
-
-OS__gtk_style_get_bg=
-OS__gtk_style_get_bg_0=cast=(GtkStyle *)
-OS__gtk_style_get_bg_1=
-OS__gtk_style_get_bg_2=flags=no_in
-
-OS__gtk_style_get_bg_gc=
-OS__gtk_style_get_bg_gc_0=cast=(GtkStyle *)
-OS__gtk_style_get_bg_gc_1=
-OS__gtk_style_get_bg_gc_2=cast=(GdkGC **),flags=no_in
-
-OS__gtk_style_get_black=
-OS__gtk_style_get_black_0=cast=(GtkStyle *)
-OS__gtk_style_get_black_1=flags=no_in
-
-OS__gtk_style_get_black_gc=
-OS__gtk_style_get_black_gc_0=cast=(GtkStyle *)
-OS__gtk_style_get_black_gc_1=cast=(GdkGC **),flags=no_in
-
-OS__gtk_style_get_dark=
-OS__gtk_style_get_dark_0=cast=(GtkStyle *)
-OS__gtk_style_get_dark_1=
-OS__gtk_style_get_dark_2=flags=no_in
-
-OS__gtk_style_get_dark_gc=
-OS__gtk_style_get_dark_gc_0=cast=(GtkStyle *)
-OS__gtk_style_get_dark_gc_1=
-OS__gtk_style_get_dark_gc_2=cast=(GdkGC **),flags=no_in
-
-OS__gtk_style_get_fg=
-OS__gtk_style_get_fg_0=cast=(GtkStyle *)
-OS__gtk_style_get_fg_1=
-OS__gtk_style_get_fg_2=flags=no_in
-
-OS__gtk_style_get_fg_gc=
-OS__gtk_style_get_fg_gc_0=cast=(GtkStyle *)
-OS__gtk_style_get_fg_gc_1=
-OS__gtk_style_get_fg_gc_2=cast=(GdkGC **),flags=no_in
-
-OS__gtk_style_get_font_desc=
-OS__gtk_style_get_font_desc_0=cast=(GtkStyle *)
-
-OS__gtk_style_get_light=
-OS__gtk_style_get_light_0=cast=(GtkStyle *)
-OS__gtk_style_get_light_1=
-OS__gtk_style_get_light_2=flags=no_in
-
-OS__gtk_style_get_light_gc=
-OS__gtk_style_get_light_gc_0=cast=(GtkStyle *)
-OS__gtk_style_get_light_gc_1=
-OS__gtk_style_get_light_gc_2=cast=(GdkGC **)
-
-OS__gtk_style_get_mid_gc=
-OS__gtk_style_get_mid_gc_0=cast=(GtkStyle *)
-OS__gtk_style_get_mid_gc_1=
-OS__gtk_style_get_mid_gc_2=cast=(GdkGC **)
-
-OS__gtk_style_get_text=
-OS__gtk_style_get_text_0=cast=(GtkStyle *)
-OS__gtk_style_get_text_1=
-OS__gtk_style_get_text_2=flags=no_in
-
-OS__gtk_style_get_text_aa_gc=
-OS__gtk_style_get_text_aa_gc_0=cast=(GtkStyle *)
-OS__gtk_style_get_text_aa_gc_1=
-OS__gtk_style_get_text_aa_gc_2=cast=(GdkGC **)
-
-OS__gtk_style_get_text_gc=
-OS__gtk_style_get_text_gc_0=cast=(GtkStyle *)
-OS__gtk_style_get_text_gc_1=
-OS__gtk_style_get_text_gc_2=cast=(GdkGC **)
-
-OS__gtk_style_get_white_gc=
-OS__gtk_style_get_white_gc_0=cast=(GtkStyle *)
-OS__gtk_style_get_white_gc_1=cast=(GdkGC **)
-
-OS__gtk_style_get_xthickness=
-OS__gtk_style_get_xthickness_0=cast=(GtkStyle *)
-
-OS__gtk_style_get_ythickness=
-OS__gtk_style_get_ythickness_0=cast=(GtkStyle *)
-
-OS__gtk_style_render_icon=
-OS__gtk_style_render_icon_0=cast=GtkStyle *
-OS__gtk_style_render_icon_1=cast=GtkIconSource *
-OS__gtk_style_render_icon_2=
-OS__gtk_style_render_icon_3=
-OS__gtk_style_render_icon_4=
-OS__gtk_style_render_icon_5=cast=GtkWidget *
-OS__gtk_style_render_icon_6=cast=const gchar *
-
-OS__gtk_target_list_new=
-OS__gtk_target_list_new_0=cast=(const GtkTargetEntry *)
-OS__gtk_target_list_new_1=cast=(guint)
-
-OS__gtk_target_list_unref=
-OS__gtk_target_list_unref_0=cast=(GtkTargetList *)
-
-OS__gtk_text_buffer_copy_clipboard=
-OS__gtk_text_buffer_copy_clipboard_0=cast=(GtkTextBuffer *)
-OS__gtk_text_buffer_copy_clipboard_1=cast=(GtkClipboard *)
-
-OS__gtk_text_buffer_cut_clipboard=
-OS__gtk_text_buffer_cut_clipboard_0=cast=(GtkTextBuffer *)
-OS__gtk_text_buffer_cut_clipboard_1=cast=(GtkClipboard *)
-OS__gtk_text_buffer_cut_clipboard_2=cast=(gboolean)
-
-OS__gtk_text_buffer_delete=
-OS__gtk_text_buffer_delete_0=cast=(GtkTextBuffer *)
-OS__gtk_text_buffer_delete_1=cast=(GtkTextIter *)
-OS__gtk_text_buffer_delete_2=cast=(GtkTextIter *)
-
-OS__gtk_text_buffer_get_bounds=
-OS__gtk_text_buffer_get_bounds_0=cast=(GtkTextBuffer *)
-OS__gtk_text_buffer_get_bounds_1=cast=(GtkTextIter *)
-OS__gtk_text_buffer_get_bounds_2=cast=(GtkTextIter *)
-
-OS__gtk_text_buffer_get_char_count=
-OS__gtk_text_buffer_get_char_count_0=cast=(GtkTextBuffer *)
-
-OS__gtk_text_buffer_get_end_iter=
-OS__gtk_text_buffer_get_end_iter_0=cast=(GtkTextBuffer *)
-OS__gtk_text_buffer_get_end_iter_1=cast=(GtkTextIter *)
-
-OS__gtk_text_buffer_get_insert=
-OS__gtk_text_buffer_get_insert_0=cast=(GtkTextBuffer *)
-
-OS__gtk_text_buffer_get_iter_at_line=
-OS__gtk_text_buffer_get_iter_at_line_0=cast=(GtkTextBuffer *)
-OS__gtk_text_buffer_get_iter_at_line_1=cast=(GtkTextIter *)
-OS__gtk_text_buffer_get_iter_at_line_2=cast=(gint)
-
-OS__gtk_text_buffer_get_iter_at_mark=
-OS__gtk_text_buffer_get_iter_at_mark_0=cast=(GtkTextBuffer *)
-OS__gtk_text_buffer_get_iter_at_mark_1=cast=(GtkTextIter *)
-OS__gtk_text_buffer_get_iter_at_mark_2=cast=(GtkTextMark *)
-
-OS__gtk_text_buffer_get_iter_at_offset=
-OS__gtk_text_buffer_get_iter_at_offset_0=cast=(GtkTextBuffer *)
-OS__gtk_text_buffer_get_iter_at_offset_1=cast=(GtkTextIter *)
-OS__gtk_text_buffer_get_iter_at_offset_2=cast=(gint)
-
-OS__gtk_text_buffer_get_line_count=
-OS__gtk_text_buffer_get_line_count_0=cast=(GtkTextBuffer *)
-
-OS__gtk_text_buffer_get_selection_bound=
-OS__gtk_text_buffer_get_selection_bound_0=cast=(GtkTextBuffer *)
-
-OS__gtk_text_buffer_get_selection_bounds=
-OS__gtk_text_buffer_get_selection_bounds_0=cast=(GtkTextBuffer *)
-OS__gtk_text_buffer_get_selection_bounds_1=cast=(GtkTextIter *)
-OS__gtk_text_buffer_get_selection_bounds_2=cast=(GtkTextIter *)
-
-OS__gtk_text_buffer_get_text=
-OS__gtk_text_buffer_get_text_0=cast=(GtkTextBuffer *)
-OS__gtk_text_buffer_get_text_1=cast=(GtkTextIter *)
-OS__gtk_text_buffer_get_text_2=cast=(GtkTextIter *)
-OS__gtk_text_buffer_get_text_3=cast=(gboolean)
-
-OS__1gtk_1text_1buffer_1insert__II_3BI=
-OS__1gtk_1text_1buffer_1insert__II_3BI_0=cast=(GtkTextBuffer *)
-OS__1gtk_1text_1buffer_1insert__II_3BI_1=cast=(GtkTextIter *)
-OS__1gtk_1text_1buffer_1insert__II_3BI_2=cast=(const gchar *)
-OS__1gtk_1text_1buffer_1insert__II_3BI_3=cast=(gint)
-
-OS__1gtk_1text_1buffer_1insert__I_3B_3BI=
-OS__1gtk_1text_1buffer_1insert__I_3B_3BI_0=cast=(GtkTextBuffer *)
-OS__1gtk_1text_1buffer_1insert__I_3B_3BI_1=cast=(GtkTextIter *)
-OS__1gtk_1text_1buffer_1insert__I_3B_3BI_2=cast=(const gchar *)
-OS__1gtk_1text_1buffer_1insert__I_3B_3BI_3=cast=(gint)
-
-OS__gtk_text_buffer_move_mark=
-OS__gtk_text_buffer_move_mark_0=cast=(GtkTextBuffer *)
-OS__gtk_text_buffer_move_mark_1=cast=(GtkTextMark *)
-OS__gtk_text_buffer_move_mark_2=cast=(const GtkTextIter *)
-
-OS__gtk_text_buffer_paste_clipboard=
-OS__gtk_text_buffer_paste_clipboard_0=cast=(GtkTextBuffer *)
-OS__gtk_text_buffer_paste_clipboard_1=cast=(GtkClipboard *)
-OS__gtk_text_buffer_paste_clipboard_2=cast=(GtkTextIter *)
-OS__gtk_text_buffer_paste_clipboard_3=cast=(gboolean)
-
-OS__gtk_text_buffer_place_cursor=
-OS__gtk_text_buffer_place_cursor_0=cast=(GtkTextBuffer *)
-OS__gtk_text_buffer_place_cursor_1=cast=(const GtkTextIter *)
-
-OS__gtk_text_buffer_set_text=
-OS__gtk_text_buffer_set_text_0=cast=(GtkTextBuffer *)
-OS__gtk_text_buffer_set_text_1=cast=(const gchar *)
-OS__gtk_text_buffer_set_text_2=cast=(gint)
-
-OS__gtk_text_iter_get_line=
-OS__gtk_text_iter_get_line_0=cast=(const GtkTextIter *)
-
-OS__gtk_text_iter_get_offset=
-OS__gtk_text_iter_get_offset_0=cast=(const GtkTextIter *)
-
-OS__gtk_text_view_buffer_to_window_coords=
-OS__gtk_text_view_buffer_to_window_coords_0=cast=(GtkTextView *)
-OS__gtk_text_view_buffer_to_window_coords_1=cast=(GtkTextWindowType)
-OS__gtk_text_view_buffer_to_window_coords_2=cast=(gint)
-OS__gtk_text_view_buffer_to_window_coords_3=cast=(gint)
-OS__gtk_text_view_buffer_to_window_coords_4=cast=(gint *)
-OS__gtk_text_view_buffer_to_window_coords_5=cast=(gint *)
-
-OS__gtk_text_view_get_buffer=
-OS__gtk_text_view_get_buffer_0=cast=(GtkTextView *)
-
-OS__gtk_text_view_get_editable=
-OS__gtk_text_view_get_editable_0=cast=(GtkTextView *)
-
-OS__gtk_text_view_get_iter_at_location=
-OS__gtk_text_view_get_iter_at_location_0=cast=GtkTextView *
-OS__gtk_text_view_get_iter_at_location_1=cast=GtkTextIter *
-OS__gtk_text_view_get_iter_at_location_2=cast=gint
-OS__gtk_text_view_get_iter_at_location_3=cast=gint
-
-OS__gtk_text_view_get_iter_location=
-OS__gtk_text_view_get_iter_location_0=cast=(GtkTextView *)
-OS__gtk_text_view_get_iter_location_1=cast=(const GtkTextIter *)
-OS__gtk_text_view_get_iter_location_2=cast=(GdkRectangle *),flags=no_in
-
-OS__gtk_text_view_get_line_at_y=
-OS__gtk_text_view_get_line_at_y_0=cast=(GtkTextView *)
-OS__gtk_text_view_get_line_at_y_1=cast=(GtkTextIter *)
-OS__gtk_text_view_get_line_at_y_2=cast=(gint)
-OS__gtk_text_view_get_line_at_y_3=cast=(gint *)
-
-OS__gtk_text_view_get_visible_rect=
-OS__gtk_text_view_get_visible_rect_0=cast=(GtkTextView *)
-OS__gtk_text_view_get_visible_rect_1=cast=(GdkRectangle *),flags=no_in
-
-OS__gtk_text_view_get_window=
-OS__gtk_text_view_get_window_0=cast=(GtkTextView *)
-OS__gtk_text_view_get_window_1=cast=(GtkTextWindowType)
-
-OS__gtk_text_view_new=
-
-OS__gtk_text_view_scroll_mark_onscreen=
-OS__gtk_text_view_scroll_mark_onscreen_0=cast=(GtkTextView *)
-OS__gtk_text_view_scroll_mark_onscreen_1=cast=(GtkTextMark *)
-
-OS__gtk_text_view_scroll_to_iter=
-OS__gtk_text_view_scroll_to_iter_0=cast=(GtkTextView *)
-OS__gtk_text_view_scroll_to_iter_1=cast=(GtkTextIter *)
-OS__gtk_text_view_scroll_to_iter_2=cast=(gdouble)
-OS__gtk_text_view_scroll_to_iter_3=cast=(gboolean)
-OS__gtk_text_view_scroll_to_iter_4=cast=(gdouble)
-OS__gtk_text_view_scroll_to_iter_5=cast=(gdouble)
-
-OS__gtk_text_view_set_editable=
-OS__gtk_text_view_set_editable_0=cast=(GtkTextView *)
-OS__gtk_text_view_set_editable_1=cast=(gboolean)
-
-OS__gtk_text_view_set_justification=
-OS__gtk_text_view_set_justification_0=cast=(GtkTextView *)
-OS__gtk_text_view_set_justification_1=
-
-OS__gtk_text_view_set_tabs=
-OS__gtk_text_view_set_tabs_0=cast=(GtkTextView *)
-OS__gtk_text_view_set_tabs_1=cast=(PangoTabArray *)
-
-OS__gtk_text_view_set_wrap_mode=
-OS__gtk_text_view_set_wrap_mode_0=cast=(GtkTextView *)
-OS__gtk_text_view_set_wrap_mode_1=
-
-OS__gtk_text_view_window_to_buffer_coords=
-OS__gtk_text_view_window_to_buffer_coords_0=cast=(GtkTextView *)
-OS__gtk_text_view_window_to_buffer_coords_1=cast=GtkTextWindowType
-OS__gtk_text_view_window_to_buffer_coords_2=cast=gint
-OS__gtk_text_view_window_to_buffer_coords_3=cast=gint
-OS__gtk_text_view_window_to_buffer_coords_4=cast=(gint *)
-OS__gtk_text_view_window_to_buffer_coords_5=cast=(gint *)
-
-OS__gtk_timeout_add=
-OS__gtk_timeout_add_0=cast=(guint32)
-OS__gtk_timeout_add_1=cast=(GtkFunction)
-OS__gtk_timeout_add_2=cast=(gpointer)
-
-OS__gtk_timeout_remove=
-OS__gtk_timeout_remove_0=cast=(guint)
-
-OS__gtk_toggle_button_get_active=
-OS__gtk_toggle_button_get_active_0=cast=(GtkToggleButton *)
-
-OS__gtk_toggle_button_new=
-
-OS__gtk_toggle_button_set_active=
-OS__gtk_toggle_button_set_active_0=cast=(GtkToggleButton *)
-OS__gtk_toggle_button_set_active_1=cast=(gboolean)
-
-OS__gtk_toggle_button_set_mode=
-OS__gtk_toggle_button_set_mode_0=cast=(GtkToggleButton *)
-OS__gtk_toggle_button_set_mode_1=cast=(gboolean)
-
-OS__gtk_toolbar_insert_widget=
-OS__gtk_toolbar_insert_widget_0=cast=(GtkToolbar *)
-OS__gtk_toolbar_insert_widget_1=cast=(GtkWidget *)
-OS__gtk_toolbar_insert_widget_2=cast=(const char *)
-OS__gtk_toolbar_insert_widget_3=cast=(const char *)
-OS__gtk_toolbar_insert_widget_4=cast=(gint)
-
-OS__gtk_toolbar_new=
-
-OS__gtk_toolbar_set_orientation=
-OS__gtk_toolbar_set_orientation_0=cast=(GtkToolbar *)
-OS__gtk_toolbar_set_orientation_1=cast=(GtkOrientation)
-
-OS__gtk_tooltips_data_get=
-OS__gtk_tooltips_data_get_0=cast=(GtkWidget *)
-
-OS__gtk_tooltips_disable=
-OS__gtk_tooltips_disable_0=cast=(GtkTooltips *)
-
-OS__gtk_tooltips_enable=
-OS__gtk_tooltips_enable_0=cast=(GtkTooltips *)
-
-OS__gtk_tooltips_force_window=
-OS__gtk_tooltips_force_window_0=cast=(GtkTooltips *)
-
-OS__gtk_tooltips_new=
-
-OS__gtk_tooltips_set_tip=
-OS__gtk_tooltips_set_tip_0=cast=(GtkTooltips *)
-OS__gtk_tooltips_set_tip_1=cast=(GtkWidget *)
-OS__gtk_tooltips_set_tip_2=cast=(const gchar *)
-OS__gtk_tooltips_set_tip_3=cast=(const gchar *)
-
-OS__1gtk_1tree_1model_1get__III_3II=
-OS__1gtk_1tree_1model_1get__III_3II_0=cast=(GtkTreeModel *)
-OS__1gtk_1tree_1model_1get__III_3II_1=cast=(GtkTreeIter *)
-OS__1gtk_1tree_1model_1get__III_3II_2=
-OS__1gtk_1tree_1model_1get__III_3II_3=
-OS__1gtk_1tree_1model_1get__III_3II_4=
-
-OS__1gtk_1tree_1model_1get__III_3JI=
-OS__1gtk_1tree_1model_1get__III_3JI_0=cast=(GtkTreeModel *)
-OS__1gtk_1tree_1model_1get__III_3JI_1=cast=(GtkTreeIter *)
-OS__1gtk_1tree_1model_1get__III_3JI_2=
-OS__1gtk_1tree_1model_1get__III_3JI_3=
-OS__1gtk_1tree_1model_1get__III_3JI_4=
-
-OS__gtk_tree_model_get_iter=
-OS__gtk_tree_model_get_iter_0=cast=(GtkTreeModel *)
-OS__gtk_tree_model_get_iter_1=cast=(GtkTreeIter *)
-OS__gtk_tree_model_get_iter_2=cast=(GtkTreePath *)
-
-OS__gtk_tree_model_get_iter_first=
-OS__gtk_tree_model_get_iter_first_0=cast=(GtkTreeModel *)
-OS__gtk_tree_model_get_iter_first_1=cast=(GtkTreeIter *)
-
-OS__gtk_tree_model_get_n_columns=
-OS__gtk_tree_model_get_n_columns_0=cast=(GtkTreeModel *)
-
-OS__gtk_tree_model_get_path=
-OS__gtk_tree_model_get_path_0=cast=(GtkTreeModel *)
-OS__gtk_tree_model_get_path_1=cast=(GtkTreeIter *)
-
-OS__gtk_tree_model_get_type=
-
-OS__gtk_tree_model_iter_children=
-OS__gtk_tree_model_iter_children_0=cast=(GtkTreeModel *)
-OS__gtk_tree_model_iter_children_1=cast=(GtkTreeIter *)
-OS__gtk_tree_model_iter_children_2=cast=(GtkTreeIter *)
-
-OS__gtk_tree_model_iter_n_children=
-OS__gtk_tree_model_iter_n_children_0=cast=(GtkTreeModel *)
-OS__gtk_tree_model_iter_n_children_1=cast=(GtkTreeIter *)
-
-OS__gtk_tree_model_iter_next=
-OS__gtk_tree_model_iter_next_0=cast=(GtkTreeModel *)
-OS__gtk_tree_model_iter_next_1=cast=(GtkTreeIter *)
-
-OS__gtk_tree_model_iter_nth_child=
-OS__gtk_tree_model_iter_nth_child_0=cast=(GtkTreeModel *)
-OS__gtk_tree_model_iter_nth_child_1=cast=(GtkTreeIter *)
-OS__gtk_tree_model_iter_nth_child_2=cast=(GtkTreeIter *)
-OS__gtk_tree_model_iter_nth_child_3=
-
-OS__gtk_tree_path_append_index=
-OS__gtk_tree_path_append_index_0=cast=(GtkTreePath *)
-OS__gtk_tree_path_append_index_1=
-
-OS__gtk_tree_path_compare=
-OS__gtk_tree_path_compare_0=cast=(const GtkTreePath *)
-OS__gtk_tree_path_compare_1=cast=(const GtkTreePath *)
-
-OS__gtk_tree_path_down=
-OS__gtk_tree_path_down_0=cast=(GtkTreePath *)
-
-OS__gtk_tree_path_free=
-OS__gtk_tree_path_free_0=cast=(GtkTreePath *)
-
-OS__gtk_tree_path_get_depth=
-OS__gtk_tree_path_get_depth_0=cast=(GtkTreePath *)
-
-OS__gtk_tree_path_get_indices=
-OS__gtk_tree_path_get_indices_0=cast=(GtkTreePath *)
-
-OS__gtk_tree_path_new=
-
-OS__gtk_tree_path_new_first=
-
-OS__1gtk_1tree_1path_1new_1from_1string__I=
-OS__1gtk_1tree_1path_1new_1from_1string__I_0=cast=(const gchar *)
-
-OS__1gtk_1tree_1path_1new_1from_1string___3B=
-OS__1gtk_1tree_1path_1new_1from_1string___3B_0=cast=(const gchar *)
-
-OS__gtk_tree_path_next=
-OS__gtk_tree_path_next_0=cast=(GtkTreePath *)
-
-OS__gtk_tree_path_prev=
-OS__gtk_tree_path_prev_0=cast=(GtkTreePath *)
-
-OS__gtk_tree_path_up=
-OS__gtk_tree_path_up_0=cast=(GtkTreePath *)
-
-OS__gtk_tree_selection_count_selected_rows=flags=dynamic
-OS__gtk_tree_selection_count_selected_rows_0=cast=(GtkTreeSelection *)
-
-OS__gtk_tree_selection_get_selected=
-OS__gtk_tree_selection_get_selected_0=cast=(GtkTreeSelection *)
-OS__gtk_tree_selection_get_selected_1=cast=(GtkTreeModel **)
-OS__gtk_tree_selection_get_selected_2=cast=(GtkTreeIter *)
-
-OS__gtk_tree_selection_get_selected_rows=flags=dynamic
-OS__gtk_tree_selection_get_selected_rows_0=cast=(GtkTreeSelection *)
-OS__gtk_tree_selection_get_selected_rows_1=cast=(GtkTreeModel **)
-
-OS__gtk_tree_selection_path_is_selected=
-OS__gtk_tree_selection_path_is_selected_0=cast=(GtkTreeSelection *)
-OS__gtk_tree_selection_path_is_selected_1=cast=(GtkTreePath *)
-
-OS__gtk_tree_selection_select_all=
-OS__gtk_tree_selection_select_all_0=cast=(GtkTreeSelection *)
-
-OS__gtk_tree_selection_select_iter=
-OS__gtk_tree_selection_select_iter_0=cast=(GtkTreeSelection *)
-OS__gtk_tree_selection_select_iter_1=cast=(GtkTreeIter *)
-
-OS__gtk_tree_selection_selected_foreach=
-OS__gtk_tree_selection_selected_foreach_0=cast=(GtkTreeSelection *)
-OS__gtk_tree_selection_selected_foreach_1=cast=(GtkTreeSelectionForeachFunc)
-OS__gtk_tree_selection_selected_foreach_2=cast=(gpointer)
-
-OS__gtk_tree_selection_set_mode=
-OS__gtk_tree_selection_set_mode_0=cast=(GtkTreeSelection *)
-OS__gtk_tree_selection_set_mode_1=cast=(GtkSelectionMode)
-
-OS__gtk_tree_selection_unselect_all=
-OS__gtk_tree_selection_unselect_all_0=cast=(GtkTreeSelection *)
-
-OS__gtk_tree_selection_unselect_iter=
-OS__gtk_tree_selection_unselect_iter_0=cast=(GtkTreeSelection *)
-OS__gtk_tree_selection_unselect_iter_1=cast=(GtkTreeIter *)
-
-OS__gtk_tree_store_append=
-OS__gtk_tree_store_append_0=cast=(GtkTreeStore *)
-OS__gtk_tree_store_append_1=cast=(GtkTreeIter *)
-OS__gtk_tree_store_append_2=cast=(GtkTreeIter *)
-
-OS__gtk_tree_store_clear=
-OS__gtk_tree_store_clear_0=cast=(GtkTreeStore *)
-
-OS__gtk_tree_store_insert=
-OS__gtk_tree_store_insert_0=cast=(GtkTreeStore *)
-OS__gtk_tree_store_insert_1=cast=(GtkTreeIter *)
-OS__gtk_tree_store_insert_2=cast=(GtkTreeIter *)
-OS__gtk_tree_store_insert_3=cast=(gint)
-
-OS__gtk_tree_store_newv=
-OS__gtk_tree_store_newv_0=
-OS__gtk_tree_store_newv_1=cast=(GType *)
-
-OS__gtk_tree_store_remove=
-OS__gtk_tree_store_remove_0=cast=(GtkTreeStore *)
-OS__gtk_tree_store_remove_1=cast=(GtkTreeIter *)
-
-OS__1gtk_1tree_1store_1set__IIIII=
-OS__1gtk_1tree_1store_1set__IIIII_0=cast=(GtkTreeStore *)
-OS__1gtk_1tree_1store_1set__IIIII_1=cast=(GtkTreeIter *)
-OS__1gtk_1tree_1store_1set__IIIII_2=
-OS__1gtk_1tree_1store_1set__IIIII_3=
-OS__1gtk_1tree_1store_1set__IIIII_4=
-
-OS__1gtk_1tree_1store_1set__IIIJI=
-OS__1gtk_1tree_1store_1set__IIIJI_0=cast=(GtkTreeStore *)
-OS__1gtk_1tree_1store_1set__IIIJI_1=cast=(GtkTreeIter *)
-OS__1gtk_1tree_1store_1set__IIIJI_2=
-OS__1gtk_1tree_1store_1set__IIIJI_3=
-OS__1gtk_1tree_1store_1set__IIIJI_4=
-
-OS__1gtk_1tree_1store_1set__IIILorg_eclipse_swt_internal_gtk_GdkColor_2I=
-OS__1gtk_1tree_1store_1set__IIILorg_eclipse_swt_internal_gtk_GdkColor_2I_0=cast=(GtkTreeStore *)
-OS__1gtk_1tree_1store_1set__IIILorg_eclipse_swt_internal_gtk_GdkColor_2I_1=cast=(GtkTreeIter *)
-OS__1gtk_1tree_1store_1set__IIILorg_eclipse_swt_internal_gtk_GdkColor_2I_2=
-OS__1gtk_1tree_1store_1set__IIILorg_eclipse_swt_internal_gtk_GdkColor_2I_3=flags=no_out
-OS__1gtk_1tree_1store_1set__IIILorg_eclipse_swt_internal_gtk_GdkColor_2I_4=
-
-OS__1gtk_1tree_1store_1set__IIIZI=
-OS__1gtk_1tree_1store_1set__IIIZI_0=cast=(GtkTreeStore *)
-OS__1gtk_1tree_1store_1set__IIIZI_1=cast=(GtkTreeIter *)
-OS__1gtk_1tree_1store_1set__IIIZI_2=
-OS__1gtk_1tree_1store_1set__IIIZI_3=
-OS__1gtk_1tree_1store_1set__IIIZI_4=
-
-OS__1gtk_1tree_1store_1set__III_3BI=
-OS__1gtk_1tree_1store_1set__III_3BI_0=cast=(GtkTreeStore *)
-OS__1gtk_1tree_1store_1set__III_3BI_1=cast=(GtkTreeIter *)
-OS__1gtk_1tree_1store_1set__III_3BI_2=
-OS__1gtk_1tree_1store_1set__III_3BI_3=
-OS__1gtk_1tree_1store_1set__III_3BI_4=
-
-OS__gtk_tree_view_collapse_row=
-OS__gtk_tree_view_collapse_row_0=cast=(GtkTreeView *)
-OS__gtk_tree_view_collapse_row_1=cast=(GtkTreePath *)
-
-OS__gtk_tree_view_column_add_attribute=
-OS__gtk_tree_view_column_add_attribute_0=cast=(GtkTreeViewColumn *)
-OS__gtk_tree_view_column_add_attribute_1=cast=(GtkCellRenderer *)
-OS__gtk_tree_view_column_add_attribute_2=cast=(const gchar *)
-OS__gtk_tree_view_column_add_attribute_3=cast=(gint)
-
-OS__gtk_tree_view_column_cell_get_position=flags=dynamic
-OS__gtk_tree_view_column_cell_get_position_0=cast=(GtkTreeViewColumn *)
-OS__gtk_tree_view_column_cell_get_position_1=cast=(GtkCellRenderer *)
-OS__gtk_tree_view_column_cell_get_position_2=cast=(gint *)
-OS__gtk_tree_view_column_cell_get_position_3=cast=(gint *)
-
-OS__gtk_tree_view_column_cell_get_size=
-OS__gtk_tree_view_column_cell_get_size_0=cast=(GtkTreeViewColumn *)
-OS__gtk_tree_view_column_cell_get_size_1=cast=(GdkRectangle *),flags=no_in
-OS__gtk_tree_view_column_cell_get_size_2=cast=(gint *)
-OS__gtk_tree_view_column_cell_get_size_3=cast=(gint *)
-OS__gtk_tree_view_column_cell_get_size_4=cast=(gint *)
-OS__gtk_tree_view_column_cell_get_size_5=cast=(gint *)
-
-OS__gtk_tree_view_column_cell_set_cell_data=
-OS__gtk_tree_view_column_cell_set_cell_data_0=cast=GtkTreeViewColumn *
-OS__gtk_tree_view_column_cell_set_cell_data_1=cast=GtkTreeModel *
-OS__gtk_tree_view_column_cell_set_cell_data_2=cast=GtkTreeIter *
-OS__gtk_tree_view_column_cell_set_cell_data_3=
-OS__gtk_tree_view_column_cell_set_cell_data_4=
-
-OS__gtk_tree_view_column_clear=
-OS__gtk_tree_view_column_clear_0=cast=(GtkTreeViewColumn *)
-
-OS__gtk_tree_view_column_get_cell_renderers=
-OS__gtk_tree_view_column_get_cell_renderers_0=cast=(GtkTreeViewColumn *)
-
-OS__gtk_tree_view_column_get_fixed_width=
-OS__gtk_tree_view_column_get_fixed_width_0=cast=(GtkTreeViewColumn *)
-
-OS__gtk_tree_view_column_get_reorderable=
-OS__gtk_tree_view_column_get_reorderable_0=cast=GtkTreeViewColumn *
-
-OS__gtk_tree_view_column_get_resizable=
-OS__gtk_tree_view_column_get_resizable_0=cast=(GtkTreeViewColumn *)
-
-OS__gtk_tree_view_column_get_sizing=
-OS__gtk_tree_view_column_get_sizing_0=cast=(GtkTreeViewColumn *)
-
-OS__gtk_tree_view_column_get_sort_indicator=
-OS__gtk_tree_view_column_get_sort_indicator_0=cast=GtkTreeViewColumn *
-
-OS__gtk_tree_view_column_get_sort_order=
-OS__gtk_tree_view_column_get_sort_order_0=cast=GtkTreeViewColumn *
-
-OS__gtk_tree_view_column_get_spacing=
-OS__gtk_tree_view_column_get_spacing_0=cast=(GtkTreeViewColumn *)
-
-OS__gtk_tree_view_column_get_visible=
-OS__gtk_tree_view_column_get_visible_0=cast=(GtkTreeViewColumn *)
-
-OS__gtk_tree_view_column_get_width=
-OS__gtk_tree_view_column_get_width_0=cast=(GtkTreeViewColumn *)
-
-OS__gtk_tree_view_column_new=
-
-OS__gtk_tree_view_column_pack_end=
-OS__gtk_tree_view_column_pack_end_0=cast=(GtkTreeViewColumn *)
-OS__gtk_tree_view_column_pack_end_1=cast=(GtkCellRenderer *)
-OS__gtk_tree_view_column_pack_end_2=cast=(gboolean)
-
-OS__gtk_tree_view_column_pack_start=
-OS__gtk_tree_view_column_pack_start_0=cast=(GtkTreeViewColumn *)
-OS__gtk_tree_view_column_pack_start_1=cast=(GtkCellRenderer *)
-OS__gtk_tree_view_column_pack_start_2=cast=(gboolean)
-
-OS__gtk_tree_view_column_set_alignment=
-OS__gtk_tree_view_column_set_alignment_0=cast=(GtkTreeViewColumn *)
-OS__gtk_tree_view_column_set_alignment_1=
-
-OS__gtk_tree_view_column_set_cell_data_func=
-OS__gtk_tree_view_column_set_cell_data_func_0=cast=GtkTreeViewColumn *
-OS__gtk_tree_view_column_set_cell_data_func_1=cast=GtkCellRenderer *
-OS__gtk_tree_view_column_set_cell_data_func_2=cast=(GtkTreeCellDataFunc)
-OS__gtk_tree_view_column_set_cell_data_func_3=cast=(gpointer)
-OS__gtk_tree_view_column_set_cell_data_func_4=cast=GtkDestroyNotify
-
-OS__gtk_tree_view_column_set_clickable=
-OS__gtk_tree_view_column_set_clickable_0=cast=(GtkTreeViewColumn *)
-OS__gtk_tree_view_column_set_clickable_1=cast=(gboolean)
-
-OS__gtk_tree_view_column_set_fixed_width=
-OS__gtk_tree_view_column_set_fixed_width_0=cast=(GtkTreeViewColumn *)
-OS__gtk_tree_view_column_set_fixed_width_1=cast=(gint)
-
-OS__gtk_tree_view_column_set_min_width=
-OS__gtk_tree_view_column_set_min_width_0=cast=(GtkTreeViewColumn *)
-OS__gtk_tree_view_column_set_min_width_1=cast=gint
-
-OS__gtk_tree_view_column_set_reorderable=
-OS__gtk_tree_view_column_set_reorderable_0=cast=GtkTreeViewColumn *
-OS__gtk_tree_view_column_set_reorderable_1=cast=gboolean
-
-OS__gtk_tree_view_column_set_resizable=
-OS__gtk_tree_view_column_set_resizable_0=cast=(GtkTreeViewColumn *)
-OS__gtk_tree_view_column_set_resizable_1=cast=(gboolean)
-
-OS__gtk_tree_view_column_set_sizing=
-OS__gtk_tree_view_column_set_sizing_0=cast=(GtkTreeViewColumn *)
-OS__gtk_tree_view_column_set_sizing_1=cast=(GtkTreeViewColumnSizing)
-
-OS__gtk_tree_view_column_set_sort_indicator=
-OS__gtk_tree_view_column_set_sort_indicator_0=cast=(GtkTreeViewColumn *)
-OS__gtk_tree_view_column_set_sort_indicator_1=cast=gboolean
-
-OS__gtk_tree_view_column_set_sort_order=
-OS__gtk_tree_view_column_set_sort_order_0=cast=GtkTreeViewColumn *
-OS__gtk_tree_view_column_set_sort_order_1=cast=GtkSortType
-
-OS__gtk_tree_view_column_set_title=
-OS__gtk_tree_view_column_set_title_0=cast=(GtkTreeViewColumn *)
-OS__gtk_tree_view_column_set_title_1=cast=(const gchar *)
-
-OS__gtk_tree_view_column_set_visible=
-OS__gtk_tree_view_column_set_visible_0=cast=(GtkTreeViewColumn *)
-OS__gtk_tree_view_column_set_visible_1=
-
-OS__gtk_tree_view_column_set_widget=
-OS__gtk_tree_view_column_set_widget_0=cast=(GtkTreeViewColumn *)
-OS__gtk_tree_view_column_set_widget_1=cast=(GtkWidget *)
-
-OS__gtk_tree_view_create_row_drag_icon=
-OS__gtk_tree_view_create_row_drag_icon_0=cast=(GtkTreeView *)
-OS__gtk_tree_view_create_row_drag_icon_1=cast=(GtkTreePath *)
-
-OS__gtk_tree_view_expand_row=
-OS__gtk_tree_view_expand_row_0=cast=(GtkTreeView *)
-OS__gtk_tree_view_expand_row_1=cast=(GtkTreePath *)
-OS__gtk_tree_view_expand_row_2=cast=(gboolean)
-
-OS__gtk_tree_view_get_background_area=
-OS__gtk_tree_view_get_background_area_0=cast=(GtkTreeView *)
-OS__gtk_tree_view_get_background_area_1=cast=(GtkTreePath *)
-OS__gtk_tree_view_get_background_area_2=cast=(GtkTreeViewColumn *)
-OS__gtk_tree_view_get_background_area_3=cast=(GdkRectangle *)
-
-OS__gtk_tree_view_get_bin_window=
-OS__gtk_tree_view_get_bin_window_0=cast=(GtkTreeView *)
-
-OS__gtk_tree_view_get_cell_area=
-OS__gtk_tree_view_get_cell_area_0=cast=(GtkTreeView *)
-OS__gtk_tree_view_get_cell_area_1=cast=(GtkTreePath *)
-OS__gtk_tree_view_get_cell_area_2=cast=(GtkTreeViewColumn *)
-OS__gtk_tree_view_get_cell_area_3=cast=(GdkRectangle *),flags=no_in
-
-OS__gtk_tree_view_get_column=
-OS__gtk_tree_view_get_column_0=cast=(GtkTreeView *)
-OS__gtk_tree_view_get_column_1=cast=(gint)
-
-OS__gtk_tree_view_get_columns=
-OS__gtk_tree_view_get_columns_0=cast=GtkTreeView *
-
-OS__gtk_tree_view_get_cursor=
-OS__gtk_tree_view_get_cursor_0=cast=(GtkTreeView *)
-OS__gtk_tree_view_get_cursor_1=cast=(GtkTreePath **)
-OS__gtk_tree_view_get_cursor_2=cast=(GtkTreeViewColumn **)
-
-OS__gtk_tree_view_get_expander_column=
-OS__gtk_tree_view_get_expander_column_0=cast=(GtkTreeView *)
-
-OS__gtk_tree_view_get_headers_visible=
-OS__gtk_tree_view_get_headers_visible_0=cast=(GtkTreeView *)
-
-OS__gtk_tree_view_get_path_at_pos=
-OS__gtk_tree_view_get_path_at_pos_0=cast=(GtkTreeView *)
-OS__gtk_tree_view_get_path_at_pos_1=cast=(gint)
-OS__gtk_tree_view_get_path_at_pos_2=cast=(gint)
-OS__gtk_tree_view_get_path_at_pos_3=cast=(GtkTreePath **)
-OS__gtk_tree_view_get_path_at_pos_4=cast=(GtkTreeViewColumn **)
-OS__gtk_tree_view_get_path_at_pos_5=cast=(gint *)
-OS__gtk_tree_view_get_path_at_pos_6=cast=(gint *)
-
-OS__gtk_tree_view_get_rules_hint=
-OS__gtk_tree_view_get_rules_hint_0=cast=(GtkTreeView *)
-
-OS__gtk_tree_view_get_selection=
-OS__gtk_tree_view_get_selection_0=cast=(GtkTreeView *)
-
-OS__gtk_tree_view_get_visible_rect=
-OS__gtk_tree_view_get_visible_rect_0=cast=(GtkTreeView *)
-OS__gtk_tree_view_get_visible_rect_1=flags=no_in
-
-OS__gtk_tree_view_insert_column=
-OS__gtk_tree_view_insert_column_0=cast=(GtkTreeView *)
-OS__gtk_tree_view_insert_column_1=cast=(GtkTreeViewColumn *)
-OS__gtk_tree_view_insert_column_2=cast=(gint)
-
-OS__gtk_tree_view_move_column_after=
-OS__gtk_tree_view_move_column_after_0=cast=GtkTreeView *
-OS__gtk_tree_view_move_column_after_1=cast=GtkTreeViewColumn *
-OS__gtk_tree_view_move_column_after_2=cast=GtkTreeViewColumn *
-
-OS__gtk_tree_view_new_with_model=
-OS__gtk_tree_view_new_with_model_0=cast=(GtkTreeModel *)
-
-OS__gtk_tree_view_remove_column=
-OS__gtk_tree_view_remove_column_0=cast=(GtkTreeView *)
-OS__gtk_tree_view_remove_column_1=cast=(GtkTreeViewColumn *)
-
-OS__gtk_tree_view_row_expanded=
-OS__gtk_tree_view_row_expanded_0=cast=(GtkTreeView *)
-OS__gtk_tree_view_row_expanded_1=cast=(GtkTreePath *)
-
-OS__gtk_tree_view_scroll_to_cell=
-OS__gtk_tree_view_scroll_to_cell_0=cast=(GtkTreeView *)
-OS__gtk_tree_view_scroll_to_cell_1=cast=(GtkTreePath *)
-OS__gtk_tree_view_scroll_to_cell_2=cast=(GtkTreeViewColumn *)
-OS__gtk_tree_view_scroll_to_cell_3=cast=(gboolean)
-OS__gtk_tree_view_scroll_to_cell_4=cast=(gfloat)
-OS__gtk_tree_view_scroll_to_cell_5=cast=(gfloat)
-
-OS__gtk_tree_view_scroll_to_point=
-OS__gtk_tree_view_scroll_to_point_0=cast=GtkTreeView *
-OS__gtk_tree_view_scroll_to_point_1=cast=(gint)
-OS__gtk_tree_view_scroll_to_point_2=cast=(gint)
-
-OS__gtk_tree_view_set_cursor=
-OS__gtk_tree_view_set_cursor_0=cast=(GtkTreeView *)
-OS__gtk_tree_view_set_cursor_1=cast=(GtkTreePath *)
-OS__gtk_tree_view_set_cursor_2=cast=(GtkTreeViewColumn *)
-OS__gtk_tree_view_set_cursor_3=
-
-OS__gtk_tree_view_set_drag_dest_row=
-OS__gtk_tree_view_set_drag_dest_row_0=cast=(GtkTreeView *)
-OS__gtk_tree_view_set_drag_dest_row_1=cast=(GtkTreePath *)
-OS__gtk_tree_view_set_drag_dest_row_2=
-
-OS__gtk_tree_view_set_enable_search=
-OS__gtk_tree_view_set_enable_search_0=cast=(GtkTreeView *)
-OS__gtk_tree_view_set_enable_search_1=
-
-OS__gtk_tree_view_set_headers_visible=
-OS__gtk_tree_view_set_headers_visible_0=cast=(GtkTreeView *)
-OS__gtk_tree_view_set_headers_visible_1=cast=(gboolean)
-
-OS__gtk_tree_view_set_model=
-OS__gtk_tree_view_set_model_0=cast=(GtkTreeView *)
-OS__gtk_tree_view_set_model_1=cast=(GtkTreeModel *)
-
-OS__gtk_tree_view_set_rules_hint=
-OS__gtk_tree_view_set_rules_hint_0=cast=(GtkTreeView *)
-OS__gtk_tree_view_set_rules_hint_1=
-
-OS__gtk_tree_view_set_search_column=
-OS__gtk_tree_view_set_search_column_0=cast=(GtkTreeView *)
-OS__gtk_tree_view_set_search_column_1=cast=(gint)
-
-OS__gtk_tree_view_tree_to_widget_coords=
-OS__gtk_tree_view_tree_to_widget_coords_0=cast=(GtkTreeView *)
-OS__gtk_tree_view_tree_to_widget_coords_1=cast=(gint)
-OS__gtk_tree_view_tree_to_widget_coords_2=cast=gint
-OS__gtk_tree_view_tree_to_widget_coords_3=cast=gint *
-OS__gtk_tree_view_tree_to_widget_coords_4=cast=gint *
-
-OS__gtk_tree_view_unset_rows_drag_dest=
-OS__gtk_tree_view_unset_rows_drag_dest_0=cast=(GtkTreeView *)
-
-OS__gtk_tree_view_widget_to_tree_coords=
-OS__gtk_tree_view_widget_to_tree_coords_0=cast=(GtkTreeView *)
-OS__gtk_tree_view_widget_to_tree_coords_1=
-OS__gtk_tree_view_widget_to_tree_coords_2=
-OS__gtk_tree_view_widget_to_tree_coords_3=
-OS__gtk_tree_view_widget_to_tree_coords_4=
-
-OS__gtk_vbox_new=
-OS__gtk_vbox_new_0=cast=(gboolean)
-OS__gtk_vbox_new_1=cast=(gint)
-
-OS__gtk_vscale_new=
-OS__gtk_vscale_new_0=cast=(GtkAdjustment *)
-
-OS__gtk_vscrollbar_new=
-OS__gtk_vscrollbar_new_0=cast=(GtkAdjustment *)
-
-OS__gtk_vseparator_new=
-
-OS__gtk_widget_add_accelerator=
-OS__gtk_widget_add_accelerator_0=cast=(GtkWidget *)
-OS__gtk_widget_add_accelerator_1=cast=(const gchar *)
-OS__gtk_widget_add_accelerator_2=cast=(GtkAccelGroup *)
-OS__gtk_widget_add_accelerator_3=cast=(guint)
-OS__gtk_widget_add_accelerator_4=cast=(GdkModifierType)
-OS__gtk_widget_add_accelerator_5=
-
-OS__gtk_widget_add_events=
-OS__gtk_widget_add_events_0=cast=(GtkWidget *)
-OS__gtk_widget_add_events_1=cast=(gint)
-
-OS__gtk_widget_child_focus=
-OS__gtk_widget_child_focus_0=cast=(GtkWidget *)
-OS__gtk_widget_child_focus_1=
-
-OS__1gtk_1widget_1create_1pango_1layout__II=
-OS__1gtk_1widget_1create_1pango_1layout__II_0=cast=(GtkWidget *)
-OS__1gtk_1widget_1create_1pango_1layout__II_1=cast=(const gchar *)
-
-OS__1gtk_1widget_1create_1pango_1layout__I_3B=
-OS__1gtk_1widget_1create_1pango_1layout__I_3B_0=cast=(GtkWidget *)
-OS__1gtk_1widget_1create_1pango_1layout__I_3B_1=cast=(const gchar *)
-
-OS__gtk_widget_destroy=
-OS__gtk_widget_destroy_0=cast=(GtkWidget *)
-
-OS__gtk_widget_event=
-OS__gtk_widget_event_0=cast=GtkWidget *
-OS__gtk_widget_event_1=cast=GdkEvent *
-
-OS__gtk_widget_get_accessible=
-OS__gtk_widget_get_accessible_0=cast=(GtkWidget *)
-
-OS__gtk_widget_get_child_visible=
-OS__gtk_widget_get_child_visible_0=cast=(GtkWidget *)
-
-OS__gtk_widget_get_default_direction=
-
-OS__gtk_widget_get_default_style=
-
-OS__gtk_widget_get_direction=
-OS__gtk_widget_get_direction_0=cast=(GtkWidget *)
-
-OS__gtk_widget_get_events=
-OS__gtk_widget_get_events_0=cast=GtkWidget *
-
-OS__gtk_widget_get_modifier_style=
-OS__gtk_widget_get_modifier_style_0=cast=(GtkWidget *)
-
-OS__gtk_widget_get_pango_context=
-OS__gtk_widget_get_pango_context_0=cast=(GtkWidget *)
-
-OS__gtk_widget_get_parent=
-OS__gtk_widget_get_parent_0=cast=(GtkWidget *)
-
-OS__gtk_widget_get_size_request=
-OS__gtk_widget_get_size_request_0=cast=(GtkWidget *)
-OS__gtk_widget_get_size_request_1=cast=(gint *)
-OS__gtk_widget_get_size_request_2=cast=(gint *)
-
-OS__gtk_widget_get_style=
-OS__gtk_widget_get_style_0=cast=(GtkWidget *)
-
-OS__gtk_widget_get_toplevel=
-OS__gtk_widget_get_toplevel_0=cast=(GtkWidget *)
-
-OS__gtk_widget_grab_focus=
-OS__gtk_widget_grab_focus_0=cast=(GtkWidget *)
-
-OS__gtk_widget_hide=
-OS__gtk_widget_hide_0=cast=(GtkWidget *)
-
-OS__gtk_widget_is_focus=
-OS__gtk_widget_is_focus_0=cast=(GtkWidget *)
-
-OS__gtk_widget_map=
-OS__gtk_widget_map_0=cast=(GtkWidget *)
-
-OS__gtk_widget_mnemonic_activate=
-OS__gtk_widget_mnemonic_activate_0=cast=(GtkWidget *)
-OS__gtk_widget_mnemonic_activate_1=cast=gboolean
-
-OS__gtk_widget_modify_base=
-OS__gtk_widget_modify_base_0=cast=(GtkWidget *)
-OS__gtk_widget_modify_base_1=cast=(GtkStateType)
-OS__gtk_widget_modify_base_2=cast=(GdkColor *),flags=no_out
-
-OS__gtk_widget_modify_bg=
-OS__gtk_widget_modify_bg_0=cast=(GtkWidget *)
-OS__gtk_widget_modify_bg_1=cast=(GtkStateType)
-OS__gtk_widget_modify_bg_2=cast=(GdkColor *),flags=no_out
-
-OS__gtk_widget_modify_fg=
-OS__gtk_widget_modify_fg_0=cast=(GtkWidget *)
-OS__gtk_widget_modify_fg_1=cast=(GtkStateType)
-OS__gtk_widget_modify_fg_2=cast=(GdkColor *),flags=no_out
-
-OS__gtk_widget_modify_font=
-OS__gtk_widget_modify_font_0=cast=(GtkWidget *)
-OS__gtk_widget_modify_font_1=cast=(PangoFontDescription *)
-
-OS__gtk_widget_modify_style=
-OS__gtk_widget_modify_style_0=cast=(GtkWidget *)
-OS__gtk_widget_modify_style_1=cast=(GtkRcStyle *)
-
-OS__gtk_widget_modify_text=
-OS__gtk_widget_modify_text_0=cast=(GtkWidget *)
-OS__gtk_widget_modify_text_1=cast=(GtkStateType)
-OS__gtk_widget_modify_text_2=cast=(GdkColor *),flags=no_out
-
-OS__gtk_widget_queue_resize=
-OS__gtk_widget_queue_resize_0=cast=GtkWidget *
-
-OS__gtk_widget_realize=
-OS__gtk_widget_realize_0=cast=(GtkWidget *)
-
-OS__gtk_widget_remove_accelerator=
-OS__gtk_widget_remove_accelerator_0=cast=(GtkWidget *)
-OS__gtk_widget_remove_accelerator_1=cast=(GtkAccelGroup *)
-OS__gtk_widget_remove_accelerator_2=cast=(guint)
-OS__gtk_widget_remove_accelerator_3=cast=(GdkModifierType)
-
-OS__gtk_widget_reparent=
-OS__gtk_widget_reparent_0=cast=(GtkWidget *)
-OS__gtk_widget_reparent_1=cast=(GtkWidget *)
-
-OS__gtk_widget_set_app_paintable=
-OS__gtk_widget_set_app_paintable_0=cast=(GtkWidget *)
-OS__gtk_widget_set_app_paintable_1=
-
-OS__gtk_widget_set_default_direction=
-OS__gtk_widget_set_default_direction_0=cast=(GtkTextDirection)
-
-OS__gtk_widget_set_direction=
-OS__gtk_widget_set_direction_0=cast=(GtkWidget *)
-OS__gtk_widget_set_direction_1=cast=(GtkTextDirection)
-
-OS__gtk_widget_set_double_buffered=
-OS__gtk_widget_set_double_buffered_0=cast=(GtkWidget *)
-OS__gtk_widget_set_double_buffered_1=cast=(gboolean)
-
-OS__gtk_widget_set_name=
-OS__gtk_widget_set_name_0=cast=(GtkWidget *)
-OS__gtk_widget_set_name_1=cast=(const char *)
-
-OS__gtk_widget_set_parent_window=
-OS__gtk_widget_set_parent_window_0=cast=(GtkWidget *)
-OS__gtk_widget_set_parent_window_1=cast=(GdkWindow *)
-
-OS__gtk_widget_set_redraw_on_allocate=
-OS__gtk_widget_set_redraw_on_allocate_0=cast=(GtkWidget *)
-OS__gtk_widget_set_redraw_on_allocate_1=cast=(gboolean)
-
-OS__gtk_widget_set_sensitive=
-OS__gtk_widget_set_sensitive_0=cast=(GtkWidget *)
-OS__gtk_widget_set_sensitive_1=cast=(gboolean)
-
-OS__gtk_widget_set_size_request=
-OS__gtk_widget_set_size_request_0=cast=(GtkWidget *)
-OS__gtk_widget_set_size_request_1=cast=(gint)
-OS__gtk_widget_set_size_request_2=cast=(gint)
-
-OS__gtk_widget_set_state=
-OS__gtk_widget_set_state_0=cast=(GtkWidget *)
-OS__gtk_widget_set_state_1=cast=(GtkStateType)
-
-OS__gtk_widget_set_style=
-OS__gtk_widget_set_style_0=cast=(GtkWidget *)
-OS__gtk_widget_set_style_1=cast=(GtkStyle *)
-
-OS__gtk_widget_shape_combine_mask=
-OS__gtk_widget_shape_combine_mask_0=cast=(GtkWidget *)
-OS__gtk_widget_shape_combine_mask_1=cast=(GdkBitmap *)
-OS__gtk_widget_shape_combine_mask_2=cast=gint
-OS__gtk_widget_shape_combine_mask_3=cast=gint
-
-OS__gtk_widget_show=
-OS__gtk_widget_show_0=cast=(GtkWidget *)
-
-OS__gtk_widget_show_now=
-OS__gtk_widget_show_now_0=cast=(GtkWidget *)
-
-OS__gtk_widget_size_allocate=
-OS__gtk_widget_size_allocate_0=cast=(GtkWidget *)
-OS__gtk_widget_size_allocate_1=cast=(GtkAllocation *),flags=no_out
-
-OS__gtk_widget_size_request=
-OS__gtk_widget_size_request_0=cast=(GtkWidget *)
-OS__gtk_widget_size_request_1=cast=(GtkRequisition *),flags=no_in
-
-OS__1gtk_1widget_1style_1get__I_3B_3II=
-OS__1gtk_1widget_1style_1get__I_3B_3II_0=cast=(GtkWidget *)
-OS__1gtk_1widget_1style_1get__I_3B_3II_1=cast=(const gchar *)
-OS__1gtk_1widget_1style_1get__I_3B_3II_2=
-OS__1gtk_1widget_1style_1get__I_3B_3II_3=
-
-OS__1gtk_1widget_1style_1get__I_3B_3JI=
-OS__1gtk_1widget_1style_1get__I_3B_3JI_0=cast=(GtkWidget *)
-OS__1gtk_1widget_1style_1get__I_3B_3JI_1=cast=(const gchar *)
-OS__1gtk_1widget_1style_1get__I_3B_3JI_2=
-OS__1gtk_1widget_1style_1get__I_3B_3JI_3=
-
-OS__gtk_widget_translate_coordinates=
-OS__gtk_widget_translate_coordinates_0=cast=(GtkWidget *)
-OS__gtk_widget_translate_coordinates_1=cast=(GtkWidget *)
-OS__gtk_widget_translate_coordinates_2=
-OS__gtk_widget_translate_coordinates_3=
-OS__gtk_widget_translate_coordinates_4=
-OS__gtk_widget_translate_coordinates_5=
-
-OS__gtk_widget_unrealize=
-OS__gtk_widget_unrealize_0=cast=(GtkWidget *)
-
-OS__gtk_window_activate_default=
-OS__gtk_window_activate_default_0=cast=(GtkWindow *)
-
-OS__gtk_window_add_accel_group=
-OS__gtk_window_add_accel_group_0=cast=(GtkWindow *)
-OS__gtk_window_add_accel_group_1=cast=(GtkAccelGroup *)
-
-OS__gtk_window_deiconify=
-OS__gtk_window_deiconify_0=cast=(GtkWindow *)
-
-OS__gtk_window_get_focus=
-OS__gtk_window_get_focus_0=cast=(GtkWindow *)
-
-OS__gtk_window_get_icon_list=
-OS__gtk_window_get_icon_list_0=cast=(GtkWindow *)
-
-OS__gtk_window_get_mnemonic_modifier=
-OS__gtk_window_get_mnemonic_modifier_0=cast=(GtkWindow *)
-
-OS__gtk_window_get_position=
-OS__gtk_window_get_position_0=cast=(GtkWindow *)
-OS__gtk_window_get_position_1=cast=(gint *)
-OS__gtk_window_get_position_2=cast=(gint *)
-
-OS__gtk_window_get_size=
-OS__gtk_window_get_size_0=cast=(GtkWindow *)
-OS__gtk_window_get_size_1=cast=(gint *)
-OS__gtk_window_get_size_2=cast=(gint *)
-
-OS__gtk_window_iconify=
-OS__gtk_window_iconify_0=cast=(GtkWindow *)
-
-OS__gtk_window_maximize=
-OS__gtk_window_maximize_0=cast=(GtkWindow *)
-
-OS__gtk_window_move=
-OS__gtk_window_move_0=cast=(GtkWindow *)
-OS__gtk_window_move_1=cast=(gint)
-OS__gtk_window_move_2=cast=(gint)
-
-OS__gtk_window_new=
-OS__gtk_window_new_0=cast=(GtkWindowType)
-
-OS__gtk_window_present=
-OS__gtk_window_present_0=cast=(GtkWindow *)
-
-OS__gtk_window_remove_accel_group=
-OS__gtk_window_remove_accel_group_0=cast=(GtkWindow *)
-OS__gtk_window_remove_accel_group_1=cast=(GtkAccelGroup *)
-
-OS__gtk_window_resize=
-OS__gtk_window_resize_0=cast=(GtkWindow *)
-OS__gtk_window_resize_1=cast=(gint)
-OS__gtk_window_resize_2=cast=(gint)
-
-OS__gtk_window_set_default=
-OS__gtk_window_set_default_0=cast=(GtkWindow *)
-OS__gtk_window_set_default_1=cast=(GtkWidget *)
-
-OS__gtk_window_set_destroy_with_parent=
-OS__gtk_window_set_destroy_with_parent_0=cast=(GtkWindow *)
-OS__gtk_window_set_destroy_with_parent_1=cast=(gboolean)
-
-OS__gtk_window_set_geometry_hints=
-OS__gtk_window_set_geometry_hints_0=cast=GtkWindow *
-OS__gtk_window_set_geometry_hints_1=cast=(GtkWidget *)
-OS__gtk_window_set_geometry_hints_2=flags=no_out
-OS__gtk_window_set_geometry_hints_3=
-
-OS__gtk_window_set_icon_list=
-OS__gtk_window_set_icon_list_0=cast=(GtkWindow *)
-OS__gtk_window_set_icon_list_1=cast=(GList *)
-
-OS__gtk_window_set_modal=
-OS__gtk_window_set_modal_0=cast=(GtkWindow *)
-OS__gtk_window_set_modal_1=cast=(gboolean)
-
-OS__gtk_window_set_resizable=
-OS__gtk_window_set_resizable_0=cast=(GtkWindow *)
-OS__gtk_window_set_resizable_1=cast=(gboolean)
-
-OS__gtk_window_set_title=
-OS__gtk_window_set_title_0=cast=(GtkWindow *)
-OS__gtk_window_set_title_1=cast=(const gchar *)
-
-OS__gtk_window_set_transient_for=
-OS__gtk_window_set_transient_for_0=cast=(GtkWindow *)
-OS__gtk_window_set_transient_for_1=cast=(GtkWindow *)
-
-OS__gtk_window_set_type_hint=
-OS__gtk_window_set_type_hint_0=cast=(GtkWindow *)
-OS__gtk_window_set_type_hint_1=
-
-OS__gtk_window_unmaximize=
-OS__gtk_window_unmaximize_0=cast=(GtkWindow *)
-
-OS__pango_attr_background_new=
-OS__pango_attr_background_new_0=
-OS__pango_attr_background_new_1=
-OS__pango_attr_background_new_2=
-
-OS__pango_attr_font_desc_new=
-OS__pango_attr_font_desc_new_0=cast=const PangoFontDescription *
-
-OS__pango_attr_foreground_new=
-OS__pango_attr_foreground_new_0=
-OS__pango_attr_foreground_new_1=
-OS__pango_attr_foreground_new_2=
-
-OS__pango_attr_list_change=
-OS__pango_attr_list_change_0=cast=PangoAttrList *
-OS__pango_attr_list_change_1=cast=PangoAttribute *
-
-OS__pango_attr_list_insert=
-OS__pango_attr_list_insert_0=cast=PangoAttrList *
-OS__pango_attr_list_insert_1=cast=PangoAttribute *
-
-OS__pango_attr_list_new=
-
-OS__pango_attr_list_unref=
-OS__pango_attr_list_unref_0=cast=(PangoAttrList *)
-
-OS__pango_attr_rise_new=
-OS__pango_attr_rise_new_0=
-
-OS__pango_attr_shape_new=
-OS__pango_attr_shape_new_0=flags=no_out
-OS__pango_attr_shape_new_1=flags=no_out
-
-OS__pango_attr_strikethrough_new=
-OS__pango_attr_strikethrough_new_0=
-
-OS__pango_attr_underline_new=
-OS__pango_attr_underline_new_0=
-
-OS__pango_attr_weight_new=
-OS__pango_attr_weight_new_0=
-
-OS__pango_context_get_base_dir=
-OS__pango_context_get_base_dir_0=cast=(PangoContext *)
-
-OS__pango_context_get_language=
-OS__pango_context_get_language_0=cast=(PangoContext *)
-
-OS__pango_context_get_metrics=
-OS__pango_context_get_metrics_0=cast=(PangoContext *)
-OS__pango_context_get_metrics_1=cast=(const PangoFontDescription *)
-OS__pango_context_get_metrics_2=cast=(PangoLanguage *)
-
-OS__pango_context_list_families=
-OS__pango_context_list_families_0=cast=(PangoContext *)
-OS__pango_context_list_families_1=cast=(PangoFontFamily ***)
-OS__pango_context_list_families_2=cast=(int *)
-
-OS__pango_context_set_base_dir=
-OS__pango_context_set_base_dir_0=cast=(PangoContext *)
-OS__pango_context_set_base_dir_1=
-
-OS__pango_context_set_language=
-OS__pango_context_set_language_0=cast=(PangoContext *)
-OS__pango_context_set_language_1=cast=(PangoLanguage *)
-
-OS__pango_font_description_copy=
-OS__pango_font_description_copy_0=cast=(PangoFontDescription *)
-
-OS__pango_font_description_free=
-OS__pango_font_description_free_0=cast=(PangoFontDescription *)
-
-OS__pango_font_description_from_string=
-OS__pango_font_description_from_string_0=cast=(const char *),flags=no_out critical
-
-OS__pango_font_description_get_family=
-OS__pango_font_description_get_family_0=cast=(PangoFontDescription *)
-
-OS__pango_font_description_get_size=
-OS__pango_font_description_get_size_0=cast=(PangoFontDescription *)
-
-OS__pango_font_description_get_style=
-OS__pango_font_description_get_style_0=cast=(PangoFontDescription *)
-
-OS__pango_font_description_get_weight=
-OS__pango_font_description_get_weight_0=cast=(PangoFontDescription *)
-
-OS__pango_font_description_new=
-
-OS__pango_font_description_set_family=
-OS__pango_font_description_set_family_0=cast=(PangoFontDescription *)
-OS__pango_font_description_set_family_1=cast=(const char *),flags=no_out critical
-
-OS__pango_font_description_set_size=
-OS__pango_font_description_set_size_0=cast=(PangoFontDescription *)
-OS__pango_font_description_set_size_1=cast=(gint)
-
-OS__pango_font_description_set_stretch=
-OS__pango_font_description_set_stretch_0=cast=(PangoFontDescription *)
-OS__pango_font_description_set_stretch_1=cast=(PangoStretch)
-
-OS__pango_font_description_set_style=
-OS__pango_font_description_set_style_0=cast=(PangoFontDescription *)
-OS__pango_font_description_set_style_1=cast=(PangoStyle)
-
-OS__pango_font_description_set_weight=
-OS__pango_font_description_set_weight_0=cast=(PangoFontDescription *)
-OS__pango_font_description_set_weight_1=cast=(PangoWeight)
-
-OS__pango_font_description_to_string=
-OS__pango_font_description_to_string_0=cast=(PangoFontDescription *)
-
-OS__pango_font_face_describe=
-OS__pango_font_face_describe_0=cast=(PangoFontFace *)
-
-OS__pango_font_family_get_name=
-OS__pango_font_family_get_name_0=cast=(PangoFontFamily *)
-
-OS__pango_font_family_list_faces=
-OS__pango_font_family_list_faces_0=cast=(PangoFontFamily *)
-OS__pango_font_family_list_faces_1=cast=(PangoFontFace ***)
-OS__pango_font_family_list_faces_2=cast=(int *)
-
-OS__pango_font_get_metrics=
-OS__pango_font_get_metrics_0=cast=PangoFont *
-OS__pango_font_get_metrics_1=cast=PangoLanguage *
-
-OS__pango_font_metrics_get_approximate_char_width=
-OS__pango_font_metrics_get_approximate_char_width_0=cast=(PangoFontMetrics *)
-
-OS__pango_font_metrics_get_ascent=
-OS__pango_font_metrics_get_ascent_0=cast=(PangoFontMetrics *)
-
-OS__pango_font_metrics_get_descent=
-OS__pango_font_metrics_get_descent_0=cast=(PangoFontMetrics *)
-
-OS__pango_font_metrics_unref=
-OS__pango_font_metrics_unref_0=cast=(PangoFontMetrics *)
-
-OS__pango_language_from_string=
-OS__pango_language_from_string_0=cast=(const char *),flags=no_out
-
-OS__pango_layout_context_changed=
-OS__pango_layout_context_changed_0=cast=PangoLayout *
-
-OS__pango_layout_get_alignment=
-OS__pango_layout_get_alignment_0=cast=PangoLayout*
-
-OS__pango_layout_get_attributes=
-OS__pango_layout_get_attributes_0=cast=PangoLayout *
-
-OS__pango_layout_get_indent=
-OS__pango_layout_get_indent_0=cast=(PangoLayout*)
-
-OS__pango_layout_get_iter=
-OS__pango_layout_get_iter_0=cast=(PangoLayout*)
-
-OS__pango_layout_get_justify=
-OS__pango_layout_get_justify_0=cast=(PangoLayout*)
-
-OS__pango_layout_get_line=
-OS__pango_layout_get_line_0=cast=PangoLayout *
-OS__pango_layout_get_line_1=
-
-OS__pango_layout_get_line_count=
-OS__pango_layout_get_line_count_0=cast=PangoLayout*
-
-OS__pango_layout_get_log_attrs=
-OS__pango_layout_get_log_attrs_0=cast=PangoLayout*
-OS__pango_layout_get_log_attrs_1=cast=PangoLogAttr **
-OS__pango_layout_get_log_attrs_2=cast=(int *)
-
-OS__pango_layout_get_size=
-OS__pango_layout_get_size_0=cast=(PangoLayout *)
-OS__pango_layout_get_size_1=cast=(int *)
-OS__pango_layout_get_size_2=cast=(int *)
-
-OS__pango_layout_get_spacing=
-OS__pango_layout_get_spacing_0=cast=PangoLayout*
-
-OS__pango_layout_get_tabs=
-OS__pango_layout_get_tabs_0=cast=PangoLayout*
-
-OS__pango_layout_get_text=
-OS__pango_layout_get_text_0=cast=PangoLayout *
-
-OS__pango_layout_get_width=
-OS__pango_layout_get_width_0=cast=PangoLayout *
-
-OS__pango_layout_index_to_pos=
-OS__pango_layout_index_to_pos_0=cast=(PangoLayout*)
-OS__pango_layout_index_to_pos_1=
-OS__pango_layout_index_to_pos_2=flags=no_in
-
-OS__pango_layout_iter_free=
-OS__pango_layout_iter_free_0=cast=PangoLayoutIter*
-
-OS__pango_layout_iter_get_index=
-OS__pango_layout_iter_get_index_0=cast=(PangoLayoutIter*)
-
-OS__pango_layout_iter_get_line_extents=
-OS__pango_layout_iter_get_line_extents_0=cast=(PangoLayoutIter*)
-OS__pango_layout_iter_get_line_extents_1=flags=no_in
-OS__pango_layout_iter_get_line_extents_2=flags=no_in
-
-OS__pango_layout_iter_get_run=
-OS__pango_layout_iter_get_run_0=cast=PangoLayoutIter*
-
-OS__pango_layout_iter_next_line=
-OS__pango_layout_iter_next_line_0=cast=PangoLayoutIter*
-
-OS__pango_layout_iter_next_run=
-OS__pango_layout_iter_next_run_0=cast=PangoLayoutIter*
-
-OS__pango_layout_line_get_extents=
-OS__pango_layout_line_get_extents_0=cast=PangoLayoutLine*
-OS__pango_layout_line_get_extents_1=cast=PangoRectangle *,flags=no_in
-OS__pango_layout_line_get_extents_2=cast=PangoRectangle *,flags=no_in
-
-OS__pango_layout_line_x_to_index=
-OS__pango_layout_line_x_to_index_0=cast=PangoLayoutLine*
-OS__pango_layout_line_x_to_index_1=
-OS__pango_layout_line_x_to_index_2=cast=int *
-OS__pango_layout_line_x_to_index_3=cast=int *
-
-OS__pango_layout_new=
-OS__pango_layout_new_0=cast=(PangoContext *)
-
-OS__pango_layout_set_alignment=
-OS__pango_layout_set_alignment_0=cast=(PangoLayout *)
-OS__pango_layout_set_alignment_1=
-
-OS__pango_layout_set_attributes=
-OS__pango_layout_set_attributes_0=cast=(PangoLayout *)
-OS__pango_layout_set_attributes_1=cast=PangoAttrList *
-
-OS__pango_layout_set_auto_dir=flags=dynamic
-OS__pango_layout_set_auto_dir_0=
-OS__pango_layout_set_auto_dir_1=
-
-OS__pango_layout_set_font_description=
-OS__pango_layout_set_font_description_0=cast=(PangoLayout *)
-OS__pango_layout_set_font_description_1=cast=(PangoFontDescription *)
-
-OS__pango_layout_set_indent=
-OS__pango_layout_set_indent_0=cast=(PangoLayout*)
-OS__pango_layout_set_indent_1=
-
-OS__pango_layout_set_justify=
-OS__pango_layout_set_justify_0=cast=(PangoLayout*)
-OS__pango_layout_set_justify_1=
-
-OS__pango_layout_set_single_paragraph_mode=
-OS__pango_layout_set_single_paragraph_mode_0=cast=PangoLayout *
-OS__pango_layout_set_single_paragraph_mode_1=cast=gboolean
-
-OS__pango_layout_set_spacing=
-OS__pango_layout_set_spacing_0=cast=(PangoLayout *)
-OS__pango_layout_set_spacing_1=
-
-OS__pango_layout_set_tabs=
-OS__pango_layout_set_tabs_0=cast=PangoLayout *
-OS__pango_layout_set_tabs_1=cast=(PangoTabArray *)
-
-OS__pango_layout_set_text=
-OS__pango_layout_set_text_0=cast=(PangoLayout *)
-OS__pango_layout_set_text_1=cast=(const char *),flags=no_out critical
-OS__pango_layout_set_text_2=cast=(int)
-
-OS__pango_layout_set_width=
-OS__pango_layout_set_width_0=cast=(PangoLayout *)
-OS__pango_layout_set_width_1=
-
-OS__pango_layout_set_wrap=
-OS__pango_layout_set_wrap_0=cast=PangoLayout *
-OS__pango_layout_set_wrap_1=
-
-OS__pango_layout_xy_to_index=
-OS__pango_layout_xy_to_index_0=cast=PangoLayout *
-OS__pango_layout_xy_to_index_1=
-OS__pango_layout_xy_to_index_2=
-OS__pango_layout_xy_to_index_3=cast=int *
-OS__pango_layout_xy_to_index_4=cast=int *
-
-OS__pango_tab_array_free=
-OS__pango_tab_array_free_0=cast=(PangoTabArray *)
-
-OS__pango_tab_array_get_size=
-OS__pango_tab_array_get_size_0=cast=(PangoTabArray *)
-
-OS__pango_tab_array_get_tabs=
-OS__pango_tab_array_get_tabs_0=cast=(PangoTabArray *)
-OS__pango_tab_array_get_tabs_1=cast=(PangoTabAlign **)
-OS__pango_tab_array_get_tabs_2=cast=(int **)
-
-OS__pango_tab_array_new=
-OS__pango_tab_array_new_0=cast=(gint)
-OS__pango_tab_array_new_1=cast=(gboolean)
-
-OS__pango_tab_array_set_tab=
-OS__pango_tab_array_set_tab_0=cast=(PangoTabArray *)
-OS__pango_tab_array_set_tab_1=cast=(gint)
-OS__pango_tab_array_set_tab_2=cast=(PangoTabAlign)
-OS__pango_tab_array_set_tab_3=cast=(gint)
-
-OS_g_main_context_wakeup=
-OS_g_main_context_wakeup_0=cast=GMainContext *
-
-OS_getenv=
-OS_getenv_0=cast=const char *
-
-OS_localeconv_decimal_point=
-
-OS_memmove__III=
-OS_memmove__III_0=cast=(void *)
-OS_memmove__III_1=cast=(const void *)
-OS_memmove__III_2=cast=(size_t)
-
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GInterfaceInfo_2I=
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GInterfaceInfo_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GInterfaceInfo_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GInterfaceInfo_2I_2=cast=(size_t)
-
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GObjectClass_2=
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GObjectClass_2_0=cast=(void *),flags=no_in
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GObjectClass_2_1=cast=(const void *),flags=no_out
-
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GTypeInfo_2I=
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GTypeInfo_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GTypeInfo_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GTypeInfo_2I_2=cast=(size_t)
-
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GdkEventButton_2I=
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GdkEventButton_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GdkEventButton_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GdkEventButton_2I_2=cast=(size_t)
-
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GtkAdjustment_2=
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GtkAdjustment_2_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GtkAdjustment_2_1=cast=(const void *),flags=no_out
-
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GtkCellRendererClass_2=
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GtkCellRendererClass_2_0=
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GtkCellRendererClass_2_1=
-
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GtkFixed_2=
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GtkFixed_2_0=cast=(void *),flags=no_in
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GtkFixed_2_1=cast=(const void *),flags=no_out
-
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GtkTargetEntry_2I=
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GtkTargetEntry_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GtkTargetEntry_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GtkTargetEntry_2I_2=cast=(size_t)
-
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GtkWidgetClass_2=
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GtkWidgetClass_2_0=
-OS_memmove__ILorg_eclipse_swt_internal_gtk_GtkWidgetClass_2_1=flags=no_out
-
-OS_memmove__ILorg_eclipse_swt_internal_gtk_PangoAttribute_2I=
-OS_memmove__ILorg_eclipse_swt_internal_gtk_PangoAttribute_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_gtk_PangoAttribute_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_gtk_PangoAttribute_2I_2=cast=(size_t)
-
-OS_memmove__ILorg_eclipse_swt_internal_gtk_XButtonEvent_2I=
-OS_memmove__ILorg_eclipse_swt_internal_gtk_XButtonEvent_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_gtk_XButtonEvent_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_gtk_XButtonEvent_2I_2=cast=(size_t)
-
-OS_memmove__ILorg_eclipse_swt_internal_gtk_XClientMessageEvent_2I=
-OS_memmove__ILorg_eclipse_swt_internal_gtk_XClientMessageEvent_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_gtk_XClientMessageEvent_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_gtk_XClientMessageEvent_2I_2=cast=(size_t)
-
-OS_memmove__ILorg_eclipse_swt_internal_gtk_XCrossingEvent_2I=
-OS_memmove__ILorg_eclipse_swt_internal_gtk_XCrossingEvent_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_gtk_XCrossingEvent_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_gtk_XCrossingEvent_2I_2=cast=(size_t)
-
-OS_memmove__ILorg_eclipse_swt_internal_gtk_XExposeEvent_2I=
-OS_memmove__ILorg_eclipse_swt_internal_gtk_XExposeEvent_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_gtk_XExposeEvent_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_gtk_XExposeEvent_2I_2=cast=(size_t)
-
-OS_memmove__ILorg_eclipse_swt_internal_gtk_XFocusChangeEvent_2I=
-OS_memmove__ILorg_eclipse_swt_internal_gtk_XFocusChangeEvent_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_gtk_XFocusChangeEvent_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_gtk_XFocusChangeEvent_2I_2=cast=(size_t)
-
-OS_memmove__I_3BI=
-OS_memmove__I_3BI_0=cast=(void *)
-OS_memmove__I_3BI_1=cast=(const void *),flags=no_out critical
-OS_memmove__I_3BI_2=cast=(size_t)
-
-OS_memmove__I_3CI=
-OS_memmove__I_3CI_0=cast=(void *)
-OS_memmove__I_3CI_1=cast=(const void *),flags=no_out critical
-OS_memmove__I_3CI_2=cast=(size_t)
-
-OS_memmove__I_3DI=
-OS_memmove__I_3DI_0=cast=(void *)
-OS_memmove__I_3DI_1=cast=(const void *),flags=no_out critical
-OS_memmove__I_3DI_2=cast=(size_t)
-
-OS_memmove__I_3II=
-OS_memmove__I_3II_0=cast=(void *)
-OS_memmove__I_3II_1=cast=(const void *),flags=no_out critical
-OS_memmove__I_3II_2=cast=(size_t)
-
-OS_memmove__I_3JI=
-OS_memmove__I_3JI_0=cast=(void *)
-OS_memmove__I_3JI_1=cast=(const void *),flags=no_out critical
-OS_memmove__I_3JI_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GObjectClass_2I=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GObjectClass_2I_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GObjectClass_2I_1=cast=(const void *)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GTypeQuery_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GTypeQuery_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GTypeQuery_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GTypeQuery_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkColor_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkColor_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkColor_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkColor_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkDragContext_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkDragContext_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkDragContext_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkDragContext_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventAny_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventAny_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventAny_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventAny_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventButton_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventButton_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventButton_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventButton_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventCrossing_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventCrossing_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventCrossing_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventCrossing_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventExpose_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventExpose_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventExpose_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventExpose_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventFocus_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventFocus_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventFocus_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventFocus_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventKey_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventKey_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventKey_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventKey_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventMotion_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventMotion_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventMotion_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventMotion_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventScroll_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventScroll_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventScroll_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventScroll_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventVisibility_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventVisibility_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventVisibility_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventVisibility_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventWindowState_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventWindowState_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventWindowState_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventWindowState_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEvent_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEvent_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEvent_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkEvent_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkImage_2I=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkImage_2I_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkImage_2I_1=cast=(const void *)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkRectangle_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkRectangle_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkRectangle_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkRectangle_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkVisual_2I=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkVisual_2I_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GdkVisual_2I_1=cast=(const void *)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkAdjustment_2I=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkAdjustment_2I_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkAdjustment_2I_1=cast=(const void *)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkBorder_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkBorder_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkBorder_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkBorder_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkCellRendererClass_2I=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkCellRendererClass_2I_0=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkCellRendererClass_2I_1=
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkColorSelectionDialog_2I=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkColorSelectionDialog_2I_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkColorSelectionDialog_2I_1=cast=(const void *)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkCombo_2I=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkCombo_2I_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkCombo_2I_1=cast=(const void *)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkFileSelection_2I=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkFileSelection_2I_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkFileSelection_2I_1=cast=(const void *)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkFixed_2I=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkFixed_2I_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkFixed_2I_1=cast=(const void *)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkSelectionData_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkSelectionData_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkSelectionData_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkSelectionData_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkTargetPair_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkTargetPair_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkTargetPair_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkTargetPair_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkWidgetClass_2I=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkWidgetClass_2I_0=flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_GtkWidgetClass_2I_1=
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_PangoAttribute_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_PangoAttribute_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_PangoAttribute_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_PangoAttribute_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_PangoItem_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_PangoItem_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_PangoItem_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_PangoItem_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_PangoLayoutLine_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_PangoLayoutLine_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_PangoLayoutLine_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_PangoLayoutLine_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_PangoLayoutRun_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_PangoLayoutRun_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_PangoLayoutRun_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_PangoLayoutRun_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_PangoLogAttr_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_PangoLogAttr_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_PangoLogAttr_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_PangoLogAttr_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_XButtonEvent_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_XButtonEvent_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_XButtonEvent_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_XButtonEvent_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_XCrossingEvent_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_XCrossingEvent_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_XCrossingEvent_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_XCrossingEvent_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_XExposeEvent_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_XExposeEvent_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_XExposeEvent_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_XExposeEvent_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_XFocusChangeEvent_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_XFocusChangeEvent_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_XFocusChangeEvent_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_XFocusChangeEvent_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_gtk_XVisibilityEvent_2II=
-OS_memmove__Lorg_eclipse_swt_internal_gtk_XVisibilityEvent_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_gtk_XVisibilityEvent_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_gtk_XVisibilityEvent_2II_2=cast=(size_t)
-
-OS_memmove___3BII=
-OS_memmove___3BII_0=cast=(void *),flags=no_in critical
-OS_memmove___3BII_1=cast=(const void *)
-OS_memmove___3BII_2=cast=(size_t)
-
-OS_memmove___3CII=
-OS_memmove___3CII_0=cast=(void *),flags=no_in critical
-OS_memmove___3CII_1=cast=(const void *)
-OS_memmove___3CII_2=cast=(size_t)
-
-OS_memmove___3III=
-OS_memmove___3III_0=cast=(void *),flags=no_in critical
-OS_memmove___3III_1=cast=(const void *)
-OS_memmove___3III_2=cast=(size_t)
-
-OS_memmove___3I_3BI=
-OS_memmove___3I_3BI_0=cast=(void *),flags=no_in critical
-OS_memmove___3I_3BI_1=cast=(const void *)
-OS_memmove___3I_3BI_2=cast=(size_t)
-
-OS_memmove___3JII=
-OS_memmove___3JII_0=cast=(void *),flags=no_in critical
-OS_memmove___3JII_1=cast=const void *,flags=no_out critical
-OS_memmove___3JII_2=cast=(size_t)
-
-OS_memset=
-OS_memset_0=cast=(void *)
-OS_memset_1=cast=(char)
-OS_memset_2=cast=(size_t)
-
-OS_strlen=
-OS_strlen_0=cast=(const char *)
-
-
-org_eclipse_swt_internal_gtk_PangoAttribute=
-PangoAttribute_klass=cast=const PangoAttrClass *
-PangoAttribute_start_index=
-PangoAttribute_end_index=
-
-org_eclipse_swt_internal_gtk_PangoItem=
-PangoItem_offset=
-PangoItem_length=
-PangoItem_num_chars=
-PangoItem_analysis_shape_engine=accessor=analysis.shape_engine,cast=(PangoEngineShape *)
-PangoItem_analysis_lang_engine=accessor=analysis.lang_engine,cast=PangoEngineLang *
-PangoItem_analysis_font=accessor=analysis.font,cast=PangoFont *
-PangoItem_analysis_level=accessor=analysis.level
-PangoItem_analysis_language=accessor=analysis.language,cast=(PangoLanguage *)
-PangoItem_analysis_extra_attrs=accessor=analysis.extra_attrs,cast=GSList *
-
-org_eclipse_swt_internal_gtk_PangoLayoutLine=
-PangoLayoutLine_layout=cast=PangoLayout *
-PangoLayoutLine_start_index=
-PangoLayoutLine_length=
-PangoLayoutLine_runs=cast=GSList *
-
-org_eclipse_swt_internal_gtk_PangoLayoutRun=
-PangoLayoutRun_item=cast=PangoItem *
-PangoLayoutRun_glyphs=cast=PangoGlyphString *
-
-org_eclipse_swt_internal_gtk_PangoLogAttr=
-PangoLogAttr_is_line_break=
-PangoLogAttr_is_mandatory_break=
-PangoLogAttr_is_char_break=
-PangoLogAttr_is_white=
-PangoLogAttr_is_cursor_position=
-PangoLogAttr_is_word_start=
-PangoLogAttr_is_word_end=
-PangoLogAttr_is_sentence_boundary=
-PangoLogAttr_is_sentence_start=
-PangoLogAttr_is_sentence_end=
-
-org_eclipse_swt_internal_gtk_PangoRectangle=
-PangoRectangle_x=
-PangoRectangle_y=
-PangoRectangle_width=
-PangoRectangle_height=
-
-org_eclipse_swt_internal_gtk_XAnyEvent=
-XAnyEvent_serial=
-XAnyEvent_send_event=
-XAnyEvent_display=cast=Display *
-XAnyEvent_window=cast=Window
-
-org_eclipse_swt_internal_gtk_XButtonEvent=
-XButtonEvent_root=
-XButtonEvent_subwindow=
-XButtonEvent_time=
-XButtonEvent_x=
-XButtonEvent_y=
-XButtonEvent_x_root=
-XButtonEvent_y_root=
-XButtonEvent_state=
-XButtonEvent_button=
-XButtonEvent_same_screen=
-
-org_eclipse_swt_internal_gtk_XClientMessageEvent=
-XClientMessageEvent_type=
-XClientMessageEvent_serial=
-XClientMessageEvent_send_event=
-XClientMessageEvent_display=cast=(Display *)
-XClientMessageEvent_window=cast=(Window)
-XClientMessageEvent_message_type=cast=(Atom)
-XClientMessageEvent_format=
-XClientMessageEvent_data=accessor=data.l,cast=(long *)
-
-org_eclipse_swt_internal_gtk_XCrossingEvent=
-XCrossingEvent_root=cast=(Window)
-XCrossingEvent_subwindow=cast=(Window)
-XCrossingEvent_time=cast=Time
-XCrossingEvent_x=
-XCrossingEvent_y=
-XCrossingEvent_x_root=
-XCrossingEvent_y_root=
-XCrossingEvent_mode=
-XCrossingEvent_detail=
-XCrossingEvent_same_screen=cast=Bool
-XCrossingEvent_focus=cast=Bool
-XCrossingEvent_state=cast=unsigned int
-
-org_eclipse_swt_internal_gtk_XEvent=
-XEvent_type=
-
-org_eclipse_swt_internal_gtk_XExposeEvent=
-XExposeEvent_x=
-XExposeEvent_y=
-XExposeEvent_width=
-XExposeEvent_height=
-XExposeEvent_count=
-
-org_eclipse_swt_internal_gtk_XFocusChangeEvent=
-XFocusChangeEvent_mode=
-XFocusChangeEvent_detail=
-
-org_eclipse_swt_internal_gtk_XRenderPictureAttributes=
-XRenderPictureAttributes_repeat=
-XRenderPictureAttributes_alpha_map=
-XRenderPictureAttributes_alpha_x_origin=
-XRenderPictureAttributes_alpha_y_origin=
-XRenderPictureAttributes_clip_x_origin=
-XRenderPictureAttributes_clip_y_origin=
-XRenderPictureAttributes_clip_mask=
-XRenderPictureAttributes_graphics_exposures=
-XRenderPictureAttributes_subwindow_mode=
-XRenderPictureAttributes_poly_edge=
-XRenderPictureAttributes_poly_mode=
-XRenderPictureAttributes_dither=
-XRenderPictureAttributes_component_alpha=
-
-org_eclipse_swt_internal_gtk_XVisibilityEvent=
-XVisibilityEvent_state=
-
-org_eclipse_swt_internal_gtk_XWindowChanges=
-XWindowChanges_x=
-XWindowChanges_y=
-XWindowChanges_width=
-XWindowChanges_height=
-XWindowChanges_border_width=
-XWindowChanges_sibling=
-XWindowChanges_stack_mode=
-
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gtk.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gtk.properties
index 61cc5e8..67885b3 100644
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gtk.properties
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.gtk.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2004 IBM Corporation and others.
+# Copyright (c) 2004, 2009 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
@@ -8,18 +8,18 @@
 # Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-swt_copyright=/*******************************************************************************\n\
- * Copyright (c) 2000, 2005 IBM Corporation and others. All rights reserved.\n\
- * The contents of this file are made available under the terms\n\
- * of the GNU Lesser General Public License (LGPL) Version 2.1 that\n\
- * accompanies this distribution (lgpl-v21.txt).  The LGPL is also\n\
- * available at http://www.gnu.org/licenses/lgpl.html.  If the version\n\
- * of the LGPL at http://www.gnu.org is different to the version of\n\
- * the LGPL accompanying this distribution and there is any conflict\n\
- * between the two license versions, the terms of the LGPL accompanying\n\
- * this distribution shall govern.\n\
- * \n\
- * Contributors:\n\
- *     IBM Corporation - initial API and implementation\n\
- *******************************************************************************/\n
- 
\ No newline at end of file
+swt_copyright=/*******************************************************************************\n \
+* Copyright (c) 2000, %END_YEAR IBM Corporation and others. All rights reserved.\n \
+* The contents of this file are made available under the terms\n \
+* of the GNU Lesser General Public License (LGPL) Version 2.1 that\n \
+* accompanies this distribution (lgpl-v21.txt).  The LGPL is also\n \
+* available at http://www.gnu.org/licenses/lgpl.html.  If the version\n \
+* of the LGPL at http://www.gnu.org is different to the version of\n \
+* the LGPL accompanying this distribution and there is any conflict\n \
+* between the two license versions, the terms of the LGPL accompanying\n \
+* this distribution shall govern.\n \
+* \n \
+* Contributors:\n \
+*     IBM Corporation - initial API and implementation\n \
+*******************************************************************************/\n
+ 
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.motif.OS.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.motif.OS.properties
deleted file mode 100644
index 7a7bca0..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.motif.OS.properties
+++ /dev/null
@@ -1,2773 +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
-###############################################################################
-org_eclipse_swt_internal_motif_OS=
-OS_CODESET=flags=const
-
-OS_FD_ISSET=
-OS_FD_ISSET_0=
-OS_FD_ISSET_1=cast=(fd_set *)
-
-OS_FD_SET=
-OS_FD_SET_0=
-OS_FD_SET_1=cast=(fd_set *)
-
-OS_FD_ZERO=
-OS_FD_ZERO_0=cast=(fd_set *)
-
-OS_LC_CTYPE=flags=const
-
-OS_MB_CUR_MAX=flags=const
-
-OS_MonitorEnter=flags=no_gen
-OS_MonitorEnter_0=
-
-OS_MonitorExit=flags=no_gen
-OS_MonitorExit_0=
-
-OS_XRenderPictureAttributes_sizeof=
-
-OS__Call=
-OS__Call_0=
-OS__Call_1=
-OS__Call_2=
-
-OS__ConnectionNumber=
-OS__ConnectionNumber_0=
-
-OS__XAllocColor=
-OS__XAllocColor_0=cast=(Display *)
-OS__XAllocColor_1=
-OS__XAllocColor_2=
-
-OS__XBell=
-OS__XBell_0=cast=(Display *)
-OS__XBell_1=
-
-OS__XBlackPixel=
-OS__XBlackPixel_0=cast=(Display *)
-OS__XBlackPixel_1=
-
-OS__XChangeActivePointerGrab=
-OS__XChangeActivePointerGrab_0=cast=(Display *)
-OS__XChangeActivePointerGrab_1=
-OS__XChangeActivePointerGrab_2=cast=(Cursor)
-OS__XChangeActivePointerGrab_3=cast=(Time)
-
-OS__XChangeProperty=
-OS__XChangeProperty_0=cast=Display *
-OS__XChangeProperty_1=cast=Window
-OS__XChangeProperty_2=cast=Atom
-OS__XChangeProperty_3=cast=Atom
-OS__XChangeProperty_4=
-OS__XChangeProperty_5=
-OS__XChangeProperty_6=cast=unsigned char *
-OS__XChangeProperty_7=
-
-OS__XChangeWindowAttributes=
-OS__XChangeWindowAttributes_0=cast=(Display *)
-OS__XChangeWindowAttributes_1=
-OS__XChangeWindowAttributes_2=
-OS__XChangeWindowAttributes_3=
-
-OS__XCheckIfEvent=
-OS__XCheckIfEvent_0=cast=(Display *)
-OS__XCheckIfEvent_1=cast=(XEvent *)
-OS__XCheckIfEvent_2=cast=(Bool (*)())
-OS__XCheckIfEvent_3=cast=(XPointer)
-
-OS__XCheckMaskEvent=
-OS__XCheckMaskEvent_0=cast=(Display *)
-OS__XCheckMaskEvent_1=
-OS__XCheckMaskEvent_2=cast=(XEvent *)
-
-OS__XCheckWindowEvent=
-OS__XCheckWindowEvent_0=cast=(Display *)
-OS__XCheckWindowEvent_1=cast=(Window)
-OS__XCheckWindowEvent_2=
-OS__XCheckWindowEvent_3=cast=(XEvent *)
-
-OS__XClearArea=
-OS__XClearArea_0=cast=(Display *)
-OS__XClearArea_1=
-OS__XClearArea_2=
-OS__XClearArea_3=
-OS__XClearArea_4=
-OS__XClearArea_5=
-OS__XClearArea_6=
-
-OS__XClipBox=
-OS__XClipBox_0=cast=(Region)
-OS__XClipBox_1=cast=(XRectangle *)
-
-OS__XCloseDisplay=
-OS__XCloseDisplay_0=cast=(Display *)
-
-OS__XCopyArea=
-OS__XCopyArea_0=cast=(Display *)
-OS__XCopyArea_1=
-OS__XCopyArea_2=
-OS__XCopyArea_3=cast=(GC)
-OS__XCopyArea_4=
-OS__XCopyArea_5=
-OS__XCopyArea_6=
-OS__XCopyArea_7=
-OS__XCopyArea_8=
-OS__XCopyArea_9=
-
-OS__XCopyPlane=
-OS__XCopyPlane_0=cast=(Display *)
-OS__XCopyPlane_1=
-OS__XCopyPlane_2=
-OS__XCopyPlane_3=cast=(GC)
-OS__XCopyPlane_4=
-OS__XCopyPlane_5=
-OS__XCopyPlane_6=
-OS__XCopyPlane_7=
-OS__XCopyPlane_8=
-OS__XCopyPlane_9=
-OS__XCopyPlane_10=
-
-OS__XCreateBitmapFromData=
-OS__XCreateBitmapFromData_0=cast=(Display *)
-OS__XCreateBitmapFromData_1=
-OS__XCreateBitmapFromData_2=cast=(char *)
-OS__XCreateBitmapFromData_3=
-OS__XCreateBitmapFromData_4=
-
-OS__XCreateColormap=
-OS__XCreateColormap_0=cast=(Display *)
-OS__XCreateColormap_1=cast=(Window)
-OS__XCreateColormap_2=cast=(Visual *)
-OS__XCreateColormap_3=
-
-OS__XCreateFontCursor=
-OS__XCreateFontCursor_0=cast=(Display *)
-OS__XCreateFontCursor_1=
-
-OS__XCreateGC=
-OS__XCreateGC_0=cast=(Display *)
-OS__XCreateGC_1=
-OS__XCreateGC_2=
-OS__XCreateGC_3=
-
-OS__XCreateImage=
-OS__XCreateImage_0=cast=(Display *)
-OS__XCreateImage_1=cast=(Visual *)
-OS__XCreateImage_2=
-OS__XCreateImage_3=
-OS__XCreateImage_4=
-OS__XCreateImage_5=cast=(char *)
-OS__XCreateImage_6=
-OS__XCreateImage_7=
-OS__XCreateImage_8=
-OS__XCreateImage_9=
-
-OS__XCreatePixmap=
-OS__XCreatePixmap_0=cast=(Display *)
-OS__XCreatePixmap_1=
-OS__XCreatePixmap_2=
-OS__XCreatePixmap_3=
-OS__XCreatePixmap_4=
-
-OS__XCreatePixmapCursor=
-OS__XCreatePixmapCursor_0=cast=(Display *)
-OS__XCreatePixmapCursor_1=cast=(Pixmap)
-OS__XCreatePixmapCursor_2=cast=(Pixmap)
-OS__XCreatePixmapCursor_3=
-OS__XCreatePixmapCursor_4=
-OS__XCreatePixmapCursor_5=
-OS__XCreatePixmapCursor_6=
-
-OS__XCreateRegion=
-
-OS__XCreateWindow=
-OS__XCreateWindow_0=cast=(Display *)
-OS__XCreateWindow_1=cast=(Window)
-OS__XCreateWindow_2=
-OS__XCreateWindow_3=
-OS__XCreateWindow_4=
-OS__XCreateWindow_5=
-OS__XCreateWindow_6=
-OS__XCreateWindow_7=
-OS__XCreateWindow_8=
-OS__XCreateWindow_9=cast=(Visual *)
-OS__XCreateWindow_10=
-OS__XCreateWindow_11=cast=(XSetWindowAttributes *)
-
-OS__XDefaultColormap=
-OS__XDefaultColormap_0=cast=(Display *)
-OS__XDefaultColormap_1=
-
-OS__XDefaultColormapOfScreen=
-OS__XDefaultColormapOfScreen_0=cast=(Screen *)
-
-OS__XDefaultDepthOfScreen=
-OS__XDefaultDepthOfScreen_0=cast=(Screen *)
-
-OS__XDefaultGCOfScreen=
-OS__XDefaultGCOfScreen_0=cast=(Screen *)
-
-OS__XDefaultRootWindow=
-OS__XDefaultRootWindow_0=cast=(Display *)
-
-OS__XDefaultScreen=
-OS__XDefaultScreen_0=cast=(Display *)
-
-OS__XDefaultScreenOfDisplay=
-OS__XDefaultScreenOfDisplay_0=cast=(Display *)
-
-OS__XDefaultVisual=
-OS__XDefaultVisual_0=cast=(Display *)
-OS__XDefaultVisual_1=
-
-OS__XDefineCursor=
-OS__XDefineCursor_0=cast=(Display *)
-OS__XDefineCursor_1=
-OS__XDefineCursor_2=
-
-OS__XDestroyImage=
-OS__XDestroyImage_0=cast=(XImage *)
-
-OS__XDestroyRegion=
-OS__XDestroyRegion_0=cast=(Region)
-
-OS__XDestroyWindow=
-OS__XDestroyWindow_0=cast=(Display *)
-OS__XDestroyWindow_1=cast=(Window)
-
-OS__XDisplayHeight=
-OS__XDisplayHeight_0=cast=(Display *)
-OS__XDisplayHeight_1=
-
-OS__XDisplayHeightMM=
-OS__XDisplayHeightMM_0=cast=(Display *)
-OS__XDisplayHeightMM_1=
-
-OS__XDisplayWidth=
-OS__XDisplayWidth_0=cast=(Display *)
-OS__XDisplayWidth_1=
-
-OS__XDisplayWidthMM=
-OS__XDisplayWidthMM_0=cast=(Display *)
-OS__XDisplayWidthMM_1=
-
-OS__XDrawArc=
-OS__XDrawArc_0=cast=(Display *)
-OS__XDrawArc_1=cast=(Drawable)
-OS__XDrawArc_2=cast=(GC)
-OS__XDrawArc_3=
-OS__XDrawArc_4=
-OS__XDrawArc_5=
-OS__XDrawArc_6=
-OS__XDrawArc_7=
-OS__XDrawArc_8=
-
-OS__XDrawLine=
-OS__XDrawLine_0=cast=(Display *)
-OS__XDrawLine_1=cast=(Drawable)
-OS__XDrawLine_2=cast=(GC)
-OS__XDrawLine_3=
-OS__XDrawLine_4=
-OS__XDrawLine_5=
-OS__XDrawLine_6=
-
-OS__XDrawLines=
-OS__XDrawLines_0=cast=(Display *)
-OS__XDrawLines_1=cast=(Drawable)
-OS__XDrawLines_2=cast=(GC)
-OS__XDrawLines_3=cast=(XPoint *)
-OS__XDrawLines_4=
-OS__XDrawLines_5=
-
-OS__XDrawPoint=
-OS__XDrawPoint_0=cast=(Display *)
-OS__XDrawPoint_1=cast=Drawable
-OS__XDrawPoint_2=cast=GC
-OS__XDrawPoint_3=
-OS__XDrawPoint_4=
-
-OS__XDrawRectangle=
-OS__XDrawRectangle_0=cast=(Display *)
-OS__XDrawRectangle_1=cast=(Drawable)
-OS__XDrawRectangle_2=cast=(GC)
-OS__XDrawRectangle_3=
-OS__XDrawRectangle_4=
-OS__XDrawRectangle_5=
-OS__XDrawRectangle_6=
-
-OS__XEmptyRegion=
-OS__XEmptyRegion_0=cast=(Region)
-
-OS__XEventsQueued=
-OS__XEventsQueued_0=cast=(Display *)
-OS__XEventsQueued_1=
-
-OS__XFillArc=
-OS__XFillArc_0=cast=(Display *)
-OS__XFillArc_1=cast=(Drawable)
-OS__XFillArc_2=cast=(GC)
-OS__XFillArc_3=
-OS__XFillArc_4=
-OS__XFillArc_5=
-OS__XFillArc_6=
-OS__XFillArc_7=
-OS__XFillArc_8=
-
-OS__XFillPolygon=
-OS__XFillPolygon_0=cast=(Display *)
-OS__XFillPolygon_1=cast=(Drawable)
-OS__XFillPolygon_2=cast=(GC)
-OS__XFillPolygon_3=cast=(XPoint *)
-OS__XFillPolygon_4=
-OS__XFillPolygon_5=
-OS__XFillPolygon_6=
-
-OS__XFillRectangle=
-OS__XFillRectangle_0=cast=(Display *)
-OS__XFillRectangle_1=cast=(Drawable)
-OS__XFillRectangle_2=cast=(GC)
-OS__XFillRectangle_3=
-OS__XFillRectangle_4=
-OS__XFillRectangle_5=
-OS__XFillRectangle_6=
-
-OS__XFilterEvent=
-OS__XFilterEvent_0=cast=(XEvent *)
-OS__XFilterEvent_1=cast=(Window)
-
-OS__XFlush=
-OS__XFlush_0=cast=(Display *)
-
-OS__XFontsOfFontSet=
-OS__XFontsOfFontSet_0=cast=(XFontSet)
-OS__XFontsOfFontSet_1=cast=(XFontStruct ***)
-OS__XFontsOfFontSet_2=cast=(char ***)
-
-OS__XFree=
-OS__XFree_0=cast=(char *)
-
-OS__XFreeColormap=
-OS__XFreeColormap_0=cast=(Display *)
-OS__XFreeColormap_1=cast=(Colormap)
-
-OS__XFreeColors=
-OS__XFreeColors_0=cast=(Display *)
-OS__XFreeColors_1=
-OS__XFreeColors_2=cast=(unsigned long *)
-OS__XFreeColors_3=
-OS__XFreeColors_4=
-
-OS__XFreeCursor=
-OS__XFreeCursor_0=cast=(Display *)
-OS__XFreeCursor_1=cast=(Cursor)
-
-OS__XFreeFont=
-OS__XFreeFont_0=cast=(Display *)
-OS__XFreeFont_1=cast=(XFontStruct *)
-
-OS__XFreeFontNames=
-OS__XFreeFontNames_0=cast=(char **)
-
-OS__XFreeGC=
-OS__XFreeGC_0=cast=(Display *)
-OS__XFreeGC_1=cast=(GC)
-
-OS__XFreeModifiermap=
-OS__XFreeModifiermap_0=cast=(XModifierKeymap *)
-
-OS__XFreePixmap=
-OS__XFreePixmap_0=cast=(Display *)
-OS__XFreePixmap_1=cast=(Pixmap)
-
-OS__XFreeStringList=
-OS__XFreeStringList_0=cast=(char **)
-
-OS__XGetGCValues=
-OS__XGetGCValues_0=cast=(Display *)
-OS__XGetGCValues_1=cast=(GC)
-OS__XGetGCValues_2=
-OS__XGetGCValues_3=
-
-OS__XGetGeometry=
-OS__XGetGeometry_0=cast=(Display *)
-OS__XGetGeometry_1=cast=(Drawable)
-OS__XGetGeometry_2=cast=(Window *)
-OS__XGetGeometry_3=cast=(int *)
-OS__XGetGeometry_4=cast=(int *)
-OS__XGetGeometry_5=cast=(unsigned int *)
-OS__XGetGeometry_6=cast=(unsigned int *)
-OS__XGetGeometry_7=cast=(unsigned int *)
-OS__XGetGeometry_8=cast=(unsigned int *)
-
-OS__XGetIconSizes=
-OS__XGetIconSizes_0=cast=Display *
-OS__XGetIconSizes_1=cast=Window
-OS__XGetIconSizes_2=cast=XIconSize **
-OS__XGetIconSizes_3=cast=int *
-
-OS__XGetImage=
-OS__XGetImage_0=cast=(Display *)
-OS__XGetImage_1=cast=(Drawable)
-OS__XGetImage_2=
-OS__XGetImage_3=
-OS__XGetImage_4=
-OS__XGetImage_5=
-OS__XGetImage_6=
-OS__XGetImage_7=
-
-OS__XGetInputFocus=
-OS__XGetInputFocus_0=cast=(Display *)
-OS__XGetInputFocus_1=cast=(Window *)
-OS__XGetInputFocus_2=cast=(int *)
-
-OS__XGetModifierMapping=
-OS__XGetModifierMapping_0=cast=(Display *)
-
-OS__XGetWindowAttributes=
-OS__XGetWindowAttributes_0=cast=(Display *)
-OS__XGetWindowAttributes_1=
-OS__XGetWindowAttributes_2=
-
-OS__XGetWindowProperty=
-OS__XGetWindowProperty_0=cast=Display *
-OS__XGetWindowProperty_1=cast=Window
-OS__XGetWindowProperty_2=cast=Atom
-OS__XGetWindowProperty_3=
-OS__XGetWindowProperty_4=
-OS__XGetWindowProperty_5=cast=Bool
-OS__XGetWindowProperty_6=cast=Atom
-OS__XGetWindowProperty_7=cast=Atom *
-OS__XGetWindowProperty_8=cast=int *
-OS__XGetWindowProperty_9=cast=unsigned long *
-OS__XGetWindowProperty_10=cast=unsigned long *
-OS__XGetWindowProperty_11=cast=unsigned char **
-
-OS__XGrabKeyboard=
-OS__XGrabKeyboard_0=cast=(Display *)
-OS__XGrabKeyboard_1=
-OS__XGrabKeyboard_2=
-OS__XGrabKeyboard_3=
-OS__XGrabKeyboard_4=
-OS__XGrabKeyboard_5=
-
-OS__XGrabPointer=
-OS__XGrabPointer_0=cast=(Display *)
-OS__XGrabPointer_1=
-OS__XGrabPointer_2=
-OS__XGrabPointer_3=
-OS__XGrabPointer_4=
-OS__XGrabPointer_5=
-OS__XGrabPointer_6=
-OS__XGrabPointer_7=
-OS__XGrabPointer_8=
-
-OS__XInitThreads=
-
-OS__XInternAtom=
-OS__XInternAtom_0=cast=(Display *)
-OS__XInternAtom_1=cast=(char *)
-OS__XInternAtom_2=
-
-OS__XIntersectRegion=
-OS__XIntersectRegion_0=cast=(Region)
-OS__XIntersectRegion_1=cast=(Region)
-OS__XIntersectRegion_2=cast=(Region)
-
-OS__XKeysymToKeycode=
-OS__XKeysymToKeycode_0=cast=(Display *)
-OS__XKeysymToKeycode_1=cast=(KeySym)
-
-OS__XKeysymToString=
-OS__XKeysymToString_0=
-
-OS__XListFonts=
-OS__XListFonts_0=cast=(Display *)
-OS__XListFonts_1=cast=(char *)
-OS__XListFonts_2=
-OS__XListFonts_3=cast=(int *)
-
-OS__XListProperties=
-OS__XListProperties_0=cast=(Display *)
-OS__XListProperties_1=cast=(Window)
-OS__XListProperties_2=cast=(int *)
-
-OS__XLocaleOfFontSet=
-OS__XLocaleOfFontSet_0=cast=(XFontSet)
-
-OS__XLookupString=
-OS__XLookupString_0=cast=(XKeyEvent *)
-OS__XLookupString_1=cast=(char *)
-OS__XLookupString_2=
-OS__XLookupString_3=cast=(KeySym *)
-OS__XLookupString_4=cast=(XComposeStatus *)
-
-OS__XLowerWindow=
-OS__XLowerWindow_0=cast=(Display *)
-OS__XLowerWindow_1=cast=(Window)
-
-OS__XMapWindow=
-OS__XMapWindow_0=cast=Display *
-OS__XMapWindow_1=cast=Window
-
-OS__XMoveResizeWindow=
-OS__XMoveResizeWindow_0=cast=Display *
-OS__XMoveResizeWindow_1=cast=Window
-OS__XMoveResizeWindow_2=
-OS__XMoveResizeWindow_3=
-OS__XMoveResizeWindow_4=
-OS__XMoveResizeWindow_5=
-
-OS__XOffsetRegion=
-OS__XOffsetRegion_0=cast=(Region)
-OS__XOffsetRegion_1=
-OS__XOffsetRegion_2=
-
-OS__XOpenDisplay=
-OS__XOpenDisplay_0=cast=(char *)
-
-OS__XPointInRegion=
-OS__XPointInRegion_0=cast=(Region)
-OS__XPointInRegion_1=
-OS__XPointInRegion_2=
-
-OS__XPolygonRegion=
-OS__XPolygonRegion_0=cast=(XPoint *)
-OS__XPolygonRegion_1=
-OS__XPolygonRegion_2=
-
-OS__XPutImage=
-OS__XPutImage_0=cast=(Display *)
-OS__XPutImage_1=cast=(Drawable)
-OS__XPutImage_2=cast=(GC)
-OS__XPutImage_3=cast=(XImage *)
-OS__XPutImage_4=
-OS__XPutImage_5=
-OS__XPutImage_6=
-OS__XPutImage_7=
-OS__XPutImage_8=
-OS__XPutImage_9=
-
-OS__XQueryBestCursor=
-OS__XQueryBestCursor_0=cast=Display *
-OS__XQueryBestCursor_1=
-OS__XQueryBestCursor_2=
-OS__XQueryBestCursor_3=
-OS__XQueryBestCursor_4=cast=(unsigned int *)
-OS__XQueryBestCursor_5=cast=(unsigned int *)
-
-OS__XQueryColor=
-OS__XQueryColor_0=cast=(Display *)
-OS__XQueryColor_1=
-OS__XQueryColor_2=
-
-OS__XQueryPointer=
-OS__XQueryPointer_0=cast=(Display *)
-OS__XQueryPointer_1=cast=(Window)
-OS__XQueryPointer_2=cast=(Window *)
-OS__XQueryPointer_3=cast=(Window *)
-OS__XQueryPointer_4=cast=(int *)
-OS__XQueryPointer_5=cast=(int *)
-OS__XQueryPointer_6=cast=(int *)
-OS__XQueryPointer_7=cast=(int *)
-OS__XQueryPointer_8=cast=(unsigned int *)
-
-OS__XQueryTree=
-OS__XQueryTree_0=cast=(Display *)
-OS__XQueryTree_1=cast=(Window)
-OS__XQueryTree_2=cast=(Window *)
-OS__XQueryTree_3=cast=(Window *)
-OS__XQueryTree_4=cast=(Window **)
-OS__XQueryTree_5=cast=(unsigned int *)
-
-OS__XRaiseWindow=
-OS__XRaiseWindow_0=cast=(Display *)
-OS__XRaiseWindow_1=cast=(Window)
-
-OS__XReconfigureWMWindow=
-OS__XReconfigureWMWindow_0=cast=(Display *)
-OS__XReconfigureWMWindow_1=cast=(Window)
-OS__XReconfigureWMWindow_2=
-OS__XReconfigureWMWindow_3=
-OS__XReconfigureWMWindow_4=
-
-OS__XRectInRegion=
-OS__XRectInRegion_0=cast=(Region)
-OS__XRectInRegion_1=
-OS__XRectInRegion_2=
-OS__XRectInRegion_3=
-OS__XRectInRegion_4=
-
-OS__XRenderComposite=flags=dynamic
-OS__XRenderComposite_0=
-OS__XRenderComposite_1=
-OS__XRenderComposite_2=
-OS__XRenderComposite_3=
-OS__XRenderComposite_4=
-OS__XRenderComposite_5=
-OS__XRenderComposite_6=
-OS__XRenderComposite_7=
-OS__XRenderComposite_8=
-OS__XRenderComposite_9=
-OS__XRenderComposite_10=
-OS__XRenderComposite_11=
-OS__XRenderComposite_12=
-
-OS__XRenderCreatePicture=flags=dynamic
-OS__XRenderCreatePicture_0=
-OS__XRenderCreatePicture_1=
-OS__XRenderCreatePicture_2=
-OS__XRenderCreatePicture_3=
-OS__XRenderCreatePicture_4=
-
-OS__XRenderFindStandardFormat=flags=dynamic
-OS__XRenderFindStandardFormat_0=
-OS__XRenderFindStandardFormat_1=
-
-OS__XRenderFindVisualFormat=flags=dynamic
-OS__XRenderFindVisualFormat_0=
-OS__XRenderFindVisualFormat_1=
-
-OS__XRenderFreePicture=flags=dynamic
-OS__XRenderFreePicture_0=
-OS__XRenderFreePicture_1=
-
-OS__XRenderQueryExtension=flags=dynamic
-OS__XRenderQueryExtension_0=
-OS__XRenderQueryExtension_1=
-OS__XRenderQueryExtension_2=
-
-OS__XRenderSetPictureClipRectangles=flags=dynamic
-OS__XRenderSetPictureClipRectangles_0=
-OS__XRenderSetPictureClipRectangles_1=
-OS__XRenderSetPictureClipRectangles_2=
-OS__XRenderSetPictureClipRectangles_3=
-OS__XRenderSetPictureClipRectangles_4=
-OS__XRenderSetPictureClipRectangles_5=
-
-OS__XRenderSetPictureClipRegion=flags=dynamic
-OS__XRenderSetPictureClipRegion_0=
-OS__XRenderSetPictureClipRegion_1=
-OS__XRenderSetPictureClipRegion_2=
-
-OS__XRenderSetPictureTransform=flags=dynamic
-OS__XRenderSetPictureTransform_0=
-OS__XRenderSetPictureTransform_1=
-OS__XRenderSetPictureTransform_2=
-
-OS__XReparentWindow=
-OS__XReparentWindow_0=cast=(Display *)
-OS__XReparentWindow_1=cast=(Window)
-OS__XReparentWindow_2=cast=(Window)
-OS__XReparentWindow_3=
-OS__XReparentWindow_4=
-
-OS__XResizeWindow=
-OS__XResizeWindow_0=cast=Display *
-OS__XResizeWindow_1=cast=Window
-OS__XResizeWindow_2=
-OS__XResizeWindow_3=
-
-OS__XRootWindowOfScreen=
-OS__XRootWindowOfScreen_0=cast=(Screen *)
-
-OS__XSelectInput=
-OS__XSelectInput_0=cast=Display *
-OS__XSelectInput_1=cast=Window
-OS__XSelectInput_2=
-
-OS__XSendEvent=
-OS__XSendEvent_0=cast=Display *
-OS__XSendEvent_1=cast=Window
-OS__XSendEvent_2=cast=Bool
-OS__XSendEvent_3=cast=long
-OS__XSendEvent_4=cast=XEvent *
-
-OS__XSetBackground=
-OS__XSetBackground_0=cast=(Display *)
-OS__XSetBackground_1=cast=(GC)
-OS__XSetBackground_2=
-
-OS__XSetClipMask=
-OS__XSetClipMask_0=cast=(Display *)
-OS__XSetClipMask_1=cast=(GC)
-OS__XSetClipMask_2=cast=(Pixmap)
-
-OS__XSetClipRectangles=
-OS__XSetClipRectangles_0=cast=(Display *)
-OS__XSetClipRectangles_1=cast=(GC)
-OS__XSetClipRectangles_2=
-OS__XSetClipRectangles_3=
-OS__XSetClipRectangles_4=cast=(XRectangle *)
-OS__XSetClipRectangles_5=
-OS__XSetClipRectangles_6=
-
-OS__XSetDashes=
-OS__XSetDashes_0=cast=(Display *)
-OS__XSetDashes_1=cast=(GC)
-OS__XSetDashes_2=
-OS__XSetDashes_3=cast=(char *)
-OS__XSetDashes_4=
-
-OS__XSetErrorHandler=
-OS__XSetErrorHandler_0=cast=(XErrorHandler)
-
-OS__XSetFillRule=
-OS__XSetFillRule_0=cast=(Display *)
-OS__XSetFillRule_1=cast=(GC)
-OS__XSetFillRule_2=
-
-OS__XSetFillStyle=
-OS__XSetFillStyle_0=cast=(Display *)
-OS__XSetFillStyle_1=cast=(GC)
-OS__XSetFillStyle_2=
-
-OS__XSetForeground=
-OS__XSetForeground_0=cast=(Display *)
-OS__XSetForeground_1=cast=(GC)
-OS__XSetForeground_2=
-
-OS__XSetFunction=
-OS__XSetFunction_0=cast=(Display *)
-OS__XSetFunction_1=cast=(GC)
-OS__XSetFunction_2=
-
-OS__XSetGraphicsExposures=
-OS__XSetGraphicsExposures_0=cast=(Display *)
-OS__XSetGraphicsExposures_1=cast=(GC)
-OS__XSetGraphicsExposures_2=cast=(Bool)
-
-OS__XSetIOErrorHandler=
-OS__XSetIOErrorHandler_0=cast=(XIOErrorHandler)
-
-OS__XSetInputFocus=
-OS__XSetInputFocus_0=cast=(Display *)
-OS__XSetInputFocus_1=cast=(Window)
-OS__XSetInputFocus_2=
-OS__XSetInputFocus_3=
-
-OS__XSetLineAttributes=
-OS__XSetLineAttributes_0=cast=(Display *)
-OS__XSetLineAttributes_1=cast=(GC)
-OS__XSetLineAttributes_2=
-OS__XSetLineAttributes_3=
-OS__XSetLineAttributes_4=
-OS__XSetLineAttributes_5=
-
-OS__XSetRegion=
-OS__XSetRegion_0=cast=(Display *)
-OS__XSetRegion_1=cast=(GC)
-OS__XSetRegion_2=cast=(Region)
-
-OS__XSetStipple=
-OS__XSetStipple_0=cast=(Display *)
-OS__XSetStipple_1=cast=(GC)
-OS__XSetStipple_2=cast=(Pixmap)
-
-OS__XSetSubwindowMode=
-OS__XSetSubwindowMode_0=cast=(Display *)
-OS__XSetSubwindowMode_1=cast=(GC)
-OS__XSetSubwindowMode_2=
-
-OS__XSetTSOrigin=
-OS__XSetTSOrigin_0=cast=Display *
-OS__XSetTSOrigin_1=cast=GC
-OS__XSetTSOrigin_2=
-OS__XSetTSOrigin_3=
-
-OS__XSetTile=
-OS__XSetTile_0=cast=Display *
-OS__XSetTile_1=cast=GC
-OS__XSetTile_2=cast=Pixmap
-
-OS__XSetWMNormalHints=
-OS__XSetWMNormalHints_0=cast=Display *
-OS__XSetWMNormalHints_1=cast=(Window)
-OS__XSetWMNormalHints_2=
-
-OS__XSetWindowBackgroundPixmap=
-OS__XSetWindowBackgroundPixmap_0=cast=(Display *)
-OS__XSetWindowBackgroundPixmap_1=cast=(Window)
-OS__XSetWindowBackgroundPixmap_2=cast=Pixmap
-
-OS__XShapeCombineMask=
-OS__XShapeCombineMask_0=cast=(Display *)
-OS__XShapeCombineMask_1=cast=(Window)
-OS__XShapeCombineMask_2=
-OS__XShapeCombineMask_3=
-OS__XShapeCombineMask_4=
-OS__XShapeCombineMask_5=cast=Pixmap
-OS__XShapeCombineMask_6=
-
-OS__XShapeCombineRegion=
-OS__XShapeCombineRegion_0=cast=(Display *)
-OS__XShapeCombineRegion_1=cast=(Window)
-OS__XShapeCombineRegion_2=
-OS__XShapeCombineRegion_3=
-OS__XShapeCombineRegion_4=
-OS__XShapeCombineRegion_5=cast=(Region)
-OS__XShapeCombineRegion_6=
-
-OS__XSubtractRegion=
-OS__XSubtractRegion_0=cast=(Region)
-OS__XSubtractRegion_1=cast=(Region)
-OS__XSubtractRegion_2=cast=(Region)
-
-OS__XSync=
-OS__XSync_0=cast=(Display *)
-OS__XSync_1=cast=(Bool)
-
-OS__XSynchronize=
-OS__XSynchronize_0=cast=(Display *)
-OS__XSynchronize_1=cast=(Bool)
-
-OS__XTestFakeButtonEvent=
-OS__XTestFakeButtonEvent_0=cast=Display *
-OS__XTestFakeButtonEvent_1=
-OS__XTestFakeButtonEvent_2=cast=Bool
-OS__XTestFakeButtonEvent_3=cast=unsigned long
-
-OS__XTestFakeKeyEvent=
-OS__XTestFakeKeyEvent_0=cast=Display *
-OS__XTestFakeKeyEvent_1=
-OS__XTestFakeKeyEvent_2=cast=Bool
-OS__XTestFakeKeyEvent_3=cast=unsigned long
-
-OS__XTestFakeMotionEvent=
-OS__XTestFakeMotionEvent_0=cast=Display *
-OS__XTestFakeMotionEvent_1=
-OS__XTestFakeMotionEvent_2=
-OS__XTestFakeMotionEvent_3=
-OS__XTestFakeMotionEvent_4=cast=unsigned long
-
-OS__XTranslateCoordinates=
-OS__XTranslateCoordinates_0=cast=Display *
-OS__XTranslateCoordinates_1=cast=Window
-OS__XTranslateCoordinates_2=cast=Window
-OS__XTranslateCoordinates_3=
-OS__XTranslateCoordinates_4=
-OS__XTranslateCoordinates_5=
-OS__XTranslateCoordinates_6=
-OS__XTranslateCoordinates_7=cast=Window *
-
-OS__XUndefineCursor=
-OS__XUndefineCursor_0=cast=(Display *)
-OS__XUndefineCursor_1=cast=(Window)
-
-OS__XUngrabKeyboard=
-OS__XUngrabKeyboard_0=cast=(Display *)
-OS__XUngrabKeyboard_1=
-
-OS__XUngrabPointer=
-OS__XUngrabPointer_0=cast=(Display *)
-OS__XUngrabPointer_1=
-
-OS__XUnionRectWithRegion=
-OS__XUnionRectWithRegion_0=cast=(XRectangle *)
-OS__XUnionRectWithRegion_1=cast=(Region)
-OS__XUnionRectWithRegion_2=cast=(Region)
-
-OS__XUnionRegion=
-OS__XUnionRegion_0=cast=(Region)
-OS__XUnionRegion_1=cast=(Region)
-OS__XUnionRegion_2=cast=(Region)
-
-OS__XUnmapWindow=
-OS__XUnmapWindow_0=cast=Display *
-OS__XUnmapWindow_1=cast=Window
-
-OS__XWarpPointer=
-OS__XWarpPointer_0=cast=(Display *)
-OS__XWarpPointer_1=
-OS__XWarpPointer_2=
-OS__XWarpPointer_3=
-OS__XWarpPointer_4=
-OS__XWarpPointer_5=
-OS__XWarpPointer_6=
-OS__XWarpPointer_7=
-OS__XWarpPointer_8=
-
-OS__XWhitePixel=
-OS__XWhitePixel_0=cast=(Display *)
-OS__XWhitePixel_1=
-
-OS__XWithdrawWindow=
-OS__XWithdrawWindow_0=cast=(Display *)
-OS__XWithdrawWindow_1=cast=(Window)
-OS__XWithdrawWindow_2=
-
-OS__XineramaIsActive=
-OS__XineramaIsActive_0=cast=(Display *)
-
-OS__XineramaQueryScreens=
-OS__XineramaQueryScreens_0=cast=(Display *)
-OS__XineramaQueryScreens_1=
-
-OS__XmAddWMProtocolCallback=
-OS__XmAddWMProtocolCallback_0=cast=(Widget)
-OS__XmAddWMProtocolCallback_1=cast=(Atom)
-OS__XmAddWMProtocolCallback_2=cast=(XtCallbackProc)
-OS__XmAddWMProtocolCallback_3=cast=(XtPointer)
-
-OS__XmChangeColor=
-OS__XmChangeColor_0=cast=(Widget)
-OS__XmChangeColor_1=
-
-OS__XmClipboardCopy=
-OS__XmClipboardCopy_0=cast=(Display *)
-OS__XmClipboardCopy_1=cast=(Window)
-OS__XmClipboardCopy_2=
-OS__XmClipboardCopy_3=cast=(char *)
-OS__XmClipboardCopy_4=cast=(char *)
-OS__XmClipboardCopy_5=
-OS__XmClipboardCopy_6=
-OS__XmClipboardCopy_7=cast=(void *)
-
-OS__XmClipboardEndCopy=
-OS__XmClipboardEndCopy_0=cast=(Display *)
-OS__XmClipboardEndCopy_1=cast=(Window)
-OS__XmClipboardEndCopy_2=
-
-OS__XmClipboardEndRetrieve=
-OS__XmClipboardEndRetrieve_0=cast=(Display *)
-OS__XmClipboardEndRetrieve_1=cast=(Window)
-
-OS__XmClipboardInquireCount=
-OS__XmClipboardInquireCount_0=cast=(Display *)
-OS__XmClipboardInquireCount_1=cast=(Window)
-OS__XmClipboardInquireCount_2=cast=(int *)
-OS__XmClipboardInquireCount_3=cast=(unsigned long *)
-
-OS__XmClipboardInquireFormat=
-OS__XmClipboardInquireFormat_0=cast=(Display *)
-OS__XmClipboardInquireFormat_1=cast=(Window)
-OS__XmClipboardInquireFormat_2=
-OS__XmClipboardInquireFormat_3=cast=(char *)
-OS__XmClipboardInquireFormat_4=
-OS__XmClipboardInquireFormat_5=cast=(unsigned long *)
-
-OS__XmClipboardInquireLength=
-OS__XmClipboardInquireLength_0=cast=(Display *)
-OS__XmClipboardInquireLength_1=cast=(Window)
-OS__XmClipboardInquireLength_2=cast=(char *)
-OS__XmClipboardInquireLength_3=cast=(unsigned long *)
-
-OS__XmClipboardRetrieve=
-OS__XmClipboardRetrieve_0=cast=(Display *)
-OS__XmClipboardRetrieve_1=cast=(Window)
-OS__XmClipboardRetrieve_2=cast=(char *)
-OS__XmClipboardRetrieve_3=cast=(char *)
-OS__XmClipboardRetrieve_4=
-OS__XmClipboardRetrieve_5=cast=(unsigned long *)
-OS__XmClipboardRetrieve_6=cast=(long *)
-
-OS__XmClipboardStartCopy=
-OS__XmClipboardStartCopy_0=cast=(Display *)
-OS__XmClipboardStartCopy_1=cast=(Window)
-OS__XmClipboardStartCopy_2=cast=(XmString)
-OS__XmClipboardStartCopy_3=
-OS__XmClipboardStartCopy_4=cast=(Widget)
-OS__XmClipboardStartCopy_5=cast=(XmCutPasteProc)
-OS__XmClipboardStartCopy_6=cast=(long *)
-
-OS__XmClipboardStartRetrieve=
-OS__XmClipboardStartRetrieve_0=cast=(Display *)
-OS__XmClipboardStartRetrieve_1=cast=(Window)
-OS__XmClipboardStartRetrieve_2=
-
-OS__XmComboBoxAddItem=
-OS__XmComboBoxAddItem_0=cast=(Widget)
-OS__XmComboBoxAddItem_1=cast=(XmString)
-OS__XmComboBoxAddItem_2=
-OS__XmComboBoxAddItem_3=
-
-OS__XmComboBoxDeletePos=
-OS__XmComboBoxDeletePos_0=cast=(Widget)
-OS__XmComboBoxDeletePos_1=
-
-OS__XmComboBoxSelectItem=
-OS__XmComboBoxSelectItem_0=cast=(Widget)
-OS__XmComboBoxSelectItem_1=cast=(XmString)
-
-OS__XmCreateArrowButton=
-OS__XmCreateArrowButton_0=cast=(Widget)
-OS__XmCreateArrowButton_1=cast=(String)
-OS__XmCreateArrowButton_2=cast=(ArgList)
-OS__XmCreateArrowButton_3=
-
-OS__XmCreateCascadeButtonGadget=
-OS__XmCreateCascadeButtonGadget_0=cast=(Widget)
-OS__XmCreateCascadeButtonGadget_1=cast=(String)
-OS__XmCreateCascadeButtonGadget_2=cast=(ArgList)
-OS__XmCreateCascadeButtonGadget_3=
-
-OS__XmCreateComboBox=
-OS__XmCreateComboBox_0=cast=(Widget)
-OS__XmCreateComboBox_1=cast=(String)
-OS__XmCreateComboBox_2=cast=(ArgList)
-OS__XmCreateComboBox_3=
-
-OS__XmCreateDialogShell=
-OS__XmCreateDialogShell_0=cast=(Widget)
-OS__XmCreateDialogShell_1=cast=(String)
-OS__XmCreateDialogShell_2=cast=(ArgList)
-OS__XmCreateDialogShell_3=
-
-OS__XmCreateDrawingArea=
-OS__XmCreateDrawingArea_0=cast=(Widget)
-OS__XmCreateDrawingArea_1=cast=(String)
-OS__XmCreateDrawingArea_2=cast=(ArgList)
-OS__XmCreateDrawingArea_3=
-
-OS__XmCreateDrawnButton=
-OS__XmCreateDrawnButton_0=cast=(Widget)
-OS__XmCreateDrawnButton_1=cast=(String)
-OS__XmCreateDrawnButton_2=cast=(ArgList)
-OS__XmCreateDrawnButton_3=
-
-OS__XmCreateErrorDialog=
-OS__XmCreateErrorDialog_0=cast=(Widget)
-OS__XmCreateErrorDialog_1=cast=(String)
-OS__XmCreateErrorDialog_2=cast=(ArgList)
-OS__XmCreateErrorDialog_3=
-
-OS__XmCreateFileSelectionDialog=
-OS__XmCreateFileSelectionDialog_0=cast=(Widget)
-OS__XmCreateFileSelectionDialog_1=cast=(String)
-OS__XmCreateFileSelectionDialog_2=cast=(ArgList)
-OS__XmCreateFileSelectionDialog_3=
-
-OS__XmCreateForm=
-OS__XmCreateForm_0=cast=(Widget)
-OS__XmCreateForm_1=cast=(String)
-OS__XmCreateForm_2=cast=(ArgList)
-OS__XmCreateForm_3=
-
-OS__XmCreateFrame=
-OS__XmCreateFrame_0=cast=(Widget)
-OS__XmCreateFrame_1=cast=(String)
-OS__XmCreateFrame_2=cast=(ArgList)
-OS__XmCreateFrame_3=
-
-OS__XmCreateInformationDialog=
-OS__XmCreateInformationDialog_0=cast=(Widget)
-OS__XmCreateInformationDialog_1=cast=(String)
-OS__XmCreateInformationDialog_2=cast=(ArgList)
-OS__XmCreateInformationDialog_3=
-
-OS__XmCreateLabel=
-OS__XmCreateLabel_0=cast=(Widget)
-OS__XmCreateLabel_1=cast=(String)
-OS__XmCreateLabel_2=cast=(ArgList)
-OS__XmCreateLabel_3=
-
-OS__XmCreateList=
-OS__XmCreateList_0=cast=(Widget)
-OS__XmCreateList_1=cast=(String)
-OS__XmCreateList_2=cast=(ArgList)
-OS__XmCreateList_3=
-
-OS__XmCreateMainWindow=
-OS__XmCreateMainWindow_0=cast=(Widget)
-OS__XmCreateMainWindow_1=cast=(String)
-OS__XmCreateMainWindow_2=cast=(ArgList)
-OS__XmCreateMainWindow_3=
-
-OS__XmCreateMenuBar=
-OS__XmCreateMenuBar_0=cast=(Widget)
-OS__XmCreateMenuBar_1=cast=(String)
-OS__XmCreateMenuBar_2=cast=(ArgList)
-OS__XmCreateMenuBar_3=
-
-OS__XmCreateMessageDialog=
-OS__XmCreateMessageDialog_0=cast=(Widget)
-OS__XmCreateMessageDialog_1=cast=(String)
-OS__XmCreateMessageDialog_2=cast=(ArgList)
-OS__XmCreateMessageDialog_3=
-
-OS__XmCreatePopupMenu=
-OS__XmCreatePopupMenu_0=cast=(Widget)
-OS__XmCreatePopupMenu_1=cast=(String)
-OS__XmCreatePopupMenu_2=cast=(ArgList)
-OS__XmCreatePopupMenu_3=
-
-OS__XmCreatePulldownMenu=
-OS__XmCreatePulldownMenu_0=cast=(Widget)
-OS__XmCreatePulldownMenu_1=cast=(String)
-OS__XmCreatePulldownMenu_2=cast=(ArgList)
-OS__XmCreatePulldownMenu_3=
-
-OS__XmCreatePushButton=
-OS__XmCreatePushButton_0=cast=(Widget)
-OS__XmCreatePushButton_1=cast=(String)
-OS__XmCreatePushButton_2=cast=(ArgList)
-OS__XmCreatePushButton_3=
-
-OS__XmCreatePushButtonGadget=
-OS__XmCreatePushButtonGadget_0=cast=(Widget)
-OS__XmCreatePushButtonGadget_1=cast=(String)
-OS__XmCreatePushButtonGadget_2=cast=(ArgList)
-OS__XmCreatePushButtonGadget_3=
-
-OS__XmCreateQuestionDialog=
-OS__XmCreateQuestionDialog_0=cast=(Widget)
-OS__XmCreateQuestionDialog_1=cast=(String)
-OS__XmCreateQuestionDialog_2=cast=(ArgList)
-OS__XmCreateQuestionDialog_3=
-
-OS__XmCreateScale=
-OS__XmCreateScale_0=cast=(Widget)
-OS__XmCreateScale_1=cast=(String)
-OS__XmCreateScale_2=cast=(ArgList)
-OS__XmCreateScale_3=
-
-OS__XmCreateScrollBar=
-OS__XmCreateScrollBar_0=cast=(Widget)
-OS__XmCreateScrollBar_1=cast=(String)
-OS__XmCreateScrollBar_2=cast=(ArgList)
-OS__XmCreateScrollBar_3=
-
-OS__XmCreateScrolledList=
-OS__XmCreateScrolledList_0=cast=(Widget)
-OS__XmCreateScrolledList_1=cast=(String)
-OS__XmCreateScrolledList_2=cast=(ArgList)
-OS__XmCreateScrolledList_3=
-
-OS__XmCreateScrolledText=
-OS__XmCreateScrolledText_0=cast=(Widget)
-OS__XmCreateScrolledText_1=cast=(String)
-OS__XmCreateScrolledText_2=cast=(ArgList)
-OS__XmCreateScrolledText_3=
-
-OS__XmCreateSeparator=
-OS__XmCreateSeparator_0=cast=(Widget)
-OS__XmCreateSeparator_1=cast=(String)
-OS__XmCreateSeparator_2=cast=(ArgList)
-OS__XmCreateSeparator_3=
-
-OS__XmCreateSeparatorGadget=
-OS__XmCreateSeparatorGadget_0=cast=(Widget)
-OS__XmCreateSeparatorGadget_1=cast=(String)
-OS__XmCreateSeparatorGadget_2=cast=(ArgList)
-OS__XmCreateSeparatorGadget_3=
-
-OS__XmCreateSimpleSpinBox=
-OS__XmCreateSimpleSpinBox_0=cast=Widget
-OS__XmCreateSimpleSpinBox_1=cast=String
-OS__XmCreateSimpleSpinBox_2=cast=ArgList
-OS__XmCreateSimpleSpinBox_3=
-
-OS__XmCreateTextField=
-OS__XmCreateTextField_0=cast=(Widget)
-OS__XmCreateTextField_1=cast=(String)
-OS__XmCreateTextField_2=cast=(ArgList)
-OS__XmCreateTextField_3=
-
-OS__XmCreateToggleButton=
-OS__XmCreateToggleButton_0=cast=(Widget)
-OS__XmCreateToggleButton_1=cast=(String)
-OS__XmCreateToggleButton_2=cast=(ArgList)
-OS__XmCreateToggleButton_3=
-
-OS__XmCreateToggleButtonGadget=
-OS__XmCreateToggleButtonGadget_0=cast=(Widget)
-OS__XmCreateToggleButtonGadget_1=cast=(String)
-OS__XmCreateToggleButtonGadget_2=cast=(ArgList)
-OS__XmCreateToggleButtonGadget_3=
-
-OS__XmCreateWarningDialog=
-OS__XmCreateWarningDialog_0=cast=(Widget)
-OS__XmCreateWarningDialog_1=cast=(String)
-OS__XmCreateWarningDialog_2=cast=(ArgList)
-OS__XmCreateWarningDialog_3=
-
-OS__XmCreateWorkingDialog=
-OS__XmCreateWorkingDialog_0=cast=(Widget)
-OS__XmCreateWorkingDialog_1=cast=(String)
-OS__XmCreateWorkingDialog_2=cast=(ArgList)
-OS__XmCreateWorkingDialog_3=
-
-OS__XmDestroyPixmap=
-OS__XmDestroyPixmap_0=cast=(Screen *)
-OS__XmDestroyPixmap_1=cast=(Pixmap)
-
-OS__XmDragCancel=
-OS__XmDragCancel_0=cast=(Widget)
-
-OS__XmDragStart=
-OS__XmDragStart_0=cast=(Widget)
-OS__XmDragStart_1=cast=(XEvent *)
-OS__XmDragStart_2=cast=(ArgList)
-OS__XmDragStart_3=cast=(Cardinal)
-
-OS__XmDropSiteRegister=
-OS__XmDropSiteRegister_0=cast=(Widget)
-OS__XmDropSiteRegister_1=cast=(ArgList)
-OS__XmDropSiteRegister_2=cast=(Cardinal)
-
-OS__XmDropSiteUnregister=
-OS__XmDropSiteUnregister_0=cast=(Widget)
-
-OS__XmDropSiteUpdate=
-OS__XmDropSiteUpdate_0=cast=(Widget)
-OS__XmDropSiteUpdate_1=cast=(ArgList)
-OS__XmDropSiteUpdate_2=cast=(Cardinal)
-
-OS__XmDropTransferAdd=
-OS__XmDropTransferAdd_0=cast=(Widget)
-OS__XmDropTransferAdd_1=cast=(XmDropTransferEntryRec *)
-OS__XmDropTransferAdd_2=cast=(Cardinal)
-
-OS__XmDropTransferStart=
-OS__XmDropTransferStart_0=cast=(Widget)
-OS__XmDropTransferStart_1=cast=(ArgList)
-OS__XmDropTransferStart_2=cast=(Cardinal)
-
-OS__XmFileSelectionBoxGetChild=
-OS__XmFileSelectionBoxGetChild_0=cast=(Widget)
-OS__XmFileSelectionBoxGetChild_1=
-
-OS__XmFontListAppendEntry=
-OS__XmFontListAppendEntry_0=cast=(XmFontList)
-OS__XmFontListAppendEntry_1=cast=(XmFontListEntry)
-
-OS__XmFontListCopy=
-OS__XmFontListCopy_0=cast=(XmFontList)
-
-OS__XmFontListEntryFree=
-OS__XmFontListEntryFree_0=cast=(XmFontListEntry *)
-
-OS__XmFontListEntryGetFont=
-OS__XmFontListEntryGetFont_0=cast=(XmFontListEntry)
-OS__XmFontListEntryGetFont_1=cast=(XmFontType *)
-
-OS__XmFontListEntryLoad=
-OS__XmFontListEntryLoad_0=cast=(Display *)
-OS__XmFontListEntryLoad_1=cast=(char *)
-OS__XmFontListEntryLoad_2=
-OS__XmFontListEntryLoad_3=cast=(char *)
-
-OS__XmFontListFree=
-OS__XmFontListFree_0=cast=(XmFontList)
-
-OS__XmFontListFreeFontContext=
-OS__XmFontListFreeFontContext_0=cast=(XmFontContext)
-
-OS__XmFontListInitFontContext=
-OS__XmFontListInitFontContext_0=cast=(XmFontContext *)
-OS__XmFontListInitFontContext_1=cast=(XmFontList)
-
-OS__XmFontListNextEntry=
-OS__XmFontListNextEntry_0=cast=(XmFontContext)
-
-OS__XmGetAtomName=
-OS__XmGetAtomName_0=cast=(Display *)
-OS__XmGetAtomName_1=cast=(Atom)
-
-OS__XmGetDragContext=
-OS__XmGetDragContext_0=cast=(Widget)
-OS__XmGetDragContext_1=cast=(Time)
-
-OS__XmGetFocusWidget=
-OS__XmGetFocusWidget_0=cast=(Widget)
-
-OS__XmGetPixmap=
-OS__XmGetPixmap_0=cast=(Screen *)
-OS__XmGetPixmap_1=cast=(char *)
-OS__XmGetPixmap_2=cast=(Pixel)
-OS__XmGetPixmap_3=cast=(Pixel)
-
-OS__XmGetPixmapByDepth=
-OS__XmGetPixmapByDepth_0=cast=(Screen *)
-OS__XmGetPixmapByDepth_1=cast=(char *)
-OS__XmGetPixmapByDepth_2=
-OS__XmGetPixmapByDepth_3=
-OS__XmGetPixmapByDepth_4=
-
-OS__XmGetXmDisplay=
-OS__XmGetXmDisplay_0=cast=(Display *)
-
-OS__XmImMbLookupString=
-OS__XmImMbLookupString_0=cast=(Widget)
-OS__XmImMbLookupString_1=cast=(XKeyPressedEvent *)
-OS__XmImMbLookupString_2=cast=(char *)
-OS__XmImMbLookupString_3=
-OS__XmImMbLookupString_4=cast=(KeySym *)
-OS__XmImMbLookupString_5=cast=(int *)
-
-OS__XmImRegister=
-OS__XmImRegister_0=cast=(Widget)
-OS__XmImRegister_1=
-
-OS__XmImSetFocusValues=
-OS__XmImSetFocusValues_0=cast=(Widget)
-OS__XmImSetFocusValues_1=cast=(ArgList)
-OS__XmImSetFocusValues_2=
-
-OS__XmImSetValues=
-OS__XmImSetValues_0=cast=(Widget)
-OS__XmImSetValues_1=cast=(ArgList)
-OS__XmImSetValues_2=
-
-OS__XmImUnregister=
-OS__XmImUnregister_0=cast=(Widget)
-
-OS__XmImUnsetFocus=
-OS__XmImUnsetFocus_0=cast=(Widget)
-
-OS__XmInternAtom=
-OS__XmInternAtom_0=cast=(Display *)
-OS__XmInternAtom_1=cast=(String)
-OS__XmInternAtom_2=
-
-OS__XmListAddItemUnselected=
-OS__XmListAddItemUnselected_0=cast=(Widget)
-OS__XmListAddItemUnselected_1=cast=(XmString)
-OS__XmListAddItemUnselected_2=
-
-OS__XmListDeleteAllItems=
-OS__XmListDeleteAllItems_0=cast=(Widget)
-
-OS__XmListDeleteItemsPos=
-OS__XmListDeleteItemsPos_0=cast=(Widget)
-OS__XmListDeleteItemsPos_1=
-OS__XmListDeleteItemsPos_2=
-
-OS__XmListDeletePos=
-OS__XmListDeletePos_0=cast=(Widget)
-OS__XmListDeletePos_1=
-
-OS__XmListDeletePositions=
-OS__XmListDeletePositions_0=cast=(Widget)
-OS__XmListDeletePositions_1=cast=(int *)
-OS__XmListDeletePositions_2=
-
-OS__XmListDeselectAllItems=
-OS__XmListDeselectAllItems_0=cast=(Widget)
-
-OS__XmListDeselectPos=
-OS__XmListDeselectPos_0=cast=(Widget)
-OS__XmListDeselectPos_1=
-
-OS__XmListGetKbdItemPos=
-OS__XmListGetKbdItemPos_0=cast=(Widget)
-
-OS__XmListGetSelectedPos=
-OS__XmListGetSelectedPos_0=cast=(Widget)
-OS__XmListGetSelectedPos_1=cast=(int **)
-OS__XmListGetSelectedPos_2=cast=(int *)
-
-OS__XmListItemPos=
-OS__XmListItemPos_0=cast=(Widget)
-OS__XmListItemPos_1=cast=(XmString)
-
-OS__XmListPosSelected=
-OS__XmListPosSelected_0=cast=(Widget)
-OS__XmListPosSelected_1=
-
-OS__XmListReplaceItemsPosUnselected=
-OS__XmListReplaceItemsPosUnselected_0=cast=(Widget)
-OS__XmListReplaceItemsPosUnselected_1=cast=(XmString *)
-OS__XmListReplaceItemsPosUnselected_2=
-OS__XmListReplaceItemsPosUnselected_3=
-
-OS__XmListSelectPos=
-OS__XmListSelectPos_0=cast=(Widget)
-OS__XmListSelectPos_1=
-OS__XmListSelectPos_2=
-
-OS__XmListSetKbdItemPos=
-OS__XmListSetKbdItemPos_0=cast=(Widget)
-OS__XmListSetKbdItemPos_1=
-
-OS__XmListSetPos=
-OS__XmListSetPos_0=cast=(Widget)
-OS__XmListSetPos_1=
-
-OS__XmListUpdateSelectedList=
-OS__XmListUpdateSelectedList_0=cast=(Widget)
-
-OS__XmMainWindowSetAreas=
-OS__XmMainWindowSetAreas_0=cast=(Widget)
-OS__XmMainWindowSetAreas_1=cast=(Widget)
-OS__XmMainWindowSetAreas_2=cast=(Widget)
-OS__XmMainWindowSetAreas_3=cast=(Widget)
-OS__XmMainWindowSetAreas_4=cast=(Widget)
-OS__XmMainWindowSetAreas_5=cast=(Widget)
-
-OS__XmMessageBoxGetChild=
-OS__XmMessageBoxGetChild_0=cast=(Widget)
-OS__XmMessageBoxGetChild_1=
-
-OS__XmParseMappingCreate=
-OS__XmParseMappingCreate_0=cast=(ArgList)
-OS__XmParseMappingCreate_1=
-
-OS__XmParseMappingFree=
-OS__XmParseMappingFree_0=cast=(XmParseMapping)
-
-OS__XmProcessTraversal=
-OS__XmProcessTraversal_0=cast=(Widget)
-OS__XmProcessTraversal_1=
-
-OS__XmRenderTableAddRenditions=
-OS__XmRenderTableAddRenditions_0=cast=(XmRenderTable)
-OS__XmRenderTableAddRenditions_1=cast=(XmRendition *)
-OS__XmRenderTableAddRenditions_2=
-OS__XmRenderTableAddRenditions_3=
-
-OS__XmRenderTableFree=
-OS__XmRenderTableFree_0=cast=(XmRenderTable)
-
-OS__XmRenditionCreate=
-OS__XmRenditionCreate_0=cast=(Widget)
-OS__XmRenditionCreate_1=cast=(XmStringTag)
-OS__XmRenditionCreate_2=cast=(ArgList)
-OS__XmRenditionCreate_3=
-
-OS__XmRenditionFree=
-OS__XmRenditionFree_0=cast=(XmRendition)
-
-OS__XmStringBaseline=
-OS__XmStringBaseline_0=cast=XmRenderTable
-OS__XmStringBaseline_1=cast=XmString
-
-OS__XmStringCompare=
-OS__XmStringCompare_0=cast=(XmString)
-OS__XmStringCompare_1=cast=(XmString)
-
-OS__XmStringComponentCreate=
-OS__XmStringComponentCreate_0=
-OS__XmStringComponentCreate_1=
-OS__XmStringComponentCreate_2=cast=(XtPointer)
-
-OS__XmStringConcat=
-OS__XmStringConcat_0=cast=(XmString)
-OS__XmStringConcat_1=cast=(XmString)
-
-OS__XmStringCreate=
-OS__XmStringCreate_0=cast=(char *)
-OS__XmStringCreate_1=cast=(char *)
-
-OS__XmStringCreateLocalized=
-OS__XmStringCreateLocalized_0=cast=(char *)
-
-OS__XmStringDraw=
-OS__XmStringDraw_0=cast=(Display *)
-OS__XmStringDraw_1=cast=(Window)
-OS__XmStringDraw_2=cast=(XmFontList)
-OS__XmStringDraw_3=cast=(XmString)
-OS__XmStringDraw_4=cast=(GC)
-OS__XmStringDraw_5=
-OS__XmStringDraw_6=
-OS__XmStringDraw_7=
-OS__XmStringDraw_8=
-OS__XmStringDraw_9=
-OS__XmStringDraw_10=
-
-OS__XmStringDrawImage=
-OS__XmStringDrawImage_0=cast=(Display *)
-OS__XmStringDrawImage_1=cast=(Window)
-OS__XmStringDrawImage_2=cast=(XmFontList)
-OS__XmStringDrawImage_3=cast=(XmString)
-OS__XmStringDrawImage_4=cast=(GC)
-OS__XmStringDrawImage_5=
-OS__XmStringDrawImage_6=
-OS__XmStringDrawImage_7=
-OS__XmStringDrawImage_8=
-OS__XmStringDrawImage_9=
-OS__XmStringDrawImage_10=
-
-OS__XmStringDrawUnderline=
-OS__XmStringDrawUnderline_0=cast=(Display *)
-OS__XmStringDrawUnderline_1=cast=(Window)
-OS__XmStringDrawUnderline_2=cast=(XmFontList)
-OS__XmStringDrawUnderline_3=cast=(XmString)
-OS__XmStringDrawUnderline_4=cast=(GC)
-OS__XmStringDrawUnderline_5=
-OS__XmStringDrawUnderline_6=
-OS__XmStringDrawUnderline_7=
-OS__XmStringDrawUnderline_8=
-OS__XmStringDrawUnderline_9=
-OS__XmStringDrawUnderline_10=
-OS__XmStringDrawUnderline_11=cast=(XmString)
-
-OS__XmStringEmpty=
-OS__XmStringEmpty_0=cast=(XmString)
-
-OS__XmStringExtent=
-OS__XmStringExtent_0=cast=XmRenderTable
-OS__XmStringExtent_1=cast=XmString
-OS__XmStringExtent_2=cast=Dimension *
-OS__XmStringExtent_3=cast=Dimension *
-
-OS__XmStringFree=
-OS__XmStringFree_0=cast=(XmString)
-
-OS__XmStringGenerate=
-OS__XmStringGenerate_0=cast=(XtPointer)
-OS__XmStringGenerate_1=cast=(XmStringTag)
-OS__XmStringGenerate_2=
-OS__XmStringGenerate_3=cast=(XmStringTag)
-
-OS__XmStringHeight=
-OS__XmStringHeight_0=cast=(XmFontList)
-OS__XmStringHeight_1=cast=(XmString)
-
-OS__XmStringParseText=
-OS__XmStringParseText_0=cast=(XtPointer)
-OS__XmStringParseText_1=cast=(XtPointer *)
-OS__XmStringParseText_2=cast=(XmStringTag)
-OS__XmStringParseText_3=
-OS__XmStringParseText_4=cast=(XmParseTable)
-OS__XmStringParseText_5=
-OS__XmStringParseText_6=cast=(XtPointer)
-
-OS__XmStringUnparse=
-OS__XmStringUnparse_0=cast=(XmString)
-OS__XmStringUnparse_1=cast=(XmStringTag)
-OS__XmStringUnparse_2=
-OS__XmStringUnparse_3=
-OS__XmStringUnparse_4=cast=(XmParseTable)
-OS__XmStringUnparse_5=
-OS__XmStringUnparse_6=
-
-OS__XmStringWidth=
-OS__XmStringWidth_0=cast=(XmFontList)
-OS__XmStringWidth_1=cast=(XmString)
-
-OS__XmTabCreate=
-OS__XmTabCreate_0=
-OS__XmTabCreate_1=
-OS__XmTabCreate_2=
-OS__XmTabCreate_3=
-OS__XmTabCreate_4=cast=(char *)
-
-OS__XmTabFree=
-OS__XmTabFree_0=cast=(XmTab)
-
-OS__XmTabListFree=
-OS__XmTabListFree_0=cast=(XmTabList)
-
-OS__XmTabListInsertTabs=
-OS__XmTabListInsertTabs_0=cast=(XmTabList)
-OS__XmTabListInsertTabs_1=cast=(XmTab *)
-OS__XmTabListInsertTabs_2=
-OS__XmTabListInsertTabs_3=
-
-OS__XmTextClearSelection=
-OS__XmTextClearSelection_0=cast=(Widget)
-OS__XmTextClearSelection_1=
-
-OS__XmTextCopy=
-OS__XmTextCopy_0=cast=(Widget)
-OS__XmTextCopy_1=
-
-OS__XmTextCut=
-OS__XmTextCut_0=cast=(Widget)
-OS__XmTextCut_1=
-
-OS__XmTextDisableRedisplay=
-OS__XmTextDisableRedisplay_0=cast=(Widget)
-
-OS__XmTextEnableRedisplay=
-OS__XmTextEnableRedisplay_0=cast=(Widget)
-
-OS__XmTextFieldPaste=
-OS__XmTextFieldPaste_0=cast=(Widget)
-
-OS__XmTextGetInsertionPosition=
-OS__XmTextGetInsertionPosition_0=cast=(Widget)
-
-OS__XmTextGetLastPosition=
-OS__XmTextGetLastPosition_0=cast=(Widget)
-
-OS__XmTextGetMaxLength=
-OS__XmTextGetMaxLength_0=cast=(Widget)
-
-OS__XmTextGetSelection=
-OS__XmTextGetSelection_0=cast=(Widget)
-
-OS__XmTextGetSelectionPosition=
-OS__XmTextGetSelectionPosition_0=cast=(Widget)
-OS__XmTextGetSelectionPosition_1=cast=(XmTextPosition *)
-OS__XmTextGetSelectionPosition_2=cast=(XmTextPosition *)
-
-OS__XmTextGetString=
-OS__XmTextGetString_0=cast=(Widget)
-
-OS__XmTextGetSubstring=
-OS__XmTextGetSubstring_0=cast=(Widget)
-OS__XmTextGetSubstring_1=
-OS__XmTextGetSubstring_2=
-OS__XmTextGetSubstring_3=
-OS__XmTextGetSubstring_4=cast=(char *)
-
-OS__XmTextGetSubstringWcs=
-OS__XmTextGetSubstringWcs_0=cast=(Widget)
-OS__XmTextGetSubstringWcs_1=cast=(XmTextPosition)
-OS__XmTextGetSubstringWcs_2=
-OS__XmTextGetSubstringWcs_3=
-OS__XmTextGetSubstringWcs_4=cast=(wchar_t *)
-
-OS__XmTextInsert=
-OS__XmTextInsert_0=cast=(Widget)
-OS__XmTextInsert_1=
-OS__XmTextInsert_2=cast=(char *)
-
-OS__XmTextPaste=
-OS__XmTextPaste_0=cast=(Widget)
-
-OS__XmTextPosToXY=
-OS__XmTextPosToXY_0=cast=(Widget)
-OS__XmTextPosToXY_1=cast=(XmTextPosition)
-OS__XmTextPosToXY_2=cast=(Position *)
-OS__XmTextPosToXY_3=cast=(Position *)
-
-OS__XmTextReplace=
-OS__XmTextReplace_0=cast=(Widget)
-OS__XmTextReplace_1=
-OS__XmTextReplace_2=
-OS__XmTextReplace_3=cast=(char *)
-
-OS__XmTextScroll=
-OS__XmTextScroll_0=cast=(Widget)
-OS__XmTextScroll_1=
-
-OS__XmTextSetEditable=
-OS__XmTextSetEditable_0=cast=(Widget)
-OS__XmTextSetEditable_1=
-
-OS__XmTextSetHighlight=
-OS__XmTextSetHighlight_0=cast=(Widget)
-OS__XmTextSetHighlight_1=
-OS__XmTextSetHighlight_2=
-OS__XmTextSetHighlight_3=
-
-OS__XmTextSetInsertionPosition=
-OS__XmTextSetInsertionPosition_0=cast=(Widget)
-OS__XmTextSetInsertionPosition_1=
-
-OS__XmTextSetMaxLength=
-OS__XmTextSetMaxLength_0=cast=(Widget)
-OS__XmTextSetMaxLength_1=
-
-OS__XmTextSetSelection=
-OS__XmTextSetSelection_0=cast=(Widget)
-OS__XmTextSetSelection_1=
-OS__XmTextSetSelection_2=
-OS__XmTextSetSelection_3=
-
-OS__XmTextSetString=
-OS__XmTextSetString_0=cast=(Widget)
-OS__XmTextSetString_1=cast=(char *)
-
-OS__XmTextShowPosition=
-OS__XmTextShowPosition_0=cast=(Widget)
-OS__XmTextShowPosition_1=
-
-OS__XmTextXYToPos=
-OS__XmTextXYToPos_0=cast=Widget
-OS__XmTextXYToPos_1=cast=Position
-OS__XmTextXYToPos_2=cast=Position
-
-OS__XmUpdateDisplay=
-OS__XmUpdateDisplay_0=cast=(Widget)
-
-OS__XmWidgetGetDisplayRect=
-OS__XmWidgetGetDisplayRect_0=cast=(Widget)
-OS__XmWidgetGetDisplayRect_1=cast=(XRectangle *)
-
-OS__XmbTextListToTextProperty=
-OS__XmbTextListToTextProperty_0=cast=(Display *)
-OS__XmbTextListToTextProperty_1=cast=(char **)
-OS__XmbTextListToTextProperty_2=
-OS__XmbTextListToTextProperty_3=cast=(XICCEncodingStyle)
-OS__XmbTextListToTextProperty_4=
-
-OS__XmbTextPropertyToTextList=
-OS__XmbTextPropertyToTextList_0=cast=(Display *)
-OS__XmbTextPropertyToTextList_1=
-OS__XmbTextPropertyToTextList_2=cast=(char ***)
-OS__XmbTextPropertyToTextList_3=cast=(int *)
-
-OS__XpCancelJob=
-OS__XpCancelJob_0=cast=(Display *)
-OS__XpCancelJob_1=
-
-OS__XpCreateContext=
-OS__XpCreateContext_0=cast=(Display *)
-OS__XpCreateContext_1=cast=(char *)
-
-OS__XpDestroyContext=
-OS__XpDestroyContext_0=cast=(Display *)
-OS__XpDestroyContext_1=cast=(XPContext)
-
-OS__XpEndJob=
-OS__XpEndJob_0=cast=(Display *)
-
-OS__XpEndPage=
-OS__XpEndPage_0=cast=(Display *)
-
-OS__XpFreePrinterList=
-OS__XpFreePrinterList_0=cast=(XPPrinterList)
-
-OS__XpGetOneAttribute=
-OS__XpGetOneAttribute_0=cast=(Display *)
-OS__XpGetOneAttribute_1=cast=(XPContext)
-OS__XpGetOneAttribute_2=cast=(XPAttributes)
-OS__XpGetOneAttribute_3=cast=(char *)
-
-OS__XpGetPageDimensions=
-OS__XpGetPageDimensions_0=cast=(Display *)
-OS__XpGetPageDimensions_1=cast=(XPContext)
-OS__XpGetPageDimensions_2=cast=(unsigned short *)
-OS__XpGetPageDimensions_3=cast=(unsigned short *)
-OS__XpGetPageDimensions_4=cast=(XRectangle *)
-
-OS__XpGetPrinterList=
-OS__XpGetPrinterList_0=cast=(Display *)
-OS__XpGetPrinterList_1=cast=(char *)
-OS__XpGetPrinterList_2=cast=(int *)
-
-OS__XpGetScreenOfContext=
-OS__XpGetScreenOfContext_0=cast=(Display *)
-OS__XpGetScreenOfContext_1=cast=(XPContext)
-
-OS__XpSetAttributes=
-OS__XpSetAttributes_0=cast=(Display *)
-OS__XpSetAttributes_1=cast=(XPContext)
-OS__XpSetAttributes_2=cast=(XPAttributes)
-OS__XpSetAttributes_3=cast=(char *)
-OS__XpSetAttributes_4=cast=(XPAttrReplacement)
-
-OS__XpSetContext=
-OS__XpSetContext_0=cast=(Display *)
-OS__XpSetContext_1=cast=(XPContext)
-
-OS__XpStartJob=
-OS__XpStartJob_0=cast=(Display *)
-OS__XpStartJob_1=cast=(XPSaveData)
-
-OS__XpStartPage=
-OS__XpStartPage_0=cast=(Display *)
-OS__XpStartPage_1=cast=(Window)
-
-OS__XtAddCallback=
-OS__XtAddCallback_0=cast=(Widget)
-OS__XtAddCallback_1=cast=(String)
-OS__XtAddCallback_2=cast=(XtCallbackProc)
-OS__XtAddCallback_3=cast=(XtPointer)
-
-OS__XtAddEventHandler=
-OS__XtAddEventHandler_0=cast=(Widget)
-OS__XtAddEventHandler_1=
-OS__XtAddEventHandler_2=
-OS__XtAddEventHandler_3=cast=(XtEventHandler)
-OS__XtAddEventHandler_4=cast=(XtPointer)
-
-OS__XtAddExposureToRegion=
-OS__XtAddExposureToRegion_0=cast=(XEvent *)
-OS__XtAddExposureToRegion_1=cast=(Region)
-
-OS__XtAppAddInput=
-OS__XtAppAddInput_0=cast=(XtAppContext)
-OS__XtAppAddInput_1=
-OS__XtAppAddInput_2=cast=(XtPointer)
-OS__XtAppAddInput_3=cast=(XtInputCallbackProc)
-OS__XtAppAddInput_4=cast=(XtPointer)
-
-OS__XtAppAddTimeOut=
-OS__XtAppAddTimeOut_0=cast=(XtAppContext)
-OS__XtAppAddTimeOut_1=
-OS__XtAppAddTimeOut_2=cast=(XtTimerCallbackProc)
-OS__XtAppAddTimeOut_3=cast=(XtPointer)
-
-OS__XtAppCreateShell=
-OS__XtAppCreateShell_0=cast=(String)
-OS__XtAppCreateShell_1=cast=(String)
-OS__XtAppCreateShell_2=cast=(WidgetClass)
-OS__XtAppCreateShell_3=cast=(Display *)
-OS__XtAppCreateShell_4=cast=(ArgList)
-OS__XtAppCreateShell_5=
-
-OS__XtAppGetSelectionTimeout=
-OS__XtAppGetSelectionTimeout_0=cast=(XtAppContext)
-
-OS__XtAppNextEvent=
-OS__XtAppNextEvent_0=cast=(XtAppContext)
-OS__XtAppNextEvent_1=cast=(XEvent *)
-
-OS__XtAppPeekEvent=
-OS__XtAppPeekEvent_0=cast=(XtAppContext)
-OS__XtAppPeekEvent_1=cast=(XEvent *)
-
-OS__XtAppPending=
-OS__XtAppPending_0=cast=(XtAppContext)
-
-OS__XtAppProcessEvent=
-OS__XtAppProcessEvent_0=cast=(XtAppContext)
-OS__XtAppProcessEvent_1=
-
-OS__XtAppSetErrorHandler=
-OS__XtAppSetErrorHandler_0=cast=(XtAppContext)
-OS__XtAppSetErrorHandler_1=cast=(XtErrorHandler)
-
-OS__XtAppSetFallbackResources=
-OS__XtAppSetFallbackResources_0=cast=(XtAppContext)
-OS__XtAppSetFallbackResources_1=cast=(String *)
-
-OS__XtAppSetSelectionTimeout=
-OS__XtAppSetSelectionTimeout_0=cast=(XtAppContext)
-OS__XtAppSetSelectionTimeout_1=
-
-OS__XtAppSetWarningHandler=
-OS__XtAppSetWarningHandler_0=cast=(XtAppContext)
-OS__XtAppSetWarningHandler_1=cast=(XtErrorHandler)
-
-OS__XtBuildEventMask=
-OS__XtBuildEventMask_0=cast=(Widget)
-
-OS__XtCallActionProc=
-OS__XtCallActionProc_0=cast=(Widget)
-OS__XtCallActionProc_1=cast=(String)
-OS__XtCallActionProc_2=cast=(XEvent *)
-OS__XtCallActionProc_3=cast=(String *)
-OS__XtCallActionProc_4=
-
-OS__XtClass=
-OS__XtClass_0=cast=(Widget)
-
-OS__XtConfigureWidget=
-OS__XtConfigureWidget_0=cast=(Widget)
-OS__XtConfigureWidget_1=
-OS__XtConfigureWidget_2=
-OS__XtConfigureWidget_3=
-OS__XtConfigureWidget_4=
-OS__XtConfigureWidget_5=
-
-OS__XtCreateApplicationContext=
-
-OS__XtCreatePopupShell=
-OS__XtCreatePopupShell_0=cast=(String)
-OS__XtCreatePopupShell_1=cast=(WidgetClass)
-OS__XtCreatePopupShell_2=cast=(Widget)
-OS__XtCreatePopupShell_3=cast=(ArgList)
-OS__XtCreatePopupShell_4=
-
-OS__XtDestroyApplicationContext=
-OS__XtDestroyApplicationContext_0=cast=(XtAppContext)
-
-OS__XtDestroyWidget=
-OS__XtDestroyWidget_0=cast=(Widget)
-
-OS__XtDisownSelection=
-OS__XtDisownSelection_0=cast=Widget
-OS__XtDisownSelection_1=cast=Atom
-OS__XtDisownSelection_2=cast=Time
-
-OS__XtDispatchEvent=
-OS__XtDispatchEvent_0=cast=(XEvent *)
-
-OS__XtDisplay=
-OS__XtDisplay_0=cast=(Widget)
-
-OS__XtDisplayToApplicationContext=
-OS__XtDisplayToApplicationContext_0=cast=(Display *)
-
-OS__XtFree=
-OS__XtFree_0=cast=(char *)
-
-OS__XtGetMultiClickTime=
-OS__XtGetMultiClickTime_0=cast=(Display *)
-
-OS__XtGetSelectionValue=
-OS__XtGetSelectionValue_0=cast=Widget
-OS__XtGetSelectionValue_1=cast=Atom
-OS__XtGetSelectionValue_2=cast=Atom
-OS__XtGetSelectionValue_3=cast=XtSelectionCallbackProc
-OS__XtGetSelectionValue_4=cast=XtPointer
-OS__XtGetSelectionValue_5=cast=Time
-
-OS__XtGetValues=flags=no_gen
-OS__XtGetValues_0=cast=(Widget)
-OS__XtGetValues_1=cast=(ArgList)
-OS__XtGetValues_2=
-
-OS__XtInsertEventHandler=
-OS__XtInsertEventHandler_0=cast=(Widget)
-OS__XtInsertEventHandler_1=cast=(EventMask)
-OS__XtInsertEventHandler_2=cast=(Boolean)
-OS__XtInsertEventHandler_3=cast=(XtEventHandler)
-OS__XtInsertEventHandler_4=cast=(XtPointer)
-OS__XtInsertEventHandler_5=cast=(XtListPosition)
-
-OS__XtIsManaged=
-OS__XtIsManaged_0=cast=(Widget)
-
-OS__XtIsRealized=
-OS__XtIsRealized_0=cast=(Widget)
-
-OS__XtIsSubclass=
-OS__XtIsSubclass_0=cast=(Widget)
-OS__XtIsSubclass_1=cast=(WidgetClass)
-
-OS__XtIsTopLevelShell=
-OS__XtIsTopLevelShell_0=cast=(Widget)
-
-OS__XtLastTimestampProcessed=
-OS__XtLastTimestampProcessed_0=cast=(Display *)
-
-OS__XtMalloc=
-OS__XtMalloc_0=
-
-OS__XtManageChild=
-OS__XtManageChild_0=cast=(Widget)
-
-OS__XtMapWidget=
-OS__XtMapWidget_0=cast=(Widget)
-
-OS__XtMoveWidget=
-OS__XtMoveWidget_0=cast=(Widget)
-OS__XtMoveWidget_1=
-OS__XtMoveWidget_2=
-
-OS__XtNameToWidget=
-OS__XtNameToWidget_0=cast=(Widget)
-OS__XtNameToWidget_1=cast=(String)
-
-OS__XtOpenDisplay=
-OS__XtOpenDisplay_0=cast=(XtAppContext)
-OS__XtOpenDisplay_1=cast=(String)
-OS__XtOpenDisplay_2=cast=(String)
-OS__XtOpenDisplay_3=cast=(String)
-OS__XtOpenDisplay_4=cast=(XrmOptionDescRec *)
-OS__XtOpenDisplay_5=
-OS__XtOpenDisplay_6=cast=(int *)
-OS__XtOpenDisplay_7=cast=(char **)
-
-OS__XtOverrideTranslations=
-OS__XtOverrideTranslations_0=cast=(Widget)
-OS__XtOverrideTranslations_1=cast=(XtTranslations)
-
-OS__XtOwnSelection=
-OS__XtOwnSelection_0=cast=(Widget)
-OS__XtOwnSelection_1=cast=(Atom)
-OS__XtOwnSelection_2=cast=Time
-OS__XtOwnSelection_3=cast=XtConvertSelectionProc
-OS__XtOwnSelection_4=cast=(XtLoseSelectionProc)
-OS__XtOwnSelection_5=cast=(XtSelectionDoneProc)
-
-OS__XtParent=
-OS__XtParent_0=cast=(Widget)
-
-OS__XtParseTranslationTable=
-OS__XtParseTranslationTable_0=cast=(String)
-
-OS__XtPopdown=
-OS__XtPopdown_0=cast=(Widget)
-
-OS__XtPopup=
-OS__XtPopup_0=cast=(Widget)
-OS__XtPopup_1=
-
-OS__XtQueryGeometry=
-OS__XtQueryGeometry_0=cast=(Widget)
-OS__XtQueryGeometry_1=cast=(XtWidgetGeometry *)
-OS__XtQueryGeometry_2=cast=(XtWidgetGeometry *)
-
-OS__XtRealizeWidget=
-OS__XtRealizeWidget_0=cast=(Widget)
-
-OS__XtRegisterDrawable=
-OS__XtRegisterDrawable_0=cast=Display *
-OS__XtRegisterDrawable_1=cast=Drawable
-OS__XtRegisterDrawable_2=cast=Widget
-
-OS__XtRemoveEventHandler=
-OS__XtRemoveEventHandler_0=cast=Widget
-OS__XtRemoveEventHandler_1=
-OS__XtRemoveEventHandler_2=
-OS__XtRemoveEventHandler_3=cast=XtEventHandler
-OS__XtRemoveEventHandler_4=cast=XtPointer
-
-OS__XtRemoveInput=
-OS__XtRemoveInput_0=cast=(XtInputId)
-
-OS__XtRemoveTimeOut=
-OS__XtRemoveTimeOut_0=
-
-OS__XtResizeWidget=
-OS__XtResizeWidget_0=cast=(Widget)
-OS__XtResizeWidget_1=
-OS__XtResizeWidget_2=
-OS__XtResizeWidget_3=
-
-OS__XtResizeWindow=
-OS__XtResizeWindow_0=cast=(Widget)
-
-OS__XtSetLanguageProc=
-OS__XtSetLanguageProc_0=cast=(XtAppContext)
-OS__XtSetLanguageProc_1=cast=(XtLanguageProc)
-OS__XtSetLanguageProc_2=cast=(XtPointer)
-
-OS__XtSetMappedWhenManaged=
-OS__XtSetMappedWhenManaged_0=cast=(Widget)
-OS__XtSetMappedWhenManaged_1=
-
-OS__XtSetValues=
-OS__XtSetValues_0=cast=(Widget)
-OS__XtSetValues_1=cast=(ArgList)
-OS__XtSetValues_2=
-
-OS__XtToolkitInitialize=
-
-OS__XtToolkitThreadInitialize=
-
-OS__XtTranslateCoords=
-OS__XtTranslateCoords_0=cast=(Widget)
-OS__XtTranslateCoords_1=
-OS__XtTranslateCoords_2=
-OS__XtTranslateCoords_3=
-OS__XtTranslateCoords_4=
-
-OS__XtUnmanageChild=
-OS__XtUnmanageChild_0=cast=(Widget)
-
-OS__XtUnmapWidget=
-OS__XtUnmapWidget_0=cast=(Widget)
-
-OS__XtUnregisterDrawable=
-OS__XtUnregisterDrawable_0=cast=Display *
-OS__XtUnregisterDrawable_1=cast=Drawable
-
-OS__XtWindow=
-OS__XtWindow_0=cast=(Widget)
-
-OS__XtWindowToWidget=
-OS__XtWindowToWidget_0=cast=(Display *)
-OS__XtWindowToWidget_1=cast=(Window)
-
-OS___XmSetMenuTraversal=
-OS___XmSetMenuTraversal_0=cast=(Widget)
-OS___XmSetMenuTraversal_1=
-
-OS__applicationShellWidgetClass=flags=const
-
-OS__dlclose=
-OS__dlclose_0=cast=(void *)
-
-OS__dlopen=
-OS__dlopen_0=cast=(const char *)
-OS__dlopen_1=
-
-OS__dlsym=
-OS__dlsym_0=cast=(void *)
-OS__dlsym_1=cast=(const char *)
-
-OS__overrideShellWidgetClass=flags=const
-
-OS__shellWidgetClass=flags=const
-
-OS__topLevelShellWidgetClass=flags=const
-
-OS__transientShellWidgetClass=flags=const
-
-OS__xmMenuShellWidgetClass=flags=const
-
-OS_close=
-OS_close_0=
-
-OS_fd_set_sizeof=
-
-OS_getenv=
-OS_getenv_0=cast=(const char *)
-
-OS_iconv=
-OS_iconv_0=cast=(iconv_t)
-OS_iconv_1=cast=(void *)
-OS_iconv_2=cast=(size_t *)
-OS_iconv_3=cast=(char **)
-OS_iconv_4=cast=(size_t *)
-
-OS_iconv_close=
-OS_iconv_close_0=cast=(iconv_t)
-
-OS_iconv_open=
-OS_iconv_open_0=cast=(const char *)
-OS_iconv_open_1=cast=(const char *)
-
-OS_localeconv_decimal_point=
-
-OS_memmove__ILorg_eclipse_swt_internal_motif_XButtonEvent_2I=
-OS_memmove__ILorg_eclipse_swt_internal_motif_XButtonEvent_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_motif_XButtonEvent_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_motif_XButtonEvent_2I_2=cast=(size_t)
-
-OS_memmove__ILorg_eclipse_swt_internal_motif_XClientMessageEvent_2I=
-OS_memmove__ILorg_eclipse_swt_internal_motif_XClientMessageEvent_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_motif_XClientMessageEvent_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_motif_XClientMessageEvent_2I_2=cast=(size_t)
-
-OS_memmove__ILorg_eclipse_swt_internal_motif_XConfigureEvent_2I=
-OS_memmove__ILorg_eclipse_swt_internal_motif_XConfigureEvent_2I_0=cast=void *
-OS_memmove__ILorg_eclipse_swt_internal_motif_XConfigureEvent_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_motif_XConfigureEvent_2I_2=cast=(size_t)
-
-OS_memmove__ILorg_eclipse_swt_internal_motif_XExposeEvent_2I=
-OS_memmove__ILorg_eclipse_swt_internal_motif_XExposeEvent_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_motif_XExposeEvent_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_motif_XExposeEvent_2I_2=cast=(size_t)
-
-OS_memmove__ILorg_eclipse_swt_internal_motif_XImage_2I=
-OS_memmove__ILorg_eclipse_swt_internal_motif_XImage_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_motif_XImage_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_motif_XImage_2I_2=cast=(size_t)
-
-OS_memmove__ILorg_eclipse_swt_internal_motif_XKeyEvent_2I=
-OS_memmove__ILorg_eclipse_swt_internal_motif_XKeyEvent_2I_0=cast=void *
-OS_memmove__ILorg_eclipse_swt_internal_motif_XKeyEvent_2I_1=cast=const void *,flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_motif_XKeyEvent_2I_2=cast=size_t
-
-OS_memmove__ILorg_eclipse_swt_internal_motif_XmDragProcCallbackStruct_2I=
-OS_memmove__ILorg_eclipse_swt_internal_motif_XmDragProcCallbackStruct_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_motif_XmDragProcCallbackStruct_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_motif_XmDragProcCallbackStruct_2I_2=cast=(size_t)
-
-OS_memmove__ILorg_eclipse_swt_internal_motif_XmSpinBoxCallbackStruct_2I=
-OS_memmove__ILorg_eclipse_swt_internal_motif_XmSpinBoxCallbackStruct_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_motif_XmSpinBoxCallbackStruct_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_motif_XmSpinBoxCallbackStruct_2I_2=cast=(size_t)
-
-OS_memmove__ILorg_eclipse_swt_internal_motif_XmTextBlockRec_2I=
-OS_memmove__ILorg_eclipse_swt_internal_motif_XmTextBlockRec_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_motif_XmTextBlockRec_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_motif_XmTextBlockRec_2I_2=cast=(size_t)
-
-OS_memmove__ILorg_eclipse_swt_internal_motif_XmTextVerifyCallbackStruct_2I=
-OS_memmove__ILorg_eclipse_swt_internal_motif_XmTextVerifyCallbackStruct_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_motif_XmTextVerifyCallbackStruct_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_motif_XmTextVerifyCallbackStruct_2I_2=cast=(size_t)
-
-OS_memmove__I_3BI=
-OS_memmove__I_3BI_0=cast=(void *)
-OS_memmove__I_3BI_1=cast=(const void *),flags=no_out
-OS_memmove__I_3BI_2=cast=(size_t)
-
-OS_memmove__I_3CI=
-OS_memmove__I_3CI_0=cast=(void *)
-OS_memmove__I_3CI_1=cast=(const void *),flags=no_out
-OS_memmove__I_3CI_2=cast=(size_t)
-
-OS_memmove__I_3II=
-OS_memmove__I_3II_0=cast=(void *)
-OS_memmove__I_3II_1=cast=(const void *),flags=no_out
-OS_memmove__I_3II_2=cast=(size_t)
-
-OS_memmove__I_3SI=
-OS_memmove__I_3SI_0=cast=(void *)
-OS_memmove__I_3SI_1=cast=(const void *),flags=no_out
-OS_memmove__I_3SI_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_Visual_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_Visual_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_Visual_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_Visual_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XAnyEvent_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XAnyEvent_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XAnyEvent_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XAnyEvent_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XButtonEvent_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XButtonEvent_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XButtonEvent_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XButtonEvent_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XCharStruct_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XCharStruct_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XCharStruct_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XCharStruct_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XClientMessageEvent_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XClientMessageEvent_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XClientMessageEvent_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XClientMessageEvent_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XConfigureEvent_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XConfigureEvent_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XConfigureEvent_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XConfigureEvent_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XCreateWindowEvent_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XCreateWindowEvent_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XCreateWindowEvent_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XCreateWindowEvent_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XCrossingEvent_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XCrossingEvent_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XCrossingEvent_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XCrossingEvent_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XDestroyWindowEvent_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XDestroyWindowEvent_2II_0=cast=void *,flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XDestroyWindowEvent_2II_1=cast=const void *
-OS_memmove__Lorg_eclipse_swt_internal_motif_XDestroyWindowEvent_2II_2=cast=size_t
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XEvent_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XEvent_2II_0=cast=void *
-OS_memmove__Lorg_eclipse_swt_internal_motif_XEvent_2II_1=cast=const void *
-OS_memmove__Lorg_eclipse_swt_internal_motif_XEvent_2II_2=cast=size_t
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XExposeEvent_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XExposeEvent_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XExposeEvent_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XExposeEvent_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XFocusChangeEvent_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XFocusChangeEvent_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XFocusChangeEvent_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XFocusChangeEvent_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XFontStruct_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XFontStruct_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XFontStruct_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XFontStruct_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XIconSize_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XIconSize_2II_0=cast=void *,flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XIconSize_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XIconSize_2II_2=cast=size_t
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XImage_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XImage_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XImage_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XImage_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XKeyEvent_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XKeyEvent_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XKeyEvent_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XKeyEvent_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XModifierKeymap_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XModifierKeymap_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XModifierKeymap_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XModifierKeymap_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XMotionEvent_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XMotionEvent_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XMotionEvent_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XMotionEvent_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XPropertyEvent_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XPropertyEvent_2II_0=cast=void *,flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XPropertyEvent_2II_1=cast=const void *
-OS_memmove__Lorg_eclipse_swt_internal_motif_XPropertyEvent_2II_2=cast=size_t
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XReparentEvent_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XReparentEvent_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XReparentEvent_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XReparentEvent_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XineramaScreenInfo_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XineramaScreenInfo_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XineramaScreenInfo_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XineramaScreenInfo_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmAnyCallbackStruct_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmAnyCallbackStruct_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmAnyCallbackStruct_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmAnyCallbackStruct_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmDragProcCallbackStruct_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmDragProcCallbackStruct_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmDragProcCallbackStruct_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmDragProcCallbackStruct_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmDropFinishCallbackStruct_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmDropFinishCallbackStruct_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmDropFinishCallbackStruct_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmDropFinishCallbackStruct_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmDropProcCallbackStruct_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmDropProcCallbackStruct_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmDropProcCallbackStruct_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmDropProcCallbackStruct_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmSpinBoxCallbackStruct_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmSpinBoxCallbackStruct_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmSpinBoxCallbackStruct_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmSpinBoxCallbackStruct_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmTextBlockRec_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmTextBlockRec_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmTextBlockRec_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmTextBlockRec_2II_2=cast=(size_t)
-
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmTextVerifyCallbackStruct_2II=
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmTextVerifyCallbackStruct_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmTextVerifyCallbackStruct_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_motif_XmTextVerifyCallbackStruct_2II_2=cast=(size_t)
-
-OS_memmove___3BII=
-OS_memmove___3BII_0=cast=(void *),flags=no_in
-OS_memmove___3BII_1=cast=(const void *)
-OS_memmove___3BII_2=cast=(size_t)
-
-OS_memmove___3CII=
-OS_memmove___3CII_0=cast=(void *),flags=no_in
-OS_memmove___3CII_1=cast=(const void *)
-OS_memmove___3CII_2=cast=(size_t)
-
-OS_memmove___3III=
-OS_memmove___3III_0=cast=(void *),flags=no_in
-OS_memmove___3III_1=cast=(const void *)
-OS_memmove___3III_2=cast=(size_t)
-
-OS_nl_langinfo=
-OS_nl_langinfo_0=
-
-OS_pipe=
-OS_pipe_0=cast=(int *)
-
-OS_read=
-OS_read_0=
-OS_read_1=cast=(char *)
-OS_read_2=
-
-OS_select=
-OS_select_0=
-OS_select_1=cast=(fd_set *)
-OS_select_2=cast=(fd_set *)
-OS_select_3=cast=(fd_set *)
-OS_select_4=cast=(struct timeval *)
-
-OS_setResourceMem=flags=no_gen
-OS_setResourceMem_0=
-OS_setResourceMem_1=
-
-OS_setlocale=
-OS_setlocale_0=
-OS_setlocale_1=cast=(char *)
-
-OS_strlen=
-OS_strlen_0=cast=(char *)
-
-OS_write=
-OS_write_0=
-OS_write_1=cast=(char *)
-OS_write_2=
-
-
-org_eclipse_swt_internal_motif_Visual=
-Visual_ext_data=cast=(XExtData *)
-Visual_visualid=
-Visual_c_class=accessor=class
-Visual_red_mask=
-Visual_green_mask=
-Visual_blue_mask=
-Visual_bits_per_rgb=
-Visual_map_entries=
-
-org_eclipse_swt_internal_motif_XAnyEvent=
-XAnyEvent_serial=
-XAnyEvent_send_event=
-XAnyEvent_display=cast=(Display *)
-XAnyEvent_window=
-
-org_eclipse_swt_internal_motif_XButtonEvent=
-XButtonEvent_root=
-XButtonEvent_subwindow=
-XButtonEvent_time=
-XButtonEvent_x=
-XButtonEvent_y=
-XButtonEvent_x_root=
-XButtonEvent_y_root=
-XButtonEvent_state=
-XButtonEvent_button=
-XButtonEvent_same_screen=
-
-org_eclipse_swt_internal_motif_XCharStruct=
-XCharStruct_lbearing=
-XCharStruct_rbearing=
-XCharStruct_width=
-XCharStruct_ascent=
-XCharStruct_descent=
-XCharStruct_attributes=
-
-org_eclipse_swt_internal_motif_XClientMessageEvent=
-XClientMessageEvent_message_type=cast=Atom
-XClientMessageEvent_format=
-XClientMessageEvent_data=accessor=data.l,cast=long *
-
-org_eclipse_swt_internal_motif_XColor=
-XColor_pixel=
-XColor_red=
-XColor_green=
-XColor_blue=
-XColor_flags=
-XColor_pad=
-
-org_eclipse_swt_internal_motif_XConfigureEvent=
-XConfigureEvent_serial=
-XConfigureEvent_send_event=
-XConfigureEvent_display=cast=Display *
-XConfigureEvent_event=cast=Window
-XConfigureEvent_window=cast=Window
-XConfigureEvent_x=
-XConfigureEvent_y=
-XConfigureEvent_width=
-XConfigureEvent_height=
-XConfigureEvent_border_width=
-XConfigureEvent_above=cast=Window
-XConfigureEvent_override_redirect=
-
-org_eclipse_swt_internal_motif_XCreateWindowEvent=
-XCreateWindowEvent_serial=
-XCreateWindowEvent_send_event=
-XCreateWindowEvent_display=cast=(Display *)
-XCreateWindowEvent_parent=cast=Window
-XCreateWindowEvent_window=cast=Window
-XCreateWindowEvent_x=
-XCreateWindowEvent_y=
-XCreateWindowEvent_width=
-XCreateWindowEvent_height=
-XCreateWindowEvent_border_width=
-XCreateWindowEvent_override_redirect=
-
-org_eclipse_swt_internal_motif_XCrossingEvent=
-XCrossingEvent_root=
-XCrossingEvent_subwindow=
-XCrossingEvent_time=
-XCrossingEvent_x=
-XCrossingEvent_y=
-XCrossingEvent_x_root=
-XCrossingEvent_y_root=
-XCrossingEvent_mode=
-XCrossingEvent_detail=
-XCrossingEvent_same_screen=
-XCrossingEvent_focus=
-XCrossingEvent_state=
-
-org_eclipse_swt_internal_motif_XDestroyWindowEvent=
-XDestroyWindowEvent_serial=
-XDestroyWindowEvent_send_event=
-XDestroyWindowEvent_display=cast=Display *
-XDestroyWindowEvent_event=cast=Window
-XDestroyWindowEvent_window=cast=Window
-
-org_eclipse_swt_internal_motif_XEvent=
-XEvent_type=
-
-org_eclipse_swt_internal_motif_XExposeEvent=
-XExposeEvent_x=
-XExposeEvent_y=
-XExposeEvent_width=
-XExposeEvent_height=
-XExposeEvent_count=
-
-org_eclipse_swt_internal_motif_XFocusChangeEvent=
-XFocusChangeEvent_mode=
-XFocusChangeEvent_detail=
-
-org_eclipse_swt_internal_motif_XFontStruct=
-XFontStruct_ext_data=cast=(XExtData *)
-XFontStruct_fid=
-XFontStruct_direction=
-XFontStruct_min_char_or_byte2=
-XFontStruct_max_char_or_byte2=
-XFontStruct_min_byte1=
-XFontStruct_max_byte1=
-XFontStruct_all_chars_exist=
-XFontStruct_default_char=
-XFontStruct_n_properties=
-XFontStruct_properties=cast=(XFontProp *)
-XFontStruct_min_bounds_lbearing=accessor=min_bounds.lbearing
-XFontStruct_min_bounds_rbearing=accessor=min_bounds.rbearing
-XFontStruct_min_bounds_width=accessor=min_bounds.width
-XFontStruct_min_bounds_ascent=accessor=min_bounds.ascent
-XFontStruct_min_bounds_descent=accessor=min_bounds.descent
-XFontStruct_min_bounds_attributes=accessor=min_bounds.attributes
-XFontStruct_max_bounds_lbearing=accessor=max_bounds.lbearing
-XFontStruct_max_bounds_rbearing=accessor=max_bounds.rbearing
-XFontStruct_max_bounds_width=accessor=max_bounds.width
-XFontStruct_max_bounds_ascent=accessor=max_bounds.ascent
-XFontStruct_max_bounds_descent=accessor=max_bounds.descent
-XFontStruct_max_bounds_attributes=accessor=max_bounds.attributes
-XFontStruct_per_char=cast=(XCharStruct *)
-XFontStruct_ascent=
-XFontStruct_descent=
-
-org_eclipse_swt_internal_motif_XGCValues=
-XGCValues_function=
-XGCValues_plane_mask=
-XGCValues_foreground=
-XGCValues_background=
-XGCValues_line_width=
-XGCValues_line_style=
-XGCValues_cap_style=
-XGCValues_join_style=
-XGCValues_fill_style=
-XGCValues_fill_rule=
-XGCValues_arc_mode=
-XGCValues_tile=
-XGCValues_stipple=
-XGCValues_ts_x_origin=
-XGCValues_ts_y_origin=
-XGCValues_font=
-XGCValues_subwindow_mode=
-XGCValues_graphics_exposures=
-XGCValues_clip_x_origin=
-XGCValues_clip_y_origin=
-XGCValues_clip_mask=
-XGCValues_dash_offset=
-XGCValues_dashes=
-
-org_eclipse_swt_internal_motif_XIconSize=
-XIconSize_min_width=
-XIconSize_min_height=
-XIconSize_max_width=
-XIconSize_max_height=
-XIconSize_width_inc=
-XIconSize_height_inc=
-
-org_eclipse_swt_internal_motif_XImage=
-XImage_width=
-XImage_height=
-XImage_xoffset=
-XImage_format=
-XImage_data=cast=(char *)
-XImage_byte_order=
-XImage_bitmap_unit=
-XImage_bitmap_bit_order=
-XImage_bitmap_pad=
-XImage_depth=
-XImage_bytes_per_line=
-XImage_bits_per_pixel=
-XImage_red_mask=
-XImage_green_mask=
-XImage_blue_mask=
-XImage_obdata=cast=(XPointer)
-XImage_create_image=accessor=f.create_image,cast=(XImage *(*)())
-XImage_destroy_image=accessor=f.destroy_image,cast=(int(*)())
-XImage_get_pixel=accessor=f.get_pixel,cast=(unsigned long(*)())
-XImage_put_pixel=accessor=f.put_pixel,cast=(int(*)())
-XImage_sub_image=accessor=f.sub_image,cast=(XImage *(*)())
-XImage_add_pixel=accessor=f.add_pixel,cast=(int(*)())
-
-org_eclipse_swt_internal_motif_XKeyEvent=
-XKeyEvent_root=
-XKeyEvent_subwindow=
-XKeyEvent_time=
-XKeyEvent_x=
-XKeyEvent_y=
-XKeyEvent_x_root=
-XKeyEvent_y_root=
-XKeyEvent_state=
-XKeyEvent_keycode=
-XKeyEvent_same_screen=
-
-org_eclipse_swt_internal_motif_XModifierKeymap=
-XModifierKeymap_max_keypermod=
-XModifierKeymap_modifiermap=cast=(KeyCode *)
-
-org_eclipse_swt_internal_motif_XMotionEvent=
-XMotionEvent_root=
-XMotionEvent_subwindow=
-XMotionEvent_time=
-XMotionEvent_x=
-XMotionEvent_y=
-XMotionEvent_x_root=
-XMotionEvent_y_root=
-XMotionEvent_state=
-XMotionEvent_is_hint=
-XMotionEvent_same_screen=
-
-org_eclipse_swt_internal_motif_XPropertyEvent=
-XPropertyEvent_atom=
-XPropertyEvent_time=
-XPropertyEvent_state=
-
-org_eclipse_swt_internal_motif_XRectangle=
-XRectangle_x=
-XRectangle_y=
-XRectangle_width=
-XRectangle_height=
-
-org_eclipse_swt_internal_motif_XRenderPictureAttributes=
-XRenderPictureAttributes_repeat=
-XRenderPictureAttributes_alpha_map=
-XRenderPictureAttributes_alpha_x_origin=
-XRenderPictureAttributes_alpha_y_origin=
-XRenderPictureAttributes_clip_x_origin=
-XRenderPictureAttributes_clip_y_origin=
-XRenderPictureAttributes_clip_mask=
-XRenderPictureAttributes_graphics_exposures=
-XRenderPictureAttributes_subwindow_mode=
-XRenderPictureAttributes_poly_edge=
-XRenderPictureAttributes_poly_mode=
-XRenderPictureAttributes_dither=
-XRenderPictureAttributes_component_alpha=
-
-org_eclipse_swt_internal_motif_XReparentEvent=
-XReparentEvent_serial=
-XReparentEvent_send_event=
-XReparentEvent_display=cast=Display *
-XReparentEvent_event=cast=Window
-XReparentEvent_window=cast=Window
-XReparentEvent_parent=cast=Window
-XReparentEvent_x=
-XReparentEvent_y=
-XReparentEvent_override_redirect=
-
-org_eclipse_swt_internal_motif_XSetWindowAttributes=
-XSetWindowAttributes_background_pixmap=
-XSetWindowAttributes_background_pixel=
-XSetWindowAttributes_border_pixmap=
-XSetWindowAttributes_border_pixel=
-XSetWindowAttributes_bit_gravity=
-XSetWindowAttributes_win_gravity=
-XSetWindowAttributes_backing_store=
-XSetWindowAttributes_backing_planes=
-XSetWindowAttributes_backing_pixel=
-XSetWindowAttributes_save_under=
-XSetWindowAttributes_event_mask=
-XSetWindowAttributes_do_not_propagate_mask=
-XSetWindowAttributes_override_redirect=
-XSetWindowAttributes_colormap=
-XSetWindowAttributes_cursor=
-
-org_eclipse_swt_internal_motif_XSizeHints=
-XSizeHints_flags=
-XSizeHints_x=
-XSizeHints_y=
-XSizeHints_width=
-XSizeHints_height=
-XSizeHints_min_width=
-XSizeHints_min_height=
-XSizeHints_max_width=
-XSizeHints_max_height=
-XSizeHints_width_inc=
-XSizeHints_height_inc=
-XSizeHints_aspect_x=accessor=min_aspect.x
-XSizeHints_aspect_y=accessor=min_aspect.y
-XSizeHints_base_width=
-XSizeHints_base_height=
-XSizeHints_win_gravity=
-
-org_eclipse_swt_internal_motif_XTextProperty=
-XTextProperty_value=cast=(unsigned char *)
-XTextProperty_encoding=
-XTextProperty_format=
-XTextProperty_nitems=
-
-org_eclipse_swt_internal_motif_XWindowAttributes=
-XWindowAttributes_x=
-XWindowAttributes_y=
-XWindowAttributes_width=
-XWindowAttributes_height=
-XWindowAttributes_border_width=
-XWindowAttributes_depth=
-XWindowAttributes_visual=cast=(Visual *)
-XWindowAttributes_root=
-XWindowAttributes_c_class=accessor=class
-XWindowAttributes_bit_gravity=
-XWindowAttributes_win_gravity=
-XWindowAttributes_backing_store=
-XWindowAttributes_backing_planes=
-XWindowAttributes_backing_pixel=
-XWindowAttributes_save_under=
-XWindowAttributes_colormap=
-XWindowAttributes_map_installed=
-XWindowAttributes_map_state=
-XWindowAttributes_all_event_masks=
-XWindowAttributes_your_event_mask=
-XWindowAttributes_do_not_propagate_mask=
-XWindowAttributes_override_redirect=
-XWindowAttributes_screen=cast=(Screen *)
-
-org_eclipse_swt_internal_motif_XWindowChanges=
-XWindowChanges_x=
-XWindowChanges_y=
-XWindowChanges_width=
-XWindowChanges_height=
-XWindowChanges_border_width=
-XWindowChanges_sibling=
-XWindowChanges_stack_mode=
-
-org_eclipse_swt_internal_motif_XineramaScreenInfo=
-XineramaScreenInfo_screen_number=
-XineramaScreenInfo_x_org=
-XineramaScreenInfo_y_org=
-XineramaScreenInfo_width=
-XineramaScreenInfo_height=
-
-org_eclipse_swt_internal_motif_XmAnyCallbackStruct=
-XmAnyCallbackStruct_reason=
-XmAnyCallbackStruct_event=cast=(XEvent *)
-
-org_eclipse_swt_internal_motif_XmDragProcCallbackStruct=
-XmDragProcCallbackStruct_timeStamp=
-XmDragProcCallbackStruct_dragContext=cast=(Widget)
-XmDragProcCallbackStruct_x=
-XmDragProcCallbackStruct_y=
-XmDragProcCallbackStruct_dropSiteStatus=
-XmDragProcCallbackStruct_operation=
-XmDragProcCallbackStruct_operations=
-XmDragProcCallbackStruct_animate=
-
-org_eclipse_swt_internal_motif_XmDropFinishCallbackStruct=
-XmDropFinishCallbackStruct_timeStamp=
-XmDropFinishCallbackStruct_operation=
-XmDropFinishCallbackStruct_operations=
-XmDropFinishCallbackStruct_dropSiteStatus=
-XmDropFinishCallbackStruct_dropAction=
-XmDropFinishCallbackStruct_completionStatus=
-
-org_eclipse_swt_internal_motif_XmDropProcCallbackStruct=
-XmDropProcCallbackStruct_timeStamp=
-XmDropProcCallbackStruct_dragContext=cast=(Widget)
-XmDropProcCallbackStruct_x=
-XmDropProcCallbackStruct_y=
-XmDropProcCallbackStruct_dropSiteStatus=
-XmDropProcCallbackStruct_operation=
-XmDropProcCallbackStruct_operations=
-XmDropProcCallbackStruct_dropAction=
-
-org_eclipse_swt_internal_motif_XmSpinBoxCallbackStruct=
-XmSpinBoxCallbackStruct_widget=cast=Widget
-XmSpinBoxCallbackStruct_doit=cast=Boolean
-XmSpinBoxCallbackStruct_position=
-XmSpinBoxCallbackStruct_value=cast=XmString
-XmSpinBoxCallbackStruct_crossed_boundary=cast=Boolean
-
-org_eclipse_swt_internal_motif_XmTextBlockRec=
-XmTextBlockRec_ptr=cast=(char *)
-XmTextBlockRec_length=
-XmTextBlockRec_format=cast=(XmTextFormat)
-
-org_eclipse_swt_internal_motif_XmTextVerifyCallbackStruct=
-XmTextVerifyCallbackStruct_doit=
-XmTextVerifyCallbackStruct_currInsert=
-XmTextVerifyCallbackStruct_newInsert=
-XmTextVerifyCallbackStruct_startPos=
-XmTextVerifyCallbackStruct_endPos=
-XmTextVerifyCallbackStruct_text=cast=(XmTextBlock)
-
-org_eclipse_swt_internal_motif_XtWidgetGeometry=
-XtWidgetGeometry_request_mode=
-XtWidgetGeometry_x=
-XtWidgetGeometry_y=
-XtWidgetGeometry_width=
-XtWidgetGeometry_height=
-XtWidgetGeometry_border_width=
-XtWidgetGeometry_sibling=cast=(Widget)
-XtWidgetGeometry_stack_mode=
-
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.mozilla.XPCOM.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.mozilla.XPCOM.properties
deleted file mode 100644
index 4c026c2..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.mozilla.XPCOM.properties
+++ /dev/null
@@ -1,969 +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
-###############################################################################
-org_eclipse_swt_internal_mozilla_XPCOM=flags=cpp
-XPCOM_Call=
-XPCOM_Call_0=cast=(nsWriteSegmentFun)
-XPCOM_Call_1=cast=(nsIInputStream *)
-XPCOM_Call_2=cast=(void *)
-XPCOM_Call_3=cast=(const char *)
-XPCOM_Call_4=
-XPCOM_Call_5=
-XPCOM_Call_6=cast=(PRUint32 *)
-
-XPCOM_NS_GetComponentManager=
-XPCOM_NS_GetComponentManager_0=cast=(nsIComponentManager**)
-
-XPCOM_NS_GetServiceManager=
-XPCOM_NS_GetServiceManager_0=cast=(nsIServiceManager**)
-
-XPCOM_NS_InitEmbedding=
-XPCOM_NS_InitEmbedding_0=cast=(nsILocalFile *)
-XPCOM_NS_InitEmbedding_1=cast=(nsIDirectoryServiceProvider *)
-
-XPCOM_NS_NewLocalFile=
-XPCOM_NS_NewLocalFile_0=cast=(nsAString *),flags=struct
-XPCOM_NS_NewLocalFile_1=
-XPCOM_NS_NewLocalFile_2=cast=(nsILocalFile**)
-
-XPCOM_NS_TermEmbedding=
-
-XPCOM_PR_Free=
-XPCOM_PR_Free_0=cast=(void *)
-
-XPCOM_PR_Malloc=
-XPCOM_PR_Malloc_0=
-
-XPCOM_VtblCall__II=
-XPCOM_VtblCall__II_0=
-XPCOM_VtblCall__II_1=
-
-XPCOM_VtblCall__IIF=
-XPCOM_VtblCall__IIF_0=
-XPCOM_VtblCall__IIF_1=
-XPCOM_VtblCall__IIF_2=
-
-XPCOM_VtblCall__III=
-XPCOM_VtblCall__III_0=
-XPCOM_VtblCall__III_1=
-XPCOM_VtblCall__III_2=
-
-XPCOM_VtblCall__IIII=
-XPCOM_VtblCall__IIII_0=
-XPCOM_VtblCall__IIII_1=
-XPCOM_VtblCall__IIII_2=
-XPCOM_VtblCall__IIII_3=
-
-XPCOM_VtblCall__IIIII=
-XPCOM_VtblCall__IIIII_0=
-XPCOM_VtblCall__IIIII_1=
-XPCOM_VtblCall__IIIII_2=
-XPCOM_VtblCall__IIIII_3=
-XPCOM_VtblCall__IIIII_4=
-
-XPCOM_VtblCall__IIIIII=
-XPCOM_VtblCall__IIIIII_0=
-XPCOM_VtblCall__IIIIII_1=
-XPCOM_VtblCall__IIIIII_2=
-XPCOM_VtblCall__IIIIII_3=
-XPCOM_VtblCall__IIIIII_4=
-XPCOM_VtblCall__IIIIII_5=
-
-XPCOM_VtblCall__IIIIIII=
-XPCOM_VtblCall__IIIIIII_0=
-XPCOM_VtblCall__IIIIIII_1=
-XPCOM_VtblCall__IIIIIII_2=
-XPCOM_VtblCall__IIIIIII_3=
-XPCOM_VtblCall__IIIIIII_4=
-XPCOM_VtblCall__IIIIIII_5=
-XPCOM_VtblCall__IIIIIII_6=
-
-XPCOM_VtblCall__IIIIIIII=
-XPCOM_VtblCall__IIIIIIII_0=
-XPCOM_VtblCall__IIIIIIII_1=
-XPCOM_VtblCall__IIIIIIII_2=
-XPCOM_VtblCall__IIIIIIII_3=
-XPCOM_VtblCall__IIIIIIII_4=
-XPCOM_VtblCall__IIIIIIII_5=
-XPCOM_VtblCall__IIIIIIII_6=
-XPCOM_VtblCall__IIIIIIII_7=
-
-XPCOM_VtblCall__IIIIIIZ=
-XPCOM_VtblCall__IIIIIIZ_0=
-XPCOM_VtblCall__IIIIIIZ_1=
-XPCOM_VtblCall__IIIIIIZ_2=
-XPCOM_VtblCall__IIIIIIZ_3=
-XPCOM_VtblCall__IIIIIIZ_4=
-XPCOM_VtblCall__IIIIIIZ_5=
-XPCOM_VtblCall__IIIIIIZ_6=
-
-XPCOM_VtblCall__IIIIIZ=
-XPCOM_VtblCall__IIIIIZ_0=
-XPCOM_VtblCall__IIIIIZ_1=
-XPCOM_VtblCall__IIIIIZ_2=
-XPCOM_VtblCall__IIIIIZ_3=
-XPCOM_VtblCall__IIIIIZ_4=
-XPCOM_VtblCall__IIIIIZ_5=
-
-XPCOM_VtblCall__IIIIIZ_3CIIIIZ_3I_3I=
-XPCOM_VtblCall__IIIIIZ_3CIIIIZ_3I_3I_0=
-XPCOM_VtblCall__IIIIIZ_3CIIIIZ_3I_3I_1=
-XPCOM_VtblCall__IIIIIZ_3CIIIIZ_3I_3I_2=
-XPCOM_VtblCall__IIIIIZ_3CIIIIZ_3I_3I_3=
-XPCOM_VtblCall__IIIIIZ_3CIIIIZ_3I_3I_4=
-XPCOM_VtblCall__IIIIIZ_3CIIIIZ_3I_3I_5=
-XPCOM_VtblCall__IIIIIZ_3CIIIIZ_3I_3I_6=
-XPCOM_VtblCall__IIIIIZ_3CIIIIZ_3I_3I_7=
-XPCOM_VtblCall__IIIIIZ_3CIIIIZ_3I_3I_8=
-XPCOM_VtblCall__IIIIIZ_3CIIIIZ_3I_3I_9=
-XPCOM_VtblCall__IIIIIZ_3CIIIIZ_3I_3I_10=
-XPCOM_VtblCall__IIIIIZ_3CIIIIZ_3I_3I_11=
-XPCOM_VtblCall__IIIIIZ_3CIIIIZ_3I_3I_12=
-XPCOM_VtblCall__IIIIIZ_3CIIIIZ_3I_3I_13=
-
-XPCOM_VtblCall__IIIII_3C=
-XPCOM_VtblCall__IIIII_3C_0=
-XPCOM_VtblCall__IIIII_3C_1=
-XPCOM_VtblCall__IIIII_3C_2=
-XPCOM_VtblCall__IIIII_3C_3=
-XPCOM_VtblCall__IIIII_3C_4=
-XPCOM_VtblCall__IIIII_3C_5=
-
-XPCOM_VtblCall__IIIII_3I=
-XPCOM_VtblCall__IIIII_3I_0=
-XPCOM_VtblCall__IIIII_3I_1=
-XPCOM_VtblCall__IIIII_3I_2=
-XPCOM_VtblCall__IIIII_3I_3=
-XPCOM_VtblCall__IIIII_3I_4=
-XPCOM_VtblCall__IIIII_3I_5=
-
-XPCOM_VtblCall__IIIIJZ=
-XPCOM_VtblCall__IIIIJZ_0=
-XPCOM_VtblCall__IIIIJZ_1=
-XPCOM_VtblCall__IIIIJZ_2=
-XPCOM_VtblCall__IIIIJZ_3=
-XPCOM_VtblCall__IIIIJZ_4=
-XPCOM_VtblCall__IIIIJZ_5=
-
-XPCOM_VtblCall__IIIIZ=
-XPCOM_VtblCall__IIIIZ_0=
-XPCOM_VtblCall__IIIIZ_1=
-XPCOM_VtblCall__IIIIZ_2=
-XPCOM_VtblCall__IIIIZ_3=
-XPCOM_VtblCall__IIIIZ_4=
-
-XPCOM_VtblCall__IIII_3C=
-XPCOM_VtblCall__IIII_3C_0=
-XPCOM_VtblCall__IIII_3C_1=
-XPCOM_VtblCall__IIII_3C_2=
-XPCOM_VtblCall__IIII_3C_3=
-XPCOM_VtblCall__IIII_3C_4=
-
-XPCOM_VtblCall__IIII_3CIJI=
-XPCOM_VtblCall__IIII_3CIJI_0=
-XPCOM_VtblCall__IIII_3CIJI_1=
-XPCOM_VtblCall__IIII_3CIJI_2=
-XPCOM_VtblCall__IIII_3CIJI_3=
-XPCOM_VtblCall__IIII_3CIJI_4=
-XPCOM_VtblCall__IIII_3CIJI_5=
-XPCOM_VtblCall__IIII_3CIJI_6=
-XPCOM_VtblCall__IIII_3CIJI_7=
-
-XPCOM_VtblCall__IIII_3I=
-XPCOM_VtblCall__IIII_3I_0=
-XPCOM_VtblCall__IIII_3I_1=
-XPCOM_VtblCall__IIII_3I_2=
-XPCOM_VtblCall__IIII_3I_3=
-XPCOM_VtblCall__IIII_3I_4=
-
-XPCOM_VtblCall__IIII_3J=
-XPCOM_VtblCall__IIII_3J_0=
-XPCOM_VtblCall__IIII_3J_1=
-XPCOM_VtblCall__IIII_3J_2=
-XPCOM_VtblCall__IIII_3J_3=
-XPCOM_VtblCall__IIII_3J_4=
-
-XPCOM_VtblCall__IIIJJ=
-XPCOM_VtblCall__IIIJJ_0=
-XPCOM_VtblCall__IIIJJ_1=
-XPCOM_VtblCall__IIIJJ_2=
-XPCOM_VtblCall__IIIJJ_3=
-XPCOM_VtblCall__IIIJJ_4=
-
-XPCOM_VtblCall__IIILorg_eclipse_swt_internal_mozilla_nsID_2=
-XPCOM_VtblCall__IIILorg_eclipse_swt_internal_mozilla_nsID_2_0=
-XPCOM_VtblCall__IIILorg_eclipse_swt_internal_mozilla_nsID_2_1=
-XPCOM_VtblCall__IIILorg_eclipse_swt_internal_mozilla_nsID_2_2=
-XPCOM_VtblCall__IIILorg_eclipse_swt_internal_mozilla_nsID_2_3=
-
-XPCOM_VtblCall__IIILorg_eclipse_swt_internal_mozilla_nsID_2_3I=
-XPCOM_VtblCall__IIILorg_eclipse_swt_internal_mozilla_nsID_2_3I_0=
-XPCOM_VtblCall__IIILorg_eclipse_swt_internal_mozilla_nsID_2_3I_1=
-XPCOM_VtblCall__IIILorg_eclipse_swt_internal_mozilla_nsID_2_3I_2=
-XPCOM_VtblCall__IIILorg_eclipse_swt_internal_mozilla_nsID_2_3I_3=
-XPCOM_VtblCall__IIILorg_eclipse_swt_internal_mozilla_nsID_2_3I_4=
-
-XPCOM_VtblCall__IIIZ=
-XPCOM_VtblCall__IIIZ_0=
-XPCOM_VtblCall__IIIZ_1=
-XPCOM_VtblCall__IIIZ_2=
-XPCOM_VtblCall__IIIZ_3=
-
-XPCOM_VtblCall__IIIZZ=
-XPCOM_VtblCall__IIIZZ_0=
-XPCOM_VtblCall__IIIZZ_1=
-XPCOM_VtblCall__IIIZZ_2=
-XPCOM_VtblCall__IIIZZ_3=
-XPCOM_VtblCall__IIIZZ_4=
-
-XPCOM_VtblCall__IIIZZII=
-XPCOM_VtblCall__IIIZZII_0=
-XPCOM_VtblCall__IIIZZII_1=
-XPCOM_VtblCall__IIIZZII_2=
-XPCOM_VtblCall__IIIZZII_3=
-XPCOM_VtblCall__IIIZZII_4=
-XPCOM_VtblCall__IIIZZII_5=
-XPCOM_VtblCall__IIIZZII_6=
-
-XPCOM_VtblCall__IIIZZIIIIIIZZZZSI=
-XPCOM_VtblCall__IIIZZIIIIIIZZZZSI_0=
-XPCOM_VtblCall__IIIZZIIIIIIZZZZSI_1=
-XPCOM_VtblCall__IIIZZIIIIIIZZZZSI_2=
-XPCOM_VtblCall__IIIZZIIIIIIZZZZSI_3=
-XPCOM_VtblCall__IIIZZIIIIIIZZZZSI_4=
-XPCOM_VtblCall__IIIZZIIIIIIZZZZSI_5=
-XPCOM_VtblCall__IIIZZIIIIIIZZZZSI_6=
-XPCOM_VtblCall__IIIZZIIIIIIZZZZSI_7=
-XPCOM_VtblCall__IIIZZIIIIIIZZZZSI_8=
-XPCOM_VtblCall__IIIZZIIIIIIZZZZSI_9=
-XPCOM_VtblCall__IIIZZIIIIIIZZZZSI_10=
-XPCOM_VtblCall__IIIZZIIIIIIZZZZSI_11=
-XPCOM_VtblCall__IIIZZIIIIIIZZZZSI_12=
-XPCOM_VtblCall__IIIZZIIIIIIZZZZSI_13=
-XPCOM_VtblCall__IIIZZIIIIIIZZZZSI_14=
-XPCOM_VtblCall__IIIZZIIIIIIZZZZSI_15=
-XPCOM_VtblCall__IIIZZIIIIIIZZZZSI_16=
-
-XPCOM_VtblCall__IIIZ_3Z=
-XPCOM_VtblCall__IIIZ_3Z_0=
-XPCOM_VtblCall__IIIZ_3Z_1=
-XPCOM_VtblCall__IIIZ_3Z_2=
-XPCOM_VtblCall__IIIZ_3Z_3=
-XPCOM_VtblCall__IIIZ_3Z_4=
-
-XPCOM_VtblCall__III_3BI_3I=
-XPCOM_VtblCall__III_3BI_3I_0=
-XPCOM_VtblCall__III_3BI_3I_1=
-XPCOM_VtblCall__III_3BI_3I_2=
-XPCOM_VtblCall__III_3BI_3I_3=
-XPCOM_VtblCall__III_3BI_3I_4=
-XPCOM_VtblCall__III_3BI_3I_5=
-
-XPCOM_VtblCall__III_3B_3B_3BI_3I=
-XPCOM_VtblCall__III_3B_3B_3BI_3I_0=
-XPCOM_VtblCall__III_3B_3B_3BI_3I_1=
-XPCOM_VtblCall__III_3B_3B_3BI_3I_2=
-XPCOM_VtblCall__III_3B_3B_3BI_3I_3=
-XPCOM_VtblCall__III_3B_3B_3BI_3I_4=
-XPCOM_VtblCall__III_3B_3B_3BI_3I_5=
-XPCOM_VtblCall__III_3B_3B_3BI_3I_6=
-XPCOM_VtblCall__III_3B_3B_3BI_3I_7=
-
-XPCOM_VtblCall__III_3B_3Z=
-XPCOM_VtblCall__III_3B_3Z_0=
-XPCOM_VtblCall__III_3B_3Z_1=
-XPCOM_VtblCall__III_3B_3Z_2=
-XPCOM_VtblCall__III_3B_3Z_3=
-XPCOM_VtblCall__III_3B_3Z_4=
-
-XPCOM_VtblCall__III_3C=
-XPCOM_VtblCall__III_3C_0=
-XPCOM_VtblCall__III_3C_1=
-XPCOM_VtblCall__III_3C_2=
-XPCOM_VtblCall__III_3C_3=
-
-XPCOM_VtblCall__III_3CI=
-XPCOM_VtblCall__III_3CI_0=
-XPCOM_VtblCall__III_3CI_1=
-XPCOM_VtblCall__III_3CI_2=
-XPCOM_VtblCall__III_3CI_3=
-XPCOM_VtblCall__III_3CI_4=
-
-XPCOM_VtblCall__III_3C_3C=
-XPCOM_VtblCall__III_3C_3C_0=
-XPCOM_VtblCall__III_3C_3C_1=
-XPCOM_VtblCall__III_3C_3C_2=
-XPCOM_VtblCall__III_3C_3C_3=
-XPCOM_VtblCall__III_3C_3C_4=
-
-XPCOM_VtblCall__III_3C_3CI_3C_3C_3C_3C_3Z_3I=
-XPCOM_VtblCall__III_3C_3CI_3C_3C_3C_3C_3Z_3I_0=
-XPCOM_VtblCall__III_3C_3CI_3C_3C_3C_3C_3Z_3I_1=
-XPCOM_VtblCall__III_3C_3CI_3C_3C_3C_3C_3Z_3I_2=
-XPCOM_VtblCall__III_3C_3CI_3C_3C_3C_3C_3Z_3I_3=
-XPCOM_VtblCall__III_3C_3CI_3C_3C_3C_3C_3Z_3I_4=
-XPCOM_VtblCall__III_3C_3CI_3C_3C_3C_3C_3Z_3I_5=
-XPCOM_VtblCall__III_3C_3CI_3C_3C_3C_3C_3Z_3I_6=
-XPCOM_VtblCall__III_3C_3CI_3C_3C_3C_3C_3Z_3I_7=
-XPCOM_VtblCall__III_3C_3CI_3C_3C_3C_3C_3Z_3I_8=
-XPCOM_VtblCall__III_3C_3CI_3C_3C_3C_3C_3Z_3I_9=
-XPCOM_VtblCall__III_3C_3CI_3C_3C_3C_3C_3Z_3I_10=
-XPCOM_VtblCall__III_3C_3CI_3C_3C_3C_3C_3Z_3I_11=
-
-XPCOM_VtblCall__III_3C_3CI_3I_3I_3Z=
-XPCOM_VtblCall__III_3C_3CI_3I_3I_3Z_0=
-XPCOM_VtblCall__III_3C_3CI_3I_3I_3Z_1=
-XPCOM_VtblCall__III_3C_3CI_3I_3I_3Z_2=
-XPCOM_VtblCall__III_3C_3CI_3I_3I_3Z_3=
-XPCOM_VtblCall__III_3C_3CI_3I_3I_3Z_4=
-XPCOM_VtblCall__III_3C_3CI_3I_3I_3Z_5=
-XPCOM_VtblCall__III_3C_3CI_3I_3I_3Z_6=
-XPCOM_VtblCall__III_3C_3CI_3I_3I_3Z_7=
-XPCOM_VtblCall__III_3C_3CI_3I_3I_3Z_8=
-
-XPCOM_VtblCall__III_3C_3C_3C_3Z=
-XPCOM_VtblCall__III_3C_3C_3C_3Z_0=
-XPCOM_VtblCall__III_3C_3C_3C_3Z_1=
-XPCOM_VtblCall__III_3C_3C_3C_3Z_2=
-XPCOM_VtblCall__III_3C_3C_3C_3Z_3=
-XPCOM_VtblCall__III_3C_3C_3C_3Z_4=
-XPCOM_VtblCall__III_3C_3C_3C_3Z_5=
-XPCOM_VtblCall__III_3C_3C_3C_3Z_6=
-
-XPCOM_VtblCall__III_3C_3C_3C_3Z_3Z=
-XPCOM_VtblCall__III_3C_3C_3C_3Z_3Z_0=
-XPCOM_VtblCall__III_3C_3C_3C_3Z_3Z_1=
-XPCOM_VtblCall__III_3C_3C_3C_3Z_3Z_2=
-XPCOM_VtblCall__III_3C_3C_3C_3Z_3Z_3=
-XPCOM_VtblCall__III_3C_3C_3C_3Z_3Z_4=
-XPCOM_VtblCall__III_3C_3C_3C_3Z_3Z_5=
-XPCOM_VtblCall__III_3C_3C_3C_3Z_3Z_6=
-XPCOM_VtblCall__III_3C_3C_3C_3Z_3Z_7=
-
-XPCOM_VtblCall__III_3C_3C_3I=
-XPCOM_VtblCall__III_3C_3C_3I_0=
-XPCOM_VtblCall__III_3C_3C_3I_1=
-XPCOM_VtblCall__III_3C_3C_3I_2=
-XPCOM_VtblCall__III_3C_3C_3I_3=
-XPCOM_VtblCall__III_3C_3C_3I_4=
-XPCOM_VtblCall__III_3C_3C_3I_5=
-
-XPCOM_VtblCall__III_3C_3C_3I_3C_3Z_3Z=
-XPCOM_VtblCall__III_3C_3C_3I_3C_3Z_3Z_0=
-XPCOM_VtblCall__III_3C_3C_3I_3C_3Z_3Z_1=
-XPCOM_VtblCall__III_3C_3C_3I_3C_3Z_3Z_2=
-XPCOM_VtblCall__III_3C_3C_3I_3C_3Z_3Z_3=
-XPCOM_VtblCall__III_3C_3C_3I_3C_3Z_3Z_4=
-XPCOM_VtblCall__III_3C_3C_3I_3C_3Z_3Z_5=
-XPCOM_VtblCall__III_3C_3C_3I_3C_3Z_3Z_6=
-XPCOM_VtblCall__III_3C_3C_3I_3C_3Z_3Z_7=
-XPCOM_VtblCall__III_3C_3C_3I_3C_3Z_3Z_8=
-
-XPCOM_VtblCall__III_3C_3C_3I_3I_3C_3Z_3Z=
-XPCOM_VtblCall__III_3C_3C_3I_3I_3C_3Z_3Z_0=
-XPCOM_VtblCall__III_3C_3C_3I_3I_3C_3Z_3Z_1=
-XPCOM_VtblCall__III_3C_3C_3I_3I_3C_3Z_3Z_2=
-XPCOM_VtblCall__III_3C_3C_3I_3I_3C_3Z_3Z_3=
-XPCOM_VtblCall__III_3C_3C_3I_3I_3C_3Z_3Z_4=
-XPCOM_VtblCall__III_3C_3C_3I_3I_3C_3Z_3Z_5=
-XPCOM_VtblCall__III_3C_3C_3I_3I_3C_3Z_3Z_6=
-XPCOM_VtblCall__III_3C_3C_3I_3I_3C_3Z_3Z_7=
-XPCOM_VtblCall__III_3C_3C_3I_3I_3C_3Z_3Z_8=
-XPCOM_VtblCall__III_3C_3C_3I_3I_3C_3Z_3Z_9=
-
-XPCOM_VtblCall__III_3C_3C_3Z=
-XPCOM_VtblCall__III_3C_3C_3Z_0=
-XPCOM_VtblCall__III_3C_3C_3Z_1=
-XPCOM_VtblCall__III_3C_3C_3Z_2=
-XPCOM_VtblCall__III_3C_3C_3Z_3=
-XPCOM_VtblCall__III_3C_3C_3Z_4=
-XPCOM_VtblCall__III_3C_3C_3Z_5=
-
-XPCOM_VtblCall__III_3I=
-XPCOM_VtblCall__III_3I_0=
-XPCOM_VtblCall__III_3I_1=
-XPCOM_VtblCall__III_3I_2=
-XPCOM_VtblCall__III_3I_3=
-
-XPCOM_VtblCall__III_3I_3I_3I_3I=
-XPCOM_VtblCall__III_3I_3I_3I_3I_0=
-XPCOM_VtblCall__III_3I_3I_3I_3I_1=
-XPCOM_VtblCall__III_3I_3I_3I_3I_2=
-XPCOM_VtblCall__III_3I_3I_3I_3I_3=
-XPCOM_VtblCall__III_3I_3I_3I_3I_4=
-XPCOM_VtblCall__III_3I_3I_3I_3I_5=
-XPCOM_VtblCall__III_3I_3I_3I_3I_6=
-
-XPCOM_VtblCall__III_3Z=
-XPCOM_VtblCall__III_3Z_0=
-XPCOM_VtblCall__III_3Z_1=
-XPCOM_VtblCall__III_3Z_2=
-XPCOM_VtblCall__III_3Z_3=
-
-XPCOM_VtblCall__IIJ=
-XPCOM_VtblCall__IIJ_0=
-XPCOM_VtblCall__IIJ_1=
-XPCOM_VtblCall__IIJ_2=
-
-XPCOM_VtblCall__IIJI=
-XPCOM_VtblCall__IIJI_0=
-XPCOM_VtblCall__IIJI_1=
-XPCOM_VtblCall__IIJI_2=
-XPCOM_VtblCall__IIJI_3=
-
-XPCOM_VtblCall__IIJJ=
-XPCOM_VtblCall__IIJJ_0=
-XPCOM_VtblCall__IIJJ_1=
-XPCOM_VtblCall__IIJJ_2=
-XPCOM_VtblCall__IIJJ_3=
-
-XPCOM_VtblCall__IIJJI=
-XPCOM_VtblCall__IIJJI_0=
-XPCOM_VtblCall__IIJJI_1=
-XPCOM_VtblCall__IIJJI_2=
-XPCOM_VtblCall__IIJJI_3=
-XPCOM_VtblCall__IIJJI_4=
-
-XPCOM_VtblCall__IIJJJJJ=
-XPCOM_VtblCall__IIJJJJJ_0=
-XPCOM_VtblCall__IIJJJJJ_1=
-XPCOM_VtblCall__IIJJJJJ_2=
-XPCOM_VtblCall__IIJJJJJ_3=
-XPCOM_VtblCall__IIJJJJJ_4=
-XPCOM_VtblCall__IIJJJJJ_5=
-XPCOM_VtblCall__IIJJJJJ_6=
-
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2I=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2I_0=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2I_1=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2I_2=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2I_3=
-
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2ILorg_eclipse_swt_internal_mozilla_nsID_2_3I=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2ILorg_eclipse_swt_internal_mozilla_nsID_2_3I_0=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2ILorg_eclipse_swt_internal_mozilla_nsID_2_3I_1=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2ILorg_eclipse_swt_internal_mozilla_nsID_2_3I_2=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2ILorg_eclipse_swt_internal_mozilla_nsID_2_3I_3=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2ILorg_eclipse_swt_internal_mozilla_nsID_2_3I_4=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2ILorg_eclipse_swt_internal_mozilla_nsID_2_3I_5=
-
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2Lorg_eclipse_swt_internal_mozilla_nsID_2_3I=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2Lorg_eclipse_swt_internal_mozilla_nsID_2_3I_0=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2Lorg_eclipse_swt_internal_mozilla_nsID_2_3I_1=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2Lorg_eclipse_swt_internal_mozilla_nsID_2_3I_2=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2Lorg_eclipse_swt_internal_mozilla_nsID_2_3I_3=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2Lorg_eclipse_swt_internal_mozilla_nsID_2_3I_4=
-
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2Lorg_eclipse_swt_internal_mozilla_nsID_2_3Z=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2Lorg_eclipse_swt_internal_mozilla_nsID_2_3Z_0=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2Lorg_eclipse_swt_internal_mozilla_nsID_2_3Z_1=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2Lorg_eclipse_swt_internal_mozilla_nsID_2_3Z_2=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2Lorg_eclipse_swt_internal_mozilla_nsID_2_3Z_3=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2Lorg_eclipse_swt_internal_mozilla_nsID_2_3Z_4=
-
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3B_3BI=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3B_3BI_0=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3B_3BI_1=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3B_3BI_2=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3B_3BI_3=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3B_3BI_4=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3B_3BI_5=
-
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3B_3BI_3B_3B=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3B_3BI_3B_3B_0=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3B_3BI_3B_3B_1=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3B_3BI_3B_3B_2=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3B_3BI_3B_3B_3=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3B_3BI_3B_3B_4=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3B_3BI_3B_3B_5=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3B_3BI_3B_3B_6=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3B_3BI_3B_3B_7=
-
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3I=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3I_0=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3I_1=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3I_2=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3I_3=
-
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3Z=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3Z_0=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3Z_1=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3Z_2=
-XPCOM_VtblCall__IILorg_eclipse_swt_internal_mozilla_nsID_2_3Z_3=
-
-XPCOM_VtblCall__IIZ=
-XPCOM_VtblCall__IIZ_0=
-XPCOM_VtblCall__IIZ_1=
-XPCOM_VtblCall__IIZ_2=
-
-XPCOM_VtblCall__IIZI=
-XPCOM_VtblCall__IIZI_0=
-XPCOM_VtblCall__IIZI_1=
-XPCOM_VtblCall__IIZI_2=
-XPCOM_VtblCall__IIZI_3=
-
-XPCOM_VtblCall__IIZ_3Z=
-XPCOM_VtblCall__IIZ_3Z_0=
-XPCOM_VtblCall__IIZ_3Z_1=
-XPCOM_VtblCall__IIZ_3Z_2=
-XPCOM_VtblCall__IIZ_3Z_3=
-
-XPCOM_VtblCall__II_3B=
-XPCOM_VtblCall__II_3B_0=
-XPCOM_VtblCall__II_3B_1=
-XPCOM_VtblCall__II_3B_2=
-
-XPCOM_VtblCall__II_3BI=
-XPCOM_VtblCall__II_3BI_0=
-XPCOM_VtblCall__II_3BI_1=
-XPCOM_VtblCall__II_3BI_2=
-XPCOM_VtblCall__II_3BI_3=
-
-XPCOM_VtblCall__II_3BILorg_eclipse_swt_internal_mozilla_nsID_2_3I=
-XPCOM_VtblCall__II_3BILorg_eclipse_swt_internal_mozilla_nsID_2_3I_0=
-XPCOM_VtblCall__II_3BILorg_eclipse_swt_internal_mozilla_nsID_2_3I_1=
-XPCOM_VtblCall__II_3BILorg_eclipse_swt_internal_mozilla_nsID_2_3I_2=
-XPCOM_VtblCall__II_3BILorg_eclipse_swt_internal_mozilla_nsID_2_3I_3=
-XPCOM_VtblCall__II_3BILorg_eclipse_swt_internal_mozilla_nsID_2_3I_4=
-XPCOM_VtblCall__II_3BILorg_eclipse_swt_internal_mozilla_nsID_2_3I_5=
-
-XPCOM_VtblCall__II_3BI_3I=
-XPCOM_VtblCall__II_3BI_3I_0=
-XPCOM_VtblCall__II_3BI_3I_1=
-XPCOM_VtblCall__II_3BI_3I_2=
-XPCOM_VtblCall__II_3BI_3I_3=
-XPCOM_VtblCall__II_3BI_3I_4=
-
-XPCOM_VtblCall__II_3BJ=
-XPCOM_VtblCall__II_3BJ_0=
-XPCOM_VtblCall__II_3BJ_1=
-XPCOM_VtblCall__II_3BJ_2=
-XPCOM_VtblCall__II_3BJ_3=
-
-XPCOM_VtblCall__II_3BLorg_eclipse_swt_internal_mozilla_nsID_2I=
-XPCOM_VtblCall__II_3BLorg_eclipse_swt_internal_mozilla_nsID_2I_0=
-XPCOM_VtblCall__II_3BLorg_eclipse_swt_internal_mozilla_nsID_2I_1=
-XPCOM_VtblCall__II_3BLorg_eclipse_swt_internal_mozilla_nsID_2I_2=
-XPCOM_VtblCall__II_3BLorg_eclipse_swt_internal_mozilla_nsID_2I_3=
-XPCOM_VtblCall__II_3BLorg_eclipse_swt_internal_mozilla_nsID_2I_4=
-
-XPCOM_VtblCall__II_3BLorg_eclipse_swt_internal_mozilla_nsID_2_3I=
-XPCOM_VtblCall__II_3BLorg_eclipse_swt_internal_mozilla_nsID_2_3I_0=
-XPCOM_VtblCall__II_3BLorg_eclipse_swt_internal_mozilla_nsID_2_3I_1=
-XPCOM_VtblCall__II_3BLorg_eclipse_swt_internal_mozilla_nsID_2_3I_2=
-XPCOM_VtblCall__II_3BLorg_eclipse_swt_internal_mozilla_nsID_2_3I_3=
-XPCOM_VtblCall__II_3BLorg_eclipse_swt_internal_mozilla_nsID_2_3I_4=
-
-XPCOM_VtblCall__II_3BLorg_eclipse_swt_internal_mozilla_nsID_2_3Z=
-XPCOM_VtblCall__II_3BLorg_eclipse_swt_internal_mozilla_nsID_2_3Z_0=
-XPCOM_VtblCall__II_3BLorg_eclipse_swt_internal_mozilla_nsID_2_3Z_1=
-XPCOM_VtblCall__II_3BLorg_eclipse_swt_internal_mozilla_nsID_2_3Z_2=
-XPCOM_VtblCall__II_3BLorg_eclipse_swt_internal_mozilla_nsID_2_3Z_3=
-XPCOM_VtblCall__II_3BLorg_eclipse_swt_internal_mozilla_nsID_2_3Z_4=
-
-XPCOM_VtblCall__II_3BZI_3I_3Z=
-XPCOM_VtblCall__II_3BZI_3I_3Z_0=
-XPCOM_VtblCall__II_3BZI_3I_3Z_1=
-XPCOM_VtblCall__II_3BZI_3I_3Z_2=
-XPCOM_VtblCall__II_3BZI_3I_3Z_3=
-XPCOM_VtblCall__II_3BZI_3I_3Z_4=
-XPCOM_VtblCall__II_3BZI_3I_3Z_5=
-XPCOM_VtblCall__II_3BZI_3I_3Z_6=
-
-XPCOM_VtblCall__II_3BZ_3I_3Z=
-XPCOM_VtblCall__II_3BZ_3I_3Z_0=
-XPCOM_VtblCall__II_3BZ_3I_3Z_1=
-XPCOM_VtblCall__II_3BZ_3I_3Z_2=
-XPCOM_VtblCall__II_3BZ_3I_3Z_3=
-XPCOM_VtblCall__II_3BZ_3I_3Z_4=
-XPCOM_VtblCall__II_3BZ_3I_3Z_5=
-
-XPCOM_VtblCall__II_3B_3B=
-XPCOM_VtblCall__II_3B_3B_0=
-XPCOM_VtblCall__II_3B_3B_1=
-XPCOM_VtblCall__II_3B_3B_2=
-XPCOM_VtblCall__II_3B_3B_3=
-
-XPCOM_VtblCall__II_3B_3BZ=
-XPCOM_VtblCall__II_3B_3BZ_0=
-XPCOM_VtblCall__II_3B_3BZ_1=
-XPCOM_VtblCall__II_3B_3BZ_2=
-XPCOM_VtblCall__II_3B_3BZ_3=
-XPCOM_VtblCall__II_3B_3BZ_4=
-
-XPCOM_VtblCall__II_3B_3B_3BZZ_3I=
-XPCOM_VtblCall__II_3B_3B_3BZZ_3I_0=
-XPCOM_VtblCall__II_3B_3B_3BZZ_3I_1=
-XPCOM_VtblCall__II_3B_3B_3BZZ_3I_2=
-XPCOM_VtblCall__II_3B_3B_3BZZ_3I_3=
-XPCOM_VtblCall__II_3B_3B_3BZZ_3I_4=
-XPCOM_VtblCall__II_3B_3B_3BZZ_3I_5=
-XPCOM_VtblCall__II_3B_3B_3BZZ_3I_6=
-XPCOM_VtblCall__II_3B_3B_3BZZ_3I_7=
-
-XPCOM_VtblCall__II_3B_3B_3I=
-XPCOM_VtblCall__II_3B_3B_3I_0=
-XPCOM_VtblCall__II_3B_3B_3I_1=
-XPCOM_VtblCall__II_3B_3B_3I_2=
-XPCOM_VtblCall__II_3B_3B_3I_3=
-XPCOM_VtblCall__II_3B_3B_3I_4=
-
-XPCOM_VtblCall__II_3B_3I=
-XPCOM_VtblCall__II_3B_3I_0=
-XPCOM_VtblCall__II_3B_3I_1=
-XPCOM_VtblCall__II_3B_3I_2=
-XPCOM_VtblCall__II_3B_3I_3=
-
-XPCOM_VtblCall__II_3B_3I_3I=
-XPCOM_VtblCall__II_3B_3I_3I_0=
-XPCOM_VtblCall__II_3B_3I_3I_1=
-XPCOM_VtblCall__II_3B_3I_3I_2=
-XPCOM_VtblCall__II_3B_3I_3I_3=
-XPCOM_VtblCall__II_3B_3I_3I_4=
-
-XPCOM_VtblCall__II_3B_3I_3Z=
-XPCOM_VtblCall__II_3B_3I_3Z_0=
-XPCOM_VtblCall__II_3B_3I_3Z_1=
-XPCOM_VtblCall__II_3B_3I_3Z_2=
-XPCOM_VtblCall__II_3B_3I_3Z_3=
-XPCOM_VtblCall__II_3B_3I_3Z_4=
-
-XPCOM_VtblCall__II_3B_3J=
-XPCOM_VtblCall__II_3B_3J_0=
-XPCOM_VtblCall__II_3B_3J_1=
-XPCOM_VtblCall__II_3B_3J_2=
-XPCOM_VtblCall__II_3B_3J_3=
-
-XPCOM_VtblCall__II_3B_3Z=
-XPCOM_VtblCall__II_3B_3Z_0=
-XPCOM_VtblCall__II_3B_3Z_1=
-XPCOM_VtblCall__II_3B_3Z_2=
-XPCOM_VtblCall__II_3B_3Z_3=
-
-XPCOM_VtblCall__II_3C=
-XPCOM_VtblCall__II_3C_0=
-XPCOM_VtblCall__II_3C_1=
-XPCOM_VtblCall__II_3C_2=
-
-XPCOM_VtblCall__II_3CIIII=
-XPCOM_VtblCall__II_3CIIII_0=
-XPCOM_VtblCall__II_3CIIII_1=
-XPCOM_VtblCall__II_3CIIII_2=
-XPCOM_VtblCall__II_3CIIII_3=
-XPCOM_VtblCall__II_3CIIII_4=
-XPCOM_VtblCall__II_3CIIII_5=
-XPCOM_VtblCall__II_3CIIII_6=
-
-XPCOM_VtblCall__II_3CI_3I=
-XPCOM_VtblCall__II_3CI_3I_0=
-XPCOM_VtblCall__II_3CI_3I_1=
-XPCOM_VtblCall__II_3CI_3I_2=
-XPCOM_VtblCall__II_3CI_3I_3=
-XPCOM_VtblCall__II_3CI_3I_4=
-
-XPCOM_VtblCall__II_3CZ=
-XPCOM_VtblCall__II_3CZ_0=
-XPCOM_VtblCall__II_3CZ_1=
-XPCOM_VtblCall__II_3CZ_2=
-XPCOM_VtblCall__II_3CZ_3=
-
-XPCOM_VtblCall__II_3C_3C=
-XPCOM_VtblCall__II_3C_3C_0=
-XPCOM_VtblCall__II_3C_3C_1=
-XPCOM_VtblCall__II_3C_3C_2=
-XPCOM_VtblCall__II_3C_3C_3=
-
-XPCOM_VtblCall__II_3C_3C_3CZ=
-XPCOM_VtblCall__II_3C_3C_3CZ_0=
-XPCOM_VtblCall__II_3C_3C_3CZ_1=
-XPCOM_VtblCall__II_3C_3C_3CZ_2=
-XPCOM_VtblCall__II_3C_3C_3CZ_3=
-XPCOM_VtblCall__II_3C_3C_3CZ_4=
-XPCOM_VtblCall__II_3C_3C_3CZ_5=
-
-XPCOM_VtblCall__II_3C_3Z=
-XPCOM_VtblCall__II_3C_3Z_0=
-XPCOM_VtblCall__II_3C_3Z_1=
-XPCOM_VtblCall__II_3C_3Z_2=
-XPCOM_VtblCall__II_3C_3Z_3=
-
-XPCOM_VtblCall__II_3F=
-XPCOM_VtblCall__II_3F_0=
-XPCOM_VtblCall__II_3F_1=
-XPCOM_VtblCall__II_3F_2=
-
-XPCOM_VtblCall__II_3I=
-XPCOM_VtblCall__II_3I_0=
-XPCOM_VtblCall__II_3I_1=
-XPCOM_VtblCall__II_3I_2=
-
-XPCOM_VtblCall__II_3I_3I=
-XPCOM_VtblCall__II_3I_3I_0=
-XPCOM_VtblCall__II_3I_3I_1=
-XPCOM_VtblCall__II_3I_3I_2=
-XPCOM_VtblCall__II_3I_3I_3=
-
-XPCOM_VtblCall__II_3I_3I_3I=
-XPCOM_VtblCall__II_3I_3I_3I_0=
-XPCOM_VtblCall__II_3I_3I_3I_1=
-XPCOM_VtblCall__II_3I_3I_3I_2=
-XPCOM_VtblCall__II_3I_3I_3I_3=
-XPCOM_VtblCall__II_3I_3I_3I_4=
-
-XPCOM_VtblCall__II_3I_3I_3I_3I=
-XPCOM_VtblCall__II_3I_3I_3I_3I_0=
-XPCOM_VtblCall__II_3I_3I_3I_3I_1=
-XPCOM_VtblCall__II_3I_3I_3I_3I_2=
-XPCOM_VtblCall__II_3I_3I_3I_3I_3=
-XPCOM_VtblCall__II_3I_3I_3I_3I_4=
-XPCOM_VtblCall__II_3I_3I_3I_3I_5=
-
-XPCOM_VtblCall__II_3I_3J=
-XPCOM_VtblCall__II_3I_3J_0=
-XPCOM_VtblCall__II_3I_3J_1=
-XPCOM_VtblCall__II_3I_3J_2=
-XPCOM_VtblCall__II_3I_3J_3=
-
-XPCOM_VtblCall__II_3I_3J_3I=
-XPCOM_VtblCall__II_3I_3J_3I_0=
-XPCOM_VtblCall__II_3I_3J_3I_1=
-XPCOM_VtblCall__II_3I_3J_3I_2=
-XPCOM_VtblCall__II_3I_3J_3I_3=
-XPCOM_VtblCall__II_3I_3J_3I_4=
-
-XPCOM_VtblCall__II_3J=
-XPCOM_VtblCall__II_3J_0=
-XPCOM_VtblCall__II_3J_1=
-XPCOM_VtblCall__II_3J_2=
-
-XPCOM_VtblCall__II_3S=
-XPCOM_VtblCall__II_3S_0=
-XPCOM_VtblCall__II_3S_1=
-XPCOM_VtblCall__II_3S_2=
-
-XPCOM_VtblCall__II_3Z=
-XPCOM_VtblCall__II_3Z_0=
-XPCOM_VtblCall__II_3Z_1=
-XPCOM_VtblCall__II_3Z_2=
-
-XPCOM_memmove__ILorg_eclipse_swt_internal_mozilla_nsID_2I=
-XPCOM_memmove__ILorg_eclipse_swt_internal_mozilla_nsID_2I_0=cast=(void *)
-XPCOM_memmove__ILorg_eclipse_swt_internal_mozilla_nsID_2I_1=cast=(const void *)
-XPCOM_memmove__ILorg_eclipse_swt_internal_mozilla_nsID_2I_2=cast=(size_t)
-
-XPCOM_memmove__I_3BI=
-XPCOM_memmove__I_3BI_0=cast=(void *)
-XPCOM_memmove__I_3BI_1=cast=(const void *)
-XPCOM_memmove__I_3BI_2=cast=(size_t)
-
-XPCOM_memmove__I_3CI=
-XPCOM_memmove__I_3CI_0=cast=(void *)
-XPCOM_memmove__I_3CI_1=cast=(const void *)
-XPCOM_memmove__I_3CI_2=cast=(size_t)
-
-XPCOM_memmove__I_3II=
-XPCOM_memmove__I_3II_0=cast=(void *)
-XPCOM_memmove__I_3II_1=cast=(const void *)
-XPCOM_memmove__I_3II_2=cast=(size_t)
-
-XPCOM_memmove__I_3JI=
-XPCOM_memmove__I_3JI_0=cast=(void *)
-XPCOM_memmove__I_3JI_1=cast=(const void *)
-XPCOM_memmove__I_3JI_2=cast=(size_t)
-
-XPCOM_memmove__Lorg_eclipse_swt_internal_mozilla_nsID_2II=
-XPCOM_memmove__Lorg_eclipse_swt_internal_mozilla_nsID_2II_0=cast=(void *)
-XPCOM_memmove__Lorg_eclipse_swt_internal_mozilla_nsID_2II_1=cast=(const void *)
-XPCOM_memmove__Lorg_eclipse_swt_internal_mozilla_nsID_2II_2=cast=(size_t)
-
-XPCOM_memmove___3BII=
-XPCOM_memmove___3BII_0=cast=(void *)
-XPCOM_memmove___3BII_1=cast=(const void *)
-XPCOM_memmove___3BII_2=cast=(size_t)
-
-XPCOM_memmove___3B_3CI=
-XPCOM_memmove___3B_3CI_0=cast=(void *)
-XPCOM_memmove___3B_3CI_1=cast=(const void *)
-XPCOM_memmove___3B_3CI_2=cast=(size_t)
-
-XPCOM_memmove___3CII=
-XPCOM_memmove___3CII_0=cast=(void *)
-XPCOM_memmove___3CII_1=cast=(const void *)
-XPCOM_memmove___3CII_2=cast=(size_t)
-
-XPCOM_memmove___3III=
-XPCOM_memmove___3III_0=cast=(void *)
-XPCOM_memmove___3III_1=cast=(const void *)
-XPCOM_memmove___3III_2=cast=(size_t)
-
-XPCOM_memmove___3JII=
-XPCOM_memmove___3JII_0=cast=(void *)
-XPCOM_memmove___3JII_1=cast=(const void *)
-XPCOM_memmove___3JII_2=cast=(size_t)
-
-XPCOM_nsEmbedCString_Length=flags=cpp
-XPCOM_nsEmbedCString_Length_0=cast=(nsEmbedCString *)
-
-XPCOM_nsEmbedCString_delete=flags=delete
-XPCOM_nsEmbedCString_delete_0=cast=(nsEmbedCString *)
-
-XPCOM_nsEmbedCString_get=flags=cpp
-XPCOM_nsEmbedCString_get_0=cast=(nsEmbedCString *)
-
-XPCOM_nsEmbedCString_1new__=flags=new
-
-XPCOM_nsEmbedCString_1new___3BI=flags=new
-XPCOM_nsEmbedCString_1new___3BI_0=cast=(const char *)
-XPCOM_nsEmbedCString_1new___3BI_1=
-
-XPCOM_nsEmbedString_Length=flags=cpp
-XPCOM_nsEmbedString_Length_0=cast=(nsEmbedString *)
-
-XPCOM_nsEmbedString_delete=flags=delete
-XPCOM_nsEmbedString_delete_0=cast=(nsEmbedString *)
-
-XPCOM_nsEmbedString_get=flags=cpp
-XPCOM_nsEmbedString_get_0=cast=(nsEmbedString *)
-
-XPCOM_nsEmbedString_1new__=flags=new
-
-XPCOM_nsEmbedString_1new___3C=flags=new
-XPCOM_nsEmbedString_1new___3C_0=
-
-XPCOM_nsID_Equals=flags=cpp
-XPCOM_nsID_Equals_0=cast=(nsID *)
-XPCOM_nsID_Equals_1=cast=(nsID *),flags=struct
-
-XPCOM_nsID_Parse=flags=cpp
-XPCOM_nsID_Parse_0=cast=(nsID *)
-XPCOM_nsID_Parse_1=cast=(const char *)
-
-XPCOM_nsID_delete=flags=delete
-XPCOM_nsID_delete_0=cast=(nsID *)
-
-XPCOM_nsID_new=flags=new
-
-XPCOM_strlen=
-XPCOM_strlen_0=cast=(char *)
-
-XPCOM_strlen_PRUnichar=flags=no_gen
-XPCOM_strlen_PRUnichar_0=
-
-
-org_eclipse_swt_internal_mozilla_XPCOMObject=
-
-org_eclipse_swt_internal_mozilla_nsEmbedString=
-
-org_eclipse_swt_internal_mozilla_nsIAppShell=
-
-org_eclipse_swt_internal_mozilla_nsIBaseWindow=
-
-org_eclipse_swt_internal_mozilla_nsICategoryManager=
-
-org_eclipse_swt_internal_mozilla_nsIComponentManager=
-
-org_eclipse_swt_internal_mozilla_nsIComponentRegistrar=
-
-org_eclipse_swt_internal_mozilla_nsIContextMenuListener=
-
-org_eclipse_swt_internal_mozilla_nsICookie=
-
-org_eclipse_swt_internal_mozilla_nsICookieManager=
-
-org_eclipse_swt_internal_mozilla_nsID=flags=cpp
-nsID_m0=
-nsID_m1=
-nsID_m2=
-nsID_m3=
-
-org_eclipse_swt_internal_mozilla_nsIDOMEvent=
-
-org_eclipse_swt_internal_mozilla_nsIDOMMouseEvent=
-
-org_eclipse_swt_internal_mozilla_nsIDOMUIEvent=
-
-org_eclipse_swt_internal_mozilla_nsIDOMWindow=
-
-org_eclipse_swt_internal_mozilla_nsIDocShell=
-
-org_eclipse_swt_internal_mozilla_nsIDownload=
-
-org_eclipse_swt_internal_mozilla_nsIEmbeddingSiteWindow=
-
-org_eclipse_swt_internal_mozilla_nsIFactory=
-
-org_eclipse_swt_internal_mozilla_nsIFile=
-
-org_eclipse_swt_internal_mozilla_nsIFilePicker=
-
-org_eclipse_swt_internal_mozilla_nsIHelperAppLauncher=
-
-org_eclipse_swt_internal_mozilla_nsIHelperAppLauncherDialog=
-
-org_eclipse_swt_internal_mozilla_nsIIOService=
-
-org_eclipse_swt_internal_mozilla_nsIInputStream=
-
-org_eclipse_swt_internal_mozilla_nsIInterfaceRequestor=
-
-org_eclipse_swt_internal_mozilla_nsILocalFile=
-
-org_eclipse_swt_internal_mozilla_nsIMemory=
-
-org_eclipse_swt_internal_mozilla_nsIPrefBranch=
-
-org_eclipse_swt_internal_mozilla_nsIPrefLocalizedString=
-
-org_eclipse_swt_internal_mozilla_nsIPrefService=
-
-org_eclipse_swt_internal_mozilla_nsIProfile=
-
-org_eclipse_swt_internal_mozilla_nsIProgressDialog=
-
-org_eclipse_swt_internal_mozilla_nsIPromptService=
-
-org_eclipse_swt_internal_mozilla_nsIRequest=
-
-org_eclipse_swt_internal_mozilla_nsIServiceManager=
-
-org_eclipse_swt_internal_mozilla_nsISimpleEnumerator=
-
-org_eclipse_swt_internal_mozilla_nsISupports=
-
-org_eclipse_swt_internal_mozilla_nsISupportsWeakReference=
-
-org_eclipse_swt_internal_mozilla_nsITooltipListener=
-
-org_eclipse_swt_internal_mozilla_nsIURI=
-
-org_eclipse_swt_internal_mozilla_nsIURIContentListener=
-
-org_eclipse_swt_internal_mozilla_nsIWeakReference=
-
-org_eclipse_swt_internal_mozilla_nsIWebBrowser=
-
-org_eclipse_swt_internal_mozilla_nsIWebBrowserChrome=
-
-org_eclipse_swt_internal_mozilla_nsIWebBrowserChromeFocus=
-
-org_eclipse_swt_internal_mozilla_nsIWebBrowserFocus=
-
-org_eclipse_swt_internal_mozilla_nsIWebBrowserStream=
-
-org_eclipse_swt_internal_mozilla_nsIWebNavigation=
-
-org_eclipse_swt_internal_mozilla_nsIWebProgress=
-
-org_eclipse_swt_internal_mozilla_nsIWebProgressListener=
-
-org_eclipse_swt_internal_mozilla_nsIWindowCreator=
-
-org_eclipse_swt_internal_mozilla_nsIWindowWatcher=
-
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.mozilla.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.mozilla.properties
deleted file mode 100644
index 542f22d..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.mozilla.properties
+++ /dev/null
@@ -1,37 +0,0 @@
-###############################################################################
-# Copyright (c) 2004 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
-###############################################################################
-swt_copyright=/* ***** BEGIN LICENSE BLOCK *****\n\
- * Version: MPL 1.1\n\
- *\n\
- * The contents of this file are subject to the Mozilla Public License Version\n\
- * 1.1 (the "License"); you may not use this file except in compliance with\n\
- * the License. You may obtain a copy of the License at\n\
- * http://www.mozilla.org/MPL/\n\
- *\n\
- * Software distributed under the License is distributed on an "AS IS" basis,\n\
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License\n\
- * for the specific language governing rights and limitations under the\n\
- * License.\n\
- *\n\
- * The Original Code is Mozilla Communicator client code, released March 31, 1998.\n\
- *\n\
- * The Initial Developer of the Original Code is\n\
- * Netscape Communications Corporation.\n\
- * Portions created by Netscape are Copyright (C) 1998-1999\n\
- * Netscape Communications Corporation.  All Rights Reserved.\n\
- *\n\
- * Contributor(s):\n\
- *\n\
- * IBM\n\
- * -  Binding to permit interfacing between Mozilla and SWT\n\
- * -  Copyright (C) 2003, 2004 IBM Corp.  All Rights Reserved.\n\
- *\n\
- * ***** END LICENSE BLOCK ***** */\n
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.ole.win32.COM.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.ole.win32.COM.properties
deleted file mode 100644
index 2f0a86b..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.ole.win32.COM.properties
+++ /dev/null
@@ -1,802 +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
-###############################################################################
-org_eclipse_swt_internal_ole_win32_CAUUID=
-CAUUID_cElems=
-CAUUID_pElems=cast=(GUID FAR *)
-
-org_eclipse_swt_internal_ole_win32_COM=
-COM_CLSIDFromProgID=
-COM_CLSIDFromProgID_0=cast=LPCOLESTR
-COM_CLSIDFromProgID_1=
-
-COM_CLSIDFromString=
-COM_CLSIDFromString_0=cast=LPOLESTR
-COM_CLSIDFromString_1=
-
-COM_CoCreateInstance=
-COM_CoCreateInstance_0=
-COM_CoCreateInstance_1=cast=LPUNKNOWN
-COM_CoCreateInstance_2=
-COM_CoCreateInstance_3=
-COM_CoCreateInstance_4=cast=LPVOID *
-
-COM_CoFreeUnusedLibraries=
-
-COM_CoGetClassObject=
-COM_CoGetClassObject_0=
-COM_CoGetClassObject_1=
-COM_CoGetClassObject_2=cast=(COSERVERINFO *
-COM_CoGetClassObject_3=
-COM_CoGetClassObject_4=cast=LPVOID *
-
-COM_CoLockObjectExternal=
-COM_CoLockObjectExternal_0=cast=(IUnknown *)
-COM_CoLockObjectExternal_1=cast=(BOOL)
-COM_CoLockObjectExternal_2=cast=(BOOL)
-
-COM_CoTaskMemAlloc=
-COM_CoTaskMemAlloc_0=cast=(ULONG)
-
-COM_CoTaskMemFree=
-COM_CoTaskMemFree_0=cast=(LPVOID)
-
-COM_CreateStdAccessibleObject=flags=dynamic
-COM_CreateStdAccessibleObject_0=cast=(HWND)
-COM_CreateStdAccessibleObject_1=
-COM_CreateStdAccessibleObject_2=
-COM_CreateStdAccessibleObject_3=cast=(LPVOID *)
-
-COM_DoDragDrop=
-COM_DoDragDrop_0=cast=(IDataObject *)
-COM_DoDragDrop_1=cast=IDropSource *
-COM_DoDragDrop_2=
-COM_DoDragDrop_3=
-
-COM_GetClassFile=
-COM_GetClassFile_0=cast=LPCWSTR
-COM_GetClassFile_1=
-
-COM_IIDFromString=
-COM_IIDFromString_0=cast=LPOLESTR
-COM_IIDFromString_1=
-
-COM_IsEqualGUID=
-COM_IsEqualGUID_0=
-COM_IsEqualGUID_1=
-
-COM_LresultFromObject=flags=dynamic
-COM_LresultFromObject_0=
-COM_LresultFromObject_1=
-COM_LresultFromObject_2=cast=(LPUNKNOWN)
-
-COM_MoveMemory__ILorg_eclipse_swt_internal_ole_win32_FORMATETC_2I=
-COM_MoveMemory__ILorg_eclipse_swt_internal_ole_win32_FORMATETC_2I_0=cast=(PVOID)
-COM_MoveMemory__ILorg_eclipse_swt_internal_ole_win32_FORMATETC_2I_1=cast=(CONST VOID *),flags=no_out
-COM_MoveMemory__ILorg_eclipse_swt_internal_ole_win32_FORMATETC_2I_2=
-
-COM_MoveMemory__ILorg_eclipse_swt_internal_ole_win32_GUID_2I=
-COM_MoveMemory__ILorg_eclipse_swt_internal_ole_win32_GUID_2I_0=cast=(PVOID)
-COM_MoveMemory__ILorg_eclipse_swt_internal_ole_win32_GUID_2I_1=cast=(CONST VOID *),flags=no_out
-COM_MoveMemory__ILorg_eclipse_swt_internal_ole_win32_GUID_2I_2=
-
-COM_MoveMemory__ILorg_eclipse_swt_internal_ole_win32_OLEINPLACEFRAMEINFO_2I=
-COM_MoveMemory__ILorg_eclipse_swt_internal_ole_win32_OLEINPLACEFRAMEINFO_2I_0=cast=(PVOID)
-COM_MoveMemory__ILorg_eclipse_swt_internal_ole_win32_OLEINPLACEFRAMEINFO_2I_1=cast=(CONST VOID *),flags=no_out
-COM_MoveMemory__ILorg_eclipse_swt_internal_ole_win32_OLEINPLACEFRAMEINFO_2I_2=
-
-COM_MoveMemory__ILorg_eclipse_swt_internal_ole_win32_STATSTG_2I=
-COM_MoveMemory__ILorg_eclipse_swt_internal_ole_win32_STATSTG_2I_0=cast=(PVOID)
-COM_MoveMemory__ILorg_eclipse_swt_internal_ole_win32_STATSTG_2I_1=cast=(CONST VOID *),flags=no_out
-COM_MoveMemory__ILorg_eclipse_swt_internal_ole_win32_STATSTG_2I_2=
-
-COM_MoveMemory__ILorg_eclipse_swt_internal_ole_win32_STGMEDIUM_2I=
-COM_MoveMemory__ILorg_eclipse_swt_internal_ole_win32_STGMEDIUM_2I_0=cast=(PVOID)
-COM_MoveMemory__ILorg_eclipse_swt_internal_ole_win32_STGMEDIUM_2I_1=cast=(CONST VOID *),flags=no_out
-COM_MoveMemory__ILorg_eclipse_swt_internal_ole_win32_STGMEDIUM_2I_2=
-
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_DISPPARAMS_2II=
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_DISPPARAMS_2II_0=cast=(PVOID),flags=no_in
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_DISPPARAMS_2II_1=cast=(CONST VOID *)
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_DISPPARAMS_2II_2=
-
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_FORMATETC_2II=
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_FORMATETC_2II_0=cast=(PVOID),flags=no_in
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_FORMATETC_2II_1=cast=(CONST VOID *)
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_FORMATETC_2II_2=
-
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_FUNCDESC_2II=
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_FUNCDESC_2II_0=cast=(PVOID),flags=no_in
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_FUNCDESC_2II_1=cast=(CONST VOID *)
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_FUNCDESC_2II_2=
-
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_GUID_2II=
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_GUID_2II_0=cast=(PVOID),flags=no_in
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_GUID_2II_1=cast=(CONST VOID *)
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_GUID_2II_2=
-
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_STATSTG_2II=
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_STATSTG_2II_0=cast=(PVOID),flags=no_in
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_STATSTG_2II_1=cast=(CONST VOID *)
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_STATSTG_2II_2=
-
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_STGMEDIUM_2II=
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_STGMEDIUM_2II_0=cast=(PVOID),flags=no_in
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_STGMEDIUM_2II_1=cast=(CONST VOID *)
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_STGMEDIUM_2II_2=
-
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_TYPEATTR_2II=
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_TYPEATTR_2II_0=cast=(PVOID),flags=no_in
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_TYPEATTR_2II_1=cast=(CONST VOID *)
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_TYPEATTR_2II_2=
-
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_VARDESC_2II=
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_VARDESC_2II_0=cast=(PVOID),flags=no_in
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_VARDESC_2II_1=cast=(CONST VOID *)
-COM_MoveMemory__Lorg_eclipse_swt_internal_ole_win32_VARDESC_2II_2=
-
-COM_MoveMemory__Lorg_eclipse_swt_internal_win32_RECT_2II=
-COM_MoveMemory__Lorg_eclipse_swt_internal_win32_RECT_2II_0=cast=(PVOID),flags=no_in
-COM_MoveMemory__Lorg_eclipse_swt_internal_win32_RECT_2II_1=cast=(CONST VOID *)
-COM_MoveMemory__Lorg_eclipse_swt_internal_win32_RECT_2II_2=
-
-COM_OleCreate=
-COM_OleCreate_0=
-COM_OleCreate_1=
-COM_OleCreate_2=
-COM_OleCreate_3=
-COM_OleCreate_4=cast=IOleClientSite *
-COM_OleCreate_5=cast=IStorage *
-COM_OleCreate_6=cast=void **
-
-COM_OleCreateFromFile=
-COM_OleCreateFromFile_0=
-COM_OleCreateFromFile_1=cast=LPCOLESTR
-COM_OleCreateFromFile_2=
-COM_OleCreateFromFile_3=
-COM_OleCreateFromFile_4=
-COM_OleCreateFromFile_5=cast=(LPOLECLIENTSITE)
-COM_OleCreateFromFile_6=cast=(LPSTORAGE)
-COM_OleCreateFromFile_7=cast=LPVOID *
-
-COM_OleCreatePropertyFrame=
-COM_OleCreatePropertyFrame_0=cast=(HWND)
-COM_OleCreatePropertyFrame_1=
-COM_OleCreatePropertyFrame_2=
-COM_OleCreatePropertyFrame_3=cast=LPCOLESTR
-COM_OleCreatePropertyFrame_4=
-COM_OleCreatePropertyFrame_5=cast=(LPUNKNOWN FAR*)
-COM_OleCreatePropertyFrame_6=
-COM_OleCreatePropertyFrame_7=cast=(LPCLSID)
-COM_OleCreatePropertyFrame_8=cast=(LCID)
-COM_OleCreatePropertyFrame_9=
-COM_OleCreatePropertyFrame_10=cast=(LPVOID)
-
-COM_OleDraw=
-COM_OleDraw_0=cast=(LPUNKNOWN)
-COM_OleDraw_1=cast=(DWORD)
-COM_OleDraw_2=cast=(HDC)
-COM_OleDraw_3=cast=(LPRECT)
-
-COM_OleFlushClipboard=
-
-COM_OleGetClipboard=
-COM_OleGetClipboard_0=cast=(IDataObject **)
-
-COM_OleIsCurrentClipboard=
-COM_OleIsCurrentClipboard_0=cast=(IDataObject *)
-
-COM_OleIsRunning=
-COM_OleIsRunning_0=cast=(LPOLEOBJECT)
-
-COM_OleLoad=
-COM_OleLoad_0=cast=(IStorage *)
-COM_OleLoad_1=
-COM_OleLoad_2=cast=(IOleClientSite *)
-COM_OleLoad_3=cast=LPVOID *
-
-COM_OleRun=
-COM_OleRun_0=cast=(LPUNKNOWN)
-
-COM_OleSave=
-COM_OleSave_0=cast=(IPersistStorage *)
-COM_OleSave_1=cast=(IStorage *)
-COM_OleSave_2=
-
-COM_OleSetClipboard=
-COM_OleSetClipboard_0=cast=(IDataObject *)
-
-COM_OleSetContainedObject=
-COM_OleSetContainedObject_0=cast=(LPUNKNOWN)
-COM_OleSetContainedObject_1=
-
-COM_OleSetMenuDescriptor=
-COM_OleSetMenuDescriptor_0=cast=(HOLEMENU)
-COM_OleSetMenuDescriptor_1=cast=(HWND)
-COM_OleSetMenuDescriptor_2=cast=(HWND)
-COM_OleSetMenuDescriptor_3=cast=(LPOLEINPLACEFRAME)
-COM_OleSetMenuDescriptor_4=cast=(LPOLEINPLACEACTIVEOBJECT)
-
-COM_OleTranslateColor=
-COM_OleTranslateColor_0=cast=(OLE_COLOR)
-COM_OleTranslateColor_1=cast=(HPALETTE)
-COM_OleTranslateColor_2=cast=(COLORREF *)
-
-COM_ProgIDFromCLSID=
-COM_ProgIDFromCLSID_0=
-COM_ProgIDFromCLSID_1=cast=LPOLESTR *
-
-COM_RegisterDragDrop=
-COM_RegisterDragDrop_0=cast=(HWND)
-COM_RegisterDragDrop_1=cast=(IDropTarget *)
-
-COM_ReleaseStgMedium=
-COM_ReleaseStgMedium_0=cast=(STGMEDIUM *)
-
-COM_RevokeDragDrop=
-COM_RevokeDragDrop_0=cast=(HWND)
-
-COM_StgCreateDocfile=
-COM_StgCreateDocfile_0=
-COM_StgCreateDocfile_1=
-COM_StgCreateDocfile_2=
-COM_StgCreateDocfile_3=cast=IStorage **
-
-COM_StgIsStorageFile=
-COM_StgIsStorageFile_0=cast=(const WCHAR *)
-
-COM_StgOpenStorage=
-COM_StgOpenStorage_0=cast=const WCHAR *
-COM_StgOpenStorage_1=cast=(IStorage *)
-COM_StgOpenStorage_2=
-COM_StgOpenStorage_3=cast=(SNB)
-COM_StgOpenStorage_4=
-COM_StgOpenStorage_5=cast=IStorage **
-
-COM_StringFromCLSID=
-COM_StringFromCLSID_0=
-COM_StringFromCLSID_1=cast=LPOLESTR *
-
-COM_SysAllocString=
-COM_SysAllocString_0=cast=(OLECHAR *)
-
-COM_SysFreeString=
-COM_SysFreeString_0=cast=(BSTR)
-
-COM_SysStringByteLen=
-COM_SysStringByteLen_0=cast=(BSTR)
-
-COM_VariantChangeType=
-COM_VariantChangeType_0=cast=(VARIANTARG FAR* )
-COM_VariantChangeType_1=cast=(VARIANTARG FAR* )
-COM_VariantChangeType_2=
-COM_VariantChangeType_3=cast=(VARTYPE)
-
-COM_VariantClear=
-COM_VariantClear_0=cast=(VARIANTARG FAR* )
-
-COM_VariantInit=
-COM_VariantInit_0=cast=(VARIANTARG FAR* )
-
-COM_VtblCall__IIII=
-COM_VtblCall__IIII_0=
-COM_VtblCall__IIII_1=
-COM_VtblCall__IIII_2=
-COM_VtblCall__IIII_3=
-
-COM_VtblCall__IIIII=
-COM_VtblCall__IIIII_0=
-COM_VtblCall__IIIII_1=
-COM_VtblCall__IIIII_2=
-COM_VtblCall__IIIII_3=
-COM_VtblCall__IIIII_4=
-
-COM_VtblCall__IIIIII=
-COM_VtblCall__IIIIII_0=
-COM_VtblCall__IIIIII_1=
-COM_VtblCall__IIIIII_2=
-COM_VtblCall__IIIIII_3=
-COM_VtblCall__IIIIII_4=
-COM_VtblCall__IIIIII_5=
-
-COM_VtblCall__IIIIIII=
-COM_VtblCall__IIIIIII_0=
-COM_VtblCall__IIIIIII_1=
-COM_VtblCall__IIIIIII_2=
-COM_VtblCall__IIIIIII_3=
-COM_VtblCall__IIIIIII_4=
-COM_VtblCall__IIIIIII_5=
-COM_VtblCall__IIIIIII_6=
-
-COM_VtblCall__IIIIIIII=
-COM_VtblCall__IIIIIIII_0=
-COM_VtblCall__IIIIIIII_1=
-COM_VtblCall__IIIIIIII_2=
-COM_VtblCall__IIIIIIII_3=
-COM_VtblCall__IIIIIIII_4=
-COM_VtblCall__IIIIIIII_5=
-COM_VtblCall__IIIIIIII_6=
-COM_VtblCall__IIIIIIII_7=
-
-COM_VtblCall__IIIIIIIIII=
-COM_VtblCall__IIIIIIIIII_0=
-COM_VtblCall__IIIIIIIIII_1=
-COM_VtblCall__IIIIIIIIII_2=
-COM_VtblCall__IIIIIIIIII_3=
-COM_VtblCall__IIIIIIIIII_4=
-COM_VtblCall__IIIIIIIIII_5=
-COM_VtblCall__IIIIIIIIII_6=
-COM_VtblCall__IIIIIIIIII_7=
-COM_VtblCall__IIIIIIIIII_8=
-COM_VtblCall__IIIIIIIIII_9=
-
-COM_VtblCall__IIIILorg_eclipse_swt_internal_ole_win32_DVTARGETDEVICE_2Lorg_eclipse_swt_internal_win32_SIZE_2=
-COM_VtblCall__IIIILorg_eclipse_swt_internal_ole_win32_DVTARGETDEVICE_2Lorg_eclipse_swt_internal_win32_SIZE_2_0=
-COM_VtblCall__IIIILorg_eclipse_swt_internal_ole_win32_DVTARGETDEVICE_2Lorg_eclipse_swt_internal_win32_SIZE_2_1=
-COM_VtblCall__IIIILorg_eclipse_swt_internal_ole_win32_DVTARGETDEVICE_2Lorg_eclipse_swt_internal_win32_SIZE_2_2=
-COM_VtblCall__IIIILorg_eclipse_swt_internal_ole_win32_DVTARGETDEVICE_2Lorg_eclipse_swt_internal_win32_SIZE_2_3=
-COM_VtblCall__IIIILorg_eclipse_swt_internal_ole_win32_DVTARGETDEVICE_2Lorg_eclipse_swt_internal_win32_SIZE_2_4=
-COM_VtblCall__IIIILorg_eclipse_swt_internal_ole_win32_DVTARGETDEVICE_2Lorg_eclipse_swt_internal_win32_SIZE_2_5=
-
-COM_VtblCall__IIIILorg_eclipse_swt_internal_ole_win32_GUID_2I_3I=
-COM_VtblCall__IIIILorg_eclipse_swt_internal_ole_win32_GUID_2I_3I_0=
-COM_VtblCall__IIIILorg_eclipse_swt_internal_ole_win32_GUID_2I_3I_1=
-COM_VtblCall__IIIILorg_eclipse_swt_internal_ole_win32_GUID_2I_3I_2=
-COM_VtblCall__IIIILorg_eclipse_swt_internal_ole_win32_GUID_2I_3I_3=
-COM_VtblCall__IIIILorg_eclipse_swt_internal_ole_win32_GUID_2I_3I_4=
-COM_VtblCall__IIIILorg_eclipse_swt_internal_ole_win32_GUID_2I_3I_5=
-COM_VtblCall__IIIILorg_eclipse_swt_internal_ole_win32_GUID_2I_3I_6=
-
-COM_VtblCall__IIII_3I=
-COM_VtblCall__IIII_3I_0=
-COM_VtblCall__IIII_3I_1=
-COM_VtblCall__IIII_3I_2=
-COM_VtblCall__IIII_3I_3=
-COM_VtblCall__IIII_3I_4=
-
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_FORMATETC_2_3I=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_FORMATETC_2_3I_0=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_FORMATETC_2_3I_1=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_FORMATETC_2_3I_2=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_FORMATETC_2_3I_3=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_FORMATETC_2_3I_4=
-
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_GUID_2=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_GUID_2_0=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_GUID_2_1=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_GUID_2_2=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_GUID_2_3=
-
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_GUID_2II=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_GUID_2II_0=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_GUID_2II_1=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_GUID_2II_2=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_GUID_2II_3=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_GUID_2II_4=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_GUID_2II_5=
-
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_GUID_2IILorg_eclipse_swt_internal_ole_win32_DISPPARAMS_2ILorg_eclipse_swt_internal_ole_win32_EXCEPINFO_2_3I=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_GUID_2IILorg_eclipse_swt_internal_ole_win32_DISPPARAMS_2ILorg_eclipse_swt_internal_ole_win32_EXCEPINFO_2_3I_0=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_GUID_2IILorg_eclipse_swt_internal_ole_win32_DISPPARAMS_2ILorg_eclipse_swt_internal_ole_win32_EXCEPINFO_2_3I_1=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_GUID_2IILorg_eclipse_swt_internal_ole_win32_DISPPARAMS_2ILorg_eclipse_swt_internal_ole_win32_EXCEPINFO_2_3I_2=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_GUID_2IILorg_eclipse_swt_internal_ole_win32_DISPPARAMS_2ILorg_eclipse_swt_internal_ole_win32_EXCEPINFO_2_3I_3=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_GUID_2IILorg_eclipse_swt_internal_ole_win32_DISPPARAMS_2ILorg_eclipse_swt_internal_ole_win32_EXCEPINFO_2_3I_4=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_GUID_2IILorg_eclipse_swt_internal_ole_win32_DISPPARAMS_2ILorg_eclipse_swt_internal_ole_win32_EXCEPINFO_2_3I_5=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_GUID_2IILorg_eclipse_swt_internal_ole_win32_DISPPARAMS_2ILorg_eclipse_swt_internal_ole_win32_EXCEPINFO_2_3I_6=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_GUID_2IILorg_eclipse_swt_internal_ole_win32_DISPPARAMS_2ILorg_eclipse_swt_internal_ole_win32_EXCEPINFO_2_3I_7=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_GUID_2IILorg_eclipse_swt_internal_ole_win32_DISPPARAMS_2ILorg_eclipse_swt_internal_ole_win32_EXCEPINFO_2_3I_8=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_GUID_2IILorg_eclipse_swt_internal_ole_win32_DISPPARAMS_2ILorg_eclipse_swt_internal_ole_win32_EXCEPINFO_2_3I_9=
-
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_STATSTG_2_3I=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_STATSTG_2_3I_0=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_STATSTG_2_3I_1=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_STATSTG_2_3I_2=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_STATSTG_2_3I_3=
-COM_VtblCall__IIILorg_eclipse_swt_internal_ole_win32_STATSTG_2_3I_4=
-
-COM_VtblCall__IIILorg_eclipse_swt_internal_win32_MSG_2IIILorg_eclipse_swt_internal_win32_RECT_2=
-COM_VtblCall__IIILorg_eclipse_swt_internal_win32_MSG_2IIILorg_eclipse_swt_internal_win32_RECT_2_0=
-COM_VtblCall__IIILorg_eclipse_swt_internal_win32_MSG_2IIILorg_eclipse_swt_internal_win32_RECT_2_1=
-COM_VtblCall__IIILorg_eclipse_swt_internal_win32_MSG_2IIILorg_eclipse_swt_internal_win32_RECT_2_2=
-COM_VtblCall__IIILorg_eclipse_swt_internal_win32_MSG_2IIILorg_eclipse_swt_internal_win32_RECT_2_3=
-COM_VtblCall__IIILorg_eclipse_swt_internal_win32_MSG_2IIILorg_eclipse_swt_internal_win32_RECT_2_4=
-COM_VtblCall__IIILorg_eclipse_swt_internal_win32_MSG_2IIILorg_eclipse_swt_internal_win32_RECT_2_5=
-COM_VtblCall__IIILorg_eclipse_swt_internal_win32_MSG_2IIILorg_eclipse_swt_internal_win32_RECT_2_6=
-COM_VtblCall__IIILorg_eclipse_swt_internal_win32_MSG_2IIILorg_eclipse_swt_internal_win32_RECT_2_7=
-
-COM_VtblCall__IIILorg_eclipse_swt_internal_win32_SIZE_2=
-COM_VtblCall__IIILorg_eclipse_swt_internal_win32_SIZE_2_0=
-COM_VtblCall__IIILorg_eclipse_swt_internal_win32_SIZE_2_1=
-COM_VtblCall__IIILorg_eclipse_swt_internal_win32_SIZE_2_2=
-COM_VtblCall__IIILorg_eclipse_swt_internal_win32_SIZE_2_3=
-
-COM_VtblCall__IIIZ=
-COM_VtblCall__IIIZ_0=
-COM_VtblCall__IIIZ_1=
-COM_VtblCall__IIIZ_2=
-COM_VtblCall__IIIZ_3=
-
-COM_VtblCall__III_3I=
-COM_VtblCall__III_3I_0=
-COM_VtblCall__III_3I_1=
-COM_VtblCall__III_3I_2=
-COM_VtblCall__III_3I_3=
-
-COM_VtblCall__III_3II_3I=
-COM_VtblCall__III_3II_3I_0=
-COM_VtblCall__III_3II_3I_1=
-COM_VtblCall__III_3II_3I_2=
-COM_VtblCall__III_3II_3I_3=
-COM_VtblCall__III_3II_3I_4=
-COM_VtblCall__III_3II_3I_5=
-
-COM_VtblCall__III_3I_3I_3I_3I=
-COM_VtblCall__III_3I_3I_3I_3I_0=
-COM_VtblCall__III_3I_3I_3I_3I_1=
-COM_VtblCall__III_3I_3I_3I_3I_2=
-COM_VtblCall__III_3I_3I_3I_3I_3=
-COM_VtblCall__III_3I_3I_3I_3I_4=
-COM_VtblCall__III_3I_3I_3I_3I_5=
-COM_VtblCall__III_3I_3I_3I_3I_6=
-
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_CAUUID_2=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_CAUUID_2_0=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_CAUUID_2_1=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_CAUUID_2_2=
-
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_CONTROLINFO_2=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_CONTROLINFO_2_0=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_CONTROLINFO_2_1=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_CONTROLINFO_2_2=
-
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_FORMATETC_2=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_FORMATETC_2_0=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_FORMATETC_2_1=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_FORMATETC_2_2=
-
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_FORMATETC_2Lorg_eclipse_swt_internal_ole_win32_STGMEDIUM_2=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_FORMATETC_2Lorg_eclipse_swt_internal_ole_win32_STGMEDIUM_2_0=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_FORMATETC_2Lorg_eclipse_swt_internal_ole_win32_STGMEDIUM_2_1=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_FORMATETC_2Lorg_eclipse_swt_internal_ole_win32_STGMEDIUM_2_2=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_FORMATETC_2Lorg_eclipse_swt_internal_ole_win32_STGMEDIUM_2_3=
-
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_FORMATETC_2Lorg_eclipse_swt_internal_ole_win32_STGMEDIUM_2Z=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_FORMATETC_2Lorg_eclipse_swt_internal_ole_win32_STGMEDIUM_2Z_0=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_FORMATETC_2Lorg_eclipse_swt_internal_ole_win32_STGMEDIUM_2Z_1=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_FORMATETC_2Lorg_eclipse_swt_internal_ole_win32_STGMEDIUM_2Z_2=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_FORMATETC_2Lorg_eclipse_swt_internal_ole_win32_STGMEDIUM_2Z_3=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_FORMATETC_2Lorg_eclipse_swt_internal_ole_win32_STGMEDIUM_2Z_4=
-
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2_0=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2_1=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2_2=
-
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2IIII=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2IIII_0=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2IIII_1=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2IIII_2=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2IIII_3=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2IIII_4=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2IIII_5=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2IIII_6=
-
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2III_3I=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2III_3I_0=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2III_3I_1=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2III_3I_2=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2III_3I_3=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2III_3I_4=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2III_3I_5=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2III_3I_6=
-
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2ILorg_eclipse_swt_internal_ole_win32_OLECMD_2Lorg_eclipse_swt_internal_ole_win32_OLECMDTEXT_2=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2ILorg_eclipse_swt_internal_ole_win32_OLECMD_2Lorg_eclipse_swt_internal_ole_win32_OLECMDTEXT_2_0=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2ILorg_eclipse_swt_internal_ole_win32_OLECMD_2Lorg_eclipse_swt_internal_ole_win32_OLECMDTEXT_2_1=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2ILorg_eclipse_swt_internal_ole_win32_OLECMD_2Lorg_eclipse_swt_internal_ole_win32_OLECMDTEXT_2_2=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2ILorg_eclipse_swt_internal_ole_win32_OLECMD_2Lorg_eclipse_swt_internal_ole_win32_OLECMDTEXT_2_3=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2ILorg_eclipse_swt_internal_ole_win32_OLECMD_2Lorg_eclipse_swt_internal_ole_win32_OLECMDTEXT_2_4=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2ILorg_eclipse_swt_internal_ole_win32_OLECMD_2Lorg_eclipse_swt_internal_ole_win32_OLECMDTEXT_2_5=
-
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2_3I=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2_3I_0=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2_3I_1=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2_3I_2=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_GUID_2_3I_3=
-
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_LICINFO_2=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_LICINFO_2_0=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_LICINFO_2_1=
-COM_VtblCall__IILorg_eclipse_swt_internal_ole_win32_LICINFO_2_2=
-
-COM_VtblCall__IILorg_eclipse_swt_internal_win32_MSG_2=
-COM_VtblCall__IILorg_eclipse_swt_internal_win32_MSG_2_0=
-COM_VtblCall__IILorg_eclipse_swt_internal_win32_MSG_2_1=
-COM_VtblCall__IILorg_eclipse_swt_internal_win32_MSG_2_2=
-
-COM_VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2=
-COM_VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2_0=
-COM_VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2_1=
-COM_VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2_2=
-
-COM_VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2IZ=
-COM_VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2IZ_0=
-COM_VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2IZ_1=
-COM_VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2IZ_2=
-COM_VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2IZ_3=
-COM_VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2IZ_4=
-
-COM_VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2Lorg_eclipse_swt_internal_win32_RECT_2=
-COM_VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2Lorg_eclipse_swt_internal_win32_RECT_2_0=
-COM_VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2Lorg_eclipse_swt_internal_win32_RECT_2_1=
-COM_VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2Lorg_eclipse_swt_internal_win32_RECT_2_2=
-COM_VtblCall__IILorg_eclipse_swt_internal_win32_RECT_2Lorg_eclipse_swt_internal_win32_RECT_2_3=
-
-COM_VtblCall__II_3C=
-COM_VtblCall__II_3C_0=
-COM_VtblCall__II_3C_1=
-COM_VtblCall__II_3C_2=
-
-COM_VtblCall__II_3CI=
-COM_VtblCall__II_3CI_0=
-COM_VtblCall__II_3CI_1=
-COM_VtblCall__II_3CI_2=
-COM_VtblCall__II_3CI_3=
-
-COM_VtblCall__II_3CIIII_3I=
-COM_VtblCall__II_3CIIII_3I_0=
-COM_VtblCall__II_3CIIII_3I_1=
-COM_VtblCall__II_3CIIII_3I_2=
-COM_VtblCall__II_3CIIII_3I_3=
-COM_VtblCall__II_3CIIII_3I_4=
-COM_VtblCall__II_3CIIII_3I_5=
-COM_VtblCall__II_3CIIII_3I_6=
-COM_VtblCall__II_3CIIII_3I_7=
-
-COM_VtblCall__II_3CIII_3I=
-COM_VtblCall__II_3CIII_3I_0=
-COM_VtblCall__II_3CIII_3I_1=
-COM_VtblCall__II_3CIII_3I_2=
-COM_VtblCall__II_3CIII_3I_3=
-COM_VtblCall__II_3CIII_3I_4=
-COM_VtblCall__II_3CIII_3I_5=
-COM_VtblCall__II_3CIII_3I_6=
-
-COM_VtblCall__II_3C_3C=
-COM_VtblCall__II_3C_3C_0=
-COM_VtblCall__II_3C_3C_1=
-COM_VtblCall__II_3C_3C_2=
-COM_VtblCall__II_3C_3C_3=
-
-COM_VtblCall__II_3I=
-COM_VtblCall__II_3I_0=
-COM_VtblCall__II_3I_1=
-COM_VtblCall__II_3I_2=
-
-COM_WriteClassStg=
-COM_WriteClassStg_0=cast=(IStorage *)
-COM_WriteClassStg_1=
-
-
-org_eclipse_swt_internal_ole_win32_COMObject=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_CONTROLINFO=
-CONTROLINFO_cb=
-CONTROLINFO_hAccel=cast=(HACCEL)
-CONTROLINFO_cAccel=
-CONTROLINFO_dwFlags=
-
-org_eclipse_swt_internal_ole_win32_COSERVERINFO=
-COSERVERINFO_dwReserved1=
-COSERVERINFO_pwszName=cast=(LPWSTR)
-COSERVERINFO_pAuthInfo=cast=(COAUTHINFO *)
-COSERVERINFO_dwReserved2=
-
-org_eclipse_swt_internal_ole_win32_DISPPARAMS=
-DISPPARAMS_rgvarg=cast=(VARIANTARG FAR *)
-DISPPARAMS_rgdispidNamedArgs=cast=(DISPID FAR *)
-DISPPARAMS_cArgs=
-DISPPARAMS_cNamedArgs=
-
-org_eclipse_swt_internal_ole_win32_DVTARGETDEVICE=
-DVTARGETDEVICE_tdSize=
-DVTARGETDEVICE_tdDriverNameOffset=
-DVTARGETDEVICE_tdDeviceNameOffset=
-DVTARGETDEVICE_tdPortNameOffset=
-DVTARGETDEVICE_tdExtDevmodeOffset=
-DVTARGETDEVICE_tdData=accessor=tdData[0]
-
-org_eclipse_swt_internal_ole_win32_EXCEPINFO=
-EXCEPINFO_wCode=
-EXCEPINFO_wReserved=
-EXCEPINFO_bstrSource=cast=(BSTR)
-EXCEPINFO_bstrDescription=cast=(BSTR)
-EXCEPINFO_bstrHelpFile=cast=(BSTR)
-EXCEPINFO_dwHelpContext=
-EXCEPINFO_pvReserved=cast=(void FAR *)
-EXCEPINFO_pfnDeferredFillIn=cast=(HRESULT (STDAPICALLTYPE FAR* )(struct tagEXCEPINFO FAR*))
-EXCEPINFO_scode=
-
-org_eclipse_swt_internal_ole_win32_FORMATETC=
-FORMATETC_cfFormat=cast=(CLIPFORMAT)
-FORMATETC_ptd=cast=(DVTARGETDEVICE *)
-FORMATETC_dwAspect=
-FORMATETC_lindex=
-FORMATETC_tymed=
-
-org_eclipse_swt_internal_ole_win32_FUNCDESC=
-FUNCDESC_memid=cast=MEMBERID
-FUNCDESC_lprgscode=cast=SCODE FAR *
-FUNCDESC_lprgelemdescParam=cast=ELEMDESC FAR *
-FUNCDESC_funckind=cast=FUNCKIND
-FUNCDESC_invkind=cast=INVOKEKIND
-FUNCDESC_callconv=cast=CALLCONV
-FUNCDESC_cParams=
-FUNCDESC_cParamsOpt=
-FUNCDESC_oVft=
-FUNCDESC_cScodes=
-FUNCDESC_elemdescFunc_tdesc_union=accessor=elemdescFunc.tdesc.lptdesc,cast=(struct FARSTRUCT tagTYPEDESC FAR* )
-FUNCDESC_elemdescFunc_tdesc_vt=accessor=elemdescFunc.tdesc.vt
-FUNCDESC_elemdescFunc_paramdesc_pparamdescex=accessor=elemdescFunc.paramdesc.pparamdescex,cast=(LPPARAMDESCEX)
-FUNCDESC_elemdescFunc_paramdesc_wParamFlags=accessor=elemdescFunc.paramdesc.wParamFlags
-FUNCDESC_wFuncFlags=
-
-org_eclipse_swt_internal_ole_win32_GUID=
-GUID_Data1=
-GUID_Data2=
-GUID_Data3=
-GUID_Data4=
-
-org_eclipse_swt_internal_ole_win32_IAccessible=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IClassFactory2=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IConnectionPoint=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IConnectionPointContainer=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IDataObject=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IDispatch=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IEnum=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IEnumFORMATETC=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IEnumSTATSTG=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IEnumVARIANT=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IFont=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IMoniker=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IOleCommandTarget=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IOleControl=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IOleDocument=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IOleDocumentView=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IOleInPlaceActiveObject=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IOleInPlaceObject=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IOleLink=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IOleObject=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IOleWindow=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IPersist=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IPersistStorage=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IPersistStreamInit=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IProvideClassInfo=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IProvideClassInfo2=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_ISpecifyPropertyPages=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IStorage=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IStream=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_ITypeInfo=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IUnknown=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_IViewObject2=flags=no_gen
-
-org_eclipse_swt_internal_ole_win32_LICINFO=
-LICINFO_cbLicInfo=
-LICINFO_fRuntimeKeyAvail=
-LICINFO_fLicVerified=
-
-org_eclipse_swt_internal_ole_win32_OLECMD=
-OLECMD_cmdID=
-OLECMD_cmdf=
-
-org_eclipse_swt_internal_ole_win32_OLECMDTEXT=
-OLECMDTEXT_cmdtextf=
-OLECMDTEXT_cwActual=
-OLECMDTEXT_cwBuf=
-OLECMDTEXT_rgwz=accessor=rgwz[0]
-
-org_eclipse_swt_internal_ole_win32_OLEINPLACEFRAMEINFO=
-OLEINPLACEFRAMEINFO_cb=
-OLEINPLACEFRAMEINFO_fMDIApp=
-OLEINPLACEFRAMEINFO_hwndFrame=cast=(HWND)
-OLEINPLACEFRAMEINFO_haccel=cast=(HACCEL)
-OLEINPLACEFRAMEINFO_cAccelEntries=
-
-org_eclipse_swt_internal_ole_win32_STATSTG=
-STATSTG_pwcsName=cast=(LPWSTR)
-STATSTG_type=
-STATSTG_cbSize=accessor=cbSize.QuadPart
-STATSTG_mtime_dwLowDateTime=accessor=mtime.dwLowDateTime
-STATSTG_mtime_dwHighDateTime=accessor=mtime.dwHighDateTime
-STATSTG_ctime_dwLowDateTime=accessor=ctime.dwLowDateTime
-STATSTG_ctime_dwHighDateTime=accessor=ctime.dwHighDateTime
-STATSTG_atime_dwLowDateTime=accessor=atime.dwLowDateTime
-STATSTG_atime_dwHighDateTime=accessor=atime.dwHighDateTime
-STATSTG_grfMode=
-STATSTG_grfLocksSupported=
-STATSTG_clsid_Data1=accessor=clsid.Data1
-STATSTG_clsid_Data2=accessor=clsid.Data2
-STATSTG_clsid_Data3=accessor=clsid.Data3
-STATSTG_clsid_Data4=accessor=clsid.Data4
-STATSTG_grfStateBits=
-STATSTG_reserved=
-
-org_eclipse_swt_internal_ole_win32_STGMEDIUM=
-STGMEDIUM_tymed=
-STGMEDIUM_unionField=accessor=hGlobal,cast=(HGLOBAL)
-STGMEDIUM_pUnkForRelease=cast=(IUnknown *)
-
-org_eclipse_swt_internal_ole_win32_TYPEATTR=
-TYPEATTR_guid_Data1=accessor=guid.Data1
-TYPEATTR_guid_Data2=accessor=guid.Data2
-TYPEATTR_guid_Data3=accessor=guid.Data3
-TYPEATTR_guid_Data4=accessor=guid.Data4
-TYPEATTR_lcid=
-TYPEATTR_dwReserved=
-TYPEATTR_memidConstructor=
-TYPEATTR_memidDestructor=
-TYPEATTR_lpstrSchema=cast=(OLECHAR FAR *)
-TYPEATTR_cbSizeInstance=
-TYPEATTR_typekind=
-TYPEATTR_cFuncs=
-TYPEATTR_cVars=
-TYPEATTR_cImplTypes=
-TYPEATTR_cbSizeVft=
-TYPEATTR_cbAlignment=
-TYPEATTR_wTypeFlags=
-TYPEATTR_wMajorVerNum=
-TYPEATTR_wMinorVerNum=
-TYPEATTR_tdescAlias_unionField=accessor=tdescAlias.lptdesc,cast=(struct FARSTRUCT tagTYPEDESC FAR *)
-TYPEATTR_tdescAlias_vt=accessor=tdescAlias.vt
-TYPEATTR_idldescType_dwReserved=accessor=idldescType.dwReserved
-TYPEATTR_idldescType_wIDLFlags=accessor=idldescType.wIDLFlags
-
-org_eclipse_swt_internal_ole_win32_VARDESC=
-VARDESC_memid=
-VARDESC_lpstrSchema=cast=(OLECHAR FAR *)
-VARDESC_oInst=
-VARDESC_elemdescVar_tdesc_union=accessor=elemdescVar.tdesc.lptdesc,cast=(struct FARSTRUCT tagTYPEDESC FAR *)
-VARDESC_elemdescVar_tdesc_vt=accessor=elemdescVar.tdesc.vt
-VARDESC_elemdescVar_paramdesc_pparamdescex=accessor=elemdescVar.paramdesc.pparamdescex,cast=(LPPARAMDESCEX)
-VARDESC_elemdescVar_paramdesc_wParamFlags=accessor=elemdescVar.paramdesc.wParamFlags
-VARDESC_wVarFlags=
-VARDESC_varkind=
-
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.opengl.glx.GLX.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.opengl.glx.GLX.properties
deleted file mode 100644
index 4c7a2c9..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.opengl.glx.GLX.properties
+++ /dev/null
@@ -1,121 +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
-###############################################################################
-org_eclipse_swt_internal_opengl_glx_GLX=
-GLX_XVisualInfo_sizeof=
-
-GLX_glGetIntegerv=
-GLX_glGetIntegerv_0=cast=(GLenum)
-GLX_glGetIntegerv_1=cast=(GLint *),flags=no_in
-
-GLX_glViewport=
-GLX_glViewport_0=cast=(GLint)
-GLX_glViewport_1=cast=(GLint)
-GLX_glViewport_2=cast=(GLsizei)
-GLX_glViewport_3=cast=(GLsizei)
-
-GLX_glXChooseVisual=
-GLX_glXChooseVisual_0=cast=(Display *)
-GLX_glXChooseVisual_1=
-GLX_glXChooseVisual_2=
-
-GLX_glXCopyContext=
-GLX_glXCopyContext_0=cast=(Display *)
-GLX_glXCopyContext_1=cast=(GLXContext)
-GLX_glXCopyContext_2=cast=(GLXContext)
-GLX_glXCopyContext_3=
-
-GLX_glXCreateContext=
-GLX_glXCreateContext_0=cast=(Display *)
-GLX_glXCreateContext_1=
-GLX_glXCreateContext_2=cast=(GLXContext)
-GLX_glXCreateContext_3=
-
-GLX_glXCreateGLXPixmap=
-GLX_glXCreateGLXPixmap_0=cast=(Display *)
-GLX_glXCreateGLXPixmap_1=
-GLX_glXCreateGLXPixmap_2=cast=(Pixmap)
-
-GLX_glXDestroyContext=
-GLX_glXDestroyContext_0=cast=(Display *)
-GLX_glXDestroyContext_1=cast=(GLXContext)
-
-GLX_glXDestroyGLXPixmap=
-GLX_glXDestroyGLXPixmap_0=cast=(Display *)
-GLX_glXDestroyGLXPixmap_1=cast=(GLXPixmap)
-
-GLX_glXGetClientString=
-GLX_glXGetClientString_0=cast=(Display *)
-GLX_glXGetClientString_1=
-
-GLX_glXGetConfig=
-GLX_glXGetConfig_0=cast=(Display *)
-GLX_glXGetConfig_1=
-GLX_glXGetConfig_2=
-GLX_glXGetConfig_3=
-
-GLX_glXGetCurrentContext=
-
-GLX_glXGetCurrentDrawable=
-
-GLX_glXIsDirect=
-GLX_glXIsDirect_0=cast=(Display *)
-GLX_glXIsDirect_1=cast=(GLXContext)
-
-GLX_glXMakeCurrent=
-GLX_glXMakeCurrent_0=cast=(Display *)
-GLX_glXMakeCurrent_1=cast=(GLXDrawable)
-GLX_glXMakeCurrent_2=cast=(GLXContext)
-
-GLX_glXQueryExtension=
-GLX_glXQueryExtension_0=cast=(Display *)
-GLX_glXQueryExtension_1=
-GLX_glXQueryExtension_2=
-
-GLX_glXQueryExtensionsString=
-GLX_glXQueryExtensionsString_0=cast=(Display *)
-GLX_glXQueryExtensionsString_1=
-
-GLX_glXQueryServerString=
-GLX_glXQueryServerString_0=cast=(Display *)
-GLX_glXQueryServerString_1=
-GLX_glXQueryServerString_2=
-
-GLX_glXQueryVersion=
-GLX_glXQueryVersion_0=cast=(Display *)
-GLX_glXQueryVersion_1=flags=no_in
-GLX_glXQueryVersion_2=flags=no_in
-
-GLX_glXSwapBuffers=
-GLX_glXSwapBuffers_0=cast=(Display *)
-GLX_glXSwapBuffers_1=cast=(GLXDrawable)
-
-GLX_glXWaitGL=
-
-GLX_glXWaitX=
-
-GLX_memmove=
-GLX_memmove_0=
-GLX_memmove_1=cast=(const void *)
-GLX_memmove_2=cast=(size_t)
-
-
-org_eclipse_swt_internal_opengl_glx_XVisualInfo=
-XVisualInfo_visual=cast=(Visual *)
-XVisualInfo_visualid=
-XVisualInfo_screen=
-XVisualInfo_depth=
-XVisualInfo_cclass=accessor=class
-XVisualInfo_red_mask=
-XVisualInfo_green_mask=
-XVisualInfo_blue_mask=
-XVisualInfo_colormap_size=
-XVisualInfo_bits_per_rgb=
-
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.opengl.gtk.GLX.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.opengl.gtk.GLX.properties
deleted file mode 100644
index b49b711..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.opengl.gtk.GLX.properties
+++ /dev/null
@@ -1,115 +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
-###############################################################################
-org_eclipse_swt_internal_opengl_gtk_GLX=
-GLX_glXChooseVisual=
-GLX_glXChooseVisual_0=
-GLX_glXChooseVisual_1=
-GLX_glXChooseVisual_2=
-
-GLX_glXCopyContext=
-GLX_glXCopyContext_0=
-GLX_glXCopyContext_1=
-GLX_glXCopyContext_2=
-GLX_glXCopyContext_3=
-
-GLX_glXCreateContext=
-GLX_glXCreateContext_0=
-GLX_glXCreateContext_1=
-GLX_glXCreateContext_2=
-GLX_glXCreateContext_3=
-
-GLX_glXCreateGLXPixmap=
-GLX_glXCreateGLXPixmap_0=
-GLX_glXCreateGLXPixmap_1=
-GLX_glXCreateGLXPixmap_2=
-
-GLX_glXDestroyContext=
-GLX_glXDestroyContext_0=
-GLX_glXDestroyContext_1=
-
-GLX_glXDestroyGLXPixmap=
-GLX_glXDestroyGLXPixmap_0=
-GLX_glXDestroyGLXPixmap_1=
-
-GLX_glXGetClientString=
-GLX_glXGetClientString_0=
-GLX_glXGetClientString_1=
-
-GLX_glXGetConfig=
-GLX_glXGetConfig_0=
-GLX_glXGetConfig_1=
-GLX_glXGetConfig_2=
-GLX_glXGetConfig_3=
-
-GLX_glXGetCurrentContext=
-
-GLX_glXGetCurrentDrawable=
-
-GLX_glXIsDirect=
-GLX_glXIsDirect_0=
-GLX_glXIsDirect_1=
-
-GLX_glXMakeCurrent=
-GLX_glXMakeCurrent_0=
-GLX_glXMakeCurrent_1=
-GLX_glXMakeCurrent_2=
-
-GLX_glXQueryExtension=
-GLX_glXQueryExtension_0=
-GLX_glXQueryExtension_1=
-GLX_glXQueryExtension_2=
-
-GLX_glXQueryExtensionsString=
-GLX_glXQueryExtensionsString_0=
-GLX_glXQueryExtensionsString_1=
-
-GLX_glXQueryServerString=
-GLX_glXQueryServerString_0=
-GLX_glXQueryServerString_1=
-GLX_glXQueryServerString_2=
-
-GLX_glXQueryVersion=
-GLX_glXQueryVersion_0=
-GLX_glXQueryVersion_1=
-GLX_glXQueryVersion_2=
-
-GLX_glXSwapBuffers=
-GLX_glXSwapBuffers_0=
-GLX_glXSwapBuffers_1=
-
-GLX_glXUseXFont=
-GLX_glXUseXFont_0=
-GLX_glXUseXFont_1=
-GLX_glXUseXFont_2=
-GLX_glXUseXFont_3=
-
-GLX_glXWaitGL=
-
-GLX_glXWaitX=
-
-GLX_memmove=
-GLX_memmove_0=
-GLX_memmove_1=
-GLX_memmove_2=
-
-
-org_eclipse_swt_internal_opengl_gtk_XVisualInfo=
-XVisualInfo_visual=
-XVisualInfo_visualid=
-XVisualInfo_screen=
-XVisualInfo_depth=
-XVisualInfo_cclass=
-XVisualInfo_red_mask=
-XVisualInfo_green_mask=
-XVisualInfo_blue_mask=
-XVisualInfo_colormap_size=
-XVisualInfo_bits_per_rgb=
-
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.opengl.win32.WGL.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.opengl.win32.WGL.properties
deleted file mode 100644
index ee19771..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.opengl.win32.WGL.properties
+++ /dev/null
@@ -1,147 +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
-###############################################################################
-org_eclipse_swt_internal_opengl_win32_LAYERPLANEDESCRIPTOR=
-LAYERPLANEDESCRIPTOR_nSize=
-LAYERPLANEDESCRIPTOR_nVersion=
-LAYERPLANEDESCRIPTOR_dwFlags=
-LAYERPLANEDESCRIPTOR_iPixelType=
-LAYERPLANEDESCRIPTOR_cColorBits=
-LAYERPLANEDESCRIPTOR_cRedBits=
-LAYERPLANEDESCRIPTOR_cRedShift=
-LAYERPLANEDESCRIPTOR_cGreenBits=
-LAYERPLANEDESCRIPTOR_cGreenShift=
-LAYERPLANEDESCRIPTOR_cBlueBits=
-LAYERPLANEDESCRIPTOR_cBlueShift=
-LAYERPLANEDESCRIPTOR_cAlphaBits=
-LAYERPLANEDESCRIPTOR_cAlphaShift=
-LAYERPLANEDESCRIPTOR_cAccumBits=
-LAYERPLANEDESCRIPTOR_cAccumRedBits=
-LAYERPLANEDESCRIPTOR_cAccumGreenBits=
-LAYERPLANEDESCRIPTOR_cAccumBlueBits=
-LAYERPLANEDESCRIPTOR_cAccumAlphaBits=
-LAYERPLANEDESCRIPTOR_cDepthBits=
-LAYERPLANEDESCRIPTOR_cStencilBits=
-LAYERPLANEDESCRIPTOR_cAuxBuffers=
-LAYERPLANEDESCRIPTOR_iLayerPlane=
-LAYERPLANEDESCRIPTOR_bReserved=
-LAYERPLANEDESCRIPTOR_crTransparent=
-
-org_eclipse_swt_internal_opengl_win32_PIXELFORMATDESCRIPTOR=
-PIXELFORMATDESCRIPTOR_nSize=
-PIXELFORMATDESCRIPTOR_nVersion=
-PIXELFORMATDESCRIPTOR_dwFlags=
-PIXELFORMATDESCRIPTOR_iPixelType=
-PIXELFORMATDESCRIPTOR_cColorBits=
-PIXELFORMATDESCRIPTOR_cRedBits=
-PIXELFORMATDESCRIPTOR_cRedShift=
-PIXELFORMATDESCRIPTOR_cGreenBits=
-PIXELFORMATDESCRIPTOR_cGreenShift=
-PIXELFORMATDESCRIPTOR_cBlueBits=
-PIXELFORMATDESCRIPTOR_cBlueShift=
-PIXELFORMATDESCRIPTOR_cAlphaBits=
-PIXELFORMATDESCRIPTOR_cAlphaShift=
-PIXELFORMATDESCRIPTOR_cAccumBits=
-PIXELFORMATDESCRIPTOR_cAccumRedBits=
-PIXELFORMATDESCRIPTOR_cAccumGreenBits=
-PIXELFORMATDESCRIPTOR_cAccumBlueBits=
-PIXELFORMATDESCRIPTOR_cAccumAlphaBits=
-PIXELFORMATDESCRIPTOR_cDepthBits=
-PIXELFORMATDESCRIPTOR_cStencilBits=
-PIXELFORMATDESCRIPTOR_cAuxBuffers=
-PIXELFORMATDESCRIPTOR_iLayerType=
-PIXELFORMATDESCRIPTOR_bReserved=
-PIXELFORMATDESCRIPTOR_dwLayerMask=
-PIXELFORMATDESCRIPTOR_dwVisibleMask=
-PIXELFORMATDESCRIPTOR_dwDamageMask=
-
-org_eclipse_swt_internal_opengl_win32_WGL=
-WGL_ChoosePixelFormat=
-WGL_ChoosePixelFormat_0=cast=(HDC)
-WGL_ChoosePixelFormat_1=
-
-WGL_DescribePixelFormat=
-WGL_DescribePixelFormat_0=cast=(HDC)
-WGL_DescribePixelFormat_1=
-WGL_DescribePixelFormat_2=
-WGL_DescribePixelFormat_3=
-
-WGL_GetPixelFormat=
-WGL_GetPixelFormat_0=cast=(HDC)
-
-WGL_SetPixelFormat=
-WGL_SetPixelFormat_0=cast=(HDC)
-WGL_SetPixelFormat_1=
-WGL_SetPixelFormat_2=
-
-WGL_SwapBuffers=
-WGL_SwapBuffers_0=cast=(HDC)
-
-WGL_wglCopyContext=
-WGL_wglCopyContext_0=cast=(HGLRC)
-WGL_wglCopyContext_1=cast=(HGLRC)
-WGL_wglCopyContext_2=
-
-WGL_wglCreateContext=
-WGL_wglCreateContext_0=cast=(HDC)
-
-WGL_wglCreateLayerContext=
-WGL_wglCreateLayerContext_0=cast=(HDC)
-WGL_wglCreateLayerContext_1=
-
-WGL_wglDeleteContext=
-WGL_wglDeleteContext_0=cast=(HGLRC)
-
-WGL_wglDescribeLayerPlane=
-WGL_wglDescribeLayerPlane_0=cast=(HDC)
-WGL_wglDescribeLayerPlane_1=
-WGL_wglDescribeLayerPlane_2=
-WGL_wglDescribeLayerPlane_3=
-WGL_wglDescribeLayerPlane_4=
-
-WGL_wglGetCurrentContext=
-
-WGL_wglGetCurrentDC=
-
-WGL_wglGetLayerPaletteEntries=
-WGL_wglGetLayerPaletteEntries_0=cast=(HDC)
-WGL_wglGetLayerPaletteEntries_1=
-WGL_wglGetLayerPaletteEntries_2=
-WGL_wglGetLayerPaletteEntries_3=
-WGL_wglGetLayerPaletteEntries_4=
-
-WGL_wglGetProcAddress=
-WGL_wglGetProcAddress_0=
-
-WGL_wglMakeCurrent=
-WGL_wglMakeCurrent_0=cast=(HDC)
-WGL_wglMakeCurrent_1=cast=(HGLRC)
-
-WGL_wglRealizeLayerPalette=
-WGL_wglRealizeLayerPalette_0=cast=(HDC)
-WGL_wglRealizeLayerPalette_1=
-WGL_wglRealizeLayerPalette_2=
-
-WGL_wglSetLayerPaletteEntries=
-WGL_wglSetLayerPaletteEntries_0=cast=(HDC)
-WGL_wglSetLayerPaletteEntries_1=
-WGL_wglSetLayerPaletteEntries_2=
-WGL_wglSetLayerPaletteEntries_3=
-WGL_wglSetLayerPaletteEntries_4=
-
-WGL_wglShareLists=
-WGL_wglShareLists_0=cast=(HGLRC)
-WGL_wglShareLists_1=cast=(HGLRC)
-
-WGL_wglSwapLayerBuffers=
-WGL_wglSwapLayerBuffers_0=cast=(HDC)
-WGL_wglSwapLayerBuffers_1=
-
-
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.photon.OS.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.photon.OS.properties
deleted file mode 100644
index dac02ed..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.photon.OS.properties
+++ /dev/null
@@ -1,1538 +0,0 @@
-###############################################################################
-# Copyright (c) 2004 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
-###############################################################################
-org_eclipse_swt_internal_photon_FontDetails=
-FontDetails_desc=cast=(FontDescription)
-FontDetails_stem=cast=(FontName)
-FontDetails_losize=
-FontDetails_hisize=
-FontDetails_flags=
-
-org_eclipse_swt_internal_photon_FontQueryInfo=
-FontQueryInfo_font=cast=(FontName)
-FontQueryInfo_desc=cast=(FontDescription)
-FontQueryInfo_size=
-FontQueryInfo_style=
-FontQueryInfo_ascender=
-FontQueryInfo_descender=
-FontQueryInfo_width=
-FontQueryInfo_lochar=
-FontQueryInfo_hichar=
-
-org_eclipse_swt_internal_photon_OS=
-OS_PfDecomposeStemToID=
-OS_PfDecomposeStemToID_0=
-
-OS_PfExtentText__Lorg_eclipse_swt_internal_photon_PhRect_1t_2Lorg_eclipse_swt_internal_photon_PhPoint_1t_2III=
-OS_PfExtentText__Lorg_eclipse_swt_internal_photon_PhRect_1t_2Lorg_eclipse_swt_internal_photon_PhPoint_1t_2III_0=
-OS_PfExtentText__Lorg_eclipse_swt_internal_photon_PhRect_1t_2Lorg_eclipse_swt_internal_photon_PhPoint_1t_2III_1=
-OS_PfExtentText__Lorg_eclipse_swt_internal_photon_PhRect_1t_2Lorg_eclipse_swt_internal_photon_PhPoint_1t_2III_2=cast=(const char *)
-OS_PfExtentText__Lorg_eclipse_swt_internal_photon_PhRect_1t_2Lorg_eclipse_swt_internal_photon_PhPoint_1t_2III_3=cast=(const char *)
-OS_PfExtentText__Lorg_eclipse_swt_internal_photon_PhRect_1t_2Lorg_eclipse_swt_internal_photon_PhPoint_1t_2III_4=
-
-OS_PfExtentText__Lorg_eclipse_swt_internal_photon_PhRect_1t_2Lorg_eclipse_swt_internal_photon_PhPoint_1t_2_3B_3BI=
-OS_PfExtentText__Lorg_eclipse_swt_internal_photon_PhRect_1t_2Lorg_eclipse_swt_internal_photon_PhPoint_1t_2_3B_3BI_0=
-OS_PfExtentText__Lorg_eclipse_swt_internal_photon_PhRect_1t_2Lorg_eclipse_swt_internal_photon_PhPoint_1t_2_3B_3BI_1=
-OS_PfExtentText__Lorg_eclipse_swt_internal_photon_PhRect_1t_2Lorg_eclipse_swt_internal_photon_PhPoint_1t_2_3B_3BI_2=cast=(const char *)
-OS_PfExtentText__Lorg_eclipse_swt_internal_photon_PhRect_1t_2Lorg_eclipse_swt_internal_photon_PhPoint_1t_2_3B_3BI_3=cast=(const char *)
-OS_PfExtentText__Lorg_eclipse_swt_internal_photon_PhRect_1t_2Lorg_eclipse_swt_internal_photon_PhPoint_1t_2_3B_3BI_4=
-
-OS_PfExtentWideText=
-OS_PfExtentWideText_0=
-OS_PfExtentWideText_1=
-OS_PfExtentWideText_2=cast=(const char *)
-OS_PfExtentWideText_3=cast=(const uint16_t *)
-OS_PfExtentWideText_4=
-
-OS_PfFontDescription=
-OS_PfFontDescription_0=cast=(FontID *)
-
-OS_PfFontFlags=
-OS_PfFontFlags_0=cast=(FontID *)
-
-OS_PfFontSize=
-OS_PfFontSize_0=cast=(FontID *)
-
-OS_PfFreeFont=
-OS_PfFreeFont_0=cast=(FontID *)
-
-OS_PfGenerateFontName=
-OS_PfGenerateFontName_0=cast=(char const *)
-OS_PfGenerateFontName_1=
-OS_PfGenerateFontName_2=
-OS_PfGenerateFontName_3=cast=(char *)
-
-OS_PfLoadMetrics=
-OS_PfLoadMetrics_0=cast=(const char *)
-
-OS_PfQueryFontInfo=
-OS_PfQueryFontInfo_0=cast=(const char *)
-OS_PfQueryFontInfo_1=cast=(FontQueryInfo *)
-
-OS_PfQueryFonts=
-OS_PfQueryFonts_0=
-OS_PfQueryFonts_1=
-OS_PfQueryFonts_2=cast=(FontDetails *)
-OS_PfQueryFonts_3=
-
-OS_PgAlphaOff=
-
-OS_PgAlphaOn=
-
-OS_PgCreateGC=
-OS_PgCreateGC_0=
-
-OS_PgDestroyGC=
-OS_PgDestroyGC_0=cast=(PhGC_t *)
-
-OS_PgDrawArc=
-OS_PgDrawArc_0=
-OS_PgDrawArc_1=
-OS_PgDrawArc_2=
-OS_PgDrawArc_3=
-OS_PgDrawArc_4=
-
-OS_PgDrawArrow=
-OS_PgDrawArrow_0=
-OS_PgDrawArrow_1=
-OS_PgDrawArrow_2=cast=(PgColor_t)
-OS_PgDrawArrow_3=
-
-OS_PgDrawBitmap=
-OS_PgDrawBitmap_0=cast=(void const *)
-OS_PgDrawBitmap_1=cast=(int)
-OS_PgDrawBitmap_2=cast=(PhPoint_t *)
-OS_PgDrawBitmap_3=cast=(PhPoint_t *)
-OS_PgDrawBitmap_4=cast=(int)
-OS_PgDrawBitmap_5=cast=(long)
-
-OS_PgDrawEllipse=
-OS_PgDrawEllipse_0=
-OS_PgDrawEllipse_1=
-OS_PgDrawEllipse_2=
-
-OS_PgDrawGradient=
-OS_PgDrawGradient_0=
-OS_PgDrawGradient_1=
-OS_PgDrawGradient_2=
-OS_PgDrawGradient_3=
-OS_PgDrawGradient_4=
-OS_PgDrawGradient_5=cast=(PgColor_t)
-OS_PgDrawGradient_6=cast=(PgColor_t)
-OS_PgDrawGradient_7=cast=(PgColor_t)
-OS_PgDrawGradient_8=cast=(PgColor_t)
-OS_PgDrawGradient_9=
-OS_PgDrawGradient_10=cast=(unsigned char *)
-
-OS_PgDrawILine=
-OS_PgDrawILine_0=
-OS_PgDrawILine_1=
-OS_PgDrawILine_2=
-OS_PgDrawILine_3=
-
-OS_PgDrawIPixel=
-OS_PgDrawIPixel_0=
-OS_PgDrawIPixel_1=
-
-OS_PgDrawIRect=
-OS_PgDrawIRect_0=
-OS_PgDrawIRect_1=
-OS_PgDrawIRect_2=
-OS_PgDrawIRect_3=
-OS_PgDrawIRect_4=
-
-OS_PgDrawImage=
-OS_PgDrawImage_0=cast=(void const *)
-OS_PgDrawImage_1=
-OS_PgDrawImage_2=
-OS_PgDrawImage_3=
-OS_PgDrawImage_4=
-OS_PgDrawImage_5=
-
-OS_PgDrawMultiTextArea=
-OS_PgDrawMultiTextArea_0=cast=(char *)
-OS_PgDrawMultiTextArea_1=
-OS_PgDrawMultiTextArea_2=
-OS_PgDrawMultiTextArea_3=
-OS_PgDrawMultiTextArea_4=
-OS_PgDrawMultiTextArea_5=
-
-OS_PgDrawPhImageRectmx=
-OS_PgDrawPhImageRectmx_0=
-OS_PgDrawPhImageRectmx_1=cast=(PhImage_t const *)
-OS_PgDrawPhImageRectmx_2=
-OS_PgDrawPhImageRectmx_3=
-
-OS_PgDrawPolygon=
-OS_PgDrawPolygon_0=cast=(PhPoint_t const *)
-OS_PgDrawPolygon_1=
-OS_PgDrawPolygon_2=cast=(PhPoint_t const *)
-OS_PgDrawPolygon_3=
-
-OS_PgDrawRoundRect=
-OS_PgDrawRoundRect_0=cast=(PhRect_t const *)
-OS_PgDrawRoundRect_1=cast=(PhPoint_t const *)
-OS_PgDrawRoundRect_2=
-
-OS_PgDrawTImage=
-OS_PgDrawTImage_0=cast=(void const *)
-OS_PgDrawTImage_1=
-OS_PgDrawTImage_2=cast=(PhPoint_t const *)
-OS_PgDrawTImage_3=cast=(PhDim_t const *)
-OS_PgDrawTImage_4=
-OS_PgDrawTImage_5=
-OS_PgDrawTImage_6=cast=(void const *)
-OS_PgDrawTImage_7=
-
-OS_PgDrawText=
-OS_PgDrawText_0=cast=(char const *)
-OS_PgDrawText_1=
-OS_PgDrawText_2=cast=(PhPoint_t *)
-OS_PgDrawText_3=
-
-OS_PgExtentMultiText=
-OS_PgExtentMultiText_0=cast=(PhRect_t *)
-OS_PgExtentMultiText_1=cast=(PhPoint_t *)
-OS_PgExtentMultiText_2=cast=(char *)
-OS_PgExtentMultiText_3=cast=(char *)
-OS_PgExtentMultiText_4=
-OS_PgExtentMultiText_5=
-
-OS_PgFlush=
-
-OS_PgGetVideoMode=
-OS_PgGetVideoMode_0=cast=(PgDisplaySettings_t *),flags=init
-
-OS_PgGetVideoModeInfo=
-OS_PgGetVideoModeInfo_0=
-OS_PgGetVideoModeInfo_1=cast=(PgVideoModeInfo_t *)
-
-OS_PgReadScreen=
-OS_PgReadScreen_0=cast=(PhRect_t *)
-OS_PgReadScreen_1=cast=(void *)
-
-OS_PgReadScreenSize=
-OS_PgReadScreenSize_0=cast=(PhRect_t *)
-
-OS_PgSetAlpha=
-OS_PgSetAlpha_0=
-OS_PgSetAlpha_1=cast=(PgMap_t const *)
-OS_PgSetAlpha_2=cast=(PgGradient_t const *)
-OS_PgSetAlpha_3=
-OS_PgSetAlpha_4=
-
-OS_PgSetClipping=
-OS_PgSetClipping_0=
-OS_PgSetClipping_1=cast=(PhRect_t const *)
-
-OS_PgSetDrawBufferSize=
-OS_PgSetDrawBufferSize_0=
-
-OS_PgSetDrawMode=
-OS_PgSetDrawMode_0=
-
-OS_PgSetFillColor=
-OS_PgSetFillColor_0=cast=(PgColor_t)
-
-OS_PgSetFillTransPat=
-OS_PgSetFillTransPat_0=cast=(PgPattern_t)
-
-OS_PgSetFont=
-OS_PgSetFont_0=cast=(char const *)
-
-OS_PgSetGC=
-OS_PgSetGC_0=cast=(PhGC_t *)
-
-OS_PgSetMultiClip=
-OS_PgSetMultiClip_0=
-OS_PgSetMultiClip_1=cast=(PhRect_t const *)
-
-OS_PgSetPalette=
-OS_PgSetPalette_0=cast=(PgColor_t const *)
-OS_PgSetPalette_1=
-OS_PgSetPalette_2=
-OS_PgSetPalette_3=
-OS_PgSetPalette_4=
-OS_PgSetPalette_5=
-
-OS_PgSetRegion=
-OS_PgSetRegion_0=cast=(PhRid_t)
-
-OS_PgSetStrokeCap=
-OS_PgSetStrokeCap_0=
-
-OS_PgSetStrokeColor=
-OS_PgSetStrokeColor_0=cast=(PgColor_t)
-
-OS_PgSetStrokeDash=
-OS_PgSetStrokeDash_0=cast=(unsigned char const *)
-OS_PgSetStrokeDash_1=
-OS_PgSetStrokeDash_2=
-
-OS_PgSetStrokeJoin=
-OS_PgSetStrokeJoin_0=
-
-OS_PgSetStrokeWidth=
-OS_PgSetStrokeWidth_0=
-
-OS_PgSetTextColor=
-OS_PgSetTextColor_0=cast=(PgColor_t)
-
-OS_PgSetTextXORColor=
-OS_PgSetTextXORColor_0=cast=(PgColor_t)
-OS_PgSetTextXORColor_1=cast=(PgColor_t)
-
-OS_PgSetUserClip=
-OS_PgSetUserClip_0=cast=(PhRect_t const *)
-
-OS_PgShmemCreate=
-OS_PgShmemCreate_0=
-OS_PgShmemCreate_1=cast=(char const *)
-
-OS_PgShmemDestroy=
-OS_PgShmemDestroy_0=cast=(void *)
-
-OS_PhAddMergeTiles=
-OS_PhAddMergeTiles_0=cast=(PhTile_t *)
-OS_PhAddMergeTiles_1=cast=(PhTile_t *)
-OS_PhAddMergeTiles_2=cast=(int *)
-
-OS_PhAreaToRect=
-OS_PhAreaToRect_0=cast=(PhArea_t const *)
-OS_PhAreaToRect_1=cast=(PhRect_t *)
-
-OS_PhBlit=
-OS_PhBlit_0=cast=(PhRid_t)
-OS_PhBlit_1=cast=(const PhRect_t *)
-OS_PhBlit_2=cast=(const PhPoint_t *)
-
-OS_PhClipTilings=
-OS_PhClipTilings_0=cast=(PhTile_t *)
-OS_PhClipTilings_1=cast=(PhTile_t *)
-OS_PhClipTilings_2=cast=(PhTile_t **)
-
-OS_PhClipboardCopy=
-OS_PhClipboardCopy_0=
-OS_PhClipboardCopy_1=
-OS_PhClipboardCopy_2=cast=(PhClipHeader const *)
-
-OS_PhClipboardCopyString=
-OS_PhClipboardCopyString_0=
-OS_PhClipboardCopyString_1=cast=(const char *)
-
-OS_PhClipboardPasteFinish=
-OS_PhClipboardPasteFinish_0=cast=(void *)
-
-OS_PhClipboardPasteStart=
-OS_PhClipboardPasteStart_0=
-
-OS_PhClipboardPasteString=
-OS_PhClipboardPasteString_0=
-
-OS_PhClipboardPasteType=
-OS_PhClipboardPasteType_0=cast=(void *)
-OS_PhClipboardPasteType_1=
-
-OS_PhClipboardPasteTypeN=
-OS_PhClipboardPasteTypeN_0=cast=(void *)
-OS_PhClipboardPasteTypeN_1=
-
-OS_PhCoalesceTiles=
-OS_PhCoalesceTiles_0=cast=(PhTile_t *)
-
-OS_PhCopyTiles=
-OS_PhCopyTiles_0=cast=(PhTile_t *)
-
-OS_PhCreateImage=
-OS_PhCreateImage_0=cast=(PhImage_t *)
-OS_PhCreateImage_1=
-OS_PhCreateImage_2=
-OS_PhCreateImage_3=
-OS_PhCreateImage_4=cast=(PgColor_t const *)
-OS_PhCreateImage_5=
-OS_PhCreateImage_6=
-
-OS_PhDCSetCurrent=
-OS_PhDCSetCurrent_0=cast=(void *)
-
-OS_PhDeTranslateTiles=
-OS_PhDeTranslateTiles_0=cast=(PhTile_t *)
-OS_PhDeTranslateTiles_1=cast=(PhPoint_t const *)
-
-OS_PhEventNext=
-OS_PhEventNext_0=cast=(void *)
-OS_PhEventNext_1=
-
-OS_PhEventPeek=
-OS_PhEventPeek_0=cast=(void *)
-OS_PhEventPeek_1=
-
-OS_PhFreeTiles=
-OS_PhFreeTiles_0=cast=(PhTile_t *)
-
-OS_PhGetData=
-OS_PhGetData_0=cast=(PhEvent_t *)
-
-OS_PhGetMsgSize=
-OS_PhGetMsgSize_0=cast=(PhEvent_t const *)
-
-OS_PhGetRects=
-OS_PhGetRects_0=cast=(PhEvent_t *)
-
-OS_PhGetTile=flags=no_gen
-
-OS_PhInitDrag=
-OS_PhInitDrag_0=cast=(PhRid_t)
-OS_PhInitDrag_1=
-OS_PhInitDrag_2=cast=(const PhRect_t *)
-OS_PhInitDrag_3=cast=(const PhRect_t *)
-OS_PhInitDrag_4=
-OS_PhInitDrag_5=cast=(PhDim_t *)
-OS_PhInitDrag_6=cast=(PhDim_t *)
-OS_PhInitDrag_7=cast=(PhDim_t *)
-OS_PhInitDrag_8=cast=(PhPoint_t *)
-OS_PhInitDrag_9=cast=(PhCursorDescription_t *)
-
-OS_PhInputGroup=
-OS_PhInputGroup_0=cast=(PhEvent_t *)
-
-OS_PhIntersectTilings=
-OS_PhIntersectTilings_0=cast=(PhTile_t const *)
-OS_PhIntersectTilings_1=cast=(PhTile_t const *)
-OS_PhIntersectTilings_2=
-
-OS_PhKeyToMb=
-OS_PhKeyToMb_0=cast=char *
-OS_PhKeyToMb_1=
-
-OS_PhMakeGhostBitmap=
-OS_PhMakeGhostBitmap_0=cast=(PhImage_t *)
-
-OS_PhMakeTransBitmap=
-OS_PhMakeTransBitmap_0=cast=(PhImage_t *)
-OS_PhMakeTransBitmap_1=cast=(PgColor_t)
-
-OS_PhMergeTiles=
-OS_PhMergeTiles_0=cast=(PhTile_t *)
-
-OS_PhMoveCursorAbs=
-OS_PhMoveCursorAbs_0=
-OS_PhMoveCursorAbs_1=
-OS_PhMoveCursorAbs_2=
-
-OS_PhQueryCursor=
-OS_PhQueryCursor_0=
-OS_PhQueryCursor_1=cast=(PhCursorInfo_t *)
-
-OS_PhQueryRids=
-OS_PhQueryRids_0=
-OS_PhQueryRids_1=cast=(PhRid_t)
-OS_PhQueryRids_2=
-OS_PhQueryRids_3=
-OS_PhQueryRids_4=
-OS_PhQueryRids_5=cast=(PhRid_t)
-OS_PhQueryRids_6=cast=(const PhRect_t *)
-OS_PhQueryRids_7=cast=(PhRid_t *)
-OS_PhQueryRids_8=
-
-OS_PhRectIntersect=
-OS_PhRectIntersect_0=cast=(PhRect_t *)
-OS_PhRectIntersect_1=cast=(PhRect_t const *)
-
-OS_PhRectUnion__II=
-OS_PhRectUnion__II_0=cast=(PhRect_t *)
-OS_PhRectUnion__II_1=cast=(PhRect_t const *)
-
-OS_PhRectUnion__Lorg_eclipse_swt_internal_photon_PhRect_1t_2Lorg_eclipse_swt_internal_photon_PhRect_1t_2=
-OS_PhRectUnion__Lorg_eclipse_swt_internal_photon_PhRect_1t_2Lorg_eclipse_swt_internal_photon_PhRect_1t_2_0=cast=(PhRect_t *)
-OS_PhRectUnion__Lorg_eclipse_swt_internal_photon_PhRect_1t_2Lorg_eclipse_swt_internal_photon_PhRect_1t_2_1=cast=(PhRect_t const *)
-
-OS_PhRectsToTiles=
-OS_PhRectsToTiles_0=cast=(PhRect_t *)
-OS_PhRectsToTiles_1=
-
-OS_PhRegionQuery=
-OS_PhRegionQuery_0=cast=(PhRid_t)
-OS_PhRegionQuery_1=cast=(PhRegion_t *)
-OS_PhRegionQuery_2=cast=(PhRect_t *)
-OS_PhRegionQuery_3=cast=(void *)
-OS_PhRegionQuery_4=
-
-OS_PhReleaseImage=
-OS_PhReleaseImage_0=cast=(PhImage_t *)
-
-OS_PhSortTiles=
-OS_PhSortTiles_0=cast=(PhTile_t *)
-
-OS_PhTilesToRects=
-OS_PhTilesToRects_0=cast=(PhTile_t *)
-OS_PhTilesToRects_1=cast=(int *)
-
-OS_PhTranslateTiles=
-OS_PhTranslateTiles_0=cast=(PhTile_t *)
-OS_PhTranslateTiles_1=cast=(PhPoint_t const *)
-
-OS_PhWindowQueryVisible=
-OS_PhWindowQueryVisible_0=
-OS_PhWindowQueryVisible_1=cast=(PhRid_t)
-OS_PhWindowQueryVisible_2=
-OS_PhWindowQueryVisible_3=cast=(PhRect_t *)
-
-OS_PiCropImage=
-OS_PiCropImage_0=cast=(PhImage_t *)
-OS_PiCropImage_1=cast=(PhRect_t const *)
-OS_PiCropImage_2=
-
-OS_PiDuplicateImage=
-OS_PiDuplicateImage_0=cast=(PhImage_t *)
-OS_PiDuplicateImage_1=
-
-OS_PmMemCreateMC=
-OS_PmMemCreateMC_0=cast=(PhImage_t *)
-OS_PmMemCreateMC_1=cast=(PhDim_t *)
-OS_PmMemCreateMC_2=cast=(PhPoint_t *)
-
-OS_PmMemFlush=
-OS_PmMemFlush_0=cast=(PmMemoryContext_t *)
-OS_PmMemFlush_1=cast=(PhImage_t *)
-
-OS_PmMemReleaseMC=
-OS_PmMemReleaseMC_0=cast=(PmMemoryContext_t *)
-
-OS_PmMemStart=
-OS_PmMemStart_0=cast=(PmMemoryContext_t *)
-
-OS_PmMemStop=
-OS_PmMemStop_0=cast=(PmMemoryContext_t *)
-
-OS_PtAddCallback=
-OS_PtAddCallback_0=cast=(PtWidget_t *)
-OS_PtAddCallback_1=
-OS_PtAddCallback_2=cast=(PtCallbackF_t *)
-OS_PtAddCallback_3=cast=(void *)
-
-OS_PtAddEventHandler=
-OS_PtAddEventHandler_0=cast=(PtWidget_t *)
-OS_PtAddEventHandler_1=
-OS_PtAddEventHandler_2=cast=(PtCallbackF_t *)
-OS_PtAddEventHandler_3=cast=(void *)
-
-OS_PtAddFilterCallback=
-OS_PtAddFilterCallback_0=cast=(PtWidget_t *)
-OS_PtAddFilterCallback_1=
-OS_PtAddFilterCallback_2=cast=(PtCallbackF_t *)
-OS_PtAddFilterCallback_3=cast=(void *)
-
-OS_PtAddHotkeyHandler=
-OS_PtAddHotkeyHandler_0=cast=(PtWidget_t *)
-OS_PtAddHotkeyHandler_1=
-OS_PtAddHotkeyHandler_2=
-OS_PtAddHotkeyHandler_3=
-OS_PtAddHotkeyHandler_4=cast=(void *)
-OS_PtAddHotkeyHandler_5=cast=(PtCallbackF_t *)
-
-OS_PtAlert=
-OS_PtAlert_0=cast=(PtWidget_t *)
-OS_PtAlert_1=cast=(PhPoint_t const *)
-OS_PtAlert_2=cast=(char const *)
-OS_PtAlert_3=cast=(PhImage_t const *)
-OS_PtAlert_4=cast=(char const *)
-OS_PtAlert_5=cast=(char const *)
-OS_PtAlert_6=
-OS_PtAlert_7=cast=(char const **)
-OS_PtAlert_8=cast=(char const **)
-OS_PtAlert_9=
-OS_PtAlert_10=
-OS_PtAlert_11=
-
-OS_PtAppAddInput=
-OS_PtAppAddInput_0=cast=(PtAppContext_t)
-OS_PtAppAddInput_1=cast=(pid_t)
-OS_PtAppAddInput_2=cast=(PtInputCallbackProc_t)
-OS_PtAppAddInput_3=cast=(void *)
-
-OS_PtAppAddWorkProc=
-OS_PtAppAddWorkProc_0=cast=(PtAppContext_t)
-OS_PtAppAddWorkProc_1=cast=(PtWorkProc_t)
-OS_PtAppAddWorkProc_2=cast=(void *)
-
-OS_PtAppCreatePulse=
-OS_PtAppCreatePulse_0=cast=(PtAppContext_t)
-OS_PtAppCreatePulse_1=
-
-OS_PtAppDeletePulse=
-OS_PtAppDeletePulse_0=cast=(PtAppContext_t)
-OS_PtAppDeletePulse_1=cast=(pid_t)
-
-OS_PtAppProcessEvent=
-OS_PtAppProcessEvent_0=cast=(PtAppContext_t)
-
-OS_PtAppPulseTrigger=
-OS_PtAppPulseTrigger_0=cast=(PtAppContext_t)
-OS_PtAppPulseTrigger_1=cast=(pid_t)
-
-OS_PtAppRemoveInput=
-OS_PtAppRemoveInput_0=cast=(PtAppContext_t)
-OS_PtAppRemoveInput_1=cast=(PtInputId_t *)
-
-OS_PtAppRemoveWorkProc=
-OS_PtAppRemoveWorkProc_0=cast=(PtAppContext_t)
-OS_PtAppRemoveWorkProc_1=cast=(PtWorkProcId_t *)
-
-OS_PtBeep=
-
-OS_PtBlit=
-OS_PtBlit_0=cast=(PtWidget_t const *)
-OS_PtBlit_1=cast=(PhRect_t const *)
-OS_PtBlit_2=cast=(PhPoint_t const *)
-
-OS_PtBlockAllWindows=
-OS_PtBlockAllWindows_0=cast=(PtWidget_t *)
-OS_PtBlockAllWindows_1=
-OS_PtBlockAllWindows_2=cast=(PgColor_t)
-
-OS_PtBlockWindow=
-OS_PtBlockWindow_0=cast=(PtWidget_t *)
-OS_PtBlockWindow_1=
-OS_PtBlockWindow_2=cast=(PgColor_t)
-
-OS_PtButton=flags=const
-
-OS_PtCalcBorder=
-OS_PtCalcBorder_0=cast=(PtWidget_t *)
-OS_PtCalcBorder_1=
-
-OS_PtCalcCanvas=
-OS_PtCalcCanvas_0=cast=(PtWidget_t *)
-OS_PtCalcCanvas_1=cast=(PhRect_t *)
-
-OS_PtClippedBlit=
-OS_PtClippedBlit_0=cast=(PtWidget_t const *)
-OS_PtClippedBlit_1=cast=(PhTile_t const *)
-OS_PtClippedBlit_2=cast=(PhPoint_t const *)
-OS_PtClippedBlit_3=cast=(PhTile_t const *)
-
-OS_PtColorSelect=
-OS_PtColorSelect_0=cast=(PtWidget_t *)
-OS_PtColorSelect_1=cast=(char *)
-OS_PtColorSelect_2=
-
-OS_PtComboBox=flags=const
-
-OS_PtContainer=flags=const
-
-OS_PtContainerFindFocus=
-OS_PtContainerFindFocus_0=cast=(PtWidget_t *)
-
-OS_PtContainerFocusNext=
-OS_PtContainerFocusNext_0=cast=(PtWidget_t *)
-OS_PtContainerFocusNext_1=cast=(PhEvent_t *)
-
-OS_PtContainerFocusPrev=
-OS_PtContainerFocusPrev_0=cast=(PtWidget_t *)
-OS_PtContainerFocusPrev_1=cast=(PhEvent_t *)
-
-OS_PtContainerGiveFocus=
-OS_PtContainerGiveFocus_0=cast=(PtWidget_t *)
-OS_PtContainerGiveFocus_1=cast=(PhEvent_t *)
-
-OS_PtContainerHold=
-OS_PtContainerHold_0=cast=(PtWidget_t *)
-
-OS_PtContainerRelease=
-OS_PtContainerRelease_0=cast=(PtWidget_t *)
-
-OS_PtCreateAppContext=
-
-OS_PtCreateWidget=
-OS_PtCreateWidget_0=cast=(PtWidgetClassRef_t *)
-OS_PtCreateWidget_1=cast=(PtWidget_t *)
-OS_PtCreateWidget_2=
-OS_PtCreateWidget_3=cast=(PtArg_t const *)
-
-OS_PtCreateWidgetClass=
-OS_PtCreateWidgetClass_0=cast=(PtWidgetClassRef_t *)
-OS_PtCreateWidgetClass_1=
-OS_PtCreateWidgetClass_2=
-OS_PtCreateWidgetClass_3=cast=(PtArg_t const *)
-
-OS_PtDamageExtent=
-OS_PtDamageExtent_0=cast=(PtWidget_t *)
-OS_PtDamageExtent_1=cast=(PhRect_t const *)
-
-OS_PtDamageWidget=
-OS_PtDamageWidget_0=cast=(PtWidget_t *)
-
-OS_PtDestroyWidget=
-OS_PtDestroyWidget_0=cast=(PtWidget_t *)
-
-OS_PtDisjoint=flags=const
-
-OS_PtEnter=
-OS_PtEnter_0=
-
-OS_PtEventHandler=
-OS_PtEventHandler_0=cast=(PhEvent_t *)
-
-OS_PtExtentWidget=
-OS_PtExtentWidget_0=cast=(PtWidget_t *)
-
-OS_PtExtentWidgetFamily=
-OS_PtExtentWidgetFamily_0=cast=(PtWidget_t *)
-
-OS_PtFileSelection=
-OS_PtFileSelection_0=cast=(PtWidget_t *)
-OS_PtFileSelection_1=cast=(PhPoint_t const *)
-OS_PtFileSelection_2=cast=(char const *)
-OS_PtFileSelection_3=cast=(char const *)
-OS_PtFileSelection_4=cast=(char const *)
-OS_PtFileSelection_5=cast=(char const *)
-OS_PtFileSelection_6=cast=(char const *)
-OS_PtFileSelection_7=cast=(char const *)
-OS_PtFileSelection_8=cast=(PtFileSelectionInfo_t *),flags=init
-OS_PtFileSelection_9=
-
-OS_PtFindDisjoint=
-OS_PtFindDisjoint_0=cast=(PtWidget_t *)
-
-OS_PtFlush=
-
-OS_PtFontSelection=
-OS_PtFontSelection_0=cast=(PtWidget_t *)
-OS_PtFontSelection_1=cast=(const PhPoint_t *)
-OS_PtFontSelection_2=cast=(const char *)
-OS_PtFontSelection_3=cast=(const char *)
-OS_PtFontSelection_4=
-OS_PtFontSelection_5=
-OS_PtFontSelection_6=cast=(const char *)
-
-OS_PtForwardWindowEvent=
-OS_PtForwardWindowEvent_0=cast=(PhWindowEvent_t const *)
-
-OS_PtFrameSize=
-OS_PtFrameSize_0=
-OS_PtFrameSize_1=
-OS_PtFrameSize_2=
-OS_PtFrameSize_3=
-OS_PtFrameSize_4=
-OS_PtFrameSize_5=
-
-OS_PtGetAbsPosition=
-OS_PtGetAbsPosition_0=cast=(PtWidget_t *)
-OS_PtGetAbsPosition_1=
-OS_PtGetAbsPosition_2=
-
-OS_PtGetResources=
-OS_PtGetResources_0=cast=(PtWidget_t *)
-OS_PtGetResources_1=
-OS_PtGetResources_2=cast=(PtArg_t *)
-
-OS_PtGlobalFocusNext=
-OS_PtGlobalFocusNext_0=cast=(PtWidget_t *)
-OS_PtGlobalFocusNext_1=cast=(PhEvent_t *)
-
-OS_PtGlobalFocusNextContainer=
-OS_PtGlobalFocusNextContainer_0=cast=(PtWidget_t *)
-OS_PtGlobalFocusNextContainer_1=cast=(PhEvent_t *)
-
-OS_PtGlobalFocusPrev=
-OS_PtGlobalFocusPrev_0=cast=(PtWidget_t *)
-OS_PtGlobalFocusPrev_1=cast=(PhEvent_t *)
-
-OS_PtGlobalFocusPrevContainer=
-OS_PtGlobalFocusPrevContainer_0=cast=(PtWidget_t *)
-OS_PtGlobalFocusPrevContainer_1=cast=(PhEvent_t *)
-
-OS_PtGroup=flags=const
-
-OS_PtHit=
-OS_PtHit_0=cast=( PtWidget_t *)
-OS_PtHit_1=
-OS_PtHit_2=cast=(PhRect_t const *)
-
-OS_PtHold=
-
-OS_PtInflateBalloon=
-OS_PtInflateBalloon_0=cast=(PtWidget_t *)
-OS_PtInflateBalloon_1=cast=(PtWidget_t *)
-OS_PtInflateBalloon_2=
-OS_PtInflateBalloon_3=cast=(char const *)
-OS_PtInflateBalloon_4=cast=(char const *)
-OS_PtInflateBalloon_5=cast=(PgColor_t)
-OS_PtInflateBalloon_6=cast=(PgColor_t)
-
-OS_PtInit=
-OS_PtInit_0=cast=(char const *)
-
-OS_PtIsFocused=
-OS_PtIsFocused_0=cast=(PtWidget_t *)
-
-OS_PtLabel=flags=const
-
-OS_PtLeave=
-OS_PtLeave_0=
-
-OS_PtList=flags=const
-
-OS_PtListAddItems=
-OS_PtListAddItems_0=cast=(PtWidget_t *)
-OS_PtListAddItems_1=cast=(const char **)
-OS_PtListAddItems_2=
-OS_PtListAddItems_3=
-
-OS_PtListDeleteAllItems=
-OS_PtListDeleteAllItems_0=cast=(PtWidget_t *)
-
-OS_PtListDeleteItemPos=
-OS_PtListDeleteItemPos_0=cast=(PtWidget_t *)
-OS_PtListDeleteItemPos_1=
-OS_PtListDeleteItemPos_2=
-
-OS_PtListGotoPos=
-OS_PtListGotoPos_0=cast=(PtWidget_t *)
-OS_PtListGotoPos_1=
-
-OS_PtListItemPos=
-OS_PtListItemPos_0=cast=(PtWidget_t *)
-OS_PtListItemPos_1=cast=(const char *)
-
-OS_PtListReplaceItemPos=
-OS_PtListReplaceItemPos_0=cast=(PtWidget_t *)
-OS_PtListReplaceItemPos_1=cast=(const char **)
-OS_PtListReplaceItemPos_2=
-OS_PtListReplaceItemPos_3=
-
-OS_PtListSelectPos=
-OS_PtListSelectPos_0=cast=(PtWidget_t *)
-OS_PtListSelectPos_1=
-
-OS_PtListUnselectPos=
-OS_PtListUnselectPos_0=cast=(PtWidget_t *)
-OS_PtListUnselectPos_1=
-
-OS_PtMainLoop=
-
-OS_PtMenu=flags=const
-
-OS_PtMenuBar=flags=const
-
-OS_PtMenuButton=flags=const
-
-OS_PtMultiText=flags=const
-
-OS_PtNextTopLevelWidget=
-OS_PtNextTopLevelWidget_0=cast=(PtWidget_t *)
-
-OS_PtNumericInteger=flags=const
-
-OS_PtPane=flags=const
-
-OS_PtPanelGroup=flags=const
-
-OS_PtPositionMenu=
-OS_PtPositionMenu_0=cast=(PtWidget_t *)
-OS_PtPositionMenu_1=cast=(PhEvent_t *)
-
-OS_PtProgress=flags=const
-
-OS_PtReParentWidget=
-OS_PtReParentWidget_0=cast=(PtWidget_t *)
-OS_PtReParentWidget_1=cast=(PtWidget_t *)
-
-OS_PtRealizeWidget=
-OS_PtRealizeWidget_0=cast=(PtWidget_t *)
-
-OS_PtRegion=flags=const
-
-OS_PtRelease=
-
-OS_PtRemoveCallback=
-OS_PtRemoveCallback_0=cast=(PtWidget_t *)
-OS_PtRemoveCallback_1=
-OS_PtRemoveCallback_2=cast=(PtCallbackF_t *)
-OS_PtRemoveCallback_3=cast=(void *)
-
-OS_PtRemoveHotkeyHandler=
-OS_PtRemoveHotkeyHandler_0=cast=(PtWidget_t *)
-OS_PtRemoveHotkeyHandler_1=
-OS_PtRemoveHotkeyHandler_2=
-OS_PtRemoveHotkeyHandler_3=
-OS_PtRemoveHotkeyHandler_4=cast=(void *)
-OS_PtRemoveHotkeyHandler_5=cast=(PtCallbackF_t *)
-
-OS_PtScrollArea=flags=const
-
-OS_PtScrollContainer=flags=const
-
-OS_PtScrollbar=flags=const
-
-OS_PtSendEventToWidget=
-OS_PtSendEventToWidget_0=cast=(PtWidget_t *)
-OS_PtSendEventToWidget_1=cast=(PhEvent_t *)
-
-OS_PtSeparator=flags=const
-
-OS_PtSetAreaFromWidgetCanvas=
-OS_PtSetAreaFromWidgetCanvas_0=cast=(PtWidget_t *)
-OS_PtSetAreaFromWidgetCanvas_1=
-OS_PtSetAreaFromWidgetCanvas_2=
-
-OS_PtSetParentWidget=
-OS_PtSetParentWidget_0=cast=(PtWidget_t *)
-
-OS_PtSetResource=
-OS_PtSetResource_0=cast=(PtWidget_t *)
-OS_PtSetResource_1=
-OS_PtSetResource_2=
-OS_PtSetResource_3=
-
-OS_PtSetResources=
-OS_PtSetResources_0=cast=(PtWidget_t *)
-OS_PtSetResources_1=
-OS_PtSetResources_2=cast=(PtArg_t *)
-
-OS_PtSlider=flags=const
-
-OS_PtSuperClassDraw=
-OS_PtSuperClassDraw_0=cast=(PtWidgetClassRef_t *)
-OS_PtSuperClassDraw_1=cast=(PtWidget_t *)
-OS_PtSuperClassDraw_2=cast=(PhTile_t const *)
-
-OS_PtSyncWidget=
-OS_PtSyncWidget_0=cast=(PtWidget_t *)
-
-OS_PtText=flags=const
-
-OS_PtTextGetSelection=
-OS_PtTextGetSelection_0=cast=(PtWidget_t *)
-OS_PtTextGetSelection_1=
-OS_PtTextGetSelection_2=
-
-OS_PtTextModifyText__IIIIII=
-OS_PtTextModifyText__IIIIII_0=cast=(PtWidget_t *)
-OS_PtTextModifyText__IIIIII_1=
-OS_PtTextModifyText__IIIIII_2=
-OS_PtTextModifyText__IIIIII_3=
-OS_PtTextModifyText__IIIIII_4=cast=(char const *)
-OS_PtTextModifyText__IIIIII_5=
-
-OS_PtTextModifyText__IIII_3BI=
-OS_PtTextModifyText__IIII_3BI_0=cast=(PtWidget_t *)
-OS_PtTextModifyText__IIII_3BI_1=
-OS_PtTextModifyText__IIII_3BI_2=
-OS_PtTextModifyText__IIII_3BI_3=
-OS_PtTextModifyText__IIII_3BI_4=cast=(char const *)
-OS_PtTextModifyText__IIII_3BI_5=
-
-OS_PtTextSetSelection=
-OS_PtTextSetSelection_0=cast=(PtWidget_t *)
-OS_PtTextSetSelection_1=
-OS_PtTextSetSelection_2=
-
-OS_PtTimer=flags=const
-
-OS_PtToggleButton=flags=const
-
-OS_PtToolbar=flags=const
-
-OS_PtUnblockWindows=
-OS_PtUnblockWindows_0=cast=(PtBlockedList_t *)
-
-OS_PtUnrealizeWidget=
-OS_PtUnrealizeWidget_0=cast=(PtWidget_t *)
-
-OS_PtValidParent=
-OS_PtValidParent_0=cast=(PtWidget_t *)
-OS_PtValidParent_1=cast=(PtWidgetClassRef_t *)
-
-OS_PtWebClient=flags=const
-
-OS_PtWidgetArea=
-OS_PtWidgetArea_0=cast=(PtWidget_t *)
-OS_PtWidgetArea_1=cast=(PhArea_t *)
-
-OS_PtWidgetBrotherBehind=
-OS_PtWidgetBrotherBehind_0=cast=(PtWidget_t *)
-
-OS_PtWidgetBrotherInFront=
-OS_PtWidgetBrotherInFront_0=cast=(PtWidget_t *)
-
-OS_PtWidgetCanvas__II=
-OS_PtWidgetCanvas__II_0=cast=(PtWidget_t *)
-OS_PtWidgetCanvas__II_1=cast=(PhRect_t *)
-
-OS_PtWidgetCanvas__ILorg_eclipse_swt_internal_photon_PhRect_1t_2=
-OS_PtWidgetCanvas__ILorg_eclipse_swt_internal_photon_PhRect_1t_2_0=cast=(PtWidget_t *)
-OS_PtWidgetCanvas__ILorg_eclipse_swt_internal_photon_PhRect_1t_2_1=
-
-OS_PtWidgetChildBack=
-OS_PtWidgetChildBack_0=cast=(PtWidget_t *)
-
-OS_PtWidgetChildFront=
-OS_PtWidgetChildFront_0=cast=(PtWidget_t *)
-
-OS_PtWidgetClass=
-OS_PtWidgetClass_0=cast=(PtWidget_t *)
-
-OS_PtWidgetExtent__II=
-OS_PtWidgetExtent__II_0=cast=(PtWidget_t *)
-OS_PtWidgetExtent__II_1=
-
-OS_PtWidgetExtent__ILorg_eclipse_swt_internal_photon_PhRect_1t_2=
-OS_PtWidgetExtent__ILorg_eclipse_swt_internal_photon_PhRect_1t_2_0=cast=(PtWidget_t *)
-OS_PtWidgetExtent__ILorg_eclipse_swt_internal_photon_PhRect_1t_2_1=
-
-OS_PtWidgetFlags=
-OS_PtWidgetFlags_0=cast=(PtWidget_t *)
-
-OS_PtWidgetInsert=
-OS_PtWidgetInsert_0=cast=(PtWidget_t *)
-OS_PtWidgetInsert_1=cast=(PtWidget_t *)
-OS_PtWidgetInsert_2=
-
-OS_PtWidgetIsClassMember=
-OS_PtWidgetIsClassMember_0=cast=(PtWidget_t *)
-OS_PtWidgetIsClassMember_1=cast=(PtWidgetClassRef_t *)
-
-OS_PtWidgetIsRealized=
-OS_PtWidgetIsRealized_0=cast=(PtWidget_t *)
-
-OS_PtWidgetOffset=
-OS_PtWidgetOffset_0=cast=(PtWidget_t *)
-OS_PtWidgetOffset_1=cast=(PhPoint_t *)
-
-OS_PtWidgetParent=
-OS_PtWidgetParent_0=cast=(PtWidget_t *)
-
-OS_PtWidgetPreferredSize=
-OS_PtWidgetPreferredSize_0=cast=(PtWidget_t *)
-OS_PtWidgetPreferredSize_1=cast=(PhDim_t *)
-
-OS_PtWidgetRid=
-OS_PtWidgetRid_0=cast=(PtWidget_t *)
-
-OS_PtWidgetToBack=
-OS_PtWidgetToBack_0=cast=(PtWidget_t *)
-
-OS_PtWidgetToFront=
-OS_PtWidgetToFront_0=cast=(PtWidget_t *)
-
-OS_PtWindow=flags=const
-
-OS_PtWindowFocus=
-OS_PtWindowFocus_0=cast=(PtWidget_t *)
-
-OS_PtWindowGetState=
-OS_PtWindowGetState_0=cast=(PtWidget_t *)
-
-OS_PtWindowToBack=
-OS_PtWindowToBack_0=cast=(PtWidget_t *)
-
-OS_PtWindowToFront=
-OS_PtWindowToFront_0=cast=(PtWidget_t *)
-
-OS_free=
-OS_free_0=cast=(void *)
-
-OS_getenv=
-OS_getenv_0=cast=(const char *)
-
-OS_malloc=
-OS_malloc_0=cast=(size_t)
-
-OS_memmove__III=
-OS_memmove__III_0=cast=(void *)
-OS_memmove__III_1=cast=(const void *)
-OS_memmove__III_2=
-
-OS_memmove__ILorg_eclipse_swt_internal_photon_PgAlpha_1t_2I=
-OS_memmove__ILorg_eclipse_swt_internal_photon_PgAlpha_1t_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_photon_PgAlpha_1t_2I_1=cast=(const void *),flags=no_out init
-OS_memmove__ILorg_eclipse_swt_internal_photon_PgAlpha_1t_2I_2=
-
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhArea_1t_2I=
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhArea_1t_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhArea_1t_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhArea_1t_2I_2=
-
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhCursorDef_1t_2I=
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhCursorDef_1t_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhCursorDef_1t_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhCursorDef_1t_2I_2=
-
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhEvent_1t_2I=
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhEvent_1t_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhEvent_1t_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhEvent_1t_2I_2=
-
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhImage_1t_2I=
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhImage_1t_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhImage_1t_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhImage_1t_2I_2=
-
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhPoint_1t_2I=
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhPoint_1t_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhPoint_1t_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhPoint_1t_2I_2=
-
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhPointerEvent_1t_2I=
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhPointerEvent_1t_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhPointerEvent_1t_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhPointerEvent_1t_2I_2=
-
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhRect_1t_2I=
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhRect_1t_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhRect_1t_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhRect_1t_2I_2=
-
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhTile_1t_2I=
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhTile_1t_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhTile_1t_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_photon_PhTile_1t_2I_2=
-
-OS_memmove__ILorg_eclipse_swt_internal_photon_PtTextCallback_1t_2I=
-OS_memmove__ILorg_eclipse_swt_internal_photon_PtTextCallback_1t_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_photon_PtTextCallback_1t_2I_1=cast=(const void *),flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_photon_PtTextCallback_1t_2I_2=
-
-OS_memmove__ILorg_eclipse_swt_internal_photon_PtWebClientData_1t_2I=
-OS_memmove__ILorg_eclipse_swt_internal_photon_PtWebClientData_1t_2I_0=cast=(void *)
-OS_memmove__ILorg_eclipse_swt_internal_photon_PtWebClientData_1t_2I_1=cast=const void *,flags=no_out
-OS_memmove__ILorg_eclipse_swt_internal_photon_PtWebClientData_1t_2I_2=cast=size_t
-
-OS_memmove__I_3BI=
-OS_memmove__I_3BI_0=cast=(void *)
-OS_memmove__I_3BI_1=cast=(const void *),flags=no_out
-OS_memmove__I_3BI_2=
-
-OS_memmove__I_3II=
-OS_memmove__I_3II_0=cast=(void *)
-OS_memmove__I_3II_1=cast=(const void *),flags=no_out
-OS_memmove__I_3II_2=
-
-OS_memmove__Lorg_eclipse_swt_internal_photon_FontDetails_2II=
-OS_memmove__Lorg_eclipse_swt_internal_photon_FontDetails_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_photon_FontDetails_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_photon_FontDetails_2II_2=
-
-OS_memmove__Lorg_eclipse_swt_internal_photon_PgAlpha_1t_2II=
-OS_memmove__Lorg_eclipse_swt_internal_photon_PgAlpha_1t_2II_0=cast=(void *),flags=no_in init
-OS_memmove__Lorg_eclipse_swt_internal_photon_PgAlpha_1t_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_photon_PgAlpha_1t_2II_2=
-
-OS_memmove__Lorg_eclipse_swt_internal_photon_PgMap_1t_2II=
-OS_memmove__Lorg_eclipse_swt_internal_photon_PgMap_1t_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_photon_PgMap_1t_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_photon_PgMap_1t_2II_2=
-
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhClipHeader_2II=
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhClipHeader_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhClipHeader_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhClipHeader_2II_2=
-
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhEvent_1t_2II=
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhEvent_1t_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhEvent_1t_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhEvent_1t_2II_2=
-
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhImage_1t_2II=
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhImage_1t_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhImage_1t_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhImage_1t_2II_2=
-
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhKeyEvent_1t_2II=
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhKeyEvent_1t_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhKeyEvent_1t_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhKeyEvent_1t_2II_2=
-
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhPointerEvent_1t_2II=
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhPointerEvent_1t_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhPointerEvent_1t_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhPointerEvent_1t_2II_2=
-
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhRect_1t_2II=
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhRect_1t_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhRect_1t_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhRect_1t_2II_2=
-
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhTile_1t_2II=
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhTile_1t_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhTile_1t_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhTile_1t_2II_2=
-
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhWindowEvent_1t_2II=
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhWindowEvent_1t_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhWindowEvent_1t_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_photon_PhWindowEvent_1t_2II_2=
-
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtCallbackInfo_1t_2II=
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtCallbackInfo_1t_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtCallbackInfo_1t_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtCallbackInfo_1t_2II_2=
-
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtScrollbarCallback_1t_2II=
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtScrollbarCallback_1t_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtScrollbarCallback_1t_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtScrollbarCallback_1t_2II_2=
-
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtTextCallback_1t_2II=
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtTextCallback_1t_2II_0=cast=(void *),flags=no_in
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtTextCallback_1t_2II_1=cast=(const void *)
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtTextCallback_1t_2II_2=
-
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtWebDataReqCallback_1t_2II=
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtWebDataReqCallback_1t_2II_0=cast=void *
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtWebDataReqCallback_1t_2II_1=cast=const void *
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtWebDataReqCallback_1t_2II_2=
-
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtWebMetaDataCallback_1t_2II=
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtWebMetaDataCallback_1t_2II_0=cast=void *
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtWebMetaDataCallback_1t_2II_1=cast=const void *
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtWebMetaDataCallback_1t_2II_2=
-
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtWebStatusCallback_1t_2II=
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtWebStatusCallback_1t_2II_0=cast=void *
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtWebStatusCallback_1t_2II_1=cast=const void *
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtWebStatusCallback_1t_2II_2=
-
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtWebWindowCallback_1t_2II=
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtWebWindowCallback_1t_2II_0=cast=void *
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtWebWindowCallback_1t_2II_1=cast=const void *
-OS_memmove__Lorg_eclipse_swt_internal_photon_PtWebWindowCallback_1t_2II_2=
-
-OS_memmove___3BII=
-OS_memmove___3BII_0=cast=(void *),flags=no_in
-OS_memmove___3BII_1=cast=(const void *)
-OS_memmove___3BII_2=cast=(size_t)
-
-OS_memmove___3BLorg_eclipse_swt_internal_photon_PhClipHeader_2I=
-OS_memmove___3BLorg_eclipse_swt_internal_photon_PhClipHeader_2I_0=cast=(void *),flags=no_in
-OS_memmove___3BLorg_eclipse_swt_internal_photon_PhClipHeader_2I_1=cast=(const void *)
-OS_memmove___3BLorg_eclipse_swt_internal_photon_PhClipHeader_2I_2=
-
-OS_memmove___3III=
-OS_memmove___3III_0=cast=(void *),flags=no_in
-OS_memmove___3III_1=cast=(const void *)
-OS_memmove___3III_2=
-
-OS_memmove___3SII=
-OS_memmove___3SII_0=cast=(void *),flags=no_in
-OS_memmove___3SII_1=cast=(const void *)
-OS_memmove___3SII_2=cast=(size_t)
-
-OS_memset=
-OS_memset_0=cast=void *
-OS_memset_1=
-OS_memset_2=cast=size_t
-
-OS_strdup=
-OS_strdup_0=cast=(const char *)
-
-OS_strlen=
-OS_strlen_0=cast=(const char*)
-
-OS_uname=
-OS_uname_0=cast=(utsname *)
-
-
-org_eclipse_swt_internal_photon_PgAlpha_1t=
-PgAlpha_t_alpha_op=
-PgAlpha_t_src_alpha_map_dim_w=accessor=src_alpha_map.dim.w
-PgAlpha_t_src_alpha_map_dim_h=accessor=src_alpha_map.dim.h
-PgAlpha_t_src_alpha_map_bpl=accessor=src_alpha_map.bpl
-PgAlpha_t_src_alpha_map_bpp=accessor=src_alpha_map.bpp
-PgAlpha_t_src_alpha_map_map=accessor=src_alpha_map.map,cast=(char *)
-PgAlpha_t_src_global_alpha=
-PgAlpha_t_dest_global_alpha=
-
-org_eclipse_swt_internal_photon_PgDisplaySettings_1t=
-PgDisplaySettings_t_mode=
-PgDisplaySettings_t_xres=
-PgDisplaySettings_t_yres=
-PgDisplaySettings_t_refresh=
-PgDisplaySettings_t_flags=
-PgDisplaySettings_t_reserved=cast=(long *)
-
-org_eclipse_swt_internal_photon_PgMap_1t=
-PgMap_t_dim_w=accessor=dim.w
-PgMap_t_dim_h=accessor=dim.h
-PgMap_t_bpl=
-PgMap_t_bpp=
-PgMap_t_map=cast=(char *)
-
-org_eclipse_swt_internal_photon_PgVideoModeInfo_1t=
-PgVideoModeInfo_t_width=
-PgVideoModeInfo_t_height=
-PgVideoModeInfo_t_bits_per_pixel=
-PgVideoModeInfo_t_bytes_per_scanline=
-PgVideoModeInfo_t_type=
-PgVideoModeInfo_t_mode_capabilities1=
-PgVideoModeInfo_t_mode_capabilities2=
-PgVideoModeInfo_t_mode_capabilities3=
-PgVideoModeInfo_t_mode_capabilities4=
-PgVideoModeInfo_t_mode_capabilities5=
-PgVideoModeInfo_t_mode_capabilities6=
-PgVideoModeInfo_t_refresh_rates=cast=(char *)
-
-org_eclipse_swt_internal_photon_PhArea_1t=
-PhArea_t_pos_x=accessor=pos.x
-PhArea_t_pos_y=accessor=pos.y
-PhArea_t_size_w=accessor=size.w
-PhArea_t_size_h=accessor=size.h
-
-org_eclipse_swt_internal_photon_PhClipHeader=
-PhClipHeader_type=cast=(PhClipHeader)
-PhClipHeader_length=
-PhClipHeader_zero=
-PhClipHeader_data=cast=(void *)
-
-org_eclipse_swt_internal_photon_PhCursorDef_1t=
-PhCursorDef_t_hdr_len=accessor=hdr.len
-PhCursorDef_t_hdr_type=accessor=hdr.type
-PhCursorDef_t_size1_x=accessor=size1.x
-PhCursorDef_t_size1_y=accessor=size1.y
-PhCursorDef_t_offset1_x=accessor=offset1.x
-PhCursorDef_t_offset1_y=accessor=offset1.y
-PhCursorDef_t_color1=
-PhCursorDef_t_bytesperline1=
-PhCursorDef_t_size2_x=accessor=size2.x
-PhCursorDef_t_size2_y=accessor=size2.y
-PhCursorDef_t_offset2_x=accessor=offset2.x
-PhCursorDef_t_offset2_y=accessor=offset2.y
-PhCursorDef_t_color2=
-PhCursorDef_t_bytesperline2=
-
-org_eclipse_swt_internal_photon_PhCursorInfo_1t=
-PhCursorInfo_t_pos_x=accessor=pos.x
-PhCursorInfo_t_pos_y=accessor=pos.y
-PhCursorInfo_t_region=
-PhCursorInfo_t_ig_region=
-PhCursorInfo_t_color=
-PhCursorInfo_t_last_press_x=accessor=last_press.x
-PhCursorInfo_t_last_press_y=accessor=last_press.y
-PhCursorInfo_t_msec=
-PhCursorInfo_t_steady_x=accessor=steady.x
-PhCursorInfo_t_steady_y=accessor=steady.y
-PhCursorInfo_t_dragger=
-PhCursorInfo_t_drag_boundary_ul_x=accessor=drag_boundary.ul.x
-PhCursorInfo_t_drag_boundary_ul_y=accessor=drag_boundary.ul.y
-PhCursorInfo_t_drag_boundary_lr_x=accessor=drag_boundary.lr.x
-PhCursorInfo_t_drag_boundary_lr_y=accessor=drag_boundary.lr.y
-PhCursorInfo_t_phantom_rid=
-PhCursorInfo_t_type=
-PhCursorInfo_t_ig=
-PhCursorInfo_t_button_state=
-PhCursorInfo_t_click_count=
-PhCursorInfo_t_zero1=
-PhCursorInfo_t_key_mods=
-PhCursorInfo_t_zero2=
-
-org_eclipse_swt_internal_photon_PhDim_1t=
-PhDim_t_w=
-PhDim_t_h=
-
-org_eclipse_swt_internal_photon_PhEvent_1t=
-PhEvent_t_type=
-PhEvent_t_subtype=
-PhEvent_t_processing_flags=
-PhEvent_t_emitter_rid=accessor=emitter.rid
-PhEvent_t_emitter_handle=accessor=emitter.handle
-PhEvent_t_collector_rid=accessor=collector.rid
-PhEvent_t_collector_handle=accessor=collector.handle
-PhEvent_t_input_group=
-PhEvent_t_flags=
-PhEvent_t_timestamp=
-PhEvent_t_translation_x=accessor=translation.x
-PhEvent_t_translation_y=accessor=translation.y
-PhEvent_t_num_rects=
-PhEvent_t_data_len=
-
-org_eclipse_swt_internal_photon_PhImage_1t=
-PhImage_t_type=
-PhImage_t_image_tag=
-PhImage_t_bpl=
-PhImage_t_size_w=accessor=size.w
-PhImage_t_size_h=accessor=size.h
-PhImage_t_palette_tag=
-PhImage_t_colors=
-PhImage_t_alpha=cast=(PgAlpha_t *)
-PhImage_t_transparent=
-PhImage_t_format=
-PhImage_t_flags=
-PhImage_t_ghost_bpl=
-PhImage_t_spare1=
-PhImage_t_ghost_bitmap=cast=(char *)
-PhImage_t_mask_bpl=
-PhImage_t_mask_bm=cast=(char *)
-PhImage_t_palette=cast=(PgColor_t *)
-PhImage_t_image=cast=(char *)
-
-org_eclipse_swt_internal_photon_PhKeyEvent_1t=
-PhKeyEvent_t_key_mods=
-PhKeyEvent_t_key_flags=
-PhKeyEvent_t_key_cap=
-PhKeyEvent_t_key_sym=
-PhKeyEvent_t_key_scan=
-PhKeyEvent_t_key_zero=
-PhKeyEvent_t_pos_x=accessor=pos.x
-PhKeyEvent_t_pos_y=accessor=pos.y
-PhKeyEvent_t_button_state=
-
-org_eclipse_swt_internal_photon_PhPoint_1t=
-PhPoint_t_x=
-PhPoint_t_y=
-
-org_eclipse_swt_internal_photon_PhPointerEvent_1t=
-PhPointerEvent_t_pos_x=accessor=pos.x
-PhPointerEvent_t_pos_y=accessor=pos.y
-PhPointerEvent_t_buttons=
-PhPointerEvent_t_button_state=
-PhPointerEvent_t_click_count=
-PhPointerEvent_t_flags=
-PhPointerEvent_t_z=
-PhPointerEvent_t_key_mods=
-PhPointerEvent_t_zero=
-
-org_eclipse_swt_internal_photon_PhRect_1t=
-PhRect_t_ul_x=accessor=ul.x
-PhRect_t_ul_y=accessor=ul.y
-PhRect_t_lr_x=accessor=lr.x
-PhRect_t_lr_y=accessor=lr.y
-
-org_eclipse_swt_internal_photon_PhRegion_1t=
-PhRegion_t_rid=
-PhRegion_t_handle=
-PhRegion_t_owner=
-PhRegion_t_flags=
-PhRegion_t_state=
-PhRegion_t_events_sense=
-PhRegion_t_events_opaque=
-PhRegion_t_origin_x=accessor=origin.x
-PhRegion_t_origin_y=accessor=origin.y
-PhRegion_t_parent=
-PhRegion_t_child=
-PhRegion_t_bro_in_front=
-PhRegion_t_bro_behind=
-PhRegion_t_cursor_color=
-PhRegion_t_input_group=
-PhRegion_t_data_len=
-PhRegion_t_cursor_type=
-
-org_eclipse_swt_internal_photon_PhTile_1t=
-PhTile_t_rect_ul_x=accessor=rect.ul.x
-PhTile_t_rect_ul_y=accessor=rect.ul.y
-PhTile_t_rect_lr_x=accessor=rect.lr.x
-PhTile_t_rect_lr_y=accessor=rect.lr.y
-PhTile_t_next=cast=(PhTile_t *)
-
-org_eclipse_swt_internal_photon_PhWindowEvent_1t=
-PhWindowEvent_t_event_f=
-PhWindowEvent_t_state_f=
-PhWindowEvent_t_rid=
-PhWindowEvent_t_pos_x=accessor=pos.x
-PhWindowEvent_t_pos_y=accessor=pos.y
-PhWindowEvent_t_size_w=accessor=size.w
-PhWindowEvent_t_size_h=accessor=size.h
-PhWindowEvent_t_event_state=
-PhWindowEvent_t_input_group=
-PhWindowEvent_t_rsvd0=accessor=rsvd[0]
-PhWindowEvent_t_rsvd1=accessor=rsvd[1]
-PhWindowEvent_t_rsvd2=accessor=rsvd[2]
-PhWindowEvent_t_rsvd3=accessor=rsvd[3]
-
-org_eclipse_swt_internal_photon_PtCallbackInfo_1t=
-PtCallbackInfo_t_reason=
-PtCallbackInfo_t_reason_subtype=
-PtCallbackInfo_t_event=cast=(PhEvent_t *)
-PtCallbackInfo_t_cbdata=cast=(void *)
-
-org_eclipse_swt_internal_photon_PtColorSelectInfo_1t=
-PtColorSelectInfo_t_flags=
-PtColorSelectInfo_t_nselectors=
-PtColorSelectInfo_t_ncolor_models=
-PtColorSelectInfo_t_color_models=cast=(PgColorModel_t **)
-PtColorSelectInfo_t_selectors=cast=(PtColorSelectorSpec_t *)
-PtColorSelectInfo_t_pos_x=accessor=pos.x
-PtColorSelectInfo_t_pos_y=accessor=pos.y
-PtColorSelectInfo_t_size_w=accessor=size.w
-PtColorSelectInfo_t_size_h=accessor=size.h
-PtColorSelectInfo_t_palette=accessor=palette.instance,cast=(void *)
-PtColorSelectInfo_t_accept_text=cast=(char *)
-PtColorSelectInfo_t_dismiss_text=cast=(char *)
-PtColorSelectInfo_t_accept_dismiss_text=cast=(char *)
-PtColorSelectInfo_t_apply_f=cast=(void *)
-PtColorSelectInfo_t_data=cast=(void *)
-PtColorSelectInfo_t_rgb=
-PtColorSelectInfo_t_dialog=cast=(PtWidget_t *)
-
-org_eclipse_swt_internal_photon_PtFileSelectionInfo_1t=
-PtFileSelectionInfo_t_ret=
-PtFileSelectionInfo_t_path=
-PtFileSelectionInfo_t_dim=
-PtFileSelectionInfo_t_pos=
-PtFileSelectionInfo_t_format=
-PtFileSelectionInfo_t_fspec=
-PtFileSelectionInfo_t_user_data=cast=(void *)
-PtFileSelectionInfo_t_confirm_display=cast=(void *)
-PtFileSelectionInfo_t_confirm_selection=cast=(void *)
-PtFileSelectionInfo_t_new_directory=cast=(void *)
-PtFileSelectionInfo_t_btn1=cast=(char *)
-PtFileSelectionInfo_t_btn2=cast=(char *)
-PtFileSelectionInfo_t_num_args=
-PtFileSelectionInfo_t_args=cast=(void *)
-PtFileSelectionInfo_t_minfo=cast=(PtFileSelectorInfo_t *)
-PtFileSelectionInfo_t_spare=cast=(long *)
-
-org_eclipse_swt_internal_photon_PtScrollbarCallback_1t=
-PtScrollbarCallback_t_action=
-PtScrollbarCallback_t_position=
-
-org_eclipse_swt_internal_photon_PtTextCallback_1t=
-PtTextCallback_t_start_pos=
-PtTextCallback_t_end_pos=
-PtTextCallback_t_cur_insert=
-PtTextCallback_t_new_insert=
-PtTextCallback_t_length=
-PtTextCallback_t_reserved=
-PtTextCallback_t_text=cast=(char *)
-PtTextCallback_t_doit=
-
-org_eclipse_swt_internal_photon_PtWebClientData_1t=
-PtWebClientData_t_type=
-PtWebClientData_t_url=
-PtWebClientData_t_length=
-PtWebClientData_t_data=cast=char *
-
-org_eclipse_swt_internal_photon_PtWebDataReqCallback_1t=
-PtWebDataReqCallback_t_type=
-PtWebDataReqCallback_t_length=
-PtWebDataReqCallback_t_url=
-
-org_eclipse_swt_internal_photon_PtWebMetaDataCallback_1t=
-PtWebMetaDataCallback_t_name=
-PtWebMetaDataCallback_t_value=
-
-org_eclipse_swt_internal_photon_PtWebStatusCallback_1t=
-PtWebStatusCallback_t_desc=
-PtWebStatusCallback_t_type=
-PtWebStatusCallback_t_url=
-
-org_eclipse_swt_internal_photon_PtWebWindowCallback_1t=
-PtWebWindowCallback_t_size_w=accessor=size.w
-PtWebWindowCallback_t_size_h=accessor=size.h
-PtWebWindowCallback_t_flags=
-
-org_eclipse_swt_internal_photon_utsname=
-utsname_sysname=
-utsname_nodename=
-utsname_release=
-utsname_version=
-utsname_machine=
-
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.properties
index fb8a6f7..d9c8b6b 100644
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.properties
+++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2004, 2005 IBM Corporation and others.
+# Copyright (c) 2004, 2009 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
@@ -8,18 +8,18 @@
 # Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-swt_copyright=/*******************************************************************************\n\
- * Copyright (c) 2000, 2005 IBM Corporation and others.\n\
- * All rights reserved. This program and the accompanying materials\n\
- * are made available under the terms of the Eclipse Public License v1.0\n\
- * which accompanies this distribution, and is available at\n\
- * http://www.eclipse.org/legal/epl-v10.html\n\
- *\n\
- * Contributors:\n\
- *     IBM Corporation - initial API and implementation\n\
- *******************************************************************************/\n
+swt_copyright=/*******************************************************************************\n \
+* Copyright (c) 2000, %END_YEAR IBM Corporation and others.\n \
+* All rights reserved. This program and the accompanying materials\n \
+* are made available under the terms of the Eclipse Public License v1.0\n \
+* which accompanies this distribution, and is available at\n \
+* http://www.eclipse.org/legal/epl-v10.html\n \
+*\n \
+* Contributors:\n \
+*    IBM Corporation - initial API and implementation\n \
+*******************************************************************************/\n
 swt_properties_copyright=###############################################################################\n\
-# Copyright (c) 2000, 2005 IBM Corporation and others.\n\
+# Copyright (c) 2000, %END_YEAR IBM Corporation and others.\n\
 # All rights reserved. This program and the accompanying materials\n\
 # are made available under the terms of the Eclipse Public License v1.0\n\
 # which accompanies this distribution, and is available at\n\
@@ -37,6 +37,7 @@
 org.eclipse.swt.internal.gtk.OS,../org.eclipse.swt/Eclipse SWT PI/gtk/library/,\
 org.eclipse.swt.internal.motif.OS,../org.eclipse.swt/Eclipse SWT PI/motif/library/,\
 org.eclipse.swt.internal.mozilla.XPCOM,../org.eclipse.swt/Eclipse SWT Mozilla/common/library/,\
+org.eclipse.swt.internal.mozilla.init.XPCOMInit,../org.eclipse.swt/Eclipse SWT Mozilla/common/library/,\
 org.eclipse.swt.internal.ole.win32.COM,../org.eclipse.swt/Eclipse SWT PI/win32/library/,\
 org.eclipse.swt.internal.photon.OS,../org.eclipse.swt/Eclipse SWT PI/photon/library/,\
 org.eclipse.swt.internal.win32.OS,../org.eclipse.swt/Eclipse SWT PI/win32/library/,\
@@ -44,4 +45,9 @@
 org.eclipse.swt.internal.cairo.Cairo,../org.eclipse.swt/Eclipse SWT PI/cairo/library/,\
 org.eclipse.swt.internal.opengl.glx.GLX,../org.eclipse.swt/Eclipse SWT OpenGL/glx/library/,\
 org.eclipse.swt.internal.opengl.win32.WGL,../org.eclipse.swt/Eclipse SWT OpenGL/win32/library/,\
-org.eclipse.swt.internal.opengl.carbon.AGL,../org.eclipse.swt/Eclipse SWT OpenGL/carbon/library/
+org.eclipse.swt.internal.opengl.carbon.AGL,../org.eclipse.swt/Eclipse SWT OpenGL/carbon/library/,\
+org.eclipse.swt.internal.C,../org.eclipse.swt/Eclipse SWT PI/common/library/,\
+org.eclipse.swt.internal.wpf.OS,../org.eclipse.swt/Eclipse SWT PI/wpf/library/,\
+org.eclipse.swt.internal.win32.Win32,../org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/,\
+org.eclipse.swt.internal.cocoa.Cocoa,../org.eclipse.swt/Eclipse SWT PI/carbon/library/,\
+org.eclipse.swt.internal.cocoa.OS,../org.eclipse.swt/Eclipse SWT PI/cocoa/library/
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.win32.OS.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.win32.OS.properties
deleted file mode 100644
index cdeca94..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.win32.OS.properties
+++ /dev/null
@@ -1,4509 +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
-###############################################################################
-org_eclipse_swt_internal_win32_ACCEL=
-ACCEL_fVirt=
-ACCEL_key=
-ACCEL_cmd=
-
-org_eclipse_swt_internal_win32_ACTCTX=
-ACTCTX_cbSize=
-ACTCTX_dwFlags=
-ACTCTX_lpSource=cast=(LPCTSTR)
-ACTCTX_wProcessorArchitecture=
-ACTCTX_wLangId=
-ACTCTX_lpAssemblyDirectory=cast=(LPCTSTR)
-ACTCTX_lpResourceName=cast=(LPCTSTR)
-ACTCTX_lpApplicationName=cast=(LPCTSTR)
-ACTCTX_hModule=cast=HMODULE
-
-org_eclipse_swt_internal_win32_BITMAP=
-BITMAP_bmType=
-BITMAP_bmWidth=
-BITMAP_bmHeight=
-BITMAP_bmWidthBytes=
-BITMAP_bmPlanes=
-BITMAP_bmBitsPixel=
-BITMAP_bmBits=cast=(LPVOID)
-
-org_eclipse_swt_internal_win32_BITMAPINFOHEADER=
-BITMAPINFOHEADER_biSize=
-BITMAPINFOHEADER_biWidth=
-BITMAPINFOHEADER_biHeight=
-BITMAPINFOHEADER_biPlanes=
-BITMAPINFOHEADER_biBitCount=
-BITMAPINFOHEADER_biCompression=
-BITMAPINFOHEADER_biSizeImage=
-BITMAPINFOHEADER_biXPelsPerMeter=
-BITMAPINFOHEADER_biYPelsPerMeter=
-BITMAPINFOHEADER_biClrUsed=
-BITMAPINFOHEADER_biClrImportant=
-
-org_eclipse_swt_internal_win32_BLENDFUNCTION=
-BLENDFUNCTION_BlendOp=
-BLENDFUNCTION_BlendFlags=
-BLENDFUNCTION_SourceConstantAlpha=
-BLENDFUNCTION_AlphaFormat=
-
-org_eclipse_swt_internal_win32_BROWSEINFO=
-BROWSEINFO_hwndOwner=cast=(HWND)
-BROWSEINFO_pidlRoot=cast=(LPCITEMIDLIST)
-BROWSEINFO_pszDisplayName=cast=(LPTSTR)
-BROWSEINFO_lpszTitle=cast=(LPCTSTR)
-BROWSEINFO_ulFlags=
-BROWSEINFO_lpfn=cast=(BFFCALLBACK)
-BROWSEINFO_lParam=
-BROWSEINFO_iImage=
-
-org_eclipse_swt_internal_win32_BUTTON_1IMAGELIST=
-BUTTON_IMAGELIST_himl=cast=HIMAGELIST
-BUTTON_IMAGELIST_margin_left=accessor=margin.left,cast=LONG
-BUTTON_IMAGELIST_margin_top=accessor=margin.top,cast=LONG
-BUTTON_IMAGELIST_margin_right=accessor=margin.right,cast=LONG
-BUTTON_IMAGELIST_margin_bottom=accessor=margin.bottom,cast=LONG
-BUTTON_IMAGELIST_uAlign=cast=UINT
-
-org_eclipse_swt_internal_win32_CHOOSECOLOR=
-CHOOSECOLOR_lStructSize=
-CHOOSECOLOR_hwndOwner=cast=(HWND)
-CHOOSECOLOR_hInstance=cast=(HANDLE)
-CHOOSECOLOR_rgbResult=
-CHOOSECOLOR_lpCustColors=cast=(COLORREF *)
-CHOOSECOLOR_Flags=
-CHOOSECOLOR_lCustData=
-CHOOSECOLOR_lpfnHook=cast=(LPCCHOOKPROC)
-CHOOSECOLOR_lpTemplateName=cast=(LPCTSTR)
-
-org_eclipse_swt_internal_win32_CHOOSEFONT=
-CHOOSEFONT_lStructSize=
-CHOOSEFONT_hwndOwner=cast=(HWND)
-CHOOSEFONT_hDC=cast=(HDC)
-CHOOSEFONT_lpLogFont=cast=(LPLOGFONT)
-CHOOSEFONT_iPointSize=
-CHOOSEFONT_Flags=
-CHOOSEFONT_rgbColors=
-CHOOSEFONT_lCustData=
-CHOOSEFONT_lpfnHook=cast=(LPCFHOOKPROC)
-CHOOSEFONT_lpTemplateName=cast=(LPCTSTR)
-CHOOSEFONT_hInstance=cast=(HINSTANCE)
-CHOOSEFONT_lpszStyle=cast=(LPTSTR)
-CHOOSEFONT_nFontType=
-CHOOSEFONT_nSizeMin=
-CHOOSEFONT_nSizeMax=
-
-org_eclipse_swt_internal_win32_COMBOBOXINFO=
-COMBOBOXINFO_cbSize=
-COMBOBOXINFO_itemLeft=accessor=rcItem.left
-COMBOBOXINFO_itemTop=accessor=rcItem.top
-COMBOBOXINFO_itemRight=accessor=rcItem.right
-COMBOBOXINFO_itemBottom=accessor=rcItem.bottom
-COMBOBOXINFO_buttonLeft=accessor=rcButton.left
-COMBOBOXINFO_buttonTop=accessor=rcButton.top
-COMBOBOXINFO_buttonRight=accessor=rcButton.right
-COMBOBOXINFO_buttonBottom=accessor=rcButton.bottom
-COMBOBOXINFO_stateButton=
-COMBOBOXINFO_hwndCombo=cast=HWND
-COMBOBOXINFO_hwndItem=cast=HWND
-COMBOBOXINFO_hwndList=cast=HWND
-
-org_eclipse_swt_internal_win32_COMPOSITIONFORM=
-COMPOSITIONFORM_dwStyle=
-COMPOSITIONFORM_x=accessor=ptCurrentPos.x
-COMPOSITIONFORM_y=accessor=ptCurrentPos.y
-COMPOSITIONFORM_left=accessor=rcArea.left
-COMPOSITIONFORM_top=accessor=rcArea.top
-COMPOSITIONFORM_right=accessor=rcArea.right
-COMPOSITIONFORM_bottom=accessor=rcArea.bottom
-
-org_eclipse_swt_internal_win32_CREATESTRUCT=
-CREATESTRUCT_lpCreateParams=cast=(LPVOID)
-CREATESTRUCT_hInstance=cast=(HINSTANCE)
-CREATESTRUCT_hMenu=cast=(HMENU)
-CREATESTRUCT_hwndParent=cast=(HWND)
-CREATESTRUCT_cy=
-CREATESTRUCT_cx=
-CREATESTRUCT_y=
-CREATESTRUCT_x=
-CREATESTRUCT_style=
-CREATESTRUCT_lpszName=cast=(LPCTSTR)
-CREATESTRUCT_lpszClass=cast=(LPCTSTR)
-CREATESTRUCT_dwExStyle=
-
-org_eclipse_swt_internal_win32_DIBSECTION=
-DIBSECTION_biSize=accessor=dsBmih.biSize
-DIBSECTION_biWidth=accessor=dsBmih.biWidth
-DIBSECTION_biHeight=accessor=dsBmih.biHeight
-DIBSECTION_biPlanes=accessor=dsBmih.biPlanes
-DIBSECTION_biBitCount=accessor=dsBmih.biBitCount
-DIBSECTION_biCompression=accessor=dsBmih.biCompression
-DIBSECTION_biSizeImage=accessor=dsBmih.biSizeImage
-DIBSECTION_biXPelsPerMeter=accessor=dsBmih.biXPelsPerMeter
-DIBSECTION_biYPelsPerMeter=accessor=dsBmih.biYPelsPerMeter
-DIBSECTION_biClrUsed=accessor=dsBmih.biClrUsed
-DIBSECTION_biClrImportant=accessor=dsBmih.biClrImportant
-DIBSECTION_dsBitfields0=accessor=dsBitfields[0]
-DIBSECTION_dsBitfields1=accessor=dsBitfields[1]
-DIBSECTION_dsBitfields2=accessor=dsBitfields[2]
-DIBSECTION_dshSection=cast=(HANDLE)
-DIBSECTION_dsOffset=
-
-org_eclipse_swt_internal_win32_DLLVERSIONINFO=
-DLLVERSIONINFO_cbSize=
-DLLVERSIONINFO_dwMajorVersion=
-DLLVERSIONINFO_dwMinorVersion=
-DLLVERSIONINFO_dwBuildNumber=
-DLLVERSIONINFO_dwPlatformID=
-
-org_eclipse_swt_internal_win32_DOCINFO=
-DOCINFO_cbSize=
-DOCINFO_lpszDocName=cast=(LPCTSTR)
-DOCINFO_lpszOutput=cast=(LPCTSTR)
-DOCINFO_lpszDatatype=cast=(LPCTSTR)
-DOCINFO_fwType=
-
-org_eclipse_swt_internal_win32_DRAWITEMSTRUCT=
-DRAWITEMSTRUCT_CtlType=
-DRAWITEMSTRUCT_CtlID=
-DRAWITEMSTRUCT_itemID=
-DRAWITEMSTRUCT_itemAction=
-DRAWITEMSTRUCT_itemState=
-DRAWITEMSTRUCT_hwndItem=cast=(HWND)
-DRAWITEMSTRUCT_hDC=cast=(HDC)
-DRAWITEMSTRUCT_left=accessor=rcItem.left
-DRAWITEMSTRUCT_top=accessor=rcItem.top
-DRAWITEMSTRUCT_bottom=accessor=rcItem.bottom
-DRAWITEMSTRUCT_right=accessor=rcItem.right
-DRAWITEMSTRUCT_itemData=
-
-org_eclipse_swt_internal_win32_DROPFILES=
-DROPFILES_pFiles=
-DROPFILES_pt_x=accessor=pt.x
-DROPFILES_pt_y=accessor=pt.y
-DROPFILES_fNC=
-DROPFILES_fWide=
-
-org_eclipse_swt_internal_win32_EXTLOGPEN=
-EXTLOGPEN_elpPenStyle=
-EXTLOGPEN_elpWidth=
-EXTLOGPEN_elpBrushStyle=
-EXTLOGPEN_elpColor=
-EXTLOGPEN_elpHatch=
-EXTLOGPEN_elpNumEntries=
-EXTLOGPEN_elpStyleEntry=
-
-org_eclipse_swt_internal_win32_FILETIME=
-FILETIME_dwLowDateTime=
-FILETIME_dwHighDateTime=
-
-org_eclipse_swt_internal_win32_GCP_1RESULTS=
-GCP_RESULTS_lStructSize=
-GCP_RESULTS_lpOutString=cast=(LPTSTR)
-GCP_RESULTS_lpOrder=cast=(UINT  *)
-GCP_RESULTS_lpDx=cast=(int  *)
-GCP_RESULTS_lpCaretPos=cast=(int  *)
-GCP_RESULTS_lpClass=cast=(LPSTR)
-GCP_RESULTS_lpGlyphs=cast=(LPWSTR)
-GCP_RESULTS_nGlyphs=
-GCP_RESULTS_nMaxFit=
-
-org_eclipse_swt_internal_win32_GRADIENT_1RECT=
-GRADIENT_RECT_UpperLeft=
-GRADIENT_RECT_LowerRight=
-
-org_eclipse_swt_internal_win32_GUITHREADINFO=
-GUITHREADINFO_cbSize=cast=(DWORD)
-GUITHREADINFO_flags=cast=(DWORD)
-GUITHREADINFO_hwndActive=cast=(HWND)
-GUITHREADINFO_hwndFocus=cast=(HWND)
-GUITHREADINFO_hwndCapture=cast=(HWND)
-GUITHREADINFO_hwndMenuOwner=cast=(HWND)
-GUITHREADINFO_hwndMoveSize=cast=(HWND)
-GUITHREADINFO_hwndCaret=cast=(HWND)
-GUITHREADINFO_left=accessor=rcCaret.left
-GUITHREADINFO_top=accessor=rcCaret.top
-GUITHREADINFO_right=accessor=rcCaret.right
-GUITHREADINFO_bottom=accessor=rcCaret.bottom
-
-org_eclipse_swt_internal_win32_HDITEM=
-HDITEM_mask=
-HDITEM_cxy=
-HDITEM_pszText=cast=(LPTSTR)
-HDITEM_hbm=cast=(HBITMAP)
-HDITEM_cchTextMax=
-HDITEM_fmt=
-HDITEM_lParam=
-HDITEM_iImage=
-HDITEM_iOrder=
-
-org_eclipse_swt_internal_win32_HDLAYOUT=
-HDLAYOUT_prc=cast=RECT *
-HDLAYOUT_pwpos=cast=(WINDOWPOS *)
-
-org_eclipse_swt_internal_win32_HELPINFO=
-HELPINFO_cbSize=
-HELPINFO_iContextType=
-HELPINFO_iCtrlId=
-HELPINFO_hItemHandle=cast=(HANDLE)
-HELPINFO_dwContextId=
-HELPINFO_x=accessor=MousePos.x
-HELPINFO_y=accessor=MousePos.y
-
-org_eclipse_swt_internal_win32_HIGHCONTRAST=
-HIGHCONTRAST_cbSize=
-HIGHCONTRAST_dwFlags=
-HIGHCONTRAST_lpszDefaultScheme=cast=LPTSTR
-
-org_eclipse_swt_internal_win32_ICONINFO=
-ICONINFO_fIcon=
-ICONINFO_xHotspot=
-ICONINFO_yHotspot=
-ICONINFO_hbmMask=cast=(HBITMAP)
-ICONINFO_hbmColor=cast=(HBITMAP)
-
-org_eclipse_swt_internal_win32_INITCOMMONCONTROLSEX=
-INITCOMMONCONTROLSEX_dwSize=
-INITCOMMONCONTROLSEX_dwICC=
-
-org_eclipse_swt_internal_win32_INPUT=
-INPUT_type=
-
-org_eclipse_swt_internal_win32_KEYBDINPUT=
-KEYBDINPUT_wVk=
-KEYBDINPUT_wScan=
-KEYBDINPUT_dwFlags=
-KEYBDINPUT_time=
-KEYBDINPUT_dwExtraInfo=
-
-org_eclipse_swt_internal_win32_LITEM=
-LITEM_mask=
-LITEM_iLink=
-LITEM_state=
-LITEM_stateMask=
-LITEM_szID=
-LITEM_szUrl=
-
-org_eclipse_swt_internal_win32_LOGBRUSH=
-LOGBRUSH_lbStyle=
-LOGBRUSH_lbColor=
-LOGBRUSH_lbHatch=
-
-org_eclipse_swt_internal_win32_LOGFONT=
-LOGFONT_lfHeight=
-LOGFONT_lfWidth=
-LOGFONT_lfEscapement=
-LOGFONT_lfOrientation=
-LOGFONT_lfWeight=
-LOGFONT_lfItalic=
-LOGFONT_lfUnderline=
-LOGFONT_lfStrikeOut=
-LOGFONT_lfCharSet=
-LOGFONT_lfOutPrecision=
-LOGFONT_lfClipPrecision=
-LOGFONT_lfQuality=
-LOGFONT_lfPitchAndFamily=
-
-org_eclipse_swt_internal_win32_LOGFONTA=
-LOGFONTA_lfFaceName=
-
-org_eclipse_swt_internal_win32_LOGFONTW=
-LOGFONTW_lfFaceName=
-
-org_eclipse_swt_internal_win32_LOGPEN=
-LOGPEN_lopnStyle=
-LOGPEN_x=accessor=lopnWidth.x
-LOGPEN_y=accessor=lopnWidth.y
-LOGPEN_lopnColor=
-
-org_eclipse_swt_internal_win32_LRESULT=flags=no_gen
-LRESULT_value=
-
-org_eclipse_swt_internal_win32_LVCOLUMN=
-LVCOLUMN_mask=
-LVCOLUMN_fmt=
-LVCOLUMN_cx=
-LVCOLUMN_pszText=cast=(LPTSTR)
-LVCOLUMN_cchTextMax=
-LVCOLUMN_iSubItem=
-LVCOLUMN_iImage=
-LVCOLUMN_iOrder=
-
-org_eclipse_swt_internal_win32_LVHITTESTINFO=
-LVHITTESTINFO_x=accessor=pt.x
-LVHITTESTINFO_y=accessor=pt.y
-LVHITTESTINFO_flags=
-LVHITTESTINFO_iItem=
-LVHITTESTINFO_iSubItem=
-
-org_eclipse_swt_internal_win32_LVITEM=
-LVITEM_mask=
-LVITEM_iItem=
-LVITEM_iSubItem=
-LVITEM_state=
-LVITEM_stateMask=
-LVITEM_pszText=cast=(LPTSTR)
-LVITEM_cchTextMax=
-LVITEM_iImage=
-LVITEM_lParam=
-LVITEM_iIndent=
-
-org_eclipse_swt_internal_win32_MARGINS=
-MARGINS_cxLeftWidth=
-MARGINS_cxRightWidth=
-MARGINS_cyTopHeight=
-MARGINS_cyBottomHeight=
-
-org_eclipse_swt_internal_win32_MEASUREITEMSTRUCT=
-MEASUREITEMSTRUCT_CtlType=
-MEASUREITEMSTRUCT_CtlID=
-MEASUREITEMSTRUCT_itemID=
-MEASUREITEMSTRUCT_itemWidth=
-MEASUREITEMSTRUCT_itemHeight=
-MEASUREITEMSTRUCT_itemData=
-
-org_eclipse_swt_internal_win32_MENUBARINFO=
-MENUBARINFO_cbSize=
-MENUBARINFO_left=accessor=rcBar.left
-MENUBARINFO_top=accessor=rcBar.top
-MENUBARINFO_right=accessor=rcBar.right
-MENUBARINFO_bottom=accessor=rcBar.bottom
-MENUBARINFO_hMenu=cast=(HMENU)
-MENUBARINFO_hwndMenu=cast=(HWND)
-MENUBARINFO_fBarFocused=
-MENUBARINFO_fFocused=
-
-org_eclipse_swt_internal_win32_MENUINFO=
-MENUINFO_cbSize=
-MENUINFO_fMask=
-MENUINFO_dwStyle=
-MENUINFO_cyMax=
-MENUINFO_hbrBack=cast=(HBRUSH)
-MENUINFO_dwContextHelpID=
-MENUINFO_dwMenuData=
-
-org_eclipse_swt_internal_win32_MENUITEMINFO=
-MENUITEMINFO_cbSize=
-MENUITEMINFO_fMask=
-MENUITEMINFO_fType=
-MENUITEMINFO_fState=
-MENUITEMINFO_wID=
-MENUITEMINFO_hSubMenu=cast=(HMENU)
-MENUITEMINFO_hbmpChecked=cast=(HBITMAP)
-MENUITEMINFO_hbmpUnchecked=cast=(HBITMAP)
-MENUITEMINFO_dwItemData=
-MENUITEMINFO_dwTypeData=cast=(LPTSTR)
-MENUITEMINFO_cch=
-MENUITEMINFO_hbmpItem=cast=(HBITMAP),flags=no_wince
-
-org_eclipse_swt_internal_win32_MINMAXINFO=
-MINMAXINFO_ptReserved_x=accessor=ptReserved.x
-MINMAXINFO_ptReserved_y=accessor=ptReserved.y
-MINMAXINFO_ptMaxSize_x=accessor=ptMaxSize.x
-MINMAXINFO_ptMaxSize_y=accessor=ptMaxSize.y
-MINMAXINFO_ptMaxPosition_x=accessor=ptMaxPosition.x
-MINMAXINFO_ptMaxPosition_y=accessor=ptMaxPosition.y
-MINMAXINFO_ptMinTrackSize_x=accessor=ptMinTrackSize.x
-MINMAXINFO_ptMinTrackSize_y=accessor=ptMinTrackSize.y
-MINMAXINFO_ptMaxTrackSize_x=accessor=ptMaxTrackSize.x
-MINMAXINFO_ptMaxTrackSize_y=accessor=ptMaxTrackSize.y
-
-org_eclipse_swt_internal_win32_MONITORINFO=
-MONITORINFO_cbSize=
-MONITORINFO_rcMonitor_left=accessor=rcMonitor.left
-MONITORINFO_rcMonitor_top=accessor=rcMonitor.top
-MONITORINFO_rcMonitor_right=accessor=rcMonitor.right
-MONITORINFO_rcMonitor_bottom=accessor=rcMonitor.bottom
-MONITORINFO_rcWork_left=accessor=rcWork.left
-MONITORINFO_rcWork_top=accessor=rcWork.top
-MONITORINFO_rcWork_right=accessor=rcWork.right
-MONITORINFO_rcWork_bottom=accessor=rcWork.bottom
-MONITORINFO_dwFlags=
-
-org_eclipse_swt_internal_win32_MOUSEINPUT=
-MOUSEINPUT_dx=
-MOUSEINPUT_dy=
-MOUSEINPUT_mouseData=
-MOUSEINPUT_dwFlags=
-MOUSEINPUT_time=
-MOUSEINPUT_dwExtraInfo=
-
-org_eclipse_swt_internal_win32_MSG=
-MSG_hwnd=cast=(HWND)
-MSG_message=
-MSG_wParam=
-MSG_lParam=
-MSG_time=
-MSG_x=accessor=pt.x
-MSG_y=accessor=pt.y
-
-org_eclipse_swt_internal_win32_NMCUSTOMDRAW=
-NMCUSTOMDRAW_dwDrawStage=
-NMCUSTOMDRAW_hdc=cast=(HDC)
-NMCUSTOMDRAW_left=accessor=rc.left
-NMCUSTOMDRAW_top=accessor=rc.top
-NMCUSTOMDRAW_right=accessor=rc.right
-NMCUSTOMDRAW_bottom=accessor=rc.bottom
-NMCUSTOMDRAW_dwItemSpec=
-NMCUSTOMDRAW_uItemState=
-NMCUSTOMDRAW_lItemlParam=
-
-org_eclipse_swt_internal_win32_NMHDR=
-NMHDR_hwndFrom=cast=(HWND)
-NMHDR_idFrom=
-NMHDR_code=
-
-org_eclipse_swt_internal_win32_NMHEADER=
-NMHEADER_iItem=
-NMHEADER_iButton=
-NMHEADER_pitem=cast=(HDITEM FAR *)
-
-org_eclipse_swt_internal_win32_NMLINK=
-NMLINK_mask=accessor=item.mask
-NMLINK_iLink=accessor=item.iLink
-NMLINK_state=accessor=item.state
-NMLINK_stateMask=accessor=item.stateMask
-NMLINK_szID=accessor=item.szID
-NMLINK_szUrl=accessor=item.szUrl
-
-org_eclipse_swt_internal_win32_NMLISTVIEW=
-NMLISTVIEW_iItem=
-NMLISTVIEW_iSubItem=
-NMLISTVIEW_uNewState=
-NMLISTVIEW_uOldState=
-NMLISTVIEW_uChanged=
-NMLISTVIEW_x=accessor=ptAction.x
-NMLISTVIEW_y=accessor=ptAction.y
-NMLISTVIEW_lParam=
-
-org_eclipse_swt_internal_win32_NMLVCUSTOMDRAW=
-NMLVCUSTOMDRAW_clrText=
-NMLVCUSTOMDRAW_clrTextBk=
-NMLVCUSTOMDRAW_iSubItem=
-
-org_eclipse_swt_internal_win32_NMLVDISPINFO=
-NMLVDISPINFO_mask=accessor=item.mask
-NMLVDISPINFO_iItem=accessor=item.iItem
-NMLVDISPINFO_iSubItem=accessor=item.iSubItem
-NMLVDISPINFO_state=accessor=item.state
-NMLVDISPINFO_stateMask=accessor=item.stateMask
-NMLVDISPINFO_pszText=accessor=item.pszText,cast=LPTSTR
-NMLVDISPINFO_cchTextMax=accessor=item.cchTextMax
-NMLVDISPINFO_iImage=accessor=item.iImage
-NMLVDISPINFO_lParam=accessor=item.lParam
-NMLVDISPINFO_iIndent=accessor=item.iIndent
-
-org_eclipse_swt_internal_win32_NMLVFINDITEM=
-NMLVFINDITEM_iStart=
-NMLVFINDITEM_flags=accessor=lvfi.flags
-NMLVFINDITEM_psz=accessor=lvfi.psz,cast=LPCTSTR
-NMLVFINDITEM_lParam=accessor=lvfi.lParam
-NMLVFINDITEM_x=accessor=lvfi.pt.x
-NMLVFINDITEM_y=accessor=lvfi.pt.y
-NMLVFINDITEM_vkDirection=accessor=lvfi.vkDirection
-
-org_eclipse_swt_internal_win32_NMREBARCHEVRON=
-NMREBARCHEVRON_uBand=
-NMREBARCHEVRON_wID=
-NMREBARCHEVRON_lParam=
-NMREBARCHEVRON_left=accessor=rc.left
-NMREBARCHEVRON_top=accessor=rc.top
-NMREBARCHEVRON_right=accessor=rc.right
-NMREBARCHEVRON_bottom=accessor=rc.bottom
-NMREBARCHEVRON_lParamNM=
-
-org_eclipse_swt_internal_win32_NMREBARCHILDSIZE=
-NMREBARCHILDSIZE_uBand=
-NMREBARCHILDSIZE_wID=
-NMREBARCHILDSIZE_rcChild_left=accessor=rcChild.left
-NMREBARCHILDSIZE_rcChild_top=accessor=rcChild.top
-NMREBARCHILDSIZE_rcChild_right=accessor=rcChild.right
-NMREBARCHILDSIZE_rcChild_bottom=accessor=rcChild.bottom
-NMREBARCHILDSIZE_rcBand_left=accessor=rcBand.left
-NMREBARCHILDSIZE_rcBand_top=accessor=rcBand.top
-NMREBARCHILDSIZE_rcBand_right=accessor=rcBand.right
-NMREBARCHILDSIZE_rcBand_bottom=accessor=rcBand.bottom
-
-org_eclipse_swt_internal_win32_NMRGINFO=
-NMRGINFO_x=accessor=ptAction.x
-NMRGINFO_y=accessor=ptAction.y
-NMRGINFO_dwItemSpec=
-
-org_eclipse_swt_internal_win32_NMTBHOTITEM=
-NMTBHOTITEM_idOld=
-NMTBHOTITEM_idNew=
-NMTBHOTITEM_dwFlags=
-
-org_eclipse_swt_internal_win32_NMTOOLBAR=
-NMTOOLBAR_iItem=
-NMTOOLBAR_iBitmap=accessor=tbButton.iBitmap
-NMTOOLBAR_idCommand=accessor=tbButton.idCommand
-NMTOOLBAR_fsState=accessor=tbButton.fsState
-NMTOOLBAR_fsStyle=accessor=tbButton.fsStyle
-NMTOOLBAR_dwData=accessor=tbButton.dwData
-NMTOOLBAR_iString=accessor=tbButton.iString
-NMTOOLBAR_cchText=
-NMTOOLBAR_pszText=cast=(LPTSTR)
-NMTOOLBAR_left=accessor=rcButton.left,flags=no_wince
-NMTOOLBAR_top=accessor=rcButton.top,flags=no_wince
-NMTOOLBAR_right=accessor=rcButton.right,flags=no_wince
-NMTOOLBAR_bottom=accessor=rcButton.bottom,flags=no_wince
-
-org_eclipse_swt_internal_win32_NMTTDISPINFO=
-NMTTDISPINFO_lpszText=cast=(void *)
-NMTTDISPINFO_hinst=cast=(HINSTANCE)
-NMTTDISPINFO_uFlags=
-NMTTDISPINFO_lParam=
-
-org_eclipse_swt_internal_win32_NMTTDISPINFOA=
-NMTTDISPINFOA_szText=
-
-org_eclipse_swt_internal_win32_NMTTDISPINFOW=
-NMTTDISPINFOW_szText=
-
-org_eclipse_swt_internal_win32_NMTVCUSTOMDRAW=
-NMTVCUSTOMDRAW_clrText=
-NMTVCUSTOMDRAW_clrTextBk=
-NMTVCUSTOMDRAW_iLevel=flags=no_wince
-
-org_eclipse_swt_internal_win32_NMTVDISPINFO=
-NMTVDISPINFO_mask=accessor=item.mask
-NMTVDISPINFO_hItem=accessor=item.hItem,cast=HTREEITEM
-NMTVDISPINFO_state=accessor=item.state
-NMTVDISPINFO_stateMask=accessor=item.stateMask
-NMTVDISPINFO_pszText=accessor=item.pszText,cast=LPTSTR
-NMTVDISPINFO_cchTextMax=accessor=item.cchTextMax
-NMTVDISPINFO_iImage=accessor=item.iImage
-NMTVDISPINFO_iSelectedImage=accessor=item.iSelectedImage
-NMTVDISPINFO_cChildren=accessor=item.cChildren
-NMTVDISPINFO_lParam=accessor=item.lParam
-
-org_eclipse_swt_internal_win32_NMUPDOWN=
-NMUPDOWN_iPos=
-NMUPDOWN_iDelta=
-
-org_eclipse_swt_internal_win32_NONCLIENTMETRICS=
-NONCLIENTMETRICS_cbSize=
-NONCLIENTMETRICS_iBorderWidth=
-NONCLIENTMETRICS_iScrollWidth=
-NONCLIENTMETRICS_iScrollHeight=
-NONCLIENTMETRICS_iCaptionWidth=
-NONCLIENTMETRICS_iCaptionHeight=
-NONCLIENTMETRICS_iSmCaptionWidth=
-NONCLIENTMETRICS_iSmCaptionHeight=
-NONCLIENTMETRICS_iMenuWidth=
-NONCLIENTMETRICS_iMenuHeight=
-
-org_eclipse_swt_internal_win32_NONCLIENTMETRICSA=
-NONCLIENTMETRICSA_lfCaptionFont=
-NONCLIENTMETRICSA_lfSmCaptionFont=
-NONCLIENTMETRICSA_lfMenuFont=
-NONCLIENTMETRICSA_lfStatusFont=
-NONCLIENTMETRICSA_lfMessageFont=
-
-org_eclipse_swt_internal_win32_NONCLIENTMETRICSW=
-NONCLIENTMETRICSW_lfCaptionFont=
-NONCLIENTMETRICSW_lfSmCaptionFont=
-NONCLIENTMETRICSW_lfMenuFont=
-NONCLIENTMETRICSW_lfStatusFont=
-NONCLIENTMETRICSW_lfMessageFont=
-
-org_eclipse_swt_internal_win32_NOTIFYICONDATA=
-NOTIFYICONDATA_cbSize=
-NOTIFYICONDATA_hWnd=cast=(HWND)
-NOTIFYICONDATA_uID=
-NOTIFYICONDATA_uFlags=
-NOTIFYICONDATA_uCallbackMessage=
-NOTIFYICONDATA_hIcon=cast=(HICON)
-NOTIFYICONDATA_dwState=flags=no_wince
-NOTIFYICONDATA_dwStateMask=flags=no_wince
-NOTIFYICONDATA_uVersion=flags=no_wince
-NOTIFYICONDATA_dwInfoFlags=flags=no_wince
-
-org_eclipse_swt_internal_win32_NOTIFYICONDATAA=
-NOTIFYICONDATAA_szTip=cast=(TCHAR)
-NOTIFYICONDATAA_szInfo=cast=(TCHAR),flags=no_wince
-NOTIFYICONDATAA_szInfoTitle=cast=(TCHAR),flags=no_wince
-
-org_eclipse_swt_internal_win32_NOTIFYICONDATAW=
-NOTIFYICONDATAW_szTip=cast=(TCHAR)
-NOTIFYICONDATAW_szInfo=cast=(TCHAR),flags=no_wince
-NOTIFYICONDATAW_szInfoTitle=cast=(TCHAR),flags=no_wince
-
-org_eclipse_swt_internal_win32_OPENFILENAME=
-OPENFILENAME_lStructSize=
-OPENFILENAME_hwndOwner=cast=(HWND)
-OPENFILENAME_hInstance=cast=(HINSTANCE)
-OPENFILENAME_lpstrFilter=cast=(LPCTSTR)
-OPENFILENAME_lpstrCustomFilter=cast=(LPTSTR)
-OPENFILENAME_nMaxCustFilter=
-OPENFILENAME_nFilterIndex=
-OPENFILENAME_lpstrFile=cast=(LPTSTR)
-OPENFILENAME_nMaxFile=
-OPENFILENAME_lpstrFileTitle=cast=(LPTSTR)
-OPENFILENAME_nMaxFileTitle=
-OPENFILENAME_lpstrInitialDir=cast=(LPCTSTR)
-OPENFILENAME_lpstrTitle=cast=(LPCTSTR)
-OPENFILENAME_Flags=
-OPENFILENAME_nFileOffset=
-OPENFILENAME_nFileExtension=
-OPENFILENAME_lpstrDefExt=cast=(LPCTSTR)
-OPENFILENAME_lCustData=
-OPENFILENAME_lpfnHook=cast=(LPOFNHOOKPROC)
-OPENFILENAME_lpTemplateName=cast=(LPCTSTR)
-
-org_eclipse_swt_internal_win32_OS=
-OS_AbortDoc=
-OS_AbortDoc_0=cast=(HDC)
-
-OS_ActivateActCtx=flags=dynamic
-OS_ActivateActCtx_0=
-OS_ActivateActCtx_1=cast=ULONG_PTR*
-
-OS_ActivateKeyboardLayout=
-OS_ActivateKeyboardLayout_0=cast=(HKL)
-OS_ActivateKeyboardLayout_1=
-
-OS_AdjustWindowRectEx=
-OS_AdjustWindowRectEx_0=
-OS_AdjustWindowRectEx_1=
-OS_AdjustWindowRectEx_2=
-OS_AdjustWindowRectEx_3=
-
-OS_AlphaBlend=flags=dynamic
-OS_AlphaBlend_0=
-OS_AlphaBlend_1=
-OS_AlphaBlend_2=
-OS_AlphaBlend_3=
-OS_AlphaBlend_4=
-OS_AlphaBlend_5=
-OS_AlphaBlend_6=
-OS_AlphaBlend_7=
-OS_AlphaBlend_8=
-OS_AlphaBlend_9=
-OS_AlphaBlend_10=flags=struct
-
-OS_Arc=
-OS_Arc_0=cast=(HDC)
-OS_Arc_1=
-OS_Arc_2=
-OS_Arc_3=
-OS_Arc_4=
-OS_Arc_5=
-OS_Arc_6=
-OS_Arc_7=
-OS_Arc_8=
-
-OS_BeginDeferWindowPos=
-OS_BeginDeferWindowPos_0=
-
-OS_BeginPaint=
-OS_BeginPaint_0=cast=(HWND)
-OS_BeginPaint_1=
-
-OS_BeginPath=
-OS_BeginPath_0=cast=(HDC)
-
-OS_BitBlt=
-OS_BitBlt_0=cast=(HDC)
-OS_BitBlt_1=
-OS_BitBlt_2=
-OS_BitBlt_3=
-OS_BitBlt_4=
-OS_BitBlt_5=cast=(HDC)
-OS_BitBlt_6=
-OS_BitBlt_7=
-OS_BitBlt_8=
-
-OS_BringWindowToTop=
-OS_BringWindowToTop_0=cast=(HWND)
-
-OS_Call=
-OS_Call_0=cast=(DLLGETVERSIONPROC)
-OS_Call_1=
-
-OS_CallNextHookEx=
-OS_CallNextHookEx_0=cast=(HHOOK)
-OS_CallNextHookEx_1=
-OS_CallNextHookEx_2=cast=(WPARAM)
-OS_CallNextHookEx_3=cast=(LPARAM)
-
-OS_CallWindowProcA=
-OS_CallWindowProcA_0=cast=(WNDPROC)
-OS_CallWindowProcA_1=cast=(HWND)
-OS_CallWindowProcA_2=
-OS_CallWindowProcA_3=
-OS_CallWindowProcA_4=
-
-OS_CallWindowProcW=
-OS_CallWindowProcW_0=cast=(WNDPROC)
-OS_CallWindowProcW_1=cast=(HWND)
-OS_CallWindowProcW_2=
-OS_CallWindowProcW_3=
-OS_CallWindowProcW_4=
-
-OS_CharLowerA=
-OS_CharLowerA_0=cast=(LPSTR)
-
-OS_CharLowerW=
-OS_CharLowerW_0=cast=(LPWSTR)
-
-OS_CharUpperA=
-OS_CharUpperA_0=cast=(LPSTR)
-
-OS_CharUpperW=
-OS_CharUpperW_0=cast=(LPWSTR)
-
-OS_CheckMenuItem=
-OS_CheckMenuItem_0=cast=(HMENU)
-OS_CheckMenuItem_1=cast=(UINT)
-OS_CheckMenuItem_2=cast=(UINT)
-
-OS_ChooseColorA=
-OS_ChooseColorA_0=
-
-OS_ChooseColorW=
-OS_ChooseColorW_0=cast=(LPCHOOSECOLORW)
-
-OS_ChooseFontA=
-OS_ChooseFontA_0=
-
-OS_ChooseFontW=
-OS_ChooseFontW_0=cast=(LPCHOOSEFONTW)
-
-OS_ClientToScreen=
-OS_ClientToScreen_0=cast=(HWND)
-OS_ClientToScreen_1=
-
-OS_CloseClipboard=
-
-OS_CloseThemeData=flags=dynamic
-OS_CloseThemeData_0=cast=HTHEME
-
-OS_CoCreateInstance=
-OS_CoCreateInstance_0=cast=REFCLSID
-OS_CoCreateInstance_1=cast=LPUNKNOWN
-OS_CoCreateInstance_2=
-OS_CoCreateInstance_3=cast=REFIID
-OS_CoCreateInstance_4=cast=LPVOID *
-
-OS_CombineRgn=
-OS_CombineRgn_0=cast=(HRGN)
-OS_CombineRgn_1=cast=(HRGN)
-OS_CombineRgn_2=cast=(HRGN)
-OS_CombineRgn_3=
-
-OS_CommDlgExtendedError=
-
-OS_CommandBar_AddAdornments=
-OS_CommandBar_AddAdornments_0=cast=(HWND)
-OS_CommandBar_AddAdornments_1=
-OS_CommandBar_AddAdornments_2=
-
-OS_CommandBar_Create=
-OS_CommandBar_Create_0=cast=(HINSTANCE)
-OS_CommandBar_Create_1=cast=(HWND)
-OS_CommandBar_Create_2=
-
-OS_CommandBar_Destroy=
-OS_CommandBar_Destroy_0=cast=(HWND)
-
-OS_CommandBar_DrawMenuBar=
-OS_CommandBar_DrawMenuBar_0=cast=(HWND)
-OS_CommandBar_DrawMenuBar_1=cast=(WORD)
-
-OS_CommandBar_Height=
-OS_CommandBar_Height_0=cast=(HWND)
-
-OS_CommandBar_InsertMenubarEx=
-OS_CommandBar_InsertMenubarEx_0=cast=(HWND)
-OS_CommandBar_InsertMenubarEx_1=cast=(HINSTANCE)
-OS_CommandBar_InsertMenubarEx_2=cast=(LPTSTR)
-OS_CommandBar_InsertMenubarEx_3=cast=(WORD)
-
-OS_CommandBar_Show=
-OS_CommandBar_Show_0=cast=(HWND)
-OS_CommandBar_Show_1=cast=(BOOL)
-
-OS_CopyImage=
-OS_CopyImage_0=cast=(HANDLE)
-OS_CopyImage_1=
-OS_CopyImage_2=
-OS_CopyImage_3=
-OS_CopyImage_4=
-
-OS_CreateAcceleratorTableA=
-OS_CreateAcceleratorTableA_0=cast=(LPACCEL)
-OS_CreateAcceleratorTableA_1=
-
-OS_CreateAcceleratorTableW=
-OS_CreateAcceleratorTableW_0=cast=(LPACCEL)
-OS_CreateAcceleratorTableW_1=
-
-OS_CreateActCtxA=flags=dynamic
-OS_CreateActCtxA_0=flags=no_out
-
-OS_CreateActCtxW=flags=dynamic
-OS_CreateActCtxW_0=flags=no_out
-
-OS_CreateBitmap=
-OS_CreateBitmap_0=
-OS_CreateBitmap_1=
-OS_CreateBitmap_2=
-OS_CreateBitmap_3=
-OS_CreateBitmap_4=cast=(CONST VOID *),flags=no_out critical
-
-OS_CreateCaret=
-OS_CreateCaret_0=cast=(HWND)
-OS_CreateCaret_1=cast=(HBITMAP)
-OS_CreateCaret_2=
-OS_CreateCaret_3=
-
-OS_CreateCompatibleBitmap=
-OS_CreateCompatibleBitmap_0=cast=(HDC)
-OS_CreateCompatibleBitmap_1=
-OS_CreateCompatibleBitmap_2=
-
-OS_CreateCompatibleDC=
-OS_CreateCompatibleDC_0=cast=(HDC)
-
-OS_CreateCursor=
-OS_CreateCursor_0=cast=(HINSTANCE)
-OS_CreateCursor_1=
-OS_CreateCursor_2=
-OS_CreateCursor_3=
-OS_CreateCursor_4=
-OS_CreateCursor_5=cast=(CONST VOID *),flags=no_out critical
-OS_CreateCursor_6=cast=(CONST VOID *),flags=no_out critical
-
-OS_CreateDCA=
-OS_CreateDCA_0=cast=(LPSTR)
-OS_CreateDCA_1=cast=(LPSTR)
-OS_CreateDCA_2=cast=(LPSTR)
-OS_CreateDCA_3=cast=(CONST DEVMODE *)
-
-OS_CreateDCW=
-OS_CreateDCW_0=cast=(LPWSTR)
-OS_CreateDCW_1=cast=(LPWSTR)
-OS_CreateDCW_2=cast=(LPWSTR)
-OS_CreateDCW_3=cast=(CONST DEVMODEW *)
-
-OS_CreateDIBSection=
-OS_CreateDIBSection_0=cast=(HDC)
-OS_CreateDIBSection_1=cast=(BITMAPINFO *),flags=no_out critical
-OS_CreateDIBSection_2=
-OS_CreateDIBSection_3=cast=(VOID **),flags=no_in critical
-OS_CreateDIBSection_4=cast=(HANDLE)
-OS_CreateDIBSection_5=
-
-OS_CreateFontIndirectA__I=
-OS_CreateFontIndirectA__I_0=cast=(LPLOGFONTA)
-
-OS_CreateFontIndirectA__Lorg_eclipse_swt_internal_win32_LOGFONTA_2=
-OS_CreateFontIndirectA__Lorg_eclipse_swt_internal_win32_LOGFONTA_2_0=flags=no_out
-
-OS_CreateFontIndirectW__I=
-OS_CreateFontIndirectW__I_0=cast=(LPLOGFONTW)
-
-OS_CreateFontIndirectW__Lorg_eclipse_swt_internal_win32_LOGFONTW_2=
-OS_CreateFontIndirectW__Lorg_eclipse_swt_internal_win32_LOGFONTW_2_0=flags=no_out
-
-OS_CreateIconIndirect=
-OS_CreateIconIndirect_0=flags=no_out
-
-OS_CreateMenu=
-
-OS_CreatePalette=
-OS_CreatePalette_0=cast=(LOGPALETTE *),flags=no_out critical
-
-OS_CreatePatternBrush=
-OS_CreatePatternBrush_0=cast=(HBITMAP)
-
-OS_CreatePen=
-OS_CreatePen_0=
-OS_CreatePen_1=
-OS_CreatePen_2=cast=(COLORREF)
-
-OS_CreatePolygonRgn=
-OS_CreatePolygonRgn_0=cast=(CONST POINT *)
-OS_CreatePolygonRgn_1=
-OS_CreatePolygonRgn_2=
-
-OS_CreatePopupMenu=
-
-OS_CreateRectRgn=
-OS_CreateRectRgn_0=
-OS_CreateRectRgn_1=
-OS_CreateRectRgn_2=
-OS_CreateRectRgn_3=
-
-OS_CreateSolidBrush=
-OS_CreateSolidBrush_0=cast=(COLORREF)
-
-OS_CreateStreamOnHGlobal=
-OS_CreateStreamOnHGlobal_0=cast=HGLOBAL
-OS_CreateStreamOnHGlobal_1=cast=BOOL
-OS_CreateStreamOnHGlobal_2=cast=LPSTREAM *
-
-OS_CreateWindowExA=
-OS_CreateWindowExA_0=
-OS_CreateWindowExA_1=cast=(LPSTR)
-OS_CreateWindowExA_2=
-OS_CreateWindowExA_3=
-OS_CreateWindowExA_4=
-OS_CreateWindowExA_5=
-OS_CreateWindowExA_6=
-OS_CreateWindowExA_7=
-OS_CreateWindowExA_8=cast=(HWND)
-OS_CreateWindowExA_9=cast=(HMENU)
-OS_CreateWindowExA_10=cast=(HINSTANCE)
-OS_CreateWindowExA_11=
-
-OS_CreateWindowExW=
-OS_CreateWindowExW_0=
-OS_CreateWindowExW_1=cast=(LPWSTR)
-OS_CreateWindowExW_2=cast=(LPWSTR)
-OS_CreateWindowExW_3=
-OS_CreateWindowExW_4=
-OS_CreateWindowExW_5=
-OS_CreateWindowExW_6=
-OS_CreateWindowExW_7=
-OS_CreateWindowExW_8=cast=(HWND)
-OS_CreateWindowExW_9=cast=(HMENU)
-OS_CreateWindowExW_10=cast=(HINSTANCE)
-OS_CreateWindowExW_11=
-
-OS_DefFrameProcA=
-OS_DefFrameProcA_0=cast=(HWND)
-OS_DefFrameProcA_1=cast=(HWND)
-OS_DefFrameProcA_2=
-OS_DefFrameProcA_3=cast=(WPARAM)
-OS_DefFrameProcA_4=cast=(LPARAM)
-
-OS_DefFrameProcW=
-OS_DefFrameProcW_0=cast=(HWND)
-OS_DefFrameProcW_1=cast=(HWND)
-OS_DefFrameProcW_2=
-OS_DefFrameProcW_3=cast=(WPARAM)
-OS_DefFrameProcW_4=cast=(LPARAM)
-
-OS_DefMDIChildProcA=
-OS_DefMDIChildProcA_0=cast=(HWND)
-OS_DefMDIChildProcA_1=
-OS_DefMDIChildProcA_2=cast=(WPARAM)
-OS_DefMDIChildProcA_3=cast=(LPARAM)
-
-OS_DefMDIChildProcW=
-OS_DefMDIChildProcW_0=cast=(HWND)
-OS_DefMDIChildProcW_1=
-OS_DefMDIChildProcW_2=cast=(WPARAM)
-OS_DefMDIChildProcW_3=cast=(LPARAM)
-
-OS_DefWindowProcA=
-OS_DefWindowProcA_0=cast=(HWND)
-OS_DefWindowProcA_1=
-OS_DefWindowProcA_2=cast=(WPARAM)
-OS_DefWindowProcA_3=cast=(LPARAM)
-
-OS_DefWindowProcW=
-OS_DefWindowProcW_0=cast=(HWND)
-OS_DefWindowProcW_1=
-OS_DefWindowProcW_2=cast=(WPARAM)
-OS_DefWindowProcW_3=cast=(LPARAM)
-
-OS_DeferWindowPos=
-OS_DeferWindowPos_0=cast=(HDWP)
-OS_DeferWindowPos_1=cast=(HWND)
-OS_DeferWindowPos_2=cast=(HWND)
-OS_DeferWindowPos_3=
-OS_DeferWindowPos_4=
-OS_DeferWindowPos_5=
-OS_DeferWindowPos_6=
-OS_DeferWindowPos_7=
-
-OS_DeleteDC=
-OS_DeleteDC_0=cast=(HDC)
-
-OS_DeleteMenu=
-OS_DeleteMenu_0=cast=(HMENU)
-OS_DeleteMenu_1=
-OS_DeleteMenu_2=
-
-OS_DeleteObject=
-OS_DeleteObject_0=cast=(HGDIOBJ)
-
-OS_DestroyAcceleratorTable=
-OS_DestroyAcceleratorTable_0=cast=(HACCEL)
-
-OS_DestroyCaret=
-
-OS_DestroyCursor=
-OS_DestroyCursor_0=cast=(HCURSOR)
-
-OS_DestroyIcon=
-OS_DestroyIcon_0=cast=(HICON)
-
-OS_DestroyMenu=
-OS_DestroyMenu_0=cast=(HMENU)
-
-OS_DestroyWindow=
-OS_DestroyWindow_0=cast=(HWND)
-
-OS_DispatchMessageA=
-OS_DispatchMessageA_0=
-
-OS_DispatchMessageW=
-OS_DispatchMessageW_0=
-
-OS_DragDetect=
-OS_DragDetect_0=cast=(HWND)
-OS_DragDetect_1=flags=struct
-
-OS_DragFinish=
-OS_DragFinish_0=cast=(HDROP)
-
-OS_DragQueryFileA=
-OS_DragQueryFileA_0=cast=(HDROP)
-OS_DragQueryFileA_1=
-OS_DragQueryFileA_2=cast=(LPTSTR)
-OS_DragQueryFileA_3=
-
-OS_DragQueryFileW=
-OS_DragQueryFileW_0=cast=(HDROP)
-OS_DragQueryFileW_1=
-OS_DragQueryFileW_2=cast=(LPWSTR)
-OS_DragQueryFileW_3=
-
-OS_DrawEdge=
-OS_DrawEdge_0=cast=(HDC)
-OS_DrawEdge_1=
-OS_DrawEdge_2=
-OS_DrawEdge_3=
-
-OS_DrawFocusRect=
-OS_DrawFocusRect_0=cast=(HDC)
-OS_DrawFocusRect_1=
-
-OS_DrawFrameControl=
-OS_DrawFrameControl_0=cast=(HDC)
-OS_DrawFrameControl_1=
-OS_DrawFrameControl_2=
-OS_DrawFrameControl_3=
-
-OS_DrawIconEx=
-OS_DrawIconEx_0=cast=(HDC)
-OS_DrawIconEx_1=
-OS_DrawIconEx_2=
-OS_DrawIconEx_3=cast=(HICON)
-OS_DrawIconEx_4=
-OS_DrawIconEx_5=
-OS_DrawIconEx_6=
-OS_DrawIconEx_7=cast=(HBRUSH)
-OS_DrawIconEx_8=
-
-OS_DrawMenuBar=
-OS_DrawMenuBar_0=cast=(HWND)
-
-OS_DrawStateA=
-OS_DrawStateA_0=cast=(HDC)
-OS_DrawStateA_1=cast=(HBRUSH)
-OS_DrawStateA_2=cast=(DRAWSTATEPROC)
-OS_DrawStateA_3=cast=(LPARAM)
-OS_DrawStateA_4=cast=(WPARAM)
-OS_DrawStateA_5=
-OS_DrawStateA_6=
-OS_DrawStateA_7=
-OS_DrawStateA_8=
-OS_DrawStateA_9=
-
-OS_DrawStateW=
-OS_DrawStateW_0=cast=(HDC)
-OS_DrawStateW_1=cast=(HBRUSH)
-OS_DrawStateW_2=cast=(DRAWSTATEPROC)
-OS_DrawStateW_3=cast=(LPARAM)
-OS_DrawStateW_4=cast=(WPARAM)
-OS_DrawStateW_5=
-OS_DrawStateW_6=
-OS_DrawStateW_7=
-OS_DrawStateW_8=
-OS_DrawStateW_9=
-
-OS_DrawTextA=
-OS_DrawTextA_0=cast=(HDC)
-OS_DrawTextA_1=cast=(LPSTR),flags=no_out critical
-OS_DrawTextA_2=
-OS_DrawTextA_3=
-OS_DrawTextA_4=
-
-OS_DrawTextW=
-OS_DrawTextW_0=cast=(HDC)
-OS_DrawTextW_1=cast=(LPWSTR),flags=no_out critical
-OS_DrawTextW_2=
-OS_DrawTextW_3=
-OS_DrawTextW_4=
-
-OS_DrawThemeBackground=flags=dynamic
-OS_DrawThemeBackground_0=cast=HTHEME
-OS_DrawThemeBackground_1=cast=HDC
-OS_DrawThemeBackground_2=
-OS_DrawThemeBackground_3=
-OS_DrawThemeBackground_4=cast=const RECT *
-OS_DrawThemeBackground_5=cast=const RECT *
-
-OS_DrawThemeEdge=flags=dynamic
-OS_DrawThemeEdge_0=
-OS_DrawThemeEdge_1=
-OS_DrawThemeEdge_2=
-OS_DrawThemeEdge_3=
-OS_DrawThemeEdge_4=
-OS_DrawThemeEdge_5=
-OS_DrawThemeEdge_6=
-OS_DrawThemeEdge_7=
-
-OS_DrawThemeIcon=flags=dynamic
-OS_DrawThemeIcon_0=
-OS_DrawThemeIcon_1=
-OS_DrawThemeIcon_2=
-OS_DrawThemeIcon_3=
-OS_DrawThemeIcon_4=
-OS_DrawThemeIcon_5=
-OS_DrawThemeIcon_6=
-
-OS_DrawThemeParentBackground=flags=dynamic
-OS_DrawThemeParentBackground_0=
-OS_DrawThemeParentBackground_1=
-OS_DrawThemeParentBackground_2=
-
-OS_DrawThemeText=flags=dynamic
-OS_DrawThemeText_0=
-OS_DrawThemeText_1=
-OS_DrawThemeText_2=
-OS_DrawThemeText_3=
-OS_DrawThemeText_4=
-OS_DrawThemeText_5=
-OS_DrawThemeText_6=
-OS_DrawThemeText_7=
-OS_DrawThemeText_8=
-
-OS_Ellipse=
-OS_Ellipse_0=cast=(HDC)
-OS_Ellipse_1=
-OS_Ellipse_2=
-OS_Ellipse_3=
-OS_Ellipse_4=
-
-OS_EnableMenuItem=
-OS_EnableMenuItem_0=cast=(HMENU)
-OS_EnableMenuItem_1=
-OS_EnableMenuItem_2=
-
-OS_EnableScrollBar=
-OS_EnableScrollBar_0=cast=(HWND)
-OS_EnableScrollBar_1=
-OS_EnableScrollBar_2=
-
-OS_EnableWindow=
-OS_EnableWindow_0=cast=(HWND)
-OS_EnableWindow_1=
-
-OS_EndDeferWindowPos=
-OS_EndDeferWindowPos_0=cast=(HDWP)
-
-OS_EndDoc=
-OS_EndDoc_0=cast=(HDC)
-
-OS_EndPage=
-OS_EndPage_0=cast=(HDC)
-
-OS_EndPaint=
-OS_EndPaint_0=cast=(HWND)
-OS_EndPaint_1=
-
-OS_EndPath=
-OS_EndPath_0=cast=(HDC)
-
-OS_EnumDisplayMonitors=flags=dynamic
-OS_EnumDisplayMonitors_0=cast=(HDC)
-OS_EnumDisplayMonitors_1=cast=(LPCRECT)
-OS_EnumDisplayMonitors_2=cast=(MONITORENUMPROC)
-OS_EnumDisplayMonitors_3=cast=(LPARAM)
-
-OS_EnumFontFamiliesA=
-OS_EnumFontFamiliesA_0=cast=(HDC)
-OS_EnumFontFamiliesA_1=cast=(LPSTR)
-OS_EnumFontFamiliesA_2=cast=(FONTENUMPROC)
-OS_EnumFontFamiliesA_3=cast=(LPARAM)
-
-OS_EnumFontFamiliesExA=
-OS_EnumFontFamiliesExA_0=cast=HDC
-OS_EnumFontFamiliesExA_1=cast=LPLOGFONTA
-OS_EnumFontFamiliesExA_2=cast=(FONTENUMPROCA)
-OS_EnumFontFamiliesExA_3=cast=(LPARAM)
-OS_EnumFontFamiliesExA_4=
-
-OS_EnumFontFamiliesExW=
-OS_EnumFontFamiliesExW_0=cast=HDC
-OS_EnumFontFamiliesExW_1=cast=LPLOGFONTW
-OS_EnumFontFamiliesExW_2=cast=FONTENUMPROCW
-OS_EnumFontFamiliesExW_3=cast=LPARAM
-OS_EnumFontFamiliesExW_4=
-
-OS_EnumFontFamiliesW=
-OS_EnumFontFamiliesW_0=cast=(HDC)
-OS_EnumFontFamiliesW_1=cast=(LPCWSTR)
-OS_EnumFontFamiliesW_2=cast=(FONTENUMPROCW)
-OS_EnumFontFamiliesW_3=cast=(LPARAM)
-
-OS_EnumSystemLanguageGroupsA=flags=dynamic
-OS_EnumSystemLanguageGroupsA_0=cast=(LANGUAGEGROUP_ENUMPROCA)
-OS_EnumSystemLanguageGroupsA_1=
-OS_EnumSystemLanguageGroupsA_2=cast=(LONG_PTR)
-
-OS_EnumSystemLanguageGroupsW=flags=dynamic
-OS_EnumSystemLanguageGroupsW_0=cast=(LANGUAGEGROUP_ENUMPROCW)
-OS_EnumSystemLanguageGroupsW_1=
-OS_EnumSystemLanguageGroupsW_2=cast=(LONG_PTR)
-
-OS_EnumSystemLocalesA=
-OS_EnumSystemLocalesA_0=cast=(LOCALE_ENUMPROCA)
-OS_EnumSystemLocalesA_1=
-
-OS_EnumSystemLocalesW=
-OS_EnumSystemLocalesW_0=cast=(LOCALE_ENUMPROCW)
-OS_EnumSystemLocalesW_1=
-
-OS_EqualRect=
-OS_EqualRect_0=cast=(CONST RECT *),flags=no_out
-OS_EqualRect_1=cast=(CONST RECT *),flags=no_out
-
-OS_EqualRgn=
-OS_EqualRgn_0=cast=(HRGN)
-OS_EqualRgn_1=cast=(HRGN)
-
-OS_ExcludeClipRect=
-OS_ExcludeClipRect_0=cast=HDC
-OS_ExcludeClipRect_1=
-OS_ExcludeClipRect_2=
-OS_ExcludeClipRect_3=
-OS_ExcludeClipRect_4=
-
-OS_ExpandEnvironmentStringsA=
-OS_ExpandEnvironmentStringsA_0=
-OS_ExpandEnvironmentStringsA_1=
-OS_ExpandEnvironmentStringsA_2=
-
-OS_ExpandEnvironmentStringsW=
-OS_ExpandEnvironmentStringsW_0=
-OS_ExpandEnvironmentStringsW_1=
-OS_ExpandEnvironmentStringsW_2=
-
-OS_ExtCreatePen=
-OS_ExtCreatePen_0=
-OS_ExtCreatePen_1=
-OS_ExtCreatePen_2=cast=CONST LOGBRUSH *
-OS_ExtCreatePen_3=
-OS_ExtCreatePen_4=cast=CONST DWORD *
-
-OS_ExtCreateRegion=
-OS_ExtCreateRegion_0=cast=XFORM *
-OS_ExtCreateRegion_1=
-OS_ExtCreateRegion_2=cast=CONST RGNDATA *
-
-OS_ExtTextOutA=
-OS_ExtTextOutA_0=cast=(HDC)
-OS_ExtTextOutA_1=
-OS_ExtTextOutA_2=
-OS_ExtTextOutA_3=
-OS_ExtTextOutA_4=flags=no_out
-OS_ExtTextOutA_5=cast=(LPSTR),flags=no_out critical
-OS_ExtTextOutA_6=
-OS_ExtTextOutA_7=cast=(CONST INT *),flags=no_out critical
-
-OS_ExtTextOutW=
-OS_ExtTextOutW_0=cast=(HDC)
-OS_ExtTextOutW_1=
-OS_ExtTextOutW_2=
-OS_ExtTextOutW_3=
-OS_ExtTextOutW_4=flags=no_out
-OS_ExtTextOutW_5=cast=(LPWSTR),flags=no_out critical
-OS_ExtTextOutW_6=
-OS_ExtTextOutW_7=cast=(CONST INT *),flags=no_out critical
-
-OS_ExtractIconExA=
-OS_ExtractIconExA_0=cast=(LPSTR)
-OS_ExtractIconExA_1=
-OS_ExtractIconExA_2=cast=(HICON FAR *)
-OS_ExtractIconExA_3=cast=(HICON FAR *)
-OS_ExtractIconExA_4=
-
-OS_ExtractIconExW=
-OS_ExtractIconExW_0=cast=(LPWSTR)
-OS_ExtractIconExW_1=
-OS_ExtractIconExW_2=cast=(HICON FAR *)
-OS_ExtractIconExW_3=cast=(HICON FAR *)
-OS_ExtractIconExW_4=
-
-OS_FillPath=
-OS_FillPath_0=cast=(HDC)
-
-OS_FillRect=
-OS_FillRect_0=cast=(HDC)
-OS_FillRect_1=flags=no_out
-OS_FillRect_2=cast=(HBRUSH)
-
-OS_FindWindowA=
-OS_FindWindowA_0=cast=(LPSTR)
-OS_FindWindowA_1=cast=(LPSTR)
-
-OS_FindWindowW=
-OS_FindWindowW_0=cast=(LPWSTR)
-OS_FindWindowW_1=cast=(LPWSTR)
-
-OS_FormatMessageA=
-OS_FormatMessageA_0=
-OS_FormatMessageA_1=cast=LPCVOID
-OS_FormatMessageA_2=
-OS_FormatMessageA_3=
-OS_FormatMessageA_4=cast=LPSTR
-OS_FormatMessageA_5=
-OS_FormatMessageA_6=cast=va_list*
-
-OS_FormatMessageW=
-OS_FormatMessageW_0=
-OS_FormatMessageW_1=cast=LPCVOID
-OS_FormatMessageW_2=
-OS_FormatMessageW_3=
-OS_FormatMessageW_4=cast=LPWSTR
-OS_FormatMessageW_5=
-OS_FormatMessageW_6=cast=va_list*
-
-OS_FreeLibrary=
-OS_FreeLibrary_0=cast=(HMODULE)
-
-OS_GdiSetBatchLimit=
-OS_GdiSetBatchLimit_0=cast=DWORD
-
-OS_GetACP=
-
-OS_GetActiveWindow=
-
-OS_GetBkColor=
-OS_GetBkColor_0=cast=(HDC)
-
-OS_GetCapture=
-
-OS_GetCaretPos=
-OS_GetCaretPos_0=
-
-OS_GetCharABCWidthsA=
-OS_GetCharABCWidthsA_0=cast=(HDC)
-OS_GetCharABCWidthsA_1=
-OS_GetCharABCWidthsA_2=
-OS_GetCharABCWidthsA_3=cast=(LPABC),flags=no_in critical
-
-OS_GetCharABCWidthsW=
-OS_GetCharABCWidthsW_0=cast=(HDC)
-OS_GetCharABCWidthsW_1=
-OS_GetCharABCWidthsW_2=
-OS_GetCharABCWidthsW_3=cast=(LPABC),flags=no_in critical
-
-OS_GetCharWidthA=
-OS_GetCharWidthA_0=cast=(HDC)
-OS_GetCharWidthA_1=
-OS_GetCharWidthA_2=
-OS_GetCharWidthA_3=cast=(LPINT),flags=no_in critical
-
-OS_GetCharWidthW=
-OS_GetCharWidthW_0=cast=(HDC)
-OS_GetCharWidthW_1=
-OS_GetCharWidthW_2=
-OS_GetCharWidthW_3=cast=(LPINT),flags=no_in critical
-
-OS_GetCharacterPlacementA=
-OS_GetCharacterPlacementA_0=cast=(HDC)
-OS_GetCharacterPlacementA_1=cast=(LPSTR),flags=no_out critical
-OS_GetCharacterPlacementA_2=
-OS_GetCharacterPlacementA_3=
-OS_GetCharacterPlacementA_4=
-OS_GetCharacterPlacementA_5=
-
-OS_GetCharacterPlacementW=
-OS_GetCharacterPlacementW_0=cast=(HDC)
-OS_GetCharacterPlacementW_1=cast=(LPWSTR),flags=no_out critical
-OS_GetCharacterPlacementW_2=
-OS_GetCharacterPlacementW_3=
-OS_GetCharacterPlacementW_4=cast=(LPGCP_RESULTSW)
-OS_GetCharacterPlacementW_5=
-
-OS_GetClassInfoA=
-OS_GetClassInfoA_0=cast=(HINSTANCE)
-OS_GetClassInfoA_1=cast=(LPSTR)
-OS_GetClassInfoA_2=
-
-OS_GetClassInfoW=
-OS_GetClassInfoW_0=cast=(HINSTANCE)
-OS_GetClassInfoW_1=cast=(LPWSTR)
-OS_GetClassInfoW_2=cast=(LPWNDCLASSW)
-
-OS_GetClassNameA=
-OS_GetClassNameA_0=cast=HWND
-OS_GetClassNameA_1=
-OS_GetClassNameA_2=
-
-OS_GetClassNameW=
-OS_GetClassNameW_0=cast=HWND
-OS_GetClassNameW_1=
-OS_GetClassNameW_2=
-
-OS_GetClientRect=
-OS_GetClientRect_0=cast=(HWND)
-OS_GetClientRect_1=
-
-OS_GetClipBox=
-OS_GetClipBox_0=cast=(HDC)
-OS_GetClipBox_1=
-
-OS_GetClipRgn=
-OS_GetClipRgn_0=cast=(HDC)
-OS_GetClipRgn_1=cast=(HRGN)
-
-OS_GetClipboardData=
-OS_GetClipboardData_0=
-
-OS_GetClipboardFormatNameA=
-OS_GetClipboardFormatNameA_0=
-OS_GetClipboardFormatNameA_1=
-OS_GetClipboardFormatNameA_2=
-
-OS_GetClipboardFormatNameW=
-OS_GetClipboardFormatNameW_0=
-OS_GetClipboardFormatNameW_1=cast=(LPWSTR)
-OS_GetClipboardFormatNameW_2=
-
-OS_GetComboBoxInfo=flags=dynamic
-OS_GetComboBoxInfo_0=cast=(HWND)
-OS_GetComboBoxInfo_1=
-
-OS_GetCurrentObject=
-OS_GetCurrentObject_0=cast=(HDC)
-OS_GetCurrentObject_1=
-
-OS_GetCurrentProcessId=
-
-OS_GetCurrentThreadId=
-
-OS_GetCursor=
-
-OS_GetCursorPos=
-OS_GetCursorPos_0=
-
-OS_GetDC=
-OS_GetDC_0=cast=(HWND)
-
-OS_GetDCEx=
-OS_GetDCEx_0=cast=(HWND)
-OS_GetDCEx_1=cast=(HRGN)
-OS_GetDCEx_2=
-
-OS_GetDIBColorTable=
-OS_GetDIBColorTable_0=cast=(HDC)
-OS_GetDIBColorTable_1=
-OS_GetDIBColorTable_2=
-OS_GetDIBColorTable_3=cast=(RGBQUAD *),flags=no_in critical
-
-OS_GetDIBits=
-OS_GetDIBits_0=cast=(HDC)
-OS_GetDIBits_1=cast=(HBITMAP)
-OS_GetDIBits_2=
-OS_GetDIBits_3=
-OS_GetDIBits_4=cast=(LPVOID)
-OS_GetDIBits_5=cast=(LPBITMAPINFO),flags=critical
-OS_GetDIBits_6=
-
-OS_GetDesktopWindow=
-
-OS_GetDeviceCaps=
-OS_GetDeviceCaps_0=cast=(HDC)
-OS_GetDeviceCaps_1=
-
-OS_GetDialogBaseUnits=
-
-OS_GetDlgItem=
-OS_GetDlgItem_0=cast=(HWND)
-OS_GetDlgItem_1=
-
-OS_GetDoubleClickTime=
-
-OS_GetFocus=
-
-OS_GetFontLanguageInfo=
-OS_GetFontLanguageInfo_0=cast=(HDC)
-
-OS_GetForegroundWindow=
-
-OS_GetGUIThreadInfo=
-OS_GetGUIThreadInfo_0=cast=(DWORD)
-OS_GetGUIThreadInfo_1=cast=(LPGUITHREADINFO)
-
-OS_GetIconInfo=
-OS_GetIconInfo_0=cast=(HICON)
-OS_GetIconInfo_1=flags=no_in
-
-OS_GetKeyNameTextA=
-OS_GetKeyNameTextA_0=
-OS_GetKeyNameTextA_1=cast=(LPSTR)
-OS_GetKeyNameTextA_2=
-
-OS_GetKeyNameTextW=
-OS_GetKeyNameTextW_0=
-OS_GetKeyNameTextW_1=cast=(LPWSTR)
-OS_GetKeyNameTextW_2=
-
-OS_GetKeyState=
-OS_GetKeyState_0=
-
-OS_GetKeyboardLayout=
-OS_GetKeyboardLayout_0=
-
-OS_GetKeyboardLayoutList=
-OS_GetKeyboardLayoutList_0=
-OS_GetKeyboardLayoutList_1=cast=(HKL FAR *)
-
-OS_GetKeyboardState=
-OS_GetKeyboardState_0=cast=(PBYTE)
-
-OS_GetLastActivePopup=
-OS_GetLastActivePopup_0=cast=(HWND)
-
-OS_GetLastError=
-
-OS_GetLayout=flags=dynamic
-OS_GetLayout_0=cast=(HDC)
-
-OS_GetLibraryHandle=flags=no_gen
-
-OS_GetLocaleInfoA=
-OS_GetLocaleInfoA_0=
-OS_GetLocaleInfoA_1=
-OS_GetLocaleInfoA_2=cast=(LPSTR)
-OS_GetLocaleInfoA_3=
-
-OS_GetLocaleInfoW=
-OS_GetLocaleInfoW_0=
-OS_GetLocaleInfoW_1=
-OS_GetLocaleInfoW_2=cast=(LPWSTR)
-OS_GetLocaleInfoW_3=
-
-OS_GetMenu=
-OS_GetMenu_0=cast=(HWND)
-
-OS_GetMenuBarInfo=flags=dynamic
-OS_GetMenuBarInfo_0=
-OS_GetMenuBarInfo_1=
-OS_GetMenuBarInfo_2=
-OS_GetMenuBarInfo_3=
-
-OS_GetMenuDefaultItem=
-OS_GetMenuDefaultItem_0=cast=(HMENU)
-OS_GetMenuDefaultItem_1=
-OS_GetMenuDefaultItem_2=
-
-OS_GetMenuInfo=flags=dynamic
-OS_GetMenuInfo_0=cast=(HMENU)
-OS_GetMenuInfo_1=
-
-OS_GetMenuItemCount=
-OS_GetMenuItemCount_0=cast=(HMENU)
-
-OS_GetMenuItemInfoA=
-OS_GetMenuItemInfoA_0=cast=(HMENU)
-OS_GetMenuItemInfoA_1=
-OS_GetMenuItemInfoA_2=
-OS_GetMenuItemInfoA_3=
-
-OS_GetMenuItemInfoW=
-OS_GetMenuItemInfoW_0=cast=(HMENU)
-OS_GetMenuItemInfoW_1=
-OS_GetMenuItemInfoW_2=
-OS_GetMenuItemInfoW_3=cast=(LPMENUITEMINFOW)
-
-OS_GetMenuItemRect=
-OS_GetMenuItemRect_0=cast=(HWND)
-OS_GetMenuItemRect_1=cast=(HMENU)
-OS_GetMenuItemRect_2=
-OS_GetMenuItemRect_3=
-
-OS_GetMessageA=
-OS_GetMessageA_0=
-OS_GetMessageA_1=cast=(HWND)
-OS_GetMessageA_2=
-OS_GetMessageA_3=
-
-OS_GetMessagePos=
-
-OS_GetMessageTime=
-
-OS_GetMessageW=
-OS_GetMessageW_0=
-OS_GetMessageW_1=cast=(HWND)
-OS_GetMessageW_2=
-OS_GetMessageW_3=
-
-OS_GetMetaRgn=
-OS_GetMetaRgn_0=cast=HDC
-OS_GetMetaRgn_1=cast=HRGN
-
-OS_GetModuleFileNameA=
-OS_GetModuleFileNameA_0=cast=HMODULE
-OS_GetModuleFileNameA_1=cast=LPSTR
-OS_GetModuleFileNameA_2=
-
-OS_GetModuleFileNameW=
-OS_GetModuleFileNameW_0=cast=HMODULE
-OS_GetModuleFileNameW_1=cast=LPWSTR
-OS_GetModuleFileNameW_2=
-
-OS_GetModuleHandleA=
-OS_GetModuleHandleA_0=cast=(LPSTR)
-
-OS_GetModuleHandleW=
-OS_GetModuleHandleW_0=cast=(LPWSTR)
-
-OS_GetMonitorInfoA=flags=dynamic
-OS_GetMonitorInfoA_0=cast=(HMONITOR)
-OS_GetMonitorInfoA_1=cast=(LPMONITORINFO)
-
-OS_GetMonitorInfoW=flags=dynamic
-OS_GetMonitorInfoW_0=cast=(HMONITOR)
-OS_GetMonitorInfoW_1=cast=(LPMONITORINFO)
-
-OS_GetNearestPaletteIndex=
-OS_GetNearestPaletteIndex_0=cast=(HPALETTE)
-OS_GetNearestPaletteIndex_1=cast=(COLORREF)
-
-OS_GetObjectA__III=
-OS_GetObjectA__III_0=cast=(HGDIOBJ)
-OS_GetObjectA__III_1=
-OS_GetObjectA__III_2=cast=LPVOID,flags=no_in
-
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_BITMAP_2=
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_BITMAP_2_0=cast=(HGDIOBJ)
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_BITMAP_2_1=
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_BITMAP_2_2=flags=no_in
-
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_DIBSECTION_2=
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_DIBSECTION_2_0=cast=(HGDIOBJ)
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_DIBSECTION_2_1=
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_DIBSECTION_2_2=flags=no_in
-
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_EXTLOGPEN_2=
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_EXTLOGPEN_2_0=cast=(HGDIOBJ)
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_EXTLOGPEN_2_1=
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_EXTLOGPEN_2_2=flags=no_in
-
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_LOGBRUSH_2=
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_LOGBRUSH_2_0=cast=(HGDIOBJ)
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_LOGBRUSH_2_1=
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_LOGBRUSH_2_2=flags=no_in
-
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_LOGFONTA_2=
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_LOGFONTA_2_0=cast=(HGDIOBJ)
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_LOGFONTA_2_1=
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_LOGFONTA_2_2=flags=no_in
-
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_LOGPEN_2=
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_LOGPEN_2_0=cast=(HGDIOBJ)
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_LOGPEN_2_1=
-OS_GetObjectA__IILorg_eclipse_swt_internal_win32_LOGPEN_2_2=flags=no_in
-
-OS_GetObjectW__III=
-OS_GetObjectW__III_0=cast=(HGDIOBJ)
-OS_GetObjectW__III_1=
-OS_GetObjectW__III_2=cast=LPVOID,flags=no_in
-
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_BITMAP_2=
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_BITMAP_2_0=cast=(HGDIOBJ)
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_BITMAP_2_1=
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_BITMAP_2_2=flags=no_in
-
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_DIBSECTION_2=
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_DIBSECTION_2_0=cast=(HGDIOBJ)
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_DIBSECTION_2_1=
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_DIBSECTION_2_2=flags=no_in
-
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_EXTLOGPEN_2=
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_EXTLOGPEN_2_0=cast=(HGDIOBJ)
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_EXTLOGPEN_2_1=
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_EXTLOGPEN_2_2=flags=no_in
-
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_LOGBRUSH_2=
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_LOGBRUSH_2_0=cast=(HGDIOBJ)
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_LOGBRUSH_2_1=
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_LOGBRUSH_2_2=flags=no_in
-
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_LOGFONTW_2=
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_LOGFONTW_2_0=cast=(HGDIOBJ)
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_LOGFONTW_2_1=
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_LOGFONTW_2_2=flags=no_in
-
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_LOGPEN_2=
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_LOGPEN_2_0=cast=(HGDIOBJ)
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_LOGPEN_2_1=
-OS_GetObjectW__IILorg_eclipse_swt_internal_win32_LOGPEN_2_2=flags=no_in
-
-OS_GetOpenFileNameA=
-OS_GetOpenFileNameA_0=
-
-OS_GetOpenFileNameW=
-OS_GetOpenFileNameW_0=cast=(LPOPENFILENAMEW)
-
-OS_GetPaletteEntries=
-OS_GetPaletteEntries_0=cast=(HPALETTE)
-OS_GetPaletteEntries_1=
-OS_GetPaletteEntries_2=
-OS_GetPaletteEntries_3=cast=(LPPALETTEENTRY),flags=no_in critical
-
-OS_GetParent=
-OS_GetParent_0=cast=(HWND)
-
-OS_GetPixel=
-OS_GetPixel_0=cast=(HDC)
-OS_GetPixel_1=
-OS_GetPixel_2=
-
-OS_GetPolyFillMode=
-OS_GetPolyFillMode_0=cast=HDC
-
-OS_GetProcAddress=
-OS_GetProcAddress_0=cast=(HMODULE)
-OS_GetProcAddress_1=cast=(LPCTSTR)
-
-OS_GetProcessHeap=
-
-OS_GetProfileStringA=
-OS_GetProfileStringA_0=cast=(LPSTR)
-OS_GetProfileStringA_1=cast=(LPSTR)
-OS_GetProfileStringA_2=cast=(LPSTR)
-OS_GetProfileStringA_3=cast=(LPSTR)
-OS_GetProfileStringA_4=
-
-OS_GetProfileStringW=
-OS_GetProfileStringW_0=cast=(LPWSTR)
-OS_GetProfileStringW_1=cast=(LPWSTR)
-OS_GetProfileStringW_2=cast=(LPWSTR)
-OS_GetProfileStringW_3=cast=(LPWSTR)
-OS_GetProfileStringW_4=
-
-OS_GetPropA=
-OS_GetPropA_0=cast=HWND
-OS_GetPropA_1=cast=LPCTSTR
-
-OS_GetPropW=
-OS_GetPropW_0=cast=HWND
-OS_GetPropW_1=cast=(LPCWSTR)
-
-OS_GetROP2=
-OS_GetROP2_0=cast=(HDC)
-
-OS_GetRandomRgn=
-OS_GetRandomRgn_0=cast=HDC
-OS_GetRandomRgn_1=cast=HRGN
-OS_GetRandomRgn_2=
-
-OS_GetRegionData=
-OS_GetRegionData_0=cast=(HRGN)
-OS_GetRegionData_1=
-OS_GetRegionData_2=cast=(RGNDATA *),flags=no_in critical
-
-OS_GetRgnBox=
-OS_GetRgnBox_0=cast=(HRGN)
-OS_GetRgnBox_1=flags=no_in
-
-OS_GetSaveFileNameA=
-OS_GetSaveFileNameA_0=
-
-OS_GetSaveFileNameW=
-OS_GetSaveFileNameW_0=cast=(LPOPENFILENAMEW)
-
-OS_GetScrollInfo=
-OS_GetScrollInfo_0=cast=(HWND)
-OS_GetScrollInfo_1=
-OS_GetScrollInfo_2=
-
-OS_GetStockObject=
-OS_GetStockObject_0=
-
-OS_GetSysColor=
-OS_GetSysColor_0=
-
-OS_GetSysColorBrush=
-OS_GetSysColorBrush_0=
-
-OS_GetSystemDefaultUILanguage=flags=dynamic
-
-OS_GetSystemMenu=
-OS_GetSystemMenu_0=cast=(HWND)
-OS_GetSystemMenu_1=
-
-OS_GetSystemMetrics=
-OS_GetSystemMetrics_0=
-
-OS_GetSystemPaletteEntries=
-OS_GetSystemPaletteEntries_0=cast=(HDC)
-OS_GetSystemPaletteEntries_1=cast=(UINT)
-OS_GetSystemPaletteEntries_2=cast=(UINT)
-OS_GetSystemPaletteEntries_3=cast=(LPPALETTEENTRY),flags=no_in critical
-
-OS_GetTextCharset=
-OS_GetTextCharset_0=cast=(HDC)
-
-OS_GetTextColor=
-OS_GetTextColor_0=cast=(HDC)
-
-OS_GetTextExtentPoint32A=
-OS_GetTextExtentPoint32A_0=cast=(HDC)
-OS_GetTextExtentPoint32A_1=cast=(LPSTR),flags=no_out critical
-OS_GetTextExtentPoint32A_2=
-OS_GetTextExtentPoint32A_3=flags=no_in
-
-OS_GetTextExtentPoint32W=
-OS_GetTextExtentPoint32W_0=cast=(HDC)
-OS_GetTextExtentPoint32W_1=cast=(LPWSTR),flags=no_out critical
-OS_GetTextExtentPoint32W_2=
-OS_GetTextExtentPoint32W_3=flags=no_in
-
-OS_GetTextMetricsA=
-OS_GetTextMetricsA_0=cast=(HDC)
-OS_GetTextMetricsA_1=flags=no_in
-
-OS_GetTextMetricsW=
-OS_GetTextMetricsW_0=cast=(HDC)
-OS_GetTextMetricsW_1=flags=no_in
-
-OS_GetThemeBackgroundContentRect=flags=dynamic
-OS_GetThemeBackgroundContentRect_0=
-OS_GetThemeBackgroundContentRect_1=
-OS_GetThemeBackgroundContentRect_2=
-OS_GetThemeBackgroundContentRect_3=
-OS_GetThemeBackgroundContentRect_4=
-OS_GetThemeBackgroundContentRect_5=
-
-OS_GetThemeBackgroundExtent=flags=dynamic
-OS_GetThemeBackgroundExtent_0=
-OS_GetThemeBackgroundExtent_1=
-OS_GetThemeBackgroundExtent_2=
-OS_GetThemeBackgroundExtent_3=
-OS_GetThemeBackgroundExtent_4=flags=no_out
-OS_GetThemeBackgroundExtent_5=
-
-OS_GetThemeColor=flags=dynamic
-OS_GetThemeColor_0=
-OS_GetThemeColor_1=
-OS_GetThemeColor_2=
-OS_GetThemeColor_3=
-OS_GetThemeColor_4=
-
-OS_GetThemeInt=flags=dynamic
-OS_GetThemeInt_0=
-OS_GetThemeInt_1=
-OS_GetThemeInt_2=
-OS_GetThemeInt_3=
-OS_GetThemeInt_4=
-
-OS_GetThemeMargins=flags=dynamic
-OS_GetThemeMargins_0=
-OS_GetThemeMargins_1=
-OS_GetThemeMargins_2=
-OS_GetThemeMargins_3=
-OS_GetThemeMargins_4=
-OS_GetThemeMargins_5=
-OS_GetThemeMargins_6=
-
-OS_GetThemeMetric=flags=dynamic
-OS_GetThemeMetric_0=
-OS_GetThemeMetric_1=
-OS_GetThemeMetric_2=
-OS_GetThemeMetric_3=
-OS_GetThemeMetric_4=
-OS_GetThemeMetric_5=
-
-OS_GetThemePartSize=flags=dynamic
-OS_GetThemePartSize_0=
-OS_GetThemePartSize_1=
-OS_GetThemePartSize_2=
-OS_GetThemePartSize_3=
-OS_GetThemePartSize_4=
-OS_GetThemePartSize_5=
-OS_GetThemePartSize_6=
-
-OS_GetThemeRect=flags=dynamic
-OS_GetThemeRect_0=
-OS_GetThemeRect_1=
-OS_GetThemeRect_2=
-OS_GetThemeRect_3=
-OS_GetThemeRect_4=
-
-OS_GetThemeSysSize=flags=dynamic
-OS_GetThemeSysSize_0=
-OS_GetThemeSysSize_1=
-
-OS_GetThemeTextExtent=flags=dynamic
-OS_GetThemeTextExtent_0=
-OS_GetThemeTextExtent_1=
-OS_GetThemeTextExtent_2=
-OS_GetThemeTextExtent_3=
-OS_GetThemeTextExtent_4=
-OS_GetThemeTextExtent_5=
-OS_GetThemeTextExtent_6=
-OS_GetThemeTextExtent_7=
-OS_GetThemeTextExtent_8=
-
-OS_GetTickCount=
-
-OS_GetUpdateRect=
-OS_GetUpdateRect_0=cast=(HWND)
-OS_GetUpdateRect_1=cast=(LPRECT)
-OS_GetUpdateRect_2=cast=(BOOL)
-
-OS_GetUpdateRgn=
-OS_GetUpdateRgn_0=cast=(HWND)
-OS_GetUpdateRgn_1=cast=(HRGN)
-OS_GetUpdateRgn_2=
-
-OS_GetVersionExA=
-OS_GetVersionExA_0=
-
-OS_GetVersionExW=
-OS_GetVersionExW_0=
-
-OS_GetWindow=
-OS_GetWindow_0=cast=(HWND)
-OS_GetWindow_1=
-
-OS_GetWindowDC=
-OS_GetWindowDC_0=cast=HWND
-
-OS_GetWindowLongA=
-OS_GetWindowLongA_0=cast=(HWND)
-OS_GetWindowLongA_1=
-
-OS_GetWindowLongW=
-OS_GetWindowLongW_0=cast=(HWND)
-OS_GetWindowLongW_1=
-
-OS_GetWindowOrgEx=
-OS_GetWindowOrgEx_0=cast=HDC
-OS_GetWindowOrgEx_1=
-
-OS_GetWindowPlacement=
-OS_GetWindowPlacement_0=cast=(HWND)
-OS_GetWindowPlacement_1=
-
-OS_GetWindowRect=
-OS_GetWindowRect_0=cast=(HWND)
-OS_GetWindowRect_1=
-
-OS_GetWindowRgn=
-OS_GetWindowRgn_0=cast=(HWND)
-OS_GetWindowRgn_1=cast=(HRGN)
-
-OS_GetWindowTextA=
-OS_GetWindowTextA_0=cast=(HWND)
-OS_GetWindowTextA_1=cast=(LPSTR)
-OS_GetWindowTextA_2=
-
-OS_GetWindowTextLengthA=
-OS_GetWindowTextLengthA_0=cast=(HWND)
-
-OS_GetWindowTextLengthW=
-OS_GetWindowTextLengthW_0=cast=(HWND)
-
-OS_GetWindowTextW=
-OS_GetWindowTextW_0=cast=(HWND)
-OS_GetWindowTextW_1=cast=(LPWSTR)
-OS_GetWindowTextW_2=
-
-OS_GetWindowThreadProcessId=
-OS_GetWindowThreadProcessId_0=cast=(HWND)
-OS_GetWindowThreadProcessId_1=cast=(LPDWORD)
-
-OS_GetWorldTransform=
-OS_GetWorldTransform_0=cast=HDC
-OS_GetWorldTransform_1=cast=LPXFORM
-
-OS_GlobalAddAtomA=
-OS_GlobalAddAtomA_0=cast=LPCTSTR
-
-OS_GlobalAddAtomW=
-OS_GlobalAddAtomW_0=cast=(LPCWSTR)
-
-OS_GlobalAlloc=
-OS_GlobalAlloc_0=
-OS_GlobalAlloc_1=
-
-OS_GlobalFree=
-OS_GlobalFree_0=cast=(HANDLE)
-
-OS_GlobalLock=
-OS_GlobalLock_0=cast=(HANDLE)
-
-OS_GlobalSize=
-OS_GlobalSize_0=cast=(HANDLE)
-
-OS_GlobalUnlock=
-OS_GlobalUnlock_0=cast=(HANDLE)
-
-OS_GradientFill=flags=dynamic
-OS_GradientFill_0=cast=(HDC)
-OS_GradientFill_1=cast=(PTRIVERTEX)
-OS_GradientFill_2=cast=(ULONG)
-OS_GradientFill_3=cast=(PVOID)
-OS_GradientFill_4=cast=(ULONG)
-OS_GradientFill_5=cast=(ULONG)
-
-OS_HeapAlloc=
-OS_HeapAlloc_0=cast=(HANDLE)
-OS_HeapAlloc_1=
-OS_HeapAlloc_2=
-
-OS_HeapFree=
-OS_HeapFree_0=cast=(HANDLE)
-OS_HeapFree_1=
-OS_HeapFree_2=cast=(LPVOID)
-
-OS_HideCaret=
-OS_HideCaret_0=cast=(HWND)
-
-OS_HitTestThemeBackground=flags=dynamic
-OS_HitTestThemeBackground_0=
-OS_HitTestThemeBackground_1=
-OS_HitTestThemeBackground_2=
-OS_HitTestThemeBackground_3=
-OS_HitTestThemeBackground_4=
-OS_HitTestThemeBackground_5=
-OS_HitTestThemeBackground_6=
-OS_HitTestThemeBackground_7=flags=struct
-OS_HitTestThemeBackground_8=
-
-OS_IIDFromString=
-OS_IIDFromString_0=cast=LPOLESTR
-OS_IIDFromString_1=cast=LPIID
-
-OS_ImageList_Add=
-OS_ImageList_Add_0=cast=(HIMAGELIST)
-OS_ImageList_Add_1=cast=(HBITMAP)
-OS_ImageList_Add_2=cast=(HBITMAP)
-
-OS_ImageList_AddMasked=
-OS_ImageList_AddMasked_0=cast=(HIMAGELIST)
-OS_ImageList_AddMasked_1=cast=(HBITMAP)
-OS_ImageList_AddMasked_2=cast=(COLORREF)
-
-OS_ImageList_BeginDrag=
-OS_ImageList_BeginDrag_0=cast=(HIMAGELIST)
-OS_ImageList_BeginDrag_1=
-OS_ImageList_BeginDrag_2=
-OS_ImageList_BeginDrag_3=
-
-OS_ImageList_Create=
-OS_ImageList_Create_0=
-OS_ImageList_Create_1=
-OS_ImageList_Create_2=
-OS_ImageList_Create_3=
-OS_ImageList_Create_4=
-
-OS_ImageList_Destroy=
-OS_ImageList_Destroy_0=cast=(HIMAGELIST)
-
-OS_ImageList_DragEnter=
-OS_ImageList_DragEnter_0=cast=(HWND)
-OS_ImageList_DragEnter_1=
-OS_ImageList_DragEnter_2=
-
-OS_ImageList_DragLeave=
-OS_ImageList_DragLeave_0=cast=(HWND)
-
-OS_ImageList_DragMove=
-OS_ImageList_DragMove_0=
-OS_ImageList_DragMove_1=
-
-OS_ImageList_DragShowNolock=
-OS_ImageList_DragShowNolock_0=cast=(BOOL)
-
-OS_ImageList_Draw=
-OS_ImageList_Draw_0=cast=(HIMAGELIST)
-OS_ImageList_Draw_1=
-OS_ImageList_Draw_2=cast=(HDC)
-OS_ImageList_Draw_3=
-OS_ImageList_Draw_4=
-OS_ImageList_Draw_5=cast=(UINT)
-
-OS_ImageList_EndDrag=
-
-OS_ImageList_GetDragImage=
-OS_ImageList_GetDragImage_0=cast=(POINT *)
-OS_ImageList_GetDragImage_1=cast=(POINT *)
-
-OS_ImageList_GetIcon=
-OS_ImageList_GetIcon_0=cast=(HIMAGELIST)
-OS_ImageList_GetIcon_1=
-OS_ImageList_GetIcon_2=
-
-OS_ImageList_GetIconSize=
-OS_ImageList_GetIconSize_0=cast=(HIMAGELIST)
-OS_ImageList_GetIconSize_1=
-OS_ImageList_GetIconSize_2=
-
-OS_ImageList_GetImageCount=
-OS_ImageList_GetImageCount_0=cast=(HIMAGELIST)
-
-OS_ImageList_Remove=
-OS_ImageList_Remove_0=cast=(HIMAGELIST)
-OS_ImageList_Remove_1=
-
-OS_ImageList_Replace=
-OS_ImageList_Replace_0=cast=(HIMAGELIST)
-OS_ImageList_Replace_1=
-OS_ImageList_Replace_2=cast=(HBITMAP)
-OS_ImageList_Replace_3=cast=(HBITMAP)
-
-OS_ImageList_ReplaceIcon=
-OS_ImageList_ReplaceIcon_0=cast=(HIMAGELIST)
-OS_ImageList_ReplaceIcon_1=
-OS_ImageList_ReplaceIcon_2=cast=(HICON)
-
-OS_ImageList_SetIconSize=
-OS_ImageList_SetIconSize_0=cast=(HIMAGELIST)
-OS_ImageList_SetIconSize_1=
-OS_ImageList_SetIconSize_2=
-
-OS_ImmAssociateContext=
-OS_ImmAssociateContext_0=cast=(HWND)
-OS_ImmAssociateContext_1=cast=(HIMC)
-
-OS_ImmCreateContext=
-
-OS_ImmDestroyContext=
-OS_ImmDestroyContext_0=cast=(HIMC)
-
-OS_ImmDisableTextFrameService=flags=dynamic
-OS_ImmDisableTextFrameService_0=
-
-OS_ImmGetCompositionFontA=
-OS_ImmGetCompositionFontA_0=cast=(HIMC)
-OS_ImmGetCompositionFontA_1=
-
-OS_ImmGetCompositionFontW=
-OS_ImmGetCompositionFontW_0=cast=(HIMC)
-OS_ImmGetCompositionFontW_1=
-
-OS_ImmGetCompositionStringA=
-OS_ImmGetCompositionStringA_0=cast=(HIMC)
-OS_ImmGetCompositionStringA_1=
-OS_ImmGetCompositionStringA_2=cast=(LPSTR)
-OS_ImmGetCompositionStringA_3=
-
-OS_ImmGetCompositionStringW=
-OS_ImmGetCompositionStringW_0=cast=(HIMC)
-OS_ImmGetCompositionStringW_1=
-OS_ImmGetCompositionStringW_2=cast=(LPWSTR)
-OS_ImmGetCompositionStringW_3=
-
-OS_ImmGetContext=
-OS_ImmGetContext_0=cast=(HWND)
-
-OS_ImmGetConversionStatus=
-OS_ImmGetConversionStatus_0=cast=(HIMC)
-OS_ImmGetConversionStatus_1=
-OS_ImmGetConversionStatus_2=
-
-OS_ImmGetDefaultIMEWnd=
-OS_ImmGetDefaultIMEWnd_0=cast=(HWND)
-
-OS_ImmGetOpenStatus=
-OS_ImmGetOpenStatus_0=cast=(HIMC)
-
-OS_ImmReleaseContext=
-OS_ImmReleaseContext_0=cast=(HWND)
-OS_ImmReleaseContext_1=cast=(HIMC)
-
-OS_ImmSetCompositionFontA=
-OS_ImmSetCompositionFontA_0=cast=(HIMC)
-OS_ImmSetCompositionFontA_1=
-
-OS_ImmSetCompositionFontW=
-OS_ImmSetCompositionFontW_0=cast=(HIMC)
-OS_ImmSetCompositionFontW_1=
-
-OS_ImmSetCompositionWindow=
-OS_ImmSetCompositionWindow_0=cast=(HIMC)
-OS_ImmSetCompositionWindow_1=
-
-OS_ImmSetConversionStatus=
-OS_ImmSetConversionStatus_0=cast=(HIMC)
-OS_ImmSetConversionStatus_1=
-OS_ImmSetConversionStatus_2=
-
-OS_ImmSetOpenStatus=
-OS_ImmSetOpenStatus_0=cast=(HIMC)
-OS_ImmSetOpenStatus_1=
-
-OS_InitCommonControls=
-
-OS_InitCommonControlsEx=
-OS_InitCommonControlsEx_0=
-
-OS_InsertMenuA=
-OS_InsertMenuA_0=cast=(HMENU)
-OS_InsertMenuA_1=
-OS_InsertMenuA_2=
-OS_InsertMenuA_3=
-OS_InsertMenuA_4=
-
-OS_InsertMenuItemA=
-OS_InsertMenuItemA_0=cast=(HMENU)
-OS_InsertMenuItemA_1=
-OS_InsertMenuItemA_2=
-OS_InsertMenuItemA_3=
-
-OS_InsertMenuItemW=
-OS_InsertMenuItemW_0=cast=(HMENU)
-OS_InsertMenuItemW_1=
-OS_InsertMenuItemW_2=
-OS_InsertMenuItemW_3=cast=(LPMENUITEMINFOW)
-
-OS_InsertMenuW=
-OS_InsertMenuW_0=cast=(HMENU)
-OS_InsertMenuW_1=
-OS_InsertMenuW_2=
-OS_InsertMenuW_3=
-OS_InsertMenuW_4=
-
-OS_InternetSetOption=
-OS_InternetSetOption_0=cast=(HINTERNET)
-OS_InternetSetOption_1=
-OS_InternetSetOption_2=cast=(LPVOID)
-OS_InternetSetOption_3=
-
-OS_IntersectClipRect=
-OS_IntersectClipRect_0=cast=HDC
-OS_IntersectClipRect_1=
-OS_IntersectClipRect_2=
-OS_IntersectClipRect_3=
-OS_IntersectClipRect_4=
-
-OS_IntersectRect=
-OS_IntersectRect_0=flags=no_in
-OS_IntersectRect_1=flags=no_out
-OS_IntersectRect_2=flags=no_out
-
-OS_InvalidateRect=
-OS_InvalidateRect_0=cast=(HWND)
-OS_InvalidateRect_1=
-OS_InvalidateRect_2=
-
-OS_InvalidateRgn=
-OS_InvalidateRgn_0=cast=(HWND)
-OS_InvalidateRgn_1=cast=(HRGN)
-OS_InvalidateRgn_2=
-
-OS_IsAppThemed=flags=dynamic
-
-OS_IsDBCSLeadByte=
-OS_IsDBCSLeadByte_0=
-
-OS_IsHungAppWindow=flags=dynamic
-OS_IsHungAppWindow_0=cast=HWND
-
-OS_IsIconic=
-OS_IsIconic_0=cast=(HWND)
-
-OS_IsPPC=flags=no_gen
-
-OS_IsSP=flags=no_gen
-
-OS_IsWindowEnabled=
-OS_IsWindowEnabled_0=cast=(HWND)
-
-OS_IsWindowVisible=
-OS_IsWindowVisible_0=cast=(HWND)
-
-OS_IsZoomed=
-OS_IsZoomed_0=cast=(HWND)
-
-OS_KillTimer=
-OS_KillTimer_0=cast=(HWND)
-OS_KillTimer_1=
-
-OS_LineTo=
-OS_LineTo_0=cast=(HDC)
-OS_LineTo_1=
-OS_LineTo_2=
-
-OS_LoadBitmapA=
-OS_LoadBitmapA_0=cast=(HINSTANCE)
-OS_LoadBitmapA_1=cast=(LPSTR)
-
-OS_LoadBitmapW=
-OS_LoadBitmapW_0=cast=(HINSTANCE)
-OS_LoadBitmapW_1=cast=(LPWSTR)
-
-OS_LoadCursorA=
-OS_LoadCursorA_0=cast=(HINSTANCE)
-OS_LoadCursorA_1=cast=(LPSTR)
-
-OS_LoadCursorW=
-OS_LoadCursorW_0=cast=(HINSTANCE)
-OS_LoadCursorW_1=cast=(LPWSTR)
-
-OS_LoadIconA=
-OS_LoadIconA_0=cast=(HINSTANCE)
-OS_LoadIconA_1=cast=(LPSTR)
-
-OS_LoadIconW=
-OS_LoadIconW_0=cast=(HINSTANCE)
-OS_LoadIconW_1=cast=(LPWSTR)
-
-OS_LoadImageA__IIIIII=
-OS_LoadImageA__IIIIII_0=cast=(HINSTANCE)
-OS_LoadImageA__IIIIII_1=cast=(LPSTR)
-OS_LoadImageA__IIIIII_2=
-OS_LoadImageA__IIIIII_3=
-OS_LoadImageA__IIIIII_4=
-OS_LoadImageA__IIIIII_5=
-
-OS_LoadImageA__I_3BIIII=
-OS_LoadImageA__I_3BIIII_0=cast=(HINSTANCE)
-OS_LoadImageA__I_3BIIII_1=cast=(LPSTR)
-OS_LoadImageA__I_3BIIII_2=
-OS_LoadImageA__I_3BIIII_3=
-OS_LoadImageA__I_3BIIII_4=
-OS_LoadImageA__I_3BIIII_5=
-
-OS_LoadImageW__IIIIII=
-OS_LoadImageW__IIIIII_0=cast=(HINSTANCE)
-OS_LoadImageW__IIIIII_1=cast=(LPWSTR)
-OS_LoadImageW__IIIIII_2=
-OS_LoadImageW__IIIIII_3=
-OS_LoadImageW__IIIIII_4=
-OS_LoadImageW__IIIIII_5=
-
-OS_LoadImageW__I_3CIIII=
-OS_LoadImageW__I_3CIIII_0=cast=(HINSTANCE)
-OS_LoadImageW__I_3CIIII_1=cast=(LPWSTR)
-OS_LoadImageW__I_3CIIII_2=
-OS_LoadImageW__I_3CIIII_3=
-OS_LoadImageW__I_3CIIII_4=
-OS_LoadImageW__I_3CIIII_5=
-
-OS_LoadLibraryA=
-OS_LoadLibraryA_0=cast=(LPSTR)
-
-OS_LoadLibraryW=
-OS_LoadLibraryW_0=cast=(LPWSTR)
-
-OS_LoadStringA=
-OS_LoadStringA_0=cast=HINSTANCE
-OS_LoadStringA_1=
-OS_LoadStringA_2=cast=LPSTR
-OS_LoadStringA_3=
-
-OS_LoadStringW=
-OS_LoadStringW_0=cast=HINSTANCE
-OS_LoadStringW_1=
-OS_LoadStringW_2=cast=LPWSTR
-OS_LoadStringW_3=
-
-OS_LocalFree=
-OS_LocalFree_0=cast=HLOCAL
-
-OS_LockWindowUpdate=
-OS_LockWindowUpdate_0=cast=(HWND)
-
-OS_MCIWndRegisterClass=
-OS_MCIWndRegisterClass_0=cast=(HINSTANCE)
-
-OS_MapVirtualKeyA=
-OS_MapVirtualKeyA_0=
-OS_MapVirtualKeyA_1=
-
-OS_MapVirtualKeyW=
-OS_MapVirtualKeyW_0=
-OS_MapVirtualKeyW_1=
-
-OS_MapWindowPoints__IILorg_eclipse_swt_internal_win32_POINT_2I=
-OS_MapWindowPoints__IILorg_eclipse_swt_internal_win32_POINT_2I_0=cast=(HWND)
-OS_MapWindowPoints__IILorg_eclipse_swt_internal_win32_POINT_2I_1=cast=(HWND)
-OS_MapWindowPoints__IILorg_eclipse_swt_internal_win32_POINT_2I_2=cast=(LPPOINT)
-OS_MapWindowPoints__IILorg_eclipse_swt_internal_win32_POINT_2I_3=
-
-OS_MapWindowPoints__IILorg_eclipse_swt_internal_win32_RECT_2I=
-OS_MapWindowPoints__IILorg_eclipse_swt_internal_win32_RECT_2I_0=cast=(HWND)
-OS_MapWindowPoints__IILorg_eclipse_swt_internal_win32_RECT_2I_1=cast=(HWND)
-OS_MapWindowPoints__IILorg_eclipse_swt_internal_win32_RECT_2I_2=cast=(LPPOINT)
-OS_MapWindowPoints__IILorg_eclipse_swt_internal_win32_RECT_2I_3=
-
-OS_MessageBeep=
-OS_MessageBeep_0=
-
-OS_MessageBoxA=
-OS_MessageBoxA_0=cast=(HWND)
-OS_MessageBoxA_1=cast=(LPSTR)
-OS_MessageBoxA_2=cast=(LPSTR)
-OS_MessageBoxA_3=
-
-OS_MessageBoxW=
-OS_MessageBoxW_0=cast=(HWND)
-OS_MessageBoxW_1=cast=(LPWSTR)
-OS_MessageBoxW_2=cast=(LPWSTR)
-OS_MessageBoxW_3=
-
-OS_MonitorFromWindow=flags=dynamic
-OS_MonitorFromWindow_0=
-OS_MonitorFromWindow_1=
-
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_DROPFILES_2I=
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_DROPFILES_2I_0=cast=(PVOID)
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_DROPFILES_2I_1=cast=(CONST VOID *),flags=no_out
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_DROPFILES_2I_2=
-
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_GRADIENT_1RECT_2I=
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_GRADIENT_1RECT_2I_0=cast=(PVOID)
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_GRADIENT_1RECT_2I_1=cast=(CONST VOID *),flags=no_out
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_GRADIENT_1RECT_2I_2=
-
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_KEYBDINPUT_2I=
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_KEYBDINPUT_2I_0=cast=PVOID
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_KEYBDINPUT_2I_1=cast=CONST VOID *,flags=no_out
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_KEYBDINPUT_2I_2=
-
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_LOGFONTA_2I=
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_LOGFONTA_2I_0=cast=(PVOID)
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_LOGFONTA_2I_1=cast=(CONST VOID *),flags=no_out
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_LOGFONTA_2I_2=
-
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_LOGFONTW_2I=
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_LOGFONTW_2I_0=cast=(PVOID)
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_LOGFONTW_2I_1=cast=(CONST VOID *),flags=no_out
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_LOGFONTW_2I_2=
-
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_MEASUREITEMSTRUCT_2I=
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_MEASUREITEMSTRUCT_2I_0=cast=(PVOID)
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_MEASUREITEMSTRUCT_2I_1=cast=(CONST VOID *),flags=no_out
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_MEASUREITEMSTRUCT_2I_2=
-
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_MINMAXINFO_2I=
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_MINMAXINFO_2I_0=cast=PVOID
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_MINMAXINFO_2I_1=cast=(CONST VOID *),flags=no_out
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_MINMAXINFO_2I_2=
-
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_MOUSEINPUT_2I=
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_MOUSEINPUT_2I_0=cast=PVOID
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_MOUSEINPUT_2I_1=cast=(CONST VOID *),flags=no_out
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_MOUSEINPUT_2I_2=
-
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_MSG_2I=
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_MSG_2I_0=cast=(PVOID)
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_MSG_2I_1=cast=(CONST VOID *),flags=no_out
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_MSG_2I_2=
-
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMLVCUSTOMDRAW_2I=
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMLVCUSTOMDRAW_2I_0=cast=(PVOID)
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMLVCUSTOMDRAW_2I_1=cast=(CONST VOID *),flags=no_out
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMLVCUSTOMDRAW_2I_2=
-
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMLVDISPINFO_2I=
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMLVDISPINFO_2I_0=cast=(PVOID)
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMLVDISPINFO_2I_1=cast=(CONST VOID *),flags=no_out
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMLVDISPINFO_2I_2=
-
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMTTDISPINFOA_2I=
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMTTDISPINFOA_2I_0=cast=(PVOID)
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMTTDISPINFOA_2I_1=cast=(CONST VOID *),flags=no_out
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMTTDISPINFOA_2I_2=
-
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMTTDISPINFOW_2I=
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMTTDISPINFOW_2I_0=cast=(PVOID)
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMTTDISPINFOW_2I_1=cast=(CONST VOID *),flags=no_out
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMTTDISPINFOW_2I_2=
-
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMTVCUSTOMDRAW_2I=
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMTVCUSTOMDRAW_2I_0=cast=(PVOID)
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMTVCUSTOMDRAW_2I_1=cast=(CONST VOID *),flags=no_out
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMTVCUSTOMDRAW_2I_2=
-
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMTVDISPINFO_2I=
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMTVDISPINFO_2I_0=cast=PVOID
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMTVDISPINFO_2I_1=cast=(CONST VOID *,flags=no_out
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_NMTVDISPINFO_2I_2=
-
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_RECT_2I=
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_RECT_2I_0=cast=(PVOID)
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_RECT_2I_1=cast=(CONST VOID *),flags=no_out
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_RECT_2I_2=
-
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_TRIVERTEX_2I=
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_TRIVERTEX_2I_0=cast=(PVOID)
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_TRIVERTEX_2I_1=cast=(CONST VOID *),flags=no_out
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_TRIVERTEX_2I_2=
-
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_UDACCEL_2I=
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_UDACCEL_2I_0=cast=(PVOID)
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_UDACCEL_2I_1=cast=(CONST VOID *),flags=no_out
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_UDACCEL_2I_2=
-
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_WINDOWPOS_2I=
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_WINDOWPOS_2I_0=cast=(PVOID)
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_WINDOWPOS_2I_1=cast=(CONST VOID *),flags=no_out
-OS_MoveMemory__ILorg_eclipse_swt_internal_win32_WINDOWPOS_2I_2=
-
-OS_MoveMemory__I_3BI=
-OS_MoveMemory__I_3BI_0=cast=(PVOID)
-OS_MoveMemory__I_3BI_1=cast=(CONST VOID *),flags=no_out critical
-OS_MoveMemory__I_3BI_2=
-
-OS_MoveMemory__I_3CI=
-OS_MoveMemory__I_3CI_0=cast=(PVOID)
-OS_MoveMemory__I_3CI_1=cast=(CONST VOID *),flags=no_out critical
-OS_MoveMemory__I_3CI_2=
-
-OS_MoveMemory__I_3DI=
-OS_MoveMemory__I_3DI_0=cast=(PVOID)
-OS_MoveMemory__I_3DI_1=cast=(CONST VOID *),flags=no_out critical
-OS_MoveMemory__I_3DI_2=
-
-OS_MoveMemory__I_3FI=
-OS_MoveMemory__I_3FI_0=cast=(PVOID)
-OS_MoveMemory__I_3FI_1=cast=(CONST VOID *),flags=no_out critical
-OS_MoveMemory__I_3FI_2=
-
-OS_MoveMemory__I_3II=
-OS_MoveMemory__I_3II_0=cast=(PVOID)
-OS_MoveMemory__I_3II_1=cast=(CONST VOID *),flags=no_out critical
-OS_MoveMemory__I_3II_2=
-
-OS_MoveMemory__I_3JI=
-OS_MoveMemory__I_3JI_0=cast=(PVOID)
-OS_MoveMemory__I_3JI_1=cast=(CONST VOID *),flags=no_out critical
-OS_MoveMemory__I_3JI_2=
-
-OS_MoveMemory__I_3SI=
-OS_MoveMemory__I_3SI_0=cast=(PVOID)
-OS_MoveMemory__I_3SI_1=cast=(CONST VOID *),flags=no_out critical
-OS_MoveMemory__I_3SI_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_BITMAPINFOHEADER_2_3BI=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_BITMAPINFOHEADER_2_3BI_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_BITMAPINFOHEADER_2_3BI_1=cast=(CONST VOID *),flags=no_out critical
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_BITMAPINFOHEADER_2_3BI_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_DRAWITEMSTRUCT_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_DRAWITEMSTRUCT_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_DRAWITEMSTRUCT_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_DRAWITEMSTRUCT_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_EXTLOGPEN_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_EXTLOGPEN_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_EXTLOGPEN_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_EXTLOGPEN_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_HDITEM_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_HDITEM_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_HDITEM_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_HDITEM_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_HELPINFO_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_HELPINFO_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_HELPINFO_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_HELPINFO_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_LOGFONTA_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_LOGFONTA_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_LOGFONTA_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_LOGFONTA_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_LOGFONTW_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_LOGFONTW_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_LOGFONTW_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_LOGFONTW_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_MEASUREITEMSTRUCT_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_MEASUREITEMSTRUCT_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_MEASUREITEMSTRUCT_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_MEASUREITEMSTRUCT_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_MINMAXINFO_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_MINMAXINFO_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_MINMAXINFO_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_MINMAXINFO_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_MSG_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_MSG_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_MSG_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_MSG_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMCUSTOMDRAW_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMCUSTOMDRAW_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMCUSTOMDRAW_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMCUSTOMDRAW_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMHDR_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMHDR_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMHDR_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMHDR_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMHEADER_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMHEADER_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMHEADER_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMHEADER_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMLINK_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMLINK_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMLINK_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMLINK_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMLISTVIEW_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMLISTVIEW_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMLISTVIEW_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMLISTVIEW_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMLVCUSTOMDRAW_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMLVCUSTOMDRAW_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMLVCUSTOMDRAW_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMLVCUSTOMDRAW_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMLVDISPINFO_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMLVDISPINFO_2II_0=cast=(PVOID,flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMLVDISPINFO_2II_1=cast=(CONST VOID *
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMLVDISPINFO_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMLVFINDITEM_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMLVFINDITEM_2II_0=cast=PVOID,flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMLVFINDITEM_2II_1=cast=CONST VOID *
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMLVFINDITEM_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMREBARCHEVRON_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMREBARCHEVRON_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMREBARCHEVRON_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMREBARCHEVRON_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMREBARCHILDSIZE_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMREBARCHILDSIZE_2II_0=cast=PVOID,flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMREBARCHILDSIZE_2II_1=cast=CONST VOID *
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMREBARCHILDSIZE_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMRGINFO_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMRGINFO_2II_0=cast=PVOID,flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMRGINFO_2II_1=cast=CONST VOID *
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMRGINFO_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTBHOTITEM_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTBHOTITEM_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTBHOTITEM_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTBHOTITEM_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTOOLBAR_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTOOLBAR_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTOOLBAR_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTOOLBAR_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTTDISPINFOA_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTTDISPINFOA_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTTDISPINFOA_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTTDISPINFOA_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTTDISPINFOW_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTTDISPINFOW_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTTDISPINFOW_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTTDISPINFOW_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTVCUSTOMDRAW_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTVCUSTOMDRAW_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTVCUSTOMDRAW_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTVCUSTOMDRAW_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTVDISPINFO_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTVDISPINFO_2II_0=cast=PVOID,flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTVDISPINFO_2II_1=cast=CONST VOID *
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMTVDISPINFO_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMUPDOWN_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMUPDOWN_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMUPDOWN_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_NMUPDOWN_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_POINT_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_POINT_2II_0=cast=PVOID,flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_POINT_2II_1=cast=CONST VOID *
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_POINT_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_SCRIPT_1ITEM_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_SCRIPT_1ITEM_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_SCRIPT_1ITEM_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_SCRIPT_1ITEM_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_SCRIPT_1LOGATTR_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_SCRIPT_1LOGATTR_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_SCRIPT_1LOGATTR_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_SCRIPT_1LOGATTR_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_SCRIPT_1PROPERTIES_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_SCRIPT_1PROPERTIES_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_SCRIPT_1PROPERTIES_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_SCRIPT_1PROPERTIES_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_TEXTMETRICA_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_TEXTMETRICA_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_TEXTMETRICA_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_TEXTMETRICA_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_TEXTMETRICW_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_TEXTMETRICW_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_TEXTMETRICW_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_TEXTMETRICW_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_TVITEM_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_TVITEM_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_TVITEM_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_TVITEM_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_UDACCEL_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_UDACCEL_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_UDACCEL_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_UDACCEL_2II_2=
-
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_WINDOWPOS_2II=
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_WINDOWPOS_2II_0=cast=(PVOID),flags=no_in
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_WINDOWPOS_2II_1=cast=(CONST VOID *)
-OS_MoveMemory__Lorg_eclipse_swt_internal_win32_WINDOWPOS_2II_2=
-
-OS_MoveMemory___3BII=
-OS_MoveMemory___3BII_0=cast=(PVOID),flags=no_in critical
-OS_MoveMemory___3BII_1=cast=(CONST VOID *)
-OS_MoveMemory___3BII_2=
-
-OS_MoveMemory___3BLorg_eclipse_swt_internal_win32_ACCEL_2I=
-OS_MoveMemory___3BLorg_eclipse_swt_internal_win32_ACCEL_2I_0=cast=(PVOID),flags=no_in critical
-OS_MoveMemory___3BLorg_eclipse_swt_internal_win32_ACCEL_2I_1=cast=(CONST VOID *),flags=no_out
-OS_MoveMemory___3BLorg_eclipse_swt_internal_win32_ACCEL_2I_2=
-
-OS_MoveMemory___3BLorg_eclipse_swt_internal_win32_BITMAPINFOHEADER_2I=
-OS_MoveMemory___3BLorg_eclipse_swt_internal_win32_BITMAPINFOHEADER_2I_0=cast=(PVOID),flags=no_in critical
-OS_MoveMemory___3BLorg_eclipse_swt_internal_win32_BITMAPINFOHEADER_2I_1=cast=(CONST VOID *),flags=no_out
-OS_MoveMemory___3BLorg_eclipse_swt_internal_win32_BITMAPINFOHEADER_2I_2=
-
-OS_MoveMemory___3CII=
-OS_MoveMemory___3CII_0=cast=(PVOID),flags=no_in critical
-OS_MoveMemory___3CII_1=cast=(CONST VOID *)
-OS_MoveMemory___3CII_2=
-
-OS_MoveMemory___3DII=
-OS_MoveMemory___3DII_0=cast=(PVOID),flags=no_in critical
-OS_MoveMemory___3DII_1=cast=(CONST VOID *)
-OS_MoveMemory___3DII_2=
-
-OS_MoveMemory___3FII=
-OS_MoveMemory___3FII_0=cast=(PVOID),flags=no_in critical
-OS_MoveMemory___3FII_1=cast=(CONST VOID *)
-OS_MoveMemory___3FII_2=
-
-OS_MoveMemory___3III=
-OS_MoveMemory___3III_0=cast=(PVOID),flags=no_in critical
-OS_MoveMemory___3III_1=cast=(CONST VOID *)
-OS_MoveMemory___3III_2=
-
-OS_MoveMemory___3JII=
-OS_MoveMemory___3JII_0=cast=(PVOID),flags=no_in critical
-OS_MoveMemory___3JII_1=cast=(CONST VOID *)
-OS_MoveMemory___3JII_2=
-
-OS_MoveMemory___3SII=
-OS_MoveMemory___3SII_0=cast=(PVOID),flags=no_in critical
-OS_MoveMemory___3SII_1=cast=(CONST VOID *)
-OS_MoveMemory___3SII_2=
-
-OS_MoveToEx=
-OS_MoveToEx_0=cast=(HDC)
-OS_MoveToEx_1=
-OS_MoveToEx_2=
-OS_MoveToEx_3=cast=(LPPOINT)
-
-OS_MsgWaitForMultipleObjectsEx=
-OS_MsgWaitForMultipleObjectsEx_0=cast=(DWORD)
-OS_MsgWaitForMultipleObjectsEx_1=cast=(LPHANDLE)
-OS_MsgWaitForMultipleObjectsEx_2=cast=(DWORD)
-OS_MsgWaitForMultipleObjectsEx_3=cast=(DWORD)
-OS_MsgWaitForMultipleObjectsEx_4=cast=(DWORD)
-
-OS_MultiByteToWideChar__IIII_3CI=
-OS_MultiByteToWideChar__IIII_3CI_0=
-OS_MultiByteToWideChar__IIII_3CI_1=
-OS_MultiByteToWideChar__IIII_3CI_2=cast=(LPCSTR)
-OS_MultiByteToWideChar__IIII_3CI_3=
-OS_MultiByteToWideChar__IIII_3CI_4=cast=(LPWSTR),flags=no_in critical
-OS_MultiByteToWideChar__IIII_3CI_5=
-
-OS_MultiByteToWideChar__II_3BI_3CI=
-OS_MultiByteToWideChar__II_3BI_3CI_0=
-OS_MultiByteToWideChar__II_3BI_3CI_1=
-OS_MultiByteToWideChar__II_3BI_3CI_2=cast=(LPCSTR),flags=no_out critical
-OS_MultiByteToWideChar__II_3BI_3CI_3=
-OS_MultiByteToWideChar__II_3BI_3CI_4=cast=(LPWSTR),flags=no_in critical
-OS_MultiByteToWideChar__II_3BI_3CI_5=
-
-OS_NotifyWinEvent=flags=dynamic
-OS_NotifyWinEvent_0=cast=DWORD
-OS_NotifyWinEvent_1=cast=HWND
-OS_NotifyWinEvent_2=cast=LONG
-OS_NotifyWinEvent_3=cast=LONG
-
-OS_OffsetRect=
-OS_OffsetRect_0=
-OS_OffsetRect_1=
-OS_OffsetRect_2=
-
-OS_OffsetRgn=
-OS_OffsetRgn_0=cast=HRGN
-OS_OffsetRgn_1=
-OS_OffsetRgn_2=
-
-OS_OleInitialize=
-OS_OleInitialize_0=cast=(LPVOID)
-
-OS_OleUninitialize=
-
-OS_OpenClipboard=
-OS_OpenClipboard_0=cast=(HWND)
-
-OS_OpenThemeData=flags=dynamic
-OS_OpenThemeData_0=cast=HWND
-OS_OpenThemeData_1=cast=LPCWSTR
-
-OS_PRIMARYLANGID=
-OS_PRIMARYLANGID_0=
-
-OS_PatBlt=
-OS_PatBlt_0=cast=(HDC)
-OS_PatBlt_1=
-OS_PatBlt_2=
-OS_PatBlt_3=
-OS_PatBlt_4=
-OS_PatBlt_5=
-
-OS_PeekMessageA=
-OS_PeekMessageA_0=
-OS_PeekMessageA_1=cast=(HWND)
-OS_PeekMessageA_2=
-OS_PeekMessageA_3=
-OS_PeekMessageA_4=
-
-OS_PeekMessageW=
-OS_PeekMessageW_0=
-OS_PeekMessageW_1=cast=(HWND)
-OS_PeekMessageW_2=
-OS_PeekMessageW_3=
-OS_PeekMessageW_4=
-
-OS_Pie=
-OS_Pie_0=cast=(HDC)
-OS_Pie_1=
-OS_Pie_2=
-OS_Pie_3=
-OS_Pie_4=
-OS_Pie_5=
-OS_Pie_6=
-OS_Pie_7=
-OS_Pie_8=
-
-OS_Polygon=
-OS_Polygon_0=cast=(HDC)
-OS_Polygon_1=cast=(CONST POINT *),flags=no_out critical
-OS_Polygon_2=
-
-OS_Polyline=
-OS_Polyline_0=cast=(HDC)
-OS_Polyline_1=cast=(CONST POINT *),flags=no_out critical
-OS_Polyline_2=
-
-OS_PostMessageA=
-OS_PostMessageA_0=cast=(HWND)
-OS_PostMessageA_1=
-OS_PostMessageA_2=cast=(WPARAM)
-OS_PostMessageA_3=cast=(LPARAM)
-
-OS_PostMessageW=
-OS_PostMessageW_0=cast=(HWND)
-OS_PostMessageW_1=
-OS_PostMessageW_2=cast=(WPARAM)
-OS_PostMessageW_3=cast=(LPARAM)
-
-OS_PostThreadMessageA=
-OS_PostThreadMessageA_0=
-OS_PostThreadMessageA_1=
-OS_PostThreadMessageA_2=cast=(WPARAM)
-OS_PostThreadMessageA_3=cast=(LPARAM)
-
-OS_PostThreadMessageW=
-OS_PostThreadMessageW_0=
-OS_PostThreadMessageW_1=
-OS_PostThreadMessageW_2=cast=(WPARAM)
-OS_PostThreadMessageW_3=cast=(LPARAM)
-
-OS_PrintDlgA=
-OS_PrintDlgA_0=
-
-OS_PrintDlgW=
-OS_PrintDlgW_0=cast=(LPPRINTDLGW)
-
-OS_PtInRect=
-OS_PtInRect_0=flags=no_out
-OS_PtInRect_1=flags=no_out struct
-
-OS_PtInRegion=
-OS_PtInRegion_0=cast=(HRGN)
-OS_PtInRegion_1=
-OS_PtInRegion_2=
-
-OS_RealizePalette=
-OS_RealizePalette_0=cast=(HDC)
-
-OS_RectInRegion=
-OS_RectInRegion_0=cast=(HRGN)
-OS_RectInRegion_1=flags=no_out
-
-OS_Rectangle=
-OS_Rectangle_0=cast=(HDC)
-OS_Rectangle_1=
-OS_Rectangle_2=
-OS_Rectangle_3=
-OS_Rectangle_4=
-
-OS_RedrawWindow=
-OS_RedrawWindow_0=cast=(HWND)
-OS_RedrawWindow_1=
-OS_RedrawWindow_2=cast=(HRGN)
-OS_RedrawWindow_3=
-
-OS_RegCloseKey=
-OS_RegCloseKey_0=cast=(HKEY)
-
-OS_RegEnumKeyExA=
-OS_RegEnumKeyExA_0=cast=(HKEY)
-OS_RegEnumKeyExA_1=
-OS_RegEnumKeyExA_2=cast=(LPSTR)
-OS_RegEnumKeyExA_3=
-OS_RegEnumKeyExA_4=
-OS_RegEnumKeyExA_5=cast=(LPSTR)
-OS_RegEnumKeyExA_6=
-OS_RegEnumKeyExA_7=
-
-OS_RegEnumKeyExW=
-OS_RegEnumKeyExW_0=cast=(HKEY)
-OS_RegEnumKeyExW_1=
-OS_RegEnumKeyExW_2=cast=(LPWSTR)
-OS_RegEnumKeyExW_3=
-OS_RegEnumKeyExW_4=
-OS_RegEnumKeyExW_5=cast=(LPWSTR)
-OS_RegEnumKeyExW_6=
-OS_RegEnumKeyExW_7=
-
-OS_RegOpenKeyExA=
-OS_RegOpenKeyExA_0=cast=(HKEY)
-OS_RegOpenKeyExA_1=cast=(LPSTR)
-OS_RegOpenKeyExA_2=
-OS_RegOpenKeyExA_3=
-OS_RegOpenKeyExA_4=cast=(PHKEY)
-
-OS_RegOpenKeyExW=
-OS_RegOpenKeyExW_0=cast=(HKEY)
-OS_RegOpenKeyExW_1=cast=(LPWSTR)
-OS_RegOpenKeyExW_2=
-OS_RegOpenKeyExW_3=
-OS_RegOpenKeyExW_4=cast=(PHKEY)
-
-OS_RegQueryInfoKeyA=
-OS_RegQueryInfoKeyA_0=cast=(HKEY)
-OS_RegQueryInfoKeyA_1=cast=(LPSTR)
-OS_RegQueryInfoKeyA_2=
-OS_RegQueryInfoKeyA_3=cast=(LPDWORD)
-OS_RegQueryInfoKeyA_4=
-OS_RegQueryInfoKeyA_5=
-OS_RegQueryInfoKeyA_6=
-OS_RegQueryInfoKeyA_7=
-OS_RegQueryInfoKeyA_8=
-OS_RegQueryInfoKeyA_9=
-OS_RegQueryInfoKeyA_10=
-OS_RegQueryInfoKeyA_11=cast=(PFILETIME)
-
-OS_RegQueryInfoKeyW=
-OS_RegQueryInfoKeyW_0=cast=(HKEY)
-OS_RegQueryInfoKeyW_1=cast=(LPWSTR)
-OS_RegQueryInfoKeyW_2=
-OS_RegQueryInfoKeyW_3=cast=(LPDWORD)
-OS_RegQueryInfoKeyW_4=
-OS_RegQueryInfoKeyW_5=
-OS_RegQueryInfoKeyW_6=
-OS_RegQueryInfoKeyW_7=
-OS_RegQueryInfoKeyW_8=
-OS_RegQueryInfoKeyW_9=
-OS_RegQueryInfoKeyW_10=
-OS_RegQueryInfoKeyW_11=cast=(PFILETIME)
-
-OS_RegQueryValueExA__I_3BI_3I_3B_3I=
-OS_RegQueryValueExA__I_3BI_3I_3B_3I_0=cast=(HKEY)
-OS_RegQueryValueExA__I_3BI_3I_3B_3I_1=cast=(LPSTR)
-OS_RegQueryValueExA__I_3BI_3I_3B_3I_2=cast=(LPDWORD)
-OS_RegQueryValueExA__I_3BI_3I_3B_3I_3=
-OS_RegQueryValueExA__I_3BI_3I_3B_3I_4=cast=(LPBYTE)
-OS_RegQueryValueExA__I_3BI_3I_3B_3I_5=
-
-OS_RegQueryValueExA__I_3BI_3I_3I_3I=
-OS_RegQueryValueExA__I_3BI_3I_3I_3I_0=cast=(HKEY)
-OS_RegQueryValueExA__I_3BI_3I_3I_3I_1=cast=(LPSTR)
-OS_RegQueryValueExA__I_3BI_3I_3I_3I_2=cast=(LPDWORD)
-OS_RegQueryValueExA__I_3BI_3I_3I_3I_3=
-OS_RegQueryValueExA__I_3BI_3I_3I_3I_4=cast=(LPBYTE)
-OS_RegQueryValueExA__I_3BI_3I_3I_3I_5=
-
-OS_RegQueryValueExW__I_3CI_3I_3C_3I=
-OS_RegQueryValueExW__I_3CI_3I_3C_3I_0=cast=(HKEY)
-OS_RegQueryValueExW__I_3CI_3I_3C_3I_1=cast=(LPWSTR)
-OS_RegQueryValueExW__I_3CI_3I_3C_3I_2=cast=(LPDWORD)
-OS_RegQueryValueExW__I_3CI_3I_3C_3I_3=
-OS_RegQueryValueExW__I_3CI_3I_3C_3I_4=cast=(LPBYTE)
-OS_RegQueryValueExW__I_3CI_3I_3C_3I_5=
-
-OS_RegQueryValueExW__I_3CI_3I_3I_3I=
-OS_RegQueryValueExW__I_3CI_3I_3I_3I_0=cast=(HKEY)
-OS_RegQueryValueExW__I_3CI_3I_3I_3I_1=cast=(LPWSTR)
-OS_RegQueryValueExW__I_3CI_3I_3I_3I_2=cast=(LPDWORD)
-OS_RegQueryValueExW__I_3CI_3I_3I_3I_3=
-OS_RegQueryValueExW__I_3CI_3I_3I_3I_4=cast=(LPBYTE)
-OS_RegQueryValueExW__I_3CI_3I_3I_3I_5=
-
-OS_RegisterClassA=
-OS_RegisterClassA_0=
-
-OS_RegisterClassW=
-OS_RegisterClassW_0=cast=(LPWNDCLASSW)
-
-OS_RegisterClipboardFormatA=
-OS_RegisterClipboardFormatA_0=cast=(LPTSTR)
-
-OS_RegisterClipboardFormatW=
-OS_RegisterClipboardFormatW_0=cast=(LPWSTR)
-
-OS_RegisterWindowMessageA=
-OS_RegisterWindowMessageA_0=cast=(LPTSTR)
-
-OS_RegisterWindowMessageW=
-OS_RegisterWindowMessageW_0=cast=(LPWSTR)
-
-OS_ReleaseCapture=
-
-OS_ReleaseDC=
-OS_ReleaseDC_0=cast=(HWND)
-OS_ReleaseDC_1=cast=(HDC)
-
-OS_RemoveMenu=
-OS_RemoveMenu_0=cast=(HMENU)
-OS_RemoveMenu_1=
-OS_RemoveMenu_2=
-
-OS_RemovePropA=
-OS_RemovePropA_0=cast=HWND
-OS_RemovePropA_1=cast=LPCTSTR
-
-OS_RemovePropW=
-OS_RemovePropW_0=cast=HWND
-OS_RemovePropW_1=cast=(LPCWSTR)
-
-OS_RestoreDC=
-OS_RestoreDC_0=cast=(HDC)
-OS_RestoreDC_1=cast=(int)
-
-OS_RoundRect=
-OS_RoundRect_0=cast=(HDC)
-OS_RoundRect_1=
-OS_RoundRect_2=
-OS_RoundRect_3=
-OS_RoundRect_4=
-OS_RoundRect_5=
-OS_RoundRect_6=
-
-OS_SHBrowseForFolderA=
-OS_SHBrowseForFolderA_0=
-
-OS_SHBrowseForFolderW=
-OS_SHBrowseForFolderW_0=cast=(LPBROWSEINFOW)
-
-OS_SHCreateMenuBar=
-OS_SHCreateMenuBar_0=cast=(PSHMENUBARINFO)
-
-OS_SHGetMalloc=
-OS_SHGetMalloc_0=cast=(LPMALLOC *)
-
-OS_SHGetPathFromIDListA=
-OS_SHGetPathFromIDListA_0=cast=(LPCITEMIDLIST)
-OS_SHGetPathFromIDListA_1=cast=(LPSTR)
-
-OS_SHGetPathFromIDListW=
-OS_SHGetPathFromIDListW_0=cast=(LPCITEMIDLIST)
-OS_SHGetPathFromIDListW_1=cast=(LPWSTR)
-
-OS_SHHandleWMSettingChange=
-OS_SHHandleWMSettingChange_0=cast=(HWND)
-OS_SHHandleWMSettingChange_1=
-OS_SHHandleWMSettingChange_2=
-OS_SHHandleWMSettingChange_3=
-
-OS_SHRecognizeGesture=
-OS_SHRecognizeGesture_0=
-
-OS_SHSendBackToFocusWindow=
-OS_SHSendBackToFocusWindow_0=
-OS_SHSendBackToFocusWindow_1=
-OS_SHSendBackToFocusWindow_2=
-
-OS_SHSetAppKeyWndAssoc=
-OS_SHSetAppKeyWndAssoc_0=cast=(BYTE)
-OS_SHSetAppKeyWndAssoc_1=cast=(HWND)
-
-OS_SHSipPreference=
-OS_SHSipPreference_0=cast=(HWND)
-OS_SHSipPreference_1=
-
-OS_SaveDC=
-OS_SaveDC_0=cast=(HDC)
-
-OS_ScreenToClient=
-OS_ScreenToClient_0=cast=(HWND)
-OS_ScreenToClient_1=
-
-OS_ScriptBreak=
-OS_ScriptBreak_0=cast=const WCHAR *
-OS_ScriptBreak_1=
-OS_ScriptBreak_2=cast=const SCRIPT_ANALYSIS *
-OS_ScriptBreak_3=cast=SCRIPT_LOGATTR *
-
-OS_ScriptCPtoX=
-OS_ScriptCPtoX_0=
-OS_ScriptCPtoX_1=
-OS_ScriptCPtoX_2=
-OS_ScriptCPtoX_3=
-OS_ScriptCPtoX_4=cast=const WORD *
-OS_ScriptCPtoX_5=cast=const SCRIPT_VISATTR *
-OS_ScriptCPtoX_6=cast=const int *
-OS_ScriptCPtoX_7=cast=const SCRIPT_ANALYSIS *
-OS_ScriptCPtoX_8=cast=int *
-
-OS_ScriptCacheGetHeight=
-OS_ScriptCacheGetHeight_0=cast=HDC
-OS_ScriptCacheGetHeight_1=cast=(SCRIPT_CACHE *)
-OS_ScriptCacheGetHeight_2=cast=long *
-
-OS_ScriptFreeCache=
-OS_ScriptFreeCache_0=cast=(SCRIPT_CACHE *)
-
-OS_ScriptGetFontProperties=
-OS_ScriptGetFontProperties_0=cast=HDC
-OS_ScriptGetFontProperties_1=cast=SCRIPT_CACHE *
-OS_ScriptGetFontProperties_2=cast=SCRIPT_FONTPROPERTIES *
-
-OS_ScriptGetLogicalWidths=
-OS_ScriptGetLogicalWidths_0=cast=const SCRIPT_ANALYSIS *
-OS_ScriptGetLogicalWidths_1=
-OS_ScriptGetLogicalWidths_2=
-OS_ScriptGetLogicalWidths_3=cast=const int *
-OS_ScriptGetLogicalWidths_4=cast=const WORD *
-OS_ScriptGetLogicalWidths_5=cast=(const SCRIPT_VISATTR *)
-OS_ScriptGetLogicalWidths_6=cast=(int *)
-
-OS_ScriptGetProperties=
-OS_ScriptGetProperties_0=cast=const SCRIPT_PROPERTIES ***
-OS_ScriptGetProperties_1=cast=int *
-
-OS_ScriptItemize=
-OS_ScriptItemize_0=cast=const WCHAR *
-OS_ScriptItemize_1=
-OS_ScriptItemize_2=
-OS_ScriptItemize_3=cast=const SCRIPT_CONTROL *
-OS_ScriptItemize_4=cast=const SCRIPT_STATE *
-OS_ScriptItemize_5=cast=SCRIPT_ITEM *
-OS_ScriptItemize_6=cast=int *
-
-OS_ScriptJustify=
-OS_ScriptJustify_0=cast=(SCRIPT_VISATTR *)
-OS_ScriptJustify_1=cast=const int *
-OS_ScriptJustify_2=
-OS_ScriptJustify_3=
-OS_ScriptJustify_4=
-OS_ScriptJustify_5=cast=int *
-
-OS_ScriptLayout=
-OS_ScriptLayout_0=
-OS_ScriptLayout_1=cast=const BYTE *
-OS_ScriptLayout_2=cast=int *
-OS_ScriptLayout_3=cast=int *
-
-OS_ScriptPlace=
-OS_ScriptPlace_0=cast=HDC
-OS_ScriptPlace_1=cast=SCRIPT_CACHE *
-OS_ScriptPlace_2=cast=const WORD *
-OS_ScriptPlace_3=
-OS_ScriptPlace_4=cast=const SCRIPT_VISATTR *
-OS_ScriptPlace_5=cast=SCRIPT_ANALYSIS *
-OS_ScriptPlace_6=cast=int *
-OS_ScriptPlace_7=cast=GOFFSET *
-OS_ScriptPlace_8=cast=ABC *
-
-OS_ScriptShape=
-OS_ScriptShape_0=cast=HDC
-OS_ScriptShape_1=cast=SCRIPT_CACHE *
-OS_ScriptShape_2=cast=const WCHAR *
-OS_ScriptShape_3=
-OS_ScriptShape_4=
-OS_ScriptShape_5=cast=(SCRIPT_ANALYSIS *)
-OS_ScriptShape_6=cast=WORD *
-OS_ScriptShape_7=cast=WORD *
-OS_ScriptShape_8=cast=SCRIPT_VISATTR *
-OS_ScriptShape_9=cast=int *
-
-OS_ScriptTextOut=
-OS_ScriptTextOut_0=cast=const HDC
-OS_ScriptTextOut_1=cast=SCRIPT_CACHE *
-OS_ScriptTextOut_2=
-OS_ScriptTextOut_3=
-OS_ScriptTextOut_4=
-OS_ScriptTextOut_5=cast=const RECT *
-OS_ScriptTextOut_6=cast=const SCRIPT_ANALYSIS *
-OS_ScriptTextOut_7=cast=const WCHAR *
-OS_ScriptTextOut_8=
-OS_ScriptTextOut_9=cast=const WORD *
-OS_ScriptTextOut_10=
-OS_ScriptTextOut_11=cast=const int *
-OS_ScriptTextOut_12=cast=const int *
-OS_ScriptTextOut_13=cast=const GOFFSET *
-
-OS_ScriptXtoCP=
-OS_ScriptXtoCP_0=
-OS_ScriptXtoCP_1=
-OS_ScriptXtoCP_2=
-OS_ScriptXtoCP_3=cast=(const WORD *)
-OS_ScriptXtoCP_4=cast=const SCRIPT_VISATTR *
-OS_ScriptXtoCP_5=cast=const int *
-OS_ScriptXtoCP_6=cast=const SCRIPT_ANALYSIS *
-OS_ScriptXtoCP_7=cast=int *
-OS_ScriptXtoCP_8=cast=int *
-
-OS_ScrollWindowEx=
-OS_ScrollWindowEx_0=cast=(HWND)
-OS_ScrollWindowEx_1=
-OS_ScrollWindowEx_2=
-OS_ScrollWindowEx_3=
-OS_ScrollWindowEx_4=
-OS_ScrollWindowEx_5=cast=(HRGN)
-OS_ScrollWindowEx_6=
-OS_ScrollWindowEx_7=
-
-OS_SelectClipRgn=
-OS_SelectClipRgn_0=cast=(HDC)
-OS_SelectClipRgn_1=cast=(HRGN)
-
-OS_SelectObject=
-OS_SelectObject_0=cast=(HDC)
-OS_SelectObject_1=cast=(HGDIOBJ)
-
-OS_SelectPalette=
-OS_SelectPalette_0=cast=(HDC)
-OS_SelectPalette_1=cast=(HPALETTE)
-OS_SelectPalette_2=
-
-OS_SendInput=
-OS_SendInput_0=
-OS_SendInput_1=cast=LPINPUT
-OS_SendInput_2=
-
-OS_SendMessageA__IIII=
-OS_SendMessageA__IIII_0=cast=(HWND)
-OS_SendMessageA__IIII_1=
-OS_SendMessageA__IIII_2=cast=(WPARAM)
-OS_SendMessageA__IIII_3=cast=(LPARAM)
-
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_BUTTON_1IMAGELIST_2=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_BUTTON_1IMAGELIST_2_0=cast=HWND
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_BUTTON_1IMAGELIST_2_1=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_BUTTON_1IMAGELIST_2_2=cast=WPARAM
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_BUTTON_1IMAGELIST_2_3=cast=LPARAM
-
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_HDITEM_2=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_HDITEM_2_0=cast=HWND
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_HDITEM_2_1=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_HDITEM_2_2=cast=WPARAM
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_HDITEM_2_3=cast=LPARAM
-
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_HDLAYOUT_2=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_HDLAYOUT_2_0=cast=HWND
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_HDLAYOUT_2_1=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_HDLAYOUT_2_2=cast=(WPARAM)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_HDLAYOUT_2_3=cast=LPARAM
-
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_LITEM_2=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_LITEM_2_0=cast=(HWND)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_LITEM_2_1=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_LITEM_2_2=cast=(WPARAM)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_LITEM_2_3=cast=(LPARAM)
-
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_LVCOLUMN_2=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_LVCOLUMN_2_0=cast=(HWND)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_LVCOLUMN_2_1=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_LVCOLUMN_2_2=cast=(WPARAM)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_LVCOLUMN_2_3=cast=(LPARAM)
-
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_LVHITTESTINFO_2=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_LVHITTESTINFO_2_0=cast=(HWND)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_LVHITTESTINFO_2_1=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_LVHITTESTINFO_2_2=cast=(WPARAM)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_LVHITTESTINFO_2_3=cast=(LPARAM)
-
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_LVITEM_2=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_LVITEM_2_0=cast=(HWND)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_LVITEM_2_1=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_LVITEM_2_2=cast=(WPARAM)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_LVITEM_2_3=cast=(LPARAM)
-
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_MARGINS_2=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_MARGINS_2_0=cast=(HWND)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_MARGINS_2_1=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_MARGINS_2_2=cast=(WPARAM)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_MARGINS_2_3=cast=(LPARAM)
-
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_POINT_2=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_POINT_2_0=cast=(HWND)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_POINT_2_1=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_POINT_2_2=cast=(WPARAM)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_POINT_2_3=cast=(LPARAM)
-
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_REBARBANDINFO_2=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_REBARBANDINFO_2_0=cast=(HWND)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_REBARBANDINFO_2_1=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_REBARBANDINFO_2_2=cast=(WPARAM)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_REBARBANDINFO_2_3=cast=(LPARAM)
-
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_RECT_2=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_RECT_2_0=cast=(HWND)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_RECT_2_1=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_RECT_2_2=cast=(WPARAM)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_RECT_2_3=cast=(LPARAM)
-
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_SIZE_2=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_SIZE_2_0=cast=HWND
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_SIZE_2_1=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_SIZE_2_2=cast=WPARAM
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_SIZE_2_3=cast=LPARAM
-
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TBBUTTONINFO_2=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TBBUTTONINFO_2_0=cast=(HWND)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TBBUTTONINFO_2_1=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TBBUTTONINFO_2_2=cast=(WPARAM)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TBBUTTONINFO_2_3=cast=(LPARAM)
-
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TBBUTTON_2=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TBBUTTON_2_0=cast=(HWND)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TBBUTTON_2_1=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TBBUTTON_2_2=cast=(WPARAM)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TBBUTTON_2_3=cast=(LPARAM)
-
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TCITEM_2=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TCITEM_2_0=cast=(HWND)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TCITEM_2_1=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TCITEM_2_2=cast=(WPARAM)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TCITEM_2_3=cast=(LPARAM)
-
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TOOLINFO_2=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TOOLINFO_2_0=cast=(HWND)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TOOLINFO_2_1=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TOOLINFO_2_2=cast=(WPARAM)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TOOLINFO_2_3=cast=(LPARAM)
-
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TVHITTESTINFO_2=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TVHITTESTINFO_2_0=cast=(HWND)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TVHITTESTINFO_2_1=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TVHITTESTINFO_2_2=cast=(WPARAM)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TVHITTESTINFO_2_3=cast=(LPARAM)
-
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TVINSERTSTRUCT_2=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TVINSERTSTRUCT_2_0=cast=(HWND)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TVINSERTSTRUCT_2_1=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TVINSERTSTRUCT_2_2=cast=(WPARAM)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TVINSERTSTRUCT_2_3=cast=(LPARAM)
-
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TVITEM_2=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TVITEM_2_0=cast=(HWND)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TVITEM_2_1=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TVITEM_2_2=cast=(WPARAM)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_TVITEM_2_3=cast=(LPARAM)
-
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_UDACCEL_2=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_UDACCEL_2_0=cast=(HWND)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_UDACCEL_2_1=
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_UDACCEL_2_2=cast=(WPARAM)
-OS_SendMessageA__IIILorg_eclipse_swt_internal_win32_UDACCEL_2_3=cast=(LPARAM)
-
-OS_SendMessageA__III_3B=
-OS_SendMessageA__III_3B_0=cast=(HWND)
-OS_SendMessageA__III_3B_1=
-OS_SendMessageA__III_3B_2=cast=(WPARAM)
-OS_SendMessageA__III_3B_3=cast=(LPARAM)
-
-OS_SendMessageA__III_3I=
-OS_SendMessageA__III_3I_0=cast=(HWND)
-OS_SendMessageA__III_3I_1=
-OS_SendMessageA__III_3I_2=cast=(WPARAM)
-OS_SendMessageA__III_3I_3=cast=(LPARAM)
-
-OS_SendMessageA__III_3S=
-OS_SendMessageA__III_3S_0=cast=(HWND)
-OS_SendMessageA__III_3S_1=
-OS_SendMessageA__III_3S_2=cast=(WPARAM)
-OS_SendMessageA__III_3S_3=cast=(LPARAM)
-
-OS_SendMessageA__II_3II=
-OS_SendMessageA__II_3II_0=cast=(HWND)
-OS_SendMessageA__II_3II_1=
-OS_SendMessageA__II_3II_2=cast=(WPARAM)
-OS_SendMessageA__II_3II_3=cast=(LPARAM)
-
-OS_SendMessageA__II_3I_3I=
-OS_SendMessageA__II_3I_3I_0=cast=(HWND)
-OS_SendMessageA__II_3I_3I_1=
-OS_SendMessageA__II_3I_3I_2=cast=(WPARAM)
-OS_SendMessageA__II_3I_3I_3=cast=(LPARAM)
-
-OS_SendMessageW__IIII=
-OS_SendMessageW__IIII_0=cast=(HWND)
-OS_SendMessageW__IIII_1=
-OS_SendMessageW__IIII_2=cast=(WPARAM)
-OS_SendMessageW__IIII_3=cast=(LPARAM)
-
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_BUTTON_1IMAGELIST_2=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_BUTTON_1IMAGELIST_2_0=cast=HWND
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_BUTTON_1IMAGELIST_2_1=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_BUTTON_1IMAGELIST_2_2=cast=WPARAM
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_BUTTON_1IMAGELIST_2_3=cast=LPARAM
-
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_HDITEM_2=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_HDITEM_2_0=cast=HWND
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_HDITEM_2_1=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_HDITEM_2_2=cast=WPARAM
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_HDITEM_2_3=cast=LPARAM
-
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_HDLAYOUT_2=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_HDLAYOUT_2_0=cast=HWND
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_HDLAYOUT_2_1=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_HDLAYOUT_2_2=cast=WPARAM
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_HDLAYOUT_2_3=cast=LPARAM
-
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_LITEM_2=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_LITEM_2_0=cast=(HWND)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_LITEM_2_1=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_LITEM_2_2=cast=(WPARAM)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_LITEM_2_3=cast=(LPARAM)
-
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_LVCOLUMN_2=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_LVCOLUMN_2_0=cast=(HWND)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_LVCOLUMN_2_1=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_LVCOLUMN_2_2=cast=(WPARAM)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_LVCOLUMN_2_3=cast=(LPARAM)
-
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_LVHITTESTINFO_2=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_LVHITTESTINFO_2_0=cast=(HWND)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_LVHITTESTINFO_2_1=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_LVHITTESTINFO_2_2=cast=(WPARAM)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_LVHITTESTINFO_2_3=cast=(LPARAM)
-
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_LVITEM_2=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_LVITEM_2_0=cast=(HWND)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_LVITEM_2_1=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_LVITEM_2_2=cast=(WPARAM)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_LVITEM_2_3=cast=(LPARAM)
-
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_MARGINS_2=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_MARGINS_2_0=cast=(HWND)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_MARGINS_2_1=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_MARGINS_2_2=cast=(WPARAM)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_MARGINS_2_3=cast=(LPARAM)
-
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_POINT_2=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_POINT_2_0=cast=(HWND)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_POINT_2_1=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_POINT_2_2=cast=(WPARAM)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_POINT_2_3=cast=(LPARAM)
-
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_REBARBANDINFO_2=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_REBARBANDINFO_2_0=cast=(HWND)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_REBARBANDINFO_2_1=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_REBARBANDINFO_2_2=cast=(WPARAM)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_REBARBANDINFO_2_3=cast=(LPARAM)
-
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_RECT_2=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_RECT_2_0=cast=(HWND)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_RECT_2_1=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_RECT_2_2=cast=(WPARAM)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_RECT_2_3=cast=(LPARAM)
-
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_SIZE_2=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_SIZE_2_0=cast=HWND
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_SIZE_2_1=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_SIZE_2_2=cast=WPARAM
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_SIZE_2_3=cast=LPARAM
-
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TBBUTTONINFO_2=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TBBUTTONINFO_2_0=cast=(HWND)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TBBUTTONINFO_2_1=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TBBUTTONINFO_2_2=cast=(WPARAM)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TBBUTTONINFO_2_3=cast=(LPARAM)
-
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TBBUTTON_2=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TBBUTTON_2_0=cast=(HWND)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TBBUTTON_2_1=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TBBUTTON_2_2=cast=(WPARAM)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TBBUTTON_2_3=cast=(LPARAM)
-
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TCITEM_2=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TCITEM_2_0=cast=(HWND)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TCITEM_2_1=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TCITEM_2_2=cast=(WPARAM)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TCITEM_2_3=cast=(LPARAM)
-
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TOOLINFO_2=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TOOLINFO_2_0=cast=(HWND)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TOOLINFO_2_1=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TOOLINFO_2_2=cast=(WPARAM)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TOOLINFO_2_3=cast=(LPARAM)
-
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TVHITTESTINFO_2=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TVHITTESTINFO_2_0=cast=(HWND)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TVHITTESTINFO_2_1=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TVHITTESTINFO_2_2=cast=(WPARAM)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TVHITTESTINFO_2_3=cast=(LPARAM)
-
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TVINSERTSTRUCT_2=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TVINSERTSTRUCT_2_0=cast=(HWND)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TVINSERTSTRUCT_2_1=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TVINSERTSTRUCT_2_2=cast=(WPARAM)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TVINSERTSTRUCT_2_3=cast=(LPARAM)
-
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TVITEM_2=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TVITEM_2_0=cast=(HWND)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TVITEM_2_1=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TVITEM_2_2=cast=(WPARAM)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_TVITEM_2_3=cast=(LPARAM)
-
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_UDACCEL_2=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_UDACCEL_2_0=cast=(HWND)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_UDACCEL_2_1=
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_UDACCEL_2_2=cast=(WPARAM)
-OS_SendMessageW__IIILorg_eclipse_swt_internal_win32_UDACCEL_2_3=cast=(LPARAM)
-
-OS_SendMessageW__III_3C=
-OS_SendMessageW__III_3C_0=cast=(HWND)
-OS_SendMessageW__III_3C_1=
-OS_SendMessageW__III_3C_2=cast=(WPARAM)
-OS_SendMessageW__III_3C_3=cast=(LPARAM)
-
-OS_SendMessageW__III_3I=
-OS_SendMessageW__III_3I_0=cast=(HWND)
-OS_SendMessageW__III_3I_1=
-OS_SendMessageW__III_3I_2=cast=(WPARAM)
-OS_SendMessageW__III_3I_3=cast=(LPARAM)
-
-OS_SendMessageW__III_3S=
-OS_SendMessageW__III_3S_0=cast=(HWND)
-OS_SendMessageW__III_3S_1=
-OS_SendMessageW__III_3S_2=cast=(WPARAM)
-OS_SendMessageW__III_3S_3=cast=(LPARAM)
-
-OS_SendMessageW__II_3II=
-OS_SendMessageW__II_3II_0=cast=(HWND)
-OS_SendMessageW__II_3II_1=
-OS_SendMessageW__II_3II_2=cast=(WPARAM)
-OS_SendMessageW__II_3II_3=cast=(LPARAM)
-
-OS_SendMessageW__II_3I_3I=flags=no_gen
-OS_SendMessageW__II_3I_3I_0=cast=(HWND)
-OS_SendMessageW__II_3I_3I_1=
-OS_SendMessageW__II_3I_3I_2=cast=(WPARAM)
-OS_SendMessageW__II_3I_3I_3=cast=(LPARAM)
-
-OS_SetActiveWindow=
-OS_SetActiveWindow_0=cast=(HWND)
-
-OS_SetBkColor=
-OS_SetBkColor_0=cast=(HDC)
-OS_SetBkColor_1=cast=(COLORREF)
-
-OS_SetBkMode=
-OS_SetBkMode_0=cast=(HDC)
-OS_SetBkMode_1=
-
-OS_SetBrushOrgEx=
-OS_SetBrushOrgEx_0=cast=HDC
-OS_SetBrushOrgEx_1=
-OS_SetBrushOrgEx_2=
-OS_SetBrushOrgEx_3=cast=(LPPOINT)
-
-OS_SetCapture=
-OS_SetCapture_0=cast=(HWND)
-
-OS_SetCaretPos=
-OS_SetCaretPos_0=
-OS_SetCaretPos_1=
-
-OS_SetClipboardData=
-OS_SetClipboardData_0=
-OS_SetClipboardData_1=cast=(HANDLE)
-
-OS_SetCursor=
-OS_SetCursor_0=cast=(HCURSOR)
-
-OS_SetCursorPos=
-OS_SetCursorPos_0=
-OS_SetCursorPos_1=
-
-OS_SetDIBColorTable=
-OS_SetDIBColorTable_0=cast=(HDC)
-OS_SetDIBColorTable_1=
-OS_SetDIBColorTable_2=
-OS_SetDIBColorTable_3=cast=(RGBQUAD *),flags=no_out critical
-
-OS_SetErrorMode=
-OS_SetErrorMode_0=
-
-OS_SetFocus=
-OS_SetFocus_0=cast=(HWND)
-
-OS_SetForegroundWindow=
-OS_SetForegroundWindow_0=cast=(HWND)
-
-OS_SetGraphicsMode=
-OS_SetGraphicsMode_0=cast=HDC
-OS_SetGraphicsMode_1=
-
-OS_SetLayout=flags=dynamic
-OS_SetLayout_0=cast=(HDC)
-OS_SetLayout_1=cast=(DWORD)
-
-OS_SetMenu=
-OS_SetMenu_0=cast=(HWND)
-OS_SetMenu_1=cast=(HMENU)
-
-OS_SetMenuDefaultItem=
-OS_SetMenuDefaultItem_0=cast=(HMENU)
-OS_SetMenuDefaultItem_1=
-OS_SetMenuDefaultItem_2=
-
-OS_SetMenuInfo=flags=dynamic
-OS_SetMenuInfo_0=cast=(HMENU)
-OS_SetMenuInfo_1=
-
-OS_SetMenuItemInfoA=
-OS_SetMenuItemInfoA_0=cast=(HMENU)
-OS_SetMenuItemInfoA_1=
-OS_SetMenuItemInfoA_2=
-OS_SetMenuItemInfoA_3=
-
-OS_SetMenuItemInfoW=
-OS_SetMenuItemInfoW_0=cast=(HMENU)
-OS_SetMenuItemInfoW_1=
-OS_SetMenuItemInfoW_2=
-OS_SetMenuItemInfoW_3=cast=(LPMENUITEMINFOW)
-
-OS_SetMetaRgn=
-OS_SetMetaRgn_0=cast=HDC
-
-OS_SetPaletteEntries=
-OS_SetPaletteEntries_0=cast=(HPALETTE)
-OS_SetPaletteEntries_1=
-OS_SetPaletteEntries_2=
-OS_SetPaletteEntries_3=cast=(PALETTEENTRY *),flags=no_out critical
-
-OS_SetParent=
-OS_SetParent_0=cast=(HWND)
-OS_SetParent_1=cast=(HWND)
-
-OS_SetPixel=
-OS_SetPixel_0=cast=(HDC)
-OS_SetPixel_1=
-OS_SetPixel_2=
-OS_SetPixel_3=
-
-OS_SetPolyFillMode=
-OS_SetPolyFillMode_0=cast=HDC
-OS_SetPolyFillMode_1=
-
-OS_SetPropA=
-OS_SetPropA_0=cast=HWND
-OS_SetPropA_1=cast=LPCTSTR
-OS_SetPropA_2=cast=(HANDLE)
-
-OS_SetPropW=
-OS_SetPropW_0=cast=HWND
-OS_SetPropW_1=cast=(LPCWSTR)
-OS_SetPropW_2=cast=HANDLE
-
-OS_SetROP2=
-OS_SetROP2_0=cast=(HDC)
-OS_SetROP2_1=
-
-OS_SetRect=
-OS_SetRect_0=flags=no_in
-OS_SetRect_1=
-OS_SetRect_2=
-OS_SetRect_3=
-OS_SetRect_4=
-
-OS_SetRectRgn=
-OS_SetRectRgn_0=cast=(HRGN)
-OS_SetRectRgn_1=
-OS_SetRectRgn_2=
-OS_SetRectRgn_3=
-OS_SetRectRgn_4=
-
-OS_SetScrollInfo=
-OS_SetScrollInfo_0=cast=(HWND)
-OS_SetScrollInfo_1=
-OS_SetScrollInfo_2=
-OS_SetScrollInfo_3=
-
-OS_SetStretchBltMode=
-OS_SetStretchBltMode_0=cast=(HDC)
-OS_SetStretchBltMode_1=
-
-OS_SetTextAlign=
-OS_SetTextAlign_0=cast=(HDC)
-OS_SetTextAlign_1=
-
-OS_SetTextColor=
-OS_SetTextColor_0=cast=(HDC)
-OS_SetTextColor_1=cast=(COLORREF)
-
-OS_SetTimer=
-OS_SetTimer_0=cast=(HWND)
-OS_SetTimer_1=
-OS_SetTimer_2=
-OS_SetTimer_3=cast=(TIMERPROC)
-
-OS_SetWindowLongA=
-OS_SetWindowLongA_0=cast=(HWND)
-OS_SetWindowLongA_1=
-OS_SetWindowLongA_2=
-
-OS_SetWindowLongW=
-OS_SetWindowLongW_0=cast=(HWND)
-OS_SetWindowLongW_1=
-OS_SetWindowLongW_2=
-
-OS_SetWindowOrgEx=
-OS_SetWindowOrgEx_0=cast=HDC
-OS_SetWindowOrgEx_1=
-OS_SetWindowOrgEx_2=
-OS_SetWindowOrgEx_3=
-
-OS_SetWindowPlacement=
-OS_SetWindowPlacement_0=cast=(HWND)
-OS_SetWindowPlacement_1=
-
-OS_SetWindowPos=
-OS_SetWindowPos_0=cast=(HWND)
-OS_SetWindowPos_1=cast=(HWND)
-OS_SetWindowPos_2=
-OS_SetWindowPos_3=
-OS_SetWindowPos_4=
-OS_SetWindowPos_5=
-OS_SetWindowPos_6=
-
-OS_SetWindowRgn=
-OS_SetWindowRgn_0=cast=HWND
-OS_SetWindowRgn_1=cast=HRGN
-OS_SetWindowRgn_2=
-
-OS_SetWindowTextA=
-OS_SetWindowTextA_0=cast=(HWND)
-OS_SetWindowTextA_1=cast=(LPSTR)
-
-OS_SetWindowTextW=
-OS_SetWindowTextW_0=cast=(HWND)
-OS_SetWindowTextW_1=cast=(LPWSTR)
-
-OS_SetWindowsHookExA=
-OS_SetWindowsHookExA_0=
-OS_SetWindowsHookExA_1=cast=(HOOKPROC)
-OS_SetWindowsHookExA_2=cast=(HINSTANCE)
-OS_SetWindowsHookExA_3=
-
-OS_SetWindowsHookExW=
-OS_SetWindowsHookExW_0=
-OS_SetWindowsHookExW_1=cast=(HOOKPROC)
-OS_SetWindowsHookExW_2=cast=(HINSTANCE)
-OS_SetWindowsHookExW_3=
-
-OS_SetWorldTransform=
-OS_SetWorldTransform_0=cast=HDC
-OS_SetWorldTransform_1=cast=XFORM *
-
-OS_ShellExecuteExA=
-OS_ShellExecuteExA_0=
-
-OS_ShellExecuteExW=
-OS_ShellExecuteExW_0=cast=(LPSHELLEXECUTEINFOW)
-
-OS_Shell_NotifyIconA=
-OS_Shell_NotifyIconA_0=
-OS_Shell_NotifyIconA_1=
-
-OS_Shell_NotifyIconW=
-OS_Shell_NotifyIconW_0=
-OS_Shell_NotifyIconW_1=
-
-OS_ShowCaret=
-OS_ShowCaret_0=cast=(HWND)
-
-OS_ShowOwnedPopups=
-OS_ShowOwnedPopups_0=cast=(HWND)
-OS_ShowOwnedPopups_1=
-
-OS_ShowScrollBar=
-OS_ShowScrollBar_0=cast=(HWND)
-OS_ShowScrollBar_1=
-OS_ShowScrollBar_2=
-
-OS_ShowWindow=
-OS_ShowWindow_0=cast=(HWND)
-OS_ShowWindow_1=
-
-OS_SipGetInfo=
-OS_SipGetInfo_0=
-
-OS_StartDocA=
-OS_StartDocA_0=cast=(HDC)
-OS_StartDocA_1=
-
-OS_StartDocW=
-OS_StartDocW_0=cast=(HDC)
-OS_StartDocW_1=cast=(LPDOCINFOW)
-
-OS_StartPage=
-OS_StartPage_0=cast=(HDC)
-
-OS_StretchBlt=
-OS_StretchBlt_0=cast=(HDC)
-OS_StretchBlt_1=
-OS_StretchBlt_2=
-OS_StretchBlt_3=
-OS_StretchBlt_4=
-OS_StretchBlt_5=cast=(HDC)
-OS_StretchBlt_6=
-OS_StretchBlt_7=
-OS_StretchBlt_8=
-OS_StretchBlt_9=
-OS_StretchBlt_10=
-
-OS_StrokePath=
-OS_StrokePath_0=cast=(HDC)
-
-OS_SystemParametersInfoA__IILorg_eclipse_swt_internal_win32_HIGHCONTRAST_2I=
-OS_SystemParametersInfoA__IILorg_eclipse_swt_internal_win32_HIGHCONTRAST_2I_0=
-OS_SystemParametersInfoA__IILorg_eclipse_swt_internal_win32_HIGHCONTRAST_2I_1=
-OS_SystemParametersInfoA__IILorg_eclipse_swt_internal_win32_HIGHCONTRAST_2I_2=
-OS_SystemParametersInfoA__IILorg_eclipse_swt_internal_win32_HIGHCONTRAST_2I_3=
-
-OS_SystemParametersInfoA__IILorg_eclipse_swt_internal_win32_NONCLIENTMETRICSA_2I=
-OS_SystemParametersInfoA__IILorg_eclipse_swt_internal_win32_NONCLIENTMETRICSA_2I_0=
-OS_SystemParametersInfoA__IILorg_eclipse_swt_internal_win32_NONCLIENTMETRICSA_2I_1=
-OS_SystemParametersInfoA__IILorg_eclipse_swt_internal_win32_NONCLIENTMETRICSA_2I_2=
-OS_SystemParametersInfoA__IILorg_eclipse_swt_internal_win32_NONCLIENTMETRICSA_2I_3=
-
-OS_SystemParametersInfoA__IILorg_eclipse_swt_internal_win32_RECT_2I=
-OS_SystemParametersInfoA__IILorg_eclipse_swt_internal_win32_RECT_2I_0=
-OS_SystemParametersInfoA__IILorg_eclipse_swt_internal_win32_RECT_2I_1=
-OS_SystemParametersInfoA__IILorg_eclipse_swt_internal_win32_RECT_2I_2=
-OS_SystemParametersInfoA__IILorg_eclipse_swt_internal_win32_RECT_2I_3=
-
-OS_SystemParametersInfoA__II_3II=
-OS_SystemParametersInfoA__II_3II_0=
-OS_SystemParametersInfoA__II_3II_1=
-OS_SystemParametersInfoA__II_3II_2=
-OS_SystemParametersInfoA__II_3II_3=
-
-OS_SystemParametersInfoW__IILorg_eclipse_swt_internal_win32_HIGHCONTRAST_2I=
-OS_SystemParametersInfoW__IILorg_eclipse_swt_internal_win32_HIGHCONTRAST_2I_0=
-OS_SystemParametersInfoW__IILorg_eclipse_swt_internal_win32_HIGHCONTRAST_2I_1=
-OS_SystemParametersInfoW__IILorg_eclipse_swt_internal_win32_HIGHCONTRAST_2I_2=
-OS_SystemParametersInfoW__IILorg_eclipse_swt_internal_win32_HIGHCONTRAST_2I_3=
-
-OS_SystemParametersInfoW__IILorg_eclipse_swt_internal_win32_NONCLIENTMETRICSW_2I=
-OS_SystemParametersInfoW__IILorg_eclipse_swt_internal_win32_NONCLIENTMETRICSW_2I_0=
-OS_SystemParametersInfoW__IILorg_eclipse_swt_internal_win32_NONCLIENTMETRICSW_2I_1=
-OS_SystemParametersInfoW__IILorg_eclipse_swt_internal_win32_NONCLIENTMETRICSW_2I_2=
-OS_SystemParametersInfoW__IILorg_eclipse_swt_internal_win32_NONCLIENTMETRICSW_2I_3=
-
-OS_SystemParametersInfoW__IILorg_eclipse_swt_internal_win32_RECT_2I=
-OS_SystemParametersInfoW__IILorg_eclipse_swt_internal_win32_RECT_2I_0=
-OS_SystemParametersInfoW__IILorg_eclipse_swt_internal_win32_RECT_2I_1=
-OS_SystemParametersInfoW__IILorg_eclipse_swt_internal_win32_RECT_2I_2=
-OS_SystemParametersInfoW__IILorg_eclipse_swt_internal_win32_RECT_2I_3=
-
-OS_SystemParametersInfoW__II_3II=
-OS_SystemParametersInfoW__II_3II_0=
-OS_SystemParametersInfoW__II_3II_1=
-OS_SystemParametersInfoW__II_3II_2=
-OS_SystemParametersInfoW__II_3II_3=
-
-OS_ToAscii=
-OS_ToAscii_0=
-OS_ToAscii_1=
-OS_ToAscii_2=cast=(PBYTE)
-OS_ToAscii_3=cast=(LPWORD)
-OS_ToAscii_4=
-
-OS_ToUnicode=
-OS_ToUnicode_0=
-OS_ToUnicode_1=
-OS_ToUnicode_2=cast=(PBYTE)
-OS_ToUnicode_3=cast=(LPWSTR)
-OS_ToUnicode_4=
-OS_ToUnicode_5=
-
-OS_TrackMouseEvent=
-OS_TrackMouseEvent_0=
-
-OS_TrackPopupMenu=
-OS_TrackPopupMenu_0=cast=(HMENU)
-OS_TrackPopupMenu_1=
-OS_TrackPopupMenu_2=
-OS_TrackPopupMenu_3=
-OS_TrackPopupMenu_4=
-OS_TrackPopupMenu_5=cast=(HWND)
-OS_TrackPopupMenu_6=
-
-OS_TranslateAcceleratorA=
-OS_TranslateAcceleratorA_0=cast=(HWND)
-OS_TranslateAcceleratorA_1=cast=(HACCEL)
-OS_TranslateAcceleratorA_2=
-
-OS_TranslateAcceleratorW=
-OS_TranslateAcceleratorW_0=cast=(HWND)
-OS_TranslateAcceleratorW_1=cast=(HACCEL)
-OS_TranslateAcceleratorW_2=
-
-OS_TranslateCharsetInfo=
-OS_TranslateCharsetInfo_0=cast=(DWORD *)
-OS_TranslateCharsetInfo_1=cast=(LPCHARSETINFO)
-OS_TranslateCharsetInfo_2=
-
-OS_TranslateMDISysAccel=
-OS_TranslateMDISysAccel_0=cast=(HWND)
-OS_TranslateMDISysAccel_1=cast=(LPMSG)
-
-OS_TranslateMessage=
-OS_TranslateMessage_0=
-
-OS_TransparentBlt=flags=dynamic
-OS_TransparentBlt_0=
-OS_TransparentBlt_1=
-OS_TransparentBlt_2=
-OS_TransparentBlt_3=
-OS_TransparentBlt_4=
-OS_TransparentBlt_5=
-OS_TransparentBlt_6=
-OS_TransparentBlt_7=
-OS_TransparentBlt_8=
-OS_TransparentBlt_9=
-OS_TransparentBlt_10=
-
-OS_TransparentImage=
-OS_TransparentImage_0=cast=(HDC)
-OS_TransparentImage_1=
-OS_TransparentImage_2=
-OS_TransparentImage_3=
-OS_TransparentImage_4=
-OS_TransparentImage_5=cast=(HANDLE)
-OS_TransparentImage_6=
-OS_TransparentImage_7=
-OS_TransparentImage_8=
-OS_TransparentImage_9=
-OS_TransparentImage_10=cast=(COLORREF)
-
-OS_UnhookWindowsHookEx=
-OS_UnhookWindowsHookEx_0=cast=(HHOOK)
-
-OS_UnregisterClassA=
-OS_UnregisterClassA_0=cast=(LPSTR)
-OS_UnregisterClassA_1=cast=(HINSTANCE)
-
-OS_UnregisterClassW=
-OS_UnregisterClassW_0=cast=(LPWSTR)
-OS_UnregisterClassW_1=cast=(HINSTANCE)
-
-OS_UpdateWindow=
-OS_UpdateWindow_0=cast=(HWND)
-
-OS_ValidateRect=
-OS_ValidateRect_0=cast=(HWND)
-OS_ValidateRect_1=
-
-OS_VkKeyScanA=
-OS_VkKeyScanA_0=cast=(TCHAR)
-
-OS_VkKeyScanW=
-OS_VkKeyScanW_0=cast=(WCHAR)
-
-OS_VtblCall__II=
-OS_VtblCall__II_0=
-OS_VtblCall__II_1=
-
-OS_VtblCall__III=
-OS_VtblCall__III_0=
-OS_VtblCall__III_1=
-OS_VtblCall__III_2=
-
-OS_VtblCall__IIIII_3I=
-OS_VtblCall__IIIII_3I_0=
-OS_VtblCall__IIIII_3I_1=
-OS_VtblCall__IIIII_3I_2=
-OS_VtblCall__IIIII_3I_3=
-OS_VtblCall__IIIII_3I_4=
-OS_VtblCall__IIIII_3I_5=
-
-OS_VtblCall__II_3CII_3I_3I=
-OS_VtblCall__II_3CII_3I_3I_0=
-OS_VtblCall__II_3CII_3I_3I_1=
-OS_VtblCall__II_3CII_3I_3I_2=
-OS_VtblCall__II_3CII_3I_3I_3=
-OS_VtblCall__II_3CII_3I_3I_4=
-OS_VtblCall__II_3CII_3I_3I_5=
-OS_VtblCall__II_3CII_3I_3I_6=
-
-OS_WaitMessage=
-
-OS_WideCharToMultiByte__II_3CIII_3B_3Z=
-OS_WideCharToMultiByte__II_3CIII_3B_3Z_0=
-OS_WideCharToMultiByte__II_3CIII_3B_3Z_1=
-OS_WideCharToMultiByte__II_3CIII_3B_3Z_2=cast=(LPCWSTR),flags=no_out critical
-OS_WideCharToMultiByte__II_3CIII_3B_3Z_3=
-OS_WideCharToMultiByte__II_3CIII_3B_3Z_4=cast=(LPSTR)
-OS_WideCharToMultiByte__II_3CIII_3B_3Z_5=
-OS_WideCharToMultiByte__II_3CIII_3B_3Z_6=cast=(LPCSTR)
-OS_WideCharToMultiByte__II_3CIII_3B_3Z_7=cast=(LPBOOL)
-
-OS_WideCharToMultiByte__II_3CI_3BI_3B_3Z=
-OS_WideCharToMultiByte__II_3CI_3BI_3B_3Z_0=
-OS_WideCharToMultiByte__II_3CI_3BI_3B_3Z_1=
-OS_WideCharToMultiByte__II_3CI_3BI_3B_3Z_2=cast=(LPCWSTR),flags=no_out critical
-OS_WideCharToMultiByte__II_3CI_3BI_3B_3Z_3=
-OS_WideCharToMultiByte__II_3CI_3BI_3B_3Z_4=cast=(LPSTR),flags=no_in critical
-OS_WideCharToMultiByte__II_3CI_3BI_3B_3Z_5=
-OS_WideCharToMultiByte__II_3CI_3BI_3B_3Z_6=cast=(LPCSTR)
-OS_WideCharToMultiByte__II_3CI_3BI_3B_3Z_7=cast=(LPBOOL)
-
-OS_WindowFromDC=
-OS_WindowFromDC_0=cast=(HDC)
-
-OS_WindowFromPoint=
-OS_WindowFromPoint_0=flags=struct
-
-OS_strlen=
-OS_strlen_0=cast=(const char *)
-
-OS_wcslen=
-OS_wcslen_0=cast=(const wchar_t *)
-
-
-org_eclipse_swt_internal_win32_OSVERSIONINFO=
-OSVERSIONINFO_dwOSVersionInfoSize=
-OSVERSIONINFO_dwMajorVersion=
-OSVERSIONINFO_dwMinorVersion=
-OSVERSIONINFO_dwBuildNumber=
-OSVERSIONINFO_dwPlatformId=
-
-org_eclipse_swt_internal_win32_OSVERSIONINFOA=
-OSVERSIONINFOA_szCSDVersion=
-
-org_eclipse_swt_internal_win32_OSVERSIONINFOW=
-OSVERSIONINFOW_szCSDVersion=
-
-org_eclipse_swt_internal_win32_PAINTSTRUCT=
-PAINTSTRUCT_hdc=cast=(HDC)
-PAINTSTRUCT_fErase=
-PAINTSTRUCT_left=accessor=rcPaint.left
-PAINTSTRUCT_top=accessor=rcPaint.top
-PAINTSTRUCT_right=accessor=rcPaint.right
-PAINTSTRUCT_bottom=accessor=rcPaint.bottom
-PAINTSTRUCT_fRestore=
-PAINTSTRUCT_fIncUpdate=
-PAINTSTRUCT_rgbReserved=
-
-org_eclipse_swt_internal_win32_POINT=
-POINT_x=
-POINT_y=
-
-org_eclipse_swt_internal_win32_PRINTDLG=
-PRINTDLG_lStructSize=
-PRINTDLG_hwndOwner=cast=(HWND)
-PRINTDLG_hDevMode=cast=(HGLOBAL)
-PRINTDLG_hDevNames=cast=(HGLOBAL)
-PRINTDLG_hDC=cast=(HDC)
-PRINTDLG_Flags=
-PRINTDLG_nFromPage=
-PRINTDLG_nToPage=
-PRINTDLG_nMinPage=
-PRINTDLG_nMaxPage=
-PRINTDLG_nCopies=
-PRINTDLG_hInstance=cast=(HINSTANCE)
-PRINTDLG_lCustData=
-PRINTDLG_lpfnPrintHook=cast=(LPPRINTHOOKPROC)
-PRINTDLG_lpfnSetupHook=cast=(LPPRINTHOOKPROC)
-PRINTDLG_lpPrintTemplateName=cast=(LPCTSTR)
-PRINTDLG_lpSetupTemplateName=cast=(LPCTSTR)
-PRINTDLG_hPrintTemplate=cast=(HGLOBAL)
-PRINTDLG_hSetupTemplate=cast=(HGLOBAL)
-
-org_eclipse_swt_internal_win32_REBARBANDINFO=
-REBARBANDINFO_cbSize=
-REBARBANDINFO_fMask=
-REBARBANDINFO_fStyle=
-REBARBANDINFO_clrFore=
-REBARBANDINFO_clrBack=
-REBARBANDINFO_lpText=cast=(LPTSTR)
-REBARBANDINFO_cch=
-REBARBANDINFO_iImage=
-REBARBANDINFO_hwndChild=cast=(HWND)
-REBARBANDINFO_cxMinChild=
-REBARBANDINFO_cyMinChild=
-REBARBANDINFO_cx=
-REBARBANDINFO_hbmBack=cast=(HBITMAP)
-REBARBANDINFO_wID=
-REBARBANDINFO_cyChild=
-REBARBANDINFO_cyMaxChild=
-REBARBANDINFO_cyIntegral=
-REBARBANDINFO_cxIdeal=
-REBARBANDINFO_lParam=
-REBARBANDINFO_cxHeader=flags=no_wince
-
-org_eclipse_swt_internal_win32_RECT=
-RECT_left=
-RECT_top=
-RECT_right=
-RECT_bottom=
-
-org_eclipse_swt_internal_win32_SCRIPT_1ANALYSIS=
-SCRIPT_ANALYSIS_eScript=
-SCRIPT_ANALYSIS_fRTL=
-SCRIPT_ANALYSIS_fLayoutRTL=
-SCRIPT_ANALYSIS_fLinkBefore=
-SCRIPT_ANALYSIS_fLinkAfter=
-SCRIPT_ANALYSIS_fLogicalOrder=
-SCRIPT_ANALYSIS_fNoGlyphIndex=
-SCRIPT_ANALYSIS_s=
-
-org_eclipse_swt_internal_win32_SCRIPT_1CONTROL=
-SCRIPT_CONTROL_uDefaultLanguage=
-SCRIPT_CONTROL_fContextDigits=
-SCRIPT_CONTROL_fInvertPreBoundDir=
-SCRIPT_CONTROL_fInvertPostBoundDir=
-SCRIPT_CONTROL_fLinkStringBefore=
-SCRIPT_CONTROL_fLinkStringAfter=
-SCRIPT_CONTROL_fNeutralOverride=
-SCRIPT_CONTROL_fNumericOverride=
-SCRIPT_CONTROL_fLegacyBidiClass=
-SCRIPT_CONTROL_fReserved=
-
-org_eclipse_swt_internal_win32_SCRIPT_1FONTPROPERTIES=
-SCRIPT_FONTPROPERTIES_cBytes=
-SCRIPT_FONTPROPERTIES_wgBlank=
-SCRIPT_FONTPROPERTIES_wgDefault=
-SCRIPT_FONTPROPERTIES_wgInvalid=
-SCRIPT_FONTPROPERTIES_wgKashida=
-SCRIPT_FONTPROPERTIES_iKashidaWidth=
-
-org_eclipse_swt_internal_win32_SCRIPT_1ITEM=
-SCRIPT_ITEM_iCharPos=
-SCRIPT_ITEM_a=
-
-org_eclipse_swt_internal_win32_SCRIPT_1LOGATTR=
-SCRIPT_LOGATTR_fSoftBreak=
-SCRIPT_LOGATTR_fWhiteSpace=
-SCRIPT_LOGATTR_fCharStop=
-SCRIPT_LOGATTR_fWordStop=
-SCRIPT_LOGATTR_fInvalid=
-SCRIPT_LOGATTR_fReserved=
-
-org_eclipse_swt_internal_win32_SCRIPT_1PROPERTIES=
-SCRIPT_PROPERTIES_langid=
-SCRIPT_PROPERTIES_fNumeric=
-SCRIPT_PROPERTIES_fComplex=
-SCRIPT_PROPERTIES_fNeedsWordBreaking=
-SCRIPT_PROPERTIES_fNeedsCaretInfo=
-SCRIPT_PROPERTIES_bCharSet=
-SCRIPT_PROPERTIES_fControl=
-SCRIPT_PROPERTIES_fPrivateUseArea=
-SCRIPT_PROPERTIES_fNeedsCharacterJustify=
-SCRIPT_PROPERTIES_fInvalidGlyph=
-SCRIPT_PROPERTIES_fInvalidLogAttr=
-SCRIPT_PROPERTIES_fCDM=
-SCRIPT_PROPERTIES_fAmbiguousCharSet=
-SCRIPT_PROPERTIES_fClusterSizeVaries=
-SCRIPT_PROPERTIES_fRejectInvalid=
-
-org_eclipse_swt_internal_win32_SCRIPT_1STATE=
-SCRIPT_STATE_uBidiLevel=
-SCRIPT_STATE_fOverrideDirection=
-SCRIPT_STATE_fInhibitSymSwap=
-SCRIPT_STATE_fCharShape=
-SCRIPT_STATE_fDigitSubstitute=
-SCRIPT_STATE_fInhibitLigate=
-SCRIPT_STATE_fDisplayZWG=
-SCRIPT_STATE_fArabicNumContext=
-SCRIPT_STATE_fGcpClusters=
-SCRIPT_STATE_fReserved=
-SCRIPT_STATE_fEngineReserved=
-
-org_eclipse_swt_internal_win32_SCROLLINFO=
-SCROLLINFO_cbSize=
-SCROLLINFO_fMask=
-SCROLLINFO_nMin=
-SCROLLINFO_nMax=
-SCROLLINFO_nPage=
-SCROLLINFO_nPos=
-SCROLLINFO_nTrackPos=
-
-org_eclipse_swt_internal_win32_SHACTIVATEINFO=
-SHACTIVATEINFO_cbSize=
-SHACTIVATEINFO_hwndLastFocus=cast=(HWND)
-SHACTIVATEINFO_fSipUp=
-SHACTIVATEINFO_fSipOnDeactivation=
-SHACTIVATEINFO_fActive=
-SHACTIVATEINFO_fReserved=
-
-org_eclipse_swt_internal_win32_SHELLEXECUTEINFO=
-SHELLEXECUTEINFO_cbSize=
-SHELLEXECUTEINFO_fMask=
-SHELLEXECUTEINFO_hwnd=cast=(HWND)
-SHELLEXECUTEINFO_lpVerb=cast=(LPCTSTR)
-SHELLEXECUTEINFO_lpFile=cast=(LPCTSTR)
-SHELLEXECUTEINFO_lpParameters=cast=(LPCTSTR)
-SHELLEXECUTEINFO_lpDirectory=cast=(LPCTSTR)
-SHELLEXECUTEINFO_nShow=
-SHELLEXECUTEINFO_hInstApp=cast=(HINSTANCE)
-SHELLEXECUTEINFO_lpIDList=cast=(LPVOID)
-SHELLEXECUTEINFO_lpClass=cast=(LPCTSTR)
-SHELLEXECUTEINFO_hkeyClass=cast=(HKEY)
-SHELLEXECUTEINFO_dwHotKey=
-SHELLEXECUTEINFO_hIcon=cast=(HANDLE)
-SHELLEXECUTEINFO_hProcess=cast=(HANDLE)
-
-org_eclipse_swt_internal_win32_SHMENUBARINFO=
-SHMENUBARINFO_cbSize=
-SHMENUBARINFO_hwndParent=cast=(HWND)
-SHMENUBARINFO_dwFlags=
-SHMENUBARINFO_nToolBarId=
-SHMENUBARINFO_hInstRes=cast=(HINSTANCE)
-SHMENUBARINFO_nBmpId=
-SHMENUBARINFO_cBmpImages=
-SHMENUBARINFO_hwndMB=cast=(HWND)
-
-org_eclipse_swt_internal_win32_SHRGINFO=
-SHRGINFO_cbSize=
-SHRGINFO_hwndClient=cast=(HWND)
-SHRGINFO_ptDown_x=accessor=ptDown.x
-SHRGINFO_ptDown_y=accessor=ptDown.y
-SHRGINFO_dwFlags=
-
-org_eclipse_swt_internal_win32_SIPINFO=
-SIPINFO_cbSize=
-SIPINFO_fdwFlags=
-SIPINFO_rcVisibleDesktop_left=accessor=rcVisibleDesktop.left
-SIPINFO_rcVisibleDesktop_top=accessor=rcVisibleDesktop.top
-SIPINFO_rcVisibleDesktop_right=accessor=rcVisibleDesktop.right
-SIPINFO_rcVisibleDesktop_bottom=accessor=rcVisibleDesktop.bottom
-SIPINFO_rcSipRect_left=accessor=rcSipRect.left
-SIPINFO_rcSipRect_top=accessor=rcSipRect.top
-SIPINFO_rcSipRect_right=accessor=rcSipRect.right
-SIPINFO_rcSipRect_bottom=accessor=rcSipRect.bottom
-SIPINFO_dwImDataSize=
-SIPINFO_pvImData=cast=(void *)
-
-org_eclipse_swt_internal_win32_SIZE=
-SIZE_cx=
-SIZE_cy=
-
-org_eclipse_swt_internal_win32_TBBUTTON=
-TBBUTTON_iBitmap=
-TBBUTTON_idCommand=
-TBBUTTON_fsState=
-TBBUTTON_fsStyle=
-TBBUTTON_dwData=
-TBBUTTON_iString=
-
-org_eclipse_swt_internal_win32_TBBUTTONINFO=
-TBBUTTONINFO_cbSize=
-TBBUTTONINFO_dwMask=
-TBBUTTONINFO_idCommand=
-TBBUTTONINFO_iImage=
-TBBUTTONINFO_fsState=
-TBBUTTONINFO_fsStyle=
-TBBUTTONINFO_cx=
-TBBUTTONINFO_lParam=
-TBBUTTONINFO_pszText=cast=(LPTSTR)
-TBBUTTONINFO_cchText=
-
-org_eclipse_swt_internal_win32_TCHAR=flags=no_gen
-TCHAR_chars=
-TCHAR_bytes=
-
-org_eclipse_swt_internal_win32_TCITEM=
-TCITEM_mask=
-TCITEM_dwState=
-TCITEM_dwStateMask=
-TCITEM_pszText=cast=(LPTSTR)
-TCITEM_cchTextMax=
-TCITEM_iImage=
-TCITEM_lParam=
-
-org_eclipse_swt_internal_win32_TEXTMETRIC=
-TEXTMETRIC_tmHeight=
-TEXTMETRIC_tmAscent=
-TEXTMETRIC_tmDescent=
-TEXTMETRIC_tmInternalLeading=
-TEXTMETRIC_tmExternalLeading=
-TEXTMETRIC_tmAveCharWidth=
-TEXTMETRIC_tmMaxCharWidth=
-TEXTMETRIC_tmWeight=
-TEXTMETRIC_tmOverhang=
-TEXTMETRIC_tmDigitizedAspectX=
-TEXTMETRIC_tmDigitizedAspectY=
-TEXTMETRIC_tmItalic=
-TEXTMETRIC_tmUnderlined=
-TEXTMETRIC_tmStruckOut=
-TEXTMETRIC_tmPitchAndFamily=
-TEXTMETRIC_tmCharSet=
-
-org_eclipse_swt_internal_win32_TEXTMETRICA=
-TEXTMETRICA_tmFirstChar=
-TEXTMETRICA_tmLastChar=
-TEXTMETRICA_tmDefaultChar=
-TEXTMETRICA_tmBreakChar=
-
-org_eclipse_swt_internal_win32_TEXTMETRICW=
-TEXTMETRICW_tmFirstChar=
-TEXTMETRICW_tmLastChar=
-TEXTMETRICW_tmDefaultChar=
-TEXTMETRICW_tmBreakChar=
-
-org_eclipse_swt_internal_win32_TOOLINFO=
-TOOLINFO_cbSize=
-TOOLINFO_uFlags=
-TOOLINFO_hwnd=cast=(HWND)
-TOOLINFO_uId=
-TOOLINFO_left=accessor=rect.left
-TOOLINFO_top=accessor=rect.top
-TOOLINFO_right=accessor=rect.right
-TOOLINFO_bottom=accessor=rect.bottom
-TOOLINFO_hinst=cast=(HINSTANCE)
-TOOLINFO_lpszText=cast=(LPTSTR)
-TOOLINFO_lParam=
-
-org_eclipse_swt_internal_win32_TRACKMOUSEEVENT=
-TRACKMOUSEEVENT_cbSize=
-TRACKMOUSEEVENT_dwFlags=
-TRACKMOUSEEVENT_hwndTrack=cast=(HWND)
-TRACKMOUSEEVENT_dwHoverTime=
-
-org_eclipse_swt_internal_win32_TRIVERTEX=
-TRIVERTEX_x=
-TRIVERTEX_y=
-TRIVERTEX_Red=
-TRIVERTEX_Green=
-TRIVERTEX_Blue=
-TRIVERTEX_Alpha=
-
-org_eclipse_swt_internal_win32_TVHITTESTINFO=
-TVHITTESTINFO_x=accessor=pt.x
-TVHITTESTINFO_y=accessor=pt.y
-TVHITTESTINFO_flags=
-TVHITTESTINFO_hItem=cast=(HTREEITEM)
-
-org_eclipse_swt_internal_win32_TVINSERTSTRUCT=
-TVINSERTSTRUCT_hParent=cast=(HTREEITEM)
-TVINSERTSTRUCT_hInsertAfter=cast=(HTREEITEM)
-TVINSERTSTRUCT_mask=accessor=item.mask
-TVINSERTSTRUCT_hItem=accessor=item.hItem,cast=(HTREEITEM)
-TVINSERTSTRUCT_state=accessor=item.state
-TVINSERTSTRUCT_stateMask=accessor=item.stateMask
-TVINSERTSTRUCT_pszText=accessor=item.pszText,cast=(LPTSTR)
-TVINSERTSTRUCT_cchTextMax=accessor=item.cchTextMax
-TVINSERTSTRUCT_iImage=accessor=item.iImage
-TVINSERTSTRUCT_iSelectedImage=accessor=item.iSelectedImage
-TVINSERTSTRUCT_cChildren=accessor=item.cChildren
-TVINSERTSTRUCT_lParam=accessor=item.lParam
-TVINSERTSTRUCT_iIntegral=accessor=itemex.iIntegral,flags=no_wince
-
-org_eclipse_swt_internal_win32_TVITEM=
-TVITEM_mask=
-TVITEM_hItem=cast=(HTREEITEM)
-TVITEM_state=
-TVITEM_stateMask=
-TVITEM_pszText=cast=(LPTSTR)
-TVITEM_cchTextMax=
-TVITEM_iImage=
-TVITEM_iSelectedImage=
-TVITEM_cChildren=
-TVITEM_lParam=
-
-org_eclipse_swt_internal_win32_TVITEMEX=
-TVITEMEX_iIntegral=
-
-org_eclipse_swt_internal_win32_UDACCEL=
-UDACCEL_nSec=
-UDACCEL_nInc=
-
-org_eclipse_swt_internal_win32_WINDOWPLACEMENT=
-WINDOWPLACEMENT_length=
-WINDOWPLACEMENT_flags=
-WINDOWPLACEMENT_showCmd=
-WINDOWPLACEMENT_ptMinPosition_x=accessor=ptMinPosition.x
-WINDOWPLACEMENT_ptMinPosition_y=accessor=ptMinPosition.y
-WINDOWPLACEMENT_ptMaxPosition_x=accessor=ptMaxPosition.x
-WINDOWPLACEMENT_ptMaxPosition_y=accessor=ptMaxPosition.y
-WINDOWPLACEMENT_left=accessor=rcNormalPosition.left
-WINDOWPLACEMENT_top=accessor=rcNormalPosition.top
-WINDOWPLACEMENT_right=accessor=rcNormalPosition.right
-WINDOWPLACEMENT_bottom=accessor=rcNormalPosition.bottom
-
-org_eclipse_swt_internal_win32_WINDOWPOS=
-WINDOWPOS_hwnd=cast=(HWND)
-WINDOWPOS_hwndInsertAfter=cast=(HWND)
-WINDOWPOS_x=
-WINDOWPOS_y=
-WINDOWPOS_cx=
-WINDOWPOS_cy=
-WINDOWPOS_flags=
-
-org_eclipse_swt_internal_win32_WNDCLASS=
-WNDCLASS_style=
-WNDCLASS_lpfnWndProc=cast=(WNDPROC)
-WNDCLASS_cbClsExtra=
-WNDCLASS_cbWndExtra=
-WNDCLASS_hInstance=cast=(HINSTANCE)
-WNDCLASS_hIcon=cast=(HICON)
-WNDCLASS_hCursor=cast=(HCURSOR)
-WNDCLASS_hbrBackground=cast=(HBRUSH)
-WNDCLASS_lpszMenuName=cast=(LPCTSTR)
-WNDCLASS_lpszClassName=cast=(LPCTSTR)
-
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.opengl.GL.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.opengl.GL.properties
deleted file mode 100644
index 98e27b8..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.opengl.GL.properties
+++ /dev/null
@@ -1,1776 +0,0 @@
-###############################################################################
-# Copyright (c) 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
-###############################################################################
-org_eclipse_swt_opengl_GL=
-GL_glAccum=
-GL_glAccum_0=
-GL_glAccum_1=
-
-GL_glAlphaFunc=
-GL_glAlphaFunc_0=
-GL_glAlphaFunc_1=
-
-GL_glAreTexturesResident=
-GL_glAreTexturesResident_0=
-GL_glAreTexturesResident_1=cast=(const GLuint *),flags=critical
-GL_glAreTexturesResident_2=flags=critical
-
-GL_glArrayElement=
-GL_glArrayElement_0=
-
-GL_glBegin=
-GL_glBegin_0=
-
-GL_glBindTexture=
-GL_glBindTexture_0=
-GL_glBindTexture_1=
-
-GL_glBitmap=
-GL_glBitmap_0=
-GL_glBitmap_1=
-GL_glBitmap_2=
-GL_glBitmap_3=
-GL_glBitmap_4=
-GL_glBitmap_5=
-GL_glBitmap_6=cast=(const GLubyte *),flags=critical
-
-GL_glBlendFunc=
-GL_glBlendFunc_0=
-GL_glBlendFunc_1=
-
-GL_glCallList=
-GL_glCallList_0=
-
-GL_glCallLists__II_3B=
-GL_glCallLists__II_3B_0=
-GL_glCallLists__II_3B_1=
-GL_glCallLists__II_3B_2=
-
-GL_glCallLists__II_3C=
-GL_glCallLists__II_3C_0=
-GL_glCallLists__II_3C_1=
-GL_glCallLists__II_3C_2=
-
-GL_glCallLists__II_3I=
-GL_glCallLists__II_3I_0=
-GL_glCallLists__II_3I_1=
-GL_glCallLists__II_3I_2=
-
-GL_glClear=
-GL_glClear_0=
-
-GL_glClearAccum=
-GL_glClearAccum_0=
-GL_glClearAccum_1=
-GL_glClearAccum_2=
-GL_glClearAccum_3=
-
-GL_glClearColor=
-GL_glClearColor_0=
-GL_glClearColor_1=
-GL_glClearColor_2=
-GL_glClearColor_3=
-
-GL_glClearDepth=
-GL_glClearDepth_0=
-
-GL_glClearIndex=
-GL_glClearIndex_0=
-
-GL_glClearStencil=
-GL_glClearStencil_0=
-
-GL_glClipPlane=
-GL_glClipPlane_0=
-GL_glClipPlane_1=flags=critical
-
-GL_glColor3b=
-GL_glColor3b_0=
-GL_glColor3b_1=
-GL_glColor3b_2=
-
-GL_glColor3bv=
-GL_glColor3bv_0=flags=critical
-
-GL_glColor3d=
-GL_glColor3d_0=
-GL_glColor3d_1=
-GL_glColor3d_2=
-
-GL_glColor3dv=
-GL_glColor3dv_0=flags=critical
-
-GL_glColor3f=
-GL_glColor3f_0=
-GL_glColor3f_1=
-GL_glColor3f_2=
-
-GL_glColor3fv=
-GL_glColor3fv_0=flags=critical
-
-GL_glColor3i=
-GL_glColor3i_0=
-GL_glColor3i_1=
-GL_glColor3i_2=
-
-GL_glColor3iv=
-GL_glColor3iv_0=flags=critical
-
-GL_glColor3s=
-GL_glColor3s_0=
-GL_glColor3s_1=
-GL_glColor3s_2=
-
-GL_glColor3sv=
-GL_glColor3sv_0=flags=critical
-
-GL_glColor3ub=
-GL_glColor3ub_0=
-GL_glColor3ub_1=
-GL_glColor3ub_2=
-
-GL_glColor3ubv=
-GL_glColor3ubv_0=cast=(const GLubyte *),flags=critical
-
-GL_glColor3ui=
-GL_glColor3ui_0=
-GL_glColor3ui_1=
-GL_glColor3ui_2=
-
-GL_glColor3uiv=
-GL_glColor3uiv_0=cast=(const GLuint *),flags=critical
-
-GL_glColor3us=
-GL_glColor3us_0=
-GL_glColor3us_1=
-GL_glColor3us_2=
-
-GL_glColor3usv=
-GL_glColor3usv_0=cast=(const GLushort *),flags=critical
-
-GL_glColor4b=
-GL_glColor4b_0=
-GL_glColor4b_1=
-GL_glColor4b_2=
-GL_glColor4b_3=
-
-GL_glColor4bv=
-GL_glColor4bv_0=flags=critical
-
-GL_glColor4d=
-GL_glColor4d_0=
-GL_glColor4d_1=
-GL_glColor4d_2=
-GL_glColor4d_3=
-
-GL_glColor4dv=
-GL_glColor4dv_0=flags=critical
-
-GL_glColor4f=
-GL_glColor4f_0=
-GL_glColor4f_1=
-GL_glColor4f_2=
-GL_glColor4f_3=
-
-GL_glColor4fv=
-GL_glColor4fv_0=flags=critical
-
-GL_glColor4i=
-GL_glColor4i_0=
-GL_glColor4i_1=
-GL_glColor4i_2=
-GL_glColor4i_3=
-
-GL_glColor4iv=
-GL_glColor4iv_0=flags=critical
-
-GL_glColor4s=
-GL_glColor4s_0=
-GL_glColor4s_1=
-GL_glColor4s_2=
-GL_glColor4s_3=
-
-GL_glColor4ub=
-GL_glColor4ub_0=
-GL_glColor4ub_1=
-GL_glColor4ub_2=
-GL_glColor4ub_3=
-
-GL_glColor4ubv=
-GL_glColor4ubv_0=
-
-GL_glColor4ui=
-GL_glColor4ui_0=
-GL_glColor4ui_1=
-GL_glColor4ui_2=
-GL_glColor4ui_3=
-
-GL_glColor4uiv=
-GL_glColor4uiv_0=cast=(const GLuint *),flags=critical
-
-GL_glColor4us=
-GL_glColor4us_0=
-GL_glColor4us_1=
-GL_glColor4us_2=
-GL_glColor4us_3=
-
-GL_glColor4usv=
-GL_glColor4usv_0=cast=(const GLushort *),flags=critical
-
-GL_glColorMask=
-GL_glColorMask_0=
-GL_glColorMask_1=
-GL_glColorMask_2=
-GL_glColorMask_3=
-
-GL_glColorMaterial=
-GL_glColorMaterial_0=
-GL_glColorMaterial_1=
-
-GL_glColorPointer=
-GL_glColorPointer_0=
-GL_glColorPointer_1=
-GL_glColorPointer_2=
-GL_glColorPointer_3=flags=critical
-
-GL_glCopyPixels=
-GL_glCopyPixels_0=
-GL_glCopyPixels_1=
-GL_glCopyPixels_2=
-GL_glCopyPixels_3=
-GL_glCopyPixels_4=
-
-GL_glCopyTexImage1D=
-GL_glCopyTexImage1D_0=
-GL_glCopyTexImage1D_1=
-GL_glCopyTexImage1D_2=
-GL_glCopyTexImage1D_3=
-GL_glCopyTexImage1D_4=
-GL_glCopyTexImage1D_5=
-GL_glCopyTexImage1D_6=
-
-GL_glCopyTexImage2D=
-GL_glCopyTexImage2D_0=
-GL_glCopyTexImage2D_1=
-GL_glCopyTexImage2D_2=
-GL_glCopyTexImage2D_3=
-GL_glCopyTexImage2D_4=
-GL_glCopyTexImage2D_5=
-GL_glCopyTexImage2D_6=
-GL_glCopyTexImage2D_7=
-
-GL_glCopyTexSubImage1D=
-GL_glCopyTexSubImage1D_0=
-GL_glCopyTexSubImage1D_1=
-GL_glCopyTexSubImage1D_2=
-GL_glCopyTexSubImage1D_3=
-GL_glCopyTexSubImage1D_4=
-GL_glCopyTexSubImage1D_5=
-
-GL_glCopyTexSubImage2D=
-GL_glCopyTexSubImage2D_0=
-GL_glCopyTexSubImage2D_1=
-GL_glCopyTexSubImage2D_2=
-GL_glCopyTexSubImage2D_3=
-GL_glCopyTexSubImage2D_4=
-GL_glCopyTexSubImage2D_5=
-GL_glCopyTexSubImage2D_6=
-GL_glCopyTexSubImage2D_7=
-
-GL_glCullFace=
-GL_glCullFace_0=
-
-GL_glDeleteLists=
-GL_glDeleteLists_0=
-GL_glDeleteLists_1=
-
-GL_glDeleteTextures=
-GL_glDeleteTextures_0=
-GL_glDeleteTextures_1=cast=(const GLuint *),flags=critical
-
-GL_glDepthFunc=
-GL_glDepthFunc_0=
-
-GL_glDepthMask=
-GL_glDepthMask_0=
-
-GL_glDepthRange=
-GL_glDepthRange_0=
-GL_glDepthRange_1=
-
-GL_glDisable=
-GL_glDisable_0=
-
-GL_glDisableClientState=
-GL_glDisableClientState_0=
-
-GL_glDrawArrays=
-GL_glDrawArrays_0=
-GL_glDrawArrays_1=
-GL_glDrawArrays_2=
-
-GL_glDrawBuffer=
-GL_glDrawBuffer_0=
-
-GL_glDrawElements=
-GL_glDrawElements_0=
-GL_glDrawElements_1=
-GL_glDrawElements_2=
-GL_glDrawElements_3=flags=critical
-
-GL_glDrawPixels=
-GL_glDrawPixels_0=
-GL_glDrawPixels_1=
-GL_glDrawPixels_2=
-GL_glDrawPixels_3=
-GL_glDrawPixels_4=flags=critical
-
-GL_glEdgeFlag=
-GL_glEdgeFlag_0=
-
-GL_glEdgeFlagPointer=
-GL_glEdgeFlagPointer_0=
-GL_glEdgeFlagPointer_1=flags=critical
-
-GL_glEdgeFlagv=
-GL_glEdgeFlagv_0=flags=critical
-
-GL_glEnable=
-GL_glEnable_0=
-
-GL_glEnableClientState=
-GL_glEnableClientState_0=
-
-GL_glEnd=
-
-GL_glEndList=
-
-GL_glEvalCoord1d=
-GL_glEvalCoord1d_0=
-
-GL_glEvalCoord1dv=
-GL_glEvalCoord1dv_0=flags=critical
-
-GL_glEvalCoord1f=
-GL_glEvalCoord1f_0=
-
-GL_glEvalCoord1fv=
-GL_glEvalCoord1fv_0=flags=critical
-
-GL_glEvalCoord2d=
-GL_glEvalCoord2d_0=
-GL_glEvalCoord2d_1=
-
-GL_glEvalCoord2dv=
-GL_glEvalCoord2dv_0=flags=critical
-
-GL_glEvalCoord2f=
-GL_glEvalCoord2f_0=
-GL_glEvalCoord2f_1=
-
-GL_glEvalCoord2fv=
-GL_glEvalCoord2fv_0=flags=critical
-
-GL_glEvalMesh1=
-GL_glEvalMesh1_0=
-GL_glEvalMesh1_1=
-GL_glEvalMesh1_2=
-
-GL_glEvalMesh2=
-GL_glEvalMesh2_0=
-GL_glEvalMesh2_1=
-GL_glEvalMesh2_2=
-GL_glEvalMesh2_3=
-GL_glEvalMesh2_4=
-
-GL_glEvalPoint1=
-GL_glEvalPoint1_0=
-
-GL_glEvalPoint2=
-GL_glEvalPoint2_0=
-GL_glEvalPoint2_1=
-
-GL_glFeedbackBuffer=
-GL_glFeedbackBuffer_0=
-GL_glFeedbackBuffer_1=
-GL_glFeedbackBuffer_2=flags=critical
-
-GL_glFinish=
-
-GL_glFlush=
-
-GL_glFogf=
-GL_glFogf_0=
-GL_glFogf_1=
-
-GL_glFogfv=
-GL_glFogfv_0=
-GL_glFogfv_1=flags=critical
-
-GL_glFogi=
-GL_glFogi_0=
-GL_glFogi_1=
-
-GL_glFogiv=
-GL_glFogiv_0=
-GL_glFogiv_1=flags=critical
-
-GL_glFrontFace=
-GL_glFrontFace_0=
-
-GL_glFrustum=
-GL_glFrustum_0=
-GL_glFrustum_1=
-GL_glFrustum_2=
-GL_glFrustum_3=
-GL_glFrustum_4=
-GL_glFrustum_5=
-
-GL_glGenLists=
-GL_glGenLists_0=
-
-GL_glGenTextures=
-GL_glGenTextures_0=
-GL_glGenTextures_1=cast=(GLuint *),flags=critical
-
-GL_glGetBooleanv=
-GL_glGetBooleanv_0=
-GL_glGetBooleanv_1=flags=critical
-
-GL_glGetClipPlane=
-GL_glGetClipPlane_0=
-GL_glGetClipPlane_1=flags=critical
-
-GL_glGetDoublev=
-GL_glGetDoublev_0=
-GL_glGetDoublev_1=flags=critical
-
-GL_glGetError=
-
-GL_glGetFloatv=
-GL_glGetFloatv_0=
-GL_glGetFloatv_1=flags=critical
-
-GL_glGetIntegerv=
-GL_glGetIntegerv_0=
-GL_glGetIntegerv_1=flags=critical
-
-GL_glGetLightfv=
-GL_glGetLightfv_0=
-GL_glGetLightfv_1=
-GL_glGetLightfv_2=flags=critical
-
-GL_glGetLightiv=
-GL_glGetLightiv_0=
-GL_glGetLightiv_1=
-GL_glGetLightiv_2=flags=critical
-
-GL_glGetMapdv=
-GL_glGetMapdv_0=
-GL_glGetMapdv_1=
-GL_glGetMapdv_2=flags=critical
-
-GL_glGetMapfv=
-GL_glGetMapfv_0=
-GL_glGetMapfv_1=
-GL_glGetMapfv_2=flags=critical
-
-GL_glGetMapiv=
-GL_glGetMapiv_0=
-GL_glGetMapiv_1=
-GL_glGetMapiv_2=flags=critical
-
-GL_glGetMaterialfv=
-GL_glGetMaterialfv_0=
-GL_glGetMaterialfv_1=
-GL_glGetMaterialfv_2=flags=critical
-
-GL_glGetMaterialiv=
-GL_glGetMaterialiv_0=
-GL_glGetMaterialiv_1=
-GL_glGetMaterialiv_2=flags=critical
-
-GL_glGetPixelMapfv=
-GL_glGetPixelMapfv_0=
-GL_glGetPixelMapfv_1=flags=critical
-
-GL_glGetPixelMapuiv=
-GL_glGetPixelMapuiv_0=
-GL_glGetPixelMapuiv_1=cast=(GLuint *),flags=critical
-
-GL_glGetPixelMapusv=
-GL_glGetPixelMapusv_0=
-GL_glGetPixelMapusv_1=cast=(GLushort *),flags=critical
-
-GL_glGetPointerv=
-GL_glGetPointerv_0=
-GL_glGetPointerv_1=cast=(GLvoid **)
-
-GL_glGetPolygonStipple=
-GL_glGetPolygonStipple_0=cast=(GLubyte *),flags=critical
-
-GL_glGetString=
-GL_glGetString_0=
-
-GL_glGetTexEnvfv=
-GL_glGetTexEnvfv_0=
-GL_glGetTexEnvfv_1=
-GL_glGetTexEnvfv_2=flags=critical
-
-GL_glGetTexEnviv=
-GL_glGetTexEnviv_0=
-GL_glGetTexEnviv_1=
-GL_glGetTexEnviv_2=flags=critical
-
-GL_glGetTexGendv=
-GL_glGetTexGendv_0=
-GL_glGetTexGendv_1=
-GL_glGetTexGendv_2=flags=critical
-
-GL_glGetTexGenfv=
-GL_glGetTexGenfv_0=
-GL_glGetTexGenfv_1=
-GL_glGetTexGenfv_2=flags=critical
-
-GL_glGetTexGeniv=
-GL_glGetTexGeniv_0=
-GL_glGetTexGeniv_1=
-GL_glGetTexGeniv_2=flags=critical
-
-GL_glGetTexImage=
-GL_glGetTexImage_0=
-GL_glGetTexImage_1=
-GL_glGetTexImage_2=
-GL_glGetTexImage_3=
-GL_glGetTexImage_4=flags=critical
-
-GL_glGetTexLevelParameterfv=
-GL_glGetTexLevelParameterfv_0=
-GL_glGetTexLevelParameterfv_1=
-GL_glGetTexLevelParameterfv_2=
-GL_glGetTexLevelParameterfv_3=flags=critical
-
-GL_glGetTexLevelParameteriv=
-GL_glGetTexLevelParameteriv_0=
-GL_glGetTexLevelParameteriv_1=
-GL_glGetTexLevelParameteriv_2=
-GL_glGetTexLevelParameteriv_3=flags=critical
-
-GL_glGetTexParameterfv=
-GL_glGetTexParameterfv_0=
-GL_glGetTexParameterfv_1=
-GL_glGetTexParameterfv_2=flags=critical
-
-GL_glGetTexParameteriv=
-GL_glGetTexParameteriv_0=
-GL_glGetTexParameteriv_1=
-GL_glGetTexParameteriv_2=flags=critical
-
-GL_glHint=
-GL_glHint_0=
-GL_glHint_1=
-
-GL_glIndexMask=
-GL_glIndexMask_0=
-
-GL_glIndexPointer=
-GL_glIndexPointer_0=
-GL_glIndexPointer_1=
-GL_glIndexPointer_2=flags=critical
-
-GL_glIndexd=
-GL_glIndexd_0=
-
-GL_glIndexdv=
-GL_glIndexdv_0=flags=critical
-
-GL_glIndexf=
-GL_glIndexf_0=
-
-GL_glIndexfv=
-GL_glIndexfv_0=flags=critical
-
-GL_glIndexi=
-GL_glIndexi_0=
-
-GL_glIndexiv=
-GL_glIndexiv_0=flags=critical
-
-GL_glIndexs=
-GL_glIndexs_0=
-
-GL_glIndexsv=
-GL_glIndexsv_0=flags=critical
-
-GL_glInitNames=
-
-GL_glInterleavedArrays=
-GL_glInterleavedArrays_0=
-GL_glInterleavedArrays_1=
-GL_glInterleavedArrays_2=flags=critical
-
-GL_glIsEnabled=
-GL_glIsEnabled_0=
-
-GL_glIsList=
-GL_glIsList_0=
-
-GL_glIsTexture=
-GL_glIsTexture_0=
-
-GL_glLightModelf=
-GL_glLightModelf_0=
-GL_glLightModelf_1=
-
-GL_glLightModelfv=
-GL_glLightModelfv_0=
-GL_glLightModelfv_1=flags=critical
-
-GL_glLightModeli=
-GL_glLightModeli_0=
-GL_glLightModeli_1=
-
-GL_glLightModeliv=
-GL_glLightModeliv_0=
-GL_glLightModeliv_1=flags=critical
-
-GL_glLightf=
-GL_glLightf_0=
-GL_glLightf_1=
-GL_glLightf_2=
-
-GL_glLightfv=
-GL_glLightfv_0=
-GL_glLightfv_1=
-GL_glLightfv_2=flags=critical
-
-GL_glLighti=
-GL_glLighti_0=
-GL_glLighti_1=
-GL_glLighti_2=
-
-GL_glLightiv=
-GL_glLightiv_0=
-GL_glLightiv_1=
-GL_glLightiv_2=flags=critical
-
-GL_glLineStipple=
-GL_glLineStipple_0=
-GL_glLineStipple_1=
-
-GL_glLineWidth=
-GL_glLineWidth_0=
-
-GL_glListBase=
-GL_glListBase_0=
-
-GL_glLoadIdentity=
-
-GL_glLoadMatrixd=
-GL_glLoadMatrixd_0=flags=critical
-
-GL_glLoadMatrixf=
-GL_glLoadMatrixf_0=flags=critical
-
-GL_glLoadName=
-GL_glLoadName_0=
-
-GL_glLogicOp=
-GL_glLogicOp_0=
-
-GL_glMap1d=
-GL_glMap1d_0=
-GL_glMap1d_1=
-GL_glMap1d_2=
-GL_glMap1d_3=
-GL_glMap1d_4=
-GL_glMap1d_5=flags=critical
-
-GL_glMap1f=
-GL_glMap1f_0=
-GL_glMap1f_1=
-GL_glMap1f_2=
-GL_glMap1f_3=
-GL_glMap1f_4=
-GL_glMap1f_5=flags=critical
-
-GL_glMap2d=
-GL_glMap2d_0=
-GL_glMap2d_1=
-GL_glMap2d_2=
-GL_glMap2d_3=
-GL_glMap2d_4=
-GL_glMap2d_5=
-GL_glMap2d_6=
-GL_glMap2d_7=
-GL_glMap2d_8=
-GL_glMap2d_9=flags=critical
-
-GL_glMap2f=
-GL_glMap2f_0=
-GL_glMap2f_1=
-GL_glMap2f_2=
-GL_glMap2f_3=
-GL_glMap2f_4=
-GL_glMap2f_5=
-GL_glMap2f_6=
-GL_glMap2f_7=
-GL_glMap2f_8=
-GL_glMap2f_9=flags=critical
-
-GL_glMapGrid1d=
-GL_glMapGrid1d_0=
-GL_glMapGrid1d_1=
-GL_glMapGrid1d_2=
-
-GL_glMapGrid1f=
-GL_glMapGrid1f_0=
-GL_glMapGrid1f_1=
-GL_glMapGrid1f_2=
-
-GL_glMapGrid2d=
-GL_glMapGrid2d_0=
-GL_glMapGrid2d_1=
-GL_glMapGrid2d_2=
-GL_glMapGrid2d_3=
-GL_glMapGrid2d_4=
-GL_glMapGrid2d_5=
-
-GL_glMapGrid2f=
-GL_glMapGrid2f_0=
-GL_glMapGrid2f_1=
-GL_glMapGrid2f_2=
-GL_glMapGrid2f_3=
-GL_glMapGrid2f_4=
-GL_glMapGrid2f_5=
-
-GL_glMaterialf=
-GL_glMaterialf_0=
-GL_glMaterialf_1=
-GL_glMaterialf_2=
-
-GL_glMaterialfv=
-GL_glMaterialfv_0=
-GL_glMaterialfv_1=
-GL_glMaterialfv_2=flags=critical
-
-GL_glMateriali=
-GL_glMateriali_0=
-GL_glMateriali_1=
-GL_glMateriali_2=
-
-GL_glMaterialiv=
-GL_glMaterialiv_0=
-GL_glMaterialiv_1=
-GL_glMaterialiv_2=flags=critical
-
-GL_glMatrixMode=
-GL_glMatrixMode_0=
-
-GL_glMultMatrixd=
-GL_glMultMatrixd_0=flags=critical
-
-GL_glMultMatrixf=
-GL_glMultMatrixf_0=flags=critical
-
-GL_glNewList=
-GL_glNewList_0=
-GL_glNewList_1=
-
-GL_glNormal3b=
-GL_glNormal3b_0=
-GL_glNormal3b_1=
-GL_glNormal3b_2=
-
-GL_glNormal3bv=
-GL_glNormal3bv_0=flags=critical
-
-GL_glNormal3d=
-GL_glNormal3d_0=
-GL_glNormal3d_1=
-GL_glNormal3d_2=
-
-GL_glNormal3dv=
-GL_glNormal3dv_0=flags=critical
-
-GL_glNormal3f=
-GL_glNormal3f_0=
-GL_glNormal3f_1=
-GL_glNormal3f_2=
-
-GL_glNormal3fv=
-GL_glNormal3fv_0=flags=critical
-
-GL_glNormal3i=
-GL_glNormal3i_0=
-GL_glNormal3i_1=
-GL_glNormal3i_2=
-
-GL_glNormal3iv=
-GL_glNormal3iv_0=flags=critical
-
-GL_glNormal3s=
-GL_glNormal3s_0=
-GL_glNormal3s_1=
-GL_glNormal3s_2=
-
-GL_glNormal3sv=
-GL_glNormal3sv_0=flags=critical
-
-GL_glNormalPointer=
-GL_glNormalPointer_0=
-GL_glNormalPointer_1=
-GL_glNormalPointer_2=flags=critical
-
-GL_glOrtho=
-GL_glOrtho_0=
-GL_glOrtho_1=
-GL_glOrtho_2=
-GL_glOrtho_3=
-GL_glOrtho_4=
-GL_glOrtho_5=
-
-GL_glPassThrough=
-GL_glPassThrough_0=
-
-GL_glPixelMapfv=
-GL_glPixelMapfv_0=
-GL_glPixelMapfv_1=
-GL_glPixelMapfv_2=flags=critical
-
-GL_glPixelMapuiv=
-GL_glPixelMapuiv_0=
-GL_glPixelMapuiv_1=
-GL_glPixelMapuiv_2=cast=(const GLuint *),flags=critical
-
-GL_glPixelMapusv=
-GL_glPixelMapusv_0=
-GL_glPixelMapusv_1=
-GL_glPixelMapusv_2=cast=(const GLushort *),flags=critical
-
-GL_glPixelStoref=
-GL_glPixelStoref_0=
-GL_glPixelStoref_1=
-
-GL_glPixelStorei=
-GL_glPixelStorei_0=
-GL_glPixelStorei_1=
-
-GL_glPixelTransferf=
-GL_glPixelTransferf_0=
-GL_glPixelTransferf_1=
-
-GL_glPixelTransferi=
-GL_glPixelTransferi_0=
-GL_glPixelTransferi_1=
-
-GL_glPixelZoom=
-GL_glPixelZoom_0=
-GL_glPixelZoom_1=
-
-GL_glPointSize=
-GL_glPointSize_0=
-
-GL_glPolygonMode=
-GL_glPolygonMode_0=
-GL_glPolygonMode_1=
-
-GL_glPolygonOffset=
-GL_glPolygonOffset_0=
-GL_glPolygonOffset_1=
-
-GL_glPolygonStipple=
-GL_glPolygonStipple_0=cast=(GLubyte *),flags=critical
-
-GL_glPopAttrib=
-
-GL_glPopClientAttrib=
-
-GL_glPopMatrix=
-
-GL_glPopName=
-
-GL_glPrioritizeTextures=
-GL_glPrioritizeTextures_0=
-GL_glPrioritizeTextures_1=cast=(const GLuint *),flags=critical
-GL_glPrioritizeTextures_2=flags=critical
-
-GL_glPushAttrib=
-GL_glPushAttrib_0=
-
-GL_glPushClientAttrib=
-GL_glPushClientAttrib_0=
-
-GL_glPushMatrix=
-
-GL_glPushName=
-GL_glPushName_0=
-
-GL_glRasterPos2d=
-GL_glRasterPos2d_0=
-GL_glRasterPos2d_1=
-
-GL_glRasterPos2dv=
-GL_glRasterPos2dv_0=flags=critical
-
-GL_glRasterPos2f=
-GL_glRasterPos2f_0=
-GL_glRasterPos2f_1=
-
-GL_glRasterPos2fv=
-GL_glRasterPos2fv_0=flags=critical
-
-GL_glRasterPos2i=
-GL_glRasterPos2i_0=
-GL_glRasterPos2i_1=
-
-GL_glRasterPos2iv=
-GL_glRasterPos2iv_0=flags=critical
-
-GL_glRasterPos2s=
-GL_glRasterPos2s_0=
-GL_glRasterPos2s_1=
-
-GL_glRasterPos2sv=
-GL_glRasterPos2sv_0=flags=critical
-
-GL_glRasterPos3d=
-GL_glRasterPos3d_0=
-GL_glRasterPos3d_1=
-GL_glRasterPos3d_2=
-
-GL_glRasterPos3dv=
-GL_glRasterPos3dv_0=flags=critical
-
-GL_glRasterPos3f=
-GL_glRasterPos3f_0=
-GL_glRasterPos3f_1=
-GL_glRasterPos3f_2=
-
-GL_glRasterPos3fv=
-GL_glRasterPos3fv_0=flags=critical
-
-GL_glRasterPos3i=
-GL_glRasterPos3i_0=
-GL_glRasterPos3i_1=
-GL_glRasterPos3i_2=
-
-GL_glRasterPos3iv=
-GL_glRasterPos3iv_0=flags=critical
-
-GL_glRasterPos3s=
-GL_glRasterPos3s_0=
-GL_glRasterPos3s_1=
-GL_glRasterPos3s_2=
-
-GL_glRasterPos3sv=
-GL_glRasterPos3sv_0=flags=critical
-
-GL_glRasterPos4d=
-GL_glRasterPos4d_0=
-GL_glRasterPos4d_1=
-GL_glRasterPos4d_2=
-GL_glRasterPos4d_3=
-
-GL_glRasterPos4dv=
-GL_glRasterPos4dv_0=flags=critical
-
-GL_glRasterPos4f=
-GL_glRasterPos4f_0=
-GL_glRasterPos4f_1=
-GL_glRasterPos4f_2=
-GL_glRasterPos4f_3=
-
-GL_glRasterPos4fv=
-GL_glRasterPos4fv_0=flags=critical
-
-GL_glRasterPos4i=
-GL_glRasterPos4i_0=
-GL_glRasterPos4i_1=
-GL_glRasterPos4i_2=
-GL_glRasterPos4i_3=
-
-GL_glRasterPos4iv=
-GL_glRasterPos4iv_0=flags=critical
-
-GL_glRasterPos4s=
-GL_glRasterPos4s_0=
-GL_glRasterPos4s_1=
-GL_glRasterPos4s_2=
-GL_glRasterPos4s_3=
-
-GL_glRasterPos4sv=
-GL_glRasterPos4sv_0=flags=critical
-
-GL_glReadBuffer=
-GL_glReadBuffer_0=
-
-GL_glReadPixels=
-GL_glReadPixels_0=
-GL_glReadPixels_1=
-GL_glReadPixels_2=
-GL_glReadPixels_3=
-GL_glReadPixels_4=
-GL_glReadPixels_5=
-GL_glReadPixels_6=flags=critical
-
-GL_glRectd=
-GL_glRectd_0=
-GL_glRectd_1=
-GL_glRectd_2=
-GL_glRectd_3=
-
-GL_glRectdv=
-GL_glRectdv_0=flags=critical
-GL_glRectdv_1=flags=critical
-
-GL_glRectf=
-GL_glRectf_0=
-GL_glRectf_1=
-GL_glRectf_2=
-GL_glRectf_3=
-
-GL_glRectfv=
-GL_glRectfv_0=flags=critical
-GL_glRectfv_1=flags=critical
-
-GL_glRecti=
-GL_glRecti_0=
-GL_glRecti_1=
-GL_glRecti_2=
-GL_glRecti_3=
-
-GL_glRectiv=
-GL_glRectiv_0=flags=critical
-GL_glRectiv_1=flags=critical
-
-GL_glRects=
-GL_glRects_0=
-GL_glRects_1=
-GL_glRects_2=
-GL_glRects_3=
-
-GL_glRectsv=
-GL_glRectsv_0=flags=critical
-GL_glRectsv_1=flags=critical
-
-GL_glRenderMode=
-GL_glRenderMode_0=
-
-GL_glRotated=
-GL_glRotated_0=
-GL_glRotated_1=
-GL_glRotated_2=
-GL_glRotated_3=
-
-GL_glRotatef=
-GL_glRotatef_0=
-GL_glRotatef_1=
-GL_glRotatef_2=
-GL_glRotatef_3=
-
-GL_glScaled=
-GL_glScaled_0=
-GL_glScaled_1=
-GL_glScaled_2=
-
-GL_glScalef=
-GL_glScalef_0=
-GL_glScalef_1=
-GL_glScalef_2=
-
-GL_glScissor=
-GL_glScissor_0=
-GL_glScissor_1=
-GL_glScissor_2=
-GL_glScissor_3=
-
-GL_glSelectBuffer=
-GL_glSelectBuffer_0=
-GL_glSelectBuffer_1=cast=(GLuint *)
-
-GL_glShadeModel=
-GL_glShadeModel_0=
-
-GL_glStencilFunc=
-GL_glStencilFunc_0=
-GL_glStencilFunc_1=
-GL_glStencilFunc_2=
-
-GL_glStencilMask=
-GL_glStencilMask_0=
-
-GL_glStencilOp=
-GL_glStencilOp_0=
-GL_glStencilOp_1=
-GL_glStencilOp_2=
-
-GL_glTexCoord1d=
-GL_glTexCoord1d_0=
-
-GL_glTexCoord1dv=
-GL_glTexCoord1dv_0=flags=critical
-
-GL_glTexCoord1f=
-GL_glTexCoord1f_0=
-
-GL_glTexCoord1fv=
-GL_glTexCoord1fv_0=flags=critical
-
-GL_glTexCoord1i=
-GL_glTexCoord1i_0=
-
-GL_glTexCoord1iv=
-GL_glTexCoord1iv_0=flags=critical
-
-GL_glTexCoord1s=
-GL_glTexCoord1s_0=
-
-GL_glTexCoord1sv=
-GL_glTexCoord1sv_0=flags=critical
-
-GL_glTexCoord2d=
-GL_glTexCoord2d_0=
-GL_glTexCoord2d_1=
-
-GL_glTexCoord2dv=
-GL_glTexCoord2dv_0=flags=critical
-
-GL_glTexCoord2f=
-GL_glTexCoord2f_0=
-GL_glTexCoord2f_1=
-
-GL_glTexCoord2fv=
-GL_glTexCoord2fv_0=flags=critical
-
-GL_glTexCoord2i=
-GL_glTexCoord2i_0=
-GL_glTexCoord2i_1=
-
-GL_glTexCoord2iv=
-GL_glTexCoord2iv_0=flags=critical
-
-GL_glTexCoord2s=
-GL_glTexCoord2s_0=
-GL_glTexCoord2s_1=
-
-GL_glTexCoord2sv=
-GL_glTexCoord2sv_0=flags=critical
-
-GL_glTexCoord3d=
-GL_glTexCoord3d_0=
-GL_glTexCoord3d_1=
-GL_glTexCoord3d_2=
-
-GL_glTexCoord3dv=
-GL_glTexCoord3dv_0=flags=critical
-
-GL_glTexCoord3f=
-GL_glTexCoord3f_0=
-GL_glTexCoord3f_1=
-GL_glTexCoord3f_2=
-
-GL_glTexCoord3fv=
-GL_glTexCoord3fv_0=flags=critical
-
-GL_glTexCoord3i=
-GL_glTexCoord3i_0=
-GL_glTexCoord3i_1=
-GL_glTexCoord3i_2=
-
-GL_glTexCoord3iv=
-GL_glTexCoord3iv_0=flags=critical
-
-GL_glTexCoord3s=
-GL_glTexCoord3s_0=
-GL_glTexCoord3s_1=
-GL_glTexCoord3s_2=
-
-GL_glTexCoord3sv=
-GL_glTexCoord3sv_0=flags=critical
-
-GL_glTexCoord4d=
-GL_glTexCoord4d_0=
-GL_glTexCoord4d_1=
-GL_glTexCoord4d_2=
-GL_glTexCoord4d_3=
-
-GL_glTexCoord4dv=
-GL_glTexCoord4dv_0=flags=critical
-
-GL_glTexCoord4f=
-GL_glTexCoord4f_0=
-GL_glTexCoord4f_1=
-GL_glTexCoord4f_2=
-GL_glTexCoord4f_3=
-
-GL_glTexCoord4fv=
-GL_glTexCoord4fv_0=flags=critical
-
-GL_glTexCoord4i=
-GL_glTexCoord4i_0=
-GL_glTexCoord4i_1=
-GL_glTexCoord4i_2=
-GL_glTexCoord4i_3=
-
-GL_glTexCoord4iv=
-GL_glTexCoord4iv_0=flags=critical
-
-GL_glTexCoord4s=
-GL_glTexCoord4s_0=
-GL_glTexCoord4s_1=
-GL_glTexCoord4s_2=
-GL_glTexCoord4s_3=
-
-GL_glTexCoord4sv=
-GL_glTexCoord4sv_0=flags=critical
-
-GL_glTexCoordPointer=
-GL_glTexCoordPointer_0=
-GL_glTexCoordPointer_1=
-GL_glTexCoordPointer_2=
-GL_glTexCoordPointer_3=flags=critical
-
-GL_glTexEnvf=
-GL_glTexEnvf_0=
-GL_glTexEnvf_1=
-GL_glTexEnvf_2=
-
-GL_glTexEnvfv=
-GL_glTexEnvfv_0=
-GL_glTexEnvfv_1=
-GL_glTexEnvfv_2=flags=critical
-
-GL_glTexEnvi=
-GL_glTexEnvi_0=
-GL_glTexEnvi_1=
-GL_glTexEnvi_2=
-
-GL_glTexEnviv=
-GL_glTexEnviv_0=
-GL_glTexEnviv_1=
-GL_glTexEnviv_2=flags=critical
-
-GL_glTexGend=
-GL_glTexGend_0=
-GL_glTexGend_1=
-GL_glTexGend_2=
-
-GL_glTexGendv=
-GL_glTexGendv_0=
-GL_glTexGendv_1=
-GL_glTexGendv_2=flags=critical
-
-GL_glTexGenf=
-GL_glTexGenf_0=
-GL_glTexGenf_1=
-GL_glTexGenf_2=
-
-GL_glTexGenfv=
-GL_glTexGenfv_0=
-GL_glTexGenfv_1=
-GL_glTexGenfv_2=flags=critical
-
-GL_glTexGeni=
-GL_glTexGeni_0=
-GL_glTexGeni_1=
-GL_glTexGeni_2=
-
-GL_glTexGeniv=
-GL_glTexGeniv_0=
-GL_glTexGeniv_1=
-GL_glTexGeniv_2=flags=critical
-
-GL_glTexImage1D=
-GL_glTexImage1D_0=
-GL_glTexImage1D_1=
-GL_glTexImage1D_2=
-GL_glTexImage1D_3=
-GL_glTexImage1D_4=
-GL_glTexImage1D_5=
-GL_glTexImage1D_6=
-GL_glTexImage1D_7=flags=critical
-
-GL_glTexImage2D=
-GL_glTexImage2D_0=
-GL_glTexImage2D_1=
-GL_glTexImage2D_2=
-GL_glTexImage2D_3=
-GL_glTexImage2D_4=
-GL_glTexImage2D_5=
-GL_glTexImage2D_6=
-GL_glTexImage2D_7=
-GL_glTexImage2D_8=flags=critical
-
-GL_glTexParameterf=
-GL_glTexParameterf_0=
-GL_glTexParameterf_1=
-GL_glTexParameterf_2=
-
-GL_glTexParameterfv=
-GL_glTexParameterfv_0=
-GL_glTexParameterfv_1=
-GL_glTexParameterfv_2=flags=critical
-
-GL_glTexParameteri=
-GL_glTexParameteri_0=
-GL_glTexParameteri_1=
-GL_glTexParameteri_2=
-
-GL_glTexParameteriv=
-GL_glTexParameteriv_0=
-GL_glTexParameteriv_1=
-GL_glTexParameteriv_2=flags=critical
-
-GL_glTexSubImage1D=
-GL_glTexSubImage1D_0=
-GL_glTexSubImage1D_1=
-GL_glTexSubImage1D_2=
-GL_glTexSubImage1D_3=
-GL_glTexSubImage1D_4=
-GL_glTexSubImage1D_5=
-GL_glTexSubImage1D_6=flags=critical
-
-GL_glTexSubImage2D=
-GL_glTexSubImage2D_0=
-GL_glTexSubImage2D_1=
-GL_glTexSubImage2D_2=
-GL_glTexSubImage2D_3=
-GL_glTexSubImage2D_4=
-GL_glTexSubImage2D_5=
-GL_glTexSubImage2D_6=
-GL_glTexSubImage2D_7=
-GL_glTexSubImage2D_8=flags=critical
-
-GL_glTranslated=
-GL_glTranslated_0=
-GL_glTranslated_1=
-GL_glTranslated_2=
-
-GL_glTranslatef=
-GL_glTranslatef_0=
-GL_glTranslatef_1=
-GL_glTranslatef_2=
-
-GL_glVertex2d=
-GL_glVertex2d_0=
-GL_glVertex2d_1=
-
-GL_glVertex2dv=
-GL_glVertex2dv_0=flags=critical
-
-GL_glVertex2f=
-GL_glVertex2f_0=
-GL_glVertex2f_1=
-
-GL_glVertex2fv=
-GL_glVertex2fv_0=flags=critical
-
-GL_glVertex2i=
-GL_glVertex2i_0=
-GL_glVertex2i_1=
-
-GL_glVertex2iv=
-GL_glVertex2iv_0=flags=critical
-
-GL_glVertex2s=
-GL_glVertex2s_0=
-GL_glVertex2s_1=
-
-GL_glVertex2sv=
-GL_glVertex2sv_0=flags=critical
-
-GL_glVertex3d=
-GL_glVertex3d_0=
-GL_glVertex3d_1=
-GL_glVertex3d_2=
-
-GL_glVertex3dv__I=
-GL_glVertex3dv__I_0=cast=(const GLdouble *)
-
-GL_glVertex3dv___3D=
-GL_glVertex3dv___3D_0=
-
-GL_glVertex3f=
-GL_glVertex3f_0=
-GL_glVertex3f_1=
-GL_glVertex3f_2=
-
-GL_glVertex3fv=
-GL_glVertex3fv_0=flags=critical
-
-GL_glVertex3i=
-GL_glVertex3i_0=
-GL_glVertex3i_1=
-GL_glVertex3i_2=
-
-GL_glVertex3iv=
-GL_glVertex3iv_0=flags=critical
-
-GL_glVertex3s=
-GL_glVertex3s_0=
-GL_glVertex3s_1=
-GL_glVertex3s_2=
-
-GL_glVertex3sv=
-GL_glVertex3sv_0=flags=critical
-
-GL_glVertex4d=
-GL_glVertex4d_0=
-GL_glVertex4d_1=
-GL_glVertex4d_2=
-GL_glVertex4d_3=
-
-GL_glVertex4dv=
-GL_glVertex4dv_0=flags=critical
-
-GL_glVertex4f=
-GL_glVertex4f_0=
-GL_glVertex4f_1=
-GL_glVertex4f_2=
-GL_glVertex4f_3=
-
-GL_glVertex4fv=
-GL_glVertex4fv_0=flags=critical
-
-GL_glVertex4i=
-GL_glVertex4i_0=
-GL_glVertex4i_1=
-GL_glVertex4i_2=
-GL_glVertex4i_3=
-
-GL_glVertex4iv=
-GL_glVertex4iv_0=flags=critical
-
-GL_glVertex4s=
-GL_glVertex4s_0=
-GL_glVertex4s_1=
-GL_glVertex4s_2=
-GL_glVertex4s_3=
-
-GL_glVertex4sv=
-GL_glVertex4sv_0=flags=critical
-
-GL_glVertexPointer=
-GL_glVertexPointer_0=
-GL_glVertexPointer_1=
-GL_glVertexPointer_2=
-GL_glVertexPointer_3=flags=critical
-
-GL_glViewport=
-GL_glViewport_0=
-GL_glViewport_1=
-GL_glViewport_2=
-GL_glViewport_3=
-
-
-org_eclipse_swt_opengl_GLContext=flags=no_gen
-
-org_eclipse_swt_opengl_GLData=flags=no_gen
-GLData_device=
-GLData_style=
-GLData_image=
-GLData_display=
-GLData_drawable=
-GLData_foreground=
-GLData_background=
-GLData_font=
-GLData_colormap=
-GLData_clipRgn=
-GLData_lineStyle=
-GLData_renderTable=
-GLData_string=
-GLData_stringWidth=
-GLData_stringHeight=
-GLData_xmString=
-GLData_text=
-GLData_textWidth=
-GLData_textHeight=
-GLData_xmText=
-GLData_xmMnemonic=
-GLData_drawFlags=
-
-org_eclipse_swt_opengl_GLDrawable=flags=no_gen
-
-org_eclipse_swt_opengl_GLListener=flags=no_gen
-
-org_eclipse_swt_opengl_GLU=flags=no_gen
-GLU_gluBeginCurve=
-GLU_gluBeginCurve_0=
-
-GLU_gluBeginPolygon=
-GLU_gluBeginPolygon_0=
-
-GLU_gluBeginSurface=
-GLU_gluBeginSurface_0=
-
-GLU_gluBeginTrim=
-GLU_gluBeginTrim_0=
-
-GLU_gluBuild1DMipmaps=
-GLU_gluBuild1DMipmaps_0=
-GLU_gluBuild1DMipmaps_1=
-GLU_gluBuild1DMipmaps_2=
-GLU_gluBuild1DMipmaps_3=
-GLU_gluBuild1DMipmaps_4=
-GLU_gluBuild1DMipmaps_5=
-
-GLU_gluBuild2DMipmaps=
-GLU_gluBuild2DMipmaps_0=
-GLU_gluBuild2DMipmaps_1=
-GLU_gluBuild2DMipmaps_2=
-GLU_gluBuild2DMipmaps_3=
-GLU_gluBuild2DMipmaps_4=
-GLU_gluBuild2DMipmaps_5=
-GLU_gluBuild2DMipmaps_6=
-
-GLU_gluCylinder=
-GLU_gluCylinder_0=
-GLU_gluCylinder_1=
-GLU_gluCylinder_2=
-GLU_gluCylinder_3=
-GLU_gluCylinder_4=
-GLU_gluCylinder_5=
-
-GLU_gluDeleteNurbsRenderer=
-GLU_gluDeleteNurbsRenderer_0=
-
-GLU_gluDeleteQuadric=
-GLU_gluDeleteQuadric_0=
-
-GLU_gluDeleteTess=
-GLU_gluDeleteTess_0=
-
-GLU_gluDisk=
-GLU_gluDisk_0=
-GLU_gluDisk_1=
-GLU_gluDisk_2=
-GLU_gluDisk_3=
-GLU_gluDisk_4=
-
-GLU_gluEndCurve=
-GLU_gluEndCurve_0=
-
-GLU_gluEndPolygon=
-GLU_gluEndPolygon_0=
-
-GLU_gluEndSurface=
-GLU_gluEndSurface_0=
-
-GLU_gluEndTrim=
-GLU_gluEndTrim_0=
-
-GLU_gluErrorString=
-GLU_gluErrorString_0=
-
-GLU_gluGetNurbsProperty=
-GLU_gluGetNurbsProperty_0=
-GLU_gluGetNurbsProperty_1=
-GLU_gluGetNurbsProperty_2=
-
-GLU_gluGetString=
-GLU_gluGetString_0=
-
-GLU_gluGetTessProperty=
-GLU_gluGetTessProperty_0=
-GLU_gluGetTessProperty_1=
-GLU_gluGetTessProperty_2=
-
-GLU_gluLoadSamplingMatrices=
-GLU_gluLoadSamplingMatrices_0=
-GLU_gluLoadSamplingMatrices_1=
-GLU_gluLoadSamplingMatrices_2=
-GLU_gluLoadSamplingMatrices_3=
-
-GLU_gluLookAt=
-GLU_gluLookAt_0=
-GLU_gluLookAt_1=
-GLU_gluLookAt_2=
-GLU_gluLookAt_3=
-GLU_gluLookAt_4=
-GLU_gluLookAt_5=
-GLU_gluLookAt_6=
-GLU_gluLookAt_7=
-GLU_gluLookAt_8=
-
-GLU_gluNewNurbsRenderer=
-
-GLU_gluNewQuadric=
-
-GLU_gluNewTess=
-
-GLU_gluNextContour=
-GLU_gluNextContour_0=
-GLU_gluNextContour_1=
-
-GLU_gluNurbsCallback=
-GLU_gluNurbsCallback_0=
-GLU_gluNurbsCallback_1=
-GLU_gluNurbsCallback_2=
-
-GLU_gluNurbsCurve=
-GLU_gluNurbsCurve_0=
-GLU_gluNurbsCurve_1=
-GLU_gluNurbsCurve_2=
-GLU_gluNurbsCurve_3=
-GLU_gluNurbsCurve_4=
-GLU_gluNurbsCurve_5=
-GLU_gluNurbsCurve_6=
-
-GLU_gluNurbsProperty=
-GLU_gluNurbsProperty_0=
-GLU_gluNurbsProperty_1=
-GLU_gluNurbsProperty_2=
-
-GLU_gluNurbsSurface=
-GLU_gluNurbsSurface_0=
-GLU_gluNurbsSurface_1=
-GLU_gluNurbsSurface_2=
-GLU_gluNurbsSurface_3=
-GLU_gluNurbsSurface_4=
-GLU_gluNurbsSurface_5=
-GLU_gluNurbsSurface_6=
-GLU_gluNurbsSurface_7=
-GLU_gluNurbsSurface_8=
-GLU_gluNurbsSurface_9=
-GLU_gluNurbsSurface_10=
-
-GLU_gluOrtho2D=
-GLU_gluOrtho2D_0=
-GLU_gluOrtho2D_1=
-GLU_gluOrtho2D_2=
-GLU_gluOrtho2D_3=
-
-GLU_gluPartialDisk=
-GLU_gluPartialDisk_0=
-GLU_gluPartialDisk_1=
-GLU_gluPartialDisk_2=
-GLU_gluPartialDisk_3=
-GLU_gluPartialDisk_4=
-GLU_gluPartialDisk_5=
-GLU_gluPartialDisk_6=
-
-GLU_gluPerspective=
-GLU_gluPerspective_0=
-GLU_gluPerspective_1=
-GLU_gluPerspective_2=
-GLU_gluPerspective_3=
-
-GLU_gluPickMatrix=
-GLU_gluPickMatrix_0=
-GLU_gluPickMatrix_1=
-GLU_gluPickMatrix_2=
-GLU_gluPickMatrix_3=
-GLU_gluPickMatrix_4=
-
-GLU_gluProject=
-GLU_gluProject_0=
-GLU_gluProject_1=
-GLU_gluProject_2=
-GLU_gluProject_3=
-GLU_gluProject_4=
-GLU_gluProject_5=
-GLU_gluProject_6=
-GLU_gluProject_7=
-GLU_gluProject_8=
-
-GLU_gluPwlCurve=
-GLU_gluPwlCurve_0=
-GLU_gluPwlCurve_1=
-GLU_gluPwlCurve_2=
-GLU_gluPwlCurve_3=
-GLU_gluPwlCurve_4=
-
-GLU_gluQuadricCallback=
-GLU_gluQuadricCallback_0=
-GLU_gluQuadricCallback_1=
-GLU_gluQuadricCallback_2=
-
-GLU_gluQuadricDrawStyle=
-GLU_gluQuadricDrawStyle_0=
-GLU_gluQuadricDrawStyle_1=
-
-GLU_gluQuadricNormals=
-GLU_gluQuadricNormals_0=
-GLU_gluQuadricNormals_1=
-
-GLU_gluQuadricOrientation=
-GLU_gluQuadricOrientation_0=
-GLU_gluQuadricOrientation_1=
-
-GLU_gluQuadricTexture=
-GLU_gluQuadricTexture_0=
-GLU_gluQuadricTexture_1=
-
-GLU_gluScaleImage=
-GLU_gluScaleImage_0=
-GLU_gluScaleImage_1=
-GLU_gluScaleImage_2=
-GLU_gluScaleImage_3=
-GLU_gluScaleImage_4=
-GLU_gluScaleImage_5=
-GLU_gluScaleImage_6=
-GLU_gluScaleImage_7=
-GLU_gluScaleImage_8=
-
-GLU_gluSphere=
-GLU_gluSphere_0=
-GLU_gluSphere_1=
-GLU_gluSphere_2=
-GLU_gluSphere_3=
-
-GLU_gluTessBeginContour=
-GLU_gluTessBeginContour_0=
-
-GLU_gluTessBeginPolygon=
-GLU_gluTessBeginPolygon_0=
-GLU_gluTessBeginPolygon_1=
-
-GLU_gluTessCallback=
-GLU_gluTessCallback_0=
-GLU_gluTessCallback_1=
-GLU_gluTessCallback_2=
-
-GLU_gluTessEndContour=
-GLU_gluTessEndContour_0=
-
-GLU_gluTessEndPolygon=
-GLU_gluTessEndPolygon_0=
-
-GLU_gluTessNormal=
-GLU_gluTessNormal_0=
-GLU_gluTessNormal_1=
-GLU_gluTessNormal_2=
-GLU_gluTessNormal_3=
-
-GLU_gluTessProperty=
-GLU_gluTessProperty_0=
-GLU_gluTessProperty_1=
-GLU_gluTessProperty_2=
-
-GLU_gluTessVertex=
-GLU_gluTessVertex_0=
-GLU_gluTessVertex_1=
-GLU_gluTessVertex_2=
-
-GLU_gluUnProject=
-GLU_gluUnProject_0=
-GLU_gluUnProject_1=
-GLU_gluUnProject_2=
-GLU_gluUnProject_3=
-GLU_gluUnProject_4=
-GLU_gluUnProject_5=
-GLU_gluUnProject_6=
-GLU_gluUnProject_7=
-GLU_gluUnProject_8=
-
-
-org_eclipse_swt_opengl_Library=flags=no_gen
-
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.opengl.GLU.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.opengl.GLU.properties
deleted file mode 100644
index 3f80707..0000000
--- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.opengl.GLU.properties
+++ /dev/null
@@ -1,1779 +0,0 @@
-###############################################################################
-# Copyright (c) 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
-###############################################################################
-org_eclipse_swt_opengl_GL=flags=no_gen
-GL_glAccum=
-GL_glAccum_0=
-GL_glAccum_1=
-
-GL_glAlphaFunc=
-GL_glAlphaFunc_0=
-GL_glAlphaFunc_1=
-
-GL_glAreTexturesResident=
-GL_glAreTexturesResident_0=
-GL_glAreTexturesResident_1=
-GL_glAreTexturesResident_2=
-
-GL_glArrayElement=
-GL_glArrayElement_0=
-
-GL_glBegin=
-GL_glBegin_0=
-
-GL_glBindTexture=
-GL_glBindTexture_0=
-GL_glBindTexture_1=
-
-GL_glBitmap=
-GL_glBitmap_0=
-GL_glBitmap_1=
-GL_glBitmap_2=
-GL_glBitmap_3=
-GL_glBitmap_4=
-GL_glBitmap_5=
-GL_glBitmap_6=
-
-GL_glBlendFunc=
-GL_glBlendFunc_0=
-GL_glBlendFunc_1=
-
-GL_glCallList=
-GL_glCallList_0=
-
-GL_glCallLists__II_3B=
-GL_glCallLists__II_3B_0=
-GL_glCallLists__II_3B_1=
-GL_glCallLists__II_3B_2=
-
-GL_glCallLists__II_3C=
-GL_glCallLists__II_3C_0=
-GL_glCallLists__II_3C_1=
-GL_glCallLists__II_3C_2=
-
-GL_glCallLists__II_3I=
-GL_glCallLists__II_3I_0=
-GL_glCallLists__II_3I_1=
-GL_glCallLists__II_3I_2=
-
-GL_glClear=
-GL_glClear_0=
-
-GL_glClearAccum=
-GL_glClearAccum_0=
-GL_glClearAccum_1=
-GL_glClearAccum_2=
-GL_glClearAccum_3=
-
-GL_glClearColor=
-GL_glClearColor_0=
-GL_glClearColor_1=
-GL_glClearColor_2=
-GL_glClearColor_3=
-
-GL_glClearDepth=
-GL_glClearDepth_0=
-
-GL_glClearIndex=
-GL_glClearIndex_0=
-
-GL_glClearStencil=
-GL_glClearStencil_0=
-
-GL_glClipPlane=
-GL_glClipPlane_0=
-GL_glClipPlane_1=
-
-GL_glColor3b=
-GL_glColor3b_0=
-GL_glColor3b_1=
-GL_glColor3b_2=
-
-GL_glColor3bv=
-GL_glColor3bv_0=
-
-GL_glColor3d=
-GL_glColor3d_0=
-GL_glColor3d_1=
-GL_glColor3d_2=
-
-GL_glColor3dv=
-GL_glColor3dv_0=
-
-GL_glColor3f=
-GL_glColor3f_0=
-GL_glColor3f_1=
-GL_glColor3f_2=
-
-GL_glColor3fv=
-GL_glColor3fv_0=
-
-GL_glColor3i=
-GL_glColor3i_0=
-GL_glColor3i_1=
-GL_glColor3i_2=
-
-GL_glColor3iv=
-GL_glColor3iv_0=
-
-GL_glColor3s=
-GL_glColor3s_0=
-GL_glColor3s_1=
-GL_glColor3s_2=
-
-GL_glColor3sv=
-GL_glColor3sv_0=
-
-GL_glColor3ub=
-GL_glColor3ub_0=
-GL_glColor3ub_1=
-GL_glColor3ub_2=
-
-GL_glColor3ubv=
-GL_glColor3ubv_0=
-
-GL_glColor3ui=
-GL_glColor3ui_0=
-GL_glColor3ui_1=
-GL_glColor3ui_2=
-
-GL_glColor3uiv=
-GL_glColor3uiv_0=
-
-GL_glColor3us=
-GL_glColor3us_0=
-GL_glColor3us_1=
-GL_glColor3us_2=
-
-GL_glColor3usv=
-GL_glColor3usv_0=
-
-GL_glColor4b=
-GL_glColor4b_0=
-GL_glColor4b_1=
-GL_glColor4b_2=
-GL_glColor4b_3=
-
-GL_glColor4bv=
-GL_glColor4bv_0=
-
-GL_glColor4d=
-GL_glColor4d_0=
-GL_glColor4d_1=
-GL_glColor4d_2=
-GL_glColor4d_3=
-
-GL_glColor4dv=
-GL_glColor4dv_0=
-
-GL_glColor4f=
-GL_glColor4f_0=
-GL_glColor4f_1=
-GL_glColor4f_2=
-GL_glColor4f_3=
-
-GL_glColor4fv=
-GL_glColor4fv_0=
-
-GL_glColor4i=
-GL_glColor4i_0=
-GL_glColor4i_1=
-GL_glColor4i_2=
-GL_glColor4i_3=
-
-GL_glColor4iv=
-GL_glColor4iv_0=
-
-GL_glColor4s=
-GL_glColor4s_0=
-GL_glColor4s_1=
-GL_glColor4s_2=
-GL_glColor4s_3=
-
-GL_glColor4ub=
-GL_glColor4ub_0=
-GL_glColor4ub_1=
-GL_glColor4ub_2=
-GL_glColor4ub_3=
-
-GL_glColor4ubv___3B=
-GL_glColor4ubv___3B_0=
-
-GL_glColor4ubv___3S=
-GL_glColor4ubv___3S_0=
-
-GL_glColor4ui=
-GL_glColor4ui_0=
-GL_glColor4ui_1=
-GL_glColor4ui_2=
-GL_glColor4ui_3=
-
-GL_glColor4uiv=
-GL_glColor4uiv_0=
-
-GL_glColor4us=
-GL_glColor4us_0=
-GL_glColor4us_1=
-GL_glColor4us_2=
-GL_glColor4us_3=
-
-GL_glColor4usv=
-GL_glColor4usv_0=
-
-GL_glColorMask=
-GL_glColorMask_0=
-GL_glColorMask_1=
-GL_glColorMask_2=
-GL_glColorMask_3=
-
-GL_glColorMaterial=
-GL_glColorMaterial_0=
-GL_glColorMaterial_1=
-
-GL_glColorPointer=
-GL_glColorPointer_0=
-GL_glColorPointer_1=
-GL_glColorPointer_2=
-GL_glColorPointer_3=
-
-GL_glCopyPixels=
-GL_glCopyPixels_0=
-GL_glCopyPixels_1=
-GL_glCopyPixels_2=
-GL_glCopyPixels_3=
-GL_glCopyPixels_4=
-
-GL_glCopyTexImage1D=
-GL_glCopyTexImage1D_0=
-GL_glCopyTexImage1D_1=
-GL_glCopyTexImage1D_2=
-GL_glCopyTexImage1D_3=
-GL_glCopyTexImage1D_4=
-GL_glCopyTexImage1D_5=
-GL_glCopyTexImage1D_6=
-
-GL_glCopyTexImage2D=
-GL_glCopyTexImage2D_0=
-GL_glCopyTexImage2D_1=
-GL_glCopyTexImage2D_2=
-GL_glCopyTexImage2D_3=
-GL_glCopyTexImage2D_4=
-GL_glCopyTexImage2D_5=
-GL_glCopyTexImage2D_6=
-GL_glCopyTexImage2D_7=
-
-GL_glCopyTexSubImage1D=
-GL_glCopyTexSubImage1D_0=
-GL_glCopyTexSubImage1D_1=
-GL_glCopyTexSubImage1D_2=
-GL_glCopyTexSubImage1D_3=
-GL_glCopyTexSubImage1D_4=
-GL_glCopyTexSubImage1D_5=
-
-GL_glCopyTexSubImage2D=
-GL_glCopyTexSubImage2D_0=
-GL_glCopyTexSubImage2D_1=
-GL_glCopyTexSubImage2D_2=
-GL_glCopyTexSubImage2D_3=
-GL_glCopyTexSubImage2D_4=
-GL_glCopyTexSubImage2D_5=
-GL_glCopyTexSubImage2D_6=
-GL_glCopyTexSubImage2D_7=
-
-GL_glCullFace=
-GL_glCullFace_0=
-
-GL_glDeleteLists=
-GL_glDeleteLists_0=
-GL_glDeleteLists_1=
-
-GL_glDeleteTextures=
-GL_glDeleteTextures_0=
-GL_glDeleteTextures_1=
-
-GL_glDepthFunc=
-GL_glDepthFunc_0=
-
-GL_glDepthMask=
-GL_glDepthMask_0=
-
-GL_glDepthRange=
-GL_glDepthRange_0=
-GL_glDepthRange_1=
-
-GL_glDisable=
-GL_glDisable_0=
-
-GL_glDisableClientState=
-GL_glDisableClientState_0=
-
-GL_glDrawArrays=
-GL_glDrawArrays_0=
-GL_glDrawArrays_1=
-GL_glDrawArrays_2=
-
-GL_glDrawBuffer=
-GL_glDrawBuffer_0=
-
-GL_glDrawElements=
-GL_glDrawElements_0=
-GL_glDrawElements_1=
-GL_glDrawElements_2=
-GL_glDrawElements_3=
-
-GL_glDrawPixels=
-GL_glDrawPixels_0=
-GL_glDrawPixels_1=
-GL_glDrawPixels_2=
-GL_glDrawPixels_3=
-GL_glDrawPixels_4=
-
-GL_glEdgeFlag=
-GL_glEdgeFlag_0=
-
-GL_glEdgeFlagPointer=
-GL_glEdgeFlagPointer_0=
-GL_glEdgeFlagPointer_1=
-
-GL_glEdgeFlagv=
-GL_glEdgeFlagv_0=
-
-GL_glEnable=
-GL_glEnable_0=
-
-GL_glEnableClientState=
-GL_glEnableClientState_0=
-
-GL_glEnd=
-
-GL_glEndList=
-
-GL_glEvalCoord1d=
-GL_glEvalCoord1d_0=
-
-GL_glEvalCoord1dv=
-GL_glEvalCoord1dv_0=
-
-GL_glEvalCoord1f=
-GL_glEvalCoord1f_0=
-
-GL_glEvalCoord1fv=
-GL_glEvalCoord1fv_0=
-
-GL_glEvalCoord2d=
-GL_glEvalCoord2d_0=
-GL_glEvalCoord2d_1=
-
-GL_glEvalCoord2dv=
-GL_glEvalCoord2dv_0=
-
-GL_glEvalCoord2f=
-GL_glEvalCoord2f_0=
-GL_glEvalCoord2f_1=
-
-GL_glEvalCoord2fv=
-GL_glEvalCoord2fv_0=
-
-GL_glEvalMesh1=
-GL_glEvalMesh1_0=
-GL_glEvalMesh1_1=
-GL_glEvalMesh1_2=
-
-GL_glEvalMesh2=
-GL_glEvalMesh2_0=
-GL_glEvalMesh2_1=
-GL_glEvalMesh2_2=
-GL_glEvalMesh2_3=
-GL_glEvalMesh2_4=
-
-GL_glEvalPoint1=
-GL_glEvalPoint1_0=
-
-GL_glEvalPoint2=
-GL_glEvalPoint2_0=
-GL_glEvalPoint2_1=
-
-GL_glFeedbackBuffer=
-GL_glFeedbackBuffer_0=
-GL_glFeedbackBuffer_1=
-GL_glFeedbackBuffer_2=
-
-GL_glFinish=
-
-GL_glFlush=
-
-GL_glFogf=
-GL_glFogf_0=
-GL_glFogf_1=
-
-GL_glFogfv=
-GL_glFogfv_0=
-GL_glFogfv_1=
-
-GL_glFogi=
-GL_glFogi_0=
-GL_glFogi_1=
-
-GL_glFogiv=
-GL_glFogiv_0=
-GL_glFogiv_1=
-
-GL_glFrontFace=
-GL_glFrontFace_0=
-
-GL_glFrustum=
-GL_glFrustum_0=
-GL_glFrustum_1=
-GL_glFrustum_2=
-GL_glFrustum_3=
-GL_glFrustum_4=
-GL_glFrustum_5=
-
-GL_glGenLists=
-GL_glGenLists_0=
-
-GL_glGenTextures=
-GL_glGenTextures_0=
-GL_glGenTextures_1=
-
-GL_glGetBooleanv=
-GL_glGetBooleanv_0=
-GL_glGetBooleanv_1=
-
-GL_glGetClipPlane=
-GL_glGetClipPlane_0=
-GL_glGetClipPlane_1=
-
-GL_glGetDoublev=
-GL_glGetDoublev_0=
-GL_glGetDoublev_1=
-
-GL_glGetError=
-
-GL_glGetFloatv=
-GL_glGetFloatv_0=
-GL_glGetFloatv_1=
-
-GL_glGetIntegerv=
-GL_glGetIntegerv_0=
-GL_glGetIntegerv_1=
-
-GL_glGetLightfv=
-GL_glGetLightfv_0=
-GL_glGetLightfv_1=
-GL_glGetLightfv_2=
-
-GL_glGetLightiv=
-GL_glGetLightiv_0=
-GL_glGetLightiv_1=
-GL_glGetLightiv_2=
-
-GL_glGetMapdv=
-GL_glGetMapdv_0=
-GL_glGetMapdv_1=
-GL_glGetMapdv_2=
-
-GL_glGetMapfv=
-GL_glGetMapfv_0=
-GL_glGetMapfv_1=
-GL_glGetMapfv_2=
-
-GL_glGetMapiv=
-GL_glGetMapiv_0=
-GL_glGetMapiv_1=
-GL_glGetMapiv_2=
-
-GL_glGetMaterialfv=
-GL_glGetMaterialfv_0=
-GL_glGetMaterialfv_1=
-GL_glGetMaterialfv_2=
-
-GL_glGetMaterialiv=
-GL_glGetMaterialiv_0=
-GL_glGetMaterialiv_1=
-GL_glGetMaterialiv_2=
-
-GL_glGetPixelMapfv=
-GL_glGetPixelMapfv_0=
-GL_glGetPixelMapfv_1=
-
-GL_glGetPixelMapuiv=
-GL_glGetPixelMapuiv_0=
-GL_glGetPixelMapuiv_1=
-
-GL_glGetPixelMapusv=
-GL_glGetPixelMapusv_0=
-GL_glGetPixelMapusv_1=
-
-GL_glGetPointerv=
-GL_glGetPointerv_0=
-GL_glGetPointerv_1=
-
-GL_glGetPolygonStipple=
-GL_glGetPolygonStipple_0=
-
-GL_glGetString=
-GL_glGetString_0=
-
-GL_glGetTexEnvfv=
-GL_glGetTexEnvfv_0=
-GL_glGetTexEnvfv_1=
-GL_glGetTexEnvfv_2=
-
-GL_glGetTexEnviv=
-GL_glGetTexEnviv_0=
-GL_glGetTexEnviv_1=
-GL_glGetTexEnviv_2=
-
-GL_glGetTexGendv=
-GL_glGetTexGendv_0=
-GL_glGetTexGendv_1=
-GL_glGetTexGendv_2=
-
-GL_glGetTexGenfv=
-GL_glGetTexGenfv_0=
-GL_glGetTexGenfv_1=
-GL_glGetTexGenfv_2=
-
-GL_glGetTexGeniv=
-GL_glGetTexGeniv_0=
-GL_glGetTexGeniv_1=
-GL_glGetTexGeniv_2=
-
-GL_glGetTexImage=
-GL_glGetTexImage_0=
-GL_glGetTexImage_1=
-GL_glGetTexImage_2=
-GL_glGetTexImage_3=
-GL_glGetTexImage_4=
-
-GL_glGetTexLevelParameterfv=
-GL_glGetTexLevelParameterfv_0=
-GL_glGetTexLevelParameterfv_1=
-GL_glGetTexLevelParameterfv_2=
-GL_glGetTexLevelParameterfv_3=
-
-GL_glGetTexLevelParameteriv=
-GL_glGetTexLevelParameteriv_0=
-GL_glGetTexLevelParameteriv_1=
-GL_glGetTexLevelParameteriv_2=
-GL_glGetTexLevelParameteriv_3=
-
-GL_glGetTexParameterfv=
-GL_glGetTexParameterfv_0=
-GL_glGetTexParameterfv_1=
-GL_glGetTexParameterfv_2=
-
-GL_glGetTexParameteriv=
-GL_glGetTexParameteriv_0=
-GL_glGetTexParameteriv_1=
-GL_glGetTexParameteriv_2=
-
-GL_glHint=
-GL_glHint_0=
-GL_glHint_1=
-
-GL_glIndexMask=
-GL_glIndexMask_0=
-
-GL_glIndexPointer=
-GL_glIndexPointer_0=
-GL_glIndexPointer_1=
-GL_glIndexPointer_2=
-
-GL_glIndexd=
-GL_glIndexd_0=
-
-GL_glIndexdv=
-GL_glIndexdv_0=
-
-GL_glIndexf=
-GL_glIndexf_0=
-
-GL_glIndexfv=
-GL_glIndexfv_0=
-
-GL_glIndexi=
-GL_glIndexi_0=
-
-GL_glIndexiv=
-GL_glIndexiv_0=
-
-GL_glIndexs=
-GL_glIndexs_0=
-
-GL_glIndexsv=
-GL_glIndexsv_0=
-
-GL_glInitNames=
-
-GL_glInterleavedArrays=
-GL_glInterleavedArrays_0=
-GL_glInterleavedArrays_1=
-GL_glInterleavedArrays_2=
-
-GL_glIsEnabled=
-GL_glIsEnabled_0=
-
-GL_glIsList=
-GL_glIsList_0=
-
-GL_glIsTexture=
-GL_glIsTexture_0=
-
-GL_glLightModelf=
-GL_glLightModelf_0=
-GL_glLightModelf_1=
-
-GL_glLightModelfv=
-GL_glLightModelfv_0=
-GL_glLightModelfv_1=
-
-GL_glLightModeli=
-GL_glLightModeli_0=
-GL_glLightModeli_1=
-
-GL_glLightModeliv=
-GL_glLightModeliv_0=
-GL_glLightModeliv_1=
-
-GL_glLightf=
-GL_glLightf_0=
-GL_glLightf_1=
-GL_glLightf_2=
-
-GL_glLightfv=
-GL_glLightfv_0=
-GL_glLightfv_1=
-GL_glLightfv_2=
-
-GL_glLighti=
-GL_glLighti_0=
-GL_glLighti_1=
-GL_glLighti_2=
-
-GL_glLightiv=
-GL_glLightiv_0=
-GL_glLightiv_1=
-GL_glLightiv_2=
-
-GL_glLineStipple=
-GL_glLineStipple_0=
-GL_glLineStipple_1=
-
-GL_glLineWidth=
-GL_glLineWidth_0=
-
-GL_glListBase=
-GL_glListBase_0=
-
-GL_glLoadIdentity=
-
-GL_glLoadMatrixd=
-GL_glLoadMatrixd_0=
-
-GL_glLoadMatrixf=
-GL_glLoadMatrixf_0=
-
-GL_glLoadName=
-GL_glLoadName_0=
-
-GL_glLogicOp=
-GL_glLogicOp_0=
-
-GL_glMap1d=
-GL_glMap1d_0=
-GL_glMap1d_1=
-GL_glMap1d_2=
-GL_glMap1d_3=
-GL_glMap1d_4=
-GL_glMap1d_5=
-
-GL_glMap1f=
-GL_glMap1f_0=
-GL_glMap1f_1=
-GL_glMap1f_2=
-GL_glMap1f_3=
-GL_glMap1f_4=
-GL_glMap1f_5=
-
-GL_glMap2d=
-GL_glMap2d_0=
-GL_glMap2d_1=
-GL_glMap2d_2=
-GL_glMap2d_3=
-GL_glMap2d_4=
-GL_glMap2d_5=
-GL_glMap2d_6=
-GL_glMap2d_7=
-GL_glMap2d_8=
-GL_glMap2d_9=
-
-GL_glMap2f=
-GL_glMap2f_0=
-GL_glMap2f_1=
-GL_glMap2f_2=
-GL_glMap2f_3=
-GL_glMap2f_4=
-GL_glMap2f_5=
-GL_glMap2f_6=
-GL_glMap2f_7=
-GL_glMap2f_8=
-GL_glMap2f_9=
-
-GL_glMapGrid1d=
-GL_glMapGrid1d_0=
-GL_glMapGrid1d_1=
-GL_glMapGrid1d_2=
-
-GL_glMapGrid1f=
-GL_glMapGrid1f_0=
-GL_glMapGrid1f_1=
-GL_glMapGrid1f_2=
-
-GL_glMapGrid2d=
-GL_glMapGrid2d_0=
-GL_glMapGrid2d_1=
-GL_glMapGrid2d_2=
-GL_glMapGrid2d_3=
-GL_glMapGrid2d_4=
-GL_glMapGrid2d_5=
-
-GL_glMapGrid2f=
-GL_glMapGrid2f_0=
-GL_glMapGrid2f_1=
-GL_glMapGrid2f_2=
-GL_glMapGrid2f_3=
-GL_glMapGrid2f_4=
-GL_glMapGrid2f_5=
-
-GL_glMaterialf=
-GL_glMaterialf_0=
-GL_glMaterialf_1=
-GL_glMaterialf_2=
-
-GL_glMaterialfv=
-GL_glMaterialfv_0=
-GL_glMaterialfv_1=
-GL_glMaterialfv_2=
-
-GL_glMateriali=
-GL_glMateriali_0=
-GL_glMateriali_1=
-GL_glMateriali_2=
-
-GL_glMaterialiv=
-GL_glMaterialiv_0=
-GL_glMaterialiv_1=
-GL_glMaterialiv_2=
-
-GL_glMatrixMode=
-GL_glMatrixMode_0=
-
-GL_glMultMatrixd=
-GL_glMultMatrixd_0=
-
-GL_glMultMatrixf=
-GL_glMultMatrixf_0=
-
-GL_glNewList=
-GL_glNewList_0=
-GL_glNewList_1=
-
-GL_glNormal3b=
-GL_glNormal3b_0=
-GL_glNormal3b_1=
-GL_glNormal3b_2=
-
-GL_glNormal3bv=
-GL_glNormal3bv_0=
-
-GL_glNormal3d=
-GL_glNormal3d_0=
-GL_glNormal3d_1=
-GL_glNormal3d_2=
-
-GL_glNormal3dv=
-GL_glNormal3dv_0=
-
-GL_glNormal3f=
-GL_glNormal3f_0=
-GL_glNormal3f_1=
-GL_glNormal3f_2=
-
-GL_glNormal3fv=
-GL_glNormal3fv_0=
-
-GL_glNormal3i=
-GL_glNormal3i_0=
-GL_glNormal3i_1=
-GL_glNormal3i_2=
-
-GL_glNormal3iv=
-GL_glNormal3iv_0=
-
-GL_glNormal3s=
-GL_glNormal3s_0=
-GL_glNormal3s_1=
-GL_glNormal3s_2=
-
-GL_glNormal3sv=
-GL_glNormal3sv_0=
-
-GL_glNormalPointer=
-GL_glNormalPointer_0=
-GL_glNormalPointer_1=
-GL_glNormalPointer_2=
-
-GL_glOrtho=
-GL_glOrtho_0=
-GL_glOrtho_1=
-GL_glOrtho_2=
-GL_glOrtho_3=
-GL_glOrtho_4=
-GL_glOrtho_5=
-
-GL_glPassThrough=
-GL_glPassThrough_0=
-
-GL_glPixelMapfv=
-GL_glPixelMapfv_0=
-GL_glPixelMapfv_1=
-GL_glPixelMapfv_2=
-
-GL_glPixelMapuiv=
-GL_glPixelMapuiv_0=
-GL_glPixelMapuiv_1=
-GL_glPixelMapuiv_2=
-
-GL_glPixelMapusv=
-GL_glPixelMapusv_0=
-GL_glPixelMapusv_1=
-GL_glPixelMapusv_2=
-
-GL_glPixelStoref=
-GL_glPixelStoref_0=
-GL_glPixelStoref_1=
-
-GL_glPixelStorei=
-GL_glPixelStorei_0=
-GL_glPixelStorei_1=
-
-GL_glPixelTransferf=
-GL_glPixelTransferf_0=
-GL_glPixelTransferf_1=
-
-GL_glPixelTransferi=
-GL_glPixelTransferi_0=
-GL_glPixelTransferi_1=
-
-GL_glPixelZoom=
-GL_glPixelZoom_0=
-GL_glPixelZoom_1=
-
-GL_glPointSize=
-GL_glPointSize_0=
-
-GL_glPolygonMode=
-GL_glPolygonMode_0=
-GL_glPolygonMode_1=
-
-GL_glPolygonOffset=
-GL_glPolygonOffset_0=
-GL_glPolygonOffset_1=
-
-GL_glPolygonStipple=
-GL_glPolygonStipple_0=
-
-GL_glPopAttrib=
-
-GL_glPopClientAttrib=
-
-GL_glPopMatrix=
-
-GL_glPopName=
-
-GL_glPrioritizeTextures=
-GL_glPrioritizeTextures_0=
-GL_glPrioritizeTextures_1=
-GL_glPrioritizeTextures_2=
-
-GL_glPushAttrib=
-GL_glPushAttrib_0=
-
-GL_glPushClientAttrib=
-GL_glPushClientAttrib_0=
-
-GL_glPushMatrix=
-
-GL_glPushName=
-GL_glPushName_0=
-
-GL_glRasterPos2d=
-GL_glRasterPos2d_0=
-GL_glRasterPos2d_1=
-
-GL_glRasterPos2dv=
-GL_glRasterPos2dv_0=
-
-GL_glRasterPos2f=
-GL_glRasterPos2f_0=
-GL_glRasterPos2f_1=
-
-GL_glRasterPos2fv=
-GL_glRasterPos2fv_0=
-
-GL_glRasterPos2i=
-GL_glRasterPos2i_0=
-GL_glRasterPos2i_1=
-
-GL_glRasterPos2iv=
-GL_glRasterPos2iv_0=
-
-GL_glRasterPos2s=
-GL_glRasterPos2s_0=
-GL_glRasterPos2s_1=
-
-GL_glRasterPos2sv=
-GL_glRasterPos2sv_0=
-
-GL_glRasterPos3d=
-GL_glRasterPos3d_0=
-GL_glRasterPos3d_1=
-GL_glRasterPos3d_2=
-
-GL_glRasterPos3dv=
-GL_glRasterPos3dv_0=
-
-GL_glRasterPos3f=
-GL_glRasterPos3f_0=
-GL_glRasterPos3f_1=
-GL_glRasterPos3f_2=
-
-GL_glRasterPos3fv=
-GL_glRasterPos3fv_0=
-
-GL_glRasterPos3i=
-GL_glRasterPos3i_0=
-GL_glRasterPos3i_1=
-GL_glRasterPos3i_2=
-
-GL_glRasterPos3iv=
-GL_glRasterPos3iv_0=
-
-GL_glRasterPos3s=
-GL_glRasterPos3s_0=
-GL_glRasterPos3s_1=
-GL_glRasterPos3s_2=
-
-GL_glRasterPos3sv=
-GL_glRasterPos3sv_0=
-
-GL_glRasterPos4d=
-GL_glRasterPos4d_0=
-GL_glRasterPos4d_1=
-GL_glRasterPos4d_2=
-GL_glRasterPos4d_3=
-
-GL_glRasterPos4dv=
-GL_glRasterPos4dv_0=
-
-GL_glRasterPos4f=
-GL_glRasterPos4f_0=
-GL_glRasterPos4f_1=
-GL_glRasterPos4f_2=
-GL_glRasterPos4f_3=
-
-GL_glRasterPos4fv=
-GL_glRasterPos4fv_0=
-
-GL_glRasterPos4i=
-GL_glRasterPos4i_0=
-GL_glRasterPos4i_1=
-GL_glRasterPos4i_2=
-GL_glRasterPos4i_3=
-
-GL_glRasterPos4iv=
-GL_glRasterPos4iv_0=
-
-GL_glRasterPos4s=
-GL_glRasterPos4s_0=
-GL_glRasterPos4s_1=
-GL_glRasterPos4s_2=
-GL_glRasterPos4s_3=
-
-GL_glRasterPos4sv=
-GL_glRasterPos4sv_0=
-
-GL_glReadBuffer=
-GL_glReadBuffer_0=
-
-GL_glReadPixels=
-GL_glReadPixels_0=
-GL_glReadPixels_1=
-GL_glReadPixels_2=
-GL_glReadPixels_3=
-GL_glReadPixels_4=
-GL_glReadPixels_5=
-GL_glReadPixels_6=
-
-GL_glRectd=
-GL_glRectd_0=
-GL_glRectd_1=
-GL_glRectd_2=
-GL_glRectd_3=
-
-GL_glRectdv=
-GL_glRectdv_0=
-GL_glRectdv_1=
-
-GL_glRectf=
-GL_glRectf_0=
-GL_glRectf_1=
-GL_glRectf_2=
-GL_glRectf_3=
-
-GL_glRectfv=
-GL_glRectfv_0=
-GL_glRectfv_1=
-
-GL_glRecti=
-GL_glRecti_0=
-GL_glRecti_1=
-GL_glRecti_2=
-GL_glRecti_3=
-
-GL_glRectiv=
-GL_glRectiv_0=
-GL_glRectiv_1=
-
-GL_glRects=
-GL_glRects_0=
-GL_glRects_1=
-GL_glRects_2=
-GL_glRects_3=
-
-GL_glRectsv=
-GL_glRectsv_0=
-GL_glRectsv_1=
-
-GL_glRenderMode=
-GL_glRenderMode_0=
-
-GL_glRotated=
-GL_glRotated_0=
-GL_glRotated_1=
-GL_glRotated_2=
-GL_glRotated_3=
-
-GL_glRotatef=
-GL_glRotatef_0=
-GL_glRotatef_1=
-GL_glRotatef_2=
-GL_glRotatef_3=
-
-GL_glScaled=
-GL_glScaled_0=
-GL_glScaled_1=
-GL_glScaled_2=
-
-GL_glScalef=
-GL_glScalef_0=
-GL_glScalef_1=
-GL_glScalef_2=
-
-GL_glScissor=
-GL_glScissor_0=
-GL_glScissor_1=
-GL_glScissor_2=
-GL_glScissor_3=
-
-GL_glSelectBuffer=
-GL_glSelectBuffer_0=
-GL_glSelectBuffer_1=
-
-GL_glShadeModel=
-GL_glShadeModel_0=
-
-GL_glStencilFunc=
-GL_glStencilFunc_0=
-GL_glStencilFunc_1=
-GL_glStencilFunc_2=
-
-GL_glStencilMask=
-GL_glStencilMask_0=
-
-GL_glStencilOp=
-GL_glStencilOp_0=
-GL_glStencilOp_1=
-GL_glStencilOp_2=
-
-GL_glTexCoord1d=
-GL_glTexCoord1d_0=
-
-GL_glTexCoord1dv=
-GL_glTexCoord1dv_0=
-
-GL_glTexCoord1f=
-GL_glTexCoord1f_0=
-
-GL_glTexCoord1fv=
-GL_glTexCoord1fv_0=
-
-GL_glTexCoord1i=
-GL_glTexCoord1i_0=
-
-GL_glTexCoord1iv=
-GL_glTexCoord1iv_0=
-
-GL_glTexCoord1s=
-GL_glTexCoord1s_0=
-
-GL_glTexCoord1sv=
-GL_glTexCoord1sv_0=
-
-GL_glTexCoord2d=
-GL_glTexCoord2d_0=
-GL_glTexCoord2d_1=
-
-GL_glTexCoord2dv=
-GL_glTexCoord2dv_0=
-
-GL_glTexCoord2f=
-GL_glTexCoord2f_0=
-GL_glTexCoord2f_1=
-
-GL_glTexCoord2fv=
-GL_glTexCoord2fv_0=
-
-GL_glTexCoord2i=
-GL_glTexCoord2i_0=
-GL_glTexCoord2i_1=
-
-GL_glTexCoord2iv=
-GL_glTexCoord2iv_0=
-
-GL_glTexCoord2s=
-GL_glTexCoord2s_0=
-GL_glTexCoord2s_1=
-
-GL_glTexCoord2sv=
-GL_glTexCoord2sv_0=
-
-GL_glTexCoord3d=
-GL_glTexCoord3d_0=
-GL_glTexCoord3d_1=
-GL_glTexCoord3d_2=
-
-GL_glTexCoord3dv=
-GL_glTexCoord3dv_0=
-
-GL_glTexCoord3f=
-GL_glTexCoord3f_0=
-GL_glTexCoord3f_1=
-GL_glTexCoord3f_2=
-
-GL_glTexCoord3fv=
-GL_glTexCoord3fv_0=
-
-GL_glTexCoord3i=
-GL_glTexCoord3i_0=
-GL_glTexCoord3i_1=
-GL_glTexCoord3i_2=
-
-GL_glTexCoord3iv=
-GL_glTexCoord3iv_0=
-
-GL_glTexCoord3s=
-GL_glTexCoord3s_0=
-GL_glTexCoord3s_1=
-GL_glTexCoord3s_2=
-
-GL_glTexCoord3sv=
-GL_glTexCoord3sv_0=
-
-GL_glTexCoord4d=
-GL_glTexCoord4d_0=
-GL_glTexCoord4d_1=
-GL_glTexCoord4d_2=
-GL_glTexCoord4d_3=
-
-GL_glTexCoord4dv=
-GL_glTexCoord4dv_0=
-
-GL_glTexCoord4f=
-GL_glTexCoord4f_0=
-GL_glTexCoord4f_1=
-GL_glTexCoord4f_2=
-GL_glTexCoord4f_3=
-
-GL_glTexCoord4fv=
-GL_glTexCoord4fv_0=
-
-GL_glTexCoord4i=
-GL_glTexCoord4i_0=
-GL_glTexCoord4i_1=
-GL_glTexCoord4i_2=
-GL_glTexCoord4i_3=
-
-GL_glTexCoord4iv=
-GL_glTexCoord4iv_0=
-
-GL_glTexCoord4s=
-GL_glTexCoord4s_0=
-GL_glTexCoord4s_1=
-GL_glTexCoord4s_2=
-GL_glTexCoord4s_3=
-
-GL_glTexCoord4sv=
-GL_glTexCoord4sv_0=
-
-GL_glTexCoordPointer=
-GL_glTexCoordPointer_0=
-GL_glTexCoordPointer_1=
-GL_glTexCoordPointer_2=
-GL_glTexCoordPointer_3=
-
-GL_glTexEnvf=
-GL_glTexEnvf_0=
-GL_glTexEnvf_1=
-GL_glTexEnvf_2=
-
-GL_glTexEnvfv=
-GL_glTexEnvfv_0=
-GL_glTexEnvfv_1=
-GL_glTexEnvfv_2=
-
-GL_glTexEnvi=
-GL_glTexEnvi_0=
-GL_glTexEnvi_1=
-GL_glTexEnvi_2=
-
-GL_glTexEnviv=
-GL_glTexEnviv_0=
-GL_glTexEnviv_1=
-GL_glTexEnviv_2=
-
-GL_glTexGend=
-GL_glTexGend_0=
-GL_glTexGend_1=
-GL_glTexGend_2=
-
-GL_glTexGendv=
-GL_glTexGendv_0=
-GL_glTexGendv_1=
-GL_glTexGendv_2=
-
-GL_glTexGenf=
-GL_glTexGenf_0=
-GL_glTexGenf_1=
-GL_glTexGenf_2=
-
-GL_glTexGenfv=
-GL_glTexGenfv_0=
-GL_glTexGenfv_1=
-GL_glTexGenfv_2=
-
-GL_glTexGeni=
-GL_glTexGeni_0=
-GL_glTexGeni_1=
-GL_glTexGeni_2=
-
-GL_glTexGeniv=
-GL_glTexGeniv_0=
-GL_glTexGeniv_1=
-GL_glTexGeniv_2=
-
-GL_glTexImage1D=
-GL_glTexImage1D_0=
-GL_glTexImage1D_1=
-GL_glTexImage1D_2=
-GL_glTexImage1D_3=
-GL_glTexImage1D_4=
-GL_glTexImage1D_5=
-GL_glTexImage1D_6=
-GL_glTexImage1D_7=
-
-GL_glTexImage2D=
-GL_glTexImage2D_0=
-GL_glTexImage2D_1=
-GL_glTexImage2D_2=
-GL_glTexImage2D_3=
-GL_glTexImage2D_4=
-GL_glTexImage2D_5=
-GL_glTexImage2D_6=
-GL_glTexImage2D_7=
-GL_glTexImage2D_8=
-
-GL_glTexParameterf=
-GL_glTexParameterf_0=
-GL_glTexParameterf_1=
-GL_glTexParameterf_2=
-
-GL_glTexParameterfv=
-GL_glTexParameterfv_0=
-GL_glTexParameterfv_1=
-GL_glTexParameterfv_2=
-
-GL_glTexParameteri=
-GL_glTexParameteri_0=
-GL_glTexParameteri_1=
-GL_glTexParameteri_2=
-
-GL_glTexParameteriv=
-GL_glTexParameteriv_0=
-GL_glTexParameteriv_1=
-GL_glTexParameteriv_2=
-
-GL_glTexSubImage1D=
-GL_glTexSubImage1D_0=
-GL_glTexSubImage1D_1=
-GL_glTexSubImage1D_2=
-GL_glTexSubImage1D_3=
-GL_glTexSubImage1D_4=
-GL_glTexSubImage1D_5=
-GL_glTexSubImage1D_6=
-
-GL_glTexSubImage2D=
-GL_glTexSubImage2D_0=
-GL_glTexSubImage2D_1=
-GL_glTexSubImage2D_2=
-GL_glTexSubImage2D_3=
-GL_glTexSubImage2D_4=
-GL_glTexSubImage2D_5=
-GL_glTexSubImage2D_6=
-GL_glTexSubImage2D_7=
-GL_glTexSubImage2D_8=
-
-GL_glTranslated=
-GL_glTranslated_0=
-GL_glTranslated_1=
-GL_glTranslated_2=
-
-GL_glTranslatef=
-GL_glTranslatef_0=
-GL_glTranslatef_1=
-GL_glTranslatef_2=
-
-GL_glVertex2d=
-GL_glVertex2d_0=
-GL_glVertex2d_1=
-
-GL_glVertex2dv=
-GL_glVertex2dv_0=
-
-GL_glVertex2f=
-GL_glVertex2f_0=
-GL_glVertex2f_1=
-
-GL_glVertex2fv=
-GL_glVertex2fv_0=
-
-GL_glVertex2i=
-GL_glVertex2i_0=
-GL_glVertex2i_1=
-
-GL_glVertex2iv=
-GL_glVertex2iv_0=
-
-GL_glVertex2s=
-GL_glVertex2s_0=
-GL_glVertex2s_1=
-
-GL_glVertex2sv=
-GL_glVertex2sv_0=
-
-GL_glVertex3d=
-GL_glVertex3d_0=
-GL_glVertex3d_1=
-GL_glVertex3d_2=
-
-GL_glVertex3dv__I=
-GL_glVertex3dv__I_0=
-
-GL_glVertex3dv___3D=
-GL_glVertex3dv___3D_0=
-
-GL_glVertex3f=
-GL_glVertex3f_0=
-GL_glVertex3f_1=
-GL_glVertex3f_2=
-
-GL_glVertex3fv=
-GL_glVertex3fv_0=
-
-GL_glVertex3i=
-GL_glVertex3i_0=
-GL_glVertex3i_1=
-GL_glVertex3i_2=
-
-GL_glVertex3iv=
-GL_glVertex3iv_0=
-
-GL_glVertex3s=
-GL_glVertex3s_0=
-GL_glVertex3s_1=
-GL_glVertex3s_2=
-
-GL_glVertex3sv=
-GL_glVertex3sv_0=
-
-GL_glVertex4d=
-GL_glVertex4d_0=
-GL_glVertex4d_1=
-GL_glVertex4d_2=
-GL_glVertex4d_3=
-
-GL_glVertex4dv=
-GL_glVertex4dv_0=
-
-GL_glVertex4f=
-GL_glVertex4f_0=
-GL_glVertex4f_1=
-GL_glVertex4f_2=
-GL_glVertex4f_3=
-
-GL_glVertex4fv=
-GL_glVertex4fv_0=
-
-GL_glVertex4i=
-GL_glVertex4i_0=
-GL_glVertex4i_1=
-GL_glVertex4i_2=
-GL_glVertex4i_3=
-
-GL_glVertex4iv=
-GL_glVertex4iv_0=
-
-GL_glVertex4s=
-GL_glVertex4s_0=
-GL_glVertex4s_1=
-GL_glVertex4s_2=
-GL_glVertex4s_3=
-
-GL_glVertex4sv=
-GL_glVertex4sv_0=
-
-GL_glVertexPointer=
-GL_glVertexPointer_0=
-GL_glVertexPointer_1=
-GL_glVertexPointer_2=
-GL_glVertexPointer_3=
-
-GL_glViewport=
-GL_glViewport_0=
-GL_glViewport_1=
-GL_glViewport_2=
-GL_glViewport_3=
-
-
-org_eclipse_swt_opengl_GLContext=flags=no_gen
-
-org_eclipse_swt_opengl_GLData=flags=no_gen
-GLData_device=
-GLData_style=
-GLData_image=
-GLData_display=
-GLData_drawable=
-GLData_foreground=
-GLData_background=
-GLData_font=
-GLData_colormap=
-GLData_clipRgn=
-GLData_lineStyle=
-GLData_renderTable=
-GLData_string=
-GLData_stringWidth=
-GLData_stringHeight=
-GLData_xmString=
-GLData_text=
-GLData_textWidth=
-GLData_textHeight=
-GLData_xmText=
-GLData_xmMnemonic=
-GLData_drawFlags=
-
-org_eclipse_swt_opengl_GLDrawable=flags=no_gen
-
-org_eclipse_swt_opengl_GLListener=flags=no_gen
-
-org_eclipse_swt_opengl_GLU=
-GLU_gluBeginCurve=
-GLU_gluBeginCurve_0=cast=(GLUnurbs *)
-
-GLU_gluBeginPolygon=
-GLU_gluBeginPolygon_0=cast=(GLUtesselator*)
-
-GLU_gluBeginSurface=
-GLU_gluBeginSurface_0=cast=(GLUnurbs *)
-
-GLU_gluBeginTrim=
-GLU_gluBeginTrim_0=cast=(GLUnurbs *)
-
-GLU_gluBuild1DMipmaps=
-GLU_gluBuild1DMipmaps_0=
-GLU_gluBuild1DMipmaps_1=
-GLU_gluBuild1DMipmaps_2=
-GLU_gluBuild1DMipmaps_3=
-GLU_gluBuild1DMipmaps_4=
-GLU_gluBuild1DMipmaps_5=cast=(const void *)
-
-GLU_gluBuild2DMipmaps=
-GLU_gluBuild2DMipmaps_0=
-GLU_gluBuild2DMipmaps_1=
-GLU_gluBuild2DMipmaps_2=
-GLU_gluBuild2DMipmaps_3=
-GLU_gluBuild2DMipmaps_4=
-GLU_gluBuild2DMipmaps_5=
-GLU_gluBuild2DMipmaps_6=flags=critical
-
-GLU_gluCylinder=
-GLU_gluCylinder_0=cast=(GLUquadric *)
-GLU_gluCylinder_1=
-GLU_gluCylinder_2=
-GLU_gluCylinder_3=
-GLU_gluCylinder_4=
-GLU_gluCylinder_5=
-
-GLU_gluDeleteNurbsRenderer=
-GLU_gluDeleteNurbsRenderer_0=cast=(GLUnurbs *)
-
-GLU_gluDeleteQuadric=
-GLU_gluDeleteQuadric_0=cast=(GLUquadric *)
-
-GLU_gluDeleteTess=
-GLU_gluDeleteTess_0=cast=(GLUtesselator *)
-
-GLU_gluDisk=
-GLU_gluDisk_0=cast=(GLUquadricObj *)
-GLU_gluDisk_1=
-GLU_gluDisk_2=
-GLU_gluDisk_3=
-GLU_gluDisk_4=
-
-GLU_gluEndCurve=
-GLU_gluEndCurve_0=cast=(GLUnurbsObj *)
-
-GLU_gluEndPolygon=
-GLU_gluEndPolygon_0=cast=(GLUtriangulatorObj *)
-
-GLU_gluEndSurface=
-GLU_gluEndSurface_0=cast=(GLUnurbsObj *)
-
-GLU_gluEndTrim=
-GLU_gluEndTrim_0=cast=(GLUnurbsObj *)
-
-GLU_gluErrorString=
-GLU_gluErrorString_0=
-
-GLU_gluGetNurbsProperty=
-GLU_gluGetNurbsProperty_0=cast=(GLUnurbs *)
-GLU_gluGetNurbsProperty_1=
-GLU_gluGetNurbsProperty_2=flags=critical
-
-GLU_gluGetString=
-GLU_gluGetString_0=
-
-GLU_gluGetTessProperty=
-GLU_gluGetTessProperty_0=cast=(GLUtesselator *)
-GLU_gluGetTessProperty_1=
-GLU_gluGetTessProperty_2=flags=critical
-
-GLU_gluLoadSamplingMatrices=
-GLU_gluLoadSamplingMatrices_0=cast=(GLUnurbs *)
-GLU_gluLoadSamplingMatrices_1=flags=critical
-GLU_gluLoadSamplingMatrices_2=flags=critical
-GLU_gluLoadSamplingMatrices_3=flags=critical
-
-GLU_gluLookAt=
-GLU_gluLookAt_0=
-GLU_gluLookAt_1=
-GLU_gluLookAt_2=
-GLU_gluLookAt_3=
-GLU_gluLookAt_4=
-GLU_gluLookAt_5=
-GLU_gluLookAt_6=
-GLU_gluLookAt_7=
-GLU_gluLookAt_8=
-
-GLU_gluNewNurbsRenderer=
-
-GLU_gluNewQuadric=
-
-GLU_gluNewTess=
-
-GLU_gluNextContour=
-GLU_gluNextContour_0=cast=(GLUtesselator *)
-GLU_gluNextContour_1=
-
-GLU_gluNurbsCallback=
-GLU_gluNurbsCallback_0=cast=(GLUnurbs *)
-GLU_gluNurbsCallback_1=
-GLU_gluNurbsCallback_2=cast=(GLvoid(*))
-
-GLU_gluNurbsCurve=
-GLU_gluNurbsCurve_0=cast=(GLUnurbs *)
-GLU_gluNurbsCurve_1=
-GLU_gluNurbsCurve_2=flags=critical
-GLU_gluNurbsCurve_3=
-GLU_gluNurbsCurve_4=flags=critical
-GLU_gluNurbsCurve_5=
-GLU_gluNurbsCurve_6=
-
-GLU_gluNurbsProperty=
-GLU_gluNurbsProperty_0=cast=(GLUnurbs *)
-GLU_gluNurbsProperty_1=
-GLU_gluNurbsProperty_2=
-
-GLU_gluNurbsSurface=
-GLU_gluNurbsSurface_0=cast=(GLUnurbsObj *)
-GLU_gluNurbsSurface_1=
-GLU_gluNurbsSurface_2=flags=critical
-GLU_gluNurbsSurface_3=
-GLU_gluNurbsSurface_4=flags=critical
-GLU_gluNurbsSurface_5=
-GLU_gluNurbsSurface_6=
-GLU_gluNurbsSurface_7=flags=critical
-GLU_gluNurbsSurface_8=
-GLU_gluNurbsSurface_9=
-GLU_gluNurbsSurface_10=
-
-GLU_gluOrtho2D=
-GLU_gluOrtho2D_0=
-GLU_gluOrtho2D_1=
-GLU_gluOrtho2D_2=
-GLU_gluOrtho2D_3=
-
-GLU_gluPartialDisk=
-GLU_gluPartialDisk_0=cast=(GLUquadric *)
-GLU_gluPartialDisk_1=
-GLU_gluPartialDisk_2=
-GLU_gluPartialDisk_3=
-GLU_gluPartialDisk_4=
-GLU_gluPartialDisk_5=
-GLU_gluPartialDisk_6=
-
-GLU_gluPerspective=
-GLU_gluPerspective_0=
-GLU_gluPerspective_1=
-GLU_gluPerspective_2=
-GLU_gluPerspective_3=
-
-GLU_gluPickMatrix=
-GLU_gluPickMatrix_0=
-GLU_gluPickMatrix_1=
-GLU_gluPickMatrix_2=
-GLU_gluPickMatrix_3=
-GLU_gluPickMatrix_4=flags=critical
-
-GLU_gluProject=
-GLU_gluProject_0=
-GLU_gluProject_1=
-GLU_gluProject_2=
-GLU_gluProject_3=flags=critical
-GLU_gluProject_4=flags=critical
-GLU_gluProject_5=flags=critical
-GLU_gluProject_6=flags=critical
-GLU_gluProject_7=flags=critical
-GLU_gluProject_8=flags=critical
-
-GLU_gluPwlCurve=
-GLU_gluPwlCurve_0=cast=(GLUnurbs *)
-GLU_gluPwlCurve_1=
-GLU_gluPwlCurve_2=flags=critical
-GLU_gluPwlCurve_3=
-GLU_gluPwlCurve_4=
-
-GLU_gluQuadricCallback=
-GLU_gluQuadricCallback_0=cast=(GLUquadricObj *)
-GLU_gluQuadricCallback_1=
-GLU_gluQuadricCallback_2=cast=(GLvoid(*))
-
-GLU_gluQuadricDrawStyle=
-GLU_gluQuadricDrawStyle_0=cast=(GLUquadricObj *)
-GLU_gluQuadricDrawStyle_1=
-
-GLU_gluQuadricNormals=
-GLU_gluQuadricNormals_0=cast=(GLUquadricObj *)
-GLU_gluQuadricNormals_1=
-
-GLU_gluQuadricOrientation=
-GLU_gluQuadricOrientation_0=cast=(GLUquadric *)
-GLU_gluQuadricOrientation_1=
-
-GLU_gluQuadricTexture=
-GLU_gluQuadricTexture_0=cast=(GLUquadric *)
-GLU_gluQuadricTexture_1=
-
-GLU_gluScaleImage=
-GLU_gluScaleImage_0=
-GLU_gluScaleImage_1=
-GLU_gluScaleImage_2=
-GLU_gluScaleImage_3=
-GLU_gluScaleImage_4=cast=(const void *)
-GLU_gluScaleImage_5=
-GLU_gluScaleImage_6=
-GLU_gluScaleImage_7=
-GLU_gluScaleImage_8=cast=(void *)
-
-GLU_gluSphere=
-GLU_gluSphere_0=cast=(GLUquadric *)
-GLU_gluSphere_1=
-GLU_gluSphere_2=
-GLU_gluSphere_3=
-
-GLU_gluTessBeginContour=
-GLU_gluTessBeginContour_0=cast=(GLUtesselator *)
-
-GLU_gluTessBeginPolygon=
-GLU_gluTessBeginPolygon_0=cast=(GLUtesselator *)
-GLU_gluTessBeginPolygon_1=cast=(GLvoid *)
-
-GLU_gluTessCallback=
-GLU_gluTessCallback_0=cast=(GLUtesselator *)
-GLU_gluTessCallback_1=
-GLU_gluTessCallback_2=cast=(GLvoid(*))
-
-GLU_gluTessEndContour=
-GLU_gluTessEndContour_0=cast=(GLUtesselator *)
-
-GLU_gluTessEndPolygon=
-GLU_gluTessEndPolygon_0=cast=(GLUtesselator *)
-
-GLU_gluTessNormal=
-GLU_gluTessNormal_0=cast=(GLUtesselator *)
-GLU_gluTessNormal_1=
-GLU_gluTessNormal_2=
-GLU_gluTessNormal_3=
-
-GLU_gluTessProperty=
-GLU_gluTessProperty_0=cast=(GLUtesselator *)
-GLU_gluTessProperty_1=
-GLU_gluTessProperty_2=
-
-GLU_gluTessVertex=
-GLU_gluTessVertex_0=cast=(GLUtesselator *)
-GLU_gluTessVertex_1=flags=critical
-GLU_gluTessVertex_2=cast=(GLvoid *)
-
-GLU_gluUnProject=
-GLU_gluUnProject_0=
-GLU_gluUnProject_1=
-GLU_gluUnProject_2=
-GLU_gluUnProject_3=flags=critical
-GLU_gluUnProject_4=flags=critical
-GLU_gluUnProject_5=flags=critical
-GLU_gluUnProject_6=flags=critical
-GLU_gluUnProject_7=flags=critical
-GLU_gluUnProject_8=flags=critical
-
-
-org_eclipse_swt_opengl_Library=flags=no_gen
-
diff --git a/bundles/org.eclipse.swt.tools/META-INF/MANIFEST.MF b/bundles/org.eclipse.swt.tools/META-INF/MANIFEST.MF
new file mode 100755
index 0000000..4ca802f
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-Name: %pluginName
+Bundle-Vendor: %providerName
+Bundle-SymbolicName: org.eclipse.swt.tools; singleton:=true
+Bundle-Version: 3.6.0.qualifier
+Bundle-Activator: org.eclipse.swt.tools.Activator
+Bundle-ManifestVersion: 2
+Export-Package: org.eclipse.swt.tools,
+ org.eclipse.swt.tools.internal; x-internal:=true
+Bundle-ActivationPolicy: lazy
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Require-Bundle: org.eclipse.swt;bundle-version="3.4.0",
+ org.eclipse.core.runtime;bundle-version="3.4.0",
+ org.eclipse.core.resources;bundle-version="3.4.0",
+ org.eclipse.jdt.core;bundle-version="3.4.0",
+ org.eclipse.ui;bundle-version="3.4.0",
+ org.eclipse.ui.editors;bundle-version="3.4.0"
diff --git a/bundles/org.eclipse.swt.tools/META-INF/p2.inf b/bundles/org.eclipse.swt.tools/META-INF/p2.inf
new file mode 100644
index 0000000..91fb386
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/META-INF/p2.inf
@@ -0,0 +1,13 @@
+units.1.id=org.eclipse.swt.tools.category
+units.1.version=1.0.0.$qualifier$
+units.1.provides.1.namespace=org.eclipse.equinox.p2.iu
+units.1.provides.1.name=org.eclipse.swt.tools.category
+units.1.provides.1.version=0.0.0
+units.1.properties.1.name=org.eclipse.equinox.p2.name
+units.1.properties.1.value=SWT Tools
+units.1.properties.2.name=org.eclipse.equinox.p2.type.category
+units.1.properties.2.value=true
+units.1.requires.1.namespace=org.eclipse.equinox.p2.iu
+units.1.requires.1.name=org.eclipse.swt.tools
+units.1.requires.1.range=[$version$,$version$]
+units.1.requires.1.greedy=true      
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt.tools/Mac Generation/org/eclipse/swt/tools/internal/DOMWriter.java b/bundles/org.eclipse.swt.tools/Mac Generation/org/eclipse/swt/tools/internal/DOMWriter.java
new file mode 100644
index 0000000..71813bf
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/Mac Generation/org/eclipse/swt/tools/internal/DOMWriter.java
Binary files differ
diff --git a/bundles/org.eclipse.swt.tools/Mac Generation/org/eclipse/swt/tools/internal/MacGenerator.java b/bundles/org.eclipse.swt.tools/Mac Generation/org/eclipse/swt/tools/internal/MacGenerator.java
new file mode 100644
index 0000000..45bddc0
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/Mac Generation/org/eclipse/swt/tools/internal/MacGenerator.java
@@ -0,0 +1,1675 @@
+/*******************************************************************************
+ * Copyright (c) 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.tools.internal;
+
+import java.io.*;
+import java.util.*;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import org.w3c.dom.*;
+import org.xml.sax.InputSource;
+
+public class MacGenerator {
+	String[] xmls;
+	Document[] documents;
+	String outputDir, mainClassName;
+	String delimiter = System.getProperty("line.separator");
+
+	PrintStream out;
+	
+	public static boolean BUILD_C_SOURCE = true;
+
+public MacGenerator() {
+}
+
+static void list(File path, ArrayList list) {
+	if (path == null) return;
+	File[] frameworks = path.listFiles();
+	if (frameworks == null) return;
+	for (int i = 0; i < frameworks.length; i++) {
+		File file = frameworks[i];
+		String name = file.getName();
+		int index = name.lastIndexOf(".");
+		if (index != -1) {
+			String xml = file.getAbsolutePath() + "/Resources/BridgeSupport/" + name.substring(0, index) + "Full.bridgesupport";
+			if (new File(xml).exists()) {
+				list.add(xml);
+			}
+		}
+	}
+}
+
+int getLevel(Node node) {
+	int level = 0;
+	while (node != null) {
+		level++;
+		node = node.getParentNode();
+	}
+	return level;
+}
+
+void merge(Document document, Document extraDocument) {
+	if (extraDocument == null) return;
+	
+	/* Build a lookup table for extraDocument */
+	HashMap extras = new HashMap();
+	buildLookup(extraDocument, extras);
+
+	/* Merge attributes on existing elements building a lookup table for document */
+	HashMap lookup = new HashMap();
+	merge(document, extras, lookup);
+	
+	/* 
+	 * Merge new elements. Extras at this point contains only elements that were
+	 * not found in the document.
+	 */
+	ArrayList sortedNodes = Collections.list(Collections.enumeration(extras.values()));
+	Collections.sort(sortedNodes, new Comparator() {
+		public int compare(Object arg0, Object arg1) {
+			int compare = getLevel((Node)arg0) - getLevel((Node)arg1);
+			if (compare == 0) {
+				return ((Node)arg0).getNodeName().compareTo(((Node)arg1).getNodeName());
+			}
+			return compare;
+		}
+	});
+	String delimiter = System.getProperty("line.separator");
+	for (Iterator iterator = sortedNodes.iterator(); iterator.hasNext();) {
+		Node node = (Node) iterator.next();
+		String name = node.getNodeName();
+		if ("arg".equals(name) || "retval".equals(name)) {
+			if (!sortedNodes.contains(node.getParentNode())) continue;
+		}
+		Node parent = (Node)lookup.get(getKey(node.getParentNode()));
+		Element element = document.createElement(node.getNodeName());
+		String text = parent.getChildNodes().getLength() == 0 ? delimiter : "";
+		for (int i = 0, level = getLevel(parent) - 1; i < level; i++) {
+			text += "  ";
+		}
+		parent.appendChild(document.createTextNode(text));
+		parent.appendChild(element);
+		parent.appendChild(document.createTextNode(delimiter));
+		NamedNodeMap attributes = node.getAttributes();
+		for (int j = 0, length = attributes.getLength(); j < length; j++) {
+			Node attr = (Node)attributes.item(j);
+			element.setAttribute(attr.getNodeName(), attr.getNodeValue());
+		}
+		lookup.put(getKey(element), element);
+	}
+}
+
+public void generate(ProgressMonitor progress) {
+	if (progress != null) {
+		progress.setTotal(BUILD_C_SOURCE ? 4 : 3);
+		progress.setMessage("extra attributes...");
+	}
+	generateExtraAttributes();
+	if (progress != null) {
+		progress.step();
+		progress.setMessage(mainClassName);
+	}
+	generateMainClass();
+	if (progress != null) {
+		progress.step();
+		progress.setMessage("classes...");
+	}
+	generateClasses();
+	if (BUILD_C_SOURCE) {
+		if (progress != null) {
+			progress.step();
+			progress.setMessage("C source...");
+		}
+		generateCSource();
+	}
+	if (progress != null) {
+		progress.step();
+		progress.setMessage("Done.");
+	}
+}
+
+void generateCSource() {
+	JNIGeneratorApp app = new JNIGeneratorApp();
+	app.setMainClassName(mainClassName, outputDir + "/library");
+	app.generate();
+}
+
+String fixDelimiter(String str) {
+	if (delimiter.equals("\n")) return str;
+	int index = 0, length = str.length();
+	StringBuffer buffer = new StringBuffer();
+	while (index != -1) {
+		int start = index;
+		index = str.indexOf('\n', start);
+		if (index == -1) {
+			buffer.append(str.substring(start, length));
+		} else {
+			buffer.append(str.substring(start, index));
+			buffer.append(delimiter);
+			index++;
+		}
+	}
+	return buffer.toString();
+}
+
+void generateMethods(String className, ArrayList methods) {
+	for (Iterator iterator = methods.iterator(); iterator.hasNext();) {
+		Node method = (Node)iterator.next();
+		NamedNodeMap mthAttributes = method.getAttributes();
+		String sel = mthAttributes.getNamedItem("selector").getNodeValue();
+		out("public ");
+		boolean isStatic = isStatic(method); 
+		if (isStatic) out("static ");
+		Node returnNode = getReturnNode(method.getChildNodes());
+		if (getType(returnNode).equals("void")) returnNode = null;
+		String returnType = "", returnType64 = "";
+		if (returnNode != null) {
+			String type = returnType = getJavaType(returnNode), type64 = returnType64 = getJavaType64(returnNode);
+			out(type);
+			if (!type.equals(type64)) {
+				out(" /*");
+				out(type64);
+				out("*/");
+			}
+			out(" ");
+		} else {
+			out("void ");
+		}
+		String methodName = sel;
+		if (isUnique(method, methods)) {
+			int index = methodName.indexOf(":");
+			if (index != -1) methodName = methodName.substring(0, index);
+		} else {
+			//TODO improve this selector
+			methodName = methodName.replaceAll(":", "_");
+			if (isStatic) methodName = "static_" + methodName;
+		}
+		out(methodName);
+		out("(");
+		NodeList params = method.getChildNodes();
+		boolean first = true;
+		for (int k = 0; k < params.getLength(); k++) {
+			Node param = params.item(k);
+			if ("arg".equals(param.getNodeName())) {
+				NamedNodeMap paramAttributes = param.getAttributes();
+				if (!first) out(", ");
+				String type = getJavaType(param), type64 = getJavaType64(param);
+				out( type);
+				if (!type.equals(type64)) {
+					out(" /*");
+					out(type64);
+					out("*/");
+				}
+				first = false;
+				out(" ");
+				String paramName = paramAttributes.getNamedItem("name").getNodeValue();
+				if (paramName.length() == 0) paramName = "arg" + paramAttributes.getNamedItem("index").getNodeValue();
+				if (paramName.equals("boolean")) paramName = "b";
+				out(paramName);
+			}
+		}
+		out(") {");
+		outln();
+		if (returnNode != null && isStruct(returnNode)) {
+			out("\t");
+			out(returnType);
+			out(" result = new ");
+			out(returnType);
+			out("();");
+			outln();
+			out("\tOS.objc_msgSend_stret(result, ");
+		} else if (returnNode != null && isBoolean(returnNode)) {
+			out("\treturn ");
+			out("OS.objc_msgSend_bool(");
+		} else if (returnNode != null && isFloatingPoint(returnNode)) {
+			out("\treturn ");
+			if (returnType.equals("float")) out("(float)");
+			out("OS.objc_msgSend_fpret(");
+		} else if (returnNode != null && isObject(returnNode)) {
+			out("\tint /*long*/ result = OS.objc_msgSend(");
+		} else {
+			if (returnNode != null) {
+				out("\treturn ");
+				if ((returnType.equals("int") && returnType64.equals("int")) || !returnType.equals("int")) {
+					out("(");
+					out(returnType);
+					out(")");
+				}
+				if (returnType.equals("int") && returnType64.equals("int")) {
+					out("/*64*/");
+				}
+			} else {
+				out("\t");
+			}
+			out("OS.objc_msgSend(");
+		}
+		if (isStatic) {
+			out("OS.class_");
+			out(className);
+		} else {
+			out("this.id");
+		}
+		out(", OS.");
+		out(getSelConst(sel));
+		first = false;
+		for (int k = 0; k < params.getLength(); k++) {
+			Node param = params.item(k);
+			if ("arg".equals(param.getNodeName())) {
+				NamedNodeMap paramAttributes = param.getAttributes();
+				if (!first) out(", ");
+				first = false;
+				String paramName = paramAttributes.getNamedItem("name").getNodeValue();
+				if (paramName.length() == 0) paramName = "arg" + paramAttributes.getNamedItem("index").getNodeValue();
+				if (paramName.equals("boolean")) paramName = "b";
+				if (isObject(param)) {
+					out(paramName);
+					out(" != null ? ");
+					out(paramName);
+					out(".id : 0");
+				} else {
+					out(paramName);
+				}
+			}
+		}
+		out(")");
+		out(";");
+		outln();
+		if (returnNode != null && isObject(returnNode)) {
+			if (!isStatic && returnType.equals(className)) {
+				out("\treturn result == this.id ? this : (result != 0 ? new ");
+				out(returnType);
+				out("(result) : null);");
+			} else {
+				out("\treturn result != 0 ? new ");
+				NamedNodeMap attributes = returnNode.getAttributes();
+				Node swt_alloc = attributes.getNamedItem("swt_alloc");
+				if (swt_alloc != null && swt_alloc.getNodeValue().equals("true")) {
+					out(className);
+				} else {
+					out(returnType);
+				}
+				out("(result) : null;");
+			}
+			outln();
+		} else if (returnNode != null && isStruct(returnNode)) {
+			out("\treturn result;");
+			outln();
+		}
+		out("}");
+		outln();
+		outln();
+	}
+}
+
+void generateExtraMethods(String className) {
+	/* Empty constructor */
+	out("public ");
+	out(className);
+	out("() {");
+	outln();
+	out("\tsuper();");
+	outln();
+	out("}");
+	outln();
+	outln();
+	/* pointer constructor */
+	out("public ");
+	out(className);
+	out("(int /*long*/ id) {");
+	outln();
+	out("\tsuper(id);");
+	outln();
+	out("}");
+	outln();
+	outln();
+	/* object constructor */
+	out("public ");
+	out(className);
+	out("(id id) {");
+	outln();
+	out("\tsuper(id);");
+	outln();
+	out("}");
+	outln();
+	outln();
+	/* NSObject helpers */
+	if (className.equals("NSObject")) {
+		out("public NSObject alloc() {");
+		outln();
+		out("\tthis.id = OS.objc_msgSend(objc_getClass(), OS.sel_alloc);");
+		outln();
+		out("\treturn this;");
+		outln();
+		out("}");
+		outln();
+		outln();
+	}
+	/* NSString helpers */
+	if (className.equals("NSString")) {
+		/* Get java string */
+		out("public String getString() {");
+		outln();
+		out("\tchar[] buffer = new char[(int)/*64*/length()];");
+		outln();
+		out("\tgetCharacters(buffer);");
+		outln();
+		out("\treturn new String(buffer);");
+		outln();
+		out("}");
+		outln();
+		outln();
+		/* create NSString */
+		out("public static NSString stringWith(String str) {");
+		outln();
+		out("\tchar[] buffer = new char[str.length()];");
+		outln();
+		out("\tstr.getChars(0, buffer.length, buffer, 0);");
+		outln();
+		out("\treturn stringWithCharacters(buffer, buffer.length);");
+		outln();
+		out("}");
+		outln();
+		outln();
+	}	
+}
+
+TreeMap getGeneratedClasses() {
+	TreeMap classes = new TreeMap();
+	for (int x = 0; x < xmls.length; x++) {
+		Document document = documents[x];
+		if (document == null) continue;
+		NodeList list = document.getDocumentElement().getChildNodes();
+		for (int i = 0; i < list.getLength(); i++) {
+			Node node = list.item(i);
+			if ("class".equals(node.getNodeName()) && getGen(node)) {
+				ArrayList methods;
+				String name = node.getAttributes().getNamedItem("name").getNodeValue();
+				Object[] clazz = (Object[])classes.get(name);
+				if (clazz == null) {
+					methods = new ArrayList();
+					classes.put(name, new Object[]{node, methods});
+				} else {
+					methods = (ArrayList)clazz[1];
+				}
+				NodeList methodList = node.getChildNodes();
+				for (int j = 0; j < methodList.getLength(); j++) {
+					Node method = methodList.item(j);
+					if ("method".equals(method.getNodeName()) && getGen(method)) {
+						methods.add(method);
+					}					
+				}
+			}
+		}
+	}
+	return classes;
+}
+
+void copyClassMethodsDown(final Map classes) {
+	ArrayList sortedClasses = Collections.list(Collections.enumeration(classes.values()));
+	Collections.sort(sortedClasses, new Comparator() {
+		int getHierarchyLevel(Node node) {
+			String superclass = getSuperclassName(node);
+			int level = 0;
+			while (!superclass.equals("id")) {
+				level++;
+				superclass = getSuperclassName((Node)((Object[])classes.get(superclass))[0]);
+			}
+			return level;			
+		}
+		public int compare(Object arg0, Object arg1) {
+			return getHierarchyLevel((Node)((Object[])arg0)[0]) - getHierarchyLevel((Node)((Object[])arg1)[0]);  
+		}
+	});
+	for (Iterator iterator = sortedClasses.iterator(); iterator.hasNext();) {
+		Object[] clazz = (Object[]) iterator.next();
+		Node node = (Node)clazz[0];
+		ArrayList methods = (ArrayList)clazz[1];
+		Object[] superclass = (Object[])classes.get(getSuperclassName(node));
+		if (superclass != null) {
+			for (Iterator iterator2 = ((ArrayList)superclass[1]).iterator(); iterator2.hasNext();) {
+				Node method = (Node) iterator2.next();
+				if (isStatic(method)) {
+					methods.add(method);
+				}
+			}
+		}
+	}
+}
+
+String getSuperclassName (Node node) {
+	NamedNodeMap attributes = node.getAttributes();
+	Node superclass = attributes.getNamedItem("swt_superclass");
+	if (superclass != null) {
+		return superclass.getNodeValue();
+	} else {
+		Node name = attributes.getNamedItem("name");
+		if (name.getNodeValue().equals("NSObject")) {
+			return "id";
+		} else {
+			return "NSObject";
+		}
+	}
+}
+
+void generateClasses() {
+	MetaData metaData = new MetaData(mainClassName);	
+	TreeMap classes = getGeneratedClasses();
+	copyClassMethodsDown(classes);
+	
+	Set classNames = classes.keySet();
+	for (Iterator iterator = classNames.iterator(); iterator.hasNext();) {
+		ByteArrayOutputStream out = new ByteArrayOutputStream();
+		this.out = new PrintStream(out);
+
+		out(fixDelimiter(metaData.getCopyright()));
+
+		String className = (String) iterator.next();
+		Object[] clazz = (Object[])classes.get(className);
+		Node node = (Node)clazz[0];
+		ArrayList methods = (ArrayList)clazz[1];
+		out("package ");
+		String packageName = getPackageName(mainClassName);
+		out(packageName);
+		out(";");
+		outln();
+		outln();
+		out("public class ");
+		out(className);
+		out(" extends ");
+		out(getSuperclassName(node));
+		out(" {");
+		outln();
+		outln();		
+		generateExtraMethods(className);
+		generateMethods(className, methods);		
+		out("}");
+		outln();
+		
+		String fileName = outputDir + packageName.replace('.', '/') + "/" + className + ".java";
+		try {
+			out.flush();
+			if (out.size() > 0) JNIGenerator.output(out.toByteArray(), fileName);
+		} catch (Exception e) {
+			System.out.println("Problem");
+			e.printStackTrace(System.out);
+		}
+		out = null;
+	}
+}
+
+void generateExtraAttributes() {
+	Document[] documents = getDocuments();
+	for (int x = 0; x < xmls.length; x++) {
+		Document document = documents[x];
+		if (document == null || !getGen(document.getDocumentElement())) continue;
+		saveExtraAttributes(xmls[x], document);
+	}
+}
+
+void generateMainClass() {
+	ByteArrayOutputStream out = new ByteArrayOutputStream();
+	this.out = new PrintStream(out);
+
+	String header = "", footer = "";
+	String fileName = outputDir + mainClassName.replace('.', '/') + ".java";
+	FileInputStream is = null;
+	try {
+		InputStreamReader input = new InputStreamReader(new BufferedInputStream(is = new FileInputStream(fileName)));
+		StringBuffer str = new StringBuffer();
+		char[] buffer = new char[4096];
+		int read;
+		while ((read = input.read(buffer)) != -1) {
+			str.append(buffer, 0, read);
+		}
+		String section = "/** This section is auto generated */";
+		int start = str.indexOf(section) + section.length();
+		int end = str.indexOf(section, start);
+		header = str.substring(0, start);
+		footer = str.substring(end);
+	} catch (IOException e) {
+	} finally {
+		try {
+			if (is != null) is.close();
+		} catch (IOException e) {}
+	}
+	
+	out(header);
+	outln();
+	outln();
+
+	out("/** Custom callbacks */");
+	outln();
+	generateCustomCallbacks();
+	outln();	
+	out("/** Classes */");
+	outln();
+	generateClassesConst();
+	outln();
+	out("/** Protocols */");
+	outln();
+	generateProtocolsConst();
+	outln();
+	out("/** Selectors */");
+	outln();
+	generateSelectorsConst();
+	outln();
+	out("/** Constants */");
+	outln();
+	generateEnums();
+	outln();
+	out("/** Globals */");
+	outln();
+	generateConstants();
+	outln();
+	out("/** Functions */");
+	outln();
+	outln();
+	generateFunctions();
+	outln();
+	out("/** Super Sends */");
+	outln();
+	generateSends(true);
+	outln();
+	out("/** Sends */");
+	outln();
+	generateSends(false);
+	outln();
+	generateStructNatives();
+	
+	outln();
+	out(footer);
+	try {
+		out.flush();
+		if (out.size() > 0) JNIGenerator.output(out.toByteArray(), fileName);
+	} catch (Exception e) {
+		System.out.println("Problem");
+		e.printStackTrace(System.out);
+	}
+}
+
+public Document[] getDocuments() {
+	if (documents == null) {
+		String[] xmls = getXmls();
+		documents = new Document[xmls.length];
+		for (int i = 0; i < xmls.length; i++) {
+			String xmlPath = xmls[i];
+			Document document = documents[i] = getDocument(xmlPath);
+			if (document == null) continue;
+			if (mainClassName != null && outputDir != null) {
+				String packageName = getPackageName(mainClassName);
+				String extrasPath = outputDir + packageName.replace('.', '/') + "/" + getFileName(xmlPath) + ".extras";
+				merge(document, getDocument(extrasPath));
+			}
+		}
+	}
+	return documents;
+}
+
+public String[] getXmls() {
+	if (xmls == null || xmls.length == 0) {
+		ArrayList array = new ArrayList();
+		list(new File("/System/Library/Frameworks"), array);
+		list(new File("/System/Library/Frameworks/CoreServices.framework/Frameworks"), array);
+		list(new File("/System/Library/Frameworks/ApplicationServices.framework/Frameworks"), array);
+		Collections.sort(array, new Comparator() {
+			public int compare(Object o1, Object o2) {
+				return new File((String)o1).getName().compareTo(new File((String)o2).getName());
+			}
+		});
+		xmls = (String[])array.toArray(new String[array.size()]);
+	}
+	return xmls;
+}
+
+void saveExtraAttributes(String xmlPath, Document document) {
+	try {
+		String packageName = getPackageName(mainClassName);
+		String fileName = outputDir + packageName.replace('.', '/') + "/" + getFileName(xmlPath) + ".extras";
+		ByteArrayOutputStream out = new ByteArrayOutputStream();
+		DOMWriter writer = new DOMWriter(new PrintStream(out));
+		String[] names = getIDAttributeNames();
+		String[] filter = new String[names.length + 2];
+		filter[0] = "class_method";
+		filter[1] = "swt_.*";
+		System.arraycopy(names, 0, filter, 2, names.length);
+		writer.setAttributeFilter(filter);
+		writer.setNodeFilter("swt_");
+		writer.print(document);
+		if (out.size() > 0) JNIGenerator.output(out.toByteArray(), fileName);
+	} catch (Exception e) {
+		System.out.println("Problem");
+		e.printStackTrace(System.out);
+	}
+}
+
+public void setOutputDir(String dir) {
+	if (dir != null) {
+		if (!dir.endsWith("\\") && !dir.endsWith("/") ) {
+			dir += "/";
+		}
+	}
+	this.outputDir = dir;
+}
+
+public void setXmls(String[] xmls) {
+	this.xmls = xmls;
+	this.documents = null;
+}
+
+public void setMainClass(String mainClassName) {
+	this.mainClassName = mainClassName;
+}
+
+Document getDocument(String xmlPath) {
+	try {
+		InputStream is = null;
+		if (xmlPath.indexOf(File.separatorChar) == -1) is = getClass().getResourceAsStream(xmlPath);
+		if (is == null) is = new BufferedInputStream(new FileInputStream(xmlPath));
+		if (is != null) return DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(is));
+	} catch (Exception e) {
+//		e.printStackTrace();
+	}
+	return null;
+}
+
+public String[] getExtraAttributeNames(Node node) {
+	String name = node.getNodeName();
+	if (name.equals("method")) {
+		return new String[]{"swt_gen_super_msgSend", "swt_gen_custom_callback"};
+	} else if (name.equals("function")) {
+		NamedNodeMap attribs = node.getAttributes();
+		if (attribs != null && attribs.getNamedItem("variadic") != null) {
+			return new String[]{"swt_variadic_count","swt_variadic_java_types"};
+		}
+	} else if (name.equals("class")) {
+		return new String[]{"swt_superclass"};
+	} else if (name.equals("retval")) {
+		return new String[]{"swt_java_type", "swt_java_type64", "swt_alloc"};
+	} else if (name.equals("arg")) {
+		return new String[]{"swt_java_type", "swt_java_type64"};
+	}
+	return new String[0];
+}
+
+public String getFileName(String xmlPath) {
+	File file = new File(xmlPath);
+	return file.getName();
+}
+
+String getKey (Node node) {
+	StringBuffer buffer = new StringBuffer();
+	while (node != null) {
+		if (buffer.length() > 0) buffer.append("_");
+		String name = node.getNodeName();
+		StringBuffer key = new StringBuffer(name);
+		Node nameAttrib = getIDAttribute(node);
+		if (nameAttrib != null) {
+			key.append("-");
+			key.append(nameAttrib.getNodeValue());
+		}
+		NamedNodeMap attributes = node.getAttributes();
+		if (attributes != null) {
+			boolean isStatic = attributes.getNamedItem("class_method") != null;
+			if (isStatic) key.append("-static");
+		}
+		buffer.append(key.reverse());
+		node = node.getParentNode();
+	}
+	buffer.reverse();
+	return buffer.toString();
+}
+
+public Node getIDAttribute(Node node) {
+	NamedNodeMap attributes = node.getAttributes();
+	if (attributes == null) return null;
+	String[] names = getIDAttributeNames();
+	for (int i = 0; i < names.length; i++) {
+		Node nameAttrib = attributes.getNamedItem(names[i]);
+		if (nameAttrib != null) return nameAttrib;
+	}
+	return null;
+}
+
+public String[] getIDAttributeNames() {
+	return new String[]{
+		"name",
+		"selector",
+		"path",
+	};
+}
+
+void merge(Node node, HashMap extras, HashMap docLookup) {
+	NodeList list = node.getChildNodes();
+	for (int i = 0; i < list.getLength(); i++) {
+		Node childNode = list.item(i);
+		if (childNode.getNodeType() == Node.ELEMENT_NODE) {
+			String key = getKey(childNode);
+			if (docLookup != null && docLookup.get(key) == null) {
+				docLookup.put(key, childNode);
+			}
+			Node extra = (Node)extras.remove(key);
+			if (extra != null) {
+				NamedNodeMap attributes = extra.getAttributes();
+				for (int j = 0, length = attributes.getLength(); j < length; j++) {
+					Node attr = (Node)attributes.item(j);
+					String name = attr.getNodeName();
+					if (name.startsWith("swt_")) {
+						((Element)childNode).setAttribute(name, attr.getNodeValue());
+					}
+				}
+			}
+		}
+		merge(childNode, extras, docLookup);
+	}
+}
+
+	
+void out(String str) {
+	PrintStream out = this.out;
+	if (out == null) out = System.out;
+	out.print(str);
+}
+
+void outln() {
+	PrintStream out = this.out;
+	if (out == null) out = System.out;
+	out.println();
+}
+
+void generateConstants() {
+	for (int x = 0; x < xmls.length; x++) {
+		Document document = documents[x];
+		if (document == null) continue;
+		NodeList list = document.getDocumentElement().getChildNodes();
+		for (int i = 0; i < list.getLength(); i++) {
+			Node node = list.item(i);
+			if ("constant".equals(node.getNodeName())) {
+				if (getGen(node)) {
+					NamedNodeMap attributes = node.getAttributes();
+					String constName = attributes.getNamedItem("name").getNodeValue();
+					out("/** @method flags=const */");
+					outln();
+					out("public static final native ");
+					String type = getType(node), type64 = getType64(node);
+					out(type);
+					if (!type.equals(type64)) {
+						out(" /*");
+						out(type64);
+						out("*/");
+					}
+					out(" ");
+					out(constName);
+					out("();");
+					outln();
+					if (attributes.getNamedItem("declared_type").getNodeValue().equals("NSString*")) {
+						out("public static final NSString ");
+						out(constName);
+						out(" = new NSString(");
+						out(constName);
+						out("());");
+						outln();
+					}
+				}
+			}
+		}		
+	}
+}
+
+void generateEnums() {
+	for (int x = 0; x < xmls.length; x++) {
+		Document document = documents[x];
+		if (document == null) continue;
+		NodeList list = document.getDocumentElement().getChildNodes();
+		for (int i = 0; i < list.getLength(); i++) {
+			Node node = list.item(i);
+			if ("enum".equals(node.getNodeName())) {
+				if (getGen(node)) {
+					NamedNodeMap attributes = node.getAttributes();
+					Node valueNode = attributes.getNamedItem("value");
+					if (valueNode != null) {
+						String value = valueNode.getNodeValue();
+						out("public static final ");
+						boolean isLong = false;
+						if (value.indexOf('.') != -1) {
+							out("double ");
+						} else {
+							try {
+								Integer.parseInt(value);
+								out("int ");
+							} catch (NumberFormatException e) {
+								isLong = true;
+								out("long ");
+							}
+						}
+						out(attributes.getNamedItem("name").getNodeValue());
+						out(" = ");
+						out(value);
+						if (isLong && !value.endsWith("L")) out("L");
+						out(";");
+						outln();
+					}
+				}
+			}
+		}
+	}
+}
+
+boolean getGen(Node node) {
+	NamedNodeMap attributes = node.getAttributes();
+	if (attributes == null) return false;
+	Node gen = attributes.getNamedItem("swt_gen");
+	return gen != null && !gen.getNodeValue().equals("false");
+}
+
+boolean getGenSuper(Node node) {
+	NamedNodeMap attributes = node.getAttributes();
+	if (attributes == null) return false;
+	Node gen = attributes.getNamedItem("swt_gen_super_msgSend");
+	return gen != null && !gen.getNodeValue().equals("false");
+}
+
+boolean getGenCallback(Node node) {
+	NamedNodeMap attributes = node.getAttributes();
+	if (attributes == null) return false;
+	Node gen = attributes.getNamedItem("swt_gen_custom_callback");
+	return gen != null && !gen.getNodeValue().equals("false");
+}
+
+boolean isStatic(Node node) {
+	NamedNodeMap attributes = node.getAttributes();
+	Node isStatic = attributes.getNamedItem("class_method");
+	return isStatic != null && isStatic.getNodeValue().equals("true");
+}
+
+boolean isStruct(Node node) {
+	NamedNodeMap attributes = node.getAttributes();
+	String code = attributes.getNamedItem("type").getNodeValue();
+	return code.startsWith("{");
+}
+
+boolean isFloatingPoint(Node node) {
+	NamedNodeMap attributes = node.getAttributes();
+	String code = attributes.getNamedItem("type").getNodeValue();
+	return code.equals("f") || code.equals("d");
+}
+
+boolean isObject(Node node) {
+	NamedNodeMap attributes = node.getAttributes();
+	String code = attributes.getNamedItem("type").getNodeValue();
+	return code.equals("@");
+}
+
+boolean isBoolean(Node node) {
+	NamedNodeMap attributes = node.getAttributes();
+	String code = attributes.getNamedItem("type").getNodeValue();
+	return code.equals("B");
+}
+
+void buildLookup(Node node, HashMap table) {
+	NodeList list = node.getChildNodes();
+	for (int i = 0; i < list.getLength(); i++) {
+		Node childNode = list.item(i);
+		if (childNode.getNodeType() == Node.ELEMENT_NODE) {
+			String key = getKey(childNode);
+			if (table.get(key) == null) table.put(key, childNode);
+			buildLookup(childNode, table);
+		}
+	}
+}
+
+boolean isUnique(Node method, ArrayList methods) {
+	String methodName = method.getAttributes().getNamedItem("selector").getNodeValue();
+	String signature = "";
+	NodeList params = method.getChildNodes();
+	for (int k = 0; k < params.getLength(); k++) {
+		Node param = params.item(k);
+		if ("arg".equals(param.getNodeName())) {
+			signature += getJavaType(param);
+		}
+	}
+	int index = methodName.indexOf(":");
+	if (index != -1) methodName = methodName.substring(0, index);
+	for (Iterator iterator = methods.iterator(); iterator.hasNext();) {
+		Node other = (Node) iterator.next();
+		NamedNodeMap attributes = other.getAttributes();
+		Node otherSel = null;
+		if (attributes != null) otherSel = attributes.getNamedItem("selector");
+		if (other != method && otherSel != null) {
+			String otherName = otherSel.getNodeValue();
+			index = otherName.indexOf(":");
+			if (index != -1) otherName = otherName.substring(0, index);
+			if (methodName.equals(otherName)) {
+				NodeList otherParams = other.getChildNodes();
+				String otherSignature = "";
+				for (int k = 0; k < otherParams.getLength(); k++) {
+					Node param = otherParams.item(k);
+					if ("arg".equals(param.getNodeName())) {
+						otherSignature += getJavaType(param);
+					}
+				}
+				if (signature.equals(otherSignature)) {
+					return false;
+				}
+			}
+		}
+	}
+	return true;
+}
+
+void generateSelectorsConst() {
+	TreeSet set = new TreeSet();
+	for (int x = 0; x < xmls.length; x++) {
+		Document document = documents[x];
+		if (document == null) continue;
+		NodeList list = document.getDocumentElement().getChildNodes();
+		for (int i = 0; i < list.getLength(); i++) {
+			Node node = list.item(i);
+			if ("class".equals(node.getNodeName()) || "informal_protocol".equals(node.getNodeName())) {
+				if (getGen(node)) {
+					NodeList methods = node.getChildNodes();
+					for (int j = 0; j < methods.getLength(); j++) {
+						Node method = methods.item(j);
+						if (getGen(method)) {
+							NamedNodeMap mthAttributes = method.getAttributes();
+							String sel = mthAttributes.getNamedItem("selector").getNodeValue();
+							set.add(sel);
+						}
+					}
+				}
+			}
+		}
+	}
+	set.add("alloc");
+	for (Iterator iterator = set.iterator(); iterator.hasNext();) {
+		String sel = (String) iterator.next();
+		String selConst = getSelConst(sel);
+		out("public static final int /*long*/ ");
+		out(selConst);
+		out(" = ");
+		out("sel_registerName(\"");
+		out(sel);
+		out("\");");
+		outln();
+	}
+}
+
+void generateStructNatives() {
+	TreeSet set = new TreeSet();
+	for (int x = 0; x < xmls.length; x++) {
+		Document document = documents[x];
+		if (document == null) continue;
+		NodeList list = document.getDocumentElement().getChildNodes();
+		for (int i = 0; i < list.getLength(); i++) {
+			Node node = list.item(i);
+			if ("struct".equals(node.getNodeName()) && getGen(node)) {
+				set.add(getIDAttribute(node).getNodeValue());
+			}
+		}
+	}
+	out("/** Sizeof natives */");
+	outln();
+	for (Iterator iterator = set.iterator(); iterator.hasNext();) {
+		String struct = (String) iterator.next();
+		out("public static final native int ");
+		out(struct);
+		out("_sizeof();");
+		outln();
+	}
+	outln();
+	out("/** Memmove natives */");
+	outln();
+	outln();
+	for (Iterator iterator = set.iterator(); iterator.hasNext();) {
+		String struct = (String) iterator.next();
+		out("/**");
+		outln();
+		out(" * @param dest cast=(void *),flags=no_in critical");
+		outln();
+		out(" * @param src cast=(void *),flags=critical");
+//		out(" * @param src cast=(void *),flags=no_out critical");
+		outln();
+		out(" */");
+		outln();
+		out("public static final native void memmove(");
+		out("int /*long*/ dest, ");
+		out(struct);
+		out(" src, int /*long*/ size);");
+		outln();
+		out("/**");
+		outln();
+		out(" * @param dest cast=(void *),flags=no_in critical");
+		outln();
+		out(" * @param src cast=(void *),flags=critical");
+//		out(" * @param src cast=(void *),flags=no_out critical");
+		outln();
+		out(" */");
+		outln();
+		out("public static final native void memmove(");
+		out(struct);
+		out(" dest, int /*long*/ src, int /*long*/ size);");
+		outln();
+	}
+}
+
+String buildSend(Node method, boolean tags, boolean only64, boolean superCall) {
+	Node returnNode = getReturnNode(method.getChildNodes());
+	StringBuffer buffer = new StringBuffer();
+	buffer.append("public static final native "); 
+	if (returnNode != null && isStruct(returnNode)) {
+		buffer.append("void ");
+		buffer.append(superCall ? "objc_msgSendSuper_stret" : "objc_msgSend_stret");
+		buffer.append("(");
+		buffer.append(getJavaType(returnNode));
+		buffer.append(" result, ");
+	} else if (returnNode != null && isFloatingPoint(returnNode)) {
+		buffer.append("double ");
+		buffer.append(superCall ? "objc_msgSendSuper_fpret" : "objc_msgSend_fpret");
+		buffer.append("(");
+	} else if (returnNode != null && isBoolean(returnNode)) {
+		buffer.append("boolean ");
+		buffer.append(superCall ? "objc_msgSendSuper_bool" : "objc_msgSend_bool");
+		buffer.append("(");
+	} else {
+		if (only64) {
+			buffer.append("long");
+		} else {		
+			if (tags) {
+				buffer.append("int /*long*/");
+			} else {
+				buffer.append("int");
+			}
+		}
+		buffer.append(" ");
+		buffer.append(superCall ? "objc_msgSendSuper" : "objc_msgSend");
+		buffer.append("(");
+	}
+	if (superCall) {
+		if (only64) {
+			buffer.append("objc_super superId, long sel");
+		} else {
+			if (tags) {
+				buffer.append("objc_super superId, int /*long*/ sel");
+			} else {
+				buffer.append("objc_super superId, int sel");
+			}
+		}
+	} else {
+		if (only64) {
+			buffer.append("long id, long sel");
+		} else {
+			if (tags) {
+				buffer.append("int /*long*/ id, int /*long*/ sel");
+			} else {
+				buffer.append("int id, int sel");
+			}
+		}
+	}
+	NodeList params = method.getChildNodes();
+	boolean first = false;
+	int count = 0;
+	for (int k = 0; k < params.getLength(); k++) {
+		Node param = params.item(k);
+		if ("arg".equals(param.getNodeName())) {
+			if (!first) buffer.append(", ");
+			if (isStruct(param)) {
+				buffer.append(getJavaType(param));
+			} else {
+				String type = getType(param), type64 = getType64(param);
+				buffer.append(only64 ? type64 : type);
+				if (!only64 && tags && !type.equals(type64)) {
+					buffer.append(" /*");
+					buffer.append(type64);
+					buffer.append("*/");
+				}
+			}
+			first = false;
+			buffer.append(" arg");
+			buffer.append(String.valueOf(count++));
+		}
+	}
+	buffer.append(");");
+	return buffer.toString();
+}
+
+String getCType (Node node) {
+	NamedNodeMap attributes = node.getAttributes();
+	return attributes.getNamedItem("declared_type").getNodeValue();
+}
+
+Node findNSObjectMethod(Node method) {
+	NamedNodeMap methodAttributes = method.getAttributes();
+	String selector = methodAttributes.getNamedItem("selector").getNodeValue();
+	NodeList list = method.getParentNode().getParentNode().getChildNodes();
+	for (int i = 0; i < list.getLength(); i++) {
+		Node cls = list.item(i);
+		if ("class".equals(cls.getNodeName())) {
+			NamedNodeMap classAttributes = cls.getAttributes();
+			if ("NSObject".equals(classAttributes.getNamedItem("name").getNodeValue())) {
+				NodeList methods = cls.getChildNodes();
+				for (int j = 0; j < methods.getLength(); j++) {
+					Node mth = methods.item(j);
+					if ("method".equals(mth.getNodeName())) {
+						NamedNodeMap mthAttributes = mth.getAttributes();
+						if (selector.equals(mthAttributes.getNamedItem("selector").getNodeValue())) {
+							return mth;
+						}
+					}
+				}
+			}
+		}
+	}
+	return null;
+}
+
+void generateCustomCallbacks() {
+	TreeMap set = new TreeMap();
+	for (int x = 0; x < xmls.length; x++) {
+		Document document = documents[x];
+		if (document == null) continue;
+		NodeList list = document.getDocumentElement().getChildNodes();
+		for (int i = 0; i < list.getLength(); i++) {
+			Node node = list.item(i);
+			if (("class".equals(node.getNodeName()) || "informal_protocol".equals(node.getNodeName())) && getGen(node)) {
+				NodeList methods = node.getChildNodes();
+				for (int j = 0; j < methods.getLength(); j++) {
+					Node method = methods.item(j);
+					if ("method".equals(method.getNodeName()) && getGen(method) && getGenCallback(method)) {
+						NamedNodeMap mthAttributes = method.getAttributes();
+						String sel = mthAttributes.getNamedItem("selector").getNodeValue();
+						set.put(sel, method);
+					}
+				}
+			}
+		}
+	}
+	for (Iterator iterator = set.keySet().iterator(); iterator.hasNext();) {
+		String key = (String)iterator.next();
+		Node method = (Node)set.get(key);
+		if ("informal_protocol".equals(method.getParentNode().getNodeName())) {
+			method = findNSObjectMethod(method);
+			if (method == null) continue;
+		}		
+		String nativeMth = key.replaceAll(":", "_");
+		out("/** @method callback_types=");
+		Node returnNode = getReturnNode(method.getChildNodes());
+		out(returnNode == null ? "void" : getCType(returnNode));
+		out(";id;SEL;");
+		NodeList params = method.getChildNodes();
+		for (int k = 0; k < params.getLength(); k++) {
+			Node param = params.item(k);
+			if ("arg".equals(param.getNodeName())) {
+				out(getCType(param));
+				out(";");
+			}
+		}
+		out(",callback_flags=");
+		out(returnNode != null && isStruct(returnNode) ? "struct" : "none");
+		out(";none;none;");
+		for (int k = 0; k < params.getLength(); k++) {
+			Node param = params.item(k);
+			if ("arg".equals(param.getNodeName())) {
+				out (isStruct(param) ? "struct" : "none");
+				out(";");
+			}
+		}
+		out(" */");
+		outln();
+		out("public static final native int /*long*/ CALLBACK_");
+		out(nativeMth);
+		out("(int /*long*/ func);");
+		outln();
+	}
+}
+
+void generateSends(boolean superCall) {
+	TreeMap set = new TreeMap();
+	TreeMap set64 = new TreeMap();
+	for (int x = 0; x < xmls.length; x++) {
+		Document document = documents[x];
+		if (document == null) continue;
+		NodeList list = document.getDocumentElement().getChildNodes();
+		for (int i = 0; i < list.getLength(); i++) {
+			Node node = list.item(i);
+			if ("class".equals(node.getNodeName()) && getGen(node)) {
+				NodeList methods = node.getChildNodes();
+				for (int j = 0; j < methods.getLength(); j++) {
+					Node method = methods.item(j);
+					if ("method".equals(method.getNodeName()) && getGen(method) && (!superCall || getGenSuper(method))) {
+						String code = buildSend(method, false, false, superCall);
+						String code64 = buildSend(method, false, true, superCall);
+						if (set.get(code) == null) {
+							set.put(code, method);
+						}
+						if (set64.get(code64) == null) {
+							set64.put(code64, method);
+						}
+					}
+				}
+			}
+		}
+	}
+	outln();
+	TreeMap tagsSet = new TreeMap();
+	for (Iterator iterator = set.keySet().iterator(); iterator.hasNext();) {
+		String key = (String)iterator.next();
+		Node method = (Node)set.get(key);
+		String tagCode = buildSend(method, false, true, superCall);
+		if (set64.get(tagCode) != null) {
+			tagsSet.put(key, method);
+			iterator.remove();
+			set64.remove(tagCode);
+		}
+	}
+	TreeMap all = new TreeMap();
+	for (Iterator iterator = tagsSet.keySet().iterator(); iterator.hasNext();) {
+		String key = (String) iterator.next();
+		Node method = (Node)tagsSet.get(key);
+		all.put(buildSend(method, true, false, superCall), method);
+	}
+	for (Iterator iterator = set.keySet().iterator(); iterator.hasNext();) {
+		String key = (String) iterator.next();
+		all.put(key, set.get(key));
+	}
+	for (Iterator iterator = set64.keySet().iterator(); iterator.hasNext();) {
+		String key = (String) iterator.next();
+		all.put(key, set64.get(key));
+	}
+	for (Iterator iterator = all.keySet().iterator(); iterator.hasNext();) {
+		String key = (String)iterator.next();
+		Node method = (Node)all.get(key);
+		NodeList params = method.getChildNodes();
+		ArrayList tags = new ArrayList();
+		int count = 0;
+		for (int k = 0; k < params.getLength(); k++) {
+			Node param = params.item(k);
+			if ("arg".equals(param.getNodeName())) {
+				if (isStruct(param)) {
+					tags.add(" * @param arg" + count + " flags=struct");
+				}
+				count++;
+			}
+		}
+		out("/**");
+		if (tags.size() > 0) {
+			outln();
+			out(" *");
+		}
+		out(" @method flags=cast");
+		if (tags.size() > 0) outln();
+		for (Iterator iterator2 = tags.iterator(); iterator2.hasNext();) {
+			String tag = (String) iterator2.next();
+			out(tag);
+			outln();
+		}
+		out(" */");
+		outln();
+		out(key.toString());
+		outln();
+	}
+}
+
+String getSelConst(String sel) {
+	return "sel_" + sel.replaceAll(":", "_");
+}
+
+void generateClassesConst() {
+	TreeSet set = new TreeSet();
+	for (int x = 0; x < xmls.length; x++) {
+		Document document = documents[x];
+		if (document == null) continue;
+		NodeList list = document.getDocumentElement().getChildNodes();
+		for (int i = 0; i < list.getLength(); i++) {
+			Node node = list.item(i);
+			if ("class".equals(node.getNodeName())) {
+				if (getGen(node)) {
+					NamedNodeMap attributes = node.getAttributes();
+					String name = attributes.getNamedItem("name").getNodeValue();
+					set.add(name);
+				}
+			}
+		}
+	}
+	for (Iterator iterator = set.iterator(); iterator.hasNext();) {
+		String cls = (String) iterator.next();
+		String clsConst = "class_" + cls;
+		out("public static final int /*long*/ ");
+		out(clsConst);
+		out(" = ");
+		out("objc_getClass(\"");
+		out(cls);
+		out("\");");
+		outln();
+	}
+}
+
+void generateProtocolsConst() {
+	TreeSet set = new TreeSet();
+	for (int x = 0; x < xmls.length; x++) {
+		Document document = documents[x];
+		if (document == null) continue;
+		NodeList list = document.getDocumentElement().getChildNodes();
+		for (int i = 0; i < list.getLength(); i++) {
+			Node node = list.item(i);
+			if ("informal_protocol".equals(node.getNodeName())) {
+				if (getGen(node)) {
+					NamedNodeMap attributes = node.getAttributes();
+					String name = attributes.getNamedItem("name").getNodeValue();
+					set.add(name);
+				}
+			}
+		}
+	}
+	for (Iterator iterator = set.iterator(); iterator.hasNext();) {
+		String cls = (String) iterator.next();
+		String clsConst = "protocol_" + cls;
+		out("public static final int /*long*/ ");
+		out(clsConst);
+		out(" = ");
+		out("objc_getProtocol(\"");
+		out(cls);
+		out("\");");
+		outln();
+	}
+}
+
+String getPackageName(String className) {
+	int dot = mainClassName.lastIndexOf('.');
+	if (dot == -1) return "";
+	return mainClassName.substring(0, dot);
+}
+
+String getClassName(String className) {
+	int dot = mainClassName.lastIndexOf('.');
+	if (dot == -1) return mainClassName;
+	return mainClassName.substring(dot + 1);
+}
+
+Node getReturnNode(NodeList list) {
+	for (int j = 0; j < list.getLength(); j++) {
+		Node node = list.item(j);
+		if ("retval".equals(node.getNodeName())) {
+			return node;
+		}
+	}
+	return null;
+}
+
+String getType(Node node) {
+	NamedNodeMap attributes = node.getAttributes();
+	Node javaType = attributes.getNamedItem("swt_java_type");
+	if (javaType != null) return javaType.getNodeValue();
+	String code = attributes.getNamedItem("type").getNodeValue();
+	return getType(code, attributes, false);
+}
+
+String getType64(Node node) {
+	NamedNodeMap attributes = node.getAttributes();
+	Node javaType = attributes.getNamedItem("swt_java_type");
+	if (javaType != null) {
+		Node javaType64 = attributes.getNamedItem("swt_java_type64");
+		return javaType64 != null ? javaType64.getNodeValue() : javaType.getNodeValue();
+	}
+	Node attrib = attributes.getNamedItem("type");
+	String code = attrib.getNodeValue();
+	Node attrib64 = attributes.getNamedItem("type64");
+	if (attrib64 != null) code = attrib64.getNodeValue();
+	return getType(code, attributes, true);
+}
+
+String getType(String code, NamedNodeMap attributes, boolean is64) {
+	if (code.equals("c")) return "byte";
+	if (code.equals("i")) return "int";
+	if (code.equals("s")) return "short";
+	if (code.equals("l")) return "int";
+	if (code.equals("q")) return "long";
+	if (code.equals("C")) return "byte";
+	if (code.equals("I")) return "int";
+	if (code.equals("S")) return "short";
+	if (code.equals("L")) return "int";
+	if (code.equals("Q")) return "long";
+	if (code.equals("f")) return "float";
+	if (code.equals("d")) return "double";
+	if (code.equals("B")) return "boolean";
+	if (code.equals("v")) return "void";
+	if (code.equals("*")) return is64 ? "long" : "int";
+	if (code.equals("@")) return is64 ? "long" : "int";
+	if (code.equals("#")) return is64 ? "long" : "int";
+	if (code.equals(":")) return is64 ? "long" : "int";
+	if (code.startsWith("^")) return is64 ? "long" : "int";
+	if (code.startsWith("{")) {		
+		return attributes.getNamedItem("declared_type").getNodeValue();
+	}
+	return "BAD " + code;
+}
+
+String getJNIType(Node node) {
+	NamedNodeMap attributes = node.getAttributes();
+	String code = attributes.getNamedItem("type").getNodeValue();
+	if (code.equals("c")) return "B";
+	if (code.equals("i")) return "I";
+	if (code.equals("s")) return "S";
+	if (code.equals("l")) return "I";
+	if (code.equals("q")) return "J";
+	if (code.equals("C")) return "B";
+	if (code.equals("I")) return "I";
+	if (code.equals("S")) return "S";
+	if (code.equals("L")) return "I";
+	if (code.equals("Q")) return "J";
+	if (code.equals("f")) return "F";
+	if (code.equals("d")) return "D";
+	if (code.equals("B")) return "Z";
+	if (code.equals("v")) return "V";
+	if (code.equals("*")) return "I";
+	if (code.equals("@")) return "I";
+	if (code.equals("#")) return "I";
+	if (code.equals(":")) return "I";
+	if (code.startsWith("^")) return "I";
+	if (code.startsWith("[")) return "BAD " + code;
+	if (code.startsWith("{")) {		
+		return "BAD " + code;
+	}
+	if (code.startsWith("(")) return "BAD " + code;
+	return "BAD " + code;
+}
+
+String getJavaType(Node node) {
+	NamedNodeMap attributes = node.getAttributes();
+	Node javaType = attributes.getNamedItem("swt_java_type");
+	if (javaType != null) return javaType.getNodeValue().trim();
+	String code = attributes.getNamedItem("type").getNodeValue();
+	return getJavaType(code, attributes, false);
+}
+
+String getJavaType64(Node node) {
+	NamedNodeMap attributes = node.getAttributes();
+	Node javaType = attributes.getNamedItem("swt_java_type");
+	if (javaType != null) {
+		Node javaType64 = attributes.getNamedItem("swt_java_type64");
+		return javaType64 != null ? javaType64.getNodeValue() : javaType.getNodeValue();
+	}
+	Node attrib = attributes.getNamedItem("type");
+	String code = attrib.getNodeValue();
+	Node attrib64 = attributes.getNamedItem("type64");
+	if (attrib64 != null) code = attrib64.getNodeValue();
+	return getJavaType(code, attributes, true);
+}
+	
+String getJavaType(String code, NamedNodeMap attributes, boolean is64) {
+	if (code.equals("c")) return "byte";
+	if (code.equals("i")) return "int";
+	if (code.equals("s")) return "short";
+	if (code.equals("l")) return "int";
+	if (code.equals("q")) return "long";
+	if (code.equals("C")) return "byte";
+	if (code.equals("I")) return "int";
+	if (code.equals("S")) return "short";
+	if (code.equals("L")) return "int";
+	if (code.equals("Q")) return "long";
+	if (code.equals("f")) return "float";
+	if (code.equals("d")) return "double";
+	if (code.equals("B")) return "boolean";
+	if (code.equals("v")) return "void";
+	if (code.equals("*")) return is64 ? "long" : "int";
+	if (code.equals("#")) return is64 ? "long" : "int";
+	if (code.equals(":")) return is64 ? "long" : "int";
+	if (code.startsWith("^")) return is64 ? "long" : "int";
+	if (code.equals("@")) {
+		String type = attributes.getNamedItem("declared_type").getNodeValue();
+		int index = type.indexOf('*');
+		if (index != -1) type = type.substring(0, index);
+		index = type.indexOf('<');
+		if (index != -1) type = type.substring(0, index);
+		return type.trim();
+	}
+	if (code.startsWith("{")) {		
+		return attributes.getNamedItem("declared_type").getNodeValue().trim();
+	}
+	return "BAD " + code;
+}
+
+static String[] split(String str, String separator) {
+	StringTokenizer tk = new StringTokenizer(str, separator);
+	ArrayList result = new ArrayList();
+	while (tk.hasMoreElements()) {
+		result.add(tk.nextElement());
+	}
+	return (String[])result.toArray(new String[result.size()]);
+}
+
+void generateFunctions() {
+	for (int x = 0; x < xmls.length; x++) {
+		Document document = documents[x];
+		if (document == null) continue;
+		NodeList list = document.getDocumentElement().getChildNodes();
+		for (int i = 0; i < list.getLength(); i++) {
+			Node node = list.item(i);
+			if ("function".equals(node.getNodeName())) {
+				if (getGen(node)) {
+					NamedNodeMap attributes = node.getAttributes();
+					String name = attributes.getNamedItem("name").getNodeValue();
+					NodeList params = node.getChildNodes();
+					int count = 0;
+					for (int j = 0; j < params.getLength(); j++) {
+						Node param = params.item(j);
+						if ("arg".equals(param.getNodeName())) {
+							count++;
+						}
+					}
+					if (count > 0) {
+						out("/**");
+						outln();
+					}
+					for (int j = 0; j < params.getLength(); j++) {
+						Node param = params.item(j);
+						if ("arg".equals(param.getNodeName())) {
+							NamedNodeMap paramAttributes = param.getAttributes();
+							out(" * @param ");
+							out(paramAttributes.getNamedItem("name").getNodeValue());
+							if (isStruct(param)) {
+								out(" flags=struct");
+							} else {
+								out(" cast=");
+								Node declaredType = paramAttributes.getNamedItem("declared_type");
+								String cast = declaredType.getNodeValue();
+								if (!cast.startsWith("(")) out("(");
+								out(cast);
+								if (!cast.endsWith(")")) out(")");
+							}
+							outln();
+						}
+					}
+					if (count > 0) {
+						out(" */");
+						outln();
+					}
+					out("public static final native ");
+					Node returnNode = getReturnNode(node.getChildNodes());
+					if (returnNode != null) {
+						String type = getType(returnNode), type64 = getType64(returnNode);
+						out(type);
+						if (!type.equals(type64)) {
+							out(" /*");
+							out(type64);
+							out("*/");
+						}
+						out(" ");
+					} else {
+						out("void ");
+					}
+					out(name);
+					out("(");
+					params = node.getChildNodes();
+					boolean first = true;
+					for (int j = 0; j < params.getLength(); j++) {
+						Node param = params.item(j);
+						if ("arg".equals(param.getNodeName())) {
+							NamedNodeMap paramAttributes = param.getAttributes();
+							if (!first) out(", ");
+							first = false;
+							String type = getType(param), type64 = getType64(param);
+							out(type);
+							if (!type.equals(type64)) {
+								out(" /*");
+								out(type64);
+								out("*/");
+							}
+							out(" ");
+							out(paramAttributes.getNamedItem("name").getNodeValue());
+						}
+					}
+					generateVariadics(node);
+					out(");");
+					outln();
+				}
+			}
+		}
+	}
+}
+
+void generateVariadics(Node node) {
+	NamedNodeMap attributes = node.getAttributes();
+	Node variadicCount = attributes.getNamedItem("swt_variadic_count");
+	if (variadicCount != null) {
+		Node variadicTypes = attributes.getNamedItem("swt_variadic_java_types");
+		String[] types = null;
+		if (variadicTypes != null) {
+			types = split(variadicTypes.getNodeValue(), ",");
+		}
+		int varCount = 0;
+		try {
+			varCount = Integer.parseInt(variadicCount.getNodeValue());
+		} catch (NumberFormatException e) {}
+		for (int j = 0; j < varCount; j++) {
+			out(", ");
+			if (types != null && types.length > j && !types[j].equals("*")) {
+				out(types[j]);
+			} else if (types != null && types[types.length - 1].equals("*")) {
+				out(types[types.length - 2]);
+			} else {
+				out("int /*long*/");
+			}
+			out(" varArg");
+			out("" + j);
+		}
+	}
+}
+
+public static void main(String[] args) {
+	try {
+		MacGenerator gen = new MacGenerator();
+		gen.setXmls(args);
+		gen.setOutputDir("../org.eclipse.swt/Eclipse SWT PI/cocoa/");
+		gen.setMainClass("org.eclipse.swt.internal.cocoa.OS");
+		gen.generate(null);
+	} catch (Throwable e) {
+		e.printStackTrace();
+	}
+}
+}
diff --git a/bundles/org.eclipse.swt.tools/Mac Generation/org/eclipse/swt/tools/internal/MacGeneratorUI.java b/bundles/org.eclipse.swt.tools/Mac Generation/org/eclipse/swt/tools/internal/MacGeneratorUI.java
new file mode 100644
index 0000000..200986e
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/Mac Generation/org/eclipse/swt/tools/internal/MacGeneratorUI.java
@@ -0,0 +1,622 @@
+/*******************************************************************************
+ * Copyright (c) 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.tools.internal;
+
+import java.util.ArrayList;
+import java.util.Collections;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.custom.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.layout.*;
+import org.eclipse.swt.widgets.*;
+
+public class MacGeneratorUI {
+	MacGenerator gen;
+	boolean actions = true;
+
+	Tree nodesTree;
+	Table attribTable;
+
+	public MacGeneratorUI(MacGenerator gen) {
+		this.gen = gen;
+	}
+
+	TreeItem lastParent;
+	TreeItem addChild (Node node, TreeItem superItem) {
+		if (node.getNodeType() == Node.TEXT_NODE) return null;
+		String name = node.getNodeName();
+		TreeItem parentItem = null;
+		if (lastParent != null && !lastParent.isDisposed() && lastParent.getParentItem() == superItem && name.equals(lastParent.getData())) {
+			parentItem = lastParent;
+		} else {
+			TreeItem[] items = superItem.getItems();
+			for (int i = 0; i < items.length; i++) {
+				if (name.equals(items[i].getData())) {
+					parentItem = items[i];
+					break;
+				}
+			}
+			if (parentItem == null) {
+				parentItem = new TreeItem(superItem, SWT.NONE);
+				parentItem.setData(name);
+				parentItem.setText(getPrettyText(name));
+			}
+			lastParent = parentItem;
+		}
+		TreeItem item = new TreeItem(parentItem, SWT.NONE);
+		Node idAttrib = gen.getIDAttribute(node);
+		item.setText(idAttrib != null ? idAttrib.getNodeValue() : name);
+		item.setData(node);
+		checkItem(node, item);
+		NodeList childNodes = node.getChildNodes();
+		if (childNodes.getLength() > 0) new TreeItem(item, SWT.NONE);
+		return item;
+	}
+	
+	void checkPath(TreeItem item, boolean checked, boolean grayed) {
+	    if (item == null) return;
+	    if (grayed) {
+	        checked = true;
+	    } else {
+	        int index = 0;
+	        TreeItem[] items = item.getItems();
+	        while (index < items.length) {
+	            TreeItem child = items[index];
+	            if (child.getGrayed() || checked != child.getChecked()) {
+	                checked = grayed = true;
+	                break;
+	            }
+	            index++;
+	        }
+	    }
+	    item.setChecked(checked);
+	    item.setGrayed(grayed);
+	    updateGenAttribute(item);
+	    checkPath(item.getParentItem(), checked, grayed);
+	}
+	
+	void checkItem(Node node, TreeItem item) {
+		NamedNodeMap attributes = node.getAttributes();
+		Node gen = attributes.getNamedItem("swt_gen");
+		if (gen != null) {
+			String value = gen.getNodeValue();
+			boolean grayed = value.equals("mixed");
+			boolean checked = grayed || value.equals("true");
+			item.setChecked(checked);
+			item.setGrayed(grayed);
+		}
+	}
+	
+	boolean getEditable(TableItem item, int column) {
+		if (!(item.getData() instanceof Node)) return false;
+		String attribName = item.getText();
+		return attribName.startsWith("swt_");
+	}
+
+	String getPrettyText(String text) {
+		if (text.equals("class")) return "Classes";
+		if (text.equals("depends_on")) return "Depends_on";
+		return text.substring(0, 1).toUpperCase() + text.substring(1) + "s";
+	}
+
+	void checkChildren(TreeItem item) {
+		TreeItem dummy;
+		if (item.getItemCount() == 1 && (dummy = item.getItem(0)).getData() == null) {
+			dummy.dispose();
+			Node node = (Node)item.getData();
+			NodeList childNodes = node.getChildNodes();
+			for (int i = 0, length = childNodes.getLength(); i < length; i++) {
+				addChild(childNodes.item(i), item);
+			}
+			/* Figure out categories state */
+			TreeItem[] items = item.getItems();
+			for (int i = 0; i < items.length; i++) {
+				TreeItem[] children = items[i].getItems();
+				int checkedCount = 0;
+				for (int j = 0; j < children.length; j++) {
+					if (children[j].getChecked()) checkedCount++;
+					if (children[j].getGrayed()) break;
+				}
+				items[i].setChecked(checkedCount != 0);
+				items[i].setGrayed(checkedCount != children.length);
+			}
+		}
+	}
+	
+	void checkItems(TreeItem item, boolean checked) {
+	    item.setGrayed(false);
+	    item.setChecked(checked);
+	    updateGenAttribute(item);
+	    TreeItem[] items = item.getItems();
+	    if (items.length == 1 && items[0].getData() == null) {
+	    	/* Update model only if view is not created */
+			Node node = (Node)item.getData();
+			NodeList childNodes = node.getChildNodes();
+			for (int i = 0, length = childNodes.getLength(); i < length; i++) {
+				checkNodes(childNodes.item(i), checked);
+			}
+	    } else {
+		    for (int i = 0; i < items.length; i++) {
+		        checkItems(items[i], checked);
+		    }
+	    }
+	}
+	
+	void checkNodes(Node node, boolean checked) {
+		if (node instanceof Element) {
+			if (checked) {
+				((Element)node).setAttribute("swt_gen", "true");
+			} else {
+				((Element)node).removeAttribute("swt_gen");
+			}
+		}
+		NodeList childNodes = node.getChildNodes();
+		for (int i = 0, length = childNodes.getLength(); i < length; i++) {
+			checkNodes(childNodes.item(i), checked);
+		}
+	}
+	
+	void cleanup() {
+	}
+
+	Composite createSignaturesPanel(Composite parent) {
+		Composite comp = new Composite(parent, SWT.NONE);
+		GridLayout layout = new GridLayout(2, false);
+		layout.marginLeft = 5;
+		layout.marginWidth = 0;
+		comp.setLayout(layout);
+		
+		Label label = new Label(comp, SWT.NONE);
+		label.setText("Signatures:");
+		
+		final Text search = new Text(comp, SWT.BORDER | SWT.SINGLE | SWT.SEARCH);
+		GridData data = new GridData(GridData.FILL_HORIZONTAL);
+		search.setLayoutData(data);
+		search.setText(".*");
+		search.addListener(SWT.DefaultSelection, new Listener() {
+			public void handleEvent(Event arg0) {
+				searchFor(search.getText());
+			}
+		});
+		search.addListener(SWT.KeyDown, new Listener() {
+			public void handleEvent(Event event) {
+				if (event.keyCode == SWT.F6) {
+					searchFor(search.getText());					
+				}
+			}
+		});
+		
+		nodesTree = new Tree(comp, SWT.SINGLE | SWT.CHECK | SWT.BORDER | SWT.FULL_SELECTION);
+		data = new GridData(GridData.FILL_BOTH);
+		data.horizontalSpan = 2;
+		nodesTree.setLayoutData(data);
+		
+		nodesTree.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event event) {
+				TreeItem item = (TreeItem)event.item;
+				if (item == null) return;
+				if (event.detail != SWT.CHECK) {
+					selectChild(item);
+					return;
+				}
+				boolean checked = item.getChecked();
+				item.getParent().setRedraw(false);
+                checkItems(item, checked);
+                checkPath(item.getParentItem(), checked, false);
+                item.getParent().setRedraw(true);
+			}
+		});
+		nodesTree.addListener(SWT.Expand, new Listener() {
+			public void handleEvent(Event event) {
+				checkChildren((TreeItem)event.item);				
+			}
+		});
+		
+		return comp;
+	}
+	
+	Composite createPropertiesPanel(Composite parent) {
+		Composite comp = new Composite(parent, SWT.NONE);
+		GridLayout layout = new GridLayout(1, false);
+		layout.marginWidth = 0;
+		if (!actions) layout.marginRight = 5;
+		comp.setLayout(layout);
+		
+		Label label = new Label(comp, SWT.NONE);
+		label.setText("Properties:");
+		
+		attribTable = new Table(comp, SWT.BORDER | SWT.FULL_SELECTION);
+		GridData data = new GridData(GridData.FILL_BOTH);
+		attribTable.setLayoutData(data);
+		attribTable.setLinesVisible(true);
+		attribTable.setHeaderVisible(true);
+		TableColumn nameColumn = new TableColumn(attribTable, SWT.NONE);
+		nameColumn.setText("Name");
+		nameColumn.pack();
+		TableColumn valueColumn = new TableColumn(attribTable, SWT.NONE);
+		valueColumn.setText("Value");
+		valueColumn.pack();
+		
+		final Text editorTx = new Text(attribTable, SWT.SINGLE);
+		final TableEditor editor = new TableEditor(attribTable);
+		editor.grabHorizontal = true;
+		editor.setEditor(editorTx);
+		Listener textListener = new Listener() {
+			public void handleEvent(Event e) {
+				if (e.type == SWT.KeyDown) {
+					if (e.keyCode != SWT.F6) return;
+				}
+				if (e.type == SWT.Traverse) {
+					switch (e.detail) {
+						case SWT.TRAVERSE_ESCAPE:
+							editor.setItem(null);
+							break;
+						default:
+							return;
+					}
+				}
+				editorTx.setVisible(false);
+				TableItem item = editor.getItem();
+				if (item == null) return;
+				int column = editor.getColumn();
+				String value = editorTx.getText();
+				item.setText(column, value);
+				Element node = (Element)item.getData();
+				String name = item.getText();
+				if (value.length() != 0) {
+					node.setAttribute(name, value);
+				} else {
+					node.removeAttribute(name);
+				}
+			}
+		};
+		editorTx.addListener(SWT.DefaultSelection, textListener);
+//		editorTx.addListener(SWT.FocusOut, textListener);
+		editorTx.addListener(SWT.KeyDown, textListener);
+		editorTx.addListener(SWT.Traverse, textListener);
+		attribTable.addListener(SWT.MouseDown, new Listener() {
+			public void handleEvent(final Event e) {
+				e.display.asyncExec (new Runnable () {
+					public void run () {
+						if (attribTable.isDisposed ()) return;
+						if (e.button != 1) return;
+						Point pt = new Point(e.x, e.y);
+						TableItem item = attribTable.getItem(pt);
+						if (item == null) return;
+						int column = -1;
+						for (int i = 0; i < attribTable.getColumnCount(); i++) {
+							if (item.getBounds(i).contains(pt)) {
+								column = i;
+								break;
+							}				
+						}
+						if (column == -1) return;
+						if (!getEditable(item, column)) return;
+						editor.setColumn(column);
+						editor.setItem(item);
+						editorTx.setText(item.getText(column));
+						editorTx.selectAll();
+						editorTx.setVisible(true);
+						editorTx.setFocus();
+					}
+				});
+			}
+		});
+		
+		return comp;
+	}
+	
+	Composite createActionsPanel(Composite parent) {
+		Composite panel = new Composite(parent, SWT.NONE);
+		GridLayout layout = new GridLayout(1, true);
+		layout.marginWidth = 10;
+		panel.setLayout(layout);
+		
+		Button generate = new Button(panel, SWT.PUSH);
+		generate.setText("Generate");
+		generate.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event event) {
+				generate(null);
+			}
+		});
+		return panel;
+	}
+	
+	public void generate(ProgressMonitor progress) {
+		gen.generate(progress);
+	}
+	
+	public boolean getActionsVisible() {
+		return actions;
+	}
+	
+	public void open(Composite parent) {
+		FormLayout layout = new FormLayout();
+		parent.setLayout(layout);
+		
+		Composite signaturePanel = createSignaturesPanel(parent);
+		final Sash sash = new Sash(parent, SWT.SMOOTH | SWT.VERTICAL);
+		Composite propertiesPanel = createPropertiesPanel(parent);
+		
+		Composite actionsPanel = null;
+		if (actions) {
+			actionsPanel = createActionsPanel(parent);
+		}
+
+		FormData data;
+		
+		data = new FormData();		
+		data.left = new FormAttachment(0, 0);
+		data.top = new FormAttachment(0, 0);
+		data.right = new FormAttachment(sash, 0);
+		data.bottom = new FormAttachment(100, 0);
+		signaturePanel.setLayoutData(data);
+		
+		data = new FormData();
+		data.left = new FormAttachment(null, Math.max(200, parent.getSize().x / 2));
+		data.top = new FormAttachment(0, 0);
+		data.bottom = new FormAttachment(100, 0);
+		sash.setLayoutData(data);
+		
+		data = new FormData();
+		data.left = new FormAttachment(sash, sash.computeSize(SWT.DEFAULT, SWT.DEFAULT).x);
+		data.top = new FormAttachment(0, 0);
+		data.right = actionsPanel != null ? new FormAttachment(actionsPanel, 0) : new FormAttachment(100, 0);
+		data.bottom = new FormAttachment(100, 0);
+		propertiesPanel.setLayoutData(data);
+
+		if (actionsPanel != null) {
+			data = new FormData();
+			data.top = new FormAttachment(0, 0);
+			data.right = new FormAttachment(100, 0);
+			data.bottom = new FormAttachment(100, 0);
+			actionsPanel.setLayoutData(data);
+		}
+		
+		sash.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event event) {
+				Composite parent = sash.getParent();
+				Rectangle rect = parent.getClientArea();
+				event.x = Math.min (Math.max (event.x, 60), rect.width - 60);
+				if (event.detail != SWT.DRAG) {
+					FormData data = (FormData)sash.getLayoutData();
+					data.left.offset = event.x;
+					parent.layout(true);
+				}
+			}
+		});
+
+		updateNodes();
+	}
+
+	public void dispose() {
+		cleanup();
+	}
+	
+	ArrayList flatNodes;
+	void searchFor(String name) {
+		TreeItem[] selection = nodesTree.getSelection();
+		Node node = null;
+		if (selection.length != 0) {
+			if (selection[0].getData() instanceof Node) {
+				node = (Node)selection[0].getData();
+			} else {
+				if (selection[0].getItemCount() > 0 && selection[0].getItem(0).getData() instanceof Node) {
+					node = (Node)selection[0].getItem(0).getData();
+				}
+			}
+		}
+		Document[] documents = gen.getDocuments();
+		if (node == null && documents.length > 0) node = gen.getDocuments()[0];
+		if (flatNodes == null) {
+			flatNodes = new ArrayList();
+			for (int i = 0; i < documents.length; i++) {
+				addNodes(documents[i], flatNodes);
+			}
+		}
+		int index = 0;
+		while (flatNodes.get(index++) != node);		
+		int start = index;
+		while (index < flatNodes.size()) {
+			Node child = (Node)flatNodes.get(index);
+			Node attribName = gen.getIDAttribute(child);
+			if (attribName != null && attribName.getNodeValue().matches(name)) {
+				selectNode(child);
+				return;
+			}
+			index++;
+		}
+		index = 0;
+		while (index < start) {
+			Node child = (Node)flatNodes.get(index);
+			Node attribName = gen.getIDAttribute(child);
+			if (attribName != null && attribName.getNodeValue().matches(name)) {
+				selectNode(child);
+				return;
+			}
+			index++;
+		}
+		nodesTree.getDisplay().beep();
+	}
+	
+	void selectNode(Node node) {
+		ArrayList path = new ArrayList();
+		do {
+			path.add(node);
+			node = node.getParentNode();
+		} while (node != null);
+		TreeItem[] items = nodesTree.getItems();
+		Collections.reverse(path);
+		path.remove(0);
+		while (true) {
+			TreeItem item = findItem(items, (Node)path.remove(0));
+			if (item == null) return;
+			if (path.isEmpty()) {
+				nodesTree.setSelection(item);
+				selectChild(item);
+				return;
+			}
+			items = item.getItems();
+		}
+	}
+	
+	TreeItem findItem(TreeItem[] items, Node node) {
+		for (int i = 0; i < items.length; i++) {
+			TreeItem item = items[i];
+			checkChildren(item);
+			if (item.getData() == node) return item;
+		}
+		for (int i = 0; i < items.length; i++) {
+			TreeItem child = findItem(items[i].getItems(), node);
+			if (child != null) return child;
+		}
+		return null;
+	}
+	
+	void addNodes(Node node, ArrayList list) {
+		if (node.getNodeType() == Node.TEXT_NODE) return;
+		list.add(node);
+		NodeList children = node.getChildNodes();
+		for (int i = 0, length = children.getLength(); i < length; i++) {
+			Node child = children.item(i);
+			addNodes(child, list);
+		}	
+	}
+	
+	void selectChild(TreeItem item) {
+		attribTable.removeAll();
+		if (!(item.getData() instanceof Node)) return;
+		Node node = (Node)item.getData();
+		NamedNodeMap attributes = node.getAttributes();
+		String[] extraAttribs = gen.getExtraAttributeNames(node);
+		for (int i = 0; i < extraAttribs.length; i++) {
+			TableItem attribItem = new TableItem(attribTable, SWT.NONE);
+			attribItem.setText(extraAttribs[i]);
+			attribItem.setData(node);
+			attribItem.setForeground(item.getDisplay().getSystemColor(SWT.COLOR_BLUE));
+			Node attrib = attributes.getNamedItem(extraAttribs[i]);
+			if (attrib != null) {
+				attribItem.setText(1, attrib.getNodeValue());
+			}
+			
+		}
+		checkItem(node, item);
+		for (int i = 0, length = attributes.getLength(); i < length; i++) {
+			Node attrib = attributes.item(i);
+			String attribName = attrib.getNodeName();
+			if (attribName.startsWith("swt_")) continue;
+			TableItem attribItem = new TableItem(attribTable, SWT.NONE);
+			attribItem.setText(attribName);
+			attribItem.setText(1, attrib.getNodeValue());
+		}
+		attribTable.getColumn(0).pack();
+		attribTable.getColumn(1).setWidth(500);
+	}
+	
+	void updateGenAttribute (TreeItem item) {
+		if (item.getData() instanceof Element) {
+			Element node = (Element)item.getData();
+			if (item.getChecked()) {
+				if (item.getGrayed()) {
+					node.setAttribute("swt_gen", "mixed");
+				} else {
+					node.setAttribute("swt_gen", "true");
+				}
+			} else {
+				node.removeAttribute("swt_gen");
+			}
+		}
+	}
+	
+	void updateNodes() {
+		String[] xmls = gen.getXmls();
+		if (xmls == null) return;
+		Document[] documents = gen.getDocuments();
+		for (int x = 0; x < xmls.length; x++) {
+			String xmlPath = xmls[x];
+			Document document = documents[x];
+			if (document == null) {
+				System.out.println("Could not find: " + xmlPath);
+				continue;
+			}
+			TreeItem item = new TreeItem(nodesTree, SWT.NONE);
+			String fileName = gen.getFileName(xmlPath);
+			if (fileName.endsWith("Full.bridgesupport")) {
+				fileName =  fileName.substring(0, fileName.length() - "Full.bridgesupport".length());
+			}
+			item.setText(fileName);
+			Node node = document.getDocumentElement();
+			item.setData(node);
+			checkItem(node, item);
+			new TreeItem(item, SWT.NONE);
+		}
+		TreeColumn[] columns = nodesTree.getColumns();
+		for (int i = 0; i < columns.length; i++) {
+			columns[i].pack();
+		}
+	}
+	
+	public void refresh () {
+		if (nodesTree == null) return;
+		gen.setXmls(null);
+		flatNodes = null;
+		nodesTree.getDisplay().asyncExec(new Runnable() {
+			 public void run() {
+				 if (nodesTree == null || nodesTree.isDisposed()) return;
+				 nodesTree.removeAll();
+				 attribTable.removeAll();
+				 updateNodes();
+			}
+		});
+	}
+	
+	public void setActionsVisible(boolean visible) {
+		this.actions = visible;
+	}
+	
+	public void setFocus() {
+		nodesTree.setFocus();
+	}
+
+	public static void main(String[] args) {
+//		args = new String[]{
+//			"./Mac Generation/org/eclipse/swt/tools/internal/AppKitFull.bridgesupport",
+//			"./Mac Generation/org/eclipse/swt/tools/internal/FoundationFull.bridgesupport",
+//			"./Mac Generation/org/eclipse/swt/tools/internal/WebKitFull.bridgesupport",
+//		};
+		try {
+			Display display = new Display();
+			Shell shell = new Shell(display);
+			MacGenerator gen = new MacGenerator();
+			gen.setXmls(args);
+			gen.setOutputDir("../org.eclipse.swt/Eclipse SWT PI/cocoa/");
+			gen.setMainClass("org.eclipse.swt.internal.cocoa.OS");
+			MacGeneratorUI ui = new MacGeneratorUI(gen);
+			ui.open(shell);
+			shell.open();
+			while (!shell.isDisposed()) {
+				if (!display.readAndDispatch())
+					display.sleep();
+			}
+			ui.dispose();
+			display.dispose();
+		} catch (Throwable e) {
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/bundles/org.eclipse.swt.tools/Mozilla Generation/org/eclipse/swt/tools/internal/MozillaGenerator.java b/bundles/org.eclipse.swt.tools/Mozilla Generation/org/eclipse/swt/tools/internal/MozillaGenerator.java
index db65fe2..9a03084 100644
--- a/bundles/org.eclipse.swt.tools/Mozilla Generation/org/eclipse/swt/tools/internal/MozillaGenerator.java
+++ b/bundles/org.eclipse.swt.tools/Mozilla Generation/org/eclipse/swt/tools/internal/MozillaGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
@@ -45,12 +45,18 @@
 		"  NS_IMETHOD ",
 		"  NS_IMETHOD_(nsrefcnt) ",
 		"  NS_IMETHOD_(void *) ",
-		"  NS_IMETHOD_(void) "
+		"  NS_IMETHOD_(void) ",
+		"  NS_IMETHOD_(nsresult) ",
+		"  NS_SCRIPTABLE NS_IMETHOD ",
+		"  NS_SCRIPTABLE NS_IMETHOD_(nsrefcnt) ",
+		"  NS_SCRIPTABLE NS_IMETHOD_(void *) ",
+		"  NS_SCRIPTABLE NS_IMETHOD_(void) ",
+		"  NS_SCRIPTABLE NS_IMETHOD_(nsresult) ",
 	};
 	static String NO_SUPER_CLASS = "SWT_NO_SUPER_CLASS";
 	
 	static String[][] TYPES_C2JAVA = { 
-		{ "PRBool *", "boolean[]" },
+		{ "PRBool *", "int[]" },
 		{ "nsIID &", "nsID" },
 		{ "nsCID &", "nsID" },
 		{ "nsCID * *", "int /*long*/" }, // nsID[] not supported by jnigen
@@ -75,25 +81,25 @@
 		{ "PRInt32", "int" }, 
 		{ "PRInt64", "long" }, 
 		{ "nsresult", "int" },
-		{ "PRBool", "boolean" },
+		{ "PRBool", "int" },
 		{ "float", "float" },
 		{ "PRUint16", "short" },
 		{ "size_t", "int" },
 		};
 
-	static String GECKO = "/mozilla/mozilla/1.4/linux_gtk2/mozilla/dist/include/";
+	static String GECKO = "/bluebird/teamswt/swt-builddir/mozilla/1.4/linux_gtk2/mozilla/dist/include/";
 	static String TARGET_FOLDER = "/bluebird/teamswt/chrisx/amd64/workspace/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/";
-	static String[] XPCOM_HEADERS = { 
+	static String[] XPCOM_HEADERS = {
 		"profile/nsIProfile.h",
 		"widget/nsIAppShell.h",
-		"widget/nsIBaseWindow.h", 
+		"widget/nsIBaseWindow.h",
 		"xpcom/nsIComponentManager.h",
 		"xpcom/nsIComponentRegistrar.h",
 		"webbrwsr/nsIContextMenuListener.h", 
 		"docshell/nsIDocShell.h",
-		"dom/nsIDOMEvent.h", 
+		"dom/nsIDOMEvent.h",
 		"dom/nsIDOMMouseEvent.h",
-		"dom/nsIDOMUIEvent.h", 
+		"dom/nsIDOMUIEvent.h",
 		"dom/nsIDOMWindow.h",
 		"uriloader/nsIDownload.h", 
 		"webbrwsr/nsIEmbeddingSiteWindow.h",
@@ -438,15 +444,20 @@
 		}
 	}
 
-	// assume a declaration matching: "class NS_NO_VTABLE nsIWebBrowserChrome : public nsISupports {"
-	// returns nsIWebBrowserChrome
-	// special case for nsISupports that has no super class: class NS_NO_VTABLE nsISupports {
+	// Assume a declaration matching: "class NS_NO_VTABLE nsIWebBrowserChrome : public nsISupports {"
+	// or "class NS_NO_VTABLE NS_SCRIPTABLE nsIWebBrowserChrome : public nsISupports {" returns nsIWebBrowserChrome.
+	// Special case for nsISupports that has no super class: class NS_NO_VTABLE nsISupports {
 	String getClassName(String declaration) {
 		int endIndex = declaration.indexOf(" :");
 		// nsISupports special case (no super class)
 		if (endIndex == -1) endIndex = declaration.indexOf(" {");
-		return declaration.substring(declaration.indexOf("class NS_NO_VTABLE ")
-				+ "class NS_NO_VTABLE ".length(), endIndex);
+		String searchString = "class NS_NO_VTABLE NS_SCRIPTABLE";
+		int startIndex = declaration.indexOf(searchString);
+		if (startIndex == -1) {
+			searchString = "class NS_NO_VTABLE ";
+			startIndex = declaration.indexOf(searchString);
+		}
+		return declaration.substring(startIndex + searchString.length(), endIndex);
 	}
 
 	// assume a declaration matching: "class NS_NO_VTABLE nsIWebBrowserChrome : public nsISupports {"
@@ -673,7 +684,7 @@
 		+ " *\r\n" 
 		+ " * IBM\r\n"
 		+ " * -  Binding to permit interfacing between Mozilla and SWT\r\n"
-		+ " * -  Copyright (C) 2003 IBM Corp.  All Rights Reserved.\r\n"
+		+ " * -  Copyright (C) 2003, 2009 IBM Corp.  All Rights Reserved.\r\n"
 		+ " *\r\n" + " * ***** END LICENSE BLOCK ***** */";
 
 	static String PACKAGE_DECLARATION = "package org.eclipse.swt.internal.mozilla;";
diff --git a/bundles/org.eclipse.swt.tools/NativeStats/org/eclipse/swt/tools/internal/NativeStats.java b/bundles/org.eclipse.swt.tools/NativeStats/org/eclipse/swt/tools/internal/NativeStats.java
index 9e796b6..4b2573d 100644
--- a/bundles/org.eclipse.swt.tools/NativeStats/org/eclipse/swt/tools/internal/NativeStats.java
+++ b/bundles/org.eclipse.swt.tools/NativeStats/org/eclipse/swt/tools/internal/NativeStats.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2006 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
diff --git a/bundles/org.eclipse.swt.tools/Sleak/org/eclipse/swt/tools/internal/Sleak.java b/bundles/org.eclipse.swt.tools/Sleak/org/eclipse/swt/tools/internal/Sleak.java
index cfc35d1..ac1ee2d 100644
--- a/bundles/org.eclipse.swt.tools/Sleak/org/eclipse/swt/tools/internal/Sleak.java
+++ b/bundles/org.eclipse.swt.tools/Sleak/org/eclipse/swt/tools/internal/Sleak.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2007 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
@@ -23,8 +23,6 @@
  * 
  */
 public class Sleak {
-	Display display;
-	Shell shell;
 	List list;
 	Canvas canvas;
 	Button start, stop, check;
@@ -41,9 +39,14 @@
 	data.tracking = true;
 	Display display = new Display (data);
 	Sleak sleak = new Sleak ();
-	sleak.open ();
+	Shell shell = new Shell(display);
+	shell.setText ("S-Leak");
+	Point size = shell.getSize ();
+	shell.setSize (size.x / 2, size.y / 2);
+	sleak.create (shell);
+	shell.open();
 	
-	// Launch you application here
+	// Launch your application here
 	// e.g.		
 //	Shell shell = new Shell(display);
 //	Button button1 = new Button(shell, SWT.PUSH);
@@ -55,66 +58,62 @@
 //	button2.setImage(image);
 //	shell.open();
 	
-	while (!sleak.shell.isDisposed ()) {
+	while (!shell.isDisposed ()) {
 		if (!display.readAndDispatch ()) display.sleep ();
 	}
 	display.dispose ();
 }
-	
-void open () {
-	display = Display.getCurrent ();
-	shell = new Shell (display);
-	shell.setText ("S-Leak");
-	list = new List (shell, SWT.BORDER | SWT.V_SCROLL);
+
+public void create (Composite parent) {
+	list = new List (parent, SWT.BORDER | SWT.V_SCROLL);
 	list.addListener (SWT.Selection, new Listener () {
 		public void handleEvent (Event event) {
 			refreshObject ();
 		}
 	});
-	text = new Text (shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
-	canvas = new Canvas (shell, SWT.BORDER);
+	text = new Text (parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
+	canvas = new Canvas (parent, SWT.BORDER);
 	canvas.addListener (SWT.Paint, new Listener () {
 		public void handleEvent (Event event) {
 			paintCanvas (event);
 		}
 	});
-	check = new Button (shell, SWT.CHECK);
+	check = new Button (parent, SWT.CHECK);
 	check.setText ("Stack");
 	check.addListener (SWT.Selection, new Listener () {
 		public void handleEvent (Event e) {
 			toggleStackTrace ();
 		}
 	});
-	start = new Button (shell, SWT.PUSH);
+	start = new Button (parent, SWT.PUSH);
 	start.setText ("Snap");
 	start.addListener (SWT.Selection, new Listener () {
 		public void handleEvent (Event event) {
 			refreshAll ();
 		}
 	});
-	stop = new Button (shell, SWT.PUSH);
+	stop = new Button (parent, SWT.PUSH);
 	stop.setText ("Diff");
 	stop.addListener (SWT.Selection, new Listener () {
 		public void handleEvent (Event event) {
 			refreshDifference ();
 		}
 	});
-	label = new Label (shell, SWT.BORDER);
+	label = new Label (parent, SWT.BORDER);
 	label.setText ("0 object(s)");
-	shell.addListener (SWT.Resize, new Listener () {
+	parent.addListener (SWT.Resize, new Listener () {
 		public void handleEvent (Event e) {
 			layout ();
 		}
 	});
 	check.setSelection (false);
 	text.setVisible (false);
-	Point size = shell.getSize ();
-	shell.setSize (size.x / 2, size.y / 2);
-	shell.open ();
+	layout();
 }
 
 void refreshLabel () {
-	int colors = 0, cursors = 0, fonts = 0, gcs = 0, images = 0, regions = 0;
+	int colors = 0, cursors = 0, fonts = 0, gcs = 0, images = 0;
+	int paths = 0, patterns = 0, regions = 0, textLayouts = 0, transforms= 0;
 	for (int i=0; i<objects.length; i++) {
 		Object object = objects [i];
 		if (object instanceof Color) colors++;
@@ -122,7 +121,11 @@
 		if (object instanceof Font) fonts++;
 		if (object instanceof GC) gcs++;
 		if (object instanceof Image) images++;
+		if (object instanceof Path) paths++;
+		if (object instanceof Pattern) patterns++;
 		if (object instanceof Region) regions++;
+		if (object instanceof TextLayout) textLayouts++;
+		if (object instanceof Transform) transforms++;
 	}
 	String string = "";
 	if (colors != 0) string += colors + " Color(s)\n";
@@ -130,7 +133,11 @@
 	if (fonts != 0) string += fonts + " Font(s)\n";
 	if (gcs != 0) string += gcs + " GC(s)\n";
 	if (images != 0) string += images + " Image(s)\n";
+	if (paths != 0) string += paths + " Paths(s)\n";
+	if (patterns != 0) string += patterns + " Pattern(s)\n";
 	if (regions != 0) string += regions + " Region(s)\n";
+	if (textLayouts != 0) string += textLayouts + " TextLayout(s)\n";
+	if (transforms != 0) string += transforms + " Transform(s)\n";
 	if (string.length () != 0) {
 		string = string.substring (0, string.length () - 1);
 	}
@@ -138,8 +145,10 @@
 }
 
 void refreshDifference () {
+	Display display = canvas.getDisplay();
 	DeviceData info = display.getDeviceData ();
 	if (!info.tracking) {
+		Shell shell = canvas.getShell();
 		MessageBox dialog = new MessageBox (shell, SWT.ICON_WARNING | SWT.OK);
 		dialog.setText (shell.getText ());
 		dialog.setMessage ("Warning: Device is not tracking resource allocation");
@@ -170,19 +179,12 @@
 	text.setText ("");
 	canvas.redraw ();
 	for (int i=0; i<objects.length; i++) {
-		list.add (objectName (objects [i]));
+		list.add (objects [i].toString());
 	}
 	refreshLabel ();
 	layout ();
 }
 
-String objectName (Object object) {
-	String string = object.toString ();
-	int index = string.lastIndexOf ('.');
-	if (index == -1) return string;
-	return string.substring (index + 1, string.length ());
-}
-
 void toggleStackTrace () {
 	refreshObject ();
 	layout ();
@@ -233,12 +235,35 @@
 		gc.drawImage ((Image) object, 0, 0);
 		return;
 	}
+	if (object instanceof Path) {
+		if (((Path)object).isDisposed ()) return;
+		gc.drawPath ((Path) object);
+		return;
+	}
+	if (object instanceof Pattern) {
+		if (((Pattern)object).isDisposed ()) return;
+		gc.setBackgroundPattern ((Pattern)object);
+		gc.fillRectangle (canvas.getClientArea ());
+		gc.setBackgroundPattern (null);
+		return;
+	}
 	if (object instanceof Region) {
 		if (((Region)object).isDisposed ()) return;
 		String string = ((Region)object).getBounds().toString();
 		gc.drawString (string, 0, 0);
 		return;
 	}
+	if (object instanceof TextLayout) {
+		if (((TextLayout)object).isDisposed ()) return;
+		((TextLayout)object).draw (gc, 0, 0);
+		return;
+	}
+	if (object instanceof Transform) {
+		if (((Transform)object).isDisposed ()) return;
+		String string = ((Transform)object).toString();
+		gc.drawString (string, 0, 0);
+		return;
+	}
 }
 
 void refreshObject () {
@@ -267,7 +292,8 @@
 }
 
 void layout () {
-	Rectangle rect = shell.getClientArea ();
+	Composite parent = canvas.getParent();
+	Rectangle rect = parent.getClientArea ();
 	int width = 0;
 	String [] items = list.getItems ();
 	GC gc = new GC (list);
diff --git a/bundles/org.eclipse.swt.tools/about.html b/bundles/org.eclipse.swt.tools/about.html
index 6f6b96c..4602330 100644
--- a/bundles/org.eclipse.swt.tools/about.html
+++ b/bundles/org.eclipse.swt.tools/about.html
@@ -1,22 +1,28 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
 <title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
 </head>
 <body lang="EN-US">
 <h2>About This Content</h2>
  
-<p>February 24, 2005</p>	
+<p>June 2, 2006</p>	
 <h3>License</h3>
 
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
 For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
 
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
 
 </body>
 </html>
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt.tools/build.properties b/bundles/org.eclipse.swt.tools/build.properties
index 1d2234a..1ae1378 100644
--- a/bundles/org.eclipse.swt.tools/build.properties
+++ b/bundles/org.eclipse.swt.tools/build.properties
@@ -8,4 +8,19 @@
 # Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-source.swttools.jar=JNI Generation/
+bin.includes = about.html,\
+               plugin.xml,\
+               plugin.properties,\
+               META-INF/,\
+               templates/,\
+               icons/,\
+               .
+output.. = bin/
+source.. = src/,\
+           JNI Generation/,\
+           Mac Generation/,\
+           Icon Exe/,\
+           NativeStats/,\
+           Sleak/,\
+           Mozilla Generation/
+bin.excludes = META-INF/p2.inf
diff --git a/bundles/org.eclipse.swt.tools/feature/.project b/bundles/org.eclipse.swt.tools/feature/.project
new file mode 100644
index 0000000..8623121
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.swt.tools.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/bundles/org.eclipse.swt.tools/feature/build.properties b/bundles/org.eclipse.swt.tools/feature/build.properties
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/feature/build.properties
diff --git a/bundles/org.eclipse.swt.tools/feature/feature.xml b/bundles/org.eclipse.swt.tools/feature/feature.xml
new file mode 100644
index 0000000..40d4f1a
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/feature/feature.xml
@@ -0,0 +1,235 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.swt.tools.feature"
+      label="SWT Tools"
+      version="1.0.0.qualifier">
+
+   <description url="http://www.example.com/description">
+      SWT Tools Feature.
+   </description>
+
+   <copyright>
+      /*******************************************************************************
+* Copyright (c) 2009 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
+*******************************************************************************/
+   </copyright>
+
+   <license>
+      Eclipse Public License - v 1.0
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS
+ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT&apos;S ACCEPTANCE
+OF THIS AGREEMENT.
+1. DEFINITIONS
+&quot;Contribution&quot; means:
+a) in the case of the initial Contributor, the initial code and
+documentation distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+i) changes to the Program, and
+ii) additions to the Program;
+where such changes and/or additions to the Program originate
+from and are distributed by that particular Contributor. A Contribution
+&apos;originates&apos; from a Contributor if it was added to the Program
+by such Contributor itself or anyone acting on such Contributor&apos;s
+behalf. Contributions do not include additions to the Program
+which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.
+&quot;Contributor&quot; means any person or entity that distributes the
+Program.
+&quot;Licensed Patents &quot; mean patent claims licensable by a Contributor
+which are necessarily infringed by the use or sale of its Contribution
+alone or when combined with the Program.
+&quot;Program&quot; means the Contributions distributed in accordance with
+this Agreement.
+&quot;Recipient&quot; means anyone who receives the Program under this
+Agreement, including all Contributors.
+2. GRANT OF RIGHTS
+a) Subject to the terms of this Agreement, each Contributor hereby
+grants Recipient a non-exclusive, worldwide, royalty-free copyright
+license to reproduce, prepare derivative works of, publicly display,
+publicly perform, distribute and sublicense the Contribution
+of such Contributor, if any, and such derivative works, in source
+code and object code form.
+b) Subject to the terms of this Agreement, each Contributor hereby
+grants Recipient a non-exclusive, worldwide, royalty-free patent
+license under Licensed Patents to make, use, sell, offer to sell,
+import and otherwise transfer the Contribution of such Contributor,
+if any, in source code and object code form. This patent license
+shall apply to the combination of the Contribution and the Program
+if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to
+be covered by the Licensed Patents. The patent license shall
+not apply to any other combinations which include the Contribution.
+No hardware per se is licensed hereunder.
+c) Recipient understands that although each Contributor grants
+the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe
+the patent or other intellectual property rights of any other
+entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement
+of intellectual property rights or otherwise. As a condition
+to exercising the rights and licenses granted hereunder, each
+Recipient hereby assumes sole responsibility to secure any other
+intellectual property rights needed, if any. For example, if
+a third party patent license is required to allow Recipient to
+distribute the Program, it is Recipient&apos;s responsibility to acquire
+that license before distributing the Program.
+d) Each Contributor represents that to its knowledge it has sufficient
+copyright rights in its Contribution, if any, to grant the copyright
+license set forth in this Agreement.
+3. REQUIREMENTS
+A Contributor may choose to distribute the Program in object
+code form under its own license agreement, provided that:
+a) it complies with the terms and conditions of this Agreement;
+and
+b) its license agreement:
+i) effectively disclaims on behalf of all Contributors all warranties
+and conditions, express and implied, including warranties or
+conditions of title and non-infringement, and implied warranties
+or conditions of merchantability and fitness for a particular
+purpose;
+ii) effectively excludes on behalf of all Contributors all liability
+for damages, including direct, indirect, special, incidental
+and consequential damages, such as lost profits;
+iii) states that any provisions which differ from this Agreement
+are offered by that Contributor alone and not by any other party;
+and
+iv) states that source code for the Program is available from
+such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for
+software exchange.
+When the Program is made available in source code form:
+a) it must be made available under this Agreement; and
+b) a copy of this Agreement must be included with each copy of
+the Program.
+Contributors may not remove or alter any copyright notices contained
+within the Program.
+Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.
+4. COMMERCIAL DISTRIBUTION
+Commercial distributors of software may accept certain responsibilities
+with respect to end users, business partners and the like. While
+this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+(&quot;Commercial Contributor&quot;) hereby agrees to defend and indemnify
+every other Contributor (&quot;Indemnified Contributor&quot;) against any
+losses, damages and costs (collectively &quot;Losses&quot;) arising from
+claims, lawsuits and other legal actions brought by a third party
+against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection
+with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any
+claims or Losses relating to any actual or alleged intellectual
+property infringement. In order to qualify, an Indemnified Contributor
+must: a) promptly notify the Commercial Contributor in writing
+of such claim, and b) allow the Commercial Contributor to control,
+and cooperate with the Commercial Contributor in, the defense
+and any related settlement negotiations. The Indemnified Contributor
+may participate in any such claim at its own expense.
+For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor&apos;s responsibility
+alone. Under this section, the Commercial Contributor would have
+to defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any
+other Contributor to pay any damages as a result, the Commercial
+Contributor must pay those damages.
+5. NO WARRANTY
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM
+IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with
+its exercise of rights under this Agreement , including but not
+limited to the risks and costs of program errors, compliance
+with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations.
+6. DISCLAIMER OF LIABILITY
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE
+OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY
+OF SUCH DAMAGES.
+7. GENERAL
+If any provision of this Agreement is invalid or unenforceable
+under applicable law, it shall not affect the validity or enforceability
+of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be
+reformed to the minimum extent necessary to make such provision
+valid and enforceable.
+If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging
+that the Program itself (excluding combinations of the Program
+with other software or hardware) infringes such Recipient&apos;s patent(s),
+then such Recipient&apos;s rights granted under Section 2(b) shall
+terminate as of the date such litigation is filed.
+All Recipient&apos;s rights under this Agreement shall terminate if
+it fails to comply with any of the material terms or conditions
+of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If
+all Recipient&apos;s rights under this Agreement terminate, Recipient
+agrees to cease use and distribution of the Program as soon as
+reasonably practicable. However, Recipient&apos;s obligations under
+this Agreement and any licenses granted by Recipient relating
+to the Program shall continue and survive.
+Everyone is permitted to copy and distribute copies of this Agreement,
+but in order to avoid inconsistency the Agreement is copyrighted
+and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other
+than the Agreement Steward has the right to modify this Agreement.
+The Eclipse Foundation is the initial Agreement Steward. The
+Eclipse Foundation may assign the responsibility to serve as
+the Agreement Steward to a suitable separate entity. Each new
+version of the Agreement will be given a distinguishing version
+number. The Program (including Contributions) may always be distributed
+subject to the version of the Agreement under which it was received.
+In addition, after a new version of the Agreement is published,
+Contributor may elect to distribute the Program (including its
+Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights
+or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under
+this Agreement are reserved.
+This Agreement is governed by the laws of the State of New York
+and the intellectual property laws of the United States of America.
+No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose.
+Each party waives its rights to a jury trial in any resulting
+litigation.
+   </license>
+
+   <url>
+      <discovery label="Generating the SWT JNI Code" url="http://eclipse.org/swt/jnigen.php"/>
+      <discovery label="Generating the SWT PI Code for Cocoa" url="http://eclipse.org/swt/macgen.php"/>
+   </url>
+
+   <plugin
+         id="org.eclipse.swt.tools"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/bundles/org.eclipse.swt.tools/icons/mac.gif b/bundles/org.eclipse.swt.tools/icons/mac.gif
new file mode 100644
index 0000000..13102f6
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/icons/mac.gif
Binary files differ
diff --git a/bundles/org.eclipse.swt.tools/icons/sleak.gif b/bundles/org.eclipse.swt.tools/icons/sleak.gif
new file mode 100644
index 0000000..444bd35
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/icons/sleak.gif
Binary files differ
diff --git a/bundles/org.eclipse.swt.tools/icons/spy.gif b/bundles/org.eclipse.swt.tools/icons/spy.gif
new file mode 100644
index 0000000..98d6e2e
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/icons/spy.gif
Binary files differ
diff --git a/bundles/org.eclipse.swt.tools/plugin.properties b/bundles/org.eclipse.swt.tools/plugin.properties
index 577fc9d..3065bf1 100644
--- a/bundles/org.eclipse.swt.tools/plugin.properties
+++ b/bundles/org.eclipse.swt.tools/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2004 IBM Corporation and others.
+# 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
@@ -10,3 +10,8 @@
 ###############################################################################
 pluginName = SWT Tools
 providerName = Eclipse.org
+macViewName = Mac Generator
+spyViewName = SWT Spy
+sleakViewName = Sleak
+jniBuilderName = JNI Builder
+enableCheck64Name = Report 64-bit Problems
diff --git a/bundles/org.eclipse.swt.tools/plugin.xml b/bundles/org.eclipse.swt.tools/plugin.xml
index 0c414ab..ef0072b 100644
--- a/bundles/org.eclipse.swt.tools/plugin.xml
+++ b/bundles/org.eclipse.swt.tools/plugin.xml
@@ -1,13 +1,83 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.0"?>
-<plugin
-   id="org.eclipse.swt.tools"
-   name="%pluginName"
-   version="3.1.0"
-   provider-name="%providerName">
+<plugin>
+   <extension
+         point="org.eclipse.ui.views">
+      <category
+            name="%pluginName"
+            id="org.eclipse.swt.swt.tools">
+      </category>
+      <view
+            allowMultiple="false"
+            category="org.eclipse.swt.swt.tools"
+            class="org.eclipse.swt.tools.views.MacGeneratorView"
+            icon="icons/mac.gif"
+            id="org.eclipse.swt.tools.views.MacGeneratorView"
+            name="%macViewName">
+      </view>
+      <view
+            allowMultiple="false"
+            category="org.eclipse.swt.swt.tools"
+            class="org.eclipse.swt.tools.views.SpyView"
+            icon="icons/spy.gif"
+            id="org.eclipse.swt.tools.views.SpyView"
+            name="%spyViewName">
+      </view>
+      <view
+            category="org.eclipse.swt.swt.tools"
+            class="org.eclipse.swt.tools.views.SleakView"
+            icon="icons/sleak.gif"
+            id="org.eclipse.swt.tools.views.SleakView"
+            name="%sleakViewName">
+      </view>
+   </extension>
 
-   <requires>
-      <import plugin="org.eclipse.swt" export="true"/>
-   </requires>
+   <extension point="org.eclipse.ui.editors.templates">
+      <include
+            file="templates/jnitemplates.xml"
+            translations="$nl$/templates/jnitemplates.properties">
+      </include>
+   </extension>
+
+   <extension
+         id="jnibuilder"
+         name="%jniBuilderName"
+         point="org.eclipse.core.resources.builders">
+      <builder hasNature="false">
+		<run class="org.eclipse.swt.tools.builders.JNIBuilder"/>
+      </builder>
+   </extension>
+
+   <extension
+         point="org.eclipse.jdt.core.compilationParticipant">
+      <compilationParticipant
+            class="org.eclipse.swt.tools.builders.Check64CompilationParticipant"
+            id="org.eclipse.swt.tools.Check64CompilationParticipant">
+      </compilationParticipant>
+   </extension>
+
+   <extension
+         point="org.eclipse.ui.popupMenus">
+      <objectContribution
+            objectClass="org.eclipse.jdt.core.IJavaProject"
+            id="org.eclipse.swt.tools.contribution">
+         <menu
+               label="%pluginName"
+               path="additions"
+               id="org.eclipse.swt.tools.menu">
+            <separator
+                  name="group1">
+            </separator>
+         </menu>
+         <action
+               label="%enableCheck64Name"
+               class="org.eclipse.swt.tools.builders.Check64EnableAction"
+               menubarPath="org.eclipse.swt.tools.menu/group1"
+               style="toggle"
+               enablesFor="1"
+               id="org.eclipse.swt.tools.check64EnableAction">
+         </action>
+      </objectContribution>
+   </extension>
 
 </plugin>
diff --git a/bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/Activator.java b/bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/Activator.java
new file mode 100644
index 0000000..7b2de2b
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/Activator.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2009 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.tools;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.swt.tools";
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+	/**
+	 * Returns an image descriptor for the image file at the given
+	 * plug-in relative path
+	 *
+	 * @param path the path
+	 * @return the image descriptor
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return imageDescriptorFromPlugin(PLUGIN_ID, path);
+	}
+}
diff --git a/bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/builders/Check64CompilationParticipant.java b/bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/builders/Check64CompilationParticipant.java
new file mode 100644
index 0000000..f28a2ac
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/builders/Check64CompilationParticipant.java
@@ -0,0 +1,293 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2009 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.tools.builders;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaModelMarker;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.compiler.BuildContext;
+import org.eclipse.jdt.core.compiler.CharOperation;
+import org.eclipse.jdt.core.compiler.CompilationParticipant;
+import org.eclipse.jdt.core.compiler.batch.BatchCompiler;
+import org.eclipse.swt.tools.Activator;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+
+public class Check64CompilationParticipant extends CompilationParticipant {
+	HashSet sources;
+
+	static final char[] INT_LONG = "int /*long*/".toCharArray();
+	static final char[] INT_LONG_ARRAY = "int[] /*long[]*/".toCharArray();
+	static final char[] FLOAT_DOUBLE = "float /*double*/".toCharArray();
+	static final char[] FLOAT_DOUBLE_ARRAY = "float[] /*double[]*/".toCharArray();
+	static final char[] LONG_INT = "long /*int*/".toCharArray();
+	static final char[] LONG_INT_ARRAY = "long[] /*int[]*/".toCharArray();
+	static final char[] DOUBLE_FLOAT = "double /*float*/".toCharArray();
+	static final char[] DOUBLE_FLOAT_ARRAY = "double[] /*float[]*/".toCharArray();
+	static final String buildDir = "/.build64/";
+	static final String pluginDir = "/org.eclipse.swt/";
+	static final String plugin = "org.eclipse.swt";
+	static final String SOURCE_ID = "JNI";
+	static final String CHECK_64_ENABLED = Activator.PLUGIN_ID + "CHECK_64_ENABLED";
+	
+void build(IJavaProject project, String root) throws CoreException {
+	PrintWriter writer = null;
+	try {
+		StringBuffer sourcePath = new StringBuffer(), cp = new StringBuffer();
+		IClasspathEntry[] entries = project.getResolvedClasspath(true);
+		for (int i = 0; i < entries.length; i++) {
+			IClasspathEntry entry = entries[i]; 
+			String path = entry.getPath().toPortableString();
+			if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
+				if (path.startsWith(pluginDir)) {
+					if (sourcePath.length() > 0) sourcePath.append(File.pathSeparatorChar);
+					String dir = root + path.substring(pluginDir.length());
+					sourcePath.append(dir);
+				}
+			} else {
+				if (cp.length() > 0) cp.append(File.pathSeparator);
+				cp.append(path);
+			}
+		}
+		String bin = root + "/bin";
+		if (cp.length() > 0) cp.append(File.pathSeparator);
+		cp.append(bin);
+		ArrayList args = new ArrayList();
+		args.addAll(Arrays.asList(new String[]{
+			"-nowarn",
+//			"-verbose",
+			"-d", bin,
+			"-cp", cp.toString(),
+			"-log", root + "/log.xml",
+			"-sourcepath", sourcePath.toString(),
+		}));
+		args.addAll(sources);
+		sources = null;
+		writer = new PrintWriter(new BufferedOutputStream(new FileOutputStream(root + "/out.txt")));
+		BatchCompiler.compile((String[])args.toArray(new String[args.size()]), writer, writer, null);
+		writer.close();
+		writer = null;
+		project.getProject().findMember(new Path(buildDir)).refreshLocal(IResource.DEPTH_INFINITE, null);
+	} catch (Exception e) {
+		throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Problem building 64-bit code", e));
+	} finally {
+		if (writer != null) writer.close();
+	}
+}
+
+void create(IContainer file) throws CoreException {
+	if (file.exists()) return;
+	switch (file.getType()) {
+		case IResource.FOLDER:
+			create(file.getParent());
+			((IFolder)file).create(true, true, null);
+	}
+}
+
+void createProblems(IJavaProject project, String root) throws CoreException {
+	try {
+		InputStream is = new BufferedInputStream(new FileInputStream(root + "/log.xml"));
+		Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(is));
+		is.close();
+		IProject proj = project.getProject();	
+		String projPath = proj.getLocation().toPortableString();
+		NodeList sources = doc.getDocumentElement().getElementsByTagName("sources");
+		for (int i = 0; i < sources.getLength(); i++) {
+			NodeList src = ((Element)sources.item(i)).getElementsByTagName("source");
+			for (int j = 0; j < src.getLength(); j++) {
+				Element source = (Element)src.item(j);
+				String path = source.getAttribute("path").replace('\\', '/');
+				path = path.replaceAll(buildDir, "/");
+				if (path.startsWith(projPath)) {
+					path = path.substring(projPath.length());
+				}
+				IResource resource = proj.findMember(new Path(path));
+				boolean hasProblems = false;
+				IMarker[] markers = resource.findMarkers(IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER, true, IResource.DEPTH_INFINITE);
+				for (int m = 0; m < markers.length; m++) {
+					IMarker marker = markers[m];
+					if (SOURCE_ID.equals(marker.getAttribute(IMarker.SOURCE_ID))) {
+						marker.delete();
+					} else {
+						Object severity = marker.getAttribute(IMarker.SEVERITY);
+						hasProblems |= severity != null && ((Integer)severity).intValue() == IMarker.SEVERITY_ERROR;
+					}
+				}
+				if (!hasProblems) {
+					NodeList problems = source.getElementsByTagName("problems");
+					for (int k = 0; k < problems.getLength(); k++) {
+						NodeList problem = ((Element)problems.item(k)).getElementsByTagName("problem");
+						for (int l = 0; l < problem.getLength(); l++) {
+							Element node = (Element)problem.item(l);
+							if (resource != null) {
+								int start = Integer.parseInt(node.getAttribute("charStart"));
+								int end = Integer.parseInt(node.getAttribute("charEnd"));
+								String message = "[64] " + ((Element)node.getElementsByTagName("message").item(0)).getAttribute("value");
+								IMarker marker = resource.createMarker(IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER);
+								int severity = IMarker.SEVERITY_ERROR;
+								marker.setAttributes(
+									new String[] {IMarker.MESSAGE, IMarker.SEVERITY, IMarker.CHAR_START, IMarker.CHAR_END, IMarker.SOURCE_ID},
+									new Object[] {message, new Integer(severity), new Integer(start), new Integer(end), SOURCE_ID});
+							}
+						}
+					}
+				}
+			}
+		}
+	} catch (Exception e) {
+		throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Problem creating 64-bit problems", e));
+	}
+}
+
+boolean replace(char[] source, char[] src, char[] dest) {
+	boolean changed = false;
+	int start = 0;
+	while (start < source.length) {
+		int index = CharOperation.indexOf(src, source, true, start);
+		if (index == -1) break;
+		changed |= true;
+		System.arraycopy(dest, 0, source, index, dest.length);
+		start = index + 1;
+	}
+	return changed;
+}
+
+boolean replace(char[] source) {
+	boolean changed = false;
+	changed |= replace(source, INT_LONG, LONG_INT);
+	changed |= replace(source, INT_LONG_ARRAY, LONG_INT_ARRAY);
+	changed |= replace(source, FLOAT_DOUBLE, DOUBLE_FLOAT);
+	changed |= replace(source, FLOAT_DOUBLE_ARRAY, DOUBLE_FLOAT_ARRAY);
+	if (!changed) {
+		changed |= replace(source, LONG_INT, INT_LONG);
+		changed |= replace(source, LONG_INT_ARRAY, INT_LONG_ARRAY);
+		changed |= replace(source, DOUBLE_FLOAT, FLOAT_DOUBLE);
+		changed |= replace(source, DOUBLE_FLOAT_ARRAY, FLOAT_DOUBLE_ARRAY);
+	}
+	return changed;
+}
+
+public static boolean getEnabled() {
+	return Activator.getDefault().getPreferenceStore().getBoolean(CHECK_64_ENABLED);
+}
+
+public static void setEnabled(boolean enabled) {
+	Activator.getDefault().getPreferenceStore().setValue(CHECK_64_ENABLED, enabled);
+}
+
+boolean is64bit(IJavaProject project) {
+	try {
+		IClasspathEntry[] entries = project.getResolvedClasspath(true);
+		for (int i = 0; i < entries.length; i++) {
+			IClasspathEntry entry = entries[i];
+			if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
+				String path = entry.getPath().toPortableString();
+				System.out.println(path);
+				if (path.equals(pluginDir + "Eclipse SWT PI/win32") || 
+					path.equals(pluginDir + "Eclipse SWT PI/cocoa") || 
+					path.equals(pluginDir + "Eclipse SWT PI/gtk")
+				) 
+				{
+					return true;
+				}
+			}
+		}
+	} catch (JavaModelException e) {}
+	return false;
+}
+
+public void buildFinished(IJavaProject project) {
+	try {
+		if (sources == null) return;
+		if (!getEnabled() || !is64bit(project)) return;
+//		long time = System.currentTimeMillis();
+		String root = project.getProject().getLocation().toPortableString() + buildDir;
+		build(project, root);		
+		createProblems(project, root);
+//		System.out.println("compiling time=" + (System.currentTimeMillis() - time));
+	} catch (Exception e) {
+		e.printStackTrace();
+	}
+}
+	
+public void buildStarting(BuildContext[] files, boolean isBatch) {
+	if (sources == null) sources = new HashSet();
+//	long time = System.currentTimeMillis();
+	for (int i = 0; i < files.length; i++) {
+		BuildContext context = files[i];
+		IFile file = context.getFile();
+		IProject project = file.getProject();
+		Path path = new Path(buildDir + file.getProjectRelativePath().toPortableString());
+		IFile newFile = project.getFile(path);
+		sources.add(newFile.getLocation().toPortableString());
+		try {
+			if (newFile.exists()) {
+				newFile.delete(true, null);
+			}
+			create(newFile.getParent());
+			char[] source = context.getContents();
+			replace(source);
+			newFile.create(new ByteArrayInputStream(new String(source).getBytes()), true, null);
+		} catch (CoreException e) {
+			e.printStackTrace();
+		}
+	}
+//	System.out.println("copying time=" + (System.currentTimeMillis() - time));	
+}
+
+public void cleanStarting(IJavaProject project) {
+	if (!isActive(project)) return;
+	sources = null;
+	IResource resource = project.getProject().findMember(new Path(buildDir));
+	if (resource != null) {
+		try {
+			resource.delete(true, null);
+		} catch (CoreException e) {
+			e.printStackTrace();
+		}
+	}
+}
+
+public boolean isActive(IJavaProject project) {
+	if (project.getProject().getName().equals(plugin)) {
+		return true;
+	}
+	return super.isActive(project);
+}
+
+}
diff --git a/bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/builders/Check64EnableAction.java b/bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/builders/Check64EnableAction.java
new file mode 100644
index 0000000..02184d5
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/builders/Check64EnableAction.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2009 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.tools.builders;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPart;
+
+public class Check64EnableAction implements IObjectActionDelegate {
+
+	public Check64EnableAction() {
+		super();
+	}
+
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+		action.setChecked(Check64CompilationParticipant.getEnabled());
+	}
+
+	public void run(IAction action) {
+		Check64CompilationParticipant.setEnabled(action.isChecked());
+	}
+
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
+
+}
diff --git a/bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/builders/JNIBuilder.java b/bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/builders/JNIBuilder.java
new file mode 100644
index 0000000..dc13562
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/builders/JNIBuilder.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2009 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.tools.builders;
+
+import java.util.Map;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.swt.tools.internal.JNIGeneratorApp;
+import org.eclipse.swt.tools.internal.MetaData;
+
+public class JNIBuilder extends IncrementalProjectBuilder {
+
+	MetaData metaData;
+	MainClass[] classes;
+	
+	static class MainClass {
+		public String mainClassName;
+		public String outputDir;
+		public String sourceDir;
+		public boolean build;
+		
+		public String toString() {
+			return mainClassName + "->" + outputDir;
+		}
+	}
+	
+	public JNIBuilder() {
+		metaData = new MetaData("org.eclipse.swt.internal");
+		String mainClasses = metaData.getMetaData("swt_main_classes", null);
+		if (mainClasses != null) {
+			String[] list = mainClasses.split(",");
+			classes = new MainClass[list.length / 2];
+			for (int i = 0; i < list.length; i += 2) {
+				MainClass clazz = classes[i/2] = new MainClass();
+				clazz.mainClassName = list[i];
+				clazz.outputDir = list[i+1].substring(2, list[i+1].length());
+				clazz.sourceDir = clazz.outputDir.substring(0, clazz.outputDir.length() - "library/".length());
+			}
+		}
+	}
+	
+	protected IProject[] build(int kind, Map args, final IProgressMonitor monitor) throws CoreException {
+		IResourceDelta delta = getDelta(getProject());
+		if (delta == null) return null;
+		delta.accept(new IResourceDeltaVisitor() {
+			public boolean visit(IResourceDelta delta) throws CoreException {
+				IPath ipath = delta.getFullPath();
+				if (!"java".equals(ipath.getFileExtension())) return true;
+				String path = ipath.toPortableString();
+				for (int i = 0; i < classes.length; i++) {
+					if (classes[i].build) continue;
+					if (path.startsWith(classes[i].sourceDir)) {
+						classes[i].build = true;
+					}
+				}
+				return true;
+			}
+		});
+		final IWorkspaceRoot root = getProject().getWorkspace().getRoot();
+		for (int i = 0; i < classes.length; i++) {
+			MainClass mainClass = classes[i];
+			if (mainClass.build) {
+				mainClass.build = false;
+				IResource library = root.findMember(mainClass.outputDir);
+				JNIGeneratorApp gen = new JNIGeneratorApp();
+				gen.setMainClassName(mainClass.mainClassName, library.getLocation().toPortableString());
+				gen.generate();
+				library.refreshLocal(IResource.DEPTH_INFINITE, null);
+			}
+		}
+		return null;
+	}
+
+}
diff --git a/bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/views/MacGeneratorView.java b/bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/views/MacGeneratorView.java
new file mode 100644
index 0000000..3699313
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/views/MacGeneratorView.java
@@ -0,0 +1,165 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2009 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.tools.views;
+
+import java.util.*;
+
+import org.eclipse.core.resources.*;
+import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.jobs.*;
+import org.eclipse.jface.action.*;
+import org.eclipse.swt.tools.internal.*;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.ui.*;
+import org.eclipse.ui.part.*;
+
+
+public class MacGeneratorView extends ViewPart {
+	private Action generateAction;
+	private MacGeneratorUI ui;
+	private IResource root;
+	IResourceChangeListener listener;
+	private Job job;
+	private String mainClassName = "org.eclipse.swt.internal.cocoa.OS";
+	
+	class GenJob extends Job {
+		public GenJob() {
+			super("Mac Generator");
+		}
+		protected IStatus run(final IProgressMonitor monitor) {
+			try {
+				ui.generate(new ProgressMonitor() {
+					public void setMessage(String message) {
+						monitor.subTask(message);
+					}
+					public void setTotal(int total) {
+						monitor.beginTask("Generating", total);
+					}
+					public void step() {
+						monitor.worked(1);
+					}
+				});
+				refresh();
+			} finally {
+				monitor.done();
+				MacGeneratorView.this.job = null;
+			}
+			return Status.OK_STATUS;
+		}
+	}
+	
+	/**
+	 * The constructor.
+	 */
+	public MacGeneratorView() {
+		MacGenerator.BUILD_C_SOURCE = false;
+		IWorkspace workspace = ResourcesPlugin.getWorkspace();
+		IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
+		root = workspaceRoot.findMember(new Path("org.eclipse.swt/Eclipse SWT PI/cocoa"));		
+		listener = new IResourceChangeListener() {
+			public void resourceChanged(IResourceChangeEvent event) {
+				if (job != null) return;
+				if (event.getType() != IResourceChangeEvent.POST_CHANGE) return;
+				IResourceDelta rootDelta = event.getDelta();
+				IResourceDelta piDelta = rootDelta.findMember(root.getFullPath());
+				if (piDelta == null) return;
+				final ArrayList changed = new ArrayList();
+				IResourceDeltaVisitor visitor = new IResourceDeltaVisitor() {
+					public boolean visit(IResourceDelta delta) {
+						if (delta.getKind() != IResourceDelta.CHANGED) return true;
+						if ((delta.getFlags() & IResourceDelta.CONTENT) == 0) return true;
+						IResource resource = delta.getResource();
+						if (resource.getType() == IResource.FILE && "extras".equalsIgnoreCase(resource.getFileExtension())) {
+							changed.add(resource);
+						}
+						return true;
+					}
+				};
+				try {
+					piDelta.accept(visitor);
+				} catch (CoreException e) {}
+				if (changed.size() > 0) {
+					ui.refresh();
+				}
+			}
+		};
+		workspace.addResourceChangeListener(listener);
+	}
+
+	/**
+	 * This is a callback that will allow us
+	 * to create the viewer and initialize it.
+	 */
+	public void createPartControl(Composite parent) {
+		MacGenerator gen = new MacGenerator();
+		gen.setOutputDir(root.getLocation().toPortableString());
+		gen.setMainClass(mainClassName);
+		ui = new MacGeneratorUI(gen);
+		ui.setActionsVisible(false);
+		ui.open(parent);
+
+		makeActions();
+		contributeToActionBars();
+	}
+
+	private void contributeToActionBars() {
+		IActionBars bars = getViewSite().getActionBars();
+		fillLocalPullDown(bars.getMenuManager());
+		fillLocalToolBar(bars.getToolBarManager());
+	}
+	
+	public void dispose() {
+		IWorkspace workspace = ResourcesPlugin.getWorkspace();
+		workspace.removeResourceChangeListener(listener);
+		super.dispose();
+	}
+
+	private void fillLocalPullDown(IMenuManager manager) {
+		manager.add(generateAction);
+	}
+
+	private void fillLocalToolBar(IToolBarManager manager) {
+		manager.add(generateAction);
+	}
+	
+	void refresh() {
+		try {
+			root.refreshLocal(IResource.DEPTH_INFINITE, null);
+		} catch (CoreException e) {
+//			e.printStackTrace();
+		}
+	}
+	
+	void generate() {
+		if (job != null) return;
+		job = new GenJob();
+		job.schedule();
+	}
+
+	private void makeActions() {
+		generateAction = new Action() {
+			public void run() {
+				generate();
+			}
+		};
+		generateAction.setText("Generate");
+		generateAction.setToolTipText("Generate");
+		generateAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
+			getImageDescriptor(ISharedImages.IMG_ETOOL_SAVE_EDIT));
+	}
+
+	/**
+	 * Passing the focus request to the viewer's control.
+	 */
+	public void setFocus() {
+		ui.setFocus();
+	}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/views/SleakView.java b/bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/views/SleakView.java
new file mode 100644
index 0000000..12e4219
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/views/SleakView.java
@@ -0,0 +1,102 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2009 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.tools.views;
+
+import java.io.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.tools.internal.*;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.internal.UIPlugin;
+import org.eclipse.ui.part.*;
+
+/**
+ * This sample class demonstrates how to plug-in a new
+ * workbench view. The view shows data obtained from the
+ * model. The sample creates a dummy model on the fly,
+ * but a real implementation would connect to the model
+ * available either in this or another plug-in (e.g. the workspace).
+ * The view is connected to the model using a content provider.
+ * <p>
+ * The view uses a label provider to define how model
+ * objects should be presented in the view. Each
+ * view can present the same model objects using
+ * different labels and icons, if needed. Alternatively,
+ * a single label provider can be shared between views
+ * in order to ensure that objects of the same type are
+ * presented in the same way everywhere.
+ * <p>
+ */
+
+public class SleakView extends ViewPart {
+
+	Composite parent = null;
+	Sleak sleak = null;
+
+	/**
+	 * The constructor.
+	 */
+	public SleakView() {
+	}
+
+	/**
+	 * This is a callback that will allow us
+	 * to create the viewer and initialize it.
+	 */
+	public void createPartControl(Composite parent) {
+		this.parent = new Composite(parent, SWT.NONE);
+		sleak = new Sleak ();
+		sleak.create(this.parent);
+	}
+
+	/**
+	 * Passing the focus request to the viewer's control.
+	 */
+	public void setFocus() {
+		parent.setFocus();
+	}
+	
+	private boolean extractOptions (String fileName) {
+		FileOutputStream os = null;
+		InputStream is = null;
+		File file = new File(fileName);
+		try {
+			if (!file.exists ()) {
+				is = Class.forName("org.eclipse.ui.internal.UIPlugin").getResourceAsStream ("/.options"); //$NON-NLS-1$
+				if (is != null) {
+					int read;
+					byte [] buffer = new byte [4096];
+					os = new FileOutputStream (fileName);
+					while ((read = is.read (buffer)) != -1) {
+						os.write(buffer, 0, read);
+					}
+					os.close ();
+					is.close ();
+				}
+			}
+			return true;
+		} catch (Throwable e) {
+		} finally {
+			try {
+				if (os != null)
+					os.close();
+			} catch (IOException e1) {
+			}
+			try {
+				if (is != null)
+					is.close();
+			} catch (IOException e1) {
+			}
+		}
+		return false;
+	}
+
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/views/SpyView.java b/bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/views/SpyView.java
new file mode 100644
index 0000000..f79bbc4
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/src/org/eclipse/swt/tools/views/SpyView.java
@@ -0,0 +1,490 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2009 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.tools.views;
+
+import java.io.*;
+import java.lang.reflect.*;
+
+import org.eclipse.jface.action.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.custom.*;
+import org.eclipse.swt.tools.*;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.ui.*;
+import org.eclipse.ui.part.*;
+
+public class SpyView extends ViewPart {
+	private StyledText output;
+	private Action spyAction;
+	private Listener keyFilter;
+	private Runnable timer;
+	private Control lastControl;
+	private Field field;
+	
+	static final int TIMEOUT = 100;
+
+	/**
+	 * This is a callback that will allow us
+	 * to create the viewer and initialize it.
+	 */
+	public void createPartControl(Composite parent) {
+		output = new StyledText(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.READ_ONLY);
+		
+		keyFilter = new Listener() {
+			public void handleEvent(Event e) {
+				// If this accelerator changes, change the tooltip text
+				if (e.keyCode == '.' && e.stateMask == (SWT.ALT | SWT.SHIFT | SWT.CONTROL)) {
+					if (spyAction.isChecked()) {
+						spyAction.setChecked(false);
+					} else {
+						spyAction.setChecked(true);
+						spyAction.run();
+					}
+					e.type = SWT.None;
+				};
+			}
+		};
+		parent.getDisplay().addFilter(SWT.KeyDown, keyFilter);
+		
+		timer = new Runnable() {
+			public void run() {
+				if (output == null || output.isDisposed() || !spyAction.isChecked()) return;
+				Display display = output.getDisplay();
+				Control control = display.getCursorControl();
+				if (control != lastControl) {
+					StringBuffer text = new StringBuffer();
+					if (control != null) {
+						text.append(control+"@"+getOSHandle(control)+"\n");
+						text.append("\tStyle: "+getStyle(control)+"\n");
+						text.append("\tLayout Data: "+control.getLayoutData()+"\n");
+						text.append("\tBounds: "+control.getBounds()+"\n");
+						text.append("\n");
+						if (control instanceof Composite) {
+							text.append("\nChildren:\n");
+							Control[] children = ((Composite)control).getChildren();
+							for (int i = 0; i < children.length; i++) {
+								text.append("\t"+children[i]+"\n");
+							}
+						}
+						Composite parent = control.getParent();
+						if (parent != null) {
+							text.append("\nPeers:\n");
+							Control[] peers = parent.getChildren();
+							for (int i = 0; i < peers.length; i++) {
+								text.append("\t");
+								if (peers[i] == control) text.append("*");
+								text.append(peers[i]+"@"+getOSHandle(peers[i]));
+								text.append(" Layout Data: "+peers[i].getLayoutData());
+								text.append(" Bounds: "+peers[i].getBounds());
+								text.append("\n");
+							}
+							text.append("\nParent Tree:\n");
+							Composite[] parents = new Composite[0];
+							while (parent != null) {
+								Composite[] newParents = new Composite[parents.length + 1];
+								System.arraycopy(parents, 0, newParents, 0, parents.length);
+								newParents[parents.length] = parent;
+								parents = newParents;
+								parent = parent.getParent();
+							}
+							for (int i = parents.length - 1; i >= 0; i--) {
+								String prefix = "\t";
+								for (int j = 0; j < parents.length - i - 1; j++) {
+									prefix += "\t";
+								}
+								text.append(prefix + parents[i]+"@"+getOSHandle(parents[i])+"\n");
+								text.append(prefix+"\t Style: "+getStyle(parents[i])+"\n");
+								text.append(prefix+"\t Bounds: "+parents[i].getBounds()+"\n");
+								text.append(prefix+"\t Layout: "+parents[i].getLayout()+"\n");
+								text.append(prefix+"\t LayoutData: "+parents[i].getLayoutData()+"\n");
+							}
+						}
+						Error error = (Error)control.getData("StackTrace");
+						if (error != null) {
+							text.append("\nCreation Stack Trace:\n");
+							ByteArrayOutputStream stream = new ByteArrayOutputStream();
+							PrintStream s = new PrintStream(stream);
+							error.printStackTrace(s);
+							text.append(stream.toString());
+						}
+					}
+					output.setText(text.toString());
+				}
+				lastControl = control;
+				display.timerExec(100, this);			
+			}
+		};
+		
+		makeActions();
+		contributeToActionBars();
+	}
+	
+	/**
+	 * Passing the focus request to the viewer's control.
+	 */
+	public void setFocus() {
+		if (output != null & !output.isDisposed()) output.setFocus();
+	}
+	
+	private String getOSHandle(Control control) {
+		if (field == null) {
+			String[] fieldNames = {"handle", "view"};
+			for (int i = 0; i < fieldNames.length; i++) {
+				try {
+					field = control.getClass().getField(fieldNames[i]);
+					if (field != null) break;
+				} catch (Throwable e) {}
+			}
+		}
+		try {
+			return field.get(control).toString();
+		} catch (Throwable e) {}
+		return "";
+	}
+	
+	private void contributeToActionBars() {
+		IActionBars bars = getViewSite().getActionBars();
+		fillLocalPullDown(bars.getMenuManager());
+		fillLocalToolBar(bars.getToolBarManager());
+	}
+	
+	public void dispose() {
+		if (keyFilter != null) {
+			Display.getCurrent().removeFilter(SWT.KeyDown, keyFilter);
+		}
+		super.dispose();
+	}
+
+	private void fillLocalPullDown(IMenuManager manager) {
+		manager.add(spyAction);
+	}
+
+	private void fillLocalToolBar(IToolBarManager manager) {
+		manager.add(spyAction);
+	}
+	
+	private void makeActions() {
+		spyAction = new Action() {
+			public void run() {
+				Display.getCurrent().timerExec(TIMEOUT, timer);
+			}
+		};
+		spyAction.setText("Spy");
+		spyAction.setToolTipText("Toggle Spy (CONTROL+ALT+SHIFT+.)");
+		spyAction.setImageDescriptor(Activator.getImageDescriptor("icons/spy.gif"));
+		spyAction.setChecked(false);
+	}
+	
+	private String getStyle(Widget w) {
+		//MODELESS = 0;
+		//BAR = 1 << 1;
+		//SEPARATOR = 1 << 1;
+		//TOGGLE = 1 << 1;
+		//MULTI = 1 << 1;
+		//INDETERMINATE = 1 << 1;
+		//DBCS = 1 << 1;
+		//ALPHA = 1 << 2;
+		//TOOL = 1 << 2; 
+		//SINGLE = 1 << 2;
+		//ARROW = 1 << 2;
+		//DROP_DOWN = 1 << 2;
+		//SHADOW_IN = 1 << 2;
+		//POP_UP = 1 << 3;
+		//PUSH = 1 << 3;
+		//READ_ONLY = 1 << 3;
+		//SHADOW_OUT = 1 << 3;
+		//NO_TRIM = 1 << 3;
+		//NATIVE = 1 << 3;
+		//RESIZE = 1 << 4;
+		//SHADOW_ETCHED_IN = 1 << 4;
+		//RADIO = 1 << 4;
+		//PHONETIC = 1 << 4;
+		//ROMAN = 1 << 5;
+		//CHECK = 1 << 5;
+		//SHADOW_NONE = 1 << 5;
+		//TITLE = 1 << 5;
+		//DATE = 1 << 5;
+		//CLOSE = 1 << 6;
+		//MENU = CLOSE;
+		//CASCADE = 1 << 6;
+		//WRAP = 1 << 6;
+		//SIMPLE = 1 << 6;
+		//SHADOW_ETCHED_OUT = 1 << 6;
+		//MIN = 1 << 7;
+		//UP = 1 << 7;
+		//TOP = UP;
+		//TIME = 1 << 7;
+		//HORIZONTAL = 1 << 8;
+		//H_SCROLL = 1 << 8;
+		//V_SCROLL = 1 << 9;
+		//VERTICAL = 1 << 9;
+		//MAX = 1 << 10;
+		//DOWN               = 1 << 10;
+		//BOTTOM             = DOWN;
+		//CALENDAR = 1 << 10;
+		//BORDER = 1 << 11;
+		//CLIP_CHILDREN = 1 << 12; 
+		//BALLOON = 1 << 12;
+		//CLIP_SIBLINGS = 1 << 13;
+		//ON_TOP = 1 << 14;
+		//LEAD               = 1 << 14;
+		//LEFT               = LEAD;
+		//PRIMARY_MODAL = 1 << 15;
+		//HIDE_SELECTION = 1 << 15;
+		//SHORT = 1 << 15;
+		//MEDIUM = 1 << 16;
+		//FULL_SELECTION = 1 << 16;
+		//SMOOTH = 1 << 16;
+		//APPLICATION_MODAL = 1 << 16;
+		//SYSTEM_MODAL = 1 << 17;
+		//TRAIL              = 1 << 17;	
+		//RIGHT              = TRAIL;
+		//NO_BACKGROUND = 1 << 18;
+		//NO_FOCUS = 1 << 19;
+		//NO_REDRAW_RESIZE = 1 << 20;
+		//NO_MERGE_PAINTS = 1 << 21;
+		//NO_RADIO_GROUP = 1 << 22;
+		//PASSWORD = 1 << 22;
+		//FLAT = 1 << 23;
+		//EMBEDDED = 1 << 24;
+		//CENTER = 1 << 24;
+		//LEFT_TO_RIGHT = 1 << 25;
+		//RIGHT_TO_LEFT = 1 << 26;
+		//MIRRORED = 1 << 27;
+		//VIRTUAL = 1 << 28;
+		//LONG = 1 << 28;
+		//DOUBLE_BUFFERED = 1 << 29;
+		
+		int style = w.getStyle();
+		String result = "";
+		if (style == SWT.DEFAULT) {
+			return "DEFAULT - bad!";
+		}
+		if ((style & 1 << 1) != 0) {
+			if (w instanceof CTabFolder || w instanceof StyledText || w instanceof List || w instanceof Text || w instanceof Table || w instanceof Tree) {
+				result += "MULTI | ";
+			} else if (w instanceof Menu) {
+				result += "BAR | ";
+			} else if (w instanceof Label || w instanceof MenuItem || w instanceof ToolItem) {
+				result += "SEPARATOR | ";
+			} else if (w instanceof Button) {
+				result += "TOGGLE | ";
+			} else if (w instanceof ProgressBar) {
+				result += "INDETERMINATE | ";
+			} else {
+				result += "BAR or SEPARATOR or TOGGLE or MULTI or INDETERMINATE or DBCS | ";	
+			}
+		}
+		if ((style & 1 << 2) != 0) {
+			if (w instanceof Menu || w instanceof ToolItem || w instanceof CoolItem || w instanceof Combo) {
+				result += "DROP_DOWN | ";
+			} else if (w instanceof Button) {
+				result += "ARROW | ";
+			} else if (w instanceof CTabFolder || w instanceof StyledText || w instanceof List || w instanceof Text || w instanceof Table || w instanceof Tree) {
+				result += "SINGLE | ";
+			} else if (w instanceof Label || w instanceof Group) {
+				result += "SHADOW_IN | ";
+			} else if (w instanceof Decorations) {
+				result += "TOOL | ";
+			} else {
+				result += "ALPHA or TOOL or SINGLE or ARROW or DROP_DOWN or SHADOW_IN | ";
+			}
+		}
+		if ((style & 1 << 3) != 0) {
+			if (w instanceof Menu) {
+				result += "POP_UP | ";
+			} else if (w instanceof Button || w instanceof MenuItem || w instanceof ToolItem) {
+				result += "PUSH | ";
+			} else if (w instanceof Combo || w instanceof Text || w instanceof StyledText) {
+				result += "READ_ONLY | ";
+			} else if (w instanceof Label || w instanceof Group || w instanceof ToolBar) {
+				result += "SHADOW_OUT | ";
+			} else if (w instanceof Decorations) {
+				result += "NO_TRIM | ";	
+			} else {
+				result += "POP_UP or PUSH or READ_ONLY or SHADOW_OUT or NO_TRIM or NATIVE | ";
+			}
+		}
+		if ((style & 1 << 4) != 0) {
+			if (w instanceof Button || w instanceof MenuItem || w instanceof ToolItem) {
+				result += "RADIO | ";
+			} else if (w instanceof Group) {
+				result += "SHADOW_ETCHED_IN | ";
+			} else if (w instanceof Decorations || w instanceof Tracker) {
+				result += "RESIZE | ";
+			} else {
+				result += "RESIZE or SHADOW_ETCHED_IN or RADIO or PHONETIC | ";
+			}
+		}
+		if ((style & 1 << 5) != 0) {
+			if (w instanceof Button || w instanceof MenuItem || w instanceof ToolItem || w instanceof Table || w instanceof Tree) {
+				result += "CHECK | ";
+			} else if (w instanceof Label || w instanceof Group) {
+				result += "SHADOW_NONE | ";
+			} else if (w instanceof Decorations) {
+				result += "TITLE | ";
+			} else if (w instanceof DateTime) {
+				result += "DATE | ";
+			} else {
+				result += "ROMAN or CHECK  or SHADOW_NONE or TITLE | ";
+			}
+		}
+		if ((style & 1 << 6) != 0) {
+			if (w instanceof MenuItem) {
+				result += "CASCADE | ";
+			} else if (w instanceof StyledText || w instanceof Label || w instanceof Text || w instanceof ToolBar) {
+				result += "WRAP | ";
+			} else if (w instanceof Combo) {
+				result += "SIMPLE | ";
+			} else if (w instanceof Group) {
+				result += "SHADOW_ETCHED_OUT | ";
+			} else if (w instanceof Decorations || w instanceof CTabFolder || w instanceof CTabItem) {
+				result += "CLOSE | ";
+			} else {
+				result += "CLOSE or MENU or CASCADE or WRAP or SIMPLE or SHADOW_ETCHED_OUT | ";
+			}
+		}
+		if ((style & 1 << 7) != 0) {
+			if (w instanceof Decorations) {
+				result += "MIN | ";
+			} else if (w instanceof Button || w instanceof Tracker) {
+				result += "UP | ";
+			} else if (w instanceof CTabFolder) {
+				result += "TOP | ";
+			} else if (w instanceof DateTime) {
+				result += "TIME | ";
+			} else {
+				result += "MIN or UP or TOP | ";
+			}
+		}
+		if ((style & 1 << 8) != 0) {
+			result += "HORIZONTAL | ";
+		}
+		if ((style & 1 << 9) != 0) {
+			result += "VERTICAL | ";
+		}
+		if ((style & 1 << 10) != 0) {
+			if (w instanceof Decorations) {
+				result += "MAX | ";
+			} else if (w instanceof Button || w instanceof Tracker) {
+				result += "DOWN | ";
+			} else if (w instanceof CTabFolder) {
+				result += "BOTTOM | ";
+			} else if (w instanceof DateTime) {
+				result += "CALENDAR | ";
+			} else {
+				result += "MAX or DOWN or BOTTOM | ";
+			}
+		}
+		if ((style & 1 << 11) != 0) {
+			result += "BORDER | ";
+		}
+		if ((style & 1 << 12) != 0) {
+			if (w instanceof ToolTip) {
+				result += "BALLOON | ";
+			} else {
+				result += "CLIP_CHILDREN | ";
+			}
+		}
+		if ((style & 1 << 13) != 0) {
+			result += "CLIP_SIBLINGS | ";
+		}
+		if ((style & 1 << 14) != 0) {
+			result += "ON_TOP or LEAD or LEFT | ";
+		}
+		if ((style & 1 << 15) != 0) {
+			if (w instanceof Shell) {
+				result += "PRIMARY_MODAL | ";
+			} else if (w instanceof Table || w instanceof Tree) {
+				result += "HIDE_SELECTION | ";
+			} else if (w instanceof DateTime) {
+				result += "SHORT | ";
+			} else {
+				result += "PRIMARY_MODAL or HIDE_SELECTION | ";
+			}
+		}
+		if ((style & 1 << 16) != 0) {
+			if (w instanceof StyledText || w instanceof Table || w instanceof Tree) {
+				result += "FULL_SELECTION | ";
+			} else if (w instanceof Shell) {
+				result += "APPLICATION_MODAL | ";
+			} else if (w instanceof ProgressBar) {
+				result += "SMOOTH | ";
+			} else if (w instanceof DateTime) {
+				result += "MEDIUM | ";
+			} else {
+				result += "FULL_SELECTION or SMOOTH or APPLICATION_MODAL | ";
+			}
+		}
+		if ((style & 1 << 17) != 0) {
+			if (w instanceof Shell) {
+				result += "SYSTEM_MODAL | ";
+			} else if (w instanceof Button || w instanceof Label || w instanceof TableColumn || w instanceof Tracker || w instanceof ToolBar) {
+				result += "TRAIL | ";
+			} else {
+				result += "SYSTEM_MODAL or TRAIL or RIGHT | ";
+			}
+		}
+		if ((style & 1 << 18) != 0) {
+			result += "NO_BACKGROUND | ";
+		}
+		if ((style & 1 << 19) != 0) {
+			result += "NO_FOCUS | ";
+		}
+		if ((style & 1 << 20) != 0) {
+			result += "NO_REDRAW_RESIZE | ";
+		}
+		if ((style & 1 << 21) != 0) {
+			result += "NO_MERGE_PAINTS | ";
+		}
+		if ((style & 1 << 22) != 0) {
+			if (w instanceof Text) {
+				result += "PASSWORD | ";
+			} else if (w instanceof Composite) {
+				result += "NO_RADIO_GROUP | ";
+			} else {
+				result += "NO_RADIO_GROUP or PASSWORD | ";
+			}
+		}
+		if ((style & 1 << 23) != 0) {
+			result += "FLAT | ";
+		}
+		if ((style & 1 << 24) != 0) {
+			if (w instanceof Button || w instanceof Label || w instanceof TableColumn) {
+				result += "CENTER | ";
+			} else {
+				result += "EMBEDDED or CENTER | ";
+			}
+		}
+		if ((style & 1 << 25) != 0) {
+			result += "LEFT_TO_RIGHT | ";
+		}
+		if ((style & 1 << 26) != 0) {
+			result += "RIGHT_TO_LEFT | ";
+		}
+		if ((style & 1 << 27) != 0) {
+			result += "MIRRORED | ";
+		}
+		if ((style & 1 << 28) != 0) {
+			if (w instanceof DateTime) {
+				result += "LONG | ";
+			} else {
+				result += "VIRTUAL | ";
+			}
+		}
+		if ((style & 1 << 29) != 0) {
+			result += "DOUBLE_BUFFERED | ";
+		}
+		int lastOr = result.lastIndexOf("|");
+		if (lastOr == result.length() - 2 ) result = result.substring(0, result.length() - 2);
+		return result;
+	}
+}
diff --git a/bundles/org.eclipse.swt.tools/templates/jnitemplates.properties b/bundles/org.eclipse.swt.tools/templates/jnitemplates.properties
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/templates/jnitemplates.properties
diff --git a/bundles/org.eclipse.swt.tools/templates/jnitemplates.xml b/bundles/org.eclipse.swt.tools/templates/jnitemplates.xml
new file mode 100644
index 0000000..992f444
--- /dev/null
+++ b/bundles/org.eclipse.swt.tools/templates/jnitemplates.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<templates>
+	<template id="org.eclipse.swt.tools.templates.jniclass" autoinsert="true" context="java" deleted="false" description="" enabled="true" name="jniclass">/** @jniclass flags=${flags:link(no_gen,cpp)} */</template>
+	<template id="org.eclipse.swt.tools.templates.jnifield" autoinsert="true" context="java" deleted="false" description="" enabled="true" name="jnifield">/** @field accessor=${},flags=${flags:link(no_gen,no_wince)} */</template>
+	<template id="org.eclipse.swt.tools.templates.jnimethod" autoinsert="true" context="java" deleted="false" description="" enabled="true" name="jnimethod">/** @method accessor=${},flags=${flags:link(no_gen, address, const, 'const address', dynamic, jni, cast, cpp, 'no_gen cpp', new, 'no_gen new', delete, gcnew, gcobject, setter, getter, adder)} */</template>
+	<template id="org.eclipse.swt.tools.templates.jniparam" autoinsert="true" context="java" deleted="false" description="" enabled="true" name="jniparam">/** @param ${} cast=(${cursor}),flags=${flags:link(no_int,no_out,critical,init,struct,unicode,sentinel,gcobject,'no_in critical','no_out critical')} */</template>
+</templates>
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/.classpath_cocoa b/bundles/org.eclipse.swt/.classpath_cocoa
new file mode 100755
index 0000000..7ffa753
--- /dev/null
+++ b/bundles/org.eclipse.swt/.classpath_cocoa
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/CDC-1.0%Foundation-1.0"/>
+    <classpathentry kind="src" path="Eclipse SWT/cocoa"/>
+    <classpathentry kind="src" path="Eclipse SWT/common"/>
+    <classpathentry kind="src" path="Eclipse SWT/common_j2se"/>
+    <classpathentry kind="src" path="Eclipse SWT/emulated/bidi"/>
+    <classpathentry kind="src" path="Eclipse SWT/emulated/coolbar"/>
+    <classpathentry kind="src" path="Eclipse SWT/emulated/expand"/>
+    <classpathentry kind="src" path="Eclipse SWT/emulated/tooltip"/>
+    <classpathentry kind="src" path="Eclipse SWT PI/common"/>
+    <classpathentry kind="src" path="Eclipse SWT PI/cocoa">
+	    <attributes>
+			<attribute value="org.eclipse.swt.cocoa.macosx" name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY"/>
+		</attributes>
+    </classpathentry>
+    <classpathentry kind="src" path="Eclipse SWT PI/common_j2se"/>
+    <classpathentry kind="src" path="Eclipse SWT Accessibility/common"/>
+    <classpathentry kind="src" path="Eclipse SWT Accessibility/cocoa"/>
+    <classpathentry kind="src" path="Eclipse SWT AWT/common"/>
+    <classpathentry kind="src" path="Eclipse SWT AWT/cocoa"/>
+    <classpathentry kind="src" path="Eclipse SWT Custom Widgets/common"/>
+    <classpathentry kind="src" path="Eclipse SWT Drag and Drop/common"/>
+    <classpathentry kind="src" path="Eclipse SWT Drag and Drop/cocoa"/>
+    <classpathentry kind="src" path="Eclipse SWT Printing/common"/>
+    <classpathentry kind="src" path="Eclipse SWT Printing/cocoa"/>
+    <classpathentry kind="src" path="Eclipse SWT Program/common"/>
+    <classpathentry kind="src" path="Eclipse SWT Program/cocoa"/>
+    <classpathentry kind="src" path="Eclipse SWT Browser/common"/>
+    <classpathentry kind="src" path="Eclipse SWT Browser/cocoa"/>
+    <classpathentry kind="src" path="Eclipse SWT Mozilla/common"/>
+    <classpathentry kind="src" path="Eclipse SWT Mozilla/cocoa"/>
+    <classpathentry kind="src" path="Eclipse SWT OpenGL/cocoa"/>
+    <classpathentry kind="src" path="Eclipse SWT OpenGL/common"/>
+    <classpathentry kind="src" path="Eclipse SWT Theme/emulated"/>
+    <classpathentry kind="lib" path="extra_jars/exceptions.jar"/>
+    <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/bundles/org.eclipse.swt/.classpath_dojo b/bundles/org.eclipse.swt/.classpath_dojo
new file mode 100644
index 0000000..dcf6d5e
--- /dev/null
+++ b/bundles/org.eclipse.swt/.classpath_dojo
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="src" path="Eclipse SWT/common"/>
+	<classpathentry kind="src" path="Eclipse SWT/common_j2se"/>
+	<classpathentry kind="src" path="Eclipse SWT PI/common"/>
+	<classpathentry kind="src" path="Eclipse SWT PI/common_j2me"/>
+	<classpathentry kind="src" path="Eclipse SWT/emulated/bidi"/>
+	<classpathentry kind="src" path="Eclipse SWT/emulated/ime"/>
+	<classpathentry kind="src" path="Eclipse SWT Accessibility/emulated"/>
+	<classpathentry kind="src" path="Eclipse SWT Accessibility/common"/>
+	<classpathentry kind="src" path="Eclipse SWT AWT/emulated"/>
+	<classpathentry kind="src" path="Eclipse SWT AWT/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Custom Widgets/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Drag and Drop/emulated"/>
+	<classpathentry kind="src" path="Eclipse SWT Drag and Drop/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Printing/emulated"/>
+	<classpathentry kind="src" path="Eclipse SWT Printing/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Program/emulated"/>
+	<classpathentry kind="src" path="Eclipse SWT Program/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Browser/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Theme/emulated"/>
+	<classpathentry kind="src" path="Eclipse SWT OpenGL/emulated"/>
+	<classpathentry kind="src" path="Eclipse SWT OpenGL/common"/>
+	<classpathentry kind="src" path="Eclipse SWT/dojo"/>
+	<classpathentry kind="src" path="Eclipse SWT PI/dojo"/>
+	<classpathentry kind="src" path="Eclipse SWT Net/dojo"/>
+	<classpathentry kind="src" path="Eclipse SWT Animation/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Animation/dojo"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/org.eclipse.swt.e4.jcl"/>
+	<classpathentry kind="lib" path="extra_jars/exceptions.jar"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/bundles/org.eclipse.swt/.classpath_flex b/bundles/org.eclipse.swt/.classpath_flex
new file mode 100644
index 0000000..4640d2b
--- /dev/null
+++ b/bundles/org.eclipse.swt/.classpath_flex
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="Eclipse SWT/common"/>
+	<classpathentry kind="src" path="Eclipse SWT PI/common"/>
+	<classpathentry kind="src" path="Eclipse SWT PI/common_j2me"/>
+	<classpathentry kind="src" path="Eclipse SWT/emulated/coolbar"/>
+	<classpathentry kind="src" path="Eclipse SWT/emulated/expand"/>
+	<classpathentry kind="src" path="Eclipse SWT/emulated/bidi"/>
+	<classpathentry kind="src" path="Eclipse SWT/emulated/ime"/>
+	<classpathentry kind="src" path="Eclipse SWT Accessibility/emulated"/>
+	<classpathentry kind="src" path="Eclipse SWT Accessibility/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Custom Widgets/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Drag and Drop/emulated"/>
+	<classpathentry kind="src" path="Eclipse SWT Drag and Drop/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Printing/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Printing/emulated"/>
+	<classpathentry kind="src" path="Eclipse SWT Program/emulated"/>
+	<classpathentry kind="src" path="Eclipse SWT Program/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Browser/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Theme/emulated"/>
+	<classpathentry kind="src" path="Eclipse SWT OpenGL/emulated"/>
+	<classpathentry kind="src" path="Eclipse SWT OpenGL/common"/>
+	<classpathentry kind="src" path="Eclipse SWT/flex"/>
+	<classpathentry kind="src" path="Eclipse SWT PI/flex"/>
+	<classpathentry kind="src" path="Eclipse SWT/common_e4"/>
+	<classpathentry kind="src" path="Eclipse SWT Animation/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Animation/flex"/>
+	<classpathentry kind="src" path="Eclipse SWT Effects/flex"/>
+	<classpathentry kind="src" path="Eclipse SWT Net/flex"/>
+	<classpathentry kind="lib" path="extra_jars/exceptions.jar"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/org.eclipse.swt.e4.jcl"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/bundles/org.eclipse.swt/.classpath_wpf b/bundles/org.eclipse.swt/.classpath_wpf
new file mode 100644
index 0000000..3ecce1f
--- /dev/null
+++ b/bundles/org.eclipse.swt/.classpath_wpf
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/CDC-1.0%Foundation-1.0"/>
+    <classpathentry kind="src" path="Eclipse SWT/wpf"/>
+    <classpathentry kind="src" path="Eclipse SWT/common"/>
+    <classpathentry kind="src" path="Eclipse SWT/common_j2se"/>
+    <classpathentry kind="src" path="Eclipse SWT PI/common"/>
+    <classpathentry kind="src" path="Eclipse SWT PI/wpf">
+	    <attributes>
+			<attribute value="org.eclipse.swt.wpf.win32.x86" name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY"/>
+		</attributes>
+    </classpathentry>
+    <classpathentry kind="src" path="Eclipse SWT PI/wpf_win32"/>
+    <classpathentry kind="src" path="Eclipse SWT PI/common_j2se"/>
+    <classpathentry kind="src" path="Eclipse SWT/emulated/datetime"/>
+	<classpathentry kind="src" path="Eclipse SWT/emulated/bidi"/>
+	<classpathentry kind="src" path="Eclipse SWT/emulated/tooltip"/>
+    <classpathentry kind="src" path="Eclipse SWT/emulated/ime"/>
+    <classpathentry kind="src" path="Eclipse SWT Accessibility/emulated"/>
+    <classpathentry kind="src" path="Eclipse SWT Accessibility/common"/>
+    <classpathentry kind="src" path="Eclipse SWT AWT/emulated"/>
+    <classpathentry kind="src" path="Eclipse SWT AWT/common"/>
+    <classpathentry kind="src" path="Eclipse SWT Drag and Drop/wpf"/>
+    <classpathentry kind="src" path="Eclipse SWT Drag and Drop/common"/>
+    <classpathentry kind="src" path="Eclipse SWT Printing/wpf"/>
+    <classpathentry kind="src" path="Eclipse SWT Printing/common"/>
+    <classpathentry kind="src" path="Eclipse SWT Program/wpf"/>
+    <classpathentry kind="src" path="Eclipse SWT Program/common"/>
+    <classpathentry kind="src" path="Eclipse SWT Custom Widgets/common"/>
+    <classpathentry kind="src" path="Eclipse SWT Browser/common"/>
+    <classpathentry kind="src" path="Eclipse SWT Browser/forms"/>
+    <classpathentry kind="src" path="Eclipse SWT OpenGL/emulated"/>
+    <classpathentry kind="src" path="Eclipse SWT OpenGL/common"/>
+    <classpathentry kind="src" path="Eclipse SWT Theme/emulated"/>
+    <classpathentry kind="src" path="Eclipse SWT Effects/emulated"/>
+    <classpathentry kind="lib" path="extra_jars/exceptions.jar"/>
+    <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/bundles/org.eclipse.swt/.classpath_wpf_e4 b/bundles/org.eclipse.swt/.classpath_wpf_e4
new file mode 100644
index 0000000..9f35602
--- /dev/null
+++ b/bundles/org.eclipse.swt/.classpath_wpf_e4
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/CDC-1.0%Foundation-1.0"/>
+	<classpathentry kind="src" path="Eclipse SWT/wpf"/>
+	<classpathentry kind="src" path="Eclipse SWT/common"/>
+	<classpathentry kind="src" path="Eclipse SWT/common_j2se"/>
+	<classpathentry kind="src" path="Eclipse SWT PI/common"/>
+	<classpathentry kind="src" path="Eclipse SWT PI/wpf">
+		<attributes>
+			<attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="org.eclipse.swt.wpf.win32.x86"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="Eclipse SWT PI/wpf_win32"/>
+	<classpathentry kind="src" path="Eclipse SWT PI/common_j2se"/>
+	<classpathentry kind="src" path="Eclipse SWT/emulated/datetime"/>
+	<classpathentry kind="src" path="Eclipse SWT/emulated/bidi"/>
+	<classpathentry kind="src" path="Eclipse SWT/emulated/tooltip"/>
+	<classpathentry kind="src" path="Eclipse SWT/emulated/ime"/>
+	<classpathentry kind="src" path="Eclipse SWT Accessibility/emulated"/>
+	<classpathentry kind="src" path="Eclipse SWT Accessibility/common"/>
+	<classpathentry kind="src" path="Eclipse SWT AWT/emulated"/>
+	<classpathentry kind="src" path="Eclipse SWT AWT/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Drag and Drop/wpf"/>
+	<classpathentry kind="src" path="Eclipse SWT Drag and Drop/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Printing/wpf"/>
+	<classpathentry kind="src" path="Eclipse SWT Printing/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Program/wpf"/>
+	<classpathentry kind="src" path="Eclipse SWT Program/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Custom Widgets/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Browser/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Browser/forms"/>
+	<classpathentry kind="src" path="Eclipse SWT OpenGL/emulated"/>
+	<classpathentry kind="src" path="Eclipse SWT OpenGL/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Theme/emulated"/>
+	<classpathentry kind="src" path="Eclipse SWT Animation/common"/>
+	<classpathentry kind="src" path="Eclipse SWT Animation/wpf"/>
+	<classpathentry kind="src" path="Eclipse SWT Effects/wpf"/>
+	<classpathentry kind="src" path="Eclipse SWT Net/desktop"/>
+	<classpathentry kind="lib" path="extra_jars/exceptions.jar"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/bundles/org.eclipse.swt/.project_e4 b/bundles/org.eclipse.swt/.project_e4
new file mode 100644
index 0000000..b19c078
--- /dev/null
+++ b/bundles/org.eclipse.swt/.project_e4
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.swt</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.swt.tools.jnibuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.team.cvs.core.cvsnature</nature>
+		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+	</natures>
+	<linkedResources>
+		<link>
+			<name>Eclipse SWT Animation</name>
+			<type>2</type>
+			<locationURI>WORKSPACE/org.eclipse.swt.e4/Eclipse%20SWT%20Animation</locationURI>
+		</link>
+		<link>
+			<name>Eclipse SWT Net</name>
+			<type>2</type>
+			<locationURI>WORKSPACE/org.eclipse.swt.e4/Eclipse%20SWT%20Net</locationURI>
+		</link>
+		<link>
+			<name>Eclipse SWT/common_e4</name>
+			<type>2</type>
+			<locationURI>WORKSPACE/org.eclipse.swt.e4/Eclipse%20SWT/common_e4</locationURI>
+		</link>
+		<link>
+			<name>Eclipse SWT/dojo</name>
+			<type>2</type>
+			<locationURI>WORKSPACE/org.eclipse.swt.e4/Eclipse%20SWT/dojo</locationURI>
+		</link>
+		<link>
+			<name>Eclipse SWT/flex</name>
+			<type>2</type>
+			<locationURI>WORKSPACE/org.eclipse.swt.e4/Eclipse%20SWT/flex</locationURI>
+		</link>
+		<link>
+			<name>Eclipse SWT Effects/flex</name>
+			<type>2</type>
+			<locationURI>WORKSPACE/org.eclipse.swt.e4/Eclipse%20SWT%20Effects/flex</locationURI>
+		</link>
+		<link>
+			<name>Eclipse SWT PI/dojo</name>
+			<type>2</type>
+			<locationURI>WORKSPACE/org.eclipse.swt.e4/Eclipse%20SWT%20PI/dojo</locationURI>
+		</link>
+		<link>
+			<name>Eclipse SWT PI/flex</name>
+			<type>2</type>
+			<locationURI>WORKSPACE/org.eclipse.swt.e4/Eclipse%20SWT%20PI/flex</locationURI>
+		</link>
+	</linkedResources>
+</projectDescription>
diff --git a/bundles/org.eclipse.swt/.settings/.api_filters b/bundles/org.eclipse.swt/.settings/.api_filters
new file mode 100644
index 0000000..83bb5c8
--- /dev/null
+++ b/bundles/org.eclipse.swt/.settings/.api_filters
@@ -0,0 +1,850 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<component id="org.eclipse.swt" version="2">
+<resource path="Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleControlListener.java" type="org.eclipse.swt.accessibility.AccessibleControlListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="AccessibleControlListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleListener.java" type="org.eclipse.swt.accessibility.AccessibleListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="AccessibleListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Accessibility/common/org/eclipse/swt/accessibility/AccessibleTextListener.java" type="org.eclipse.swt.accessibility.AccessibleTextListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="AccessibleTextListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/AuthenticationListener.java" type="org.eclipse.swt.browser.AuthenticationListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="AuthenticationListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/Browser.java" type="org.eclipse.swt.browser.Browser">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.browser.Browser"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/CloseWindowListener.java" type="org.eclipse.swt.browser.CloseWindowListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="CloseWindowListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/LocationListener.java" type="org.eclipse.swt.browser.LocationListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="LocationListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/OpenWindowListener.java" type="org.eclipse.swt.browser.OpenWindowListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="OpenWindowListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/ProgressListener.java" type="org.eclipse.swt.browser.ProgressListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="ProgressListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/StatusTextListener.java" type="org.eclipse.swt.browser.StatusTextListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="StatusTextListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/TitleListener.java" type="org.eclipse.swt.browser.TitleListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="TitleListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Browser/common/org/eclipse/swt/browser/VisibilityWindowListener.java" type="org.eclipse.swt.browser.VisibilityWindowListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="VisibilityWindowListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/BidiSegmentListener.java" type="org.eclipse.swt.custom.BidiSegmentListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="BidiSegmentListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CBanner.java" type="org.eclipse.swt.custom.CBanner">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.custom.CBanner"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CLabel.java" type="org.eclipse.swt.custom.CLabel">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.custom.CLabel"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder.java" type="org.eclipse.swt.custom.CTabFolder">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.custom.CTabFolder"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder2Listener.java" type="org.eclipse.swt.custom.CTabFolder2Listener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="CTabFolder2Listener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolderListener.java" type="org.eclipse.swt.custom.CTabFolderListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="CTabFolderListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabItem.java" type="org.eclipse.swt.custom.CTabItem">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.custom.CTabItem"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CaretListener.java" type="org.eclipse.swt.custom.CaretListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="CaretListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/ExtendedModifyListener.java" type="org.eclipse.swt.custom.ExtendedModifyListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="ExtendedModifyListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/LineBackgroundListener.java" type="org.eclipse.swt.custom.LineBackgroundListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="LineBackgroundListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/LineStyleListener.java" type="org.eclipse.swt.custom.LineStyleListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="LineStyleListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/MovementListener.java" type="org.eclipse.swt.custom.MovementListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="MovementListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/PaintObjectListener.java" type="org.eclipse.swt.custom.PaintObjectListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="PaintObjectListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyleRange.java" type="org.eclipse.swt.custom.StyleRange">
+<filter id="576725006">
+<message_arguments>
+<message_argument value="CloneableCompatibility"/>
+<message_argument value="StyleRange"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java" type="org.eclipse.swt.custom.StyledText">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.custom.StyledText"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/TextChangeListener.java" type="org.eclipse.swt.custom.TextChangeListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="TextChangeListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/VerifyKeyListener.java" type="org.eclipse.swt.custom.VerifyKeyListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="VerifyKeyListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/ViewForm.java" type="org.eclipse.swt.custom.ViewForm">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.custom.ViewForm"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DragSourceListener.java" type="org.eclipse.swt.dnd.DragSourceListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="DragSourceListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DropTargetListener.java" type="org.eclipse.swt.dnd.DropTargetListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="DropTargetListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/Clipboard.java" type="org.eclipse.swt.dnd.Clipboard">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.dnd.Clipboard"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/DragSource.java" type="org.eclipse.swt.dnd.DragSource">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.dnd.DragSource"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/DropTarget.java" type="org.eclipse.swt.dnd.DropTarget">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.dnd.DropTarget"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/OleControlSite.java" type="org.eclipse.swt.ole.win32.OleControlSite">
+<filter id="1227882500">
+<message_arguments>
+<message_argument value="OnUIDeactivate(int)"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT OLE Win32/win32/org/eclipse/swt/ole/win32/Variant.java" type="org.eclipse.swt.ole.win32.Variant">
+<filter id="389242988">
+<message_arguments>
+<message_argument value="org.eclipse.swt.ole.win32.Variant"/>
+<message_argument value="sizeof"/>
+<message_argument value="16"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT Printing/win32/org/eclipse/swt/printing/PrintDialog.java" type="org.eclipse.swt.printing.PrintDialog">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.printing.PrintDialog"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/ArmListener.java" type="org.eclipse.swt.events.ArmListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="ArmListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/ControlListener.java" type="org.eclipse.swt.events.ControlListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="ControlListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/DisposeListener.java" type="org.eclipse.swt.events.DisposeListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="DisposeListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/DragDetectListener.java" type="org.eclipse.swt.events.DragDetectListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="DragDetectListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/ExpandListener.java" type="org.eclipse.swt.events.ExpandListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="ExpandListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/FocusListener.java" type="org.eclipse.swt.events.FocusListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="FocusListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/HelpListener.java" type="org.eclipse.swt.events.HelpListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="HelpListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/KeyListener.java" type="org.eclipse.swt.events.KeyListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="KeyListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/MenuDetectListener.java" type="org.eclipse.swt.events.MenuDetectListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="MenuDetectListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/MenuListener.java" type="org.eclipse.swt.events.MenuListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="MenuListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/ModifyListener.java" type="org.eclipse.swt.events.ModifyListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="ModifyListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/MouseListener.java" type="org.eclipse.swt.events.MouseListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="MouseListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/MouseMoveListener.java" type="org.eclipse.swt.events.MouseMoveListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="MouseMoveListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/MouseTrackListener.java" type="org.eclipse.swt.events.MouseTrackListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="MouseTrackListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/MouseWheelListener.java" type="org.eclipse.swt.events.MouseWheelListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="MouseWheelListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/PaintListener.java" type="org.eclipse.swt.events.PaintListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="PaintListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/SelectionListener.java" type="org.eclipse.swt.events.SelectionListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="SelectionListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/ShellListener.java" type="org.eclipse.swt.events.ShellListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="ShellListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/TraverseListener.java" type="org.eclipse.swt.events.TraverseListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="TraverseListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/TreeListener.java" type="org.eclipse.swt.events.TreeListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="TreeListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/events/VerifyListener.java" type="org.eclipse.swt.events.VerifyListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="VerifyListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/graphics/ImageData.java" type="org.eclipse.swt.graphics.ImageData">
+<filter id="576725006">
+<message_arguments>
+<message_argument value="CloneableCompatibility"/>
+<message_argument value="ImageData"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/graphics/ImageLoaderListener.java" type="org.eclipse.swt.graphics.ImageLoaderListener">
+<filter id="576720909">
+<message_arguments>
+<message_argument value="SWTEventListener"/>
+<message_argument value="ImageLoaderListener"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/graphics/Point.java" type="org.eclipse.swt.graphics.Point">
+<filter id="576725006">
+<message_arguments>
+<message_argument value="SerializableCompatibility"/>
+<message_argument value="Point"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/graphics/RGB.java" type="org.eclipse.swt.graphics.RGB">
+<filter id="576725006">
+<message_arguments>
+<message_argument value="SerializableCompatibility"/>
+<message_argument value="RGB"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/graphics/Rectangle.java" type="org.eclipse.swt.graphics.Rectangle">
+<filter id="576725006">
+<message_arguments>
+<message_argument value="SerializableCompatibility"/>
+<message_argument value="Rectangle"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/common/org/eclipse/swt/widgets/Tray.java" type="org.eclipse.swt.widgets.Tray">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.Tray"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/graphics/GC.java" type="org.eclipse.swt.graphics.GC">
+<filter id="338944126">
+<message_arguments>
+<message_argument value="org.eclipse.swt.graphics.GC"/>
+<message_argument value="getGCData()"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/graphics/GCData.java" type="org.eclipse.swt.graphics.GCData">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.graphics.GCData"/>
+</message_arguments>
+</filter>
+<filter id="338755678">
+<message_arguments>
+<message_argument value="org.eclipse.swt.graphics.GCData"/>
+<message_argument value="hFont"/>
+</message_arguments>
+</filter>
+<filter id="1143996420">
+<message_arguments>
+<message_argument value="org.eclipse.swt.graphics.GCData"/>
+</message_arguments>
+</filter>
+<filter id="1143996420">
+<message_arguments>
+<message_argument value="hGDIFont"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Button.java" type="org.eclipse.swt.widgets.Button">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.Button"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Caret.java" type="org.eclipse.swt.widgets.Caret">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.Caret"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/ColorDialog.java" type="org.eclipse.swt.widgets.ColorDialog">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.ColorDialog"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Combo.java" type="org.eclipse.swt.widgets.Combo">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.Combo"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Control.java" type="org.eclipse.swt.widgets.Control">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.Control"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/CoolBar.java" type="org.eclipse.swt.widgets.CoolBar">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.CoolBar"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/CoolItem.java" type="org.eclipse.swt.widgets.CoolItem">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.CoolItem"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/DateTime.java" type="org.eclipse.swt.widgets.DateTime">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.DateTime"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Decorations.java" type="org.eclipse.swt.widgets.Decorations">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.Decorations"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/DirectoryDialog.java" type="org.eclipse.swt.widgets.DirectoryDialog">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.DirectoryDialog"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java" type="org.eclipse.swt.widgets.Display">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.Display"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/ExpandBar.java" type="org.eclipse.swt.widgets.ExpandBar">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.ExpandBar"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/ExpandItem.java" type="org.eclipse.swt.widgets.ExpandItem">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.ExpandItem"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/FileDialog.java" type="org.eclipse.swt.widgets.FileDialog">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.FileDialog"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/FontDialog.java" type="org.eclipse.swt.widgets.FontDialog">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.FontDialog"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Group.java" type="org.eclipse.swt.widgets.Group">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.Group"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/IME.java" type="org.eclipse.swt.widgets.IME">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.IME"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Label.java" type="org.eclipse.swt.widgets.Label">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.Label"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Link.java" type="org.eclipse.swt.widgets.Link">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.Link"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/List.java" type="org.eclipse.swt.widgets.List">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.List"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Menu.java" type="org.eclipse.swt.widgets.Menu">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.Menu"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/MenuItem.java" type="org.eclipse.swt.widgets.MenuItem">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.MenuItem"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/MessageBox.java" type="org.eclipse.swt.widgets.MessageBox">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.MessageBox"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/ProgressBar.java" type="org.eclipse.swt.widgets.ProgressBar">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.ProgressBar"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Sash.java" type="org.eclipse.swt.widgets.Sash">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.Sash"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Scale.java" type="org.eclipse.swt.widgets.Scale">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.Scale"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/ScrollBar.java" type="org.eclipse.swt.widgets.ScrollBar">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.ScrollBar"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Scrollable.java" type="org.eclipse.swt.widgets.Scrollable">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.Scrollable"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Slider.java" type="org.eclipse.swt.widgets.Slider">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.Slider"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Spinner.java" type="org.eclipse.swt.widgets.Spinner">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.Spinner"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/TabFolder.java" type="org.eclipse.swt.widgets.TabFolder">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.TabFolder"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/TabItem.java" type="org.eclipse.swt.widgets.TabItem">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.TabItem"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Table.java" type="org.eclipse.swt.widgets.Table">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.Table"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/TableColumn.java" type="org.eclipse.swt.widgets.TableColumn">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.TableColumn"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/TableItem.java" type="org.eclipse.swt.widgets.TableItem">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.TableItem"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Text.java" type="org.eclipse.swt.widgets.Text">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.Text"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/ToolBar.java" type="org.eclipse.swt.widgets.ToolBar">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.ToolBar"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/ToolItem.java" type="org.eclipse.swt.widgets.ToolItem">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.ToolItem"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/ToolTip.java" type="org.eclipse.swt.widgets.ToolTip">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.ToolTip"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Tracker.java" type="org.eclipse.swt.widgets.Tracker">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.Tracker"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/TrayItem.java" type="org.eclipse.swt.widgets.TrayItem">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.TrayItem"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/Tree.java" type="org.eclipse.swt.widgets.Tree">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.Tree"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/TreeColumn.java" type="org.eclipse.swt.widgets.TreeColumn">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.TreeColumn"/>
+</message_arguments>
+</filter>
+</resource>
+<resource path="Eclipse SWT/win32/org/eclipse/swt/widgets/TreeItem.java" type="org.eclipse.swt.widgets.TreeItem">
+<filter id="336744520">
+<message_arguments>
+<message_argument value="org.eclipse.swt.widgets.TreeItem"/>
+</message_arguments>
+</filter>
+</resource>
+</component>
diff --git a/bundles/org.eclipse.swt/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.swt/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..d93e94b
--- /dev/null
+++ b/bundles/org.eclipse.swt/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Mon Dec 11 13:38:12 EST 2006
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.3
diff --git a/bundles/org.eclipse.swt/.settings/org.eclipse.pde.api.tools.prefs b/bundles/org.eclipse.swt/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 0000000..1458bb3
--- /dev/null
+++ b/bundles/org.eclipse.swt/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,91 @@
+#Wed May 27 10:10:25 EDT 2009
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Warning
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Ignore
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Error
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Error
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Ignore
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Warning
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Warning
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/bundles/org.eclipse.swt/Eclipse SWT AWT/carbon/org/eclipse/swt/awt/SWT_AWT.java b/bundles/org.eclipse.swt/Eclipse SWT AWT/carbon/org/eclipse/swt/awt/SWT_AWT.java
new file mode 100644
index 0000000..d44c481
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT AWT/carbon/org/eclipse/swt/awt/SWT_AWT.java
@@ -0,0 +1,170 @@
+/*******************************************************************************
+ * 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
+ *     Scott Kovatch - interface to apple.awt.CHIViewEmbeddedFrame
+ *******************************************************************************/
+package org.eclipse.swt.awt;
+
+import java.awt.Canvas;
+import java.awt.EventQueue;
+import java.awt.Frame;
+import java.lang.reflect.Constructor;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * 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 {
+		System.setProperty("apple.awt.usingSWT", "true");
+	}
+
+/**
+ * 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);
+	}
+	final int handle = parent.handle;
+
+	Class clazz = null;
+	try {
+		String className = embeddedFrameClass != null ? embeddedFrameClass : "apple.awt.CHIViewEmbeddedFrame";
+		if (embeddedFrameClass == null) {
+			clazz = Class.forName(className, true, ClassLoader.getSystemClassLoader());
+		} else {
+			clazz = Class.forName(className);
+		}
+	} catch (ClassNotFoundException cne) {
+		SWT.error (SWT.ERROR_NOT_IMPLEMENTED, cne);		
+	} catch (Throwable e) {
+		SWT.error (SWT.ERROR_UNSPECIFIED , e, " [Error while starting AWT]");		
+	}
+
+	Object value = null;
+	Constructor constructor = null;
+	try {
+		constructor = clazz.getConstructor (new Class [] {long.class});
+		value = constructor.newInstance (new Object [] {new Long(handle)});
+	} catch (Throwable e) {
+		SWT.error(SWT.ERROR_NOT_IMPLEMENTED, e);
+	}
+	final Frame frame = (Frame) value;
+	parent.setData(EMBEDDED_FRAME_KEY, frame);
+
+	Listener listener = new Listener() {
+		public void handleEvent(Event e) {
+			switch (e.type) {
+			case SWT.Dispose: {
+				parent.setVisible(false);
+				EventQueue.invokeLater(new Runnable () {
+					public void run () {
+						frame.dispose ();
+					}
+				});
+				break;
+			}
+			}
+		}
+	};
+
+	parent.addListener(SWT.Dispose, listener);
+	
+	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);
+	SWT.error(SWT.ERROR_NOT_IMPLEMENTED);
+	return null;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT AWT/cocoa/library/swt_awt.c b/bundles/org.eclipse.swt/Eclipse SWT AWT/cocoa/library/swt_awt.c
new file mode 100644
index 0000000..1bb23d9
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT AWT/cocoa/library/swt_awt.c
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "jawt_md.h"
+
+#define SWT_AWT_NATIVE(func) Java_org_eclipse_swt_awt_SWT_1AWT_##func
+
+#ifndef NO_getAWTHandle
+JNIEXPORT jintLong JNICALL SWT_AWT_NATIVE(getAWTHandle)
+	(JNIEnv *env, jclass that, jobject canvas)
+{
+	jintLong result = 0;
+	JAWT awt;
+	JAWT_DrawingSurface* ds;
+	JAWT_DrawingSurfaceInfo* dsi;
+	JAWT_MacOSXDrawingSurfaceInfo* dsi_cocoa;
+	jint lock;
+
+	awt.version = JAWT_VERSION_1_4;
+	if (JAWT_GetAWT(env, &awt) != 0) {
+		ds = awt.GetDrawingSurface(env, canvas);
+		if (ds != NULL) {
+			lock = ds->Lock(ds);
+		 	if ((lock & JAWT_LOCK_ERROR) == 0) {
+			 	dsi = ds->GetDrawingSurfaceInfo(ds);
+				dsi_cocoa = (JAWT_MacOSXDrawingSurfaceInfo*)dsi->platformInfo;
+				result = (jintLong)dsi_cocoa->cocoaViewRef;
+				ds->FreeDrawingSurfaceInfo(dsi);
+				ds->Unlock(ds);
+			}
+		}
+		awt.FreeDrawingSurface(ds);
+	}
+	return result;
+}
+#endif
diff --git a/bundles/org.eclipse.swt/Eclipse SWT AWT/cocoa/org/eclipse/swt/awt/SWT_AWT.java b/bundles/org.eclipse.swt/Eclipse SWT AWT/cocoa/org/eclipse/swt/awt/SWT_AWT.java
new file mode 100755
index 0000000..64cab44
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT AWT/cocoa/org/eclipse/swt/awt/SWT_AWT.java
@@ -0,0 +1,239 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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
+ *     Scott Kovatch - interface to apple.awt.CHIViewEmbeddedFrame
+ *******************************************************************************/
+package org.eclipse.swt.awt;
+
+import java.awt.Canvas;
+import java.awt.EventQueue;
+import java.awt.Frame;
+import java.awt.Toolkit;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.internal.Library;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * 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 {
+		System.setProperty("apple.awt.usingSWT", "true");
+	}
+
+	static boolean loaded, swingInitialized;
+
+	static native final int /*long*/ getAWTHandle (Canvas canvas);
+
+	static synchronized void loadLibrary () {
+		if (loaded) return;
+		loaded = true;
+		Toolkit.getDefaultToolkit();
+		/*
+		 * Note that the jawt library is loaded explicitly
+		 * 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);
+	}
+
+	final int /*long*/ handle = parent.view.id;
+
+	Class clazz = null;
+	try {
+		String className = embeddedFrameClass != null ? embeddedFrameClass : "apple.awt.CEmbeddedFrame";
+		if (embeddedFrameClass == null) {
+			clazz = Class.forName(className, true, ClassLoader.getSystemClassLoader());
+		} else {
+			clazz = Class.forName(className);
+		}
+	} catch (ClassNotFoundException cne) {
+		SWT.error (SWT.ERROR_NOT_IMPLEMENTED, cne);		
+	} catch (Throwable e) {
+		SWT.error (SWT.ERROR_UNSPECIFIED , e, " [Error while starting AWT]");		
+	}
+
+	Object value = null;
+	Constructor constructor = null;
+	try {
+		constructor = clazz.getConstructor (new Class [] {long.class});
+		value = constructor.newInstance (new Object [] {new Long(handle)});
+	} catch (Throwable e) {
+		SWT.error(SWT.ERROR_NOT_IMPLEMENTED, e);
+	}
+	final Frame frame = (Frame) value;
+	parent.setData(EMBEDDED_FRAME_KEY, frame);
+
+	Listener listener = new Listener() {
+		public void handleEvent(Event e) {
+			switch (e.type) {
+			case SWT.Dispose: {
+				parent.setVisible(false);
+				EventQueue.invokeLater(new Runnable () {
+					public void run () {
+						frame.dispose ();
+					}
+				});
+				break;
+			}
+			}
+		}
+	};
+
+	parent.addListener(SWT.Dispose, listener);
+
+	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);
+	SWT.error(SWT.ERROR_NOT_IMPLEMENTED);
+	return null;
+
+// TODO: Uncomment this code once Display/Shell related issues are ironed out.
+//		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.cocoa_new (display, handle);
+//		final ComponentListener listener = new ComponentAdapter () {
+//			public void componentResized (ComponentEvent e) {
+//				display.asyncExec (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;
+}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/Accessible.java b/bundles/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/Accessible.java
new file mode 100755
index 0000000..c117dd0
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/Accessible.java
@@ -0,0 +1,1477 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.accessibility;
+
+
+import java.util.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * Instances of this class provide a bridge between application
+ * code and assistive technology clients. Many platforms provide
+ * default accessible behavior for most widgets, and this class
+ * allows that default behavior to be overridden. Applications
+ * can get the default Accessible object for a control by sending
+ * it <code>getAccessible</code>, and then add an accessible listener
+ * to override simple items like the name and help string, or they
+ * can add an accessible control listener to override complex items.
+ * As a rule of thumb, an application would only want to use the
+ * accessible control listener to implement accessibility for a
+ * custom control.
+ * 
+ * @see Control#getAccessible
+ * @see AccessibleListener
+ * @see AccessibleEvent
+ * @see AccessibleControlListener
+ * @see AccessibleControlEvent
+ * @see <a href="http://www.eclipse.org/swt/snippets/#accessibility">Accessibility snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 2.0
+ */
+public class Accessible {
+
+	static NSString[] baseAttributes = { 
+		OS.NSAccessibilityRoleAttribute,
+		OS.NSAccessibilityRoleDescriptionAttribute,
+		OS.NSAccessibilityHelpAttribute,
+		OS.NSAccessibilityFocusedAttribute,
+		OS.NSAccessibilityParentAttribute,
+		OS.NSAccessibilityChildrenAttribute,
+		OS.NSAccessibilityPositionAttribute,
+		OS.NSAccessibilitySizeAttribute,
+		OS.NSAccessibilityWindowAttribute,
+		OS.NSAccessibilityTopLevelUIElementAttribute
+	};
+
+	static NSString[] baseTextAttributes = {
+		OS.NSAccessibilityNumberOfCharactersAttribute,
+		OS.NSAccessibilitySelectedTextAttribute,
+		OS.NSAccessibilitySelectedTextRangeAttribute,
+		OS.NSAccessibilityInsertionPointLineNumberAttribute,
+		OS.NSAccessibilitySelectedTextRangesAttribute,
+		OS.NSAccessibilityVisibleCharacterRangeAttribute,
+		OS.NSAccessibilityValueAttribute,
+	};
+	
+	static NSString[] baseParameterizedAttributes = {
+		OS.NSAccessibilityStringForRangeParameterizedAttribute,
+		OS.NSAccessibilityRangeForLineParameterizedAttribute,
+	};
+	
+
+	NSMutableArray attributeNames = null;
+	NSMutableArray parameterizedAttributeNames = null;
+	NSMutableArray actionNames = null;
+
+	Vector accessibleListeners = new Vector();
+	Vector accessibleControlListeners = new Vector();
+	Vector accessibleTextListeners = new Vector ();
+	Control control;
+
+	Map /*<Integer, SWTAccessibleDelegate>*/ children = new HashMap();
+	
+	/**
+	 * @since 3.5
+	 */
+	protected Accessible() {
+	}
+
+	Accessible(Control control) {
+		this.control = control;
+	}
+	
+	/**
+	 * Invokes platform specific functionality to allocate a new accessible object.
+	 * <p>
+	 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+	 * API for <code>Accessible</code>. It is marked public only so that it
+	 * can be shared within the packages provided by SWT. It is not
+	 * available on all platforms, and should never be called from
+	 * application code.
+	 * </p>
+	 *
+	 * @param control the control to get the accessible object for
+	 * @return the platform specific accessible object
+	 */
+	public static Accessible internal_new_Accessible(Control control) {
+		return new Accessible(control);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will
+	 * be notified when an accessible client asks for certain strings,
+	 * such as name, description, help, or keyboard shortcut. The
+	 * listener is notified by sending it one of the messages defined
+	 * in the <code>AccessibleListener</code> interface.
+	 *
+	 * @param listener the listener that should be notified when the receiver
+	 * is asked for a name, description, help, or keyboard shortcut string
+	 *
+	 * @exception IllegalArgumentException <ul>
+	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 * </ul>
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li>
+	 * </ul>
+	 *
+	 * @see AccessibleListener
+	 * @see #removeAccessibleListener
+	 */
+	public void addAccessibleListener(AccessibleListener listener) {
+		checkWidget();
+		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		accessibleListeners.addElement(listener);
+	}
+	
+	/**
+	 * Adds the listener to the collection of listeners who will
+	 * be notified when an accessible client asks for custom control
+	 * specific information. The listener is notified by sending it
+	 * one of the messages defined in the <code>AccessibleControlListener</code>
+	 * interface.
+	 *
+	 * @param listener the listener that should be notified when the receiver
+	 * is asked for custom control specific information
+	 *
+	 * @exception IllegalArgumentException <ul>
+	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 * </ul>
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li>
+	 * </ul>
+	 *
+	 * @see AccessibleControlListener
+	 * @see #removeAccessibleControlListener
+	 */
+	public void addAccessibleControlListener(AccessibleControlListener listener) {
+		checkWidget();
+		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		accessibleControlListeners.addElement(listener);
+	}
+
+	/**
+	 * Adds the listener to the collection of listeners who will
+	 * be notified when an accessible client asks for custom text control
+	 * specific information. The listener is notified by sending it
+	 * one of the messages defined in the <code>AccessibleTextListener</code>
+	 * interface.
+	 *
+	 * @param listener the listener that should be notified when the receiver
+	 * is asked for custom text control specific information
+	 *
+	 * @exception IllegalArgumentException <ul>
+	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 * </ul>
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li>
+	 * </ul>
+	 *
+	 * @see AccessibleTextListener
+	 * @see #removeAccessibleTextListener
+	 * 
+	 * @since 3.0
+	 */
+	public void addAccessibleTextListener (AccessibleTextListener listener) {
+		checkWidget ();
+		if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+		accessibleTextListeners.addElement (listener);		
+	}
+	
+	public id internal_accessibilityActionDescription(NSString action, int childID) {
+		// TODO No action support for now.
+		return NSString.stringWith("");
+	}
+
+	public NSArray internal_accessibilityActionNames(int childID) {
+		// The supported action list depends on the role played by the control.
+		AccessibleControlEvent event = new AccessibleControlEvent(this);
+		event.childID = childID;
+		event.detail = -1;
+		for (int i = 0; i < accessibleControlListeners.size(); i++) {
+			AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+			listener.getRole(event);
+		}
+
+		// No accessible listener is overriding the role of the control, so let Cocoa return the default set for the control.
+		if (event.detail == -1) {
+			return null;
+		}
+		
+		if ((childID == ACC.CHILDID_SELF) && (actionNames != null)) {
+			return retainedAutoreleased(actionNames);
+		}
+		
+		NSMutableArray returnValue = NSMutableArray.arrayWithCapacity(5);
+		
+		switch (event.detail) {
+		case ACC.ROLE_PUSHBUTTON:
+		case ACC.ROLE_RADIOBUTTON:
+		case ACC.ROLE_CHECKBUTTON:
+		case ACC.ROLE_TABITEM:
+			returnValue.addObject(OS.NSAccessibilityPressAction);
+			break;
+		}
+
+		switch (event.detail) {
+		case ACC.ROLE_COMBOBOX:
+			returnValue.addObject(OS.NSAccessibilityConfirmAction);
+			break;
+		}
+
+
+		if (childID == ACC.CHILDID_SELF) {
+			actionNames = returnValue;
+			actionNames.retain();
+			return retainedAutoreleased(actionNames);
+		} else {
+			// Caller must retain if they want to hold on to it.
+			return returnValue;
+		}
+	}
+
+	public NSArray internal_accessibilityAttributeNames(int childID) {
+		// The supported attribute set depends on the role played by the control.
+		// We may need to add or remove from the base set as needed.
+		AccessibleControlEvent event = new AccessibleControlEvent(this);
+		event.childID = childID;
+		event.detail = -1;
+		for (int i = 0; i < accessibleControlListeners.size(); i++) {
+			AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+			listener.getRole(event);
+		}
+
+		// No accessible listener is overriding the role of the control, so let Cocoa
+		// return the default set for the control.
+		if (event.detail == -1)
+			return null;
+		
+		if ((childID == ACC.CHILDID_SELF) && (attributeNames != null)) {
+			return retainedAutoreleased(attributeNames);
+		}
+		
+		NSMutableArray returnValue = NSMutableArray.arrayWithCapacity(baseAttributes.length);
+
+		/* Add our list of supported attributes to the array.
+		 * Make sure each attribute name is not already in the array before appending.
+		 */
+		for (int i = 0; i < baseAttributes.length; i++) {
+			if (!returnValue.containsObject(baseAttributes[i])) {
+				returnValue.addObject(baseAttributes[i]);
+			}
+		}
+		
+		if (accessibleTextListeners.size() > 0) {
+			for (int i = 0; i < baseTextAttributes.length; i++) {
+				if (!returnValue.containsObject(baseTextAttributes[i])) {
+					returnValue.addObject(baseTextAttributes[i]);
+				}
+			}
+		}
+		
+		// The following are expected to have a value (AXValue)
+		switch (event.detail) {
+		case ACC.ROLE_CHECKBUTTON:
+		case ACC.ROLE_RADIOBUTTON:
+		case ACC.ROLE_LABEL:
+		case ACC.ROLE_TABITEM:
+		case ACC.ROLE_TABFOLDER:
+			returnValue.addObject(OS.NSAccessibilityValueAttribute);
+			break;
+		}
+		
+		// The following are expected to report their enabled status (AXEnabled)
+		switch (event.detail) {
+		case ACC.ROLE_CHECKBUTTON:
+		case ACC.ROLE_RADIOBUTTON:
+		case ACC.ROLE_LABEL:
+		case ACC.ROLE_TABITEM:
+		case ACC.ROLE_PUSHBUTTON:
+		case ACC.ROLE_COMBOBOX:
+			returnValue.addObject(OS.NSAccessibilityEnabledAttribute);
+			break;
+		}
+		
+		// The following are expected to report a title (AXTitle)
+		switch (event.detail) {
+		case ACC.ROLE_CHECKBUTTON:
+		case ACC.ROLE_RADIOBUTTON:
+		case ACC.ROLE_PUSHBUTTON:
+		case ACC.ROLE_TABITEM:
+			returnValue.addObject(OS.NSAccessibilityTitleAttribute);
+			break;
+		}
+			
+		// Accessibility verifier says these attributes must be reported for combo boxes.
+		if (event.detail == ACC.ROLE_COMBOBOX) {
+			returnValue.addObject(OS.NSAccessibilityExpandedAttribute);
+		}
+		
+		// Accessibility verifier says these attributes must be reported for tab folders.
+		if (event.detail == ACC.ROLE_TABFOLDER) {
+			returnValue.addObject(OS.NSAccessibilityContentsAttribute);
+			returnValue.addObject(OS.NSAccessibilityTabsAttribute);
+		}
+
+		/*
+		 * Only report back sub-roles when the SWT role maps to a sub-role.
+		 */
+		if (event.detail != -1) {
+			String osRole = roleToOs(event.detail);
+			
+			if (osRole.indexOf(':') == -1)
+				returnValue.removeObject(OS.NSAccessibilitySubroleAttribute);
+		}
+
+		/*
+		 * Children never return their own children, so remove that attribute.
+		 */
+		if (childID != ACC.CHILDID_SELF) {
+			returnValue.removeObject(OS.NSAccessibilityChildrenAttribute);
+		}
+		
+		if (childID == ACC.CHILDID_SELF) {
+			attributeNames = returnValue;
+			attributeNames.retain();
+			return retainedAutoreleased(attributeNames);
+		} else {
+			// Caller must retain if necessary.
+			return returnValue;
+		}
+	}
+
+	public id internal_accessibilityAttributeValue(NSString attribute, int childID) {
+		if (attribute.isEqualToString(OS.NSAccessibilityRoleAttribute)) return getRoleAttribute(childID);
+		if (attribute.isEqualToString(OS.NSAccessibilitySubroleAttribute)) return getSubroleAttribute(childID);
+		if (attribute.isEqualToString(OS.NSAccessibilityRoleDescriptionAttribute)) return getRoleDescriptionAttribute(childID);
+		if (attribute.isEqualToString(OS.NSAccessibilityExpandedAttribute)) return getExpandedAttribute(childID);
+		if (attribute.isEqualToString(OS.NSAccessibilityHelpAttribute)) return getHelpAttribute(childID);
+		if (attribute.isEqualToString(OS.NSAccessibilityTitleAttribute)) return getTitleAttribute(childID);
+		if (attribute.isEqualToString(OS.NSAccessibilityValueAttribute)) return getValueAttribute(childID);
+		if (attribute.isEqualToString(OS.NSAccessibilityEnabledAttribute)) return getEnabledAttribute(childID);
+		if (attribute.isEqualToString(OS.NSAccessibilityFocusedAttribute)) return getFocusedAttribute(childID);
+		if (attribute.isEqualToString(OS.NSAccessibilityParentAttribute)) return getParentAttribute(childID);
+		if (attribute.isEqualToString(OS.NSAccessibilityChildrenAttribute)) return getChildrenAttribute(childID);
+		if (attribute.isEqualToString(OS.NSAccessibilityContentsAttribute)) return getChildrenAttribute(childID);
+		// FIXME:  There's no specific API just for tabs, which won't include the buttons (if any.)
+		if (attribute.isEqualToString(OS.NSAccessibilityTabsAttribute)) return getTabsAttribute(childID);
+		if (attribute.isEqualToString(OS.NSAccessibilityWindowAttribute)) return getWindowAttribute(childID);
+		if (attribute.isEqualToString(OS.NSAccessibilityTopLevelUIElementAttribute)) return getTopLevelUIElementAttribute(childID);
+		if (attribute.isEqualToString(OS.NSAccessibilityPositionAttribute)) return getPositionAttribute(childID);
+		if (attribute.isEqualToString(OS.NSAccessibilitySizeAttribute)) return getSizeAttribute(childID);
+		if (attribute.isEqualToString(OS.NSAccessibilityDescriptionAttribute)) return getDescriptionAttribute(childID);
+		if (attribute.isEqualToString(OS.NSAccessibilityNumberOfCharactersAttribute)) return getNumberOfCharactersAttribute(childID);
+		if (attribute.isEqualToString(OS.NSAccessibilitySelectedTextAttribute)) return getSelectedTextAttribute(childID);
+		if (attribute.isEqualToString(OS.NSAccessibilitySelectedTextRangeAttribute)) return getSelectedTextRangeAttribute(childID);
+		if (attribute.isEqualToString(OS.NSAccessibilityInsertionPointLineNumberAttribute)) return getInsertionPointLineNumberAttribute(childID);
+		if (attribute.isEqualToString(OS.NSAccessibilitySelectedTextRangesAttribute)) return getSelectedTextRangesAttribute(childID);
+		if (attribute.isEqualToString(OS.NSAccessibilityVisibleCharacterRangeAttribute)) return getVisibleCharacterRangeAttribute(childID);
+		
+		// If this object don't know how to get the value it's up to the control itself to return an attribute value.
+		return null;
+	}
+	
+	public id internal_accessibilityAttributeValue_forParameter(NSString attribute, id parameter, int childID) {
+		if (attribute.isEqualToString(OS.NSAccessibilityStringForRangeParameterizedAttribute)) return getStringForRangeAttribute(parameter, childID);
+		if (attribute.isEqualToString(OS.NSAccessibilityRangeForLineParameterizedAttribute)) return getRangeForLineParameterizedAttribute(parameter, childID);		
+		return null;
+	}
+
+	// Returns the UI Element that has the focus. You can assume that the search for the focus has already been narrowed down to the receiver.
+	// Override this method to do a deeper search with a UIElement - e.g. a NSMatrix would determine if one of its cells has the focus.
+	public id internal_accessibilityFocusedUIElement(int childID) {
+		AccessibleControlEvent event = new AccessibleControlEvent(this);
+		event.childID = ACC.CHILDID_MULTIPLE; // set to invalid value, to test if the application sets it in getFocus()
+		event.accessible = null;
+		for (int i = 0; i < accessibleControlListeners.size(); i++) {
+			AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+			listener.getFocus(event);
+		}
+		
+		// The listener did not respond, so let Cocoa figure it out.
+		if (event.childID == ACC.CHILDID_MULTIPLE)
+			return null;
+		
+		/* The application can optionally answer an accessible. */
+		if (event.accessible != null) {
+			return new id(OS.NSAccessibilityUnignoredAncestor(event.accessible.control.view.id));
+		}
+		
+		/* Or the application can answer a valid child ID, including CHILDID_SELF and CHILDID_NONE. */
+		if (event.childID == ACC.CHILDID_SELF || event.childID == ACC.CHILDID_NONE) {
+			return new id(OS.NSAccessibilityUnignoredAncestor(control.view.id));
+		}	
+
+		return new id(OS.NSAccessibilityUnignoredAncestor(childIDToOs(event.childID).id));
+	}
+
+	// Returns the deepest descendant of the UIElement hierarchy that contains the point. 
+	// You can assume the point has already been determined to lie within the receiver.
+	// Override this method to do deeper hit testing within a UIElement - e.g. a NSMatrix would test its cells. The point is bottom-left relative screen coordinates.
+	public id internal_accessibilityHitTest(NSPoint point, int childID) {
+		AccessibleControlEvent event = new AccessibleControlEvent(this);
+		event.x = (int) point.x;
+		Monitor primaryMonitor = Display.getCurrent().getPrimaryMonitor();
+		event.y = (int) (primaryMonitor.getBounds().height - point.y);
+	
+		// Set an impossible value to determine if anything responded to the event.
+		event.childID = ACC.CHILDID_MULTIPLE;
+		for (int i = 0; i < accessibleControlListeners.size(); i++) {
+			AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+			listener.getChildAtPoint(event);
+		}
+		
+		// The listener did not respond, so let Cocoa figure it out.
+		if (event.childID == ACC.CHILDID_MULTIPLE)
+			return null;
+		
+		if (event.accessible != null) {
+			return new id(OS.NSAccessibilityUnignoredAncestor(event.accessible.control.view.id));
+		}
+	
+		if (event.childID == ACC.CHILDID_SELF || event.childID == ACC.CHILDID_NONE) {
+			return new id(OS.NSAccessibilityUnignoredAncestor(control.view.id));
+		}
+	
+		return new id(OS.NSAccessibilityUnignoredAncestor(childIDToOs(event.childID).id));
+	}
+
+	// Return YES if the UIElement doesn't show up to the outside world - i.e. its parent should return the UIElement's children as its own - cutting the UIElement out. E.g. NSControls are ignored when they are single-celled.
+	public boolean internal_accessibilityIsIgnored(int childID) {
+		return false;
+	}
+
+	// parameterized attribute methods
+	public NSArray internal_accessibilityParameterizedAttributeNames(int childID) {
+
+		if ((childID == ACC.CHILDID_SELF) && (parameterizedAttributeNames != null)) {
+			return retainedAutoreleased(parameterizedAttributeNames);
+		}
+
+		NSMutableArray returnValue = NSMutableArray.arrayWithCapacity(4);
+
+		if (accessibleTextListeners.size() > 0) {
+			for (int i = 0; i < baseParameterizedAttributes.length; i++) {
+				if (!returnValue.containsObject(baseParameterizedAttributes[i])) {
+					returnValue.addObject(baseParameterizedAttributes[i]);
+				}
+			}
+
+		}
+
+		if (childID == ACC.CHILDID_SELF) {
+			parameterizedAttributeNames = returnValue;
+			parameterizedAttributeNames.retain();
+			return retainedAutoreleased(parameterizedAttributeNames);
+		} else {
+			// Caller must retain if they want to keep it.
+			return returnValue;
+		}
+	}
+
+	public void internal_accessibilityPerformAction(NSString action, int childID) {
+		// TODO Auto-generated method stub
+		// No action support for now.
+	}
+
+	/**
+	 * Returns the control for this Accessible object. 
+	 *
+	 * @return the receiver's control
+	 * @since 3.0
+	 */
+	public Control getControl() {
+		return control;
+	}
+
+	/**
+	 * Invokes platform specific functionality to dispose an accessible object.
+	 * <p>
+	 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+	 * API for <code>Accessible</code>. It is marked public only so that it
+	 * can be shared within the packages provided by SWT. It is not
+	 * available on all platforms, and should never be called from
+	 * application code.
+	 * </p>
+	 */
+	public void internal_dispose_Accessible() {
+		if (actionNames != null) actionNames.release();
+		actionNames = null;
+		if (attributeNames != null) attributeNames.release();
+		attributeNames = null;
+		if (parameterizedAttributeNames != null) parameterizedAttributeNames.release();
+		parameterizedAttributeNames = null;
+		
+		Collection delegates = children.values();
+		Iterator iter = delegates.iterator();
+		while (iter.hasNext()) {
+			SWTAccessibleDelegate childDelegate = (SWTAccessibleDelegate)iter.next();
+			childDelegate.internal_dispose_SWTAccessibleDelegate();
+		}
+		
+		children.clear();
+	}
+	
+	id getExpandedAttribute(int childID) {
+		// TODO: May need to expand the API so the combo box state can be reported.
+		return NSNumber.numberWithBool(false);
+	}
+
+	id getHelpAttribute (int childID) {
+		id returnValue = null;
+		AccessibleEvent event = new AccessibleEvent(this);
+		event.childID = childID;
+		for (int i = 0; i < accessibleListeners.size(); i++) {
+			AccessibleListener listener = (AccessibleListener) accessibleListeners.elementAt(i);
+			listener.getHelp(event);
+		}
+		
+		if (event.result != null) {
+			returnValue = NSString.stringWith(event.result);
+		}
+		
+		return returnValue;
+	}
+	
+	NSString getRoleAttribute(int childID) {
+		NSString returnValue = null;
+		AccessibleControlEvent event = new AccessibleControlEvent(this);
+		event.childID = childID;
+		event.detail = -1;
+		for (int i = 0; i < accessibleControlListeners.size(); i++) {
+			AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+			listener.getRole(event);
+		}
+		if (event.detail != -1) {
+			String appRole = roleToOs (event.detail);
+			int index = appRole.indexOf(':');
+			if (index != -1) appRole = appRole.substring(0, index);
+			returnValue = NSString.stringWith(appRole);
+		}
+
+		return returnValue;
+	}
+	
+	id getSubroleAttribute (int childID) {
+		id returnValue = null;
+		AccessibleControlEvent event = new AccessibleControlEvent(this);
+		event.childID = childID;
+		event.detail = -1;
+		for (int i = 0; i < accessibleControlListeners.size(); i++) {
+			AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+			listener.getRole(event);
+		}
+		if (event.detail != -1) {
+			String appRole = roleToOs (event.detail);
+			int index = appRole.indexOf(':');
+			if (index != -1) {
+				appRole = appRole.substring(index + 1);
+				returnValue = NSString.stringWith(appRole);
+			}
+		}
+		return returnValue;
+	}
+	
+	id getRoleDescriptionAttribute (int childID) {
+		id returnValue = null;
+		AccessibleControlEvent event = new AccessibleControlEvent(this);
+		event.childID = childID;
+		event.detail = -1;
+		for (int i = 0; i < accessibleControlListeners.size(); i++) {
+			AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+			listener.getRole(event);
+		}
+		if (event.detail != -1) {
+			String appRole = roleToOs (event.detail);
+			String appSubrole = null;
+			int index = appRole.indexOf(':');
+			if (index != -1) {
+				appSubrole = appRole.substring(index + 1);
+				appRole = appRole.substring(0, index);
+			}
+			NSString nsAppRole = NSString.stringWith(appRole);
+			NSString nsAppSubrole = null;
+			
+			if (appSubrole != null) nsAppSubrole = NSString.stringWith(appSubrole);
+			returnValue = new NSString(OS.NSAccessibilityRoleDescription (((nsAppRole != null) ? nsAppRole.id : 0), (nsAppSubrole != null) ? nsAppSubrole.id : 0));
+		}
+		return returnValue;
+	}
+	
+	id getTitleAttribute (int childID) {
+		
+		id returnValue = null;//NSString.stringWith("");
+		
+		/*
+		* Feature of the Macintosh.  The text of a Label is returned in its value,
+		* not its title, so ensure that the role is not Label before asking for the title.
+		*/
+		AccessibleControlEvent roleEvent = new AccessibleControlEvent(this);
+		roleEvent.childID = childID;
+		roleEvent.detail = -1;
+		for (int i = 0; i < accessibleControlListeners.size(); i++) {
+			AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+			listener.getRole(roleEvent);
+		}
+		if (roleEvent.detail != ACC.ROLE_LABEL) {
+			AccessibleEvent event = new AccessibleEvent(this);
+			event.childID = childID;
+			event.result = null;
+			for (int i = 0; i < accessibleListeners.size(); i++) {
+				AccessibleListener listener = (AccessibleListener) accessibleListeners.elementAt(i);
+				listener.getName(event);
+			}
+			
+			if (event.result != null)
+				returnValue = NSString.stringWith(event.result);
+		}
+		return returnValue;
+	}
+	
+	id getValueAttribute (int childID) {
+		id returnValue = null;
+		AccessibleControlEvent event = new AccessibleControlEvent(this);
+		event.childID = childID;
+		event.detail = -1;
+		event.result = null; //TODO: could pass the OS value to the app
+		for (int i = 0; i < accessibleControlListeners.size(); i++) {
+			AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+			listener.getRole(event);
+			listener.getValue(event);
+		}
+		int role = event.detail;
+		String value = event.result;
+
+		switch (role) {
+		case ACC.ROLE_RADIOBUTTON: // 1 = on, 0 = off
+		case ACC.ROLE_CHECKBUTTON: // 1 = checked, 0 = unchecked, 2 = mixed
+		case ACC.ROLE_SCROLLBAR: // numeric value representing the position of the scroller
+		case ACC.ROLE_SLIDER: // the value associated with the position of the slider thumb
+		case ACC.ROLE_PROGRESSBAR: // the value associated with the fill level of the progress bar
+			if (value != null) {
+				try {
+					int number = Integer.parseInt(value);
+					returnValue = NSNumber.numberWithInt(number);
+				} catch (NumberFormatException ex) {
+					if (value.equalsIgnoreCase("true")) {
+						returnValue = NSNumber.numberWithBool(true);
+					} else if (value.equalsIgnoreCase("false")) {
+						returnValue = NSNumber.numberWithBool(false);
+					}
+				}
+			} else {
+				returnValue = NSNumber.numberWithBool(false);
+			}
+			break;
+		case ACC.ROLE_TABFOLDER: // the accessibility object representing the currently selected tab item
+		case ACC.ROLE_TABITEM:  // 1 = selected, 0 = not selected
+			AccessibleControlEvent ace = new AccessibleControlEvent(this);
+			ace.childID = -4;
+			for (int i = 0; i < accessibleControlListeners.size(); i++) {
+				AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+				listener.getSelection(ace);
+			}
+			if (ace.childID >= ACC.CHILDID_SELF) {
+				if (role == ACC.ROLE_TABITEM) {
+			 		returnValue = NSNumber.numberWithBool(ace.childID == childID);
+				} else {
+					returnValue = new id(OS.NSAccessibilityUnignoredAncestor(childIDToOs(ace.childID).id));
+				}
+			} else {
+		 		returnValue = NSNumber.numberWithBool(false);				
+			}
+			break;
+		case ACC.ROLE_COMBOBOX: // text of the currently selected item
+		case ACC.ROLE_TEXT: // text in the text field
+			if (value != null) returnValue = NSString.stringWith(value);
+			break;
+		case ACC.ROLE_LABEL: // text in the label
+			/* On a Mac, the 'value' of a label is the same as the 'name' of the label. */
+			AccessibleEvent e = new AccessibleEvent(this);
+			e.childID = childID;
+			e.result = null;
+			for (int i = 0; i < accessibleListeners.size(); i++) {
+				AccessibleListener listener = (AccessibleListener) accessibleListeners.elementAt(i);
+				listener.getName(e);
+			}
+			if (e.result != null) {
+				returnValue = NSString.stringWith(e.result);
+			} else {
+				if (value != null) returnValue = NSString.stringWith(value);
+			}
+			break;
+		}
+		
+		return returnValue;
+	}
+	
+	id getEnabledAttribute (int childID) {
+		AccessibleControlEvent event = new AccessibleControlEvent(this);
+		event.detail = -1;
+		for (int i = 0; i < accessibleControlListeners.size(); i++) {
+			AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+			listener.getState(event);
+		}
+
+		return NSNumber.numberWithBool(control.isEnabled());
+	}
+	
+	id getFocusedAttribute (int childID) {
+		AccessibleControlEvent event = new AccessibleControlEvent(this);
+		event.childID = ACC.CHILDID_MULTIPLE; // set to invalid value, to test if the application sets it in getFocus()
+		event.accessible = null;
+		for (int i = 0; i < accessibleControlListeners.size(); i++) {
+			AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+			listener.getFocus(event);
+		}
+
+		/* The application can optionally answer an accessible. */
+		// FIXME:
+//		if (event.accessible != null) {
+//			boolean hasFocus = (event.accessible.childID == childID) && (event.accessible.control == this.control);
+//			return NSNumber.numberWithBool(hasFocus);
+//		}
+		
+		/* Or the application can answer a valid child ID, including CHILDID_SELF and CHILDID_NONE. */
+		if (event.childID == ACC.CHILDID_SELF) {
+			boolean hasFocus = (event.childID == childID);
+			return NSNumber.numberWithBool(hasFocus);
+		}
+		if (event.childID == ACC.CHILDID_NONE) {
+			return NSNumber.numberWithBool(false);
+		}
+		if (event.childID != ACC.CHILDID_MULTIPLE) {
+			/* Other valid childID. */
+			return NSNumber.numberWithBool(event.childID == childID);
+		}
+
+		// Invalid childID at this point means the application did not implement getFocus, so 
+		// let the default handler return the native focus.
+		boolean hasFocus = (this.control.view.window().firstResponder() == control.view);
+		return NSNumber.numberWithBool(hasFocus);
+	}
+	
+	id getParentAttribute (int childID) {
+		// Returning null here means 'let Cocoa figure it out.'
+		if (childID == ACC.CHILDID_SELF)
+			return null;
+		else
+			return new id(OS.NSAccessibilityUnignoredAncestor(control.view.id));
+	}
+	
+	id getChildrenAttribute (int childID) {
+		id returnValue = null;
+		if (childID == ACC.CHILDID_SELF) {
+			AccessibleControlEvent event = new AccessibleControlEvent(this);
+			event.childID = childID;
+			event.detail = -1; // set to impossible value to test if app resets
+			for (int i = 0; i < accessibleControlListeners.size(); i++) {
+				AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+				listener.getChildCount(event);
+			}
+			if (event.detail > 0) {
+				for (int i = 0; i < accessibleControlListeners.size(); i++) {
+					AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+					listener.getChildren(event);
+				}
+				Object [] appChildren = event.children;
+				if (appChildren != null && appChildren.length > 0) {
+					/* return an NSArray of NSAccessible objects. */
+					NSMutableArray childArray = NSMutableArray.arrayWithCapacity(appChildren.length);
+
+					for (int i = 0; i < appChildren.length; i++) {
+						Object child = appChildren[i];
+						if (child instanceof Integer) {
+							id accChild = childIDToOs(((Integer)child).intValue());							
+							childArray.addObject(accChild);
+						} else {
+							childArray.addObject(((Accessible)child).control.view);
+						}
+					}
+
+					returnValue = new id(OS.NSAccessibilityUnignoredChildren(childArray.id));
+				}
+			}
+		} else {
+			// Lightweight children have no children of their own.
+			// Don't return null if there are no children -- always return an empty array.
+			returnValue = NSArray.array();
+		}
+
+		// Returning null here means we want the control itself to determine its children. If the accessible listener
+		// implemented getChildCount/getChildren, references to those objects would have been returned above.
+		return returnValue;
+	}
+	
+	id getTabsAttribute (int childID) {
+		id returnValue = null;
+		if (childID == ACC.CHILDID_SELF) {
+			AccessibleControlEvent event = new AccessibleControlEvent(this);
+			event.childID = childID;
+			event.detail = -1; // set to impossible value to test if app resets
+			for (int i = 0; i < accessibleControlListeners.size(); i++) {
+				AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+				listener.getChildCount(event);
+			}
+			if (event.detail > 0) {
+				for (int i = 0; i < accessibleControlListeners.size(); i++) {
+					AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+					listener.getChildren(event);
+				}
+				Object [] appChildren = event.children;
+				if (appChildren != null && appChildren.length > 0) {
+					/* return an NSArray of NSAccessible objects. */
+					NSMutableArray childArray = NSMutableArray.arrayWithCapacity(appChildren.length);
+
+					for (int i = 0; i < appChildren.length; i++) {
+						Object child = appChildren[i];
+						if (child instanceof Integer) {
+							int subChildID = ((Integer)child).intValue();
+							event.childID = subChildID;
+							event.detail = -1;
+							for (int j = 0; j < accessibleControlListeners.size(); j++) {
+								AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(j);
+								listener.getRole(event);
+							}
+							
+							if (event.detail == ACC.ROLE_TABITEM) {
+								id accChild = childIDToOs(((Integer)child).intValue());							
+								childArray.addObject(accChild);
+							}
+						} else {
+							childArray.addObject(((Accessible)child).control.view);
+						}
+					}
+
+					returnValue = new id(OS.NSAccessibilityUnignoredChildren(childArray.id));
+				}
+			}
+		} else {
+			// Lightweight children have no children of their own.
+			// Don't return null if there are no children -- always return an empty array.
+			returnValue = NSArray.array();
+		}
+
+		// Returning null here means we want the control itself to determine its children. If the accessible listener
+		// implemented getChildCount/getChildren, references to those objects would have been returned above.
+		return returnValue;
+	}
+	
+	id getWindowAttribute (int childID) {
+		return control.view.window();
+	}
+	
+	id getTopLevelUIElementAttribute (int childID) {
+		return control.view.window();
+	}
+	
+	id getPositionAttribute (int childID) {
+		id returnValue = null;
+		AccessibleControlEvent event = new AccessibleControlEvent(this);
+		event.childID = childID;
+		event.width = -1;
+		
+		for (int i = 0; i < accessibleControlListeners.size(); i++) {
+			AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+			listener.getLocation(event);
+		}
+
+		Monitor primaryMonitor = Display.getCurrent().getPrimaryMonitor();
+		
+		NSPoint osPositionAttribute = new NSPoint ();
+		if (event.width != -1) {
+			// The point returned is the lower-left coordinate of the widget in lower-left relative screen coordinates.
+			osPositionAttribute.x = event.x;
+			osPositionAttribute.y = primaryMonitor.getBounds().height - event.y - event.height;
+			returnValue = NSValue.valueWithPoint(osPositionAttribute);
+		} else {
+			if (childID != ACC.CHILDID_SELF) {
+				Point pt = null;
+				Rectangle location = control.getBounds();
+
+				if (control.getParent() != null)
+					pt = control.getParent().toDisplay(location.x, location.y);
+				else 
+					pt = ((Shell)control).toDisplay(location.x, location.y);
+
+				osPositionAttribute.x = pt.x;
+				osPositionAttribute.y = pt.y;
+				returnValue = NSValue.valueWithPoint(osPositionAttribute);
+			}
+		}
+		
+		return returnValue;
+	}
+	
+	id getSizeAttribute (int childID) {
+		id returnValue = null;
+		AccessibleControlEvent event = new AccessibleControlEvent(this);
+		event.childID = childID;
+		event.width = -1;
+
+		for (int i = 0; i < accessibleControlListeners.size(); i++) {
+			AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+			listener.getLocation(event);
+		}
+
+		NSSize controlSize = new NSSize ();
+		if (event.width != -1) {
+			controlSize.width = event.width;
+			controlSize.height = event.height;
+			returnValue = NSValue.valueWithSize(controlSize);
+		} else {
+			if (childID != ACC.CHILDID_SELF) {
+				controlSize.width = controlSize.height = 0;
+				returnValue = NSValue.valueWithSize(controlSize);
+			}
+		}
+		
+		return returnValue;
+	}
+	
+	id getDescriptionAttribute (int childID) {
+		AccessibleEvent event = new AccessibleEvent(this);
+		event.childID = childID;
+		event.result = null;
+		id returnValue = null;
+		for (int i = 0; i < accessibleListeners.size(); i++) {
+			AccessibleListener listener = (AccessibleListener) accessibleListeners.elementAt(i);
+			listener.getDescription(event);
+		}
+
+		returnValue = (event.result != null ? NSString.stringWith(event.result) : null);
+
+		// If no description was provided, and this is a composite or canvas, return a blank string
+		// -- otherwise, let the Cocoa control handle it.
+		if (returnValue == null) {
+			if (control instanceof Composite) returnValue = NSString.stringWith("");
+		}
+
+		return returnValue;
+	}
+	
+	id getInsertionPointLineNumberAttribute (int childID) {
+		id returnValue = null;
+		AccessibleControlEvent controlEvent = new AccessibleControlEvent(this);
+		controlEvent.childID = childID;
+		controlEvent.result = null;
+		for (int i = 0; i < accessibleControlListeners.size(); i++) {
+			AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+			listener.getValue(controlEvent);
+		}
+		AccessibleTextEvent textEvent = new AccessibleTextEvent(this);
+		textEvent.childID = childID;
+		textEvent.offset = -1;
+		for (int i = 0; i < accessibleTextListeners.size(); i++) {
+			AccessibleTextListener listener = (AccessibleTextListener) accessibleTextListeners.elementAt(i);
+			listener.getCaretOffset(textEvent);
+		}
+		if (controlEvent.result != null && textEvent.offset != -1) {
+			int lineNumber = lineNumberForOffset (controlEvent.result, textEvent.offset);
+			returnValue = NSNumber.numberWithInt(lineNumber);
+		}
+		return returnValue;
+	}
+	
+	id getNumberOfCharactersAttribute (int childID) {
+		id returnValue = null;
+		AccessibleControlEvent event = new AccessibleControlEvent(this);
+		event.childID = childID;
+		event.result = null;
+		for (int i = 0; i < accessibleControlListeners.size(); i++) {
+			AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+			listener.getValue(event);
+		}
+		String appValue = event.result;
+		if (appValue != null) {
+			returnValue = NSNumber.numberWithInt(appValue.length());
+		}
+		return returnValue;
+	}
+	
+	id getRangeForLineParameterizedAttribute (id parameter, int childID) {
+		id returnValue = null;
+
+		// The parameter is an NSNumber with the line number.
+		NSNumber lineNumberObj = new NSNumber(parameter.id);		
+		int lineNumber = lineNumberObj.intValue();
+		AccessibleControlEvent event = new AccessibleControlEvent(this);
+		event.childID = childID;
+		event.result = null;
+		for (int i = 0; i < accessibleControlListeners.size(); i++) {
+			AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+			listener.getValue(event);
+		}
+		if (event.result != null) {
+			NSRange range = rangeForLineNumber (lineNumber, event.result);
+			if (range.location != -1) {
+				returnValue = NSValue.valueWithRange(range);
+			}
+		}
+		return returnValue;
+	}
+	
+	id getSelectedTextAttribute (int childID) {
+		id returnValue = NSString.stringWith("");
+		AccessibleTextEvent event = new AccessibleTextEvent(this);
+		event.childID = childID;
+		event.offset = -1;
+		event.length = -1;
+		for (int i = 0; i < accessibleTextListeners.size(); i++) {
+			AccessibleTextListener listener = (AccessibleTextListener) accessibleTextListeners.elementAt(i);
+			listener.getSelectionRange(event);
+		}
+		int offset = event.offset;
+		int length = event.length;
+		if (offset != -1 && length != -1 && length != 0) {  // TODO: do we need the && length != 0 ?
+			AccessibleControlEvent event2 = new AccessibleControlEvent(this);
+			event2.childID = event.childID;
+			event2.result = null;
+			for (int i = 0; i < accessibleControlListeners.size(); i++) {
+				AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+				listener.getValue(event2);
+			}
+			String appValue = event2.result;
+			if (appValue != null) {
+				returnValue = NSString.stringWith(appValue.substring(offset, offset + length));
+			}
+		}
+		return returnValue;
+	}
+	
+	id getSelectedTextRangeAttribute (int childID) {
+		id returnValue = null;
+		AccessibleTextEvent event = new AccessibleTextEvent(this);
+		event.childID = childID;
+		event.offset = -1;
+		event.length = 0;
+		for (int i = 0; i < accessibleTextListeners.size(); i++) {
+			AccessibleTextListener listener = (AccessibleTextListener) accessibleTextListeners.elementAt(i);
+			listener.getSelectionRange(event);
+		}
+		if (event.offset != -1) {
+			NSRange range = new NSRange();
+			range.location = event.offset;
+			range.length = event.length;
+			returnValue = NSValue.valueWithRange(range);
+		}
+		return returnValue;
+	}
+	
+	id getStringForRangeAttribute (id parameter, int childID) {
+		id returnValue = null;
+		
+		// Parameter is an NSRange wrapped in an NSValue. 
+		NSValue parameterObject = new NSValue(parameter.id);
+		NSRange range = parameterObject.rangeValue();		
+		AccessibleControlEvent event = new AccessibleControlEvent(this);
+		event.childID = childID;
+		event.result = null;
+		for (int i = 0; i < accessibleControlListeners.size(); i++) {
+			AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+			listener.getValue(event);
+		}
+		String appValue = event.result;
+
+		if (appValue != null) {
+			returnValue = NSString.stringWith(appValue.substring((int)/*64*/range.location, (int)/*64*/(range.location + range.length)));
+		}
+
+		return returnValue;
+	}
+	
+	id getSelectedTextRangesAttribute (int childID) {
+		NSMutableArray returnValue = null; 
+		AccessibleTextEvent event = new AccessibleTextEvent(this);
+		event.childID = childID;
+		event.offset = -1;
+		event.length = 0;
+		
+		for (int i = 0; i < accessibleTextListeners.size(); i++) {
+			AccessibleTextListener listener = (AccessibleTextListener) accessibleTextListeners.elementAt(i);
+			listener.getSelectionRange(event);
+		}
+		
+		if (event.offset != -1) {
+			returnValue = NSMutableArray.arrayWithCapacity(1);
+			NSRange range = new NSRange();
+			range.location = event.offset;
+			range.length = event.length;
+			returnValue.addObject(NSValue.valueWithRange(range));
+		}
+		
+		return returnValue;
+	}
+	
+	id getVisibleCharacterRangeAttribute (int childID) {
+		AccessibleControlEvent event = new AccessibleControlEvent(this);
+		event.childID = childID;
+		event.result = null;
+		for (int i = 0; i < accessibleControlListeners.size(); i++) {
+			AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+			listener.getValue(event);
+		}
+		
+		NSRange range = new NSRange();
+
+		if (event.result != null) {
+			range.location = 0;
+			range.length = event.result.length();
+		} else {
+			return null;
+//			range.location = range.length = 0;
+		}
+
+		return NSValue.valueWithRange(range);
+	}
+
+	int lineNumberForOffset (String text, int offset) {
+		int lineNumber = 1;
+		int length = text.length();
+		for (int i = 0; i < offset; i++) {
+			switch (text.charAt (i)) {
+				case '\r': 
+					if (i + 1 < length) {
+						if (text.charAt (i + 1) == '\n') ++i;
+					}
+					// FALL THROUGH
+				case '\n':
+					lineNumber++;
+			}
+		}
+		return lineNumber;
+	}
+
+	NSRange rangeForLineNumber (int lineNumber, String text) {
+		NSRange range = new NSRange();
+		range.location = -1;
+		int line = 1;
+		int count = 0;
+		int length = text.length ();
+		for (int i = 0; i < length; i++) {
+			if (line == lineNumber) {
+				if (count == 0) {
+					range.location = i;
+				}
+				count++;
+			}
+			if (line > lineNumber) break;
+			switch (text.charAt (i)) {
+				case '\r': 
+					if (i + 1 < length && text.charAt (i + 1) == '\n') i++;
+					// FALL THROUGH
+				case '\n':
+					line++;
+			}
+		}
+		range.length = count;
+		return range;
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will
+	 * be notified when an accessible client asks for certain strings,
+	 * such as name, description, help, or keyboard shortcut.
+	 *
+	 * @param listener the listener that should no longer be notified when the receiver
+	 * is asked for a name, description, help, or keyboard shortcut string
+	 *
+	 * @exception IllegalArgumentException <ul>
+	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 * </ul>
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li>
+	 * </ul>
+	 *
+	 * @see AccessibleListener
+	 * @see #addAccessibleListener
+	 */
+	public void removeAccessibleListener(AccessibleListener listener) {
+		checkWidget();
+		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		accessibleListeners.removeElement(listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will
+	 * be notified when an accessible client asks for custom control
+	 * specific information.
+	 *
+	 * @param listener the listener that should no longer be notified when the receiver
+	 * is asked for custom control specific information
+	 *
+	 * @exception IllegalArgumentException <ul>
+	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 * </ul>
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li>
+	 * </ul>
+	 *
+	 * @see AccessibleControlListener
+	 * @see #addAccessibleControlListener
+	 */
+	public void removeAccessibleControlListener(AccessibleControlListener listener) {
+		checkWidget();
+		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		accessibleControlListeners.removeElement(listener);
+	}
+
+	/**
+	 * Removes the listener from the collection of listeners who will
+	 * be notified when an accessible client asks for custom text control
+	 * specific information.
+	 *
+	 * @param listener the listener that should no longer be notified when the receiver
+	 * is asked for custom text control specific information
+	 *
+	 * @exception IllegalArgumentException <ul>
+	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+	 * </ul>
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li>
+	 * </ul>
+	 *
+	 * @see AccessibleTextListener
+	 * @see #addAccessibleTextListener
+	 * 
+	 * @since 3.0
+	 */
+	public void removeAccessibleTextListener (AccessibleTextListener listener) {
+		checkWidget ();
+		if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+		accessibleTextListeners.removeElement (listener);
+	}
+
+	static NSArray retainedAutoreleased(NSArray inObject) {
+		id temp = inObject.retain();
+		id temp2 = new NSObject(temp.id).autorelease();
+		return new NSArray(temp2.id);
+	}
+	
+	/**
+	 * Sends a message to accessible clients that the child selection
+	 * within a custom container control has changed.
+	 *
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li>
+	 * </ul>
+	 * 
+	 * @since 3.0
+	 */
+	public void selectionChanged () {
+		checkWidget();
+		OS.NSAccessibilityPostNotification(control.view.id, OS.NSAccessibilitySelectedChildrenChangedNotification.id);
+	}
+
+	/**
+	 * Sends a message to accessible clients indicating that the focus
+	 * has changed within a custom control.
+	 *
+	 * @param childID an identifier specifying a child of the control
+	 * 
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li>
+	 * </ul>
+	 */
+	public void setFocus(int childID) {
+		checkWidget();
+		OS.NSAccessibilityPostNotification(control.view.id, OS.NSAccessibilityFocusedUIElementChangedNotification.id);
+	}
+
+	/**
+	 * Sends a message to accessible clients that the text
+	 * caret has moved within a custom control.
+	 *
+	 * @param index the new caret index within the control
+	 * 
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li>
+	 * </ul>
+	 *
+	 * @since 3.0
+	 */
+	public void textCaretMoved (int index) {
+		checkWidget();
+		OS.NSAccessibilityPostNotification(control.view.id, OS.NSAccessibilitySelectedTextChangedNotification.id);
+	}
+	
+	/**
+	 * Sends a message to accessible clients that the text
+	 * within a custom control has changed.
+	 *
+	 * @param type the type of change, one of <code>ACC.NOTIFY_TEXT_INSERT</code>
+	 * or <code>ACC.NOTIFY_TEXT_DELETE</code>
+	 * @param startIndex the text index within the control where the insertion or deletion begins
+	 * @param length the non-negative length in characters of the insertion or deletion
+	 *
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li>
+	 * </ul>
+	 * 
+	 * @see ACC#TEXT_INSERT
+	 * @see ACC#TEXT_DELETE
+	 * 
+	 * @since 3.0
+	 */
+	public void textChanged (int type, int startIndex, int length) {
+		checkWidget();
+		OS.NSAccessibilityPostNotification(control.view.id, OS.NSAccessibilityValueChangedNotification.id);
+	}
+	
+	/**
+	 * Sends a message to accessible clients that the text
+	 * selection has changed within a custom control.
+	 *
+	 * @exception SWTException <ul>
+	 *    <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li>
+	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li>
+	 * </ul>
+	 *
+	 * @since 3.0
+	 */
+	public void textSelectionChanged () {
+		checkWidget();
+		OS.NSAccessibilityPostNotification(control.view.id, OS.NSAccessibilitySelectedTextChangedNotification.id);
+	}
+	
+	id childIDToOs(int childID) {
+		if (childID == ACC.CHILDID_SELF) {
+			return control.view;
+		}
+
+		/* Check cache for childID, if found, return corresponding osChildID. */
+		SWTAccessibleDelegate childRef = (SWTAccessibleDelegate) children.get(new Integer(childID));
+		
+		if (childRef == null) {
+			childRef = new SWTAccessibleDelegate(this, childID);
+			children.put(new Integer(childID), childRef);
+		}
+		
+		return childRef;
+	}
+
+	NSString concatStringsAsRole(NSString str1, NSString str2) {
+		NSString returnValue = str1;
+		returnValue = returnValue.stringByAppendingString(NSString.stringWith(":"));
+		returnValue = returnValue.stringByAppendingString(str2);
+		return returnValue;
+	}	
+	
+	String roleToOs(int role) {
+		NSString nsReturnValue = null; //OS.NSAccessibilityUnknownRole;
+		
+		switch (role) {
+			case ACC.ROLE_CLIENT_AREA: nsReturnValue = OS.NSAccessibilityGroupRole; break;
+			case ACC.ROLE_WINDOW: nsReturnValue = OS.NSAccessibilityWindowRole; break;
+			case ACC.ROLE_MENUBAR: nsReturnValue = OS.NSAccessibilityMenuBarRole; break;
+			case ACC.ROLE_MENU: nsReturnValue = OS.NSAccessibilityMenuRole; break;
+			case ACC.ROLE_MENUITEM: nsReturnValue = OS.NSAccessibilityMenuItemRole; break;
+			case ACC.ROLE_SEPARATOR: nsReturnValue = OS.NSAccessibilitySplitterRole; break;
+			case ACC.ROLE_TOOLTIP: nsReturnValue = OS.NSAccessibilityHelpTagRole; break;
+			case ACC.ROLE_SCROLLBAR: nsReturnValue = OS.NSAccessibilityScrollBarRole; break;
+			case ACC.ROLE_DIALOG: nsReturnValue = concatStringsAsRole(OS.NSAccessibilityWindowRole, OS.NSAccessibilityDialogSubrole); break;
+			case ACC.ROLE_LABEL: nsReturnValue = OS.NSAccessibilityStaticTextRole; break;
+			case ACC.ROLE_PUSHBUTTON: nsReturnValue = OS.NSAccessibilityButtonRole; break;
+			case ACC.ROLE_CHECKBUTTON: nsReturnValue = OS.NSAccessibilityCheckBoxRole; break;
+			case ACC.ROLE_RADIOBUTTON: nsReturnValue = OS.NSAccessibilityRadioButtonRole; break;
+			case ACC.ROLE_SPLITBUTTON: nsReturnValue = OS.NSAccessibilityMenuButtonRole; break;
+			case ACC.ROLE_COMBOBOX: nsReturnValue = OS.NSAccessibilityComboBoxRole; break;
+			case ACC.ROLE_TEXT: {
+				int style = control.getStyle();
+				
+				if ((style & SWT.MULTI) != 0) {
+					nsReturnValue = OS.NSAccessibilityTextAreaRole;
+				} else {
+					nsReturnValue = OS.NSAccessibilityTextFieldRole;
+				}
+				
+				break;
+			}
+			case ACC.ROLE_TOOLBAR: nsReturnValue = OS.NSAccessibilityToolbarRole; break;
+			case ACC.ROLE_LIST: nsReturnValue = OS.NSAccessibilityOutlineRole; break;
+			case ACC.ROLE_LISTITEM: nsReturnValue = OS.NSAccessibilityStaticTextRole; break;
+			case ACC.ROLE_TABLE: nsReturnValue = OS.NSAccessibilityTableRole; break;
+			case ACC.ROLE_TABLECELL: nsReturnValue = concatStringsAsRole(OS.NSAccessibilityRowRole, OS.NSAccessibilityTableRowSubrole); break;
+			case ACC.ROLE_TABLECOLUMNHEADER: nsReturnValue = OS.NSAccessibilitySortButtonRole; break;
+			case ACC.ROLE_TABLEROWHEADER: nsReturnValue = concatStringsAsRole(OS.NSAccessibilityRowRole, OS.NSAccessibilityTableRowSubrole); break;
+			case ACC.ROLE_TREE: nsReturnValue = OS.NSAccessibilityOutlineRole; break;
+			case ACC.ROLE_TREEITEM: nsReturnValue = concatStringsAsRole(OS.NSAccessibilityOutlineRole, OS.NSAccessibilityOutlineRowSubrole); break;
+			case ACC.ROLE_TABFOLDER: nsReturnValue = OS.NSAccessibilityTabGroupRole; break;
+			case ACC.ROLE_TABITEM: nsReturnValue = OS.NSAccessibilityRadioButtonRole; break;
+			case ACC.ROLE_PROGRESSBAR: nsReturnValue = OS.NSAccessibilityProgressIndicatorRole; break;
+			case ACC.ROLE_SLIDER: nsReturnValue = OS.NSAccessibilitySliderRole; break;
+			case ACC.ROLE_LINK: nsReturnValue = OS.NSAccessibilityLinkRole; break;
+		}
+
+		return nsReturnValue.getString();
+	}
+
+	int osToRole(NSString osRole) {
+		if (osRole == null) return 0;
+		if (osRole.isEqualToString(OS.NSAccessibilityWindowRole)) return ACC.ROLE_WINDOW;
+		if (osRole.isEqualToString(OS.NSAccessibilityMenuBarRole)) return ACC.ROLE_MENUBAR;
+		if (osRole.isEqualToString(OS.NSAccessibilityMenuRole)) return ACC.ROLE_MENU;
+		if (osRole.isEqualToString(OS.NSAccessibilityMenuItemRole)) return ACC.ROLE_MENUITEM;
+		if (osRole.isEqualToString(OS.NSAccessibilitySplitterRole)) return ACC.ROLE_SEPARATOR;
+		if (osRole.isEqualToString(OS.NSAccessibilityHelpTagRole)) return ACC.ROLE_TOOLTIP;
+		if (osRole.isEqualToString(OS.NSAccessibilityScrollBarRole)) return ACC.ROLE_SCROLLBAR;
+		if (osRole.isEqualToString(OS.NSAccessibilityScrollAreaRole)) return ACC.ROLE_LIST;
+		if (osRole.isEqualToString(concatStringsAsRole(OS.NSAccessibilityWindowRole, OS.NSAccessibilityDialogSubrole))) return ACC.ROLE_DIALOG;
+		if (osRole.isEqualToString(concatStringsAsRole(OS.NSAccessibilityWindowRole, OS.NSAccessibilitySystemDialogSubrole))) return ACC.ROLE_DIALOG;
+		if (osRole.isEqualToString(OS.NSAccessibilityStaticTextRole)) return ACC.ROLE_LABEL;
+		if (osRole.isEqualToString(OS.NSAccessibilityButtonRole)) return ACC.ROLE_PUSHBUTTON;
+		if (osRole.isEqualToString(OS.NSAccessibilityCheckBoxRole)) return ACC.ROLE_CHECKBUTTON;
+		if (osRole.isEqualToString(OS.NSAccessibilityRadioButtonRole)) return ACC.ROLE_RADIOBUTTON;
+		if (osRole.isEqualToString(OS.NSAccessibilityMenuButtonRole)) return ACC.ROLE_SPLITBUTTON;
+		if (osRole.isEqualToString(OS.NSAccessibilityComboBoxRole)) return ACC.ROLE_COMBOBOX;
+		if (osRole.isEqualToString(OS.NSAccessibilityTextFieldRole)) return ACC.ROLE_TEXT;
+		if (osRole.isEqualToString(OS.NSAccessibilityTextAreaRole)) return ACC.ROLE_TEXT;
+		if (osRole.isEqualToString(OS.NSAccessibilityToolbarRole)) return ACC.ROLE_TOOLBAR;
+		if (osRole.isEqualToString(OS.NSAccessibilityListRole)) return ACC.ROLE_LIST;
+		if (osRole.isEqualToString(OS.NSAccessibilityTableRole)) return ACC.ROLE_TABLE;
+		if (osRole.isEqualToString(OS.NSAccessibilityColumnRole)) return ACC.ROLE_TABLECOLUMNHEADER;
+		if (osRole.isEqualToString(concatStringsAsRole(OS.NSAccessibilityButtonRole, OS.NSAccessibilitySortButtonRole))) return ACC.ROLE_TABLECOLUMNHEADER;
+		if (osRole.isEqualToString(concatStringsAsRole(OS.NSAccessibilityRowRole, OS.NSAccessibilityTableRowSubrole))) return ACC.ROLE_TABLEROWHEADER;
+		if (osRole.isEqualToString(OS.NSAccessibilityOutlineRole)) return ACC.ROLE_TREE;
+		if (osRole.isEqualToString(concatStringsAsRole(OS.NSAccessibilityOutlineRole, OS.NSAccessibilityOutlineRowSubrole))) return ACC.ROLE_TREEITEM;
+		if (osRole.isEqualToString(OS.NSAccessibilityTabGroupRole)) return ACC.ROLE_TABFOLDER;
+		if (osRole.isEqualToString(OS.NSAccessibilityProgressIndicatorRole)) return ACC.ROLE_PROGRESSBAR;
+		if (osRole.isEqualToString(OS.NSAccessibilitySliderRole)) return ACC.ROLE_SLIDER;
+		if (osRole.isEqualToString(OS.NSAccessibilityLinkRole)) return ACC.ROLE_LINK;
+		return ACC.ROLE_CLIENT_AREA;
+	}
+	
+	/* checkWidget was copied from Widget, and rewritten to work in this package */
+	void checkWidget () {
+		if (!isValidThread ()) SWT.error (SWT.ERROR_THREAD_INVALID_ACCESS);
+		if (control.isDisposed ()) SWT.error (SWT.ERROR_WIDGET_DISPOSED);
+	}
+
+	/* isValidThread was copied from Widget, and rewritten to work in this package */
+	boolean isValidThread () {
+		return control.getDisplay ().getThread () == Thread.currentThread ();
+	}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/SWTAccessibleDelegate.java b/bundles/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/SWTAccessibleDelegate.java
new file mode 100644
index 0000000..e47c729
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/SWTAccessibleDelegate.java
@@ -0,0 +1,266 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.accessibility;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+class SWTAccessibleDelegate extends NSObject {
+
+	/**
+	 * Accessible Key: The string constant for looking up the accessible 
+	 * for a control using <code>getData(String)</code>. When an accessible
+	 * is created for a control, it is stored as a property in the control 
+	 * using <code>setData(String, Object)</code>.
+	 */
+	static final String ACCESSIBLE_KEY = "Accessible"; //$NON-NLS-1$
+	static final byte[] SWT_OBJECT = {'S', 'W', 'T', '_', 'O', 'B', 'J', 'E', 'C', 'T', '\0'};
+
+	static Callback accessible2Args, accessible3Args, accessible4Args;
+	static int /*long*/ proc2Args, proc3Args, proc4Args;
+
+	Accessible accessibleParent;
+	int /*long*/ delegateJniRef;
+	int childID;
+
+	NSArray attributeNames = null;
+	NSArray parameterizedAttributeNames = null;
+	NSArray actionNames = null;
+
+	static {
+		Class clazz = SWTAccessibleDelegate.class;
+
+		accessible2Args = new Callback(clazz, "accessibleProc", 2);
+		proc2Args = accessible2Args.getAddress();
+		if (proc2Args == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+
+		accessible3Args = new Callback(clazz, "accessibleProc", 3);
+		proc3Args = accessible3Args.getAddress();
+		if (proc3Args == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);		
+
+		accessible4Args = new Callback(clazz, "accessibleProc", 4);
+		proc4Args = accessible3Args.getAddress();
+		if (proc4Args == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);		
+
+		// Accessible custom controls need to implement the NSAccessibility protocol. To do that, 
+		// we dynamically add the methods to the control's class that are required 
+		// by NSAccessibility. Then, when external assistive technology services are used, 
+		// those methods get called to provide the needed information.
+
+		String className = "SWTAccessibleDelegate";
+
+		// TODO: These should either move out of Display or be accessible to this class.
+		byte[] types = {'*','\0'};
+		int size = C.PTR_SIZEOF, align = C.PTR_SIZEOF == 4 ? 2 : 3;
+
+		int /*long*/ cls = OS.objc_allocateClassPair(OS.class_NSObject, className, 0);
+		OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+
+		// Add the NSAccessibility overrides
+		OS.class_addMethod(cls, OS.sel_accessibilityActionNames, proc2Args, "@:");
+		OS.class_addMethod(cls, OS.sel_accessibilityAttributeNames, proc2Args, "@:");
+		OS.class_addMethod(cls, OS.sel_accessibilityParameterizedAttributeNames, proc2Args, "@:");
+		OS.class_addMethod(cls, OS.sel_accessibilityIsIgnored, proc2Args, "@:");
+		OS.class_addMethod(cls, OS.sel_accessibilityFocusedUIElement, proc2Args, "@:");
+
+		OS.class_addMethod(cls, OS.sel_accessibilityAttributeValue_, proc3Args, "@:@");
+		OS.class_addMethod(cls, OS.sel_accessibilityHitTest_, proc3Args, "@:{NSPoint}");
+		OS.class_addMethod(cls, OS.sel_accessibilityIsAttributeSettable_, proc3Args, "@:@");
+		OS.class_addMethod(cls, OS.sel_accessibilityActionDescription_, proc3Args, "@:@");
+		OS.class_addMethod(cls, OS.sel_accessibilityPerformAction_, proc3Args, "@:@");
+
+		OS.class_addMethod(cls, OS.sel_accessibilityAttributeValue_forParameter_, proc4Args, "@:@@");
+		OS.class_addMethod(cls, OS.sel_accessibilitySetValue_forAttribute_, proc4Args, "@:@@");
+
+		OS.objc_registerClassPair(cls);
+	}
+
+
+	public SWTAccessibleDelegate(Accessible accessible, int childID) {
+		super(0);
+		this.accessibleParent = accessible;
+		this.childID = childID;
+		alloc().init();
+		delegateJniRef = OS.NewGlobalRef(this);
+		if (delegateJniRef == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+		OS.object_setInstanceVariable(this.id, SWT_OBJECT, delegateJniRef);
+	}
+
+	NSArray accessibilityActionNames() {
+		
+		if (actionNames != null)
+			return retainedAutoreleased(actionNames);
+		
+		actionNames = accessibleParent.internal_accessibilityActionNames(childID);
+		actionNames.retain();
+		return retainedAutoreleased(actionNames);
+	}
+
+	NSArray accessibilityAttributeNames() {
+		
+		if (attributeNames != null)
+			return retainedAutoreleased(attributeNames);
+		
+		attributeNames = accessibleParent.internal_accessibilityAttributeNames(childID);
+		attributeNames.retain();
+		return retainedAutoreleased(attributeNames);
+	}
+
+	id accessibilityAttributeValue(NSString attribute) {
+		return accessibleParent.internal_accessibilityAttributeValue(attribute, childID);
+	}
+	
+	// parameterized attribute methods
+	NSArray accessibilityParameterizedAttributeNames() {
+		
+		if (parameterizedAttributeNames != null)
+			return retainedAutoreleased(parameterizedAttributeNames);
+		
+		parameterizedAttributeNames = accessibleParent.internal_accessibilityParameterizedAttributeNames(childID);
+		parameterizedAttributeNames.retain();
+		return retainedAutoreleased(parameterizedAttributeNames);
+	}
+	
+	id accessibilityAttributeValue_forParameter(NSString attribute, id parameter) {
+		return accessibleParent.internal_accessibilityAttributeValue_forParameter(attribute, parameter, childID);
+	}
+
+	// Return YES if the UIElement doesn't show up to the outside world - i.e. its parent should return the UIElement's children as its own - cutting the UIElement out. E.g. NSControls are ignored when they are single-celled.
+	boolean accessibilityIsIgnored() {
+		return accessibleParent.internal_accessibilityIsIgnored(childID);
+	}
+
+	boolean accessibilityIsAttributeSettable(NSString attribute) {
+		return false;
+	}
+
+	// Returns the deepest descendant of the UIElement hierarchy that contains the point. You can assume the point has already been determined to lie within the receiver. Override this method to do deeper hit testing within a UIElement - e.g. a NSMatrix would test its cells. The point is bottom-left relative screen coordinates.
+	id accessibilityHitTest(NSPoint point) {
+		return accessibleParent.internal_accessibilityHitTest(point, childID);
+	}
+
+	// Returns the UI Element that has the focus. You can assume that the search for the focus has already been narrowed down to the reciever. Override this method to do a deeper search with a UIElement - e.g. a NSMatrix would determine if one of its cells has the focus.
+	id accessibilityFocusedUIElement() {
+		return accessibleParent.internal_accessibilityFocusedUIElement(childID);
+	}
+
+	void accessibilityPerformAction(NSString action) {
+		accessibleParent.internal_accessibilityPerformAction(action, childID);
+	}
+	
+	id accessibilityActionDescription(NSString action) {
+		return accessibleParent.internal_accessibilityActionDescription(action, childID);
+	}
+	
+	
+	void accessibilitySetValue_forAttribute(id value, NSString attribute) {
+	}
+	
+	static NSArray retainedAutoreleased(NSArray inObject) {
+		id temp = inObject.retain();
+		id temp2 = new NSObject(temp.id).autorelease();
+		return new NSArray(temp2.id);
+	}
+	
+	static int /*long*/ accessibleProc(int /*long*/ id, int /*long*/ sel) {
+		SWTAccessibleDelegate swtAcc = getAccessibleDelegate(id);
+		if (swtAcc == null) return 0;
+		
+		if (sel == OS.sel_accessibilityAttributeNames) {
+			NSArray retObject = swtAcc.accessibilityAttributeNames();
+			return (retObject == null ? 0 : retObject.id);
+		} else if (sel == OS.sel_accessibilityActionNames) {
+			NSArray retObject = swtAcc.accessibilityActionNames();
+			return (retObject == null ? 0 : retObject.id);
+		} else if (sel == OS.sel_accessibilityParameterizedAttributeNames) {
+			NSArray retObject = swtAcc.accessibilityParameterizedAttributeNames();
+			return (retObject == null ? 0 : retObject.id);
+		} else if (sel == OS.sel_accessibilityIsIgnored) {
+			boolean retVal = swtAcc.accessibilityIsIgnored();
+			return (retVal ? 1 : 0);
+		} else if (sel == OS.sel_accessibilityFocusedUIElement) {
+			id retObject = swtAcc.accessibilityFocusedUIElement();
+			return (retObject == null ? 0 : retObject.id);
+		}
+
+		return 0;
+	}
+
+	static int /*long*/ accessibleProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+		SWTAccessibleDelegate swtAcc = getAccessibleDelegate(id);
+		if (swtAcc == null) return 0;
+		
+		if (sel == OS.sel_accessibilityAttributeValue_) {
+			NSString attribute = new NSString(arg0);
+			id retObject = swtAcc.accessibilityAttributeValue(attribute);
+			return (retObject == null ? 0 : retObject.id);
+		} else if (sel == OS.sel_accessibilityHitTest_) {
+			NSPoint point= new NSPoint();
+			OS.memmove(point, arg0, NSPoint.sizeof);
+			id retObject = swtAcc.accessibilityHitTest(point);
+			return (retObject == null ? 0 : retObject.id);
+		} else if (sel == OS.sel_accessibilityIsAttributeSettable_) {
+			NSString attribute = new NSString(arg0);
+			return (swtAcc.accessibilityIsAttributeSettable(attribute) ? 1 : 0);
+		} else if (sel == OS.sel_accessibilityActionDescription_) {
+			NSString action = new NSString(arg0);
+			id retObject = swtAcc.accessibilityActionDescription(action);
+			return (retObject == null ? 0 : retObject.id);
+		} else if (sel == OS.sel_accessibilityPerformAction_) {
+			NSString action = new NSString(arg0);
+			swtAcc.accessibilityPerformAction(action);
+		}
+
+		return 0;
+	}
+
+	static int /*long*/ accessibleProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
+		SWTAccessibleDelegate swtAcc = getAccessibleDelegate(id);
+		if (swtAcc == null) return 0;
+		
+		if (sel == OS.sel_accessibilityAttributeValue_forParameter_) {
+			NSString attribute = new NSString(arg0);
+			id parameter = new id(arg1);
+			id retObject = swtAcc.accessibilityAttributeValue_forParameter(attribute, parameter);
+			return (retObject == null ? 0 : retObject.id);
+		} else if (sel == OS.sel_accessibilitySetValue_forAttribute_) {
+			id value = new id(arg0);
+			NSString attribute = new NSString(arg1);
+			swtAcc.accessibilitySetValue_forAttribute(value, attribute);
+		}
+
+		return 0;
+	}
+
+	static SWTAccessibleDelegate getAccessibleDelegate(int /*long*/ id) {
+		if (id == 0) return null;
+		int /*long*/ [] jniRef = new int /*long*/ [1];
+		OS.object_getInstanceVariable(id, SWT_OBJECT, jniRef);
+		if (jniRef[0] == 0) return null;
+		return (SWTAccessibleDelegate)OS.JNIGetObject(jniRef[0]);
+	}
+
+	public void internal_dispose_SWTAccessibleDelegate() {
+		if (actionNames != null) actionNames.release();
+		actionNames = null;
+		if (attributeNames != null) attributeNames.release();
+		attributeNames = null;
+		if (parameterizedAttributeNames != null) parameterizedAttributeNames.release();
+		parameterizedAttributeNames = null;	
+		
+		if (delegateJniRef != 0) OS.DeleteGlobalRef(delegateJniRef);
+		delegateJniRef = 0;
+		OS.object_setInstanceVariable(this.id, SWT_OBJECT, 0);
+	}
+
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/carbon/org/eclipse/swt/browser/Safari.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/carbon/org/eclipse/swt/browser/Safari.java
new file mode 100755
index 0000000..ea1f2fa
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/carbon/org/eclipse/swt/browser/Safari.java
@@ -0,0 +1,2082 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.browser;
+
+import java.util.Enumeration;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.carbon.*;
+import org.eclipse.swt.internal.cocoa.*;
+import org.eclipse.swt.layout.*;
+import org.eclipse.swt.widgets.*;
+
+class Safari extends WebBrowser {
+	
+	/* Objective-C WebView delegate */
+	int delegate;
+	
+	/* Carbon HIView handle */
+	int webViewHandle, webView;
+	int windowBoundsHandler;
+	int preferences;
+	
+	boolean changingLocation, hasNewFocusElement;
+	String lastHoveredLinkURL, lastNavigateURL;
+	String html;
+	int identifier;
+	int resourceCount;
+	int lastMouseMoveX, lastMouseMoveY;
+	String url = ""; //$NON-NLS-1$
+	Point location;
+	Point size;
+	boolean statusBar = true, toolBar = true, ignoreDispose;
+	//TEMPORARY CODE
+//	boolean doit;
+
+	static boolean Initialized;
+	static Callback Callback3, Callback7;
+
+	static final int MIN_SIZE = 16;
+	static final int MAX_PROGRESS = 100;
+	static final String WebElementLinkURLKey = "WebElementLinkURL"; //$NON-NLS-1$
+	static final String AGENT_STRING = "Safari/412.0"; /* Safari version on OSX 10.4 initial release */ //$NON-NLS-1$
+	static final String URI_FROMMEMORY = "file:///"; //$NON-NLS-1$
+	static final String PROTOCOL_FILE = "file://"; //$NON-NLS-1$
+	static final String PROTOCOL_HTTP = "http://"; //$NON-NLS-1$
+	static final String URI_APPLEWEBDATA = "applewebdata://"; //$NON-NLS-1$
+	static final String ABOUT_BLANK = "about:blank"; //$NON-NLS-1$
+	static final String HEADER_SETCOOKIE = "Set-Cookie"; //$NON-NLS-1$
+	static final String ADD_WIDGET_KEY = "org.eclipse.swt.internal.addWidget"; //$NON-NLS-1$
+	static final String BROWSER_WINDOW = "org.eclipse.swt.browser.Browser.Window"; //$NON-NLS-1$
+	static final String SAFARI_EVENTS_FIX_KEY = "org.eclipse.swt.internal.safariEventsFix"; //$NON-NLS-1$
+
+	/* event strings */
+	static final String DOMEVENT_KEYUP = "keyup"; //$NON-NLS-1$
+	static final String DOMEVENT_KEYDOWN = "keydown"; //$NON-NLS-1$
+	static final String DOMEVENT_MOUSEDOWN = "mousedown"; //$NON-NLS-1$
+	static final String DOMEVENT_MOUSEUP = "mouseup"; //$NON-NLS-1$
+	static final String DOMEVENT_MOUSEMOVE = "mousemove"; //$NON-NLS-1$
+	static final String DOMEVENT_MOUSEWHEEL = "mousewheel"; //$NON-NLS-1$
+	static final String DOMEVENT_FOCUSIN = "DOMFocusIn"; //$NON-NLS-1$
+	static final String DOMEVENT_FOCUSOUT = "DOMFocusOut"; //$NON-NLS-1$
+
+	static {
+		NativeClearSessions = new Runnable() {
+			public void run() {
+				int storage = Cocoa.objc_msgSend (Cocoa.C_NSHTTPCookieStorage, Cocoa.S_sharedHTTPCookieStorage);
+				int cookies = Cocoa.objc_msgSend (storage, Cocoa.S_cookies);
+				int count = Cocoa.objc_msgSend (cookies, Cocoa.S_count);
+				for (int i = 0; i < count; i++) {
+					int cookie = Cocoa.objc_msgSend (cookies, Cocoa.S_objectAtIndex, i);
+					boolean isSession = Cocoa.objc_msgSend (cookie, Cocoa.S_isSessionOnly) != 0;
+					if (isSession) {
+						Cocoa.objc_msgSend (storage, Cocoa.S_deleteCookie, cookie);
+					}
+				}
+			}
+		};
+
+		NativeGetCookie = new Runnable () {
+			public void run () {
+				int storage = Cocoa.objc_msgSend (Cocoa.C_NSHTTPCookieStorage, Cocoa.S_sharedHTTPCookieStorage);
+				int length = CookieUrl.length ();
+				char[] buffer = new char[length];
+				CookieUrl.getChars (0, length, buffer, 0);
+				int urlString = OS.CFStringCreateWithCharacters (0, buffer, length);
+				int url = Cocoa.objc_msgSend (Cocoa.C_NSURL, Cocoa.S_URLWithString, urlString);
+				OS.CFRelease (urlString);
+				int cookies = Cocoa.objc_msgSend (storage, Cocoa.S_cookiesForURL, url);
+				int count = Cocoa.objc_msgSend (cookies, Cocoa.S_count);
+				if (count == 0) return;
+
+				length = CookieName.length ();
+				buffer = new char[length];
+				CookieName.getChars (0, length, buffer, 0);
+				int name = OS.CFStringCreateWithCharacters (0, buffer, length);
+				for (int i = 0; i < count; i++) {
+					int current = Cocoa.objc_msgSend (cookies, Cocoa.S_objectAtIndex, i);
+					int currentName = Cocoa.objc_msgSend (current, Cocoa.S_name);
+					if (Cocoa.objc_msgSend (currentName, Cocoa.S_compare, name) == Cocoa.NSOrderedSame) {
+						int value = Cocoa.objc_msgSend (current, Cocoa.S_value);
+						length = OS.CFStringGetLength (value);
+						buffer = new char[length];
+						CFRange range = new CFRange ();
+						range.length = length;
+						OS.CFStringGetCharacters (value, range, buffer);
+						CookieValue = new String (buffer);
+						OS.CFRelease (name);
+						return;
+					}
+				}
+				OS.CFRelease (name);
+			}
+		};
+
+		NativeSetCookie = new Runnable () {
+			public void run () {
+				int length = CookieUrl.length ();
+				char[] buffer = new char[length];
+				CookieUrl.getChars (0, length, buffer, 0);
+				int urlString = OS.CFStringCreateWithCharacters (0, buffer, length);
+				int url = Cocoa.objc_msgSend (Cocoa.C_NSURL, Cocoa.S_URLWithString, urlString);
+				OS.CFRelease (urlString);
+
+				length = CookieValue.length ();
+				buffer = new char[length];
+				CookieValue.getChars (0, length, buffer, 0);
+				int value = OS.CFStringCreateWithCharacters (0, buffer, length);
+				length = HEADER_SETCOOKIE.length ();
+				buffer = new char[length];
+				HEADER_SETCOOKIE.getChars (0, length, buffer, 0);
+				int key = OS.CFStringCreateWithCharacters (0, buffer, length);
+				int headers = Cocoa.objc_msgSend (Cocoa.C_NSMutableDictionary, Cocoa.S_dictionaryWithCapacity, 1);
+				Cocoa.objc_msgSend (headers, Cocoa.S_setValue, value, key);
+				OS.CFRelease (key);
+				OS.CFRelease (value);
+
+				int cookies = Cocoa.objc_msgSend (Cocoa.C_NSHTTPCookie, Cocoa.S_cookiesWithResponseHeaderFields, headers, url);
+				if (Cocoa.objc_msgSend (cookies, Cocoa.S_count) == 0) return;
+				int cookie = Cocoa.objc_msgSend (cookies, Cocoa.S_objectAtIndex, 0);
+				int storage = Cocoa.objc_msgSend (Cocoa.C_NSHTTPCookieStorage, Cocoa.S_sharedHTTPCookieStorage);
+				Cocoa.objc_msgSend (storage, Cocoa.S_setCookie, cookie);
+				CookieResult = true;
+			}
+		};
+	}
+
+public void create (Composite parent, int style) {
+	/*
+	* Note.  Loading the webkit bundle on Jaguar causes a crash.
+	* The workaround is to detect any OS prior to 10.30 and fail
+	* without crashing.
+	*/
+	if (OS.VERSION < 0x1030) {
+		browser.dispose();
+		SWT.error(SWT.ERROR_NO_HANDLES);
+	}
+	
+	/*
+	* Bug in Safari on OSX 10.5 (Leopard) only.  VoiceOver no longer follows focus when
+	* HIWebViewCreate is used to create a WebView.  The VoiceOver cursor (activated by
+	* Control+Alt+arrows) continues to work, but keyboard focus is not tracked.  The fix
+	* is to create the WebView with HICocoaViewCreate (api introduced in OSX 10.5) when
+	* running on OSX 10.5.
+	*/
+	int outControl[] = new int[1];
+	if (OS.VERSION >= 0x1050) {
+		webView = Cocoa.objc_msgSend(Cocoa.objc_msgSend(Cocoa.C_WebView, Cocoa.S_alloc), Cocoa.S_initWithFrame_frameName_groupName, new NSRect(), 0, 0);
+		if (webView != 0) {
+			Cocoa.HICocoaViewCreate(webView, 0, outControl);
+			webViewHandle = outControl[0];
+			Cocoa.objc_msgSend(webView, Cocoa.S_release);
+		}
+	} else {
+		Cocoa.HIWebViewCreate(outControl);
+		webViewHandle = outControl[0];
+		if (webViewHandle != 0) {
+			webView = Cocoa.HIWebViewGetWebView(webViewHandle);
+		}
+	}
+	if (webViewHandle == 0) {
+		browser.dispose();
+		SWT.error(SWT.ERROR_NO_HANDLES);
+	}
+
+	Display display = browser.getDisplay();
+	display.setData(ADD_WIDGET_KEY, new Object[] {new Integer(webViewHandle), browser});
+
+	/*
+	* WebKit's DOM listener api became functional in OSX 10.4.  If OSX 10.4 or 
+	* later is detected then override the default event mechanism to not send key
+	* events and some mouse events so that the browser can send them by listening
+	* to the DOM instead.
+	*/
+	if (!(OS.VERSION < 0x1040)) {
+		browser.setData(SAFARI_EVENTS_FIX_KEY);
+	}
+
+	/*
+	* Bug in Safari.  For some reason, every application must contain
+	* a visible window that has never had a WebView or mouse move events
+	* are not delivered.  This seems to happen after a browser has been
+	* either hidden or disposed in any window.  The fix is to create a
+	* single transparent overlay window that is disposed when the display
+	* is disposed.
+	*/
+	if (display.getData(BROWSER_WINDOW) == null) {
+		Rect bounds = new Rect ();
+		OS.SetRect (bounds, (short) 0, (short) 0, (short) 1, (short) 1);
+		final int[] outWindow = new int[1];
+		OS.CreateNewWindow(OS.kOverlayWindowClass, 0, bounds, outWindow);
+		OS.ShowWindow(outWindow[0]);
+		OS.HIObjectSetAccessibilityIgnored (outWindow[0], true);
+		display.disposeExec(new Runnable() {
+			public void run() {
+				if (outWindow[0] != 0) {
+					OS.DisposeWindow(outWindow[0]);
+				}
+				outWindow[0] = 0;
+			}
+		});
+		display.setData(BROWSER_WINDOW, outWindow);
+	}
+	
+	/*
+	* Bug in Safari. The WebView does not draw properly if it is embedded as
+	* sub view of the browser handle.  The fix is to add the web view to the
+	* window root control and resize it on top of the browser handle.
+	* 
+	* Note that when the browser is reparented, the web view has to
+	* be reparented by hand by hooking kEventControlOwningWindowChanged.
+	*/
+	int window = OS.GetControlOwner(browser.handle);
+	int[] contentView = new int[1];
+	OS.HIViewFindByID(OS.HIViewGetRoot(window), OS.kHIViewWindowContentID(), contentView);
+	OS.HIViewAddSubview(contentView[0], webViewHandle);
+	OS.HIViewChangeFeatures(webViewHandle, OS.kHIViewFeatureIsOpaque, 0);
+
+	/*
+	* Bug in Safari. The WebView does not receive mouse and key events when it is added
+	* to a visible top window.  It is assumed that Safari hooks its own event listener
+	* when the top window emits the kEventWindowShown event. The workaround is to send a
+	* fake kEventWindowShown event to the top window after the WebView has been added
+	* to the HIView (after the top window is visible) to give Safari a chance to hook
+	* events.
+	*/
+	OS.HIViewSetVisible(webViewHandle, true);	
+	if (browser.getShell().isVisible()) {
+		int[] showEvent = new int[1];
+		OS.CreateEvent(0, OS.kEventClassWindow, OS.kEventWindowShown, 0.0, OS.kEventAttributeUserEvent, showEvent);
+		OS.SetEventParameter(showEvent[0], OS.kEventParamDirectObject, OS.typeWindowRef, 4, new int[] {OS.GetControlOwner(browser.handle)});
+		OS.SendEventToEventTarget(showEvent[0], OS.GetWindowEventTarget(window));
+		if (showEvent[0] != 0) OS.ReleaseEvent(showEvent[0]);
+	}
+
+	/*
+	* This code is intentionally commented. Setting a group name is the right thing
+	* to do in order to avoid multiple open window requests. For some reason, Safari
+	* crashes when requested to reopen the same window if that window was previously
+	* closed. This may be because that window was not correctly closed. 
+	*/	
+//	String groupName = "MyDocument"; //$NON-NLS-1$
+//	int length = groupName.length();
+//	char[] buffer = new char[length];
+//	groupName.getChars(0, length, buffer, 0);
+//	int groupNameString = OS.CFStringCreateWithCharacters(0, buffer, length);
+//	// [webView setGroupName:@"MyDocument"];
+//	WebKit.objc_msgSend(webView, WebKit.S_setGroupName, groupNameString);
+//	OS.CFRelease(groupNameString);
+	
+	final int notificationCenter = Cocoa.objc_msgSend(Cocoa.C_NSNotificationCenter, Cocoa.S_defaultCenter);
+
+	Listener listener = new Listener() {
+		public void handleEvent(Event e) {
+			switch (e.type) {
+				case SWT.Dispose: {
+					/* make this handler run after other dispose listeners */
+					if (ignoreDispose) {
+						ignoreDispose = false;
+						break;
+					}
+					ignoreDispose = true;
+					browser.notifyListeners (e.type, e);
+					e.type = SWT.NONE;
+
+					OS.RemoveEventHandler(windowBoundsHandler);
+					windowBoundsHandler = 0;
+
+					e.display.setData(ADD_WIDGET_KEY, new Object[] {new Integer(webViewHandle), null});
+
+					Cocoa.objc_msgSend(webView, Cocoa.S_setFrameLoadDelegate, 0);
+					Cocoa.objc_msgSend(webView, Cocoa.S_setResourceLoadDelegate, 0);
+					Cocoa.objc_msgSend(webView, Cocoa.S_setUIDelegate, 0);
+					Cocoa.objc_msgSend(webView, Cocoa.S_setPolicyDelegate, 0);
+					Cocoa.objc_msgSend(webView, Cocoa.S_setDownloadDelegate, 0);
+					Cocoa.objc_msgSend(notificationCenter, Cocoa.S_removeObserver, delegate);
+					
+					Cocoa.objc_msgSend(delegate, Cocoa.S_release);
+					OS.DisposeControl(webViewHandle);
+					webView = webViewHandle = 0;
+					html = null;
+					lastHoveredLinkURL = lastNavigateURL = null;
+
+					Enumeration elements = functions.elements ();
+					while (elements.hasMoreElements ()) {
+						((BrowserFunction)elements.nextElement ()).dispose (false);
+					}
+					functions = null;
+
+					if (preferences != 0) {
+						Cocoa.objc_msgSend (preferences, Cocoa.S_release);
+					}
+					preferences = 0;
+					break;
+				}
+				case SWT.FocusIn: {
+					hasNewFocusElement = true;
+					OS.SetKeyboardFocus(OS.GetControlOwner(browser.handle), webViewHandle, (short)-1);
+					break;
+				}
+			}
+		}
+	};
+	browser.addListener(SWT.Dispose, listener);
+	browser.addListener(SWT.FocusIn, listener);
+	browser.addListener(SWT.KeyDown, listener); /* needed to make browser traversable */
+	
+	if (Callback3 == null) Callback3 = new Callback(this.getClass(), "eventProc3", 3); //$NON-NLS-1$
+	int callback3Address = Callback3.getAddress();
+	if (callback3Address == 0) SWT.error(SWT.ERROR_NO_MORE_CALLBACKS);
+
+	int[] mask = new int[] {
+		OS.kEventClassKeyboard, OS.kEventRawKeyDown,
+		OS.kEventClassControl, OS.kEventControlDraw,
+		OS.kEventClassControl, OS.kEventControlGetClickActivation,
+		OS.kEventClassControl, OS.kEventControlSetCursor,
+		OS.kEventClassTextInput, OS.kEventTextInputUnicodeForKeyEvent,
+	};
+	OS.InstallEventHandler(OS.GetControlEventTarget(webViewHandle), callback3Address, mask.length / 2, mask, webViewHandle, null);
+	int[] mask1 = new int[] {
+		OS.kEventClassControl, OS.kEventControlBoundsChanged,
+		OS.kEventClassControl, OS.kEventControlVisibilityChanged,
+		OS.kEventClassControl, OS.kEventControlOwningWindowChanged,
+	};
+	OS.InstallEventHandler(OS.GetControlEventTarget(browser.handle), callback3Address, mask1.length / 2, mask1, browser.handle, null);
+	int[] mask2 = new int[] {
+		OS.kEventClassWindow, OS.kEventWindowBoundsChanged,
+	};
+	int[] outRef = new int[1];
+	OS.InstallEventHandler(OS.GetWindowEventTarget(window), callback3Address, mask2.length / 2, mask2, browser.handle, outRef);
+	windowBoundsHandler = outRef[0];
+
+	if (Callback7 == null) Callback7 = new Callback(this.getClass(), "eventProc7", 7); //$NON-NLS-1$
+	int callback7Address = Callback7.getAddress();
+	if (callback7Address == 0) SWT.error(SWT.ERROR_NO_MORE_CALLBACKS);
+	
+	// delegate = [[WebResourceLoadDelegate alloc] init eventProc];
+	delegate = Cocoa.objc_msgSend(Cocoa.C_WebKitDelegate, Cocoa.S_alloc);
+	delegate = Cocoa.objc_msgSend(delegate, Cocoa.S_initWithProc, callback7Address, webViewHandle);
+
+	// [webView setFrameLoadDelegate:delegate];
+	Cocoa.objc_msgSend(webView, Cocoa.S_setFrameLoadDelegate, delegate);
+		
+	// [webView setResourceLoadDelegate:delegate];
+	Cocoa.objc_msgSend(webView, Cocoa.S_setResourceLoadDelegate, delegate);
+
+	// [webView setUIDelegate:delegate];
+	Cocoa.objc_msgSend(webView, Cocoa.S_setUIDelegate, delegate);
+	
+	/* register delegate for all notifications sent out from webview */
+	Cocoa.objc_msgSend(notificationCenter, Cocoa.S_addObserver_selector_name_object, delegate, Cocoa.S_handleNotification, 0, webView);
+	
+	// [webView setPolicyDelegate:delegate];
+	Cocoa.objc_msgSend(webView, Cocoa.S_setPolicyDelegate, delegate);
+
+	// [webView setDownloadDelegate:delegate];
+	Cocoa.objc_msgSend(webView, Cocoa.S_setDownloadDelegate, delegate);
+
+	// [webView setApplicationNameForUserAgent:applicationName];
+	int length = AGENT_STRING.length();
+	char[] chars = new char[length];
+	AGENT_STRING.getChars(0, length, chars, 0);
+	int sHandle = OS.CFStringCreateWithCharacters(0, chars, length);
+	Cocoa.objc_msgSend(webView, Cocoa.S_setApplicationNameForUserAgent, sHandle);
+	OS.CFRelease(sHandle);
+
+	if (OS.VERSION < 0x1050 && display.getActiveShell() == browser.getShell()) {
+		Cocoa.objc_msgSend(Cocoa.objc_msgSend(webView, Cocoa.S_window), Cocoa.S_makeKeyWindow);
+	}
+
+	if (!Initialized) {
+		Initialized = true;
+		/* disable applets */
+		int preferences = Cocoa.objc_msgSend(Cocoa.C_WebPreferences, Cocoa.S_standardPreferences);
+		Cocoa.objc_msgSend(preferences, Cocoa.S_setJavaEnabled, 0);
+	}
+}
+
+static int eventProc3(int nextHandler, int theEvent, int userData) {
+	Widget widget = Display.getCurrent().findWidget(userData);
+	if (widget instanceof Browser) {
+		return ((Safari)((Browser)widget).webBrowser).handleCallback(nextHandler, theEvent);
+	}
+	return OS.eventNotHandledErr;
+}
+
+static int eventProc7(int webview, int userData, int selector, int arg0, int arg1, int arg2, int arg3) {
+	Widget widget = Display.getCurrent().findWidget(userData);
+	if (widget instanceof Browser) {
+		return ((Safari)((Browser)widget).webBrowser).handleCallback(selector, arg0, arg1, arg2, arg3);
+	}
+	return 0;
+}
+
+static String getString (int ptr) {
+	int length = OS.CFStringGetLength (ptr);
+	char[] buffer = new char[length];
+	CFRange range = new CFRange ();
+	range.length = length;
+	OS.CFStringGetCharacters (ptr, range, buffer);
+	return new String (buffer);
+}
+
+public boolean back() {
+	html = null;
+	return Cocoa.objc_msgSend(webView, Cocoa.S_goBack) != 0;
+}
+
+public boolean execute(String script) {
+	int length = script.length();
+	char[] buffer = new char[length];
+	script.getChars(0, length, buffer, 0);
+	int string = OS.CFStringCreateWithCharacters(0, buffer, length);
+
+	int value = Cocoa.objc_msgSend(webView, Cocoa.S_stringByEvaluatingJavaScriptFromString, string);
+	OS.CFRelease(string);
+	return value != 0;
+}
+
+public boolean forward() {
+	html = null;
+	return Cocoa.objc_msgSend(webView, Cocoa.S_goForward) != 0;
+}
+
+public String getBrowserType () {
+	return "safari"; //$NON-NLS-1$
+}
+
+public String getText() {
+	int mainFrame = Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame);
+	int dataSource = Cocoa.objc_msgSend(mainFrame, Cocoa.S_dataSource);
+	if (dataSource == 0) return "";	//$NON-NLS-1$
+	int representation = Cocoa.objc_msgSend(dataSource, Cocoa.S_representation);
+	if (representation == 0) return "";	//$NON-NLS-1$
+	int source = Cocoa.objc_msgSend(representation, Cocoa.S_documentSource);
+	if (source == 0) return "";	//$NON-NLS-1$
+	int length = OS.CFStringGetLength(source);
+	char[] buffer = new char[length];
+	CFRange range = new CFRange();
+	range.length = length;
+	OS.CFStringGetCharacters(source, range, buffer);
+	return new String(buffer);
+}
+
+public String getUrl() {
+	return url;
+}
+
+int handleCallback(int nextHandler, int theEvent) {
+	int eventKind = OS.GetEventKind(theEvent);
+	switch (OS.GetEventClass(theEvent)) {
+		case OS.kEventClassControl:
+			switch (eventKind) {
+				case OS.kEventControlGetClickActivation: {
+					OS.SetEventParameter (theEvent, OS.kEventParamClickActivation, OS.typeClickActivationResult, 4, new int [] {OS.kActivateAndHandleClick});
+					return OS.noErr;
+				}
+				case OS.kEventControlSetCursor: {
+					return OS.noErr;
+				}
+				case OS.kEventControlDraw: {
+					/*
+					 * Bug on Safari. The web view cannot be obscured by other views above it.
+					 * This problem is specified in the apple documentation for HiWebViewCreate.
+					 * The workaround is to don't draw the web view when it is not visible.
+					 */
+					if (!browser.isVisible ()) return OS.noErr;
+					break;
+				}
+				case OS.kEventControlOwningWindowChanged: {
+					/* Reparent the web view handler */
+					int window = OS.GetControlOwner(browser.handle);
+					int[] contentView = new int[1];
+					OS.HIViewFindByID(OS.HIViewGetRoot(window), OS.kHIViewWindowContentID(), contentView);
+					OS.HIViewAddSubview(contentView[0], webViewHandle);
+					
+					/* Reset the kEventWindowBoundsChanged handler */
+					OS.RemoveEventHandler(windowBoundsHandler);
+					int[] mask2 = new int[] {
+						OS.kEventClassWindow, OS.kEventWindowBoundsChanged,
+					};
+					int[] outRef = new int[1];
+					OS.InstallEventHandler(OS.GetWindowEventTarget(window), Callback3.getAddress(), mask2.length / 2, mask2, browser.handle, outRef);
+					windowBoundsHandler = outRef[0];
+					break;
+				}
+				case OS.kEventControlBoundsChanged:
+				case OS.kEventControlVisibilityChanged: {
+					/*
+					 * Bug on Safari. The web view cannot be obscured by other views above it.
+					 * This problem is specified in the apple documentation for HiWebViewCreate.
+					 * The workaround is to hook kEventControlVisibilityChanged on the browser
+					 * and move the browser out of the screen when hidden and restore its bounds
+					 * when shown.
+					 */
+					CGRect bounds = new CGRect();
+					if (!browser.isVisible()) {
+						bounds.x = bounds.y = -MIN_SIZE;
+						bounds.width = bounds.height = MIN_SIZE;
+						OS.HIViewSetFrame(webViewHandle, bounds);
+					} else {
+						OS.HIViewGetBounds(browser.handle, bounds);
+						int[] contentView = new int[1];
+						OS.HIViewFindByID(OS.HIViewGetRoot(OS.GetControlOwner(browser.handle)), OS.kHIViewWindowContentID(), contentView);
+						OS.HIViewConvertRect(bounds, browser.handle, contentView[0]);
+						/* 
+						* Bug in Safari.  For some reason, the web view will display incorrectly or
+						* blank depending on its contents, if its size is set to a value smaller than
+						* MIN_SIZE. It will not display properly even after the size is made larger.
+						* The fix is to avoid setting sizes smaller than MIN_SIZE. 
+						*/
+						if (bounds.width <= MIN_SIZE) bounds.width = MIN_SIZE;
+						if (bounds.height <= MIN_SIZE) bounds.height = MIN_SIZE;
+						OS.HIViewSetFrame(webViewHandle, bounds);
+					}
+					break;
+				}
+			}
+		case OS.kEventClassWindow:
+			switch (eventKind) {
+				case OS.kEventWindowBoundsChanged:
+					/*
+					 * Bug on Safari. Resizing the height of a Shell containing a Browser at
+					 * a fixed location causes the Browser to redraw at a wrong location.
+					 * The web view is a HIView container that internally hosts
+					 * a Cocoa NSView that uses a coordinates system with the origin at the
+					 * bottom left corner of a window instead of the coordinates system used
+					 * in Carbon that starts at the top left corner. The workaround is to
+					 * reposition the web view every time the Shell of the Browser is resized.
+					 * 
+					 * Note the size should not be updated if the browser is hidden.
+					 */
+					if (browser.isVisible()) {
+						CGRect oldBounds = new CGRect();
+						OS.GetEventParameter (theEvent, OS.kEventParamOriginalBounds, OS.typeHIRect, null, CGRect.sizeof, null, oldBounds);
+						CGRect bounds = new CGRect();
+						OS.GetEventParameter (theEvent, OS.kEventParamCurrentBounds, OS.typeHIRect, null, CGRect.sizeof, null, bounds);
+						if (oldBounds.height == bounds.height) break;
+						OS.HIViewGetBounds(browser.handle, bounds);
+						int[] contentView = new int[1];
+						OS.HIViewFindByID(OS.HIViewGetRoot(OS.GetControlOwner(browser.handle)), OS.kHIViewWindowContentID(), contentView);
+						OS.HIViewConvertRect(bounds, browser.handle, contentView[0]);
+						/* 
+						* Bug in Safari.  For some reason, the web view will display incorrectly or
+						* blank depending on its contents, if its size is set to a value smaller than
+						* MIN_SIZE. It will not display properly even after the size is made larger.
+						* The fix is to avoid setting sizes smaller than MIN_SIZE. 
+						*/
+						if (bounds.width <= MIN_SIZE) bounds.width = MIN_SIZE;
+						if (bounds.height <= MIN_SIZE) bounds.height = MIN_SIZE;
+						bounds.x++;
+						/* Note that the bounds needs to change */
+						OS.HIViewSetFrame(webViewHandle, bounds);
+						bounds.x--;
+						OS.HIViewSetFrame(webViewHandle, bounds);
+					}
+			}
+		case OS.kEventClassKeyboard:
+			switch (eventKind) {
+				case OS.kEventRawKeyDown: {
+					/*
+					* Bug in Safari. The WebView blocks the propagation of certain Carbon events
+					* such as kEventRawKeyDown. On the Mac, Carbon events propagate from the
+					* Focus Target Handler to the Control Target Handler, Window Target and finally
+					* the Application Target Handler. It is assumed that WebView hooks its events
+					* on the Window Target and does not pass kEventRawKeyDown to the next handler.
+					* Since kEventRawKeyDown events never make it to the Application Target Handler,
+					* the Application Target Handler never gets to emit kEventTextInputUnicodeForKeyEvent
+					* used by SWT to send a SWT.KeyDown event.
+					* The workaround is to hook kEventRawKeyDown on the Control Target Handler which gets
+					* called before the WebView hook on the Window Target Handler. Then, forward this event
+					* directly to the Application Target Handler. Note that if in certain conditions Safari
+					* does not block the kEventRawKeyDown, then multiple kEventTextInputUnicodeForKeyEvent
+					* events might be generated as a result of this workaround.
+					*/
+					//TEMPORARY CODE
+//					doit = false;
+//					OS.SendEventToEventTarget(theEvent, OS.GetApplicationEventTarget());
+//					if (!doit) return OS.noErr;
+
+					int[] length = new int[1];
+					int status = OS.GetEventParameter (theEvent, OS.kEventParamKeyUnicodes, OS.typeUnicodeText, null, 4, length, (char[])null);
+					if (status == OS.noErr && length[0] != 0) {
+						int[] modifiers = new int[1];
+						OS.GetEventParameter (theEvent, OS.kEventParamKeyModifiers, OS.typeUInt32, null, 4, null, modifiers);
+						char[] chars = new char[1];
+						OS.GetEventParameter (theEvent, OS.kEventParamKeyUnicodes, OS.typeUnicodeText, null, 2, null, chars);
+						if ((modifiers[0] & OS.cmdKey) != 0) {
+							switch (chars[0]) {
+								case 'v': {
+									Cocoa.objc_msgSend (webView, Cocoa.S_paste);
+									return OS.noErr;
+								}
+								case 'c': {
+									Cocoa.objc_msgSend (webView, Cocoa.S_copy);
+									return OS.noErr;
+								}
+								case 'x': {
+									Cocoa.objc_msgSend (webView, Cocoa.S_cut);
+									return OS.noErr;
+								}
+							}
+						}
+					}
+					/*
+					* Bug in Carbon.  OSX crashes if a HICocoaView is disposed during a key event,
+					* presumably as a result of attempting to use it after its refcount has reached
+					* 0.  The workaround is to temporarily add an extra ref to the view and its
+					* ancestor while the DOM listener is handling the event, in case the
+					* Browser gets disposed in a callback.
+					*/
+					int handle = webViewHandle, root = OS.HIViewGetSuperview (webViewHandle);
+					OS.CFRetain (handle);
+					OS.CFRetain (root);
+					int result = OS.CallNextEventHandler (nextHandler, theEvent);
+					OS.CFRelease (handle);
+					OS.CFRelease (root);
+					return result;
+				}
+			}
+		case OS.kEventClassTextInput:
+			switch (eventKind) {
+				case OS.kEventTextInputUnicodeForKeyEvent: {
+					/*
+					* Note.  This event is received from the Window Target therefore after it was received
+					* by the Focus Target. The SWT.KeyDown event is sent by SWT on the Focus Target. If it
+					* is received here, then the SWT.KeyDown doit flag must have been left to the value
+					* true.  For package visibility reasons we cannot access the doit flag directly.
+					* 
+					* Sequence of events when the user presses a key down
+					* 
+					* .Control Target - kEventRawKeyDown
+					* 	.forward to ApplicationEventTarget
+					* 		.Focus Target kEventTextInputUnicodeForKeyEvent - SWT emits SWT.KeyDown - 
+					* 			blocks further propagation if doit false. Browser does not know directly about
+					* 			the doit flag value.
+					* 			.Window Target kEventTextInputUnicodeForKeyEvent - if received, Browser knows 
+					* 			SWT.KeyDown is not blocked and event should be sent to WebKit
+					*  Return from Control Target - kEventRawKeyDown: let the event go to WebKit if doit true 
+					*  (eventNotHandledErr) or stop it (noErr).
+					*/
+					//TEMPORARY CODE
+//					doit = true;
+					break;
+				}
+			}
+	}
+	return OS.eventNotHandledErr;
+}
+
+/* Here we dispatch all WebView upcalls. */
+int handleCallback(int selector, int arg0, int arg1, int arg2, int arg3) {
+	int ret = 0;
+	// for meaning of selector see WebKitDelegate methods in webkit.c
+	switch (selector) {
+		case 1: didFailProvisionalLoadWithError(arg0, arg1); break;
+		case 2: didFinishLoadForFrame(arg0); break;
+		case 3: didReceiveTitle(arg0, arg1); break;
+		case 4: didStartProvisionalLoadForFrame(arg0); break;
+		case 5: didFinishLoadingFromDataSource(arg0, arg1); break;
+		case 6: didFailLoadingWithError(arg0, arg1, arg2); break;
+		case 7: ret = identifierForInitialRequest(arg0, arg1); break;
+		case 8: ret = willSendRequest(arg0, arg1, arg2, arg3); break;
+		case 9: handleNotification(arg0); break;
+		case 10: didCommitLoadForFrame(arg0); break;
+		case 11: ret = createWebViewWithRequest(arg0); break;
+		case 12: webViewShow(arg0); break;
+		case 13: setFrame(arg0); break;
+		case 14: webViewClose(); break;
+		case 15: ret = contextMenuItemsForElement(arg0, arg1); break;
+		case 16: setStatusBarVisible(arg0); break;
+		case 17: setResizable(arg0); break;
+		case 18: setToolbarsVisible(arg0); break;
+		case 19: decidePolicyForMIMEType(arg0, arg1, arg2, arg3); break;
+		case 20: decidePolicyForNavigationAction(arg0, arg1, arg2, arg3); break;
+		case 21: decidePolicyForNewWindowAction(arg0, arg1, arg2, arg3); break;
+		case 22: unableToImplementPolicyWithError(arg0, arg1); break;
+		case 23: setStatusText(arg0); break;
+		case 24: webViewFocus(); break;
+		case 25: webViewUnfocus(); break;
+		case 26: runJavaScriptAlertPanelWithMessage(arg0); break;
+		case 27: ret = runJavaScriptConfirmPanelWithMessage(arg0); break;
+		case 28: runOpenPanelForFileButtonWithResultListener(arg0); break;
+		case 29: decideDestinationWithSuggestedFilename(arg0, arg1); break;
+		case 30: mouseDidMoveOverElement(arg0, arg1); break;
+		case 31: didChangeLocationWithinPageForFrame(arg0); break;
+		case 32: handleEvent(arg0); break;
+		case 33: windowScriptObjectAvailable(arg0); break;
+		case 34: ret = callJava(arg0, arg1, arg2); break;
+		case 35: didReceiveAuthenticationChallengefromDataSource(arg0, arg1, arg2); break;
+	}
+	return ret;
+}
+
+public boolean isBackEnabled() {
+	return Cocoa.objc_msgSend(webView, Cocoa.S_canGoBack) != 0;
+}
+
+public boolean isForwardEnabled() {
+	return Cocoa.objc_msgSend(webView, Cocoa.S_canGoForward) != 0;
+}
+
+public void refresh() {
+	Cocoa.objc_msgSend(webView, Cocoa.S_reload, 0);
+}
+
+public boolean setText(String html) {
+	/*
+	* Bug in Safari.  The web view segment faults in some circumstances
+	* when the text changes during the location changing callback.  The
+	* fix is to defer the work until the callback is done. 
+	*/
+	if (changingLocation) {
+		this.html = html;
+	} else {
+		_setText(html);
+	}
+	return true;
+}
+	
+void _setText(String html) {	
+	int length = html.length();
+	char[] buffer = new char[length];
+	html.getChars(0, length, buffer, 0);
+	int string = OS.CFStringCreateWithCharacters(0, buffer, length);
+
+	length = URI_FROMMEMORY.length();
+	buffer = new char[length];
+	URI_FROMMEMORY.getChars(0, length, buffer, 0);
+	int URLString = OS.CFStringCreateWithCharacters(0, buffer, length);
+	
+	/*
+	* Note.  URLWithString uses autorelease.  The resulting URL
+	* does not need to be released.
+	* URL = [NSURL URLWithString:(NSString *)URLString]
+	*/	
+	int URL = Cocoa.objc_msgSend(Cocoa.C_NSURL, Cocoa.S_URLWithString, URLString);
+	OS.CFRelease(URLString);
+	
+	//mainFrame = [webView mainFrame];
+	int mainFrame = Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame);
+	
+	//[mainFrame loadHTMLString:(NSString *) string baseURL:(NSURL *)URL];
+	Cocoa.objc_msgSend(mainFrame, Cocoa.S_loadHTMLStringbaseURL, string, URL);
+	OS.CFRelease(string);
+}
+
+public boolean setUrl(String url) {
+	html = null;
+
+	if (url.indexOf('/') == 0) {
+		url = PROTOCOL_FILE + url;
+	} else if (url.indexOf(':') == -1) {
+		url = PROTOCOL_HTTP + url;
+	}
+
+	int inURL = 0;
+	char[] chars = new char[url.length()];
+	url.getChars(0, chars.length, chars, 0);
+	int str = OS.CFStringCreateWithCharacters(0, chars, chars.length);
+	if (str != 0) {
+		char[] unescapedChars = new char[] {'%', '#'};
+		int unescapedStr = OS.CFStringCreateWithCharacters(0, unescapedChars, unescapedChars.length);
+		int escapedStr = OS.CFURLCreateStringByAddingPercentEscapes(OS.kCFAllocatorDefault, str, unescapedStr, 0, OS.kCFStringEncodingUTF8);
+		if (escapedStr != 0) {
+			inURL = OS.CFURLCreateWithString(OS.kCFAllocatorDefault, escapedStr, 0);
+			OS.CFRelease(escapedStr);
+		}
+		if (unescapedStr != 0) OS.CFRelease(unescapedStr);
+		OS.CFRelease(str);
+	}
+	if (inURL == 0) return false;
+
+	//request = [NSURLRequest requestWithURL:(NSURL*)inURL];
+	int request = Cocoa.objc_msgSend(Cocoa.C_NSURLRequest, Cocoa.S_requestWithURL, inURL);
+	OS.CFRelease(inURL);
+
+	//mainFrame = [webView mainFrame];
+	int mainFrame = Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame);
+
+	//[mainFrame loadRequest:request];
+	Cocoa.objc_msgSend(mainFrame, Cocoa.S_loadRequest, request);
+
+	return true;
+}
+
+public void stop() {
+	html = null;
+	Cocoa.objc_msgSend(webView, Cocoa.S_stopLoading, 0);
+}
+
+/* WebFrameLoadDelegate */
+void didChangeLocationWithinPageForFrame(int frame) {
+	//id url= [[[[frame provisionalDataSource] request] URL] absoluteString];
+	int dataSource = Cocoa.objc_msgSend(frame, Cocoa.S_dataSource);
+	int request = Cocoa.objc_msgSend(dataSource, Cocoa.S_request);
+	int url = Cocoa.objc_msgSend(request, Cocoa.S_URL);
+	int s = Cocoa.objc_msgSend(url, Cocoa.S_absoluteString);	
+	int length = OS.CFStringGetLength(s);
+	if (length == 0) return;
+	char[] buffer = new char[length];
+	CFRange range = new CFRange();
+	range.length = length;
+	OS.CFStringGetCharacters(s, range, buffer);
+	String url2 = new String(buffer);
+	/*
+	 * If the URI indicates that the page is being rendered from memory
+	 * (via setText()) then set it to about:blank to be consistent with IE.
+	 */
+	if (url2.equals (URI_FROMMEMORY)) url2 = ABOUT_BLANK;
+
+	final Display display = browser.getDisplay();
+	boolean top = frame == Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame);
+	if (top) {
+		StatusTextEvent statusText = new StatusTextEvent(browser);
+		statusText.display = display;
+		statusText.widget = browser;
+		statusText.text = url2;
+		for (int i = 0; i < statusTextListeners.length; i++) {
+			statusTextListeners[i].changed(statusText);
+		}
+	}
+	LocationEvent location = new LocationEvent(browser);
+	location.display = display;
+	location.widget = browser;
+	location.location = url2;
+	location.top = top;
+	for (int i = 0; i < locationListeners.length; i++) {
+		locationListeners[i].changed(location);
+	}
+}
+
+void didFailProvisionalLoadWithError(int error, int frame) {
+	if (frame == Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame)) {
+		/*
+		* Feature on Safari.  The identifier is used here as a marker for the events 
+		* related to the top frame and the URL changes related to that top frame as 
+		* they should appear on the location bar of a browser.  It is expected to reset
+		* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
+		* the identifierForInitialRequest event is received.  However, Safari fires
+		* the didFinishLoadingFromDataSource event before the entire content of the
+		* top frame is loaded.  It is possible to receive multiple willSendRequest 
+		* events in this interval, causing the Browser widget to send unwanted
+		* Location.changing events.  For this reason, the identifier is reset to 0
+		* when the top frame has either finished loading (didFinishLoadForFrame
+		* event) or failed (didFailProvisionalLoadWithError).
+		*/
+		identifier = 0;
+	}
+}
+
+void didFinishLoadForFrame(int frame) {
+	hookDOMFocusListeners(frame);
+	hookDOMMouseListeners(frame);
+	if (frame == Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame)) {
+		hookDOMKeyListeners(frame);
+
+		final Display display = browser.getDisplay();
+		/*
+		* To be consistent with other platforms a title event should be fired when a
+		* page has completed loading.  A page with a <title> tag will do this
+		* automatically when the didReceiveTitle callback is received.  However a page
+		* without a <title> tag will not do this by default, so fire the event
+		* here with the page's url as the title.
+		*/
+		int dataSource = Cocoa.objc_msgSend(frame, Cocoa.S_dataSource);
+		if (dataSource != 0) {
+			int title = Cocoa.objc_msgSend(dataSource, Cocoa.S_pageTitle);
+			if (title == 0) {	/* page has no title */
+				final TitleEvent newEvent = new TitleEvent(browser);
+				newEvent.display = display;
+				newEvent.widget = browser;
+				newEvent.title = url;
+				for (int i = 0; i < titleListeners.length; i++) {
+					final TitleListener listener = titleListeners[i];
+					/*
+					* Note on WebKit.  Running the event loop from a Browser
+					* delegate callback breaks the WebKit (stop loading or
+					* crash).  The workaround is to invoke Display.asyncExec()
+					* so that the Browser does not crash if this is attempted.
+					*/
+					display.asyncExec(
+						new Runnable() {
+							public void run() {
+								if (!display.isDisposed() && !browser.isDisposed()) {
+									listener.changed(newEvent);
+								}
+							}
+						}
+					);
+				}
+			}
+		}
+		final ProgressEvent progress = new ProgressEvent(browser);
+		progress.display = display;
+		progress.widget = browser;
+		progress.current = MAX_PROGRESS;
+		progress.total = MAX_PROGRESS;
+		for (int i = 0; i < progressListeners.length; i++) {
+			final ProgressListener listener = progressListeners[i];
+			/*
+			* Note on WebKit.  Running the event loop from a Browser
+			* delegate callback breaks the WebKit (stop loading or
+			* crash).  The ProgressBar widget currently touches the
+			* event loop every time the method setSelection is called.  
+			* The workaround is to invoke Display.asyncExec() so that
+			* the Browser does not crash when the user updates the 
+			* selection of the ProgressBar.
+			*/
+			display.asyncExec(
+				new Runnable() {
+					public void run() {
+						if (!display.isDisposed() && !browser.isDisposed()) {
+							listener.completed(progress);
+						}
+					}
+				}
+			);
+		}
+
+		/* re-install registered functions */
+		Enumeration elements = functions.elements ();
+		while (elements.hasMoreElements ()) {
+			BrowserFunction function = (BrowserFunction)elements.nextElement ();
+			execute (function.functionString);
+		}
+
+		/*
+		* Feature on Safari.  The identifier is used here as a marker for the events 
+		* related to the top frame and the URL changes related to that top frame as 
+		* they should appear on the location bar of a browser.  It is expected to reset
+		* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
+		* the identifierForInitialRequest event is received.  Howeever, Safari fires
+		* the didFinishLoadingFromDataSource event before the entire content of the
+		* top frame is loaded.  It is possible to receive multiple willSendRequest 
+		* events in this interval, causing the Browser widget to send unwanted
+		* Location.changing events.  For this reason, the identifier is reset to 0
+		* when the top frame has either finished loading (didFinishLoadForFrame
+		* event) or failed (didFailProvisionalLoadWithError).
+		*/
+		identifier = 0;
+	}
+}
+
+void hookDOMFocusListeners(int frame) {
+	/*
+	* These listeners only need to be hooked for OSX 10.4 (Tiger).  The WebKit on
+	* OSX < 10.4 does not send these DOM events, and tab traversals that exit
+	* Safari are handled as of OSX 10.5 as a result of using HICocoaViewCreate,
+	* which makes these listeners unnecessary.
+	*/
+	if (!(0x1040 <= OS.VERSION && OS.VERSION < 0x1050)) return;
+
+	int document = Cocoa.objc_msgSend(frame, Cocoa.S_DOMDocument);
+	if (document == 0) return;
+
+	String string = DOMEVENT_FOCUSIN;
+	int length = string.length();
+	char[] chars = new char[length];
+	string.getChars(0, length, chars, 0);
+	int ptr = OS.CFStringCreateWithCharacters(0, chars, length);
+	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
+	OS.CFRelease(ptr);
+
+	string = DOMEVENT_FOCUSOUT;
+	length = string.length();
+	chars = new char[length];
+	string.getChars(0, length, chars, 0);
+	ptr = OS.CFStringCreateWithCharacters(0, chars, length);
+	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
+	OS.CFRelease(ptr);
+}
+	
+void hookDOMKeyListeners(int frame) {
+	/*
+	* WebKit's DOM listener api became functional in OSX 10.4, so if an earlier
+	* version than this is detected then do not hook the DOM listeners.
+	*/
+	if (OS.VERSION < 0x1040) return;
+
+	int document = Cocoa.objc_msgSend(frame, Cocoa.S_DOMDocument);
+	if (document == 0) return;
+
+	String string = DOMEVENT_KEYDOWN;
+	int length = string.length();
+	char[] chars = new char[length];
+	string.getChars(0, length, chars, 0);
+	int ptr = OS.CFStringCreateWithCharacters(0, chars, length);
+	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
+	OS.CFRelease(ptr);
+
+	string = DOMEVENT_KEYUP;
+	length = string.length();
+	chars = new char[length];
+	string.getChars(0, length, chars, 0);
+	ptr = OS.CFStringCreateWithCharacters(0, chars, length);
+	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
+	OS.CFRelease(ptr);
+}
+
+void hookDOMMouseListeners(int frame) {
+	/*
+	* WebKit's DOM listener api became functional in OSX 10.4, so if an earlier
+	* version than this is detected then do not hook the DOM listeners.
+	*/
+	if (OS.VERSION < 0x1040) return;
+
+	int document = Cocoa.objc_msgSend(frame, Cocoa.S_DOMDocument);
+	if (document == 0) return;
+
+	String string = DOMEVENT_MOUSEDOWN;
+	int length = string.length();
+	char[] chars = new char[length];
+	string.getChars(0, length, chars, 0);
+	int ptr = OS.CFStringCreateWithCharacters(0, chars, length);
+	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
+	OS.CFRelease(ptr);
+
+	string = DOMEVENT_MOUSEUP;
+	length = string.length();
+	chars = new char[length];
+	string.getChars(0, length, chars, 0);
+	ptr = OS.CFStringCreateWithCharacters(0, chars, length);
+	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
+	OS.CFRelease(ptr);
+
+	string = DOMEVENT_MOUSEMOVE;
+	length = string.length();
+	chars = new char[length];
+	string.getChars(0, length, chars, 0);
+	ptr = OS.CFStringCreateWithCharacters(0, chars, length);
+	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
+	OS.CFRelease(ptr);
+
+	string = DOMEVENT_MOUSEWHEEL;
+	length = string.length();
+	chars = new char[length];
+	string.getChars(0, length, chars, 0);
+	ptr = OS.CFStringCreateWithCharacters(0, chars, length);
+	Cocoa.objc_msgSend(document, Cocoa.S_addEventListener, ptr, delegate, 0);
+	OS.CFRelease(ptr);
+}
+
+void didReceiveTitle(int title, int frame) {
+	if (frame == Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame)) {
+		int length = OS.CFStringGetLength(title);
+		char[] buffer = new char[length];
+		CFRange range = new CFRange();
+		range.length = length;
+		OS.CFStringGetCharacters(title, range, buffer);
+		String newTitle = new String(buffer);
+		TitleEvent newEvent = new TitleEvent(browser);
+		newEvent.display = browser.getDisplay();
+		newEvent.widget = browser;
+		newEvent.title = newTitle;
+		for (int i = 0; i < titleListeners.length; i++) {
+			titleListeners[i].changed(newEvent);
+		}
+	}
+}
+
+void didStartProvisionalLoadForFrame(int frame) {
+	/* 
+	* This code is intentionally commented.  WebFrameLoadDelegate:didStartProvisionalLoadForFrame is
+	* called before WebResourceLoadDelegate:willSendRequest and
+	* WebFrameLoadDelegate:didCommitLoadForFrame.  The resource count is reset when didCommitLoadForFrame
+	* is received for the top frame.
+	*/
+//	int webView = WebKit.HIWebViewGetWebView(webViewHandle);
+//	if (frame == WebKit.objc_msgSend(webView, WebKit.S_mainFrame)) {
+//		/* reset resource status variables */
+//		resourceCount= 0;
+//	}
+}
+
+void didCommitLoadForFrame(int frame) {
+	//id url= [[[[frame provisionalDataSource] request] URL] absoluteString];
+	int dataSource = Cocoa.objc_msgSend(frame, Cocoa.S_dataSource);
+	int request = Cocoa.objc_msgSend(dataSource, Cocoa.S_request);
+	int url = Cocoa.objc_msgSend(request, Cocoa.S_URL);
+	int s = Cocoa.objc_msgSend(url, Cocoa.S_absoluteString);	
+	int length = OS.CFStringGetLength(s);
+	if (length == 0) return;
+	char[] buffer = new char[length];
+	CFRange range = new CFRange();
+	range.length = length;
+	OS.CFStringGetCharacters(s, range, buffer);
+	String url2 = new String(buffer);
+	/*
+	 * If the URI indicates that the page is being rendered from memory
+	 * (via setText()) then set it to about:blank to be consistent with IE.
+	 */
+	if (url2.equals (URI_FROMMEMORY)) url2 = ABOUT_BLANK;
+
+	final Display display = browser.getDisplay();
+	boolean top = frame == Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame);
+	if (top) {
+		/* reset resource status variables */
+		resourceCount = 0;		
+		this.url = url2;
+		
+		final ProgressEvent progress = new ProgressEvent(browser);
+		progress.display = display;
+		progress.widget = browser;
+		progress.current = 1;
+		progress.total = MAX_PROGRESS;
+		for (int i = 0; i < progressListeners.length; i++) {
+			final ProgressListener listener = progressListeners[i];
+			/*
+			* Note on WebKit.  Running the event loop from a Browser
+			* delegate callback breaks the WebKit (stop loading or
+			* crash).  The widget ProgressBar currently touches the
+			* event loop every time the method setSelection is called.  
+			* The workaround is to invoke Display.asyncexec so that
+			* the Browser does not crash when the user updates the 
+			* selection of the ProgressBar.
+			*/
+			display.asyncExec(
+				new Runnable() {
+					public void run() {
+						if (!display.isDisposed() && !browser.isDisposed())
+							listener.changed(progress);
+					}
+				}
+			);
+		}
+		
+		StatusTextEvent statusText = new StatusTextEvent(browser);
+		statusText.display = display;
+		statusText.widget = browser;
+		statusText.text = url2;
+		for (int i = 0; i < statusTextListeners.length; i++) {
+			statusTextListeners[i].changed(statusText);
+		}
+	}
+	LocationEvent location = new LocationEvent(browser);
+	location.display = display;
+	location.widget = browser;
+	location.location = url2;
+	location.top = top;
+	for (int i = 0; i < locationListeners.length; i++) {
+		locationListeners[i].changed(location);
+	}
+}
+
+void windowScriptObjectAvailable (int windowScriptObject) {
+	String objectName = "external"; //$NON-NLS-1$
+	char[] chars = new char[objectName.length ()];
+	objectName.getChars (0, chars.length, chars, 0);
+	int str = OS.CFStringCreateWithCharacters (0, chars, chars.length);
+	if (str != 0) {
+		Cocoa.objc_msgSend (windowScriptObject, Cocoa.S_setValue, delegate, str);
+		OS.CFRelease (str);
+	}
+}
+
+/* WebResourceLoadDelegate */
+
+void didFinishLoadingFromDataSource(int identifier, int dataSource) {
+	/*
+	* Feature on Safari.  The identifier is used here as a marker for the events 
+	* related to the top frame and the URL changes related to that top frame as 
+	* they should appear on the location bar of a browser.  It is expected to reset
+	* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
+	* the identifierForInitialRequest event is received.  Howeever, Safari fires
+	* the didFinishLoadingFromDataSource event before the entire content of the
+	* top frame is loaded.  It is possible to receive multiple willSendRequest 
+	* events in this interval, causing the Browser widget to send unwanted
+	* Location.changing events.  For this reason, the identifier is reset to 0
+	* when the top frame has either finished loading (didFinishLoadForFrame
+	* event) or failed (didFailProvisionalLoadWithError).
+	*/
+	// this code is intentionally commented
+	//if (this.identifier == identifier) this.identifier = 0;
+}
+
+void didFailLoadingWithError(int identifier, int error, int dataSource) {
+	/*
+	* Feature on Safari.  The identifier is used here as a marker for the events 
+	* related to the top frame and the URL changes related to that top frame as 
+	* they should appear on the location bar of a browser.  It is expected to reset
+	* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
+	* the identifierForInitialRequest event is received.  Howeever, Safari fires
+	* the didFinishLoadingFromDataSource event before the entire content of the
+	* top frame is loaded.  It is possible to receive multiple willSendRequest 
+	* events in this interval, causing the Browser widget to send unwanted
+	* Location.changing events.  For this reason, the identifier is reset to 0
+	* when the top frame has either finished loading (didFinishLoadForFrame
+	* event) or failed (didFailProvisionalLoadWithError).
+	*/
+	// this code is intentionally commented
+	//if (this.identifier == identifier) this.identifier = 0;
+}
+
+void didReceiveAuthenticationChallengefromDataSource (int identifier, int challenge, int dataSource) {
+	/*
+	 * Do not invoke the listeners if this challenge has been failed too many
+	 * times because a listener is likely giving incorrect credentials repeatedly
+	 * and will do so indefinitely.
+	 */
+	int count = Cocoa.objc_msgSend (challenge, Cocoa.S_previousFailureCount);
+	if (count < 3) {
+		for (int i = 0; i < authenticationListeners.length; i++) {
+			AuthenticationEvent event = new AuthenticationEvent (browser);
+			event.location = lastNavigateURL;
+			authenticationListeners[i].authenticate (event);
+			if (!event.doit) {
+				int challengeSender = Cocoa.objc_msgSend (challenge, Cocoa.S_sender);
+				Cocoa.objc_msgSend (challengeSender, Cocoa.S_cancelAuthenticationChallenge, challenge);
+				return;
+			}
+			if (event.user != null && event.password != null) {
+				int challengeSender = Cocoa.objc_msgSend (challenge, Cocoa.S_sender);
+				int length = event.user.length ();
+				char[] buffer = new char[length];
+				event.user.getChars (0, length, buffer, 0);
+				int user = OS.CFStringCreateWithCharacters (0, buffer, length);
+				length = event.password.length ();
+				buffer = new char[length];
+				event.password.getChars (0, length, buffer, 0);
+				int password = OS.CFStringCreateWithCharacters (0, buffer, length);
+				int credential = Cocoa.objc_msgSend (Cocoa.C_NSURLCredential, Cocoa.S_credentialWithUser, user, password, Cocoa.NSURLCredentialPersistenceForSession);
+				Cocoa.objc_msgSend (challengeSender, Cocoa.S_useCredential, credential, challenge);
+				OS.CFRelease (password);
+				OS.CFRelease (user);
+				return;
+			}
+		}
+	}
+
+	/* no listener handled the challenge, so try to invoke the native panel */
+	int cls = Cocoa.C_WebPanelAuthenticationHandler;
+	if (cls != 0) {
+		int method = Cocoa.class_getClassMethod (cls, Cocoa.S_sharedHandler);
+		if (method != 0) {
+			int handler = Cocoa.objc_msgSend (cls, Cocoa.S_sharedHandler);
+			if (handler != 0) {
+				int window = Cocoa.objc_msgSend (webView, Cocoa.S_window);
+				Cocoa.objc_msgSend (handler, Cocoa.S_startAuthentication, challenge, window);
+				return;
+			}
+		}
+	}
+
+	/* the native panel was not available, so show a custom dialog */
+	String[] userReturn = new String[1], passwordReturn = new String[1];
+	int proposedCredential = Cocoa.objc_msgSend (challenge, Cocoa.S_proposedCredential);
+	if (proposedCredential != 0) {
+		int user = Cocoa.objc_msgSend (proposedCredential, Cocoa.S_user);
+		userReturn[0] = getString (user);
+		boolean hasPassword = Cocoa.objc_msgSend (proposedCredential, Cocoa.S_hasPassword) != 0;
+		if (hasPassword) {
+			int password = Cocoa.objc_msgSend (proposedCredential, Cocoa.S_password);
+			passwordReturn[0] = getString (password);
+		}
+	}
+
+	int space = Cocoa.objc_msgSend (challenge, Cocoa.S_protectionSpace);
+	int host = Cocoa.objc_msgSend (space, Cocoa.S_host);
+	String hostString = getString (host) + ':';
+	int port = Cocoa.objc_msgSend (space, Cocoa.S_port);
+	hostString += port;
+	int realm = Cocoa.objc_msgSend (space, Cocoa.S_realm);
+	String realmString = getString (realm);
+	boolean result = showAuthenticationDialog (userReturn, passwordReturn, hostString, realmString);
+	int challengeSender = Cocoa.objc_msgSend (challenge, Cocoa.S_sender);
+	if (!result) {
+		Cocoa.objc_msgSend (challengeSender, Cocoa.S_cancelAuthenticationChallenge, challenge);
+		return;
+	}
+
+	int length = userReturn[0].length ();
+	char[] buffer = new char[length];
+	userReturn[0].getChars (0, length, buffer, 0);
+	int user = OS.CFStringCreateWithCharacters (0, buffer, length);
+	length = passwordReturn[0].length ();
+	buffer = new char[length];
+	passwordReturn[0].getChars (0, length, buffer, 0);
+	int password = OS.CFStringCreateWithCharacters (0, buffer, length);
+	int credential = Cocoa.objc_msgSend (Cocoa.C_NSURLCredential, Cocoa.S_credentialWithUser, user, password, Cocoa.NSURLCredentialPersistenceForSession);
+	Cocoa.objc_msgSend (challengeSender, Cocoa.S_useCredential, credential, challenge);
+	OS.CFRelease (password);
+	OS.CFRelease (user);
+}
+
+boolean showAuthenticationDialog (final String[] user, final String[] password, String host, String realm) {
+	final Shell shell = new Shell (browser.getShell ());
+	shell.setLayout (new GridLayout ());
+	String title = SWT.getMessage ("SWT_Authentication_Required"); //$NON-NLS-1$
+	shell.setText (title);
+	Label label = new Label (shell, SWT.WRAP);
+	label.setText (Compatibility.getMessage ("SWT_Enter_Username_and_Password", new String[] {realm, host})); //$NON-NLS-1$
+
+	GridData data = new GridData ();
+	Monitor monitor = browser.getMonitor ();
+	int maxWidth = monitor.getBounds ().width * 2 / 3;
+	int width = label.computeSize (SWT.DEFAULT, SWT.DEFAULT).x;
+	data.widthHint = Math.min (width, maxWidth);
+	data.horizontalAlignment = GridData.FILL;
+	data.grabExcessHorizontalSpace = true;
+	label.setLayoutData (data);
+
+	Label userLabel = new Label (shell, SWT.NONE);
+	userLabel.setText (SWT.getMessage ("SWT_Username")); //$NON-NLS-1$
+
+	final Text userText = new Text (shell, SWT.BORDER);
+	if (user[0] != null) userText.setText (user[0]);
+	data = new GridData ();
+	data.horizontalAlignment = GridData.FILL;
+	data.grabExcessHorizontalSpace = true;
+	userText.setLayoutData (data);
+
+	Label passwordLabel = new Label (shell, SWT.NONE);
+	passwordLabel.setText (SWT.getMessage ("SWT_Password")); //$NON-NLS-1$
+
+	final Text passwordText = new Text (shell, SWT.PASSWORD | SWT.BORDER);
+	if (password[0] != null) passwordText.setText (password[0]);
+	data = new GridData ();
+	data.horizontalAlignment = GridData.FILL;
+	data.grabExcessHorizontalSpace = true;
+	passwordText.setLayoutData (data);
+
+	final boolean[] result = new boolean[1];
+	final Button[] buttons = new Button[2];
+	Listener listener = new Listener() {
+		public void handleEvent(Event event) {
+			user[0] = userText.getText();
+			password[0] = passwordText.getText();
+			result[0] = event.widget == buttons[1];
+			shell.close();
+		}	
+	};
+
+	Composite composite = new Composite (shell, SWT.NONE);
+	data = new GridData ();
+	data.horizontalAlignment = GridData.END;
+	composite.setLayoutData (data);
+	composite.setLayout (new GridLayout (2, true));
+	buttons[0] = new Button (composite, SWT.PUSH);
+	buttons[0].setText (SWT.getMessage("SWT_Cancel")); //$NON-NLS-1$
+	buttons[0].setLayoutData (new GridData (GridData.FILL_HORIZONTAL));
+	buttons[0].addListener (SWT.Selection, listener);
+	buttons[1] = new Button (composite, SWT.PUSH);
+	buttons[1].setText (SWT.getMessage("SWT_OK")); //$NON-NLS-1$
+	buttons[1].setLayoutData (new GridData (GridData.FILL_HORIZONTAL));
+	buttons[1].addListener (SWT.Selection, listener);
+
+	shell.setDefaultButton (buttons[1]);
+	shell.pack ();
+	shell.open ();
+	Display display = browser.getDisplay ();
+	while (!shell.isDisposed ()) {
+		if (!display.readAndDispatch ()) display.sleep ();
+	}
+
+	return result[0];
+}
+
+int identifierForInitialRequest(int request, int dataSource) {
+	final Display display = browser.getDisplay();
+	final ProgressEvent progress = new ProgressEvent(browser);
+	progress.display = display;
+	progress.widget = browser;
+	progress.current = resourceCount;
+	progress.total = Math.max(resourceCount, MAX_PROGRESS);
+	for (int i = 0; i < progressListeners.length; i++) {
+		final ProgressListener listener = progressListeners[i];
+		/*
+		* Note on WebKit.  Running the event loop from a Browser
+		* delegate callback breaks the WebKit (stop loading or
+		* crash).  The widget ProgressBar currently touches the
+		* event loop every time the method setSelection is called.  
+		* The workaround is to invoke Display.asyncexec so that
+		* the Browser does not crash when the user updates the 
+		* selection of the ProgressBar.
+		*/
+		display.asyncExec(
+			new Runnable() {
+				public void run() {
+					if (!display.isDisposed() && !browser.isDisposed())
+						listener.changed(progress);
+				}
+			}
+		);
+	}
+
+	/*
+	* Note.  numberWithInt uses autorelease.  The resulting object
+	* does not need to be released.
+	* identifier = [NSNumber numberWithInt: resourceCount++]
+	*/	
+	int identifier = Cocoa.objc_msgSend(Cocoa.C_NSNumber, Cocoa.S_numberWithInt, resourceCount++);
+		
+	if (this.identifier == 0) {
+		int frame = Cocoa.objc_msgSend(dataSource, Cocoa.S_webFrame);
+		if (frame == Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame)) this.identifier = identifier;
+	}
+	return identifier;
+		
+}
+
+int willSendRequest(int identifier, int request, int redirectResponse, int dataSource) {
+	int url = Cocoa.objc_msgSend (request, Cocoa.S_URL);
+	boolean isFileURL = Cocoa.objc_msgSend (url, Cocoa.S_isFileURL) != 0;
+	if (isFileURL) {
+		int newRequest = Cocoa.objc_msgSend (request, Cocoa.S_mutableCopy);
+		Cocoa.objc_msgSend (newRequest, Cocoa.S_autorelease);
+		Cocoa.objc_msgSend (newRequest, Cocoa.S_setCachePolicy, Cocoa.NSURLRequestReloadIgnoringLocalCacheData);
+		return newRequest;
+	}
+	return request;
+}
+
+/* handleNotification */
+
+void handleNotification(int notification) {	
+}
+
+/* UIDelegate */
+int createWebViewWithRequest(int request) {
+	WindowEvent newEvent = new WindowEvent(browser);
+	newEvent.display = browser.getDisplay();
+	newEvent.widget = browser;
+	newEvent.required = true;
+	if (openWindowListeners != null) {
+		for (int i = 0; i < openWindowListeners.length; i++) {
+			openWindowListeners[i].open(newEvent);
+		}
+	}
+
+	int webView = 0;
+	Browser browser = null;
+	if (newEvent.browser != null && newEvent.browser.webBrowser instanceof Safari) {
+		browser = newEvent.browser;
+	}
+	if (browser != null && !browser.isDisposed()) {
+		webView = ((Safari)browser.webBrowser).webView;
+		
+		if (request != 0) {
+			//mainFrame = [webView mainFrame];
+			int mainFrame= Cocoa.objc_msgSend(webView, Cocoa.S_mainFrame);
+
+			//[mainFrame loadRequest:request];
+			Cocoa.objc_msgSend(mainFrame, Cocoa.S_loadRequest, request);
+		}
+	}
+	return webView;
+}
+
+void webViewShow(int sender) {
+	/*
+	* Feature on WebKit.  The Safari WebKit expects the application
+	* to create a new Window using the Objective C Cocoa API in response
+	* to UIDelegate.createWebViewWithRequest. The application is then
+	* expected to use Objective C Cocoa API to make this window visible
+	* when receiving the UIDelegate.webViewShow message.  For some reason,
+	* a window created with the Carbon API hosting the new browser instance
+	* does not redraw until it has been resized.  The fix is to increase the
+	* size of the Shell and restore it to its initial size.
+	*/
+	Shell parent = browser.getShell();
+	Point pt = parent.getSize();
+	parent.setSize(pt.x+1, pt.y);
+	parent.setSize(pt.x, pt.y);
+	WindowEvent newEvent = new WindowEvent(browser);
+	newEvent.display = browser.getDisplay();
+	newEvent.widget = browser;
+	if (location != null) newEvent.location = location;
+	if (size != null) newEvent.size = size;
+	/*
+	* Feature in Safari.  Safari's tool bar contains
+	* the address bar.  The address bar is displayed
+	* if the tool bar is displayed. There is no separate
+	* notification for the address bar.
+	* Feature in Safari.  The menu bar is always
+	* displayed. There is no notification to hide
+	* the menu bar.
+	*/
+	newEvent.addressBar = toolBar;
+	newEvent.menuBar = true;
+	newEvent.statusBar = statusBar;
+	newEvent.toolBar = toolBar;
+	for (int i = 0; i < visibilityWindowListeners.length; i++) {
+		visibilityWindowListeners[i].show(newEvent);
+	}
+	location = null;
+	size = null;
+}
+
+void setFrame(int frame) {
+	float[] dest = new float[4];
+	OS.memmove(dest, frame, 16);
+	/* convert to SWT system coordinates */
+	Rectangle bounds = browser.getDisplay().getBounds();
+	location = new Point((int)dest[0], bounds.height - (int)dest[1] - (int)dest[3]);
+	size = new Point((int)dest[2], (int)dest[3]);
+}
+
+void webViewFocus() {
+}
+
+void webViewUnfocus() {
+}
+
+void runJavaScriptAlertPanelWithMessage(int message) {
+	int length = OS.CFStringGetLength(message);
+	char[] buffer = new char[length];
+	CFRange range = new CFRange();
+	range.length = length;
+	OS.CFStringGetCharacters(message, range, buffer);
+	String text = new String(buffer);
+
+	MessageBox messageBox = new MessageBox(browser.getShell(), SWT.OK | SWT.ICON_WARNING);
+	messageBox.setText("Javascript");	//$NON-NLS-1$
+	messageBox.setMessage(text);
+	messageBox.open();
+}
+
+int runJavaScriptConfirmPanelWithMessage(int message) {
+	int length = OS.CFStringGetLength(message);
+	char[] buffer = new char[length];
+	CFRange range = new CFRange();
+	range.length = length;
+	OS.CFStringGetCharacters(message, range, buffer);
+	String text = new String(buffer);
+
+	MessageBox messageBox = new MessageBox(browser.getShell(), SWT.OK | SWT.CANCEL | SWT.ICON_QUESTION);
+	messageBox.setText("Javascript");	//$NON-NLS-1$
+	messageBox.setMessage(text);
+	return messageBox.open() == SWT.OK ? 1 : 0;
+}
+
+void runOpenPanelForFileButtonWithResultListener(int resultListener) {
+	FileDialog dialog = new FileDialog(browser.getShell(), SWT.NONE);
+	String result = dialog.open();
+	if (result == null) {
+		Cocoa.objc_msgSend(resultListener, Cocoa.S_cancel);
+		return;
+	}
+	int length = result.length();
+	char[] buffer = new char[length];
+	result.getChars(0, length, buffer, 0);
+	int filename = OS.CFStringCreateWithCharacters(0, buffer, length);
+	Cocoa.objc_msgSend(resultListener, Cocoa.S_chooseFilename, filename);
+	OS.CFRelease(filename);
+}
+
+void webViewClose() {
+	Shell parent = browser.getShell();
+	WindowEvent newEvent = new WindowEvent(browser);
+	newEvent.display = browser.getDisplay();
+	newEvent.widget = browser;
+	for (int i = 0; i < closeWindowListeners.length; i++) {
+		closeWindowListeners[i].close(newEvent);
+	}
+	browser.dispose();
+	if (parent.isDisposed()) return;
+	/*
+	* Feature on WebKit.  The Safari WebKit expects the application
+	* to create a new Window using the Objective C Cocoa API in response
+	* to UIDelegate.createWebViewWithRequest. The application is then
+	* expected to use Objective C Cocoa API to make this window visible
+	* when receiving the UIDelegate.webViewShow message.  For some reason,
+	* a window created with the Carbon API hosting the new browser instance
+	* does not redraw until it has been resized.  The fix is to increase the
+	* size of the Shell and restore it to its initial size.
+	*/
+	Point pt = parent.getSize();
+	parent.setSize(pt.x+1, pt.y);
+	parent.setSize(pt.x, pt.y);
+}
+
+int contextMenuItemsForElement(int element, int defaultMenuItems) {
+	org.eclipse.swt.internal.carbon.Point pt = new org.eclipse.swt.internal.carbon.Point();
+	OS.GetGlobalMouse(pt);
+	Event event = new Event();
+	event.x = pt.h;
+	event.y = pt.v;
+	browser.notifyListeners(SWT.MenuDetect, event);
+	if (!event.doit || browser.isDisposed()) return 0;
+	Menu menu = browser.getMenu();
+	if (menu != null && !menu.isDisposed()) {
+		if (event.x != pt.h || event.y != pt.v) {
+			menu.setLocation(event.x, event.y);
+		}
+		menu.setVisible(true);
+		return 0;
+	}
+	return defaultMenuItems;
+}
+
+void setStatusBarVisible(int visible) {
+	/* Note.  Webkit only emits the notification when the status bar should be hidden. */
+	statusBar = visible != 0;
+}
+
+void setStatusText(int text) {
+	int length = OS.CFStringGetLength(text);
+	if (length == 0) return;
+	char[] buffer = new char[length];
+	CFRange range = new CFRange();
+	range.length = length;
+	OS.CFStringGetCharacters(text, range, buffer);
+
+	StatusTextEvent statusText = new StatusTextEvent(browser);
+	statusText.display = browser.getDisplay();
+	statusText.widget = browser;
+	statusText.text = new String(buffer);
+	for (int i = 0; i < statusTextListeners.length; i++) {
+		statusTextListeners[i].changed(statusText);
+	}
+}
+
+void setResizable(int visible) {
+}
+
+void setToolbarsVisible(int visible) {
+	/* Note.  Webkit only emits the notification when the tool bar should be hidden. */
+	toolBar = visible != 0;
+}
+
+void mouseDidMoveOverElement (int elementInformation, int modifierFlags) {
+	if (elementInformation == 0) return;
+	if (!browser.isEnabled ()) return;
+
+	int length = WebElementLinkURLKey.length();
+	char[] chars = new char[length];
+	WebElementLinkURLKey.getChars(0, length, chars, 0);
+	int key = OS.CFStringCreateWithCharacters(0, chars, length);
+	int value = Cocoa.objc_msgSend(elementInformation, Cocoa.S_valueForKey, key);
+	OS.CFRelease(key);
+	if (value == 0) {
+		/* not currently over a link */
+		if (lastHoveredLinkURL == null) return;
+		lastHoveredLinkURL = null;
+		StatusTextEvent statusText = new StatusTextEvent(browser);
+		statusText.display = browser.getDisplay();
+		statusText.widget = browser;
+		statusText.text = "";	//$NON-NLS-1$
+		for (int i = 0; i < statusTextListeners.length; i++) {
+			statusTextListeners[i].changed(statusText);
+		}
+		return;
+	}
+
+	int stringPtr = Cocoa.objc_msgSend(value, Cocoa.S_absoluteString);
+	length = OS.CFStringGetLength(stringPtr);
+	String urlString;
+	if (length == 0) {
+		urlString = "";	//$NON-NLS-1$
+	} else {
+		chars = new char[length];
+		CFRange range = new CFRange();
+		range.length = length;
+		OS.CFStringGetCharacters(stringPtr, range, chars);
+		urlString = new String(chars);
+	}
+	if (urlString.equals(lastHoveredLinkURL)) return;
+
+	lastHoveredLinkURL = urlString;
+	StatusTextEvent statusText = new StatusTextEvent(browser);
+	statusText.display = browser.getDisplay();
+	statusText.widget = browser;
+	statusText.text = urlString;
+	for (int i = 0; i < statusTextListeners.length; i++) {
+		statusTextListeners[i].changed(statusText);
+	}
+}
+
+/* PolicyDelegate */
+
+void decidePolicyForMIMEType(int type, int request, int frame, int listener) {
+	boolean canShow = Cocoa.objc_msgSend(Cocoa.C_WebView, Cocoa.S_canShowMIMEType, type) != 0;
+	Cocoa.objc_msgSend(listener, canShow ? Cocoa.S_use : Cocoa.S_download);
+}
+
+void decidePolicyForNavigationAction(int actionInformation, int request, int frame, int listener) {
+	int url = Cocoa.objc_msgSend(request, Cocoa.S_URL);
+	if (url == 0) {
+		/* indicates that a URL with an invalid format was specified */
+		Cocoa.objc_msgSend(listener, Cocoa.S_ignore);
+		return;
+	}
+	int s = Cocoa.objc_msgSend(url, Cocoa.S_absoluteString);
+	int length = OS.CFStringGetLength(s);
+	char[] buffer = new char[length];
+	CFRange range = new CFRange();
+	range.length = length;
+	OS.CFStringGetCharacters(s, range, buffer);
+	String url2 = new String(buffer);
+	/*
+	 * If the URI indicates that the page is being rendered from memory
+	 * (via setText()) then set it to about:blank to be consistent with IE.
+	 */
+	if (url2.equals (URI_FROMMEMORY)) url2 = ABOUT_BLANK;
+
+	if (url2.startsWith (URI_APPLEWEBDATA)) {
+		/* listeners should not be notified of internal transitions like this */
+		Cocoa.objc_msgSend(listener, Cocoa.S_use);
+	} else {
+		LocationEvent newEvent = new LocationEvent(browser);
+		newEvent.display = browser.getDisplay();
+		newEvent.widget = browser;
+		newEvent.location = url2;
+		newEvent.doit = true;
+		if (locationListeners != null) {
+			changingLocation = true;
+			for (int i = 0; i < locationListeners.length; i++) {
+				locationListeners[i].changing(newEvent);
+			}
+			changingLocation = false;
+		}
+		if (newEvent.doit) {
+			if (jsEnabledChanged) {
+				jsEnabledChanged = false;
+				if (preferences == 0) {
+					preferences = Cocoa.objc_msgSend (Cocoa.C_WebPreferences, Cocoa.S_alloc);
+					Cocoa.objc_msgSend (preferences, Cocoa.S_init);
+					Cocoa.objc_msgSend (webView, Cocoa.S_setPreferences, preferences);
+				}
+				Cocoa.objc_msgSend (preferences, Cocoa.S_setJavaScriptEnabled, jsEnabled ? 1 : 0);
+			}
+			lastNavigateURL = url2;
+		}
+		Cocoa.objc_msgSend(listener, newEvent.doit ? Cocoa.S_use : Cocoa.S_ignore);
+	}
+
+	if (html != null && !browser.isDisposed()) {
+		String html = this.html;
+		this.html = null;
+		_setText(html);
+	}
+}
+
+void decidePolicyForNewWindowAction(int actionInformation, int request, int frameName, int listener) {
+	Cocoa.objc_msgSend(listener, Cocoa.S_use);
+}
+
+void unableToImplementPolicyWithError(int error, int frame) {
+}
+
+/* WebDownload */
+
+void decideDestinationWithSuggestedFilename (int download, int filename) {
+	int length = OS.CFStringGetLength(filename);
+	char[] buffer = new char[length];
+	CFRange range = new CFRange();
+	range.length = length;
+	OS.CFStringGetCharacters(filename, range, buffer);
+	String name = new String(buffer);
+
+	/*
+	* Bug in Safari.  As of OSX 10.5.5, showing the file dialog here invokes this
+	* callback a second time when the file dialog runs the event loop, which
+	* always leads to a crash.  The workaround is to choose a location to save
+	* the file without showing the file dialog. 
+	*/
+	String path = null;
+	if (OS.VERSION >= 0x1055) {
+		int array = Cocoa.NSSearchPathForDirectoriesInDomains (Cocoa.NSDesktopDirectory, Cocoa.NSAllDomainsMask, true);
+		int count = Cocoa.objc_msgSend (array, Cocoa.S_count);
+		if (count == 0) { /* should never happen */
+			array = Cocoa.NSSearchPathForDirectoriesInDomains (Cocoa.NSDownloadsDirectory, Cocoa.NSAllDomainsMask, true);
+			count = Cocoa.objc_msgSend (array, Cocoa.S_count);
+			if (count == 0) {
+				array = Cocoa.NSSearchPathForDirectoriesInDomains (Cocoa.NSDocumentDirectory, Cocoa.NSAllDomainsMask, true);
+				count = Cocoa.objc_msgSend (array, Cocoa.S_count);
+				if (count == 0) {
+					Cocoa.objc_msgSend (download, Cocoa.S_cancel);
+					return;
+				}
+			}
+		}
+		int string = Cocoa.objc_msgSend (array, Cocoa.S_objectAtIndex, 0);
+		length = OS.CFStringGetLength (string);
+		buffer = new char[length];
+		range = new CFRange ();
+		range.length = length;
+		OS.CFStringGetCharacters (string, range, buffer);
+		path = new String (buffer) + '/' + name;
+	} else {
+		FileDialog dialog = new FileDialog(browser.getShell(), SWT.SAVE);
+		dialog.setText(SWT.getMessage ("SWT_FileDownload")); //$NON-NLS-1$
+		dialog.setFileName(name);
+		path = dialog.open();
+	}
+
+	if (path == null) {
+		/* cancel pressed */
+		Cocoa.objc_msgSend(download, Cocoa.S_cancel);
+		return;
+	}
+	length = path.length();
+	char[] chars = new char[length];
+	path.getChars(0, length, chars, 0);
+	int result = OS.CFStringCreateWithCharacters(0, chars, length);
+	Cocoa.objc_msgSend(download, Cocoa.S_setDestinationAllowOverwrite, result, 1);
+	OS.CFRelease(result);
+}
+
+/* DOMEventListener */
+
+void handleEvent(int evt) {
+	if (!browser.isEnabled ()) return;
+
+	int type = Cocoa.objc_msgSend(evt, Cocoa.S_type);
+	int length = OS.CFStringGetLength(type);
+	char[] buffer = new char[length];
+	CFRange range = new CFRange();
+	range.length = length;
+	OS.CFStringGetCharacters(type, range, buffer);
+	String typeString = new String(buffer);
+
+	if (typeString.equals(DOMEVENT_FOCUSIN)) {
+		hasNewFocusElement = true;
+		return;
+	}
+	if (typeString.equals(DOMEVENT_FOCUSOUT)) {
+		hasNewFocusElement = false;
+		return;
+	}
+
+	boolean ctrl = Cocoa.objc_msgSend(evt, Cocoa.S_ctrlKey) != 0;
+	boolean shift = Cocoa.objc_msgSend(evt, Cocoa.S_shiftKey) != 0;
+	boolean alt = Cocoa.objc_msgSend(evt, Cocoa.S_altKey) != 0;
+	boolean meta = Cocoa.objc_msgSend(evt, Cocoa.S_metaKey) != 0;
+
+	if (DOMEVENT_KEYDOWN.equals(typeString) || DOMEVENT_KEYUP.equals(typeString)) {
+		int keyCode = Cocoa.objc_msgSend(evt, Cocoa.S_keyCode);
+		int charCode = Cocoa.objc_msgSend(evt, Cocoa.S_charCode);
+
+		Event keyEvent = new Event();
+		keyEvent.widget = browser;
+		if (DOMEVENT_KEYDOWN.equals(typeString)) {
+			keyEvent.type = SWT.KeyDown;
+		} else {
+			keyEvent.type = SWT.KeyUp;
+		}
+		keyEvent.keyCode = translateKey(keyCode);
+		/*
+		* Safari maps the Delete key's character to 0xf728.  Detect
+		* this key and set its character to SWT.DEL so that the
+		* Browser's key events are consistent with other controls.
+		*/
+		if (keyEvent.keyCode == SWT.DEL) {
+			keyEvent.character = SWT.DEL;
+		} else {
+			keyEvent.character = (char)charCode;
+		}
+		keyEvent.stateMask = (alt ? SWT.ALT : 0) | (ctrl ? SWT.CTRL : 0) | (shift ? SWT.SHIFT : 0) | (meta ? SWT.COMMAND : 0);
+		browser.notifyListeners(keyEvent.type, keyEvent);
+		if (browser.isDisposed()) {
+			Cocoa.objc_msgSend(evt, Cocoa.S_preventDefault);
+			return;
+		}
+
+		boolean doit = keyEvent.doit;
+		/*
+		* Bug in Safari.  As a result of using HIWebViewCreate on OSX versions < 10.5 (Leopard), attempting
+		* to traverse out of Safari backwards (Shift+Tab) leaves it in a strange state where Safari no
+		* longer has focus but still receives keys.  The Carbon-based Safari examples have the same
+		* problem.  The workaround is to only allow forward Tab traversals in the Browser on OSX < 10.5.
+		*/
+		if (doit && OS.VERSION < 0x1050 && keyEvent.keyCode == SWT.TAB && (keyEvent.stateMask & SWT.SHIFT) != 0) {
+			doit = false;
+		}
+		if (!doit) {
+			Cocoa.objc_msgSend(evt, Cocoa.S_preventDefault);
+		} else {
+			if (!hasNewFocusElement && keyEvent.keyCode == SWT.TAB && DOMEVENT_KEYUP.equals(typeString)) {
+				browser.traverse(SWT.TRAVERSE_TAB_NEXT);
+				hasNewFocusElement = false;
+			}
+		}
+		return;
+	}
+
+	/* mouse event */
+
+	int clientX = Cocoa.objc_msgSend(evt, Cocoa.S_clientX);
+	int clientY = Cocoa.objc_msgSend(evt, Cocoa.S_clientY);
+	int detail = Cocoa.objc_msgSend(evt, Cocoa.S_detail);
+
+	Event mouseEvent = new Event ();
+	mouseEvent.widget = browser;
+	mouseEvent.x = clientX; mouseEvent.y = clientY;
+	mouseEvent.stateMask = (alt ? SWT.ALT : 0) | (ctrl ? SWT.CTRL : 0) | (shift ? SWT.SHIFT : 0) | (meta ? SWT.COMMAND : 0);
+
+	if (DOMEVENT_MOUSEDOWN.equals (typeString)) {
+		mouseEvent.type = SWT.MouseDown;
+		int button = Cocoa.objc_msgSend(evt, Cocoa.S_button);
+		mouseEvent.button = button + 1;
+		mouseEvent.count = detail;
+	} else if (DOMEVENT_MOUSEUP.equals (typeString)) {
+		mouseEvent.type = SWT.MouseUp;
+		int button = Cocoa.objc_msgSend(evt, Cocoa.S_button);
+		mouseEvent.button = button + 1;
+		mouseEvent.count = detail;
+		switch (mouseEvent.button) {
+			case 1: mouseEvent.stateMask |= SWT.BUTTON1; break;
+			case 2: mouseEvent.stateMask |= SWT.BUTTON2; break;
+			case 3: mouseEvent.stateMask |= SWT.BUTTON3; break;
+			case 4: mouseEvent.stateMask |= SWT.BUTTON4; break;
+			case 5: mouseEvent.stateMask |= SWT.BUTTON5; break;
+		}
+	} else if (DOMEVENT_MOUSEMOVE.equals (typeString)) {
+		/*
+		* Feature in Safari.  Spurious and redundant mousemove events are received in
+		* various contexts, including following every MouseUp.  The workaround is to
+		* not fire MouseMove events whose x and y values match the last MouseMove.  
+		*/
+		if (mouseEvent.x == lastMouseMoveX && mouseEvent.y == lastMouseMoveY) return;
+		mouseEvent.type = SWT.MouseMove;
+		lastMouseMoveX = mouseEvent.x; lastMouseMoveY = mouseEvent.y;
+	} else if (DOMEVENT_MOUSEWHEEL.equals (typeString)) {
+		mouseEvent.type = SWT.MouseWheel;
+		int delta = Cocoa.objc_msgSend(evt, Cocoa.S_wheelDelta);
+		mouseEvent.count = delta / 120;
+	}
+
+	browser.notifyListeners (mouseEvent.type, mouseEvent);
+	if (browser.isDisposed()) return;
+	if (detail == 2 && DOMEVENT_MOUSEDOWN.equals (typeString)) {
+		int button = Cocoa.objc_msgSend(evt, Cocoa.S_button);
+		mouseEvent = new Event ();
+		mouseEvent.widget = browser;
+		mouseEvent.x = clientX; mouseEvent.y = clientY;
+		mouseEvent.stateMask = (alt ? SWT.ALT : 0) | (ctrl ? SWT.CTRL : 0) | (shift ? SWT.SHIFT : 0) | (meta ? SWT.COMMAND : 0);
+		mouseEvent.type = SWT.MouseDoubleClick;
+		mouseEvent.button = button + 1;
+		mouseEvent.count = detail;
+		browser.notifyListeners (mouseEvent.type, mouseEvent);
+	}
+}
+
+/* external */
+
+Object convertToJava (int value) {
+	if (Cocoa.objc_msgSend (value, Cocoa.S_isKindOfClass, Cocoa.C_NSString) != 0) {
+		int length = Cocoa.objc_msgSend (value, Cocoa.S_length);
+		char[] buffer = new char[length];
+		Cocoa.objc_msgSend (value, Cocoa.S_getCharacters_, buffer);
+		return new String (buffer);
+	}
+	if (Cocoa.objc_msgSend (value, Cocoa.S_isKindOfClass, Cocoa.C_NSNumber) != 0) {
+		int ptr = Cocoa.objc_msgSend (value, Cocoa.S_objCType);
+		byte[] type = new byte[1];
+		OS.memmove (type, ptr, 1);
+		if (type[0] == 'c' || type[0] == 'B') {
+			int result = Cocoa.objc_msgSend (value, Cocoa.S_boolValue);
+			return new Boolean (result != 0);
+		}
+		if ("islqISLQfd".indexOf (type[0]) != -1) { //$NON-NLS-1$
+			double result = Cocoa.objc_msgSend_fpret (value, Cocoa.S_doubleValue);
+			return new Double (result);
+		}
+	}
+	if (Cocoa.objc_msgSend (value, Cocoa.S_isKindOfClass, Cocoa.C_WebScriptObject) != 0) {
+		String string = "length"; //$NON-NLS-1$
+		char[] chars = new char[string.length ()];
+		string.getChars (0, chars.length, chars, 0);
+		int str = OS.CFStringCreateWithCharacters (0, chars, chars.length);
+		int numberValue = Cocoa.objc_msgSend (value, Cocoa.S_valueForKey, str);
+		OS.CFRelease (str);
+		int length = Cocoa.objc_msgSend (numberValue, Cocoa.S_intValue);
+		Object[] arguments = new Object[length];
+		for (int i = 0; i < length; i++) {
+			int current = Cocoa.objc_msgSend (value, Cocoa.S_webScriptValueAtIndex, i);
+			if (current != 0) {
+				arguments[i] = convertToJava (current);
+			}
+		}
+		return arguments;
+	}
+	if (Cocoa.objc_msgSend (value, Cocoa.S_isKindOfClass, Cocoa.C_WebUndefined) != 0) {
+		return null;
+	}
+
+	SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	return null;
+}
+
+int convertToJS (Object value) {
+	if (value == null) {
+		return Cocoa.objc_msgSend (Cocoa.C_WebUndefined, Cocoa.S_undefined);
+	}
+	if (value instanceof String) {
+		String result = (String)value;
+		char[] chars = new char[result.length ()];
+		result.getChars (0, chars.length, chars, 0);
+		return OS.CFStringCreateWithCharacters (0, chars, chars.length);
+	}
+	if (value instanceof Boolean) {
+		int booleanValue = ((Boolean)value).booleanValue () ? 1 : 0;
+		return Cocoa.objc_msgSend (Cocoa.C_NSNumber, Cocoa.S_numberWithBool, booleanValue);
+	}
+	if (value instanceof Number) {
+		double doubleValue = ((Number)value).doubleValue ();
+		return Cocoa.objc_msgSend (Cocoa.C_NSNumber, Cocoa.S_numberWithDouble, doubleValue);
+	}
+	if (value instanceof Object[]) {
+		Object[] arrayValue = (Object[])value;
+		int length = arrayValue.length;
+		if (length > 0) {
+			int array = Cocoa.objc_msgSend (Cocoa.C_NSMutableArray, Cocoa.S_arrayWithCapacity, length);
+			for (int i = 0; i < length; i++) {
+				Object currentObject = arrayValue[i];
+				int jsObject = convertToJS (currentObject);
+				Cocoa.objc_msgSend (array, Cocoa.S_addObject, jsObject);
+			}
+			return array;
+		}
+	}
+	SWT.error (SWT.ERROR_INVALID_RETURN_VALUE);
+	return 0;
+}
+
+int /*long*/ callJava (int /*long*/ index, int /*long*/ args, int /*long*/ arg1) {
+	Object returnValue = null;
+	if (Cocoa.objc_msgSend (index, Cocoa.S_isKindOfClass, Cocoa.C_NSNumber) != 0) {
+		int functionIndex = Cocoa.objc_msgSend (index, Cocoa.S_intValue);
+		Object key = new Integer (functionIndex);
+		BrowserFunction function = (BrowserFunction)functions.get (key);
+		if (function != null) {
+			try {
+				Object temp = convertToJava (args);
+				if (temp instanceof Object[]) {
+					Object[] arguments = (Object[])temp;
+					try {
+						returnValue = function.function (arguments);
+					} catch (Exception e) {
+						/* exception during function invocation */
+						returnValue = WebBrowser.CreateErrorString (e.getLocalizedMessage ());
+					}
+				}
+			} catch (IllegalArgumentException e) {
+				/* invalid argument value type */
+				if (function.isEvaluate) {
+					/* notify the evaluate function so that a java exception can be thrown */
+					function.function (new String[] {WebBrowser.CreateErrorString (new SWTException (SWT.ERROR_INVALID_RETURN_VALUE).getLocalizedMessage ())});
+				}
+				returnValue = WebBrowser.CreateErrorString (e.getLocalizedMessage ());
+			}
+		}
+	}
+	try {
+		return convertToJS (returnValue);
+	} catch (SWTException e) {
+		return convertToJS (WebBrowser.CreateErrorString (e.getLocalizedMessage ()));
+	}
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/cocoa/org/eclipse/swt/browser/Safari.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/cocoa/org/eclipse/swt/browser/Safari.java
new file mode 100755
index 0000000..24c7206
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/cocoa/org/eclipse/swt/browser/Safari.java
@@ -0,0 +1,1572 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.browser;
+
+import java.util.Enumeration;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.cocoa.*;
+import org.eclipse.swt.layout.*;
+import org.eclipse.swt.widgets.*;
+
+class Safari extends WebBrowser {
+	WebView webView;
+	WebPreferences preferences;
+	SWTWebViewDelegate delegate;
+	boolean changingLocation;
+	String lastHoveredLinkURL, lastNavigateURL;
+	String html;
+	int /*long*/ identifier;
+	int resourceCount;
+	String url = ""; //$NON-NLS-1$
+	Point location;
+	Point size;
+	boolean statusBar = true, toolBar = true, ignoreDispose;
+	int lastMouseMoveX, lastMouseMoveY;
+	//TEMPORARY CODE
+//	boolean doit;
+
+	static int /*long*/ delegateClass;
+	static boolean Initialized;
+	// the following Callbacks are never freed
+	static Callback Callback3, Callback4, Callback5, Callback6, Callback7;
+
+	static final int MIN_SIZE = 16;
+	static final int MAX_PROGRESS = 100;
+	static final String WebElementLinkURLKey = "WebElementLinkURL"; //$NON-NLS-1$
+	static final String AGENT_STRING = "Safari/unknown"; //$NON-NLS-1$
+	static final String URI_FROMMEMORY = "file:///"; //$NON-NLS-1$
+	static final String PROTOCOL_FILE = "file://"; //$NON-NLS-1$
+	static final String PROTOCOL_HTTP = "http://"; //$NON-NLS-1$
+	static final String ABOUT_BLANK = "about:blank"; //$NON-NLS-1$
+	static final String HEADER_SETCOOKIE = "Set-Cookie"; //$NON-NLS-1$
+	static final String ADD_WIDGET_KEY = "org.eclipse.swt.internal.addWidget"; //$NON-NLS-1$
+	static final String SAFARI_EVENTS_FIX_KEY = "org.eclipse.swt.internal.safariEventsFix"; //$NON-NLS-1$
+	static final byte[] SWT_OBJECT = {'S', 'W', 'T', '_', 'O', 'B', 'J', 'E', 'C', 'T', '\0'};
+
+	/* event strings */
+	static final String DOMEVENT_KEYUP = "keyup"; //$NON-NLS-1$
+	static final String DOMEVENT_KEYDOWN = "keydown"; //$NON-NLS-1$
+	static final String DOMEVENT_MOUSEDOWN = "mousedown"; //$NON-NLS-1$
+	static final String DOMEVENT_MOUSEUP = "mouseup"; //$NON-NLS-1$
+	static final String DOMEVENT_MOUSEMOVE = "mousemove"; //$NON-NLS-1$
+	static final String DOMEVENT_MOUSEWHEEL = "mousewheel"; //$NON-NLS-1$
+
+	static {
+		NativeClearSessions = new Runnable() {
+			public void run() {
+				NSHTTPCookieStorage storage = NSHTTPCookieStorage.sharedHTTPCookieStorage();
+				NSArray cookies = storage.cookies();
+				int count = (int)/*64*/cookies.count ();
+				for (int i = 0; i < count; i++) {
+					NSHTTPCookie cookie = new NSHTTPCookie(cookies.objectAtIndex(i));
+					if (cookie.isSessionOnly()) {
+						storage.deleteCookie(cookie);
+					}
+				}
+			}
+		};
+
+		NativeGetCookie = new Runnable () {
+			public void run () {
+				NSHTTPCookieStorage storage = NSHTTPCookieStorage.sharedHTTPCookieStorage ();
+				NSURL url = NSURL.URLWithString (NSString.stringWith (CookieUrl));
+				NSArray cookies = storage.cookiesForURL (url);
+				int count = (int)/*64*/cookies.count ();
+				if (count == 0) return;
+
+				NSString name = NSString.stringWith (CookieName);
+				for (int i = 0; i < count; i++) {
+					NSHTTPCookie current = new NSHTTPCookie (cookies.objectAtIndex (i));
+					if (current.name ().compare (name) == OS.NSOrderedSame) {
+						CookieValue = current.value ().getString ();
+						return;
+					}
+				}
+			}
+		};
+
+		NativeSetCookie = new Runnable () {
+			public void run () {
+				NSURL url = NSURL.URLWithString (NSString.stringWith (CookieUrl));
+				NSMutableDictionary headers = NSMutableDictionary.dictionaryWithCapacity (1);
+				headers.setValue (NSString.stringWith (CookieValue), NSString.stringWith (HEADER_SETCOOKIE));
+				NSArray cookies = NSHTTPCookie.cookiesWithResponseHeaderFields (headers, url);
+				if (cookies.count () == 0) return;
+				NSHTTPCookieStorage storage = NSHTTPCookieStorage.sharedHTTPCookieStorage ();
+				NSHTTPCookie cookie = new NSHTTPCookie (cookies.objectAtIndex (0));
+				storage.setCookie (cookie);
+				CookieResult = true;
+			}
+		};	
+	}
+
+public void create (Composite parent, int style) {
+	if (delegateClass == 0) {
+		Class safariClass = this.getClass();
+		Callback3 = new Callback(safariClass, "browserProc", 3); //$NON-NLS-1$
+		int /*long*/ proc3 = Callback3.getAddress();
+		if (proc3 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+		Callback4 = new Callback(safariClass, "browserProc", 4); //$NON-NLS-1$
+		int /*long*/ proc4 = Callback4.getAddress();
+		if (proc4 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+		Callback5 = new Callback(safariClass, "browserProc", 5); //$NON-NLS-1$
+		int /*long*/ proc5 = Callback5.getAddress();
+		if (proc5 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+		Callback6 = new Callback(safariClass, "browserProc", 6); //$NON-NLS-1$
+		int /*long*/ proc6 = Callback6.getAddress();
+		if (proc6 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+		Callback7 = new Callback(safariClass, "browserProc", 7); //$NON-NLS-1$
+		int /*long*/ proc7 = Callback7.getAddress();
+		if (proc7 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+		int /*long*/ setFrameProc = OS.CALLBACK_webView_setFrame_(proc4);
+		if (setFrameProc == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+
+		String className = "SWTWebViewDelegate"; //$NON-NLS-1$
+		byte[] types = {'*','\0'};
+		int size = C.PTR_SIZEOF, align = C.PTR_SIZEOF == 4 ? 2 : 3;
+		delegateClass = OS.objc_allocateClassPair (OS.class_NSObject, className, 0);
+
+		OS.class_addIvar(delegateClass, SWT_OBJECT, size, (byte)align, types);
+		OS.class_addMethod(delegateClass, OS.sel_webView_didChangeLocationWithinPageForFrame_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_didFailProvisionalLoadWithError_forFrame_, proc5, "@:@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_didFinishLoadForFrame_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_didReceiveTitle_forFrame_, proc5, "@:@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_didStartProvisionalLoadForFrame_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_didCommitLoadForFrame_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_resource_didFinishLoadingFromDataSource_, proc5, "@:@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_resource_didReceiveAuthenticationChallenge_fromDataSource_, proc6, "@:@@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_resource_didFailLoadingWithError_fromDataSource_, proc6, "@:@@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_identifierForInitialRequest_fromDataSource_, proc5, "@:@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_resource_willSendRequest_redirectResponse_fromDataSource_, proc7, "@:@@@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_createWebViewWithRequest_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webViewShow_, proc3, "@:@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webViewClose_, proc3, "@:@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_contextMenuItemsForElement_defaultMenuItems_, proc5, "@:@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_setStatusBarVisible_, proc4, "@:@B"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_setResizable_, proc4, "@:@B"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_setToolbarsVisible_, proc4, "@:@B"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_setStatusText_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webViewFocus_, proc3, "@:@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webViewUnfocus_, proc3, "@:@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_runJavaScriptAlertPanelWithMessage_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_runJavaScriptConfirmPanelWithMessage_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_runOpenPanelForFileButtonWithResultListener_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_mouseDidMoveOverElement_modifierFlags_, proc5, "@:@@I"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_printFrameView_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_decidePolicyForMIMEType_request_frame_decisionListener_, proc7, "@:@@@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_decidePolicyForNavigationAction_request_frame_decisionListener_, proc7, "@:@@@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_decidePolicyForNewWindowAction_request_newFrameName_decisionListener_, proc7, "@:@@@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_unableToImplementPolicyWithError_frame_, proc5, "@:@@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_download_decideDestinationWithSuggestedFilename_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_handleEvent_, proc3, "@:@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_setFrame_, setFrameProc, "@:@{NSRect}"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_webView_windowScriptObjectAvailable_, proc4, "@:@@"); //$NON-NLS-1$
+		OS.class_addMethod(delegateClass, OS.sel_callJava, proc5, "@:@@@"); //$NON-NLS-1$
+		OS.objc_registerClassPair(delegateClass);
+
+ 		int /*long*/ metaClass = OS.objc_getMetaClass (className);
+		OS.class_addMethod(metaClass, OS.sel_isSelectorExcludedFromWebScript_, proc3, "@:@"); //$NON-NLS-1$
+		OS.class_addMethod(metaClass, OS.sel_webScriptNameForSelector_, proc3, "@:@"); //$NON-NLS-1$
+	}
+
+	/*
+	* Override the default event mechanism to not send key events so
+	* that the browser can send them by listening to the DOM instead.
+	*/
+	browser.setData(SAFARI_EVENTS_FIX_KEY);
+
+	WebView webView = (WebView)new WebView().alloc();
+	if (webView == null) SWT.error(SWT.ERROR_NO_HANDLES);
+	webView.initWithFrame(browser.view.frame(), null, null);
+	webView.setAutoresizingMask(OS.NSViewWidthSizable | OS.NSViewHeightSizable);
+	final SWTWebViewDelegate delegate = (SWTWebViewDelegate)new SWTWebViewDelegate().alloc().init();
+	Display display = browser.getDisplay();
+	display.setData(ADD_WIDGET_KEY, new Object[] {delegate, browser});
+	this.delegate = delegate;
+	this.webView = webView;
+	browser.view.addSubview(webView);
+
+	Listener listener = new Listener() {
+		public void handleEvent(Event e) {
+			switch (e.type) {
+				case SWT.FocusIn:
+					Safari.this.webView.window().makeFirstResponder(Safari.this.webView);
+					break;
+				case SWT.Dispose: {
+					/* make this handler run after other dispose listeners */
+					if (ignoreDispose) {
+						ignoreDispose = false;
+						break;
+					}
+					ignoreDispose = true;
+					browser.notifyListeners (e.type, e);
+					e.type = SWT.NONE;
+
+					e.display.setData(ADD_WIDGET_KEY, new Object[] {delegate, null});
+
+					Safari.this.webView.setFrameLoadDelegate(null);
+					Safari.this.webView.setResourceLoadDelegate(null);
+					Safari.this.webView.setUIDelegate(null);
+					Safari.this.webView.setPolicyDelegate(null);
+					Safari.this.webView.setDownloadDelegate(null);
+
+					Safari.this.webView.release();
+					Safari.this.webView = null;
+					Safari.this.delegate.release();
+					Safari.this.delegate = null;
+					html = null;
+					lastHoveredLinkURL = lastNavigateURL = null;
+
+					Enumeration elements = functions.elements ();
+					while (elements.hasMoreElements ()) {
+						((BrowserFunction)elements.nextElement ()).dispose (false);
+					}
+					functions = null;
+
+					if (preferences != null) preferences.release ();
+					preferences = null;
+					break;
+				}
+			}
+		}
+	};
+	browser.addListener(SWT.Dispose, listener);
+	/* Needed to be able to tab into the browser */
+	browser.addListener(SWT.KeyDown, listener);
+	browser.addListener(SWT.FocusIn, listener);
+
+	webView.setFrameLoadDelegate(delegate);
+	webView.setResourceLoadDelegate(delegate);
+	webView.setUIDelegate(delegate);	
+	webView.setPolicyDelegate(delegate);
+	webView.setDownloadDelegate(delegate);
+	webView.setApplicationNameForUserAgent(NSString.stringWith(AGENT_STRING));
+
+	if (!Initialized) {
+		Initialized = true;
+		/* disable applets */
+		WebPreferences.standardPreferences().setJavaEnabled(false);
+	}
+}
+
+public boolean back() {
+	html = null;	
+	return webView.goBack();
+}
+
+static int /*long*/ browserProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	if (id == delegateClass) {
+		if (sel == OS.sel_isSelectorExcludedFromWebScript_) {
+			return isSelectorExcludedFromWebScript (arg0) ? 1 : 0;
+		} else if (sel == OS.sel_webScriptNameForSelector_) {
+			return webScriptNameForSelector (arg0);
+		}
+	}
+
+	Widget widget = Display.getCurrent().findWidget(id);
+	if (widget == null) return 0;
+	Safari safari = (Safari)((Browser)widget).webBrowser;
+	if (sel == OS.sel_webViewShow_) {
+		safari.webViewShow(arg0);
+	} else if (sel == OS.sel_webViewClose_) {
+		safari.webViewClose(arg0);
+	} else if (sel == OS.sel_webViewFocus_) {
+		safari.webViewFocus(arg0);
+	} else if (sel == OS.sel_webViewUnfocus_) {
+		safari.webViewUnfocus(arg0);
+	} else if (sel == OS.sel_handleEvent_) {
+		safari.handleEvent(arg0);
+	}
+	return 0;
+}
+
+static int /*long*/ browserProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
+	Widget widget = Display.getCurrent().findWidget(id);
+	if (widget == null) return 0;
+	Safari safari = (Safari)((Browser)widget).webBrowser;
+	if (sel == OS.sel_webView_didChangeLocationWithinPageForFrame_) {
+		safari.webView_didChangeLocationWithinPageForFrame(arg0, arg1);
+	} else if (sel == OS.sel_webView_didFinishLoadForFrame_) {
+		safari.webView_didFinishLoadForFrame(arg0, arg1);
+	} else if (sel == OS.sel_webView_didStartProvisionalLoadForFrame_) {
+		safari.webView_didStartProvisionalLoadForFrame(arg0, arg1);
+	} else if (sel == OS.sel_webView_didCommitLoadForFrame_) {
+		safari.webView_didCommitLoadForFrame(arg0, arg1);
+	} else if (sel == OS.sel_webView_setFrame_) {
+		safari.webView_setFrame(arg0, arg1);
+	} else if (sel == OS.sel_webView_createWebViewWithRequest_) {
+		return safari.webView_createWebViewWithRequest(arg0, arg1);		
+	} else if (sel == OS.sel_webView_setStatusBarVisible_) {
+		safari.webView_setStatusBarVisible(arg0, arg1 != 0);
+	} else if (sel == OS.sel_webView_setResizable_) {
+		safari.webView_setResizable(arg0, arg1 != 0);
+	} else if (sel == OS.sel_webView_setStatusText_) {
+		safari.webView_setStatusText(arg0, arg1);
+	} else if (sel == OS.sel_webView_setToolbarsVisible_) {
+		safari.webView_setToolbarsVisible(arg0, arg1 != 0);
+	} else if (sel == OS.sel_webView_runJavaScriptAlertPanelWithMessage_) {
+		safari.webView_runJavaScriptAlertPanelWithMessage(arg0, arg1);
+	} else if (sel == OS.sel_webView_runJavaScriptConfirmPanelWithMessage_) {
+		return safari.webView_runJavaScriptConfirmPanelWithMessage(arg0, arg1);
+	} else if (sel == OS.sel_webView_runOpenPanelForFileButtonWithResultListener_) {
+		safari.webView_runOpenPanelForFileButtonWithResultListener(arg0, arg1);
+	} else if (sel == OS.sel_download_decideDestinationWithSuggestedFilename_) {
+		safari.download_decideDestinationWithSuggestedFilename(arg0, arg1);
+	} else if (sel == OS.sel_webView_printFrameView_) {
+		safari.webView_printFrameView(arg0, arg1);
+	} else if (sel == OS.sel_webView_windowScriptObjectAvailable_) {
+		safari.webView_windowScriptObjectAvailable (arg0, arg1);
+	}
+	return 0;
+}
+
+static int /*long*/ browserProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2) {
+	Widget widget = Display.getCurrent().findWidget(id);
+	if (widget == null) return 0;
+	Safari safari = (Safari)((Browser)widget).webBrowser;
+	if (sel == OS.sel_webView_didFailProvisionalLoadWithError_forFrame_) {
+		safari.webView_didFailProvisionalLoadWithError_forFrame(arg0, arg1, arg2);
+	} else if (sel == OS.sel_webView_didReceiveTitle_forFrame_) {
+		safari.webView_didReceiveTitle_forFrame(arg0, arg1, arg2);
+	} else if (sel == OS.sel_webView_resource_didFinishLoadingFromDataSource_) {
+		safari.webView_resource_didFinishLoadingFromDataSource(arg0, arg1, arg2);
+	} else if (sel == OS.sel_webView_identifierForInitialRequest_fromDataSource_) {
+		return safari.webView_identifierForInitialRequest_fromDataSource(arg0, arg1, arg2);
+	} else if (sel == OS.sel_webView_contextMenuItemsForElement_defaultMenuItems_) {
+		return safari.webView_contextMenuItemsForElement_defaultMenuItems(arg0, arg1, arg2);
+	} else if (sel == OS.sel_webView_mouseDidMoveOverElement_modifierFlags_) {
+		safari.webView_mouseDidMoveOverElement_modifierFlags(arg0, arg1, arg2);
+	} else if (sel == OS.sel_webView_unableToImplementPolicyWithError_frame_) {
+		safari.webView_unableToImplementPolicyWithError_frame(arg0, arg1, arg2);
+	} else if (sel == OS.sel_callJava) {
+		id result = safari.callJava (arg0, arg1, arg2);
+		return result == null ? 0 : result.id;
+	}
+	return 0;
+}
+
+static int /*long*/ browserProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3) {
+	Widget widget = Display.getCurrent().findWidget(id);
+	if (widget == null) return 0;
+	Safari safari = (Safari)((Browser)widget).webBrowser;
+	if (sel == OS.sel_webView_resource_didFailLoadingWithError_fromDataSource_) {
+		safari.webView_resource_didFailLoadingWithError_fromDataSource(arg0, arg1, arg2, arg3);
+	} else if (sel == OS.sel_webView_resource_didReceiveAuthenticationChallenge_fromDataSource_) {
+		safari.webView_resource_didReceiveAuthenticationChallenge_fromDataSource(arg0, arg1, arg2, arg3);
+	}
+	return 0;
+}
+
+static int /*long*/ browserProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3, int /*long*/ arg4) {
+	Widget widget = Display.getCurrent().findWidget(id);
+	if (widget == null) return 0;
+	Safari safari = (Safari)((Browser)widget).webBrowser;
+	if (sel == OS.sel_webView_resource_willSendRequest_redirectResponse_fromDataSource_) {
+		return safari.webView_resource_willSendRequest_redirectResponse_fromDataSource(arg0, arg1, arg2, arg3, arg4);
+	} else if (sel == OS.sel_webView_decidePolicyForMIMEType_request_frame_decisionListener_) {
+		safari.webView_decidePolicyForMIMEType_request_frame_decisionListener(arg0, arg1, arg2, arg3, arg4);
+	} else if (sel == OS.sel_webView_decidePolicyForNavigationAction_request_frame_decisionListener_) {
+		safari.webView_decidePolicyForNavigationAction_request_frame_decisionListener(arg0, arg1, arg2, arg3, arg4);
+	} else if (sel == OS.sel_webView_decidePolicyForNewWindowAction_request_newFrameName_decisionListener_) {
+		safari.webView_decidePolicyForNewWindowAction_request_newFrameName_decisionListener(arg0, arg1, arg2, arg3, arg4);
+	}
+	return 0;
+}
+
+static boolean isSelectorExcludedFromWebScript (int /*long*/ aSelector) {
+	return aSelector != OS.sel_callJava;
+}
+
+static int /*long*/ webScriptNameForSelector (int /*long*/ aSelector) {
+	if (aSelector == OS.sel_callJava) {
+		return NSString.stringWith ("callJava").id; //$NON-NLS-1$
+	}
+	return 0;
+}
+
+public boolean execute (String script) {
+	return webView.stringByEvaluatingJavaScriptFromString (NSString.stringWith (script)) != null;
+}
+
+public boolean forward () {
+	html = null;
+	return webView.goForward();
+}
+
+public String getBrowserType () {
+	return "safari"; //$NON-NLS-1$
+}
+
+public String getText() {
+	WebFrame mainFrame = webView.mainFrame();
+	WebDataSource dataSource = mainFrame.dataSource();
+	if (dataSource == null) return "";	//$NON-NLS-1$
+	WebDocumentRepresentation representation = dataSource.representation();
+	if (representation == null) return "";	//$NON-NLS-1$
+	NSString source = representation.documentSource();
+	if (source == null) return "";	//$NON-NLS-1$
+	return source.getString();
+}
+
+public String getUrl() {
+	return url;
+}
+
+public boolean isBackEnabled() {
+	return webView.canGoBack();
+}
+
+public boolean isForwardEnabled() {
+	return webView.canGoForward();
+}
+
+public void refresh() {
+	webView.reload(null);
+}
+
+public boolean setText(String html) {
+	/*
+	* Bug in Safari.  The web view segment faults in some circumstances
+	* when the text changes during the location changing callback.  The
+	* fix is to defer the work until the callback is done. 
+	*/
+	if (changingLocation) {
+		this.html = html;
+	} else {
+		_setText(html);
+	}
+	return true;
+}
+	
+void _setText(String html) {	
+	NSString string = NSString.stringWith(html);
+	NSString URLString = NSString.stringWith(URI_FROMMEMORY);
+	NSURL URL = NSURL.URLWithString(URLString);
+	WebFrame mainFrame = webView.mainFrame();
+	mainFrame.loadHTMLString(string, URL);
+}
+
+public boolean setUrl(String url) {
+	html = null;
+
+	if (url.indexOf('/') == 0) {
+		url = PROTOCOL_FILE + url;
+	} else if (url.indexOf(':') == -1) {
+		url = PROTOCOL_HTTP + url;
+	}
+
+	NSString str = NSString.stringWith(url);
+	NSString unescapedStr = NSString.stringWith("%#"); //$NON-NLS-1$
+	int /*long*/ ptr = OS.CFURLCreateStringByAddingPercentEscapes(0, str.id, unescapedStr.id, 0, OS.kCFStringEncodingUTF8);
+	NSString escapedString = new NSString(ptr);
+	NSURL inURL = NSURL.URLWithString(escapedString);
+	OS.CFRelease(ptr);
+	NSURLRequest request = NSURLRequest.requestWithURL(inURL);
+	WebFrame mainFrame = webView.mainFrame();
+	mainFrame.loadRequest(request);
+	return true;
+}
+
+public void stop() {
+	html = null;
+	webView.stopLoading(null);
+}
+
+/* WebFrameLoadDelegate */
+
+void webView_didChangeLocationWithinPageForFrame(int /*long*/ sender, int /*long*/ frameID) {
+	WebFrame frame = new WebFrame(frameID);
+	WebDataSource dataSource = frame.dataSource();
+	NSURLRequest request = dataSource.request();
+	NSURL url = request.URL();
+	NSString s = url.absoluteString();
+	int length = (int)/*64*/s.length();
+	if (length == 0) return;
+	String url2 = s.getString();
+	/*
+	 * If the URI indicates that the page is being rendered from memory
+	 * (via setText()) then set it to about:blank to be consistent with IE.
+	 */
+	if (url2.equals (URI_FROMMEMORY)) url2 = ABOUT_BLANK;
+
+	final Display display = browser.getDisplay();
+	boolean top = frameID == webView.mainFrame().id;
+	if (top) {
+		StatusTextEvent statusText = new StatusTextEvent(browser);
+		statusText.display = display;
+		statusText.widget = browser;
+		statusText.text = url2;
+		for (int i = 0; i < statusTextListeners.length; i++) {
+			statusTextListeners[i].changed(statusText);
+		}
+	}
+
+	LocationEvent location = new LocationEvent(browser);
+	location.display = display;
+	location.widget = browser;
+	location.location = url2;
+	location.top = top;
+	for (int i = 0; i < locationListeners.length; i++) {
+		locationListeners[i].changed(location);
+	}
+}
+
+void webView_didFailProvisionalLoadWithError_forFrame(int /*long*/ sender, int /*long*/ error, int /*long*/ frame) {
+	if (frame == webView.mainFrame().id) {
+		/*
+		* Feature on Safari.  The identifier is used here as a marker for the events 
+		* related to the top frame and the URL changes related to that top frame as 
+		* they should appear on the location bar of a browser.  It is expected to reset
+		* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
+		* the identifierForInitialRequest event is received.  However, Safari fires
+		* the didFinishLoadingFromDataSource event before the entire content of the
+		* top frame is loaded.  It is possible to receive multiple willSendRequest 
+		* events in this interval, causing the Browser widget to send unwanted
+		* Location.changing events.  For this reason, the identifier is reset to 0
+		* when the top frame has either finished loading (didFinishLoadForFrame
+		* event) or failed (didFailProvisionalLoadWithError).
+		*/
+		identifier = 0;
+	}
+
+	NSError nserror = new NSError(error);
+	int /*long*/ errorCode = nserror.code();
+	if (errorCode <= OS.NSURLErrorBadURL) {
+		NSString description = nserror.localizedDescription();
+		if (description != null) {
+			String descriptionString = description.getString();
+			String urlString = null;
+			NSDictionary info = nserror.userInfo();
+			if (info != null) {
+				NSString key = new NSString(OS.NSErrorFailingURLStringKey());
+				id id = info.valueForKey(key);
+				if (id != null) {
+					NSString url = new NSString(id);
+					urlString = url.getString();
+				}
+			}
+			String message = urlString != null ? urlString + "\n\n" : ""; //$NON-NLS-1$ //$NON-NLS-2$
+			message += Compatibility.getMessage ("SWT_Page_Load_Failed", new Object[] {descriptionString}); //$NON-NLS-1$
+			MessageBox messageBox = new MessageBox(browser.getShell(), SWT.OK | SWT.ICON_ERROR);
+			messageBox.setMessage(message);
+			messageBox.open();
+		}
+	}
+}
+
+void webView_didFinishLoadForFrame(int /*long*/ sender, int /*long*/ frameID) {
+	hookDOMMouseListeners(frameID);
+	if (frameID == webView.mainFrame().id) {
+		hookDOMKeyListeners(frameID);
+
+		final Display display = browser.getDisplay();
+		/*
+		* To be consistent with other platforms a title event should be fired when a
+		* page has completed loading.  A page with a <title> tag will do this
+		* automatically when the didReceiveTitle callback is received.  However a page
+		* without a <title> tag will not do this by default, so fire the event
+		* here with the page's url as the title.
+		*/
+		WebFrame frame = new WebFrame(frameID);
+		WebDataSource dataSource = frame.dataSource();
+		if (dataSource != null) {
+			NSString title = dataSource.pageTitle();
+			if (title == null) {	/* page has no title */
+				final TitleEvent newEvent = new TitleEvent(browser);
+				newEvent.display = display;
+				newEvent.widget = browser;
+				newEvent.title = url;
+				for (int i = 0; i < titleListeners.length; i++) {
+					final TitleListener listener = titleListeners[i];
+					/*
+					* Note on WebKit.  Running the event loop from a Browser
+					* delegate callback breaks the WebKit (stop loading or
+					* crash).  The workaround is to invoke Display.asyncExec()
+					* so that the Browser does not crash if this is attempted.
+					*/
+					display.asyncExec(
+						new Runnable() {
+							public void run() {
+								if (!display.isDisposed() && !browser.isDisposed()) {
+									listener.changed(newEvent);
+								}
+							}
+						}
+					);
+				}
+			}
+		}
+		final ProgressEvent progress = new ProgressEvent(browser);
+		progress.display = display;
+		progress.widget = browser;
+		progress.current = MAX_PROGRESS;
+		progress.total = MAX_PROGRESS;
+		for (int i = 0; i < progressListeners.length; i++) {
+			final ProgressListener listener = progressListeners[i];
+			/*
+			* Note on WebKit.  Running the event loop from a Browser
+			* delegate callback breaks the WebKit (stop loading or
+			* crash).  The ProgressBar widget currently touches the
+			* event loop every time the method setSelection is called.  
+			* The workaround is to invoke Display.asyncExec() so that
+			* the Browser does not crash when the user updates the 
+			* selection of the ProgressBar.
+			*/
+			display.asyncExec(
+				new Runnable() {
+					public void run() {
+						if (!display.isDisposed() && !browser.isDisposed()) {
+							listener.completed(progress);
+						}
+					}
+				}
+			);
+		}
+
+		/* re-install registered functions */
+		Enumeration elements = functions.elements ();
+		while (elements.hasMoreElements ()) {
+			BrowserFunction function = (BrowserFunction)elements.nextElement ();
+			execute (function.functionString);
+		}
+
+		/*
+		* Feature on Safari.  The identifier is used here as a marker for the events 
+		* related to the top frame and the URL changes related to that top frame as 
+		* they should appear on the location bar of a browser.  It is expected to reset
+		* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
+		* the identifierForInitialRequest event is received.  However, Safari fires
+		* the didFinishLoadingFromDataSource event before the entire content of the
+		* top frame is loaded.  It is possible to receive multiple willSendRequest 
+		* events in this interval, causing the Browser widget to send unwanted
+		* Location.changing events.  For this reason, the identifier is reset to 0
+		* when the top frame has either finished loading (didFinishLoadForFrame
+		* event) or failed (didFailProvisionalLoadWithError).
+		*/
+		identifier = 0;
+	}
+}
+
+void hookDOMKeyListeners(int /*long*/ frameID) {
+	WebFrame frame = new WebFrame(frameID);
+	DOMDocument document = frame.DOMDocument();
+	if (document == null) return;
+
+	NSString type = NSString.stringWith(DOMEVENT_KEYDOWN);
+	document.addEventListener(type, delegate, false);
+
+	type = NSString.stringWith(DOMEVENT_KEYUP);
+	document.addEventListener(type, delegate, false);
+}
+
+void hookDOMMouseListeners(int /*long*/ frameID) {
+	WebFrame frame = new WebFrame(frameID);
+	DOMDocument document = frame.DOMDocument();
+	if (document == null) return;
+
+	NSString type = NSString.stringWith(DOMEVENT_MOUSEDOWN);
+	document.addEventListener(type, delegate, false);
+
+	type = NSString.stringWith(DOMEVENT_MOUSEUP);
+	document.addEventListener(type, delegate, false);
+
+	type = NSString.stringWith(DOMEVENT_MOUSEMOVE);
+	document.addEventListener(type, delegate, false);
+
+	type = NSString.stringWith(DOMEVENT_MOUSEWHEEL);
+	document.addEventListener(type, delegate, false);
+}
+
+void webView_didReceiveTitle_forFrame(int /*long*/ sender, int /*long*/ titleID, int /*long*/ frameID) {
+	if (frameID == webView.mainFrame().id) {
+		NSString title = new NSString(titleID);
+		String newTitle = title.getString();
+		TitleEvent newEvent = new TitleEvent(browser);
+		newEvent.display = browser.getDisplay();
+		newEvent.widget = browser;
+		newEvent.title = newTitle;
+		for (int i = 0; i < titleListeners.length; i++) {
+			titleListeners[i].changed(newEvent);
+		}
+	}
+}
+
+void webView_didStartProvisionalLoadForFrame(int /*long*/ sender, int /*long*/ frameID) {
+	/* 
+	* This code is intentionally commented.  WebFrameLoadDelegate:didStartProvisionalLoadForFrame is
+	* called before WebResourceLoadDelegate:willSendRequest and
+	* WebFrameLoadDelegate:didCommitLoadForFrame.  The resource count is reset when didCommitLoadForFrame
+	* is received for the top frame.
+	*/
+//	if (frameID == webView.mainFrame().id) {
+//		/* reset resource status variables */
+//		resourceCount= 0;
+//	}
+}
+
+void webView_didCommitLoadForFrame(int /*long*/ sender, int /*long*/ frameID) {
+	WebFrame frame = new WebFrame(frameID);
+	WebDataSource dataSource = frame.dataSource();
+	NSURLRequest request = dataSource.request();
+	NSURL url = request.URL();
+	NSString s = url.absoluteString();
+	int length = (int)/*64*/s.length();
+	if (length == 0) return;
+	String url2 = s.getString();
+	/*
+	 * If the URI indicates that the page is being rendered from memory
+	 * (via setText()) then set it to about:blank to be consistent with IE.
+	 */
+	if (url2.equals (URI_FROMMEMORY)) url2 = ABOUT_BLANK;
+
+	final Display display = browser.getDisplay();
+	boolean top = frameID == webView.mainFrame().id;
+	if (top) {
+		/* reset resource status variables */
+		resourceCount = 0;		
+		this.url = url2;
+
+		final ProgressEvent progress = new ProgressEvent(browser);
+		progress.display = display;
+		progress.widget = browser;
+		progress.current = 1;
+		progress.total = MAX_PROGRESS;
+		for (int i = 0; i < progressListeners.length; i++) {
+			final ProgressListener listener = progressListeners[i];
+			/*
+			* Note on WebKit.  Running the event loop from a Browser
+			* delegate callback breaks the WebKit (stop loading or
+			* crash).  The widget ProgressBar currently touches the
+			* event loop every time the method setSelection is called.  
+			* The workaround is to invoke Display.asyncexec so that
+			* the Browser does not crash when the user updates the 
+			* selection of the ProgressBar.
+			*/
+			display.asyncExec(
+				new Runnable() {
+					public void run() {
+						if (!display.isDisposed() && !browser.isDisposed())
+							listener.changed(progress);
+					}
+				}
+			);
+		}
+
+		StatusTextEvent statusText = new StatusTextEvent(browser);
+		statusText.display = display;
+		statusText.widget = browser;
+		statusText.text = url2;
+		for (int i = 0; i < statusTextListeners.length; i++) {
+			statusTextListeners[i].changed(statusText);
+		}
+	}
+	LocationEvent location = new LocationEvent(browser);
+	location.display = display;
+	location.widget = browser;
+	location.location = url2;
+	location.top = top;
+	for (int i = 0; i < locationListeners.length; i++) {
+		locationListeners[i].changed(location);
+	}
+}
+
+void webView_windowScriptObjectAvailable (int /*long*/ webView, int /*long*/ windowScriptObject) {
+	NSObject scriptObject = new NSObject (windowScriptObject);
+	NSString key = NSString.stringWith ("external"); //$NON-NLS-1$
+	scriptObject.setValue (delegate, key);
+}
+
+/* WebResourceLoadDelegate */
+
+void webView_resource_didFinishLoadingFromDataSource(int /*long*/ sender, int /*long*/ identifier, int /*long*/ dataSource) {
+	/*
+	* Feature on Safari.  The identifier is used here as a marker for the events 
+	* related to the top frame and the URL changes related to that top frame as 
+	* they should appear on the location bar of a browser.  It is expected to reset
+	* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
+	* the identifierForInitialRequest event is received.  However, Safari fires
+	* the didFinishLoadingFromDataSource event before the entire content of the
+	* top frame is loaded.  It is possible to receive multiple willSendRequest 
+	* events in this interval, causing the Browser widget to send unwanted
+	* Location.changing events.  For this reason, the identifier is reset to 0
+	* when the top frame has either finished loading (didFinishLoadForFrame
+	* event) or failed (didFailProvisionalLoadWithError).
+	*/
+	// this code is intentionally commented
+	//if (this.identifier == identifier) this.identifier = 0;
+}
+
+void webView_resource_didFailLoadingWithError_fromDataSource(int /*long*/ sender, int /*long*/ identifier, int /*long*/ error, int /*long*/ dataSource) {
+	/*
+	* Feature on Safari.  The identifier is used here as a marker for the events 
+	* related to the top frame and the URL changes related to that top frame as 
+	* they should appear on the location bar of a browser.  It is expected to reset
+	* the identifier to 0 when the event didFinishLoadingFromDataSource related to 
+	* the identifierForInitialRequest event is received.  However, Safari fires
+	* the didFinishLoadingFromDataSource event before the entire content of the
+	* top frame is loaded.  It is possible to receive multiple willSendRequest 
+	* events in this interval, causing the Browser widget to send unwanted
+	* Location.changing events.  For this reason, the identifier is reset to 0
+	* when the top frame has either finished loading (didFinishLoadForFrame
+	* event) or failed (didFailProvisionalLoadWithError).
+	*/
+	// this code is intentionally commented
+	//if (this.identifier == identifier) this.identifier = 0;
+}
+
+void webView_resource_didReceiveAuthenticationChallenge_fromDataSource (int /*long*/ sender, int /*long*/ identifier, int /*long*/ challenge, int /*long*/ dataSource) {
+	NSURLAuthenticationChallenge nsChallenge = new NSURLAuthenticationChallenge (challenge);
+
+	/*
+	 * Do not invoke the listeners if this challenge has been failed too many
+	 * times because a listener is likely giving incorrect credentials repeatedly
+	 * and will do so indefinitely.
+	 */
+	if (nsChallenge.previousFailureCount () < 3) {
+		for (int i = 0; i < authenticationListeners.length; i++) {
+			AuthenticationEvent event = new AuthenticationEvent (browser);
+			event.location = lastNavigateURL;
+			authenticationListeners[i].authenticate (event);
+			if (!event.doit) {
+				id challengeSender = nsChallenge.sender ();
+				OS.objc_msgSend (challengeSender.id, OS.sel_cancelAuthenticationChallenge_, challenge);
+				return;
+			}
+			if (event.user != null && event.password != null) {
+				id challengeSender = nsChallenge.sender ();
+				NSString user = NSString.stringWith (event.user);
+				NSString password = NSString.stringWith (event.password);
+				NSURLCredential credential = NSURLCredential.credentialWithUser (user, password, OS.NSURLCredentialPersistenceForSession);
+				OS.objc_msgSend (challengeSender.id, OS.sel_useCredential_forAuthenticationChallenge_, credential.id, challenge);
+				return;
+			}
+		}
+	}
+
+	/* no listener handled the challenge, so try to invoke the native panel */
+	int /*long*/ cls = OS.class_WebPanelAuthenticationHandler;
+	if (cls != 0) {
+		int /*long*/ method = OS.class_getClassMethod (cls, OS.sel_sharedHandler);
+		if (method != 0) {
+			int /*long*/ handler = OS.objc_msgSend (cls, OS.sel_sharedHandler);
+			if (handler != 0) {
+				OS.objc_msgSend (handler, OS.sel_startAuthentication, challenge, webView.window ().id);
+				return;
+			}
+		}
+	}
+
+	/* the native panel was not available, so show a custom dialog */
+	String[] userReturn = new String[1], passwordReturn = new String[1];
+	NSURLCredential proposedCredential = nsChallenge.proposedCredential ();
+	if (proposedCredential != null) {
+		userReturn[0] = proposedCredential.user ().getString ();
+		if (proposedCredential.hasPassword ()) {
+			passwordReturn[0] = proposedCredential.password ().getString ();
+		}
+	}
+	NSURLProtectionSpace space = nsChallenge.protectionSpace ();
+	String host = space.host ().getString () + ':' + space.port ();
+	String realm = space.realm ().getString ();
+	boolean result = showAuthenticationDialog (userReturn, passwordReturn, host, realm);
+	if (!result) {
+		id challengeSender = nsChallenge.sender ();
+		OS.objc_msgSend (challengeSender.id, OS.sel_cancelAuthenticationChallenge_, challenge);
+		return;
+	}
+	id challengeSender = nsChallenge.sender ();
+	NSString user = NSString.stringWith (userReturn[0]);
+	NSString password = NSString.stringWith (passwordReturn[0]);
+	NSURLCredential credential = NSURLCredential.credentialWithUser (user, password, OS.NSURLCredentialPersistenceForSession);
+	OS.objc_msgSend (challengeSender.id, OS.sel_useCredential_forAuthenticationChallenge_, credential.id, challenge);
+}
+
+boolean showAuthenticationDialog (final String[] user, final String[] password, String host, String realm) {
+	final Shell shell = new Shell (browser.getShell ());
+	shell.setLayout (new GridLayout ());
+	String title = SWT.getMessage ("SWT_Authentication_Required"); //$NON-NLS-1$
+	shell.setText (title);
+	Label label = new Label (shell, SWT.WRAP);
+	label.setText (Compatibility.getMessage ("SWT_Enter_Username_and_Password", new String[] {realm, host})); //$NON-NLS-1$
+
+	GridData data = new GridData ();
+	Monitor monitor = browser.getMonitor ();
+	int maxWidth = monitor.getBounds ().width * 2 / 3;
+	int width = label.computeSize (SWT.DEFAULT, SWT.DEFAULT).x;
+	data.widthHint = Math.min (width, maxWidth);
+	data.horizontalAlignment = GridData.FILL;
+	data.grabExcessHorizontalSpace = true;
+	label.setLayoutData (data);
+
+	Label userLabel = new Label (shell, SWT.NONE);
+	userLabel.setText (SWT.getMessage ("SWT_Username")); //$NON-NLS-1$
+
+	final Text userText = new Text (shell, SWT.BORDER);
+	if (user[0] != null) userText.setText (user[0]);
+	data = new GridData ();
+	data.horizontalAlignment = GridData.FILL;
+	data.grabExcessHorizontalSpace = true;
+	userText.setLayoutData (data);
+
+	Label passwordLabel = new Label (shell, SWT.NONE);
+	passwordLabel.setText (SWT.getMessage ("SWT_Password")); //$NON-NLS-1$
+
+	final Text passwordText = new Text (shell, SWT.PASSWORD | SWT.BORDER);
+	if (password[0] != null) passwordText.setText (password[0]);
+	data = new GridData ();
+	data.horizontalAlignment = GridData.FILL;
+	data.grabExcessHorizontalSpace = true;
+	passwordText.setLayoutData (data);
+
+	final boolean[] result = new boolean[1];
+	final Button[] buttons = new Button[2];
+	Listener listener = new Listener() {
+		public void handleEvent(Event event) {
+			user[0] = userText.getText();
+			password[0] = passwordText.getText();
+			result[0] = event.widget == buttons[1];
+			shell.close();
+		}	
+	};
+
+	Composite composite = new Composite (shell, SWT.NONE);
+	data = new GridData ();
+	data.horizontalAlignment = GridData.END;
+	composite.setLayoutData (data);
+	composite.setLayout (new GridLayout (2, true));
+	buttons[0] = new Button (composite, SWT.PUSH);
+	buttons[0].setText (SWT.getMessage("SWT_Cancel")); //$NON-NLS-1$
+	buttons[0].setLayoutData (new GridData (GridData.FILL_HORIZONTAL));
+	buttons[0].addListener (SWT.Selection, listener);
+	buttons[1] = new Button (composite, SWT.PUSH);
+	buttons[1].setText (SWT.getMessage("SWT_OK")); //$NON-NLS-1$
+	buttons[1].setLayoutData (new GridData (GridData.FILL_HORIZONTAL));
+	buttons[1].addListener (SWT.Selection, listener);
+
+	shell.setDefaultButton (buttons[1]);
+	shell.pack ();
+	shell.open ();
+	Display display = browser.getDisplay ();
+	while (!shell.isDisposed ()) {
+		if (!display.readAndDispatch ()) display.sleep ();
+	}
+
+	return result[0];
+}
+
+int /*long*/ webView_identifierForInitialRequest_fromDataSource(int /*long*/ sender, int /*long*/ request, int /*long*/ dataSourceID) {
+	final Display display = browser.getDisplay();
+	final ProgressEvent progress = new ProgressEvent(browser);
+	progress.display = display;
+	progress.widget = browser;
+	progress.current = resourceCount;
+	progress.total = Math.max(resourceCount, MAX_PROGRESS);
+	for (int i = 0; i < progressListeners.length; i++) {
+		final ProgressListener listener = progressListeners[i];
+		/*
+		* Note on WebKit.  Running the event loop from a Browser
+		* delegate callback breaks the WebKit (stop loading or
+		* crash).  The widget ProgressBar currently touches the
+		* event loop every time the method setSelection is called.  
+		* The workaround is to invoke Display.asyncexec so that
+		* the Browser does not crash when the user updates the 
+		* selection of the ProgressBar.
+		*/
+		display.asyncExec(
+			new Runnable() {
+				public void run() {
+					if (!display.isDisposed() && !browser.isDisposed())
+						listener.changed(progress);
+				}
+			}
+		);
+	}
+
+	NSNumber identifier = NSNumber.numberWithInt(resourceCount++);
+	if (this.identifier == 0) {
+		WebDataSource dataSource = new WebDataSource(dataSourceID);
+		WebFrame frame = dataSource.webFrame();
+		if (frame.id == webView.mainFrame().id) this.identifier = identifier.id;
+	}
+	return identifier.id;
+		
+}
+
+int /*long*/ webView_resource_willSendRequest_redirectResponse_fromDataSource(int /*long*/ sender, int /*long*/ identifier, int /*long*/ request, int /*long*/ redirectResponse, int /*long*/ dataSource) {
+	NSURLRequest nsRequest = new NSURLRequest (request);
+	NSURL url = nsRequest.URL ();
+	if (url.isFileURL ()) {
+		NSMutableURLRequest newRequest = new NSMutableURLRequest (nsRequest.mutableCopy ());
+		newRequest.autorelease ();
+		newRequest.setCachePolicy (OS.NSURLRequestReloadIgnoringLocalCacheData);
+		return newRequest.id;
+	}
+	return request;
+}
+
+/* UIDelegate */
+
+int /*long*/ webView_createWebViewWithRequest(int /*long*/ sender, int /*long*/ request) {
+	WindowEvent newEvent = new WindowEvent(browser);
+	newEvent.display = browser.getDisplay();
+	newEvent.widget = browser;
+	newEvent.required = true;
+	if (openWindowListeners != null) {
+		for (int i = 0; i < openWindowListeners.length; i++) {
+			openWindowListeners[i].open(newEvent);
+		}
+	}
+	WebView result = null;
+	Browser browser = null;
+	if (newEvent.browser != null && newEvent.browser.webBrowser instanceof Safari) {
+		browser = newEvent.browser;
+	}
+	if (browser != null && !browser.isDisposed()) {
+		result = ((Safari)browser.webBrowser).webView;
+		if (request != 0) {
+			WebFrame mainFrame = result.mainFrame();
+			mainFrame.loadRequest(new NSURLRequest(request));
+		}
+	}
+	return result != null ? result.id : 0;
+}
+
+void webViewShow(int /*long*/ sender) {
+	/*
+	* Feature on WebKit.  The Safari WebKit expects the application
+	* to create a new Window using the Objective C Cocoa API in response
+	* to UIDelegate.createWebViewWithRequest. The application is then
+	* expected to use Objective C Cocoa API to make this window visible
+	* when receiving the UIDelegate.webViewShow message.  For some reason,
+	* a window created with the Carbon API hosting the new browser instance
+	* does not redraw until it has been resized.  The fix is to increase the
+	* size of the Shell and restore it to its initial size.
+	*/
+	Shell parent = browser.getShell();
+	Point pt = parent.getSize();
+	parent.setSize(pt.x+1, pt.y);
+	parent.setSize(pt.x, pt.y);
+	WindowEvent newEvent = new WindowEvent(browser);
+	newEvent.display = browser.getDisplay();
+	newEvent.widget = browser;
+	if (location != null) newEvent.location = location;
+	if (size != null) newEvent.size = size;
+	/*
+	* Feature in Safari.  Safari's tool bar contains
+	* the address bar.  The address bar is displayed
+	* if the tool bar is displayed. There is no separate
+	* notification for the address bar.
+	* Feature in Safari.  The menu bar is always
+	* displayed. There is no notification to hide
+	* the menu bar.
+	*/
+	newEvent.addressBar = toolBar;
+	newEvent.menuBar = true;
+	newEvent.statusBar = statusBar;
+	newEvent.toolBar = toolBar;
+	for (int i = 0; i < visibilityWindowListeners.length; i++) {
+		visibilityWindowListeners[i].show(newEvent);
+	}
+	location = null;
+	size = null;
+}
+
+void webView_setFrame(int /*long*/ sender, int /*long*/ frame) {
+	NSRect rect = new NSRect();
+	OS.memmove(rect, frame, NSRect.sizeof);
+	/* convert to SWT system coordinates */
+	Rectangle bounds = browser.getDisplay().getBounds();
+	location = new Point((int)rect.x, bounds.height - (int)rect.y - (int)rect.height);
+	size = new Point((int)rect.width, (int)rect.height);
+}
+
+void webViewFocus(int /*long*/ sender) {
+}
+
+void webViewUnfocus(int /*long*/ sender) {
+}
+
+void webView_runJavaScriptAlertPanelWithMessage(int /*long*/ sender, int /*long*/ messageID) {
+	NSString message = new NSString(messageID);
+	String text = message.getString();
+
+	MessageBox messageBox = new MessageBox(browser.getShell(), SWT.OK | SWT.ICON_WARNING);
+	messageBox.setText("Javascript");	//$NON-NLS-1$
+	messageBox.setMessage(text);
+	messageBox.open();
+}
+
+int webView_runJavaScriptConfirmPanelWithMessage(int /*long*/ sender, int /*long*/ messageID) {
+	NSString message = new NSString(messageID);
+	String text = message.getString();
+
+	MessageBox messageBox = new MessageBox(browser.getShell(), SWT.OK | SWT.CANCEL | SWT.ICON_QUESTION);
+	messageBox.setText("Javascript");	//$NON-NLS-1$
+	messageBox.setMessage(text);
+	return messageBox.open() == SWT.OK ? 1 : 0;
+}
+
+void webView_runOpenPanelForFileButtonWithResultListener(int /*long*/ sender, int /*long*/ resultListenerID) {
+	FileDialog dialog = new FileDialog(browser.getShell(), SWT.NONE);
+	String result = dialog.open();
+	WebOpenPanelResultListener resultListener = new WebOpenPanelResultListener(resultListenerID);
+	if (result == null) {
+		resultListener.cancel();
+		return;
+	}
+	resultListener.chooseFilename(NSString.stringWith(result));
+}
+
+void webViewClose(int /*long*/ sender) {
+	Shell parent = browser.getShell();
+	WindowEvent newEvent = new WindowEvent(browser);
+	newEvent.display = browser.getDisplay();
+	newEvent.widget = browser;
+	for (int i = 0; i < closeWindowListeners.length; i++) {
+		closeWindowListeners[i].close(newEvent);
+	}
+	browser.dispose();
+	if (parent.isDisposed()) return;
+	/*
+	* Feature on WebKit.  The Safari WebKit expects the application
+	* to create a new Window using the Objective C Cocoa API in response
+	* to UIDelegate.createWebViewWithRequest. The application is then
+	* expected to use Objective C Cocoa API to make this window visible
+	* when receiving the UIDelegate.webViewShow message.  For some reason,
+	* a window created with the Carbon API hosting the new browser instance
+	* does not redraw until it has been resized.  The fix is to increase the
+	* size of the Shell and restore it to its initial size.
+	*/
+	Point pt = parent.getSize();
+	parent.setSize(pt.x+1, pt.y);
+	parent.setSize(pt.x, pt.y);
+}
+
+int /*long*/ webView_contextMenuItemsForElement_defaultMenuItems(int /*long*/ sender, int /*long*/ element, int /*long*/ defaultMenuItems) {
+	Point pt = browser.getDisplay().getCursorLocation();
+	Event event = new Event();
+	event.x = pt.x;
+	event.y = pt.y;
+	browser.notifyListeners(SWT.MenuDetect, event);
+	Menu menu = browser.getMenu();
+	if (!event.doit) return 0;
+	if (menu != null && !menu.isDisposed()) {
+		if (event.x != pt.x || event.y != pt.y) {
+			menu.setLocation(event.x, event.y);
+		}
+		menu.setVisible(true);
+		return 0;
+	}
+	return defaultMenuItems;
+}
+
+void webView_setStatusBarVisible(int /*long*/ sender, boolean visible) {
+	/* Note.  Webkit only emits the notification when the status bar should be hidden. */
+	statusBar = visible;
+}
+
+void webView_setStatusText(int /*long*/ sender, int /*long*/ textID) {
+	NSString text = new NSString(textID);
+	int length = (int)/*64*/text.length();
+	if (length == 0) return;
+
+	StatusTextEvent statusText = new StatusTextEvent(browser);
+	statusText.display = browser.getDisplay();
+	statusText.widget = browser;
+	statusText.text = text.getString();
+	for (int i = 0; i < statusTextListeners.length; i++) {
+		statusTextListeners[i].changed(statusText);
+	}
+}
+
+void webView_setResizable(int /*long*/ sender, boolean visible) {
+}
+
+void webView_setToolbarsVisible(int /*long*/ sender, boolean visible) {
+	/* Note.  Webkit only emits the notification when the tool bar should be hidden. */
+	toolBar = visible;
+}
+
+void webView_mouseDidMoveOverElement_modifierFlags (int /*long*/ sender, int /*long*/ elementInformationID, int /*long*/ modifierFlags) {
+	if (elementInformationID == 0) return;
+
+	NSString key = NSString.stringWith(WebElementLinkURLKey);
+	NSDictionary elementInformation = new NSDictionary(elementInformationID);
+	id value = elementInformation.valueForKey(key);
+	if (value == null) {
+		/* not currently over a link */
+		if (lastHoveredLinkURL == null) return;
+		lastHoveredLinkURL = null;
+		StatusTextEvent statusText = new StatusTextEvent(browser);
+		statusText.display = browser.getDisplay();
+		statusText.widget = browser;
+		statusText.text = "";	//$NON-NLS-1$
+		for (int i = 0; i < statusTextListeners.length; i++) {
+			statusTextListeners[i].changed(statusText);
+		}
+		return;
+	}
+
+	NSString url = new NSURL(value.id).absoluteString();
+	int length = (int)/*64*/url.length();
+	String urlString;
+	if (length == 0) {
+		urlString = "";	//$NON-NLS-1$
+	} else {
+		urlString = url.getString();
+	}
+	if (urlString.equals(lastHoveredLinkURL)) return;
+
+	lastHoveredLinkURL = urlString;
+	StatusTextEvent statusText = new StatusTextEvent(browser);
+	statusText.display = browser.getDisplay();
+	statusText.widget = browser;
+	statusText.text = urlString;
+	for (int i = 0; i < statusTextListeners.length; i++) {
+		statusTextListeners[i].changed(statusText);
+	}
+}
+
+void webView_printFrameView (int /*long*/ sender, int /*long*/ frameViewID) {
+	WebFrameView view = new WebFrameView(frameViewID);
+	boolean viewPrint = view.documentViewShouldHandlePrint();
+	if (viewPrint) {
+		view.printDocumentView();
+		return;
+	}
+	NSPrintInfo info = NSPrintInfo.sharedPrintInfo();
+	NSPrintOperation operation = view.printOperationWithPrintInfo(info);
+	if (operation != null) operation.runOperation();
+}
+
+/* PolicyDelegate */
+
+void webView_decidePolicyForMIMEType_request_frame_decisionListener(int /*long*/ sender, int /*long*/ type, int /*long*/ request, int /*long*/ frame, int /*long*/ listenerID) {
+	boolean canShow = WebView.canShowMIMEType(new NSString(type));
+	WebPolicyDecisionListener listener = new WebPolicyDecisionListener(listenerID);
+	if (canShow) {
+		listener.use();
+	} else {
+		listener.download();
+	}
+}
+
+void webView_decidePolicyForNavigationAction_request_frame_decisionListener(int /*long*/ sender, int /*long*/ actionInformation, int /*long*/ request, int /*long*/ frame, int /*long*/ listenerID) {
+	NSURL url = new NSURLRequest(request).URL();
+	WebPolicyDecisionListener listener = new WebPolicyDecisionListener(listenerID);
+	if (url == null) {
+		/* indicates that a URL with an invalid format was specified */
+		listener.ignore();
+		return;
+	}
+	NSString s = url.absoluteString();
+	String url2 = s.getString();
+	/*
+	 * If the URI indicates that the page is being rendered from memory
+	 * (via setText()) then set it to about:blank to be consistent with IE.
+	 */
+	if (url2.equals (URI_FROMMEMORY)) url2 = ABOUT_BLANK;
+
+	LocationEvent newEvent = new LocationEvent(browser);
+	newEvent.display = browser.getDisplay();
+	newEvent.widget = browser;
+	newEvent.location = url2;
+	newEvent.doit = true;
+	if (locationListeners != null) {
+		changingLocation = true;
+		for (int i = 0; i < locationListeners.length; i++) {
+			locationListeners[i].changing(newEvent);
+		}
+		changingLocation = false;
+	}
+	if (newEvent.doit) {
+		if (jsEnabledChanged) {
+			jsEnabledChanged = false;
+			if (preferences == null) {
+				preferences = (WebPreferences)new WebPreferences ().alloc ().init ();
+				webView.setPreferences (preferences);
+			}
+			preferences.setJavaScriptEnabled (jsEnabled);
+		}
+		listener.use();
+		lastNavigateURL = url2;
+	} else {
+		listener.ignore();
+	}
+	if (html != null && !browser.isDisposed()) {
+		String html = this.html;
+		this.html = null;
+		_setText(html);
+	}
+}
+
+void webView_decidePolicyForNewWindowAction_request_newFrameName_decisionListener(int /*long*/ sender, int /*long*/ actionInformation, int /*long*/ request, int /*long*/ frameName, int /*long*/ listenerID) {
+	WebPolicyDecisionListener listener = new WebPolicyDecisionListener(listenerID);
+	listener.use();
+}
+
+void webView_unableToImplementPolicyWithError_frame(int /*long*/ sender, int /*long*/ error, int /*long*/ frame) {
+}
+
+/* WebDownload */
+
+void download_decideDestinationWithSuggestedFilename(int /*long*/ downloadId, int /*long*/ filename) {
+	NSString string = new NSString(filename);
+	String name = string.getString();
+	FileDialog dialog = new FileDialog(browser.getShell(), SWT.SAVE);
+	dialog.setText(SWT.getMessage ("SWT_FileDownload")); //$NON-NLS-1$
+	dialog.setFileName(name);
+	String path = dialog.open();
+	NSURLDownload download = new NSURLDownload(downloadId);
+	if (path == null) {
+		/* cancel pressed */
+		download.cancel();
+		return;
+	}
+	download.setDestination(NSString.stringWith(path), true);
+}
+
+/* DOMEventListener */
+
+void handleEvent(int /*long*/ evtId) {
+	NSString string = new NSString(OS.objc_msgSend(evtId, OS.sel_type));
+	String type = string.getString();
+
+	if (DOMEVENT_KEYDOWN.equals(type) || DOMEVENT_KEYUP.equals(type)) {
+		DOMKeyboardEvent event = new DOMKeyboardEvent(evtId);
+
+		boolean ctrl = event.ctrlKey();
+		boolean shift = event.shiftKey();
+		boolean alt = event.altKey();
+		boolean meta = event.metaKey();
+		int keyCode = event.keyCode();
+		int charCode = event.charCode();
+
+		Event keyEvent = new Event();
+		keyEvent.widget = browser;
+		int eventType = DOMEVENT_KEYDOWN.equals(type) ? SWT.KeyDown : SWT.KeyUp;
+		keyEvent.type = eventType;
+		int translatedKey = translateKey (keyCode);
+		keyEvent.keyCode = translatedKey;
+		keyEvent.character = (char)charCode;
+		int stateMask = (alt ? SWT.ALT : 0) | (ctrl ? SWT.CTRL : 0) | (shift ? SWT.SHIFT : 0) | (meta ? SWT.COMMAND : 0);
+		keyEvent.stateMask = stateMask;
+		browser.notifyListeners(keyEvent.type, keyEvent);
+		if (!keyEvent.doit) {
+			event.preventDefault();
+		} else {
+			if (eventType == SWT.KeyDown && stateMask == SWT.COMMAND) {
+				if (translatedKey == 'v') {
+					webView.paste (webView);
+				} else if (translatedKey == 'c') {
+					webView.copy (webView);
+				} else if (translatedKey == 'x') {
+					webView.cut (webView);
+				}
+			}
+		}
+		return;
+	}
+
+	if (DOMEVENT_MOUSEWHEEL.equals(type)) {
+		DOMWheelEvent event = new DOMWheelEvent(evtId);
+		int clientX = event.clientX();
+		int clientY = event.clientY();
+		int delta = event.wheelDelta();
+		boolean ctrl = event.ctrlKey();
+		boolean shift = event.shiftKey();
+		boolean alt = event.altKey();
+		boolean meta = event.metaKey();
+		Event mouseEvent = new Event();
+		mouseEvent.type = SWT.MouseWheel;
+		mouseEvent.widget = browser;
+		mouseEvent.x = clientX; mouseEvent.y = clientY;
+		mouseEvent.count = delta / 120;
+		mouseEvent.stateMask = (alt ? SWT.ALT : 0) | (ctrl ? SWT.CTRL : 0) | (shift ? SWT.SHIFT : 0) | (meta ? SWT.COMMAND : 0);
+		browser.notifyListeners (mouseEvent.type, mouseEvent);
+		return;
+	}
+
+	/* mouse event */
+
+	DOMMouseEvent event = new DOMMouseEvent(evtId);
+
+	int clientX = event.clientX();
+	int clientY = event.clientY();
+	int detail = event.detail();
+	int button = event.button();
+	boolean ctrl = event.ctrlKey();
+	boolean shift = event.shiftKey();
+	boolean alt = event.altKey();
+	boolean meta = event.metaKey();
+
+	Event mouseEvent = new Event ();
+	mouseEvent.widget = browser;
+	mouseEvent.x = clientX; mouseEvent.y = clientY;
+	mouseEvent.stateMask = (alt ? SWT.ALT : 0) | (ctrl ? SWT.CTRL : 0) | (shift ? SWT.SHIFT : 0) | (meta ? SWT.COMMAND : 0);
+	if (DOMEVENT_MOUSEDOWN.equals (type)) {
+		mouseEvent.type = SWT.MouseDown;
+		mouseEvent.button = button + 1;
+		mouseEvent.count = detail;
+	} else if (DOMEVENT_MOUSEUP.equals (type)) {
+		mouseEvent.type = SWT.MouseUp;
+		mouseEvent.button = button + 1;
+		mouseEvent.count = detail;
+		switch (mouseEvent.button) {
+			case 1: mouseEvent.stateMask |= SWT.BUTTON1; break;
+			case 2: mouseEvent.stateMask |= SWT.BUTTON2; break;
+			case 3: mouseEvent.stateMask |= SWT.BUTTON3; break;
+			case 4: mouseEvent.stateMask |= SWT.BUTTON4; break;
+			case 5: mouseEvent.stateMask |= SWT.BUTTON5; break;
+		}
+	} else if (DOMEVENT_MOUSEMOVE.equals (type)) {
+		/*
+		* Bug in Safari.  Spurious and redundant mousemove events are received in
+		* various contexts, including following every MouseUp.  The workaround is
+		* to not fire MouseMove events whose x and y values match the last MouseMove  
+		*/
+		if (mouseEvent.x == lastMouseMoveX && mouseEvent.y == lastMouseMoveY) return;
+		mouseEvent.type = SWT.MouseMove;
+		lastMouseMoveX = mouseEvent.x; lastMouseMoveY = mouseEvent.y;
+	}
+
+	browser.notifyListeners (mouseEvent.type, mouseEvent);
+	if (detail == 2 && DOMEVENT_MOUSEDOWN.equals (type)) {
+		mouseEvent = new Event ();
+		mouseEvent.widget = browser;
+		mouseEvent.x = clientX; mouseEvent.y = clientY;
+		mouseEvent.stateMask = (alt ? SWT.ALT : 0) | (ctrl ? SWT.CTRL : 0) | (shift ? SWT.SHIFT : 0) | (meta ? SWT.COMMAND : 0);
+		mouseEvent.type = SWT.MouseDoubleClick;
+		mouseEvent.button = button + 1;
+		mouseEvent.count = detail;
+		browser.notifyListeners (mouseEvent.type, mouseEvent);
+	}
+}
+
+/* external */
+
+Object convertToJava (int /*long*/ value) {
+	NSObject object = new NSObject (value);
+	int /*long*/ clazz = OS.objc_lookUpClass ("NSString"); //$NON-NLS-1$
+	if (object.isKindOfClass (clazz)) {
+		NSString string = new NSString (value);
+		return string.getString ();
+	}
+	clazz = OS.objc_lookUpClass ("NSNumber"); //$NON-NLS-1$
+	if (object.isKindOfClass (clazz)) {
+		NSNumber number = new NSNumber (value);
+		int /*long*/ ptr = number.objCType ();
+		byte[] type = new byte[1];
+		OS.memmove (type, ptr, 1);
+		if (type[0] == 'c' || type[0] == 'B') {
+			return new Boolean (number.boolValue ());
+		}
+		if ("islqISLQfd".indexOf (type[0]) != -1) { //$NON-NLS-1$
+			return new Double (number.doubleValue ());
+		}
+	}
+	clazz = OS.objc_lookUpClass ("WebScriptObject"); //$NON-NLS-1$
+	if (object.isKindOfClass (clazz)) {
+		WebScriptObject script = new WebScriptObject (value);
+		id id = script.valueForKey (NSString.stringWith ("length")); //$NON-NLS-1$
+		if (id == null) { /* not a JS array */
+			SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+		}
+		int length = new NSNumber (id).intValue ();
+		Object[] arguments = new Object[length];
+		for (int i = 0; i < length; i++) {
+			id current = script.webScriptValueAtIndex (i);
+			if (current != null) {
+				arguments[i] = convertToJava (current.id);
+			}
+		}
+		return arguments;
+	}
+	clazz = OS.objc_lookUpClass ("WebUndefined"); //$NON-NLS-1$
+	if (object.isKindOfClass (clazz)) {
+		return null;
+	}
+
+	SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	return null;
+}
+
+NSObject convertToJS (Object value) {
+	if (value == null) {
+		return WebUndefined.undefined ();
+	}
+	if (value instanceof String) {
+		return NSString.stringWith ((String)value);
+	}
+	if (value instanceof Boolean) {
+		return NSNumber.numberWithBool (((Boolean)value).booleanValue ());
+	}
+	if (value instanceof Number) {
+		return NSNumber.numberWithDouble (((Number)value).doubleValue ());
+	}
+	if (value instanceof Object[]) {
+		Object[] arrayValue = (Object[]) value;
+		int length = arrayValue.length;
+		if (length > 0) {
+			NSMutableArray array = NSMutableArray.arrayWithCapacity (length);
+			for (int i = 0; i < length; i++) {
+				Object currentObject = arrayValue[i];
+				array.addObject (convertToJS (currentObject));
+			}
+			return array;
+		}
+	}
+	SWT.error (SWT.ERROR_INVALID_RETURN_VALUE);
+	return null;
+}
+
+NSObject callJava (int /*long*/ index, int /*long*/ args, int /*long*/ arg1) {
+	Object returnValue = null;
+	NSObject object = new NSObject (index);
+	int /*long*/ clazz = OS.objc_lookUpClass ("NSNumber"); //$NON-NLS-1$
+	if (object.isKindOfClass (clazz)) {
+		NSNumber number = new NSNumber (index);
+		Object key = new Integer (number.intValue ());
+		BrowserFunction function = (BrowserFunction)functions.get (key);
+		if (function != null) {
+			try {
+				Object temp = convertToJava (args);
+				if (temp instanceof Object[]) {
+					Object[] arguments = (Object[])temp;
+					try {
+						returnValue = function.function (arguments);
+					} catch (Exception e) {
+						/* exception during function invocation */
+						returnValue = WebBrowser.CreateErrorString (e.getLocalizedMessage ());
+					}
+				}
+			} catch (IllegalArgumentException e) {
+				/* invalid argument value type */
+				if (function.isEvaluate) {
+					/* notify the evaluate function so that a java exception can be thrown */
+					function.function (new String[] {WebBrowser.CreateErrorString (new SWTException (SWT.ERROR_INVALID_RETURN_VALUE).getLocalizedMessage ())});
+				}
+				returnValue = WebBrowser.CreateErrorString (e.getLocalizedMessage ());
+			}
+		}
+	}
+	try {
+		return convertToJS (returnValue);
+	} catch (SWTException e) {
+		/* invalid return value type */
+		return convertToJS (WebBrowser.CreateErrorString (e.getLocalizedMessage ()));
+	}
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/AuthenticationEvent.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/AuthenticationEvent.java
new file mode 100644
index 0000000..9feeec1
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/AuthenticationEvent.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 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.browser;
+
+import org.eclipse.swt.widgets.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * An <code>AuthenticationEvent</code> is sent by a {@link Browser}
+ * to {@link AuthenticationListener}'s when the <code>Browser</code>
+ * navigates to a page that requires authentication. This event allows
+ * a client to either supply authentication credentials, cancel the
+ * authentication, or do nothing (which causes an authentication prompter
+ * to be shown to the user).
+ *
+ * @since 3.5
+ */
+public class AuthenticationEvent extends TypedEvent {
+	/** The location that triggered the authentication challenge */
+	public String location;
+
+	/** The user name to authenticate with */
+	public String user;
+
+	/** The password to authenticate with */
+	public String password;
+
+	/** 
+	 * A flag indicating whether the authentication should proceed.
+	 * Setting this field to <code>false</code> will cancel the operation.
+	 */
+	public boolean doit = true;
+
+	static final long serialVersionUID = -8322331206780057921L;
+
+/**
+ * Constructs a new instance of this class.
+ *
+ * @param widget the widget that fired the event
+ *
+ * @since 3.5
+ */
+public AuthenticationEvent(Widget widget) {
+	super(widget);
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the event
+ */
+public String toString() {
+	String string = super.toString ();
+	return string.substring (0, string.length() - 1) // remove trailing '}'
+		+ " name=" + user
+		+ " password=" + password
+		+ " location=" + location
+		+ "}";
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/AuthenticationListener.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/AuthenticationListener.java
new file mode 100644
index 0000000..4f8d342
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/AuthenticationListener.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 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.browser;
+
+import org.eclipse.swt.internal.SWTEventListener;
+
+/**
+ * This listener interface may be implemented in order to receive
+ * an {@link AuthenticationEvent} notification when the {@link Browser}
+ * encounters a page that requires authentication.
+ * 
+ * @see Browser#addAuthenticationListener(AuthenticationListener)
+ * @see Browser#removeAuthenticationListener(AuthenticationListener)
+ * 
+ * @since 3.5
+ */
+public interface AuthenticationListener extends SWTEventListener {
+
+/**
+ * This method is called when a page is navigated to that requires
+ * authentication.
+ * <p>
+ * Setting both the event's <code>user</code> and <code>password</code>
+ * fields causes these values to be used as credentials for authentication.
+ * Leaving one or both of these fields as <code>null</code> indicates
+ * that credentials are not known, so an authentication prompter should
+ * be shown to the user.  Otherwise, setting the event's <code>doit</code>
+ * field to <code>false</code> cancels the authentication challenge, and
+ * the page will not be loaded.
+ * <p>
+ *
+ * <p>The following fields in the <code>AuthenticationEvent</code> apply:
+ * <ul>
+ * <li>(in) widget the <code>Browser</code> that is attempting to show the
+ * page that requires authentication
+ * <li>(in) location the location issuing the authentication challenge
+ * <li>(in/out) doit can be set to <code>false</code> to cancel the
+ * authentication challenge
+ * <li>(out) user the user name to authenticate with
+ * <li>(out) password the password to authenticate with
+ * </ul>
+ * 
+ * @param event the <code>AuthenticationEvent</code> that can be used to
+ * either supply authentication credentials, defer credential input to
+ * an authentication prompter, or cancel an authentication challenge.
+ */
+public void authenticate(AuthenticationEvent event);
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/Browser.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/Browser.java
new file mode 100755
index 0000000..05fcc05
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/Browser.java
@@ -0,0 +1,992 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 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.browser;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * Instances of this class implement the browser user interface
+ * metaphor.  It allows the user to visualize and navigate through
+ * HTML documents.
+ * <p>
+ * Note that although this class is a subclass of <code>Composite</code>,
+ * it does not make sense to set a layout on it.
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>MOZILLA</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>CloseWindowListener, LocationListener, OpenWindowListener, ProgressListener, StatusTextListener, TitleListener, VisibilityWindowListener</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#browser">Browser snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Examples: ControlExample, BrowserExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ *
+ * @since 3.0
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class Browser extends Composite {
+	WebBrowser webBrowser;
+	int userStyle;
+
+	static final String PACKAGE_PREFIX = "org.eclipse.swt.browser."; //$NON-NLS-1$
+	static final String NO_INPUT_METHOD = "org.eclipse.swt.internal.gtk.noInputMethod"; //$NON-NLS-1$
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a widget which will be the parent of the new instance (cannot be null)
+ * @param style the style of widget to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for browser creation</li>
+ * </ul>
+ * 
+ * @see Widget#getStyle
+ * 
+ * @since 3.0
+ */
+public Browser (Composite parent, int style) {
+	super (checkParent (parent), checkStyle (style));
+	userStyle = style;
+
+	String platform = SWT.getPlatform ();
+	Display display = parent.getDisplay ();
+	if ("gtk".equals (platform)) display.setData (NO_INPUT_METHOD, null); //$NON-NLS-1$
+	String className = null;
+	if ((style & SWT.MOZILLA) != 0) {
+		className = "org.eclipse.swt.browser.Mozilla"; //$NON-NLS-1$
+	} else {
+		if ("win32".equals (platform) || "wpf".equals (platform)) { //$NON-NLS-1$ $NON-NLS-2$
+			className = "org.eclipse.swt.browser.IE"; //$NON-NLS-1$
+		} else if ("motif".equals (platform)) { //$NON-NLS-1$
+			className = "org.eclipse.swt.browser.Mozilla"; //$NON-NLS-1$
+		} else if ("gtk".equals (platform)) { //$NON-NLS-1$
+			className = "org.eclipse.swt.browser.Mozilla"; //$NON-NLS-1$
+		} else if ("carbon".equals (platform) || "cocoa".equals (platform)) { //$NON-NLS-1$
+			className = "org.eclipse.swt.browser.Safari"; //$NON-NLS-1$
+		} else if ("photon".equals (platform)) { //$NON-NLS-1$
+			className = "org.eclipse.swt.browser.Voyager"; //$NON-NLS-1$
+		} else {
+			dispose ();
+			SWT.error (SWT.ERROR_NO_HANDLES);
+		}
+	}
+
+	try {
+		Class clazz = Class.forName (className);
+		webBrowser = (WebBrowser)clazz.newInstance ();
+	} catch (ClassNotFoundException e) {
+	} catch (IllegalAccessException e) {
+	} catch (InstantiationException e) {
+	}
+	if (webBrowser == null) {
+		dispose ();
+		SWT.error (SWT.ERROR_NO_HANDLES);
+	}
+
+	webBrowser.setBrowser (this);
+	webBrowser.create (parent, style);
+}
+
+static Composite checkParent (Composite parent) {
+	String platform = SWT.getPlatform ();
+	if (!"gtk".equals (platform)) return parent; //$NON-NLS-1$
+
+	/*
+	* Note.  Mozilla provides all IM support needed for text input in web pages.
+	* If SWT creates another input method context for the widget it will cause
+	* indeterminate results to happen (hangs and crashes). The fix is to prevent 
+	* SWT from creating an input method context for the  Browser widget.
+	*/
+	if (parent != null && !parent.isDisposed ()) {
+		Display display = parent.getDisplay ();
+		if (display != null) {
+			if (display.getThread () == Thread.currentThread ()) {
+				display.setData (NO_INPUT_METHOD, "true"); //$NON-NLS-1$
+			}
+		}
+	}
+	return parent;
+}
+
+static int checkStyle(int style) {
+	String platform = SWT.getPlatform ();
+	if ((style & SWT.MOZILLA) != 0) {
+		if ("carbon".equals (platform)) return style | SWT.EMBEDDED; //$NON-NLS-1$
+		if ("motif".equals (platform)) return style | SWT.EMBEDDED; //$NON-NLS-1$
+		return style;
+	}
+
+	if ("win32".equals (platform)) { //$NON-NLS-1$
+		/*
+		* For IE on win32 the border is supplied by the embedded browser, so remove
+		* the style so that the parent Composite will not draw a second border.
+		*/
+		return style & ~SWT.BORDER;
+	} else if ("motif".equals (platform)) { //$NON-NLS-1$
+		return style | SWT.EMBEDDED;
+	}
+	return style;
+}
+
+protected void checkWidget () {
+	super.checkWidget ();
+}
+
+/**
+ * Clears all session cookies from all current Browser instances.
+ * 
+ * @since 3.2
+ */
+public static void clearSessions () {
+	WebBrowser.clearSessions ();
+}
+
+/**
+ * Returns the value of a cookie that is associated with a URL.
+ * Note that cookies are shared amongst all Browser instances.
+ * 
+ * @param name the cookie name
+ * @param url the URL that the cookie is associated with
+ * @return the cookie value, or <code>null</code> if no such cookie exists
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the name is null</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the url is null</li>
+ * </ul>
+ * 
+ * @since 3.5
+ */
+public static String getCookie (String name, String url) {
+	if (name == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	if (url == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	return WebBrowser.GetCookie (name, url);
+}
+
+/**
+ * Sets a cookie on a URL.  Note that cookies are shared amongst all Browser instances.
+ * 
+ * The <code>value</code> parameter must be a cookie header string that
+ * complies with <a href="http://www.ietf.org/rfc/rfc2109.txt">RFC 2109</code>.
+ * The value is passed through to the native browser unchanged.
+ * <p>
+ * Example value strings:
+ * <code>foo=bar</code> (basic session cookie)
+ * <code>foo=bar; path=/; domain=.eclipse.org</code> (session cookie)
+ * <code>foo=bar; expires=Thu, 01-Jan-2030 00:00:01 GMT</code> (persistent cookie)
+ * <code>foo=; expires=Thu, 01-Jan-1970 00:00:01 GMT</code> (deletes cookie <code>foo</code>)
+ * 
+ * @param value the cookie value
+ * @param url the URL to associate the cookie with
+ * @return <code>true</code> if the cookie was successfully set and <code>false</code> otherwise
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the value is null</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the url is null</li>
+ * </ul>
+ * 
+ * @since 3.5
+ */
+public static boolean setCookie (String value, String url) {
+	if (value == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	if (url == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	return WebBrowser.SetCookie (value, url);
+}
+
+/**	 
+ * Adds the listener to the collection of listeners who will be
+ * notified when authentication is required.
+ * <p>
+ * This notification occurs when a page requiring authentication is
+ * encountered.
+ * </p>
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ *
+ * @since 3.5
+ */
+public void addAuthenticationListener (AuthenticationListener listener) {
+	checkWidget();
+	if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	webBrowser.addAuthenticationListener (listener);
+}
+
+/**	 
+ * Adds the listener to the collection of listeners who will be
+ * notified when the window hosting the receiver should be closed.
+ * <p>
+ * This notification occurs when a javascript command such as
+ * <code>window.close</code> gets executed by a <code>Browser</code>.
+ * </p>
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ *
+ * @since 3.0
+ */
+public void addCloseWindowListener (CloseWindowListener listener) {
+	checkWidget();
+	if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	webBrowser.addCloseWindowListener (listener);
+}
+
+/**	 
+ * Adds the listener to the collection of listeners who will be
+ * notified when the current location has changed or is about to change.
+ * <p>
+ * This notification typically occurs when the application navigates
+ * to a new location with {@link #setUrl(String)} or when the user
+ * activates a hyperlink.
+ * </p>
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ *
+ * @since 3.0
+ */
+public void addLocationListener (LocationListener listener) {
+	checkWidget();
+	if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	webBrowser.addLocationListener (listener);
+}
+
+/**	 
+ * Adds the listener to the collection of listeners who will be
+ * notified when a new window needs to be created.
+ * <p>
+ * This notification occurs when a javascript command such as
+ * <code>window.open</code> gets executed by a <code>Browser</code>.
+ * </p>
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ *
+ * @since 3.0
+ */
+public void addOpenWindowListener (OpenWindowListener listener) {
+	checkWidget();
+	if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	webBrowser.addOpenWindowListener (listener);
+}
+
+/**	 
+ * Adds the listener to the collection of listeners who will be
+ * notified when a progress is made during the loading of the current 
+ * URL or when the loading of the current URL has been completed.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ *
+ * @since 3.0
+ */
+public void addProgressListener (ProgressListener listener) {
+	checkWidget();
+	if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	webBrowser.addProgressListener (listener);
+}
+
+/**	 
+ * Adds the listener to the collection of listeners who will be
+ * notified when the status text is changed.
+ * <p>
+ * The status text is typically displayed in the status bar of
+ * a browser application.
+ * </p>
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ *
+ * @since 3.0
+ */
+public void addStatusTextListener (StatusTextListener listener) {
+	checkWidget();
+	if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	webBrowser.addStatusTextListener (listener);
+}
+
+/**	 
+ * Adds the listener to the collection of listeners who will be
+ * notified when the title of the current document is available
+ * or has changed.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ *
+ * @since 3.0
+ */
+public void addTitleListener (TitleListener listener) {
+	checkWidget();
+	if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	webBrowser.addTitleListener (listener);
+}
+
+/**	 
+ * Adds the listener to the collection of listeners who will be
+ * notified when a window hosting the receiver needs to be displayed
+ * or hidden.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ *
+ * @since 3.0
+ */
+public void addVisibilityWindowListener (VisibilityWindowListener listener) {
+	checkWidget();
+	if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	webBrowser.addVisibilityWindowListener (listener);
+}
+
+/**
+ * Navigate to the previous session history item.
+ *
+ * @return <code>true</code> if the operation was successful and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ *
+ * @see #forward
+ * 
+ * @since 3.0
+ */
+public boolean back () {
+	checkWidget();
+	return webBrowser.back ();
+}
+
+protected void checkSubclass () {
+	String name = getClass ().getName ();
+	int index = name.lastIndexOf ('.');
+	if (!name.substring (0, index + 1).equals (PACKAGE_PREFIX)) {
+		SWT.error (SWT.ERROR_INVALID_SUBCLASS);
+	}
+}
+
+/**
+ * Executes the specified script.
+ * <p>
+ * Executes a script containing javascript commands in the context of the current document.
+ * If document-defined functions or properties are accessed by the script then this method
+ * should not be invoked until the document has finished loading (<code>ProgressListener.completed()</code>
+ * gives notification of this).
+ * 
+ * @param script the script with javascript commands
+ *  
+ * @return <code>true</code> if the operation was successful and <code>false</code> otherwise
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the script is null</li>
+ * </ul>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ *
+ * @see ProgressListener#completed(ProgressEvent)
+ * 
+ * @since 3.1
+ */
+public boolean execute (String script) {
+	checkWidget();
+	if (script == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	return webBrowser.execute (script);
+}
+
+/**
+ * Returns the result, if any, of executing the specified script.
+ * <p>
+ * Evaluates a script containing javascript commands in the context of
+ * the current document.  If document-defined functions or properties
+ * are accessed by the script then this method should not be invoked
+ * until the document has finished loading (<code>ProgressListener.completed()</code>
+ * gives notification of this).
+ * </p><p>
+ * If the script returns a value with a supported type then a java
+ * representation of the value is returned.  The supported
+ * javascript -> java mappings are:
+ * <ul>
+ * <li>javascript null or undefined -> <code>null</code></li>
+ * <li>javascript number -> <code>java.lang.Double</code></li>
+ * <li>javascript string -> <code>java.lang.String</code></li>
+ * <li>javascript boolean -> <code>java.lang.Boolean</code></li>
+ * <li>javascript array whose elements are all of supported types -> <code>java.lang.Object[]</code></li>
+ * </ul>
+ *
+ * An <code>SWTException</code> is thrown if the return value has an
+ * unsupported type, or if evaluating the script causes a javascript
+ * error to be thrown.
+ *
+ * @param script the script with javascript commands
+ *  
+ * @return the return value, if any, of executing the script
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the script is null</li>
+ * </ul>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_FAILED_EVALUATE when the script evaluation causes a javascript error to be thrown</li>
+ *    <li>ERROR_INVALID_RETURN_VALUE when the script returns a value of unsupported type</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ * 
+ * @see ProgressListener#completed(ProgressEvent)
+ * 
+ * @since 3.5
+ */
+public Object evaluate (String script) throws SWTException {
+	checkWidget();
+	if (script == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	return webBrowser.evaluate (script);
+}
+
+/**
+ * Navigate to the next session history item.
+ *
+ * @return <code>true</code> if the operation was successful and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ * 
+ * @see #back
+ * 
+ * @since 3.0
+ */
+public boolean forward () {
+	checkWidget();
+	return webBrowser.forward ();
+}
+
+/**
+ * Returns the type of native browser being used by this instance.
+ * Examples: "mozilla", "ie", "safari", "voyager"
+ *
+ * @return the type of the native browser
+ * 
+ * @since 3.5
+ */
+public String getBrowserType () {
+	checkWidget();
+	return webBrowser.getBrowserType ();
+}
+
+/**
+ * Returns <code>true</code> if javascript will be allowed to run in pages
+ * subsequently viewed in the receiver, and <code>false</code> otherwise.
+ *
+ * @return the receiver's javascript enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setJavascriptEnabled
+ * 
+ * @since 3.5
+ */
+public boolean getJavascriptEnabled () {
+	checkWidget();
+	return webBrowser.jsEnabled;
+}
+
+public int getStyle () {
+	/*
+	* If SWT.BORDER was specified at creation time then getStyle() should answer
+	* it even though it is removed for IE on win32 in checkStyle().
+	*/
+	return super.getStyle () | (userStyle & SWT.BORDER);
+}
+
+/**
+ * Returns a string with HTML that represents the content of the current page.
+ *
+ * @return HTML representing the current page or an empty <code>String</code>
+ * if this is empty
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ *
+ * @since 3.4
+ */
+public String getText () {
+	checkWidget();
+	return webBrowser.getText ();
+}
+
+/**
+ * Returns the current URL.
+ *
+ * @return the current URL or an empty <code>String</code> if there is no current URL
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ *
+ * @see #setUrl
+ * 
+ * @since 3.0
+ */
+public String getUrl () {
+	checkWidget();
+	return webBrowser.getUrl ();
+}
+
+/**
+ * Returns the JavaXPCOM <code>nsIWebBrowser</code> for the receiver, or <code>null</code>
+ * if it is not available.  In order for an <code>nsIWebBrowser</code> to be returned all
+ * of the following must be true: <ul>
+ *    <li>the receiver's style must be <code>SWT.MOZILLA</code></li>
+ *    <li>the classes from JavaXPCOM &gt;= 1.8.1.2 must be resolvable at runtime</li>
+ *    <li>the version of the underlying XULRunner must be &gt;= 1.8.1.2</li>
+ * </ul> 
+ *
+ * @return the receiver's JavaXPCOM <code>nsIWebBrowser</code> or <code>null</code>
+ * 
+ * @since 3.3
+ */
+public Object getWebBrowser () {
+	checkWidget();
+	return webBrowser.getWebBrowser ();
+}
+
+/**
+ * Returns <code>true</code> if the receiver can navigate to the 
+ * previous session history item, and <code>false</code> otherwise.
+ *
+ * @return the receiver's back command enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #back
+ */
+public boolean isBackEnabled () {
+	checkWidget();
+	return webBrowser.isBackEnabled ();
+}
+
+public boolean isFocusControl () {
+	checkWidget();
+	if (webBrowser.isFocusControl ()) return true;
+	return super.isFocusControl ();
+}
+
+/**
+ * Returns <code>true</code> if the receiver can navigate to the 
+ * next session history item, and <code>false</code> otherwise.
+ *
+ * @return the receiver's forward command enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #forward
+ */
+public boolean isForwardEnabled () {
+	checkWidget();
+	return webBrowser.isForwardEnabled ();
+}
+
+/**
+ * Refresh the current page.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ *
+ * @since 3.0
+ */
+public void refresh () {
+	checkWidget();
+	webBrowser.refresh ();
+}
+
+/**	 
+ * Removes the listener from the collection of listeners who will
+ * be notified when authentication is required.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.5
+ */
+public void removeAuthenticationListener (AuthenticationListener listener) {
+	checkWidget();
+	if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	webBrowser.removeAuthenticationListener (listener);
+}
+
+/**	 
+ * Removes the listener from the collection of listeners who will
+ * be notified when the window hosting the receiver should be closed.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void removeCloseWindowListener (CloseWindowListener listener) {
+	checkWidget();
+	if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	webBrowser.removeCloseWindowListener (listener);
+}
+
+/**	 
+ * Removes the listener from the collection of listeners who will
+ * be notified when the current location is changed or about to be changed.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void removeLocationListener (LocationListener listener) {
+	checkWidget();
+	if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	webBrowser.removeLocationListener (listener);
+}
+
+/**	 
+ * Removes the listener from the collection of listeners who will
+ * be notified when a new window needs to be created.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void removeOpenWindowListener (OpenWindowListener listener) {
+	checkWidget();
+	if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	webBrowser.removeOpenWindowListener (listener);
+}
+
+/**	 
+ * Removes the listener from the collection of listeners who will
+ * be notified when a progress is made during the loading of the current 
+ * URL or when the loading of the current URL has been completed.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void removeProgressListener (ProgressListener listener) {
+	checkWidget();
+	if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	webBrowser.removeProgressListener (listener);
+}
+
+/**	 
+ * Removes the listener from the collection of listeners who will
+ * be notified when the status text is changed.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void removeStatusTextListener (StatusTextListener listener) {
+	checkWidget();
+	if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	webBrowser.removeStatusTextListener (listener);
+}
+
+/**	 
+ * Removes the listener from the collection of listeners who will
+ * be notified when the title of the current document is available
+ * or has changed.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void removeTitleListener (TitleListener listener) {
+	checkWidget();
+	if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	webBrowser.removeTitleListener (listener);
+}
+
+/**	 
+ * Removes the listener from the collection of listeners who will
+ * be notified when a window hosting the receiver needs to be displayed
+ * or hidden.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void removeVisibilityWindowListener (VisibilityWindowListener listener) {
+	checkWidget();
+	if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	webBrowser.removeVisibilityWindowListener (listener);
+}
+
+/**
+ * Sets whether javascript will be allowed to run in pages subsequently
+ * viewed in the receiver.  Note that setting this value does not affect
+ * the running of javascript in the current page.
+ *
+ * @param enabled the receiver's new javascript enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.5
+ */
+public void setJavascriptEnabled (boolean enabled) {
+	checkWidget();
+	webBrowser.jsEnabled = enabled;
+	webBrowser.jsEnabledChanged = true;
+}
+
+/**
+ * Renders a string containing HTML.  The rendering of the content occurs asynchronously.
+ * 
+ * <p>
+ * The html parameter is Unicode encoded since it is a java <code>String</code>.
+ * As a result, the HTML meta tag charset should not be set. The charset is implied
+ * by the <code>String</code> itself.
+ * 
+ * @param html the HTML content to be rendered
+ *
+ * @return true if the operation was successful and false otherwise.
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the html is null</li>
+ * </ul>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ *  
+ * @see #setUrl
+ * 
+ * @since 3.0
+ */
+public boolean setText (String html) {
+	checkWidget();
+	if (html == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	return webBrowser.setText (html);
+}
+
+/**
+ * Begins loading a URL.  The loading of its content occurs asynchronously.
+ * 
+ * @param url the URL to be loaded
+ *
+ * @return true if the operation was successful and false otherwise.
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the url is null</li>
+ * </ul>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ *  
+ * @see #getUrl
+ * 
+ * @since 3.0
+ */
+public boolean setUrl (String url) {
+	checkWidget();
+	if (url == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	return webBrowser.setUrl (url);
+}
+
+/**
+ * Stop any loading and rendering activity.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_WIDGET_DISPOSED when the widget has been disposed</li>
+ * </ul>
+ *
+ * @since 3.0
+ */
+public void stop () {
+	checkWidget();
+	webBrowser.stop ();
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/BrowserFunction.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/BrowserFunction.java
new file mode 100644
index 0000000..f87aef0
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/BrowserFunction.java
@@ -0,0 +1,192 @@
+/*******************************************************************************
+ * Copyright (c) 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.browser;
+
+import org.eclipse.swt.*;
+
+/**
+ * Instances of this class represent java-side "functions" that
+ * are invokable from javascript.  Browser clients define these
+ * functions by subclassing <code>BrowserFunction</code> and
+ * overriding its <code>function(Object[])</code> method.  This
+ * method will be invoked whenever javascript running in the
+ * Browser makes a call with the function's name.
+ * 
+ * <p>
+ * Application code must explicitly invoke the
+ * <code>BrowserFunction.dispose()</code> method to release the
+ * resources managed by each instance when those instances are no
+ * longer required.  Since there is usually a correlation between
+ * the registering of BrowserFunction(s) in a Browser and the
+ * loading of a page in the Browser that is aware of these
+ * functions, the <code>LocationListener.changed()</code> listener
+ * is often a good place to do this.
+ * </p><p>
+ * Note that disposing a Browser automatically disposes all
+ * BrowserFunctions associated with it.
+ * </p>
+ * 
+ * @see #dispose()
+ * @see #function(Object[])
+ * @see org.eclipse.swt.browser.LocationListener#changed(LocationEvent)
+ * 
+ * @since 3.5
+ */
+public class BrowserFunction {
+	Browser browser;
+	String name;
+	String functionString;
+	int index;
+	boolean isEvaluate;
+
+/**
+ * Constructs a new instance of this class, which will be invokable
+ * by javascript running in the specified Browser.
+ * <p>
+ * You must dispose the BrowserFunction when it is no longer required.
+ * A common place to do this is in a <code>LocationListener.changed()</code>
+ * listener.
+ * </p>
+ * @param browser the browser whose javascript can invoke this function
+ * @param name the name that javascript will use to invoke this function
+ *  
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the browser is null</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the name is null</li>
+ * </ul>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the browser has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #dispose()
+ * @see org.eclipse.swt.browser.LocationListener#changed(LocationEvent)
+ */
+public BrowserFunction (Browser browser, String name) {
+	this (browser, name, true);
+}
+
+BrowserFunction (Browser browser, String name, boolean create) {
+	super ();
+	if (browser == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	if (name == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	if (browser.isDisposed ()) SWT.error (SWT.ERROR_WIDGET_DISPOSED);
+	browser.checkWidget ();
+	this.browser = browser;
+	this.name = name;
+	if (create) browser.webBrowser.createFunction (this);
+}
+
+/**
+ * Disposes of the resources associated with this BrowserFunction.
+ * Applications must dispose of all BrowserFunctions that they create.
+ * </p><p>
+ * Note that disposing a Browser automatically disposes all
+ * BrowserFunctions associated with it.
+ * </p>
+ */
+public void dispose () {
+	dispose (true);
+}
+
+void dispose (boolean remove) {
+	if (index < 0) return;
+	if (remove) browser.webBrowser.destroyFunction (this);
+	browser = null;
+	name = functionString = null;
+	index = -1;
+}
+
+/**
+ * Subclasses should override this method.  This method is invoked when
+ * the receiver's function is called from javascript.  If all of the
+ * arguments that are passed to the javascript function call are of
+ * supported types then this method is invoked with the argument values
+ * converted as follows:
+ * 
+ * javascript null or undefined -> <code>null</code>
+ * javascript number -> <code>java.lang.Double</code>
+ * javascript string -> <code>java.lang.String</code>
+ * javascript boolean -> <code>java.lang.Boolean</code>
+ * javascript array whose elements are all of supported types -> <code>java.lang.Object[]</code>
+ *
+ * If any of the Javascript arguments are of unsupported types then the
+ * function invocation will fail and this method will not be called.
+ * 
+ * This method must return a value with one of these supported types to
+ * the javascript caller (note that any subclass of <code>java.lang.Number</code>
+ * will be successfully converted to a javascript number).
+ * 
+ * @param arguments the javascript arguments converted to java equivalents 
+ * @return the value to return to the javascript caller
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_FUNCTION_DISPOSED when the BrowserFunction has been disposed</li>
+ * </ul>
+ */
+public Object function (Object[] arguments) {
+	if (index < 0) SWT.error (SWT.ERROR_FUNCTION_DISPOSED);
+	browser.checkWidget ();
+	return null;
+}
+
+/**
+ * Returns the Browser whose pages can invoke this BrowserFunction.
+ *
+ * @return the Browser associated with this BrowserFunction
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_FUNCTION_DISPOSED when the BrowserFunction has been disposed</li>
+ * </ul>
+ */
+public Browser getBrowser () {
+	if (index < 0) SWT.error (SWT.ERROR_FUNCTION_DISPOSED);
+	browser.checkWidget ();
+	return browser;
+}
+
+/**
+ * Returns the name that javascript can use to invoke this BrowserFunction.
+ * 
+ * @return the BrowserFunction's name
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS when called from the wrong thread</li>
+ *    <li>ERROR_FUNCTION_DISPOSED when the BrowserFunction has been disposed</li>
+ * </ul>
+ */
+public String getName () {
+	if (index < 0) SWT.error (SWT.ERROR_FUNCTION_DISPOSED);
+	browser.checkWidget ();
+	return name;
+}
+
+/**
+ * Returns <code>true</code> if this BrowserFunction has been disposed
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the BrowserFunction.
+ * When a BrowserFunction has been disposed it is an error to
+ * invoke any of its methods.
+ * </p><p>
+ * Note that disposing a Browser automatically disposes all
+ * BrowserFunctions associated with it.
+ * </p>
+ * @return <code>true</code> if this BrowserFunction has been disposed
+ * and <code>false</code> otherwise
+ */
+public boolean isDisposed () {
+	return index < 0;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/WebBrowser.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/WebBrowser.java
new file mode 100644
index 0000000..ea8ef4b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/common/org/eclipse/swt/browser/WebBrowser.java
@@ -0,0 +1,598 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 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.browser;
+
+import java.util.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.widgets.*;
+
+abstract class WebBrowser {
+	Browser browser;
+	Hashtable functions = new Hashtable ();
+	AuthenticationListener[] authenticationListeners = new AuthenticationListener[0];
+	CloseWindowListener[] closeWindowListeners = new CloseWindowListener[0];
+	LocationListener[] locationListeners = new LocationListener[0];
+	OpenWindowListener[] openWindowListeners = new OpenWindowListener[0];
+	ProgressListener[] progressListeners = new ProgressListener[0];
+	StatusTextListener[] statusTextListeners = new StatusTextListener[0];
+	TitleListener[] titleListeners = new TitleListener[0];
+	VisibilityWindowListener[] visibilityWindowListeners = new VisibilityWindowListener[0];
+	boolean jsEnabled = true;
+	boolean jsEnabledChanged;
+	int nextFunctionIndex = 1;
+	Object evaluateResult;
+
+	static final String ERROR_ID = "org.eclipse.swt.browser.error"; // $NON-NLS-1$
+	static final String EXECUTE_ID = "SWTExecuteTemporaryFunction"; // $NON-NLS-1$
+	static String CookieName, CookieValue, CookieUrl;
+	static boolean CookieResult;
+	static Runnable MozillaClearSessions, NativeClearSessions;
+	static Runnable MozillaGetCookie, NativeGetCookie;
+	static Runnable MozillaSetCookie, NativeSetCookie;
+
+	/* Key Mappings */
+	static final int [][] KeyTable = {
+		/* Keyboard and Mouse Masks */
+		{18,	SWT.ALT},
+		{16,	SWT.SHIFT},
+		{17,	SWT.CONTROL},
+		{224,	SWT.COMMAND},
+
+		/* Literal Keys */
+		{65,	'a'},
+		{66,	'b'},
+		{67,	'c'},
+		{68,	'd'},
+		{69,	'e'},
+		{70,	'f'},
+		{71,	'g'},
+		{72,	'h'},
+		{73,	'i'},
+		{74,	'j'},
+		{75,	'k'},
+		{76,	'l'},
+		{77,	'm'},
+		{78,	'n'},
+		{79,	'o'},
+		{80,	'p'},
+		{81,	'q'},
+		{82,	'r'},
+		{83,	's'},
+		{84,	't'},
+		{85,	'u'},
+		{86,	'v'},
+		{87,	'w'},
+		{88,	'x'},
+		{89,	'y'},
+		{90,	'z'},
+		{48,	'0'},
+		{49,	'1'},
+		{50,	'2'},
+		{51,	'3'},
+		{52,	'4'},
+		{53,	'5'},
+		{54,	'6'},
+		{55,	'7'},
+		{56,	'8'},
+		{57,	'9'},
+		{32,	' '},
+		{59,	';'},
+		{61,	'='},
+		{188,	','},
+		{190,	'.'},
+		{191,	'/'},
+		{219,	'['},
+		{221,	']'},
+		{222,	'\''},
+		{192,	'`'},
+		{220,	'\\'},
+		{108,	'|'},
+
+		/* Non-Numeric Keypad Keys */
+		{37,	SWT.ARROW_LEFT},
+		{39,	SWT.ARROW_RIGHT},
+		{38,	SWT.ARROW_UP},
+		{40,	SWT.ARROW_DOWN},
+		{45,	SWT.INSERT},
+		{36,	SWT.HOME},
+		{35,	SWT.END},
+		{46,	SWT.DEL},
+		{33,	SWT.PAGE_UP},
+		{34,	SWT.PAGE_DOWN},
+
+		/* Virtual and Ascii Keys */
+		{8,		SWT.BS},
+		{13,	SWT.CR},
+		{9,		SWT.TAB},
+		{27,	SWT.ESC},
+		{12,	SWT.DEL},
+
+		/* Functions Keys */
+		{112,	SWT.F1},
+		{113,	SWT.F2},
+		{114,	SWT.F3},
+		{115,	SWT.F4},
+		{116,	SWT.F5},
+		{117,	SWT.F6},
+		{118,	SWT.F7},
+		{119,	SWT.F8},
+		{120,	SWT.F9},
+		{121,	SWT.F10},
+		{122,	SWT.F11},
+		{123,	SWT.F12},
+		{124,	SWT.F13},
+		{125,	SWT.F14},
+		{126,	SWT.F15},
+		{127,	0},
+		{128,	0},
+		{129,	0},
+		{130,	0},
+		{131,	0},
+		{132,	0},
+		{133,	0},
+		{134,	0},
+		{135,	0},
+
+		/* Numeric Keypad Keys */
+		{96,	SWT.KEYPAD_0},
+		{97,	SWT.KEYPAD_1},
+		{98,	SWT.KEYPAD_2},
+		{99,	SWT.KEYPAD_3},
+		{100,	SWT.KEYPAD_4},
+		{101,	SWT.KEYPAD_5},
+		{102,	SWT.KEYPAD_6},
+		{103,	SWT.KEYPAD_7},
+		{104,	SWT.KEYPAD_8},
+		{105,	SWT.KEYPAD_9},
+		{14,	SWT.KEYPAD_CR},
+		{107,	SWT.KEYPAD_ADD},
+		{109,	SWT.KEYPAD_SUBTRACT},
+		{106,	SWT.KEYPAD_MULTIPLY},
+		{111,	SWT.KEYPAD_DIVIDE},
+		{110,	SWT.KEYPAD_DECIMAL},
+
+		/* Other keys */
+		{20,	SWT.CAPS_LOCK},
+		{144,	SWT.NUM_LOCK},
+		{145,	SWT.SCROLL_LOCK},
+		{44,	SWT.PRINT_SCREEN},
+		{6,		SWT.HELP},
+		{19,	SWT.PAUSE},
+		{3,		SWT.BREAK},
+
+		/* Safari-specific */
+		{186,	';'},
+		{187,	'='},
+		{189,	'-'},
+	};
+
+public class EvaluateFunction extends BrowserFunction {
+	public EvaluateFunction (Browser browser, String name) {
+		super (browser, name, false);
+	}
+	public Object function (Object[] arguments) {
+		if (arguments[0] instanceof String) {
+			String string = (String)arguments[0];
+			if (string.startsWith (ERROR_ID)) {
+				String errorString = ExtractError (string);
+				if (errorString.length () > 0) {
+					evaluateResult = new SWTException (SWT.ERROR_FAILED_EVALUATE, errorString);
+				} else {
+					evaluateResult = new SWTException (SWT.ERROR_FAILED_EVALUATE);
+				}
+				return null;
+			}
+		}
+		evaluateResult = arguments[0];
+		return null;
+	}
+}
+
+public void addAuthenticationListener (AuthenticationListener listener) {
+	AuthenticationListener[] newAuthenticationListeners = new AuthenticationListener[authenticationListeners.length + 1];
+	System.arraycopy(authenticationListeners, 0, newAuthenticationListeners, 0, authenticationListeners.length);
+	authenticationListeners = newAuthenticationListeners;
+	authenticationListeners[authenticationListeners.length - 1] = listener;
+}
+
+public void addCloseWindowListener (CloseWindowListener listener) {
+	CloseWindowListener[] newCloseWindowListeners = new CloseWindowListener[closeWindowListeners.length + 1];
+	System.arraycopy(closeWindowListeners, 0, newCloseWindowListeners, 0, closeWindowListeners.length);
+	closeWindowListeners = newCloseWindowListeners;
+	closeWindowListeners[closeWindowListeners.length - 1] = listener;
+}
+
+public void addLocationListener (LocationListener listener) {
+	LocationListener[] newLocationListeners = new LocationListener[locationListeners.length + 1];
+	System.arraycopy(locationListeners, 0, newLocationListeners, 0, locationListeners.length);
+	locationListeners = newLocationListeners;
+	locationListeners[locationListeners.length - 1] = listener;
+}
+
+public void addOpenWindowListener (OpenWindowListener listener) {
+	OpenWindowListener[] newOpenWindowListeners = new OpenWindowListener[openWindowListeners.length + 1];
+	System.arraycopy(openWindowListeners, 0, newOpenWindowListeners, 0, openWindowListeners.length);
+	openWindowListeners = newOpenWindowListeners;
+	openWindowListeners[openWindowListeners.length - 1] = listener;
+}
+
+public void addProgressListener (ProgressListener listener) {
+	ProgressListener[] newProgressListeners = new ProgressListener[progressListeners.length + 1];
+	System.arraycopy(progressListeners, 0, newProgressListeners, 0, progressListeners.length);
+	progressListeners = newProgressListeners;
+	progressListeners[progressListeners.length - 1] = listener;
+}
+
+public void addStatusTextListener (StatusTextListener listener) {
+	StatusTextListener[] newStatusTextListeners = new StatusTextListener[statusTextListeners.length + 1];
+	System.arraycopy(statusTextListeners, 0, newStatusTextListeners, 0, statusTextListeners.length);
+	statusTextListeners = newStatusTextListeners;
+	statusTextListeners[statusTextListeners.length - 1] = listener;
+}
+
+public void addTitleListener (TitleListener listener) {
+	TitleListener[] newTitleListeners = new TitleListener[titleListeners.length + 1];
+	System.arraycopy(titleListeners, 0, newTitleListeners, 0, titleListeners.length);
+	titleListeners = newTitleListeners;
+	titleListeners[titleListeners.length - 1] = listener;
+}
+
+public void addVisibilityWindowListener (VisibilityWindowListener listener) {
+	VisibilityWindowListener[] newVisibilityWindowListeners = new VisibilityWindowListener[visibilityWindowListeners.length + 1];
+	System.arraycopy(visibilityWindowListeners, 0, newVisibilityWindowListeners, 0, visibilityWindowListeners.length);
+	visibilityWindowListeners = newVisibilityWindowListeners;
+	visibilityWindowListeners[visibilityWindowListeners.length - 1] = listener;
+}
+
+public abstract boolean back ();
+
+public static void clearSessions () {
+	if (NativeClearSessions != null) NativeClearSessions.run ();
+	if (MozillaClearSessions != null) MozillaClearSessions.run ();
+}
+
+public static String GetCookie (String name, String url) {
+	CookieName = name; CookieUrl = url;
+	if (NativeGetCookie != null) NativeGetCookie.run ();
+	if (MozillaGetCookie != null) MozillaGetCookie.run ();
+	String result = CookieValue;
+	CookieName = CookieValue = CookieUrl = null;
+	return result;
+}
+
+public static boolean SetCookie (String value, String url) {
+	CookieValue = value; CookieUrl = url;
+	CookieResult = false;
+	if (NativeSetCookie != null) NativeSetCookie.run ();
+	if (MozillaSetCookie != null) MozillaSetCookie.run ();
+	CookieValue = CookieUrl = null;
+	return CookieResult;
+}
+
+public abstract void create (Composite parent, int style);
+
+static String CreateErrorString (String error) {
+	return ERROR_ID + error;
+}
+
+static String ExtractError (String error) {
+	return error.substring (ERROR_ID.length ());
+}
+
+public void createFunction (BrowserFunction function) {
+	/* 
+	 * If an existing function with the same name is found then
+	 * remove it so that it is not recreated on subsequent pages
+	 * (the new function overwrites the old one).
+	 */
+	Enumeration keys = functions.keys ();
+	while (keys.hasMoreElements ()) {
+		Object key = keys.nextElement ();
+		BrowserFunction current = (BrowserFunction)functions.get (key);
+		if (current.name.equals (function.name)) {
+			functions.remove (key);
+			break;
+		}
+	}
+
+	function.index = getNextFunctionIndex ();
+	registerFunction (function);
+
+	StringBuffer buffer = new StringBuffer ("window."); //$NON-NLS-1$
+	buffer.append (function.name);
+	buffer.append (" = function "); //$NON-NLS-1$
+	buffer.append (function.name);
+	buffer.append ("() {var result = window.external.callJava("); //$NON-NLS-1$
+	buffer.append (function.index);
+	buffer.append (",Array.prototype.slice.call(arguments)); if (typeof result == 'string' && result.indexOf('"); //$NON-NLS-1$
+	buffer.append (ERROR_ID);
+	buffer.append ("') == 0) {var error = new Error(result.substring("); //$NON-NLS-1$
+	buffer.append (ERROR_ID.length ());
+	buffer.append (")); throw error;} return result;};"); //$NON-NLS-1$
+	buffer.append ("for (var i = 0; i < frames.length; i++) {try { frames[i]."); //$NON-NLS-1$
+	buffer.append (function.name);
+	buffer.append (" = window."); //$NON-NLS-1$
+	buffer.append (function.name);
+	buffer.append (";} catch (e) {} };"); //$NON-NLS-1$
+	function.functionString = buffer.toString ();
+	execute (function.functionString);
+}
+
+void deregisterFunction (BrowserFunction function) {
+	functions.remove (new Integer (function.index));
+}
+
+public void destroyFunction (BrowserFunction function) {
+	String deleteString = getDeleteFunctionString (function.name); 
+	StringBuffer buffer = new StringBuffer ("for (var i = 0; i < frames.length; i++) {try {frames[i].eval(\""); //$NON-NLS-1$
+	buffer.append (deleteString);
+	buffer.append ("\");} catch (e) {}}"); //$NON-NLS-1$
+	execute (buffer.toString ());
+	execute (deleteString);
+	deregisterFunction (function);
+}
+
+public abstract boolean execute (String script);
+
+public Object evaluate (String script) throws SWTException {
+	BrowserFunction function = new EvaluateFunction (browser, ""); // $NON-NLS-1$
+	int index = getNextFunctionIndex ();
+	function.index = index;
+	function.isEvaluate = true;
+	registerFunction (function);
+	String functionName = EXECUTE_ID + index;
+
+	StringBuffer buffer = new StringBuffer ("window."); // $NON-NLS-1$
+	buffer.append (functionName);
+	buffer.append (" = function "); // $NON-NLS-1$
+	buffer.append (functionName);
+	buffer.append ("() {\n"); // $NON-NLS-1$
+	buffer.append (script);
+	buffer.append ("\n};"); // $NON-NLS-1$
+	execute (buffer.toString ());
+
+	buffer = new StringBuffer ("if (window."); // $NON-NLS-1$
+	buffer.append (functionName);
+	buffer.append (" == undefined) {window.external.callJava("); // $NON-NLS-1$
+	buffer.append (index);
+	buffer.append (", ['"); // $NON-NLS-1$
+	buffer.append (ERROR_ID);
+	buffer.append ("']);} else {try {var result = "); // $NON-NLS-1$
+	buffer.append (functionName);
+	buffer.append ("(); window.external.callJava("); // $NON-NLS-1$
+	buffer.append (index);
+	buffer.append (", [result]);} catch (e) {window.external.callJava("); // $NON-NLS-1$
+	buffer.append (index);
+	buffer.append (", ['"); // $NON-NLS-1$
+	buffer.append (ERROR_ID);
+	buffer.append ("' + e.message]);}}"); // $NON-NLS-1$
+	execute (buffer.toString ());
+	execute (getDeleteFunctionString (functionName));
+	deregisterFunction (function);
+
+	Object result = evaluateResult;
+	evaluateResult = null;
+	if (result instanceof SWTException) throw (SWTException)result;
+	return result;
+}
+
+public abstract boolean forward ();
+
+public abstract String getBrowserType ();
+
+String getDeleteFunctionString (String functionName) {
+	return "delete window." + functionName;	//$NON-NLS-1$
+}
+
+int getNextFunctionIndex () {
+	return nextFunctionIndex++;
+}
+
+public abstract String getText ();
+
+public abstract String getUrl ();
+
+public Object getWebBrowser () {
+	return null;
+}
+
+public abstract boolean isBackEnabled ();
+
+public boolean isFocusControl () {
+	return false;
+}
+
+public abstract boolean isForwardEnabled ();
+
+public abstract void refresh ();
+
+void registerFunction (BrowserFunction function) {
+	functions.put (new Integer (function.index), function);
+}
+
+public void removeAuthenticationListener (AuthenticationListener listener) {
+	if (authenticationListeners.length == 0) return;
+	int index = -1;
+	for (int i = 0; i < authenticationListeners.length; i++) {
+		if (listener == authenticationListeners[i]) {
+			index = i;
+			break;
+		}
+	}
+	if (index == -1) return;
+	if (authenticationListeners.length == 1) {
+		authenticationListeners = new AuthenticationListener[0];
+		return;
+	}
+	AuthenticationListener[] newAuthenticationListeners = new AuthenticationListener[authenticationListeners.length - 1];
+	System.arraycopy (authenticationListeners, 0, newAuthenticationListeners, 0, index);
+	System.arraycopy (authenticationListeners, index + 1, newAuthenticationListeners, index, authenticationListeners.length - index - 1);
+	authenticationListeners = newAuthenticationListeners;
+}
+
+public void removeCloseWindowListener (CloseWindowListener listener) {
+	if (closeWindowListeners.length == 0) return;
+	int index = -1;
+	for (int i = 0; i < closeWindowListeners.length; i++) {
+		if (listener == closeWindowListeners[i]){
+			index = i;
+			break;
+		}
+	}
+	if (index == -1) return;
+	if (closeWindowListeners.length == 1) {
+		closeWindowListeners = new CloseWindowListener[0];
+		return;
+	}
+	CloseWindowListener[] newCloseWindowListeners = new CloseWindowListener[closeWindowListeners.length - 1];
+	System.arraycopy (closeWindowListeners, 0, newCloseWindowListeners, 0, index);
+	System.arraycopy (closeWindowListeners, index + 1, newCloseWindowListeners, index, closeWindowListeners.length - index - 1);
+	closeWindowListeners = newCloseWindowListeners;
+}
+
+public void removeLocationListener (LocationListener listener) {
+	if (locationListeners.length == 0) return;
+	int index = -1;
+	for (int i = 0; i < locationListeners.length; i++) {
+		if (listener == locationListeners[i]){
+			index = i;
+			break;
+		}
+	}
+	if (index == -1) return;
+	if (locationListeners.length == 1) {
+		locationListeners = new LocationListener[0];
+		return;
+	}
+	LocationListener[] newLocationListeners = new LocationListener[locationListeners.length - 1];
+	System.arraycopy (locationListeners, 0, newLocationListeners, 0, index);
+	System.arraycopy (locationListeners, index + 1, newLocationListeners, index, locationListeners.length - index - 1);
+	locationListeners = newLocationListeners;
+}
+
+public void removeOpenWindowListener (OpenWindowListener listener) {
+	if (openWindowListeners.length == 0) return;
+	int index = -1;
+	for (int i = 0; i < openWindowListeners.length; i++) {
+		if (listener == openWindowListeners[i]){
+			index = i;
+			break;
+		}
+	}
+	if (index == -1) return;
+	if (openWindowListeners.length == 1) {
+		openWindowListeners = new OpenWindowListener[0];
+		return;
+	}
+	OpenWindowListener[] newOpenWindowListeners = new OpenWindowListener[openWindowListeners.length - 1];
+	System.arraycopy (openWindowListeners, 0, newOpenWindowListeners, 0, index);
+	System.arraycopy (openWindowListeners, index + 1, newOpenWindowListeners, index, openWindowListeners.length - index - 1);
+	openWindowListeners = newOpenWindowListeners;
+}
+
+public void removeProgressListener (ProgressListener listener) {
+	if (progressListeners.length == 0) return;
+	int index = -1;
+	for (int i = 0; i < progressListeners.length; i++) {
+		if (listener == progressListeners[i]){
+			index = i;
+			break;
+		}
+	}
+	if (index == -1) return;
+	if (progressListeners.length == 1) {
+		progressListeners = new ProgressListener[0];
+		return;
+	}
+	ProgressListener[] newProgressListeners = new ProgressListener[progressListeners.length - 1];
+	System.arraycopy (progressListeners, 0, newProgressListeners, 0, index);
+	System.arraycopy (progressListeners, index + 1, newProgressListeners, index, progressListeners.length - index - 1);
+	progressListeners = newProgressListeners;
+}
+
+public void removeStatusTextListener (StatusTextListener listener) {
+	if (statusTextListeners.length == 0) return;
+	int index = -1;
+	for (int i = 0; i < statusTextListeners.length; i++) {
+		if (listener == statusTextListeners[i]){
+			index = i;
+			break;
+		}
+	}
+	if (index == -1) return;
+	if (statusTextListeners.length == 1) {
+		statusTextListeners = new StatusTextListener[0];
+		return;
+	}
+	StatusTextListener[] newStatusTextListeners = new StatusTextListener[statusTextListeners.length - 1];
+	System.arraycopy (statusTextListeners, 0, newStatusTextListeners, 0, index);
+	System.arraycopy (statusTextListeners, index + 1, newStatusTextListeners, index, statusTextListeners.length - index - 1);
+	statusTextListeners = newStatusTextListeners;
+}
+
+public void removeTitleListener (TitleListener listener) {
+	if (titleListeners.length == 0) return;
+	int index = -1;
+	for (int i = 0; i < titleListeners.length; i++) {
+		if (listener == titleListeners[i]){
+			index = i;
+			break;
+		}
+	}
+	if (index == -1) return;
+	if (titleListeners.length == 1) {
+		titleListeners = new TitleListener[0];
+		return;
+	}
+	TitleListener[] newTitleListeners = new TitleListener[titleListeners.length - 1];
+	System.arraycopy (titleListeners, 0, newTitleListeners, 0, index);
+	System.arraycopy (titleListeners, index + 1, newTitleListeners, index, titleListeners.length - index - 1);
+	titleListeners = newTitleListeners;
+}
+
+public void removeVisibilityWindowListener (VisibilityWindowListener listener) {
+	if (visibilityWindowListeners.length == 0) return;
+	int index = -1;
+	for (int i = 0; i < visibilityWindowListeners.length; i++) {
+		if (listener == visibilityWindowListeners[i]){
+			index = i;
+			break;
+		}
+	}
+	if (index == -1) return;
+	if (visibilityWindowListeners.length == 1) {
+		visibilityWindowListeners = new VisibilityWindowListener[0];
+		return;
+	}
+	VisibilityWindowListener[] newVisibilityWindowListeners = new VisibilityWindowListener[visibilityWindowListeners.length - 1];
+	System.arraycopy (visibilityWindowListeners, 0, newVisibilityWindowListeners, 0, index);
+	System.arraycopy (visibilityWindowListeners, index + 1, newVisibilityWindowListeners, index, visibilityWindowListeners.length - index - 1);
+	visibilityWindowListeners = newVisibilityWindowListeners;
+}
+
+public void setBrowser (Browser browser) {
+	this.browser = browser;
+}
+
+public abstract boolean setText (String html);
+
+public abstract boolean setUrl (String url);
+
+public abstract void stop ();
+
+int translateKey (int key) {
+	for (int i = 0; i < KeyTable.length; i++) {
+		if (KeyTable[i][0] == key) return KeyTable[i][1];
+	}
+	return 0;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/forms/org/eclipse/swt/browser/IE.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/forms/org/eclipse/swt/browser/IE.java
new file mode 100644
index 0000000..4a52398
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/forms/org/eclipse/swt/browser/IE.java
@@ -0,0 +1,280 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.browser;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.widgets.*;
+
+class IE extends WebBrowser {
+	
+	int webBrowser, host, jniRef;
+
+	boolean ignoreDispose;
+
+	static {
+		NativeClearSessions = new Runnable() {
+			public void run() {
+//				OS.InternetSetOption (0, OS.INTERNET_OPTION_END_BROWSER_SESSION, 0, 0);
+			}
+		};
+	}
+
+public void create(Composite parent, int style) {
+	host = OS.gcnew_WindowsFormsHost();
+	if (host == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	webBrowser = OS.gcnew_WebBrowser();
+	if (webBrowser == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	OS.WindowsFormsHost_Child(host, webBrowser);
+	jniRef = OS.NewGlobalRef(this);
+	if (jniRef == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	OS.WebBrowser_ScriptErrorsSuppressed(webBrowser, true);
+	int handler = OS.gcnew_WebBrowserNavigatingEventHandler(jniRef, "HandleNavigating");
+	OS.WebBrowser_Navigating(webBrowser, handler);
+	OS.GCHandle_Free(handler);
+	handler = OS.gcnew_WebBrowserProgressChangedEventHandler(jniRef, "HandleProgressChanged");
+	OS.WebBrowser_ProgressChanged(webBrowser, handler);
+	OS.GCHandle_Free(handler);
+	handler = OS.gcnew_EventHandler(jniRef, "HandleStatusTextChanged");
+	OS.WebBrowser_StatusTextChanged(webBrowser, handler);
+	OS.GCHandle_Free(handler);
+	handler = OS.gcnew_EventHandler(jniRef, "HandleDocumentTitleChanged");
+	OS.WebBrowser_DocumentTitleChanged(webBrowser, handler);
+	OS.GCHandle_Free(handler);
+	handler = OS.gcnew_WebBrowserDocumentCompletedEventHandler(jniRef, "HandleDocumentCompleted");
+	OS.WebBrowser_DocumentCompleted(webBrowser, handler);
+	OS.GCHandle_Free(handler);
+
+	int parentHandle = browser.handle;
+	int children = OS.Panel_Children(parentHandle);
+	OS.UIElementCollection_Insert(children, 0, host);
+	OS.GCHandle_Free(children);
+	OS.FrameworkElement_Width(host, OS.FrameworkElement_Width(parentHandle));
+	OS.FrameworkElement_Height(host, OS.FrameworkElement_Height(parentHandle));
+	
+	Listener listener = new Listener() {
+		public void handleEvent(Event event) {
+			switch (event.type) {
+				case SWT.Dispose: {
+					if (ignoreDispose) {
+						ignoreDispose = false;
+						break;
+					}
+					ignoreDispose = true;
+					browser.notifyListeners (event.type, event);
+					event.type = SWT.NONE;
+					OS.GCHandle_Free(host);
+					OS.GCHandle_Free(webBrowser);
+					OS.DeleteGlobalRef(jniRef);
+					host = webBrowser = jniRef = 0;
+					break;
+				}
+				case SWT.Resize: {
+					OS.FrameworkElement_Width(host, OS.FrameworkElement_Width(browser.handle));
+					OS.FrameworkElement_Height(host, OS.FrameworkElement_Height(browser.handle));
+					break;
+				}
+			}
+		}
+	};
+	browser.addListener(SWT.Resize, listener);
+	browser.addListener(SWT.Dispose, listener);
+}
+
+public boolean back() {
+	return OS.WebBrowser_GoBack(webBrowser);
+}
+
+public boolean execute(String script) {
+//	int document = OS.WebBrowser_Document(frame);
+//	int length = script.length ();
+//	char [] buffer = new char [length + 1];
+//	script.getChars (0, length, buffer, 0);
+//	int str = OS.gcnew_String (buffer);
+//	int result = OS.HtmlDocument_InvokeScript(document, str);
+//	OS.GCHandle_Free(result);
+//	OS.GCHandle_Free(str);
+//	OS.GCHandle_Free(document);
+	return true;
+}
+
+public boolean forward() {
+	return OS.WebBrowser_GoForward(webBrowser);
+}
+
+public String getBrowserType () {
+	return "ie"; //$NON-NLS-1$
+}
+
+public String getText () {
+	// TODO
+	return ""; //$NON-NLS-1$
+}
+
+public String getUrl() {
+	int uri = OS.WebBrowser_Url(webBrowser);
+	String url = getUriString (uri);
+	if (uri != 0) OS.GCHandle_Free(uri);
+	return url;
+}
+
+String getUriString(int uri) {
+	if (uri == 0) return null;
+	int str = OS.Object_ToString(uri);
+	int charArray = OS.String_ToCharArray(str);
+	char[] chars = new char[OS.String_Length(str)];
+	OS.memcpy(chars, charArray, chars.length * 2);
+	OS.GCHandle_Free(charArray);
+	String url = new String(chars);
+	OS.GCHandle_Free(str);
+	return url;
+}
+
+void HandleDocumentCompleted(int sender, int e) {
+	if (webBrowser == 0) return;
+	int uri = OS.WebBrowserDocumentCompletedEventArgs_Url(e);
+	String url = getUriString (uri);
+	if (uri != 0) OS.GCHandle_Free(uri);
+	LocationEvent newEvent = new LocationEvent(browser);
+	newEvent.display = browser.getDisplay();
+	newEvent.widget = browser;
+	newEvent.location = url;
+	newEvent.doit = true;
+	for (int i = 0; i < locationListeners.length; i++) {
+		locationListeners[i].changing(newEvent);
+	}
+	if (browser.isDisposed()) return;
+	ProgressEvent progressEvent = new ProgressEvent(browser);
+	progressEvent.display = browser.getDisplay();
+	progressEvent.widget = browser;
+	for (int i = 0; i < progressListeners.length; i++) {
+		progressListeners[i].completed(progressEvent);
+	}
+}
+
+void HandleDocumentTitleChanged(int sender, int e) {
+	if (webBrowser == 0) return;
+	int str = OS.WebBrowser_DocumentTitle(webBrowser);
+	String title = "";
+	if (str != 0) {
+		int charArray = OS.String_ToCharArray(str);
+		char[] chars = new char[OS.String_Length(str)];
+		OS.memcpy(chars, charArray, chars.length * 2);
+		OS.GCHandle_Free(charArray);
+		OS.GCHandle_Free(str);
+		title = new String(chars);
+	}
+	TitleEvent newEvent = new TitleEvent(browser);
+	newEvent.display = browser.getDisplay();
+	newEvent.widget = browser;
+	newEvent.title = title;
+	for (int i = 0; i < titleListeners.length; i++) {
+		titleListeners[i].changed(newEvent);
+	}
+}
+
+void HandleNavigating(int sender, int e) {
+	if (webBrowser == 0) return;
+	int uri = OS.WebBrowserNavigatingEventArgs_Url(e);
+	String url = getUriString (uri);
+	if (uri != 0) OS.GCHandle_Free(uri);
+	LocationEvent newEvent = new LocationEvent(browser);
+	newEvent.display = browser.getDisplay();
+	newEvent.widget = browser;
+	newEvent.location = url;
+	newEvent.doit = true;
+	for (int i = 0; i < locationListeners.length; i++) {
+		locationListeners[i].changing(newEvent);
+	}
+}
+
+void HandleProgressChanged(int sender, int e) {
+	if (webBrowser == 0) return;
+	long nProgress = OS.WebBrowserProgressChangedEventArgs_CurrentProgress(e);
+	long nProgressMax = OS.WebBrowserProgressChangedEventArgs_MaximumProgress(e);
+	if (nProgress != -1) {
+		ProgressEvent newEvent = new ProgressEvent(browser);
+		newEvent.display = browser.getDisplay();
+		newEvent.widget = browser;
+		newEvent.current = (int)nProgress;
+		newEvent.total = (int)nProgressMax;
+		for (int i = 0; i < progressListeners.length; i++) {
+			progressListeners[i].changed(newEvent);
+		}
+	}
+}
+
+void HandleStatusTextChanged(int sender, int e) {
+	if (webBrowser == 0) return;
+	int str = OS.WebBrowser_StatusText(webBrowser);
+	String text = "";
+	if (str != 0) {
+		int charArray = OS.String_ToCharArray(str);
+		char[] chars = new char[OS.String_Length(str)];
+		OS.memcpy(chars, charArray, chars.length * 2);
+		OS.GCHandle_Free(charArray);
+		OS.GCHandle_Free(str);
+		text = new String(chars);
+	}
+	StatusTextEvent newEvent = new StatusTextEvent(browser);
+	newEvent.display = browser.getDisplay();
+	newEvent.widget = browser;
+	newEvent.text = text;
+	for (int i = 0; i < statusTextListeners.length; i++) {
+		statusTextListeners[i].changed(newEvent);
+	}
+}
+
+public boolean isBackEnabled() {
+	return OS.WebBrowser_CanGoBack(webBrowser);
+}
+
+public boolean isForwardEnabled() {
+	return OS.WebBrowser_CanGoForward(webBrowser);
+}
+
+public void refresh() {
+	OS.WebBrowser_Refresh(webBrowser);
+}
+
+public boolean setText(String html) {
+	int state = OS.WebBrowser_ReadyState(webBrowser);
+	if (!(state == OS.WebBrowserReadyState_Uninitialized || state == OS.WebBrowserReadyState_Complete)) {
+		OS.WebBrowser_Stop(webBrowser);
+	}
+	int length = html.length ();
+	char [] buffer = new char [length + 1];
+	html.getChars (0, length, buffer, 0);
+	int str = OS.gcnew_String (buffer);
+	if (str == 0) SWT.error (SWT.ERROR_NO_HANDLES);
+	OS.WebBrowser_DocumentText(webBrowser, str);
+	OS.GCHandle_Free(str);
+	return true;
+}
+
+public boolean setUrl(String url) {
+	int state = OS.WebBrowser_ReadyState(webBrowser);
+	if (!(state == OS.WebBrowserReadyState_Uninitialized || state == OS.WebBrowserReadyState_Complete)) {
+		OS.WebBrowser_Stop(webBrowser);
+	}
+	int length = url.length ();
+	char [] buffer = new char [length + 1];
+	url.getChars (0, length, buffer, 0);
+	int str = OS.gcnew_String (buffer);
+	OS.WebBrowser_Navigate(webBrowser, str);
+	OS.GCHandle_Free(str);
+	return true;
+}
+
+public void stop() {
+	OS.WebBrowser_Stop(webBrowser);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/photon/org/eclipse/swt/browser/Voyager.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/photon/org/eclipse/swt/browser/Voyager.java
new file mode 100755
index 0000000..075ac65
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/photon/org/eclipse/swt/browser/Voyager.java
@@ -0,0 +1,469 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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:
+ *     Chris McKillop (QNX Software Systems) - initial implementation
+ *******************************************************************************/
+package org.eclipse.swt.browser;
+
+import java.io.File;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.photon.*;
+import org.eclipse.swt.widgets.*;
+
+class Voyager extends WebBrowser {	
+	int webHandle;
+	String url = ""; //$NON-NLS-1$
+	String text = ""; //$NON-NLS-1$
+	int textOffset;
+	int currentProgress;
+	int totalProgress = 25;
+	/* browser to redirect content to */
+	Browser redirectBrowser;
+	static int instanceCount = 0;
+	
+	/* Package Name */
+	static Callback callback;
+
+public void create(Composite parent, int style) {
+	/* use Photon's built-in anchoring for resizing */
+	int[] args = {
+			OS.Pt_ARG_ANCHOR_FLAGS,
+			OS.Pt_TOP_ANCHORED_TOP | OS.Pt_BOTTOM_ANCHORED_BOTTOM | OS.Pt_LEFT_ANCHORED_LEFT | OS.Pt_RIGHT_ANCHORED_RIGHT,
+			OS.Pt_TOP_ANCHORED_TOP | OS.Pt_BOTTOM_ANCHORED_BOTTOM | OS.Pt_LEFT_ANCHORED_LEFT | OS.Pt_RIGHT_ANCHORED_RIGHT,
+			OS.Pt_ARG_FILL_COLOR,
+			0xFFFFFF,
+			0 };
+	webHandle = OS.PtCreateWidget(OS.PtWebClient(), browser.handle, args.length / 3, args);
+	if (webHandle == 0) {
+		browser.dispose();
+		SWT.error (SWT.ERROR_NO_HANDLES);
+	}
+
+	/* configure the widget with a specific server */
+	File netfront = new File("/usr/photon/bin/netfront"); //$NON-NLS-1$
+	String name, server;
+	if (netfront.exists() || (OS.QNX_MAJOR >= 6 && OS.QNX_MINOR >= 3 && OS.QNX_MICRO >= 0)) {
+		name = "NetfrontServer"; //$NON-NLS-1$
+		server = "netfront"; //$NON-NLS-1$
+	} else {
+		name = "VoyagerServer-2"; //$NON-NLS-1$
+		server = "vserver"; //$NON-NLS-1$
+	}
+	/* set client name */
+	byte[] nameBuffer = Converter.wcsToMbcs(null, name, true);
+	int namePtr = OS.malloc(nameBuffer.length);
+	OS.memmove(namePtr, nameBuffer, nameBuffer.length);
+	OS.PtSetResource(webHandle, OS.Pt_ARG_CLIENT_NAME, namePtr, 0);
+	OS.free(namePtr);
+	
+	/**
+	 * Feature in Photon PtWebClient.  If you give a server name
+	 * when the widget is created it will attempt to start a new server
+	 * rather then attaching a new window context to the existing server.
+	 * If you don't connect to the existing one then javascript window
+	 * creation will fail.
+	 */
+	if (instanceCount == 0) {
+		/* select server */
+		byte[] serverBuffer = Converter.wcsToMbcs(null, server, true);
+		int serverPtr = OS.malloc(serverBuffer.length);
+		OS.memmove(serverPtr, serverBuffer, serverBuffer.length);
+		OS.PtSetResource(webHandle, OS.Pt_ARG_WEB_SERVER, serverPtr, 0);
+		OS.free(serverPtr);
+	} 
+	instanceCount++;
+	
+	if (callback == null) callback = new Callback(this.getClass(), "webProc", 3, false); //$NON-NLS-1$
+	int webProc = callback.getAddress();
+	if (webProc == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+	OS.PtAddCallback(webHandle,OS.Pt_CB_WEB_CLOSE_WINDOW, webProc, OS.Pt_CB_WEB_CLOSE_WINDOW);
+	OS.PtAddCallback(webHandle,OS.Pt_CB_WEB_COMPLETE, webProc, OS.Pt_CB_WEB_COMPLETE);
+	OS.PtAddCallback(webHandle,OS.Pt_CB_WEB_DATA_REQ, webProc, OS.Pt_CB_WEB_DATA_REQ);
+	OS.PtAddCallback(webHandle,OS.Pt_CB_WEB_METADATA, webProc, OS.Pt_CB_WEB_METADATA);	
+	OS.PtAddCallback(webHandle,OS.Pt_CB_WEB_NEW_WINDOW, webProc, OS.Pt_CB_WEB_NEW_WINDOW);
+	OS.PtAddCallback(webHandle,OS.Pt_CB_WEB_START, webProc, OS.Pt_CB_WEB_START);
+	OS.PtAddCallback(webHandle,OS.Pt_CB_WEB_STATUS, webProc, OS.Pt_CB_WEB_STATUS);
+	OS.PtAddCallback(webHandle,OS.Pt_CB_WEB_URL, webProc, OS.Pt_CB_WEB_URL);
+	Listener listener = new Listener() {
+		public void handleEvent(Event event) {
+			switch (event.type) {
+				case SWT.Dispose: onDispose(); break;
+				case SWT.FocusIn: onFocusGained(event);	break;
+			}
+		}
+	};	
+	int[] folderEvents = new int[]{
+		SWT.Dispose,
+		SWT.FocusIn,  
+	};
+	for (int i = 0; i < folderEvents.length; i++) {
+		browser.addListener(folderEvents[i], listener);
+	}
+	OS.PtRealizeWidget(webHandle);
+}
+
+static int webProc(int handle, int data, int info) {
+	Display display = Display.getCurrent();
+	int parent = OS.PtWidgetParent (handle);
+	Widget widget = display.findWidget(parent);
+	if (widget != null && widget instanceof Browser) {
+		Browser browser = (Browser)widget;
+		return ((Voyager)browser.webBrowser).webProc(data, info);
+	}
+	return OS.Pt_CONTINUE;		
+}
+
+public boolean back() {
+	int ptr = OS.malloc(4);
+	int[] args = new int[]{OS.Pt_ARG_WEB_NAVIGATE_PAGE, ptr, 0};
+	OS.PtGetResources(webHandle, args.length / 3, args);
+	int[] result = new int[1];
+	OS.memmove(result, ptr, 4);
+	OS.memmove(result, result[0], 4);
+	OS.free(ptr);
+	if ((result[0] & (1 << OS.Pt_WEB_DIRECTION_BACK)) == 0) return false;
+	OS.PtSetResource(webHandle, OS.Pt_ARG_WEB_NAVIGATE_PAGE, OS.Pt_WEB_DIRECTION_BACK, 0);
+	return true;
+}
+
+int webProc(int data, int info) {
+	switch (data) {
+		case OS.Pt_CB_WEB_CLOSE_WINDOW: return Pt_CB_WEB_CLOSE_WINDOW(info);
+		case OS.Pt_CB_WEB_COMPLETE:	    return Pt_CB_WEB_COMPLETE(info);
+		case OS.Pt_CB_WEB_DATA_REQ:     return Pt_CB_WEB_DATA_REQ(info);
+		case OS.Pt_CB_WEB_METADATA:		return Pt_CB_WEB_METADATA(info);
+		case OS.Pt_CB_WEB_NEW_WINDOW:   return Pt_CB_WEB_NEW_WINDOW(info);
+		case OS.Pt_CB_WEB_START:	    return Pt_CB_WEB_START(info);
+		case OS.Pt_CB_WEB_STATUS:	    return Pt_CB_WEB_STATUS(info);
+		case OS.Pt_CB_WEB_URL:		    return Pt_CB_WEB_URL(info);
+	}
+	return OS.Pt_CONTINUE;
+}
+
+public boolean execute(String script) {
+	return false;
+}
+
+public boolean forward() {
+	int ptr = OS.malloc(4);
+	int[] args = new int[]{OS.Pt_ARG_WEB_NAVIGATE_PAGE, ptr, 0};
+	OS.PtGetResources(webHandle, args.length / 3, args);
+	int[] result = new int[1];
+	OS.memmove(result, ptr, 4);
+	OS.memmove(result, result[0], 4);
+	OS.free(ptr);
+	if ((result[0] & (1 << OS.Pt_WEB_DIRECTION_FWD)) == 0) return false;
+	OS.PtSetResource(webHandle, OS.Pt_ARG_WEB_NAVIGATE_PAGE, OS.Pt_WEB_DIRECTION_FWD, 0);
+	return true;
+}
+
+public String getBrowserType () {
+	return "voyager"; //$NON-NLS-1$
+}
+
+public String getText () {
+	// TODO
+	return ""; //$NON-NLS-1$
+}
+
+public String getUrl() {
+	return url;
+}
+
+public boolean isBackEnabled() {
+	int ptr = OS.malloc(4);
+	int[] args = new int[] {OS.Pt_ARG_WEB_NAVIGATE_PAGE, ptr, 0};
+	OS.PtGetResources(webHandle, args.length / 3, args);
+	int[] result = new int[1];
+	OS.memmove(result, ptr, 4);
+	OS.memmove(result, result[0], 4);
+	OS.free(ptr);
+	return (result[0] & (1 << OS.Pt_WEB_DIRECTION_BACK)) != 0;
+}
+
+public boolean isForwardEnabled() {
+	int ptr = OS.malloc(4);
+	int[] args = new int[]{OS.Pt_ARG_WEB_NAVIGATE_PAGE, ptr, 0};
+	OS.PtGetResources(webHandle, args.length / 3, args);
+	int[] result = new int[1];
+	OS.memmove(result, ptr, 4);
+	OS.memmove(result, result[0], 4);
+	OS.free(ptr);
+	return (result[0] & (1 << OS.Pt_WEB_DIRECTION_FWD)) != 0;
+}
+
+void onDispose() {
+	OS.PtDestroyWidget(webHandle);
+	webHandle = 0;
+	instanceCount--;
+}
+
+void onFocusGained(Event e) {
+	OS.PtContainerGiveFocus(webHandle, null);
+}
+
+int Pt_CB_WEB_CLOSE_WINDOW(int info) {
+	WindowEvent event = new WindowEvent(browser);
+	event.display = browser.getDisplay();
+	event.widget = browser;
+	for(int i = 0; i < closeWindowListeners.length; i++ )
+		closeWindowListeners[i].close(event);
+	browser.dispose();
+	return OS.Pt_CONTINUE;
+}
+
+int Pt_CB_WEB_COMPLETE(int info) {
+	Display display = browser.getDisplay();
+	LocationEvent event = new LocationEvent(browser);
+	event.display = display;
+	event.widget = browser;
+	event.location = url;
+	event.top = true;
+	for (int i = 0; i < locationListeners.length; i++)
+		locationListeners[i].changed(event);
+	ProgressEvent progress = new ProgressEvent(browser);
+	progress.display = display;
+	progress.widget = browser;
+	progress.current = totalProgress;
+	progress.total = totalProgress;
+	for (int i = 0; i < progressListeners.length; i++)
+		progressListeners[i].completed(progress);
+	StatusTextEvent statusevent = new StatusTextEvent(browser);
+	statusevent.display = display;
+	statusevent.widget = browser;
+	statusevent.text = ""; //$NON-NLS-1$
+	for (int i = 0; i < statusTextListeners.length; i++)
+		statusTextListeners[i].changed(statusevent);
+	return OS.Pt_CONTINUE;
+}
+
+int Pt_CB_WEB_DATA_REQ(int info) {
+	PtCallbackInfo_t cbinfo_t = new PtCallbackInfo_t();
+	OS.memmove(cbinfo_t, info, PtCallbackInfo_t.sizeof);
+	PtWebDataReqCallback_t dataReq = new PtWebDataReqCallback_t();
+	OS.memmove(dataReq, cbinfo_t.cbdata, PtWebDataReqCallback_t.sizeof);
+	PtWebClient2Data_t clientData = new PtWebClient2Data_t();
+	clientData.type = dataReq.type;
+	clientData.data = 0;
+	String data = null;
+	switch (clientData.type) {
+		case OS.Pt_WEB_DATA_HEADER:
+			StringBuffer sb = new StringBuffer("Content-Type: text/html\n"); //$NON-NLS-1$
+			sb.append("Content-Length: "); //$NON-NLS-1$
+			sb.append(text.length());
+			sb.append("\n"); //$NON-NLS-1$
+			data = sb.toString();
+			break;
+		case OS.Pt_WEB_DATA_BODY:
+			/*
+			* Feature on Photon. The PtSetResource() call for PtWebClient data imposes
+			* a limit on the size of the text buffer being passed. The workaround is
+			* to break the text into 1KB chunks.
+			*/
+			if (text.length() - textOffset > 1024) {
+				data = text.substring(textOffset, textOffset + 1024);
+				textOffset += 1024;
+			} else {
+				data = text.substring(textOffset);
+			}
+			break;
+		case OS.Pt_WEB_DATA_CLOSE:
+			text = ""; //$NON-NLS-1$
+			break;
+	}
+	if (data != null) {
+		byte[] buffer = Converter.wcsToMbcs(null, data, true);
+		clientData.data = OS.malloc(buffer.length);
+		OS.memmove(clientData.data, buffer, buffer.length);
+		clientData.length = buffer.length - 1;
+	}
+	dataReq.url = clientData.url;
+	int ptr = OS.malloc(PtWebClient2Data_t.sizeof);
+	OS.memmove(ptr, clientData, PtWebClient2Data_t.sizeof);
+	OS.PtSetResource(webHandle, OS.Pt_ARG_WEB_DATA, clientData.data, ptr);
+	OS.free(ptr);
+	if (clientData.data != 0) OS.free(clientData.data);
+	return OS.Pt_CONTINUE;
+}
+
+int Pt_CB_WEB_METADATA(int info) {
+	PtCallbackInfo_t cbinfo_t = new PtCallbackInfo_t();
+	OS.memmove(cbinfo_t, info, PtCallbackInfo_t.sizeof);
+	final PtWebMetaDataCallback_t webmeta_t = new PtWebMetaDataCallback_t();
+	OS.memmove(webmeta_t, cbinfo_t.cbdata, PtWebMetaDataCallback_t.sizeof);
+	String name = new String(webmeta_t.name, 0, OS.strlen(cbinfo_t.cbdata));
+	if (name.equals("title")) { //$NON-NLS-1$
+		String title = new String(webmeta_t.value, 0, OS.strlen(cbinfo_t.cbdata + webmeta_t.name.length));
+		TitleEvent newEvent = new TitleEvent(browser);
+		newEvent.display = browser.getDisplay();
+		newEvent.widget = browser;
+		newEvent.title = title;
+		/*
+		* Feature on Photon.  The Voyager Browser updates the title section
+		* in the window decoration even if the title refers to an inner frame.
+		* Browsers on other platforms only update the title that refers to
+		* the top frame.  As a result, the title event on Photon is sent for 
+		* both top and inner frames.
+		*/
+		for (int i = 0; i < titleListeners.length; i++)
+			titleListeners[i].changed(newEvent);
+	}	
+	return OS.Pt_CONTINUE;
+}
+
+int Pt_CB_WEB_NEW_WINDOW(int info) {
+	PtCallbackInfo_t cbinfo_t = new PtCallbackInfo_t();
+	OS.memmove(cbinfo_t, info, PtCallbackInfo_t.sizeof);
+	final PtWebWindowCallback_t webwin_t = new PtWebWindowCallback_t();
+	OS.memmove(webwin_t,cbinfo_t.cbdata,PtWebWindowCallback_t.sizeof);
+	/*
+	* Feature on Photon.  The server will use the first PtWebClient
+	* widget created from within the CB_WEB_NEW_WINDOW callback to
+	* host the new window.  The workaround is to create a temporary
+	* PtWebClient widget everytime the notification is received. 
+	* When its location is known, the Browser provided by the 
+	* application is then redirected.
+	*/ 
+	final Browser hidden = new Browser(browser.getParent(), SWT.NONE);
+	hidden.addLocationListener(new LocationListener() {
+		public void changed(org.eclipse.swt.browser.LocationEvent event) {
+			/*
+			* Bug on Voyager.  The first PtWebClient widget created
+			* from within the CB_WEB_NEW_WINDOW callback is the one
+			* hosting the new window.  For some reason, this PtWebClient
+			* widget may or may not receive a Pt_CB_WEB_URL
+			* notification. It receives a Pt_CB_WEB_COMPLETE in all cases.
+			* The workaround is to reload the content when this occurs.
+			* This request causes the Pt_CB_WEB_URL to be correctly sent, 
+			* providing the information required to redirect the browser
+			* provided by the application.
+			*/
+			if (event.location.length() == 0) {
+				hidden.refresh();
+				return;
+			}
+			hidden.dispose();
+		}
+		public void changing(final org.eclipse.swt.browser.LocationEvent event) {
+			Browser redirect = ((Voyager)hidden.webBrowser).redirectBrowser;
+			/* Forward the link to the Browser actually provided by the user */
+			if (redirect != null && !redirect.isDisposed()) {
+				WindowEvent newEvent = new WindowEvent(redirect);
+				newEvent.display = browser.getDisplay();
+				newEvent.widget = redirect;
+				newEvent.location = null;
+				/* Photon sets the size to 0,0 when it isn't specified. */
+				newEvent.size = webwin_t.size_w == 0 && webwin_t.size_h == 0 ? null : new Point(webwin_t.size_w, webwin_t.size_h);
+				for (int i = 0; i < redirect.webBrowser.visibilityWindowListeners.length; i++)
+					redirect.webBrowser.visibilityWindowListeners[i].show(newEvent);
+				redirect.setUrl(event.location);
+			}
+		}
+	});
+	WindowEvent event = new WindowEvent(browser);
+	event.display = browser.getDisplay();
+	event.widget = browser;
+	event.required = true;
+	for (int i = 0; i < openWindowListeners.length; i++)
+		openWindowListeners[i].open(event);
+	if (event.browser != null && !event.browser.isDisposed()) ((Voyager)hidden.webBrowser).redirectBrowser = event.browser;
+	return OS.Pt_CONTINUE;
+}
+
+int Pt_CB_WEB_START(int info) {
+	currentProgress = 1;
+	ProgressEvent progress = new ProgressEvent(browser);
+	progress.display = browser.getDisplay();
+	progress.widget = browser;
+	progress.current = currentProgress;
+	progress.total = totalProgress;
+	for (int i = 0; i < progressListeners.length; i++)
+		progressListeners[i].changed(progress);
+	return OS.Pt_CONTINUE;
+}
+
+int Pt_CB_WEB_STATUS(int info) {
+	PtCallbackInfo_t cbinfo_t = new PtCallbackInfo_t();
+	PtWebStatusCallback_t webstatus = new PtWebStatusCallback_t();
+	OS.memmove(cbinfo_t, info, PtCallbackInfo_t.sizeof);
+	OS.memmove(webstatus, cbinfo_t.cbdata, PtWebStatusCallback_t.sizeof);
+	switch (webstatus.type) {
+		case OS.Pt_WEB_STATUS_MOUSE :
+		case OS.Pt_WEB_STATUS_PROGRESS :
+			StatusTextEvent statusevent = new StatusTextEvent(browser);
+			statusevent.display = browser.getDisplay();
+			statusevent.widget = browser;
+			statusevent.text = new String(webstatus.desc, 0, OS.strlen(cbinfo_t.cbdata));
+			for (int i = 0; i < statusTextListeners.length; i++)
+				statusTextListeners[i].changed(statusevent);
+			if (webstatus.type == OS.Pt_WEB_STATUS_PROGRESS) {
+				currentProgress++;
+				if (currentProgress >= totalProgress) currentProgress = 1;
+				ProgressEvent progress = new ProgressEvent(browser);
+				progress.display = browser.getDisplay();
+				progress.widget = browser;
+				progress.current = currentProgress;
+				progress.total = totalProgress;
+				for (int i = 0; i < progressListeners.length; i++)
+					progressListeners[i].changed(progress);
+			}
+			break;
+	}
+	return OS.Pt_CONTINUE;
+}
+
+int Pt_CB_WEB_URL(int info) {
+	PtCallbackInfo_t cbinfo_t = new PtCallbackInfo_t();
+	OS.memmove(cbinfo_t, info, PtCallbackInfo_t.sizeof);
+	byte[] buffer = new byte[OS.strlen(cbinfo_t.cbdata) + 1];
+	OS.memmove(buffer, cbinfo_t.cbdata, buffer.length);
+	url = new String(Converter.mbcsToWcs(null, buffer));
+	LocationEvent event = new LocationEvent(browser);
+	event.display = browser.getDisplay();
+	event.widget = browser;
+	event.location = url;
+	event.doit = true;
+	for (int i = 0; i < locationListeners.length; i++)
+		locationListeners[i].changing(event);
+	/* Widget could have been disposed */
+	if (browser.isDisposed()) return OS.Pt_CONTINUE;
+	if (!event.doit) stop();
+	return OS.Pt_CONTINUE;
+}
+
+public void refresh() {
+	OS.PtSetResource(webHandle, OS.Pt_ARG_WEB_RELOAD, 1, 0);
+}
+
+public boolean setText(String html) {
+	text = html;
+	textOffset = 0;
+	byte[] buffer = Converter.wcsToMbcs(null, "client:", true); //$NON-NLS-1$
+	int ptr = OS.malloc(buffer.length);
+	OS.memmove(ptr, buffer, buffer.length);
+	OS.PtSetResource(webHandle, OS.Pt_ARG_WEB_GET_URL, ptr, OS.Pt_WEB_ACTION_DISPLAY);
+	OS.free(ptr);
+	return true;
+}
+
+public boolean setUrl(String url) {
+	byte[] buffer = Converter.wcsToMbcs(null, url, true);
+	int ptr = OS.malloc(buffer.length);
+	OS.memmove(ptr, buffer, buffer.length);
+	OS.PtSetResource(webHandle, OS.Pt_ARG_WEB_GET_URL, ptr, OS.Pt_WEB_ACTION_DISPLAY);
+	OS.free(ptr);
+	return true;
+}
+
+public void stop() {
+	OS.PtSetResource(webHandle, OS.Pt_ARG_WEB_STOP, 1, 0);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/IE.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/IE.java
new file mode 100644
index 0000000..16c010d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/IE.java
@@ -0,0 +1,1439 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 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.browser;
+
+import java.util.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.ole.win32.*;
+import org.eclipse.swt.internal.win32.*;
+import org.eclipse.swt.ole.win32.*;
+import org.eclipse.swt.widgets.*;
+
+class IE extends WebBrowser {
+
+	OleFrame frame;
+	OleControlSite site;
+	OleAutomation auto;
+	OleListener domListener;
+	OleAutomation[] documents = new OleAutomation[0];
+
+	boolean back, forward, navigate, delaySetText, ignoreDispose;
+	Point location;
+	Point size;
+	boolean addressBar = true, menuBar = true, statusBar = true, toolBar = true;
+	int /*long*/ globalDispatch;
+	String html, lastNavigateURL;
+	int style, lastKeyCode, lastCharCode;
+	int lastMouseMoveX, lastMouseMoveY;
+
+	static boolean IsIE7;
+	static String ProgId = "Shell.Explorer";	//$NON-NLS-1$
+
+	static final int BeforeNavigate2 = 0xfa;
+	static final int CommandStateChange = 0x69;
+	static final int DocumentComplete = 0x103;
+	static final int NavigateComplete2 = 0xfc;
+	static final int NewWindow2 = 0xfb;
+	static final int OnMenuBar = 0x100;
+	static final int OnStatusBar = 0x101;
+	static final int OnToolBar = 0xff;
+	static final int OnVisible = 0xfe;
+	static final int ProgressChange = 0x6c;
+	static final int RegisterAsBrowser = 0x228;
+	static final int StatusTextChange = 0x66;
+	static final int TitleChange = 0x71;
+	static final int WindowClosing = 0x107;
+	static final int WindowSetHeight = 0x10b;
+	static final int WindowSetLeft = 0x108;
+	static final int WindowSetResizable = 0x106;
+	static final int WindowSetTop = 0x109;
+	static final int WindowSetWidth = 0x10a;
+
+	static final short CSC_NAVIGATEFORWARD = 1;
+	static final short CSC_NAVIGATEBACK = 2;
+	static final int INET_E_DEFAULT_ACTION = 0x800C0011;
+	static final int READYSTATE_COMPLETE = 4;
+	static final int URLPOLICY_ALLOW = 0x00;
+	static final int URLPOLICY_DISALLOW = 0x03;
+	static final int URLPOLICY_JAVA_PROHIBIT = 0x0;
+	static final int URLPOLICY_JAVA_LOW = 0x00030000;
+	static final int URLZONE_LOCAL_MACHINE = 0;
+	static final int URLZONE_INTRANET = 1;
+	static final int URLACTION_ACTIVEX_MIN = 0x00001200;
+	static final int URLACTION_ACTIVEX_MAX = 0x000013ff;
+	static final int URLACTION_ACTIVEX_RUN = 0x00001200;
+	static final int URLACTION_JAVA_MIN = 0x00001C00;
+	static final int URLACTION_JAVA_MAX = 0x00001Cff;
+	static final int URLACTION_SCRIPT_RUN = 0x00001400;
+	
+	static final int DISPID_AMBIENT_DLCONTROL = -5512;
+	static final int DLCTL_DLIMAGES = 0x00000010;
+	static final int DLCTL_VIDEOS = 0x00000020;
+	static final int DLCTL_BGSOUNDS = 0x00000040;
+	static final int DLCTL_NO_SCRIPTS = 0x00000080;
+	static final int DLCTL_NO_JAVA = 0x00000100;
+	static final int DLCTL_NO_RUNACTIVEXCTLS = 0x00000200;
+	static final int DLCTL_NO_DLACTIVEXCTLS = 0x00000400;
+	static final int DLCTL_DOWNLOADONLY = 0x00000800;
+	static final int DLCTL_NO_FRAMEDOWNLOAD = 0x00001000;
+	static final int DLCTL_RESYNCHRONIZE = 0x00002000;
+	static final int DLCTL_PRAGMA_NO_CACHE = 0x00004000;
+	static final int DLCTL_FORCEOFFLINE = 0x10000000;
+	static final int DLCTL_NO_CLIENTPULL = 0x20000000;
+	static final int DLCTL_SILENT = 0x40000000;
+	static final int DOCHOSTUIFLAG_THEME = 0x00040000;
+	static final int DOCHOSTUIFLAG_NO3DBORDER  = 0x0000004;
+	static final int DOCHOSTUIFLAG_NO3DOUTERBORDER = 0x00200000;
+	
+	static final String ABOUT_BLANK = "about:blank"; //$NON-NLS-1$
+	static final String CLSID_SHELLEXPLORER1 = "{EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B}"; //$NON-NLS-1$
+	static final String EVENT_DOUBLECLICK = "dblclick"; //$NON-NLS-1$
+	static final String EVENT_DRAGEND = "dragend";	//$NON-NLS-1$
+	static final String EVENT_DRAGSTART = "dragstart";	//$NON-NLS-1$
+	static final String EVENT_KEYDOWN = "keydown";	//$NON-NLS-1$
+	static final String EVENT_KEYPRESS = "keypress";	//$NON-NLS-1$
+	static final String EVENT_KEYUP = "keyup";	//$NON-NLS-1$
+	static final String EVENT_MOUSEMOVE = "mousemove";	//$NON-NLS-1$
+	static final String EVENT_MOUSEWHEEL = "mousewheel";	//$NON-NLS-1$
+	static final String EVENT_MOUSEUP = "mouseup";	//$NON-NLS-1$
+	static final String EVENT_MOUSEDOWN = "mousedown";	//$NON-NLS-1$
+	static final String EVENT_MOUSEOUT = "mouseout";	//$NON-NLS-1$
+	static final String EVENT_MOUSEOVER = "mouseover";	//$NON-NLS-1$
+	static final String PROTOCOL_FILE = "file://"; //$NON-NLS-1$
+	static final String PROPERTY_ALTKEY = "altKey"; //$NON-NLS-1$
+	static final String PROPERTY_BUTTON = "button"; //$NON-NLS-1$
+	static final String PROPERTY_CLIENTX = "clientX"; //$NON-NLS-1$
+	static final String PROPERTY_CLIENTY = "clientY"; //$NON-NLS-1$
+	static final String PROPERTY_CTRLKEY = "ctrlKey"; //$NON-NLS-1$
+	static final String PROPERTY_FROMELEMENT = "fromElement"; //$NON-NLS-1$
+	static final String PROPERTY_KEYCODE = "keyCode"; //$NON-NLS-1$
+	static final String PROPERTY_REPEAT = "repeat"; //$NON-NLS-1$
+	static final String PROPERTY_RETURNVALUE = "returnValue"; //$NON-NLS-1$
+	static final String PROPERTY_SHIFTKEY = "shiftKey"; //$NON-NLS-1$
+	static final String PROPERTY_TOELEMENT = "toElement"; //$NON-NLS-1$
+	static final String PROPERTY_TYPE = "type"; //$NON-NLS-1$
+	static final String PROPERTY_WHEELDELTA = "wheelDelta"; //$NON-NLS-1$
+
+	static {
+		NativeClearSessions = new Runnable() {
+			public void run() {
+				if (OS.IsPPC) return;
+				OS.InternetSetOption (0, OS.INTERNET_OPTION_END_BROWSER_SESSION, 0, 0);
+			}
+		};
+
+		NativeGetCookie = new Runnable () {
+			public void run () {
+				if (OS.IsPPC) return;
+				TCHAR url = new TCHAR (0, CookieUrl, true);
+				TCHAR cookieData = new TCHAR (0, 8192);
+				int[] size = new int[] {cookieData.length ()};
+				if (!OS.InternetGetCookie (url, null, cookieData, size)) {
+					/* original cookieData size was not large enough */
+					size[0] /= TCHAR.sizeof;
+					cookieData = new TCHAR (0, size[0]);
+					if (!OS.InternetGetCookie (url, null, cookieData, size)) return;
+				}
+				String allCookies = cookieData.toString (0, size[0]);
+				StringTokenizer tokenizer = new StringTokenizer (allCookies, ";"); //$NON-NLS-1$
+				while (tokenizer.hasMoreTokens ()) {
+					String cookie = tokenizer.nextToken ();
+					int index = cookie.indexOf ('=');
+					if (index != -1) {
+						String name = cookie.substring (0, index).trim ();
+						if (name.equals (CookieName)) {
+							CookieValue = cookie.substring (index + 1).trim ();
+							return;
+						}
+					}
+				}
+			}
+		};
+
+		NativeSetCookie = new Runnable () {
+			public void run () {
+				if (OS.IsPPC) return;
+				TCHAR url = new TCHAR (0, CookieUrl, true);
+				TCHAR value = new TCHAR (0, CookieValue, true);
+				CookieResult = OS.InternetSetCookie (url, null, value);
+			}
+		};
+
+		/*
+		* Registry entry HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Version indicates
+		* which version of IE is installed.  Check this value in order to determine version-specific
+		* features that can be enabled.
+		*/
+		TCHAR key = new TCHAR (0, "Software\\Microsoft\\Internet Explorer", true);	//$NON-NLS-1$
+		int /*long*/ [] phkResult = new int /*long*/ [1];
+		if (OS.RegOpenKeyEx (OS.HKEY_LOCAL_MACHINE, key, 0, OS.KEY_READ, phkResult) == 0) {
+			int [] lpcbData = new int [1];
+			TCHAR buffer = new TCHAR (0, "Version", true); //$NON-NLS-1$
+			int result = OS.RegQueryValueEx (phkResult [0], buffer, 0, null, (TCHAR) null, lpcbData);
+			if (result == 0) {
+				TCHAR lpData = new TCHAR (0, lpcbData [0] / TCHAR.sizeof);
+				result = OS.RegQueryValueEx (phkResult [0], buffer, 0, null, lpData, lpcbData);
+				if (result == 0) {
+					String versionString = lpData.toString (0, lpData.strlen ());
+					int index = versionString.indexOf ("."); //$NON-NLS-1$
+					if (index != -1) {
+						String majorString = versionString.substring (0, index);
+						int major = 0;
+						try {
+							major = Integer.valueOf (majorString).intValue ();
+						} catch (NumberFormatException e) {
+							/* just continue, version-specific features will not be enabled */
+						}
+						IsIE7 = major >= 7;
+					}
+				}
+			}
+			OS.RegCloseKey (phkResult [0]);
+		}
+
+		/*
+		* Registry entry HKEY_CLASSES_ROOT\Shell.Explorer\CLSID indicates which version of
+		* Shell.Explorer to use by default.  We usually want to use this value because it
+		* typically points at the newest one that is available.  However it is possible for
+		* this registry entry to be changed by another application to point at some other
+		* Shell.Explorer version.
+		*
+		* The Browser depends on the Shell.Explorer version being at least Shell.Explorer.2.
+		* If it is detected in the registry to be Shell.Explorer.1 then change the progId that
+		* will be embedded to explicitly specify Shell.Explorer.2.
+		*/
+		key = new TCHAR (0, "Shell.Explorer\\CLSID", true);	//$NON-NLS-1$
+		phkResult = new int /*long*/ [1];
+		if (OS.RegOpenKeyEx (OS.HKEY_CLASSES_ROOT, key, 0, OS.KEY_READ, phkResult) == 0) {
+			int [] lpcbData = new int [1];
+			int result = OS.RegQueryValueEx (phkResult [0], null, 0, null, (TCHAR) null, lpcbData);
+			if (result == 0) {
+				TCHAR lpData = new TCHAR (0, lpcbData [0] / TCHAR.sizeof);
+				result = OS.RegQueryValueEx (phkResult [0], null, 0, null, lpData, lpcbData);
+				if (result == 0) {
+					String clsid = lpData.toString (0, lpData.strlen ());
+					if (clsid.equals (CLSID_SHELLEXPLORER1)) {
+						/* Shell.Explorer.1 is the default, ensure that Shell.Explorer.2 is available */
+						key = new TCHAR (0, "Shell.Explorer.2", true);	//$NON-NLS-1$
+						int /*long*/ [] phkResult2 = new int /*long*/ [1];
+						if (OS.RegOpenKeyEx (OS.HKEY_CLASSES_ROOT, key, 0, OS.KEY_READ, phkResult2) == 0) {
+							/* specify that Shell.Explorer.2 is to be used */
+							OS.RegCloseKey (phkResult2 [0]);
+							ProgId = "Shell.Explorer.2";	//$NON-NLS-1$
+						}
+					}
+				}
+			}
+			OS.RegCloseKey (phkResult [0]);
+		}
+	}
+
+public void create(Composite parent, int style) {
+	this.style = style;
+	frame = new OleFrame(browser, SWT.NONE);
+
+	try {
+		site = new WebSite(frame, SWT.NONE, ProgId); //$NON-NLS-1$
+	} catch (SWTException e) {
+		browser.dispose();
+		SWT.error(SWT.ERROR_NO_HANDLES);
+	}
+	
+	site.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);
+	auto = new OleAutomation(site);
+
+	domListener = new OleListener() {
+		public void handleEvent (OleEvent e) {
+			handleDOMEvent(e);
+		}
+	};
+
+	Listener listener = new Listener() {
+		public void handleEvent(Event e) {
+			switch (e.type) {
+				case SWT.Dispose: {
+					/* make this handler run after other dispose listeners */
+					if (ignoreDispose) {
+						ignoreDispose = false;
+						break;
+					}
+					ignoreDispose = true;
+					browser.notifyListeners (e.type, e);
+					e.type = SWT.NONE;
+
+					/*
+					* It is possible for the Browser's OLE frame to have been disposed
+					* by a Dispose listener that was invoked by notifyListeners above,
+					* so check for this before unhooking its DOM listeners.
+					*/
+					if (!frame.isDisposed ()) unhookDOMListeners(documents);
+
+					for (int i = 0; i < documents.length; i++) {
+						documents[i].dispose();
+					}
+					documents = null;
+
+					Enumeration elements = functions.elements ();
+					while (elements.hasMoreElements ()) {
+						((BrowserFunction)elements.nextElement ()).dispose (false);
+					}
+					functions = null;
+
+					lastNavigateURL = null;
+					domListener = null;
+					if (auto != null) auto.dispose();
+					auto = null;
+					break;
+				}
+				case SWT.Resize: {
+					frame.setBounds(browser.getClientArea());
+					break;
+				}
+				case SWT.MouseWheel: {
+					/* MouseWheel events come from the DOM */
+					e.doit = false;
+					break;
+				}
+				/* 
+				 * FocusIn and Traverse are hooked to handle traversal into
+				 * and out of the Browser when it has key listeners.
+				 */
+				case SWT.FocusIn: {
+					site.setFocus();
+					break;
+				}
+				case SWT.Traverse: {
+					if (browser.isListening(SWT.KeyDown) || browser.isListening(SWT.KeyUp)) {
+						if (e.detail == SWT.TRAVERSE_TAB_PREVIOUS) {
+							browser.traverse(SWT.TRAVERSE_TAB_PREVIOUS);
+							e.doit = false;
+						}
+					}
+					break;
+				}
+			}
+		}
+	};
+	browser.addListener(SWT.Dispose, listener);
+	browser.addListener(SWT.FocusIn, listener);
+	browser.addListener(SWT.Resize, listener);
+	site.addListener(SWT.MouseWheel, listener);
+	site.addListener(SWT.Traverse, listener);
+
+	OleListener oleListener = new OleListener() {
+		public void handleEvent(OleEvent event) {
+			/* callbacks are asynchronous, auto could be disposed */
+			if (auto != null) {
+				switch (event.type) {
+					case BeforeNavigate2: {
+						Variant varResult = event.arguments[1];
+						String url = varResult.getString();
+						/*
+						* Bug in IE.  For navigations on the local machine, BeforeNavigate2's url
+						* field contains a string representing the file path in a non-URL format.
+						* In order to be consistent with the other Browser implementations, this
+						* case is detected and the string is changed to be a proper url string.
+						*/
+						if (url.indexOf(":/") == -1 && url.indexOf(":\\") != -1) { //$NON-NLS-1$ //$NON-NLS-2$
+							url = PROTOCOL_FILE + url.replace('\\', '/');
+						}
+						LocationEvent newEvent = new LocationEvent(browser);
+						newEvent.display = browser.getDisplay();
+						newEvent.widget = browser;
+						newEvent.location = url;
+						newEvent.doit = true;
+						for (int i = 0; i < locationListeners.length; i++) {
+							locationListeners[i].changing(newEvent);
+						}
+						boolean doit = newEvent.doit && !browser.isDisposed(); 
+						Variant cancel = event.arguments[6];
+						if (cancel != null) {
+							int /*long*/ pCancel = cancel.getByRef();
+							COM.MoveMemory(pCancel, new short[] {doit ? COM.VARIANT_FALSE : COM.VARIANT_TRUE}, 2);
+						}
+						if (doit) {
+							lastNavigateURL = url;
+							varResult = event.arguments[0];
+							IDispatch dispatch = varResult.getDispatch();
+							Variant variant = new Variant(auto);
+							IDispatch top = variant.getDispatch();
+							boolean isTop = top.getAddress() == dispatch.getAddress();
+							if (isTop) {
+								/* unhook DOM listeners and unref the last document(s) */
+								unhookDOMListeners(documents);
+								for (int i = 0; i < documents.length; i++) {
+									documents[i].dispose();
+								}
+								documents = new OleAutomation[0];
+							}
+						}
+						break;
+					}
+					case CommandStateChange: {
+						boolean enabled = false;
+						Variant varResult = event.arguments[0];
+						int command = varResult.getInt();
+						varResult = event.arguments[1];
+						enabled = varResult.getBoolean();
+						switch (command) {
+							case CSC_NAVIGATEBACK : back = enabled; break;
+							case CSC_NAVIGATEFORWARD : forward = enabled; break;
+						}
+						break;
+					}
+					case DocumentComplete: {
+						Variant varResult = event.arguments[0];
+						IDispatch dispatch = varResult.getDispatch();
+	
+						varResult = event.arguments[1];
+						String url = varResult.getString();
+						/*
+						* Bug in IE.  For navigations on the local machine, DocumentComplete's URL
+						* field contains a string representing the file path in a non-URL format.
+						* In order to be consistent with the other Browser implementations, this
+						* case is detected and the string is changed to be a proper url string.
+						*/
+						if (url.indexOf(":/") == -1 && url.indexOf(":\\") != -1) { //$NON-NLS-1$ //$NON-NLS-2$
+							url = PROTOCOL_FILE + url.replace('\\', '/');
+						}
+						if (html != null && url.equals(ABOUT_BLANK)) {
+							Runnable runnable = new Runnable () {
+								public void run() {
+									if (browser.isDisposed() || html == null) return;
+									int charCount = html.length();
+									char[] chars = new char[charCount];
+									html.getChars(0, charCount, chars, 0);
+									html = null;
+									int byteCount = OS.WideCharToMultiByte(OS.CP_UTF8, 0, chars, charCount, null, 0, null, null);
+									/*
+									* Note. Internet Explorer appears to treat the data loaded with 
+									* nsIPersistStreamInit.Load as if it were encoded using the default
+									* local charset.  There does not seem to be an API to set the
+									* desired charset explicitly in this case.  The fix is to
+									* prepend the UTF-8 Byte Order Mark signature to the data.
+									*/
+									byte[] UTF8BOM = {(byte)0xEF, (byte)0xBB, (byte)0xBF};
+									int /*long*/ hGlobal = OS.GlobalAlloc(OS.GMEM_FIXED | OS.GMEM_ZEROINIT, UTF8BOM.length + byteCount);
+									if (hGlobal != 0) {
+										OS.MoveMemory(hGlobal, UTF8BOM, UTF8BOM.length);
+										OS.WideCharToMultiByte(OS.CP_UTF8, 0, chars, charCount, hGlobal + UTF8BOM.length, byteCount, null, null);							
+										int /*long*/ [] ppstm = new int /*long*/ [1];
+										/* 
+										* Note.  CreateStreamOnHGlobal is called with the flag fDeleteOnRelease.
+										* If the call succeeds the buffer hGlobal is freed automatically
+										* when the IStream object is released. If the call fails, free the buffer
+										* hGlobal.
+										*/
+										if (OS.CreateStreamOnHGlobal(hGlobal, true, ppstm) == OS.S_OK) {
+											int[] rgdispid = auto.getIDsOfNames(new String[] {"Document"}); //$NON-NLS-1$
+											Variant pVarResult = auto.getProperty(rgdispid[0]);
+											IDispatch dispatchDocument = pVarResult.getDispatch();
+											int /*long*/ [] ppvObject = new int /*long*/ [1];
+											int result = dispatchDocument.QueryInterface(COM.IIDIPersistStreamInit, ppvObject);
+											if (result == OS.S_OK) {
+												IPersistStreamInit persistStreamInit = new IPersistStreamInit(ppvObject[0]);
+												if (persistStreamInit.InitNew() == OS.S_OK) {
+													persistStreamInit.Load(ppstm[0]);
+												}
+												persistStreamInit.Release();
+											}
+											pVarResult.dispose();
+											/*
+											* This code is intentionally commented.  The IDispatch obtained from a Variant
+											* did not increase the reference count for the enclosed interface.
+											*/
+											//dispatchDocument.Release();
+											IUnknown stream = new IUnknown(ppstm[0]);
+											stream.Release();
+										} else {
+											OS.GlobalFree(hGlobal);
+										}
+									}
+								}
+							};
+							if (delaySetText) {
+								delaySetText = false;
+								browser.getDisplay().asyncExec(runnable);
+							} else {
+								runnable.run();
+							}
+						} else {
+							Variant variant = new Variant(auto);
+							IDispatch top = variant.getDispatch();
+							LocationEvent locationEvent = new LocationEvent(browser);
+							locationEvent.display = browser.getDisplay();
+							locationEvent.widget = browser;
+							locationEvent.location = url;
+							locationEvent.top = top.getAddress() == dispatch.getAddress();
+							for (int i = 0; i < locationListeners.length; i++) {
+								locationListeners[i].changed(locationEvent);
+							}
+							if (browser.isDisposed()) return;
+							/*
+							 * This code is intentionally commented.  A Variant constructed from an
+							 * OleAutomation object does not increase its reference count.  The IDispatch
+							 * obtained from this Variant did not increase the reference count for the
+							 * OleAutomation instance either. 
+							 */
+							//top.Release();
+							//variant.dispose();
+							/*
+							 * Note.  The completion of the page loading is detected as
+							 * described in the MSDN article "Determine when a page is
+							 * done loading in WebBrowser Control". 
+							 */
+							if (globalDispatch != 0 && dispatch.getAddress() == globalDispatch) {
+								/* final document complete */
+								globalDispatch = 0;
+
+								/* re-install registered functions */
+								Enumeration elements = functions.elements ();
+								while (elements.hasMoreElements ()) {
+									BrowserFunction function = (BrowserFunction)elements.nextElement ();
+									execute (function.functionString);
+								}
+
+								ProgressEvent progressEvent = new ProgressEvent(browser);
+								progressEvent.display = browser.getDisplay();
+								progressEvent.widget = browser;
+								for (int i = 0; i < progressListeners.length; i++) {
+									progressListeners[i].completed(progressEvent);
+								}
+							}
+						}
+												
+						/*
+						* This code is intentionally commented.  This IDispatch was received
+						* as an argument from the OleEvent and it will be disposed along with
+						* the other arguments.  
+						*/
+						//dispatch.Release();
+						break;
+					}
+					case NavigateComplete2: {
+						Variant varResult = event.arguments[0];
+						IDispatch dispatch = varResult.getDispatch();
+						if (globalDispatch == 0) globalDispatch = dispatch.getAddress();
+	
+						OleAutomation webBrowser = varResult.getAutomation();
+						varResult = event.arguments[1];
+						Variant variant = new Variant(auto);
+						IDispatch top = variant.getDispatch();
+						boolean isTop = top.getAddress() == dispatch.getAddress();
+						hookDOMListeners(webBrowser, isTop);
+						webBrowser.dispose();
+						break;
+					}
+					case NewWindow2: {
+						Variant cancel = event.arguments[1];
+						int /*long*/ pCancel = cancel.getByRef();
+						WindowEvent newEvent = new WindowEvent(browser);
+						newEvent.display = browser.getDisplay();
+						newEvent.widget = browser;
+						newEvent.required = false;
+						for (int i = 0; i < openWindowListeners.length; i++) {
+							openWindowListeners[i].open(newEvent);
+						}
+						IE browser = null;
+						if (newEvent.browser != null && newEvent.browser.webBrowser instanceof IE) {
+							browser = (IE)newEvent.browser.webBrowser;
+						}
+						boolean doit = browser != null && !browser.browser.isDisposed();
+						if (doit) {
+							Variant variant = new Variant(browser.auto);
+							IDispatch iDispatch = variant.getDispatch();
+							Variant ppDisp = event.arguments[0];
+							int /*long*/ byref = ppDisp.getByRef();
+							if (byref != 0) COM.MoveMemory(byref, new int /*long*/[] {iDispatch.getAddress()}, OS.PTR_SIZEOF);
+							/*
+							* This code is intentionally commented.  A Variant constructed from an
+							* OleAutomation object does not increase its reference count.  The IDispatch
+							* obtained from this Variant did not increase the reference count for the
+							* OleAutomation instance either. 
+							*/
+							//variant.dispose();
+							//iDispatch.Release();
+						}
+						if (newEvent.required) {
+							COM.MoveMemory(pCancel, new short[]{doit ? COM.VARIANT_FALSE : COM.VARIANT_TRUE}, 2);
+						}
+						break;
+					}
+					case OnMenuBar: {
+						Variant arg0 = event.arguments[0];
+						menuBar = arg0.getBoolean();
+						break;
+					}
+					case OnStatusBar: {
+						Variant arg0 = event.arguments[0];
+						statusBar = arg0.getBoolean();
+						break;
+					}
+					case OnToolBar: {
+						Variant arg0 = event.arguments[0];
+						toolBar = arg0.getBoolean();
+						/*
+						* Feature in Internet Explorer.  OnToolBar FALSE is emitted 
+						* when both tool bar, address bar and menu bar must not be visible.
+						* OnToolBar TRUE is emitted when either of tool bar, address bar
+						* or menu bar is visible.
+						*/
+						if (!toolBar) {
+							addressBar = false;
+							menuBar = false;
+						}
+						break;
+					}
+					case OnVisible: {
+						Variant arg1 = event.arguments[0];
+						boolean visible = arg1.getBoolean();
+						WindowEvent newEvent = new WindowEvent(browser);
+						newEvent.display = browser.getDisplay();
+						newEvent.widget = browser;
+						if (visible) {
+							if (addressBar) {
+								/*
+								* Bug in Internet Explorer.  There is no distinct notification for
+								* the address bar.  If neither address, menu or tool bars are visible,
+								* OnToolBar FALSE is emitted. For some reason, querying the value of
+								* AddressBar in this case returns true even though it should not be
+								* set visible.  The workaround is to only query the value of AddressBar
+								* when OnToolBar FALSE has not been emitted.
+								*/
+								int[] rgdispid = auto.getIDsOfNames(new String[] { "AddressBar" }); //$NON-NLS-1$
+								Variant pVarResult = auto.getProperty(rgdispid[0]);
+								if (pVarResult != null) {
+									if (pVarResult.getType () == OLE.VT_BOOL) {
+										addressBar = pVarResult.getBoolean ();
+									}
+									pVarResult.dispose ();
+								}
+							}
+							newEvent.addressBar = addressBar;
+							newEvent.menuBar = menuBar;
+							newEvent.statusBar = statusBar;
+							newEvent.toolBar = toolBar;
+							newEvent.location = location;
+							newEvent.size = size;
+							for (int i = 0; i < visibilityWindowListeners.length; i++) {
+								visibilityWindowListeners[i].show(newEvent);
+							}
+							location = null;
+							size = null;
+						} else {
+							for (int i = 0; i < visibilityWindowListeners.length; i++) {
+								visibilityWindowListeners[i].hide(newEvent);
+							}
+						}
+						break;
+					}
+					case ProgressChange: {
+						Variant arg1 = event.arguments[0];
+						int nProgress = arg1.getType() != OLE.VT_I4 ? 0 : arg1.getInt(); // may be -1
+						Variant arg2 = event.arguments[1];
+						int nProgressMax = arg2.getType() != OLE.VT_I4 ? 0 : arg2.getInt();
+						ProgressEvent newEvent = new ProgressEvent(browser);
+						newEvent.display = browser.getDisplay();
+						newEvent.widget = browser;
+						newEvent.current = nProgress;
+						newEvent.total = nProgressMax;
+						if (nProgress != -1) {
+							for (int i = 0; i < progressListeners.length; i++) {
+								progressListeners[i].changed(newEvent);
+							}
+						}
+						break;
+					}
+					case StatusTextChange: {
+						Variant arg1 = event.arguments[0];
+						if (arg1.getType() == OLE.VT_BSTR) {
+							String text = arg1.getString();
+							StatusTextEvent newEvent = new StatusTextEvent(browser);
+							newEvent.display = browser.getDisplay();
+							newEvent.widget = browser;
+							newEvent.text = text;
+							for (int i = 0; i < statusTextListeners.length; i++) {
+								statusTextListeners[i].changed(newEvent);
+							}
+						}
+						break;
+					}
+					case TitleChange: {
+						Variant arg1 = event.arguments[0];
+						if (arg1.getType() == OLE.VT_BSTR) {
+							String title = arg1.getString();
+							TitleEvent newEvent = new TitleEvent(browser);
+							newEvent.display = browser.getDisplay();
+							newEvent.widget = browser;
+							newEvent.title = title;
+							for (int i = 0; i < titleListeners.length; i++) {
+								titleListeners[i].changed(newEvent);
+							}
+						}
+						break;
+					}
+					case WindowClosing: {
+						/*
+						* Disposing the Browser directly from this callback will crash if the
+						* Browser has a text field with an active caret.  As a workaround fire
+						* the Close event and dispose the Browser in an async block. 
+						*/
+						browser.getDisplay().asyncExec(new Runnable() {
+							public void run() {
+								if (browser.isDisposed()) return;
+								WindowEvent newEvent = new WindowEvent(browser);
+								newEvent.display = browser.getDisplay();
+								newEvent.widget = browser;
+								for (int i = 0; i < closeWindowListeners.length; i++) {
+									closeWindowListeners[i].close(newEvent);
+								}
+								browser.dispose();
+							}
+						});
+						Variant cancel = event.arguments[1];
+						int /*long*/ pCancel = cancel.getByRef();
+						Variant arg1 = event.arguments[0];
+						boolean isChildWindow = arg1.getBoolean();
+						COM.MoveMemory(pCancel, new short[]{isChildWindow ? COM.VARIANT_FALSE : COM.VARIANT_TRUE}, 2);
+						break;
+					}
+					case WindowSetHeight: {
+						if (size == null) size = new Point(0, 0);
+						Variant arg1 = event.arguments[0];
+						size.y = arg1.getInt();
+						break;
+					}
+					case WindowSetLeft: {
+						if (location == null) location = new Point(0, 0);
+						Variant arg1 = event.arguments[0];
+						location.x = arg1.getInt();
+						break;
+					}
+					case WindowSetTop: {
+						if (location == null) location = new Point(0, 0);
+						Variant arg1 = event.arguments[0];
+						location.y = arg1.getInt();
+						break;
+					}
+					case WindowSetWidth: {
+						if (size == null) size = new Point(0, 0);
+						Variant arg1 = event.arguments[0];
+						size.x = arg1.getInt();
+						break;
+					}
+				}
+			}
+			/*
+			* Dispose all arguments passed in the OleEvent.  This must be
+			* done to properly release any IDispatch reference that was
+			* automatically addRef'ed when constructing the OleEvent.  
+			*/
+			Variant[] arguments = event.arguments;
+			for (int i = 0; i < arguments.length; i++) arguments[i].dispose();
+		}
+	};
+	site.addEventListener(BeforeNavigate2, oleListener);
+	site.addEventListener(CommandStateChange, oleListener);
+	site.addEventListener(DocumentComplete, oleListener);
+	site.addEventListener(NavigateComplete2, oleListener);
+	site.addEventListener(NewWindow2, oleListener);
+	site.addEventListener(OnMenuBar, oleListener);
+	site.addEventListener(OnStatusBar, oleListener);
+	site.addEventListener(OnToolBar, oleListener);
+	site.addEventListener(OnVisible, oleListener);
+	site.addEventListener(ProgressChange, oleListener);
+	site.addEventListener(StatusTextChange, oleListener);
+	site.addEventListener(TitleChange, oleListener);
+	site.addEventListener(WindowClosing, oleListener);
+	site.addEventListener(WindowSetHeight, oleListener);
+	site.addEventListener(WindowSetLeft, oleListener);
+	site.addEventListener(WindowSetTop, oleListener);
+	site.addEventListener(WindowSetWidth, oleListener);
+	
+	Variant variant = new Variant(true);
+	auto.setProperty(RegisterAsBrowser, variant);
+	variant.dispose();
+	
+	variant = new Variant(false);
+	int[] rgdispid = auto.getIDsOfNames(new String[] {"RegisterAsDropTarget"}); //$NON-NLS-1$
+	if (rgdispid != null) auto.setProperty(rgdispid[0], variant);
+	variant.dispose();
+}
+
+public boolean back() {
+	if (!back) return false;
+	int[] rgdispid = auto.getIDsOfNames(new String[] { "GoBack" }); //$NON-NLS-1$
+	Variant pVarResult = auto.invoke(rgdispid[0]);
+	return pVarResult != null && pVarResult.getType() == OLE.VT_EMPTY;
+}
+
+public boolean execute(String script) {
+	/* get IHTMLDocument2 */
+	int[] rgdispid = auto.getIDsOfNames(new String[]{"Document"}); //$NON-NLS-1$
+	int dispIdMember = rgdispid[0];
+	Variant pVarResult = auto.getProperty(dispIdMember);
+	if (pVarResult == null || pVarResult.getType() == COM.VT_EMPTY) {
+		if (pVarResult != null) pVarResult.dispose ();
+		return false;
+	}
+	OleAutomation document = pVarResult.getAutomation();
+	pVarResult.dispose();
+
+	/* get IHTMLWindow2 */
+	rgdispid = document.getIDsOfNames(new String[]{"parentWindow"}); //$NON-NLS-1$
+	if (rgdispid == null) {
+		/* implies that browser's content is not a IHTMLDocument2 (eg.- acrobat reader) */
+		document.dispose();
+		return false;
+	}
+	dispIdMember = rgdispid[0];
+	pVarResult = document.getProperty(dispIdMember);
+	OleAutomation ihtmlWindow2 = pVarResult.getAutomation();
+	pVarResult.dispose();
+	document.dispose();
+	
+	rgdispid = ihtmlWindow2.getIDsOfNames(new String[] { "execScript", "code" }); //$NON-NLS-1$  //$NON-NLS-2$
+	Variant[] rgvarg = new Variant[1];
+	rgvarg[0] = new Variant(script);
+	int[] rgdispidNamedArgs = new int[1];
+	rgdispidNamedArgs[0] = rgdispid[1];
+	pVarResult = ihtmlWindow2.invoke(rgdispid[0], rgvarg, rgdispidNamedArgs);
+	rgvarg[0].dispose();
+	ihtmlWindow2.dispose();
+	if (pVarResult == null) return false;
+	pVarResult.dispose();
+	return true;
+}
+
+public boolean forward() {
+	if (!forward) return false;
+	int[] rgdispid = auto.getIDsOfNames(new String[] { "GoForward" }); //$NON-NLS-1$
+	Variant pVarResult = auto.invoke(rgdispid[0]);
+	return pVarResult != null && pVarResult.getType() == OLE.VT_EMPTY;
+}
+
+public String getBrowserType () {
+	return "ie"; //$NON-NLS-1$
+}
+
+String getDeleteFunctionString (String functionName) {
+	return "window." + functionName + "=undefined"; //$NON-NLS-1$ //$NON-NLS-2$
+}
+
+public String getText() {
+	/* get the document object */
+	int[] rgdispid = auto.getIDsOfNames(new String[]{"Document"}); //$NON-NLS-1$
+	Variant pVarResult = auto.getProperty(rgdispid[0]);
+	if (pVarResult == null || pVarResult.getType() == COM.VT_EMPTY) {
+		if (pVarResult != null) pVarResult.dispose ();
+		return ""; //$NON-NLS-1$
+	}
+	OleAutomation document = pVarResult.getAutomation();
+	pVarResult.dispose();
+
+	/* get the html object */
+	rgdispid = document.getIDsOfNames(new String[] {"documentElement"}); //$NON-NLS-1$
+	if (rgdispid == null) {
+		/* implies that the browser is displaying non-HTML content */
+		document.dispose();
+		return ""; //$NON-NLS-1$
+	}
+	pVarResult = document.getProperty(rgdispid[0]);
+	document.dispose();
+	if (pVarResult == null || pVarResult.getType() == COM.VT_EMPTY) {
+		if (pVarResult != null) pVarResult.dispose ();
+		return ""; //$NON-NLS-1$
+	}
+	OleAutomation element = pVarResult.getAutomation();
+	pVarResult.dispose();
+
+	/* get its outerHTML property */
+	rgdispid = element.getIDsOfNames(new String[] {"outerHTML"}); //$NON-NLS-1$
+	pVarResult = element.getProperty(rgdispid[0]);
+	element.dispose();
+	if (pVarResult == null || pVarResult.getType() == COM.VT_EMPTY) {
+		if (pVarResult != null) pVarResult.dispose ();
+		return ""; //$NON-NLS-1$
+	}
+	String result = pVarResult.getString();
+	pVarResult.dispose();
+
+	return result;
+}
+
+public String getUrl() {
+	int[] rgdispid = auto.getIDsOfNames(new String[] { "LocationURL" }); //$NON-NLS-1$
+	Variant pVarResult = auto.getProperty(rgdispid[0]);
+	if (pVarResult == null || pVarResult.getType() != OLE.VT_BSTR) return ""; //$NON-NLS-1$
+	String result = pVarResult.getString();
+	pVarResult.dispose();
+	return result;
+}
+
+public boolean isBackEnabled() {
+	return back;
+}
+
+public boolean isForwardEnabled() {
+	return forward;
+}
+
+public boolean isFocusControl () {
+	return site.isFocusControl() || frame.isFocusControl();
+}
+
+public void refresh() {
+	int[] rgdispid = auto.getIDsOfNames(new String[] { "Refresh" }); //$NON-NLS-1$
+	auto.invoke(rgdispid[0]);
+}
+
+public boolean setText(String html) {
+	/*
+	* If the html field is non-null then the about:blank page is already being
+	* loaded, so no Stop or Navigate is required.  Just set the html that is to
+	* be shown.
+	*/
+	boolean blankLoading = this.html != null;
+	this.html = html;
+	if (blankLoading) return true;
+	
+	/*
+	* Navigate to the blank page and insert the given html when
+	* receiving the next DocumentComplete notification.  See the
+	* MSDN article "Loading HTML content from a Stream".
+	* 
+	* Note.  Stop any pending request.  This is required to avoid displaying a
+	* blank page as a result of consecutive calls to setUrl and/or setText.  
+	* The previous request would otherwise render the new html content and
+	* reset the html field before the browser actually navigates to the blank
+	* page as requested below.
+	* 
+	* Feature in Internet Explorer.  Stopping pending requests when no request
+	* is pending causes a default page 'Action cancelled' to be displayed.  The
+	* workaround is to not invoke 'stop' when no request has been set since
+	* that instance was created.
+	*/
+	int[] rgdispid;
+	if (navigate) {
+		/*
+		* Stopping the loading of a page causes DocumentComplete events from previous
+		* requests to be received before the DocumentComplete for this page.  In such
+		* cases we must be sure to not set the html into the browser too soon, since
+		* doing so could result in its page being cleared out by a subsequent
+		* DocumentComplete.  The Browser's ReadyState can be used to determine whether
+		* these extra events will be received or not.
+		*/
+		rgdispid = auto.getIDsOfNames(new String[] { "ReadyState" }); //$NON-NLS-1$
+		Variant pVarResult = auto.getProperty(rgdispid[0]);
+		if (pVarResult == null) return false;
+		delaySetText = pVarResult.getInt() != READYSTATE_COMPLETE;
+		pVarResult.dispose();
+		rgdispid = auto.getIDsOfNames(new String[] { "Stop" }); //$NON-NLS-1$
+		auto.invoke(rgdispid[0]);
+	}
+	rgdispid = auto.getIDsOfNames(new String[] { "Navigate", "URL" }); //$NON-NLS-1$ //$NON-NLS-2$
+	navigate = true;
+	Variant[] rgvarg = new Variant[1];
+	rgvarg[0] = new Variant(ABOUT_BLANK);
+	int[] rgdispidNamedArgs = new int[1];
+	rgdispidNamedArgs[0] = rgdispid[1];
+	boolean oldValue = false;
+	if (!OS.IsWinCE && IsIE7) {
+		int hResult = OS.CoInternetIsFeatureEnabled(OS.FEATURE_DISABLE_NAVIGATION_SOUNDS, OS.GET_FEATURE_FROM_PROCESS);
+		oldValue = hResult == COM.S_OK;
+		OS.CoInternetSetFeatureEnabled(OS.FEATURE_DISABLE_NAVIGATION_SOUNDS, OS.SET_FEATURE_ON_PROCESS, true);
+	}
+	Variant pVarResult = auto.invoke(rgdispid[0], rgvarg, rgdispidNamedArgs);
+	if (!OS.IsWinCE && IsIE7) {
+		OS.CoInternetSetFeatureEnabled(OS.FEATURE_DISABLE_NAVIGATION_SOUNDS, OS.SET_FEATURE_ON_PROCESS, oldValue);
+	}
+	rgvarg[0].dispose();
+	if (pVarResult == null) return false;
+	boolean result = pVarResult.getType() == OLE.VT_EMPTY;
+	pVarResult.dispose();
+	return result;
+}
+
+public boolean setUrl(String url) {
+	html = null;
+
+	/*
+	* Bug in Internet Explorer.  For some reason, Navigating to an xml document before
+	* a previous Navigate has completed will leave the Browser in a bad state if the
+	* Navigate to the xml document does not complete.  This bad state causes a GP when
+	* the parent window is eventually disposed.  The workaround is to issue a Stop before
+	* navigating to any xml document. 
+	*/
+	if (url.endsWith(".xml")) {	//$NON-NLS-1$
+		/*
+		* Feature in Internet Explorer.  Stopping pending requests when no request has been
+		* issued causes a default 'Action cancelled' page to be displayed.  Since Stop must
+		* be issued here, the workaround is to first Navigate to the about:blank page before
+		* issuing Stop so that the 'Action cancelled' page is not displayed.
+		*/
+		if (!navigate) {
+			int[] rgdispid = auto.getIDsOfNames(new String[] { "Navigate", "URL" }); //$NON-NLS-1$ //$NON-NLS-2$
+			Variant[] rgvarg = new Variant[1];
+			rgvarg[0] = new Variant(ABOUT_BLANK);
+			int[] rgdispidNamedArgs = new int[1];
+			rgdispidNamedArgs[0] = rgdispid[1];
+			boolean oldValue = false;
+			if (!OS.IsWinCE && IsIE7) {
+				int hResult = OS.CoInternetIsFeatureEnabled(OS.FEATURE_DISABLE_NAVIGATION_SOUNDS, OS.GET_FEATURE_FROM_PROCESS);
+				oldValue = hResult == COM.S_OK;
+				OS.CoInternetSetFeatureEnabled(OS.FEATURE_DISABLE_NAVIGATION_SOUNDS, OS.SET_FEATURE_ON_PROCESS, true);
+			}
+			auto.invoke(rgdispid[0], rgvarg, rgdispidNamedArgs);
+			if (!OS.IsWinCE && IsIE7) {
+				OS.CoInternetSetFeatureEnabled(OS.FEATURE_DISABLE_NAVIGATION_SOUNDS, OS.SET_FEATURE_ON_PROCESS, oldValue);
+			}
+			rgvarg[0].dispose();
+		}
+		int[] rgdispid = auto.getIDsOfNames(new String[] { "Stop" }); //$NON-NLS-1$
+		auto.invoke(rgdispid[0]);
+	}
+
+	int[] rgdispid = auto.getIDsOfNames(new String[] { "Navigate", "URL" }); //$NON-NLS-1$ //$NON-NLS-2$
+	navigate = true;
+	Variant[] rgvarg = new Variant[1];
+	rgvarg[0] = new Variant(url);
+	int[] rgdispidNamedArgs = new int[1];
+	rgdispidNamedArgs[0] = rgdispid[1];
+	Variant pVarResult = auto.invoke(rgdispid[0], rgvarg, rgdispidNamedArgs);
+	rgvarg[0].dispose();
+	if (pVarResult == null) return false;
+	boolean result = pVarResult.getType() == OLE.VT_EMPTY;
+	pVarResult.dispose();
+	return result;
+}
+
+public void stop() {
+	int[] rgdispid = auto.getIDsOfNames(new String[] { "Stop" }); //$NON-NLS-1$
+	auto.invoke(rgdispid[0]);
+}
+
+void handleDOMEvent (OleEvent e) {
+	if (e.arguments == null || e.arguments.length == 0) return; /* for IE5 */
+
+	Variant arg = e.arguments[0];
+	OleAutomation event = arg.getAutomation();
+	int[] rgdispid = event.getIDsOfNames(new String[]{ PROPERTY_TYPE });
+	int dispIdMember = rgdispid[0];
+	Variant pVarResult = event.getProperty(dispIdMember);
+	String eventType = pVarResult.getString();
+	pVarResult.dispose();
+
+	if (eventType.equals(EVENT_KEYDOWN)) {
+		rgdispid = event.getIDsOfNames(new String[] { PROPERTY_KEYCODE });
+		dispIdMember = rgdispid[0];
+		pVarResult = event.getProperty(dispIdMember);
+		lastKeyCode = translateKey (pVarResult.getInt());
+		pVarResult.dispose();
+
+		MSG msg = new MSG ();
+		int flags = OS.PM_NOREMOVE | OS.PM_NOYIELD;
+		if (OS.PeekMessage (msg, frame.handle, OS.WM_CHAR, OS.WM_CHAR, flags)) {
+			/* a keypress will be received for this key so don't send KeyDown here */
+			event.dispose();
+			return;
+		}
+
+		/* if this is a repeating key then an event should not be fired for it */
+		rgdispid = event.getIDsOfNames(new String[] { PROPERTY_REPEAT });
+		dispIdMember = rgdispid[0];
+		pVarResult = event.getProperty(dispIdMember);
+		boolean repeating = pVarResult.getBoolean();
+		pVarResult.dispose();
+		if (repeating) {
+			event.dispose();
+			return;
+		}
+
+		int mask = 0;
+		rgdispid = event.getIDsOfNames(new String[] { PROPERTY_ALTKEY });
+		dispIdMember = rgdispid[0];
+		pVarResult = event.getProperty(dispIdMember);
+		if (pVarResult.getBoolean()) mask |= SWT.ALT;
+		pVarResult.dispose();
+
+		rgdispid = event.getIDsOfNames(new String[] { PROPERTY_CTRLKEY });
+		dispIdMember = rgdispid[0];
+		pVarResult = event.getProperty(dispIdMember);
+		if (pVarResult.getBoolean()) mask |= SWT.CTRL;
+		pVarResult.dispose();
+
+		rgdispid = event.getIDsOfNames(new String[] { PROPERTY_SHIFTKEY });
+		dispIdMember = rgdispid[0];
+		pVarResult = event.getProperty(dispIdMember);
+		if (pVarResult.getBoolean()) mask |= SWT.SHIFT;
+		pVarResult.dispose();
+
+		Event keyEvent = new Event ();
+		keyEvent.widget = browser;
+		keyEvent.type = SWT.KeyDown;
+		keyEvent.keyCode = lastKeyCode;
+		keyEvent.stateMask = mask;
+		keyEvent.stateMask &= ~lastKeyCode;		/* remove current keydown if it's a state key */
+		/*
+		* keypress events are not received for Enter, Delete and Tab, so
+		* KeyDown events are sent for them here.  Set the KeyDown event's
+		* character field and IE's lastCharCode field for these keys so
+		* that the Browser's key events are consistent with other controls.
+		*/
+		switch (lastKeyCode) {
+			case SWT.CR: lastCharCode = keyEvent.character = SWT.CR; break;
+			case SWT.DEL: lastCharCode = keyEvent.character = SWT.DEL; break;
+			case SWT.TAB: lastCharCode = keyEvent.character = SWT.TAB; break;
+		}
+		browser.notifyListeners (keyEvent.type, keyEvent);
+		if (!keyEvent.doit) {
+			rgdispid = event.getIDsOfNames(new String[] { PROPERTY_RETURNVALUE });
+			dispIdMember = rgdispid[0];
+			Variant pVarFalse = new Variant(false);
+			event.setProperty(dispIdMember, pVarFalse);
+			pVarFalse.dispose();
+		}
+
+		event.dispose();
+		return;
+	}
+
+	if (eventType.equals(EVENT_KEYPRESS)) {
+		int mask = 0;
+		rgdispid = event.getIDsOfNames(new String[] { PROPERTY_CTRLKEY });
+		dispIdMember = rgdispid[0];
+		pVarResult = event.getProperty(dispIdMember);
+		if (pVarResult.getBoolean()) mask |= SWT.CTRL;
+		pVarResult.dispose();
+
+		rgdispid = event.getIDsOfNames(new String[] { PROPERTY_SHIFTKEY });
+		dispIdMember = rgdispid[0];
+		pVarResult = event.getProperty(dispIdMember);
+		if (pVarResult.getBoolean()) mask |= SWT.SHIFT;
+		pVarResult.dispose();
+
+		rgdispid = event.getIDsOfNames(new String[] { PROPERTY_ALTKEY });
+		dispIdMember = rgdispid[0];
+		pVarResult = event.getProperty(dispIdMember);
+		if (pVarResult.getBoolean()) mask |= SWT.ALT;
+		pVarResult.dispose();
+
+		/* in the keypress event the keyCode actually corresponds to the character code */
+		rgdispid = event.getIDsOfNames(new String[] { PROPERTY_KEYCODE });
+		dispIdMember = rgdispid[0];
+		pVarResult = event.getProperty(dispIdMember);
+		lastCharCode = pVarResult.getInt();
+		pVarResult.dispose();
+
+		/*
+		* WebSite.TranslateAccelerator() explicitly does not translate OS.VK_RETURN
+		* keys, so the PeekMessage check in the keydown handler always allows a
+		* KeyDown to be sent for this key.  However, keydown and keypress events are 
+		* both sometimes received for OS.VK_RETURN, depending on the page's focus
+		* control.  To handle this, do not send a KeyDown for OS.VK_RETURN here since
+		* one is always sent for it from the keydown handler. 
+		*/
+		if (lastCharCode == OS.VK_RETURN) {
+			event.dispose();
+			return;
+		}
+
+		Event keyEvent = new Event ();
+		keyEvent.widget = browser;
+		keyEvent.type = SWT.KeyDown;
+		keyEvent.keyCode = lastKeyCode;
+		keyEvent.character = (char)lastCharCode;
+		keyEvent.stateMask = mask;
+		browser.notifyListeners (keyEvent.type, keyEvent);
+		if (!keyEvent.doit) {
+			rgdispid = event.getIDsOfNames(new String[] { PROPERTY_RETURNVALUE });
+			dispIdMember = rgdispid[0];
+			Variant pVarFalse = new Variant(false);
+			event.setProperty(dispIdMember, pVarFalse);
+			pVarFalse.dispose();
+		}
+
+		event.dispose();
+		return;
+	}
+
+	if (eventType.equals(EVENT_KEYUP)) {
+		rgdispid = event.getIDsOfNames(new String[] { PROPERTY_KEYCODE });
+		dispIdMember = rgdispid[0];
+		pVarResult = event.getProperty(dispIdMember);
+		int keyCode = translateKey (pVarResult.getInt());
+		pVarResult.dispose();
+
+		/*
+		* if a key code could not be determined for this key then it's a
+		* key for which key events are not sent (eg.- the Windows key)
+		*/
+		if (keyCode == 0) {
+			lastKeyCode = lastCharCode = 0;
+			event.dispose();
+			return;
+		}
+
+		if (keyCode != lastKeyCode) {
+			/* keyup does not correspond to the last keydown */
+			lastKeyCode = keyCode;
+			lastCharCode = 0;
+		}
+
+		int mask = 0;
+		rgdispid = event.getIDsOfNames(new String[] { PROPERTY_CTRLKEY });
+		dispIdMember = rgdispid[0];
+		pVarResult = event.getProperty(dispIdMember);
+		if (pVarResult.getBoolean()) mask |= SWT.CTRL;
+		pVarResult.dispose();
+
+		rgdispid = event.getIDsOfNames(new String[] { PROPERTY_ALTKEY });
+		dispIdMember = rgdispid[0];
+		pVarResult = event.getProperty(dispIdMember);
+		if (pVarResult.getBoolean()) mask |= SWT.ALT;
+		pVarResult.dispose();
+
+		rgdispid = event.getIDsOfNames(new String[] { PROPERTY_SHIFTKEY });
+		dispIdMember = rgdispid[0];
+		pVarResult = event.getProperty(dispIdMember);
+		if (pVarResult.getBoolean()) mask |= SWT.SHIFT;
+		pVarResult.dispose();
+
+		Event keyEvent = new Event ();
+		keyEvent.widget = browser;
+		keyEvent.type = SWT.KeyUp;
+		keyEvent.keyCode = lastKeyCode;
+		keyEvent.character = (char)lastCharCode;
+		keyEvent.stateMask = mask;
+		switch (lastKeyCode) {
+			case SWT.SHIFT:
+			case SWT.CONTROL:
+			case SWT.ALT:
+			case SWT.COMMAND: {
+				keyEvent.stateMask |= lastKeyCode;
+			}
+		}
+		browser.notifyListeners (keyEvent.type, keyEvent);
+		if (!keyEvent.doit) {
+			rgdispid = event.getIDsOfNames(new String[] { PROPERTY_RETURNVALUE });
+			dispIdMember = rgdispid[0];
+			Variant pVarFalse = new Variant(false);
+			event.setProperty(dispIdMember, pVarFalse);
+			pVarFalse.dispose();
+		}
+
+		lastKeyCode = lastCharCode = 0;
+		event.dispose();
+		return;
+	}
+	
+	/*
+	 * Feature in IE. MouseOver/MouseOut events are fired any time the mouse enters
+	 * or exits any element within the Browser.  To ensure that SWT events are only
+	 * fired for mouse movements into or out of the Browser, do not fire an event if
+	 * the element being exited (on MouseOver) or entered (on MouseExit) is within
+	 * the Browser.
+	 */
+	if (eventType.equals(EVENT_MOUSEOVER)) {
+		rgdispid = event.getIDsOfNames(new String[] { PROPERTY_FROMELEMENT });
+		dispIdMember = rgdispid[0];
+		pVarResult = event.getProperty(dispIdMember);
+		boolean isInternal = pVarResult.getType() != COM.VT_EMPTY;
+		pVarResult.dispose();
+		if (isInternal) {
+			event.dispose();
+			return;
+		}
+	}
+	if (eventType.equals(EVENT_MOUSEOUT)) {
+		rgdispid = event.getIDsOfNames(new String[] { PROPERTY_TOELEMENT });
+		dispIdMember = rgdispid[0];
+		pVarResult = event.getProperty(dispIdMember);
+		boolean isInternal = pVarResult.getType() != COM.VT_EMPTY;
+		pVarResult.dispose();
+		if (isInternal) {
+			event.dispose();
+			return;
+		}
+	}
+
+	int x, y, mask = 0;
+	Event newEvent = new Event();
+	newEvent.widget = browser;
+
+	rgdispid = event.getIDsOfNames(new String[] { PROPERTY_CLIENTX });
+	dispIdMember = rgdispid[0];
+	pVarResult = event.getProperty(dispIdMember);
+	x = pVarResult.getInt();
+	newEvent.x = x;
+	pVarResult.dispose();
+
+	rgdispid = event.getIDsOfNames(new String[] { PROPERTY_CLIENTY });
+	dispIdMember = rgdispid[0];
+	pVarResult = event.getProperty(dispIdMember);
+	y = pVarResult.getInt();
+	newEvent.y = y;
+	pVarResult.dispose();
+
+	rgdispid = event.getIDsOfNames(new String[] { PROPERTY_CTRLKEY });
+	dispIdMember = rgdispid[0];
+	pVarResult = event.getProperty(dispIdMember);
+	if (pVarResult.getBoolean()) mask |= SWT.CTRL;
+	pVarResult.dispose();
+
+	rgdispid = event.getIDsOfNames(new String[] { PROPERTY_ALTKEY });
+	dispIdMember = rgdispid[0];
+	pVarResult = event.getProperty(dispIdMember);
+	if (pVarResult.getBoolean()) mask |= SWT.ALT;
+	pVarResult.dispose();
+
+	rgdispid = event.getIDsOfNames(new String[] { PROPERTY_SHIFTKEY });
+	dispIdMember = rgdispid[0];
+	pVarResult = event.getProperty(dispIdMember);
+	if (pVarResult.getBoolean()) mask |= SWT.SHIFT;
+	pVarResult.dispose();
+
+	newEvent.stateMask = mask;
+
+	rgdispid = event.getIDsOfNames(new String[] { PROPERTY_BUTTON });
+	dispIdMember = rgdispid[0];
+	pVarResult = event.getProperty(dispIdMember);
+	int button = pVarResult.getInt();
+	pVarResult.dispose();
+	switch (button) {
+		case 1: button = 1; break;
+		case 2: button = 3; break;
+		case 4: button = 2; break;
+	};
+
+	if (eventType.equals(EVENT_MOUSEDOWN)) {
+		newEvent.type = SWT.MouseDown;
+		newEvent.button = button;
+		newEvent.count = 1;
+	} else if (eventType.equals(EVENT_MOUSEUP) || eventType.equals(EVENT_DRAGEND)) {
+		newEvent.type = SWT.MouseUp;
+		newEvent.button = button != 0 ? button : 1;	/* button assumed to be 1 for dragends */
+		newEvent.count = 1;
+		switch (newEvent.button) {
+			case 1: newEvent.stateMask |= SWT.BUTTON1; break;
+			case 2: newEvent.stateMask |= SWT.BUTTON2; break;
+			case 3: newEvent.stateMask |= SWT.BUTTON3; break;
+			case 4: newEvent.stateMask |= SWT.BUTTON4; break;
+			case 5: newEvent.stateMask |= SWT.BUTTON5; break;
+		}
+	} else if (eventType.equals(EVENT_MOUSEWHEEL)) {
+		newEvent.type = SWT.MouseWheel;
+		rgdispid = event.getIDsOfNames(new String[] { PROPERTY_WHEELDELTA });
+		dispIdMember = rgdispid[0];
+		pVarResult = event.getProperty(dispIdMember);
+		newEvent.count = pVarResult.getInt () / 120 * 3;
+		pVarResult.dispose();
+	} else if (eventType.equals(EVENT_MOUSEMOVE)) {
+		/*
+		* Feature in IE.  Spurious and redundant mousemove events are often received.  The workaround
+		* is to not fire MouseMove events whose x and y values match the last MouseMove.  
+		*/
+		if (newEvent.x == lastMouseMoveX && newEvent.y == lastMouseMoveY) return;
+		newEvent.type = SWT.MouseMove;
+		lastMouseMoveX = newEvent.x; lastMouseMoveY = newEvent.y;
+	} else if (eventType.equals(EVENT_MOUSEOVER)) {
+		newEvent.type = SWT.MouseEnter;
+	} else if (eventType.equals(EVENT_MOUSEOUT)) {
+		newEvent.type = SWT.MouseExit;
+	} else if (eventType.equals(EVENT_DRAGSTART)) {
+		newEvent.type = SWT.DragDetect;
+		newEvent.button = 1;	/* button assumed to be 1 for dragstarts */
+		newEvent.stateMask |= SWT.BUTTON1;
+	}
+
+	event.dispose();
+	browser.notifyListeners(newEvent.type, newEvent);
+
+	if (eventType.equals(EVENT_DOUBLECLICK)) {
+		newEvent = new Event ();
+		newEvent.widget = browser;
+		newEvent.type = SWT.MouseDoubleClick;
+		newEvent.x = x; newEvent.y = y;
+		newEvent.stateMask = mask;
+		newEvent.type = SWT.MouseDoubleClick;
+		newEvent.button = 1; /* dblclick only comes for button 1 and does not set the button property */
+		newEvent.count = 2;
+		browser.notifyListeners (newEvent.type, newEvent);	
+	}
+}
+
+void hookDOMListeners(OleAutomation webBrowser, final boolean isTop) {
+	int[] rgdispid = webBrowser.getIDsOfNames(new String[]{ "Document" }); //$NON-NLS-1$
+	int dispIdMember = rgdispid[0];
+	Variant	pVarResult = webBrowser.getProperty(dispIdMember);
+	if (pVarResult == null) return;
+	if (pVarResult.getType() == COM.VT_EMPTY) {
+		pVarResult.dispose();
+		return;
+	}
+	final OleAutomation document = pVarResult.getAutomation();
+	pVarResult.dispose();
+
+	/*
+	 * In some cases, such as setting the Browser's content from a string,
+	 * NavigateComplete2 is received multiple times for a top-level document.
+	 * For cases like this, any previously-hooked DOM listeners must be
+	 * removed from the document before hooking the new set of listeners,
+	 * otherwise multiple sets of events will be received.  
+	 */
+	unhookDOMListeners (new OleAutomation[] {document});
+
+	site.addEventListener(document, COM.IIDIHTMLDocumentEvents2, COM.DISPID_HTMLDOCUMENTEVENTS_ONKEYDOWN, domListener);
+	site.addEventListener(document, COM.IIDIHTMLDocumentEvents2, COM.DISPID_HTMLDOCUMENTEVENTS_ONKEYPRESS, domListener);
+	site.addEventListener(document, COM.IIDIHTMLDocumentEvents2, COM.DISPID_HTMLDOCUMENTEVENTS_ONKEYUP, domListener);
+	site.addEventListener(document, COM.IIDIHTMLDocumentEvents2, COM.DISPID_HTMLDOCUMENTEVENTS_ONMOUSEDOWN, domListener);
+	site.addEventListener(document, COM.IIDIHTMLDocumentEvents2, COM.DISPID_HTMLDOCUMENTEVENTS_ONMOUSEUP, domListener);
+	site.addEventListener(document, COM.IIDIHTMLDocumentEvents2, COM.DISPID_HTMLDOCUMENTEVENTS_ONMOUSEWHEEL, domListener);
+	site.addEventListener(document, COM.IIDIHTMLDocumentEvents2, COM.DISPID_HTMLDOCUMENTEVENTS_ONDBLCLICK, domListener);
+	site.addEventListener(document, COM.IIDIHTMLDocumentEvents2, COM.DISPID_HTMLDOCUMENTEVENTS_ONMOUSEMOVE, domListener);
+	site.addEventListener(document, COM.IIDIHTMLDocumentEvents2, COM.DISPID_HTMLDOCUMENTEVENTS_ONDRAGSTART, domListener);
+	site.addEventListener(document, COM.IIDIHTMLDocumentEvents2, COM.DISPID_HTMLDOCUMENTEVENTS_ONDRAGEND, domListener);
+	/* ensure that enter/exit are only fired once, by the top-level document */
+	if (isTop) {
+		site.addEventListener(document, COM.IIDIHTMLDocumentEvents2, COM.DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOVER, domListener);
+		site.addEventListener(document, COM.IIDIHTMLDocumentEvents2, COM.DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOUT, domListener);
+	}
+
+	OleAutomation[] newDocuments = new OleAutomation[documents.length + 1];
+	System.arraycopy(documents, 0, newDocuments, 0, documents.length);
+	newDocuments[documents.length] = document;
+	documents = newDocuments;
+}
+
+void unhookDOMListeners(OleAutomation[] documents) {
+	char[] buffer = (COM.IIDIHTMLDocumentEvents2 + '\0').toCharArray();
+	GUID guid = new GUID();
+	if (COM.IIDFromString(buffer, guid) == COM.S_OK) {
+		for (int i = 0; i < documents.length; i++) {
+			OleAutomation document = documents[i];
+			site.removeEventListener(document, guid, COM.DISPID_HTMLDOCUMENTEVENTS_ONKEYDOWN, domListener);
+			site.removeEventListener(document, guid, COM.DISPID_HTMLDOCUMENTEVENTS_ONKEYPRESS, domListener);
+			site.removeEventListener(document, guid, COM.DISPID_HTMLDOCUMENTEVENTS_ONKEYUP, domListener);
+			site.removeEventListener(document, guid, COM.DISPID_HTMLDOCUMENTEVENTS_ONMOUSEDOWN, domListener);
+			site.removeEventListener(document, guid, COM.DISPID_HTMLDOCUMENTEVENTS_ONMOUSEUP, domListener);
+			site.removeEventListener(document, guid, COM.DISPID_HTMLDOCUMENTEVENTS_ONMOUSEWHEEL, domListener);
+			site.removeEventListener(document, guid, COM.DISPID_HTMLDOCUMENTEVENTS_ONDBLCLICK, domListener);
+			site.removeEventListener(document, guid, COM.DISPID_HTMLDOCUMENTEVENTS_ONMOUSEMOVE, domListener);
+			site.removeEventListener(document, guid, COM.DISPID_HTMLDOCUMENTEVENTS_ONDRAGSTART, domListener);
+			site.removeEventListener(document, guid, COM.DISPID_HTMLDOCUMENTEVENTS_ONDRAGEND, domListener);
+			site.removeEventListener(document, guid, COM.DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOVER, domListener);
+			site.removeEventListener(document, guid, COM.DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOUT, domListener);
+		}
+	}
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/wpf/org/eclipse/swt/browser/IE.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/wpf/org/eclipse/swt/browser/IE.java
new file mode 100644
index 0000000..babe61d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/wpf/org/eclipse/swt/browser/IE.java
@@ -0,0 +1,220 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.browser;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.widgets.*;
+
+class IE extends WebBrowser {
+	
+	int frame;
+
+	boolean ignoreDispose;
+
+	static {
+		NativeClearSessions = new Runnable() {
+			public void run() {
+//				OS.InternetSetOption (0, OS.INTERNET_OPTION_END_BROWSER_SESSION, 0, 0);
+			}
+		};
+	}
+
+public void create(Composite parent, int style) {
+	frame = OS.gcnew_Frame();
+	if (frame == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	OS.Frame_NavigationUIVisibility(frame, OS.NavigationUIVisibility_Hidden);
+	int parentHandle = browser.handle;
+	int children = OS.Panel_Children(parentHandle);
+	OS.UIElementCollection_Insert(children, 0, frame);
+	OS.GCHandle_Free(children);
+	OS.FrameworkElement_Width(frame, OS.FrameworkElement_Width(parentHandle));
+	OS.FrameworkElement_Height(frame, OS.FrameworkElement_Height(parentHandle));
+	
+	Listener listener = new Listener() {
+		public void handleEvent(Event event) {
+			switch (event.type) {
+				case SWT.Dispose: {
+					if (ignoreDispose) {
+						ignoreDispose = false;
+						break;
+					}
+					ignoreDispose = true;
+					browser.notifyListeners (event.type, event);
+					event.type = SWT.NONE;
+					OS.GCHandle_Free(frame);
+					frame = 0;
+					break;
+				}
+				case SWT.Resize: {
+					OS.FrameworkElement_Width(frame, OS.FrameworkElement_Width(browser.handle));
+					OS.FrameworkElement_Height(frame, OS.FrameworkElement_Height(browser.handle));
+					break;
+				}
+			}
+		}
+	};
+	browser.addListener(SWT.Resize, listener);
+	browser.addListener(SWT.Dispose, listener);
+}
+
+public boolean back() {
+	if (!OS.Frame_CanGoBack(frame)) return false;
+	OS.Frame_GoBack(frame);
+	return true;
+}
+
+public boolean execute(String script) {
+//	/* get IHTMLDocument2 */
+//	int[] rgdispid = auto.getIDsOfNames(new String[]{"Document"}); //$NON-NLS-1$
+//	int dispIdMember = rgdispid[0];
+//	Variant pVarResult = auto.getProperty(dispIdMember);
+//	if (pVarResult == null || pVarResult.getType() == COM.VT_EMPTY) return false;
+//	OleAutomation document = pVarResult.getAutomation();
+//	pVarResult.dispose();
+//
+//	/* get IHTMLWindow2 */
+//	rgdispid = document.getIDsOfNames(new String[]{"parentWindow"}); //$NON-NLS-1$
+//	if (rgdispid == null) {
+//		/* implies that browser's content is not a IHTMLDocument2 (eg.- acrobat reader) */
+//		document.dispose();
+//		return false;
+//	}
+//	dispIdMember = rgdispid[0];
+//	pVarResult = document.getProperty(dispIdMember);
+//	OleAutomation ihtmlWindow2 = pVarResult.getAutomation();
+//	pVarResult.dispose();
+//	document.dispose();
+//	
+//	rgdispid = ihtmlWindow2.getIDsOfNames(new String[] { "execScript", "code" }); //$NON-NLS-1$  //$NON-NLS-2$
+//	Variant[] rgvarg = new Variant[1];
+//	rgvarg[0] = new Variant(script);
+//	int[] rgdispidNamedArgs = new int[1];
+//	rgdispidNamedArgs[0] = rgdispid[1];
+//	pVarResult = ihtmlWindow2.invoke(rgdispid[0], rgvarg, rgdispidNamedArgs);
+//	rgvarg[0].dispose();
+//	ihtmlWindow2.dispose();
+//	if (pVarResult == null) return false;
+//	pVarResult.dispose();
+	return true;
+}
+
+public boolean forward() {
+	if (!OS.Frame_CanGoForward(frame)) return false;
+	OS.Frame_GoForward(frame);
+	return true;
+}
+
+public String getBrowserType () {
+	return "ie"; //$NON-NLS-1$
+}
+
+public String getUrl() {
+	int uri = OS.Frame_Source(frame);
+	int str = OS.Object_ToString(uri);
+	int charArray = OS.String_ToCharArray(str);
+	char[] chars = new char[OS.String_Length(str)];
+	OS.memcpy(chars, charArray, chars.length * 2);
+	OS.GCHandle_Free(charArray);
+	String url = new String(chars);
+	OS.GCHandle_Free(str);
+	OS.GCHandle_Free(uri);
+	return url;
+}
+
+public boolean isBackEnabled() {
+	return OS.Frame_CanGoBack(frame);
+}
+
+public boolean isForwardEnabled() {
+	return OS.Frame_CanGoForward(frame);
+}
+
+public void refresh() {
+	OS.Frame_Refresh(frame);
+}
+
+public boolean setText(String html) {
+	return true;
+//	/*
+//	* If the html field is non-null then the about:blank page is already being
+//	* loaded, so no Stop or Navigate is required.  Just set the html that is to
+//	* be shown.
+//	*/
+//	boolean blankLoading = this.html != null;
+//	this.html = html;
+//	if (blankLoading) return true;
+//	
+//	/*
+//	* Navigate to the blank page and insert the given html when
+//	* receiving the next DocumentComplete notification.  See the
+//	* MSDN article "Loading HTML content from a Stream".
+//	* 
+//	* Note.  Stop any pending request.  This is required to avoid displaying a
+//	* blank page as a result of consecutive calls to setUrl and/or setText.  
+//	* The previous request would otherwise render the new html content and
+//	* reset the html field before the browser actually navigates to the blank
+//	* page as requested below.
+//	* 
+//	* Feature in Internet Explorer.  Stopping pending requests when no request
+//	* is pending causes a default page 'Action cancelled' to be displayed.  The
+//	* workaround is to not invoke 'stop' when no request has been set since
+//	* that instance was created.
+//	*/
+//	int[] rgdispid;
+//	if (navigate) {
+//		/*
+//		* Stopping the loading of a page causes DocumentComplete events from previous
+//		* requests to be received before the DocumentComplete for this page.  In such
+//		* cases we must be sure to not set the html into the browser too soon, since
+//		* doing so could result in its page being cleared out by a subsequent
+//		* DocumentComplete.  The Browser's ReadyState can be used to determine whether
+//		* these extra events will be received or not.
+//		*/
+//		rgdispid = auto.getIDsOfNames(new String[] { "ReadyState" }); //$NON-NLS-1$
+//		Variant pVarResult = auto.getProperty(rgdispid[0]);
+//		if (pVarResult == null) return false;
+//		delaySetText = pVarResult.getInt() != READYSTATE_COMPLETE;
+//		pVarResult.dispose();
+//		rgdispid = auto.getIDsOfNames(new String[] { "Stop" }); //$NON-NLS-1$
+//		auto.invoke(rgdispid[0]);
+//	}
+//	rgdispid = auto.getIDsOfNames(new String[] { "Navigate", "URL" }); //$NON-NLS-1$ //$NON-NLS-2$
+//	navigate = true;
+//	Variant[] rgvarg = new Variant[1];
+//	rgvarg[0] = new Variant(ABOUT_BLANK);
+//	int[] rgdispidNamedArgs = new int[1];
+//	rgdispidNamedArgs[0] = rgdispid[1];
+//	Variant pVarResult = auto.invoke(rgdispid[0], rgvarg, rgdispidNamedArgs);
+//	rgvarg[0].dispose();
+//	if (pVarResult == null) return false;
+//	boolean result = pVarResult.getType() == OLE.VT_EMPTY;
+//	pVarResult.dispose();
+//	return result;
+}
+
+public boolean setUrl(String url) {
+	if (url.indexOf(':') == -1) url = "http://" + url;
+	int length = url.length ();
+	char [] buffer = new char [length + 1];
+	url.getChars (0, length, buffer, 0);
+	int str = OS.gcnew_String (buffer);
+	int uri = OS.gcnew_Uri(str, OS.UriKind_RelativeOrAbsolute);
+	OS.GCHandle_Free(str);
+	boolean result = OS.Frame_Navigate(frame, uri);
+	OS.GCHandle_Free(uri);
+	return result;
+}
+
+public void stop() {
+	OS.Frame_StopLoading (frame);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CaretEvent.java b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CaretEvent.java
new file mode 100644
index 0000000..4c1b1d6
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CaretEvent.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 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.custom;
+
+
+import org.eclipse.swt.events.*;
+
+/**
+ * This event is sent when the caret offset changes.
+ *
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.5
+ */
+public class CaretEvent extends TypedEvent {
+	
+	/** 
+	 * caret offset 
+	 */
+	public int caretOffset;
+	
+	static final long serialVersionUID = 3257846571587545489L;
+
+CaretEvent(StyledTextEvent e) {
+	super(e);
+	caretOffset = e.end;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CaretListener.java b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CaretListener.java
new file mode 100644
index 0000000..7423d26
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CaretListener.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 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.custom;
+
+import org.eclipse.swt.internal.SWTEventListener;
+
+/**
+ * This listener interface may be implemented in order to receive
+ * CaretEvents.
+ * 
+ * @see CaretEvent
+ * 
+ * @since 3.5
+ */ 
+public interface CaretListener extends SWTEventListener {
+
+/**
+ * This method is called after the caret offset is changed.
+ * 
+ * The following event fields are used:<ul>
+ * <li>event.caretOffset the new caret offset (input)</li>
+ * </ul>
+ *
+ * @param event the given event
+ * 
+ * @see CaretEvent
+ */
+public void caretMoved(CaretEvent event);
+
+}
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/MovementEvent.java b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/MovementEvent.java
new file mode 100644
index 0000000..97d758d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/MovementEvent.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * 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.custom;
+
+import org.eclipse.swt.events.*;
+
+/**
+ * This event is sent when a new offset is required based on the current
+ * offset and a movement type.
+ * 
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ *
+ * @since 3.3
+ */
+public class MovementEvent extends TypedEvent {
+	
+	/**
+	 * line start offset (input)
+	 */
+	public int lineOffset;
+	
+	/**
+	 * line text (input)
+	 */
+	public String lineText;
+	
+	/**
+	 * the current offset (input)
+	 */
+	public int offset;
+	
+	/**
+	 * the new offset  (input, output)
+	 */
+	public int newOffset;
+	
+	/**
+	 * the movement type (input)
+	 * 
+	 * @see org.eclipse.swt.SWT#MOVEMENT_WORD
+	 * @see org.eclipse.swt.SWT#MOVEMENT_WORD_END 
+	 * @see org.eclipse.swt.SWT#MOVEMENT_WORD_START
+	 * @see org.eclipse.swt.SWT#MOVEMENT_CHAR
+	 * @see org.eclipse.swt.SWT#MOVEMENT_CLUSTER
+	 */
+	public int movement;
+	
+	static final long serialVersionUID = 3978765487853324342L;
+
+/**
+ * Constructs a new instance of this class based on the
+ * information in the given event.
+ *
+ * @param e the event containing the information
+ */
+public MovementEvent(StyledTextEvent e) {
+	super(e);
+	lineOffset = e.detail;
+	lineText = e.text;
+	movement = e.count;
+	offset = e.start;
+	newOffset = e.end;
+}
+}
+
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/MovementListener.java b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/MovementListener.java
new file mode 100644
index 0000000..abc39e5
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/MovementListener.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.custom;
+
+import org.eclipse.swt.internal.SWTEventListener;
+
+/**
+ * This listener is invoked when a new offset is required based on the current
+ * offset and a movement type.
+ *
+ * @see org.eclipse.swt.SWT#MOVEMENT_WORD
+ * @see org.eclipse.swt.SWT#MOVEMENT_WORD_END 
+ * @see org.eclipse.swt.SWT#MOVEMENT_WORD_START
+ * @see org.eclipse.swt.SWT#MOVEMENT_CHAR
+ * @see org.eclipse.swt.SWT#MOVEMENT_CLUSTER
+ * 
+ * @since 3.3
+ */
+public interface MovementListener extends SWTEventListener {
+/**
+ * This method is called when a new offset is required based on the current
+ * offset and a movement type.
+ * 
+ * <p>
+ * The following event fields are used:<ul>
+ * <li>event.lineOffset line start offset (input)</li>
+ * <li>event.lineText line text (input)</li>
+ * <li>event.movement the movement type (input)</li>
+ * <li>event.offset the current offset (input)</li>
+ * <li>event.newOffset the new offset (input, output)</li>
+ * </ul>
+ *
+ * @param event the event
+ * 
+ * @see MovementEvent
+ * @see StyledText#addWordMovementListener(MovementListener)
+ */
+public void getNextOffset (MovementEvent event);
+/**
+ * This method is called when a new offset is required based on the current
+ * offset and a movement type.
+ * 
+ * <p>
+ * The following event fields are used:<ul>
+ * <li>event.lineOffset line start offset (input)</li>
+ * <li>event.lineText line text (input)</li>
+ * <li>event.movement the movement type (input)</li>
+ * <li>event.offset the current offset (input)</li>
+ * <li>event.newOffset the new offset (input, output)</li>
+ * </ul>
+ *
+ * @param event the event
+ * 
+ * @see MovementEvent
+ * @see StyledText#addWordMovementListener(MovementListener)
+ */
+public void getPreviousOffset (MovementEvent event);
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledTextDropTargetEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledTextDropTargetEffect.java
new file mode 100644
index 0000000..ba6c2ff
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledTextDropTargetEffect.java
@@ -0,0 +1,242 @@
+/*******************************************************************************
+ * 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.custom;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.dnd.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This adapter class provides a default drag under effect (eg. select and scroll) 
+ * when a drag occurs over a <code>StyledText</code>.
+ * 
+ * <p>Classes that wish to provide their own drag under effect for a <code>StyledText</code>
+ * can extend this class, override the <code>StyledTextDropTargetEffect.dragOver</code>
+ * method and override any other applicable methods in <code>StyledTextDropTargetEffect</code> to 
+ * display their own drag under effect.</p>
+ *
+ * Subclasses that override any methods of this class should call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * <p>The feedback value is either one of the FEEDBACK constants defined in 
+ * class <code>DND</code> which is applicable to instances of this class, 
+ * or it must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> effect constants. 
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Feedback:</b></dt>
+ * <dd>FEEDBACK_SELECT, FEEDBACK_SCROLL</dd>
+ * </dl>
+ * </p>
+ * 
+ * @see DropTargetAdapter
+ * @see DropTargetEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class StyledTextDropTargetEffect extends DropTargetEffect {
+	static final int CARET_WIDTH = 2;
+	static final int SCROLL_HYSTERESIS = 100; // milli seconds
+	static final int SCROLL_TOLERANCE = 20; // pixels
+	
+	int currentOffset = -1;
+	long scrollBeginTime;
+	int scrollX = -1, scrollY = -1;
+	Listener paintListener;
+	
+	/**
+	 * Creates a new <code>StyledTextDropTargetEffect</code> to handle the drag under effect on the specified 
+	 * <code>StyledText</code>.
+	 * 
+	 * @param styledText the <code>StyledText</code> over which the user positions the cursor to drop the data
+	 */
+	public StyledTextDropTargetEffect(StyledText styledText) {
+		super(styledText);
+		paintListener = new Listener () {
+			public void handleEvent (Event event) {
+				if (currentOffset != -1) {
+					StyledText text = (StyledText) getControl();
+					Point position = text.getLocationAtOffset(currentOffset);
+					int height = text.getLineHeight(currentOffset);
+					event.gc.setBackground(event.display.getSystemColor (SWT.COLOR_BLACK));
+					event.gc.fillRectangle(position.x, position.y, CARET_WIDTH, height);
+				}
+			}
+		};
+	}
+	
+	/**
+	 * This implementation of <code>dragEnter</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragEnter</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragEnter(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag start event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 */
+	public void dragEnter(DropTargetEvent event) {
+		currentOffset = -1;
+		scrollBeginTime = 0;
+		scrollX = -1;
+		scrollY = -1;
+		getControl().removeListener(SWT.Paint, paintListener);
+		getControl().addListener (SWT.Paint, paintListener);
+	}
+	
+	/**
+	 * This implementation of <code>dragLeave</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragLeave</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragLeave(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag leave event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 */
+	public void dragLeave(DropTargetEvent event) {
+		StyledText text = (StyledText) getControl();
+		if (currentOffset != -1) {
+			refreshCaret(text, currentOffset, -1);
+		}
+		text.removeListener(SWT.Paint, paintListener);
+		scrollBeginTime = 0;
+		scrollX = -1;
+		scrollY = -1;
+	}
+
+	/**
+	 * This implementation of <code>dragOver</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragOver</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragOver(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag over event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 * @see DND#FEEDBACK_SELECT
+	 * @see DND#FEEDBACK_SCROLL
+	 */
+	public void dragOver(DropTargetEvent event) {
+		int effect = event.feedback;
+		StyledText text = (StyledText) getControl();
+		
+		Point pt = text.getDisplay().map(null, text, event.x, event.y);
+		if ((effect & DND.FEEDBACK_SCROLL) == 0) {
+			scrollBeginTime = 0;
+			scrollX = scrollY = -1;
+		} else {
+			if (text.getCharCount() == 0) {
+				scrollBeginTime = 0;
+				scrollX = scrollY = -1;
+			} else {
+				if (scrollX != -1 && scrollY != -1 && scrollBeginTime != 0 &&
+					(pt.x >= scrollX && pt.x <= (scrollX + SCROLL_TOLERANCE) ||
+					 pt.y >= scrollY && pt.y <= (scrollY + SCROLL_TOLERANCE))) {
+					if (System.currentTimeMillis() >= scrollBeginTime) {
+						Rectangle area = text.getClientArea();
+						GC gc = new GC(text);
+						FontMetrics fm = gc.getFontMetrics();
+						gc.dispose();
+						int charWidth = fm.getAverageCharWidth();
+						int scrollAmount = 10*charWidth;
+						if (pt.x < area.x + 3*charWidth) {
+							int leftPixel = text.getHorizontalPixel();
+							text.setHorizontalPixel(leftPixel - scrollAmount);
+						}
+						if (pt.x > area.width - 3*charWidth) {
+							int leftPixel = text.getHorizontalPixel();
+							text.setHorizontalPixel(leftPixel + scrollAmount);
+						}
+						int lineHeight = text.getLineHeight();
+						if (pt.y < area.y + lineHeight) {
+							int topPixel = text.getTopPixel();
+							text.setTopPixel(topPixel - lineHeight);
+						}
+						if (pt.y > area.height - lineHeight) {
+							int topPixel = text.getTopPixel();
+							text.setTopPixel(topPixel + lineHeight);
+						}
+						scrollBeginTime = 0;
+						scrollX = scrollY = -1;
+					}
+				} else {
+					scrollBeginTime = System.currentTimeMillis() + SCROLL_HYSTERESIS;
+					scrollX = pt.x;
+					scrollY = pt.y;
+				}
+			}
+		}
+			
+		if ((effect & DND.FEEDBACK_SELECT) != 0) {
+			int[] trailing = new int [1];
+			int newOffset = text.getOffsetAtPoint(pt.x, pt.y, trailing, false);
+			newOffset += trailing [0];
+			if (newOffset != currentOffset) {
+				refreshCaret(text, currentOffset, newOffset);
+				currentOffset = newOffset;
+			}
+		}
+	}
+
+	void refreshCaret(StyledText text, int oldOffset, int newOffset) {
+		if (oldOffset != newOffset) {
+			if (oldOffset != -1) {
+				Point oldPos = text.getLocationAtOffset(oldOffset);
+				int oldHeight = text.getLineHeight(oldOffset);
+				text.redraw (oldPos.x, oldPos.y, CARET_WIDTH, oldHeight, false);
+			}
+			if (newOffset != -1) {
+				Point newPos = text.getLocationAtOffset(newOffset);
+				int newHeight = text.getLineHeight(newOffset);
+				text.redraw (newPos.x, newPos.y, CARET_WIDTH, newHeight, false);
+			}
+		}
+	}
+
+	/**
+	 * This implementation of <code>dropAccept</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dropAccept</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dropAccept(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drop accept event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 */
+	public void dropAccept(DropTargetEvent event) {
+		if (currentOffset != -1) {
+			StyledText text = (StyledText) getControl();
+			text.setSelection(currentOffset);
+			currentOffset = -1;
+		}
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/ImageTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/ImageTransfer.java
new file mode 100644
index 0000000..06bad08
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/ImageTransfer.java
@@ -0,0 +1,205 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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
+ *     Outhink - support for typeFileURL
+ *******************************************************************************/
+package org.eclipse.swt.dnd;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.carbon.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * The class <code>ImageTransfer</code> provides a platform specific mechanism 
+ * for converting an Image represented as a java <code>ImageData</code> to a 
+ * platform specific representation of the data and vice versa.  
+ * 
+ * <p>An example of a java <code>ImageData</code> is shown below:</p>
+ * 
+ * <code><pre>
+ *     Image image = new Image(display, "C:\temp\img1.gif");
+ *	   ImageData imgData = image.getImageData();
+ * </code></pre>
+ *
+ * @see Transfer
+ * 
+ * @since 3.4
+ */
+public class ImageTransfer extends ByteArrayTransfer {
+
+static ImageTransfer _instance = new ImageTransfer();
+static final String PICT = "PICT"; //$NON-NLS-1$
+static final String TIFF = "TIFF"; //$NON-NLS-1$
+static final int PICTID = registerType(PICT);
+static final int TIFFID = registerType(TIFF);
+
+ImageTransfer() {
+}
+
+/**
+ * Returns the singleton instance of the ImageTransfer class.
+ *
+ * @return the singleton instance of the ImageTransfer class
+ */
+public static ImageTransfer getInstance() {
+	return _instance;
+}
+
+/**
+ * This implementation of <code>javaToNative</code> converts an ImageData object represented
+ * by java <code>ImageData</code> to a platform specific representation.
+ * 
+ * @param object a java <code>ImageData</code> containing the ImageData to be converted
+ * @param transferData an empty <code>TransferData</code> object that will
+ *  	be filled in on return with the platform specific format of the data
+ * 
+ * @see Transfer#nativeToJava
+ */
+public void javaToNative(Object object, TransferData transferData) {
+	if (!checkImage(object) || !isSupportedType(transferData)) {
+		DND.error(DND.ERROR_INVALID_DATA);
+	}
+	transferData.result = -1;
+
+	ImageData imgData = (ImageData) object;
+	Image image = new Image(Display.getCurrent(), imgData);
+	int handle = image.handle;
+	int width = OS.CGImageGetWidth(handle);
+	int height = OS.CGImageGetHeight(handle);
+	int alphaInfo = OS.CGImageGetAlphaInfo(handle);
+	int bpr = OS.CGImageGetBytesPerRow(handle);
+
+	Rect rect = new Rect();
+	rect.left = 0;
+	rect.top = 0;
+	rect.right = (short) width;
+	rect.bottom = (short) height;
+
+	int[] gWorld = new int[1];
+	int format = OS.k24RGBPixelFormat;
+	if (alphaInfo != OS.kCGImageAlphaNoneSkipFirst) {
+		format = OS.k32ARGBPixelFormat;
+	}
+	OS.NewGWorldFromPtr(gWorld, format, rect, 0, 0, 0, image.data, bpr);
+	int[] curPort = new int[1];
+	int[] curGWorld = new int[1];
+	OS.GetGWorld(curPort, curGWorld);
+	OS.SetGWorld(gWorld[0], curGWorld[0]);
+	int pictHandle = OS.OpenPicture(rect);
+	int portBitMap = OS.GetPortBitMapForCopyBits(gWorld[0]);
+	OS.CopyBits(portBitMap, portBitMap, rect, rect, (short) OS.srcCopy, 0);
+	OS.ClosePicture();
+	OS.SetGWorld(curPort[0], curGWorld[0]);
+	OS.DisposeGWorld(gWorld[0]);
+	int length = OS.GetHandleSize(pictHandle);
+	OS.HLock(pictHandle);
+	int[] buffer = new int[1];
+	OS.memmove(buffer, pictHandle, 4);
+	byte[] pictData = new byte[length];
+	OS.memmove(pictData, buffer[0], length);
+	OS.HUnlock(pictHandle);
+	OS.KillPicture(pictHandle);
+	image.dispose();
+
+	transferData.data = new byte[][] { pictData };
+	transferData.result = OS.noErr;
+}
+
+/**
+ * This implementation of <code>nativeToJava</code> converts a platform specific 
+ * representation of an image to java <code>ImageData</code>.  
+ * 
+ * @param transferData the platform specific representation of the data to be converted
+ * @return a java <code>ImageData</code> of the image if the conversion was successful;
+ * 		otherwise null
+ * 
+ * @see Transfer#javaToNative
+ */
+public Object nativeToJava(TransferData transferData) {
+	if (!isSupportedType(transferData) || transferData.data == null)
+		return null;
+	if (transferData.data.length == 0)
+		return null;
+	byte[] dataArr = transferData.data[0];
+	int size = dataArr.length;
+	int pictPtr = OS.NewPtr(size);
+	OS.memmove(pictPtr, dataArr, size);
+	int dataProvider = OS.CGDataProviderCreateWithData(0, pictPtr, size, 0);
+	if (dataProvider != 0) {
+		int pictDataRef = OS.QDPictCreateWithProvider(dataProvider);
+		// get bounds for the image
+		CGRect rect = new CGRect();
+		OS.QDPictGetBounds(pictDataRef, rect);
+		int width = (int) rect.width;
+		int height = (int) rect.height;
+
+		/* Create the image */
+		int bpr = width * 4;
+		int dataSize = height * bpr;
+		int data = OS.NewPtr(dataSize);
+		if (data == 0)
+			SWT.error(SWT.ERROR_NO_HANDLES);
+		int provider = OS
+				.CGDataProviderCreateWithData(0, data, dataSize, 0);
+		if (provider == 0) {
+			OS.DisposePtr(data);
+			SWT.error(SWT.ERROR_NO_HANDLES);
+		}
+		int colorspace = OS.CGColorSpaceCreateDeviceRGB();
+		if (colorspace == 0)
+			SWT.error(SWT.ERROR_NO_HANDLES);
+		int handle = OS.CGImageCreate(width, height, 8, 32, bpr,
+				colorspace, OS.kCGImageAlphaNoneSkipFirst, provider, null,
+				true, 0);
+		OS.CGDataProviderRelease(provider);
+		if (handle == 0) {
+			OS.DisposePtr(data);
+			SWT.error(SWT.ERROR_NO_HANDLES);
+		}
+		int bpc = OS.CGImageGetBitsPerComponent(handle);
+		int context = OS.CGBitmapContextCreate(data, width, height, bpc,
+				bpr, colorspace, OS.kCGImageAlphaNoneSkipFirst);
+		if (context == 0) {
+			OS.CGImageRelease(handle);
+			OS.DisposePtr(data);
+			SWT.error(SWT.ERROR_NO_HANDLES);
+		}
+		int status = OS.QDPictDrawToCGContext(context, rect, pictDataRef);
+		ImageData imgData = null;
+		if (status == 0) {
+			Image image = Image.carbon_new(Display.getCurrent(),
+					SWT.BITMAP, handle, data);
+			imgData = image.getImageData();
+			image.dispose();
+		}
+		OS.CGContextRelease(context);
+		OS.QDPictRelease(pictDataRef);
+		return imgData;
+	}
+	return null;
+}
+
+protected int[] getTypeIds() {
+	return new int[] { PICTID };
+}
+
+protected String[] getTypeNames() {
+	return new String[] { PICT };
+}
+
+boolean checkImage(Object object) {
+	if (object == null || !(object instanceof ImageData)) return false;
+	return true;
+}
+
+protected boolean validate(Object object) {
+	return checkImage(object);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TableDragSourceEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TableDragSourceEffect.java
new file mode 100644
index 0000000..b7dbda5
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TableDragSourceEffect.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.dnd;
+
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides default implementations to display a source image
+ * when a drag is initiated from a <code>Table</code>.
+ * 
+ * <p>Classes that wish to provide their own source image for a <code>Table</code> can
+ * extend the <code>TableDragSourceEffect</code> class, override the 
+ * <code>TableDragSourceEffect.dragStart</code> method and set the field 
+ * <code>DragSourceEvent.image</code> with their own image.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag source effect implementation.
+ *
+ * @see DragSourceEffect
+ * @see DragSourceEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TableDragSourceEffect extends DragSourceEffect {
+	/**
+	 * Creates a new <code>TableDragSourceEffect</code> to handle drag effect 
+	 * from the specified <code>Table</code>.
+	 *
+	 * @param table the <code>Table</code> that the user clicks on to initiate the drag
+	 */
+	public TableDragSourceEffect(Table table) {
+		super(table);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TableDropTargetEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TableDropTargetEffect.java
new file mode 100644
index 0000000..bcf348d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TableDropTargetEffect.java
@@ -0,0 +1,197 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.Callback;
+import org.eclipse.swt.internal.carbon.DataBrowserCallbacks;
+import org.eclipse.swt.internal.carbon.OS;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides a default drag under effect (eg. select, insert and scroll) 
+ * when a drag occurs over a <code>Table</code>.
+ * 
+ * <p>Classes that wish to provide their own drag under effect for a <code>Table</code>
+ * can extend the <code>TableDropTargetEffect</code> and override any applicable methods 
+ * in <code>TableDropTargetEffect</code> to display their own drag under effect.</p>
+ * 
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * <p>The feedback value is either one of the FEEDBACK constants defined in 
+ * class <code>DND</code> which is applicable to instances of this class, 
+ * or it must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> effect constants. 
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Feedback:</b></dt>
+ * <dd>FEEDBACK_SELECT, FEEDBACK_SCROLL</dd>
+ * </dl>
+ * </p>
+ * 
+ * @see DropTargetAdapter
+ * @see DropTargetEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TableDropTargetEffect extends DropTargetEffect {
+	static final int SCROLL_HYSTERESIS = 150; // milli seconds
+
+	TableItem scrollItem;
+	long scrollBeginTime;
+	DataBrowserCallbacks callbacks = null;
+
+	static Callback AcceptDragProc;
+	static {
+		AcceptDragProc = new Callback(TableDropTargetEffect.class, "AcceptDragProc", 5); //$NON-NLS-1$
+		int acceptDragProc = AcceptDragProc.getAddress();
+		if (acceptDragProc == 0) SWT.error(SWT.ERROR_NO_MORE_CALLBACKS);
+	}
+
+	static int AcceptDragProc(int theControl, int itemID, int property, int theRect, int theDrag) {
+		DropTarget target = FindDropTarget(theControl, theDrag);
+		if (target == null) return 0;
+		return (target.feedback & DND.FEEDBACK_SELECT) != 0 ? 1 : 0;
+	}
+	
+	static DropTarget FindDropTarget(int theControl, int theDrag) {
+		if (theControl == 0) return null;
+		Display display = Display.findDisplay(Thread.currentThread());
+		if (display == null || display.isDisposed()) return null;
+		Widget widget = display.findWidget(theControl);
+		if (widget == null) return null;
+		return (DropTarget)widget.getData(DND.DROP_TARGET_KEY); 
+	}
+	
+	/**
+	 * Creates a new <code>TableDropTargetEffect</code> to handle the drag under effect on the specified 
+	 * <code>Table</code>.
+	 * 
+	 * @param table the <code>Table</code> over which the user positions the cursor to drop the data
+	 */
+	public TableDropTargetEffect(Table table) {
+		super(table);
+	}
+
+	int checkEffect(int effect) {
+		// Some effects are mutually exclusive.  Make sure that only one of the mutually exclusive effects has been specified.
+		if ((effect & DND.FEEDBACK_SELECT) != 0) effect = effect & ~DND.FEEDBACK_INSERT_AFTER & ~DND.FEEDBACK_INSERT_BEFORE;
+		if ((effect & DND.FEEDBACK_INSERT_BEFORE) != 0) effect = effect & ~DND.FEEDBACK_INSERT_AFTER;
+		return effect;
+	}
+	
+	/**
+	 * This implementation of <code>dragEnter</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragEnter</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragEnter(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag enter event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 */
+	public void dragEnter(DropTargetEvent event) {
+		if (callbacks == null) {
+			Table table = (Table) control;
+			DataBrowserCallbacks callbacks = new DataBrowserCallbacks ();
+			OS.GetDataBrowserCallbacks (table.handle, callbacks);
+			callbacks.v1_acceptDragCallback = AcceptDragProc.getAddress();
+			OS.SetDataBrowserCallbacks(table.handle, callbacks);
+		}
+		scrollBeginTime = 0;
+		scrollItem = null;
+	}
+
+	/**
+	 * This implementation of <code>dragLeave</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>. 
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragLeave</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragLeave(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag leave event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 */
+	public void dragLeave(DropTargetEvent event) {
+		scrollBeginTime = 0;
+		scrollItem = null;
+	}
+
+	/**
+	 * This implementation of <code>dragOver</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>. The class description 
+	 * lists the FEEDBACK constants that are applicable to the class.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragOver</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragOver(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag over event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 * @see DND#FEEDBACK_SELECT
+	 * @see DND#FEEDBACK_SCROLL
+	 */
+	public void dragOver(DropTargetEvent event) {
+		Table table = (Table) control;
+		int effect = checkEffect(event.feedback);
+
+		TableItem item = (TableItem)getItem(table, event.x, event.y);
+
+		if ((effect & DND.FEEDBACK_SCROLL) == 0) {
+			scrollBeginTime = 0;
+			scrollItem = null;
+		} else {
+			if (item != null && item.equals(scrollItem)  && scrollBeginTime != 0) {
+				if (System.currentTimeMillis() >= scrollBeginTime) {
+					Rectangle area = table.getClientArea();
+					int headerHeight = table.getHeaderHeight();
+					int itemHeight= table.getItemHeight();
+					Point pt = new Point(event.x, event.y);
+					pt = table.getDisplay().map(null, table, pt);
+					TableItem nextItem = null;
+					if (pt.y < area.y + headerHeight + 2 * itemHeight) {
+						int index = Math.max(0, table.indexOf(item)-1);
+						nextItem = table.getItem(index);
+					}
+					if (pt.y > area.y + area.height - 2 * itemHeight) {
+						int index = Math.min(table.getItemCount()-1, table.indexOf(item)+1);
+						nextItem = table.getItem(index);
+					}
+					if (nextItem != null) table.showItem(nextItem);
+					scrollBeginTime = 0;
+					scrollItem = null;
+				}
+			} else {
+				scrollBeginTime = System.currentTimeMillis() + SCROLL_HYSTERESIS;
+				scrollItem = item;
+			}
+		}
+		
+		// store current effect for selection feedback
+		((DropTarget)event.widget).feedback = effect;
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TreeDragSourceEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TreeDragSourceEffect.java
new file mode 100644
index 0000000..7a66beb
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TreeDragSourceEffect.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.dnd;
+
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides default implementations to display a source image
+ * when a drag is initiated from a <code>Tree</code>.
+ * 
+ * <p>Classes that wish to provide their own source image for a <code>Tree</code> can
+ * extend <code>TreeDragSourceEffect</code> class and override the <code>TreeDragSourceEffect.dragStart</code>
+ * method and set the field <code>DragSourceEvent.image</code> with their own image.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * @see DragSourceEffect
+ * @see DragSourceEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TreeDragSourceEffect extends DragSourceEffect {
+	/**
+	 * Creates a new <code>TreeDragSourceEffect</code> to handle drag effect 
+	 * from the specified <code>Tree</code>.
+	 *
+	 * @param tree the <code>Tree</code> that the user clicks on to initiate the drag
+	 */
+	public TreeDragSourceEffect(Tree tree) {
+		super(tree);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TreeDropTargetEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TreeDropTargetEffect.java
new file mode 100644
index 0000000..2d171556
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/TreeDropTargetEffect.java
@@ -0,0 +1,265 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.Callback;
+import org.eclipse.swt.internal.carbon.DataBrowserCallbacks;
+import org.eclipse.swt.internal.carbon.OS;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides a default drag under effect (eg. select, insert, scroll and expand) 
+ * when a drag occurs over a <code>Tree</code>.
+ * 
+ * <p>Classes that wish to provide their own drag under effect for a <code>Tree</code>
+ * can extend the <code>TreeDropTargetEffect</code> class and override any applicable methods 
+ * in <code>TreeDropTargetEffect</code> to display their own drag under effect.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * <p>The feedback value is either one of the FEEDBACK constants defined in 
+ * class <code>DND</code> which is applicable to instances of this class, 
+ * or it must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> effect constants. 
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Feedback:</b></dt>
+ * <dd>FEEDBACK_SELECT, FEEDBACK_INSERT_BEFORE, FEEDBACK_INSERT_AFTER, FEEDBACK_EXPAND, FEEDBACK_SCROLL</dd>
+ * </dl>
+ * </p><p>
+ * Note: Only one of the styles FEEDBACK_SELECT, FEEDBACK_INSERT_BEFORE or
+ * FEEDBACK_INSERT_AFTER may be specified.
+ * </p>
+ * 
+ * @see DropTargetAdapter
+ * @see DropTargetEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TreeDropTargetEffect extends DropTargetEffect {
+	static final int SCROLL_HYSTERESIS = 150; // milli seconds
+	static final int EXPAND_HYSTERESIS = 1000; // milli seconds
+
+	int currentEffect = DND.FEEDBACK_NONE;
+
+	TreeItem insertItem = null;
+	boolean insertBefore = false;
+
+	TreeItem scrollItem;
+	long scrollBeginTime;
+
+	TreeItem expandItem;
+	long expandBeginTime;
+	
+	DataBrowserCallbacks callbacks = null;
+	
+	int acceptDragProc(int theControl, int itemID, int property, int theRect, int theDrag) {
+		return (currentEffect & DND.FEEDBACK_SELECT) != 0 ? 1 : 0;
+	}
+
+	static Callback AcceptDragProc;
+	static {
+		AcceptDragProc = new Callback(TreeDropTargetEffect.class, "AcceptDragProc", 5); //$NON-NLS-1$
+		int acceptDragProc = AcceptDragProc.getAddress();
+		if (acceptDragProc == 0) SWT.error(SWT.ERROR_NO_MORE_CALLBACKS);
+	}
+
+	static int AcceptDragProc(int theControl, int itemID, int property, int theRect, int theDrag) {
+		DropTarget target = FindDropTarget(theControl, theDrag);
+		if (target == null) return 0;
+		return (target.feedback & DND.FEEDBACK_SELECT) != 0 ? 1 : 0;
+	}
+	
+	static DropTarget FindDropTarget(int theControl, int theDrag) {
+		if (theControl == 0) return null;
+		Display display = Display.findDisplay(Thread.currentThread());
+		if (display == null || display.isDisposed()) return null;
+		Widget widget = display.findWidget(theControl);
+		if (widget == null) return null;
+		return (DropTarget)widget.getData(DND.DROP_TARGET_KEY); 
+	}
+
+	/**
+	 * Creates a new <code>TreeDropTargetEffect</code> to handle the drag under effect on the specified 
+	 * <code>Tree</code>.
+	 * 
+	 * @param tree the <code>Tree</code> over which the user positions the cursor to drop the data
+	 */
+	public TreeDropTargetEffect(Tree tree) {
+		super(tree);
+	}
+
+	int checkEffect(int effect) {
+		// Some effects are mutually exclusive.  Make sure that only one of the mutually exclusive effects has been specified.
+		if ((effect & DND.FEEDBACK_SELECT) != 0) effect = effect & ~DND.FEEDBACK_INSERT_AFTER & ~DND.FEEDBACK_INSERT_BEFORE;
+		if ((effect & DND.FEEDBACK_INSERT_BEFORE) != 0) effect = effect & ~DND.FEEDBACK_INSERT_AFTER;
+		return effect;
+	}
+
+	/**
+	 * This implementation of <code>dragEnter</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragEnter</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragEnter(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag enter event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 */
+	public void dragEnter(DropTargetEvent event) {
+		if (callbacks == null) {
+			Tree table = (Tree) control;
+			DataBrowserCallbacks callbacks = new DataBrowserCallbacks ();
+			OS.GetDataBrowserCallbacks (table.handle, callbacks);
+			callbacks.v1_acceptDragCallback = AcceptDragProc.getAddress();
+			OS.SetDataBrowserCallbacks(table.handle, callbacks);
+		}
+		insertItem = null;
+		expandBeginTime = 0;
+		expandItem = null;
+		scrollBeginTime = 0;
+		scrollItem = null;
+	}
+
+	/**
+	 * This implementation of <code>dragLeave</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragLeave</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragLeave(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag leave event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 */
+	public void dragLeave(DropTargetEvent event) {
+		Tree tree = (Tree) control;
+		if (insertItem != null) {
+			setInsertMark(tree, null, false);
+			insertItem = null;
+		}
+		expandBeginTime = 0;
+		expandItem = null;
+		scrollBeginTime = 0;
+		scrollItem = null;
+	}
+
+	/**
+	 * This implementation of <code>dragOver</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragOver</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragOver(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag over event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 * @see DND#FEEDBACK_SELECT
+	 * @see DND#FEEDBACK_INSERT_BEFORE
+	 * @see DND#FEEDBACK_INSERT_AFTER
+	 * @see DND#FEEDBACK_SCROLL
+	 */
+	public void dragOver(DropTargetEvent event) {
+		Tree tree = (Tree) control;
+		TreeItem item = (TreeItem)getItem(tree, event.x, event.y);
+		int effect = checkEffect(event.feedback);		
+		if ((effect & DND.FEEDBACK_EXPAND) == 0) {
+			expandBeginTime = 0;
+			expandItem = null;
+		} else {
+			if (item != null && item.equals(expandItem) && expandBeginTime != 0) {
+				if (System.currentTimeMillis() >= expandBeginTime) {
+					if (item.getItemCount() > 0 && !item.getExpanded()) {
+						Event e = new Event();
+						e.x = event.x;
+						e.y = event.y;
+						e.item = item;
+						e.time = (int) System.currentTimeMillis();
+						tree.notifyListeners(SWT.Expand, e);
+						if (item.isDisposed()) return;
+						item.setExpanded(true);
+					}
+					expandBeginTime = 0;
+					expandItem = null;
+				}
+			} else {
+				expandBeginTime = System.currentTimeMillis() + EXPAND_HYSTERESIS;
+				expandItem = item;
+			}
+		}
+		
+		if ((effect & DND.FEEDBACK_SCROLL) == 0) {
+			scrollBeginTime = 0;
+			scrollItem = null;
+		} else {
+			if (item != null && item.equals(scrollItem)  && scrollBeginTime != 0) {
+				if (System.currentTimeMillis() >= scrollBeginTime) {
+					Rectangle area = tree.getClientArea();
+					int headerHeight = tree.getHeaderHeight();
+					int itemHeight= tree.getItemHeight();
+					Point pt = new Point(event.x, event.y);
+					pt = tree.getDisplay().map(null, tree, pt);
+					TreeItem nextItem = null;
+					if (pt.y < area.y + headerHeight + 2 * itemHeight) {
+						nextItem = previousItem(tree, item);
+					}
+					if (pt.y > area.y + area.height - 2 * itemHeight) {
+						nextItem = nextItem(tree, item);
+					}
+					if (nextItem != null) tree.showItem(nextItem);
+					scrollBeginTime = 0;
+					scrollItem = null;
+				}
+			} else {
+				scrollBeginTime = System.currentTimeMillis() + SCROLL_HYSTERESIS;
+				scrollItem = item;
+			}
+		}
+		
+		if ((effect & DND.FEEDBACK_INSERT_AFTER) != 0 ||
+			(effect & DND.FEEDBACK_INSERT_BEFORE) != 0) {
+			if (insertItem != item || 
+				 ((effect & DND.FEEDBACK_INSERT_AFTER) != (currentEffect & DND.FEEDBACK_INSERT_AFTER)) ||
+				 ((effect & DND.FEEDBACK_INSERT_BEFORE) != (currentEffect & DND.FEEDBACK_INSERT_BEFORE))) { 
+				setInsertMark(tree, item, (effect & DND.FEEDBACK_INSERT_BEFORE) != 0);
+				currentEffect = effect;
+				insertItem = item;
+			}
+		} else {
+			setInsertMark(tree, null, false);
+		}
+		// save current effect for selection feedback
+		((DropTarget)event.widget).feedback = effect;
+	}
+
+	void setInsertMark(Tree tree, TreeItem item, boolean before) {
+		if (item == insertItem && before == insertBefore) return;
+		insertItem = item;
+		insertBefore = before;
+		tree.setInsertMark(item, before);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/URLTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/URLTransfer.java
new file mode 100644
index 0000000..2e9f646
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/carbon/org/eclipse/swt/dnd/URLTransfer.java
Binary files differ
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/ByteArrayTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/ByteArrayTransfer.java
new file mode 100644
index 0000000..79c81eb
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/ByteArrayTransfer.java
@@ -0,0 +1,183 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.internal.cocoa.*;
+
+ 
+/**
+ * The class <code>ByteArrayTransfer</code> provides a platform specific 
+ * mechanism for converting a java <code>byte[]</code> to a platform 
+ * specific representation of the byte array and vice versa.
+ *
+ * <p><code>ByteArrayTransfer</code> is never used directly but is sub-classed 
+ * by transfer agents that convert between data in a java format such as a
+ * <code>String</code> and a platform specific byte array.
+ * 
+ * <p>If the data you are converting <b>does not</b> map to a 
+ * <code>byte[]</code>, you should sub-class <code>Transfer</code> directly 
+ * and do your own mapping to a platform data type.</p>
+ * 
+ * <p>The following snippet shows a subclass of ByteArrayTransfer that transfers
+ * data defined by the class <code>MyType</code>.</p>
+ * 
+ * <pre><code>
+ * public class MyType {
+ *	public String fileName;
+ *	public long fileLength;
+ *	public long lastModified;
+ * }
+ * </code></pre>
+ * 
+ * <pre><code>
+ * public class MyTypeTransfer extends ByteArrayTransfer {
+ *	
+ *	private static final String MYTYPENAME = "my_type_name";
+ *	private static final int MYTYPEID = registerType(MYTYPENAME);
+ *	private static MyTypeTransfer _instance = new MyTypeTransfer();
+ * 
+ * private MyTypeTransfer() {}
+ * 
+ * public static MyTypeTransfer getInstance () {
+ * 	return _instance;
+ * }
+ * public void javaToNative (Object object, TransferData transferData) {
+ * 	if (object == null || !(object instanceof MyType[])) return;
+ * 	
+ * 	if (isSupportedType(transferData)) {
+ * 		MyType[] myTypes = (MyType[]) object;	
+ * 		try {
+ * 			// write data to a byte array and then ask super to convert to pMedium
+ * 			ByteArrayOutputStream out = new ByteArrayOutputStream();
+ * 			DataOutputStream writeOut = new DataOutputStream(out);
+ * 			for (int i = 0, length = myTypes.length; i &lt; length;  i++){
+ * 				byte[] buffer = myTypes[i].fileName.getBytes();
+ * 				writeOut.writeInt(buffer.length);
+ * 				writeOut.write(buffer);
+ * 				writeOut.writeLong(myTypes[i].fileLength);
+ * 				writeOut.writeLong(myTypes[i].lastModified);
+ * 			}
+ * 			byte[] buffer = out.toByteArray();
+ * 			writeOut.close();
+ * 
+ * 			super.javaToNative(buffer, transferData);
+ * 			
+ * 		} catch (IOException e) {
+ * 		}
+ * 	}
+ * }
+ * public Object nativeToJava(TransferData transferData){	
+ * 
+ * 	if (isSupportedType(transferData)) {
+ * 		
+ * 		byte[] buffer = (byte[])super.nativeToJava(transferData);
+ * 		if (buffer == null) return null;
+ * 		
+ * 		MyType[] myData = new MyType[0];
+ * 		try {
+ * 			ByteArrayInputStream in = new ByteArrayInputStream(buffer);
+ * 			DataInputStream readIn = new DataInputStream(in);
+ * 			while(readIn.available() > 20) {
+ * 				MyType datum = new MyType();
+ * 				int size = readIn.readInt();
+ * 				byte[] name = new byte[size];
+ * 				readIn.read(name);
+ * 				datum.fileName = new String(name);
+ * 				datum.fileLength = readIn.readLong();
+ * 				datum.lastModified = readIn.readLong();
+ * 				MyType[] newMyData = new MyType[myData.length + 1];
+ * 				System.arraycopy(myData, 0, newMyData, 0, myData.length);
+ * 				newMyData[myData.length] = datum;
+ * 				myData = newMyData;
+ * 			}
+ * 			readIn.close();
+ * 		} catch (IOException ex) {
+ * 			return null;
+ * 		}
+ * 		return myData;
+ * 	}
+ * 
+ * 	return null;
+ * }
+ * protected String[] getTypeNames(){
+ * 	return new String[]{MYTYPENAME};
+ * }
+ * protected int[] getTypeIds(){
+ * 	return new int[] {MYTYPEID};
+ * }
+ * }
+ * </code></pre>
+ *
+ * @see Transfer
+ */
+public abstract class ByteArrayTransfer extends Transfer {
+
+public TransferData[] getSupportedTypes() {
+	int[] types = getTypeIds();
+	TransferData[] data = new TransferData[types.length];
+	for (int i = 0; i < types.length; i++) {
+		data[i] = new TransferData();
+		data[i].type = types[i];
+	}
+	return data;
+}
+
+public boolean isSupportedType(TransferData transferData){
+	if (transferData == null) return false;
+	int[] types = getTypeIds();
+	for (int i = 0; i < types.length; i++) {
+		if (transferData.type == types[i]) return true;
+	}
+	return false;
+}
+
+/**
+ * This implementation of <code>javaToNative</code> converts a java 
+ * <code>byte[]</code> to a platform specific representation.
+ * 
+ * @param object a java <code>byte[]</code> containing the data to be converted
+ * @param transferData an empty <code>TransferData</code> object that will
+ *  	be filled in on return with the platform specific format of the data
+ * 
+ * @see Transfer#nativeToJava
+ */
+protected void javaToNative (Object object, TransferData transferData) {
+	if (!checkByteArray(object) && !isSupportedType(transferData)) {
+		DND.error(DND.ERROR_INVALID_DATA);
+	}
+	byte[] orig = (byte[])object;
+	NSData data = NSData.dataWithBytes(orig, orig.length);
+	transferData.data = data;
+}
+
+/**
+ * This implementation of <code>nativeToJava</code> converts a platform specific 
+ * representation of a byte array to a java <code>byte[]</code>.   
+ * 
+ * @param transferData the platform specific representation of the data to be converted
+ * @return a java <code>byte[]</code> containing the converted data if the conversion was
+ * 		successful; otherwise null
+ * 
+ * @see Transfer#javaToNative
+ */
+protected Object nativeToJava(TransferData transferData) {
+	if (!isSupportedType(transferData) || transferData.data == null) return null;
+	if (transferData.data == null) return null;
+	NSData data = (NSData) transferData.data;
+	if (data.length() == 0) return null;
+	byte[] bytes = new byte[(int)/*64*/data.length()];
+	data.getBytes(bytes);
+	return bytes;
+}
+boolean checkByteArray(Object object) {
+	return (object != null && object instanceof byte[] && ((byte[])object).length > 0);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/Clipboard.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/Clipboard.java
new file mode 100644
index 0000000..a9f6255
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/Clipboard.java
@@ -0,0 +1,557 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * The <code>Clipboard</code> provides a mechanism for transferring data from one
+ * application to another or within an application.
+ * 
+ * <p>IMPORTANT: This class is <em>not</em> intended to be subclassed.</p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#clipboard">Clipboard snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ClipboardExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Clipboard {
+
+	Display display;
+
+/**
+ * Constructs a new instance of this class.  Creating an instance of a Clipboard
+ * may cause system resources to be allocated depending on the platform.  It is therefore
+ * mandatory that the Clipboard instance be disposed when no longer required.
+ *
+ * @param display the display on which to allocate the clipboard
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see Clipboard#dispose
+ * @see Clipboard#checkSubclass
+ */
+public Clipboard(Display display) {	
+	checkSubclass ();
+	if (display == null) {
+		display = Display.getCurrent();
+		if (display == null) {
+			display = Display.getDefault();
+		}
+	}
+	if (display.getThread() != Thread.currentThread()) {
+		DND.error(SWT.ERROR_THREAD_INVALID_ACCESS);
+	}
+	this.display = display;
+}
+
+/**
+ * Checks that this class can be subclassed.
+ * <p>
+ * The SWT class library is intended to be subclassed 
+ * only at specific, controlled points. This method enforces this
+ * rule unless it is overridden.
+ * </p><p>
+ * <em>IMPORTANT:</em> By providing an implementation of this
+ * method that allows a subclass of a class which does not 
+ * normally allow subclassing to be created, the implementer
+ * agrees to be fully responsible for the fact that any such
+ * subclass will likely fail between SWT releases and will be
+ * strongly platform specific. No support is provided for
+ * user-written classes which are implemented in this fashion.
+ * </p><p>
+ * The ability to subclass outside of the allowed SWT classes
+ * is intended purely to enable those not on the SWT development
+ * team to implement patches in order to get around specific
+ * limitations in advance of when those limitations can be
+ * addressed by the team. Subclassing should not be attempted
+ * without an intimate and detailed understanding of the hierarchy.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ */
+protected void checkSubclass () {
+	String name = getClass().getName ();
+	String validName = Clipboard.class.getName();
+	if (!validName.equals(name)) {
+		DND.error (SWT.ERROR_INVALID_SUBCLASS);
+	}
+}
+/**
+ * Throws an <code>SWTException</code> if the receiver can not
+ * be accessed by the caller. This may include both checks on
+ * the state of the receiver and more generally on the entire
+ * execution context. This method <em>should</em> be called by
+ * widget implementors to enforce the standard SWT invariants.
+ * <p>
+ * Currently, it is an error to invoke any method (other than
+ * <code>isDisposed()</code>) on a widget that has had its 
+ * <code>dispose()</code> method called. It is also an error
+ * to call widget methods from any thread that is different
+ * from the thread that created the widget.
+ * </p><p>
+ * In future releases of SWT, there may be more or fewer error
+ * checks and exceptions may be thrown for different reasons.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+protected void checkWidget () {
+	Display display = this.display;
+	if (display == null) DND.error (SWT.ERROR_WIDGET_DISPOSED);
+	if (display.getThread() != Thread.currentThread ()) DND.error (SWT.ERROR_THREAD_INVALID_ACCESS);
+	if (display.isDisposed()) DND.error(SWT.ERROR_WIDGET_DISPOSED);
+}
+
+/**
+ * If this clipboard is currently the owner of the data on the system clipboard,
+ * clear the contents.  If this clipboard is not the owner, then nothing is done.
+ * Note that there are clipboard assistant applications that take ownership of 
+ * data or make copies of data when it is placed on the clipboard.  In these 
+ * cases, it may not be possible to clear the clipboard.
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void clearContents() {
+	clearContents(DND.CLIPBOARD);
+}
+
+/**
+ * If this clipboard is currently the owner of the data on the specified 
+ * clipboard, clear the contents.  If this clipboard is not the owner, then 
+ * nothing is done.
+ * 
+ * <p>Note that there are clipboard assistant applications that take ownership
+ * of data or make copies of data when it is placed on the clipboard.  In these 
+ * cases, it may not be possible to clear the clipboard.</p>
+ * 
+ * <p>The clipboards value is either one of the clipboard constants defined in
+ * class <code>DND</code>, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> clipboard constants.</p>
+ * 
+ * @param clipboards to be cleared
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see DND#CLIPBOARD
+ * @see DND#SELECTION_CLIPBOARD
+ * 
+ * @since 3.1
+ */
+public void clearContents(int clipboards) {
+	checkWidget();
+	if ((clipboards & DND.CLIPBOARD) == 0) return;
+	NSPasteboard pasteboard = NSPasteboard.generalPasteboard();
+	pasteboard.declareTypes(NSMutableArray.arrayWithCapacity(0), null);
+}
+
+/**
+ * Disposes of the operating system resources associated with the clipboard. 
+ * The data will still be available on the system clipboard after the dispose 
+ * method is called.  
+ * 
+ * <p>NOTE: On some platforms the data will not be available once the application
+ * has exited or the display has been disposed.</p>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ * </ul>
+ */
+public void dispose () {
+	if (isDisposed()) return;
+	if (display.getThread() != Thread.currentThread()) DND.error(SWT.ERROR_THREAD_INVALID_ACCESS);
+	display = null;
+}
+
+/**
+ * Retrieve the data of the specified type currently available on the system 
+ * clipboard.  Refer to the specific subclass of <code>Transfer</code> to 
+ * determine the type of object returned.
+ * 
+ * <p>The following snippet shows text and RTF text being retrieved from the 
+ * clipboard:</p>
+ * 
+ *    <code><pre>
+ *    Clipboard clipboard = new Clipboard(display);
+ *    TextTransfer textTransfer = TextTransfer.getInstance();
+ *    String textData = (String)clipboard.getContents(textTransfer);
+ *    if (textData != null) System.out.println("Text is "+textData);
+ *    RTFTransfer rtfTransfer = RTFTransfer.getInstance();
+ *    String rtfData = (String)clipboard.getContents(rtfTransfer);
+ *    if (rtfData != null) System.out.println("RTF Text is "+rtfData);
+ *    clipboard.dispose();
+ *    </code></pre>
+ * 
+ * @param transfer the transfer agent for the type of data being requested
+ * @return the data obtained from the clipboard or null if no data of this type is available
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if transfer is null</li>
+ * </ul>
+ * 
+ * @see Transfer
+ */
+public Object getContents(Transfer transfer) {
+	return getContents(transfer, DND.CLIPBOARD);
+}
+
+/**
+ * Retrieve the data of the specified type currently available on the specified 
+ * clipboard.  Refer to the specific subclass of <code>Transfer</code> to 
+ * determine the type of object returned.
+ * 
+ * <p>The following snippet shows text and RTF text being retrieved from the 
+ * clipboard:</p>
+ * 
+ *    <code><pre>
+ *    Clipboard clipboard = new Clipboard(display);
+ *    TextTransfer textTransfer = TextTransfer.getInstance();
+ *    String textData = (String)clipboard.getContents(textTransfer);
+ *    if (textData != null) System.out.println("Text is "+textData);
+ *    RTFTransfer rtfTransfer = RTFTransfer.getInstance();
+ *    String rtfData = (String)clipboard.getContents(rtfTransfer, DND.CLIPBOARD);
+ *    if (rtfData != null) System.out.println("RTF Text is "+rtfData);
+ *    clipboard.dispose();
+ *    </code></pre>
+ * 
+ * <p>The clipboards value is either one of the clipboard constants defined in
+ * class <code>DND</code>, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> clipboard constants.</p>
+ * 
+ * @param transfer the transfer agent for the type of data being requested
+ * @param clipboards on which to look for data
+ *  
+ * @return the data obtained from the clipboard or null if no data of this type is available
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if transfer is null</li>
+ * </ul>
+ * 
+ * @see Transfer
+ * @see DND#CLIPBOARD
+ * @see DND#SELECTION_CLIPBOARD
+ * 
+ * @since 3.1
+ */
+public Object getContents(Transfer transfer, int clipboards) {
+	checkWidget();
+	if (transfer == null) DND.error(SWT.ERROR_NULL_ARGUMENT);
+	if ((clipboards & DND.CLIPBOARD) == 0) return null;
+	NSPasteboard pasteboard = NSPasteboard.generalPasteboard();
+	if (pasteboard == null) return null;
+	String[] typeNames = transfer.getTypeNames();
+	NSMutableArray types = NSMutableArray.arrayWithCapacity(typeNames.length);
+	for (int i = 0; i < typeNames.length; i++) {
+		types.addObject(NSString.stringWith(typeNames[i]));
+	}
+	NSString type = pasteboard.availableTypeFromArray(types);
+	if (type != null) {
+		TransferData tdata = new TransferData();
+		tdata.type = Transfer.registerType(type.getString());
+		if (type.isEqual(OS.NSStringPboardType) || 
+				type.isEqual(OS.NSRTFPboardType) ||
+				type.isEqual(OS.NSHTMLPboardType)) {
+			tdata.data = pasteboard.stringForType(type);
+		} else if (type.isEqual(OS.NSFilenamesPboardType)) {
+			tdata.data = new NSArray(pasteboard.propertyListForType(type).id);
+		} else if (type.isEqual(OS.NSURLPboardType)) {
+			tdata.data = NSURL.URLFromPasteboard(pasteboard);
+		} else {
+			tdata.data = pasteboard.dataForType(type);
+		}
+		if (tdata.data != null) {
+			return transfer.nativeToJava(tdata);
+		}
+	}
+	return null;
+}
+
+/**
+ * Returns <code>true</code> if the clipboard has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the clipboard.
+ * When a clipboard has been disposed, it is an error to
+ * invoke any other method using the clipboard.
+ * </p>
+ *
+ * @return <code>true</code> when the widget is disposed and <code>false</code> otherwise
+ * 
+ * @since 3.0
+ */
+public boolean isDisposed () {
+	return (display == null);
+}
+
+/**
+ * Place data of the specified type on the system clipboard.  More than one type
+ * of data can be placed on the system clipboard at the same time.  Setting the
+ * data clears any previous data from the system clipboard, regardless of type.
+ * 
+ * <p>NOTE: On some platforms, the data is immediately copied to the system
+ * clipboard but on other platforms it is provided upon request.  As a result,
+ * if the application modifies the data object it has set on the clipboard, that 
+ * modification may or may not be available when the data is subsequently 
+ * requested.</p>
+ *
+ * <p>The following snippet shows text and RTF text being set on the copy/paste
+ * clipboard:
+ * </p>
+ * 
+ * <code><pre>
+ * 	Clipboard clipboard = new Clipboard(display);
+ *	String textData = "Hello World";
+ *	String rtfData = "{\\rtf1\\b\\i Hello World}";
+ *	TextTransfer textTransfer = TextTransfer.getInstance();
+ *	RTFTransfer rtfTransfer = RTFTransfer.getInstance();
+ *	Transfer[] transfers = new Transfer[]{textTransfer, rtfTransfer};
+ *	Object[] data = new Object[]{textData, rtfData};
+ *	clipboard.setContents(data, transfers);
+ *	clipboard.dispose();
+ * </code></pre>
+ *
+ * @param data the data to be set in the clipboard
+ * @param dataTypes the transfer agents that will convert the data to its 
+ * platform specific format; each entry in the data array must have a 
+ * corresponding dataType
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if data is null or datatypes is null 
+ *          or the length of data is not the same as the length of dataTypes</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *  @exception SWTError <ul>
+ *    <li>ERROR_CANNOT_SET_CLIPBOARD - if the clipboard is locked or otherwise unavailable</li>
+ * </ul>
+ * 
+ * <p>NOTE: ERROR_CANNOT_SET_CLIPBOARD should be an SWTException, since it is a
+ * recoverable error, but can not be changed due to backward compatibility.</p>
+ */
+public void setContents(Object[] data, Transfer[] dataTypes) {
+	setContents(data, dataTypes, DND.CLIPBOARD);
+}
+
+/**
+ * Place data of the specified type on the specified clipboard.  More than one 
+ * type of data can be placed on the specified clipboard at the same time.
+ * Setting the data clears any previous data from the specified
+ * clipboard, regardless of type.
+ * 
+ * <p>NOTE: On some platforms, the data is immediately copied to the specified
+ * clipboard but on other platforms it is provided upon request.  As a result, 
+ * if the application modifies the data object it has set on the clipboard, that 
+ * modification may or may not be available when the data is subsequently 
+ * requested.</p>
+ *
+ * <p>The clipboards value is either one of the clipboard constants defined in
+ * class <code>DND</code>, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> clipboard constants.</p>
+ * 
+ * <p>The following snippet shows text and RTF text being set on the copy/paste
+ * clipboard:
+ * </p>
+ * 
+ * <code><pre>
+ * 	Clipboard clipboard = new Clipboard(display);
+ *	String textData = "Hello World";
+ *	String rtfData = "{\\rtf1\\b\\i Hello World}";
+ *	TextTransfer textTransfer = TextTransfer.getInstance();
+ *	RTFTransfer rtfTransfer = RTFTransfer.getInstance();
+ *	Transfer[] transfers = new Transfer[]{textTransfer, rtfTransfer};
+ *	Object[] data = new Object[]{textData, rtfData};
+ *	clipboard.setContents(data, transfers, DND.CLIPBOARD);
+ *	clipboard.dispose();
+ * </code></pre>
+ *
+ * @param data the data to be set in the clipboard
+ * @param dataTypes the transfer agents that will convert the data to its 
+ * platform specific format; each entry in the data array must have a 
+ * corresponding dataType
+ * @param clipboards on which to set the data
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if data is null or datatypes is null 
+ *          or the length of data is not the same as the length of dataTypes</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *  @exception SWTError <ul>
+ *    <li>ERROR_CANNOT_SET_CLIPBOARD - if the clipboard is locked or otherwise unavailable</li>
+ * </ul>
+ * 
+ * <p>NOTE: ERROR_CANNOT_SET_CLIPBOARD should be an SWTException, since it is a
+ * recoverable error, but can not be changed due to backward compatibility.</p>
+ * 
+ * @see DND#CLIPBOARD
+ * @see DND#SELECTION_CLIPBOARD
+ * 
+ * @since 3.1
+ */
+public void setContents(Object[] data, Transfer[] dataTypes, int clipboards) {
+	checkWidget();
+	if (data == null || dataTypes == null || data.length != dataTypes.length || data.length == 0) {
+		DND.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	for (int i = 0; i < data.length; i++) {
+		if (data[i] == null || dataTypes[i] == null || !dataTypes[i].validate(data[i])) {
+			DND.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+	}
+	if ((clipboards & DND.CLIPBOARD) == 0) return;
+	NSPasteboard pasteboard = NSPasteboard.generalPasteboard();
+	if (pasteboard == null) {
+		DND.error(DND.ERROR_CANNOT_SET_CLIPBOARD);
+	}
+	pasteboard.declareTypes(NSMutableArray.arrayWithCapacity(0), null);
+	for (int i=0; i<dataTypes.length; i++) {
+		String[] typeNames = dataTypes[i].getTypeNames();
+		for (int j=0; j<typeNames.length; j++) {
+			TransferData transferData = new TransferData();
+			transferData.type = Transfer.registerType(typeNames[j]);
+			dataTypes[i].javaToNative(data[i], transferData);
+			NSObject tdata = transferData.data;
+			NSString dataType = NSString.stringWith(typeNames[j]);
+			pasteboard.addTypes(NSArray.arrayWithObject(dataType), null);
+			if (dataType.isEqual(OS.NSStringPboardType) || 
+					dataType.isEqual(OS.NSRTFPboardType) ||
+					dataType.isEqual(OS.NSHTMLPboardType)) {
+				pasteboard.setString((NSString) tdata, dataType);
+			} else if (dataType.isEqual(OS.NSURLPboardType)) {
+				NSURL url = (NSURL) tdata;
+				url.writeToPasteboard(pasteboard);
+			} else if (dataType.isEqual(OS.NSFilenamesPboardType)) {
+				pasteboard.setPropertyList((NSArray) tdata, dataType);
+			} else {
+				pasteboard.setData((NSData) tdata, dataType);
+			}
+		}
+	}
+}
+
+/**
+ * Returns an array of the data types currently available on the system 
+ * clipboard. Use with Transfer.isSupportedType.
+ *
+ * @return array of data types currently available on the system clipboard
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Transfer#isSupportedType
+ * 
+ * @since 3.0
+ */
+public TransferData[] getAvailableTypes() {
+	return getAvailableTypes(DND.CLIPBOARD);
+}
+
+/**
+ * Returns an array of the data types currently available on the specified 
+ * clipboard. Use with Transfer.isSupportedType.
+ * 
+ * <p>The clipboards value is either one of the clipboard constants defined in
+ * class <code>DND</code>, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> clipboard constants.</p>
+ * 
+ * @param clipboards from which to get the data types
+ * @return array of data types currently available on the specified clipboard
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Transfer#isSupportedType
+ * @see DND#CLIPBOARD
+ * @see DND#SELECTION_CLIPBOARD
+ * 
+ * @since 3.1
+ */
+public TransferData[] getAvailableTypes(int clipboards) {
+	checkWidget();
+	if ((clipboards & DND.CLIPBOARD) == 0) return new TransferData[0];
+	NSPasteboard pasteboard = NSPasteboard.generalPasteboard();
+	NSArray types = pasteboard.types();
+	int count = (int)/*64*/types.count();
+	TransferData[] result = new TransferData[count];
+	for (int i = 0; i < count; i++) {
+		result[i] = new TransferData();
+		result[i].type = Transfer.registerType(new NSString(types.objectAtIndex(i)).getString());
+	}
+	return result;
+}
+
+/**
+ * Returns a platform specific list of the data types currently available on the 
+ * system clipboard.
+ * 
+ * <p>Note: <code>getAvailableTypeNames</code> is a utility for writing a Transfer 
+ * sub-class.  It should NOT be used within an application because it provides 
+ * platform specific information.</p>
+ * 
+ * @return a platform specific list of the data types currently available on the 
+ * system clipboard
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String[] getAvailableTypeNames() {
+	checkWidget();
+	NSPasteboard pasteboard = NSPasteboard.generalPasteboard();
+	NSArray types = pasteboard.types();
+	int count = (int)/*64*/types.count();
+	String[] result = new String[count];
+	for (int i = 0; i < count; i++) {
+		result[i] = new NSString(types.objectAtIndex(i)).getString();
+	}
+	return result;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/DragSource.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/DragSource.java
new file mode 100644
index 0000000..efecaca
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/DragSource.java
@@ -0,0 +1,848 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.cocoa.*;
+import org.eclipse.swt.widgets.*;
+/**
+ *
+ * <code>DragSource</code> defines the source object for a drag and drop transfer.
+ *
+ * <p>IMPORTANT: This class is <em>not</em> intended to be subclassed.</p>
+ *  
+ * <p>A drag source is the object which originates a drag and drop operation. For the specified widget, 
+ * it defines the type of data that is available for dragging and the set of operations that can 
+ * be performed on that data.  The operations can be any bit-wise combination of DND.MOVE, DND.COPY or 
+ * DND.LINK.  The type of data that can be transferred is specified by subclasses of Transfer such as 
+ * TextTransfer or FileTransfer.  The type of data transferred can be a predefined system type or it 
+ * can be a type defined by the application.  For instructions on how to define your own transfer type,
+ * refer to <code>ByteArrayTransfer</code>.</p>
+ *
+ * <p>You may have several DragSources in an application but you can only have one DragSource 
+ * per Control.  Data dragged from this DragSource can be dropped on a site within this application 
+ * or it can be dropped on another application such as an external Text editor.</p>
+ * 
+ * <p>The application supplies the content of the data being transferred by implementing the
+ * <code>DragSourceListener</code> and associating it with the DragSource via DragSource#addDragListener.</p>
+ * 
+ * <p>When a successful move operation occurs, the application is required to take the appropriate 
+ * action to remove the data from its display and remove any associated operating system resources or
+ * internal references.  Typically in a move operation, the drop target makes a copy of the data 
+ * and the drag source deletes the original.  However, sometimes copying the data can take a long 
+ * time (such as copying a large file).  Therefore, on some platforms, the drop target may actually 
+ * move the data in the operating system rather than make a copy.  This is usually only done in 
+ * file transfers.  In this case, the drag source is informed in the DragEnd event that a
+ * DROP_TARGET_MOVE was performed.  It is the responsibility of the drag source at this point to clean 
+ * up its displayed information.  No action needs to be taken on the operating system resources.</p>
+ *
+ * <p> The following example shows a Label widget that allows text to be dragged from it.</p>
+ * 
+ * <code><pre>
+ *	// Enable a label as a Drag Source
+ *	Label label = new Label(shell, SWT.NONE);
+ *	// This example will allow text to be dragged
+ *	Transfer[] types = new Transfer[] {TextTransfer.getInstance()};
+ *	// This example will allow the text to be copied or moved to the drop target
+ *	int operations = DND.DROP_MOVE | DND.DROP_COPY;
+ *	
+ *	DragSource source = new DragSource(label, operations);
+ *	source.setTransfer(types);
+ *	source.addDragListener(new DragSourceListener() {
+ *		public void dragStart(DragSourceEvent e) {
+ *			// Only start the drag if there is actually text in the
+ *			// label - this text will be what is dropped on the target.
+ *			if (label.getText().length() == 0) {
+ *				event.doit = false;
+ *			}
+ *		};
+ *		public void dragSetData(DragSourceEvent event) {
+ *			// A drop has been performed, so provide the data of the 
+ *			// requested type.
+ *			// (Checking the type of the requested data is only 
+ *			// necessary if the drag source supports more than 
+ *			// one data type but is shown here as an example).
+ *			if (TextTransfer.getInstance().isSupportedType(event.dataType)){
+ *				event.data = label.getText();
+ *			}
+ *		}
+ *		public void dragFinished(DragSourceEvent event) {
+ *			// A Move operation has been performed so remove the data
+ *			// from the source
+ *			if (event.detail == DND.DROP_MOVE)
+ *				label.setText("");
+ *		}
+ *	});
+ * </pre></code>
+ *
+ *
+ * <dl>
+ *	<dt><b>Styles</b></dt> <dd>DND.DROP_NONE, DND.DROP_COPY, DND.DROP_MOVE, DND.DROP_LINK</dd>
+ *	<dt><b>Events</b></dt> <dd>DND.DragStart, DND.DragSetData, DND.DragEnd</dd>
+ * </dl>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#dnd">Drag and Drop snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: DNDExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class DragSource extends Widget {
+
+	// TODO: These should either move out of Display or be accessible to this class.
+	static byte[] types = {'*','\0'};
+	static int size = C.PTR_SIZEOF, align = C.PTR_SIZEOF == 4 ? 2 : 3;
+
+	static Callback dragSource2Args, dragSource3Args, dragSource4Args, dragSource5Args, dragSource6Args;
+	static final byte[] SWT_OBJECT = {'S', 'W', 'T', '_', 'O', 'B', 'J', 'E', 'C', 'T', '\0'};
+	static int /*long*/ proc2 = 0, proc3 = 0, proc4 = 0, proc5 = 0, proc6 = 0;
+	
+	static {
+		String className = "SWTDragSourceDelegate";
+
+		Class clazz = DragSource.class;
+
+		dragSource2Args = new Callback(clazz, "dragSourceProc", 2);
+		proc2 = dragSource2Args.getAddress();
+		if (proc2 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+
+		dragSource3Args = new Callback(clazz, "dragSourceProc", 3);
+		proc3 = dragSource3Args.getAddress();
+		if (proc3 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+
+		dragSource4Args = new Callback(clazz, "dragSourceProc", 4);
+		proc4 = dragSource4Args.getAddress();
+		if (proc4 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+
+		dragSource5Args = new Callback(clazz, "dragSourceProc", 5);
+		proc5 = dragSource5Args.getAddress();
+		if (proc5 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+
+		dragSource6Args = new Callback(clazz, "dragSourceProc", 6);
+		proc6 = dragSource6Args.getAddress();
+		if (proc6 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+
+		int /*long*/ cls = OS.objc_allocateClassPair(OS.class_NSObject, className, 0);
+		OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+
+		int /*long*/ draggedImage_endedAt_operationProc = OS.CALLBACK_draggedImage_endedAt_operation_(proc5);
+
+		// Add the NSDraggingSource callbacks
+		OS.class_addMethod(cls, OS.sel_draggingSourceOperationMaskForLocal_, proc3, "@:I");
+		OS.class_addMethod(cls, OS.sel_draggedImage_beganAt_, proc4, "@:@{NSPoint=ff}");
+		OS.class_addMethod(cls, OS.sel_draggedImage_endedAt_operation_, draggedImage_endedAt_operationProc, "@:@{NSPoint=ff}I");
+		OS.class_addMethod(cls, OS.sel_ignoreModifierKeysWhileDragging, proc3, "@:");
+
+		// Add the NSPasteboard delegate callback
+		OS.class_addMethod(cls, OS.sel_pasteboard_provideDataForType_, proc4, "@:@@");
+
+		OS.objc_registerClassPair(cls);
+	}	
+
+	// info for registering as a drag source
+	Control control;
+	Listener controlListener;
+	Transfer[] transferAgents = new Transfer[0];
+	DragSourceEffect dragEffect;
+	Image dragImageFromListener;
+	private int dragOperations;
+	SWTDragSourceDelegate dragSourceDelegate;
+	
+	static final String DEFAULT_DRAG_SOURCE_EFFECT = "DEFAULT_DRAG_SOURCE_EFFECT"; //$NON-NLS-1$
+
+	private int /*long*/ delegateJniRef;
+	private Point dragOffset;
+	
+/**
+ * Creates a new <code>DragSource</code> to handle dragging from the specified <code>Control</code>.
+ * Creating an instance of a DragSource may cause system resources to be allocated depending on the platform.  
+ * It is therefore mandatory that the DragSource instance be disposed when no longer required.
+ *
+ * @param control the <code>Control</code> that the user clicks on to initiate the drag
+ * @param style the bitwise OR'ing of allowed operations; this may be a combination of any of 
+ *					DND.DROP_NONE, DND.DROP_COPY, DND.DROP_MOVE, DND.DROP_LINK
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_CANNOT_INIT_DRAG - unable to initiate drag source; this will occur if more than one
+ *        drag source is created for a control or if the operating system will not allow the creation
+ *        of the drag source</li>
+ * </ul>
+ * 
+ * <p>NOTE: ERROR_CANNOT_INIT_DRAG should be an SWTException, since it is a
+ * recoverable error, but can not be changed due to backward compatibility.</p>
+ * 
+ * @see Widget#dispose
+ * @see DragSource#checkSubclass
+ * @see DND#DROP_NONE
+ * @see DND#DROP_COPY
+ * @see DND#DROP_MOVE
+ * @see DND#DROP_LINK
+ */
+public DragSource(Control control, int style) {
+	super (control, checkStyle(style));
+	this.control = control;
+	if (control.getData(DND.DRAG_SOURCE_KEY) != null) {
+		DND.error(DND.ERROR_CANNOT_INIT_DRAG);
+	}
+	control.setData(DND.DRAG_SOURCE_KEY, this);
+	
+	controlListener = new Listener () {
+		public void handleEvent (Event event) {
+			if (event.type == SWT.Dispose) {
+				if (!DragSource.this.isDisposed()) {
+					DragSource.this.dispose();
+				}
+			}
+			if (event.type == SWT.DragDetect) {
+				if (!DragSource.this.isDisposed()) {
+					if (event.widget instanceof Table || event.widget instanceof Tree) {
+						DragSource.this.dragOutlineViewStart(event);
+					} else {
+						DragSource.this.drag(event);
+					}
+				}
+			}
+		}
+	};
+	control.addListener (SWT.Dispose, controlListener);
+	control.addListener (SWT.DragDetect, controlListener);
+	
+	this.addListener(SWT.Dispose, new Listener() {
+		public void handleEvent(Event e) {
+			onDispose();
+		}
+	});
+	
+	Object effect = control.getData(DEFAULT_DRAG_SOURCE_EFFECT);
+	if (effect instanceof DragSourceEffect) {
+		dragEffect = (DragSourceEffect) effect;
+	} else if (control instanceof Tree) {
+		dragEffect = new TreeDragSourceEffect((Tree) control);
+	} else if (control instanceof Table) {
+		dragEffect = new TableDragSourceEffect((Table) control);
+	}
+
+	delegateJniRef = OS.NewGlobalRef(this);
+	if (delegateJniRef == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+
+	// The dragSourceDelegate implements the pasteboard callback to provide the dragged data, so we always need
+	// to create it. NSDraggingSource methods are ignored in the table and tree case. 
+	dragSourceDelegate = (SWTDragSourceDelegate)new SWTDragSourceDelegate().alloc().init();
+	OS.object_setInstanceVariable(dragSourceDelegate.id, SWT_OBJECT, delegateJniRef);
+
+	// Tables and trees already implement dragging, so we need to override their drag methods instead of creating a dragging source.
+	if (control instanceof Tree || control instanceof Table) {
+		int /*long*/ cls = OS.object_getClass(control.view.id);
+
+		if (cls == 0) {
+			DND.error(DND.ERROR_CANNOT_INIT_DRAG);
+		}
+
+		// If we already added it, no need to do it again.
+		int /*long*/ procPtr = OS.class_getMethodImplementation(cls, OS.sel_draggingSourceOperationMaskForLocal_);
+		if (procPtr == proc3) return;
+
+		int /*long*/ draggedImage_endedAt_operationProc = OS.CALLBACK_draggedImage_endedAt_operation_(proc5);
+
+		// Add the NSDraggingSource overrides.
+		OS.class_addMethod(cls, OS.sel_draggingSourceOperationMaskForLocal_, proc3, "@:I");
+		OS.class_addMethod(cls, OS.sel_draggedImage_beganAt_, proc4, "@:@{NSPoint=ff}");
+		OS.class_addMethod(cls, OS.sel_draggedImage_endedAt_operation_, draggedImage_endedAt_operationProc, "@:@{NSPoint=ff}I");
+		OS.class_addMethod(cls, OS.sel_ignoreModifierKeysWhileDragging, proc3, "@:");
+		
+		// Override to return the drag effect's image.
+		OS.class_addMethod(cls, OS.sel_dragImageForRowsWithIndexes_tableColumns_event_offset_, proc6, "@:@@@^NSPoint");
+	} 
+
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when a drag and drop operation is in progress, by sending
+ * it one of the messages defined in the <code>DragSourceListener</code>
+ * interface.
+ * 
+ * <p><ul>
+ * <li><code>dragStart</code> is called when the user has begun the actions required to drag the widget. 
+ * This event gives the application the chance to decide if a drag should be started.
+ * <li><code>dragSetData</code> is called when the data is required from the drag source.
+ * <li><code>dragFinished</code> is called when the drop has successfully completed (mouse up 
+ * over a valid target) or has been terminated (such as hitting the ESC key). Perform cleanup 
+ * such as removing data from the source side on a successful move operation.
+ * </ul></p>
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see DragSourceListener
+ * @see #getDragListeners
+ * @see #removeDragListener
+ * @see DragSourceEvent
+ */
+public void addDragListener(DragSourceListener listener) {
+	if (listener == null) DND.error (SWT.ERROR_NULL_ARGUMENT);
+	DNDListener typedListener = new DNDListener (listener);
+	typedListener.dndWidget = this;
+	addListener (DND.DragStart, typedListener);
+	addListener (DND.DragSetData, typedListener);
+	addListener (DND.DragEnd, typedListener);
+}
+
+void callSuper(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, NSPoint arg1, int /*long*/ arg2) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	OS.objc_msgSendSuper(super_struct, sel, arg0, arg1, arg2);
+}
+
+void callSuper(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	OS.objc_msgSendSuper(super_struct, sel, arg0, arg1);
+}
+
+int /*long*/ callSuperObject(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	return OS.objc_msgSendSuper(super_struct, sel, arg0, arg1, arg2, arg3);
+}
+
+protected void checkSubclass () {
+	String name = getClass().getName ();
+	String validName = DragSource.class.getName();
+	if (!validName.equals(name)) {
+		DND.error (SWT.ERROR_INVALID_SUBCLASS);
+	}
+}
+
+static int checkStyle (int style) {
+	if (style == SWT.NONE) return DND.DROP_MOVE;
+	return style;
+}
+
+void drag(Event dragDetectEvent) {
+	
+	DNDEvent event = startDrag(dragDetectEvent);
+	if (event == null) return;
+	
+	// Start the drag here from the Control's view.
+	NSEvent currEvent = NSApplication.sharedApplication().currentEvent();
+	NSPoint pt = currEvent.locationInWindow();
+	NSPoint viewPt = control.view.convertPoint_fromView_(pt, null);
+	
+	// Get the image for the drag. The drag should happen from the middle of the image.
+	NSImage dragImage = null;
+	Image defaultDragImage = null;
+	try {	
+		Image image = event.image;
+		
+		// If no image was provided, just create a trivial image. dragImage requires a non-null image.
+		if (image == null) {
+			int width = 20, height = 20;
+			Image newDragImage = new Image(Display.getCurrent(), width, height);
+			GC imageGC = new GC(newDragImage);
+			Color grayColor = new Color(Display.getCurrent(), 50, 50, 50);
+			imageGC.setForeground(grayColor);
+			imageGC.drawRectangle(0, 0, 19, 19);
+			imageGC.dispose();
+			ImageData newImageData = newDragImage.getImageData();
+			newImageData.alpha = (int)(255 * .4);
+			defaultDragImage = new Image(Display.getCurrent(), newImageData);
+			newDragImage.dispose();
+			grayColor.dispose();
+			image = defaultDragImage;
+			event.offsetX = width / 2;
+			event.offsetY = height / 2;
+		}
+
+		dragImage = image.handle;
+
+		NSSize imageSize = dragImage.size();
+		viewPt.x -= event.offsetX;
+
+		if (control.view.isFlipped())
+			viewPt.y += imageSize.height - event.offsetY;
+		else
+			viewPt.y -= event.offsetY;
+
+		// The third argument to dragImage is ignored as of 10.4.
+		NSSize ignored = new NSSize();
+		
+		control.view.dragImage(dragImage, viewPt, ignored, NSApplication.sharedApplication().currentEvent(), NSPasteboard.pasteboardWithName(OS.NSDragPboard), dragSourceDelegate, true);
+		
+	} finally {	
+		if (defaultDragImage != null) defaultDragImage.dispose();
+	}
+}
+
+void dragOutlineViewStart(Event dragDetectEvent) {
+	DNDEvent event = startDrag(dragDetectEvent);
+	if (event == null) return;
+
+	// Save off the custom image, if any.
+	dragImageFromListener = event.image;
+	
+	// Save the computed offset for the image.  This needs to be passed back in dragImageForRowsWithIndexes
+	// so the proxy image originates from the selection and not centered under the mouse. 
+	dragOffset = new Point(event.offsetX, event.offsetY);
+}
+
+void draggedImage_beganAt(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
+	if (new NSObject(id).isKindOfClass(OS.class_NSTableView)) {
+		callSuper(id, sel, arg0, arg1);
+	}
+}
+
+void draggedImage_endedAt_operation(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, NSPoint arg1, int /*long*/ arg2) {
+	int swtOperation = osOpToOp(arg2);
+	Event event = new DNDEvent();
+	event.widget = this;
+	event.time = (int)System.currentTimeMillis();	
+	event.doit = swtOperation != DND.DROP_NONE;
+	event.detail = swtOperation; 
+	notifyListeners(DND.DragEnd, event);
+	dragImageFromListener = null;
+
+	if (new NSObject(id).isKindOfClass(OS.class_NSTableView)) {
+		callSuper(id, sel, arg0, arg1, arg2);
+	}
+}
+
+int /*long*/ dragImageForRowsWithIndexes_tableColumns_event_offset(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3) {
+	if (dragImageFromListener != null) {
+		NSPoint point = new NSPoint();
+		point.x = dragOffset.x;
+		point.y = dragOffset.y;
+		OS.memmove(arg3, point, NSPoint.sizeof);
+		return dragImageFromListener.handle.id;
+	} else {
+		return callSuperObject(id, sel, arg0, arg1, arg2, arg3);
+	}
+}
+
+/** 
+ * Cocoa NSDraggingSource implementations
+ */
+int /*long*/ draggingSourceOperationMaskForLocal(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	// Drag operations are same for local or remote drags.
+	return dragOperations;
+}
+
+static int /*long*/ dragSourceProc(int /*long*/ id, int /*long*/ sel) {
+	Display display = Display.findDisplay(Thread.currentThread());
+	if (display == null || display.isDisposed()) return 0;
+	Widget widget = display.findWidget(id);
+	if (widget == null) return 0;
+	DragSource ds = null;
+	
+	if (widget instanceof DragSource) {
+		ds = (DragSource)widget;
+	} else {
+		ds = (DragSource)widget.getData(DND.DRAG_SOURCE_KEY);		
+	}
+
+	if (ds == null) return 0;
+	
+	if (sel == OS.sel_ignoreModifierKeysWhileDragging) {
+		return (ds.ignoreModifierKeysWhileDragging(id, sel) ? 1 : 0);
+	}
+	
+	return 0;
+}
+
+static int /*long*/ dragSourceProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	Display display = Display.findDisplay(Thread.currentThread());
+	if (display == null || display.isDisposed()) return 0;
+	Widget widget = display.findWidget(id);
+	if (widget == null) return 0;
+	DragSource ds = null;
+	
+	if (widget instanceof DragSource) {
+		ds = (DragSource)widget;
+	} else {
+		ds = (DragSource)widget.getData(DND.DRAG_SOURCE_KEY);		
+	}
+	
+	if (ds == null) return 0;
+	
+	if (sel == OS.sel_draggingSourceOperationMaskForLocal_) {
+		return ds.draggingSourceOperationMaskForLocal(id, sel, arg0);
+	}
+	
+	return 0;
+}
+
+static int /*long*/ dragSourceProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
+	Display display = Display.findDisplay(Thread.currentThread());
+	if (display == null || display.isDisposed()) return 0;
+	Widget widget = display.findWidget(id);
+	if (widget == null) return 0;
+	DragSource ds = null;
+	
+	if (widget instanceof DragSource) {
+		ds = (DragSource)widget;
+	} else {
+		ds = (DragSource)widget.getData(DND.DRAG_SOURCE_KEY);		
+	}
+
+	if (ds == null) return 0;
+	
+	if (sel == OS.sel_draggedImage_beganAt_) {
+		ds.draggedImage_beganAt(id, sel, arg0, arg1);
+	} else if (sel == OS.sel_pasteboard_provideDataForType_) {
+		ds.pasteboard_provideDataForType(id, sel, arg0, arg1);
+	}
+	
+	return 0;
+}
+
+static int /*long*/ dragSourceProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2) {
+	Display display = Display.findDisplay(Thread.currentThread());
+	if (display == null || display.isDisposed()) return 0;
+	Widget widget = display.findWidget(id);
+	if (widget == null) return 0;
+	DragSource ds = null;
+	
+	if (widget instanceof DragSource) {
+		ds = (DragSource)widget;
+	} else {
+		ds = (DragSource)widget.getData(DND.DRAG_SOURCE_KEY);		
+	}
+
+	if (ds == null) return 0;
+	
+	if (sel == OS.sel_draggedImage_endedAt_operation_) {
+		NSPoint point = new NSPoint();
+		OS.memmove(point, arg1, NSPoint.sizeof);
+		ds.draggedImage_endedAt_operation(id, sel, arg0, point, arg2);
+	}
+	
+	return 0;
+}
+
+static int /*long*/ dragSourceProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3) {
+	Display display = Display.findDisplay(Thread.currentThread());
+	if (display == null || display.isDisposed()) return 0;
+	Widget widget = display.findWidget(id);
+	if (widget == null) return 0;
+	DragSource ds = null;
+	
+	if (widget instanceof DragSource) {
+		ds = (DragSource)widget;
+	} else {
+		ds = (DragSource)widget.getData(DND.DRAG_SOURCE_KEY);		
+	}
+
+	if (ds == null) return 0;
+	
+	if (sel == OS.sel_dragImageForRowsWithIndexes_tableColumns_event_offset_) {
+		return ds.dragImageForRowsWithIndexes_tableColumns_event_offset(id, sel, arg0, arg1, arg2, arg3);
+	}
+	
+	return 0;
+}
+
+/**
+ * Returns the Control which is registered for this DragSource.  This is the control that the 
+ * user clicks in to initiate dragging.
+ *
+ * @return the Control which is registered for this DragSource
+ */
+public Control getControl () {
+	return control;
+}
+
+/**
+ * Returns an array of listeners who will be notified when a drag and drop 
+ * operation is in progress, by sending it one of the messages defined in 
+ * the <code>DragSourceListener</code> interface.
+ *
+ * @return the listeners who will be notified when a drag and drop
+ * operation is in progress
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see DragSourceListener
+ * @see #addDragListener
+ * @see #removeDragListener
+ * @see DragSourceEvent
+ * 
+ * @since 3.4
+ */
+public DragSourceListener[] getDragListeners() {
+	Listener[] listeners = getListeners(DND.DragStart);
+	int length = listeners.length;
+	DragSourceListener[] dragListeners = new DragSourceListener[length];
+	int count = 0;
+	for (int i = 0; i < length; i++) {
+		Listener listener = listeners[i];
+		if (listener instanceof DNDListener) {
+			dragListeners[count] = (DragSourceListener) ((DNDListener) listener).getEventListener();
+			count++;
+		}
+	}
+	if (count == length) return dragListeners;
+	DragSourceListener[] result = new DragSourceListener[count];
+	System.arraycopy(dragListeners, 0, result, 0, count);
+	return result;
+}
+
+/**
+ * Returns the drag effect that is registered for this DragSource.  This drag
+ * effect will be used during a drag and drop operation.
+ *
+ * @return the drag effect that is registered for this DragSource
+ * 
+ * @since 3.3
+ */
+public DragSourceEffect getDragSourceEffect() {
+	return dragEffect;
+}
+
+/**
+ * Returns the list of data types that can be transferred by this DragSource.
+ *
+ * @return the list of data types that can be transferred by this DragSource
+ */
+public Transfer[] getTransfer(){
+	return transferAgents;
+}
+
+/**
+ * We always want the modifier keys to potentially update the drag.
+ */
+boolean ignoreModifierKeysWhileDragging(int /*long*/ id, int /*long*/ sel) {
+	return false;
+}
+
+void onDispose() {
+	if (control == null)
+		return;
+
+	if (controlListener != null) {
+		control.removeListener(SWT.Dispose, controlListener);
+		control.removeListener(SWT.DragDetect, controlListener);
+	}
+	controlListener = null;
+	control.setData(DND.DRAG_SOURCE_KEY, null);
+	control = null;
+	transferAgents = null;
+
+	if (delegateJniRef != 0) OS.DeleteGlobalRef(delegateJniRef);
+	delegateJniRef = 0;
+	
+	if (dragSourceDelegate != null) {
+		OS.object_setInstanceVariable(dragSourceDelegate.id, SWT_OBJECT, 0);
+		dragSourceDelegate.release();
+	}
+}
+
+int opToOsOp(int operation) {
+	int osOperation = 0;
+	if ((operation & DND.DROP_COPY) != 0){
+		osOperation |= OS.NSDragOperationCopy;
+	}
+	if ((operation & DND.DROP_LINK) != 0) {
+		osOperation |= OS.NSDragOperationLink;
+	}
+	if ((operation & DND.DROP_MOVE) != 0) {
+		osOperation |= OS.NSDragOperationMove;
+	}
+	if ((operation & DND.DROP_TARGET_MOVE) != 0) {
+		osOperation |= OS.NSDragOperationDelete;
+	}
+	return osOperation;
+}
+
+int osOpToOp(int /*long*/ osOperation){
+	int operation = 0;
+	if ((osOperation & OS.NSDragOperationCopy) != 0){
+		operation |= DND.DROP_COPY;
+	}
+	if ((osOperation & OS.NSDragOperationLink) != 0) {
+		operation |= DND.DROP_LINK;
+	}
+	if ((osOperation & OS.NSDragOperationDelete) != 0) {
+		operation |= DND.DROP_TARGET_MOVE;
+	}
+	if ((osOperation & OS.NSDragOperationMove) != 0) {
+		operation |= DND.DROP_MOVE;
+	}
+	if (osOperation == OS.NSDragOperationEvery) {
+		operation = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+	}
+	return operation;
+}
+
+void pasteboard_provideDataForType(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
+	NSPasteboard pasteboard = new NSPasteboard(arg0);
+	NSString dataType = new NSString(arg1);
+	if (pasteboard == null || dataType == null) return;
+	TransferData transferData = new TransferData();
+	transferData.type = Transfer.registerType(dataType.getString());
+	DNDEvent event = new DNDEvent();
+	event.widget = this;
+	event.time = (int)System.currentTimeMillis(); 
+	event.dataType = transferData; 
+	notifyListeners(DND.DragSetData, event);
+	if (!event.doit) return;
+	Transfer transfer = null;
+	for (int i = 0; i < transferAgents.length; i++) {
+		Transfer transferAgent = transferAgents[i];
+		if (transferAgent != null && transferAgent.isSupportedType(transferData)) {
+			transfer = transferAgent;
+			break;
+		}
+	}
+	if (transfer == null) return;
+	transfer.javaToNative(event.data, transferData);
+	if (transferData.data == null) return;
+
+	NSObject tdata = transferData.data;
+
+	if (dataType.isEqual(OS.NSStringPboardType) ||
+			dataType.isEqual(OS.NSHTMLPboardType) || 
+			dataType.isEqual(OS.NSRTFPboardType)) {
+		pasteboard.setString((NSString) tdata, dataType);
+	} else if (dataType.isEqual(OS.NSURLPboardType)) {
+		NSURL url = (NSURL) tdata;
+		url.writeToPasteboard(pasteboard);
+	} else if (dataType.isEqual(OS.NSFilenamesPboardType)) {
+		pasteboard.setPropertyList((NSArray) tdata, dataType);
+	} else {
+		pasteboard.setData((NSData) tdata, dataType);
+	}
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when a drag and drop operation is in progress.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see DragSourceListener
+ * @see #addDragListener
+ * @see #getDragListeners
+ */
+public void removeDragListener(DragSourceListener listener) {
+	if (listener == null) DND.error (SWT.ERROR_NULL_ARGUMENT);
+	removeListener (DND.DragStart, listener);
+	removeListener (DND.DragSetData, listener);
+	removeListener (DND.DragEnd, listener);
+}
+
+/**
+ * Specifies the drag effect for this DragSource.  This drag effect will be 
+ * used during a drag and drop operation.
+ *
+ * @param effect the drag effect that is registered for this DragSource
+ * 
+ * @since 3.3
+ */
+public void setDragSourceEffect(DragSourceEffect effect) {
+	dragEffect = effect;
+}
+/**
+ * Specifies the list of data types that can be transferred by this DragSource.
+ * The application must be able to provide data to match each of these types when
+ * a successful drop has occurred.
+ * 
+ * @param transferAgents a list of Transfer objects which define the types of data that can be
+ * dragged from this source
+ */
+public void setTransfer(Transfer[] transferAgents){
+	this.transferAgents = transferAgents;
+}
+
+DNDEvent startDrag(Event dragEvent) {
+	DNDEvent event = new DNDEvent();
+	event.widget = this;
+	event.x = dragEvent.x;
+	event.y = dragEvent.y;
+	event.time = dragEvent.time;
+	event.doit = true;
+	notifyListeners(DND.DragStart, event);
+	if (!event.doit || transferAgents == null || transferAgents.length == 0) return null;
+	
+	NSPasteboard dragBoard = NSPasteboard.pasteboardWithName(OS.NSDragPboard);
+	NSMutableArray nativeTypeArray = NSMutableArray.arrayWithCapacity(10);
+	Transfer fileTrans = null;
+	
+	for (int i = 0; i < transferAgents.length; i++) {
+		Transfer transfer = transferAgents[i];
+		if (transfer != null) {
+			String[] typeNames = transfer.getTypeNames();
+
+			for (int j = 0; j < typeNames.length; j++) {
+				nativeTypeArray.addObject(NSString.stringWith(typeNames[j]));
+			}	
+
+			if (transfer instanceof FileTransfer) {
+				fileTrans = transfer;
+			}			
+		}		
+	}
+
+	if (nativeTypeArray != null)
+		dragBoard.declareTypes(nativeTypeArray, dragSourceDelegate);
+
+	if (fileTrans != null) {
+		int[] types = fileTrans.getTypeIds();
+		TransferData transferData = new TransferData();
+		transferData.type = types[0];
+		DNDEvent event2 = new DNDEvent();
+		event2.widget = this;
+		event2.time = (int)System.currentTimeMillis(); 
+		event2.dataType = transferData; 
+		notifyListeners(DND.DragSetData, event2);
+		if (event2.data != null) {
+			for (int j = 0; j < types.length; j++) {
+				transferData.type = types[j];
+				fileTrans.javaToNative(event2.data, transferData);
+				if (transferData.data != null) {
+					dragBoard.setPropertyList(transferData.data, OS.NSFilenamesPboardType);
+				}
+			}
+		}
+	}
+
+	// Save off the drag operations -- AppKit will call back to us to request them during the drag.
+	dragOperations = opToOsOp(getStyle());	
+
+	return event;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/DropTarget.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/DropTarget.java
new file mode 100644
index 0000000..236c549
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/DropTarget.java
@@ -0,0 +1,954 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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 java.util.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.cocoa.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ *
+ * Class <code>DropTarget</code> defines the target object for a drag and drop transfer.
+ *
+ * <p>IMPORTANT: This class is <em>not</em> intended to be subclassed.</p>
+ *
+ * <p>This class identifies the <code>Control</code> over which the user must position the cursor
+ * in order to drop the data being transferred.  It also specifies what data types can be dropped on 
+ * this control and what operations can be performed.  You may have several DropTragets in an 
+ * application but there can only be a one to one mapping between a <code>Control</code> and a <code>DropTarget</code>.
+ * The DropTarget can receive data from within the same application or from other applications 
+ * (such as text dragged from a text editor like Word).</p>
+ *
+ * <code><pre>
+ *	int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;
+ *	Transfer[] types = new Transfer[] {TextTransfer.getInstance()};
+ *	DropTarget target = new DropTarget(label, operations);
+ *	target.setTransfer(types);
+ * </code></pre>
+ *
+ * <p>The application is notified of data being dragged over this control and of when a drop occurs by 
+ * implementing the interface <code>DropTargetListener</code> which uses the class 
+ * <code>DropTargetEvent</code>.  The application can modify the type of drag being performed 
+ * on this Control at any stage of the drag by modifying the <code>event.detail</code> field or the 
+ * <code>event.currentDataType</code> field.  When the data is dropped, it is the responsibility of 
+ * the application to copy this data for its own purposes.
+ *
+ * <code><pre>
+ *	target.addDropListener (new DropTargetListener() {
+ *		public void dragEnter(DropTargetEvent event) {};
+ *		public void dragOver(DropTargetEvent event) {};
+ *		public void dragLeave(DropTargetEvent event) {};
+ *		public void dragOperationChanged(DropTargetEvent event) {};
+ *		public void dropAccept(DropTargetEvent event) {}
+ *		public void drop(DropTargetEvent event) {
+ *			// A drop has occurred, copy over the data
+ *			if (event.data == null) { // no data to copy, indicate failure in event.detail
+ *				event.detail = DND.DROP_NONE;
+ *				return;
+ *			}
+ *			label.setText ((String) event.data); // data copied to label text
+ *		}
+ * 	});
+ * </pre></code>
+ *
+ * <dl>
+ *	<dt><b>Styles</b></dt> <dd>DND.DROP_NONE, DND.DROP_COPY, DND.DROP_MOVE, DND.DROP_LINK</dd>
+ *	<dt><b>Events</b></dt> <dd>DND.DragEnter, DND.DragLeave, DND.DragOver, DND.DragOperationChanged, 
+ *                             DND.DropAccept, DND.Drop </dd>
+ * </dl>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#dnd">Drag and Drop snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: DNDExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class DropTarget extends Widget {
+
+	static Callback dropTarget2Args, dropTarget3Args, dropTarget6Args;
+	static int /*long*/ proc2Args, proc3Args, proc6Args;
+
+	static {
+		Class clazz = DropTarget.class;
+
+		dropTarget2Args = new Callback(clazz, "dropTargetProc", 2);
+		proc2Args = dropTarget2Args.getAddress();
+		if (proc2Args == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+
+		dropTarget3Args = new Callback(clazz, "dropTargetProc", 3);
+		proc3Args = dropTarget3Args.getAddress();
+		if (proc3Args == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+
+		dropTarget6Args = new Callback(clazz, "dropTargetProc", 6);
+		proc6Args = dropTarget6Args.getAddress();
+		if (proc6Args == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);	
+	}
+
+	static boolean dropNotAllowed = false;
+	
+	Control control;
+	Listener controlListener;
+	Transfer[] transferAgents = new Transfer[0];
+	DropTargetEffect dropEffect;
+	int feedback = DND.FEEDBACK_NONE;
+
+	// Track application selections
+	TransferData selectedDataType;
+	int selectedOperation;
+	
+	// workaround - There is no event for "operation changed" so track operation based on key state
+	int keyOperation = -1;
+	
+	static final String DEFAULT_DROP_TARGET_EFFECT = "DEFAULT_DROP_TARGET_EFFECT"; //$NON-NLS-1$
+	
+void addDragHandlers() {
+	// Our strategy here is to dynamically add methods to the control's class that are required 
+	// by NSDraggingDestination. Then, when setTransfer is called, we just register
+	// the types with the Control's NSView and AppKit will call the methods in the protocol
+	// when a drag goes over the view. 
+
+	int /*long*/ cls = OS.object_getClass(control.view.id);
+
+	if (cls == 0) {
+		DND.error(DND.ERROR_CANNOT_INIT_DROP);
+	}
+
+	// If we already added it, no need to do it again.
+	int /*long*/ procPtr = OS.class_getMethodImplementation(cls, OS.sel_draggingEntered_);
+	if (procPtr == proc3Args) return;
+
+	// Add the NSDraggingDestination callbacks
+	OS.class_addMethod(cls, OS.sel_draggingEntered_, proc3Args, "@:@");
+	OS.class_addMethod(cls, OS.sel_draggingUpdated_, proc3Args, "@:@");
+	OS.class_addMethod(cls, OS.sel_draggingExited_, proc3Args, "@:@");
+	OS.class_addMethod(cls, OS.sel_performDragOperation_, proc3Args, "@:@");
+	OS.class_addMethod(cls, OS.sel_wantsPeriodicDraggingUpdates, proc2Args, "@:");
+	
+	if (OS.class_getSuperclass(cls) == OS.class_NSOutlineView) {
+		OS.class_addMethod(cls, OS.sel_outlineView_acceptDrop_item_childIndex_, proc6Args, "@:@@@i");
+		OS.class_addMethod(cls, OS.sel_outlineView_validateDrop_proposedItem_proposedChildIndex_, proc6Args, "@:@@@i");
+	} else if (OS.class_getSuperclass(cls) == OS.class_NSTableView) {
+		OS.class_addMethod(cls, OS.sel_tableView_acceptDrop_row_dropOperation_, proc6Args, "@:@@@i");
+		OS.class_addMethod(cls, OS.sel_tableView_validateDrop_proposedRow_proposedDropOperation_, proc6Args, "@:@@@i");
+	}
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when a drag and drop operation is in progress, by sending
+ * it one of the messages defined in the <code>DropTargetListener</code>
+ * interface.
+ * 
+ * <p><ul>
+ * <li><code>dragEnter</code> is called when the cursor has entered the drop target boundaries
+ * <li><code>dragLeave</code> is called when the cursor has left the drop target boundaries and just before
+ * the drop occurs or is cancelled.
+ * <li><code>dragOperationChanged</code> is called when the operation being performed has changed 
+ * (usually due to the user changing the selected modifier key(s) while dragging)
+ * <li><code>dragOver</code> is called when the cursor is moving over the drop target
+ * <li><code>dropAccept</code> is called just before the drop is performed.  The drop target is given 
+ * the chance to change the nature of the drop or veto the drop by setting the <code>event.detail</code> field
+ * <li><code>drop</code> is called when the data is being dropped
+ * </ul></p>
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see DropTargetListener
+ * @see #getDropListeners
+ * @see #removeDropListener
+ * @see DropTargetEvent
+ */
+public void addDropListener(DropTargetListener listener) {
+	if (listener == null) DND.error (SWT.ERROR_NULL_ARGUMENT);
+	DNDListener typedListener = new DNDListener (listener);
+	typedListener.dndWidget = this;
+	addListener (DND.DragEnter, typedListener);
+	addListener (DND.DragLeave, typedListener);
+	addListener (DND.DragOver, typedListener);
+	addListener (DND.DragOperationChanged, typedListener);
+	addListener (DND.Drop, typedListener);
+	addListener (DND.DropAccept, typedListener);
+}
+
+int /*long*/ callSuper (int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	return OS.objc_msgSendSuper(super_struct, sel, arg0);
+}
+
+static int checkStyle (int style) {
+	if (style == SWT.NONE) return DND.DROP_MOVE;
+	return style;
+}
+
+protected void checkSubclass () {
+	String name = getClass().getName ();
+	String validName = DropTarget.class.getName();
+	if (!validName.equals(name)) {
+		DND.error (SWT.ERROR_INVALID_SUBCLASS);
+	}
+}
+
+int draggingEntered(int /*long*/ id, int /*long*/ sel, NSObject sender) {
+	if (sender == null) return OS.NSDragOperationNone;	
+	
+	DNDEvent event = new DNDEvent();
+	if (!setEventData(sender, event)) {
+		keyOperation = -1;
+		setDropNotAllowed();
+		return OS.NSDragOperationNone;
+	}
+	
+	int allowedOperations = event.operations;
+	TransferData[] allowedDataTypes = new TransferData[event.dataTypes.length];
+	System.arraycopy(event.dataTypes, 0, allowedDataTypes, 0, allowedDataTypes.length);
+	
+	selectedDataType = null;
+	selectedOperation = DND.DROP_NONE;
+	notifyListeners(DND.DragEnter, event);
+
+	if (event.detail == DND.DROP_DEFAULT) {
+		event.detail = (allowedOperations & DND.DROP_MOVE) != 0 ? DND.DROP_MOVE : DND.DROP_NONE;
+	}
+	
+	if (event.dataType != null) {
+		for (int i = 0; i < allowedDataTypes.length; i++) {
+			if (allowedDataTypes[i].type == event.dataType.type) {
+				selectedDataType = allowedDataTypes[i];
+				break;
+			}
+		}
+	}
+	
+	if (selectedDataType != null && (allowedOperations & event.detail) != 0) {
+		selectedOperation = event.detail;
+	}
+	
+	if ((selectedOperation == DND.DROP_NONE) && (OS.PTR_SIZEOF == 4)) {
+		setDropNotAllowed();
+	} else {
+		clearDropNotAllowed();
+	}
+
+	if (new NSObject(id).isKindOfClass(OS.class_NSTableView)) {
+		return (int)/*64*/callSuper(id, sel, sender.id);
+	}
+	return opToOsOp(selectedOperation);
+}
+
+void draggingExited(int /*long*/ id, int /*long*/ sel, NSObject sender) {
+	clearDropNotAllowed();
+	if (keyOperation == -1) return;
+	keyOperation = -1;
+	
+	DNDEvent event = new DNDEvent();
+	event.widget = this;
+	event.time = (int)System.currentTimeMillis();
+	event.detail = DND.DROP_NONE;
+	notifyListeners(DND.DragLeave, event);
+	
+	if (new NSObject(id).isKindOfClass(OS.class_NSTableView)) {
+		callSuper(id, sel, sender.id);
+	}
+}
+
+int draggingUpdated(int /*long*/ id, int /*long*/ sel, NSObject sender) {
+	if (sender == null) return OS.NSDragOperationNone;	
+	int oldKeyOperation = keyOperation;
+	
+	DNDEvent event = new DNDEvent();
+	if (!setEventData(sender, event)) {
+		keyOperation = -1;
+		setDropNotAllowed();
+		return OS.NSDragOperationNone;
+	}
+
+	int allowedOperations = event.operations;
+	TransferData[] allowedDataTypes = new TransferData[event.dataTypes.length];
+	System.arraycopy(event.dataTypes, 0, allowedDataTypes, 0, allowedDataTypes.length);
+
+	if (keyOperation == oldKeyOperation) {
+		event.type = DND.DragOver;
+		event.dataType = selectedDataType;
+		event.detail = selectedOperation;
+	} else {
+		event.type = DND.DragOperationChanged;
+		event.dataType = selectedDataType;
+	}
+
+	selectedDataType = null;
+	selectedOperation = DND.DROP_NONE;
+	notifyListeners(event.type, event);
+	if (event.detail == DND.DROP_DEFAULT) {
+		event.detail = (allowedOperations & DND.DROP_MOVE) != 0 ? DND.DROP_MOVE : DND.DROP_NONE;
+	}
+	
+	if (event.dataType != null) {
+		for (int i = 0; i < allowedDataTypes.length; i++) {
+			if (allowedDataTypes[i].type == event.dataType.type) {
+				selectedDataType = allowedDataTypes[i];
+				break;
+			}
+		}
+	}
+
+	if (selectedDataType != null && (event.detail & allowedOperations) != 0) {
+		selectedOperation = event.detail;
+	}
+	
+	if ((selectedOperation == DND.DROP_NONE) && (OS.PTR_SIZEOF == 4)) {
+		setDropNotAllowed();
+	} else {
+		clearDropNotAllowed();
+	}
+
+	if (new NSObject(id).isKindOfClass(OS.class_NSTableView)) {
+		return (int)/*64*/callSuper(id, sel, sender.id);
+	}
+
+	return opToOsOp(selectedOperation);
+}
+
+/**
+ * Creates a new <code>DropTarget</code> to allow data to be dropped on the specified 
+ * <code>Control</code>.
+ * Creating an instance of a DropTarget may cause system resources to be allocated 
+ * depending on the platform.  It is therefore mandatory that the DropTarget instance 
+ * be disposed when no longer required.
+ * 
+ * @param control the <code>Control</code> over which the user positions the cursor to drop the data
+ * @param style the bitwise OR'ing of allowed operations; this may be a combination of any of 
+ *		   DND.DROP_NONE, DND.DROP_COPY, DND.DROP_MOVE, DND.DROP_LINK
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_CANNOT_INIT_DROP - unable to initiate drop target; this will occur if more than one
+ *        drop target is created for a control or if the operating system will not allow the creation
+ *        of the drop target</li>
+ * </ul>
+ *
+ * <p>NOTE: ERROR_CANNOT_INIT_DROP should be an SWTException, since it is a
+ * recoverable error, but can not be changed due to backward compatibility.</p>
+ * 
+ * @see Widget#dispose
+ * @see DropTarget#checkSubclass
+ * @see DND#DROP_NONE
+ * @see DND#DROP_COPY
+ * @see DND#DROP_MOVE
+ * @see DND#DROP_LINK
+ */
+public DropTarget(Control control, int style) {
+	super(control, checkStyle(style));
+	this.control = control;
+
+	if (control.getData(DND.DROP_TARGET_KEY) != null) {
+		DND.error(DND.ERROR_CANNOT_INIT_DROP);
+	}
+
+	control.setData(DND.DROP_TARGET_KEY, this);
+
+	controlListener = new Listener () {
+		public void handleEvent (Event event) {
+			if (!DropTarget.this.isDisposed()) {
+				DropTarget.this.dispose();
+			}
+		}
+	};
+	control.addListener (SWT.Dispose, controlListener);
+	
+	this.addListener(SWT.Dispose, new Listener() {
+		public void handleEvent (Event event) {
+			onDispose();
+		}
+	});
+
+	Object effect = control.getData(DEFAULT_DROP_TARGET_EFFECT);
+	if (effect instanceof DropTargetEffect) {
+		dropEffect = (DropTargetEffect) effect;
+	} else if (control instanceof Table) {
+		dropEffect = new TableDropTargetEffect((Table) control);
+	} else if (control instanceof Tree) {
+		dropEffect = new TreeDropTargetEffect((Tree) control);
+	}
+
+	addDragHandlers();	
+}
+
+static int /*long*/ dropTargetProc(int /*long*/ id, int /*long*/ sel) {
+	Display display = Display.findDisplay(Thread.currentThread());
+	if (display == null || display.isDisposed()) return 0;
+	Widget widget = display.findWidget(id);
+	if (widget == null) return 0;
+	DropTarget dt = (DropTarget)widget.getData(DND.DROP_TARGET_KEY);
+	if (dt == null) return 0;
+
+	if (sel == OS.sel_wantsPeriodicDraggingUpdates) {
+		return dt.wantsPeriodicDraggingUpdates(id, sel) ? 1 : 0;
+	}
+	
+	return 0;
+}
+
+static int /*long*/ dropTargetProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	Display display = Display.findDisplay(Thread.currentThread());
+	if (display == null || display.isDisposed()) return 0;
+	Widget widget = display.findWidget(id);
+	if (widget == null) return 0;
+	DropTarget dt = (DropTarget)widget.getData(DND.DROP_TARGET_KEY);
+	if (dt == null) return 0;
+	
+	// arg0 is _always_ the sender, and implements NSDraggingInfo.
+	// Looks like an NSObject for our purposes, though.
+	NSObject sender = new NSObject(arg0);
+	
+	if (sel == OS.sel_draggingEntered_) {
+		return dt.draggingEntered(id, sel, sender);
+	} else if (sel == OS.sel_draggingUpdated_) {
+		return dt.draggingUpdated(id, sel, sender);
+	} else if (sel == OS.sel_draggingExited_) {
+		dt.draggingExited(id, sel, sender);
+	} else if (sel == OS.sel_performDragOperation_) {
+		return dt.performDragOperation(id, sel, sender) ? 1 : 0;
+	}
+	
+	return 0;
+}
+
+static int /*long*/ dropTargetProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3) {
+	Display display = Display.findDisplay(Thread.currentThread());
+	if (display == null || display.isDisposed()) return 0;
+	Widget widget = display.findWidget(id);
+	if (widget == null) return 0;
+	DropTarget dt = (DropTarget)widget.getData(DND.DROP_TARGET_KEY);
+	if (dt == null) return 0;
+
+	if (sel == OS.sel_outlineView_acceptDrop_item_childIndex_) {
+		return dt.outlineView_acceptDrop_item_childIndex(id, sel, arg0, arg1, arg2, arg3) ? 1 : 0;
+	} else if (sel == OS.sel_outlineView_validateDrop_proposedItem_proposedChildIndex_) {
+		return dt.outlineView_validateDrop_proposedItem_proposedChildIndex(id, sel, arg0, arg1, arg2, arg3);
+	} else if (sel == OS.sel_tableView_acceptDrop_row_dropOperation_) {
+		return dt.tableView_acceptDrop_row_dropOperation(id, sel, arg0, arg1, arg2, arg3) ? 1 : 0;
+	} else if (sel == OS.sel_tableView_validateDrop_proposedRow_proposedDropOperation_) {
+		return dt.tableView_validateDrop_proposedRow_proposedDropOperation(id, sel, arg0, arg1, arg2, arg3);
+	}
+	
+	return 0;
+}
+
+/**
+ * Returns the Control which is registered for this DropTarget.  This is the control over which the 
+ * user positions the cursor to drop the data.
+ *
+ * @return the Control which is registered for this DropTarget
+ */
+public Control getControl () {
+	return control;
+}
+
+/**
+ * Returns an array of listeners who will be notified when a drag and drop 
+ * operation is in progress, by sending it one of the messages defined in 
+ * the <code>DropTargetListener</code> interface.
+ *
+ * @return the listeners who will be notified when a drag and drop 
+ * operation is in progress
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see DropTargetListener
+ * @see #addDropListener
+ * @see #removeDropListener
+ * @see DropTargetEvent
+ * 
+ * @since 3.4
+ */
+public DropTargetListener[] getDropListeners() {
+	Listener[] listeners = getListeners(DND.DragEnter);
+	int length = listeners.length;
+	DropTargetListener[] dropListeners = new DropTargetListener[length];
+	int count = 0;
+	for (int i = 0; i < length; i++) {
+		Listener listener = listeners[i];
+		if (listener instanceof DNDListener) {
+			dropListeners[count] = (DropTargetListener) ((DNDListener) listener).getEventListener();
+			count++;
+		}
+	}
+	if (count == length) return dropListeners;
+	DropTargetListener[] result = new DropTargetListener[count];
+	System.arraycopy(dropListeners, 0, result, 0, count);
+	return result;
+}
+
+/**
+ * Returns the drop effect for this DropTarget.  This drop effect will be 
+ * used during a drag and drop to display the drag under effect on the 
+ * target widget.
+ *
+ * @return the drop effect that is registered for this DropTarget
+ * 
+ * @since 3.3
+ */
+public DropTargetEffect getDropTargetEffect() {
+	return dropEffect;
+}
+
+int getOperationFromKeyState() {
+	// The NSDraggingInfo object already combined the modifier keys with the 
+	// drag source's allowed events. This might be better accomplished by diffing
+	// the base drag source mask with the active drag state mask instead of snarfing
+	// the current event.
+	
+	// See documentation on [NSDraggingInfo draggingSourceOperationMask] for the
+	// correct Cocoa behavior.  Control + Option or Command is NSDragOperationGeneric,
+	// or DND.DROP_DEFAULT in the SWT.
+	NSEvent currEvent = NSApplication.sharedApplication().currentEvent();
+	int /*long*/ modifiers = currEvent.modifierFlags();
+	boolean option = (modifiers & OS.NSAlternateKeyMask) == OS.NSAlternateKeyMask;
+	boolean control = (modifiers & OS.NSControlKeyMask) == OS.NSControlKeyMask;
+	if (control && option) return DND.DROP_DEFAULT;
+	if (control) return DND.DROP_LINK;
+	if (option) return DND.DROP_COPY;
+	return DND.DROP_DEFAULT; 
+}
+
+/**
+ * Returns a list of the data types that can be transferred to this DropTarget.
+ *
+ * @return a list of the data types that can be transferred to this DropTarget
+ */
+public Transfer[] getTransfer() {
+	return transferAgents;
+}
+
+void onDispose () {	
+	if (control == null)
+		return;
+	if (controlListener != null)
+		control.removeListener(SWT.Dispose, controlListener);
+	controlListener = null;
+	control.setData(DND.DROP_TARGET_KEY, null);
+	transferAgents = null;
+	
+	// Unregister the control as a drop target.
+	control.view.unregisterDraggedTypes();
+	control = null;
+}
+
+int opToOsOp(int operation) {
+	int osOperation = 0;
+	if ((operation & DND.DROP_COPY) != 0){
+		osOperation |= OS.NSDragOperationCopy;
+	}
+	if ((operation & DND.DROP_LINK) != 0) {
+		osOperation |= OS.NSDragOperationLink;
+	}
+	if ((operation & DND.DROP_MOVE) != 0) {
+		osOperation |= OS.NSDragOperationMove;
+	}
+	if ((operation & DND.DROP_TARGET_MOVE) != 0) {
+		osOperation |= OS.NSDragOperationDelete;
+	}
+	return osOperation;
+}
+
+int osOpToOp(int /*long*/ osOperation){
+	int operation = 0;
+	if ((osOperation & OS.NSDragOperationCopy) != 0){
+		operation |= DND.DROP_COPY;
+	}
+	if ((osOperation & OS.NSDragOperationLink) != 0) {
+		operation |= DND.DROP_LINK;
+	}
+	if ((osOperation & OS.NSDragOperationDelete) != 0) {
+		operation |= DND.DROP_TARGET_MOVE;
+	}
+	if ((osOperation & OS.NSDragOperationMove) != 0) {
+		operation |= DND.DROP_MOVE;
+	}
+	if (osOperation == OS.NSDragOperationEvery) {
+		operation = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+	}
+	return operation;
+}
+
+boolean drop(NSObject sender) {
+	clearDropNotAllowed();
+	DNDEvent event = new DNDEvent();
+	event.widget = this;
+	event.time = (int)System.currentTimeMillis();
+	
+	if (dropEffect != null) {
+		NSPoint mouseLocation = sender.draggingLocation();
+		NSPoint globalLoc = sender.draggingDestinationWindow().convertBaseToScreen(mouseLocation);
+		event.item = dropEffect.getItem((int)globalLoc.x, (int)globalLoc.y);
+	}
+	
+	event.detail = DND.DROP_NONE;
+	notifyListeners(DND.DragLeave, event);
+	
+	event = new DNDEvent();
+	if (!setEventData(sender, event)) {
+		return false;
+	}
+	
+	keyOperation = -1;
+	int allowedOperations = event.operations;
+	TransferData[] allowedDataTypes = new TransferData[event.dataTypes.length];
+	System.arraycopy(event.dataTypes, 0, allowedDataTypes, 0, event.dataTypes.length);
+	event.dataType = selectedDataType;
+	event.detail = selectedOperation;
+	notifyListeners(DND.DropAccept, event);
+
+	selectedDataType = null;
+	if (event.dataType != null) {
+		for (int i = 0; i < allowedDataTypes.length; i++) {
+			if (allowedDataTypes[i].type == event.dataType.type) {
+				selectedDataType = allowedDataTypes[i];
+				break;
+			}
+		}
+	}
+
+	selectedOperation = DND.DROP_NONE;
+	if (selectedDataType != null && (event.detail & allowedOperations) != 0) {
+		selectedOperation = event.detail;
+	}	
+	
+	if (selectedOperation == DND.DROP_NONE) {
+		return false;
+	}
+	
+	// ask drag source for dropped data
+	NSPasteboard pasteboard = sender.draggingPasteboard();
+	NSObject data = null;
+	NSMutableArray types = NSMutableArray.arrayWithCapacity(10);
+
+	for (int i = 0; i < transferAgents.length; i++){
+		Transfer transfer = transferAgents[i];
+		String[] typeNames = transfer.getTypeNames();
+		int[] typeIds = transfer.getTypeIds();
+		
+		for (int j = 0; j < typeNames.length; j++) {
+			if (selectedDataType.type == typeIds[j]) {
+				types.addObject(NSString.stringWith(typeNames[j]));
+				break;
+			}
+		}
+	}
+
+	NSString type = pasteboard.availableTypeFromArray(types);
+	TransferData tdata = new TransferData();
+
+	if (type != null) {
+		tdata.type = Transfer.registerType(type.getString());
+		if (type.isEqual(OS.NSStringPboardType) ||
+				type.isEqual(OS.NSHTMLPboardType) ||
+				type.isEqual(OS.NSRTFPboardType)) {
+			tdata.data = pasteboard.stringForType(type);
+		} else if (type.isEqual(OS.NSURLPboardType)) {
+			tdata.data = NSURL.URLFromPasteboard(pasteboard);
+		} else if (type.isEqual(OS.NSFilenamesPboardType)) {
+			tdata.data = new NSArray(pasteboard.propertyListForType(type).id);
+		} else {
+			tdata.data = pasteboard.dataForType(type);
+		}
+	}
+
+	if (tdata.data != null) {
+		data = tdata.data;
+	}
+
+	// Get Data in a Java format
+	Object object = null;
+	for (int i = 0; i < transferAgents.length; i++) {
+		Transfer transfer = transferAgents[i];
+		if (transfer != null && transfer.isSupportedType(selectedDataType)) {
+			selectedDataType.data = data;
+			object = transfer.nativeToJava(selectedDataType);
+			break;
+		}
+	}
+	
+	if (object == null) {
+		selectedOperation = DND.DROP_NONE;
+	}
+		
+	event.dataType = selectedDataType;
+	event.detail = selectedOperation;
+	event.data = object;
+	notifyListeners(DND.Drop, event);
+	selectedOperation = DND.DROP_NONE;
+	if ((allowedOperations & event.detail) == event.detail) {
+		selectedOperation = event.detail;
+	}
+	//notify source of action taken
+	return (selectedOperation != DND.DROP_NONE);
+}
+
+boolean performDragOperation(int /*long*/ id, int /*long*/ sel, NSObject sender) {
+	if (new NSObject(id).isKindOfClass(OS.class_NSTableView)) {
+		return callSuper(id, sel, sender.id) != 0;
+	}
+	
+	return drop (sender);
+}
+
+boolean outlineView_acceptDrop_item_childIndex(int /*long*/ id, int /*long*/ sel, int /*long*/ outlineView, int /*long*/ info, int /*long*/ item, int /*long*/ index) {
+	return drop(new NSObject(info));
+}
+
+int /*long*/ outlineView_validateDrop_proposedItem_proposedChildIndex(int /*long*/ id, int /*long*/ sel, int /*long*/ outlineView, int /*long*/ info, int /*long*/ item, int /*long*/ index) {
+	//TODO stop scrolling and expansion when app does not set FEEDBACK_SCROLL and/or FEEDBACK_EXPAND
+	//TODO expansion animation and auto collapse not working because of outlineView:shouldExpandItem:
+	NSOutlineView widget = new NSOutlineView(outlineView);
+	NSObject sender = new NSObject(info);
+	NSPoint pt = sender.draggingLocation();
+	pt = widget.convertPoint_fromView_(pt, null);
+	Tree tree = (Tree)getControl();
+	TreeItem childItem = tree.getItem(new Point((int)pt.x, (int)pt.y));
+	if (feedback == 0 || childItem == null) {
+		widget.setDropItem(null, -1);		
+	} else {
+		if ((feedback & DND.FEEDBACK_SELECT) != 0) {
+			widget.setDropItem(childItem.handle, -1);
+		} else {
+			TreeItem parentItem = childItem.getParentItem();
+			int childIndex;
+			id parentID = null;
+			if (parentItem != null) {
+				parentID = parentItem.handle;
+				childIndex = parentItem.indexOf(childItem);
+			} else {
+				childIndex = ((Tree)getControl()).indexOf(childItem);
+			}
+			if ((feedback & DND.FEEDBACK_INSERT_AFTER) != 0) {
+				widget.setDropItem(parentID, childIndex + 1);
+			}
+			if ((feedback & DND.FEEDBACK_INSERT_BEFORE) != 0) {
+				widget.setDropItem(parentID, childIndex);
+			}
+		}			
+	}
+	
+	return opToOsOp(selectedOperation);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when a drag and drop operation is in progress.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see DropTargetListener
+ * @see #addDropListener
+ * @see #getDropListeners
+ */
+public void removeDropListener(DropTargetListener listener) {	
+	if (listener == null) DND.error (SWT.ERROR_NULL_ARGUMENT);
+	removeListener (DND.DragEnter, listener);
+	removeListener (DND.DragLeave, listener);
+	removeListener (DND.DragOver, listener);
+	removeListener (DND.DragOperationChanged, listener);
+	removeListener (DND.Drop, listener);
+	removeListener (DND.DropAccept, listener);
+}
+
+/**
+ * Specifies the drop effect for this DropTarget.  This drop effect will be 
+ * used during a drag and drop to display the drag under effect on the 
+ * target widget.
+ *
+ * @param effect the drop effect that is registered for this DropTarget
+ * 
+ * @since 3.3
+ */
+public void setDropTargetEffect(DropTargetEffect effect) {
+	dropEffect = effect;
+}
+
+boolean setEventData(NSObject draggingState, DNDEvent event) {
+	if (draggingState == null) return false;
+	
+	// get allowed operations
+	int style = getStyle();
+	int /*long*/ allowedActions = draggingState.draggingSourceOperationMask();
+	int operations = osOpToOp(allowedActions) & style;
+	if (operations == DND.DROP_NONE) return false;
+
+	// get current operation
+	int operation = getOperationFromKeyState();
+	keyOperation = operation;
+	if (operation == DND.DROP_DEFAULT) {
+		 if ((style & DND.DROP_DEFAULT) == 0) {
+			operation = (operations & DND.DROP_MOVE) != 0 ? DND.DROP_MOVE : DND.DROP_NONE;
+		 }
+	} else {
+		if ((operation & operations) == 0) operation = DND.DROP_NONE;
+	}
+	
+	
+	// get allowed transfer types
+	NSPasteboard dragPBoard = draggingState.draggingPasteboard();
+	NSArray draggedTypes = dragPBoard.types();
+	if (draggedTypes == null) return false;
+	
+	int /*long*/ draggedTypeCount = draggedTypes.count();
+	
+	TransferData[] dataTypes = new TransferData[(int)draggedTypeCount];
+	int index = -1;
+	for (int i = 0; i < draggedTypeCount; i++) {
+		id draggedType = draggedTypes.objectAtIndex(i);
+		NSString nativeDataType = new NSString(draggedType);
+		TransferData data = new TransferData();
+		data.type = Transfer.registerType(nativeDataType.getString());
+		
+		for (int j = 0; j < transferAgents.length; j++) {
+			Transfer transfer = transferAgents[j];
+			if (transfer != null && transfer.isSupportedType(data)) {
+				dataTypes[++index] = data;
+				break;
+			}
+		}
+	}
+	if (index == -1) return false;
+	
+	if (index < dataTypes.length - 1) {
+		TransferData[] temp = new TransferData[index + 1];
+		System.arraycopy(dataTypes, 0, temp, 0, index + 1);
+		dataTypes = temp;
+	}
+
+	// Convert from window-relative to global coordinates, and flip it.
+	NSPoint mouse = draggingState.draggingLocation();
+	NSPoint globalMouse = draggingState.draggingDestinationWindow().convertBaseToScreen(mouse);
+	NSArray screens = NSScreen.screens();
+	NSRect screenRect = new NSScreen(screens.objectAtIndex(0)).frame();
+	globalMouse.y = screenRect.height - globalMouse.y;
+	
+	event.widget = this;
+	event.x = (int)globalMouse.x;
+	event.y = (int)globalMouse.y;
+	event.time = (int)System.currentTimeMillis();
+	event.feedback = DND.FEEDBACK_SELECT;
+	event.dataTypes = dataTypes;
+	event.dataType = dataTypes[0];
+	event.operations = operations;
+	event.detail = operation;
+	if (dropEffect != null) {
+		event.item = dropEffect.getItem(event.x, event.y);
+	}
+	
+	return true;
+}
+
+/**
+ * Specifies the data types that can be transferred to this DropTarget.  If data is 
+ * being dragged that does not match one of these types, the drop target will be notified of 
+ * the drag and drop operation but the currentDataType will be null and the operation 
+ * will be DND.NONE.
+ *
+ * @param transferAgents a list of Transfer objects which define the types of data that can be
+ *						 dropped on this target
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if transferAgents is null</li>
+ * </ul>
+ */
+public void setTransfer(Transfer[] transferAgents){
+	if (transferAgents == null) DND.error(SWT.ERROR_NULL_ARGUMENT);
+	this.transferAgents = transferAgents;
+	
+	
+	// Register the types as valid drop types in Cocoa.
+	// Accumulate all of the transfer types into a list.
+	ArrayList typeStrings = new ArrayList();
+	
+	for (int i = 0; i < this.transferAgents.length; i++) {
+		String[] types = transferAgents[i].getTypeNames();
+		
+		for (int j = 0; j < types.length; j++) {
+			typeStrings.add(types[j]);
+		}
+	}
+	
+	// Convert to an NSArray of NSStrings so we can register with the Control.
+	int typeStringCount = typeStrings.size();
+	NSMutableArray nsTypeStrings = NSMutableArray.arrayWithCapacity(typeStringCount);
+	
+	for (int i = 0; i < typeStringCount; i++) {
+		nsTypeStrings.addObject(NSString.stringWith((String)typeStrings.get(i)));
+	}
+	
+	control.view.registerForDraggedTypes(nsTypeStrings);
+
+}
+
+void setDropNotAllowed() {
+	if (!dropNotAllowed) {
+		NSCursor.currentCursor().push();
+		if (OS.PTR_SIZEOF == 4) OS.SetThemeCursor(OS.kThemeNotAllowedCursor);	
+		dropNotAllowed = true;
+	}
+}
+
+void clearDropNotAllowed() {
+	if (dropNotAllowed) {
+		NSCursor.pop();
+		dropNotAllowed = false;
+	}
+}
+
+boolean tableView_acceptDrop_row_dropOperation(int /*long*/ id, int /*long*/ sel, int /*long*/ tableView, int /*long*/ info, int /*long*/ row, int /*long*/ operation) {
+	return drop(new NSObject(info));
+}
+
+int tableView_validateDrop_proposedRow_proposedDropOperation(int /*long*/ id, int /*long*/ sel, int /*long*/ tableView, int /*long*/ info, int /*long*/ row, int /*long*/ operation) {
+	//TODO stop scrolling and expansion when app does not set FEEDBACK_SCROLL and/or FEEDBACK_EXPAND
+	NSTableView widget = new NSTableView(tableView);
+	if (0 <= row && row < widget.numberOfRows()) {
+		widget.setDropRow(row, OS.NSTableViewDropOn);
+	}
+	return opToOsOp(selectedOperation);	
+}
+
+// By returning true we get draggingUpdated messages even when the mouse isn't moving.
+boolean wantsPeriodicDraggingUpdates(int /*long*/ id, int /*long*/ sel) {
+	return true;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/FileTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/FileTransfer.java
new file mode 100644
index 0000000..55b3ed9
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/FileTransfer.java
@@ -0,0 +1,123 @@
+/*******************************************************************************
+ * 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
+ *     Outhink - support for typeFileURL
+ *******************************************************************************/
+package org.eclipse.swt.dnd;
+
+import org.eclipse.swt.internal.cocoa.*;
+ 
+/**
+ * The class <code>FileTransfer</code> provides a platform specific mechanism 
+ * for converting a list of files represented as a java <code>String[]</code> to a 
+ * platform specific representation of the data and vice versa.  
+ * Each <code>String</code> in the array contains the absolute path for a single 
+ * file or directory.
+ * 
+ * <p>An example of a java <code>String[]</code> containing a list of files is shown 
+ * below:</p>
+ * 
+ * <code><pre>
+ *     File file1 = new File("C:\temp\file1");
+ *     File file2 = new File("C:\temp\file2");
+ *     String[] fileData = new String[2];
+ *     fileData[0] = file1.getAbsolutePath();
+ *     fileData[1] = file2.getAbsolutePath();
+ * </code></pre>
+ *
+ * @see Transfer
+ */
+public class FileTransfer extends ByteArrayTransfer {
+	
+	static FileTransfer _instance = new FileTransfer();
+	static final String ID_NAME = OS.NSFilenamesPboardType.getString();
+	static final int ID = registerType(ID_NAME);
+	
+FileTransfer() {}
+
+/**
+ * Returns the singleton instance of the FileTransfer class.
+ *
+ * @return the singleton instance of the FileTransfer class
+ */
+public static FileTransfer getInstance () {
+	return _instance;
+}
+
+/**
+ * This implementation of <code>javaToNative</code> converts a list of file names
+ * represented by a java <code>String[]</code> to a platform specific representation.
+ * Each <code>String</code> in the array contains the absolute path for a single 
+ * file or directory.
+ * 
+ * @param object a java <code>String[]</code> containing the file names to be converted
+ * @param transferData an empty <code>TransferData</code> object that will
+ *  	be filled in on return with the platform specific format of the data
+ * 
+ * @see Transfer#nativeToJava
+ */
+public void javaToNative(Object object, TransferData transferData) {
+	if (!checkFile(object) || !isSupportedType(transferData)) {
+		DND.error(DND.ERROR_INVALID_DATA);
+	}
+	String[] files = (String[])object;
+	int length = files.length;
+	NSMutableArray array = NSMutableArray.arrayWithCapacity(length);
+	for (int i = 0; i < length; i++) {
+		String fileName = files[i];
+		NSString string = NSString.stringWith(fileName);
+		array.addObject(string);
+	}
+	transferData.data = array;
+}
+/**
+ * This implementation of <code>nativeToJava</code> converts a platform specific 
+ * representation of a list of file names to a java <code>String[]</code>.  
+ * Each String in the array contains the absolute path for a single file or directory. 
+ * 
+ * @param transferData the platform specific representation of the data to be converted
+ * @return a java <code>String[]</code> containing a list of file names if the conversion
+ * 		was successful; otherwise null
+ * 
+ * @see Transfer#javaToNative
+ */
+public Object nativeToJava(TransferData transferData) {
+	if (!isSupportedType(transferData) || transferData.data == null) return null;
+	NSArray array = (NSArray) transferData.data;
+	if (array.count() == 0) return null;
+	int count = (int)/*64*/array.count();
+	String[] fileNames = new String[count];
+	for (int i=0; i<count; i++) {
+		NSString string = new NSString(array.objectAtIndex(i));
+		fileNames[i] = string.getString();
+	}
+	return fileNames;
+}
+
+protected int[] getTypeIds(){
+	return new int[] {ID};
+}
+
+protected String[] getTypeNames(){
+	return new String[] {ID_NAME};
+}
+
+boolean checkFile(Object object) {
+	if (object == null || !(object instanceof String[]) || ((String[])object).length == 0) return false;
+	String[] strings = (String[])object;
+	for (int i = 0; i < strings.length; i++) {
+		if (strings[i] == null || strings[i].length() == 0) return false;
+	}
+	return true;
+}
+
+protected boolean validate(Object object) {
+	return checkFile(object);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/HTMLTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/HTMLTransfer.java
new file mode 100644
index 0000000..19044f3
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/HTMLTransfer.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * 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.dnd;
+ 
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * The class <code>HTMLTransfer</code> provides a platform specific mechanism 
+ * for converting text in HTML format represented as a java <code>String</code> 
+ * to a platform specific representation of the data and vice versa.
+ * 
+ * <p>An example of a java <code>String</code> containing HTML text is shown 
+ * below:</p>
+ * 
+ * <code><pre>
+ *     String htmlData = "<p>This is a paragraph of text.</p>";
+ * </code></pre>
+ *
+ * @see Transfer
+ */
+public class HTMLTransfer extends ByteArrayTransfer {
+
+	static HTMLTransfer _instance = new HTMLTransfer();
+	static final String HTML = OS.NSHTMLPboardType.getString();
+	static final int HTMLID = registerType(HTML);
+
+HTMLTransfer() {}
+
+/**
+ * Returns the singleton instance of the HTMLTransfer class.
+ *
+ * @return the singleton instance of the HTMLTransfer class
+ */
+public static HTMLTransfer getInstance () {
+	return _instance;
+}
+
+/**
+ * This implementation of <code>javaToNative</code> converts HTML-formatted text
+ * represented by a java <code>String</code> to a platform specific representation.
+ * 
+ * @param object a java <code>String</code> containing HTML text
+ * @param transferData an empty <code>TransferData</code> object that will
+ *  	be filled in on return with the platform specific format of the data
+ * 
+ * @see Transfer#nativeToJava
+ */
+public void javaToNative (Object object, TransferData transferData){
+	if (!checkHTML(object) || !isSupportedType(transferData)) {
+		DND.error(DND.ERROR_INVALID_DATA);
+	}
+	transferData.data = NSString.stringWith((String) object);
+}
+
+/**
+ * This implementation of <code>nativeToJava</code> converts a platform specific 
+ * representation of HTML text to a java <code>String</code>.
+ * 
+ * @param transferData the platform specific representation of the data to be converted
+ * @return a java <code>String</code> containing HTML text if the conversion was successful;
+ * 		otherwise null
+ * 
+ * @see Transfer#javaToNative
+ */
+public Object nativeToJava(TransferData transferData){
+	if (!isSupportedType(transferData) || transferData.data == null) return null;
+	NSString string = (NSString) transferData.data;
+	return string.getString();
+}
+
+protected int[] getTypeIds() {
+	return new int[] {HTMLID};
+}
+
+protected String[] getTypeNames() {
+	return new String[] {HTML};
+}
+
+boolean checkHTML(Object object) {
+	return (object != null && object instanceof String && ((String)object).length() > 0);
+}
+
+protected boolean validate(Object object) {
+	return checkHTML(object);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/ImageTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/ImageTransfer.java
new file mode 100644
index 0000000..2f05bec
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/ImageTransfer.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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
+ *     Outhink - support for typeFileURL
+ *******************************************************************************/
+package org.eclipse.swt.dnd;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * The class <code>ImageTransfer</code> provides a platform specific mechanism 
+ * for converting an Image represented as a java <code>ImageData</code> to a 
+ * platform specific representation of the data and vice versa.  
+ * 
+ * <p>An example of a java <code>ImageData</code> is shown below:</p>
+ * 
+ * <code><pre>
+ *     Image image = new Image(display, "C:\temp\img1.gif");
+ *	   ImageData imgData = image.getImageData();
+ * </code></pre>
+ *
+ * @see Transfer
+ * 
+ * @since 3.4
+ */
+public class ImageTransfer extends ByteArrayTransfer {
+
+static ImageTransfer _instance = new ImageTransfer();
+static final String TIFF = OS.NSTIFFPboardType.getString();
+static final int TIFFID = registerType(TIFF);
+
+ImageTransfer() {
+}
+
+/**
+ * Returns the singleton instance of the ImageTransfer class.
+ *
+ * @return the singleton instance of the ImageTransfer class
+ */
+public static ImageTransfer getInstance() {
+	return _instance;
+}
+
+/**
+ * This implementation of <code>javaToNative</code> converts an ImageData object represented
+ * by java <code>ImageData</code> to a platform specific representation.
+ * 
+ * @param object a java <code>ImageData</code> containing the ImageData to be converted
+ * @param transferData an empty <code>TransferData</code> object that will
+ *  	be filled in on return with the platform specific format of the data
+ * 
+ * @see Transfer#nativeToJava
+ */
+public void javaToNative(Object object, TransferData transferData) {
+	if (!checkImage(object) || !isSupportedType(transferData)) {
+		DND.error(DND.ERROR_INVALID_DATA);
+	}
+	ImageData imgData = (ImageData) object;
+	Image image = new Image(Display.getCurrent(), imgData);
+	NSImage handle = image.handle;
+	transferData.data = handle.TIFFRepresentation();
+	image.dispose();
+}
+
+/**
+ * This implementation of <code>nativeToJava</code> converts a platform specific 
+ * representation of an image to java <code>ImageData</code>.  
+ * 
+ * @param transferData the platform specific representation of the data to be converted
+ * @return a java <code>ImageData</code> of the image if the conversion was successful;
+ * 		otherwise null
+ * 
+ * @see Transfer#javaToNative
+ */
+public Object nativeToJava(TransferData transferData) {
+	if (!isSupportedType(transferData) || transferData.data == null) return null;
+	NSData data = (NSData) transferData.data;
+	if (data.length() == 0) return null;
+	NSImage nsImage = (NSImage) new NSImage().alloc();
+	nsImage.initWithData(data);
+	//TODO: Image representation wrong???
+	Image image = Image.cocoa_new(Display.getCurrent(), SWT.BITMAP, nsImage);
+	ImageData imageData = image.getImageData();
+	image.dispose();
+	return imageData;
+}
+
+protected int[] getTypeIds() {
+	return new int[] { TIFFID };
+}
+
+protected String[] getTypeNames() {
+	return new String[] { TIFF };
+}
+
+boolean checkImage(Object object) {
+	if (object == null || !(object instanceof ImageData)) return false;
+	return true;
+}
+
+protected boolean validate(Object object) {
+	return checkImage(object);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/RTFTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/RTFTransfer.java
new file mode 100644
index 0000000..f97ed59
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/RTFTransfer.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * 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.dnd;
+ 
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * The class <code>RTFTransfer</code> provides a platform specific mechanism 
+ * for converting text in RTF format represented as a java <code>String</code> 
+ * to a platform specific representation of the data and vice versa.
+ * 
+ * <p>An example of a java <code>String</code> containing RTF text is shown 
+ * below:</p>
+ * 
+ * <code><pre>
+ *     String rtfData = "{\\rtf1{\\colortbl;\\red255\\green0\\blue0;}\\uc1\\b\\i Hello World}";
+ * </code></pre>
+ *
+ * @see Transfer
+ */
+public class RTFTransfer extends ByteArrayTransfer {
+
+	static RTFTransfer _instance = new RTFTransfer();
+	static final String RTF = OS.NSRTFPboardType.getString();
+	static final int RTFID = registerType(RTF);
+
+RTFTransfer() {}
+
+/**
+ * Returns the singleton instance of the RTFTransfer class.
+ *
+ * @return the singleton instance of the RTFTransfer class
+ */
+public static RTFTransfer getInstance () {
+	return _instance;
+}
+
+/**
+ * This implementation of <code>javaToNative</code> converts RTF-formatted text
+ * represented by a java <code>String</code> to a platform specific representation.
+ * 
+ * @param object a java <code>String</code> containing RTF text
+ * @param transferData an empty <code>TransferData</code> object that will
+ *  	be filled in on return with the platform specific format of the data
+ * 
+ * @see Transfer#nativeToJava
+ */
+public void javaToNative (Object object, TransferData transferData){
+	if (!checkRTF(object) || !isSupportedType(transferData)) {
+		DND.error(DND.ERROR_INVALID_DATA);
+	}
+	transferData.data = NSString.stringWith((String) object);
+}
+
+/**
+ * This implementation of <code>nativeToJava</code> converts a platform specific 
+ * representation of RTF text to a java <code>String</code>.
+ * 
+ * @param transferData the platform specific representation of the data to be converted
+ * @return a java <code>String</code> containing RTF text if the conversion was successful;
+ * 		otherwise null
+ * 
+ * @see Transfer#javaToNative
+ */
+public Object nativeToJava(TransferData transferData){
+	if (!isSupportedType(transferData) || transferData.data == null) return null;
+	NSString string = (NSString) transferData.data;
+	return string.getString();
+}
+
+protected int[] getTypeIds() {
+	return new int[] {RTFID};
+}
+
+protected String[] getTypeNames() {
+	return new String[] {RTF};
+}
+
+boolean checkRTF(Object object) {
+	return (object != null && object instanceof String && ((String)object).length() > 0);
+}
+
+protected boolean validate(Object object) {
+	return checkRTF(object);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TableDragSourceEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TableDragSourceEffect.java
new file mode 100644
index 0000000..6d2bcdb
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TableDragSourceEffect.java
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides default implementations to display a source image
+ * when a drag is initiated from a <code>Table</code>.
+ * 
+ * <p>Classes that wish to provide their own source image for a <code>Table</code> can
+ * extend the <code>TableDragSourceEffect</code> class, override the 
+ * <code>TableDragSourceEffect.dragStart</code> method and set the field 
+ * <code>DragSourceEvent.image</code> with their own image.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag source effect implementation.
+ *
+ * @see DragSourceEffect
+ * @see DragSourceEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TableDragSourceEffect extends DragSourceEffect {
+	Image dragSourceImage = null;
+	
+	/**
+	 * Creates a new <code>TableDragSourceEffect</code> to handle drag effect 
+	 * from the specified <code>Table</code>.
+	 *
+	 * @param table the <code>Table</code> that the user clicks on to initiate the drag
+	 */
+	public TableDragSourceEffect(Table table) {
+		super(table);
+	}
+
+	/**
+	 * This implementation of <code>dragFinished</code> disposes the image
+	 * that was created in <code>TableDragSourceEffect.dragStart</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragFinished(event)</code>
+	 * to dispose the image in the default implementation.
+	 * 
+	 * @param event the information associated with the drag finished event
+	 */
+	public void dragFinished(DragSourceEvent event) {
+		if (dragSourceImage != null) dragSourceImage.dispose();
+		dragSourceImage = null;		
+	}
+	
+	/**
+	 * This implementation of <code>dragStart</code> will create a default
+	 * image that will be used during the drag. The image should be disposed
+	 * when the drag is completed in the <code>TableDragSourceEffect.dragFinished</code>
+	 * method.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragStart(event)</code>
+	 * to use the image from the default implementation.
+	 * 
+	 * @param event the information associated with the drag start event
+	 */
+	public void dragStart(DragSourceEvent event) {
+		event.image = getDragSourceImage(event);
+	}
+	
+	Image getDragSourceImage(DragSourceEvent event) {
+		if (dragSourceImage != null) dragSourceImage.dispose();
+		dragSourceImage = null;		
+		NSPoint point = new NSPoint();
+		int /*long*/ ptr = OS.malloc(NSPoint.sizeof);
+		OS.memmove(ptr, point, NSPoint.sizeof);
+		NSEvent nsEvent = NSApplication.sharedApplication().currentEvent();
+		NSTableView widget = (NSTableView)control.view;
+		NSImage nsImage = widget.dragImageForRowsWithIndexes(widget.selectedRowIndexes(), widget.tableColumns(), nsEvent, ptr);
+		OS.memmove(point, ptr, NSPoint.sizeof);
+		OS.free(ptr);
+		//TODO: Image representation wrong???
+		Image image = Image.cocoa_new(control.getDisplay(), SWT.BITMAP, nsImage);
+		dragSourceImage = image;
+		nsImage.retain();
+		event.offsetX = (int)point.x;
+		event.offsetY = (int)point.y;
+		return image;
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TableDropTargetEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TableDropTargetEffect.java
new file mode 100644
index 0000000..6fdf4f7
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TableDropTargetEffect.java
@@ -0,0 +1,119 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets.*;
+
+/**
+ * This class provides a default drag under effect (eg. select, insert and scroll) 
+ * when a drag occurs over a <code>Table</code>.
+ * 
+ * <p>Classes that wish to provide their own drag under effect for a <code>Table</code>
+ * can extend the <code>TableDropTargetEffect</code> and override any applicable methods 
+ * in <code>TableDropTargetEffect</code> to display their own drag under effect.</p>
+ * 
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * <p>The feedback value is either one of the FEEDBACK constants defined in 
+ * class <code>DND</code> which is applicable to instances of this class, 
+ * or it must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> effect constants. 
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Feedback:</b></dt>
+ * <dd>FEEDBACK_SELECT, FEEDBACK_SCROLL</dd>
+ * </dl>
+ * </p>
+ * 
+ * @see DropTargetAdapter
+ * @see DropTargetEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TableDropTargetEffect extends DropTargetEffect {
+	
+	/**
+	 * Creates a new <code>TableDropTargetEffect</code> to handle the drag under effect on the specified 
+	 * <code>Table</code>.
+	 * 
+	 * @param table the <code>Table</code> over which the user positions the cursor to drop the data
+	 */
+	public TableDropTargetEffect(Table table) {
+		super(table);
+	}
+
+	int checkEffect(int effect) {
+		// Some effects are mutually exclusive.  Make sure that only one of the mutually exclusive effects has been specified.
+		if ((effect & DND.FEEDBACK_SELECT) != 0) effect = effect & ~DND.FEEDBACK_INSERT_AFTER & ~DND.FEEDBACK_INSERT_BEFORE;
+		if ((effect & DND.FEEDBACK_INSERT_BEFORE) != 0) effect = effect & ~DND.FEEDBACK_INSERT_AFTER;
+		return effect;
+	}
+	
+	/**
+	 * This implementation of <code>dragEnter</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragEnter</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragEnter(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag enter event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 */
+	public void dragEnter(DropTargetEvent event) {
+	}
+
+	/**
+	 * This implementation of <code>dragLeave</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>. 
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragLeave</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragLeave(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag leave event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 */
+	public void dragLeave(DropTargetEvent event) {
+	}
+
+	/**
+	 * This implementation of <code>dragOver</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>. The class description 
+	 * lists the FEEDBACK constants that are applicable to the class.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragOver</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragOver(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag over event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 * @see DND#FEEDBACK_SELECT
+	 * @see DND#FEEDBACK_SCROLL
+	 */
+	public void dragOver(DropTargetEvent event) {
+		int effect = checkEffect(event.feedback);
+		((DropTarget)event.widget).feedback = effect;
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TextTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TextTransfer.java
new file mode 100644
index 0000000..ac7ab05
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TextTransfer.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.internal.cocoa.*;
+ 
+/**
+ * The class <code>TextTransfer</code> provides a platform specific mechanism 
+ * for converting plain text represented as a java <code>String</code> 
+ * to a platform specific representation of the data and vice versa.
+ * 
+ * <p>An example of a java <code>String</code> containing plain text is shown 
+ * below:</p>
+ * 
+ * <code><pre>
+ *     String textData = "Hello World";
+ * </code></pre>
+ * 
+ * @see Transfer
+ */
+public class TextTransfer extends ByteArrayTransfer {
+
+	static TextTransfer _instance = new TextTransfer();
+	
+	static final String ID_NAME = OS.NSStringPboardType.getString();
+	static final int ID = registerType(ID_NAME);
+
+TextTransfer() {}
+
+/**
+ * Returns the singleton instance of the TextTransfer class.
+ *
+ * @return the singleton instance of the TextTransfer class
+ */
+public static TextTransfer getInstance () {
+	return _instance;
+}
+
+/**
+ * This implementation of <code>javaToNative</code> converts plain text
+ * represented by a java <code>String</code> to a platform specific representation.
+ * 
+ * @param object a java <code>String</code> containing text
+ * @param transferData an empty <code>TransferData</code> object that will
+ *  	be filled in on return with the platform specific format of the data
+ *  
+ * @see Transfer#nativeToJava
+ */
+public void javaToNative (Object object, TransferData transferData) {
+	if (!checkText(object) || !isSupportedType(transferData)) {
+		DND.error(DND.ERROR_INVALID_DATA);
+	}
+	transferData.data = NSString.stringWith((String) object);
+}
+
+/**
+ * This implementation of <code>nativeToJava</code> converts a platform specific 
+ * representation of plain text to a java <code>String</code>.
+ * 
+ * @param transferData the platform specific representation of the data to be converted
+ * @return a java <code>String</code> containing text if the conversion was successful; otherwise null
+ * 
+ * @see Transfer#javaToNative
+ */
+public Object nativeToJava(TransferData transferData){
+	if (!isSupportedType(transferData) || transferData.data == null) return null;
+	NSString string = (NSString) transferData.data;
+	return string.getString();
+}
+
+protected int[] getTypeIds() {
+	return new int[] {ID};
+}
+
+protected String[] getTypeNames() {
+	return new String[] {ID_NAME};
+}
+
+boolean checkText(Object object) {
+	return (object != null && object instanceof String && ((String)object).length() > 0);
+}
+protected boolean validate(Object object) {
+	return checkText(object);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/Transfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/Transfer.java
new file mode 100644
index 0000000..b6d42fc
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/Transfer.java
@@ -0,0 +1,166 @@
+/*******************************************************************************
+ * 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.dnd;
+
+ 
+/**
+ * <code>Transfer</code> provides a mechanism for converting between a java 
+ * representation of data and a platform specific representation of data and 
+ * vice versa.  It is used in data transfer operations such as drag and drop and 
+ * clipboard copy/paste.
+ *
+ * <p>You should only need to become familiar with this class if you are 
+ * implementing a Transfer subclass and you are unable to subclass the 
+ * ByteArrayTransfer class.</p>
+ * 
+ * @see ByteArrayTransfer
+ * @see <a href="http://www.eclipse.org/swt/snippets/#dnd">Drag and Drop snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: DNDExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public abstract class Transfer {
+
+static String[] TYPES = new String[4];
+
+/**
+ * Returns a list of the platform specific data types that can be converted using 
+ * this transfer agent.
+ *
+ * <p>Only the data type fields of the <code>TransferData</code> objects are filled 
+ * in.</p>
+ *
+ * @return a list of the data types that can be converted using this transfer agent
+ */
+abstract public TransferData[] getSupportedTypes();
+
+/**
+ * Returns true if the <code>TransferData</code> data type can be converted 
+ * using this transfer agent, or false otherwise (including if transferData is
+ * <code>null</code>).
+ *
+ * @param transferData a platform specific description of a data type; only the data
+ *  type fields of the <code>TransferData</code> object need to be filled in
+ *
+ * @return true if the transferData data type can be converted using this transfer 
+ * agent
+ */
+abstract public boolean isSupportedType(TransferData transferData);
+
+/**
+ * Returns the platform specific ids of the  data types that can be converted using 
+ * this transfer agent.
+ * 
+ * @return the platform specific ids of the data types that can be converted using 
+ * this transfer agent
+ */
+abstract protected int[] getTypeIds();
+
+/**
+ * Returns the platform specific names of the  data types that can be converted 
+ * using this transfer agent.
+ * 
+ * @return the platform specific names of the data types that can be converted 
+ * using this transfer agent.
+ */
+abstract protected String[] getTypeNames();
+
+/**
+ * Converts a java representation of data to a platform specific representation of 
+ * the data. 
+ *
+ * <p>On a successful conversion, the transferData.result field will be set as follows:
+ * <ul>
+ * <li>Windows: COM.S_OK
+ * <li>Motif: 1
+ * <li>GTK: 1
+ * <li>Photon: 1
+ * </ul></p>
+ * 
+ * <p>If this transfer agent is unable to perform the conversion, the transferData.result 
+ * field will be set to a failure value as follows:
+ * <ul>
+ * <li>Windows: COM.DV_E_TYMED or COM.E_FAIL
+ * <li>Motif: 0
+ * <li>GTK: 0
+ * <li>Photon: 0
+ * </ul></p>
+ *
+ * @param object a java representation of the data to be converted; the type of
+ * Object that is passed in is dependent on the <code>Transfer</code> subclass.
+ *
+ * @param transferData an empty TransferData object; this object will be 
+ * filled in on return with the platform specific representation of the data
+ * 
+ * @exception org.eclipse.swt.SWTException <ul>
+ *    <li>ERROR_INVALID_DATA - if object does not contain data in a valid format or is <code>null</code></li>
+ * </ul>
+ */
+abstract protected void javaToNative (Object object, TransferData transferData);
+
+/**
+ * Converts a platform specific representation of data to a java representation.
+ * 
+ * @param transferData the platform specific representation of the data to be 
+ * converted
+ *
+ * @return a java representation of the converted data if the conversion was 
+ * successful; otherwise null.  If transferData is <code>null</code> then
+ * <code>null</code> is returned.  The type of Object that is returned is 
+ * dependent on the <code>Transfer</code> subclass.
+ */
+abstract protected Object nativeToJava(TransferData transferData);
+
+/**
+ * Registers a name for a data type and returns the associated unique identifier.
+ *
+ * <p>You may register the same type more than once, the same unique identifier 
+ * will be returned if the type has been previously registered.</p>
+ *
+ * <p>Note: On windows, do <b>not</b> call this method with pre-defined 
+ * Clipboard Format types such as CF_TEXT or CF_BITMAP because the 
+ * pre-defined identifier will not be returned</p>
+ *
+ * @param formatName the name of a data type
+ *
+ * @return the unique identifier associated with this data type
+ */
+public static int registerType(String formatName) {
+	/* Note the type 0 is not used */
+	int index = 1;
+	while (index < TYPES.length) {
+		String type = TYPES[index];
+		if (type != null && formatName.equals(type)) {
+			return index;
+		}
+		index++;
+	}
+	if (index == TYPES.length) {
+		String[] newTypes = new String[TYPES.length + 4];
+		System.arraycopy(TYPES, 0, newTypes, 0, TYPES.length);
+		TYPES = newTypes;
+	}
+	TYPES[index] = formatName;
+	return index;
+}
+
+/**
+ * Test that the object is of the correct format for this Transfer class.
+ * 
+ * @param object a java representation of the data to be converted
+ * 
+ * @return true if object is of the correct form for this transfer type
+ * 
+ * @since 3.1
+ */
+protected boolean validate(Object object) {
+	return true;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TransferData.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TransferData.java
new file mode 100644
index 0000000..31a52da
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TransferData.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.internal.cocoa.*;
+
+ 
+/**
+ * The <code>TransferData</code> class is a platform specific data structure for
+ * describing the type and the contents of data being converted by a transfer agent.
+ *
+ * <p>As an application writer, you do not need to know the specifics of 
+ * TransferData.  TransferData instances are passed to a subclass of Transfer 
+ * and the Transfer object manages the platform specific issues.  
+ * You can ask a Transfer subclass if it can handle this data by calling 
+ * Transfer.isSupportedType(transferData).</p>
+ *
+ * <p>You should only need to become familiar with the fields in this class if you 
+ * are implementing a Transfer subclass and you are unable to subclass the 
+ * ByteArrayTransfer class.</p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public class TransferData {
+	/**
+	 * The type is a unique identifier of a system format or user defined format.
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public int type;
+	
+	/**
+	 * The data being transferred.
+	 * The data field may contain multiple values.
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public NSObject data;
+	
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TreeDragSourceEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TreeDragSourceEffect.java
new file mode 100644
index 0000000..f3f85a9
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TreeDragSourceEffect.java
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides default implementations to display a source image
+ * when a drag is initiated from a <code>Tree</code>.
+ * 
+ * <p>Classes that wish to provide their own source image for a <code>Tree</code> can
+ * extend <code>TreeDragSourceEffect</code> class and override the <code>TreeDragSourceEffect.dragStart</code>
+ * method and set the field <code>DragSourceEvent.image</code> with their own image.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * @see DragSourceEffect
+ * @see DragSourceEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TreeDragSourceEffect extends DragSourceEffect {
+	Image dragSourceImage = null;
+
+	/**
+	 * Creates a new <code>TreeDragSourceEffect</code> to handle drag effect 
+	 * from the specified <code>Tree</code>.
+	 *
+	 * @param tree the <code>Tree</code> that the user clicks on to initiate the drag
+	 */
+	public TreeDragSourceEffect(Tree tree) {
+		super(tree);
+	}
+
+	/**
+	 * This implementation of <code>dragFinished</code> disposes the image
+	 * that was created in <code>TreeDragSourceEffect.dragStart</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragFinished(event)</code>
+	 * to dispose the image in the default implementation.
+	 * 
+	 * @param event the information associated with the drag finished event
+	 */
+	public void dragFinished(DragSourceEvent event) {
+		if (dragSourceImage != null) dragSourceImage.dispose();
+		dragSourceImage = null;
+	}
+
+	/**
+	 * This implementation of <code>dragStart</code> will create a default
+	 * image that will be used during the drag. The image should be disposed
+	 * when the drag is completed in the <code>TreeDragSourceEffect.dragFinished</code>
+	 * method.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragStart(event)</code>
+	 * to use the image from the default implementation.
+	 * 
+	 * @param event the information associated with the drag start event
+	 */
+	public void dragStart(DragSourceEvent event) {
+		event.image = getDragSourceImage(event);
+	}
+
+	Image getDragSourceImage(DragSourceEvent event) {
+		if (dragSourceImage != null) dragSourceImage.dispose();
+		dragSourceImage = null;		
+		NSPoint point = new NSPoint();
+		int /*long*/ ptr = OS.malloc(NSPoint.sizeof);
+		OS.memmove(ptr, point, NSPoint.sizeof);
+		NSEvent nsEvent = NSApplication.sharedApplication().currentEvent();
+		NSTableView widget = (NSTableView)control.view;
+		NSImage nsImage = widget.dragImageForRowsWithIndexes(widget.selectedRowIndexes(), widget.tableColumns(), nsEvent, ptr);
+		OS.memmove(point, ptr, NSPoint.sizeof);
+		OS.free(ptr);
+		//TODO: Image representation wrong???
+		Image image = Image.cocoa_new(control.getDisplay(), SWT.BITMAP, nsImage);
+		dragSourceImage = image;
+		nsImage.retain();
+		event.offsetX = (int)point.x;
+		event.offsetY = (int)point.y;
+		return image;
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TreeDropTargetEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TreeDropTargetEffect.java
new file mode 100644
index 0000000..fac1c86
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/TreeDropTargetEffect.java
@@ -0,0 +1,123 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets.*;
+
+/**
+ * This class provides a default drag under effect (eg. select, insert, scroll and expand) 
+ * when a drag occurs over a <code>Tree</code>.
+ * 
+ * <p>Classes that wish to provide their own drag under effect for a <code>Tree</code>
+ * can extend the <code>TreeDropTargetEffect</code> class and override any applicable methods 
+ * in <code>TreeDropTargetEffect</code> to display their own drag under effect.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * <p>The feedback value is either one of the FEEDBACK constants defined in 
+ * class <code>DND</code> which is applicable to instances of this class, 
+ * or it must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> effect constants. 
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Feedback:</b></dt>
+ * <dd>FEEDBACK_SELECT, FEEDBACK_INSERT_BEFORE, FEEDBACK_INSERT_AFTER, FEEDBACK_EXPAND, FEEDBACK_SCROLL</dd>
+ * </dl>
+ * </p><p>
+ * Note: Only one of the styles FEEDBACK_SELECT, FEEDBACK_INSERT_BEFORE or
+ * FEEDBACK_INSERT_AFTER may be specified.
+ * </p>
+ * 
+ * @see DropTargetAdapter
+ * @see DropTargetEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TreeDropTargetEffect extends DropTargetEffect {
+
+	/**
+	 * Creates a new <code>TreeDropTargetEffect</code> to handle the drag under effect on the specified 
+	 * <code>Tree</code>.
+	 * 
+	 * @param tree the <code>Tree</code> over which the user positions the cursor to drop the data
+	 */
+	public TreeDropTargetEffect(Tree tree) {
+		super(tree);
+	}
+
+	int checkEffect(int effect) {
+		// Some effects are mutually exclusive.  Make sure that only one of the mutually exclusive effects has been specified.
+		if ((effect & DND.FEEDBACK_SELECT) != 0) effect = effect & ~DND.FEEDBACK_INSERT_AFTER & ~DND.FEEDBACK_INSERT_BEFORE;
+		if ((effect & DND.FEEDBACK_INSERT_BEFORE) != 0) effect = effect & ~DND.FEEDBACK_INSERT_AFTER;
+		return effect;
+	}
+
+	/**
+	 * This implementation of <code>dragEnter</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragEnter</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragEnter(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag enter event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 */
+	public void dragEnter(DropTargetEvent event) {
+	}
+
+	/**
+	 * This implementation of <code>dragLeave</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragLeave</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragLeave(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag leave event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 */
+	public void dragLeave(DropTargetEvent event) {
+	}
+
+	/**
+	 * This implementation of <code>dragOver</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragOver</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragOver(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag over event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 * @see DND#FEEDBACK_SELECT
+	 * @see DND#FEEDBACK_INSERT_BEFORE
+	 * @see DND#FEEDBACK_INSERT_AFTER
+	 * @see DND#FEEDBACK_SCROLL
+	 */
+	public void dragOver(DropTargetEvent event) {
+		int effect = checkEffect(event.feedback);		
+		((DropTarget)event.widget).feedback = effect;
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/URLTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/URLTransfer.java
new file mode 100644
index 0000000..cc23c22
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/cocoa/org/eclipse/swt/dnd/URLTransfer.java
Binary files differ
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DragSourceEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DragSourceEffect.java
new file mode 100644
index 0000000..a1acc69
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DragSourceEffect.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.dnd;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides default implementations to display a drag source
+ * effect during a drag and drop operation. The current implementation
+ * does not provide any visual feedback. 
+ * 
+ * <p>The drag source effect has the same API as the 
+ * <code>DragSourceAdapter</code> so that it can provide custom visual 
+ * feedback when a <code>DragSourceEvent</code> occurs. 
+ * </p>
+ * 
+ * <p>Classes that wish to provide their own drag source effect such as
+ * displaying a default source image during a drag can extend the <code>DragSourceEffect</code> 
+ * class, override the <code>DragSourceAdapter.dragStart</code> method and set 
+ * the field <code>DragSourceEvent.image</code> with their own image.
+ * The image should be disposed when <code>DragSourceAdapter.dragFinished</code> is called.
+ * </p> 
+ *
+ * @see DragSourceAdapter
+ * @see DragSourceEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class DragSourceEffect extends DragSourceAdapter {
+	Control control = null;
+
+	/**
+	 * Creates a new <code>DragSourceEffect</code> to handle drag effect from the specified <code>Control</code>.
+	 *
+	 * @param control the <code>Control</code> that the user clicks on to initiate the drag
+	 * 
+	 * @exception IllegalArgumentException <ul>
+	 *    <li>ERROR_NULL_ARGUMENT - if the control is null</li>
+	 * </ul>
+	 */
+	public DragSourceEffect(Control control) {
+		if (control == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		this.control = control;
+	}
+
+	/**
+	 * Returns the Control which is registered for this DragSourceEffect.  This is the control that the 
+	 * user clicks in to initiate dragging.
+	 *
+	 * @return the Control which is registered for this DragSourceEffect
+	 */
+	public Control getControl() {
+		return control;
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DropTargetEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DropTargetEffect.java
new file mode 100644
index 0000000..c8f4286
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/common/org/eclipse/swt/dnd/DropTargetEffect.java
@@ -0,0 +1,170 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.dnd;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.widgets.*;
+
+
+/**
+ * This class provides a default drag under effect during a drag and drop. 
+ * The current implementation does not provide any visual feedback.
+ * 
+ * <p>The drop target effect has the same API as the 
+ * <code>DropTargetAdapter</code> so that it can provide custom visual 
+ * feedback when a <code>DropTargetEvent</code> occurs. 
+ * </p>
+ * 
+ * <p>Classes that wish to provide their own drag under effect
+ * can extend the <code>DropTargetEffect</code> and override any applicable methods 
+ * in <code>DropTargetAdapter</code> to display their own drag under effect.</p>
+ *
+ * <p>The feedback value is either one of the FEEDBACK constants defined in 
+ * class <code>DND</code> which is applicable to instances of this class, 
+ * or it must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> effect constants. 
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Feedback:</b></dt>
+ * <dd>FEEDBACK_EXPAND, FEEDBACK_INSERT_AFTER, FEEDBACK_INSERT_BEFORE, 
+ * FEEDBACK_NONE, FEEDBACK_SELECT, FEEDBACK_SCROLL</dd>
+ * </dl>
+ * </p>
+ * 
+ * @see DropTargetAdapter
+ * @see DropTargetEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class DropTargetEffect extends DropTargetAdapter {
+	Control control;
+
+	/**
+	 * Creates a new <code>DropTargetEffect</code> to handle the drag under effect on the specified 
+	 * <code>Control</code>.
+	 * 
+	 * @param control the <code>Control</code> over which the user positions the cursor to drop the data
+	 * 
+	 * @exception IllegalArgumentException <ul>
+	 *    <li>ERROR_NULL_ARGUMENT - if the control is null</li>
+	 * </ul>
+	 */
+	public DropTargetEffect(Control control) {
+		if (control == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		this.control = control;
+	}
+
+	/**
+	 * Returns the Control which is registered for this DropTargetEffect.  This is the control over which the 
+	 * user positions the cursor to drop the data.
+	 *
+	 * @return the Control which is registered for this DropTargetEffect
+	 */
+	public Control getControl() {
+		return control;
+	}
+	
+	/**
+	 * Returns the item at the given x-y coordinate in the receiver
+	 * or null if no such item exists. The x-y coordinate is in the
+	 * display relative coordinates.
+	 *
+	 * @param x the x coordinate used to locate the item
+	 * @param y the y coordinate used to locate the item
+	 * @return the item at the given x-y coordinate, or null if the coordinate is not in a selectable item
+	 */
+	public Widget getItem(int x, int y) {
+		if (control instanceof Table) {
+			return getItem((Table) control, x, y);
+		}
+		if (control instanceof Tree) {
+			return getItem((Tree) control, x, y);
+		}			
+		return null;
+	}
+	
+	Widget getItem(Table table, int x, int y) {
+		Point coordinates = new Point(x, y);
+		coordinates = table.toControl(coordinates);
+		TableItem item = table.getItem(coordinates);
+		if (item != null) return item;
+		Rectangle area = table.getClientArea();
+		int tableBottom = area.y + area.height;
+		int itemCount = table.getItemCount();
+		for (int i=table.getTopIndex(); i<itemCount; i++) {
+			item = table.getItem(i);
+			Rectangle rect = item.getBounds();
+			rect.x = area.x;
+			rect.width = area.width;
+			if (rect.contains(coordinates)) return item;
+			if (rect.y > tableBottom) break;
+		}
+		return null;
+	}
+	
+	Widget getItem(Tree tree, int x, int y) {
+		Point point = new Point(x, y);
+		point = tree.toControl(point);
+		TreeItem item = tree.getItem(point);
+		if (item == null) {
+			Rectangle area = tree.getClientArea();
+			if (area.contains(point)) {
+				int treeBottom = area.y + area.height;
+				item = tree.getTopItem();
+				while (item != null) {
+					Rectangle rect = item.getBounds();
+					int itemBottom = rect.y + rect.height;
+					if (rect.y <= point.y && point.y < itemBottom) return item;
+					if (itemBottom > treeBottom) break;
+					item = nextItem(tree, item);
+				}
+				return null;
+			}
+		}
+		return item;
+	}
+	
+	TreeItem nextItem(Tree tree, TreeItem item) {
+		if (item == null) return null;
+		if (item.getExpanded() && item.getItemCount() > 0) return item.getItem(0);
+		TreeItem childItem = item;
+		TreeItem parentItem = childItem.getParentItem();
+		int index = parentItem == null ? tree.indexOf(childItem) : parentItem.indexOf(childItem);
+		int count = parentItem == null ? tree.getItemCount() : parentItem.getItemCount();
+		while (true) {
+			if (index + 1 < count) return parentItem == null ? tree.getItem(index + 1) : parentItem.getItem(index + 1);
+			if (parentItem == null) return null;
+			childItem = parentItem;
+			parentItem = childItem.getParentItem();
+			index = parentItem == null ? tree.indexOf(childItem) : parentItem.indexOf(childItem);
+			count = parentItem == null ? tree.getItemCount() : parentItem.getItemCount();
+		}
+	}
+	
+	TreeItem previousItem(Tree tree, TreeItem item) {
+		if (item == null) return null;
+		TreeItem childItem = item;
+		TreeItem parentItem = childItem.getParentItem();
+		int index = parentItem == null ? tree.indexOf(childItem) : parentItem.indexOf(childItem);
+		if (index == 0) return parentItem;
+		TreeItem nextItem = parentItem == null ? tree.getItem(index-1) : parentItem.getItem(index-1);
+		int count = nextItem.getItemCount();
+		while (count > 0 && nextItem.getExpanded()) {
+			nextItem = nextItem.getItem(count - 1);
+			count = nextItem.getItemCount();
+		}
+		return nextItem;
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/ImageTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/ImageTransfer.java
new file mode 100644
index 0000000..8e5c3a4
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/ImageTransfer.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.dnd;
+
+/**
+ * The class <code>ImageTransfer</code> provides a platform specific mechanism 
+ * for converting an Image represented as a java <code>ImageData</code> to a 
+ * platform specific representation of the data and vice versa.  
+ * 
+ * <p>An example of a java <code>ImageData</code> is shown below:</p>
+ * 
+ * <code><pre>
+ *     Image image = new Image(display, "C:\temp\img1.gif");
+ *	   ImageData imgData = image.getImageData();
+ * </code></pre>
+ *
+ * @see Transfer
+ * 
+ * @since 3.4
+ */
+public class ImageTransfer extends ByteArrayTransfer {
+	
+private ImageTransfer() {}
+
+/**
+ * Returns the singleton instance of the ImageTransfer class.
+ *
+ * @return the singleton instance of the ImageTransfer class
+ */
+public static ImageTransfer getInstance () {
+	return null;
+}
+
+/**
+ * This implementation of <code>javaToNative</code> converts an ImageData object represented
+ * by java <code>ImageData</code> to a platform specific representation.
+ * 
+ * @param object a java <code>ImageData</code> containing the ImageData to be converted
+ * @param transferData an empty <code>TransferData</code> object that will
+ *  	be filled in on return with the platform specific format of the data
+ * 
+ * @see Transfer#nativeToJava
+ */
+public void javaToNative(Object object, TransferData transferData) {
+}
+
+/**
+ * This implementation of <code>nativeToJava</code> converts a platform specific 
+ * representation of an image to java <code>ImageData</code>.  
+ * 
+ * @param transferData the platform specific representation of the data to be converted
+ * @return a java <code>ImageData</code> of the image if the conversion was successful;
+ * 		otherwise null
+ * 
+ * @see Transfer#javaToNative
+ */
+public Object nativeToJava(TransferData transferData) {
+	return null;
+}
+
+protected int[] getTypeIds(){
+	return null;
+}
+
+protected String[] getTypeNames(){
+	return null;
+}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/TableDragSourceEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/TableDragSourceEffect.java
new file mode 100644
index 0000000..b7dbda5
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/TableDragSourceEffect.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.dnd;
+
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides default implementations to display a source image
+ * when a drag is initiated from a <code>Table</code>.
+ * 
+ * <p>Classes that wish to provide their own source image for a <code>Table</code> can
+ * extend the <code>TableDragSourceEffect</code> class, override the 
+ * <code>TableDragSourceEffect.dragStart</code> method and set the field 
+ * <code>DragSourceEvent.image</code> with their own image.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag source effect implementation.
+ *
+ * @see DragSourceEffect
+ * @see DragSourceEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TableDragSourceEffect extends DragSourceEffect {
+	/**
+	 * Creates a new <code>TableDragSourceEffect</code> to handle drag effect 
+	 * from the specified <code>Table</code>.
+	 *
+	 * @param table the <code>Table</code> that the user clicks on to initiate the drag
+	 */
+	public TableDragSourceEffect(Table table) {
+		super(table);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/TableDropTargetEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/TableDropTargetEffect.java
new file mode 100644
index 0000000..8818ec6
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/TableDropTargetEffect.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides a default drag under effect (eg. select, insert and scroll) 
+ * when a drag occurs over a <code>Table</code>.
+ * 
+ * <p>Classes that wish to provide their own drag under effect for a <code>Table</code>
+ * can extend the <code>TableDropTargetEffect</code> and override any applicable methods 
+ * in <code>TableDropTargetEffect</code> to display their own drag under effect.</p>
+ * 
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * <p>The feedback value is either one of the FEEDBACK constants defined in 
+ * class <code>DND</code> which is applicable to instances of this class, 
+ * or it must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> effect constants. 
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Feedback:</b></dt>
+ * <dd>FEEDBACK_SELECT, FEEDBACK_SCROLL</dd>
+ * </dl>
+ * </p>
+ * 
+ * @see DropTargetAdapter
+ * @see DropTargetEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TableDropTargetEffect extends DropTargetEffect {
+	/**
+	 * Creates a new <code>TableDropTargetEffect</code> to handle the drag under effect on the specified 
+	 * <code>Table</code>.
+	 * 
+	 * @param table the <code>Table</code> over which the user positions the cursor to drop the data
+	 */
+	public TableDropTargetEffect(Table table) {
+		super(table);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/TreeDragSourceEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/TreeDragSourceEffect.java
new file mode 100644
index 0000000..7a66beb
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/TreeDragSourceEffect.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.dnd;
+
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides default implementations to display a source image
+ * when a drag is initiated from a <code>Tree</code>.
+ * 
+ * <p>Classes that wish to provide their own source image for a <code>Tree</code> can
+ * extend <code>TreeDragSourceEffect</code> class and override the <code>TreeDragSourceEffect.dragStart</code>
+ * method and set the field <code>DragSourceEvent.image</code> with their own image.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * @see DragSourceEffect
+ * @see DragSourceEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TreeDragSourceEffect extends DragSourceEffect {
+	/**
+	 * Creates a new <code>TreeDragSourceEffect</code> to handle drag effect 
+	 * from the specified <code>Tree</code>.
+	 *
+	 * @param tree the <code>Tree</code> that the user clicks on to initiate the drag
+	 */
+	public TreeDragSourceEffect(Tree tree) {
+		super(tree);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/TreeDropTargetEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/TreeDropTargetEffect.java
new file mode 100644
index 0000000..348c374
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/TreeDropTargetEffect.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides a default drag under effect (eg. select, insert, scroll and expand) 
+ * when a drag occurs over a <code>Tree</code>.
+ * 
+ * <p>Classes that wish to provide their own drag under effect for a <code>Tree</code>
+ * can extend the <code>TreeDropTargetEffect</code> class and override any applicable methods 
+ * in <code>TreeDropTargetEffect</code> to display their own drag under effect.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * <p>The feedback value is either one of the FEEDBACK constants defined in 
+ * class <code>DND</code> which is applicable to instances of this class, 
+ * or it must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> effect constants. 
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Feedback:</b></dt>
+ * <dd>FEEDBACK_SELECT, FEEDBACK_INSERT_BEFORE, FEEDBACK_INSERT_AFTER, FEEDBACK_EXPAND, FEEDBACK_SCROLL</dd>
+ * </dl>
+ * </p><p>
+ * Note: Only one of the styles FEEDBACK_SELECT, FEEDBACK_INSERT_BEFORE or
+ * FEEDBACK_INSERT_AFTER may be specified.
+ * </p>
+ * 
+ * @see DropTargetAdapter
+ * @see DropTargetEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TreeDropTargetEffect extends DropTargetEffect {
+	/**
+	 * Creates a new <code>TreeDropTargetEffect</code> to handle the drag under effect on the specified 
+	 * <code>Tree</code>.
+	 * 
+	 * @param tree the <code>Tree</code> over which the user positions the cursor to drop the data
+	 */
+	public TreeDropTargetEffect(Tree tree) {
+		super(tree);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/URLTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/URLTransfer.java
new file mode 100644
index 0000000..589d3ec
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/emulated/org/eclipse/swt/dnd/URLTransfer.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 20007 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;
+
+/**
+ * The class <code>URLTransfer</code> provides a platform specific mechanism 
+ * for converting text in URL format represented as a java <code>String</code> 
+ * to a platform specific representation of the data and vice versa. The string
+ * must contain a fully specified url.
+ * 
+ * <p>An example of a java <code>String</code> containing a URL is shown below:</p>
+ * 
+ * <code><pre>
+ *     String url = "http://www.eclipse.org";
+ * </code></pre>
+ *
+ * @see Transfer
+ * @since 3.4
+ */
+public class URLTransfer extends ByteArrayTransfer {
+
+private URLTransfer() {}
+
+/**
+ * Returns the singleton instance of the URLTransfer class.
+ *
+ * @return the singleton instance of the URLTransfer class
+ */
+public static URLTransfer getInstance () {
+	return null;
+}
+
+/**
+ * This implementation of <code>javaToNative</code> converts a URL
+ * represented by a java <code>String</code> to a platform specific representation.
+ * 
+ * @param object a java <code>String</code> containing a URL
+ * @param transferData an empty <code>TransferData</code> object that will
+ *  	be filled in on return with the platform specific format of the data
+ * 
+ * @see Transfer#nativeToJava
+ */
+public void javaToNative (Object object, TransferData transferData){
+}
+
+/**
+ * This implementation of <code>nativeToJava</code> converts a platform 
+ * specific representation of a URL to a java <code>String</code>.
+ * 
+ * @param transferData the platform specific representation of the data to be converted
+ * @return a java <code>String</code> containing a URL if the conversion was successful;
+ * 		otherwise null
+ * 
+ * @see Transfer#javaToNative
+ */
+public Object nativeToJava(TransferData transferData){
+	return null;
+}
+
+protected int[] getTypeIds(){
+	return null;
+}
+
+protected String[] getTypeNames(){
+	return null; 
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/ImageTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/ImageTransfer.java
new file mode 100644
index 0000000..cf28027
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/ImageTransfer.java
@@ -0,0 +1,174 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.SWT;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.Converter;
+import org.eclipse.swt.internal.gtk.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * The class <code>ImageTransfer</code> provides a platform specific mechanism 
+ * for converting an Image represented as a java <code>ImageData</code> to a 
+ * platform specific representation of the data and vice versa.  
+ * 
+ * <p>An example of a java <code>ImageData</code> is shown below:</p>
+ * 
+ * <code><pre>
+ *     Image image = new Image(display, "C:\temp\img1.gif");
+ *	   ImageData imgData = image.getImageData();
+ * </code></pre>
+ *
+ * @see Transfer
+ * 
+ * @since 3.4
+ */
+public class ImageTransfer extends ByteArrayTransfer {
+	
+	private static ImageTransfer _instance = new ImageTransfer();
+	
+	private static final String JPEG = "image/jpeg"; //$NON-NLS-1$
+	private static final int JPEG_ID = registerType(JPEG);
+	private static final String PNG = "image/png"; //$NON-NLS-1$
+	private static final int PNG_ID = registerType(PNG);
+	private static final String BMP = "image/bmp"; //$NON-NLS-1$
+	private static final int BMP_ID = registerType(BMP);
+	private static final String EPS = "image/eps"; //$NON-NLS-1$
+	private static final int EPS_ID = registerType(EPS);
+	private static final String PCX = "image/pcx"; //$NON-NLS-1$
+	private static final int PCX_ID = registerType(PCX);
+	private static final String PPM = "image/ppm"; //$NON-NLS-1$
+	private static final int PPM_ID = registerType(PPM);
+	private static final String RGB = "image/ppm"; //$NON-NLS-1$
+	private static final int RGB_ID = registerType(RGB);
+	private static final String TGA = "image/tga"; //$NON-NLS-1$
+	private static final int TGA_ID = registerType(TGA);
+	private static final String XBM = "image/xbm"; //$NON-NLS-1$
+	private static final int XBM_ID = registerType(XBM);
+	private static final String XPM = "image/xpm"; //$NON-NLS-1$
+	private static final int XPM_ID = registerType(XPM);
+	private static final String XV = "image/xv"; //$NON-NLS-1$
+	private static final int XV_ID = registerType(XV);	
+	
+private ImageTransfer() {}
+
+/**
+ * Returns the singleton instance of the ImageTransfer class.
+ *
+ * @return the singleton instance of the ImageTransfer class
+ */
+public static ImageTransfer getInstance () {
+	return _instance;
+}
+
+/**
+ * This implementation of <code>javaToNative</code> converts an ImageData object represented
+ * by java <code>ImageData</code> to a platform specific representation.
+ * 
+ * @param object a java <code>ImageData</code> containing the ImageData to be converted
+ * @param transferData an empty <code>TransferData</code> object that will
+ *  	be filled in on return with the platform specific format of the data
+ * 
+ * @see Transfer#nativeToJava
+ */
+public void javaToNative(Object object, TransferData transferData) {
+	if (!checkImage(object) || !isSupportedType(transferData)) {
+		DND.error(DND.ERROR_INVALID_DATA);
+	}
+	if (OS.GTK_VERSION < OS.VERSION (2, 4, 0)) return;
+	
+	ImageData imgData = (ImageData)object;
+	if (imgData == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	Image image = new Image(Display.getCurrent(), imgData);	
+	int /*long*/ pixmap = image.pixmap; 
+ 	int width = imgData.width;
+ 	int height = imgData.height;  	
+ 	int /*long*/ pixbuf = OS.gdk_pixbuf_new(OS.GDK_COLORSPACE_RGB, true, 8, width, height);
+	if (pixbuf == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	int /*long*/ colormap = OS.gdk_colormap_get_system();
+	OS.gdk_pixbuf_get_from_drawable(pixbuf, pixmap, colormap, 0, 0, 0, 0, width, height);	
+	
+	String typeStr = "";
+	if (transferData.type ==  JPEG_ID) typeStr = "jpeg";
+	if (transferData.type ==  PNG_ID) typeStr = "png";
+	if (transferData.type ==  BMP_ID) typeStr = "bmp";
+	if (transferData.type ==  EPS_ID) typeStr = "eps";
+	if (transferData.type ==  PCX_ID) typeStr = "pcx";
+	if (transferData.type ==  PPM_ID) typeStr = "ppm";
+	if (transferData.type ==  RGB_ID) typeStr = "rgb";
+	if (transferData.type ==  TGA_ID) typeStr = "tga";
+	if (transferData.type ==  XBM_ID) typeStr = "xbm";
+	if (transferData.type ==  XPM_ID) typeStr = "xpm";
+	if (transferData.type ==  XV_ID) typeStr = "xv";
+	byte[] type = Converter.wcsToMbcs(null, typeStr , true);
+	int /*long*/ [] buffer = new int /*long*/ [1];
+	int /*long*/ [] len = new int /*long*/ [1];
+	if (type == null) return;
+	OS.gdk_pixbuf_save_to_bufferv(pixbuf, buffer, len, type, null, null, null);
+	OS.g_object_unref(pixbuf);
+	image.dispose();
+	transferData.pValue = buffer[0];
+	transferData.length = (int)(len[0] + 3) / 4 * 4;
+	transferData.result = 1;
+	transferData.format = 32;
+}
+
+/**
+ * This implementation of <code>nativeToJava</code> converts a platform specific 
+ * representation of an image to java <code>ImageData</code>.  
+ * 
+ * @param transferData the platform specific representation of the data to be converted
+ * @return a java <code>ImageData</code> of the image if the conversion was successful;
+ * 		otherwise null
+ * 
+ * @see Transfer#javaToNative
+ */
+public Object nativeToJava(TransferData transferData) {
+	ImageData imgData = null;
+	if (transferData.length > 0)
+	{
+		int /*long*/ loader = OS.gdk_pixbuf_loader_new();
+		OS.gdk_pixbuf_loader_write(loader, transferData.pValue, transferData.length, null);
+		OS.gdk_pixbuf_loader_close(loader, null);
+		int /*long*/ pixbuf = OS.gdk_pixbuf_loader_get_pixbuf(loader);
+		if (pixbuf != 0) {
+			OS.g_object_ref(pixbuf);
+			int /*long*/ [] pixmap_return = new int /*long*/ [1];
+			OS.gdk_pixbuf_render_pixmap_and_mask(pixbuf, pixmap_return, null, 0);
+			int /*long*/ handle = pixmap_return[0];
+			if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+			OS.g_object_unref(loader);
+			Image img = Image.gtk_new(Display.getCurrent(), SWT.BITMAP, handle, 0);		
+			imgData = img.getImageData();
+			img.dispose();
+		}		
+	}
+	return imgData;
+}
+
+protected int[] getTypeIds(){
+	return new int[]{JPEG_ID, PNG_ID, BMP_ID, EPS_ID, PCX_ID, PPM_ID, RGB_ID, TGA_ID, XBM_ID, XPM_ID, XV_ID};	
+}
+
+protected String[] getTypeNames(){
+	return new String[]{JPEG, PNG, BMP, EPS, PCX, PPM, RGB, TGA, XBM, XPM, XV};
+}
+
+boolean checkImage(Object object) {
+	if (object == null || !(object instanceof ImageData)) return false;
+	return true;
+}
+
+protected boolean validate(Object object) {
+	return checkImage(object);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TableDragSourceEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TableDragSourceEffect.java
new file mode 100644
index 0000000..b3656bb
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TableDragSourceEffect.java
@@ -0,0 +1,142 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.gtk.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides default implementations to display a source image
+ * when a drag is initiated from a <code>Table</code>.
+ * 
+ * <p>Classes that wish to provide their own source image for a <code>Table</code> can
+ * extend the <code>TableDragSourceEffect</code> class, override the 
+ * <code>TableDragSourceEffect.dragStart</code> method and set the field 
+ * <code>DragSourceEvent.image</code> with their own image.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag source effect implementation.
+ *
+ * @see DragSourceEffect
+ * @see DragSourceEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TableDragSourceEffect extends DragSourceEffect {
+	Image dragSourceImage = null;
+
+	/**
+	 * Creates a new <code>TableDragSourceEffect</code> to handle drag effect 
+	 * from the specified <code>Table</code>.
+	 *
+	 * @param table the <code>Table</code> that the user clicks on to initiate the drag
+	 */
+	public TableDragSourceEffect(Table table) {
+		super(table);
+	}
+
+	/**
+	 * This implementation of <code>dragFinished</code> disposes the image
+	 * that was created in <code>TableDragSourceEffect.dragStart</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragFinished(event)</code>
+	 * to dispose the image in the default implementation.
+	 * 
+	 * @param event the information associated with the drag finished event
+	 */
+	public void dragFinished(DragSourceEvent event) {
+		if (dragSourceImage != null) dragSourceImage.dispose();
+		dragSourceImage = null;		
+	}
+
+	/**
+	 * This implementation of <code>dragStart</code> will create a default
+	 * image that will be used during the drag. The image should be disposed
+	 * when the drag is completed in the <code>TableDragSourceEffect.dragFinished</code>
+	 * method.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragStart(event)</code>
+	 * to use the image from the default implementation.
+	 * 
+	 * @param event the information associated with the drag start event
+	 */
+	public void dragStart(DragSourceEvent event) {
+		event.image = getDragSourceImage(event);
+	}
+	
+	Image getDragSourceImage(DragSourceEvent event) {
+		if (dragSourceImage != null) dragSourceImage.dispose();
+		dragSourceImage = null;		
+		
+		Table table = (Table) control;
+		if (OS.GTK_VERSION < OS.VERSION (2, 2, 0)) return null;
+		//TEMPORARY CODE
+		if (table.isListening(SWT.EraseItem) || table.isListening (SWT.PaintItem)) return null;
+		/*
+		* Bug in GTK.  gtk_tree_selection_get_selected_rows() segmentation faults
+		* in versions smaller than 2.2.4 if the model is NULL.  The fix is
+		* to give a valid pointer instead.
+		*/
+		int /*long*/ handle = table.handle;
+		int /*long*/ selection = OS.gtk_tree_view_get_selection (handle);
+		int /*long*/ [] model = OS.GTK_VERSION < OS.VERSION (2, 2, 4) ? new int /*long*/ [1] : null;
+		int /*long*/ list = OS.gtk_tree_selection_get_selected_rows (selection, model);
+		if (list == 0) return null;
+		int count = Math.min(10, OS.g_list_length (list));
+
+		Display display = table.getDisplay();
+		if (count == 1) {
+			int /*long*/ path = OS.g_list_nth_data (list, 0);
+			int /*long*/ pixmap = OS.gtk_tree_view_create_row_drag_icon(handle, path);
+			dragSourceImage =  Image.gtk_new(display, SWT.ICON, pixmap, 0); 
+		} else {
+			int width = 0, height = 0;
+			int[] w = new int[1], h = new int[1];
+			int[] yy = new int[count], hh = new int[count];
+			int /*long*/ [] pixmaps = new int /*long*/ [count];
+			GdkRectangle rect = new GdkRectangle ();
+			for (int i=0; i<count; i++) {
+				int /*long*/ path = OS.g_list_nth_data (list, i);
+				OS.gtk_tree_view_get_cell_area (handle, path, 0, rect);
+				pixmaps[i] = OS.gtk_tree_view_create_row_drag_icon(handle, path);
+				OS.gdk_drawable_get_size(pixmaps[i], w, h);
+				width = Math.max(width, w[0]);
+				height = rect.y + h[0] - yy[0];
+				yy[i] = rect.y;
+				hh[i] = h[0];
+			}
+			int /*long*/ source = OS.gdk_pixmap_new(OS.GDK_ROOT_PARENT(), width, height, -1);
+			int /*long*/ gcSource = OS.gdk_gc_new(source);
+			int /*long*/ mask = OS.gdk_pixmap_new(OS.GDK_ROOT_PARENT(), width, height, 1);
+			int /*long*/ gcMask = OS.gdk_gc_new(mask);
+			GdkColor color = new GdkColor();
+			color.pixel = 0;
+			OS.gdk_gc_set_foreground(gcMask, color);
+			OS.gdk_draw_rectangle(mask, gcMask, 1, 0, 0, width, height);
+			color.pixel = 1;
+			OS.gdk_gc_set_foreground(gcMask, color);
+			for (int i=0; i<count; i++) {
+				OS.gdk_draw_drawable(source, gcSource, pixmaps[i], 0, 0, 0, yy[i] - yy[0], -1, -1);
+				OS.gdk_draw_rectangle(mask, gcMask, 1, 0, yy[i] - yy[0], width, hh[i]);
+				OS.g_object_unref(pixmaps[i]);
+			}
+			OS.g_object_unref(gcSource);
+			OS.g_object_unref(gcMask);
+			dragSourceImage  = Image.gtk_new(display, SWT.ICON, source, mask);
+		}
+		OS.g_list_free (list);
+		
+		return dragSourceImage;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TableDropTargetEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TableDropTargetEffect.java
new file mode 100644
index 0000000..f4ab889
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TableDropTargetEffect.java
@@ -0,0 +1,186 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.gtk.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides a default drag under effect (eg. select, insert and scroll) 
+ * when a drag occurs over a <code>Table</code>.
+ * 
+ * <p>Classes that wish to provide their own drag under effect for a <code>Table</code>
+ * can extend the <code>TableDropTargetEffect</code> and override any applicable methods 
+ * in <code>TableDropTargetEffect</code> to display their own drag under effect.</p>
+ * 
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * <p>The feedback value is either one of the FEEDBACK constants defined in 
+ * class <code>DND</code> which is applicable to instances of this class, 
+ * or it must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> effect constants. 
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Feedback:</b></dt>
+ * <dd>FEEDBACK_SELECT, FEEDBACK_SCROLL</dd>
+ * </dl>
+ * </p>
+ * 
+ * @see DropTargetAdapter
+ * @see DropTargetEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TableDropTargetEffect extends DropTargetEffect {
+	static final int SCROLL_HYSTERESIS = 150; // milli seconds
+	
+	int scrollIndex;
+	long scrollBeginTime;
+
+	/**
+	 * Creates a new <code>TableDropTargetEffect</code> to handle the drag under effect on the specified 
+	 * <code>Table</code>.
+	 * 
+	 * @param table the <code>Table</code> over which the user positions the cursor to drop the data
+	 */
+	public TableDropTargetEffect(Table table) {
+		super(table);
+	}
+
+	int checkEffect(int effect) {
+		// Some effects are mutually exclusive.  Make sure that only one of the mutually exclusive effects has been specified.
+		if ((effect & DND.FEEDBACK_SELECT) != 0) effect = effect & ~DND.FEEDBACK_INSERT_AFTER & ~DND.FEEDBACK_INSERT_BEFORE;
+		if ((effect & DND.FEEDBACK_INSERT_BEFORE) != 0) effect = effect & ~DND.FEEDBACK_INSERT_AFTER;
+		return effect;
+	}
+
+	/**
+	 * This implementation of <code>dragEnter</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragEnter</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragEnter(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag enter event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 */
+	public void dragEnter(DropTargetEvent event) {
+		scrollBeginTime = 0;
+		scrollIndex = -1;
+	}
+	
+	/**
+	 * This implementation of <code>dragLeave</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>. 
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragLeave</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragLeave(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag leave event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 */
+	public void dragLeave(DropTargetEvent event) {
+		Table table = (Table) control;
+		int /*long*/ handle = table.handle;
+		OS.gtk_tree_view_set_drag_dest_row(handle, 0, OS.GTK_TREE_VIEW_DROP_BEFORE);
+
+		scrollBeginTime = 0;
+		scrollIndex = -1;
+	}
+
+	/**
+	 * This implementation of <code>dragOver</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>. The class description 
+	 * lists the FEEDBACK constants that are applicable to the class.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragOver</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragOver(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag over event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 * @see DND#FEEDBACK_SELECT
+	 * @see DND#FEEDBACK_SCROLL
+	 */
+	public void dragOver(DropTargetEvent event) {
+		Table table = (Table) control;
+		int /*long*/ handle = table.handle;
+		int effect = checkEffect(event.feedback);
+		Point coordinates = new Point(event.x, event.y);
+		coordinates = table.toControl(coordinates);
+		int /*long*/ [] path = new int /*long*/ [1];
+		OS.gtk_tree_view_get_path_at_pos (handle, coordinates.x, coordinates.y, path, null, null, null);
+		int index = -1;
+		if (path[0] != 0) {
+			int /*long*/ indices = OS.gtk_tree_path_get_indices (path[0]);
+			if (indices != 0) {
+				int[] temp = new int[1];
+				OS.memmove (temp, indices, 4);
+				index = temp[0];
+			}
+		}
+		if ((effect & DND.FEEDBACK_SCROLL) == 0) {
+			scrollBeginTime = 0;
+			scrollIndex = -1;
+		} else {
+			if (index != -1 && scrollIndex == index && scrollBeginTime != 0) {
+				if (System.currentTimeMillis() >= scrollBeginTime) {
+					if (coordinates.y < table.getItemHeight()) {
+						OS.gtk_tree_path_prev(path[0]);
+					} else {
+						OS.gtk_tree_path_next(path[0]);
+					}
+					if (path[0] != 0) {
+						OS.gtk_tree_view_scroll_to_cell(handle, path[0], 0, false, 0, 0);
+						OS.gtk_tree_path_free(path[0]);
+						path[0] = 0;
+						OS.gtk_tree_view_get_path_at_pos (handle, coordinates.x, coordinates.y, path, null, null, null);
+					}
+					scrollBeginTime = 0;
+					scrollIndex = -1;
+				}
+			} else {
+				scrollBeginTime = System.currentTimeMillis() + SCROLL_HYSTERESIS;
+				scrollIndex = index;
+			}
+		}
+		if (path[0] != 0) {
+			int position = 0;
+			if ((effect & DND.FEEDBACK_SELECT) != 0) position = OS.GTK_TREE_VIEW_DROP_INTO_OR_BEFORE;
+			//if ((effect & DND.FEEDBACK_INSERT_BEFORE) != 0) position = OS.GTK_TREE_VIEW_DROP_BEFORE;
+			//if ((effect & DND.FEEDBACK_INSERT_AFTER) != 0) position = OS.GTK_TREE_VIEW_DROP_AFTER;
+			if (position != 0) {
+				OS.gtk_tree_view_set_drag_dest_row(handle, path[0], OS.GTK_TREE_VIEW_DROP_INTO_OR_BEFORE);
+			} else {
+				OS.gtk_tree_view_set_drag_dest_row(handle, 0, OS.GTK_TREE_VIEW_DROP_BEFORE);
+			}
+		} else {
+			OS.gtk_tree_view_set_drag_dest_row(handle, 0, OS.GTK_TREE_VIEW_DROP_BEFORE);
+		}
+		if (path[0] != 0) OS.gtk_tree_path_free (path [0]);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TreeDragSourceEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TreeDragSourceEffect.java
new file mode 100644
index 0000000..f6e0067
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TreeDragSourceEffect.java
@@ -0,0 +1,141 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.gtk.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides default implementations to display a source image
+ * when a drag is initiated from a <code>Tree</code>.
+ * 
+ * <p>Classes that wish to provide their own source image for a <code>Tree</code> can
+ * extend <code>TreeDragSourceEffect</code> class and override the <code>TreeDragSourceEffect.dragStart</code>
+ * method and set the field <code>DragSourceEvent.image</code> with their own image.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * @see DragSourceEffect
+ * @see DragSourceEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TreeDragSourceEffect extends DragSourceEffect {
+	Image dragSourceImage = null;
+
+	/**
+	 * Creates a new <code>TreeDragSourceEffect</code> to handle drag effect 
+	 * from the specified <code>Tree</code>.
+	 *
+	 * @param tree the <code>Tree</code> that the user clicks on to initiate the drag
+	 */
+	public TreeDragSourceEffect(Tree tree) {
+		super(tree);
+	}
+
+	/**
+	 * This implementation of <code>dragFinished</code> disposes the image
+	 * that was created in <code>TreeDragSourceEffect.dragStart</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragFinished(event)</code>
+	 * to dispose the image in the default implementation.
+	 * 
+	 * @param event the information associated with the drag finished event
+	 */
+	public void dragFinished(DragSourceEvent event) {
+		if (dragSourceImage != null) dragSourceImage.dispose();
+		dragSourceImage = null;		
+	}
+
+	/**
+	 * This implementation of <code>dragStart</code> will create a default
+	 * image that will be used during the drag. The image should be disposed
+	 * when the drag is completed in the <code>TreeDragSourceEffect.dragFinished</code>
+	 * method.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragStart(event)</code>
+	 * to use the image from the default implementation.
+	 * 
+	 * @param event the information associated with the drag start event
+	 */
+	public void dragStart(DragSourceEvent event) {
+		event.image = getDragSourceImage(event);
+	}
+
+	Image getDragSourceImage(DragSourceEvent event) {
+		if (dragSourceImage != null) dragSourceImage.dispose();
+		dragSourceImage = null;		
+		
+		Tree tree = (Tree) control;
+		if (OS.GTK_VERSION < OS.VERSION (2, 2, 0)) return null;
+		//TEMPORARY CODE
+		if (tree.isListening(SWT.EraseItem) || tree.isListening (SWT.PaintItem)) return null;
+		/*
+		* Bug in GTK.  gtk_tree_selection_get_selected_rows() segmentation faults
+		* in versions smaller than 2.2.4 if the model is NULL.  The fix is
+		* to give a valid pointer instead.
+		*/
+		int /*long*/ handle = tree.handle;
+		int /*long*/ selection = OS.gtk_tree_view_get_selection (handle);
+		int /*long*/ [] model = OS.GTK_VERSION < OS.VERSION (2, 2, 4) ? new int /*long*/ [1] : null;
+		int /*long*/ list = OS.gtk_tree_selection_get_selected_rows (selection, model);
+		if (list == 0) return null;
+		int count = Math.min(10, OS.g_list_length (list));
+
+		Display display = tree.getDisplay();
+		if (count == 1) {
+			int /*long*/ path = OS.g_list_nth_data (list, 0);
+			int /*long*/ pixmap = OS.gtk_tree_view_create_row_drag_icon(handle, path);
+			dragSourceImage =  Image.gtk_new(display, SWT.ICON, pixmap, 0); 
+		} else {
+			int width = 0, height = 0;
+			int[] w = new int[1], h = new int[1];
+			int[] yy = new int[count], hh = new int[count];
+			int /*long*/ [] pixmaps = new int /*long*/ [count];
+			GdkRectangle rect = new GdkRectangle ();
+			for (int i=0; i<count; i++) {
+				int /*long*/ path = OS.g_list_nth_data (list, i);
+				OS.gtk_tree_view_get_cell_area (handle, path, 0, rect);
+				pixmaps[i] = OS.gtk_tree_view_create_row_drag_icon(handle, path);
+				OS.gdk_drawable_get_size(pixmaps[i], w, h);
+				width = Math.max(width, w[0]);
+				height = rect.y + h[0] - yy[0];
+				yy[i] = rect.y;
+				hh[i] = h[0];
+			}
+			int /*long*/ source = OS.gdk_pixmap_new(OS.GDK_ROOT_PARENT(), width, height, -1);
+			int /*long*/ gcSource = OS.gdk_gc_new(source);
+			int /*long*/ mask = OS.gdk_pixmap_new(OS.GDK_ROOT_PARENT(), width, height, 1);
+			int /*long*/ gcMask = OS.gdk_gc_new(mask);
+			GdkColor color = new GdkColor();
+			color.pixel = 0;
+			OS.gdk_gc_set_foreground(gcMask, color);
+			OS.gdk_draw_rectangle(mask, gcMask, 1, 0, 0, width, height);
+			color.pixel = 1;
+			OS.gdk_gc_set_foreground(gcMask, color);
+			for (int i=0; i<count; i++) {
+				OS.gdk_draw_drawable(source, gcSource, pixmaps[i], 0, 0, 0, yy[i] - yy[0], -1, -1);
+				OS.gdk_draw_rectangle(mask, gcMask, 1, 0, yy[i] - yy[0], width, hh[i]);
+				OS.g_object_unref(pixmaps[i]);
+			}
+			OS.g_object_unref(gcSource);
+			OS.g_object_unref(gcMask);
+			dragSourceImage  = Image.gtk_new(display, SWT.ICON, source, mask);
+		}
+		OS.g_list_free (list);
+		
+		return dragSourceImage;
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TreeDropTargetEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TreeDropTargetEffect.java
new file mode 100644
index 0000000..ace9718
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/TreeDropTargetEffect.java
@@ -0,0 +1,222 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.gtk.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides a default drag under effect (eg. select, insert, scroll and expand) 
+ * when a drag occurs over a <code>Tree</code>.
+ * 
+ * <p>Classes that wish to provide their own drag under effect for a <code>Tree</code>
+ * can extend the <code>TreeDropTargetEffect</code> class and override any applicable methods 
+ * in <code>TreeDropTargetEffect</code> to display their own drag under effect.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * <p>The feedback value is either one of the FEEDBACK constants defined in 
+ * class <code>DND</code> which is applicable to instances of this class, 
+ * or it must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> effect constants. 
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Feedback:</b></dt>
+ * <dd>FEEDBACK_SELECT, FEEDBACK_INSERT_BEFORE, FEEDBACK_INSERT_AFTER, FEEDBACK_EXPAND, FEEDBACK_SCROLL</dd>
+ * </dl>
+ * </p><p>
+ * Note: Only one of the styles FEEDBACK_SELECT, FEEDBACK_INSERT_BEFORE or
+ * FEEDBACK_INSERT_AFTER may be specified.
+ * </p>
+ * 
+ * @see DropTargetAdapter
+ * @see DropTargetEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TreeDropTargetEffect extends DropTargetEffect {
+	static final int SCROLL_HYSTERESIS = 150; // milli seconds
+	static final int EXPAND_HYSTERESIS = 1000; // milli seconds
+
+	int scrollIndex = -1;
+	long scrollBeginTime;
+
+	int expandIndex = -1;
+	long expandBeginTime;
+
+	/**
+	 * Creates a new <code>TreeDropTargetEffect</code> to handle the drag under effect on the specified 
+	 * <code>Tree</code>.
+	 * 
+	 * @param tree the <code>Tree</code> over which the user positions the cursor to drop the data
+	 */
+	public TreeDropTargetEffect(Tree tree) {
+		super(tree);
+	}
+
+	int checkEffect(int effect) {
+		// Some effects are mutually exclusive.  Make sure that only one of the mutually exclusive effects has been specified.
+		if ((effect & DND.FEEDBACK_SELECT) != 0) effect = effect & ~DND.FEEDBACK_INSERT_AFTER & ~DND.FEEDBACK_INSERT_BEFORE;
+		if ((effect & DND.FEEDBACK_INSERT_BEFORE) != 0) effect = effect & ~DND.FEEDBACK_INSERT_AFTER;
+		return effect;
+	}
+
+	/**
+	 * This implementation of <code>dragEnter</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragEnter</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragEnter(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag enter event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 */
+	public void dragEnter(DropTargetEvent event) {
+		expandBeginTime = 0;
+		expandIndex = -1;	
+		scrollBeginTime = 0;
+		scrollIndex = -1;
+	}
+	
+	/**
+	 * This implementation of <code>dragLeave</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragLeave</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragLeave(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag leave event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 */
+	public void dragLeave(DropTargetEvent event) {
+		Tree tree = (Tree) control;
+		int /*long*/ handle = tree.handle;
+		OS.gtk_tree_view_set_drag_dest_row(handle, 0, OS.GTK_TREE_VIEW_DROP_BEFORE);
+
+		scrollBeginTime = 0;
+		scrollIndex = -1;
+		expandBeginTime = 0;
+		expandIndex = -1;
+	}
+
+	/**
+	 * This implementation of <code>dragOver</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragOver</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragOver(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag over event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 * @see DND#FEEDBACK_SELECT
+	 * @see DND#FEEDBACK_INSERT_BEFORE
+	 * @see DND#FEEDBACK_INSERT_AFTER
+	 * @see DND#FEEDBACK_SCROLL
+	 */
+	public void dragOver(DropTargetEvent event) {
+		Tree tree = (Tree) control;
+		int effect = checkEffect(event.feedback);
+
+		int /*long*/ handle = tree.handle;
+		Point coordinates = new Point(event.x, event.y);
+		coordinates = tree.toControl(coordinates);
+		int /*long*/ [] path = new int /*long*/ [1];
+		OS.gtk_tree_view_get_path_at_pos (handle, coordinates.x, coordinates.y, path, null, null, null);
+		int index = -1;
+		if (path[0] != 0) {
+			int /*long*/ indices = OS.gtk_tree_path_get_indices(path[0]);
+			if (indices != 0) {	
+				int depth = OS.gtk_tree_path_get_depth(path[0]);
+				int[] temp = new int[depth];
+				OS.memmove (temp, indices, temp.length * 4);
+				index = temp[temp.length - 1];
+			}
+		}
+		if ((effect & DND.FEEDBACK_SCROLL) == 0) {
+			scrollBeginTime = 0;
+			scrollIndex = -1;
+		} else {
+			if (index != -1 && scrollIndex == index && scrollBeginTime != 0) {
+				if (System.currentTimeMillis() >= scrollBeginTime) {
+					GdkRectangle cellRect = new GdkRectangle ();
+					OS.gtk_tree_view_get_cell_area (handle, path[0], 0, cellRect);
+					if (cellRect.y < cellRect.height) {
+						int[] tx = new int[1], ty = new int[1];
+						OS.gtk_tree_view_widget_to_tree_coords(handle, cellRect.x, cellRect.y - cellRect.height, tx, ty);
+						OS.gtk_tree_view_scroll_to_point (handle, -1, ty[0]);
+					} else {
+						//scroll down
+						OS.gtk_tree_view_get_path_at_pos (handle, coordinates.x, coordinates.y + cellRect.height, path, null, null, null);
+						if (path[0] != 0) {
+							OS.gtk_tree_view_scroll_to_cell(handle, path[0], 0, false, 0, 0);
+							OS.gtk_tree_path_free(path[0]);
+							path[0] = 0;
+						}
+						OS.gtk_tree_view_get_path_at_pos (handle, coordinates.x, coordinates.y, path, null, null, null);	
+					}
+					scrollBeginTime = 0;
+					scrollIndex = -1;
+				}
+			} else {
+				scrollBeginTime = System.currentTimeMillis() + SCROLL_HYSTERESIS;
+				scrollIndex = index;
+			}
+		}
+		if ((effect & DND.FEEDBACK_EXPAND) == 0) {
+			expandBeginTime = 0;
+			expandIndex = -1;
+		} else {
+			if (index != -1 && expandIndex == index && expandBeginTime != 0) {
+				if (System.currentTimeMillis() >= expandBeginTime) {
+					OS.gtk_tree_view_expand_row (handle, path[0], false);
+					expandBeginTime = 0;
+					expandIndex = -1;
+				}
+			} else {
+				expandBeginTime = System.currentTimeMillis() + EXPAND_HYSTERESIS;
+				expandIndex = index;
+			}
+		}
+		if (path[0] != 0) {
+			int position = -1;
+			if ((effect & DND.FEEDBACK_SELECT) != 0) position = OS.GTK_TREE_VIEW_DROP_INTO_OR_BEFORE;
+			if ((effect & DND.FEEDBACK_INSERT_BEFORE) != 0) position = OS.GTK_TREE_VIEW_DROP_BEFORE;
+			if ((effect & DND.FEEDBACK_INSERT_AFTER) != 0) position = OS.GTK_TREE_VIEW_DROP_AFTER;		
+			if (position != -1) {
+				OS.gtk_tree_view_set_drag_dest_row(handle, path[0], position);
+			} else {
+				OS.gtk_tree_view_set_drag_dest_row(handle, 0, OS.GTK_TREE_VIEW_DROP_BEFORE);
+			}
+		} else {
+			OS.gtk_tree_view_set_drag_dest_row(handle, 0, OS.GTK_TREE_VIEW_DROP_BEFORE);
+		}
+		
+		if (path[0] != 0) OS.gtk_tree_path_free (path [0]);
+	}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/URLTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/URLTransfer.java
new file mode 100644
index 0000000..63226b1
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/URLTransfer.java
@@ -0,0 +1,115 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.internal.gtk.*;
+
+/**
+ * The class <code>URLTransfer</code> provides a platform specific mechanism 
+ * for converting text in URL format represented as a java <code>String</code> 
+ * to a platform specific representation of the data and vice versa. The string
+ * must contain a fully specified url.
+ * 
+ * <p>An example of a java <code>String</code> containing a URL is shown below:</p>
+ * 
+ * <code><pre>
+ *     String url = "http://www.eclipse.org";
+ * </code></pre>
+ *
+ * @see Transfer
+ * @since 3.4
+ */
+public class URLTransfer extends ByteArrayTransfer {
+
+	static URLTransfer _instance = new URLTransfer();
+	private static final String TEXT_UNICODE = "text/unicode"; //$NON-NLS-1$
+	private static final String TEXT_XMOZURL = "text/x-moz-url"; //$NON-NLS-1$
+	private static final int TEXT_UNICODE_ID = registerType(TEXT_UNICODE);	
+	private static final int TEXT_XMOZURL_ID = registerType(TEXT_XMOZURL);	
+	
+private URLTransfer() {}
+
+/**
+ * Returns the singleton instance of the URLTransfer class.
+ *
+ * @return the singleton instance of the URLTransfer class
+ */
+public static URLTransfer getInstance () {
+	return _instance;
+}
+
+/**
+ * This implementation of <code>javaToNative</code> converts a URL
+ * represented by a java <code>String</code> to a platform specific representation.
+ * 
+ * @param object a java <code>String</code> containing a URL
+ * @param transferData an empty <code>TransferData</code> object that will
+ *  	be filled in on return with the platform specific format of the data
+ * 
+ * @see Transfer#nativeToJava
+ */
+public void javaToNative (Object object, TransferData transferData){
+	transferData.result = 0;
+	if (!checkURL(object) || !isSupportedType(transferData)) {
+		DND.error(DND.ERROR_INVALID_DATA);
+	}
+	String string = (String)object;
+	int charCount = string.length();
+	char [] chars = new char[charCount +1];
+	string.getChars(0, charCount , chars, 0);
+	int byteCount = chars.length*2;
+	int /*long*/ pValue = OS.g_malloc(byteCount);
+	if (pValue == 0) return;
+	OS.memmove(pValue, chars, byteCount);
+	transferData.length = byteCount;
+	transferData.format = 8;
+	transferData.pValue = pValue;
+	transferData.result = 1;		
+}
+
+/**
+ * This implementation of <code>nativeToJava</code> converts a platform 
+ * specific representation of a URL to a java <code>String</code>.
+ * 
+ * @param transferData the platform specific representation of the data to be converted
+ * @return a java <code>String</code> containing a URL if the conversion was successful;
+ * 		otherwise null
+ * 
+ * @see Transfer#javaToNative
+ */
+public Object nativeToJava(TransferData transferData){
+	if (!isSupportedType(transferData) ||  transferData.pValue == 0) return null;
+	/* Ensure byteCount is a multiple of 2 bytes */
+	int size = (transferData.format * transferData.length / 8) / 2 * 2;
+	if (size <= 0) return null;			
+	char[] chars = new char [size/2];
+	OS.memmove (chars, transferData.pValue, size);
+	String string = new String (chars);
+	int end = string.indexOf('\0');
+	return (end == -1) ? string : string.substring(0, end);
+}
+
+protected int[] getTypeIds(){
+	return new int[] {TEXT_XMOZURL_ID, TEXT_UNICODE_ID};
+}
+
+protected String[] getTypeNames(){
+	return new String[] {TEXT_XMOZURL, TEXT_UNICODE}; 
+}
+
+boolean checkURL(Object object) {
+	return object != null && (object instanceof String) && ((String)object).length() > 0;
+}
+
+protected boolean validate(Object object) {
+	return checkURL(object);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/ImageTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/ImageTransfer.java
new file mode 100644
index 0000000..3e43800
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/ImageTransfer.java
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.dnd;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.motif.*;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * The class <code>ImageTransfer</code> provides a platform specific mechanism 
+ * for converting an Image represented as a java <code>ImageData</code> to a 
+ * platform specific representation of the data and vice versa.  
+ * 
+ * <p>An example of a java <code>ImageData</code> is shown below:</p>
+ * 
+ * <code><pre>
+ *     Image image = new Image(display, "C:\temp\img1.gif");
+ *	   ImageData imgData = image.getImageData();
+ * </code></pre>
+ *
+ * @see Transfer
+ * 
+ * @since 3.4
+ */
+public class ImageTransfer extends ByteArrayTransfer {
+	
+	private static ImageTransfer _instance = new ImageTransfer();
+	
+	private static final String PIXMAP = "PIXMAP"; //$NON-NLS-1$
+	private static final int PIXMAP_ID = registerType(PIXMAP);
+	
+private ImageTransfer() {}
+
+/**
+ * Returns the singleton instance of the ImageTransfer class.
+ *
+ * @return the singleton instance of the ImageTransfer class
+ */
+public static ImageTransfer getInstance () {
+	return _instance;
+}
+
+/**
+ * This implementation of <code>javaToNative</code> converts an ImageData object represented
+ * by java <code>ImageData</code> to a platform specific representation.
+ * 
+ * @param object a java <code>ImageData</code> containing the ImageData to be converted
+ * @param transferData an empty <code>TransferData</code> object that will
+ *  	be filled in on return with the platform specific format of the data
+ * 
+ * @see Transfer#nativeToJava
+ */
+public void javaToNative(Object object, TransferData transferData) {
+	if (!checkImage(object) || !isSupportedType(transferData)) {
+		DND.error(DND.ERROR_INVALID_DATA);
+	}
+	ImageData imgData = (ImageData)object;
+	if (imgData == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	Image image = new Image(Display.getCurrent(), imgData);
+	int pixmap = image.pixmap;
+	int pValue = OS.XtMalloc(4);
+	if (pValue ==  0) return;
+	OS.memmove(pValue, new int [] {pixmap}, 4);
+	transferData.type = PIXMAP_ID;
+	transferData.format = 32;
+	transferData.length = 1;
+	transferData.pValue = pValue;
+	transferData.result = 1; 
+}
+/**
+ * This implementation of <code>nativeToJava</code> converts a platform specific 
+ * representation of an image to java <code>ImageData</code>.  
+ * 
+ * @param transferData the platform specific representation of the data to be converted
+ * @return a java <code>ImageData</code> of the image if the conversion was successful;
+ * 		otherwise null
+ * 
+ * @see Transfer#javaToNative
+ */
+public Object nativeToJava(TransferData transferData) {	
+	if (!isSupportedType(transferData) ||  transferData.pValue == 0) return null;		
+	int length = transferData.length;
+	if (length == 0) return null;
+	int [] pixmap = new int [1];
+	OS.memmove(pixmap, transferData.pValue, length * 4);	
+	Image image = Image.motif_new(Display.getCurrent(), SWT.BITMAP, pixmap[0], 0);		
+	ImageData imgData = image.getImageData();
+	image.dispose();
+	return imgData;
+}
+
+protected int[] getTypeIds(){
+	return new int[]{PIXMAP_ID};	
+}
+
+protected String[] getTypeNames(){
+	return new String[]{PIXMAP};
+}
+
+boolean checkImage(Object object) {
+	if (object == null || !(object instanceof ImageData)) return false;
+	return true;
+}
+
+protected boolean validate(Object object) {
+	return checkImage(object);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/TableDragSourceEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/TableDragSourceEffect.java
new file mode 100644
index 0000000..b7dbda5
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/TableDragSourceEffect.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.dnd;
+
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides default implementations to display a source image
+ * when a drag is initiated from a <code>Table</code>.
+ * 
+ * <p>Classes that wish to provide their own source image for a <code>Table</code> can
+ * extend the <code>TableDragSourceEffect</code> class, override the 
+ * <code>TableDragSourceEffect.dragStart</code> method and set the field 
+ * <code>DragSourceEvent.image</code> with their own image.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag source effect implementation.
+ *
+ * @see DragSourceEffect
+ * @see DragSourceEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TableDragSourceEffect extends DragSourceEffect {
+	/**
+	 * Creates a new <code>TableDragSourceEffect</code> to handle drag effect 
+	 * from the specified <code>Table</code>.
+	 *
+	 * @param table the <code>Table</code> that the user clicks on to initiate the drag
+	 */
+	public TableDragSourceEffect(Table table) {
+		super(table);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/TableDropTargetEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/TableDropTargetEffect.java
new file mode 100644
index 0000000..72a6f56
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/TableDropTargetEffect.java
@@ -0,0 +1,217 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides a default drag under effect (eg. select, insert and scroll) 
+ * when a drag occurs over a <code>Table</code>.
+ * 
+ * <p>Classes that wish to provide their own drag under effect for a <code>Table</code>
+ * can extend the <code>TableDropTargetEffect</code> and override any applicable methods 
+ * in <code>TableDropTargetEffect</code> to display their own drag under effect.</p>
+ * 
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * <p>The feedback value is either one of the FEEDBACK constants defined in 
+ * class <code>DND</code> which is applicable to instances of this class, 
+ * or it must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> effect constants. 
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Feedback:</b></dt>
+ * <dd>FEEDBACK_SELECT, FEEDBACK_SCROLL</dd>
+ * </dl>
+ * </p>
+ * 
+ * @see DropTargetAdapter
+ * @see DropTargetEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TableDropTargetEffect extends DropTargetEffect {
+	static final int SCROLL_HYSTERESIS = 150; // milli seconds
+	
+	int currentEffect = DND.FEEDBACK_NONE;
+	TableItem currentItem;
+	
+	PaintListener paintListener;
+	TableItem dropSelection = null;
+	
+	TableItem scrollItem;
+	long scrollBeginTime;
+
+	/**
+	 * Creates a new <code>TableDropTargetEffect</code> to handle the drag under effect on the specified 
+	 * <code>Table</code>.
+	 * 
+	 * @param table the <code>Table</code> over which the user positions the cursor to drop the data
+	 */
+	public TableDropTargetEffect(Table table) {
+		super(table);
+	}
+
+	int checkEffect(int effect) {
+		// Some effects are mutually exclusive.  Make sure that only one of the mutually exclusive effects has been specified.
+		if ((effect & DND.FEEDBACK_SELECT) != 0) effect = effect & ~DND.FEEDBACK_INSERT_AFTER & ~DND.FEEDBACK_INSERT_BEFORE;
+		if ((effect & DND.FEEDBACK_INSERT_BEFORE) != 0) effect = effect & ~DND.FEEDBACK_INSERT_AFTER;
+		return effect;
+	}
+
+	/**
+	 * This implementation of <code>dragEnter</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragEnter</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragEnter(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag enter event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 */
+	public void dragEnter(DropTargetEvent event) {
+		scrollBeginTime = 0;
+		scrollItem = null;
+		currentItem = null;
+		dropSelection = null;
+	}
+	
+	/**
+	 * This implementation of <code>dragLeave</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>. 
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragLeave</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragLeave(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag leave event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 */
+	public void dragLeave(DropTargetEvent event) {
+		Table table = (Table) control;
+		if (currentItem != null) {
+			setDropSelection(table, null);
+			currentItem = null;
+		}
+		scrollBeginTime = 0;
+		scrollItem = null;
+	}
+
+	/**
+	 * This implementation of <code>dragOver</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>. The class description 
+	 * lists the FEEDBACK constants that are applicable to the class.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragOver</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragOver(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag over event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 * @see DND#FEEDBACK_SELECT
+	 * @see DND#FEEDBACK_SCROLL
+	 */
+	public void dragOver(DropTargetEvent event) {
+		Table table = (Table) control;
+		int effect = checkEffect(event.feedback);
+		TableItem item = (TableItem)getItem(table, event.x, event.y);
+
+		if ((effect & DND.FEEDBACK_SCROLL) == 0) {
+			scrollBeginTime = 0;
+			scrollItem = null;
+		} else {
+			if (item != null && item.equals(scrollItem)  && scrollBeginTime != 0) {
+				if (System.currentTimeMillis() >= scrollBeginTime) {
+					Rectangle area = table.getClientArea();
+					int headerHeight = table.getHeaderHeight();
+					int itemHeight= table.getItemHeight();
+					Point pt = new Point(event.x, event.y);
+					pt = table.getDisplay().map(null, table, pt);
+					TableItem nextItem = null;
+					if (pt.y < area.y + headerHeight + 2 * itemHeight) {
+						int index = Math.max(0, table.indexOf(item)-1);
+						nextItem = table.getItem(index);
+					}
+					if (pt.y > area.y + area.height - 2 * itemHeight) {
+						int index = Math.min(table.getItemCount()-1, table.indexOf(item)+1);
+						nextItem = table.getItem(index);
+					}
+					if (nextItem != null) table.showItem(nextItem);
+					scrollBeginTime = 0;
+					scrollItem = null;
+				}
+			} else {
+				scrollBeginTime = System.currentTimeMillis() + SCROLL_HYSTERESIS;
+				scrollItem = item;
+			}
+		}
+		
+		if ((effect & DND.FEEDBACK_SELECT) != 0) {
+			if (currentItem != item || (currentEffect & DND.FEEDBACK_SELECT) == 0) { 
+				setDropSelection(table, item); 
+				currentEffect = effect;
+				currentItem = item;
+			}
+		} else {
+			setDropSelection(table, null);
+		}
+	}
+
+	void setDropSelection (Table table, TableItem item) {	
+		if (item == dropSelection) return;
+		if (dropSelection != null && !dropSelection.isDisposed()) {
+			Rectangle bounds = dropSelection.getBounds(0);
+			table.redraw(bounds.x, bounds.y, bounds.width, bounds.height, true);
+		}
+		dropSelection = item;
+		if (dropSelection != null && !dropSelection.isDisposed()) {
+			Rectangle bounds = dropSelection.getBounds(0);
+			table.redraw(bounds.x, bounds.y, bounds.width, bounds.height, true);
+		}
+		if (dropSelection == null) {
+			if (paintListener != null) {
+				table.removePaintListener(paintListener);
+				paintListener = null;
+			}
+		} else {
+			if (paintListener == null) {
+				paintListener = new PaintListener() {
+					public void paintControl(PaintEvent e) {
+						if (dropSelection == null  || dropSelection.isDisposed()) return;
+						GC gc = e.gc;
+						boolean xor = gc.getXORMode();
+						gc.setXORMode(true);
+						Rectangle bounds = dropSelection.getBounds(0);
+						gc.fillRectangle(bounds.x, bounds.y, bounds.width, bounds.height);
+						gc.setXORMode(xor);
+					}
+				};
+				table.addPaintListener(paintListener);
+			}
+		}
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/TreeDragSourceEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/TreeDragSourceEffect.java
new file mode 100644
index 0000000..7a66beb
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/TreeDragSourceEffect.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.dnd;
+
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides default implementations to display a source image
+ * when a drag is initiated from a <code>Tree</code>.
+ * 
+ * <p>Classes that wish to provide their own source image for a <code>Tree</code> can
+ * extend <code>TreeDragSourceEffect</code> class and override the <code>TreeDragSourceEffect.dragStart</code>
+ * method and set the field <code>DragSourceEvent.image</code> with their own image.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * @see DragSourceEffect
+ * @see DragSourceEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TreeDragSourceEffect extends DragSourceEffect {
+	/**
+	 * Creates a new <code>TreeDragSourceEffect</code> to handle drag effect 
+	 * from the specified <code>Tree</code>.
+	 *
+	 * @param tree the <code>Tree</code> that the user clicks on to initiate the drag
+	 */
+	public TreeDragSourceEffect(Tree tree) {
+		super(tree);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/TreeDropTargetEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/TreeDropTargetEffect.java
new file mode 100644
index 0000000..7a57f9b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/TreeDropTargetEffect.java
@@ -0,0 +1,283 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides a default drag under effect (eg. select, insert, scroll and expand) 
+ * when a drag occurs over a <code>Tree</code>.
+ * 
+ * <p>Classes that wish to provide their own drag under effect for a <code>Tree</code>
+ * can extend the <code>TreeDropTargetEffect</code> class and override any applicable methods 
+ * in <code>TreeDropTargetEffect</code> to display their own drag under effect.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * <p>The feedback value is either one of the FEEDBACK constants defined in 
+ * class <code>DND</code> which is applicable to instances of this class, 
+ * or it must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> effect constants. 
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Feedback:</b></dt>
+ * <dd>FEEDBACK_SELECT, FEEDBACK_INSERT_BEFORE, FEEDBACK_INSERT_AFTER, FEEDBACK_EXPAND, FEEDBACK_SCROLL</dd>
+ * </dl>
+ * </p><p>
+ * Note: Only one of the styles FEEDBACK_SELECT, FEEDBACK_INSERT_BEFORE or
+ * FEEDBACK_INSERT_AFTER may be specified.
+ * </p>
+ * 
+ * @see DropTargetAdapter
+ * @see DropTargetEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TreeDropTargetEffect extends DropTargetEffect {
+	static final int SCROLL_HYSTERESIS = 150; // milli seconds
+	static final int EXPAND_HYSTERESIS = 1000; // milli seconds
+	
+	int currentEffect = DND.FEEDBACK_NONE;
+	TreeItem currentItem;
+	
+	PaintListener paintListener;
+	TreeItem dropSelection = null;
+	
+	TreeItem insertItem = null;
+	boolean insertBefore = false;
+
+	TreeItem scrollItem;
+	long scrollBeginTime;
+
+	TreeItem expandItem;
+	long expandBeginTime;
+	
+	/**
+	 * Creates a new <code>TreeDropTargetEffect</code> to handle the drag under effect on the specified 
+	 * <code>Tree</code>.
+	 * 
+	 * @param tree the <code>Tree</code> over which the user positions the cursor to drop the data
+	 */
+	public TreeDropTargetEffect(Tree tree) {
+		super(tree);
+	}
+
+	int checkEffect(int effect) {
+		// Some effects are mutually exclusive.  Make sure that only one of the mutually exclusive effects has been specified.
+		if ((effect & DND.FEEDBACK_SELECT) != 0) effect = effect & ~DND.FEEDBACK_INSERT_AFTER & ~DND.FEEDBACK_INSERT_BEFORE;
+		if ((effect & DND.FEEDBACK_INSERT_BEFORE) != 0) effect = effect & ~DND.FEEDBACK_INSERT_AFTER;
+		return effect;
+	}
+
+	/**
+	 * This implementation of <code>dragEnter</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragEnter</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragEnter(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag enter event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 */
+	public void dragEnter(DropTargetEvent event) {
+		insertItem = null;
+		currentItem = null;
+		dropSelection = null;
+		expandBeginTime = 0;
+		expandItem = null;
+		scrollBeginTime = 0;
+		scrollItem = null;
+	}
+	
+	/**
+	 * This implementation of <code>dragLeave</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragLeave</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragLeave(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag leave event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 */
+	public void dragLeave(DropTargetEvent event) {
+		Tree tree = (Tree) control;
+		if (insertItem != null) {
+			tree.setInsertMark(null, false);
+			insertItem = null;
+		}	
+		if (currentItem != null) {
+			setDropSelection(tree, null);
+			currentItem = null;
+		}
+		expandBeginTime = 0;
+		expandItem = null;
+		scrollBeginTime = 0;
+		scrollItem = null;
+	}
+
+	/**
+	 * This implementation of <code>dragOver</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragOver</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragOver(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag over event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 * @see DND#FEEDBACK_SELECT
+	 * @see DND#FEEDBACK_INSERT_BEFORE
+	 * @see DND#FEEDBACK_INSERT_AFTER
+	 * @see DND#FEEDBACK_SCROLL
+	 */
+	public void dragOver(DropTargetEvent event) {
+		Tree tree = (Tree) control;
+		int effect = checkEffect(event.feedback);
+
+		TreeItem item = (TreeItem)getItem(tree, event.x, event.y);
+		
+		if ((effect & DND.FEEDBACK_EXPAND) == 0) {
+			expandBeginTime = 0;
+			expandItem = null;
+		} else {
+			if (item != null && item.equals(expandItem) && expandBeginTime != 0) {
+				if (System.currentTimeMillis() >= expandBeginTime) {
+					if (item.getItemCount() > 0 && !item.getExpanded()) {
+						Event e = new Event();
+						e.x = event.x;
+						e.y = event.y;
+						e.item = item;
+						e.time = (int) System.currentTimeMillis();
+						tree.notifyListeners(SWT.Expand, e);
+						if (item.isDisposed()) return;
+						item.setExpanded(true);
+					}
+					expandBeginTime = 0;
+					expandItem = null;
+				}
+			} else {
+				expandBeginTime = System.currentTimeMillis() + EXPAND_HYSTERESIS;
+				expandItem = item;
+			}
+		}
+		
+		if ((effect & DND.FEEDBACK_SCROLL) == 0) {
+			scrollBeginTime = 0;
+			scrollItem = null;
+		} else {
+			if (item != null && item.equals(scrollItem)  && scrollBeginTime != 0) {
+				if (System.currentTimeMillis() >= scrollBeginTime) {
+					Rectangle area = tree.getClientArea();
+					int headerHeight = tree.getHeaderHeight();
+					int itemHeight= tree.getItemHeight();
+					Point pt = new Point(event.x, event.y);
+					pt = tree.getDisplay().map(null, tree, pt);
+					TreeItem nextItem = null;
+					if (pt.y < area.y + headerHeight + 2 * itemHeight) {
+						nextItem = previousItem(tree, item);
+					}
+					if (pt.y > area.y + area.height - 2 * itemHeight) {
+						nextItem = nextItem(tree, item);
+					}
+					if (nextItem != null) tree.showItem(nextItem);
+					scrollBeginTime = 0;
+					scrollItem = null;
+				}
+			} else {
+				scrollBeginTime = System.currentTimeMillis() + SCROLL_HYSTERESIS;
+				scrollItem = item;
+			}
+		}
+		
+		if ((effect & DND.FEEDBACK_SELECT) != 0) {
+			if (currentItem != item || (currentEffect & DND.FEEDBACK_SELECT) == 0) { 
+				setDropSelection(tree, item); 
+				currentEffect = effect;
+				currentItem = item;
+			}
+		} else {
+			setDropSelection(tree, null);
+		}
+		
+		if ((effect & DND.FEEDBACK_INSERT_AFTER) != 0 ||
+			(effect & DND.FEEDBACK_INSERT_BEFORE) != 0) {
+			if (currentItem != item || 
+				 ((effect & DND.FEEDBACK_INSERT_AFTER) != (currentEffect & DND.FEEDBACK_INSERT_AFTER)) ||
+				 ((effect & DND.FEEDBACK_INSERT_BEFORE) != (currentEffect & DND.FEEDBACK_INSERT_BEFORE))) { 
+				setInsertMark(tree, item, (effect & DND.FEEDBACK_INSERT_BEFORE) != 0);
+				currentEffect = effect;
+				currentItem = item;
+			}
+		} else {
+			setInsertMark(tree, null, false);
+		}
+	}
+	
+	void setDropSelection (Tree tree, TreeItem item) {	
+		if (item == dropSelection) return;
+		if (dropSelection != null && !dropSelection.isDisposed()) {
+			Rectangle bounds = dropSelection.getBounds();
+			tree.redraw(bounds.x, bounds.y, bounds.width, bounds.height, true);
+		}
+		dropSelection = item;
+		if (dropSelection != null && !dropSelection.isDisposed()) {
+			Rectangle bounds = dropSelection.getBounds();
+			tree.redraw(bounds.x, bounds.y, bounds.width, bounds.height, true);
+		}
+		if (dropSelection == null) {
+			if (paintListener != null) {
+				tree.removePaintListener(paintListener);
+				paintListener = null;
+			}
+		} else {
+			if (paintListener == null) {
+				paintListener = new PaintListener() {
+					public void paintControl(PaintEvent e) {
+						if (dropSelection == null  || dropSelection.isDisposed()) return;
+						GC gc = e.gc;
+						boolean xor = gc.getXORMode();
+						gc.setXORMode(true);
+						Rectangle bounds = dropSelection.getBounds();
+						gc.fillRectangle(bounds.x, bounds.y, bounds.width, bounds.height);
+						gc.setXORMode(xor);
+					}
+				};
+				tree.addPaintListener(paintListener);
+			}
+		}
+	}
+	
+	void setInsertMark(Tree tree, TreeItem item, boolean before) {
+		if (item == insertItem && before == insertBefore) return;
+		insertItem = item;
+		insertBefore = before;
+		tree.setInsertMark(item, before);
+	}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/URLTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/URLTransfer.java
new file mode 100644
index 0000000..9e26635
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/motif/org/eclipse/swt/dnd/URLTransfer.java
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.internal.motif.*;
+ 
+/**
+ * The class <code>URLTransfer</code> provides a platform specific mechanism 
+ * for converting text in URL format represented as a java <code>String</code> 
+ * to a platform specific representation of the data and vice versa. The string
+ * must contain a fully specified url.
+ * 
+ * <p>An example of a java <code>String</code> containing a URL is shown below:</p>
+ * 
+ * <code><pre>
+ *     String url = "http://www.eclipse.org";
+ * </code></pre>
+ *
+ * @see Transfer
+ * @since 3.4
+ */
+public class URLTransfer extends ByteArrayTransfer {
+
+	static URLTransfer _instance = new URLTransfer();
+	
+	static final String TEXT_UNICODE = "text/unicode"; //$NON-NLS-1$
+	private static final String TEXT_XMOZURL = "text/x-moz-url"; //$NON-NLS-1$
+	static final int TEXT_UNICODE_ID = registerType(TEXT_UNICODE);
+	private static final int TEXT_XMOZURL_ID = registerType(TEXT_XMOZURL);	
+
+private URLTransfer() {}
+
+/**
+ * Returns the singleton instance of the URLTransfer class.
+ *
+ * @return the singleton instance of the URLTransfer class
+ */
+public static URLTransfer getInstance () {
+	return _instance;
+}
+
+/**
+ * This implementation of <code>javaToNative</code> converts a URL
+ * represented by a java <code>String</code> to a platform specific representation.
+ * 
+ * @param object a java <code>String</code> containing a URL
+ * @param transferData an empty <code>TransferData</code> object that will
+ *  	be filled in on return with the platform specific format of the data
+ * 
+ * @see Transfer#nativeToJava
+ */
+public void javaToNative (Object object, TransferData transferData){
+	transferData.result = 0;
+	if (!checkURL(object) || !isSupportedType(transferData)) {
+		DND.error(DND.ERROR_INVALID_DATA);
+	}
+	String string = (String)object;
+	int charCount = string.length();
+	char [] chars = new char[charCount +1];
+	string.getChars(0, charCount , chars, 0);
+	int byteCount = chars.length*2;
+	int pValue = OS.XtMalloc(byteCount);
+	if (pValue == 0) return;
+	OS.memmove(pValue, chars, byteCount);
+	transferData.length = byteCount;
+	transferData.format = 8;
+	transferData.pValue = pValue;
+	transferData.result = 1;
+}
+
+/**
+ * This implementation of <code>nativeToJava</code> converts a platform 
+ * specific representation of a URL to a java <code>String</code>.
+ * 
+ * @param transferData the platform specific representation of the data to be converted
+ * @return a java <code>String</code> containing a URL if the conversion was successful;
+ * 		otherwise null
+ * 
+ * @see Transfer#javaToNative
+ */
+public Object nativeToJava(TransferData transferData){
+	if ( !isSupportedType(transferData) ||  transferData.pValue == 0 ) return null;
+	/* Ensure byteCount is a multiple of 2 bytes */
+	int size = (transferData.format * transferData.length / 8) / 2 * 2;
+	if (size <= 0) return null;			
+	char[] chars = new char [size/2];
+	OS.memmove (chars, transferData.pValue, size);
+	String string = new String (chars);
+	int end = string.indexOf('\0');
+	return (end == -1) ? string : string.substring(0, end);
+}
+
+protected int[] getTypeIds(){
+	return new int[] {TEXT_XMOZURL_ID, TEXT_UNICODE_ID};
+}
+
+protected String[] getTypeNames(){
+	return new String[] {TEXT_XMOZURL, TEXT_UNICODE};
+}
+
+boolean checkURL(Object object) {
+	return object != null && (object instanceof String) && ((String)object).length() > 0;
+}
+
+protected boolean validate(Object object) {
+	return checkURL(object);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/ImageTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/ImageTransfer.java
new file mode 100644
index 0000000..8e5c3a4
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/ImageTransfer.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.dnd;
+
+/**
+ * The class <code>ImageTransfer</code> provides a platform specific mechanism 
+ * for converting an Image represented as a java <code>ImageData</code> to a 
+ * platform specific representation of the data and vice versa.  
+ * 
+ * <p>An example of a java <code>ImageData</code> is shown below:</p>
+ * 
+ * <code><pre>
+ *     Image image = new Image(display, "C:\temp\img1.gif");
+ *	   ImageData imgData = image.getImageData();
+ * </code></pre>
+ *
+ * @see Transfer
+ * 
+ * @since 3.4
+ */
+public class ImageTransfer extends ByteArrayTransfer {
+	
+private ImageTransfer() {}
+
+/**
+ * Returns the singleton instance of the ImageTransfer class.
+ *
+ * @return the singleton instance of the ImageTransfer class
+ */
+public static ImageTransfer getInstance () {
+	return null;
+}
+
+/**
+ * This implementation of <code>javaToNative</code> converts an ImageData object represented
+ * by java <code>ImageData</code> to a platform specific representation.
+ * 
+ * @param object a java <code>ImageData</code> containing the ImageData to be converted
+ * @param transferData an empty <code>TransferData</code> object that will
+ *  	be filled in on return with the platform specific format of the data
+ * 
+ * @see Transfer#nativeToJava
+ */
+public void javaToNative(Object object, TransferData transferData) {
+}
+
+/**
+ * This implementation of <code>nativeToJava</code> converts a platform specific 
+ * representation of an image to java <code>ImageData</code>.  
+ * 
+ * @param transferData the platform specific representation of the data to be converted
+ * @return a java <code>ImageData</code> of the image if the conversion was successful;
+ * 		otherwise null
+ * 
+ * @see Transfer#javaToNative
+ */
+public Object nativeToJava(TransferData transferData) {
+	return null;
+}
+
+protected int[] getTypeIds(){
+	return null;
+}
+
+protected String[] getTypeNames(){
+	return null;
+}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/TableDragSourceEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/TableDragSourceEffect.java
new file mode 100644
index 0000000..b7dbda5
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/TableDragSourceEffect.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.dnd;
+
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides default implementations to display a source image
+ * when a drag is initiated from a <code>Table</code>.
+ * 
+ * <p>Classes that wish to provide their own source image for a <code>Table</code> can
+ * extend the <code>TableDragSourceEffect</code> class, override the 
+ * <code>TableDragSourceEffect.dragStart</code> method and set the field 
+ * <code>DragSourceEvent.image</code> with their own image.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag source effect implementation.
+ *
+ * @see DragSourceEffect
+ * @see DragSourceEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TableDragSourceEffect extends DragSourceEffect {
+	/**
+	 * Creates a new <code>TableDragSourceEffect</code> to handle drag effect 
+	 * from the specified <code>Table</code>.
+	 *
+	 * @param table the <code>Table</code> that the user clicks on to initiate the drag
+	 */
+	public TableDragSourceEffect(Table table) {
+		super(table);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/TableDropTargetEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/TableDropTargetEffect.java
new file mode 100644
index 0000000..8818ec6
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/TableDropTargetEffect.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides a default drag under effect (eg. select, insert and scroll) 
+ * when a drag occurs over a <code>Table</code>.
+ * 
+ * <p>Classes that wish to provide their own drag under effect for a <code>Table</code>
+ * can extend the <code>TableDropTargetEffect</code> and override any applicable methods 
+ * in <code>TableDropTargetEffect</code> to display their own drag under effect.</p>
+ * 
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * <p>The feedback value is either one of the FEEDBACK constants defined in 
+ * class <code>DND</code> which is applicable to instances of this class, 
+ * or it must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> effect constants. 
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Feedback:</b></dt>
+ * <dd>FEEDBACK_SELECT, FEEDBACK_SCROLL</dd>
+ * </dl>
+ * </p>
+ * 
+ * @see DropTargetAdapter
+ * @see DropTargetEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TableDropTargetEffect extends DropTargetEffect {
+	/**
+	 * Creates a new <code>TableDropTargetEffect</code> to handle the drag under effect on the specified 
+	 * <code>Table</code>.
+	 * 
+	 * @param table the <code>Table</code> over which the user positions the cursor to drop the data
+	 */
+	public TableDropTargetEffect(Table table) {
+		super(table);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/TreeDragSourceEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/TreeDragSourceEffect.java
new file mode 100644
index 0000000..7a66beb
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/TreeDragSourceEffect.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.dnd;
+
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides default implementations to display a source image
+ * when a drag is initiated from a <code>Tree</code>.
+ * 
+ * <p>Classes that wish to provide their own source image for a <code>Tree</code> can
+ * extend <code>TreeDragSourceEffect</code> class and override the <code>TreeDragSourceEffect.dragStart</code>
+ * method and set the field <code>DragSourceEvent.image</code> with their own image.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * @see DragSourceEffect
+ * @see DragSourceEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TreeDragSourceEffect extends DragSourceEffect {
+	/**
+	 * Creates a new <code>TreeDragSourceEffect</code> to handle drag effect 
+	 * from the specified <code>Tree</code>.
+	 *
+	 * @param tree the <code>Tree</code> that the user clicks on to initiate the drag
+	 */
+	public TreeDragSourceEffect(Tree tree) {
+		super(tree);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/TreeDropTargetEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/TreeDropTargetEffect.java
new file mode 100644
index 0000000..348c374
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/TreeDropTargetEffect.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides a default drag under effect (eg. select, insert, scroll and expand) 
+ * when a drag occurs over a <code>Tree</code>.
+ * 
+ * <p>Classes that wish to provide their own drag under effect for a <code>Tree</code>
+ * can extend the <code>TreeDropTargetEffect</code> class and override any applicable methods 
+ * in <code>TreeDropTargetEffect</code> to display their own drag under effect.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * <p>The feedback value is either one of the FEEDBACK constants defined in 
+ * class <code>DND</code> which is applicable to instances of this class, 
+ * or it must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> effect constants. 
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Feedback:</b></dt>
+ * <dd>FEEDBACK_SELECT, FEEDBACK_INSERT_BEFORE, FEEDBACK_INSERT_AFTER, FEEDBACK_EXPAND, FEEDBACK_SCROLL</dd>
+ * </dl>
+ * </p><p>
+ * Note: Only one of the styles FEEDBACK_SELECT, FEEDBACK_INSERT_BEFORE or
+ * FEEDBACK_INSERT_AFTER may be specified.
+ * </p>
+ * 
+ * @see DropTargetAdapter
+ * @see DropTargetEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TreeDropTargetEffect extends DropTargetEffect {
+	/**
+	 * Creates a new <code>TreeDropTargetEffect</code> to handle the drag under effect on the specified 
+	 * <code>Tree</code>.
+	 * 
+	 * @param tree the <code>Tree</code> over which the user positions the cursor to drop the data
+	 */
+	public TreeDropTargetEffect(Tree tree) {
+		super(tree);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/URLTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/URLTransfer.java
new file mode 100644
index 0000000..589d3ec
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/photon/org/eclipse/swt/dnd/URLTransfer.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 20007 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;
+
+/**
+ * The class <code>URLTransfer</code> provides a platform specific mechanism 
+ * for converting text in URL format represented as a java <code>String</code> 
+ * to a platform specific representation of the data and vice versa. The string
+ * must contain a fully specified url.
+ * 
+ * <p>An example of a java <code>String</code> containing a URL is shown below:</p>
+ * 
+ * <code><pre>
+ *     String url = "http://www.eclipse.org";
+ * </code></pre>
+ *
+ * @see Transfer
+ * @since 3.4
+ */
+public class URLTransfer extends ByteArrayTransfer {
+
+private URLTransfer() {}
+
+/**
+ * Returns the singleton instance of the URLTransfer class.
+ *
+ * @return the singleton instance of the URLTransfer class
+ */
+public static URLTransfer getInstance () {
+	return null;
+}
+
+/**
+ * This implementation of <code>javaToNative</code> converts a URL
+ * represented by a java <code>String</code> to a platform specific representation.
+ * 
+ * @param object a java <code>String</code> containing a URL
+ * @param transferData an empty <code>TransferData</code> object that will
+ *  	be filled in on return with the platform specific format of the data
+ * 
+ * @see Transfer#nativeToJava
+ */
+public void javaToNative (Object object, TransferData transferData){
+}
+
+/**
+ * This implementation of <code>nativeToJava</code> converts a platform 
+ * specific representation of a URL to a java <code>String</code>.
+ * 
+ * @param transferData the platform specific representation of the data to be converted
+ * @return a java <code>String</code> containing a URL if the conversion was successful;
+ * 		otherwise null
+ * 
+ * @see Transfer#javaToNative
+ */
+public Object nativeToJava(TransferData transferData){
+	return null;
+}
+
+protected int[] getTypeIds(){
+	return null;
+}
+
+protected String[] getTypeNames(){
+	return null; 
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/ImageTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/ImageTransfer.java
new file mode 100644
index 0000000..426adf1
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/ImageTransfer.java
@@ -0,0 +1,209 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.internal.ole.win32.*;
+import org.eclipse.swt.internal.win32.*;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * The class <code>ImageTransfer</code> provides a platform specific mechanism 
+ * for converting an Image represented as a java <code>ImageData</code> to a 
+ * platform specific representation of the data and vice versa.  
+ * 
+ * <p>An example of a java <code>ImageData</code> is shown below:</p>
+ * 
+ * <code><pre>
+ *     Image image = new Image(display, "C:\temp\img1.gif");
+ *	   ImageData imgData = image.getImageData();
+ * </code></pre>
+ *
+ * @see Transfer
+ * 
+ * @since 3.4
+ */
+public class ImageTransfer extends ByteArrayTransfer {
+	
+	private static ImageTransfer _instance = new ImageTransfer();
+	private static final String CF_DIB = "CF_DIB"; //$NON-NLS-1$
+	private static final int CF_DIBID = COM.CF_DIB;
+	
+private ImageTransfer() {}
+
+/**
+ * Returns the singleton instance of the ImageTransfer class.
+ *
+ * @return the singleton instance of the ImageTransfer class
+ */
+public static ImageTransfer getInstance () {
+	return _instance;
+}
+
+/**
+ * This implementation of <code>javaToNative</code> converts an ImageData object represented
+ * by java <code>ImageData</code> to a platform specific representation.
+ * 
+ * @param object a java <code>ImageData</code> containing the ImageData to be converted
+ * @param transferData an empty <code>TransferData</code> object that will
+ *  	be filled in on return with the platform specific format of the data
+ * 
+ * @see Transfer#nativeToJava
+ */
+public void javaToNative(Object object, TransferData transferData) {
+	if (!checkImage(object) || !isSupportedType(transferData)) {
+		DND.error(DND.ERROR_INVALID_DATA);
+	}
+	ImageData imgData = (ImageData)object;
+	if (imgData == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	
+	int imageSize = imgData.data.length;
+	int imageHeight = imgData.height;
+	int bytesPerLine = imgData.bytesPerLine;
+
+	BITMAPINFOHEADER bmiHeader = new BITMAPINFOHEADER();
+	bmiHeader.biSize = BITMAPINFOHEADER.sizeof;
+	bmiHeader.biSizeImage = imageSize; 
+	bmiHeader.biWidth = imgData.width;
+	bmiHeader.biHeight = imageHeight;
+	bmiHeader.biPlanes = 1;
+	bmiHeader.biBitCount = (short)imgData.depth;
+	bmiHeader.biCompression = OS.DIB_RGB_COLORS; 
+
+	int colorSize = 0;
+	if (bmiHeader.biBitCount <= 8) {
+		colorSize += (1 << bmiHeader.biBitCount) * 4;
+	}
+	byte[] bmi = new byte[BITMAPINFOHEADER.sizeof + colorSize];
+	OS.MoveMemory(bmi, bmiHeader, BITMAPINFOHEADER.sizeof);	
+
+	RGB[] rgbs = imgData.palette.getRGBs();	
+	if (rgbs != null && colorSize > 0) {
+		int offset = BITMAPINFOHEADER.sizeof;
+		for (int j = 0; j < rgbs.length; j++) {
+			bmi[offset] = (byte)rgbs[j].blue;
+			bmi[offset + 1] = (byte)rgbs[j].green;
+			bmi[offset + 2] = (byte)rgbs[j].red;
+			bmi[offset + 3] = 0;
+			offset += 4;
+		}
+	}
+	int /*long*/ newPtr = OS.GlobalAlloc(OS.GMEM_FIXED | OS.GMEM_ZEROINIT, BITMAPINFOHEADER.sizeof + colorSize + imageSize);
+	OS.MoveMemory(newPtr, bmi, bmi.length);	
+	int /*long*/ pBitDest = newPtr + BITMAPINFOHEADER.sizeof + colorSize;
+
+	if (imageHeight <= 0) {
+		OS.MoveMemory(pBitDest, imgData.data, imageSize);
+	} else {
+		int offset = 0;
+		pBitDest += bytesPerLine * (imageHeight - 1);
+		byte[] scanline = new byte[bytesPerLine];
+		for (int i = 0; i < imageHeight; i++) {
+			System.arraycopy(imgData.data, offset, scanline, 0, bytesPerLine);
+			OS.MoveMemory(pBitDest, scanline, bytesPerLine);
+			offset += bytesPerLine;
+			pBitDest -= bytesPerLine;
+		}
+	}			
+	transferData.stgmedium = new STGMEDIUM();
+	transferData.stgmedium.tymed = COM.TYMED_HGLOBAL;
+	transferData.stgmedium.unionField = newPtr;
+	transferData.stgmedium.pUnkForRelease = 0;
+	transferData.result = COM.S_OK;
+}
+
+
+/**
+ * This implementation of <code>nativeToJava</code> converts a platform specific 
+ * representation of an image to java <code>ImageData</code>.  
+ * 
+ * @param transferData the platform specific representation of the data to be converted
+ * @return a java <code>ImageData</code> of the image if the conversion was successful;
+ * 		otherwise null
+ * 
+ * @see Transfer#javaToNative
+ */
+public Object nativeToJava(TransferData transferData) {
+	if (!isSupportedType(transferData) || transferData.pIDataObject == 0) return null;
+	IDataObject dataObject = new IDataObject(transferData.pIDataObject);
+	dataObject.AddRef();
+	FORMATETC formatetc = new FORMATETC();
+	formatetc.cfFormat = COM.CF_DIB;
+	formatetc.ptd = 0;
+	formatetc.dwAspect = COM.DVASPECT_CONTENT;
+	formatetc.lindex = -1;
+	formatetc.tymed = COM.TYMED_HGLOBAL;
+	STGMEDIUM stgmedium = new STGMEDIUM();
+	stgmedium.tymed = COM.TYMED_HGLOBAL;
+	transferData.result = getData(dataObject, formatetc, stgmedium);
+
+	if (transferData.result != COM.S_OK) return null;
+	int /*long*/ hMem = stgmedium.unionField;
+	dataObject.Release();
+	try {
+		int /*long*/ ptr = OS.GlobalLock(hMem);
+		if (ptr == 0) return null;
+		try {
+			BITMAPINFOHEADER bmiHeader = new BITMAPINFOHEADER();				
+			OS.MoveMemory(bmiHeader, ptr, BITMAPINFOHEADER.sizeof);
+			int /*long*/[] pBits = new int /*long*/[1]; 
+			int /*long*/ memDib = OS.CreateDIBSection(0, ptr, OS.DIB_RGB_COLORS, pBits, 0, 0);
+			if (memDib == 0) SWT.error(SWT.ERROR_NO_HANDLES);			
+			int /*long*/ bits = ptr + bmiHeader.biSize;
+			if (bmiHeader.biBitCount <= 8) {
+				bits += (bmiHeader.biClrUsed == 0 ? (1 << bmiHeader.biBitCount) : bmiHeader.biClrUsed) * 4;
+			} else if (bmiHeader.biCompression == OS.BI_BITFIELDS) {
+				bits += 12;
+			}
+			if (bmiHeader.biHeight < 0) {
+				OS.MoveMemory(pBits[0], bits, bmiHeader.biSizeImage);
+			} else {
+				DIBSECTION dib = new DIBSECTION();
+				OS.GetObject(memDib, DIBSECTION.sizeof, dib);
+				int biHeight = dib.biHeight;
+				int scanline = dib.biSizeImage / biHeight;
+				int /*long*/ pDestBits = pBits[0];
+				int /*long*/ pSourceBits = bits + scanline * (biHeight - 1);
+				for (int i = 0; i < biHeight; i++) {
+					OS.MoveMemory(pDestBits, pSourceBits, scanline);
+					pDestBits += scanline;
+					pSourceBits -= scanline;
+				}
+			}
+			Image image = Image.win32_new(null, SWT.BITMAP, memDib);
+			ImageData data = image.getImageData();
+			OS.DeleteObject(memDib);
+			image.dispose();
+			return data;
+		} finally {
+			OS.GlobalUnlock(hMem);
+		}
+	} finally {
+		OS.GlobalFree(hMem);
+	}
+}
+
+protected int[] getTypeIds(){
+	return new int[] {CF_DIBID};
+}
+
+protected String[] getTypeNames(){
+	return new String[] {CF_DIB};
+}
+boolean checkImage(Object object) {
+	if (object == null || !(object instanceof ImageData))  return false; 
+	return true;
+}
+
+protected boolean validate(Object object) {
+	return checkImage(object);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/TableDragSourceEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/TableDragSourceEffect.java
new file mode 100644
index 0000000..bc25bd3
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/TableDragSourceEffect.java
@@ -0,0 +1,199 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.dnd;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.win32.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides default implementations to display a source image
+ * when a drag is initiated from a <code>Table</code>.
+ * 
+ * <p>Classes that wish to provide their own source image for a <code>Table</code> can
+ * extend the <code>TableDragSourceEffect</code> class, override the 
+ * <code>TableDragSourceEffect.dragStart</code> method and set the field 
+ * <code>DragSourceEvent.image</code> with their own image.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag source effect implementation.
+ *
+ * @see DragSourceEffect
+ * @see DragSourceEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TableDragSourceEffect extends DragSourceEffect {
+	Image dragSourceImage = null;
+	
+	/**
+	 * Creates a new <code>TableDragSourceEffect</code> to handle drag effect 
+	 * from the specified <code>Table</code>.
+	 *
+	 * @param table the <code>Table</code> that the user clicks on to initiate the drag
+	 */
+	public TableDragSourceEffect(Table table) {
+		super(table);
+	}
+
+	/**
+	 * This implementation of <code>dragFinished</code> disposes the image
+	 * that was created in <code>TableDragSourceEffect.dragStart</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragFinished(event)</code>
+	 * to dispose the image in the default implementation.
+	 * 
+	 * @param event the information associated with the drag finished event
+	 */
+	public void dragFinished(DragSourceEvent event) {
+		if (dragSourceImage != null) dragSourceImage.dispose();
+		dragSourceImage = null;		
+	}
+	
+	/**
+	 * This implementation of <code>dragStart</code> will create a default
+	 * image that will be used during the drag. The image should be disposed
+	 * when the drag is completed in the <code>TableDragSourceEffect.dragFinished</code>
+	 * method.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragStart(event)</code>
+	 * to use the image from the default implementation.
+	 * 
+	 * @param event the information associated with the drag start event
+	 */
+	public void dragStart(DragSourceEvent event) {
+		event.image = getDragSourceImage(event);
+	}
+	
+	Image getDragSourceImage(DragSourceEvent event) {
+		if (dragSourceImage != null) dragSourceImage.dispose();
+		dragSourceImage = null;
+		if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) {
+			SHDRAGIMAGE shdi = new SHDRAGIMAGE();
+			int DI_GETDRAGIMAGE = OS.RegisterWindowMessage (new TCHAR (0, "ShellGetDragImage", true)); //$NON-NLS-1$
+			if (OS.SendMessage (control.handle, DI_GETDRAGIMAGE, 0, shdi) != 0) {
+				if ((control.getStyle() & SWT.MIRRORED) != 0) {
+					event.offsetX = shdi.sizeDragImage.cx - shdi.ptOffset.x;
+				} else {
+					event.offsetX = shdi.ptOffset.x;
+				}
+				event.offsetY = shdi.ptOffset.y;
+				int /*long*/ hImage = shdi.hbmpDragImage;
+				if (hImage != 0) {
+					BITMAP bm = new BITMAP ();
+					OS.GetObject (hImage, BITMAP.sizeof, bm);
+					int srcWidth = bm.bmWidth;
+					int srcHeight = bm.bmHeight;
+					
+					/* Create resources */
+					int /*long*/ hdc = OS.GetDC (0);
+					int /*long*/ srcHdc = OS.CreateCompatibleDC (hdc);
+					int /*long*/ oldSrcBitmap = OS.SelectObject (srcHdc, hImage);
+					int /*long*/ memHdc = OS.CreateCompatibleDC (hdc);
+					BITMAPINFOHEADER bmiHeader = new BITMAPINFOHEADER ();
+					bmiHeader.biSize = BITMAPINFOHEADER.sizeof;
+					bmiHeader.biWidth = srcWidth;
+					bmiHeader.biHeight = -srcHeight;
+					bmiHeader.biPlanes = 1;
+					bmiHeader.biBitCount = 32;
+					bmiHeader.biCompression = OS.BI_RGB;
+					byte []	bmi = new byte[BITMAPINFOHEADER.sizeof];
+					OS.MoveMemory (bmi, bmiHeader, BITMAPINFOHEADER.sizeof);
+					int /*long*/ [] pBits = new int /*long*/ [1];
+					int /*long*/ memDib = OS.CreateDIBSection (0, bmi, OS.DIB_RGB_COLORS, pBits, 0, 0);
+					if (memDib == 0) SWT.error (SWT.ERROR_NO_HANDLES);
+					int /*long*/ oldMemBitmap = OS.SelectObject (memHdc, memDib);
+
+					BITMAP dibBM = new BITMAP ();
+					OS.GetObject (memDib, BITMAP.sizeof, dibBM);
+					int sizeInBytes = dibBM.bmWidthBytes * dibBM.bmHeight;
+
+				 	/* Get the foreground pixels */
+				 	OS.BitBlt (memHdc, 0, 0, srcWidth, srcHeight, srcHdc, 0, 0, OS.SRCCOPY);
+				 	byte[] srcData = new byte [sizeInBytes];
+					OS.MoveMemory (srcData, dibBM.bmBits, sizeInBytes);
+
+					PaletteData palette = new PaletteData(0xFF00, 0xFF0000, 0xFF000000);
+					ImageData data = new ImageData(srcWidth, srcHeight, bm.bmBitsPixel, palette, bm.bmWidthBytes, srcData);
+					if (shdi.crColorKey == -1) {
+						byte[] alphaData = new byte[srcWidth * srcHeight];
+						int spinc = dibBM.bmWidthBytes - srcWidth * 4;
+						int ap = 0, sp = 3;
+						for (int y = 0; y < srcHeight; ++y) {
+							for (int x = 0; x < srcWidth; ++x) {
+								alphaData [ap++] = srcData [sp];
+								sp += 4;
+							}
+							sp += spinc;
+						}
+						data.alphaData = alphaData;
+					} else {
+						data.transparentPixel = shdi.crColorKey << 8;
+					}
+					dragSourceImage = new Image(control.getDisplay(), data);
+					OS.SelectObject (memHdc, oldMemBitmap);
+					OS.DeleteDC (memHdc);
+					OS.DeleteObject (memDib);
+					OS.SelectObject (srcHdc, oldSrcBitmap);
+					OS.DeleteDC (srcHdc);
+					OS.ReleaseDC (0, hdc);
+					OS.DeleteObject (hImage);
+					return dragSourceImage;
+				}
+			}
+			return null;
+		}
+		Table table = (Table) control;
+		//TEMPORARY CODE
+		if (table.isListening (SWT.EraseItem) || table.isListening (SWT.PaintItem)) return null;
+		TableItem[] selection = table.getSelection();
+		if (selection.length == 0) return null;
+		int /*long*/ tableImageList = OS.SendMessage (table.handle, OS.LVM_GETIMAGELIST, OS.LVSIL_SMALL, 0);
+		if (tableImageList != 0) {
+			int count = Math.min(selection.length, 10);
+			Rectangle bounds = selection[0].getBounds(0);
+			for (int i = 1; i < count; i++) {
+				bounds = bounds.union(selection[i].getBounds(0));
+			}
+			int /*long*/ hDC = OS.GetDC(0);
+			int /*long*/ hDC1 = OS.CreateCompatibleDC(hDC);
+			if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION(4, 10)) {
+				if ((table.getStyle() & SWT.RIGHT_TO_LEFT) != 0) {
+					OS.SetLayout(hDC1, OS.LAYOUT_RTL | OS.LAYOUT_BITMAPORIENTATIONPRESERVED);
+				}
+			}
+			int /*long*/ bitmap = OS.CreateCompatibleBitmap(hDC, bounds.width, bounds.height);
+			int /*long*/ hOldBitmap = OS.SelectObject(hDC1, bitmap);
+			RECT rect = new RECT();
+			rect.right = bounds.width;
+			rect.bottom = bounds.height;
+			int /*long*/ hBrush = OS.GetStockObject(OS.WHITE_BRUSH);
+			OS.FillRect(hDC1, rect, hBrush);
+			for (int i = 0; i < count; i++) {
+				TableItem selected = selection[i];
+				Rectangle cell = selected.getBounds(0);
+				POINT pt = new POINT();
+				int /*long*/ imageList = OS.SendMessage (table.handle, OS.LVM_CREATEDRAGIMAGE, table.indexOf(selected), pt);
+				OS.ImageList_Draw(imageList, 0, hDC1, cell.x - bounds.x, cell.y - bounds.y, OS.ILD_SELECTED);
+				OS.ImageList_Destroy(imageList);
+			}
+			OS.SelectObject(hDC1, hOldBitmap);
+			OS.DeleteDC (hDC1);
+			OS.ReleaseDC (0, hDC);
+			Display display = table.getDisplay();
+			dragSourceImage = Image.win32_new(display, SWT.BITMAP, bitmap);
+			return dragSourceImage;
+		}
+		return null;
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/TableDropTargetEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/TableDropTargetEffect.java
new file mode 100644
index 0000000..6d27948
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/TableDropTargetEffect.java
@@ -0,0 +1,204 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.dnd;
+
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.win32.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides a default drag under effect (eg. select, insert and scroll) 
+ * when a drag occurs over a <code>Table</code>.
+ * 
+ * <p>Classes that wish to provide their own drag under effect for a <code>Table</code>
+ * can extend the <code>TableDropTargetEffect</code> and override any applicable methods 
+ * in <code>TableDropTargetEffect</code> to display their own drag under effect.</p>
+ * 
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * <p>The feedback value is either one of the FEEDBACK constants defined in 
+ * class <code>DND</code> which is applicable to instances of this class, 
+ * or it must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> effect constants. 
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Feedback:</b></dt>
+ * <dd>FEEDBACK_SELECT, FEEDBACK_SCROLL</dd>
+ * </dl>
+ * </p>
+ * 
+ * @see DropTargetAdapter
+ * @see DropTargetEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TableDropTargetEffect extends DropTargetEffect {
+	static final int SCROLL_HYSTERESIS = 200; // milli seconds
+	
+	int scrollIndex = -1;
+	long scrollBeginTime;
+	TableItem dropHighlight;
+
+	/**
+	 * Creates a new <code>TableDropTargetEffect</code> to handle the drag under effect on the specified 
+	 * <code>Table</code>.
+	 * 
+	 * @param table the <code>Table</code> over which the user positions the cursor to drop the data
+	 */
+	public TableDropTargetEffect(Table table) {
+		super(table);
+	}
+
+	int checkEffect(int effect) {
+		// Some effects are mutually exclusive.  Make sure that only one of the mutually exclusive effects has been specified.
+		if ((effect & DND.FEEDBACK_SELECT) != 0) effect = effect & ~DND.FEEDBACK_INSERT_AFTER & ~DND.FEEDBACK_INSERT_BEFORE;
+		if ((effect & DND.FEEDBACK_INSERT_BEFORE) != 0) effect = effect & ~DND.FEEDBACK_INSERT_AFTER;
+		return effect;
+	}
+
+	/**
+	 * This implementation of <code>dragEnter</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragEnter</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragEnter(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag enter event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 */
+	public void dragEnter(DropTargetEvent event) {
+		scrollBeginTime = 0;
+		scrollIndex = -1;
+		dropHighlight = null;
+	}
+	
+	/**
+	 * This implementation of <code>dragLeave</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>. 
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragLeave</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragLeave(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag leave event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 */
+	public void dragLeave(DropTargetEvent event) {
+		Table table = (Table) control;
+		int /*long*/ handle = table.handle;
+		if (dropHighlight != null) {
+			LVITEM lvItem = new LVITEM ();
+			lvItem.stateMask = OS.LVIS_DROPHILITED;
+			OS.SendMessage(handle, OS.LVM_SETITEMSTATE, -1, lvItem);		
+			dropHighlight = null;
+		}
+		scrollBeginTime = 0;
+		scrollIndex = -1;
+	}
+
+	/**
+	 * This implementation of <code>dragOver</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>. The class description 
+	 * lists the FEEDBACK constants that are applicable to the class.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragOver</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragOver(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag over event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 * @see DND#FEEDBACK_SELECT
+	 * @see DND#FEEDBACK_SCROLL
+	 */
+	public void dragOver(DropTargetEvent event) {
+		Table table = (Table) getControl();
+		int effect = checkEffect(event.feedback);
+		int /*long*/ handle = table.handle;
+		Point coordinates = new Point(event.x, event.y);
+		coordinates = table.toControl(coordinates);
+		LVHITTESTINFO pinfo = new LVHITTESTINFO();
+		pinfo.x = coordinates.x;
+		pinfo.y = coordinates.y;
+		OS.SendMessage(handle, OS.LVM_HITTEST, 0, pinfo);	
+		if ((effect & DND.FEEDBACK_SCROLL) == 0) {
+			scrollBeginTime = 0;
+			scrollIndex = -1;
+		} else {
+			if (pinfo.iItem != -1 && scrollIndex == pinfo.iItem && scrollBeginTime != 0) {
+				if (System.currentTimeMillis() >= scrollBeginTime) {
+					int top = Math.max (0, (int)/*64*/OS.SendMessage (handle, OS.LVM_GETTOPINDEX, 0, 0));
+					int count = (int)/*64*/OS.SendMessage (handle, OS.LVM_GETITEMCOUNT, 0, 0);
+					int index = (scrollIndex - 1 < top) ? Math.max(0, scrollIndex - 1) : Math.min(count - 1, scrollIndex + 1);
+					boolean scroll = true;
+					if (pinfo.iItem == top) {
+						scroll = pinfo.iItem != index;
+					} else {
+						RECT itemRect = new RECT ();
+						itemRect.left = OS.LVIR_BOUNDS;
+						if (OS.SendMessage (handle, OS.LVM_GETITEMRECT, pinfo.iItem, itemRect) != 0) {
+							RECT rect = new RECT ();
+							OS.GetClientRect (handle, rect);
+							POINT pt = new POINT ();
+							pt.x = itemRect.left;
+							pt.y = itemRect.top;
+							if (OS.PtInRect (rect, pt)) {
+								pt.y = itemRect.bottom;
+								if (OS.PtInRect (rect, pt)) scroll = false;
+							}
+						}
+					}
+					if (scroll) {
+						OS.SendMessage (handle, OS.LVM_ENSUREVISIBLE, index, 0);
+						table.redraw();
+					}
+					scrollBeginTime = 0;
+					scrollIndex = -1;
+				}
+			} else {
+				scrollBeginTime = System.currentTimeMillis() + SCROLL_HYSTERESIS;
+				scrollIndex = pinfo.iItem;
+			}
+		}
+		
+		if (pinfo.iItem != -1 && (effect & DND.FEEDBACK_SELECT) != 0) {
+			TableItem item = table.getItem(pinfo.iItem);
+			if (dropHighlight != item) {
+				LVITEM lvItem = new LVITEM();
+				lvItem.stateMask = OS.LVIS_DROPHILITED;
+				OS.SendMessage(handle, OS.LVM_SETITEMSTATE, -1, lvItem);		
+				lvItem.state = OS.LVIS_DROPHILITED;
+				OS.SendMessage(handle, OS.LVM_SETITEMSTATE, pinfo.iItem, lvItem);
+				dropHighlight = item;
+			}
+		} else {
+			if (dropHighlight != null) {
+				LVITEM lvItem = new LVITEM ();
+				lvItem.stateMask = OS.LVIS_DROPHILITED;
+				OS.SendMessage(handle, OS.LVM_SETITEMSTATE, -1, lvItem);		
+				dropHighlight = null;
+			}
+		}
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/TreeDragSourceEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/TreeDragSourceEffect.java
new file mode 100644
index 0000000..645549a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/TreeDragSourceEffect.java
@@ -0,0 +1,193 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.dnd;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.win32.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides default implementations to display a source image
+ * when a drag is initiated from a <code>Tree</code>.
+ * 
+ * <p>Classes that wish to provide their own source image for a <code>Tree</code> can
+ * extend <code>TreeDragSourceEffect</code> class and override the <code>TreeDragSourceEffect.dragStart</code>
+ * method and set the field <code>DragSourceEvent.image</code> with their own image.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * @see DragSourceEffect
+ * @see DragSourceEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TreeDragSourceEffect extends DragSourceEffect {
+	Image dragSourceImage = null;
+
+	/**
+	 * Creates a new <code>TreeDragSourceEffect</code> to handle drag effect 
+	 * from the specified <code>Tree</code>.
+	 *
+	 * @param tree the <code>Tree</code> that the user clicks on to initiate the drag
+	 */
+	public TreeDragSourceEffect(Tree tree) {
+		super(tree);
+	}
+
+	/**
+	 * This implementation of <code>dragFinished</code> disposes the image
+	 * that was created in <code>TreeDragSourceEffect.dragStart</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragFinished(event)</code>
+	 * to dispose the image in the default implementation.
+	 * 
+	 * @param event the information associated with the drag finished event
+	 */
+	public void dragFinished(DragSourceEvent event) {
+		if (dragSourceImage != null) dragSourceImage.dispose();
+		dragSourceImage = null;
+	}
+
+	/**
+	 * This implementation of <code>dragStart</code> will create a default
+	 * image that will be used during the drag. The image should be disposed
+	 * when the drag is completed in the <code>TreeDragSourceEffect.dragFinished</code>
+	 * method.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragStart(event)</code>
+	 * to use the image from the default implementation.
+	 * 
+	 * @param event the information associated with the drag start event
+	 */
+	public void dragStart(DragSourceEvent event) {
+		event.image = getDragSourceImage(event);
+	}
+
+	Image getDragSourceImage(DragSourceEvent event) {
+		if (dragSourceImage != null) dragSourceImage.dispose();
+		dragSourceImage = null;
+		if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) {
+			SHDRAGIMAGE shdi = new SHDRAGIMAGE();
+			int DI_GETDRAGIMAGE = OS.RegisterWindowMessage (new TCHAR (0, "ShellGetDragImage", true)); //$NON-NLS-1$
+			if (OS.SendMessage (control.handle, DI_GETDRAGIMAGE, 0, shdi) != 0) {
+				if ((control.getStyle() & SWT.MIRRORED) != 0) {
+					event.offsetX = shdi.sizeDragImage.cx - shdi.ptOffset.x;
+				} else {
+					event.offsetX = shdi.ptOffset.x;
+				}
+				event.offsetY = shdi.ptOffset.y;
+				int /*long*/ hImage = shdi.hbmpDragImage;
+				if (hImage != 0) {
+					BITMAP bm = new BITMAP ();
+					OS.GetObject (hImage, BITMAP.sizeof, bm);
+					int srcWidth = bm.bmWidth;
+					int srcHeight = bm.bmHeight;
+					
+					/* Create resources */
+					int /*long*/ hdc = OS.GetDC (0);
+					int /*long*/ srcHdc = OS.CreateCompatibleDC (hdc);
+					int /*long*/ oldSrcBitmap = OS.SelectObject (srcHdc, hImage);
+					int /*long*/ memHdc = OS.CreateCompatibleDC (hdc);
+					BITMAPINFOHEADER bmiHeader = new BITMAPINFOHEADER ();
+					bmiHeader.biSize = BITMAPINFOHEADER.sizeof;
+					bmiHeader.biWidth = srcWidth;
+					bmiHeader.biHeight = -srcHeight;
+					bmiHeader.biPlanes = 1;
+					bmiHeader.biBitCount = 32;
+					bmiHeader.biCompression = OS.BI_RGB;
+					byte []	bmi = new byte[BITMAPINFOHEADER.sizeof];
+					OS.MoveMemory (bmi, bmiHeader, BITMAPINFOHEADER.sizeof);
+					int /*long*/ [] pBits = new int /*long*/ [1];
+					int /*long*/ memDib = OS.CreateDIBSection (0, bmi, OS.DIB_RGB_COLORS, pBits, 0, 0);
+					if (memDib == 0) SWT.error (SWT.ERROR_NO_HANDLES);
+					int /*long*/ oldMemBitmap = OS.SelectObject (memHdc, memDib);
+
+					BITMAP dibBM = new BITMAP ();
+					OS.GetObject (memDib, BITMAP.sizeof, dibBM);
+					int sizeInBytes = dibBM.bmWidthBytes * dibBM.bmHeight;
+
+				 	/* Get the foreground pixels */
+				 	OS.BitBlt (memHdc, 0, 0, srcWidth, srcHeight, srcHdc, 0, 0, OS.SRCCOPY);
+				 	byte[] srcData = new byte [sizeInBytes];
+					OS.MoveMemory (srcData, dibBM.bmBits, sizeInBytes);
+					
+					PaletteData palette = new PaletteData(0xFF00, 0xFF0000, 0xFF000000);
+					ImageData data = new ImageData(srcWidth, srcHeight, bm.bmBitsPixel, palette, bm.bmWidthBytes, srcData);
+					if (shdi.crColorKey == -1) {
+						byte[] alphaData = new byte[srcWidth * srcHeight];
+						int spinc = dibBM.bmWidthBytes - srcWidth * 4;
+						int ap = 0, sp = 3;
+						for (int y = 0; y < srcHeight; ++y) {
+							for (int x = 0; x < srcWidth; ++x) {
+								alphaData [ap++] = srcData [sp];
+								sp += 4;
+							}
+							sp += spinc;
+						}
+						data.alphaData = alphaData;
+					} else {
+						data.transparentPixel = shdi.crColorKey << 8;
+					}
+					dragSourceImage = new Image (control.getDisplay (), data);
+					OS.SelectObject (memHdc, oldMemBitmap);
+					OS.DeleteDC (memHdc);
+					OS.DeleteObject (memDib);
+					OS.SelectObject (srcHdc, oldSrcBitmap);
+					OS.DeleteDC (srcHdc);
+					OS.ReleaseDC (0, hdc);
+					OS.DeleteObject (hImage);
+					return dragSourceImage;
+				}
+			}
+			return null;
+		}
+		
+		Tree tree = (Tree) control;
+		//TEMPORARY CODE
+		if (tree.isListening (SWT.EraseItem) || tree.isListening (SWT.PaintItem)) return null;
+		TreeItem[] selection = tree.getSelection();
+		if (selection.length == 0) return null;
+		int /*long*/ treeImageList = OS.SendMessage (tree.handle, OS.TVM_GETIMAGELIST, OS.TVSIL_NORMAL, 0);
+		if (treeImageList != 0) {
+			int count = Math.min(selection.length, 10);
+			Rectangle bounds = selection[0].getBounds(0);
+			for (int i = 1; i < count; i++) {
+				bounds = bounds.union(selection[i].getBounds(0));
+			}
+			int /*long*/ hDC = OS.GetDC(tree.handle);
+			int /*long*/ hDC1 = OS.CreateCompatibleDC(hDC);
+			int /*long*/ bitmap = OS.CreateCompatibleBitmap(hDC, bounds.width, bounds.height);
+			int /*long*/ hOldBitmap = OS.SelectObject(hDC1, bitmap);
+			RECT rect = new RECT();
+			rect.right = bounds.width;
+			rect.bottom = bounds.height;
+			int /*long*/ hBrush = OS.GetStockObject(OS.WHITE_BRUSH);
+			OS.FillRect(hDC1, rect, hBrush);
+			for (int i = 0; i < count; i++) {
+				TreeItem selected = selection[i];
+				Rectangle cell = selected.getBounds(0);
+				int /*long*/ imageList = OS.SendMessage(tree.handle, OS.TVM_CREATEDRAGIMAGE, 0, selected.handle);
+				OS.ImageList_Draw(imageList, 0, hDC1, cell.x - bounds.x, cell.y - bounds.y, OS.ILD_SELECTED);
+				OS.ImageList_Destroy(imageList);
+			}
+			OS.SelectObject(hDC1, hOldBitmap);
+			OS.DeleteDC (hDC1);
+			OS.ReleaseDC (tree.handle, hDC);
+			Display display = tree.getDisplay();
+			dragSourceImage = Image.win32_new(display, SWT.BITMAP, bitmap);
+			return dragSourceImage;
+		}
+		return null;
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/TreeDropTargetEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/TreeDropTargetEffect.java
new file mode 100644
index 0000000..04776fa
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/TreeDropTargetEffect.java
@@ -0,0 +1,278 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.dnd;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.win32.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides a default drag under effect (eg. select, insert, scroll and expand) 
+ * when a drag occurs over a <code>Tree</code>.
+ * 
+ * <p>Classes that wish to provide their own drag under effect for a <code>Tree</code>
+ * can extend the <code>TreeDropTargetEffect</code> class and override any applicable methods 
+ * in <code>TreeDropTargetEffect</code> to display their own drag under effect.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * <p>The feedback value is either one of the FEEDBACK constants defined in 
+ * class <code>DND</code> which is applicable to instances of this class, 
+ * or it must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> effect constants. 
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Feedback:</b></dt>
+ * <dd>FEEDBACK_SELECT, FEEDBACK_INSERT_BEFORE, FEEDBACK_INSERT_AFTER, FEEDBACK_EXPAND, FEEDBACK_SCROLL</dd>
+ * </dl>
+ * </p><p>
+ * Note: Only one of the styles FEEDBACK_SELECT, FEEDBACK_INSERT_BEFORE or
+ * FEEDBACK_INSERT_AFTER may be specified.
+ * </p>
+ * 
+ * @see DropTargetAdapter
+ * @see DropTargetEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TreeDropTargetEffect extends DropTargetEffect {
+	static final int SCROLL_HYSTERESIS = 200; // milli seconds
+	static final int EXPAND_HYSTERESIS = 1000; // milli seconds
+
+	int /*long*/ dropIndex;
+	int /*long*/ scrollIndex;	
+	long scrollBeginTime;
+	int /*long*/ expandIndex;
+	long expandBeginTime;
+	TreeItem insertItem;
+	boolean insertBefore;
+	
+	/**
+	 * Creates a new <code>TreeDropTargetEffect</code> to handle the drag under effect on the specified 
+	 * <code>Tree</code>.
+	 * 
+	 * @param tree the <code>Tree</code> over which the user positions the cursor to drop the data
+	 */
+	public TreeDropTargetEffect(Tree tree) {
+		super(tree);
+	}
+
+	int checkEffect(int effect) {
+		// Some effects are mutually exclusive.  Make sure that only one of the mutually exclusive effects has been specified.
+		if ((effect & DND.FEEDBACK_SELECT) != 0) effect = effect & ~DND.FEEDBACK_INSERT_AFTER & ~DND.FEEDBACK_INSERT_BEFORE;
+		if ((effect & DND.FEEDBACK_INSERT_BEFORE) != 0) effect = effect & ~DND.FEEDBACK_INSERT_AFTER;
+		return effect;
+	}
+
+	/**
+	 * This implementation of <code>dragEnter</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragEnter</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragEnter(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag enter event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 */
+	public void dragEnter(DropTargetEvent event) {
+		dropIndex = -1;
+		insertItem = null;
+		expandBeginTime = 0;
+		expandIndex = -1;	
+		scrollBeginTime = 0;
+		scrollIndex = -1;
+	}
+	
+	/**
+	 * This implementation of <code>dragLeave</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragLeave</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragLeave(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag leave event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 */
+	public void dragLeave(DropTargetEvent event) {
+		Tree tree = (Tree) control;
+		int /*long*/ handle = tree.handle;
+		if (dropIndex != -1) {
+			TVITEM tvItem = new TVITEM ();
+			tvItem.hItem = dropIndex;
+			tvItem.mask = OS.TVIF_STATE;
+			tvItem.stateMask = OS.TVIS_DROPHILITED;
+			tvItem.state = 0;
+			OS.SendMessage (handle, OS.TVM_SETITEM, 0, tvItem);
+			dropIndex = -1;
+		}
+		if (insertItem != null) {
+			tree.setInsertMark(null, false);
+			insertItem = null;
+		}
+		expandBeginTime = 0;
+		expandIndex = -1;	
+		scrollBeginTime = 0;
+		scrollIndex = -1;
+	}
+
+	/**
+	 * This implementation of <code>dragOver</code> provides a default drag under effect
+	 * for the feedback specified in <code>event.feedback</code>.
+	 * 
+	 * For additional information see <code>DropTargetAdapter.dragOver</code>.
+	 * 
+	 * Subclasses that override this method should call <code>super.dragOver(event)</code>
+	 * to get the default drag under effect implementation.
+	 *
+	 * @param event  the information associated with the drag over event
+	 * 
+	 * @see DropTargetAdapter
+	 * @see DropTargetEvent
+	 * @see DND#FEEDBACK_SELECT
+	 * @see DND#FEEDBACK_INSERT_BEFORE
+	 * @see DND#FEEDBACK_INSERT_AFTER
+	 * @see DND#FEEDBACK_SCROLL
+	 */
+	public void dragOver(DropTargetEvent event) {
+		Tree tree = (Tree) getControl();
+		int effect = checkEffect(event.feedback);
+		int /*long*/ handle = tree.handle;
+		Point coordinates = new Point(event.x, event.y);
+		coordinates = tree.toControl(coordinates);
+		TVHITTESTINFO lpht = new TVHITTESTINFO ();
+		lpht.x = coordinates.x;
+		lpht.y = coordinates.y;
+		OS.SendMessage (handle, OS.TVM_HITTEST, 0, lpht);
+		int /*long*/ hItem = lpht.hItem;
+		if ((effect & DND.FEEDBACK_SCROLL) == 0) {
+			scrollBeginTime = 0;
+			scrollIndex = -1;
+		} else {
+			if (hItem != -1 && scrollIndex == hItem && scrollBeginTime != 0) {
+				if (System.currentTimeMillis() >= scrollBeginTime) {
+					int /*long*/ topItem = OS.SendMessage(handle, OS.TVM_GETNEXTITEM, OS.TVGN_FIRSTVISIBLE, 0);
+					int /*long*/ nextItem = OS.SendMessage(handle, OS.TVM_GETNEXTITEM, hItem == topItem ? OS.TVGN_PREVIOUSVISIBLE : OS.TVGN_NEXTVISIBLE, hItem);
+					boolean scroll = true;
+					if (hItem == topItem) {
+						scroll = nextItem != 0;
+					} else {
+						RECT itemRect = new RECT ();
+						if (OS.TreeView_GetItemRect (handle, nextItem, itemRect, true)) {
+							RECT rect = new RECT ();
+							OS.GetClientRect (handle, rect);
+							POINT pt = new POINT ();
+							pt.x = itemRect.left;
+							pt.y = itemRect.top;
+							if (OS.PtInRect (rect, pt)) {
+								pt.y = itemRect.bottom;
+								if (OS.PtInRect (rect, pt)) scroll = false;
+							}
+						}
+					}
+					if (scroll) {
+						OS.SendMessage (handle, OS.TVM_ENSUREVISIBLE, 0, nextItem);
+						tree.redraw();
+					}
+					scrollBeginTime = 0;
+					scrollIndex = -1;
+				}
+			} else {
+				scrollBeginTime = System.currentTimeMillis() + SCROLL_HYSTERESIS;
+				scrollIndex = hItem;
+			}
+		}
+		if ((effect & DND.FEEDBACK_EXPAND) == 0) {
+			expandBeginTime = 0;
+			expandIndex = -1;
+		} else {
+			if (hItem != -1 && expandIndex == hItem && expandBeginTime != 0) {
+				if (System.currentTimeMillis() >= expandBeginTime) {
+					if (OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CHILD, hItem) != 0) {
+						TreeItem item = (TreeItem)tree.getDisplay().findWidget(tree.handle, hItem);
+						if (item != null && !item.getExpanded()) {
+							item.setExpanded(true);
+							tree.redraw();
+							Event expandEvent = new Event ();
+							expandEvent.item = item;
+							tree.notifyListeners(SWT.Expand, expandEvent);
+						}
+					}
+					expandBeginTime = 0;
+					expandIndex = -1;
+				}
+			} else {
+				expandBeginTime = System.currentTimeMillis() + EXPAND_HYSTERESIS;
+				expandIndex = hItem;
+			}
+		}
+		if (dropIndex != -1 && (dropIndex != hItem || (effect & DND.FEEDBACK_SELECT) == 0)) {
+			TVITEM tvItem = new TVITEM ();
+			tvItem.hItem = dropIndex;
+			tvItem.mask = OS.TVIF_STATE;
+			tvItem.stateMask = OS.TVIS_DROPHILITED;
+			tvItem.state = 0;
+			OS.SendMessage (handle, OS.TVM_SETITEM, 0, tvItem);
+			dropIndex = -1;
+		}
+		if (hItem != -1 && hItem != dropIndex && (effect & DND.FEEDBACK_SELECT) != 0) {
+			TVITEM tvItem = new TVITEM ();
+			tvItem.hItem = hItem;
+			tvItem.mask = OS.TVIF_STATE;
+			tvItem.stateMask = OS.TVIS_DROPHILITED;
+			tvItem.state = OS.TVIS_DROPHILITED;
+			OS.SendMessage (handle, OS.TVM_SETITEM, 0, tvItem);
+			dropIndex = hItem;
+		}
+		if ((effect & DND.FEEDBACK_INSERT_BEFORE) != 0 || (effect & DND.FEEDBACK_INSERT_AFTER) != 0) {
+			boolean before = (effect & DND.FEEDBACK_INSERT_BEFORE) != 0;
+			/*
+			* Bug in Windows.  When TVM_SETINSERTMARK is used to set
+			* an insert mark for a tree and an item is expanded or
+			* collapsed near the insert mark, the tree does not redraw
+			* the insert mark properly.  The fix is to hide and show
+			* the insert mark whenever an item is expanded or collapsed.
+			* Since the insert mark can not be queried from the tree,
+			* use the Tree API rather than calling the OS directly.
+			*/
+			TreeItem item = (TreeItem)tree.getDisplay().findWidget(tree.handle, hItem);
+			if (item != null) {
+				if (item != insertItem || before != insertBefore) {
+					tree.setInsertMark(item, before);
+				}
+				insertItem = item;
+				insertBefore = before;
+			} else {
+				if (insertItem != null) {
+					tree.setInsertMark(null, false);
+				}
+				insertItem = null;
+			}
+		} else {
+			if (insertItem != null) {
+				tree.setInsertMark(null, false);
+			}
+			insertItem = null;
+		}
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/ByteArrayTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/ByteArrayTransfer.java
new file mode 100644
index 0000000..10d2c87
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/ByteArrayTransfer.java
@@ -0,0 +1,198 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.internal.wpf.*;
+
+
+/**
+ * The class <code>ByteArrayTransfer</code> provides a platform specific 
+ * mechanism for converting a java <code>byte[]</code> to a platform 
+ * specific representation of the byte array and vice versa.
+ *
+ * <p><code>ByteArrayTransfer</code> is never used directly but is sub-classed 
+ * by transfer agents that convert between data in a java format such as a
+ * <code>String</code> and a platform specific byte array.
+ * 
+ * <p>If the data you are converting <b>does not</b> map to a 
+ * <code>byte[]</code>, you should sub-class <code>Transfer</code> directly 
+ * and do your own mapping to a platform data type.</p>
+ * 
+ * <p>The following snippet shows a subclass of ByteArrayTransfer that transfers
+ * data defined by the class <code>MyType</code>.</p>
+ * 
+ * <pre><code>
+ * public class MyType {
+ *	public String fileName;
+ *	public long fileLength;
+ *	public long lastModified;
+ * }
+ * </code></pre>
+ * 
+ * <pre><code>
+ * public class MyTypeTransfer extends ByteArrayTransfer {
+ *	
+ *	private static final String MYTYPENAME = "my_type_name";
+ *	private static final int MYTYPEID = registerType(MYTYPENAME);
+ *	private static MyTypeTransfer _instance = new MyTypeTransfer();
+ * 
+ * private MyTypeTransfer() {}
+ * 
+ * public static MyTypeTransfer getInstance () {
+ * 	return _instance;
+ * }
+ * public void javaToNative (Object object, TransferData transferData) {
+ * 	if (object == null || !(object instanceof MyType[])) return;
+ * 	
+ * 	if (isSupportedType(transferData)) {
+ * 		MyType[] myTypes = (MyType[]) object;	
+ * 		try {
+ * 			// write data to a byte array and then ask super to convert to pMedium
+ * 			ByteArrayOutputStream out = new ByteArrayOutputStream();
+ * 			DataOutputStream writeOut = new DataOutputStream(out);
+ * 			for (int i = 0, length = myTypes.length; i &lt; length;  i++){
+ * 				byte[] buffer = myTypes[i].fileName.getBytes();
+ * 				writeOut.writeInt(buffer.length);
+ * 				writeOut.write(buffer);
+ * 				writeOut.writeLong(myTypes[i].fileLength);
+ * 				writeOut.writeLong(myTypes[i].lastModified);
+ * 			}
+ * 			byte[] buffer = out.toByteArray();
+ * 			writeOut.close();
+ * 
+ * 			super.javaToNative(buffer, transferData);
+ * 			
+ * 		} catch (IOException e) {
+ * 		}
+ * 	}
+ * }
+ * public Object nativeToJava(TransferData transferData){	
+ * 
+ * 	if (isSupportedType(transferData)) {
+ * 		
+ * 		byte[] buffer = (byte[])super.nativeToJava(transferData);
+ * 		if (buffer == null) return null;
+ * 		
+ * 		MyType[] myData = new MyType[0];
+ * 		try {
+ * 			ByteArrayInputStream in = new ByteArrayInputStream(buffer);
+ * 			DataInputStream readIn = new DataInputStream(in);
+ * 			while(readIn.available() > 20) {
+ * 				MyType datum = new MyType();
+ * 				int size = readIn.readInt();
+ * 				byte[] name = new byte[size];
+ * 				readIn.read(name);
+ * 				datum.fileName = new String(name);
+ * 				datum.fileLength = readIn.readLong();
+ * 				datum.lastModified = readIn.readLong();
+ * 				MyType[] newMyData = new MyType[myData.length + 1];
+ * 				System.arraycopy(myData, 0, newMyData, 0, myData.length);
+ * 				newMyData[myData.length] = datum;
+ * 				myData = newMyData;
+ * 			}
+ * 			readIn.close();
+ * 		} catch (IOException ex) {
+ * 			return null;
+ * 		}
+ * 		return myData;
+ * 	}
+ * 
+ * 	return null;
+ * }
+ * protected String[] getTypeNames(){
+ * 	return new String[]{MYTYPENAME};
+ * }
+ * protected int[] getTypeIds(){
+ * 	return new int[] {MYTYPEID};
+ * }
+ * }
+ * </code></pre>
+ *
+ * @see Transfer
+ */
+public abstract class ByteArrayTransfer extends Transfer {
+	
+boolean checkByteArray(Object object) {
+	return (object != null && object instanceof byte[] && ((byte[])object).length > 0);
+}
+
+public TransferData[] getSupportedTypes(){
+	int[] ids = getTypeIds();
+	TransferData[] result = new TransferData[ids.length];
+	for (int i = 0; i < result.length; i++) {
+		result[i] = new TransferData();
+		result[i].type = ids[i];
+	}
+	return result;
+}
+
+protected String[] getTypeNames(){
+	int[] ids = getTypeIds();
+	String[] result = new String[ids.length];
+	for (int i = 0; i < result.length; i++) {
+		result[i] = getTypeName(ids[i]);
+	}
+	return result;
+}
+
+public boolean isSupportedType(TransferData transferData){
+	if (transferData == null) return false;
+	int[] ids = getTypeIds();
+	for (int i = 0; i < ids.length; i++) {
+		if (transferData.type == ids[i]) return true;
+	}
+	return false;
+}
+
+/**
+ * This implementation of <code>javaToNative</code> converts a java 
+ * <code>byte[]</code> to a platform specific representation.
+ * 
+ * @param object a java <code>byte[]</code> containing the data to be converted
+ * @param transferData an empty <code>TransferData</code> object that will
+ *  	be filled in on return with the platform specific format of the data
+ * 
+ * @see Transfer#nativeToJava
+ */
+protected void javaToNative (Object object, TransferData transferData) {
+	if (!checkByteArray(object) || !isSupportedType(transferData)) {
+		DND.error(DND.ERROR_INVALID_DATA);
+	}
+	byte[] buffer = (byte[])object;
+	if (buffer.length == 0) return;
+	int typeid = OS.Byte_typeid();
+	int pValue = OS.Array_CreateInstance(typeid, buffer.length);
+	OS.GCHandle_Free(typeid);
+	if (pValue == 0) return;
+	OS.memcpy(pValue, buffer, buffer.length);
+	transferData.pValue = pValue;
+}
+
+/**
+ * This implementation of <code>nativeToJava</code> converts a platform specific 
+ * representation of a byte array to a java <code>byte[]</code>.   
+ * 
+ * @param transferData the platform specific representation of the data to be converted
+ * @return a java <code>byte[]</code> containing the converted data if the conversion was
+ * 		successful; otherwise null
+ * 
+ * @see Transfer#javaToNative
+ */
+protected Object nativeToJava(TransferData transferData) {
+	if ( !isSupportedType(transferData) || transferData.pValue == 0) return null;
+	int byteArray = transferData.pValue;
+	int length = OS.Array_GetLength(byteArray, 0);
+	byte[] buffer = new byte[length];
+	if (length == 0) return buffer;
+	OS.memcpy(buffer, transferData.pValue, length);
+	return buffer;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/Clipboard.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/Clipboard.java
new file mode 100644
index 0000000..3ea522a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/Clipboard.java
@@ -0,0 +1,546 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * The <code>Clipboard</code> provides a mechanism for transferring data from one
+ * application to another or within an application.
+ * 
+ * <p>IMPORTANT: This class is <em>not</em> intended to be subclassed.</p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#clipboard">Clipboard snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ClipboardExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Clipboard {
+
+	private Display display;
+
+/**
+ * Constructs a new instance of this class.  Creating an instance of a Clipboard
+ * may cause system resources to be allocated depending on the platform.  It is therefore
+ * mandatory that the Clipboard instance be disposed when no longer required.
+ *
+ * @param display the display on which to allocate the clipboard
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see Clipboard#dispose
+ * @see Clipboard#checkSubclass
+ */
+public Clipboard(Display display) {	
+	checkSubclass ();
+	if (display == null) {
+		display = Display.getCurrent();
+		if (display == null) {
+			display = Display.getDefault();
+		}
+	}
+	if (display.getThread() != Thread.currentThread()) {
+		DND.error(SWT.ERROR_THREAD_INVALID_ACCESS);
+	}
+	this.display = display;
+}
+
+/**
+ * Checks that this class can be subclassed.
+ * <p>
+ * The SWT class library is intended to be subclassed 
+ * only at specific, controlled points. This method enforces this
+ * rule unless it is overridden.
+ * </p><p>
+ * <em>IMPORTANT:</em> By providing an implementation of this
+ * method that allows a subclass of a class which does not 
+ * normally allow subclassing to be created, the implementer
+ * agrees to be fully responsible for the fact that any such
+ * subclass will likely fail between SWT releases and will be
+ * strongly platform specific. No support is provided for
+ * user-written classes which are implemented in this fashion.
+ * </p><p>
+ * The ability to subclass outside of the allowed SWT classes
+ * is intended purely to enable those not on the SWT development
+ * team to implement patches in order to get around specific
+ * limitations in advance of when those limitations can be
+ * addressed by the team. Subclassing should not be attempted
+ * without an intimate and detailed understanding of the hierarchy.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ */
+protected void checkSubclass () {
+	String name = getClass().getName ();
+	String validName = Clipboard.class.getName();
+	if (!validName.equals(name)) {
+		DND.error (SWT.ERROR_INVALID_SUBCLASS);
+	}
+}
+
+/**
+ * Throws an <code>SWTException</code> if the receiver can not
+ * be accessed by the caller. This may include both checks on
+ * the state of the receiver and more generally on the entire
+ * execution context. This method <em>should</em> be called by
+ * widget implementors to enforce the standard SWT invariants.
+ * <p>
+ * Currently, it is an error to invoke any method (other than
+ * <code>isDisposed()</code>) on a widget that has had its 
+ * <code>dispose()</code> method called. It is also an error
+ * to call widget methods from any thread that is different
+ * from the thread that created the widget.
+ * </p><p>
+ * In future releases of SWT, there may be more or fewer error
+ * checks and exceptions may be thrown for different reasons.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+protected void checkWidget () {
+	Display display = this.display;
+	if (display == null) DND.error (SWT.ERROR_WIDGET_DISPOSED);
+	if (display.getThread() != Thread.currentThread ()) DND.error (SWT.ERROR_THREAD_INVALID_ACCESS);
+	if (display.isDisposed()) DND.error(SWT.ERROR_WIDGET_DISPOSED);
+}
+
+/**
+ * If this clipboard is currently the owner of the data on the system clipboard,
+ * clear the contents.  If this clipboard is not the owner, then nothing is done.
+ * Note that there are clipboard assistant applications that take ownership of 
+ * data or make copies of data when it is placed on the clipboard.  In these 
+ * cases, it may not be possible to clear the clipboard.
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void clearContents() {
+	clearContents(DND.CLIPBOARD);
+}
+
+/**
+ * If this clipboard is currently the owner of the data on the specified 
+ * clipboard, clear the contents.  If this clipboard is not the owner, then 
+ * nothing is done.
+ * 
+ * <p>Note that there are clipboard assistant applications that take ownership
+ * of data or make copies of data when it is placed on the clipboard.  In these 
+ * cases, it may not be possible to clear the clipboard.</p>
+ * 
+ * <p>The clipboards value is either one of the clipboard constants defined in
+ * class <code>DND</code>, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> clipboard constants.</p>
+ * 
+ * @param clipboards to be cleared
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see DND#CLIPBOARD
+ * @see DND#SELECTION_CLIPBOARD
+ * 
+ * @since 3.1
+ */
+public void clearContents(int clipboards) {
+	checkWidget();
+	if ((clipboards & DND.CLIPBOARD) != 0) {
+		OS.Clipboard_Clear();
+	}
+}
+
+/**
+ * Disposes of the operating system resources associated with the clipboard. 
+ * The data will still be available on the system clipboard after the dispose 
+ * method is called.  
+ * 
+ * <p>NOTE: On some platforms the data will not be available once the application
+ * has exited or the display has been disposed.</p>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ * </ul>
+ */
+public void dispose () {
+	if (isDisposed()) return;
+	if (display.getThread() != Thread.currentThread()) DND.error(SWT.ERROR_THREAD_INVALID_ACCESS);
+	display = null;
+}
+
+/**
+ * Returns a platform specific list of the data types currently available on the 
+ * system clipboard.
+ * 
+ * <p>Note: <code>getAvailableTypeNames</code> is a utility for writing a Transfer 
+ * sub-class.  It should NOT be used within an application because it provides 
+ * platform specific information.</p>
+ * 
+ * @return a platform specific list of the data types currently available on the 
+ * system clipboard
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String[] getAvailableTypeNames() {
+	checkWidget();
+	
+	int pDataObject = OS.Clipboard_GetDataObject();
+	int pFormats = OS.DataObject_GetFormats(pDataObject, true);
+	int length = OS.Array_GetLength(pFormats, 0);
+	String[] result = new String [length];
+	for (int i = 0; i < length; i++) {
+		int pFormat = OS.Array_GetValue(pFormats, i);
+		result[i] = Transfer.createJavaString(pFormat);
+		OS.GCHandle_Free(pFormat);
+	}
+	OS.GCHandle_Free(pDataObject);
+	OS.GCHandle_Free(pFormats);
+	return result;
+}
+
+/**
+ * Returns an array of the data types currently available on the system 
+ * clipboard. Use with Transfer.isSupportedType.
+ *
+ * @return array of data types currently available on the system clipboard
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Transfer#isSupportedType
+ * 
+ * @since 3.0
+ */
+public TransferData[] getAvailableTypes() {
+	return getAvailableTypes(DND.CLIPBOARD);
+}
+
+/**
+ * Returns an array of the data types currently available on the specified 
+ * clipboard. Use with Transfer.isSupportedType.
+ * 
+ * <p>The clipboards value is either one of the clipboard constants defined in
+ * class <code>DND</code>, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> clipboard constants.</p>
+ * 
+ * @param clipboards from which to get the data types
+ * @return array of data types currently available on the specified clipboard
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Transfer#isSupportedType
+ * @see DND#CLIPBOARD
+ * @see DND#SELECTION_CLIPBOARD
+ * 
+ * @since 3.1
+ */
+public TransferData[] getAvailableTypes(int clipboards) {
+	checkWidget();
+	if ((clipboards & DND.CLIPBOARD) == 0) return new TransferData[0];
+
+	String[] typeNames = getAvailableTypeNames();
+	int length = typeNames.length;
+	TransferData[] result = new TransferData [length];
+	for (int i = 0; i < length; i++) {
+		int type = Transfer.registerType(typeNames[i]);
+		TransferData transferData = new TransferData();
+		transferData.type = type;
+		result[i++] = transferData;
+	}
+	return result;
+}
+
+/**
+ * Retrieve the data of the specified type currently available on the system 
+ * clipboard.  Refer to the specific subclass of <code>Transfer</code> to 
+ * determine the type of object returned.
+ * 
+ * <p>The following snippet shows text and RTF text being retrieved from the 
+ * clipboard:</p>
+ * 
+ *    <code><pre>
+ *    Clipboard clipboard = new Clipboard(display);
+ *    TextTransfer textTransfer = TextTransfer.getInstance();
+ *    String textData = (String)clipboard.getContents(textTransfer);
+ *    if (textData != null) System.out.println("Text is "+textData);
+ *    RTFTransfer rtfTransfer = RTFTransfer.getInstance();
+ *    String rtfData = (String)clipboard.getContents(rtfTransfer);
+ *    if (rtfData != null) System.out.println("RTF Text is "+rtfData);
+ *    clipboard.dispose();
+ *    </code></pre>
+ * 
+ * @param transfer the transfer agent for the type of data being requested
+ * @return the data obtained from the clipboard or null if no data of this type is available
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if transfer is null</li>
+ * </ul>
+ * 
+ * @see Transfer
+ */
+public Object getContents(Transfer transfer) {
+	return getContents(transfer, DND.CLIPBOARD);
+}
+
+/**
+ * Retrieve the data of the specified type currently available on the specified 
+ * clipboard.  Refer to the specific subclass of <code>Transfer</code> to 
+ * determine the type of object returned.
+ * 
+ * <p>The following snippet shows text and RTF text being retrieved from the 
+ * clipboard:</p>
+ * 
+ *    <code><pre>
+ *    Clipboard clipboard = new Clipboard(display);
+ *    TextTransfer textTransfer = TextTransfer.getInstance();
+ *    String textData = (String)clipboard.getContents(textTransfer);
+ *    if (textData != null) System.out.println("Text is "+textData);
+ *    RTFTransfer rtfTransfer = RTFTransfer.getInstance();
+ *    String rtfData = (String)clipboard.getContents(rtfTransfer, DND.CLIPBOARD);
+ *    if (rtfData != null) System.out.println("RTF Text is "+rtfData);
+ *    clipboard.dispose();
+ *    </code></pre>
+ * 
+ * <p>The clipboards value is either one of the clipboard constants defined in
+ * class <code>DND</code>, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> clipboard constants.</p>
+ * 
+ * @param transfer the transfer agent for the type of data being requested
+ * @param clipboards on which to look for data
+ *  
+ * @return the data obtained from the clipboard or null if no data of this type is available
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if transfer is null</li>
+ * </ul>
+ * 
+ * @see Transfer
+ * @see DND#CLIPBOARD
+ * @see DND#SELECTION_CLIPBOARD
+ * 
+ * @since 3.1
+ */
+public Object getContents(Transfer transfer, int clipboards) {
+	checkWidget();
+	if (transfer == null) DND.error(SWT.ERROR_NULL_ARGUMENT);
+	int[] types = transfer.getTypeIds();
+	for (int i = 0; i < types.length; i++) {
+		int pValue = getData(types[i]);
+		if (pValue != 0) {
+			TransferData data = new TransferData();
+			data.type = types[i];
+			data.pValue = pValue;
+			Object result = transfer.nativeToJava(data);
+			OS.GCHandle_Free(pValue);
+			return result;
+		}
+	}
+	return null;
+}
+
+int getData(int type) {
+	int pFormat = Transfer.getWPFFormat(type);
+	int result = 0;
+	if (OS.Clipboard_ContainsData(pFormat)) {
+		result = OS.Clipboard_GetData(pFormat);
+	}
+	OS.GCHandle_Free (pFormat);
+	return result;
+}
+
+/**
+ * Returns <code>true</code> if the clipboard has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the clipboard.
+ * When a clipboard has been disposed, it is an error to
+ * invoke any other method using the clipboard.
+ * </p>
+ *
+ * @return <code>true</code> when the widget is disposed and <code>false</code> otherwise
+ * 
+ * @since 3.0
+ */
+public boolean isDisposed () {
+	return (display == null);
+}
+
+/**
+ * Place data of the specified type on the system clipboard.  More than one type
+ * of data can be placed on the system clipboard at the same time.  Setting the
+ * data clears any previous data from the system clipboard, regardless of type.
+ * 
+ * <p>NOTE: On some platforms, the data is immediately copied to the system
+ * clipboard but on other platforms it is provided upon request.  As a result,
+ * if the application modifies the data object it has set on the clipboard, that 
+ * modification may or may not be available when the data is subsequently 
+ * requested.</p>
+ *
+ * <p>The following snippet shows text and RTF text being set on the copy/paste
+ * clipboard:
+ * </p>
+ * 
+ * <code><pre>
+ * 	Clipboard clipboard = new Clipboard(display);
+ *	String textData = "Hello World";
+ *	String rtfData = "{\\rtf1\\b\\i Hello World}";
+ *	TextTransfer textTransfer = TextTransfer.getInstance();
+ *	RTFTransfer rtfTransfer = RTFTransfer.getInstance();
+ *	Transfer[] transfers = new Transfer[]{textTransfer, rtfTransfer};
+ *	Object[] data = new Object[]{textData, rtfData};
+ *	clipboard.setContents(data, transfers);
+ *	clipboard.dispose();
+ * </code></pre>
+ *
+ * @param data the data to be set in the clipboard
+ * @param dataTypes the transfer agents that will convert the data to its 
+ * platform specific format; each entry in the data array must have a 
+ * corresponding dataType
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if data is null or datatypes is null 
+ *          or the length of data is not the same as the length of dataTypes</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *  @exception SWTError <ul>
+ *    <li>ERROR_CANNOT_SET_CLIPBOARD - if the clipboard is locked or otherwise unavailable</li>
+ * </ul>
+ * 
+ * <p>NOTE: ERROR_CANNOT_SET_CLIPBOARD should be an SWTException, since it is a
+ * recoverable error, but can not be changed due to backward compatibility.</p>
+ */
+public void setContents(Object[] data, Transfer[] dataTypes) {
+	setContents(data, dataTypes, DND.CLIPBOARD);
+}
+
+/**
+ * Place data of the specified type on the specified clipboard.  More than one 
+ * type of data can be placed on the specified clipboard at the same time.
+ * Setting the data clears any previous data from the specified
+ * clipboard, regardless of type.
+ * 
+ * <p>NOTE: On some platforms, the data is immediately copied to the specified
+ * clipboard but on other platforms it is provided upon request.  As a result, 
+ * if the application modifies the data object it has set on the clipboard, that 
+ * modification may or may not be available when the data is subsequently 
+ * requested.</p>
+ *
+ * <p>The clipboards value is either one of the clipboard constants defined in
+ * class <code>DND</code>, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> clipboard constants.</p>
+ * 
+ * <p>The following snippet shows text and RTF text being set on the copy/paste
+ * clipboard:
+ * </p>
+ * 
+ * <code><pre>
+ * 	Clipboard clipboard = new Clipboard(display);
+ *	String textData = "Hello World";
+ *	String rtfData = "{\\rtf1\\b\\i Hello World}";
+ *	TextTransfer textTransfer = TextTransfer.getInstance();
+ *	RTFTransfer rtfTransfer = RTFTransfer.getInstance();
+ *	Transfer[] transfers = new Transfer[]{textTransfer, rtfTransfer};
+ *	Object[] data = new Object[]{textData, rtfData};
+ *	clipboard.setContents(data, transfers, DND.CLIPBOARD);
+ *	clipboard.dispose();
+ * </code></pre>
+ *
+ * @param data the data to be set in the clipboard
+ * @param dataTypes the transfer agents that will convert the data to its 
+ * platform specific format; each entry in the data array must have a 
+ * corresponding dataType
+ * @param clipboards on which to set the data
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if data is null or datatypes is null 
+ *          or the length of data is not the same as the length of dataTypes</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *  @exception SWTError <ul>
+ *    <li>ERROR_CANNOT_SET_CLIPBOARD - if the clipboard is locked or otherwise unavailable</li>
+ * </ul>
+ * 
+ * <p>NOTE: ERROR_CANNOT_SET_CLIPBOARD should be an SWTException, since it is a
+ * recoverable error, but can not be changed due to backward compatibility.</p>
+ * 
+ * @see DND#CLIPBOARD
+ * @see DND#SELECTION_CLIPBOARD
+ * 
+ * @since 3.1
+ */
+public void setContents(Object[] data, Transfer[] dataTypes, int clipboards) {
+	checkWidget();
+	if (data == null || dataTypes == null || data.length != dataTypes.length) {
+		DND.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	
+	int pDataObject = OS.gcnew_DataObject();
+	for (int i = 0; i < dataTypes.length; i++) {
+		Transfer transfer = dataTypes[i];
+		Object value = data[i];
+		int[] types = transfer.getTypeIds();
+		for (int j = 0; j < types.length; j++) {
+			TransferData transferData = new TransferData(); 
+			transferData.type = types[j];
+			transfer.javaToNative(value, transferData);
+			if (transferData.pValue != 0) {
+				int pFormat = Transfer.getWPFFormat(transferData.type);
+				OS.DataObject_SetData(pDataObject, pFormat, transferData.pValue, true);
+				OS.GCHandle_Free(pFormat);
+				OS.GCHandle_Free(transferData.pValue);
+			}
+		}
+	}
+	OS.Clipboard_SetDataObject(pDataObject, false);
+	OS.GCHandle_Free(pDataObject);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/DragSource.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/DragSource.java
new file mode 100644
index 0000000..8c28d3d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/DragSource.java
@@ -0,0 +1,452 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ *
+ * <code>DragSource</code> defines the source object for a drag and drop transfer.
+ *
+ * <p>IMPORTANT: This class is <em>not</em> intended to be subclassed.</p>
+ *  
+ * <p>A drag source is the object which originates a drag and drop operation. For the specified widget, 
+ * it defines the type of data that is available for dragging and the set of operations that can 
+ * be performed on that data.  The operations can be any bit-wise combination of DND.MOVE, DND.COPY or 
+ * DND.LINK.  The type of data that can be transferred is specified by subclasses of Transfer such as 
+ * TextTransfer or FileTransfer.  The type of data transferred can be a predefined system type or it 
+ * can be a type defined by the application.  For instructions on how to define your own transfer type,
+ * refer to <code>ByteArrayTransfer</code>.</p>
+ *
+ * <p>You may have several DragSources in an application but you can only have one DragSource 
+ * per Control.  Data dragged from this DragSource can be dropped on a site within this application 
+ * or it can be dropped on another application such as an external Text editor.</p>
+ * 
+ * <p>The application supplies the content of the data being transferred by implementing the
+ * <code>DragSourceListener</code> and associating it with the DragSource via DragSource#addDragListener.</p>
+ * 
+ * <p>When a successful move operation occurs, the application is required to take the appropriate 
+ * action to remove the data from its display and remove any associated operating system resources or
+ * internal references.  Typically in a move operation, the drop target makes a copy of the data 
+ * and the drag source deletes the original.  However, sometimes copying the data can take a long 
+ * time (such as copying a large file).  Therefore, on some platforms, the drop target may actually 
+ * move the data in the operating system rather than make a copy.  This is usually only done in 
+ * file transfers.  In this case, the drag source is informed in the DragEnd event that a
+ * DROP_TARGET_MOVE was performed.  It is the responsibility of the drag source at this point to clean 
+ * up its displayed information.  No action needs to be taken on the operating system resources.</p>
+ *
+ * <p> The following example shows a Label widget that allows text to be dragged from it.</p>
+ * 
+ * <code><pre>
+ *	// Enable a label as a Drag Source
+ *	Label label = new Label(shell, SWT.NONE);
+ *	// This example will allow text to be dragged
+ *	Transfer[] types = new Transfer[] {TextTransfer.getInstance()};
+ *	// This example will allow the text to be copied or moved to the drop target
+ *	int operations = DND.DROP_MOVE | DND.DROP_COPY;
+ *	
+ *	DragSource source = new DragSource(label, operations);
+ *	source.setTransfer(types);
+ *	source.addDragListener(new DragSourceListener() {
+ *		public void dragStart(DragSourceEvent e) {
+ *			// Only start the drag if there is actually text in the
+ *			// label - this text will be what is dropped on the target.
+ *			if (label.getText().length() == 0) {
+ *				event.doit = false;
+ *			}
+ *		};
+ *		public void dragSetData(DragSourceEvent event) {
+ *			// A drop has been performed, so provide the data of the 
+ *			// requested type.
+ *			// (Checking the type of the requested data is only 
+ *			// necessary if the drag source supports more than 
+ *			// one data type but is shown here as an example).
+ *			if (TextTransfer.getInstance().isSupportedType(event.dataType)){
+ *				event.data = label.getText();
+ *			}
+ *		}
+ *		public void dragFinished(DragSourceEvent event) {
+ *			// A Move operation has been performed so remove the data
+ *			// from the source
+ *			if (event.detail == DND.DROP_MOVE)
+ *				label.setText("");
+ *		}
+ *	});
+ * </pre></code>
+ *
+ *
+ * <dl>
+ *	<dt><b>Styles</b></dt> <dd>DND.DROP_NONE, DND.DROP_COPY, DND.DROP_MOVE, DND.DROP_LINK</dd>
+ *	<dt><b>Events</b></dt> <dd>DND.DragStart, DND.DragSetData, DND.DragEnd</dd>
+ * </dl>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#dnd">Drag and Drop snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: DNDExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class DragSource extends Widget {
+
+	private static final String DEFAULT_DRAG_SOURCE_EFFECT = "DEFAULT_DRAG_SOURCE_EFFECT"; //$NON-NLS-1$
+	static int checkStyle (int style) {
+		if (style == SWT.NONE) return DND.DROP_MOVE;
+		return style;
+	}
+	// info for registering as a drag source
+	private Control control;
+	private Listener controlListener;
+
+	private Transfer[] transferAgents = new Transfer[0];
+	private DragSourceEffect dragEffect;
+
+	private int jniRef;
+
+/**
+ * Creates a new <code>DragSource</code> to handle dragging from the specified <code>Control</code>.
+ * Creating an instance of a DragSource may cause system resources to be allocated depending on the platform.  
+ * It is therefore mandatory that the DragSource instance be disposed when no longer required.
+ *
+ * @param control the <code>Control</code> that the user clicks on to initiate the drag
+ * @param style the bitwise OR'ing of allowed operations; this may be a combination of any of 
+ *					DND.DROP_NONE, DND.DROP_COPY, DND.DROP_MOVE, DND.DROP_LINK
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_CANNOT_INIT_DRAG - unable to initiate drag source; this will occur if more than one
+ *        drag source is created for a control or if the operating system will not allow the creation
+ *        of the drag source</li>
+ * </ul>
+ * 
+ * <p>NOTE: ERROR_CANNOT_INIT_DRAG should be an SWTException, since it is a
+ * recoverable error, but can not be changed due to backward compatibility.</p>
+ * 
+ * @see Widget#dispose
+ * @see DragSource#checkSubclass
+ * @see DND#DROP_NONE
+ * @see DND#DROP_COPY
+ * @see DND#DROP_MOVE
+ * @see DND#DROP_LINK
+ */
+public DragSource(Control control, int style) {
+	super (control, checkStyle(style));
+	this.control = control;
+	if (control.getData(DND.DRAG_SOURCE_KEY) != null)
+		DND.error(DND.ERROR_CANNOT_INIT_DRAG);
+	control.setData(DND.DRAG_SOURCE_KEY, this);
+
+	jniRef = OS.NewGlobalRef (this);
+	if (jniRef == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	
+	hookEventHandlers();
+	
+	controlListener = new Listener () {
+		public void handleEvent (Event event) {
+			if (event.type == SWT.Dispose) {
+				if (!DragSource.this.isDisposed()) {
+					DragSource.this.dispose();
+				}
+			}
+			if (event.type == SWT.DragDetect) {
+				if (!DragSource.this.isDisposed()) {
+					DragSource.this.drag(event);
+				}
+			}
+		}
+	};
+	control.addListener (SWT.Dispose, controlListener);
+	control.addListener (SWT.DragDetect, controlListener);
+	
+	this.addListener(SWT.Dispose, new Listener() {
+		public void handleEvent(Event e) {
+			onDispose();
+		}
+	});
+	
+	Object effect = control.getData(DEFAULT_DRAG_SOURCE_EFFECT);
+	if (effect instanceof DragSourceEffect) {
+		dragEffect = (DragSourceEffect) effect;
+	} else if (control instanceof Tree) {
+		dragEffect = new TreeDragSourceEffect((Tree) control);
+	} else if (control instanceof Table) {
+		dragEffect = new TableDragSourceEffect((Table) control);
+	}
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when a drag and drop operation is in progress, by sending
+ * it one of the messages defined in the <code>DragSourceListener</code>
+ * interface.
+ * 
+ * <p><ul>
+ * <li><code>dragStart</code> is called when the user has begun the actions required to drag the widget. 
+ * This event gives the application the chance to decide if a drag should be started.
+ * <li><code>dragSetData</code> is called when the data is required from the drag source.
+ * <li><code>dragFinished</code> is called when the drop has successfully completed (mouse up 
+ * over a valid target) or has been terminated (such as hitting the ESC key). Perform cleanup 
+ * such as removing data from the source side on a successful move operation.
+ * </ul></p>
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see DragSourceListener
+ * @see #getDragListeners
+ * @see #removeDragListener
+ * @see DragSourceEvent
+ */
+public void addDragListener(DragSourceListener listener) {
+	if (listener == null) DND.error (SWT.ERROR_NULL_ARGUMENT);
+	DNDListener typedListener = new DNDListener (listener);
+	typedListener.dndWidget = this;
+	addListener (DND.DragStart, typedListener);
+	addListener (DND.DragSetData, typedListener);
+	addListener (DND.DragEnd, typedListener);
+}
+
+protected void checkSubclass () {
+	String name = getClass().getName ();
+	String validName = DragSource.class.getName();
+	if (!validName.equals(name)) {
+		DND.error (SWT.ERROR_INVALID_SUBCLASS);
+	}
+}
+
+void drag(Event dragEvent) {
+	DNDEvent event = new DNDEvent();
+	event.widget = this;
+	event.x = dragEvent.x;
+	event.y = dragEvent.y;
+	event.time = (int)System.currentTimeMillis();
+	event.doit = true;
+	notifyListeners(DND.DragStart,event);
+	if (!event.doit || transferAgents == null || transferAgents.length == 0 ) return;
+	
+	int pDataObject = OS.gcnew_DataObject();
+	for (int i = 0; i < transferAgents.length; i++) {
+		Transfer transfer = transferAgents[i];
+		if (transfer != null) {
+			TransferData supportedTypes[] = transfer.getSupportedTypes();
+			for (int j = 0; j < supportedTypes.length; j++) {
+				TransferData transferData = supportedTypes[j]; 
+				event = new DNDEvent();
+				event.widget = this;
+				event.time = (int)System.currentTimeMillis(); 
+				event.dataType = transferData; 
+				notifyListeners(DND.DragSetData, event);
+				if (!event.doit) return;
+				transfer.javaToNative(event.data, transferData);
+				if (transferData.pValue != 0) {
+					int pFormat = Transfer.getWPFFormat(transferData.type);
+				    OS.DataObject_SetData(pDataObject, pFormat, transferData.pValue, true);
+					OS.GCHandle_Free(transferData.pValue);
+					OS.GCHandle_Free(pFormat);
+				}
+			}
+		}
+	}
+
+	int operations = opToOsOp(getStyle());
+	int result = OS.DragDrop_DoDragDrop(control.handle, pDataObject, operations);
+	OS.GCHandle_Free(pDataObject);
+
+	event = new DNDEvent();
+	event.widget = this;
+	event.time = (int)System.currentTimeMillis();
+	event.doit = (result != OS.DragDropEffects_None);
+	event.detail = osOpToOp(result);
+	notifyListeners(DND.DragEnd,event);
+}
+
+/**
+ * Returns the Control which is registered for this DragSource.  This is the control that the 
+ * user clicks in to initiate dragging.
+ *
+ * @return the Control which is registered for this DragSource
+ */
+public Control getControl () {
+	return control;
+}
+
+/**
+ * Returns an array of listeners who will be notified when a drag and drop 
+ * operation is in progress, by sending it one of the messages defined in 
+ * the <code>DragSourceListener</code> interface.
+ *
+ * @return the listeners who will be notified when a drag and drop
+ * operation is in progress
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see DragSourceListener
+ * @see #addDragListener
+ * @see #removeDragListener
+ * @see DragSourceEvent
+ * 
+ * @since 3.4
+ */
+public DragSourceListener[] getDragListeners() {
+	Listener[] listeners = getListeners(DND.DragStart);
+	int length = listeners.length;
+	DragSourceListener[] dragListeners = new DragSourceListener[length];
+	int count = 0;
+	for (int i = 0; i < length; i++) {
+		Listener listener = listeners[i];
+		if (listener instanceof DNDListener) {
+			dragListeners[count] = (DragSourceListener) ((DNDListener) listener).getEventListener();
+			count++;
+		}
+	}
+	if (count == length) return dragListeners;
+	DragSourceListener[] result = new DragSourceListener[count];
+	System.arraycopy(dragListeners, 0, result, 0, count);
+	return result;
+}
+
+/**
+ * Returns the drag effect that is registered for this DragSource.  This drag
+ * effect will be used during a drag and drop operation.
+ *
+ * @return the drag effect that is registered for this DragSource
+ * 
+ * @since 3.3
+ */
+public DragSourceEffect getDragSourceEffect() {
+	return dragEffect;
+}
+
+/**
+ * Returns the list of data types that can be transferred by this DragSource.
+ *
+ * @return the list of data types that can be transferred by this DragSource
+ */
+public Transfer[] getTransfer(){
+	return transferAgents;
+}
+
+void hookEventHandlers () {
+}
+
+void onDispose() {
+	if (control == null)
+		return;
+	if (controlListener != null) {
+		control.removeListener(SWT.Dispose, controlListener);
+		control.removeListener(SWT.DragDetect, controlListener);
+	}
+	
+	unhookEventHandlers();
+	if (jniRef != 0) OS.DeleteGlobalRef (jniRef);
+	jniRef = 0;
+
+	controlListener = null;
+	control.setData(DND.DRAG_SOURCE_KEY, null);
+	control = null;
+	transferAgents = null;
+}
+
+int opToOsOp(int operation){
+	int osOperation = 0;
+	if ((operation & DND.DROP_COPY) != 0){
+		osOperation |= OS.DragDropEffects_Copy;
+	}
+	if ((operation & DND.DROP_LINK) != 0) {
+		osOperation |= OS.DragDropEffects_Link;
+	}
+	if ((operation & DND.DROP_MOVE) != 0) {
+		osOperation |= OS.DragDropEffects_Move;
+	}
+	return osOperation;
+}
+
+int osOpToOp(int osOperation){
+	int operation = 0;
+	if ((osOperation & OS.DragDropEffects_Copy) != 0){
+		operation |= DND.DROP_COPY;
+	}
+	if ((osOperation & OS.DragDropEffects_Link) != 0) {
+		operation |= DND.DROP_LINK;
+	}
+	if ((osOperation & OS.DragDropEffects_Move) != 0) {
+		operation |= DND.DROP_MOVE;
+	}
+	return operation;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when a drag and drop operation is in progress.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see DragSourceListener
+ * @see #addDragListener
+ * @see #getDragListeners
+ */
+public void removeDragListener(DragSourceListener listener) {
+	if (listener == null) DND.error (SWT.ERROR_NULL_ARGUMENT);
+	removeListener (DND.DragStart, listener);
+	removeListener (DND.DragSetData, listener);
+	removeListener (DND.DragEnd, listener);
+}
+
+/**
+ * Specifies the drag effect for this DragSource.  This drag effect will be 
+ * used during a drag and drop operation.
+ *
+ * @param effect the drag effect that is registered for this DragSource
+ * 
+ * @since 3.3
+ */
+public void setDragSourceEffect(DragSourceEffect effect) {
+	dragEffect = effect;
+}
+
+/**
+ * Specifies the list of data types that can be transferred by this DragSource.
+ * The application must be able to provide data to match each of these types when
+ * a successful drop has occurred.
+ * 
+ * @param transferAgents a list of Transfer objects which define the types of data that can be
+ * dragged from this source
+ */
+public void setTransfer(Transfer[] transferAgents){
+	this.transferAgents = transferAgents;
+}
+
+void unhookEventHandlers () {
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/DropTarget.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/DropTarget.java
new file mode 100644
index 0000000..bb38acd
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/DropTarget.java
@@ -0,0 +1,740 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ *
+ * Class <code>DropTarget</code> defines the target object for a drag and drop transfer.
+ *
+ * <p>IMPORTANT: This class is <em>not</em> intended to be subclassed.</p>
+ *
+ * <p>This class identifies the <code>Control</code> over which the user must position the cursor
+ * in order to drop the data being transferred.  It also specifies what data types can be dropped on 
+ * this control and what operations can be performed.  You may have several DropTragets in an 
+ * application but there can only be a one to one mapping between a <code>Control</code> and a <code>DropTarget</code>.
+ * The DropTarget can receive data from within the same application or from other applications 
+ * (such as text dragged from a text editor like Word).</p>
+ *
+ * <code><pre>
+ *	int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;
+ *	Transfer[] types = new Transfer[] {TextTransfer.getInstance()};
+ *	DropTarget target = new DropTarget(label, operations);
+ *	target.setTransfer(types);
+ * </code></pre>
+ *
+ * <p>The application is notified of data being dragged over this control and of when a drop occurs by 
+ * implementing the interface <code>DropTargetListener</code> which uses the class 
+ * <code>DropTargetEvent</code>.  The application can modify the type of drag being performed 
+ * on this Control at any stage of the drag by modifying the <code>event.detail</code> field or the 
+ * <code>event.currentDataType</code> field.  When the data is dropped, it is the responsibility of 
+ * the application to copy this data for its own purposes.
+ *
+ * <code><pre>
+ *	target.addDropListener (new DropTargetListener() {
+ *		public void dragEnter(DropTargetEvent event) {};
+ *		public void dragOver(DropTargetEvent event) {};
+ *		public void dragLeave(DropTargetEvent event) {};
+ *		public void dragOperationChanged(DropTargetEvent event) {};
+ *		public void dropAccept(DropTargetEvent event) {}
+ *		public void drop(DropTargetEvent event) {
+ *			// A drop has occurred, copy over the data
+ *			if (event.data == null) { // no data to copy, indicate failure in event.detail
+ *				event.detail = DND.DROP_NONE;
+ *				return;
+ *			}
+ *			label.setText ((String) event.data); // data copied to label text
+ *		}
+ * 	});
+ * </pre></code>
+ *
+ * <dl>
+ *	<dt><b>Styles</b></dt> <dd>DND.DROP_NONE, DND.DROP_COPY, DND.DROP_MOVE, DND.DROP_LINK</dd>
+ *	<dt><b>Events</b></dt> <dd>DND.DragEnter, DND.DragLeave, DND.DragOver, DND.DragOperationChanged, 
+ *                             DND.DropAccept, DND.Drop </dd>
+ * </dl>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#dnd">Drag and Drop snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: DNDExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class DropTarget extends Widget {
+
+	static final String DEFAULT_DROP_TARGET_EFFECT = "DEFAULT_DROP_TARGET_EFFECT"; //$NON-NLS-1$
+	static int checkStyle (int style) {
+		if (style == SWT.NONE) return DND.DROP_MOVE;
+		return style;
+	}
+	// info for registering as a droptarget	
+	Control control;
+	Listener controlListener;
+	Transfer[] transferAgents = new Transfer[0];
+	DropTargetEffect dropEffect;
+	
+	int jniRef;
+	int dragEnterEventHandler;
+	int dragLeaveEventHandler;
+	int dragOverEventHandler;
+	int dropEventHandler;
+
+	// Track application selections
+	TransferData selectedDataType;
+	int selectedOperation;
+
+	// workaround - There is no event for "operation changed" so track operation based on key state
+	int keyOperation = -1;
+
+/**
+ * Creates a new <code>DropTarget</code> to allow data to be dropped on the specified 
+ * <code>Control</code>.
+ * Creating an instance of a DropTarget may cause system resources to be allocated 
+ * depending on the platform.  It is therefore mandatory that the DropTarget instance 
+ * be disposed when no longer required.
+ * 
+ * @param control the <code>Control</code> over which the user positions the cursor to drop the data
+ * @param style the bitwise OR'ing of allowed operations; this may be a combination of any of 
+ *		   DND.DROP_NONE, DND.DROP_COPY, DND.DROP_MOVE, DND.DROP_LINK
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_CANNOT_INIT_DROP - unable to initiate drop target; this will occur if more than one
+ *        drop target is created for a control or if the operating system will not allow the creation
+ *        of the drop target</li>
+ * </ul>
+ *
+ * <p>NOTE: ERROR_CANNOT_INIT_DROP should be an SWTException, since it is a
+ * recoverable error, but can not be changed due to backward compatibility.</p>
+ * 
+ * @see Widget#dispose
+ * @see DropTarget#checkSubclass
+ * @see DND#DROP_NONE
+ * @see DND#DROP_COPY
+ * @see DND#DROP_MOVE
+ * @see DND#DROP_LINK
+ */
+public DropTarget(Control control, int style) {
+	super (control, checkStyle(style));
+	this.control = control;
+	if (control.getData(DND.DROP_TARGET_KEY) != null)
+		DND.error(DND.ERROR_CANNOT_INIT_DROP);
+	control.setData(DND.DROP_TARGET_KEY, this);
+
+	jniRef = OS.NewGlobalRef (this);
+	if (jniRef == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	
+	hookEventHandlers();
+	
+	controlListener = new Listener () {
+		public void handleEvent (Event event) {
+			if (!DropTarget.this.isDisposed()){
+				DropTarget.this.dispose();
+			}
+		}
+	};
+	control.addListener (SWT.Dispose, controlListener);
+	
+	this.addListener(SWT.Dispose, new Listener() {
+		public void handleEvent (Event event) {
+			onDispose();
+		}
+	});
+
+	Object effect = control.getData(DEFAULT_DROP_TARGET_EFFECT);
+	if (effect instanceof DropTargetEffect) {
+		dropEffect = (DropTargetEffect) effect;
+	} else if (control instanceof Table) {
+		dropEffect = new TableDropTargetEffect((Table) control);
+	} else if (control instanceof Tree) {
+		dropEffect = new TreeDropTargetEffect((Tree) control);
+	}
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when a drag and drop operation is in progress, by sending
+ * it one of the messages defined in the <code>DropTargetListener</code>
+ * interface.
+ * 
+ * <p><ul>
+ * <li><code>dragEnter</code> is called when the cursor has entered the drop target boundaries
+ * <li><code>dragLeave</code> is called when the cursor has left the drop target boundaries and just before
+ * the drop occurs or is cancelled.
+ * <li><code>dragOperationChanged</code> is called when the operation being performed has changed 
+ * (usually due to the user changing the selected modifier key(s) while dragging)
+ * <li><code>dragOver</code> is called when the cursor is moving over the drop target
+ * <li><code>dropAccept</code> is called just before the drop is performed.  The drop target is given 
+ * the chance to change the nature of the drop or veto the drop by setting the <code>event.detail</code> field
+ * <li><code>drop</code> is called when the data is being dropped
+ * </ul></p>
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see DropTargetListener
+ * @see #getDropListeners
+ * @see #removeDropListener
+ * @see DropTargetEvent
+ */
+public void addDropListener(DropTargetListener listener) {
+	if (listener == null) DND.error (SWT.ERROR_NULL_ARGUMENT);
+	DNDListener typedListener = new DNDListener (listener);
+	typedListener.dndWidget = this;
+	addListener (DND.DragEnter, typedListener);
+	addListener (DND.DragLeave, typedListener);
+	addListener (DND.DragOver, typedListener);
+	addListener (DND.DragOperationChanged, typedListener);
+	addListener (DND.Drop, typedListener);
+	addListener (DND.DropAccept, typedListener);
+}
+
+boolean checkEventArgs (int eventArgs) {
+	if (isDisposed ()) return false;
+	int routedEventType =  OS.RoutedEventArgs_typeid ();
+	int source = 0;
+	if (OS.Type_IsInstanceOfType (routedEventType, eventArgs)) {
+		source = OS.RoutedEventArgs_OriginalSource (eventArgs);
+	}
+	OS.GCHandle_Free (routedEventType);
+	if (source == 0) return true;
+	if (OS.Object_Equals (source, control.handle)) {
+		OS.GCHandle_Free (source);
+		return true;
+	}
+	Widget widget = getDisplay().findWidget (source);
+	OS.GCHandle_Free (source);
+	if (widget == control) return true;
+	
+	if (widget instanceof TreeItem) {
+		Composite parent = ((TreeItem) widget).getParent();
+		if (parent == control) return true;
+	} else if (widget instanceof TableItem) {
+		Composite parent = ((TableItem) widget).getParent();
+		if (parent == control) return true;
+	}
+	return false;
+}
+
+protected void checkSubclass () {
+	String name = getClass().getName ();
+	String validName = DropTarget.class.getName();
+	if (!validName.equals(name)) {
+		DND.error (SWT.ERROR_INVALID_SUBCLASS);
+	}
+}
+
+void DragEnter(int sender, int dragEventArgs) {
+	if (!checkEventArgs (dragEventArgs)) return;
+
+	selectedDataType = null;
+	selectedOperation = DND.DROP_NONE;
+	keyOperation = -1;
+
+	DNDEvent event = new DNDEvent();
+	if (!setEventData(event, dragEventArgs)) {
+		freeData(event.dataTypes);
+		return;
+	}
+	
+	int allowedOperations = event.operations;
+	TransferData[] allowedDataTypes = new TransferData[event.dataTypes.length];
+	System.arraycopy(event.dataTypes, 0, allowedDataTypes, 0, allowedDataTypes.length);
+	notifyListeners(DND.DragEnter, event);
+
+	if (event.detail == DND.DROP_DEFAULT) {
+		event.detail = (allowedOperations & DND.DROP_MOVE) != 0 ? DND.DROP_MOVE : DND.DROP_NONE;
+	}
+	
+	selectedDataType = null;
+	for (int i = 0; i < allowedDataTypes.length; i++) {
+		if (sameType(allowedDataTypes[i], event.dataType)) {
+			selectedDataType = allowedDataTypes[i];
+			break;
+		}
+	}
+	
+	selectedOperation = DND.DROP_NONE;
+	if (selectedDataType != null && ((allowedOperations & event.detail) != 0)) {
+		selectedOperation = event.detail;
+	}
+	
+	freeData(event.dataTypes);
+	OS.RoutedEventArgs_Handled (dragEventArgs, true);
+}
+
+void DragLeave(int sender, int dragEventArgs) {
+	if (!checkEventArgs (dragEventArgs)) return;
+	
+	keyOperation = -1;
+	DNDEvent event = new DNDEvent();
+	event.widget = this;
+	event.time = (int)System.currentTimeMillis();
+	event.detail = DND.DROP_NONE;
+	notifyListeners(DND.DragLeave, event);
+	OS.RoutedEventArgs_Handled (dragEventArgs, true);
+}
+
+void DragOver(int sender, int dragEventArgs) {
+	if (!checkEventArgs (dragEventArgs)) return;
+	
+	int oldKeyOperation = keyOperation;
+	DNDEvent event = new DNDEvent();
+	if (!setEventData(event, dragEventArgs)) {
+		freeData(event.dataTypes);
+		keyOperation = -1;
+		OS.DragEventArgs_Effects(dragEventArgs, OS.DragDropEffects_None);
+		return;
+	}
+	
+	int allowedOperations = event.operations;
+	TransferData[] allowedDataTypes = new TransferData[event.dataTypes.length];
+	System.arraycopy(event.dataTypes, 0, allowedDataTypes, 0, allowedDataTypes.length);
+
+	if (keyOperation == oldKeyOperation) {
+		event.type = DND.DragOver;
+		event.dataType = selectedDataType;
+		event.detail = selectedOperation;
+	} else {
+		event.type = DND.DragOperationChanged;
+		event.dataType = selectedDataType;
+	}
+	notifyListeners(event.type, event);
+
+	if (event.detail == DND.DROP_DEFAULT) {
+		event.detail = (allowedOperations & DND.DROP_MOVE) != 0 ? DND.DROP_MOVE : DND.DROP_NONE;
+	}
+	
+	selectedDataType = null;
+	for (int i = 0; i < allowedDataTypes.length; i++) {
+		if (sameType(allowedDataTypes[i], event.dataType)){
+			selectedDataType = allowedDataTypes[i];
+			break;
+		}
+	}
+
+	selectedOperation = DND.DROP_NONE;
+	if (selectedDataType != null && ((allowedOperations & event.detail) == event.detail)) {
+		selectedOperation = event.detail;
+	}
+	
+	freeData(event.dataTypes);
+	OS.DragEventArgs_Effects(dragEventArgs, opToOsOp(selectedOperation));
+	OS.RoutedEventArgs_Handled (dragEventArgs, true);
+}
+
+void Drop(int sender, int dragEventArgs) {
+	if (!checkEventArgs (dragEventArgs)) return;
+
+	DNDEvent event = new DNDEvent();
+	event.widget = this;
+	event.time = (int)System.currentTimeMillis();
+	if (dropEffect != null) {
+		Point position = getPosition(dragEventArgs);
+		event.item = dropEffect.getItem(position.x, position.y);
+	}
+	event.detail = DND.DROP_NONE;
+	notifyListeners(DND.DragLeave, event);
+	
+	event = new DNDEvent();
+	if (!setEventData(event, dragEventArgs)) {
+		keyOperation = -1;
+		freeData(event.dataTypes);
+		return;
+	}
+	keyOperation = -1;
+	int allowedOperations = event.operations;
+	TransferData[] allowedDataTypes = new TransferData[event.dataTypes.length];
+	System.arraycopy(event.dataTypes, 0, allowedDataTypes, 0, allowedDataTypes.length);
+	event.dataType = selectedDataType;
+	event.detail = selectedOperation;
+	notifyListeners(DND.DropAccept,event);
+	
+	selectedDataType = null;
+	for (int i = 0; i < allowedDataTypes.length; i++) {
+		if (sameType(allowedDataTypes[i], event.dataType)){
+			selectedDataType = allowedDataTypes[i];
+			break;
+		}
+	}
+	selectedOperation = DND.DROP_NONE;
+	if (selectedDataType != null && (allowedOperations & event.detail) == event.detail) {
+		selectedOperation = event.detail;
+	}
+
+	if (selectedOperation == DND.DROP_NONE) {
+		freeData(event.dataTypes);
+		return;
+	}
+	
+	// Get Data in a Java format
+	Object object = null;
+	for (int i = 0; i < transferAgents.length; i++){
+		Transfer transfer = transferAgents[i];
+		if (transfer != null && transfer.isSupportedType(selectedDataType)){
+			object = transfer.nativeToJava(selectedDataType);
+			break;
+		}
+	}
+	if (object == null){
+		selectedOperation = DND.DROP_NONE;
+	}
+	
+	event.detail = selectedOperation;
+	event.dataType = selectedDataType;
+	event.data = object;
+	notifyListeners(DND.Drop,event);
+
+	selectedOperation = DND.DROP_NONE;
+	if ((allowedOperations & event.detail) == event.detail) {
+		selectedOperation = event.detail;
+	}
+	
+	freeData(event.dataTypes);
+	OS.DragEventArgs_Effects(dragEventArgs, opToOsOp(selectedOperation));
+	OS.RoutedEventArgs_Handled (dragEventArgs, true);
+}
+
+void freeData(TransferData[] dataTypes) {
+	if (dataTypes == null) return;
+	for (int i = 0; i < dataTypes.length; i++) {
+		if (dataTypes[i].pValue != 0)
+			OS.GCHandle_Free(dataTypes[i].pValue);
+	}
+}
+
+/**
+ * Returns the Control which is registered for this DropTarget.  This is the control over which the 
+ * user positions the cursor to drop the data.
+ *
+ * @return the Control which is registered for this DropTarget
+ */
+public Control getControl () {
+	return control;
+}
+
+int getData(int pDataObject, int type) {
+	int pFormat = Transfer.getWPFFormat(type);
+	int result = 0;
+	if (OS.DataObject_GetDataPresent(pDataObject, pFormat, true)) {
+		result = OS.DataObject_GetData(pDataObject, pFormat, true);
+	}
+	OS.GCHandle_Free (pFormat);
+	return result;
+}
+
+/**
+ * Returns an array of listeners who will be notified when a drag and drop 
+ * operation is in progress, by sending it one of the messages defined in 
+ * the <code>DropTargetListener</code> interface.
+ *
+ * @return the listeners who will be notified when a drag and drop 
+ * operation is in progress
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see DropTargetListener
+ * @see #addDropListener
+ * @see #removeDropListener
+ * @see DropTargetEvent
+ * 
+ * @since 3.4
+ */
+public DropTargetListener[] getDropListeners() {
+	Listener[] listeners = getListeners(DND.DragEnter);
+	int length = listeners.length;
+	DropTargetListener[] dropListeners = new DropTargetListener[length];
+	int count = 0;
+	for (int i = 0; i < length; i++) {
+		Listener listener = listeners[i];
+		if (listener instanceof DNDListener) {
+			dropListeners[count] = (DropTargetListener) ((DNDListener) listener).getEventListener();
+			count++;
+		}
+	}
+	if (count == length) return dropListeners;
+	DropTargetListener[] result = new DropTargetListener[count];
+	System.arraycopy(dropListeners, 0, result, 0, count);
+	return result;
+}
+
+/**
+ * Returns the drop effect for this DropTarget.  This drop effect will be 
+ * used during a drag and drop to display the drag under effect on the 
+ * target widget.
+ *
+ * @return the drop effect that is registered for this DropTarget
+ * 
+ * @since 3.3
+ */
+public DropTargetEffect getDropTargetEffect() {
+	return dropEffect;
+}
+
+int getOperationFromKeyState(int keyState) {
+	boolean ctrl = (keyState & OS.DragDropKeyStates_ControlKey) != 0;
+	boolean shift = (keyState & OS.DragDropKeyStates_ShiftKey) != 0;
+	boolean alt = (keyState & OS.DragDropKeyStates_AltKey) != 0;
+	if (alt) {
+		if (ctrl || shift) return DND.DROP_DEFAULT;
+		return DND.DROP_LINK;
+	}
+	if (ctrl && shift) return DND.DROP_LINK;
+	if (ctrl)return DND.DROP_COPY;
+	if (shift)return DND.DROP_MOVE;
+	return DND.DROP_DEFAULT;
+}
+
+Point getPosition(int dragEventArgs) {
+	int position = OS.DragEventArgs_GetPosition(dragEventArgs, control.handle);
+	Point pt = control.getDisplay().map(control, null, (int) OS.Point_X(position), (int) OS.Point_Y(position));
+	OS.GCHandle_Free (position);
+	return pt;
+}
+
+/**
+ * Returns a list of the data types that can be transferred to this DropTarget.
+ *
+ * @return a list of the data types that can be transferred to this DropTarget
+ */
+public Transfer[] getTransfer() {
+	return transferAgents;
+}
+
+void hookEventHandlers() {
+	int handle = control.handle;
+	OS.UIElement_AllowDrop(handle, true);
+	
+	dragEnterEventHandler = OS.gcnew_DragEventHandler(jniRef, "DragEnter");
+	OS.UIElement_DragEnter(handle, dragEnterEventHandler);
+
+	dragLeaveEventHandler = OS.gcnew_DragEventHandler(jniRef, "DragLeave");
+	OS.UIElement_DragLeave(handle, dragLeaveEventHandler);
+
+	dragOverEventHandler = OS.gcnew_DragEventHandler(jniRef, "DragOver");
+	OS.UIElement_DragOver(handle, dragOverEventHandler);
+
+	dropEventHandler = OS.gcnew_DragEventHandler(jniRef, "Drop");
+	OS.UIElement_Drop(handle, dropEventHandler);
+}
+
+void onDispose () {	
+	if (control == null)
+		return;
+	if (controlListener != null)
+		control.removeListener(SWT.Dispose, controlListener);
+	unhookEventHandlers();
+	if (jniRef != 0) OS.DeleteGlobalRef (jniRef);
+	jniRef = 0;
+	controlListener = null;
+	control.setData(DND.DROP_TARGET_KEY, null);
+	transferAgents = null;
+	control = null;
+}
+
+int osOpToOp(int osOperation){
+	int operation = 0;
+	if ((osOperation & OS.DragDropEffects_Copy) != 0){
+		operation |= DND.DROP_COPY;
+	}
+	if ((osOperation & OS.DragDropEffects_Link) != 0) {
+		operation |= DND.DROP_LINK;
+	}
+	if ((osOperation & OS.DragDropEffects_Move) != 0) {
+		operation |= DND.DROP_MOVE;
+	}
+	return operation;
+}
+
+int opToOsOp(int operation){
+	int osOperation = 0;
+	if ((operation & DND.DROP_COPY) != 0){
+		osOperation |= OS.DragDropEffects_Copy;
+	}
+	if ((operation & DND.DROP_LINK) != 0) {
+		osOperation |= OS.DragDropEffects_Link;
+	}
+	if ((operation & DND.DROP_MOVE) != 0) {
+		osOperation |= OS.DragDropEffects_Move;
+	}
+	return osOperation;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when a drag and drop operation is in progress.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see DropTargetListener
+ * @see #addDropListener
+ * @see #getDropListeners
+ */
+public void removeDropListener(DropTargetListener listener) {	
+	if (listener == null) DND.error (SWT.ERROR_NULL_ARGUMENT);
+	removeListener (DND.DragEnter, listener);
+	removeListener (DND.DragLeave, listener);
+	removeListener (DND.DragOver, listener);
+	removeListener (DND.DragOperationChanged, listener);
+	removeListener (DND.Drop, listener);
+	removeListener (DND.DropAccept, listener);
+}
+
+boolean sameType(TransferData data1, TransferData data2) {
+	if (data1 == data2) return true;
+	if (data1 == null || data2 == null) return false;
+	return data1.type == data2.type;
+}
+
+/**
+ * Specifies the drop effect for this DropTarget.  This drop effect will be 
+ * used during a drag and drop to display the drag under effect on the 
+ * target widget.
+ *
+ * @param effect the drop effect that is registered for this DropTarget
+ * 
+ * @since 3.3
+ */
+public void setDropTargetEffect(DropTargetEffect effect) {
+	dropEffect = effect;
+}
+
+boolean setEventData(DNDEvent event, int dragEventArgs) {
+	Point position = getPosition(dragEventArgs);
+
+	// get allowed operations
+	int style = getStyle();
+	int operations = osOpToOp(OS.DragEventArgs_Effects(dragEventArgs)) & style;
+	if (operations == DND.DROP_NONE) return false;
+	
+	// get current operation
+	int operation = getOperationFromKeyState(OS.DragEventArgs_KeyStates(dragEventArgs));
+	keyOperation = operation;
+	if (operation == DND.DROP_DEFAULT) {
+		if ((style & DND.DROP_DEFAULT) == 0) {
+			operation = (operations & DND.DROP_MOVE) != 0 ? DND.DROP_MOVE : DND.DROP_NONE;
+		}
+	} else {
+		if ((operation & operations) == 0) operation = DND.DROP_NONE;
+	}
+
+	// Get allowed transfer types
+	TransferData[] dataTypes = new TransferData[0];
+	int pDataObject = OS.DragEventArgs_Data(dragEventArgs);
+	for (int i = 0; i < transferAgents.length; i++) {
+		Transfer transfer = transferAgents[i];
+		if (transfer != null) {
+			int[] types = transfer.getTypeIds();
+			for (int j = 0; j < types.length; j++) {
+				TransferData data = new TransferData();
+				data.type = types[j];
+				data.pValue = getData(pDataObject, data.type);
+				if (data.pValue != 0) {
+					TransferData[] newDataTypes = new TransferData[dataTypes.length + 1];
+					System.arraycopy(dataTypes, 0, newDataTypes, 0, dataTypes.length);
+					newDataTypes[dataTypes.length] = data;
+					dataTypes = newDataTypes;	
+					break;
+				}
+			}
+		}
+	}
+	OS.GCHandle_Free (pDataObject);
+	if (dataTypes.length == 0) return false;
+
+	event.widget = this;
+	event.x = position.x;
+	event.y = position.y;
+	event.time = (int)System.currentTimeMillis();
+	event.feedback = DND.FEEDBACK_SELECT;
+	event.dataTypes = dataTypes;
+	event.dataType = dataTypes[0];
+	event.operations = operations;
+	event.detail = operation;
+	if (dropEffect != null) {
+		event.item = dropEffect.getItem(position.x, position.y);
+	}
+	return true;
+}
+
+/**
+ * Specifies the data types that can be transferred to this DropTarget.  If data is 
+ * being dragged that does not match one of these types, the drop target will be notified of 
+ * the drag and drop operation but the currentDataType will be null and the operation 
+ * will be DND.NONE.
+ *
+ * @param transferAgents a list of Transfer objects which define the types of data that can be
+ *						 dropped on this target
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if transferAgents is null</li>
+ * </ul>
+ */
+public void setTransfer(Transfer[] transferAgents){
+	if (transferAgents == null) DND.error(SWT.ERROR_NULL_ARGUMENT);
+	this.transferAgents = transferAgents;
+}
+
+void unhookEventHandlers() {
+	int handle = control.handle;
+	OS.UIElement_AllowDrop(handle, false);
+
+	int dragEnterEvent = OS.UIElement_DragEnterEvent();
+	OS.UIElement_RemoveHandler(handle, dragEnterEvent, dragEnterEventHandler);
+	OS.GCHandle_Free(dragEnterEventHandler);
+	OS.GCHandle_Free(dragEnterEvent);
+	dragEnterEventHandler = 0;
+	
+	int dragLeaveEvent = OS.UIElement_DragLeaveEvent();
+	OS.UIElement_RemoveHandler(handle, dragLeaveEvent, dragLeaveEventHandler);
+	OS.GCHandle_Free(dragLeaveEventHandler);
+	OS.GCHandle_Free(dragLeaveEvent);
+	dragLeaveEventHandler = 0;
+
+	int dragOverEvent = OS.UIElement_DragOverEvent();
+	OS.UIElement_RemoveHandler(handle, dragOverEvent, dragOverEventHandler);
+	OS.GCHandle_Free(dragOverEventHandler);
+	OS.GCHandle_Free(dragOverEvent);
+	dragOverEventHandler = 0;
+
+	int dropEvent = OS.UIElement_DropEvent();
+	OS.UIElement_RemoveHandler(handle, dropEvent, dropEventHandler);
+	OS.GCHandle_Free(dropEventHandler);
+	OS.GCHandle_Free(dropEvent);
+	dropEventHandler = 0;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/FileTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/FileTransfer.java
new file mode 100644
index 0000000..bff244f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/FileTransfer.java
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.internal.wpf.*;
+ 
+/**
+ * The class <code>FileTransfer</code> provides a platform specific mechanism 
+ * for converting a list of files represented as a java <code>String[]</code> to a 
+ * platform specific representation of the data and vice versa.  
+ * Each <code>String</code> in the array contains the absolute path for a single 
+ * file or directory.
+ * 
+ * <p>An example of a java <code>String[]</code> containing a list of files is shown 
+ * below:</p>
+ * 
+ * <code><pre>
+ *     File file1 = new File("C:\temp\file1");
+ *     File file2 = new File("C:\temp\file2");
+ *     String[] fileData = new String[2];
+ *     fileData[0] = file1.getAbsolutePath();
+ *     fileData[1] = file2.getAbsolutePath();
+ * </code></pre>
+ *
+ * @see Transfer
+ */
+public class FileTransfer extends ByteArrayTransfer {
+
+private static FileTransfer _instance = new FileTransfer();
+private static int TYPEID = getTypeId();
+
+/**
+ * Returns the singleton instance of the FileTransfer class.
+ *
+ * @return the singleton instance of the FileTransfer class
+ */
+public static FileTransfer getInstance () {
+	return _instance;
+}
+
+static int getTypeId() {
+	int format = OS.DataFormats_FileDrop();
+	String name = createJavaString(format);
+	OS.GCHandle_Free(format);
+	return registerType(name);
+}
+
+private FileTransfer() {}
+
+boolean checkFile(Object object) {
+	if (object == null || !(object instanceof String[]) || ((String[])object).length == 0) return false;
+	String[] strings = (String[])object;
+	for (int i = 0; i < strings.length; i++) {
+		if (strings[i] == null || strings[i].length() == 0) return false;
+	}
+	return true;
+}
+
+protected int[] getTypeIds(){
+	return new int[]{TYPEID};
+}
+
+/**
+ * This implementation of <code>javaToNative</code> converts a list of file names
+ * represented by a java <code>String[]</code> to a platform specific representation.
+ * Each <code>String</code> in the array contains the absolute path for a single 
+ * file or directory.
+ * 
+ * @param object a java <code>String[]</code> containing the file names to be converted
+ * @param transferData an empty <code>TransferData</code> object that will
+ *  	be filled in on return with the platform specific format of the data
+ * 
+ * @see Transfer#nativeToJava
+ */
+public void javaToNative(Object object, TransferData transferData) {
+	if (!checkFile(object) || !isSupportedType(transferData)) {
+		DND.error(DND.ERROR_INVALID_DATA);
+	}
+	String[] fileNames = (String[]) object;
+	int length = fileNames.length;
+	int pStringId = OS.String_typeid();
+	int pStringArray = OS.Array_CreateInstance(pStringId, length);
+	for (int i = 0; i < length; i++) {
+		int pString = createDotNetString(fileNames[i]);
+		OS.Array_SetValue(pStringArray, pString, i);
+		OS.GCHandle_Free(pString);
+	}
+	transferData.pValue = pStringArray;
+	OS.GCHandle_Free(pStringId);	
+}
+
+/**
+ * This implementation of <code>nativeToJava</code> converts a platform specific 
+ * representation of a list of file names to a java <code>String[]</code>.  
+ * Each String in the array contains the absolute path for a single file or directory. 
+ * 
+ * @param transferData the platform specific representation of the data to be converted
+ * @return a java <code>String[]</code> containing a list of file names if the conversion
+ * 		was successful; otherwise null
+ * 
+ * @see Transfer#javaToNative
+ */
+
+public Object nativeToJava(TransferData transferData) {
+	if (!isSupportedType(transferData) || transferData.pValue == 0)  return null;
+	
+	int pStringArray = transferData.pValue;
+	int length = OS.Array_GetLength(pStringArray, 0);
+	String[] fileNames = new String [length];
+	for (int i = 0; i < length; i++) {
+		int pString = OS.Array_GetValue(pStringArray, i);
+		fileNames[i] = createJavaString(pString);
+		OS.GCHandle_Free(pString);
+	}
+	return fileNames;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/HTMLTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/HTMLTransfer.java
new file mode 100644
index 0000000..2a9c45f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/HTMLTransfer.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.internal.wpf.*;
+
+/**
+ * The class <code>HTMLTransfer</code> provides a platform specific mechanism 
+ * for converting text in HTML format represented as a java <code>String</code> 
+ * to a platform specific representation of the data and vice versa.
+ * 
+ * <p>An example of a java <code>String</code> containing HTML text is shown 
+ * below:</p>
+ * 
+ * <code><pre>
+ *     String htmlData = "<p>This is a paragraph of text.</p>";
+ * </code></pre>
+ *
+ * @see Transfer
+ */
+public class HTMLTransfer extends ByteArrayTransfer {
+
+private static HTMLTransfer _instance = new HTMLTransfer();
+private static int TYPEID = getTypeId();
+
+/**
+ * Returns the singleton instance of the HTMLTransfer class.
+ *
+ * @return the singleton instance of the HTMLTransfer class
+ */
+public static HTMLTransfer getInstance () {
+	return _instance;
+}
+
+static int getTypeId() {
+	int format = OS.DataFormats_Html();
+	String name = createJavaString(format);
+	OS.GCHandle_Free(format);
+	return registerType(name);
+}
+
+private HTMLTransfer() {
+}
+
+boolean checkHTML(Object object) {
+	return (object != null && object instanceof String && ((String)object).length() > 0);
+}
+
+protected int[] getTypeIds(){
+	return new int[]{TYPEID};
+}
+
+/**
+ * This implementation of <code>javaToNative</code> converts HTML-formatted text
+ * represented by a java <code>String</code> to a platform specific representation.
+ * 
+ * @param object a java <code>String</code> containing HTML text
+ * @param transferData an empty <code>TransferData</code> object that will
+ *  	be filled in on return with the platform specific format of the data
+ * 
+ * @see Transfer#nativeToJava
+ */
+public void javaToNative (Object object, TransferData transferData){
+	if (!checkHTML(object) || !isSupportedType(transferData)) {
+		DND.error(DND.ERROR_INVALID_DATA);
+	}
+	transferData.pValue = createDotNetString((String)object);
+}
+
+/**
+ * This implementation of <code>nativeToJava</code> converts a platform specific 
+ * representation of HTML text to a java <code>String</code>.
+ * 
+ * @param transferData the platform specific representation of the data to be converted
+ * @return a java <code>String</code> containing HTML text if the conversion was successful;
+ * 		otherwise null
+ * 
+ * @see Transfer#javaToNative
+ */
+public Object nativeToJava(TransferData transferData){
+	if (!isSupportedType(transferData) || transferData.pValue == 0) return null;
+
+	return createJavaString(transferData.pValue);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/ImageTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/ImageTransfer.java
new file mode 100644
index 0000000..fc0b6ec
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/ImageTransfer.java
@@ -0,0 +1,108 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.wpf.OS;
+
+/**
+ * The class <code>ImageTransfer</code> provides a platform specific mechanism 
+ * for converting an Image represented as a java <code>ImageData</code> to a 
+ * platform specific representation of the data and vice versa.  
+ * 
+ * <p>An example of a java <code>ImageData</code> is shown below:</p>
+ * 
+ * <code><pre>
+ *     Image image = new Image(display, "C:\temp\img1.gif");
+ *	   ImageData imgData = image.getImageData();
+ * </code></pre>
+ *
+ * @see Transfer
+ * 
+ * @since 3.4
+ */
+public class ImageTransfer extends ByteArrayTransfer {
+	
+private static ImageTransfer _instance = new ImageTransfer();
+private static int TYPEID = getTypeId();
+
+static int getTypeId() {
+	int format = OS.DataFormats_Bitmap();
+	String name = createJavaString(format);
+	OS.GCHandle_Free(format);
+	return registerType(name);
+}
+
+private ImageTransfer() {}
+
+/**
+ * Returns the singleton instance of the ImageTransfer class.
+ *
+ * @return the singleton instance of the ImageTransfer class
+ */
+public static ImageTransfer getInstance () {
+	return _instance;
+}
+
+/**
+ * This implementation of <code>javaToNative</code> converts an ImageData object represented
+ * by java <code>ImageData</code> to a platform specific representation.
+ * 
+ * @param object a java <code>ImageData</code> containing the ImageData to be converted
+ * @param transferData an empty <code>TransferData</code> object that will
+ *  	be filled in on return with the platform specific format of the data
+ * 
+ * @see Transfer#nativeToJava
+ */
+public void javaToNative(Object object, TransferData transferData) {
+	if (!checkImage(object) || !isSupportedType(transferData)) {
+		DND.error(DND.ERROR_INVALID_DATA);
+	}
+	ImageData imgData = (ImageData)object;
+	if (imgData == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+
+	Image image = new Image(null, imgData);
+	transferData.pValue = image.handle;
+}
+
+/**
+ * This implementation of <code>nativeToJava</code> converts a platform specific 
+ * representation of an image to java <code>ImageData</code>.  
+ * 
+ * @param transferData the platform specific representation of the data to be converted
+ * @return a java <code>ImageData</code> of the image if the conversion was successful;
+ * 		otherwise null
+ * 
+ * @see Transfer#javaToNative
+ */
+public Object nativeToJava(TransferData transferData) {
+	if (!isSupportedType(transferData) || transferData.pValue == 0) return null;
+
+	Image image = Image.wpf_new (null, SWT.BITMAP, transferData.pValue);
+	ImageData imageData = image.getImageData ();
+	image.dispose ();
+	return imageData;
+}
+
+protected int[] getTypeIds(){
+	return new int[]{TYPEID};
+}
+
+boolean checkImage(Object object) {
+	if (object == null || !(object instanceof ImageData))  return false; 
+	return true;
+}
+
+protected boolean validate(Object object) {
+	return checkImage(object);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/RTFTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/RTFTransfer.java
new file mode 100644
index 0000000..b5d3666
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/RTFTransfer.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.internal.wpf.*;
+
+ 
+/**
+ * The class <code>RTFTransfer</code> provides a platform specific mechanism 
+ * for converting text in RTF format represented as a java <code>String</code> 
+ * to a platform specific representation of the data and vice versa.
+ * 
+ * <p>An example of a java <code>String</code> containing RTF text is shown 
+ * below:</p>
+ * 
+ * <code><pre>
+ *     String rtfData = "{\\rtf1{\\colortbl;\\red255\\green0\\blue0;}\\uc1\\b\\i Hello World}";
+ * </code></pre>
+ *
+ * @see Transfer
+ */
+public class RTFTransfer extends ByteArrayTransfer {
+
+private static RTFTransfer _instance = new RTFTransfer();
+private static int TYPEID = getTypeId();
+
+/**
+ * Returns the singleton instance of the RTFTransfer class.
+ *
+ * @return the singleton instance of the RTFTransfer class
+ */
+public static RTFTransfer getInstance () {
+	return _instance;
+}
+
+static int getTypeId() {
+	int format = OS.DataFormats_Rtf();
+	String name = createJavaString(format);
+	OS.GCHandle_Free(format);
+	return registerType(name);
+}
+
+private RTFTransfer() {
+}
+
+boolean checkRTF(Object object) {
+	return (object != null  && object instanceof String && ((String)object).length() > 0);
+}
+
+protected int[] getTypeIds(){
+	return new int[]{TYPEID};
+}
+
+/**
+ * This implementation of <code>javaToNative</code> converts RTF-formatted text
+ * represented by a java <code>String</code> to a platform specific representation.
+ * 
+ * @param object a java <code>String</code> containing RTF text
+ * @param transferData an empty <code>TransferData</code> object that will
+ *  	be filled in on return with the platform specific format of the data
+ * 
+ * @see Transfer#nativeToJava
+ */
+public void javaToNative (Object object, TransferData transferData) {
+	if (!checkRTF(object) || !isSupportedType(transferData)) {
+		DND.error(DND.ERROR_INVALID_DATA);
+	}
+	transferData.pValue = createDotNetString((String)object);
+}
+
+/**
+ * This implementation of <code>nativeToJava</code> converts a platform specific 
+ * representation of RTF text to a java <code>String</code>.
+ * 
+ * @param transferData the platform specific representation of the data to be converted
+ * @return a java <code>String</code> containing RTF text if the conversion was successful;
+ * 		otherwise null
+ * 
+ * @see Transfer#javaToNative
+ */
+public Object nativeToJava(TransferData transferData) {
+	if (!isSupportedType(transferData) || transferData.pValue == 0) return null;
+
+	return createJavaString(transferData.pValue);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TableDragSourceEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TableDragSourceEffect.java
new file mode 100644
index 0000000..b7dbda5
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TableDragSourceEffect.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.dnd;
+
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides default implementations to display a source image
+ * when a drag is initiated from a <code>Table</code>.
+ * 
+ * <p>Classes that wish to provide their own source image for a <code>Table</code> can
+ * extend the <code>TableDragSourceEffect</code> class, override the 
+ * <code>TableDragSourceEffect.dragStart</code> method and set the field 
+ * <code>DragSourceEvent.image</code> with their own image.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag source effect implementation.
+ *
+ * @see DragSourceEffect
+ * @see DragSourceEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TableDragSourceEffect extends DragSourceEffect {
+	/**
+	 * Creates a new <code>TableDragSourceEffect</code> to handle drag effect 
+	 * from the specified <code>Table</code>.
+	 *
+	 * @param table the <code>Table</code> that the user clicks on to initiate the drag
+	 */
+	public TableDragSourceEffect(Table table) {
+		super(table);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TableDropTargetEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TableDropTargetEffect.java
new file mode 100644
index 0000000..8818ec6
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TableDropTargetEffect.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides a default drag under effect (eg. select, insert and scroll) 
+ * when a drag occurs over a <code>Table</code>.
+ * 
+ * <p>Classes that wish to provide their own drag under effect for a <code>Table</code>
+ * can extend the <code>TableDropTargetEffect</code> and override any applicable methods 
+ * in <code>TableDropTargetEffect</code> to display their own drag under effect.</p>
+ * 
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * <p>The feedback value is either one of the FEEDBACK constants defined in 
+ * class <code>DND</code> which is applicable to instances of this class, 
+ * or it must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> effect constants. 
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Feedback:</b></dt>
+ * <dd>FEEDBACK_SELECT, FEEDBACK_SCROLL</dd>
+ * </dl>
+ * </p>
+ * 
+ * @see DropTargetAdapter
+ * @see DropTargetEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TableDropTargetEffect extends DropTargetEffect {
+	/**
+	 * Creates a new <code>TableDropTargetEffect</code> to handle the drag under effect on the specified 
+	 * <code>Table</code>.
+	 * 
+	 * @param table the <code>Table</code> over which the user positions the cursor to drop the data
+	 */
+	public TableDropTargetEffect(Table table) {
+		super(table);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TextTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TextTransfer.java
new file mode 100644
index 0000000..3dfc44c
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TextTransfer.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.internal.wpf.*;
+
+ 
+/**
+ * The class <code>TextTransfer</code> provides a platform specific mechanism 
+ * for converting plain text represented as a java <code>String</code> 
+ * to a platform specific representation of the data and vice versa.
+ * 
+ * <p>An example of a java <code>String</code> containing plain text is shown 
+ * below:</p>
+ * 
+ * <code><pre>
+ *     String textData = "Hello World";
+ * </code></pre>
+ * 
+ * @see Transfer
+ */
+public class TextTransfer extends ByteArrayTransfer {
+
+private static TextTransfer _instance = new TextTransfer();
+private static int TYPEID = getTypeId();
+	
+/**
+ * Returns the singleton instance of the TextTransfer class.
+ *
+ * @return the singleton instance of the TextTransfer class
+ */
+public static TextTransfer getInstance () {
+	return _instance;
+}
+
+static int getTypeId() {
+	int format = OS.DataFormats_UnicodeText();
+	String name = createJavaString(format);
+	OS.GCHandle_Free(format);
+	return registerType(name);
+}
+
+private TextTransfer() {
+}
+
+boolean checkText(Object object) {
+	return object != null && object instanceof String && ((String)object).length() > 0;
+}
+
+protected int[] getTypeIds(){
+	return new int[]{TYPEID};
+}
+
+/**
+ * This implementation of <code>javaToNative</code> converts plain text
+ * represented by a java <code>String</code> to a platform specific representation.
+ * 
+ * @param object a java <code>String</code> containing text
+ * @param transferData an empty <code>TransferData</code> object that will
+ *  	be filled in on return with the platform specific format of the data
+ *  
+ * @see Transfer#nativeToJava
+ */
+public void javaToNative (Object object, TransferData transferData) {
+	if (!checkText(object) || !isSupportedType(transferData)) {
+		DND.error(DND.ERROR_INVALID_DATA);
+	}
+	transferData.pValue = createDotNetString((String)object);
+}
+
+/**
+ * This implementation of <code>nativeToJava</code> converts a platform specific 
+ * representation of plain text to a java <code>String</code>.
+ * 
+ * @param transferData the platform specific representation of the data to be converted
+ * @return a java <code>String</code> containing text if the conversion was successful; otherwise null
+ * 
+ * @see Transfer#javaToNative
+ */
+public Object nativeToJava(TransferData transferData) {
+	if (!isSupportedType(transferData) || transferData.pValue == 0) return null;
+
+	return createJavaString(transferData.pValue);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/Transfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/Transfer.java
new file mode 100644
index 0000000..1940e97
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/Transfer.java
@@ -0,0 +1,194 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+
+/**
+ * <code>Transfer</code> provides a mechanism for converting between a java 
+ * representation of data and a platform specific representation of data and 
+ * vice versa.  It is used in data transfer operations such as drag and drop and 
+ * clipboard copy/paste.
+ *
+ * <p>You should only need to become familiar with this class if you are 
+ * implementing a Transfer subclass and you are unable to subclass the 
+ * ByteArrayTransfer class.</p>
+ * 
+ * @see ByteArrayTransfer
+ * @see <a href="http://www.eclipse.org/swt/snippets/#dnd">Drag and Drop snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: DNDExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public abstract class Transfer {
+
+private static String[] registeredTypes = new String[0];
+
+static int createDotNetString (String string) {
+	if (string == null) return 0;
+	int length = string.length();
+	char[] buffer = new char[length + 1];
+	string.getChars(0, length, buffer, 0);
+	int result = OS.gcnew_String(buffer);
+	if (result == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	return result;
+}
+
+static String createJavaString (int ptr) {
+	int charArray = OS.String_ToCharArray(ptr);
+	char[] chars = new char[OS.String_Length(ptr)];
+	OS.memcpy(chars, charArray, chars.length * 2);
+	OS.GCHandle_Free(charArray);
+	return new String(chars);
+}
+
+/**
+ * Returns a list of the platform specific data types that can be converted using 
+ * this transfer agent.
+ *
+ * <p>Only the data type fields of the <code>TransferData</code> objects are filled 
+ * in.</p>
+ *
+ * @return a list of the data types that can be converted using this transfer agent
+ */
+abstract public TransferData[] getSupportedTypes();
+
+/**
+ * Returns true if the <code>TransferData</code> data type can be converted 
+ * using this transfer agent, or false otherwise (including if transferData is
+ * <code>null</code>).
+ *
+ * @param transferData a platform specific description of a data type; only the data
+ *  type fields of the <code>TransferData</code> object need to be filled in
+ *
+ * @return true if the transferData data type can be converted using this transfer 
+ * agent
+ */
+abstract public boolean isSupportedType(TransferData transferData);
+
+/**
+ * Returns the platform specific names of the  data types that can be converted 
+ * using this transfer agent.
+ * 
+ * @return the platform specific names of the data types that can be converted 
+ * using this transfer agent.
+ */
+abstract protected String[] getTypeNames();
+
+/**
+ * Returns the platform specific ids of the  data types that can be converted using 
+ * this transfer agent.
+ * 
+ * @return the platform specific ids of the data types that can be converted using 
+ * this transfer agent
+ */
+abstract protected int[] getTypeIds();
+
+/**
+ * Converts a java representation of data to a platform specific representation of 
+ * the data. 
+ *
+ * <p>On a successful conversion, the transferData.result field will be set as follows:
+ * <ul>
+ * <li>Windows: COM.S_OK
+ * <li>Motif: 1
+ * <li>GTK: 1
+ * <li>Photon: 1
+ * </ul></p>
+ * 
+ * <p>If this transfer agent is unable to perform the conversion, the transferData.result 
+ * field will be set to a failure value as follows:
+ * <ul>
+ * <li>Windows: COM.DV_E_TYMED or COM.E_FAIL
+ * <li>Motif: 0
+ * <li>GTK: 0
+ * <li>Photon: 0
+ * </ul></p>
+ *
+ * @param object a java representation of the data to be converted; the type of
+ * Object that is passed in is dependent on the <code>Transfer</code> subclass.
+ *
+ * @param transferData an empty TransferData object; this object will be 
+ * filled in on return with the platform specific representation of the data
+ * 
+ * @exception org.eclipse.swt.SWTException <ul>
+ *    <li>ERROR_INVALID_DATA - if object does not contain data in a valid format or is <code>null</code></li>
+ * </ul>
+ */
+abstract protected void javaToNative (Object object, TransferData transferData);
+
+/**
+ * Converts a platform specific representation of data to a java representation.
+ * 
+ * @param transferData the platform specific representation of the data to be 
+ * converted
+ *
+ * @return a java representation of the converted data if the conversion was 
+ * successful; otherwise null.  If transferData is <code>null</code> then
+ * <code>null</code> is returned.  The type of Object that is returned is 
+ * dependent on the <code>Transfer</code> subclass.
+ */
+abstract protected Object nativeToJava(TransferData transferData);
+
+/**
+ * Registers a name for a data type and returns the associated unique identifier.
+ *
+ * <p>You may register the same type more than once, the same unique identifier 
+ * will be returned if the type has been previously registered.</p>
+ *
+ * <p>Note: On windows, do <b>not</b> call this method with pre-defined 
+ * Clipboard Format types such as CF_TEXT or CF_BITMAP because the 
+ * pre-defined identifier will not be returned</p>
+ *
+ * @param formatName the name of a data type
+ *
+ * @return the unique identifier associated with this data type
+ */
+public static int registerType(String formatName){
+	int length = registeredTypes.length;
+	for (int i = 0; i < length; i++) {
+		if (registeredTypes[i].equals(formatName))
+			return i + 1;
+	}
+	String[] newTypes = new String[length + 1];
+	System.arraycopy(registeredTypes, 0, newTypes, 0, length);
+	newTypes[length] = formatName;
+	registeredTypes = newTypes;
+	return length + 1;
+}
+
+static String getTypeName(int registeredType) {
+	--registeredType;
+	if (registeredType < 0 || registeredType >= registeredTypes.length)
+		DND.error(DND.ERROR_INVALID_DATA);
+	return registeredTypes[registeredType];
+}
+
+static int getWPFFormat(int registeredType) {
+	--registeredType;
+	if (registeredType < 0 || registeredType >= registeredTypes.length)
+		DND.error(DND.ERROR_INVALID_DATA);
+	return createDotNetString(registeredTypes[registeredType]);
+}
+
+/**
+ * Test that the object is of the correct format for this Transfer class.
+ * 
+ * @param object a java representation of the data to be converted
+ * 
+ * @return true if object is of the correct form for this transfer type
+ * 
+ * @since 3.1
+ */
+protected boolean validate(Object object) {
+	return true;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TransferData.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TransferData.java
new file mode 100644
index 0000000..a3ef016
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TransferData.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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;
+
+ 
+/**
+ * The <code>TransferData</code> class is a platform specific data structure for
+ * describing the type and the contents of data being converted by a transfer agent.
+ *
+ * <p>As an application writer, you do not need to know the specifics of 
+ * TransferData.  TransferData instances are passed to a subclass of Transfer 
+ * and the Transfer object manages the platform specific issues.  
+ * You can ask a Transfer subclass if it can handle this data by calling 
+ * Transfer.isSupportedType(transferData).</p>
+ *
+ * <p>You should only need to become familiar with the fields in this class if you 
+ * are implementing a Transfer subclass and you are unable to subclass the 
+ * ByteArrayTransfer class.</p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public class TransferData {
+	/**
+	 * The type is a unique identifier of a system format or user defined format.
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public int type;
+	
+	// attributes specific to set/get
+	int pValue;
+
+	/**
+	 * The result field contains the result of converting a
+	 * java data type into a platform specific value.
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+ 	 * <p>The value of result is 1 if the conversion was successful.
+	 * The value of result is 0 if the conversion failed.</p>
+	 */
+	int result;
+	
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TreeDragSourceEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TreeDragSourceEffect.java
new file mode 100644
index 0000000..7a66beb
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TreeDragSourceEffect.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.dnd;
+
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides default implementations to display a source image
+ * when a drag is initiated from a <code>Tree</code>.
+ * 
+ * <p>Classes that wish to provide their own source image for a <code>Tree</code> can
+ * extend <code>TreeDragSourceEffect</code> class and override the <code>TreeDragSourceEffect.dragStart</code>
+ * method and set the field <code>DragSourceEvent.image</code> with their own image.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * @see DragSourceEffect
+ * @see DragSourceEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TreeDragSourceEffect extends DragSourceEffect {
+	/**
+	 * Creates a new <code>TreeDragSourceEffect</code> to handle drag effect 
+	 * from the specified <code>Tree</code>.
+	 *
+	 * @param tree the <code>Tree</code> that the user clicks on to initiate the drag
+	 */
+	public TreeDragSourceEffect(Tree tree) {
+		super(tree);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TreeDropTargetEffect.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TreeDropTargetEffect.java
new file mode 100644
index 0000000..348c374
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/TreeDropTargetEffect.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * 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.dnd;
+
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides a default drag under effect (eg. select, insert, scroll and expand) 
+ * when a drag occurs over a <code>Tree</code>.
+ * 
+ * <p>Classes that wish to provide their own drag under effect for a <code>Tree</code>
+ * can extend the <code>TreeDropTargetEffect</code> class and override any applicable methods 
+ * in <code>TreeDropTargetEffect</code> to display their own drag under effect.</p>
+ *
+ * Subclasses that override any methods of this class must call the corresponding
+ * <code>super</code> method to get the default drag under effect implementation.
+ *
+ * <p>The feedback value is either one of the FEEDBACK constants defined in 
+ * class <code>DND</code> which is applicable to instances of this class, 
+ * or it must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>DND</code> effect constants. 
+ * </p>
+ * <p>
+ * <dl>
+ * <dt><b>Feedback:</b></dt>
+ * <dd>FEEDBACK_SELECT, FEEDBACK_INSERT_BEFORE, FEEDBACK_INSERT_AFTER, FEEDBACK_EXPAND, FEEDBACK_SCROLL</dd>
+ * </dl>
+ * </p><p>
+ * Note: Only one of the styles FEEDBACK_SELECT, FEEDBACK_INSERT_BEFORE or
+ * FEEDBACK_INSERT_AFTER may be specified.
+ * </p>
+ * 
+ * @see DropTargetAdapter
+ * @see DropTargetEvent
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+public class TreeDropTargetEffect extends DropTargetEffect {
+	/**
+	 * Creates a new <code>TreeDropTargetEffect</code> to handle the drag under effect on the specified 
+	 * <code>Tree</code>.
+	 * 
+	 * @param tree the <code>Tree</code> over which the user positions the cursor to drop the data
+	 */
+	public TreeDropTargetEffect(Tree tree) {
+		super(tree);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/URLTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/URLTransfer.java
new file mode 100644
index 0000000..c509da3
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/wpf/org/eclipse/swt/dnd/URLTransfer.java
@@ -0,0 +1,115 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.internal.wpf.OS;
+
+/**
+ * The class <code>URLTransfer</code> provides a platform specific mechanism 
+ * for converting text in URL format represented as a java <code>String</code> 
+ * to a platform specific representation of the data and vice versa. The string
+ * must contain a fully specified url.
+ * 
+ * <p>An example of a java <code>String</code> containing a URL is shown below:</p>
+ * 
+ * <code><pre>
+ *     String url = "http://www.eclipse.org";
+ * </code></pre>
+ *
+ * @see Transfer
+ * @since 3.4
+ */
+public class URLTransfer extends ByteArrayTransfer {
+
+	static URLTransfer _instance = new URLTransfer();
+	static final String URL = "UniformResourceLocator"; //$NON-NLS-1$
+	static final int URL_ID = registerType(URL);
+
+private URLTransfer() {}
+
+/**
+ * Returns the singleton instance of the URLTransfer class.
+ *
+ * @return the singleton instance of the URLTransfer class
+ */
+public static URLTransfer getInstance () {
+	return _instance;
+}
+
+/**
+ * This implementation of <code>javaToNative</code> converts a URL
+ * represented by a java <code>String</code> to a platform specific representation.
+ * 
+ * @param object a java <code>String</code> containing a URL
+ * @param transferData an empty <code>TransferData</code> object that will
+ *  	be filled in on return with the platform specific format of the data
+ * 
+ * @see Transfer#nativeToJava
+ */
+public void javaToNative (Object object, TransferData transferData){
+	if (!checkURL(object) || !isSupportedType(transferData)) {
+		DND.error(DND.ERROR_INVALID_DATA);
+	}
+	String string = (String)object + '\0';
+	byte[] buffer = string.getBytes();
+	if (buffer.length == 0) return;
+	int typeid = OS.Byte_typeid();
+	int pBytes = OS.Array_CreateInstance(typeid, buffer.length);
+	OS.GCHandle_Free(typeid);
+	if (pBytes == 0) return;
+	OS.memcpy(pBytes, buffer, buffer.length);
+	int pStream = OS.gcnew_MemoryStream();
+	OS.MemoryStream_Write(pStream, pBytes, 0, buffer.length);
+	OS.GCHandle_Free(pBytes);
+	transferData.pValue = pStream;
+}
+
+/**
+ * This implementation of <code>nativeToJava</code> converts a platform 
+ * specific representation of a URL to a java <code>String</code>.
+ * 
+ * @param transferData the platform specific representation of the data to be converted
+ * @return a java <code>String</code> containing a URL if the conversion was successful;
+ * 		otherwise null
+ * 
+ * @see Transfer#javaToNative
+ */
+public Object nativeToJava(TransferData transferData){
+	if (!isSupportedType(transferData) || transferData.pValue == 0) return null;
+
+	int byteArray = 	OS.MemoryStream_ToArray(transferData.pValue);
+	int bLength = OS.Array_GetLength(byteArray, 0);
+	byte[] buffer = new byte[bLength];
+	if (bLength == 0) return "";
+	OS.memcpy(buffer, byteArray, bLength);
+	OS.GCHandle_Free(byteArray);
+
+	String string = new String(buffer);
+	int end = string.indexOf('\0');
+	return (end == -1) ? string : string.substring(0, end);
+}
+
+protected int[] getTypeIds(){
+	return new int[] {URL_ID};
+}
+
+protected String[] getTypeNames(){
+	return new String[] {URL}; 
+}
+
+boolean checkURL(Object object) {
+	return object != null && (object instanceof String) && ((String)object).length() > 0;
+}
+
+protected boolean validate(Object object) {
+	return checkURL(object);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Effects/emulated/org/eclipse/swt/effects/Effect.java b/bundles/org.eclipse.swt/Eclipse SWT Effects/emulated/org/eclipse/swt/effects/Effect.java
new file mode 100644
index 0000000..4748695
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Effects/emulated/org/eclipse/swt/effects/Effect.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * 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.effects;
+
+/**
+ * WARNING: THIS API IS UNDER CONSTRUCTION AND SHOULD NOT BE USED
+ */
+public class Effect {
+	public int handle;
+	
+	public Effect() {
+	}
+
+	public void dispose() {
+	}	
+
+	public boolean isDisposed() {
+		return handle == 0;
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/carbon/org/eclipse/swt/browser/MozillaDelegate.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/carbon/org/eclipse/swt/browser/MozillaDelegate.java
new file mode 100644
index 0000000..ad94e4c
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/carbon/org/eclipse/swt/browser/MozillaDelegate.java
@@ -0,0 +1,260 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 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.browser;
+
+import java.util.Hashtable;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.carbon.*;
+import org.eclipse.swt.internal.cocoa.*;
+import org.eclipse.swt.internal.mozilla.*;
+import org.eclipse.swt.widgets.*;
+
+class MozillaDelegate {
+	Browser browser;
+	Listener listener;
+	boolean hasFocus;
+	static Callback Callback3;
+	static Hashtable handles = new Hashtable ();
+	
+MozillaDelegate (Browser browser) {
+	super ();
+	this.browser = browser;
+}
+
+static Browser findBrowser (int handle) {
+	LONG value = (LONG)handles.get (new LONG (handle));
+	if (value != null) {
+		Display display = Display.getCurrent ();
+		return (Browser)display.findWidget (value.value);
+	}
+	return null;
+}
+
+static char[] mbcsToWcs (String codePage, byte [] buffer) {
+	int encoding = OS.CFStringGetSystemEncoding ();
+	int cfstring = OS.CFStringCreateWithBytes (OS.kCFAllocatorDefault, buffer, buffer.length, encoding, false);
+	char[] chars = null;
+	if (cfstring != 0) {
+		int length = OS.CFStringGetLength (cfstring);
+		chars = new char [length];
+		if (length != 0) {
+			CFRange range = new CFRange ();
+			range.length = length;
+			OS.CFStringGetCharacters (cfstring, range, chars);
+		}
+		OS.CFRelease (cfstring);
+	}
+	return chars;
+}
+
+static byte[] wcsToMbcs (String codePage, String string, boolean terminate) {
+	char[] chars = new char [string.length()];
+	string.getChars (0, chars.length, chars, 0);
+	int cfstring = OS.CFStringCreateWithCharacters (OS.kCFAllocatorDefault, chars, chars.length);
+	byte[] buffer = null;
+	if (cfstring != 0) {
+		CFRange range = new CFRange ();
+		range.length = chars.length;
+		int encoding = OS.CFStringGetSystemEncoding ();
+		int[] size = new int[1];
+		int numChars = OS.CFStringGetBytes (cfstring, range, encoding, (byte)'?', true, null, 0, size);
+		buffer = new byte [size[0] + (terminate ? 1 : 0)];
+		if (numChars != 0) {
+			numChars = OS.CFStringGetBytes (cfstring, range, encoding, (byte)'?', true, buffer, size[0], size);
+		}
+		OS.CFRelease (cfstring);
+	}
+	return buffer;
+}
+
+static int eventProc3 (int nextHandler, int theEvent, int userData) {
+	Widget widget = Display.getCurrent ().findWidget (userData);
+	if (widget instanceof Browser) {
+		Browser browser = (Browser) widget;
+		switch (OS.GetEventClass (theEvent)) {
+			case OS.kEventClassMouse:
+				browser.getShell ().forceActive ();
+				((Mozilla)browser.webBrowser).Activate ();
+				break;
+			case OS.kEventClassKeyboard:
+				/*
+				* Bug in Carbon.  OSX crashes if a HICocoaView is disposed during a key event,
+				* presumably as a result of attempting to use it after its refcount has reached
+				* 0.  The workaround is to temporarily add an extra ref to the view while the
+				* DOM listener is handling the event, in case the Browser gets disposed in a
+				* callback.
+				*/
+				int handle = browser.handle;
+				OS.CFRetain (handle);
+				int result = OS.CallNextEventHandler (nextHandler, theEvent);
+				OS.CFRelease (handle);
+				return result;
+		}
+	}
+	return OS.eventNotHandledErr;
+}
+
+void addWindowSubclass () {
+}
+
+int createBaseWindow (nsIBaseWindow baseWindow) {
+	/*
+	* Feature of Mozilla on OSX.  Mozilla replaces the OSX application menu whenever
+	* a browser's base window is created.  The workaround is to restore the previous
+	* menu after creating the base window. 
+	*/
+	int application = Cocoa.objc_msgSend (Cocoa.C_NSApplication, Cocoa.S_sharedApplication);
+	int mainMenu = Cocoa.objc_msgSend (application, Cocoa.S_mainMenu);
+	Cocoa.objc_msgSend (mainMenu, Cocoa.S_retain);
+	int rc = baseWindow.Create ();
+	Cocoa.objc_msgSend (application, Cocoa.S_setMainMenu, mainMenu);
+	Cocoa.objc_msgSend (mainMenu, Cocoa.S_release);
+	return rc;
+}
+
+int getHandle () {
+    int embedHandle = Cocoa.objc_msgSend (Cocoa.C_NSImageView, Cocoa.S_alloc);
+	if (embedHandle == 0) {
+		browser.dispose ();
+		SWT.error (SWT.ERROR_NO_HANDLES);
+	}
+	NSRect r = new NSRect ();
+	embedHandle = Cocoa.objc_msgSend (embedHandle, Cocoa.S_initWithFrame, r);
+	int rc;
+	int[] outControl = new int[1];
+	rc = Cocoa.HICocoaViewCreate (embedHandle, 0, outControl); /* OSX >= 10.5 */
+	if (rc == OS.noErr && outControl[0] != 0) {
+		Cocoa.objc_msgSend (embedHandle, Cocoa.S_release);
+	} else {
+		/* will succeed on OSX 10.4 with an updated vm containing HIJavaViewCreateWithCocoaView */
+		try {
+			System.loadLibrary ("frameembedding"); //$NON-NLS-1$
+		} catch (UnsatisfiedLinkError e) {}
+		rc = Cocoa.HIJavaViewCreateWithCocoaView (outControl, embedHandle);
+		if (!(rc == OS.noErr && outControl[0] != 0)) {
+			browser.dispose ();
+			SWT.error (SWT.ERROR_NO_HANDLES);
+		}
+	}
+	int subHIView = outControl[0];
+	HILayoutInfo newLayoutInfo = new HILayoutInfo ();
+	newLayoutInfo.version = 0;
+	OS.HIViewGetLayoutInfo (subHIView, newLayoutInfo);
+	HISideBinding biding = newLayoutInfo.binding.top;
+	biding.toView = 0;
+	biding.kind = OS.kHILayoutBindMin;
+	biding.offset = 0;
+	biding = newLayoutInfo.binding.left;
+	biding.toView = 0;
+	biding.kind = OS.kHILayoutBindMin;
+	biding.offset = 0;
+	biding = newLayoutInfo.binding.bottom;
+	biding.toView = 0;
+	biding.kind = OS.kHILayoutBindMax;
+	biding.offset = 0;
+	biding = newLayoutInfo.binding.right;
+	biding.toView = 0;
+	biding.kind = OS.kHILayoutBindMax;
+	biding.offset = 0;
+	OS.HIViewSetLayoutInfo (subHIView, newLayoutInfo);
+	OS.HIViewChangeFeatures (subHIView, OS.kHIViewFeatureIsOpaque, 0);
+	OS.HIViewSetVisible (subHIView, true);
+	int parentHandle = browser.handle;
+	OS.HIViewAddSubview (browser.handle, subHIView);
+	CGRect rect = new CGRect ();
+	OS.HIViewGetFrame (parentHandle, rect);
+	rect.x = rect.y = 0;
+	OS.HIViewSetFrame (subHIView, rect);
+	handles.put (new LONG (embedHandle), new LONG (browser.handle));
+
+	if (Callback3 == null) Callback3 = new Callback (this.getClass (), "eventProc3", 3); //$NON-NLS-1$
+	int callback3Address = Callback3.getAddress ();
+	if (callback3Address == 0) {
+		browser.dispose ();
+		SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+	}
+	int [] mask = new int [] {
+		OS.kEventClassMouse, OS.kEventMouseDown,
+		OS.kEventClassKeyboard, OS.kEventRawKeyDown,
+	};
+	int controlTarget = OS.GetControlEventTarget (subHIView);
+	OS.InstallEventHandler (controlTarget, callback3Address, mask.length / 2, mask, browser.handle, null);
+
+	return embedHandle;
+}
+
+String getJSLibraryName () {
+	return "libmozjs.dylib"; //$NON-NLS-1$
+}
+
+String getLibraryName () {
+	return "libxpcom.dylib"; //$NON-NLS-1$
+}
+
+String getSWTInitLibraryName () {
+	return "swt-xulrunner"; //$NON-NLS-1$
+}
+
+void handleFocus () {
+	if (hasFocus) return;
+	hasFocus = true;
+	((Mozilla)browser.webBrowser).Activate ();
+	browser.setFocus ();
+	listener = new Listener () {
+		public void handleEvent (Event event) {
+			if (event.widget == browser) return;
+			((Mozilla)browser.webBrowser).Deactivate ();
+			hasFocus = false;
+			browser.getDisplay ().removeFilter (SWT.FocusIn, this);
+			browser.getShell ().removeListener (SWT.Deactivate, this);
+			listener = null;
+		}
+	
+	};
+	browser.getDisplay ().addFilter (SWT.FocusIn, listener);
+	browser.getShell ().addListener (SWT.Deactivate, listener);
+}
+
+void handleMouseDown () {
+}
+
+boolean hookEnterExit () {
+	return true;
+}
+
+void init () {
+}
+
+boolean needsSpinup () {
+	return false;
+}
+
+void onDispose (int embedHandle) {
+	handles.remove (new LONG (embedHandle));
+	if (listener != null) {
+		browser.getDisplay ().removeFilter (SWT.FocusIn, listener);
+		browser.getShell ().removeListener (SWT.Deactivate, listener);
+		listener = null;
+	}
+	browser = null;
+}
+
+void removeWindowSubclass () {
+}
+
+void setSize (int embedHandle, int width, int height) {
+	// TODO
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/cocoa/org/eclipse/swt/browser/MozillaDelegate.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/cocoa/org/eclipse/swt/browser/MozillaDelegate.java
new file mode 100755
index 0000000..cc24444
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/cocoa/org/eclipse/swt/browser/MozillaDelegate.java
@@ -0,0 +1,161 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 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.browser;
+
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.internal.cocoa.*;
+import org.eclipse.swt.internal.mozilla.*;
+import org.eclipse.swt.widgets.*;
+
+class MozillaDelegate {
+	Browser browser;
+	Listener listener;
+	boolean hasFocus;
+	
+MozillaDelegate (Browser browser) {
+	super ();
+	this.browser = browser;
+}
+
+static Browser findBrowser (int /*long*/ handle) {
+	Display display = Display.getCurrent ();
+	return (Browser)display.findWidget (handle);
+}
+
+static char[] mbcsToWcs (String codePage, byte [] buffer) {
+//	int encoding = OS.CFStringGetSystemEncoding ();
+//	int cfstring = OS.CFStringCreateWithBytes (OS.kCFAllocatorDefault, buffer, buffer.length, encoding, false);
+//	char[] chars = null;
+//	if (cfstring != 0) {
+//		int length = OS.CFStringGetLength (cfstring);
+//		chars = new char [length];
+//		if (length != 0) {
+//			CFRange range = new CFRange ();
+//			range.length = length;
+//			OS.CFStringGetCharacters (cfstring, range, chars);
+//		}
+//		OS.CFRelease (cfstring);
+//	}
+//	return chars;
+	// TODO implement mbcsToWcs
+	return new String(buffer).toCharArray();
+}
+
+static byte[] wcsToMbcs (String codePage, String string, boolean terminate) {
+//	char[] chars = new char [string.length()];
+//	string.getChars (0, chars.length, chars, 0);
+//	int cfstring = OS.CFStringCreateWithCharacters (OS.kCFAllocatorDefault, chars, chars.length);
+//	byte[] buffer = null;
+//	if (cfstring != 0) {
+//		CFRange range = new CFRange ();
+//		range.length = chars.length;
+//		int encoding = OS.CFStringGetSystemEncoding ();
+//		int[] size = new int[1];
+//		int numChars = OS.CFStringGetBytes (cfstring, range, encoding, (byte)'?', true, null, 0, size);
+//		buffer = new byte [size[0] + (terminate ? 1 : 0)];
+//		if (numChars != 0) {
+//			numChars = OS.CFStringGetBytes (cfstring, range, encoding, (byte)'?', true, buffer, size[0], size);
+//		}
+//		OS.CFRelease (cfstring);
+//	}
+//	return buffer;
+	// TODO implement wcsToMbcs
+	if (terminate) string += "\0";
+	return string.getBytes();
+}
+
+void addWindowSubclass () {
+}
+
+int createBaseWindow (nsIBaseWindow baseWindow) {
+	/*
+	* Feature of Mozilla on OSX.  Mozilla replaces the OSX application menu whenever
+	* a browser's base window is created.  The workaround is to restore the previous
+	* menu after creating the base window. 
+	*/
+	NSApplication application = NSApplication.sharedApplication ();
+	NSMenu mainMenu = application.mainMenu ();
+	mainMenu.retain ();
+	int rc = baseWindow.Create ();
+	application.setMainMenu (mainMenu);
+	mainMenu.release ();
+	return rc;
+}
+
+int /*long*/ getHandle () {
+	return browser.view.id;
+}
+
+String getJSLibraryName () {
+	return "libmozjs.dylib"; //$NON-NLS-1$
+}
+
+String getLibraryName () {
+	return "libxpcom.dylib"; //$NON-NLS-1$
+}
+
+String getSWTInitLibraryName () {
+	return "swt-xulrunner"; //$NON-NLS-1$
+}
+
+void handleFocus () {
+	if (hasFocus) return;
+	hasFocus = true;
+	((Mozilla)browser.webBrowser).Activate ();
+	browser.setFocus ();
+	listener = new Listener () {
+		public void handleEvent (Event event) {
+			if (event.widget == browser) return;
+			((Mozilla)browser.webBrowser).Deactivate ();
+			hasFocus = false;
+			browser.getDisplay ().removeFilter (SWT.FocusIn, this);
+			browser.getShell ().removeListener (SWT.Deactivate, this);
+			listener = null;
+		}
+	
+	};
+	browser.getDisplay ().addFilter (SWT.FocusIn, listener);
+	browser.getShell ().addListener (SWT.Deactivate, listener);
+}
+
+void handleMouseDown () {
+}
+
+boolean hookEnterExit () {
+	return true;
+}
+
+void init () {
+}
+
+boolean needsSpinup () {
+	return false;
+}
+
+void onDispose (int /*long*/ embedHandle) {
+	if (listener != null) {
+		browser.getDisplay ().removeFilter (SWT.FocusIn, listener);
+		browser.getShell ().removeListener (SWT.Deactivate, listener);
+		listener = null;
+	}
+	browser = null;
+}
+
+void removeWindowSubclass () {
+}
+
+void setSize (int /*long*/ embedHandle, int width, int height) {
+	// TODO
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/nsIScriptContext.h b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/nsIScriptContext.h
new file mode 100644
index 0000000..783cf3d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/nsIScriptContext.h
@@ -0,0 +1,468 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998-1999
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/*
+ * This file is derived from the Original Code provided by mozilla.org,
+ * whose Initial Developer is Netscape Communications Corporation.  Changes
+ * to the original file were made by SWT on April 7, 2009 and are marked
+ * with trailing comment "//SWT-20090407".
+ */
+
+#ifndef nsIScriptContext_h__
+#define nsIScriptContext_h__
+
+#include "nscore.h"
+//#include "nsStringGlue.h" //SWT-20090407
+#include "nsISupports.h"
+#include "nsCOMPtr.h"
+#include "nsIProgrammingLanguage.h"
+
+class nsIScriptGlobalObject;
+class nsIScriptSecurityManager;
+class nsIPrincipal;
+class nsIAtom;
+class nsIArray;
+class nsIVariant;
+class nsIObjectInputStream;
+class nsIObjectOutputStream;
+class nsScriptObjectHolder;
+
+typedef void (*nsScriptTerminationFunc)(nsISupports* aRef);
+
+#define NS_ISCRIPTCONTEXT_IID \
+{ /* {e7b9871d-3adc-4bf7-850d-7fb9554886bf} */ \
+  0xe7b9871d, 0x3adc, 0x4bf7, \
+ { 0x85, 0x0d, 0x7f, 0xb9, 0x55, 0x48, 0x86, 0xbf } }
+
+/* This MUST match JSVERSION_DEFAULT.  This version stuff if we don't
+   know what language we have is a little silly... */
+#define SCRIPTVERSION_DEFAULT JSVERSION_DEFAULT
+
+/**
+ * It is used by the application to initialize a runtime and run scripts.
+ * A script runtime would implement this interface.
+ * <P><I>It does have a bit too much java script information now, that
+ * should be removed in a short time. Ideally this interface will be
+ * language neutral</I>
+ */
+class nsIScriptContext : public nsISupports
+{
+public:
+//NS_DECLARE_STATIC_IID_ACCESSOR(NS_ISCRIPTCONTEXT_IID) //SWT-20090407
+
+  /* Get the ID of this language. */
+  virtual PRUint32 GetScriptTypeID() = 0;
+
+  /**
+   * Compile and execute a script.
+   *
+   * @param aScript a string representing the script to be executed
+   * @param aScopeObject a script object for the scope to execute in, or
+   *                     nsnull to use a default scope
+   * @param aPrincipal the principal that produced the script
+   * @param aURL the URL or filename for error messages
+   * @param aLineNo the starting line number of the script for error messages
+   * @param aVersion the script language version to use when executing
+   * @param aRetValue the result of executing the script, or null for no result.
+   *        If this is a JS context, it's the caller's responsibility to
+   *        preserve aRetValue from GC across this call
+   * @param aIsUndefined true if the result of executing the script is the
+   *                     undefined value
+   *
+   * @return NS_OK if the script was valid and got executed
+   *
+   **/
+  virtual nsresult EvaluateString(const nsAString& aScript,
+                                  void *aScopeObject,
+                                  nsIPrincipal *aPrincipal,
+                                  const char *aURL,
+                                  PRUint32 aLineNo,
+                                  PRUint32 aVersion,
+                                  nsAString *aRetValue,
+                                  PRBool* aIsUndefined) = 0;
+
+  // Note JS bigotry remains here - 'void *aRetValue' is assumed to be a
+  // jsval.  This must move to JSObject before it can be made agnostic.
+  virtual nsresult EvaluateStringWithValue(const nsAString& aScript,
+                                           void *aScopeObject,
+                                           nsIPrincipal *aPrincipal,
+                                           const char *aURL,
+                                           PRUint32 aLineNo,
+                                           PRUint32 aVersion,
+                                           void* aRetValue,
+                                           PRBool* aIsUndefined) = 0;
+
+  /**
+   * Compile a script.
+   *
+   * @param aText a PRUnichar buffer containing script source
+   * @param aTextLength number of characters in aText
+   * @param aScopeObject an object telling the scope in which to execute,
+   *                     or nsnull to use a default scope
+   * @param aPrincipal the principal that produced the script
+   * @param aURL the URL or filename for error messages
+   * @param aLineNo the starting line number of the script for error messages
+   * @param aVersion the script language version to use when executing
+   * @param aScriptObject an executable object that's the result of compiling
+   *                      the script.
+   *
+   * @return NS_OK if the script source was valid and got compiled.
+   *
+   **/
+  virtual nsresult CompileScript(const PRUnichar* aText,
+                                 PRInt32 aTextLength,
+                                 void* aScopeObject,
+                                 nsIPrincipal* aPrincipal,
+                                 const char* aURL,
+                                 PRUint32 aLineNo,
+                                 PRUint32 aVersion,
+                                 nsScriptObjectHolder &aScriptObject) = 0;
+
+  /**
+   * Execute a precompiled script object.
+   *
+   * @param aScriptObject an object representing the script to be executed
+   * @param aScopeObject an object telling the scope in which to execute,
+   *                     or nsnull to use a default scope
+   * @param aRetValue the result of executing the script, may be null in
+   *                  which case no result string is computed
+   * @param aIsUndefined true if the result of executing the script is the
+   *                     undefined value, may be null for "don't care"
+   *
+   * @return NS_OK if the script was valid and got executed
+   *
+   */
+  virtual nsresult ExecuteScript(void* aScriptObject,
+                                 void* aScopeObject,
+                                 nsAString* aRetValue,
+                                 PRBool* aIsUndefined) = 0;
+
+  /**
+   * Compile the event handler named by atom aName, with function body aBody
+   * into a function object returned if ok via aHandler.  Does NOT bind the
+   * function to anything - BindCompiledEventHandler() should be used for that
+   * purpose.  Note that this event handler is always considered 'shared' and
+   * hence is compiled without principals.  Never call the returned object
+   * directly - it must be bound (and thereby cloned, and therefore have the 
+   * correct principals) before use!
+   *
+   * @param aName an nsIAtom pointer naming the function; it must be lowercase
+   *        and ASCII, and should not be longer than 63 chars.  This bound on
+   *        length is enforced only by assertions, so caveat caller!
+   * @param aEventName the name that the event object should be bound to
+   * @param aBody the event handler function's body
+   * @param aURL the URL or filename for error messages
+   * @param aLineNo the starting line number of the script for error messages
+   * @param aVersion the script language version to use when executing
+   * @param aHandler the out parameter in which a void pointer to the compiled
+   *        function object is stored on success
+   *
+   * @return NS_OK if the function body was valid and got compiled
+   */
+  virtual nsresult CompileEventHandler(nsIAtom* aName,
+                                       PRUint32 aArgCount,
+                                       const char** aArgNames,
+                                       const nsAString& aBody,
+                                       const char* aURL,
+                                       PRUint32 aLineNo,
+                                       PRUint32 aVersion,
+                                       nsScriptObjectHolder &aHandler) = 0;
+
+  /**
+   * Call the function object with given args and return its boolean result,
+   * or true if the result isn't boolean.
+   *
+   * @param aTarget the event target
+   * @param aScript an object telling the scope in which to call the compiled
+   *        event handler function.
+   * @param aHandler function object (function and static scope) to invoke.
+   * @param argv array of arguments.  Note each element is assumed to
+   *        be an nsIVariant.
+   * @param rval out parameter returning result
+   **/
+  virtual nsresult CallEventHandler(nsISupports* aTarget,
+                                    void *aScope, void* aHandler,
+                                    nsIArray *argv, nsIVariant **rval) = 0;
+
+  /**
+   * Bind an already-compiled event handler function to a name in the given
+   * scope object.  The same restrictions on aName (lowercase ASCII, not too
+   * long) applies here as for CompileEventHandler.  Scripting languages with
+   * static scoping must re-bind the scope chain for aHandler to begin (after
+   * the activation scope for aHandler itself, typically) with aTarget's scope.
+   *
+   * Logically, this 'bind' operation is more of a 'copy' - it simply
+   * stashes/associates the event handler function with the event target, so
+   * it can be fetched later with GetBoundEventHandler().
+   *
+   * @param aTarget an object telling the scope in which to bind the compiled
+   *        event handler function.  The context will presumably associate
+   *        this nsISupports with a native script object.
+   * @param aName an nsIAtom pointer naming the function; it must be lowercase
+   *        and ASCII, and should not be longer than 63 chars.  This bound on
+   *        length is enforced only by assertions, so caveat caller!
+   * @param aHandler the function object to name, created by an earlier call to
+   *        CompileEventHandler
+   * @return NS_OK if the function was successfully bound to the name
+   *
+   * XXXmarkh - fold this in with SetProperty?  Exactly the same concept!
+   */
+  virtual nsresult BindCompiledEventHandler(nsISupports* aTarget, void *aScope,
+                                            nsIAtom* aName,
+                                            void* aHandler) = 0;
+
+  /**
+   * Lookup a previously bound event handler for the specified target.  This
+   * will return an object equivilent to the one passed to
+   * BindCompiledEventHandler (although the pointer may not be the same).
+   *
+   */
+  virtual nsresult GetBoundEventHandler(nsISupports* aTarget, void *aScope,
+                                        nsIAtom* aName,
+                                        nsScriptObjectHolder &aHandler) = 0;
+
+  /**
+   * Compile a function that isn't used as an event handler.
+   *
+   * NOTE: Not yet language agnostic (main problem is XBL - not yet agnostic)
+   * Caller must make sure aFunctionObject is a JS GC root.
+   *
+   **/
+  virtual nsresult CompileFunction(void* aTarget,
+                                   const nsACString& aName,
+                                   PRUint32 aArgCount,
+                                   const char** aArgArray,
+                                   const nsAString& aBody,
+                                   const char* aURL,
+                                   PRUint32 aLineNo,
+                                   PRUint32 aVersion,
+                                   PRBool aShared,
+                                   void **aFunctionObject) = 0;
+
+  /**
+   * Set the default scripting language version for this context, which must
+   * be a context specific to a particular scripting language.
+   *
+   **/
+  virtual void SetDefaultLanguageVersion(PRUint32 aVersion) = 0;
+
+  /**
+   * Return the global object.
+   *
+   **/
+  virtual nsIScriptGlobalObject *GetGlobalObject() = 0;
+
+  /**
+   * Return the native script context
+   *
+   **/
+  virtual void *GetNativeContext() = 0;
+
+  /**
+   * Return the native global object for this context.
+   *
+   **/
+  virtual void *GetNativeGlobal() = 0;
+
+  /**
+   * Create a new global object that will be used for an inner window.
+   * Return the native global and an nsISupports 'holder' that can be used
+   * to manage the lifetime of it.
+   */
+  virtual nsresult CreateNativeGlobalForInner(
+                                      nsIScriptGlobalObject *aNewInner,
+                                      PRBool aIsChrome,
+                                      void **aNativeGlobal,
+                                      nsISupports **aHolder) = 0;
+
+  /**
+   * Connect this context to a new inner window, to allow "prototype"
+   * chaining from the inner to the outer.
+   * Called after both the the inner and outer windows are initialized
+   **/
+  virtual nsresult ConnectToInner(nsIScriptGlobalObject *aNewInner,
+                                  void *aOuterGlobal) = 0;
+
+
+  /**
+   * Init this context ready for use.  If aGlobalObject is not NULL, this
+   * function may initialize based on this global (for example, using the
+   * global to locate a chrome window, create a new 'scope' for this
+   * global, etc)
+   *
+   * @param aGlobalObject the gobal object, which may be nsnull.
+   *
+   * @return NS_OK if context initialization was successful
+   *
+   **/
+  virtual nsresult InitContext(nsIScriptGlobalObject *aGlobalObject) = 0;
+
+  /**
+   * Check to see if context is as yet intialized. Used to prevent
+   * reentrancy issues during the initialization process.
+   *
+   * @return PR_TRUE if initialized, PR_FALSE if not
+   *
+   */
+  virtual PRBool IsContextInitialized() = 0;
+
+  /**
+   * Called as the global object discards its reference to the context.
+   */
+  virtual void FinalizeContext() = 0;
+
+  /**
+   * For garbage collected systems, do a synchronous collection pass.
+   * May be a no-op on other systems
+   *
+   * @return NS_OK if the method is successful
+   */
+  virtual void GC() = 0;
+
+  /**
+   * Inform the context that a script was evaluated.
+   * A GC may be done if "necessary."
+   * This call is necessary if script evaluation is done
+   * without using the EvaluateScript method.
+   * @param aTerminated If true then call termination function if it was 
+   *    previously set. Within DOM this will always be true, but outside 
+   *    callers (such as xpconnect) who may do script evaluations nested
+   *    inside DOM script evaluations can pass false to avoid premature
+   *    calls to the termination function.
+   * @return NS_OK if the method is successful
+   */
+  virtual void ScriptEvaluated(PRBool aTerminated) = 0;
+
+  virtual nsresult Serialize(nsIObjectOutputStream* aStream,
+                             void *aScriptObject) = 0;
+  
+  /* Deserialize a script from a stream.
+   */
+  virtual nsresult Deserialize(nsIObjectInputStream* aStream,
+                               nsScriptObjectHolder &aResult) = 0;
+
+  /**
+   * JS only - this function need not be implemented by languages other
+   * than JS (ie, this should be moved to a private interface!)
+   * Called to specify a function that should be called when the current
+   * script (if there is one) terminates. Generally used if breakdown
+   * of script state needs to happen, but should be deferred till
+   * the end of script evaluation.
+   *
+   * @throws NS_ERROR_OUT_OF_MEMORY if that happens
+   */
+  virtual nsresult SetTerminationFunction(nsScriptTerminationFunc aFunc,
+                                          nsISupports* aRef) = 0;
+
+  /**
+   * Called to disable/enable script execution in this context.
+   */
+  virtual PRBool GetScriptsEnabled() = 0;
+  virtual void SetScriptsEnabled(PRBool aEnabled, PRBool aFireTimeouts) = 0;
+
+  // SetProperty is suspect and jst believes should not be needed.  Currenly
+  // used only for "arguments".
+  virtual nsresult SetProperty(void *aTarget, const char *aPropName, nsISupports *aVal) = 0;
+  /** 
+   * Called to set/get information if the script context is
+   * currently processing a script tag
+   */
+  virtual PRBool GetProcessingScriptTag() = 0;
+  virtual void SetProcessingScriptTag(PRBool aResult) = 0;
+
+  /**
+   * Tell the context whether or not to GC when destroyed.  An optimization
+   * used when the window is a [i]frame, so GC will happen anyway.
+   */
+  virtual void SetGCOnDestruction(PRBool aGCOnDestruction) = 0;
+
+  /**
+   * Initialize DOM classes on aGlobalObj, always call
+   * WillInitializeContext() before calling InitContext(), and always
+   * call DidInitializeContext() when a context is fully
+   * (successfully) initialized.
+   */
+  virtual nsresult InitClasses(void *aGlobalObj) = 0;
+
+  /**
+   * Clear the scope object - may be called either as we are being torn down,
+   * or before we are attached to a different document.
+   *
+   * aClearFromProtoChain is probably somewhat JavaScript specific.  It
+   * indicates that the global scope polluter should be removed from the
+   * prototype chain and that the objects in the prototype chain should
+   * also have their scopes cleared.  We don't do this all the time
+   * because the prototype chain is shared between inner and outer
+   * windows, and needs to stay with inner windows that we're keeping
+   * around.
+   */
+  virtual void ClearScope(void* aGlobalObj, PRBool aClearFromProtoChain) = 0;
+
+  /**
+   * Tell the context we're about to be reinitialize it.
+   */
+  virtual void WillInitializeContext() = 0;
+
+  /**
+   * Tell the context we're done reinitializing it.
+   */
+  virtual void DidInitializeContext() = 0;
+
+  /**
+   * Tell the context our global has a new document, and the scope
+   * used by it.  Use nsISupports to avoid dependency issues - but expect
+   * a QI for nsIDOMDocument and/or nsIDocument.
+   */
+  virtual void DidSetDocument(nsISupports *aDoc, void *aGlobal) = 0;
+
+  /* Memory managment for script objects.  Used by the implementation of
+   * nsScriptObjectHolder to manage the lifetimes of the held script objects.
+   *
+   * See also nsIScriptRuntime, which has identical methods and is useful
+   * in situations when you do not have an nsIScriptContext.
+   * 
+   */
+  virtual nsresult DropScriptObject(void *object) = 0;
+  virtual nsresult HoldScriptObject(void *object) = 0;
+
+  /* Report a pending exception if there is one on the native context */
+  virtual void ReportPendingException() = 0;
+};
+
+//NS_DEFINE_STATIC_IID_ACCESSOR(nsIScriptContext, NS_ISCRIPTCONTEXT_IID) //SWT-20090407
+
+#endif // nsIScriptContext_h__
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/nsIScriptGlobalObject.h b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/nsIScriptGlobalObject.h
new file mode 100644
index 0000000..276d40f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/nsIScriptGlobalObject.h
@@ -0,0 +1,196 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=2 sw=2 et tw=80: */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/*
+ * This file is derived from the Original Code provided by mozilla.org,
+ * whose Initial Developer is Netscape Communications Corporation.  Changes
+ * to the original file were made by SWT on April 7, 2009 and are marked
+ * with trailing comment "//SWT-20090407".
+ */
+
+#ifndef nsIScriptGlobalObject_h__
+#define nsIScriptGlobalObject_h__
+
+#include "nsISupports.h"
+//#include "nsEvent.h" //SWT-20090407
+#include "nsIProgrammingLanguage.h"
+
+class nsIScriptContext;
+class nsIDOMDocument;
+class nsIDOMEvent;
+class nsPresContext;
+class nsIScriptGlobalObjectOwner;
+class nsIArray;
+class nsScriptErrorEvent;
+class nsIScriptGlobalObject;
+//enum nsEventStatus; //SWT-20090407
+struct JSObject; // until we finally remove GetGlobalJSObject...
+
+// Some helpers for working with integer "script type IDs", and specifically
+// for working with arrays of such objects. For example, it is common for
+// implementations supporting multiple script languages to keep each
+// language's nsIScriptContext in an array indexed by the language ID.
+
+// Implementation note: We always ignore nsIProgrammingLanguage::UNKNOWN and
+// nsIProgrammingLanguage::CPLUSPLUS - this gives javascript slot 0.  An
+// attempted micro-optimization tried to avoid us going all the way to 
+// nsIProgrammingLanguage::MAX; however:
+// * Someone is reportedly working on a PHP impl - that has value 9
+// * nsGenericElement therefore allows 4 bits for the value.
+// So there is no good reason for us to be more restrictive again...
+
+#define NS_STID_FIRST nsIProgrammingLanguage::JAVASCRIPT
+// like nsGenericElement, only 4 bits worth is valid...
+#define NS_STID_LAST (nsIProgrammingLanguage::MAX > 0x000FU ? \
+                      0x000FU : nsIProgrammingLanguage::MAX)
+
+// Use to declare the array size
+#define NS_STID_ARRAY_UBOUND (NS_STID_LAST-NS_STID_FIRST+1)
+
+// Is a language ID valid?
+#define NS_STID_VALID(langID) (langID >= NS_STID_FIRST && langID <= NS_STID_LAST)
+
+// Return an index for a given ID.
+#define NS_STID_INDEX(langID) (langID-NS_STID_FIRST)
+
+// Create a 'for' loop iterating over all possible language IDs (*not* indexes)
+#define NS_STID_FOR_ID(varName) \
+          for (varName=NS_STID_FIRST;varName<=NS_STID_LAST;varName++)
+
+// Create a 'for' loop iterating over all indexes (when you don't need to know
+// what language it is)
+#define NS_STID_FOR_INDEX(varName) \
+          for (varName=0;varName<=NS_STID_INDEX(NS_STID_LAST);varName++)
+
+// A helper function for nsIScriptGlobalObject implementations to use
+// when handling a script error.  Generally called by the global when a context
+// notifies it of an error via nsIScriptGlobalObject::HandleScriptError.
+// Returns PR_TRUE if HandleDOMEvent was actually called, in which case
+// aStatus will be filled in with the status.
+//PRBool //SWT-20090407
+//NS_HandleScriptError(nsIScriptGlobalObject *aScriptGlobal, //SWT-20090407
+//                     nsScriptErrorEvent *aErrorEvent, //SWT-20090407
+//                     nsEventStatus *aStatus); //SWT-20090407
+
+
+#define NS_ISCRIPTGLOBALOBJECT_IID \
+{ /* {6afecd40-0b9a-4cfd-8c42-0f645cd91829} */ \
+  0x6afecd40, 0x0b9a, 0x4cfd, \
+  { 0x8c, 0x42, 0x0f, 0x64, 0x5c, 0xd9, 0x18, 0x29 } }
+
+/**
++  * The global object which keeps a script context for each supported script
++  * language. This often used to store per-window global state.
+ */
+
+class nsIScriptGlobalObject : public nsISupports
+{
+public:
+//NS_DECLARE_STATIC_IID_ACCESSOR(NS_ISCRIPTGLOBALOBJECT_IID) //SWT-20090407
+
+  /**
+   * Ensure that the script global object is initialized for working with the
+   * specified script language ID.  This will set up the nsIScriptContext
+   * and 'script global' for that language, allowing these to be fetched
+   * and manipulated.
+   * @return NS_OK if successful; error conditions include that the language
+   * has not been registered, as well as 'normal' errors, such as
+   * out-of-memory
+   */
+  virtual nsresult EnsureScriptEnvironment(PRUint32 aLangID) = 0;
+  /**
+   * Get a script context (WITHOUT added reference) for the specified language.
+   */
+  virtual nsIScriptContext *GetScriptContext(PRUint32 lang) = 0;
+  
+  /**
+   * Get the opaque "global" object for the specified lang.
+   */
+  virtual void *GetScriptGlobal(PRUint32 lang) = 0;
+
+  // Set/GetContext deprecated methods - use GetScriptContext/Global
+  virtual JSObject *GetGlobalJSObject() {
+        return (JSObject *)GetScriptGlobal(nsIProgrammingLanguage::JAVASCRIPT);
+  }
+
+  virtual nsIScriptContext *GetContext() {
+        return GetScriptContext(nsIProgrammingLanguage::JAVASCRIPT);
+  }
+
+  /**
+   * Set a new language context for this global.  The native global for the
+   * context is created by the context's GetNativeGlobal() method.
+   */
+
+  virtual nsresult SetScriptContext(PRUint32 lang, nsIScriptContext *aContext) = 0;
+
+  /**
+   * Called when the global script for a language is finalized, typically as
+   * part of its GC process.  By the time this call is made, the
+   * nsIScriptContext for the language has probably already been removed.
+   * After this call, the passed object is dead - which should generally be the
+   * same object the global is using for a global for that language.
+   */
+
+  virtual void OnFinalize(PRUint32 aLangID, void *aScriptGlobal) = 0;
+
+  /**
+   * Called to enable/disable scripts.
+   */
+  virtual void SetScriptsEnabled(PRBool aEnabled, PRBool aFireTimeouts) = 0;
+
+  /** Set a new arguments object for this window. This will be set on
+   * the window right away (if there's an existing document) and it
+   * will also be installed on the window when the next document is
+   * loaded.  Each language impl is responsible for converting to
+   * an array of args as appropriate for that language.
+   */
+  virtual nsresult SetNewArguments(nsIArray *aArguments) = 0;
+
+  /** Handle a script error.  Generally called by a script context.
+   */
+//virtual nsresult HandleScriptError(nsScriptErrorEvent *aErrorEvent, //SWT-20090407
+//                                   nsEventStatus *aEventStatus) { //SWT-20090407
+//  return NS_HandleScriptError(this, aErrorEvent, aEventStatus); //SWT-20090407
+//}
+};
+
+//NS_DEFINE_STATIC_IID_ACCESSOR(nsIScriptGlobalObject, //SWT-20090407
+//                              NS_ISCRIPTGLOBALOBJECT_IID) //SWT-20090407
+
+#endif
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/swt_xpcom.rc b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/swt_xpcom.rc
new file mode 100644
index 0000000..8293e74
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/swt_xpcom.rc
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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
+ *******************************************************************************/
+ 
+#include "windows.h"
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION SWT_COMMA_VERSION
+ PRODUCTVERSION 0,0,0,0
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x40000L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "CompanyName", "Eclipse Foundation\0"
+            VALUE "FileDescription", "SWT for Windows native library\0"
+            VALUE "FileVersion", SWT_FILE_VERSION
+            VALUE "InternalName", "SWT\0"
+            VALUE "LegalCopyright", "Copyright (c) 2000, 2006 IBM Corp.  All Rights Reserved.\0"
+            VALUE "OriginalFilename", SWT_ORG_FILENAME
+            VALUE "ProductName", "Standard Widget Toolkit\0"
+            VALUE "ProductVersion", "0,0,0,0\0"
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_custom.h b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_custom.h
new file mode 100644
index 0000000..c11fe30
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcom_custom.h
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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
+ *******************************************************************************/
+
+#ifdef _WIN32
+#include <windows.h>
+#define JS_EvaluateUCScriptForPrincipals_LIB "js3250.dll"
+#define XP_WIN
+#else
+#include <dlfcn.h>
+#endif
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit.cpp b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit.cpp
new file mode 100644
index 0000000..45b342c
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit.cpp
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "xpcominit_structs.h"
+#include "xpcominit_stats.h"
+
+#define XPCOMInit_NATIVE(func) Java_org_eclipse_swt_internal_mozilla_init_XPCOMInit_##func
+
+#ifndef NO_GREVersionRange_1sizeof
+extern "C" JNIEXPORT jint JNICALL XPCOMInit_NATIVE(GREVersionRange_1sizeof)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL XPCOMInit_NATIVE(GREVersionRange_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	XPCOMInit_NATIVE_ENTER(env, that, GREVersionRange_1sizeof_FUNC);
+	rc = (jint)GREVersionRange_sizeof();
+	XPCOMInit_NATIVE_EXIT(env, that, GREVersionRange_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO__1GRE_1GetGREPathWithProperties
+extern "C" JNIEXPORT jint JNICALL XPCOMInit_NATIVE(_1GRE_1GetGREPathWithProperties)(JNIEnv *env, jclass that, jobject arg0, jint arg1, jintLong arg2, jint arg3, jintLong arg4, jint arg5);
+JNIEXPORT jint JNICALL XPCOMInit_NATIVE(_1GRE_1GetGREPathWithProperties)
+	(JNIEnv *env, jclass that, jobject arg0, jint arg1, jintLong arg2, jint arg3, jintLong arg4, jint arg5)
+{
+	GREVersionRange _arg0, *lparg0=NULL;
+	jint rc = 0;
+	XPCOMInit_NATIVE_ENTER(env, that, _1GRE_1GetGREPathWithProperties_FUNC);
+	if (arg0) if ((lparg0 = getGREVersionRangeFields(env, arg0, &_arg0)) == NULL) goto fail;
+	rc = (jint)GRE_GetGREPathWithProperties((const GREVersionRange *)lparg0, arg1, (const GREProperty *)arg2, arg3, (char *)arg4, arg5);
+fail:
+	if (arg0 && lparg0) setGREVersionRangeFields(env, arg0, lparg0);
+	XPCOMInit_NATIVE_EXIT(env, that, _1GRE_1GetGREPathWithProperties_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO__1XPCOMGlueShutdown
+extern "C" JNIEXPORT jint JNICALL XPCOMInit_NATIVE(_1XPCOMGlueShutdown)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL XPCOMInit_NATIVE(_1XPCOMGlueShutdown)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	XPCOMInit_NATIVE_ENTER(env, that, _1XPCOMGlueShutdown_FUNC);
+	rc = (jint)XPCOMGlueShutdown();
+	XPCOMInit_NATIVE_EXIT(env, that, _1XPCOMGlueShutdown_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO__1XPCOMGlueStartup
+extern "C" JNIEXPORT jint JNICALL XPCOMInit_NATIVE(_1XPCOMGlueStartup)(JNIEnv *env, jclass that, jbyteArray arg0);
+JNIEXPORT jint JNICALL XPCOMInit_NATIVE(_1XPCOMGlueStartup)
+	(JNIEnv *env, jclass that, jbyteArray arg0)
+{
+	jbyte *lparg0=NULL;
+	jint rc = 0;
+	XPCOMInit_NATIVE_ENTER(env, that, _1XPCOMGlueStartup_FUNC);
+	if (arg0) if ((lparg0 = env->GetByteArrayElements(arg0, NULL)) == NULL) goto fail;
+	rc = (jint)XPCOMGlueStartup((const char *)lparg0);
+fail:
+	if (arg0 && lparg0) env->ReleaseByteArrayElements(arg0, lparg0, 0);
+	XPCOMInit_NATIVE_EXIT(env, that, _1XPCOMGlueStartup_FUNC);
+	return rc;
+}
+#endif
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit.h b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit.h
new file mode 100755
index 0000000..e80c00a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit.h
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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
+ *******************************************************************************/
+  
+#ifndef INC_xpcominit_H
+#define INC_xpcominit_H
+
+#define NDEBUG
+
+#define XPCOM_GLUE 1
+#include "nsXPCOMGlue.h"
+
+#ifdef _WIN32
+#define STDMETHODCALLTYPE __stdcall
+#else
+#define STDMETHODCALLTYPE
+#endif
+
+#endif /* INC_xpcominit_H */
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_stats.cpp b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_stats.cpp
new file mode 100644
index 0000000..687a29a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_stats.cpp
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "xpcominit_stats.h"
+
+#ifdef NATIVE_STATS
+
+int XPCOMInit_nativeFunctionCount = 4;
+int XPCOMInit_nativeFunctionCallCount[4];
+char * XPCOMInit_nativeFunctionNames[] = {
+	"GREVersionRange_1sizeof",
+	"_1GRE_1GetGREPathWithProperties",
+	"_1XPCOMGlueShutdown",
+	"_1XPCOMGlueStartup",
+};
+
+#define STATS_NATIVE(func) Java_org_eclipse_swt_tools_internal_NativeStats_##func
+
+JNIEXPORT jint JNICALL STATS_NATIVE(XPCOMInit_1GetFunctionCount)
+	(JNIEnv *env, jclass that)
+{
+	return XPCOMInit_nativeFunctionCount;
+}
+
+JNIEXPORT jstring JNICALL STATS_NATIVE(XPCOMInit_1GetFunctionName)
+	(JNIEnv *env, jclass that, jint index)
+{
+	return env->NewStringUTF(XPCOMInit_nativeFunctionNames[index]);
+}
+
+JNIEXPORT jint JNICALL STATS_NATIVE(XPCOMInit_1GetFunctionCallCount)
+	(JNIEnv *env, jclass that, jint index)
+{
+	return XPCOMInit_nativeFunctionCallCount[index];
+}
+
+#endif
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_stats.h b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_stats.h
new file mode 100644
index 0000000..048e3d7
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_stats.h
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#ifdef NATIVE_STATS
+extern int XPCOMInit_nativeFunctionCount;
+extern int XPCOMInit_nativeFunctionCallCount[];
+extern char* XPCOMInit_nativeFunctionNames[];
+#define XPCOMInit_NATIVE_ENTER(env, that, func) XPCOMInit_nativeFunctionCallCount[func]++;
+#define XPCOMInit_NATIVE_EXIT(env, that, func) 
+#else
+#ifndef XPCOMInit_NATIVE_ENTER
+#define XPCOMInit_NATIVE_ENTER(env, that, func) 
+#endif
+#ifndef XPCOMInit_NATIVE_EXIT
+#define XPCOMInit_NATIVE_EXIT(env, that, func) 
+#endif
+#endif
+
+typedef enum {
+	GREVersionRange_1sizeof_FUNC,
+	_1GRE_1GetGREPathWithProperties_FUNC,
+	_1XPCOMGlueShutdown_FUNC,
+	_1XPCOMGlueStartup_FUNC,
+} XPCOMInit_FUNCS;
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_structs.cpp b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_structs.cpp
new file mode 100644
index 0000000..e9edfd6
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_structs.cpp
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "xpcominit_structs.h"
+
+#ifndef NO_GREVersionRange
+typedef struct GREVersionRange_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID lower, lowerInclusive, upper, upperInclusive;
+} GREVersionRange_FID_CACHE;
+
+GREVersionRange_FID_CACHE GREVersionRangeFc;
+
+void cacheGREVersionRangeFields(JNIEnv *env, jobject lpObject)
+{
+	if (GREVersionRangeFc.cached) return;
+	GREVersionRangeFc.clazz = env->GetObjectClass(lpObject);
+	GREVersionRangeFc.lower = env->GetFieldID(GREVersionRangeFc.clazz, "lower", I_J);
+	GREVersionRangeFc.lowerInclusive = env->GetFieldID(GREVersionRangeFc.clazz, "lowerInclusive", "Z");
+	GREVersionRangeFc.upper = env->GetFieldID(GREVersionRangeFc.clazz, "upper", I_J);
+	GREVersionRangeFc.upperInclusive = env->GetFieldID(GREVersionRangeFc.clazz, "upperInclusive", "Z");
+	GREVersionRangeFc.cached = 1;
+}
+
+GREVersionRange *getGREVersionRangeFields(JNIEnv *env, jobject lpObject, GREVersionRange *lpStruct)
+{
+	if (!GREVersionRangeFc.cached) cacheGREVersionRangeFields(env, lpObject);
+	lpStruct->lower = (const char *)env->GetIntLongField(lpObject, GREVersionRangeFc.lower);
+	lpStruct->lowerInclusive = env->GetBooleanField(lpObject, GREVersionRangeFc.lowerInclusive);
+	lpStruct->upper = (const char *)env->GetIntLongField(lpObject, GREVersionRangeFc.upper);
+	lpStruct->upperInclusive = env->GetBooleanField(lpObject, GREVersionRangeFc.upperInclusive);
+	return lpStruct;
+}
+
+void setGREVersionRangeFields(JNIEnv *env, jobject lpObject, GREVersionRange *lpStruct)
+{
+	if (!GREVersionRangeFc.cached) cacheGREVersionRangeFields(env, lpObject);
+	env->SetIntLongField(lpObject, GREVersionRangeFc.lower, (jintLong)lpStruct->lower);
+	env->SetBooleanField(lpObject, GREVersionRangeFc.lowerInclusive, (jboolean)lpStruct->lowerInclusive);
+	env->SetIntLongField(lpObject, GREVersionRangeFc.upper, (jintLong)lpStruct->upper);
+	env->SetBooleanField(lpObject, GREVersionRangeFc.upperInclusive, (jboolean)lpStruct->upperInclusive);
+}
+#endif
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_structs.h b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_structs.h
new file mode 100644
index 0000000..096a9da
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/library/xpcominit_structs.h
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#include "xpcominit.h"
+
+#ifndef NO_GREVersionRange
+void cacheGREVersionRangeFields(JNIEnv *env, jobject lpObject);
+GREVersionRange *getGREVersionRangeFields(JNIEnv *env, jobject lpObject, GREVersionRange *lpStruct);
+void setGREVersionRangeFields(JNIEnv *env, jobject lpObject, GREVersionRange *lpStruct);
+#define GREVersionRange_sizeof() sizeof(GREVersionRange)
+#else
+#define cacheGREVersionRangeFields(a,b)
+#define getGREVersionRangeFields(a,b,c) NULL
+#define setGREVersionRangeFields(a,b,c)
+#define GREVersionRange_sizeof() 0
+#endif
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/AppFileLocProvider.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/AppFileLocProvider.java
new file mode 100644
index 0000000..1f9e845
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/AppFileLocProvider.java
@@ -0,0 +1,317 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.browser;
+
+import java.util.Vector;
+
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.mozilla.*;
+
+class AppFileLocProvider {
+	XPCOMObject supports;
+	XPCOMObject directoryServiceProvider;
+	XPCOMObject directoryServiceProvider2;	
+	int refCount = 0;
+	String mozillaPath, profilePath, componentsPath;
+	String[] pluginDirs;
+	boolean isXULRunner;
+	
+	static final String SEPARATOR_OS = System.getProperty ("file.separator"); //$NON-NLS-1$
+	static final String CHROME_DIR = "chrome"; //$NON-NLS-1$
+	static final String COMPONENTS_DIR = "components"; //$NON-NLS-1$
+	static final String HISTORY_FILE = "history.dat"; //$NON-NLS-1$
+	static final String LOCALSTORE_FILE = "localstore.rdf"; //$NON-NLS-1$
+	static final String MIMETYPES_FILE = "mimeTypes.rdf"; //$NON-NLS-1$
+	static final String PLUGINS_DIR = "plugins"; //$NON-NLS-1$
+	static final String USER_PLUGINS_DIR = ".mozilla" + SEPARATOR_OS + "plugins"; //$NON-NLS-1$ //$NON-NLS-2$
+	static final String PREFERENCES_FILE = "prefs.js"; //$NON-NLS-1$
+	
+AppFileLocProvider (String path) {
+	mozillaPath = path + SEPARATOR_OS;
+	createCOMInterfaces ();
+}
+
+int AddRef () {
+	refCount++;
+	return refCount;
+}
+
+void createCOMInterfaces () {
+	/* Create each of the interfaces that this object implements */
+	supports = new XPCOMObject (new int[] {2, 0, 0}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+	};
+	
+	directoryServiceProvider = new XPCOMObject (new int[] {2, 0, 0, 3}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return getFile (args[0], args[1], args[2]);}
+	};
+		
+	directoryServiceProvider2 = new XPCOMObject (new int[] {2, 0, 0, 3, 2}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return getFile (args[0], args[1], args[2]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return getFiles (args[0], args[1]);}
+	};
+}
+
+void disposeCOMInterfaces () {
+	if (supports != null) {
+		supports.dispose ();
+		supports = null;
+	}	
+	if (directoryServiceProvider != null) {
+		directoryServiceProvider.dispose ();
+		directoryServiceProvider = null;	
+	}
+	if (directoryServiceProvider2 != null) {
+		directoryServiceProvider2.dispose ();
+		directoryServiceProvider2 = null;	
+	}	
+}
+
+int /*long*/ getAddress () {
+	return directoryServiceProvider.getAddress ();
+}
+
+int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return XPCOM.NS_ERROR_NO_INTERFACE;
+	nsID guid = new nsID ();
+	XPCOM.memmove (guid, riid, nsID.sizeof);
+	
+	if (guid.Equals (nsISupports.NS_ISUPPORTS_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {supports.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIDirectoryServiceProvider.NS_IDIRECTORYSERVICEPROVIDER_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {directoryServiceProvider.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIDirectoryServiceProvider2.NS_IDIRECTORYSERVICEPROVIDER2_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {directoryServiceProvider2.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	
+	XPCOM.memmove (ppvObject, new int /*long*/[] {0}, C.PTR_SIZEOF);
+	return XPCOM.NS_ERROR_NO_INTERFACE;
+}
+
+int Release () {
+	refCount--;
+	if (refCount == 0) disposeCOMInterfaces ();
+	return refCount;
+}
+
+void setComponentsPath (String path) {
+	componentsPath = path;
+}
+
+void setProfilePath (String path) {
+	profilePath = path;
+	if (!Compatibility.fileExists (path, "")) { //$NON-NLS-1$
+		int /*long*/[] result = new int /*long*/[1];
+		nsEmbedString pathString = new nsEmbedString (path);
+		int rc = XPCOM.NS_NewLocalFile (pathString.getAddress (), 1, result);
+		if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+		if (result[0] == 0) Mozilla.error (XPCOM.NS_ERROR_NULL_POINTER);
+		pathString.dispose ();
+
+		nsILocalFile file = new nsILocalFile (result [0]);
+		rc = file.Create (nsILocalFile.DIRECTORY_TYPE, 0700);
+		if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+		file.Release ();
+	}
+}
+
+/* nsIDirectoryServiceProvider2 */
+
+int getFiles (int /*long*/ prop, int /*long*/ _retval) {
+	int size = XPCOM.strlen (prop);
+	byte[] bytes = new byte[size];
+	XPCOM.memmove (bytes, prop, size);
+	String propertyName = new String (MozillaDelegate.mbcsToWcs (null, bytes));
+	String[] propertyValues = null;
+
+	if (propertyName.equals (XPCOM.NS_APP_PLUGINS_DIR_LIST)) {
+		if (pluginDirs == null) {
+			int index = 0;
+			/* set the first value(s) to the MOZ_PLUGIN_PATH environment variable value if it's defined */
+			int /*long*/ ptr = C.getenv (MozillaDelegate.wcsToMbcs (null, XPCOM.MOZILLA_PLUGIN_PATH, true));
+			if (ptr != 0) {
+				int length = C.strlen (ptr);
+				byte[] buffer = new byte[length];
+				C.memmove (buffer, ptr, length);
+				String value = new String (MozillaDelegate.mbcsToWcs (null, buffer));
+				if (value.length () > 0) {
+					String separator = System.getProperty ("path.separator"); // $NON-NLS-1$
+					Vector segments = new Vector ();
+					int start, end = -1;
+					do {
+						start = end + 1;
+						end = value.indexOf (separator, start);
+						String segment;
+						if (end == -1) {
+							segment = value.substring (start);
+						} else {
+							segment = value.substring (start, end);
+						}
+						if (segment.length () > 0) segments.addElement (segment);
+					} while (end != -1);
+					int segmentsSize = segments.size ();
+					pluginDirs = new String [segmentsSize + 2];
+					for (index = 0; index < segmentsSize; index++) {
+						pluginDirs[index] = (String)segments.elementAt (index);
+					}
+				}
+			}
+			if (pluginDirs == null) {
+				pluginDirs = new String[2];
+			}
+
+			/* set the next value to the GRE path + "plugins" */
+			pluginDirs[index++] = mozillaPath + PLUGINS_DIR;
+
+			/* set the next value to the home directory + "/.mozilla/plugins" */
+			pluginDirs[index++] = System.getProperty("user.home") + SEPARATOR_OS + USER_PLUGINS_DIR;
+		}
+		propertyValues = pluginDirs;
+	}
+
+	XPCOM.memmove(_retval, new int /*long*/[] {0}, C.PTR_SIZEOF);
+	if (propertyValues != null) {
+		int /*long*/[] result = new int /*long*/[1];
+		nsISupports[] files = new nsISupports [propertyValues.length];
+		int index = 0;
+		for (int i = 0; i < propertyValues.length; i++) {
+			nsEmbedString pathString = new nsEmbedString (propertyValues[i]);
+			int rc = XPCOM.NS_NewLocalFile (pathString.getAddress (), 1, result);
+			if (rc != XPCOM.NS_ERROR_FILE_UNRECOGNIZED_PATH) {
+				/* value appears to be a valid pathname */
+				if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+				if (result[0] == 0) Mozilla.error (XPCOM.NS_ERROR_NULL_POINTER);
+
+				nsILocalFile localFile = new nsILocalFile (result[0]);
+				result[0] = 0;
+				rc = localFile.QueryInterface (nsIFile.NS_IFILE_IID, result); 
+				if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+				if (result[0] == 0) Mozilla.error (XPCOM.NS_ERROR_NO_INTERFACE);
+				localFile.Release ();
+
+				nsIFile file = new nsIFile (result[0]);
+				files[index++] = file;
+			}
+			pathString.dispose ();
+			result[0] = 0;
+		}
+
+		if (index < propertyValues.length) {
+			/* there were some invalid values so remove the trailing empty array slots */
+			nsISupports[] temp = new nsISupports [index];
+			System.arraycopy (files, 0, temp, 0, index);
+			files = temp;
+		}
+
+		SimpleEnumerator enumerator = new SimpleEnumerator (files);
+		enumerator.AddRef ();
+		XPCOM.memmove (_retval, new int /*long*/[] {enumerator.getAddress ()}, C.PTR_SIZEOF);
+		return XPCOM.NS_OK;
+	}
+
+	return XPCOM.NS_ERROR_FAILURE;
+}	
+	
+/* nsIDirectoryServiceProvider implementation */
+
+int getFile(int /*long*/ prop, int /*long*/ persistent, int /*long*/ _retval) {
+	int size = XPCOM.strlen (prop);
+	byte[] bytes = new byte[size];
+	XPCOM.memmove (bytes, prop, size);
+	String propertyName = new String (MozillaDelegate.mbcsToWcs (null, bytes));
+	String propertyValue = null;
+
+	if (propertyName.equals (XPCOM.NS_APP_HISTORY_50_FILE)) {
+		propertyValue = profilePath + HISTORY_FILE;
+	} else if (propertyName.equals (XPCOM.NS_APP_USER_MIMETYPES_50_FILE)) {
+		propertyValue = profilePath + MIMETYPES_FILE;
+	} else if (propertyName.equals (XPCOM.NS_APP_PREFS_50_FILE)) {
+		propertyValue = profilePath + PREFERENCES_FILE;
+	} else if (propertyName.equals (XPCOM.NS_APP_PREFS_50_DIR)) {
+		propertyValue = profilePath;
+	} else if (propertyName.equals (XPCOM.NS_APP_USER_CHROME_DIR)) {
+		propertyValue = profilePath + CHROME_DIR;
+	} else if (propertyName.equals (XPCOM.NS_APP_USER_PROFILE_50_DIR)) {
+		propertyValue = profilePath;
+	} else if (propertyName.equals (XPCOM.NS_APP_LOCALSTORE_50_FILE)) {
+		propertyValue = profilePath + LOCALSTORE_FILE;
+	} else if (propertyName.equals (XPCOM.NS_APP_CACHE_PARENT_DIR)) {
+		propertyValue = profilePath;
+	} else if (propertyName.equals (XPCOM.NS_OS_HOME_DIR)) {
+		propertyValue = System.getProperty("user.home");	//$NON-NLS-1$
+	} else if (propertyName.equals (XPCOM.NS_OS_TEMP_DIR)) {
+		propertyValue = System.getProperty("java.io.tmpdir");	//$NON-NLS-1$
+	} else if (propertyName.equals (XPCOM.NS_GRE_DIR)) {
+		propertyValue = mozillaPath;
+	} else if (propertyName.equals (XPCOM.NS_GRE_COMPONENT_DIR)) {
+		propertyValue = componentsPath != null ? componentsPath : mozillaPath + COMPONENTS_DIR;
+	} else if (propertyName.equals (XPCOM.NS_XPCOM_INIT_CURRENT_PROCESS_DIR)) {
+		propertyValue = mozillaPath;
+	} else if (propertyName.equals (XPCOM.NS_OS_CURRENT_PROCESS_DIR)) {
+		propertyValue = mozillaPath;
+	} else if (propertyName.equals (XPCOM.NS_XPCOM_COMPONENT_DIR)) {
+		propertyValue = mozillaPath + COMPONENTS_DIR;
+	} else if (propertyName.equals (XPCOM.NS_XPCOM_CURRENT_PROCESS_DIR)) {
+		propertyValue = mozillaPath;
+	} else if (propertyName.equals (XPCOM.NS_APP_PREF_DEFAULTS_50_DIR)) {
+		/*
+		* Answering a value for this property causes problems in Mozilla versions
+		* < 1.7.  Unfortunately this property is queried early enough in the
+		* Browser creation process that the Mozilla version being used is not
+		* yet determined.  However it is known if XULRunner is being used or not.
+		* 
+		* For now answer a value for this property iff XULRunner is the GRE.
+		* If the range of Mozilla versions supported by the Browser is changed
+		* in the future to be >= 1.7 then this value can always be answered.  
+		*/
+		if (isXULRunner) propertyValue = profilePath;
+	}
+
+	XPCOM.memmove (persistent, new int[] {1}, 4); /* PRBool */
+	XPCOM.memmove (_retval, new int /*long*/[] {0}, C.PTR_SIZEOF);
+	if (propertyValue != null && propertyValue.length () > 0) {
+		int /*long*/[] result = new int /*long*/[1];
+		nsEmbedString pathString = new nsEmbedString (propertyValue);
+		int rc = XPCOM.NS_NewLocalFile (pathString.getAddress (), 1, result);
+		if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+		if (result[0] == 0) Mozilla.error (XPCOM.NS_ERROR_NULL_POINTER);
+		pathString.dispose ();
+		
+		nsILocalFile localFile = new nsILocalFile (result [0]);
+		result[0] = 0;
+	    rc = localFile.QueryInterface (nsIFile.NS_IFILE_IID, result); 
+		if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+		if (result[0] == 0) Mozilla.error (XPCOM.NS_ERROR_NO_INTERFACE);
+
+		XPCOM.memmove (_retval, new int /*long*/[] {result[0]}, C.PTR_SIZEOF);
+		localFile.Release ();
+		return XPCOM.NS_OK;
+	}
+
+	return XPCOM.NS_ERROR_FAILURE;
+}		
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Download.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Download.java
new file mode 100644
index 0000000..b648b33
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Download.java
@@ -0,0 +1,375 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.browser;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.mozilla.*;
+import org.eclipse.swt.layout.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class implements the nsIDownload interface for mozilla
+ * versions 1.4 - 1.7.x.  For mozilla version 1.8.x this interface
+ * is implemented by class nsIDownload_1_8.  Later versions of
+ * mozilla do not need to call this interface. 
+ */
+class Download {
+	XPCOMObject supports;
+	XPCOMObject download;
+	XPCOMObject progressDialog;
+	XPCOMObject webProgressListener;
+	nsIHelperAppLauncher helperAppLauncher;
+	int refCount = 0;
+
+	Shell shell;
+	Label status;
+	Button cancel;
+	
+Download () {
+	createCOMInterfaces ();
+}
+
+int AddRef () {
+	refCount++;
+	return refCount;
+}
+
+void createCOMInterfaces () {
+	/* Create each of the interfaces that this object implements */
+	supports = new XPCOMObject (new int[] {2, 0, 0}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+	};
+	
+	download = new XPCOMObject (new int[] {2, 0, 0, 7, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return Init (args[0], args[1], args[2], args[3], args[4], args[5], args[6]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return GetSource (args[0]);}
+		public int /*long*/ method5 (int /*long*/[] args) {return GetTarget (args[0]);}
+		public int /*long*/ method6 (int /*long*/[] args) {return GetPersist (args[0]);}
+		public int /*long*/ method7 (int /*long*/[] args) {return GetPercentComplete (args[0]);}
+		public int /*long*/ method8 (int /*long*/[] args) {return GetDisplayName (args[0]);}
+		public int /*long*/ method9 (int /*long*/[] args) {return SetDisplayName (args[0]);}
+		public int /*long*/ method10 (int /*long*/[] args) {return GetStartTime (args[0]);}
+		public int /*long*/ method11 (int /*long*/[] args) {return GetMIMEInfo (args[0]);}
+		public int /*long*/ method12 (int /*long*/[] args) {return GetListener (args[0]);}
+		public int /*long*/ method13 (int /*long*/[] args) {return SetListener (args[0]);}
+		public int /*long*/ method14 (int /*long*/[] args) {return GetObserver (args[0]);}
+		public int /*long*/ method15 (int /*long*/[] args) {return SetObserver (args[0]);}
+	};
+	
+	progressDialog = new XPCOMObject (new int[] {2, 0, 0, 7, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return Init (args[0], args[1], args[2], args[3], args[4], args[5], args[6]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return GetSource (args[0]);}
+		public int /*long*/ method5 (int /*long*/[] args) {return GetTarget (args[0]);}
+		public int /*long*/ method6 (int /*long*/[] args) {return GetPersist (args[0]);}
+		public int /*long*/ method7 (int /*long*/[] args) {return GetPercentComplete (args[0]);}
+		public int /*long*/ method8 (int /*long*/[] args) {return GetDisplayName (args[0]);}
+		public int /*long*/ method9 (int /*long*/[] args) {return SetDisplayName (args[0]);}
+		public int /*long*/ method10 (int /*long*/[] args) {return GetStartTime (args[0]);}
+		public int /*long*/ method11 (int /*long*/[] args) {return GetMIMEInfo (args[0]);}
+		public int /*long*/ method12 (int /*long*/[] args) {return GetListener (args[0]);}
+		public int /*long*/ method13 (int /*long*/[] args) {return SetListener (args[0]);}
+		public int /*long*/ method14 (int /*long*/[] args) {return GetObserver (args[0]);}
+		public int /*long*/ method15 (int /*long*/[] args) {return SetObserver (args[0]);}
+		public int /*long*/ method16 (int /*long*/[] args) {return Open (args[0]);}
+		public int /*long*/ method17 (int /*long*/[] args) {return GetCancelDownloadOnClose (args[0]);}
+		public int /*long*/ method18 (int /*long*/[] args) {return SetCancelDownloadOnClose ((int)/*64*/args[0]);}
+		public int /*long*/ method19 (int /*long*/[] args) {return GetDialog (args[0]);}
+		public int /*long*/ method20 (int /*long*/[] args) {return SetDialog (args[0]);}
+	};
+	
+	webProgressListener = new XPCOMObject (new int[] {2, 0, 0, 4, 6, 3, 4, 3}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return OnStateChange (args[0], args[1], (int)/*64*/args[2], (int)/*64*/args[3]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return OnProgressChange (args[0], args[1], (int)/*64*/args[2], (int)/*64*/args[3], (int)/*64*/args[4], (int)/*64*/args[5]);}
+		public int /*long*/ method5 (int /*long*/[] args) {return OnLocationChange (args[0], args[1], args[2]);}
+		public int /*long*/ method6 (int /*long*/[] args) {return OnStatusChange (args[0], args[1], (int)/*64*/args[2], args[3]);}
+		public int /*long*/ method7 (int /*long*/[] args) {return OnSecurityChange (args[0], args[1], (int)/*64*/args[2]);}
+	};
+}
+
+void disposeCOMInterfaces () {
+	if (supports != null) {
+		supports.dispose ();
+		supports = null;
+	}	
+	if (download != null) {
+		download.dispose ();
+		download = null;	
+	}
+	if (progressDialog != null) {
+		progressDialog.dispose ();
+		progressDialog = null;
+	}
+	if (webProgressListener != null) {
+		webProgressListener.dispose ();
+		webProgressListener = null;
+	}
+}
+
+int /*long*/ getAddress () {
+	return progressDialog.getAddress ();
+}
+
+int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return XPCOM.NS_ERROR_NO_INTERFACE;
+	nsID guid = new nsID ();
+	XPCOM.memmove (guid, riid, nsID.sizeof);
+
+	if (guid.Equals (nsISupports.NS_ISUPPORTS_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {supports.getAddress ()}, C.PTR_SIZEOF);
+		AddRef();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIDownload.NS_IDOWNLOAD_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {download.getAddress ()}, C.PTR_SIZEOF);
+		AddRef();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIProgressDialog.NS_IPROGRESSDIALOG_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {progressDialog.getAddress ()}, C.PTR_SIZEOF);
+		AddRef();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIWebProgressListener.NS_IWEBPROGRESSLISTENER_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {webProgressListener.getAddress ()}, C.PTR_SIZEOF);
+		AddRef();
+		return XPCOM.NS_OK;
+	}
+	XPCOM.memmove (ppvObject, new int /*long*/[] {0}, C.PTR_SIZEOF);
+	return XPCOM.NS_ERROR_NO_INTERFACE;
+}
+        	
+int Release () {
+	refCount--;
+	if (refCount == 0) disposeCOMInterfaces ();
+	return refCount;
+}
+
+/* nsIDownload */
+
+/* Note. The argument startTime is defined as a PRInt64. This translates into two java ints. */
+int Init (int /*long*/ aSource, int /*long*/ aTarget, int /*long*/ aDisplayName, int /*long*/ aMIMEInfo, int /*long*/ startTime1, int /*long*/ startTime2, int /*long*/ aPersist) {
+	nsIURI source = new nsIURI (aSource);
+	int /*long*/ aSpec = XPCOM.nsEmbedCString_new ();
+	int rc = source.GetHost (aSpec);
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	int length = XPCOM.nsEmbedCString_Length (aSpec);
+	int /*long*/ buffer = XPCOM.nsEmbedCString_get (aSpec);
+	byte[] dest = new byte[length];
+	XPCOM.memmove (dest, buffer, length);
+	XPCOM.nsEmbedCString_delete (aSpec);
+	String url = new String (dest);
+
+	/*
+	* As of mozilla 1.7 the second argument of the nsIDownload interface's 
+	* Init function changed from nsILocalFile to nsIURI.  Detect which of
+	* these interfaces the second argument implements and act accordingly.  
+	*/
+	String filename = null;
+	nsISupports supports = new nsISupports (aTarget);
+	int /*long*/[] result = new int /*long*/[1];
+	rc = supports.QueryInterface (nsIURI.NS_IURI_IID, result);
+	if (rc == XPCOM.NS_OK) {	/* >= 1.7 */
+		nsIURI target = new nsIURI (result[0]);
+		result[0] = 0;
+		int /*long*/ aPath = XPCOM.nsEmbedCString_new ();
+		rc = target.GetPath (aPath);
+		if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+		length = XPCOM.nsEmbedCString_Length (aPath);
+		buffer = XPCOM.nsEmbedCString_get (aPath);
+		dest = new byte[length];
+		XPCOM.memmove (dest, buffer, length);
+		XPCOM.nsEmbedCString_delete (aPath);
+		filename = new String (dest);
+		int separator = filename.lastIndexOf (System.getProperty ("file.separator"));	//$NON-NLS-1$
+		filename = filename.substring (separator + 1);
+		target.Release ();
+	} else {	/* < 1.7 */
+		nsILocalFile target = new nsILocalFile (aTarget);
+		int /*long*/ aNativeTarget = XPCOM.nsEmbedCString_new ();
+		rc = target.GetNativeLeafName (aNativeTarget);
+		if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+		length = XPCOM.nsEmbedCString_Length (aNativeTarget);
+		buffer = XPCOM.nsEmbedCString_get (aNativeTarget);
+		dest = new byte[length];
+		XPCOM.memmove (dest, buffer, length);
+		XPCOM.nsEmbedCString_delete (aNativeTarget);
+		filename = new String (dest);
+	}
+
+	Listener listener = new Listener () {
+		public void handleEvent (Event event) {
+			if (event.widget == cancel) {
+				shell.close ();
+			}
+			if (helperAppLauncher != null) {
+				helperAppLauncher.Cancel ();
+				helperAppLauncher.Release ();
+			}
+			shell = null;
+			helperAppLauncher = null;
+		}
+	};
+	shell = new Shell (SWT.DIALOG_TRIM);
+	String msg = Compatibility.getMessage ("SWT_Download_File", new Object[] {filename}); //$NON-NLS-1$
+	shell.setText (msg);
+	GridLayout gridLayout = new GridLayout ();
+	gridLayout.marginHeight = 15;
+	gridLayout.marginWidth = 15;
+	gridLayout.verticalSpacing = 20;
+	shell.setLayout(gridLayout);
+	msg = Compatibility.getMessage ("SWT_Download_Location", new Object[] {filename, url}); //$NON-NLS-1$
+	new Label (shell, SWT.SIMPLE).setText (msg);
+	status = new Label (shell, SWT.SIMPLE);
+	msg = Compatibility.getMessage ("SWT_Download_Started"); //$NON-NLS-1$
+	status.setText (msg);
+	GridData data = new GridData ();
+	data.grabExcessHorizontalSpace = true;
+	data.grabExcessVerticalSpace = true;
+	status.setLayoutData (data);
+
+	cancel = new Button (shell, SWT.PUSH);
+	cancel.setText (SWT.getMessage ("SWT_Cancel")); //$NON-NLS-1$
+	data = new GridData ();
+	data.horizontalAlignment = GridData.CENTER;
+	cancel.setLayoutData (data);
+	cancel.addListener (SWT.Selection, listener);
+	shell.addListener (SWT.Close, listener);
+	shell.pack ();
+	shell.open ();
+	return XPCOM.NS_OK;
+}
+
+int GetSource (int /*long*/ aSource) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetTarget (int /*long*/ aTarget) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetPersist (int /*long*/ aPersist) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetPercentComplete (int /*long*/ aPercentComplete) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetDisplayName (int /*long*/ aDisplayName) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int SetDisplayName (int /*long*/ aDisplayName) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetStartTime (int /*long*/ aStartTime) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetMIMEInfo (int /*long*/ aMIMEInfo) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetListener (int /*long*/ aListener) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int SetListener (int /*long*/ aListener) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetObserver (int /*long*/ aObserver) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int SetObserver (int /*long*/ aObserver) {
+	if (aObserver != 0) {
+		nsISupports supports = new nsISupports (aObserver);
+		int /*long*/[] result = new int /*long*/[1];
+		int rc = supports.QueryInterface (nsIHelperAppLauncher.NS_IHELPERAPPLAUNCHER_IID, result);
+		if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+		if (result[0] == 0) Mozilla.error (XPCOM.NS_ERROR_NO_INTERFACE);
+		helperAppLauncher = new nsIHelperAppLauncher (result[0]);
+	}
+	return XPCOM.NS_OK;
+}
+
+/* nsIProgressDialog */
+int Open (int /*long*/ aParent) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetCancelDownloadOnClose (int /*long*/ aCancelDownloadOnClose) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int SetCancelDownloadOnClose (int aCancelDownloadOnClose) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetDialog (int /*long*/ aDialog) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int SetDialog (int /*long*/ aDialog) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+/* nsIWebProgressListener */
+
+int OnStateChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int aStateFlags, int aStatus) {
+	if ((aStateFlags & nsIWebProgressListener.STATE_STOP) != 0) {
+		if (helperAppLauncher != null) helperAppLauncher.Release ();
+		helperAppLauncher = null;
+		if (shell != null && !shell.isDisposed ()) shell.dispose ();
+		shell = null;
+	}
+	return XPCOM.NS_OK;
+}
+
+int OnProgressChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int aCurSelfProgress, int aMaxSelfProgress, int aCurTotalProgress, int aMaxTotalProgress) {
+	int currentKBytes = aCurTotalProgress / 1024;
+	int totalKBytes = aMaxTotalProgress / 1024;
+	if (shell != null && !shell.isDisposed ()) {
+		Object[] arguments = {new Integer (currentKBytes), new Integer (totalKBytes)};
+		String statusMsg = Compatibility.getMessage ("SWT_Download_Status", arguments); //$NON-NLS-1$
+		status.setText (statusMsg);
+		shell.layout (true);
+		shell.getDisplay ().update ();
+	}
+	return XPCOM.NS_OK;
+}
+
+int OnLocationChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int /*long*/ aLocation) {
+	return XPCOM.NS_OK;
+}
+
+int OnStatusChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int aStatus, int /*long*/ aMessage) {
+	return XPCOM.NS_OK;
+}
+
+int OnSecurityChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int state) {
+	return XPCOM.NS_OK;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/DownloadFactory.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/DownloadFactory.java
new file mode 100644
index 0000000..901786c
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/DownloadFactory.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2007 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.browser;
+
+import org.eclipse.swt.internal.C;
+import org.eclipse.swt.internal.mozilla.*;
+
+class DownloadFactory {
+	XPCOMObject supports;
+	XPCOMObject factory;
+	int refCount = 0;
+
+DownloadFactory () {
+	createCOMInterfaces ();
+}
+
+int AddRef () {
+	refCount++;
+	return refCount;
+}
+
+void createCOMInterfaces () {
+	/* Create each of the interfaces that this object implements */
+	supports = new XPCOMObject (new int[] {2, 0, 0}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+	};
+	
+	factory = new XPCOMObject (new int[] {2, 0, 0, 3, 1}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return CreateInstance (args[0], args[1], args[2]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return LockFactory ((int)/*64*/args[0]);}
+	};
+}
+
+void disposeCOMInterfaces () {
+	if (supports != null) {
+		supports.dispose ();
+		supports = null;
+	}	
+	if (factory != null) {
+		factory.dispose ();
+		factory = null;	
+	}
+}
+
+int /*long*/ getAddress () {
+	return factory.getAddress ();
+}
+
+int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return XPCOM.NS_ERROR_NO_INTERFACE;
+	nsID guid = new nsID ();
+	XPCOM.memmove (guid, riid, nsID.sizeof);
+	
+	if (guid.Equals (nsISupports.NS_ISUPPORTS_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {supports.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIFactory.NS_IFACTORY_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {factory.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	
+	XPCOM.memmove (ppvObject, new int /*long*/[] {0}, C.PTR_SIZEOF);
+	return XPCOM.NS_ERROR_NO_INTERFACE;
+}
+        	
+int Release () {
+	refCount--;
+	if (refCount == 0) disposeCOMInterfaces ();
+	return refCount;
+}
+	
+/* nsIFactory */
+
+int CreateInstance (int /*long*/ aOuter, int /*long*/ iid, int /*long*/ result) {
+	Download download = new Download ();
+	download.AddRef ();
+	XPCOM.memmove (result, new int /*long*/[] {download.getAddress ()}, C.PTR_SIZEOF);
+	return XPCOM.NS_OK;
+}
+
+int LockFactory (int lock) {
+	return XPCOM.NS_OK;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/DownloadFactory_1_8.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/DownloadFactory_1_8.java
new file mode 100644
index 0000000..1af0069
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/DownloadFactory_1_8.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2007 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.browser;
+
+import org.eclipse.swt.internal.C;
+import org.eclipse.swt.internal.mozilla.*;
+
+class DownloadFactory_1_8 {
+	XPCOMObject supports;
+	XPCOMObject factory;
+	int refCount = 0;
+
+DownloadFactory_1_8 () {
+	createCOMInterfaces ();
+}
+
+int AddRef () {
+	refCount++;
+	return refCount;
+}
+
+void createCOMInterfaces () {
+	/* Create each of the interfaces that this object implements */
+	supports = new XPCOMObject (new int[] {2, 0, 0}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+	};
+	
+	factory = new XPCOMObject (new int[] {2, 0, 0, 3, 1}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return CreateInstance (args[0], args[1], args[2]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return LockFactory ((int)/*64*/args[0]);}
+	};
+}
+
+void disposeCOMInterfaces () {
+	if (supports != null) {
+		supports.dispose ();
+		supports = null;
+	}	
+	if (factory != null) {
+		factory.dispose ();
+		factory = null;	
+	}
+}
+
+int /*long*/ getAddress () {
+	return factory.getAddress ();
+}
+
+int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return XPCOM.NS_ERROR_NO_INTERFACE;
+	nsID guid = new nsID ();
+	XPCOM.memmove (guid, riid, nsID.sizeof);
+	
+	if (guid.Equals (nsISupports.NS_ISUPPORTS_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {supports.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIFactory.NS_IFACTORY_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {factory.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	
+	XPCOM.memmove (ppvObject, new int /*long*/[] {0}, C.PTR_SIZEOF);
+	return XPCOM.NS_ERROR_NO_INTERFACE;
+}
+        	
+int Release () {
+	refCount--;
+	if (refCount == 0) disposeCOMInterfaces ();
+	return refCount;
+}
+
+/* nsIFactory */
+
+int CreateInstance (int /*long*/ aOuter, int /*long*/ iid, int /*long*/ result) {
+	Download_1_8 download = new Download_1_8 ();
+	download.AddRef ();
+	XPCOM.memmove (result, new int /*long*/[] {download.getAddress ()}, C.PTR_SIZEOF);
+	return XPCOM.NS_OK;
+}
+
+int LockFactory (int lock) {
+	return XPCOM.NS_OK;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Download_1_8.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Download_1_8.java
new file mode 100644
index 0000000..82819f1
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Download_1_8.java
@@ -0,0 +1,397 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.browser;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.mozilla.*;
+import org.eclipse.swt.layout.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class implements the nsIDownload interface for mozilla
+ * version 1.8.x.  For mozilla versions 1.4 - 1.7.x this interface
+ * is implemented by class nsIDownload.  Mozilla versions later 
+ * than 1.8.x do not need to call this interface. 
+ */
+class Download_1_8 {
+	XPCOMObject supports;
+	XPCOMObject download;
+	XPCOMObject progressDialog;
+	XPCOMObject webProgressListener;
+	nsICancelable cancelable;
+	int refCount = 0;
+
+	Shell shell;
+	Label status;
+	Button cancel;
+
+	static final boolean is32 = C.PTR_SIZEOF == 4;
+
+Download_1_8 () {
+	createCOMInterfaces ();
+}
+
+int AddRef () {
+	refCount++;
+	return refCount;
+}
+
+void createCOMInterfaces () {
+	/* Create each of the interfaces that this object implements */
+	supports = new XPCOMObject (new int[] {2, 0, 0}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+	};
+
+	download = new XPCOMObject (new int[] {2, 0, 0, 4, 6, 3, 4, 3, is32 ? 10 : 6, is32 ? 8 : 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return OnStateChange (args[0], args[1], (int)/*64*/args[2], (int)/*64*/args[3]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return OnProgressChange (args[0], args[1], (int)/*64*/args[2], (int)/*64*/args[3], (int)/*64*/args[4], (int)/*64*/args[5]);}
+		public int /*long*/ method5 (int /*long*/[] args) {return OnLocationChange (args[0], args[1], args[2]);}
+		public int /*long*/ method6 (int /*long*/[] args) {return OnStatusChange (args[0], args[1], (int)/*64*/args[2], args[3]);}
+		public int /*long*/ method7 (int /*long*/[] args) {return OnSecurityChange (args[0], args[1], (int)/*64*/args[2]);}
+		public int /*long*/ method8 (int /*long*/[] args) {
+			if (args.length == 10) {
+				return OnProgressChange64_32 (args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]);
+			} else {
+				return OnProgressChange64 (args[0], args[1], args[2], args[3], args[4], args[5]);
+			}
+		}
+		public int /*long*/ method9 (int /*long*/[] args) {
+			if (args.length == 8) {
+				return Init_32 (args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);
+			} else {
+				return Init (args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
+			}
+		}
+		public int /*long*/ method10 (int /*long*/[] args) {return GetTargetFile (args[0]);}
+		public int /*long*/ method11 (int /*long*/[] args) {return GetPercentComplete (args[0]);}
+		public int /*long*/ method12 (int /*long*/[] args) {return GetAmountTransferred (args[0]);}
+		public int /*long*/ method13 (int /*long*/[] args) {return GetSize (args[0]);}
+		public int /*long*/ method14 (int /*long*/[] args) {return GetSource (args[0]);}
+		public int /*long*/ method15 (int /*long*/[] args) {return GetTarget (args[0]);}
+		public int /*long*/ method16 (int /*long*/[] args) {return GetCancelable (args[0]);}
+		public int /*long*/ method17 (int /*long*/[] args) {return GetDisplayName (args[0]);}
+		public int /*long*/ method18 (int /*long*/[] args) {return GetStartTime (args[0]);}
+		public int /*long*/ method19 (int /*long*/[] args) {return GetMIMEInfo (args[0]);}
+	};
+
+	progressDialog = new XPCOMObject (new int[] {2, 0, 0, 4, 6, 3, 4, 3, is32 ? 10 : 6, is32 ? 8 : 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return OnStateChange (args[0], args[1], (int)/*64*/args[2], (int)/*64*/args[3]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return OnProgressChange (args[0], args[1], (int)/*64*/args[2], (int)/*64*/args[3], (int)/*64*/args[4], (int)/*64*/args[5]);}
+		public int /*long*/ method5 (int /*long*/[] args) {return OnLocationChange (args[0], args[1], args[2]);}
+		public int /*long*/ method6 (int /*long*/[] args) {return OnStatusChange (args[0], args[1], (int)/*64*/args[2], args[3]);}
+		public int /*long*/ method7 (int /*long*/[] args) {return OnSecurityChange (args[0], args[1], (int)/*64*/args[2]);}
+		public int /*long*/ method8 (int /*long*/[] args) {
+			if (args.length == 10) {
+				return OnProgressChange64_32 (args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]);
+			} else {
+				return OnProgressChange64 (args[0], args[1], args[2], args[3], args[4], args[5]);
+			}
+		}
+		public int /*long*/ method9 (int /*long*/[] args) {
+			if (args.length == 8) {
+				return Init_32 (args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);
+			} else {
+				return Init (args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
+			}
+		}
+		public int /*long*/ method10 (int /*long*/[] args) {return GetTargetFile (args[0]);}
+		public int /*long*/ method11 (int /*long*/[] args) {return GetPercentComplete (args[0]);}
+		public int /*long*/ method12 (int /*long*/[] args) {return GetAmountTransferred (args[0]);}
+		public int /*long*/ method13 (int /*long*/[] args) {return GetSize (args[0]);}
+		public int /*long*/ method14 (int /*long*/[] args) {return GetSource (args[0]);}
+		public int /*long*/ method15 (int /*long*/[] args) {return GetTarget (args[0]);}
+		public int /*long*/ method16 (int /*long*/[] args) {return GetCancelable (args[0]);}
+		public int /*long*/ method17 (int /*long*/[] args) {return GetDisplayName (args[0]);}
+		public int /*long*/ method18 (int /*long*/[] args) {return GetStartTime (args[0]);}
+		public int /*long*/ method19 (int /*long*/[] args) {return GetMIMEInfo (args[0]);}
+		public int /*long*/ method20 (int /*long*/[] args) {return Open (args[0]);}
+		public int /*long*/ method21 (int /*long*/[] args) {return GetCancelDownloadOnClose (args[0]);}
+		public int /*long*/ method22 (int /*long*/[] args) {return SetCancelDownloadOnClose ((int)/*64*/args[0]);}
+		public int /*long*/ method23 (int /*long*/[] args) {return GetObserver (args[0]);}
+		public int /*long*/ method24 (int /*long*/[] args) {return SetObserver (args[0]);}
+		public int /*long*/ method25 (int /*long*/[] args) {return GetDialog (args[0]);}
+		public int /*long*/ method26 (int /*long*/[] args) {return SetDialog (args[0]);}
+	};
+
+	webProgressListener = new XPCOMObject (new int[] {2, 0, 0, 4, 6, 3, 4, 3}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return OnStateChange (args[0], args[1], (int)/*64*/args[2], (int)/*64*/args[3]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return OnProgressChange (args[0], args[1], (int)/*64*/args[2], (int)/*64*/args[3], (int)/*64*/args[4], (int)/*64*/args[5]);}
+		public int /*long*/ method5 (int /*long*/[] args) {return OnLocationChange (args[0], args[1], args[2]);}
+		public int /*long*/ method6 (int /*long*/[] args) {return OnStatusChange (args[0], args[1], (int)/*64*/args[2], args[3]);}
+		public int /*long*/ method7 (int /*long*/[] args) {return OnSecurityChange (args[0], args[1], (int)/*64*/args[2]);}
+	};
+}
+
+void disposeCOMInterfaces() {
+	if (supports != null) {
+		supports.dispose ();
+		supports = null;
+	}	
+	if (download != null) {
+		download.dispose ();
+		download = null;	
+	}
+	if (progressDialog != null) {
+		progressDialog.dispose ();
+		progressDialog = null;	
+	}
+	if (webProgressListener != null) {
+		webProgressListener.dispose ();
+		webProgressListener = null;	
+	}
+}
+
+int /*long*/ getAddress () {
+	return progressDialog.getAddress ();
+}
+
+int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return XPCOM.NS_ERROR_NO_INTERFACE;
+	nsID guid = new nsID ();
+	XPCOM.memmove (guid, riid, nsID.sizeof);
+
+	if (guid.Equals (nsISupports.NS_ISUPPORTS_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {supports.getAddress ()}, C.PTR_SIZEOF);
+		AddRef();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIDownload_1_8.NS_IDOWNLOAD_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {download.getAddress ()}, C.PTR_SIZEOF);
+		AddRef();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIProgressDialog_1_8.NS_IPROGRESSDIALOG_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {progressDialog.getAddress ()}, C.PTR_SIZEOF);
+		AddRef();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIWebProgressListener.NS_IWEBPROGRESSLISTENER_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {webProgressListener.getAddress ()}, C.PTR_SIZEOF);
+		AddRef();
+		return XPCOM.NS_OK;
+	}
+	XPCOM.memmove (ppvObject, new int /*long*/[] {0}, C.PTR_SIZEOF);
+	return XPCOM.NS_ERROR_NO_INTERFACE;
+}
+
+int Release () {
+	refCount--;
+	if (refCount == 0) disposeCOMInterfaces ();
+	return refCount;
+}
+
+/* nsIDownload */
+
+/* Note. The argument startTime is defined as a PRInt64. This translates into two java ints. */
+int Init_32 (int /*long*/ aSource, int /*long*/ aTarget, int /*long*/ aDisplayName, int /*long*/ aMIMEInfo, int /*long*/ startTime1, int /*long*/ startTime2, int /*long*/ aTempFile, int /*long*/ aCancelable) {
+	long startTime = (startTime2 << 32) + startTime1;
+	return Init (aSource, aTarget, aDisplayName, aMIMEInfo, startTime, aTempFile, aCancelable);
+}
+
+int Init (int /*long*/ aSource, int /*long*/ aTarget, int /*long*/ aDisplayName, int /*long*/ aMIMEInfo, long startTime, int /*long*/ aTempFile, int /*long*/ aCancelable) {
+	cancelable = new nsICancelable (aCancelable);
+	nsIURI source = new nsIURI (aSource);
+	int /*long*/ aSpec = XPCOM.nsEmbedCString_new ();
+	int rc = source.GetHost (aSpec);
+	if (rc != XPCOM.NS_OK) Mozilla.error(rc);
+	int length = XPCOM.nsEmbedCString_Length (aSpec);
+	int /*long*/ buffer = XPCOM.nsEmbedCString_get (aSpec);
+	byte[] dest = new byte[length];
+	XPCOM.memmove (dest, buffer, length);
+	XPCOM.nsEmbedCString_delete (aSpec);
+	String url = new String (dest);
+
+	nsIURI target = new nsIURI (aTarget);
+	int /*long*/ aPath = XPCOM.nsEmbedCString_new ();
+	rc = target.GetPath (aPath);
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	length = XPCOM.nsEmbedCString_Length (aPath);
+	buffer = XPCOM.nsEmbedCString_get (aPath);
+	dest = new byte[length];
+	XPCOM.memmove (dest, buffer, length);
+	XPCOM.nsEmbedCString_delete (aPath);
+	String filename = new String (dest);
+	int separator = filename.lastIndexOf (System.getProperty ("file.separator"));	//$NON-NLS-1$
+	filename = filename.substring (separator + 1);
+
+	Listener listener = new Listener() {
+		public void handleEvent (Event event) {
+			if (event.widget == cancel) {
+				shell.close ();
+			}
+			if (cancelable != null) {
+				int rc = cancelable.Cancel (XPCOM.NS_BINDING_ABORTED);
+				if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+			}
+			shell = null;
+			cancelable = null;
+		}
+	};
+	shell = new Shell (SWT.DIALOG_TRIM);
+	String msg = Compatibility.getMessage ("SWT_Download_File", new Object[] {filename}); //$NON-NLS-1$
+	shell.setText (msg);
+	GridLayout gridLayout = new GridLayout ();
+	gridLayout.marginHeight = 15;
+	gridLayout.marginWidth = 15;
+	gridLayout.verticalSpacing = 20;
+	shell.setLayout (gridLayout);
+	msg = Compatibility.getMessage ("SWT_Download_Location", new Object[] {filename, url}); //$NON-NLS-1$
+	new Label (shell, SWT.SIMPLE).setText (msg);
+	status = new Label (shell, SWT.SIMPLE);
+	msg = Compatibility.getMessage ("SWT_Download_Started"); //$NON-NLS-1$
+	status.setText (msg);
+	GridData data = new GridData ();
+	data.grabExcessHorizontalSpace = true;
+	data.grabExcessVerticalSpace = true;
+	status.setLayoutData (data);
+	
+	cancel = new Button (shell, SWT.PUSH);
+	cancel.setText (SWT.getMessage ("SWT_Cancel")); //$NON-NLS-1$
+	data = new GridData ();
+	data.horizontalAlignment = GridData.CENTER;
+	cancel.setLayoutData (data);
+	cancel.addListener (SWT.Selection, listener);
+	shell.addListener (SWT.Close, listener);
+	shell.pack ();
+	shell.open ();
+	return XPCOM.NS_OK;
+}
+
+int GetAmountTransferred (int /*long*/ arg0) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetCancelable (int /*long*/ arg0) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetDisplayName (int /*long*/ aDisplayName) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetMIMEInfo (int /*long*/ aMIMEInfo) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetPercentComplete (int /*long*/ aPercentComplete) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetSize (int /*long*/ arg0) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetSource (int /*long*/ aSource) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetStartTime (int /*long*/ aStartTime) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetTarget (int /*long*/ aTarget) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetTargetFile (int /*long*/ arg0) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+/* nsIProgressDialog */
+int GetCancelDownloadOnClose (int /*long*/ aCancelDownloadOnClose) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetDialog (int /*long*/ aDialog) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetObserver (int /*long*/ aObserver) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int Open (int /*long*/ aParent) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int SetCancelDownloadOnClose (int aCancelDownloadOnClose) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int SetDialog (int /*long*/ aDialog) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int SetObserver (int /*long*/ aObserver) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+/* nsIWebProgressListener */
+
+int OnLocationChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int /*long*/ aLocation) {
+	return XPCOM.NS_OK;
+}
+
+int OnProgressChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int aCurSelfProgress, int aMaxSelfProgress, int aCurTotalProgress, int aMaxTotalProgress) {
+	return OnProgressChange64 (aWebProgress, aRequest, aCurSelfProgress, aMaxSelfProgress, aCurTotalProgress, aMaxTotalProgress);
+}
+
+/* Note. The last 4 args in the original interface are defined as PRInt64. These each translate into two java ints. */
+int OnProgressChange64_32 (int /*long*/ aWebProgress, int /*long*/ aRequest, int /*long*/ aCurSelfProgress1, int /*long*/ aCurSelfProgress2, int /*long*/ aMaxSelfProgress1, int /*long*/ aMaxSelfProgress2, int /*long*/ aCurTotalProgress1, int /*long*/ aCurTotalProgress2, int /*long*/ aMaxTotalProgress1, int /*long*/ aMaxTotalProgress2) {
+	long aCurSelfProgress = (aCurSelfProgress2 << 32) + aCurSelfProgress1;
+	long aMaxSelfProgress = (aMaxSelfProgress2 << 32) + aMaxSelfProgress1;
+	long aCurTotalProgress = (aCurTotalProgress2 << 32) + aCurTotalProgress1;
+	long aMaxTotalProgress = (aMaxTotalProgress2 << 32) + aMaxTotalProgress1;
+	return OnProgressChange64 (aWebProgress, aRequest, aCurSelfProgress, aMaxSelfProgress, aCurTotalProgress, aMaxTotalProgress);
+}
+
+int OnProgressChange64 (int /*long*/ aWebProgress, int /*long*/ aRequest, long aCurSelfProgress, long aMaxSelfProgress, long aCurTotalProgress, long aMaxTotalProgress) {
+	long currentKBytes = aCurTotalProgress / 1024;
+	long totalKBytes = aMaxTotalProgress / 1024;
+	if (shell != null && !shell.isDisposed ()) {
+		Object[] arguments = {new Long (currentKBytes), new Long (totalKBytes)};
+		String statusMsg = Compatibility.getMessage ("SWT_Download_Status", arguments); //$NON-NLS-1$
+		status.setText (statusMsg);
+		shell.layout (true);
+		shell.getDisplay ().update ();
+	}
+	return XPCOM.NS_OK;
+}
+
+int OnSecurityChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int state) {
+	return XPCOM.NS_OK;
+}
+
+int OnStateChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int aStateFlags, int aStatus) {
+	if ((aStateFlags & nsIWebProgressListener.STATE_STOP) != 0) {
+		cancelable = null;
+		if (shell != null && !shell.isDisposed ()) shell.dispose ();
+		shell = null;
+	}
+	return XPCOM.NS_OK;
+}	
+
+int OnStatusChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int aStatus, int /*long*/ aMessage) {
+	return XPCOM.NS_OK;
+}		
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/External.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/External.java
new file mode 100644
index 0000000..53ed58f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/External.java
@@ -0,0 +1,590 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2009 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.browser;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.mozilla.*;
+
+class External {
+	public static final String EXTERNAL_IID_STR =
+		"ded01d20-ba6f-11dd-ad8b-0800200c9a66"; //$NON-NLS-1$
+
+	public static final nsID EXTERNAL_IID =
+		new nsID(EXTERNAL_IID_STR);
+
+	XPCOMObject supports;
+	XPCOMObject external;
+	XPCOMObject classInfo;
+	XPCOMObject securityCheckedComponent;
+	int refCount = 0;
+
+External () {
+	createCOMInterfaces ();
+}
+
+int AddRef () {
+	refCount++;
+	return refCount;
+}
+
+void createCOMInterfaces () {
+	/* Create each of the interfaces that this object implements */
+	supports = new XPCOMObject (new int[] {2, 0, 0}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+	};
+
+	classInfo = new XPCOMObject (new int[] {2, 0, 0, 2, 2, 1, 1, 1, 1, 1, 1}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return getInterfaces (args[0], args[1]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return getHelperForLanguage ((int)/*64*/args[0], args[1]);}
+		public int /*long*/ method5 (int /*long*/[] args) {return getContractID (args[0]);}
+		public int /*long*/ method6 (int /*long*/[] args) {return getClassDescription (args[0]);}
+		public int /*long*/ method7 (int /*long*/[] args) {return getClassID (args[0]);}
+		public int /*long*/ method8 (int /*long*/[] args) {return getImplementationLanguage (args[0]);}
+		public int /*long*/ method9 (int /*long*/[] args) {return getFlags (args[0]);}
+		public int /*long*/ method10 (int /*long*/[] args) {return getClassIDNoAlloc (args[0]);}
+	};
+
+	securityCheckedComponent = new XPCOMObject (new int[] {2, 0, 0, 2, 3, 3, 3}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return canCreateWrapper (args[0], args[1]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return canCallMethod (args[0], args[1], args[2]);}
+		public int /*long*/ method5 (int /*long*/[] args) {return canGetProperty (args[0], args[1], args[2]);}
+		public int /*long*/ method6 (int /*long*/[] args) {return canSetProperty (args[0], args[1], args[2]);}
+	};
+
+	external = new XPCOMObject (new int[] {2, 0, 0, 3}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return callJava ((int)/*64*/args[0], args[1], args[2]);}
+	};
+	
+}
+
+void disposeCOMInterfaces () {
+	if (supports != null) {
+		supports.dispose ();
+		supports = null;
+	}	
+	if (external != null) {
+		external.dispose ();
+		external = null;	
+	}
+}
+
+int /*long*/ getAddress () {
+	return external.getAddress ();
+}
+
+int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return XPCOM.NS_ERROR_NO_INTERFACE;
+	nsID guid = new nsID ();
+	XPCOM.memmove (guid, riid, nsID.sizeof);
+
+	if (guid.Equals (nsISupports.NS_ISUPPORTS_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {supports.getAddress ()}, C.PTR_SIZEOF);
+		AddRef();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIClassInfo.NS_ICLASSINFO_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {classInfo.getAddress ()}, C.PTR_SIZEOF);
+		AddRef();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsISecurityCheckedComponent.NS_ISECURITYCHECKEDCOMPONENT_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {securityCheckedComponent.getAddress ()}, C.PTR_SIZEOF);
+		AddRef();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (EXTERNAL_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {external.getAddress ()}, C.PTR_SIZEOF);
+		AddRef();
+		return XPCOM.NS_OK;
+	}
+
+	XPCOM.memmove (ppvObject, new int /*long*/[] {0}, C.PTR_SIZEOF);
+	return XPCOM.NS_ERROR_NO_INTERFACE;
+}
+
+int Release () {
+	refCount--;
+	if (refCount == 0) disposeCOMInterfaces ();
+	return refCount;
+}
+
+/* nsIClassInfo */
+
+int getClassDescription (int /*long*/ _retValue) {
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = XPCOM.NS_GetServiceManager (result);
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	if (result[0] == 0) Mozilla.error (XPCOM.NS_NOINTERFACE);
+
+	nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
+	result[0] = 0;
+	byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_MEMORY_CONTRACTID, true);
+	rc = serviceManager.GetServiceByContractID (aContractID, nsIMemory.NS_IMEMORY_IID, result);
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	if (result[0] == 0) Mozilla.error (XPCOM.NS_NOINTERFACE);		
+	serviceManager.Release ();
+
+	nsIMemory memory = new nsIMemory (result[0]);
+	result[0] = 0;
+	byte[] bytes = MozillaDelegate.wcsToMbcs (null, "external", true); //$NON-NLS-1$
+	int /*long*/ ptr = memory.Alloc (bytes.length);
+	C.memmove (ptr, bytes, bytes.length);
+	C.memmove (_retValue, new int /*long*/[] {ptr}, C.PTR_SIZEOF);
+	memory.Release ();
+
+	return XPCOM.NS_OK;
+}
+
+int getClassID (int /*long*/ _retValue) {
+	return XPCOM.NS_OK;
+}
+
+int getClassIDNoAlloc (int /*long*/ _retValue) {
+	return XPCOM.NS_OK;
+}
+
+int getContractID (int /*long*/ _retValue) {
+	return XPCOM.NS_OK;
+}
+
+int getFlags (int /*long*/ flags) {
+	C.memmove (flags, new int[] {nsIClassInfo.MAIN_THREAD_ONLY}, 4); /* PRUint32 */
+	return XPCOM.NS_OK;
+}
+
+int getHelperForLanguage (int language, int /*long*/ _retValue) {
+	C.memmove (_retValue, new int /*long*/[] {0}, C.PTR_SIZEOF);
+	return XPCOM.NS_OK;
+}
+
+int getImplementationLanguage (int /*long*/ _retValue) {
+	C.memmove (_retValue, new int[] {5}, 4); /* nsIProgrammingLanguage.JAVA */ /* PRUint */
+	return XPCOM.NS_OK;
+}
+
+
+int getInterfaces (int /*long*/ count, int /*long*/ array) {
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = XPCOM.NS_GetServiceManager (result);
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	if (result[0] == 0) Mozilla.error (XPCOM.NS_NOINTERFACE);
+
+	nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
+	result[0] = 0;
+	byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_MEMORY_CONTRACTID, true);
+	rc = serviceManager.GetServiceByContractID (aContractID, nsIMemory.NS_IMEMORY_IID, result);
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	if (result[0] == 0) Mozilla.error (XPCOM.NS_NOINTERFACE);		
+	serviceManager.Release ();
+
+	nsIMemory memory = new nsIMemory (result[0]);
+	result[0] = 0;
+	int /*long*/ securityCheckedComponentIID = memory.Alloc (nsID.sizeof);
+	XPCOM.memmove (securityCheckedComponentIID, nsISecurityCheckedComponent.NS_ISECURITYCHECKEDCOMPONENT_IID, nsID.sizeof);
+	int /*long*/ externalIID = memory.Alloc (nsID.sizeof);
+	XPCOM.memmove (externalIID, EXTERNAL_IID, nsID.sizeof);
+	int /*long*/ ptrArray = memory.Alloc (2 * C.PTR_SIZEOF);
+	C.memmove (ptrArray, new int /*long*/[] {securityCheckedComponentIID}, C.PTR_SIZEOF);
+	C.memmove (ptrArray + C.PTR_SIZEOF, new int /*long*/[] {externalIID}, C.PTR_SIZEOF);
+	C.memmove (array, new int /*long*/[] {ptrArray}, C.PTR_SIZEOF);
+	memory.Release ();
+
+	C.memmove (count, new int[] {2}, 4); /* PRUint */
+	return XPCOM.NS_OK;
+}
+
+/* nsISecurityCheckedComponent */
+
+int canCreateWrapper (int /*long*/ iid, int /*long*/ _retVal) {
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = XPCOM.NS_GetServiceManager (result);
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	if (result[0] == 0) Mozilla.error (XPCOM.NS_NOINTERFACE);
+
+	nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
+	result[0] = 0;
+	byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_MEMORY_CONTRACTID, true);
+	rc = serviceManager.GetServiceByContractID (aContractID, nsIMemory.NS_IMEMORY_IID, result);
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	if (result[0] == 0) Mozilla.error (XPCOM.NS_NOINTERFACE);		
+	serviceManager.Release ();
+
+	nsIMemory memory = new nsIMemory (result[0]);
+	result[0] = 0;
+	byte[] bytes = MozillaDelegate.wcsToMbcs (null, "allAccess", true); //$NON-NLS-1$
+	int /*long*/ ptr = memory.Alloc (bytes.length);
+	C.memmove (ptr, bytes, bytes.length);
+	C.memmove (_retVal, new int /*long*/[] {ptr}, C.PTR_SIZEOF);
+	memory.Release ();
+
+	return XPCOM.NS_OK;
+}
+
+int canCallMethod (int /*long*/ iid, int /*long*/ methodName, int /*long*/ _retVal) {
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = XPCOM.NS_GetServiceManager (result);
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	if (result[0] == 0) Mozilla.error (XPCOM.NS_NOINTERFACE);
+
+	nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
+	result[0] = 0;
+	byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_MEMORY_CONTRACTID, true);
+	rc = serviceManager.GetServiceByContractID (aContractID, nsIMemory.NS_IMEMORY_IID, result);
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	if (result[0] == 0) Mozilla.error (XPCOM.NS_NOINTERFACE);		
+	serviceManager.Release ();
+
+	nsIMemory memory = new nsIMemory (result[0]);
+	result[0] = 0;
+	int length = XPCOM.strlen_PRUnichar (methodName);
+	char[] dest = new char[length];
+	XPCOM.memmove (dest, methodName, length * 2);
+	String string = new String (dest);
+	byte[] bytes;
+	if (string.equals("callJava")) { //$NON-NLS-1$
+		bytes = MozillaDelegate.wcsToMbcs (null, "allAccess", true); //$NON-NLS-1$ 
+	} else {
+		bytes = MozillaDelegate.wcsToMbcs (null, "noAccess", true); //$NON-NLS-1$
+	}
+	int /*long*/ ptr = memory.Alloc (bytes.length);
+	C.memmove (ptr, bytes, bytes.length);
+	C.memmove (_retVal, new int /*long*/[] {ptr}, C.PTR_SIZEOF);
+	memory.Release ();
+
+	return XPCOM.NS_OK;
+}
+
+int canGetProperty (int /*long*/ iid, int /*long*/ propertyName, int /*long*/ _retVal) {
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = XPCOM.NS_GetServiceManager (result);
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	if (result[0] == 0) Mozilla.error (XPCOM.NS_NOINTERFACE);
+
+	nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
+	result[0] = 0;
+	byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_MEMORY_CONTRACTID, true);
+	rc = serviceManager.GetServiceByContractID (aContractID, nsIMemory.NS_IMEMORY_IID, result);
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	if (result[0] == 0) Mozilla.error (XPCOM.NS_NOINTERFACE);		
+	serviceManager.Release ();
+
+	nsIMemory memory = new nsIMemory (result[0]);
+	result[0] = 0;
+	byte[] bytes = MozillaDelegate.wcsToMbcs (null, "noAccess", true); //$NON-NLS-1$
+	int /*long*/ ptr = memory.Alloc (bytes.length);
+	C.memmove (ptr, bytes, bytes.length);
+	C.memmove (_retVal, new int /*long*/[] {ptr}, C.PTR_SIZEOF);
+	memory.Release ();
+
+	return XPCOM.NS_OK;
+}
+
+int canSetProperty (int /*long*/ iid, int /*long*/ propertyName, int /*long*/ _retVal) {
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = XPCOM.NS_GetServiceManager (result);
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	if (result[0] == 0) Mozilla.error (XPCOM.NS_NOINTERFACE);
+
+	nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
+	result[0] = 0;
+	byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_MEMORY_CONTRACTID, true);
+	rc = serviceManager.GetServiceByContractID (aContractID, nsIMemory.NS_IMEMORY_IID, result);
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	if (result[0] == 0) Mozilla.error (XPCOM.NS_NOINTERFACE);		
+	serviceManager.Release ();
+
+	nsIMemory memory = new nsIMemory (result[0]);
+	result[0] = 0;
+	byte[] bytes = MozillaDelegate.wcsToMbcs (null, "noAccess", true); //$NON-NLS-1$
+	int /*long*/ ptr = memory.Alloc (bytes.length);
+	C.memmove (ptr, bytes, bytes.length);
+	C.memmove (_retVal, new int /*long*/[] {ptr}, C.PTR_SIZEOF);
+	memory.Release ();
+
+	return XPCOM.NS_OK;
+}
+
+/* external */
+
+Object convertToJava (nsIVariant variant, short type) {
+	switch (type) {
+		case nsIDataType.VTYPE_EMPTY:
+		case nsIDataType.VTYPE_VOID:
+			return null;
+		case nsIDataType.VTYPE_EMPTY_ARRAY:
+			return new Object[0];
+		case nsIDataType.VTYPE_BOOL:
+			int[] boolResult = new int[1]; /*PRInt32*/
+			int rc = variant.GetAsBool (boolResult);
+			if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+			return new Boolean (boolResult[0] != 0);
+		case nsIDataType.VTYPE_INT32:
+			int[] intResult = new int[1]; /*PRInt32*/
+			rc = variant.GetAsInt32 (intResult);
+			if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+			return new Double (intResult[0]);
+		case nsIDataType.VTYPE_DOUBLE:
+			int /*long*/ doubleReturn = C.malloc (8);
+			rc = variant.GetAsDouble (doubleReturn);
+			if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+			double[] doubleResult = new double[1];
+			C.memmove (doubleResult, doubleReturn, 8);
+			C.free (doubleReturn);
+			return new Double (doubleResult[0]);
+		case nsIDataType.VTYPE_WSTRING_SIZE_IS:
+			int[] size = new int[1]; /* PRInt32 */
+			int /*long*/[] wString = new int /*long*/[1];
+			rc = variant.GetAsWStringWithSize (size, wString);
+			if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+			char[] chars = new char[size[0]];
+			C.memmove (chars, wString[0], size[0] * 2);
+			return new String (chars);
+		case nsIDataType.VTYPE_ARRAY:
+			Object[] arrayReturn = new Object[0];
+			int /*long*/ iid = C.malloc (nsID.sizeof);
+			C.memset (iid, 0, nsID.sizeof);
+			int[] count = new int[1]; /* PRUint32 */
+			short[] currentType = new short[1];
+			int /*long*/[] ptr = new int /*long*/[1];
+			rc = variant.GetAsArray (currentType, iid, count, ptr);
+			if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+			if (ptr[0] == 0) Mozilla.error (XPCOM.NS_ERROR_NULL_POINTER);
+			nsID id = new nsID ();
+			XPCOM.memmove (id, iid, nsID.sizeof);
+			C.free (iid);
+
+			int /*long*/[] result = new int /*long*/[1];
+			rc = XPCOM.NS_GetServiceManager (result);
+			if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+			if (result[0] == 0) Mozilla.error (XPCOM.NS_NOINTERFACE);
+
+			nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
+			result[0] = 0;
+			byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_MEMORY_CONTRACTID, true);
+			rc = serviceManager.GetServiceByContractID (aContractID, nsIMemory.NS_IMEMORY_IID, result);
+			if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+			if (result[0] == 0) Mozilla.error (XPCOM.NS_NOINTERFACE);		
+			serviceManager.Release ();
+
+			nsIMemory memory = new nsIMemory (result[0]);
+			result[0] = 0;
+
+			if (id.Equals (nsIVariant.NS_IVARIANT_IID)) {
+				arrayReturn = new Object[count[0]];
+				for (int i = 0; i < count[0]; i++) {
+					int /*long*/[] arrayPtr = new int /*long*/[1];
+					C.memmove (arrayPtr, ptr[0] + i * C.PTR_SIZEOF, C.PTR_SIZEOF);
+					nsISupports supports = new nsISupports (arrayPtr[0]);
+					rc = supports.QueryInterface (nsIVariant.NS_IVARIANT_IID, result);
+					if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+					if (result[0] == 0) Mozilla.error (XPCOM.NS_NOINTERFACE);
+
+					nsIVariant currentVariant = new nsIVariant (result[0]);
+					result[0] = 0;
+					currentType[0] = 0;
+					rc = currentVariant.GetDataType (currentType);
+					if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+					try {
+						arrayReturn[i] = convertToJava (currentVariant, currentType[0]);
+						currentVariant.Release ();
+					} catch (IllegalArgumentException e) {
+						/* invalid argument value type */
+						currentVariant.Release ();
+						memory.Free (ptr[0]);
+						memory.Release ();
+						throw e;
+					}
+				}
+			} else {
+				switch (currentType[0]) {
+					case nsIDataType.VTYPE_DOUBLE:
+						arrayReturn = new Object[count[0]];
+						for (int i = 0; i < count[0]; i++) {
+							double[] doubleValue = new double[1];
+							C.memmove (doubleValue, ptr[0] + i * 8, 8);
+							arrayReturn[i] = new Double (doubleValue[0]);
+						}
+						break;
+					case nsIDataType.VTYPE_BOOL:
+						arrayReturn = new Object[count[0]];
+						for (int i = 0; i < count[0]; i++) {
+							int[] boolValue = new int[1]; /* PRUInt32 */
+							C.memmove (boolValue, ptr[0] + i * 4, 4);
+							arrayReturn[i] = new Boolean (boolValue[0] != 0);
+						}
+						break;
+					case nsIDataType.VTYPE_INT32:
+						arrayReturn = new Object[count[0]];
+						for (int i = 0; i < count[0]; i++) {
+							int[] intValue = new int[1]; /* PRInt32 */
+							C.memmove (intValue, ptr[0] + i * 4, 4);
+							arrayReturn[i] = new Double (intValue[0]);
+						}
+						break;
+					case nsIDataType.VTYPE_WCHAR_STR:
+						arrayReturn = new Object[count[0]];
+						for (int i = 0; i < count[0]; i++) {
+							int /*long*/ currentPtr = ptr[0] + i * C.PTR_SIZEOF;
+							int /*long*/[] stringPtr = new int /*long*/[1]; 
+							C.memmove (stringPtr, currentPtr, C.PTR_SIZEOF);
+							int length = XPCOM.strlen_PRUnichar (stringPtr[0]);
+							char[] dest = new char[length];
+							XPCOM.memmove (dest, stringPtr[0], length * 2);
+							arrayReturn[i] = new String (dest);
+						}
+						break;
+					default:
+						memory.Free (ptr[0]);
+						memory.Release ();
+						SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+				}
+			}
+			memory.Free (ptr[0]);
+			memory.Release ();
+			return arrayReturn;
+	}
+	SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	return null;
+}
+
+nsIVariant convertToJS (Object value, nsIComponentManager componentManager) {
+	int /*long*/[] result = new int /*long*/[1];
+	byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_VARIANT_CONTRACTID, true);
+	int rc = componentManager.CreateInstanceByContractID (aContractID, 0, nsIWritableVariant.NS_IWRITABLEVARIANT_IID, result);
+	nsIWritableVariant variant = new nsIWritableVariant (result[0]);
+	result[0] = 0;
+
+	if (value == null) {
+		rc = variant.SetAsVoid ();
+		if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+		return variant;
+	}
+	if (value instanceof String) {
+		String stringValue = (String)value;
+		int length = stringValue.length ();
+		char[] chars = new char[length];
+		stringValue.getChars (0, length, chars, 0);
+		rc = variant.SetAsWStringWithSize (length, chars);
+		if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+		return variant;
+	}
+	if (value instanceof Boolean) {
+		Boolean booleanValue = (Boolean)value;
+		rc = variant.SetAsBool (booleanValue.booleanValue () ? 1 : 0);
+		if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+		return variant;
+	}
+	if (value instanceof Number) {
+		Number numberValue = (Number)value;
+		rc = variant.SetAsDouble (numberValue.doubleValue ());
+		if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+		return variant;
+	}
+	if (value instanceof Object[]) {
+		Object[] arrayValue = (Object[])value;
+		int length = arrayValue.length;
+		if (length > 0) {
+			int /*long*/ arrayPtr = C.malloc (C.PTR_SIZEOF * length);
+			for (int i = 0; i < length; i++) {
+				Object currentObject = arrayValue[i];
+				try {
+					nsIVariant currentVariant = convertToJS (currentObject, componentManager);
+					C.memmove (arrayPtr + C.PTR_SIZEOF * i, new int /*long*/[] {currentVariant.getAddress ()}, C.PTR_SIZEOF);
+				} catch (SWTException e) {
+					/* invalid return value type */
+					C.free (arrayPtr);
+					variant.Release ();
+					/* release the variants that had previously been added to the array */
+					for (int j = 0; j < i; j++) {
+						int /*long*/[] ptr = new int /*long*/[1];
+						C.memmove (ptr, arrayPtr + C.PTR_SIZEOF * j, C.PTR_SIZEOF);
+						new nsISupports (ptr[0]).Release ();
+					}
+					throw e;
+				}
+			}
+			int /*long*/ idPtr = C.malloc (nsID.sizeof);
+			XPCOM.memmove (idPtr, nsIVariant.NS_IVARIANT_IID, nsID.sizeof);
+			rc = variant.SetAsArray (nsIDataType.VTYPE_INTERFACE_IS, idPtr, length, arrayPtr);
+			C.free (idPtr);
+			C.free (arrayPtr);
+			if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+			return variant;
+		}
+	}
+
+	variant.Release ();
+	SWT.error (SWT.ERROR_INVALID_RETURN_VALUE);
+	return null;
+}
+
+int callJava (int functionId, int /*long*/ args, int /*long*/ returnPtr) {
+	Object key = new Integer (functionId);
+	BrowserFunction function = (BrowserFunction)Mozilla.AllFunctions.get (key);
+	Object returnValue = null;
+
+	if (function != null) {
+		short[] type = new short[1]; /* PRUint16 */
+		nsIVariant variant = new nsIVariant (args);
+		int rc = variant.GetDataType (type);
+		if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+		try {
+			Object temp = (Object[])convertToJava (variant, type[0]);
+			if (temp instanceof Object[]) {
+				Object[] arguments = (Object[])temp;
+				try {
+					returnValue = function.function (arguments);
+				} catch (Exception e) {
+					/* exception during function invocation */
+					returnValue = WebBrowser.CreateErrorString (e.getLocalizedMessage ());
+				}
+			}
+		} catch (IllegalArgumentException e) {
+			/* invalid argument value type */
+			if (function.isEvaluate) {
+				/* notify the evaluate function so that a java exception can be thrown */
+				function.function (new String[] {WebBrowser.CreateErrorString (new SWTException (SWT.ERROR_INVALID_RETURN_VALUE).getLocalizedMessage ())});
+			}
+			returnValue = WebBrowser.CreateErrorString (e.getLocalizedMessage ());
+		}
+	}
+
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = XPCOM.NS_GetComponentManager (result);
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	if (result[0] == 0) Mozilla.error (XPCOM.NS_NOINTERFACE);
+	nsIComponentManager componentManager = new nsIComponentManager (result[0]);
+	result[0] = 0;
+	nsIVariant variant;
+	try {
+		variant = convertToJS (returnValue, componentManager);
+	} catch (SWTException e) {
+		/* invalid return value type */
+		variant = convertToJS (WebBrowser.CreateErrorString (e.getLocalizedMessage ()), componentManager);
+	}
+	componentManager.Release ();
+	C.memmove (returnPtr, new int /*long*/[] {variant.getAddress ()}, C.PTR_SIZEOF);
+
+	return XPCOM.NS_OK;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/ExternalFactory.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/ExternalFactory.java
new file mode 100644
index 0000000..84462ec
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/ExternalFactory.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 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.browser;
+
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.mozilla.*;
+
+class ExternalFactory {
+	XPCOMObject supports;
+	XPCOMObject factory;
+	int refCount = 0;
+
+ExternalFactory () {
+	createCOMInterfaces ();
+}
+
+int AddRef () {
+	refCount++;
+	return refCount;
+}
+
+void createCOMInterfaces () {
+	/* Create each of the interfaces that this object implements */
+	supports = new XPCOMObject (new int[] {2, 0, 0}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+	};
+	
+	factory = new XPCOMObject (new int[] {2, 0, 0, 3, 1}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return CreateInstance (args[0], args[1], args[2]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return LockFactory ((int)/*64*/args[0]);}
+	};
+}
+
+void disposeCOMInterfaces () {
+	if (supports != null) {
+		supports.dispose ();
+		supports = null;
+	}	
+	if (factory != null) {
+		factory.dispose ();
+		factory = null;	
+	}
+}
+
+int /*long*/ getAddress () {
+	return factory.getAddress ();
+}
+
+int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return XPCOM.NS_ERROR_NO_INTERFACE;
+	nsID guid = new nsID ();
+	XPCOM.memmove (guid, riid, nsID.sizeof);
+	
+	if (guid.Equals (nsISupports.NS_ISUPPORTS_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {supports.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIFactory.NS_IFACTORY_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {factory.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+
+	XPCOM.memmove (ppvObject, new int /*long*/[] {0}, C.PTR_SIZEOF);
+	return XPCOM.NS_ERROR_NO_INTERFACE;
+}
+
+int Release () {
+	refCount--;
+	if (refCount == 0) disposeCOMInterfaces ();
+	return refCount;
+}
+
+/* nsIFactory */
+
+int CreateInstance (int /*long*/ aOuter, int /*long*/ iid, int /*long*/ result) {
+	External external = new External ();
+	external.AddRef ();
+	XPCOM.memmove (result, new int /*long*/[] {external.getAddress ()}, C.PTR_SIZEOF);
+	return XPCOM.NS_OK;
+}
+
+int LockFactory (int lock) {
+	return XPCOM.NS_OK;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/FilePicker.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/FilePicker.java
new file mode 100644
index 0000000..cb7b397
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/FilePicker.java
@@ -0,0 +1,306 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.browser;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.mozilla.*;
+import org.eclipse.swt.widgets.*;
+
+class FilePicker {
+	XPCOMObject supports;
+	XPCOMObject filePicker;
+
+	int refCount = 0;
+	short mode;
+	int /*long*/ parentHandle;
+	String[] files, masks;
+	String defaultFilename, directory, title;
+
+	static final String SEPARATOR = System.getProperty ("file.separator"); //$NON-NLS-1$
+
+FilePicker () {
+	createCOMInterfaces ();
+}
+
+int AddRef () {
+	refCount++;
+	return refCount;
+}
+
+void createCOMInterfaces () {
+	/* Create each of the interfaces that this object implements */
+	supports = new XPCOMObject (new int[] {2, 0, 0}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+	};
+
+	filePicker = new XPCOMObject (new int[] {2, 0, 0, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return Init (args[0], args[1], (short)args[2]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return AppendFilters ((int)/*64*/args[0]);}
+		public int /*long*/ method5 (int /*long*/[] args) {return AppendFilter (args[0], args[1]);}
+		public int /*long*/ method6 (int /*long*/[] args) {return GetDefaultString (args[0]);}
+		public int /*long*/ method7 (int /*long*/[] args) {return SetDefaultString (args[0]);}
+		public int /*long*/ method8 (int /*long*/[] args) {return GetDefaultExtension (args[0]);}
+		public int /*long*/ method9 (int /*long*/[] args) {return SetDefaultExtension (args[0]);}
+		public int /*long*/ method10 (int /*long*/[] args) {return GetFilterIndex (args[0]);}
+		public int /*long*/ method11 (int /*long*/[] args) {return SetFilterIndex ((int)/*64*/args[0]);}
+		public int /*long*/ method12 (int /*long*/[] args) {return GetDisplayDirectory (args[0]);}
+		public int /*long*/ method13 (int /*long*/[] args) {return SetDisplayDirectory (args[0]);}
+		public int /*long*/ method14 (int /*long*/[] args) {return GetFile (args[0]);}
+		public int /*long*/ method15 (int /*long*/[] args) {return GetFileURL (args[0]);}
+		public int /*long*/ method16 (int /*long*/[] args) {return GetFiles (args[0]);}
+		public int /*long*/ method17 (int /*long*/[] args) {return Show (args[0]);}
+	};
+}
+
+void disposeCOMInterfaces () {
+	if (supports != null) {
+		supports.dispose ();
+		supports = null;
+	}	
+	if (filePicker != null) {
+		filePicker.dispose ();
+		filePicker = null;	
+	}
+}
+
+int /*long*/ getAddress () {
+	return filePicker.getAddress ();
+}
+
+int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return XPCOM.NS_ERROR_NO_INTERFACE;
+	nsID guid = new nsID ();
+	XPCOM.memmove (guid, riid, nsID.sizeof);
+	
+	if (guid.Equals (nsISupports.NS_ISUPPORTS_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {supports.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIFilePicker.NS_IFILEPICKER_IID)) {
+		XPCOM.memmove(ppvObject, new int /*long*/[] {filePicker.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIFilePicker_1_8.NS_IFILEPICKER_IID)) {
+		XPCOM.memmove(ppvObject, new int /*long*/[] {filePicker.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+
+	XPCOM.memmove (ppvObject, new int /*long*/[] {0}, C.PTR_SIZEOF);
+	return XPCOM.NS_ERROR_NO_INTERFACE;
+}
+
+int Release () {
+	refCount--;
+	if (refCount == 0) disposeCOMInterfaces ();
+	return refCount;
+}
+
+Browser getBrowser (int /*long*/ aDOMWindow) {
+	if (aDOMWindow == 0) return null;
+	nsIDOMWindow window = new nsIDOMWindow (aDOMWindow);
+	return Mozilla.findBrowser (window);
+}
+
+/*
+ * As of Mozilla 1.8 some of nsIFilePicker's string arguments changed type.  This method
+ * answers a java string based on the type of string that is appropriate for the Mozilla
+ * version being used.
+ */
+String parseAString (int /*long*/ string) {
+	return null;
+}
+
+/* nsIFilePicker */
+
+int Init (int /*long*/ parent, int /*long*/ title, short mode) {
+	parentHandle = parent;
+	this.mode = mode;
+	this.title = parseAString (title);
+	return XPCOM.NS_OK;
+}
+
+int Show (int /*long*/ _retval) {
+	if (mode == nsIFilePicker.modeGetFolder) {
+		/* picking a directory */
+		int result = showDirectoryPicker ();
+		XPCOM.memmove (_retval, new short[] {(short)result}, 2); /* PRInt16 */
+		return XPCOM.NS_OK;
+	}
+
+	/* picking a file */
+	int style = mode == nsIFilePicker.modeSave ? SWT.SAVE : SWT.OPEN;
+	if (mode == nsIFilePicker.modeOpenMultiple) style |= SWT.MULTI;
+	Browser browser = getBrowser (parentHandle);
+	Shell parent = null;
+	if (browser != null) {
+		parent = browser.getShell ();
+	} else {
+		parent = new Shell ();
+	}
+	FileDialog dialog = new FileDialog (parent, style);
+	if (title != null) dialog.setText (title);
+	if (directory != null) dialog.setFilterPath (directory);
+	if (masks != null) dialog.setFilterExtensions (masks);
+	if (defaultFilename != null) dialog.setFileName (defaultFilename);
+	String filename = dialog.open ();
+	files = dialog.getFileNames ();
+	directory = dialog.getFilterPath ();
+	title = defaultFilename = null;
+	masks = null;
+	int result = filename == null ? nsIFilePicker.returnCancel : nsIFilePicker.returnOK; 
+	XPCOM.memmove (_retval, new short[] {(short)result}, 2); /* PRInt16 */
+	return XPCOM.NS_OK;
+}
+
+int showDirectoryPicker () {
+	Browser browser = getBrowser (parentHandle);
+	Shell parent = null;
+	if (browser != null) {
+		parent = browser.getShell ();
+	} else {
+		parent = new Shell ();
+	}
+	DirectoryDialog dialog = new DirectoryDialog (parent, SWT.NONE);
+	if (title != null) dialog.setText (title);
+	if (directory != null) dialog.setFilterPath (directory);
+	directory = dialog.open ();
+	title = defaultFilename = null;
+	files = masks = null;
+	return directory == null ? nsIFilePicker.returnCancel : nsIFilePicker.returnOK;
+}
+
+int GetFiles (int /*long*/ aFiles) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetFileURL (int /*long*/ aFileURL) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetFile (int /*long*/ aFile) {
+	String filename = "";	//$NON-NLS-1$
+	if (directory != null) filename += directory + SEPARATOR;
+	if (files != null && files.length > 0) filename += files[0];
+	nsEmbedString path = new nsEmbedString (filename);
+	int /*long*/[] file = new int /*long*/[1];
+	int rc = XPCOM.NS_NewLocalFile (path.getAddress (), 1, file);
+	path.dispose ();
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	if (file[0] == 0) Mozilla.error (XPCOM.NS_ERROR_NULL_POINTER);
+	XPCOM.memmove (aFile, file, C.PTR_SIZEOF);
+	return XPCOM.NS_OK;
+}
+
+int SetDisplayDirectory (int /*long*/ aDisplayDirectory) {
+	if (aDisplayDirectory == 0) return XPCOM.NS_OK;
+	nsILocalFile file = new nsILocalFile (aDisplayDirectory);
+	int /*long*/ pathname = XPCOM.nsEmbedCString_new ();
+	file.GetNativePath (pathname);
+	int length = XPCOM.nsEmbedCString_Length (pathname);
+	int /*long*/ buffer = XPCOM.nsEmbedCString_get (pathname);
+	byte[] bytes = new byte[length];
+	XPCOM.memmove (bytes, buffer, length);
+	XPCOM.nsEmbedCString_delete (pathname);
+	char[] chars = MozillaDelegate.mbcsToWcs (null, bytes);
+	directory = new String (chars);
+	return XPCOM.NS_OK;
+}
+
+int GetDisplayDirectory (int /*long*/ aDisplayDirectory) {
+	String directoryName = directory != null ? directory : "";	//$NON-NLS-1$
+	nsEmbedString path = new nsEmbedString (directoryName);
+	int /*long*/[] file = new int /*long*/[1];
+	int rc = XPCOM.NS_NewLocalFile (path.getAddress (), 1, file);
+	path.dispose ();
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	if (file[0] == 0) Mozilla.error (XPCOM.NS_ERROR_NULL_POINTER);
+	XPCOM.memmove (aDisplayDirectory, file, C.PTR_SIZEOF);
+	return XPCOM.NS_OK;
+}
+
+int SetFilterIndex (int aFilterIndex) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetFilterIndex (int /*long*/ aFilterIndex) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int SetDefaultExtension (int /*long*/ aDefaultExtension) {
+	/* note that the type of argument 1 changed as of Mozilla 1.8 */
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetDefaultExtension (int /*long*/ aDefaultExtension) {
+	/* note that the type of argument 1 changed as of Mozilla 1.8 */
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int SetDefaultString (int /*long*/ aDefaultString) {
+	defaultFilename = parseAString (aDefaultString);
+	return XPCOM.NS_OK;
+}
+
+int GetDefaultString (int /*long*/ aDefaultString) {
+	/* note that the type of argument 1 changed as of Mozilla 1.8 */
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int AppendFilter (int /*long*/ title, int /*long*/ filter) {
+	/* note that the type of arguments 1 and 2 changed as of Mozilla 1.8 */
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int AppendFilters (int filterMask) {
+	String[] addFilters = null;
+	switch (filterMask) {
+		case nsIFilePicker.filterAll:
+		case nsIFilePicker.filterApps:
+			masks = null;			/* this is equivalent to no filter */
+			break;
+		case nsIFilePicker.filterHTML:
+			addFilters = new String[] {"*.htm;*.html"}; //$NON-NLS-1$
+			break;
+		case nsIFilePicker.filterImages:
+			addFilters = new String[] {"*.gif;*.jpeg;*.jpg;*.png"};	//$NON-NLS-1$
+			break;
+		case nsIFilePicker.filterText:
+			addFilters = new String[] {"*.txt"};	//$NON-NLS-1$
+			break;
+		case nsIFilePicker.filterXML:
+			addFilters = new String[] {"*.xml"};	//$NON-NLS-1$
+			break;
+		case nsIFilePicker.filterXUL:
+			addFilters = new String[] {"*.xul"};	//$NON-NLS-1$
+			break;
+	}
+	if (masks == null) {
+		masks = addFilters;
+	} else {
+		if (addFilters != null) {
+			String[] newFilters = new String[masks.length + addFilters.length];
+			System.arraycopy (masks, 0, newFilters, 0, masks.length);
+			System.arraycopy (addFilters, 0, newFilters, masks.length, addFilters.length);
+			masks = newFilters;
+		}
+	}
+	return XPCOM.NS_OK;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/FilePickerFactory.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/FilePickerFactory.java
new file mode 100644
index 0000000..44dbff1
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/FilePickerFactory.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2007 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.browser;
+
+import org.eclipse.swt.internal.C;
+import org.eclipse.swt.internal.mozilla.*;
+
+class FilePickerFactory {
+	XPCOMObject supports;
+	XPCOMObject factory;
+	int refCount = 0;
+
+FilePickerFactory () {
+	createCOMInterfaces ();
+}
+
+int AddRef () {
+	refCount++;
+	return refCount;
+}
+
+void createCOMInterfaces () {
+	/* Create each of the interfaces that this object implements */
+	supports = new XPCOMObject (new int[] {2, 0, 0}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+	};
+	
+	factory = new XPCOMObject (new int[] {2, 0, 0, 3, 1}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return CreateInstance (args[0], args[1], args[2]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return LockFactory ((int)/*64*/args[0]);}
+	};
+}
+
+void disposeCOMInterfaces () {
+	if (supports != null) {
+		supports.dispose ();
+		supports = null;
+	}	
+	if (factory != null) {
+		factory.dispose ();
+		factory = null;	
+	}
+}
+
+int /*long*/ getAddress () {
+	return factory.getAddress ();
+}
+
+int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return XPCOM.NS_ERROR_NO_INTERFACE;
+	nsID guid = new nsID ();
+	XPCOM.memmove (guid, riid, nsID.sizeof);
+	
+	if (guid.Equals (nsISupports.NS_ISUPPORTS_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {supports.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIFactory.NS_IFACTORY_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {factory.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	
+	XPCOM.memmove (ppvObject, new int /*long*/[] {0}, C.PTR_SIZEOF);
+	return XPCOM.NS_ERROR_NO_INTERFACE;
+}
+
+int Release () {
+	refCount--;
+	if (refCount == 0) disposeCOMInterfaces ();
+	return refCount;
+}
+	
+/* nsIFactory */
+
+int CreateInstance (int /*long*/ aOuter, int /*long*/ iid, int /*long*/ result) {
+	FilePicker picker = new FilePicker ();
+	picker.AddRef ();
+	XPCOM.memmove (result, new int /*long*/[] {picker.getAddress ()}, C.PTR_SIZEOF);
+	return XPCOM.NS_OK;
+}
+
+int LockFactory (int lock) {
+	return XPCOM.NS_OK;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/FilePickerFactory_1_8.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/FilePickerFactory_1_8.java
new file mode 100644
index 0000000..b47095b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/FilePickerFactory_1_8.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2007 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.browser;
+
+import org.eclipse.swt.internal.C;
+import org.eclipse.swt.internal.mozilla.*;
+
+class FilePickerFactory_1_8 extends FilePickerFactory {
+
+void createCOMInterfaces () {
+	/* Create each of the interfaces that this object implements */
+	supports = new XPCOMObject (new int[] {2, 0, 0}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+	};
+	
+	factory = new XPCOMObject (new int[] {2, 0, 0, 3, 1}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return CreateInstance (args[0], args[1], args[2]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return LockFactory ((int)/*64*/args[0]);}
+	};
+}
+
+/* nsIFactory */
+
+int CreateInstance (int /*long*/ aOuter, int /*long*/ iid, int /*long*/ result) {
+	FilePicker_1_8 picker = new FilePicker_1_8 ();
+	picker.AddRef ();
+	XPCOM.memmove (result, new int /*long*/[] {picker.getAddress ()}, C.PTR_SIZEOF);
+	return XPCOM.NS_OK;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/FilePicker_1_8.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/FilePicker_1_8.java
new file mode 100644
index 0000000..a73840f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/FilePicker_1_8.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2007 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.browser;
+
+import org.eclipse.swt.internal.mozilla.*;
+
+class FilePicker_1_8 extends FilePicker {
+
+void createCOMInterfaces () {
+	/* Create each of the interfaces that this object implements */
+	supports = new XPCOMObject (new int[] {2, 0, 0}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+	};
+
+	filePicker = new XPCOMObject (new int[] {2, 0, 0, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return Init (args[0], args[1], (short)args[2]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return AppendFilters ((int)/*64*/args[0]);}
+		public int /*long*/ method5 (int /*long*/[] args) {return AppendFilter (args[0], args[1]);}
+		public int /*long*/ method6 (int /*long*/[] args) {return GetDefaultString (args[0]);}
+		public int /*long*/ method7 (int /*long*/[] args) {return SetDefaultString (args[0]);}
+		public int /*long*/ method8 (int /*long*/[] args) {return GetDefaultExtension (args[0]);}
+		public int /*long*/ method9 (int /*long*/[] args) {return SetDefaultExtension (args[0]);}
+		public int /*long*/ method10 (int /*long*/[] args) {return GetFilterIndex (args[0]);}
+		public int /*long*/ method11 (int /*long*/[] args) {return SetFilterIndex ((int)/*64*/args[0]);}
+		public int /*long*/ method12 (int /*long*/[] args) {return GetDisplayDirectory (args[0]);}
+		public int /*long*/ method13 (int /*long*/[] args) {return SetDisplayDirectory (args[0]);}
+		public int /*long*/ method14 (int /*long*/[] args) {return GetFile (args[0]);}
+		public int /*long*/ method15 (int /*long*/[] args) {return GetFileURL (args[0]);}
+		public int /*long*/ method16 (int /*long*/[] args) {return GetFiles (args[0]);}
+		public int /*long*/ method17 (int /*long*/[] args) {return Show (args[0]);}
+	};
+}
+
+/*
+ * As of Mozilla 1.8 some of nsIFilePicker's string arguments changed type.  This method
+ * answers a java string based on the type of string that is appropriate for the Mozilla
+ * version being used.
+ */
+String parseAString (int /*long*/ string) {
+	if (string == 0) return null;
+	int length = XPCOM.nsEmbedString_Length (string);
+	int /*long*/ buffer = XPCOM.nsEmbedString_get (string);
+	char[] chars = new char[length];
+	XPCOM.memmove (chars, buffer, length * 2);
+	return new String (chars);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/HelperAppLauncherDialog.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/HelperAppLauncherDialog.java
new file mode 100644
index 0000000..706ec08
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/HelperAppLauncherDialog.java
@@ -0,0 +1,208 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.browser;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.C;
+import org.eclipse.swt.internal.mozilla.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class implements the nsIHelperAppLauncherDialog interface for mozilla
+ * versions 1.4 - 1.8.x.  For mozilla versions >= 1.9 this interface is
+ * implemented by class HelperAppLauncherDialog_1_9.  HelperAppLauncherDialogFactory
+ * determines at runtime which of these classes to instantiate. 
+ */
+class HelperAppLauncherDialog {
+	XPCOMObject supports;
+	XPCOMObject helperAppLauncherDialog;
+	int refCount = 0;
+
+HelperAppLauncherDialog () {
+	createCOMInterfaces ();
+}
+
+int AddRef () {
+	refCount++;
+	return refCount;
+}
+
+void createCOMInterfaces () {
+	/* Create each of the interfaces that this object implements */
+	supports = new XPCOMObject (new int[] {2, 0, 0}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+	};
+	
+	helperAppLauncherDialog = new XPCOMObject (new int[] {2, 0, 0, 3, 5}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return Show (args[0], args[1], (int)/*64*/args[2]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return PromptForSaveToFile (args[0], args[1], args[2], args[3], args[4]);}
+	};		
+}
+
+void disposeCOMInterfaces () {
+	if (supports != null) {
+		supports.dispose ();
+		supports = null;
+	}	
+	if (helperAppLauncherDialog != null) {
+		helperAppLauncherDialog.dispose ();
+		helperAppLauncherDialog = null;	
+	}
+}
+
+int /*long*/ getAddress () {
+	return helperAppLauncherDialog.getAddress ();
+}
+
+int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return XPCOM.NS_ERROR_NO_INTERFACE;
+	nsID guid = new nsID ();
+	XPCOM.memmove (guid, riid, nsID.sizeof);
+	
+	if (guid.Equals (nsISupports.NS_ISUPPORTS_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {supports.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIHelperAppLauncherDialog.NS_IHELPERAPPLAUNCHERDIALOG_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {helperAppLauncherDialog.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	
+	XPCOM.memmove (ppvObject, new int /*long*/[] {0}, C.PTR_SIZEOF);
+	return XPCOM.NS_ERROR_NO_INTERFACE;
+}
+        	
+int Release () {
+	refCount--;
+	/*
+	* Note.  This instance lives as long as the download it is binded to.
+	* Its reference count is expected to go down to 0 when the download
+	* has completed or when it has been cancelled. E.g. when the user
+	* cancels the File Dialog, cancels or closes the Download Dialog
+	* and when the Download Dialog goes away after the download is completed.
+	*/
+	if (refCount == 0) disposeCOMInterfaces ();
+	return refCount;
+}
+
+/* nsIHelperAppLauncherDialog */
+
+int Show (int /*long*/ aLauncher, int /*long*/ aContext, int aReason) {
+	/*
+	 * The interface for nsIHelperAppLauncher changed as of mozilla 1.8.  Query the received
+	 * nsIHelperAppLauncher for the new interface, and if it is not found then fall back to
+	 * the old interface. 
+	 */
+	nsISupports supports = new nsISupports (aLauncher);
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = supports.QueryInterface (nsIHelperAppLauncher_1_8.NS_IHELPERAPPLAUNCHER_IID, result);
+	if (rc == XPCOM.NS_OK) {	/* >= 1.8 */
+		nsIHelperAppLauncher_1_8 helperAppLauncher = new nsIHelperAppLauncher_1_8 (aLauncher);
+		rc = helperAppLauncher.SaveToDisk (0, 0);
+		helperAppLauncher.Release ();
+		return rc;
+	}
+	nsIHelperAppLauncher helperAppLauncher = new nsIHelperAppLauncher (aLauncher);	/* < 1.8 */
+	return helperAppLauncher.SaveToDisk (0, 0);
+}
+
+int PromptForSaveToFile (int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3, int /*long*/ arg4) {
+	int /*long*/ aDefaultFile, aSuggestedFileExtension, _retval;
+	boolean hasLauncher = false;
+
+	/*
+	* The interface for nsIHelperAppLauncherDialog changed as of mozilla 1.5 when an
+	* extra argument was added to the PromptForSaveToFile method (this resulted in all
+	* subsequent arguments shifting right).  The workaround is to provide an XPCOMObject 
+	* that fits the newer API, and to use the first argument's type to infer whether
+	* the old or new nsIHelperAppLauncherDialog interface is being used (and by extension
+	* the ordering of the arguments).  In mozilla >= 1.5 the first argument is an
+	* nsIHelperAppLauncher. 
+	*/
+	/*
+	 * The interface for nsIHelperAppLauncher changed as of mozilla 1.8, so the first
+	 * argument must be queried for both the old and new nsIHelperAppLauncher interfaces. 
+	 */
+ 	boolean using_1_8 = false;
+	nsISupports support = new nsISupports (arg0);
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = support.QueryInterface (nsIHelperAppLauncher_1_8.NS_IHELPERAPPLAUNCHER_IID, result);
+	if (rc == XPCOM.NS_OK) {
+		using_1_8 = true;
+		hasLauncher = true;
+		new nsISupports (result[0]).Release ();
+	} else {
+		result[0] = 0;
+		rc = support.QueryInterface (nsIHelperAppLauncher.NS_IHELPERAPPLAUNCHER_IID, result);
+		if (rc == XPCOM.NS_OK) {
+			hasLauncher = true;
+			new nsISupports (result[0]).Release ();
+		}
+	}
+	result[0] = 0;
+
+	if (hasLauncher) {	/* >= 1.5 */
+		aDefaultFile = arg2;
+		aSuggestedFileExtension = arg3;
+		_retval = arg4;
+	} else {			/* 1.4 */
+		aDefaultFile = arg1;
+		aSuggestedFileExtension = arg2;
+		_retval = arg3;
+	}
+
+	int length = XPCOM.strlen_PRUnichar (aDefaultFile);
+	char[] dest = new char[length];
+	XPCOM.memmove (dest, aDefaultFile, length * 2);
+	String defaultFile = new String (dest);
+
+	length = XPCOM.strlen_PRUnichar (aSuggestedFileExtension);
+	dest = new char[length];
+	XPCOM.memmove (dest, aSuggestedFileExtension, length * 2);
+	String suggestedFileExtension = new String (dest);
+
+	Shell shell = new Shell ();
+	FileDialog fileDialog = new FileDialog (shell, SWT.SAVE);
+	fileDialog.setFileName (defaultFile);
+	fileDialog.setFilterExtensions (new String[] {suggestedFileExtension});
+	String name = fileDialog.open ();
+	shell.close ();
+	if (name == null) {
+		if (hasLauncher) {
+			if (using_1_8) {
+				nsIHelperAppLauncher_1_8 launcher = new nsIHelperAppLauncher_1_8 (arg0);
+				rc = launcher.Cancel (XPCOM.NS_BINDING_ABORTED);
+			} else {
+				nsIHelperAppLauncher launcher = new nsIHelperAppLauncher (arg0);
+				rc = launcher.Cancel ();
+			}
+			if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+			return XPCOM.NS_OK;
+		}
+		return XPCOM.NS_ERROR_FAILURE;
+	}
+	nsEmbedString path = new nsEmbedString (name);
+	rc = XPCOM.NS_NewLocalFile (path.getAddress (), 1, result);
+	path.dispose ();
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	if (result[0] == 0) Mozilla.error (XPCOM.NS_ERROR_NULL_POINTER);
+	/* Our own nsIDownload has been registered during the Browser initialization. It will be invoked by Mozilla. */
+	XPCOM.memmove (_retval, result, C.PTR_SIZEOF);	
+	return XPCOM.NS_OK;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/HelperAppLauncherDialogFactory.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/HelperAppLauncherDialogFactory.java
new file mode 100644
index 0000000..21008f0
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/HelperAppLauncherDialogFactory.java
@@ -0,0 +1,106 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 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.browser;
+
+import org.eclipse.swt.internal.C;
+import org.eclipse.swt.internal.mozilla.*;
+
+class HelperAppLauncherDialogFactory {
+	XPCOMObject supports;
+	XPCOMObject factory;
+	int refCount = 0;
+
+HelperAppLauncherDialogFactory () {
+	createCOMInterfaces ();
+}
+
+int AddRef () {
+	refCount++;
+	return refCount;
+}
+
+void createCOMInterfaces () {
+	/* Create each of the interfaces that this object implements */
+	supports = new XPCOMObject (new int[] {2, 0, 0}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+	};
+	
+	factory = new XPCOMObject (new int[] {2, 0, 0, 3, 1}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return CreateInstance (args[0], args[1], args[2]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return LockFactory ((int)/*64*/args[0]);}
+	};
+}
+
+void disposeCOMInterfaces () {
+	if (supports != null) {
+		supports.dispose ();
+		supports = null;
+	}	
+	if (factory != null) {
+		factory.dispose ();
+		factory = null;	
+	}
+}
+
+int /*long*/ getAddress () {
+	return factory.getAddress ();
+}
+
+int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return XPCOM.NS_ERROR_NO_INTERFACE;
+	nsID guid = new nsID ();
+	XPCOM.memmove (guid, riid, nsID.sizeof);
+	
+	if (guid.Equals (nsISupports.NS_ISUPPORTS_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {supports.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIFactory.NS_IFACTORY_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {factory.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	
+	XPCOM.memmove (ppvObject, new int /*long*/[] {0}, C.PTR_SIZEOF);
+	return XPCOM.NS_ERROR_NO_INTERFACE;
+}
+        	
+int Release () {
+	refCount--;
+	if (refCount == 0) disposeCOMInterfaces ();
+	return refCount;
+}
+	
+/* nsIFactory */
+
+int CreateInstance (int /*long*/ aOuter, int /*long*/ iid, int /*long*/ result) {
+	if (Mozilla.IsPre_1_9) {
+		HelperAppLauncherDialog helperAppLauncherDialog = new HelperAppLauncherDialog ();
+		helperAppLauncherDialog.AddRef ();
+		XPCOM.memmove (result, new int /*long*/[] {helperAppLauncherDialog.getAddress ()}, C.PTR_SIZEOF);
+	} else {
+		HelperAppLauncherDialog_1_9 helperAppLauncherDialog = new HelperAppLauncherDialog_1_9 ();
+		helperAppLauncherDialog.AddRef ();
+		XPCOM.memmove (result, new int /*long*/[] {helperAppLauncherDialog.getAddress ()}, C.PTR_SIZEOF);
+	}
+	return XPCOM.NS_OK;
+}
+
+int LockFactory (int lock) {
+	return XPCOM.NS_OK;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/HelperAppLauncherDialog_1_9.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/HelperAppLauncherDialog_1_9.java
new file mode 100644
index 0000000..dd2e0cb
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/HelperAppLauncherDialog_1_9.java
@@ -0,0 +1,143 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.browser;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.C;
+import org.eclipse.swt.internal.mozilla.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class implements the nsIHelperAppLauncherDialog interface for mozilla
+ * versions >= 1.9.  For mozilla versions 1.4 - 1.8.x this interface is
+ * implemented by class HelperAppLauncherDialog.  HelperAppLauncherDialogFactory
+ * determines at runtime which of these classes to instantiate. 
+ */
+class HelperAppLauncherDialog_1_9 {
+	XPCOMObject supports;
+	XPCOMObject helperAppLauncherDialog;
+	int refCount = 0;
+
+HelperAppLauncherDialog_1_9 () {
+	createCOMInterfaces ();
+}
+
+int AddRef () {
+	refCount++;
+	return refCount;
+}
+
+void createCOMInterfaces () {
+	/* Create each of the interfaces that this object implements */
+	supports = new XPCOMObject (new int[] {2, 0, 0}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+	};
+	
+	helperAppLauncherDialog = new XPCOMObject (new int[] {2, 0, 0, 3, 6}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return Show (args[0], args[1], (int)/*64*/args[2]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return PromptForSaveToFile (args[0], args[1], args[2], args[3], (int)/*64*/args[4], args[5]);}
+	};		
+}
+
+void disposeCOMInterfaces () {
+	if (supports != null) {
+		supports.dispose ();
+		supports = null;
+	}	
+	if (helperAppLauncherDialog != null) {
+		helperAppLauncherDialog.dispose ();
+		helperAppLauncherDialog = null;	
+	}
+}
+
+int /*long*/ getAddress () {
+	return helperAppLauncherDialog.getAddress ();
+}
+
+int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return XPCOM.NS_ERROR_NO_INTERFACE;
+	nsID guid = new nsID ();
+	XPCOM.memmove (guid, riid, nsID.sizeof);
+
+	if (guid.Equals (nsISupports.NS_ISUPPORTS_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {supports.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIHelperAppLauncherDialog_1_9.NS_IHELPERAPPLAUNCHERDIALOG_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {helperAppLauncherDialog.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+
+	XPCOM.memmove (ppvObject, new int /*long*/[] {0}, C.PTR_SIZEOF);
+	return XPCOM.NS_ERROR_NO_INTERFACE;
+}
+        	
+int Release () {
+	refCount--;
+	/*
+	* Note.  This instance lives as long as the download it is bound to.
+	* Its reference count is expected to go down to 0 when the download
+	* has completed or when it has been cancelled. E.g. when the user
+	* cancels the File Dialog, cancels or closes the Download Dialog
+	* and when the Download Dialog goes away after the download is completed.
+	*/
+	if (refCount == 0) disposeCOMInterfaces ();
+	return refCount;
+}
+
+/* nsIHelperAppLauncherDialog */
+
+int Show (int /*long*/ aLauncher, int /*long*/ aContext, int aReason) {
+	nsIHelperAppLauncher_1_9 helperAppLauncher = new nsIHelperAppLauncher_1_9 (aLauncher);
+	return helperAppLauncher.SaveToDisk (0, 0);
+}
+
+int PromptForSaveToFile (int /*long*/ aLauncher, int /*long*/ aWindowContext, int /*long*/ aDefaultFileName, int /*long*/ aSuggestedFileExtension, int aForcePrompt, int /*long*/ _retval) {
+	int length = XPCOM.strlen_PRUnichar (aDefaultFileName);
+	char[] dest = new char[length];
+	XPCOM.memmove (dest, aDefaultFileName, length * 2);
+	String defaultFile = new String (dest);
+
+	length = XPCOM.strlen_PRUnichar (aSuggestedFileExtension);
+	dest = new char[length];
+	XPCOM.memmove (dest, aSuggestedFileExtension, length * 2);
+	String suggestedFileExtension = new String (dest);
+
+	Shell shell = new Shell ();
+	FileDialog fileDialog = new FileDialog (shell, SWT.SAVE);
+	fileDialog.setFileName (defaultFile);
+	fileDialog.setFilterExtensions (new String[] {suggestedFileExtension});
+	String name = fileDialog.open ();
+	shell.close ();
+	if (name == null) {
+		nsIHelperAppLauncher_1_9 launcher = new nsIHelperAppLauncher_1_9 (aLauncher);
+		int rc = launcher.Cancel (XPCOM.NS_BINDING_ABORTED);
+		if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+		return XPCOM.NS_ERROR_FAILURE;
+	}
+	nsEmbedString path = new nsEmbedString (name);
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = XPCOM.NS_NewLocalFile (path.getAddress (), 1, result);
+	path.dispose ();
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	if (result[0] == 0) Mozilla.error (XPCOM.NS_ERROR_NULL_POINTER);
+	/* Our own nsIDownload has been registered during the Browser initialization. It will be invoked by Mozilla. */
+	XPCOM.memmove (_retval, result, C.PTR_SIZEOF);	
+	return XPCOM.NS_OK;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/InputStream.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/InputStream.java
new file mode 100644
index 0000000..3440fbb
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/InputStream.java
@@ -0,0 +1,129 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2007 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.browser;
+
+import org.eclipse.swt.internal.C;
+import org.eclipse.swt.internal.mozilla.*;
+
+class InputStream {
+	XPCOMObject inputStream;
+	int refCount = 0;
+
+	byte[] buffer;
+	int index = 0;
+	
+InputStream (byte[] buffer) {
+	this.buffer = buffer;
+	index = 0;
+	createCOMInterfaces ();
+}
+
+int AddRef () {
+	refCount++;
+	return refCount;
+}
+
+void createCOMInterfaces () {
+	/* Create each of the interfaces that this object implements */
+	inputStream = new XPCOMObject (new int[] {2, 0, 0, 0, 1, 3, 4, 1}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return Close ();}
+		public int /*long*/ method4 (int /*long*/[] args) {return Available (args[0]);}
+		public int /*long*/ method5 (int /*long*/[] args) {return Read (args[0], (int)/*64*/args[1], args[2]);}
+		public int /*long*/ method6 (int /*long*/[] args) {return ReadSegments (args[0], args[1], (int)/*64*/args[2], args[3]);}
+		public int /*long*/ method7 (int /*long*/[] args) {return IsNonBlocking (args[0]);}
+	};
+}
+
+void disposeCOMInterfaces () {
+	if (inputStream != null) {
+		inputStream.dispose ();
+		inputStream = null;	
+	}
+}
+
+int /*long*/ getAddress () {
+	return inputStream.getAddress ();
+}
+
+int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return XPCOM.NS_ERROR_NO_INTERFACE;
+	nsID guid = new nsID ();
+	XPCOM.memmove (guid, riid, nsID.sizeof);
+	
+	if (guid.Equals (nsISupports.NS_ISUPPORTS_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {inputStream.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIInputStream.NS_IINPUTSTREAM_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {inputStream.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}	
+	XPCOM.memmove (ppvObject, new int /*long*/[] {0}, C.PTR_SIZEOF);
+	return XPCOM.NS_ERROR_NO_INTERFACE;
+}
+        	
+int Release () {
+	refCount--;
+	if (refCount == 0) disposeCOMInterfaces ();
+	return refCount;
+}
+	
+/* nsIInputStream implementation */
+
+int Close () {
+	buffer = null;
+	index = 0;
+	return XPCOM.NS_OK;
+}
+
+int Available (int /*long*/ _retval) {
+	int available = buffer == null ? 0 : buffer.length - index;
+	XPCOM.memmove (_retval, new int[] {available}, 4);
+	return XPCOM.NS_OK;
+}
+
+int Read(int /*long*/ aBuf, int aCount, int /*long*/ _retval) {
+	int max = Math.min (aCount, buffer == null ? 0 : buffer.length - index);
+	if (max > 0) {
+		byte[] src = new byte[max];
+		System.arraycopy (buffer, index, src, 0, max);
+		XPCOM.memmove (aBuf, src, max);
+		index += max;
+	}
+	XPCOM.memmove(_retval, new int[] {max}, 4);
+	return XPCOM.NS_OK;
+}
+
+int ReadSegments (int /*long*/ aWriter, int /*long*/ aClosure, int aCount, int /*long*/ _retval) {
+	int max = Math.min (aCount, buffer == null ? 0 : buffer.length - index);
+	int cnt = max;
+	while (cnt > 0) {
+		int[] aWriteCount = new int[1];
+		int /*long*/ rc = XPCOM.Call (aWriter, getAddress (), aClosure, buffer, index, cnt, aWriteCount);
+		if (rc != XPCOM.NS_OK) break;
+		index += aWriteCount[0];
+		cnt -= aWriteCount[0];
+	}
+	XPCOM.memmove (_retval, new int[] {max - cnt}, 4);
+	return XPCOM.NS_OK;
+}
+
+int IsNonBlocking (int /*long*/ _retval) {
+	/* blocking */
+	XPCOM.memmove (_retval, new int[] {0}, 4);
+	return XPCOM.NS_OK;
+}		
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Mozilla.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Mozilla.java
new file mode 100644
index 0000000..135177d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Mozilla.java
@@ -0,0 +1,3771 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 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.browser;
+
+import java.io.*;
+import java.lang.reflect.*;
+import java.util.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.mozilla.*;
+import org.eclipse.swt.internal.mozilla.init.*;
+import org.eclipse.swt.layout.*;
+
+class Mozilla extends WebBrowser {
+	int /*long*/ embedHandle;
+	nsIWebBrowser webBrowser;
+	Object webBrowserObject;
+	MozillaDelegate delegate;
+
+	/* Interfaces for this Mozilla embedding notification */
+	XPCOMObject supports;
+	XPCOMObject weakReference;
+	XPCOMObject webProgressListener;
+	XPCOMObject	webBrowserChrome;
+	XPCOMObject webBrowserChromeFocus;
+	XPCOMObject embeddingSiteWindow;
+	XPCOMObject interfaceRequestor;
+	XPCOMObject supportsWeakReference;
+	XPCOMObject contextMenuListener;	
+	XPCOMObject uriContentListener;
+	XPCOMObject tooltipListener;
+	XPCOMObject domEventListener;
+	int chromeFlags = nsIWebBrowserChrome.CHROME_DEFAULT;
+	int refCount, lastKeyCode, lastCharCode, authCount;
+	int /*long*/ request;
+	Point location, size;
+	boolean visible, isChild, ignoreDispose;
+	Shell tip = null;
+	Listener listener;
+	Vector unhookedDOMWindows = new Vector ();
+	String lastNavigateURL;
+	byte[] htmlBytes;
+
+	static nsIAppShell AppShell;
+	static AppFileLocProvider LocationProvider;
+	static WindowCreator2 WindowCreator;
+	static int BrowserCount, NextJSFunctionIndex = 1;
+	static Hashtable AllFunctions = new Hashtable (); 
+	static boolean Initialized, IsPre_1_8, IsPre_1_9, PerformedVersionCheck, XPCOMWasGlued, XPCOMInitWasGlued;
+
+	/* XULRunner detect constants */
+	static final String GRERANGE_LOWER = "1.8.1.2"; //$NON-NLS-1$
+	static final String GRERANGE_LOWER_FALLBACK = "1.8"; //$NON-NLS-1$
+	static final boolean LowerRangeInclusive = true;
+	static final String GRERANGE_UPPER = "1.9.*"; //$NON-NLS-1$
+	static final boolean UpperRangeInclusive = true;
+
+	static final int MAX_PORT = 65535;
+	static final String SEPARATOR_OS = System.getProperty ("file.separator"); //$NON-NLS-1$
+	static final String ABOUT_BLANK = "about:blank"; //$NON-NLS-1$
+	static final String DISPOSE_LISTENER_HOOKED = "org.eclipse.swt.browser.Mozilla.disposeListenerHooked"; //$NON-NLS-1$
+	static final String PREFIX_JAVASCRIPT = "javascript:"; //$NON-NLS-1$
+	static final String PREFERENCE_CHARSET = "intl.charset.default"; //$NON-NLS-1$
+	static final String PREFERENCE_DISABLEOPENDURINGLOAD = "dom.disable_open_during_load"; //$NON-NLS-1$
+	static final String PREFERENCE_DISABLEWINDOWSTATUSCHANGE = "dom.disable_window_status_change"; //$NON-NLS-1$
+	static final String PREFERENCE_LANGUAGES = "intl.accept_languages"; //$NON-NLS-1$
+	static final String PREFERENCE_PROXYHOST_FTP = "network.proxy.ftp"; //$NON-NLS-1$
+	static final String PREFERENCE_PROXYPORT_FTP = "network.proxy.ftp_port"; //$NON-NLS-1$
+	static final String PREFERENCE_PROXYHOST_HTTP = "network.proxy.http"; //$NON-NLS-1$
+	static final String PREFERENCE_PROXYPORT_HTTP = "network.proxy.http_port"; //$NON-NLS-1$
+	static final String PREFERENCE_PROXYHOST_SSL = "network.proxy.ssl"; //$NON-NLS-1$
+	static final String PREFERENCE_PROXYPORT_SSL = "network.proxy.ssl_port"; //$NON-NLS-1$
+	static final String PREFERENCE_PROXYTYPE = "network.proxy.type"; //$NON-NLS-1$
+	static final String PROFILE_AFTER_CHANGE = "profile-after-change"; //$NON-NLS-1$
+	static final String PROFILE_BEFORE_CHANGE = "profile-before-change"; //$NON-NLS-1$
+	static final String PROFILE_DIR = SEPARATOR_OS + "eclipse" + SEPARATOR_OS; //$NON-NLS-1$
+	static final String PROFILE_DO_CHANGE = "profile-do-change"; //$NON-NLS-1$
+	static final String PROPERTY_PROXYPORT = "network.proxy_port"; //$NON-NLS-1$
+	static final String PROPERTY_PROXYHOST = "network.proxy_host"; //$NON-NLS-1$
+	static final String SEPARATOR_LOCALE = "-"; //$NON-NLS-1$
+	static final String SHUTDOWN_PERSIST = "shutdown-persist"; //$NON-NLS-1$
+	static final String STARTUP = "startup"; //$NON-NLS-1$
+	static final String TOKENIZER_LOCALE = ","; //$NON-NLS-1$
+	static final String URI_FROMMEMORY = "file:///"; //$NON-NLS-1$
+	static final String XULRUNNER_PATH = "org.eclipse.swt.browser.XULRunnerPath"; //$NON-NLS-1$
+
+	// TEMPORARY CODE
+	static final String GRE_INITIALIZED = "org.eclipse.swt.browser.XULRunnerInitialized"; //$NON-NLS-1$
+
+	static {
+		MozillaClearSessions = new Runnable () {
+			public void run () {
+				if (!Initialized) return;
+				int /*long*/[] result = new int /*long*/[1];
+				int rc = XPCOM.NS_GetServiceManager (result);
+				if (rc != XPCOM.NS_OK) error (rc);
+				if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+				nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
+				result[0] = 0;
+				byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_COOKIEMANAGER_CONTRACTID, true);
+				rc = serviceManager.GetServiceByContractID (aContractID, nsICookieManager.NS_ICOOKIEMANAGER_IID, result);
+				if (rc != XPCOM.NS_OK) error (rc);
+				if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+				serviceManager.Release ();
+
+				nsICookieManager manager = new nsICookieManager (result[0]);
+				result[0] = 0;
+				rc = manager.GetEnumerator (result);
+				if (rc != XPCOM.NS_OK) error (rc);
+
+				nsISimpleEnumerator enumerator = new nsISimpleEnumerator (result[0]);
+				int[] moreElements = new int[1]; /* PRBool */
+				rc = enumerator.HasMoreElements (moreElements);
+				if (rc != XPCOM.NS_OK) error (rc);
+				while (moreElements[0] != 0) {
+					result[0] = 0;
+					rc = enumerator.GetNext (result);
+					if (rc != XPCOM.NS_OK) error (rc);
+					nsICookie cookie = new nsICookie (result[0]);
+					long[] expires = new long[1];
+					rc = cookie.GetExpires (expires);
+					if (expires[0] == 0) {
+						/* indicates a session cookie */
+						int /*long*/ domain = XPCOM.nsEmbedCString_new ();
+						int /*long*/ name = XPCOM.nsEmbedCString_new ();
+						int /*long*/ path = XPCOM.nsEmbedCString_new ();
+						cookie.GetHost (domain);
+						cookie.GetName (name);
+						cookie.GetPath (path);
+						rc = manager.Remove (domain, name, path, 0);
+						XPCOM.nsEmbedCString_delete (domain);
+						XPCOM.nsEmbedCString_delete (name);
+						XPCOM.nsEmbedCString_delete (path);
+						if (rc != XPCOM.NS_OK) error (rc);
+					}
+					cookie.Release ();
+					rc = enumerator.HasMoreElements (moreElements);
+					if (rc != XPCOM.NS_OK) error (rc);
+				}
+				enumerator.Release ();
+				manager.Release ();
+			}
+		};
+
+		MozillaGetCookie = new Runnable() {
+			public void run() {
+				if (!Initialized) return;
+
+				int /*long*/[] result = new int /*long*/[1];
+				int rc = XPCOM.NS_GetServiceManager (result);
+				if (rc != XPCOM.NS_OK) error (rc);
+				if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+
+				nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
+				result[0] = 0;
+				rc = serviceManager.GetService (XPCOM.NS_IOSERVICE_CID, nsIIOService.NS_IIOSERVICE_IID, result);
+				if (rc != XPCOM.NS_OK) error (rc);
+				if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+
+				nsIIOService ioService = new nsIIOService (result[0]);
+				result[0] = 0;
+				byte[] bytes = MozillaDelegate.wcsToMbcs (null, CookieUrl, false);
+				int /*long*/ aSpec = XPCOM.nsEmbedCString_new (bytes, bytes.length);
+				rc = ioService.NewURI (aSpec, null, 0, result);
+				XPCOM.nsEmbedCString_delete (aSpec);
+				ioService.Release ();
+				if (rc != XPCOM.NS_OK) {
+					serviceManager.Release ();
+					return;
+				}
+				if (result[0] == 0) error (XPCOM.NS_ERROR_NULL_POINTER);
+
+				nsIURI aURI = new nsIURI (result[0]);
+				result[0] = 0;
+				byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_COOKIESERVICE_CONTRACTID, true);
+				rc = serviceManager.GetServiceByContractID (aContractID, nsICookieService.NS_ICOOKIESERVICE_IID, result);
+				int /*long*/ cookieString;
+				if (rc == XPCOM.NS_OK && result[0] != 0) {
+					nsICookieService cookieService = new nsICookieService (result[0]);
+					result[0] = 0;
+					rc = cookieService.GetCookieString (aURI.getAddress(), 0, result);
+					cookieService.Release ();
+					if (rc != XPCOM.NS_OK) error (rc);
+					if (result[0] == 0) {
+						aURI.Release ();
+						serviceManager.Release ();
+						return;
+					}
+					cookieString = result[0];
+				} else {
+					result[0] = 0;
+					rc = serviceManager.GetServiceByContractID (aContractID, nsICookieService_1_9.NS_ICOOKIESERVICE_IID, result);
+					if (rc != XPCOM.NS_OK) error (rc);
+					if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+					nsICookieService_1_9 cookieService = new nsICookieService_1_9 (result[0]);
+					result[0] = 0;
+					rc = cookieService.GetCookieString(aURI.getAddress(), 0, result);
+					cookieService.Release ();
+					if (rc != XPCOM.NS_OK) error (rc);
+					if (result[0] == 0) {
+						aURI.Release ();
+						serviceManager.Release ();
+						return;
+					}
+					cookieString = result[0];
+				}
+				aURI.Release ();
+				serviceManager.Release ();
+				result[0] = 0;
+
+				int length = C.strlen (cookieString);
+				bytes = new byte[length];
+				XPCOM.memmove (bytes, cookieString, length);
+				C.free (cookieString);
+				String allCookies = new String (MozillaDelegate.mbcsToWcs (null, bytes));
+				StringTokenizer tokenizer = new StringTokenizer (allCookies, ";"); //$NON-NLS-1$
+				while (tokenizer.hasMoreTokens ()) {
+					String cookie = tokenizer.nextToken ();
+					int index = cookie.indexOf ('=');
+					if (index != -1) {
+						String name = cookie.substring (0, index).trim ();
+						if (name.equals (CookieName)) {
+							CookieValue = cookie.substring (index + 1).trim ();
+							return;
+						}
+					}
+				}
+			}
+		};
+
+		MozillaSetCookie = new Runnable() {
+			public void run() {
+				if (!Initialized) return;
+
+				int /*long*/[] result = new int /*long*/[1];
+				int rc = XPCOM.NS_GetServiceManager (result);
+				if (rc != XPCOM.NS_OK) error (rc);
+				if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+
+				nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
+				result[0] = 0;
+				rc = serviceManager.GetService (XPCOM.NS_IOSERVICE_CID, nsIIOService.NS_IIOSERVICE_IID, result);
+				if (rc != XPCOM.NS_OK) error (rc);
+				if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+
+				nsIIOService ioService = new nsIIOService (result[0]);
+				result[0] = 0;
+				byte[] bytes = MozillaDelegate.wcsToMbcs (null, CookieUrl, false);
+				int /*long*/ aSpec = XPCOM.nsEmbedCString_new (bytes, bytes.length);
+				rc = ioService.NewURI (aSpec, null, 0, result);
+				XPCOM.nsEmbedCString_delete (aSpec);
+				ioService.Release ();
+				if (rc != XPCOM.NS_OK) {
+					serviceManager.Release ();
+					return;
+				}
+				if (result[0] == 0) error (XPCOM.NS_ERROR_NULL_POINTER);
+
+				nsIURI aURI = new nsIURI(result[0]);
+				result[0] = 0;
+				byte[] aCookie = MozillaDelegate.wcsToMbcs (null, CookieValue, true);
+				byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_COOKIESERVICE_CONTRACTID, true);
+				rc = serviceManager.GetServiceByContractID (aContractID, nsICookieService.NS_ICOOKIESERVICE_IID, result);
+				if (rc == XPCOM.NS_OK && result[0] != 0) {
+					nsICookieService cookieService = new nsICookieService (result[0]);
+					rc = cookieService.SetCookieString (aURI.getAddress(), 0, aCookie, 0);
+					cookieService.Release ();
+				} else {
+					result[0] = 0;
+					rc = serviceManager.GetServiceByContractID (aContractID, nsICookieService_1_9.NS_ICOOKIESERVICE_IID, result);
+					if (rc != XPCOM.NS_OK) error (rc);
+					if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+					nsICookieService_1_9 cookieService = new nsICookieService_1_9 (result[0]);
+					rc = cookieService.SetCookieString(aURI.getAddress(), 0, aCookie, 0);
+					cookieService.Release ();
+				}
+				result[0] = 0;
+				aURI.Release ();
+				serviceManager.Release ();
+				CookieResult = rc == 0;
+			}
+		};
+	}
+
+public void create (Composite parent, int style) {
+	delegate = new MozillaDelegate (browser);
+	final Display display = parent.getDisplay ();
+
+	int /*long*/[] result = new int /*long*/[1];
+	if (!Initialized) {
+		boolean initLoaded = false;
+		boolean IsXULRunner = false;
+
+		String greInitialized = System.getProperty (GRE_INITIALIZED); 
+		if ("true".equals (greInitialized)) { //$NON-NLS-1$
+			/* 
+			 * Another browser has already initialized xulrunner in this process,
+			 * so just bind to it instead of trying to initialize a new one.
+			 */
+			Initialized = true;
+		}
+
+		String mozillaPath = System.getProperty (XULRUNNER_PATH);
+		/*
+		* Browser clients that ship XULRunner in a plug-in must have an opportunity 
+		* to set the org.eclipse.swt.browser.XULRunnerPath system property to point
+		* at their XULRunner before the first Mozilla-based Browser is created.  To
+		* facilitate this, reflection is used to reference non-existent class
+		* org.eclipse.swt.browser.XULRunnerInitializer the first time a Mozilla-
+		* based Browser is created.   A client wishing to use this hook can do so
+		* by creating a fragment of org.eclipse.swt that implements this class and
+		* sets the system property in its static initializer.
+		*/
+		if (mozillaPath == null) {
+			try {
+				Class.forName ("org.eclipse.swt.browser.XULRunnerInitializer"); //$NON-NLS-1$
+				mozillaPath = System.getProperty (XULRUNNER_PATH);
+			} catch (ClassNotFoundException e) {
+				/* no fragment is providing this class, which is the typical case */
+			}
+		}
+
+		if (mozillaPath == null) {
+			try {
+				String libName = delegate.getSWTInitLibraryName ();
+				Library.loadLibrary (libName);
+				initLoaded = true;
+			} catch (UnsatisfiedLinkError e) {
+				/* 
+				* If this library failed to load then do not attempt to detect a
+				* xulrunner to use.  The Browser may still be usable if MOZILLA_FIVE_HOME
+				* points at a GRE. 
+				*/
+			}
+		} else {
+			mozillaPath += SEPARATOR_OS + delegate.getLibraryName ();
+			IsXULRunner = true;
+		}
+
+		if (initLoaded) {
+			/* attempt to discover a XULRunner to use as the GRE */
+			GREVersionRange range = new GREVersionRange ();
+			byte[] bytes = MozillaDelegate.wcsToMbcs (null, GRERANGE_LOWER, true);
+			int /*long*/ lower = C.malloc (bytes.length);
+			C.memmove (lower, bytes, bytes.length);
+			range.lower = lower;
+			range.lowerInclusive = LowerRangeInclusive;
+
+			bytes = MozillaDelegate.wcsToMbcs (null, GRERANGE_UPPER, true);
+			int /*long*/ upper = C.malloc (bytes.length);
+			C.memmove (upper, bytes, bytes.length);
+			range.upper = upper;
+			range.upperInclusive = UpperRangeInclusive;
+
+			int length = XPCOMInit.PATH_MAX;
+			int /*long*/ greBuffer = C.malloc (length);
+			int /*long*/ propertiesPtr = C.malloc (2 * C.PTR_SIZEOF);
+			int rc = XPCOMInit.GRE_GetGREPathWithProperties (range, 1, propertiesPtr, 0, greBuffer, length);
+
+			/*
+			 * A XULRunner was not found that supports wrapping of XPCOM handles as JavaXPCOM objects.
+			 * Drop the lower version bound and try to detect an earlier XULRunner installation.
+			 */
+			if (rc != XPCOM.NS_OK) {
+				C.free (lower);
+				bytes = MozillaDelegate.wcsToMbcs (null, GRERANGE_LOWER_FALLBACK, true);
+				lower = C.malloc (bytes.length);
+				C.memmove (lower, bytes, bytes.length);
+				range.lower = lower;
+				rc = XPCOMInit.GRE_GetGREPathWithProperties (range, 1, propertiesPtr, 0, greBuffer, length);
+			}
+
+			C.free (lower);
+			C.free (upper);
+			C.free (propertiesPtr);
+			if (rc == XPCOM.NS_OK) {
+				/* indicates that a XULRunner was found */
+				length = C.strlen (greBuffer);
+				bytes = new byte[length];
+				C.memmove (bytes, greBuffer, length);
+				mozillaPath = new String (MozillaDelegate.mbcsToWcs (null, bytes));
+				IsXULRunner = mozillaPath.length () > 0;
+
+				/*
+				 * Test whether the detected XULRunner can be used as the GRE before loading swt's
+				 * XULRunner library.  If it cannot be used then fall back to attempting to use
+				 * the GRE pointed to by MOZILLA_FIVE_HOME.
+				 * 
+				 * One case where this will fail is attempting to use a 64-bit xulrunner while swt
+				 * is running in 32-bit mode, or vice versa.
+				 */
+				if (IsXULRunner) {
+					byte[] path = MozillaDelegate.wcsToMbcs (null, mozillaPath, true);
+					rc = XPCOMInit.XPCOMGlueStartup (path);
+					if (rc != XPCOM.NS_OK) {
+						mozillaPath = mozillaPath.substring (0, mozillaPath.lastIndexOf (SEPARATOR_OS));
+						if (Device.DEBUG) System.out.println ("cannot use detected XULRunner: " + mozillaPath); //$NON-NLS-1$
+
+						/* attempt to XPCOMGlueStartup the GRE pointed at by MOZILLA_FIVE_HOME */
+						int /*long*/ ptr = C.getenv (MozillaDelegate.wcsToMbcs (null, XPCOM.MOZILLA_FIVE_HOME, true));
+						if (ptr == 0) {
+							IsXULRunner = false;
+						} else {
+							length = C.strlen (ptr);
+							byte[] buffer = new byte[length];
+							C.memmove (buffer, ptr, length);
+							mozillaPath = new String (MozillaDelegate.mbcsToWcs (null, buffer));
+							/*
+							 * Attempting to XPCOMGlueStartup a mozilla-based GRE != xulrunner can
+							 * crash, so don't attempt unless the GRE appears to be xulrunner.
+							 */
+							if (mozillaPath.indexOf("xulrunner") == -1) { //$NON-NLS-1$
+								IsXULRunner = false;	
+							} else {
+								mozillaPath += SEPARATOR_OS + delegate.getLibraryName ();
+								path = MozillaDelegate.wcsToMbcs (null, mozillaPath, true);
+								rc = XPCOMInit.XPCOMGlueStartup (path);
+								if (rc != XPCOM.NS_OK) {
+									IsXULRunner = false;
+									mozillaPath = mozillaPath.substring (0, mozillaPath.lastIndexOf (SEPARATOR_OS));
+									if (Device.DEBUG) System.out.println ("failed to start as XULRunner: " + mozillaPath); //$NON-NLS-1$
+								}
+							}
+						} 
+					}
+					if (IsXULRunner) {
+						XPCOMInitWasGlued = true;
+					}
+				}
+			}
+			C.free (greBuffer);
+		}
+
+		if (IsXULRunner) {
+			if (Device.DEBUG) System.out.println ("XULRunner path: " + mozillaPath); //$NON-NLS-1$
+			try {
+				Library.loadLibrary ("swt-xulrunner"); //$NON-NLS-1$
+			} catch (UnsatisfiedLinkError e) {
+				SWT.error (SWT.ERROR_NO_HANDLES, e);
+			}
+			byte[] path = MozillaDelegate.wcsToMbcs (null, mozillaPath, true);
+			int rc = XPCOM.XPCOMGlueStartup (path);
+			if (rc != XPCOM.NS_OK) {
+				browser.dispose ();
+				error (rc);
+			}
+			XPCOMWasGlued = true;
+
+			/*
+			 * Remove the trailing xpcom lib name from mozillaPath because the
+			 * Mozilla.initialize and NS_InitXPCOM2 invocations require a directory name only.
+			 */ 
+			mozillaPath = mozillaPath.substring (0, mozillaPath.lastIndexOf (SEPARATOR_OS));
+		} else {
+			if ((style & SWT.MOZILLA) != 0) {
+				browser.dispose ();
+				String errorString = (mozillaPath != null && mozillaPath.length () > 0) ?
+					" [Failed to use detected XULRunner: " + mozillaPath + "]" :
+					" [Could not detect registered XULRunner to use]";	//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				SWT.error (SWT.ERROR_NO_HANDLES, null, errorString);
+			}
+
+			/* attempt to use the GRE pointed at by MOZILLA_FIVE_HOME */
+			int /*long*/ ptr = C.getenv (MozillaDelegate.wcsToMbcs (null, XPCOM.MOZILLA_FIVE_HOME, true));
+			if (ptr != 0) {
+				int length = C.strlen (ptr);
+				byte[] buffer = new byte[length];
+				C.memmove (buffer, ptr, length);
+				mozillaPath = new String (MozillaDelegate.mbcsToWcs (null, buffer));
+			} else {
+				browser.dispose ();
+				SWT.error (SWT.ERROR_NO_HANDLES, null, " [Unknown Mozilla path (MOZILLA_FIVE_HOME not set)]"); //$NON-NLS-1$
+			}
+			if (Device.DEBUG) System.out.println ("Mozilla path: " + mozillaPath); //$NON-NLS-1$
+
+			/*
+			* Note.  Embedding a Mozilla GTK1.2 causes a crash.  The workaround
+			* is to check the version of GTK used by Mozilla by looking for
+			* the libwidget_gtk.so library used by Mozilla GTK1.2. Mozilla GTK2
+			* uses the libwidget_gtk2.so library.   
+			*/
+			if (Compatibility.fileExists (mozillaPath, "components/libwidget_gtk.so")) { //$NON-NLS-1$
+				browser.dispose ();
+				SWT.error (SWT.ERROR_NO_HANDLES, null, " [Mozilla GTK2 required (GTK1.2 detected)]"); //$NON-NLS-1$							
+			}
+
+			try {
+				Library.loadLibrary ("swt-mozilla"); //$NON-NLS-1$
+			} catch (UnsatisfiedLinkError e) {
+				try {
+					/* 
+					 * The initial loadLibrary attempt may have failed as a result of the user's
+					 * system not having libstdc++.so.6 installed, so try to load the alternate
+					 * swt mozilla library that depends on libswtc++.so.5 instead.
+					 */
+					Library.loadLibrary ("swt-mozilla-gcc3"); //$NON-NLS-1$
+				} catch (UnsatisfiedLinkError ex) {
+					browser.dispose ();
+					/*
+					 * Print the error from the first failed attempt since at this point it's
+					 * known that the failure was not due to the libstdc++.so.6 dependency.
+					 */
+					SWT.error (SWT.ERROR_NO_HANDLES, e, " [MOZILLA_FIVE_HOME='" + mozillaPath + "']"); //$NON-NLS-1$ //$NON-NLS-2$
+				}
+			}
+		}
+
+		if (!Initialized) {
+			LocationProvider = new AppFileLocProvider (mozillaPath);
+			LocationProvider.AddRef ();
+
+			/* extract external.xpt to temp */
+			String tempPath = System.getProperty ("java.io.tmpdir"); //$NON-NLS-1$
+			File componentsDir = new File (tempPath, "eclipse/mozillaComponents"); //$NON-NLS-1$
+			java.io.InputStream is = Library.class.getResourceAsStream ("/external.xpt"); //$NON-NLS-1$
+			if (is != null) {
+				if (!componentsDir.exists ()) {
+					componentsDir.mkdirs ();
+				}
+				int read;
+				byte [] buffer = new byte [4096];
+				File file = new File (componentsDir, "external.xpt"); //$NON-NLS-1$
+				try {
+					FileOutputStream os = new FileOutputStream (file);
+					while ((read = is.read (buffer)) != -1) {
+						os.write(buffer, 0, read);
+					}
+					os.close ();
+					is.close ();
+				} catch (FileNotFoundException e) {
+				} catch (IOException e) {
+				}
+			}
+			if (componentsDir.exists () && componentsDir.isDirectory ()) {
+				LocationProvider.setComponentsPath (componentsDir.getAbsolutePath ());
+			}
+
+			int /*long*/[] retVal = new int /*long*/[1];
+			nsEmbedString pathString = new nsEmbedString (mozillaPath);
+			int rc = XPCOM.NS_NewLocalFile (pathString.getAddress (), 1, retVal);
+			pathString.dispose ();
+			if (rc != XPCOM.NS_OK) {
+				browser.dispose ();
+				error (rc);
+			}
+			if (retVal[0] == 0) {
+				browser.dispose ();
+				error (XPCOM.NS_ERROR_NULL_POINTER);
+			}
+
+			nsIFile localFile = new nsILocalFile (retVal[0]);
+			if (IsXULRunner) {
+				int size = XPCOM.nsDynamicFunctionLoad_sizeof ();
+				/* alloc memory for two structs, the second is empty to signify the end of the list */
+				int /*long*/ ptr = C.malloc (size * 2);
+				C.memset (ptr, 0, size * 2);
+				nsDynamicFunctionLoad functionLoad = new nsDynamicFunctionLoad ();
+				byte[] bytes = MozillaDelegate.wcsToMbcs (null, "XRE_InitEmbedding", true); //$NON-NLS-1$
+				functionLoad.functionName = C.malloc (bytes.length);
+				C.memmove (functionLoad.functionName, bytes, bytes.length);
+				functionLoad.function = C.malloc (C.PTR_SIZEOF);
+				C.memmove (functionLoad.function, new int /*long*/[] {0} , C.PTR_SIZEOF);
+				XPCOM.memmove (ptr, functionLoad, XPCOM.nsDynamicFunctionLoad_sizeof ());
+				XPCOM.XPCOMGlueLoadXULFunctions (ptr);
+				C.memmove (result, functionLoad.function, C.PTR_SIZEOF);
+				int /*long*/ functionPtr = result[0];
+				result[0] = 0;
+				C.free (functionLoad.function);
+				C.free (functionLoad.functionName);
+				C.free (ptr);
+				rc = XPCOM.Call (functionPtr, localFile.getAddress (), localFile.getAddress (), LocationProvider.getAddress (), 0, 0);
+				if (rc == XPCOM.NS_OK) {
+					System.setProperty (XULRUNNER_PATH, mozillaPath);
+				}
+			} else {
+				rc = XPCOM.NS_InitXPCOM2 (0, localFile.getAddress(), LocationProvider.getAddress ());
+			}
+			localFile.Release ();
+			if (rc != XPCOM.NS_OK) {
+				browser.dispose ();
+				SWT.error (SWT.ERROR_NO_HANDLES, null, " [MOZILLA_FIVE_HOME may not point at an embeddable GRE] [NS_InitEmbedding " + mozillaPath + " error " + rc + "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			}
+			System.setProperty (GRE_INITIALIZED, "true"); //$NON-NLS-1$
+		}
+
+		/* If JavaXPCOM is detected then attempt to initialize it with the XULRunner being used */
+		if (IsXULRunner) {
+			try {
+				Class clazz = Class.forName ("org.mozilla.xpcom.Mozilla"); //$NON-NLS-1$
+				Method method = clazz.getMethod ("getInstance", new Class[0]); //$NON-NLS-1$
+				Object mozilla = method.invoke (null, new Object[0]);
+				method = clazz.getMethod ("getComponentManager", new Class[0]); //$NON-NLS-1$
+				try {
+					method.invoke (mozilla, new Object[0]);
+				} catch (InvocationTargetException e) {
+					/* indicates that JavaXPCOM has not been initialized yet */
+					Class fileClass = Class.forName ("java.io.File"); //$NON-NLS-1$
+					method = clazz.getMethod ("initialize", new Class[] {fileClass}); //$NON-NLS-1$
+					Constructor constructor = fileClass.getDeclaredConstructor (new Class[] {String.class});
+					Object argument = constructor.newInstance (new Object[] {mozillaPath});
+					method.invoke (mozilla, new Object[] {argument});
+				}
+			} catch (ClassNotFoundException e) {
+				/* JavaXPCOM is not on the classpath */
+			} catch (NoSuchMethodException e) {
+				/* the JavaXPCOM on the classpath does not implement initialize() */
+			} catch (IllegalArgumentException e) {
+			} catch (IllegalAccessException e) {
+			} catch (InvocationTargetException e) {
+			} catch (InstantiationException e) {
+			}
+		}
+
+		int rc = XPCOM.NS_GetComponentManager (result);
+		if (rc != XPCOM.NS_OK) {
+			browser.dispose ();
+			error (rc);
+		}
+		if (result[0] == 0) {
+			browser.dispose ();
+			error (XPCOM.NS_NOINTERFACE);
+		}
+		
+		nsIComponentManager componentManager = new nsIComponentManager (result[0]);
+		result[0] = 0;
+		if (delegate.needsSpinup ()) {
+			/* nsIAppShell is discontinued as of xulrunner 1.9, so do not fail if it is not found */
+			rc = componentManager.CreateInstance (XPCOM.NS_APPSHELL_CID, 0, nsIAppShell.NS_IAPPSHELL_IID, result);
+			if (rc != XPCOM.NS_ERROR_NO_INTERFACE) {
+				if (rc != XPCOM.NS_OK) {
+					browser.dispose ();
+					error (rc);
+				}
+				if (result[0] == 0) {
+					browser.dispose ();
+					error (XPCOM.NS_NOINTERFACE);
+				}
+	
+				AppShell = new nsIAppShell (result[0]);
+				rc = AppShell.Create (0, null);
+				if (rc != XPCOM.NS_OK) {
+					browser.dispose ();
+					error (rc);
+				}
+				rc = AppShell.Spinup ();
+				if (rc != XPCOM.NS_OK) {
+					browser.dispose ();
+					error (rc);
+				}
+			}
+			result[0] = 0;
+		}
+
+		WindowCreator = new WindowCreator2 ();
+		WindowCreator.AddRef ();
+		
+		rc = XPCOM.NS_GetServiceManager (result);
+		if (rc != XPCOM.NS_OK) {
+			browser.dispose ();
+			error (rc);
+		}
+		if (result[0] == 0) {
+			browser.dispose ();
+			error (XPCOM.NS_NOINTERFACE);
+		}
+		
+		nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
+		result[0] = 0;		
+		byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_WINDOWWATCHER_CONTRACTID, true);
+		rc = serviceManager.GetServiceByContractID (aContractID, nsIWindowWatcher.NS_IWINDOWWATCHER_IID, result);
+		if (rc != XPCOM.NS_OK) {
+			browser.dispose ();
+			error (rc);
+		}
+		if (result[0] == 0) {
+			browser.dispose ();
+			error (XPCOM.NS_NOINTERFACE);		
+		}
+
+		nsIWindowWatcher windowWatcher = new nsIWindowWatcher (result[0]);
+		result[0] = 0;
+		rc = windowWatcher.SetWindowCreator (WindowCreator.getAddress());
+		if (rc != XPCOM.NS_OK) {
+			browser.dispose ();
+			error (rc);
+		}
+		windowWatcher.Release ();
+
+		/* compute the profile directory and set it on the AppFileLocProvider */
+		if (LocationProvider != null) {
+			byte[] buffer = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_DIRECTORYSERVICE_CONTRACTID, true);
+			rc = serviceManager.GetServiceByContractID (buffer, nsIDirectoryService.NS_IDIRECTORYSERVICE_IID, result);
+			if (rc != XPCOM.NS_OK) {
+				browser.dispose ();
+				error (rc);
+			}
+			if (result[0] == 0) {
+				browser.dispose ();
+				error (XPCOM.NS_NOINTERFACE);
+			}
+
+			nsIDirectoryService directoryService = new nsIDirectoryService (result[0]);
+			result[0] = 0;
+			rc = directoryService.QueryInterface (nsIProperties.NS_IPROPERTIES_IID, result);
+			if (rc != XPCOM.NS_OK) {
+				browser.dispose ();
+				error (rc);
+			}
+			if (result[0] == 0) {
+				browser.dispose ();
+				error (XPCOM.NS_NOINTERFACE);
+			}
+			directoryService.Release ();
+
+			nsIProperties properties = new nsIProperties (result[0]);
+			result[0] = 0;
+			buffer = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_APP_APPLICATION_REGISTRY_DIR, true);
+			rc = properties.Get (buffer, nsIFile.NS_IFILE_IID, result);
+			if (rc != XPCOM.NS_OK) {
+				browser.dispose ();
+				error (rc);
+			}
+			if (result[0] == 0) {
+				browser.dispose ();
+				error (XPCOM.NS_NOINTERFACE);
+			}
+			properties.Release ();
+
+			nsIFile profileDir = new nsIFile (result[0]);
+			result[0] = 0;
+			int /*long*/ path = XPCOM.nsEmbedCString_new ();
+			rc = profileDir.GetNativePath (path);
+			if (rc != XPCOM.NS_OK) {
+				browser.dispose ();
+				error (rc);
+			}
+			int length = XPCOM.nsEmbedCString_Length (path);
+			int /*long*/ ptr = XPCOM.nsEmbedCString_get (path);
+			buffer = new byte [length];
+			XPCOM.memmove (buffer, ptr, length);
+			String profilePath = new String (MozillaDelegate.mbcsToWcs (null, buffer)) + PROFILE_DIR;
+			LocationProvider.setProfilePath (profilePath);
+			LocationProvider.isXULRunner = IsXULRunner;
+			XPCOM.nsEmbedCString_delete (path);
+			profileDir.Release ();
+
+			/* notify observers of a new profile directory being used */
+			buffer = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_OBSERVER_CONTRACTID, true);
+			rc = serviceManager.GetServiceByContractID (buffer, nsIObserverService.NS_IOBSERVERSERVICE_IID, result);
+			if (rc != XPCOM.NS_OK) {
+				browser.dispose ();
+				error (rc);
+			}
+			if (result[0] == 0) {
+				browser.dispose ();
+				error (XPCOM.NS_NOINTERFACE);
+			}
+
+			nsIObserverService observerService = new nsIObserverService (result[0]);
+			result[0] = 0;
+			buffer = MozillaDelegate.wcsToMbcs (null, PROFILE_DO_CHANGE, true);
+			length = STARTUP.length ();
+			char[] chars = new char [length + 1];
+			STARTUP.getChars (0, length, chars, 0);
+			rc = observerService.NotifyObservers (0, buffer, chars);
+			if (rc != XPCOM.NS_OK) {
+				browser.dispose ();
+				error (rc);
+			}
+			buffer = MozillaDelegate.wcsToMbcs (null, PROFILE_AFTER_CHANGE, true);
+			rc = observerService.NotifyObservers (0, buffer, chars);
+			if (rc != XPCOM.NS_OK) {
+				browser.dispose ();
+				error (rc);
+			}
+			observerService.Release ();
+		}
+
+		/*
+		 * As a result of using a common profile the user cannot change their locale
+		 * and charset.  The fix for this is to set mozilla's locale and charset
+		 * preference values according to the user's current locale and charset.
+		 */
+		aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_PREFSERVICE_CONTRACTID, true);
+		rc = serviceManager.GetServiceByContractID (aContractID, nsIPrefService.NS_IPREFSERVICE_IID, result);
+		if (rc != XPCOM.NS_OK) {
+			browser.dispose ();
+			error (rc);
+		}
+		if (result[0] == 0) {
+			browser.dispose ();
+			error (XPCOM.NS_NOINTERFACE);
+		}
+
+		nsIPrefService prefService = new nsIPrefService (result[0]);
+		result[0] = 0;
+		byte[] buffer = new byte[1];
+		rc = prefService.GetBranch (buffer, result);	/* empty buffer denotes root preference level */
+		prefService.Release ();
+		if (rc != XPCOM.NS_OK) {
+			browser.dispose ();
+			error (rc);
+		}
+		if (result[0] == 0) {
+			browser.dispose ();
+			error (XPCOM.NS_NOINTERFACE);
+		}
+
+		nsIPrefBranch prefBranch = new nsIPrefBranch (result[0]);
+		result[0] = 0;
+
+		/* get Mozilla's current locale preference value */
+		String prefLocales = null;
+		nsIPrefLocalizedString localizedString = null;
+		buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_LANGUAGES, true);
+		rc = prefBranch.GetComplexValue (buffer, nsIPrefLocalizedString.NS_IPREFLOCALIZEDSTRING_IID, result);
+		/* 
+		 * Feature of Debian.  For some reason attempting to query for the current locale
+		 * preference fails on Debian.  The workaround for this is to assume a value of
+		 * "en-us,en" since this is typically the default value when mozilla is used without
+		 * a profile.
+		 */
+		if (rc != XPCOM.NS_OK) {
+			prefLocales = "en-us,en" + TOKENIZER_LOCALE;	//$NON-NLS-1$
+		} else {
+			if (result[0] == 0) {
+				browser.dispose ();
+				error (XPCOM.NS_NOINTERFACE);
+			}
+			localizedString = new nsIPrefLocalizedString (result[0]);
+			result[0] = 0;
+			rc = localizedString.ToString (result);
+			if (rc != XPCOM.NS_OK) {
+				browser.dispose ();
+				error (rc);
+			}
+			if (result[0] == 0) {
+				browser.dispose ();
+				error (XPCOM.NS_NOINTERFACE);
+			}
+			int length = XPCOM.strlen_PRUnichar (result[0]);
+			char[] dest = new char[length];
+			XPCOM.memmove (dest, result[0], length * 2);
+			prefLocales = new String (dest) + TOKENIZER_LOCALE;
+		}
+		result[0] = 0;
+
+		/*
+		 * construct the new locale preference value by prepending the
+		 * user's current locale and language to the original value 
+		 */
+		Locale locale = Locale.getDefault ();
+		String language = locale.getLanguage ();
+		String country = locale.getCountry ();
+		StringBuffer stringBuffer = new StringBuffer (language);
+		stringBuffer.append (SEPARATOR_LOCALE);
+		stringBuffer.append (country.toLowerCase ());
+		stringBuffer.append (TOKENIZER_LOCALE);
+		stringBuffer.append (language);
+		stringBuffer.append (TOKENIZER_LOCALE);
+		String newLocales = stringBuffer.toString ();
+
+		int start, end = -1;
+		do {
+			start = end + 1;
+			end = prefLocales.indexOf (TOKENIZER_LOCALE, start);
+			String token;
+			if (end == -1) {
+				token = prefLocales.substring (start);
+			} else {
+				token = prefLocales.substring (start, end);
+			}
+			if (token.length () > 0) {
+				token = (token + TOKENIZER_LOCALE).trim ();
+				/* ensure that duplicate locale values are not added */
+				if (newLocales.indexOf (token) == -1) {
+					stringBuffer.append (token);
+				}
+			}
+		} while (end != -1);
+		newLocales = stringBuffer.toString ();
+		if (!newLocales.equals (prefLocales)) {
+			/* write the new locale value */
+			newLocales = newLocales.substring (0, newLocales.length () - TOKENIZER_LOCALE.length ()); /* remove trailing tokenizer */
+			int length = newLocales.length ();
+			char[] charBuffer = new char[length + 1];
+			newLocales.getChars (0, length, charBuffer, 0);
+			if (localizedString == null) {
+				byte[] contractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_PREFLOCALIZEDSTRING_CONTRACTID, true);
+				rc = componentManager.CreateInstanceByContractID (contractID, 0, nsIPrefLocalizedString.NS_IPREFLOCALIZEDSTRING_IID, result);
+				if (rc != XPCOM.NS_OK) {
+					browser.dispose ();
+					error (rc);
+				}
+				if (result[0] == 0) {
+					browser.dispose ();
+					error (XPCOM.NS_NOINTERFACE);
+				}
+				localizedString = new nsIPrefLocalizedString (result[0]);
+				result[0] = 0;
+			}
+			localizedString.SetDataWithLength (length, charBuffer);
+			rc = prefBranch.SetComplexValue (buffer, nsIPrefLocalizedString.NS_IPREFLOCALIZEDSTRING_IID, localizedString.getAddress());
+		}
+		if (localizedString != null) {
+			localizedString.Release ();
+			localizedString = null;
+		}
+
+		/* get Mozilla's current charset preference value */
+		String prefCharset = null;
+		buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_CHARSET, true);
+		rc = prefBranch.GetComplexValue (buffer, nsIPrefLocalizedString.NS_IPREFLOCALIZEDSTRING_IID, result);
+		/* 
+		 * Feature of Debian.  For some reason attempting to query for the current charset
+		 * preference fails on Debian.  The workaround for this is to assume a value of
+		 * "ISO-8859-1" since this is typically the default value when mozilla is used
+		 * without a profile.
+		 */
+		if (rc != XPCOM.NS_OK) {
+			prefCharset = "ISO-8859-1";	//$NON_NLS-1$
+		} else {
+			if (result[0] == 0) {
+				browser.dispose ();
+				error (XPCOM.NS_NOINTERFACE);
+			}
+			localizedString = new nsIPrefLocalizedString (result[0]);
+			result[0] = 0;
+			rc = localizedString.ToString (result);
+			if (rc != XPCOM.NS_OK) {
+				browser.dispose ();
+				error (rc);
+			}
+			if (result[0] == 0) {
+				browser.dispose ();
+				error (XPCOM.NS_NOINTERFACE);
+			}
+			int length = XPCOM.strlen_PRUnichar (result[0]);
+			char[] dest = new char[length];
+			XPCOM.memmove (dest, result[0], length * 2);
+			prefCharset = new String (dest);
+		}
+		result[0] = 0;
+
+		String newCharset = System.getProperty ("file.encoding");	// $NON-NLS-1$
+		if (!newCharset.equals (prefCharset)) {
+			/* write the new charset value */
+			int length = newCharset.length ();
+			char[] charBuffer = new char[length + 1];
+			newCharset.getChars (0, length, charBuffer, 0);
+			if (localizedString == null) {
+				byte[] contractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_PREFLOCALIZEDSTRING_CONTRACTID, true);
+				rc = componentManager.CreateInstanceByContractID (contractID, 0, nsIPrefLocalizedString.NS_IPREFLOCALIZEDSTRING_IID, result);
+				if (rc != XPCOM.NS_OK) {
+					browser.dispose ();
+					error (rc);
+				}
+				if (result[0] == 0) {
+					browser.dispose ();
+					error (XPCOM.NS_NOINTERFACE);
+				}
+				localizedString = new nsIPrefLocalizedString (result[0]);
+				result[0] = 0;
+			}
+			localizedString.SetDataWithLength (length, charBuffer);
+			rc = prefBranch.SetComplexValue (buffer, nsIPrefLocalizedString.NS_IPREFLOCALIZEDSTRING_IID, localizedString.getAddress ());
+		}
+		if (localizedString != null) localizedString.Release ();
+
+		/*
+		* Check for proxy values set as documented java properties and update mozilla's
+		* preferences with these values if needed.
+		*/
+		String proxyHost = System.getProperty (PROPERTY_PROXYHOST);
+		String proxyPortString = System.getProperty (PROPERTY_PROXYPORT);
+
+		int port = -1;
+		if (proxyPortString != null) {
+			try {
+				int value = Integer.valueOf (proxyPortString).intValue ();
+				if (0 <= value && value <= MAX_PORT) port = value;
+			} catch (NumberFormatException e) {
+				/* do nothing, java property has non-integer value */
+			}
+		}
+
+		if (proxyHost != null) {
+			byte[] contractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_PREFLOCALIZEDSTRING_CONTRACTID, true);
+			rc = componentManager.CreateInstanceByContractID (contractID, 0, nsIPrefLocalizedString.NS_IPREFLOCALIZEDSTRING_IID, result);
+			if (rc != XPCOM.NS_OK) error (rc);
+			if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+
+			localizedString = new nsIPrefLocalizedString (result[0]);
+			result[0] = 0;
+			int length = proxyHost.length ();
+			char[] charBuffer = new char[length + 1];
+			proxyHost.getChars (0, length, charBuffer, 0);
+			rc = localizedString.SetDataWithLength (length, charBuffer);
+			if (rc != XPCOM.NS_OK) error (rc);
+			buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYHOST_FTP, true);
+			rc = prefBranch.SetComplexValue (buffer, nsIPrefLocalizedString.NS_IPREFLOCALIZEDSTRING_IID, localizedString.getAddress ());
+			if (rc != XPCOM.NS_OK) error (rc);
+			buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYHOST_HTTP, true);
+			rc = prefBranch.SetComplexValue (buffer, nsIPrefLocalizedString.NS_IPREFLOCALIZEDSTRING_IID, localizedString.getAddress ());
+			if (rc != XPCOM.NS_OK) error (rc);
+			buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYHOST_SSL, true);
+			rc = prefBranch.SetComplexValue (buffer, nsIPrefLocalizedString.NS_IPREFLOCALIZEDSTRING_IID, localizedString.getAddress ());
+			if (rc != XPCOM.NS_OK) error (rc);
+			localizedString.Release ();
+		}
+
+		if (port != -1) {
+			buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYPORT_FTP, true);
+			rc = prefBranch.SetIntPref (buffer, port);
+			if (rc != XPCOM.NS_OK) error (rc);
+			buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYPORT_HTTP, true);
+			rc = prefBranch.SetIntPref (buffer, port);
+			if (rc != XPCOM.NS_OK) error (rc);
+			buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYPORT_SSL, true);
+			rc = prefBranch.SetIntPref (buffer, port);
+			if (rc != XPCOM.NS_OK) error (rc);
+		}
+
+		if (proxyHost != null || port != -1) {
+			buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_PROXYTYPE, true);
+			rc = prefBranch.SetIntPref (buffer, 1);
+			if (rc != XPCOM.NS_OK) error (rc);
+		}
+
+		/*
+		* Ensure that windows that are shown during page loads are not blocked.  Firefox may
+		* try to block these by default since such windows are often unwelcome, but this
+		* assumption should not be made in the Browser's context.  Since the Browser client
+		* is responsible for creating the new Browser and Shell in an OpenWindowListener,
+		* they should decide whether the new window is unwelcome or not and act accordingly. 
+		*/
+		buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_DISABLEOPENDURINGLOAD, true);
+		rc = prefBranch.SetBoolPref (buffer, 0);
+		if (rc != XPCOM.NS_OK) {
+			browser.dispose ();
+			error (rc);
+		}
+
+		/* Ensure that the status text can be set through means like javascript */ 
+		buffer = MozillaDelegate.wcsToMbcs (null, PREFERENCE_DISABLEWINDOWSTATUSCHANGE, true);
+		rc = prefBranch.SetBoolPref (buffer, 0);
+		if (rc != XPCOM.NS_OK) {
+			browser.dispose ();
+			error (rc);
+		}
+
+		prefBranch.Release ();
+
+		PromptService2Factory factory = new PromptService2Factory ();
+		factory.AddRef ();
+
+		rc = componentManager.QueryInterface (nsIComponentRegistrar.NS_ICOMPONENTREGISTRAR_IID, result);
+		if (rc != XPCOM.NS_OK) {
+			browser.dispose ();
+			error (rc);
+		}
+		if (result[0] == 0) {
+			browser.dispose ();
+			error (XPCOM.NS_NOINTERFACE);
+		}
+		
+		nsIComponentRegistrar componentRegistrar = new nsIComponentRegistrar (result[0]);
+		result[0] = 0;
+		componentRegistrar.AutoRegister (0);	 /* detect the External component */ 
+
+		aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_PROMPTSERVICE_CONTRACTID, true); 
+		byte[] aClassName = MozillaDelegate.wcsToMbcs (null, "Prompt Service", true); //$NON-NLS-1$
+		rc = componentRegistrar.RegisterFactory (XPCOM.NS_PROMPTSERVICE_CID, aClassName, aContractID, factory.getAddress ());
+		if (rc != XPCOM.NS_OK) {
+			browser.dispose ();
+			error (rc);
+		}
+		factory.Release ();
+
+		ExternalFactory externalFactory = new ExternalFactory ();
+		externalFactory.AddRef ();
+		aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.EXTERNAL_CONTRACTID, true); 
+		aClassName = MozillaDelegate.wcsToMbcs (null, "External", true); //$NON-NLS-1$
+		rc = componentRegistrar.RegisterFactory (XPCOM.EXTERNAL_CID, aClassName, aContractID, externalFactory.getAddress ());
+		if (rc != XPCOM.NS_OK) {
+			browser.dispose ();
+			error (rc);
+		}
+		externalFactory.Release ();
+
+		rc = serviceManager.GetService (XPCOM.NS_CATEGORYMANAGER_CID, nsICategoryManager.NS_ICATEGORYMANAGER_IID, result);
+		if (rc != XPCOM.NS_OK) error (rc);
+		if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+		serviceManager.Release ();
+
+		nsICategoryManager categoryManager = new nsICategoryManager (result[0]);
+		result[0] = 0;
+		byte[] category = MozillaDelegate.wcsToMbcs (null, "JavaScript global property", true); //$NON-NLS-1$
+		byte[] entry = MozillaDelegate.wcsToMbcs (null, "external", true); //$NON-NLS-1$
+		rc = categoryManager.AddCategoryEntry(category, entry, aContractID, 1, 1, result);
+		result[0] = 0;
+		categoryManager.Release ();
+
+		/*
+		* This Download factory will be used if the GRE version is < 1.8.
+		* If the GRE version is 1.8.x then the Download factory that is registered later for
+		*   contract "Transfer" will be used.
+		* If the GRE version is >= 1.9 then no Download factory is registered because this
+		*   functionality is provided by the GRE.
+		*/
+		DownloadFactory downloadFactory = new DownloadFactory ();
+		downloadFactory.AddRef ();
+		aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_DOWNLOAD_CONTRACTID, true);
+		aClassName = MozillaDelegate.wcsToMbcs (null, "Download", true); //$NON-NLS-1$
+		rc = componentRegistrar.RegisterFactory (XPCOM.NS_DOWNLOAD_CID, aClassName, aContractID, downloadFactory.getAddress ());
+		if (rc != XPCOM.NS_OK) {
+			browser.dispose ();
+			error (rc);
+		}
+		downloadFactory.Release ();
+
+		FilePickerFactory pickerFactory = IsXULRunner ? new FilePickerFactory_1_8 () : new FilePickerFactory ();
+		pickerFactory.AddRef ();
+		aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_FILEPICKER_CONTRACTID, true);
+		aClassName = MozillaDelegate.wcsToMbcs (null, "FilePicker", true); //$NON-NLS-1$
+		rc = componentRegistrar.RegisterFactory (XPCOM.NS_FILEPICKER_CID, aClassName, aContractID, pickerFactory.getAddress ());
+		if (rc != XPCOM.NS_OK) {
+			browser.dispose ();
+			error (rc);
+		}
+		pickerFactory.Release ();
+
+		componentRegistrar.Release ();
+		componentManager.Release ();
+
+		Initialized = true;
+	}
+
+	if (display.getData (DISPOSE_LISTENER_HOOKED) == null) {
+		display.setData (DISPOSE_LISTENER_HOOKED, DISPOSE_LISTENER_HOOKED);
+		display.addListener (SWT.Dispose, new Listener () {
+			public void handleEvent (Event event) {
+				if (BrowserCount > 0) return; /* another display is still active */
+
+				int /*long*/[] result = new int /*long*/[1];
+				int rc = XPCOM.NS_GetServiceManager (result);
+				if (rc != XPCOM.NS_OK) error (rc);
+				if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+
+				nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
+				result[0] = 0;		
+				byte[] buffer = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_OBSERVER_CONTRACTID, true);
+				rc = serviceManager.GetServiceByContractID (buffer, nsIObserverService.NS_IOBSERVERSERVICE_IID, result);
+				if (rc != XPCOM.NS_OK) error (rc);
+				if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+
+				nsIObserverService observerService = new nsIObserverService (result[0]);
+				result[0] = 0;
+				buffer = MozillaDelegate.wcsToMbcs (null, PROFILE_BEFORE_CHANGE, true);
+				int length = SHUTDOWN_PERSIST.length ();
+				char[] chars = new char [length + 1];
+				SHUTDOWN_PERSIST.getChars (0, length, chars, 0);
+				rc = observerService.NotifyObservers (0, buffer, chars);
+				if (rc != XPCOM.NS_OK) error (rc);
+				observerService.Release ();
+
+				if (LocationProvider != null) {
+					String prefsLocation = LocationProvider.profilePath + AppFileLocProvider.PREFERENCES_FILE;
+					nsEmbedString pathString = new nsEmbedString (prefsLocation);
+					rc = XPCOM.NS_NewLocalFile (pathString.getAddress (), 1, result);
+					if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+					if (result[0] == 0) Mozilla.error (XPCOM.NS_ERROR_NULL_POINTER);
+					pathString.dispose ();
+
+					nsILocalFile localFile = new nsILocalFile (result [0]);
+					result[0] = 0;
+				    rc = localFile.QueryInterface (nsIFile.NS_IFILE_IID, result); 
+					if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+					if (result[0] == 0) Mozilla.error (XPCOM.NS_ERROR_NO_INTERFACE);
+					localFile.Release ();
+
+					nsIFile prefFile = new nsIFile (result[0]);
+					result[0] = 0;
+
+					buffer = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_PREFSERVICE_CONTRACTID, true);
+					rc = serviceManager.GetServiceByContractID (buffer, nsIPrefService.NS_IPREFSERVICE_IID, result);
+					if (rc != XPCOM.NS_OK) error (rc);
+					if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+
+					nsIPrefService prefService = new nsIPrefService (result[0]);
+					result[0] = 0;
+					rc = prefService.SavePrefFile(prefFile.getAddress ());
+					prefService.Release ();
+					prefFile.Release ();
+				}
+				serviceManager.Release ();
+
+				if (XPCOMWasGlued) {
+					/*
+					* XULRunner 1.9 can crash on Windows if XPCOMGlueShutdown is invoked here,
+					* presumably because one or more of its unloaded symbols are referenced when
+					* this callback returns.  The workaround is to delay invoking XPCOMGlueShutdown
+					* so that its symbols are still available once this callback returns.
+					*/
+					display.asyncExec (new Runnable () {
+						public void run () {
+							XPCOM.XPCOMGlueShutdown ();
+						}
+					});
+
+					// the following is intentionally commented, because calling XRE_TermEmbedding
+					// causes subsequent browser instantiations within the process to fail
+
+//					int size = XPCOM.nsDynamicFunctionLoad_sizeof ();
+//					/* alloc memory for two structs, the second is empty to signify the end of the list */
+//					int /*long*/ ptr = C.malloc (size * 2);
+//					C.memset (ptr, 0, size * 2);
+//					nsDynamicFunctionLoad functionLoad = new nsDynamicFunctionLoad ();
+//					byte[] bytes = MozillaDelegate.wcsToMbcs (null, "XRE_TermEmbedding", true); //$NON-NLS-1$
+//					functionLoad.functionName = C.malloc (bytes.length);
+//					C.memmove (functionLoad.functionName, bytes, bytes.length);
+//					functionLoad.function = C.malloc (C.PTR_SIZEOF);
+//					C.memmove (functionLoad.function, new int /*long*/[] {0} , C.PTR_SIZEOF);
+//					XPCOM.memmove (ptr, functionLoad, XPCOM.nsDynamicFunctionLoad_sizeof ());
+//					XPCOM.XPCOMGlueLoadXULFunctions (ptr);
+//					C.memmove (result, functionLoad.function, C.PTR_SIZEOF);
+//					int /*long*/ functionPtr = result[0];
+//					result[0] = 0;
+//					C.free (functionLoad.function);
+//					C.free (functionLoad.functionName);
+//					C.free (ptr);
+//					XPCOM.Call (functionPtr);
+
+					XPCOMWasGlued = false;
+				}
+				if (XPCOMInitWasGlued) {
+					XPCOMInit.XPCOMGlueShutdown ();
+					XPCOMInitWasGlued = false;
+				}
+				Initialized = false;
+			}
+		});
+	}
+
+	BrowserCount++;
+	int rc = XPCOM.NS_GetComponentManager (result);
+	if (rc != XPCOM.NS_OK) {
+		browser.dispose ();
+		error (rc);
+	}
+	if (result[0] == 0) {
+		browser.dispose ();
+		error (XPCOM.NS_NOINTERFACE);
+	}
+	
+	nsIComponentManager componentManager = new nsIComponentManager (result[0]);
+	result[0] = 0;
+	nsID NS_IWEBBROWSER_CID = new nsID ("F1EAC761-87E9-11d3-AF80-00A024FFC08C"); //$NON-NLS-1$
+	rc = componentManager.CreateInstance (NS_IWEBBROWSER_CID, 0, nsIWebBrowser.NS_IWEBBROWSER_IID, result);
+	if (rc != XPCOM.NS_OK) {
+		browser.dispose ();
+		error (rc);
+	}
+	if (result[0] == 0) {
+		browser.dispose ();
+		error (XPCOM.NS_NOINTERFACE);	
+	}
+	
+	webBrowser = new nsIWebBrowser (result[0]);
+	result[0] = 0;
+
+	createCOMInterfaces ();
+	AddRef ();
+
+	rc = webBrowser.SetContainerWindow (webBrowserChrome.getAddress());
+	if (rc != XPCOM.NS_OK) {
+		browser.dispose ();
+		error (rc);
+	}
+			
+	rc = webBrowser.QueryInterface (nsIBaseWindow.NS_IBASEWINDOW_IID, result);
+	if (rc != XPCOM.NS_OK) {
+		browser.dispose ();
+		error (rc);
+	}
+	if (result[0] == 0) {
+		browser.dispose ();
+		error (XPCOM.NS_ERROR_NO_INTERFACE);
+	}
+	
+	nsIBaseWindow baseWindow = new nsIBaseWindow (result[0]);
+	result[0] = 0;
+	Rectangle rect = browser.getClientArea ();
+	if (rect.isEmpty ()) {
+		rect.width = 1;
+		rect.height = 1;
+	}
+
+	embedHandle = delegate.getHandle ();
+
+	rc = baseWindow.InitWindow (embedHandle, 0, 0, 0, rect.width, rect.height);
+	if (rc != XPCOM.NS_OK) {
+		browser.dispose ();
+		error (XPCOM.NS_ERROR_FAILURE);
+	}
+	rc = delegate.createBaseWindow (baseWindow);
+	if (rc != XPCOM.NS_OK) {
+		browser.dispose ();
+		error (XPCOM.NS_ERROR_FAILURE);
+	}
+	rc = baseWindow.SetVisibility (1);
+	if (rc != XPCOM.NS_OK) {
+		browser.dispose ();
+		error (XPCOM.NS_ERROR_FAILURE);
+	}
+	baseWindow.Release ();
+
+	if (!PerformedVersionCheck) {
+		PerformedVersionCheck = true;
+
+		rc = componentManager.QueryInterface (nsIComponentRegistrar.NS_ICOMPONENTREGISTRAR_IID, result);
+		if (rc != XPCOM.NS_OK) {
+			browser.dispose ();
+			error (rc);
+		}
+		if (result[0] == 0) {
+			browser.dispose ();
+			error (XPCOM.NS_NOINTERFACE);
+		}
+		nsIComponentRegistrar componentRegistrar = new nsIComponentRegistrar (result[0]);
+		result[0] = 0;
+
+		HelperAppLauncherDialogFactory dialogFactory = new HelperAppLauncherDialogFactory ();
+		dialogFactory.AddRef ();
+		byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_HELPERAPPLAUNCHERDIALOG_CONTRACTID, true);
+		byte[] aClassName = MozillaDelegate.wcsToMbcs (null, "Helper App Launcher Dialog", true); //$NON-NLS-1$
+		rc = componentRegistrar.RegisterFactory (XPCOM.NS_HELPERAPPLAUNCHERDIALOG_CID, aClassName, aContractID, dialogFactory.getAddress ());
+		if (rc != XPCOM.NS_OK) {
+			browser.dispose ();
+			error (rc);
+		}
+		dialogFactory.Release ();
+
+		/*
+		* Check for the availability of the pre-1.8 implementation of nsIDocShell
+		* to determine if the GRE's version is < 1.8.
+		*/
+		rc = webBrowser.QueryInterface (nsIInterfaceRequestor.NS_IINTERFACEREQUESTOR_IID, result);
+		if (rc != XPCOM.NS_OK) {
+			browser.dispose ();
+			error (XPCOM.NS_ERROR_FAILURE);
+		}
+		if (result[0] == 0) {
+			browser.dispose ();
+			error (XPCOM.NS_ERROR_NO_INTERFACE);
+		}
+		nsIInterfaceRequestor interfaceRequestor = new nsIInterfaceRequestor (result[0]);
+		result[0] = 0;
+
+		rc = interfaceRequestor.GetInterface (nsIDocShell.NS_IDOCSHELL_IID, result);
+		if (rc == XPCOM.NS_OK && result[0] != 0) {
+			IsPre_1_8 = true;
+			new nsISupports (result[0]).Release ();
+		}
+		result[0] = 0;
+		IsPre_1_9 = true;
+
+		/*
+		* A Download factory for contract "Transfer" must be registered iff the GRE's version is 1.8.x.
+		*   Check for the availability of the 1.8 implementation of nsIDocShell to determine if the
+		*   GRE's version is 1.8.x.
+		* If the GRE version is < 1.8 then the previously-registered Download factory for contract
+		*   "Download" will be used.
+		* If the GRE version is >= 1.9 then no Download factory is registered because this
+		*   functionality is provided by the GRE.
+		*/
+		if (!IsPre_1_8) {
+			rc = interfaceRequestor.GetInterface (nsIDocShell_1_8.NS_IDOCSHELL_IID, result);
+			if (rc == XPCOM.NS_OK && result[0] != 0) { /* 1.8 */
+				new nsISupports (result[0]).Release ();
+				result[0] = 0;
+
+				DownloadFactory_1_8 downloadFactory_1_8 = new DownloadFactory_1_8 ();
+				downloadFactory_1_8.AddRef ();
+				aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_TRANSFER_CONTRACTID, true);
+				aClassName = MozillaDelegate.wcsToMbcs (null, "Transfer", true); //$NON-NLS-1$
+				rc = componentRegistrar.RegisterFactory (XPCOM.NS_DOWNLOAD_CID, aClassName, aContractID, downloadFactory_1_8.getAddress ());
+				if (rc != XPCOM.NS_OK) {
+					browser.dispose ();
+					error (rc);
+				}
+				downloadFactory_1_8.Release ();
+			} else { /* >= 1.9 */
+				IsPre_1_9 = false;
+			}
+		}
+		result[0] = 0;
+		interfaceRequestor.Release ();
+		componentRegistrar.Release ();
+	}
+	componentManager.Release ();
+
+	/*
+	 * Bug in XULRunner 1.9.  On win32, Mozilla does not clear its background before content has
+	 * been set into it.  As a result, embedders appear broken if they do not immediately display
+	 * a URL or text.  The Mozilla bug for this is https://bugzilla.mozilla.org/show_bug.cgi?id=453523.
+	 * 
+	 * The workaround is to subclass the Mozilla window and clear it whenever WM_ERASEBKGND is received.
+	 * This subclass should be removed once content has been set into the browser.
+	 */
+	if (!IsPre_1_9) {
+		delegate.addWindowSubclass ();
+	}
+
+	rc = webBrowser.AddWebBrowserListener (weakReference.getAddress (), nsIWebProgressListener.NS_IWEBPROGRESSLISTENER_IID);
+	if (rc != XPCOM.NS_OK) {
+		browser.dispose ();
+		error (rc);
+	}
+
+	rc = webBrowser.SetParentURIContentListener (uriContentListener.getAddress ());
+	if (rc != XPCOM.NS_OK) {
+		browser.dispose ();
+		error (rc);
+	}
+
+	delegate.init ();
+
+	listener = new Listener () {
+		public void handleEvent (Event event) {
+			switch (event.type) {
+				case SWT.Dispose: {
+					/* make this handler run after other dispose listeners */
+					if (ignoreDispose) {
+						ignoreDispose = false;
+						break;
+					}
+					ignoreDispose = true;
+					browser.notifyListeners (event.type, event);
+					event.type = SWT.NONE;
+					onDispose (event.display);
+					break;
+				}
+				case SWT.Resize: onResize (); break;
+				case SWT.FocusIn: Activate (); break;
+				case SWT.Activate: Activate (); break;
+				case SWT.Deactivate: {
+					Display display = event.display;
+					if (Mozilla.this.browser == display.getFocusControl ()) Deactivate ();
+					break;
+				}
+				case SWT.Show: {
+					/*
+					* Feature in GTK Mozilla.  Mozilla does not show up when
+					* its container (a GTK fixed handle) is made visible
+					* after having been hidden.  The workaround is to reset
+					* its size after the container has been made visible. 
+					*/
+					Display display = event.display;
+					display.asyncExec(new Runnable () {
+						public void run() {
+							if (browser.isDisposed ()) return;
+							onResize ();
+						}
+					});
+					break;
+				}
+			}
+		}
+	};	
+	int[] folderEvents = new int[] {
+		SWT.Dispose,
+		SWT.Resize,  
+		SWT.FocusIn,
+		SWT.Activate,
+		SWT.Deactivate,
+		SWT.Show,
+		SWT.KeyDown		// needed to make browser traversable
+	};
+	for (int i = 0; i < folderEvents.length; i++) {
+		browser.addListener (folderEvents[i], listener);
+	}
+}
+
+public boolean back () {
+	htmlBytes = null;
+
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = webBrowser.QueryInterface (nsIWebNavigation.NS_IWEBNAVIGATION_IID, result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+	
+	nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]);		 	
+	rc = webNavigation.GoBack ();	
+	webNavigation.Release ();
+	return rc == XPCOM.NS_OK;
+}
+
+void createCOMInterfaces () {
+	// Create each of the interfaces that this object implements
+	supports = new XPCOMObject (new int[] {2, 0, 0}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+	};
+	
+	weakReference = new XPCOMObject (new int[] {2, 0, 0, 2}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return QueryReferent (args[0], args[1]);}
+	};
+
+	webProgressListener = new XPCOMObject (new int[] {2, 0, 0, 4, 6, 3, 4, 3}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return OnStateChange (args[0], args[1], (int)/*64*/args[2], (int)/*64*/args[3]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return OnProgressChange (args[0], args[1], (int)/*64*/args[2], (int)/*64*/args[3], (int)/*64*/args[4], (int)/*64*/args[5]);}
+		public int /*long*/ method5 (int /*long*/[] args) {return OnLocationChange (args[0], args[1], args[2]);}
+		public int /*long*/ method6 (int /*long*/[] args) {return OnStatusChange (args[0], args[1], (int)/*64*/args[2], args[3]);}
+		public int /*long*/ method7 (int /*long*/[] args) {return OnSecurityChange (args[0], args[1], (int)/*64*/args[2]);}
+	};
+	
+	webBrowserChrome = new XPCOMObject (new int[] {2, 0, 0, 2, 1, 1, 1, 1, 0, 2, 0, 1, 1}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return SetStatus ((int)/*64*/args[0], args[1]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return GetWebBrowser (args[0]);}
+		public int /*long*/ method5 (int /*long*/[] args) {return SetWebBrowser (args[0]);}
+		public int /*long*/ method6 (int /*long*/[] args) {return GetChromeFlags (args[0]);}
+		public int /*long*/ method7 (int /*long*/[] args) {return SetChromeFlags ((int)/*64*/args[0]);}
+		public int /*long*/ method8 (int /*long*/[] args) {return DestroyBrowserWindow ();}
+		public int /*long*/ method9 (int /*long*/[] args) {return SizeBrowserTo ((int)/*64*/args[0], (int)/*64*/args[1]);}
+		public int /*long*/ method10 (int /*long*/[] args) {return ShowAsModal ();}
+		public int /*long*/ method11 (int /*long*/[] args) {return IsWindowModal (args[0]);}
+		public int /*long*/ method12 (int /*long*/[] args) {return ExitModalEventLoop ((int)/*64*/args[0]);}
+	};
+	
+	webBrowserChromeFocus = new XPCOMObject (new int[] {2, 0, 0, 0, 0}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return FocusNextElement ();}
+		public int /*long*/ method4 (int /*long*/[] args) {return FocusPrevElement ();}
+	};
+		
+	embeddingSiteWindow = new XPCOMObject (new int[] {2, 0, 0, 5, 5, 0, 1, 1, 1, 1, 1}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return SetDimensions ((int)/*64*/args[0], (int)/*64*/args[1], (int)/*64*/args[2], (int)/*64*/args[3], (int)/*64*/args[4]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return GetDimensions ((int)/*64*/args[0], args[1], args[2], args[3], args[4]);}
+		public int /*long*/ method5 (int /*long*/[] args) {return SetFocus ();}
+		public int /*long*/ method6 (int /*long*/[] args) {return GetVisibility (args[0]);}
+		public int /*long*/ method7 (int /*long*/[] args) {return SetVisibility ((int)/*64*/args[0]);}
+		public int /*long*/ method8 (int /*long*/[] args) {return GetTitle (args[0]);}
+		public int /*long*/ method9 (int /*long*/[] args) {return SetTitle (args[0]);}
+		public int /*long*/ method10 (int /*long*/[] args) {return GetSiteWindow (args[0]);}
+	};
+	
+	interfaceRequestor = new XPCOMObject (new int[] {2, 0, 0, 2} ){
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return GetInterface (args[0], args[1]);}
+	};
+		
+	supportsWeakReference = new XPCOMObject (new int[] {2, 0, 0, 1}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return GetWeakReference (args[0]);}
+	};
+	
+	contextMenuListener = new XPCOMObject (new int[] {2, 0, 0, 3}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return OnShowContextMenu ((int)/*64*/args[0], args[1], args[2]);}
+	};
+	
+	uriContentListener = new XPCOMObject (new int[] {2, 0, 0, 2, 5, 3, 4, 1, 1, 1, 1}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return OnStartURIOpen (args[0], args[1]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return DoContent (args[0], (int)/*64*/args[1], args[2], args[3], args[4]);}
+		public int /*long*/ method5 (int /*long*/[] args) {return IsPreferred (args[0], args[1], args[2]);}
+		public int /*long*/ method6 (int /*long*/[] args) {return CanHandleContent (args[0], (int)/*64*/args[1], args[2], args[3]);}
+		public int /*long*/ method7 (int /*long*/[] args) {return GetLoadCookie (args[0]);}
+		public int /*long*/ method8 (int /*long*/[] args) {return SetLoadCookie (args[0]);}
+		public int /*long*/ method9 (int /*long*/[] args) {return GetParentContentListener (args[0]);}
+		public int /*long*/ method10 (int /*long*/[] args) {return SetParentContentListener (args[0]);}		
+	};
+	
+	tooltipListener = new XPCOMObject (new int[] {2, 0, 0, 3, 0}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return OnShowTooltip ((int)/*64*/args[0], (int)/*64*/args[1], args[2]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return OnHideTooltip ();}		
+	};
+
+	domEventListener = new XPCOMObject (new int[] {2, 0, 0, 1}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return HandleEvent (args[0]);}
+	};
+}
+
+void deregisterFunction (BrowserFunction function) {
+	super.deregisterFunction (function);
+	AllFunctions.remove (new Integer (function.index));
+}
+
+void disposeCOMInterfaces () {
+	if (supports != null) {
+		supports.dispose ();
+		supports = null;
+	}	
+	if (weakReference != null) {
+		weakReference.dispose ();
+		weakReference = null;	
+	}
+	if (webProgressListener != null) {
+		webProgressListener.dispose ();
+		webProgressListener = null;
+	}
+	if (webBrowserChrome != null) {
+		webBrowserChrome.dispose ();
+		webBrowserChrome = null;
+	}
+	if (webBrowserChromeFocus != null) {
+		webBrowserChromeFocus.dispose ();
+		webBrowserChromeFocus = null;
+	}
+	if (embeddingSiteWindow != null) {
+		embeddingSiteWindow.dispose ();
+		embeddingSiteWindow = null;
+	}
+	if (interfaceRequestor != null) {
+		interfaceRequestor.dispose ();
+		interfaceRequestor = null;
+	}		
+	if (supportsWeakReference != null) {
+		supportsWeakReference.dispose ();
+		supportsWeakReference = null;
+	}	
+	if (contextMenuListener != null) {
+		contextMenuListener.dispose ();
+		contextMenuListener = null;
+	}
+	if (uriContentListener != null) {
+		uriContentListener.dispose ();
+		uriContentListener = null;
+	}
+	if (tooltipListener != null) {
+		tooltipListener.dispose ();
+		tooltipListener = null;
+	}
+	if (domEventListener != null) {
+		domEventListener.dispose ();
+		domEventListener = null;
+	}
+}
+
+public boolean execute (String script) {
+	/*
+	* This could be the first content that is set into the browser, so
+	* ensure that the custom subclass that works around Mozilla bug
+	* https://bugzilla.mozilla.org/show_bug.cgi?id=453523 is removed.
+	*/
+	delegate.removeWindowSubclass ();
+
+	/*
+	* As of mozilla 1.9 executing javascript via the javascript: protocol no
+	* longer happens synchronously.  As a result, the result of executing JS
+	* is not returned to the java side when expected by the client.  The
+	* workaround is to invoke the javascript handler directly via C++, which is
+	* exposed as of mozilla 1.9.
+	*/
+	int /*long*/[] result = new int /*long*/[1];
+	if (!IsPre_1_9) {
+		int rc = XPCOM.NS_GetServiceManager (result);
+		if (rc != XPCOM.NS_OK) error (rc);
+		if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+
+		nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
+		result[0] = 0;
+		nsIPrincipal principal = null;
+		byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_SCRIPTSECURITYMANAGER_CONTRACTID, true);
+		rc = serviceManager.GetServiceByContractID (aContractID, nsIScriptSecurityManager_1_9_1.NS_ISCRIPTSECURITYMANAGER_IID, result);
+		if (rc == XPCOM.NS_OK && result[0] != 0) {
+			nsIScriptSecurityManager_1_9_1 securityManager = new nsIScriptSecurityManager_1_9_1 (result[0]);
+			result[0] = 0;
+			rc = securityManager.GetSystemPrincipal (result);
+			if (rc != XPCOM.NS_OK) error (rc);
+			if (result[0] == 0) error (XPCOM.NS_ERROR_NULL_POINTER);
+			principal = new nsIPrincipal (result[0]);
+			result[0] = 0;
+			securityManager.Release ();
+		} else {
+			rc = serviceManager.GetServiceByContractID (aContractID, nsIScriptSecurityManager_1_9.NS_ISCRIPTSECURITYMANAGER_IID, result);
+			if (rc == XPCOM.NS_OK && result[0] != 0) {
+				nsIScriptSecurityManager_1_9 securityManager = new nsIScriptSecurityManager_1_9 (result[0]);
+				result[0] = 0;
+				rc = securityManager.GetSystemPrincipal (result);
+				if (rc != XPCOM.NS_OK) error (rc);
+				if (result[0] == 0) error (XPCOM.NS_ERROR_NULL_POINTER);
+				principal = new nsIPrincipal (result[0]);
+				result[0] = 0;
+				securityManager.Release ();
+			}
+		}
+		serviceManager.Release ();
+
+		if (principal != null) {
+			rc = webBrowser.QueryInterface (nsIInterfaceRequestor.NS_IINTERFACEREQUESTOR_IID, result);
+			if (rc != XPCOM.NS_OK) error (rc);
+			if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+
+			nsIInterfaceRequestor interfaceRequestor = new nsIInterfaceRequestor (result[0]);
+			result[0] = 0;
+			nsID scriptGlobalObjectNSID = new nsID ("6afecd40-0b9a-4cfd-8c42-0f645cd91829"); /* nsIScriptGlobalObject */ //$NON-NLS-1$
+			rc = interfaceRequestor.GetInterface (scriptGlobalObjectNSID, result);
+			interfaceRequestor.Release ();
+
+			if (rc == XPCOM.NS_OK && result[0] != 0) {
+				int /*long*/ scriptGlobalObject = result[0];
+				result[0] = 0;
+				rc = (int/*64*/)XPCOM.nsIScriptGlobalObject_EnsureScriptEnvironment (scriptGlobalObject, 2); /* nsIProgrammingLanguage.JAVASCRIPT */
+				if (rc != XPCOM.NS_OK) error (rc);
+				int /*long*/ scriptContext = XPCOM.nsIScriptGlobalObject_GetScriptContext (scriptGlobalObject, 2); /* nsIProgrammingLanguage.JAVASCRIPT */
+				int /*long*/ globalJSObject = XPCOM.nsIScriptGlobalObject_GetScriptGlobal (scriptGlobalObject, 2); /* nsIProgrammingLanguage.JAVASCRIPT */
+				new nsISupports (scriptGlobalObject).Release ();
+
+				if (scriptContext != 0 && globalJSObject != 0) {
+					/* ensure that the received nsIScriptContext implements the expected interface */
+					nsID scriptContextNSID = new nsID ("e7b9871d-3adc-4bf7-850d-7fb9554886bf"); /* nsIScriptContext */ //$NON-NLS-1$					
+					rc = new nsISupports (scriptContext).QueryInterface (scriptContextNSID, result);
+					if (rc == XPCOM.NS_OK && result[0] != 0) {
+						new nsISupports (result[0]).Release ();
+						result[0] = 0;
+
+						int /*long*/ nativeContext = XPCOM.nsIScriptContext_GetNativeContext (scriptContext);
+						if (nativeContext != 0) {
+							int length = script.length ();
+							char[] scriptChars = new char[length];
+							script.getChars(0, length, scriptChars, 0);
+							byte[] urlbytes = MozillaDelegate.wcsToMbcs (null, getUrl (), true);
+							rc = principal.GetJSPrincipals (nativeContext, result);
+							if (rc == XPCOM.NS_OK && result[0] != 0) {
+								int /*long*/ principals = result[0];
+								result[0] = 0;
+								principal.Release ();
+								String mozillaPath = LocationProvider.mozillaPath + delegate.getJSLibraryName () + '\0';
+								byte[] pathBytes = null;
+								try {
+									pathBytes = mozillaPath.getBytes ("UTF-8"); //$NON-NLS-1$
+								} catch (UnsupportedEncodingException e) {
+									pathBytes = mozillaPath.getBytes ();
+								}
+								rc = XPCOM.JS_EvaluateUCScriptForPrincipals (pathBytes, nativeContext, globalJSObject, principals, scriptChars, length, urlbytes, 0, result);
+								return rc != 0;
+							}
+						}
+					}
+				}
+			}
+			principal.Release ();
+		}
+	}
+
+	/* fall back to the pre-1.9 approach */
+
+	String url = PREFIX_JAVASCRIPT + script + ";void(0);";	//$NON-NLS-1$
+	int rc = webBrowser.QueryInterface (nsIWebNavigation.NS_IWEBNAVIGATION_IID, result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+
+	nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]);
+    char[] arg = url.toCharArray (); 
+    char[] c = new char[arg.length+1];
+    System.arraycopy (arg, 0, c, 0, arg.length);
+	rc = webNavigation.LoadURI (c, nsIWebNavigation.LOAD_FLAGS_NONE, 0, 0, 0);
+	webNavigation.Release ();
+	return rc == XPCOM.NS_OK;
+}
+
+static Browser findBrowser (int /*long*/ handle) {
+	return MozillaDelegate.findBrowser (handle);
+}
+
+static Browser findBrowser (nsIDOMWindow aDOMWindow) {
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = XPCOM.NS_GetServiceManager (result);
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	if (result[0] == 0) Mozilla.error (XPCOM.NS_NOINTERFACE);
+
+	nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
+	result[0] = 0;
+	byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_WINDOWWATCHER_CONTRACTID, true);
+	rc = serviceManager.GetServiceByContractID (aContractID, nsIWindowWatcher.NS_IWINDOWWATCHER_IID, result);
+	if (rc != XPCOM.NS_OK) Mozilla.error(rc);
+	if (result[0] == 0) Mozilla.error (XPCOM.NS_NOINTERFACE);		
+	serviceManager.Release ();
+
+	nsIWindowWatcher windowWatcher = new nsIWindowWatcher (result[0]);
+	result[0] = 0;
+	/* the chrome will only be answered for the top-level nsIDOMWindow */
+	rc = aDOMWindow.GetTop (result);
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	if (result[0] == 0) Mozilla.error (XPCOM.NS_NOINTERFACE);
+	int /*long*/ topDOMWindow = result[0];
+	result[0] = 0;
+	rc = windowWatcher.GetChromeForWindow (topDOMWindow, result);
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	new nsISupports (topDOMWindow).Release ();
+	windowWatcher.Release ();
+	if (result[0] == 0) return null;	/* the parent chrome is disconnected */
+
+	nsIWebBrowserChrome webBrowserChrome = new nsIWebBrowserChrome (result[0]);
+	result[0] = 0;
+	rc = webBrowserChrome.QueryInterface (nsIEmbeddingSiteWindow.NS_IEMBEDDINGSITEWINDOW_IID, result);
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	if (result[0] == 0) Mozilla.error (XPCOM.NS_NOINTERFACE);		
+	webBrowserChrome.Release ();
+
+	nsIEmbeddingSiteWindow embeddingSiteWindow = new nsIEmbeddingSiteWindow (result[0]);
+	result[0] = 0;
+	rc = embeddingSiteWindow.GetSiteWindow (result);
+	if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+	if (result[0] == 0) Mozilla.error (XPCOM.NS_NOINTERFACE);		
+	embeddingSiteWindow.Release ();
+
+	return findBrowser (result[0]); 
+}
+
+public boolean forward () {
+	htmlBytes = null;
+
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = webBrowser.QueryInterface (nsIWebNavigation.NS_IWEBNAVIGATION_IID, result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+	
+	nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]);
+	rc = webNavigation.GoForward ();
+	webNavigation.Release ();
+
+	return rc == XPCOM.NS_OK;
+}
+
+public String getBrowserType () {
+	return "mozilla"; //$NON-NLS-1$
+}
+
+int getNextFunctionIndex () {
+	return NextJSFunctionIndex++;
+}
+
+public String getText () {
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = webBrowser.GetContentDOMWindow (result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+
+	nsIDOMWindow window = new nsIDOMWindow (result[0]);
+	result[0] = 0;
+	rc = window.GetDocument (result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+	window.Release ();
+
+	int /*long*/ document = result[0];
+	result[0] = 0;
+	rc = XPCOM.NS_GetComponentManager (result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+
+	nsIComponentManager componentManager = new nsIComponentManager (result[0]);
+	result[0] = 0;
+	byte[] contractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_DOMSERIALIZER_CONTRACTID, true);
+	char[] chars = null;
+
+	rc = componentManager.CreateInstanceByContractID (contractID, 0, nsIDOMSerializer_1_7.NS_IDOMSERIALIZER_IID, result);
+	if (rc == XPCOM.NS_OK) {	/* mozilla >= 1.7 */
+		if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+
+		nsIDOMSerializer_1_7 serializer = new nsIDOMSerializer_1_7 (result[0]);
+		result[0] = 0;
+		int /*long*/ string = XPCOM.nsEmbedString_new ();
+		rc = serializer.SerializeToString (document, string);
+		serializer.Release ();
+
+		int length = XPCOM.nsEmbedString_Length (string);
+		int /*long*/ buffer = XPCOM.nsEmbedString_get (string);
+		chars = new char[length];
+		XPCOM.memmove (chars, buffer, length * 2);
+		XPCOM.nsEmbedString_delete (string);
+	} else {	/* mozilla < 1.7 */
+		rc = componentManager.CreateInstanceByContractID (contractID, 0, nsIDOMSerializer.NS_IDOMSERIALIZER_IID, result);
+		if (rc != XPCOM.NS_OK) error (rc);
+		if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+
+		nsIDOMSerializer serializer = new nsIDOMSerializer (result[0]);
+		result[0] = 0;
+		rc = serializer.SerializeToString (document, result);
+		serializer.Release ();
+
+		int length = XPCOM.strlen_PRUnichar (result[0]);
+		chars = new char[length];
+		XPCOM.memmove (chars, result[0], length * 2);
+	}
+
+	componentManager.Release ();
+	new nsISupports (document).Release ();
+	return new String (chars);
+}
+
+public String getUrl () {
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = webBrowser.QueryInterface (nsIWebNavigation.NS_IWEBNAVIGATION_IID, result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+
+	nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]);
+	int /*long*/[] aCurrentURI = new int /*long*/[1];
+	rc = webNavigation.GetCurrentURI (aCurrentURI);
+	if (rc != XPCOM.NS_OK) error (rc);
+	webNavigation.Release ();
+
+	byte[] dest = null;
+	if (aCurrentURI[0] != 0) {
+		nsIURI uri = new nsIURI (aCurrentURI[0]);
+		int /*long*/ aSpec = XPCOM.nsEmbedCString_new ();
+		rc = uri.GetSpec (aSpec);
+		if (rc != XPCOM.NS_OK) error (rc);
+		int length = XPCOM.nsEmbedCString_Length (aSpec);
+		int /*long*/ buffer = XPCOM.nsEmbedCString_get (aSpec);
+		dest = new byte[length];
+		XPCOM.memmove (dest, buffer, length);
+		XPCOM.nsEmbedCString_delete (aSpec);
+		uri.Release ();
+	}
+	if (dest == null) return ""; //$NON-NLS-1$
+
+	String location = new String (dest);
+	/*
+	 * If the URI indicates that the page is being rendered from memory
+	 * (via setText()) then set it to about:blank to be consistent with IE.
+	 */
+	if (location.equals (URI_FROMMEMORY)) location = ABOUT_BLANK;
+	return location;
+}
+
+public Object getWebBrowser () {
+	if ((browser.getStyle () & SWT.MOZILLA) == 0) return null;
+	if (webBrowserObject != null) return webBrowserObject;
+
+	try {
+		Class clazz = Class.forName ("org.mozilla.xpcom.Mozilla"); //$NON-NLS-1$
+		Method method = clazz.getMethod ("getInstance", new Class[0]); //$NON-NLS-1$
+		Object mozilla = method.invoke (null, new Object[0]);
+		method = clazz.getMethod ("wrapXPCOMObject", new Class[] {Long.TYPE, String.class}); //$NON-NLS-1$
+		webBrowserObject = method.invoke (mozilla, new Object[] {new Long (webBrowser.getAddress ()), nsIWebBrowser.NS_IWEBBROWSER_IID_STR});
+		/*
+		 * The following AddRef() is needed to offset the automatic Release() that
+		 * will be performed by JavaXPCOM when webBrowserObject is finalized.
+		 */
+		webBrowser.AddRef ();
+		return webBrowserObject;
+	} catch (ClassNotFoundException e) {
+	} catch (NoSuchMethodException e) {
+	} catch (IllegalArgumentException e) {
+	} catch (IllegalAccessException e) {
+	} catch (InvocationTargetException e) {
+	}
+	return null;
+}
+
+public boolean isBackEnabled () {
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = webBrowser.QueryInterface (nsIWebNavigation.NS_IWEBNAVIGATION_IID, result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+	
+	nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]);
+	int[] aCanGoBack = new int[1]; /* PRBool */
+	rc = webNavigation.GetCanGoBack (aCanGoBack);	
+	webNavigation.Release ();
+	return aCanGoBack[0] != 0;
+}
+
+public boolean isForwardEnabled () {
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = webBrowser.QueryInterface (nsIWebNavigation.NS_IWEBNAVIGATION_IID, result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+	
+	nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]);
+	int[] aCanGoForward = new int[1]; /* PRBool */
+	rc = webNavigation.GetCanGoForward (aCanGoForward);
+	webNavigation.Release ();
+	return aCanGoForward[0] != 0;
+}
+
+static String error (int code) {
+	throw new SWTError ("XPCOM error " + code); //$NON-NLS-1$
+}
+
+void onDispose (Display display) {
+	int rc = webBrowser.RemoveWebBrowserListener (weakReference.getAddress (), nsIWebProgressListener.NS_IWEBPROGRESSLISTENER_IID);
+	if (rc != XPCOM.NS_OK) error (rc);
+
+	rc = webBrowser.SetParentURIContentListener (0);
+	if (rc != XPCOM.NS_OK) error (rc);
+	
+	rc = webBrowser.SetContainerWindow (0);
+	if (rc != XPCOM.NS_OK) error (rc);
+
+	unhookDOMListeners ();
+	if (listener != null) {
+		int[] folderEvents = new int[] {
+			SWT.Dispose,
+			SWT.Resize,  
+			SWT.FocusIn,
+			SWT.Activate,
+			SWT.Deactivate,
+			SWT.Show,
+			SWT.KeyDown,
+		};
+		for (int i = 0; i < folderEvents.length; i++) {
+			browser.removeListener (folderEvents[i], listener);
+		}
+		listener = null;
+	}
+
+	int /*long*/[] result = new int /*long*/[1];
+	rc = webBrowser.QueryInterface (nsIBaseWindow.NS_IBASEWINDOW_IID, result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+
+	nsIBaseWindow baseWindow = new nsIBaseWindow (result[0]);
+	rc = baseWindow.Destroy ();
+	if (rc != XPCOM.NS_OK) error (rc);
+	baseWindow.Release ();
+
+	Release ();
+	webBrowser.Release ();
+	webBrowser = null;
+	webBrowserObject = null;
+	lastNavigateURL = null;
+	htmlBytes = null;
+
+	if (tip != null && !tip.isDisposed ()) tip.dispose ();
+	tip = null;
+	location = size = null;
+
+	Enumeration elements = unhookedDOMWindows.elements ();
+	while (elements.hasMoreElements ()) {
+		LONG ptrObject = (LONG)elements.nextElement ();
+		new nsISupports (ptrObject.value).Release ();
+	}
+	unhookedDOMWindows = null;
+
+	elements = functions.elements ();
+	while (elements.hasMoreElements ()) {
+		BrowserFunction function = ((BrowserFunction)elements.nextElement ());
+		AllFunctions.remove (new Integer (function.index));
+		function.dispose (false);
+	}
+	functions = null;
+
+	delegate.onDispose (embedHandle);
+	delegate = null;
+
+	embedHandle = 0;
+	BrowserCount--;
+}
+
+void Activate () {
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = webBrowser.QueryInterface (nsIWebBrowserFocus.NS_IWEBBROWSERFOCUS_IID, result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+	
+	nsIWebBrowserFocus webBrowserFocus = new nsIWebBrowserFocus (result[0]);
+	rc = webBrowserFocus.Activate ();
+	if (rc != XPCOM.NS_OK) error (rc);
+	webBrowserFocus.Release ();
+}
+
+void Deactivate () {
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = webBrowser.QueryInterface (nsIWebBrowserFocus.NS_IWEBBROWSERFOCUS_IID, result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+	
+	nsIWebBrowserFocus webBrowserFocus = new nsIWebBrowserFocus (result[0]);
+	rc = webBrowserFocus.Deactivate ();
+	if (rc != XPCOM.NS_OK) error (rc);
+	webBrowserFocus.Release ();
+}
+
+void onResize () {
+	Rectangle rect = browser.getClientArea ();
+	int width = Math.max (1, rect.width);
+	int height = Math.max (1, rect.height);
+
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = webBrowser.QueryInterface (nsIBaseWindow.NS_IBASEWINDOW_IID, result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+
+	delegate.setSize (embedHandle, width, height);
+	nsIBaseWindow baseWindow = new nsIBaseWindow (result[0]);
+	rc = baseWindow.SetPositionAndSize (0, 0, width, height, 1);
+	if (rc != XPCOM.NS_OK) error (rc);
+	baseWindow.Release ();
+}
+
+public void refresh () {
+	htmlBytes = null;
+
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = webBrowser.QueryInterface (nsIWebNavigation.NS_IWEBNAVIGATION_IID, result);
+	if (rc != XPCOM.NS_OK) error(rc);
+	if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+	
+	nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]);		 	
+	rc = webNavigation.Reload (nsIWebNavigation.LOAD_FLAGS_NONE);
+	webNavigation.Release ();
+	if (rc == XPCOM.NS_OK) return;
+	/*
+	* Feature in Mozilla.  Reload returns an error code NS_ERROR_INVALID_POINTER
+	* when it is called immediately after a request to load a new document using
+	* LoadURI.  The workaround is to ignore this error code.
+	*
+	* Feature in Mozilla.  Attempting to reload a file that no longer exists
+	* returns an error code of NS_ERROR_FILE_NOT_FOUND.  This is equivalent to
+	* attempting to load a non-existent local url, which is not a Browser error,
+	* so this error code should be ignored. 
+	*/
+	if (rc != XPCOM.NS_ERROR_INVALID_POINTER && rc != XPCOM.NS_ERROR_FILE_NOT_FOUND) error (rc);
+}
+
+void registerFunction (BrowserFunction function) {
+	super.registerFunction (function);
+	AllFunctions.put (new Integer (function.index), function);
+}
+
+public boolean setText (String html) {
+	/*
+	*  Feature in Mozilla.  The focus memory of Mozilla must be 
+	*  properly managed through the nsIWebBrowserFocus interface.
+	*  In particular, nsIWebBrowserFocus.deactivate must be called
+	*  when the focus moves from the browser (or one of its children
+	*  managed by Mozilla to another widget.  We currently do not
+	*  get notified when a widget takes focus away from the Browser.
+	*  As a result, deactivate is not properly called. This causes
+	*  Mozilla to retake focus the next time a document is loaded.
+	*  This breaks the case where the HTML loaded in the Browser 
+	*  varies while the user enters characters in a text widget. The text
+	*  widget loses focus every time new content is loaded.
+	*  The current workaround is to call deactivate everytime if 
+	*  the browser currently does not have focus. A better workaround
+	*  would be to have a way to call deactivate when the Browser
+	*  or one of its children loses focus.
+	*/
+	if (browser != browser.getDisplay ().getFocusControl ()) Deactivate ();
+	
+	/* convert the String containing HTML to an array of bytes with UTF-8 data */
+	byte[] data = null;
+	try {
+		data = html.getBytes ("UTF-8"); //$NON-NLS-1$
+	} catch (UnsupportedEncodingException e) {
+		return false;
+	}
+
+	/*
+	 * This could be the first content that is set into the browser, so
+	 * ensure that the custom subclass that works around Mozilla bug
+	 * https://bugzilla.mozilla.org/show_bug.cgi?id=453523 is removed.
+	 */
+	delegate.removeWindowSubclass ();
+
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = webBrowser.QueryInterface (nsIWebBrowserStream.NS_IWEBBROWSERSTREAM_IID, result);
+	if (rc == XPCOM.NS_OK && result[0] != 0) {
+		/*
+		* Setting mozilla's content through nsIWebBrowserStream does not cause a page
+		* load to occur, so the events that usually accompany a page change are not
+		* fired.  To make this behave as expected, navigate to about:blank first and
+		* then set the html content once the page has loaded.
+		*/
+		new nsISupports (result[0]).Release ();
+		result[0] = 0;
+
+		/*
+		* If htmlBytes is not null then the about:blank page is already being loaded,
+		* so no Navigate is required.  Just set the html that is to be shown.
+		*/
+		boolean blankLoading = htmlBytes != null;
+		htmlBytes = data;
+		if (blankLoading) return true;
+
+		/* navigate to about:blank */
+		rc = webBrowser.QueryInterface (nsIWebNavigation.NS_IWEBNAVIGATION_IID, result);
+		if (rc != XPCOM.NS_OK) error (rc);
+		if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+		nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]);
+		result[0] = 0;
+	    char[] uri = new char[ABOUT_BLANK.length () + 1];
+	    ABOUT_BLANK.getChars (0, ABOUT_BLANK.length (), uri, 0);
+		rc = webNavigation.LoadURI (uri, nsIWebNavigation.LOAD_FLAGS_NONE, 0, 0, 0);
+		if (rc != XPCOM.NS_OK) error (rc);
+		webNavigation.Release ();
+	} else {
+		byte[] contentCharsetBuffer = MozillaDelegate.wcsToMbcs (null, "UTF-8", true);	//$NON-NLS-1$
+		int /*long*/ aContentCharset = XPCOM.nsEmbedCString_new (contentCharsetBuffer, contentCharsetBuffer.length);
+		byte[] contentTypeBuffer = MozillaDelegate.wcsToMbcs (null, "text/html", true); // $NON-NLS-1$
+		int /*long*/ aContentType = XPCOM.nsEmbedCString_new (contentTypeBuffer, contentTypeBuffer.length);
+
+		rc = XPCOM.NS_GetServiceManager (result);
+		if (rc != XPCOM.NS_OK) error (rc);
+		if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+
+		nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
+		result[0] = 0;
+		rc = serviceManager.GetService (XPCOM.NS_IOSERVICE_CID, nsIIOService.NS_IIOSERVICE_IID, result);
+		if (rc != XPCOM.NS_OK) error (rc);
+		if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+		serviceManager.Release ();
+
+		nsIIOService ioService = new nsIIOService (result[0]);
+		result[0] = 0;
+		/*
+		* Note.  Mozilla ignores LINK tags used to load CSS stylesheets
+		* when the URI protocol for the nsInputStreamChannel
+		* is about:blank.  The fix is to specify the file protocol.
+		*/
+		byte[] aString = MozillaDelegate.wcsToMbcs (null, URI_FROMMEMORY, false);
+		int /*long*/ aSpec = XPCOM.nsEmbedCString_new (aString, aString.length);
+		rc = ioService.NewURI (aSpec, null, 0, result);
+		if (rc != XPCOM.NS_OK) error (rc);
+		if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+		XPCOM.nsEmbedCString_delete (aSpec);
+		ioService.Release ();
+
+		nsIURI uri = new nsIURI (result[0]);
+		result[0] = 0;
+
+		rc = webBrowser.QueryInterface (nsIInterfaceRequestor.NS_IINTERFACEREQUESTOR_IID, result);
+		if (rc != XPCOM.NS_OK) error (rc);
+		if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+		nsIInterfaceRequestor interfaceRequestor = new nsIInterfaceRequestor (result[0]);
+		result[0] = 0;
+
+		/*
+		* Feature in Mozilla. LoadStream invokes the nsIInputStream argument
+		* through a different thread.  The callback mechanism must attach 
+		* a non java thread to the JVM otherwise the nsIInputStream Read and
+		* Close methods never get called.
+		*/
+		InputStream inputStream = new InputStream (data);
+		inputStream.AddRef ();
+
+		rc = interfaceRequestor.GetInterface (nsIDocShell.NS_IDOCSHELL_IID, result);
+		if (rc != XPCOM.NS_OK) error (rc);
+		if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+		nsIDocShell docShell = new nsIDocShell (result[0]);
+		result[0] = 0;
+		rc = docShell.LoadStream (inputStream.getAddress (), uri.getAddress (), aContentType,  aContentCharset, 0);
+		docShell.Release ();
+
+		inputStream.Release ();
+		interfaceRequestor.Release ();
+		uri.Release ();
+		XPCOM.nsEmbedCString_delete (aContentType);
+		XPCOM.nsEmbedCString_delete (aContentCharset);
+	}
+	return true;
+}
+
+public boolean setUrl (String url) {
+	htmlBytes = null;
+
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = webBrowser.QueryInterface (nsIWebNavigation.NS_IWEBNAVIGATION_IID, result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+
+	/*
+	 * This could be the first content that is set into the browser, so
+	 * ensure that the custom subclass that works around Mozilla bug
+	 * https://bugzilla.mozilla.org/show_bug.cgi?id=453523 is removed.
+	 */
+	delegate.removeWindowSubclass ();
+
+	nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]);
+    char[] uri = new char[url.length () + 1];
+    url.getChars (0, url.length (), uri, 0);
+	rc = webNavigation.LoadURI (uri, nsIWebNavigation.LOAD_FLAGS_NONE, 0, 0, 0);
+	webNavigation.Release ();
+	return rc == XPCOM.NS_OK;
+}
+
+public void stop () {
+	htmlBytes = null;
+
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = webBrowser.QueryInterface (nsIWebNavigation.NS_IWEBNAVIGATION_IID, result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+	
+	nsIWebNavigation webNavigation = new nsIWebNavigation (result[0]);	 	
+	rc = webNavigation.Stop (nsIWebNavigation.STOP_ALL);
+	if (rc != XPCOM.NS_OK) error (rc);
+	webNavigation.Release ();
+}
+
+void hookDOMListeners (nsIDOMEventTarget target, boolean isTop) {
+	nsEmbedString string = new nsEmbedString (XPCOM.DOMEVENT_FOCUS);
+	target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+	string.dispose ();
+	string = new nsEmbedString (XPCOM.DOMEVENT_UNLOAD);
+	target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+	string.dispose ();
+	string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEDOWN);
+	target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+	string.dispose ();
+	string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEUP);
+	target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+	string.dispose ();
+	string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEMOVE);
+	target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+	string.dispose ();
+	string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEWHEEL);
+	target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+	string.dispose ();
+	string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEDRAG);
+	target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+	string.dispose ();
+
+	/*
+	* Only hook mouseover and mouseout if the target is a top-level frame, so that mouse moves
+	* between frames will not generate events.
+	*/
+	if (isTop && delegate.hookEnterExit ()) {
+		string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEOVER);
+		target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+		string.dispose ();
+		string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEOUT);
+		target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+		string.dispose ();
+	}
+
+	string = new nsEmbedString (XPCOM.DOMEVENT_KEYDOWN);
+	target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+	string.dispose ();
+	string = new nsEmbedString (XPCOM.DOMEVENT_KEYPRESS);
+	target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+	string.dispose ();
+	string = new nsEmbedString (XPCOM.DOMEVENT_KEYUP);
+	target.AddEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+	string.dispose ();
+}
+
+void unhookDOMListeners () {
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = webBrowser.GetContentDOMWindow (result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+
+	nsIDOMWindow window = new nsIDOMWindow (result[0]);
+	result[0] = 0;
+	rc = window.QueryInterface (nsIDOMEventTarget.NS_IDOMEVENTTARGET_IID, result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+
+	nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]);
+	result[0] = 0;
+	unhookDOMListeners (target);
+	target.Release ();
+
+	/* Listeners must be unhooked in pages contained in frames */
+	rc = window.GetFrames (result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+	nsIDOMWindowCollection frames = new nsIDOMWindowCollection (result[0]);
+	result[0] = 0;
+	int[] frameCount = new int[1];
+	rc = frames.GetLength (frameCount); /* PRUint32 */
+	if (rc != XPCOM.NS_OK) error (rc);
+	int count = frameCount[0];
+
+	if (count > 0) {
+		for (int i = 0; i < count; i++) {
+			rc = frames.Item (i, result);
+			if (rc != XPCOM.NS_OK) error (rc);
+			if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+
+			nsIDOMWindow frame = new nsIDOMWindow (result[0]);
+			result[0] = 0;
+			rc = frame.QueryInterface (nsIDOMEventTarget.NS_IDOMEVENTTARGET_IID, result);
+			if (rc != XPCOM.NS_OK) error (rc);
+			if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+
+			target = new nsIDOMEventTarget (result[0]);
+			result[0] = 0;
+			unhookDOMListeners (target);
+			target.Release ();
+			frame.Release ();
+		}
+	}
+	frames.Release ();
+	window.Release ();
+}
+
+void unhookDOMListeners (nsIDOMEventTarget target) {
+	nsEmbedString string = new nsEmbedString (XPCOM.DOMEVENT_FOCUS);
+	target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+	string.dispose ();
+	string = new nsEmbedString (XPCOM.DOMEVENT_UNLOAD);
+	target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+	string.dispose ();
+	string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEDOWN);
+	target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+	string.dispose ();
+	string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEUP);
+	target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+	string.dispose ();
+	string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEMOVE);
+	target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+	string.dispose ();
+	string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEWHEEL);
+	target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+	string.dispose ();
+	string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEDRAG);
+	target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+	string.dispose ();
+	string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEOVER);
+	target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+	string.dispose ();
+	string = new nsEmbedString (XPCOM.DOMEVENT_MOUSEOUT);
+	target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+	string.dispose ();
+	string = new nsEmbedString (XPCOM.DOMEVENT_KEYDOWN);
+	target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+	string.dispose ();
+	string = new nsEmbedString (XPCOM.DOMEVENT_KEYPRESS);
+	target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+	string.dispose ();
+	string = new nsEmbedString (XPCOM.DOMEVENT_KEYUP);
+	target.RemoveEventListener (string.getAddress (), domEventListener.getAddress (), 0);
+	string.dispose ();
+}
+
+/* nsISupports */
+
+int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return XPCOM.NS_ERROR_NO_INTERFACE;
+
+	nsID guid = new nsID ();
+	XPCOM.memmove (guid, riid, nsID.sizeof);
+
+	if (guid.Equals (nsISupports.NS_ISUPPORTS_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {supports.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIWeakReference.NS_IWEAKREFERENCE_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {weakReference.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIWebProgressListener.NS_IWEBPROGRESSLISTENER_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {webProgressListener.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIWebBrowserChrome.NS_IWEBBROWSERCHROME_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {webBrowserChrome.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIWebBrowserChromeFocus.NS_IWEBBROWSERCHROMEFOCUS_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {webBrowserChromeFocus.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIEmbeddingSiteWindow.NS_IEMBEDDINGSITEWINDOW_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {embeddingSiteWindow.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIInterfaceRequestor.NS_IINTERFACEREQUESTOR_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {interfaceRequestor.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsISupportsWeakReference.NS_ISUPPORTSWEAKREFERENCE_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {supportsWeakReference.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIContextMenuListener.NS_ICONTEXTMENULISTENER_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {contextMenuListener.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIURIContentListener.NS_IURICONTENTLISTENER_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {uriContentListener.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsITooltipListener.NS_ITOOLTIPLISTENER_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {tooltipListener.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	XPCOM.memmove (ppvObject, new int /*long*/[] {0}, C.PTR_SIZEOF);
+	return XPCOM.NS_ERROR_NO_INTERFACE;
+}
+
+int AddRef () {
+	refCount++;
+	return refCount;
+}
+
+int Release () {
+	refCount--;
+	if (refCount == 0) disposeCOMInterfaces ();
+	return refCount;
+}
+
+/* nsIWeakReference */	
+	
+int QueryReferent (int /*long*/ riid, int /*long*/ ppvObject) {
+	return QueryInterface (riid, ppvObject);
+}
+
+/* nsIInterfaceRequestor */
+
+int GetInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return XPCOM.NS_ERROR_NO_INTERFACE;
+	nsID guid = new nsID ();
+	XPCOM.memmove (guid, riid, nsID.sizeof);
+	if (guid.Equals (nsIDOMWindow.NS_IDOMWINDOW_IID)) {
+		int /*long*/[] aContentDOMWindow = new int /*long*/[1];
+		int rc = webBrowser.GetContentDOMWindow (aContentDOMWindow);
+		if (rc != XPCOM.NS_OK) error (rc);
+		if (aContentDOMWindow[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+		XPCOM.memmove (ppvObject, aContentDOMWindow, C.PTR_SIZEOF);
+		return rc;
+	}
+	return QueryInterface (riid, ppvObject);
+}
+
+int GetWeakReference (int /*long*/ ppvObject) {
+	XPCOM.memmove (ppvObject, new int /*long*/[] {weakReference.getAddress ()}, C.PTR_SIZEOF);
+	AddRef ();
+	return XPCOM.NS_OK;
+}
+
+/* nsIWebProgressListener */
+
+int OnStateChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int aStateFlags, int aStatus) {
+	if ((aStateFlags & nsIWebProgressListener.STATE_IS_DOCUMENT) == 0) return XPCOM.NS_OK;
+	if ((aStateFlags & nsIWebProgressListener.STATE_START) != 0) {
+		if (request == 0) request = aRequest;
+		/*
+		 * Add the page's nsIDOMWindow to the collection of windows that will
+		 * have DOM listeners added to them later on in the page loading
+		 * process.  These listeners cannot be added yet because the
+		 * nsIDOMWindow is not ready to take them at this stage.
+		 */
+		int /*long*/[] result = new int /*long*/[1];
+		nsIWebProgress progress = new nsIWebProgress (aWebProgress);
+		int rc = progress.GetDOMWindow (result);
+		if (rc != XPCOM.NS_OK) error (rc);
+		if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+		unhookedDOMWindows.addElement (new LONG (result[0]));
+	} else if ((aStateFlags & nsIWebProgressListener.STATE_REDIRECTING) != 0) {
+		if (request == aRequest) request = 0;
+	} else if ((aStateFlags & nsIWebProgressListener.STATE_STOP) != 0) {
+		/*
+		* If this page's nsIDOMWindow handle is still in unhookedDOMWindows then
+		* add its DOM listeners now.  It's possible for this to happen since
+		* there is no guarantee that a STATE_TRANSFERRING state change will be
+		* received for every window in a page, which is when these listeners
+		* are typically added.
+		*/
+		int /*long*/[] result = new int /*long*/[1];
+		nsIWebProgress progress = new nsIWebProgress (aWebProgress);
+		int rc = progress.GetDOMWindow (result);
+		if (rc != XPCOM.NS_OK) error (rc);
+		if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+		nsIDOMWindow domWindow = new nsIDOMWindow (result[0]);
+
+		LONG ptrObject = new LONG (result[0]);
+		result[0] = 0;
+		int index = unhookedDOMWindows.indexOf (ptrObject);
+		if (index != -1) {
+			rc = webBrowser.GetContentDOMWindow (result);
+			if (rc != XPCOM.NS_OK) error (rc);
+			if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+			boolean isTop = result[0] == domWindow.getAddress ();
+			new nsISupports (result[0]).Release ();
+			result[0] = 0;
+
+			rc = domWindow.QueryInterface (nsIDOMEventTarget.NS_IDOMEVENTTARGET_IID, result);
+			if (rc != XPCOM.NS_OK) error (rc);
+			if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+
+			nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]);
+			result[0] = 0;
+			hookDOMListeners (target, isTop);
+			target.Release ();
+
+			/*
+			* Remove and unreference the nsIDOMWindow from the collection of windows
+			* that are waiting to have DOM listeners hooked on them. 
+			*/
+			unhookedDOMWindows.remove (ptrObject);
+			new nsISupports (ptrObject.value).Release ();
+		}
+
+		/*
+		 * If htmlBytes is not null then there is html from a previous setText() call
+		 * waiting to be set into the about:blank page once it has completed loading. 
+		 */
+		if (htmlBytes != null) {
+			nsIRequest req = new nsIRequest (aRequest);
+			int /*long*/ name = XPCOM.nsEmbedCString_new ();
+			rc = req.GetName (name);
+			if (rc != XPCOM.NS_OK) error (rc);
+			int length = XPCOM.nsEmbedCString_Length (name);
+			int /*long*/ buffer = XPCOM.nsEmbedCString_get (name);
+			byte[] dest = new byte[length];
+			XPCOM.memmove (dest, buffer, length);
+			String url = new String (dest);
+			XPCOM.nsEmbedCString_delete (name);
+
+			if (url.startsWith (ABOUT_BLANK)) {
+				/*
+				 * Setting mozilla's content with nsIWebBrowserStream invalidates the 
+				 * DOM listeners that were hooked on it (about:blank), so remove them and
+				 * add new ones after the content has been set.
+				 */
+				unhookDOMListeners ();
+
+				rc = XPCOM.NS_GetServiceManager (result);
+				if (rc != XPCOM.NS_OK) error (rc);
+				if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+
+				nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
+				result[0] = 0;
+				rc = serviceManager.GetService (XPCOM.NS_IOSERVICE_CID, nsIIOService.NS_IIOSERVICE_IID, result);
+				if (rc != XPCOM.NS_OK) error (rc);
+				if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+				serviceManager.Release ();
+
+				nsIIOService ioService = new nsIIOService (result[0]);
+				result[0] = 0;
+				/*
+				* Note.  Mozilla ignores LINK tags used to load CSS stylesheets
+				* when the URI protocol for the nsInputStreamChannel
+				* is about:blank.  The fix is to specify the file protocol.
+				*/
+				byte[] aString = MozillaDelegate.wcsToMbcs (null, URI_FROMMEMORY, false);
+				int /*long*/ aSpec = XPCOM.nsEmbedCString_new (aString, aString.length);
+				rc = ioService.NewURI (aSpec, null, 0, result);
+				if (rc != XPCOM.NS_OK) error (rc);
+				if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+				XPCOM.nsEmbedCString_delete (aSpec);
+				ioService.Release ();
+
+				nsIURI uri = new nsIURI (result[0]);
+				result[0] = 0;
+
+				rc = webBrowser.QueryInterface (nsIWebBrowserStream.NS_IWEBBROWSERSTREAM_IID, result);
+				if (rc != XPCOM.NS_OK) error (rc);
+				if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+
+				nsIWebBrowserStream stream = new nsIWebBrowserStream (result[0]);
+				result[0] = 0;
+
+				byte[] contentTypeBuffer = MozillaDelegate.wcsToMbcs (null, "text/html", true); // $NON-NLS-1$
+				int /*long*/ aContentType = XPCOM.nsEmbedCString_new (contentTypeBuffer, contentTypeBuffer.length);
+
+				rc = stream.OpenStream (uri.getAddress (), aContentType);
+				if (rc != XPCOM.NS_OK) error (rc);
+				int /*long*/ ptr = C.malloc (htmlBytes.length);
+				XPCOM.memmove (ptr, htmlBytes, htmlBytes.length);
+				int pageSize = 8192;
+				int pageCount = htmlBytes.length / pageSize + 1;
+				int /*long*/ current = ptr;
+				for (int i = 0; i < pageCount; i++) {
+					length = i == pageCount - 1 ? htmlBytes.length % pageSize : pageSize;
+					if (length > 0) {
+						rc = stream.AppendToStream (current, length);
+						if (rc != XPCOM.NS_OK) error (rc);
+					}
+					current += pageSize;
+				}
+				rc = stream.CloseStream ();
+				if (rc != XPCOM.NS_OK) error (rc);
+				C.free (ptr);
+				XPCOM.nsEmbedCString_delete (aContentType);
+				stream.Release ();
+				uri.Release ();
+				htmlBytes = null;
+
+				rc = webBrowser.GetContentDOMWindow (result);
+				if (rc != XPCOM.NS_OK) error (rc);
+				if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+				boolean isTop = result[0] == domWindow.getAddress ();
+				new nsISupports (result[0]).Release ();
+				result[0] = 0;
+
+				rc = domWindow.QueryInterface (nsIDOMEventTarget.NS_IDOMEVENTTARGET_IID, result);
+				if (rc != XPCOM.NS_OK) error (rc);
+				if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+				nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]);
+				result[0] = 0;
+				hookDOMListeners (target, isTop);
+				target.Release ();
+			}
+		}
+		domWindow.Release ();
+
+		/*
+		* Feature in Mozilla.  When a request is redirected (STATE_REDIRECTING),
+		* it never reaches the state STATE_STOP and it is replaced with a new request.
+		* The new request is received when it is in the state STATE_STOP.
+		* To handle this case,  the variable request is set to 0 when the corresponding
+		* request is redirected. The following request received with the state STATE_STOP
+		* - the new request resulting from the redirection - is used to send
+		* the ProgressListener.completed event.
+		*/
+		if (request == aRequest || request == 0) {
+			request = 0;
+			StatusTextEvent event = new StatusTextEvent (browser);
+			event.display = browser.getDisplay ();
+			event.widget = browser;
+			event.text = ""; //$NON-NLS-1$
+			for (int i = 0; i < statusTextListeners.length; i++) {
+				statusTextListeners[i].changed (event);
+			}
+
+			/* re-install registered functions */
+			Enumeration elements = functions.elements ();
+			while (elements.hasMoreElements ()) {
+				BrowserFunction function = (BrowserFunction)elements.nextElement ();
+				execute (function.functionString);
+			}
+
+			ProgressEvent event2 = new ProgressEvent (browser);
+			event2.display = browser.getDisplay ();
+			event2.widget = browser;
+			for (int i = 0; i < progressListeners.length; i++) {
+				progressListeners[i].completed (event2);
+			}
+		}
+	} else if ((aStateFlags & nsIWebProgressListener.STATE_TRANSFERRING) != 0) {
+		/*
+		* Hook DOM listeners to the page's nsIDOMWindow here because this is
+		* the earliest opportunity to do so.    
+		*/
+		int /*long*/[] result = new int /*long*/[1];
+		nsIWebProgress progress = new nsIWebProgress (aWebProgress);
+		int rc = progress.GetDOMWindow (result);
+		if (rc != XPCOM.NS_OK) error (rc);
+		if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+		nsIDOMWindow domWindow = new nsIDOMWindow (result[0]);
+
+		LONG ptrObject = new LONG (result[0]);
+		result[0] = 0;
+		int index = unhookedDOMWindows.indexOf (ptrObject);
+		if (index != -1) {
+			rc = webBrowser.GetContentDOMWindow (result);
+			if (rc != XPCOM.NS_OK) error (rc);
+			if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+			boolean isTop = result[0] == domWindow.getAddress ();
+			new nsISupports (result[0]).Release ();
+			result[0] = 0;
+
+			rc = domWindow.QueryInterface (nsIDOMEventTarget.NS_IDOMEVENTTARGET_IID, result);
+			if (rc != XPCOM.NS_OK) error (rc);
+			if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+
+			nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]);
+			result[0] = 0;
+			hookDOMListeners (target, isTop);
+			target.Release ();
+
+			/*
+			* Remove and unreference the nsIDOMWindow from the collection of windows
+			* that are waiting to have DOM listeners hooked on them. 
+			*/
+			unhookedDOMWindows.remove (ptrObject);
+			new nsISupports (ptrObject.value).Release ();
+		}
+		domWindow.Release ();
+	}
+	return XPCOM.NS_OK;
+}
+
+int OnProgressChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int aCurSelfProgress, int aMaxSelfProgress, int aCurTotalProgress, int aMaxTotalProgress) {
+	if (progressListeners.length == 0) return XPCOM.NS_OK;
+	ProgressEvent event = new ProgressEvent (browser);
+	event.display = browser.getDisplay ();
+	event.widget = browser;
+	event.current = aCurTotalProgress;
+	event.total = aMaxTotalProgress;
+	for (int i = 0; i < progressListeners.length; i++) {
+		progressListeners[i].changed (event);
+	}
+	return XPCOM.NS_OK;
+}
+
+int OnLocationChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int /*long*/ aLocation) {
+	/*
+	* Feature in Mozilla.  When a page is loaded via setText before a previous
+	* setText page load has completed, the expected OnStateChange STATE_STOP for the
+	* original setText never arrives because it gets replaced by the OnStateChange
+	* STATE_STOP for the new request.  This results in the request field never being
+	* cleared because the original request's OnStateChange STATE_STOP is still expected
+	* (but never arrives).  To handle this case, the request field is updated to the new
+	* overriding request since its OnStateChange STATE_STOP will be received next.
+	*/
+	if (request != 0 && request != aRequest) request = aRequest;
+
+	if (locationListeners.length == 0) return XPCOM.NS_OK;
+
+	nsIWebProgress webProgress = new nsIWebProgress (aWebProgress);
+	int /*long*/[] aDOMWindow = new int /*long*/[1];
+	int rc = webProgress.GetDOMWindow (aDOMWindow);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (aDOMWindow[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+	
+	nsIDOMWindow domWindow = new nsIDOMWindow (aDOMWindow[0]);
+	int /*long*/[] aTop = new int /*long*/[1];
+	rc = domWindow.GetTop (aTop);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (aTop[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+	domWindow.Release ();
+	
+	nsIDOMWindow topWindow = new nsIDOMWindow (aTop[0]);
+	topWindow.Release ();
+	
+	nsIURI location = new nsIURI (aLocation);
+	int /*long*/ aSpec = XPCOM.nsEmbedCString_new ();
+	location.GetSpec (aSpec);
+	int length = XPCOM.nsEmbedCString_Length (aSpec);
+	int /*long*/ buffer = XPCOM.nsEmbedCString_get (aSpec);
+	byte[] dest = new byte[length];
+	XPCOM.memmove (dest, buffer, length);
+	XPCOM.nsEmbedCString_delete (aSpec);
+	String url = new String (dest);
+
+	/*
+	 * As of Mozilla 1.8, the first time that a page is displayed, regardless of
+	 * whether it's via Browser.setURL() or Browser.setText(), the GRE navigates
+	 * to about:blank and fires the corresponding navigation events.  Do not send
+	 * this event on to the user since it is not expected.
+	 */
+	if (!IsPre_1_8 && aRequest == 0 && url.startsWith (ABOUT_BLANK)) return XPCOM.NS_OK;
+
+	LocationEvent event = new LocationEvent (browser);
+	event.display = browser.getDisplay ();
+	event.widget = browser;
+	event.location = url;
+	/*
+	 * If the URI indicates that the page is being rendered from memory
+	 * (via setText()) then set it to about:blank to be consistent with IE.
+	 */
+	if (event.location.equals (URI_FROMMEMORY)) event.location = ABOUT_BLANK;
+	event.top = aTop[0] == aDOMWindow[0];
+	for (int i = 0; i < locationListeners.length; i++) {
+		locationListeners[i].changed (event);
+	}
+	return XPCOM.NS_OK;
+}
+
+int OnStatusChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int aStatus, int /*long*/ aMessage) {
+	if (statusTextListeners.length == 0) return XPCOM.NS_OK;
+	StatusTextEvent event = new StatusTextEvent (browser);
+	event.display = browser.getDisplay ();
+	event.widget = browser;
+	int length = XPCOM.strlen_PRUnichar (aMessage);
+	char[] dest = new char[length];
+	XPCOM.memmove (dest, aMessage, length * 2);
+	event.text = new String (dest);
+	for (int i = 0; i < statusTextListeners.length; i++) {
+		statusTextListeners[i].changed (event);
+	}
+	return XPCOM.NS_OK;
+}		
+
+int OnSecurityChange (int /*long*/ aWebProgress, int /*long*/ aRequest, int state) {
+	return XPCOM.NS_OK;
+}
+
+/* nsIWebBrowserChrome */
+
+int SetStatus (int statusType, int /*long*/ status) {
+	if (statusTextListeners.length == 0) return XPCOM.NS_OK;
+	StatusTextEvent event = new StatusTextEvent (browser);
+	event.display = browser.getDisplay ();
+	event.widget = browser;
+	int length = XPCOM.strlen_PRUnichar (status);
+	char[] dest = new char[length];
+	XPCOM.memmove (dest, status, length * 2);
+	String string = new String (dest);
+	event.text = string;
+	for (int i = 0; i < statusTextListeners.length; i++) {
+		statusTextListeners[i].changed (event);
+	}
+	return XPCOM.NS_OK;
+}
+
+int GetWebBrowser (int /*long*/ aWebBrowser) {
+	int /*long*/[] ret = new int /*long*/[1];	
+	if (webBrowser != null) {
+		webBrowser.AddRef ();
+		ret[0] = webBrowser.getAddress ();	
+	}
+	XPCOM.memmove (aWebBrowser, ret, C.PTR_SIZEOF);
+	return XPCOM.NS_OK;
+}
+
+int SetWebBrowser (int /*long*/ aWebBrowser) {
+	if (webBrowser != null) webBrowser.Release ();
+	webBrowser = aWebBrowser != 0 ? new nsIWebBrowser (aWebBrowser) : null;  				
+	return XPCOM.NS_OK;
+}
+   
+int GetChromeFlags (int /*long*/ aChromeFlags) {
+	int[] ret = new int[1];
+	ret[0] = chromeFlags;
+	XPCOM.memmove (aChromeFlags, ret, 4); /* PRUint32 */
+	return XPCOM.NS_OK;
+}
+
+int SetChromeFlags (int aChromeFlags) {
+	chromeFlags = aChromeFlags;
+	return XPCOM.NS_OK;
+}
+
+int DestroyBrowserWindow () {
+	WindowEvent newEvent = new WindowEvent (browser);
+	newEvent.display = browser.getDisplay ();
+	newEvent.widget = browser;
+	for (int i = 0; i < closeWindowListeners.length; i++) {
+		closeWindowListeners[i].close (newEvent);
+	}
+	/*
+	* Note on Mozilla.  The DestroyBrowserWindow notification cannot be cancelled.
+	* The browser widget cannot be used after this notification has been received.
+	* The application is advised to close the window hosting the browser widget.
+	* The browser widget must be disposed in all cases.
+	*/
+	browser.dispose ();
+	return XPCOM.NS_OK;
+}
+   	
+int SizeBrowserTo (int aCX, int aCY) {
+	size = new Point (aCX, aCY);
+	boolean isChrome = (chromeFlags & nsIWebBrowserChrome.CHROME_OPENAS_CHROME) != 0;
+	if (isChrome) {
+		Shell shell = browser.getShell ();
+		shell.setSize (shell.computeSize (size.x, size.y));
+	}
+	return XPCOM.NS_OK;
+}
+
+int ShowAsModal () {
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = XPCOM.NS_GetServiceManager (result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+
+	nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
+	result[0] = 0;
+	byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_CONTEXTSTACK_CONTRACTID, true);
+	rc = serviceManager.GetServiceByContractID (aContractID, nsIJSContextStack.NS_IJSCONTEXTSTACK_IID, result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+	serviceManager.Release ();
+
+	nsIJSContextStack stack = new nsIJSContextStack (result[0]);
+	result[0] = 0;
+	rc = stack.Push (0);
+	if (rc != XPCOM.NS_OK) error (rc);
+
+	Shell shell = browser.getShell ();
+	Display display = browser.getDisplay ();
+	while (!shell.isDisposed ()) {
+		if (!display.readAndDispatch ()) display.sleep ();
+	}
+
+	rc = stack.Pop (result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	stack.Release ();
+	return XPCOM.NS_OK;
+}
+
+int IsWindowModal (int /*long*/ retval) {
+	int result = (chromeFlags & nsIWebBrowserChrome.CHROME_MODAL) != 0 ? 1 : 0;
+	XPCOM.memmove (retval, new int[] {result}, 4); /* PRBool */
+	return XPCOM.NS_OK;
+}
+   
+int ExitModalEventLoop (int aStatus) {
+	return XPCOM.NS_OK;
+}
+
+/* nsIEmbeddingSiteWindow */ 
+
+int SetDimensions (int flags, int x, int y, int cx, int cy) {
+	if ((flags & nsIEmbeddingSiteWindow.DIM_FLAGS_POSITION) != 0) {
+		location = new Point (x, y);
+		browser.getShell ().setLocation (x, y);
+	}
+	if ((flags & nsIEmbeddingSiteWindow.DIM_FLAGS_SIZE_INNER) != 0) {
+		browser.setSize (cx, cy);
+	}
+	if ((flags & nsIEmbeddingSiteWindow.DIM_FLAGS_SIZE_OUTER) != 0) {
+		browser.getShell ().setSize (cx, cy);
+	}
+	return XPCOM.NS_OK;
+}
+
+int GetDimensions (int flags, int /*long*/ x, int /*long*/ y, int /*long*/ cx, int /*long*/ cy) {
+	if ((flags & nsIEmbeddingSiteWindow.DIM_FLAGS_POSITION) != 0) {
+		Point location = browser.getShell ().getLocation ();
+		if (x != 0) C.memmove (x, new int[] {location.x}, 4); /* PRInt32 */
+		if (y != 0) C.memmove (y, new int[] {location.y}, 4); /* PRInt32 */
+	}
+	if ((flags & nsIEmbeddingSiteWindow.DIM_FLAGS_SIZE_INNER) != 0) {
+		Point size = browser.getSize ();
+		if (cx != 0) C.memmove (cx, new int[] {size.x}, 4); /* PRInt32 */
+		if (cy != 0) C.memmove (cy, new int[] {size.y}, 4); /* PRInt32 */
+	}
+	if ((flags & nsIEmbeddingSiteWindow.DIM_FLAGS_SIZE_OUTER) != 0) {
+		Point size = browser.getShell().getSize ();
+		if (cx != 0) C.memmove (cx, new int[] {size.x}, 4); /* PRInt32 */
+		if (cy != 0) C.memmove (cy, new int[] {size.y}, 4); /* PRInt32 */
+	}
+	return XPCOM.NS_OK;
+}
+
+int SetFocus () {
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = webBrowser.QueryInterface (nsIBaseWindow.NS_IBASEWINDOW_IID, result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (result[0] == 0) error (XPCOM.NS_ERROR_NO_INTERFACE);
+	
+	nsIBaseWindow baseWindow = new nsIBaseWindow (result[0]);
+	rc = baseWindow.SetFocus ();
+	if (rc != XPCOM.NS_OK) error (rc);
+	baseWindow.Release ();
+
+	/*
+	* Note. Mozilla notifies here that one of the children took
+	* focus. This could or should be used to fire an SWT.FOCUS_IN
+	* event on Browser focus listeners.
+	*/
+	return XPCOM.NS_OK;     	
+}	
+
+int GetVisibility (int /*long*/ aVisibility) {
+	boolean visible = browser.isVisible () && !browser.getShell ().getMinimized ();
+	XPCOM.memmove (aVisibility, new int[] {visible ? 1 : 0}, 4); /* PRBool */
+	return XPCOM.NS_OK;
+}
+
+int SetVisibility (int aVisibility) {
+	if (isChild) {
+		WindowEvent event = new WindowEvent (browser);
+		event.display = browser.getDisplay ();
+		event.widget = browser;
+		if (aVisibility != 0) {
+			/*
+			* Bug in Mozilla.  When the JavaScript window.open is executed, Mozilla
+			* fires multiple SetVisibility 1 notifications.  The workaround is
+			* to ignore subsequent notifications. 
+			*/
+			if (!visible) {
+				visible = true;
+				event.location = location;
+				event.size = size;
+				event.addressBar = (chromeFlags & nsIWebBrowserChrome.CHROME_LOCATIONBAR) != 0;
+				event.menuBar = (chromeFlags & nsIWebBrowserChrome.CHROME_MENUBAR) != 0;
+				event.statusBar = (chromeFlags & nsIWebBrowserChrome.CHROME_STATUSBAR) != 0;
+				event.toolBar = (chromeFlags & nsIWebBrowserChrome.CHROME_TOOLBAR) != 0;
+				for (int i = 0; i < visibilityWindowListeners.length; i++) {
+					visibilityWindowListeners[i].show (event);
+				}
+				location = null;
+				size = null;
+			}
+		} else {
+			visible = false;
+			for (int i = 0; i < visibilityWindowListeners.length; i++) {
+				visibilityWindowListeners[i].hide (event);
+			}
+		}
+	} else {
+		visible = aVisibility != 0;
+	}
+	return XPCOM.NS_OK;     	
+}
+
+int GetTitle (int /*long*/ aTitle) {
+	return XPCOM.NS_OK;     	
+}
+ 
+int SetTitle (int /*long*/ aTitle) {
+	if (titleListeners.length == 0) return XPCOM.NS_OK;
+	TitleEvent event = new TitleEvent (browser);
+	event.display = browser.getDisplay ();
+	event.widget = browser;
+	/*
+	* To be consistent with other platforms the title event should
+	* contain the page's url if the page does not contain a <title>
+	* tag. 
+	*/
+	int length = XPCOM.strlen_PRUnichar (aTitle);
+	if (length > 0) {
+		char[] dest = new char[length];
+		XPCOM.memmove (dest, aTitle, length * 2);
+		event.title = new String (dest);
+	} else {
+		event.title = getUrl ();
+	}
+	for (int i = 0; i < titleListeners.length; i++) {
+		titleListeners[i].changed (event);
+	}
+	return XPCOM.NS_OK;     	
+}
+
+int GetSiteWindow (int /*long*/ aSiteWindow) {
+	/*
+	* Note.  The handle is expected to be an HWND on Windows and
+	* a GtkWidget* on GTK.  This callback is invoked on Windows
+	* when the javascript window.print is invoked and the print
+	* dialog comes up. If no handle is returned, the print dialog
+	* does not come up on this platform.  
+	*/
+	XPCOM.memmove (aSiteWindow, new int /*long*/[] {embedHandle}, C.PTR_SIZEOF);
+	return XPCOM.NS_OK;     	
+}  
+ 
+/* nsIWebBrowserChromeFocus */
+
+int FocusNextElement () {
+	/*
+	* Bug in Mozilla embedding API.  Mozilla takes back the focus after sending
+	* this event.  This prevents tabbing out of Mozilla. This behaviour can be reproduced
+	* with the Mozilla application TestGtkEmbed.  The workaround is to
+	* send the traversal notification after this callback returns.
+	*/
+	browser.getDisplay ().asyncExec (new Runnable () {
+		public void run () {
+			if (browser.isDisposed ()) return;
+			browser.traverse (SWT.TRAVERSE_TAB_NEXT);
+		}
+	});
+	return XPCOM.NS_OK;  
+}
+
+int FocusPrevElement () {
+	/*
+	* Bug in Mozilla embedding API.  Mozilla takes back the focus after sending
+	* this event.  This prevents tabbing out of Mozilla. This behaviour can be reproduced
+	* with the Mozilla application TestGtkEmbed.  The workaround is to
+	* send the traversal notification after this callback returns.
+	*/
+	browser.getDisplay ().asyncExec (new Runnable () {
+		public void run () {
+			if (browser.isDisposed ()) return;
+			browser.traverse (SWT.TRAVERSE_TAB_PREVIOUS);
+		}
+	});
+	return XPCOM.NS_OK;     	
+}
+
+/* nsIContextMenuListener */
+
+int OnShowContextMenu (int aContextFlags, int /*long*/ aEvent, int /*long*/ aNode) {
+	nsIDOMEvent domEvent = new nsIDOMEvent (aEvent);
+	int /*long*/[] result = new int /*long*/[1];
+	int rc = domEvent.QueryInterface (nsIDOMMouseEvent.NS_IDOMMOUSEEVENT_IID, result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+
+	nsIDOMMouseEvent domMouseEvent = new nsIDOMMouseEvent (result[0]);
+	int[] aScreenX = new int[1], aScreenY = new int[1];
+	rc = domMouseEvent.GetScreenX (aScreenX);
+	if (rc != XPCOM.NS_OK) error (rc);
+	rc = domMouseEvent.GetScreenY (aScreenY);
+	if (rc != XPCOM.NS_OK) error (rc);
+	domMouseEvent.Release ();
+	
+	Event event = new Event ();
+	event.x = aScreenX[0];
+	event.y = aScreenY[0];
+	browser.notifyListeners (SWT.MenuDetect, event);
+	if (!event.doit || browser.isDisposed ()) return XPCOM.NS_OK;
+	Menu menu = browser.getMenu ();
+	if (menu != null && !menu.isDisposed ()) {
+		if (aScreenX[0] != event.x || aScreenY[0] != event.y) {
+			menu.setLocation (event.x, event.y);
+		}
+		menu.setVisible (true);
+	}
+	return XPCOM.NS_OK;     	
+}
+
+/* nsIURIContentListener */
+
+int OnStartURIOpen (int /*long*/ aURI, int /*long*/ retval) {
+	authCount = 0;
+
+	nsIURI location = new nsIURI (aURI);
+	int /*long*/ aSpec = XPCOM.nsEmbedCString_new ();
+	location.GetSpec (aSpec);
+	int length = XPCOM.nsEmbedCString_Length (aSpec);
+	int /*long*/ buffer = XPCOM.nsEmbedCString_get (aSpec);
+	buffer = XPCOM.nsEmbedCString_get (aSpec);
+	byte[] dest = new byte[length];
+	XPCOM.memmove (dest, buffer, length);
+	XPCOM.nsEmbedCString_delete (aSpec);
+	String value = new String (dest);
+	boolean doit = true;
+	if (request == 0) {
+		/* 
+		 * listeners should not be notified of internal transitions like "javascript:..."
+		 * because this is an implementation side-effect, not a true navigate
+		 */
+		if (!value.startsWith (PREFIX_JAVASCRIPT)) {
+			if (locationListeners.length > 0) {
+				LocationEvent event = new LocationEvent (browser);
+				event.display = browser.getDisplay();
+				event.widget = browser;
+				event.location = value;
+				/*
+				 * If the URI indicates that the page is being rendered from memory
+				 * (via setText()) then set it to about:blank to be consistent with IE.
+				 */
+				if (event.location.equals (URI_FROMMEMORY)) event.location = ABOUT_BLANK;
+				event.doit = doit;
+				for (int i = 0; i < locationListeners.length; i++) {
+					locationListeners[i].changing (event);
+				}
+				doit = event.doit && !browser.isDisposed();
+			}
+
+			if (doit) {
+				if (jsEnabledChanged) {
+					jsEnabledChanged = false;
+	
+					int /*long*/[] result = new int /*long*/[1];
+					int rc = webBrowser.QueryInterface (nsIWebBrowserSetup.NS_IWEBBROWSERSETUP_IID, result);
+					if (rc != XPCOM.NS_OK) error (rc);
+					if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+	
+					nsIWebBrowserSetup setup = new nsIWebBrowserSetup (result[0]);
+					result[0] = 0;
+					rc = setup.SetProperty (nsIWebBrowserSetup.SETUP_ALLOW_JAVASCRIPT, jsEnabled ? 1 : 0);
+					if (rc != XPCOM.NS_OK) error (rc);
+					setup.Release ();
+				}
+				lastNavigateURL = value;
+			}
+		}
+	}
+	XPCOM.memmove (retval, new int[] {doit ? 0 : 1}, 4); /* PRBool */
+	return XPCOM.NS_OK;
+}
+
+int DoContent (int /*long*/ aContentType, int aIsContentPreferred, int /*long*/ aRequest, int /*long*/ aContentHandler, int /*long*/ retval) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int IsPreferred (int /*long*/ aContentType, int /*long*/ aDesiredContentType, int /*long*/ retval) {
+	boolean preferred = false;
+	int size = XPCOM.strlen (aContentType);
+	if (size > 0) {
+		byte[] typeBytes = new byte[size + 1];
+		XPCOM.memmove (typeBytes, aContentType, size);
+		String contentType = new String (typeBytes, 0, size);
+
+		/* do not attempt to handle known problematic content types */
+		if (!contentType.equals (XPCOM.CONTENT_MAYBETEXT) && !contentType.equals (XPCOM.CONTENT_MULTIPART)) {
+			/* determine whether browser can handle the content type */
+			int /*long*/[] result = new int /*long*/[1];
+			int rc = XPCOM.NS_GetServiceManager (result);
+			if (rc != XPCOM.NS_OK) error (rc);
+			if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+			nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
+			result[0] = 0;
+
+			/* First try to use the nsIWebNavigationInfo if it's available (>= mozilla 1.8) */
+			byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_WEBNAVIGATIONINFO_CONTRACTID, true);
+			rc = serviceManager.GetServiceByContractID (aContractID, nsIWebNavigationInfo.NS_IWEBNAVIGATIONINFO_IID, result);
+			if (rc == XPCOM.NS_OK) {
+				byte[] bytes = MozillaDelegate.wcsToMbcs (null, contentType, true);
+				int /*long*/ typePtr = XPCOM.nsEmbedCString_new (bytes, bytes.length);
+				nsIWebNavigationInfo info = new nsIWebNavigationInfo (result[0]);
+				result[0] = 0;
+				int[] isSupportedResult = new int[1]; /* PRUint32 */
+				rc = info.IsTypeSupported (typePtr, 0, isSupportedResult);
+				if (rc != XPCOM.NS_OK) error (rc);
+				info.Release ();
+				XPCOM.nsEmbedCString_delete (typePtr);
+				preferred = isSupportedResult[0] != 0;
+			} else {
+				/* nsIWebNavigationInfo is not available, so do the type lookup */
+				result[0] = 0;
+				rc = serviceManager.GetService (XPCOM.NS_CATEGORYMANAGER_CID, nsICategoryManager.NS_ICATEGORYMANAGER_IID, result);
+				if (rc != XPCOM.NS_OK) error (rc);
+				if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+
+				nsICategoryManager categoryManager = new nsICategoryManager (result[0]);
+				result[0] = 0;
+				byte[] categoryBytes = MozillaDelegate.wcsToMbcs (null, "Gecko-Content-Viewers", true);	//$NON-NLS-1$
+				rc = categoryManager.GetCategoryEntry (categoryBytes, typeBytes, result);
+				categoryManager.Release ();
+				/* if no viewer for the content type is registered then rc == XPCOM.NS_ERROR_NOT_AVAILABLE */
+				preferred = rc == XPCOM.NS_OK;
+			}
+			serviceManager.Release ();
+		}
+	}
+
+	XPCOM.memmove(retval, new int[] {preferred ? 1 : 0}, 4); /* PRBool */
+	if (preferred) {
+		XPCOM.memmove (aDesiredContentType, new int /*long*/[] {0}, C.PTR_SIZEOF);
+	}
+	return XPCOM.NS_OK;
+}
+
+int CanHandleContent (int /*long*/ aContentType, int aIsContentPreferred, int /*long*/ aDesiredContentType, int /*long*/ retval) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetLoadCookie (int /*long*/ aLoadCookie) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int SetLoadCookie (int /*long*/ aLoadCookie) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int GetParentContentListener (int /*long*/ aParentContentListener) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+	
+int SetParentContentListener (int /*long*/ aParentContentListener) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+/* nsITooltipListener */
+
+int OnShowTooltip (int aXCoords, int aYCoords, int /*long*/ aTipText) {
+	int length = XPCOM.strlen_PRUnichar (aTipText);
+	char[] dest = new char[length];
+	XPCOM.memmove (dest, aTipText, length * 2);
+	String text = new String (dest);
+	if (tip != null && !tip.isDisposed ()) tip.dispose ();
+	Display display = browser.getDisplay ();
+	Shell parent = browser.getShell ();
+	tip = new Shell (parent, SWT.ON_TOP);
+	tip.setLayout (new FillLayout());
+	Label label = new Label (tip, SWT.CENTER);
+	label.setForeground (display.getSystemColor (SWT.COLOR_INFO_FOREGROUND));
+	label.setBackground (display.getSystemColor (SWT.COLOR_INFO_BACKGROUND));
+	label.setText (text);
+	/*
+	* Bug in Mozilla embedded API.  Tooltip coordinates are wrong for 
+	* elements inside an inline frame (IFrame tag).  The workaround is 
+	* to position the tooltip based on the mouse cursor location.
+	*/
+	Point point = display.getCursorLocation ();
+	/* Assuming cursor is 21x21 because this is the size of
+	 * the arrow cursor on Windows
+	 */ 
+	point.y += 21;
+	tip.setLocation (point);
+	tip.pack ();
+	tip.setVisible (true);
+	return XPCOM.NS_OK;
+}
+
+int OnHideTooltip () {
+	if (tip != null && !tip.isDisposed ()) tip.dispose ();
+	tip = null;
+	return XPCOM.NS_OK;
+}
+
+/* nsIDOMEventListener */
+
+int HandleEvent (int /*long*/ event) {
+	nsIDOMEvent domEvent = new nsIDOMEvent (event);
+
+	int /*long*/ type = XPCOM.nsEmbedString_new ();
+	int rc = domEvent.GetType (type);
+	if (rc != XPCOM.NS_OK) error (rc);
+	int length = XPCOM.nsEmbedString_Length (type);
+	int /*long*/ buffer = XPCOM.nsEmbedString_get (type);
+	char[] chars = new char[length];
+	XPCOM.memmove (chars, buffer, length * 2);
+	String typeString = new String (chars);
+	XPCOM.nsEmbedString_delete (type);
+
+	if (XPCOM.DOMEVENT_UNLOAD.equals (typeString)) {
+		int /*long*/[] result = new int /*long*/[1];
+		rc = domEvent.GetCurrentTarget (result);
+		if (rc != XPCOM.NS_OK) error (rc);
+		if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+
+		nsIDOMEventTarget target = new nsIDOMEventTarget (result[0]);
+		unhookDOMListeners (target);
+		target.Release ();
+		return XPCOM.NS_OK;
+	}
+
+	if (XPCOM.DOMEVENT_FOCUS.equals (typeString)) {
+		delegate.handleFocus ();
+		return XPCOM.NS_OK;
+	}
+
+	if (XPCOM.DOMEVENT_KEYDOWN.equals (typeString)) {
+		int /*long*/[] result = new int /*long*/[1];
+		rc = domEvent.QueryInterface (nsIDOMKeyEvent.NS_IDOMKEYEVENT_IID, result);
+		if (rc != XPCOM.NS_OK) error (rc);
+		if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+		nsIDOMKeyEvent domKeyEvent = new nsIDOMKeyEvent (result[0]);
+		result[0] = 0;
+
+		int[] aKeyCode = new int[1]; /* PRUint32 */
+		rc = domKeyEvent.GetKeyCode (aKeyCode);
+		if (rc != XPCOM.NS_OK) error (rc);
+		int keyCode = translateKey (aKeyCode[0]);
+
+		/*
+		* if keyCode == lastKeyCode then either a repeating key like Shift
+		* is being held or a key for which key events are not sent has been
+		* pressed.  In both of these cases a KeyDown should not be sent.
+		*/
+		if (keyCode != lastKeyCode) {
+			lastKeyCode = keyCode;
+			switch (keyCode) {
+				case SWT.SHIFT:
+				case SWT.CONTROL:
+				case SWT.ALT:
+				case SWT.CAPS_LOCK:
+				case SWT.NUM_LOCK:
+				case SWT.SCROLL_LOCK:
+				case SWT.COMMAND: {
+					/* keypress events will not be received for these keys, so send KeyDowns for them now */
+					int[] aAltKey = new int[1], aCtrlKey = new int[1], aShiftKey = new int[1], aMetaKey = new int[1]; /* PRBool */
+					rc = domKeyEvent.GetAltKey (aAltKey);
+					if (rc != XPCOM.NS_OK) error (rc);
+					rc = domKeyEvent.GetCtrlKey (aCtrlKey);
+					if (rc != XPCOM.NS_OK) error (rc);
+					rc = domKeyEvent.GetShiftKey (aShiftKey);
+					if (rc != XPCOM.NS_OK) error (rc);
+					rc = domKeyEvent.GetMetaKey (aMetaKey);
+					if (rc != XPCOM.NS_OK) error (rc);
+
+					Event keyEvent = new Event ();
+					keyEvent.widget = browser;
+					keyEvent.type = SWT.KeyDown;
+					keyEvent.keyCode = keyCode;
+					keyEvent.stateMask = (aAltKey[0] != 0 ? SWT.ALT : 0) | (aCtrlKey[0] != 0 ? SWT.CTRL : 0) | (aShiftKey[0] != 0 ? SWT.SHIFT : 0) | (aMetaKey[0] != 0 ? SWT.COMMAND : 0);
+					keyEvent.stateMask &= ~keyCode;		/* remove current keydown if it's a state key */
+					browser.notifyListeners (keyEvent.type, keyEvent);
+					if (!keyEvent.doit || browser.isDisposed ()) {
+						domEvent.PreventDefault ();
+					}
+					break;
+				}
+				default: {
+					/* 
+					* If the keydown has Meta (but not Meta+Ctrl) as a modifier then send a KeyDown event for it here
+					* because a corresponding keypress event will not be received for it from the DOM.  If the keydown
+					* does not have Meta as a modifier, or has Meta+Ctrl as a modifier, then then do nothing here
+					* because its KeyDown event will be sent from the keypress listener.
+					*/
+					int[] aMetaKey = new int[1]; /* PRBool */
+					rc = domKeyEvent.GetMetaKey (aMetaKey);
+					if (rc != XPCOM.NS_OK) error (rc);
+					if (aMetaKey[0] != 0) {
+						int[] aCtrlKey = new int[1]; /* PRBool */
+						rc = domKeyEvent.GetCtrlKey (aCtrlKey);
+						if (rc != XPCOM.NS_OK) error (rc);
+						if (aCtrlKey[0] == 0) {
+							int[] aAltKey = new int[1], aShiftKey = new int[1]; /* PRBool */
+							rc = domKeyEvent.GetAltKey (aAltKey);
+							if (rc != XPCOM.NS_OK) error (rc);
+							rc = domKeyEvent.GetShiftKey (aShiftKey);
+							if (rc != XPCOM.NS_OK) error (rc);
+
+							Event keyEvent = new Event ();
+							keyEvent.widget = browser;
+							keyEvent.type = SWT.KeyDown;
+							keyEvent.keyCode = lastKeyCode;
+							keyEvent.stateMask = (aAltKey[0] != 0 ? SWT.ALT : 0) | (aCtrlKey[0] != 0? SWT.CTRL : 0) | (aShiftKey[0] != 0? SWT.SHIFT : 0) | (aMetaKey[0] != 0? SWT.COMMAND : 0);
+							browser.notifyListeners (keyEvent.type, keyEvent);
+							if (!keyEvent.doit || browser.isDisposed ()) {
+								domEvent.PreventDefault ();
+							}
+						}
+					}
+				}
+			}
+		}
+
+		domKeyEvent.Release ();
+		return XPCOM.NS_OK;
+	}
+
+	if (XPCOM.DOMEVENT_KEYPRESS.equals (typeString)) {
+		/*
+		* if keydown could not determine a keycode for this key then it's a
+		* key for which key events are not sent (eg.- the Windows key)
+		*/
+		if (lastKeyCode == 0) return XPCOM.NS_OK;
+
+		/*
+		* On linux only, unexpected keypress events are received for some
+		* modifier keys.  The workaround is to ignore these events since
+		* KeyDown events are sent for these keys in the keydown listener.  
+		*/
+		switch (lastKeyCode) {
+			case SWT.CAPS_LOCK:
+			case SWT.NUM_LOCK:
+			case SWT.SCROLL_LOCK: return XPCOM.NS_OK;
+		}
+
+		int /*long*/[] result = new int /*long*/[1];
+		rc = domEvent.QueryInterface (nsIDOMKeyEvent.NS_IDOMKEYEVENT_IID, result);
+		if (rc != XPCOM.NS_OK) error (rc);
+		if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+		nsIDOMKeyEvent domKeyEvent = new nsIDOMKeyEvent (result[0]);
+		result[0] = 0;
+
+		int[] aAltKey = new int[1], aCtrlKey = new int[1], aShiftKey = new int[1], aMetaKey = new int[1]; /* PRBool */
+		rc = domKeyEvent.GetAltKey (aAltKey);
+		if (rc != XPCOM.NS_OK) error (rc);
+		rc = domKeyEvent.GetCtrlKey (aCtrlKey);
+		if (rc != XPCOM.NS_OK) error (rc);
+		rc = domKeyEvent.GetShiftKey (aShiftKey);
+		if (rc != XPCOM.NS_OK) error (rc);
+		rc = domKeyEvent.GetMetaKey (aMetaKey);
+		if (rc != XPCOM.NS_OK) error (rc);
+		domKeyEvent.Release ();
+
+		int[] aCharCode = new int[1]; /* PRUint32 */
+		rc = domKeyEvent.GetCharCode (aCharCode);
+		if (rc != XPCOM.NS_OK) error (rc);
+		lastCharCode = aCharCode[0];
+		if (lastCharCode == 0) {
+			switch (lastKeyCode) {
+				case SWT.TAB: lastCharCode = SWT.TAB; break;
+				case SWT.CR: lastCharCode = SWT.CR; break;
+				case SWT.BS: lastCharCode = SWT.BS; break;
+				case SWT.ESC: lastCharCode = SWT.ESC; break;
+				case SWT.DEL: lastCharCode = SWT.DEL; break;
+			}
+		}
+		if (aCtrlKey[0] != 0 && (0 <= lastCharCode && lastCharCode <= 0x7F)) {
+			if ('a'  <= lastCharCode && lastCharCode <= 'z') lastCharCode -= 'a' - 'A';
+			if (64 <= lastCharCode && lastCharCode <= 95) lastCharCode -= 64;
+		}
+
+		Event keyEvent = new Event ();
+		keyEvent.widget = browser;
+		keyEvent.type = SWT.KeyDown;
+		keyEvent.keyCode = lastKeyCode;
+		keyEvent.character = (char)lastCharCode;
+		keyEvent.stateMask = (aAltKey[0] != 0 ? SWT.ALT : 0) | (aCtrlKey[0] != 0 ? SWT.CTRL : 0) | (aShiftKey[0] != 0 ? SWT.SHIFT : 0) | (aMetaKey[0] != 0 ? SWT.COMMAND : 0);
+		browser.notifyListeners (keyEvent.type, keyEvent);
+		if (!keyEvent.doit || browser.isDisposed ()) {
+			domEvent.PreventDefault ();
+		}
+		return XPCOM.NS_OK;
+	}
+
+	if (XPCOM.DOMEVENT_KEYUP.equals (typeString)) {
+		int /*long*/[] result = new int /*long*/[1];
+		rc = domEvent.QueryInterface (nsIDOMKeyEvent.NS_IDOMKEYEVENT_IID, result);
+		if (rc != XPCOM.NS_OK) error (rc);
+		if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+		nsIDOMKeyEvent domKeyEvent = new nsIDOMKeyEvent (result[0]);
+		result[0] = 0;
+
+		int[] aKeyCode = new int[1]; /* PRUint32 */
+		rc = domKeyEvent.GetKeyCode (aKeyCode);
+		if (rc != XPCOM.NS_OK) error (rc);
+		int keyCode = translateKey (aKeyCode[0]);
+		if (keyCode == 0) {
+			/* indicates a key for which key events are not sent */
+			domKeyEvent.Release ();
+			return XPCOM.NS_OK;
+		}
+		if (keyCode != lastKeyCode) {
+			/* keyup does not correspond to the last keydown */
+			lastKeyCode = keyCode;
+			lastCharCode = 0;
+		}
+
+		int[] aAltKey = new int[1], aCtrlKey = new int[1], aShiftKey = new int[1], aMetaKey = new int[1]; /* PRBool */
+		rc = domKeyEvent.GetAltKey (aAltKey);
+		if (rc != XPCOM.NS_OK) error (rc);
+		rc = domKeyEvent.GetCtrlKey (aCtrlKey);
+		if (rc != XPCOM.NS_OK) error (rc);
+		rc = domKeyEvent.GetShiftKey (aShiftKey);
+		if (rc != XPCOM.NS_OK) error (rc);
+		rc = domKeyEvent.GetMetaKey (aMetaKey);
+		if (rc != XPCOM.NS_OK) error (rc);
+		domKeyEvent.Release ();
+
+		Event keyEvent = new Event ();
+		keyEvent.widget = browser;
+		keyEvent.type = SWT.KeyUp;
+		keyEvent.keyCode = lastKeyCode;
+		keyEvent.character = (char)lastCharCode;
+		keyEvent.stateMask = (aAltKey[0] != 0 ? SWT.ALT : 0) | (aCtrlKey[0] != 0 ? SWT.CTRL : 0) | (aShiftKey[0] != 0 ? SWT.SHIFT : 0) | (aMetaKey[0] != 0 ? SWT.COMMAND : 0);
+		switch (lastKeyCode) {
+			case SWT.SHIFT:
+			case SWT.CONTROL:
+			case SWT.ALT:
+			case SWT.COMMAND: {
+				keyEvent.stateMask |= lastKeyCode;
+			}
+		}
+		browser.notifyListeners (keyEvent.type, keyEvent);
+		if (!keyEvent.doit || browser.isDisposed ()) {
+			domEvent.PreventDefault ();
+		}
+		lastKeyCode = lastCharCode = 0;
+		return XPCOM.NS_OK;
+	}
+
+	/* mouse event */
+
+	int /*long*/[] result = new int /*long*/[1];
+	rc = domEvent.QueryInterface (nsIDOMMouseEvent.NS_IDOMMOUSEEVENT_IID, result);
+	if (rc != XPCOM.NS_OK) error (rc);
+	if (result[0] == 0) error (XPCOM.NS_NOINTERFACE);
+	nsIDOMMouseEvent domMouseEvent = new nsIDOMMouseEvent (result[0]);
+	result[0] = 0;
+
+	/*
+	 * MouseOver and MouseOut events are fired any time the mouse enters or exits
+	 * any element within the Browser.  To ensure that SWT events are only
+	 * fired for mouse movements into or out of the Browser, do not fire an
+	 * event if the element being exited (on MouseOver) or entered (on MouseExit)
+	 * is within the Browser.
+	 */
+	if (XPCOM.DOMEVENT_MOUSEOVER.equals (typeString) || XPCOM.DOMEVENT_MOUSEOUT.equals (typeString)) {
+		rc = domMouseEvent.GetRelatedTarget (result);
+		if (rc != XPCOM.NS_OK) error (rc);
+		if (result[0] != 0) {
+			domMouseEvent.Release ();
+			return XPCOM.NS_OK;
+		}
+	}
+
+	int[] aClientX = new int[1], aClientY = new int[1], aDetail = new int[1]; /* PRInt32 */
+	rc = domMouseEvent.GetClientX (aClientX);
+	if (rc != XPCOM.NS_OK) error (rc);
+	rc = domMouseEvent.GetClientY (aClientY);
+	if (rc != XPCOM.NS_OK) error (rc);
+	rc = domMouseEvent.GetDetail (aDetail);
+	if (rc != XPCOM.NS_OK) error (rc);
+	short[] aButton = new short[1]; /* PRUint16 */
+	rc = domMouseEvent.GetButton (aButton);
+	if (rc != XPCOM.NS_OK) error (rc);
+	int[] aAltKey = new int[1], aCtrlKey = new int[1], aShiftKey = new int[1], aMetaKey = new int[1]; /* PRBool */
+	rc = domMouseEvent.GetAltKey (aAltKey);
+	if (rc != XPCOM.NS_OK) error (rc);
+	rc = domMouseEvent.GetCtrlKey (aCtrlKey);
+	if (rc != XPCOM.NS_OK) error (rc);
+	rc = domMouseEvent.GetShiftKey (aShiftKey);
+	if (rc != XPCOM.NS_OK) error (rc);
+	rc = domMouseEvent.GetMetaKey (aMetaKey);
+	if (rc != XPCOM.NS_OK) error (rc);
+	domMouseEvent.Release ();
+
+	Event mouseEvent = new Event ();
+	mouseEvent.widget = browser;
+	mouseEvent.x = aClientX[0]; mouseEvent.y = aClientY[0];
+	mouseEvent.stateMask = (aAltKey[0] != 0 ? SWT.ALT : 0) | (aCtrlKey[0] != 0 ? SWT.CTRL : 0) | (aShiftKey[0] != 0 ? SWT.SHIFT : 0) | (aMetaKey[0] != 0 ? SWT.COMMAND : 0);
+
+	if (XPCOM.DOMEVENT_MOUSEDOWN.equals (typeString)) {
+		delegate.handleMouseDown ();
+		mouseEvent.type = SWT.MouseDown;
+		mouseEvent.button = aButton[0] + 1;
+		mouseEvent.count = aDetail[0];
+	} else if (XPCOM.DOMEVENT_MOUSEUP.equals (typeString)) {
+		/*
+		 * Bug on OSX.  For some reason multiple mouseup events come from the DOM
+		 * when button 3 is released on OSX.  The first of these events has a count
+		 * detail and the others do not.  The workaround is to not fire received
+		 * button 3 mouseup events that do not have a count since mouse events
+		 * without a click count are not valid.
+		 */
+		int button = aButton[0] + 1;
+		int count = aDetail[0];
+		if (count == 0 && button == 3) return XPCOM.NS_OK;
+		mouseEvent.type = SWT.MouseUp;
+		mouseEvent.button = button;
+		mouseEvent.count = count;
+	} else if (XPCOM.DOMEVENT_MOUSEMOVE.equals (typeString)) {
+		mouseEvent.type = SWT.MouseMove;
+	} else if (XPCOM.DOMEVENT_MOUSEWHEEL.equals (typeString)) {
+		mouseEvent.type = SWT.MouseWheel;
+		mouseEvent.count = -aDetail[0];
+	} else if (XPCOM.DOMEVENT_MOUSEOVER.equals (typeString)) {
+		mouseEvent.type = SWT.MouseEnter;
+	} else if (XPCOM.DOMEVENT_MOUSEOUT.equals (typeString)) {
+		mouseEvent.type = SWT.MouseExit;
+	} else if (XPCOM.DOMEVENT_MOUSEDRAG.equals (typeString)) {
+		mouseEvent.type = SWT.DragDetect;
+		mouseEvent.button = aButton[0] + 1;
+		switch (mouseEvent.button) {
+			case 1: mouseEvent.stateMask |= SWT.BUTTON1; break;
+			case 2: mouseEvent.stateMask |= SWT.BUTTON2; break;
+			case 3: mouseEvent.stateMask |= SWT.BUTTON3; break;
+			case 4: mouseEvent.stateMask |= SWT.BUTTON4; break;
+			case 5: mouseEvent.stateMask |= SWT.BUTTON5; break;
+		}
+	}
+
+	browser.notifyListeners (mouseEvent.type, mouseEvent);
+	if (browser.isDisposed ()) return XPCOM.NS_OK;
+	if (aDetail[0] == 2 && XPCOM.DOMEVENT_MOUSEDOWN.equals (typeString)) {
+		mouseEvent = new Event ();
+		mouseEvent.widget = browser;
+		mouseEvent.x = aClientX[0]; mouseEvent.y = aClientY[0];
+		mouseEvent.stateMask = (aAltKey[0] != 0 ? SWT.ALT : 0) | (aCtrlKey[0] != 0 ? SWT.CTRL : 0) | (aShiftKey[0] != 0 ? SWT.SHIFT : 0) | (aMetaKey[0] != 0 ? SWT.COMMAND : 0);
+		mouseEvent.type = SWT.MouseDoubleClick;
+		mouseEvent.button = aButton[0] + 1;
+		mouseEvent.count = aDetail[0];
+		browser.notifyListeners (mouseEvent.type, mouseEvent);	
+	}
+	return XPCOM.NS_OK;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/PromptDialog.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/PromptDialog.java
new file mode 100644
index 0000000..f4558d0
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/PromptDialog.java
@@ -0,0 +1,294 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2007 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.browser;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.layout.*;
+import org.eclipse.swt.widgets.*;
+
+class PromptDialog extends Dialog {
+	
+	PromptDialog(Shell parent, int style) {
+		super(parent, style);
+	}
+	
+	PromptDialog(Shell parent) {
+		this(parent, 0);
+	}
+	
+	void alertCheck(String title, String text, String check, final int[] checkValue) {
+		Shell parent = getParent();
+		final Shell shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		if (title != null) shell.setText(title);
+		GridLayout gridLayout = new GridLayout();
+		shell.setLayout(gridLayout);
+		Label label = new Label(shell, SWT.WRAP);
+		label.setText(text);
+		GridData data = new GridData();
+		Monitor monitor = parent.getMonitor();
+		int maxWidth = monitor.getBounds().width * 2 / 3;
+		int width = label.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
+		data.widthHint = Math.min(width, maxWidth);
+		data.horizontalAlignment = GridData.FILL;
+		data.grabExcessHorizontalSpace = true;
+		label.setLayoutData (data);
+
+		final Button checkButton = check != null ? new Button(shell, SWT.CHECK) : null;
+		if (checkButton != null) {
+			checkButton.setText(check);
+			checkButton.setSelection(checkValue[0] != 0);
+			data = new GridData ();
+			data.horizontalAlignment = GridData.BEGINNING;
+			checkButton.setLayoutData (data);
+		}
+		Button okButton = new Button(shell, SWT.PUSH);
+		okButton.setText(SWT.getMessage("SWT_OK")); //$NON-NLS-1$
+		data = new GridData ();
+		data.horizontalAlignment = GridData.CENTER;
+		okButton.setLayoutData (data);
+		okButton.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event event) {
+				if (checkButton != null) checkValue[0] = checkButton.getSelection() ? 1 : 0;
+				shell.close();
+			}
+		});
+
+		shell.pack();
+		shell.open();
+		Display display = parent.getDisplay();
+		while (!shell.isDisposed()) {
+			if (!display.readAndDispatch()) display.sleep();
+		}
+	}
+
+	void confirmEx(String title, String text, String check, String button0, String button1, String button2, int defaultIndex, final int[] checkValue, final int[] result) {
+		Shell parent = getParent();
+		final Shell shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		shell.setText(title);
+		GridLayout gridLayout = new GridLayout();
+		shell.setLayout(gridLayout);
+		Label label = new Label(shell, SWT.WRAP);
+		label.setText(text);
+		GridData data = new GridData();
+		Monitor monitor = parent.getMonitor();
+		int maxWidth = monitor.getBounds().width * 2 / 3;
+		int width = label.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
+		data.widthHint = Math.min(width, maxWidth);
+		data.horizontalAlignment = GridData.FILL;
+		data.grabExcessHorizontalSpace = true;
+		label.setLayoutData (data);
+
+		final Button[] buttons = new Button[4];
+		Listener listener = new Listener() {
+			public void handleEvent(Event event) {
+				if (buttons[0] != null) checkValue[0] = buttons[0].getSelection() ? 1 : 0;
+				Widget widget = event.widget;
+				for (int i = 1; i < buttons.length; i++) {
+					if (widget == buttons[i]) {
+						result[0] = i - 1;
+						break;
+					}
+				}
+				shell.close();
+			}	
+		};
+		if (check != null) {
+			buttons[0] = new Button(shell, SWT.CHECK);
+			buttons[0].setText(check);
+			buttons[0].setSelection(checkValue[0] != 0);
+			data = new GridData ();
+			data.horizontalAlignment = GridData.BEGINNING;
+			buttons[0].setLayoutData (data);
+		}
+		Composite composite = new Composite(shell, SWT.NONE);
+		data = new GridData();
+		data.horizontalAlignment = GridData.CENTER;
+		composite.setLayoutData (data);
+		GridLayout layout = new GridLayout();
+		layout.makeColumnsEqualWidth = true;
+		composite.setLayout(layout);
+		int buttonCount = 0;
+		if (button0 != null) {
+			buttons[1] = new Button(composite, SWT.PUSH);
+			buttons[1].setText(button0);
+			buttons[1].addListener(SWT.Selection, listener);
+			buttons[1].setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+			buttonCount++;
+		}
+		if (button1 != null) {
+			buttons[2] = new Button(composite, SWT.PUSH);
+			buttons[2].setText(button1);
+			buttons[2].addListener(SWT.Selection, listener);
+			buttons[2].setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+			buttonCount++;
+		}
+		if (button2 != null) {
+			buttons[3] = new Button(composite, SWT.PUSH);
+			buttons[3].setText(button2);
+			buttons[3].addListener(SWT.Selection, listener);
+			buttons[3].setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+			buttonCount++;
+		}
+		layout.numColumns = buttonCount;
+		Button defaultButton = buttons [defaultIndex + 1];
+		if (defaultButton != null) shell.setDefaultButton (defaultButton);
+
+		shell.pack();
+		shell.open();
+		Display display = parent.getDisplay();
+		while (!shell.isDisposed()) {
+			if (!display.readAndDispatch()) display.sleep();
+		}
+	}
+	
+	void prompt(String title, String text, String check, final String[] value, final int[] checkValue, final int[] result) {
+		Shell parent = getParent();
+		final Shell shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		if (title != null) shell.setText(title);
+		GridLayout gridLayout = new GridLayout();
+		shell.setLayout(gridLayout);
+		Label label = new Label(shell, SWT.WRAP);
+		label.setText(text);
+		GridData data = new GridData();
+		Monitor monitor = parent.getMonitor();
+		int maxWidth = monitor.getBounds().width * 2 / 3;
+		int width = label.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
+		data.widthHint = Math.min(width, maxWidth);
+		data.horizontalAlignment = GridData.FILL;
+		data.grabExcessHorizontalSpace = true;
+		label.setLayoutData (data);
+				
+		final Text valueText = new Text(shell, SWT.BORDER);
+		if (value[0] != null) valueText.setText(value[0]);
+		data = new GridData();
+		width = valueText.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
+		if (width > maxWidth) data.widthHint = maxWidth;
+		data.horizontalAlignment = GridData.FILL;
+		data.grabExcessHorizontalSpace = true;
+		valueText.setLayoutData(data);
+
+		final Button[] buttons = new Button[3];
+		Listener listener = new Listener() {
+			public void handleEvent(Event event) {
+				if (buttons[0] != null) checkValue[0] = buttons[0].getSelection() ? 1 : 0;
+				value[0] = valueText.getText();
+				result[0] = event.widget == buttons[1] ? 1 : 0;
+				shell.close();
+			}	
+		};
+		if (check != null) {
+			buttons[0] = new Button(shell, SWT.CHECK);
+			buttons[0].setText(check);
+			buttons[0].setSelection(checkValue[0] != 0);
+			data = new GridData ();
+			data.horizontalAlignment = GridData.BEGINNING;
+			buttons[0].setLayoutData (data);
+		}
+		Composite composite = new Composite(shell, SWT.NONE);
+		data = new GridData();
+		data.horizontalAlignment = GridData.CENTER;
+		composite.setLayoutData (data);
+		composite.setLayout(new GridLayout(2, true));
+		buttons[1] = new Button(composite, SWT.PUSH);
+		buttons[1].setText(SWT.getMessage("SWT_OK")); //$NON-NLS-1$
+		buttons[1].setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		buttons[1].addListener(SWT.Selection, listener);
+		buttons[2] = new Button(composite, SWT.PUSH);
+		buttons[2].setText(SWT.getMessage("SWT_Cancel")); //$NON-NLS-1$
+		buttons[2].setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		buttons[2].addListener(SWT.Selection, listener);
+
+		shell.pack();
+		shell.open();
+		Display display = parent.getDisplay();
+		while (!shell.isDisposed()) {
+			if (!display.readAndDispatch()) display.sleep();
+		}	
+	}
+
+	void promptUsernameAndPassword(String title, String text, String check, final String[] user, final String[] pass, final int[] checkValue, final int[] result) {
+		Shell parent = getParent();
+		final Shell shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		shell.setText(title);
+		GridLayout gridLayout = new GridLayout();
+		shell.setLayout(gridLayout);
+		Label label = new Label(shell, SWT.WRAP);
+		label.setText(text);
+		GridData data = new GridData();
+		Monitor monitor = parent.getMonitor();
+		int maxWidth = monitor.getBounds().width * 2 / 3;
+		int width = label.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
+		data.widthHint = Math.min(width, maxWidth);
+		data.horizontalAlignment = GridData.FILL;
+		data.grabExcessHorizontalSpace = true;
+		label.setLayoutData (data);
+		
+		Label userLabel = new Label(shell, SWT.NONE);
+		userLabel.setText(SWT.getMessage("SWT_Username")); //$NON-NLS-1$
+		
+		final Text userText = new Text(shell, SWT.BORDER);
+		if (user[0] != null) userText.setText(user[0]);
+		data = new GridData();
+		data.horizontalAlignment = GridData.FILL;
+		data.grabExcessHorizontalSpace = true;
+		userText.setLayoutData(data);
+		
+		Label passwordLabel = new Label(shell, SWT.NONE);
+		passwordLabel.setText(SWT.getMessage("SWT_Password")); //$NON-NLS-1$
+		
+		final Text passwordText = new Text(shell, SWT.PASSWORD | SWT.BORDER);
+		if (pass[0] != null) passwordText.setText(pass[0]);
+		data = new GridData();
+		data.horizontalAlignment = GridData.FILL;
+		data.grabExcessHorizontalSpace = true;
+		passwordText.setLayoutData(data);
+
+		final Button[] buttons = new Button[3];
+		Listener listener = new Listener() {
+			public void handleEvent(Event event) {
+				if (buttons[0] != null) checkValue[0] = buttons[0].getSelection() ? 1 : 0;
+				user[0] = userText.getText();
+				pass[0] = passwordText.getText();
+				result[0] = event.widget == buttons[1] ? 1 : 0;
+				shell.close();
+			}	
+		};
+		if (check != null) {
+			buttons[0] = new Button(shell, SWT.CHECK);
+			buttons[0].setText(check);
+			buttons[0].setSelection(checkValue[0] != 0);
+			data = new GridData ();
+			data.horizontalAlignment = GridData.BEGINNING;
+			buttons[0].setLayoutData (data);
+		}
+		Composite composite = new Composite(shell, SWT.NONE);
+		data = new GridData();
+		data.horizontalAlignment = GridData.CENTER;
+		composite.setLayoutData (data);
+		composite.setLayout(new GridLayout(2, true));
+		buttons[1] = new Button(composite, SWT.PUSH);
+		buttons[1].setText(SWT.getMessage("SWT_OK")); //$NON-NLS-1$
+		buttons[1].setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		buttons[1].addListener(SWT.Selection, listener);
+		buttons[2] = new Button(composite, SWT.PUSH);
+		buttons[2].setText(SWT.getMessage("SWT_Cancel")); //$NON-NLS-1$
+		buttons[2].setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		buttons[2].addListener(SWT.Selection, listener);
+
+		shell.setDefaultButton(buttons[1]);
+		shell.pack();
+		shell.open();
+		Display display = parent.getDisplay();
+		while (!shell.isDisposed()) {
+			if (!display.readAndDispatch()) display.sleep();
+		}
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/PromptService2.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/PromptService2.java
new file mode 100644
index 0000000..41452c2
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/PromptService2.java
@@ -0,0 +1,641 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 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.browser;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.mozilla.*;
+import org.eclipse.swt.widgets.*;
+
+class PromptService2 {
+	XPCOMObject supports;
+	XPCOMObject promptService;
+	XPCOMObject promptService2;
+	int refCount = 0;
+
+PromptService2 () {
+	createCOMInterfaces ();
+}
+
+int AddRef () {
+	refCount++;
+	return refCount;
+}
+
+void createCOMInterfaces () {
+	/* Create each of the interfaces that this object implements */
+	supports = new XPCOMObject (new int[] {2, 0, 0}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+	};
+	
+	promptService = new XPCOMObject (new int[] {2, 0, 0, 3, 5, 4, 6, 10, 7, 8, 7, 7}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return Alert (args[0], args[1], args[2]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return AlertCheck (args[0], args[1], args[2], args[3], args[4]);}
+		public int /*long*/ method5 (int /*long*/[] args) {return Confirm (args[0], args[1], args[2], args[3]);}
+		public int /*long*/ method6 (int /*long*/[] args) {return ConfirmCheck (args[0], args[1], args[2], args[3], args[4], args[5]);}
+		public int /*long*/ method7 (int /*long*/[] args) {return ConfirmEx (args[0], args[1], args[2], (int)/*64*/args[3], args[4], args[5], args[6], args[7], args[8], args[9]);}
+		public int /*long*/ method8 (int /*long*/[] args) {return Prompt (args[0], args[1], args[2], args[3], args[4], args[5], args[6]);}
+		public int /*long*/ method9 (int /*long*/[] args) {return PromptUsernameAndPassword (args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);}
+		public int /*long*/ method10 (int /*long*/[] args) {return PromptPassword (args[0], args[1], args[2], args[3], args[4], args[5], args[6]);}
+		public int /*long*/ method11 (int /*long*/[] args) {return Select (args[0], args[1], args[2], (int)/*64*/args[3], args[4], args[5], args[6]);}
+	};
+	
+	promptService2 = new XPCOMObject (new int[] {2, 0, 0, 3, 5, 4, 6, 10, 7, 8, 7, 7, 7, 9}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return Alert (args[0], args[1], args[2]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return AlertCheck (args[0], args[1], args[2], args[3], args[4]);}
+		public int /*long*/ method5 (int /*long*/[] args) {return Confirm (args[0], args[1], args[2], args[3]);}
+		public int /*long*/ method6 (int /*long*/[] args) {return ConfirmCheck (args[0], args[1], args[2], args[3], args[4], args[5]);}
+		public int /*long*/ method7 (int /*long*/[] args) {return ConfirmEx (args[0], args[1], args[2], (int)/*64*/args[3], args[4], args[5], args[6], args[7], args[8], args[9]);}
+		public int /*long*/ method8 (int /*long*/[] args) {return Prompt (args[0], args[1], args[2], args[3], args[4], args[5], args[6]);}
+		public int /*long*/ method9 (int /*long*/[] args) {return PromptUsernameAndPassword (args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);}
+		public int /*long*/ method10 (int /*long*/[] args) {return PromptPassword (args[0], args[1], args[2], args[3], args[4], args[5], args[6]);}
+		public int /*long*/ method11 (int /*long*/[] args) {return Select (args[0], args[1], args[2], (int)/*64*/args[3], args[4], args[5], args[6]);}
+		public int /*long*/ method12 (int /*long*/[] args) {return PromptAuth (args[0], args[1], (int)/*64*/args[2], args[3], args[4], args[5], args[6]);}
+		public int /*long*/ method13 (int /*long*/[] args) {return AsyncPromptAuth (args[0], args[1], args[2], args[3], (int)/*64*/args[4], args[5], args[6], args[7], args[8]);}
+	};
+}
+
+void disposeCOMInterfaces () {
+	if (supports != null) {
+		supports.dispose ();
+		supports = null;
+	}	
+	if (promptService != null) {
+		promptService.dispose ();
+		promptService = null;	
+	}
+	if (promptService2 != null) {
+		promptService2.dispose ();
+		promptService2 = null;	
+	}
+}
+
+int /*long*/ getAddress () {
+	return promptService2.getAddress ();
+}
+
+int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return XPCOM.NS_ERROR_NO_INTERFACE;
+	nsID guid = new nsID ();
+	XPCOM.memmove (guid, riid, nsID.sizeof);
+	
+	if (guid.Equals (nsISupports.NS_ISUPPORTS_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {supports.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIPromptService.NS_IPROMPTSERVICE_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {promptService.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIPromptService2.NS_IPROMPTSERVICE2_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {promptService2.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+
+	XPCOM.memmove (ppvObject, new int /*long*/[] {0}, C.PTR_SIZEOF);
+	return XPCOM.NS_ERROR_NO_INTERFACE;
+}
+        	
+int Release () {
+	refCount--;
+	if (refCount == 0) disposeCOMInterfaces ();
+	return refCount;
+}
+
+Browser getBrowser (int /*long*/ aDOMWindow) {
+	if (aDOMWindow == 0) return null;
+	nsIDOMWindow window = new nsIDOMWindow (aDOMWindow);
+	return Mozilla.findBrowser (window);
+}
+
+String getLabel (int buttonFlag, int index, int /*long*/ buttonTitle) {
+	String label = null;
+	int flag = (buttonFlag & (0xff * index)) / index;
+	switch (flag) {
+		case nsIPromptService.BUTTON_TITLE_CANCEL : label = SWT.getMessage ("SWT_Cancel"); break; //$NON-NLS-1$
+		case nsIPromptService.BUTTON_TITLE_NO : label = SWT.getMessage ("SWT_No"); break; //$NON-NLS-1$
+		case nsIPromptService.BUTTON_TITLE_OK : label = SWT.getMessage ("SWT_OK"); break; //$NON-NLS-1$
+		case nsIPromptService.BUTTON_TITLE_SAVE : label = SWT.getMessage ("SWT_Save"); break; //$NON-NLS-1$
+		case nsIPromptService.BUTTON_TITLE_YES : label = SWT.getMessage ("SWT_Yes"); break; //$NON-NLS-1$
+		case nsIPromptService.BUTTON_TITLE_IS_STRING : {
+			int length = XPCOM.strlen_PRUnichar (buttonTitle);
+			char[] dest = new char[length];
+			XPCOM.memmove (dest, buttonTitle, length * 2);
+			label = new String (dest);
+		}
+	}
+	return label;
+}
+
+/* nsIPromptService */
+
+int Alert (int /*long*/ aParent, int /*long*/ aDialogTitle, int /*long*/ aText) {
+	Browser browser = getBrowser (aParent);
+	
+	int length = XPCOM.strlen_PRUnichar (aDialogTitle);
+	char[] dest = new char[length];
+	XPCOM.memmove (dest, aDialogTitle, length * 2);
+	String titleLabel = new String (dest);
+
+	length = XPCOM.strlen_PRUnichar (aText);
+	dest = new char[length];
+	XPCOM.memmove (dest, aText, length * 2);
+	String textLabel = new String (dest);
+
+	Shell shell = browser == null ? new Shell () : browser.getShell (); 
+	MessageBox messageBox = new MessageBox (shell, SWT.OK | SWT.ICON_WARNING);
+	messageBox.setText (titleLabel);
+	messageBox.setMessage (textLabel);
+	messageBox.open ();
+	return XPCOM.NS_OK;
+}
+
+int AlertCheck (int /*long*/ aParent, int /*long*/ aDialogTitle, int /*long*/ aText, int /*long*/ aCheckMsg, int /*long*/ aCheckState) {
+	Browser browser = getBrowser (aParent);
+	
+	int length = XPCOM.strlen_PRUnichar (aDialogTitle);
+	char[] dest = new char[length];
+	XPCOM.memmove (dest, aDialogTitle, length * 2);
+	String titleLabel = new String (dest);
+
+	length = XPCOM.strlen_PRUnichar (aText);
+	dest = new char[length];
+	XPCOM.memmove (dest, aText, length * 2);
+	String textLabel = new String (dest);
+
+	length = XPCOM.strlen_PRUnichar (aCheckMsg);
+	dest = new char[length];
+	XPCOM.memmove (dest, aCheckMsg, length * 2);
+	String checkLabel = new String (dest);
+
+	Shell shell = browser == null ? new Shell () : browser.getShell ();
+	PromptDialog dialog = new PromptDialog (shell);
+	int[] check = new int[1];
+	if (aCheckState != 0) XPCOM.memmove (check, aCheckState, 4); /* PRBool */
+	dialog.alertCheck (titleLabel, textLabel, checkLabel, check);
+	if (aCheckState != 0) XPCOM.memmove (aCheckState, check, 4); /* PRBool */
+	return XPCOM.NS_OK;
+}
+
+int AsyncPromptAuth(int /*long*/ aParent, int /*long*/ aChannel, int /*long*/ aCallback, int /*long*/ aContext, int level, int /*long*/ authInfo, int /*long*/ checkboxLabel, int /*long*/ checkValue, int /*long*/ _retval) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int Confirm (int /*long*/ aParent, int /*long*/ aDialogTitle, int /*long*/ aText, int /*long*/ _retval) {
+	Browser browser = getBrowser (aParent);
+	
+	int length = XPCOM.strlen_PRUnichar (aDialogTitle);
+	char[] dest = new char[length];
+	XPCOM.memmove (dest, aDialogTitle, length * 2);
+	String titleLabel = new String (dest);
+
+	length = XPCOM.strlen_PRUnichar (aText);
+	dest = new char[length];
+	XPCOM.memmove (dest, aText, length * 2);
+	String textLabel = new String (dest);
+
+	Shell shell = browser == null ? new Shell () : browser.getShell ();
+	MessageBox messageBox = new MessageBox (shell, SWT.OK | SWT.CANCEL | SWT.ICON_QUESTION);
+	messageBox.setText (titleLabel);
+	messageBox.setMessage (textLabel);
+	int id = messageBox.open ();
+	int[] result = {id == SWT.OK ? 1 : 0};
+	XPCOM.memmove (_retval, result, 4);
+	return XPCOM.NS_OK;
+}
+
+int ConfirmCheck (int /*long*/ aParent, int /*long*/ aDialogTitle, int /*long*/ aText, int /*long*/ aCheckMsg, int /*long*/ aCheckState, int /*long*/ _retval) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int ConfirmEx (int /*long*/ aParent, int /*long*/ aDialogTitle, int /*long*/ aText, int aButtonFlags, int /*long*/ aButton0Title, int /*long*/ aButton1Title, int /*long*/ aButton2Title, int /*long*/ aCheckMsg, int /*long*/ aCheckState, int /*long*/ _retval) {
+	Browser browser = getBrowser (aParent);
+	
+	int length = XPCOM.strlen_PRUnichar (aDialogTitle);
+	char[] dest = new char[length];
+	XPCOM.memmove (dest, aDialogTitle, length * 2);
+	String titleLabel = new String (dest);
+
+	length = XPCOM.strlen_PRUnichar (aText);
+	dest = new char[length];
+	XPCOM.memmove (dest, aText, length * 2);
+	String textLabel = new String (dest);
+	
+	String checkLabel = null;
+	if (aCheckMsg != 0) {
+		length = XPCOM.strlen_PRUnichar (aCheckMsg);
+		dest = new char[length];
+		XPCOM.memmove (dest, aCheckMsg, length * 2);
+		checkLabel = new String (dest);
+	}
+	
+	String button0Label = getLabel (aButtonFlags, nsIPromptService.BUTTON_POS_0, aButton0Title);
+	String button1Label = getLabel (aButtonFlags, nsIPromptService.BUTTON_POS_1, aButton1Title);
+	String button2Label = getLabel (aButtonFlags, nsIPromptService.BUTTON_POS_2, aButton2Title);
+	
+	int defaultIndex = 0;
+	if ((aButtonFlags & nsIPromptService.BUTTON_POS_1_DEFAULT) != 0) {
+		defaultIndex = 1;
+	} else if ((aButtonFlags & nsIPromptService.BUTTON_POS_2_DEFAULT) != 0) {
+		defaultIndex = 2;
+	}
+	
+	Shell shell = browser == null ? new Shell () : browser.getShell ();
+	PromptDialog dialog = new PromptDialog (shell);
+	int[] check = new int[1], result = new int[1];
+	if (aCheckState != 0) XPCOM.memmove (check, aCheckState, 4);
+	dialog.confirmEx (titleLabel, textLabel, checkLabel, button0Label, button1Label, button2Label, defaultIndex, check, result);
+	if (aCheckState != 0) XPCOM.memmove (aCheckState, check, 4);
+	XPCOM.memmove (_retval, result, 4);
+	return XPCOM.NS_OK;
+}
+
+int Prompt (int /*long*/ aParent, int /*long*/ aDialogTitle, int /*long*/ aText, int /*long*/ aValue, int /*long*/ aCheckMsg, int /*long*/ aCheckState, int /*long*/ _retval) {
+	Browser browser = getBrowser (aParent);
+	String titleLabel = null, textLabel, checkLabel = null;
+	String[] valueLabel = new String[1];
+	char[] dest;
+	int length;
+	if (aDialogTitle != 0) {
+		length = XPCOM.strlen_PRUnichar (aDialogTitle);
+		dest = new char[length];
+		XPCOM.memmove (dest, aDialogTitle, length * 2);
+		titleLabel = new String (dest);
+	}
+	
+	length = XPCOM.strlen_PRUnichar (aText);
+	dest = new char[length];
+	XPCOM.memmove (dest, aText, length * 2);
+	textLabel = new String (dest);
+	
+	int /*long*/[] valueAddr = new int /*long*/[1];
+	XPCOM.memmove (valueAddr, aValue, C.PTR_SIZEOF);
+	if (valueAddr[0] != 0) {
+		length = XPCOM.strlen_PRUnichar (valueAddr[0]);
+		dest = new char[length];
+		XPCOM.memmove (dest, valueAddr[0], length * 2);
+		valueLabel[0] = new String (dest);		
+	}
+	
+	if (aCheckMsg != 0) {
+		length = XPCOM.strlen_PRUnichar (aCheckMsg);
+		if (length > 0) {
+			dest = new char[length];
+			XPCOM.memmove (dest, aCheckMsg, length * 2);
+			checkLabel = new String (dest);
+		}
+	}
+
+	Shell shell = browser == null ? new Shell () : browser.getShell ();
+	PromptDialog dialog = new PromptDialog (shell);
+	int[] check = new int[1], result = new int[1];
+	if (aCheckState != 0) XPCOM.memmove (check, aCheckState, 4);
+	dialog.prompt (titleLabel, textLabel, checkLabel, valueLabel, check, result);
+
+	XPCOM.memmove (_retval, result, 4);
+	if (result[0] == 1) {
+		/* 
+		* User selected OK. User name and password are returned as PRUnichar values. Any default
+		* value that we override must be freed using the nsIMemory service.
+		*/
+		if (valueLabel[0] != null) {
+			int /*long*/[] result2 = new int /*long*/[1];
+			int rc = XPCOM.NS_GetServiceManager (result2);
+			if (rc != XPCOM.NS_OK) SWT.error (rc);
+			if (result2[0] == 0) SWT.error (XPCOM.NS_NOINTERFACE);
+
+			nsIServiceManager serviceManager = new nsIServiceManager (result2[0]);
+			result2[0] = 0;
+			byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_MEMORY_CONTRACTID, true);
+			rc = serviceManager.GetServiceByContractID (aContractID, nsIMemory.NS_IMEMORY_IID, result2);
+			if (rc != XPCOM.NS_OK) SWT.error (rc);
+			if (result2[0] == 0) SWT.error (XPCOM.NS_NOINTERFACE);		
+			serviceManager.Release ();
+
+			nsIMemory memory = new nsIMemory (result2[0]);
+			result2[0] = 0;
+
+			int cnt = valueLabel[0].length ();
+			char[] buffer = new char[cnt + 1];
+			valueLabel[0].getChars (0, cnt, buffer, 0);
+			int size = buffer.length * 2;
+			int /*long*/ ptr = memory.Alloc (size);
+			XPCOM.memmove (ptr, buffer, size);
+			XPCOM.memmove (aValue, new int /*long*/[] {ptr}, C.PTR_SIZEOF);
+
+			if (valueAddr[0] != 0) {
+				memory.Free (valueAddr[0]);
+			}
+			memory.Release ();
+		}
+	}
+	if (aCheckState != 0) XPCOM.memmove (aCheckState, check, 4);
+	return XPCOM.NS_OK;
+}
+
+int PromptAuth(int /*long*/ aParent, int /*long*/ aChannel, int level, int /*long*/ authInfo, int /*long*/ checkboxLabel, int /*long*/ checkboxValue, int /*long*/ _retval) {
+	nsIAuthInformation auth = new nsIAuthInformation (authInfo);
+
+	Browser browser = getBrowser (aParent);
+	if (browser != null) {
+		Mozilla mozilla = (Mozilla)browser.webBrowser;
+		/*
+		 * Do not invoke the listeners if this challenge has been failed too many
+		 * times because a listener is likely giving incorrect credentials repeatedly
+		 * and will do so indefinitely.
+		 */
+		if (mozilla.authCount++ < 3) {
+			for (int i = 0; i < mozilla.authenticationListeners.length; i++) {
+				AuthenticationEvent event = new AuthenticationEvent (browser);
+				event.location = mozilla.lastNavigateURL;
+				mozilla.authenticationListeners[i].authenticate (event);
+				if (!event.doit) {
+					XPCOM.memmove (_retval, new int[] {0}, 4);	/* PRBool */
+					return XPCOM.NS_OK;
+				}
+				if (event.user != null && event.password != null) {
+					nsEmbedString string = new nsEmbedString (event.user);
+					int rc = auth.SetUsername (string.getAddress ());
+					if (rc != XPCOM.NS_OK) SWT.error (rc);
+					string.dispose ();
+					string = new nsEmbedString (event.password);
+					rc = auth.SetPassword (string.getAddress ());
+					if (rc != XPCOM.NS_OK) SWT.error (rc);
+					string.dispose ();
+					XPCOM.memmove (_retval, new int[] {1}, 4);	/* PRBool */
+					return XPCOM.NS_OK;
+				}
+			}
+		}
+	}
+
+	/* no listener handled the challenge, so show an authentication dialog */
+
+	String checkLabel = null;
+	int[] checkValue = new int[1];
+	String[] userLabel = new String[1], passLabel = new String[1];
+
+	String title = SWT.getMessage ("SWT_Authentication_Required"); //$NON-NLS-1$
+
+	if (checkboxLabel != 0 && checkboxValue != 0) {
+		int length = XPCOM.strlen_PRUnichar (checkboxLabel);
+		char[] dest = new char[length];
+		XPCOM.memmove (dest, checkboxLabel, length * 2);
+		checkLabel = new String (dest);
+		XPCOM.memmove (checkValue, checkboxValue, 4); /* PRBool */
+	}
+
+	/* get initial username and password values */
+
+	int /*long*/ ptr = XPCOM.nsEmbedString_new ();
+	int rc = auth.GetUsername (ptr);
+	if (rc != XPCOM.NS_OK) SWT.error (rc);
+	int length = XPCOM.nsEmbedString_Length (ptr);
+	int /*long*/ buffer = XPCOM.nsEmbedString_get (ptr);
+	char[] chars = new char[length];
+	XPCOM.memmove (chars, buffer, length * 2);
+	userLabel[0] = new String (chars);
+	XPCOM.nsEmbedString_delete (ptr);
+
+	ptr = XPCOM.nsEmbedString_new ();
+	rc = auth.GetPassword (ptr);
+	if (rc != XPCOM.NS_OK) SWT.error (rc);
+	length = XPCOM.nsEmbedString_Length (ptr);
+	buffer = XPCOM.nsEmbedString_get (ptr);
+	chars = new char[length];
+	XPCOM.memmove (chars, buffer, length * 2);
+	passLabel[0] = new String (chars);
+	XPCOM.nsEmbedString_delete (ptr);
+
+	/* compute the message text */
+
+	ptr = XPCOM.nsEmbedString_new ();
+	rc = auth.GetRealm (ptr);
+	if (rc != XPCOM.NS_OK) SWT.error (rc);
+	length = XPCOM.nsEmbedString_Length (ptr);
+	buffer = XPCOM.nsEmbedString_get (ptr);
+	chars = new char[length];
+	XPCOM.memmove (chars, buffer, length * 2);
+	String realm = new String (chars);
+	XPCOM.nsEmbedString_delete (ptr);
+
+	nsIChannel channel = new nsIChannel (aChannel);
+	int /*long*/[] uri = new int /*long*/[1];
+	rc = channel.GetURI (uri);
+	if (rc != XPCOM.NS_OK) SWT.error (rc);
+	if (uri[0] == 0) Mozilla.error (XPCOM.NS_NOINTERFACE);
+
+	nsIURI nsURI = new nsIURI (uri[0]);
+	int /*long*/ host = XPCOM.nsEmbedCString_new ();
+	rc = nsURI.GetHost (host);
+	if (rc != XPCOM.NS_OK) SWT.error (rc);
+	length = XPCOM.nsEmbedCString_Length (host);
+	buffer = XPCOM.nsEmbedCString_get (host);
+	byte[] bytes = new byte[length];
+	XPCOM.memmove (bytes, buffer, length);
+	String hostString = new String (bytes);
+	XPCOM.nsEmbedCString_delete (host);
+	nsURI.Release ();
+
+	String message;
+	if (realm.length () > 0 && hostString.length () > 0) {
+		message = Compatibility.getMessage ("SWT_Enter_Username_and_Password", new String[] {realm, hostString}); //$NON-NLS-1$
+	} else {
+		message = ""; //$NON-NLS-1$
+	}
+
+	/* open the prompter */
+	Shell shell = browser == null ? new Shell () : browser.getShell ();
+	PromptDialog dialog = new PromptDialog (shell);
+	int[] result = new int[1];
+	dialog.promptUsernameAndPassword (title, message, checkLabel, userLabel, passLabel, checkValue, result);
+
+	XPCOM.memmove (_retval, result, 4);	/* PRBool */
+	if (result[0] == 1) {	/* User selected OK */
+		nsEmbedString string = new nsEmbedString (userLabel[0]);
+		rc = auth.SetUsername(string.getAddress ());
+		if (rc != XPCOM.NS_OK) SWT.error (rc);
+		string.dispose ();
+		
+		string = new nsEmbedString (passLabel[0]);
+		rc = auth.SetPassword(string.getAddress ());
+		if (rc != XPCOM.NS_OK) SWT.error (rc);
+		string.dispose ();
+	}
+
+	if (checkboxValue != 0) XPCOM.memmove (checkboxValue, checkValue, 4); /* PRBool */
+	return XPCOM.NS_OK;
+}
+
+int PromptUsernameAndPassword (int /*long*/ aParent, int /*long*/ aDialogTitle, int /*long*/ aText, int /*long*/ aUsername, int /*long*/ aPassword, int /*long*/ aCheckMsg, int /*long*/ aCheckState, int /*long*/ _retval) {
+	Browser browser = getBrowser (aParent);
+	String user = null, password = null;
+
+	if (browser != null) {
+		Mozilla mozilla = (Mozilla)browser.webBrowser;
+		/*
+		 * Do not invoke the listeners if this challenge has been failed too many
+		 * times because a listener is likely giving incorrect credentials repeatedly
+		 * and will do so indefinitely.
+		 */
+		if (mozilla.authCount++ < 3) {
+			for (int i = 0; i < mozilla.authenticationListeners.length; i++) {
+				AuthenticationEvent event = new AuthenticationEvent (browser);
+				event.location = mozilla.lastNavigateURL;
+				mozilla.authenticationListeners[i].authenticate (event);
+				if (!event.doit) {
+					XPCOM.memmove (_retval, new int[] {0}, 4);	/* PRBool */
+					return XPCOM.NS_OK;
+				}
+				if (event.user != null && event.password != null) {
+					user = event.user;
+					password = event.password;
+					XPCOM.memmove (_retval, new int[] {1}, 4);	/* PRBool */
+					break;
+				}
+			}
+		}
+	}
+
+	if (user == null) {
+		/* no listener handled the challenge, so show an authentication dialog */
+
+		String titleLabel, textLabel, checkLabel = null;
+		String[] userLabel = new String[1], passLabel = new String[1];
+		char[] dest;
+		int length;
+		if (aDialogTitle != 0) {
+			length = XPCOM.strlen_PRUnichar (aDialogTitle);
+			dest = new char[length];
+			XPCOM.memmove (dest, aDialogTitle, length * 2);
+			titleLabel = new String (dest);
+		} else {
+			titleLabel = SWT.getMessage ("SWT_Authentication_Required");	//$NON-NLS-1$
+		}
+		
+		length = XPCOM.strlen_PRUnichar (aText);
+		dest = new char[length];
+		XPCOM.memmove (dest, aText, length * 2);
+		textLabel = new String (dest);
+
+		int /*long*/[] userAddr = new int /*long*/[1];
+		XPCOM.memmove (userAddr, aUsername, C.PTR_SIZEOF);
+		if (userAddr[0] != 0) {
+			length = XPCOM.strlen_PRUnichar (userAddr[0]);
+			dest = new char[length];
+			XPCOM.memmove (dest, userAddr[0], length * 2);
+			userLabel[0] = new String (dest);		
+		}
+
+		int /*long*/[] passAddr = new int /*long*/[1];
+		XPCOM.memmove (passAddr, aPassword, C.PTR_SIZEOF);
+		if (passAddr[0] != 0) {
+			length = XPCOM.strlen_PRUnichar (passAddr[0]);
+			dest = new char[length];
+			XPCOM.memmove (dest, passAddr[0], length * 2);
+			passLabel[0] = new String (dest);		
+		}
+		
+		if (aCheckMsg != 0) {
+			length = XPCOM.strlen_PRUnichar (aCheckMsg);
+			if (length > 0) {
+				dest = new char[length];
+				XPCOM.memmove (dest, aCheckMsg, length * 2);
+				checkLabel = new String (dest);
+			}
+		}
+	
+		Shell shell = browser == null ? new Shell () : browser.getShell ();
+		PromptDialog dialog = new PromptDialog (shell);
+		int[] check = new int[1], result = new int[1];
+		if (aCheckState != 0) XPCOM.memmove (check, aCheckState, 4);	/* PRBool */
+		dialog.promptUsernameAndPassword (titleLabel, textLabel, checkLabel, userLabel, passLabel, check, result);
+	
+		XPCOM.memmove (_retval, result, 4);	/* PRBool */
+		if (result[0] == 1) {
+			/* User selected OK */
+			user = userLabel[0];
+			password = passLabel[0];
+		}
+		if (aCheckState != 0) XPCOM.memmove (aCheckState, check, 4); /* PRBool */
+	}
+
+	if (user != null) {
+		/* 
+		* User name and password are returned as PRUnichar values. Any default
+		* value that we override must be freed using the nsIMemory service.
+		*/
+		int /*long*/[] userAddr = new int /*long*/[1];
+		XPCOM.memmove (userAddr, aUsername, C.PTR_SIZEOF);
+		int /*long*/[] passAddr = new int /*long*/[1];
+		XPCOM.memmove (passAddr, aPassword, C.PTR_SIZEOF);
+
+		int /*long*/[] result = new int /*long*/[1];
+		int rc = XPCOM.NS_GetServiceManager (result);
+		if (rc != XPCOM.NS_OK) SWT.error (rc);
+		if (result[0] == 0) SWT.error (XPCOM.NS_NOINTERFACE);
+
+		nsIServiceManager serviceManager = new nsIServiceManager (result[0]);
+		result[0] = 0;
+		byte[] aContractID = MozillaDelegate.wcsToMbcs (null, XPCOM.NS_MEMORY_CONTRACTID, true);
+		rc = serviceManager.GetServiceByContractID (aContractID, nsIMemory.NS_IMEMORY_IID, result);
+		if (rc != XPCOM.NS_OK) SWT.error (rc);
+		if (result[0] == 0) SWT.error (XPCOM.NS_NOINTERFACE);		
+		serviceManager.Release ();
+
+		nsIMemory memory = new nsIMemory (result[0]);
+		result[0] = 0;
+		if (userAddr[0] != 0) memory.Free (userAddr[0]);
+		if (passAddr[0] != 0) memory.Free (passAddr[0]);
+		memory.Release ();
+
+		/* write the name and password values */
+
+		int cnt = user.length ();
+		char[] buffer = new char[cnt + 1];
+		user.getChars (0, cnt, buffer, 0);
+		int size = buffer.length * 2;
+		int /*long*/ ptr = C.malloc (size);
+		XPCOM.memmove (ptr, buffer, size);
+		XPCOM.memmove (aUsername, new int /*long*/[] {ptr}, C.PTR_SIZEOF);
+
+		cnt = password.length ();
+		buffer = new char[cnt + 1];
+		password.getChars (0, cnt, buffer, 0);
+		size = buffer.length * 2;
+		ptr = C.malloc (size);
+		XPCOM.memmove (ptr, buffer, size);
+		XPCOM.memmove (aPassword, new int /*long*/[] {ptr}, C.PTR_SIZEOF);
+	}
+
+	return XPCOM.NS_OK;
+}
+
+int PromptPassword (int /*long*/ aParent, int /*long*/ aDialogTitle, int /*long*/ aText, int /*long*/ aPassword, int /*long*/ aCheckMsg, int /*long*/ aCheckState, int /*long*/ _retval) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+int Select (int /*long*/ aParent, int /*long*/ aDialogTitle, int /*long*/ aText, int aCount, int /*long*/ aSelectList, int /*long*/ aOutSelection, int /*long*/ _retval) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/PromptService2Factory.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/PromptService2Factory.java
new file mode 100644
index 0000000..89fdc66
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/PromptService2Factory.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.browser;
+
+import org.eclipse.swt.internal.C;
+import org.eclipse.swt.internal.mozilla.*;
+
+class PromptService2Factory {
+	XPCOMObject supports;
+	XPCOMObject factory;
+	int refCount = 0;
+
+PromptService2Factory () {
+	createCOMInterfaces ();
+}
+
+int AddRef () {
+	refCount++;
+	return refCount;
+}
+
+void createCOMInterfaces () {
+	/* Create each of the interfaces that this object implements */
+	supports = new XPCOMObject (new int[] {2, 0, 0}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+	};
+	
+	factory = new XPCOMObject (new int[] {2, 0, 0, 3, 1}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return CreateInstance (args[0], args[1], args[2]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return LockFactory ((int)/*64*/args[0]);}
+	};
+}
+
+void disposeCOMInterfaces () {
+	if (supports != null) {
+		supports.dispose ();
+		supports = null;
+	}	
+	if (factory != null) {
+		factory.dispose ();
+		factory = null;	
+	}
+}
+
+int /*long*/ getAddress () {
+	return factory.getAddress ();
+}
+
+int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return XPCOM.NS_ERROR_NO_INTERFACE;
+	nsID guid = new nsID ();
+	XPCOM.memmove (guid, riid, nsID.sizeof);
+	
+	if (guid.Equals (nsISupports.NS_ISUPPORTS_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {supports.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIFactory.NS_IFACTORY_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {factory.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	
+	XPCOM.memmove (ppvObject, new int /*long*/[] {0}, C.PTR_SIZEOF);
+	return XPCOM.NS_ERROR_NO_INTERFACE;
+}
+        	
+int Release () {
+	refCount--;
+	if (refCount == 0) disposeCOMInterfaces ();
+	return refCount;
+}
+	
+/* nsIFactory */
+
+int CreateInstance (int /*long*/ aOuter, int /*long*/ iid, int /*long*/ result) {
+	PromptService2 promptService = new PromptService2 ();
+	promptService.AddRef ();
+	XPCOM.memmove (result, new int /*long*/[] {promptService.getAddress ()}, C.PTR_SIZEOF);
+	return XPCOM.NS_OK;
+}
+
+int LockFactory (int lock) {
+	return XPCOM.NS_OK;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/SimpleEnumerator.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/SimpleEnumerator.java
new file mode 100644
index 0000000..4be8516
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/SimpleEnumerator.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2007 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.browser;
+
+import org.eclipse.swt.internal.C;
+import org.eclipse.swt.internal.mozilla.*;
+
+class SimpleEnumerator {
+	XPCOMObject supports;
+	XPCOMObject simpleEnumerator;
+	int refCount = 0;
+	nsISupports[] values;
+	int index = 0;
+
+SimpleEnumerator (nsISupports[] values) {
+	this.values = values;
+	for (int i = 0; i < values.length; i++) {
+		values[i].AddRef ();
+	}
+	createCOMInterfaces ();
+}
+
+int AddRef () {
+	refCount++;
+	return refCount;
+}
+
+void createCOMInterfaces () {
+	/* Create each of the interfaces that this object implements */
+	supports = new XPCOMObject (new int[] {2, 0, 0}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+	};
+
+	simpleEnumerator = new XPCOMObject (new int[] {2, 0, 0, 1, 1}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return HasMoreElements (args[0]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return GetNext (args[0]);}
+	};
+}
+
+void disposeCOMInterfaces () {
+	if (supports != null) {
+		supports.dispose ();
+		supports = null;
+	}	
+	if (simpleEnumerator != null) {
+		simpleEnumerator.dispose ();
+		simpleEnumerator = null;	
+	}
+	if (values != null) {
+		for (int i = 0; i < values.length; i++) {
+			values[i].Release ();
+		}
+		values = null;
+	}
+}
+
+int /*long*/ getAddress () {
+	return simpleEnumerator.getAddress ();
+}
+
+int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return XPCOM.NS_ERROR_NO_INTERFACE;
+	nsID guid = new nsID ();
+	XPCOM.memmove (guid, riid, nsID.sizeof);
+
+	if (guid.Equals (nsISupports.NS_ISUPPORTS_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {supports.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsISimpleEnumerator.NS_ISIMPLEENUMERATOR_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {simpleEnumerator.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+
+	XPCOM.memmove (ppvObject, new int /*long*/[] {0}, C.PTR_SIZEOF);
+	return XPCOM.NS_ERROR_NO_INTERFACE;
+}
+
+int Release () {
+	refCount--;
+	if (refCount == 0) disposeCOMInterfaces ();
+	return refCount;
+}
+
+int HasMoreElements (int /*long*/ _retval) {
+	boolean more = values != null && index < values.length;
+	XPCOM.memmove (_retval, new int[] {more ? 1 : 0}, 4); /*PRBool */
+	return XPCOM.NS_OK;
+}	
+	
+int GetNext (int /*long*/ _retval) {
+	if (values == null || index == values.length) return XPCOM.NS_ERROR_UNEXPECTED;
+	nsISupports value = values[index++];
+    value.AddRef ();
+    XPCOM.memmove (_retval, new int /*long*/[] {value.getAddress ()}, C.PTR_SIZEOF);
+    return XPCOM.NS_OK;
+}		
+}
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/WindowCreator2.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/WindowCreator2.java
new file mode 100644
index 0000000..17ca051
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/WindowCreator2.java
@@ -0,0 +1,226 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2007 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.browser;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.mozilla.*;
+import org.eclipse.swt.layout.*;
+import org.eclipse.swt.widgets.*;
+
+class WindowCreator2 {
+	XPCOMObject supports;
+	XPCOMObject windowCreator;
+	XPCOMObject windowCreator2;
+	int refCount = 0;
+
+WindowCreator2 () {
+	createCOMInterfaces ();
+}
+
+int AddRef () {
+	refCount++;
+	return refCount;
+}
+
+void createCOMInterfaces () {
+	/* Create each of the interfaces that this object implements */
+	supports = new XPCOMObject (new int[] {2, 0, 0}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+	};
+
+	windowCreator = new XPCOMObject (new int[] {2, 0, 0, 3}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return CreateChromeWindow (args[0], (int)/*64*/args[1], args[2]);}
+	};
+
+	windowCreator2 = new XPCOMObject (new int[] {2, 0, 0, 3, 6}) {
+		public int /*long*/ method0 (int /*long*/[] args) {return QueryInterface (args[0], args[1]);}
+		public int /*long*/ method1 (int /*long*/[] args) {return AddRef ();}
+		public int /*long*/ method2 (int /*long*/[] args) {return Release ();}
+		public int /*long*/ method3 (int /*long*/[] args) {return CreateChromeWindow (args[0], (int)/*64*/args[1], args[2]);}
+		public int /*long*/ method4 (int /*long*/[] args) {return CreateChromeWindow2 (args[0], (int)/*64*/args[1], (int)/*64*/args[2], args[3], args[4], args[5]);}
+	};
+}
+
+void disposeCOMInterfaces () {
+	if (supports != null) {
+		supports.dispose ();
+		supports = null;
+	}	
+	if (windowCreator != null) {
+		windowCreator.dispose ();
+		windowCreator = null;	
+	}
+
+	if (windowCreator2 != null) {
+		windowCreator2.dispose ();
+		windowCreator2 = null;	
+	}
+}
+
+int /*long*/ getAddress () {
+	return windowCreator.getAddress ();
+}
+
+int QueryInterface (int /*long*/ riid, int /*long*/ ppvObject) {
+	if (riid == 0 || ppvObject == 0) return XPCOM.NS_ERROR_NO_INTERFACE;
+	nsID guid = new nsID ();
+	XPCOM.memmove (guid, riid, nsID.sizeof);
+	
+	if (guid.Equals (nsISupports.NS_ISUPPORTS_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {supports.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIWindowCreator.NS_IWINDOWCREATOR_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {windowCreator.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+	if (guid.Equals (nsIWindowCreator2.NS_IWINDOWCREATOR2_IID)) {
+		XPCOM.memmove (ppvObject, new int /*long*/[] {windowCreator2.getAddress ()}, C.PTR_SIZEOF);
+		AddRef ();
+		return XPCOM.NS_OK;
+	}
+
+	XPCOM.memmove (ppvObject, new int /*long*/[] {0}, C.PTR_SIZEOF);
+	return XPCOM.NS_ERROR_NO_INTERFACE;
+}
+        	
+int Release () {
+	refCount--;
+	if (refCount == 0) disposeCOMInterfaces ();
+	return refCount;
+}
+	
+/* nsIWindowCreator */
+
+int CreateChromeWindow (int /*long*/ parent, int chromeFlags, int /*long*/ _retval) {
+	return CreateChromeWindow2 (parent, chromeFlags, 0, 0, 0, _retval);
+}
+
+/* nsIWindowCreator2 */
+
+int CreateChromeWindow2 (int /*long*/ parent, int chromeFlags, int contextFlags, int /*long*/ uri, int /*long*/ cancel, int /*long*/ _retval) {
+	if (parent == 0 && (chromeFlags & nsIWebBrowserChrome.CHROME_OPENAS_CHROME) == 0) {
+		return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+	}
+	Browser src = null; 
+	if (parent != 0) {
+		nsIWebBrowserChrome browserChromeParent = new nsIWebBrowserChrome (parent);
+		int /*long*/[] aWebBrowser = new int /*long*/[1];
+		int rc = browserChromeParent.GetWebBrowser (aWebBrowser);
+		if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+		if (aWebBrowser[0] == 0) Mozilla.error (XPCOM.NS_ERROR_NO_INTERFACE);
+
+		nsIWebBrowser webBrowser = new nsIWebBrowser (aWebBrowser[0]);
+		int /*long*/[] result = new int /*long*/[1];
+		rc = webBrowser.QueryInterface (nsIBaseWindow.NS_IBASEWINDOW_IID, result);
+		if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+		if (result[0] == 0) Mozilla.error (XPCOM.NS_ERROR_NO_INTERFACE);
+		webBrowser.Release ();
+
+		nsIBaseWindow baseWindow = new nsIBaseWindow (result[0]);
+		result[0] = 0;
+		int /*long*/[] aParentNativeWindow = new int /*long*/[1];
+		rc = baseWindow.GetParentNativeWindow (aParentNativeWindow);
+		if (rc != XPCOM.NS_OK) Mozilla.error (rc);
+		if (aParentNativeWindow[0] == 0) Mozilla.error (XPCOM.NS_ERROR_NO_INTERFACE);
+		baseWindow.Release ();
+
+		src = Mozilla.findBrowser (aParentNativeWindow[0]);
+	}
+	final Browser browser;
+	boolean doit = true;
+	if ((chromeFlags & nsIWebBrowserChrome.CHROME_OPENAS_CHROME) != 0) {
+		/*
+		* Mozilla will request a new Browser in a modal window in order to emulate a native
+		* dialog that is not available to it (eg.- a print dialog on Linux).  For this
+		* reason modal requests are handled here so that the user is not exposed to them.
+		*/
+		int style = SWT.DIALOG_TRIM;
+		if ((chromeFlags & nsIWebBrowserChrome.CHROME_MODAL) != 0) style |= SWT.APPLICATION_MODAL; 
+		final Shell shell = src == null ?
+			new Shell (style) :
+			new Shell (src.getShell(), style);
+		shell.setLayout (new FillLayout ());
+		browser = new Browser (shell, src == null ? SWT.MOZILLA : src.getStyle () & SWT.MOZILLA);
+		browser.addVisibilityWindowListener (new VisibilityWindowListener () {
+			public void hide (WindowEvent event) {
+			}
+			public void show (WindowEvent event) {
+				if (event.location != null) shell.setLocation (event.location);
+				if (event.size != null) {
+					Point size = event.size;
+					shell.setSize (shell.computeSize (size.x, size.y));
+				}
+				shell.open ();
+			}
+		});
+		browser.addCloseWindowListener (new CloseWindowListener () {
+			public void close (WindowEvent event) {
+				shell.close ();
+			}
+		});
+		if (uri != 0) {
+			nsIURI location = new nsIURI (uri);
+			int /*long*/ aSpec = XPCOM.nsEmbedCString_new ();
+			if (location.GetSpec (aSpec) == XPCOM.NS_OK) {
+				int length = XPCOM.nsEmbedCString_Length (aSpec);
+				if (length > 0) {
+					int /*long*/ buffer = XPCOM.nsEmbedCString_get (aSpec);
+					byte[] dest = new byte[length];
+					XPCOM.memmove (dest, buffer, length);
+					browser.setUrl (new String (dest));
+				}
+			}
+			XPCOM.nsEmbedCString_delete (aSpec);
+		}
+	} else {
+		WindowEvent event = new WindowEvent (src);
+		event.display = src.getDisplay ();
+		event.widget = src;
+		event.required = true;
+		for (int i = 0; i < src.webBrowser.openWindowListeners.length; i++) {
+			src.webBrowser.openWindowListeners[i].open (event);
+		}
+		browser = event.browser;
+
+		/* Ensure that the Browser provided by the client is valid for use */ 
+		doit = browser != null && !browser.isDisposed ();
+		if (doit) {
+			String platform = Platform.PLATFORM;
+			boolean isMozillaNativePlatform = platform.equals ("gtk") || platform.equals ("motif"); //$NON-NLS-1$ //$NON-NLS-2$
+			doit = isMozillaNativePlatform || (browser.getStyle () & SWT.MOZILLA) != 0;
+		}
+	}
+	if (doit) {
+		Mozilla mozilla = (Mozilla)browser.webBrowser;
+		mozilla.isChild = true;
+		int /*long*/ chromePtr = mozilla.webBrowserChrome.getAddress ();
+		nsIWebBrowserChrome webBrowserChrome = new nsIWebBrowserChrome (chromePtr);
+		webBrowserChrome.SetChromeFlags (chromeFlags);
+		webBrowserChrome.AddRef ();
+		XPCOM.memmove (_retval, new int /*long*/[] {chromePtr}, C.PTR_SIZEOF);
+	} else {
+		if (cancel != 0) {
+			C.memmove (cancel, new int[] {1}, 4);	/* PRBool */
+		}
+	}
+	return doit ? XPCOM.NS_OK : XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/XPCOMObject.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/XPCOMObject.java
new file mode 100644
index 0000000..bc22e54
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/XPCOMObject.java
@@ -0,0 +1,1031 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 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.internal.mozilla;
+
+import java.util.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.*;
+
+public class XPCOMObject {
+	static boolean IsSolaris;
+	static {
+		String osName = System.getProperty ("os.name").toLowerCase (); //$NON-NLS-1$
+		IsSolaris = osName.startsWith ("sunos") || osName.startsWith("solaris"); //$NON-NLS-1$
+	}
+	
+	private int /*long*/ ppVtable;
+
+	static private final int MAX_ARG_COUNT = 12;
+	static private final int MAX_VTABLE_LENGTH = 80;
+	static final int OS_OFFSET = IsSolaris ? 2 : 0;
+	static private Callback[][] Callbacks = new Callback[MAX_VTABLE_LENGTH + OS_OFFSET][MAX_ARG_COUNT];
+	static private Hashtable ObjectMap = new Hashtable ();
+	
+	
+public XPCOMObject (int[] argCounts) {
+	int /*long*/[] callbackAddresses = new int /*long*/[argCounts.length + OS_OFFSET];
+	synchronized (Callbacks) {
+		for (int i = 0, length = argCounts.length; i < length; i++) {
+			if ((Callbacks[i + OS_OFFSET][argCounts[i]]) == null) {
+				Callbacks[i + OS_OFFSET][argCounts[i]] = new Callback (getClass (), "callback"+i, argCounts[i] + 1, true, XPCOM.NS_ERROR_FAILURE); //$NON-NLS-1$
+			}
+			callbackAddresses[i + OS_OFFSET] = Callbacks[i + OS_OFFSET][argCounts[i]].getAddress ();
+			if (callbackAddresses[i + OS_OFFSET] == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);
+		}
+	}
+
+	int /*long*/ pVtable = C.malloc (C.PTR_SIZEOF * (argCounts.length + OS_OFFSET));
+	XPCOM.memmove (pVtable, callbackAddresses, C.PTR_SIZEOF * (argCounts.length + OS_OFFSET));
+	ppVtable = C.malloc (C.PTR_SIZEOF);
+	XPCOM.memmove (ppVtable, new int /*long*/[] {pVtable}, C.PTR_SIZEOF);
+	ObjectMap.put (new LONG (ppVtable), this);
+}
+	
+static int /*long*/ callback0 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method0 (args);
+}
+static int /*long*/ callback1 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method1 (args);
+}
+static int /*long*/ callback10 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method10 (args);
+}
+static int /*long*/ callback11 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method11 (args);
+}
+static int /*long*/ callback12 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method12 (args);
+}
+static int /*long*/ callback13 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method13 (args);
+}
+static int /*long*/ callback14 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method14 (args);
+}
+static int /*long*/ callback15 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method15 (args);
+}
+static int /*long*/ callback16 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method16 (args);
+}
+static int /*long*/ callback17 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method17 (args);
+}
+static int /*long*/ callback18 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method18 (args);
+}
+static int /*long*/ callback19 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method19 (args);
+}
+static int /*long*/ callback2 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method2 (args);
+}
+static int /*long*/ callback20 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method20 (args);
+}
+static int /*long*/ callback21 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method21 (args);
+}
+static int /*long*/ callback22 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method22 (args);
+}
+static int /*long*/ callback23 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method23 (args);
+}
+static int /*long*/ callback24 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method24 (args);
+}
+static int /*long*/ callback25 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method25 (args);
+}
+static int /*long*/ callback26 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method26 (args);
+}
+static int /*long*/ callback27 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method27 (args);
+}
+static int /*long*/ callback28 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method28 (args);
+}
+static int /*long*/ callback29 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method29 (args);
+}
+static int /*long*/ callback3 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method3 (args);
+}
+static int /*long*/ callback30 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method30 (args);
+}
+static int /*long*/ callback31 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method31 (args);
+}
+static int /*long*/ callback32 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method32 (args);
+}
+static int /*long*/ callback33 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method33 (args);
+}
+static int /*long*/ callback34 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method34 (args);
+}
+static int /*long*/ callback35 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method35 (args);
+}
+static int /*long*/ callback36 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method36 (args);
+}
+static int /*long*/ callback37 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method37 (args);
+}
+static int /*long*/ callback38 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method38 (args);
+}
+static int /*long*/ callback39 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method39 (args);
+}
+static int /*long*/ callback4 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method4 (args);
+}
+static int /*long*/ callback40 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method40 (args);
+}
+static int /*long*/ callback41 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method41 (args);
+}
+static int /*long*/ callback42 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method42 (args);
+}
+static int /*long*/ callback43 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method43 (args);
+}
+static int /*long*/ callback44 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method44 (args);
+}
+static int /*long*/ callback45 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method45 (args);
+}
+static int /*long*/ callback46 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method46 (args);
+}
+static int /*long*/ callback47 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method47 (args);
+}
+static int /*long*/ callback48 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method48 (args);
+}
+static int /*long*/ callback49 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method49 (args);
+}
+static int /*long*/ callback5 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method5 (args);
+}
+static int /*long*/ callback50 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method50 (args);
+}
+static int /*long*/ callback51 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method51 (args);
+}
+static int /*long*/ callback52 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method52 (args);
+}
+static int /*long*/ callback53 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method53 (args);
+}
+static int /*long*/ callback54 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method54 (args);
+}
+static int /*long*/ callback55 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method55 (args);
+}
+static int /*long*/ callback56 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method56 (args);
+}
+static int /*long*/ callback57 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method57 (args);
+}
+static int /*long*/ callback58 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method58 (args);
+}
+static int /*long*/ callback59 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method59 (args);
+}
+static int /*long*/ callback6 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method6 (args);
+}
+static int /*long*/ callback60 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method60 (args);
+}
+static int /*long*/ callback61 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method61 (args);
+}
+static int /*long*/ callback62 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method62 (args);
+}
+static int /*long*/ callback63 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method63 (args);
+}
+static int /*long*/ callback64 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method64 (args);
+}
+static int /*long*/ callback65 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method65 (args);
+}
+static int /*long*/ callback66 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method66 (args);
+}
+static int /*long*/ callback67 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method67 (args);
+}
+static int /*long*/ callback68 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method68 (args);
+}
+static int /*long*/ callback69 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method69 (args);
+}
+static int /*long*/ callback7 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method7 (args);
+}
+static int /*long*/ callback70 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method70 (args);
+}
+static int /*long*/ callback71 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method71 (args);
+}
+static int /*long*/ callback72 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method72 (args);
+}
+static int /*long*/ callback73 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method73 (args);
+}
+static int /*long*/ callback74 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method74 (args);
+}
+static int /*long*/ callback75 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method75 (args);
+}
+static int /*long*/ callback76 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method76 (args);
+}
+static int /*long*/ callback77 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method77 (args);
+}
+static int /*long*/ callback78 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method78 (args);
+}
+static int /*long*/ callback79 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method79 (args);
+}
+static int /*long*/ callback8 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method8 (args);
+}
+static int /*long*/ callback9 (int /*long*/[] callbackArgs) {
+	// find the object on which this call was invoked
+	int /*long*/ address = callbackArgs[0];
+	Object object = ObjectMap.get (new LONG (address));
+	if (object == null) return XPCOM.NS_ERROR_FAILURE;
+	int /*long*/[] args = new int /*long*/[callbackArgs.length - 1];
+	System.arraycopy (callbackArgs, 1, args, 0, args.length);
+	return ((XPCOMObject) object).method9 (args);
+}
+
+public void dispose() {
+	// free the memory for this reference
+	int /*long*/[] pVtable = new int /*long*/[1];
+	XPCOM.memmove (pVtable, ppVtable, C.PTR_SIZEOF);
+	C.free (pVtable[0]);
+	C.free (ppVtable);	
+
+	// remove this ppVtable from the list
+	ObjectMap.remove (new LONG (ppVtable));	
+
+	ppVtable = 0;
+}
+	
+public int /*long*/ getAddress () {
+	return ppVtable;
+}
+
+public int /*long*/ method0 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method1 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method10 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method11 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method12 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method13 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method14 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method15 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method16 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method17 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method18 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method19 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method2 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method20 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method21 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method22 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method23 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method24 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method25 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method26 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method27 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method28 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method29 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method3 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method30 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method31 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method32 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method33 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method34 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method35 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method36 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method37 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method38 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method39 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method4 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method40 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method41 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method42 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method43 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method44 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method45 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method46 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method47 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method48 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method49 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method5 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method50 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method51 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method52 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method53 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method54 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method55 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method56 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method57 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method58 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method59 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method6 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method60 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method61 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method62 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method63 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method64 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method65 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method66 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method67 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method68 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method69 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method7 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method70 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method71 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method72 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method73 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method74 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method75 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method76 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method77 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method78 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method79 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method8 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+public int /*long*/ method9 (int /*long*/[] args) {
+	return XPCOM.NS_ERROR_NOT_IMPLEMENTED;
+}
+}
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/init/GREVersionRange.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/init/GREVersionRange.java
new file mode 100644
index 0000000..da361dd0
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/init/GREVersionRange.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.internal.mozilla.init;
+
+/** @jniclass flags=cpp */
+public class GREVersionRange {
+    /** @field cast=(const char *) */
+	public int /*long*/ lower;
+    public boolean lowerInclusive;
+    /** @field cast=(const char *) */
+	public int /*long*/ upper;
+    public boolean upperInclusive;
+    public static final int sizeof = XPCOMInit.GREVersionRange_sizeof();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/init/XPCOMInit.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/init/XPCOMInit.java
new file mode 100644
index 0000000..a746934
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/init/XPCOMInit.java
@@ -0,0 +1,71 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2006 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla.init;
+
+import org.eclipse.swt.internal.Platform;
+
+/** @jniclass flags=cpp */
+public class XPCOMInit extends Platform {
+	public static final int PATH_MAX = 4096;
+	
+public static final native int GREVersionRange_sizeof ();
+
+/**
+ * @param versions cast=(const GREVersionRange *)
+ * @param properties cast=(const GREProperty *)
+ * @param buffer cast=(char *)
+ */
+public static final native int _GRE_GetGREPathWithProperties (GREVersionRange versions, int versionsLength, int /*long*/ properties, int propertiesLength, int /*long*/ buffer, int buflen);
+public static final int GRE_GetGREPathWithProperties (GREVersionRange versions, int versionsLength, int /*long*/ properties, int propertiesLength, int /*long*/ buffer, int buflen) {
+	lock.lock();
+	try {
+		return _GRE_GetGREPathWithProperties(versions, versionsLength, properties, propertiesLength, buffer, buflen);
+	} finally {
+		lock.unlock();
+	}
+}
+/** @param place cast=(const char *) */
+public static final native int _XPCOMGlueStartup (byte[] place);
+public static final int XPCOMGlueStartup (byte[] place) {
+	lock.lock();
+	try {
+		return _XPCOMGlueStartup(place);
+	} finally {
+		lock.unlock();
+	}
+}
+public static final native int _XPCOMGlueShutdown ();
+public static final int XPCOMGlueShutdown () {
+	lock.lock();
+	try {
+		return _XPCOMGlueShutdown();
+	} finally {
+		lock.unlock();
+	}
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsDynamicFunctionLoad.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsDynamicFunctionLoad.java
new file mode 100644
index 0000000..7857539
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsDynamicFunctionLoad.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 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.internal.mozilla;
+
+public class nsDynamicFunctionLoad {
+    /** @field cast=(const char *) */
+	public int /*long*/ functionName;
+	/** @field cast=(NSFuncPtr  *) */
+	public int /*long*/ function;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIAuthInformation.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIAuthInformation.java
new file mode 100644
index 0000000..2041790
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIAuthInformation.java
@@ -0,0 +1,87 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2008 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIAuthInformation extends nsISupports {
+
+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 9;
+
+	public static final String NS_IAUTHINFORMATION_IID_STR =
+		"0d73639c-2a92-4518-9f92-28f71fea5f20";
+
+	public static final nsID NS_IAUTHINFORMATION_IID =
+		new nsID(NS_IAUTHINFORMATION_IID_STR);
+
+	public nsIAuthInformation(int /*long*/ address) {
+		super(address);
+	}
+
+	public static final int AUTH_HOST = 1;
+
+	public static final int AUTH_PROXY = 2;
+
+	public static final int NEED_DOMAIN = 4;
+
+	public static final int ONLY_PASSWORD = 8;
+
+	public int GetFlags(int[] aFlags) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 1, getAddress(), aFlags);
+	}
+
+	public int GetRealm(int /*long*/ aRealm) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 2, getAddress(), aRealm);
+	}
+
+	public int GetAuthenticationScheme(int /*long*/ aAuthenticationScheme) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 3, getAddress(), aAuthenticationScheme);
+	}
+
+	public int GetUsername(int /*long*/ aUsername) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 4, getAddress(), aUsername);
+	}
+
+	public int SetUsername(int /*long*/ aUsername) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 5, getAddress(), aUsername);
+	}
+
+	public int GetPassword(int /*long*/ aPassword) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 6, getAddress(), aPassword);
+	}
+
+	public int SetPassword(int /*long*/ aPassword) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 7, getAddress(), aPassword);
+	}
+
+	public int GetDomain(int /*long*/ aDomain) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 8, getAddress(), aDomain);
+	}
+
+	public int SetDomain(int /*long*/ aDomain) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 9, getAddress(), aDomain);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsICancelable.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsICancelable.java
new file mode 100644
index 0000000..e20f203
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsICancelable.java
@@ -0,0 +1,47 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsICancelable extends nsISupports {
+
+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 1;
+
+	public static final String NS_ICANCELABLE_IID_STR =
+		"d94ac0a0-bb18-46b8-844e-84159064b0bd";
+
+	public static final nsID NS_ICANCELABLE_IID =
+		new nsID(NS_ICANCELABLE_IID_STR);
+
+	public nsICancelable(int /*long*/ address) {
+		super(address);
+	}
+
+	public int Cancel(int aReason) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 1, getAddress(), aReason);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIChannel.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIChannel.java
new file mode 100644
index 0000000..5868a23
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIChannel.java
@@ -0,0 +1,119 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2008 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIChannel extends nsIRequest {
+
+	static final int LAST_METHOD_ID = nsIRequest.LAST_METHOD_ID + 16;
+
+	public static final String NS_ICHANNEL_IID_STR =
+		"c63a055a-a676-4e71-bf3c-6cfa11082018";
+
+	public static final nsID NS_ICHANNEL_IID =
+		new nsID(NS_ICHANNEL_IID_STR);
+
+	public nsIChannel(int /*long*/ address) {
+		super(address);
+	}
+
+	public int GetOriginalURI(int /*long*/[] aOriginalURI) {
+		return XPCOM.VtblCall(nsIRequest.LAST_METHOD_ID + 1, getAddress(), aOriginalURI);
+	}
+
+	public int SetOriginalURI(int /*long*/ aOriginalURI) {
+		return XPCOM.VtblCall(nsIRequest.LAST_METHOD_ID + 2, getAddress(), aOriginalURI);
+	}
+
+	public int GetURI(int /*long*/[] aURI) {
+		return XPCOM.VtblCall(nsIRequest.LAST_METHOD_ID + 3, getAddress(), aURI);
+	}
+
+	public int GetOwner(int /*long*/[] aOwner) {
+		return XPCOM.VtblCall(nsIRequest.LAST_METHOD_ID + 4, getAddress(), aOwner);
+	}
+
+	public int SetOwner(int /*long*/ aOwner) {
+		return XPCOM.VtblCall(nsIRequest.LAST_METHOD_ID + 5, getAddress(), aOwner);
+	}
+
+	public int GetNotificationCallbacks(int /*long*/[] aNotificationCallbacks) {
+		return XPCOM.VtblCall(nsIRequest.LAST_METHOD_ID + 6, getAddress(), aNotificationCallbacks);
+	}
+
+	public int SetNotificationCallbacks(int /*long*/ aNotificationCallbacks) {
+		return XPCOM.VtblCall(nsIRequest.LAST_METHOD_ID + 7, getAddress(), aNotificationCallbacks);
+	}
+
+	public int GetSecurityInfo(int /*long*/[] aSecurityInfo) {
+		return XPCOM.VtblCall(nsIRequest.LAST_METHOD_ID + 8, getAddress(), aSecurityInfo);
+	}
+
+	public int GetContentType(int /*long*/ aContentType) {
+		return XPCOM.VtblCall(nsIRequest.LAST_METHOD_ID + 9, getAddress(), aContentType);
+	}
+
+	public int SetContentType(int /*long*/ aContentType) {
+		return XPCOM.VtblCall(nsIRequest.LAST_METHOD_ID + 10, getAddress(), aContentType);
+	}
+
+	public int GetContentCharset(int /*long*/ aContentCharset) {
+		return XPCOM.VtblCall(nsIRequest.LAST_METHOD_ID + 11, getAddress(), aContentCharset);
+	}
+
+	public int SetContentCharset(int /*long*/ aContentCharset) {
+		return XPCOM.VtblCall(nsIRequest.LAST_METHOD_ID + 12, getAddress(), aContentCharset);
+	}
+
+	public int GetContentLength(int[] aContentLength) {
+		return XPCOM.VtblCall(nsIRequest.LAST_METHOD_ID + 13, getAddress(), aContentLength);
+	}
+
+	public int SetContentLength(int aContentLength) {
+		return XPCOM.VtblCall(nsIRequest.LAST_METHOD_ID + 14, getAddress(), aContentLength);
+	}
+
+	public int Open(int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsIRequest.LAST_METHOD_ID + 15, getAddress(), _retval);
+	}
+
+	public int AsyncOpen(int /*long*/ aListener, int /*long*/ aContext) {
+		return XPCOM.VtblCall(nsIRequest.LAST_METHOD_ID + 16, getAddress(), aListener, aContext);
+	}
+
+	public static final int LOAD_DOCUMENT_URI = 65536;
+
+	public static final int LOAD_RETARGETED_DOCUMENT_URI = 131072;
+
+	public static final int LOAD_REPLACE = 262144;
+
+	public static final int LOAD_INITIAL_DOCUMENT_URI = 524288;
+
+	public static final int LOAD_TARGETED = 1048576;
+
+	public static final int LOAD_CALL_CONTENT_SNIFFERS = 2097152;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIClassInfo.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIClassInfo.java
new file mode 100644
index 0000000..180f721
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIClassInfo.java
@@ -0,0 +1,91 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2008 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIClassInfo extends nsISupports {
+
+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 8;
+
+	public static final String NS_ICLASSINFO_IID_STR =
+		"986c11d0-f340-11d4-9075-0010a4e73d9a";
+
+	public static final nsID NS_ICLASSINFO_IID =
+		new nsID(NS_ICLASSINFO_IID_STR);
+
+	public nsIClassInfo(int /*long*/ address) {
+		super(address);
+	}
+
+	public int GetInterfaces(int[] count, int /*long*/[] array) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 1, getAddress(), count, array);
+	}
+
+	public int GetHelperForLanguage(int language, int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 2, getAddress(), language, _retval);
+	}
+
+	public int GetContractID(int /*long*/[] aContractID) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 3, getAddress(), aContractID);
+	}
+
+	public int GetClassDescription(int /*long*/[] aClassDescription) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 4, getAddress(), aClassDescription);
+	}
+
+	public int GetClassID(int /*long*/ aClassID) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 5, getAddress(), aClassID);
+	}
+
+	public int GetImplementationLanguage(int[] aImplementationLanguage) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 6, getAddress(), aImplementationLanguage);
+	}
+
+	public static final int SINGLETON = 1;
+
+	public static final int THREADSAFE = 2;
+
+	public static final int MAIN_THREAD_ONLY = 4;
+
+	public static final int DOM_OBJECT = 8;
+
+	public static final int PLUGIN_OBJECT = 16;
+
+	public static final int EAGER_CLASSINFO = 32;
+
+	public static final int CONTENT_NODE = 64;
+
+//	public static final int RESERVED = 2147483648;
+
+	public int GetFlags(int[] aFlags) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 7, getAddress(), aFlags);
+	}
+
+	public int GetClassIDNoAlloc(int /*long*/ aClassIDNoAlloc) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 8, getAddress(), aClassIDNoAlloc);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsICookieService.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsICookieService.java
new file mode 100644
index 0000000..f3faf9b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsICookieService.java
@@ -0,0 +1,64 @@
+package org.eclipse.swt.internal.mozilla;

+/* ***** BEGIN LICENSE BLOCK *****

+ * Version: MPL 1.1

+ *

+ * The contents of this file are subject to the Mozilla Public License Version

+ * 1.1 (the "License"); you may not use this file except in compliance with

+ * the License. You may obtain a copy of the License at

+ * http://www.mozilla.org/MPL/

+ *

+ * Software distributed under the License is distributed on an "AS IS" basis,

+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License

+ * for the specific language governing rights and limitations under the

+ * License.

+ *

+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.

+ *

+ * The Initial Developer of the Original Code is

+ * Netscape Communications Corporation.

+ * Portions created by Netscape are Copyright (C) 1998-1999

+ * Netscape Communications Corporation.  All Rights Reserved.

+ *

+ * Contributor(s):

+ *

+ * IBM

+ * -  Binding to permit interfacing between Mozilla and SWT

+ * -  Copyright (C) 2003, 2008 IBM Corp.  All Rights Reserved.

+ *

+ * ***** END LICENSE BLOCK ***** */

+

+

+public class nsICookieService extends nsISupports {

+

+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 5;

+

+	public static final String NS_ICOOKIESERVICE_IID_STR =

+		"011c3190-1434-11d6-a618-0010a401eb10";

+

+	public static final nsID NS_ICOOKIESERVICE_IID =

+		new nsID(NS_ICOOKIESERVICE_IID_STR);

+

+	public nsICookieService(int /*long*/ address) {

+		super(address);

+	}

+

+	public int GetCookieString(int /*long*/ aURI, int /*long*/ aChannel, int /*long*/[] _retval) {

+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 1, getAddress(), aURI, aChannel, _retval);

+	}

+

+	public int GetCookieStringFromHttp(int /*long*/ aURI, int /*long*/ aFirstURI, int /*long*/ aChannel, int /*long*/[] _retval) {

+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 2, getAddress(), aURI, aFirstURI, aChannel, _retval);

+	}

+

+	public int SetCookieString(int /*long*/ aURI, int /*long*/ aPrompt, byte[] aCookie, int /*long*/ aChannel) {

+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 3, getAddress(), aURI, aPrompt, aCookie, aChannel);

+	}

+

+	public int SetCookieStringFromHttp(int /*long*/ aURI, int /*long*/ aFirstURI, int /*long*/ aPrompt, byte[] aCookie, byte[] aServerTime, int /*long*/ aChannel) {

+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 4, getAddress(), aURI, aFirstURI, aPrompt, aCookie, aServerTime, aChannel);

+	}

+

+	public int GetCookieIconIsVisible(int[] aCookieIconIsVisible) {

+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 5, getAddress(), aCookieIconIsVisible);

+	}

+}

diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsICookieService_1_9.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsICookieService_1_9.java
new file mode 100644
index 0000000..0824f34
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsICookieService_1_9.java
@@ -0,0 +1,59 @@
+/* ***** BEGIN LICENSE BLOCK *****

+ * Version: MPL 1.1

+ *

+ * The contents of this file are subject to the Mozilla Public License Version

+ * 1.1 (the "License"); you may not use this file except in compliance with

+ * the License. You may obtain a copy of the License at

+ * http://www.mozilla.org/MPL/

+ *

+ * Software distributed under the License is distributed on an "AS IS" basis,

+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License

+ * for the specific language governing rights and limitations under the

+ * License.

+ *

+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.

+ *

+ * The Initial Developer of the Original Code is

+ * Netscape Communications Corporation.

+ * Portions created by Netscape are Copyright (C) 1998-1999

+ * Netscape Communications Corporation.  All Rights Reserved.

+ *

+ * Contributor(s):

+ *

+ * IBM

+ * -  Binding to permit interfacing between Mozilla and SWT

+ * -  Copyright (C) 2003, 2008 IBM Corp.  All Rights Reserved.

+ *

+ * ***** END LICENSE BLOCK ***** */

+package org.eclipse.swt.internal.mozilla;

+

+public class  nsICookieService_1_9 extends nsISupports {

+

+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 4;

+

+	public static final String NS_ICOOKIESERVICE_IID_STR =

+		"2aaa897a-293c-4d2b-a657-8c9b7136996d";

+

+	public static final nsID NS_ICOOKIESERVICE_IID =

+		new nsID(NS_ICOOKIESERVICE_IID_STR);

+

+	public  nsICookieService_1_9(int /*long*/ address) {

+		super(address);

+	}

+

+	public int GetCookieString(int /*long*/ aURI, int /*long*/ aChannel, int /*long*/[] _retval) {

+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 1, getAddress(), aURI, aChannel, _retval);

+	}

+

+	public int GetCookieStringFromHttp(int /*long*/ aURI, int /*long*/ aFirstURI, int /*long*/ aChannel, int /*long*/[] _retval) {

+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 2, getAddress(), aURI, aFirstURI, aChannel, _retval);

+	}

+

+	public int SetCookieString(int /*long*/ aURI, int /*long*/ aPrompt, byte[] aCookie, int /*long*/ aChannel) {

+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 3, getAddress(), aURI, aPrompt, aCookie, aChannel);

+	}

+

+	public int SetCookieStringFromHttp(int /*long*/ aURI, int /*long*/ aFirstURI, int /*long*/ aPrompt, byte[] aCookie, byte[] aServerTime, int /*long*/ aChannel) {

+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 4, getAddress(), aURI, aFirstURI, aPrompt, aCookie, aServerTime, aChannel);

+	}

+}

diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDOMEventTarget.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDOMEventTarget.java
new file mode 100644
index 0000000..fd08c33
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDOMEventTarget.java
@@ -0,0 +1,55 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2008 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIDOMEventTarget extends nsISupports {
+
+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 3;
+
+	public static final String NS_IDOMEVENTTARGET_IID_STR =
+		"1c773b30-d1cf-11d2-bd95-00805f8ae3f4";
+
+	public static final nsID NS_IDOMEVENTTARGET_IID =
+		new nsID(NS_IDOMEVENTTARGET_IID_STR);
+
+	public nsIDOMEventTarget(int /*long*/ address) {
+		super(address);
+	}
+
+	public int AddEventListener(int /*long*/ type, int /*long*/ listener, int useCapture) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 1, getAddress(), type, listener, useCapture);
+	}
+
+	public int RemoveEventListener(int /*long*/ type, int /*long*/ listener, int useCapture) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 2, getAddress(), type, listener, useCapture);
+	}
+
+	public int DispatchEvent(int /*long*/ evt, int[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 3, getAddress(), evt, _retval);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDOMKeyEvent.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDOMKeyEvent.java
new file mode 100644
index 0000000..906c132
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDOMKeyEvent.java
@@ -0,0 +1,299 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2008 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIDOMKeyEvent extends nsIDOMUIEvent {
+
+	static final int LAST_METHOD_ID = nsIDOMUIEvent.LAST_METHOD_ID + 7;
+
+	public static final String NS_IDOMKEYEVENT_IID_STR =
+		"028e0e6e-8b01-11d3-aae7-0010838a3123";
+
+	public static final nsID NS_IDOMKEYEVENT_IID =
+		new nsID(NS_IDOMKEYEVENT_IID_STR);
+
+	public nsIDOMKeyEvent(int /*long*/ address) {
+		super(address);
+	}
+
+	public static final int DOM_VK_CANCEL = 3;
+
+	public static final int DOM_VK_HELP = 6;
+
+	public static final int DOM_VK_BACK_SPACE = 8;
+
+	public static final int DOM_VK_TAB = 9;
+
+	public static final int DOM_VK_CLEAR = 12;
+
+	public static final int DOM_VK_RETURN = 13;
+
+	public static final int DOM_VK_ENTER = 14;
+
+	public static final int DOM_VK_SHIFT = 16;
+
+	public static final int DOM_VK_CONTROL = 17;
+
+	public static final int DOM_VK_ALT = 18;
+
+	public static final int DOM_VK_PAUSE = 19;
+
+	public static final int DOM_VK_CAPS_LOCK = 20;
+
+	public static final int DOM_VK_ESCAPE = 27;
+
+	public static final int DOM_VK_SPACE = 32;
+
+	public static final int DOM_VK_PAGE_UP = 33;
+
+	public static final int DOM_VK_PAGE_DOWN = 34;
+
+	public static final int DOM_VK_END = 35;
+
+	public static final int DOM_VK_HOME = 36;
+
+	public static final int DOM_VK_LEFT = 37;
+
+	public static final int DOM_VK_UP = 38;
+
+	public static final int DOM_VK_RIGHT = 39;
+
+	public static final int DOM_VK_DOWN = 40;
+
+	public static final int DOM_VK_PRINTSCREEN = 44;
+
+	public static final int DOM_VK_INSERT = 45;
+
+	public static final int DOM_VK_DELETE = 46;
+
+	public static final int DOM_VK_0 = 48;
+
+	public static final int DOM_VK_1 = 49;
+
+	public static final int DOM_VK_2 = 50;
+
+	public static final int DOM_VK_3 = 51;
+
+	public static final int DOM_VK_4 = 52;
+
+	public static final int DOM_VK_5 = 53;
+
+	public static final int DOM_VK_6 = 54;
+
+	public static final int DOM_VK_7 = 55;
+
+	public static final int DOM_VK_8 = 56;
+
+	public static final int DOM_VK_9 = 57;
+
+	public static final int DOM_VK_SEMICOLON = 59;
+
+	public static final int DOM_VK_EQUALS = 61;
+
+	public static final int DOM_VK_A = 65;
+
+	public static final int DOM_VK_B = 66;
+
+	public static final int DOM_VK_C = 67;
+
+	public static final int DOM_VK_D = 68;
+
+	public static final int DOM_VK_E = 69;
+
+	public static final int DOM_VK_F = 70;
+
+	public static final int DOM_VK_G = 71;
+
+	public static final int DOM_VK_H = 72;
+
+	public static final int DOM_VK_I = 73;
+
+	public static final int DOM_VK_J = 74;
+
+	public static final int DOM_VK_K = 75;
+
+	public static final int DOM_VK_L = 76;
+
+	public static final int DOM_VK_M = 77;
+
+	public static final int DOM_VK_N = 78;
+
+	public static final int DOM_VK_O = 79;
+
+	public static final int DOM_VK_P = 80;
+
+	public static final int DOM_VK_Q = 81;
+
+	public static final int DOM_VK_R = 82;
+
+	public static final int DOM_VK_S = 83;
+
+	public static final int DOM_VK_T = 84;
+
+	public static final int DOM_VK_U = 85;
+
+	public static final int DOM_VK_V = 86;
+
+	public static final int DOM_VK_W = 87;
+
+	public static final int DOM_VK_X = 88;
+
+	public static final int DOM_VK_Y = 89;
+
+	public static final int DOM_VK_Z = 90;
+
+	public static final int DOM_VK_NUMPAD0 = 96;
+
+	public static final int DOM_VK_NUMPAD1 = 97;
+
+	public static final int DOM_VK_NUMPAD2 = 98;
+
+	public static final int DOM_VK_NUMPAD3 = 99;
+
+	public static final int DOM_VK_NUMPAD4 = 100;
+
+	public static final int DOM_VK_NUMPAD5 = 101;
+
+	public static final int DOM_VK_NUMPAD6 = 102;
+
+	public static final int DOM_VK_NUMPAD7 = 103;
+
+	public static final int DOM_VK_NUMPAD8 = 104;
+
+	public static final int DOM_VK_NUMPAD9 = 105;
+
+	public static final int DOM_VK_MULTIPLY = 106;
+
+	public static final int DOM_VK_ADD = 107;
+
+	public static final int DOM_VK_SEPARATOR = 108;
+
+	public static final int DOM_VK_SUBTRACT = 109;
+
+	public static final int DOM_VK_DECIMAL = 110;
+
+	public static final int DOM_VK_DIVIDE = 111;
+
+	public static final int DOM_VK_F1 = 112;
+
+	public static final int DOM_VK_F2 = 113;
+
+	public static final int DOM_VK_F3 = 114;
+
+	public static final int DOM_VK_F4 = 115;
+
+	public static final int DOM_VK_F5 = 116;
+
+	public static final int DOM_VK_F6 = 117;
+
+	public static final int DOM_VK_F7 = 118;
+
+	public static final int DOM_VK_F8 = 119;
+
+	public static final int DOM_VK_F9 = 120;
+
+	public static final int DOM_VK_F10 = 121;
+
+	public static final int DOM_VK_F11 = 122;
+
+	public static final int DOM_VK_F12 = 123;
+
+	public static final int DOM_VK_F13 = 124;
+
+	public static final int DOM_VK_F14 = 125;
+
+	public static final int DOM_VK_F15 = 126;
+
+	public static final int DOM_VK_F16 = 127;
+
+	public static final int DOM_VK_F17 = 128;
+
+	public static final int DOM_VK_F18 = 129;
+
+	public static final int DOM_VK_F19 = 130;
+
+	public static final int DOM_VK_F20 = 131;
+
+	public static final int DOM_VK_F21 = 132;
+
+	public static final int DOM_VK_F22 = 133;
+
+	public static final int DOM_VK_F23 = 134;
+
+	public static final int DOM_VK_F24 = 135;
+
+	public static final int DOM_VK_NUM_LOCK = 144;
+
+	public static final int DOM_VK_SCROLL_LOCK = 145;
+
+	public static final int DOM_VK_COMMA = 188;
+
+	public static final int DOM_VK_PERIOD = 190;
+
+	public static final int DOM_VK_SLASH = 191;
+
+	public static final int DOM_VK_BACK_QUOTE = 192;
+
+	public static final int DOM_VK_OPEN_BRACKET = 219;
+
+	public static final int DOM_VK_BACK_SLASH = 220;
+
+	public static final int DOM_VK_CLOSE_BRACKET = 221;
+
+	public static final int DOM_VK_QUOTE = 222;
+
+	public static final int DOM_VK_META = 224;
+
+	public int GetCharCode(int[] aCharCode) {
+		return XPCOM.VtblCall(nsIDOMUIEvent.LAST_METHOD_ID + 1, getAddress(), aCharCode);
+	}
+
+	public int GetKeyCode(int[] aKeyCode) {
+		return XPCOM.VtblCall(nsIDOMUIEvent.LAST_METHOD_ID + 2, getAddress(), aKeyCode);
+	}
+
+	public int GetAltKey(int[] aAltKey) {
+		return XPCOM.VtblCall(nsIDOMUIEvent.LAST_METHOD_ID + 3, getAddress(), aAltKey);
+	}
+
+	public int GetCtrlKey(int[] aCtrlKey) {
+		return XPCOM.VtblCall(nsIDOMUIEvent.LAST_METHOD_ID + 4, getAddress(), aCtrlKey);
+	}
+
+	public int GetShiftKey(int[] aShiftKey) {
+		return XPCOM.VtblCall(nsIDOMUIEvent.LAST_METHOD_ID + 5, getAddress(), aShiftKey);
+	}
+
+	public int GetMetaKey(int[] aMetaKey) {
+		return XPCOM.VtblCall(nsIDOMUIEvent.LAST_METHOD_ID + 6, getAddress(), aMetaKey);
+	}
+
+	public int InitKeyEvent(int /*long*/ typeArg, int canBubbleArg, int cancelableArg, int /*long*/ viewArg, int ctrlKeyArg, int altKeyArg, int shiftKeyArg, int metaKeyArg, int keyCodeArg, int charCodeArg) {
+		return XPCOM.VtblCall(nsIDOMUIEvent.LAST_METHOD_ID + 7, getAddress(), typeArg, canBubbleArg, cancelableArg, viewArg, ctrlKeyArg, altKeyArg, shiftKeyArg, metaKeyArg, keyCodeArg, charCodeArg);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDOMSerializer.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDOMSerializer.java
new file mode 100644
index 0000000..a44ec1f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDOMSerializer.java
@@ -0,0 +1,51 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIDOMSerializer extends nsISupports {
+
+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 2;
+
+	public static final String NS_IDOMSERIALIZER_IID_STR =
+		"a6cf9123-15b3-11d2-932e-00805f8add32";
+
+	public static final nsID NS_IDOMSERIALIZER_IID =
+		new nsID(NS_IDOMSERIALIZER_IID_STR);
+
+	public nsIDOMSerializer(int /*long*/ address) {
+		super(address);
+	}
+
+	public int SerializeToString(int /*long*/ root, int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 1, getAddress(), root, _retval);
+	}
+
+	public int SerializeToStream(int /*long*/ root, int /*long*/ stream, byte[] charset) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 2, getAddress(), root, stream, charset);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDOMSerializer_1_7.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDOMSerializer_1_7.java
new file mode 100644
index 0000000..3a8ec8b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDOMSerializer_1_7.java
@@ -0,0 +1,51 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIDOMSerializer_1_7 extends nsISupports {
+
+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 2;
+
+	public static final String NS_IDOMSERIALIZER_IID_STR =
+		"9fd4ba15-e67c-4c98-b52c-7715f62c9196";
+
+	public static final nsID NS_IDOMSERIALIZER_IID =
+		new nsID(NS_IDOMSERIALIZER_IID_STR);
+
+	public nsIDOMSerializer_1_7(int /*long*/ address) {
+		super(address);
+	}
+
+	public int SerializeToString(int /*long*/ root, int /*long*/ _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 1, getAddress(), root, _retval);
+	}
+
+	public int SerializeToStream(int /*long*/ root, int /*long*/ stream, int /*long*/ charset) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 2, getAddress(), root, stream, charset);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDOMWindowCollection.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDOMWindowCollection.java
new file mode 100644
index 0000000..663688a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDOMWindowCollection.java
@@ -0,0 +1,55 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIDOMWindowCollection extends nsISupports {
+
+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 3;
+
+	public static final String NS_IDOMWINDOWCOLLECTION_IID_STR =
+		"a6cf906f-15b3-11d2-932e-00805f8add32";
+
+	public static final nsID NS_IDOMWINDOWCOLLECTION_IID =
+		new nsID(NS_IDOMWINDOWCOLLECTION_IID_STR);
+
+	public nsIDOMWindowCollection(int /*long*/ address) {
+		super(address);
+	}
+
+	public int GetLength(int[] aLength) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 1, getAddress(), aLength);
+	}
+
+	public int Item(int index, int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 2, getAddress(), index, _retval);
+	}
+
+	public int NamedItem(int /*long*/ name, int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 3, getAddress(), name, _retval);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDataType.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDataType.java
new file mode 100644
index 0000000..88e6093
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDataType.java
@@ -0,0 +1,73 @@
+package org.eclipse.swt.internal.mozilla;
+
+
+public class nsIDataType extends nsISupports {
+
+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 0;
+
+	public static final String NS_IDATATYPE_IID_STR =
+		"4d12e540-83d7-11d5-90ed-0010a4e73d9a";
+
+	public static final nsID NS_IDATATYPE_IID =
+		new nsID(NS_IDATATYPE_IID_STR);
+
+	public nsIDataType(int /*long*/ address) {
+		super(address);
+	}
+
+	public static final short VTYPE_INT8 = 0;
+
+	public static final short VTYPE_INT16 = 1;
+
+	public static final short VTYPE_INT32 = 2;
+
+	public static final short VTYPE_INT64 = 3;
+
+	public static final short VTYPE_UINT8 = 4;
+
+	public static final short VTYPE_UINT16 = 5;
+
+	public static final short VTYPE_UINT32 = 6;
+
+	public static final short VTYPE_UINT64 = 7;
+
+	public static final short VTYPE_FLOAT = 8;
+
+	public static final short VTYPE_DOUBLE = 9;
+
+	public static final short VTYPE_BOOL = 10;
+
+	public static final short VTYPE_CHAR = 11;
+
+	public static final short VTYPE_WCHAR = 12;
+
+	public static final short VTYPE_VOID = 13;
+
+	public static final short VTYPE_ID = 14;
+
+	public static final short VTYPE_DOMSTRING = 15;
+
+	public static final short VTYPE_CHAR_STR = 16;
+
+	public static final short VTYPE_WCHAR_STR = 17;
+
+	public static final short VTYPE_INTERFACE = 18;
+
+	public static final short VTYPE_INTERFACE_IS = 19;
+
+	public static final short VTYPE_ARRAY = 20;
+
+	public static final short VTYPE_STRING_SIZE_IS = 21;
+
+	public static final short VTYPE_WSTRING_SIZE_IS = 22;
+
+	public static final short VTYPE_UTF8STRING = 23;
+
+	public static final short VTYPE_CSTRING = 24;
+
+	public static final short VTYPE_ASTRING = 25;
+
+	public static final short VTYPE_EMPTY_ARRAY = 254;
+
+	public static final short VTYPE_EMPTY = 255;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDirectoryService.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDirectoryService.java
new file mode 100644
index 0000000..58aef5f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDirectoryService.java
@@ -0,0 +1,55 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIDirectoryService extends nsISupports {
+
+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 3;
+
+	public static final String NS_IDIRECTORYSERVICE_IID_STR =
+		"57a66a60-d43a-11d3-8cc2-00609792278c";
+
+	public static final nsID NS_IDIRECTORYSERVICE_IID =
+		new nsID(NS_IDIRECTORYSERVICE_IID_STR);
+
+	public nsIDirectoryService(int /*long*/ address) {
+		super(address);
+	}
+
+	public int Init() {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 1, getAddress());
+	}
+
+	public int RegisterProvider(int /*long*/ prov) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 2, getAddress(), prov);
+	}
+
+	public int UnregisterProvider(int /*long*/ prov) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 3, getAddress(), prov);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDirectoryServiceProvider.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDirectoryServiceProvider.java
new file mode 100644
index 0000000..8998396
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDirectoryServiceProvider.java
@@ -0,0 +1,47 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2008 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIDirectoryServiceProvider extends nsISupports {
+
+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 1;
+
+	public static final String NS_IDIRECTORYSERVICEPROVIDER_IID_STR =
+		"bbf8cab0-d43a-11d3-8cc2-00609792278c";
+
+	public static final nsID NS_IDIRECTORYSERVICEPROVIDER_IID =
+		new nsID(NS_IDIRECTORYSERVICEPROVIDER_IID_STR);
+
+	public nsIDirectoryServiceProvider(int /*long*/ address) {
+		super(address);
+	}
+
+	public int GetFile(byte[] prop, int[] persistent, int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 1, getAddress(), prop, persistent, _retval);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDirectoryServiceProvider2.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDirectoryServiceProvider2.java
new file mode 100644
index 0000000..a277b15
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDirectoryServiceProvider2.java
@@ -0,0 +1,47 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIDirectoryServiceProvider2 extends nsIDirectoryServiceProvider {
+
+	static final int LAST_METHOD_ID = nsIDirectoryServiceProvider.LAST_METHOD_ID + 1;
+
+	public static final String NS_IDIRECTORYSERVICEPROVIDER2_IID_STRING =
+		"2f977d4b-5485-11d4-87e2-0010a4e75ef2";
+
+	public static final nsID NS_IDIRECTORYSERVICEPROVIDER2_IID =
+		new nsID(NS_IDIRECTORYSERVICEPROVIDER2_IID_STRING);
+
+	public nsIDirectoryServiceProvider2(int /*long*/ address) {
+		super(address);
+	}
+
+	public int GetFiles(byte[] prop, int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsIDirectoryServiceProvider.LAST_METHOD_ID + 1, getAddress(), prop, _retval);
+	}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDocShell_1_8.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDocShell_1_8.java
new file mode 100644
index 0000000..526c759
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDocShell_1_8.java
@@ -0,0 +1,317 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2008 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIDocShell_1_8 extends nsISupports {
+
+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 61;
+
+	public static final String NS_IDOCSHELL_IID_STR =
+		"9f0c7461-b9a4-47f6-b88c-421dce1bce66";
+
+	public static final nsID NS_IDOCSHELL_IID =
+		new nsID(NS_IDOCSHELL_IID_STR);
+
+	public nsIDocShell_1_8(int /*long*/ address) {
+		super(address);
+	}
+
+	public int LoadURI(int /*long*/ uri, int /*long*/ loadInfo, int aLoadFlags, int firstParty) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 1, getAddress(), uri, loadInfo, aLoadFlags, firstParty);
+	}
+
+	public int LoadStream(int /*long*/ aStream, int /*long*/ aURI, int /*long*/ aContentType, int /*long*/ aContentCharset, int /*long*/ aLoadInfo) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 2, getAddress(), aStream, aURI, aContentType, aContentCharset, aLoadInfo);
+	}
+
+	public static final int INTERNAL_LOAD_FLAGS_NONE = 0;
+
+	public static final int INTERNAL_LOAD_FLAGS_INHERIT_OWNER = 1;
+
+	public static final int INTERNAL_LOAD_FLAGS_DONT_SEND_REFERRER = 2;
+
+	public int InternalLoad(int /*long*/ aURI, int /*long*/ aReferrer, int /*long*/ aOwner, int aFlags, char[] aWindowTarget, byte[] aTypeHint, int /*long*/ aPostDataStream, int /*long*/ aHeadersStream, int aLoadFlags, int /*long*/ aSHEntry, int firstParty, int /*long*/[] aDocShell, int /*long*/[] aRequest) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 3, getAddress(), aURI, aReferrer, aOwner, aFlags, aWindowTarget, aTypeHint, aPostDataStream, aHeadersStream, aLoadFlags, aSHEntry, firstParty, aDocShell, aRequest);
+	}
+
+	public int CreateLoadInfo(int /*long*/[] loadInfo) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 4, getAddress(), loadInfo);
+	}
+
+	public int PrepareForNewContentModel() {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 5, getAddress());
+	}
+
+	public int SetCurrentURI(int /*long*/ aURI) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 6, getAddress(), aURI);
+	}
+
+	public int FirePageHideNotification(int isUnload) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 7, getAddress(), isUnload);
+	}
+
+	public int GetPresContext(int /*long*/[] aPresContext) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 8, getAddress(), aPresContext);
+	}
+
+	public int GetPresShell(int /*long*/[] aPresShell) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 9, getAddress(), aPresShell);
+	}
+
+	public int GetEldestPresShell(int /*long*/[] aEldestPresShell) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 10, getAddress(), aEldestPresShell);
+	}
+
+	public int GetContentViewer(int /*long*/[] aContentViewer) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 11, getAddress(), aContentViewer);
+	}
+
+	public int GetChromeEventHandler(int /*long*/[] aChromeEventHandler) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 12, getAddress(), aChromeEventHandler);
+	}
+
+	public int SetChromeEventHandler(int /*long*/ aChromeEventHandler) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 13, getAddress(), aChromeEventHandler);
+	}
+
+	public int GetDocumentCharsetInfo(int /*long*/[] aDocumentCharsetInfo) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 14, getAddress(), aDocumentCharsetInfo);
+	}
+
+	public int SetDocumentCharsetInfo(int /*long*/ aDocumentCharsetInfo) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 15, getAddress(), aDocumentCharsetInfo);
+	}
+
+	public int GetAllowPlugins(int[] aAllowPlugins) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 16, getAddress(), aAllowPlugins);
+	}
+
+	public int SetAllowPlugins(int aAllowPlugins) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 17, getAddress(), aAllowPlugins);
+	}
+
+	public int GetAllowJavascript(int[] aAllowJavascript) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 18, getAddress(), aAllowJavascript);
+	}
+
+	public int SetAllowJavascript(int aAllowJavascript) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 19, getAddress(), aAllowJavascript);
+	}
+
+	public int GetAllowMetaRedirects(int[] aAllowMetaRedirects) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 20, getAddress(), aAllowMetaRedirects);
+	}
+
+	public int SetAllowMetaRedirects(int aAllowMetaRedirects) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 21, getAddress(), aAllowMetaRedirects);
+	}
+
+	public int GetAllowSubframes(int[] aAllowSubframes) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 22, getAddress(), aAllowSubframes);
+	}
+
+	public int SetAllowSubframes(int aAllowSubframes) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 23, getAddress(), aAllowSubframes);
+	}
+
+	public int GetAllowImages(int[] aAllowImages) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 24, getAddress(), aAllowImages);
+	}
+
+	public int SetAllowImages(int aAllowImages) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 25, getAddress(), aAllowImages);
+	}
+
+	public static final int ENUMERATE_FORWARDS = 0;
+
+	public static final int ENUMERATE_BACKWARDS = 1;
+
+	public int GetDocShellEnumerator(int aItemType, int aDirection, int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 26, getAddress(), aItemType, aDirection, _retval);
+	}
+
+	public static final int APP_TYPE_UNKNOWN = 0;
+
+	public static final int APP_TYPE_MAIL = 1;
+
+	public static final int APP_TYPE_EDITOR = 2;
+
+	public int GetAppType(int[] aAppType) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 27, getAddress(), aAppType);
+	}
+
+	public int SetAppType(int aAppType) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 28, getAddress(), aAppType);
+	}
+
+	public int GetAllowAuth(int[] aAllowAuth) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 29, getAddress(), aAllowAuth);
+	}
+
+	public int SetAllowAuth(int aAllowAuth) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 30, getAddress(), aAllowAuth);
+	}
+
+	public int GetZoom(float[] aZoom) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 31, getAddress(), aZoom);
+	}
+
+	public int SetZoom(float aZoom) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 32, getAddress(), aZoom);
+	}
+
+	public int GetMarginWidth(int[] aMarginWidth) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 33, getAddress(), aMarginWidth);
+	}
+
+	public int SetMarginWidth(int aMarginWidth) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 34, getAddress(), aMarginWidth);
+	}
+
+	public int GetMarginHeight(int[] aMarginHeight) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 35, getAddress(), aMarginHeight);
+	}
+
+	public int SetMarginHeight(int aMarginHeight) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 36, getAddress(), aMarginHeight);
+	}
+
+	public int GetHasFocus(int[] aHasFocus) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 37, getAddress(), aHasFocus);
+	}
+
+	public int SetHasFocus(int aHasFocus) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 38, getAddress(), aHasFocus);
+	}
+
+	public int GetCanvasHasFocus(int[] aCanvasHasFocus) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 39, getAddress(), aCanvasHasFocus);
+	}
+
+	public int SetCanvasHasFocus(int aCanvasHasFocus) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 40, getAddress(), aCanvasHasFocus);
+	}
+
+	public int TabToTreeOwner(int forward, int[] tookFocus) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 41, getAddress(), forward, tookFocus);
+	}
+
+	public static final int BUSY_FLAGS_NONE = 0;
+
+	public static final int BUSY_FLAGS_BUSY = 1;
+
+	public static final int BUSY_FLAGS_BEFORE_PAGE_LOAD = 2;
+
+	public static final int BUSY_FLAGS_PAGE_LOADING = 4;
+
+	public static final int LOAD_CMD_NORMAL = 1;
+
+	public static final int LOAD_CMD_RELOAD = 2;
+
+	public static final int LOAD_CMD_HISTORY = 4;
+
+	public int GetBusyFlags(int[] aBusyFlags) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 42, getAddress(), aBusyFlags);
+	}
+
+	public int GetLoadType(int[] aLoadType) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 43, getAddress(), aLoadType);
+	}
+
+	public int SetLoadType(int aLoadType) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 44, getAddress(), aLoadType);
+	}
+
+	public int IsBeingDestroyed(int[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 45, getAddress(), _retval);
+	}
+
+	public int GetIsExecutingOnLoadHandler(int[] aIsExecutingOnLoadHandler) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 46, getAddress(), aIsExecutingOnLoadHandler);
+	}
+
+	public int GetLayoutHistoryState(int /*long*/[] aLayoutHistoryState) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 47, getAddress(), aLayoutHistoryState);
+	}
+
+	public int SetLayoutHistoryState(int /*long*/ aLayoutHistoryState) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 48, getAddress(), aLayoutHistoryState);
+	}
+
+	public int GetShouldSaveLayoutState(int[] aShouldSaveLayoutState) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 49, getAddress(), aShouldSaveLayoutState);
+	}
+
+	public int GetSecurityUI(int /*long*/[] aSecurityUI) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 50, getAddress(), aSecurityUI);
+	}
+
+	public int SetSecurityUI(int /*long*/ aSecurityUI) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 51, getAddress(), aSecurityUI);
+	}
+
+	public int SuspendRefreshURIs() {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 52, getAddress());
+	}
+
+	public int ResumeRefreshURIs() {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 53, getAddress());
+	}
+
+	public int BeginRestore(int /*long*/ viewer, int top) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 54, getAddress(), viewer, top);
+	}
+
+	public int FinishRestore() {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 55, getAddress());
+	}
+
+	public int GetRestoringDocument(int[] aRestoringDocument) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 56, getAddress(), aRestoringDocument);
+	}
+
+	public int GetUseErrorPages(int[] aUseErrorPages) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 57, getAddress(), aUseErrorPages);
+	}
+
+	public int SetUseErrorPages(int aUseErrorPages) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 58, getAddress(), aUseErrorPages);
+	}
+
+	public int GetPreviousTransIndex(int[] aPreviousTransIndex) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 59, getAddress(), aPreviousTransIndex);
+	}
+
+	public int GetLoadedTransIndex(int[] aLoadedTransIndex) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 60, getAddress(), aLoadedTransIndex);
+	}
+
+	public int HistoryPurged(int numEntries) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 61, getAddress(), numEntries);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDownload_1_8.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDownload_1_8.java
new file mode 100644
index 0000000..aeeb024
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIDownload_1_8.java
@@ -0,0 +1,83 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIDownload_1_8 extends nsITransfer {
+
+	static final int LAST_METHOD_ID = nsITransfer.LAST_METHOD_ID + 10;
+
+	public static final String NS_IDOWNLOAD_IID_STR =
+		"9e1fd9f2-9727-4926-85cd-f16c375bba6d";
+
+	public static final nsID NS_IDOWNLOAD_IID =
+		new nsID(NS_IDOWNLOAD_IID_STR);
+
+	public nsIDownload_1_8(int /*long*/ address) {
+		super(address);
+	}
+
+	public int GetTargetFile(int /*long*/[] aTargetFile) {
+		return XPCOM.VtblCall(nsITransfer.LAST_METHOD_ID + 1, getAddress(), aTargetFile);
+	}
+
+	public int GetPercentComplete(int[] aPercentComplete) {
+		return XPCOM.VtblCall(nsITransfer.LAST_METHOD_ID + 2, getAddress(), aPercentComplete);
+	}
+
+	public int GetAmountTransferred(int /*long*/ aAmountTransferred) {
+		return XPCOM.VtblCall(nsITransfer.LAST_METHOD_ID + 3, getAddress(), aAmountTransferred);
+	}
+
+	public int GetSize(int /*long*/ aSize) {
+		return XPCOM.VtblCall(nsITransfer.LAST_METHOD_ID + 4, getAddress(), aSize);
+	}
+
+	public int GetSource(int /*long*/[] aSource) {
+		return XPCOM.VtblCall(nsITransfer.LAST_METHOD_ID + 5, getAddress(), aSource);
+	}
+
+	public int GetTarget(int /*long*/[] aTarget) {
+		return XPCOM.VtblCall(nsITransfer.LAST_METHOD_ID + 6, getAddress(), aTarget);
+	}
+
+	public int GetCancelable(int /*long*/[] aCancelable) {
+		return XPCOM.VtblCall(nsITransfer.LAST_METHOD_ID + 7, getAddress(), aCancelable);
+	}
+
+	public int GetDisplayName(int /*long*/[] aDisplayName) {
+		return XPCOM.VtblCall(nsITransfer.LAST_METHOD_ID + 8, getAddress(), aDisplayName);
+	}
+
+	public int GetStartTime(long[] aStartTime) {
+		return XPCOM.VtblCall(nsITransfer.LAST_METHOD_ID + 9, getAddress(), aStartTime);
+	}
+
+	public int GetMIMEInfo(int /*long*/[] aMIMEInfo) {
+		return XPCOM.VtblCall(nsITransfer.LAST_METHOD_ID + 10, getAddress(), aMIMEInfo);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIFilePicker_1_8.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIFilePicker_1_8.java
new file mode 100644
index 0000000..22b0ed3
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIFilePicker_1_8.java
@@ -0,0 +1,118 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIFilePicker_1_8 extends nsISupports {
+
+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 15;
+
+	public static final String NS_IFILEPICKER_IID_STR =
+		"80faf095-c807-4558-a2cc-185ed70754ea";
+
+	public static final nsID NS_IFILEPICKER_IID =
+		new nsID(NS_IFILEPICKER_IID_STR);
+
+	public nsIFilePicker_1_8(int /*long*/ address) {
+		super(address);
+	}
+
+	public static final int modeOpen = 0;
+	public static final int modeSave = 1;
+	public static final int modeGetFolder = 2;
+	public static final int modeOpenMultiple = 3;
+	public static final int returnOK = 0;
+	public static final int returnCancel = 1;
+	public static final int returnReplace = 2;
+	public static final int filterAll = 1;
+	public static final int filterHTML = 2;
+	public static final int filterText = 4;
+	public static final int filterImages = 8;
+	public static final int filterXML = 16;
+	public static final int filterXUL = 32;
+	public static final int filterApps = 64;
+
+	public int Init(int /*long*/ parent, int /*long*/ title, int mode) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 1, getAddress(), parent, title, mode);
+	}
+
+	public int AppendFilters(int filterMask) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 2, getAddress(), filterMask);
+	}
+
+	public int AppendFilter(int /*long*/ title, int /*long*/ filter) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 3, getAddress(), title, filter);
+	}
+
+	public int GetDefaultString(int /*long*/ aDefaultString) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 4, getAddress(), aDefaultString);
+	}
+
+	public int SetDefaultString(int /*long*/ aDefaultString) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 5, getAddress(), aDefaultString);
+	}
+
+	public int GetDefaultExtension(int /*long*/ aDefaultExtension) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 6, getAddress(), aDefaultExtension);
+	}
+
+	public int SetDefaultExtension(int /*long*/ aDefaultExtension) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 7, getAddress(), aDefaultExtension);
+	}
+
+	public int GetFilterIndex(int[] aFilterIndex) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 8, getAddress(), aFilterIndex);
+	}
+
+	public int SetFilterIndex(int aFilterIndex) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 9, getAddress(), aFilterIndex);
+	}
+
+	public int GetDisplayDirectory(int /*long*/[] aDisplayDirectory) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 10, getAddress(), aDisplayDirectory);
+	}
+
+	public int SetDisplayDirectory(int /*long*/ aDisplayDirectory) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 11, getAddress(), aDisplayDirectory);
+	}
+
+	public int GetFile(int /*long*/[] aFile) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 12, getAddress(), aFile);
+	}
+
+	public int GetFileURL(int /*long*/[] aFileURL) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 13, getAddress(), aFileURL);
+	}
+
+	public int GetFiles(int /*long*/[] aFiles) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 14, getAddress(), aFiles);
+	}
+
+	public int Show(int /*long*/ _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 15, getAddress(), _retval);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIHelperAppLauncherDialog_1_9.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIHelperAppLauncherDialog_1_9.java
new file mode 100644
index 0000000..c97f263
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIHelperAppLauncherDialog_1_9.java
@@ -0,0 +1,57 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2008 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIHelperAppLauncherDialog_1_9 extends nsISupports {
+
+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 2;
+
+	public static final String NS_IHELPERAPPLAUNCHERDIALOG_IID_STR =
+		"f3704fdc-8ae6-4eba-a3c3-f02958ac0649";
+
+	public static final nsID NS_IHELPERAPPLAUNCHERDIALOG_IID =
+		new nsID(NS_IHELPERAPPLAUNCHERDIALOG_IID_STR);
+
+	public nsIHelperAppLauncherDialog_1_9(int /*long*/ address) {
+		super(address);
+	}
+
+	public static final int REASON_CANTHANDLE = 0;
+
+	public static final int REASON_SERVERREQUEST = 1;
+
+	public static final int REASON_TYPESNIFFED = 2;
+
+	public int Show(int /*long*/ aLauncher, int /*long*/ aWindowContext, int aReason) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 1, getAddress(), aLauncher, aWindowContext, aReason);
+	}
+
+	public int PromptForSaveToFile(int /*long*/ aLauncher, int /*long*/ aWindowContext, char[] aDefaultFileName, char[] aSuggestedFileExtension, int aForcePrompt, int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 2, getAddress(), aLauncher, aWindowContext, aDefaultFileName, aSuggestedFileExtension, aForcePrompt, _retval);
+	}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIHelperAppLauncher_1_8.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIHelperAppLauncher_1_8.java
new file mode 100644
index 0000000..1aca93b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIHelperAppLauncher_1_8.java
@@ -0,0 +1,79 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2008 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIHelperAppLauncher_1_8 extends nsICancelable {
+
+	static final int LAST_METHOD_ID = nsICancelable.LAST_METHOD_ID + 9;
+
+	public static final String NS_IHELPERAPPLAUNCHER_IID_STR =
+		"99a0882d-2ff9-4659-9952-9ac531ba5592";
+
+	public static final nsID NS_IHELPERAPPLAUNCHER_IID =
+		new nsID(NS_IHELPERAPPLAUNCHER_IID_STR);
+
+	public nsIHelperAppLauncher_1_8(int /*long*/ address) {
+		super(address);
+	}
+
+	public int GetMIMEInfo(int /*long*/[] aMIMEInfo) {
+		return XPCOM.VtblCall(nsICancelable.LAST_METHOD_ID + 1, getAddress(), aMIMEInfo);
+	}
+
+	public int GetSource(int /*long*/[] aSource) {
+		return XPCOM.VtblCall(nsICancelable.LAST_METHOD_ID + 2, getAddress(), aSource);
+	}
+
+	public int GetSuggestedFileName(int /*long*/ aSuggestedFileName) {
+		return XPCOM.VtblCall(nsICancelable.LAST_METHOD_ID + 3, getAddress(), aSuggestedFileName);
+	}
+
+	public int SaveToDisk(int /*long*/ aNewFileLocation, int aRememberThisPreference) {
+		return XPCOM.VtblCall(nsICancelable.LAST_METHOD_ID + 4, getAddress(), aNewFileLocation, aRememberThisPreference);
+	}
+
+	public int LaunchWithApplication(int /*long*/ aApplication, int aRememberThisPreference) {
+		return XPCOM.VtblCall(nsICancelable.LAST_METHOD_ID + 5, getAddress(), aApplication, aRememberThisPreference);
+	}
+
+	public int SetWebProgressListener(int /*long*/ aWebProgressListener) {
+		return XPCOM.VtblCall(nsICancelable.LAST_METHOD_ID + 6, getAddress(), aWebProgressListener);
+	}
+
+	public int CloseProgressWindow() {
+		return XPCOM.VtblCall(nsICancelable.LAST_METHOD_ID + 7, getAddress());
+	}
+
+	public int GetTargetFile(int /*long*/[] aTargetFile) {
+		return XPCOM.VtblCall(nsICancelable.LAST_METHOD_ID + 8, getAddress(), aTargetFile);
+	}
+
+	public int GetTimeDownloadStarted(int /*long*/ aTimeDownloadStarted) {
+		return XPCOM.VtblCall(nsICancelable.LAST_METHOD_ID + 9, getAddress(), aTimeDownloadStarted);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIHelperAppLauncher_1_9.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIHelperAppLauncher_1_9.java
new file mode 100644
index 0000000..d277e75
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIHelperAppLauncher_1_9.java
@@ -0,0 +1,83 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2008 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIHelperAppLauncher_1_9 extends nsICancelable {
+
+	static final int LAST_METHOD_ID = nsICancelable.LAST_METHOD_ID + 10;
+
+	public static final String NS_IHELPERAPPLAUNCHER_IID_STR =
+		"cc75c21a-0a79-4f68-90e1-563253d0c555";
+
+	public static final nsID NS_IHELPERAPPLAUNCHER_IID =
+		new nsID(NS_IHELPERAPPLAUNCHER_IID_STR);
+
+	public nsIHelperAppLauncher_1_9(int /*long*/ address) {
+		super(address);
+	}
+
+	public int GetMIMEInfo(int /*long*/[] aMIMEInfo) {
+		return XPCOM.VtblCall(nsICancelable.LAST_METHOD_ID + 1, getAddress(), aMIMEInfo);
+	}
+
+	public int GetSource(int /*long*/[] aSource) {
+		return XPCOM.VtblCall(nsICancelable.LAST_METHOD_ID + 2, getAddress(), aSource);
+	}
+
+	public int GetSuggestedFileName(int /*long*/ aSuggestedFileName) {
+		return XPCOM.VtblCall(nsICancelable.LAST_METHOD_ID + 3, getAddress(), aSuggestedFileName);
+	}
+
+	public int SaveToDisk(int /*long*/ aNewFileLocation, int aRememberThisPreference) {
+		return XPCOM.VtblCall(nsICancelable.LAST_METHOD_ID + 4, getAddress(), aNewFileLocation, aRememberThisPreference);
+	}
+
+	public int LaunchWithApplication(int /*long*/ aApplication, int aRememberThisPreference) {
+		return XPCOM.VtblCall(nsICancelable.LAST_METHOD_ID + 5, getAddress(), aApplication, aRememberThisPreference);
+	}
+
+	public int SetWebProgressListener(int /*long*/ aWebProgressListener) {
+		return XPCOM.VtblCall(nsICancelable.LAST_METHOD_ID + 6, getAddress(), aWebProgressListener);
+	}
+
+	public int CloseProgressWindow() {
+		return XPCOM.VtblCall(nsICancelable.LAST_METHOD_ID + 7, getAddress());
+	}
+
+	public int GetTargetFile(int /*long*/[] aTargetFile) {
+		return XPCOM.VtblCall(nsICancelable.LAST_METHOD_ID + 8, getAddress(), aTargetFile);
+	}
+
+	public int GetTargetFileIsExecutable(int[] aTargetFileIsExecutable) {
+		return XPCOM.VtblCall(nsICancelable.LAST_METHOD_ID + 9, getAddress(), aTargetFileIsExecutable);
+	}
+
+	public int GetTimeDownloadStarted(int /*long*/ aTimeDownloadStarted) {
+		return XPCOM.VtblCall(nsICancelable.LAST_METHOD_ID + 10, getAddress(), aTimeDownloadStarted);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIJSContextStack.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIJSContextStack.java
new file mode 100644
index 0000000..5dbedbe
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIJSContextStack.java
@@ -0,0 +1,59 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIJSContextStack extends nsISupports {
+
+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 4;
+
+	public static final String NS_IJSCONTEXTSTACK_IID_STR =
+		"c67d8270-3189-11d3-9885-006008962422";
+
+	public static final nsID NS_IJSCONTEXTSTACK_IID =
+		new nsID(NS_IJSCONTEXTSTACK_IID_STR);
+
+	public nsIJSContextStack(int /*long*/ address) {
+		super(address);
+	}
+
+	public int GetCount(int[] aCount) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 1, getAddress(), aCount);
+	}
+
+	public int Peek(int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 2, getAddress(), _retval);
+	}
+
+	public int Pop(int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 3, getAddress(), _retval);
+	}
+
+	public int Push(int /*long*/ cx) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 4, getAddress(), cx);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIObserverService.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIObserverService.java
new file mode 100644
index 0000000..5b3775d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIObserverService.java
@@ -0,0 +1,59 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2008 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIObserverService extends nsISupports {
+
+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 4;
+
+	public static final String NS_IOBSERVERSERVICE_IID_STR =
+		"d07f5192-e3d1-11d2-8acd-00105a1b8860";
+
+	public static final nsID NS_IOBSERVERSERVICE_IID =
+		new nsID(NS_IOBSERVERSERVICE_IID_STR);
+
+	public nsIObserverService(int /*long*/ address) {
+		super(address);
+	}
+
+	public int AddObserver(int /*long*/ anObserver, byte[] aTopic, int ownsWeak) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 1, getAddress(), anObserver, aTopic, ownsWeak);
+	}
+
+	public int RemoveObserver(int /*long*/ anObserver, byte[] aTopic) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 2, getAddress(), anObserver, aTopic);
+	}
+
+	public int NotifyObservers(int /*long*/ aSubject, byte[] aTopic, char[] someData) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 3, getAddress(), aSubject, aTopic, someData);
+	}
+
+	public int EnumerateObservers(byte[] aTopic, int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 4, getAddress(), aTopic, _retval);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIPrincipal.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIPrincipal.java
new file mode 100644
index 0000000..d8c3419
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIPrincipal.java
@@ -0,0 +1,143 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2009 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class  nsIPrincipal extends nsISerializable {
+
+	static final int LAST_METHOD_ID = nsISerializable.LAST_METHOD_ID + 23;
+
+	public static final String NS_IPRINCIPAL_IID_STR =
+		"b8268b9a-2403-44ed-81e3-614075c92034";
+
+	public static final nsID NS_IPRINCIPAL_IID =
+		new nsID(NS_IPRINCIPAL_IID_STR);
+
+	public  nsIPrincipal(int /*long*/ address) {
+		super(address);
+	}
+
+	public static final int ENABLE_DENIED = 1;
+
+	public static final int ENABLE_UNKNOWN = 2;
+
+	public static final int ENABLE_WITH_USER_PERMISSION = 3;
+
+	public static final int ENABLE_GRANTED = 4;
+
+	public int GetPreferences(int /*long*/[] prefBranch, int /*long*/[] id, int /*long*/[] subjectName, int /*long*/[] grantedList, int /*long*/[] deniedList, int[] isTrusted) {
+		return XPCOM.VtblCall(nsISerializable.LAST_METHOD_ID + 1, getAddress(), prefBranch, id, subjectName, grantedList, deniedList, isTrusted);
+	}
+
+	public int Equals(int /*long*/ other, int[] _retval) {
+		return XPCOM.VtblCall(nsISerializable.LAST_METHOD_ID + 2, getAddress(), other, _retval);
+	}
+
+	public int GetHashValue(int[] aHashValue) {
+		return XPCOM.VtblCall(nsISerializable.LAST_METHOD_ID + 3, getAddress(), aHashValue);
+	}
+
+	public int GetJSPrincipals(int /*long*/ cx, int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsISerializable.LAST_METHOD_ID + 4, getAddress(), cx, _retval);
+	}
+
+	public int GetSecurityPolicy(int /*long*/[] aSecurityPolicy) {
+		return XPCOM.VtblCall(nsISerializable.LAST_METHOD_ID + 5, getAddress(), aSecurityPolicy);
+	}
+
+	public int SetSecurityPolicy(int /*long*/ aSecurityPolicy) {
+		return XPCOM.VtblCall(nsISerializable.LAST_METHOD_ID + 6, getAddress(), aSecurityPolicy);
+	}
+
+	public int CanEnableCapability(byte[] capability, int /*long*/ _retval) {
+		return XPCOM.VtblCall(nsISerializable.LAST_METHOD_ID + 7, getAddress(), capability, _retval);
+	}
+
+	public int SetCanEnableCapability(byte[] capability, short canEnable) {
+		return XPCOM.VtblCall(nsISerializable.LAST_METHOD_ID + 8, getAddress(), capability, canEnable);
+	}
+
+	public int IsCapabilityEnabled(byte[] capability, int /*long*/ annotation, int[] _retval) {
+		return XPCOM.VtblCall(nsISerializable.LAST_METHOD_ID + 9, getAddress(), capability, annotation, _retval);
+	}
+
+	public int EnableCapability(byte[] capability, int /*long*/[] annotation) {
+		return XPCOM.VtblCall(nsISerializable.LAST_METHOD_ID + 10, getAddress(), capability, annotation);
+	}
+
+	public int RevertCapability(byte[] capability, int /*long*/[] annotation) {
+		return XPCOM.VtblCall(nsISerializable.LAST_METHOD_ID + 11, getAddress(), capability, annotation);
+	}
+
+	public int DisableCapability(byte[] capability, int /*long*/[] annotation) {
+		return XPCOM.VtblCall(nsISerializable.LAST_METHOD_ID + 12, getAddress(), capability, annotation);
+	}
+
+	public int GetURI(int /*long*/[] aURI) {
+		return XPCOM.VtblCall(nsISerializable.LAST_METHOD_ID + 13, getAddress(), aURI);
+	}
+
+	public int GetDomain(int /*long*/[] aDomain) {
+		return XPCOM.VtblCall(nsISerializable.LAST_METHOD_ID + 14, getAddress(), aDomain);
+	}
+
+	public int SetDomain(int /*long*/ aDomain) {
+		return XPCOM.VtblCall(nsISerializable.LAST_METHOD_ID + 15, getAddress(), aDomain);
+	}
+
+	public int GetOrigin(int /*long*/[] aOrigin) {
+		return XPCOM.VtblCall(nsISerializable.LAST_METHOD_ID + 16, getAddress(), aOrigin);
+	}
+
+	public int GetHasCertificate(int[] aHasCertificate) {
+		return XPCOM.VtblCall(nsISerializable.LAST_METHOD_ID + 17, getAddress(), aHasCertificate);
+	}
+
+	public int GetFingerprint(int /*long*/ aFingerprint) {
+		return XPCOM.VtblCall(nsISerializable.LAST_METHOD_ID + 18, getAddress(), aFingerprint);
+	}
+
+	public int GetPrettyName(int /*long*/ aPrettyName) {
+		return XPCOM.VtblCall(nsISerializable.LAST_METHOD_ID + 19, getAddress(), aPrettyName);
+	}
+
+	public int Subsumes(int /*long*/ other, int[] _retval) {
+		return XPCOM.VtblCall(nsISerializable.LAST_METHOD_ID + 20, getAddress(), other, _retval);
+	}
+
+	public int CheckMayLoad(int /*long*/ uri, int report) {
+		return XPCOM.VtblCall(nsISerializable.LAST_METHOD_ID + 21, getAddress(), uri, report);
+	}
+
+	public int GetSubjectName(int /*long*/ aSubjectName) {
+		return XPCOM.VtblCall(nsISerializable.LAST_METHOD_ID + 22, getAddress(), aSubjectName);
+	}
+
+	public int GetCertificate(int /*long*/[] aCertificate) {
+		return XPCOM.VtblCall(nsISerializable.LAST_METHOD_ID + 23, getAddress(), aCertificate);
+	}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIProgressDialog_1_8.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIProgressDialog_1_8.java
new file mode 100644
index 0000000..13c38f7
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIProgressDialog_1_8.java
@@ -0,0 +1,71 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2008 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIProgressDialog_1_8 extends nsIDownload_1_8 {
+
+	static final int LAST_METHOD_ID = nsIDownload_1_8.LAST_METHOD_ID + 7;
+
+	public static final String NS_IPROGRESSDIALOG_IID_STR =
+		"20e790a2-76c6-462d-851a-22ab6cbbe48b";
+
+	public static final nsID NS_IPROGRESSDIALOG_IID =
+		new nsID(NS_IPROGRESSDIALOG_IID_STR);
+
+	public nsIProgressDialog_1_8(int /*long*/ address) {
+		super(address);
+	}
+
+	public int Open(int /*long*/ aParent) {
+		return XPCOM.VtblCall(nsIDownload_1_8.LAST_METHOD_ID + 1, getAddress(), aParent);
+	}
+
+	public int GetCancelDownloadOnClose(int[] aCancelDownloadOnClose) {
+		return XPCOM.VtblCall(nsIDownload_1_8.LAST_METHOD_ID + 2, getAddress(), aCancelDownloadOnClose);
+	}
+
+	public int SetCancelDownloadOnClose(int aCancelDownloadOnClose) {
+		return XPCOM.VtblCall(nsIDownload_1_8.LAST_METHOD_ID + 3, getAddress(), aCancelDownloadOnClose);
+	}
+
+	public int GetObserver(int /*long*/[] aObserver) {
+		return XPCOM.VtblCall(nsIDownload_1_8.LAST_METHOD_ID + 4, getAddress(), aObserver);
+	}
+
+	public int SetObserver(int /*long*/ aObserver) {
+		return XPCOM.VtblCall(nsIDownload_1_8.LAST_METHOD_ID + 5, getAddress(), aObserver);
+	}
+
+	public int GetDialog(int /*long*/[] aDialog) {
+		return XPCOM.VtblCall(nsIDownload_1_8.LAST_METHOD_ID + 6, getAddress(), aDialog);
+	}
+
+	public int SetDialog(int /*long*/ aDialog) {
+		return XPCOM.VtblCall(nsIDownload_1_8.LAST_METHOD_ID + 7, getAddress(), aDialog);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIPromptService2.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIPromptService2.java
new file mode 100644
index 0000000..fec6bc5
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIPromptService2.java
@@ -0,0 +1,51 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2008 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIPromptService2 extends nsIPromptService {
+
+	static final int LAST_METHOD_ID = nsIPromptService.LAST_METHOD_ID + 2;
+
+	public static final String NS_IPROMPTSERVICE2_IID_STR =
+		"cf86d196-dbee-4482-9dfa-3477aa128319";
+
+	public static final nsID NS_IPROMPTSERVICE2_IID =
+		new nsID(NS_IPROMPTSERVICE2_IID_STR);
+
+	public nsIPromptService2(int /*long*/ address) {
+		super(address);
+	}
+
+	public int PromptAuth(int /*long*/ aParent, int /*long*/ aChannel, int level, int /*long*/ authInfo, char[] checkboxLabel, int[] checkValue, int[] _retval) {
+		return XPCOM.VtblCall(nsIPromptService.LAST_METHOD_ID + 1, getAddress(), aParent, aChannel, level, authInfo, checkboxLabel, checkValue, _retval);
+	}
+
+	public int AsyncPromptAuth(int /*long*/ aParent, int /*long*/ aChannel, int /*long*/ aCallback, int /*long*/ aContext, int level, int /*long*/ authInfo, char[] checkboxLabel, int[] checkValue, int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsIPromptService.LAST_METHOD_ID + 2, getAddress(), aParent, aChannel, aCallback, aContext, level, authInfo, checkboxLabel, checkValue, _retval);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIProperties.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIProperties.java
new file mode 100644
index 0000000..6311098
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIProperties.java
@@ -0,0 +1,63 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2008 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIProperties extends nsISupports {
+
+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 5;
+
+	public static final String NS_IPROPERTIES_IID_STR =
+		"78650582-4e93-4b60-8e85-26ebd3eb14ca";
+
+	public static final nsID NS_IPROPERTIES_IID =
+		new nsID(NS_IPROPERTIES_IID_STR);
+
+	public nsIProperties(int /*long*/ address) {
+		super(address);
+	}
+
+	public int Get(byte[] prop, nsID iid, int /*long*/[] result) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 1, getAddress(), prop, iid, result);
+	}
+
+	public int Set(byte[] prop, int /*long*/ value) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 2, getAddress(), prop, value);
+	}
+
+	public int Has(byte[] prop, int[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 3, getAddress(), prop, _retval);
+	}
+
+	public int Undefine(byte[] prop) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 4, getAddress(), prop);
+	}
+
+	public int GetKeys(int[] count, int /*long*/[] keys) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 5, getAddress(), count, keys);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIScriptSecurityManager_1_9.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIScriptSecurityManager_1_9.java
new file mode 100644
index 0000000..b2b7de8
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIScriptSecurityManager_1_9.java
@@ -0,0 +1,159 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2009 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class  nsIScriptSecurityManager_1_9 extends nsIXPCSecurityManager {
+
+	static final int LAST_METHOD_ID = nsIXPCSecurityManager.LAST_METHOD_ID + 26;
+
+	public static final String NS_ISCRIPTSECURITYMANAGER_IID_STR =
+		"3fffd8e8-3fea-442e-a0ed-2ba81ae197d5";
+
+	public static final nsID NS_ISCRIPTSECURITYMANAGER_IID =
+		new nsID(NS_ISCRIPTSECURITYMANAGER_IID_STR);
+
+	public  nsIScriptSecurityManager_1_9(int /*long*/ address) {
+		super(address);
+	}
+
+//	public int CheckPropertyAccess(int /*long*/ aJSContext, int /*long*/ aJSObject, byte[] aClassName, !ERROR UNKNOWN C TYPE <jsval >! aProperty, int aAction) {
+//		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 1, getAddress(), aJSContext, aJSObject, aClassName, aProperty, aAction);
+//	}
+
+//	public int CheckConnect(int /*long*/ aJSContext, int /*long*/ aTargetURI, byte[] aClassName, byte[] aProperty) {
+//		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 2, getAddress(), aJSContext, aTargetURI, aClassName, aProperty);
+//	}
+
+	public int CheckLoadURIFromScript(int /*long*/ cx, int /*long*/ uri) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 3, getAddress(), cx, uri);
+	}
+
+	public static final int STANDARD = 0;
+
+	public static final int LOAD_IS_AUTOMATIC_DOCUMENT_REPLACEMENT = 1;
+
+	public static final int ALLOW_CHROME = 2;
+
+	public static final int DISALLOW_INHERIT_PRINCIPAL = 4;
+
+	public static final int DISALLOW_SCRIPT_OR_DATA = 4;
+
+	public static final int DISALLOW_SCRIPT = 8;
+
+	public int CheckLoadURIWithPrincipal(int /*long*/ aPrincipal, int /*long*/ uri, int flags) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 4, getAddress(), aPrincipal, uri, flags);
+	}
+
+	public int CheckLoadURI(int /*long*/ from, int /*long*/ uri, int flags) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 5, getAddress(), from, uri, flags);
+	}
+
+	public int CheckLoadURIStrWithPrincipal(int /*long*/ aPrincipal, int /*long*/ uri, int flags) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 6, getAddress(), aPrincipal, uri, flags);
+	}
+
+	public int CheckLoadURIStr(int /*long*/ from, int /*long*/ uri, int flags) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 7, getAddress(), from, uri, flags);
+	}
+
+	public int CheckFunctionAccess(int /*long*/ cx, int /*long*/ funObj, int /*long*/ targetObj) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 8, getAddress(), cx, funObj, targetObj);
+	}
+
+	public int CanExecuteScripts(int /*long*/ cx, int /*long*/ principal, int[] _retval) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 9, getAddress(), cx, principal, _retval);
+	}
+
+	public int GetSubjectPrincipal(int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 10, getAddress(), _retval);
+	}
+
+	public int GetSystemPrincipal(int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 11, getAddress(), _retval);
+	}
+
+//	public int GetCertificatePrincipal(int /*long*/ aCertFingerprint, int /*long*/ aSubjectName, int /*long*/ aPrettyName, int /*long*/ aCert, int /*long*/ aURI, int /*long*/[] _retval) {
+//		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 12, getAddress(), aCertFingerprint, aSubjectName, aPrettyName, aCert, aURI, _retval);
+//	}
+
+	public int GetCodebasePrincipal(int /*long*/ aURI, int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 13, getAddress(), aURI, _retval);
+	}
+
+//	public int RequestCapability(int /*long*/ principal, byte[] capability, int /*long*/ _retval) {
+//		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 14, getAddress(), principal, capability, _retval);
+//	}
+
+	public int IsCapabilityEnabled(byte[] capability, int[] _retval) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 15, getAddress(), capability, _retval);
+	}
+
+	public int EnableCapability(byte[] capability) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 16, getAddress(), capability);
+	}
+
+	public int RevertCapability(byte[] capability) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 17, getAddress(), capability);
+	}
+
+	public int DisableCapability(byte[] capability) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 18, getAddress(), capability);
+	}
+
+//	public int SetCanEnableCapability(int /*long*/ certificateFingerprint, byte[] capability, !ERROR UNKNOWN C TYPE <PRInt16 >! canEnable) {
+//		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 19, getAddress(), certificateFingerprint, capability, canEnable);
+//	}
+
+	public int GetObjectPrincipal(int /*long*/ cx, int /*long*/ obj, int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 20, getAddress(), cx, obj, _retval);
+	}
+
+	public int SubjectPrincipalIsSystem(int[] _retval) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 21, getAddress(), _retval);
+	}
+
+	public int CheckSameOrigin(int /*long*/ aJSContext, int /*long*/ aTargetURI) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 22, getAddress(), aJSContext, aTargetURI);
+	}
+
+	public int CheckSameOriginURI(int /*long*/ aSourceURI, int /*long*/ aTargetURI, int reportError) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 23, getAddress(), aSourceURI, aTargetURI, reportError);
+	}
+
+	public int GetPrincipalFromContext(int /*long*/ cx, int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 24, getAddress(), cx, _retval);
+	}
+
+	public int GetChannelPrincipal(int /*long*/ aChannel, int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 25, getAddress(), aChannel, _retval);
+	}
+
+	public int IsSystemPrincipal(int /*long*/ aPrincipal, int[] _retval) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 26, getAddress(), aPrincipal, _retval);
+	}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIScriptSecurityManager_1_9_1.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIScriptSecurityManager_1_9_1.java
new file mode 100644
index 0000000..25ae481
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIScriptSecurityManager_1_9_1.java
@@ -0,0 +1,159 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2008 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIScriptSecurityManager_1_9_1 extends nsIXPCSecurityManager {
+
+	static final int LAST_METHOD_ID = nsIXPCSecurityManager.LAST_METHOD_ID + 26;
+
+	public static final String NS_ISCRIPTSECURITYMANAGER_IID_STR =
+		"f8e350b9-9f31-451a-8c8f-d10fea26b780";
+
+	public static final nsID NS_ISCRIPTSECURITYMANAGER_IID =
+		new nsID(NS_ISCRIPTSECURITYMANAGER_IID_STR);
+
+	public  nsIScriptSecurityManager_1_9_1(int /*long*/ address) {
+		super(address);
+	}
+
+//	public int CheckPropertyAccess(int /*long*/ aJSContext, int /*long*/ aJSObject, byte[] aClassName, !ERROR UNKNOWN C TYPE <jsval >! aProperty, int aAction) {
+//		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 1, getAddress(), aJSContext, aJSObject, aClassName, aProperty, aAction);
+//	}
+
+	public int CheckConnect(int /*long*/ aJSContext, int /*long*/ aTargetURI, byte[] aClassName, byte[] aProperty) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 2, getAddress(), aJSContext, aTargetURI, aClassName, aProperty);
+	}
+
+	public int CheckLoadURIFromScript(int /*long*/ cx, int /*long*/ uri) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 3, getAddress(), cx, uri);
+	}
+
+	public static final int STANDARD = 0;
+
+	public static final int LOAD_IS_AUTOMATIC_DOCUMENT_REPLACEMENT = 1;
+
+	public static final int ALLOW_CHROME = 2;
+
+	public static final int DISALLOW_INHERIT_PRINCIPAL = 4;
+
+	public static final int DISALLOW_SCRIPT_OR_DATA = 4;
+
+	public static final int DISALLOW_SCRIPT = 8;
+
+	public int CheckLoadURIWithPrincipal(int /*long*/ aPrincipal, int /*long*/ uri, int flags) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 4, getAddress(), aPrincipal, uri, flags);
+	}
+
+	public int CheckLoadURI(int /*long*/ from, int /*long*/ uri, int flags) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 5, getAddress(), from, uri, flags);
+	}
+
+	public int CheckLoadURIStrWithPrincipal(int /*long*/ aPrincipal, int /*long*/ uri, int flags) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 6, getAddress(), aPrincipal, uri, flags);
+	}
+
+	public int CheckLoadURIStr(int /*long*/ from, int /*long*/ uri, int flags) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 7, getAddress(), from, uri, flags);
+	}
+
+	public int CheckFunctionAccess(int /*long*/ cx, int /*long*/ funObj, int /*long*/ targetObj) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 8, getAddress(), cx, funObj, targetObj);
+	}
+
+//	public int CanExecuteScripts(int /*long*/ cx, int /*long*/ principal, int[] _retval NS_OUTPARAM) {
+//		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 9, getAddress(), cx, principal, _retval NS_OUTPARAM);
+//	}
+
+//	public int GetSubjectPrincipal(int /*long*/[] _retval NS_OUTPARAM) {
+//		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 10, getAddress(), _retval NS_OUTPARAM);
+//	}
+
+	public int GetSystemPrincipal(int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 11, getAddress(), _retval);
+	}
+
+//	public int GetCertificatePrincipal(int /*long*/ aCertFingerprint, int /*long*/ aSubjectName, int /*long*/ aPrettyName, int /*long*/ aCert, int /*long*/ aURI, int /*long*/[] _retval NS_OUTPARAM) {
+//		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 12, getAddress(), aCertFingerprint, aSubjectName, aPrettyName, aCert, aURI, _retval NS_OUTPARAM);
+//	}
+
+//	public int GetCodebasePrincipal(int /*long*/ aURI, int /*long*/[] _retval NS_OUTPARAM) {
+//		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 13, getAddress(), aURI, _retval NS_OUTPARAM);
+//	}
+
+//	public int RequestCapability(int /*long*/ principal, byte[] capability, int /*long*/ _retval NS_OUTPARAM) {
+//		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 14, getAddress(), principal, capability, _retval NS_OUTPARAM);
+//	}
+
+//	public int IsCapabilityEnabled(byte[] capability, int[] _retval NS_OUTPARAM) {
+//		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 15, getAddress(), capability, _retval NS_OUTPARAM);
+//	}
+
+	public int EnableCapability(byte[] capability) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 16, getAddress(), capability);
+	}
+
+	public int RevertCapability(byte[] capability) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 17, getAddress(), capability);
+	}
+
+	public int DisableCapability(byte[] capability) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 18, getAddress(), capability);
+	}
+
+//	public int SetCanEnableCapability(int /*long*/ certificateFingerprint, byte[] capability, !ERROR UNKNOWN C TYPE <PRInt16 >! canEnable) {
+//		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 19, getAddress(), certificateFingerprint, capability, canEnable);
+//	}
+
+//	public int GetObjectPrincipal(int /*long*/ cx, int /*long*/ obj, int /*long*/[] _retval NS_OUTPARAM) {
+//		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 20, getAddress(), cx, obj, _retval NS_OUTPARAM);
+//	}
+
+//	public int SubjectPrincipalIsSystem(int[] _retval NS_OUTPARAM) {
+//		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 21, getAddress(), _retval NS_OUTPARAM);
+//	}
+
+	public int CheckSameOrigin(int /*long*/ aJSContext, int /*long*/ aTargetURI) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 22, getAddress(), aJSContext, aTargetURI);
+	}
+
+	public int CheckSameOriginURI(int /*long*/ aSourceURI, int /*long*/ aTargetURI, int reportError) {
+		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 23, getAddress(), aSourceURI, aTargetURI, reportError);
+	}
+
+//	public int GetPrincipalFromContext(int /*long*/ cx, int /*long*/[] _retval NS_OUTPARAM) {
+//		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 24, getAddress(), cx, _retval NS_OUTPARAM);
+//	}
+
+//	public int GetChannelPrincipal(int /*long*/ aChannel, int /*long*/[] _retval NS_OUTPARAM) {
+//		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 25, getAddress(), aChannel, _retval NS_OUTPARAM);
+//	}
+
+//	public int IsSystemPrincipal(int /*long*/ aPrincipal, int[] _retval NS_OUTPARAM) {
+//		return XPCOM.VtblCall(nsIXPCSecurityManager.LAST_METHOD_ID + 26, getAddress(), aPrincipal, _retval NS_OUTPARAM);
+//	}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsISecurityCheckedComponent.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsISecurityCheckedComponent.java
new file mode 100644
index 0000000..bc58ffa
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsISecurityCheckedComponent.java
@@ -0,0 +1,33 @@
+package org.eclipse.swt.internal.mozilla;
+
+
+public class nsISecurityCheckedComponent extends nsISupports {
+
+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 4;
+
+	public static final String NS_ISECURITYCHECKEDCOMPONENT_IID_STR =
+		"0dad9e8c-a12d-4dcb-9a6f-7d09839356e1";
+
+	public static final nsID NS_ISECURITYCHECKEDCOMPONENT_IID =
+		new nsID(NS_ISECURITYCHECKEDCOMPONENT_IID_STR);
+
+	public nsISecurityCheckedComponent(int /*long*/ address) {
+		super(address);
+	}
+
+	public int CanCreateWrapper(int /*long*/ iid, int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 1, getAddress(), iid, _retval);
+	}
+
+	public int CanCallMethod(int /*long*/ iid, char[] methodName, int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 2, getAddress(), iid, methodName, _retval);
+	}
+
+	public int CanGetProperty(int /*long*/ iid, char[] propertyName, int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 3, getAddress(), iid, propertyName, _retval);
+	}
+
+	public int CanSetProperty(int /*long*/ iid, char[] propertyName, int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 4, getAddress(), iid, propertyName, _retval);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsISerializable.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsISerializable.java
new file mode 100644
index 0000000..6e2fed1
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsISerializable.java
@@ -0,0 +1,51 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2009 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class  nsISerializable extends nsISupports {
+
+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 2;
+
+	public static final String NS_ISERIALIZABLE_IID_STR =
+		"91cca981-c26d-44a8-bebe-d9ed4891503a";
+
+	public static final nsID NS_ISERIALIZABLE_IID =
+		new nsID(NS_ISERIALIZABLE_IID_STR);
+
+	public  nsISerializable(int /*long*/ address) {
+		super(address);
+	}
+
+	public int Read(int /*long*/ aInputStream) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 1, getAddress(), aInputStream);
+	}
+
+	public int Write(int /*long*/ aOutputStream) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 2, getAddress(), aOutputStream);
+	}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsITransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsITransfer.java
new file mode 100644
index 0000000..c9f0ba6
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsITransfer.java
@@ -0,0 +1,47 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsITransfer extends nsIWebProgressListener2 {
+
+	static final int LAST_METHOD_ID = nsIWebProgressListener2.LAST_METHOD_ID + 1;
+
+	public static final String NS_ITRANSFER_IID_STR =
+		"23c51569-e9a1-4a92-adeb-3723db82ef7c";
+
+	public static final nsID NS_ITRANSFER_IID =
+		new nsID(NS_ITRANSFER_IID_STR);
+
+	public nsITransfer(int /*long*/ address) {
+		super(address);
+	}
+
+	public int Init(int /*long*/ aSource, int /*long*/ aTarget, int /*long*/ aDisplayName, int /*long*/ aMIMEInfo, long startTime, int /*long*/ aTempFile, int /*long*/ aCancelable) {
+		return XPCOM.VtblCall(nsIWebProgressListener2.LAST_METHOD_ID + 1, getAddress(), aSource, aTarget, aDisplayName, aMIMEInfo, startTime, aTempFile, aCancelable);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIVariant.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIVariant.java
new file mode 100644
index 0000000..2de3baf
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIVariant.java
@@ -0,0 +1,147 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2008 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIVariant extends nsISupports {
+
+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 26;
+
+	public static final String NS_IVARIANT_IID_STR =
+		"6c9eb060-8c6a-11d5-90f3-0010a4e73d9a";
+
+	public static final nsID NS_IVARIANT_IID =
+		new nsID(NS_IVARIANT_IID_STR);
+
+	public nsIVariant(int /*long*/ address) {
+		super(address);
+	}
+
+	public int GetDataType(short[] aDataType) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 1, getAddress(), aDataType);
+	}
+
+	public int GetAsInt8(int /*long*/ _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 2, getAddress(), _retval);
+	}
+
+	public int GetAsInt16(int /*long*/ _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 3, getAddress(), _retval);
+	}
+
+	public int GetAsInt32(int[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 4, getAddress(), _retval);
+	}
+
+	public int GetAsInt64(long[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 5, getAddress(), _retval);
+	}
+
+	public int GetAsUint8(int /*long*/ _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 6, getAddress(), _retval);
+	}
+
+	public int GetAsUint16(short[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 7, getAddress(), _retval);
+	}
+
+	public int GetAsUint32(int[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 8, getAddress(), _retval);
+	}
+
+	public int GetAsUint64(int /*long*/ _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 9, getAddress(), _retval);
+	}
+
+	public int GetAsFloat(float[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 10, getAddress(), _retval);
+	}
+
+	public int GetAsDouble(int /*long*/ _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 11, getAddress(), _retval);
+	}
+
+	public int GetAsBool(int[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 12, getAddress(), _retval);
+	}
+
+	public int GetAsChar(byte[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 13, getAddress(), _retval);
+	}
+
+	public int GetAsWChar(char[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 14, getAddress(), _retval);
+	}
+
+	public int GetAsID(int /*long*/ retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 15, getAddress(), retval);
+	}
+
+	public int GetAsAString(int /*long*/ _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 16, getAddress(), _retval);
+	}
+
+	public int GetAsDOMString(int /*long*/ _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 17, getAddress(), _retval);
+	}
+
+	public int GetAsACString(int /*long*/ _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 18, getAddress(), _retval);
+	}
+
+	public int GetAsAUTF8String(int /*long*/ _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 19, getAddress(), _retval);
+	}
+
+	public int GetAsString(int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 20, getAddress(), _retval);
+	}
+
+	public int GetAsWString(int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 21, getAddress(), _retval);
+	}
+
+	public int GetAsISupports(int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 22, getAddress(), _retval);
+	}
+
+	public int GetAsInterface(int /*long*/[] iid, int /*long*/[] iface) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 23, getAddress(), iid, iface);
+	}
+
+	public int GetAsArray(short[] type, int /*long*/ iid, int[] count, int /*long*/[] ptr) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 24, getAddress(), type, iid, count, ptr);
+	}
+
+	public int GetAsStringWithSize(int[] size, int /*long*/[] str) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 25, getAddress(), size, str);
+	}
+
+	public int GetAsWStringWithSize(int[] size, int /*long*/[] str) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 26, getAddress(), size, str);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIWebBrowserSetup.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIWebBrowserSetup.java
new file mode 100644
index 0000000..6ea241f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIWebBrowserSetup.java
@@ -0,0 +1,63 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2008 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIWebBrowserSetup extends nsISupports {
+
+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 1;
+
+	public static final String NS_IWEBBROWSERSETUP_IID_STR =
+		"f15398a0-8018-11d3-af70-00a024ffc08c";
+
+	public static final nsID NS_IWEBBROWSERSETUP_IID =
+		new nsID(NS_IWEBBROWSERSETUP_IID_STR);
+
+	public nsIWebBrowserSetup(int /*long*/ address) {
+		super(address);
+	}
+
+	public static final int SETUP_ALLOW_PLUGINS = 1;
+
+	public static final int SETUP_ALLOW_JAVASCRIPT = 2;
+
+	public static final int SETUP_ALLOW_META_REDIRECTS = 3;
+
+	public static final int SETUP_ALLOW_SUBFRAMES = 4;
+
+	public static final int SETUP_ALLOW_IMAGES = 5;
+
+	public static final int SETUP_FOCUS_DOC_BEFORE_CONTENT = 6;
+
+	public static final int SETUP_USE_GLOBAL_HISTORY = 256;
+
+	public static final int SETUP_IS_CHROME_WRAPPER = 7;
+
+	public int SetProperty(int aId, int aValue) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 1, getAddress(), aId, aValue);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIWebNavigationInfo.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIWebNavigationInfo.java
new file mode 100644
index 0000000..e6817fa
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIWebNavigationInfo.java
@@ -0,0 +1,55 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2005 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIWebNavigationInfo extends nsISupports {
+
+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 1;
+
+	public static final String NS_IWEBNAVIGATIONINFO_IID_STR =
+		"62a93afb-93a1-465c-84c8-0432264229de";
+
+	public static final nsID NS_IWEBNAVIGATIONINFO_IID =
+		new nsID(NS_IWEBNAVIGATIONINFO_IID_STR);
+
+	public nsIWebNavigationInfo(int /*long*/ address) {
+		super(address);
+	}
+
+	public static final int UNSUPPORTED = 0;
+
+	public static final int IMAGE = 1;
+
+	public static final int PLUGIN = 2;
+
+	public static final int OTHER = 32768;
+
+	public int IsTypeSupported(int /*long*/ aType, int /*long*/ aWebNav, int[] _retval) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 1, getAddress(), aType, aWebNav, _retval);
+	}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIWebProgressListener2.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIWebProgressListener2.java
new file mode 100644
index 0000000..d27f486
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIWebProgressListener2.java
@@ -0,0 +1,47 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIWebProgressListener2 extends nsIWebProgressListener {
+
+	static final int LAST_METHOD_ID = nsIWebProgressListener.LAST_METHOD_ID + 1;
+
+	public static final String NS_IWEBPROGRESSLISTENER2_IID_STR =
+		"3f24610d-1e1f-4151-9d2e-239884742324";
+
+	public static final nsID NS_IWEBPROGRESSLISTENER2_IID =
+		new nsID(NS_IWEBPROGRESSLISTENER2_IID_STR);
+
+	public nsIWebProgressListener2(int /*long*/ address) {
+		super(address);
+	}
+
+	public int OnProgressChange64(int /*long*/ aWebProgress, int /*long*/ aRequest, long aCurSelfProgress, long aMaxSelfProgress, long aCurTotalProgress, long aMaxTotalProgress) {
+		return XPCOM.VtblCall(nsIWebProgressListener.LAST_METHOD_ID + 1, getAddress(), aWebProgress, aRequest, aCurSelfProgress, aMaxSelfProgress, aCurTotalProgress, aMaxTotalProgress);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIWindowCreator2.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIWindowCreator2.java
new file mode 100644
index 0000000..4bfec46
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIWindowCreator2.java
@@ -0,0 +1,49 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2008 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIWindowCreator2 extends nsIWindowCreator {
+
+	static final int LAST_METHOD_ID = nsIWindowCreator.LAST_METHOD_ID + 1;
+
+	public static final String NS_IWINDOWCREATOR2_IID_STR =
+		"f673ec81-a4b0-11d6-964b-eb5a2bf216fc";
+
+	public static final nsID NS_IWINDOWCREATOR2_IID =
+		new nsID(NS_IWINDOWCREATOR2_IID_STR);
+
+	public nsIWindowCreator2(int /*long*/ address) {
+		super(address);
+	}
+
+	public static final int PARENT_IS_LOADING_OR_RUNNING_TIMEOUT = 1;
+
+	public int CreateChromeWindow2(int /*long*/ parent, int chromeFlags, int contextFlags, int /*long*/ uri, int[] cancel, int /*long*/[] _retval) {
+		return XPCOM.VtblCall(nsIWindowCreator.LAST_METHOD_ID + 1, getAddress(), parent, chromeFlags, contextFlags, uri, cancel, _retval);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIWritableVariant.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIWritableVariant.java
new file mode 100644
index 0000000..30b340c
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIWritableVariant.java
@@ -0,0 +1,141 @@
+package org.eclipse.swt.internal.mozilla;
+
+
+public class nsIWritableVariant extends nsIVariant {
+
+	static final int LAST_METHOD_ID = nsIVariant.LAST_METHOD_ID + 31;
+
+	public static final String NS_IWRITABLEVARIANT_IID_STR =
+		"5586a590-8c82-11d5-90f3-0010a4e73d9a";
+
+	public static final nsID NS_IWRITABLEVARIANT_IID =
+		new nsID(NS_IWRITABLEVARIANT_IID_STR);
+
+	public nsIWritableVariant(int /*long*/ address) {
+		super(address);
+	}
+
+	public int GetWritable(int[] aWritable) {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 1, getAddress(), aWritable);
+	}
+
+	public int SetWritable(int aWritable) {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 2, getAddress(), aWritable);
+	}
+
+//	public int SetAsInt8(!ERROR UNKNOWN C TYPE <PRUint8 >! aValue) {
+//		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 3, getAddress(), aValue);
+//	}
+//
+//	public int SetAsInt16(!ERROR UNKNOWN C TYPE <PRInt16 >! aValue) {
+//		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 4, getAddress(), aValue);
+//	}
+
+	public int SetAsInt32(int aValue) {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 5, getAddress(), aValue);
+	}
+
+	public int SetAsInt64(long aValue) {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 6, getAddress(), aValue);
+	}
+
+//	public int SetAsUint8(!ERROR UNKNOWN C TYPE <PRUint8 >! aValue) {
+//		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 7, getAddress(), aValue);
+//	}
+
+	public int SetAsUint16(short aValue) {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 8, getAddress(), aValue);
+	}
+
+	public int SetAsUint32(int aValue) {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 9, getAddress(), aValue);
+	}
+
+//	public int SetAsUint64(!ERROR UNKNOWN C TYPE <PRUint64 >! aValue) {
+//		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 10, getAddress(), aValue);
+//	}
+
+	public int SetAsFloat(float aValue) {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 11, getAddress(), aValue);
+	}
+
+	public int SetAsDouble(double aValue) {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 12, getAddress(), aValue);
+	}
+
+	public int SetAsBool(int aValue) {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 13, getAddress(), aValue);
+	}
+
+//	public int SetAsChar(!ERROR UNKNOWN C TYPE <char >! aValue) {
+//		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 14, getAddress(), aValue);
+//	}
+//
+//	public int SetAsWChar(!ERROR UNKNOWN C TYPE <PRUnichar >! aValue) {
+//		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 15, getAddress(), aValue);
+//	}
+
+	public int SetAsID(int /*long*/ aValue) {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 16, getAddress(), aValue);
+	}
+
+	public int SetAsAString(int /*long*/ aValue) {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 17, getAddress(), aValue);
+	}
+
+	public int SetAsDOMString(int /*long*/ aValue) {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 18, getAddress(), aValue);
+	}
+
+	public int SetAsACString(int /*long*/ aValue) {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 19, getAddress(), aValue);
+	}
+
+	public int SetAsAUTF8String(int /*long*/ aValue) {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 20, getAddress(), aValue);
+	}
+
+	public int SetAsString(byte[] aValue) {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 21, getAddress(), aValue);
+	}
+
+	public int SetAsWString(char[] aValue) {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 22, getAddress(), aValue);
+	}
+
+	public int SetAsISupports(int /*long*/ aValue) {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 23, getAddress(), aValue);
+	}
+
+	public int SetAsInterface(nsID iid, int /*long*/ iface) {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 24, getAddress(), iid, iface);
+	}
+
+	public int SetAsArray(short type, int /*long*/ iid, int count, int /*long*/ ptr) {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 25, getAddress(), type, iid, count, ptr);
+	}
+
+	public int SetAsStringWithSize(int size, byte[] str) {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 26, getAddress(), size, str);
+	}
+
+	public int SetAsWStringWithSize(int size, char[] str) {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 27, getAddress(), size, str);
+	}
+
+	public int SetAsVoid() {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 28, getAddress());
+	}
+
+	public int SetAsEmpty() {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 29, getAddress());
+	}
+
+	public int SetAsEmptyArray() {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 30, getAddress());
+	}
+
+	public int SetFromVariant(int /*long*/ aValue) {
+		return XPCOM.VtblCall(nsIVariant.LAST_METHOD_ID + 31, getAddress(), aValue);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIXPCSecurityManager.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIXPCSecurityManager.java
new file mode 100644
index 0000000..884b6d9
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/internal/mozilla/nsIXPCSecurityManager.java
@@ -0,0 +1,79 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by Netscape are Copyright (C) 1998-1999
+ * Netscape Communications Corporation.  All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Mozilla and SWT
+ * -  Copyright (C) 2003, 2009 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.mozilla;
+
+public class nsIXPCSecurityManager extends nsISupports {
+
+	static final int LAST_METHOD_ID = nsISupports.LAST_METHOD_ID + 4;
+
+	public static final String NS_IXPCSECURITYMANAGER_IID_STR =
+		"31431440-f1ce-11d2-985a-006008962422";
+
+	public static final nsID NS_IXPCSECURITYMANAGER_IID =
+		new nsID(NS_IXPCSECURITYMANAGER_IID_STR);
+
+	public nsIXPCSecurityManager(int /*long*/ address) {
+		super(address);
+	}
+
+	public static final int HOOK_CREATE_WRAPPER = 1;
+
+	public static final int HOOK_CREATE_INSTANCE = 2;
+
+	public static final int HOOK_GET_SERVICE = 4;
+
+	public static final int HOOK_CALL_METHOD = 8;
+
+	public static final int HOOK_GET_PROPERTY = 16;
+
+	public static final int HOOK_SET_PROPERTY = 32;
+
+	public static final int HOOK_ALL = 63;
+
+	public int CanCreateWrapper(int /*long*/ aJSContext, nsID aIID, int /*long*/ aObj, int /*long*/ aClassInfo, int /*long*/[] aPolicy) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 1, getAddress(), aJSContext, aIID, aObj, aClassInfo, aPolicy);
+	}
+
+	public int CanCreateInstance(int /*long*/ aJSContext, nsID aCID) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 2, getAddress(), aJSContext, aCID);
+	}
+
+	public int CanGetService(int /*long*/ aJSContext, nsID aCID) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 3, getAddress(), aJSContext, aCID);
+	}
+
+	public static final int ACCESS_CALL_METHOD = 0;
+
+	public static final int ACCESS_GET_PROPERTY = 1;
+
+	public static final int ACCESS_SET_PROPERTY = 2;
+
+	public int CanAccess(int aAction, int /*long*/ aCallContext, int /*long*/ aJSContext, int /*long*/ aJSObject, int /*long*/ aObj, int /*long*/ aClassInfo, int /*long*/ aName, int /*long*/[] aPolicy) {
+		return XPCOM.VtblCall(nsISupports.LAST_METHOD_ID + 4, getAddress(), aAction, aCallContext, aJSContext, aJSObject, aObj, aClassInfo, aName, aPolicy);
+	}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java
new file mode 100644
index 0000000..77a16ba
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java
@@ -0,0 +1,218 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 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.browser;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.gtk.*;
+import org.eclipse.swt.internal.mozilla.*;
+import org.eclipse.swt.widgets.*;
+
+class MozillaDelegate {
+	Browser browser;
+	int /*long*/ mozillaHandle, embedHandle;
+	boolean hasFocus;
+	Listener listener;
+	static Callback eventCallback;
+	static int /*long*/ eventProc;
+	static final int STOP_PROPOGATE = 1;
+
+	static boolean IsSparc;
+	static {
+		String osName = System.getProperty ("os.name").toLowerCase (); //$NON-NLS-1$
+		String osArch = System.getProperty ("os.arch").toLowerCase (); //$NON-NLS-1$
+		IsSparc = (osName.startsWith ("sunos") || osName.startsWith ("solaris")) && osArch.startsWith("sparc"); //$NON-NLS-1$
+	}
+
+MozillaDelegate (Browser browser) {
+	super ();
+	if (IsSparc) {
+		browser.dispose ();
+		SWT.error (SWT.ERROR_NO_HANDLES, null, " [Unsupported platform]"); //$NON-NLS-1$
+	}
+	this.browser = browser;
+}
+
+static int /*long*/ eventProc (int /*long*/ handle, int /*long*/ gdkEvent, int /*long*/ pointer) {
+	int /*long*/ parent = OS.gtk_widget_get_parent (handle);
+	parent = OS.gtk_widget_get_parent (parent);
+	if (parent == 0) return 0;
+	Widget widget = Display.getCurrent ().findWidget (parent);
+	if (widget != null && widget instanceof Browser) {
+		return ((Mozilla)((Browser)widget).webBrowser).delegate.gtk_event (handle, gdkEvent, pointer);
+	}
+	return 0;
+}
+
+static Browser findBrowser (int /*long*/ handle) {
+	/*
+	* Note.  On GTK, Mozilla is embedded into a GtkHBox handle
+	* and not directly into the parent Composite handle.
+	*/
+	int /*long*/ parent = OS.gtk_widget_get_parent (handle);
+	Display display = Display.getCurrent ();
+	return (Browser)display.findWidget (parent); 
+}
+
+static char[] mbcsToWcs (String codePage, byte [] buffer) {
+	return Converter.mbcsToWcs (codePage, buffer);
+}
+
+static byte[] wcsToMbcs (String codePage, String string, boolean terminate) {
+	return Converter.wcsToMbcs (codePage, string, terminate);
+}
+
+void addWindowSubclass () {
+}
+
+int createBaseWindow (nsIBaseWindow baseWindow) {
+	return baseWindow.Create ();
+}
+
+int /*long*/ getHandle () {
+	/*
+	* Bug in Mozilla Linux GTK.  Embedding Mozilla into a GtkFixed
+	* handle causes problems with some Mozilla plug-ins.  For some
+	* reason, the Flash plug-in causes the child of the GtkFixed
+	* handle to be resized to 1 when the Flash document is loaded.
+	* That could be due to gtk_container_resize_children being called
+	* by Mozilla - or one of its plug-ins - on the GtkFixed handle,
+	* causing the child of the GtkFixed handle to be resized to 1.
+	* The workaround is to embed Mozilla into a GtkHBox handle.
+	*/
+	embedHandle = OS.gtk_hbox_new (false, 0);
+	OS.gtk_container_add (browser.handle, embedHandle);
+	OS.gtk_widget_show (embedHandle);
+	return embedHandle;
+}
+
+String getJSLibraryName () {
+	return "libmozjs.so"; //$NON-NLS-1$
+}
+
+String getLibraryName () {
+	return "libxpcom.so"; //$NON-NLS-1$
+}
+
+String getSWTInitLibraryName () {
+	return "swt-xpcominit"; //$NON-NLS-1$
+}
+
+int /*long*/ gtk_event (int /*long*/ handle, int /*long*/ gdkEvent, int /*long*/ pointer) {
+	GdkEvent event = new GdkEvent ();
+	OS.memmove (event, gdkEvent, GdkEvent.sizeof);
+	if (event.type == OS.GDK_BUTTON_PRESS) {
+		if (!hasFocus) browser.setFocus ();
+	}
+
+	/* 
+	* Stop the propagation of events that are not consumed by Mozilla, before
+	* they reach the parent embedder.  These event have already been received.
+	*/
+	if (pointer == STOP_PROPOGATE) return 1;
+	return 0;
+}
+
+void handleFocus () {
+	if (hasFocus) return;
+	hasFocus = true;
+	listener = new Listener () {
+		public void handleEvent (Event event) {
+			if (event.widget == browser) return;
+			((Mozilla)browser.webBrowser).Deactivate ();
+			hasFocus = false;
+			browser.getDisplay ().removeFilter (SWT.FocusIn, this);
+			browser.getShell ().removeListener (SWT.Deactivate, this);
+			listener = null;
+		}
+	};
+	browser.getDisplay ().addFilter (SWT.FocusIn, listener);
+	browser.getShell ().addListener (SWT.Deactivate, listener);
+}
+
+void handleMouseDown () {
+	int shellStyle = browser.getShell ().getStyle (); 
+	if ((shellStyle & SWT.ON_TOP) != 0 && (((shellStyle & SWT.NO_FOCUS) == 0) || ((browser.getStyle () & SWT.NO_FOCUS) == 0))) {
+		browser.getDisplay ().asyncExec (new Runnable () {
+			public void run () {
+				if (browser == null || browser.isDisposed ()) return;
+				((Mozilla)browser.webBrowser).Activate ();
+			}
+		});
+	}
+}
+
+boolean hookEnterExit () {
+	return false;
+}
+
+void init () {
+	if (eventCallback == null) {
+		eventCallback = new Callback (getClass (), "eventProc", 3); //$NON-NLS-1$
+		eventProc = eventCallback.getAddress ();
+		if (eventProc == 0) {
+			browser.dispose ();
+			Mozilla.error (SWT.ERROR_NO_MORE_CALLBACKS);
+		}
+	}
+
+	/*
+	* Feature in Mozilla.  GtkEvents such as key down, key pressed may be consumed
+	* by Mozilla and never be received by the parent embedder.  The workaround
+	* is to find the top Mozilla gtk widget that receives all the Mozilla GtkEvents,
+	* i.e. the first child of the parent embedder. Then hook event callbacks and
+	* forward the event to the parent embedder before Mozilla received and consumed
+	* them.
+	*/
+	int /*long*/ list = OS.gtk_container_get_children (embedHandle);
+	if (list != 0) {
+		mozillaHandle = OS.g_list_data (list);
+		OS.g_list_free (list);
+		
+		if (mozillaHandle != 0) {			
+			/* Note. Callback to get events before Mozilla receives and consumes them. */
+			OS.g_signal_connect (mozillaHandle, OS.event, eventProc, 0);
+			
+			/* 
+			* Note.  Callback to get the events not consumed by Mozilla - and to block 
+			* them so that they don't get propagated to the parent handle twice.  
+			* This hook is set after Mozilla and is therefore called after Mozilla's 
+			* handler because GTK dispatches events in their order of registration.
+			*/
+			OS.g_signal_connect (mozillaHandle, OS.key_press_event, eventProc, STOP_PROPOGATE);
+			OS.g_signal_connect (mozillaHandle, OS.key_release_event, eventProc, STOP_PROPOGATE);
+			OS.g_signal_connect (mozillaHandle, OS.button_press_event, eventProc, STOP_PROPOGATE);
+		}
+	}
+}
+
+boolean needsSpinup () {
+	return true;
+}
+
+void onDispose (int /*long*/ embedHandle) {
+	if (listener != null) {
+		browser.getDisplay ().removeFilter (SWT.FocusIn, listener);
+		browser.getShell ().removeListener (SWT.Deactivate, listener);
+		listener = null;
+	}
+	browser = null;
+}
+
+void removeWindowSubclass () {
+}
+
+void setSize (int /*long*/ embedHandle, int width, int height) {
+	OS.gtk_widget_set_size_request (embedHandle, width, height);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/motif/org/eclipse/swt/browser/MozillaDelegate.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/motif/org/eclipse/swt/browser/MozillaDelegate.java
new file mode 100644
index 0000000..8fcdf91
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/motif/org/eclipse/swt/browser/MozillaDelegate.java
@@ -0,0 +1,188 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 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.browser;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.gtk.GTK;
+import org.eclipse.swt.internal.mozilla.*;
+import org.eclipse.swt.widgets.*;
+
+class MozillaDelegate {
+	Browser browser;
+	Listener listener;
+	boolean hasFocus;
+
+	static boolean GtkLoaded, IsLinux;
+	static {
+		String osName = System.getProperty ("os.name").toLowerCase (); //$NON-NLS-1$
+		IsLinux = osName.startsWith ("linux"); //$NON-NLS-1$
+	}
+
+MozillaDelegate (Browser browser) {
+	super ();
+	if (!IsLinux) {
+		browser.dispose ();
+		SWT.error (SWT.ERROR_NO_HANDLES, null, " [Unsupported platform]"); //$NON-NLS-1$
+	}
+	this.browser = browser;
+	
+	if (!GtkLoaded) {
+		GtkLoaded = true;
+		try {
+			Library.loadLibrary ("swt-gtk"); //$NON-NLS-1$
+		} catch (UnsatisfiedLinkError e) {
+			browser.dispose ();
+			SWT.error (SWT.ERROR_NO_HANDLES, e);
+		}
+	}
+
+}
+
+static Browser findBrowser (int handle) {
+	Display display = Display.getCurrent ();
+	Shell[] shells = display.getShells ();
+	Browser browser = null;
+	for (int i = 0; i < shells.length; i++) {
+		browser = findBrowser (shells[i], handle);
+		if (browser != null) break;
+	}
+	return browser; 
+}
+
+static Browser findBrowser (Control control, int gtkHandle) {
+	if (control instanceof Browser) {
+		Browser browser = (Browser)control;
+		WebBrowser webBrowser = browser.webBrowser;
+		if (webBrowser instanceof Mozilla) {
+			if (((Mozilla)webBrowser).embedHandle == gtkHandle) return browser;
+		}
+	}
+	if (control instanceof Composite) {
+		Composite composite = (Composite)control;
+		Control[] children = composite.getChildren ();
+		for (int i = 0; i < children.length; i++) {
+			Browser browser = findBrowser (children[i], gtkHandle);
+			if (browser != null) return browser;
+		}
+	}
+	return null;
+}
+
+static char[] mbcsToWcs (String codePage, byte [] buffer) {
+	return Converter.mbcsToWcs (codePage, buffer);
+}
+
+static byte[] wcsToMbcs (String codePage, String string, boolean terminate) {
+	return Converter.wcsToMbcs (codePage, string, terminate);
+}
+
+void addWindowSubclass () {
+}
+
+int createBaseWindow (nsIBaseWindow baseWindow) {
+	return baseWindow.Create ();
+}
+
+int getHandle() {
+	if (Mozilla.BrowserCount == 1) {
+		GTK.gtk_init_check (new int[1], null);
+		final Display display = browser.getDisplay ();
+		display.asyncExec (new Runnable () {
+			public void run () {
+				if (Mozilla.BrowserCount == 0) return;
+				while (GTK.gtk_events_pending () != 0) {
+					GTK.gtk_main_iteration ();
+				}
+				display.timerExec (25, this);
+			}
+		});
+	}
+	browser.getShell ().setFocus ();
+	int result = GTK.gtk_plug_new (browser.embeddedHandle);
+	GTK.gtk_widget_show (result);
+	return result;
+}
+
+String getJSLibraryName () {
+	return "libmozjs.so"; //$NON-NLS-1$
+}
+
+String getLibraryName () {
+	return "libxpcom.so"; //$NON-NLS-1$
+}
+
+String getSWTInitLibraryName () {
+	return "swt-xpcominit"; //$NON-NLS-1$
+}
+
+void handleFocus () {
+	if (hasFocus) return;
+	hasFocus = true;
+	listener = new Listener () {
+		public void handleEvent (Event event) {
+			if (event.widget == browser) return;
+			((Mozilla)browser.webBrowser).Deactivate ();
+			hasFocus = false;
+			browser.getDisplay ().removeFilter (SWT.FocusIn, this);
+			browser.getShell ().removeListener (SWT.Deactivate, this);
+			listener = null;
+		}
+	
+	};
+	browser.getDisplay ().addFilter (SWT.FocusIn, listener);
+	browser.getShell ().addListener (SWT.Deactivate, listener);
+}
+
+void handleMouseDown () {
+	int shellStyle = browser.getShell ().getStyle (); 
+	if ((shellStyle & SWT.ON_TOP) != 0 && (((shellStyle & SWT.NO_FOCUS) == 0) || ((browser.getStyle () & SWT.NO_FOCUS) == 0))) {
+		browser.getDisplay ().asyncExec (new Runnable () {
+			public void run () {
+				if (browser == null || browser.isDisposed ()) return;
+				((Mozilla)browser.webBrowser).Activate ();
+			}
+		});
+	}
+}
+
+boolean hookEnterExit () {
+	return true;
+}
+
+void init () {
+}
+
+boolean needsSpinup () {
+	return true;
+}
+
+void onDispose (int embedHandle) {
+	if (listener != null) {
+		browser.getDisplay ().removeFilter (SWT.FocusIn, listener);
+		browser.getShell ().removeListener (SWT.Deactivate, listener);
+		listener = null;
+	}
+
+	GTK.gtk_widget_destroy (embedHandle);
+	while (GTK.gtk_events_pending () != 0) {
+		GTK.gtk_main_iteration ();
+	}
+
+	browser = null;
+}
+
+void removeWindowSubclass () {
+}
+
+void setSize(int embedHandle, int width, int height) {
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/win32/org/eclipse/swt/browser/MozillaDelegate.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/win32/org/eclipse/swt/browser/MozillaDelegate.java
new file mode 100644
index 0000000..9eb0169
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/win32/org/eclipse/swt/browser/MozillaDelegate.java
@@ -0,0 +1,131 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2009 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.browser;
+
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.internal.Callback;
+import org.eclipse.swt.internal.mozilla.*;
+import org.eclipse.swt.internal.win32.*;
+import org.eclipse.swt.widgets.*;
+
+class MozillaDelegate {
+	Browser browser;
+	static int /*long*/ MozillaProc;
+	static Callback SubclassProc;
+	
+MozillaDelegate (Browser browser) {
+	super ();
+	this.browser = browser;
+}
+
+static Browser findBrowser (int /*long*/ handle) {
+	Display display = Display.getCurrent ();
+	return (Browser)display.findWidget (handle);
+}
+
+static char[] mbcsToWcs (String codePage, byte[] buffer) {
+	char[] chars = new char[buffer.length];
+	int charCount = OS.MultiByteToWideChar (OS.CP_ACP, OS.MB_PRECOMPOSED, buffer, buffer.length, chars, chars.length);
+	if (charCount == chars.length) return chars;
+	char[] result = new char[charCount];
+	System.arraycopy (chars, 0, result, 0, charCount);
+	return result;
+}
+
+static byte[] wcsToMbcs (String codePage, String string, boolean terminate) {
+	int byteCount;
+	char[] chars = new char[string.length()];
+	string.getChars (0, chars.length, chars, 0);
+	byte[] bytes = new byte[byteCount = chars.length * 2 + (terminate ? 1 : 0)];
+	byteCount = OS.WideCharToMultiByte (OS.CP_ACP, 0, chars, chars.length, bytes, byteCount, null, null);
+	if (terminate) {
+		byteCount++;
+	} else {
+		if (bytes.length != byteCount) {
+			byte[] result = new byte[byteCount];
+			System.arraycopy (bytes, 0, result, 0, byteCount);
+			bytes = result;
+		}
+	}
+	return bytes;
+}
+
+static int /*long*/ windowProc (int /*long*/ hwnd, int /*long*/ msg, int /*long*/ wParam, int /*long*/ lParam) {
+	switch ((int)/*64*/msg) {
+		case OS.WM_ERASEBKGND:
+			RECT rect = new RECT ();
+			OS.GetClientRect (hwnd, rect);
+			OS.FillRect (wParam, rect, OS.GetSysColorBrush (OS.COLOR_WINDOW));
+			break;
+	}
+	return OS.CallWindowProc (MozillaProc, hwnd, (int)/*64*/msg, wParam, lParam);
+}
+
+void addWindowSubclass () {
+	int /*long*/ hwndChild = OS.GetWindow (browser.handle, OS.GW_CHILD);
+	if (SubclassProc == null) {
+		SubclassProc = new Callback (MozillaDelegate.class, "windowProc", 4); //$NON-NLS-1$
+		MozillaProc = OS.GetWindowLongPtr (hwndChild, OS.GWL_WNDPROC);
+	}
+	OS.SetWindowLongPtr (hwndChild, OS.GWL_WNDPROC, SubclassProc.getAddress ());
+}
+
+int createBaseWindow (nsIBaseWindow baseWindow) {
+	return baseWindow.Create ();
+}
+
+int /*long*/ getHandle () {
+	return browser.handle;
+}
+
+String getJSLibraryName () {
+	return "js3250.dll"; //$NON-NLS-1$
+}
+
+String getLibraryName () {
+	return "xpcom.dll"; //$NON-NLS-1$
+}
+
+String getSWTInitLibraryName () {
+	return "swt-xulrunner"; //$NON-NLS-1$
+}
+
+void handleFocus () {
+}
+
+void handleMouseDown () {
+}
+
+boolean hookEnterExit () {
+	return true;
+}
+
+void init () {
+}
+
+boolean needsSpinup () {
+	return false;
+}
+
+void onDispose (int /*long*/ embedHandle) {
+	removeWindowSubclass ();
+	browser = null;
+}
+
+void removeWindowSubclass () {
+	if (SubclassProc == null) return;
+	int /*long*/ hwndChild = OS.GetWindow (browser.handle, OS.GW_CHILD);
+	OS.SetWindowLongPtr (hwndChild, OS.GWL_WNDPROC, MozillaProc);
+}
+
+void setSize (int /*long*/ embedHandle, int width, int height) {
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT OpenGL/cocoa/org/eclipse/swt/opengl/GLCanvas.java b/bundles/org.eclipse.swt/Eclipse SWT OpenGL/cocoa/org/eclipse/swt/opengl/GLCanvas.java
new file mode 100755
index 0000000..0f73145
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT OpenGL/cocoa/org/eclipse/swt/opengl/GLCanvas.java
@@ -0,0 +1,247 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.opengl;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.swt.internal.cocoa.*;
+import org.eclipse.swt.opengl.GLData;
+
+/**
+ * GLCanvas is a widget capable of displaying OpenGL content.
+ * 
+ * @see GLData
+ * @see <a href="http://www.eclipse.org/swt/snippets/#opengl">OpenGL snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ *
+ * @since 3.2
+ */
+
+public class GLCanvas extends Canvas {
+	NSOpenGLContext context;
+	NSOpenGLPixelFormat pixelFormat;
+	
+	static final int MAX_ATTRIBUTES = 32;
+	static final String GLCONTEXT_KEY = "org.eclipse.swt.internal.cocoa.glcontext"; //$NON-NLS-1$
+
+/**
+ * Create a GLCanvas widget using the attributes described in the GLData
+ * object provided.
+ *
+ * @param parent a composite widget
+ * @param style the bitwise OR'ing of widget styles
+ * @param data the requested attributes of the GLCanvas
+ *
+ * @exception IllegalArgumentException
+ * <ul><li>ERROR_NULL_ARGUMENT when the data is null
+ *     <li>ERROR_UNSUPPORTED_DEPTH when the requested attributes cannot be provided</ul> 
+ * </ul>
+ */
+public GLCanvas (Composite parent, int style, GLData data) {
+	super (parent, style);
+	if (data == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	int attrib [] = new int [MAX_ATTRIBUTES];
+	int pos = 0;
+
+	if (data.doubleBuffer) attrib [pos++] = OS.NSOpenGLPFADoubleBuffer;
+	
+	if (data.stereo) attrib [pos++] = OS.NSOpenGLPFAStereo;
+
+	/*
+	 * Feature in Cocoa: NSOpenGL/CoreOpenGL only supports specifying the total number of bits
+	 * in the size of the color component. If specified, the color size is the sum of the red, green
+	 * and blue values in the GLData. 
+	 */
+	if ((data.redSize + data.blueSize + data.greenSize) > 0) {
+		attrib [pos++] = OS.NSOpenGLPFAColorSize;
+		attrib [pos++] = data.redSize + data.greenSize + data.blueSize;
+	}
+	
+	if (data.alphaSize > 0) {
+		attrib [pos++] = OS.NSOpenGLPFAAlphaSize;
+		attrib [pos++] = data.alphaSize;
+	}
+	
+	if (data.depthSize > 0) {
+		attrib [pos++] = OS.NSOpenGLPFADepthSize;
+		attrib [pos++] = data.depthSize;
+	}
+	
+	if (data.stencilSize > 0) {
+		attrib [pos++] = OS.NSOpenGLPFAStencilSize;
+		attrib [pos++] = data.stencilSize;
+	}
+	
+	/*
+	 * Feature in Cocoa: NSOpenGL/CoreOpenGL only supports specifying the total number of bits
+	 * in the size of the color accumulator component. If specified, the color size is the sum of the red, green,
+	 * blue and alpha accum values in the GLData. 
+	 */
+	if ((data.accumRedSize + data.accumBlueSize + data.accumGreenSize) > 0) {
+		attrib [pos++] = OS.NSOpenGLPFAAccumSize;
+		attrib [pos++] = data.accumRedSize + data.accumGreenSize + data.accumBlueSize + data.accumAlphaSize;
+	}
+	
+	if (data.sampleBuffers > 0) {
+		attrib [pos++] = OS.NSOpenGLPFASampleBuffers;
+		attrib [pos++] = data.sampleBuffers;
+	}
+	
+	if (data.samples > 0) {
+		attrib [pos++] = OS.NSOpenGLPFASamples;
+		attrib [pos++] = data.samples;
+	}
+	
+	attrib [pos++] = 0;
+	
+	pixelFormat = (NSOpenGLPixelFormat)new NSOpenGLPixelFormat().alloc();
+	
+	if (pixelFormat == null) {		
+		dispose ();
+		SWT.error (SWT.ERROR_UNSUPPORTED_DEPTH);
+	}
+	pixelFormat.initWithAttributes(attrib);
+	
+	NSOpenGLContext ctx = data.shareContext != null ? data.shareContext.context : null;
+	context = (NSOpenGLContext) new NSOpenGLContext().alloc();
+	if (context == null) {		
+		dispose ();
+		SWT.error (SWT.ERROR_UNSUPPORTED_DEPTH);
+	}
+	context = context.initWithFormat(pixelFormat, ctx);
+	setData(GLCONTEXT_KEY, context);
+	NSNotificationCenter.defaultCenter().addObserver(view,  OS.sel_updateOpenGLContext_, OS.NSViewGlobalFrameDidChangeNotification, view);
+	
+	Listener listener = new Listener () {
+		public void handleEvent (Event event) {
+			switch (event.type) {
+			
+				case SWT.Dispose:
+					setData(GLCONTEXT_KEY, null);
+					NSNotificationCenter.defaultCenter().removeObserver(view);
+					
+					if (context != null) {
+						context.clearDrawable();
+						context.release();
+					}
+					context = null;
+					if (pixelFormat != null) pixelFormat.release();
+					pixelFormat = null;
+					break;
+			}
+		}
+	};
+	addListener (SWT.Dispose, listener);
+}
+
+/**
+ * Returns a GLData object describing the created context.
+ *  
+ * @return GLData description of the OpenGL context attributes
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public GLData getGLData () {
+	checkWidget ();
+	GLData data = new GLData ();
+	int /*long*/ [] value = new int /*long*/ [1];
+	pixelFormat.getValues(value, OS.NSOpenGLPFADoubleBuffer, 0);
+	data.doubleBuffer = value [0] != 0;
+	pixelFormat.getValues(value, OS.NSOpenGLPFAStereo, 0);
+	data.stereo = value [0] != 0;
+
+	pixelFormat.getValues(value, OS.NSOpenGLPFAAlphaSize, 0);
+	data.alphaSize = (int/*64*/)value [0];
+
+	/*
+	 * Feature in Cocoa: NSOpenGL/CoreOpenGL only supports specifying the total number of bits
+	 * in the size of the color component. For compatibility we split the color size less any alpha
+	 * into thirds and allocate a third to each color.
+	 */
+	pixelFormat.getValues(value, OS.NSOpenGLPFAColorSize, 0);
+
+	int colorSize = ((int/*64*/)(value[0] - data.alphaSize)) / 3;
+
+	data.redSize = colorSize;
+	data.greenSize = colorSize;
+	data.blueSize = colorSize;
+	
+	pixelFormat.getValues(value, OS.NSOpenGLPFADepthSize, 0);
+	data.depthSize = (int/*64*/)value [0];
+	pixelFormat.getValues(value, OS.NSOpenGLPFAStencilSize, 0);
+	data.stencilSize = (int/*64*/)value [0];
+	
+	/*
+	 * Feature(?) in Cocoa: NSOpenGL/CoreOpenGL doesn't support setting an accumulation buffer alpha, but
+	 * has an alpha if the color values for the accumulation buffer were set. Allocate the values evenly
+	 * in that case.
+	 */
+	pixelFormat.getValues(value, OS.NSOpenGLPFAAccumSize, 0);
+
+	int accumColorSize = (int/*64*/)(value[0]) / 4;	
+	data.accumRedSize = accumColorSize;
+	data.accumGreenSize = accumColorSize;
+	data.accumBlueSize = accumColorSize;
+	data.accumAlphaSize = accumColorSize;
+
+	pixelFormat.getValues(value, OS.NSOpenGLPFASampleBuffers, 0);
+	data.sampleBuffers = (int/*64*/)value [0];
+	pixelFormat.getValues(value, OS.NSOpenGLPFASamples, 0);
+	data.samples = (int/*64*/)value [0];
+	return data;
+}
+
+/**
+ * Returns a boolean indicating whether the receiver's OpenGL context
+ * is the current context.
+ *  
+ * @return true if the receiver holds the current OpenGL context,
+ * false otherwise
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean isCurrent () {
+	checkWidget ();
+	NSOpenGLContext current = NSOpenGLContext.currentContext();
+	return current != null && current.id == context.id;
+}
+
+/**
+ * Sets the OpenGL context associated with this GLCanvas to be the
+ * current GL context.
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setCurrent () {
+	checkWidget ();
+	context.makeCurrentContext();
+}
+
+/**
+ * Swaps the front and back color buffers.
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void swapBuffers () {
+	checkWidget ();
+	context.flushBuffer();
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_custom.h b/bundles/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_custom.h
new file mode 100755
index 0000000..9d0ae8d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cairo/library/cairo_custom.h
@@ -0,0 +1,26 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Cairo and SWT
+ * -  Copyright (C) 2005, 2006 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/* Libraries for dynamic loaded functions */
+#define cairo_pdf_surface_set_size_LIB "libcairo.so.2"
+#define cairo_ps_surface_set_size_LIB "libcairo.so.2"
+#define cairo_surface_set_fallback_resolution_LIB "libcairo.so.2"
+#define cairo_surface_get_type_LIB "libcairo.so.2"
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cairo/org/eclipse/swt/internal/cairo/cairo_text_extents_t.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cairo/org/eclipse/swt/internal/cairo/cairo_text_extents_t.java
new file mode 100644
index 0000000..7408d29
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cairo/org/eclipse/swt/internal/cairo/cairo_text_extents_t.java
@@ -0,0 +1,32 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * Contributor(s):
+ *
+ * IBM
+ * -  Binding to permit interfacing between Cairo and SWT
+ * -  Copyright (C) 2005, 2006 IBM Corp.  All Rights Reserved.
+ *
+ * ***** END LICENSE BLOCK ***** */
+package org.eclipse.swt.internal.cairo;
+
+
+public class cairo_text_extents_t {
+	public double x_bearing;
+	public double y_bearing;
+	public double width;
+	public double height;
+	public double x_advance;
+	public double y_advance;
+	public static final int sizeof = Cairo.cairo_text_extents_t_sizeof();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa.c b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa.c
new file mode 100644
index 0000000..0609152
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa.c
@@ -0,0 +1,520 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "cocoa_structs.h"
+#include "cocoa_stats.h"
+
+#define Cocoa_NATIVE(func) Java_org_eclipse_swt_internal_cocoa_Cocoa_##func
+
+#ifndef NO_HICocoaViewCreate
+JNIEXPORT jint JNICALL Cocoa_NATIVE(HICocoaViewCreate)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
+{
+	jint *lparg2=NULL;
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, HICocoaViewCreate_FUNC);
+	if (arg2) if ((lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL)) == NULL) goto fail;
+/*
+	rc = (jint)HICocoaViewCreate(arg0, arg1, lparg2);
+*/
+	{
+		LOAD_FUNCTION(fp, HICocoaViewCreate)
+		if (fp) {
+			rc = (jint)((jint (CALLING_CONVENTION*)(jint, jint, jint *))fp)(arg0, arg1, lparg2);
+		}
+	}
+fail:
+	if (arg2 && lparg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
+	Cocoa_NATIVE_EXIT(env, that, HICocoaViewCreate_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_HIWebViewCreate
+JNIEXPORT jint JNICALL Cocoa_NATIVE(HIWebViewCreate)
+	(JNIEnv *env, jclass that, jintArray arg0)
+{
+	jint *lparg0=NULL;
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, HIWebViewCreate_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL)) == NULL) goto fail;
+	rc = (jint)HIWebViewCreate((HIViewRef *)lparg0);
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+	Cocoa_NATIVE_EXIT(env, that, HIWebViewCreate_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_HIWebViewGetWebView
+JNIEXPORT jint JNICALL Cocoa_NATIVE(HIWebViewGetWebView)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, HIWebViewGetWebView_FUNC);
+	rc = (jint)HIWebViewGetWebView((HIViewRef)arg0);
+	Cocoa_NATIVE_EXIT(env, that, HIWebViewGetWebView_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSDeviceRGBColorSpace
+JNIEXPORT jint JNICALL Cocoa_NATIVE(NSDeviceRGBColorSpace)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, NSDeviceRGBColorSpace_FUNC);
+	rc = (jint)NSDeviceRGBColorSpace;
+	Cocoa_NATIVE_EXIT(env, that, NSDeviceRGBColorSpace_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSSearchPathForDirectoriesInDomains
+JNIEXPORT jint JNICALL Cocoa_NATIVE(NSSearchPathForDirectoriesInDomains)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jboolean arg2)
+{
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, NSSearchPathForDirectoriesInDomains_FUNC);
+	rc = (jint)NSSearchPathForDirectoriesInDomains((NSSearchPathDirectory)arg0, (NSSearchPathDomainMask)arg1, (BOOL)arg2);
+	Cocoa_NATIVE_EXIT(env, that, NSSearchPathForDirectoriesInDomains_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_WebInitForCarbon
+JNIEXPORT void JNICALL Cocoa_NATIVE(WebInitForCarbon)
+	(JNIEnv *env, jclass that)
+{
+	Cocoa_NATIVE_ENTER(env, that, WebInitForCarbon_FUNC);
+	WebInitForCarbon();
+	Cocoa_NATIVE_EXIT(env, that, WebInitForCarbon_FUNC);
+}
+#endif
+
+#ifndef NO_class_1getClassMethod
+JNIEXPORT jintLong JNICALL Cocoa_NATIVE(class_1getClassMethod)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	jintLong rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, class_1getClassMethod_FUNC);
+	rc = (jintLong)class_getClassMethod((Class)arg0, (SEL)arg1);
+	Cocoa_NATIVE_EXIT(env, that, class_1getClassMethod_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_memcpy
+JNIEXPORT void JNICALL Cocoa_NATIVE(memcpy)
+	(JNIEnv *env, jclass that, jobject arg0, jint arg1, jint arg2)
+{
+	NSRect _arg0, *lparg0=NULL;
+	Cocoa_NATIVE_ENTER(env, that, memcpy_FUNC);
+	if (arg0) if ((lparg0 = getNSRectFields(env, arg0, &_arg0)) == NULL) goto fail;
+	memcpy(lparg0, (void *)arg1, arg2);
+fail:
+	if (arg0 && lparg0) setNSRectFields(env, arg0, lparg0);
+	Cocoa_NATIVE_EXIT(env, that, memcpy_FUNC);
+}
+#endif
+
+#ifndef NO_memmove
+JNIEXPORT void JNICALL Cocoa_NATIVE(memmove)
+	(JNIEnv *env, jclass that, jobject arg0, jint arg1, jint arg2)
+{
+	NSPoint _arg0, *lparg0=NULL;
+	Cocoa_NATIVE_ENTER(env, that, memmove_FUNC);
+	if (arg0) if ((lparg0 = getNSPointFields(env, arg0, &_arg0)) == NULL) goto fail;
+	memmove(lparg0, (void *)arg1, arg2);
+fail:
+	if (arg0 && lparg0) setNSPointFields(env, arg0, lparg0);
+	Cocoa_NATIVE_EXIT(env, that, memmove_FUNC);
+}
+#endif
+
+#ifndef NO_objc_1getClass
+JNIEXPORT jint JNICALL Cocoa_NATIVE(objc_1getClass)
+	(JNIEnv *env, jclass that, jbyteArray arg0)
+{
+	jbyte *lparg0=NULL;
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, objc_1getClass_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL)) == NULL) goto fail;
+	rc = (jint)objc_getClass((const char *)lparg0);
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
+	Cocoa_NATIVE_EXIT(env, that, objc_1getClass_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1getMetaClass
+JNIEXPORT jint JNICALL Cocoa_NATIVE(objc_1getMetaClass)
+	(JNIEnv *env, jclass that, jbyteArray arg0)
+{
+	jbyte *lparg0=NULL;
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, objc_1getMetaClass_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL)) == NULL) goto fail;
+	rc = (jint)objc_getMetaClass((const char *)lparg0);
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
+	Cocoa_NATIVE_EXIT(env, that, objc_1getMetaClass_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__II
+JNIEXPORT jint JNICALL Cocoa_NATIVE(objc_1msgSend__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, objc_1msgSend__II_FUNC);
+	rc = (jint)objc_msgSend((id)arg0, (SEL)arg1);
+	Cocoa_NATIVE_EXIT(env, that, objc_1msgSend__II_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__IID
+JNIEXPORT jint JNICALL Cocoa_NATIVE(objc_1msgSend__IID)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jdouble arg2)
+{
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, objc_1msgSend__IID_FUNC);
+	rc = (jint)((jint (*)(id, SEL, jdouble))objc_msgSend)((id)arg0, (SEL)arg1, arg2);
+	Cocoa_NATIVE_EXIT(env, that, objc_1msgSend__IID_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__IIF
+JNIEXPORT jint JNICALL Cocoa_NATIVE(objc_1msgSend__IIF)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloat arg2)
+{
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, objc_1msgSend__IIF_FUNC);
+	rc = (jint)((jint (*)(id, SEL, jfloat))objc_msgSend)((id)arg0, (SEL)arg1, arg2);
+	Cocoa_NATIVE_EXIT(env, that, objc_1msgSend__IIF_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__IIFF
+JNIEXPORT jint JNICALL Cocoa_NATIVE(objc_1msgSend__IIFF)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloat arg2, jfloat arg3)
+{
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, objc_1msgSend__IIFF_FUNC);
+	rc = (jint)((jint (*)(id, SEL, jfloat, jfloat))objc_msgSend)((id)arg0, (SEL)arg1, arg2, arg3);
+	Cocoa_NATIVE_EXIT(env, that, objc_1msgSend__IIFF_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__III
+JNIEXPORT jint JNICALL Cocoa_NATIVE(objc_1msgSend__III)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, objc_1msgSend__III_FUNC);
+	rc = (jint)objc_msgSend((id)arg0, (SEL)arg1, arg2);
+	Cocoa_NATIVE_EXIT(env, that, objc_1msgSend__III_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__IIII
+JNIEXPORT jint JNICALL Cocoa_NATIVE(objc_1msgSend__IIII)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+{
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, objc_1msgSend__IIII_FUNC);
+	rc = (jint)objc_msgSend((id)arg0, (SEL)arg1, arg2, arg3);
+	Cocoa_NATIVE_EXIT(env, that, objc_1msgSend__IIII_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__IIIII
+JNIEXPORT jint JNICALL Cocoa_NATIVE(objc_1msgSend__IIIII)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4)
+{
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, objc_1msgSend__IIIII_FUNC);
+	rc = (jint)objc_msgSend((id)arg0, (SEL)arg1, arg2, arg3, arg4);
+	Cocoa_NATIVE_EXIT(env, that, objc_1msgSend__IIIII_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__IIIIII
+JNIEXPORT jint JNICALL Cocoa_NATIVE(objc_1msgSend__IIIIII)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5)
+{
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, objc_1msgSend__IIIIII_FUNC);
+	rc = (jint)objc_msgSend((id)arg0, (SEL)arg1, arg2, arg3, arg4, arg5);
+	Cocoa_NATIVE_EXIT(env, that, objc_1msgSend__IIIIII_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2
+JNIEXPORT jint JNICALL Cocoa_NATIVE(objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jobject arg3)
+{
+	NSPoint _arg3, *lparg3=NULL;
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+	if (arg3) if ((lparg3 = getNSPointFields(env, arg3, &_arg3)) == NULL) goto fail;
+	rc = (jint)objc_msgSend((id)arg0, (SEL)arg1, arg2, *lparg3);
+fail:
+	if (arg3 && lparg3) setNSPointFields(env, arg3, lparg3);
+	Cocoa_NATIVE_EXIT(env, that, objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSRect_2I
+JNIEXPORT jint JNICALL Cocoa_NATIVE(objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSRect_2I)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jobject arg3, jint arg4)
+{
+	NSRect _arg3, *lparg3=NULL;
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+	if (arg3) if ((lparg3 = getNSRectFields(env, arg3, &_arg3)) == NULL) goto fail;
+	rc = (jint)objc_msgSend((id)arg0, (SEL)arg1, arg2, *lparg3, arg4);
+fail:
+	if (arg3 && lparg3) setNSRectFields(env, arg3, lparg3);
+	Cocoa_NATIVE_EXIT(env, that, objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2
+JNIEXPORT jint JNICALL Cocoa_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jobject arg2)
+{
+	NSPoint _arg2, *lparg2=NULL;
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+	if (arg2) if ((lparg2 = getNSPointFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jint)objc_msgSend((id)arg0, (SEL)arg1, *lparg2);
+fail:
+	if (arg2 && lparg2) setNSPointFields(env, arg2, lparg2);
+	Cocoa_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2I
+JNIEXPORT jint JNICALL Cocoa_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2I)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jobject arg2, jint arg3)
+{
+	NSPoint _arg2, *lparg2=NULL;
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2I_FUNC);
+	if (arg2) if ((lparg2 = getNSPointFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jint)objc_msgSend((id)arg0, (SEL)arg1, *lparg2, arg3);
+fail:
+	if (arg2 && lparg2) setNSPointFields(env, arg2, lparg2);
+	Cocoa_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2
+JNIEXPORT jint JNICALL Cocoa_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jobject arg2, jobject arg3, jobject arg4)
+{
+	NSPoint _arg2, *lparg2=NULL;
+	NSPoint _arg3, *lparg3=NULL;
+	NSPoint _arg4, *lparg4=NULL;
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+	if (arg2) if ((lparg2 = getNSPointFields(env, arg2, &_arg2)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSPointFields(env, arg3, &_arg3)) == NULL) goto fail;
+	if (arg4) if ((lparg4 = getNSPointFields(env, arg4, &_arg4)) == NULL) goto fail;
+	rc = (jint)objc_msgSend((id)arg0, (SEL)arg1, *lparg2, *lparg3, *lparg4);
+fail:
+	if (arg4 && lparg4) setNSPointFields(env, arg4, lparg4);
+	if (arg3 && lparg3) setNSPointFields(env, arg3, lparg3);
+	if (arg2 && lparg2) setNSPointFields(env, arg2, lparg2);
+	Cocoa_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2
+JNIEXPORT jint JNICALL Cocoa_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jobject arg2)
+{
+	NSRect _arg2, *lparg2=NULL;
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+	if (arg2) if ((lparg2 = getNSRectFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jint)objc_msgSend((id)arg0, (SEL)arg1, *lparg2);
+fail:
+	if (arg2 && lparg2) setNSRectFields(env, arg2, lparg2);
+	Cocoa_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2I
+JNIEXPORT jint JNICALL Cocoa_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2I)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jobject arg2, jint arg3)
+{
+	NSRect _arg2, *lparg2=NULL;
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+	if (arg2) if ((lparg2 = getNSRectFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jint)objc_msgSend((id)arg0, (SEL)arg1, *lparg2, arg3);
+fail:
+	if (arg2 && lparg2) setNSRectFields(env, arg2, lparg2);
+	Cocoa_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2II
+JNIEXPORT jint JNICALL Cocoa_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jobject arg2, jint arg3, jint arg4)
+{
+	NSRect _arg2, *lparg2=NULL;
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2II_FUNC);
+	if (arg2) if ((lparg2 = getNSRectFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jint)objc_msgSend((id)arg0, (SEL)arg1, *lparg2, arg3, arg4);
+fail:
+	if (arg2 && lparg2) setNSRectFields(env, arg2, lparg2);
+	Cocoa_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2II_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSSize_2
+JNIEXPORT jint JNICALL Cocoa_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSSize_2)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jobject arg2)
+{
+	NSSize _arg2, *lparg2=NULL;
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSSize_2_FUNC);
+	if (arg2) if ((lparg2 = getNSSizeFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jint)objc_msgSend((id)arg0, (SEL)arg1, *lparg2);
+fail:
+	if (arg2 && lparg2) setNSSizeFields(env, arg2, lparg2);
+	Cocoa_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSSize_2_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__II_3C
+JNIEXPORT jint JNICALL Cocoa_NATIVE(objc_1msgSend__II_3C)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jcharArray arg2)
+{
+	jchar *lparg2=NULL;
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, objc_1msgSend__II_3C_FUNC);
+	if (arg2) if ((lparg2 = (*env)->GetCharArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	rc = (jint)((jint (*)(jint, jint, jchar *))objc_msgSend)(arg0, arg1, lparg2);
+fail:
+	if (arg2 && lparg2) (*env)->ReleaseCharArrayElements(env, arg2, lparg2, 0);
+	Cocoa_NATIVE_EXIT(env, that, objc_1msgSend__II_3C_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__II_3IIIIIIIIIII
+JNIEXPORT jint JNICALL Cocoa_NATIVE(objc_1msgSend__II_3IIIIIIIIIII)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2, jint arg3, jint arg4, jint arg5, jint arg6, jint arg7, jint arg8, jint arg9, jint arg10, jint arg11, jint arg12)
+{
+	jint *lparg2=NULL;
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, objc_1msgSend__II_3IIIIIIIIIII_FUNC);
+	if (arg2) if ((lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	rc = (jint)objc_msgSend((id)arg0, (SEL)arg1, lparg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12);
+fail:
+	if (arg2 && lparg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
+	Cocoa_NATIVE_EXIT(env, that, objc_1msgSend__II_3IIIIIIIIIII_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend_1fpret
+JNIEXPORT jdouble JNICALL Cocoa_NATIVE(objc_1msgSend_1fpret)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	jdouble rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, objc_1msgSend_1fpret_FUNC);
+	rc = (jdouble)((jdouble (*)(jintLong, jintLong))objc_msgSend_fpret)(arg0, arg1);
+	Cocoa_NATIVE_EXIT(env, that, objc_1msgSend_1fpret_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2II
+JNIEXPORT void JNICALL Cocoa_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2II)
+	(JNIEnv *env, jclass that, jobject arg0, jint arg1, jint arg2)
+{
+	NSRect _arg0, *lparg0=NULL;
+	Cocoa_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2II_FUNC);
+	if (arg0) if ((lparg0 = getNSRectFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSRect (*)(void *, SEL))objc_msgSend_stret)((void *)arg1, (SEL)arg2);
+	} else {
+		*lparg0 = (*(NSRect (*)(void *, SEL))objc_msgSend)((void *)arg1, (SEL)arg2);
+	}
+fail:
+	if (arg0 && lparg0) setNSRectFields(env, arg0, lparg0);
+	Cocoa_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2II_FUNC);
+}
+#endif
+
+#ifndef NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I
+JNIEXPORT void JNICALL Cocoa_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I)
+	(JNIEnv *env, jclass that, jobject arg0, jint arg1, jint arg2, jobject arg3, jint arg4)
+{
+	NSRect _arg0, *lparg0=NULL;
+	NSRect _arg3, *lparg3=NULL;
+	Cocoa_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+	if (arg0) if ((lparg0 = getNSRectFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSRectFields(env, arg3, &_arg3)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSRect (*)(void *, SEL, NSRect, jint))objc_msgSend_stret)((void *)arg1, (SEL)arg2, *lparg3, arg4);
+	} else {
+		*lparg0 = (*(NSRect (*)(void *, SEL, NSRect, jint))objc_msgSend)((void *)arg1, (SEL)arg2, *lparg3, arg4);
+	}
+fail:
+	if (arg3 && lparg3) setNSRectFields(env, arg3, lparg3);
+	if (arg0 && lparg0) setNSRectFields(env, arg0, lparg0);
+	Cocoa_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+}
+#endif
+
+#ifndef NO_sel_1registerName
+JNIEXPORT jint JNICALL Cocoa_NATIVE(sel_1registerName)
+	(JNIEnv *env, jclass that, jbyteArray arg0)
+{
+	jbyte *lparg0=NULL;
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, sel_1registerName_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL)) == NULL) goto fail;
+	rc = (jint)sel_registerName((const char *)lparg0);
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
+	Cocoa_NATIVE_EXIT(env, that, sel_1registerName_FUNC);
+	return rc;
+}
+#endif
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa.h b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa.h
new file mode 100644
index 0000000..a57d4b0a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa.h
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#ifndef INC_cocoa_H
+#define INC_cocoa_H
+
+#include <Carbon/Carbon.h>
+#include <WebKit/WebKit.h>
+#include <WebKit/HIWebView.h>
+#include <WebKit/CarbonUtils.h>
+#import <objc/objc-runtime.h>
+
+#include "cocoa_custom.h"
+
+#ifndef __i386__
+#define objc_msgSend_fpret objc_msgSend
+#endif
+
+#ifdef __i386__
+#define STRUCT_SIZE_LIMIT 8
+#elif __ppc__
+#define STRUCT_SIZE_LIMIT 4
+#elif __x86_64__
+#define STRUCT_SIZE_LIMIT 16
+#endif
+
+#endif /* INC_cocoa_H */
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_custom.c b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_custom.c
new file mode 100755
index 0000000..e298bd6
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_custom.c
@@ -0,0 +1,316 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "cocoa_structs.h"
+#include "cocoa_stats.h"
+
+#include <dlfcn.h>
+
+#define Cocoa_NATIVE(func) Java_org_eclipse_swt_internal_cocoa_Cocoa_##func
+
+extern id objc_msgSend(id, SEL, ...);
+
+#ifndef NO_HIJavaViewCreateWithCocoaView
+JNIEXPORT jint JNICALL Cocoa_NATIVE(HIJavaViewCreateWithCocoaView)
+	(JNIEnv *env, jclass that, jintArray arg0, jint arg1)
+{
+	jint *lparg0=NULL;
+	jint rc = 0;
+	Cocoa_NATIVE_ENTER(env, that, HIJavaViewCreateWithCocoaView_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL)) == NULL) goto fail;
+	/*
+	rc = (jint)HIJavaViewCreateWithCocoaView(lparg0, arg1);
+	*/
+	{
+		static int initialized = 0;
+		static void *fp = NULL;
+		if (!initialized) {
+			void* handle = dlopen("/System/Library/Frameworks/JavaVM.framework/Libraries/libframeembedding.jnilib", RTLD_LAZY);
+			if (handle) fp = dlsym(handle, "HIJavaViewCreateWithCocoaView");
+			initialized = 1;
+		}
+		if (fp) {
+			rc = (jint)((jint (CALLING_CONVENTION*)(jint *, jint))fp)(lparg0, arg1);
+		}
+	}
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+	Cocoa_NATIVE_EXIT(env, that, HIJavaViewCreateWithCocoaView_FUNC);
+	return rc;
+}
+#endif
+
+@interface NSStatusItemImageView : NSImageView
+{
+	int user_data;
+	int (*proc) (int sender, int user_data, int selector, void * arg0);
+}
+@end
+
+@implementation NSStatusItemImageView
+
+- (id)initWithProc:(id)prc frame:(NSRect)rect user_data:(int)data
+{
+    [super initWithFrame: rect];
+    proc= (void *) prc;
+    user_data = data;
+    return self;
+}
+
+- (void)mouseDown:(NSEvent *)event
+{
+	proc((int)self, user_data, 0, event);
+}
+
+- (void)mouseUp:(NSEvent *)event
+{
+	proc((int)self, user_data, 1, event);
+}
+
+- (void)rightMouseDown:(NSEvent *)event
+{
+	proc((int)self, user_data, 2, event);
+}
+
+- (void)drawRect:(NSRect) rect
+{
+	proc((int)self, user_data, 3, &rect);
+	[super drawRect: rect];
+}
+@end
+
+@interface WebKitDelegate : NSObject
+{
+	int user_data;
+	int (*proc) (int sender, int user_data, int selector, int arg0, int arg1, int arg2, int arg3);
+}
+@end
+
+@implementation WebKitDelegate
+
+- (id)initWithProc:(id)prc user_data:(int)data
+{
+    [super init];
+    proc= (void *) prc;
+    user_data = data;
+    return self;
+}
+
+/* WebFrameLoadDelegate */
+
+- (void)webView:(WebView *)sender didFailProvisionalLoadWithError:(NSError *)error forFrame:(WebFrame *)frame
+{
+	proc((int)sender, user_data, 1, (int)error, (int)frame, 0, 0);
+}
+
+- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
+{
+	proc((int)sender, user_data, 2, (int)frame, 0, 0, 0);
+}
+
+- (void)webView:(WebView *)sender didReceiveTitle:(NSString *)title forFrame:(WebFrame *)frame
+{
+	proc((int)sender, user_data, 3, (int)title, (int)frame, 0, 0);
+}
+
+- (void)webView:(WebView *)sender didStartProvisionalLoadForFrame:(WebFrame *)frame
+{
+	proc((int)sender, user_data, 4, (int)frame, 0, 0, 0);
+}
+
+- (void)webView:(WebView *)sender didCommitLoadForFrame:(WebFrame *)frame
+{
+	proc((int)sender, user_data, 10, (int)frame, 0, 0, 0);
+}
+
+- (void)webView:(WebView *)sender didChangeLocationWithinPageForFrame:(WebFrame *)frame
+{
+	proc((int)sender, user_data, 31, (int)frame, 0, 0, 0);
+}
+
+- (void)webView:(WebView *)sender windowScriptObjectAvailable:(WebScriptObject *)windowScriptObject
+{
+	proc((int)sender, user_data, 33, (int)windowScriptObject, 0, 0, 0);
+}
+
+/* WebResourceLoadDelegate */
+
+- (void)webView:(WebView *)sender resource:(id)identifier didFinishLoadingFromDataSource:(WebDataSource *)dataSource
+{
+	proc((int)sender, user_data, 5, (int)identifier, (int)dataSource, 0, 0);
+}
+
+- (void)webView:(WebView *)sender resource:(id)identifier didFailLoadingWithError:(NSError *)error fromDataSource:(WebDataSource *)dataSource
+{
+	proc((int)sender, user_data, 6, (int)identifier, (int)error, (int)dataSource, 0);
+}
+
+- (id)webView:(WebView *)sender identifierForInitialRequest:(NSURLRequest *)request fromDataSource:(WebDataSource *)dataSource
+{
+    return (id) proc((int)sender, user_data, 7, (int)request, (int)dataSource, 0, 0);    
+}
+
+- (NSURLRequest *)webView:(WebView *)sender resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse fromDataSource:(WebDataSource *)dataSource
+{
+	return (NSURLRequest *) proc((int)sender, user_data, 8, (int)identifier, (int)request, (int)redirectResponse, (int)dataSource);
+}
+
+- (void)webView:(WebView *)sender resource:(id)identifier didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge fromDataSource:(WebDataSource *)dataSource
+{
+	proc((int)sender, user_data, 35, (int)identifier, (int)challenge, (int)dataSource, 0);
+}
+
+/* handleNotification */
+
+- (void)handleNotification:(NSNotification *)notification
+{
+	proc((int)[notification object], user_data, 9, (int)notification, 0, 0, 0);
+}
+
+/* UIDelegate */
+
+- (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request
+{
+	return (WebView *) proc((int)sender, user_data, 11, (int)request, 0, 0, 0);
+}
+
+- (void)webViewShow:(WebView *)sender
+{
+	proc((int)sender, user_data, 12, 0, 0, 0, 0);
+}
+
+- (void)webView:(WebView *)sender setFrame:(NSRect)frame
+{
+	proc((int)sender, user_data, 13, (int)&frame, 0, 0, 0);
+}
+
+- (void)webViewClose:(WebView *)sender
+{
+	proc((int)sender, user_data, 14, 0, 0, 0, 0);
+}
+
+- (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems
+{
+	return (NSArray *)proc((int)sender, user_data, 15, (int)element, (int)defaultMenuItems, 0, 0);
+}
+
+- (void)webView:(WebView *)sender setStatusBarVisible:(BOOL)visible
+{
+	proc((int)sender, user_data, 16, (int)visible, 0, 0, 0);
+}
+
+- (void)webView:(WebView *)sender setResizable:(BOOL)resizable
+{
+	proc((int)sender, user_data, 17, (int)resizable, 0, 0, 0);
+}
+
+- (void)webView:(WebView *)sender setToolbarsVisible:(BOOL)visible
+{
+	proc((int)sender, user_data, 18, (int)visible, 0, 0, 0);
+}
+
+- (void)webView:(WebView *)sender setStatusText:(NSString *)text
+{
+	proc((int)sender, user_data, 23, (int)text, 0, 0, 0);
+}
+
+- (void)webViewFocus:(WebView *)sender
+{
+	proc((int)sender, user_data, 24, 0, 0, 0, 0);
+}
+
+- (void)webViewUnfocus:(WebView *)sender
+{
+	proc((int)sender, user_data, 25, 0, 0, 0, 0);
+}
+
+- (void)webView:(WebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message
+{
+	proc((int)sender, user_data, 26, (int)message, 0, 0, 0);
+}
+
+- (BOOL)webView:(WebView *)sender runJavaScriptConfirmPanelWithMessage:(NSString *)message
+{
+	return (BOOL) proc((int)sender, user_data, 27, (int)message, 0, 0, 0);
+}
+
+- (void)webView:(WebView *)sender runOpenPanelForFileButtonWithResultListener:(id<WebOpenPanelResultListener>)resultListener
+{
+	proc((int)sender, user_data, 28, (int)resultListener, 0, 0, 0);
+}
+
+- (void)webView:(WebView *)sender mouseDidMoveOverElement:(NSDictionary *)elementInformation modifierFlags:(unsigned int)modifierFlags
+{
+	proc((int)sender, user_data, 30, (int)elementInformation, (int)modifierFlags, 0, 0);
+}
+
+/* WebPolicyDelegate */
+- (void)webView:(WebView *)sender decidePolicyForMIMEType:(NSString *)type request:(NSURLRequest *)request frame:(WebFrame*)frame decisionListener:(id<WebPolicyDecisionListener>)listener
+{
+	proc((int)sender, user_data, 19, (int)type, (int)request, (int)frame, (int)listener);
+}
+
+- (void)webView:(WebView *)sender decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id<WebPolicyDecisionListener>)listener
+{
+	proc((int)sender, user_data, 20, (int)actionInformation, (int)request, (int)frame, (int)listener);
+}
+
+
+- (void)webView:(WebView *)sender decidePolicyForNewWindowAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request newFrameName:(NSString *)frameName decisionListener:(id<WebPolicyDecisionListener>)listener
+{
+	proc((int)sender, user_data, 21, (int)actionInformation, (int)request, (int)frameName, (int)listener);
+}
+
+
+- (void)webView:(WebView *)sender unableToImplementPolicyWithError:(NSError *)error frame:(WebFrame *)frame
+{
+	proc((int)sender, user_data, 22, (int)error, (int)frame, 0, 0);
+}
+
+/* WebDownload */
+
+- (void)download:(NSURLDownload *)download decideDestinationWithSuggestedFilename:(NSString *)filename
+{
+	proc((int)download, user_data, 29, (int)download, (int)filename, 0, 0);
+}
+
+/* DOMEventListener */
+
+- (void)handleEvent:(DOMEvent *)evt
+{
+	proc((int)evt, user_data, 32, (int)evt, 0, 0, 0);
+}
+
+/* WebScripting */
+
++ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector
+{
+	return aSelector != @selector(callJava:index:arg:);
+}
+
++ (NSString *)webScriptNameForSelector:(SEL)aSelector
+{
+	if (aSelector == @selector(callJava:index:arg:)) {
+		return @"callJava";
+	}
+	return 0;
+}
+
+/* external */
+
+- (id)callJava:(NSObject *)arg index:(NSObject *)index arg:(NSObject *)arg0
+{
+	return (id)proc(0, user_data, 34, (int)arg, (int)index, (int)arg0, 0);
+}
+
+@end
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_custom.h b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_custom.h
new file mode 100755
index 0000000..d57df2d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_custom.h
@@ -0,0 +1,14 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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
+ *******************************************************************************/
+
+/* Libraries for dynamic loaded functions */
+#define HICocoaViewCreate_LIB "com.apple.Carbon"
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_stats.c b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_stats.c
new file mode 100644
index 0000000..71c8ec3
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_stats.c
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "cocoa_stats.h"
+
+#ifdef NATIVE_STATS
+
+int Cocoa_nativeFunctionCount = 35;
+int Cocoa_nativeFunctionCallCount[35];
+char * Cocoa_nativeFunctionNames[] = {
+	"HICocoaViewCreate",
+	"HIJavaViewCreateWithCocoaView",
+	"HIWebViewCreate",
+	"HIWebViewGetWebView",
+	"NSDeviceRGBColorSpace",
+	"NSSearchPathForDirectoriesInDomains",
+	"WebInitForCarbon",
+	"class_1getClassMethod",
+	"memcpy",
+	"memmove",
+	"objc_1getClass",
+	"objc_1getMetaClass",
+	"objc_1msgSend__II",
+	"objc_1msgSend__IID",
+	"objc_1msgSend__IIF",
+	"objc_1msgSend__IIFF",
+	"objc_1msgSend__III",
+	"objc_1msgSend__IIII",
+	"objc_1msgSend__IIIII",
+	"objc_1msgSend__IIIIII",
+	"objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2",
+	"objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSRect_2I",
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2",
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2I",
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2",
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2",
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2I",
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2II",
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSSize_2",
+	"objc_1msgSend__II_3C",
+	"objc_1msgSend__II_3IIIIIIIIIII",
+	"objc_1msgSend_1fpret",
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2II",
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I",
+	"sel_1registerName",
+};
+
+#define STATS_NATIVE(func) Java_org_eclipse_swt_tools_internal_NativeStats_##func
+
+JNIEXPORT jint JNICALL STATS_NATIVE(Cocoa_1GetFunctionCount)
+	(JNIEnv *env, jclass that)
+{
+	return Cocoa_nativeFunctionCount;
+}
+
+JNIEXPORT jstring JNICALL STATS_NATIVE(Cocoa_1GetFunctionName)
+	(JNIEnv *env, jclass that, jint index)
+{
+	return (*env)->NewStringUTF(env, Cocoa_nativeFunctionNames[index]);
+}
+
+JNIEXPORT jint JNICALL STATS_NATIVE(Cocoa_1GetFunctionCallCount)
+	(JNIEnv *env, jclass that, jint index)
+{
+	return Cocoa_nativeFunctionCallCount[index];
+}
+
+#endif
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_stats.h b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_stats.h
new file mode 100644
index 0000000..18345a3
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_stats.h
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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
+ *******************************************************************************/
+
+#ifdef NATIVE_STATS
+extern int Cocoa_nativeFunctionCount;
+extern int Cocoa_nativeFunctionCallCount[];
+extern char* Cocoa_nativeFunctionNames[];
+#define Cocoa_NATIVE_ENTER(env, that, func) Cocoa_nativeFunctionCallCount[func]++;
+#define Cocoa_NATIVE_EXIT(env, that, func) 
+#else
+#ifndef Cocoa_NATIVE_ENTER
+#define Cocoa_NATIVE_ENTER(env, that, func) 
+#endif
+#ifndef Cocoa_NATIVE_EXIT
+#define Cocoa_NATIVE_EXIT(env, that, func) 
+#endif
+#endif
+
+typedef enum {
+	HICocoaViewCreate_FUNC,
+	HIJavaViewCreateWithCocoaView_FUNC,
+	HIWebViewCreate_FUNC,
+	HIWebViewGetWebView_FUNC,
+	NSDeviceRGBColorSpace_FUNC,
+	NSSearchPathForDirectoriesInDomains_FUNC,
+	WebInitForCarbon_FUNC,
+	class_1getClassMethod_FUNC,
+	memcpy_FUNC,
+	memmove_FUNC,
+	objc_1getClass_FUNC,
+	objc_1getMetaClass_FUNC,
+	objc_1msgSend__II_FUNC,
+	objc_1msgSend__IID_FUNC,
+	objc_1msgSend__IIF_FUNC,
+	objc_1msgSend__IIFF_FUNC,
+	objc_1msgSend__III_FUNC,
+	objc_1msgSend__IIII_FUNC,
+	objc_1msgSend__IIIII_FUNC,
+	objc_1msgSend__IIIIII_FUNC,
+	objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
+	objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC,
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2I_FUNC,
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC,
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC,
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2II_FUNC,
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSSize_2_FUNC,
+	objc_1msgSend__II_3C_FUNC,
+	objc_1msgSend__II_3IIIIIIIIIII_FUNC,
+	objc_1msgSend_1fpret_FUNC,
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2II_FUNC,
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC,
+	sel_1registerName_FUNC,
+} Cocoa_FUNCS;
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_structs.c b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_structs.c
new file mode 100644
index 0000000..cf1e390
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_structs.c
@@ -0,0 +1,122 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "cocoa_structs.h"
+
+#ifndef NO_NSPoint
+typedef struct NSPoint_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID x, y;
+} NSPoint_FID_CACHE;
+
+NSPoint_FID_CACHE NSPointFc;
+
+void cacheNSPointFields(JNIEnv *env, jobject lpObject)
+{
+	if (NSPointFc.cached) return;
+	NSPointFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	NSPointFc.x = (*env)->GetFieldID(env, NSPointFc.clazz, "x", "F");
+	NSPointFc.y = (*env)->GetFieldID(env, NSPointFc.clazz, "y", "F");
+	NSPointFc.cached = 1;
+}
+
+NSPoint *getNSPointFields(JNIEnv *env, jobject lpObject, NSPoint *lpStruct)
+{
+	if (!NSPointFc.cached) cacheNSPointFields(env, lpObject);
+	lpStruct->x = (*env)->GetFloatField(env, lpObject, NSPointFc.x);
+	lpStruct->y = (*env)->GetFloatField(env, lpObject, NSPointFc.y);
+	return lpStruct;
+}
+
+void setNSPointFields(JNIEnv *env, jobject lpObject, NSPoint *lpStruct)
+{
+	if (!NSPointFc.cached) cacheNSPointFields(env, lpObject);
+	(*env)->SetFloatField(env, lpObject, NSPointFc.x, (jfloat)lpStruct->x);
+	(*env)->SetFloatField(env, lpObject, NSPointFc.y, (jfloat)lpStruct->y);
+}
+#endif
+
+#ifndef NO_NSRect
+typedef struct NSRect_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID x, y, width, height;
+} NSRect_FID_CACHE;
+
+NSRect_FID_CACHE NSRectFc;
+
+void cacheNSRectFields(JNIEnv *env, jobject lpObject)
+{
+	if (NSRectFc.cached) return;
+	NSRectFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	NSRectFc.x = (*env)->GetFieldID(env, NSRectFc.clazz, "x", "F");
+	NSRectFc.y = (*env)->GetFieldID(env, NSRectFc.clazz, "y", "F");
+	NSRectFc.width = (*env)->GetFieldID(env, NSRectFc.clazz, "width", "F");
+	NSRectFc.height = (*env)->GetFieldID(env, NSRectFc.clazz, "height", "F");
+	NSRectFc.cached = 1;
+}
+
+NSRect *getNSRectFields(JNIEnv *env, jobject lpObject, NSRect *lpStruct)
+{
+	if (!NSRectFc.cached) cacheNSRectFields(env, lpObject);
+	lpStruct->origin.x = (*env)->GetFloatField(env, lpObject, NSRectFc.x);
+	lpStruct->origin.y = (*env)->GetFloatField(env, lpObject, NSRectFc.y);
+	lpStruct->size.width = (*env)->GetFloatField(env, lpObject, NSRectFc.width);
+	lpStruct->size.height = (*env)->GetFloatField(env, lpObject, NSRectFc.height);
+	return lpStruct;
+}
+
+void setNSRectFields(JNIEnv *env, jobject lpObject, NSRect *lpStruct)
+{
+	if (!NSRectFc.cached) cacheNSRectFields(env, lpObject);
+	(*env)->SetFloatField(env, lpObject, NSRectFc.x, (jfloat)lpStruct->origin.x);
+	(*env)->SetFloatField(env, lpObject, NSRectFc.y, (jfloat)lpStruct->origin.y);
+	(*env)->SetFloatField(env, lpObject, NSRectFc.width, (jfloat)lpStruct->size.width);
+	(*env)->SetFloatField(env, lpObject, NSRectFc.height, (jfloat)lpStruct->size.height);
+}
+#endif
+
+#ifndef NO_NSSize
+typedef struct NSSize_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID width, height;
+} NSSize_FID_CACHE;
+
+NSSize_FID_CACHE NSSizeFc;
+
+void cacheNSSizeFields(JNIEnv *env, jobject lpObject)
+{
+	if (NSSizeFc.cached) return;
+	NSSizeFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	NSSizeFc.width = (*env)->GetFieldID(env, NSSizeFc.clazz, "width", "F");
+	NSSizeFc.height = (*env)->GetFieldID(env, NSSizeFc.clazz, "height", "F");
+	NSSizeFc.cached = 1;
+}
+
+NSSize *getNSSizeFields(JNIEnv *env, jobject lpObject, NSSize *lpStruct)
+{
+	if (!NSSizeFc.cached) cacheNSSizeFields(env, lpObject);
+	lpStruct->width = (*env)->GetFloatField(env, lpObject, NSSizeFc.width);
+	lpStruct->height = (*env)->GetFloatField(env, lpObject, NSSizeFc.height);
+	return lpStruct;
+}
+
+void setNSSizeFields(JNIEnv *env, jobject lpObject, NSSize *lpStruct)
+{
+	if (!NSSizeFc.cached) cacheNSSizeFields(env, lpObject);
+	(*env)->SetFloatField(env, lpObject, NSSizeFc.width, (jfloat)lpStruct->width);
+	(*env)->SetFloatField(env, lpObject, NSSizeFc.height, (jfloat)lpStruct->height);
+}
+#endif
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_structs.h b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_structs.h
new file mode 100644
index 0000000..021b001
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/cocoa_structs.h
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#include "cocoa.h"
+
+#ifndef NO_NSPoint
+void cacheNSPointFields(JNIEnv *env, jobject lpObject);
+NSPoint *getNSPointFields(JNIEnv *env, jobject lpObject, NSPoint *lpStruct);
+void setNSPointFields(JNIEnv *env, jobject lpObject, NSPoint *lpStruct);
+#define NSPoint_sizeof() sizeof(NSPoint)
+#else
+#define cacheNSPointFields(a,b)
+#define getNSPointFields(a,b,c) NULL
+#define setNSPointFields(a,b,c)
+#define NSPoint_sizeof() 0
+#endif
+
+#ifndef NO_NSRect
+void cacheNSRectFields(JNIEnv *env, jobject lpObject);
+NSRect *getNSRectFields(JNIEnv *env, jobject lpObject, NSRect *lpStruct);
+void setNSRectFields(JNIEnv *env, jobject lpObject, NSRect *lpStruct);
+#define NSRect_sizeof() sizeof(NSRect)
+#else
+#define cacheNSRectFields(a,b)
+#define getNSRectFields(a,b,c) NULL
+#define setNSRectFields(a,b,c)
+#define NSRect_sizeof() 0
+#endif
+
+#ifndef NO_NSSize
+void cacheNSSizeFields(JNIEnv *env, jobject lpObject);
+NSSize *getNSSizeFields(JNIEnv *env, jobject lpObject, NSSize *lpStruct);
+void setNSSizeFields(JNIEnv *env, jobject lpObject, NSSize *lpStruct);
+#define NSSize_sizeof() sizeof(NSSize)
+#else
+#define cacheNSSizeFields(a,b)
+#define getNSSizeFields(a,b,c) NULL
+#define setNSSizeFields(a,b,c)
+#define NSSize_sizeof() 0
+#endif
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/Lock.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/Lock.java
new file mode 100644
index 0000000..7712dd0
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/Lock.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * 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.internal;
+
+/**
+ * Instances of this represent a recursive monitor.  Note that this
+ * is an empty implementation which does not actually perform locking.
+ */
+public class Lock {
+
+/**
+ * Locks the monitor and returns the lock count. If
+ * the lock is owned by another thread, wait until
+ * the lock is released.
+ * 
+ * @return the lock count
+ */
+public int lock() {
+	return 0;
+}
+
+/**
+ * Unlocks the monitor. If the current thread is not
+ * the monitor owner, do nothing.
+ */
+public void unlock() {
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/ATSFontMetrics.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/ATSFontMetrics.java
new file mode 100644
index 0000000..3bb857a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/ATSFontMetrics.java
@@ -0,0 +1,33 @@
+/**********************************************************************
+ * Copyright (c) 2003, 2006 IBM Corp.
+ * Portions Copyright (c) 1983-2002, Apple Computer, Inc.
+ *
+ * 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.internal.carbon;
+
+
+public class ATSFontMetrics {
+	public int version;
+	public float ascent;
+	public float descent;
+	public float leading;
+	public float avgAdvanceWidth;
+	public float maxAdvanceWidth;
+	public float minLeftSideBearing;
+	public float minRightSideBearing;
+	public float stemWidth;
+	public float stemHeight;
+	public float capHeight;
+	public float xHeight;
+	public float italicAngle;
+	public float underlinePosition;
+	public float underlineThickness;
+	public static final int sizeof = 60;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/CFRunLoopSourceContext.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/CFRunLoopSourceContext.java
new file mode 100644
index 0000000..39bc8fd
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/CFRunLoopSourceContext.java
@@ -0,0 +1,38 @@
+/**********************************************************************
+ * Copyright (c) 2003, 2008 IBM Corp.
+ * Portions Copyright (c) 1983-2002, Apple Computer, Inc.
+ *
+ * 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.internal.carbon;
+
+
+public class CFRunLoopSourceContext {
+	/** @field cast=(CFIndex) */
+	public int version;
+	/** @field cast=(void *) */
+	public int info;
+	/** @field cast=(void *) */
+	public int retain;
+	/** @field cast=(void *) */
+	public int release;
+	/** @field cast=(void *) */
+	public int copyDescription;
+	/** @field cast=(void *) */
+	public int equal;
+	/** @field cast=(void *) */
+	public int hash;
+	/** @field cast=(void *) */
+	public int schedule;
+	/** @field cast=(void *) */
+	public int cancel;
+	/** @field cast=(void *) */
+	public int perform;
+	public static final int sizeof = 40;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/CGSize.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/CGSize.java
new file mode 100644
index 0000000..512df38
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/CGSize.java
@@ -0,0 +1,20 @@
+/**********************************************************************
+ * Copyright (c) 2003, 2008 IBM Corp.
+ * Portions Copyright (c) 1983-2002, Apple Computer, Inc.
+ *
+ * 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.internal.carbon;
+
+
+public class CGSize {
+	public float width;
+	public float height;
+	public static final int sizeof = 8;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/DataBrowserAccessibilityItemInfo.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/DataBrowserAccessibilityItemInfo.java
new file mode 100644
index 0000000..f1e248e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/DataBrowserAccessibilityItemInfo.java
@@ -0,0 +1,29 @@
+/**********************************************************************
+ * Copyright (c) 2003, 2008 IBM Corp.
+ * Portions Copyright (c) 1983-2002, Apple Computer, Inc.
+ *
+ * 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.internal.carbon;
+
+ 
+public class DataBrowserAccessibilityItemInfo {
+	/** @field cast=(UInt32) */
+	public int version;
+	/** @field accessor=u.v0.container,cast=(DataBrowserItemID) */
+	public int v0_container;
+	/** @field accessor=u.v0.item,cast=(DataBrowserItemID) */
+	public int v0_item;
+	/** @field accessor=u.v0.columnProperty,cast=(DataBrowserPropertyID) */
+	public int v0_columnProperty;
+	/** @field accessor=u.v0.propertyPart,cast=(DataBrowserPropertyPart) */
+	public int v0_propertyPart;
+	
+	public static final int sizeof = 20;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HIAxisPosition.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HIAxisPosition.java
new file mode 100644
index 0000000..b8823b4
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HIAxisPosition.java
@@ -0,0 +1,22 @@
+/**********************************************************************
+ * Copyright (c) 2003, 2008 IBM Corp.
+ * Portions Copyright (c) 1983-2002, Apple Computer, Inc.
+ *
+ * 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.internal.carbon;
+
+ 
+public class HIAxisPosition {
+	/** @field cast=(HIViewRef) */
+	public int toView;
+	public short kind;
+	public float offset;
+	public static final int sizeof = 10;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HIAxisScale.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HIAxisScale.java
new file mode 100644
index 0000000..ba8a48a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HIAxisScale.java
@@ -0,0 +1,22 @@
+/**********************************************************************
+ * Copyright (c) 2003, 2008 IBM Corp.
+ * Portions Copyright (c) 1983-2002, Apple Computer, Inc.
+ *
+ * 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.internal.carbon;
+
+ 
+public class HIAxisScale {
+	/** @field cast=(HIViewRef) */
+	public int toView;
+	public short kind;
+	public float ratio;
+	public static final int sizeof = 10;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HIBinding.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HIBinding.java
new file mode 100644
index 0000000..176a219
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HIBinding.java
@@ -0,0 +1,22 @@
+/**********************************************************************
+ * Copyright (c) 2003, 2007 IBM Corp.
+ * Portions Copyright (c) 1983-2002, Apple Computer, Inc.
+ *
+ * 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.internal.carbon;
+
+ 
+public class HIBinding {
+	public HISideBinding top = new HISideBinding();
+	public HISideBinding left = new HISideBinding();
+	public HISideBinding bottom = new HISideBinding();
+	public HISideBinding right = new HISideBinding();
+	public static final int sizeof = 40;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HILayoutInfo.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HILayoutInfo.java
new file mode 100644
index 0000000..8e516e3
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HILayoutInfo.java
@@ -0,0 +1,22 @@
+/**********************************************************************
+ * Copyright (c) 2003, 2007 IBM Corp.
+ * Portions Copyright (c) 1983-2002, Apple Computer, Inc.
+ *
+ * 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.internal.carbon;
+
+ 
+public class HILayoutInfo {
+	public int version;
+	public HIBinding binding = new HIBinding();
+	public HIScaling scale = new HIScaling();
+	public HIPositioning position = new HIPositioning();	
+	public static final int sizeof = 84;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HIPositioning.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HIPositioning.java
new file mode 100644
index 0000000..4940ed4
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HIPositioning.java
@@ -0,0 +1,20 @@
+/**********************************************************************
+ * Copyright (c) 2003, 2007 IBM Corp.
+ * Portions Copyright (c) 1983-2002, Apple Computer, Inc.
+ *
+ * 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.internal.carbon;
+
+ 
+public class HIPositioning {
+	public HIAxisPosition x = new HIAxisPosition();
+	public HIAxisPosition y = new HIAxisPosition();
+	public static final int sizeof = 20;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HIScaling.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HIScaling.java
new file mode 100644
index 0000000..f2f50b9
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HIScaling.java
@@ -0,0 +1,20 @@
+/**********************************************************************
+ * Copyright (c) 2003, 2007 IBM Corp.
+ * Portions Copyright (c) 1983-2002, Apple Computer, Inc.
+ *
+ * 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.internal.carbon;
+
+ 
+public class HIScaling {
+	public HIAxisScale x = new HIAxisScale();
+	public HIAxisScale y = new HIAxisScale();
+	public static final int sizeof = 20;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HISideBinding.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HISideBinding.java
new file mode 100644
index 0000000..458a864
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/HISideBinding.java
@@ -0,0 +1,22 @@
+/**********************************************************************
+ * Copyright (c) 2003, 2008 IBM Corp.
+ * Portions Copyright (c) 1983-2002, Apple Computer, Inc.
+ *
+ * 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.internal.carbon;
+
+ 
+public class HISideBinding {
+	/** @field cast=(HIViewRef) */
+	public int toView;
+	public short kind;
+	public float offset;
+	public static final int sizeof = 10;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/LSApplicationParameters.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/LSApplicationParameters.java
new file mode 100644
index 0000000..e70e368
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/LSApplicationParameters.java
@@ -0,0 +1,30 @@
+/**********************************************************************
+ * Copyright (c) 2003, 2008 IBM Corp.
+ * Portions Copyright (c) 1983-2002, Apple Computer, Inc.
+ *
+ * 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.internal.carbon;
+
+ 
+public class LSApplicationParameters {
+	public int version;
+	public int flags;
+	/** @field cast=(const FSRef *) */
+	public int application;
+	/** @field cast=(void *) */
+	public int asyncLaunchRefCon;
+	/** @field cast=(CFDictionaryRef) */
+	public int environment;
+	/** @field cast=(CFArrayRef) */
+	public int argv;
+	/** @field cast=(AppleEvent *) */
+	public int initialEvent;
+	public static final int sizeof = 28;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/LongDateRec.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/LongDateRec.java
new file mode 100644
index 0000000..88d2030
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/LongDateRec.java
@@ -0,0 +1,46 @@
+/**********************************************************************
+ * Copyright (c) 2003, 2008 IBM Corp.
+ * Portions Copyright (c) 1983-2002, Apple Computer, Inc.
+ *
+ * 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.internal.carbon;
+
+
+public class LongDateRec {
+	/** @field accessor=ld.era */
+	public short era;
+	/** @field accessor=ld.year */
+	public short year;
+	/** @field accessor=ld.month */
+	public short month;
+	/** @field accessor=ld.day */
+	public short day;
+	/** @field accessor=ld.hour */
+	public short hour;
+	/** @field accessor=ld.minute */
+	public short minute;
+	/** @field accessor=ld.second */
+	public short second;
+	/** @field accessor=ld.dayOfWeek */
+	public short dayOfWeek;
+	/** @field accessor=ld.dayOfYear */
+	public short dayOfYear;
+	/** @field accessor=ld.weekOfYear */
+	public short weekOfYear;
+	/** @field accessor=ld.pm */
+	public short pm;
+	/** @field accessor=ld.res1 */
+	public short res1;
+	/** @field accessor=ld.res2 */
+	public short res2;
+	/** @field accessor=ld.res3 */
+	public short res3;
+	public static final int sizeof = 28;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/NavCBRec.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/NavCBRec.java
new file mode 100644
index 0000000..975c226
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/NavCBRec.java
@@ -0,0 +1,29 @@
+/**********************************************************************
+ * Copyright (c) 2003, 2008 IBM Corp.
+ * Portions Copyright (c) 1983-2002, Apple Computer, Inc.
+ *
+ * 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.internal.carbon;
+
+ 
+public class NavCBRec {
+	public short version;
+	/** @field cast=(NavDialogRef) */
+	public int context;
+	/** @field cast=(WindowRef) */
+	public int window;
+	public Rect customRect = new Rect ();
+	public Rect previewRect = new Rect ();
+	public NavEventData eventData = new NavEventData ();
+	/** @field cast=(NavUserAction) */
+	public int userAction;
+	public byte[] reserved = new byte[218];
+	public static final int sizeof = 254;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/NavEventData.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/NavEventData.java
new file mode 100644
index 0000000..5ddf0b5
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/NavEventData.java
@@ -0,0 +1,20 @@
+/**********************************************************************
+ * Copyright (c) 2003, 2008 IBM Corp.
+ * Portions Copyright (c) 1983-2002, Apple Computer, Inc.
+ *
+ * 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.internal.carbon;
+
+ 
+public class NavEventData {
+	public NavEventDataInfo eventDataParms = new NavEventDataInfo();
+	public short itemHit;
+	public static final int sizeof = 6;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/NavEventDataInfo.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/NavEventDataInfo.java
new file mode 100644
index 0000000..2196f31
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/NavEventDataInfo.java
@@ -0,0 +1,22 @@
+/**********************************************************************
+ * Copyright (c) 2003, 2008 IBM Corp.
+ * Portions Copyright (c) 1983-2002, Apple Computer, Inc.
+ *
+ * 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.internal.carbon;
+
+ 
+public class NavEventDataInfo {
+	/** @field cast=(EventRecord *) */
+	public int event;
+	/** @field cast=(void *) */
+	public int param;
+	public static final int sizeof = 4;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/NavFileOrFolderInfo.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/NavFileOrFolderInfo.java
new file mode 100644
index 0000000..6a6c222
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/NavFileOrFolderInfo.java
@@ -0,0 +1,26 @@
+/**********************************************************************
+ * Copyright (c) 2003, 2008 IBM Corp.
+ * Portions Copyright (c) 1983-2002, Apple Computer, Inc.
+ *
+ * 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.internal.carbon;
+
+ 
+public class NavFileOrFolderInfo {
+	public short version;
+	public boolean isFolder;
+	public boolean  visible;
+	public int creationDate;
+	public int modificationDate;
+	//TODO add union and struct
+	//public struct fileInfo;
+	//public struct folderInfo;
+	public static final int sizeof = 268;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/NavMenuItemSpec.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/NavMenuItemSpec.java
new file mode 100644
index 0000000..db21ec1
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/NavMenuItemSpec.java
@@ -0,0 +1,23 @@
+/**********************************************************************
+ * Copyright (c) 2003, 2008 IBM Corp.
+ * Portions Copyright (c) 1983-2002, Apple Computer, Inc.
+ *
+ * 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.internal.carbon;
+
+ 
+public class NavMenuItemSpec {
+	public short version;
+	public int menuCreator;
+	public int menuType;
+	public byte[] menuItemName = new byte[256];
+	public byte[] reserved = new byte[245];	
+	public static final int sizeof = 512;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/TextRange.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/TextRange.java
new file mode 100644
index 0000000..18a7404
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/TextRange.java
@@ -0,0 +1,21 @@
+/**********************************************************************
+ * Copyright (c) 2003-2007 IBM Corp.
+ * Portions Copyright (c) 1983-2002, Apple Computer, Inc.
+ *
+ * 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.internal.carbon;
+
+
+public class TextRange {
+	public int fStart;
+	public int fEnd;
+	public short fHiliteStyle;
+	public static final int sizeof = 10;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/cocoa/Cocoa.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/cocoa/Cocoa.java
new file mode 100755
index 0000000..78c3d07
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/cocoa/Cocoa.java
@@ -0,0 +1,422 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2009 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.internal.cocoa;
+
+import org.eclipse.swt.internal.*;
+
+public class Cocoa extends Platform {
+		
+static {
+	Library.loadLibrary("swt-cocoa"); //$NON-NLS-1$
+	WebInitForCarbon();
+}
+	
+/* Objective-C class ids */
+public static final int C_NSHTTPCookie = Cocoa.objc_getClass("NSHTTPCookie"); //$NON-NLS-1$
+public static final int C_NSHTTPCookieStorage = Cocoa.objc_getClass("NSHTTPCookieStorage"); //$NON-NLS-1$
+public static final int C_NSNotificationCenter = Cocoa.objc_getClass("NSNotificationCenter"); //$NON-NLS-1$
+public static final int C_NSNumber = Cocoa.objc_getClass("NSNumber"); //$NON-NLS-1$
+public static final int C_NSURL = Cocoa.objc_getClass("NSURL"); //$NON-NLS-1$
+public static final int C_NSURLRequest = Cocoa.objc_getClass("NSURLRequest"); //$NON-NLS-1$
+public static final int C_NSURLCredential = Cocoa.objc_getClass("NSURLCredential"); //$NON-NLS-1$
+public static final int C_WebKitDelegate = Cocoa.objc_getClass("WebKitDelegate"); //$NON-NLS-1$
+public static final int C_WebDownload = Cocoa.objc_getClass("WebDownload"); //$NON-NLS-1$
+public static final int C_WebView = Cocoa.objc_getClass("WebView"); //$NON-NLS-1$
+public static final int C_NSStatusBar = Cocoa.objc_getClass("NSStatusBar"); //$NON-NLS-1$
+public static final int C_NSImage = Cocoa.objc_getClass("NSImage"); //$NON-NLS-1$
+public static final int C_NSGraphicsContext = Cocoa.objc_getClass("NSGraphicsContext"); //$NON-NLS-1$
+public static final int C_NSStatusItemImageView = Cocoa.objc_getClass("NSStatusItemImageView"); //$NON-NLS-1$
+public static final int C_NSApplication = Cocoa.objc_getClass("NSApplication"); //$NON-NLS-1$
+public static final int C_NSCursor = Cocoa.objc_getClass("NSCursor"); //$NON-NLS-1$
+public static final int C_NSWindow = Cocoa.objc_getClass("NSWindow"); //$NON-NLS-1$
+public static final int C_NSBitmapImageRep = Cocoa.objc_getClass("NSBitmapImageRep"); //$NON-NLS-1$
+public static final int C_NSImageView = Cocoa.objc_getClass("NSImageView"); //$NON-NLS-1$
+public static final int C_WebPreferences = Cocoa.objc_getClass("WebPreferences"); //$NON-NLS-1$
+public static final int C_NSBezierPath = Cocoa.objc_getClass("NSBezierPath"); //$NON-NLS-1$
+public static final int C_NSButton = Cocoa.objc_getClass("NSButton"); //$NON-NLS-1$
+public static final int C_NSObject = Cocoa.objc_getClass("NSObject"); //$NON-NLS-1$
+public static final int C_NSString = Cocoa.objc_getClass("NSString"); //$NON-NLS-1$
+public static final int C_NSMutableArray = Cocoa.objc_getClass("NSMutableArray"); //$NON-NLS-1$
+public static final int C_NSMutableDictionary = Cocoa.objc_getClass("NSMutableDictionary"); //$NON-NLS-1$
+public static final int C_WebPanelAuthenticationHandler = Cocoa.objc_getClass("WebPanelAuthenticationHandler"); //$NON-NLS-1$
+public static final int C_WebScriptObject = Cocoa.objc_getClass("WebScriptObject"); //$NON-NLS-1$
+public static final int C_WebUndefined = Cocoa.objc_getClass("WebUndefined"); //$NON-NLS-1$
+
+/* Objective-C method selectors */
+public static final int S_absoluteString = Cocoa.sel_registerName("absoluteString"); //$NON-NLS-1$
+public static final int S_addObserver_selector_name_object = Cocoa.sel_registerName("addObserver:selector:name:object:"); //$NON-NLS-1$
+public static final int S_addObject = Cocoa.sel_registerName("addObject:"); //$NON-NLS-1$
+public static final int S_alloc = Cocoa.sel_registerName("alloc"); //$NON-NLS-1$
+public static final int S_arrayWithCapacity = Cocoa.sel_registerName("arrayWithCapacity:"); //$NON-NLS-1$
+public static final int S_autorelease = Cocoa.sel_registerName("autorelease"); //$NON-NLS-1$
+public static final int S_boolValue = Cocoa.sel_registerName("boolValue"); //$NON-NLS-1$
+public static final int S_cancel = Cocoa.sel_registerName("cancel"); //$NON-NLS-1$
+public static final int S_cancelAuthenticationChallenge = Cocoa.sel_registerName("cancelAuthenticationChallenge:"); //$NON-NLS-1$
+public static final int S_canGoBack = Cocoa.sel_registerName("canGoBack"); //$NON-NLS-1$
+public static final int S_canGoForward = Cocoa.sel_registerName("canGoForward"); //$NON-NLS-1$
+public static final int S_canShowMIMEType = Cocoa.sel_registerName("canShowMIMEType:"); //$NON-NLS-1$
+public static final int S_chooseFilename = Cocoa.sel_registerName("chooseFilename:"); //$NON-NLS-1$
+public static final int S_compare = Cocoa.sel_registerName("compare:"); //$NON-NLS-1$
+public static final int S_cookies = Cocoa.sel_registerName("cookies"); //$NON-NLS-1$
+public static final int S_cookiesWithResponseHeaderFields = Cocoa.sel_registerName("cookiesWithResponseHeaderFields:forURL:"); //$NON-NLS-1$
+public static final int S_cookiesForURL = Cocoa.sel_registerName("cookiesForURL:"); //$NON-NLS-1$
+public static final int S_copy = Cocoa.sel_registerName("copy:"); //$NON-NLS-1$
+public static final int S_count = Cocoa.sel_registerName("count"); //$NON-NLS-1$
+public static final int S_credentialWithUser = Cocoa.sel_registerName("credentialWithUser:password:persistence:"); //$NON-NLS-1$
+public static final int S_cut = Cocoa.sel_registerName("cut:"); //$NON-NLS-1$
+public static final int S_dataSource = Cocoa.sel_registerName("dataSource"); //$NON-NLS-1$
+public static final int S_defaultCenter = Cocoa.sel_registerName("defaultCenter"); //$NON-NLS-1$
+public static final int S_deleteCookie = Cocoa.sel_registerName("deleteCookie:"); //$NON-NLS-1$
+public static final int S_dictionaryWithCapacity = Cocoa.sel_registerName("dictionaryWithCapacity:"); //$NON-NLS-1$
+public static final int S_documentSource = Cocoa.sel_registerName("documentSource"); //$NON-NLS-1$
+public static final int S_doubleValue = Cocoa.sel_registerName("doubleValue"); //$NON-NLS-1$
+public static final int S_download = Cocoa.sel_registerName("download"); //$NON-NLS-1$
+public static final int S_goBack = Cocoa.sel_registerName("goBack:"); //$NON-NLS-1$
+public static final int S_goForward = Cocoa.sel_registerName("goForward:"); //$NON-NLS-1$
+public static final int S_handleNotification = Cocoa.sel_registerName("handleNotification:"); //$NON-NLS-1$
+public static final int S_hasPassword = Cocoa.sel_registerName("hasPassword"); //$NON-NLS-1$
+public static final int S_host = Cocoa.sel_registerName("host"); //$NON-NLS-1$
+public static final int S_ignore = Cocoa.sel_registerName("ignore"); //$NON-NLS-1$
+public static final int S_initialRequest = Cocoa.sel_registerName("initialRequest"); //$NON-NLS-1$
+public static final int S_initWithFrame_frameName_groupName = Cocoa.sel_registerName("initWithFrame:frameName:groupName:"); //$NON-NLS-1$
+public static final int S_initWithProc = Cocoa.sel_registerName("initWithProc:user_data:"); //$NON-NLS-1$
+public static final int S_intValue = Cocoa.sel_registerName("intValue"); //$NON-NLS-1$
+public static final int S_isFileURL = Cocoa.sel_registerName("isFileURL"); //$NON-NLS-1$
+public static final int S_isKindOfClass = Cocoa.sel_registerName("isKindOfClass:"); //$NON-NLS-1$
+public static final int S_isSessionOnly = Cocoa.sel_registerName("isSessionOnly"); //$NON-NLS-1$
+public static final int S_loadHTMLStringbaseURL = Cocoa.sel_registerName("loadHTMLString:baseURL:"); //$NON-NLS-1$
+public static final int S_loadRequest = Cocoa.sel_registerName("loadRequest:"); //$NON-NLS-1$
+public static final int S_length = Cocoa.sel_registerName("length"); //$NON-NLS-1$
+public static final int S_mainFrame = Cocoa.sel_registerName("mainFrame"); //$NON-NLS-1$
+public static final int S_mainMenu = Cocoa.sel_registerName("mainMenu"); //$NON-NLS-1$
+public static final int S_mutableCopy = Cocoa.sel_registerName("mutableCopy"); //$NON-NLS-1$
+public static final int S_name = Cocoa.sel_registerName("name"); //$NON-NLS-1$
+public static final int S_numberWithBool = Cocoa.sel_registerName("numberWithBool:"); //$NON-NLS-1$
+public static final int S_numberWithDouble = Cocoa.sel_registerName("numberWithDouble:"); //$NON-NLS-1$
+public static final int S_numberWithInt = Cocoa.sel_registerName("numberWithInt:"); //$NON-NLS-1$
+public static final int S_objectAtIndex = Cocoa.sel_registerName("objectAtIndex:"); //$NON-NLS-1$
+public static final int S_pageTitle = Cocoa.sel_registerName("pageTitle"); //$NON-NLS-1$
+public static final int S_password = Cocoa.sel_registerName("password"); //$NON-NLS-1$
+public static final int S_paste = Cocoa.sel_registerName("paste:"); //$NON-NLS-1$
+public static final int S_port = Cocoa.sel_registerName("port"); //$NON-NLS-1$
+public static final int S_previousFailureCount = Cocoa.sel_registerName("previousFailureCount"); //$NON-NLS-1$
+public static final int S_proposedCredential = Cocoa.sel_registerName("proposedCredential"); //$NON-NLS-1$
+public static final int S_protectionSpace = Cocoa.sel_registerName("protectionSpace"); //$NON-NLS-1$
+public static final int S_provisionalDataSource = Cocoa.sel_registerName("provisionalDataSource"); //$NON-NLS-1$
+public static final int S_realm = Cocoa.sel_registerName("realm"); //$NON-NLS-1$
+public static final int S_release = Cocoa.sel_registerName("release"); //$NON-NLS-1$
+public static final int S_reload = Cocoa.sel_registerName("reload:"); //$NON-NLS-1$
+public static final int S_retain = Cocoa.sel_registerName("retain"); //$NON-NLS-1$
+public static final int S_removeObserver_name_object = Cocoa.sel_registerName("removeObserver:name:object:"); //$NON-NLS-1$
+public static final int S_removeObserver = Cocoa.sel_registerName("removeObserver:"); //$NON-NLS-1$
+public static final int S_representation = Cocoa.sel_registerName("representation"); //$NON-NLS-1$
+public static final int S_requestWithURL = Cocoa.sel_registerName("requestWithURL:"); //$NON-NLS-1$
+public static final int S_request = Cocoa.sel_registerName("request"); //$NON-NLS-1$
+public static final int S_retainCount = Cocoa.sel_registerName("retainCount"); //$NON-NLS-1$
+public static final int S_sender = Cocoa.sel_registerName("sender"); //$NON-NLS-1$
+public static final int S_setApplicationNameForUserAgent = Cocoa.sel_registerName("setApplicationNameForUserAgent:"); //$NON-NLS-1$
+public static final int S_setCachePolicy = Cocoa.sel_registerName("setCachePolicy:"); //$NON-NLS-1$
+public static final int S_setCookie = Cocoa.sel_registerName("setCookie:"); //$NON-NLS-1$
+public static final int S_setDestinationAllowOverwrite = Cocoa.sel_registerName("setDestination:allowOverwrite:"); //$NON-NLS-1$
+public static final int S_setDownloadDelegate = Cocoa.sel_registerName("setDownloadDelegate:"); //$NON-NLS-1$
+public static final int S_setFrameLoadDelegate = Cocoa.sel_registerName("setFrameLoadDelegate:"); //$NON-NLS-1$
+public static final int S_setGroupName = Cocoa.sel_registerName("setGroupName:"); //$NON-NLS-1$
+public static final int S_setJavaEnabled = Cocoa.sel_registerName("setJavaEnabled:"); //$NON-NLS-1$
+public static final int S_setJavaScriptEnabled = Cocoa.sel_registerName("setJavaScriptEnabled:"); //$NON-NLS-1$
+public static final int S_setMainMenu = Cocoa.sel_registerName("setMainMenu:"); //$NON-NLS-1$
+public static final int S_setPolicyDelegate = Cocoa.sel_registerName("setPolicyDelegate:"); //$NON-NLS-1$
+public static final int S_setResourceLoadDelegate = Cocoa.sel_registerName("setResourceLoadDelegate:"); //$NON-NLS-1$
+public static final int S_setStatusText = Cocoa.sel_registerName("setStatusText:"); //$NON-NLS-1$
+public static final int S_setUIDelegate = Cocoa.sel_registerName("setUIDelegate:"); //$NON-NLS-1$
+public static final int S_sharedApplication = Cocoa.sel_registerName("sharedApplication"); //$NON-NLS-1$
+public static final int S_sharedHTTPCookieStorage = Cocoa.sel_registerName("sharedHTTPCookieStorage"); //$NON-NLS-1$
+public static final int S_sharedHandler = Cocoa.sel_registerName("sharedHandler"); //$NON-NLS-1$
+public static final int S_standardPreferences = Cocoa.sel_registerName("standardPreferences"); //$NON-NLS-1$
+public static final int S_startAuthentication = sel_registerName("startAuthentication:window:"); //$NON-NLS-1$
+public static final int S_stopLoading = Cocoa.sel_registerName("stopLoading:"); //$NON-NLS-1$
+public static final int S_stringByEvaluatingJavaScriptFromString = Cocoa.sel_registerName("stringByEvaluatingJavaScriptFromString:"); //$NON-NLS-1$
+public static final int S_takeStringURLFrom = Cocoa.sel_registerName("takeStringURLFrom:"); //$NON-NLS-1$
+public static final int S_undefined = Cocoa.sel_registerName("undefined"); //$NON-NLS-1$
+public static final int S_use = Cocoa.sel_registerName("use"); //$NON-NLS-1$
+public static final int S_user = Cocoa.sel_registerName("user"); //$NON-NLS-1$
+public static final int S_useCredential = Cocoa.sel_registerName("useCredential:forAuthenticationChallenge:"); //$NON-NLS-1$
+public static final int S_valueForKey = Cocoa.sel_registerName("valueForKey:"); //$NON-NLS-1$
+public static final int S_webFrame = Cocoa.sel_registerName("webFrame"); //$NON-NLS-1$
+public static final int S_URL = Cocoa.sel_registerName("URL"); //$NON-NLS-1$
+public static final int S_URLWithString = Cocoa.sel_registerName("URLWithString:"); //$NON-NLS-1$
+public static final int S_fileURLWithPath = Cocoa.sel_registerName("fileURLWithPath:"); //$NON-NLS-1$
+public static final int S_systemStatusBar = Cocoa.sel_registerName("systemStatusBar"); //$NON-NLS-1$
+public static final int S_statusItemWithLength = Cocoa.sel_registerName("statusItemWithLength:"); //$NON-NLS-1$
+public static final int S_setTitle = Cocoa.sel_registerName("setTitle:"); //$NON-NLS-1$
+public static final int S_setHighlightMode = Cocoa.sel_registerName("setHighlightMode:"); //$NON-NLS-1$
+public static final int S_setToolTip = Cocoa.sel_registerName("setToolTip:"); //$NON-NLS-1$
+public static final int S_setImage = Cocoa.sel_registerName("setImage:"); //$NON-NLS-1$
+public static final int S_removeStatusItem = Cocoa.sel_registerName("removeStatusItem:"); //$NON-NLS-1$
+public static final int S_initWithSize = Cocoa.sel_registerName("initWithSize:"); //$NON-NLS-1$
+public static final int S_initWithFrame = Cocoa.sel_registerName("initWithFrame:"); //$NON-NLS-1$
+public static final int S_initWithProc_frame_user_data = Cocoa.sel_registerName("initWithProc:frame:user_data:"); //$NON-NLS-1$
+public static final int S_lockFocus = Cocoa.sel_registerName("lockFocus"); //$NON-NLS-1$
+public static final int S_unlockFocus = Cocoa.sel_registerName("unlockFocus"); //$NON-NLS-1$
+public static final int S_currentContext = Cocoa.sel_registerName("currentContext"); //$NON-NLS-1$
+public static final int S_graphicsPort = Cocoa.sel_registerName("graphicsPort"); //$NON-NLS-1$
+public static final int S_setLength = Cocoa.sel_registerName("setLength:"); //$NON-NLS-1$
+public static final int S_view = Cocoa.sel_registerName("view"); //$NON-NLS-1$
+public static final int S_setView = Cocoa.sel_registerName("setView:"); //$NON-NLS-1$
+public static final int S_clickCount = Cocoa.sel_registerName("clickCount"); //$NON-NLS-1$
+public static final int S_drawStatusBarBackgroundInRect_withHighlight = Cocoa.sel_registerName("drawStatusBarBackgroundInRect:withHighlight:"); //$NON-NLS-1$
+public static final int S_drawRect = Cocoa.sel_registerName("drawRect:"); //$NON-NLS-1$
+public static final int S_setNeedsDisplay = Cocoa.sel_registerName("setNeedsDisplay:"); //$NON-NLS-1$
+public static final int S_initWithImage_hotSpot = Cocoa.sel_registerName("initWithImage:hotSpot:"); //$NON-NLS-1$
+public static final int S_set = Cocoa.sel_registerName("set"); //$NON-NLS-1$
+public static final int S_init = Cocoa.sel_registerName("init"); //$NON-NLS-1$
+public static final int S_frame = Cocoa.sel_registerName("frame"); //$NON-NLS-1$
+public static final int S_window = Cocoa.sel_registerName("window"); //$NON-NLS-1$
+public static final int S_makeKeyWindow = Cocoa.sel_registerName("makeKeyWindow"); //$NON-NLS-1$
+public static final int S_addRepresentation = Cocoa.sel_registerName("addRepresentation:"); //$NON-NLS-1$
+public static final int S_initWithBitmapDataPlanes = Cocoa.sel_registerName("initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bitmapFormat:bytesPerRow:bitsPerPixel:"); //$NON-NLS-1$
+public static final int S_bitmapData = Cocoa.sel_registerName("bitmapData"); //$NON-NLS-1$
+public static final int S_modifierFlags = Cocoa.sel_registerName("modifierFlags"); //$NON-NLS-1$
+public static final int S_bezierPath = Cocoa.sel_registerName("bezierPath"); //$NON-NLS-1$
+public static final int S_bezierPathByFlatteningPath = Cocoa.sel_registerName("bezierPathByFlatteningPath");
+public static final int S_moveToPoint = Cocoa.sel_registerName("moveToPoint:"); //$NON-NLS-1$
+public static final int S_lineToPoint = Cocoa.sel_registerName("lineToPoint:"); //$NON-NLS-1$
+public static final int S_curveToPoint = Cocoa.sel_registerName("curveToPoint:controlPoint1:controlPoint2:"); //$NON-NLS-1$
+public static final int S_closePath = Cocoa.sel_registerName("closePath"); //$NON-NLS-1$
+public static final int S_elementCount = Cocoa.sel_registerName("elementCount"); //$NON-NLS-1$
+public static final int S_elementAtIndex_associatedPoints = Cocoa.sel_registerName("elementAtIndex:associatedPoints:"); //$NON-NLS-1$
+public static final int S_setFlatness = Cocoa.sel_registerName("setFlatness:"); //$NON-NLS-1$
+public static final int S_setDefaultFlatness = Cocoa.sel_registerName("setDefaultFlatness:"); //$NON-NLS-1$
+public static final int S_convertRect_toView = Cocoa.sel_registerName("convertRect:toView:"); //$NON-N/LS-1$
+public static final int S_addEventListener = Cocoa.sel_registerName("addEventListener:::"); //$NON-NLS-1$
+public static final int S_altKey = Cocoa.sel_registerName("altKey"); //$NON-NLS-1$
+public static final int S_button = Cocoa.sel_registerName("button"); //$NON-NLS-1$
+public static final int S_charCode = Cocoa.sel_registerName("charCode"); //$NON-NLS-1$
+public static final int S_clientX = Cocoa.sel_registerName("clientX"); //$NON-NLS-1$
+public static final int S_clientY = Cocoa.sel_registerName("clientY"); //$NON-NLS-1$
+public static final int S_ctrlKey = Cocoa.sel_registerName("ctrlKey"); //$NON-NLS-1$
+public static final int S_detail = Cocoa.sel_registerName("detail"); //$NON-NLS-1$
+public static final int S_DOMDocument = Cocoa.sel_registerName("DOMDocument"); //$NON-NLS-1$
+public static final int S_keyCode = Cocoa.sel_registerName("keyCode"); //$NON-NLS-1$
+public static final int S_metaKey = Cocoa.sel_registerName("metaKey"); //$NON-NLS-1$
+public static final int S_preventDefault = Cocoa.sel_registerName("preventDefault"); //$NON-NLS-1$
+public static final int S_relatedTarget = Cocoa.sel_registerName("relatedTarget"); //$NON-NLS-1$;
+public static final int S_shiftKey = Cocoa.sel_registerName("shiftKey"); //$NON-NLS-1$
+public static final int S_type = Cocoa.sel_registerName("type"); //$NON-NLS-1$
+public static final int S_wheelDelta = Cocoa.sel_registerName("wheelDelta"); //$NON-NLS-1$
+public static final int S_setValue = Cocoa.sel_registerName("setValue:forKey:"); //$NON-NLS-1$
+public static final int S_webScriptValueAtIndex = Cocoa.sel_registerName("webScriptValueAtIndex:"); //$NON-NLS-1$
+public static final int S_getCharacters_ = Cocoa.sel_registerName("getCharacters:"); //$NON-NLS-1$
+public static final int S_objCType = Cocoa.sel_registerName("objCType"); //$NON-NLS-1$
+public static final int S_setPreferences = Cocoa.sel_registerName("setPreferences:"); //$NON-NLS-1$
+public static final int S_value = Cocoa.sel_registerName("value"); //$NON-NLS-1$
+
+public static final int NSAlphaFirstBitmapFormat = 1 << 0;
+public static final int NSAlphaNonpremultipliedBitmapFormat = 1 << 1;
+public static final int NSControlKeyMask = 1 << 18;
+public static final int NSDeviceIndependentModifierFlagsMask = 0xffff0000;
+
+public static final int NSMoveToBezierPathElement = 0;
+public static final int NSLineToBezierPathElement = 1;
+public static final int NSCurveToBezierPathElement = 2;
+public static final int NSClosePathBezierPathElement = 3;
+
+public static final int NSOrderedSame = 0;
+
+public static final int NSURLCredentialPersistenceForSession = 1;
+public static final int NSURLRequestReloadIgnoringLocalCacheData = 1;
+
+public static final int NSAllDomainsMask = 0xffff;
+public static final int NSDesktopDirectory = 12;
+public static final int NSDocumentDirectory = 9;
+public static final int NSDownloadsDirectory = 15;
+
+/* WebKit */
+/** @param outView cast=(HIViewRef *) */
+public static final native int HIWebViewCreate(int[] outView);
+/** @param inView cast=(HIViewRef) */
+public static final native int HIWebViewGetWebView(int inView);
+public static final native void WebInitForCarbon();
+
+/* Embed NSView in HIView */
+/** @method flags=no_gen */
+public static final native int HIJavaViewCreateWithCocoaView(int[] hiview, int nsview);
+/** @method flags=dynamic */
+public static final native int HICocoaViewCreate(int nsview, int options, int[] hiview);
+
+/* OBJ-C runtime primitives */
+/**
+ * @param method cast=(Method)
+ * @param aClass cast=(Class)
+ * @param aSelector cast=(SEL)
+ */
+public static final native int /*long*/ class_getClassMethod(int /*long*/ aClass, int /*long*/ aSelector);
+/** @param className cast=(const char *) */
+public static final native int objc_getClass(byte[] className);
+/** @param className cast=(const char *) */
+public static final native int objc_getMetaClass(byte[] className);
+/**
+ * @param object cast=(id)
+ * @param selector cast=(SEL)
+ */
+public static final native int objc_msgSend(int object, int selector);
+/**
+ * @param object cast=(id)
+ * @param selector cast=(SEL)
+ */
+public static final native int objc_msgSend(int object, int selector, int arg0);
+/**
+ * @method flags=cast
+ * @param object cast=(id)
+ * @param selector cast=(SEL)
+ */
+public static final native int objc_msgSend(int object, int selector, float arg0);
+/**
+ * @method flags=cast
+ * @param object cast=(id)
+ * @param selector cast=(SEL)
+ */
+public static final native int objc_msgSend(int object, int selector, double arg0);
+/** @method flags=cast */
+public static final native int objc_msgSend(int object, int selector, char[] arg0);
+/**
+ * @method flags=cast
+ * @param object cast=(id)
+ * @param selector cast=(SEL)
+ */
+public static final native int objc_msgSend(int object, int selector, float arg0, float arg1);
+/**
+ * @param object cast=(id)
+ * @param selector cast=(SEL)
+ * @param arg0 flags=struct
+ */
+public static final native int objc_msgSend(int object, int selector, NSSize arg0);
+/**
+ * @param object cast=(id)
+ * @param selector cast=(SEL)
+ * @param arg0 flags=struct
+ */
+public static final native int objc_msgSend(int object, int selector, NSRect arg0);
+/**
+ * @param object cast=(id)
+ * @param selector cast=(SEL)
+ * @param arg0 flags=struct
+ */
+public static final native int objc_msgSend(int object, int selector, NSRect arg0, int arg1, int arg2);
+/**
+ * @param object cast=(id)
+ * @param selector cast=(SEL)
+ * @param arg1 flags=struct
+ */
+public static final native int objc_msgSend(int object, int selector, int arg0, NSRect arg1, int arg2);
+/**
+ * @param object cast=(id)
+ * @param selector cast=(SEL)
+ * @param arg0 flags=struct
+ */
+public static final native int objc_msgSend(int object, int selector, NSRect arg0, int arg1);
+/**
+ * @param object cast=(id)
+ * @param selector cast=(SEL)
+ * @param arg0 flags=struct
+ */
+public static final native int objc_msgSend(int object, int selector, NSPoint arg0, int arg1);
+/**
+ * @param object cast=(id)
+ * @param selector cast=(SEL)
+ * @param arg1 flags=struct
+ */
+public static final native int objc_msgSend(int object, int selector, int arg0, NSPoint arg1);
+/**
+ * @param object cast=(id)
+ * @param selector cast=(SEL)
+ * @param arg0 flags=struct
+ */
+public static final native int objc_msgSend(int object, int selector, NSPoint arg0);
+/**
+ * @param object cast=(id)
+ * @param selector cast=(SEL)
+ * @param arg0 flags=struct
+ * @param arg1 flags=struct
+ * @param arg2 flags=struct
+ */
+public static final native int objc_msgSend(int object, int selector, NSPoint arg0, NSPoint arg1, NSPoint arg2);
+/**
+ * @param object cast=(id)
+ * @param selector cast=(SEL)
+ */
+public static final native int objc_msgSend(int object, int selector, int arg0, int arg1);
+/**
+ * @param object cast=(id)
+ * @param selector cast=(SEL)
+ */
+public static final native int objc_msgSend(int object, int selector, int arg0, int arg1, int arg2);
+/**
+ * @param object cast=(id)
+ * @param selector cast=(SEL)
+ */
+public static final native int objc_msgSend(int object, int selector, int arg0, int arg1, int arg2, int arg3);
+/**
+ * @param object cast=(id)
+ * @param selector cast=(SEL)
+ */
+public static final native int objc_msgSend(int object, int selector, int[] arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9, int arg10);
+/** @method flags=cast */
+public static final native double objc_msgSend_fpret(int /*long*/ id, int /*long*/ sel);
+/**
+ * @param result cast=(void *)
+ * @param object cast=(void *)
+ * @param selector cast=(SEL)
+ */
+public static final native void objc_msgSend_stret(NSRect result, int object, int selector);
+/**
+ * @param result cast=(void *)
+ * @param object cast=(void *)
+ * @param selector cast=(SEL)
+ * @param arg0 flags=struct
+ */
+public static final native void objc_msgSend_stret(NSRect result, int object, int selector, NSRect arg0, int arg1);
+/** @param selectorName cast=(const char *) */
+public static final native int sel_registerName(byte[] selectorName);
+
+/** @method flags=const */
+public static final native int NSDeviceRGBColorSpace();
+/**
+ * @param directory cast=(NSSearchPathDirectory)
+ * @param domainMask cast=(NSSearchPathDomainMask)
+ * @param expandTilde cast=(BOOL)
+ */
+public static final native int NSSearchPathForDirectoriesInDomains(int directory, int domainMask, boolean expandTilde);
+
+/** @param src cast=(void *) */
+public static final native void memcpy(NSRect dest, int src, int size);
+/** @param src cast=(void *) */
+public static final native void memmove(NSPoint dest, int src, int size);
+
+static byte [] ascii (String name) {
+	int length = name.length ();
+	char [] chars = new char [length];
+	name.getChars (0, length, chars, 0);
+	byte [] buffer = new byte [length + 1];
+	for (int i=0; i<length; i++) {
+		buffer [i] = (byte) chars [i];
+	}
+	return buffer;
+}
+
+static int sel_registerName(String selector) {
+	return Cocoa.sel_registerName(ascii(selector));
+}
+	
+static int objc_getClass(String className) {
+	return Cocoa.objc_getClass(ascii(className));
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/cocoa/NSPoint.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/cocoa/NSPoint.java
new file mode 100644
index 0000000..d670518
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/cocoa/NSPoint.java
@@ -0,0 +1,19 @@
+/**********************************************************************
+ * Copyright (c) 2003-2006 IBM Corp.
+ *
+ * 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.internal.cocoa;
+
+
+public class NSPoint {
+	public float x;
+	public float y;
+	public static final int sizeof = 8;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/cocoa/NSRect.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/cocoa/NSRect.java
new file mode 100644
index 0000000..cb30cb9
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/cocoa/NSRect.java
@@ -0,0 +1,25 @@
+/**********************************************************************
+ * Copyright (c) 2003, 2008 IBM Corp.
+ *
+ * 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.internal.cocoa;
+
+
+public class NSRect {
+	/** @field accessor=origin.x */
+	public float x;
+	/** @field accessor=origin.y */
+	public float y;
+	/** @field accessor=size.width */
+	public float width;
+	/** @field accessor=size.height */
+	public float height;
+	public static final int sizeof = 16;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/cocoa/NSSize.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/cocoa/NSSize.java
new file mode 100755
index 0000000..a9b2d31
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/cocoa/NSSize.java
@@ -0,0 +1,19 @@
+/**********************************************************************
+ * Copyright (c) 2003-2006 IBM Corp.
+ *
+ * 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.internal.cocoa;
+
+
+public class NSSize {
+	public float width;
+	public float height;
+	public static final int sizeof = 8;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/build.sh b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/build.sh
new file mode 100755
index 0000000..8da4914
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/build.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+#*******************************************************************************
+# 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
+#*******************************************************************************
+
+cd `dirname $0`
+
+OUTPUT_DIR=../../../org.eclipse.swt.cocoa.macosx
+
+export OUTPUT_DIR
+
+export MACOSX_DEPLOYMENT_TARGET=10.5
+
+export ARCHS="-arch i386 -arch ppc -arch x86_64"
+
+make -f make_macosx.mak $1 $2 $3 $4 $5 $6 $7 $8 $9
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/build.xml b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/build.xml
new file mode 100755
index 0000000..a388fd8
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/build.xml
Binary files differ
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/build32.sh b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/build32.sh
new file mode 100755
index 0000000..8c6577d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/build32.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+#*******************************************************************************
+# 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
+#*******************************************************************************
+
+cd `dirname $0`
+
+OUTPUT_DIR=../../../org.eclipse.swt.cocoa.macosx
+
+export OUTPUT_DIR
+
+export MACOSX_DEPLOYMENT_TARGET=10.5
+
+export ARCHS="-arch i386 -arch ppc"
+
+make -f make_macosx.mak $1 $2 $3 $4 $5 $6 $7 $8 $9
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/build64.sh b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/build64.sh
new file mode 100755
index 0000000..4e70a71
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/build64.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+#*******************************************************************************
+# 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
+#*******************************************************************************
+
+cd `dirname $0`
+
+OUTPUT_DIR=../../../org.eclipse.swt.cocoa.macosx.x86_64
+
+export OUTPUT_DIR
+
+export MACOSX_DEPLOYMENT_TARGET=10.5
+
+export ARCHS="-arch x86_64"
+
+make -f make_macosx.mak $1 $2 $3 $4 $5 $6 $7 $8 $9
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/make_macosx.mak b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/make_macosx.mak
new file mode 100755
index 0000000..4c5d8a5
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/make_macosx.mak
@@ -0,0 +1,91 @@
+#*******************************************************************************
+# Copyright (c) 2000, 2009 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
+#*******************************************************************************
+
+# Makefile for SWT libraries on Cocoa/Mac
+
+include make_common.mak
+
+SWT_PREFIX=swt
+SWTPI_PREFIX=swt-pi
+SWTXULRUNNER_PREFIX=swt-xulrunner
+WS_PREFIX=cocoa
+SWT_VERSION=$(maj_ver)$(min_ver)
+SWT_LIB=lib$(SWT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).jnilib
+SWTPI_LIB=lib$(SWTPI_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).jnilib
+XULRUNNER_LIB=lib$(SWTXULRUNNER_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).jnilib
+
+AWT_PREFIX = swt-awt
+AWT_LIB    = lib$(AWT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).jnilib
+AWT_LIBS   = /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Libraries/libjawt.dylib"
+AWT_OBJECTS   = swt_awt.o
+
+# Uncomment for Native Stats tool
+#NATIVE_STATS = -DNATIVE_STATS
+
+#SWT_DEBUG = -g
+CFLAGS = -c -xobjective-c -Wall $(ARCHS) -DSWT_VERSION=$(SWT_VERSION) $(NATIVE_STATS) $(SWT_DEBUG) -DUSE_ASSEMBLER -DCOCOA -DATOMIC \
+	-I /System/Library/Frameworks/JavaVM.framework/Headers \
+	-I /System/Library/Frameworks/Cocoa.framework/Headers
+LFLAGS = -bundle $(ARCHS) -framework JavaVM -framework Cocoa -framework WebKit
+SWT_OBJECTS = swt.o c.o c_stats.o callback.o
+SWTPI_OBJECTS = swt.o os.o os_structs.o os_stats.o os_custom.o
+XULRUNNER_OBJECTS = swt.o xpcom.o xpcom_custom.o xpcom_structs.o xpcom_stats.o xpcominit.o xpcominit_structs.o xpcominit_stats.o
+
+XULRUNNER_SDK = /Users/Shared/xulrunner/1.8.0.1/mozilla/dist/i386/dist/sdk
+#XULRUNNER_SDK = /Users/Shared/gecko-sdk
+#XULRUNNER_LIBS = -L${XULRUNNER_SDK}/lib -lxpcomglue
+XULRUNNER_LIBS = $(XULRUNNER_SDK)/lib/libxpcomglue.a $(XULRUNNER_SDK)/../../../ppc/dist/sdk/lib/libxpcomglue.a
+XULRUNNERCFLAGS = -c -Wall $(ARCHS) -DSWT_VERSION=$(SWT_VERSION) $(NATIVE_STATS) $(SWT_DEBUG) -DUSE_ASSEMBLER -DCOCOA -I /System/Library/Frameworks/JavaVM.framework/Headers \
+	-Wno-non-virtual-dtor -include ${XULRUNNER_SDK}/include/mozilla-config.h -I${XULRUNNER_SDK}/include 
+XULRUNNERLFLAGS = $(LFLAGS)
+
+all: $(SWT_LIB) $(SWTPI_LIB) $(AWT_LIB) $(XULRUNNER_LIB)
+
+all_x86_64: $(SWT_LIB) $(SWTPI_LIB) $(AWT_LIB)
+
+.c.o:
+	cc $(CFLAGS) $*.c
+
+$(AWT_LIB): $(AWT_OBJECTS)
+	cc -o $(AWT_LIB) $(LFLAGS) $(AWT_OBJECTS)
+
+$(SWT_LIB): $(SWT_OBJECTS)
+	cc -o $(SWT_LIB) $(LFLAGS) $(SWT_OBJECTS)
+
+$(SWTPI_LIB): $(SWTPI_OBJECTS)
+	cc -o $(SWTPI_LIB) $(LFLAGS) $(SWTPI_OBJECTS)
+
+$(XULRUNNER_LIB): $(XULRUNNER_OBJECTS)
+	g++ -o $(XULRUNNER_LIB) $(XULRUNNERLFLAGS) $(XULRUNNER_LIBS) $(XULRUNNER_OBJECTS)
+
+xpcom.o: xpcom.cpp
+	g++ $(XULRUNNERCFLAGS) xpcom.cpp
+xpcom_custom.o: xpcom_custom.cpp
+	g++ $(XULRUNNERCFLAGS) xpcom_custom.cpp
+xpcom_structs.o: xpcom_structs.cpp
+	g++ $(XULRUNNERCFLAGS) xpcom_structs.cpp
+xpcom_stats.o: xpcom_stats.cpp
+	g++ $(XULRUNNERCFLAGS) xpcom_stats.cpp
+xpcominit.o: xpcominit.cpp
+	g++ $(XULRUNNERCFLAGS) xpcominit.cpp
+xpcominit_structs.o: xpcominit_structs.cpp
+	g++ $(XULRUNNERCFLAGS) xpcominit_structs.cpp
+xpcominit_stats.o: xpcominit_stats.cpp
+	g++ $(XULRUNNERCFLAGS) xpcominit_stats.cpp
+
+install: all
+	cp *.jnilib $(OUTPUT_DIR)
+	
+install_x86_64: all_x86_64
+	cp *.jnilib $(OUTPUT_DIR)
+
+clean:
+	rm -f *.jnilib *.o
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os.c b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os.c
new file mode 100644
index 0000000..e7aac79
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os.c
@@ -0,0 +1,8409 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "os_structs.h"
+#include "os_stats.h"
+
+#define OS_NATIVE(func) Java_org_eclipse_swt_internal_cocoa_OS_##func
+
+#ifndef NO_ATSFontActivateFromFileReference
+JNIEXPORT jint JNICALL OS_NATIVE(ATSFontActivateFromFileReference)
+	(JNIEnv *env, jclass that, jbyteArray arg0, jint arg1, jint arg2, jintLong arg3, jint arg4, jintLongArray arg5)
+{
+	jbyte *lparg0=NULL;
+	jintLong *lparg5=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ATSFontActivateFromFileReference_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL)) == NULL) goto fail;
+	if (arg5) if ((lparg5 = (*env)->GetIntLongArrayElements(env, arg5, NULL)) == NULL) goto fail;
+/*
+	rc = (jint)ATSFontActivateFromFileReference((const FSRef *)lparg0, (ATSFontContext)arg1, (ATSFontFormat)arg2, (void *)arg3, (ATSOptionFlags)arg4, (ATSFontContainerRef *)lparg5);
+*/
+	{
+		LOAD_FUNCTION(fp, ATSFontActivateFromFileReference)
+		if (fp) {
+			rc = (jint)((jint (CALLING_CONVENTION*)(const FSRef *, ATSFontContext, ATSFontFormat, void *, ATSOptionFlags, ATSFontContainerRef *))fp)((const FSRef *)lparg0, (ATSFontContext)arg1, (ATSFontFormat)arg2, (void *)arg3, (ATSOptionFlags)arg4, (ATSFontContainerRef *)lparg5);
+		}
+	}
+fail:
+	if (arg5 && lparg5) (*env)->ReleaseIntLongArrayElements(env, arg5, lparg5, 0);
+	if (arg0 && lparg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
+	OS_NATIVE_EXIT(env, that, ATSFontActivateFromFileReference_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_AcquireRootMenu
+JNIEXPORT jintLong JNICALL OS_NATIVE(AcquireRootMenu)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, AcquireRootMenu_FUNC);
+/*
+	rc = (jintLong)AcquireRootMenu();
+*/
+	{
+		LOAD_FUNCTION(fp, AcquireRootMenu)
+		if (fp) {
+			rc = (jintLong)((jintLong (CALLING_CONVENTION*)())fp)();
+		}
+	}
+	OS_NATIVE_EXIT(env, that, AcquireRootMenu_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1accessibilityHitTest_1
+static jintLong CALLBACK_1accessibilityHitTest_1;
+static id proc_CALLBACK_1accessibilityHitTest_1(id arg0, SEL arg1, NSPoint arg2) {
+	return ((id (*)(id, SEL, NSPoint*))CALLBACK_1accessibilityHitTest_1)(arg0, arg1, &arg2);
+}
+static jintLong CALLBACK_accessibilityHitTest_(jintLong func) {
+	CALLBACK_1accessibilityHitTest_1 = func;
+	return (jintLong)proc_CALLBACK_1accessibilityHitTest_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1accessibilityHitTest_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1accessibilityHitTest_1_FUNC);
+	rc = (jintLong)CALLBACK_accessibilityHitTest_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1accessibilityHitTest_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1attributedSubstringFromRange_1
+static jintLong CALLBACK_1attributedSubstringFromRange_1;
+static NSAttributedString* proc_CALLBACK_1attributedSubstringFromRange_1(id arg0, SEL arg1, NSRange arg2) {
+	return ((NSAttributedString* (*)(id, SEL, NSRange*))CALLBACK_1attributedSubstringFromRange_1)(arg0, arg1, &arg2);
+}
+static jintLong CALLBACK_attributedSubstringFromRange_(jintLong func) {
+	CALLBACK_1attributedSubstringFromRange_1 = func;
+	return (jintLong)proc_CALLBACK_1attributedSubstringFromRange_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1attributedSubstringFromRange_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1attributedSubstringFromRange_1_FUNC);
+	rc = (jintLong)CALLBACK_attributedSubstringFromRange_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1attributedSubstringFromRange_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1canDragRowsWithIndexes_1atPoint_1
+static jintLong CALLBACK_1canDragRowsWithIndexes_1atPoint_1;
+static BOOL proc_CALLBACK_1canDragRowsWithIndexes_1atPoint_1(id arg0, SEL arg1, NSIndexSet* arg2, NSPoint arg3) {
+	return ((BOOL (*)(id, SEL, NSIndexSet*, NSPoint*))CALLBACK_1canDragRowsWithIndexes_1atPoint_1)(arg0, arg1, arg2, &arg3);
+}
+static jintLong CALLBACK_canDragRowsWithIndexes_atPoint_(jintLong func) {
+	CALLBACK_1canDragRowsWithIndexes_1atPoint_1 = func;
+	return (jintLong)proc_CALLBACK_1canDragRowsWithIndexes_1atPoint_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1canDragRowsWithIndexes_1atPoint_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1canDragRowsWithIndexes_1atPoint_1_FUNC);
+	rc = (jintLong)CALLBACK_canDragRowsWithIndexes_atPoint_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1canDragRowsWithIndexes_1atPoint_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1cellSize
+static jintLong CALLBACK_1cellSize;
+static NSSize proc_CALLBACK_1cellSize(id arg0, SEL arg1) {
+	NSSize* lprc = ((NSSize* (*)(id, SEL))CALLBACK_1cellSize)(arg0, arg1);
+	NSSize rc;
+	if (lprc) {
+		rc = *lprc;
+		free(lprc);
+	} else {
+		memset(&rc, 0, sizeof(NSSize));
+	}
+	return rc;
+}
+static jintLong CALLBACK_cellSize(jintLong func) {
+	CALLBACK_1cellSize = func;
+	return (jintLong)proc_CALLBACK_1cellSize;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1cellSize)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1cellSize_FUNC);
+	rc = (jintLong)CALLBACK_cellSize(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1cellSize_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1characterIndexForPoint_1
+static jintLong CALLBACK_1characterIndexForPoint_1;
+static NSUInteger proc_CALLBACK_1characterIndexForPoint_1(id arg0, SEL arg1, NSPoint arg2) {
+	return ((NSUInteger (*)(id, SEL, NSPoint*))CALLBACK_1characterIndexForPoint_1)(arg0, arg1, &arg2);
+}
+static jintLong CALLBACK_characterIndexForPoint_(jintLong func) {
+	CALLBACK_1characterIndexForPoint_1 = func;
+	return (jintLong)proc_CALLBACK_1characterIndexForPoint_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1characterIndexForPoint_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1characterIndexForPoint_1_FUNC);
+	rc = (jintLong)CALLBACK_characterIndexForPoint_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1characterIndexForPoint_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1dragSelectionWithEvent_1offset_1slideBack_1
+static jintLong CALLBACK_1dragSelectionWithEvent_1offset_1slideBack_1;
+static BOOL proc_CALLBACK_1dragSelectionWithEvent_1offset_1slideBack_1(id arg0, SEL arg1, NSEvent* arg2, NSSize arg3, BOOL arg4) {
+	return ((BOOL (*)(id, SEL, NSEvent*, NSSize*, BOOL))CALLBACK_1dragSelectionWithEvent_1offset_1slideBack_1)(arg0, arg1, arg2, &arg3, arg4);
+}
+static jintLong CALLBACK_dragSelectionWithEvent_offset_slideBack_(jintLong func) {
+	CALLBACK_1dragSelectionWithEvent_1offset_1slideBack_1 = func;
+	return (jintLong)proc_CALLBACK_1dragSelectionWithEvent_1offset_1slideBack_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1dragSelectionWithEvent_1offset_1slideBack_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1dragSelectionWithEvent_1offset_1slideBack_1_FUNC);
+	rc = (jintLong)CALLBACK_dragSelectionWithEvent_offset_slideBack_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1dragSelectionWithEvent_1offset_1slideBack_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1draggedImage_1beganAt_1
+static jintLong CALLBACK_1draggedImage_1beganAt_1;
+static void proc_CALLBACK_1draggedImage_1beganAt_1(id arg0, SEL arg1, NSImage* arg2, NSPoint arg3) {
+	((void (*)(id, SEL, NSImage*, NSPoint*))CALLBACK_1draggedImage_1beganAt_1)(arg0, arg1, arg2, &arg3);
+}
+static jintLong CALLBACK_draggedImage_beganAt_(jintLong func) {
+	CALLBACK_1draggedImage_1beganAt_1 = func;
+	return (jintLong)proc_CALLBACK_1draggedImage_1beganAt_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1draggedImage_1beganAt_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1draggedImage_1beganAt_1_FUNC);
+	rc = (jintLong)CALLBACK_draggedImage_beganAt_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1draggedImage_1beganAt_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1draggedImage_1endedAt_1operation_1
+static jintLong CALLBACK_1draggedImage_1endedAt_1operation_1;
+static void proc_CALLBACK_1draggedImage_1endedAt_1operation_1(id arg0, SEL arg1, NSImage* arg2, NSPoint arg3, NSDragOperation arg4) {
+	((void (*)(id, SEL, NSImage*, NSPoint*, NSDragOperation))CALLBACK_1draggedImage_1endedAt_1operation_1)(arg0, arg1, arg2, &arg3, arg4);
+}
+static jintLong CALLBACK_draggedImage_endedAt_operation_(jintLong func) {
+	CALLBACK_1draggedImage_1endedAt_1operation_1 = func;
+	return (jintLong)proc_CALLBACK_1draggedImage_1endedAt_1operation_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1draggedImage_1endedAt_1operation_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1draggedImage_1endedAt_1operation_1_FUNC);
+	rc = (jintLong)CALLBACK_draggedImage_endedAt_operation_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1draggedImage_1endedAt_1operation_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1drawImage_1withFrame_1inView_1
+static jintLong CALLBACK_1drawImage_1withFrame_1inView_1;
+static void proc_CALLBACK_1drawImage_1withFrame_1inView_1(id arg0, SEL arg1, NSImage* arg2, NSRect arg3, NSView* arg4) {
+	((void (*)(id, SEL, NSImage*, NSRect*, NSView*))CALLBACK_1drawImage_1withFrame_1inView_1)(arg0, arg1, arg2, &arg3, arg4);
+}
+static jintLong CALLBACK_drawImage_withFrame_inView_(jintLong func) {
+	CALLBACK_1drawImage_1withFrame_1inView_1 = func;
+	return (jintLong)proc_CALLBACK_1drawImage_1withFrame_1inView_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1drawImage_1withFrame_1inView_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1drawImage_1withFrame_1inView_1_FUNC);
+	rc = (jintLong)CALLBACK_drawImage_withFrame_inView_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1drawImage_1withFrame_1inView_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1drawInteriorWithFrame_1inView_1
+static jintLong CALLBACK_1drawInteriorWithFrame_1inView_1;
+static void proc_CALLBACK_1drawInteriorWithFrame_1inView_1(id arg0, SEL arg1, NSRect arg2, NSView* arg3) {
+	((void (*)(id, SEL, NSRect*, NSView*))CALLBACK_1drawInteriorWithFrame_1inView_1)(arg0, arg1, &arg2, arg3);
+}
+static jintLong CALLBACK_drawInteriorWithFrame_inView_(jintLong func) {
+	CALLBACK_1drawInteriorWithFrame_1inView_1 = func;
+	return (jintLong)proc_CALLBACK_1drawInteriorWithFrame_1inView_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1drawInteriorWithFrame_1inView_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1drawInteriorWithFrame_1inView_1_FUNC);
+	rc = (jintLong)CALLBACK_drawInteriorWithFrame_inView_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1drawInteriorWithFrame_1inView_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1drawRect_1
+static jintLong CALLBACK_1drawRect_1;
+static void proc_CALLBACK_1drawRect_1(id arg0, SEL arg1, NSRect arg2) {
+	((void (*)(id, SEL, NSRect*))CALLBACK_1drawRect_1)(arg0, arg1, &arg2);
+}
+static jintLong CALLBACK_drawRect_(jintLong func) {
+	CALLBACK_1drawRect_1 = func;
+	return (jintLong)proc_CALLBACK_1drawRect_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1drawRect_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1drawRect_1_FUNC);
+	rc = (jintLong)CALLBACK_drawRect_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1drawRect_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1drawWithExpansionFrame_1inView_1
+static jintLong CALLBACK_1drawWithExpansionFrame_1inView_1;
+static void proc_CALLBACK_1drawWithExpansionFrame_1inView_1(id arg0, SEL arg1, NSRect arg2, NSView* arg3) {
+	((void (*)(id, SEL, NSRect*, NSView*))CALLBACK_1drawWithExpansionFrame_1inView_1)(arg0, arg1, &arg2, arg3);
+}
+static jintLong CALLBACK_drawWithExpansionFrame_inView_(jintLong func) {
+	CALLBACK_1drawWithExpansionFrame_1inView_1 = func;
+	return (jintLong)proc_CALLBACK_1drawWithExpansionFrame_1inView_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1drawWithExpansionFrame_1inView_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1drawWithExpansionFrame_1inView_1_FUNC);
+	rc = (jintLong)CALLBACK_drawWithExpansionFrame_inView_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1drawWithExpansionFrame_1inView_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1expansionFrameWithFrame_1inView_1
+static jintLong CALLBACK_1expansionFrameWithFrame_1inView_1;
+static NSRect proc_CALLBACK_1expansionFrameWithFrame_1inView_1(id arg0, SEL arg1, NSRect arg2, NSView* arg3) {
+	NSRect* lprc = ((NSRect* (*)(id, SEL, NSRect*, NSView*))CALLBACK_1expansionFrameWithFrame_1inView_1)(arg0, arg1, &arg2, arg3);
+	NSRect rc;
+	if (lprc) {
+		rc = *lprc;
+		free(lprc);
+	} else {
+		memset(&rc, 0, sizeof(NSRect));
+	}
+	return rc;
+}
+static jintLong CALLBACK_expansionFrameWithFrame_inView_(jintLong func) {
+	CALLBACK_1expansionFrameWithFrame_1inView_1 = func;
+	return (jintLong)proc_CALLBACK_1expansionFrameWithFrame_1inView_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1expansionFrameWithFrame_1inView_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1expansionFrameWithFrame_1inView_1_FUNC);
+	rc = (jintLong)CALLBACK_expansionFrameWithFrame_inView_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1expansionFrameWithFrame_1inView_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1firstRectForCharacterRange_1
+static jintLong CALLBACK_1firstRectForCharacterRange_1;
+static NSRect proc_CALLBACK_1firstRectForCharacterRange_1(id arg0, SEL arg1, NSRange arg2) {
+	NSRect* lprc = ((NSRect* (*)(id, SEL, NSRange*))CALLBACK_1firstRectForCharacterRange_1)(arg0, arg1, &arg2);
+	NSRect rc;
+	if (lprc) {
+		rc = *lprc;
+		free(lprc);
+	} else {
+		memset(&rc, 0, sizeof(NSRect));
+	}
+	return rc;
+}
+static jintLong CALLBACK_firstRectForCharacterRange_(jintLong func) {
+	CALLBACK_1firstRectForCharacterRange_1 = func;
+	return (jintLong)proc_CALLBACK_1firstRectForCharacterRange_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1firstRectForCharacterRange_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1firstRectForCharacterRange_1_FUNC);
+	rc = (jintLong)CALLBACK_firstRectForCharacterRange_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1firstRectForCharacterRange_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1highlightSelectionInClipRect_1
+static jintLong CALLBACK_1highlightSelectionInClipRect_1;
+static void proc_CALLBACK_1highlightSelectionInClipRect_1(id arg0, SEL arg1, NSRect arg2) {
+	((void (*)(id, SEL, NSRect*))CALLBACK_1highlightSelectionInClipRect_1)(arg0, arg1, &arg2);
+}
+static jintLong CALLBACK_highlightSelectionInClipRect_(jintLong func) {
+	CALLBACK_1highlightSelectionInClipRect_1 = func;
+	return (jintLong)proc_CALLBACK_1highlightSelectionInClipRect_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1highlightSelectionInClipRect_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1highlightSelectionInClipRect_1_FUNC);
+	rc = (jintLong)CALLBACK_highlightSelectionInClipRect_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1highlightSelectionInClipRect_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1hitTestForEvent_1inRect_1ofView_1
+static jintLong CALLBACK_1hitTestForEvent_1inRect_1ofView_1;
+static NSUInteger proc_CALLBACK_1hitTestForEvent_1inRect_1ofView_1(id arg0, SEL arg1, NSEvent* arg2, NSRect arg3, NSView* arg4) {
+	return ((NSUInteger (*)(id, SEL, NSEvent*, NSRect*, NSView*))CALLBACK_1hitTestForEvent_1inRect_1ofView_1)(arg0, arg1, arg2, &arg3, arg4);
+}
+static jintLong CALLBACK_hitTestForEvent_inRect_ofView_(jintLong func) {
+	CALLBACK_1hitTestForEvent_1inRect_1ofView_1 = func;
+	return (jintLong)proc_CALLBACK_1hitTestForEvent_1inRect_1ofView_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1hitTestForEvent_1inRect_1ofView_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1hitTestForEvent_1inRect_1ofView_1_FUNC);
+	rc = (jintLong)CALLBACK_hitTestForEvent_inRect_ofView_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1hitTestForEvent_1inRect_1ofView_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1hitTest_1
+static jintLong CALLBACK_1hitTest_1;
+static NSView* proc_CALLBACK_1hitTest_1(id arg0, SEL arg1, NSPoint arg2) {
+	return ((NSView* (*)(id, SEL, NSPoint*))CALLBACK_1hitTest_1)(arg0, arg1, &arg2);
+}
+static jintLong CALLBACK_hitTest_(jintLong func) {
+	CALLBACK_1hitTest_1 = func;
+	return (jintLong)proc_CALLBACK_1hitTest_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1hitTest_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1hitTest_1_FUNC);
+	rc = (jintLong)CALLBACK_hitTest_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1hitTest_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1imageRectForBounds_1
+static jintLong CALLBACK_1imageRectForBounds_1;
+static NSRect proc_CALLBACK_1imageRectForBounds_1(id arg0, SEL arg1, NSRect arg2) {
+	NSRect* lprc = ((NSRect* (*)(id, SEL, NSRect*))CALLBACK_1imageRectForBounds_1)(arg0, arg1, &arg2);
+	NSRect rc;
+	if (lprc) {
+		rc = *lprc;
+		free(lprc);
+	} else {
+		memset(&rc, 0, sizeof(NSRect));
+	}
+	return rc;
+}
+static jintLong CALLBACK_imageRectForBounds_(jintLong func) {
+	CALLBACK_1imageRectForBounds_1 = func;
+	return (jintLong)proc_CALLBACK_1imageRectForBounds_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1imageRectForBounds_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1imageRectForBounds_1_FUNC);
+	rc = (jintLong)CALLBACK_imageRectForBounds_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1imageRectForBounds_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1markedRange
+static jintLong CALLBACK_1markedRange;
+static NSRange proc_CALLBACK_1markedRange(id arg0, SEL arg1) {
+	NSRange* lprc = ((NSRange* (*)(id, SEL))CALLBACK_1markedRange)(arg0, arg1);
+	NSRange rc;
+	if (lprc) {
+		rc = *lprc;
+		free(lprc);
+	} else {
+		memset(&rc, 0, sizeof(NSRange));
+	}
+	return rc;
+}
+static jintLong CALLBACK_markedRange(jintLong func) {
+	CALLBACK_1markedRange = func;
+	return (jintLong)proc_CALLBACK_1markedRange;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1markedRange)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1markedRange_FUNC);
+	rc = (jintLong)CALLBACK_markedRange(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1markedRange_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1selectedRange
+static jintLong CALLBACK_1selectedRange;
+static NSRange proc_CALLBACK_1selectedRange(id arg0, SEL arg1) {
+	NSRange* lprc = ((NSRange* (*)(id, SEL))CALLBACK_1selectedRange)(arg0, arg1);
+	NSRange rc;
+	if (lprc) {
+		rc = *lprc;
+		free(lprc);
+	} else {
+		memset(&rc, 0, sizeof(NSRange));
+	}
+	return rc;
+}
+static jintLong CALLBACK_selectedRange(jintLong func) {
+	CALLBACK_1selectedRange = func;
+	return (jintLong)proc_CALLBACK_1selectedRange;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1selectedRange)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1selectedRange_FUNC);
+	rc = (jintLong)CALLBACK_selectedRange(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1selectedRange_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1setFrameOrigin_1
+static jintLong CALLBACK_1setFrameOrigin_1;
+static void proc_CALLBACK_1setFrameOrigin_1(id arg0, SEL arg1, NSPoint arg2) {
+	((void (*)(id, SEL, NSPoint*))CALLBACK_1setFrameOrigin_1)(arg0, arg1, &arg2);
+}
+static jintLong CALLBACK_setFrameOrigin_(jintLong func) {
+	CALLBACK_1setFrameOrigin_1 = func;
+	return (jintLong)proc_CALLBACK_1setFrameOrigin_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1setFrameOrigin_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1setFrameOrigin_1_FUNC);
+	rc = (jintLong)CALLBACK_setFrameOrigin_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1setFrameOrigin_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1setFrameSize_1
+static jintLong CALLBACK_1setFrameSize_1;
+static void proc_CALLBACK_1setFrameSize_1(id arg0, SEL arg1, NSSize arg2) {
+	((void (*)(id, SEL, NSSize*))CALLBACK_1setFrameSize_1)(arg0, arg1, &arg2);
+}
+static jintLong CALLBACK_setFrameSize_(jintLong func) {
+	CALLBACK_1setFrameSize_1 = func;
+	return (jintLong)proc_CALLBACK_1setFrameSize_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1setFrameSize_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1setFrameSize_1_FUNC);
+	rc = (jintLong)CALLBACK_setFrameSize_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1setFrameSize_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1setFrame_1
+static jintLong CALLBACK_1setFrame_1;
+static void proc_CALLBACK_1setFrame_1(id arg0, SEL arg1, NSRect arg2) {
+	((void (*)(id, SEL, NSRect*))CALLBACK_1setFrame_1)(arg0, arg1, &arg2);
+}
+static jintLong CALLBACK_setFrame_(jintLong func) {
+	CALLBACK_1setFrame_1 = func;
+	return (jintLong)proc_CALLBACK_1setFrame_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1setFrame_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1setFrame_1_FUNC);
+	rc = (jintLong)CALLBACK_setFrame_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1setFrame_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1setMarkedText_1selectedRange_1
+static jintLong CALLBACK_1setMarkedText_1selectedRange_1;
+static void proc_CALLBACK_1setMarkedText_1selectedRange_1(id arg0, SEL arg1, id arg2, NSRange arg3) {
+	((void (*)(id, SEL, id, NSRange*))CALLBACK_1setMarkedText_1selectedRange_1)(arg0, arg1, arg2, &arg3);
+}
+static jintLong CALLBACK_setMarkedText_selectedRange_(jintLong func) {
+	CALLBACK_1setMarkedText_1selectedRange_1 = func;
+	return (jintLong)proc_CALLBACK_1setMarkedText_1selectedRange_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1setMarkedText_1selectedRange_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1setMarkedText_1selectedRange_1_FUNC);
+	rc = (jintLong)CALLBACK_setMarkedText_selectedRange_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1setMarkedText_1selectedRange_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1setNeedsDisplayInRect_1
+static jintLong CALLBACK_1setNeedsDisplayInRect_1;
+static void proc_CALLBACK_1setNeedsDisplayInRect_1(id arg0, SEL arg1, NSRect arg2) {
+	((void (*)(id, SEL, NSRect*))CALLBACK_1setNeedsDisplayInRect_1)(arg0, arg1, &arg2);
+}
+static jintLong CALLBACK_setNeedsDisplayInRect_(jintLong func) {
+	CALLBACK_1setNeedsDisplayInRect_1 = func;
+	return (jintLong)proc_CALLBACK_1setNeedsDisplayInRect_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1setNeedsDisplayInRect_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1setNeedsDisplayInRect_1_FUNC);
+	rc = (jintLong)CALLBACK_setNeedsDisplayInRect_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1setNeedsDisplayInRect_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1shouldChangeTextInRange_1replacementString_1
+static jintLong CALLBACK_1shouldChangeTextInRange_1replacementString_1;
+static BOOL proc_CALLBACK_1shouldChangeTextInRange_1replacementString_1(id arg0, SEL arg1, NSRange arg2, NSString* arg3) {
+	return ((BOOL (*)(id, SEL, NSRange*, NSString*))CALLBACK_1shouldChangeTextInRange_1replacementString_1)(arg0, arg1, &arg2, arg3);
+}
+static jintLong CALLBACK_shouldChangeTextInRange_replacementString_(jintLong func) {
+	CALLBACK_1shouldChangeTextInRange_1replacementString_1 = func;
+	return (jintLong)proc_CALLBACK_1shouldChangeTextInRange_1replacementString_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1shouldChangeTextInRange_1replacementString_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1shouldChangeTextInRange_1replacementString_1_FUNC);
+	rc = (jintLong)CALLBACK_shouldChangeTextInRange_replacementString_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1shouldChangeTextInRange_1replacementString_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1textView_1willChangeSelectionFromCharacterRange_1toCharacterRange_1
+static jintLong CALLBACK_1textView_1willChangeSelectionFromCharacterRange_1toCharacterRange_1;
+static NSRange proc_CALLBACK_1textView_1willChangeSelectionFromCharacterRange_1toCharacterRange_1(id arg0, SEL arg1, NSTextView* arg2, NSRange arg3, NSRange arg4) {
+	NSRange* lprc = ((NSRange* (*)(id, SEL, NSTextView*, NSRange*, NSRange*))CALLBACK_1textView_1willChangeSelectionFromCharacterRange_1toCharacterRange_1)(arg0, arg1, arg2, &arg3, &arg4);
+	NSRange rc;
+	if (lprc) {
+		rc = *lprc;
+		free(lprc);
+	} else {
+		memset(&rc, 0, sizeof(NSRange));
+	}
+	return rc;
+}
+static jintLong CALLBACK_textView_willChangeSelectionFromCharacterRange_toCharacterRange_(jintLong func) {
+	CALLBACK_1textView_1willChangeSelectionFromCharacterRange_1toCharacterRange_1 = func;
+	return (jintLong)proc_CALLBACK_1textView_1willChangeSelectionFromCharacterRange_1toCharacterRange_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1textView_1willChangeSelectionFromCharacterRange_1toCharacterRange_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1textView_1willChangeSelectionFromCharacterRange_1toCharacterRange_1_FUNC);
+	rc = (jintLong)CALLBACK_textView_willChangeSelectionFromCharacterRange_toCharacterRange_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1textView_1willChangeSelectionFromCharacterRange_1toCharacterRange_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1titleRectForBounds_1
+static jintLong CALLBACK_1titleRectForBounds_1;
+static NSRect proc_CALLBACK_1titleRectForBounds_1(id arg0, SEL arg1, NSRect arg2) {
+	NSRect* lprc = ((NSRect* (*)(id, SEL, NSRect*))CALLBACK_1titleRectForBounds_1)(arg0, arg1, &arg2);
+	NSRect rc;
+	if (lprc) {
+		rc = *lprc;
+		free(lprc);
+	} else {
+		memset(&rc, 0, sizeof(NSRect));
+	}
+	return rc;
+}
+static jintLong CALLBACK_titleRectForBounds_(jintLong func) {
+	CALLBACK_1titleRectForBounds_1 = func;
+	return (jintLong)proc_CALLBACK_1titleRectForBounds_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1titleRectForBounds_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1titleRectForBounds_1_FUNC);
+	rc = (jintLong)CALLBACK_titleRectForBounds_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1titleRectForBounds_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1view_1stringForToolTip_1point_1userData_1
+static jintLong CALLBACK_1view_1stringForToolTip_1point_1userData_1;
+static NSString* proc_CALLBACK_1view_1stringForToolTip_1point_1userData_1(id arg0, SEL arg1, NSView* arg2, NSToolTipTag arg3, NSPoint arg4, void* arg5) {
+	return ((NSString* (*)(id, SEL, NSView*, NSToolTipTag, NSPoint*, void*))CALLBACK_1view_1stringForToolTip_1point_1userData_1)(arg0, arg1, arg2, arg3, &arg4, arg5);
+}
+static jintLong CALLBACK_view_stringForToolTip_point_userData_(jintLong func) {
+	CALLBACK_1view_1stringForToolTip_1point_1userData_1 = func;
+	return (jintLong)proc_CALLBACK_1view_1stringForToolTip_1point_1userData_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1view_1stringForToolTip_1point_1userData_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1view_1stringForToolTip_1point_1userData_1_FUNC);
+	rc = (jintLong)CALLBACK_view_stringForToolTip_point_userData_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1view_1stringForToolTip_1point_1userData_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CALLBACK_1webView_1setFrame_1
+static jintLong CALLBACK_1webView_1setFrame_1;
+static void proc_CALLBACK_1webView_1setFrame_1(id arg0, SEL arg1, WebView* arg2, NSRect arg3) {
+	((void (*)(id, SEL, WebView*, NSRect*))CALLBACK_1webView_1setFrame_1)(arg0, arg1, arg2, &arg3);
+}
+static jintLong CALLBACK_webView_setFrame_(jintLong func) {
+	CALLBACK_1webView_1setFrame_1 = func;
+	return (jintLong)proc_CALLBACK_1webView_1setFrame_1;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(CALLBACK_1webView_1setFrame_1)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CALLBACK_1webView_1setFrame_1_FUNC);
+	rc = (jintLong)CALLBACK_webView_setFrame_(arg0);
+	OS_NATIVE_EXIT(env, that, CALLBACK_1webView_1setFrame_1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFDataGetBytePtr
+JNIEXPORT jintLong JNICALL OS_NATIVE(CFDataGetBytePtr)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CFDataGetBytePtr_FUNC);
+	rc = (jintLong)CFDataGetBytePtr((CFDataRef)arg0);
+	OS_NATIVE_EXIT(env, that, CFDataGetBytePtr_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFDataGetLength
+JNIEXPORT jintLong JNICALL OS_NATIVE(CFDataGetLength)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CFDataGetLength_FUNC);
+	rc = (jintLong)CFDataGetLength((CFDataRef)arg0);
+	OS_NATIVE_EXIT(env, that, CFDataGetLength_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFRelease
+JNIEXPORT void JNICALL OS_NATIVE(CFRelease)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	OS_NATIVE_ENTER(env, that, CFRelease_FUNC);
+	CFRelease((CFTypeRef)arg0);
+	OS_NATIVE_EXIT(env, that, CFRelease_FUNC);
+}
+#endif
+
+#ifndef NO_CFRunLoopAddObserver
+JNIEXPORT void JNICALL OS_NATIVE(CFRunLoopAddObserver)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2)
+{
+	OS_NATIVE_ENTER(env, that, CFRunLoopAddObserver_FUNC);
+	CFRunLoopAddObserver((CFRunLoopRef)arg0, (CFRunLoopObserverRef)arg1, (CFStringRef)arg2);
+	OS_NATIVE_EXIT(env, that, CFRunLoopAddObserver_FUNC);
+}
+#endif
+
+#ifndef NO_CFRunLoopGetCurrent
+JNIEXPORT jintLong JNICALL OS_NATIVE(CFRunLoopGetCurrent)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CFRunLoopGetCurrent_FUNC);
+	rc = (jintLong)CFRunLoopGetCurrent();
+	OS_NATIVE_EXIT(env, that, CFRunLoopGetCurrent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFRunLoopObserverCreate
+JNIEXPORT jintLong JNICALL OS_NATIVE(CFRunLoopObserverCreate)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jboolean arg2, jintLong arg3, jintLong arg4, jintLong arg5)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CFRunLoopObserverCreate_FUNC);
+	rc = (jintLong)CFRunLoopObserverCreate((CFAllocatorRef)arg0, (CFOptionFlags)arg1, (Boolean)arg2, (CFIndex)arg3, (CFRunLoopObserverCallBack)arg4, (CFRunLoopObserverContext*)arg5);
+	OS_NATIVE_EXIT(env, that, CFRunLoopObserverCreate_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CFRunLoopObserverInvalidate
+JNIEXPORT void JNICALL OS_NATIVE(CFRunLoopObserverInvalidate)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	OS_NATIVE_ENTER(env, that, CFRunLoopObserverInvalidate_FUNC);
+	CFRunLoopObserverInvalidate((CFRunLoopObserverRef)arg0);
+	OS_NATIVE_EXIT(env, that, CFRunLoopObserverInvalidate_FUNC);
+}
+#endif
+
+#ifndef NO_CFURLCreateStringByAddingPercentEscapes
+JNIEXPORT jintLong JNICALL OS_NATIVE(CFURLCreateStringByAddingPercentEscapes)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jint arg4)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CFURLCreateStringByAddingPercentEscapes_FUNC);
+	rc = (jintLong)CFURLCreateStringByAddingPercentEscapes((CFAllocatorRef)arg0, (CFStringRef)arg1, (CFStringRef)arg2, (CFStringRef)arg3, (CFStringEncoding)arg4);
+	OS_NATIVE_EXIT(env, that, CFURLCreateStringByAddingPercentEscapes_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGBitmapContextCreate
+JNIEXPORT jintLong JNICALL OS_NATIVE(CGBitmapContextCreate)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jintLong arg5, jint arg6)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CGBitmapContextCreate_FUNC);
+	rc = (jintLong)CGBitmapContextCreate((void*)arg0, (size_t)arg1, (size_t)arg2, (size_t)arg3, (size_t)arg4, (CGColorSpaceRef)arg5, (CGBitmapInfo)arg6);
+	OS_NATIVE_EXIT(env, that, CGBitmapContextCreate_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGBitmapContextCreateImage
+JNIEXPORT jintLong JNICALL OS_NATIVE(CGBitmapContextCreateImage)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CGBitmapContextCreateImage_FUNC);
+	rc = (jintLong)CGBitmapContextCreateImage((CGContextRef)arg0);
+	OS_NATIVE_EXIT(env, that, CGBitmapContextCreateImage_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGBitmapContextGetData
+JNIEXPORT jintLong JNICALL OS_NATIVE(CGBitmapContextGetData)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CGBitmapContextGetData_FUNC);
+	rc = (jintLong)CGBitmapContextGetData((CGContextRef)arg0);
+	OS_NATIVE_EXIT(env, that, CGBitmapContextGetData_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGColorSpaceCreateDeviceRGB
+JNIEXPORT jintLong JNICALL OS_NATIVE(CGColorSpaceCreateDeviceRGB)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CGColorSpaceCreateDeviceRGB_FUNC);
+	rc = (jintLong)CGColorSpaceCreateDeviceRGB();
+	OS_NATIVE_EXIT(env, that, CGColorSpaceCreateDeviceRGB_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGColorSpaceRelease
+JNIEXPORT void JNICALL OS_NATIVE(CGColorSpaceRelease)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	OS_NATIVE_ENTER(env, that, CGColorSpaceRelease_FUNC);
+	CGColorSpaceRelease((CGColorSpaceRef)arg0);
+	OS_NATIVE_EXIT(env, that, CGColorSpaceRelease_FUNC);
+}
+#endif
+
+#ifndef NO_CGContextAddPath
+JNIEXPORT void JNICALL OS_NATIVE(CGContextAddPath)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	OS_NATIVE_ENTER(env, that, CGContextAddPath_FUNC);
+	CGContextAddPath((CGContextRef)arg0, (CGPathRef)arg1);
+	OS_NATIVE_EXIT(env, that, CGContextAddPath_FUNC);
+}
+#endif
+
+#ifndef NO_CGContextCopyPath
+JNIEXPORT jintLong JNICALL OS_NATIVE(CGContextCopyPath)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CGContextCopyPath_FUNC);
+/*
+	rc = (jintLong)CGContextCopyPath(arg0);
+*/
+	{
+		LOAD_FUNCTION(fp, CGContextCopyPath)
+		if (fp) {
+			rc = (jintLong)((jintLong (CALLING_CONVENTION*)(jintLong))fp)(arg0);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, CGContextCopyPath_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGContextCopyWindowContentsToRect
+JNIEXPORT void JNICALL OS_NATIVE(CGContextCopyWindowContentsToRect)
+	(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jintLong arg2, jintLong arg3, jobject arg4)
+{
+	CGRect _arg1, *lparg1=NULL;
+	CGRect _arg4, *lparg4=NULL;
+	OS_NATIVE_ENTER(env, that, CGContextCopyWindowContentsToRect_FUNC);
+	if (arg1) if ((lparg1 = getCGRectFields(env, arg1, &_arg1)) == NULL) goto fail;
+	if (arg4) if ((lparg4 = getCGRectFields(env, arg4, &_arg4)) == NULL) goto fail;
+/*
+	CGContextCopyWindowContentsToRect(arg0, *lparg1, arg2, arg3, *lparg4);
+*/
+	{
+		LOAD_FUNCTION(fp, CGContextCopyWindowContentsToRect)
+		if (fp) {
+			((void (CALLING_CONVENTION*)(jintLong, CGRect, jintLong, jintLong, CGRect))fp)(arg0, *lparg1, arg2, arg3, *lparg4);
+		}
+	}
+fail:
+	if (arg4 && lparg4) setCGRectFields(env, arg4, lparg4);
+	if (arg1 && lparg1) setCGRectFields(env, arg1, lparg1);
+	OS_NATIVE_EXIT(env, that, CGContextCopyWindowContentsToRect_FUNC);
+}
+#endif
+
+#ifndef NO_CGContextDrawImage
+JNIEXPORT void JNICALL OS_NATIVE(CGContextDrawImage)
+	(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jintLong arg2)
+{
+	CGRect _arg1, *lparg1=NULL;
+	OS_NATIVE_ENTER(env, that, CGContextDrawImage_FUNC);
+	if (arg1) if ((lparg1 = getCGRectFields(env, arg1, &_arg1)) == NULL) goto fail;
+	CGContextDrawImage((CGContextRef)arg0, *lparg1, (CGImageRef)arg2);
+fail:
+	if (arg1 && lparg1) setCGRectFields(env, arg1, lparg1);
+	OS_NATIVE_EXIT(env, that, CGContextDrawImage_FUNC);
+}
+#endif
+
+#ifndef NO_CGContextRelease
+JNIEXPORT void JNICALL OS_NATIVE(CGContextRelease)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	OS_NATIVE_ENTER(env, that, CGContextRelease_FUNC);
+	CGContextRelease((CGContextRef)arg0);
+	OS_NATIVE_EXIT(env, that, CGContextRelease_FUNC);
+}
+#endif
+
+#ifndef NO_CGContextReplacePathWithStrokedPath
+JNIEXPORT void JNICALL OS_NATIVE(CGContextReplacePathWithStrokedPath)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	OS_NATIVE_ENTER(env, that, CGContextReplacePathWithStrokedPath_FUNC);
+	CGContextReplacePathWithStrokedPath((CGContextRef)arg0);
+	OS_NATIVE_EXIT(env, that, CGContextReplacePathWithStrokedPath_FUNC);
+}
+#endif
+
+#ifndef NO_CGContextRestoreGState
+JNIEXPORT void JNICALL OS_NATIVE(CGContextRestoreGState)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	OS_NATIVE_ENTER(env, that, CGContextRestoreGState_FUNC);
+	CGContextRestoreGState((CGContextRef)arg0);
+	OS_NATIVE_EXIT(env, that, CGContextRestoreGState_FUNC);
+}
+#endif
+
+#ifndef NO_CGContextSaveGState
+JNIEXPORT void JNICALL OS_NATIVE(CGContextSaveGState)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	OS_NATIVE_ENTER(env, that, CGContextSaveGState_FUNC);
+	CGContextSaveGState((CGContextRef)arg0);
+	OS_NATIVE_EXIT(env, that, CGContextSaveGState_FUNC);
+}
+#endif
+
+#ifndef NO_CGContextScaleCTM
+JNIEXPORT void JNICALL OS_NATIVE(CGContextScaleCTM)
+	(JNIEnv *env, jclass that, jintLong arg0, jfloatDouble arg1, jfloatDouble arg2)
+{
+	OS_NATIVE_ENTER(env, that, CGContextScaleCTM_FUNC);
+	CGContextScaleCTM((CGContextRef)arg0, (CGFloat)arg1, (CGFloat)arg2);
+	OS_NATIVE_EXIT(env, that, CGContextScaleCTM_FUNC);
+}
+#endif
+
+#ifndef NO_CGContextSetBlendMode
+JNIEXPORT void JNICALL OS_NATIVE(CGContextSetBlendMode)
+	(JNIEnv *env, jclass that, jintLong arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, CGContextSetBlendMode_FUNC);
+	CGContextSetBlendMode((CGContextRef)arg0, (CGBlendMode)arg1);
+	OS_NATIVE_EXIT(env, that, CGContextSetBlendMode_FUNC);
+}
+#endif
+
+#ifndef NO_CGContextSetLineCap
+JNIEXPORT void JNICALL OS_NATIVE(CGContextSetLineCap)
+	(JNIEnv *env, jclass that, jintLong arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, CGContextSetLineCap_FUNC);
+	CGContextSetLineCap((CGContextRef)arg0, (CGLineCap)arg1);
+	OS_NATIVE_EXIT(env, that, CGContextSetLineCap_FUNC);
+}
+#endif
+
+#ifndef NO_CGContextSetLineDash
+JNIEXPORT void JNICALL OS_NATIVE(CGContextSetLineDash)
+	(JNIEnv *env, jclass that, jintLong arg0, jfloatDouble arg1, jfloatArray arg2, jintLong arg3)
+{
+	jfloat *lparg2=NULL;
+	OS_NATIVE_ENTER(env, that, CGContextSetLineDash_FUNC);
+	if (arg2) if ((lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	CGContextSetLineDash((CGContextRef)arg0, (CGFloat)arg1, (CGFloat*)lparg2, (size_t)arg3);
+fail:
+	if (arg2 && lparg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
+	OS_NATIVE_EXIT(env, that, CGContextSetLineDash_FUNC);
+}
+#endif
+
+#ifndef NO_CGContextSetLineJoin
+JNIEXPORT void JNICALL OS_NATIVE(CGContextSetLineJoin)
+	(JNIEnv *env, jclass that, jintLong arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, CGContextSetLineJoin_FUNC);
+	CGContextSetLineJoin((CGContextRef)arg0, (CGLineJoin)arg1);
+	OS_NATIVE_EXIT(env, that, CGContextSetLineJoin_FUNC);
+}
+#endif
+
+#ifndef NO_CGContextSetLineWidth
+JNIEXPORT void JNICALL OS_NATIVE(CGContextSetLineWidth)
+	(JNIEnv *env, jclass that, jintLong arg0, jfloatDouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, CGContextSetLineWidth_FUNC);
+	CGContextSetLineWidth((CGContextRef)arg0, (CGFloat)arg1);
+	OS_NATIVE_EXIT(env, that, CGContextSetLineWidth_FUNC);
+}
+#endif
+
+#ifndef NO_CGContextSetMiterLimit
+JNIEXPORT void JNICALL OS_NATIVE(CGContextSetMiterLimit)
+	(JNIEnv *env, jclass that, jintLong arg0, jfloatDouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, CGContextSetMiterLimit_FUNC);
+	CGContextSetMiterLimit((CGContextRef)arg0, (CGFloat)arg1);
+	OS_NATIVE_EXIT(env, that, CGContextSetMiterLimit_FUNC);
+}
+#endif
+
+#ifndef NO_CGContextStrokePath
+JNIEXPORT void JNICALL OS_NATIVE(CGContextStrokePath)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	OS_NATIVE_ENTER(env, that, CGContextStrokePath_FUNC);
+	CGContextStrokePath((CGContextRef)arg0);
+	OS_NATIVE_EXIT(env, that, CGContextStrokePath_FUNC);
+}
+#endif
+
+#ifndef NO_CGContextTranslateCTM
+JNIEXPORT void JNICALL OS_NATIVE(CGContextTranslateCTM)
+	(JNIEnv *env, jclass that, jintLong arg0, jfloatDouble arg1, jfloatDouble arg2)
+{
+	OS_NATIVE_ENTER(env, that, CGContextTranslateCTM_FUNC);
+	CGContextTranslateCTM((CGContextRef)arg0, (CGFloat)arg1, (CGFloat)arg2);
+	OS_NATIVE_EXIT(env, that, CGContextTranslateCTM_FUNC);
+}
+#endif
+
+#ifndef NO_CGDataProviderCreateWithData
+JNIEXPORT jintLong JNICALL OS_NATIVE(CGDataProviderCreateWithData)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CGDataProviderCreateWithData_FUNC);
+	rc = (jintLong)CGDataProviderCreateWithData((void*)arg0, (void*)arg1, (size_t)arg2, (CGDataProviderReleaseDataCallback)arg3);
+	OS_NATIVE_EXIT(env, that, CGDataProviderCreateWithData_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGDataProviderRelease
+JNIEXPORT void JNICALL OS_NATIVE(CGDataProviderRelease)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	OS_NATIVE_ENTER(env, that, CGDataProviderRelease_FUNC);
+	CGDataProviderRelease((CGDataProviderRef)arg0);
+	OS_NATIVE_EXIT(env, that, CGDataProviderRelease_FUNC);
+}
+#endif
+
+#ifndef NO_CGDisplayBaseAddress
+JNIEXPORT jintLong JNICALL OS_NATIVE(CGDisplayBaseAddress)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CGDisplayBaseAddress_FUNC);
+	rc = (jintLong)CGDisplayBaseAddress((CGDirectDisplayID)arg0);
+	OS_NATIVE_EXIT(env, that, CGDisplayBaseAddress_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGDisplayBitsPerPixel
+JNIEXPORT jintLong JNICALL OS_NATIVE(CGDisplayBitsPerPixel)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CGDisplayBitsPerPixel_FUNC);
+	rc = (jintLong)CGDisplayBitsPerPixel((CGDirectDisplayID)arg0);
+	OS_NATIVE_EXIT(env, that, CGDisplayBitsPerPixel_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGDisplayBitsPerSample
+JNIEXPORT jintLong JNICALL OS_NATIVE(CGDisplayBitsPerSample)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CGDisplayBitsPerSample_FUNC);
+	rc = (jintLong)CGDisplayBitsPerSample((CGDirectDisplayID)arg0);
+	OS_NATIVE_EXIT(env, that, CGDisplayBitsPerSample_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGDisplayBytesPerRow
+JNIEXPORT jintLong JNICALL OS_NATIVE(CGDisplayBytesPerRow)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CGDisplayBytesPerRow_FUNC);
+	rc = (jintLong)CGDisplayBytesPerRow((CGDirectDisplayID)arg0);
+	OS_NATIVE_EXIT(env, that, CGDisplayBytesPerRow_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGDisplayPixelsHigh
+JNIEXPORT jintLong JNICALL OS_NATIVE(CGDisplayPixelsHigh)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CGDisplayPixelsHigh_FUNC);
+	rc = (jintLong)CGDisplayPixelsHigh((CGDirectDisplayID)arg0);
+	OS_NATIVE_EXIT(env, that, CGDisplayPixelsHigh_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGDisplayPixelsWide
+JNIEXPORT jintLong JNICALL OS_NATIVE(CGDisplayPixelsWide)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CGDisplayPixelsWide_FUNC);
+	rc = (jintLong)CGDisplayPixelsWide((CGDirectDisplayID)arg0);
+	OS_NATIVE_EXIT(env, that, CGDisplayPixelsWide_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGEnableEventStateCombining
+JNIEXPORT jint JNICALL OS_NATIVE(CGEnableEventStateCombining)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CGEnableEventStateCombining_FUNC);
+	rc = (jint)CGEnableEventStateCombining((boolean_t)arg0);
+	OS_NATIVE_EXIT(env, that, CGEnableEventStateCombining_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGEventCreateKeyboardEvent
+JNIEXPORT jintLong JNICALL OS_NATIVE(CGEventCreateKeyboardEvent)
+	(JNIEnv *env, jclass that, jintLong arg0, jshort arg1, jboolean arg2)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CGEventCreateKeyboardEvent_FUNC);
+	rc = (jintLong)CGEventCreateKeyboardEvent((CGEventSourceRef)arg0, (CGKeyCode)arg1, (_Bool)arg2);
+	OS_NATIVE_EXIT(env, that, CGEventCreateKeyboardEvent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGEventGetIntegerValueField
+JNIEXPORT jlong JNICALL OS_NATIVE(CGEventGetIntegerValueField)
+	(JNIEnv *env, jclass that, jintLong arg0, jint arg1)
+{
+	jlong rc = 0;
+	OS_NATIVE_ENTER(env, that, CGEventGetIntegerValueField_FUNC);
+	rc = (jlong)CGEventGetIntegerValueField((CGEventRef)arg0, (CGEventField)arg1);
+	OS_NATIVE_EXIT(env, that, CGEventGetIntegerValueField_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGEventKeyboardSetUnicodeString
+JNIEXPORT void JNICALL OS_NATIVE(CGEventKeyboardSetUnicodeString)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jcharArray arg2)
+{
+	jchar *lparg2=NULL;
+	OS_NATIVE_ENTER(env, that, CGEventKeyboardSetUnicodeString_FUNC);
+	if (arg2) if ((lparg2 = (*env)->GetCharArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	CGEventKeyboardSetUnicodeString((CGEventRef)arg0, (UniCharCount)arg1, (UniChar*)lparg2);
+fail:
+	if (arg2 && lparg2) (*env)->ReleaseCharArrayElements(env, arg2, lparg2, 0);
+	OS_NATIVE_EXIT(env, that, CGEventKeyboardSetUnicodeString_FUNC);
+}
+#endif
+
+#ifndef NO_CGEventPost
+JNIEXPORT void JNICALL OS_NATIVE(CGEventPost)
+	(JNIEnv *env, jclass that, jint arg0, jintLong arg1)
+{
+	OS_NATIVE_ENTER(env, that, CGEventPost_FUNC);
+	CGEventPost((CGEventTapLocation)arg0, (CGEventRef)arg1);
+	OS_NATIVE_EXIT(env, that, CGEventPost_FUNC);
+}
+#endif
+
+#ifndef NO_CGGetDisplaysWithRect
+JNIEXPORT jint JNICALL OS_NATIVE(CGGetDisplaysWithRect)
+	(JNIEnv *env, jclass that, jobject arg0, jint arg1, jintLong arg2, jintLong arg3)
+{
+	CGRect _arg0, *lparg0=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CGGetDisplaysWithRect_FUNC);
+	if (arg0) if ((lparg0 = getCGRectFields(env, arg0, &_arg0)) == NULL) goto fail;
+	rc = (jint)CGGetDisplaysWithRect(*lparg0, (CGDisplayCount)arg1, (CGDirectDisplayID*)arg2, (CGDisplayCount*)arg3);
+fail:
+	if (arg0 && lparg0) setCGRectFields(env, arg0, lparg0);
+	OS_NATIVE_EXIT(env, that, CGGetDisplaysWithRect_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGImageCreate
+JNIEXPORT jintLong JNICALL OS_NATIVE(CGImageCreate)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jintLong arg5, jint arg6, jintLong arg7, jintLong arg8, jboolean arg9, jint arg10)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CGImageCreate_FUNC);
+	rc = (jintLong)CGImageCreate((size_t)arg0, (size_t)arg1, (size_t)arg2, (size_t)arg3, (size_t)arg4, (CGColorSpaceRef)arg5, (CGBitmapInfo)arg6, (CGDataProviderRef)arg7, (CGFloat*)arg8, (_Bool)arg9, (CGColorRenderingIntent)arg10);
+	OS_NATIVE_EXIT(env, that, CGImageCreate_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGImageGetHeight
+JNIEXPORT jintLong JNICALL OS_NATIVE(CGImageGetHeight)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CGImageGetHeight_FUNC);
+	rc = (jintLong)CGImageGetHeight((CGImageRef)arg0);
+	OS_NATIVE_EXIT(env, that, CGImageGetHeight_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGImageGetWidth
+JNIEXPORT jintLong JNICALL OS_NATIVE(CGImageGetWidth)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CGImageGetWidth_FUNC);
+	rc = (jintLong)CGImageGetWidth((CGImageRef)arg0);
+	OS_NATIVE_EXIT(env, that, CGImageGetWidth_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGImageRelease
+JNIEXPORT void JNICALL OS_NATIVE(CGImageRelease)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	OS_NATIVE_ENTER(env, that, CGImageRelease_FUNC);
+	CGImageRelease((CGImageRef)arg0);
+	OS_NATIVE_EXIT(env, that, CGImageRelease_FUNC);
+}
+#endif
+
+#ifndef NO_CGPathAddCurveToPoint
+JNIEXPORT void JNICALL OS_NATIVE(CGPathAddCurveToPoint)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jfloatDouble arg2, jfloatDouble arg3, jfloatDouble arg4, jfloatDouble arg5, jfloatDouble arg6, jfloatDouble arg7)
+{
+	OS_NATIVE_ENTER(env, that, CGPathAddCurveToPoint_FUNC);
+	CGPathAddCurveToPoint((CGMutablePathRef)arg0, (CGAffineTransform*)arg1, (CGFloat)arg2, (CGFloat)arg3, (CGFloat)arg4, (CGFloat)arg5, (CGFloat)arg6, (CGFloat)arg7);
+	OS_NATIVE_EXIT(env, that, CGPathAddCurveToPoint_FUNC);
+}
+#endif
+
+#ifndef NO_CGPathAddLineToPoint
+JNIEXPORT void JNICALL OS_NATIVE(CGPathAddLineToPoint)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jfloatDouble arg2, jfloatDouble arg3)
+{
+	OS_NATIVE_ENTER(env, that, CGPathAddLineToPoint_FUNC);
+	CGPathAddLineToPoint((CGMutablePathRef)arg0, (CGAffineTransform*)arg1, (CGFloat)arg2, (CGFloat)arg3);
+	OS_NATIVE_EXIT(env, that, CGPathAddLineToPoint_FUNC);
+}
+#endif
+
+#ifndef NO_CGPathApply
+JNIEXPORT void JNICALL OS_NATIVE(CGPathApply)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2)
+{
+	OS_NATIVE_ENTER(env, that, CGPathApply_FUNC);
+	CGPathApply((CGPathRef)arg0, (void*)arg1, (CGPathApplierFunction)arg2);
+	OS_NATIVE_EXIT(env, that, CGPathApply_FUNC);
+}
+#endif
+
+#ifndef NO_CGPathCloseSubpath
+JNIEXPORT void JNICALL OS_NATIVE(CGPathCloseSubpath)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	OS_NATIVE_ENTER(env, that, CGPathCloseSubpath_FUNC);
+	CGPathCloseSubpath((CGMutablePathRef)arg0);
+	OS_NATIVE_EXIT(env, that, CGPathCloseSubpath_FUNC);
+}
+#endif
+
+#ifndef NO_CGPathCreateCopy
+JNIEXPORT jintLong JNICALL OS_NATIVE(CGPathCreateCopy)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CGPathCreateCopy_FUNC);
+	rc = (jintLong)CGPathCreateCopy((CGPathRef)arg0);
+	OS_NATIVE_EXIT(env, that, CGPathCreateCopy_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGPathCreateMutable
+JNIEXPORT jintLong JNICALL OS_NATIVE(CGPathCreateMutable)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, CGPathCreateMutable_FUNC);
+	rc = (jintLong)CGPathCreateMutable();
+	OS_NATIVE_EXIT(env, that, CGPathCreateMutable_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGPathElement_1sizeof
+JNIEXPORT jint JNICALL OS_NATIVE(CGPathElement_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CGPathElement_1sizeof_FUNC);
+	rc = (jint)CGPathElement_sizeof();
+	OS_NATIVE_EXIT(env, that, CGPathElement_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGPathMoveToPoint
+JNIEXPORT void JNICALL OS_NATIVE(CGPathMoveToPoint)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jfloatDouble arg2, jfloatDouble arg3)
+{
+	OS_NATIVE_ENTER(env, that, CGPathMoveToPoint_FUNC);
+	CGPathMoveToPoint((CGMutablePathRef)arg0, (CGAffineTransform*)arg1, (CGFloat)arg2, (CGFloat)arg3);
+	OS_NATIVE_EXIT(env, that, CGPathMoveToPoint_FUNC);
+}
+#endif
+
+#ifndef NO_CGPathRelease
+JNIEXPORT void JNICALL OS_NATIVE(CGPathRelease)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	OS_NATIVE_ENTER(env, that, CGPathRelease_FUNC);
+	CGPathRelease((CGPathRef)arg0);
+	OS_NATIVE_EXIT(env, that, CGPathRelease_FUNC);
+}
+#endif
+
+#ifndef NO_CGPoint_1sizeof
+JNIEXPORT jint JNICALL OS_NATIVE(CGPoint_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CGPoint_1sizeof_FUNC);
+	rc = (jint)CGPoint_sizeof();
+	OS_NATIVE_EXIT(env, that, CGPoint_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGPostKeyboardEvent
+JNIEXPORT jint JNICALL OS_NATIVE(CGPostKeyboardEvent)
+	(JNIEnv *env, jclass that, jshort arg0, jshort arg1, jboolean arg2)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CGPostKeyboardEvent_FUNC);
+	rc = (jint)CGPostKeyboardEvent((CGCharCode)arg0, (CGKeyCode)arg1, (boolean_t)arg2);
+	OS_NATIVE_EXIT(env, that, CGPostKeyboardEvent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGPostMouseEvent
+JNIEXPORT jint JNICALL OS_NATIVE(CGPostMouseEvent)
+	(JNIEnv *env, jclass that, jobject arg0, jboolean arg1, jint arg2, jboolean arg3, jboolean arg4, jboolean arg5, jboolean arg6, jboolean arg7)
+{
+	CGPoint _arg0, *lparg0=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CGPostMouseEvent_FUNC);
+	if (arg0) if ((lparg0 = getCGPointFields(env, arg0, &_arg0)) == NULL) goto fail;
+	rc = (jint)CGPostMouseEvent(*lparg0, (boolean_t)arg1, (CGButtonCount)arg2, (boolean_t)arg3, arg4, arg5, arg6, arg7);
+fail:
+	if (arg0 && lparg0) setCGPointFields(env, arg0, lparg0);
+	OS_NATIVE_EXIT(env, that, CGPostMouseEvent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGPostScrollWheelEvent
+JNIEXPORT jint JNICALL OS_NATIVE(CGPostScrollWheelEvent)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CGPostScrollWheelEvent_FUNC);
+	rc = (jint)CGPostScrollWheelEvent((CGWheelCount)arg0, (int32_t)arg1);
+	OS_NATIVE_EXIT(env, that, CGPostScrollWheelEvent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGRect_1sizeof
+JNIEXPORT jint JNICALL OS_NATIVE(CGRect_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CGRect_1sizeof_FUNC);
+	rc = (jint)CGRect_sizeof();
+	OS_NATIVE_EXIT(env, that, CGRect_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGSetLocalEventsFilterDuringSuppressionState
+JNIEXPORT jint JNICALL OS_NATIVE(CGSetLocalEventsFilterDuringSuppressionState)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CGSetLocalEventsFilterDuringSuppressionState_FUNC);
+	rc = (jint)CGSetLocalEventsFilterDuringSuppressionState((CGEventFilterMask)arg0, (CGEventSuppressionState)arg1);
+	OS_NATIVE_EXIT(env, that, CGSetLocalEventsFilterDuringSuppressionState_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGSetLocalEventsSuppressionInterval
+JNIEXPORT jint JNICALL OS_NATIVE(CGSetLocalEventsSuppressionInterval)
+	(JNIEnv *env, jclass that, jdouble arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CGSetLocalEventsSuppressionInterval_FUNC);
+	rc = (jint)CGSetLocalEventsSuppressionInterval((CFTimeInterval)arg0);
+	OS_NATIVE_EXIT(env, that, CGSetLocalEventsSuppressionInterval_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGSize_1sizeof
+JNIEXPORT jint JNICALL OS_NATIVE(CGSize_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CGSize_1sizeof_FUNC);
+	rc = (jint)CGSize_sizeof();
+	OS_NATIVE_EXIT(env, that, CGSize_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CGWarpMouseCursorPosition
+JNIEXPORT jint JNICALL OS_NATIVE(CGWarpMouseCursorPosition)
+	(JNIEnv *env, jclass that, jobject arg0)
+{
+	CGPoint _arg0, *lparg0=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CGWarpMouseCursorPosition_FUNC);
+	if (arg0) if ((lparg0 = getCGPointFields(env, arg0, &_arg0)) == NULL) goto fail;
+	rc = (jint)CGWarpMouseCursorPosition(*lparg0);
+fail:
+	if (arg0 && lparg0) setCGPointFields(env, arg0, lparg0);
+	OS_NATIVE_EXIT(env, that, CGWarpMouseCursorPosition_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CPSSetProcessName
+JNIEXPORT jint JNICALL OS_NATIVE(CPSSetProcessName)
+	(JNIEnv *env, jclass that, jintArray arg0, jintLong arg1)
+{
+	jint *lparg0=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CPSSetProcessName_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL)) == NULL) goto fail;
+	rc = (jint)CPSSetProcessName(lparg0, arg1);
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+	OS_NATIVE_EXIT(env, that, CPSSetProcessName_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CancelMenuTracking
+JNIEXPORT jint JNICALL OS_NATIVE(CancelMenuTracking)
+	(JNIEnv *env, jclass that, jintLong arg0, jboolean arg1, jint arg2)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CancelMenuTracking_FUNC);
+/*
+	rc = (jint)CancelMenuTracking(arg0, arg1, arg2);
+*/
+	{
+		LOAD_FUNCTION(fp, CancelMenuTracking)
+		if (fp) {
+			rc = (jint)((jint (CALLING_CONVENTION*)(jintLong, jboolean, jint))fp)(arg0, arg1, arg2);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, CancelMenuTracking_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CloseRgn
+JNIEXPORT void JNICALL OS_NATIVE(CloseRgn)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	OS_NATIVE_ENTER(env, that, CloseRgn_FUNC);
+/*
+	CloseRgn(arg0);
+*/
+	{
+		LOAD_FUNCTION(fp, CloseRgn)
+		if (fp) {
+			((void (CALLING_CONVENTION*)(jintLong))fp)(arg0);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, CloseRgn_FUNC);
+}
+#endif
+
+#ifndef NO_CopyRgn
+JNIEXPORT void JNICALL OS_NATIVE(CopyRgn)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	OS_NATIVE_ENTER(env, that, CopyRgn_FUNC);
+/*
+	CopyRgn(arg0, arg1);
+*/
+	{
+		LOAD_FUNCTION(fp, CopyRgn)
+		if (fp) {
+			((void (CALLING_CONVENTION*)(jintLong, jintLong))fp)(arg0, arg1);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, CopyRgn_FUNC);
+}
+#endif
+
+#ifndef NO_DeleteGlobalRef
+JNIEXPORT void JNICALL OS_NATIVE(DeleteGlobalRef)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	OS_NATIVE_ENTER(env, that, DeleteGlobalRef_FUNC);
+	(*env)->DeleteGlobalRef(env, (jobject)arg0);
+	OS_NATIVE_EXIT(env, that, DeleteGlobalRef_FUNC);
+}
+#endif
+
+#ifndef NO_DiffRgn
+JNIEXPORT void JNICALL OS_NATIVE(DiffRgn)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2)
+{
+	OS_NATIVE_ENTER(env, that, DiffRgn_FUNC);
+/*
+	DiffRgn(arg0, arg1, arg2);
+*/
+	{
+		LOAD_FUNCTION(fp, DiffRgn)
+		if (fp) {
+			((void (CALLING_CONVENTION*)(jintLong, jintLong, jintLong))fp)(arg0, arg1, arg2);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, DiffRgn_FUNC);
+}
+#endif
+
+#ifndef NO_DisposeRgn
+JNIEXPORT void JNICALL OS_NATIVE(DisposeRgn)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	OS_NATIVE_ENTER(env, that, DisposeRgn_FUNC);
+/*
+	DisposeRgn(arg0);
+*/
+	{
+		LOAD_FUNCTION(fp, DisposeRgn)
+		if (fp) {
+			((void (CALLING_CONVENTION*)(jintLong))fp)(arg0);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, DisposeRgn_FUNC);
+}
+#endif
+
+#ifndef NO_EmptyRgn
+JNIEXPORT jboolean JNICALL OS_NATIVE(EmptyRgn)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, EmptyRgn_FUNC);
+/*
+	rc = (jboolean)EmptyRgn(arg0);
+*/
+	{
+		LOAD_FUNCTION(fp, EmptyRgn)
+		if (fp) {
+			rc = (jboolean)((jboolean (CALLING_CONVENTION*)(jintLong))fp)(arg0);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, EmptyRgn_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FSPathMakeRef
+JNIEXPORT jint JNICALL OS_NATIVE(FSPathMakeRef)
+	(JNIEnv *env, jclass that, jintLong arg0, jbyteArray arg1, jbooleanArray arg2)
+{
+	jbyte *lparg1=NULL;
+	jboolean *lparg2=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FSPathMakeRef_FUNC);
+	if (arg1) if ((lparg1 = (*env)->GetByteArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	if (arg2) if ((lparg2 = (*env)->GetBooleanArrayElements(env, arg2, NULL)) == NULL) goto fail;
+/*
+	rc = (jint)FSPathMakeRef((const UInt8 *)arg0, (FSRef *)lparg1, (Boolean *)lparg2);
+*/
+	{
+		LOAD_FUNCTION(fp, FSPathMakeRef)
+		if (fp) {
+			rc = (jint)((jint (CALLING_CONVENTION*)(const UInt8 *, FSRef *, Boolean *))fp)((const UInt8 *)arg0, (FSRef *)lparg1, (Boolean *)lparg2);
+		}
+	}
+fail:
+	if (arg2 && lparg2) (*env)->ReleaseBooleanArrayElements(env, arg2, lparg2, 0);
+	if (arg1 && lparg1) (*env)->ReleaseByteArrayElements(env, arg1, lparg1, 0);
+	OS_NATIVE_EXIT(env, that, FSPathMakeRef_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Gestalt
+JNIEXPORT jint JNICALL OS_NATIVE(Gestalt)
+	(JNIEnv *env, jclass that, jint arg0, jintArray arg1)
+{
+	jint *lparg1=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Gestalt_FUNC);
+	if (arg1) if ((lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	rc = (jint)Gestalt(arg0, lparg1);
+fail:
+	if (arg1 && lparg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
+	OS_NATIVE_EXIT(env, that, Gestalt_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GetCurrentButtonState
+JNIEXPORT jint JNICALL OS_NATIVE(GetCurrentButtonState)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GetCurrentButtonState_FUNC);
+/*
+	rc = (jint)GetCurrentButtonState();
+*/
+	{
+		LOAD_FUNCTION(fp, GetCurrentButtonState)
+		if (fp) {
+			rc = (jint)((jint (CALLING_CONVENTION*)())fp)();
+		}
+	}
+	OS_NATIVE_EXIT(env, that, GetCurrentButtonState_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GetCurrentProcess
+JNIEXPORT jint JNICALL OS_NATIVE(GetCurrentProcess)
+	(JNIEnv *env, jclass that, jintArray arg0)
+{
+	jint *lparg0=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GetCurrentProcess_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL)) == NULL) goto fail;
+	rc = (jint)GetCurrentProcess((ProcessSerialNumber *)lparg0);
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+	OS_NATIVE_EXIT(env, that, GetCurrentProcess_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GetDblTime
+JNIEXPORT jint JNICALL OS_NATIVE(GetDblTime)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GetDblTime_FUNC);
+/*
+	rc = (jint)GetDblTime();
+*/
+	{
+		LOAD_FUNCTION(fp, GetDblTime)
+		if (fp) {
+			rc = (jint)((jint (CALLING_CONVENTION*)())fp)();
+		}
+	}
+	OS_NATIVE_EXIT(env, that, GetDblTime_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GetRegionBounds
+JNIEXPORT void JNICALL OS_NATIVE(GetRegionBounds)
+	(JNIEnv *env, jclass that, jintLong arg0, jshortArray arg1)
+{
+	jshort *lparg1=NULL;
+	OS_NATIVE_ENTER(env, that, GetRegionBounds_FUNC);
+	if (arg1) if ((lparg1 = (*env)->GetShortArrayElements(env, arg1, NULL)) == NULL) goto fail;
+/*
+	GetRegionBounds(arg0, lparg1);
+*/
+	{
+		LOAD_FUNCTION(fp, GetRegionBounds)
+		if (fp) {
+			((void (CALLING_CONVENTION*)(jintLong, jshort *))fp)(arg0, lparg1);
+		}
+	}
+fail:
+	if (arg1 && lparg1) (*env)->ReleaseShortArrayElements(env, arg1, lparg1, 0);
+	OS_NATIVE_EXIT(env, that, GetRegionBounds_FUNC);
+}
+#endif
+
+#ifndef NO_GetThemeMetric
+JNIEXPORT void JNICALL OS_NATIVE(GetThemeMetric)
+	(JNIEnv *env, jclass that, jint arg0, jintArray arg1)
+{
+	jint *lparg1=NULL;
+	OS_NATIVE_ENTER(env, that, GetThemeMetric_FUNC);
+	if (arg1) if ((lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL)) == NULL) goto fail;
+/*
+	GetThemeMetric(arg0, (SInt32 *)lparg1);
+*/
+	{
+		LOAD_FUNCTION(fp, GetThemeMetric)
+		if (fp) {
+			((void (CALLING_CONVENTION*)(jint, SInt32 *))fp)(arg0, (SInt32 *)lparg1);
+		}
+	}
+fail:
+	if (arg1 && lparg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
+	OS_NATIVE_EXIT(env, that, GetThemeMetric_FUNC);
+}
+#endif
+
+#ifndef NO_HIThemeDrawFocusRect
+JNIEXPORT jint JNICALL OS_NATIVE(HIThemeDrawFocusRect)
+	(JNIEnv *env, jclass that, jobject arg0, jboolean arg1, jintLong arg2, jint arg3)
+{
+	CGRect _arg0, *lparg0=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, HIThemeDrawFocusRect_FUNC);
+	if (arg0) if ((lparg0 = getCGRectFields(env, arg0, &_arg0)) == NULL) goto fail;
+/*
+	rc = (jint)HIThemeDrawFocusRect(lparg0, arg1, (CGContextRef)arg2, arg3);
+*/
+	{
+		LOAD_FUNCTION(fp, HIThemeDrawFocusRect)
+		if (fp) {
+			rc = (jint)((jint (CALLING_CONVENTION*)(CGRect *, jboolean, CGContextRef, jint))fp)(lparg0, arg1, (CGContextRef)arg2, arg3);
+		}
+	}
+fail:
+	if (arg0 && lparg0) setCGRectFields(env, arg0, lparg0);
+	OS_NATIVE_EXIT(env, that, HIThemeDrawFocusRect_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_LMGetKbdType
+JNIEXPORT jbyte JNICALL OS_NATIVE(LMGetKbdType)
+	(JNIEnv *env, jclass that)
+{
+	jbyte rc = 0;
+	OS_NATIVE_ENTER(env, that, LMGetKbdType_FUNC);
+/*
+	rc = (jbyte)LMGetKbdType();
+*/
+	{
+		LOAD_FUNCTION(fp, LMGetKbdType)
+		if (fp) {
+			rc = (jbyte)((jbyte (CALLING_CONVENTION*)())fp)();
+		}
+	}
+	OS_NATIVE_EXIT(env, that, LMGetKbdType_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_LineTo
+JNIEXPORT void JNICALL OS_NATIVE(LineTo)
+	(JNIEnv *env, jclass that, jshort arg0, jshort arg1)
+{
+	OS_NATIVE_ENTER(env, that, LineTo_FUNC);
+/*
+	LineTo(arg0, arg1);
+*/
+	{
+		LOAD_FUNCTION(fp, LineTo)
+		if (fp) {
+			((void (CALLING_CONVENTION*)(jshort, jshort))fp)(arg0, arg1);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, LineTo_FUNC);
+}
+#endif
+
+#ifndef NO_MoveTo
+JNIEXPORT void JNICALL OS_NATIVE(MoveTo)
+	(JNIEnv *env, jclass that, jshort arg0, jshort arg1)
+{
+	OS_NATIVE_ENTER(env, that, MoveTo_FUNC);
+/*
+	MoveTo(arg0, arg1);
+*/
+	{
+		LOAD_FUNCTION(fp, MoveTo)
+		if (fp) {
+			((void (CALLING_CONVENTION*)(jshort, jshort))fp)(arg0, arg1);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, MoveTo_FUNC);
+}
+#endif
+
+#ifndef NO_NSAccessibilityActionDescription
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityActionDescription)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityActionDescription_FUNC);
+	rc = (jintLong)NSAccessibilityActionDescription((NSString*)arg0);
+	OS_NATIVE_EXIT(env, that, NSAccessibilityActionDescription_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityButtonRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityButtonRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityButtonRole_FUNC);
+	rc = (jintLong)NSAccessibilityButtonRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityButtonRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityCheckBoxRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityCheckBoxRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityCheckBoxRole_FUNC);
+	rc = (jintLong)NSAccessibilityCheckBoxRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityCheckBoxRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityChildrenAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityChildrenAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityChildrenAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityChildrenAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityChildrenAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityColumnRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityColumnRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityColumnRole_FUNC);
+	rc = (jintLong)NSAccessibilityColumnRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityColumnRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityComboBoxRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityComboBoxRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityComboBoxRole_FUNC);
+	rc = (jintLong)NSAccessibilityComboBoxRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityComboBoxRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityConfirmAction
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityConfirmAction)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityConfirmAction_FUNC);
+	rc = (jintLong)NSAccessibilityConfirmAction;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityConfirmAction_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityContentsAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityContentsAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityContentsAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityContentsAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityContentsAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityDescriptionAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityDescriptionAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityDescriptionAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityDescriptionAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityDescriptionAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityDialogSubrole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityDialogSubrole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityDialogSubrole_FUNC);
+	rc = (jintLong)NSAccessibilityDialogSubrole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityDialogSubrole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityEnabledAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityEnabledAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityEnabledAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityEnabledAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityEnabledAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityExpandedAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityExpandedAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityExpandedAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityExpandedAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityExpandedAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityFloatingWindowSubrole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityFloatingWindowSubrole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityFloatingWindowSubrole_FUNC);
+	rc = (jintLong)NSAccessibilityFloatingWindowSubrole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityFloatingWindowSubrole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityFocusedAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityFocusedAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityFocusedAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityFocusedAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityFocusedAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityFocusedUIElementChangedNotification
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityFocusedUIElementChangedNotification)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityFocusedUIElementChangedNotification_FUNC);
+	rc = (jintLong)NSAccessibilityFocusedUIElementChangedNotification;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityFocusedUIElementChangedNotification_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityGridRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityGridRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityGridRole_FUNC);
+	rc = (jintLong)NSAccessibilityGridRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityGridRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityGroupRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityGroupRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityGroupRole_FUNC);
+	rc = (jintLong)NSAccessibilityGroupRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityGroupRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityHelpAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityHelpAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityHelpAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityHelpAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityHelpAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityHelpTagRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityHelpTagRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityHelpTagRole_FUNC);
+	rc = (jintLong)NSAccessibilityHelpTagRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityHelpTagRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityHorizontalOrientationValue
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityHorizontalOrientationValue)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityHorizontalOrientationValue_FUNC);
+	rc = (jintLong)NSAccessibilityHorizontalOrientationValue;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityHorizontalOrientationValue_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityHorizontalScrollBarAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityHorizontalScrollBarAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityHorizontalScrollBarAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityHorizontalScrollBarAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityHorizontalScrollBarAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityImageRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityImageRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityImageRole_FUNC);
+	rc = (jintLong)NSAccessibilityImageRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityImageRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityIncrementorRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityIncrementorRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityIncrementorRole_FUNC);
+	rc = (jintLong)NSAccessibilityIncrementorRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityIncrementorRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityInsertionPointLineNumberAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityInsertionPointLineNumberAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityInsertionPointLineNumberAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityInsertionPointLineNumberAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityInsertionPointLineNumberAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityLabelValueAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityLabelValueAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityLabelValueAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityLabelValueAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityLabelValueAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityLineForIndexParameterizedAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityLineForIndexParameterizedAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityLineForIndexParameterizedAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityLineForIndexParameterizedAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityLineForIndexParameterizedAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityLinkRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityLinkRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityLinkRole_FUNC);
+	rc = (jintLong)NSAccessibilityLinkRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityLinkRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityLinkTextAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityLinkTextAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityLinkTextAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityLinkTextAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityLinkTextAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityListRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityListRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityListRole_FUNC);
+	rc = (jintLong)NSAccessibilityListRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityListRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityMaxValueAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityMaxValueAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityMaxValueAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityMaxValueAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityMaxValueAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityMenuBarRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityMenuBarRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityMenuBarRole_FUNC);
+	rc = (jintLong)NSAccessibilityMenuBarRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityMenuBarRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityMenuButtonRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityMenuButtonRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityMenuButtonRole_FUNC);
+	rc = (jintLong)NSAccessibilityMenuButtonRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityMenuButtonRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityMenuItemRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityMenuItemRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityMenuItemRole_FUNC);
+	rc = (jintLong)NSAccessibilityMenuItemRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityMenuItemRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityMenuRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityMenuRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityMenuRole_FUNC);
+	rc = (jintLong)NSAccessibilityMenuRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityMenuRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityMinValueAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityMinValueAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityMinValueAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityMinValueAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityMinValueAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityNextContentsAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityNextContentsAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityNextContentsAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityNextContentsAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityNextContentsAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityNumberOfCharactersAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityNumberOfCharactersAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityNumberOfCharactersAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityNumberOfCharactersAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityNumberOfCharactersAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityOrientationAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityOrientationAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityOrientationAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityOrientationAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityOrientationAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityOutlineRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityOutlineRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityOutlineRole_FUNC);
+	rc = (jintLong)NSAccessibilityOutlineRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityOutlineRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityOutlineRowSubrole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityOutlineRowSubrole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityOutlineRowSubrole_FUNC);
+	rc = (jintLong)NSAccessibilityOutlineRowSubrole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityOutlineRowSubrole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityParentAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityParentAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityParentAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityParentAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityParentAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityPopUpButtonRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityPopUpButtonRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityPopUpButtonRole_FUNC);
+	rc = (jintLong)NSAccessibilityPopUpButtonRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityPopUpButtonRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityPositionAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityPositionAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityPositionAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityPositionAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityPositionAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityPostNotification
+JNIEXPORT void JNICALL OS_NATIVE(NSAccessibilityPostNotification)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	OS_NATIVE_ENTER(env, that, NSAccessibilityPostNotification_FUNC);
+	NSAccessibilityPostNotification((id)arg0, (NSString*)arg1);
+	OS_NATIVE_EXIT(env, that, NSAccessibilityPostNotification_FUNC);
+}
+#endif
+
+#ifndef NO_NSAccessibilityPressAction
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityPressAction)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityPressAction_FUNC);
+	rc = (jintLong)NSAccessibilityPressAction;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityPressAction_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityPreviousContentsAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityPreviousContentsAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityPreviousContentsAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityPreviousContentsAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityPreviousContentsAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityProgressIndicatorRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityProgressIndicatorRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityProgressIndicatorRole_FUNC);
+	rc = (jintLong)NSAccessibilityProgressIndicatorRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityProgressIndicatorRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityRTFForRangeParameterizedAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityRTFForRangeParameterizedAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityRTFForRangeParameterizedAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityRTFForRangeParameterizedAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityRTFForRangeParameterizedAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityRadioButtonRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityRadioButtonRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityRadioButtonRole_FUNC);
+	rc = (jintLong)NSAccessibilityRadioButtonRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityRadioButtonRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityRadioGroupRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityRadioGroupRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityRadioGroupRole_FUNC);
+	rc = (jintLong)NSAccessibilityRadioGroupRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityRadioGroupRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityRaiseBadArgumentException
+JNIEXPORT void JNICALL OS_NATIVE(NSAccessibilityRaiseBadArgumentException)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2)
+{
+	OS_NATIVE_ENTER(env, that, NSAccessibilityRaiseBadArgumentException_FUNC);
+	NSAccessibilityRaiseBadArgumentException((id)arg0, (NSString*)arg1, (id)arg2);
+	OS_NATIVE_EXIT(env, that, NSAccessibilityRaiseBadArgumentException_FUNC);
+}
+#endif
+
+#ifndef NO_NSAccessibilityRangeForIndexParameterizedAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityRangeForIndexParameterizedAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityRangeForIndexParameterizedAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityRangeForIndexParameterizedAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityRangeForIndexParameterizedAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityRangeForLineParameterizedAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityRangeForLineParameterizedAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityRangeForLineParameterizedAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityRangeForLineParameterizedAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityRangeForLineParameterizedAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityRangeForPositionParameterizedAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityRangeForPositionParameterizedAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityRangeForPositionParameterizedAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityRangeForPositionParameterizedAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityRangeForPositionParameterizedAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityRoleAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityRoleAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityRoleAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityRoleAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityRoleAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityRoleDescription
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityRoleDescription)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityRoleDescription_FUNC);
+	rc = (jintLong)NSAccessibilityRoleDescription((NSString*)arg0, (NSString*)arg1);
+	OS_NATIVE_EXIT(env, that, NSAccessibilityRoleDescription_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityRoleDescriptionAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityRoleDescriptionAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityRoleDescriptionAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityRoleDescriptionAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityRoleDescriptionAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityRoleDescriptionForUIElement
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityRoleDescriptionForUIElement)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityRoleDescriptionForUIElement_FUNC);
+	rc = (jintLong)NSAccessibilityRoleDescriptionForUIElement((id)arg0);
+	OS_NATIVE_EXIT(env, that, NSAccessibilityRoleDescriptionForUIElement_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityRowRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityRowRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityRowRole_FUNC);
+	rc = (jintLong)NSAccessibilityRowRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityRowRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityScrollAreaRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityScrollAreaRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityScrollAreaRole_FUNC);
+	rc = (jintLong)NSAccessibilityScrollAreaRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityScrollAreaRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityScrollBarRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityScrollBarRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityScrollBarRole_FUNC);
+	rc = (jintLong)NSAccessibilityScrollBarRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityScrollBarRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilitySelectedAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilitySelectedAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilitySelectedAttribute_FUNC);
+	rc = (jintLong)NSAccessibilitySelectedAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilitySelectedAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilitySelectedChildrenAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilitySelectedChildrenAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilitySelectedChildrenAttribute_FUNC);
+	rc = (jintLong)NSAccessibilitySelectedChildrenAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilitySelectedChildrenAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilitySelectedChildrenChangedNotification
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilitySelectedChildrenChangedNotification)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilitySelectedChildrenChangedNotification_FUNC);
+	rc = (jintLong)NSAccessibilitySelectedChildrenChangedNotification;
+	OS_NATIVE_EXIT(env, that, NSAccessibilitySelectedChildrenChangedNotification_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilitySelectedTextAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilitySelectedTextAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilitySelectedTextAttribute_FUNC);
+	rc = (jintLong)NSAccessibilitySelectedTextAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilitySelectedTextAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilitySelectedTextChangedNotification
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilitySelectedTextChangedNotification)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilitySelectedTextChangedNotification_FUNC);
+	rc = (jintLong)NSAccessibilitySelectedTextChangedNotification;
+	OS_NATIVE_EXIT(env, that, NSAccessibilitySelectedTextChangedNotification_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilitySelectedTextRangeAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilitySelectedTextRangeAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilitySelectedTextRangeAttribute_FUNC);
+	rc = (jintLong)NSAccessibilitySelectedTextRangeAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilitySelectedTextRangeAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilitySelectedTextRangesAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilitySelectedTextRangesAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilitySelectedTextRangesAttribute_FUNC);
+	rc = (jintLong)NSAccessibilitySelectedTextRangesAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilitySelectedTextRangesAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityServesAsTitleForUIElementsAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityServesAsTitleForUIElementsAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityServesAsTitleForUIElementsAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityServesAsTitleForUIElementsAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityServesAsTitleForUIElementsAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilitySizeAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilitySizeAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilitySizeAttribute_FUNC);
+	rc = (jintLong)NSAccessibilitySizeAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilitySizeAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilitySliderRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilitySliderRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilitySliderRole_FUNC);
+	rc = (jintLong)NSAccessibilitySliderRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilitySliderRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilitySortButtonRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilitySortButtonRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilitySortButtonRole_FUNC);
+	rc = (jintLong)NSAccessibilitySortButtonRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilitySortButtonRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilitySplitterRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilitySplitterRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilitySplitterRole_FUNC);
+	rc = (jintLong)NSAccessibilitySplitterRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilitySplitterRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityStandardWindowSubrole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityStandardWindowSubrole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityStandardWindowSubrole_FUNC);
+	rc = (jintLong)NSAccessibilityStandardWindowSubrole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityStandardWindowSubrole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityStaticTextRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityStaticTextRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityStaticTextRole_FUNC);
+	rc = (jintLong)NSAccessibilityStaticTextRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityStaticTextRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityStringForRangeParameterizedAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityStringForRangeParameterizedAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityStringForRangeParameterizedAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityStringForRangeParameterizedAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityStringForRangeParameterizedAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityStyleRangeForIndexParameterizedAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityStyleRangeForIndexParameterizedAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityStyleRangeForIndexParameterizedAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityStyleRangeForIndexParameterizedAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityStyleRangeForIndexParameterizedAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilitySubroleAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilitySubroleAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilitySubroleAttribute_FUNC);
+	rc = (jintLong)NSAccessibilitySubroleAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilitySubroleAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilitySystemDialogSubrole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilitySystemDialogSubrole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilitySystemDialogSubrole_FUNC);
+	rc = (jintLong)NSAccessibilitySystemDialogSubrole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilitySystemDialogSubrole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityTabGroupRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityTabGroupRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityTabGroupRole_FUNC);
+	rc = (jintLong)NSAccessibilityTabGroupRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityTabGroupRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityTableRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityTableRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityTableRole_FUNC);
+	rc = (jintLong)NSAccessibilityTableRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityTableRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityTableRowSubrole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityTableRowSubrole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityTableRowSubrole_FUNC);
+	rc = (jintLong)NSAccessibilityTableRowSubrole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityTableRowSubrole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityTabsAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityTabsAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityTabsAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityTabsAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityTabsAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityTextAreaRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityTextAreaRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityTextAreaRole_FUNC);
+	rc = (jintLong)NSAccessibilityTextAreaRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityTextAreaRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityTextFieldRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityTextFieldRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityTextFieldRole_FUNC);
+	rc = (jintLong)NSAccessibilityTextFieldRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityTextFieldRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityTextLinkSubrole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityTextLinkSubrole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityTextLinkSubrole_FUNC);
+	rc = (jintLong)NSAccessibilityTextLinkSubrole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityTextLinkSubrole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityTitleAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityTitleAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityTitleAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityTitleAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityTitleAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityTitleUIElementAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityTitleUIElementAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityTitleUIElementAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityTitleUIElementAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityTitleUIElementAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityToolbarRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityToolbarRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityToolbarRole_FUNC);
+	rc = (jintLong)NSAccessibilityToolbarRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityToolbarRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityTopLevelUIElementAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityTopLevelUIElementAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityTopLevelUIElementAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityTopLevelUIElementAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityTopLevelUIElementAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityUnignoredAncestor
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityUnignoredAncestor)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityUnignoredAncestor_FUNC);
+	rc = (jintLong)NSAccessibilityUnignoredAncestor((id)arg0);
+	OS_NATIVE_EXIT(env, that, NSAccessibilityUnignoredAncestor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityUnignoredChildren
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityUnignoredChildren)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityUnignoredChildren_FUNC);
+	rc = (jintLong)NSAccessibilityUnignoredChildren((NSArray*)arg0);
+	OS_NATIVE_EXIT(env, that, NSAccessibilityUnignoredChildren_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityUnignoredChildrenForOnlyChild
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityUnignoredChildrenForOnlyChild)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityUnignoredChildrenForOnlyChild_FUNC);
+	rc = (jintLong)NSAccessibilityUnignoredChildrenForOnlyChild((id)arg0);
+	OS_NATIVE_EXIT(env, that, NSAccessibilityUnignoredChildrenForOnlyChild_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityUnignoredDescendant
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityUnignoredDescendant)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityUnignoredDescendant_FUNC);
+	rc = (jintLong)NSAccessibilityUnignoredDescendant((id)arg0);
+	OS_NATIVE_EXIT(env, that, NSAccessibilityUnignoredDescendant_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityUnknownRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityUnknownRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityUnknownRole_FUNC);
+	rc = (jintLong)NSAccessibilityUnknownRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityUnknownRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityUnknownSubrole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityUnknownSubrole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityUnknownSubrole_FUNC);
+	rc = (jintLong)NSAccessibilityUnknownSubrole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityUnknownSubrole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityValueAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityValueAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityValueAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityValueAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityValueAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityValueChangedNotification
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityValueChangedNotification)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityValueChangedNotification_FUNC);
+	rc = (jintLong)NSAccessibilityValueChangedNotification;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityValueChangedNotification_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityValueDescriptionAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityValueDescriptionAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityValueDescriptionAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityValueDescriptionAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityValueDescriptionAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityValueIndicatorRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityValueIndicatorRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityValueIndicatorRole_FUNC);
+	rc = (jintLong)NSAccessibilityValueIndicatorRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityValueIndicatorRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityVerticalOrientationValue
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityVerticalOrientationValue)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityVerticalOrientationValue_FUNC);
+	rc = (jintLong)NSAccessibilityVerticalOrientationValue;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityVerticalOrientationValue_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityVerticalScrollBarAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityVerticalScrollBarAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityVerticalScrollBarAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityVerticalScrollBarAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityVerticalScrollBarAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityVisibleCharacterRangeAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityVisibleCharacterRangeAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityVisibleCharacterRangeAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityVisibleCharacterRangeAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityVisibleCharacterRangeAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityVisibleChildrenAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityVisibleChildrenAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityVisibleChildrenAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityVisibleChildrenAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityVisibleChildrenAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityWindowAttribute
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityWindowAttribute)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityWindowAttribute_FUNC);
+	rc = (jintLong)NSAccessibilityWindowAttribute;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityWindowAttribute_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAccessibilityWindowRole
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSAccessibilityWindowRole)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAccessibilityWindowRole_FUNC);
+	rc = (jintLong)NSAccessibilityWindowRole;
+	OS_NATIVE_EXIT(env, that, NSAccessibilityWindowRole_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSAffineTransformStruct_1sizeof
+JNIEXPORT jint JNICALL OS_NATIVE(NSAffineTransformStruct_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, NSAffineTransformStruct_1sizeof_FUNC);
+	rc = (jint)NSAffineTransformStruct_sizeof();
+	OS_NATIVE_EXIT(env, that, NSAffineTransformStruct_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSApplicationDidChangeScreenParametersNotification
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSApplicationDidChangeScreenParametersNotification)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSApplicationDidChangeScreenParametersNotification_FUNC);
+	rc = (jintLong)NSApplicationDidChangeScreenParametersNotification;
+	OS_NATIVE_EXIT(env, that, NSApplicationDidChangeScreenParametersNotification_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSBackgroundColorAttributeName
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSBackgroundColorAttributeName)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSBackgroundColorAttributeName_FUNC);
+	rc = (jintLong)NSBackgroundColorAttributeName;
+	OS_NATIVE_EXIT(env, that, NSBackgroundColorAttributeName_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSBaselineOffsetAttributeName
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSBaselineOffsetAttributeName)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSBaselineOffsetAttributeName_FUNC);
+	rc = (jintLong)NSBaselineOffsetAttributeName;
+	OS_NATIVE_EXIT(env, that, NSBaselineOffsetAttributeName_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSBeep
+JNIEXPORT void JNICALL OS_NATIVE(NSBeep)
+	(JNIEnv *env, jclass that)
+{
+	OS_NATIVE_ENTER(env, that, NSBeep_FUNC);
+	NSBeep();
+	OS_NATIVE_EXIT(env, that, NSBeep_FUNC);
+}
+#endif
+
+#ifndef NO_NSBitsPerPixelFromDepth
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSBitsPerPixelFromDepth)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSBitsPerPixelFromDepth_FUNC);
+	rc = (jintLong)NSBitsPerPixelFromDepth((NSWindowDepth)arg0);
+	OS_NATIVE_EXIT(env, that, NSBitsPerPixelFromDepth_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSCalibratedRGBColorSpace
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSCalibratedRGBColorSpace)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSCalibratedRGBColorSpace_FUNC);
+	rc = (jintLong)NSCalibratedRGBColorSpace;
+	OS_NATIVE_EXIT(env, that, NSCalibratedRGBColorSpace_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSCopyBits
+JNIEXPORT void JNICALL OS_NATIVE(NSCopyBits)
+	(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jobject arg2)
+{
+	NSRect _arg1, *lparg1=NULL;
+	NSPoint _arg2, *lparg2=NULL;
+	OS_NATIVE_ENTER(env, that, NSCopyBits_FUNC);
+	if (arg1) if ((lparg1 = getNSRectFields(env, arg1, &_arg1)) == NULL) goto fail;
+	if (arg2) if ((lparg2 = getNSPointFields(env, arg2, &_arg2)) == NULL) goto fail;
+	NSCopyBits((NSInteger)arg0, *lparg1, *lparg2);
+fail:
+	if (arg2 && lparg2) setNSPointFields(env, arg2, lparg2);
+	if (arg1 && lparg1) setNSRectFields(env, arg1, lparg1);
+	OS_NATIVE_EXIT(env, that, NSCopyBits_FUNC);
+}
+#endif
+
+#ifndef NO_NSDefaultRunLoopMode
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSDefaultRunLoopMode)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSDefaultRunLoopMode_FUNC);
+	rc = (jintLong)NSDefaultRunLoopMode;
+	OS_NATIVE_EXIT(env, that, NSDefaultRunLoopMode_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSDeviceRGBColorSpace
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSDeviceRGBColorSpace)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSDeviceRGBColorSpace_FUNC);
+	rc = (jintLong)NSDeviceRGBColorSpace;
+	OS_NATIVE_EXIT(env, that, NSDeviceRGBColorSpace_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSDeviceResolution
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSDeviceResolution)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSDeviceResolution_FUNC);
+	rc = (jintLong)NSDeviceResolution;
+	OS_NATIVE_EXIT(env, that, NSDeviceResolution_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSDragPboard
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSDragPboard)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSDragPboard_FUNC);
+	rc = (jintLong)NSDragPboard;
+	OS_NATIVE_EXIT(env, that, NSDragPboard_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSEqualRects
+JNIEXPORT jboolean JNICALL OS_NATIVE(NSEqualRects)
+	(JNIEnv *env, jclass that, jobject arg0, jobject arg1)
+{
+	NSRect _arg0, *lparg0=NULL;
+	NSRect _arg1, *lparg1=NULL;
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, NSEqualRects_FUNC);
+	if (arg0) if ((lparg0 = getNSRectFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg1) if ((lparg1 = getNSRectFields(env, arg1, &_arg1)) == NULL) goto fail;
+	rc = (jboolean)NSEqualRects(*lparg0, *lparg1);
+fail:
+	if (arg1 && lparg1) setNSRectFields(env, arg1, lparg1);
+	if (arg0 && lparg0) setNSRectFields(env, arg0, lparg0);
+	OS_NATIVE_EXIT(env, that, NSEqualRects_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSErrorFailingURLStringKey
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSErrorFailingURLStringKey)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSErrorFailingURLStringKey_FUNC);
+	rc = (jintLong)NSErrorFailingURLStringKey;
+	OS_NATIVE_EXIT(env, that, NSErrorFailingURLStringKey_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSEventTrackingRunLoopMode
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSEventTrackingRunLoopMode)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSEventTrackingRunLoopMode_FUNC);
+	rc = (jintLong)NSEventTrackingRunLoopMode;
+	OS_NATIVE_EXIT(env, that, NSEventTrackingRunLoopMode_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSFileTypeForHFSTypeCode
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSFileTypeForHFSTypeCode)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSFileTypeForHFSTypeCode_FUNC);
+	rc = (jintLong)NSFileTypeForHFSTypeCode((OSType)arg0);
+	OS_NATIVE_EXIT(env, that, NSFileTypeForHFSTypeCode_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSFilenamesPboardType
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSFilenamesPboardType)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSFilenamesPboardType_FUNC);
+	rc = (jintLong)NSFilenamesPboardType;
+	OS_NATIVE_EXIT(env, that, NSFilenamesPboardType_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSFontAttributeName
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSFontAttributeName)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSFontAttributeName_FUNC);
+	rc = (jintLong)NSFontAttributeName;
+	OS_NATIVE_EXIT(env, that, NSFontAttributeName_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSForegroundColorAttributeName
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSForegroundColorAttributeName)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSForegroundColorAttributeName_FUNC);
+	rc = (jintLong)NSForegroundColorAttributeName;
+	OS_NATIVE_EXIT(env, that, NSForegroundColorAttributeName_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSGetSizeAndAlignment
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSGetSizeAndAlignment)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLongArray arg1, jintLongArray arg2)
+{
+	jintLong *lparg1=NULL;
+	jintLong *lparg2=NULL;
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSGetSizeAndAlignment_FUNC);
+	if (arg1) if ((lparg1 = (*env)->GetIntLongArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	if (arg2) if ((lparg2 = (*env)->GetIntLongArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	rc = (jintLong)NSGetSizeAndAlignment((char*)arg0, (NSUInteger*)lparg1, (NSUInteger*)lparg2);
+fail:
+	if (arg2 && lparg2) (*env)->ReleaseIntLongArrayElements(env, arg2, lparg2, 0);
+	if (arg1 && lparg1) (*env)->ReleaseIntLongArrayElements(env, arg1, lparg1, 0);
+	OS_NATIVE_EXIT(env, that, NSGetSizeAndAlignment_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSHTMLPboardType
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSHTMLPboardType)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSHTMLPboardType_FUNC);
+	rc = (jintLong)NSHTMLPboardType;
+	OS_NATIVE_EXIT(env, that, NSHTMLPboardType_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSLinkAttributeName
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSLinkAttributeName)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSLinkAttributeName_FUNC);
+	rc = (jintLong)NSLinkAttributeName;
+	OS_NATIVE_EXIT(env, that, NSLinkAttributeName_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSNumberOfColorComponents
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSNumberOfColorComponents)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSNumberOfColorComponents_FUNC);
+	rc = (jintLong)NSNumberOfColorComponents((NSString*)arg0);
+	OS_NATIVE_EXIT(env, that, NSNumberOfColorComponents_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSObliquenessAttributeName
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSObliquenessAttributeName)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSObliquenessAttributeName_FUNC);
+	rc = (jintLong)NSObliquenessAttributeName;
+	OS_NATIVE_EXIT(env, that, NSObliquenessAttributeName_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSParagraphStyleAttributeName
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSParagraphStyleAttributeName)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSParagraphStyleAttributeName_FUNC);
+	rc = (jintLong)NSParagraphStyleAttributeName;
+	OS_NATIVE_EXIT(env, that, NSParagraphStyleAttributeName_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSPointInRect
+JNIEXPORT jboolean JNICALL OS_NATIVE(NSPointInRect)
+	(JNIEnv *env, jclass that, jobject arg0, jobject arg1)
+{
+	NSPoint _arg0, *lparg0=NULL;
+	NSRect _arg1, *lparg1=NULL;
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, NSPointInRect_FUNC);
+	if (arg0) if ((lparg0 = getNSPointFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg1) if ((lparg1 = getNSRectFields(env, arg1, &_arg1)) == NULL) goto fail;
+	rc = (jboolean)NSPointInRect(*lparg0, *lparg1);
+fail:
+	if (arg1 && lparg1) setNSRectFields(env, arg1, lparg1);
+	if (arg0 && lparg0) setNSPointFields(env, arg0, lparg0);
+	OS_NATIVE_EXIT(env, that, NSPointInRect_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSPoint_1sizeof
+JNIEXPORT jint JNICALL OS_NATIVE(NSPoint_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, NSPoint_1sizeof_FUNC);
+	rc = (jint)NSPoint_sizeof();
+	OS_NATIVE_EXIT(env, that, NSPoint_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSPrintAllPages
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSPrintAllPages)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSPrintAllPages_FUNC);
+	rc = (jintLong)NSPrintAllPages;
+	OS_NATIVE_EXIT(env, that, NSPrintAllPages_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSPrintCopies
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSPrintCopies)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSPrintCopies_FUNC);
+	rc = (jintLong)NSPrintCopies;
+	OS_NATIVE_EXIT(env, that, NSPrintCopies_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSPrintFirstPage
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSPrintFirstPage)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSPrintFirstPage_FUNC);
+	rc = (jintLong)NSPrintFirstPage;
+	OS_NATIVE_EXIT(env, that, NSPrintFirstPage_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSPrintJobDisposition
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSPrintJobDisposition)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSPrintJobDisposition_FUNC);
+	rc = (jintLong)NSPrintJobDisposition;
+	OS_NATIVE_EXIT(env, that, NSPrintJobDisposition_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSPrintLastPage
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSPrintLastPage)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSPrintLastPage_FUNC);
+	rc = (jintLong)NSPrintLastPage;
+	OS_NATIVE_EXIT(env, that, NSPrintLastPage_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSPrintMustCollate
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSPrintMustCollate)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSPrintMustCollate_FUNC);
+	rc = (jintLong)NSPrintMustCollate;
+	OS_NATIVE_EXIT(env, that, NSPrintMustCollate_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSPrintPreviewJob
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSPrintPreviewJob)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSPrintPreviewJob_FUNC);
+	rc = (jintLong)NSPrintPreviewJob;
+	OS_NATIVE_EXIT(env, that, NSPrintPreviewJob_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSPrintSaveJob
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSPrintSaveJob)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSPrintSaveJob_FUNC);
+	rc = (jintLong)NSPrintSaveJob;
+	OS_NATIVE_EXIT(env, that, NSPrintSaveJob_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSPrintSavePath
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSPrintSavePath)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSPrintSavePath_FUNC);
+	rc = (jintLong)NSPrintSavePath;
+	OS_NATIVE_EXIT(env, that, NSPrintSavePath_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSPrintScalingFactor
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSPrintScalingFactor)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSPrintScalingFactor_FUNC);
+	rc = (jintLong)NSPrintScalingFactor;
+	OS_NATIVE_EXIT(env, that, NSPrintScalingFactor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSPrintSpoolJob
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSPrintSpoolJob)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSPrintSpoolJob_FUNC);
+	rc = (jintLong)NSPrintSpoolJob;
+	OS_NATIVE_EXIT(env, that, NSPrintSpoolJob_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSRTFPboardType
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSRTFPboardType)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSRTFPboardType_FUNC);
+	rc = (jintLong)NSRTFPboardType;
+	OS_NATIVE_EXIT(env, that, NSRTFPboardType_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSRange_1sizeof
+JNIEXPORT jint JNICALL OS_NATIVE(NSRange_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, NSRange_1sizeof_FUNC);
+	rc = (jint)NSRange_sizeof();
+	OS_NATIVE_EXIT(env, that, NSRange_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSRect_1sizeof
+JNIEXPORT jint JNICALL OS_NATIVE(NSRect_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, NSRect_1sizeof_FUNC);
+	rc = (jint)NSRect_sizeof();
+	OS_NATIVE_EXIT(env, that, NSRect_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSSearchPathForDirectoriesInDomains
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSSearchPathForDirectoriesInDomains)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jboolean arg2)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSSearchPathForDirectoriesInDomains_FUNC);
+	rc = (jintLong)NSSearchPathForDirectoriesInDomains((NSSearchPathDirectory)arg0, (NSSearchPathDomainMask)arg1, (BOOL)arg2);
+	OS_NATIVE_EXIT(env, that, NSSearchPathForDirectoriesInDomains_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSSize_1sizeof
+JNIEXPORT jint JNICALL OS_NATIVE(NSSize_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, NSSize_1sizeof_FUNC);
+	rc = (jint)NSSize_sizeof();
+	OS_NATIVE_EXIT(env, that, NSSize_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSStrikethroughColorAttributeName
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSStrikethroughColorAttributeName)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSStrikethroughColorAttributeName_FUNC);
+	rc = (jintLong)NSStrikethroughColorAttributeName;
+	OS_NATIVE_EXIT(env, that, NSStrikethroughColorAttributeName_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSStrikethroughStyleAttributeName
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSStrikethroughStyleAttributeName)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSStrikethroughStyleAttributeName_FUNC);
+	rc = (jintLong)NSStrikethroughStyleAttributeName;
+	OS_NATIVE_EXIT(env, that, NSStrikethroughStyleAttributeName_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSStringPboardType
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSStringPboardType)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSStringPboardType_FUNC);
+	rc = (jintLong)NSStringPboardType;
+	OS_NATIVE_EXIT(env, that, NSStringPboardType_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSStrokeWidthAttributeName
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSStrokeWidthAttributeName)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSStrokeWidthAttributeName_FUNC);
+	rc = (jintLong)NSStrokeWidthAttributeName;
+	OS_NATIVE_EXIT(env, that, NSStrokeWidthAttributeName_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSSystemColorsDidChangeNotification
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSSystemColorsDidChangeNotification)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSSystemColorsDidChangeNotification_FUNC);
+	rc = (jintLong)NSSystemColorsDidChangeNotification;
+	OS_NATIVE_EXIT(env, that, NSSystemColorsDidChangeNotification_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSTIFFPboardType
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSTIFFPboardType)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSTIFFPboardType_FUNC);
+	rc = (jintLong)NSTIFFPboardType;
+	OS_NATIVE_EXIT(env, that, NSTIFFPboardType_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSTemporaryDirectory
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSTemporaryDirectory)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSTemporaryDirectory_FUNC);
+	rc = (jintLong)NSTemporaryDirectory();
+	OS_NATIVE_EXIT(env, that, NSTemporaryDirectory_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSToolbarCustomizeToolbarItemIdentifier
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSToolbarCustomizeToolbarItemIdentifier)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSToolbarCustomizeToolbarItemIdentifier_FUNC);
+	rc = (jintLong)NSToolbarCustomizeToolbarItemIdentifier;
+	OS_NATIVE_EXIT(env, that, NSToolbarCustomizeToolbarItemIdentifier_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSToolbarDidRemoveItemNotification
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSToolbarDidRemoveItemNotification)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSToolbarDidRemoveItemNotification_FUNC);
+	rc = (jintLong)NSToolbarDidRemoveItemNotification;
+	OS_NATIVE_EXIT(env, that, NSToolbarDidRemoveItemNotification_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSToolbarFlexibleSpaceItemIdentifier
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSToolbarFlexibleSpaceItemIdentifier)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSToolbarFlexibleSpaceItemIdentifier_FUNC);
+	rc = (jintLong)NSToolbarFlexibleSpaceItemIdentifier;
+	OS_NATIVE_EXIT(env, that, NSToolbarFlexibleSpaceItemIdentifier_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSToolbarPrintItemIdentifier
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSToolbarPrintItemIdentifier)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSToolbarPrintItemIdentifier_FUNC);
+	rc = (jintLong)NSToolbarPrintItemIdentifier;
+	OS_NATIVE_EXIT(env, that, NSToolbarPrintItemIdentifier_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSToolbarSeparatorItemIdentifier
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSToolbarSeparatorItemIdentifier)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSToolbarSeparatorItemIdentifier_FUNC);
+	rc = (jintLong)NSToolbarSeparatorItemIdentifier;
+	OS_NATIVE_EXIT(env, that, NSToolbarSeparatorItemIdentifier_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSToolbarShowColorsItemIdentifier
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSToolbarShowColorsItemIdentifier)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSToolbarShowColorsItemIdentifier_FUNC);
+	rc = (jintLong)NSToolbarShowColorsItemIdentifier;
+	OS_NATIVE_EXIT(env, that, NSToolbarShowColorsItemIdentifier_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSToolbarShowFontsItemIdentifier
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSToolbarShowFontsItemIdentifier)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSToolbarShowFontsItemIdentifier_FUNC);
+	rc = (jintLong)NSToolbarShowFontsItemIdentifier;
+	OS_NATIVE_EXIT(env, that, NSToolbarShowFontsItemIdentifier_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSToolbarSpaceItemIdentifier
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSToolbarSpaceItemIdentifier)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSToolbarSpaceItemIdentifier_FUNC);
+	rc = (jintLong)NSToolbarSpaceItemIdentifier;
+	OS_NATIVE_EXIT(env, that, NSToolbarSpaceItemIdentifier_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSToolbarWillAddItemNotification
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSToolbarWillAddItemNotification)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSToolbarWillAddItemNotification_FUNC);
+	rc = (jintLong)NSToolbarWillAddItemNotification;
+	OS_NATIVE_EXIT(env, that, NSToolbarWillAddItemNotification_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSURLPboardType
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSURLPboardType)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSURLPboardType_FUNC);
+	rc = (jintLong)NSURLPboardType;
+	OS_NATIVE_EXIT(env, that, NSURLPboardType_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSUnderlineColorAttributeName
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSUnderlineColorAttributeName)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSUnderlineColorAttributeName_FUNC);
+	rc = (jintLong)NSUnderlineColorAttributeName;
+	OS_NATIVE_EXIT(env, that, NSUnderlineColorAttributeName_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSUnderlineStyleAttributeName
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSUnderlineStyleAttributeName)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSUnderlineStyleAttributeName_FUNC);
+	rc = (jintLong)NSUnderlineStyleAttributeName;
+	OS_NATIVE_EXIT(env, that, NSUnderlineStyleAttributeName_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSViewGlobalFrameDidChangeNotification
+JNIEXPORT jintLong JNICALL OS_NATIVE(NSViewGlobalFrameDidChangeNotification)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NSViewGlobalFrameDidChangeNotification_FUNC);
+	rc = (jintLong)NSViewGlobalFrameDidChangeNotification;
+	OS_NATIVE_EXIT(env, that, NSViewGlobalFrameDidChangeNotification_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NewGlobalRef
+JNIEXPORT jintLong JNICALL OS_NATIVE(NewGlobalRef)
+	(JNIEnv *env, jclass that, jobject arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NewGlobalRef_FUNC);
+	rc = (jintLong)(*env)->NewGlobalRef(env, arg0);
+	OS_NATIVE_EXIT(env, that, NewGlobalRef_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NewRgn
+JNIEXPORT jintLong JNICALL OS_NATIVE(NewRgn)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, NewRgn_FUNC);
+/*
+	rc = (jintLong)NewRgn();
+*/
+	{
+		LOAD_FUNCTION(fp, NewRgn)
+		if (fp) {
+			rc = (jintLong)((jintLong (CALLING_CONVENTION*)())fp)();
+		}
+	}
+	OS_NATIVE_EXIT(env, that, NewRgn_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_OffsetRgn
+JNIEXPORT void JNICALL OS_NATIVE(OffsetRgn)
+	(JNIEnv *env, jclass that, jintLong arg0, jshort arg1, jshort arg2)
+{
+	OS_NATIVE_ENTER(env, that, OffsetRgn_FUNC);
+/*
+	OffsetRgn(arg0, arg1, arg2);
+*/
+	{
+		LOAD_FUNCTION(fp, OffsetRgn)
+		if (fp) {
+			((void (CALLING_CONVENTION*)(jintLong, jshort, jshort))fp)(arg0, arg1, arg2);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, OffsetRgn_FUNC);
+}
+#endif
+
+#ifndef NO_OpenRgn
+JNIEXPORT void JNICALL OS_NATIVE(OpenRgn)
+	(JNIEnv *env, jclass that)
+{
+	OS_NATIVE_ENTER(env, that, OpenRgn_FUNC);
+/*
+	OpenRgn();
+*/
+	{
+		LOAD_FUNCTION(fp, OpenRgn)
+		if (fp) {
+			((void (CALLING_CONVENTION*)())fp)();
+		}
+	}
+	OS_NATIVE_EXIT(env, that, OpenRgn_FUNC);
+}
+#endif
+
+#ifndef NO_PtInRgn
+JNIEXPORT jboolean JNICALL OS_NATIVE(PtInRgn)
+	(JNIEnv *env, jclass that, jshortArray arg0, jintLong arg1)
+{
+	jshort *lparg0=NULL;
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, PtInRgn_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL)) == NULL) goto fail;
+/*
+	rc = (jboolean)PtInRgn(*(Point *)lparg0, arg1);
+*/
+	{
+		LOAD_FUNCTION(fp, PtInRgn)
+		if (fp) {
+			rc = (jboolean)((jboolean (CALLING_CONVENTION*)(Point, jintLong))fp)(*(Point *)lparg0, arg1);
+		}
+	}
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
+	OS_NATIVE_EXIT(env, that, PtInRgn_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_QDRegionToRects
+JNIEXPORT jint JNICALL OS_NATIVE(QDRegionToRects)
+	(JNIEnv *env, jclass that, jintLong arg0, jint arg1, jintLong arg2, jintLong arg3)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, QDRegionToRects_FUNC);
+/*
+	rc = (jint)QDRegionToRects(arg0, arg1, arg2, arg3);
+*/
+	{
+		LOAD_FUNCTION(fp, QDRegionToRects)
+		if (fp) {
+			rc = (jint)((jint (CALLING_CONVENTION*)(jintLong, jint, jintLong, jintLong))fp)(arg0, arg1, arg2, arg3);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, QDRegionToRects_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_RectInRgn
+JNIEXPORT jboolean JNICALL OS_NATIVE(RectInRgn)
+	(JNIEnv *env, jclass that, jshortArray arg0, jintLong arg1)
+{
+	jshort *lparg0=NULL;
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, RectInRgn_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL)) == NULL) goto fail;
+/*
+	rc = (jboolean)RectInRgn(lparg0, arg1);
+*/
+	{
+		LOAD_FUNCTION(fp, RectInRgn)
+		if (fp) {
+			rc = (jboolean)((jboolean (CALLING_CONVENTION*)(jshort *, jintLong))fp)(lparg0, arg1);
+		}
+	}
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
+	OS_NATIVE_EXIT(env, that, RectInRgn_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_RectRgn
+JNIEXPORT void JNICALL OS_NATIVE(RectRgn)
+	(JNIEnv *env, jclass that, jintLong arg0, jshortArray arg1)
+{
+	jshort *lparg1=NULL;
+	OS_NATIVE_ENTER(env, that, RectRgn_FUNC);
+	if (arg1) if ((lparg1 = (*env)->GetShortArrayElements(env, arg1, NULL)) == NULL) goto fail;
+/*
+	RectRgn(arg0, lparg1);
+*/
+	{
+		LOAD_FUNCTION(fp, RectRgn)
+		if (fp) {
+			((void (CALLING_CONVENTION*)(jintLong, jshort *))fp)(arg0, lparg1);
+		}
+	}
+fail:
+	if (arg1 && lparg1) (*env)->ReleaseShortArrayElements(env, arg1, lparg1, 0);
+	OS_NATIVE_EXIT(env, that, RectRgn_FUNC);
+}
+#endif
+
+#ifndef NO_SectRgn
+JNIEXPORT void JNICALL OS_NATIVE(SectRgn)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2)
+{
+	OS_NATIVE_ENTER(env, that, SectRgn_FUNC);
+/*
+	SectRgn(arg0, arg1, arg2);
+*/
+	{
+		LOAD_FUNCTION(fp, SectRgn)
+		if (fp) {
+			((void (CALLING_CONVENTION*)(jintLong, jintLong, jintLong))fp)(arg0, arg1, arg2);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, SectRgn_FUNC);
+}
+#endif
+
+#ifndef NO_SetFrontProcess
+JNIEXPORT jint JNICALL OS_NATIVE(SetFrontProcess)
+	(JNIEnv *env, jclass that, jintArray arg0)
+{
+	jint *lparg0=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SetFrontProcess_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL)) == NULL) goto fail;
+	rc = (jint)SetFrontProcess((ProcessSerialNumber *)lparg0);
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+	OS_NATIVE_EXIT(env, that, SetFrontProcess_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SetRect
+JNIEXPORT void JNICALL OS_NATIVE(SetRect)
+	(JNIEnv *env, jclass that, jshortArray arg0, jshort arg1, jshort arg2, jshort arg3, jshort arg4)
+{
+	jshort *lparg0=NULL;
+	OS_NATIVE_ENTER(env, that, SetRect_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL)) == NULL) goto fail;
+/*
+	SetRect(lparg0, arg1, arg2, arg3, arg4);
+*/
+	{
+		LOAD_FUNCTION(fp, SetRect)
+		if (fp) {
+			((void (CALLING_CONVENTION*)(jshort *, jshort, jshort, jshort, jshort))fp)(lparg0, arg1, arg2, arg3, arg4);
+		}
+	}
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
+	OS_NATIVE_EXIT(env, that, SetRect_FUNC);
+}
+#endif
+
+#ifndef NO_SetSystemUIMode
+JNIEXPORT jint JNICALL OS_NATIVE(SetSystemUIMode)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SetSystemUIMode_FUNC);
+/*
+	rc = (jint)SetSystemUIMode((UInt32)arg0, (UInt32)arg1);
+*/
+	{
+		LOAD_FUNCTION(fp, SetSystemUIMode)
+		if (fp) {
+			rc = (jint)((jint (CALLING_CONVENTION*)(UInt32, UInt32))fp)((UInt32)arg0, (UInt32)arg1);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, SetSystemUIMode_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SetThemeCursor
+JNIEXPORT jint JNICALL OS_NATIVE(SetThemeCursor)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SetThemeCursor_FUNC);
+/*
+	rc = (jint)SetThemeCursor(arg0);
+*/
+	{
+		LOAD_FUNCTION(fp, SetThemeCursor)
+		if (fp) {
+			rc = (jint)((jint (CALLING_CONVENTION*)(jint))fp)(arg0);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, SetThemeCursor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TISCopyCurrentKeyboardInputSource
+JNIEXPORT jintLong JNICALL OS_NATIVE(TISCopyCurrentKeyboardInputSource)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, TISCopyCurrentKeyboardInputSource_FUNC);
+/*
+	rc = (jintLong)TISCopyCurrentKeyboardInputSource();
+*/
+	{
+		LOAD_FUNCTION(fp, TISCopyCurrentKeyboardInputSource)
+		if (fp) {
+			rc = (jintLong)((jintLong (CALLING_CONVENTION*)())fp)();
+		}
+	}
+	OS_NATIVE_EXIT(env, that, TISCopyCurrentKeyboardInputSource_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TISGetInputSourceProperty
+JNIEXPORT jintLong JNICALL OS_NATIVE(TISGetInputSourceProperty)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, TISGetInputSourceProperty_FUNC);
+/*
+	rc = (jintLong)TISGetInputSourceProperty(arg0, arg1);
+*/
+	{
+		LOAD_FUNCTION(fp, TISGetInputSourceProperty)
+		if (fp) {
+			rc = (jintLong)((jintLong (CALLING_CONVENTION*)(jintLong, jintLong))fp)(arg0, arg1);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, TISGetInputSourceProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TransformProcessType
+JNIEXPORT jint JNICALL OS_NATIVE(TransformProcessType)
+	(JNIEnv *env, jclass that, jintArray arg0, jint arg1)
+{
+	jint *lparg0=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TransformProcessType_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL)) == NULL) goto fail;
+	rc = (jint)TransformProcessType((ProcessSerialNumber *)lparg0, arg1);
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+	OS_NATIVE_EXIT(env, that, TransformProcessType_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UCKeyTranslate
+JNIEXPORT jint JNICALL OS_NATIVE(UCKeyTranslate)
+	(JNIEnv *env, jclass that, jintLong arg0, jshort arg1, jshort arg2, jint arg3, jint arg4, jint arg5, jintArray arg6, jint arg7, jintArray arg8, jcharArray arg9)
+{
+	jint *lparg6=NULL;
+	jint *lparg8=NULL;
+	jchar *lparg9=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, UCKeyTranslate_FUNC);
+	if (arg6) if ((lparg6 = (*env)->GetIntArrayElements(env, arg6, NULL)) == NULL) goto fail;
+	if (arg8) if ((lparg8 = (*env)->GetIntArrayElements(env, arg8, NULL)) == NULL) goto fail;
+	if (arg9) if ((lparg9 = (*env)->GetCharArrayElements(env, arg9, NULL)) == NULL) goto fail;
+/*
+	rc = (jint)UCKeyTranslate((const UCKeyboardLayout *)arg0, (UInt16)arg1, (UInt16)arg2, (UInt32)arg3, (UInt32)arg4, (OptionBits)arg5, (UInt32 *)lparg6, (UniCharCount)arg7, (UniCharCount *)lparg8, (UniChar *)lparg9);
+*/
+	{
+		LOAD_FUNCTION(fp, UCKeyTranslate)
+		if (fp) {
+			rc = (jint)((jint (CALLING_CONVENTION*)(const UCKeyboardLayout *, UInt16, UInt16, UInt32, UInt32, OptionBits, UInt32 *, UniCharCount, UniCharCount *, UniChar *))fp)((const UCKeyboardLayout *)arg0, (UInt16)arg1, (UInt16)arg2, (UInt32)arg3, (UInt32)arg4, (OptionBits)arg5, (UInt32 *)lparg6, (UniCharCount)arg7, (UniCharCount *)lparg8, (UniChar *)lparg9);
+		}
+	}
+fail:
+	if (arg9 && lparg9) (*env)->ReleaseCharArrayElements(env, arg9, lparg9, 0);
+	if (arg8 && lparg8) (*env)->ReleaseIntArrayElements(env, arg8, lparg8, 0);
+	if (arg6 && lparg6) (*env)->ReleaseIntArrayElements(env, arg6, lparg6, 0);
+	OS_NATIVE_EXIT(env, that, UCKeyTranslate_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UnionRgn
+JNIEXPORT void JNICALL OS_NATIVE(UnionRgn)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2)
+{
+	OS_NATIVE_ENTER(env, that, UnionRgn_FUNC);
+/*
+	UnionRgn(arg0, arg1, arg2);
+*/
+	{
+		LOAD_FUNCTION(fp, UnionRgn)
+		if (fp) {
+			((void (CALLING_CONVENTION*)(jintLong, jintLong, jintLong))fp)(arg0, arg1, arg2);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, UnionRgn_FUNC);
+}
+#endif
+
+#ifndef NO_call
+JNIEXPORT void JNICALL OS_NATIVE(call)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2)
+{
+	OS_NATIVE_ENTER(env, that, call_FUNC);
+	((void (*)())arg0)(arg1, arg2);
+	OS_NATIVE_EXIT(env, that, call_FUNC);
+}
+#endif
+
+#ifndef NO_class_1addIvar
+JNIEXPORT jboolean JNICALL OS_NATIVE(class_1addIvar)
+	(JNIEnv *env, jclass that, jintLong arg0, jbyteArray arg1, jintLong arg2, jbyte arg3, jbyteArray arg4)
+{
+	jbyte *lparg1=NULL;
+	jbyte *lparg4=NULL;
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, class_1addIvar_FUNC);
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg1) if ((lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL)) == NULL) goto fail;
+		if (arg4) if ((lparg4 = (*env)->GetPrimitiveArrayCritical(env, arg4, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg1) if ((lparg1 = (*env)->GetByteArrayElements(env, arg1, NULL)) == NULL) goto fail;
+		if (arg4) if ((lparg4 = (*env)->GetByteArrayElements(env, arg4, NULL)) == NULL) goto fail;
+	}
+	rc = (jboolean)class_addIvar((Class)arg0, (const char *)lparg1, arg2, arg3, (const char *)lparg4);
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg4 && lparg4) (*env)->ReleasePrimitiveArrayCritical(env, arg4, lparg4, 0);
+		if (arg1 && lparg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
+	} else
+#endif
+	{
+		if (arg4 && lparg4) (*env)->ReleaseByteArrayElements(env, arg4, lparg4, 0);
+		if (arg1 && lparg1) (*env)->ReleaseByteArrayElements(env, arg1, lparg1, 0);
+	}
+	OS_NATIVE_EXIT(env, that, class_1addIvar_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_class_1addMethod
+JNIEXPORT jboolean JNICALL OS_NATIVE(class_1addMethod)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jstring arg3)
+{
+	const char *lparg3= NULL;
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, class_1addMethod_FUNC);
+	if (arg3) if ((lparg3 = (*env)->GetStringUTFChars(env, arg3, NULL)) == NULL) goto fail;
+	rc = (jboolean)class_addMethod((Class)arg0, (SEL)arg1, (IMP)arg2, lparg3);
+fail:
+	if (arg3 && lparg3) (*env)->ReleaseStringUTFChars(env, arg3, lparg3);
+	OS_NATIVE_EXIT(env, that, class_1addMethod_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_class_1addProtocol
+JNIEXPORT jboolean JNICALL OS_NATIVE(class_1addProtocol)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, class_1addProtocol_FUNC);
+	rc = (jboolean)class_addProtocol((Class)arg0, (Protocol *)arg1);
+	OS_NATIVE_EXIT(env, that, class_1addProtocol_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_class_1createInstance
+JNIEXPORT jintLong JNICALL OS_NATIVE(class_1createInstance)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, class_1createInstance_FUNC);
+	rc = (jintLong)class_createInstance((Class)arg0, (size_t)arg1);
+	OS_NATIVE_EXIT(env, that, class_1createInstance_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_class_1getClassMethod
+JNIEXPORT jintLong JNICALL OS_NATIVE(class_1getClassMethod)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, class_1getClassMethod_FUNC);
+	rc = (jintLong)class_getClassMethod((Class)arg0, (SEL)arg1);
+	OS_NATIVE_EXIT(env, that, class_1getClassMethod_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_class_1getInstanceMethod
+JNIEXPORT jintLong JNICALL OS_NATIVE(class_1getInstanceMethod)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, class_1getInstanceMethod_FUNC);
+	rc = (jintLong)class_getInstanceMethod((Class)arg0, (SEL)arg1);
+	OS_NATIVE_EXIT(env, that, class_1getInstanceMethod_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_class_1getMethodImplementation
+JNIEXPORT jintLong JNICALL OS_NATIVE(class_1getMethodImplementation)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, class_1getMethodImplementation_FUNC);
+	rc = (jintLong)class_getMethodImplementation((Class)arg0, (SEL)arg1);
+	OS_NATIVE_EXIT(env, that, class_1getMethodImplementation_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_class_1getSuperclass
+JNIEXPORT jintLong JNICALL OS_NATIVE(class_1getSuperclass)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, class_1getSuperclass_FUNC);
+	rc = (jintLong)class_getSuperclass((Class)arg0);
+	OS_NATIVE_EXIT(env, that, class_1getSuperclass_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_getpid
+JNIEXPORT jint JNICALL OS_NATIVE(getpid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, getpid_FUNC);
+	rc = (jint)getpid();
+	OS_NATIVE_EXIT(env, that, getpid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_instrumentObjcMessageSends
+JNIEXPORT void JNICALL OS_NATIVE(instrumentObjcMessageSends)
+	(JNIEnv *env, jclass that, jboolean arg0)
+{
+	OS_NATIVE_ENTER(env, that, instrumentObjcMessageSends_FUNC);
+/*
+	instrumentObjcMessageSends(arg0);
+*/
+	{
+		LOAD_FUNCTION(fp, instrumentObjcMessageSends)
+		if (fp) {
+			((void (CALLING_CONVENTION*)(jboolean))fp)(arg0);
+		}
+	}
+	OS_NATIVE_EXIT(env, that, instrumentObjcMessageSends_FUNC);
+}
+#endif
+
+#ifndef NO_kCFRunLoopCommonModes
+JNIEXPORT jintLong JNICALL OS_NATIVE(kCFRunLoopCommonModes)
+	(JNIEnv *env, jclass that)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, kCFRunLoopCommonModes_FUNC);
+	rc = (jintLong)kCFRunLoopCommonModes;
+	OS_NATIVE_EXIT(env, that, kCFRunLoopCommonModes_FUNC);
+	return rc;
+}
+#endif
+
+#if (!defined(NO_memmove__ILorg_eclipse_swt_internal_cocoa_CGPathElement_2I) && !defined(JNI64)) || (!defined(NO_memmove__JLorg_eclipse_swt_internal_cocoa_CGPathElement_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(memmove__ILorg_eclipse_swt_internal_cocoa_CGPathElement_2I)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(memmove__JLorg_eclipse_swt_internal_cocoa_CGPathElement_2J)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jintLong arg2)
+#endif
+{
+	CGPathElement _arg1, *lparg1=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, memmove__ILorg_eclipse_swt_internal_cocoa_CGPathElement_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, memmove__JLorg_eclipse_swt_internal_cocoa_CGPathElement_2J_FUNC);
+#endif
+	if (arg1) if ((lparg1 = getCGPathElementFields(env, arg1, &_arg1)) == NULL) goto fail;
+	memmove((void *)arg0, (void *)lparg1, arg2);
+fail:
+	if (arg1 && lparg1) setCGPathElementFields(env, arg1, lparg1);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, memmove__ILorg_eclipse_swt_internal_cocoa_CGPathElement_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, memmove__JLorg_eclipse_swt_internal_cocoa_CGPathElement_2J_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__ILorg_eclipse_swt_internal_cocoa_CGPoint_2I) && !defined(JNI64)) || (!defined(NO_memmove__JLorg_eclipse_swt_internal_cocoa_CGPoint_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(memmove__ILorg_eclipse_swt_internal_cocoa_CGPoint_2I)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(memmove__JLorg_eclipse_swt_internal_cocoa_CGPoint_2J)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jintLong arg2)
+#endif
+{
+	CGPoint _arg1, *lparg1=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, memmove__ILorg_eclipse_swt_internal_cocoa_CGPoint_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, memmove__JLorg_eclipse_swt_internal_cocoa_CGPoint_2J_FUNC);
+#endif
+	if (arg1) if ((lparg1 = getCGPointFields(env, arg1, &_arg1)) == NULL) goto fail;
+	memmove((void *)arg0, (void *)lparg1, arg2);
+fail:
+	if (arg1 && lparg1) setCGPointFields(env, arg1, lparg1);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, memmove__ILorg_eclipse_swt_internal_cocoa_CGPoint_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, memmove__JLorg_eclipse_swt_internal_cocoa_CGPoint_2J_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__ILorg_eclipse_swt_internal_cocoa_CGRect_2I) && !defined(JNI64)) || (!defined(NO_memmove__JLorg_eclipse_swt_internal_cocoa_CGRect_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(memmove__ILorg_eclipse_swt_internal_cocoa_CGRect_2I)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(memmove__JLorg_eclipse_swt_internal_cocoa_CGRect_2J)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jintLong arg2)
+#endif
+{
+	CGRect _arg1, *lparg1=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, memmove__ILorg_eclipse_swt_internal_cocoa_CGRect_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, memmove__JLorg_eclipse_swt_internal_cocoa_CGRect_2J_FUNC);
+#endif
+	if (arg1) if ((lparg1 = getCGRectFields(env, arg1, &_arg1)) == NULL) goto fail;
+	memmove((void *)arg0, (void *)lparg1, arg2);
+fail:
+	if (arg1 && lparg1) setCGRectFields(env, arg1, lparg1);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, memmove__ILorg_eclipse_swt_internal_cocoa_CGRect_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, memmove__JLorg_eclipse_swt_internal_cocoa_CGRect_2J_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__ILorg_eclipse_swt_internal_cocoa_CGSize_2I) && !defined(JNI64)) || (!defined(NO_memmove__JLorg_eclipse_swt_internal_cocoa_CGSize_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(memmove__ILorg_eclipse_swt_internal_cocoa_CGSize_2I)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(memmove__JLorg_eclipse_swt_internal_cocoa_CGSize_2J)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jintLong arg2)
+#endif
+{
+	CGSize _arg1, *lparg1=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, memmove__ILorg_eclipse_swt_internal_cocoa_CGSize_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, memmove__JLorg_eclipse_swt_internal_cocoa_CGSize_2J_FUNC);
+#endif
+	if (arg1) if ((lparg1 = getCGSizeFields(env, arg1, &_arg1)) == NULL) goto fail;
+	memmove((void *)arg0, (void *)lparg1, arg2);
+fail:
+	if (arg1 && lparg1) setCGSizeFields(env, arg1, lparg1);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, memmove__ILorg_eclipse_swt_internal_cocoa_CGSize_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, memmove__JLorg_eclipse_swt_internal_cocoa_CGSize_2J_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__ILorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2I) && !defined(JNI64)) || (!defined(NO_memmove__JLorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(memmove__ILorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2I)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(memmove__JLorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2J)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jintLong arg2)
+#endif
+{
+	NSAffineTransformStruct _arg1, *lparg1=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, memmove__ILorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, memmove__JLorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2J_FUNC);
+#endif
+	if (arg1) if ((lparg1 = getNSAffineTransformStructFields(env, arg1, &_arg1)) == NULL) goto fail;
+	memmove((void *)arg0, (void *)lparg1, arg2);
+fail:
+	if (arg1 && lparg1) setNSAffineTransformStructFields(env, arg1, lparg1);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, memmove__ILorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, memmove__JLorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2J_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__ILorg_eclipse_swt_internal_cocoa_NSPoint_2I) && !defined(JNI64)) || (!defined(NO_memmove__JLorg_eclipse_swt_internal_cocoa_NSPoint_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(memmove__ILorg_eclipse_swt_internal_cocoa_NSPoint_2I)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(memmove__JLorg_eclipse_swt_internal_cocoa_NSPoint_2J)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jintLong arg2)
+#endif
+{
+	NSPoint _arg1, *lparg1=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, memmove__ILorg_eclipse_swt_internal_cocoa_NSPoint_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, memmove__JLorg_eclipse_swt_internal_cocoa_NSPoint_2J_FUNC);
+#endif
+	if (arg1) if ((lparg1 = getNSPointFields(env, arg1, &_arg1)) == NULL) goto fail;
+	memmove((void *)arg0, (void *)lparg1, arg2);
+fail:
+	if (arg1 && lparg1) setNSPointFields(env, arg1, lparg1);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, memmove__ILorg_eclipse_swt_internal_cocoa_NSPoint_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, memmove__JLorg_eclipse_swt_internal_cocoa_NSPoint_2J_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__ILorg_eclipse_swt_internal_cocoa_NSRange_2I) && !defined(JNI64)) || (!defined(NO_memmove__JLorg_eclipse_swt_internal_cocoa_NSRange_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(memmove__ILorg_eclipse_swt_internal_cocoa_NSRange_2I)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(memmove__JLorg_eclipse_swt_internal_cocoa_NSRange_2J)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jintLong arg2)
+#endif
+{
+	NSRange _arg1, *lparg1=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, memmove__ILorg_eclipse_swt_internal_cocoa_NSRange_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, memmove__JLorg_eclipse_swt_internal_cocoa_NSRange_2J_FUNC);
+#endif
+	if (arg1) if ((lparg1 = getNSRangeFields(env, arg1, &_arg1)) == NULL) goto fail;
+	memmove((void *)arg0, (void *)lparg1, arg2);
+fail:
+	if (arg1 && lparg1) setNSRangeFields(env, arg1, lparg1);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, memmove__ILorg_eclipse_swt_internal_cocoa_NSRange_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, memmove__JLorg_eclipse_swt_internal_cocoa_NSRange_2J_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__ILorg_eclipse_swt_internal_cocoa_NSRect_2I) && !defined(JNI64)) || (!defined(NO_memmove__JLorg_eclipse_swt_internal_cocoa_NSRect_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(memmove__ILorg_eclipse_swt_internal_cocoa_NSRect_2I)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(memmove__JLorg_eclipse_swt_internal_cocoa_NSRect_2J)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jintLong arg2)
+#endif
+{
+	NSRect _arg1, *lparg1=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, memmove__ILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, memmove__JLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC);
+#endif
+	if (arg1) if ((lparg1 = getNSRectFields(env, arg1, &_arg1)) == NULL) goto fail;
+	memmove((void *)arg0, (void *)lparg1, arg2);
+fail:
+	if (arg1 && lparg1) setNSRectFields(env, arg1, lparg1);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, memmove__ILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, memmove__JLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__ILorg_eclipse_swt_internal_cocoa_NSSize_2I) && !defined(JNI64)) || (!defined(NO_memmove__JLorg_eclipse_swt_internal_cocoa_NSSize_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(memmove__ILorg_eclipse_swt_internal_cocoa_NSSize_2I)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(memmove__JLorg_eclipse_swt_internal_cocoa_NSSize_2J)(JNIEnv *env, jclass that, jintLong arg0, jobject arg1, jintLong arg2)
+#endif
+{
+	NSSize _arg1, *lparg1=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, memmove__ILorg_eclipse_swt_internal_cocoa_NSSize_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, memmove__JLorg_eclipse_swt_internal_cocoa_NSSize_2J_FUNC);
+#endif
+	if (arg1) if ((lparg1 = getNSSizeFields(env, arg1, &_arg1)) == NULL) goto fail;
+	memmove((void *)arg0, (void *)lparg1, arg2);
+fail:
+	if (arg1 && lparg1) setNSSizeFields(env, arg1, lparg1);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, memmove__ILorg_eclipse_swt_internal_cocoa_NSSize_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, memmove__JLorg_eclipse_swt_internal_cocoa_NSSize_2J_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__Lorg_eclipse_swt_internal_cocoa_CGPathElement_2II) && !defined(JNI64)) || (!defined(NO_memmove__Lorg_eclipse_swt_internal_cocoa_CGPathElement_2JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(memmove__Lorg_eclipse_swt_internal_cocoa_CGPathElement_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(memmove__Lorg_eclipse_swt_internal_cocoa_CGPathElement_2JJ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	CGPathElement _arg0, *lparg0=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_CGPathElement_2II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_CGPathElement_2JJ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = &_arg0) == NULL) goto fail;
+	memmove((void *)lparg0, (void *)arg1, arg2);
+fail:
+	if (arg0 && lparg0) setCGPathElementFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_CGPathElement_2II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_CGPathElement_2JJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__Lorg_eclipse_swt_internal_cocoa_CGPoint_2II) && !defined(JNI64)) || (!defined(NO_memmove__Lorg_eclipse_swt_internal_cocoa_CGPoint_2JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(memmove__Lorg_eclipse_swt_internal_cocoa_CGPoint_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(memmove__Lorg_eclipse_swt_internal_cocoa_CGPoint_2JJ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	CGPoint _arg0, *lparg0=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_CGPoint_2II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_CGPoint_2JJ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = &_arg0) == NULL) goto fail;
+	memmove((void *)lparg0, (void *)arg1, arg2);
+fail:
+	if (arg0 && lparg0) setCGPointFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_CGPoint_2II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_CGPoint_2JJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__Lorg_eclipse_swt_internal_cocoa_CGRect_2II) && !defined(JNI64)) || (!defined(NO_memmove__Lorg_eclipse_swt_internal_cocoa_CGRect_2JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(memmove__Lorg_eclipse_swt_internal_cocoa_CGRect_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(memmove__Lorg_eclipse_swt_internal_cocoa_CGRect_2JJ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	CGRect _arg0, *lparg0=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_CGRect_2II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_CGRect_2JJ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = &_arg0) == NULL) goto fail;
+	memmove((void *)lparg0, (void *)arg1, arg2);
+fail:
+	if (arg0 && lparg0) setCGRectFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_CGRect_2II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_CGRect_2JJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__Lorg_eclipse_swt_internal_cocoa_CGSize_2II) && !defined(JNI64)) || (!defined(NO_memmove__Lorg_eclipse_swt_internal_cocoa_CGSize_2JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(memmove__Lorg_eclipse_swt_internal_cocoa_CGSize_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(memmove__Lorg_eclipse_swt_internal_cocoa_CGSize_2JJ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	CGSize _arg0, *lparg0=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_CGSize_2II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_CGSize_2JJ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = &_arg0) == NULL) goto fail;
+	memmove((void *)lparg0, (void *)arg1, arg2);
+fail:
+	if (arg0 && lparg0) setCGSizeFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_CGSize_2II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_CGSize_2JJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2II) && !defined(JNI64)) || (!defined(NO_memmove__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(memmove__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(memmove__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2JJ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	NSAffineTransformStruct _arg0, *lparg0=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2JJ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = &_arg0) == NULL) goto fail;
+	memmove((void *)lparg0, (void *)arg1, arg2);
+fail:
+	if (arg0 && lparg0) setNSAffineTransformStructFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2JJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__Lorg_eclipse_swt_internal_cocoa_NSPoint_2II) && !defined(JNI64)) || (!defined(NO_memmove__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(memmove__Lorg_eclipse_swt_internal_cocoa_NSPoint_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(memmove__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	NSPoint _arg0, *lparg0=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_NSPoint_2II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = &_arg0) == NULL) goto fail;
+	memmove((void *)lparg0, (void *)arg1, arg2);
+fail:
+	if (arg0 && lparg0) setNSPointFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_NSPoint_2II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__Lorg_eclipse_swt_internal_cocoa_NSRange_2II) && !defined(JNI64)) || (!defined(NO_memmove__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(memmove__Lorg_eclipse_swt_internal_cocoa_NSRange_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(memmove__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	NSRange _arg0, *lparg0=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_NSRange_2II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = &_arg0) == NULL) goto fail;
+	memmove((void *)lparg0, (void *)arg1, arg2);
+fail:
+	if (arg0 && lparg0) setNSRangeFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_NSRange_2II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__Lorg_eclipse_swt_internal_cocoa_NSRect_2II) && !defined(JNI64)) || (!defined(NO_memmove__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(memmove__Lorg_eclipse_swt_internal_cocoa_NSRect_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(memmove__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	NSRect _arg0, *lparg0=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_NSRect_2II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = &_arg0) == NULL) goto fail;
+	memmove((void *)lparg0, (void *)arg1, arg2);
+fail:
+	if (arg0 && lparg0) setNSRectFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_NSRect_2II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__Lorg_eclipse_swt_internal_cocoa_NSSize_2II) && !defined(JNI64)) || (!defined(NO_memmove__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(memmove__Lorg_eclipse_swt_internal_cocoa_NSSize_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(memmove__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	NSSize _arg0, *lparg0=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_NSSize_2II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = &_arg0) == NULL) goto fail;
+	memmove((void *)lparg0, (void *)arg1, arg2);
+fail:
+	if (arg0 && lparg0) setNSSizeFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_NSSize_2II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, memmove__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJ_FUNC);
+#endif
+}
+#endif
+
+#ifndef NO_method_1setImplementation
+JNIEXPORT jintLong JNICALL OS_NATIVE(method_1setImplementation)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, method_1setImplementation_FUNC);
+	rc = (jintLong)method_setImplementation((Method)arg0, (IMP)arg1);
+	OS_NATIVE_EXIT(env, that, method_1setImplementation_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1allocateClassPair
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1allocateClassPair)
+	(JNIEnv *env, jclass that, jintLong arg0, jstring arg1, jintLong arg2)
+{
+	const char *lparg1= NULL;
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, objc_1allocateClassPair_FUNC);
+	if (arg1) if ((lparg1 = (*env)->GetStringUTFChars(env, arg1, NULL)) == NULL) goto fail;
+	rc = (jintLong)objc_allocateClassPair((Class)arg0, lparg1, arg2);
+fail:
+	if (arg1 && lparg1) (*env)->ReleaseStringUTFChars(env, arg1, lparg1);
+	OS_NATIVE_EXIT(env, that, objc_1allocateClassPair_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1getClass
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1getClass)
+	(JNIEnv *env, jclass that, jstring arg0)
+{
+	const char *lparg0= NULL;
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, objc_1getClass_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetStringUTFChars(env, arg0, NULL)) == NULL) goto fail;
+	rc = (jintLong)objc_getClass(lparg0);
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseStringUTFChars(env, arg0, lparg0);
+	OS_NATIVE_EXIT(env, that, objc_1getClass_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1getMetaClass
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1getMetaClass)
+	(JNIEnv *env, jclass that, jstring arg0)
+{
+	const char *lparg0= NULL;
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, objc_1getMetaClass_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetStringUTFChars(env, arg0, NULL)) == NULL) goto fail;
+	rc = (jintLong)objc_getMetaClass(lparg0);
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseStringUTFChars(env, arg0, lparg0);
+	OS_NATIVE_EXIT(env, that, objc_1getMetaClass_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1getProtocol
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1getProtocol)
+	(JNIEnv *env, jclass that, jstring arg0)
+{
+	const char *lparg0= NULL;
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, objc_1getProtocol_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetStringUTFChars(env, arg0, NULL)) == NULL) goto fail;
+	rc = (jintLong)objc_getProtocol(lparg0);
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseStringUTFChars(env, arg0, lparg0);
+	OS_NATIVE_EXIT(env, that, objc_1getProtocol_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1lookUpClass
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1lookUpClass)
+	(JNIEnv *env, jclass that, jstring arg0)
+{
+	const char *lparg0= NULL;
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, objc_1lookUpClass_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetStringUTFChars(env, arg0, NULL)) == NULL) goto fail;
+	rc = (jintLong)objc_lookUpClass(lparg0);
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseStringUTFChars(env, arg0, lparg0);
+	OS_NATIVE_EXIT(env, that, objc_1lookUpClass_FUNC);
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__II) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__II)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+#endif
+{
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJ_FUNC);
+#endif
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong))objc_msgSend)(arg0, arg1);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IID) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJD) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IID)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jdouble arg2)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJD)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jdouble arg2)
+#endif
+{
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IID_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJD_FUNC);
+#endif
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jdouble))objc_msgSend)(arg0, arg1, arg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IID_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJD_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIDIIIZ) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJDJJJZ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIDIIIZ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jdouble arg2, jintLong arg3, jintLong arg4, jintLong arg5, jboolean arg6)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJDJJJZ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jdouble arg2, jintLong arg3, jintLong arg4, jintLong arg5, jboolean arg6)
+#endif
+{
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIDIIIZ_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJDJJJZ_FUNC);
+#endif
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jdouble, jintLong, jintLong, jintLong, jboolean))objc_msgSend)(arg0, arg1, arg2, arg3, arg4, arg5, arg6);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIDIIIZ_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJDJJJZ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__IIF
+JNIEXPORT jint JNICALL OS_NATIVE(objc_1msgSend__IIF)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jfloat arg2)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIF_FUNC);
+	rc = (jint)((jint (*)(jint, jint, jfloat))objc_msgSend)(arg0, arg1, arg2);
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIF_FUNC);
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIFF) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJDD) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIFF)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jfloatDouble arg2, jfloatDouble arg3)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJDD)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jfloatDouble arg2, jfloatDouble arg3)
+#endif
+{
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIFF_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJDD_FUNC);
+#endif
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jfloatDouble, jfloatDouble))objc_msgSend)(arg0, arg1, arg2, arg3);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIFF_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJDD_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIFFFF) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJDDDD) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIFFFF)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jfloatDouble arg2, jfloatDouble arg3, jfloatDouble arg4, jfloatDouble arg5)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJDDDD)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jfloatDouble arg2, jfloatDouble arg3, jfloatDouble arg4, jfloatDouble arg5)
+#endif
+{
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIFFFF_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJDDDD_FUNC);
+#endif
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jfloatDouble, jfloatDouble, jfloatDouble, jfloatDouble))objc_msgSend)(arg0, arg1, arg2, arg3, arg4, arg5);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIFFFF_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJDDDD_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIFI) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJDJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIFI)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jfloatDouble arg2, jintLong arg3)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJDJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jfloatDouble arg2, jintLong arg3)
+#endif
+{
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIFI_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJDJ_FUNC);
+#endif
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jfloatDouble, jintLong))objc_msgSend)(arg0, arg1, arg2, arg3);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIFI_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJDJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__III) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__III)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__III_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJJ_FUNC);
+#endif
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jintLong))objc_msgSend)(arg0, arg1, arg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__III_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIIF) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJJD) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIIF)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jfloatDouble arg3)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJJD)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jfloatDouble arg3)
+#endif
+{
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIIF_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJJD_FUNC);
+#endif
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jintLong, jfloatDouble))objc_msgSend)(arg0, arg1, arg2, arg3);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIIF_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJJD_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIII) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIII)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJJJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3)
+#endif
+{
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIII_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJJJ_FUNC);
+#endif
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jintLong, jintLong))objc_msgSend)(arg0, arg1, arg2, arg3);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIII_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJJJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIIII) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJJJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIIII)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJJJJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4)
+#endif
+{
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIIII_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJJJJ_FUNC);
+#endif
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jintLong, jintLong, jintLong))objc_msgSend)(arg0, arg1, arg2, arg3, arg4);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIIII_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJJJJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIIIIF) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJJJJD) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIIIIF)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jfloatDouble arg5)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJJJJD)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jfloatDouble arg5)
+#endif
+{
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIIIIF_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJJJJD_FUNC);
+#endif
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jintLong, jintLong, jintLong, jfloatDouble))objc_msgSend)(arg0, arg1, arg2, arg3, arg4, arg5);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIIIIF_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJJJJD_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIIIII) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJJJJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIIIII)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jintLong arg5)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJJJJJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jintLong arg5)
+#endif
+{
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIIIII_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJJJJJ_FUNC);
+#endif
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jintLong, jintLong, jintLong, jintLong))objc_msgSend)(arg0, arg1, arg2, arg3, arg4, arg5);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIIIII_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJJJJJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIIIIII) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJJJJJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIIIIII)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jintLong arg5, jintLong arg6)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJJJJJJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jintLong arg5, jintLong arg6)
+#endif
+{
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIIIIII_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJJJJJJ_FUNC);
+#endif
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jintLong, jintLong, jintLong, jintLong, jintLong))objc_msgSend)(arg0, arg1, arg2, arg3, arg4, arg5, arg6);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIIIIII_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJJJJJJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIIIIIIII) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJJJJJJJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIIIIIIII)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jintLong arg5, jintLong arg6, jintLong arg7, jintLong arg8)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJJJJJJJJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jintLong arg5, jintLong arg6, jintLong arg7, jintLong arg8)
+#endif
+{
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIIIIIIII_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJJJJJJJJ_FUNC);
+#endif
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jintLong, jintLong, jintLong, jintLong, jintLong, jintLong, jintLong))objc_msgSend)(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIIIIIIII_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJJJJJJJJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIIIIIIZZIII) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJJJJJJZZJJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIIIIIIZZIII)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jintLong arg5, jintLong arg6, jboolean arg7, jboolean arg8, jintLong arg9, jintLong arg10, jintLong arg11)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJJJJJJZZJJJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jintLong arg5, jintLong arg6, jboolean arg7, jboolean arg8, jintLong arg9, jintLong arg10, jintLong arg11)
+#endif
+{
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIIIIIIZZIII_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJJJJJJZZJJJ_FUNC);
+#endif
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jintLong, jintLong, jintLong, jintLong, jintLong, jboolean, jboolean, jintLong, jintLong, jintLong))objc_msgSend)(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIIIIIIZZIII_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJJJJJJZZJJJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIIIIIIZZIIII) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJJJJJJZZJJJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIIIIIIZZIIII)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jintLong arg5, jintLong arg6, jboolean arg7, jboolean arg8, jintLong arg9, jintLong arg10, jintLong arg11, jintLong arg12)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJJJJJJZZJJJJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jintLong arg5, jintLong arg6, jboolean arg7, jboolean arg8, jintLong arg9, jintLong arg10, jintLong arg11, jintLong arg12)
+#endif
+{
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIIIIIIZZIIII_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJJJJJJZZJJJJ_FUNC);
+#endif
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jintLong, jintLong, jintLong, jintLong, jintLong, jboolean, jboolean, jintLong, jintLong, jintLong, jintLong))objc_msgSend)(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIIIIIIZZIIII_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJJJJJJZZJJJJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIIIIZ) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJJJJZ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIIIIZ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jboolean arg5)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJJJJZ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jboolean arg5)
+#endif
+{
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIIIIZ_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJJJJZ_FUNC);
+#endif
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jintLong, jintLong, jintLong, jboolean))objc_msgSend)(arg0, arg1, arg2, arg3, arg4, arg5);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIIIIZ_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJJJJZ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIIILorg_eclipse_swt_internal_cocoa_NSRange_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJJJLorg_eclipse_swt_internal_cocoa_NSRange_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIIILorg_eclipse_swt_internal_cocoa_NSRange_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jobject arg4)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJJJLorg_eclipse_swt_internal_cocoa_NSRange_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jobject arg4)
+#endif
+{
+	NSRange _arg4, *lparg4=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIIILorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJJJLorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC);
+#endif
+	if (arg4) if ((lparg4 = getNSRangeFields(env, arg4, &_arg4)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jintLong, jintLong, NSRange))objc_msgSend)(arg0, arg1, arg2, arg3, *lparg4);
+fail:
+	if (arg4 && lparg4) setNSRangeFields(env, arg4, lparg4);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIIILorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJJJLorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIIIZ) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJJJZ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIIIZ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jboolean arg4)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJJJZ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jboolean arg4)
+#endif
+{
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIIIZ_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJJJZ_FUNC);
+#endif
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jintLong, jintLong, jboolean))objc_msgSend)(arg0, arg1, arg2, arg3, arg4);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIIIZ_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJJJZ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jobject arg3)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jobject arg3)
+#endif
+{
+	NSPoint _arg3, *lparg3=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#endif
+	if (arg3) if ((lparg3 = getNSPointFields(env, arg3, &_arg3)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jintLong, NSPoint))objc_msgSend)(arg0, arg1, arg2, *lparg3);
+fail:
+	if (arg3 && lparg3) setNSPointFields(env, arg3, lparg3);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2I)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2J)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4)
+#endif
+{
+	NSPoint _arg3, *lparg3=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2J_FUNC);
+#endif
+	if (arg3) if ((lparg3 = getNSPointFields(env, arg3, &_arg3)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jintLong, NSPoint, jintLong))objc_msgSend)(arg0, arg1, arg2, *lparg3, arg4);
+fail:
+	if (arg3 && lparg3) setNSPointFields(env, arg3, lparg3);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2J_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2IDIIIII) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2JDJJJJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2IDIIIII)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4, jdouble arg5, jintLong arg6, jintLong arg7, jintLong arg8, jintLong arg9, jintLong arg10)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2JDJJJJJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4, jdouble arg5, jintLong arg6, jintLong arg7, jintLong arg8, jintLong arg9, jintLong arg10)
+#endif
+{
+	NSPoint _arg3, *lparg3=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2IDIIIII_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2JDJJJJJ_FUNC);
+#endif
+	if (arg3) if ((lparg3 = getNSPointFields(env, arg3, &_arg3)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jintLong, NSPoint, jintLong, jdouble, jintLong, jintLong, jintLong, jintLong, jintLong))objc_msgSend)(arg0, arg1, arg2, *lparg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);
+fail:
+	if (arg3 && lparg3) setNSPointFields(env, arg3, lparg3);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2IDIIIII_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2JDJJJJJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2IDIISII) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2JDJJSJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2IDIISII)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4, jdouble arg5, jintLong arg6, jintLong arg7, jshort arg8, jintLong arg9, jintLong arg10)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2JDJJSJJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4, jdouble arg5, jintLong arg6, jintLong arg7, jshort arg8, jintLong arg9, jintLong arg10)
+#endif
+{
+	NSPoint _arg3, *lparg3=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2IDIISII_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2JDJJSJJ_FUNC);
+#endif
+	if (arg3) if ((lparg3 = getNSPointFields(env, arg3, &_arg3)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jintLong, NSPoint, jintLong, jdouble, jintLong, jintLong, jshort, jintLong, jintLong))objc_msgSend)(arg0, arg1, arg2, *lparg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);
+fail:
+	if (arg3 && lparg3) setNSPointFields(env, arg3, lparg3);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2IDIISII_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2JDJJSJJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSSize_2IIIZ) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSSize_2JJJZ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSSize_2IIIZ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jobject arg3, jobject arg4, jintLong arg5, jintLong arg6, jintLong arg7, jboolean arg8)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSSize_2JJJZ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jobject arg3, jobject arg4, jintLong arg5, jintLong arg6, jintLong arg7, jboolean arg8)
+#endif
+{
+	NSPoint _arg3, *lparg3=NULL;
+	NSSize _arg4, *lparg4=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSSize_2IIIZ_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSSize_2JJJZ_FUNC);
+#endif
+	if (arg3) if ((lparg3 = getNSPointFields(env, arg3, &_arg3)) == NULL) goto fail;
+	if (arg4) if ((lparg4 = getNSSizeFields(env, arg4, &_arg4)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jintLong, NSPoint, NSSize, jintLong, jintLong, jintLong, jboolean))objc_msgSend)(arg0, arg1, arg2, *lparg3, *lparg4, arg5, arg6, arg7, arg8);
+fail:
+	if (arg4 && lparg4) setNSSizeFields(env, arg4, lparg4);
+	if (arg3 && lparg3) setNSPointFields(env, arg3, lparg3);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSSize_2IIIZ_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSSize_2JJJZ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSRange_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSRange_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSRange_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jobject arg3)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSRange_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jobject arg3)
+#endif
+{
+	NSRange _arg3, *lparg3=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC);
+#endif
+	if (arg3) if ((lparg3 = getNSRangeFields(env, arg3, &_arg3)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jintLong, NSRange))objc_msgSend)(arg0, arg1, arg2, *lparg3);
+fail:
+	if (arg3 && lparg3) setNSRangeFields(env, arg3, lparg3);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSRect_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSRect_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSRect_2I)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSRect_2J)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4)
+#endif
+{
+	NSRect _arg3, *lparg3=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC);
+#endif
+	if (arg3) if ((lparg3 = getNSRectFields(env, arg3, &_arg3)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jintLong, NSRect, jintLong))objc_msgSend)(arg0, arg1, arg2, *lparg3, arg4);
+fail:
+	if (arg3 && lparg3) setNSRectFields(env, arg3, lparg3);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIIZ) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJJZ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIIZ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jboolean arg3)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJJZ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jboolean arg3)
+#endif
+{
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIIZ_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJJZ_FUNC);
+#endif
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jintLong, jboolean))objc_msgSend)(arg0, arg1, arg2, arg3);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIIZ_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJJZ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2)
+#endif
+{
+	NSAffineTransformStruct _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSAffineTransformStructFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSAffineTransformStruct))objc_msgSend)(arg0, arg1, *lparg2);
+fail:
+	if (arg2 && lparg2) setNSAffineTransformStructFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2)
+#endif
+{
+	NSPoint _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSPointFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSPoint))objc_msgSend)(arg0, arg1, *lparg2);
+fail:
+	if (arg2 && lparg2) setNSPointFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2FFF) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2DDD) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2FFF)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jfloatDouble arg3, jfloatDouble arg4, jfloatDouble arg5)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2DDD)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jfloatDouble arg3, jfloatDouble arg4, jfloatDouble arg5)
+#endif
+{
+	NSPoint _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2FFF_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2DDD_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSPointFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSPoint, jfloatDouble, jfloatDouble, jfloatDouble))objc_msgSend)(arg0, arg1, *lparg2, arg3, arg4, arg5);
+fail:
+	if (arg2 && lparg2) setNSPointFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2FFF_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2DDD_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2FFFZ) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2DDDZ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2FFFZ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jfloatDouble arg3, jfloatDouble arg4, jfloatDouble arg5, jboolean arg6)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2DDDZ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jfloatDouble arg3, jfloatDouble arg4, jfloatDouble arg5, jboolean arg6)
+#endif
+{
+	NSPoint _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2FFFZ_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2DDDZ_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSPointFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSPoint, jfloatDouble, jfloatDouble, jfloatDouble, jboolean))objc_msgSend)(arg0, arg1, *lparg2, arg3, arg4, arg5, arg6);
+fail:
+	if (arg2 && lparg2) setNSPointFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2FFFZ_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2DDDZ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2I_3F) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J_3D) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2I_3F)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3, jfloatDoubleArray arg4)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J_3D)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3, jfloatDoubleArray arg4)
+#endif
+{
+	NSPoint _arg2, *lparg2=NULL;
+	jfloatDouble *lparg4=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2I_3F_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J_3D_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSPointFields(env, arg2, &_arg2)) == NULL) goto fail;
+	if (arg4) if ((lparg4 = (*env)->GetFloatDoubleArrayElements(env, arg4, NULL)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSPoint, jintLong, jfloatDouble *))objc_msgSend)(arg0, arg1, *lparg2, arg3, lparg4);
+fail:
+	if (arg4 && lparg4) (*env)->ReleaseFloatDoubleArrayElements(env, arg4, lparg4, 0);
+	if (arg2 && lparg2) setNSPointFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2I_3F_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J_3D_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2I)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jobject arg3, jintLong arg4)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2J)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jobject arg3, jintLong arg4)
+#endif
+{
+	NSPoint _arg2, *lparg2=NULL;
+	NSPoint _arg3, *lparg3=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2J_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSPointFields(env, arg2, &_arg2)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSPointFields(env, arg3, &_arg3)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSPoint, NSPoint, jintLong))objc_msgSend)(arg0, arg1, *lparg2, *lparg3, arg4);
+fail:
+	if (arg3 && lparg3) setNSPointFields(env, arg3, lparg3);
+	if (arg2 && lparg2) setNSPointFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2J_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jobject arg3, jobject arg4)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jobject arg3, jobject arg4)
+#endif
+{
+	NSPoint _arg2, *lparg2=NULL;
+	NSPoint _arg3, *lparg3=NULL;
+	NSPoint _arg4, *lparg4=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSPointFields(env, arg2, &_arg2)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSPointFields(env, arg3, &_arg3)) == NULL) goto fail;
+	if (arg4) if ((lparg4 = getNSPointFields(env, arg4, &_arg4)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSPoint, NSPoint, NSPoint))objc_msgSend)(arg0, arg1, *lparg2, *lparg3, *lparg4);
+fail:
+	if (arg4 && lparg4) setNSPointFields(env, arg4, lparg4);
+	if (arg3 && lparg3) setNSPointFields(env, arg3, lparg3);
+	if (arg2 && lparg2) setNSPointFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2IF) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2JD) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2IF)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jobject arg3, jintLong arg4, jfloatDouble arg5)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2JD)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jobject arg3, jintLong arg4, jfloatDouble arg5)
+#endif
+{
+	NSPoint _arg2, *lparg2=NULL;
+	NSRect _arg3, *lparg3=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2IF_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2JD_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSPointFields(env, arg2, &_arg2)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSRectFields(env, arg3, &_arg3)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSPoint, NSRect, jintLong, jfloatDouble))objc_msgSend)(arg0, arg1, *lparg2, *lparg3, arg4, arg5);
+fail:
+	if (arg3 && lparg3) setNSRectFields(env, arg3, lparg3);
+	if (arg2 && lparg2) setNSPointFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2IF_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2JD_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2)
+#endif
+{
+	NSRange _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSRangeFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSRange))objc_msgSend)(arg0, arg1, *lparg2);
+fail:
+	if (arg2 && lparg2) setNSRangeFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2I)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2J)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3)
+#endif
+{
+	NSRange _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2J_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSRangeFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSRange, jintLong))objc_msgSend)(arg0, arg1, *lparg2, arg3);
+fail:
+	if (arg2 && lparg2) setNSRangeFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2J_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2IIIII) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2JJJJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2IIIII)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3, jintLong arg4, jintLong arg5, jintLong arg6, jintLong arg7)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2JJJJJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3, jintLong arg4, jintLong arg5, jintLong arg6, jintLong arg7)
+#endif
+{
+	NSRange _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2IIIII_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2JJJJJ_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSRangeFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSRange, jintLong, jintLong, jintLong, jintLong, jintLong))objc_msgSend)(arg0, arg1, *lparg2, arg3, arg4, arg5, arg6, arg7);
+fail:
+	if (arg2 && lparg2) setNSRangeFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2IIIII_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2JJJJJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jobject arg3)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jobject arg3)
+#endif
+{
+	NSRange _arg2, *lparg2=NULL;
+	NSPoint _arg3, *lparg3=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSRangeFields(env, arg2, &_arg2)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSPointFields(env, arg3, &_arg3)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSRange, NSPoint))objc_msgSend)(arg0, arg1, *lparg2, *lparg3);
+fail:
+	if (arg3 && lparg3) setNSPointFields(env, arg3, lparg3);
+	if (arg2 && lparg2) setNSRangeFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRange_2II) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRange_2JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRange_2II)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jobject arg3, jintLong arg4, jintLong arg5)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRange_2JJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jobject arg3, jintLong arg4, jintLong arg5)
+#endif
+{
+	NSRange _arg2, *lparg2=NULL;
+	NSRange _arg3, *lparg3=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRange_2II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRange_2JJ_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSRangeFields(env, arg2, &_arg2)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSRangeFields(env, arg3, &_arg3)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSRange, NSRange, jintLong, jintLong))objc_msgSend)(arg0, arg1, *lparg2, *lparg3, arg4, arg5);
+fail:
+	if (arg3 && lparg3) setNSRangeFields(env, arg3, lparg3);
+	if (arg2 && lparg2) setNSRangeFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRange_2II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRange_2JJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2)
+#endif
+{
+	NSRect _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSRectFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSRect))objc_msgSend)(arg0, arg1, *lparg2);
+fail:
+	if (arg2 && lparg2) setNSRectFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2F) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2D) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2F)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jfloatDouble arg3)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2D)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jfloatDouble arg3)
+#endif
+{
+	NSRect _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2F_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2D_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSRectFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSRect, jfloatDouble))objc_msgSend)(arg0, arg1, *lparg2, arg3);
+fail:
+	if (arg2 && lparg2) setNSRectFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2F_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2D_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2FF) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2DD) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2FF)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jfloatDouble arg3, jfloatDouble arg4)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2DD)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jfloatDouble arg3, jfloatDouble arg4)
+#endif
+{
+	NSRect _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2FF_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2DD_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSRectFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSRect, jfloatDouble, jfloatDouble))objc_msgSend)(arg0, arg1, *lparg2, arg3, arg4);
+fail:
+	if (arg2 && lparg2) setNSRectFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2FF_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2DD_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2I)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2J)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3)
+#endif
+{
+	NSRect _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSRectFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSRect, jintLong))objc_msgSend)(arg0, arg1, *lparg2, arg3);
+fail:
+	if (arg2 && lparg2) setNSRectFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2II) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2II)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3, jintLong arg4)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3, jintLong arg4)
+#endif
+{
+	NSRect _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJ_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSRectFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSRect, jintLong, jintLong))objc_msgSend)(arg0, arg1, *lparg2, arg3, arg4);
+fail:
+	if (arg2 && lparg2) setNSRectFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2III) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2III)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3, jintLong arg4, jintLong arg5)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3, jintLong arg4, jintLong arg5)
+#endif
+{
+	NSRect _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2III_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJJ_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSRectFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSRect, jintLong, jintLong, jintLong))objc_msgSend)(arg0, arg1, *lparg2, arg3, arg4, arg5);
+fail:
+	if (arg2 && lparg2) setNSRectFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2III_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2IIZ) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJZ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2IIZ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3, jintLong arg4, jboolean arg5)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJZ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3, jintLong arg4, jboolean arg5)
+#endif
+{
+	NSRect _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2IIZ_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJZ_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSRectFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSRect, jintLong, jintLong, jboolean))objc_msgSend)(arg0, arg1, *lparg2, arg3, arg4, arg5);
+fail:
+	if (arg2 && lparg2) setNSRectFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2IIZ_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJZ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2IIZI) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJZJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2IIZI)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3, jintLong arg4, jboolean arg5, jintLong arg6)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJZJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3, jintLong arg4, jboolean arg5, jintLong arg6)
+#endif
+{
+	NSRect _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2IIZI_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJZJ_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSRectFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSRect, jintLong, jintLong, jboolean, jintLong))objc_msgSend)(arg0, arg1, *lparg2, arg3, arg4, arg5, arg6);
+fail:
+	if (arg2 && lparg2) setNSRectFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2IIZI_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJZJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2IZI) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JZJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2IZI)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3, jboolean arg4, jintLong arg5)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JZJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3, jboolean arg4, jintLong arg5)
+#endif
+{
+	NSRect _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2IZI_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JZJ_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSRectFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSRect, jintLong, jboolean, jintLong))objc_msgSend)(arg0, arg1, *lparg2, arg3, arg4, arg5);
+fail:
+	if (arg2 && lparg2) setNSRectFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2IZI_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JZJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jobject arg3)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jobject arg3)
+#endif
+{
+	NSRect _arg2, *lparg2=NULL;
+	NSPoint _arg3, *lparg3=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSRectFields(env, arg2, &_arg2)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSPointFields(env, arg3, &_arg3)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSRect, NSPoint))objc_msgSend)(arg0, arg1, *lparg2, *lparg3);
+fail:
+	if (arg3 && lparg3) setNSPointFields(env, arg3, lparg3);
+	if (arg2 && lparg2) setNSRectFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRect_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRect_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRect_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jobject arg3, jobject arg4)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRect_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jobject arg3, jobject arg4)
+#endif
+{
+	NSRect _arg2, *lparg2=NULL;
+	NSRange _arg3, *lparg3=NULL;
+	NSRect _arg4, *lparg4=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSRectFields(env, arg2, &_arg2)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSRangeFields(env, arg3, &_arg3)) == NULL) goto fail;
+	if (arg4) if ((lparg4 = getNSRectFields(env, arg4, &_arg4)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSRect, NSRange, NSRect))objc_msgSend)(arg0, arg1, *lparg2, *lparg3, *lparg4);
+fail:
+	if (arg4 && lparg4) setNSRectFields(env, arg4, lparg4);
+	if (arg3 && lparg3) setNSRangeFields(env, arg3, lparg3);
+	if (arg2 && lparg2) setNSRectFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRect_2IF) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRect_2JD) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRect_2IF)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jobject arg3, jintLong arg4, jfloatDouble arg5)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRect_2JD)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jobject arg3, jintLong arg4, jfloatDouble arg5)
+#endif
+{
+	NSRect _arg2, *lparg2=NULL;
+	NSRect _arg3, *lparg3=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRect_2IF_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRect_2JD_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSRectFields(env, arg2, &_arg2)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSRectFields(env, arg3, &_arg3)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSRect, NSRect, jintLong, jfloatDouble))objc_msgSend)(arg0, arg1, *lparg2, *lparg3, arg4, arg5);
+fail:
+	if (arg3 && lparg3) setNSRectFields(env, arg3, lparg3);
+	if (arg2 && lparg2) setNSRectFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRect_2IF_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRect_2JD_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Z) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Z) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Z)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jboolean arg3)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Z)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jboolean arg3)
+#endif
+{
+	NSRect _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Z_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Z_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSRectFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSRect, jboolean))objc_msgSend)(arg0, arg1, *lparg2, arg3);
+fail:
+	if (arg2 && lparg2) setNSRectFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Z_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Z_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2ZZ) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2ZZ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2ZZ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jboolean arg3, jboolean arg4)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2ZZ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jboolean arg3, jboolean arg4)
+#endif
+{
+	NSRect _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2ZZ_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2ZZ_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSRectFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSRect, jboolean, jboolean))objc_msgSend)(arg0, arg1, *lparg2, arg3, arg4);
+fail:
+	if (arg2 && lparg2) setNSRectFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2ZZ_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2ZZ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSSize_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSSize_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSSize_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSSize_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2)
+#endif
+{
+	NSSize _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSSize_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSSize_2_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSSizeFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, NSSize))objc_msgSend)(arg0, arg1, *lparg2);
+fail:
+	if (arg2 && lparg2) setNSSizeFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSSize_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSSize_2_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIZ) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJZ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIZ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jboolean arg2)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJZ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jboolean arg2)
+#endif
+{
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIZ_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJZ_FUNC);
+#endif
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jboolean))objc_msgSend)(arg0, arg1, arg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIZ_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJZ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__IIZI) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJZJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__IIZI)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jboolean arg2, jintLong arg3)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJZJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jboolean arg2, jintLong arg3)
+#endif
+{
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__IIZI_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJZJ_FUNC);
+#endif
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jboolean, jintLong))objc_msgSend)(arg0, arg1, arg2, arg3);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__IIZI_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJZJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__II_3B) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJ_3B) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__II_3B)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jbyteArray arg2)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJ_3B)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jbyteArray arg2)
+#endif
+{
+	jbyte *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__II_3B_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJ_3B_FUNC);
+#endif
+	if (arg2) if ((lparg2 = (*env)->GetByteArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jbyte *))objc_msgSend)(arg0, arg1, lparg2);
+fail:
+	if (arg2 && lparg2) (*env)->ReleaseByteArrayElements(env, arg2, lparg2, 0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__II_3B_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJ_3B_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__II_3BI) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJ_3BJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__II_3BI)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jbyteArray arg2, jintLong arg3)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJ_3BJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jbyteArray arg2, jintLong arg3)
+#endif
+{
+	jbyte *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__II_3BI_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJ_3BJ_FUNC);
+#endif
+	if (arg2) if ((lparg2 = (*env)->GetByteArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jbyte *, jintLong))objc_msgSend)(arg0, arg1, lparg2, arg3);
+fail:
+	if (arg2 && lparg2) (*env)->ReleaseByteArrayElements(env, arg2, lparg2, 0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__II_3BI_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJ_3BJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__II_3C) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJ_3C) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__II_3C)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jcharArray arg2)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJ_3C)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jcharArray arg2)
+#endif
+{
+	jchar *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__II_3C_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJ_3C_FUNC);
+#endif
+	if (arg2) if ((lparg2 = (*env)->GetCharArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jchar *))objc_msgSend)(arg0, arg1, lparg2);
+fail:
+	if (arg2 && lparg2) (*env)->ReleaseCharArrayElements(env, arg2, lparg2, 0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__II_3C_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJ_3C_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__II_3CI) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJ_3CJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__II_3CI)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jcharArray arg2, jintLong arg3)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJ_3CJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jcharArray arg2, jintLong arg3)
+#endif
+{
+	jchar *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__II_3CI_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJ_3CJ_FUNC);
+#endif
+	if (arg2) if ((lparg2 = (*env)->GetCharArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jchar *, jintLong))objc_msgSend)(arg0, arg1, lparg2, arg3);
+fail:
+	if (arg2 && lparg2) (*env)->ReleaseCharArrayElements(env, arg2, lparg2, 0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__II_3CI_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJ_3CJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__II_3CLorg_eclipse_swt_internal_cocoa_NSRange_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJ_3CLorg_eclipse_swt_internal_cocoa_NSRange_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__II_3CLorg_eclipse_swt_internal_cocoa_NSRange_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jcharArray arg2, jobject arg3)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJ_3CLorg_eclipse_swt_internal_cocoa_NSRange_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jcharArray arg2, jobject arg3)
+#endif
+{
+	jchar *lparg2=NULL;
+	NSRange _arg3, *lparg3=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__II_3CLorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJ_3CLorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC);
+#endif
+	if (arg2) if ((lparg2 = (*env)->GetCharArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSRangeFields(env, arg3, &_arg3)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jchar *, NSRange))objc_msgSend)(arg0, arg1, lparg2, *lparg3);
+fail:
+	if (arg3 && lparg3) setNSRangeFields(env, arg3, lparg3);
+	if (arg2 && lparg2) (*env)->ReleaseCharArrayElements(env, arg2, lparg2, 0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__II_3CLorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJ_3CLorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__II_3F) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJ_3D) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__II_3F)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jfloatDoubleArray arg2)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJ_3D)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jfloatDoubleArray arg2)
+#endif
+{
+	jfloatDouble *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__II_3F_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJ_3D_FUNC);
+#endif
+	if (arg2) if ((lparg2 = (*env)->GetFloatDoubleArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jfloatDouble *))objc_msgSend)(arg0, arg1, lparg2);
+fail:
+	if (arg2 && lparg2) (*env)->ReleaseFloatDoubleArrayElements(env, arg2, lparg2, 0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__II_3F_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJ_3D_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__II_3FIF) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJ_3DJD) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__II_3FIF)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jfloatDoubleArray arg2, jintLong arg3, jfloatDouble arg4)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJ_3DJD)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jfloatDoubleArray arg2, jintLong arg3, jfloatDouble arg4)
+#endif
+{
+	jfloatDouble *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__II_3FIF_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJ_3DJD_FUNC);
+#endif
+	if (arg2) if ((lparg2 = (*env)->GetFloatDoubleArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jfloatDouble *, jintLong, jfloatDouble))objc_msgSend)(arg0, arg1, lparg2, arg3, arg4);
+fail:
+	if (arg2 && lparg2) (*env)->ReleaseFloatDoubleArrayElements(env, arg2, lparg2, 0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__II_3FIF_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJ_3DJD_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__II_3I) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJ_3J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__II_3I)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLongArray arg2)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJ_3J)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLongArray arg2)
+#endif
+{
+	jintLong *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__II_3I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJ_3J_FUNC);
+#endif
+	if (arg2) if ((lparg2 = (*env)->GetIntLongArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jintLong *))objc_msgSend)(arg0, arg1, lparg2);
+fail:
+	if (arg2 && lparg2) (*env)->ReleaseIntLongArrayElements(env, arg2, lparg2, 0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__II_3I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJ_3J_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend__II_3III) && !defined(JNI64)) || (!defined(NO_objc_1msgSend__JJ_3JII) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__II_3III)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLongArray arg2, jint arg3, jint arg4)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSend__JJ_3JII)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLongArray arg2, jint arg3, jint arg4)
+#endif
+{
+	jintLong *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__II_3III_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJ_3JII_FUNC);
+#endif
+	if (arg2) if ((lparg2 = (*env)->GetIntLongArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(jintLong, jintLong, jintLong *, jint, jint))objc_msgSend)(arg0, arg1, lparg2, arg3, arg4);
+fail:
+	if (arg2 && lparg2) (*env)->ReleaseIntLongArrayElements(env, arg2, lparg2, 0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__II_3III_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJ_3JII_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__JJFD
+JNIEXPORT jlong JNICALL OS_NATIVE(objc_1msgSend__JJFD)
+	(JNIEnv *env, jclass that, jlong arg0, jlong arg1, jfloat arg2, jdouble arg3)
+{
+	jlong rc = 0;
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJFD_FUNC);
+	rc = (jlong)((jlong (*)(jlong, jlong, jfloat, jdouble))objc_msgSend)(arg0, arg1, arg2, arg3);
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJFD_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__JJI
+JNIEXPORT jlong JNICALL OS_NATIVE(objc_1msgSend__JJI)
+	(JNIEnv *env, jclass that, jlong arg0, jlong arg1, jint arg2)
+{
+	jlong rc = 0;
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJI_FUNC);
+	rc = (jlong)((jlong (*)(jlong, jlong, jint))objc_msgSend)(arg0, arg1, arg2);
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJI_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__JJ_3I
+JNIEXPORT jlong JNICALL OS_NATIVE(objc_1msgSend__JJ_3I)
+	(JNIEnv *env, jclass that, jlong arg0, jlong arg1, jintArray arg2)
+{
+	jint *lparg2=NULL;
+	jlong rc = 0;
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJ_3I_FUNC);
+	if (arg2) if ((lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	rc = (jlong)((jlong (*)(jlong, jlong, jint *))objc_msgSend)(arg0, arg1, lparg2);
+fail:
+	if (arg2 && lparg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJ_3I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSend__JJ_3JJJ
+JNIEXPORT jlong JNICALL OS_NATIVE(objc_1msgSend__JJ_3JJJ)
+	(JNIEnv *env, jclass that, jlong arg0, jlong arg1, jlongArray arg2, jlong arg3, jlong arg4)
+{
+	jlong *lparg2=NULL;
+	jlong rc = 0;
+	OS_NATIVE_ENTER(env, that, objc_1msgSend__JJ_3JJJ_FUNC);
+	if (arg2) if ((lparg2 = (*env)->GetLongArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	rc = (jlong)((jlong (*)(jlong, jlong, jlong *, jlong, jlong))objc_msgSend)(arg0, arg1, lparg2, arg3, arg4);
+fail:
+	if (arg2 && lparg2) (*env)->ReleaseLongArrayElements(env, arg2, lparg2, 0);
+	OS_NATIVE_EXIT(env, that, objc_1msgSend__JJ_3JJJ_FUNC);
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2I)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2J)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1)
+#endif
+{
+	struct objc_super _arg0, *lparg0=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2J_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getobjc_superFields(env, arg0, &_arg0)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(struct objc_super *, jintLong))objc_msgSendSuper)(lparg0, arg1);
+fail:
+	if (arg0 && lparg0) setobjc_superFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2J_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2II) && !defined(JNI64)) || (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	struct objc_super _arg0, *lparg0=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getobjc_superFields(env, arg0, &_arg0)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(struct objc_super *, jintLong, jintLong))objc_msgSendSuper)(lparg0, arg1, arg2);
+fail:
+	if (arg0 && lparg0) setobjc_superFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2III) && !defined(JNI64)) || (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2III)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jintLong arg3)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJJ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jintLong arg3)
+#endif
+{
+	struct objc_super _arg0, *lparg0=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2III_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJJ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getobjc_superFields(env, arg0, &_arg0)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(struct objc_super *, jintLong, jintLong, jintLong))objc_msgSendSuper)(lparg0, arg1, arg2, arg3);
+fail:
+	if (arg0 && lparg0) setobjc_superFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2III_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IIIII) && !defined(JNI64)) || (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJJJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IIIII)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jintLong arg5)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJJJJ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jintLong arg5)
+#endif
+{
+	struct objc_super _arg0, *lparg0=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IIIII_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJJJJ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getobjc_superFields(env, arg0, &_arg0)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(struct objc_super *, jintLong, jintLong, jintLong, jintLong, jintLong))objc_msgSendSuper)(lparg0, arg1, arg2, arg3, arg4, arg5);
+fail:
+	if (arg0 && lparg0) setobjc_superFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IIIII_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJJJJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IIIIZ) && !defined(JNI64)) || (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJJJZ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IIIIZ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jboolean arg5)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJJJZ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jboolean arg5)
+#endif
+{
+	struct objc_super _arg0, *lparg0=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IIIIZ_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJJJZ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getobjc_superFields(env, arg0, &_arg0)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(struct objc_super *, jintLong, jintLong, jintLong, jintLong, jboolean))objc_msgSendSuper)(lparg0, arg1, arg2, arg3, arg4, arg5);
+fail:
+	if (arg0 && lparg0) setobjc_superFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IIIIZ_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJJJZ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2I)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4)
+#endif
+{
+	struct objc_super _arg0, *lparg0=NULL;
+	NSPoint _arg3, *lparg3=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getobjc_superFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSPointFields(env, arg3, &_arg3)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(struct objc_super *, jintLong, jintLong, NSPoint, jintLong))objc_msgSendSuper)(lparg0, arg1, arg2, *lparg3, arg4);
+fail:
+	if (arg3 && lparg3) setNSPointFields(env, arg3, lparg3);
+	if (arg0 && lparg0) setobjc_superFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2J)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4)
+#endif
+{
+	struct objc_super _arg0, *lparg0=NULL;
+	NSRect _arg3, *lparg3=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getobjc_superFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSRectFields(env, arg3, &_arg3)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(struct objc_super *, jintLong, jintLong, NSRect, jintLong))objc_msgSendSuper)(lparg0, arg1, arg2, *lparg3, arg4);
+fail:
+	if (arg3 && lparg3) setNSRectFields(env, arg3, lparg3);
+	if (arg0 && lparg0) setobjc_superFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IIZ) && !defined(JNI64)) || (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJZ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IIZ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jboolean arg3)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJZ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jboolean arg3)
+#endif
+{
+	struct objc_super _arg0, *lparg0=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IIZ_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJZ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getobjc_superFields(env, arg0, &_arg0)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(struct objc_super *, jintLong, jintLong, jboolean))objc_msgSendSuper)(lparg0, arg1, arg2, arg3);
+fail:
+	if (arg0 && lparg0) setobjc_superFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IIZ_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJZ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSPoint_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSPoint_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSPoint_2)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jobject arg2)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSPoint_2)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jobject arg2)
+#endif
+{
+	struct objc_super _arg0, *lparg0=NULL;
+	NSPoint _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getobjc_superFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg2) if ((lparg2 = getNSPointFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(struct objc_super *, jintLong, NSPoint))objc_msgSendSuper)(lparg0, arg1, *lparg2);
+fail:
+	if (arg2 && lparg2) setNSPointFields(env, arg2, lparg2);
+	if (arg0 && lparg0) setobjc_superFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jobject arg2)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jobject arg2)
+#endif
+{
+	struct objc_super _arg0, *lparg0=NULL;
+	NSRect _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getobjc_superFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg2) if ((lparg2 = getNSRectFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(struct objc_super *, jintLong, NSRect))objc_msgSendSuper)(lparg0, arg1, *lparg2);
+fail:
+	if (arg2 && lparg2) setNSRectFields(env, arg2, lparg2);
+	if (arg0 && lparg0) setobjc_superFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2I)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jobject arg2, jintLong arg3)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2J)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jobject arg2, jintLong arg3)
+#endif
+{
+	struct objc_super _arg0, *lparg0=NULL;
+	NSRect _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getobjc_superFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg2) if ((lparg2 = getNSRectFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(struct objc_super *, jintLong, NSRect, jintLong))objc_msgSendSuper)(lparg0, arg1, *lparg2, arg3);
+fail:
+	if (arg2 && lparg2) setNSRectFields(env, arg2, lparg2);
+	if (arg0 && lparg0) setobjc_superFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSSize_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSSize_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSSize_2)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jobject arg2)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSSize_2)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jobject arg2)
+#endif
+{
+	struct objc_super _arg0, *lparg0=NULL;
+	NSSize _arg2, *lparg2=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSSize_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSSize_2_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getobjc_superFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg2) if ((lparg2 = getNSSizeFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(struct objc_super *, jintLong, NSSize))objc_msgSendSuper)(lparg0, arg1, *lparg2);
+fail:
+	if (arg2 && lparg2) setNSSizeFields(env, arg2, lparg2);
+	if (arg0 && lparg0) setobjc_superFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSSize_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSSize_2_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IZ) && !defined(JNI64)) || (!defined(NO_objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JZ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IZ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jboolean arg2)
+#else
+JNIEXPORT jintLong JNICALL OS_NATIVE(objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JZ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jboolean arg2)
+#endif
+{
+	struct objc_super _arg0, *lparg0=NULL;
+	jintLong rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IZ_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JZ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getobjc_superFields(env, arg0, &_arg0)) == NULL) goto fail;
+	rc = (jintLong)((jintLong (*)(struct objc_super *, jintLong, jboolean))objc_msgSendSuper)(lparg0, arg1, arg2);
+fail:
+	if (arg0 && lparg0) setobjc_superFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IZ_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JZ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#ifndef NO_objc_1msgSendSuper_1bool
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSendSuper_1bool)
+	(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jobject arg2, jintLong arg3)
+{
+	struct objc_super _arg0, *lparg0=NULL;
+	NSRange _arg2, *lparg2=NULL;
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper_1bool_FUNC);
+	if (arg0) if ((lparg0 = getobjc_superFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg2) if ((lparg2 = getNSRangeFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jboolean)((jboolean (*)(struct objc_super *, jintLong, NSRange, jintLong))objc_msgSendSuper_bool)(lparg0, arg1, *lparg2, arg3);
+fail:
+	if (arg2 && lparg2) setNSRangeFields(env, arg2, lparg2);
+	if (arg0 && lparg0) setobjc_superFields(env, arg0, lparg0);
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper_1bool_FUNC);
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2)(JNIEnv *env, jclass that, jobject arg0, jobject arg1, jintLong arg2, jobject arg3)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2)(JNIEnv *env, jclass that, jobject arg0, jobject arg1, jintLong arg2, jobject arg3)
+#endif
+{
+	NSRect _arg0, *lparg0=NULL;
+	struct objc_super _arg1, *lparg1=NULL;
+	NSRect _arg3, *lparg3=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSRectFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg1) if ((lparg1 = getobjc_superFields(env, arg1, &_arg1)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSRectFields(env, arg3, &_arg3)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSRect (*)(struct objc_super *, jintLong, NSRect))objc_msgSendSuper_stret)(lparg1, arg2, *lparg3);
+	} else {
+		*lparg0 = (*(NSRect (*)(struct objc_super *, jintLong, NSRect))objc_msgSendSuper)(lparg1, arg2, *lparg3);
+	}
+fail:
+	if (arg3 && lparg3) setNSRectFields(env, arg3, lparg3);
+	if (arg1 && lparg1) setobjc_superFields(env, arg1, lparg1);
+	if (arg0 && lparg0) setNSRectFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2I)(JNIEnv *env, jclass that, jobject arg0, jobject arg1, jintLong arg2, jobject arg3, jintLong arg4)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2J)(JNIEnv *env, jclass that, jobject arg0, jobject arg1, jintLong arg2, jobject arg3, jintLong arg4)
+#endif
+{
+	NSRect _arg0, *lparg0=NULL;
+	struct objc_super _arg1, *lparg1=NULL;
+	NSRect _arg3, *lparg3=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSRectFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg1) if ((lparg1 = getobjc_superFields(env, arg1, &_arg1)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSRectFields(env, arg3, &_arg3)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSRect (*)(struct objc_super *, jintLong, NSRect, jintLong))objc_msgSendSuper_stret)(lparg1, arg2, *lparg3, arg4);
+	} else {
+		*lparg0 = (*(NSRect (*)(struct objc_super *, jintLong, NSRect, jintLong))objc_msgSendSuper)(lparg1, arg2, *lparg3, arg4);
+	}
+fail:
+	if (arg3 && lparg3) setNSRectFields(env, arg3, lparg3);
+	if (arg1 && lparg1) setobjc_superFields(env, arg1, lparg1);
+	if (arg0 && lparg0) setNSRectFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2I)(JNIEnv *env, jclass that, jobject arg0, jobject arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2J)(JNIEnv *env, jclass that, jobject arg0, jobject arg1, jintLong arg2)
+#endif
+{
+	NSSize _arg0, *lparg0=NULL;
+	struct objc_super _arg1, *lparg1=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2J_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSSizeFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg1) if ((lparg1 = getobjc_superFields(env, arg1, &_arg1)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSSize (*)(struct objc_super *, jintLong))objc_msgSendSuper_stret)(lparg1, arg2);
+	} else {
+		*lparg0 = (*(NSSize (*)(struct objc_super *, jintLong))objc_msgSendSuper)(lparg1, arg2);
+	}
+fail:
+	if (arg1 && lparg1) setobjc_superFields(env, arg1, lparg1);
+	if (arg0 && lparg0) setNSSizeFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2J_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1bool__II) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1bool__JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__II)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+#else
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__JJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+#endif
+{
+	jboolean rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__JJ_FUNC);
+#endif
+	rc = (jboolean)((BOOL (*)(jintLong, jintLong))objc_msgSend_bool)(arg0, arg1);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__JJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1bool__III) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1bool__JJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__III)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__JJJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	jboolean rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__III_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__JJJ_FUNC);
+#endif
+	rc = (jboolean)((BOOL (*)(jintLong, jintLong, jintLong))objc_msgSend_bool)(arg0, arg1, arg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__III_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__JJJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1bool__IIII) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1bool__JJJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__IIII)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3)
+#else
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__JJJJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3)
+#endif
+{
+	jboolean rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__IIII_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__JJJJ_FUNC);
+#endif
+	rc = (jboolean)((BOOL (*)(jintLong, jintLong, jintLong, jintLong))objc_msgSend_bool)(arg0, arg1, arg2, arg3);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__IIII_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__JJJJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1bool__IIIII) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1bool__JJJJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__IIIII)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4)
+#else
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__JJJJJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4)
+#endif
+{
+	jboolean rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__IIIII_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__JJJJJ_FUNC);
+#endif
+	rc = (jboolean)((BOOL (*)(jintLong, jintLong, jintLong, jintLong, jintLong))objc_msgSend_bool)(arg0, arg1, arg2, arg3, arg4);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__IIIII_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__JJJJJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1bool__IIIIIII) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1bool__JJJJJJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__IIIIIII)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jintLong arg5, jintLong arg6)
+#else
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__JJJJJJJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jintLong arg5, jintLong arg6)
+#endif
+{
+	jboolean rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__IIIIIII_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__JJJJJJJ_FUNC);
+#endif
+	rc = (jboolean)((BOOL (*)(jintLong, jintLong, jintLong, jintLong, jintLong, jintLong, jintLong))objc_msgSend_bool)(arg0, arg1, arg2, arg3, arg4, arg5, arg6);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__IIIIIII_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__JJJJJJJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1bool__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1bool__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jobject arg3)
+#else
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jobject arg3)
+#endif
+{
+	NSPoint _arg3, *lparg3=NULL;
+	jboolean rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#endif
+	if (arg3) if ((lparg3 = getNSPointFields(env, arg3, &_arg3)) == NULL) goto fail;
+	rc = (jboolean)((BOOL (*)(jintLong, jintLong, jintLong, NSPoint))objc_msgSend_bool)(arg0, arg1, arg2, *lparg3);
+fail:
+	if (arg3 && lparg3) setNSPointFields(env, arg3, lparg3);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1bool__IIILorg_eclipse_swt_internal_cocoa_NSSize_2Z) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1bool__JJJLorg_eclipse_swt_internal_cocoa_NSSize_2Z) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__IIILorg_eclipse_swt_internal_cocoa_NSSize_2Z)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jobject arg3, jboolean arg4)
+#else
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__JJJLorg_eclipse_swt_internal_cocoa_NSSize_2Z)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jobject arg3, jboolean arg4)
+#endif
+{
+	NSSize _arg3, *lparg3=NULL;
+	jboolean rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__IIILorg_eclipse_swt_internal_cocoa_NSSize_2Z_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__JJJLorg_eclipse_swt_internal_cocoa_NSSize_2Z_FUNC);
+#endif
+	if (arg3) if ((lparg3 = getNSSizeFields(env, arg3, &_arg3)) == NULL) goto fail;
+	rc = (jboolean)((BOOL (*)(jintLong, jintLong, jintLong, NSSize, jboolean))objc_msgSend_bool)(arg0, arg1, arg2, *lparg3, arg4);
+fail:
+	if (arg3 && lparg3) setNSSizeFields(env, arg3, lparg3);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__IIILorg_eclipse_swt_internal_cocoa_NSSize_2Z_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__JJJLorg_eclipse_swt_internal_cocoa_NSSize_2Z_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSPoint_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSPoint_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2)
+#else
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2)
+#endif
+{
+	NSPoint _arg2, *lparg2=NULL;
+	jboolean rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSPointFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jboolean)((BOOL (*)(jintLong, jintLong, NSPoint))objc_msgSend_bool)(arg0, arg1, *lparg2);
+fail:
+	if (arg2 && lparg2) setNSPointFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSRange_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSRange_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSRange_2I)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3)
+#else
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSRange_2J)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2, jintLong arg3)
+#endif
+{
+	NSRange _arg2, *lparg2=NULL;
+	jboolean rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSRange_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSRange_2J_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSRangeFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jboolean)((BOOL (*)(jintLong, jintLong, NSRange, jintLong))objc_msgSend_bool)(arg0, arg1, *lparg2, arg3);
+fail:
+	if (arg2 && lparg2) setNSRangeFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSRange_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSRange_2J_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSRect_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSRect_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSRect_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2)
+#else
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSRect_2)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jobject arg2)
+#endif
+{
+	NSRect _arg2, *lparg2=NULL;
+	jboolean rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#endif
+	if (arg2) if ((lparg2 = getNSRectFields(env, arg2, &_arg2)) == NULL) goto fail;
+	rc = (jboolean)((BOOL (*)(jintLong, jintLong, NSRect))objc_msgSend_bool)(arg0, arg1, *lparg2);
+fail:
+	if (arg2 && lparg2) setNSRectFields(env, arg2, lparg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1bool__IIS) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1bool__JJS) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__IIS)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jshort arg2)
+#else
+JNIEXPORT jboolean JNICALL OS_NATIVE(objc_1msgSend_1bool__JJS)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jshort arg2)
+#endif
+{
+	jboolean rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__IIS_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1bool__JJS_FUNC);
+#endif
+	rc = (jboolean)((BOOL (*)(jintLong, jintLong, jshort))objc_msgSend_bool)(arg0, arg1, arg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__IIS_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1bool__JJS_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1fpret__II) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1fpret__JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jdouble JNICALL OS_NATIVE(objc_1msgSend_1fpret__II)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+#else
+JNIEXPORT jdouble JNICALL OS_NATIVE(objc_1msgSend_1fpret__JJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+#endif
+{
+	jdouble rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1fpret__II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1fpret__JJ_FUNC);
+#endif
+	rc = (jdouble)((jdouble (*)(jintLong, jintLong))objc_msgSend_fpret)(arg0, arg1);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1fpret__II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1fpret__JJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1fpret__III) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1fpret__JJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jdouble JNICALL OS_NATIVE(objc_1msgSend_1fpret__III)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT jdouble JNICALL OS_NATIVE(objc_1msgSend_1fpret__JJJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	jdouble rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1fpret__III_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1fpret__JJJ_FUNC);
+#endif
+	rc = (jdouble)((jdouble (*)(jintLong, jintLong, jintLong))objc_msgSend_fpret)(arg0, arg1, arg2);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1fpret__III_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1fpret__JJJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1fpret__IIII) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1fpret__JJJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT jdouble JNICALL OS_NATIVE(objc_1msgSend_1fpret__IIII)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3)
+#else
+JNIEXPORT jdouble JNICALL OS_NATIVE(objc_1msgSend_1fpret__JJJJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2, jintLong arg3)
+#endif
+{
+	jdouble rc = 0;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1fpret__IIII_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1fpret__JJJJ_FUNC);
+#endif
+	rc = (jdouble)((jdouble (*)(jintLong, jintLong, jintLong, jintLong))objc_msgSend_fpret)(arg0, arg1, arg2, arg3);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1fpret__IIII_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1fpret__JJJJ_FUNC);
+#endif
+	return rc;
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2II) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2JJ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	NSAffineTransformStruct _arg0, *lparg0=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2JJ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSAffineTransformStructFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSAffineTransformStruct (*)(jintLong, jintLong))objc_msgSend_stret)(arg1, arg2);
+	} else {
+		*lparg0 = (*(NSAffineTransformStruct (*)(jintLong, jintLong))objc_msgSend)(arg1, arg2);
+	}
+fail:
+	if (arg0 && lparg0) setNSAffineTransformStructFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2JJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2II) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	NSPoint _arg0, *lparg0=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSPointFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSPoint (*)(jintLong, jintLong))objc_msgSend_stret)(arg1, arg2);
+	} else {
+		*lparg0 = (*(NSPoint (*)(jintLong, jintLong))objc_msgSend)(arg1, arg2);
+	}
+fail:
+	if (arg0 && lparg0) setNSPointFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2III) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2III)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jintLong arg3)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJJ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jintLong arg3)
+#endif
+{
+	NSPoint _arg0, *lparg0=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2III_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJJ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSPointFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSPoint (*)(jintLong, jintLong, jintLong))objc_msgSend_stret)(arg1, arg2, arg3);
+	} else {
+		*lparg0 = (*(NSPoint (*)(jintLong, jintLong, jintLong))objc_msgSend)(arg1, arg2, arg3);
+	}
+fail:
+	if (arg0 && lparg0) setNSPointFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2III_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3)
+#endif
+{
+	NSPoint _arg0, *lparg0=NULL;
+	NSPoint _arg3, *lparg3=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSPointFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSPointFields(env, arg3, &_arg3)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSPoint (*)(jintLong, jintLong, NSPoint))objc_msgSend_stret)(arg1, arg2, *lparg3);
+	} else {
+		*lparg0 = (*(NSPoint (*)(jintLong, jintLong, NSPoint))objc_msgSend)(arg1, arg2, *lparg3);
+	}
+fail:
+	if (arg3 && lparg3) setNSPointFields(env, arg3, lparg3);
+	if (arg0 && lparg0) setNSPointFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2I)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4)
+#endif
+{
+	NSPoint _arg0, *lparg0=NULL;
+	NSPoint _arg3, *lparg3=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSPointFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSPointFields(env, arg3, &_arg3)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSPoint (*)(jintLong, jintLong, NSPoint, jintLong))objc_msgSend_stret)(arg1, arg2, *lparg3, arg4);
+	} else {
+		*lparg0 = (*(NSPoint (*)(jintLong, jintLong, NSPoint, jintLong))objc_msgSend)(arg1, arg2, *lparg3, arg4);
+	}
+fail:
+	if (arg3 && lparg3) setNSPointFields(env, arg3, lparg3);
+	if (arg0 && lparg0) setNSPointFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2II) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	NSRange _arg0, *lparg0=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSRangeFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSRange (*)(jintLong, jintLong))objc_msgSend_stret)(arg1, arg2);
+	} else {
+		*lparg0 = (*(NSRange (*)(jintLong, jintLong))objc_msgSend)(arg1, arg2);
+	}
+fail:
+	if (arg0 && lparg0) setNSRangeFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2III) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2III)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jintLong arg3)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJJ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jintLong arg3)
+#endif
+{
+	NSRange _arg0, *lparg0=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2III_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJJ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSRangeFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSRange (*)(jintLong, jintLong, jintLong))objc_msgSend_stret)(arg1, arg2, arg3);
+	} else {
+		*lparg0 = (*(NSRange (*)(jintLong, jintLong, jintLong))objc_msgSend)(arg1, arg2, arg3);
+	}
+fail:
+	if (arg0 && lparg0) setNSRangeFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2III_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2IILorg_eclipse_swt_internal_cocoa_NSRange_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJLorg_eclipse_swt_internal_cocoa_NSRange_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2IILorg_eclipse_swt_internal_cocoa_NSRange_2I)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJLorg_eclipse_swt_internal_cocoa_NSRange_2J)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4)
+#endif
+{
+	NSRange _arg0, *lparg0=NULL;
+	NSRange _arg3, *lparg3=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2IILorg_eclipse_swt_internal_cocoa_NSRange_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJLorg_eclipse_swt_internal_cocoa_NSRange_2J_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSRangeFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSRangeFields(env, arg3, &_arg3)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSRange (*)(jintLong, jintLong, NSRange, jintLong))objc_msgSend_stret)(arg1, arg2, *lparg3, arg4);
+	} else {
+		*lparg0 = (*(NSRange (*)(jintLong, jintLong, NSRange, jintLong))objc_msgSend)(arg1, arg2, *lparg3, arg4);
+	}
+fail:
+	if (arg3 && lparg3) setNSRangeFields(env, arg3, lparg3);
+	if (arg0 && lparg0) setNSRangeFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2IILorg_eclipse_swt_internal_cocoa_NSRange_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJLorg_eclipse_swt_internal_cocoa_NSRange_2J_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2IILorg_eclipse_swt_internal_cocoa_NSRect_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2IILorg_eclipse_swt_internal_cocoa_NSRect_2)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3)
+#endif
+{
+	NSRange _arg0, *lparg0=NULL;
+	NSRect _arg3, *lparg3=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2IILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSRangeFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSRectFields(env, arg3, &_arg3)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSRange (*)(jintLong, jintLong, NSRect))objc_msgSend_stret)(arg1, arg2, *lparg3);
+	} else {
+		*lparg0 = (*(NSRange (*)(jintLong, jintLong, NSRect))objc_msgSend)(arg1, arg2, *lparg3);
+	}
+fail:
+	if (arg3 && lparg3) setNSRectFields(env, arg3, lparg3);
+	if (arg0 && lparg0) setNSRangeFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2IILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2II) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	NSRect _arg0, *lparg0=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSRectFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSRect (*)(jintLong, jintLong))objc_msgSend_stret)(arg1, arg2);
+	} else {
+		*lparg0 = (*(NSRect (*)(jintLong, jintLong))objc_msgSend)(arg1, arg2);
+	}
+fail:
+	if (arg0 && lparg0) setNSRectFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2III) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2III)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jintLong arg3)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jintLong arg3)
+#endif
+{
+	NSRect _arg0, *lparg0=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2III_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSRectFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSRect (*)(jintLong, jintLong, jintLong))objc_msgSend_stret)(arg1, arg2, arg3);
+	} else {
+		*lparg0 = (*(NSRect (*)(jintLong, jintLong, jintLong))objc_msgSend)(arg1, arg2, arg3);
+	}
+fail:
+	if (arg0 && lparg0) setNSRectFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2III_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IIII) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IIII)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJJ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4)
+#endif
+{
+	NSRect _arg0, *lparg0=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IIII_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJJ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSRectFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSRect (*)(jintLong, jintLong, jintLong, jintLong))objc_msgSend_stret)(arg1, arg2, arg3, arg4);
+	} else {
+		*lparg0 = (*(NSRect (*)(jintLong, jintLong, jintLong, jintLong))objc_msgSend)(arg1, arg2, arg3, arg4);
+	}
+fail:
+	if (arg0 && lparg0) setNSRectFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IIII_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IIIIZ) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJJZ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IIIIZ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jboolean arg5)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJJZ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jboolean arg5)
+#endif
+{
+	NSRect _arg0, *lparg0=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IIIIZ_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJJZ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSRectFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSRect (*)(jintLong, jintLong, jintLong, jintLong, jboolean))objc_msgSend_stret)(arg1, arg2, arg3, arg4, arg5);
+	} else {
+		*lparg0 = (*(NSRect (*)(jintLong, jintLong, jintLong, jintLong, jboolean))objc_msgSend)(arg1, arg2, arg3, arg4, arg5);
+	}
+fail:
+	if (arg0 && lparg0) setNSRectFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IIIIZ_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJJZ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRange_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSRange_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRange_2I)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSRange_2J)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4)
+#endif
+{
+	NSRect _arg0, *lparg0=NULL;
+	NSRange _arg3, *lparg3=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRange_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSRange_2J_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSRectFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSRangeFields(env, arg3, &_arg3)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSRect (*)(jintLong, jintLong, NSRange, jintLong))objc_msgSend_stret)(arg1, arg2, *lparg3, arg4);
+	} else {
+		*lparg0 = (*(NSRect (*)(jintLong, jintLong, NSRange, jintLong))objc_msgSend)(arg1, arg2, *lparg3, arg4);
+	}
+fail:
+	if (arg3 && lparg3) setNSRangeFields(env, arg3, lparg3);
+	if (arg0 && lparg0) setNSRectFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRange_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSRange_2J_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRect_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRect_2)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3)
+#endif
+{
+	NSRect _arg0, *lparg0=NULL;
+	NSRect _arg3, *lparg3=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSRectFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSRectFields(env, arg3, &_arg3)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSRect (*)(jintLong, jintLong, NSRect))objc_msgSend_stret)(arg1, arg2, *lparg3);
+	} else {
+		*lparg0 = (*(NSRect (*)(jintLong, jintLong, NSRect))objc_msgSend)(arg1, arg2, *lparg3);
+	}
+fail:
+	if (arg3 && lparg3) setNSRectFields(env, arg3, lparg3);
+	if (arg0 && lparg0) setNSRectFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2J)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4)
+#endif
+{
+	NSRect _arg0, *lparg0=NULL;
+	NSRect _arg3, *lparg3=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSRectFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSRectFields(env, arg3, &_arg3)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSRect (*)(jintLong, jintLong, NSRect, jintLong))objc_msgSend_stret)(arg1, arg2, *lparg3, arg4);
+	} else {
+		*lparg0 = (*(NSRect (*)(jintLong, jintLong, NSRect, jintLong))objc_msgSend)(arg1, arg2, *lparg3, arg4);
+	}
+fail:
+	if (arg3 && lparg3) setNSRectFields(env, arg3, lparg3);
+	if (arg0 && lparg0) setNSRectFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2II) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2II)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	NSSize _arg0, *lparg0=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2II_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSSizeFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSSize (*)(jintLong, jintLong))objc_msgSend_stret)(arg1, arg2);
+	} else {
+		*lparg0 = (*(NSSize (*)(jintLong, jintLong))objc_msgSend)(arg1, arg2);
+	}
+fail:
+	if (arg0 && lparg0) setNSSizeFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2II_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSRect_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSRect_2)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3)
+#endif
+{
+	NSSize _arg0, *lparg0=NULL;
+	NSRect _arg3, *lparg3=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSSizeFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSRectFields(env, arg3, &_arg3)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSSize (*)(jintLong, jintLong, NSRect))objc_msgSend_stret)(arg1, arg2, *lparg3);
+	} else {
+		*lparg0 = (*(NSSize (*)(jintLong, jintLong, NSRect))objc_msgSend)(arg1, arg2, *lparg3);
+	}
+fail:
+	if (arg3 && lparg3) setNSRectFields(env, arg3, lparg3);
+	if (arg0 && lparg0) setNSSizeFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSSize_2) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSSize_2)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3)
+#endif
+{
+	NSSize _arg0, *lparg0=NULL;
+	NSSize _arg3, *lparg3=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSSize_2_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSSizeFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSSizeFields(env, arg3, &_arg3)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSSize (*)(jintLong, jintLong, NSSize))objc_msgSend_stret)(arg1, arg2, *lparg3);
+	} else {
+		*lparg0 = (*(NSSize (*)(jintLong, jintLong, NSSize))objc_msgSend)(arg1, arg2, *lparg3);
+	}
+fail:
+	if (arg3 && lparg3) setNSSizeFields(env, arg3, lparg3);
+	if (arg0 && lparg0) setNSSizeFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSSize_2_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSSize_2I) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2J) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSSize_2I)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2J)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3, jintLong arg4)
+#endif
+{
+	NSSize _arg0, *lparg0=NULL;
+	NSSize _arg3, *lparg3=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSSize_2I_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2J_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSSizeFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSSizeFields(env, arg3, &_arg3)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSSize (*)(jintLong, jintLong, NSSize, jintLong))objc_msgSend_stret)(arg1, arg2, *lparg3, arg4);
+	} else {
+		*lparg0 = (*(NSSize (*)(jintLong, jintLong, NSSize, jintLong))objc_msgSend)(arg1, arg2, *lparg3, arg4);
+	}
+fail:
+	if (arg3 && lparg3) setNSSizeFields(env, arg3, lparg3);
+	if (arg0 && lparg0) setNSSizeFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSSize_2I_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2J_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSSize_2ZZI) && !defined(JNI64)) || (!defined(NO_objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2ZZJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSSize_2ZZI)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3, jboolean arg4, jboolean arg5, jintLong arg6)
+#else
+JNIEXPORT void JNICALL OS_NATIVE(objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2ZZJ)(JNIEnv *env, jclass that, jobject arg0, jintLong arg1, jintLong arg2, jobject arg3, jboolean arg4, jboolean arg5, jintLong arg6)
+#endif
+{
+	NSSize _arg0, *lparg0=NULL;
+	NSSize _arg3, *lparg3=NULL;
+#ifndef JNI64
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSSize_2ZZI_FUNC);
+#else
+	OS_NATIVE_ENTER(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2ZZJ_FUNC);
+#endif
+	if (arg0) if ((lparg0 = getNSSizeFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = getNSSizeFields(env, arg3, &_arg3)) == NULL) goto fail;
+	if (sizeof(_arg0) > STRUCT_SIZE_LIMIT) {
+		*lparg0 = (*(NSSize (*)(jintLong, jintLong, NSSize, jboolean, jboolean, jintLong))objc_msgSend_stret)(arg1, arg2, *lparg3, arg4, arg5, arg6);
+	} else {
+		*lparg0 = (*(NSSize (*)(jintLong, jintLong, NSSize, jboolean, jboolean, jintLong))objc_msgSend)(arg1, arg2, *lparg3, arg4, arg5, arg6);
+	}
+fail:
+	if (arg3 && lparg3) setNSSizeFields(env, arg3, lparg3);
+	if (arg0 && lparg0) setNSSizeFields(env, arg0, lparg0);
+#ifndef JNI64
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSSize_2ZZI_FUNC);
+#else
+	OS_NATIVE_EXIT(env, that, objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2ZZJ_FUNC);
+#endif
+}
+#endif
+
+#ifndef NO_objc_1registerClassPair
+JNIEXPORT void JNICALL OS_NATIVE(objc_1registerClassPair)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	OS_NATIVE_ENTER(env, that, objc_1registerClassPair_FUNC);
+	objc_registerClassPair((Class)arg0);
+	OS_NATIVE_EXIT(env, that, objc_1registerClassPair_FUNC);
+}
+#endif
+
+#ifndef NO_objc_1super_1sizeof
+JNIEXPORT jint JNICALL OS_NATIVE(objc_1super_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, objc_1super_1sizeof_FUNC);
+	rc = (jint)objc_super_sizeof();
+	OS_NATIVE_EXIT(env, that, objc_1super_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_object_1getClass
+JNIEXPORT jintLong JNICALL OS_NATIVE(object_1getClass)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, object_1getClass_FUNC);
+	rc = (jintLong)object_getClass((id)arg0);
+	OS_NATIVE_EXIT(env, that, object_1getClass_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_object_1getClassName
+JNIEXPORT jintLong JNICALL OS_NATIVE(object_1getClassName)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, object_1getClassName_FUNC);
+	rc = (jintLong)object_getClassName((id)arg0);
+	OS_NATIVE_EXIT(env, that, object_1getClassName_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_object_1getInstanceVariable
+JNIEXPORT jintLong JNICALL OS_NATIVE(object_1getInstanceVariable)
+	(JNIEnv *env, jclass that, jintLong arg0, jbyteArray arg1, jintLongArray arg2)
+{
+	jbyte *lparg1=NULL;
+	jintLong *lparg2=NULL;
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, object_1getInstanceVariable_FUNC);
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg1) if ((lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL)) == NULL) goto fail;
+		if (arg2) if ((lparg2 = (*env)->GetPrimitiveArrayCritical(env, arg2, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg1) if ((lparg1 = (*env)->GetByteArrayElements(env, arg1, NULL)) == NULL) goto fail;
+		if (arg2) if ((lparg2 = (*env)->GetIntLongArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	}
+	rc = (jintLong)object_getInstanceVariable((id)arg0, (const char*)lparg1, (void **)lparg2);
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg2 && lparg2) (*env)->ReleasePrimitiveArrayCritical(env, arg2, lparg2, 0);
+		if (arg1 && lparg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
+	} else
+#endif
+	{
+		if (arg2 && lparg2) (*env)->ReleaseIntLongArrayElements(env, arg2, lparg2, 0);
+		if (arg1 && lparg1) (*env)->ReleaseByteArrayElements(env, arg1, lparg1, 0);
+	}
+	OS_NATIVE_EXIT(env, that, object_1getInstanceVariable_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_object_1setClass
+JNIEXPORT jintLong JNICALL OS_NATIVE(object_1setClass)
+	(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1)
+{
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, object_1setClass_FUNC);
+	rc = (jintLong)object_setClass((id)arg0, (Class)arg1);
+	OS_NATIVE_EXIT(env, that, object_1setClass_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_object_1setInstanceVariable
+JNIEXPORT jintLong JNICALL OS_NATIVE(object_1setInstanceVariable)
+	(JNIEnv *env, jclass that, jintLong arg0, jbyteArray arg1, jintLong arg2)
+{
+	jbyte *lparg1=NULL;
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, object_1setInstanceVariable_FUNC);
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg1) if ((lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg1) if ((lparg1 = (*env)->GetByteArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	}
+	rc = (jintLong)object_setInstanceVariable((id)arg0, (const char*)lparg1, (void *)arg2);
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg1 && lparg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, 0);
+	} else
+#endif
+	{
+		if (arg1 && lparg1) (*env)->ReleaseByteArrayElements(env, arg1, lparg1, 0);
+	}
+	OS_NATIVE_EXIT(env, that, object_1setInstanceVariable_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_sel_1registerName
+JNIEXPORT jintLong JNICALL OS_NATIVE(sel_1registerName)
+	(JNIEnv *env, jclass that, jstring arg0)
+{
+	const char *lparg0= NULL;
+	jintLong rc = 0;
+	OS_NATIVE_ENTER(env, that, sel_1registerName_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetStringUTFChars(env, arg0, NULL)) == NULL) goto fail;
+	rc = (jintLong)sel_registerName(lparg0);
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseStringUTFChars(env, arg0, lparg0);
+	OS_NATIVE_EXIT(env, that, sel_1registerName_FUNC);
+	return rc;
+}
+#endif
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os.h b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os.h
new file mode 100755
index 0000000..438ecf6
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os.h
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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
+ *******************************************************************************/
+
+#ifndef INC_os_H
+#define INC_os_H
+
+/*#define NDEBUG*/
+/*#define DEBUG_EXCEPTIONS*/
+
+#include <Cocoa/Cocoa.h>
+#include <WebKit/WebView.h>
+#import <objc/objc-runtime.h>
+
+#include "os_custom.h"
+
+extern jint CPSSetProcessName(void *, jintLong);
+
+#define objc_msgSend_bool objc_msgSend
+#define objc_msgSendSuper_bool objc_msgSendSuper
+
+#ifndef __i386__
+#define objc_msgSend_fpret objc_msgSend
+#endif
+
+/* The structure objc_super defines "class" in i386/ppc and "super_class" in x86_64 */
+#ifdef __i386__
+#define swt_super_class class
+#elif __ppc__
+#define swt_super_class class
+#elif __x86_64__
+#define swt_super_class super_class
+#endif
+
+#ifdef __i386__
+#define STRUCT_SIZE_LIMIT 8
+#elif __ppc__
+#define STRUCT_SIZE_LIMIT 4
+#elif __x86_64__
+#define STRUCT_SIZE_LIMIT 16
+#endif
+
+#ifdef DEBUG_EXCEPTIONS
+#define DUMP_EXCEPTION \
+	if (![[nsx name] isEqualToString:NSAccessibilityException])  { \
+		NSLog(@"Exception thrown: %@ %@", [nsx name], [nsx reason]); \
+		jclass threadClass = (*env)->FindClass(env, "java/lang/Thread"); \
+		jmethodID dumpStackID = (*env)->GetStaticMethodID(env, threadClass, "dumpStack", "()V"); \
+		if (dumpStackID != NULL) (*env)->CallStaticVoidMethod(env, threadClass, dumpStackID, 0); \
+	}
+#else
+#define DUMP_EXCEPTION
+#endif
+
+#ifndef NATIVE_STATS
+#define OS_NATIVE_ENTER(env, that, func) \
+	@try {  
+#define OS_NATIVE_EXIT(env, that, func) \
+	} \
+	@catch (NSException *nsx) { \
+		DUMP_EXCEPTION \
+	}
+#endif
+
+#endif /* INC_os_H */
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_custom.c b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_custom.c
new file mode 100755
index 0000000..a23d49c
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_custom.c
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "os_structs.h"
+#include "os_stats.h"
+
+#define OS_NATIVE(func) Java_org_eclipse_swt_internal_cocoa_OS_##func
+
+#ifndef NO_JNIGetObject
+JNIEXPORT jobject JNICALL OS_NATIVE(JNIGetObject)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jobject rc = 0;
+	OS_NATIVE_ENTER(env, that, JNIGetObject_FUNC);
+	rc = (jobject)arg0;
+	OS_NATIVE_EXIT(env, that, JNIGetObject_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NSIntersectionRect
+JNIEXPORT void JNICALL OS_NATIVE(NSIntersectionRect)
+	(JNIEnv *env, jclass that, jobject arg0, jobject arg1, jobject arg2)
+{
+	NSRect _arg0, *lparg0=NULL;
+	NSRect _arg1, *lparg1=NULL;
+	NSRect _arg2, *lparg2=NULL;
+	OS_NATIVE_ENTER(env, that, NSIntersectionRect_FUNC);
+	if (arg0) if ((lparg0 = getNSRectFields(env, arg0, &_arg0)) == NULL) goto fail;
+	if (arg1) if ((lparg1 = getNSRectFields(env, arg1, &_arg1)) == NULL) goto fail;
+	if (arg2) if ((lparg2 = getNSRectFields(env, arg2, &_arg2)) == NULL) goto fail;
+	*lparg0 = NSIntersectionRect(*lparg1, *lparg2);
+fail:
+	if (arg2 && lparg2) setNSRectFields(env, arg2, lparg2);
+	if (arg1 && lparg1) setNSRectFields(env, arg1, lparg1);
+	if (arg0 && lparg0) setNSRectFields(env, arg0, lparg0);
+	OS_NATIVE_EXIT(env, that, NSIntersectionRect_FUNC);
+}
+#endif
+
+#ifndef NO_CGDisplayBounds
+JNIEXPORT void JNICALL OS_NATIVE(CGDisplayBounds)
+	(JNIEnv *env, jclass that, jint arg0, jobject arg1)
+{
+	CGRect _arg1, *lparg1=NULL;
+	OS_NATIVE_ENTER(env, that, CGDisplayBounds_FUNC);
+	if (arg1) if ((lparg1 = getCGRectFields(env, arg1, &_arg1)) == NULL) goto fail;
+	*lparg1 = CGDisplayBounds((CGDirectDisplayID)arg0);
+fail:
+	if (arg1 && lparg1) setCGRectFields(env, arg1, lparg1);
+	OS_NATIVE_EXIT(env, that, CGDisplayBounds_FUNC);
+}
+#endif
+
+#ifndef NO__1_1BIG_1ENDIAN_1_1
+JNIEXPORT jboolean JNICALL OS_NATIVE(_1_1BIG_1ENDIAN_1_1)
+	(JNIEnv *env, jclass that)
+{
+	jboolean rc;
+	OS_NATIVE_ENTER(env, that, _1_1BIG_1ENDIAN_1_1_FUNC)
+#ifdef __BIG_ENDIAN__
+	rc = (jboolean)TRUE;
+#else
+	rc = (jboolean)FALSE;
+#endif
+	OS_NATIVE_EXIT(env, that, _1_1BIG_1ENDIAN_1_1_FUNC)
+	return rc;
+}
+#endif
+
+#ifndef NO_class_1getName
+JNIEXPORT jstring JNICALL OS_NATIVE(class_1getName)
+(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jstring rc = 0;
+	OS_NATIVE_ENTER(env, that, class_1getName_FUNC);
+	const char *className = class_getName((Class)arg0);
+	if (className != NULL) rc = (*env)->NewStringUTF(env, className);
+	OS_NATIVE_EXIT(env, that, class_1getName_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_isFlipped_1CALLBACK
+static BOOL isFlippedProc(id obj, SEL sel)
+{
+	return YES;
+}
+JNIEXPORT jintLong JNICALL OS_NATIVE(isFlipped_1CALLBACK)
+(JNIEnv *env, jclass that)
+{
+	return (jintLong)isFlippedProc;
+}
+#endif
+
+#ifndef NO_kTISPropertyUnicodeKeyLayoutData
+JNIEXPORT jintLong JNICALL OS_NATIVE(kTISPropertyUnicodeKeyLayoutData)
+(JNIEnv *env, jclass that)
+{
+	// Technically this CFStringRef should be CFRetain'ed but we have no opportunity to release it.
+	// The pointer won't disappear unless the Carbon framework bundle is somehow unloaded, which is unlikely to happen.
+	static int initialized = 0;
+	static CFStringRef *var = NULL;
+	if (!initialized) {
+		CFBundleRef bundle = CFBundleGetBundleWithIdentifier(CFSTR("com.apple.Carbon"));
+		if (bundle) var = (CFStringRef *)CFBundleGetDataPointerForName(bundle, CFSTR("kTISPropertyUnicodeKeyLayoutData"));
+		initialized = 1;
+	} 
+	
+	return (jintLong)(*var);
+}
+#endif
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_custom.h b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_custom.h
new file mode 100755
index 0000000..4bddcc8
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_custom.h
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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
+ *******************************************************************************/
+
+/* Libraries for dynamic loaded functions */
+#define UnionRgn_LIB "com.apple.Carbon"
+#define SetRect_LIB "com.apple.Carbon"
+#define SectRgn_LIB "com.apple.Carbon"
+#define RectRgn_LIB "com.apple.Carbon"
+#define RectInRgn_LIB "com.apple.Carbon"
+#define QDRegionToRects_LIB "com.apple.Carbon"
+#define PtInRgn_LIB "com.apple.Carbon"
+#define OpenRgn_LIB "com.apple.Carbon"
+#define OffsetRgn_LIB "com.apple.Carbon"
+#define NewRgn_LIB "com.apple.Carbon"
+#define MoveTo_LIB "com.apple.Carbon"
+#define LineTo_LIB "com.apple.Carbon"
+#define GetRegionBounds_LIB "com.apple.Carbon"
+#define EmptyRgn_LIB "com.apple.Carbon"
+#define DisposeRgn_LIB "com.apple.Carbon"
+#define DiffRgn_LIB "com.apple.Carbon"
+#define CopyRgn_LIB "com.apple.Carbon"
+#define CloseRgn_LIB "com.apple.Carbon"
+#define instrumentObjcMessageSends_LIB "com.apple.Foundation"
+#define SetThemeCursor_LIB "com.apple.Carbon"
+#define GetCurrentButtonState_LIB "com.apple.Carbon"
+#define GetDblTime_LIB "com.apple.Carbon"
+#define CGContextCopyPath_LIB "com.apple.Cocoa"
+#define TISCopyCurrentKeyboardInputSource_LIB "com.apple.Carbon"
+#define TISGetInputSourceProperty_LIB "com.apple.Carbon"
+#define UCKeyTranslate_LIB "com.apple.CoreServices"
+#define kTISPropertyUnicodeKeyLayoutData_LIB "com.apple.Carbon"
+#define ATSFontActivateFromFileReference_LIB "com.apple.ApplicationServices.ATS"
+#define FSPathMakeRef_LIB "com.apple.CoreServices"
+#define CGContextCopyWindowContentsToRect_LIB "com.apple.CoreGraphics"
+#define LMGetKbdType_LIB "com.apple.Carbon"
+#define GetThemeMetric_LIB "com.apple.Carbon"
+#define HIThemeDrawFocusRect_LIB "com.apple.Carbon"
+#define AcquireRootMenu_LIB "com.apple.Carbon"
+#define CancelMenuTracking_LIB "com.apple.Carbon"
+#define SetSystemUIMode_LIB "com.apple.Carbon"
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.c b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.c
new file mode 100644
index 0000000..a64319e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.c
@@ -0,0 +1,1060 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "os_stats.h"
+
+#ifdef NATIVE_STATS
+
+int OS_nativeFunctionCount = 478;
+int OS_nativeFunctionCallCount[478];
+char * OS_nativeFunctionNames[] = {
+	"ATSFontActivateFromFileReference",
+	"AcquireRootMenu",
+	"CALLBACK_1accessibilityHitTest_1",
+	"CALLBACK_1attributedSubstringFromRange_1",
+	"CALLBACK_1canDragRowsWithIndexes_1atPoint_1",
+	"CALLBACK_1cellSize",
+	"CALLBACK_1characterIndexForPoint_1",
+	"CALLBACK_1dragSelectionWithEvent_1offset_1slideBack_1",
+	"CALLBACK_1draggedImage_1beganAt_1",
+	"CALLBACK_1draggedImage_1endedAt_1operation_1",
+	"CALLBACK_1drawImage_1withFrame_1inView_1",
+	"CALLBACK_1drawInteriorWithFrame_1inView_1",
+	"CALLBACK_1drawRect_1",
+	"CALLBACK_1drawWithExpansionFrame_1inView_1",
+	"CALLBACK_1expansionFrameWithFrame_1inView_1",
+	"CALLBACK_1firstRectForCharacterRange_1",
+	"CALLBACK_1highlightSelectionInClipRect_1",
+	"CALLBACK_1hitTestForEvent_1inRect_1ofView_1",
+	"CALLBACK_1hitTest_1",
+	"CALLBACK_1imageRectForBounds_1",
+	"CALLBACK_1markedRange",
+	"CALLBACK_1selectedRange",
+	"CALLBACK_1setFrameOrigin_1",
+	"CALLBACK_1setFrameSize_1",
+	"CALLBACK_1setFrame_1",
+	"CALLBACK_1setMarkedText_1selectedRange_1",
+	"CALLBACK_1setNeedsDisplayInRect_1",
+	"CALLBACK_1shouldChangeTextInRange_1replacementString_1",
+	"CALLBACK_1textView_1willChangeSelectionFromCharacterRange_1toCharacterRange_1",
+	"CALLBACK_1titleRectForBounds_1",
+	"CALLBACK_1view_1stringForToolTip_1point_1userData_1",
+	"CALLBACK_1webView_1setFrame_1",
+	"CFDataGetBytePtr",
+	"CFDataGetLength",
+	"CFRelease",
+	"CFRunLoopAddObserver",
+	"CFRunLoopGetCurrent",
+	"CFRunLoopObserverCreate",
+	"CFRunLoopObserverInvalidate",
+	"CFURLCreateStringByAddingPercentEscapes",
+	"CGBitmapContextCreate",
+	"CGBitmapContextCreateImage",
+	"CGBitmapContextGetData",
+	"CGColorSpaceCreateDeviceRGB",
+	"CGColorSpaceRelease",
+	"CGContextAddPath",
+	"CGContextCopyPath",
+	"CGContextCopyWindowContentsToRect",
+	"CGContextDrawImage",
+	"CGContextRelease",
+	"CGContextReplacePathWithStrokedPath",
+	"CGContextRestoreGState",
+	"CGContextSaveGState",
+	"CGContextScaleCTM",
+	"CGContextSetBlendMode",
+	"CGContextSetLineCap",
+	"CGContextSetLineDash",
+	"CGContextSetLineJoin",
+	"CGContextSetLineWidth",
+	"CGContextSetMiterLimit",
+	"CGContextStrokePath",
+	"CGContextTranslateCTM",
+	"CGDataProviderCreateWithData",
+	"CGDataProviderRelease",
+	"CGDisplayBaseAddress",
+	"CGDisplayBitsPerPixel",
+	"CGDisplayBitsPerSample",
+	"CGDisplayBounds",
+	"CGDisplayBytesPerRow",
+	"CGDisplayPixelsHigh",
+	"CGDisplayPixelsWide",
+	"CGEnableEventStateCombining",
+	"CGEventCreateKeyboardEvent",
+	"CGEventGetIntegerValueField",
+	"CGEventKeyboardSetUnicodeString",
+	"CGEventPost",
+	"CGGetDisplaysWithRect",
+	"CGImageCreate",
+	"CGImageGetHeight",
+	"CGImageGetWidth",
+	"CGImageRelease",
+	"CGPathAddCurveToPoint",
+	"CGPathAddLineToPoint",
+	"CGPathApply",
+	"CGPathCloseSubpath",
+	"CGPathCreateCopy",
+	"CGPathCreateMutable",
+	"CGPathElement_1sizeof",
+	"CGPathMoveToPoint",
+	"CGPathRelease",
+	"CGPoint_1sizeof",
+	"CGPostKeyboardEvent",
+	"CGPostMouseEvent",
+	"CGPostScrollWheelEvent",
+	"CGRect_1sizeof",
+	"CGSetLocalEventsFilterDuringSuppressionState",
+	"CGSetLocalEventsSuppressionInterval",
+	"CGSize_1sizeof",
+	"CGWarpMouseCursorPosition",
+	"CPSSetProcessName",
+	"CancelMenuTracking",
+	"CloseRgn",
+	"CopyRgn",
+	"DeleteGlobalRef",
+	"DiffRgn",
+	"DisposeRgn",
+	"EmptyRgn",
+	"FSPathMakeRef",
+	"Gestalt",
+	"GetCurrentButtonState",
+	"GetCurrentProcess",
+	"GetDblTime",
+	"GetRegionBounds",
+	"GetThemeMetric",
+	"HIThemeDrawFocusRect",
+	"JNIGetObject",
+	"LMGetKbdType",
+	"LineTo",
+	"MoveTo",
+	"NSAccessibilityActionDescription",
+	"NSAccessibilityButtonRole",
+	"NSAccessibilityCheckBoxRole",
+	"NSAccessibilityChildrenAttribute",
+	"NSAccessibilityColumnRole",
+	"NSAccessibilityComboBoxRole",
+	"NSAccessibilityConfirmAction",
+	"NSAccessibilityContentsAttribute",
+	"NSAccessibilityDescriptionAttribute",
+	"NSAccessibilityDialogSubrole",
+	"NSAccessibilityEnabledAttribute",
+	"NSAccessibilityExpandedAttribute",
+	"NSAccessibilityFloatingWindowSubrole",
+	"NSAccessibilityFocusedAttribute",
+	"NSAccessibilityFocusedUIElementChangedNotification",
+	"NSAccessibilityGridRole",
+	"NSAccessibilityGroupRole",
+	"NSAccessibilityHelpAttribute",
+	"NSAccessibilityHelpTagRole",
+	"NSAccessibilityHorizontalOrientationValue",
+	"NSAccessibilityHorizontalScrollBarAttribute",
+	"NSAccessibilityImageRole",
+	"NSAccessibilityIncrementorRole",
+	"NSAccessibilityInsertionPointLineNumberAttribute",
+	"NSAccessibilityLabelValueAttribute",
+	"NSAccessibilityLineForIndexParameterizedAttribute",
+	"NSAccessibilityLinkRole",
+	"NSAccessibilityLinkTextAttribute",
+	"NSAccessibilityListRole",
+	"NSAccessibilityMaxValueAttribute",
+	"NSAccessibilityMenuBarRole",
+	"NSAccessibilityMenuButtonRole",
+	"NSAccessibilityMenuItemRole",
+	"NSAccessibilityMenuRole",
+	"NSAccessibilityMinValueAttribute",
+	"NSAccessibilityNextContentsAttribute",
+	"NSAccessibilityNumberOfCharactersAttribute",
+	"NSAccessibilityOrientationAttribute",
+	"NSAccessibilityOutlineRole",
+	"NSAccessibilityOutlineRowSubrole",
+	"NSAccessibilityParentAttribute",
+	"NSAccessibilityPopUpButtonRole",
+	"NSAccessibilityPositionAttribute",
+	"NSAccessibilityPostNotification",
+	"NSAccessibilityPressAction",
+	"NSAccessibilityPreviousContentsAttribute",
+	"NSAccessibilityProgressIndicatorRole",
+	"NSAccessibilityRTFForRangeParameterizedAttribute",
+	"NSAccessibilityRadioButtonRole",
+	"NSAccessibilityRadioGroupRole",
+	"NSAccessibilityRaiseBadArgumentException",
+	"NSAccessibilityRangeForIndexParameterizedAttribute",
+	"NSAccessibilityRangeForLineParameterizedAttribute",
+	"NSAccessibilityRangeForPositionParameterizedAttribute",
+	"NSAccessibilityRoleAttribute",
+	"NSAccessibilityRoleDescription",
+	"NSAccessibilityRoleDescriptionAttribute",
+	"NSAccessibilityRoleDescriptionForUIElement",
+	"NSAccessibilityRowRole",
+	"NSAccessibilityScrollAreaRole",
+	"NSAccessibilityScrollBarRole",
+	"NSAccessibilitySelectedAttribute",
+	"NSAccessibilitySelectedChildrenAttribute",
+	"NSAccessibilitySelectedChildrenChangedNotification",
+	"NSAccessibilitySelectedTextAttribute",
+	"NSAccessibilitySelectedTextChangedNotification",
+	"NSAccessibilitySelectedTextRangeAttribute",
+	"NSAccessibilitySelectedTextRangesAttribute",
+	"NSAccessibilityServesAsTitleForUIElementsAttribute",
+	"NSAccessibilitySizeAttribute",
+	"NSAccessibilitySliderRole",
+	"NSAccessibilitySortButtonRole",
+	"NSAccessibilitySplitterRole",
+	"NSAccessibilityStandardWindowSubrole",
+	"NSAccessibilityStaticTextRole",
+	"NSAccessibilityStringForRangeParameterizedAttribute",
+	"NSAccessibilityStyleRangeForIndexParameterizedAttribute",
+	"NSAccessibilitySubroleAttribute",
+	"NSAccessibilitySystemDialogSubrole",
+	"NSAccessibilityTabGroupRole",
+	"NSAccessibilityTableRole",
+	"NSAccessibilityTableRowSubrole",
+	"NSAccessibilityTabsAttribute",
+	"NSAccessibilityTextAreaRole",
+	"NSAccessibilityTextFieldRole",
+	"NSAccessibilityTextLinkSubrole",
+	"NSAccessibilityTitleAttribute",
+	"NSAccessibilityTitleUIElementAttribute",
+	"NSAccessibilityToolbarRole",
+	"NSAccessibilityTopLevelUIElementAttribute",
+	"NSAccessibilityUnignoredAncestor",
+	"NSAccessibilityUnignoredChildren",
+	"NSAccessibilityUnignoredChildrenForOnlyChild",
+	"NSAccessibilityUnignoredDescendant",
+	"NSAccessibilityUnknownRole",
+	"NSAccessibilityUnknownSubrole",
+	"NSAccessibilityValueAttribute",
+	"NSAccessibilityValueChangedNotification",
+	"NSAccessibilityValueDescriptionAttribute",
+	"NSAccessibilityValueIndicatorRole",
+	"NSAccessibilityVerticalOrientationValue",
+	"NSAccessibilityVerticalScrollBarAttribute",
+	"NSAccessibilityVisibleCharacterRangeAttribute",
+	"NSAccessibilityVisibleChildrenAttribute",
+	"NSAccessibilityWindowAttribute",
+	"NSAccessibilityWindowRole",
+	"NSAffineTransformStruct_1sizeof",
+	"NSApplicationDidChangeScreenParametersNotification",
+	"NSBackgroundColorAttributeName",
+	"NSBaselineOffsetAttributeName",
+	"NSBeep",
+	"NSBitsPerPixelFromDepth",
+	"NSCalibratedRGBColorSpace",
+	"NSCopyBits",
+	"NSDefaultRunLoopMode",
+	"NSDeviceRGBColorSpace",
+	"NSDeviceResolution",
+	"NSDragPboard",
+	"NSEqualRects",
+	"NSErrorFailingURLStringKey",
+	"NSEventTrackingRunLoopMode",
+	"NSFileTypeForHFSTypeCode",
+	"NSFilenamesPboardType",
+	"NSFontAttributeName",
+	"NSForegroundColorAttributeName",
+	"NSGetSizeAndAlignment",
+	"NSHTMLPboardType",
+	"NSIntersectionRect",
+	"NSLinkAttributeName",
+	"NSNumberOfColorComponents",
+	"NSObliquenessAttributeName",
+	"NSParagraphStyleAttributeName",
+	"NSPointInRect",
+	"NSPoint_1sizeof",
+	"NSPrintAllPages",
+	"NSPrintCopies",
+	"NSPrintFirstPage",
+	"NSPrintJobDisposition",
+	"NSPrintLastPage",
+	"NSPrintMustCollate",
+	"NSPrintPreviewJob",
+	"NSPrintSaveJob",
+	"NSPrintSavePath",
+	"NSPrintScalingFactor",
+	"NSPrintSpoolJob",
+	"NSRTFPboardType",
+	"NSRange_1sizeof",
+	"NSRect_1sizeof",
+	"NSSearchPathForDirectoriesInDomains",
+	"NSSize_1sizeof",
+	"NSStrikethroughColorAttributeName",
+	"NSStrikethroughStyleAttributeName",
+	"NSStringPboardType",
+	"NSStrokeWidthAttributeName",
+	"NSSystemColorsDidChangeNotification",
+	"NSTIFFPboardType",
+	"NSTemporaryDirectory",
+	"NSToolbarCustomizeToolbarItemIdentifier",
+	"NSToolbarDidRemoveItemNotification",
+	"NSToolbarFlexibleSpaceItemIdentifier",
+	"NSToolbarPrintItemIdentifier",
+	"NSToolbarSeparatorItemIdentifier",
+	"NSToolbarShowColorsItemIdentifier",
+	"NSToolbarShowFontsItemIdentifier",
+	"NSToolbarSpaceItemIdentifier",
+	"NSToolbarWillAddItemNotification",
+	"NSURLPboardType",
+	"NSUnderlineColorAttributeName",
+	"NSUnderlineStyleAttributeName",
+	"NSViewGlobalFrameDidChangeNotification",
+	"NewGlobalRef",
+	"NewRgn",
+	"OffsetRgn",
+	"OpenRgn",
+	"PtInRgn",
+	"QDRegionToRects",
+	"RectInRgn",
+	"RectRgn",
+	"SectRgn",
+	"SetFrontProcess",
+	"SetRect",
+	"SetSystemUIMode",
+	"SetThemeCursor",
+	"TISCopyCurrentKeyboardInputSource",
+	"TISGetInputSourceProperty",
+	"TransformProcessType",
+	"UCKeyTranslate",
+	"UnionRgn",
+	"_1_1BIG_1ENDIAN_1_1",
+	"call",
+	"class_1addIvar",
+	"class_1addMethod",
+	"class_1addProtocol",
+	"class_1createInstance",
+	"class_1getClassMethod",
+	"class_1getInstanceMethod",
+	"class_1getMethodImplementation",
+	"class_1getName",
+	"class_1getSuperclass",
+	"getpid",
+	"instrumentObjcMessageSends",
+	"isFlipped_1CALLBACK",
+	"kCFRunLoopCommonModes",
+	"kTISPropertyUnicodeKeyLayoutData",
+#ifndef JNI64
+	"memmove__ILorg_eclipse_swt_internal_cocoa_CGPathElement_2I",
+#else
+	"memmove__JLorg_eclipse_swt_internal_cocoa_CGPathElement_2J",
+#endif
+#ifndef JNI64
+	"memmove__ILorg_eclipse_swt_internal_cocoa_CGPoint_2I",
+#else
+	"memmove__JLorg_eclipse_swt_internal_cocoa_CGPoint_2J",
+#endif
+#ifndef JNI64
+	"memmove__ILorg_eclipse_swt_internal_cocoa_CGRect_2I",
+#else
+	"memmove__JLorg_eclipse_swt_internal_cocoa_CGRect_2J",
+#endif
+#ifndef JNI64
+	"memmove__ILorg_eclipse_swt_internal_cocoa_CGSize_2I",
+#else
+	"memmove__JLorg_eclipse_swt_internal_cocoa_CGSize_2J",
+#endif
+#ifndef JNI64
+	"memmove__ILorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2I",
+#else
+	"memmove__JLorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2J",
+#endif
+#ifndef JNI64
+	"memmove__ILorg_eclipse_swt_internal_cocoa_NSPoint_2I",
+#else
+	"memmove__JLorg_eclipse_swt_internal_cocoa_NSPoint_2J",
+#endif
+#ifndef JNI64
+	"memmove__ILorg_eclipse_swt_internal_cocoa_NSRange_2I",
+#else
+	"memmove__JLorg_eclipse_swt_internal_cocoa_NSRange_2J",
+#endif
+#ifndef JNI64
+	"memmove__ILorg_eclipse_swt_internal_cocoa_NSRect_2I",
+#else
+	"memmove__JLorg_eclipse_swt_internal_cocoa_NSRect_2J",
+#endif
+#ifndef JNI64
+	"memmove__ILorg_eclipse_swt_internal_cocoa_NSSize_2I",
+#else
+	"memmove__JLorg_eclipse_swt_internal_cocoa_NSSize_2J",
+#endif
+#ifndef JNI64
+	"memmove__Lorg_eclipse_swt_internal_cocoa_CGPathElement_2II",
+#else
+	"memmove__Lorg_eclipse_swt_internal_cocoa_CGPathElement_2JJ",
+#endif
+#ifndef JNI64
+	"memmove__Lorg_eclipse_swt_internal_cocoa_CGPoint_2II",
+#else
+	"memmove__Lorg_eclipse_swt_internal_cocoa_CGPoint_2JJ",
+#endif
+#ifndef JNI64
+	"memmove__Lorg_eclipse_swt_internal_cocoa_CGRect_2II",
+#else
+	"memmove__Lorg_eclipse_swt_internal_cocoa_CGRect_2JJ",
+#endif
+#ifndef JNI64
+	"memmove__Lorg_eclipse_swt_internal_cocoa_CGSize_2II",
+#else
+	"memmove__Lorg_eclipse_swt_internal_cocoa_CGSize_2JJ",
+#endif
+#ifndef JNI64
+	"memmove__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2II",
+#else
+	"memmove__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2JJ",
+#endif
+#ifndef JNI64
+	"memmove__Lorg_eclipse_swt_internal_cocoa_NSPoint_2II",
+#else
+	"memmove__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJ",
+#endif
+#ifndef JNI64
+	"memmove__Lorg_eclipse_swt_internal_cocoa_NSRange_2II",
+#else
+	"memmove__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJ",
+#endif
+#ifndef JNI64
+	"memmove__Lorg_eclipse_swt_internal_cocoa_NSRect_2II",
+#else
+	"memmove__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJ",
+#endif
+#ifndef JNI64
+	"memmove__Lorg_eclipse_swt_internal_cocoa_NSSize_2II",
+#else
+	"memmove__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJ",
+#endif
+	"method_1setImplementation",
+	"objc_1allocateClassPair",
+	"objc_1getClass",
+	"objc_1getMetaClass",
+	"objc_1getProtocol",
+	"objc_1lookUpClass",
+#ifndef JNI64
+	"objc_1msgSend__II",
+#else
+	"objc_1msgSend__JJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IID",
+#else
+	"objc_1msgSend__JJD",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIDIIIZ",
+#else
+	"objc_1msgSend__JJDJJJZ",
+#endif
+	"objc_1msgSend__IIF",
+#ifndef JNI64
+	"objc_1msgSend__IIFF",
+#else
+	"objc_1msgSend__JJDD",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIFFFF",
+#else
+	"objc_1msgSend__JJDDDD",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIFI",
+#else
+	"objc_1msgSend__JJDJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__III",
+#else
+	"objc_1msgSend__JJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIIF",
+#else
+	"objc_1msgSend__JJJD",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIII",
+#else
+	"objc_1msgSend__JJJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIIII",
+#else
+	"objc_1msgSend__JJJJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIIIIF",
+#else
+	"objc_1msgSend__JJJJJD",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIIIII",
+#else
+	"objc_1msgSend__JJJJJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIIIIII",
+#else
+	"objc_1msgSend__JJJJJJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIIIIIIII",
+#else
+	"objc_1msgSend__JJJJJJJJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIIIIIIZZIII",
+#else
+	"objc_1msgSend__JJJJJJJZZJJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIIIIIIZZIIII",
+#else
+	"objc_1msgSend__JJJJJJJZZJJJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIIIIZ",
+#else
+	"objc_1msgSend__JJJJJZ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIIILorg_eclipse_swt_internal_cocoa_NSRange_2",
+#else
+	"objc_1msgSend__JJJJLorg_eclipse_swt_internal_cocoa_NSRange_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIIIZ",
+#else
+	"objc_1msgSend__JJJJZ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2",
+#else
+	"objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2I",
+#else
+	"objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2J",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2IDIIIII",
+#else
+	"objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2JDJJJJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2IDIISII",
+#else
+	"objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2JDJJSJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSSize_2IIIZ",
+#else
+	"objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSSize_2JJJZ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSRange_2",
+#else
+	"objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSRange_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSRect_2I",
+#else
+	"objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSRect_2J",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIIZ",
+#else
+	"objc_1msgSend__JJJZ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2FFF",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2DDD",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2FFFZ",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2DDDZ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2I_3F",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J_3D",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2I",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2J",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2IF",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2JD",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2I",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2J",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2IIIII",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2JJJJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRange_2II",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRange_2JJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2F",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2D",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2FF",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2DD",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2I",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2J",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2II",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2III",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2IIZ",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJZ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2IIZI",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJZJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2IZI",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JZJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRect_2",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRect_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRect_2IF",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRect_2JD",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Z",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Z",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2ZZ",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2ZZ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSSize_2",
+#else
+	"objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSSize_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIZ",
+#else
+	"objc_1msgSend__JJZ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__IIZI",
+#else
+	"objc_1msgSend__JJZJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__II_3B",
+#else
+	"objc_1msgSend__JJ_3B",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__II_3BI",
+#else
+	"objc_1msgSend__JJ_3BJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__II_3C",
+#else
+	"objc_1msgSend__JJ_3C",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__II_3CI",
+#else
+	"objc_1msgSend__JJ_3CJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__II_3CLorg_eclipse_swt_internal_cocoa_NSRange_2",
+#else
+	"objc_1msgSend__JJ_3CLorg_eclipse_swt_internal_cocoa_NSRange_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__II_3F",
+#else
+	"objc_1msgSend__JJ_3D",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__II_3FIF",
+#else
+	"objc_1msgSend__JJ_3DJD",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__II_3I",
+#else
+	"objc_1msgSend__JJ_3J",
+#endif
+#ifndef JNI64
+	"objc_1msgSend__II_3III",
+#else
+	"objc_1msgSend__JJ_3JII",
+#endif
+	"objc_1msgSend__JJFD",
+	"objc_1msgSend__JJI",
+	"objc_1msgSend__JJ_3I",
+	"objc_1msgSend__JJ_3JJJ",
+#ifndef JNI64
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2I",
+#else
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2J",
+#endif
+#ifndef JNI64
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2II",
+#else
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2III",
+#else
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IIIII",
+#else
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJJJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IIIIZ",
+#else
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJJJZ",
+#endif
+#ifndef JNI64
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2I",
+#else
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J",
+#endif
+#ifndef JNI64
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I",
+#else
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2J",
+#endif
+#ifndef JNI64
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IIZ",
+#else
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJZ",
+#endif
+#ifndef JNI64
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSPoint_2",
+#else
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSPoint_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2",
+#else
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2I",
+#else
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2J",
+#endif
+#ifndef JNI64
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSSize_2",
+#else
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSSize_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IZ",
+#else
+	"objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JZ",
+#endif
+	"objc_1msgSendSuper_1bool",
+#ifndef JNI64
+	"objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2",
+#else
+	"objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2I",
+#else
+	"objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2J",
+#endif
+#ifndef JNI64
+	"objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2I",
+#else
+	"objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2J",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1bool__II",
+#else
+	"objc_1msgSend_1bool__JJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1bool__III",
+#else
+	"objc_1msgSend_1bool__JJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1bool__IIII",
+#else
+	"objc_1msgSend_1bool__JJJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1bool__IIIII",
+#else
+	"objc_1msgSend_1bool__JJJJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1bool__IIIIIII",
+#else
+	"objc_1msgSend_1bool__JJJJJJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1bool__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2",
+#else
+	"objc_1msgSend_1bool__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1bool__IIILorg_eclipse_swt_internal_cocoa_NSSize_2Z",
+#else
+	"objc_1msgSend_1bool__JJJLorg_eclipse_swt_internal_cocoa_NSSize_2Z",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSPoint_2",
+#else
+	"objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSRange_2I",
+#else
+	"objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSRange_2J",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSRect_2",
+#else
+	"objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSRect_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1bool__IIS",
+#else
+	"objc_1msgSend_1bool__JJS",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1fpret__II",
+#else
+	"objc_1msgSend_1fpret__JJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1fpret__III",
+#else
+	"objc_1msgSend_1fpret__JJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1fpret__IIII",
+#else
+	"objc_1msgSend_1fpret__JJJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2II",
+#else
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2JJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2II",
+#else
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2III",
+#else
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2",
+#else
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2I",
+#else
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2II",
+#else
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2III",
+#else
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2IILorg_eclipse_swt_internal_cocoa_NSRange_2I",
+#else
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJLorg_eclipse_swt_internal_cocoa_NSRange_2J",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2IILorg_eclipse_swt_internal_cocoa_NSRect_2",
+#else
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2II",
+#else
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2III",
+#else
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IIII",
+#else
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IIIIZ",
+#else
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJJZ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRange_2I",
+#else
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSRange_2J",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRect_2",
+#else
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I",
+#else
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2J",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2II",
+#else
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJ",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSRect_2",
+#else
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSSize_2",
+#else
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSSize_2I",
+#else
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2J",
+#endif
+#ifndef JNI64
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSSize_2ZZI",
+#else
+	"objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2ZZJ",
+#endif
+	"objc_1registerClassPair",
+	"objc_1super_1sizeof",
+	"object_1getClass",
+	"object_1getClassName",
+	"object_1getInstanceVariable",
+	"object_1setClass",
+	"object_1setInstanceVariable",
+	"sel_1registerName",
+};
+
+#define STATS_NATIVE(func) Java_org_eclipse_swt_tools_internal_NativeStats_##func
+
+JNIEXPORT jint JNICALL STATS_NATIVE(OS_1GetFunctionCount)
+	(JNIEnv *env, jclass that)
+{
+	return OS_nativeFunctionCount;
+}
+
+JNIEXPORT jstring JNICALL STATS_NATIVE(OS_1GetFunctionName)
+	(JNIEnv *env, jclass that, jint index)
+{
+	return (*env)->NewStringUTF(env, OS_nativeFunctionNames[index]);
+}
+
+JNIEXPORT jint JNICALL STATS_NATIVE(OS_1GetFunctionCallCount)
+	(JNIEnv *env, jclass that, jint index)
+{
+	return OS_nativeFunctionCallCount[index];
+}
+
+#endif
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.h b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.h
new file mode 100644
index 0000000..4ffe713
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.h
@@ -0,0 +1,1046 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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
+ *******************************************************************************/
+
+#ifdef NATIVE_STATS
+extern int OS_nativeFunctionCount;
+extern int OS_nativeFunctionCallCount[];
+extern char* OS_nativeFunctionNames[];
+#define OS_NATIVE_ENTER(env, that, func) OS_nativeFunctionCallCount[func]++;
+#define OS_NATIVE_EXIT(env, that, func) 
+#else
+#ifndef OS_NATIVE_ENTER
+#define OS_NATIVE_ENTER(env, that, func) 
+#endif
+#ifndef OS_NATIVE_EXIT
+#define OS_NATIVE_EXIT(env, that, func) 
+#endif
+#endif
+
+typedef enum {
+	ATSFontActivateFromFileReference_FUNC,
+	AcquireRootMenu_FUNC,
+	CALLBACK_1accessibilityHitTest_1_FUNC,
+	CALLBACK_1attributedSubstringFromRange_1_FUNC,
+	CALLBACK_1canDragRowsWithIndexes_1atPoint_1_FUNC,
+	CALLBACK_1cellSize_FUNC,
+	CALLBACK_1characterIndexForPoint_1_FUNC,
+	CALLBACK_1dragSelectionWithEvent_1offset_1slideBack_1_FUNC,
+	CALLBACK_1draggedImage_1beganAt_1_FUNC,
+	CALLBACK_1draggedImage_1endedAt_1operation_1_FUNC,
+	CALLBACK_1drawImage_1withFrame_1inView_1_FUNC,
+	CALLBACK_1drawInteriorWithFrame_1inView_1_FUNC,
+	CALLBACK_1drawRect_1_FUNC,
+	CALLBACK_1drawWithExpansionFrame_1inView_1_FUNC,
+	CALLBACK_1expansionFrameWithFrame_1inView_1_FUNC,
+	CALLBACK_1firstRectForCharacterRange_1_FUNC,
+	CALLBACK_1highlightSelectionInClipRect_1_FUNC,
+	CALLBACK_1hitTestForEvent_1inRect_1ofView_1_FUNC,
+	CALLBACK_1hitTest_1_FUNC,
+	CALLBACK_1imageRectForBounds_1_FUNC,
+	CALLBACK_1markedRange_FUNC,
+	CALLBACK_1selectedRange_FUNC,
+	CALLBACK_1setFrameOrigin_1_FUNC,
+	CALLBACK_1setFrameSize_1_FUNC,
+	CALLBACK_1setFrame_1_FUNC,
+	CALLBACK_1setMarkedText_1selectedRange_1_FUNC,
+	CALLBACK_1setNeedsDisplayInRect_1_FUNC,
+	CALLBACK_1shouldChangeTextInRange_1replacementString_1_FUNC,
+	CALLBACK_1textView_1willChangeSelectionFromCharacterRange_1toCharacterRange_1_FUNC,
+	CALLBACK_1titleRectForBounds_1_FUNC,
+	CALLBACK_1view_1stringForToolTip_1point_1userData_1_FUNC,
+	CALLBACK_1webView_1setFrame_1_FUNC,
+	CFDataGetBytePtr_FUNC,
+	CFDataGetLength_FUNC,
+	CFRelease_FUNC,
+	CFRunLoopAddObserver_FUNC,
+	CFRunLoopGetCurrent_FUNC,
+	CFRunLoopObserverCreate_FUNC,
+	CFRunLoopObserverInvalidate_FUNC,
+	CFURLCreateStringByAddingPercentEscapes_FUNC,
+	CGBitmapContextCreate_FUNC,
+	CGBitmapContextCreateImage_FUNC,
+	CGBitmapContextGetData_FUNC,
+	CGColorSpaceCreateDeviceRGB_FUNC,
+	CGColorSpaceRelease_FUNC,
+	CGContextAddPath_FUNC,
+	CGContextCopyPath_FUNC,
+	CGContextCopyWindowContentsToRect_FUNC,
+	CGContextDrawImage_FUNC,
+	CGContextRelease_FUNC,
+	CGContextReplacePathWithStrokedPath_FUNC,
+	CGContextRestoreGState_FUNC,
+	CGContextSaveGState_FUNC,
+	CGContextScaleCTM_FUNC,
+	CGContextSetBlendMode_FUNC,
+	CGContextSetLineCap_FUNC,
+	CGContextSetLineDash_FUNC,
+	CGContextSetLineJoin_FUNC,
+	CGContextSetLineWidth_FUNC,
+	CGContextSetMiterLimit_FUNC,
+	CGContextStrokePath_FUNC,
+	CGContextTranslateCTM_FUNC,
+	CGDataProviderCreateWithData_FUNC,
+	CGDataProviderRelease_FUNC,
+	CGDisplayBaseAddress_FUNC,
+	CGDisplayBitsPerPixel_FUNC,
+	CGDisplayBitsPerSample_FUNC,
+	CGDisplayBounds_FUNC,
+	CGDisplayBytesPerRow_FUNC,
+	CGDisplayPixelsHigh_FUNC,
+	CGDisplayPixelsWide_FUNC,
+	CGEnableEventStateCombining_FUNC,
+	CGEventCreateKeyboardEvent_FUNC,
+	CGEventGetIntegerValueField_FUNC,
+	CGEventKeyboardSetUnicodeString_FUNC,
+	CGEventPost_FUNC,
+	CGGetDisplaysWithRect_FUNC,
+	CGImageCreate_FUNC,
+	CGImageGetHeight_FUNC,
+	CGImageGetWidth_FUNC,
+	CGImageRelease_FUNC,
+	CGPathAddCurveToPoint_FUNC,
+	CGPathAddLineToPoint_FUNC,
+	CGPathApply_FUNC,
+	CGPathCloseSubpath_FUNC,
+	CGPathCreateCopy_FUNC,
+	CGPathCreateMutable_FUNC,
+	CGPathElement_1sizeof_FUNC,
+	CGPathMoveToPoint_FUNC,
+	CGPathRelease_FUNC,
+	CGPoint_1sizeof_FUNC,
+	CGPostKeyboardEvent_FUNC,
+	CGPostMouseEvent_FUNC,
+	CGPostScrollWheelEvent_FUNC,
+	CGRect_1sizeof_FUNC,
+	CGSetLocalEventsFilterDuringSuppressionState_FUNC,
+	CGSetLocalEventsSuppressionInterval_FUNC,
+	CGSize_1sizeof_FUNC,
+	CGWarpMouseCursorPosition_FUNC,
+	CPSSetProcessName_FUNC,
+	CancelMenuTracking_FUNC,
+	CloseRgn_FUNC,
+	CopyRgn_FUNC,
+	DeleteGlobalRef_FUNC,
+	DiffRgn_FUNC,
+	DisposeRgn_FUNC,
+	EmptyRgn_FUNC,
+	FSPathMakeRef_FUNC,
+	Gestalt_FUNC,
+	GetCurrentButtonState_FUNC,
+	GetCurrentProcess_FUNC,
+	GetDblTime_FUNC,
+	GetRegionBounds_FUNC,
+	GetThemeMetric_FUNC,
+	HIThemeDrawFocusRect_FUNC,
+	JNIGetObject_FUNC,
+	LMGetKbdType_FUNC,
+	LineTo_FUNC,
+	MoveTo_FUNC,
+	NSAccessibilityActionDescription_FUNC,
+	NSAccessibilityButtonRole_FUNC,
+	NSAccessibilityCheckBoxRole_FUNC,
+	NSAccessibilityChildrenAttribute_FUNC,
+	NSAccessibilityColumnRole_FUNC,
+	NSAccessibilityComboBoxRole_FUNC,
+	NSAccessibilityConfirmAction_FUNC,
+	NSAccessibilityContentsAttribute_FUNC,
+	NSAccessibilityDescriptionAttribute_FUNC,
+	NSAccessibilityDialogSubrole_FUNC,
+	NSAccessibilityEnabledAttribute_FUNC,
+	NSAccessibilityExpandedAttribute_FUNC,
+	NSAccessibilityFloatingWindowSubrole_FUNC,
+	NSAccessibilityFocusedAttribute_FUNC,
+	NSAccessibilityFocusedUIElementChangedNotification_FUNC,
+	NSAccessibilityGridRole_FUNC,
+	NSAccessibilityGroupRole_FUNC,
+	NSAccessibilityHelpAttribute_FUNC,
+	NSAccessibilityHelpTagRole_FUNC,
+	NSAccessibilityHorizontalOrientationValue_FUNC,
+	NSAccessibilityHorizontalScrollBarAttribute_FUNC,
+	NSAccessibilityImageRole_FUNC,
+	NSAccessibilityIncrementorRole_FUNC,
+	NSAccessibilityInsertionPointLineNumberAttribute_FUNC,
+	NSAccessibilityLabelValueAttribute_FUNC,
+	NSAccessibilityLineForIndexParameterizedAttribute_FUNC,
+	NSAccessibilityLinkRole_FUNC,
+	NSAccessibilityLinkTextAttribute_FUNC,
+	NSAccessibilityListRole_FUNC,
+	NSAccessibilityMaxValueAttribute_FUNC,
+	NSAccessibilityMenuBarRole_FUNC,
+	NSAccessibilityMenuButtonRole_FUNC,
+	NSAccessibilityMenuItemRole_FUNC,
+	NSAccessibilityMenuRole_FUNC,
+	NSAccessibilityMinValueAttribute_FUNC,
+	NSAccessibilityNextContentsAttribute_FUNC,
+	NSAccessibilityNumberOfCharactersAttribute_FUNC,
+	NSAccessibilityOrientationAttribute_FUNC,
+	NSAccessibilityOutlineRole_FUNC,
+	NSAccessibilityOutlineRowSubrole_FUNC,
+	NSAccessibilityParentAttribute_FUNC,
+	NSAccessibilityPopUpButtonRole_FUNC,
+	NSAccessibilityPositionAttribute_FUNC,
+	NSAccessibilityPostNotification_FUNC,
+	NSAccessibilityPressAction_FUNC,
+	NSAccessibilityPreviousContentsAttribute_FUNC,
+	NSAccessibilityProgressIndicatorRole_FUNC,
+	NSAccessibilityRTFForRangeParameterizedAttribute_FUNC,
+	NSAccessibilityRadioButtonRole_FUNC,
+	NSAccessibilityRadioGroupRole_FUNC,
+	NSAccessibilityRaiseBadArgumentException_FUNC,
+	NSAccessibilityRangeForIndexParameterizedAttribute_FUNC,
+	NSAccessibilityRangeForLineParameterizedAttribute_FUNC,
+	NSAccessibilityRangeForPositionParameterizedAttribute_FUNC,
+	NSAccessibilityRoleAttribute_FUNC,
+	NSAccessibilityRoleDescription_FUNC,
+	NSAccessibilityRoleDescriptionAttribute_FUNC,
+	NSAccessibilityRoleDescriptionForUIElement_FUNC,
+	NSAccessibilityRowRole_FUNC,
+	NSAccessibilityScrollAreaRole_FUNC,
+	NSAccessibilityScrollBarRole_FUNC,
+	NSAccessibilitySelectedAttribute_FUNC,
+	NSAccessibilitySelectedChildrenAttribute_FUNC,
+	NSAccessibilitySelectedChildrenChangedNotification_FUNC,
+	NSAccessibilitySelectedTextAttribute_FUNC,
+	NSAccessibilitySelectedTextChangedNotification_FUNC,
+	NSAccessibilitySelectedTextRangeAttribute_FUNC,
+	NSAccessibilitySelectedTextRangesAttribute_FUNC,
+	NSAccessibilityServesAsTitleForUIElementsAttribute_FUNC,
+	NSAccessibilitySizeAttribute_FUNC,
+	NSAccessibilitySliderRole_FUNC,
+	NSAccessibilitySortButtonRole_FUNC,
+	NSAccessibilitySplitterRole_FUNC,
+	NSAccessibilityStandardWindowSubrole_FUNC,
+	NSAccessibilityStaticTextRole_FUNC,
+	NSAccessibilityStringForRangeParameterizedAttribute_FUNC,
+	NSAccessibilityStyleRangeForIndexParameterizedAttribute_FUNC,
+	NSAccessibilitySubroleAttribute_FUNC,
+	NSAccessibilitySystemDialogSubrole_FUNC,
+	NSAccessibilityTabGroupRole_FUNC,
+	NSAccessibilityTableRole_FUNC,
+	NSAccessibilityTableRowSubrole_FUNC,
+	NSAccessibilityTabsAttribute_FUNC,
+	NSAccessibilityTextAreaRole_FUNC,
+	NSAccessibilityTextFieldRole_FUNC,
+	NSAccessibilityTextLinkSubrole_FUNC,
+	NSAccessibilityTitleAttribute_FUNC,
+	NSAccessibilityTitleUIElementAttribute_FUNC,
+	NSAccessibilityToolbarRole_FUNC,
+	NSAccessibilityTopLevelUIElementAttribute_FUNC,
+	NSAccessibilityUnignoredAncestor_FUNC,
+	NSAccessibilityUnignoredChildren_FUNC,
+	NSAccessibilityUnignoredChildrenForOnlyChild_FUNC,
+	NSAccessibilityUnignoredDescendant_FUNC,
+	NSAccessibilityUnknownRole_FUNC,
+	NSAccessibilityUnknownSubrole_FUNC,
+	NSAccessibilityValueAttribute_FUNC,
+	NSAccessibilityValueChangedNotification_FUNC,
+	NSAccessibilityValueDescriptionAttribute_FUNC,
+	NSAccessibilityValueIndicatorRole_FUNC,
+	NSAccessibilityVerticalOrientationValue_FUNC,
+	NSAccessibilityVerticalScrollBarAttribute_FUNC,
+	NSAccessibilityVisibleCharacterRangeAttribute_FUNC,
+	NSAccessibilityVisibleChildrenAttribute_FUNC,
+	NSAccessibilityWindowAttribute_FUNC,
+	NSAccessibilityWindowRole_FUNC,
+	NSAffineTransformStruct_1sizeof_FUNC,
+	NSApplicationDidChangeScreenParametersNotification_FUNC,
+	NSBackgroundColorAttributeName_FUNC,
+	NSBaselineOffsetAttributeName_FUNC,
+	NSBeep_FUNC,
+	NSBitsPerPixelFromDepth_FUNC,
+	NSCalibratedRGBColorSpace_FUNC,
+	NSCopyBits_FUNC,
+	NSDefaultRunLoopMode_FUNC,
+	NSDeviceRGBColorSpace_FUNC,
+	NSDeviceResolution_FUNC,
+	NSDragPboard_FUNC,
+	NSEqualRects_FUNC,
+	NSErrorFailingURLStringKey_FUNC,
+	NSEventTrackingRunLoopMode_FUNC,
+	NSFileTypeForHFSTypeCode_FUNC,
+	NSFilenamesPboardType_FUNC,
+	NSFontAttributeName_FUNC,
+	NSForegroundColorAttributeName_FUNC,
+	NSGetSizeAndAlignment_FUNC,
+	NSHTMLPboardType_FUNC,
+	NSIntersectionRect_FUNC,
+	NSLinkAttributeName_FUNC,
+	NSNumberOfColorComponents_FUNC,
+	NSObliquenessAttributeName_FUNC,
+	NSParagraphStyleAttributeName_FUNC,
+	NSPointInRect_FUNC,
+	NSPoint_1sizeof_FUNC,
+	NSPrintAllPages_FUNC,
+	NSPrintCopies_FUNC,
+	NSPrintFirstPage_FUNC,
+	NSPrintJobDisposition_FUNC,
+	NSPrintLastPage_FUNC,
+	NSPrintMustCollate_FUNC,
+	NSPrintPreviewJob_FUNC,
+	NSPrintSaveJob_FUNC,
+	NSPrintSavePath_FUNC,
+	NSPrintScalingFactor_FUNC,
+	NSPrintSpoolJob_FUNC,
+	NSRTFPboardType_FUNC,
+	NSRange_1sizeof_FUNC,
+	NSRect_1sizeof_FUNC,
+	NSSearchPathForDirectoriesInDomains_FUNC,
+	NSSize_1sizeof_FUNC,
+	NSStrikethroughColorAttributeName_FUNC,
+	NSStrikethroughStyleAttributeName_FUNC,
+	NSStringPboardType_FUNC,
+	NSStrokeWidthAttributeName_FUNC,
+	NSSystemColorsDidChangeNotification_FUNC,
+	NSTIFFPboardType_FUNC,
+	NSTemporaryDirectory_FUNC,
+	NSToolbarCustomizeToolbarItemIdentifier_FUNC,
+	NSToolbarDidRemoveItemNotification_FUNC,
+	NSToolbarFlexibleSpaceItemIdentifier_FUNC,
+	NSToolbarPrintItemIdentifier_FUNC,
+	NSToolbarSeparatorItemIdentifier_FUNC,
+	NSToolbarShowColorsItemIdentifier_FUNC,
+	NSToolbarShowFontsItemIdentifier_FUNC,
+	NSToolbarSpaceItemIdentifier_FUNC,
+	NSToolbarWillAddItemNotification_FUNC,
+	NSURLPboardType_FUNC,
+	NSUnderlineColorAttributeName_FUNC,
+	NSUnderlineStyleAttributeName_FUNC,
+	NSViewGlobalFrameDidChangeNotification_FUNC,
+	NewGlobalRef_FUNC,
+	NewRgn_FUNC,
+	OffsetRgn_FUNC,
+	OpenRgn_FUNC,
+	PtInRgn_FUNC,
+	QDRegionToRects_FUNC,
+	RectInRgn_FUNC,
+	RectRgn_FUNC,
+	SectRgn_FUNC,
+	SetFrontProcess_FUNC,
+	SetRect_FUNC,
+	SetSystemUIMode_FUNC,
+	SetThemeCursor_FUNC,
+	TISCopyCurrentKeyboardInputSource_FUNC,
+	TISGetInputSourceProperty_FUNC,
+	TransformProcessType_FUNC,
+	UCKeyTranslate_FUNC,
+	UnionRgn_FUNC,
+	_1_1BIG_1ENDIAN_1_1_FUNC,
+	call_FUNC,
+	class_1addIvar_FUNC,
+	class_1addMethod_FUNC,
+	class_1addProtocol_FUNC,
+	class_1createInstance_FUNC,
+	class_1getClassMethod_FUNC,
+	class_1getInstanceMethod_FUNC,
+	class_1getMethodImplementation_FUNC,
+	class_1getName_FUNC,
+	class_1getSuperclass_FUNC,
+	getpid_FUNC,
+	instrumentObjcMessageSends_FUNC,
+	isFlipped_1CALLBACK_FUNC,
+	kCFRunLoopCommonModes_FUNC,
+	kTISPropertyUnicodeKeyLayoutData_FUNC,
+#ifndef JNI64
+	memmove__ILorg_eclipse_swt_internal_cocoa_CGPathElement_2I_FUNC,
+#else
+	memmove__JLorg_eclipse_swt_internal_cocoa_CGPathElement_2J_FUNC,
+#endif
+#ifndef JNI64
+	memmove__ILorg_eclipse_swt_internal_cocoa_CGPoint_2I_FUNC,
+#else
+	memmove__JLorg_eclipse_swt_internal_cocoa_CGPoint_2J_FUNC,
+#endif
+#ifndef JNI64
+	memmove__ILorg_eclipse_swt_internal_cocoa_CGRect_2I_FUNC,
+#else
+	memmove__JLorg_eclipse_swt_internal_cocoa_CGRect_2J_FUNC,
+#endif
+#ifndef JNI64
+	memmove__ILorg_eclipse_swt_internal_cocoa_CGSize_2I_FUNC,
+#else
+	memmove__JLorg_eclipse_swt_internal_cocoa_CGSize_2J_FUNC,
+#endif
+#ifndef JNI64
+	memmove__ILorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2I_FUNC,
+#else
+	memmove__JLorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2J_FUNC,
+#endif
+#ifndef JNI64
+	memmove__ILorg_eclipse_swt_internal_cocoa_NSPoint_2I_FUNC,
+#else
+	memmove__JLorg_eclipse_swt_internal_cocoa_NSPoint_2J_FUNC,
+#endif
+#ifndef JNI64
+	memmove__ILorg_eclipse_swt_internal_cocoa_NSRange_2I_FUNC,
+#else
+	memmove__JLorg_eclipse_swt_internal_cocoa_NSRange_2J_FUNC,
+#endif
+#ifndef JNI64
+	memmove__ILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC,
+#else
+	memmove__JLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC,
+#endif
+#ifndef JNI64
+	memmove__ILorg_eclipse_swt_internal_cocoa_NSSize_2I_FUNC,
+#else
+	memmove__JLorg_eclipse_swt_internal_cocoa_NSSize_2J_FUNC,
+#endif
+#ifndef JNI64
+	memmove__Lorg_eclipse_swt_internal_cocoa_CGPathElement_2II_FUNC,
+#else
+	memmove__Lorg_eclipse_swt_internal_cocoa_CGPathElement_2JJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove__Lorg_eclipse_swt_internal_cocoa_CGPoint_2II_FUNC,
+#else
+	memmove__Lorg_eclipse_swt_internal_cocoa_CGPoint_2JJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove__Lorg_eclipse_swt_internal_cocoa_CGRect_2II_FUNC,
+#else
+	memmove__Lorg_eclipse_swt_internal_cocoa_CGRect_2JJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove__Lorg_eclipse_swt_internal_cocoa_CGSize_2II_FUNC,
+#else
+	memmove__Lorg_eclipse_swt_internal_cocoa_CGSize_2JJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2II_FUNC,
+#else
+	memmove__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2JJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove__Lorg_eclipse_swt_internal_cocoa_NSPoint_2II_FUNC,
+#else
+	memmove__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove__Lorg_eclipse_swt_internal_cocoa_NSRange_2II_FUNC,
+#else
+	memmove__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove__Lorg_eclipse_swt_internal_cocoa_NSRect_2II_FUNC,
+#else
+	memmove__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove__Lorg_eclipse_swt_internal_cocoa_NSSize_2II_FUNC,
+#else
+	memmove__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJ_FUNC,
+#endif
+	method_1setImplementation_FUNC,
+	objc_1allocateClassPair_FUNC,
+	objc_1getClass_FUNC,
+	objc_1getMetaClass_FUNC,
+	objc_1getProtocol_FUNC,
+	objc_1lookUpClass_FUNC,
+#ifndef JNI64
+	objc_1msgSend__II_FUNC,
+#else
+	objc_1msgSend__JJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IID_FUNC,
+#else
+	objc_1msgSend__JJD_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIDIIIZ_FUNC,
+#else
+	objc_1msgSend__JJDJJJZ_FUNC,
+#endif
+	objc_1msgSend__IIF_FUNC,
+#ifndef JNI64
+	objc_1msgSend__IIFF_FUNC,
+#else
+	objc_1msgSend__JJDD_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIFFFF_FUNC,
+#else
+	objc_1msgSend__JJDDDD_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIFI_FUNC,
+#else
+	objc_1msgSend__JJDJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__III_FUNC,
+#else
+	objc_1msgSend__JJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIIF_FUNC,
+#else
+	objc_1msgSend__JJJD_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIII_FUNC,
+#else
+	objc_1msgSend__JJJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIIII_FUNC,
+#else
+	objc_1msgSend__JJJJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIIIIF_FUNC,
+#else
+	objc_1msgSend__JJJJJD_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIIIII_FUNC,
+#else
+	objc_1msgSend__JJJJJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIIIIII_FUNC,
+#else
+	objc_1msgSend__JJJJJJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIIIIIIII_FUNC,
+#else
+	objc_1msgSend__JJJJJJJJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIIIIIIZZIII_FUNC,
+#else
+	objc_1msgSend__JJJJJJJZZJJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIIIIIIZZIIII_FUNC,
+#else
+	objc_1msgSend__JJJJJJJZZJJJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIIIIZ_FUNC,
+#else
+	objc_1msgSend__JJJJJZ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIIILorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC,
+#else
+	objc_1msgSend__JJJJLorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIIIZ_FUNC,
+#else
+	objc_1msgSend__JJJJZ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
+#else
+	objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2I_FUNC,
+#else
+	objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2J_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2IDIIIII_FUNC,
+#else
+	objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2JDJJJJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2IDIISII_FUNC,
+#else
+	objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2JDJJSJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSSize_2IIIZ_FUNC,
+#else
+	objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSSize_2JJJZ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC,
+#else
+	objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC,
+#else
+	objc_1msgSend__JJJLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIIZ_FUNC,
+#else
+	objc_1msgSend__JJJZ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2FFF_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2DDD_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2FFFZ_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2DDDZ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2I_3F_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J_3D_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2I_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2J_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2IF_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2Lorg_eclipse_swt_internal_cocoa_NSRect_2JD_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2I_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2J_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2IIIII_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2JJJJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRange_2II_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRange_2JJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2F_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2D_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2FF_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2DD_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2II_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2III_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2IIZ_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJZ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2IIZI_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JJZJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2IZI_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2JZJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRange_2Lorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRect_2IF_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_NSRect_2JD_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2Z_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2Z_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSRect_2ZZ_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSRect_2ZZ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IILorg_eclipse_swt_internal_cocoa_NSSize_2_FUNC,
+#else
+	objc_1msgSend__JJLorg_eclipse_swt_internal_cocoa_NSSize_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIZ_FUNC,
+#else
+	objc_1msgSend__JJZ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__IIZI_FUNC,
+#else
+	objc_1msgSend__JJZJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__II_3B_FUNC,
+#else
+	objc_1msgSend__JJ_3B_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__II_3BI_FUNC,
+#else
+	objc_1msgSend__JJ_3BJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__II_3C_FUNC,
+#else
+	objc_1msgSend__JJ_3C_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__II_3CI_FUNC,
+#else
+	objc_1msgSend__JJ_3CJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__II_3CLorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC,
+#else
+	objc_1msgSend__JJ_3CLorg_eclipse_swt_internal_cocoa_NSRange_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__II_3F_FUNC,
+#else
+	objc_1msgSend__JJ_3D_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__II_3FIF_FUNC,
+#else
+	objc_1msgSend__JJ_3DJD_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__II_3I_FUNC,
+#else
+	objc_1msgSend__JJ_3J_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend__II_3III_FUNC,
+#else
+	objc_1msgSend__JJ_3JII_FUNC,
+#endif
+	objc_1msgSend__JJFD_FUNC,
+	objc_1msgSend__JJI_FUNC,
+	objc_1msgSend__JJ_3I_FUNC,
+	objc_1msgSend__JJ_3JJJ_FUNC,
+#ifndef JNI64
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2I_FUNC,
+#else
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2J_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2II_FUNC,
+#else
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2III_FUNC,
+#else
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IIIII_FUNC,
+#else
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJJJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IIIIZ_FUNC,
+#else
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJJJZ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2I_FUNC,
+#else
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC,
+#else
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IIZ_FUNC,
+#else
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JJZ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
+#else
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC,
+#else
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC,
+#else
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSSize_2_FUNC,
+#else
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSSize_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2IZ_FUNC,
+#else
+	objc_1msgSendSuper__Lorg_eclipse_swt_internal_cocoa_objc_1super_2JZ_FUNC,
+#endif
+	objc_1msgSendSuper_1bool_FUNC,
+#ifndef JNI64
+	objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC,
+#else
+	objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2ILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC,
+#else
+	objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2JLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2I_FUNC,
+#else
+	objc_1msgSendSuper_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2Lorg_eclipse_swt_internal_cocoa_objc_1super_2J_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1bool__II_FUNC,
+#else
+	objc_1msgSend_1bool__JJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1bool__III_FUNC,
+#else
+	objc_1msgSend_1bool__JJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1bool__IIII_FUNC,
+#else
+	objc_1msgSend_1bool__JJJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1bool__IIIII_FUNC,
+#else
+	objc_1msgSend_1bool__JJJJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1bool__IIIIIII_FUNC,
+#else
+	objc_1msgSend_1bool__JJJJJJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1bool__IIILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
+#else
+	objc_1msgSend_1bool__JJJLorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1bool__IIILorg_eclipse_swt_internal_cocoa_NSSize_2Z_FUNC,
+#else
+	objc_1msgSend_1bool__JJJLorg_eclipse_swt_internal_cocoa_NSSize_2Z_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
+#else
+	objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSRange_2I_FUNC,
+#else
+	objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSRange_2J_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1bool__IILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC,
+#else
+	objc_1msgSend_1bool__JJLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1bool__IIS_FUNC,
+#else
+	objc_1msgSend_1bool__JJS_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1fpret__II_FUNC,
+#else
+	objc_1msgSend_1fpret__JJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1fpret__III_FUNC,
+#else
+	objc_1msgSend_1fpret__JJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1fpret__IIII_FUNC,
+#else
+	objc_1msgSend_1fpret__JJJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2II_FUNC,
+#else
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSAffineTransformStruct_2JJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2II_FUNC,
+#else
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2III_FUNC,
+#else
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
+#else
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2IILorg_eclipse_swt_internal_cocoa_NSPoint_2I_FUNC,
+#else
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSPoint_2JJLorg_eclipse_swt_internal_cocoa_NSPoint_2J_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2II_FUNC,
+#else
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2III_FUNC,
+#else
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2IILorg_eclipse_swt_internal_cocoa_NSRange_2I_FUNC,
+#else
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJLorg_eclipse_swt_internal_cocoa_NSRange_2J_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2IILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC,
+#else
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRange_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2II_FUNC,
+#else
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2III_FUNC,
+#else
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IIII_FUNC,
+#else
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IIIIZ_FUNC,
+#else
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJJJZ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRange_2I_FUNC,
+#else
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSRange_2J_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC,
+#else
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2IILorg_eclipse_swt_internal_cocoa_NSRect_2I_FUNC,
+#else
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSRect_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2J_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2II_FUNC,
+#else
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJ_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC,
+#else
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSRect_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSSize_2_FUNC,
+#else
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSSize_2I_FUNC,
+#else
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2J_FUNC,
+#endif
+#ifndef JNI64
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2IILorg_eclipse_swt_internal_cocoa_NSSize_2ZZI_FUNC,
+#else
+	objc_1msgSend_1stret__Lorg_eclipse_swt_internal_cocoa_NSSize_2JJLorg_eclipse_swt_internal_cocoa_NSSize_2ZZJ_FUNC,
+#endif
+	objc_1registerClassPair_FUNC,
+	objc_1super_1sizeof_FUNC,
+	object_1getClass_FUNC,
+	object_1getClassName_FUNC,
+	object_1getInstanceVariable_FUNC,
+	object_1setClass_FUNC,
+	object_1setInstanceVariable_FUNC,
+	sel_1registerName_FUNC,
+} OS_FUNCS;
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_structs.c b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_structs.c
new file mode 100644
index 0000000..e249b01
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_structs.c
@@ -0,0 +1,384 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "os_structs.h"
+
+#ifndef NO_CGPathElement
+typedef struct CGPathElement_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID type, points;
+} CGPathElement_FID_CACHE;
+
+CGPathElement_FID_CACHE CGPathElementFc;
+
+void cacheCGPathElementFields(JNIEnv *env, jobject lpObject)
+{
+	if (CGPathElementFc.cached) return;
+	CGPathElementFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	CGPathElementFc.type = (*env)->GetFieldID(env, CGPathElementFc.clazz, "type", "I");
+	CGPathElementFc.points = (*env)->GetFieldID(env, CGPathElementFc.clazz, "points", I_J);
+	CGPathElementFc.cached = 1;
+}
+
+CGPathElement *getCGPathElementFields(JNIEnv *env, jobject lpObject, CGPathElement *lpStruct)
+{
+	if (!CGPathElementFc.cached) cacheCGPathElementFields(env, lpObject);
+	lpStruct->type = (CGPathElementType)(*env)->GetIntField(env, lpObject, CGPathElementFc.type);
+	lpStruct->points = (CGPoint *)(*env)->GetIntLongField(env, lpObject, CGPathElementFc.points);
+	return lpStruct;
+}
+
+void setCGPathElementFields(JNIEnv *env, jobject lpObject, CGPathElement *lpStruct)
+{
+	if (!CGPathElementFc.cached) cacheCGPathElementFields(env, lpObject);
+	(*env)->SetIntField(env, lpObject, CGPathElementFc.type, (jint)lpStruct->type);
+	(*env)->SetIntLongField(env, lpObject, CGPathElementFc.points, (jintLong)lpStruct->points);
+}
+#endif
+
+#ifndef NO_CGPoint
+typedef struct CGPoint_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID x, y;
+} CGPoint_FID_CACHE;
+
+CGPoint_FID_CACHE CGPointFc;
+
+void cacheCGPointFields(JNIEnv *env, jobject lpObject)
+{
+	if (CGPointFc.cached) return;
+	CGPointFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	CGPointFc.x = (*env)->GetFieldID(env, CGPointFc.clazz, "x", F_D);
+	CGPointFc.y = (*env)->GetFieldID(env, CGPointFc.clazz, "y", F_D);
+	CGPointFc.cached = 1;
+}
+
+CGPoint *getCGPointFields(JNIEnv *env, jobject lpObject, CGPoint *lpStruct)
+{
+	if (!CGPointFc.cached) cacheCGPointFields(env, lpObject);
+	lpStruct->x = (*env)->GetFloatDoubleField(env, lpObject, CGPointFc.x);
+	lpStruct->y = (*env)->GetFloatDoubleField(env, lpObject, CGPointFc.y);
+	return lpStruct;
+}
+
+void setCGPointFields(JNIEnv *env, jobject lpObject, CGPoint *lpStruct)
+{
+	if (!CGPointFc.cached) cacheCGPointFields(env, lpObject);
+	(*env)->SetFloatDoubleField(env, lpObject, CGPointFc.x, (jfloatDouble)lpStruct->x);
+	(*env)->SetFloatDoubleField(env, lpObject, CGPointFc.y, (jfloatDouble)lpStruct->y);
+}
+#endif
+
+#ifndef NO_CGRect
+typedef struct CGRect_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID origin, size;
+} CGRect_FID_CACHE;
+
+CGRect_FID_CACHE CGRectFc;
+
+void cacheCGRectFields(JNIEnv *env, jobject lpObject)
+{
+	if (CGRectFc.cached) return;
+	CGRectFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	CGRectFc.origin = (*env)->GetFieldID(env, CGRectFc.clazz, "origin", "Lorg/eclipse/swt/internal/cocoa/CGPoint;");
+	CGRectFc.size = (*env)->GetFieldID(env, CGRectFc.clazz, "size", "Lorg/eclipse/swt/internal/cocoa/CGSize;");
+	CGRectFc.cached = 1;
+}
+
+CGRect *getCGRectFields(JNIEnv *env, jobject lpObject, CGRect *lpStruct)
+{
+	if (!CGRectFc.cached) cacheCGRectFields(env, lpObject);
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CGRectFc.origin);
+	if (lpObject1 != NULL) getCGPointFields(env, lpObject1, &lpStruct->origin);
+	}
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CGRectFc.size);
+	if (lpObject1 != NULL) getCGSizeFields(env, lpObject1, &lpStruct->size);
+	}
+	return lpStruct;
+}
+
+void setCGRectFields(JNIEnv *env, jobject lpObject, CGRect *lpStruct)
+{
+	if (!CGRectFc.cached) cacheCGRectFields(env, lpObject);
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CGRectFc.origin);
+	if (lpObject1 != NULL) setCGPointFields(env, lpObject1, &lpStruct->origin);
+	}
+	{
+	jobject lpObject1 = (*env)->GetObjectField(env, lpObject, CGRectFc.size);
+	if (lpObject1 != NULL) setCGSizeFields(env, lpObject1, &lpStruct->size);
+	}
+}
+#endif
+
+#ifndef NO_CGSize
+typedef struct CGSize_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID width, height;
+} CGSize_FID_CACHE;
+
+CGSize_FID_CACHE CGSizeFc;
+
+void cacheCGSizeFields(JNIEnv *env, jobject lpObject)
+{
+	if (CGSizeFc.cached) return;
+	CGSizeFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	CGSizeFc.width = (*env)->GetFieldID(env, CGSizeFc.clazz, "width", F_D);
+	CGSizeFc.height = (*env)->GetFieldID(env, CGSizeFc.clazz, "height", F_D);
+	CGSizeFc.cached = 1;
+}
+
+CGSize *getCGSizeFields(JNIEnv *env, jobject lpObject, CGSize *lpStruct)
+{
+	if (!CGSizeFc.cached) cacheCGSizeFields(env, lpObject);
+	lpStruct->width = (*env)->GetFloatDoubleField(env, lpObject, CGSizeFc.width);
+	lpStruct->height = (*env)->GetFloatDoubleField(env, lpObject, CGSizeFc.height);
+	return lpStruct;
+}
+
+void setCGSizeFields(JNIEnv *env, jobject lpObject, CGSize *lpStruct)
+{
+	if (!CGSizeFc.cached) cacheCGSizeFields(env, lpObject);
+	(*env)->SetFloatDoubleField(env, lpObject, CGSizeFc.width, (jfloatDouble)lpStruct->width);
+	(*env)->SetFloatDoubleField(env, lpObject, CGSizeFc.height, (jfloatDouble)lpStruct->height);
+}
+#endif
+
+#ifndef NO_NSAffineTransformStruct
+typedef struct NSAffineTransformStruct_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID m11, m12, m21, m22, tX, tY;
+} NSAffineTransformStruct_FID_CACHE;
+
+NSAffineTransformStruct_FID_CACHE NSAffineTransformStructFc;
+
+void cacheNSAffineTransformStructFields(JNIEnv *env, jobject lpObject)
+{
+	if (NSAffineTransformStructFc.cached) return;
+	NSAffineTransformStructFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	NSAffineTransformStructFc.m11 = (*env)->GetFieldID(env, NSAffineTransformStructFc.clazz, "m11", F_D);
+	NSAffineTransformStructFc.m12 = (*env)->GetFieldID(env, NSAffineTransformStructFc.clazz, "m12", F_D);
+	NSAffineTransformStructFc.m21 = (*env)->GetFieldID(env, NSAffineTransformStructFc.clazz, "m21", F_D);
+	NSAffineTransformStructFc.m22 = (*env)->GetFieldID(env, NSAffineTransformStructFc.clazz, "m22", F_D);
+	NSAffineTransformStructFc.tX = (*env)->GetFieldID(env, NSAffineTransformStructFc.clazz, "tX", F_D);
+	NSAffineTransformStructFc.tY = (*env)->GetFieldID(env, NSAffineTransformStructFc.clazz, "tY", F_D);
+	NSAffineTransformStructFc.cached = 1;
+}
+
+NSAffineTransformStruct *getNSAffineTransformStructFields(JNIEnv *env, jobject lpObject, NSAffineTransformStruct *lpStruct)
+{
+	if (!NSAffineTransformStructFc.cached) cacheNSAffineTransformStructFields(env, lpObject);
+	lpStruct->m11 = (*env)->GetFloatDoubleField(env, lpObject, NSAffineTransformStructFc.m11);
+	lpStruct->m12 = (*env)->GetFloatDoubleField(env, lpObject, NSAffineTransformStructFc.m12);
+	lpStruct->m21 = (*env)->GetFloatDoubleField(env, lpObject, NSAffineTransformStructFc.m21);
+	lpStruct->m22 = (*env)->GetFloatDoubleField(env, lpObject, NSAffineTransformStructFc.m22);
+	lpStruct->tX = (*env)->GetFloatDoubleField(env, lpObject, NSAffineTransformStructFc.tX);
+	lpStruct->tY = (*env)->GetFloatDoubleField(env, lpObject, NSAffineTransformStructFc.tY);
+	return lpStruct;
+}
+
+void setNSAffineTransformStructFields(JNIEnv *env, jobject lpObject, NSAffineTransformStruct *lpStruct)
+{
+	if (!NSAffineTransformStructFc.cached) cacheNSAffineTransformStructFields(env, lpObject);
+	(*env)->SetFloatDoubleField(env, lpObject, NSAffineTransformStructFc.m11, (jfloatDouble)lpStruct->m11);
+	(*env)->SetFloatDoubleField(env, lpObject, NSAffineTransformStructFc.m12, (jfloatDouble)lpStruct->m12);
+	(*env)->SetFloatDoubleField(env, lpObject, NSAffineTransformStructFc.m21, (jfloatDouble)lpStruct->m21);
+	(*env)->SetFloatDoubleField(env, lpObject, NSAffineTransformStructFc.m22, (jfloatDouble)lpStruct->m22);
+	(*env)->SetFloatDoubleField(env, lpObject, NSAffineTransformStructFc.tX, (jfloatDouble)lpStruct->tX);
+	(*env)->SetFloatDoubleField(env, lpObject, NSAffineTransformStructFc.tY, (jfloatDouble)lpStruct->tY);
+}
+#endif
+
+#ifndef NO_NSPoint
+typedef struct NSPoint_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID x, y;
+} NSPoint_FID_CACHE;
+
+NSPoint_FID_CACHE NSPointFc;
+
+void cacheNSPointFields(JNIEnv *env, jobject lpObject)
+{
+	if (NSPointFc.cached) return;
+	NSPointFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	NSPointFc.x = (*env)->GetFieldID(env, NSPointFc.clazz, "x", F_D);
+	NSPointFc.y = (*env)->GetFieldID(env, NSPointFc.clazz, "y", F_D);
+	NSPointFc.cached = 1;
+}
+
+NSPoint *getNSPointFields(JNIEnv *env, jobject lpObject, NSPoint *lpStruct)
+{
+	if (!NSPointFc.cached) cacheNSPointFields(env, lpObject);
+	lpStruct->x = (*env)->GetFloatDoubleField(env, lpObject, NSPointFc.x);
+	lpStruct->y = (*env)->GetFloatDoubleField(env, lpObject, NSPointFc.y);
+	return lpStruct;
+}
+
+void setNSPointFields(JNIEnv *env, jobject lpObject, NSPoint *lpStruct)
+{
+	if (!NSPointFc.cached) cacheNSPointFields(env, lpObject);
+	(*env)->SetFloatDoubleField(env, lpObject, NSPointFc.x, (jfloatDouble)lpStruct->x);
+	(*env)->SetFloatDoubleField(env, lpObject, NSPointFc.y, (jfloatDouble)lpStruct->y);
+}
+#endif
+
+#ifndef NO_NSRange
+typedef struct NSRange_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID location, length;
+} NSRange_FID_CACHE;
+
+NSRange_FID_CACHE NSRangeFc;
+
+void cacheNSRangeFields(JNIEnv *env, jobject lpObject)
+{
+	if (NSRangeFc.cached) return;
+	NSRangeFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	NSRangeFc.location = (*env)->GetFieldID(env, NSRangeFc.clazz, "location", I_J);
+	NSRangeFc.length = (*env)->GetFieldID(env, NSRangeFc.clazz, "length", I_J);
+	NSRangeFc.cached = 1;
+}
+
+NSRange *getNSRangeFields(JNIEnv *env, jobject lpObject, NSRange *lpStruct)
+{
+	if (!NSRangeFc.cached) cacheNSRangeFields(env, lpObject);
+	lpStruct->location = (*env)->GetIntLongField(env, lpObject, NSRangeFc.location);
+	lpStruct->length = (*env)->GetIntLongField(env, lpObject, NSRangeFc.length);
+	return lpStruct;
+}
+
+void setNSRangeFields(JNIEnv *env, jobject lpObject, NSRange *lpStruct)
+{
+	if (!NSRangeFc.cached) cacheNSRangeFields(env, lpObject);
+	(*env)->SetIntLongField(env, lpObject, NSRangeFc.location, (jintLong)lpStruct->location);
+	(*env)->SetIntLongField(env, lpObject, NSRangeFc.length, (jintLong)lpStruct->length);
+}
+#endif
+
+#ifndef NO_NSRect
+typedef struct NSRect_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID x, y, width, height;
+} NSRect_FID_CACHE;
+
+NSRect_FID_CACHE NSRectFc;
+
+void cacheNSRectFields(JNIEnv *env, jobject lpObject)
+{
+	if (NSRectFc.cached) return;
+	NSRectFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	NSRectFc.x = (*env)->GetFieldID(env, NSRectFc.clazz, "x", F_D);
+	NSRectFc.y = (*env)->GetFieldID(env, NSRectFc.clazz, "y", F_D);
+	NSRectFc.width = (*env)->GetFieldID(env, NSRectFc.clazz, "width", F_D);
+	NSRectFc.height = (*env)->GetFieldID(env, NSRectFc.clazz, "height", F_D);
+	NSRectFc.cached = 1;
+}
+
+NSRect *getNSRectFields(JNIEnv *env, jobject lpObject, NSRect *lpStruct)
+{
+	if (!NSRectFc.cached) cacheNSRectFields(env, lpObject);
+	lpStruct->origin.x = (*env)->GetFloatDoubleField(env, lpObject, NSRectFc.x);
+	lpStruct->origin.y = (*env)->GetFloatDoubleField(env, lpObject, NSRectFc.y);
+	lpStruct->size.width = (*env)->GetFloatDoubleField(env, lpObject, NSRectFc.width);
+	lpStruct->size.height = (*env)->GetFloatDoubleField(env, lpObject, NSRectFc.height);
+	return lpStruct;
+}
+
+void setNSRectFields(JNIEnv *env, jobject lpObject, NSRect *lpStruct)
+{
+	if (!NSRectFc.cached) cacheNSRectFields(env, lpObject);
+	(*env)->SetFloatDoubleField(env, lpObject, NSRectFc.x, (jfloatDouble)lpStruct->origin.x);
+	(*env)->SetFloatDoubleField(env, lpObject, NSRectFc.y, (jfloatDouble)lpStruct->origin.y);
+	(*env)->SetFloatDoubleField(env, lpObject, NSRectFc.width, (jfloatDouble)lpStruct->size.width);
+	(*env)->SetFloatDoubleField(env, lpObject, NSRectFc.height, (jfloatDouble)lpStruct->size.height);
+}
+#endif
+
+#ifndef NO_NSSize
+typedef struct NSSize_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID width, height;
+} NSSize_FID_CACHE;
+
+NSSize_FID_CACHE NSSizeFc;
+
+void cacheNSSizeFields(JNIEnv *env, jobject lpObject)
+{
+	if (NSSizeFc.cached) return;
+	NSSizeFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	NSSizeFc.width = (*env)->GetFieldID(env, NSSizeFc.clazz, "width", F_D);
+	NSSizeFc.height = (*env)->GetFieldID(env, NSSizeFc.clazz, "height", F_D);
+	NSSizeFc.cached = 1;
+}
+
+NSSize *getNSSizeFields(JNIEnv *env, jobject lpObject, NSSize *lpStruct)
+{
+	if (!NSSizeFc.cached) cacheNSSizeFields(env, lpObject);
+	lpStruct->width = (*env)->GetFloatDoubleField(env, lpObject, NSSizeFc.width);
+	lpStruct->height = (*env)->GetFloatDoubleField(env, lpObject, NSSizeFc.height);
+	return lpStruct;
+}
+
+void setNSSizeFields(JNIEnv *env, jobject lpObject, NSSize *lpStruct)
+{
+	if (!NSSizeFc.cached) cacheNSSizeFields(env, lpObject);
+	(*env)->SetFloatDoubleField(env, lpObject, NSSizeFc.width, (jfloatDouble)lpStruct->width);
+	(*env)->SetFloatDoubleField(env, lpObject, NSSizeFc.height, (jfloatDouble)lpStruct->height);
+}
+#endif
+
+#ifndef NO_objc_super
+typedef struct objc_super_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID receiver, super_class;
+} objc_super_FID_CACHE;
+
+objc_super_FID_CACHE objc_superFc;
+
+void cacheobjc_superFields(JNIEnv *env, jobject lpObject)
+{
+	if (objc_superFc.cached) return;
+	objc_superFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	objc_superFc.receiver = (*env)->GetFieldID(env, objc_superFc.clazz, "receiver", I_J);
+	objc_superFc.super_class = (*env)->GetFieldID(env, objc_superFc.clazz, "super_class", I_J);
+	objc_superFc.cached = 1;
+}
+
+struct objc_super *getobjc_superFields(JNIEnv *env, jobject lpObject, struct objc_super *lpStruct)
+{
+	if (!objc_superFc.cached) cacheobjc_superFields(env, lpObject);
+	lpStruct->receiver = (id)(*env)->GetIntLongField(env, lpObject, objc_superFc.receiver);
+	lpStruct->swt_super_class = (Class)(*env)->GetIntLongField(env, lpObject, objc_superFc.super_class);
+	return lpStruct;
+}
+
+void setobjc_superFields(JNIEnv *env, jobject lpObject, struct objc_super *lpStruct)
+{
+	if (!objc_superFc.cached) cacheobjc_superFields(env, lpObject);
+	(*env)->SetIntLongField(env, lpObject, objc_superFc.receiver, (jintLong)lpStruct->receiver);
+	(*env)->SetIntLongField(env, lpObject, objc_superFc.super_class, (jintLong)lpStruct->swt_super_class);
+}
+#endif
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_structs.h b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_structs.h
new file mode 100644
index 0000000..31eb71f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_structs.h
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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
+ *******************************************************************************/
+
+#include "os.h"
+
+#ifndef NO_CGPathElement
+void cacheCGPathElementFields(JNIEnv *env, jobject lpObject);
+CGPathElement *getCGPathElementFields(JNIEnv *env, jobject lpObject, CGPathElement *lpStruct);
+void setCGPathElementFields(JNIEnv *env, jobject lpObject, CGPathElement *lpStruct);
+#define CGPathElement_sizeof() sizeof(CGPathElement)
+#else
+#define cacheCGPathElementFields(a,b)
+#define getCGPathElementFields(a,b,c) NULL
+#define setCGPathElementFields(a,b,c)
+#define CGPathElement_sizeof() 0
+#endif
+
+#ifndef NO_CGPoint
+void cacheCGPointFields(JNIEnv *env, jobject lpObject);
+CGPoint *getCGPointFields(JNIEnv *env, jobject lpObject, CGPoint *lpStruct);
+void setCGPointFields(JNIEnv *env, jobject lpObject, CGPoint *lpStruct);
+#define CGPoint_sizeof() sizeof(CGPoint)
+#else
+#define cacheCGPointFields(a,b)
+#define getCGPointFields(a,b,c) NULL
+#define setCGPointFields(a,b,c)
+#define CGPoint_sizeof() 0
+#endif
+
+#ifndef NO_CGRect
+void cacheCGRectFields(JNIEnv *env, jobject lpObject);
+CGRect *getCGRectFields(JNIEnv *env, jobject lpObject, CGRect *lpStruct);
+void setCGRectFields(JNIEnv *env, jobject lpObject, CGRect *lpStruct);
+#define CGRect_sizeof() sizeof(CGRect)
+#else
+#define cacheCGRectFields(a,b)
+#define getCGRectFields(a,b,c) NULL
+#define setCGRectFields(a,b,c)
+#define CGRect_sizeof() 0
+#endif
+
+#ifndef NO_CGSize
+void cacheCGSizeFields(JNIEnv *env, jobject lpObject);
+CGSize *getCGSizeFields(JNIEnv *env, jobject lpObject, CGSize *lpStruct);
+void setCGSizeFields(JNIEnv *env, jobject lpObject, CGSize *lpStruct);
+#define CGSize_sizeof() sizeof(CGSize)
+#else
+#define cacheCGSizeFields(a,b)
+#define getCGSizeFields(a,b,c) NULL
+#define setCGSizeFields(a,b,c)
+#define CGSize_sizeof() 0
+#endif
+
+#ifndef NO_NSAffineTransformStruct
+void cacheNSAffineTransformStructFields(JNIEnv *env, jobject lpObject);
+NSAffineTransformStruct *getNSAffineTransformStructFields(JNIEnv *env, jobject lpObject, NSAffineTransformStruct *lpStruct);
+void setNSAffineTransformStructFields(JNIEnv *env, jobject lpObject, NSAffineTransformStruct *lpStruct);
+#define NSAffineTransformStruct_sizeof() sizeof(NSAffineTransformStruct)
+#else
+#define cacheNSAffineTransformStructFields(a,b)
+#define getNSAffineTransformStructFields(a,b,c) NULL
+#define setNSAffineTransformStructFields(a,b,c)
+#define NSAffineTransformStruct_sizeof() 0
+#endif
+
+#ifndef NO_NSPoint
+void cacheNSPointFields(JNIEnv *env, jobject lpObject);
+NSPoint *getNSPointFields(JNIEnv *env, jobject lpObject, NSPoint *lpStruct);
+void setNSPointFields(JNIEnv *env, jobject lpObject, NSPoint *lpStruct);
+#define NSPoint_sizeof() sizeof(NSPoint)
+#else
+#define cacheNSPointFields(a,b)
+#define getNSPointFields(a,b,c) NULL
+#define setNSPointFields(a,b,c)
+#define NSPoint_sizeof() 0
+#endif
+
+#ifndef NO_NSRange
+void cacheNSRangeFields(JNIEnv *env, jobject lpObject);
+NSRange *getNSRangeFields(JNIEnv *env, jobject lpObject, NSRange *lpStruct);
+void setNSRangeFields(JNIEnv *env, jobject lpObject, NSRange *lpStruct);
+#define NSRange_sizeof() sizeof(NSRange)
+#else
+#define cacheNSRangeFields(a,b)
+#define getNSRangeFields(a,b,c) NULL
+#define setNSRangeFields(a,b,c)
+#define NSRange_sizeof() 0
+#endif
+
+#ifndef NO_NSRect
+void cacheNSRectFields(JNIEnv *env, jobject lpObject);
+NSRect *getNSRectFields(JNIEnv *env, jobject lpObject, NSRect *lpStruct);
+void setNSRectFields(JNIEnv *env, jobject lpObject, NSRect *lpStruct);
+#define NSRect_sizeof() sizeof(NSRect)
+#else
+#define cacheNSRectFields(a,b)
+#define getNSRectFields(a,b,c) NULL
+#define setNSRectFields(a,b,c)
+#define NSRect_sizeof() 0
+#endif
+
+#ifndef NO_NSSize
+void cacheNSSizeFields(JNIEnv *env, jobject lpObject);
+NSSize *getNSSizeFields(JNIEnv *env, jobject lpObject, NSSize *lpStruct);
+void setNSSizeFields(JNIEnv *env, jobject lpObject, NSSize *lpStruct);
+#define NSSize_sizeof() sizeof(NSSize)
+#else
+#define cacheNSSizeFields(a,b)
+#define getNSSizeFields(a,b,c) NULL
+#define setNSSizeFields(a,b,c)
+#define NSSize_sizeof() 0
+#endif
+
+#ifndef NO_objc_super
+void cacheobjc_superFields(JNIEnv *env, jobject lpObject);
+struct objc_super *getobjc_superFields(JNIEnv *env, jobject lpObject, struct objc_super *lpStruct);
+void setobjc_superFields(JNIEnv *env, jobject lpObject, struct objc_super *lpStruct);
+#define objc_super_sizeof() sizeof(struct objc_super)
+#else
+#define cacheobjc_superFields(a,b)
+#define getobjc_superFields(a,b,c) NULL
+#define setobjc_superFields(a,b,c)
+#define objc_super_sizeof() 0
+#endif
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/Lock.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/Lock.java
new file mode 100644
index 0000000..7712dd0
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/Lock.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * 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.internal;
+
+/**
+ * Instances of this represent a recursive monitor.  Note that this
+ * is an empty implementation which does not actually perform locking.
+ */
+public class Lock {
+
+/**
+ * Locks the monitor and returns the lock count. If
+ * the lock is owned by another thread, wait until
+ * the lock is released.
+ * 
+ * @return the lock count
+ */
+public int lock() {
+	return 0;
+}
+
+/**
+ * Unlocks the monitor. If the current thread is not
+ * the monitor owner, do nothing.
+ */
+public void unlock() {
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/Platform.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/Platform.java
new file mode 100755
index 0000000..ef6bfb1
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/Platform.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * 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.internal;
+
+public class Platform {
+	
+public static final String PLATFORM = "cocoa"; //$NON-NLS-1$
+public static final Lock lock = new Lock ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/AppKitFull.bridgesupport.extras b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/AppKitFull.bridgesupport.extras
new file mode 100644
index 0000000..709e363
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/AppKitFull.bridgesupport.extras
@@ -0,0 +1,4748 @@
+<?xml version="1.0" encoding="UTF8"?>
+<signatures swt_gen="mixed">
+	<constant name="NSAccessibilityButtonRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityCheckBoxRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityChildrenAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityColumnRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityComboBoxRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityConfirmAction" swt_gen="true"></constant>
+	<constant name="NSAccessibilityContentsAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityDescriptionAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityDialogSubrole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityEnabledAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityExpandedAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityFloatingWindowSubrole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityFocusedAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityFocusedUIElementChangedNotification" swt_gen="true"></constant>
+	<constant name="NSAccessibilityGridRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityGroupRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityHelpAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityHelpTagRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityHorizontalOrientationValue" swt_gen="true"></constant>
+	<constant name="NSAccessibilityHorizontalScrollBarAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityImageRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityIncrementorRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityInsertionPointLineNumberAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityLabelValueAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityLineForIndexParameterizedAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityLinkRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityLinkTextAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityListRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityMaxValueAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityMenuBarRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityMenuButtonRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityMenuItemRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityMenuRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityMinValueAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityNextContentsAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityNumberOfCharactersAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityOrientationAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityOutlineRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityOutlineRowSubrole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityParentAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityPopUpButtonRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityPositionAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityPressAction" swt_gen="true"></constant>
+	<constant name="NSAccessibilityPreviousContentsAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityProgressIndicatorRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityRTFForRangeParameterizedAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityRadioButtonRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityRadioGroupRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityRangeForIndexParameterizedAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityRangeForLineParameterizedAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityRangeForPositionParameterizedAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityRoleAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityRoleDescriptionAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityRowRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityScrollAreaRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityScrollBarRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilitySelectedAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilitySelectedChildrenAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilitySelectedChildrenChangedNotification" swt_gen="true"></constant>
+	<constant name="NSAccessibilitySelectedTextAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilitySelectedTextChangedNotification" swt_gen="true"></constant>
+	<constant name="NSAccessibilitySelectedTextRangeAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilitySelectedTextRangesAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityServesAsTitleForUIElementsAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilitySizeAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilitySliderRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilitySortButtonRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilitySplitterRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityStandardWindowSubrole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityStaticTextRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityStringForRangeParameterizedAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityStyleRangeForIndexParameterizedAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilitySubroleAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilitySystemDialogSubrole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityTabGroupRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityTableRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityTableRowSubrole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityTabsAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityTextAreaRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityTextFieldRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityTextLinkSubrole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityTitleAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityTitleUIElementAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityToolbarRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityTopLevelUIElementAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityUnknownRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityUnknownSubrole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityValueAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityValueChangedNotification" swt_gen="true"></constant>
+	<constant name="NSAccessibilityValueDescriptionAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityValueIndicatorRole" swt_gen="true"></constant>
+	<constant name="NSAccessibilityVerticalOrientationValue" swt_gen="true"></constant>
+	<constant name="NSAccessibilityVerticalScrollBarAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityVisibleCharacterRangeAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityVisibleChildrenAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityWindowAttribute" swt_gen="true"></constant>
+	<constant name="NSAccessibilityWindowRole" swt_gen="true"></constant>
+	<constant name="NSApplicationDidChangeScreenParametersNotification" swt_gen="true"></constant>
+	<constant name="NSBackgroundColorAttributeName" swt_gen="true"></constant>
+	<constant name="NSBaselineOffsetAttributeName" swt_gen="true"></constant>
+	<constant name="NSCalibratedRGBColorSpace" swt_gen="true"></constant>
+	<constant name="NSDeviceRGBColorSpace" swt_gen="true"></constant>
+	<constant name="NSDeviceResolution" swt_gen="true"></constant>
+	<constant name="NSDragPboard" swt_gen="true"></constant>
+	<constant name="NSEventTrackingRunLoopMode" swt_gen="true"></constant>
+	<constant name="NSFilenamesPboardType" swt_gen="true"></constant>
+	<constant name="NSFontAttributeName" swt_gen="true"></constant>
+	<constant name="NSForegroundColorAttributeName" swt_gen="true"></constant>
+	<constant name="NSHTMLPboardType" swt_gen="true"></constant>
+	<constant name="NSLinkAttributeName" swt_gen="true"></constant>
+	<constant name="NSObliquenessAttributeName" swt_gen="true"></constant>
+	<constant name="NSParagraphStyleAttributeName" swt_gen="true"></constant>
+	<constant name="NSPrintAllPages" swt_gen="true"></constant>
+	<constant name="NSPrintCopies" swt_gen="true"></constant>
+	<constant name="NSPrintFirstPage" swt_gen="true"></constant>
+	<constant name="NSPrintJobDisposition" swt_gen="true"></constant>
+	<constant name="NSPrintLastPage" swt_gen="true"></constant>
+	<constant name="NSPrintMustCollate" swt_gen="true"></constant>
+	<constant name="NSPrintPreviewJob" swt_gen="true"></constant>
+	<constant name="NSPrintSaveJob" swt_gen="true"></constant>
+	<constant name="NSPrintSavePath" swt_gen="true"></constant>
+	<constant name="NSPrintScalingFactor" swt_gen="true"></constant>
+	<constant name="NSPrintSpoolJob" swt_gen="true"></constant>
+	<constant name="NSRTFPboardType" swt_gen="true"></constant>
+	<constant name="NSStrikethroughColorAttributeName" swt_gen="true"></constant>
+	<constant name="NSStrikethroughStyleAttributeName" swt_gen="true"></constant>
+	<constant name="NSStringPboardType" swt_gen="true"></constant>
+	<constant name="NSStrokeWidthAttributeName" swt_gen="true"></constant>
+	<constant name="NSSystemColorsDidChangeNotification" swt_gen="true"></constant>
+	<constant name="NSTIFFPboardType" swt_gen="true"></constant>
+	<constant name="NSToolbarCustomizeToolbarItemIdentifier" swt_gen="true"></constant>
+	<constant name="NSToolbarDidRemoveItemNotification" swt_gen="true"></constant>
+	<constant name="NSToolbarFlexibleSpaceItemIdentifier" swt_gen="true"></constant>
+	<constant name="NSToolbarPrintItemIdentifier" swt_gen="true"></constant>
+	<constant name="NSToolbarSeparatorItemIdentifier" swt_gen="true"></constant>
+	<constant name="NSToolbarShowColorsItemIdentifier" swt_gen="true"></constant>
+	<constant name="NSToolbarShowFontsItemIdentifier" swt_gen="true"></constant>
+	<constant name="NSToolbarSpaceItemIdentifier" swt_gen="true"></constant>
+	<constant name="NSToolbarWillAddItemNotification" swt_gen="true"></constant>
+	<constant name="NSURLPboardType" swt_gen="true"></constant>
+	<constant name="NSUnderlineColorAttributeName" swt_gen="true"></constant>
+	<constant name="NSUnderlineStyleAttributeName" swt_gen="true"></constant>
+	<constant name="NSViewGlobalFrameDidChangeNotification" swt_gen="true"></constant>
+	<enum name="NSAlertFirstButtonReturn" swt_gen="true"></enum>
+	<enum name="NSAlertSecondButtonReturn" swt_gen="true"></enum>
+	<enum name="NSAlertThirdButtonReturn" swt_gen="true"></enum>
+	<enum name="NSAlphaFirstBitmapFormat" swt_gen="true"></enum>
+	<enum name="NSAlphaNonpremultipliedBitmapFormat" swt_gen="true"></enum>
+	<enum name="NSAlternateKeyMask" swt_gen="true"></enum>
+	<enum name="NSApplicationDefined" swt_gen="true"></enum>
+	<enum name="NSAtTop" swt_gen="true"></enum>
+	<enum name="NSBackingStoreBuffered" swt_gen="true"></enum>
+	<enum name="NSBackspaceCharacter" swt_gen="true"></enum>
+	<enum name="NSBevelLineJoinStyle" swt_gen="true"></enum>
+	<enum name="NSBezelBorder" swt_gen="true"></enum>
+	<enum name="NSBoldFontMask" swt_gen="true"></enum>
+	<enum name="NSBorderlessWindowMask" swt_gen="true"></enum>
+	<enum name="NSBottomTabsBezelBorder" swt_gen="true"></enum>
+	<enum name="NSBoxCustom" swt_gen="true"></enum>
+	<enum name="NSBoxSeparator" swt_gen="true"></enum>
+	<enum name="NSButtLineCapStyle" swt_gen="true"></enum>
+	<enum name="NSCancelButton" swt_gen="true"></enum>
+	<enum name="NSCarriageReturnCharacter" swt_gen="true"></enum>
+	<enum name="NSCenterTextAlignment" swt_gen="true"></enum>
+	<enum name="NSClockAndCalendarDatePickerStyle" swt_gen="true"></enum>
+	<enum name="NSClosableWindowMask" swt_gen="true"></enum>
+	<enum name="NSClosePathBezierPathElement" swt_gen="true"></enum>
+	<enum name="NSCommandKeyMask" swt_gen="true"></enum>
+	<enum name="NSCompositeClear" swt_gen="true"></enum>
+	<enum name="NSCompositeCopy" swt_gen="true"></enum>
+	<enum name="NSCompositeSourceOver" swt_gen="true"></enum>
+	<enum name="NSCompositeXOR" swt_gen="true"></enum>
+	<enum name="NSControlKeyMask" swt_gen="true"></enum>
+	<enum name="NSCriticalAlertStyle" swt_gen="true"></enum>
+	<enum name="NSCurveToBezierPathElement" swt_gen="true"></enum>
+	<enum name="NSDeleteCharacter" swt_gen="true"></enum>
+	<enum name="NSDeviceIndependentModifierFlagsMask" swt_gen="true"></enum>
+	<enum name="NSDragOperationCopy" swt_gen="true"></enum>
+	<enum name="NSDragOperationDelete" swt_gen="true"></enum>
+	<enum name="NSDragOperationEvery" swt_gen="true"></enum>
+	<enum name="NSDragOperationLink" swt_gen="true"></enum>
+	<enum name="NSDragOperationMove" swt_gen="true"></enum>
+	<enum name="NSDragOperationNone" swt_gen="true"></enum>
+	<enum name="NSEnterCharacter" swt_gen="true"></enum>
+	<enum name="NSEvenOddWindingRule" swt_gen="true"></enum>
+	<enum name="NSFileHandlingPanelOKButton" swt_gen="true"></enum>
+	<enum name="NSFlagsChanged" swt_gen="true"></enum>
+	<enum name="NSFocusRingTypeNone" swt_gen="true"></enum>
+	<enum name="NSHelpFunctionKey" swt_gen="true"></enum>
+	<enum name="NSHelpKeyMask" swt_gen="true"></enum>
+	<enum name="NSHourMinuteDatePickerElementFlag" swt_gen="true"></enum>
+	<enum name="NSHourMinuteSecondDatePickerElementFlag" swt_gen="true"></enum>
+	<enum name="NSImageAbove" swt_gen="true"></enum>
+	<enum name="NSImageAlignCenter" swt_gen="true"></enum>
+	<enum name="NSImageAlignLeft" swt_gen="true"></enum>
+	<enum name="NSImageAlignRight" swt_gen="true"></enum>
+	<enum name="NSImageCacheNever" swt_gen="true"></enum>
+	<enum name="NSImageInterpolationDefault" swt_gen="true"></enum>
+	<enum name="NSImageInterpolationHigh" swt_gen="true"></enum>
+	<enum name="NSImageInterpolationLow" swt_gen="true"></enum>
+	<enum name="NSImageInterpolationNone" swt_gen="true"></enum>
+	<enum name="NSImageLeft" swt_gen="true"></enum>
+	<enum name="NSImageOnly" swt_gen="true"></enum>
+	<enum name="NSImageOverlaps" swt_gen="true"></enum>
+	<enum name="NSInformationalAlertStyle" swt_gen="true"></enum>
+	<enum name="NSItalicFontMask" swt_gen="true"></enum>
+	<enum name="NSJustifiedTextAlignment" swt_gen="true"></enum>
+	<enum name="NSKeyDown" swt_gen="true"></enum>
+	<enum name="NSKeyUp" swt_gen="true"></enum>
+	<enum name="NSLandscapeOrientation" swt_gen="true"></enum>
+	<enum name="NSLeftMouseDown" swt_gen="true"></enum>
+	<enum name="NSLeftMouseDownMask" swt_gen="true"></enum>
+	<enum name="NSLeftMouseDragged" swt_gen="true"></enum>
+	<enum name="NSLeftMouseDraggedMask" swt_gen="true"></enum>
+	<enum name="NSLeftMouseUp" swt_gen="true"></enum>
+	<enum name="NSLeftMouseUpMask" swt_gen="true"></enum>
+	<enum name="NSLeftTabStopType" swt_gen="true"></enum>
+	<enum name="NSLeftTextAlignment" swt_gen="true"></enum>
+	<enum name="NSLineBreakByClipping" swt_gen="true"></enum>
+	<enum name="NSLineBreakByWordWrapping" swt_gen="true"></enum>
+	<enum name="NSLineToBezierPathElement" swt_gen="true"></enum>
+	<enum name="NSMiniaturizableWindowMask" swt_gen="true"></enum>
+	<enum name="NSMiterLineJoinStyle" swt_gen="true"></enum>
+	<enum name="NSMixedState" swt_gen="true"></enum>
+	<enum name="NSMomentaryLightButton" swt_gen="true"></enum>
+	<enum name="NSMouseEntered" swt_gen="true"></enum>
+	<enum name="NSMouseExited" swt_gen="true"></enum>
+	<enum name="NSMouseMoved" swt_gen="true"></enum>
+	<enum name="NSMoveToBezierPathElement" swt_gen="true"></enum>
+	<enum name="NSNewlineCharacter" swt_gen="true"></enum>
+	<enum name="NSNoBorder" swt_gen="true"></enum>
+	<enum name="NSNoImage" swt_gen="true"></enum>
+	<enum name="NSNoTitle" swt_gen="true"></enum>
+	<enum name="NSNonZeroWindingRule" swt_gen="true"></enum>
+	<enum name="NSOffState" swt_gen="true"></enum>
+	<enum name="NSOnState" swt_gen="true"></enum>
+	<enum name="NSOpenGLPFAAccumSize" swt_gen="true"></enum>
+	<enum name="NSOpenGLPFAAlphaSize" swt_gen="true"></enum>
+	<enum name="NSOpenGLPFAColorSize" swt_gen="true"></enum>
+	<enum name="NSOpenGLPFADepthSize" swt_gen="true"></enum>
+	<enum name="NSOpenGLPFADoubleBuffer" swt_gen="true"></enum>
+	<enum name="NSOpenGLPFASampleBuffers" swt_gen="true"></enum>
+	<enum name="NSOpenGLPFASamples" swt_gen="true"></enum>
+	<enum name="NSOpenGLPFAStencilSize" swt_gen="true"></enum>
+	<enum name="NSOpenGLPFAStereo" swt_gen="true"></enum>
+	<enum name="NSOtherMouseDown" swt_gen="true"></enum>
+	<enum name="NSOtherMouseDragged" swt_gen="true"></enum>
+	<enum name="NSOtherMouseUp" swt_gen="true"></enum>
+	<enum name="NSOutlineViewDropOnItemIndex" swt_gen="true"></enum>
+	<enum name="NSPageDownFunctionKey" swt_gen="true"></enum>
+	<enum name="NSPageUpFunctionKey" swt_gen="true"></enum>
+	<enum name="NSPortraitOrientation" swt_gen="true"></enum>
+	<enum name="NSPrintPanelShowsPageSetupAccessory" swt_gen="true"></enum>
+	<enum name="NSProgressIndicatorPreferredThickness" swt_gen="true"></enum>
+	<enum name="NSPushOnPushOffButton" swt_gen="true"></enum>
+	<enum name="NSRadioButton" swt_gen="true"></enum>
+	<enum name="NSRegularControlSize" swt_gen="true"></enum>
+	<enum name="NSResizableWindowMask" swt_gen="true"></enum>
+	<enum name="NSRightMouseDown" swt_gen="true"></enum>
+	<enum name="NSRightMouseDragged" swt_gen="true"></enum>
+	<enum name="NSRightMouseUp" swt_gen="true"></enum>
+	<enum name="NSRightTextAlignment" swt_gen="true"></enum>
+	<enum name="NSRoundLineCapStyle" swt_gen="true"></enum>
+	<enum name="NSRoundLineJoinStyle" swt_gen="true"></enum>
+	<enum name="NSRoundedBezelStyle" swt_gen="true"></enum>
+	<enum name="NSScaleNone" swt_gen="true"></enum>
+	<enum name="NSScrollWheel" swt_gen="true"></enum>
+	<enum name="NSScrollerDecrementLine" swt_gen="true"></enum>
+	<enum name="NSScrollerDecrementPage" swt_gen="true"></enum>
+	<enum name="NSScrollerIncrementLine" swt_gen="true"></enum>
+	<enum name="NSScrollerIncrementPage" swt_gen="true"></enum>
+	<enum name="NSScrollerKnob" swt_gen="true"></enum>
+	<enum name="NSShadowlessSquareBezelStyle" swt_gen="true"></enum>
+	<enum name="NSShiftKeyMask" swt_gen="true"></enum>
+	<enum name="NSSmallControlSize" swt_gen="true"></enum>
+	<enum name="NSSquareLineCapStyle" swt_gen="true"></enum>
+	<enum name="NSStatusWindowLevel" swt_gen="true"></enum>
+	<enum name="NSSwitchButton" swt_gen="true"></enum>
+	<enum name="NSSystemDefined" swt_gen="true"></enum>
+	<enum name="NSTabCharacter" swt_gen="true"></enum>
+	<enum name="NSTableColumnNoResizing" swt_gen="true"></enum>
+	<enum name="NSTableColumnUserResizingMask" swt_gen="true"></enum>
+	<enum name="NSTableViewDropAbove" swt_gen="true"></enum>
+	<enum name="NSTableViewDropOn" swt_gen="true"></enum>
+	<enum name="NSTableViewNoColumnAutoresizing" swt_gen="true"></enum>
+	<enum name="NSTextFieldAndStepperDatePickerStyle" swt_gen="true"></enum>
+	<enum name="NSTitledWindowMask" swt_gen="true"></enum>
+	<enum name="NSUnderlineStyleDouble" swt_gen="true"></enum>
+	<enum name="NSUnderlineStyleNone" swt_gen="true"></enum>
+	<enum name="NSUnderlineStyleSingle" swt_gen="true"></enum>
+	<enum name="NSUnderlineStyleThick" swt_gen="true"></enum>
+	<enum name="NSViewHeightSizable" swt_gen="true"></enum>
+	<enum name="NSViewWidthSizable" swt_gen="true"></enum>
+	<enum name="NSWarningAlertStyle" swt_gen="true"></enum>
+	<enum name="NSWindowAbove" swt_gen="true"></enum>
+	<enum name="NSWindowBelow" swt_gen="true"></enum>
+	<enum name="NSYearMonthDatePickerElementFlag" swt_gen="true"></enum>
+	<enum name="NSYearMonthDayDatePickerElementFlag" swt_gen="true"></enum>
+	<function name="NSAccessibilityActionDescription" swt_gen="true">
+		<arg name="action" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="NSAccessibilityPostNotification" swt_gen="true">
+		<arg name="element" swt_gen="true"></arg>
+		<arg name="notification" swt_gen="true"></arg>
+	</function>
+	<function name="NSAccessibilityRaiseBadArgumentException" swt_gen="true">
+		<arg name="element" swt_gen="true"></arg>
+		<arg name="attribute" swt_gen="true"></arg>
+		<arg name="value" swt_gen="true"></arg>
+	</function>
+	<function name="NSAccessibilityRoleDescription" swt_gen="true">
+		<arg name="role" swt_gen="true"></arg>
+		<arg name="subrole" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="NSAccessibilityRoleDescriptionForUIElement" swt_gen="true">
+		<arg name="element" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="NSAccessibilityUnignoredAncestor" swt_gen="true">
+		<arg name="element" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="NSAccessibilityUnignoredChildren" swt_gen="true">
+		<arg name="originalChildren" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="NSAccessibilityUnignoredChildrenForOnlyChild" swt_gen="true">
+		<arg name="originalChild" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="NSAccessibilityUnignoredDescendant" swt_gen="true">
+		<arg name="element" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="NSBeep" swt_gen="true"></function>
+	<function name="NSBitsPerPixelFromDepth" swt_gen="true">
+		<arg name="depth" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="NSCopyBits" swt_gen="true">
+		<arg name="srcGState" swt_gen="true"></arg>
+		<arg name="srcRect" swt_gen="true"></arg>
+		<arg name="destPoint" swt_gen="true"></arg>
+	</function>
+	<function name="NSNumberOfColorComponents" swt_gen="true">
+		<arg name="colorSpaceName" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<class name="NSATSTypesetter" swt_superclass="NSTypesetter">
+	</class>
+	<class name="NSActionCell" swt_gen="mixed" swt_superclass="NSCell">
+		<method selector="action" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAction:" swt_gen="true">
+			<arg name="aSelector" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setTarget:" swt_gen="true">
+			<arg name="anObject" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="target" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSAffineTransform" swt_gen="mixed">
+		<method selector="concat" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="initWithTransform:" swt_gen="true">
+			<arg name="transform" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSAffineTransform"></retval>
+		</method>
+		<method selector="invert" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="prependTransform:" swt_gen="true">
+			<arg name="transform" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="rotateByDegrees:" swt_gen="true">
+			<arg name="angle" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="scaleXBy:yBy:" swt_gen="true">
+			<arg name="scaleX" swt_gen="true"></arg>
+			<arg name="scaleY" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="set" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setTransformStruct:" swt_gen="true">
+			<arg name="transformStruct" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="transform" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="transformPoint:" swt_gen="true">
+			<arg name="aPoint" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="transformSize:" swt_gen="true">
+			<arg name="aSize" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="transformStruct" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="translateXBy:yBy:" swt_gen="true">
+			<arg name="deltaX" swt_gen="true"></arg>
+			<arg name="deltaY" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSAlert" swt_gen="mixed">
+		<method selector="addButtonWithTitle:" swt_gen="true">
+			<arg name="title" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="beginSheetModalForWindow:modalDelegate:didEndSelector:contextInfo:" swt_gen="true">
+			<arg name="window" swt_gen="true"></arg>
+			<arg name="delegate" swt_gen="true"></arg>
+			<arg name="didEndSelector" swt_gen="true"></arg>
+			<arg name="contextInfo" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="runModal" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAlertStyle:" swt_gen="true">
+			<arg name="style" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMessageText:" swt_gen="true">
+			<arg name="messageText" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="window" swt_gen="true">
+			<retval swt_gen="true" swt_java_type="NSWindow"></retval>
+		</method>
+	</class>
+	<class name="NSApplication" swt_gen="mixed" swt_superclass="NSResponder">
+		<method selector="activateIgnoringOtherApps:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:" swt_gen="true">
+			<arg name="sheet" swt_gen="true"></arg>
+			<arg name="docWindow" swt_gen="true"></arg>
+			<arg name="modalDelegate" swt_gen="true"></arg>
+			<arg name="didEndSelector" swt_gen="true"></arg>
+			<arg name="contextInfo" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="currentEvent" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="endSheet:returnCode:" swt_gen="true">
+			<arg name="sheet" swt_gen="true"></arg>
+			<arg name="returnCode" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="finishLaunching" swt_gen="true" swt_gen_super_msgSend="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="hide:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="hideOtherApplications:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="isActive" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="isRunning" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="keyWindow" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="mainMenu" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="nextEventMatchingMask:untilDate:inMode:dequeue:" swt_gen="true" swt_gen_super_msgSend="true">
+			<arg name="mask" swt_gen="true"></arg>
+			<arg name="expiration" swt_gen="true"></arg>
+			<arg name="mode" swt_gen="true"></arg>
+			<arg name="deqFlag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="orderFrontStandardAboutPanel:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="orderedWindows" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="postEvent:atStart:" swt_gen="true">
+			<arg name="event" swt_gen="true"></arg>
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="run" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="runModalForWindow:" swt_gen="true">
+			<arg name="theWindow" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="sendEvent:" swt_gen="true" swt_gen_super_msgSend="true">
+			<arg name="theEvent" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setApplicationIconImage:" swt_gen="true">
+			<arg name="image" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDelegate:" swt_gen="true">
+			<arg name="anObject" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMainMenu:" swt_gen="true">
+			<arg name="aMenu" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setServicesMenu:" swt_gen="true">
+			<arg name="aMenu" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="sharedApplication" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="stop:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="terminate:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="unhideAllApplications:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="windows" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSArrayController" swt_superclass="NSObjectController">
+	</class>
+	<class name="NSAttributedString" swt_gen="mixed">
+		<method class_method="true" selector="attributedStringWithAttachment:" swt_gen="true">
+			<arg name="attachment" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="attributesAtIndex:longestEffectiveRange:inRange:" swt_gen="true">
+			<arg name="location" swt_gen="true"></arg>
+			<arg name="range" swt_gen="true"></arg>
+			<arg name="rangeLimit" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="doubleClickAtIndex:" swt_gen="true">
+			<arg name="location" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="drawAtPoint:" swt_gen="true">
+			<arg name="point" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="drawInRect:" swt_gen="true">
+			<arg name="rect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="initWithString:attributes:" swt_gen="true">
+			<arg name="str" swt_gen="true"></arg>
+			<arg name="attrs" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSAttributedString"></retval>
+		</method>
+		<method selector="nextWordFromIndex:forward:" swt_gen="true">
+			<arg name="location" swt_gen="true"></arg>
+			<arg name="isForward" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="size" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSBezierPath" swt_gen="mixed">
+		<method selector="addClip" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="appendBezierPath:" swt_gen="true">
+			<arg name="path" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="appendBezierPathWithArcWithCenter:radius:startAngle:endAngle:" swt_gen="true">
+			<arg name="center" swt_gen="true"></arg>
+			<arg name="radius" swt_gen="true"></arg>
+			<arg name="startAngle" swt_gen="true"></arg>
+			<arg name="endAngle" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="appendBezierPathWithArcWithCenter:radius:startAngle:endAngle:clockwise:" swt_gen="true">
+			<arg name="center" swt_gen="true"></arg>
+			<arg name="radius" swt_gen="true"></arg>
+			<arg name="startAngle" swt_gen="true"></arg>
+			<arg name="endAngle" swt_gen="true"></arg>
+			<arg name="clockwise" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="appendBezierPathWithGlyphs:count:inFont:" swt_gen="true">
+			<arg name="glyphs" swt_gen="true"></arg>
+			<arg name="count" swt_gen="true"></arg>
+			<arg name="font" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="appendBezierPathWithOvalInRect:" swt_gen="true">
+			<arg name="rect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="appendBezierPathWithRect:" swt_gen="true">
+			<arg name="rect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="appendBezierPathWithRoundedRect:xRadius:yRadius:" swt_gen="true">
+			<arg name="rect" swt_gen="true"></arg>
+			<arg name="xRadius" swt_gen="true"></arg>
+			<arg name="yRadius" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="bezierPath" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="bezierPathByFlatteningPath" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="bezierPathWithRect:" swt_gen="true">
+			<arg name="rect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="bounds" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="closePath" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="containsPoint:" swt_gen="true">
+			<arg name="point" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="controlPointBounds" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="currentPoint" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="curveToPoint:controlPoint1:controlPoint2:" swt_gen="true">
+			<arg name="endPoint" swt_gen="true"></arg>
+			<arg name="controlPoint1" swt_gen="true"></arg>
+			<arg name="controlPoint2" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="defaultFlatness" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="elementAtIndex:associatedPoints:" swt_gen="true">
+			<arg name="index" swt_gen="true"></arg>
+			<arg name="points" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="elementCount" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="fill" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="fillRect:" swt_gen="true">
+			<arg name="rect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="isEmpty" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="lineToPoint:" swt_gen="true">
+			<arg name="point" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="moveToPoint:" swt_gen="true">
+			<arg name="point" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="removeAllPoints" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setClip" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="setDefaultFlatness:" swt_gen="true">
+			<arg name="flatness" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setLineCapStyle:" swt_gen="true">
+			<arg name="lineCapStyle" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setLineDash:count:phase:" swt_gen="true">
+			<arg name="pattern" swt_gen="true" swt_java_type="float[]" swt_java_type64="double[]"></arg>
+			<arg name="count" swt_gen="true"></arg>
+			<arg name="phase" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setLineJoinStyle:" swt_gen="true">
+			<arg name="lineJoinStyle" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setLineWidth:" swt_gen="true">
+			<arg name="lineWidth" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMiterLimit:" swt_gen="true">
+			<arg name="miterLimit" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setWindingRule:" swt_gen="true">
+			<arg name="windingRule" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="stroke" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="strokeRect:" swt_gen="true">
+			<arg name="rect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="transformUsingAffineTransform:" swt_gen="true">
+			<arg name="transform" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSBitmapImageRep" swt_gen="mixed" swt_superclass="NSImageRep">
+		<method selector="TIFFRepresentation" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="bitmapData" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="bitmapFormat" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="bitsPerPixel" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="bytesPerPlane" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="bytesPerRow" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="colorAtX:y:" swt_gen="true">
+			<arg name="x" swt_gen="true"></arg>
+			<arg name="y" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="getBitmapDataPlanes:" swt_gen="true">
+			<arg name="data" swt_gen="true" swt_java_type="int[]" swt_java_type64="long[]"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="imageRepWithData:" swt_gen="true">
+			<arg name="data" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bitmapFormat:bytesPerRow:bitsPerPixel:" swt_gen="true">
+			<arg name="planes" swt_gen="true"></arg>
+			<arg name="width" swt_gen="true"></arg>
+			<arg name="height" swt_gen="true"></arg>
+			<arg name="bps" swt_gen="true"></arg>
+			<arg name="spp" swt_gen="true"></arg>
+			<arg name="alpha" swt_gen="true"></arg>
+			<arg name="isPlanar" swt_gen="true"></arg>
+			<arg name="colorSpaceName" swt_gen="true"></arg>
+			<arg name="bitmapFormat" swt_gen="true"></arg>
+			<arg name="rBytes" swt_gen="true"></arg>
+			<arg name="pBits" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSBitmapImageRep"></retval>
+		</method>
+		<method selector="initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bytesPerRow:bitsPerPixel:" swt_gen="true">
+			<arg name="planes" swt_gen="true"></arg>
+			<arg name="width" swt_gen="true"></arg>
+			<arg name="height" swt_gen="true"></arg>
+			<arg name="bps" swt_gen="true"></arg>
+			<arg name="spp" swt_gen="true"></arg>
+			<arg name="alpha" swt_gen="true"></arg>
+			<arg name="isPlanar" swt_gen="true"></arg>
+			<arg name="colorSpaceName" swt_gen="true"></arg>
+			<arg name="rBytes" swt_gen="true"></arg>
+			<arg name="pBits" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSBitmapImageRep"></retval>
+		</method>
+		<method selector="initWithFocusedViewRect:" swt_gen="true">
+			<arg name="rect" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSBitmapImageRep"></retval>
+		</method>
+		<method selector="isPlanar" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="numberOfPlanes" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="samplesPerPixel" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSBox" swt_gen="mixed" swt_superclass="NSView">
+		<method selector="borderWidth" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="contentView" swt_gen="true">
+			<retval swt_gen="true" swt_java_type="NSView"></retval>
+		</method>
+		<method selector="contentViewMargins" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setBorderType:" swt_gen="true">
+			<arg name="aType" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setBorderWidth:" swt_gen="true">
+			<arg name="borderWidth" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setBoxType:" swt_gen="true">
+			<arg name="boxType" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setContentView:" swt_gen="true">
+			<arg name="aView" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setContentViewMargins:" swt_gen="true">
+			<arg name="offsetSize" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setFillColor:" swt_gen="true">
+			<arg name="fillColor" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setTitle:" swt_gen="true">
+			<arg name="aString" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setTitleFont:" swt_gen="true">
+			<arg name="fontObj" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setTitlePosition:" swt_gen="true">
+			<arg name="aPosition" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="sizeToFit" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="titleCell" swt_gen="true">
+			<retval swt_gen="true" swt_java_type="NSCell"></retval>
+		</method>
+		<method selector="titleFont" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSBrowser" swt_superclass="NSControl">
+	</class>
+	<class name="NSBrowserCell" swt_gen="mixed" swt_superclass="NSCell">
+		<method selector="highlightColorInView:" swt_gen="true">
+			<arg name="controlView" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setLeaf:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSBundle" swt_gen="mixed">
+		<method class_method="true" selector="loadNibFile:externalNameTable:withZone:" swt_gen="true">
+			<arg name="fileName" swt_gen="true"></arg>
+			<arg name="context" swt_gen="true"></arg>
+			<arg name="zone" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSButton" swt_gen="mixed" swt_superclass="NSControl">
+		<method selector="attributedTitle" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAllowsMixedState:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAttributedTitle:" swt_gen="true">
+			<arg name="aString" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setBezelStyle:" swt_gen="true">
+			<arg name="bezelStyle" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setBordered:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setButtonType:" swt_gen="true">
+			<arg name="aType" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setImage:" swt_gen="true">
+			<arg name="image" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setImagePosition:" swt_gen="true">
+			<arg name="aPosition" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setKeyEquivalent:" swt_gen="true">
+			<arg name="charCode" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setState:" swt_gen="true">
+			<arg name="value" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setTitle:" swt_gen="true">
+			<arg name="aString" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="state" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSButtonCell" swt_gen="mixed" swt_superclass="NSActionCell">
+		<method selector="drawImage:withFrame:inView:" swt_gen="true" swt_gen_custom_callback="true" swt_gen_super_msgSend="true">
+			<arg name="image" swt_gen="true"></arg>
+			<arg name="frame" swt_gen="true"></arg>
+			<arg name="controlView" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setBackgroundColor:" swt_gen="true">
+			<arg name="color" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setButtonType:" swt_gen="true">
+			<arg name="aType" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setImagePosition:" swt_gen="true">
+			<arg name="aPosition" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="title" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSCIImageRep" swt_superclass="NSImageRep">
+	</class>
+	<class name="NSCachedImageRep" swt_superclass="NSImageRep">
+	</class>
+	<class name="NSCell" swt_gen="mixed">
+		<method selector="attributedStringValue" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="cellSize" swt_gen="true" swt_gen_custom_callback="true" swt_gen_super_msgSend="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="cellSizeForBounds:" swt_gen="true">
+			<arg name="aRect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="drawInteriorWithFrame:inView:" swt_gen="true" swt_gen_custom_callback="true" swt_gen_super_msgSend="true">
+			<arg name="cellFrame" swt_gen="true"></arg>
+			<arg name="controlView" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="drawWithExpansionFrame:inView:" swt_gen="true" swt_gen_custom_callback="true">
+			<arg name="cellFrame" swt_gen="true"></arg>
+			<arg name="view" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="drawWithFrame:inView:" swt_gen_custom_callback="true">
+			<arg name="cellFrame"></arg>
+			<arg name="controlView"></arg>
+			<retval></retval>
+		</method>
+		<method selector="drawingRectForBounds:" swt_gen="true">
+			<arg name="theRect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="expansionFrameWithFrame:inView:" swt_gen="true" swt_gen_custom_callback="true" swt_gen_super_msgSend="true">
+			<arg name="cellFrame" swt_gen="true"></arg>
+			<arg name="view" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="font" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="highlightColorWithFrame:inView:" swt_gen="true">
+			<arg name="cellFrame" swt_gen="true"></arg>
+			<arg name="controlView" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="hitTestForEvent:inRect:ofView:" swt_gen="true" swt_gen_custom_callback="true">
+			<arg name="event" swt_gen="true"></arg>
+			<arg name="cellFrame" swt_gen="true"></arg>
+			<arg name="controlView" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="image" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="imageRectForBounds:" swt_gen="true" swt_gen_custom_callback="true">
+			<arg name="theRect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="isEnabled" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="isHighlighted" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="nextState" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAlignment:" swt_gen="true">
+			<arg name="mode" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAllowsMixedState:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAttributedStringValue:" swt_gen="true">
+			<arg name="obj" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setControlSize:" swt_gen="true">
+			<arg name="size" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setEnabled:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setFont:" swt_gen="true">
+			<arg name="fontObj" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setFormatter:" swt_gen="true">
+			<arg name="newFormatter" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setHighlighted:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setImage:" swt_gen="true">
+			<arg name="image" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setLineBreakMode:" swt_gen="true">
+			<arg name="mode" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setObjectValue:" swt_gen="true">
+			<arg name="obj" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setScrollable:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setTitle:" swt_gen="true">
+			<arg name="aString" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setWraps:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="title" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="titleRectForBounds:" swt_gen="true" swt_gen_custom_callback="true" swt_gen_super_msgSend="true">
+			<arg name="theRect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="wraps" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSClipView" swt_gen="mixed" swt_superclass="NSView">
+		<method selector="copiesOnScroll" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="documentCursor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="scrollToPoint:" swt_gen="true">
+			<arg name="newOrigin" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setCopiesOnScroll:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDocumentCursor:" swt_gen="true">
+			<arg name="anObj" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDrawsBackground:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSCollectionView" swt_superclass="NSView">
+	</class>
+	<class name="NSColor" swt_gen="mixed">
+		<method selector="alphaComponent" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="alternateSelectedControlColor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="alternateSelectedControlTextColor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="blackColor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="blueComponent" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="clearColor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="colorUsingColorSpace:" swt_gen="true">
+			<arg name="space" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="colorUsingColorSpaceName:" swt_gen="true">
+			<arg name="colorSpace" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="colorWithDeviceRed:green:blue:alpha:" swt_gen="true">
+			<arg name="red" swt_gen="true"></arg>
+			<arg name="green" swt_gen="true"></arg>
+			<arg name="blue" swt_gen="true"></arg>
+			<arg name="alpha" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="colorWithPatternImage:" swt_gen="true">
+			<arg name="image" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="controlBackgroundColor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="controlDarkShadowColor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="controlHighlightColor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="controlLightHighlightColor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="controlShadowColor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="controlTextColor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="disabledControlTextColor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="getComponents:" swt_gen="true">
+			<arg name="components" swt_gen="true" swt_java_type="float[]" swt_java_type64="double[]"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="greenComponent" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="numberOfComponents" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="redComponent" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="secondarySelectedControlColor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="selectedControlColor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="selectedControlTextColor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="selectedTextBackgroundColor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="selectedTextColor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="set" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setFill" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setStroke" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="textBackgroundColor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="textColor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="windowBackgroundColor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="windowFrameColor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="windowFrameTextColor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSColorPanel" swt_gen="mixed" swt_superclass="NSPanel">
+		<method selector="color" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setColor:" swt_gen="true">
+			<arg name="color" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="sharedColorPanel" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSColorSpace" swt_gen="mixed">
+		<method class_method="true" selector="deviceRGBColorSpace" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSColorWell" swt_superclass="NSControl">
+	</class>
+	<class name="NSComboBox" swt_gen="mixed" swt_superclass="NSTextField">
+		<method selector="addItemWithObjectValue:" swt_gen="true">
+			<arg name="object" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="deselectItemAtIndex:" swt_gen="true">
+			<arg name="index" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="indexOfSelectedItem" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="insertItemWithObjectValue:atIndex:" swt_gen="true">
+			<arg name="object" swt_gen="true"></arg>
+			<arg name="index" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="itemObjectValueAtIndex:" swt_gen="true">
+			<arg name="index" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="numberOfItems" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="numberOfVisibleItems" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="removeAllItems" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="removeItemAtIndex:" swt_gen="true">
+			<arg name="index" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="selectItemAtIndex:" swt_gen="true">
+			<arg name="index" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setNumberOfVisibleItems:" swt_gen="true">
+			<arg name="visibleItems" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSComboBoxCell" swt_gen="mixed" swt_superclass="NSTextFieldCell">
+		<method selector="objectValues" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSControl" swt_gen="mixed" swt_superclass="NSView">
+		<method selector="abortEditing" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="action" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="cell" swt_gen="true">
+			<retval swt_gen="true" swt_java_type="NSCell"></retval>
+		</method>
+		<method class_method="true" selector="cellClass" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="currentEditor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="doubleValue" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="font" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="isEnabled" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="sendAction:to:" swt_gen="true">
+			<arg name="theAction" swt_gen="true"></arg>
+			<arg name="theTarget" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAction:" swt_gen="true">
+			<arg name="aSelector" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAlignment:" swt_gen="true">
+			<arg name="mode" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setCell:" swt_gen="true">
+			<arg name="aCell" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="setCellClass:" swt_gen="true">
+			<arg name="factoryId" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDoubleValue:" swt_gen="true">
+			<arg name="aDouble" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setEnabled:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setFont:" swt_gen="true">
+			<arg name="fontObj" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setFormatter:" swt_gen="true">
+			<arg name="newFormatter" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setStringValue:" swt_gen="true">
+			<arg name="aString" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setTarget:" swt_gen="true">
+			<arg name="anObject" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="sizeToFit" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="stringValue" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="target" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSCursor" swt_gen="mixed">
+		<method class_method="true" selector="IBeamCursor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="arrowCursor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="crosshairCursor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="currentCursor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="initWithImage:hotSpot:" swt_gen="true">
+			<arg name="newImage" swt_gen="true"></arg>
+			<arg name="aPoint" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSCursor"></retval>
+		</method>
+		<method class_method="true" selector="pointingHandCursor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="pop" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="push" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="resizeDownCursor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="resizeLeftCursor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="resizeLeftRightCursor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="resizeRightCursor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="resizeUpCursor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="resizeUpDownCursor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="set" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="setHiddenUntilMouseMoves:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setOnMouseEntered:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSDatePicker" swt_gen="mixed" swt_superclass="NSControl">
+		<method selector="dateValue" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setBackgroundColor:" swt_gen="true">
+			<arg name="color" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDatePickerElements:" swt_gen="true">
+			<arg name="elementFlags" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDatePickerStyle:" swt_gen="true">
+			<arg name="newStyle" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDateValue:" swt_gen="true">
+			<arg name="newStartDate" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDrawsBackground:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setTextColor:" swt_gen="true">
+			<arg name="color" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSDatePickerCell" swt_superclass="NSActionCell">
+	</class>
+	<class name="NSDictionaryController" swt_superclass="NSArrayController">
+	</class>
+	<class name="NSDrawer" swt_superclass="NSResponder">
+	</class>
+	<class name="NSEPSImageRep" swt_superclass="NSImageRep">
+	</class>
+	<class name="NSEvent" swt_gen="mixed">
+		<method selector="CGEvent" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="buttonNumber" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="characters" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="charactersIgnoringModifiers" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="clickCount" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="deltaX" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="deltaY" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="enterExitEventWithType:location:modifierFlags:timestamp:windowNumber:context:eventNumber:trackingNumber:userData:" swt_gen="true">
+			<arg name="type" swt_gen="true"></arg>
+			<arg name="location" swt_gen="true"></arg>
+			<arg name="flags" swt_gen="true"></arg>
+			<arg name="time" swt_gen="true"></arg>
+			<arg name="wNum" swt_gen="true"></arg>
+			<arg name="context" swt_gen="true"></arg>
+			<arg name="eNum" swt_gen="true"></arg>
+			<arg name="tNum" swt_gen="true"></arg>
+			<arg name="data" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="keyCode" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="locationInWindow" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="modifierFlags" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="mouseLocation" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="otherEventWithType:location:modifierFlags:timestamp:windowNumber:context:subtype:data1:data2:" swt_gen="true">
+			<arg name="type" swt_gen="true"></arg>
+			<arg name="location" swt_gen="true"></arg>
+			<arg name="flags" swt_gen="true"></arg>
+			<arg name="time" swt_gen="true"></arg>
+			<arg name="wNum" swt_gen="true"></arg>
+			<arg name="context" swt_gen="true"></arg>
+			<arg name="subtype" swt_gen="true"></arg>
+			<arg name="d1" swt_gen="true"></arg>
+			<arg name="d2" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="timestamp" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="type" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="window" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSFileWrapper" swt_gen="mixed">
+		<method selector="setIcon:" swt_gen="true">
+			<arg name="icon" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSFont" swt_gen="mixed">
+		<method selector="ascender" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="controlContentFontOfSize:" swt_gen="true">
+			<arg name="fontSize" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="descender" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="familyName" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="fontName" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="fontWithName:size:" swt_gen="true">
+			<arg name="fontName" swt_gen="true"></arg>
+			<arg name="fontSize" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="leading" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="pointSize" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="smallSystemFontSize" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="systemFontOfSize:" swt_gen="true">
+			<arg name="fontSize" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="systemFontSize" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="systemFontSizeForControlSize:" swt_gen="true">
+			<arg name="controlSize" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSFontManager" swt_gen="mixed">
+		<method selector="availableFontFamilies" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="availableFonts" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="availableMembersOfFontFamily:" swt_gen="true">
+			<arg name="fam" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="convertFont:toHaveTrait:" swt_gen="true">
+			<arg name="fontObj" swt_gen="true"></arg>
+			<arg name="trait" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="fontWithFamily:traits:weight:size:" swt_gen="true">
+			<arg name="family" swt_gen="true"></arg>
+			<arg name="traits" swt_gen="true"></arg>
+			<arg name="weight" swt_gen="true"></arg>
+			<arg name="size" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="sharedFontManager" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="traitsOfFont:" swt_gen="true">
+			<arg name="fontObj" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="weightOfFont:" swt_gen="true">
+			<arg name="fontObj" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSFontPanel" swt_gen="mixed" swt_superclass="NSPanel">
+		<method selector="panelConvertFont:" swt_gen="true">
+			<arg name="fontObj" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setPanelFont:isMultiple:" swt_gen="true">
+			<arg name="fontObj" swt_gen="true"></arg>
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="sharedFontPanel" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSForm" swt_superclass="NSMatrix">
+	</class>
+	<class name="NSFormCell" swt_superclass="NSActionCell">
+	</class>
+	<class name="NSGradient" swt_gen="mixed">
+		<method selector="drawFromPoint:toPoint:options:" swt_gen="true">
+			<arg name="startingPoint" swt_gen="true"></arg>
+			<arg name="endingPoint" swt_gen="true"></arg>
+			<arg name="options" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="drawInRect:angle:" swt_gen="true">
+			<arg name="rect" swt_gen="true"></arg>
+			<arg name="angle" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="initWithStartingColor:endingColor:" swt_gen="true">
+			<arg name="startingColor" swt_gen="true"></arg>
+			<arg name="endingColor" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSGradient"></retval>
+		</method>
+	</class>
+	<class name="NSGraphicsContext" swt_gen="mixed">
+		<method class_method="true" selector="currentContext" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="flushGraphics" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="graphicsContextWithBitmapImageRep:" swt_gen="true">
+			<arg name="bitmapRep" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="graphicsContextWithGraphicsPort:flipped:" swt_gen="true">
+			<arg name="graphicsPort" swt_gen="true"></arg>
+			<arg name="initialFlippedState" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="graphicsContextWithWindow:" swt_gen="true">
+			<arg name="window" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="graphicsPort" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="imageInterpolation" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="isDrawingToScreen" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="restoreGraphicsState" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="restoreGraphicsState" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="saveGraphicsState" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="saveGraphicsState" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setCompositingOperation:" swt_gen="true">
+			<arg name="operation" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="setCurrentContext:" swt_gen="true">
+			<arg name="context" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setImageInterpolation:" swt_gen="true">
+			<arg name="interpolation" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setPatternPhase:" swt_gen="true">
+			<arg name="phase" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setShouldAntialias:" swt_gen="true">
+			<arg name="antialias" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="shouldAntialias" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSImage" swt_gen="mixed">
+		<method selector="TIFFRepresentation" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="addRepresentation:" swt_gen="true">
+			<arg name="imageRep" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="bestRepresentationForDevice:" swt_gen="true">
+			<arg name="deviceDescription" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="drawAtPoint:fromRect:operation:fraction:" swt_gen="true">
+			<arg name="point" swt_gen="true"></arg>
+			<arg name="fromRect" swt_gen="true"></arg>
+			<arg name="op" swt_gen="true"></arg>
+			<arg name="delta" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="drawInRect:fromRect:operation:fraction:" swt_gen="true">
+			<arg name="rect" swt_gen="true"></arg>
+			<arg name="fromRect" swt_gen="true"></arg>
+			<arg name="op" swt_gen="true"></arg>
+			<arg name="delta" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="imageNamed:" swt_gen="true">
+			<arg name="name" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSImage"></retval>
+		</method>
+		<method selector="initByReferencingFile:" swt_gen="true">
+			<arg name="fileName" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSImage"></retval>
+		</method>
+		<method selector="initWithContentsOfFile:" swt_gen="true">
+			<arg name="fileName" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSImage"></retval>
+		</method>
+		<method selector="initWithData:" swt_gen="true">
+			<arg name="data" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="initWithSize:" swt_gen="true">
+			<arg name="aSize" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSImage"></retval>
+		</method>
+		<method selector="lockFocus" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="removeRepresentation:" swt_gen="true">
+			<arg name="imageRep" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="representations" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setCacheMode:" swt_gen="true">
+			<arg name="mode" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setSize:" swt_gen="true">
+			<arg name="aSize" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="size" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="unlockFocus" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSImageCell" swt_superclass="NSCell">
+	</class>
+	<class name="NSImageRep" swt_gen="mixed">
+		<method selector="bitsPerSample" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="colorSpaceName" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="drawInRect:" swt_gen="true">
+			<arg name="rect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="hasAlpha" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="pixelsHigh" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="pixelsWide" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAlpha:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSImageView" swt_gen="mixed" swt_superclass="NSControl">
+		<method selector="image" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setImage:" swt_gen="true">
+			<arg name="newImage" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setImageAlignment:" swt_gen="true">
+			<arg name="newAlign" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setImageScaling:" swt_gen="true">
+			<arg name="newScaling" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSInputManager" swt_gen="mixed">
+		<method class_method="true" selector="currentInputManager" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="handleMouseEvent:" swt_gen="true">
+			<arg name="theMouseEvent" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="wantsToHandleMouseEvents" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSLayoutManager" swt_gen="mixed">
+		<method selector="addTemporaryAttribute:value:forCharacterRange:" swt_gen="true">
+			<arg name="attrName" swt_gen="true"></arg>
+			<arg name="value" swt_gen="true"></arg>
+			<arg name="charRange" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="addTextContainer:" swt_gen="true">
+			<arg name="container" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="boundingRectForGlyphRange:inTextContainer:" swt_gen="true">
+			<arg name="glyphRange" swt_gen="true"></arg>
+			<arg name="container" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="characterIndexForGlyphAtIndex:" swt_gen="true">
+			<arg name="glyphIndex" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="defaultBaselineOffsetForFont:" swt_gen="true">
+			<arg name="theFont" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="defaultLineHeightForFont:" swt_gen="true">
+			<arg name="theFont" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="drawBackgroundForGlyphRange:atPoint:" swt_gen="true">
+			<arg name="glyphsToShow" swt_gen="true"></arg>
+			<arg name="origin" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="drawGlyphsForGlyphRange:atPoint:" swt_gen="true">
+			<arg name="glyphsToShow" swt_gen="true"></arg>
+			<arg name="origin" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="getGlyphs:range:" swt_gen="true">
+			<arg name="glyphArray" swt_gen="true"></arg>
+			<arg name="glyphRange" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="getGlyphsInRange:glyphs:characterIndexes:glyphInscriptions:elasticBits:bidiLevels:" swt_gen="true">
+			<arg name="glyphRange" swt_gen="true"></arg>
+			<arg name="glyphBuffer" swt_gen="true"></arg>
+			<arg name="charIndexBuffer" swt_gen="true"></arg>
+			<arg name="inscribeBuffer" swt_gen="true"></arg>
+			<arg name="elasticBuffer" swt_gen="true"></arg>
+			<arg name="bidiLevelBuffer" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="glyphIndexForCharacterAtIndex:" swt_gen="true">
+			<arg name="charIndex" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="glyphIndexForPoint:inTextContainer:fractionOfDistanceThroughGlyph:" swt_gen="true">
+			<arg name="point" swt_gen="true"></arg>
+			<arg name="container" swt_gen="true"></arg>
+			<arg name="partialFraction" swt_gen="true" swt_java_type="float[]" swt_java_type64="double[]"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="glyphRangeForCharacterRange:actualCharacterRange:" swt_gen="true">
+			<arg name="charRange" swt_gen="true"></arg>
+			<arg name="actualCharRange" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="glyphRangeForTextContainer:" swt_gen="true">
+			<arg name="container" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="lineFragmentUsedRectForGlyphAtIndex:effectiveRange:" swt_gen="true">
+			<arg name="glyphIndex" swt_gen="true"></arg>
+			<arg name="effectiveGlyphRange" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="lineFragmentUsedRectForGlyphAtIndex:effectiveRange:withoutAdditionalLayout:" swt_gen="true">
+			<arg name="glyphIndex" swt_gen="true"></arg>
+			<arg name="effectiveGlyphRange" swt_gen="true"></arg>
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="locationForGlyphAtIndex:" swt_gen="true">
+			<arg name="glyphIndex" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="numberOfGlyphs" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="rectArrayForCharacterRange:withinSelectedCharacterRange:inTextContainer:rectCount:" swt_gen="true">
+			<arg name="charRange" swt_gen="true"></arg>
+			<arg name="selCharRange" swt_gen="true"></arg>
+			<arg name="container" swt_gen="true"></arg>
+			<arg name="rectCount" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="removeTemporaryAttribute:forCharacterRange:" swt_gen="true">
+			<arg name="attrName" swt_gen="true"></arg>
+			<arg name="charRange" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setBackgroundLayoutEnabled:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setLineFragmentRect:forGlyphRange:usedRect:" swt_gen="true">
+			<arg name="fragmentRect" swt_gen="true"></arg>
+			<arg name="glyphRange" swt_gen="true"></arg>
+			<arg name="usedRect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setTextStorage:" swt_gen="true">
+			<arg name="textStorage" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="typesetter" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="usedRectForTextContainer:" swt_gen="true">
+			<arg name="container" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSLevelIndicator" swt_superclass="NSControl">
+	</class>
+	<class name="NSLevelIndicatorCell" swt_superclass="NSActionCell">
+	</class>
+	<class name="NSMatrix" swt_superclass="NSControl">
+	</class>
+	<class name="NSMenu" swt_gen="mixed">
+		<method selector="addItem:" swt_gen="true">
+			<arg name="newItem" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="addItemWithTitle:action:keyEquivalent:" swt_gen="true">
+			<arg name="aString" swt_gen="true"></arg>
+			<arg name="aSelector" swt_gen="true"></arg>
+			<arg name="charCode" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="cancelTracking" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="indexOfItemWithTarget:andAction:" swt_gen="true">
+			<arg name="target" swt_gen="true"></arg>
+			<arg name="actionSelector" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="initWithTitle:" swt_gen="true">
+			<arg name="aTitle" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSMenu"></retval>
+		</method>
+		<method selector="insertItem:atIndex:" swt_gen="true">
+			<arg name="newItem" swt_gen="true"></arg>
+			<arg name="index" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="itemArray" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="itemAtIndex:" swt_gen="true">
+			<arg name="index" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="numberOfItems" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="popUpContextMenu:withEvent:forView:" swt_gen="true">
+			<arg name="menu" swt_gen="true"></arg>
+			<arg name="event" swt_gen="true"></arg>
+			<arg name="view" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="removeItem:" swt_gen="true">
+			<arg name="item" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="removeItemAtIndex:" swt_gen="true">
+			<arg name="index" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAutoenablesItems:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDelegate:" swt_gen="true">
+			<arg name="anObject" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setSubmenu:forItem:" swt_gen="true">
+			<arg name="aMenu" swt_gen="true"></arg>
+			<arg name="anItem" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setTitle:" swt_gen="true">
+			<arg name="aString" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSMenuItem" swt_gen="mixed">
+		<method selector="initWithTitle:action:keyEquivalent:" swt_gen="true">
+			<arg name="aString" swt_gen="true"></arg>
+			<arg name="aSelector" swt_gen="true"></arg>
+			<arg name="charCode" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSMenuItem"></retval>
+		</method>
+		<method selector="isHidden" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="keyEquivalent" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="keyEquivalentModifierMask" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="separatorItem" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAction:" swt_gen="true">
+			<arg name="aSelector" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setEnabled:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setHidden:" swt_gen="true">
+			<arg name="hidden" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setImage:" swt_gen="true">
+			<arg name="menuImage" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setKeyEquivalent:" swt_gen="true">
+			<arg name="aKeyEquivalent" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setKeyEquivalentModifierMask:" swt_gen="true">
+			<arg name="mask" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMenu:" swt_gen="true">
+			<arg name="menu" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setState:" swt_gen="true">
+			<arg name="state" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setSubmenu:" swt_gen="true">
+			<arg name="submenu" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setTarget:" swt_gen="true">
+			<arg name="anObject" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setTitle:" swt_gen="true">
+			<arg name="aString" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="state" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="submenu" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="title" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSMenuItemCell" swt_superclass="NSButtonCell">
+	</class>
+	<class name="NSMutableAttributedString" swt_gen="mixed" swt_superclass="NSAttributedString">
+		<method selector="appendAttributedString:" swt_gen="true">
+			<arg name="attrString" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="mutableString" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="replaceCharactersInRange:withString:" swt_gen="true">
+			<arg name="range" swt_gen="true"></arg>
+			<arg name="str" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSMutableParagraphStyle" swt_gen="mixed" swt_superclass="NSParagraphStyle">
+		<method selector="addTabStop:" swt_gen="true">
+			<arg name="anObject" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAlignment:" swt_gen="true">
+			<arg name="alignment" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDefaultTabInterval:" swt_gen="true">
+			<arg name="aFloat" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setFirstLineHeadIndent:" swt_gen="true">
+			<arg name="aFloat" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setLineBreakMode:" swt_gen="true">
+			<arg name="mode" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setLineSpacing:" swt_gen="true">
+			<arg name="aFloat" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setTabStops:" swt_gen="true">
+			<arg name="array" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSNibOutletConnector" swt_superclass="NSNibConnector">
+	</class>
+	<class name="NSObject" swt_gen="mixed">
+		<method selector="accessibilityAttributeValue:forParameter:" swt_gen="true" swt_gen_super_msgSend="true">
+			<arg name="attribute" swt_gen="true"></arg>
+			<arg name="parameter" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="accessibilitySetOverrideValue:forAttribute:" swt_gen="true">
+			<arg name="value" swt_gen="true"></arg>
+			<arg name="attribute" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="draggedImage:endedAt:operation:" swt_gen="true" swt_gen_super_msgSend="true">
+			<arg name="image" swt_gen="true"></arg>
+			<arg name="screenPoint" swt_gen="true"></arg>
+			<arg name="operation" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="draggingDestinationWindow" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="draggingLocation" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="draggingPasteboard" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="draggingSourceOperationMask" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSObjectController" swt_superclass="NSController">
+	</class>
+	<class name="NSOpenGLContext" swt_gen="mixed">
+		<method class_method="true" selector="clearCurrentContext" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="clearDrawable" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="currentContext" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="flushBuffer" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="initWithFormat:shareContext:" swt_gen="true">
+			<arg name="format" swt_gen="true"></arg>
+			<arg name="share" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSOpenGLContext"></retval>
+		</method>
+		<method selector="makeCurrentContext" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setView:" swt_gen="true">
+			<arg name="view" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="update" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="view" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSOpenGLPixelFormat" swt_gen="mixed">
+		<method selector="getValues:forAttribute:forVirtualScreen:" swt_gen="true">
+			<arg name="vals" swt_gen="true" swt_java_type="int[]" swt_java_type64="long[]"></arg>
+			<arg name="attrib" swt_gen="true"></arg>
+			<arg name="screen" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="initWithAttributes:" swt_gen="true">
+			<arg name="attribs" swt_gen="true" swt_java_type="int[]"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSOpenGLView" swt_superclass="NSView">
+	</class>
+	<class name="NSOpenPanel" swt_gen="mixed" swt_superclass="NSSavePanel">
+		<method selector="filenames" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="openPanel" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAllowsMultipleSelection:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setCanChooseDirectories:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setCanChooseFiles:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSOutlineView" swt_gen="mixed" swt_superclass="NSTableView">
+		<method selector="collapseItem:" swt_gen="true">
+			<arg name="item" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="collapseItem:collapseChildren:" swt_gen="true">
+			<arg name="item" swt_gen="true"></arg>
+			<arg name="collapseChildren" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="expandItem:" swt_gen="true">
+			<arg name="item" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="expandItem:expandChildren:" swt_gen="true" swt_gen_super_msgSend="true">
+			<arg name="item" swt_gen="true"></arg>
+			<arg name="expandChildren" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="frameOfOutlineCellAtRow:" swt_gen="true">
+			<arg name="row" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="indentationPerLevel" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="isItemExpanded:" swt_gen="true">
+			<arg name="item" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="itemAtRow:" swt_gen="true">
+			<arg name="row" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="levelForItem:" swt_gen="true">
+			<arg name="item" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="outlineTableColumn" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="reloadItem:reloadChildren:" swt_gen="true">
+			<arg name="item" swt_gen="true"></arg>
+			<arg name="reloadChildren" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="rowForItem:" swt_gen="true">
+			<arg name="item" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAutoresizesOutlineColumn:" swt_gen="true">
+			<arg name="resize" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAutosaveExpandedItems:" swt_gen="true">
+			<arg name="save" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDropItem:dropChildIndex:" swt_gen="true">
+			<arg name="item" swt_gen="true"></arg>
+			<arg name="index" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setOutlineTableColumn:" swt_gen="true">
+			<arg name="outlineTableColumn" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSPDFImageRep" swt_superclass="NSImageRep">
+	</class>
+	<class name="NSPICTImageRep" swt_superclass="NSImageRep">
+	</class>
+	<class name="NSPanel" swt_gen="mixed" swt_superclass="NSWindow">
+		<method selector="setWorksWhenModal:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="worksWhenModal" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSParagraphStyle" swt_gen="mixed">
+		<method selector="alignment" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="tabStops" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSPasteboard" swt_gen="mixed">
+		<method selector="addTypes:owner:" swt_gen="true">
+			<arg name="newTypes" swt_gen="true"></arg>
+			<arg name="newOwner" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="availableTypeFromArray:" swt_gen="true">
+			<arg name="types" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="dataForType:" swt_gen="true">
+			<arg name="dataType" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="declareTypes:owner:" swt_gen="true">
+			<arg name="newTypes" swt_gen="true"></arg>
+			<arg name="newOwner" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="generalPasteboard" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="pasteboardWithName:" swt_gen="true">
+			<arg name="name" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="propertyListForType:" swt_gen="true">
+			<arg name="dataType" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setData:forType:" swt_gen="true">
+			<arg name="data" swt_gen="true"></arg>
+			<arg name="dataType" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setPropertyList:forType:" swt_gen="true">
+			<arg name="plist" swt_gen="true"></arg>
+			<arg name="dataType" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setString:forType:" swt_gen="true">
+			<arg name="string" swt_gen="true"></arg>
+			<arg name="dataType" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="stringForType:" swt_gen="true">
+			<arg name="dataType" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="types" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSPathCell" swt_superclass="NSActionCell">
+	</class>
+	<class name="NSPathComponentCell" swt_superclass="NSTextFieldCell">
+	</class>
+	<class name="NSPathControl" swt_superclass="NSControl">
+	</class>
+	<class name="NSPersistentDocument" swt_superclass="NSDocument">
+	</class>
+	<class name="NSPopUpButton" swt_gen="mixed" swt_superclass="NSButton">
+		<method selector="indexOfSelectedItem" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="initWithFrame:pullsDown:" swt_gen="true">
+			<arg name="buttonFrame" swt_gen="true"></arg>
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSPopUpButton"></retval>
+		</method>
+		<method selector="itemAtIndex:" swt_gen="true">
+			<arg name="index" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="itemTitleAtIndex:" swt_gen="true">
+			<arg name="index" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="menu" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="numberOfItems" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="removeAllItems" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="removeItemAtIndex:" swt_gen="true">
+			<arg name="index" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="selectItem:" swt_gen="true">
+			<arg name="item" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="selectItemAtIndex:" swt_gen="true">
+			<arg name="index" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAutoenablesItems:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setPullsDown:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="titleOfSelectedItem" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSPopUpButtonCell" swt_superclass="NSMenuItemCell">
+	</class>
+	<class name="NSPredicateEditor" swt_superclass="NSRuleEditor">
+	</class>
+	<class name="NSPrintInfo" swt_gen="mixed">
+		<method class_method="true" selector="defaultPrinter" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="dictionary" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="imageablePageBounds" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="initWithDictionary:" swt_gen="true">
+			<arg name="attributes" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSPrintInfo"></retval>
+		</method>
+		<method selector="jobDisposition" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="orientation" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="paperSize" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="printer" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setJobDisposition:" swt_gen="true">
+			<arg name="disposition" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setOrientation:" swt_gen="true">
+			<arg name="orientation" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setPrinter:" swt_gen="true">
+			<arg name="printer" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setUpPrintOperationDefaultValues" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="sharedPrintInfo" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSPrintOperation" swt_gen="mixed">
+		<method selector="cleanUpOperation" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="context" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="createContext" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="deliverResult" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="destroyContext" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="printOperationWithView:printInfo:" swt_gen="true">
+			<arg name="view" swt_gen="true"></arg>
+			<arg name="printInfo" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="runOperation" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="setCurrentOperation:" swt_gen="true">
+			<arg name="operation" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setJobTitle:" swt_gen="true">
+			<arg name="jobTitle" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setShowsPrintPanel:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setShowsProgressPanel:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSPrintPanel" swt_gen="mixed">
+		<method selector="beginSheetWithPrintInfo:modalForWindow:delegate:didEndSelector:contextInfo:" swt_gen="true">
+			<arg name="printInfo" swt_gen="true"></arg>
+			<arg name="docWindow" swt_gen="true"></arg>
+			<arg name="delegate" swt_gen="true"></arg>
+			<arg name="didEndSelector" swt_gen="true"></arg>
+			<arg name="contextInfo" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="options" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="printPanel" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="runModalWithPrintInfo:" swt_gen="true">
+			<arg name="printInfo" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setOptions:" swt_gen="true">
+			<arg name="options" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSPrinter" swt_gen="mixed">
+		<method selector="name" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="printerNames" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="printerWithName:" swt_gen="true">
+			<arg name="name" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSProgressIndicator" swt_gen="mixed" swt_superclass="NSView">
+		<method selector="controlSize" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="doubleValue" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="maxValue" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="minValue" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setControlSize:" swt_gen="true">
+			<arg name="size" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDoubleValue:" swt_gen="true">
+			<arg name="doubleValue" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setIndeterminate:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMaxValue:" swt_gen="true">
+			<arg name="newMaximum" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMinValue:" swt_gen="true">
+			<arg name="newMinimum" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setUsesThreadedAnimation:" swt_gen="true">
+			<arg name="threadedAnimation" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="sizeToFit" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="startAnimation:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="stopAnimation:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSResponder" swt_gen="mixed">
+		<method selector="acceptsFirstResponder" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="becomeFirstResponder" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="cursorUpdate:" swt_gen="true">
+			<arg name="event" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="doCommandBySelector:" swt_gen="true">
+			<arg name="aSelector" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="flagsChanged:" swt_gen="true">
+			<arg name="theEvent" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="helpRequested:" swt_gen="true">
+			<arg name="eventPtr" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="insertText:" swt_gen="true">
+			<arg name="insertString" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="interpretKeyEvents:" swt_gen="true">
+			<arg name="eventArray" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="keyDown:" swt_gen="true">
+			<arg name="theEvent" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="keyUp:" swt_gen="true">
+			<arg name="theEvent" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="mouseDown:" swt_gen="true" swt_gen_super_msgSend="true">
+			<arg name="theEvent" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="mouseDragged:" swt_gen="true">
+			<arg name="theEvent" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="mouseEntered:" swt_gen="true">
+			<arg name="theEvent" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="mouseExited:" swt_gen="true">
+			<arg name="theEvent" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="mouseMoved:" swt_gen="true">
+			<arg name="theEvent" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="mouseUp:" swt_gen="true">
+			<arg name="theEvent" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="moveToBeginningOfParagraph:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="moveToEndOfParagraph:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="moveUp:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="noResponderFor:" swt_gen="true">
+			<arg name="eventSelector" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="otherMouseDown:" swt_gen="true">
+			<arg name="theEvent" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="otherMouseDragged:" swt_gen="true">
+			<arg name="theEvent" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="otherMouseUp:" swt_gen="true">
+			<arg name="theEvent" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="pageDown:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="pageUp:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="resignFirstResponder" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="rightMouseDown:" swt_gen="true">
+			<arg name="theEvent" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="rightMouseDragged:" swt_gen="true">
+			<arg name="theEvent" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="rightMouseUp:" swt_gen="true">
+			<arg name="theEvent" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="scrollWheel:" swt_gen="true">
+			<arg name="theEvent" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSRuleEditor" swt_superclass="NSControl">
+	</class>
+	<class name="NSRulerView" swt_superclass="NSView">
+	</class>
+	<class name="NSSavePanel" swt_gen="mixed" swt_superclass="NSPanel">
+		<method selector="filename" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="runModal" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="runModalForDirectory:file:" swt_gen="true">
+			<arg name="path" swt_gen="true"></arg>
+			<arg name="name" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="savePanel" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAccessoryView:" swt_gen="true">
+			<arg name="view" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setCanCreateDirectories:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDirectory:" swt_gen="true">
+			<arg name="path" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMessage:" swt_gen="true">
+			<arg name="message" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setTitle:" swt_gen="true">
+			<arg name="title" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="validateVisibleColumns" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSScreen" swt_gen="mixed">
+		<method selector="depth" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="deviceDescription" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="frame" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="mainScreen" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="screens" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="visibleFrame" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSScrollView" swt_gen="mixed" swt_superclass="NSView">
+		<method selector="contentSize" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="contentSizeForFrameSize:hasHorizontalScroller:hasVerticalScroller:borderType:" swt_gen="true">
+			<arg name="fSize" swt_gen="true"></arg>
+			<arg name="hFlag" swt_gen="true"></arg>
+			<arg name="vFlag" swt_gen="true"></arg>
+			<arg name="aType" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="contentView" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="documentView" swt_gen="true">
+			<retval swt_gen="true" swt_java_type="NSView"></retval>
+		</method>
+		<method selector="documentVisibleRect" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="frameSizeForContentSize:hasHorizontalScroller:hasVerticalScroller:borderType:" swt_gen="true">
+			<arg name="cSize" swt_gen="true"></arg>
+			<arg name="hFlag" swt_gen="true"></arg>
+			<arg name="vFlag" swt_gen="true"></arg>
+			<arg name="aType" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="reflectScrolledClipView:" swt_gen="true">
+			<arg name="cView" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAutohidesScrollers:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setBorderType:" swt_gen="true">
+			<arg name="aType" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDocumentView:" swt_gen="true">
+			<arg name="aView" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDrawsBackground:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setHasHorizontalScroller:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setHasVerticalScroller:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setHorizontalScroller:" swt_gen="true">
+			<arg name="anObject" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setVerticalScroller:" swt_gen="true">
+			<arg name="anObject" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSScroller" swt_gen="mixed" swt_superclass="NSControl">
+		<method selector="controlSize" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="hitPart" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="scrollerWidth" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="scrollerWidthForControlSize:" swt_gen="true">
+			<arg name="controlSize" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setControlSize:" swt_gen="true">
+			<arg name="controlSize" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setFloatValue:knobProportion:" swt_gen="true">
+			<arg name="aFloat" swt_gen="true"></arg>
+			<arg name="proportion" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSSearchField" swt_gen="mixed" swt_superclass="NSTextField">
+		<method selector="recentSearches" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSSearchFieldCell" swt_gen="mixed" swt_superclass="NSTextFieldCell">
+		<method selector="cancelButtonCell" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="searchButtonCell" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="searchTextRectForBounds:" swt_gen="true">
+			<arg name="rect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setCancelButtonCell:" swt_gen="true">
+			<arg name="cell" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setSearchButtonCell:" swt_gen="true">
+			<arg name="cell" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSSecureTextFieldCell" swt_superclass="NSTextFieldCell">
+	</class>
+	<class name="NSSegmentedCell" swt_gen="mixed" swt_superclass="NSActionCell">
+		<method selector="setEnabled:forSegment:" swt_gen="true">
+			<arg name="enabled" swt_gen="true"></arg>
+			<arg name="segment" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setImage:forSegment:" swt_gen="true">
+			<arg name="image" swt_gen="true"></arg>
+			<arg name="segment" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setLabel:forSegment:" swt_gen="true">
+			<arg name="label" swt_gen="true"></arg>
+			<arg name="segment" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMenu:forSegment:" swt_gen="true">
+			<arg name="menu" swt_gen="true"></arg>
+			<arg name="segment" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setSegmentCount:" swt_gen="true">
+			<arg name="count" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setSegmentStyle:" swt_gen="true">
+			<arg name="segmentStyle" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setSelected:forSegment:" swt_gen="true">
+			<arg name="selected" swt_gen="true"></arg>
+			<arg name="segment" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setSelectedSegment:" swt_gen="true">
+			<arg name="selectedSegment" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setTag:forSegment:" swt_gen="true">
+			<arg name="tag" swt_gen="true"></arg>
+			<arg name="segment" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setToolTip:forSegment:" swt_gen="true">
+			<arg name="toolTip" swt_gen="true"></arg>
+			<arg name="segment" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setTrackingMode:" swt_gen="true">
+			<arg name="trackingMode" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setWidth:forSegment:" swt_gen="true">
+			<arg name="width" swt_gen="true"></arg>
+			<arg name="segment" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSSegmentedControl" swt_superclass="NSControl">
+	</class>
+	<class name="NSSlider" swt_gen="mixed" swt_superclass="NSControl">
+		<method selector="knobThickness" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="maxValue" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="minValue" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMaxValue:" swt_gen="true">
+			<arg name="aDouble" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMinValue:" swt_gen="true">
+			<arg name="aDouble" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSSliderCell" swt_superclass="NSActionCell">
+	</class>
+	<class name="NSSplitView" swt_superclass="NSView">
+	</class>
+	<class name="NSStatusBar" swt_gen="mixed">
+		<method selector="removeStatusItem:" swt_gen="true">
+			<arg name="item" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="statusItemWithLength:" swt_gen="true">
+			<arg name="length" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="systemStatusBar" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSStatusItem" swt_gen="mixed">
+		<method selector="drawStatusBarBackgroundInRect:withHighlight:" swt_gen="true">
+			<arg name="rect" swt_gen="true"></arg>
+			<arg name="highlight" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="popUpStatusItemMenu:" swt_gen="true">
+			<arg name="menu" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setHighlightMode:" swt_gen="true">
+			<arg name="highlightMode" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setLength:" swt_gen="true">
+			<arg name="length" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setView:" swt_gen="true">
+			<arg name="view" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSStepper" swt_gen="mixed" swt_superclass="NSControl">
+		<method selector="increment" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="maxValue" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="minValue" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setIncrement:" swt_gen="true">
+			<arg name="increment" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMaxValue:" swt_gen="true">
+			<arg name="maxValue" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMinValue:" swt_gen="true">
+			<arg name="minValue" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setValueWraps:" swt_gen="true">
+			<arg name="valueWraps" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSStepperCell" swt_superclass="NSActionCell">
+	</class>
+	<class name="NSTabView" swt_gen="mixed" swt_superclass="NSView">
+		<method selector="addTabViewItem:" swt_gen="true">
+			<arg name="tabViewItem" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="contentRect" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="insertTabViewItem:atIndex:" swt_gen="true">
+			<arg name="tabViewItem" swt_gen="true"></arg>
+			<arg name="index" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="minimumSize" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="removeTabViewItem:" swt_gen="true">
+			<arg name="tabViewItem" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="selectTabViewItemAtIndex:" swt_gen="true">
+			<arg name="index" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="selectedTabViewItem" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setControlSize:" swt_gen="true">
+			<arg name="controlSize" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDelegate:" swt_gen="true">
+			<arg name="anObject" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setFont:" swt_gen="true">
+			<arg name="font" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setTabViewType:" swt_gen="true">
+			<arg name="tabViewType" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="tabViewItemAtPoint:" swt_gen="true">
+			<arg name="point" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSTabViewItem" swt_gen="mixed">
+		<method selector="initWithIdentifier:" swt_gen="true">
+			<arg name="identifier" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setLabel:" swt_gen="true">
+			<arg name="label" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setView:" swt_gen="true">
+			<arg name="view" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSTableColumn" swt_gen="mixed">
+		<method selector="dataCell" swt_gen="true">
+			<retval swt_gen="true" swt_java_type="NSCell"></retval>
+		</method>
+		<method selector="headerCell" swt_gen="true">
+			<retval swt_gen="true" swt_java_type="NSTableHeaderCell"></retval>
+		</method>
+		<method selector="initWithIdentifier:" swt_gen="true">
+			<arg name="identifier" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSTableColumn"></retval>
+		</method>
+		<method selector="resizingMask" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDataCell:" swt_gen="true">
+			<arg name="cell" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setEditable:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setHeaderCell:" swt_gen="true">
+			<arg name="cell" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setIdentifier:" swt_gen="true">
+			<arg name="identifier" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMinWidth:" swt_gen="true">
+			<arg name="minWidth" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setResizingMask:" swt_gen="true">
+			<arg name="resizingMask" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setWidth:" swt_gen="true">
+			<arg name="width" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="width" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSTableHeaderCell" swt_gen="true" swt_superclass="NSTextFieldCell">
+		<method selector="drawSortIndicatorWithFrame:inView:ascending:priority:" swt_gen="true">
+			<arg name="cellFrame" swt_gen="true"></arg>
+			<arg name="controlView" swt_gen="true"></arg>
+			<arg name="ascending" swt_gen="true"></arg>
+			<arg name="priority" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="sortIndicatorRectForBounds:" swt_gen="true">
+			<arg name="theRect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSTableHeaderView" swt_gen="mixed" swt_superclass="NSView">
+		<method selector="columnAtPoint:" swt_gen="true">
+			<arg name="point" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="headerRectOfColumn:" swt_gen="true">
+			<arg name="column" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSTableView" swt_gen="mixed" swt_superclass="NSControl">
+		<method selector="addTableColumn:" swt_gen="true">
+			<arg name="column" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="allowsColumnReordering" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="canDragRowsWithIndexes:atPoint:" swt_gen="true" swt_gen_custom_callback="true">
+			<arg name="rowIndexes" swt_gen="true"></arg>
+			<arg name="mouseDownPoint" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="clickedColumn" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="clickedRow" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="columnAtPoint:" swt_gen="true">
+			<arg name="point" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="columnIndexesInRect:" swt_gen="true">
+			<arg name="rect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="columnWithIdentifier:" swt_gen="true">
+			<arg name="identifier" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="deselectAll:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="deselectRow:" swt_gen="true">
+			<arg name="row" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="dragImageForRowsWithIndexes:tableColumns:event:offset:" swt_gen="true" swt_gen_super_msgSend="true">
+			<arg name="dragRows" swt_gen="true"></arg>
+			<arg name="tableColumns" swt_gen="true"></arg>
+			<arg name="dragEvent" swt_gen="true"></arg>
+			<arg name="dragImageOffset" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="frameOfCellAtColumn:row:" swt_gen="true">
+			<arg name="column" swt_gen="true"></arg>
+			<arg name="row" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="headerView" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="highlightSelectionInClipRect:" swt_gen="true" swt_gen_custom_callback="true">
+			<arg name="clipRect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="intercellSpacing" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="isRowSelected:" swt_gen="true">
+			<arg name="row" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="moveColumn:toColumn:" swt_gen="true">
+			<arg name="column" swt_gen="true"></arg>
+			<arg name="newIndex" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="noteNumberOfRowsChanged" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="numberOfColumns" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="numberOfRows" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="numberOfSelectedRows" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="rectOfColumn:" swt_gen="true">
+			<arg name="column" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="rectOfRow:" swt_gen="true">
+			<arg name="row" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="reloadData" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="removeTableColumn:" swt_gen="true">
+			<arg name="column" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="rowAtPoint:" swt_gen="true">
+			<arg name="point" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="rowHeight" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="rowsInRect:" swt_gen="true">
+			<arg name="rect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="scrollColumnToVisible:" swt_gen="true">
+			<arg name="column" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="scrollRowToVisible:" swt_gen="true">
+			<arg name="row" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="selectAll:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="selectRowIndexes:byExtendingSelection:" swt_gen="true">
+			<arg name="indexes" swt_gen="true"></arg>
+			<arg name="extend" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="selectedRow" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="selectedRowIndexes" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAllowsColumnReordering:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAllowsMultipleSelection:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setBackgroundColor:" swt_gen="true">
+			<arg name="color" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setColumnAutoresizingStyle:" swt_gen="true">
+			<arg name="style" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDataSource:" swt_gen="true">
+			<arg name="aSource" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDelegate:" swt_gen="true">
+			<arg name="delegate" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDoubleAction:" swt_gen="true">
+			<arg name="aSelector" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDropRow:dropOperation:" swt_gen="true">
+			<arg name="row" swt_gen="true"></arg>
+			<arg name="op" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setHeaderView:" swt_gen="true">
+			<arg name="headerView" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setHighlightedTableColumn:" swt_gen="true">
+			<arg name="tc" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setIndicatorImage:inTableColumn:" swt_gen="true">
+			<arg name="anImage" swt_gen="true"></arg>
+			<arg name="tc" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setIntercellSpacing:" swt_gen="true">
+			<arg name="aSize" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setRowHeight:" swt_gen="true">
+			<arg name="rowHeight" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setUsesAlternatingRowBackgroundColors:" swt_gen="true">
+			<arg name="useAlternatingRowColors" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="tableColumns" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="tile" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="usesAlternatingRowBackgroundColors" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSText" swt_gen="mixed" swt_superclass="NSView">
+		<method selector="copy:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="cut:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="delegate" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="font" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="paste:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="replaceCharactersInRange:withString:" swt_gen="true">
+			<arg name="range" swt_gen="true"></arg>
+			<arg name="aString" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="scrollRangeToVisible:" swt_gen="true">
+			<arg name="range" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="selectAll:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="selectedRange" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAlignment:" swt_gen="true">
+			<arg name="mode" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setBackgroundColor:" swt_gen="true">
+			<arg name="color" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDelegate:" swt_gen="true">
+			<arg name="anObject" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDrawsBackground:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setEditable:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setFont:" swt_gen="true">
+			<arg name="obj" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setHorizontallyResizable:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMaxSize:" swt_gen="true">
+			<arg name="newMaxSize" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMinSize:" swt_gen="true">
+			<arg name="newMinSize" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setSelectable:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setSelectedRange:" swt_gen="true">
+			<arg name="range" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setString:" swt_gen="true">
+			<arg name="string" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setTextColor:" swt_gen="true">
+			<arg name="color" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="sizeToFit" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="string" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSTextAttachment" swt_gen="mixed">
+		<method selector="initWithFileWrapper:" swt_gen="true">
+			<arg name="fileWrapper" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSTextContainer" swt_gen="mixed">
+		<method selector="containerSize" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="initWithContainerSize:" swt_gen="mixed">
+			<arg name="size" swt_gen="true"></arg>
+			<retval swt_java_type="NSTextContainer"></retval>
+		</method>
+		<method selector="setContainerSize:" swt_gen="true">
+			<arg name="size" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setLineFragmentPadding:" swt_gen="true">
+			<arg name="pad" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setWidthTracksTextView:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSTextField" swt_gen="mixed" swt_superclass="NSControl">
+		<method selector="selectText:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setBackgroundColor:" swt_gen="true">
+			<arg name="color" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setBordered:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDelegate:" swt_gen="true">
+			<arg name="anObject" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDrawsBackground:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setEditable:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setSelectable:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setTextColor:" swt_gen="true">
+			<arg name="color" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSTextFieldCell" swt_gen="mixed" swt_superclass="NSActionCell">
+		<method selector="setPlaceholderString:" swt_gen="true">
+			<arg name="string" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setTextColor:" swt_gen="true">
+			<arg name="color" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="textColor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSTextStorage" swt_gen="mixed" swt_superclass="NSMutableAttributedString">
+		<method selector="addLayoutManager:" swt_gen="true">
+			<arg name="obj" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="paragraphs" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSTextTab" swt_gen="mixed">
+		<method selector="initWithType:location:" swt_gen="true">
+			<arg name="type" swt_gen="true"></arg>
+			<arg name="loc" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSTextTab"></retval>
+		</method>
+		<method selector="location" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="tabStopType" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSTextTable" swt_superclass="NSTextBlock">
+	</class>
+	<class name="NSTextTableBlock" swt_superclass="NSTextBlock">
+	</class>
+	<class name="NSTextView" swt_gen="mixed" swt_superclass="NSText">
+		<method selector="characterIndexForInsertionAtPoint:" swt_gen="true">
+			<arg name="point" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="defaultParagraphStyle" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="dragSelectionWithEvent:offset:slideBack:" swt_gen="true" swt_gen_custom_callback="true">
+			<arg name="event" swt_gen="true"></arg>
+			<arg name="mouseOffset" swt_gen="true"></arg>
+			<arg name="slideBack" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="layoutManager" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="linkTextAttributes" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="markedTextAttributes" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDefaultParagraphStyle:" swt_gen="true">
+			<arg name="paragraphStyle" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setLinkTextAttributes:" swt_gen="true">
+			<arg name="attributeDictionary" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setRichText:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="shouldChangeTextInRange:replacementString:" swt_gen="true" swt_gen_custom_callback="true" swt_gen_super_msgSend="true">
+			<arg name="affectedCharRange" swt_gen="true"></arg>
+			<arg name="replacementString" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="textContainer" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="textStorage" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSTokenField" swt_superclass="NSTextField">
+	</class>
+	<class name="NSTokenFieldCell" swt_superclass="NSTextFieldCell">
+	</class>
+	<class name="NSToolbar" swt_gen="mixed">
+		<method selector="initWithIdentifier:" swt_gen="true">
+			<arg name="identifier" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSToolbar"></retval>
+		</method>
+		<method selector="insertItemWithItemIdentifier:atIndex:" swt_gen="true">
+			<arg name="itemIdentifier" swt_gen="true"></arg>
+			<arg name="index" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="removeItemAtIndex:" swt_gen="true">
+			<arg name="index" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAllowsUserCustomization:" swt_gen="true">
+			<arg name="allowCustomization" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDelegate:" swt_gen="true">
+			<arg name="delegate" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDisplayMode:" swt_gen="true">
+			<arg name="displayMode" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setVisible:" swt_gen="true">
+			<arg name="shown" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSToolbarItem" swt_gen="mixed">
+		<method selector="initWithItemIdentifier:" swt_gen="true">
+			<arg name="itemIdentifier" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSToolbarItem"></retval>
+		</method>
+		<method selector="itemIdentifier" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAction:" swt_gen="true">
+			<arg name="action" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setEnabled:" swt_gen="true">
+			<arg name="enabled" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setImage:" swt_gen="true">
+			<arg name="image" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setLabel:" swt_gen="true">
+			<arg name="label" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMaxSize:" swt_gen="true">
+			<arg name="size" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMinSize:" swt_gen="true">
+			<arg name="size" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setPaletteLabel:" swt_gen="true">
+			<arg name="paletteLabel" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setTarget:" swt_gen="true">
+			<arg name="target" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setToolTip:" swt_gen="true">
+			<arg name="toolTip" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setView:" swt_gen="true">
+			<arg name="view" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSToolbarItemGroup" swt_superclass="NSToolbarItem">
+	</class>
+	<class name="NSTrackingArea" swt_gen="mixed">
+		<method selector="initWithRect:options:owner:userInfo:" swt_gen="true">
+			<arg name="rect" swt_gen="true"></arg>
+			<arg name="options" swt_gen="true"></arg>
+			<arg name="owner" swt_gen="true"></arg>
+			<arg name="userInfo" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSTrackingArea"></retval>
+		</method>
+		<method selector="owner" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="userInfo" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSTreeController" swt_superclass="NSObjectController">
+	</class>
+	<class name="NSTypesetter" swt_gen="mixed">
+		<method selector="baselineOffsetInLayoutManager:glyphIndex:" swt_gen="true">
+			<arg name="layoutMgr" swt_gen="true"></arg>
+			<arg name="glyphIndex" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSURL" swt_gen="true">
+		<method class_method="true" selector="URLFromPasteboard:" swt_gen="true">
+			<arg name="pasteBoard" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="writeToPasteboard:" swt_gen="true">
+			<arg name="pasteBoard" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSUserDefaultsController" swt_superclass="NSController">
+	</class>
+	<class name="NSView" swt_gen="mixed" swt_superclass="NSResponder">
+		<method selector="acceptsFirstMouse:" swt_gen="true">
+			<arg name="theEvent" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="addSubview:" swt_gen="true">
+			<arg name="aView" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="addSubview:positioned:relativeTo:" swt_gen="true">
+			<arg name="aView" swt_gen="true"></arg>
+			<arg name="place" swt_gen="true"></arg>
+			<arg name="otherView" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="addToolTipRect:owner:userData:" swt_gen="true">
+			<arg name="aRect" swt_gen="true"></arg>
+			<arg name="anObject" swt_gen="true"></arg>
+			<arg name="data" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="beginDocument" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="beginPageInRect:atPlacement:" swt_gen="true">
+			<arg name="aRect" swt_gen="true"></arg>
+			<arg name="location" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="bounds" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="canBecomeKeyView" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="convertPoint:fromView:" swt_gen="true">
+			<arg name="aPoint" swt_gen="true"></arg>
+			<arg name="aView" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="convertPoint:toView:" swt_gen="true">
+			<arg name="aPoint" swt_gen="true"></arg>
+			<arg name="aView" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="convertPointFromBase:" swt_gen="true">
+			<arg name="aPoint" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="convertPointToBase:" swt_gen="true">
+			<arg name="aPoint" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="convertRect:fromView:" swt_gen="true">
+			<arg name="aRect" swt_gen="true"></arg>
+			<arg name="aView" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="convertRect:toView:" swt_gen="true">
+			<arg name="aRect" swt_gen="true"></arg>
+			<arg name="aView" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="convertRectFromBase:" swt_gen="true">
+			<arg name="aRect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="convertRectToBase:" swt_gen="true">
+			<arg name="aRect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="convertSize:fromView:" swt_gen="true">
+			<arg name="aSize" swt_gen="true"></arg>
+			<arg name="aView" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="convertSize:toView:" swt_gen="true">
+			<arg name="aSize" swt_gen="true"></arg>
+			<arg name="aView" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="convertSizeFromBase:" swt_gen="true">
+			<arg name="aSize" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="convertSizeToBase:" swt_gen="true">
+			<arg name="aSize" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="discardCursorRects" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="display" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="displayIfNeeded" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="displayRectIgnoringOpacity:inContext:" swt_gen="true">
+			<arg name="aRect" swt_gen="true"></arg>
+			<arg name="context" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="dragImage:at:offset:event:pasteboard:source:slideBack:" swt_gen="true">
+			<arg name="anImage" swt_gen="true"></arg>
+			<arg name="viewLocation" swt_gen="true"></arg>
+			<arg name="initialOffset" swt_gen="true"></arg>
+			<arg name="event" swt_gen="true"></arg>
+			<arg name="pboard" swt_gen="true"></arg>
+			<arg name="sourceObj" swt_gen="true"></arg>
+			<arg name="slideFlag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="drawRect:" swt_gen="true" swt_gen_custom_callback="true">
+			<arg name="rect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="endDocument" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="endPage" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="frame" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="hitTest:" swt_gen="true" swt_gen_custom_callback="true">
+			<arg name="aPoint" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="initWithFrame:" swt_gen="true">
+			<arg name="frameRect" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSView"></retval>
+		</method>
+		<method selector="isFlipped" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="isHidden" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="isHiddenOrHasHiddenAncestor" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="isOpaque" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="lockFocus" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="menuForEvent:" swt_gen="true">
+			<arg name="event" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="registerForDraggedTypes:" swt_gen="true">
+			<arg name="newTypes" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="removeFromSuperview" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="removeTrackingArea:" swt_gen="true">
+			<arg name="trackingArea" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="resetCursorRects" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="scrollPoint:" swt_gen="true">
+			<arg name="aPoint" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="scrollRectToVisible:" swt_gen="true">
+			<arg name="aRect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAutoresizesSubviews:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAutoresizingMask:" swt_gen="true">
+			<arg name="mask" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setFocusRingType:" swt_gen="true">
+			<arg name="focusRingType" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setFrame:" swt_gen="true" swt_gen_custom_callback="true">
+			<arg name="frameRect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setFrameOrigin:" swt_gen="true" swt_gen_custom_callback="true" swt_gen_super_msgSend="true">
+			<arg name="newOrigin" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setFrameSize:" swt_gen="true" swt_gen_custom_callback="true" swt_gen_super_msgSend="true">
+			<arg name="newSize" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setHidden:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setNeedsDisplay:" swt_gen="true" swt_gen_super_msgSend="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setNeedsDisplayInRect:" swt_gen="true" swt_gen_custom_callback="true" swt_gen_super_msgSend="true">
+			<arg name="invalidRect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setToolTip:" swt_gen="true">
+			<arg name="string" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="shouldDelayWindowOrderingForEvent:" swt_gen="true">
+			<arg name="theEvent" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="subviews" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="superview" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="trackingAreas" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="unlockFocus" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="unregisterDraggedTypes" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="updateTrackingAreas" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="viewDidMoveToWindow" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="visibleRect" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="window" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSViewAnimation" swt_superclass="NSAnimation">
+	</class>
+	<class name="NSViewController" swt_superclass="NSResponder">
+	</class>
+	<class name="NSWindow" swt_gen="mixed" swt_superclass="NSResponder">
+		<method selector="addChildWindow:ordered:" swt_gen="true">
+			<arg name="childWin" swt_gen="true"></arg>
+			<arg name="place" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="alphaValue" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="areCursorRectsEnabled" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="becomeKeyWindow" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="canBecomeKeyWindow" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="cascadeTopLeftFromPoint:" swt_gen="true">
+			<arg name="topLeftPoint" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="close" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="contentRectForFrameRect:" swt_gen="true">
+			<arg name="frameRect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="contentView" swt_gen="true">
+			<retval swt_gen="true" swt_java_type="NSView"></retval>
+		</method>
+		<method selector="convertBaseToScreen:" swt_gen="true">
+			<arg name="aPoint" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="convertScreenToBase:" swt_gen="true">
+			<arg name="aPoint" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="defaultButtonCell" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="deminiaturize:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="disableCursorRects" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="display" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="enableCursorRects" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="fieldEditor:forObject:" swt_gen="true">
+			<arg name="createFlag" swt_gen="true"></arg>
+			<arg name="anObject" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="firstResponder" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="frame" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="frameRectForContentRect:" swt_gen="true">
+			<arg name="contentRect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="graphicsContext" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="hasShadow" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="initWithContentRect:styleMask:backing:defer:" swt_gen="true">
+			<arg name="contentRect" swt_gen="true"></arg>
+			<arg name="aStyle" swt_gen="true"></arg>
+			<arg name="bufferingType" swt_gen="true"></arg>
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSWindow"></retval>
+		</method>
+		<method selector="initWithContentRect:styleMask:backing:defer:screen:" swt_gen="true">
+			<arg name="contentRect" swt_gen="true"></arg>
+			<arg name="aStyle" swt_gen="true"></arg>
+			<arg name="bufferingType" swt_gen="true"></arg>
+			<arg name="flag" swt_gen="true"></arg>
+			<arg name="screen" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSWindow"></retval>
+		</method>
+		<method selector="invalidateShadow" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="isDocumentEdited" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="isKeyWindow" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="isMiniaturized" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="isSheet" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="isVisible" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="isZoomed" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="makeFirstResponder:" swt_gen="true">
+			<arg name="aResponder" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="makeKeyAndOrderFront:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="minFrameWidthWithTitle:styleMask:" swt_gen="true">
+			<arg name="aTitle" swt_gen="true"></arg>
+			<arg name="aStyle" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="minSize" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="miniaturize:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="mouseLocationOutsideOfEventStream" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="orderBack:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="orderFront:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="orderFrontRegardless" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="orderOut:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="orderWindow:relativeTo:" swt_gen="true">
+			<arg name="place" swt_gen="true"></arg>
+			<arg name="otherWin" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="parentWindow" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="removeChildWindow:" swt_gen="true">
+			<arg name="childWin" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="screen" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="sendEvent:" swt_gen="true">
+			<arg name="theEvent" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAcceptsMouseMovedEvents:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAlphaValue:" swt_gen="true">
+			<arg name="windowAlpha" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setBackgroundColor:" swt_gen="true">
+			<arg name="color" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setContentView:" swt_gen="true">
+			<arg name="aView" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDefaultButtonCell:" swt_gen="true">
+			<arg name="defButt" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDelegate:" swt_gen="true">
+			<arg name="anObject" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDocumentEdited:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setFrame:display:" swt_gen="true">
+			<arg name="frameRect" swt_gen="true"></arg>
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setFrame:display:animate:" swt_gen="true">
+			<arg name="frameRect" swt_gen="true"></arg>
+			<arg name="displayFlag" swt_gen="true"></arg>
+			<arg name="animateFlag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setHasShadow:" swt_gen="true">
+			<arg name="hasShadow" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setLevel:" swt_gen="true">
+			<arg name="newLevel" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMinSize:" swt_gen="true">
+			<arg name="size" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setOpaque:" swt_gen="true">
+			<arg name="isOpaque" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setReleasedWhenClosed:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setShowsResizeIndicator:" swt_gen="true">
+			<arg name="show" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setShowsToolbarButton:" swt_gen="true">
+			<arg name="show" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setTitle:" swt_gen="true">
+			<arg name="aString" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setToolbar:" swt_gen="true">
+			<arg name="toolbar" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="standardWindowButton:" swt_gen="true">
+			<arg name="b" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="styleMask" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="toggleToolbarShown:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="toolbar" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="windowNumber" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="zoom:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSWindowController" swt_superclass="NSResponder">
+	</class>
+	<class name="NSWorkspace" swt_gen="mixed">
+		<method selector="fullPathForApplication:" swt_gen="true">
+			<arg name="appName" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="getInfoForFile:application:type:" swt_gen="true">
+			<arg name="fullPath" swt_gen="true"></arg>
+			<arg name="appName" swt_gen="true"></arg>
+			<arg name="type" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="iconForFile:" swt_gen="true">
+			<arg name="fullPath" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="iconForFileType:" swt_gen="true">
+			<arg name="fileType" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="isFilePackageAtPath:" swt_gen="true">
+			<arg name="fullPath" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="openFile:withApplication:" swt_gen="true">
+			<arg name="fullPath" swt_gen="true"></arg>
+			<arg name="appName" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="openURL:" swt_gen="true">
+			<arg name="url" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="openURLs:withAppBundleIdentifier:options:additionalEventParamDescriptor:launchIdentifiers:" swt_gen="true">
+			<arg name="urls" swt_gen="true"></arg>
+			<arg name="bundleIdentifier" swt_gen="true"></arg>
+			<arg name="options" swt_gen="true"></arg>
+			<arg name="descriptor" swt_gen="true"></arg>
+			<arg name="identifiers" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="sharedWorkspace" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<informal_protocol name="NSAccessibility" swt_gen="true">
+		<method selector="accessibilityActionDescription:" swt_gen="true">
+			<arg name="action" swt_gen="true"></arg>
+		</method>
+		<method selector="accessibilityActionNames" swt_gen="true"></method>
+		<method selector="accessibilityAttributeNames" swt_gen="true"></method>
+		<method selector="accessibilityAttributeValue:" swt_gen="true">
+			<arg name="attribute" swt_gen="true"></arg>
+		</method>
+		<method selector="accessibilityAttributeValue:forParameter:" swt_gen="true" swt_gen_super_msgSend="true">
+			<arg name="attribute" swt_gen="true"></arg>
+			<arg name="parameter" swt_gen="true"></arg>
+		</method>
+		<method selector="accessibilityFocusedUIElement" swt_gen="true"></method>
+		<method selector="accessibilityHitTest:" swt_gen="true" swt_gen_custom_callback="true" swt_gen_super_msgSend="true">
+			<arg name="point" swt_gen="true"></arg>
+		</method>
+		<method selector="accessibilityIsAttributeSettable:" swt_gen="true">
+			<arg name="attribute" swt_gen="true"></arg>
+		</method>
+		<method selector="accessibilityIsIgnored" swt_gen="true"></method>
+		<method selector="accessibilityParameterizedAttributeNames" swt_gen="true"></method>
+		<method selector="accessibilityPerformAction:" swt_gen="true">
+			<arg name="action" swt_gen="true"></arg>
+		</method>
+		<method selector="accessibilitySetValue:forAttribute:" swt_gen="true">
+			<arg name="value" swt_gen="true"></arg>
+			<arg name="attribute" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="NSAccessibilityAdditions" swt_gen="true">
+		<method selector="accessibilitySetOverrideValue:forAttribute:" swt_gen="true">
+			<arg name="value" swt_gen="true"></arg>
+			<arg name="attribute" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="NSApplicationDelegate" swt_gen="mixed">
+		<method selector="applicationShouldTerminate:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="NSApplicationNotifications" swt_gen="mixed">
+		<method selector="applicationDidBecomeActive:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+		<method selector="applicationDidFinishLaunching:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+		<method selector="applicationDidResignActive:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+		<method selector="applicationWillFinishLaunching:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+		<method selector="applicationWillTerminate:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="NSColorPanelResponderMethod" swt_gen="true">
+		<method selector="changeColor:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="NSComboBoxNotifications" swt_gen="mixed">
+		<method selector="comboBoxSelectionDidChange:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+		<method selector="comboBoxWillDismiss:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="NSDraggingDestination" swt_gen="mixed">
+		<method selector="draggingEnded:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+		</method>
+		<method selector="draggingEntered:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+		</method>
+		<method selector="draggingExited:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+		</method>
+		<method selector="draggingUpdated:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+		</method>
+		<method selector="performDragOperation:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+		</method>
+		<method selector="wantsPeriodicDraggingUpdates" swt_gen="true"></method>
+	</informal_protocol>
+	<informal_protocol name="NSDraggingSource" swt_gen="mixed">
+		<method selector="draggedImage:beganAt:" swt_gen="true" swt_gen_custom_callback="true">
+			<arg name="image" swt_gen="true"></arg>
+			<arg name="screenPoint" swt_gen="true"></arg>
+		</method>
+		<method selector="draggedImage:endedAt:operation:" swt_gen="true" swt_gen_custom_callback="true">
+			<arg name="image" swt_gen="true"></arg>
+			<arg name="screenPoint" swt_gen="true"></arg>
+			<arg name="operation" swt_gen="true"></arg>
+		</method>
+		<method selector="draggingSourceOperationMaskForLocal:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+		</method>
+		<method selector="ignoreModifierKeysWhileDragging" swt_gen="true"></method>
+	</informal_protocol>
+	<informal_protocol name="NSFontManagerResponderMethod" swt_gen="true">
+		<method selector="changeFont:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="NSMenuDelegate" swt_gen="mixed">
+		<method selector="menu:willHighlightItem:" swt_gen="true">
+			<arg name="menu" swt_gen="true"></arg>
+			<arg name="item" swt_gen="true"></arg>
+		</method>
+		<method selector="menuDidClose:" swt_gen="true">
+			<arg name="menu" swt_gen="true"></arg>
+		</method>
+		<method selector="menuNeedsUpdate:" swt_gen="true">
+			<arg name="menu" swt_gen="true"></arg>
+		</method>
+		<method selector="menuWillOpen:" swt_gen="true">
+			<arg name="menu" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="NSOutlineViewDataSource" swt_gen="mixed">
+		<method selector="outlineView:acceptDrop:item:childIndex:" swt_gen="true">
+			<arg name="outlineView" swt_gen="true"></arg>
+			<arg name="info" swt_gen="true"></arg>
+			<arg name="item" swt_gen="true"></arg>
+			<arg name="index" swt_gen="true"></arg>
+		</method>
+		<method selector="outlineView:child:ofItem:" swt_gen="true">
+			<arg name="outlineView" swt_gen="true"></arg>
+			<arg name="index" swt_gen="true"></arg>
+			<arg name="item" swt_gen="true"></arg>
+		</method>
+		<method selector="outlineView:isItemExpandable:" swt_gen="true">
+			<arg name="outlineView" swt_gen="true"></arg>
+			<arg name="item" swt_gen="true"></arg>
+		</method>
+		<method selector="outlineView:numberOfChildrenOfItem:" swt_gen="true">
+			<arg name="outlineView" swt_gen="true"></arg>
+			<arg name="item" swt_gen="true"></arg>
+		</method>
+		<method selector="outlineView:objectValueForTableColumn:byItem:" swt_gen="true">
+			<arg name="outlineView" swt_gen="true"></arg>
+			<arg name="tableColumn" swt_gen="true"></arg>
+			<arg name="item" swt_gen="true"></arg>
+		</method>
+		<method selector="outlineView:setObjectValue:forTableColumn:byItem:" swt_gen="true">
+			<arg name="outlineView" swt_gen="true"></arg>
+			<arg name="object" swt_gen="true"></arg>
+			<arg name="tableColumn" swt_gen="true"></arg>
+			<arg name="item" swt_gen="true"></arg>
+		</method>
+		<method selector="outlineView:validateDrop:proposedItem:proposedChildIndex:" swt_gen="true">
+			<arg name="outlineView" swt_gen="true"></arg>
+			<arg name="info" swt_gen="true"></arg>
+			<arg name="item" swt_gen="true"></arg>
+			<arg name="index" swt_gen="true"></arg>
+		</method>
+		<method selector="outlineView:writeItems:toPasteboard:" swt_gen="true">
+			<arg name="outlineView" swt_gen="true"></arg>
+			<arg name="items" swt_gen="true"></arg>
+			<arg name="pasteboard" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="NSOutlineViewDelegate" swt_gen="mixed">
+		<method selector="outlineView:didClickTableColumn:" swt_gen="true">
+			<arg name="outlineView" swt_gen="true"></arg>
+			<arg name="tableColumn" swt_gen="true"></arg>
+		</method>
+		<method selector="outlineView:shouldCollapseItem:" swt_gen="true">
+			<arg name="outlineView" swt_gen="true"></arg>
+			<arg name="item" swt_gen="true"></arg>
+		</method>
+		<method selector="outlineView:shouldExpandItem:" swt_gen="true">
+			<arg name="outlineView" swt_gen="true"></arg>
+			<arg name="item" swt_gen="true"></arg>
+		</method>
+		<method selector="outlineView:willDisplayCell:forTableColumn:item:" swt_gen="true">
+			<arg name="outlineView" swt_gen="true"></arg>
+			<arg name="cell" swt_gen="true"></arg>
+			<arg name="tableColumn" swt_gen="true"></arg>
+			<arg name="item" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="NSOutlineViewNotifications" swt_gen="mixed">
+		<method selector="outlineViewColumnDidMove:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+		<method selector="outlineViewColumnDidResize:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+		<method selector="outlineViewItemDidExpand:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+		<method selector="outlineViewSelectionDidChange:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="NSPasteboardOwner" swt_gen="mixed">
+		<method selector="pasteboard:provideDataForType:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="type" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="NSSavePanelDelegate" swt_gen="mixed">
+		<method selector="panel:shouldShowFilename:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="filename" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="NSTabViewDelegate" swt_gen="mixed">
+		<method selector="tabView:didSelectTabViewItem:" swt_gen="true">
+			<arg name="tabView" swt_gen="true"></arg>
+			<arg name="tabViewItem" swt_gen="true"></arg>
+		</method>
+		<method selector="tabView:shouldSelectTabViewItem:" swt_gen="true">
+			<arg name="tabView" swt_gen="true"></arg>
+			<arg name="tabViewItem" swt_gen="true"></arg>
+		</method>
+		<method selector="tabView:willSelectTabViewItem:" swt_gen="true">
+			<arg name="tabView" swt_gen="true"></arg>
+			<arg name="tabViewItem" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="NSTableDataSource" swt_gen="mixed">
+		<method selector="numberOfRowsInTableView:" swt_gen="true">
+			<arg name="tableView" swt_gen="true"></arg>
+		</method>
+		<method selector="tableView:acceptDrop:row:dropOperation:" swt_gen="true">
+			<arg name="tableView" swt_gen="true"></arg>
+			<arg name="info" swt_gen="true"></arg>
+			<arg name="row" swt_gen="true"></arg>
+			<arg name="dropOperation" swt_gen="true"></arg>
+		</method>
+		<method selector="tableView:objectValueForTableColumn:row:" swt_gen="true">
+			<arg name="tableView" swt_gen="true"></arg>
+			<arg name="tableColumn" swt_gen="true"></arg>
+			<arg name="row" swt_gen="true"></arg>
+		</method>
+		<method selector="tableView:setObjectValue:forTableColumn:row:" swt_gen="true">
+			<arg name="tableView" swt_gen="true"></arg>
+			<arg name="object" swt_gen="true"></arg>
+			<arg name="tableColumn" swt_gen="true"></arg>
+			<arg name="row" swt_gen="true"></arg>
+		</method>
+		<method selector="tableView:validateDrop:proposedRow:proposedDropOperation:" swt_gen="true">
+			<arg name="tableView" swt_gen="true"></arg>
+			<arg name="info" swt_gen="true"></arg>
+			<arg name="row" swt_gen="true"></arg>
+			<arg name="dropOperation" swt_gen="true"></arg>
+		</method>
+		<method selector="tableView:writeRowsWithIndexes:toPasteboard:" swt_gen="true">
+			<arg name="tableView" swt_gen="true"></arg>
+			<arg name="rowIndexes" swt_gen="true"></arg>
+			<arg name="pboard" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="NSTableViewDelegate" swt_gen="mixed">
+		<method selector="tableView:didClickTableColumn:" swt_gen="true">
+			<arg name="tableView" swt_gen="true"></arg>
+			<arg name="tableColumn" swt_gen="true"></arg>
+		</method>
+		<method selector="tableView:shouldEditTableColumn:row:" swt_gen="true">
+			<arg name="tableView" swt_gen="true"></arg>
+			<arg name="tableColumn" swt_gen="true"></arg>
+			<arg name="row" swt_gen="true"></arg>
+		</method>
+		<method selector="tableView:willDisplayCell:forTableColumn:row:" swt_gen="true">
+			<arg name="tableView" swt_gen="true"></arg>
+			<arg name="cell" swt_gen="true"></arg>
+			<arg name="tableColumn" swt_gen="true"></arg>
+			<arg name="row" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="NSTableViewNotifications" swt_gen="mixed">
+		<method selector="tableViewColumnDidMove:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+		<method selector="tableViewColumnDidResize:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+		<method selector="tableViewSelectionDidChange:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="NSTextDelegate" swt_gen="mixed">
+		<method selector="textDidChange:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+		<method selector="textDidEndEditing:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="NSTextViewDelegate" swt_gen="mixed">
+		<method selector="textView:clickedOnLink:atIndex:" swt_gen="true">
+			<arg name="textView" swt_gen="true"></arg>
+			<arg name="link" swt_gen="true"></arg>
+			<arg name="charIndex" swt_gen="true"></arg>
+		</method>
+		<method selector="textView:willChangeSelectionFromCharacterRange:toCharacterRange:" swt_gen="true" swt_gen_custom_callback="true">
+			<arg name="textView" swt_gen="true"></arg>
+			<arg name="oldSelectedCharRange" swt_gen="true"></arg>
+			<arg name="newSelectedCharRange" swt_gen="true"></arg>
+		</method>
+		<method selector="textViewDidChangeSelection:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="NSToolTipOwner" swt_gen="true">
+		<method selector="view:stringForToolTip:point:userData:" swt_gen="true" swt_gen_custom_callback="true">
+			<arg name="view" swt_gen="true"></arg>
+			<arg name="tag" swt_gen="true"></arg>
+			<arg name="point" swt_gen="true"></arg>
+			<arg name="data" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="NSToolbarDelegate" swt_gen="true">
+		<method selector="toolbar:itemForItemIdentifier:willBeInsertedIntoToolbar:" swt_gen="true">
+			<arg name="toolbar" swt_gen="true"></arg>
+			<arg name="itemIdentifier" swt_gen="true"></arg>
+			<arg name="flag" swt_gen="true"></arg>
+		</method>
+		<method selector="toolbarAllowedItemIdentifiers:" swt_gen="true">
+			<arg name="toolbar" swt_gen="true"></arg>
+		</method>
+		<method selector="toolbarDefaultItemIdentifiers:" swt_gen="true">
+			<arg name="toolbar" swt_gen="true"></arg>
+		</method>
+		<method selector="toolbarSelectableItemIdentifiers:" swt_gen="true">
+			<arg name="toolbar" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="NSToolbarNotifications" swt_gen="true">
+		<method selector="toolbarDidRemoveItem:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+		<method selector="toolbarWillAddItem:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="NSWindowDelegate" swt_gen="mixed">
+		<method selector="windowShouldClose:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="NSWindowNotifications" swt_gen="mixed">
+		<method selector="windowDidBecomeKey:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+		<method selector="windowDidMove:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+		<method selector="windowDidResignKey:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+		<method selector="windowDidResize:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+		<method selector="windowWillClose:" swt_gen="true">
+			<arg name="notification" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<class name="NSSecureTextField" swt_gen="true" swt_superclass="NSTextField"></class>
+	<informal_protocol name="NSTextInput" swt_gen="true">
+		<method selector="markedRange" swt_gen="true" swt_gen_custom_callback="true"></method>
+		<method selector="insertText:" swt_gen="true">
+			<arg name="aString" swt_gen="true"></arg>
+		</method>
+		<method selector="unmarkText" swt_gen="true"></method>
+		<method selector="hasMarkedText" swt_gen="true"></method>
+		<method selector="validAttributesForMarkedText" swt_gen="true"></method>
+		<method selector="characterIndexForPoint:" swt_gen="true" swt_gen_custom_callback="true">
+			<arg name="thePoint" swt_gen="true"></arg>
+		</method>
+		<method selector="attributedSubstringFromRange:" swt_gen="true" swt_gen_custom_callback="true">
+			<arg name="theRange" swt_gen="true"></arg>
+		</method>
+		<method selector="selectedRange" swt_gen="true" swt_gen_custom_callback="true"></method>
+		<method selector="setMarkedText:selectedRange:" swt_gen="true" swt_gen_custom_callback="true">
+			<arg name="selRange" swt_gen="true"></arg>
+			<arg name="aString" swt_gen="true"></arg>
+		</method>
+		<method selector="firstRectForCharacterRange:" swt_gen="true" swt_gen_custom_callback="true">
+			<arg name="theRange" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+</signatures>
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CGPathElement.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CGPathElement.java
new file mode 100644
index 0000000..8b700c8
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CGPathElement.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+public class CGPathElement {
+	/** @field cast=(CGPathElementType) */
+	public int type;
+	/** @field cast=(CGPoint *) */
+	public int /*long*/ points;
+	public static final int sizeof = OS.CGPathElement_sizeof();
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CGPoint.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CGPoint.java
new file mode 100644
index 0000000..6408522
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CGPoint.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+public class CGPoint {
+	public float /*double*/ x;
+	public float /*double*/ y;
+	public static final int sizeof = OS.CGPoint_sizeof();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CGRect.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CGRect.java
new file mode 100644
index 0000000..cb35389
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CGRect.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+public class CGRect {
+	public CGPoint origin = new CGPoint();
+	public CGSize size = new CGSize();
+	public static final int sizeof = OS.CGRect_sizeof();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CGSize.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CGSize.java
new file mode 100644
index 0000000..2498493
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CGSize.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+public class CGSize {
+	public float /*double*/ width;
+	public float /*double*/ height;
+	public static final int sizeof = OS.CGSize_sizeof();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CoreFoundationFull.bridgesupport.extras b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CoreFoundationFull.bridgesupport.extras
new file mode 100644
index 0000000..556ef89
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CoreFoundationFull.bridgesupport.extras
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF8"?>
+<signatures swt_gen="mixed">
+	<constant name="kCFRunLoopCommonModes" swt_gen="true"></constant>
+	<enum name="kCFRunLoopBeforeWaiting" swt_gen="true"></enum>
+	<enum name="kCFStringEncodingUTF8" swt_gen="true"></enum>
+	<function name="CFDataGetBytePtr" swt_gen="true">
+		<arg name="theData" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CFDataGetLength" swt_gen="true">
+		<arg name="theData" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CFRelease" swt_gen="true">
+		<arg name="cf" swt_gen="true"></arg>
+	</function>
+	<function name="CFRunLoopAddObserver" swt_gen="true">
+		<arg name="rl" swt_gen="true"></arg>
+		<arg name="observer" swt_gen="true"></arg>
+		<arg name="mode" swt_gen="true"></arg>
+	</function>
+	<function name="CFRunLoopGetCurrent" swt_gen="true">
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CFRunLoopObserverCreate" swt_gen="true">
+		<arg name="allocator" swt_gen="true"></arg>
+		<arg name="activities" swt_gen="true"></arg>
+		<arg name="repeats" swt_gen="true"></arg>
+		<arg name="order" swt_gen="true"></arg>
+		<arg name="callout" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<arg></arg>
+			<arg></arg>
+			<retval swt_gen="true"></retval>
+		</arg>
+		<arg name="context" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CFRunLoopObserverInvalidate" swt_gen="true">
+		<arg name="observer" swt_gen="true"></arg>
+	</function>
+	<function name="CFURLCreateStringByAddingPercentEscapes" swt_gen="true">
+		<arg name="allocator" swt_gen="true"></arg>
+		<arg name="originalString" swt_gen="true"></arg>
+		<arg name="charactersToLeaveUnescaped" swt_gen="true"></arg>
+		<arg name="legalURLCharactersToBeEscaped" swt_gen="true"></arg>
+		<arg name="encoding" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+</signatures>
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CoreGraphicsFull.bridgesupport.extras b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CoreGraphicsFull.bridgesupport.extras
new file mode 100644
index 0000000..1d23386
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/CoreGraphicsFull.bridgesupport.extras
@@ -0,0 +1,297 @@
+<?xml version="1.0" encoding="UTF8"?>
+<signatures swt_gen="mixed">
+	<struct name="CGPathElement" swt_gen="true">
+		<field name="type" swt_gen="true"></field>
+		<field name="points" swt_gen="true"></field>
+	</struct>
+	<struct name="CGPoint" swt_gen="true">
+		<field name="x" swt_gen="true"></field>
+		<field name="y" swt_gen="true"></field>
+	</struct>
+	<struct name="CGRect" swt_gen="true">
+		<field name="origin" swt_gen="true"></field>
+		<field name="size" swt_gen="true"></field>
+	</struct>
+	<struct name="CGSize" swt_gen="true">
+		<field name="width" swt_gen="true"></field>
+		<field name="height" swt_gen="true"></field>
+	</struct>
+	<cftype name="CGMutablePathRef" swt_gen="true"></cftype>
+	<enum name="kCGBlendModeDifference" swt_gen="true"></enum>
+	<enum name="kCGEventFilterMaskPermitLocalKeyboardEvents" swt_gen="true"></enum>
+	<enum name="kCGEventFilterMaskPermitLocalMouseEvents" swt_gen="true"></enum>
+	<enum name="kCGEventFilterMaskPermitSystemDefinedEvents" swt_gen="true"></enum>
+	<enum name="kCGEventSuppressionStateRemoteMouseDrag" swt_gen="true"></enum>
+	<enum name="kCGEventSuppressionStateSuppressionInterval" swt_gen="true"></enum>
+	<enum name="kCGImageAlphaFirst" swt_gen="true"></enum>
+	<enum name="kCGImageAlphaNoneSkipFirst" swt_gen="true"></enum>
+	<enum name="kCGImageAlphaOnly" swt_gen="true"></enum>
+	<enum name="kCGKeyboardEventKeyboardType" swt_gen="true"></enum>
+	<enum name="kCGLineCapButt" swt_gen="true"></enum>
+	<enum name="kCGLineCapRound" swt_gen="true"></enum>
+	<enum name="kCGLineCapSquare" swt_gen="true"></enum>
+	<enum name="kCGLineJoinBevel" swt_gen="true"></enum>
+	<enum name="kCGLineJoinMiter" swt_gen="true"></enum>
+	<enum name="kCGLineJoinRound" swt_gen="true"></enum>
+	<enum name="kCGPathElementAddCurveToPoint" swt_gen="true"></enum>
+	<enum name="kCGPathElementAddLineToPoint" swt_gen="true"></enum>
+	<enum name="kCGPathElementAddQuadCurveToPoint" swt_gen="true"></enum>
+	<enum name="kCGPathElementCloseSubpath" swt_gen="true"></enum>
+	<enum name="kCGPathElementMoveToPoint" swt_gen="true"></enum>
+	<enum name="kCGPathStroke" swt_gen="true"></enum>
+	<enum name="kCGSessionEventTap" swt_gen="true"></enum>
+	<function name="CGBitmapContextCreate" swt_gen="true">
+		<arg name="data" swt_gen="true"></arg>
+		<arg name="width" swt_gen="true"></arg>
+		<arg name="height" swt_gen="true"></arg>
+		<arg name="bitsPerComponent" swt_gen="true"></arg>
+		<arg name="bytesPerRow" swt_gen="true"></arg>
+		<arg name="colorspace" swt_gen="true"></arg>
+		<arg name="bitmapInfo" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGBitmapContextCreateImage" swt_gen="true">
+		<arg name="c" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGBitmapContextGetData" swt_gen="true">
+		<arg name="c" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGColorSpaceCreateDeviceRGB" swt_gen="true">
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGColorSpaceRelease" swt_gen="true">
+		<arg name="space" swt_gen="true"></arg>
+	</function>
+	<function name="CGContextAddPath" swt_gen="true">
+		<arg name="context" swt_gen="true"></arg>
+		<arg name="path" swt_gen="true"></arg>
+	</function>
+	<function name="CGContextDrawImage" swt_gen="true">
+		<arg name="c" swt_gen="true"></arg>
+		<arg name="rect" swt_gen="true"></arg>
+		<arg name="image" swt_gen="true"></arg>
+	</function>
+	<function name="CGContextRelease" swt_gen="true">
+		<arg name="c" swt_gen="true"></arg>
+	</function>
+	<function name="CGContextReplacePathWithStrokedPath" swt_gen="true">
+		<arg name="c" swt_gen="true"></arg>
+	</function>
+	<function name="CGContextRestoreGState" swt_gen="true">
+		<arg name="c" swt_gen="true"></arg>
+	</function>
+	<function name="CGContextSaveGState" swt_gen="true">
+		<arg name="c" swt_gen="true"></arg>
+	</function>
+	<function name="CGContextScaleCTM" swt_gen="true">
+		<arg name="c" swt_gen="true"></arg>
+		<arg name="sx" swt_gen="true"></arg>
+		<arg name="sy" swt_gen="true"></arg>
+	</function>
+	<function name="CGContextSetBlendMode" swt_gen="true">
+		<arg name="context" swt_gen="true"></arg>
+		<arg name="mode" swt_gen="true"></arg>
+	</function>
+	<function name="CGContextSetLineCap" swt_gen="true">
+		<arg name="c" swt_gen="true"></arg>
+		<arg name="cap" swt_gen="true"></arg>
+	</function>
+	<function name="CGContextSetLineDash" swt_gen="true">
+		<arg name="c" swt_gen="true"></arg>
+		<arg name="phase" swt_gen="true"></arg>
+		<arg name="lengths" swt_gen="true" swt_java_type="float[]" swt_java_type64="float[]"></arg>
+		<arg name="count" swt_gen="true"></arg>
+	</function>
+	<function name="CGContextSetLineJoin" swt_gen="true">
+		<arg name="c" swt_gen="true"></arg>
+		<arg name="join" swt_gen="true"></arg>
+	</function>
+	<function name="CGContextSetLineWidth" swt_gen="true">
+		<arg name="c" swt_gen="true"></arg>
+		<arg name="width" swt_gen="true"></arg>
+	</function>
+	<function name="CGContextSetMiterLimit" swt_gen="true">
+		<arg name="c" swt_gen="true"></arg>
+		<arg name="limit" swt_gen="true"></arg>
+	</function>
+	<function name="CGContextStrokePath" swt_gen="true">
+		<arg name="c" swt_gen="true"></arg>
+	</function>
+	<function name="CGContextTranslateCTM" swt_gen="true">
+		<arg name="c" swt_gen="true"></arg>
+		<arg name="tx" swt_gen="true"></arg>
+		<arg name="ty" swt_gen="true"></arg>
+	</function>
+	<function name="CGDataProviderCreateWithData" swt_gen="true">
+		<arg name="info" swt_gen="true"></arg>
+		<arg name="data" swt_gen="true"></arg>
+		<arg name="size" swt_gen="true"></arg>
+		<arg name="releaseData" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<arg></arg>
+			<arg></arg>
+			<retval swt_gen="true"></retval>
+		</arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGDataProviderRelease" swt_gen="true">
+		<arg name="provider" swt_gen="true"></arg>
+	</function>
+	<function name="CGDisplayBaseAddress" swt_gen="true">
+		<arg name="display" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGDisplayBitsPerPixel" swt_gen="true">
+		<arg name="display" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGDisplayBitsPerSample" swt_gen="true">
+		<arg name="display" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGDisplayBytesPerRow" swt_gen="true">
+		<arg name="display" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGDisplayPixelsHigh" swt_gen="true">
+		<arg name="display" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGDisplayPixelsWide" swt_gen="true">
+		<arg name="display" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGEnableEventStateCombining" swt_gen="true">
+		<arg name="doCombineState" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGEventCreateKeyboardEvent" swt_gen="true">
+		<arg name="source" swt_gen="true"></arg>
+		<arg name="virtualKey" swt_gen="true"></arg>
+		<arg name="keyDown" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGEventGetIntegerValueField" swt_gen="true">
+		<arg name="event" swt_gen="true"></arg>
+		<arg name="field" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGEventKeyboardSetUnicodeString" swt_gen="true">
+		<arg name="event" swt_gen="true"></arg>
+		<arg name="stringLength" swt_gen="true"></arg>
+		<arg name="unicodeString" swt_gen="true" swt_java_type="char[]"></arg>
+	</function>
+	<function name="CGEventPost" swt_gen="true">
+		<arg name="tap" swt_gen="true"></arg>
+		<arg name="event" swt_gen="true"></arg>
+	</function>
+	<function name="CGGetDisplaysWithRect" swt_gen="true">
+		<arg name="rect" swt_gen="true"></arg>
+		<arg name="maxDisplays" swt_gen="true"></arg>
+		<arg name="dspys" swt_gen="true"></arg>
+		<arg name="dspyCnt" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGImageCreate" swt_gen="true">
+		<arg name="width" swt_gen="true"></arg>
+		<arg name="height" swt_gen="true"></arg>
+		<arg name="bitsPerComponent" swt_gen="true"></arg>
+		<arg name="bitsPerPixel" swt_gen="true"></arg>
+		<arg name="bytesPerRow" swt_gen="true"></arg>
+		<arg name="colorspace" swt_gen="true"></arg>
+		<arg name="bitmapInfo" swt_gen="true"></arg>
+		<arg name="provider" swt_gen="true"></arg>
+		<arg name="decode" swt_gen="true"></arg>
+		<arg name="shouldInterpolate" swt_gen="true"></arg>
+		<arg name="intent" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGImageGetHeight" swt_gen="true">
+		<arg name="image" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGImageGetWidth" swt_gen="true">
+		<arg name="image" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGImageRelease" swt_gen="true">
+		<arg name="image" swt_gen="true"></arg>
+	</function>
+	<function name="CGPathAddCurveToPoint" swt_gen="true">
+		<arg name="path" swt_gen="true"></arg>
+		<arg name="m" swt_gen="true"></arg>
+		<arg name="cp1x" swt_gen="true"></arg>
+		<arg name="cp1y" swt_gen="true"></arg>
+		<arg name="cp2x" swt_gen="true"></arg>
+		<arg name="cp2y" swt_gen="true"></arg>
+		<arg name="x" swt_gen="true"></arg>
+		<arg name="y" swt_gen="true"></arg>
+	</function>
+	<function name="CGPathAddLineToPoint" swt_gen="true">
+		<arg name="path" swt_gen="true"></arg>
+		<arg name="m" swt_gen="true"></arg>
+		<arg name="x" swt_gen="true"></arg>
+		<arg name="y" swt_gen="true"></arg>
+	</function>
+	<function name="CGPathApply" swt_gen="true">
+		<arg name="path" swt_gen="true"></arg>
+		<arg name="info" swt_gen="true"></arg>
+		<arg name="function" swt_gen="true">
+			<arg swt_gen="true"></arg>
+			<arg></arg>
+			<retval swt_gen="true"></retval>
+		</arg>
+	</function>
+	<function name="CGPathCloseSubpath" swt_gen="true">
+		<arg name="path" swt_gen="true"></arg>
+	</function>
+	<function name="CGPathCreateCopy" swt_gen="true">
+		<arg name="path" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGPathCreateMutable" swt_gen="true">
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGPathMoveToPoint" swt_gen="true">
+		<arg name="path" swt_gen="true"></arg>
+		<arg name="m" swt_gen="true"></arg>
+		<arg name="x" swt_gen="true"></arg>
+		<arg name="y" swt_gen="true"></arg>
+	</function>
+	<function name="CGPathRelease" swt_gen="true">
+		<arg name="path" swt_gen="true"></arg>
+	</function>
+	<function name="CGPostKeyboardEvent" swt_gen="true">
+		<arg name="keyChar" swt_gen="true"></arg>
+		<arg name="virtualKey" swt_gen="true"></arg>
+		<arg name="keyDown" swt_gen="true" swt_java_type="boolean" swt_java_type64="boolean"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGPostMouseEvent" swt_gen="true" swt_variadic_count="4" swt_variadic_java_types="boolean,*">
+		<arg name="mouseCursorPosition" swt_gen="true"></arg>
+		<arg name="updateMouseCursorPosition" swt_gen="true" swt_java_type="boolean"></arg>
+		<arg name="buttonCount" swt_gen="true"></arg>
+		<arg name="mouseButtonDown" swt_gen="true" swt_java_type="boolean"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGPostScrollWheelEvent" swt_gen="true">
+		<arg name="wheelCount" swt_gen="true"></arg>
+		<arg name="wheel1" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGSetLocalEventsFilterDuringSuppressionState" swt_gen="true">
+		<arg name="filter" swt_gen="true"></arg>
+		<arg name="state" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGSetLocalEventsSuppressionInterval" swt_gen="true">
+		<arg name="seconds" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="CGWarpMouseCursorPosition" swt_gen="true">
+		<arg name="newCursorPosition" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+</signatures>
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMDocument.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMDocument.java
new file mode 100644
index 0000000..df4b442
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMDocument.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class DOMDocument extends NSObject {
+
+public DOMDocument() {
+	super();
+}
+
+public DOMDocument(int /*long*/ id) {
+	super(id);
+}
+
+public DOMDocument(id id) {
+	super(id);
+}
+
+public WebFrame webFrame() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_webFrame);
+	return result != 0 ? new WebFrame(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMEvent.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMEvent.java
new file mode 100644
index 0000000..44bd432
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMEvent.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class DOMEvent extends NSObject {
+
+public DOMEvent() {
+	super();
+}
+
+public DOMEvent(int /*long*/ id) {
+	super(id);
+}
+
+public DOMEvent(id id) {
+	super(id);
+}
+
+public void preventDefault() {
+	OS.objc_msgSend(this.id, OS.sel_preventDefault);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMKeyboardEvent.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMKeyboardEvent.java
new file mode 100644
index 0000000..3ce5b47
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMKeyboardEvent.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class DOMKeyboardEvent extends DOMUIEvent {
+
+public DOMKeyboardEvent() {
+	super();
+}
+
+public DOMKeyboardEvent(int /*long*/ id) {
+	super(id);
+}
+
+public DOMKeyboardEvent(id id) {
+	super(id);
+}
+
+public boolean altKey() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_altKey);
+}
+
+public int charCode() {
+	return (int)/*64*/OS.objc_msgSend(this.id, OS.sel_charCode);
+}
+
+public boolean ctrlKey() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_ctrlKey);
+}
+
+public int keyCode() {
+	return (int)/*64*/OS.objc_msgSend(this.id, OS.sel_keyCode);
+}
+
+public boolean metaKey() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_metaKey);
+}
+
+public boolean shiftKey() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_shiftKey);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMMouseEvent.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMMouseEvent.java
new file mode 100644
index 0000000..efd23a5
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMMouseEvent.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class DOMMouseEvent extends DOMUIEvent {
+
+public DOMMouseEvent() {
+	super();
+}
+
+public DOMMouseEvent(int /*long*/ id) {
+	super(id);
+}
+
+public DOMMouseEvent(id id) {
+	super(id);
+}
+
+public boolean altKey() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_altKey);
+}
+
+public short button() {
+	return (short)OS.objc_msgSend(this.id, OS.sel_button);
+}
+
+public int clientX() {
+	return (int)/*64*/OS.objc_msgSend(this.id, OS.sel_clientX);
+}
+
+public int clientY() {
+	return (int)/*64*/OS.objc_msgSend(this.id, OS.sel_clientY);
+}
+
+public boolean ctrlKey() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_ctrlKey);
+}
+
+public boolean metaKey() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_metaKey);
+}
+
+public boolean shiftKey() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_shiftKey);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMUIEvent.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMUIEvent.java
new file mode 100644
index 0000000..053e025
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMUIEvent.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class DOMUIEvent extends DOMEvent {
+
+public DOMUIEvent() {
+	super();
+}
+
+public DOMUIEvent(int /*long*/ id) {
+	super(id);
+}
+
+public DOMUIEvent(id id) {
+	super(id);
+}
+
+public int detail() {
+	return (int)/*64*/OS.objc_msgSend(this.id, OS.sel_detail);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMWheelEvent.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMWheelEvent.java
new file mode 100644
index 0000000..4d2aac4
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/DOMWheelEvent.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class DOMWheelEvent extends NSObject {
+
+public DOMWheelEvent() {
+	super();
+}
+
+public DOMWheelEvent(int /*long*/ id) {
+	super(id);
+}
+
+public DOMWheelEvent(id id) {
+	super(id);
+}
+
+public boolean altKey() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_altKey);
+}
+
+public int clientX() {
+	return (int)/*64*/OS.objc_msgSend(this.id, OS.sel_clientX);
+}
+
+public int clientY() {
+	return (int)/*64*/OS.objc_msgSend(this.id, OS.sel_clientY);
+}
+
+public boolean ctrlKey() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_ctrlKey);
+}
+
+public boolean metaKey() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_metaKey);
+}
+
+public boolean shiftKey() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_shiftKey);
+}
+
+public int wheelDelta() {
+	return (int)/*64*/OS.objc_msgSend(this.id, OS.sel_wheelDelta);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/FoundationFull.bridgesupport.extras b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/FoundationFull.bridgesupport.extras
new file mode 100644
index 0000000..c95ad9a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/FoundationFull.bridgesupport.extras
@@ -0,0 +1,1040 @@
+<?xml version="1.0" encoding="UTF8"?>
+<signatures swt_gen="mixed">
+	<struct name="NSAffineTransformStruct" swt_gen="true">
+		<field name="m11" swt_gen="true"></field>
+		<field name="m12" swt_gen="true"></field>
+		<field name="m21" swt_gen="true"></field>
+		<field name="m22" swt_gen="true"></field>
+		<field name="tX" swt_gen="true"></field>
+		<field name="tY" swt_gen="true"></field>
+	</struct>
+	<struct name="NSPoint" swt_gen="true">
+		<field name="x" swt_gen="true"></field>
+		<field name="y" swt_gen="true"></field>
+	</struct>
+	<struct name="NSRange" swt_gen="true">
+		<field name="location" swt_gen="true"></field>
+		<field name="length" swt_gen="true"></field>
+	</struct>
+	<struct name="NSRect" swt_gen="true">
+		<field name="origin" swt_gen="true"></field>
+		<field name="size" swt_gen="true"></field>
+	</struct>
+	<struct name="NSSize" swt_gen="true">
+		<field name="width" swt_gen="true"></field>
+		<field name="height" swt_gen="true"></field>
+	</struct>
+	<constant name="NSDefaultRunLoopMode" swt_gen="true"></constant>
+	<constant name="NSErrorFailingURLStringKey" swt_gen="true"></constant>
+	<enum name="NSAllApplicationsDirectory" swt_gen="true"></enum>
+	<enum name="NSAllDomainsMask" swt_gen="true"></enum>
+	<enum name="NSNotFound" swt_gen="true"></enum>
+	<enum name="NSOrderedSame" swt_gen="true"></enum>
+	<enum name="NSURLCredentialPersistenceForSession" swt_gen="true"></enum>
+	<enum name="NSURLErrorBadURL" swt_gen="true"></enum>
+	<enum name="NSURLRequestReloadIgnoringLocalCacheData" swt_gen="true"></enum>
+	<enum name="NSUTF8StringEncoding" swt_gen="true"></enum>
+	<function name="NSEqualRects" swt_gen="true">
+		<arg name="aRect" swt_gen="true"></arg>
+		<arg name="bRect" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="NSFileTypeForHFSTypeCode" swt_gen="true">
+		<arg name="hfsFileTypeCode" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="NSGetSizeAndAlignment" swt_gen="true">
+		<arg name="typePtr" swt_gen="true"></arg>
+		<arg name="sizep" swt_gen="true" swt_java_type="int[]" swt_java_type64="long[]"></arg>
+		<arg name="alignp" swt_gen="true" swt_java_type="int[]" swt_java_type64="long[]"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="NSPointInRect" swt_gen="true">
+		<arg name="aPoint" swt_gen="true"></arg>
+		<arg name="aRect" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="NSSearchPathForDirectoriesInDomains" swt_gen="true">
+		<arg name="directory" swt_gen="true"></arg>
+		<arg name="domainMask" swt_gen="true"></arg>
+		<arg name="expandTilde" swt_gen="true"></arg>
+		<retval swt_gen="true"></retval>
+	</function>
+	<function name="NSTemporaryDirectory" swt_gen="true">
+		<retval swt_gen="true"></retval>
+	</function>
+	<class name="NSAppleEventDescriptor" swt_gen="mixed">
+		<method selector="initListDescriptor" swt_gen="true">
+			<retval swt_gen="true" swt_java_type="NSAppleEventDescriptor"></retval>
+		</method>
+	</class>
+	<class name="NSArray" swt_gen="mixed">
+		<method class_method="true" selector="array" swt_gen="true">
+			<retval swt_gen="true" swt_java_type="NSArray"></retval>
+		</method>
+		<method class_method="true" selector="arrayWithObject:" swt_gen="true">
+			<arg name="anObject" swt_gen="true"></arg>
+			<retval swt_alloc="true" swt_gen="true" swt_java_type="NSArray"></retval>
+		</method>
+		<method selector="containsObject:" swt_gen="true">
+			<arg name="anObject" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="count" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="indexOfObjectIdenticalTo:" swt_gen="true">
+			<arg name="anObject" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="objectAtIndex:" swt_gen="true">
+			<arg name="index" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSAttributedString" swt_gen="mixed">
+		<method selector="attributedSubstringFromRange:" swt_gen="true">
+			<arg name="range" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="initWithString:" swt_gen="true">
+			<arg name="str" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSAttributedString"></retval>
+		</method>
+		<method selector="length" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="string" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSAutoreleasePool" swt_gen="mixed">
+		<method class_method="true" selector="enableFreedObjectCheck:" swt_gen="true">
+			<arg name="enable" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSBundle" swt_gen="mixed">
+		<method selector="bundleIdentifier" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="bundlePath" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="bundleWithIdentifier:" swt_gen="true">
+			<arg name="identifier" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="bundleWithPath:" swt_gen="true">
+			<arg name="path" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="infoDictionary" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="mainBundle" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="objectForInfoDictionaryKey:" swt_gen="true">
+			<arg name="key" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="pathForResource:ofType:" swt_gen="true">
+			<arg name="name" swt_gen="true"></arg>
+			<arg name="ext" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="resourcePath" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSCalendarDate" swt_gen="mixed" swt_superclass="NSDate">
+		<method class_method="true" selector="calendarDate" swt_gen="true">
+			<retval swt_gen="true" swt_java_type="NSCalendarDate"></retval>
+		</method>
+		<method class_method="true" selector="dateWithYear:month:day:hour:minute:second:timeZone:" swt_gen="true">
+			<arg name="year" swt_gen="true"></arg>
+			<arg name="month" swt_gen="true"></arg>
+			<arg name="day" swt_gen="true"></arg>
+			<arg name="hour" swt_gen="true"></arg>
+			<arg name="minute" swt_gen="true"></arg>
+			<arg name="second" swt_gen="true"></arg>
+			<arg name="aTimeZone" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSCalendarDate"></retval>
+		</method>
+		<method selector="dayOfMonth" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="hourOfDay" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="minuteOfHour" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="monthOfYear" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="secondOfMinute" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="timeZone" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="yearOfCommonEra" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSCharacterSet" swt_gen="mixed">
+		<method selector="characterIsMember:" swt_gen="true">
+			<arg name="aCharacter" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="decimalDigitCharacterSet" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSCloneCommand" swt_superclass="NSScriptCommand">
+	</class>
+	<class name="NSCloseCommand" swt_superclass="NSScriptCommand">
+	</class>
+	<class name="NSCoder" swt_gen="mixed">
+		<method selector="systemVersion" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSComparisonPredicate" swt_superclass="NSPredicate">
+	</class>
+	<class name="NSCompoundPredicate" swt_superclass="NSPredicate">
+	</class>
+	<class name="NSCountedSet" swt_superclass="NSMutableSet">
+	</class>
+	<class name="NSCreateCommand" swt_superclass="NSScriptCommand">
+	</class>
+	<class name="NSData" swt_gen="mixed">
+		<method selector="bytes" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="dataWithBytes:length:" swt_gen="true">
+			<arg name="bytes" swt_gen="true" swt_java_type="byte[]"></arg>
+			<arg name="length" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSData"></retval>
+		</method>
+		<method selector="getBytes:" swt_gen="true">
+			<arg name="buffer" swt_gen="true" swt_java_type="byte[]"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="getBytes:length:" swt_gen="true">
+			<arg name="buffer" swt_gen="true"></arg>
+			<arg name="length" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="length" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSDate" swt_gen="mixed">
+		<method selector="dateWithCalendarFormat:timeZone:" swt_gen="true">
+			<arg name="format" swt_gen="true"></arg>
+			<arg name="aTimeZone" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="dateWithTimeIntervalSinceNow:" swt_gen="true">
+			<arg name="secs" swt_gen="true"></arg>
+			<retval swt_alloc="true" swt_gen="true" swt_java_type="NSDate"></retval>
+		</method>
+		<method class_method="true" selector="distantFuture" swt_gen="true">
+			<retval swt_alloc="true" swt_gen="true" swt_java_type="NSDate"></retval>
+		</method>
+	</class>
+	<class name="NSDateFormatter" swt_superclass="NSFormatter">
+	</class>
+	<class name="NSDecimalNumber" swt_superclass="NSNumber">
+	</class>
+	<class name="NSDeleteCommand" swt_superclass="NSScriptCommand">
+	</class>
+	<class name="NSDictionary" swt_gen="mixed">
+		<method selector="allKeys" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="count" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="dictionaryWithObject:forKey:" swt_gen="true">
+			<arg name="object" swt_gen="true"></arg>
+			<arg name="key" swt_gen="true"></arg>
+			<retval swt_alloc="true" swt_gen="true" swt_java_type="NSDictionary"></retval>
+		</method>
+		<method selector="objectEnumerator" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="objectForKey:" swt_gen="true">
+			<arg name="aKey" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="valueForKey:" swt_gen="true">
+			<arg name="key" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSDirectoryEnumerator" swt_gen="mixed" swt_superclass="NSEnumerator">
+		<method selector="skipDescendents" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSDistantObject" swt_superclass="NSProxy">
+	</class>
+	<class name="NSDistributedNotificationCenter" swt_superclass="NSNotificationCenter">
+	</class>
+	<class name="NSEnumerator" swt_gen="mixed">
+		<method selector="nextObject" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSError" swt_gen="mixed">
+		<method selector="code" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="localizedDescription" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="userInfo" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSFileManager" swt_gen="mixed">
+		<method selector="createFileAtPath:contents:attributes:" swt_gen="true">
+			<arg name="path" swt_gen="true"></arg>
+			<arg name="data" swt_gen="true"></arg>
+			<arg name="attr" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="defaultManager" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="enumeratorAtPath:" swt_gen="true">
+			<arg name="path" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="fileExistsAtPath:isDirectory:" swt_gen="true">
+			<arg name="path" swt_gen="true"></arg>
+			<arg name="isDirectory" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="removeItemAtPath:error:" swt_gen="true">
+			<arg name="path" swt_gen="true"></arg>
+			<arg name="error" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSFormatter" swt_gen="mixed">
+		<method selector="stringForObjectValue:" swt_gen="true">
+			<arg name="obj" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSHTTPCookie" swt_gen="mixed">
+		<method class_method="true" selector="cookiesWithResponseHeaderFields:forURL:" swt_gen="true">
+			<arg name="headerFields" swt_gen="true"></arg>
+			<arg name="URL" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="isSessionOnly" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="name" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="value" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSHTTPCookieStorage" swt_gen="mixed">
+		<method selector="cookies" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="cookiesForURL:" swt_gen="true">
+			<arg name="URL" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="deleteCookie:" swt_gen="true">
+			<arg name="cookie" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setCookie:" swt_gen="true">
+			<arg name="cookie" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="sharedHTTPCookieStorage" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSHTTPURLResponse" swt_superclass="NSURLResponse">
+	</class>
+	<class name="NSIndexSet" swt_gen="mixed">
+		<method selector="containsIndex:" swt_gen="true">
+			<arg name="value" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="count" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="firstIndex" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="getIndexes:maxCount:inIndexRange:" swt_gen="true">
+			<arg name="indexBuffer" swt_gen="true" swt_java_type="int[]" swt_java_type64="long[]"></arg>
+			<arg name="bufferSize" swt_gen="true"></arg>
+			<arg name="range" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="initWithIndex:" swt_gen="true">
+			<arg name="value" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSIndexSet"></retval>
+		</method>
+		<method selector="initWithIndexesInRange:" swt_gen="true">
+			<arg name="range" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSIndexSet"></retval>
+		</method>
+	</class>
+	<class name="NSIndexSpecifier" swt_superclass="NSScriptObjectSpecifier">
+	</class>
+	<class name="NSInputStream" swt_superclass="NSStream">
+	</class>
+	<class name="NSInvocationOperation" swt_superclass="NSOperation">
+	</class>
+	<class name="NSKeyedArchiver" swt_gen="mixed" swt_superclass="NSCoder">
+		<method class_method="true" selector="archivedDataWithRootObject:" swt_gen="true">
+			<arg name="rootObject" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSKeyedUnarchiver" swt_gen="mixed" swt_superclass="NSCoder">
+		<method class_method="true" selector="unarchiveObjectWithData:" swt_gen="true">
+			<arg name="data" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSLogicalTest" swt_superclass="NSScriptWhoseTest">
+	</class>
+	<class name="NSMachBootstrapServer" swt_superclass="NSPortNameServer">
+	</class>
+	<class name="NSMachPort" swt_superclass="NSPort">
+	</class>
+	<class name="NSMessagePortNameServer" swt_superclass="NSPortNameServer">
+	</class>
+	<class name="NSMoveCommand" swt_superclass="NSScriptCommand">
+	</class>
+	<class name="NSMutableArray" swt_gen="mixed" swt_superclass="NSArray">
+		<method selector="addObject:" swt_gen="true">
+			<arg name="anObject" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="addObjectsFromArray:" swt_gen="true">
+			<arg name="otherArray" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="arrayWithCapacity:" swt_gen="true">
+			<arg name="numItems" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSMutableArray"></retval>
+		</method>
+		<method selector="initWithCapacity:" swt_gen="true">
+			<arg name="numItems" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSMutableArray"></retval>
+		</method>
+		<method selector="removeLastObject" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="removeObject:" swt_gen="true">
+			<arg name="anObject" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="removeObjectAtIndex:" swt_gen="true">
+			<arg name="index" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="removeObjectIdenticalTo:" swt_gen="true">
+			<arg name="anObject" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSMutableAttributedString" swt_gen="mixed" swt_superclass="NSAttributedString">
+		<method selector="addAttribute:value:range:" swt_gen="true">
+			<arg name="name" swt_gen="true"></arg>
+			<arg name="value" swt_gen="true"></arg>
+			<arg name="range" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="beginEditing" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="endEditing" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="removeAttribute:range:" swt_gen="true">
+			<arg name="name" swt_gen="true"></arg>
+			<arg name="range" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAttributedString:" swt_gen="true">
+			<arg name="attrString" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSMutableCharacterSet" swt_superclass="NSCharacterSet">
+	</class>
+	<class name="NSMutableData" swt_superclass="NSData">
+	</class>
+	<class name="NSMutableDictionary" swt_gen="mixed" swt_superclass="NSDictionary">
+		<method class_method="true" selector="dictionaryWithCapacity:" swt_gen="true">
+			<arg name="numItems" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSMutableDictionary"></retval>
+		</method>
+		<method selector="initWithCapacity:" swt_gen="true">
+			<arg name="numItems" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSMutableDictionary"></retval>
+		</method>
+		<method selector="removeObjectForKey:" swt_gen="true">
+			<arg name="aKey" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDictionary:" swt_gen="true">
+			<arg name="otherDictionary" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setObject:forKey:" swt_gen="true">
+			<arg name="anObject" swt_gen="true"></arg>
+			<arg name="aKey" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setValue:forKey:" swt_gen="true">
+			<arg name="value" swt_gen="true"></arg>
+			<arg name="key" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSMutableIndexSet" swt_gen="mixed" swt_superclass="NSIndexSet">
+		<method selector="addIndex:" swt_gen="true">
+			<arg name="value" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSMutableSet" swt_gen="mixed" swt_superclass="NSSet">
+		<method selector="addObjectsFromArray:" swt_gen="true">
+			<arg name="array" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSMutableString" swt_gen="mixed" swt_superclass="NSString">
+		<method selector="appendString:" swt_gen="true">
+			<arg name="aString" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSMutableURLRequest" swt_gen="mixed" swt_superclass="NSURLRequest">
+		<method selector="setCachePolicy:" swt_gen="true">
+			<arg name="policy" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setURL:" swt_gen="true">
+			<arg name="URL" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSNameSpecifier" swt_superclass="NSScriptObjectSpecifier">
+	</class>
+	<class name="NSNotification" swt_gen="mixed">
+		<method selector="object" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="userInfo" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSNotificationCenter" swt_gen="mixed">
+		<method selector="addObserver:selector:name:object:" swt_gen="true">
+			<arg name="observer" swt_gen="true"></arg>
+			<arg name="aSelector" swt_gen="true"></arg>
+			<arg name="aName" swt_gen="true"></arg>
+			<arg name="anObject" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="defaultCenter" swt_gen="true">
+			<retval swt_gen="true" swt_java_type="NSNotificationCenter"></retval>
+		</method>
+		<method selector="removeObserver:" swt_gen="true">
+			<arg name="observer" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSNumber" swt_gen="mixed" swt_superclass="NSValue">
+		<method selector="boolValue" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="doubleValue" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="floatValue" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="intValue" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="integerValue" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="numberWithBool:" swt_gen="true">
+			<arg name="value" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="numberWithDouble:" swt_gen="true">
+			<arg name="value" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="numberWithInt:" swt_gen="true">
+			<arg name="value" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="numberWithInteger:" swt_gen="true">
+			<arg name="value" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSNumberFormatter" swt_gen="mixed" swt_superclass="NSFormatter">
+		<method selector="allowsFloats" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="alwaysShowsDecimalSeparator" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="decimalSeparator" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="maximum" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="maximumFractionDigits" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="maximumIntegerDigits" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="minimum" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setAllowsFloats:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMaximum:" swt_gen="true">
+			<arg name="number" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMaximumFractionDigits:" swt_gen="true">
+			<arg name="number" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMaximumIntegerDigits:" swt_gen="true">
+			<arg name="number" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMinimum:" swt_gen="true">
+			<arg name="number" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMinimumFractionDigits:" swt_gen="true">
+			<arg name="number" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setMinimumIntegerDigits:" swt_gen="true">
+			<arg name="number" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setNumberStyle:" swt_gen="true">
+			<arg name="style" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setPartialStringValidationEnabled:" swt_gen="true">
+			<arg name="b" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSObject" swt_gen="mixed">
+		<method selector="autorelease" swt_gen="true">
+			<retval swt_gen="true" swt_java_type="NSObject"></retval>
+		</method>
+		<method selector="cancelAuthenticationChallenge:" swt_gen="true">
+			<arg name="challenge" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="className" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="conformsToProtocol:" swt_gen="true">
+			<arg name="aProtocol" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="copy" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="description" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="init" swt_gen="true">
+			<retval swt_gen="true" swt_java_type="NSObject"></retval>
+		</method>
+		<method selector="isEqual:" swt_gen="true">
+			<arg name="object" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="isEqualTo:" swt_gen="true">
+			<arg name="object" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="isKindOfClass:" swt_gen="true">
+			<arg name="aClass" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="mutableCopy" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="performSelectorOnMainThread:withObject:waitUntilDone:" swt_gen="true">
+			<arg name="aSelector" swt_gen="true"></arg>
+			<arg name="arg" swt_gen="true"></arg>
+			<arg name="wait" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="release" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="respondsToSelector:" swt_gen="true">
+			<arg name="aSelector" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="retain" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="retainCount" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setValue:forKey:" swt_gen="true">
+			<arg name="value" swt_gen="true"></arg>
+			<arg name="key" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="superclass" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="useCredential:forAuthenticationChallenge:" swt_gen="true">
+			<arg name="credential" swt_gen="true"></arg>
+			<arg name="challenge" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="valueForKey:" swt_gen="true">
+			<arg name="key" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSOutputStream" swt_superclass="NSStream">
+	</class>
+	<class name="NSPortCoder" swt_superclass="NSCoder">
+	</class>
+	<class name="NSProtocolChecker" swt_superclass="NSProxy">
+	</class>
+	<class name="NSQuitCommand" swt_superclass="NSScriptCommand">
+	</class>
+	<class name="NSRangeSpecifier" swt_superclass="NSScriptObjectSpecifier">
+	</class>
+	<class name="NSRelativeSpecifier" swt_superclass="NSScriptObjectSpecifier">
+	</class>
+	<class name="NSRunLoop" swt_gen="mixed">
+		<method selector="addTimer:forMode:" swt_gen="true">
+			<arg name="timer" swt_gen="true"></arg>
+			<arg name="mode" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="currentRunLoop" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="mainRunLoop" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="runMode:beforeDate:" swt_gen="true">
+			<arg name="mode" swt_gen="true"></arg>
+			<arg name="limitDate" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSScriptClassDescription" swt_superclass="NSClassDescription">
+	</class>
+	<class name="NSSet" swt_gen="mixed">
+		<method selector="count" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="objectEnumerator" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="set" swt_gen="true">
+			<retval swt_alloc="true" swt_gen="true" swt_java_type="NSSet"></retval>
+		</method>
+	</class>
+	<class name="NSSetCommand" swt_superclass="NSScriptCommand">
+	</class>
+	<class name="NSSocketPort" swt_superclass="NSPort">
+	</class>
+	<class name="NSSocketPortNameServer" swt_superclass="NSPortNameServer">
+	</class>
+	<class name="NSSpecifierTest" swt_superclass="NSScriptWhoseTest">
+	</class>
+	<class name="NSString" swt_gen="mixed">
+		<method selector="UTF8String" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="characterAtIndex:" swt_gen="true">
+			<arg name="index" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="int" swt_java_type64="long"></retval>
+		</method>
+		<method selector="compare:" swt_gen="true">
+			<arg name="string" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="fileSystemRepresentation" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="getCharacters:" swt_gen="true">
+			<arg name="buffer" swt_gen="true" swt_java_type="char[]"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="getCharacters:range:" swt_gen="true">
+			<arg name="buffer" swt_gen="true" swt_java_type="char[]"></arg>
+			<arg name="aRange" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="initWithCharacters:length:" swt_gen="true">
+			<arg name="characters" swt_gen="true" swt_java_type="char[]"></arg>
+			<arg name="length" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSString"></retval>
+		</method>
+		<method selector="isEqualToString:" swt_gen="true">
+			<arg name="aString" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="lastPathComponent" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="length" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="lowercaseString" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="pathExtension" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="stringByAddingPercentEscapesUsingEncoding:" swt_gen="true">
+			<arg name="enc" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="stringByAppendingPathComponent:" swt_gen="true">
+			<arg name="str" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="stringByAppendingString:" swt_gen="true">
+			<arg name="aString" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="stringByDeletingLastPathComponent" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="stringByDeletingPathExtension" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="stringByReplacingOccurrencesOfString:withString:" swt_gen="true">
+			<arg name="target" swt_gen="true"></arg>
+			<arg name="replacement" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="stringWithCharacters:length:" swt_gen="true">
+			<arg name="characters" swt_gen="true" swt_java_type="char[]"></arg>
+			<arg name="length" swt_gen="true"></arg>
+			<retval swt_alloc="true" swt_gen="true" swt_java_type="NSString"></retval>
+		</method>
+		<method class_method="true" selector="stringWithFormat:" swt_gen="true">
+			<arg name="stringWithFormat" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSString"></retval>
+		</method>
+		<method class_method="true" selector="stringWithUTF8String:" swt_gen="true">
+			<arg name="nullTerminatedCString" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSString"></retval>
+		</method>
+	</class>
+	<class name="NSThread" swt_gen="mixed">
+		<method class_method="true" selector="currentThread" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="isMainThread" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="threadDictionary" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSTimeZone" swt_gen="mixed">
+		<method class_method="true" selector="defaultTimeZone" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSTimer" swt_gen="mixed">
+		<method selector="invalidate" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:" swt_gen="true">
+			<arg name="ti" swt_gen="true"></arg>
+			<arg name="aTarget" swt_gen="true"></arg>
+			<arg name="aSelector" swt_gen="true"></arg>
+			<arg name="userInfo" swt_gen="true"></arg>
+			<arg name="yesOrNo" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setFireDate:" swt_gen="true">
+			<arg name="date" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="userInfo" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSURL" swt_gen="mixed">
+		<method class_method="true" selector="URLWithString:" swt_gen="true">
+			<arg name="URLString" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSURL"></retval>
+		</method>
+		<method selector="absoluteString" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="fileURLWithPath:" swt_gen="true">
+			<arg name="path" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSURL"></retval>
+		</method>
+		<method selector="isFileURL" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSURLAuthenticationChallenge" swt_gen="mixed">
+		<method selector="previousFailureCount" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="proposedCredential" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="protectionSpace" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="sender" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSURLCredential" swt_gen="mixed">
+		<method class_method="true" selector="credentialWithUser:password:persistence:" swt_gen="true">
+			<arg name="user" swt_gen="true"></arg>
+			<arg name="password" swt_gen="true"></arg>
+			<arg name="persistence" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="hasPassword" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="password" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="user" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSURLDownload" swt_gen="mixed">
+		<method selector="cancel" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDestination:allowOverwrite:" swt_gen="true">
+			<arg name="path" swt_gen="true"></arg>
+			<arg name="allowOverwrite" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSURLProtectionSpace" swt_gen="mixed">
+		<method selector="host" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="port" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="realm" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSURLRequest" swt_gen="mixed">
+		<method selector="URL" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="initWithURL:" swt_gen="true">
+			<arg name="URL" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="NSURLRequest"></retval>
+		</method>
+		<method class_method="true" selector="requestWithURL:" swt_gen="true">
+			<arg name="URL" swt_gen="true"></arg>
+			<retval swt_alloc="true" swt_gen="true" swt_java_type="NSURLRequest"></retval>
+		</method>
+	</class>
+	<class name="NSUnarchiver" swt_superclass="NSCoder">
+	</class>
+	<class name="NSUniqueIDSpecifier" swt_superclass="NSScriptObjectSpecifier">
+	</class>
+	<class name="NSValue" swt_gen="mixed">
+		<method selector="objCType" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="pointValue" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="rangeValue" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="rectValue" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="sizeValue" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="valueWithPoint:" swt_gen="true">
+			<arg name="point" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="valueWithRange:" swt_gen="true">
+			<arg name="range" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="valueWithRect:" swt_gen="true">
+			<arg name="rect" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="valueWithSize:" swt_gen="true">
+			<arg name="size" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSWhoseSpecifier" swt_superclass="NSScriptObjectSpecifier">
+	</class>
+	<class name="NSXMLDTD" swt_superclass="NSXMLNode">
+	</class>
+	<class name="NSXMLDTDNode" swt_superclass="NSXMLNode">
+	</class>
+	<class name="NSXMLDocument" swt_superclass="NSXMLNode">
+	</class>
+	<class name="NSXMLElement" swt_superclass="NSXMLNode">
+	</class>
+	<informal_protocol name="NSURLDownloadDelegate" swt_gen="mixed">
+		<method selector="download:decideDestinationWithSuggestedFilename:" swt_gen="true">
+			<arg name="download" swt_gen="true"></arg>
+			<arg name="filename" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+</signatures>
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSActionCell.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSActionCell.java
new file mode 100644
index 0000000..6796aa2
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSActionCell.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSActionCell extends NSCell {
+
+public NSActionCell() {
+	super();
+}
+
+public NSActionCell(int /*long*/ id) {
+	super(id);
+}
+
+public NSActionCell(id id) {
+	super(id);
+}
+
+public int /*long*/ action() {
+	return OS.objc_msgSend(this.id, OS.sel_action);
+}
+
+public void setAction(int /*long*/ aSelector) {
+	OS.objc_msgSend(this.id, OS.sel_setAction_, aSelector);
+}
+
+public void setTarget(id anObject) {
+	OS.objc_msgSend(this.id, OS.sel_setTarget_, anObject != null ? anObject.id : 0);
+}
+
+public id target() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_target);
+	return result != 0 ? new id(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAffineTransform.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAffineTransform.java
new file mode 100644
index 0000000..51eeee3
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAffineTransform.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSAffineTransform extends NSObject {
+
+public NSAffineTransform() {
+	super();
+}
+
+public NSAffineTransform(int /*long*/ id) {
+	super(id);
+}
+
+public NSAffineTransform(id id) {
+	super(id);
+}
+
+public void concat() {
+	OS.objc_msgSend(this.id, OS.sel_concat);
+}
+
+public NSAffineTransform initWithTransform(NSAffineTransform transform) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithTransform_, transform != null ? transform.id : 0);
+	return result == this.id ? this : (result != 0 ? new NSAffineTransform(result) : null);
+}
+
+public void invert() {
+	OS.objc_msgSend(this.id, OS.sel_invert);
+}
+
+public void prependTransform(NSAffineTransform transform) {
+	OS.objc_msgSend(this.id, OS.sel_prependTransform_, transform != null ? transform.id : 0);
+}
+
+public void rotateByDegrees(float /*double*/ angle) {
+	OS.objc_msgSend(this.id, OS.sel_rotateByDegrees_, angle);
+}
+
+public void scaleXBy(float /*double*/ scaleX, float /*double*/ scaleY) {
+	OS.objc_msgSend(this.id, OS.sel_scaleXBy_yBy_, scaleX, scaleY);
+}
+
+public void set() {
+	OS.objc_msgSend(this.id, OS.sel_set);
+}
+
+public void setTransformStruct(NSAffineTransformStruct transformStruct) {
+	OS.objc_msgSend(this.id, OS.sel_setTransformStruct_, transformStruct);
+}
+
+public static NSAffineTransform transform() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSAffineTransform, OS.sel_transform);
+	return result != 0 ? new NSAffineTransform(result) : null;
+}
+
+public NSPoint transformPoint(NSPoint aPoint) {
+	NSPoint result = new NSPoint();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_transformPoint_, aPoint);
+	return result;
+}
+
+public NSSize transformSize(NSSize aSize) {
+	NSSize result = new NSSize();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_transformSize_, aSize);
+	return result;
+}
+
+public NSAffineTransformStruct transformStruct() {
+	NSAffineTransformStruct result = new NSAffineTransformStruct();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_transformStruct);
+	return result;
+}
+
+public void translateXBy(float /*double*/ deltaX, float /*double*/ deltaY) {
+	OS.objc_msgSend(this.id, OS.sel_translateXBy_yBy_, deltaX, deltaY);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAffineTransformStruct.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAffineTransformStruct.java
new file mode 100644
index 0000000..82b75ea
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAffineTransformStruct.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+public class NSAffineTransformStruct {
+	public float /*double*/ m11, m12, m21, m22;
+	public float /*double*/ tX, tY;
+	public static final int sizeof = OS.NSAffineTransformStruct_sizeof();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAlert.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAlert.java
new file mode 100644
index 0000000..6d3ed2d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAlert.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSAlert extends NSObject {
+
+public NSAlert() {
+	super();
+}
+
+public NSAlert(int /*long*/ id) {
+	super(id);
+}
+
+public NSAlert(id id) {
+	super(id);
+}
+
+public NSButton addButtonWithTitle(NSString title) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_addButtonWithTitle_, title != null ? title.id : 0);
+	return result != 0 ? new NSButton(result) : null;
+}
+
+public void beginSheetModalForWindow(NSWindow window, id delegate, int /*long*/ didEndSelector, int /*long*/ contextInfo) {
+	OS.objc_msgSend(this.id, OS.sel_beginSheetModalForWindow_modalDelegate_didEndSelector_contextInfo_, window != null ? window.id : 0, delegate != null ? delegate.id : 0, didEndSelector, contextInfo);
+}
+
+public int /*long*/ runModal() {
+	return OS.objc_msgSend(this.id, OS.sel_runModal);
+}
+
+public void setAlertStyle(int /*long*/ style) {
+	OS.objc_msgSend(this.id, OS.sel_setAlertStyle_, style);
+}
+
+public void setMessageText(NSString messageText) {
+	OS.objc_msgSend(this.id, OS.sel_setMessageText_, messageText != null ? messageText.id : 0);
+}
+
+public NSWindow window() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_window);
+	return result != 0 ? new NSWindow(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAppleEventDescriptor.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAppleEventDescriptor.java
new file mode 100644
index 0000000..6790acb
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAppleEventDescriptor.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSAppleEventDescriptor extends NSObject {
+
+public NSAppleEventDescriptor() {
+	super();
+}
+
+public NSAppleEventDescriptor(int /*long*/ id) {
+	super(id);
+}
+
+public NSAppleEventDescriptor(id id) {
+	super(id);
+}
+
+public NSAppleEventDescriptor initListDescriptor() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initListDescriptor);
+	return result == this.id ? this : (result != 0 ? new NSAppleEventDescriptor(result) : null);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSApplication.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSApplication.java
new file mode 100644
index 0000000..8c02f8a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSApplication.java
@@ -0,0 +1,142 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSApplication extends NSResponder {
+
+public NSApplication() {
+	super();
+}
+
+public NSApplication(int /*long*/ id) {
+	super(id);
+}
+
+public NSApplication(id id) {
+	super(id);
+}
+
+public void activateIgnoringOtherApps(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_activateIgnoringOtherApps_, flag);
+}
+
+public void beginSheet(NSWindow sheet, NSWindow docWindow, id modalDelegate, int /*long*/ didEndSelector, int /*long*/ contextInfo) {
+	OS.objc_msgSend(this.id, OS.sel_beginSheet_modalForWindow_modalDelegate_didEndSelector_contextInfo_, sheet != null ? sheet.id : 0, docWindow != null ? docWindow.id : 0, modalDelegate != null ? modalDelegate.id : 0, didEndSelector, contextInfo);
+}
+
+public NSEvent currentEvent() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_currentEvent);
+	return result != 0 ? new NSEvent(result) : null;
+}
+
+public void endSheet(NSWindow sheet, int /*long*/ returnCode) {
+	OS.objc_msgSend(this.id, OS.sel_endSheet_returnCode_, sheet != null ? sheet.id : 0, returnCode);
+}
+
+public void finishLaunching() {
+	OS.objc_msgSend(this.id, OS.sel_finishLaunching);
+}
+
+public void hide(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_hide_, sender != null ? sender.id : 0);
+}
+
+public void hideOtherApplications(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_hideOtherApplications_, sender != null ? sender.id : 0);
+}
+
+public boolean isActive() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isActive);
+}
+
+public boolean isRunning() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isRunning);
+}
+
+public NSWindow keyWindow() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_keyWindow);
+	return result != 0 ? new NSWindow(result) : null;
+}
+
+public NSMenu mainMenu() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_mainMenu);
+	return result != 0 ? new NSMenu(result) : null;
+}
+
+public NSEvent nextEventMatchingMask(int /*long*/ mask, NSDate expiration, NSString mode, boolean deqFlag) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_nextEventMatchingMask_untilDate_inMode_dequeue_, mask, expiration != null ? expiration.id : 0, mode != null ? mode.id : 0, deqFlag);
+	return result != 0 ? new NSEvent(result) : null;
+}
+
+public void orderFrontStandardAboutPanel(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_orderFrontStandardAboutPanel_, sender != null ? sender.id : 0);
+}
+
+public NSArray orderedWindows() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_orderedWindows);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+public void postEvent(NSEvent event, boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_postEvent_atStart_, event != null ? event.id : 0, flag);
+}
+
+public void run() {
+	OS.objc_msgSend(this.id, OS.sel_run);
+}
+
+public int /*long*/ runModalForWindow(NSWindow theWindow) {
+	return OS.objc_msgSend(this.id, OS.sel_runModalForWindow_, theWindow != null ? theWindow.id : 0);
+}
+
+public void sendEvent(NSEvent theEvent) {
+	OS.objc_msgSend(this.id, OS.sel_sendEvent_, theEvent != null ? theEvent.id : 0);
+}
+
+public void setApplicationIconImage(NSImage image) {
+	OS.objc_msgSend(this.id, OS.sel_setApplicationIconImage_, image != null ? image.id : 0);
+}
+
+public void setDelegate(id anObject) {
+	OS.objc_msgSend(this.id, OS.sel_setDelegate_, anObject != null ? anObject.id : 0);
+}
+
+public void setMainMenu(NSMenu aMenu) {
+	OS.objc_msgSend(this.id, OS.sel_setMainMenu_, aMenu != null ? aMenu.id : 0);
+}
+
+public void setServicesMenu(NSMenu aMenu) {
+	OS.objc_msgSend(this.id, OS.sel_setServicesMenu_, aMenu != null ? aMenu.id : 0);
+}
+
+public static NSApplication sharedApplication() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSApplication, OS.sel_sharedApplication);
+	return result != 0 ? new NSApplication(result) : null;
+}
+
+public void stop(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_stop_, sender != null ? sender.id : 0);
+}
+
+public void terminate(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_terminate_, sender != null ? sender.id : 0);
+}
+
+public void unhideAllApplications(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_unhideAllApplications_, sender != null ? sender.id : 0);
+}
+
+public NSArray windows() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_windows);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSArray.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSArray.java
new file mode 100644
index 0000000..6d63291
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSArray.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSArray extends NSObject {
+
+public NSArray() {
+	super();
+}
+
+public NSArray(int /*long*/ id) {
+	super(id);
+}
+
+public NSArray(id id) {
+	super(id);
+}
+
+public static NSArray array() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSArray, OS.sel_array);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+public static NSArray arrayWithObject(id anObject) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSArray, OS.sel_arrayWithObject_, anObject != null ? anObject.id : 0);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+public boolean containsObject(id anObject) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_containsObject_, anObject != null ? anObject.id : 0);
+}
+
+public int /*long*/ count() {
+	return OS.objc_msgSend(this.id, OS.sel_count);
+}
+
+public int /*long*/ indexOfObjectIdenticalTo(id anObject) {
+	return OS.objc_msgSend(this.id, OS.sel_indexOfObjectIdenticalTo_, anObject != null ? anObject.id : 0);
+}
+
+public id objectAtIndex(int /*long*/ index) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_objectAtIndex_, index);
+	return result != 0 ? new id(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAttributedString.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAttributedString.java
new file mode 100644
index 0000000..9ff15a5
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAttributedString.java
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSAttributedString extends NSObject {
+
+public NSAttributedString() {
+	super();
+}
+
+public NSAttributedString(int /*long*/ id) {
+	super(id);
+}
+
+public NSAttributedString(id id) {
+	super(id);
+}
+
+public static NSAttributedString attributedStringWithAttachment(NSTextAttachment attachment) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSAttributedString, OS.sel_attributedStringWithAttachment_, attachment != null ? attachment.id : 0);
+	return result != 0 ? new NSAttributedString(result) : null;
+}
+
+public NSDictionary attributesAtIndex(int /*long*/ location, int /*long*/ range, NSRange rangeLimit) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_attributesAtIndex_longestEffectiveRange_inRange_, location, range, rangeLimit);
+	return result != 0 ? new NSDictionary(result) : null;
+}
+
+public NSRange doubleClickAtIndex(int /*long*/ location) {
+	NSRange result = new NSRange();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_doubleClickAtIndex_, location);
+	return result;
+}
+
+public void drawAtPoint(NSPoint point) {
+	OS.objc_msgSend(this.id, OS.sel_drawAtPoint_, point);
+}
+
+public void drawInRect(NSRect rect) {
+	OS.objc_msgSend(this.id, OS.sel_drawInRect_, rect);
+}
+
+public NSAttributedString initWithString(NSString str, NSDictionary attrs) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithString_attributes_, str != null ? str.id : 0, attrs != null ? attrs.id : 0);
+	return result == this.id ? this : (result != 0 ? new NSAttributedString(result) : null);
+}
+
+public int /*long*/ nextWordFromIndex(int /*long*/ location, boolean isForward) {
+	return OS.objc_msgSend(this.id, OS.sel_nextWordFromIndex_forward_, location, isForward);
+}
+
+public NSSize size() {
+	NSSize result = new NSSize();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_size);
+	return result;
+}
+
+public NSAttributedString attributedSubstringFromRange(NSRange range) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_attributedSubstringFromRange_, range);
+	return result == this.id ? this : (result != 0 ? new NSAttributedString(result) : null);
+}
+
+public NSAttributedString initWithString(NSString str) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithString_, str != null ? str.id : 0);
+	return result == this.id ? this : (result != 0 ? new NSAttributedString(result) : null);
+}
+
+public int /*long*/ length() {
+	return OS.objc_msgSend(this.id, OS.sel_length);
+}
+
+public NSString string() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_string);
+	return result != 0 ? new NSString(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAutoreleasePool.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAutoreleasePool.java
new file mode 100644
index 0000000..05eb429
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSAutoreleasePool.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSAutoreleasePool extends NSObject {
+
+public NSAutoreleasePool() {
+	super();
+}
+
+public NSAutoreleasePool(int /*long*/ id) {
+	super(id);
+}
+
+public NSAutoreleasePool(id id) {
+	super(id);
+}
+
+public static void enableFreedObjectCheck(boolean enable) {
+	OS.objc_msgSend(OS.class_NSAutoreleasePool, OS.sel_enableFreedObjectCheck_, enable);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBezierPath.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBezierPath.java
new file mode 100644
index 0000000..099699b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBezierPath.java
@@ -0,0 +1,184 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSBezierPath extends NSObject {
+
+public NSBezierPath() {
+	super();
+}
+
+public NSBezierPath(int /*long*/ id) {
+	super(id);
+}
+
+public NSBezierPath(id id) {
+	super(id);
+}
+
+public void addClip() {
+	OS.objc_msgSend(this.id, OS.sel_addClip);
+}
+
+public void appendBezierPath(NSBezierPath path) {
+	OS.objc_msgSend(this.id, OS.sel_appendBezierPath_, path != null ? path.id : 0);
+}
+
+public void appendBezierPathWithArcWithCenter(NSPoint center, float /*double*/ radius, float /*double*/ startAngle, float /*double*/ endAngle) {
+	OS.objc_msgSend(this.id, OS.sel_appendBezierPathWithArcWithCenter_radius_startAngle_endAngle_, center, radius, startAngle, endAngle);
+}
+
+public void appendBezierPathWithArcWithCenter(NSPoint center, float /*double*/ radius, float /*double*/ startAngle, float /*double*/ endAngle, boolean clockwise) {
+	OS.objc_msgSend(this.id, OS.sel_appendBezierPathWithArcWithCenter_radius_startAngle_endAngle_clockwise_, center, radius, startAngle, endAngle, clockwise);
+}
+
+public void appendBezierPathWithGlyphs(int /*long*/ glyphs, int /*long*/ count, NSFont font) {
+	OS.objc_msgSend(this.id, OS.sel_appendBezierPathWithGlyphs_count_inFont_, glyphs, count, font != null ? font.id : 0);
+}
+
+public void appendBezierPathWithOvalInRect(NSRect rect) {
+	OS.objc_msgSend(this.id, OS.sel_appendBezierPathWithOvalInRect_, rect);
+}
+
+public void appendBezierPathWithRect(NSRect rect) {
+	OS.objc_msgSend(this.id, OS.sel_appendBezierPathWithRect_, rect);
+}
+
+public void appendBezierPathWithRoundedRect(NSRect rect, float /*double*/ xRadius, float /*double*/ yRadius) {
+	OS.objc_msgSend(this.id, OS.sel_appendBezierPathWithRoundedRect_xRadius_yRadius_, rect, xRadius, yRadius);
+}
+
+public static NSBezierPath bezierPath() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSBezierPath, OS.sel_bezierPath);
+	return result != 0 ? new NSBezierPath(result) : null;
+}
+
+public NSBezierPath bezierPathByFlatteningPath() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_bezierPathByFlatteningPath);
+	return result == this.id ? this : (result != 0 ? new NSBezierPath(result) : null);
+}
+
+public static NSBezierPath bezierPathWithRect(NSRect rect) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSBezierPath, OS.sel_bezierPathWithRect_, rect);
+	return result != 0 ? new NSBezierPath(result) : null;
+}
+
+public NSRect bounds() {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_bounds);
+	return result;
+}
+
+public void closePath() {
+	OS.objc_msgSend(this.id, OS.sel_closePath);
+}
+
+public boolean containsPoint(NSPoint point) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_containsPoint_, point);
+}
+
+public NSRect controlPointBounds() {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_controlPointBounds);
+	return result;
+}
+
+public NSPoint currentPoint() {
+	NSPoint result = new NSPoint();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_currentPoint);
+	return result;
+}
+
+public void curveToPoint(NSPoint endPoint, NSPoint controlPoint1, NSPoint controlPoint2) {
+	OS.objc_msgSend(this.id, OS.sel_curveToPoint_controlPoint1_controlPoint2_, endPoint, controlPoint1, controlPoint2);
+}
+
+public static float /*double*/ defaultFlatness() {
+	return (float)OS.objc_msgSend_fpret(OS.class_NSBezierPath, OS.sel_defaultFlatness);
+}
+
+public int /*long*/ elementAtIndex(int /*long*/ index, int /*long*/ points) {
+	return OS.objc_msgSend(this.id, OS.sel_elementAtIndex_associatedPoints_, index, points);
+}
+
+public int /*long*/ elementCount() {
+	return OS.objc_msgSend(this.id, OS.sel_elementCount);
+}
+
+public void fill() {
+	OS.objc_msgSend(this.id, OS.sel_fill);
+}
+
+public static void fillRect(NSRect rect) {
+	OS.objc_msgSend(OS.class_NSBezierPath, OS.sel_fillRect_, rect);
+}
+
+public boolean isEmpty() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isEmpty);
+}
+
+public void lineToPoint(NSPoint point) {
+	OS.objc_msgSend(this.id, OS.sel_lineToPoint_, point);
+}
+
+public void moveToPoint(NSPoint point) {
+	OS.objc_msgSend(this.id, OS.sel_moveToPoint_, point);
+}
+
+public void removeAllPoints() {
+	OS.objc_msgSend(this.id, OS.sel_removeAllPoints);
+}
+
+public void setClip() {
+	OS.objc_msgSend(this.id, OS.sel_setClip);
+}
+
+public static void setDefaultFlatness(float /*double*/ flatness) {
+	OS.objc_msgSend(OS.class_NSBezierPath, OS.sel_setDefaultFlatness_, flatness);
+}
+
+public void setLineCapStyle(int /*long*/ lineCapStyle) {
+	OS.objc_msgSend(this.id, OS.sel_setLineCapStyle_, lineCapStyle);
+}
+
+public void setLineDash(float[] /*double[]*/ pattern, int /*long*/ count, float /*double*/ phase) {
+	OS.objc_msgSend(this.id, OS.sel_setLineDash_count_phase_, pattern, count, phase);
+}
+
+public void setLineJoinStyle(int /*long*/ lineJoinStyle) {
+	OS.objc_msgSend(this.id, OS.sel_setLineJoinStyle_, lineJoinStyle);
+}
+
+public void setLineWidth(float /*double*/ lineWidth) {
+	OS.objc_msgSend(this.id, OS.sel_setLineWidth_, lineWidth);
+}
+
+public void setMiterLimit(float /*double*/ miterLimit) {
+	OS.objc_msgSend(this.id, OS.sel_setMiterLimit_, miterLimit);
+}
+
+public void setWindingRule(int /*long*/ windingRule) {
+	OS.objc_msgSend(this.id, OS.sel_setWindingRule_, windingRule);
+}
+
+public void stroke() {
+	OS.objc_msgSend(this.id, OS.sel_stroke);
+}
+
+public static void strokeRect(NSRect rect) {
+	OS.objc_msgSend(OS.class_NSBezierPath, OS.sel_strokeRect_, rect);
+}
+
+public void transformUsingAffineTransform(NSAffineTransform transform) {
+	OS.objc_msgSend(this.id, OS.sel_transformUsingAffineTransform_, transform != null ? transform.id : 0);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBitmapImageRep.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBitmapImageRep.java
new file mode 100644
index 0000000..82725ab
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBitmapImageRep.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSBitmapImageRep extends NSImageRep {
+
+public NSBitmapImageRep() {
+	super();
+}
+
+public NSBitmapImageRep(int /*long*/ id) {
+	super(id);
+}
+
+public NSBitmapImageRep(id id) {
+	super(id);
+}
+
+public NSData TIFFRepresentation() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_TIFFRepresentation);
+	return result != 0 ? new NSData(result) : null;
+}
+
+public int /*long*/ bitmapData() {
+	return OS.objc_msgSend(this.id, OS.sel_bitmapData);
+}
+
+public int /*long*/ bitmapFormat() {
+	return OS.objc_msgSend(this.id, OS.sel_bitmapFormat);
+}
+
+public int /*long*/ bitsPerPixel() {
+	return OS.objc_msgSend(this.id, OS.sel_bitsPerPixel);
+}
+
+public int /*long*/ bytesPerPlane() {
+	return OS.objc_msgSend(this.id, OS.sel_bytesPerPlane);
+}
+
+public int /*long*/ bytesPerRow() {
+	return OS.objc_msgSend(this.id, OS.sel_bytesPerRow);
+}
+
+public NSColor colorAtX(int /*long*/ x, int /*long*/ y) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_colorAtX_y_, x, y);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public void getBitmapDataPlanes(int[] /*long[]*/ data) {
+	OS.objc_msgSend(this.id, OS.sel_getBitmapDataPlanes_, data);
+}
+
+public static id imageRepWithData(NSData data) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSBitmapImageRep, OS.sel_imageRepWithData_, data != null ? data.id : 0);
+	return result != 0 ? new id(result) : null;
+}
+
+public NSBitmapImageRep initWithBitmapDataPlanes(int /*long*/ planes, int /*long*/ width, int /*long*/ height, int /*long*/ bps, int /*long*/ spp, boolean alpha, boolean isPlanar, NSString colorSpaceName, int /*long*/ bitmapFormat, int /*long*/ rBytes, int /*long*/ pBits) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithBitmapDataPlanes_pixelsWide_pixelsHigh_bitsPerSample_samplesPerPixel_hasAlpha_isPlanar_colorSpaceName_bitmapFormat_bytesPerRow_bitsPerPixel_, planes, width, height, bps, spp, alpha, isPlanar, colorSpaceName != null ? colorSpaceName.id : 0, bitmapFormat, rBytes, pBits);
+	return result == this.id ? this : (result != 0 ? new NSBitmapImageRep(result) : null);
+}
+
+public NSBitmapImageRep initWithBitmapDataPlanes(int /*long*/ planes, int /*long*/ width, int /*long*/ height, int /*long*/ bps, int /*long*/ spp, boolean alpha, boolean isPlanar, NSString colorSpaceName, int /*long*/ rBytes, int /*long*/ pBits) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithBitmapDataPlanes_pixelsWide_pixelsHigh_bitsPerSample_samplesPerPixel_hasAlpha_isPlanar_colorSpaceName_bytesPerRow_bitsPerPixel_, planes, width, height, bps, spp, alpha, isPlanar, colorSpaceName != null ? colorSpaceName.id : 0, rBytes, pBits);
+	return result == this.id ? this : (result != 0 ? new NSBitmapImageRep(result) : null);
+}
+
+public NSBitmapImageRep initWithFocusedViewRect(NSRect rect) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithFocusedViewRect_, rect);
+	return result == this.id ? this : (result != 0 ? new NSBitmapImageRep(result) : null);
+}
+
+public boolean isPlanar() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isPlanar);
+}
+
+public int /*long*/ numberOfPlanes() {
+	return OS.objc_msgSend(this.id, OS.sel_numberOfPlanes);
+}
+
+public int /*long*/ samplesPerPixel() {
+	return OS.objc_msgSend(this.id, OS.sel_samplesPerPixel);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBox.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBox.java
new file mode 100644
index 0000000..8888454
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBox.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSBox extends NSView {
+
+public NSBox() {
+	super();
+}
+
+public NSBox(int /*long*/ id) {
+	super(id);
+}
+
+public NSBox(id id) {
+	super(id);
+}
+
+public float /*double*/ borderWidth() {
+	return (float)OS.objc_msgSend_fpret(this.id, OS.sel_borderWidth);
+}
+
+public NSView contentView() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_contentView);
+	return result != 0 ? new NSView(result) : null;
+}
+
+public NSSize contentViewMargins() {
+	NSSize result = new NSSize();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_contentViewMargins);
+	return result;
+}
+
+public void setBorderType(int /*long*/ aType) {
+	OS.objc_msgSend(this.id, OS.sel_setBorderType_, aType);
+}
+
+public void setBorderWidth(float /*double*/ borderWidth) {
+	OS.objc_msgSend(this.id, OS.sel_setBorderWidth_, borderWidth);
+}
+
+public void setBoxType(int /*long*/ boxType) {
+	OS.objc_msgSend(this.id, OS.sel_setBoxType_, boxType);
+}
+
+public void setContentView(NSView aView) {
+	OS.objc_msgSend(this.id, OS.sel_setContentView_, aView != null ? aView.id : 0);
+}
+
+public void setContentViewMargins(NSSize offsetSize) {
+	OS.objc_msgSend(this.id, OS.sel_setContentViewMargins_, offsetSize);
+}
+
+public void setFillColor(NSColor fillColor) {
+	OS.objc_msgSend(this.id, OS.sel_setFillColor_, fillColor != null ? fillColor.id : 0);
+}
+
+public void setTitle(NSString aString) {
+	OS.objc_msgSend(this.id, OS.sel_setTitle_, aString != null ? aString.id : 0);
+}
+
+public void setTitleFont(NSFont fontObj) {
+	OS.objc_msgSend(this.id, OS.sel_setTitleFont_, fontObj != null ? fontObj.id : 0);
+}
+
+public void setTitlePosition(int /*long*/ aPosition) {
+	OS.objc_msgSend(this.id, OS.sel_setTitlePosition_, aPosition);
+}
+
+public void sizeToFit() {
+	OS.objc_msgSend(this.id, OS.sel_sizeToFit);
+}
+
+public NSCell titleCell() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_titleCell);
+	return result != 0 ? new NSCell(result) : null;
+}
+
+public NSFont titleFont() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_titleFont);
+	return result != 0 ? new NSFont(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBrowserCell.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBrowserCell.java
new file mode 100644
index 0000000..e096e93
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBrowserCell.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSBrowserCell extends NSCell {
+
+public NSBrowserCell() {
+	super();
+}
+
+public NSBrowserCell(int /*long*/ id) {
+	super(id);
+}
+
+public NSBrowserCell(id id) {
+	super(id);
+}
+
+public NSColor highlightColorInView(NSView controlView) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_highlightColorInView_, controlView != null ? controlView.id : 0);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public void setLeaf(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setLeaf_, flag);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBundle.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBundle.java
new file mode 100644
index 0000000..e65d4c5
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSBundle.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSBundle extends NSObject {
+
+public NSBundle() {
+	super();
+}
+
+public NSBundle(int /*long*/ id) {
+	super(id);
+}
+
+public NSBundle(id id) {
+	super(id);
+}
+
+public static boolean loadNibFile(NSString fileName, NSDictionary context, int /*long*/ zone) {
+	return OS.objc_msgSend_bool(OS.class_NSBundle, OS.sel_loadNibFile_externalNameTable_withZone_, fileName != null ? fileName.id : 0, context != null ? context.id : 0, zone);
+}
+
+public NSString bundleIdentifier() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_bundleIdentifier);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public NSString bundlePath() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_bundlePath);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public static NSBundle bundleWithIdentifier(NSString identifier) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSBundle, OS.sel_bundleWithIdentifier_, identifier != null ? identifier.id : 0);
+	return result != 0 ? new NSBundle(result) : null;
+}
+
+public static NSBundle bundleWithPath(NSString path) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSBundle, OS.sel_bundleWithPath_, path != null ? path.id : 0);
+	return result != 0 ? new NSBundle(result) : null;
+}
+
+public NSDictionary infoDictionary() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_infoDictionary);
+	return result != 0 ? new NSDictionary(result) : null;
+}
+
+public static NSBundle mainBundle() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSBundle, OS.sel_mainBundle);
+	return result != 0 ? new NSBundle(result) : null;
+}
+
+public id objectForInfoDictionaryKey(NSString key) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_objectForInfoDictionaryKey_, key != null ? key.id : 0);
+	return result != 0 ? new id(result) : null;
+}
+
+public NSString pathForResource(NSString name, NSString ext) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_pathForResource_ofType_, name != null ? name.id : 0, ext != null ? ext.id : 0);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public NSString resourcePath() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_resourcePath);
+	return result != 0 ? new NSString(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSButton.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSButton.java
new file mode 100644
index 0000000..b26e093
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSButton.java
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSButton extends NSControl {
+
+public NSButton() {
+	super();
+}
+
+public NSButton(int /*long*/ id) {
+	super(id);
+}
+
+public NSButton(id id) {
+	super(id);
+}
+
+public NSAttributedString attributedTitle() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_attributedTitle);
+	return result != 0 ? new NSAttributedString(result) : null;
+}
+
+public void setAllowsMixedState(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setAllowsMixedState_, flag);
+}
+
+public void setAttributedTitle(NSAttributedString aString) {
+	OS.objc_msgSend(this.id, OS.sel_setAttributedTitle_, aString != null ? aString.id : 0);
+}
+
+public void setBezelStyle(int /*long*/ bezelStyle) {
+	OS.objc_msgSend(this.id, OS.sel_setBezelStyle_, bezelStyle);
+}
+
+public void setBordered(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setBordered_, flag);
+}
+
+public void setButtonType(int /*long*/ aType) {
+	OS.objc_msgSend(this.id, OS.sel_setButtonType_, aType);
+}
+
+public void setImage(NSImage image) {
+	OS.objc_msgSend(this.id, OS.sel_setImage_, image != null ? image.id : 0);
+}
+
+public void setImagePosition(int /*long*/ aPosition) {
+	OS.objc_msgSend(this.id, OS.sel_setImagePosition_, aPosition);
+}
+
+public void setKeyEquivalent(NSString charCode) {
+	OS.objc_msgSend(this.id, OS.sel_setKeyEquivalent_, charCode != null ? charCode.id : 0);
+}
+
+public void setState(int /*long*/ value) {
+	OS.objc_msgSend(this.id, OS.sel_setState_, value);
+}
+
+public void setTitle(NSString aString) {
+	OS.objc_msgSend(this.id, OS.sel_setTitle_, aString != null ? aString.id : 0);
+}
+
+public int /*long*/ state() {
+	return OS.objc_msgSend(this.id, OS.sel_state);
+}
+
+public static int /*long*/ cellClass() {
+	return OS.objc_msgSend(OS.class_NSButton, OS.sel_cellClass);
+}
+
+public static void setCellClass(int /*long*/ factoryId) {
+	OS.objc_msgSend(OS.class_NSButton, OS.sel_setCellClass_, factoryId);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSButtonCell.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSButtonCell.java
new file mode 100644
index 0000000..c179833
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSButtonCell.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSButtonCell extends NSActionCell {
+
+public NSButtonCell() {
+	super();
+}
+
+public NSButtonCell(int /*long*/ id) {
+	super(id);
+}
+
+public NSButtonCell(id id) {
+	super(id);
+}
+
+public void drawImage(NSImage image, NSRect frame, NSView controlView) {
+	OS.objc_msgSend(this.id, OS.sel_drawImage_withFrame_inView_, image != null ? image.id : 0, frame, controlView != null ? controlView.id : 0);
+}
+
+public void setBackgroundColor(NSColor color) {
+	OS.objc_msgSend(this.id, OS.sel_setBackgroundColor_, color != null ? color.id : 0);
+}
+
+public void setButtonType(int /*long*/ aType) {
+	OS.objc_msgSend(this.id, OS.sel_setButtonType_, aType);
+}
+
+public void setImagePosition(int /*long*/ aPosition) {
+	OS.objc_msgSend(this.id, OS.sel_setImagePosition_, aPosition);
+}
+
+public NSString title() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_title);
+	return result != 0 ? new NSString(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCalendarDate.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCalendarDate.java
new file mode 100644
index 0000000..3705512
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCalendarDate.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSCalendarDate extends NSDate {
+
+public NSCalendarDate() {
+	super();
+}
+
+public NSCalendarDate(int /*long*/ id) {
+	super(id);
+}
+
+public NSCalendarDate(id id) {
+	super(id);
+}
+
+public static NSCalendarDate calendarDate() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSCalendarDate, OS.sel_calendarDate);
+	return result != 0 ? new NSCalendarDate(result) : null;
+}
+
+public static NSCalendarDate dateWithYear(int /*long*/ year, int /*long*/ month, int /*long*/ day, int /*long*/ hour, int /*long*/ minute, int /*long*/ second, NSTimeZone aTimeZone) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSCalendarDate, OS.sel_dateWithYear_month_day_hour_minute_second_timeZone_, year, month, day, hour, minute, second, aTimeZone != null ? aTimeZone.id : 0);
+	return result != 0 ? new NSCalendarDate(result) : null;
+}
+
+public int /*long*/ dayOfMonth() {
+	return OS.objc_msgSend(this.id, OS.sel_dayOfMonth);
+}
+
+public int /*long*/ hourOfDay() {
+	return OS.objc_msgSend(this.id, OS.sel_hourOfDay);
+}
+
+public int /*long*/ minuteOfHour() {
+	return OS.objc_msgSend(this.id, OS.sel_minuteOfHour);
+}
+
+public int /*long*/ monthOfYear() {
+	return OS.objc_msgSend(this.id, OS.sel_monthOfYear);
+}
+
+public int /*long*/ secondOfMinute() {
+	return OS.objc_msgSend(this.id, OS.sel_secondOfMinute);
+}
+
+public NSTimeZone timeZone() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_timeZone);
+	return result != 0 ? new NSTimeZone(result) : null;
+}
+
+public int /*long*/ yearOfCommonEra() {
+	return OS.objc_msgSend(this.id, OS.sel_yearOfCommonEra);
+}
+
+public static NSDate dateWithTimeIntervalSinceNow(double secs) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSCalendarDate, OS.sel_dateWithTimeIntervalSinceNow_, secs);
+	return result != 0 ? new NSCalendarDate(result) : null;
+}
+
+public static NSDate distantFuture() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSCalendarDate, OS.sel_distantFuture);
+	return result != 0 ? new NSCalendarDate(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCell.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCell.java
new file mode 100644
index 0000000..231448a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCell.java
@@ -0,0 +1,172 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSCell extends NSObject {
+
+public NSCell() {
+	super();
+}
+
+public NSCell(int /*long*/ id) {
+	super(id);
+}
+
+public NSCell(id id) {
+	super(id);
+}
+
+public NSAttributedString attributedStringValue() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_attributedStringValue);
+	return result != 0 ? new NSAttributedString(result) : null;
+}
+
+public NSSize cellSize() {
+	NSSize result = new NSSize();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_cellSize);
+	return result;
+}
+
+public NSSize cellSizeForBounds(NSRect aRect) {
+	NSSize result = new NSSize();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_cellSizeForBounds_, aRect);
+	return result;
+}
+
+public void drawInteriorWithFrame(NSRect cellFrame, NSView controlView) {
+	OS.objc_msgSend(this.id, OS.sel_drawInteriorWithFrame_inView_, cellFrame, controlView != null ? controlView.id : 0);
+}
+
+public void drawWithExpansionFrame(NSRect cellFrame, NSView view) {
+	OS.objc_msgSend(this.id, OS.sel_drawWithExpansionFrame_inView_, cellFrame, view != null ? view.id : 0);
+}
+
+public NSRect drawingRectForBounds(NSRect theRect) {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_drawingRectForBounds_, theRect);
+	return result;
+}
+
+public NSRect expansionFrameWithFrame(NSRect cellFrame, NSView view) {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_expansionFrameWithFrame_inView_, cellFrame, view != null ? view.id : 0);
+	return result;
+}
+
+public NSFont font() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_font);
+	return result != 0 ? new NSFont(result) : null;
+}
+
+public NSColor highlightColorWithFrame(NSRect cellFrame, NSView controlView) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_highlightColorWithFrame_inView_, cellFrame, controlView != null ? controlView.id : 0);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public int /*long*/ hitTestForEvent(NSEvent event, NSRect cellFrame, NSView controlView) {
+	return OS.objc_msgSend(this.id, OS.sel_hitTestForEvent_inRect_ofView_, event != null ? event.id : 0, cellFrame, controlView != null ? controlView.id : 0);
+}
+
+public NSImage image() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_image);
+	return result != 0 ? new NSImage(result) : null;
+}
+
+public NSRect imageRectForBounds(NSRect theRect) {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_imageRectForBounds_, theRect);
+	return result;
+}
+
+public boolean isEnabled() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isEnabled);
+}
+
+public boolean isHighlighted() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isHighlighted);
+}
+
+public int /*long*/ nextState() {
+	return OS.objc_msgSend(this.id, OS.sel_nextState);
+}
+
+public void setAlignment(int /*long*/ mode) {
+	OS.objc_msgSend(this.id, OS.sel_setAlignment_, mode);
+}
+
+public void setAllowsMixedState(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setAllowsMixedState_, flag);
+}
+
+public void setAttributedStringValue(NSAttributedString obj) {
+	OS.objc_msgSend(this.id, OS.sel_setAttributedStringValue_, obj != null ? obj.id : 0);
+}
+
+public void setControlSize(int /*long*/ size) {
+	OS.objc_msgSend(this.id, OS.sel_setControlSize_, size);
+}
+
+public void setEnabled(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setEnabled_, flag);
+}
+
+public void setFont(NSFont fontObj) {
+	OS.objc_msgSend(this.id, OS.sel_setFont_, fontObj != null ? fontObj.id : 0);
+}
+
+public void setFormatter(NSFormatter newFormatter) {
+	OS.objc_msgSend(this.id, OS.sel_setFormatter_, newFormatter != null ? newFormatter.id : 0);
+}
+
+public void setHighlighted(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setHighlighted_, flag);
+}
+
+public void setImage(NSImage image) {
+	OS.objc_msgSend(this.id, OS.sel_setImage_, image != null ? image.id : 0);
+}
+
+public void setLineBreakMode(int /*long*/ mode) {
+	OS.objc_msgSend(this.id, OS.sel_setLineBreakMode_, mode);
+}
+
+public void setObjectValue(id obj) {
+	OS.objc_msgSend(this.id, OS.sel_setObjectValue_, obj != null ? obj.id : 0);
+}
+
+public void setScrollable(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setScrollable_, flag);
+}
+
+public void setTitle(NSString aString) {
+	OS.objc_msgSend(this.id, OS.sel_setTitle_, aString != null ? aString.id : 0);
+}
+
+public void setWraps(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setWraps_, flag);
+}
+
+public NSString title() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_title);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public NSRect titleRectForBounds(NSRect theRect) {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_titleRectForBounds_, theRect);
+	return result;
+}
+
+public boolean wraps() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_wraps);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCharacterSet.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCharacterSet.java
new file mode 100644
index 0000000..7d30d26
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCharacterSet.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSCharacterSet extends NSObject {
+
+public NSCharacterSet() {
+	super();
+}
+
+public NSCharacterSet(int /*long*/ id) {
+	super(id);
+}
+
+public NSCharacterSet(id id) {
+	super(id);
+}
+
+public boolean characterIsMember(short aCharacter) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_characterIsMember_, aCharacter);
+}
+
+public static id decimalDigitCharacterSet() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSCharacterSet, OS.sel_decimalDigitCharacterSet);
+	return result != 0 ? new id(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSClipView.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSClipView.java
new file mode 100644
index 0000000..25cb35d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSClipView.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSClipView extends NSView {
+
+public NSClipView() {
+	super();
+}
+
+public NSClipView(int /*long*/ id) {
+	super(id);
+}
+
+public NSClipView(id id) {
+	super(id);
+}
+
+public boolean copiesOnScroll() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_copiesOnScroll);
+}
+
+public NSCursor documentCursor() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_documentCursor);
+	return result != 0 ? new NSCursor(result) : null;
+}
+
+public void scrollToPoint(NSPoint newOrigin) {
+	OS.objc_msgSend(this.id, OS.sel_scrollToPoint_, newOrigin);
+}
+
+public void setCopiesOnScroll(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setCopiesOnScroll_, flag);
+}
+
+public void setDocumentCursor(NSCursor anObj) {
+	OS.objc_msgSend(this.id, OS.sel_setDocumentCursor_, anObj != null ? anObj.id : 0);
+}
+
+public void setDrawsBackground(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setDrawsBackground_, flag);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCoder.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCoder.java
new file mode 100644
index 0000000..2ea8804
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCoder.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSCoder extends NSObject {
+
+public NSCoder() {
+	super();
+}
+
+public NSCoder(int /*long*/ id) {
+	super(id);
+}
+
+public NSCoder(id id) {
+	super(id);
+}
+
+public int systemVersion() {
+	return (int)/*64*/OS.objc_msgSend(this.id, OS.sel_systemVersion);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColor.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColor.java
new file mode 100644
index 0000000..1e59ab9
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColor.java
@@ -0,0 +1,188 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSColor extends NSObject {
+
+public NSColor() {
+	super();
+}
+
+public NSColor(int /*long*/ id) {
+	super(id);
+}
+
+public NSColor(id id) {
+	super(id);
+}
+
+public float /*double*/ alphaComponent() {
+	return (float)OS.objc_msgSend_fpret(this.id, OS.sel_alphaComponent);
+}
+
+public static NSColor alternateSelectedControlColor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_alternateSelectedControlColor);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public static NSColor alternateSelectedControlTextColor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_alternateSelectedControlTextColor);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public static NSColor blackColor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_blackColor);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public float /*double*/ blueComponent() {
+	return (float)OS.objc_msgSend_fpret(this.id, OS.sel_blueComponent);
+}
+
+public static NSColor clearColor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_clearColor);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public NSColor colorUsingColorSpace(NSColorSpace space) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_colorUsingColorSpace_, space != null ? space.id : 0);
+	return result == this.id ? this : (result != 0 ? new NSColor(result) : null);
+}
+
+public NSColor colorUsingColorSpaceName(NSString colorSpace) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_colorUsingColorSpaceName_, colorSpace != null ? colorSpace.id : 0);
+	return result == this.id ? this : (result != 0 ? new NSColor(result) : null);
+}
+
+public static NSColor colorWithDeviceRed(float /*double*/ red, float /*double*/ green, float /*double*/ blue, float /*double*/ alpha) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_colorWithDeviceRed_green_blue_alpha_, red, green, blue, alpha);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public static NSColor colorWithPatternImage(NSImage image) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_colorWithPatternImage_, image != null ? image.id : 0);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public static NSColor controlBackgroundColor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_controlBackgroundColor);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public static NSColor controlDarkShadowColor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_controlDarkShadowColor);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public static NSColor controlHighlightColor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_controlHighlightColor);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public static NSColor controlLightHighlightColor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_controlLightHighlightColor);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public static NSColor controlShadowColor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_controlShadowColor);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public static NSColor controlTextColor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_controlTextColor);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public static NSColor disabledControlTextColor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_disabledControlTextColor);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public void getComponents(float[] /*double[]*/ components) {
+	OS.objc_msgSend(this.id, OS.sel_getComponents_, components);
+}
+
+public float /*double*/ greenComponent() {
+	return (float)OS.objc_msgSend_fpret(this.id, OS.sel_greenComponent);
+}
+
+public int /*long*/ numberOfComponents() {
+	return OS.objc_msgSend(this.id, OS.sel_numberOfComponents);
+}
+
+public float /*double*/ redComponent() {
+	return (float)OS.objc_msgSend_fpret(this.id, OS.sel_redComponent);
+}
+
+public static NSColor secondarySelectedControlColor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_secondarySelectedControlColor);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public static NSColor selectedControlColor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_selectedControlColor);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public static NSColor selectedControlTextColor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_selectedControlTextColor);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public static NSColor selectedTextBackgroundColor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_selectedTextBackgroundColor);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public static NSColor selectedTextColor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_selectedTextColor);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public void set() {
+	OS.objc_msgSend(this.id, OS.sel_set);
+}
+
+public void setFill() {
+	OS.objc_msgSend(this.id, OS.sel_setFill);
+}
+
+public void setStroke() {
+	OS.objc_msgSend(this.id, OS.sel_setStroke);
+}
+
+public static NSColor textBackgroundColor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_textBackgroundColor);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public static NSColor textColor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_textColor);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public static NSColor windowBackgroundColor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_windowBackgroundColor);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public static NSColor windowFrameColor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_windowFrameColor);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public static NSColor windowFrameTextColor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColor, OS.sel_windowFrameTextColor);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColorPanel.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColorPanel.java
new file mode 100644
index 0000000..f179cf4
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColorPanel.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSColorPanel extends NSPanel {
+
+public NSColorPanel() {
+	super();
+}
+
+public NSColorPanel(int /*long*/ id) {
+	super(id);
+}
+
+public NSColorPanel(id id) {
+	super(id);
+}
+
+public NSColor color() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_color);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+public void setColor(NSColor color) {
+	OS.objc_msgSend(this.id, OS.sel_setColor_, color != null ? color.id : 0);
+}
+
+public static NSColorPanel sharedColorPanel() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColorPanel, OS.sel_sharedColorPanel);
+	return result != 0 ? new NSColorPanel(result) : null;
+}
+
+public static float /*double*/ minFrameWidthWithTitle(NSString aTitle, int /*long*/ aStyle) {
+	return (float)OS.objc_msgSend_fpret(OS.class_NSColorPanel, OS.sel_minFrameWidthWithTitle_styleMask_, aTitle != null ? aTitle.id : 0, aStyle);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColorSpace.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColorSpace.java
new file mode 100644
index 0000000..8048179
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSColorSpace.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSColorSpace extends NSObject {
+
+public NSColorSpace() {
+	super();
+}
+
+public NSColorSpace(int /*long*/ id) {
+	super(id);
+}
+
+public NSColorSpace(id id) {
+	super(id);
+}
+
+public static NSColorSpace deviceRGBColorSpace() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSColorSpace, OS.sel_deviceRGBColorSpace);
+	return result != 0 ? new NSColorSpace(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSComboBox.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSComboBox.java
new file mode 100644
index 0000000..a0319aa
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSComboBox.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSComboBox extends NSTextField {
+
+public NSComboBox() {
+	super();
+}
+
+public NSComboBox(int /*long*/ id) {
+	super(id);
+}
+
+public NSComboBox(id id) {
+	super(id);
+}
+
+public void addItemWithObjectValue(id object) {
+	OS.objc_msgSend(this.id, OS.sel_addItemWithObjectValue_, object != null ? object.id : 0);
+}
+
+public void deselectItemAtIndex(int /*long*/ index) {
+	OS.objc_msgSend(this.id, OS.sel_deselectItemAtIndex_, index);
+}
+
+public int /*long*/ indexOfSelectedItem() {
+	return OS.objc_msgSend(this.id, OS.sel_indexOfSelectedItem);
+}
+
+public void insertItemWithObjectValue(id object, int /*long*/ index) {
+	OS.objc_msgSend(this.id, OS.sel_insertItemWithObjectValue_atIndex_, object != null ? object.id : 0, index);
+}
+
+public id itemObjectValueAtIndex(int /*long*/ index) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_itemObjectValueAtIndex_, index);
+	return result != 0 ? new id(result) : null;
+}
+
+public int /*long*/ numberOfItems() {
+	return OS.objc_msgSend(this.id, OS.sel_numberOfItems);
+}
+
+public int /*long*/ numberOfVisibleItems() {
+	return OS.objc_msgSend(this.id, OS.sel_numberOfVisibleItems);
+}
+
+public void removeAllItems() {
+	OS.objc_msgSend(this.id, OS.sel_removeAllItems);
+}
+
+public void removeItemAtIndex(int /*long*/ index) {
+	OS.objc_msgSend(this.id, OS.sel_removeItemAtIndex_, index);
+}
+
+public void selectItemAtIndex(int /*long*/ index) {
+	OS.objc_msgSend(this.id, OS.sel_selectItemAtIndex_, index);
+}
+
+public void setNumberOfVisibleItems(int /*long*/ visibleItems) {
+	OS.objc_msgSend(this.id, OS.sel_setNumberOfVisibleItems_, visibleItems);
+}
+
+public static int /*long*/ cellClass() {
+	return OS.objc_msgSend(OS.class_NSComboBox, OS.sel_cellClass);
+}
+
+public static void setCellClass(int /*long*/ factoryId) {
+	OS.objc_msgSend(OS.class_NSComboBox, OS.sel_setCellClass_, factoryId);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSComboBoxCell.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSComboBoxCell.java
new file mode 100644
index 0000000..cb8b2ea
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSComboBoxCell.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSComboBoxCell extends NSTextFieldCell {
+
+public NSComboBoxCell() {
+	super();
+}
+
+public NSComboBoxCell(int /*long*/ id) {
+	super(id);
+}
+
+public NSComboBoxCell(id id) {
+	super(id);
+}
+
+public NSArray objectValues() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_objectValues);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSControl.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSControl.java
new file mode 100644
index 0000000..5807b08
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSControl.java
@@ -0,0 +1,120 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSControl extends NSView {
+
+public NSControl() {
+	super();
+}
+
+public NSControl(int /*long*/ id) {
+	super(id);
+}
+
+public NSControl(id id) {
+	super(id);
+}
+
+public boolean abortEditing() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_abortEditing);
+}
+
+public int /*long*/ action() {
+	return OS.objc_msgSend(this.id, OS.sel_action);
+}
+
+public NSCell cell() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_cell);
+	return result != 0 ? new NSCell(result) : null;
+}
+
+public static int /*long*/ cellClass() {
+	return OS.objc_msgSend(OS.class_NSControl, OS.sel_cellClass);
+}
+
+public NSText currentEditor() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_currentEditor);
+	return result != 0 ? new NSText(result) : null;
+}
+
+public double doubleValue() {
+	return OS.objc_msgSend_fpret(this.id, OS.sel_doubleValue);
+}
+
+public NSFont font() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_font);
+	return result != 0 ? new NSFont(result) : null;
+}
+
+public boolean isEnabled() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isEnabled);
+}
+
+public boolean sendAction(int /*long*/ theAction, id theTarget) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_sendAction_to_, theAction, theTarget != null ? theTarget.id : 0);
+}
+
+public void setAction(int /*long*/ aSelector) {
+	OS.objc_msgSend(this.id, OS.sel_setAction_, aSelector);
+}
+
+public void setAlignment(int /*long*/ mode) {
+	OS.objc_msgSend(this.id, OS.sel_setAlignment_, mode);
+}
+
+public void setCell(NSCell aCell) {
+	OS.objc_msgSend(this.id, OS.sel_setCell_, aCell != null ? aCell.id : 0);
+}
+
+public static void setCellClass(int /*long*/ factoryId) {
+	OS.objc_msgSend(OS.class_NSControl, OS.sel_setCellClass_, factoryId);
+}
+
+public void setDoubleValue(double aDouble) {
+	OS.objc_msgSend(this.id, OS.sel_setDoubleValue_, aDouble);
+}
+
+public void setEnabled(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setEnabled_, flag);
+}
+
+public void setFont(NSFont fontObj) {
+	OS.objc_msgSend(this.id, OS.sel_setFont_, fontObj != null ? fontObj.id : 0);
+}
+
+public void setFormatter(NSFormatter newFormatter) {
+	OS.objc_msgSend(this.id, OS.sel_setFormatter_, newFormatter != null ? newFormatter.id : 0);
+}
+
+public void setStringValue(NSString aString) {
+	OS.objc_msgSend(this.id, OS.sel_setStringValue_, aString != null ? aString.id : 0);
+}
+
+public void setTarget(id anObject) {
+	OS.objc_msgSend(this.id, OS.sel_setTarget_, anObject != null ? anObject.id : 0);
+}
+
+public void sizeToFit() {
+	OS.objc_msgSend(this.id, OS.sel_sizeToFit);
+}
+
+public NSString stringValue() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_stringValue);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public id target() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_target);
+	return result != 0 ? new id(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCursor.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCursor.java
new file mode 100644
index 0000000..8dad7fa
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSCursor.java
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSCursor extends NSObject {
+
+public NSCursor() {
+	super();
+}
+
+public NSCursor(int /*long*/ id) {
+	super(id);
+}
+
+public NSCursor(id id) {
+	super(id);
+}
+
+public static NSCursor IBeamCursor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSCursor, OS.sel_IBeamCursor);
+	return result != 0 ? new NSCursor(result) : null;
+}
+
+public static NSCursor arrowCursor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSCursor, OS.sel_arrowCursor);
+	return result != 0 ? new NSCursor(result) : null;
+}
+
+public static NSCursor crosshairCursor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSCursor, OS.sel_crosshairCursor);
+	return result != 0 ? new NSCursor(result) : null;
+}
+
+public static NSCursor currentCursor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSCursor, OS.sel_currentCursor);
+	return result != 0 ? new NSCursor(result) : null;
+}
+
+public NSCursor initWithImage(NSImage newImage, NSPoint aPoint) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithImage_hotSpot_, newImage != null ? newImage.id : 0, aPoint);
+	return result == this.id ? this : (result != 0 ? new NSCursor(result) : null);
+}
+
+public static NSCursor pointingHandCursor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSCursor, OS.sel_pointingHandCursor);
+	return result != 0 ? new NSCursor(result) : null;
+}
+
+public static void pop() {
+	OS.objc_msgSend(OS.class_NSCursor, OS.sel_pop);
+}
+
+public void push() {
+	OS.objc_msgSend(this.id, OS.sel_push);
+}
+
+public static NSCursor resizeDownCursor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSCursor, OS.sel_resizeDownCursor);
+	return result != 0 ? new NSCursor(result) : null;
+}
+
+public static NSCursor resizeLeftCursor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSCursor, OS.sel_resizeLeftCursor);
+	return result != 0 ? new NSCursor(result) : null;
+}
+
+public static NSCursor resizeLeftRightCursor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSCursor, OS.sel_resizeLeftRightCursor);
+	return result != 0 ? new NSCursor(result) : null;
+}
+
+public static NSCursor resizeRightCursor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSCursor, OS.sel_resizeRightCursor);
+	return result != 0 ? new NSCursor(result) : null;
+}
+
+public static NSCursor resizeUpCursor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSCursor, OS.sel_resizeUpCursor);
+	return result != 0 ? new NSCursor(result) : null;
+}
+
+public static NSCursor resizeUpDownCursor() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSCursor, OS.sel_resizeUpDownCursor);
+	return result != 0 ? new NSCursor(result) : null;
+}
+
+public void set() {
+	OS.objc_msgSend(this.id, OS.sel_set);
+}
+
+public static void setHiddenUntilMouseMoves(boolean flag) {
+	OS.objc_msgSend(OS.class_NSCursor, OS.sel_setHiddenUntilMouseMoves_, flag);
+}
+
+public void setOnMouseEntered(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setOnMouseEntered_, flag);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSData.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSData.java
new file mode 100644
index 0000000..70d62a8
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSData.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSData extends NSObject {
+
+public NSData() {
+	super();
+}
+
+public NSData(int /*long*/ id) {
+	super(id);
+}
+
+public NSData(id id) {
+	super(id);
+}
+
+public int /*long*/ bytes() {
+	return OS.objc_msgSend(this.id, OS.sel_bytes);
+}
+
+public static NSData dataWithBytes(byte[] bytes, int /*long*/ length) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSData, OS.sel_dataWithBytes_length_, bytes, length);
+	return result != 0 ? new NSData(result) : null;
+}
+
+public void getBytes(byte[] buffer) {
+	OS.objc_msgSend(this.id, OS.sel_getBytes_, buffer);
+}
+
+public void getBytes(int /*long*/ buffer, int /*long*/ length) {
+	OS.objc_msgSend(this.id, OS.sel_getBytes_length_, buffer, length);
+}
+
+public int /*long*/ length() {
+	return OS.objc_msgSend(this.id, OS.sel_length);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSDate.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSDate.java
new file mode 100644
index 0000000..f864e5c
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSDate.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSDate extends NSObject {
+
+public NSDate() {
+	super();
+}
+
+public NSDate(int /*long*/ id) {
+	super(id);
+}
+
+public NSDate(id id) {
+	super(id);
+}
+
+public NSCalendarDate dateWithCalendarFormat(NSString format, NSTimeZone aTimeZone) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_dateWithCalendarFormat_timeZone_, format != null ? format.id : 0, aTimeZone != null ? aTimeZone.id : 0);
+	return result != 0 ? new NSCalendarDate(result) : null;
+}
+
+public static NSDate dateWithTimeIntervalSinceNow(double secs) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSDate, OS.sel_dateWithTimeIntervalSinceNow_, secs);
+	return result != 0 ? new NSDate(result) : null;
+}
+
+public static NSDate distantFuture() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSDate, OS.sel_distantFuture);
+	return result != 0 ? new NSDate(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSDatePicker.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSDatePicker.java
new file mode 100644
index 0000000..e64ffb4
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSDatePicker.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSDatePicker extends NSControl {
+
+public NSDatePicker() {
+	super();
+}
+
+public NSDatePicker(int /*long*/ id) {
+	super(id);
+}
+
+public NSDatePicker(id id) {
+	super(id);
+}
+
+public NSDate dateValue() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_dateValue);
+	return result != 0 ? new NSDate(result) : null;
+}
+
+public void setBackgroundColor(NSColor color) {
+	OS.objc_msgSend(this.id, OS.sel_setBackgroundColor_, color != null ? color.id : 0);
+}
+
+public void setDatePickerElements(int /*long*/ elementFlags) {
+	OS.objc_msgSend(this.id, OS.sel_setDatePickerElements_, elementFlags);
+}
+
+public void setDatePickerStyle(int /*long*/ newStyle) {
+	OS.objc_msgSend(this.id, OS.sel_setDatePickerStyle_, newStyle);
+}
+
+public void setDateValue(NSDate newStartDate) {
+	OS.objc_msgSend(this.id, OS.sel_setDateValue_, newStartDate != null ? newStartDate.id : 0);
+}
+
+public void setDrawsBackground(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setDrawsBackground_, flag);
+}
+
+public void setTextColor(NSColor color) {
+	OS.objc_msgSend(this.id, OS.sel_setTextColor_, color != null ? color.id : 0);
+}
+
+public static int /*long*/ cellClass() {
+	return OS.objc_msgSend(OS.class_NSDatePicker, OS.sel_cellClass);
+}
+
+public static void setCellClass(int /*long*/ factoryId) {
+	OS.objc_msgSend(OS.class_NSDatePicker, OS.sel_setCellClass_, factoryId);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSDictionary.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSDictionary.java
new file mode 100644
index 0000000..472e7a4
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSDictionary.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSDictionary extends NSObject {
+
+public NSDictionary() {
+	super();
+}
+
+public NSDictionary(int /*long*/ id) {
+	super(id);
+}
+
+public NSDictionary(id id) {
+	super(id);
+}
+
+public NSArray allKeys() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_allKeys);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+public int /*long*/ count() {
+	return OS.objc_msgSend(this.id, OS.sel_count);
+}
+
+public static NSDictionary dictionaryWithObject(id object, id key) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSDictionary, OS.sel_dictionaryWithObject_forKey_, object != null ? object.id : 0, key != null ? key.id : 0);
+	return result != 0 ? new NSDictionary(result) : null;
+}
+
+public NSEnumerator objectEnumerator() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_objectEnumerator);
+	return result != 0 ? new NSEnumerator(result) : null;
+}
+
+public id objectForKey(id aKey) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_objectForKey_, aKey != null ? aKey.id : 0);
+	return result != 0 ? new id(result) : null;
+}
+
+public id valueForKey(NSString key) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_valueForKey_, key != null ? key.id : 0);
+	return result != 0 ? new id(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSDirectoryEnumerator.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSDirectoryEnumerator.java
new file mode 100644
index 0000000..29605cc
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSDirectoryEnumerator.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSDirectoryEnumerator extends NSEnumerator {
+
+public NSDirectoryEnumerator() {
+	super();
+}
+
+public NSDirectoryEnumerator(int /*long*/ id) {
+	super(id);
+}
+
+public NSDirectoryEnumerator(id id) {
+	super(id);
+}
+
+public void skipDescendents() {
+	OS.objc_msgSend(this.id, OS.sel_skipDescendents);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSEnumerator.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSEnumerator.java
new file mode 100644
index 0000000..518631b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSEnumerator.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSEnumerator extends NSObject {
+
+public NSEnumerator() {
+	super();
+}
+
+public NSEnumerator(int /*long*/ id) {
+	super(id);
+}
+
+public NSEnumerator(id id) {
+	super(id);
+}
+
+public id nextObject() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_nextObject);
+	return result != 0 ? new id(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSError.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSError.java
new file mode 100644
index 0000000..5799811
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSError.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSError extends NSObject {
+
+public NSError() {
+	super();
+}
+
+public NSError(int /*long*/ id) {
+	super(id);
+}
+
+public NSError(id id) {
+	super(id);
+}
+
+public int /*long*/ code() {
+	return OS.objc_msgSend(this.id, OS.sel_code);
+}
+
+public NSString localizedDescription() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_localizedDescription);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public NSDictionary userInfo() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_userInfo);
+	return result != 0 ? new NSDictionary(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSEvent.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSEvent.java
new file mode 100644
index 0000000..87921bd
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSEvent.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSEvent extends NSObject {
+
+public NSEvent() {
+	super();
+}
+
+public NSEvent(int /*long*/ id) {
+	super(id);
+}
+
+public NSEvent(id id) {
+	super(id);
+}
+
+public int /*long*/ CGEvent() {
+	return OS.objc_msgSend(this.id, OS.sel_CGEvent);
+}
+
+public int /*long*/ buttonNumber() {
+	return OS.objc_msgSend(this.id, OS.sel_buttonNumber);
+}
+
+public NSString characters() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_characters);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public NSString charactersIgnoringModifiers() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_charactersIgnoringModifiers);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public int /*long*/ clickCount() {
+	return OS.objc_msgSend(this.id, OS.sel_clickCount);
+}
+
+public float /*double*/ deltaX() {
+	return (float)OS.objc_msgSend_fpret(this.id, OS.sel_deltaX);
+}
+
+public float /*double*/ deltaY() {
+	return (float)OS.objc_msgSend_fpret(this.id, OS.sel_deltaY);
+}
+
+public static NSEvent enterExitEventWithType(int /*long*/ type, NSPoint location, int /*long*/ flags, double time, int /*long*/ wNum, NSGraphicsContext context, int /*long*/ eNum, int /*long*/ tNum, int /*long*/ data) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSEvent, OS.sel_enterExitEventWithType_location_modifierFlags_timestamp_windowNumber_context_eventNumber_trackingNumber_userData_, type, location, flags, time, wNum, context != null ? context.id : 0, eNum, tNum, data);
+	return result != 0 ? new NSEvent(result) : null;
+}
+
+public short keyCode() {
+	return (short)OS.objc_msgSend(this.id, OS.sel_keyCode);
+}
+
+public NSPoint locationInWindow() {
+	NSPoint result = new NSPoint();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_locationInWindow);
+	return result;
+}
+
+public int /*long*/ modifierFlags() {
+	return OS.objc_msgSend(this.id, OS.sel_modifierFlags);
+}
+
+public static NSPoint mouseLocation() {
+	NSPoint result = new NSPoint();
+	OS.objc_msgSend_stret(result, OS.class_NSEvent, OS.sel_mouseLocation);
+	return result;
+}
+
+public static NSEvent otherEventWithType(int /*long*/ type, NSPoint location, int /*long*/ flags, double time, int /*long*/ wNum, NSGraphicsContext context, short subtype, int /*long*/ d1, int /*long*/ d2) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSEvent, OS.sel_otherEventWithType_location_modifierFlags_timestamp_windowNumber_context_subtype_data1_data2_, type, location, flags, time, wNum, context != null ? context.id : 0, subtype, d1, d2);
+	return result != 0 ? new NSEvent(result) : null;
+}
+
+public double timestamp() {
+	return OS.objc_msgSend_fpret(this.id, OS.sel_timestamp);
+}
+
+public int /*long*/ type() {
+	return OS.objc_msgSend(this.id, OS.sel_type);
+}
+
+public NSWindow window() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_window);
+	return result != 0 ? new NSWindow(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFileManager.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFileManager.java
new file mode 100644
index 0000000..7800921
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFileManager.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSFileManager extends NSObject {
+
+public NSFileManager() {
+	super();
+}
+
+public NSFileManager(int /*long*/ id) {
+	super(id);
+}
+
+public NSFileManager(id id) {
+	super(id);
+}
+
+public boolean createFileAtPath(NSString path, NSData data, NSDictionary attr) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_createFileAtPath_contents_attributes_, path != null ? path.id : 0, data != null ? data.id : 0, attr != null ? attr.id : 0);
+}
+
+public static NSFileManager defaultManager() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSFileManager, OS.sel_defaultManager);
+	return result != 0 ? new NSFileManager(result) : null;
+}
+
+public NSDirectoryEnumerator enumeratorAtPath(NSString path) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_enumeratorAtPath_, path != null ? path.id : 0);
+	return result != 0 ? new NSDirectoryEnumerator(result) : null;
+}
+
+public boolean fileExistsAtPath(NSString path, int /*long*/ isDirectory) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_fileExistsAtPath_isDirectory_, path != null ? path.id : 0, isDirectory);
+}
+
+public boolean removeItemAtPath(NSString path, int /*long*/ error) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_removeItemAtPath_error_, path != null ? path.id : 0, error);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFileWrapper.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFileWrapper.java
new file mode 100644
index 0000000..c5971cb
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFileWrapper.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSFileWrapper extends NSObject {
+
+public NSFileWrapper() {
+	super();
+}
+
+public NSFileWrapper(int /*long*/ id) {
+	super(id);
+}
+
+public NSFileWrapper(id id) {
+	super(id);
+}
+
+public void setIcon(NSImage icon) {
+	OS.objc_msgSend(this.id, OS.sel_setIcon_, icon != null ? icon.id : 0);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFont.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFont.java
new file mode 100644
index 0000000..1b265d9
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFont.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSFont extends NSObject {
+
+public NSFont() {
+	super();
+}
+
+public NSFont(int /*long*/ id) {
+	super(id);
+}
+
+public NSFont(id id) {
+	super(id);
+}
+
+public float /*double*/ ascender() {
+	return (float)OS.objc_msgSend_fpret(this.id, OS.sel_ascender);
+}
+
+public static NSFont controlContentFontOfSize(float /*double*/ fontSize) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSFont, OS.sel_controlContentFontOfSize_, fontSize);
+	return result != 0 ? new NSFont(result) : null;
+}
+
+public float /*double*/ descender() {
+	return (float)OS.objc_msgSend_fpret(this.id, OS.sel_descender);
+}
+
+public NSString familyName() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_familyName);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public NSString fontName() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_fontName);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public static NSFont fontWithName(NSString fontName, float /*double*/ fontSize) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSFont, OS.sel_fontWithName_size_, fontName != null ? fontName.id : 0, fontSize);
+	return result != 0 ? new NSFont(result) : null;
+}
+
+public float /*double*/ leading() {
+	return (float)OS.objc_msgSend_fpret(this.id, OS.sel_leading);
+}
+
+public float /*double*/ pointSize() {
+	return (float)OS.objc_msgSend_fpret(this.id, OS.sel_pointSize);
+}
+
+public static float /*double*/ smallSystemFontSize() {
+	return (float)OS.objc_msgSend_fpret(OS.class_NSFont, OS.sel_smallSystemFontSize);
+}
+
+public static NSFont systemFontOfSize(float /*double*/ fontSize) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSFont, OS.sel_systemFontOfSize_, fontSize);
+	return result != 0 ? new NSFont(result) : null;
+}
+
+public static float /*double*/ systemFontSize() {
+	return (float)OS.objc_msgSend_fpret(OS.class_NSFont, OS.sel_systemFontSize);
+}
+
+public static float /*double*/ systemFontSizeForControlSize(int /*long*/ controlSize) {
+	return (float)OS.objc_msgSend_fpret(OS.class_NSFont, OS.sel_systemFontSizeForControlSize_, controlSize);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFontManager.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFontManager.java
new file mode 100644
index 0000000..0051f13
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFontManager.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSFontManager extends NSObject {
+
+public NSFontManager() {
+	super();
+}
+
+public NSFontManager(int /*long*/ id) {
+	super(id);
+}
+
+public NSFontManager(id id) {
+	super(id);
+}
+
+public NSArray availableFontFamilies() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_availableFontFamilies);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+public NSArray availableFonts() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_availableFonts);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+public NSArray availableMembersOfFontFamily(NSString fam) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_availableMembersOfFontFamily_, fam != null ? fam.id : 0);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+public NSFont convertFont(NSFont fontObj, int /*long*/ trait) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_convertFont_toHaveTrait_, fontObj != null ? fontObj.id : 0, trait);
+	return result != 0 ? new NSFont(result) : null;
+}
+
+public NSFont fontWithFamily(NSString family, int /*long*/ traits, int /*long*/ weight, float /*double*/ size) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_fontWithFamily_traits_weight_size_, family != null ? family.id : 0, traits, weight, size);
+	return result != 0 ? new NSFont(result) : null;
+}
+
+public static NSFontManager sharedFontManager() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSFontManager, OS.sel_sharedFontManager);
+	return result != 0 ? new NSFontManager(result) : null;
+}
+
+public int /*long*/ traitsOfFont(NSFont fontObj) {
+	return OS.objc_msgSend(this.id, OS.sel_traitsOfFont_, fontObj != null ? fontObj.id : 0);
+}
+
+public int /*long*/ weightOfFont(NSFont fontObj) {
+	return OS.objc_msgSend(this.id, OS.sel_weightOfFont_, fontObj != null ? fontObj.id : 0);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFontPanel.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFontPanel.java
new file mode 100644
index 0000000..f96c059
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFontPanel.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSFontPanel extends NSPanel {
+
+public NSFontPanel() {
+	super();
+}
+
+public NSFontPanel(int /*long*/ id) {
+	super(id);
+}
+
+public NSFontPanel(id id) {
+	super(id);
+}
+
+public NSFont panelConvertFont(NSFont fontObj) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_panelConvertFont_, fontObj != null ? fontObj.id : 0);
+	return result != 0 ? new NSFont(result) : null;
+}
+
+public void setPanelFont(NSFont fontObj, boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setPanelFont_isMultiple_, fontObj != null ? fontObj.id : 0, flag);
+}
+
+public static NSFontPanel sharedFontPanel() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSFontPanel, OS.sel_sharedFontPanel);
+	return result != 0 ? new NSFontPanel(result) : null;
+}
+
+public static float /*double*/ minFrameWidthWithTitle(NSString aTitle, int /*long*/ aStyle) {
+	return (float)OS.objc_msgSend_fpret(OS.class_NSFontPanel, OS.sel_minFrameWidthWithTitle_styleMask_, aTitle != null ? aTitle.id : 0, aStyle);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFormatter.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFormatter.java
new file mode 100644
index 0000000..92ee13e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSFormatter.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSFormatter extends NSObject {
+
+public NSFormatter() {
+	super();
+}
+
+public NSFormatter(int /*long*/ id) {
+	super(id);
+}
+
+public NSFormatter(id id) {
+	super(id);
+}
+
+public NSString stringForObjectValue(id obj) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_stringForObjectValue_, obj != null ? obj.id : 0);
+	return result != 0 ? new NSString(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSGradient.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSGradient.java
new file mode 100644
index 0000000..f489131
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSGradient.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSGradient extends NSObject {
+
+public NSGradient() {
+	super();
+}
+
+public NSGradient(int /*long*/ id) {
+	super(id);
+}
+
+public NSGradient(id id) {
+	super(id);
+}
+
+public void drawFromPoint(NSPoint startingPoint, NSPoint endingPoint, int /*long*/ options) {
+	OS.objc_msgSend(this.id, OS.sel_drawFromPoint_toPoint_options_, startingPoint, endingPoint, options);
+}
+
+public void drawInRect(NSRect rect, float /*double*/ angle) {
+	OS.objc_msgSend(this.id, OS.sel_drawInRect_angle_, rect, angle);
+}
+
+public NSGradient initWithStartingColor(NSColor startingColor, NSColor endingColor) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithStartingColor_endingColor_, startingColor != null ? startingColor.id : 0, endingColor != null ? endingColor.id : 0);
+	return result == this.id ? this : (result != 0 ? new NSGradient(result) : null);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSGraphicsContext.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSGraphicsContext.java
new file mode 100644
index 0000000..30b9c46
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSGraphicsContext.java
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSGraphicsContext extends NSObject {
+
+public NSGraphicsContext() {
+	super();
+}
+
+public NSGraphicsContext(int /*long*/ id) {
+	super(id);
+}
+
+public NSGraphicsContext(id id) {
+	super(id);
+}
+
+public static NSGraphicsContext currentContext() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSGraphicsContext, OS.sel_currentContext);
+	return result != 0 ? new NSGraphicsContext(result) : null;
+}
+
+public void flushGraphics() {
+	OS.objc_msgSend(this.id, OS.sel_flushGraphics);
+}
+
+public static NSGraphicsContext graphicsContextWithBitmapImageRep(NSBitmapImageRep bitmapRep) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSGraphicsContext, OS.sel_graphicsContextWithBitmapImageRep_, bitmapRep != null ? bitmapRep.id : 0);
+	return result != 0 ? new NSGraphicsContext(result) : null;
+}
+
+public static NSGraphicsContext graphicsContextWithGraphicsPort(int /*long*/ graphicsPort, boolean initialFlippedState) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSGraphicsContext, OS.sel_graphicsContextWithGraphicsPort_flipped_, graphicsPort, initialFlippedState);
+	return result != 0 ? new NSGraphicsContext(result) : null;
+}
+
+public static NSGraphicsContext graphicsContextWithWindow(NSWindow window) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSGraphicsContext, OS.sel_graphicsContextWithWindow_, window != null ? window.id : 0);
+	return result != 0 ? new NSGraphicsContext(result) : null;
+}
+
+public int /*long*/ graphicsPort() {
+	return OS.objc_msgSend(this.id, OS.sel_graphicsPort);
+}
+
+public int /*long*/ imageInterpolation() {
+	return OS.objc_msgSend(this.id, OS.sel_imageInterpolation);
+}
+
+public boolean isDrawingToScreen() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isDrawingToScreen);
+}
+
+public void restoreGraphicsState() {
+	OS.objc_msgSend(this.id, OS.sel_restoreGraphicsState);
+}
+
+public static void static_restoreGraphicsState() {
+	OS.objc_msgSend(OS.class_NSGraphicsContext, OS.sel_restoreGraphicsState);
+}
+
+public void saveGraphicsState() {
+	OS.objc_msgSend(this.id, OS.sel_saveGraphicsState);
+}
+
+public static void static_saveGraphicsState() {
+	OS.objc_msgSend(OS.class_NSGraphicsContext, OS.sel_saveGraphicsState);
+}
+
+public void setCompositingOperation(int /*long*/ operation) {
+	OS.objc_msgSend(this.id, OS.sel_setCompositingOperation_, operation);
+}
+
+public static void setCurrentContext(NSGraphicsContext context) {
+	OS.objc_msgSend(OS.class_NSGraphicsContext, OS.sel_setCurrentContext_, context != null ? context.id : 0);
+}
+
+public void setImageInterpolation(int /*long*/ interpolation) {
+	OS.objc_msgSend(this.id, OS.sel_setImageInterpolation_, interpolation);
+}
+
+public void setPatternPhase(NSPoint phase) {
+	OS.objc_msgSend(this.id, OS.sel_setPatternPhase_, phase);
+}
+
+public void setShouldAntialias(boolean antialias) {
+	OS.objc_msgSend(this.id, OS.sel_setShouldAntialias_, antialias);
+}
+
+public boolean shouldAntialias() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_shouldAntialias);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSHTTPCookie.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSHTTPCookie.java
new file mode 100644
index 0000000..e29ea21
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSHTTPCookie.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSHTTPCookie extends NSObject {
+
+public NSHTTPCookie() {
+	super();
+}
+
+public NSHTTPCookie(int /*long*/ id) {
+	super(id);
+}
+
+public NSHTTPCookie(id id) {
+	super(id);
+}
+
+public static NSArray cookiesWithResponseHeaderFields(NSDictionary headerFields, NSURL URL) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSHTTPCookie, OS.sel_cookiesWithResponseHeaderFields_forURL_, headerFields != null ? headerFields.id : 0, URL != null ? URL.id : 0);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+public boolean isSessionOnly() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isSessionOnly);
+}
+
+public NSString name() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_name);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public NSString value() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_value);
+	return result != 0 ? new NSString(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSHTTPCookieStorage.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSHTTPCookieStorage.java
new file mode 100644
index 0000000..9d027f0
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSHTTPCookieStorage.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSHTTPCookieStorage extends NSObject {
+
+public NSHTTPCookieStorage() {
+	super();
+}
+
+public NSHTTPCookieStorage(int /*long*/ id) {
+	super(id);
+}
+
+public NSHTTPCookieStorage(id id) {
+	super(id);
+}
+
+public NSArray cookies() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_cookies);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+public NSArray cookiesForURL(NSURL URL) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_cookiesForURL_, URL != null ? URL.id : 0);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+public void deleteCookie(NSHTTPCookie cookie) {
+	OS.objc_msgSend(this.id, OS.sel_deleteCookie_, cookie != null ? cookie.id : 0);
+}
+
+public void setCookie(NSHTTPCookie cookie) {
+	OS.objc_msgSend(this.id, OS.sel_setCookie_, cookie != null ? cookie.id : 0);
+}
+
+public static NSHTTPCookieStorage sharedHTTPCookieStorage() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSHTTPCookieStorage, OS.sel_sharedHTTPCookieStorage);
+	return result != 0 ? new NSHTTPCookieStorage(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSImage.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSImage.java
new file mode 100644
index 0000000..af08776
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSImage.java
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSImage extends NSObject {
+
+public NSImage() {
+	super();
+}
+
+public NSImage(int /*long*/ id) {
+	super(id);
+}
+
+public NSImage(id id) {
+	super(id);
+}
+
+public NSData TIFFRepresentation() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_TIFFRepresentation);
+	return result != 0 ? new NSData(result) : null;
+}
+
+public void addRepresentation(NSImageRep imageRep) {
+	OS.objc_msgSend(this.id, OS.sel_addRepresentation_, imageRep != null ? imageRep.id : 0);
+}
+
+public NSImageRep bestRepresentationForDevice(NSDictionary deviceDescription) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_bestRepresentationForDevice_, deviceDescription != null ? deviceDescription.id : 0);
+	return result != 0 ? new NSImageRep(result) : null;
+}
+
+public void drawAtPoint(NSPoint point, NSRect fromRect, int /*long*/ op, float /*double*/ delta) {
+	OS.objc_msgSend(this.id, OS.sel_drawAtPoint_fromRect_operation_fraction_, point, fromRect, op, delta);
+}
+
+public void drawInRect(NSRect rect, NSRect fromRect, int /*long*/ op, float /*double*/ delta) {
+	OS.objc_msgSend(this.id, OS.sel_drawInRect_fromRect_operation_fraction_, rect, fromRect, op, delta);
+}
+
+public static NSImage imageNamed(NSString name) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSImage, OS.sel_imageNamed_, name != null ? name.id : 0);
+	return result != 0 ? new NSImage(result) : null;
+}
+
+public NSImage initByReferencingFile(NSString fileName) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initByReferencingFile_, fileName != null ? fileName.id : 0);
+	return result == this.id ? this : (result != 0 ? new NSImage(result) : null);
+}
+
+public NSImage initWithContentsOfFile(NSString fileName) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithContentsOfFile_, fileName != null ? fileName.id : 0);
+	return result == this.id ? this : (result != 0 ? new NSImage(result) : null);
+}
+
+public id initWithData(NSData data) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithData_, data != null ? data.id : 0);
+	return result != 0 ? new id(result) : null;
+}
+
+public NSImage initWithSize(NSSize aSize) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithSize_, aSize);
+	return result == this.id ? this : (result != 0 ? new NSImage(result) : null);
+}
+
+public void lockFocus() {
+	OS.objc_msgSend(this.id, OS.sel_lockFocus);
+}
+
+public void removeRepresentation(NSImageRep imageRep) {
+	OS.objc_msgSend(this.id, OS.sel_removeRepresentation_, imageRep != null ? imageRep.id : 0);
+}
+
+public NSArray representations() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_representations);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+public void setCacheMode(int /*long*/ mode) {
+	OS.objc_msgSend(this.id, OS.sel_setCacheMode_, mode);
+}
+
+public void setSize(NSSize aSize) {
+	OS.objc_msgSend(this.id, OS.sel_setSize_, aSize);
+}
+
+public NSSize size() {
+	NSSize result = new NSSize();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_size);
+	return result;
+}
+
+public void unlockFocus() {
+	OS.objc_msgSend(this.id, OS.sel_unlockFocus);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSImageRep.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSImageRep.java
new file mode 100644
index 0000000..32918e8
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSImageRep.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSImageRep extends NSObject {
+
+public NSImageRep() {
+	super();
+}
+
+public NSImageRep(int /*long*/ id) {
+	super(id);
+}
+
+public NSImageRep(id id) {
+	super(id);
+}
+
+public int /*long*/ bitsPerSample() {
+	return OS.objc_msgSend(this.id, OS.sel_bitsPerSample);
+}
+
+public NSString colorSpaceName() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_colorSpaceName);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public boolean drawInRect(NSRect rect) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_drawInRect_, rect);
+}
+
+public boolean hasAlpha() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_hasAlpha);
+}
+
+public int /*long*/ pixelsHigh() {
+	return OS.objc_msgSend(this.id, OS.sel_pixelsHigh);
+}
+
+public int /*long*/ pixelsWide() {
+	return OS.objc_msgSend(this.id, OS.sel_pixelsWide);
+}
+
+public void setAlpha(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setAlpha_, flag);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSImageView.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSImageView.java
new file mode 100644
index 0000000..0e64831
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSImageView.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSImageView extends NSControl {
+
+public NSImageView() {
+	super();
+}
+
+public NSImageView(int /*long*/ id) {
+	super(id);
+}
+
+public NSImageView(id id) {
+	super(id);
+}
+
+public NSImage image() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_image);
+	return result != 0 ? new NSImage(result) : null;
+}
+
+public void setImage(NSImage newImage) {
+	OS.objc_msgSend(this.id, OS.sel_setImage_, newImage != null ? newImage.id : 0);
+}
+
+public void setImageAlignment(int /*long*/ newAlign) {
+	OS.objc_msgSend(this.id, OS.sel_setImageAlignment_, newAlign);
+}
+
+public void setImageScaling(int /*long*/ newScaling) {
+	OS.objc_msgSend(this.id, OS.sel_setImageScaling_, newScaling);
+}
+
+public static int /*long*/ cellClass() {
+	return OS.objc_msgSend(OS.class_NSImageView, OS.sel_cellClass);
+}
+
+public static void setCellClass(int /*long*/ factoryId) {
+	OS.objc_msgSend(OS.class_NSImageView, OS.sel_setCellClass_, factoryId);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSIndexSet.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSIndexSet.java
new file mode 100644
index 0000000..a2b132f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSIndexSet.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSIndexSet extends NSObject {
+
+public NSIndexSet() {
+	super();
+}
+
+public NSIndexSet(int /*long*/ id) {
+	super(id);
+}
+
+public NSIndexSet(id id) {
+	super(id);
+}
+
+public boolean containsIndex(int /*long*/ value) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_containsIndex_, value);
+}
+
+public int /*long*/ count() {
+	return OS.objc_msgSend(this.id, OS.sel_count);
+}
+
+public int /*long*/ firstIndex() {
+	return OS.objc_msgSend(this.id, OS.sel_firstIndex);
+}
+
+public int /*long*/ getIndexes(int[] /*long[]*/ indexBuffer, int /*long*/ bufferSize, int /*long*/ range) {
+	return OS.objc_msgSend(this.id, OS.sel_getIndexes_maxCount_inIndexRange_, indexBuffer, bufferSize, range);
+}
+
+public NSIndexSet initWithIndex(int /*long*/ value) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithIndex_, value);
+	return result == this.id ? this : (result != 0 ? new NSIndexSet(result) : null);
+}
+
+public NSIndexSet initWithIndexesInRange(NSRange range) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithIndexesInRange_, range);
+	return result == this.id ? this : (result != 0 ? new NSIndexSet(result) : null);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSInputManager.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSInputManager.java
new file mode 100644
index 0000000..606bf4e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSInputManager.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSInputManager extends NSObject {
+
+public NSInputManager() {
+	super();
+}
+
+public NSInputManager(int /*long*/ id) {
+	super(id);
+}
+
+public NSInputManager(id id) {
+	super(id);
+}
+
+public static NSInputManager currentInputManager() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSInputManager, OS.sel_currentInputManager);
+	return result != 0 ? new NSInputManager(result) : null;
+}
+
+public boolean handleMouseEvent(NSEvent theMouseEvent) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_handleMouseEvent_, theMouseEvent != null ? theMouseEvent.id : 0);
+}
+
+public boolean wantsToHandleMouseEvents() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_wantsToHandleMouseEvents);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSKeyedArchiver.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSKeyedArchiver.java
new file mode 100644
index 0000000..68d2a12
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSKeyedArchiver.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSKeyedArchiver extends NSCoder {
+
+public NSKeyedArchiver() {
+	super();
+}
+
+public NSKeyedArchiver(int /*long*/ id) {
+	super(id);
+}
+
+public NSKeyedArchiver(id id) {
+	super(id);
+}
+
+public static NSData archivedDataWithRootObject(id rootObject) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSKeyedArchiver, OS.sel_archivedDataWithRootObject_, rootObject != null ? rootObject.id : 0);
+	return result != 0 ? new NSData(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSKeyedUnarchiver.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSKeyedUnarchiver.java
new file mode 100644
index 0000000..a300dac
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSKeyedUnarchiver.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSKeyedUnarchiver extends NSCoder {
+
+public NSKeyedUnarchiver() {
+	super();
+}
+
+public NSKeyedUnarchiver(int /*long*/ id) {
+	super(id);
+}
+
+public NSKeyedUnarchiver(id id) {
+	super(id);
+}
+
+public static id unarchiveObjectWithData(NSData data) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSKeyedUnarchiver, OS.sel_unarchiveObjectWithData_, data != null ? data.id : 0);
+	return result != 0 ? new id(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSLayoutManager.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSLayoutManager.java
new file mode 100644
index 0000000..031646e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSLayoutManager.java
@@ -0,0 +1,142 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSLayoutManager extends NSObject {
+
+public NSLayoutManager() {
+	super();
+}
+
+public NSLayoutManager(int /*long*/ id) {
+	super(id);
+}
+
+public NSLayoutManager(id id) {
+	super(id);
+}
+
+public void addTemporaryAttribute(NSString attrName, id value, NSRange charRange) {
+	OS.objc_msgSend(this.id, OS.sel_addTemporaryAttribute_value_forCharacterRange_, attrName != null ? attrName.id : 0, value != null ? value.id : 0, charRange);
+}
+
+public void addTextContainer(NSTextContainer container) {
+	OS.objc_msgSend(this.id, OS.sel_addTextContainer_, container != null ? container.id : 0);
+}
+
+public NSRect boundingRectForGlyphRange(NSRange glyphRange, NSTextContainer container) {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_boundingRectForGlyphRange_inTextContainer_, glyphRange, container != null ? container.id : 0);
+	return result;
+}
+
+public int /*long*/ characterIndexForGlyphAtIndex(int /*long*/ glyphIndex) {
+	return OS.objc_msgSend(this.id, OS.sel_characterIndexForGlyphAtIndex_, glyphIndex);
+}
+
+public float /*double*/ defaultBaselineOffsetForFont(NSFont theFont) {
+	return (float)OS.objc_msgSend_fpret(this.id, OS.sel_defaultBaselineOffsetForFont_, theFont != null ? theFont.id : 0);
+}
+
+public float /*double*/ defaultLineHeightForFont(NSFont theFont) {
+	return (float)OS.objc_msgSend_fpret(this.id, OS.sel_defaultLineHeightForFont_, theFont != null ? theFont.id : 0);
+}
+
+public void drawBackgroundForGlyphRange(NSRange glyphsToShow, NSPoint origin) {
+	OS.objc_msgSend(this.id, OS.sel_drawBackgroundForGlyphRange_atPoint_, glyphsToShow, origin);
+}
+
+public void drawGlyphsForGlyphRange(NSRange glyphsToShow, NSPoint origin) {
+	OS.objc_msgSend(this.id, OS.sel_drawGlyphsForGlyphRange_atPoint_, glyphsToShow, origin);
+}
+
+public int /*long*/ getGlyphs(int /*long*/ glyphArray, NSRange glyphRange) {
+	return OS.objc_msgSend(this.id, OS.sel_getGlyphs_range_, glyphArray, glyphRange);
+}
+
+public int /*long*/ getGlyphsInRange(NSRange glyphRange, int /*long*/ glyphBuffer, int /*long*/ charIndexBuffer, int /*long*/ inscribeBuffer, int /*long*/ elasticBuffer, int /*long*/ bidiLevelBuffer) {
+	return OS.objc_msgSend(this.id, OS.sel_getGlyphsInRange_glyphs_characterIndexes_glyphInscriptions_elasticBits_bidiLevels_, glyphRange, glyphBuffer, charIndexBuffer, inscribeBuffer, elasticBuffer, bidiLevelBuffer);
+}
+
+public int /*long*/ glyphIndexForCharacterAtIndex(int /*long*/ charIndex) {
+	return OS.objc_msgSend(this.id, OS.sel_glyphIndexForCharacterAtIndex_, charIndex);
+}
+
+public int /*long*/ glyphIndexForPoint(NSPoint point, NSTextContainer container, float[] /*double[]*/ partialFraction) {
+	return OS.objc_msgSend(this.id, OS.sel_glyphIndexForPoint_inTextContainer_fractionOfDistanceThroughGlyph_, point, container != null ? container.id : 0, partialFraction);
+}
+
+public NSRange glyphRangeForCharacterRange(NSRange charRange, int /*long*/ actualCharRange) {
+	NSRange result = new NSRange();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_glyphRangeForCharacterRange_actualCharacterRange_, charRange, actualCharRange);
+	return result;
+}
+
+public NSRange glyphRangeForTextContainer(NSTextContainer container) {
+	NSRange result = new NSRange();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_glyphRangeForTextContainer_, container != null ? container.id : 0);
+	return result;
+}
+
+public NSRect lineFragmentUsedRectForGlyphAtIndex(int /*long*/ glyphIndex, int /*long*/ effectiveGlyphRange) {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_lineFragmentUsedRectForGlyphAtIndex_effectiveRange_, glyphIndex, effectiveGlyphRange);
+	return result;
+}
+
+public NSRect lineFragmentUsedRectForGlyphAtIndex(int /*long*/ glyphIndex, int /*long*/ effectiveGlyphRange, boolean flag) {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_lineFragmentUsedRectForGlyphAtIndex_effectiveRange_withoutAdditionalLayout_, glyphIndex, effectiveGlyphRange, flag);
+	return result;
+}
+
+public NSPoint locationForGlyphAtIndex(int /*long*/ glyphIndex) {
+	NSPoint result = new NSPoint();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_locationForGlyphAtIndex_, glyphIndex);
+	return result;
+}
+
+public int /*long*/ numberOfGlyphs() {
+	return OS.objc_msgSend(this.id, OS.sel_numberOfGlyphs);
+}
+
+public int /*long*/ rectArrayForCharacterRange(NSRange charRange, NSRange selCharRange, NSTextContainer container, int /*long*/ rectCount) {
+	return OS.objc_msgSend(this.id, OS.sel_rectArrayForCharacterRange_withinSelectedCharacterRange_inTextContainer_rectCount_, charRange, selCharRange, container != null ? container.id : 0, rectCount);
+}
+
+public void removeTemporaryAttribute(NSString attrName, NSRange charRange) {
+	OS.objc_msgSend(this.id, OS.sel_removeTemporaryAttribute_forCharacterRange_, attrName != null ? attrName.id : 0, charRange);
+}
+
+public void setBackgroundLayoutEnabled(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setBackgroundLayoutEnabled_, flag);
+}
+
+public void setLineFragmentRect(NSRect fragmentRect, NSRange glyphRange, NSRect usedRect) {
+	OS.objc_msgSend(this.id, OS.sel_setLineFragmentRect_forGlyphRange_usedRect_, fragmentRect, glyphRange, usedRect);
+}
+
+public void setTextStorage(NSTextStorage textStorage) {
+	OS.objc_msgSend(this.id, OS.sel_setTextStorage_, textStorage != null ? textStorage.id : 0);
+}
+
+public NSTypesetter typesetter() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_typesetter);
+	return result != 0 ? new NSTypesetter(result) : null;
+}
+
+public NSRect usedRectForTextContainer(NSTextContainer container) {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_usedRectForTextContainer_, container != null ? container.id : 0);
+	return result;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMenu.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMenu.java
new file mode 100644
index 0000000..1611c73
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMenu.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSMenu extends NSObject {
+
+public NSMenu() {
+	super();
+}
+
+public NSMenu(int /*long*/ id) {
+	super(id);
+}
+
+public NSMenu(id id) {
+	super(id);
+}
+
+public void addItem(NSMenuItem newItem) {
+	OS.objc_msgSend(this.id, OS.sel_addItem_, newItem != null ? newItem.id : 0);
+}
+
+public NSMenuItem addItemWithTitle(NSString aString, int /*long*/ aSelector, NSString charCode) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_addItemWithTitle_action_keyEquivalent_, aString != null ? aString.id : 0, aSelector, charCode != null ? charCode.id : 0);
+	return result != 0 ? new NSMenuItem(result) : null;
+}
+
+public void cancelTracking() {
+	OS.objc_msgSend(this.id, OS.sel_cancelTracking);
+}
+
+public int /*long*/ indexOfItemWithTarget(id target, int /*long*/ actionSelector) {
+	return OS.objc_msgSend(this.id, OS.sel_indexOfItemWithTarget_andAction_, target != null ? target.id : 0, actionSelector);
+}
+
+public NSMenu initWithTitle(NSString aTitle) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithTitle_, aTitle != null ? aTitle.id : 0);
+	return result == this.id ? this : (result != 0 ? new NSMenu(result) : null);
+}
+
+public void insertItem(NSMenuItem newItem, int /*long*/ index) {
+	OS.objc_msgSend(this.id, OS.sel_insertItem_atIndex_, newItem != null ? newItem.id : 0, index);
+}
+
+public NSArray itemArray() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_itemArray);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+public NSMenuItem itemAtIndex(int /*long*/ index) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_itemAtIndex_, index);
+	return result != 0 ? new NSMenuItem(result) : null;
+}
+
+public int /*long*/ numberOfItems() {
+	return OS.objc_msgSend(this.id, OS.sel_numberOfItems);
+}
+
+public static void popUpContextMenu(NSMenu menu, NSEvent event, NSView view) {
+	OS.objc_msgSend(OS.class_NSMenu, OS.sel_popUpContextMenu_withEvent_forView_, menu != null ? menu.id : 0, event != null ? event.id : 0, view != null ? view.id : 0);
+}
+
+public void removeItem(NSMenuItem item) {
+	OS.objc_msgSend(this.id, OS.sel_removeItem_, item != null ? item.id : 0);
+}
+
+public void removeItemAtIndex(int /*long*/ index) {
+	OS.objc_msgSend(this.id, OS.sel_removeItemAtIndex_, index);
+}
+
+public void setAutoenablesItems(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setAutoenablesItems_, flag);
+}
+
+public void setDelegate(id anObject) {
+	OS.objc_msgSend(this.id, OS.sel_setDelegate_, anObject != null ? anObject.id : 0);
+}
+
+public void setSubmenu(NSMenu aMenu, NSMenuItem anItem) {
+	OS.objc_msgSend(this.id, OS.sel_setSubmenu_forItem_, aMenu != null ? aMenu.id : 0, anItem != null ? anItem.id : 0);
+}
+
+public void setTitle(NSString aString) {
+	OS.objc_msgSend(this.id, OS.sel_setTitle_, aString != null ? aString.id : 0);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMenuItem.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMenuItem.java
new file mode 100644
index 0000000..17fbdc7
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMenuItem.java
@@ -0,0 +1,108 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSMenuItem extends NSObject {
+
+public NSMenuItem() {
+	super();
+}
+
+public NSMenuItem(int /*long*/ id) {
+	super(id);
+}
+
+public NSMenuItem(id id) {
+	super(id);
+}
+
+public NSMenuItem initWithTitle(NSString aString, int /*long*/ aSelector, NSString charCode) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithTitle_action_keyEquivalent_, aString != null ? aString.id : 0, aSelector, charCode != null ? charCode.id : 0);
+	return result == this.id ? this : (result != 0 ? new NSMenuItem(result) : null);
+}
+
+public boolean isHidden() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isHidden);
+}
+
+public NSString keyEquivalent() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_keyEquivalent);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public int /*long*/ keyEquivalentModifierMask() {
+	return OS.objc_msgSend(this.id, OS.sel_keyEquivalentModifierMask);
+}
+
+public static NSMenuItem separatorItem() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSMenuItem, OS.sel_separatorItem);
+	return result != 0 ? new NSMenuItem(result) : null;
+}
+
+public void setAction(int /*long*/ aSelector) {
+	OS.objc_msgSend(this.id, OS.sel_setAction_, aSelector);
+}
+
+public void setEnabled(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setEnabled_, flag);
+}
+
+public void setHidden(boolean hidden) {
+	OS.objc_msgSend(this.id, OS.sel_setHidden_, hidden);
+}
+
+public void setImage(NSImage menuImage) {
+	OS.objc_msgSend(this.id, OS.sel_setImage_, menuImage != null ? menuImage.id : 0);
+}
+
+public void setKeyEquivalent(NSString aKeyEquivalent) {
+	OS.objc_msgSend(this.id, OS.sel_setKeyEquivalent_, aKeyEquivalent != null ? aKeyEquivalent.id : 0);
+}
+
+public void setKeyEquivalentModifierMask(int /*long*/ mask) {
+	OS.objc_msgSend(this.id, OS.sel_setKeyEquivalentModifierMask_, mask);
+}
+
+public void setMenu(NSMenu menu) {
+	OS.objc_msgSend(this.id, OS.sel_setMenu_, menu != null ? menu.id : 0);
+}
+
+public void setState(int /*long*/ state) {
+	OS.objc_msgSend(this.id, OS.sel_setState_, state);
+}
+
+public void setSubmenu(NSMenu submenu) {
+	OS.objc_msgSend(this.id, OS.sel_setSubmenu_, submenu != null ? submenu.id : 0);
+}
+
+public void setTarget(id anObject) {
+	OS.objc_msgSend(this.id, OS.sel_setTarget_, anObject != null ? anObject.id : 0);
+}
+
+public void setTitle(NSString aString) {
+	OS.objc_msgSend(this.id, OS.sel_setTitle_, aString != null ? aString.id : 0);
+}
+
+public int /*long*/ state() {
+	return OS.objc_msgSend(this.id, OS.sel_state);
+}
+
+public NSMenu submenu() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_submenu);
+	return result != 0 ? new NSMenu(result) : null;
+}
+
+public NSString title() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_title);
+	return result != 0 ? new NSString(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableArray.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableArray.java
new file mode 100644
index 0000000..c040b3b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableArray.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSMutableArray extends NSArray {
+
+public NSMutableArray() {
+	super();
+}
+
+public NSMutableArray(int /*long*/ id) {
+	super(id);
+}
+
+public NSMutableArray(id id) {
+	super(id);
+}
+
+public void addObject(id anObject) {
+	OS.objc_msgSend(this.id, OS.sel_addObject_, anObject != null ? anObject.id : 0);
+}
+
+public void addObjectsFromArray(NSArray otherArray) {
+	OS.objc_msgSend(this.id, OS.sel_addObjectsFromArray_, otherArray != null ? otherArray.id : 0);
+}
+
+public static NSMutableArray arrayWithCapacity(int /*long*/ numItems) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSMutableArray, OS.sel_arrayWithCapacity_, numItems);
+	return result != 0 ? new NSMutableArray(result) : null;
+}
+
+public NSMutableArray initWithCapacity(int /*long*/ numItems) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithCapacity_, numItems);
+	return result == this.id ? this : (result != 0 ? new NSMutableArray(result) : null);
+}
+
+public void removeLastObject() {
+	OS.objc_msgSend(this.id, OS.sel_removeLastObject);
+}
+
+public void removeObject(id anObject) {
+	OS.objc_msgSend(this.id, OS.sel_removeObject_, anObject != null ? anObject.id : 0);
+}
+
+public void removeObjectAtIndex(int /*long*/ index) {
+	OS.objc_msgSend(this.id, OS.sel_removeObjectAtIndex_, index);
+}
+
+public void removeObjectIdenticalTo(id anObject) {
+	OS.objc_msgSend(this.id, OS.sel_removeObjectIdenticalTo_, anObject != null ? anObject.id : 0);
+}
+
+public static NSArray array() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSMutableArray, OS.sel_array);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+public static NSArray arrayWithObject(id anObject) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSMutableArray, OS.sel_arrayWithObject_, anObject != null ? anObject.id : 0);
+	return result != 0 ? new NSMutableArray(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableAttributedString.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableAttributedString.java
new file mode 100644
index 0000000..cc2d342
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableAttributedString.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSMutableAttributedString extends NSAttributedString {
+
+public NSMutableAttributedString() {
+	super();
+}
+
+public NSMutableAttributedString(int /*long*/ id) {
+	super(id);
+}
+
+public NSMutableAttributedString(id id) {
+	super(id);
+}
+
+public void appendAttributedString(NSAttributedString attrString) {
+	OS.objc_msgSend(this.id, OS.sel_appendAttributedString_, attrString != null ? attrString.id : 0);
+}
+
+public NSMutableString mutableString() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_mutableString);
+	return result != 0 ? new NSMutableString(result) : null;
+}
+
+public void replaceCharactersInRange(NSRange range, NSString str) {
+	OS.objc_msgSend(this.id, OS.sel_replaceCharactersInRange_withString_, range, str != null ? str.id : 0);
+}
+
+public void addAttribute(NSString name, id value, NSRange range) {
+	OS.objc_msgSend(this.id, OS.sel_addAttribute_value_range_, name != null ? name.id : 0, value != null ? value.id : 0, range);
+}
+
+public void beginEditing() {
+	OS.objc_msgSend(this.id, OS.sel_beginEditing);
+}
+
+public void endEditing() {
+	OS.objc_msgSend(this.id, OS.sel_endEditing);
+}
+
+public void removeAttribute(NSString name, NSRange range) {
+	OS.objc_msgSend(this.id, OS.sel_removeAttribute_range_, name != null ? name.id : 0, range);
+}
+
+public void setAttributedString(NSAttributedString attrString) {
+	OS.objc_msgSend(this.id, OS.sel_setAttributedString_, attrString != null ? attrString.id : 0);
+}
+
+public static NSAttributedString attributedStringWithAttachment(NSTextAttachment attachment) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSMutableAttributedString, OS.sel_attributedStringWithAttachment_, attachment != null ? attachment.id : 0);
+	return result != 0 ? new NSAttributedString(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableDictionary.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableDictionary.java
new file mode 100644
index 0000000..7798025
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableDictionary.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSMutableDictionary extends NSDictionary {
+
+public NSMutableDictionary() {
+	super();
+}
+
+public NSMutableDictionary(int /*long*/ id) {
+	super(id);
+}
+
+public NSMutableDictionary(id id) {
+	super(id);
+}
+
+public static NSMutableDictionary dictionaryWithCapacity(int /*long*/ numItems) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSMutableDictionary, OS.sel_dictionaryWithCapacity_, numItems);
+	return result != 0 ? new NSMutableDictionary(result) : null;
+}
+
+public NSMutableDictionary initWithCapacity(int /*long*/ numItems) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithCapacity_, numItems);
+	return result == this.id ? this : (result != 0 ? new NSMutableDictionary(result) : null);
+}
+
+public void removeObjectForKey(id aKey) {
+	OS.objc_msgSend(this.id, OS.sel_removeObjectForKey_, aKey != null ? aKey.id : 0);
+}
+
+public void setDictionary(NSDictionary otherDictionary) {
+	OS.objc_msgSend(this.id, OS.sel_setDictionary_, otherDictionary != null ? otherDictionary.id : 0);
+}
+
+public void setObject(id anObject, id aKey) {
+	OS.objc_msgSend(this.id, OS.sel_setObject_forKey_, anObject != null ? anObject.id : 0, aKey != null ? aKey.id : 0);
+}
+
+public void setValue(id value, NSString key) {
+	OS.objc_msgSend(this.id, OS.sel_setValue_forKey_, value != null ? value.id : 0, key != null ? key.id : 0);
+}
+
+public static NSDictionary dictionaryWithObject(id object, id key) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSMutableDictionary, OS.sel_dictionaryWithObject_forKey_, object != null ? object.id : 0, key != null ? key.id : 0);
+	return result != 0 ? new NSMutableDictionary(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableIndexSet.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableIndexSet.java
new file mode 100644
index 0000000..60f8037
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableIndexSet.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSMutableIndexSet extends NSIndexSet {
+
+public NSMutableIndexSet() {
+	super();
+}
+
+public NSMutableIndexSet(int /*long*/ id) {
+	super(id);
+}
+
+public NSMutableIndexSet(id id) {
+	super(id);
+}
+
+public void addIndex(int /*long*/ value) {
+	OS.objc_msgSend(this.id, OS.sel_addIndex_, value);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableParagraphStyle.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableParagraphStyle.java
new file mode 100644
index 0000000..8cd4eec
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableParagraphStyle.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSMutableParagraphStyle extends NSParagraphStyle {
+
+public NSMutableParagraphStyle() {
+	super();
+}
+
+public NSMutableParagraphStyle(int /*long*/ id) {
+	super(id);
+}
+
+public NSMutableParagraphStyle(id id) {
+	super(id);
+}
+
+public void addTabStop(NSTextTab anObject) {
+	OS.objc_msgSend(this.id, OS.sel_addTabStop_, anObject != null ? anObject.id : 0);
+}
+
+public void setAlignment(int /*long*/ alignment) {
+	OS.objc_msgSend(this.id, OS.sel_setAlignment_, alignment);
+}
+
+public void setDefaultTabInterval(float /*double*/ aFloat) {
+	OS.objc_msgSend(this.id, OS.sel_setDefaultTabInterval_, aFloat);
+}
+
+public void setFirstLineHeadIndent(float /*double*/ aFloat) {
+	OS.objc_msgSend(this.id, OS.sel_setFirstLineHeadIndent_, aFloat);
+}
+
+public void setLineBreakMode(int /*long*/ mode) {
+	OS.objc_msgSend(this.id, OS.sel_setLineBreakMode_, mode);
+}
+
+public void setLineSpacing(float /*double*/ aFloat) {
+	OS.objc_msgSend(this.id, OS.sel_setLineSpacing_, aFloat);
+}
+
+public void setTabStops(NSArray array) {
+	OS.objc_msgSend(this.id, OS.sel_setTabStops_, array != null ? array.id : 0);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableSet.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableSet.java
new file mode 100644
index 0000000..19f89ec
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableSet.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSMutableSet extends NSSet {
+
+public NSMutableSet() {
+	super();
+}
+
+public NSMutableSet(int /*long*/ id) {
+	super(id);
+}
+
+public NSMutableSet(id id) {
+	super(id);
+}
+
+public void addObjectsFromArray(NSArray array) {
+	OS.objc_msgSend(this.id, OS.sel_addObjectsFromArray_, array != null ? array.id : 0);
+}
+
+public static NSSet set() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSMutableSet, OS.sel_set);
+	return result != 0 ? new NSMutableSet(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableString.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableString.java
new file mode 100644
index 0000000..9f3e67e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableString.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSMutableString extends NSString {
+
+public NSMutableString() {
+	super();
+}
+
+public NSMutableString(int /*long*/ id) {
+	super(id);
+}
+
+public NSMutableString(id id) {
+	super(id);
+}
+
+public void appendString(NSString aString) {
+	OS.objc_msgSend(this.id, OS.sel_appendString_, aString != null ? aString.id : 0);
+}
+
+public static NSString stringWithCharacters(char[] characters, int /*long*/ length) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSMutableString, OS.sel_stringWithCharacters_length_, characters, length);
+	return result != 0 ? new NSMutableString(result) : null;
+}
+
+public static NSString stringWithFormat(NSString stringWithFormat) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSMutableString, OS.sel_stringWithFormat_, stringWithFormat != null ? stringWithFormat.id : 0);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public static NSString stringWithUTF8String(int /*long*/ nullTerminatedCString) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSMutableString, OS.sel_stringWithUTF8String_, nullTerminatedCString);
+	return result != 0 ? new NSString(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableURLRequest.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableURLRequest.java
new file mode 100644
index 0000000..36ca289
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSMutableURLRequest.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSMutableURLRequest extends NSURLRequest {
+
+public NSMutableURLRequest() {
+	super();
+}
+
+public NSMutableURLRequest(int /*long*/ id) {
+	super(id);
+}
+
+public NSMutableURLRequest(id id) {
+	super(id);
+}
+
+public void setCachePolicy(int /*long*/ policy) {
+	OS.objc_msgSend(this.id, OS.sel_setCachePolicy_, policy);
+}
+
+public void setURL(NSURL URL) {
+	OS.objc_msgSend(this.id, OS.sel_setURL_, URL != null ? URL.id : 0);
+}
+
+public static NSURLRequest requestWithURL(NSURL URL) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSMutableURLRequest, OS.sel_requestWithURL_, URL != null ? URL.id : 0);
+	return result != 0 ? new NSMutableURLRequest(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSNotification.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSNotification.java
new file mode 100644
index 0000000..e1c32d7
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSNotification.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSNotification extends NSObject {
+
+public NSNotification() {
+	super();
+}
+
+public NSNotification(int /*long*/ id) {
+	super(id);
+}
+
+public NSNotification(id id) {
+	super(id);
+}
+
+public id object() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_object);
+	return result != 0 ? new id(result) : null;
+}
+
+public NSDictionary userInfo() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_userInfo);
+	return result != 0 ? new NSDictionary(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSNotificationCenter.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSNotificationCenter.java
new file mode 100644
index 0000000..611da6e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSNotificationCenter.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSNotificationCenter extends NSObject {
+
+public NSNotificationCenter() {
+	super();
+}
+
+public NSNotificationCenter(int /*long*/ id) {
+	super(id);
+}
+
+public NSNotificationCenter(id id) {
+	super(id);
+}
+
+public void addObserver(id observer, int /*long*/ aSelector, NSString aName, id anObject) {
+	OS.objc_msgSend(this.id, OS.sel_addObserver_selector_name_object_, observer != null ? observer.id : 0, aSelector, aName != null ? aName.id : 0, anObject != null ? anObject.id : 0);
+}
+
+public static NSNotificationCenter defaultCenter() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSNotificationCenter, OS.sel_defaultCenter);
+	return result != 0 ? new NSNotificationCenter(result) : null;
+}
+
+public void removeObserver(id observer) {
+	OS.objc_msgSend(this.id, OS.sel_removeObserver_, observer != null ? observer.id : 0);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSNumber.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSNumber.java
new file mode 100644
index 0000000..461a374
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSNumber.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSNumber extends NSValue {
+
+public NSNumber() {
+	super();
+}
+
+public NSNumber(int /*long*/ id) {
+	super(id);
+}
+
+public NSNumber(id id) {
+	super(id);
+}
+
+public boolean boolValue() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_boolValue);
+}
+
+public double doubleValue() {
+	return OS.objc_msgSend_fpret(this.id, OS.sel_doubleValue);
+}
+
+public float floatValue() {
+	return (float)OS.objc_msgSend_fpret(this.id, OS.sel_floatValue);
+}
+
+public int intValue() {
+	return (int)/*64*/OS.objc_msgSend(this.id, OS.sel_intValue);
+}
+
+public int /*long*/ integerValue() {
+	return OS.objc_msgSend(this.id, OS.sel_integerValue);
+}
+
+public static NSNumber numberWithBool(boolean value) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSNumber, OS.sel_numberWithBool_, value);
+	return result != 0 ? new NSNumber(result) : null;
+}
+
+public static NSNumber numberWithDouble(double value) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSNumber, OS.sel_numberWithDouble_, value);
+	return result != 0 ? new NSNumber(result) : null;
+}
+
+public static NSNumber numberWithInt(int value) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSNumber, OS.sel_numberWithInt_, value);
+	return result != 0 ? new NSNumber(result) : null;
+}
+
+public static NSNumber numberWithInteger(int /*long*/ value) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSNumber, OS.sel_numberWithInteger_, value);
+	return result != 0 ? new NSNumber(result) : null;
+}
+
+public static NSValue valueWithPoint(NSPoint point) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSNumber, OS.sel_valueWithPoint_, point);
+	return result != 0 ? new NSValue(result) : null;
+}
+
+public static NSValue valueWithRange(NSRange range) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSNumber, OS.sel_valueWithRange_, range);
+	return result != 0 ? new NSValue(result) : null;
+}
+
+public static NSValue valueWithRect(NSRect rect) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSNumber, OS.sel_valueWithRect_, rect);
+	return result != 0 ? new NSValue(result) : null;
+}
+
+public static NSValue valueWithSize(NSSize size) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSNumber, OS.sel_valueWithSize_, size);
+	return result != 0 ? new NSValue(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSNumberFormatter.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSNumberFormatter.java
new file mode 100644
index 0000000..b5dfc05
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSNumberFormatter.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSNumberFormatter extends NSFormatter {
+
+public NSNumberFormatter() {
+	super();
+}
+
+public NSNumberFormatter(int /*long*/ id) {
+	super(id);
+}
+
+public NSNumberFormatter(id id) {
+	super(id);
+}
+
+public boolean allowsFloats() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_allowsFloats);
+}
+
+public boolean alwaysShowsDecimalSeparator() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_alwaysShowsDecimalSeparator);
+}
+
+public NSString decimalSeparator() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_decimalSeparator);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public NSNumber maximum() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_maximum);
+	return result != 0 ? new NSNumber(result) : null;
+}
+
+public int /*long*/ maximumFractionDigits() {
+	return OS.objc_msgSend(this.id, OS.sel_maximumFractionDigits);
+}
+
+public int /*long*/ maximumIntegerDigits() {
+	return OS.objc_msgSend(this.id, OS.sel_maximumIntegerDigits);
+}
+
+public NSNumber minimum() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_minimum);
+	return result != 0 ? new NSNumber(result) : null;
+}
+
+public void setAllowsFloats(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setAllowsFloats_, flag);
+}
+
+public void setMaximum(NSNumber number) {
+	OS.objc_msgSend(this.id, OS.sel_setMaximum_, number != null ? number.id : 0);
+}
+
+public void setMaximumFractionDigits(int /*long*/ number) {
+	OS.objc_msgSend(this.id, OS.sel_setMaximumFractionDigits_, number);
+}
+
+public void setMaximumIntegerDigits(int /*long*/ number) {
+	OS.objc_msgSend(this.id, OS.sel_setMaximumIntegerDigits_, number);
+}
+
+public void setMinimum(NSNumber number) {
+	OS.objc_msgSend(this.id, OS.sel_setMinimum_, number != null ? number.id : 0);
+}
+
+public void setMinimumFractionDigits(int /*long*/ number) {
+	OS.objc_msgSend(this.id, OS.sel_setMinimumFractionDigits_, number);
+}
+
+public void setMinimumIntegerDigits(int /*long*/ number) {
+	OS.objc_msgSend(this.id, OS.sel_setMinimumIntegerDigits_, number);
+}
+
+public void setNumberStyle(int /*long*/ style) {
+	OS.objc_msgSend(this.id, OS.sel_setNumberStyle_, style);
+}
+
+public void setPartialStringValidationEnabled(boolean b) {
+	OS.objc_msgSend(this.id, OS.sel_setPartialStringValidationEnabled_, b);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSObject.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSObject.java
new file mode 100644
index 0000000..94d0fbd
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSObject.java
@@ -0,0 +1,161 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSObject extends id {
+
+public NSObject() {
+	super();
+}
+
+public NSObject(int /*long*/ id) {
+	super(id);
+}
+
+public NSObject(id id) {
+	super(id);
+}
+
+public NSObject alloc() {
+	this.id = OS.objc_msgSend(objc_getClass(), OS.sel_alloc);
+	return this;
+}
+
+public id accessibilityAttributeValue(NSString attribute, id parameter) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_accessibilityAttributeValue_forParameter_, attribute != null ? attribute.id : 0, parameter != null ? parameter.id : 0);
+	return result != 0 ? new id(result) : null;
+}
+
+public boolean accessibilitySetOverrideValue(id value, NSString attribute) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_accessibilitySetOverrideValue_forAttribute_, value != null ? value.id : 0, attribute != null ? attribute.id : 0);
+}
+
+public void draggedImage(NSImage image, NSPoint screenPoint, int /*long*/ operation) {
+	OS.objc_msgSend(this.id, OS.sel_draggedImage_endedAt_operation_, image != null ? image.id : 0, screenPoint, operation);
+}
+
+public NSWindow draggingDestinationWindow() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_draggingDestinationWindow);
+	return result != 0 ? new NSWindow(result) : null;
+}
+
+public NSPoint draggingLocation() {
+	NSPoint result = new NSPoint();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_draggingLocation);
+	return result;
+}
+
+public NSPasteboard draggingPasteboard() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_draggingPasteboard);
+	return result != 0 ? new NSPasteboard(result) : null;
+}
+
+public int /*long*/ draggingSourceOperationMask() {
+	return OS.objc_msgSend(this.id, OS.sel_draggingSourceOperationMask);
+}
+
+public NSObject autorelease() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_autorelease);
+	return result == this.id ? this : (result != 0 ? new NSObject(result) : null);
+}
+
+public void cancelAuthenticationChallenge(NSURLAuthenticationChallenge challenge) {
+	OS.objc_msgSend(this.id, OS.sel_cancelAuthenticationChallenge_, challenge != null ? challenge.id : 0);
+}
+
+public NSString className() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_className);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public boolean conformsToProtocol(Protocol aProtocol) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_conformsToProtocol_, aProtocol != null ? aProtocol.id : 0);
+}
+
+public id copy() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_copy);
+	return result != 0 ? new id(result) : null;
+}
+
+public NSString description() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_description);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public NSObject init() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_init);
+	return result == this.id ? this : (result != 0 ? new NSObject(result) : null);
+}
+
+public boolean isEqual(id object) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isEqual_, object != null ? object.id : 0);
+}
+
+public boolean isEqualTo(id object) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isEqualTo_, object != null ? object.id : 0);
+}
+
+public boolean isKindOfClass(int /*long*/ aClass) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isKindOfClass_, aClass);
+}
+
+public id mutableCopy() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_mutableCopy);
+	return result != 0 ? new id(result) : null;
+}
+
+public void performSelectorOnMainThread(int /*long*/ aSelector, id arg, boolean wait) {
+	OS.objc_msgSend(this.id, OS.sel_performSelectorOnMainThread_withObject_waitUntilDone_, aSelector, arg != null ? arg.id : 0, wait);
+}
+
+public void release() {
+	OS.objc_msgSend(this.id, OS.sel_release);
+}
+
+public boolean respondsToSelector(int /*long*/ aSelector) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_respondsToSelector_, aSelector);
+}
+
+public id retain() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_retain);
+	return result != 0 ? new id(result) : null;
+}
+
+public int /*long*/ retainCount() {
+	return OS.objc_msgSend(this.id, OS.sel_retainCount);
+}
+
+public void setValue(id value, NSString key) {
+	OS.objc_msgSend(this.id, OS.sel_setValue_forKey_, value != null ? value.id : 0, key != null ? key.id : 0);
+}
+
+public int /*long*/ superclass() {
+	return OS.objc_msgSend(this.id, OS.sel_superclass);
+}
+
+public void useCredential(NSURLCredential credential, NSURLAuthenticationChallenge challenge) {
+	OS.objc_msgSend(this.id, OS.sel_useCredential_forAuthenticationChallenge_, credential != null ? credential.id : 0, challenge != null ? challenge.id : 0);
+}
+
+public id valueForKey(NSString key) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_valueForKey_, key != null ? key.id : 0);
+	return result != 0 ? new id(result) : null;
+}
+
+public void addEventListener(NSString type, id listener, boolean useCapture) {
+	OS.objc_msgSend(this.id, OS.sel_addEventListener_listener_useCapture_, type != null ? type.id : 0, listener != null ? listener.id : 0, useCapture);
+}
+
+public void handleEvent(DOMEvent evt) {
+	OS.objc_msgSend(this.id, OS.sel_handleEvent_, evt != null ? evt.id : 0);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSOpenGLContext.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSOpenGLContext.java
new file mode 100644
index 0000000..fd688df
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSOpenGLContext.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSOpenGLContext extends NSObject {
+
+public NSOpenGLContext() {
+	super();
+}
+
+public NSOpenGLContext(int /*long*/ id) {
+	super(id);
+}
+
+public NSOpenGLContext(id id) {
+	super(id);
+}
+
+public static void clearCurrentContext() {
+	OS.objc_msgSend(OS.class_NSOpenGLContext, OS.sel_clearCurrentContext);
+}
+
+public void clearDrawable() {
+	OS.objc_msgSend(this.id, OS.sel_clearDrawable);
+}
+
+public static NSOpenGLContext currentContext() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSOpenGLContext, OS.sel_currentContext);
+	return result != 0 ? new NSOpenGLContext(result) : null;
+}
+
+public void flushBuffer() {
+	OS.objc_msgSend(this.id, OS.sel_flushBuffer);
+}
+
+public NSOpenGLContext initWithFormat(NSOpenGLPixelFormat format, NSOpenGLContext share) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithFormat_shareContext_, format != null ? format.id : 0, share != null ? share.id : 0);
+	return result == this.id ? this : (result != 0 ? new NSOpenGLContext(result) : null);
+}
+
+public void makeCurrentContext() {
+	OS.objc_msgSend(this.id, OS.sel_makeCurrentContext);
+}
+
+public void setView(NSView view) {
+	OS.objc_msgSend(this.id, OS.sel_setView_, view != null ? view.id : 0);
+}
+
+public void update() {
+	OS.objc_msgSend(this.id, OS.sel_update);
+}
+
+public NSView view() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_view);
+	return result != 0 ? new NSView(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSOpenGLPixelFormat.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSOpenGLPixelFormat.java
new file mode 100644
index 0000000..e3f786d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSOpenGLPixelFormat.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSOpenGLPixelFormat extends NSObject {
+
+public NSOpenGLPixelFormat() {
+	super();
+}
+
+public NSOpenGLPixelFormat(int /*long*/ id) {
+	super(id);
+}
+
+public NSOpenGLPixelFormat(id id) {
+	super(id);
+}
+
+public void getValues(int[] /*long[]*/ vals, int attrib, int screen) {
+	OS.objc_msgSend(this.id, OS.sel_getValues_forAttribute_forVirtualScreen_, vals, attrib, screen);
+}
+
+public id initWithAttributes(int[] attribs) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithAttributes_, attribs);
+	return result != 0 ? new id(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSOpenPanel.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSOpenPanel.java
new file mode 100644
index 0000000..a53b6d2
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSOpenPanel.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSOpenPanel extends NSSavePanel {
+
+public NSOpenPanel() {
+	super();
+}
+
+public NSOpenPanel(int /*long*/ id) {
+	super(id);
+}
+
+public NSOpenPanel(id id) {
+	super(id);
+}
+
+public NSArray filenames() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_filenames);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+public static NSOpenPanel openPanel() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSOpenPanel, OS.sel_openPanel);
+	return result != 0 ? new NSOpenPanel(result) : null;
+}
+
+public void setAllowsMultipleSelection(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setAllowsMultipleSelection_, flag);
+}
+
+public void setCanChooseDirectories(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setCanChooseDirectories_, flag);
+}
+
+public void setCanChooseFiles(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setCanChooseFiles_, flag);
+}
+
+public static NSSavePanel savePanel() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSOpenPanel, OS.sel_savePanel);
+	return result != 0 ? new NSSavePanel(result) : null;
+}
+
+public static float /*double*/ minFrameWidthWithTitle(NSString aTitle, int /*long*/ aStyle) {
+	return (float)OS.objc_msgSend_fpret(OS.class_NSOpenPanel, OS.sel_minFrameWidthWithTitle_styleMask_, aTitle != null ? aTitle.id : 0, aStyle);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSOutlineView.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSOutlineView.java
new file mode 100644
index 0000000..cbc4704
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSOutlineView.java
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSOutlineView extends NSTableView {
+
+public NSOutlineView() {
+	super();
+}
+
+public NSOutlineView(int /*long*/ id) {
+	super(id);
+}
+
+public NSOutlineView(id id) {
+	super(id);
+}
+
+public void collapseItem(id item) {
+	OS.objc_msgSend(this.id, OS.sel_collapseItem_, item != null ? item.id : 0);
+}
+
+public void collapseItem(id item, boolean collapseChildren) {
+	OS.objc_msgSend(this.id, OS.sel_collapseItem_collapseChildren_, item != null ? item.id : 0, collapseChildren);
+}
+
+public void expandItem(id item) {
+	OS.objc_msgSend(this.id, OS.sel_expandItem_, item != null ? item.id : 0);
+}
+
+public void expandItem(id item, boolean expandChildren) {
+	OS.objc_msgSend(this.id, OS.sel_expandItem_expandChildren_, item != null ? item.id : 0, expandChildren);
+}
+
+public NSRect frameOfOutlineCellAtRow(int /*long*/ row) {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_frameOfOutlineCellAtRow_, row);
+	return result;
+}
+
+public float /*double*/ indentationPerLevel() {
+	return (float)OS.objc_msgSend_fpret(this.id, OS.sel_indentationPerLevel);
+}
+
+public boolean isItemExpanded(id item) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isItemExpanded_, item != null ? item.id : 0);
+}
+
+public id itemAtRow(int /*long*/ row) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_itemAtRow_, row);
+	return result != 0 ? new id(result) : null;
+}
+
+public int /*long*/ levelForItem(id item) {
+	return OS.objc_msgSend(this.id, OS.sel_levelForItem_, item != null ? item.id : 0);
+}
+
+public NSTableColumn outlineTableColumn() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_outlineTableColumn);
+	return result != 0 ? new NSTableColumn(result) : null;
+}
+
+public void reloadItem(id item, boolean reloadChildren) {
+	OS.objc_msgSend(this.id, OS.sel_reloadItem_reloadChildren_, item != null ? item.id : 0, reloadChildren);
+}
+
+public int /*long*/ rowForItem(id item) {
+	return OS.objc_msgSend(this.id, OS.sel_rowForItem_, item != null ? item.id : 0);
+}
+
+public void setAutoresizesOutlineColumn(boolean resize) {
+	OS.objc_msgSend(this.id, OS.sel_setAutoresizesOutlineColumn_, resize);
+}
+
+public void setAutosaveExpandedItems(boolean save) {
+	OS.objc_msgSend(this.id, OS.sel_setAutosaveExpandedItems_, save);
+}
+
+public void setDropItem(id item, int /*long*/ index) {
+	OS.objc_msgSend(this.id, OS.sel_setDropItem_dropChildIndex_, item != null ? item.id : 0, index);
+}
+
+public void setOutlineTableColumn(NSTableColumn outlineTableColumn) {
+	OS.objc_msgSend(this.id, OS.sel_setOutlineTableColumn_, outlineTableColumn != null ? outlineTableColumn.id : 0);
+}
+
+public static int /*long*/ cellClass() {
+	return OS.objc_msgSend(OS.class_NSOutlineView, OS.sel_cellClass);
+}
+
+public static void setCellClass(int /*long*/ factoryId) {
+	OS.objc_msgSend(OS.class_NSOutlineView, OS.sel_setCellClass_, factoryId);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPanel.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPanel.java
new file mode 100644
index 0000000..a7ad52d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPanel.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSPanel extends NSWindow {
+
+public NSPanel() {
+	super();
+}
+
+public NSPanel(int /*long*/ id) {
+	super(id);
+}
+
+public NSPanel(id id) {
+	super(id);
+}
+
+public void setWorksWhenModal(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setWorksWhenModal_, flag);
+}
+
+public boolean worksWhenModal() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_worksWhenModal);
+}
+
+public static float /*double*/ minFrameWidthWithTitle(NSString aTitle, int /*long*/ aStyle) {
+	return (float)OS.objc_msgSend_fpret(OS.class_NSPanel, OS.sel_minFrameWidthWithTitle_styleMask_, aTitle != null ? aTitle.id : 0, aStyle);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSParagraphStyle.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSParagraphStyle.java
new file mode 100644
index 0000000..9ee0c1d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSParagraphStyle.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSParagraphStyle extends NSObject {
+
+public NSParagraphStyle() {
+	super();
+}
+
+public NSParagraphStyle(int /*long*/ id) {
+	super(id);
+}
+
+public NSParagraphStyle(id id) {
+	super(id);
+}
+
+public int /*long*/ alignment() {
+	return OS.objc_msgSend(this.id, OS.sel_alignment);
+}
+
+public NSArray tabStops() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_tabStops);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPasteboard.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPasteboard.java
new file mode 100644
index 0000000..593edac
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPasteboard.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSPasteboard extends NSObject {
+
+public NSPasteboard() {
+	super();
+}
+
+public NSPasteboard(int /*long*/ id) {
+	super(id);
+}
+
+public NSPasteboard(id id) {
+	super(id);
+}
+
+public int /*long*/ addTypes(NSArray newTypes, id newOwner) {
+	return OS.objc_msgSend(this.id, OS.sel_addTypes_owner_, newTypes != null ? newTypes.id : 0, newOwner != null ? newOwner.id : 0);
+}
+
+public NSString availableTypeFromArray(NSArray types) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_availableTypeFromArray_, types != null ? types.id : 0);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public NSData dataForType(NSString dataType) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_dataForType_, dataType != null ? dataType.id : 0);
+	return result != 0 ? new NSData(result) : null;
+}
+
+public int /*long*/ declareTypes(NSArray newTypes, id newOwner) {
+	return OS.objc_msgSend(this.id, OS.sel_declareTypes_owner_, newTypes != null ? newTypes.id : 0, newOwner != null ? newOwner.id : 0);
+}
+
+public static NSPasteboard generalPasteboard() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSPasteboard, OS.sel_generalPasteboard);
+	return result != 0 ? new NSPasteboard(result) : null;
+}
+
+public static NSPasteboard pasteboardWithName(NSString name) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSPasteboard, OS.sel_pasteboardWithName_, name != null ? name.id : 0);
+	return result != 0 ? new NSPasteboard(result) : null;
+}
+
+public id propertyListForType(NSString dataType) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_propertyListForType_, dataType != null ? dataType.id : 0);
+	return result != 0 ? new id(result) : null;
+}
+
+public boolean setData(NSData data, NSString dataType) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_setData_forType_, data != null ? data.id : 0, dataType != null ? dataType.id : 0);
+}
+
+public boolean setPropertyList(id plist, NSString dataType) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_setPropertyList_forType_, plist != null ? plist.id : 0, dataType != null ? dataType.id : 0);
+}
+
+public boolean setString(NSString string, NSString dataType) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_setString_forType_, string != null ? string.id : 0, dataType != null ? dataType.id : 0);
+}
+
+public NSString stringForType(NSString dataType) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_stringForType_, dataType != null ? dataType.id : 0);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public NSArray types() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_types);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPoint.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPoint.java
new file mode 100755
index 0000000..e07dfd3
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPoint.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2009 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.internal.cocoa;
+
+
+public class NSPoint {
+	public float /*double*/ x;
+	public float /*double*/ y;
+	public static final int sizeof = OS.NSPoint_sizeof();
+
+	public String toString() {
+		return "NSPoint{" + x + "," + y + "}"; 
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPopUpButton.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPopUpButton.java
new file mode 100644
index 0000000..c74656f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPopUpButton.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSPopUpButton extends NSButton {
+
+public NSPopUpButton() {
+	super();
+}
+
+public NSPopUpButton(int /*long*/ id) {
+	super(id);
+}
+
+public NSPopUpButton(id id) {
+	super(id);
+}
+
+public int /*long*/ indexOfSelectedItem() {
+	return OS.objc_msgSend(this.id, OS.sel_indexOfSelectedItem);
+}
+
+public NSPopUpButton initWithFrame(NSRect buttonFrame, boolean flag) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithFrame_pullsDown_, buttonFrame, flag);
+	return result == this.id ? this : (result != 0 ? new NSPopUpButton(result) : null);
+}
+
+public NSMenuItem itemAtIndex(int /*long*/ index) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_itemAtIndex_, index);
+	return result != 0 ? new NSMenuItem(result) : null;
+}
+
+public NSString itemTitleAtIndex(int /*long*/ index) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_itemTitleAtIndex_, index);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public NSMenu menu() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_menu);
+	return result != 0 ? new NSMenu(result) : null;
+}
+
+public int /*long*/ numberOfItems() {
+	return OS.objc_msgSend(this.id, OS.sel_numberOfItems);
+}
+
+public void removeAllItems() {
+	OS.objc_msgSend(this.id, OS.sel_removeAllItems);
+}
+
+public void removeItemAtIndex(int /*long*/ index) {
+	OS.objc_msgSend(this.id, OS.sel_removeItemAtIndex_, index);
+}
+
+public void selectItem(NSMenuItem item) {
+	OS.objc_msgSend(this.id, OS.sel_selectItem_, item != null ? item.id : 0);
+}
+
+public void selectItemAtIndex(int /*long*/ index) {
+	OS.objc_msgSend(this.id, OS.sel_selectItemAtIndex_, index);
+}
+
+public void setAutoenablesItems(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setAutoenablesItems_, flag);
+}
+
+public void setPullsDown(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setPullsDown_, flag);
+}
+
+public NSString titleOfSelectedItem() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_titleOfSelectedItem);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public static int /*long*/ cellClass() {
+	return OS.objc_msgSend(OS.class_NSPopUpButton, OS.sel_cellClass);
+}
+
+public static void setCellClass(int /*long*/ factoryId) {
+	OS.objc_msgSend(OS.class_NSPopUpButton, OS.sel_setCellClass_, factoryId);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPrintInfo.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPrintInfo.java
new file mode 100644
index 0000000..41a58a9
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPrintInfo.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSPrintInfo extends NSObject {
+
+public NSPrintInfo() {
+	super();
+}
+
+public NSPrintInfo(int /*long*/ id) {
+	super(id);
+}
+
+public NSPrintInfo(id id) {
+	super(id);
+}
+
+public static NSPrinter defaultPrinter() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSPrintInfo, OS.sel_defaultPrinter);
+	return result != 0 ? new NSPrinter(result) : null;
+}
+
+public NSMutableDictionary dictionary() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_dictionary);
+	return result != 0 ? new NSMutableDictionary(result) : null;
+}
+
+public NSRect imageablePageBounds() {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_imageablePageBounds);
+	return result;
+}
+
+public NSPrintInfo initWithDictionary(NSDictionary attributes) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithDictionary_, attributes != null ? attributes.id : 0);
+	return result == this.id ? this : (result != 0 ? new NSPrintInfo(result) : null);
+}
+
+public NSString jobDisposition() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_jobDisposition);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public int /*long*/ orientation() {
+	return OS.objc_msgSend(this.id, OS.sel_orientation);
+}
+
+public NSSize paperSize() {
+	NSSize result = new NSSize();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_paperSize);
+	return result;
+}
+
+public NSPrinter printer() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_printer);
+	return result != 0 ? new NSPrinter(result) : null;
+}
+
+public void setJobDisposition(NSString disposition) {
+	OS.objc_msgSend(this.id, OS.sel_setJobDisposition_, disposition != null ? disposition.id : 0);
+}
+
+public void setOrientation(int /*long*/ orientation) {
+	OS.objc_msgSend(this.id, OS.sel_setOrientation_, orientation);
+}
+
+public void setPrinter(NSPrinter printer) {
+	OS.objc_msgSend(this.id, OS.sel_setPrinter_, printer != null ? printer.id : 0);
+}
+
+public void setUpPrintOperationDefaultValues() {
+	OS.objc_msgSend(this.id, OS.sel_setUpPrintOperationDefaultValues);
+}
+
+public static NSPrintInfo sharedPrintInfo() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSPrintInfo, OS.sel_sharedPrintInfo);
+	return result != 0 ? new NSPrintInfo(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPrintOperation.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPrintOperation.java
new file mode 100644
index 0000000..7468f1a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPrintOperation.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSPrintOperation extends NSObject {
+
+public NSPrintOperation() {
+	super();
+}
+
+public NSPrintOperation(int /*long*/ id) {
+	super(id);
+}
+
+public NSPrintOperation(id id) {
+	super(id);
+}
+
+public void cleanUpOperation() {
+	OS.objc_msgSend(this.id, OS.sel_cleanUpOperation);
+}
+
+public NSGraphicsContext context() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_context);
+	return result != 0 ? new NSGraphicsContext(result) : null;
+}
+
+public NSGraphicsContext createContext() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_createContext);
+	return result != 0 ? new NSGraphicsContext(result) : null;
+}
+
+public boolean deliverResult() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_deliverResult);
+}
+
+public void destroyContext() {
+	OS.objc_msgSend(this.id, OS.sel_destroyContext);
+}
+
+public static NSPrintOperation printOperationWithView(NSView view, NSPrintInfo printInfo) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSPrintOperation, OS.sel_printOperationWithView_printInfo_, view != null ? view.id : 0, printInfo != null ? printInfo.id : 0);
+	return result != 0 ? new NSPrintOperation(result) : null;
+}
+
+public boolean runOperation() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_runOperation);
+}
+
+public static void setCurrentOperation(NSPrintOperation operation) {
+	OS.objc_msgSend(OS.class_NSPrintOperation, OS.sel_setCurrentOperation_, operation != null ? operation.id : 0);
+}
+
+public void setJobTitle(NSString jobTitle) {
+	OS.objc_msgSend(this.id, OS.sel_setJobTitle_, jobTitle != null ? jobTitle.id : 0);
+}
+
+public void setShowsPrintPanel(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setShowsPrintPanel_, flag);
+}
+
+public void setShowsProgressPanel(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setShowsProgressPanel_, flag);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPrintPanel.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPrintPanel.java
new file mode 100644
index 0000000..46440ae
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPrintPanel.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSPrintPanel extends NSObject {
+
+public NSPrintPanel() {
+	super();
+}
+
+public NSPrintPanel(int /*long*/ id) {
+	super(id);
+}
+
+public NSPrintPanel(id id) {
+	super(id);
+}
+
+public void beginSheetWithPrintInfo(NSPrintInfo printInfo, NSWindow docWindow, id delegate, int /*long*/ didEndSelector, int /*long*/ contextInfo) {
+	OS.objc_msgSend(this.id, OS.sel_beginSheetWithPrintInfo_modalForWindow_delegate_didEndSelector_contextInfo_, printInfo != null ? printInfo.id : 0, docWindow != null ? docWindow.id : 0, delegate != null ? delegate.id : 0, didEndSelector, contextInfo);
+}
+
+public int /*long*/ options() {
+	return OS.objc_msgSend(this.id, OS.sel_options);
+}
+
+public static NSPrintPanel printPanel() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSPrintPanel, OS.sel_printPanel);
+	return result != 0 ? new NSPrintPanel(result) : null;
+}
+
+public int /*long*/ runModalWithPrintInfo(NSPrintInfo printInfo) {
+	return OS.objc_msgSend(this.id, OS.sel_runModalWithPrintInfo_, printInfo != null ? printInfo.id : 0);
+}
+
+public void setOptions(int /*long*/ options) {
+	OS.objc_msgSend(this.id, OS.sel_setOptions_, options);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPrinter.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPrinter.java
new file mode 100644
index 0000000..16be337
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSPrinter.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSPrinter extends NSObject {
+
+public NSPrinter() {
+	super();
+}
+
+public NSPrinter(int /*long*/ id) {
+	super(id);
+}
+
+public NSPrinter(id id) {
+	super(id);
+}
+
+public NSString name() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_name);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public static NSArray printerNames() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSPrinter, OS.sel_printerNames);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+public static NSPrinter printerWithName(NSString name) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSPrinter, OS.sel_printerWithName_, name != null ? name.id : 0);
+	return result != 0 ? new NSPrinter(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSProgressIndicator.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSProgressIndicator.java
new file mode 100644
index 0000000..7f1fd6b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSProgressIndicator.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSProgressIndicator extends NSView {
+
+public NSProgressIndicator() {
+	super();
+}
+
+public NSProgressIndicator(int /*long*/ id) {
+	super(id);
+}
+
+public NSProgressIndicator(id id) {
+	super(id);
+}
+
+public int /*long*/ controlSize() {
+	return OS.objc_msgSend(this.id, OS.sel_controlSize);
+}
+
+public double doubleValue() {
+	return OS.objc_msgSend_fpret(this.id, OS.sel_doubleValue);
+}
+
+public double maxValue() {
+	return OS.objc_msgSend_fpret(this.id, OS.sel_maxValue);
+}
+
+public double minValue() {
+	return OS.objc_msgSend_fpret(this.id, OS.sel_minValue);
+}
+
+public void setControlSize(int /*long*/ size) {
+	OS.objc_msgSend(this.id, OS.sel_setControlSize_, size);
+}
+
+public void setDoubleValue(double doubleValue) {
+	OS.objc_msgSend(this.id, OS.sel_setDoubleValue_, doubleValue);
+}
+
+public void setIndeterminate(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setIndeterminate_, flag);
+}
+
+public void setMaxValue(double newMaximum) {
+	OS.objc_msgSend(this.id, OS.sel_setMaxValue_, newMaximum);
+}
+
+public void setMinValue(double newMinimum) {
+	OS.objc_msgSend(this.id, OS.sel_setMinValue_, newMinimum);
+}
+
+public void setUsesThreadedAnimation(boolean threadedAnimation) {
+	OS.objc_msgSend(this.id, OS.sel_setUsesThreadedAnimation_, threadedAnimation);
+}
+
+public void sizeToFit() {
+	OS.objc_msgSend(this.id, OS.sel_sizeToFit);
+}
+
+public void startAnimation(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_startAnimation_, sender != null ? sender.id : 0);
+}
+
+public void stopAnimation(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_stopAnimation_, sender != null ? sender.id : 0);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSRange.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSRange.java
new file mode 100644
index 0000000..e6758c2
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSRange.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+public class NSRange {
+	public int /*long*/ location;
+	public int /*long*/ length;
+	public static int sizeof = OS.NSRange_sizeof();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSRect.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSRect.java
new file mode 100755
index 0000000..31a378b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSRect.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2009 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.internal.cocoa;
+
+
+public class NSRect {
+	/** @field accessor=origin.x */
+	public float /*double*/ x;
+	/** @field accessor=origin.y */
+	public float /*double*/ y;
+	/** @field accessor=size.width */
+	public float /*double*/ width;
+	/** @field accessor=size.height */
+	public float /*double*/ height;
+	public static final int sizeof = OS.NSRect_sizeof();
+
+	public String toString() {
+		return "NSRect{" + x + "," + y + "," + width + "," + height + "}"; 
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSResponder.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSResponder.java
new file mode 100644
index 0000000..cbc51fe
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSResponder.java
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSResponder extends NSObject {
+
+public NSResponder() {
+	super();
+}
+
+public NSResponder(int /*long*/ id) {
+	super(id);
+}
+
+public NSResponder(id id) {
+	super(id);
+}
+
+public boolean acceptsFirstResponder() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_acceptsFirstResponder);
+}
+
+public boolean becomeFirstResponder() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_becomeFirstResponder);
+}
+
+public void cursorUpdate(NSEvent event) {
+	OS.objc_msgSend(this.id, OS.sel_cursorUpdate_, event != null ? event.id : 0);
+}
+
+public void doCommandBySelector(int /*long*/ aSelector) {
+	OS.objc_msgSend(this.id, OS.sel_doCommandBySelector_, aSelector);
+}
+
+public void flagsChanged(NSEvent theEvent) {
+	OS.objc_msgSend(this.id, OS.sel_flagsChanged_, theEvent != null ? theEvent.id : 0);
+}
+
+public void helpRequested(NSEvent eventPtr) {
+	OS.objc_msgSend(this.id, OS.sel_helpRequested_, eventPtr != null ? eventPtr.id : 0);
+}
+
+public void insertText(id insertString) {
+	OS.objc_msgSend(this.id, OS.sel_insertText_, insertString != null ? insertString.id : 0);
+}
+
+public void interpretKeyEvents(NSArray eventArray) {
+	OS.objc_msgSend(this.id, OS.sel_interpretKeyEvents_, eventArray != null ? eventArray.id : 0);
+}
+
+public void keyDown(NSEvent theEvent) {
+	OS.objc_msgSend(this.id, OS.sel_keyDown_, theEvent != null ? theEvent.id : 0);
+}
+
+public void keyUp(NSEvent theEvent) {
+	OS.objc_msgSend(this.id, OS.sel_keyUp_, theEvent != null ? theEvent.id : 0);
+}
+
+public void mouseDown(NSEvent theEvent) {
+	OS.objc_msgSend(this.id, OS.sel_mouseDown_, theEvent != null ? theEvent.id : 0);
+}
+
+public void mouseDragged(NSEvent theEvent) {
+	OS.objc_msgSend(this.id, OS.sel_mouseDragged_, theEvent != null ? theEvent.id : 0);
+}
+
+public void mouseEntered(NSEvent theEvent) {
+	OS.objc_msgSend(this.id, OS.sel_mouseEntered_, theEvent != null ? theEvent.id : 0);
+}
+
+public void mouseExited(NSEvent theEvent) {
+	OS.objc_msgSend(this.id, OS.sel_mouseExited_, theEvent != null ? theEvent.id : 0);
+}
+
+public void mouseMoved(NSEvent theEvent) {
+	OS.objc_msgSend(this.id, OS.sel_mouseMoved_, theEvent != null ? theEvent.id : 0);
+}
+
+public void mouseUp(NSEvent theEvent) {
+	OS.objc_msgSend(this.id, OS.sel_mouseUp_, theEvent != null ? theEvent.id : 0);
+}
+
+public void moveToBeginningOfParagraph(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_moveToBeginningOfParagraph_, sender != null ? sender.id : 0);
+}
+
+public void moveToEndOfParagraph(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_moveToEndOfParagraph_, sender != null ? sender.id : 0);
+}
+
+public void moveUp(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_moveUp_, sender != null ? sender.id : 0);
+}
+
+public void noResponderFor(int /*long*/ eventSelector) {
+	OS.objc_msgSend(this.id, OS.sel_noResponderFor_, eventSelector);
+}
+
+public void otherMouseDown(NSEvent theEvent) {
+	OS.objc_msgSend(this.id, OS.sel_otherMouseDown_, theEvent != null ? theEvent.id : 0);
+}
+
+public void otherMouseDragged(NSEvent theEvent) {
+	OS.objc_msgSend(this.id, OS.sel_otherMouseDragged_, theEvent != null ? theEvent.id : 0);
+}
+
+public void otherMouseUp(NSEvent theEvent) {
+	OS.objc_msgSend(this.id, OS.sel_otherMouseUp_, theEvent != null ? theEvent.id : 0);
+}
+
+public void pageDown(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_pageDown_, sender != null ? sender.id : 0);
+}
+
+public void pageUp(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_pageUp_, sender != null ? sender.id : 0);
+}
+
+public boolean resignFirstResponder() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_resignFirstResponder);
+}
+
+public void rightMouseDown(NSEvent theEvent) {
+	OS.objc_msgSend(this.id, OS.sel_rightMouseDown_, theEvent != null ? theEvent.id : 0);
+}
+
+public void rightMouseDragged(NSEvent theEvent) {
+	OS.objc_msgSend(this.id, OS.sel_rightMouseDragged_, theEvent != null ? theEvent.id : 0);
+}
+
+public void rightMouseUp(NSEvent theEvent) {
+	OS.objc_msgSend(this.id, OS.sel_rightMouseUp_, theEvent != null ? theEvent.id : 0);
+}
+
+public void scrollWheel(NSEvent theEvent) {
+	OS.objc_msgSend(this.id, OS.sel_scrollWheel_, theEvent != null ? theEvent.id : 0);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSRunLoop.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSRunLoop.java
new file mode 100644
index 0000000..20b95c1
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSRunLoop.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSRunLoop extends NSObject {
+
+public NSRunLoop() {
+	super();
+}
+
+public NSRunLoop(int /*long*/ id) {
+	super(id);
+}
+
+public NSRunLoop(id id) {
+	super(id);
+}
+
+public void addTimer(NSTimer timer, NSString mode) {
+	OS.objc_msgSend(this.id, OS.sel_addTimer_forMode_, timer != null ? timer.id : 0, mode != null ? mode.id : 0);
+}
+
+public static NSRunLoop currentRunLoop() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSRunLoop, OS.sel_currentRunLoop);
+	return result != 0 ? new NSRunLoop(result) : null;
+}
+
+public static NSRunLoop mainRunLoop() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSRunLoop, OS.sel_mainRunLoop);
+	return result != 0 ? new NSRunLoop(result) : null;
+}
+
+public boolean runMode(NSString mode, NSDate limitDate) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_runMode_beforeDate_, mode != null ? mode.id : 0, limitDate != null ? limitDate.id : 0);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSavePanel.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSavePanel.java
new file mode 100644
index 0000000..e455c29
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSavePanel.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSSavePanel extends NSPanel {
+
+public NSSavePanel() {
+	super();
+}
+
+public NSSavePanel(int /*long*/ id) {
+	super(id);
+}
+
+public NSSavePanel(id id) {
+	super(id);
+}
+
+public NSString filename() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_filename);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public int /*long*/ runModal() {
+	return OS.objc_msgSend(this.id, OS.sel_runModal);
+}
+
+public int /*long*/ runModalForDirectory(NSString path, NSString name) {
+	return OS.objc_msgSend(this.id, OS.sel_runModalForDirectory_file_, path != null ? path.id : 0, name != null ? name.id : 0);
+}
+
+public static NSSavePanel savePanel() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSSavePanel, OS.sel_savePanel);
+	return result != 0 ? new NSSavePanel(result) : null;
+}
+
+public void setAccessoryView(NSView view) {
+	OS.objc_msgSend(this.id, OS.sel_setAccessoryView_, view != null ? view.id : 0);
+}
+
+public void setCanCreateDirectories(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setCanCreateDirectories_, flag);
+}
+
+public void setDirectory(NSString path) {
+	OS.objc_msgSend(this.id, OS.sel_setDirectory_, path != null ? path.id : 0);
+}
+
+public void setMessage(NSString message) {
+	OS.objc_msgSend(this.id, OS.sel_setMessage_, message != null ? message.id : 0);
+}
+
+public void setTitle(NSString title) {
+	OS.objc_msgSend(this.id, OS.sel_setTitle_, title != null ? title.id : 0);
+}
+
+public void validateVisibleColumns() {
+	OS.objc_msgSend(this.id, OS.sel_validateVisibleColumns);
+}
+
+public static float /*double*/ minFrameWidthWithTitle(NSString aTitle, int /*long*/ aStyle) {
+	return (float)OS.objc_msgSend_fpret(OS.class_NSSavePanel, OS.sel_minFrameWidthWithTitle_styleMask_, aTitle != null ? aTitle.id : 0, aStyle);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSScreen.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSScreen.java
new file mode 100644
index 0000000..f6bf26b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSScreen.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSScreen extends NSObject {
+
+public NSScreen() {
+	super();
+}
+
+public NSScreen(int /*long*/ id) {
+	super(id);
+}
+
+public NSScreen(id id) {
+	super(id);
+}
+
+public int depth() {
+	return (int)/*64*/OS.objc_msgSend(this.id, OS.sel_depth);
+}
+
+public NSDictionary deviceDescription() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_deviceDescription);
+	return result != 0 ? new NSDictionary(result) : null;
+}
+
+public NSRect frame() {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_frame);
+	return result;
+}
+
+public static NSScreen mainScreen() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSScreen, OS.sel_mainScreen);
+	return result != 0 ? new NSScreen(result) : null;
+}
+
+public static NSArray screens() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSScreen, OS.sel_screens);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+public NSRect visibleFrame() {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_visibleFrame);
+	return result;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSScrollView.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSScrollView.java
new file mode 100644
index 0000000..9196938
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSScrollView.java
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSScrollView extends NSView {
+
+public NSScrollView() {
+	super();
+}
+
+public NSScrollView(int /*long*/ id) {
+	super(id);
+}
+
+public NSScrollView(id id) {
+	super(id);
+}
+
+public NSSize contentSize() {
+	NSSize result = new NSSize();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_contentSize);
+	return result;
+}
+
+public static NSSize contentSizeForFrameSize(NSSize fSize, boolean hFlag, boolean vFlag, int /*long*/ aType) {
+	NSSize result = new NSSize();
+	OS.objc_msgSend_stret(result, OS.class_NSScrollView, OS.sel_contentSizeForFrameSize_hasHorizontalScroller_hasVerticalScroller_borderType_, fSize, hFlag, vFlag, aType);
+	return result;
+}
+
+public NSClipView contentView() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_contentView);
+	return result != 0 ? new NSClipView(result) : null;
+}
+
+public NSView documentView() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_documentView);
+	return result != 0 ? new NSView(result) : null;
+}
+
+public NSRect documentVisibleRect() {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_documentVisibleRect);
+	return result;
+}
+
+public static NSSize frameSizeForContentSize(NSSize cSize, boolean hFlag, boolean vFlag, int /*long*/ aType) {
+	NSSize result = new NSSize();
+	OS.objc_msgSend_stret(result, OS.class_NSScrollView, OS.sel_frameSizeForContentSize_hasHorizontalScroller_hasVerticalScroller_borderType_, cSize, hFlag, vFlag, aType);
+	return result;
+}
+
+public void reflectScrolledClipView(NSClipView cView) {
+	OS.objc_msgSend(this.id, OS.sel_reflectScrolledClipView_, cView != null ? cView.id : 0);
+}
+
+public void setAutohidesScrollers(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setAutohidesScrollers_, flag);
+}
+
+public void setBorderType(int /*long*/ aType) {
+	OS.objc_msgSend(this.id, OS.sel_setBorderType_, aType);
+}
+
+public void setDocumentView(NSView aView) {
+	OS.objc_msgSend(this.id, OS.sel_setDocumentView_, aView != null ? aView.id : 0);
+}
+
+public void setDrawsBackground(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setDrawsBackground_, flag);
+}
+
+public void setHasHorizontalScroller(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setHasHorizontalScroller_, flag);
+}
+
+public void setHasVerticalScroller(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setHasVerticalScroller_, flag);
+}
+
+public void setHorizontalScroller(NSScroller anObject) {
+	OS.objc_msgSend(this.id, OS.sel_setHorizontalScroller_, anObject != null ? anObject.id : 0);
+}
+
+public void setVerticalScroller(NSScroller anObject) {
+	OS.objc_msgSend(this.id, OS.sel_setVerticalScroller_, anObject != null ? anObject.id : 0);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSScroller.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSScroller.java
new file mode 100644
index 0000000..95c8694
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSScroller.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSScroller extends NSControl {
+
+public NSScroller() {
+	super();
+}
+
+public NSScroller(int /*long*/ id) {
+	super(id);
+}
+
+public NSScroller(id id) {
+	super(id);
+}
+
+public int /*long*/ controlSize() {
+	return OS.objc_msgSend(this.id, OS.sel_controlSize);
+}
+
+public int /*long*/ hitPart() {
+	return OS.objc_msgSend(this.id, OS.sel_hitPart);
+}
+
+public static float /*double*/ scrollerWidth() {
+	return (float)OS.objc_msgSend_fpret(OS.class_NSScroller, OS.sel_scrollerWidth);
+}
+
+public static float /*double*/ scrollerWidthForControlSize(int /*long*/ controlSize) {
+	return (float)OS.objc_msgSend_fpret(OS.class_NSScroller, OS.sel_scrollerWidthForControlSize_, controlSize);
+}
+
+public void setControlSize(int /*long*/ controlSize) {
+	OS.objc_msgSend(this.id, OS.sel_setControlSize_, controlSize);
+}
+
+public void setFloatValue(float aFloat, float /*double*/ proportion) {
+	OS.objc_msgSend(this.id, OS.sel_setFloatValue_knobProportion_, aFloat, proportion);
+}
+
+public static int /*long*/ cellClass() {
+	return OS.objc_msgSend(OS.class_NSScroller, OS.sel_cellClass);
+}
+
+public static void setCellClass(int /*long*/ factoryId) {
+	OS.objc_msgSend(OS.class_NSScroller, OS.sel_setCellClass_, factoryId);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSearchField.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSearchField.java
new file mode 100644
index 0000000..d13e0df
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSearchField.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSSearchField extends NSTextField {
+
+public NSSearchField() {
+	super();
+}
+
+public NSSearchField(int /*long*/ id) {
+	super(id);
+}
+
+public NSSearchField(id id) {
+	super(id);
+}
+
+public NSArray recentSearches() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_recentSearches);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+public static int /*long*/ cellClass() {
+	return OS.objc_msgSend(OS.class_NSSearchField, OS.sel_cellClass);
+}
+
+public static void setCellClass(int /*long*/ factoryId) {
+	OS.objc_msgSend(OS.class_NSSearchField, OS.sel_setCellClass_, factoryId);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSearchFieldCell.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSearchFieldCell.java
new file mode 100644
index 0000000..8829bf0
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSearchFieldCell.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSSearchFieldCell extends NSTextFieldCell {
+
+public NSSearchFieldCell() {
+	super();
+}
+
+public NSSearchFieldCell(int /*long*/ id) {
+	super(id);
+}
+
+public NSSearchFieldCell(id id) {
+	super(id);
+}
+
+public NSButtonCell cancelButtonCell() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_cancelButtonCell);
+	return result != 0 ? new NSButtonCell(result) : null;
+}
+
+public NSButtonCell searchButtonCell() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_searchButtonCell);
+	return result != 0 ? new NSButtonCell(result) : null;
+}
+
+public NSRect searchTextRectForBounds(NSRect rect) {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_searchTextRectForBounds_, rect);
+	return result;
+}
+
+public void setCancelButtonCell(NSButtonCell cell) {
+	OS.objc_msgSend(this.id, OS.sel_setCancelButtonCell_, cell != null ? cell.id : 0);
+}
+
+public void setSearchButtonCell(NSButtonCell cell) {
+	OS.objc_msgSend(this.id, OS.sel_setSearchButtonCell_, cell != null ? cell.id : 0);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSecureTextField.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSecureTextField.java
new file mode 100644
index 0000000..58fe716
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSecureTextField.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSSecureTextField extends NSTextField {
+
+public NSSecureTextField() {
+	super();
+}
+
+public NSSecureTextField(int /*long*/ id) {
+	super(id);
+}
+
+public NSSecureTextField(id id) {
+	super(id);
+}
+
+public static int /*long*/ cellClass() {
+	return OS.objc_msgSend(OS.class_NSSecureTextField, OS.sel_cellClass);
+}
+
+public static void setCellClass(int /*long*/ factoryId) {
+	OS.objc_msgSend(OS.class_NSSecureTextField, OS.sel_setCellClass_, factoryId);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSegmentedCell.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSegmentedCell.java
new file mode 100644
index 0000000..26a7d16
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSegmentedCell.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSSegmentedCell extends NSActionCell {
+
+public NSSegmentedCell() {
+	super();
+}
+
+public NSSegmentedCell(int /*long*/ id) {
+	super(id);
+}
+
+public NSSegmentedCell(id id) {
+	super(id);
+}
+
+public void setEnabled(boolean enabled, int /*long*/ segment) {
+	OS.objc_msgSend(this.id, OS.sel_setEnabled_forSegment_, enabled, segment);
+}
+
+public void setImage(NSImage image, int /*long*/ segment) {
+	OS.objc_msgSend(this.id, OS.sel_setImage_forSegment_, image != null ? image.id : 0, segment);
+}
+
+public void setLabel(NSString label, int /*long*/ segment) {
+	OS.objc_msgSend(this.id, OS.sel_setLabel_forSegment_, label != null ? label.id : 0, segment);
+}
+
+public void setMenu(NSMenu menu, int /*long*/ segment) {
+	OS.objc_msgSend(this.id, OS.sel_setMenu_forSegment_, menu != null ? menu.id : 0, segment);
+}
+
+public void setSegmentCount(int /*long*/ count) {
+	OS.objc_msgSend(this.id, OS.sel_setSegmentCount_, count);
+}
+
+public void setSegmentStyle(int /*long*/ segmentStyle) {
+	OS.objc_msgSend(this.id, OS.sel_setSegmentStyle_, segmentStyle);
+}
+
+public void setSelected(boolean selected, int /*long*/ segment) {
+	OS.objc_msgSend(this.id, OS.sel_setSelected_forSegment_, selected, segment);
+}
+
+public void setSelectedSegment(int /*long*/ selectedSegment) {
+	OS.objc_msgSend(this.id, OS.sel_setSelectedSegment_, selectedSegment);
+}
+
+public void setTag(int /*long*/ tag, int /*long*/ segment) {
+	OS.objc_msgSend(this.id, OS.sel_setTag_forSegment_, tag, segment);
+}
+
+public void setToolTip(NSString toolTip, int /*long*/ segment) {
+	OS.objc_msgSend(this.id, OS.sel_setToolTip_forSegment_, toolTip != null ? toolTip.id : 0, segment);
+}
+
+public void setTrackingMode(int /*long*/ trackingMode) {
+	OS.objc_msgSend(this.id, OS.sel_setTrackingMode_, trackingMode);
+}
+
+public void setWidth(float /*double*/ width, int /*long*/ segment) {
+	OS.objc_msgSend(this.id, OS.sel_setWidth_forSegment_, width, segment);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSet.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSet.java
new file mode 100644
index 0000000..ed6afcc
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSet.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSSet extends NSObject {
+
+public NSSet() {
+	super();
+}
+
+public NSSet(int /*long*/ id) {
+	super(id);
+}
+
+public NSSet(id id) {
+	super(id);
+}
+
+public int /*long*/ count() {
+	return OS.objc_msgSend(this.id, OS.sel_count);
+}
+
+public NSEnumerator objectEnumerator() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_objectEnumerator);
+	return result != 0 ? new NSEnumerator(result) : null;
+}
+
+public static NSSet set() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSSet, OS.sel_set);
+	return result != 0 ? new NSSet(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSize.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSize.java
new file mode 100755
index 0000000..9be69e9
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSize.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.internal.cocoa;
+
+
+public class NSSize {
+	public float /*double*/ width;
+	public float /*double*/ height;
+	public static final int sizeof = OS.NSSize_sizeof();
+	
+	public String toString() {
+		return "NSSize{" + width + "," + height + "}"; 
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSlider.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSlider.java
new file mode 100644
index 0000000..b69a139
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSSlider.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSSlider extends NSControl {
+
+public NSSlider() {
+	super();
+}
+
+public NSSlider(int /*long*/ id) {
+	super(id);
+}
+
+public NSSlider(id id) {
+	super(id);
+}
+
+public float /*double*/ knobThickness() {
+	return (float)OS.objc_msgSend_fpret(this.id, OS.sel_knobThickness);
+}
+
+public double maxValue() {
+	return OS.objc_msgSend_fpret(this.id, OS.sel_maxValue);
+}
+
+public double minValue() {
+	return OS.objc_msgSend_fpret(this.id, OS.sel_minValue);
+}
+
+public void setMaxValue(double aDouble) {
+	OS.objc_msgSend(this.id, OS.sel_setMaxValue_, aDouble);
+}
+
+public void setMinValue(double aDouble) {
+	OS.objc_msgSend(this.id, OS.sel_setMinValue_, aDouble);
+}
+
+public static int /*long*/ cellClass() {
+	return OS.objc_msgSend(OS.class_NSSlider, OS.sel_cellClass);
+}
+
+public static void setCellClass(int /*long*/ factoryId) {
+	OS.objc_msgSend(OS.class_NSSlider, OS.sel_setCellClass_, factoryId);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSStatusBar.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSStatusBar.java
new file mode 100644
index 0000000..c457ccf
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSStatusBar.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSStatusBar extends NSObject {
+
+public NSStatusBar() {
+	super();
+}
+
+public NSStatusBar(int /*long*/ id) {
+	super(id);
+}
+
+public NSStatusBar(id id) {
+	super(id);
+}
+
+public void removeStatusItem(NSStatusItem item) {
+	OS.objc_msgSend(this.id, OS.sel_removeStatusItem_, item != null ? item.id : 0);
+}
+
+public NSStatusItem statusItemWithLength(float /*double*/ length) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_statusItemWithLength_, length);
+	return result != 0 ? new NSStatusItem(result) : null;
+}
+
+public static NSStatusBar systemStatusBar() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSStatusBar, OS.sel_systemStatusBar);
+	return result != 0 ? new NSStatusBar(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSStatusItem.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSStatusItem.java
new file mode 100644
index 0000000..0b5f65c
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSStatusItem.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSStatusItem extends NSObject {
+
+public NSStatusItem() {
+	super();
+}
+
+public NSStatusItem(int /*long*/ id) {
+	super(id);
+}
+
+public NSStatusItem(id id) {
+	super(id);
+}
+
+public void drawStatusBarBackgroundInRect(NSRect rect, boolean highlight) {
+	OS.objc_msgSend(this.id, OS.sel_drawStatusBarBackgroundInRect_withHighlight_, rect, highlight);
+}
+
+public void popUpStatusItemMenu(NSMenu menu) {
+	OS.objc_msgSend(this.id, OS.sel_popUpStatusItemMenu_, menu != null ? menu.id : 0);
+}
+
+public void setHighlightMode(boolean highlightMode) {
+	OS.objc_msgSend(this.id, OS.sel_setHighlightMode_, highlightMode);
+}
+
+public void setLength(float /*double*/ length) {
+	OS.objc_msgSend(this.id, OS.sel_setLength_, length);
+}
+
+public void setView(NSView view) {
+	OS.objc_msgSend(this.id, OS.sel_setView_, view != null ? view.id : 0);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSStepper.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSStepper.java
new file mode 100644
index 0000000..f3b8d78
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSStepper.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSStepper extends NSControl {
+
+public NSStepper() {
+	super();
+}
+
+public NSStepper(int /*long*/ id) {
+	super(id);
+}
+
+public NSStepper(id id) {
+	super(id);
+}
+
+public double increment() {
+	return OS.objc_msgSend_fpret(this.id, OS.sel_increment);
+}
+
+public double maxValue() {
+	return OS.objc_msgSend_fpret(this.id, OS.sel_maxValue);
+}
+
+public double minValue() {
+	return OS.objc_msgSend_fpret(this.id, OS.sel_minValue);
+}
+
+public void setIncrement(double increment) {
+	OS.objc_msgSend(this.id, OS.sel_setIncrement_, increment);
+}
+
+public void setMaxValue(double maxValue) {
+	OS.objc_msgSend(this.id, OS.sel_setMaxValue_, maxValue);
+}
+
+public void setMinValue(double minValue) {
+	OS.objc_msgSend(this.id, OS.sel_setMinValue_, minValue);
+}
+
+public void setValueWraps(boolean valueWraps) {
+	OS.objc_msgSend(this.id, OS.sel_setValueWraps_, valueWraps);
+}
+
+public static int /*long*/ cellClass() {
+	return OS.objc_msgSend(OS.class_NSStepper, OS.sel_cellClass);
+}
+
+public static void setCellClass(int /*long*/ factoryId) {
+	OS.objc_msgSend(OS.class_NSStepper, OS.sel_setCellClass_, factoryId);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSString.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSString.java
new file mode 100644
index 0000000..98eca71
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSString.java
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSString extends NSObject {
+
+public NSString() {
+	super();
+}
+
+public NSString(int /*long*/ id) {
+	super(id);
+}
+
+public NSString(id id) {
+	super(id);
+}
+
+public String getString() {
+	char[] buffer = new char[(int)/*64*/length()];
+	getCharacters(buffer);
+	return new String(buffer);
+}
+
+public static NSString stringWith(String str) {
+	char[] buffer = new char[str.length()];
+	str.getChars(0, buffer.length, buffer, 0);
+	return stringWithCharacters(buffer, buffer.length);
+}
+
+public int /*long*/ UTF8String() {
+	return OS.objc_msgSend(this.id, OS.sel_UTF8String);
+}
+
+public int /*long*/ characterAtIndex(int /*long*/ index) {
+	return OS.objc_msgSend(this.id, OS.sel_characterAtIndex_, index);
+}
+
+public int /*long*/ compare(NSString string) {
+	return OS.objc_msgSend(this.id, OS.sel_compare_, string != null ? string.id : 0);
+}
+
+public int /*long*/ fileSystemRepresentation() {
+	return OS.objc_msgSend(this.id, OS.sel_fileSystemRepresentation);
+}
+
+public void getCharacters(char[] buffer) {
+	OS.objc_msgSend(this.id, OS.sel_getCharacters_, buffer);
+}
+
+public void getCharacters(char[] buffer, NSRange aRange) {
+	OS.objc_msgSend(this.id, OS.sel_getCharacters_range_, buffer, aRange);
+}
+
+public NSString initWithCharacters(char[] characters, int /*long*/ length) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithCharacters_length_, characters, length);
+	return result == this.id ? this : (result != 0 ? new NSString(result) : null);
+}
+
+public boolean isEqualToString(NSString aString) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isEqualToString_, aString != null ? aString.id : 0);
+}
+
+public NSString lastPathComponent() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_lastPathComponent);
+	return result == this.id ? this : (result != 0 ? new NSString(result) : null);
+}
+
+public int /*long*/ length() {
+	return OS.objc_msgSend(this.id, OS.sel_length);
+}
+
+public NSString lowercaseString() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_lowercaseString);
+	return result == this.id ? this : (result != 0 ? new NSString(result) : null);
+}
+
+public NSString pathExtension() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_pathExtension);
+	return result == this.id ? this : (result != 0 ? new NSString(result) : null);
+}
+
+public NSString stringByAddingPercentEscapesUsingEncoding(int /*long*/ enc) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_stringByAddingPercentEscapesUsingEncoding_, enc);
+	return result == this.id ? this : (result != 0 ? new NSString(result) : null);
+}
+
+public NSString stringByAppendingPathComponent(NSString str) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_stringByAppendingPathComponent_, str != null ? str.id : 0);
+	return result == this.id ? this : (result != 0 ? new NSString(result) : null);
+}
+
+public NSString stringByAppendingString(NSString aString) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_stringByAppendingString_, aString != null ? aString.id : 0);
+	return result == this.id ? this : (result != 0 ? new NSString(result) : null);
+}
+
+public NSString stringByDeletingLastPathComponent() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_stringByDeletingLastPathComponent);
+	return result == this.id ? this : (result != 0 ? new NSString(result) : null);
+}
+
+public NSString stringByDeletingPathExtension() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_stringByDeletingPathExtension);
+	return result == this.id ? this : (result != 0 ? new NSString(result) : null);
+}
+
+public NSString stringByReplacingOccurrencesOfString(NSString target, NSString replacement) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_stringByReplacingOccurrencesOfString_withString_, target != null ? target.id : 0, replacement != null ? replacement.id : 0);
+	return result == this.id ? this : (result != 0 ? new NSString(result) : null);
+}
+
+public static NSString stringWithCharacters(char[] characters, int /*long*/ length) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSString, OS.sel_stringWithCharacters_length_, characters, length);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public static NSString stringWithFormat(NSString stringWithFormat) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSString, OS.sel_stringWithFormat_, stringWithFormat != null ? stringWithFormat.id : 0);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public static NSString stringWithUTF8String(int /*long*/ nullTerminatedCString) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSString, OS.sel_stringWithUTF8String_, nullTerminatedCString);
+	return result != 0 ? new NSString(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTabView.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTabView.java
new file mode 100644
index 0000000..2f7a9a2
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTabView.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSTabView extends NSView {
+
+public NSTabView() {
+	super();
+}
+
+public NSTabView(int /*long*/ id) {
+	super(id);
+}
+
+public NSTabView(id id) {
+	super(id);
+}
+
+public void addTabViewItem(NSTabViewItem tabViewItem) {
+	OS.objc_msgSend(this.id, OS.sel_addTabViewItem_, tabViewItem != null ? tabViewItem.id : 0);
+}
+
+public NSRect contentRect() {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_contentRect);
+	return result;
+}
+
+public void insertTabViewItem(NSTabViewItem tabViewItem, int /*long*/ index) {
+	OS.objc_msgSend(this.id, OS.sel_insertTabViewItem_atIndex_, tabViewItem != null ? tabViewItem.id : 0, index);
+}
+
+public NSSize minimumSize() {
+	NSSize result = new NSSize();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_minimumSize);
+	return result;
+}
+
+public void removeTabViewItem(NSTabViewItem tabViewItem) {
+	OS.objc_msgSend(this.id, OS.sel_removeTabViewItem_, tabViewItem != null ? tabViewItem.id : 0);
+}
+
+public void selectTabViewItemAtIndex(int /*long*/ index) {
+	OS.objc_msgSend(this.id, OS.sel_selectTabViewItemAtIndex_, index);
+}
+
+public NSTabViewItem selectedTabViewItem() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_selectedTabViewItem);
+	return result != 0 ? new NSTabViewItem(result) : null;
+}
+
+public void setControlSize(int /*long*/ controlSize) {
+	OS.objc_msgSend(this.id, OS.sel_setControlSize_, controlSize);
+}
+
+public void setDelegate(id anObject) {
+	OS.objc_msgSend(this.id, OS.sel_setDelegate_, anObject != null ? anObject.id : 0);
+}
+
+public void setFont(NSFont font) {
+	OS.objc_msgSend(this.id, OS.sel_setFont_, font != null ? font.id : 0);
+}
+
+public void setTabViewType(int /*long*/ tabViewType) {
+	OS.objc_msgSend(this.id, OS.sel_setTabViewType_, tabViewType);
+}
+
+public NSTabViewItem tabViewItemAtPoint(NSPoint point) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_tabViewItemAtPoint_, point);
+	return result != 0 ? new NSTabViewItem(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTabViewItem.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTabViewItem.java
new file mode 100644
index 0000000..c24dede
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTabViewItem.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSTabViewItem extends NSObject {
+
+public NSTabViewItem() {
+	super();
+}
+
+public NSTabViewItem(int /*long*/ id) {
+	super(id);
+}
+
+public NSTabViewItem(id id) {
+	super(id);
+}
+
+public id initWithIdentifier(id identifier) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithIdentifier_, identifier != null ? identifier.id : 0);
+	return result != 0 ? new id(result) : null;
+}
+
+public void setLabel(NSString label) {
+	OS.objc_msgSend(this.id, OS.sel_setLabel_, label != null ? label.id : 0);
+}
+
+public void setView(NSView view) {
+	OS.objc_msgSend(this.id, OS.sel_setView_, view != null ? view.id : 0);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTableColumn.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTableColumn.java
new file mode 100644
index 0000000..ef36020
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTableColumn.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSTableColumn extends NSObject {
+
+public NSTableColumn() {
+	super();
+}
+
+public NSTableColumn(int /*long*/ id) {
+	super(id);
+}
+
+public NSTableColumn(id id) {
+	super(id);
+}
+
+public NSCell dataCell() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_dataCell);
+	return result != 0 ? new NSCell(result) : null;
+}
+
+public NSTableHeaderCell headerCell() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_headerCell);
+	return result != 0 ? new NSTableHeaderCell(result) : null;
+}
+
+public NSTableColumn initWithIdentifier(id identifier) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithIdentifier_, identifier != null ? identifier.id : 0);
+	return result == this.id ? this : (result != 0 ? new NSTableColumn(result) : null);
+}
+
+public int /*long*/ resizingMask() {
+	return OS.objc_msgSend(this.id, OS.sel_resizingMask);
+}
+
+public void setDataCell(NSCell cell) {
+	OS.objc_msgSend(this.id, OS.sel_setDataCell_, cell != null ? cell.id : 0);
+}
+
+public void setEditable(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setEditable_, flag);
+}
+
+public void setHeaderCell(NSCell cell) {
+	OS.objc_msgSend(this.id, OS.sel_setHeaderCell_, cell != null ? cell.id : 0);
+}
+
+public void setIdentifier(id identifier) {
+	OS.objc_msgSend(this.id, OS.sel_setIdentifier_, identifier != null ? identifier.id : 0);
+}
+
+public void setMinWidth(float /*double*/ minWidth) {
+	OS.objc_msgSend(this.id, OS.sel_setMinWidth_, minWidth);
+}
+
+public void setResizingMask(int /*long*/ resizingMask) {
+	OS.objc_msgSend(this.id, OS.sel_setResizingMask_, resizingMask);
+}
+
+public void setWidth(float /*double*/ width) {
+	OS.objc_msgSend(this.id, OS.sel_setWidth_, width);
+}
+
+public float /*double*/ width() {
+	return (float)OS.objc_msgSend_fpret(this.id, OS.sel_width);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTableHeaderCell.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTableHeaderCell.java
new file mode 100644
index 0000000..1b6b109
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTableHeaderCell.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSTableHeaderCell extends NSTextFieldCell {
+
+public NSTableHeaderCell() {
+	super();
+}
+
+public NSTableHeaderCell(int /*long*/ id) {
+	super(id);
+}
+
+public NSTableHeaderCell(id id) {
+	super(id);
+}
+
+public void drawSortIndicatorWithFrame(NSRect cellFrame, NSView controlView, boolean ascending, int /*long*/ priority) {
+	OS.objc_msgSend(this.id, OS.sel_drawSortIndicatorWithFrame_inView_ascending_priority_, cellFrame, controlView != null ? controlView.id : 0, ascending, priority);
+}
+
+public NSRect sortIndicatorRectForBounds(NSRect theRect) {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_sortIndicatorRectForBounds_, theRect);
+	return result;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTableHeaderView.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTableHeaderView.java
new file mode 100644
index 0000000..b3b5d16
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTableHeaderView.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSTableHeaderView extends NSView {
+
+public NSTableHeaderView() {
+	super();
+}
+
+public NSTableHeaderView(int /*long*/ id) {
+	super(id);
+}
+
+public NSTableHeaderView(id id) {
+	super(id);
+}
+
+public int /*long*/ columnAtPoint(NSPoint point) {
+	return OS.objc_msgSend(this.id, OS.sel_columnAtPoint_, point);
+}
+
+public NSRect headerRectOfColumn(int /*long*/ column) {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_headerRectOfColumn_, column);
+	return result;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTableView.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTableView.java
new file mode 100644
index 0000000..9a97576
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTableView.java
@@ -0,0 +1,254 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSTableView extends NSControl {
+
+public NSTableView() {
+	super();
+}
+
+public NSTableView(int /*long*/ id) {
+	super(id);
+}
+
+public NSTableView(id id) {
+	super(id);
+}
+
+public void addTableColumn(NSTableColumn column) {
+	OS.objc_msgSend(this.id, OS.sel_addTableColumn_, column != null ? column.id : 0);
+}
+
+public boolean allowsColumnReordering() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_allowsColumnReordering);
+}
+
+public boolean canDragRowsWithIndexes(NSIndexSet rowIndexes, NSPoint mouseDownPoint) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_canDragRowsWithIndexes_atPoint_, rowIndexes != null ? rowIndexes.id : 0, mouseDownPoint);
+}
+
+public int /*long*/ clickedColumn() {
+	return OS.objc_msgSend(this.id, OS.sel_clickedColumn);
+}
+
+public int /*long*/ clickedRow() {
+	return OS.objc_msgSend(this.id, OS.sel_clickedRow);
+}
+
+public int /*long*/ columnAtPoint(NSPoint point) {
+	return OS.objc_msgSend(this.id, OS.sel_columnAtPoint_, point);
+}
+
+public NSIndexSet columnIndexesInRect(NSRect rect) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_columnIndexesInRect_, rect);
+	return result != 0 ? new NSIndexSet(result) : null;
+}
+
+public int /*long*/ columnWithIdentifier(id identifier) {
+	return OS.objc_msgSend(this.id, OS.sel_columnWithIdentifier_, identifier != null ? identifier.id : 0);
+}
+
+public void deselectAll(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_deselectAll_, sender != null ? sender.id : 0);
+}
+
+public void deselectRow(int /*long*/ row) {
+	OS.objc_msgSend(this.id, OS.sel_deselectRow_, row);
+}
+
+public NSImage dragImageForRowsWithIndexes(NSIndexSet dragRows, NSArray tableColumns, NSEvent dragEvent, int /*long*/ dragImageOffset) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_dragImageForRowsWithIndexes_tableColumns_event_offset_, dragRows != null ? dragRows.id : 0, tableColumns != null ? tableColumns.id : 0, dragEvent != null ? dragEvent.id : 0, dragImageOffset);
+	return result != 0 ? new NSImage(result) : null;
+}
+
+public NSRect frameOfCellAtColumn(int /*long*/ column, int /*long*/ row) {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_frameOfCellAtColumn_row_, column, row);
+	return result;
+}
+
+public NSTableHeaderView headerView() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_headerView);
+	return result != 0 ? new NSTableHeaderView(result) : null;
+}
+
+public void highlightSelectionInClipRect(NSRect clipRect) {
+	OS.objc_msgSend(this.id, OS.sel_highlightSelectionInClipRect_, clipRect);
+}
+
+public NSSize intercellSpacing() {
+	NSSize result = new NSSize();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_intercellSpacing);
+	return result;
+}
+
+public boolean isRowSelected(int /*long*/ row) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isRowSelected_, row);
+}
+
+public void moveColumn(int /*long*/ column, int /*long*/ newIndex) {
+	OS.objc_msgSend(this.id, OS.sel_moveColumn_toColumn_, column, newIndex);
+}
+
+public void noteNumberOfRowsChanged() {
+	OS.objc_msgSend(this.id, OS.sel_noteNumberOfRowsChanged);
+}
+
+public int /*long*/ numberOfColumns() {
+	return OS.objc_msgSend(this.id, OS.sel_numberOfColumns);
+}
+
+public int /*long*/ numberOfRows() {
+	return OS.objc_msgSend(this.id, OS.sel_numberOfRows);
+}
+
+public int /*long*/ numberOfSelectedRows() {
+	return OS.objc_msgSend(this.id, OS.sel_numberOfSelectedRows);
+}
+
+public NSRect rectOfColumn(int /*long*/ column) {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_rectOfColumn_, column);
+	return result;
+}
+
+public NSRect rectOfRow(int /*long*/ row) {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_rectOfRow_, row);
+	return result;
+}
+
+public void reloadData() {
+	OS.objc_msgSend(this.id, OS.sel_reloadData);
+}
+
+public void removeTableColumn(NSTableColumn column) {
+	OS.objc_msgSend(this.id, OS.sel_removeTableColumn_, column != null ? column.id : 0);
+}
+
+public int /*long*/ rowAtPoint(NSPoint point) {
+	return OS.objc_msgSend(this.id, OS.sel_rowAtPoint_, point);
+}
+
+public float /*double*/ rowHeight() {
+	return (float)OS.objc_msgSend_fpret(this.id, OS.sel_rowHeight);
+}
+
+public NSRange rowsInRect(NSRect rect) {
+	NSRange result = new NSRange();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_rowsInRect_, rect);
+	return result;
+}
+
+public void scrollColumnToVisible(int /*long*/ column) {
+	OS.objc_msgSend(this.id, OS.sel_scrollColumnToVisible_, column);
+}
+
+public void scrollRowToVisible(int /*long*/ row) {
+	OS.objc_msgSend(this.id, OS.sel_scrollRowToVisible_, row);
+}
+
+public void selectAll(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_selectAll_, sender != null ? sender.id : 0);
+}
+
+public void selectRowIndexes(NSIndexSet indexes, boolean extend) {
+	OS.objc_msgSend(this.id, OS.sel_selectRowIndexes_byExtendingSelection_, indexes != null ? indexes.id : 0, extend);
+}
+
+public int /*long*/ selectedRow() {
+	return OS.objc_msgSend(this.id, OS.sel_selectedRow);
+}
+
+public NSIndexSet selectedRowIndexes() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_selectedRowIndexes);
+	return result != 0 ? new NSIndexSet(result) : null;
+}
+
+public void setAllowsColumnReordering(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setAllowsColumnReordering_, flag);
+}
+
+public void setAllowsMultipleSelection(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setAllowsMultipleSelection_, flag);
+}
+
+public void setBackgroundColor(NSColor color) {
+	OS.objc_msgSend(this.id, OS.sel_setBackgroundColor_, color != null ? color.id : 0);
+}
+
+public void setColumnAutoresizingStyle(int /*long*/ style) {
+	OS.objc_msgSend(this.id, OS.sel_setColumnAutoresizingStyle_, style);
+}
+
+public void setDataSource(id aSource) {
+	OS.objc_msgSend(this.id, OS.sel_setDataSource_, aSource != null ? aSource.id : 0);
+}
+
+public void setDelegate(id delegate) {
+	OS.objc_msgSend(this.id, OS.sel_setDelegate_, delegate != null ? delegate.id : 0);
+}
+
+public void setDoubleAction(int /*long*/ aSelector) {
+	OS.objc_msgSend(this.id, OS.sel_setDoubleAction_, aSelector);
+}
+
+public void setDropRow(int /*long*/ row, int /*long*/ op) {
+	OS.objc_msgSend(this.id, OS.sel_setDropRow_dropOperation_, row, op);
+}
+
+public void setHeaderView(NSTableHeaderView headerView) {
+	OS.objc_msgSend(this.id, OS.sel_setHeaderView_, headerView != null ? headerView.id : 0);
+}
+
+public void setHighlightedTableColumn(NSTableColumn tc) {
+	OS.objc_msgSend(this.id, OS.sel_setHighlightedTableColumn_, tc != null ? tc.id : 0);
+}
+
+public void setIndicatorImage(NSImage anImage, NSTableColumn tc) {
+	OS.objc_msgSend(this.id, OS.sel_setIndicatorImage_inTableColumn_, anImage != null ? anImage.id : 0, tc != null ? tc.id : 0);
+}
+
+public void setIntercellSpacing(NSSize aSize) {
+	OS.objc_msgSend(this.id, OS.sel_setIntercellSpacing_, aSize);
+}
+
+public void setRowHeight(float /*double*/ rowHeight) {
+	OS.objc_msgSend(this.id, OS.sel_setRowHeight_, rowHeight);
+}
+
+public void setUsesAlternatingRowBackgroundColors(boolean useAlternatingRowColors) {
+	OS.objc_msgSend(this.id, OS.sel_setUsesAlternatingRowBackgroundColors_, useAlternatingRowColors);
+}
+
+public NSArray tableColumns() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_tableColumns);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+public void tile() {
+	OS.objc_msgSend(this.id, OS.sel_tile);
+}
+
+public boolean usesAlternatingRowBackgroundColors() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_usesAlternatingRowBackgroundColors);
+}
+
+public static int /*long*/ cellClass() {
+	return OS.objc_msgSend(OS.class_NSTableView, OS.sel_cellClass);
+}
+
+public static void setCellClass(int /*long*/ factoryId) {
+	OS.objc_msgSend(OS.class_NSTableView, OS.sel_setCellClass_, factoryId);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSText.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSText.java
new file mode 100644
index 0000000..d995f8f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSText.java
@@ -0,0 +1,128 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSText extends NSView {
+
+public NSText() {
+	super();
+}
+
+public NSText(int /*long*/ id) {
+	super(id);
+}
+
+public NSText(id id) {
+	super(id);
+}
+
+public void copy(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_copy_, sender != null ? sender.id : 0);
+}
+
+public void cut(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_cut_, sender != null ? sender.id : 0);
+}
+
+public id delegate() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_delegate);
+	return result != 0 ? new id(result) : null;
+}
+
+public NSFont font() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_font);
+	return result != 0 ? new NSFont(result) : null;
+}
+
+public void paste(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_paste_, sender != null ? sender.id : 0);
+}
+
+public void replaceCharactersInRange(NSRange range, NSString aString) {
+	OS.objc_msgSend(this.id, OS.sel_replaceCharactersInRange_withString_, range, aString != null ? aString.id : 0);
+}
+
+public void scrollRangeToVisible(NSRange range) {
+	OS.objc_msgSend(this.id, OS.sel_scrollRangeToVisible_, range);
+}
+
+public void selectAll(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_selectAll_, sender != null ? sender.id : 0);
+}
+
+public NSRange selectedRange() {
+	NSRange result = new NSRange();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_selectedRange);
+	return result;
+}
+
+public void setAlignment(int /*long*/ mode) {
+	OS.objc_msgSend(this.id, OS.sel_setAlignment_, mode);
+}
+
+public void setBackgroundColor(NSColor color) {
+	OS.objc_msgSend(this.id, OS.sel_setBackgroundColor_, color != null ? color.id : 0);
+}
+
+public void setDelegate(id anObject) {
+	OS.objc_msgSend(this.id, OS.sel_setDelegate_, anObject != null ? anObject.id : 0);
+}
+
+public void setDrawsBackground(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setDrawsBackground_, flag);
+}
+
+public void setEditable(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setEditable_, flag);
+}
+
+public void setFont(NSFont obj) {
+	OS.objc_msgSend(this.id, OS.sel_setFont_, obj != null ? obj.id : 0);
+}
+
+public void setHorizontallyResizable(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setHorizontallyResizable_, flag);
+}
+
+public void setMaxSize(NSSize newMaxSize) {
+	OS.objc_msgSend(this.id, OS.sel_setMaxSize_, newMaxSize);
+}
+
+public void setMinSize(NSSize newMinSize) {
+	OS.objc_msgSend(this.id, OS.sel_setMinSize_, newMinSize);
+}
+
+public void setSelectable(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setSelectable_, flag);
+}
+
+public void setSelectedRange(NSRange range) {
+	OS.objc_msgSend(this.id, OS.sel_setSelectedRange_, range);
+}
+
+public void setString(NSString string) {
+	OS.objc_msgSend(this.id, OS.sel_setString_, string != null ? string.id : 0);
+}
+
+public void setTextColor(NSColor color) {
+	OS.objc_msgSend(this.id, OS.sel_setTextColor_, color != null ? color.id : 0);
+}
+
+public void sizeToFit() {
+	OS.objc_msgSend(this.id, OS.sel_sizeToFit);
+}
+
+public NSString string() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_string);
+	return result != 0 ? new NSString(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextAttachment.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextAttachment.java
new file mode 100644
index 0000000..5f06a09
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextAttachment.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSTextAttachment extends NSObject {
+
+public NSTextAttachment() {
+	super();
+}
+
+public NSTextAttachment(int /*long*/ id) {
+	super(id);
+}
+
+public NSTextAttachment(id id) {
+	super(id);
+}
+
+public id initWithFileWrapper(NSFileWrapper fileWrapper) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithFileWrapper_, fileWrapper != null ? fileWrapper.id : 0);
+	return result != 0 ? new id(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextContainer.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextContainer.java
new file mode 100644
index 0000000..eefef39
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextContainer.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSTextContainer extends NSObject {
+
+public NSTextContainer() {
+	super();
+}
+
+public NSTextContainer(int /*long*/ id) {
+	super(id);
+}
+
+public NSTextContainer(id id) {
+	super(id);
+}
+
+public NSSize containerSize() {
+	NSSize result = new NSSize();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_containerSize);
+	return result;
+}
+
+public NSTextContainer initWithContainerSize(NSSize size) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithContainerSize_, size);
+	return result == this.id ? this : (result != 0 ? new NSTextContainer(result) : null);
+}
+
+public void setContainerSize(NSSize size) {
+	OS.objc_msgSend(this.id, OS.sel_setContainerSize_, size);
+}
+
+public void setLineFragmentPadding(float /*double*/ pad) {
+	OS.objc_msgSend(this.id, OS.sel_setLineFragmentPadding_, pad);
+}
+
+public void setWidthTracksTextView(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setWidthTracksTextView_, flag);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextField.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextField.java
new file mode 100644
index 0000000..e2507f4
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextField.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSTextField extends NSControl {
+
+public NSTextField() {
+	super();
+}
+
+public NSTextField(int /*long*/ id) {
+	super(id);
+}
+
+public NSTextField(id id) {
+	super(id);
+}
+
+public void selectText(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_selectText_, sender != null ? sender.id : 0);
+}
+
+public void setBackgroundColor(NSColor color) {
+	OS.objc_msgSend(this.id, OS.sel_setBackgroundColor_, color != null ? color.id : 0);
+}
+
+public void setBordered(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setBordered_, flag);
+}
+
+public void setDelegate(id anObject) {
+	OS.objc_msgSend(this.id, OS.sel_setDelegate_, anObject != null ? anObject.id : 0);
+}
+
+public void setDrawsBackground(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setDrawsBackground_, flag);
+}
+
+public void setEditable(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setEditable_, flag);
+}
+
+public void setSelectable(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setSelectable_, flag);
+}
+
+public void setTextColor(NSColor color) {
+	OS.objc_msgSend(this.id, OS.sel_setTextColor_, color != null ? color.id : 0);
+}
+
+public static int /*long*/ cellClass() {
+	return OS.objc_msgSend(OS.class_NSTextField, OS.sel_cellClass);
+}
+
+public static void setCellClass(int /*long*/ factoryId) {
+	OS.objc_msgSend(OS.class_NSTextField, OS.sel_setCellClass_, factoryId);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextFieldCell.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextFieldCell.java
new file mode 100644
index 0000000..98e6bef
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextFieldCell.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSTextFieldCell extends NSActionCell {
+
+public NSTextFieldCell() {
+	super();
+}
+
+public NSTextFieldCell(int /*long*/ id) {
+	super(id);
+}
+
+public NSTextFieldCell(id id) {
+	super(id);
+}
+
+public void setPlaceholderString(NSString string) {
+	OS.objc_msgSend(this.id, OS.sel_setPlaceholderString_, string != null ? string.id : 0);
+}
+
+public void setTextColor(NSColor color) {
+	OS.objc_msgSend(this.id, OS.sel_setTextColor_, color != null ? color.id : 0);
+}
+
+public NSColor textColor() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_textColor);
+	return result != 0 ? new NSColor(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextStorage.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextStorage.java
new file mode 100644
index 0000000..22a0c54
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextStorage.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSTextStorage extends NSMutableAttributedString {
+
+public NSTextStorage() {
+	super();
+}
+
+public NSTextStorage(int /*long*/ id) {
+	super(id);
+}
+
+public NSTextStorage(id id) {
+	super(id);
+}
+
+public void addLayoutManager(NSLayoutManager obj) {
+	OS.objc_msgSend(this.id, OS.sel_addLayoutManager_, obj != null ? obj.id : 0);
+}
+
+public NSArray paragraphs() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_paragraphs);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+public static NSAttributedString attributedStringWithAttachment(NSTextAttachment attachment) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSTextStorage, OS.sel_attributedStringWithAttachment_, attachment != null ? attachment.id : 0);
+	return result != 0 ? new NSAttributedString(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextTab.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextTab.java
new file mode 100644
index 0000000..5e95216
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextTab.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSTextTab extends NSObject {
+
+public NSTextTab() {
+	super();
+}
+
+public NSTextTab(int /*long*/ id) {
+	super(id);
+}
+
+public NSTextTab(id id) {
+	super(id);
+}
+
+public NSTextTab initWithType(int /*long*/ type, float /*double*/ loc) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithType_location_, type, loc);
+	return result == this.id ? this : (result != 0 ? new NSTextTab(result) : null);
+}
+
+public float /*double*/ location() {
+	return (float)OS.objc_msgSend_fpret(this.id, OS.sel_location);
+}
+
+public int /*long*/ tabStopType() {
+	return OS.objc_msgSend(this.id, OS.sel_tabStopType);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextView.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextView.java
new file mode 100644
index 0000000..01a8a94
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTextView.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSTextView extends NSText {
+
+public NSTextView() {
+	super();
+}
+
+public NSTextView(int /*long*/ id) {
+	super(id);
+}
+
+public NSTextView(id id) {
+	super(id);
+}
+
+public int /*long*/ characterIndexForInsertionAtPoint(NSPoint point) {
+	return OS.objc_msgSend(this.id, OS.sel_characterIndexForInsertionAtPoint_, point);
+}
+
+public NSParagraphStyle defaultParagraphStyle() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_defaultParagraphStyle);
+	return result != 0 ? new NSParagraphStyle(result) : null;
+}
+
+public boolean dragSelectionWithEvent(NSEvent event, NSSize mouseOffset, boolean slideBack) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_dragSelectionWithEvent_offset_slideBack_, event != null ? event.id : 0, mouseOffset, slideBack);
+}
+
+public NSLayoutManager layoutManager() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_layoutManager);
+	return result != 0 ? new NSLayoutManager(result) : null;
+}
+
+public NSDictionary linkTextAttributes() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_linkTextAttributes);
+	return result != 0 ? new NSDictionary(result) : null;
+}
+
+public NSDictionary markedTextAttributes() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_markedTextAttributes);
+	return result != 0 ? new NSDictionary(result) : null;
+}
+
+public void setDefaultParagraphStyle(NSParagraphStyle paragraphStyle) {
+	OS.objc_msgSend(this.id, OS.sel_setDefaultParagraphStyle_, paragraphStyle != null ? paragraphStyle.id : 0);
+}
+
+public void setLinkTextAttributes(NSDictionary attributeDictionary) {
+	OS.objc_msgSend(this.id, OS.sel_setLinkTextAttributes_, attributeDictionary != null ? attributeDictionary.id : 0);
+}
+
+public void setRichText(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setRichText_, flag);
+}
+
+public boolean shouldChangeTextInRange(NSRange affectedCharRange, NSString replacementString) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_shouldChangeTextInRange_replacementString_, affectedCharRange, replacementString != null ? replacementString.id : 0);
+}
+
+public NSTextContainer textContainer() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_textContainer);
+	return result != 0 ? new NSTextContainer(result) : null;
+}
+
+public NSTextStorage textStorage() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_textStorage);
+	return result != 0 ? new NSTextStorage(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSThread.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSThread.java
new file mode 100644
index 0000000..6947c2b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSThread.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSThread extends NSObject {
+
+public NSThread() {
+	super();
+}
+
+public NSThread(int /*long*/ id) {
+	super(id);
+}
+
+public NSThread(id id) {
+	super(id);
+}
+
+public static NSThread currentThread() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSThread, OS.sel_currentThread);
+	return result != 0 ? new NSThread(result) : null;
+}
+
+public static boolean isMainThread() {
+	return OS.objc_msgSend_bool(OS.class_NSThread, OS.sel_isMainThread);
+}
+
+public NSMutableDictionary threadDictionary() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_threadDictionary);
+	return result != 0 ? new NSMutableDictionary(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTimeZone.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTimeZone.java
new file mode 100644
index 0000000..8464383
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTimeZone.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSTimeZone extends NSObject {
+
+public NSTimeZone() {
+	super();
+}
+
+public NSTimeZone(int /*long*/ id) {
+	super(id);
+}
+
+public NSTimeZone(id id) {
+	super(id);
+}
+
+public static NSTimeZone defaultTimeZone() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSTimeZone, OS.sel_defaultTimeZone);
+	return result != 0 ? new NSTimeZone(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTimer.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTimer.java
new file mode 100644
index 0000000..09f032e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTimer.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSTimer extends NSObject {
+
+public NSTimer() {
+	super();
+}
+
+public NSTimer(int /*long*/ id) {
+	super(id);
+}
+
+public NSTimer(id id) {
+	super(id);
+}
+
+public void invalidate() {
+	OS.objc_msgSend(this.id, OS.sel_invalidate);
+}
+
+public static NSTimer scheduledTimerWithTimeInterval(double ti, id aTarget, int /*long*/ aSelector, id userInfo, boolean yesOrNo) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSTimer, OS.sel_scheduledTimerWithTimeInterval_target_selector_userInfo_repeats_, ti, aTarget != null ? aTarget.id : 0, aSelector, userInfo != null ? userInfo.id : 0, yesOrNo);
+	return result != 0 ? new NSTimer(result) : null;
+}
+
+public void setFireDate(NSDate date) {
+	OS.objc_msgSend(this.id, OS.sel_setFireDate_, date != null ? date.id : 0);
+}
+
+public id userInfo() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_userInfo);
+	return result != 0 ? new id(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSToolbar.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSToolbar.java
new file mode 100644
index 0000000..82c8786
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSToolbar.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSToolbar extends NSObject {
+
+public NSToolbar() {
+	super();
+}
+
+public NSToolbar(int /*long*/ id) {
+	super(id);
+}
+
+public NSToolbar(id id) {
+	super(id);
+}
+
+public NSToolbar initWithIdentifier(NSString identifier) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithIdentifier_, identifier != null ? identifier.id : 0);
+	return result == this.id ? this : (result != 0 ? new NSToolbar(result) : null);
+}
+
+public void insertItemWithItemIdentifier(NSString itemIdentifier, int /*long*/ index) {
+	OS.objc_msgSend(this.id, OS.sel_insertItemWithItemIdentifier_atIndex_, itemIdentifier != null ? itemIdentifier.id : 0, index);
+}
+
+public void removeItemAtIndex(int /*long*/ index) {
+	OS.objc_msgSend(this.id, OS.sel_removeItemAtIndex_, index);
+}
+
+public void setAllowsUserCustomization(boolean allowCustomization) {
+	OS.objc_msgSend(this.id, OS.sel_setAllowsUserCustomization_, allowCustomization);
+}
+
+public void setDelegate(id delegate) {
+	OS.objc_msgSend(this.id, OS.sel_setDelegate_, delegate != null ? delegate.id : 0);
+}
+
+public void setDisplayMode(int /*long*/ displayMode) {
+	OS.objc_msgSend(this.id, OS.sel_setDisplayMode_, displayMode);
+}
+
+public void setVisible(boolean shown) {
+	OS.objc_msgSend(this.id, OS.sel_setVisible_, shown);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSToolbarItem.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSToolbarItem.java
new file mode 100644
index 0000000..ea08b1a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSToolbarItem.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSToolbarItem extends NSObject {
+
+public NSToolbarItem() {
+	super();
+}
+
+public NSToolbarItem(int /*long*/ id) {
+	super(id);
+}
+
+public NSToolbarItem(id id) {
+	super(id);
+}
+
+public NSToolbarItem initWithItemIdentifier(NSString itemIdentifier) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithItemIdentifier_, itemIdentifier != null ? itemIdentifier.id : 0);
+	return result == this.id ? this : (result != 0 ? new NSToolbarItem(result) : null);
+}
+
+public NSString itemIdentifier() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_itemIdentifier);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public void setAction(int /*long*/ action) {
+	OS.objc_msgSend(this.id, OS.sel_setAction_, action);
+}
+
+public void setEnabled(boolean enabled) {
+	OS.objc_msgSend(this.id, OS.sel_setEnabled_, enabled);
+}
+
+public void setImage(NSImage image) {
+	OS.objc_msgSend(this.id, OS.sel_setImage_, image != null ? image.id : 0);
+}
+
+public void setLabel(NSString label) {
+	OS.objc_msgSend(this.id, OS.sel_setLabel_, label != null ? label.id : 0);
+}
+
+public void setMaxSize(NSSize size) {
+	OS.objc_msgSend(this.id, OS.sel_setMaxSize_, size);
+}
+
+public void setMinSize(NSSize size) {
+	OS.objc_msgSend(this.id, OS.sel_setMinSize_, size);
+}
+
+public void setPaletteLabel(NSString paletteLabel) {
+	OS.objc_msgSend(this.id, OS.sel_setPaletteLabel_, paletteLabel != null ? paletteLabel.id : 0);
+}
+
+public void setTarget(id target) {
+	OS.objc_msgSend(this.id, OS.sel_setTarget_, target != null ? target.id : 0);
+}
+
+public void setToolTip(NSString toolTip) {
+	OS.objc_msgSend(this.id, OS.sel_setToolTip_, toolTip != null ? toolTip.id : 0);
+}
+
+public void setView(NSView view) {
+	OS.objc_msgSend(this.id, OS.sel_setView_, view != null ? view.id : 0);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTrackingArea.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTrackingArea.java
new file mode 100644
index 0000000..648cd5a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTrackingArea.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSTrackingArea extends NSObject {
+
+public NSTrackingArea() {
+	super();
+}
+
+public NSTrackingArea(int /*long*/ id) {
+	super(id);
+}
+
+public NSTrackingArea(id id) {
+	super(id);
+}
+
+public NSTrackingArea initWithRect(NSRect rect, int /*long*/ options, id owner, NSDictionary userInfo) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithRect_options_owner_userInfo_, rect, options, owner != null ? owner.id : 0, userInfo != null ? userInfo.id : 0);
+	return result == this.id ? this : (result != 0 ? new NSTrackingArea(result) : null);
+}
+
+public id owner() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_owner);
+	return result != 0 ? new id(result) : null;
+}
+
+public NSDictionary userInfo() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_userInfo);
+	return result != 0 ? new NSDictionary(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTypesetter.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTypesetter.java
new file mode 100644
index 0000000..082e487
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSTypesetter.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSTypesetter extends NSObject {
+
+public NSTypesetter() {
+	super();
+}
+
+public NSTypesetter(int /*long*/ id) {
+	super(id);
+}
+
+public NSTypesetter(id id) {
+	super(id);
+}
+
+public float /*double*/ baselineOffsetInLayoutManager(NSLayoutManager layoutMgr, int /*long*/ glyphIndex) {
+	return (float)OS.objc_msgSend_fpret(this.id, OS.sel_baselineOffsetInLayoutManager_glyphIndex_, layoutMgr != null ? layoutMgr.id : 0, glyphIndex);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURL.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURL.java
new file mode 100644
index 0000000..1345b4b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURL.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSURL extends NSObject {
+
+public NSURL() {
+	super();
+}
+
+public NSURL(int /*long*/ id) {
+	super(id);
+}
+
+public NSURL(id id) {
+	super(id);
+}
+
+public static NSURL URLFromPasteboard(NSPasteboard pasteBoard) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSURL, OS.sel_URLFromPasteboard_, pasteBoard != null ? pasteBoard.id : 0);
+	return result != 0 ? new NSURL(result) : null;
+}
+
+public void writeToPasteboard(NSPasteboard pasteBoard) {
+	OS.objc_msgSend(this.id, OS.sel_writeToPasteboard_, pasteBoard != null ? pasteBoard.id : 0);
+}
+
+public static NSURL URLWithString(NSString URLString) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSURL, OS.sel_URLWithString_, URLString != null ? URLString.id : 0);
+	return result != 0 ? new NSURL(result) : null;
+}
+
+public NSString absoluteString() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_absoluteString);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public static NSURL fileURLWithPath(NSString path) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSURL, OS.sel_fileURLWithPath_, path != null ? path.id : 0);
+	return result != 0 ? new NSURL(result) : null;
+}
+
+public boolean isFileURL() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isFileURL);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURLAuthenticationChallenge.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURLAuthenticationChallenge.java
new file mode 100644
index 0000000..319225e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURLAuthenticationChallenge.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSURLAuthenticationChallenge extends NSObject {
+
+public NSURLAuthenticationChallenge() {
+	super();
+}
+
+public NSURLAuthenticationChallenge(int /*long*/ id) {
+	super(id);
+}
+
+public NSURLAuthenticationChallenge(id id) {
+	super(id);
+}
+
+public int /*long*/ previousFailureCount() {
+	return OS.objc_msgSend(this.id, OS.sel_previousFailureCount);
+}
+
+public NSURLCredential proposedCredential() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_proposedCredential);
+	return result != 0 ? new NSURLCredential(result) : null;
+}
+
+public NSURLProtectionSpace protectionSpace() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_protectionSpace);
+	return result != 0 ? new NSURLProtectionSpace(result) : null;
+}
+
+public id sender() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_sender);
+	return result != 0 ? new id(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURLCredential.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURLCredential.java
new file mode 100644
index 0000000..b6413be
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURLCredential.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSURLCredential extends NSObject {
+
+public NSURLCredential() {
+	super();
+}
+
+public NSURLCredential(int /*long*/ id) {
+	super(id);
+}
+
+public NSURLCredential(id id) {
+	super(id);
+}
+
+public static NSURLCredential credentialWithUser(NSString user, NSString password, int /*long*/ persistence) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSURLCredential, OS.sel_credentialWithUser_password_persistence_, user != null ? user.id : 0, password != null ? password.id : 0, persistence);
+	return result != 0 ? new NSURLCredential(result) : null;
+}
+
+public boolean hasPassword() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_hasPassword);
+}
+
+public NSString password() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_password);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public NSString user() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_user);
+	return result != 0 ? new NSString(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURLDownload.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURLDownload.java
new file mode 100644
index 0000000..1ac5514
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURLDownload.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSURLDownload extends NSObject {
+
+public NSURLDownload() {
+	super();
+}
+
+public NSURLDownload(int /*long*/ id) {
+	super(id);
+}
+
+public NSURLDownload(id id) {
+	super(id);
+}
+
+public void cancel() {
+	OS.objc_msgSend(this.id, OS.sel_cancel);
+}
+
+public void setDestination(NSString path, boolean allowOverwrite) {
+	OS.objc_msgSend(this.id, OS.sel_setDestination_allowOverwrite_, path != null ? path.id : 0, allowOverwrite);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURLProtectionSpace.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURLProtectionSpace.java
new file mode 100644
index 0000000..548a709
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURLProtectionSpace.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSURLProtectionSpace extends NSObject {
+
+public NSURLProtectionSpace() {
+	super();
+}
+
+public NSURLProtectionSpace(int /*long*/ id) {
+	super(id);
+}
+
+public NSURLProtectionSpace(id id) {
+	super(id);
+}
+
+public NSString host() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_host);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public int /*long*/ port() {
+	return OS.objc_msgSend(this.id, OS.sel_port);
+}
+
+public NSString realm() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_realm);
+	return result != 0 ? new NSString(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURLRequest.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURLRequest.java
new file mode 100644
index 0000000..b0d1e99
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSURLRequest.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSURLRequest extends NSObject {
+
+public NSURLRequest() {
+	super();
+}
+
+public NSURLRequest(int /*long*/ id) {
+	super(id);
+}
+
+public NSURLRequest(id id) {
+	super(id);
+}
+
+public NSURL URL() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_URL);
+	return result != 0 ? new NSURL(result) : null;
+}
+
+public NSURLRequest initWithURL(NSURL URL) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithURL_, URL != null ? URL.id : 0);
+	return result == this.id ? this : (result != 0 ? new NSURLRequest(result) : null);
+}
+
+public static NSURLRequest requestWithURL(NSURL URL) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSURLRequest, OS.sel_requestWithURL_, URL != null ? URL.id : 0);
+	return result != 0 ? new NSURLRequest(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSValue.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSValue.java
new file mode 100644
index 0000000..9e11593
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSValue.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSValue extends NSObject {
+
+public NSValue() {
+	super();
+}
+
+public NSValue(int /*long*/ id) {
+	super(id);
+}
+
+public NSValue(id id) {
+	super(id);
+}
+
+public int /*long*/ objCType() {
+	return OS.objc_msgSend(this.id, OS.sel_objCType);
+}
+
+public NSPoint pointValue() {
+	NSPoint result = new NSPoint();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_pointValue);
+	return result;
+}
+
+public NSRange rangeValue() {
+	NSRange result = new NSRange();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_rangeValue);
+	return result;
+}
+
+public NSRect rectValue() {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_rectValue);
+	return result;
+}
+
+public NSSize sizeValue() {
+	NSSize result = new NSSize();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_sizeValue);
+	return result;
+}
+
+public static NSValue valueWithPoint(NSPoint point) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSValue, OS.sel_valueWithPoint_, point);
+	return result != 0 ? new NSValue(result) : null;
+}
+
+public static NSValue valueWithRange(NSRange range) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSValue, OS.sel_valueWithRange_, range);
+	return result != 0 ? new NSValue(result) : null;
+}
+
+public static NSValue valueWithRect(NSRect rect) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSValue, OS.sel_valueWithRect_, rect);
+	return result != 0 ? new NSValue(result) : null;
+}
+
+public static NSValue valueWithSize(NSSize size) {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSValue, OS.sel_valueWithSize_, size);
+	return result != 0 ? new NSValue(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSView.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSView.java
new file mode 100644
index 0000000..cdc963a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSView.java
@@ -0,0 +1,316 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSView extends NSResponder {
+
+public NSView() {
+	super();
+}
+
+public NSView(int /*long*/ id) {
+	super(id);
+}
+
+public NSView(id id) {
+	super(id);
+}
+
+public boolean acceptsFirstMouse(NSEvent theEvent) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_acceptsFirstMouse_, theEvent != null ? theEvent.id : 0);
+}
+
+public void addSubview(NSView aView) {
+	OS.objc_msgSend(this.id, OS.sel_addSubview_, aView != null ? aView.id : 0);
+}
+
+public void addSubview(NSView aView, int /*long*/ place, NSView otherView) {
+	OS.objc_msgSend(this.id, OS.sel_addSubview_positioned_relativeTo_, aView != null ? aView.id : 0, place, otherView != null ? otherView.id : 0);
+}
+
+public int /*long*/ addToolTipRect(NSRect aRect, id anObject, int /*long*/ data) {
+	return OS.objc_msgSend(this.id, OS.sel_addToolTipRect_owner_userData_, aRect, anObject != null ? anObject.id : 0, data);
+}
+
+public void beginDocument() {
+	OS.objc_msgSend(this.id, OS.sel_beginDocument);
+}
+
+public void beginPageInRect(NSRect aRect, NSPoint location) {
+	OS.objc_msgSend(this.id, OS.sel_beginPageInRect_atPlacement_, aRect, location);
+}
+
+public NSRect bounds() {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_bounds);
+	return result;
+}
+
+public boolean canBecomeKeyView() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_canBecomeKeyView);
+}
+
+public NSPoint convertPoint_fromView_(NSPoint aPoint, NSView aView) {
+	NSPoint result = new NSPoint();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_convertPoint_fromView_, aPoint, aView != null ? aView.id : 0);
+	return result;
+}
+
+public NSPoint convertPoint_toView_(NSPoint aPoint, NSView aView) {
+	NSPoint result = new NSPoint();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_convertPoint_toView_, aPoint, aView != null ? aView.id : 0);
+	return result;
+}
+
+public NSPoint convertPointFromBase(NSPoint aPoint) {
+	NSPoint result = new NSPoint();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_convertPointFromBase_, aPoint);
+	return result;
+}
+
+public NSPoint convertPointToBase(NSPoint aPoint) {
+	NSPoint result = new NSPoint();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_convertPointToBase_, aPoint);
+	return result;
+}
+
+public NSRect convertRect_fromView_(NSRect aRect, NSView aView) {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_convertRect_fromView_, aRect, aView != null ? aView.id : 0);
+	return result;
+}
+
+public NSRect convertRect_toView_(NSRect aRect, NSView aView) {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_convertRect_toView_, aRect, aView != null ? aView.id : 0);
+	return result;
+}
+
+public NSRect convertRectFromBase(NSRect aRect) {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_convertRectFromBase_, aRect);
+	return result;
+}
+
+public NSRect convertRectToBase(NSRect aRect) {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_convertRectToBase_, aRect);
+	return result;
+}
+
+public NSSize convertSize_fromView_(NSSize aSize, NSView aView) {
+	NSSize result = new NSSize();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_convertSize_fromView_, aSize, aView != null ? aView.id : 0);
+	return result;
+}
+
+public NSSize convertSize_toView_(NSSize aSize, NSView aView) {
+	NSSize result = new NSSize();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_convertSize_toView_, aSize, aView != null ? aView.id : 0);
+	return result;
+}
+
+public NSSize convertSizeFromBase(NSSize aSize) {
+	NSSize result = new NSSize();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_convertSizeFromBase_, aSize);
+	return result;
+}
+
+public NSSize convertSizeToBase(NSSize aSize) {
+	NSSize result = new NSSize();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_convertSizeToBase_, aSize);
+	return result;
+}
+
+public void discardCursorRects() {
+	OS.objc_msgSend(this.id, OS.sel_discardCursorRects);
+}
+
+public void display() {
+	OS.objc_msgSend(this.id, OS.sel_display);
+}
+
+public void displayIfNeeded() {
+	OS.objc_msgSend(this.id, OS.sel_displayIfNeeded);
+}
+
+public void displayRectIgnoringOpacity(NSRect aRect, NSGraphicsContext context) {
+	OS.objc_msgSend(this.id, OS.sel_displayRectIgnoringOpacity_inContext_, aRect, context != null ? context.id : 0);
+}
+
+public void dragImage(NSImage anImage, NSPoint viewLocation, NSSize initialOffset, NSEvent event, NSPasteboard pboard, id sourceObj, boolean slideFlag) {
+	OS.objc_msgSend(this.id, OS.sel_dragImage_at_offset_event_pasteboard_source_slideBack_, anImage != null ? anImage.id : 0, viewLocation, initialOffset, event != null ? event.id : 0, pboard != null ? pboard.id : 0, sourceObj != null ? sourceObj.id : 0, slideFlag);
+}
+
+public void drawRect(NSRect rect) {
+	OS.objc_msgSend(this.id, OS.sel_drawRect_, rect);
+}
+
+public void endDocument() {
+	OS.objc_msgSend(this.id, OS.sel_endDocument);
+}
+
+public void endPage() {
+	OS.objc_msgSend(this.id, OS.sel_endPage);
+}
+
+public NSRect frame() {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_frame);
+	return result;
+}
+
+public NSView hitTest(NSPoint aPoint) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_hitTest_, aPoint);
+	return result == this.id ? this : (result != 0 ? new NSView(result) : null);
+}
+
+public NSView initWithFrame(NSRect frameRect) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithFrame_, frameRect);
+	return result == this.id ? this : (result != 0 ? new NSView(result) : null);
+}
+
+public boolean isFlipped() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isFlipped);
+}
+
+public boolean isHidden() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isHidden);
+}
+
+public boolean isHiddenOrHasHiddenAncestor() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isHiddenOrHasHiddenAncestor);
+}
+
+public boolean isOpaque() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isOpaque);
+}
+
+public void lockFocus() {
+	OS.objc_msgSend(this.id, OS.sel_lockFocus);
+}
+
+public NSMenu menuForEvent(NSEvent event) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_menuForEvent_, event != null ? event.id : 0);
+	return result != 0 ? new NSMenu(result) : null;
+}
+
+public void registerForDraggedTypes(NSArray newTypes) {
+	OS.objc_msgSend(this.id, OS.sel_registerForDraggedTypes_, newTypes != null ? newTypes.id : 0);
+}
+
+public void removeFromSuperview() {
+	OS.objc_msgSend(this.id, OS.sel_removeFromSuperview);
+}
+
+public void removeTrackingArea(NSTrackingArea trackingArea) {
+	OS.objc_msgSend(this.id, OS.sel_removeTrackingArea_, trackingArea != null ? trackingArea.id : 0);
+}
+
+public void resetCursorRects() {
+	OS.objc_msgSend(this.id, OS.sel_resetCursorRects);
+}
+
+public void scrollPoint(NSPoint aPoint) {
+	OS.objc_msgSend(this.id, OS.sel_scrollPoint_, aPoint);
+}
+
+public boolean scrollRectToVisible(NSRect aRect) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_scrollRectToVisible_, aRect);
+}
+
+public void setAutoresizesSubviews(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setAutoresizesSubviews_, flag);
+}
+
+public void setAutoresizingMask(int /*long*/ mask) {
+	OS.objc_msgSend(this.id, OS.sel_setAutoresizingMask_, mask);
+}
+
+public void setFocusRingType(int /*long*/ focusRingType) {
+	OS.objc_msgSend(this.id, OS.sel_setFocusRingType_, focusRingType);
+}
+
+public void setFrame(NSRect frameRect) {
+	OS.objc_msgSend(this.id, OS.sel_setFrame_, frameRect);
+}
+
+public void setFrameOrigin(NSPoint newOrigin) {
+	OS.objc_msgSend(this.id, OS.sel_setFrameOrigin_, newOrigin);
+}
+
+public void setFrameSize(NSSize newSize) {
+	OS.objc_msgSend(this.id, OS.sel_setFrameSize_, newSize);
+}
+
+public void setHidden(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setHidden_, flag);
+}
+
+public void setNeedsDisplay(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setNeedsDisplay_, flag);
+}
+
+public void setNeedsDisplayInRect(NSRect invalidRect) {
+	OS.objc_msgSend(this.id, OS.sel_setNeedsDisplayInRect_, invalidRect);
+}
+
+public void setToolTip(NSString string) {
+	OS.objc_msgSend(this.id, OS.sel_setToolTip_, string != null ? string.id : 0);
+}
+
+public boolean shouldDelayWindowOrderingForEvent(NSEvent theEvent) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_shouldDelayWindowOrderingForEvent_, theEvent != null ? theEvent.id : 0);
+}
+
+public NSArray subviews() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_subviews);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+public NSView superview() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_superview);
+	return result == this.id ? this : (result != 0 ? new NSView(result) : null);
+}
+
+public NSArray trackingAreas() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_trackingAreas);
+	return result != 0 ? new NSArray(result) : null;
+}
+
+public void unlockFocus() {
+	OS.objc_msgSend(this.id, OS.sel_unlockFocus);
+}
+
+public void unregisterDraggedTypes() {
+	OS.objc_msgSend(this.id, OS.sel_unregisterDraggedTypes);
+}
+
+public void updateTrackingAreas() {
+	OS.objc_msgSend(this.id, OS.sel_updateTrackingAreas);
+}
+
+public void viewDidMoveToWindow() {
+	OS.objc_msgSend(this.id, OS.sel_viewDidMoveToWindow);
+}
+
+public NSRect visibleRect() {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_visibleRect);
+	return result;
+}
+
+public NSWindow window() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_window);
+	return result != 0 ? new NSWindow(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSWindow.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSWindow.java
new file mode 100644
index 0000000..78a713e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSWindow.java
@@ -0,0 +1,334 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSWindow extends NSResponder {
+
+public NSWindow() {
+	super();
+}
+
+public NSWindow(int /*long*/ id) {
+	super(id);
+}
+
+public NSWindow(id id) {
+	super(id);
+}
+
+public void addChildWindow(NSWindow childWin, int /*long*/ place) {
+	OS.objc_msgSend(this.id, OS.sel_addChildWindow_ordered_, childWin != null ? childWin.id : 0, place);
+}
+
+public float /*double*/ alphaValue() {
+	return (float)OS.objc_msgSend_fpret(this.id, OS.sel_alphaValue);
+}
+
+public boolean areCursorRectsEnabled() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_areCursorRectsEnabled);
+}
+
+public void becomeKeyWindow() {
+	OS.objc_msgSend(this.id, OS.sel_becomeKeyWindow);
+}
+
+public boolean canBecomeKeyWindow() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_canBecomeKeyWindow);
+}
+
+public NSPoint cascadeTopLeftFromPoint(NSPoint topLeftPoint) {
+	NSPoint result = new NSPoint();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_cascadeTopLeftFromPoint_, topLeftPoint);
+	return result;
+}
+
+public void close() {
+	OS.objc_msgSend(this.id, OS.sel_close);
+}
+
+public NSRect contentRectForFrameRect(NSRect frameRect) {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_contentRectForFrameRect_, frameRect);
+	return result;
+}
+
+public NSView contentView() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_contentView);
+	return result != 0 ? new NSView(result) : null;
+}
+
+public NSPoint convertBaseToScreen(NSPoint aPoint) {
+	NSPoint result = new NSPoint();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_convertBaseToScreen_, aPoint);
+	return result;
+}
+
+public NSPoint convertScreenToBase(NSPoint aPoint) {
+	NSPoint result = new NSPoint();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_convertScreenToBase_, aPoint);
+	return result;
+}
+
+public NSButtonCell defaultButtonCell() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_defaultButtonCell);
+	return result != 0 ? new NSButtonCell(result) : null;
+}
+
+public void deminiaturize(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_deminiaturize_, sender != null ? sender.id : 0);
+}
+
+public void disableCursorRects() {
+	OS.objc_msgSend(this.id, OS.sel_disableCursorRects);
+}
+
+public void display() {
+	OS.objc_msgSend(this.id, OS.sel_display);
+}
+
+public void enableCursorRects() {
+	OS.objc_msgSend(this.id, OS.sel_enableCursorRects);
+}
+
+public NSText fieldEditor(boolean createFlag, id anObject) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_fieldEditor_forObject_, createFlag, anObject != null ? anObject.id : 0);
+	return result != 0 ? new NSText(result) : null;
+}
+
+public NSResponder firstResponder() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_firstResponder);
+	return result != 0 ? new NSResponder(result) : null;
+}
+
+public NSRect frame() {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_frame);
+	return result;
+}
+
+public NSRect frameRectForContentRect(NSRect contentRect) {
+	NSRect result = new NSRect();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_frameRectForContentRect_, contentRect);
+	return result;
+}
+
+public NSGraphicsContext graphicsContext() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_graphicsContext);
+	return result != 0 ? new NSGraphicsContext(result) : null;
+}
+
+public boolean hasShadow() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_hasShadow);
+}
+
+public NSWindow initWithContentRect(NSRect contentRect, int /*long*/ aStyle, int /*long*/ bufferingType, boolean flag) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithContentRect_styleMask_backing_defer_, contentRect, aStyle, bufferingType, flag);
+	return result == this.id ? this : (result != 0 ? new NSWindow(result) : null);
+}
+
+public NSWindow initWithContentRect(NSRect contentRect, int /*long*/ aStyle, int /*long*/ bufferingType, boolean flag, NSScreen screen) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithContentRect_styleMask_backing_defer_screen_, contentRect, aStyle, bufferingType, flag, screen != null ? screen.id : 0);
+	return result == this.id ? this : (result != 0 ? new NSWindow(result) : null);
+}
+
+public void invalidateShadow() {
+	OS.objc_msgSend(this.id, OS.sel_invalidateShadow);
+}
+
+public boolean isDocumentEdited() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isDocumentEdited);
+}
+
+public boolean isKeyWindow() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isKeyWindow);
+}
+
+public boolean isMiniaturized() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isMiniaturized);
+}
+
+public boolean isSheet() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isSheet);
+}
+
+public boolean isVisible() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isVisible);
+}
+
+public boolean isZoomed() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isZoomed);
+}
+
+public boolean makeFirstResponder(NSResponder aResponder) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_makeFirstResponder_, aResponder != null ? aResponder.id : 0);
+}
+
+public void makeKeyAndOrderFront(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_makeKeyAndOrderFront_, sender != null ? sender.id : 0);
+}
+
+public static float /*double*/ minFrameWidthWithTitle(NSString aTitle, int /*long*/ aStyle) {
+	return (float)OS.objc_msgSend_fpret(OS.class_NSWindow, OS.sel_minFrameWidthWithTitle_styleMask_, aTitle != null ? aTitle.id : 0, aStyle);
+}
+
+public NSSize minSize() {
+	NSSize result = new NSSize();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_minSize);
+	return result;
+}
+
+public void miniaturize(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_miniaturize_, sender != null ? sender.id : 0);
+}
+
+public NSPoint mouseLocationOutsideOfEventStream() {
+	NSPoint result = new NSPoint();
+	OS.objc_msgSend_stret(result, this.id, OS.sel_mouseLocationOutsideOfEventStream);
+	return result;
+}
+
+public void orderBack(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_orderBack_, sender != null ? sender.id : 0);
+}
+
+public void orderFront(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_orderFront_, sender != null ? sender.id : 0);
+}
+
+public void orderFrontRegardless() {
+	OS.objc_msgSend(this.id, OS.sel_orderFrontRegardless);
+}
+
+public void orderOut(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_orderOut_, sender != null ? sender.id : 0);
+}
+
+public void orderWindow(int /*long*/ place, int /*long*/ otherWin) {
+	OS.objc_msgSend(this.id, OS.sel_orderWindow_relativeTo_, place, otherWin);
+}
+
+public NSWindow parentWindow() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_parentWindow);
+	return result == this.id ? this : (result != 0 ? new NSWindow(result) : null);
+}
+
+public void removeChildWindow(NSWindow childWin) {
+	OS.objc_msgSend(this.id, OS.sel_removeChildWindow_, childWin != null ? childWin.id : 0);
+}
+
+public NSScreen screen() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_screen);
+	return result != 0 ? new NSScreen(result) : null;
+}
+
+public void sendEvent(NSEvent theEvent) {
+	OS.objc_msgSend(this.id, OS.sel_sendEvent_, theEvent != null ? theEvent.id : 0);
+}
+
+public void setAcceptsMouseMovedEvents(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setAcceptsMouseMovedEvents_, flag);
+}
+
+public void setAlphaValue(float /*double*/ windowAlpha) {
+	OS.objc_msgSend(this.id, OS.sel_setAlphaValue_, windowAlpha);
+}
+
+public void setBackgroundColor(NSColor color) {
+	OS.objc_msgSend(this.id, OS.sel_setBackgroundColor_, color != null ? color.id : 0);
+}
+
+public void setContentView(NSView aView) {
+	OS.objc_msgSend(this.id, OS.sel_setContentView_, aView != null ? aView.id : 0);
+}
+
+public void setDefaultButtonCell(NSButtonCell defButt) {
+	OS.objc_msgSend(this.id, OS.sel_setDefaultButtonCell_, defButt != null ? defButt.id : 0);
+}
+
+public void setDelegate(id anObject) {
+	OS.objc_msgSend(this.id, OS.sel_setDelegate_, anObject != null ? anObject.id : 0);
+}
+
+public void setDocumentEdited(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setDocumentEdited_, flag);
+}
+
+public void setFrame(NSRect frameRect, boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setFrame_display_, frameRect, flag);
+}
+
+public void setFrame(NSRect frameRect, boolean displayFlag, boolean animateFlag) {
+	OS.objc_msgSend(this.id, OS.sel_setFrame_display_animate_, frameRect, displayFlag, animateFlag);
+}
+
+public void setHasShadow(boolean hasShadow) {
+	OS.objc_msgSend(this.id, OS.sel_setHasShadow_, hasShadow);
+}
+
+public void setLevel(int /*long*/ newLevel) {
+	OS.objc_msgSend(this.id, OS.sel_setLevel_, newLevel);
+}
+
+public void setMinSize(NSSize size) {
+	OS.objc_msgSend(this.id, OS.sel_setMinSize_, size);
+}
+
+public void setOpaque(boolean isOpaque) {
+	OS.objc_msgSend(this.id, OS.sel_setOpaque_, isOpaque);
+}
+
+public void setReleasedWhenClosed(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setReleasedWhenClosed_, flag);
+}
+
+public void setShowsResizeIndicator(boolean show) {
+	OS.objc_msgSend(this.id, OS.sel_setShowsResizeIndicator_, show);
+}
+
+public void setShowsToolbarButton(boolean show) {
+	OS.objc_msgSend(this.id, OS.sel_setShowsToolbarButton_, show);
+}
+
+public void setTitle(NSString aString) {
+	OS.objc_msgSend(this.id, OS.sel_setTitle_, aString != null ? aString.id : 0);
+}
+
+public void setToolbar(NSToolbar toolbar) {
+	OS.objc_msgSend(this.id, OS.sel_setToolbar_, toolbar != null ? toolbar.id : 0);
+}
+
+public NSButton standardWindowButton(int /*long*/ b) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_standardWindowButton_, b);
+	return result != 0 ? new NSButton(result) : null;
+}
+
+public int /*long*/ styleMask() {
+	return OS.objc_msgSend(this.id, OS.sel_styleMask);
+}
+
+public void toggleToolbarShown(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_toggleToolbarShown_, sender != null ? sender.id : 0);
+}
+
+public NSToolbar toolbar() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_toolbar);
+	return result != 0 ? new NSToolbar(result) : null;
+}
+
+public int /*long*/ windowNumber() {
+	return OS.objc_msgSend(this.id, OS.sel_windowNumber);
+}
+
+public void zoom(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_zoom_, sender != null ? sender.id : 0);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSWorkspace.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSWorkspace.java
new file mode 100644
index 0000000..647ca08
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/NSWorkspace.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class NSWorkspace extends NSObject {
+
+public NSWorkspace() {
+	super();
+}
+
+public NSWorkspace(int /*long*/ id) {
+	super(id);
+}
+
+public NSWorkspace(id id) {
+	super(id);
+}
+
+public NSString fullPathForApplication(NSString appName) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_fullPathForApplication_, appName != null ? appName.id : 0);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public boolean getInfoForFile(NSString fullPath, int /*long*/ appName, int /*long*/ type) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_getInfoForFile_application_type_, fullPath != null ? fullPath.id : 0, appName, type);
+}
+
+public NSImage iconForFile(NSString fullPath) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_iconForFile_, fullPath != null ? fullPath.id : 0);
+	return result != 0 ? new NSImage(result) : null;
+}
+
+public NSImage iconForFileType(NSString fileType) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_iconForFileType_, fileType != null ? fileType.id : 0);
+	return result != 0 ? new NSImage(result) : null;
+}
+
+public boolean isFilePackageAtPath(NSString fullPath) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_isFilePackageAtPath_, fullPath != null ? fullPath.id : 0);
+}
+
+public boolean openFile(NSString fullPath, NSString appName) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_openFile_withApplication_, fullPath != null ? fullPath.id : 0, appName != null ? appName.id : 0);
+}
+
+public boolean openURL(NSURL url) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_openURL_, url != null ? url.id : 0);
+}
+
+public boolean openURLs(NSArray urls, NSString bundleIdentifier, int /*long*/ options, NSAppleEventDescriptor descriptor, int /*long*/ identifiers) {
+	return OS.objc_msgSend_bool(this.id, OS.sel_openURLs_withAppBundleIdentifier_options_additionalEventParamDescriptor_launchIdentifiers_, urls != null ? urls.id : 0, bundleIdentifier != null ? bundleIdentifier.id : 0, options, descriptor != null ? descriptor.id : 0, identifiers);
+}
+
+public static NSWorkspace sharedWorkspace() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_NSWorkspace, OS.sel_sharedWorkspace);
+	return result != 0 ? new NSWorkspace(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java
new file mode 100644
index 0000000..118a11f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java
@@ -0,0 +1,3382 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.internal.cocoa;
+
+import org.eclipse.swt.internal.*;
+
+public class OS extends C {
+	static {
+		Library.loadLibrary("swt-pi"); //$NON-NLS-1$
+	}
+	
+	public static final int VERSION;
+	static {
+		int [] response = new int [1];
+		OS.Gestalt (OS.gestaltSystemVersion, response);
+		VERSION = response [0] & 0xffff;		
+	}
+	
+	public static final int gestaltSystemVersion = ('s'<<24) + ('y'<<16) + ('s'<<8) + 'v';
+	public static final int noErr = 0;
+	public static final int kProcessTransformToForegroundApplication = 1;
+	public static final int kAlertCautionIcon = ('c'<<24) + ('a'<<16) + ('u'<<8) + 't';
+	public static final int kAlertNoteIcon = ('n'<<24) + ('o'<<16) + ('t'<<8) + 'e';
+	public static final int kAlertStopIcon = ('s'<<24) + ('t'<<16) + ('o'<<8) + 'p';
+	public static final int shiftKey = 1 << 9;
+	public static final int kThemeMetricFocusRectOutset = 7;
+	public static final int kHIThemeOrientationNormal = 0;
+	public static final int kUIModeNormal = 0;
+	public static final int kUIModeContentHidden = 2;
+	public static final int kUIModeAllHidden = 3;
+	
+	public static final int /*long*/ sel_sendSearchSelection = sel_registerName("sendSearchSelection");
+	public static final int /*long*/ sel_sendCancelSelection = sel_registerName("sendCancelSelection");
+	public static final int /*long*/ sel_sendSelection = sel_registerName("sendSelection");
+	public static final int /*long*/ sel_sendSelection_ = sel_registerName("sendSelection:");
+	public static final int /*long*/ sel_sendDoubleSelection = sel_registerName("sendDoubleSelection");
+	public static final int /*long*/ sel_sendVerticalSelection = sel_registerName("sendVerticalSelection");
+	public static final int /*long*/ sel_sendHorizontalSelection = sel_registerName("sendHorizontalSelection");
+	public static final int /*long*/ sel_timerProc_ = sel_registerName("timerProc:");
+	public static final int /*long*/ sel_handleNotification_ = sel_registerName("handleNotification:");
+	public static final int /*long*/ sel_callJava = sel_registerName("callJava:index:arg:");
+	public static final int /*long*/ sel_quitRequested_ = sel_registerName("quitRequested:");
+	public static final int /*long*/ sel_systemSettingsChanged_ = sel_registerName("systemSettingsChanged:");
+	public static final int /*long*/ sel_panelDidEnd_returnCode_contextInfo_ = sel_registerName("panelDidEnd:returnCode:contextInfo:");
+	public static final int /*long*/ sel_updateOpenGLContext_ = sel_registerName("updateOpenGLContext:");
+	
+	public static final int /*long*/ sel_overwriteExistingFileCheck = sel_registerName("_overwriteExistingFileCheck:");
+
+	public static final int /*long*/ sel_setMovable_ = OS.sel_registerName("setMovable:");
+
+	public static final int /*long*/ sel_contextID = OS.sel_registerName("contextID");
+
+	public static final int /*long*/ sel__drawThemeProgressArea_ = OS.sel_registerName("_drawThemeProgressArea:");
+	
+	public static final int /*long*/ sel__setNeedsToUseHeartBeatWindow_ = OS.sel_registerName("_setNeedsToUseHeartBeatWindow:");
+
+	public static final int /*long*/ class_WebPanelAuthenticationHandler = OS.objc_getClass("WebPanelAuthenticationHandler");
+	public static final int /*long*/ sel_sharedHandler = sel_registerName("sharedHandler");
+	public static final int /*long*/ sel_startAuthentication = sel_registerName("startAuthentication:window:");
+
+	/* These are not generated in order to avoid creating static methods on all classes */
+	public static final int /*long*/ sel_isSelectorExcludedFromWebScript_ = sel_registerName("isSelectorExcludedFromWebScript:");
+	public static final int /*long*/ sel_webScriptNameForSelector_ = sel_registerName("webScriptNameForSelector:");
+
+/** JNI natives */
+
+/** @method flags=jni */
+public static final native int /*long*/ NewGlobalRef(Object object);
+/**
+ * @method flags=jni
+ * @param globalRef cast=(jobject)
+ */
+public static final native void DeleteGlobalRef(int /*long*/ globalRef);
+/** @method flags=no_gen */ 
+public static final native Object JNIGetObject(int /*long*/ globalRef);
+
+/** Carbon calls */
+
+public static final native int Gestalt(int selector, int[] response);
+/** @param psn cast=(ProcessSerialNumber *) */
+public static final native int GetCurrentProcess(int[] psn);
+/** @param psn cast=(ProcessSerialNumber *) */
+public static final native int SetFrontProcess(int[] psn);
+/** @param psn cast=(ProcessSerialNumber *) */
+public static final native int TransformProcessType(int[] psn, int transformState);
+public static final native int CPSSetProcessName(int[] psn, int /*long*/ name);
+/** @method flags=dynamic */
+public static final native int SetThemeCursor(int themeCursor);
+/** @method flags=dynamic */
+public static final native int GetCurrentButtonState();
+/** @method flags=dynamic */
+public static final native int GetDblTime();
+/** @method flags=dynamic 
+    @param  cast=(CGContextRef) */
+public static final native int /*long*/ CGContextCopyPath(int /*long*/ context);
+/** @method flags=dynamic */
+public static final native int /*long*/ TISCopyCurrentKeyboardInputSource();
+/** @method flags=dynamic 
+    @param  cast=(TISInputSourceRef) 
+    @param  cast=(CFStringRef) */
+public static final native int /*long*/ TISGetInputSourceProperty (int /*long*/ inputSource, int /*long*/ propertyKey);
+/** @method flags=no_gen */
+public static final native int /*long*/ kTISPropertyUnicodeKeyLayoutData();
+/**
+ * @method flags=dynamic
+ * @param inMode cast=(UInt32)
+ * @param inOptions cast=(UInt32)
+ */
+public static final native int SetSystemUIMode(int inMode, int inOptions);
+/**
+ * @method flags=dynamic
+ * @param keyLayoutPtr cast=(const UCKeyboardLayout *)
+ * @param virtualKeyCode cast=(UInt16)
+ * @param keyAction cast=(UInt16)
+ * @param modifierKeyState cast=(UInt32)
+ * @param keyboardType cast=(UInt32)
+ * @param keyTranslateOptions cast=(OptionBits)
+ * @param deadKeyState cast=(UInt32 *)
+ * @param maxStringLength cast=(UniCharCount)
+ * @param actualStringLength cast=(UniCharCount *)
+ * @param unicodeString cast=(UniChar *)
+ */
+public static final native int UCKeyTranslate (int /*long*/ keyLayoutPtr, short virtualKeyCode, short keyAction, int modifierKeyState, int keyboardType, int keyTranslateOptions, int[] deadKeyState, int maxStringLength, int[] actualStringLength, char[] unicodeString);
+/**
+ * @method flags=dynamic
+ * @param metric cast=(SInt32 *)
+*/
+public static final native void GetThemeMetric(int themeConstant, int[] metric);
+/**
+ * @method flags=dynamic
+ * @param inContext cast=(CGContextRef)
+*/
+public static final native int HIThemeDrawFocusRect(CGRect inRect, boolean inHasFocus, int /*long*/ inContext, int inOrientation);
+
+public static final int kUCKeyActionDown = 0;
+public static final int kUCKeyActionUp = 1;
+
+public static final int kThemeCopyArrowCursor = 1;
+public static final int kThemeNotAllowedCursor = 18;
+public static final int kThemeAliasArrowCursor = 2;
+
+/** @method flags=dynamic 
+ * @param iFile cast=(const FSRef *)
+ * @param iContext cast=(ATSFontContext)
+ * @param iFormat cast=(ATSFontFormat)
+ * @param iReserved cast=(void *)
+ * @param iOptions cast=(ATSOptionFlags)
+ * @param oContainer cast=(ATSFontContainerRef *)
+ */
+public static final native int ATSFontActivateFromFileReference(byte[] iFile, int iContext, int iFormat, int /*long*/ iReserved, int iOptions, int /*long*/ [] oContainer);
+
+public static final int kATSFontContextLocal = 2;
+public static final int kATSOptionFlagsDefault = 0;
+public static final int kATSFontFormatUnspecified = 0;
+
+/** @method flags=dynamic 
+ * @param path cast=(const UInt8 *)
+ * @param ref cast=(FSRef *)
+ * @param isDirectory cast=(Boolean *)
+ */
+public static final native int FSPathMakeRef (int /*long*/ path, byte[] ref, boolean[] isDirectory);
+
+/** @method flags=dynamic */
+public static final native byte LMGetKbdType();
+
+/** @method flags=dynamic */
+public static final native int /*long*/ AcquireRootMenu ();
+/** @method flags=dynamic */
+public static final native int CancelMenuTracking (int /*long*/ inRootMenu, boolean inImmediate, int inDismissalReason);
+
+/** C calls */
+
+public static final native int getpid();
+
+public static final native void call(int /*long*/ proc, int /*long*/ id, int /*long*/ sel);
+
+/** @method flags=no_gen */
+public static final native boolean __BIG_ENDIAN__();
+public static final int kCGBitmapByteOrderDefault = 0 << 12;
+public static final int kCGBitmapByteOrder16Little = 1 << 12;
+public static final int kCGBitmapByteOrder32Little = 2 << 12;
+public static final int kCGBitmapByteOrder16Big = 3 << 12;
+public static final int kCGBitmapByteOrder32Big = 4 << 12;
+public static final int kCGBitmapByteOrder16Host = __BIG_ENDIAN__() ? kCGBitmapByteOrder16Big : kCGBitmapByteOrder16Little;
+public static final int kCGBitmapByteOrder32Host = __BIG_ENDIAN__() ? kCGBitmapByteOrder32Big : kCGBitmapByteOrder32Little;
+
+/**
+ * @method flags=dynamic
+ * @param destRect flags=struct
+ * @param srcRect flags=struct
+ */
+public static final native void CGContextCopyWindowContentsToRect(int /*long*/ context, CGRect destRect, int /*long*/ contextID, int /*long*/ windowNumber, CGRect srcRect);
+
+/** QuickDraw calls */
+
+/** @method flags=dynamic */
+public static final native int /*long*/ NewRgn();
+/** @method flags=dynamic */
+public static final native void RectRgn(int /*long*/ rgnHandle, short[] rect);
+/** @method flags=dynamic */
+public static final native void OpenRgn();
+/** @method flags=dynamic */
+public static final native void OffsetRgn(int /*long*/ rgnHandle, short dh, short dv);
+/** @method flags=dynamic */
+public static final native void MoveTo(short h, short v);
+/** @method flags=dynamic */
+public static final native void LineTo(short h, short v);
+/** @method flags=dynamic */
+public static final native void UnionRgn(int /*long*/ srcRgnA, int /*long*/ srcRgnB, int /*long*/ dstRgn);
+/** @method flags=dynamic */
+public static final native void CloseRgn(int /*long*/ dstRgn);
+/** @method flags=dynamic */
+public static final native void DisposeRgn(int /*long*/ rgnHandle);
+/**
+ * @method flags=dynamic
+ * @param pt flags=struct,cast=(Point *)
+ */
+public static final native boolean PtInRgn(short[] pt, int /*long*/ rgnHandle);
+/** @method flags=dynamic */
+public static final native void GetRegionBounds(int /*long*/ rgnHandle, short[] bounds);
+/** @method flags=dynamic */
+public static final native void SectRgn(int /*long*/ srcRgnA, int /*long*/ srcRgnB, int /*long*/ dstRgn);
+/** @method flags=dynamic */
+public static final native boolean EmptyRgn(int /*long*/ rgnHandle);
+/** @method flags=dynamic */
+public static final native void DiffRgn(int /*long*/ srcRgnA, int /*long*/ srcRgnB, int /*long*/ dstRgn);
+/** @method flags=dynamic */
+public static final native boolean RectInRgn(short[] rect, int /*long*/ rgnHandle);
+/** @method flags=dynamic */
+public static final native int QDRegionToRects(int /*long*/ rgn, int dir, int /*long*/ proc, int /*long*/ userData);
+/** @method flags=dynamic */
+public static final native void CopyRgn(int /*long*/ srcRgnHandle, int /*long*/ dstRgnHandle);
+/** @method flags=dynamic */
+public static final native void SetRect(short[] r, short left, short top, short right, short bottom);
+public static final int kQDParseRegionFromTop = (1 << 0);
+public static final int kQDParseRegionFromBottom = (1 << 1);
+public static final int kQDParseRegionFromLeft = (1 << 2);
+public static final int kQDParseRegionFromRight = (1 << 3);
+public static final int kQDParseRegionFromTopLeft = kQDParseRegionFromTop | kQDParseRegionFromLeft;
+public static final int kQDRegionToRectsMsgParse = 2;
+
+/** Custom callbacks */
+
+/** @method flags=no_gen */
+public static final native int /*long*/ isFlipped_CALLBACK();
+
+/** Custom structure return */
+
+/** @method flags=no_gen */
+public static final native void NSIntersectionRect (NSRect result, NSRect aRect, NSRect bRect);
+/**
+ * @method flags=no_gen
+ * @param display cast=(CGDirectDisplayID)
+ */
+public static final native void CGDisplayBounds(int display, CGRect rect);
+
+/** Objective-C runtime */
+
+/**
+ * @param cls cast=(Class)
+ * @param name cast=(const char *),flags=critical
+ * @param types cast=(const char *),flags=critical
+ */
+public static final native boolean class_addIvar(int /*long*/ cls, byte[] name, int /*long*/ size, byte alignment, byte[] types);
+/**
+ * @param cls cast=(Class)
+ * @param name cast=(SEL)
+ * @param imp cast=(IMP)
+ */
+public static final native boolean class_addMethod(int /*long*/ cls, int /*long*/ name, int /*long*/ imp, String types);
+/**
+ * @param cls cast=(Class)
+ * @param protocol cast=(Protocol *)
+ */
+public static final native boolean class_addProtocol(int /*long*/ cls, int /*long*/ protocol);
+/**
+ * @param method cast=(Method)
+ * @param aClass cast=(Class)
+ * @param aSelector cast=(SEL)
+ */
+public static final native int /*long*/ class_getClassMethod(int /*long*/ aClass, int /*long*/ aSelector);
+/**
+ * @param cls cast=(Class)
+ * @param name cast=(SEL)
+ */
+public static final native int /*long*/ class_getMethodImplementation(int /*long*/ cls, int /*long*/ name);
+/**
+ * @param cls cast=(Class)
+ * @param name cast=(SEL)
+ */
+public static final native int /*long*/ class_getInstanceMethod(int /*long*/ cls, int /*long*/ name);
+/** @param cls cast=(Class) */
+public static final native int /*long*/ class_getSuperclass(int /*long*/ cls);
+/**
+ * @param method cast=(Method)
+ * @param imp cast=(IMP)
+ */
+public static final native int /*long*/ method_setImplementation(int /*long*/ method, int /*long*/ imp);
+/**
+ * @param cls cast=(Class)
+ * @param extraBytes cast=(size_t)
+ */
+public static final native int /*long*/ class_createInstance(int /*long*/ cls, int /*long*/ extraBytes);
+
+/** @method flags=no_gen */
+public static final native String class_getName(int /*long*/ cls);
+/** @method flags=dynamic */
+public static final native void instrumentObjcMessageSends(boolean val);
+/** @param superclass cast=(Class) */
+public static final native int /*long*/ objc_allocateClassPair(int /*long*/ superclass, String name, int /*long*/ extraBytes);
+public static final native int /*long*/ objc_getClass(String className);
+public static final native int /*long*/ objc_getMetaClass(String name);
+public static final native int /*long*/ objc_getProtocol(String name);
+public static final native int /*long*/ objc_lookUpClass(String className);
+/** @param cls cast=(Class) */
+public static final native void objc_registerClassPair(int /*long*/ cls);
+/** @param obj cast=(id) */
+public static final native int /*long*/ object_getClassName(int /*long*/ obj);
+/** @param obj cast=(id) */
+public static final native int /*long*/ object_getClass(int /*long*/ obj);
+
+/**
+ * @param obj cast=(id)
+ * @param name cast=(const char*),flags=critical
+ * @param outValue cast=(void **),flags=critical
+ */
+public static final native int /*long*/ object_getInstanceVariable(int /*long*/ obj, byte[] name, int /*long*/ [] outValue);
+/**
+ * @param obj cast=(id)
+ * @param name cast=(const char*),flags=critical
+ * @param value cast=(void *),flags=critical
+ */
+public static final native int /*long*/ object_setInstanceVariable(int /*long*/ obj, byte[] name, int /*long*/ value);
+/**
+ * @param obj cast=(id)
+ * @param clazz cast=(Class) 
+ */
+public static final native int /*long*/ object_setClass(int /*long*/ obj, int /*long*/ clazz);
+public static final native int /*long*/ sel_registerName(String selectorName);
+public static final native int objc_super_sizeof();
+
+
+/** This section is auto generated */
+
+/** Custom callbacks */
+/** @method callback_types=id;id;SEL;NSPoint;,callback_flags=none;none;none;struct; */
+public static final native int /*long*/ CALLBACK_accessibilityHitTest_(int /*long*/ func);
+/** @method callback_types=NSAttributedString*;id;SEL;NSRange;,callback_flags=none;none;none;struct; */
+public static final native int /*long*/ CALLBACK_attributedSubstringFromRange_(int /*long*/ func);
+/** @method callback_types=BOOL;id;SEL;NSIndexSet*;NSPoint;,callback_flags=none;none;none;none;struct; */
+public static final native int /*long*/ CALLBACK_canDragRowsWithIndexes_atPoint_(int /*long*/ func);
+/** @method callback_types=NSSize;id;SEL;,callback_flags=struct;none;none; */
+public static final native int /*long*/ CALLBACK_cellSize(int /*long*/ func);
+/** @method callback_types=NSUInteger;id;SEL;NSPoint;,callback_flags=none;none;none;struct; */
+public static final native int /*long*/ CALLBACK_characterIndexForPoint_(int /*long*/ func);
+/** @method callback_types=BOOL;id;SEL;NSEvent*;NSSize;BOOL;,callback_flags=none;none;none;none;struct;none; */
+public static final native int /*long*/ CALLBACK_dragSelectionWithEvent_offset_slideBack_(int /*long*/ func);
+/** @method callback_types=void;id;SEL;NSImage*;NSPoint;,callback_flags=none;none;none;none;struct; */
+public static final native int /*long*/ CALLBACK_draggedImage_beganAt_(int /*long*/ func);
+/** @method callback_types=void;id;SEL;NSImage*;NSPoint;NSDragOperation;,callback_flags=none;none;none;none;struct;none; */
+public static final native int /*long*/ CALLBACK_draggedImage_endedAt_operation_(int /*long*/ func);
+/** @method callback_types=void;id;SEL;NSImage*;NSRect;NSView*;,callback_flags=none;none;none;none;struct;none; */
+public static final native int /*long*/ CALLBACK_drawImage_withFrame_inView_(int /*long*/ func);
+/** @method callback_types=void;id;SEL;NSRect;NSView*;,callback_flags=none;none;none;struct;none; */
+public static final native int /*long*/ CALLBACK_drawInteriorWithFrame_inView_(int /*long*/ func);
+/** @method callback_types=void;id;SEL;NSRect;,callback_flags=none;none;none;struct; */
+public static final native int /*long*/ CALLBACK_drawRect_(int /*long*/ func);
+/** @method callback_types=void;id;SEL;NSRect;NSView*;,callback_flags=none;none;none;struct;none; */
+public static final native int /*long*/ CALLBACK_drawWithExpansionFrame_inView_(int /*long*/ func);
+/** @method callback_types=NSRect;id;SEL;NSRect;NSView*;,callback_flags=struct;none;none;struct;none; */
+public static final native int /*long*/ CALLBACK_expansionFrameWithFrame_inView_(int /*long*/ func);
+/** @method callback_types=NSRect;id;SEL;NSRange;,callback_flags=struct;none;none;struct; */
+public static final native int /*long*/ CALLBACK_firstRectForCharacterRange_(int /*long*/ func);
+/** @method callback_types=void;id;SEL;NSRect;,callback_flags=none;none;none;struct; */
+public static final native int /*long*/ CALLBACK_highlightSelectionInClipRect_(int /*long*/ func);
+/** @method callback_types=NSView*;id;SEL;NSPoint;,callback_flags=none;none;none;struct; */
+public static final native int /*long*/ CALLBACK_hitTest_(int /*long*/ func);
+/** @method callback_types=NSUInteger;id;SEL;NSEvent*;NSRect;NSView*;,callback_flags=none;none;none;none;struct;none; */
+public static final native int /*long*/ CALLBACK_hitTestForEvent_inRect_ofView_(int /*long*/ func);
+/** @method callback_types=NSRect;id;SEL;NSRect;,callback_flags=struct;none;none;struct; */
+public static final native int /*long*/ CALLBACK_imageRectForBounds_(int /*long*/ func);
+/** @method callback_types=NSRange;id;SEL;,callback_flags=struct;none;none; */
+public static final native int /*long*/ CALLBACK_markedRange(int /*long*/ func);
+/** @method callback_types=NSRange;id;SEL;,callback_flags=struct;none;none; */
+public static final native int /*long*/ CALLBACK_selectedRange(int /*long*/ func);
+/** @method callback_types=void;id;SEL;NSRect;,callback_flags=none;none;none;struct; */
+public static final native int /*long*/ CALLBACK_setFrame_(int /*long*/ func);
+/** @method callback_types=void;id;SEL;NSPoint;,callback_flags=none;none;none;struct; */
+public static final native int /*long*/ CALLBACK_setFrameOrigin_(int /*long*/ func);
+/** @method callback_types=void;id;SEL;NSSize;,callback_flags=none;none;none;struct; */
+public static final native int /*long*/ CALLBACK_setFrameSize_(int /*long*/ func);
+/** @method callback_types=void;id;SEL;id;NSRange;,callback_flags=none;none;none;none;struct; */
+public static final native int /*long*/ CALLBACK_setMarkedText_selectedRange_(int /*long*/ func);
+/** @method callback_types=void;id;SEL;NSRect;,callback_flags=none;none;none;struct; */
+public static final native int /*long*/ CALLBACK_setNeedsDisplayInRect_(int /*long*/ func);
+/** @method callback_types=BOOL;id;SEL;NSRange;NSString*;,callback_flags=none;none;none;struct;none; */
+public static final native int /*long*/ CALLBACK_shouldChangeTextInRange_replacementString_(int /*long*/ func);
+/** @method callback_types=NSRange;id;SEL;NSTextView*;NSRange;NSRange;,callback_flags=struct;none;none;none;struct;struct; */
+public static final native int /*long*/ CALLBACK_textView_willChangeSelectionFromCharacterRange_toCharacterRange_(int /*long*/ func);
+/** @method callback_types=NSRect;id;SEL;NSRect;,callback_flags=struct;none;none;struct; */
+public static final native int /*long*/ CALLBACK_titleRectForBounds_(int /*long*/ func);
+/** @method callback_types=NSString*;id;SEL;NSView*;NSToolTipTag;NSPoint;void*;,callback_flags=none;none;none;none;none;struct;none; */
+public static final native int /*long*/ CALLBACK_view_stringForToolTip_point_userData_(int /*long*/ func);
+/** @method callback_types=void;id;SEL;WebView*;NSRect;,callback_flags=none;none;none;none;struct; */
+public static final native int /*long*/ CALLBACK_webView_setFrame_(int /*long*/ func);
+
+/** Classes */
+public static final int /*long*/ class_DOMDocument = objc_getClass("DOMDocument");
+public static final int /*long*/ class_DOMEvent = objc_getClass("DOMEvent");
+public static final int /*long*/ class_DOMKeyboardEvent = objc_getClass("DOMKeyboardEvent");
+public static final int /*long*/ class_DOMMouseEvent = objc_getClass("DOMMouseEvent");
+public static final int /*long*/ class_DOMUIEvent = objc_getClass("DOMUIEvent");
+public static final int /*long*/ class_DOMWheelEvent = objc_getClass("DOMWheelEvent");
+public static final int /*long*/ class_NSActionCell = objc_getClass("NSActionCell");
+public static final int /*long*/ class_NSAffineTransform = objc_getClass("NSAffineTransform");
+public static final int /*long*/ class_NSAlert = objc_getClass("NSAlert");
+public static final int /*long*/ class_NSAppleEventDescriptor = objc_getClass("NSAppleEventDescriptor");
+public static final int /*long*/ class_NSApplication = objc_getClass("NSApplication");
+public static final int /*long*/ class_NSArray = objc_getClass("NSArray");
+public static final int /*long*/ class_NSAttributedString = objc_getClass("NSAttributedString");
+public static final int /*long*/ class_NSAutoreleasePool = objc_getClass("NSAutoreleasePool");
+public static final int /*long*/ class_NSBezierPath = objc_getClass("NSBezierPath");
+public static final int /*long*/ class_NSBitmapImageRep = objc_getClass("NSBitmapImageRep");
+public static final int /*long*/ class_NSBox = objc_getClass("NSBox");
+public static final int /*long*/ class_NSBrowserCell = objc_getClass("NSBrowserCell");
+public static final int /*long*/ class_NSBundle = objc_getClass("NSBundle");
+public static final int /*long*/ class_NSButton = objc_getClass("NSButton");
+public static final int /*long*/ class_NSButtonCell = objc_getClass("NSButtonCell");
+public static final int /*long*/ class_NSCalendarDate = objc_getClass("NSCalendarDate");
+public static final int /*long*/ class_NSCell = objc_getClass("NSCell");
+public static final int /*long*/ class_NSCharacterSet = objc_getClass("NSCharacterSet");
+public static final int /*long*/ class_NSClipView = objc_getClass("NSClipView");
+public static final int /*long*/ class_NSCoder = objc_getClass("NSCoder");
+public static final int /*long*/ class_NSColor = objc_getClass("NSColor");
+public static final int /*long*/ class_NSColorPanel = objc_getClass("NSColorPanel");
+public static final int /*long*/ class_NSColorSpace = objc_getClass("NSColorSpace");
+public static final int /*long*/ class_NSComboBox = objc_getClass("NSComboBox");
+public static final int /*long*/ class_NSComboBoxCell = objc_getClass("NSComboBoxCell");
+public static final int /*long*/ class_NSControl = objc_getClass("NSControl");
+public static final int /*long*/ class_NSCursor = objc_getClass("NSCursor");
+public static final int /*long*/ class_NSData = objc_getClass("NSData");
+public static final int /*long*/ class_NSDate = objc_getClass("NSDate");
+public static final int /*long*/ class_NSDatePicker = objc_getClass("NSDatePicker");
+public static final int /*long*/ class_NSDictionary = objc_getClass("NSDictionary");
+public static final int /*long*/ class_NSDirectoryEnumerator = objc_getClass("NSDirectoryEnumerator");
+public static final int /*long*/ class_NSEnumerator = objc_getClass("NSEnumerator");
+public static final int /*long*/ class_NSError = objc_getClass("NSError");
+public static final int /*long*/ class_NSEvent = objc_getClass("NSEvent");
+public static final int /*long*/ class_NSFileManager = objc_getClass("NSFileManager");
+public static final int /*long*/ class_NSFileWrapper = objc_getClass("NSFileWrapper");
+public static final int /*long*/ class_NSFont = objc_getClass("NSFont");
+public static final int /*long*/ class_NSFontManager = objc_getClass("NSFontManager");
+public static final int /*long*/ class_NSFontPanel = objc_getClass("NSFontPanel");
+public static final int /*long*/ class_NSFormatter = objc_getClass("NSFormatter");
+public static final int /*long*/ class_NSGradient = objc_getClass("NSGradient");
+public static final int /*long*/ class_NSGraphicsContext = objc_getClass("NSGraphicsContext");
+public static final int /*long*/ class_NSHTTPCookie = objc_getClass("NSHTTPCookie");
+public static final int /*long*/ class_NSHTTPCookieStorage = objc_getClass("NSHTTPCookieStorage");
+public static final int /*long*/ class_NSImage = objc_getClass("NSImage");
+public static final int /*long*/ class_NSImageRep = objc_getClass("NSImageRep");
+public static final int /*long*/ class_NSImageView = objc_getClass("NSImageView");
+public static final int /*long*/ class_NSIndexSet = objc_getClass("NSIndexSet");
+public static final int /*long*/ class_NSInputManager = objc_getClass("NSInputManager");
+public static final int /*long*/ class_NSKeyedArchiver = objc_getClass("NSKeyedArchiver");
+public static final int /*long*/ class_NSKeyedUnarchiver = objc_getClass("NSKeyedUnarchiver");
+public static final int /*long*/ class_NSLayoutManager = objc_getClass("NSLayoutManager");
+public static final int /*long*/ class_NSMenu = objc_getClass("NSMenu");
+public static final int /*long*/ class_NSMenuItem = objc_getClass("NSMenuItem");
+public static final int /*long*/ class_NSMutableArray = objc_getClass("NSMutableArray");
+public static final int /*long*/ class_NSMutableAttributedString = objc_getClass("NSMutableAttributedString");
+public static final int /*long*/ class_NSMutableDictionary = objc_getClass("NSMutableDictionary");
+public static final int /*long*/ class_NSMutableIndexSet = objc_getClass("NSMutableIndexSet");
+public static final int /*long*/ class_NSMutableParagraphStyle = objc_getClass("NSMutableParagraphStyle");
+public static final int /*long*/ class_NSMutableSet = objc_getClass("NSMutableSet");
+public static final int /*long*/ class_NSMutableString = objc_getClass("NSMutableString");
+public static final int /*long*/ class_NSMutableURLRequest = objc_getClass("NSMutableURLRequest");
+public static final int /*long*/ class_NSNotification = objc_getClass("NSNotification");
+public static final int /*long*/ class_NSNotificationCenter = objc_getClass("NSNotificationCenter");
+public static final int /*long*/ class_NSNumber = objc_getClass("NSNumber");
+public static final int /*long*/ class_NSNumberFormatter = objc_getClass("NSNumberFormatter");
+public static final int /*long*/ class_NSObject = objc_getClass("NSObject");
+public static final int /*long*/ class_NSOpenGLContext = objc_getClass("NSOpenGLContext");
+public static final int /*long*/ class_NSOpenGLPixelFormat = objc_getClass("NSOpenGLPixelFormat");
+public static final int /*long*/ class_NSOpenPanel = objc_getClass("NSOpenPanel");
+public static final int /*long*/ class_NSOutlineView = objc_getClass("NSOutlineView");
+public static final int /*long*/ class_NSPanel = objc_getClass("NSPanel");
+public static final int /*long*/ class_NSParagraphStyle = objc_getClass("NSParagraphStyle");
+public static final int /*long*/ class_NSPasteboard = objc_getClass("NSPasteboard");
+public static final int /*long*/ class_NSPopUpButton = objc_getClass("NSPopUpButton");
+public static final int /*long*/ class_NSPrintInfo = objc_getClass("NSPrintInfo");
+public static final int /*long*/ class_NSPrintOperation = objc_getClass("NSPrintOperation");
+public static final int /*long*/ class_NSPrintPanel = objc_getClass("NSPrintPanel");
+public static final int /*long*/ class_NSPrinter = objc_getClass("NSPrinter");
+public static final int /*long*/ class_NSProgressIndicator = objc_getClass("NSProgressIndicator");
+public static final int /*long*/ class_NSResponder = objc_getClass("NSResponder");
+public static final int /*long*/ class_NSRunLoop = objc_getClass("NSRunLoop");
+public static final int /*long*/ class_NSSavePanel = objc_getClass("NSSavePanel");
+public static final int /*long*/ class_NSScreen = objc_getClass("NSScreen");
+public static final int /*long*/ class_NSScrollView = objc_getClass("NSScrollView");
+public static final int /*long*/ class_NSScroller = objc_getClass("NSScroller");
+public static final int /*long*/ class_NSSearchField = objc_getClass("NSSearchField");
+public static final int /*long*/ class_NSSearchFieldCell = objc_getClass("NSSearchFieldCell");
+public static final int /*long*/ class_NSSecureTextField = objc_getClass("NSSecureTextField");
+public static final int /*long*/ class_NSSegmentedCell = objc_getClass("NSSegmentedCell");
+public static final int /*long*/ class_NSSet = objc_getClass("NSSet");
+public static final int /*long*/ class_NSSlider = objc_getClass("NSSlider");
+public static final int /*long*/ class_NSStatusBar = objc_getClass("NSStatusBar");
+public static final int /*long*/ class_NSStatusItem = objc_getClass("NSStatusItem");
+public static final int /*long*/ class_NSStepper = objc_getClass("NSStepper");
+public static final int /*long*/ class_NSString = objc_getClass("NSString");
+public static final int /*long*/ class_NSTabView = objc_getClass("NSTabView");
+public static final int /*long*/ class_NSTabViewItem = objc_getClass("NSTabViewItem");
+public static final int /*long*/ class_NSTableColumn = objc_getClass("NSTableColumn");
+public static final int /*long*/ class_NSTableHeaderCell = objc_getClass("NSTableHeaderCell");
+public static final int /*long*/ class_NSTableHeaderView = objc_getClass("NSTableHeaderView");
+public static final int /*long*/ class_NSTableView = objc_getClass("NSTableView");
+public static final int /*long*/ class_NSText = objc_getClass("NSText");
+public static final int /*long*/ class_NSTextAttachment = objc_getClass("NSTextAttachment");
+public static final int /*long*/ class_NSTextContainer = objc_getClass("NSTextContainer");
+public static final int /*long*/ class_NSTextField = objc_getClass("NSTextField");
+public static final int /*long*/ class_NSTextFieldCell = objc_getClass("NSTextFieldCell");
+public static final int /*long*/ class_NSTextStorage = objc_getClass("NSTextStorage");
+public static final int /*long*/ class_NSTextTab = objc_getClass("NSTextTab");
+public static final int /*long*/ class_NSTextView = objc_getClass("NSTextView");
+public static final int /*long*/ class_NSThread = objc_getClass("NSThread");
+public static final int /*long*/ class_NSTimeZone = objc_getClass("NSTimeZone");
+public static final int /*long*/ class_NSTimer = objc_getClass("NSTimer");
+public static final int /*long*/ class_NSToolbar = objc_getClass("NSToolbar");
+public static final int /*long*/ class_NSToolbarItem = objc_getClass("NSToolbarItem");
+public static final int /*long*/ class_NSTrackingArea = objc_getClass("NSTrackingArea");
+public static final int /*long*/ class_NSTypesetter = objc_getClass("NSTypesetter");
+public static final int /*long*/ class_NSURL = objc_getClass("NSURL");
+public static final int /*long*/ class_NSURLAuthenticationChallenge = objc_getClass("NSURLAuthenticationChallenge");
+public static final int /*long*/ class_NSURLCredential = objc_getClass("NSURLCredential");
+public static final int /*long*/ class_NSURLDownload = objc_getClass("NSURLDownload");
+public static final int /*long*/ class_NSURLProtectionSpace = objc_getClass("NSURLProtectionSpace");
+public static final int /*long*/ class_NSURLRequest = objc_getClass("NSURLRequest");
+public static final int /*long*/ class_NSValue = objc_getClass("NSValue");
+public static final int /*long*/ class_NSView = objc_getClass("NSView");
+public static final int /*long*/ class_NSWindow = objc_getClass("NSWindow");
+public static final int /*long*/ class_NSWorkspace = objc_getClass("NSWorkspace");
+public static final int /*long*/ class_WebDataSource = objc_getClass("WebDataSource");
+public static final int /*long*/ class_WebFrame = objc_getClass("WebFrame");
+public static final int /*long*/ class_WebFrameView = objc_getClass("WebFrameView");
+public static final int /*long*/ class_WebPreferences = objc_getClass("WebPreferences");
+public static final int /*long*/ class_WebScriptObject = objc_getClass("WebScriptObject");
+public static final int /*long*/ class_WebUndefined = objc_getClass("WebUndefined");
+public static final int /*long*/ class_WebView = objc_getClass("WebView");
+
+/** Protocols */
+public static final int /*long*/ protocol_NSAccessibility = objc_getProtocol("NSAccessibility");
+public static final int /*long*/ protocol_NSAccessibilityAdditions = objc_getProtocol("NSAccessibilityAdditions");
+public static final int /*long*/ protocol_NSApplicationDelegate = objc_getProtocol("NSApplicationDelegate");
+public static final int /*long*/ protocol_NSApplicationNotifications = objc_getProtocol("NSApplicationNotifications");
+public static final int /*long*/ protocol_NSColorPanelResponderMethod = objc_getProtocol("NSColorPanelResponderMethod");
+public static final int /*long*/ protocol_NSComboBoxNotifications = objc_getProtocol("NSComboBoxNotifications");
+public static final int /*long*/ protocol_NSDraggingDestination = objc_getProtocol("NSDraggingDestination");
+public static final int /*long*/ protocol_NSDraggingSource = objc_getProtocol("NSDraggingSource");
+public static final int /*long*/ protocol_NSFontManagerResponderMethod = objc_getProtocol("NSFontManagerResponderMethod");
+public static final int /*long*/ protocol_NSMenuDelegate = objc_getProtocol("NSMenuDelegate");
+public static final int /*long*/ protocol_NSOutlineViewDataSource = objc_getProtocol("NSOutlineViewDataSource");
+public static final int /*long*/ protocol_NSOutlineViewDelegate = objc_getProtocol("NSOutlineViewDelegate");
+public static final int /*long*/ protocol_NSOutlineViewNotifications = objc_getProtocol("NSOutlineViewNotifications");
+public static final int /*long*/ protocol_NSPasteboardOwner = objc_getProtocol("NSPasteboardOwner");
+public static final int /*long*/ protocol_NSSavePanelDelegate = objc_getProtocol("NSSavePanelDelegate");
+public static final int /*long*/ protocol_NSTabViewDelegate = objc_getProtocol("NSTabViewDelegate");
+public static final int /*long*/ protocol_NSTableDataSource = objc_getProtocol("NSTableDataSource");
+public static final int /*long*/ protocol_NSTableViewDelegate = objc_getProtocol("NSTableViewDelegate");
+public static final int /*long*/ protocol_NSTableViewNotifications = objc_getProtocol("NSTableViewNotifications");
+public static final int /*long*/ protocol_NSTextDelegate = objc_getProtocol("NSTextDelegate");
+public static final int /*long*/ protocol_NSTextInput = objc_getProtocol("NSTextInput");
+public static final int /*long*/ protocol_NSTextViewDelegate = objc_getProtocol("NSTextViewDelegate");
+public static final int /*long*/ protocol_NSToolTipOwner = objc_getProtocol("NSToolTipOwner");
+public static final int /*long*/ protocol_NSToolbarDelegate = objc_getProtocol("NSToolbarDelegate");
+public static final int /*long*/ protocol_NSToolbarNotifications = objc_getProtocol("NSToolbarNotifications");
+public static final int /*long*/ protocol_NSURLDownloadDelegate = objc_getProtocol("NSURLDownloadDelegate");
+public static final int /*long*/ protocol_NSWindowDelegate = objc_getProtocol("NSWindowDelegate");
+public static final int /*long*/ protocol_NSWindowNotifications = objc_getProtocol("NSWindowNotifications");
+public static final int /*long*/ protocol_WebDocumentRepresentation = objc_getProtocol("WebDocumentRepresentation");
+public static final int /*long*/ protocol_WebFrameLoadDelegate = objc_getProtocol("WebFrameLoadDelegate");
+public static final int /*long*/ protocol_WebOpenPanelResultListener = objc_getProtocol("WebOpenPanelResultListener");
+public static final int /*long*/ protocol_WebPolicyDecisionListener = objc_getProtocol("WebPolicyDecisionListener");
+public static final int /*long*/ protocol_WebPolicyDelegate = objc_getProtocol("WebPolicyDelegate");
+public static final int /*long*/ protocol_WebResourceLoadDelegate = objc_getProtocol("WebResourceLoadDelegate");
+public static final int /*long*/ protocol_WebUIDelegate = objc_getProtocol("WebUIDelegate");
+
+/** Selectors */
+public static final int /*long*/ sel_CGEvent = sel_registerName("CGEvent");
+public static final int /*long*/ sel_DOMDocument = sel_registerName("DOMDocument");
+public static final int /*long*/ sel_IBeamCursor = sel_registerName("IBeamCursor");
+public static final int /*long*/ sel_TIFFRepresentation = sel_registerName("TIFFRepresentation");
+public static final int /*long*/ sel_URL = sel_registerName("URL");
+public static final int /*long*/ sel_URLFromPasteboard_ = sel_registerName("URLFromPasteboard:");
+public static final int /*long*/ sel_URLWithString_ = sel_registerName("URLWithString:");
+public static final int /*long*/ sel_UTF8String = sel_registerName("UTF8String");
+public static final int /*long*/ sel_abortEditing = sel_registerName("abortEditing");
+public static final int /*long*/ sel_absoluteString = sel_registerName("absoluteString");
+public static final int /*long*/ sel_acceptsFirstMouse_ = sel_registerName("acceptsFirstMouse:");
+public static final int /*long*/ sel_acceptsFirstResponder = sel_registerName("acceptsFirstResponder");
+public static final int /*long*/ sel_accessibilityActionDescription_ = sel_registerName("accessibilityActionDescription:");
+public static final int /*long*/ sel_accessibilityActionNames = sel_registerName("accessibilityActionNames");
+public static final int /*long*/ sel_accessibilityAttributeNames = sel_registerName("accessibilityAttributeNames");
+public static final int /*long*/ sel_accessibilityAttributeValue_ = sel_registerName("accessibilityAttributeValue:");
+public static final int /*long*/ sel_accessibilityAttributeValue_forParameter_ = sel_registerName("accessibilityAttributeValue:forParameter:");
+public static final int /*long*/ sel_accessibilityFocusedUIElement = sel_registerName("accessibilityFocusedUIElement");
+public static final int /*long*/ sel_accessibilityHitTest_ = sel_registerName("accessibilityHitTest:");
+public static final int /*long*/ sel_accessibilityIsAttributeSettable_ = sel_registerName("accessibilityIsAttributeSettable:");
+public static final int /*long*/ sel_accessibilityIsIgnored = sel_registerName("accessibilityIsIgnored");
+public static final int /*long*/ sel_accessibilityParameterizedAttributeNames = sel_registerName("accessibilityParameterizedAttributeNames");
+public static final int /*long*/ sel_accessibilityPerformAction_ = sel_registerName("accessibilityPerformAction:");
+public static final int /*long*/ sel_accessibilitySetOverrideValue_forAttribute_ = sel_registerName("accessibilitySetOverrideValue:forAttribute:");
+public static final int /*long*/ sel_accessibilitySetValue_forAttribute_ = sel_registerName("accessibilitySetValue:forAttribute:");
+public static final int /*long*/ sel_action = sel_registerName("action");
+public static final int /*long*/ sel_activateIgnoringOtherApps_ = sel_registerName("activateIgnoringOtherApps:");
+public static final int /*long*/ sel_addAttribute_value_range_ = sel_registerName("addAttribute:value:range:");
+public static final int /*long*/ sel_addButtonWithTitle_ = sel_registerName("addButtonWithTitle:");
+public static final int /*long*/ sel_addChildWindow_ordered_ = sel_registerName("addChildWindow:ordered:");
+public static final int /*long*/ sel_addClip = sel_registerName("addClip");
+public static final int /*long*/ sel_addEventListener_listener_useCapture_ = sel_registerName("addEventListener:listener:useCapture:");
+public static final int /*long*/ sel_addIndex_ = sel_registerName("addIndex:");
+public static final int /*long*/ sel_addItem_ = sel_registerName("addItem:");
+public static final int /*long*/ sel_addItemWithObjectValue_ = sel_registerName("addItemWithObjectValue:");
+public static final int /*long*/ sel_addItemWithTitle_action_keyEquivalent_ = sel_registerName("addItemWithTitle:action:keyEquivalent:");
+public static final int /*long*/ sel_addLayoutManager_ = sel_registerName("addLayoutManager:");
+public static final int /*long*/ sel_addObject_ = sel_registerName("addObject:");
+public static final int /*long*/ sel_addObjectsFromArray_ = sel_registerName("addObjectsFromArray:");
+public static final int /*long*/ sel_addObserver_selector_name_object_ = sel_registerName("addObserver:selector:name:object:");
+public static final int /*long*/ sel_addRepresentation_ = sel_registerName("addRepresentation:");
+public static final int /*long*/ sel_addSubview_ = sel_registerName("addSubview:");
+public static final int /*long*/ sel_addSubview_positioned_relativeTo_ = sel_registerName("addSubview:positioned:relativeTo:");
+public static final int /*long*/ sel_addTabStop_ = sel_registerName("addTabStop:");
+public static final int /*long*/ sel_addTabViewItem_ = sel_registerName("addTabViewItem:");
+public static final int /*long*/ sel_addTableColumn_ = sel_registerName("addTableColumn:");
+public static final int /*long*/ sel_addTemporaryAttribute_value_forCharacterRange_ = sel_registerName("addTemporaryAttribute:value:forCharacterRange:");
+public static final int /*long*/ sel_addTextContainer_ = sel_registerName("addTextContainer:");
+public static final int /*long*/ sel_addTimer_forMode_ = sel_registerName("addTimer:forMode:");
+public static final int /*long*/ sel_addToolTipRect_owner_userData_ = sel_registerName("addToolTipRect:owner:userData:");
+public static final int /*long*/ sel_addTypes_owner_ = sel_registerName("addTypes:owner:");
+public static final int /*long*/ sel_alignment = sel_registerName("alignment");
+public static final int /*long*/ sel_allKeys = sel_registerName("allKeys");
+public static final int /*long*/ sel_alloc = sel_registerName("alloc");
+public static final int /*long*/ sel_allowsColumnReordering = sel_registerName("allowsColumnReordering");
+public static final int /*long*/ sel_allowsFloats = sel_registerName("allowsFloats");
+public static final int /*long*/ sel_alphaComponent = sel_registerName("alphaComponent");
+public static final int /*long*/ sel_alphaValue = sel_registerName("alphaValue");
+public static final int /*long*/ sel_altKey = sel_registerName("altKey");
+public static final int /*long*/ sel_alternateSelectedControlColor = sel_registerName("alternateSelectedControlColor");
+public static final int /*long*/ sel_alternateSelectedControlTextColor = sel_registerName("alternateSelectedControlTextColor");
+public static final int /*long*/ sel_alwaysShowsDecimalSeparator = sel_registerName("alwaysShowsDecimalSeparator");
+public static final int /*long*/ sel_appendAttributedString_ = sel_registerName("appendAttributedString:");
+public static final int /*long*/ sel_appendBezierPath_ = sel_registerName("appendBezierPath:");
+public static final int /*long*/ sel_appendBezierPathWithArcWithCenter_radius_startAngle_endAngle_ = sel_registerName("appendBezierPathWithArcWithCenter:radius:startAngle:endAngle:");
+public static final int /*long*/ sel_appendBezierPathWithArcWithCenter_radius_startAngle_endAngle_clockwise_ = sel_registerName("appendBezierPathWithArcWithCenter:radius:startAngle:endAngle:clockwise:");
+public static final int /*long*/ sel_appendBezierPathWithGlyphs_count_inFont_ = sel_registerName("appendBezierPathWithGlyphs:count:inFont:");
+public static final int /*long*/ sel_appendBezierPathWithOvalInRect_ = sel_registerName("appendBezierPathWithOvalInRect:");
+public static final int /*long*/ sel_appendBezierPathWithRect_ = sel_registerName("appendBezierPathWithRect:");
+public static final int /*long*/ sel_appendBezierPathWithRoundedRect_xRadius_yRadius_ = sel_registerName("appendBezierPathWithRoundedRect:xRadius:yRadius:");
+public static final int /*long*/ sel_appendString_ = sel_registerName("appendString:");
+public static final int /*long*/ sel_applicationDidBecomeActive_ = sel_registerName("applicationDidBecomeActive:");
+public static final int /*long*/ sel_applicationDidFinishLaunching_ = sel_registerName("applicationDidFinishLaunching:");
+public static final int /*long*/ sel_applicationDidResignActive_ = sel_registerName("applicationDidResignActive:");
+public static final int /*long*/ sel_applicationShouldTerminate_ = sel_registerName("applicationShouldTerminate:");
+public static final int /*long*/ sel_applicationWillFinishLaunching_ = sel_registerName("applicationWillFinishLaunching:");
+public static final int /*long*/ sel_applicationWillTerminate_ = sel_registerName("applicationWillTerminate:");
+public static final int /*long*/ sel_archivedDataWithRootObject_ = sel_registerName("archivedDataWithRootObject:");
+public static final int /*long*/ sel_areCursorRectsEnabled = sel_registerName("areCursorRectsEnabled");
+public static final int /*long*/ sel_array = sel_registerName("array");
+public static final int /*long*/ sel_arrayWithCapacity_ = sel_registerName("arrayWithCapacity:");
+public static final int /*long*/ sel_arrayWithObject_ = sel_registerName("arrayWithObject:");
+public static final int /*long*/ sel_arrowCursor = sel_registerName("arrowCursor");
+public static final int /*long*/ sel_ascender = sel_registerName("ascender");
+public static final int /*long*/ sel_attributedStringValue = sel_registerName("attributedStringValue");
+public static final int /*long*/ sel_attributedStringWithAttachment_ = sel_registerName("attributedStringWithAttachment:");
+public static final int /*long*/ sel_attributedSubstringFromRange_ = sel_registerName("attributedSubstringFromRange:");
+public static final int /*long*/ sel_attributedTitle = sel_registerName("attributedTitle");
+public static final int /*long*/ sel_attributesAtIndex_longestEffectiveRange_inRange_ = sel_registerName("attributesAtIndex:longestEffectiveRange:inRange:");
+public static final int /*long*/ sel_autorelease = sel_registerName("autorelease");
+public static final int /*long*/ sel_availableFontFamilies = sel_registerName("availableFontFamilies");
+public static final int /*long*/ sel_availableFonts = sel_registerName("availableFonts");
+public static final int /*long*/ sel_availableMembersOfFontFamily_ = sel_registerName("availableMembersOfFontFamily:");
+public static final int /*long*/ sel_availableTypeFromArray_ = sel_registerName("availableTypeFromArray:");
+public static final int /*long*/ sel_baselineOffsetInLayoutManager_glyphIndex_ = sel_registerName("baselineOffsetInLayoutManager:glyphIndex:");
+public static final int /*long*/ sel_becomeFirstResponder = sel_registerName("becomeFirstResponder");
+public static final int /*long*/ sel_becomeKeyWindow = sel_registerName("becomeKeyWindow");
+public static final int /*long*/ sel_beginDocument = sel_registerName("beginDocument");
+public static final int /*long*/ sel_beginEditing = sel_registerName("beginEditing");
+public static final int /*long*/ sel_beginPageInRect_atPlacement_ = sel_registerName("beginPageInRect:atPlacement:");
+public static final int /*long*/ sel_beginSheet_modalForWindow_modalDelegate_didEndSelector_contextInfo_ = sel_registerName("beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:");
+public static final int /*long*/ sel_beginSheetModalForWindow_modalDelegate_didEndSelector_contextInfo_ = sel_registerName("beginSheetModalForWindow:modalDelegate:didEndSelector:contextInfo:");
+public static final int /*long*/ sel_beginSheetWithPrintInfo_modalForWindow_delegate_didEndSelector_contextInfo_ = sel_registerName("beginSheetWithPrintInfo:modalForWindow:delegate:didEndSelector:contextInfo:");
+public static final int /*long*/ sel_bestRepresentationForDevice_ = sel_registerName("bestRepresentationForDevice:");
+public static final int /*long*/ sel_bezierPath = sel_registerName("bezierPath");
+public static final int /*long*/ sel_bezierPathByFlatteningPath = sel_registerName("bezierPathByFlatteningPath");
+public static final int /*long*/ sel_bezierPathWithRect_ = sel_registerName("bezierPathWithRect:");
+public static final int /*long*/ sel_bitmapData = sel_registerName("bitmapData");
+public static final int /*long*/ sel_bitmapFormat = sel_registerName("bitmapFormat");
+public static final int /*long*/ sel_bitsPerPixel = sel_registerName("bitsPerPixel");
+public static final int /*long*/ sel_bitsPerSample = sel_registerName("bitsPerSample");
+public static final int /*long*/ sel_blackColor = sel_registerName("blackColor");
+public static final int /*long*/ sel_blueComponent = sel_registerName("blueComponent");
+public static final int /*long*/ sel_boolValue = sel_registerName("boolValue");
+public static final int /*long*/ sel_borderWidth = sel_registerName("borderWidth");
+public static final int /*long*/ sel_boundingRectForGlyphRange_inTextContainer_ = sel_registerName("boundingRectForGlyphRange:inTextContainer:");
+public static final int /*long*/ sel_bounds = sel_registerName("bounds");
+public static final int /*long*/ sel_bundleIdentifier = sel_registerName("bundleIdentifier");
+public static final int /*long*/ sel_bundlePath = sel_registerName("bundlePath");
+public static final int /*long*/ sel_bundleWithIdentifier_ = sel_registerName("bundleWithIdentifier:");
+public static final int /*long*/ sel_bundleWithPath_ = sel_registerName("bundleWithPath:");
+public static final int /*long*/ sel_button = sel_registerName("button");
+public static final int /*long*/ sel_buttonNumber = sel_registerName("buttonNumber");
+public static final int /*long*/ sel_bytes = sel_registerName("bytes");
+public static final int /*long*/ sel_bytesPerPlane = sel_registerName("bytesPerPlane");
+public static final int /*long*/ sel_bytesPerRow = sel_registerName("bytesPerRow");
+public static final int /*long*/ sel_calendarDate = sel_registerName("calendarDate");
+public static final int /*long*/ sel_canBecomeKeyView = sel_registerName("canBecomeKeyView");
+public static final int /*long*/ sel_canBecomeKeyWindow = sel_registerName("canBecomeKeyWindow");
+public static final int /*long*/ sel_canDragRowsWithIndexes_atPoint_ = sel_registerName("canDragRowsWithIndexes:atPoint:");
+public static final int /*long*/ sel_canGoBack = sel_registerName("canGoBack");
+public static final int /*long*/ sel_canGoForward = sel_registerName("canGoForward");
+public static final int /*long*/ sel_canShowMIMEType_ = sel_registerName("canShowMIMEType:");
+public static final int /*long*/ sel_cancel = sel_registerName("cancel");
+public static final int /*long*/ sel_cancelAuthenticationChallenge_ = sel_registerName("cancelAuthenticationChallenge:");
+public static final int /*long*/ sel_cancelButtonCell = sel_registerName("cancelButtonCell");
+public static final int /*long*/ sel_cancelTracking = sel_registerName("cancelTracking");
+public static final int /*long*/ sel_cascadeTopLeftFromPoint_ = sel_registerName("cascadeTopLeftFromPoint:");
+public static final int /*long*/ sel_cell = sel_registerName("cell");
+public static final int /*long*/ sel_cellClass = sel_registerName("cellClass");
+public static final int /*long*/ sel_cellSize = sel_registerName("cellSize");
+public static final int /*long*/ sel_cellSizeForBounds_ = sel_registerName("cellSizeForBounds:");
+public static final int /*long*/ sel_changeColor_ = sel_registerName("changeColor:");
+public static final int /*long*/ sel_changeFont_ = sel_registerName("changeFont:");
+public static final int /*long*/ sel_charCode = sel_registerName("charCode");
+public static final int /*long*/ sel_characterAtIndex_ = sel_registerName("characterAtIndex:");
+public static final int /*long*/ sel_characterIndexForGlyphAtIndex_ = sel_registerName("characterIndexForGlyphAtIndex:");
+public static final int /*long*/ sel_characterIndexForInsertionAtPoint_ = sel_registerName("characterIndexForInsertionAtPoint:");
+public static final int /*long*/ sel_characterIndexForPoint_ = sel_registerName("characterIndexForPoint:");
+public static final int /*long*/ sel_characterIsMember_ = sel_registerName("characterIsMember:");
+public static final int /*long*/ sel_characters = sel_registerName("characters");
+public static final int /*long*/ sel_charactersIgnoringModifiers = sel_registerName("charactersIgnoringModifiers");
+public static final int /*long*/ sel_chooseFilename_ = sel_registerName("chooseFilename:");
+public static final int /*long*/ sel_className = sel_registerName("className");
+public static final int /*long*/ sel_cleanUpOperation = sel_registerName("cleanUpOperation");
+public static final int /*long*/ sel_clearColor = sel_registerName("clearColor");
+public static final int /*long*/ sel_clearCurrentContext = sel_registerName("clearCurrentContext");
+public static final int /*long*/ sel_clearDrawable = sel_registerName("clearDrawable");
+public static final int /*long*/ sel_clickCount = sel_registerName("clickCount");
+public static final int /*long*/ sel_clickedColumn = sel_registerName("clickedColumn");
+public static final int /*long*/ sel_clickedRow = sel_registerName("clickedRow");
+public static final int /*long*/ sel_clientX = sel_registerName("clientX");
+public static final int /*long*/ sel_clientY = sel_registerName("clientY");
+public static final int /*long*/ sel_close = sel_registerName("close");
+public static final int /*long*/ sel_closePath = sel_registerName("closePath");
+public static final int /*long*/ sel_code = sel_registerName("code");
+public static final int /*long*/ sel_collapseItem_ = sel_registerName("collapseItem:");
+public static final int /*long*/ sel_collapseItem_collapseChildren_ = sel_registerName("collapseItem:collapseChildren:");
+public static final int /*long*/ sel_color = sel_registerName("color");
+public static final int /*long*/ sel_colorAtX_y_ = sel_registerName("colorAtX:y:");
+public static final int /*long*/ sel_colorSpaceName = sel_registerName("colorSpaceName");
+public static final int /*long*/ sel_colorUsingColorSpace_ = sel_registerName("colorUsingColorSpace:");
+public static final int /*long*/ sel_colorUsingColorSpaceName_ = sel_registerName("colorUsingColorSpaceName:");
+public static final int /*long*/ sel_colorWithDeviceRed_green_blue_alpha_ = sel_registerName("colorWithDeviceRed:green:blue:alpha:");
+public static final int /*long*/ sel_colorWithPatternImage_ = sel_registerName("colorWithPatternImage:");
+public static final int /*long*/ sel_columnAtPoint_ = sel_registerName("columnAtPoint:");
+public static final int /*long*/ sel_columnIndexesInRect_ = sel_registerName("columnIndexesInRect:");
+public static final int /*long*/ sel_columnWithIdentifier_ = sel_registerName("columnWithIdentifier:");
+public static final int /*long*/ sel_comboBoxSelectionDidChange_ = sel_registerName("comboBoxSelectionDidChange:");
+public static final int /*long*/ sel_comboBoxWillDismiss_ = sel_registerName("comboBoxWillDismiss:");
+public static final int /*long*/ sel_compare_ = sel_registerName("compare:");
+public static final int /*long*/ sel_concat = sel_registerName("concat");
+public static final int /*long*/ sel_conformsToProtocol_ = sel_registerName("conformsToProtocol:");
+public static final int /*long*/ sel_containerSize = sel_registerName("containerSize");
+public static final int /*long*/ sel_containsIndex_ = sel_registerName("containsIndex:");
+public static final int /*long*/ sel_containsObject_ = sel_registerName("containsObject:");
+public static final int /*long*/ sel_containsPoint_ = sel_registerName("containsPoint:");
+public static final int /*long*/ sel_contentRect = sel_registerName("contentRect");
+public static final int /*long*/ sel_contentRectForFrameRect_ = sel_registerName("contentRectForFrameRect:");
+public static final int /*long*/ sel_contentSize = sel_registerName("contentSize");
+public static final int /*long*/ sel_contentSizeForFrameSize_hasHorizontalScroller_hasVerticalScroller_borderType_ = sel_registerName("contentSizeForFrameSize:hasHorizontalScroller:hasVerticalScroller:borderType:");
+public static final int /*long*/ sel_contentView = sel_registerName("contentView");
+public static final int /*long*/ sel_contentViewMargins = sel_registerName("contentViewMargins");
+public static final int /*long*/ sel_context = sel_registerName("context");
+public static final int /*long*/ sel_controlBackgroundColor = sel_registerName("controlBackgroundColor");
+public static final int /*long*/ sel_controlContentFontOfSize_ = sel_registerName("controlContentFontOfSize:");
+public static final int /*long*/ sel_controlDarkShadowColor = sel_registerName("controlDarkShadowColor");
+public static final int /*long*/ sel_controlHighlightColor = sel_registerName("controlHighlightColor");
+public static final int /*long*/ sel_controlLightHighlightColor = sel_registerName("controlLightHighlightColor");
+public static final int /*long*/ sel_controlPointBounds = sel_registerName("controlPointBounds");
+public static final int /*long*/ sel_controlShadowColor = sel_registerName("controlShadowColor");
+public static final int /*long*/ sel_controlSize = sel_registerName("controlSize");
+public static final int /*long*/ sel_controlTextColor = sel_registerName("controlTextColor");
+public static final int /*long*/ sel_convertBaseToScreen_ = sel_registerName("convertBaseToScreen:");
+public static final int /*long*/ sel_convertFont_toHaveTrait_ = sel_registerName("convertFont:toHaveTrait:");
+public static final int /*long*/ sel_convertPoint_fromView_ = sel_registerName("convertPoint:fromView:");
+public static final int /*long*/ sel_convertPoint_toView_ = sel_registerName("convertPoint:toView:");
+public static final int /*long*/ sel_convertPointFromBase_ = sel_registerName("convertPointFromBase:");
+public static final int /*long*/ sel_convertPointToBase_ = sel_registerName("convertPointToBase:");
+public static final int /*long*/ sel_convertRect_fromView_ = sel_registerName("convertRect:fromView:");
+public static final int /*long*/ sel_convertRect_toView_ = sel_registerName("convertRect:toView:");
+public static final int /*long*/ sel_convertRectFromBase_ = sel_registerName("convertRectFromBase:");
+public static final int /*long*/ sel_convertRectToBase_ = sel_registerName("convertRectToBase:");
+public static final int /*long*/ sel_convertScreenToBase_ = sel_registerName("convertScreenToBase:");
+public static final int /*long*/ sel_convertSize_fromView_ = sel_registerName("convertSize:fromView:");
+public static final int /*long*/ sel_convertSize_toView_ = sel_registerName("convertSize:toView:");
+public static final int /*long*/ sel_convertSizeFromBase_ = sel_registerName("convertSizeFromBase:");
+public static final int /*long*/ sel_convertSizeToBase_ = sel_registerName("convertSizeToBase:");
+public static final int /*long*/ sel_cookies = sel_registerName("cookies");
+public static final int /*long*/ sel_cookiesForURL_ = sel_registerName("cookiesForURL:");
+public static final int /*long*/ sel_cookiesWithResponseHeaderFields_forURL_ = sel_registerName("cookiesWithResponseHeaderFields:forURL:");
+public static final int /*long*/ sel_copiesOnScroll = sel_registerName("copiesOnScroll");
+public static final int /*long*/ sel_copy = sel_registerName("copy");
+public static final int /*long*/ sel_copy_ = sel_registerName("copy:");
+public static final int /*long*/ sel_count = sel_registerName("count");
+public static final int /*long*/ sel_createContext = sel_registerName("createContext");
+public static final int /*long*/ sel_createFileAtPath_contents_attributes_ = sel_registerName("createFileAtPath:contents:attributes:");
+public static final int /*long*/ sel_credentialWithUser_password_persistence_ = sel_registerName("credentialWithUser:password:persistence:");
+public static final int /*long*/ sel_crosshairCursor = sel_registerName("crosshairCursor");
+public static final int /*long*/ sel_ctrlKey = sel_registerName("ctrlKey");
+public static final int /*long*/ sel_currentContext = sel_registerName("currentContext");
+public static final int /*long*/ sel_currentCursor = sel_registerName("currentCursor");
+public static final int /*long*/ sel_currentEditor = sel_registerName("currentEditor");
+public static final int /*long*/ sel_currentEvent = sel_registerName("currentEvent");
+public static final int /*long*/ sel_currentInputManager = sel_registerName("currentInputManager");
+public static final int /*long*/ sel_currentPoint = sel_registerName("currentPoint");
+public static final int /*long*/ sel_currentRunLoop = sel_registerName("currentRunLoop");
+public static final int /*long*/ sel_currentThread = sel_registerName("currentThread");
+public static final int /*long*/ sel_cursorUpdate_ = sel_registerName("cursorUpdate:");
+public static final int /*long*/ sel_curveToPoint_controlPoint1_controlPoint2_ = sel_registerName("curveToPoint:controlPoint1:controlPoint2:");
+public static final int /*long*/ sel_cut_ = sel_registerName("cut:");
+public static final int /*long*/ sel_dataCell = sel_registerName("dataCell");
+public static final int /*long*/ sel_dataForType_ = sel_registerName("dataForType:");
+public static final int /*long*/ sel_dataSource = sel_registerName("dataSource");
+public static final int /*long*/ sel_dataWithBytes_length_ = sel_registerName("dataWithBytes:length:");
+public static final int /*long*/ sel_dateValue = sel_registerName("dateValue");
+public static final int /*long*/ sel_dateWithCalendarFormat_timeZone_ = sel_registerName("dateWithCalendarFormat:timeZone:");
+public static final int /*long*/ sel_dateWithTimeIntervalSinceNow_ = sel_registerName("dateWithTimeIntervalSinceNow:");
+public static final int /*long*/ sel_dateWithYear_month_day_hour_minute_second_timeZone_ = sel_registerName("dateWithYear:month:day:hour:minute:second:timeZone:");
+public static final int /*long*/ sel_dayOfMonth = sel_registerName("dayOfMonth");
+public static final int /*long*/ sel_decimalDigitCharacterSet = sel_registerName("decimalDigitCharacterSet");
+public static final int /*long*/ sel_decimalSeparator = sel_registerName("decimalSeparator");
+public static final int /*long*/ sel_declareTypes_owner_ = sel_registerName("declareTypes:owner:");
+public static final int /*long*/ sel_defaultBaselineOffsetForFont_ = sel_registerName("defaultBaselineOffsetForFont:");
+public static final int /*long*/ sel_defaultButtonCell = sel_registerName("defaultButtonCell");
+public static final int /*long*/ sel_defaultCenter = sel_registerName("defaultCenter");
+public static final int /*long*/ sel_defaultFlatness = sel_registerName("defaultFlatness");
+public static final int /*long*/ sel_defaultLineHeightForFont_ = sel_registerName("defaultLineHeightForFont:");
+public static final int /*long*/ sel_defaultManager = sel_registerName("defaultManager");
+public static final int /*long*/ sel_defaultParagraphStyle = sel_registerName("defaultParagraphStyle");
+public static final int /*long*/ sel_defaultPrinter = sel_registerName("defaultPrinter");
+public static final int /*long*/ sel_defaultTimeZone = sel_registerName("defaultTimeZone");
+public static final int /*long*/ sel_delegate = sel_registerName("delegate");
+public static final int /*long*/ sel_deleteCookie_ = sel_registerName("deleteCookie:");
+public static final int /*long*/ sel_deliverResult = sel_registerName("deliverResult");
+public static final int /*long*/ sel_deltaX = sel_registerName("deltaX");
+public static final int /*long*/ sel_deltaY = sel_registerName("deltaY");
+public static final int /*long*/ sel_deminiaturize_ = sel_registerName("deminiaturize:");
+public static final int /*long*/ sel_depth = sel_registerName("depth");
+public static final int /*long*/ sel_descender = sel_registerName("descender");
+public static final int /*long*/ sel_description = sel_registerName("description");
+public static final int /*long*/ sel_deselectAll_ = sel_registerName("deselectAll:");
+public static final int /*long*/ sel_deselectItemAtIndex_ = sel_registerName("deselectItemAtIndex:");
+public static final int /*long*/ sel_deselectRow_ = sel_registerName("deselectRow:");
+public static final int /*long*/ sel_destroyContext = sel_registerName("destroyContext");
+public static final int /*long*/ sel_detail = sel_registerName("detail");
+public static final int /*long*/ sel_deviceDescription = sel_registerName("deviceDescription");
+public static final int /*long*/ sel_deviceRGBColorSpace = sel_registerName("deviceRGBColorSpace");
+public static final int /*long*/ sel_dictionary = sel_registerName("dictionary");
+public static final int /*long*/ sel_dictionaryWithCapacity_ = sel_registerName("dictionaryWithCapacity:");
+public static final int /*long*/ sel_dictionaryWithObject_forKey_ = sel_registerName("dictionaryWithObject:forKey:");
+public static final int /*long*/ sel_disableCursorRects = sel_registerName("disableCursorRects");
+public static final int /*long*/ sel_disabledControlTextColor = sel_registerName("disabledControlTextColor");
+public static final int /*long*/ sel_discardCursorRects = sel_registerName("discardCursorRects");
+public static final int /*long*/ sel_display = sel_registerName("display");
+public static final int /*long*/ sel_displayIfNeeded = sel_registerName("displayIfNeeded");
+public static final int /*long*/ sel_displayRectIgnoringOpacity_inContext_ = sel_registerName("displayRectIgnoringOpacity:inContext:");
+public static final int /*long*/ sel_distantFuture = sel_registerName("distantFuture");
+public static final int /*long*/ sel_doCommandBySelector_ = sel_registerName("doCommandBySelector:");
+public static final int /*long*/ sel_documentCursor = sel_registerName("documentCursor");
+public static final int /*long*/ sel_documentSource = sel_registerName("documentSource");
+public static final int /*long*/ sel_documentView = sel_registerName("documentView");
+public static final int /*long*/ sel_documentViewShouldHandlePrint = sel_registerName("documentViewShouldHandlePrint");
+public static final int /*long*/ sel_documentVisibleRect = sel_registerName("documentVisibleRect");
+public static final int /*long*/ sel_doubleClickAtIndex_ = sel_registerName("doubleClickAtIndex:");
+public static final int /*long*/ sel_doubleValue = sel_registerName("doubleValue");
+public static final int /*long*/ sel_download = sel_registerName("download");
+public static final int /*long*/ sel_download_decideDestinationWithSuggestedFilename_ = sel_registerName("download:decideDestinationWithSuggestedFilename:");
+public static final int /*long*/ sel_dragImage_at_offset_event_pasteboard_source_slideBack_ = sel_registerName("dragImage:at:offset:event:pasteboard:source:slideBack:");
+public static final int /*long*/ sel_dragImageForRowsWithIndexes_tableColumns_event_offset_ = sel_registerName("dragImageForRowsWithIndexes:tableColumns:event:offset:");
+public static final int /*long*/ sel_dragSelectionWithEvent_offset_slideBack_ = sel_registerName("dragSelectionWithEvent:offset:slideBack:");
+public static final int /*long*/ sel_draggedImage_beganAt_ = sel_registerName("draggedImage:beganAt:");
+public static final int /*long*/ sel_draggedImage_endedAt_operation_ = sel_registerName("draggedImage:endedAt:operation:");
+public static final int /*long*/ sel_draggingDestinationWindow = sel_registerName("draggingDestinationWindow");
+public static final int /*long*/ sel_draggingEnded_ = sel_registerName("draggingEnded:");
+public static final int /*long*/ sel_draggingEntered_ = sel_registerName("draggingEntered:");
+public static final int /*long*/ sel_draggingExited_ = sel_registerName("draggingExited:");
+public static final int /*long*/ sel_draggingLocation = sel_registerName("draggingLocation");
+public static final int /*long*/ sel_draggingPasteboard = sel_registerName("draggingPasteboard");
+public static final int /*long*/ sel_draggingSourceOperationMask = sel_registerName("draggingSourceOperationMask");
+public static final int /*long*/ sel_draggingSourceOperationMaskForLocal_ = sel_registerName("draggingSourceOperationMaskForLocal:");
+public static final int /*long*/ sel_draggingUpdated_ = sel_registerName("draggingUpdated:");
+public static final int /*long*/ sel_drawAtPoint_ = sel_registerName("drawAtPoint:");
+public static final int /*long*/ sel_drawAtPoint_fromRect_operation_fraction_ = sel_registerName("drawAtPoint:fromRect:operation:fraction:");
+public static final int /*long*/ sel_drawBackgroundForGlyphRange_atPoint_ = sel_registerName("drawBackgroundForGlyphRange:atPoint:");
+public static final int /*long*/ sel_drawFromPoint_toPoint_options_ = sel_registerName("drawFromPoint:toPoint:options:");
+public static final int /*long*/ sel_drawGlyphsForGlyphRange_atPoint_ = sel_registerName("drawGlyphsForGlyphRange:atPoint:");
+public static final int /*long*/ sel_drawImage_withFrame_inView_ = sel_registerName("drawImage:withFrame:inView:");
+public static final int /*long*/ sel_drawInRect_ = sel_registerName("drawInRect:");
+public static final int /*long*/ sel_drawInRect_angle_ = sel_registerName("drawInRect:angle:");
+public static final int /*long*/ sel_drawInRect_fromRect_operation_fraction_ = sel_registerName("drawInRect:fromRect:operation:fraction:");
+public static final int /*long*/ sel_drawInteriorWithFrame_inView_ = sel_registerName("drawInteriorWithFrame:inView:");
+public static final int /*long*/ sel_drawRect_ = sel_registerName("drawRect:");
+public static final int /*long*/ sel_drawSortIndicatorWithFrame_inView_ascending_priority_ = sel_registerName("drawSortIndicatorWithFrame:inView:ascending:priority:");
+public static final int /*long*/ sel_drawStatusBarBackgroundInRect_withHighlight_ = sel_registerName("drawStatusBarBackgroundInRect:withHighlight:");
+public static final int /*long*/ sel_drawWithExpansionFrame_inView_ = sel_registerName("drawWithExpansionFrame:inView:");
+public static final int /*long*/ sel_drawingRectForBounds_ = sel_registerName("drawingRectForBounds:");
+public static final int /*long*/ sel_elementAtIndex_associatedPoints_ = sel_registerName("elementAtIndex:associatedPoints:");
+public static final int /*long*/ sel_elementCount = sel_registerName("elementCount");
+public static final int /*long*/ sel_enableCursorRects = sel_registerName("enableCursorRects");
+public static final int /*long*/ sel_enableFreedObjectCheck_ = sel_registerName("enableFreedObjectCheck:");
+public static final int /*long*/ sel_endDocument = sel_registerName("endDocument");
+public static final int /*long*/ sel_endEditing = sel_registerName("endEditing");
+public static final int /*long*/ sel_endPage = sel_registerName("endPage");
+public static final int /*long*/ sel_endSheet_returnCode_ = sel_registerName("endSheet:returnCode:");
+public static final int /*long*/ sel_enterExitEventWithType_location_modifierFlags_timestamp_windowNumber_context_eventNumber_trackingNumber_userData_ = sel_registerName("enterExitEventWithType:location:modifierFlags:timestamp:windowNumber:context:eventNumber:trackingNumber:userData:");
+public static final int /*long*/ sel_enumeratorAtPath_ = sel_registerName("enumeratorAtPath:");
+public static final int /*long*/ sel_expandItem_ = sel_registerName("expandItem:");
+public static final int /*long*/ sel_expandItem_expandChildren_ = sel_registerName("expandItem:expandChildren:");
+public static final int /*long*/ sel_expansionFrameWithFrame_inView_ = sel_registerName("expansionFrameWithFrame:inView:");
+public static final int /*long*/ sel_familyName = sel_registerName("familyName");
+public static final int /*long*/ sel_fieldEditor_forObject_ = sel_registerName("fieldEditor:forObject:");
+public static final int /*long*/ sel_fileExistsAtPath_isDirectory_ = sel_registerName("fileExistsAtPath:isDirectory:");
+public static final int /*long*/ sel_fileSystemRepresentation = sel_registerName("fileSystemRepresentation");
+public static final int /*long*/ sel_fileURLWithPath_ = sel_registerName("fileURLWithPath:");
+public static final int /*long*/ sel_filename = sel_registerName("filename");
+public static final int /*long*/ sel_filenames = sel_registerName("filenames");
+public static final int /*long*/ sel_fill = sel_registerName("fill");
+public static final int /*long*/ sel_fillRect_ = sel_registerName("fillRect:");
+public static final int /*long*/ sel_finishLaunching = sel_registerName("finishLaunching");
+public static final int /*long*/ sel_firstIndex = sel_registerName("firstIndex");
+public static final int /*long*/ sel_firstRectForCharacterRange_ = sel_registerName("firstRectForCharacterRange:");
+public static final int /*long*/ sel_firstResponder = sel_registerName("firstResponder");
+public static final int /*long*/ sel_flagsChanged_ = sel_registerName("flagsChanged:");
+public static final int /*long*/ sel_floatValue = sel_registerName("floatValue");
+public static final int /*long*/ sel_flushBuffer = sel_registerName("flushBuffer");
+public static final int /*long*/ sel_flushGraphics = sel_registerName("flushGraphics");
+public static final int /*long*/ sel_font = sel_registerName("font");
+public static final int /*long*/ sel_fontName = sel_registerName("fontName");
+public static final int /*long*/ sel_fontWithFamily_traits_weight_size_ = sel_registerName("fontWithFamily:traits:weight:size:");
+public static final int /*long*/ sel_fontWithName_size_ = sel_registerName("fontWithName:size:");
+public static final int /*long*/ sel_frame = sel_registerName("frame");
+public static final int /*long*/ sel_frameOfCellAtColumn_row_ = sel_registerName("frameOfCellAtColumn:row:");
+public static final int /*long*/ sel_frameOfOutlineCellAtRow_ = sel_registerName("frameOfOutlineCellAtRow:");
+public static final int /*long*/ sel_frameRectForContentRect_ = sel_registerName("frameRectForContentRect:");
+public static final int /*long*/ sel_frameSizeForContentSize_hasHorizontalScroller_hasVerticalScroller_borderType_ = sel_registerName("frameSizeForContentSize:hasHorizontalScroller:hasVerticalScroller:borderType:");
+public static final int /*long*/ sel_fullPathForApplication_ = sel_registerName("fullPathForApplication:");
+public static final int /*long*/ sel_generalPasteboard = sel_registerName("generalPasteboard");
+public static final int /*long*/ sel_getBitmapDataPlanes_ = sel_registerName("getBitmapDataPlanes:");
+public static final int /*long*/ sel_getBytes_ = sel_registerName("getBytes:");
+public static final int /*long*/ sel_getBytes_length_ = sel_registerName("getBytes:length:");
+public static final int /*long*/ sel_getCharacters_ = sel_registerName("getCharacters:");
+public static final int /*long*/ sel_getCharacters_range_ = sel_registerName("getCharacters:range:");
+public static final int /*long*/ sel_getComponents_ = sel_registerName("getComponents:");
+public static final int /*long*/ sel_getGlyphs_range_ = sel_registerName("getGlyphs:range:");
+public static final int /*long*/ sel_getGlyphsInRange_glyphs_characterIndexes_glyphInscriptions_elasticBits_bidiLevels_ = sel_registerName("getGlyphsInRange:glyphs:characterIndexes:glyphInscriptions:elasticBits:bidiLevels:");
+public static final int /*long*/ sel_getIndexes_maxCount_inIndexRange_ = sel_registerName("getIndexes:maxCount:inIndexRange:");
+public static final int /*long*/ sel_getInfoForFile_application_type_ = sel_registerName("getInfoForFile:application:type:");
+public static final int /*long*/ sel_getValues_forAttribute_forVirtualScreen_ = sel_registerName("getValues:forAttribute:forVirtualScreen:");
+public static final int /*long*/ sel_glyphIndexForCharacterAtIndex_ = sel_registerName("glyphIndexForCharacterAtIndex:");
+public static final int /*long*/ sel_glyphIndexForPoint_inTextContainer_fractionOfDistanceThroughGlyph_ = sel_registerName("glyphIndexForPoint:inTextContainer:fractionOfDistanceThroughGlyph:");
+public static final int /*long*/ sel_glyphRangeForCharacterRange_actualCharacterRange_ = sel_registerName("glyphRangeForCharacterRange:actualCharacterRange:");
+public static final int /*long*/ sel_glyphRangeForTextContainer_ = sel_registerName("glyphRangeForTextContainer:");
+public static final int /*long*/ sel_goBack = sel_registerName("goBack");
+public static final int /*long*/ sel_goForward = sel_registerName("goForward");
+public static final int /*long*/ sel_graphicsContext = sel_registerName("graphicsContext");
+public static final int /*long*/ sel_graphicsContextWithBitmapImageRep_ = sel_registerName("graphicsContextWithBitmapImageRep:");
+public static final int /*long*/ sel_graphicsContextWithGraphicsPort_flipped_ = sel_registerName("graphicsContextWithGraphicsPort:flipped:");
+public static final int /*long*/ sel_graphicsContextWithWindow_ = sel_registerName("graphicsContextWithWindow:");
+public static final int /*long*/ sel_graphicsPort = sel_registerName("graphicsPort");
+public static final int /*long*/ sel_greenComponent = sel_registerName("greenComponent");
+public static final int /*long*/ sel_handleEvent_ = sel_registerName("handleEvent:");
+public static final int /*long*/ sel_handleMouseEvent_ = sel_registerName("handleMouseEvent:");
+public static final int /*long*/ sel_hasAlpha = sel_registerName("hasAlpha");
+public static final int /*long*/ sel_hasMarkedText = sel_registerName("hasMarkedText");
+public static final int /*long*/ sel_hasPassword = sel_registerName("hasPassword");
+public static final int /*long*/ sel_hasShadow = sel_registerName("hasShadow");
+public static final int /*long*/ sel_headerCell = sel_registerName("headerCell");
+public static final int /*long*/ sel_headerRectOfColumn_ = sel_registerName("headerRectOfColumn:");
+public static final int /*long*/ sel_headerView = sel_registerName("headerView");
+public static final int /*long*/ sel_helpRequested_ = sel_registerName("helpRequested:");
+public static final int /*long*/ sel_hide_ = sel_registerName("hide:");
+public static final int /*long*/ sel_hideOtherApplications_ = sel_registerName("hideOtherApplications:");
+public static final int /*long*/ sel_highlightColorInView_ = sel_registerName("highlightColorInView:");
+public static final int /*long*/ sel_highlightColorWithFrame_inView_ = sel_registerName("highlightColorWithFrame:inView:");
+public static final int /*long*/ sel_highlightSelectionInClipRect_ = sel_registerName("highlightSelectionInClipRect:");
+public static final int /*long*/ sel_hitPart = sel_registerName("hitPart");
+public static final int /*long*/ sel_hitTest_ = sel_registerName("hitTest:");
+public static final int /*long*/ sel_hitTestForEvent_inRect_ofView_ = sel_registerName("hitTestForEvent:inRect:ofView:");
+public static final int /*long*/ sel_host = sel_registerName("host");
+public static final int /*long*/ sel_hourOfDay = sel_registerName("hourOfDay");
+public static final int /*long*/ sel_iconForFile_ = sel_registerName("iconForFile:");
+public static final int /*long*/ sel_iconForFileType_ = sel_registerName("iconForFileType:");
+public static final int /*long*/ sel_ignore = sel_registerName("ignore");
+public static final int /*long*/ sel_ignoreModifierKeysWhileDragging = sel_registerName("ignoreModifierKeysWhileDragging");
+public static final int /*long*/ sel_image = sel_registerName("image");
+public static final int /*long*/ sel_imageInterpolation = sel_registerName("imageInterpolation");
+public static final int /*long*/ sel_imageNamed_ = sel_registerName("imageNamed:");
+public static final int /*long*/ sel_imageRectForBounds_ = sel_registerName("imageRectForBounds:");
+public static final int /*long*/ sel_imageRepWithData_ = sel_registerName("imageRepWithData:");
+public static final int /*long*/ sel_imageablePageBounds = sel_registerName("imageablePageBounds");
+public static final int /*long*/ sel_increment = sel_registerName("increment");
+public static final int /*long*/ sel_indentationPerLevel = sel_registerName("indentationPerLevel");
+public static final int /*long*/ sel_indexOfItemWithTarget_andAction_ = sel_registerName("indexOfItemWithTarget:andAction:");
+public static final int /*long*/ sel_indexOfObjectIdenticalTo_ = sel_registerName("indexOfObjectIdenticalTo:");
+public static final int /*long*/ sel_indexOfSelectedItem = sel_registerName("indexOfSelectedItem");
+public static final int /*long*/ sel_infoDictionary = sel_registerName("infoDictionary");
+public static final int /*long*/ sel_init = sel_registerName("init");
+public static final int /*long*/ sel_initByReferencingFile_ = sel_registerName("initByReferencingFile:");
+public static final int /*long*/ sel_initListDescriptor = sel_registerName("initListDescriptor");
+public static final int /*long*/ sel_initWithAttributes_ = sel_registerName("initWithAttributes:");
+public static final int /*long*/ sel_initWithBitmapDataPlanes_pixelsWide_pixelsHigh_bitsPerSample_samplesPerPixel_hasAlpha_isPlanar_colorSpaceName_bitmapFormat_bytesPerRow_bitsPerPixel_ = sel_registerName("initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bitmapFormat:bytesPerRow:bitsPerPixel:");
+public static final int /*long*/ sel_initWithBitmapDataPlanes_pixelsWide_pixelsHigh_bitsPerSample_samplesPerPixel_hasAlpha_isPlanar_colorSpaceName_bytesPerRow_bitsPerPixel_ = sel_registerName("initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bytesPerRow:bitsPerPixel:");
+public static final int /*long*/ sel_initWithCapacity_ = sel_registerName("initWithCapacity:");
+public static final int /*long*/ sel_initWithCharacters_length_ = sel_registerName("initWithCharacters:length:");
+public static final int /*long*/ sel_initWithContainerSize_ = sel_registerName("initWithContainerSize:");
+public static final int /*long*/ sel_initWithContentRect_styleMask_backing_defer_ = sel_registerName("initWithContentRect:styleMask:backing:defer:");
+public static final int /*long*/ sel_initWithContentRect_styleMask_backing_defer_screen_ = sel_registerName("initWithContentRect:styleMask:backing:defer:screen:");
+public static final int /*long*/ sel_initWithContentsOfFile_ = sel_registerName("initWithContentsOfFile:");
+public static final int /*long*/ sel_initWithData_ = sel_registerName("initWithData:");
+public static final int /*long*/ sel_initWithDictionary_ = sel_registerName("initWithDictionary:");
+public static final int /*long*/ sel_initWithFileWrapper_ = sel_registerName("initWithFileWrapper:");
+public static final int /*long*/ sel_initWithFocusedViewRect_ = sel_registerName("initWithFocusedViewRect:");
+public static final int /*long*/ sel_initWithFormat_shareContext_ = sel_registerName("initWithFormat:shareContext:");
+public static final int /*long*/ sel_initWithFrame_ = sel_registerName("initWithFrame:");
+public static final int /*long*/ sel_initWithFrame_frameName_groupName_ = sel_registerName("initWithFrame:frameName:groupName:");
+public static final int /*long*/ sel_initWithFrame_pullsDown_ = sel_registerName("initWithFrame:pullsDown:");
+public static final int /*long*/ sel_initWithIdentifier_ = sel_registerName("initWithIdentifier:");
+public static final int /*long*/ sel_initWithImage_hotSpot_ = sel_registerName("initWithImage:hotSpot:");
+public static final int /*long*/ sel_initWithIndex_ = sel_registerName("initWithIndex:");
+public static final int /*long*/ sel_initWithIndexesInRange_ = sel_registerName("initWithIndexesInRange:");
+public static final int /*long*/ sel_initWithItemIdentifier_ = sel_registerName("initWithItemIdentifier:");
+public static final int /*long*/ sel_initWithRect_options_owner_userInfo_ = sel_registerName("initWithRect:options:owner:userInfo:");
+public static final int /*long*/ sel_initWithSize_ = sel_registerName("initWithSize:");
+public static final int /*long*/ sel_initWithStartingColor_endingColor_ = sel_registerName("initWithStartingColor:endingColor:");
+public static final int /*long*/ sel_initWithString_ = sel_registerName("initWithString:");
+public static final int /*long*/ sel_initWithString_attributes_ = sel_registerName("initWithString:attributes:");
+public static final int /*long*/ sel_initWithTitle_ = sel_registerName("initWithTitle:");
+public static final int /*long*/ sel_initWithTitle_action_keyEquivalent_ = sel_registerName("initWithTitle:action:keyEquivalent:");
+public static final int /*long*/ sel_initWithTransform_ = sel_registerName("initWithTransform:");
+public static final int /*long*/ sel_initWithType_location_ = sel_registerName("initWithType:location:");
+public static final int /*long*/ sel_initWithURL_ = sel_registerName("initWithURL:");
+public static final int /*long*/ sel_insertItem_atIndex_ = sel_registerName("insertItem:atIndex:");
+public static final int /*long*/ sel_insertItemWithItemIdentifier_atIndex_ = sel_registerName("insertItemWithItemIdentifier:atIndex:");
+public static final int /*long*/ sel_insertItemWithObjectValue_atIndex_ = sel_registerName("insertItemWithObjectValue:atIndex:");
+public static final int /*long*/ sel_insertTabViewItem_atIndex_ = sel_registerName("insertTabViewItem:atIndex:");
+public static final int /*long*/ sel_insertText_ = sel_registerName("insertText:");
+public static final int /*long*/ sel_intValue = sel_registerName("intValue");
+public static final int /*long*/ sel_integerValue = sel_registerName("integerValue");
+public static final int /*long*/ sel_intercellSpacing = sel_registerName("intercellSpacing");
+public static final int /*long*/ sel_interpretKeyEvents_ = sel_registerName("interpretKeyEvents:");
+public static final int /*long*/ sel_invalidate = sel_registerName("invalidate");
+public static final int /*long*/ sel_invalidateShadow = sel_registerName("invalidateShadow");
+public static final int /*long*/ sel_invert = sel_registerName("invert");
+public static final int /*long*/ sel_isActive = sel_registerName("isActive");
+public static final int /*long*/ sel_isDocumentEdited = sel_registerName("isDocumentEdited");
+public static final int /*long*/ sel_isDrawingToScreen = sel_registerName("isDrawingToScreen");
+public static final int /*long*/ sel_isEmpty = sel_registerName("isEmpty");
+public static final int /*long*/ sel_isEnabled = sel_registerName("isEnabled");
+public static final int /*long*/ sel_isEqual_ = sel_registerName("isEqual:");
+public static final int /*long*/ sel_isEqualTo_ = sel_registerName("isEqualTo:");
+public static final int /*long*/ sel_isEqualToString_ = sel_registerName("isEqualToString:");
+public static final int /*long*/ sel_isFilePackageAtPath_ = sel_registerName("isFilePackageAtPath:");
+public static final int /*long*/ sel_isFileURL = sel_registerName("isFileURL");
+public static final int /*long*/ sel_isFlipped = sel_registerName("isFlipped");
+public static final int /*long*/ sel_isHidden = sel_registerName("isHidden");
+public static final int /*long*/ sel_isHiddenOrHasHiddenAncestor = sel_registerName("isHiddenOrHasHiddenAncestor");
+public static final int /*long*/ sel_isHighlighted = sel_registerName("isHighlighted");
+public static final int /*long*/ sel_isItemExpanded_ = sel_registerName("isItemExpanded:");
+public static final int /*long*/ sel_isKeyWindow = sel_registerName("isKeyWindow");
+public static final int /*long*/ sel_isKindOfClass_ = sel_registerName("isKindOfClass:");
+public static final int /*long*/ sel_isMainThread = sel_registerName("isMainThread");
+public static final int /*long*/ sel_isMiniaturized = sel_registerName("isMiniaturized");
+public static final int /*long*/ sel_isOpaque = sel_registerName("isOpaque");
+public static final int /*long*/ sel_isPlanar = sel_registerName("isPlanar");
+public static final int /*long*/ sel_isRowSelected_ = sel_registerName("isRowSelected:");
+public static final int /*long*/ sel_isRunning = sel_registerName("isRunning");
+public static final int /*long*/ sel_isSessionOnly = sel_registerName("isSessionOnly");
+public static final int /*long*/ sel_isSheet = sel_registerName("isSheet");
+public static final int /*long*/ sel_isVisible = sel_registerName("isVisible");
+public static final int /*long*/ sel_isZoomed = sel_registerName("isZoomed");
+public static final int /*long*/ sel_itemArray = sel_registerName("itemArray");
+public static final int /*long*/ sel_itemAtIndex_ = sel_registerName("itemAtIndex:");
+public static final int /*long*/ sel_itemAtRow_ = sel_registerName("itemAtRow:");
+public static final int /*long*/ sel_itemIdentifier = sel_registerName("itemIdentifier");
+public static final int /*long*/ sel_itemObjectValueAtIndex_ = sel_registerName("itemObjectValueAtIndex:");
+public static final int /*long*/ sel_itemTitleAtIndex_ = sel_registerName("itemTitleAtIndex:");
+public static final int /*long*/ sel_jobDisposition = sel_registerName("jobDisposition");
+public static final int /*long*/ sel_keyCode = sel_registerName("keyCode");
+public static final int /*long*/ sel_keyDown_ = sel_registerName("keyDown:");
+public static final int /*long*/ sel_keyEquivalent = sel_registerName("keyEquivalent");
+public static final int /*long*/ sel_keyEquivalentModifierMask = sel_registerName("keyEquivalentModifierMask");
+public static final int /*long*/ sel_keyUp_ = sel_registerName("keyUp:");
+public static final int /*long*/ sel_keyWindow = sel_registerName("keyWindow");
+public static final int /*long*/ sel_knobThickness = sel_registerName("knobThickness");
+public static final int /*long*/ sel_lastPathComponent = sel_registerName("lastPathComponent");
+public static final int /*long*/ sel_layoutManager = sel_registerName("layoutManager");
+public static final int /*long*/ sel_leading = sel_registerName("leading");
+public static final int /*long*/ sel_length = sel_registerName("length");
+public static final int /*long*/ sel_levelForItem_ = sel_registerName("levelForItem:");
+public static final int /*long*/ sel_lineFragmentUsedRectForGlyphAtIndex_effectiveRange_ = sel_registerName("lineFragmentUsedRectForGlyphAtIndex:effectiveRange:");
+public static final int /*long*/ sel_lineFragmentUsedRectForGlyphAtIndex_effectiveRange_withoutAdditionalLayout_ = sel_registerName("lineFragmentUsedRectForGlyphAtIndex:effectiveRange:withoutAdditionalLayout:");
+public static final int /*long*/ sel_lineToPoint_ = sel_registerName("lineToPoint:");
+public static final int /*long*/ sel_linkTextAttributes = sel_registerName("linkTextAttributes");
+public static final int /*long*/ sel_loadHTMLString_baseURL_ = sel_registerName("loadHTMLString:baseURL:");
+public static final int /*long*/ sel_loadNibFile_externalNameTable_withZone_ = sel_registerName("loadNibFile:externalNameTable:withZone:");
+public static final int /*long*/ sel_loadRequest_ = sel_registerName("loadRequest:");
+public static final int /*long*/ sel_localizedDescription = sel_registerName("localizedDescription");
+public static final int /*long*/ sel_location = sel_registerName("location");
+public static final int /*long*/ sel_locationForGlyphAtIndex_ = sel_registerName("locationForGlyphAtIndex:");
+public static final int /*long*/ sel_locationInWindow = sel_registerName("locationInWindow");
+public static final int /*long*/ sel_lockFocus = sel_registerName("lockFocus");
+public static final int /*long*/ sel_lowercaseString = sel_registerName("lowercaseString");
+public static final int /*long*/ sel_mainBundle = sel_registerName("mainBundle");
+public static final int /*long*/ sel_mainFrame = sel_registerName("mainFrame");
+public static final int /*long*/ sel_mainMenu = sel_registerName("mainMenu");
+public static final int /*long*/ sel_mainRunLoop = sel_registerName("mainRunLoop");
+public static final int /*long*/ sel_mainScreen = sel_registerName("mainScreen");
+public static final int /*long*/ sel_makeCurrentContext = sel_registerName("makeCurrentContext");
+public static final int /*long*/ sel_makeFirstResponder_ = sel_registerName("makeFirstResponder:");
+public static final int /*long*/ sel_makeKeyAndOrderFront_ = sel_registerName("makeKeyAndOrderFront:");
+public static final int /*long*/ sel_markedRange = sel_registerName("markedRange");
+public static final int /*long*/ sel_markedTextAttributes = sel_registerName("markedTextAttributes");
+public static final int /*long*/ sel_maxValue = sel_registerName("maxValue");
+public static final int /*long*/ sel_maximum = sel_registerName("maximum");
+public static final int /*long*/ sel_maximumFractionDigits = sel_registerName("maximumFractionDigits");
+public static final int /*long*/ sel_maximumIntegerDigits = sel_registerName("maximumIntegerDigits");
+public static final int /*long*/ sel_menu = sel_registerName("menu");
+public static final int /*long*/ sel_menu_willHighlightItem_ = sel_registerName("menu:willHighlightItem:");
+public static final int /*long*/ sel_menuDidClose_ = sel_registerName("menuDidClose:");
+public static final int /*long*/ sel_menuForEvent_ = sel_registerName("menuForEvent:");
+public static final int /*long*/ sel_menuNeedsUpdate_ = sel_registerName("menuNeedsUpdate:");
+public static final int /*long*/ sel_menuWillOpen_ = sel_registerName("menuWillOpen:");
+public static final int /*long*/ sel_metaKey = sel_registerName("metaKey");
+public static final int /*long*/ sel_minFrameWidthWithTitle_styleMask_ = sel_registerName("minFrameWidthWithTitle:styleMask:");
+public static final int /*long*/ sel_minSize = sel_registerName("minSize");
+public static final int /*long*/ sel_minValue = sel_registerName("minValue");
+public static final int /*long*/ sel_miniaturize_ = sel_registerName("miniaturize:");
+public static final int /*long*/ sel_minimum = sel_registerName("minimum");
+public static final int /*long*/ sel_minimumSize = sel_registerName("minimumSize");
+public static final int /*long*/ sel_minuteOfHour = sel_registerName("minuteOfHour");
+public static final int /*long*/ sel_modifierFlags = sel_registerName("modifierFlags");
+public static final int /*long*/ sel_monthOfYear = sel_registerName("monthOfYear");
+public static final int /*long*/ sel_mouseDown_ = sel_registerName("mouseDown:");
+public static final int /*long*/ sel_mouseDragged_ = sel_registerName("mouseDragged:");
+public static final int /*long*/ sel_mouseEntered_ = sel_registerName("mouseEntered:");
+public static final int /*long*/ sel_mouseExited_ = sel_registerName("mouseExited:");
+public static final int /*long*/ sel_mouseLocation = sel_registerName("mouseLocation");
+public static final int /*long*/ sel_mouseLocationOutsideOfEventStream = sel_registerName("mouseLocationOutsideOfEventStream");
+public static final int /*long*/ sel_mouseMoved_ = sel_registerName("mouseMoved:");
+public static final int /*long*/ sel_mouseUp_ = sel_registerName("mouseUp:");
+public static final int /*long*/ sel_moveColumn_toColumn_ = sel_registerName("moveColumn:toColumn:");
+public static final int /*long*/ sel_moveToBeginningOfParagraph_ = sel_registerName("moveToBeginningOfParagraph:");
+public static final int /*long*/ sel_moveToEndOfParagraph_ = sel_registerName("moveToEndOfParagraph:");
+public static final int /*long*/ sel_moveToPoint_ = sel_registerName("moveToPoint:");
+public static final int /*long*/ sel_moveUp_ = sel_registerName("moveUp:");
+public static final int /*long*/ sel_mutableCopy = sel_registerName("mutableCopy");
+public static final int /*long*/ sel_mutableString = sel_registerName("mutableString");
+public static final int /*long*/ sel_name = sel_registerName("name");
+public static final int /*long*/ sel_nextEventMatchingMask_untilDate_inMode_dequeue_ = sel_registerName("nextEventMatchingMask:untilDate:inMode:dequeue:");
+public static final int /*long*/ sel_nextObject = sel_registerName("nextObject");
+public static final int /*long*/ sel_nextState = sel_registerName("nextState");
+public static final int /*long*/ sel_nextWordFromIndex_forward_ = sel_registerName("nextWordFromIndex:forward:");
+public static final int /*long*/ sel_noResponderFor_ = sel_registerName("noResponderFor:");
+public static final int /*long*/ sel_noteNumberOfRowsChanged = sel_registerName("noteNumberOfRowsChanged");
+public static final int /*long*/ sel_numberOfColumns = sel_registerName("numberOfColumns");
+public static final int /*long*/ sel_numberOfComponents = sel_registerName("numberOfComponents");
+public static final int /*long*/ sel_numberOfGlyphs = sel_registerName("numberOfGlyphs");
+public static final int /*long*/ sel_numberOfItems = sel_registerName("numberOfItems");
+public static final int /*long*/ sel_numberOfPlanes = sel_registerName("numberOfPlanes");
+public static final int /*long*/ sel_numberOfRows = sel_registerName("numberOfRows");
+public static final int /*long*/ sel_numberOfRowsInTableView_ = sel_registerName("numberOfRowsInTableView:");
+public static final int /*long*/ sel_numberOfSelectedRows = sel_registerName("numberOfSelectedRows");
+public static final int /*long*/ sel_numberOfVisibleItems = sel_registerName("numberOfVisibleItems");
+public static final int /*long*/ sel_numberWithBool_ = sel_registerName("numberWithBool:");
+public static final int /*long*/ sel_numberWithDouble_ = sel_registerName("numberWithDouble:");
+public static final int /*long*/ sel_numberWithInt_ = sel_registerName("numberWithInt:");
+public static final int /*long*/ sel_numberWithInteger_ = sel_registerName("numberWithInteger:");
+public static final int /*long*/ sel_objCType = sel_registerName("objCType");
+public static final int /*long*/ sel_object = sel_registerName("object");
+public static final int /*long*/ sel_objectAtIndex_ = sel_registerName("objectAtIndex:");
+public static final int /*long*/ sel_objectEnumerator = sel_registerName("objectEnumerator");
+public static final int /*long*/ sel_objectForInfoDictionaryKey_ = sel_registerName("objectForInfoDictionaryKey:");
+public static final int /*long*/ sel_objectForKey_ = sel_registerName("objectForKey:");
+public static final int /*long*/ sel_objectValues = sel_registerName("objectValues");
+public static final int /*long*/ sel_openFile_withApplication_ = sel_registerName("openFile:withApplication:");
+public static final int /*long*/ sel_openPanel = sel_registerName("openPanel");
+public static final int /*long*/ sel_openURL_ = sel_registerName("openURL:");
+public static final int /*long*/ sel_openURLs_withAppBundleIdentifier_options_additionalEventParamDescriptor_launchIdentifiers_ = sel_registerName("openURLs:withAppBundleIdentifier:options:additionalEventParamDescriptor:launchIdentifiers:");
+public static final int /*long*/ sel_options = sel_registerName("options");
+public static final int /*long*/ sel_orderBack_ = sel_registerName("orderBack:");
+public static final int /*long*/ sel_orderFront_ = sel_registerName("orderFront:");
+public static final int /*long*/ sel_orderFrontRegardless = sel_registerName("orderFrontRegardless");
+public static final int /*long*/ sel_orderFrontStandardAboutPanel_ = sel_registerName("orderFrontStandardAboutPanel:");
+public static final int /*long*/ sel_orderOut_ = sel_registerName("orderOut:");
+public static final int /*long*/ sel_orderWindow_relativeTo_ = sel_registerName("orderWindow:relativeTo:");
+public static final int /*long*/ sel_orderedWindows = sel_registerName("orderedWindows");
+public static final int /*long*/ sel_orientation = sel_registerName("orientation");
+public static final int /*long*/ sel_otherEventWithType_location_modifierFlags_timestamp_windowNumber_context_subtype_data1_data2_ = sel_registerName("otherEventWithType:location:modifierFlags:timestamp:windowNumber:context:subtype:data1:data2:");
+public static final int /*long*/ sel_otherMouseDown_ = sel_registerName("otherMouseDown:");
+public static final int /*long*/ sel_otherMouseDragged_ = sel_registerName("otherMouseDragged:");
+public static final int /*long*/ sel_otherMouseUp_ = sel_registerName("otherMouseUp:");
+public static final int /*long*/ sel_outlineTableColumn = sel_registerName("outlineTableColumn");
+public static final int /*long*/ sel_outlineView_acceptDrop_item_childIndex_ = sel_registerName("outlineView:acceptDrop:item:childIndex:");
+public static final int /*long*/ sel_outlineView_child_ofItem_ = sel_registerName("outlineView:child:ofItem:");
+public static final int /*long*/ sel_outlineView_didClickTableColumn_ = sel_registerName("outlineView:didClickTableColumn:");
+public static final int /*long*/ sel_outlineView_isItemExpandable_ = sel_registerName("outlineView:isItemExpandable:");
+public static final int /*long*/ sel_outlineView_numberOfChildrenOfItem_ = sel_registerName("outlineView:numberOfChildrenOfItem:");
+public static final int /*long*/ sel_outlineView_objectValueForTableColumn_byItem_ = sel_registerName("outlineView:objectValueForTableColumn:byItem:");
+public static final int /*long*/ sel_outlineView_setObjectValue_forTableColumn_byItem_ = sel_registerName("outlineView:setObjectValue:forTableColumn:byItem:");
+public static final int /*long*/ sel_outlineView_shouldCollapseItem_ = sel_registerName("outlineView:shouldCollapseItem:");
+public static final int /*long*/ sel_outlineView_shouldExpandItem_ = sel_registerName("outlineView:shouldExpandItem:");
+public static final int /*long*/ sel_outlineView_validateDrop_proposedItem_proposedChildIndex_ = sel_registerName("outlineView:validateDrop:proposedItem:proposedChildIndex:");
+public static final int /*long*/ sel_outlineView_willDisplayCell_forTableColumn_item_ = sel_registerName("outlineView:willDisplayCell:forTableColumn:item:");
+public static final int /*long*/ sel_outlineView_writeItems_toPasteboard_ = sel_registerName("outlineView:writeItems:toPasteboard:");
+public static final int /*long*/ sel_outlineViewColumnDidMove_ = sel_registerName("outlineViewColumnDidMove:");
+public static final int /*long*/ sel_outlineViewColumnDidResize_ = sel_registerName("outlineViewColumnDidResize:");
+public static final int /*long*/ sel_outlineViewItemDidExpand_ = sel_registerName("outlineViewItemDidExpand:");
+public static final int /*long*/ sel_outlineViewSelectionDidChange_ = sel_registerName("outlineViewSelectionDidChange:");
+public static final int /*long*/ sel_owner = sel_registerName("owner");
+public static final int /*long*/ sel_pageDown_ = sel_registerName("pageDown:");
+public static final int /*long*/ sel_pageTitle = sel_registerName("pageTitle");
+public static final int /*long*/ sel_pageUp_ = sel_registerName("pageUp:");
+public static final int /*long*/ sel_panel_shouldShowFilename_ = sel_registerName("panel:shouldShowFilename:");
+public static final int /*long*/ sel_panelConvertFont_ = sel_registerName("panelConvertFont:");
+public static final int /*long*/ sel_paperSize = sel_registerName("paperSize");
+public static final int /*long*/ sel_paragraphs = sel_registerName("paragraphs");
+public static final int /*long*/ sel_parentWindow = sel_registerName("parentWindow");
+public static final int /*long*/ sel_password = sel_registerName("password");
+public static final int /*long*/ sel_paste_ = sel_registerName("paste:");
+public static final int /*long*/ sel_pasteboard_provideDataForType_ = sel_registerName("pasteboard:provideDataForType:");
+public static final int /*long*/ sel_pasteboardWithName_ = sel_registerName("pasteboardWithName:");
+public static final int /*long*/ sel_pathExtension = sel_registerName("pathExtension");
+public static final int /*long*/ sel_pathForResource_ofType_ = sel_registerName("pathForResource:ofType:");
+public static final int /*long*/ sel_performDragOperation_ = sel_registerName("performDragOperation:");
+public static final int /*long*/ sel_performSelectorOnMainThread_withObject_waitUntilDone_ = sel_registerName("performSelectorOnMainThread:withObject:waitUntilDone:");
+public static final int /*long*/ sel_pixelsHigh = sel_registerName("pixelsHigh");
+public static final int /*long*/ sel_pixelsWide = sel_registerName("pixelsWide");
+public static final int /*long*/ sel_pointSize = sel_registerName("pointSize");
+public static final int /*long*/ sel_pointValue = sel_registerName("pointValue");
+public static final int /*long*/ sel_pointingHandCursor = sel_registerName("pointingHandCursor");
+public static final int /*long*/ sel_pop = sel_registerName("pop");
+public static final int /*long*/ sel_popUpContextMenu_withEvent_forView_ = sel_registerName("popUpContextMenu:withEvent:forView:");
+public static final int /*long*/ sel_popUpStatusItemMenu_ = sel_registerName("popUpStatusItemMenu:");
+public static final int /*long*/ sel_port = sel_registerName("port");
+public static final int /*long*/ sel_postEvent_atStart_ = sel_registerName("postEvent:atStart:");
+public static final int /*long*/ sel_prependTransform_ = sel_registerName("prependTransform:");
+public static final int /*long*/ sel_preventDefault = sel_registerName("preventDefault");
+public static final int /*long*/ sel_previousFailureCount = sel_registerName("previousFailureCount");
+public static final int /*long*/ sel_printDocumentView = sel_registerName("printDocumentView");
+public static final int /*long*/ sel_printOperationWithPrintInfo_ = sel_registerName("printOperationWithPrintInfo:");
+public static final int /*long*/ sel_printOperationWithView_printInfo_ = sel_registerName("printOperationWithView:printInfo:");
+public static final int /*long*/ sel_printPanel = sel_registerName("printPanel");
+public static final int /*long*/ sel_printer = sel_registerName("printer");
+public static final int /*long*/ sel_printerNames = sel_registerName("printerNames");
+public static final int /*long*/ sel_printerWithName_ = sel_registerName("printerWithName:");
+public static final int /*long*/ sel_propertyListForType_ = sel_registerName("propertyListForType:");
+public static final int /*long*/ sel_proposedCredential = sel_registerName("proposedCredential");
+public static final int /*long*/ sel_protectionSpace = sel_registerName("protectionSpace");
+public static final int /*long*/ sel_push = sel_registerName("push");
+public static final int /*long*/ sel_rangeValue = sel_registerName("rangeValue");
+public static final int /*long*/ sel_realm = sel_registerName("realm");
+public static final int /*long*/ sel_recentSearches = sel_registerName("recentSearches");
+public static final int /*long*/ sel_rectArrayForCharacterRange_withinSelectedCharacterRange_inTextContainer_rectCount_ = sel_registerName("rectArrayForCharacterRange:withinSelectedCharacterRange:inTextContainer:rectCount:");
+public static final int /*long*/ sel_rectOfColumn_ = sel_registerName("rectOfColumn:");
+public static final int /*long*/ sel_rectOfRow_ = sel_registerName("rectOfRow:");
+public static final int /*long*/ sel_rectValue = sel_registerName("rectValue");
+public static final int /*long*/ sel_redComponent = sel_registerName("redComponent");
+public static final int /*long*/ sel_reflectScrolledClipView_ = sel_registerName("reflectScrolledClipView:");
+public static final int /*long*/ sel_registerForDraggedTypes_ = sel_registerName("registerForDraggedTypes:");
+public static final int /*long*/ sel_release = sel_registerName("release");
+public static final int /*long*/ sel_reload_ = sel_registerName("reload:");
+public static final int /*long*/ sel_reloadData = sel_registerName("reloadData");
+public static final int /*long*/ sel_reloadItem_reloadChildren_ = sel_registerName("reloadItem:reloadChildren:");
+public static final int /*long*/ sel_removeAllItems = sel_registerName("removeAllItems");
+public static final int /*long*/ sel_removeAllPoints = sel_registerName("removeAllPoints");
+public static final int /*long*/ sel_removeAttribute_range_ = sel_registerName("removeAttribute:range:");
+public static final int /*long*/ sel_removeChildWindow_ = sel_registerName("removeChildWindow:");
+public static final int /*long*/ sel_removeFromSuperview = sel_registerName("removeFromSuperview");
+public static final int /*long*/ sel_removeItem_ = sel_registerName("removeItem:");
+public static final int /*long*/ sel_removeItemAtIndex_ = sel_registerName("removeItemAtIndex:");
+public static final int /*long*/ sel_removeItemAtPath_error_ = sel_registerName("removeItemAtPath:error:");
+public static final int /*long*/ sel_removeLastObject = sel_registerName("removeLastObject");
+public static final int /*long*/ sel_removeObject_ = sel_registerName("removeObject:");
+public static final int /*long*/ sel_removeObjectAtIndex_ = sel_registerName("removeObjectAtIndex:");
+public static final int /*long*/ sel_removeObjectForKey_ = sel_registerName("removeObjectForKey:");
+public static final int /*long*/ sel_removeObjectIdenticalTo_ = sel_registerName("removeObjectIdenticalTo:");
+public static final int /*long*/ sel_removeObserver_ = sel_registerName("removeObserver:");
+public static final int /*long*/ sel_removeRepresentation_ = sel_registerName("removeRepresentation:");
+public static final int /*long*/ sel_removeStatusItem_ = sel_registerName("removeStatusItem:");
+public static final int /*long*/ sel_removeTabViewItem_ = sel_registerName("removeTabViewItem:");
+public static final int /*long*/ sel_removeTableColumn_ = sel_registerName("removeTableColumn:");
+public static final int /*long*/ sel_removeTemporaryAttribute_forCharacterRange_ = sel_registerName("removeTemporaryAttribute:forCharacterRange:");
+public static final int /*long*/ sel_removeTrackingArea_ = sel_registerName("removeTrackingArea:");
+public static final int /*long*/ sel_replaceCharactersInRange_withString_ = sel_registerName("replaceCharactersInRange:withString:");
+public static final int /*long*/ sel_representation = sel_registerName("representation");
+public static final int /*long*/ sel_representations = sel_registerName("representations");
+public static final int /*long*/ sel_request = sel_registerName("request");
+public static final int /*long*/ sel_requestWithURL_ = sel_registerName("requestWithURL:");
+public static final int /*long*/ sel_resetCursorRects = sel_registerName("resetCursorRects");
+public static final int /*long*/ sel_resignFirstResponder = sel_registerName("resignFirstResponder");
+public static final int /*long*/ sel_resizeDownCursor = sel_registerName("resizeDownCursor");
+public static final int /*long*/ sel_resizeLeftCursor = sel_registerName("resizeLeftCursor");
+public static final int /*long*/ sel_resizeLeftRightCursor = sel_registerName("resizeLeftRightCursor");
+public static final int /*long*/ sel_resizeRightCursor = sel_registerName("resizeRightCursor");
+public static final int /*long*/ sel_resizeUpCursor = sel_registerName("resizeUpCursor");
+public static final int /*long*/ sel_resizeUpDownCursor = sel_registerName("resizeUpDownCursor");
+public static final int /*long*/ sel_resizingMask = sel_registerName("resizingMask");
+public static final int /*long*/ sel_resourcePath = sel_registerName("resourcePath");
+public static final int /*long*/ sel_respondsToSelector_ = sel_registerName("respondsToSelector:");
+public static final int /*long*/ sel_restoreGraphicsState = sel_registerName("restoreGraphicsState");
+public static final int /*long*/ sel_retain = sel_registerName("retain");
+public static final int /*long*/ sel_retainCount = sel_registerName("retainCount");
+public static final int /*long*/ sel_rightMouseDown_ = sel_registerName("rightMouseDown:");
+public static final int /*long*/ sel_rightMouseDragged_ = sel_registerName("rightMouseDragged:");
+public static final int /*long*/ sel_rightMouseUp_ = sel_registerName("rightMouseUp:");
+public static final int /*long*/ sel_rotateByDegrees_ = sel_registerName("rotateByDegrees:");
+public static final int /*long*/ sel_rowAtPoint_ = sel_registerName("rowAtPoint:");
+public static final int /*long*/ sel_rowForItem_ = sel_registerName("rowForItem:");
+public static final int /*long*/ sel_rowHeight = sel_registerName("rowHeight");
+public static final int /*long*/ sel_rowsInRect_ = sel_registerName("rowsInRect:");
+public static final int /*long*/ sel_run = sel_registerName("run");
+public static final int /*long*/ sel_runModal = sel_registerName("runModal");
+public static final int /*long*/ sel_runModalForDirectory_file_ = sel_registerName("runModalForDirectory:file:");
+public static final int /*long*/ sel_runModalForWindow_ = sel_registerName("runModalForWindow:");
+public static final int /*long*/ sel_runModalWithPrintInfo_ = sel_registerName("runModalWithPrintInfo:");
+public static final int /*long*/ sel_runMode_beforeDate_ = sel_registerName("runMode:beforeDate:");
+public static final int /*long*/ sel_runOperation = sel_registerName("runOperation");
+public static final int /*long*/ sel_samplesPerPixel = sel_registerName("samplesPerPixel");
+public static final int /*long*/ sel_saveGraphicsState = sel_registerName("saveGraphicsState");
+public static final int /*long*/ sel_savePanel = sel_registerName("savePanel");
+public static final int /*long*/ sel_scaleXBy_yBy_ = sel_registerName("scaleXBy:yBy:");
+public static final int /*long*/ sel_scheduledTimerWithTimeInterval_target_selector_userInfo_repeats_ = sel_registerName("scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:");
+public static final int /*long*/ sel_screen = sel_registerName("screen");
+public static final int /*long*/ sel_screens = sel_registerName("screens");
+public static final int /*long*/ sel_scrollColumnToVisible_ = sel_registerName("scrollColumnToVisible:");
+public static final int /*long*/ sel_scrollPoint_ = sel_registerName("scrollPoint:");
+public static final int /*long*/ sel_scrollRangeToVisible_ = sel_registerName("scrollRangeToVisible:");
+public static final int /*long*/ sel_scrollRectToVisible_ = sel_registerName("scrollRectToVisible:");
+public static final int /*long*/ sel_scrollRowToVisible_ = sel_registerName("scrollRowToVisible:");
+public static final int /*long*/ sel_scrollToPoint_ = sel_registerName("scrollToPoint:");
+public static final int /*long*/ sel_scrollWheel_ = sel_registerName("scrollWheel:");
+public static final int /*long*/ sel_scrollerWidth = sel_registerName("scrollerWidth");
+public static final int /*long*/ sel_scrollerWidthForControlSize_ = sel_registerName("scrollerWidthForControlSize:");
+public static final int /*long*/ sel_searchButtonCell = sel_registerName("searchButtonCell");
+public static final int /*long*/ sel_searchTextRectForBounds_ = sel_registerName("searchTextRectForBounds:");
+public static final int /*long*/ sel_secondOfMinute = sel_registerName("secondOfMinute");
+public static final int /*long*/ sel_secondarySelectedControlColor = sel_registerName("secondarySelectedControlColor");
+public static final int /*long*/ sel_selectAll_ = sel_registerName("selectAll:");
+public static final int /*long*/ sel_selectItem_ = sel_registerName("selectItem:");
+public static final int /*long*/ sel_selectItemAtIndex_ = sel_registerName("selectItemAtIndex:");
+public static final int /*long*/ sel_selectRowIndexes_byExtendingSelection_ = sel_registerName("selectRowIndexes:byExtendingSelection:");
+public static final int /*long*/ sel_selectTabViewItemAtIndex_ = sel_registerName("selectTabViewItemAtIndex:");
+public static final int /*long*/ sel_selectText_ = sel_registerName("selectText:");
+public static final int /*long*/ sel_selectedControlColor = sel_registerName("selectedControlColor");
+public static final int /*long*/ sel_selectedControlTextColor = sel_registerName("selectedControlTextColor");
+public static final int /*long*/ sel_selectedRange = sel_registerName("selectedRange");
+public static final int /*long*/ sel_selectedRow = sel_registerName("selectedRow");
+public static final int /*long*/ sel_selectedRowIndexes = sel_registerName("selectedRowIndexes");
+public static final int /*long*/ sel_selectedTabViewItem = sel_registerName("selectedTabViewItem");
+public static final int /*long*/ sel_selectedTextBackgroundColor = sel_registerName("selectedTextBackgroundColor");
+public static final int /*long*/ sel_selectedTextColor = sel_registerName("selectedTextColor");
+public static final int /*long*/ sel_sendAction_to_ = sel_registerName("sendAction:to:");
+public static final int /*long*/ sel_sendEvent_ = sel_registerName("sendEvent:");
+public static final int /*long*/ sel_sender = sel_registerName("sender");
+public static final int /*long*/ sel_separatorItem = sel_registerName("separatorItem");
+public static final int /*long*/ sel_set = sel_registerName("set");
+public static final int /*long*/ sel_setAcceptsMouseMovedEvents_ = sel_registerName("setAcceptsMouseMovedEvents:");
+public static final int /*long*/ sel_setAccessoryView_ = sel_registerName("setAccessoryView:");
+public static final int /*long*/ sel_setAction_ = sel_registerName("setAction:");
+public static final int /*long*/ sel_setAlertStyle_ = sel_registerName("setAlertStyle:");
+public static final int /*long*/ sel_setAlignment_ = sel_registerName("setAlignment:");
+public static final int /*long*/ sel_setAllowsColumnReordering_ = sel_registerName("setAllowsColumnReordering:");
+public static final int /*long*/ sel_setAllowsFloats_ = sel_registerName("setAllowsFloats:");
+public static final int /*long*/ sel_setAllowsMixedState_ = sel_registerName("setAllowsMixedState:");
+public static final int /*long*/ sel_setAllowsMultipleSelection_ = sel_registerName("setAllowsMultipleSelection:");
+public static final int /*long*/ sel_setAllowsUserCustomization_ = sel_registerName("setAllowsUserCustomization:");
+public static final int /*long*/ sel_setAlpha_ = sel_registerName("setAlpha:");
+public static final int /*long*/ sel_setAlphaValue_ = sel_registerName("setAlphaValue:");
+public static final int /*long*/ sel_setApplicationIconImage_ = sel_registerName("setApplicationIconImage:");
+public static final int /*long*/ sel_setApplicationNameForUserAgent_ = sel_registerName("setApplicationNameForUserAgent:");
+public static final int /*long*/ sel_setAttributedString_ = sel_registerName("setAttributedString:");
+public static final int /*long*/ sel_setAttributedStringValue_ = sel_registerName("setAttributedStringValue:");
+public static final int /*long*/ sel_setAttributedTitle_ = sel_registerName("setAttributedTitle:");
+public static final int /*long*/ sel_setAutoenablesItems_ = sel_registerName("setAutoenablesItems:");
+public static final int /*long*/ sel_setAutohidesScrollers_ = sel_registerName("setAutohidesScrollers:");
+public static final int /*long*/ sel_setAutoresizesOutlineColumn_ = sel_registerName("setAutoresizesOutlineColumn:");
+public static final int /*long*/ sel_setAutoresizesSubviews_ = sel_registerName("setAutoresizesSubviews:");
+public static final int /*long*/ sel_setAutoresizingMask_ = sel_registerName("setAutoresizingMask:");
+public static final int /*long*/ sel_setAutosaveExpandedItems_ = sel_registerName("setAutosaveExpandedItems:");
+public static final int /*long*/ sel_setBackgroundColor_ = sel_registerName("setBackgroundColor:");
+public static final int /*long*/ sel_setBackgroundLayoutEnabled_ = sel_registerName("setBackgroundLayoutEnabled:");
+public static final int /*long*/ sel_setBezelStyle_ = sel_registerName("setBezelStyle:");
+public static final int /*long*/ sel_setBorderType_ = sel_registerName("setBorderType:");
+public static final int /*long*/ sel_setBorderWidth_ = sel_registerName("setBorderWidth:");
+public static final int /*long*/ sel_setBordered_ = sel_registerName("setBordered:");
+public static final int /*long*/ sel_setBoxType_ = sel_registerName("setBoxType:");
+public static final int /*long*/ sel_setButtonType_ = sel_registerName("setButtonType:");
+public static final int /*long*/ sel_setCacheMode_ = sel_registerName("setCacheMode:");
+public static final int /*long*/ sel_setCachePolicy_ = sel_registerName("setCachePolicy:");
+public static final int /*long*/ sel_setCanChooseDirectories_ = sel_registerName("setCanChooseDirectories:");
+public static final int /*long*/ sel_setCanChooseFiles_ = sel_registerName("setCanChooseFiles:");
+public static final int /*long*/ sel_setCanCreateDirectories_ = sel_registerName("setCanCreateDirectories:");
+public static final int /*long*/ sel_setCancelButtonCell_ = sel_registerName("setCancelButtonCell:");
+public static final int /*long*/ sel_setCell_ = sel_registerName("setCell:");
+public static final int /*long*/ sel_setCellClass_ = sel_registerName("setCellClass:");
+public static final int /*long*/ sel_setClip = sel_registerName("setClip");
+public static final int /*long*/ sel_setColor_ = sel_registerName("setColor:");
+public static final int /*long*/ sel_setColumnAutoresizingStyle_ = sel_registerName("setColumnAutoresizingStyle:");
+public static final int /*long*/ sel_setCompositingOperation_ = sel_registerName("setCompositingOperation:");
+public static final int /*long*/ sel_setContainerSize_ = sel_registerName("setContainerSize:");
+public static final int /*long*/ sel_setContentView_ = sel_registerName("setContentView:");
+public static final int /*long*/ sel_setContentViewMargins_ = sel_registerName("setContentViewMargins:");
+public static final int /*long*/ sel_setControlSize_ = sel_registerName("setControlSize:");
+public static final int /*long*/ sel_setCookie_ = sel_registerName("setCookie:");
+public static final int /*long*/ sel_setCopiesOnScroll_ = sel_registerName("setCopiesOnScroll:");
+public static final int /*long*/ sel_setCurrentContext_ = sel_registerName("setCurrentContext:");
+public static final int /*long*/ sel_setCurrentOperation_ = sel_registerName("setCurrentOperation:");
+public static final int /*long*/ sel_setData_forType_ = sel_registerName("setData:forType:");
+public static final int /*long*/ sel_setDataCell_ = sel_registerName("setDataCell:");
+public static final int /*long*/ sel_setDataSource_ = sel_registerName("setDataSource:");
+public static final int /*long*/ sel_setDatePickerElements_ = sel_registerName("setDatePickerElements:");
+public static final int /*long*/ sel_setDatePickerStyle_ = sel_registerName("setDatePickerStyle:");
+public static final int /*long*/ sel_setDateValue_ = sel_registerName("setDateValue:");
+public static final int /*long*/ sel_setDefaultButtonCell_ = sel_registerName("setDefaultButtonCell:");
+public static final int /*long*/ sel_setDefaultFlatness_ = sel_registerName("setDefaultFlatness:");
+public static final int /*long*/ sel_setDefaultParagraphStyle_ = sel_registerName("setDefaultParagraphStyle:");
+public static final int /*long*/ sel_setDefaultTabInterval_ = sel_registerName("setDefaultTabInterval:");
+public static final int /*long*/ sel_setDelegate_ = sel_registerName("setDelegate:");
+public static final int /*long*/ sel_setDestination_allowOverwrite_ = sel_registerName("setDestination:allowOverwrite:");
+public static final int /*long*/ sel_setDictionary_ = sel_registerName("setDictionary:");
+public static final int /*long*/ sel_setDirectory_ = sel_registerName("setDirectory:");
+public static final int /*long*/ sel_setDisplayMode_ = sel_registerName("setDisplayMode:");
+public static final int /*long*/ sel_setDocumentCursor_ = sel_registerName("setDocumentCursor:");
+public static final int /*long*/ sel_setDocumentEdited_ = sel_registerName("setDocumentEdited:");
+public static final int /*long*/ sel_setDocumentView_ = sel_registerName("setDocumentView:");
+public static final int /*long*/ sel_setDoubleAction_ = sel_registerName("setDoubleAction:");
+public static final int /*long*/ sel_setDoubleValue_ = sel_registerName("setDoubleValue:");
+public static final int /*long*/ sel_setDownloadDelegate_ = sel_registerName("setDownloadDelegate:");
+public static final int /*long*/ sel_setDrawsBackground_ = sel_registerName("setDrawsBackground:");
+public static final int /*long*/ sel_setDropItem_dropChildIndex_ = sel_registerName("setDropItem:dropChildIndex:");
+public static final int /*long*/ sel_setDropRow_dropOperation_ = sel_registerName("setDropRow:dropOperation:");
+public static final int /*long*/ sel_setEditable_ = sel_registerName("setEditable:");
+public static final int /*long*/ sel_setEnabled_ = sel_registerName("setEnabled:");
+public static final int /*long*/ sel_setEnabled_forSegment_ = sel_registerName("setEnabled:forSegment:");
+public static final int /*long*/ sel_setFill = sel_registerName("setFill");
+public static final int /*long*/ sel_setFillColor_ = sel_registerName("setFillColor:");
+public static final int /*long*/ sel_setFireDate_ = sel_registerName("setFireDate:");
+public static final int /*long*/ sel_setFirstLineHeadIndent_ = sel_registerName("setFirstLineHeadIndent:");
+public static final int /*long*/ sel_setFloatValue_knobProportion_ = sel_registerName("setFloatValue:knobProportion:");
+public static final int /*long*/ sel_setFocusRingType_ = sel_registerName("setFocusRingType:");
+public static final int /*long*/ sel_setFont_ = sel_registerName("setFont:");
+public static final int /*long*/ sel_setFormatter_ = sel_registerName("setFormatter:");
+public static final int /*long*/ sel_setFrame_ = sel_registerName("setFrame:");
+public static final int /*long*/ sel_setFrame_display_ = sel_registerName("setFrame:display:");
+public static final int /*long*/ sel_setFrame_display_animate_ = sel_registerName("setFrame:display:animate:");
+public static final int /*long*/ sel_setFrameLoadDelegate_ = sel_registerName("setFrameLoadDelegate:");
+public static final int /*long*/ sel_setFrameOrigin_ = sel_registerName("setFrameOrigin:");
+public static final int /*long*/ sel_setFrameSize_ = sel_registerName("setFrameSize:");
+public static final int /*long*/ sel_setHasHorizontalScroller_ = sel_registerName("setHasHorizontalScroller:");
+public static final int /*long*/ sel_setHasShadow_ = sel_registerName("setHasShadow:");
+public static final int /*long*/ sel_setHasVerticalScroller_ = sel_registerName("setHasVerticalScroller:");
+public static final int /*long*/ sel_setHeaderCell_ = sel_registerName("setHeaderCell:");
+public static final int /*long*/ sel_setHeaderView_ = sel_registerName("setHeaderView:");
+public static final int /*long*/ sel_setHidden_ = sel_registerName("setHidden:");
+public static final int /*long*/ sel_setHiddenUntilMouseMoves_ = sel_registerName("setHiddenUntilMouseMoves:");
+public static final int /*long*/ sel_setHighlightMode_ = sel_registerName("setHighlightMode:");
+public static final int /*long*/ sel_setHighlighted_ = sel_registerName("setHighlighted:");
+public static final int /*long*/ sel_setHighlightedTableColumn_ = sel_registerName("setHighlightedTableColumn:");
+public static final int /*long*/ sel_setHorizontalScroller_ = sel_registerName("setHorizontalScroller:");
+public static final int /*long*/ sel_setHorizontallyResizable_ = sel_registerName("setHorizontallyResizable:");
+public static final int /*long*/ sel_setIcon_ = sel_registerName("setIcon:");
+public static final int /*long*/ sel_setIdentifier_ = sel_registerName("setIdentifier:");
+public static final int /*long*/ sel_setImage_ = sel_registerName("setImage:");
+public static final int /*long*/ sel_setImage_forSegment_ = sel_registerName("setImage:forSegment:");
+public static final int /*long*/ sel_setImageAlignment_ = sel_registerName("setImageAlignment:");
+public static final int /*long*/ sel_setImageInterpolation_ = sel_registerName("setImageInterpolation:");
+public static final int /*long*/ sel_setImagePosition_ = sel_registerName("setImagePosition:");
+public static final int /*long*/ sel_setImageScaling_ = sel_registerName("setImageScaling:");
+public static final int /*long*/ sel_setIncrement_ = sel_registerName("setIncrement:");
+public static final int /*long*/ sel_setIndeterminate_ = sel_registerName("setIndeterminate:");
+public static final int /*long*/ sel_setIndicatorImage_inTableColumn_ = sel_registerName("setIndicatorImage:inTableColumn:");
+public static final int /*long*/ sel_setIntercellSpacing_ = sel_registerName("setIntercellSpacing:");
+public static final int /*long*/ sel_setJavaEnabled_ = sel_registerName("setJavaEnabled:");
+public static final int /*long*/ sel_setJavaScriptEnabled_ = sel_registerName("setJavaScriptEnabled:");
+public static final int /*long*/ sel_setJobDisposition_ = sel_registerName("setJobDisposition:");
+public static final int /*long*/ sel_setJobTitle_ = sel_registerName("setJobTitle:");
+public static final int /*long*/ sel_setKeyEquivalent_ = sel_registerName("setKeyEquivalent:");
+public static final int /*long*/ sel_setKeyEquivalentModifierMask_ = sel_registerName("setKeyEquivalentModifierMask:");
+public static final int /*long*/ sel_setLabel_ = sel_registerName("setLabel:");
+public static final int /*long*/ sel_setLabel_forSegment_ = sel_registerName("setLabel:forSegment:");
+public static final int /*long*/ sel_setLeaf_ = sel_registerName("setLeaf:");
+public static final int /*long*/ sel_setLength_ = sel_registerName("setLength:");
+public static final int /*long*/ sel_setLevel_ = sel_registerName("setLevel:");
+public static final int /*long*/ sel_setLineBreakMode_ = sel_registerName("setLineBreakMode:");
+public static final int /*long*/ sel_setLineCapStyle_ = sel_registerName("setLineCapStyle:");
+public static final int /*long*/ sel_setLineDash_count_phase_ = sel_registerName("setLineDash:count:phase:");
+public static final int /*long*/ sel_setLineFragmentPadding_ = sel_registerName("setLineFragmentPadding:");
+public static final int /*long*/ sel_setLineFragmentRect_forGlyphRange_usedRect_ = sel_registerName("setLineFragmentRect:forGlyphRange:usedRect:");
+public static final int /*long*/ sel_setLineJoinStyle_ = sel_registerName("setLineJoinStyle:");
+public static final int /*long*/ sel_setLineSpacing_ = sel_registerName("setLineSpacing:");
+public static final int /*long*/ sel_setLineWidth_ = sel_registerName("setLineWidth:");
+public static final int /*long*/ sel_setLinkTextAttributes_ = sel_registerName("setLinkTextAttributes:");
+public static final int /*long*/ sel_setMainMenu_ = sel_registerName("setMainMenu:");
+public static final int /*long*/ sel_setMarkedText_selectedRange_ = sel_registerName("setMarkedText:selectedRange:");
+public static final int /*long*/ sel_setMaxSize_ = sel_registerName("setMaxSize:");
+public static final int /*long*/ sel_setMaxValue_ = sel_registerName("setMaxValue:");
+public static final int /*long*/ sel_setMaximum_ = sel_registerName("setMaximum:");
+public static final int /*long*/ sel_setMaximumFractionDigits_ = sel_registerName("setMaximumFractionDigits:");
+public static final int /*long*/ sel_setMaximumIntegerDigits_ = sel_registerName("setMaximumIntegerDigits:");
+public static final int /*long*/ sel_setMenu_ = sel_registerName("setMenu:");
+public static final int /*long*/ sel_setMenu_forSegment_ = sel_registerName("setMenu:forSegment:");
+public static final int /*long*/ sel_setMessage_ = sel_registerName("setMessage:");
+public static final int /*long*/ sel_setMessageText_ = sel_registerName("setMessageText:");
+public static final int /*long*/ sel_setMinSize_ = sel_registerName("setMinSize:");
+public static final int /*long*/ sel_setMinValue_ = sel_registerName("setMinValue:");
+public static final int /*long*/ sel_setMinWidth_ = sel_registerName("setMinWidth:");
+public static final int /*long*/ sel_setMinimum_ = sel_registerName("setMinimum:");
+public static final int /*long*/ sel_setMinimumFractionDigits_ = sel_registerName("setMinimumFractionDigits:");
+public static final int /*long*/ sel_setMinimumIntegerDigits_ = sel_registerName("setMinimumIntegerDigits:");
+public static final int /*long*/ sel_setMiterLimit_ = sel_registerName("setMiterLimit:");
+public static final int /*long*/ sel_setNeedsDisplay_ = sel_registerName("setNeedsDisplay:");
+public static final int /*long*/ sel_setNeedsDisplayInRect_ = sel_registerName("setNeedsDisplayInRect:");
+public static final int /*long*/ sel_setNumberOfVisibleItems_ = sel_registerName("setNumberOfVisibleItems:");
+public static final int /*long*/ sel_setNumberStyle_ = sel_registerName("setNumberStyle:");
+public static final int /*long*/ sel_setObject_forKey_ = sel_registerName("setObject:forKey:");
+public static final int /*long*/ sel_setObjectValue_ = sel_registerName("setObjectValue:");
+public static final int /*long*/ sel_setOnMouseEntered_ = sel_registerName("setOnMouseEntered:");
+public static final int /*long*/ sel_setOpaque_ = sel_registerName("setOpaque:");
+public static final int /*long*/ sel_setOptions_ = sel_registerName("setOptions:");
+public static final int /*long*/ sel_setOrientation_ = sel_registerName("setOrientation:");
+public static final int /*long*/ sel_setOutlineTableColumn_ = sel_registerName("setOutlineTableColumn:");
+public static final int /*long*/ sel_setPaletteLabel_ = sel_registerName("setPaletteLabel:");
+public static final int /*long*/ sel_setPanelFont_isMultiple_ = sel_registerName("setPanelFont:isMultiple:");
+public static final int /*long*/ sel_setPartialStringValidationEnabled_ = sel_registerName("setPartialStringValidationEnabled:");
+public static final int /*long*/ sel_setPatternPhase_ = sel_registerName("setPatternPhase:");
+public static final int /*long*/ sel_setPlaceholderString_ = sel_registerName("setPlaceholderString:");
+public static final int /*long*/ sel_setPolicyDelegate_ = sel_registerName("setPolicyDelegate:");
+public static final int /*long*/ sel_setPreferences_ = sel_registerName("setPreferences:");
+public static final int /*long*/ sel_setPrinter_ = sel_registerName("setPrinter:");
+public static final int /*long*/ sel_setPropertyList_forType_ = sel_registerName("setPropertyList:forType:");
+public static final int /*long*/ sel_setPullsDown_ = sel_registerName("setPullsDown:");
+public static final int /*long*/ sel_setReleasedWhenClosed_ = sel_registerName("setReleasedWhenClosed:");
+public static final int /*long*/ sel_setResizingMask_ = sel_registerName("setResizingMask:");
+public static final int /*long*/ sel_setResourceLoadDelegate_ = sel_registerName("setResourceLoadDelegate:");
+public static final int /*long*/ sel_setRichText_ = sel_registerName("setRichText:");
+public static final int /*long*/ sel_setRowHeight_ = sel_registerName("setRowHeight:");
+public static final int /*long*/ sel_setScrollable_ = sel_registerName("setScrollable:");
+public static final int /*long*/ sel_setSearchButtonCell_ = sel_registerName("setSearchButtonCell:");
+public static final int /*long*/ sel_setSegmentCount_ = sel_registerName("setSegmentCount:");
+public static final int /*long*/ sel_setSegmentStyle_ = sel_registerName("setSegmentStyle:");
+public static final int /*long*/ sel_setSelectable_ = sel_registerName("setSelectable:");
+public static final int /*long*/ sel_setSelected_forSegment_ = sel_registerName("setSelected:forSegment:");
+public static final int /*long*/ sel_setSelectedRange_ = sel_registerName("setSelectedRange:");
+public static final int /*long*/ sel_setSelectedSegment_ = sel_registerName("setSelectedSegment:");
+public static final int /*long*/ sel_setServicesMenu_ = sel_registerName("setServicesMenu:");
+public static final int /*long*/ sel_setShouldAntialias_ = sel_registerName("setShouldAntialias:");
+public static final int /*long*/ sel_setShowsPrintPanel_ = sel_registerName("setShowsPrintPanel:");
+public static final int /*long*/ sel_setShowsProgressPanel_ = sel_registerName("setShowsProgressPanel:");
+public static final int /*long*/ sel_setShowsResizeIndicator_ = sel_registerName("setShowsResizeIndicator:");
+public static final int /*long*/ sel_setShowsToolbarButton_ = sel_registerName("setShowsToolbarButton:");
+public static final int /*long*/ sel_setSize_ = sel_registerName("setSize:");
+public static final int /*long*/ sel_setState_ = sel_registerName("setState:");
+public static final int /*long*/ sel_setString_ = sel_registerName("setString:");
+public static final int /*long*/ sel_setString_forType_ = sel_registerName("setString:forType:");
+public static final int /*long*/ sel_setStringValue_ = sel_registerName("setStringValue:");
+public static final int /*long*/ sel_setStroke = sel_registerName("setStroke");
+public static final int /*long*/ sel_setSubmenu_ = sel_registerName("setSubmenu:");
+public static final int /*long*/ sel_setSubmenu_forItem_ = sel_registerName("setSubmenu:forItem:");
+public static final int /*long*/ sel_setTabStops_ = sel_registerName("setTabStops:");
+public static final int /*long*/ sel_setTabViewType_ = sel_registerName("setTabViewType:");
+public static final int /*long*/ sel_setTag_forSegment_ = sel_registerName("setTag:forSegment:");
+public static final int /*long*/ sel_setTarget_ = sel_registerName("setTarget:");
+public static final int /*long*/ sel_setTextColor_ = sel_registerName("setTextColor:");
+public static final int /*long*/ sel_setTextStorage_ = sel_registerName("setTextStorage:");
+public static final int /*long*/ sel_setTitle_ = sel_registerName("setTitle:");
+public static final int /*long*/ sel_setTitleFont_ = sel_registerName("setTitleFont:");
+public static final int /*long*/ sel_setTitlePosition_ = sel_registerName("setTitlePosition:");
+public static final int /*long*/ sel_setToolTip_ = sel_registerName("setToolTip:");
+public static final int /*long*/ sel_setToolTip_forSegment_ = sel_registerName("setToolTip:forSegment:");
+public static final int /*long*/ sel_setToolbar_ = sel_registerName("setToolbar:");
+public static final int /*long*/ sel_setTrackingMode_ = sel_registerName("setTrackingMode:");
+public static final int /*long*/ sel_setTransformStruct_ = sel_registerName("setTransformStruct:");
+public static final int /*long*/ sel_setUIDelegate_ = sel_registerName("setUIDelegate:");
+public static final int /*long*/ sel_setURL_ = sel_registerName("setURL:");
+public static final int /*long*/ sel_setUpPrintOperationDefaultValues = sel_registerName("setUpPrintOperationDefaultValues");
+public static final int /*long*/ sel_setUsesAlternatingRowBackgroundColors_ = sel_registerName("setUsesAlternatingRowBackgroundColors:");
+public static final int /*long*/ sel_setUsesThreadedAnimation_ = sel_registerName("setUsesThreadedAnimation:");
+public static final int /*long*/ sel_setValue_forKey_ = sel_registerName("setValue:forKey:");
+public static final int /*long*/ sel_setValueWraps_ = sel_registerName("setValueWraps:");
+public static final int /*long*/ sel_setVerticalScroller_ = sel_registerName("setVerticalScroller:");
+public static final int /*long*/ sel_setView_ = sel_registerName("setView:");
+public static final int /*long*/ sel_setVisible_ = sel_registerName("setVisible:");
+public static final int /*long*/ sel_setWidth_ = sel_registerName("setWidth:");
+public static final int /*long*/ sel_setWidth_forSegment_ = sel_registerName("setWidth:forSegment:");
+public static final int /*long*/ sel_setWidthTracksTextView_ = sel_registerName("setWidthTracksTextView:");
+public static final int /*long*/ sel_setWindingRule_ = sel_registerName("setWindingRule:");
+public static final int /*long*/ sel_setWorksWhenModal_ = sel_registerName("setWorksWhenModal:");
+public static final int /*long*/ sel_setWraps_ = sel_registerName("setWraps:");
+public static final int /*long*/ sel_sharedApplication = sel_registerName("sharedApplication");
+public static final int /*long*/ sel_sharedColorPanel = sel_registerName("sharedColorPanel");
+public static final int /*long*/ sel_sharedFontManager = sel_registerName("sharedFontManager");
+public static final int /*long*/ sel_sharedFontPanel = sel_registerName("sharedFontPanel");
+public static final int /*long*/ sel_sharedHTTPCookieStorage = sel_registerName("sharedHTTPCookieStorage");
+public static final int /*long*/ sel_sharedPrintInfo = sel_registerName("sharedPrintInfo");
+public static final int /*long*/ sel_sharedWorkspace = sel_registerName("sharedWorkspace");
+public static final int /*long*/ sel_shiftKey = sel_registerName("shiftKey");
+public static final int /*long*/ sel_shouldAntialias = sel_registerName("shouldAntialias");
+public static final int /*long*/ sel_shouldChangeTextInRange_replacementString_ = sel_registerName("shouldChangeTextInRange:replacementString:");
+public static final int /*long*/ sel_shouldDelayWindowOrderingForEvent_ = sel_registerName("shouldDelayWindowOrderingForEvent:");
+public static final int /*long*/ sel_size = sel_registerName("size");
+public static final int /*long*/ sel_sizeToFit = sel_registerName("sizeToFit");
+public static final int /*long*/ sel_sizeValue = sel_registerName("sizeValue");
+public static final int /*long*/ sel_skipDescendents = sel_registerName("skipDescendents");
+public static final int /*long*/ sel_smallSystemFontSize = sel_registerName("smallSystemFontSize");
+public static final int /*long*/ sel_sortIndicatorRectForBounds_ = sel_registerName("sortIndicatorRectForBounds:");
+public static final int /*long*/ sel_standardPreferences = sel_registerName("standardPreferences");
+public static final int /*long*/ sel_standardWindowButton_ = sel_registerName("standardWindowButton:");
+public static final int /*long*/ sel_startAnimation_ = sel_registerName("startAnimation:");
+public static final int /*long*/ sel_state = sel_registerName("state");
+public static final int /*long*/ sel_statusItemWithLength_ = sel_registerName("statusItemWithLength:");
+public static final int /*long*/ sel_stop_ = sel_registerName("stop:");
+public static final int /*long*/ sel_stopAnimation_ = sel_registerName("stopAnimation:");
+public static final int /*long*/ sel_stopLoading_ = sel_registerName("stopLoading:");
+public static final int /*long*/ sel_string = sel_registerName("string");
+public static final int /*long*/ sel_stringByAddingPercentEscapesUsingEncoding_ = sel_registerName("stringByAddingPercentEscapesUsingEncoding:");
+public static final int /*long*/ sel_stringByAppendingPathComponent_ = sel_registerName("stringByAppendingPathComponent:");
+public static final int /*long*/ sel_stringByAppendingString_ = sel_registerName("stringByAppendingString:");
+public static final int /*long*/ sel_stringByDeletingLastPathComponent = sel_registerName("stringByDeletingLastPathComponent");
+public static final int /*long*/ sel_stringByDeletingPathExtension = sel_registerName("stringByDeletingPathExtension");
+public static final int /*long*/ sel_stringByEvaluatingJavaScriptFromString_ = sel_registerName("stringByEvaluatingJavaScriptFromString:");
+public static final int /*long*/ sel_stringByReplacingOccurrencesOfString_withString_ = sel_registerName("stringByReplacingOccurrencesOfString:withString:");
+public static final int /*long*/ sel_stringForObjectValue_ = sel_registerName("stringForObjectValue:");
+public static final int /*long*/ sel_stringForType_ = sel_registerName("stringForType:");
+public static final int /*long*/ sel_stringValue = sel_registerName("stringValue");
+public static final int /*long*/ sel_stringWithCharacters_length_ = sel_registerName("stringWithCharacters:length:");
+public static final int /*long*/ sel_stringWithFormat_ = sel_registerName("stringWithFormat:");
+public static final int /*long*/ sel_stringWithUTF8String_ = sel_registerName("stringWithUTF8String:");
+public static final int /*long*/ sel_stroke = sel_registerName("stroke");
+public static final int /*long*/ sel_strokeRect_ = sel_registerName("strokeRect:");
+public static final int /*long*/ sel_styleMask = sel_registerName("styleMask");
+public static final int /*long*/ sel_submenu = sel_registerName("submenu");
+public static final int /*long*/ sel_subviews = sel_registerName("subviews");
+public static final int /*long*/ sel_superclass = sel_registerName("superclass");
+public static final int /*long*/ sel_superview = sel_registerName("superview");
+public static final int /*long*/ sel_systemFontOfSize_ = sel_registerName("systemFontOfSize:");
+public static final int /*long*/ sel_systemFontSize = sel_registerName("systemFontSize");
+public static final int /*long*/ sel_systemFontSizeForControlSize_ = sel_registerName("systemFontSizeForControlSize:");
+public static final int /*long*/ sel_systemStatusBar = sel_registerName("systemStatusBar");
+public static final int /*long*/ sel_systemVersion = sel_registerName("systemVersion");
+public static final int /*long*/ sel_tabStopType = sel_registerName("tabStopType");
+public static final int /*long*/ sel_tabStops = sel_registerName("tabStops");
+public static final int /*long*/ sel_tabView_didSelectTabViewItem_ = sel_registerName("tabView:didSelectTabViewItem:");
+public static final int /*long*/ sel_tabView_shouldSelectTabViewItem_ = sel_registerName("tabView:shouldSelectTabViewItem:");
+public static final int /*long*/ sel_tabView_willSelectTabViewItem_ = sel_registerName("tabView:willSelectTabViewItem:");
+public static final int /*long*/ sel_tabViewItemAtPoint_ = sel_registerName("tabViewItemAtPoint:");
+public static final int /*long*/ sel_tableColumns = sel_registerName("tableColumns");
+public static final int /*long*/ sel_tableView_acceptDrop_row_dropOperation_ = sel_registerName("tableView:acceptDrop:row:dropOperation:");
+public static final int /*long*/ sel_tableView_didClickTableColumn_ = sel_registerName("tableView:didClickTableColumn:");
+public static final int /*long*/ sel_tableView_objectValueForTableColumn_row_ = sel_registerName("tableView:objectValueForTableColumn:row:");
+public static final int /*long*/ sel_tableView_setObjectValue_forTableColumn_row_ = sel_registerName("tableView:setObjectValue:forTableColumn:row:");
+public static final int /*long*/ sel_tableView_shouldEditTableColumn_row_ = sel_registerName("tableView:shouldEditTableColumn:row:");
+public static final int /*long*/ sel_tableView_validateDrop_proposedRow_proposedDropOperation_ = sel_registerName("tableView:validateDrop:proposedRow:proposedDropOperation:");
+public static final int /*long*/ sel_tableView_willDisplayCell_forTableColumn_row_ = sel_registerName("tableView:willDisplayCell:forTableColumn:row:");
+public static final int /*long*/ sel_tableView_writeRowsWithIndexes_toPasteboard_ = sel_registerName("tableView:writeRowsWithIndexes:toPasteboard:");
+public static final int /*long*/ sel_tableViewColumnDidMove_ = sel_registerName("tableViewColumnDidMove:");
+public static final int /*long*/ sel_tableViewColumnDidResize_ = sel_registerName("tableViewColumnDidResize:");
+public static final int /*long*/ sel_tableViewSelectionDidChange_ = sel_registerName("tableViewSelectionDidChange:");
+public static final int /*long*/ sel_target = sel_registerName("target");
+public static final int /*long*/ sel_terminate_ = sel_registerName("terminate:");
+public static final int /*long*/ sel_textBackgroundColor = sel_registerName("textBackgroundColor");
+public static final int /*long*/ sel_textColor = sel_registerName("textColor");
+public static final int /*long*/ sel_textContainer = sel_registerName("textContainer");
+public static final int /*long*/ sel_textDidChange_ = sel_registerName("textDidChange:");
+public static final int /*long*/ sel_textDidEndEditing_ = sel_registerName("textDidEndEditing:");
+public static final int /*long*/ sel_textStorage = sel_registerName("textStorage");
+public static final int /*long*/ sel_textView_clickedOnLink_atIndex_ = sel_registerName("textView:clickedOnLink:atIndex:");
+public static final int /*long*/ sel_textView_willChangeSelectionFromCharacterRange_toCharacterRange_ = sel_registerName("textView:willChangeSelectionFromCharacterRange:toCharacterRange:");
+public static final int /*long*/ sel_textViewDidChangeSelection_ = sel_registerName("textViewDidChangeSelection:");
+public static final int /*long*/ sel_threadDictionary = sel_registerName("threadDictionary");
+public static final int /*long*/ sel_tile = sel_registerName("tile");
+public static final int /*long*/ sel_timeZone = sel_registerName("timeZone");
+public static final int /*long*/ sel_timestamp = sel_registerName("timestamp");
+public static final int /*long*/ sel_title = sel_registerName("title");
+public static final int /*long*/ sel_titleCell = sel_registerName("titleCell");
+public static final int /*long*/ sel_titleFont = sel_registerName("titleFont");
+public static final int /*long*/ sel_titleOfSelectedItem = sel_registerName("titleOfSelectedItem");
+public static final int /*long*/ sel_titleRectForBounds_ = sel_registerName("titleRectForBounds:");
+public static final int /*long*/ sel_toggleToolbarShown_ = sel_registerName("toggleToolbarShown:");
+public static final int /*long*/ sel_toolbar = sel_registerName("toolbar");
+public static final int /*long*/ sel_toolbar_itemForItemIdentifier_willBeInsertedIntoToolbar_ = sel_registerName("toolbar:itemForItemIdentifier:willBeInsertedIntoToolbar:");
+public static final int /*long*/ sel_toolbarAllowedItemIdentifiers_ = sel_registerName("toolbarAllowedItemIdentifiers:");
+public static final int /*long*/ sel_toolbarDefaultItemIdentifiers_ = sel_registerName("toolbarDefaultItemIdentifiers:");
+public static final int /*long*/ sel_toolbarDidRemoveItem_ = sel_registerName("toolbarDidRemoveItem:");
+public static final int /*long*/ sel_toolbarSelectableItemIdentifiers_ = sel_registerName("toolbarSelectableItemIdentifiers:");
+public static final int /*long*/ sel_toolbarWillAddItem_ = sel_registerName("toolbarWillAddItem:");
+public static final int /*long*/ sel_trackingAreas = sel_registerName("trackingAreas");
+public static final int /*long*/ sel_traitsOfFont_ = sel_registerName("traitsOfFont:");
+public static final int /*long*/ sel_transform = sel_registerName("transform");
+public static final int /*long*/ sel_transformPoint_ = sel_registerName("transformPoint:");
+public static final int /*long*/ sel_transformSize_ = sel_registerName("transformSize:");
+public static final int /*long*/ sel_transformStruct = sel_registerName("transformStruct");
+public static final int /*long*/ sel_transformUsingAffineTransform_ = sel_registerName("transformUsingAffineTransform:");
+public static final int /*long*/ sel_translateXBy_yBy_ = sel_registerName("translateXBy:yBy:");
+public static final int /*long*/ sel_type = sel_registerName("type");
+public static final int /*long*/ sel_types = sel_registerName("types");
+public static final int /*long*/ sel_typesetter = sel_registerName("typesetter");
+public static final int /*long*/ sel_unarchiveObjectWithData_ = sel_registerName("unarchiveObjectWithData:");
+public static final int /*long*/ sel_undefined = sel_registerName("undefined");
+public static final int /*long*/ sel_unhideAllApplications_ = sel_registerName("unhideAllApplications:");
+public static final int /*long*/ sel_unlockFocus = sel_registerName("unlockFocus");
+public static final int /*long*/ sel_unmarkText = sel_registerName("unmarkText");
+public static final int /*long*/ sel_unregisterDraggedTypes = sel_registerName("unregisterDraggedTypes");
+public static final int /*long*/ sel_update = sel_registerName("update");
+public static final int /*long*/ sel_updateTrackingAreas = sel_registerName("updateTrackingAreas");
+public static final int /*long*/ sel_use = sel_registerName("use");
+public static final int /*long*/ sel_useCredential_forAuthenticationChallenge_ = sel_registerName("useCredential:forAuthenticationChallenge:");
+public static final int /*long*/ sel_usedRectForTextContainer_ = sel_registerName("usedRectForTextContainer:");
+public static final int /*long*/ sel_user = sel_registerName("user");
+public static final int /*long*/ sel_userInfo = sel_registerName("userInfo");
+public static final int /*long*/ sel_usesAlternatingRowBackgroundColors = sel_registerName("usesAlternatingRowBackgroundColors");
+public static final int /*long*/ sel_validAttributesForMarkedText = sel_registerName("validAttributesForMarkedText");
+public static final int /*long*/ sel_validateVisibleColumns = sel_registerName("validateVisibleColumns");
+public static final int /*long*/ sel_value = sel_registerName("value");
+public static final int /*long*/ sel_valueForKey_ = sel_registerName("valueForKey:");
+public static final int /*long*/ sel_valueWithPoint_ = sel_registerName("valueWithPoint:");
+public static final int /*long*/ sel_valueWithRange_ = sel_registerName("valueWithRange:");
+public static final int /*long*/ sel_valueWithRect_ = sel_registerName("valueWithRect:");
+public static final int /*long*/ sel_valueWithSize_ = sel_registerName("valueWithSize:");
+public static final int /*long*/ sel_view = sel_registerName("view");
+public static final int /*long*/ sel_view_stringForToolTip_point_userData_ = sel_registerName("view:stringForToolTip:point:userData:");
+public static final int /*long*/ sel_viewDidMoveToWindow = sel_registerName("viewDidMoveToWindow");
+public static final int /*long*/ sel_visibleFrame = sel_registerName("visibleFrame");
+public static final int /*long*/ sel_visibleRect = sel_registerName("visibleRect");
+public static final int /*long*/ sel_wantsPeriodicDraggingUpdates = sel_registerName("wantsPeriodicDraggingUpdates");
+public static final int /*long*/ sel_wantsToHandleMouseEvents = sel_registerName("wantsToHandleMouseEvents");
+public static final int /*long*/ sel_webFrame = sel_registerName("webFrame");
+public static final int /*long*/ sel_webScriptValueAtIndex_ = sel_registerName("webScriptValueAtIndex:");
+public static final int /*long*/ sel_webView_contextMenuItemsForElement_defaultMenuItems_ = sel_registerName("webView:contextMenuItemsForElement:defaultMenuItems:");
+public static final int /*long*/ sel_webView_createWebViewWithRequest_ = sel_registerName("webView:createWebViewWithRequest:");
+public static final int /*long*/ sel_webView_decidePolicyForMIMEType_request_frame_decisionListener_ = sel_registerName("webView:decidePolicyForMIMEType:request:frame:decisionListener:");
+public static final int /*long*/ sel_webView_decidePolicyForNavigationAction_request_frame_decisionListener_ = sel_registerName("webView:decidePolicyForNavigationAction:request:frame:decisionListener:");
+public static final int /*long*/ sel_webView_decidePolicyForNewWindowAction_request_newFrameName_decisionListener_ = sel_registerName("webView:decidePolicyForNewWindowAction:request:newFrameName:decisionListener:");
+public static final int /*long*/ sel_webView_didChangeLocationWithinPageForFrame_ = sel_registerName("webView:didChangeLocationWithinPageForFrame:");
+public static final int /*long*/ sel_webView_didCommitLoadForFrame_ = sel_registerName("webView:didCommitLoadForFrame:");
+public static final int /*long*/ sel_webView_didFailProvisionalLoadWithError_forFrame_ = sel_registerName("webView:didFailProvisionalLoadWithError:forFrame:");
+public static final int /*long*/ sel_webView_didFinishLoadForFrame_ = sel_registerName("webView:didFinishLoadForFrame:");
+public static final int /*long*/ sel_webView_didReceiveTitle_forFrame_ = sel_registerName("webView:didReceiveTitle:forFrame:");
+public static final int /*long*/ sel_webView_didStartProvisionalLoadForFrame_ = sel_registerName("webView:didStartProvisionalLoadForFrame:");
+public static final int /*long*/ sel_webView_identifierForInitialRequest_fromDataSource_ = sel_registerName("webView:identifierForInitialRequest:fromDataSource:");
+public static final int /*long*/ sel_webView_mouseDidMoveOverElement_modifierFlags_ = sel_registerName("webView:mouseDidMoveOverElement:modifierFlags:");
+public static final int /*long*/ sel_webView_printFrameView_ = sel_registerName("webView:printFrameView:");
+public static final int /*long*/ sel_webView_resource_didFailLoadingWithError_fromDataSource_ = sel_registerName("webView:resource:didFailLoadingWithError:fromDataSource:");
+public static final int /*long*/ sel_webView_resource_didFinishLoadingFromDataSource_ = sel_registerName("webView:resource:didFinishLoadingFromDataSource:");
+public static final int /*long*/ sel_webView_resource_didReceiveAuthenticationChallenge_fromDataSource_ = sel_registerName("webView:resource:didReceiveAuthenticationChallenge:fromDataSource:");
+public static final int /*long*/ sel_webView_resource_willSendRequest_redirectResponse_fromDataSource_ = sel_registerName("webView:resource:willSendRequest:redirectResponse:fromDataSource:");
+public static final int /*long*/ sel_webView_runJavaScriptAlertPanelWithMessage_ = sel_registerName("webView:runJavaScriptAlertPanelWithMessage:");
+public static final int /*long*/ sel_webView_runJavaScriptConfirmPanelWithMessage_ = sel_registerName("webView:runJavaScriptConfirmPanelWithMessage:");
+public static final int /*long*/ sel_webView_runOpenPanelForFileButtonWithResultListener_ = sel_registerName("webView:runOpenPanelForFileButtonWithResultListener:");
+public static final int /*long*/ sel_webView_setFrame_ = sel_registerName("webView:setFrame:");
+public static final int /*long*/ sel_webView_setResizable_ = sel_registerName("webView:setResizable:");
+public static final int /*long*/ sel_webView_setStatusBarVisible_ = sel_registerName("webView:setStatusBarVisible:");
+public static final int /*long*/ sel_webView_setStatusText_ = sel_registerName("webView:setStatusText:");
+public static final int /*long*/ sel_webView_setToolbarsVisible_ = sel_registerName("webView:setToolbarsVisible:");
+public static final int /*long*/ sel_webView_unableToImplementPolicyWithError_frame_ = sel_registerName("webView:unableToImplementPolicyWithError:frame:");
+public static final int /*long*/ sel_webView_windowScriptObjectAvailable_ = sel_registerName("webView:windowScriptObjectAvailable:");
+public static final int /*long*/ sel_webViewClose_ = sel_registerName("webViewClose:");
+public static final int /*long*/ sel_webViewFocus_ = sel_registerName("webViewFocus:");
+public static final int /*long*/ sel_webViewShow_ = sel_registerName("webViewShow:");
+public static final int /*long*/ sel_webViewUnfocus_ = sel_registerName("webViewUnfocus:");
+public static final int /*long*/ sel_weightOfFont_ = sel_registerName("weightOfFont:");
+public static final int /*long*/ sel_wheelDelta = sel_registerName("wheelDelta");
+public static final int /*long*/ sel_width = sel_registerName("width");
+public static final int /*long*/ sel_window = sel_registerName("window");
+public static final int /*long*/ sel_windowBackgroundColor = sel_registerName("windowBackgroundColor");
+public static final int /*long*/ sel_windowDidBecomeKey_ = sel_registerName("windowDidBecomeKey:");
+public static final int /*long*/ sel_windowDidMove_ = sel_registerName("windowDidMove:");
+public static final int /*long*/ sel_windowDidResignKey_ = sel_registerName("windowDidResignKey:");
+public static final int /*long*/ sel_windowDidResize_ = sel_registerName("windowDidResize:");
+public static final int /*long*/ sel_windowFrameColor = sel_registerName("windowFrameColor");
+public static final int /*long*/ sel_windowFrameTextColor = sel_registerName("windowFrameTextColor");
+public static final int /*long*/ sel_windowNumber = sel_registerName("windowNumber");
+public static final int /*long*/ sel_windowShouldClose_ = sel_registerName("windowShouldClose:");
+public static final int /*long*/ sel_windowWillClose_ = sel_registerName("windowWillClose:");
+public static final int /*long*/ sel_windows = sel_registerName("windows");
+public static final int /*long*/ sel_worksWhenModal = sel_registerName("worksWhenModal");
+public static final int /*long*/ sel_wraps = sel_registerName("wraps");
+public static final int /*long*/ sel_writeToPasteboard_ = sel_registerName("writeToPasteboard:");
+public static final int /*long*/ sel_yearOfCommonEra = sel_registerName("yearOfCommonEra");
+public static final int /*long*/ sel_zoom_ = sel_registerName("zoom:");
+
+/** Constants */
+public static final int NSAlertFirstButtonReturn = 1000;
+public static final int NSAlertSecondButtonReturn = 1001;
+public static final int NSAlertThirdButtonReturn = 1002;
+public static final int NSAlphaFirstBitmapFormat = 1;
+public static final int NSAlphaNonpremultipliedBitmapFormat = 2;
+public static final int NSAlternateKeyMask = 524288;
+public static final int NSApplicationDefined = 15;
+public static final int NSAtTop = 2;
+public static final int NSBackingStoreBuffered = 2;
+public static final int NSBackspaceCharacter = 8;
+public static final int NSBevelLineJoinStyle = 2;
+public static final int NSBezelBorder = 2;
+public static final int NSBoldFontMask = 2;
+public static final int NSBorderlessWindowMask = 0;
+public static final int NSBottomTabsBezelBorder = 2;
+public static final int NSBoxCustom = 4;
+public static final int NSBoxSeparator = 2;
+public static final int NSButtLineCapStyle = 0;
+public static final int NSCancelButton = 0;
+public static final int NSCarriageReturnCharacter = 13;
+public static final int NSCenterTextAlignment = 2;
+public static final int NSClockAndCalendarDatePickerStyle = 1;
+public static final int NSClosableWindowMask = 2;
+public static final int NSClosePathBezierPathElement = 3;
+public static final int NSCommandKeyMask = 1048576;
+public static final int NSCompositeClear = 0;
+public static final int NSCompositeCopy = 1;
+public static final int NSCompositeSourceOver = 2;
+public static final int NSCompositeXOR = 10;
+public static final int NSControlKeyMask = 262144;
+public static final int NSCriticalAlertStyle = 2;
+public static final int NSCurveToBezierPathElement = 2;
+public static final int NSDeleteCharacter = 127;
+public static final int NSDeviceIndependentModifierFlagsMask = -65536;
+public static final int NSDragOperationCopy = 1;
+public static final int NSDragOperationDelete = 32;
+public static final int NSDragOperationEvery = -1;
+public static final int NSDragOperationLink = 2;
+public static final int NSDragOperationMove = 16;
+public static final int NSDragOperationNone = 0;
+public static final int NSEnterCharacter = 3;
+public static final int NSEvenOddWindingRule = 1;
+public static final int NSFileHandlingPanelOKButton = 1;
+public static final int NSFlagsChanged = 12;
+public static final int NSFocusRingTypeNone = 1;
+public static final int NSHelpFunctionKey = 63302;
+public static final int NSHelpKeyMask = 4194304;
+public static final int NSHourMinuteDatePickerElementFlag = 12;
+public static final int NSHourMinuteSecondDatePickerElementFlag = 14;
+public static final int NSImageAbove = 5;
+public static final int NSImageAlignCenter = 0;
+public static final int NSImageAlignLeft = 4;
+public static final int NSImageAlignRight = 8;
+public static final int NSImageCacheNever = 3;
+public static final int NSImageInterpolationDefault = 0;
+public static final int NSImageInterpolationHigh = 3;
+public static final int NSImageInterpolationLow = 2;
+public static final int NSImageInterpolationNone = 1;
+public static final int NSImageLeft = 2;
+public static final int NSImageOnly = 1;
+public static final int NSImageOverlaps = 6;
+public static final int NSInformationalAlertStyle = 1;
+public static final int NSItalicFontMask = 1;
+public static final int NSJustifiedTextAlignment = 3;
+public static final int NSKeyDown = 10;
+public static final int NSKeyUp = 11;
+public static final int NSLandscapeOrientation = 1;
+public static final int NSLeftMouseDown = 1;
+public static final int NSLeftMouseDownMask = 2;
+public static final int NSLeftMouseDragged = 6;
+public static final int NSLeftMouseDraggedMask = 64;
+public static final int NSLeftMouseUp = 2;
+public static final int NSLeftMouseUpMask = 4;
+public static final int NSLeftTabStopType = 0;
+public static final int NSLeftTextAlignment = 0;
+public static final int NSLineBreakByClipping = 2;
+public static final int NSLineBreakByWordWrapping = 0;
+public static final int NSLineToBezierPathElement = 1;
+public static final int NSMiniaturizableWindowMask = 4;
+public static final int NSMiterLineJoinStyle = 0;
+public static final int NSMixedState = -1;
+public static final int NSMomentaryLightButton = 0;
+public static final int NSMouseEntered = 8;
+public static final int NSMouseExited = 9;
+public static final int NSMouseMoved = 5;
+public static final int NSMoveToBezierPathElement = 0;
+public static final int NSNewlineCharacter = 10;
+public static final int NSNoBorder = 0;
+public static final int NSNoImage = 0;
+public static final int NSNoTitle = 0;
+public static final int NSNonZeroWindingRule = 0;
+public static final int NSOffState = 0;
+public static final int NSOnState = 1;
+public static final int NSOpenGLPFAAccumSize = 14;
+public static final int NSOpenGLPFAAlphaSize = 11;
+public static final int NSOpenGLPFAColorSize = 8;
+public static final int NSOpenGLPFADepthSize = 12;
+public static final int NSOpenGLPFADoubleBuffer = 5;
+public static final int NSOpenGLPFASampleBuffers = 55;
+public static final int NSOpenGLPFASamples = 56;
+public static final int NSOpenGLPFAStencilSize = 13;
+public static final int NSOpenGLPFAStereo = 6;
+public static final int NSOtherMouseDown = 25;
+public static final int NSOtherMouseDragged = 27;
+public static final int NSOtherMouseUp = 26;
+public static final int NSOutlineViewDropOnItemIndex = -1;
+public static final int NSPageDownFunctionKey = 63277;
+public static final int NSPageUpFunctionKey = 63276;
+public static final int NSPortraitOrientation = 0;
+public static final int NSPrintPanelShowsPageSetupAccessory = 256;
+public static final int NSProgressIndicatorPreferredThickness = 14;
+public static final int NSPushOnPushOffButton = 1;
+public static final int NSRadioButton = 4;
+public static final int NSRegularControlSize = 0;
+public static final int NSResizableWindowMask = 8;
+public static final int NSRightMouseDown = 3;
+public static final int NSRightMouseDragged = 7;
+public static final int NSRightMouseUp = 4;
+public static final int NSRightTextAlignment = 1;
+public static final int NSRoundLineCapStyle = 1;
+public static final int NSRoundLineJoinStyle = 1;
+public static final int NSRoundedBezelStyle = 1;
+public static final int NSScaleNone = 2;
+public static final int NSScrollWheel = 22;
+public static final int NSScrollerDecrementLine = 4;
+public static final int NSScrollerDecrementPage = 1;
+public static final int NSScrollerIncrementLine = 5;
+public static final int NSScrollerIncrementPage = 3;
+public static final int NSScrollerKnob = 2;
+public static final int NSShadowlessSquareBezelStyle = 6;
+public static final int NSShiftKeyMask = 131072;
+public static final int NSSmallControlSize = 1;
+public static final int NSSquareLineCapStyle = 2;
+public static final int NSStatusWindowLevel = 25;
+public static final int NSSwitchButton = 3;
+public static final int NSSystemDefined = 14;
+public static final int NSTabCharacter = 9;
+public static final int NSTableColumnNoResizing = 0;
+public static final int NSTableColumnUserResizingMask = 2;
+public static final int NSTableViewDropAbove = 1;
+public static final int NSTableViewDropOn = 0;
+public static final int NSTableViewNoColumnAutoresizing = 0;
+public static final int NSTextFieldAndStepperDatePickerStyle = 0;
+public static final int NSTitledWindowMask = 1;
+public static final int NSUnderlineStyleDouble = 9;
+public static final int NSUnderlineStyleNone = 0;
+public static final int NSUnderlineStyleSingle = 1;
+public static final int NSUnderlineStyleThick = 2;
+public static final int NSViewHeightSizable = 16;
+public static final int NSViewWidthSizable = 2;
+public static final int NSWarningAlertStyle = 0;
+public static final int NSWindowAbove = 1;
+public static final int NSWindowBelow = -1;
+public static final int NSYearMonthDatePickerElementFlag = 192;
+public static final int NSYearMonthDayDatePickerElementFlag = 224;
+public static final int kCFRunLoopBeforeWaiting = 32;
+public static final int kCFStringEncodingUTF8 = 134217984;
+public static final int kCGBlendModeDifference = 10;
+public static final int kCGEventFilterMaskPermitLocalKeyboardEvents = 2;
+public static final int kCGEventFilterMaskPermitLocalMouseEvents = 1;
+public static final int kCGEventFilterMaskPermitSystemDefinedEvents = 4;
+public static final int kCGEventSuppressionStateRemoteMouseDrag = 1;
+public static final int kCGEventSuppressionStateSuppressionInterval = 0;
+public static final int kCGImageAlphaFirst = 4;
+public static final int kCGImageAlphaNoneSkipFirst = 6;
+public static final int kCGImageAlphaOnly = 7;
+public static final int kCGKeyboardEventKeyboardType = 10;
+public static final int kCGLineCapButt = 0;
+public static final int kCGLineCapRound = 1;
+public static final int kCGLineCapSquare = 2;
+public static final int kCGLineJoinBevel = 2;
+public static final int kCGLineJoinMiter = 0;
+public static final int kCGLineJoinRound = 1;
+public static final int kCGPathElementAddCurveToPoint = 3;
+public static final int kCGPathElementAddLineToPoint = 1;
+public static final int kCGPathElementAddQuadCurveToPoint = 2;
+public static final int kCGPathElementCloseSubpath = 4;
+public static final int kCGPathElementMoveToPoint = 0;
+public static final int kCGPathStroke = 2;
+public static final int kCGSessionEventTap = 1;
+public static final int NSAllApplicationsDirectory = 100;
+public static final int NSAllDomainsMask = 65535;
+public static final int NSNotFound = 2147483647;
+public static final int NSOrderedSame = 0;
+public static final int NSURLCredentialPersistenceForSession = 1;
+public static final int NSURLErrorBadURL = -1000;
+public static final int NSURLRequestReloadIgnoringLocalCacheData = 1;
+public static final int NSUTF8StringEncoding = 4;
+
+/** Globals */
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityButtonRole();
+public static final NSString NSAccessibilityButtonRole = new NSString(NSAccessibilityButtonRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityCheckBoxRole();
+public static final NSString NSAccessibilityCheckBoxRole = new NSString(NSAccessibilityCheckBoxRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityChildrenAttribute();
+public static final NSString NSAccessibilityChildrenAttribute = new NSString(NSAccessibilityChildrenAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityColumnRole();
+public static final NSString NSAccessibilityColumnRole = new NSString(NSAccessibilityColumnRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityComboBoxRole();
+public static final NSString NSAccessibilityComboBoxRole = new NSString(NSAccessibilityComboBoxRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityConfirmAction();
+public static final NSString NSAccessibilityConfirmAction = new NSString(NSAccessibilityConfirmAction());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityContentsAttribute();
+public static final NSString NSAccessibilityContentsAttribute = new NSString(NSAccessibilityContentsAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityDescriptionAttribute();
+public static final NSString NSAccessibilityDescriptionAttribute = new NSString(NSAccessibilityDescriptionAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityDialogSubrole();
+public static final NSString NSAccessibilityDialogSubrole = new NSString(NSAccessibilityDialogSubrole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityEnabledAttribute();
+public static final NSString NSAccessibilityEnabledAttribute = new NSString(NSAccessibilityEnabledAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityExpandedAttribute();
+public static final NSString NSAccessibilityExpandedAttribute = new NSString(NSAccessibilityExpandedAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityFloatingWindowSubrole();
+public static final NSString NSAccessibilityFloatingWindowSubrole = new NSString(NSAccessibilityFloatingWindowSubrole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityFocusedAttribute();
+public static final NSString NSAccessibilityFocusedAttribute = new NSString(NSAccessibilityFocusedAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityFocusedUIElementChangedNotification();
+public static final NSString NSAccessibilityFocusedUIElementChangedNotification = new NSString(NSAccessibilityFocusedUIElementChangedNotification());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityGridRole();
+public static final NSString NSAccessibilityGridRole = new NSString(NSAccessibilityGridRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityGroupRole();
+public static final NSString NSAccessibilityGroupRole = new NSString(NSAccessibilityGroupRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityHelpAttribute();
+public static final NSString NSAccessibilityHelpAttribute = new NSString(NSAccessibilityHelpAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityHelpTagRole();
+public static final NSString NSAccessibilityHelpTagRole = new NSString(NSAccessibilityHelpTagRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityHorizontalOrientationValue();
+public static final NSString NSAccessibilityHorizontalOrientationValue = new NSString(NSAccessibilityHorizontalOrientationValue());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityHorizontalScrollBarAttribute();
+public static final NSString NSAccessibilityHorizontalScrollBarAttribute = new NSString(NSAccessibilityHorizontalScrollBarAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityImageRole();
+public static final NSString NSAccessibilityImageRole = new NSString(NSAccessibilityImageRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityIncrementorRole();
+public static final NSString NSAccessibilityIncrementorRole = new NSString(NSAccessibilityIncrementorRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityInsertionPointLineNumberAttribute();
+public static final NSString NSAccessibilityInsertionPointLineNumberAttribute = new NSString(NSAccessibilityInsertionPointLineNumberAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityLabelValueAttribute();
+public static final NSString NSAccessibilityLabelValueAttribute = new NSString(NSAccessibilityLabelValueAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityLineForIndexParameterizedAttribute();
+public static final NSString NSAccessibilityLineForIndexParameterizedAttribute = new NSString(NSAccessibilityLineForIndexParameterizedAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityLinkRole();
+public static final NSString NSAccessibilityLinkRole = new NSString(NSAccessibilityLinkRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityLinkTextAttribute();
+public static final NSString NSAccessibilityLinkTextAttribute = new NSString(NSAccessibilityLinkTextAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityListRole();
+public static final NSString NSAccessibilityListRole = new NSString(NSAccessibilityListRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityMaxValueAttribute();
+public static final NSString NSAccessibilityMaxValueAttribute = new NSString(NSAccessibilityMaxValueAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityMenuBarRole();
+public static final NSString NSAccessibilityMenuBarRole = new NSString(NSAccessibilityMenuBarRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityMenuButtonRole();
+public static final NSString NSAccessibilityMenuButtonRole = new NSString(NSAccessibilityMenuButtonRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityMenuItemRole();
+public static final NSString NSAccessibilityMenuItemRole = new NSString(NSAccessibilityMenuItemRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityMenuRole();
+public static final NSString NSAccessibilityMenuRole = new NSString(NSAccessibilityMenuRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityMinValueAttribute();
+public static final NSString NSAccessibilityMinValueAttribute = new NSString(NSAccessibilityMinValueAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityNextContentsAttribute();
+public static final NSString NSAccessibilityNextContentsAttribute = new NSString(NSAccessibilityNextContentsAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityNumberOfCharactersAttribute();
+public static final NSString NSAccessibilityNumberOfCharactersAttribute = new NSString(NSAccessibilityNumberOfCharactersAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityOrientationAttribute();
+public static final NSString NSAccessibilityOrientationAttribute = new NSString(NSAccessibilityOrientationAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityOutlineRole();
+public static final NSString NSAccessibilityOutlineRole = new NSString(NSAccessibilityOutlineRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityOutlineRowSubrole();
+public static final NSString NSAccessibilityOutlineRowSubrole = new NSString(NSAccessibilityOutlineRowSubrole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityParentAttribute();
+public static final NSString NSAccessibilityParentAttribute = new NSString(NSAccessibilityParentAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityPopUpButtonRole();
+public static final NSString NSAccessibilityPopUpButtonRole = new NSString(NSAccessibilityPopUpButtonRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityPositionAttribute();
+public static final NSString NSAccessibilityPositionAttribute = new NSString(NSAccessibilityPositionAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityPressAction();
+public static final NSString NSAccessibilityPressAction = new NSString(NSAccessibilityPressAction());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityPreviousContentsAttribute();
+public static final NSString NSAccessibilityPreviousContentsAttribute = new NSString(NSAccessibilityPreviousContentsAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityProgressIndicatorRole();
+public static final NSString NSAccessibilityProgressIndicatorRole = new NSString(NSAccessibilityProgressIndicatorRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityRTFForRangeParameterizedAttribute();
+public static final NSString NSAccessibilityRTFForRangeParameterizedAttribute = new NSString(NSAccessibilityRTFForRangeParameterizedAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityRadioButtonRole();
+public static final NSString NSAccessibilityRadioButtonRole = new NSString(NSAccessibilityRadioButtonRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityRadioGroupRole();
+public static final NSString NSAccessibilityRadioGroupRole = new NSString(NSAccessibilityRadioGroupRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityRangeForIndexParameterizedAttribute();
+public static final NSString NSAccessibilityRangeForIndexParameterizedAttribute = new NSString(NSAccessibilityRangeForIndexParameterizedAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityRangeForLineParameterizedAttribute();
+public static final NSString NSAccessibilityRangeForLineParameterizedAttribute = new NSString(NSAccessibilityRangeForLineParameterizedAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityRangeForPositionParameterizedAttribute();
+public static final NSString NSAccessibilityRangeForPositionParameterizedAttribute = new NSString(NSAccessibilityRangeForPositionParameterizedAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityRoleAttribute();
+public static final NSString NSAccessibilityRoleAttribute = new NSString(NSAccessibilityRoleAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityRoleDescriptionAttribute();
+public static final NSString NSAccessibilityRoleDescriptionAttribute = new NSString(NSAccessibilityRoleDescriptionAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityRowRole();
+public static final NSString NSAccessibilityRowRole = new NSString(NSAccessibilityRowRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityScrollAreaRole();
+public static final NSString NSAccessibilityScrollAreaRole = new NSString(NSAccessibilityScrollAreaRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityScrollBarRole();
+public static final NSString NSAccessibilityScrollBarRole = new NSString(NSAccessibilityScrollBarRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilitySelectedAttribute();
+public static final NSString NSAccessibilitySelectedAttribute = new NSString(NSAccessibilitySelectedAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilitySelectedChildrenAttribute();
+public static final NSString NSAccessibilitySelectedChildrenAttribute = new NSString(NSAccessibilitySelectedChildrenAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilitySelectedChildrenChangedNotification();
+public static final NSString NSAccessibilitySelectedChildrenChangedNotification = new NSString(NSAccessibilitySelectedChildrenChangedNotification());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilitySelectedTextAttribute();
+public static final NSString NSAccessibilitySelectedTextAttribute = new NSString(NSAccessibilitySelectedTextAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilitySelectedTextChangedNotification();
+public static final NSString NSAccessibilitySelectedTextChangedNotification = new NSString(NSAccessibilitySelectedTextChangedNotification());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilitySelectedTextRangeAttribute();
+public static final NSString NSAccessibilitySelectedTextRangeAttribute = new NSString(NSAccessibilitySelectedTextRangeAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilitySelectedTextRangesAttribute();
+public static final NSString NSAccessibilitySelectedTextRangesAttribute = new NSString(NSAccessibilitySelectedTextRangesAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityServesAsTitleForUIElementsAttribute();
+public static final NSString NSAccessibilityServesAsTitleForUIElementsAttribute = new NSString(NSAccessibilityServesAsTitleForUIElementsAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilitySizeAttribute();
+public static final NSString NSAccessibilitySizeAttribute = new NSString(NSAccessibilitySizeAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilitySliderRole();
+public static final NSString NSAccessibilitySliderRole = new NSString(NSAccessibilitySliderRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilitySortButtonRole();
+public static final NSString NSAccessibilitySortButtonRole = new NSString(NSAccessibilitySortButtonRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilitySplitterRole();
+public static final NSString NSAccessibilitySplitterRole = new NSString(NSAccessibilitySplitterRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityStandardWindowSubrole();
+public static final NSString NSAccessibilityStandardWindowSubrole = new NSString(NSAccessibilityStandardWindowSubrole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityStaticTextRole();
+public static final NSString NSAccessibilityStaticTextRole = new NSString(NSAccessibilityStaticTextRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityStringForRangeParameterizedAttribute();
+public static final NSString NSAccessibilityStringForRangeParameterizedAttribute = new NSString(NSAccessibilityStringForRangeParameterizedAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityStyleRangeForIndexParameterizedAttribute();
+public static final NSString NSAccessibilityStyleRangeForIndexParameterizedAttribute = new NSString(NSAccessibilityStyleRangeForIndexParameterizedAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilitySubroleAttribute();
+public static final NSString NSAccessibilitySubroleAttribute = new NSString(NSAccessibilitySubroleAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilitySystemDialogSubrole();
+public static final NSString NSAccessibilitySystemDialogSubrole = new NSString(NSAccessibilitySystemDialogSubrole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityTabGroupRole();
+public static final NSString NSAccessibilityTabGroupRole = new NSString(NSAccessibilityTabGroupRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityTableRole();
+public static final NSString NSAccessibilityTableRole = new NSString(NSAccessibilityTableRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityTableRowSubrole();
+public static final NSString NSAccessibilityTableRowSubrole = new NSString(NSAccessibilityTableRowSubrole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityTabsAttribute();
+public static final NSString NSAccessibilityTabsAttribute = new NSString(NSAccessibilityTabsAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityTextAreaRole();
+public static final NSString NSAccessibilityTextAreaRole = new NSString(NSAccessibilityTextAreaRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityTextFieldRole();
+public static final NSString NSAccessibilityTextFieldRole = new NSString(NSAccessibilityTextFieldRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityTextLinkSubrole();
+public static final NSString NSAccessibilityTextLinkSubrole = new NSString(NSAccessibilityTextLinkSubrole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityTitleAttribute();
+public static final NSString NSAccessibilityTitleAttribute = new NSString(NSAccessibilityTitleAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityTitleUIElementAttribute();
+public static final NSString NSAccessibilityTitleUIElementAttribute = new NSString(NSAccessibilityTitleUIElementAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityToolbarRole();
+public static final NSString NSAccessibilityToolbarRole = new NSString(NSAccessibilityToolbarRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityTopLevelUIElementAttribute();
+public static final NSString NSAccessibilityTopLevelUIElementAttribute = new NSString(NSAccessibilityTopLevelUIElementAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityUnknownRole();
+public static final NSString NSAccessibilityUnknownRole = new NSString(NSAccessibilityUnknownRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityUnknownSubrole();
+public static final NSString NSAccessibilityUnknownSubrole = new NSString(NSAccessibilityUnknownSubrole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityValueAttribute();
+public static final NSString NSAccessibilityValueAttribute = new NSString(NSAccessibilityValueAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityValueChangedNotification();
+public static final NSString NSAccessibilityValueChangedNotification = new NSString(NSAccessibilityValueChangedNotification());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityValueDescriptionAttribute();
+public static final NSString NSAccessibilityValueDescriptionAttribute = new NSString(NSAccessibilityValueDescriptionAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityValueIndicatorRole();
+public static final NSString NSAccessibilityValueIndicatorRole = new NSString(NSAccessibilityValueIndicatorRole());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityVerticalOrientationValue();
+public static final NSString NSAccessibilityVerticalOrientationValue = new NSString(NSAccessibilityVerticalOrientationValue());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityVerticalScrollBarAttribute();
+public static final NSString NSAccessibilityVerticalScrollBarAttribute = new NSString(NSAccessibilityVerticalScrollBarAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityVisibleCharacterRangeAttribute();
+public static final NSString NSAccessibilityVisibleCharacterRangeAttribute = new NSString(NSAccessibilityVisibleCharacterRangeAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityVisibleChildrenAttribute();
+public static final NSString NSAccessibilityVisibleChildrenAttribute = new NSString(NSAccessibilityVisibleChildrenAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityWindowAttribute();
+public static final NSString NSAccessibilityWindowAttribute = new NSString(NSAccessibilityWindowAttribute());
+/** @method flags=const */
+public static final native int /*long*/ NSAccessibilityWindowRole();
+public static final NSString NSAccessibilityWindowRole = new NSString(NSAccessibilityWindowRole());
+/** @method flags=const */
+public static final native int /*long*/ NSApplicationDidChangeScreenParametersNotification();
+public static final NSString NSApplicationDidChangeScreenParametersNotification = new NSString(NSApplicationDidChangeScreenParametersNotification());
+/** @method flags=const */
+public static final native int /*long*/ NSBackgroundColorAttributeName();
+public static final NSString NSBackgroundColorAttributeName = new NSString(NSBackgroundColorAttributeName());
+/** @method flags=const */
+public static final native int /*long*/ NSBaselineOffsetAttributeName();
+public static final NSString NSBaselineOffsetAttributeName = new NSString(NSBaselineOffsetAttributeName());
+/** @method flags=const */
+public static final native int /*long*/ NSCalibratedRGBColorSpace();
+public static final NSString NSCalibratedRGBColorSpace = new NSString(NSCalibratedRGBColorSpace());
+/** @method flags=const */
+public static final native int /*long*/ NSDeviceRGBColorSpace();
+public static final NSString NSDeviceRGBColorSpace = new NSString(NSDeviceRGBColorSpace());
+/** @method flags=const */
+public static final native int /*long*/ NSDeviceResolution();
+public static final NSString NSDeviceResolution = new NSString(NSDeviceResolution());
+/** @method flags=const */
+public static final native int /*long*/ NSDragPboard();
+public static final NSString NSDragPboard = new NSString(NSDragPboard());
+/** @method flags=const */
+public static final native int /*long*/ NSEventTrackingRunLoopMode();
+public static final NSString NSEventTrackingRunLoopMode = new NSString(NSEventTrackingRunLoopMode());
+/** @method flags=const */
+public static final native int /*long*/ NSFilenamesPboardType();
+public static final NSString NSFilenamesPboardType = new NSString(NSFilenamesPboardType());
+/** @method flags=const */
+public static final native int /*long*/ NSFontAttributeName();
+public static final NSString NSFontAttributeName = new NSString(NSFontAttributeName());
+/** @method flags=const */
+public static final native int /*long*/ NSForegroundColorAttributeName();
+public static final NSString NSForegroundColorAttributeName = new NSString(NSForegroundColorAttributeName());
+/** @method flags=const */
+public static final native int /*long*/ NSHTMLPboardType();
+public static final NSString NSHTMLPboardType = new NSString(NSHTMLPboardType());
+/** @method flags=const */
+public static final native int /*long*/ NSLinkAttributeName();
+public static final NSString NSLinkAttributeName = new NSString(NSLinkAttributeName());
+/** @method flags=const */
+public static final native int /*long*/ NSObliquenessAttributeName();
+public static final NSString NSObliquenessAttributeName = new NSString(NSObliquenessAttributeName());
+/** @method flags=const */
+public static final native int /*long*/ NSParagraphStyleAttributeName();
+public static final NSString NSParagraphStyleAttributeName = new NSString(NSParagraphStyleAttributeName());
+/** @method flags=const */
+public static final native int /*long*/ NSPrintAllPages();
+public static final NSString NSPrintAllPages = new NSString(NSPrintAllPages());
+/** @method flags=const */
+public static final native int /*long*/ NSPrintCopies();
+public static final NSString NSPrintCopies = new NSString(NSPrintCopies());
+/** @method flags=const */
+public static final native int /*long*/ NSPrintFirstPage();
+public static final NSString NSPrintFirstPage = new NSString(NSPrintFirstPage());
+/** @method flags=const */
+public static final native int /*long*/ NSPrintJobDisposition();
+public static final NSString NSPrintJobDisposition = new NSString(NSPrintJobDisposition());
+/** @method flags=const */
+public static final native int /*long*/ NSPrintLastPage();
+public static final NSString NSPrintLastPage = new NSString(NSPrintLastPage());
+/** @method flags=const */
+public static final native int /*long*/ NSPrintMustCollate();
+public static final NSString NSPrintMustCollate = new NSString(NSPrintMustCollate());
+/** @method flags=const */
+public static final native int /*long*/ NSPrintPreviewJob();
+public static final NSString NSPrintPreviewJob = new NSString(NSPrintPreviewJob());
+/** @method flags=const */
+public static final native int /*long*/ NSPrintSaveJob();
+public static final NSString NSPrintSaveJob = new NSString(NSPrintSaveJob());
+/** @method flags=const */
+public static final native int /*long*/ NSPrintSavePath();
+public static final NSString NSPrintSavePath = new NSString(NSPrintSavePath());
+/** @method flags=const */
+public static final native int /*long*/ NSPrintScalingFactor();
+public static final NSString NSPrintScalingFactor = new NSString(NSPrintScalingFactor());
+/** @method flags=const */
+public static final native int /*long*/ NSPrintSpoolJob();
+public static final NSString NSPrintSpoolJob = new NSString(NSPrintSpoolJob());
+/** @method flags=const */
+public static final native int /*long*/ NSRTFPboardType();
+public static final NSString NSRTFPboardType = new NSString(NSRTFPboardType());
+/** @method flags=const */
+public static final native int /*long*/ NSStrikethroughColorAttributeName();
+public static final NSString NSStrikethroughColorAttributeName = new NSString(NSStrikethroughColorAttributeName());
+/** @method flags=const */
+public static final native int /*long*/ NSStrikethroughStyleAttributeName();
+public static final NSString NSStrikethroughStyleAttributeName = new NSString(NSStrikethroughStyleAttributeName());
+/** @method flags=const */
+public static final native int /*long*/ NSStringPboardType();
+public static final NSString NSStringPboardType = new NSString(NSStringPboardType());
+/** @method flags=const */
+public static final native int /*long*/ NSStrokeWidthAttributeName();
+public static final NSString NSStrokeWidthAttributeName = new NSString(NSStrokeWidthAttributeName());
+/** @method flags=const */
+public static final native int /*long*/ NSSystemColorsDidChangeNotification();
+public static final NSString NSSystemColorsDidChangeNotification = new NSString(NSSystemColorsDidChangeNotification());
+/** @method flags=const */
+public static final native int /*long*/ NSTIFFPboardType();
+public static final NSString NSTIFFPboardType = new NSString(NSTIFFPboardType());
+/** @method flags=const */
+public static final native int /*long*/ NSToolbarCustomizeToolbarItemIdentifier();
+public static final NSString NSToolbarCustomizeToolbarItemIdentifier = new NSString(NSToolbarCustomizeToolbarItemIdentifier());
+/** @method flags=const */
+public static final native int /*long*/ NSToolbarDidRemoveItemNotification();
+public static final NSString NSToolbarDidRemoveItemNotification = new NSString(NSToolbarDidRemoveItemNotification());
+/** @method flags=const */
+public static final native int /*long*/ NSToolbarFlexibleSpaceItemIdentifier();
+public static final NSString NSToolbarFlexibleSpaceItemIdentifier = new NSString(NSToolbarFlexibleSpaceItemIdentifier());
+/** @method flags=const */
+public static final native int /*long*/ NSToolbarPrintItemIdentifier();
+public static final NSString NSToolbarPrintItemIdentifier = new NSString(NSToolbarPrintItemIdentifier());
+/** @method flags=const */
+public static final native int /*long*/ NSToolbarSeparatorItemIdentifier();
+public static final NSString NSToolbarSeparatorItemIdentifier = new NSString(NSToolbarSeparatorItemIdentifier());
+/** @method flags=const */
+public static final native int /*long*/ NSToolbarShowColorsItemIdentifier();
+public static final NSString NSToolbarShowColorsItemIdentifier = new NSString(NSToolbarShowColorsItemIdentifier());
+/** @method flags=const */
+public static final native int /*long*/ NSToolbarShowFontsItemIdentifier();
+public static final NSString NSToolbarShowFontsItemIdentifier = new NSString(NSToolbarShowFontsItemIdentifier());
+/** @method flags=const */
+public static final native int /*long*/ NSToolbarSpaceItemIdentifier();
+public static final NSString NSToolbarSpaceItemIdentifier = new NSString(NSToolbarSpaceItemIdentifier());
+/** @method flags=const */
+public static final native int /*long*/ NSToolbarWillAddItemNotification();
+public static final NSString NSToolbarWillAddItemNotification = new NSString(NSToolbarWillAddItemNotification());
+/** @method flags=const */
+public static final native int /*long*/ NSURLPboardType();
+public static final NSString NSURLPboardType = new NSString(NSURLPboardType());
+/** @method flags=const */
+public static final native int /*long*/ NSUnderlineColorAttributeName();
+public static final NSString NSUnderlineColorAttributeName = new NSString(NSUnderlineColorAttributeName());
+/** @method flags=const */
+public static final native int /*long*/ NSUnderlineStyleAttributeName();
+public static final NSString NSUnderlineStyleAttributeName = new NSString(NSUnderlineStyleAttributeName());
+/** @method flags=const */
+public static final native int /*long*/ NSViewGlobalFrameDidChangeNotification();
+public static final NSString NSViewGlobalFrameDidChangeNotification = new NSString(NSViewGlobalFrameDidChangeNotification());
+/** @method flags=const */
+public static final native int /*long*/ kCFRunLoopCommonModes();
+/** @method flags=const */
+public static final native int /*long*/ NSDefaultRunLoopMode();
+public static final NSString NSDefaultRunLoopMode = new NSString(NSDefaultRunLoopMode());
+/** @method flags=const */
+public static final native int /*long*/ NSErrorFailingURLStringKey();
+public static final NSString NSErrorFailingURLStringKey = new NSString(NSErrorFailingURLStringKey());
+
+/** Functions */
+
+/**
+ * @param action cast=(NSString*)
+ */
+public static final native int /*long*/ NSAccessibilityActionDescription(int /*long*/ action);
+/**
+ * @param element cast=(id)
+ * @param notification cast=(NSString*)
+ */
+public static final native void NSAccessibilityPostNotification(int /*long*/ element, int /*long*/ notification);
+/**
+ * @param element cast=(id)
+ * @param attribute cast=(NSString*)
+ * @param value cast=(id)
+ */
+public static final native void NSAccessibilityRaiseBadArgumentException(int /*long*/ element, int /*long*/ attribute, int /*long*/ value);
+/**
+ * @param role cast=(NSString*)
+ * @param subrole cast=(NSString*)
+ */
+public static final native int /*long*/ NSAccessibilityRoleDescription(int /*long*/ role, int /*long*/ subrole);
+/**
+ * @param element cast=(id)
+ */
+public static final native int /*long*/ NSAccessibilityRoleDescriptionForUIElement(int /*long*/ element);
+/**
+ * @param element cast=(id)
+ */
+public static final native int /*long*/ NSAccessibilityUnignoredAncestor(int /*long*/ element);
+/**
+ * @param originalChildren cast=(NSArray*)
+ */
+public static final native int /*long*/ NSAccessibilityUnignoredChildren(int /*long*/ originalChildren);
+/**
+ * @param originalChild cast=(id)
+ */
+public static final native int /*long*/ NSAccessibilityUnignoredChildrenForOnlyChild(int /*long*/ originalChild);
+/**
+ * @param element cast=(id)
+ */
+public static final native int /*long*/ NSAccessibilityUnignoredDescendant(int /*long*/ element);
+public static final native void NSBeep();
+/**
+ * @param depth cast=(NSWindowDepth)
+ */
+public static final native int /*long*/ NSBitsPerPixelFromDepth(int depth);
+/**
+ * @param srcGState cast=(NSInteger)
+ * @param srcRect flags=struct
+ * @param destPoint flags=struct
+ */
+public static final native void NSCopyBits(int /*long*/ srcGState, NSRect srcRect, NSPoint destPoint);
+/**
+ * @param colorSpaceName cast=(NSString*)
+ */
+public static final native int /*long*/ NSNumberOfColorComponents(int /*long*/ colorSpaceName);
+/**
+ * @param theData cast=(CFDataRef)
+ */
+public static final native int /*long*/ CFDataGetBytePtr(int /*long*/ theData);
+/**
+ * @param theData cast=(CFDataRef)
+ */
+public static final native int /*long*/ CFDataGetLength(int /*long*/ theData);
+/**
+ * @param cf cast=(CFTypeRef)
+ */
+public static final native void CFRelease(int /*long*/ cf);
+/**
+ * @param rl cast=(CFRunLoopRef)
+ * @param observer cast=(CFRunLoopObserverRef)
+ * @param mode cast=(CFStringRef)
+ */
+public static final native void CFRunLoopAddObserver(int /*long*/ rl, int /*long*/ observer, int /*long*/ mode);
+public static final native int /*long*/ CFRunLoopGetCurrent();
+/**
+ * @param allocator cast=(CFAllocatorRef)
+ * @param activities cast=(CFOptionFlags)
+ * @param repeats cast=(Boolean)
+ * @param order cast=(CFIndex)
+ * @param callout cast=(CFRunLoopObserverCallBack)
+ * @param context cast=(CFRunLoopObserverContext*)
+ */
+public static final native int /*long*/ CFRunLoopObserverCreate(int /*long*/ allocator, int /*long*/ activities, boolean repeats, int /*long*/ order, int /*long*/ callout, int /*long*/ context);
+/**
+ * @param observer cast=(CFRunLoopObserverRef)
+ */
+public static final native void CFRunLoopObserverInvalidate(int /*long*/ observer);
+/**
+ * @param allocator cast=(CFAllocatorRef)
+ * @param originalString cast=(CFStringRef)
+ * @param charactersToLeaveUnescaped cast=(CFStringRef)
+ * @param legalURLCharactersToBeEscaped cast=(CFStringRef)
+ * @param encoding cast=(CFStringEncoding)
+ */
+public static final native int /*long*/ CFURLCreateStringByAddingPercentEscapes(int /*long*/ allocator, int /*long*/ originalString, int /*long*/ charactersToLeaveUnescaped, int /*long*/ legalURLCharactersToBeEscaped, int encoding);
+/**
+ * @param data cast=(void*)
+ * @param width cast=(size_t)
+ * @param height cast=(size_t)
+ * @param bitsPerComponent cast=(size_t)
+ * @param bytesPerRow cast=(size_t)
+ * @param colorspace cast=(CGColorSpaceRef)
+ * @param bitmapInfo cast=(CGBitmapInfo)
+ */
+public static final native int /*long*/ CGBitmapContextCreate(int /*long*/ data, int /*long*/ width, int /*long*/ height, int /*long*/ bitsPerComponent, int /*long*/ bytesPerRow, int /*long*/ colorspace, int bitmapInfo);
+/**
+ * @param c cast=(CGContextRef)
+ */
+public static final native int /*long*/ CGBitmapContextCreateImage(int /*long*/ c);
+/**
+ * @param c cast=(CGContextRef)
+ */
+public static final native int /*long*/ CGBitmapContextGetData(int /*long*/ c);
+public static final native int /*long*/ CGColorSpaceCreateDeviceRGB();
+/**
+ * @param space cast=(CGColorSpaceRef)
+ */
+public static final native void CGColorSpaceRelease(int /*long*/ space);
+/**
+ * @param context cast=(CGContextRef)
+ * @param path cast=(CGPathRef)
+ */
+public static final native void CGContextAddPath(int /*long*/ context, int /*long*/ path);
+/**
+ * @param c cast=(CGContextRef)
+ * @param rect flags=struct
+ * @param image cast=(CGImageRef)
+ */
+public static final native void CGContextDrawImage(int /*long*/ c, CGRect rect, int /*long*/ image);
+/**
+ * @param c cast=(CGContextRef)
+ */
+public static final native void CGContextRelease(int /*long*/ c);
+/**
+ * @param c cast=(CGContextRef)
+ */
+public static final native void CGContextReplacePathWithStrokedPath(int /*long*/ c);
+/**
+ * @param c cast=(CGContextRef)
+ */
+public static final native void CGContextRestoreGState(int /*long*/ c);
+/**
+ * @param c cast=(CGContextRef)
+ */
+public static final native void CGContextSaveGState(int /*long*/ c);
+/**
+ * @param c cast=(CGContextRef)
+ * @param sx cast=(CGFloat)
+ * @param sy cast=(CGFloat)
+ */
+public static final native void CGContextScaleCTM(int /*long*/ c, float /*double*/ sx, float /*double*/ sy);
+/**
+ * @param context cast=(CGContextRef)
+ * @param mode cast=(CGBlendMode)
+ */
+public static final native void CGContextSetBlendMode(int /*long*/ context, int mode);
+/**
+ * @param c cast=(CGContextRef)
+ * @param cap cast=(CGLineCap)
+ */
+public static final native void CGContextSetLineCap(int /*long*/ c, int cap);
+/**
+ * @param c cast=(CGContextRef)
+ * @param phase cast=(CGFloat)
+ * @param lengths cast=(CGFloat*)
+ * @param count cast=(size_t)
+ */
+public static final native void CGContextSetLineDash(int /*long*/ c, float /*double*/ phase, float[] lengths, int /*long*/ count);
+/**
+ * @param c cast=(CGContextRef)
+ * @param join cast=(CGLineJoin)
+ */
+public static final native void CGContextSetLineJoin(int /*long*/ c, int join);
+/**
+ * @param c cast=(CGContextRef)
+ * @param width cast=(CGFloat)
+ */
+public static final native void CGContextSetLineWidth(int /*long*/ c, float /*double*/ width);
+/**
+ * @param c cast=(CGContextRef)
+ * @param limit cast=(CGFloat)
+ */
+public static final native void CGContextSetMiterLimit(int /*long*/ c, float /*double*/ limit);
+/**
+ * @param c cast=(CGContextRef)
+ */
+public static final native void CGContextStrokePath(int /*long*/ c);
+/**
+ * @param c cast=(CGContextRef)
+ * @param tx cast=(CGFloat)
+ * @param ty cast=(CGFloat)
+ */
+public static final native void CGContextTranslateCTM(int /*long*/ c, float /*double*/ tx, float /*double*/ ty);
+/**
+ * @param info cast=(void*)
+ * @param data cast=(void*)
+ * @param size cast=(size_t)
+ * @param releaseData cast=(CGDataProviderReleaseDataCallback)
+ */
+public static final native int /*long*/ CGDataProviderCreateWithData(int /*long*/ info, int /*long*/ data, int /*long*/ size, int /*long*/ releaseData);
+/**
+ * @param provider cast=(CGDataProviderRef)
+ */
+public static final native void CGDataProviderRelease(int /*long*/ provider);
+/**
+ * @param display cast=(CGDirectDisplayID)
+ */
+public static final native int /*long*/ CGDisplayBaseAddress(int display);
+/**
+ * @param display cast=(CGDirectDisplayID)
+ */
+public static final native int /*long*/ CGDisplayBitsPerPixel(int display);
+/**
+ * @param display cast=(CGDirectDisplayID)
+ */
+public static final native int /*long*/ CGDisplayBitsPerSample(int display);
+/**
+ * @param display cast=(CGDirectDisplayID)
+ */
+public static final native int /*long*/ CGDisplayBytesPerRow(int display);
+/**
+ * @param display cast=(CGDirectDisplayID)
+ */
+public static final native int /*long*/ CGDisplayPixelsHigh(int display);
+/**
+ * @param display cast=(CGDirectDisplayID)
+ */
+public static final native int /*long*/ CGDisplayPixelsWide(int display);
+/**
+ * @param doCombineState cast=(boolean_t)
+ */
+public static final native int CGEnableEventStateCombining(int doCombineState);
+/**
+ * @param source cast=(CGEventSourceRef)
+ * @param virtualKey cast=(CGKeyCode)
+ * @param keyDown cast=(_Bool)
+ */
+public static final native int /*long*/ CGEventCreateKeyboardEvent(int /*long*/ source, short virtualKey, boolean keyDown);
+/**
+ * @param event cast=(CGEventRef)
+ * @param field cast=(CGEventField)
+ */
+public static final native long CGEventGetIntegerValueField(int /*long*/ event, int field);
+/**
+ * @param event cast=(CGEventRef)
+ * @param stringLength cast=(UniCharCount)
+ * @param unicodeString cast=(UniChar*)
+ */
+public static final native void CGEventKeyboardSetUnicodeString(int /*long*/ event, int /*long*/ stringLength, char[] unicodeString);
+/**
+ * @param tap cast=(CGEventTapLocation)
+ * @param event cast=(CGEventRef)
+ */
+public static final native void CGEventPost(int tap, int /*long*/ event);
+/**
+ * @param rect flags=struct
+ * @param maxDisplays cast=(CGDisplayCount)
+ * @param dspys cast=(CGDirectDisplayID*)
+ * @param dspyCnt cast=(CGDisplayCount*)
+ */
+public static final native int CGGetDisplaysWithRect(CGRect rect, int maxDisplays, int /*long*/ dspys, int /*long*/ dspyCnt);
+/**
+ * @param width cast=(size_t)
+ * @param height cast=(size_t)
+ * @param bitsPerComponent cast=(size_t)
+ * @param bitsPerPixel cast=(size_t)
+ * @param bytesPerRow cast=(size_t)
+ * @param colorspace cast=(CGColorSpaceRef)
+ * @param bitmapInfo cast=(CGBitmapInfo)
+ * @param provider cast=(CGDataProviderRef)
+ * @param decode cast=(CGFloat*)
+ * @param shouldInterpolate cast=(_Bool)
+ * @param intent cast=(CGColorRenderingIntent)
+ */
+public static final native int /*long*/ CGImageCreate(int /*long*/ width, int /*long*/ height, int /*long*/ bitsPerComponent, int /*long*/ bitsPerPixel, int /*long*/ bytesPerRow, int /*long*/ colorspace, int bitmapInfo, int /*long*/ provider, int /*long*/ decode, boolean shouldInterpolate, int intent);
+/**
+ * @param image cast=(CGImageRef)
+ */
+public static final native int /*long*/ CGImageGetHeight(int /*long*/ image);
+/**
+ * @param image cast=(CGImageRef)
+ */
+public static final native int /*long*/ CGImageGetWidth(int /*long*/ image);
+/**
+ * @param image cast=(CGImageRef)
+ */
+public static final native void CGImageRelease(int /*long*/ image);
+/**
+ * @param path cast=(CGMutablePathRef)
+ * @param m cast=(CGAffineTransform*)
+ * @param cp1x cast=(CGFloat)
+ * @param cp1y cast=(CGFloat)
+ * @param cp2x cast=(CGFloat)
+ * @param cp2y cast=(CGFloat)
+ * @param x cast=(CGFloat)
+ * @param y cast=(CGFloat)
+ */
+public static final native void CGPathAddCurveToPoint(int /*long*/ path, int /*long*/ m, float /*double*/ cp1x, float /*double*/ cp1y, float /*double*/ cp2x, float /*double*/ cp2y, float /*double*/ x, float /*double*/ y);
+/**
+ * @param path cast=(CGMutablePathRef)
+ * @param m cast=(CGAffineTransform*)
+ * @param x cast=(CGFloat)
+ * @param y cast=(CGFloat)
+ */
+public static final native void CGPathAddLineToPoint(int /*long*/ path, int /*long*/ m, float /*double*/ x, float /*double*/ y);
+/**
+ * @param path cast=(CGPathRef)
+ * @param info cast=(void*)
+ * @param function cast=(CGPathApplierFunction)
+ */
+public static final native void CGPathApply(int /*long*/ path, int /*long*/ info, int /*long*/ function);
+/**
+ * @param path cast=(CGMutablePathRef)
+ */
+public static final native void CGPathCloseSubpath(int /*long*/ path);
+/**
+ * @param path cast=(CGPathRef)
+ */
+public static final native int /*long*/ CGPathCreateCopy(int /*long*/ path);
+public static final native int /*long*/ CGPathCreateMutable();
+/**
+ * @param path cast=(CGMutablePathRef)
+ * @param m cast=(CGAffineTransform*)
+ * @param x cast=(CGFloat)
+ * @param y cast=(CGFloat)
+ */
+public static final native void CGPathMoveToPoint(int /*long*/ path, int /*long*/ m, float /*double*/ x, float /*double*/ y);
+/**
+ * @param path cast=(CGPathRef)
+ */
+public static final native void CGPathRelease(int /*long*/ path);
+/**
+ * @param keyChar cast=(CGCharCode)
+ * @param virtualKey cast=(CGKeyCode)
+ * @param keyDown cast=(boolean_t)
+ */
+public static final native int CGPostKeyboardEvent(short keyChar, short virtualKey, boolean keyDown);
+/**
+ * @param mouseCursorPosition flags=struct
+ * @param updateMouseCursorPosition cast=(boolean_t)
+ * @param buttonCount cast=(CGButtonCount)
+ * @param mouseButtonDown cast=(boolean_t)
+ */
+public static final native int CGPostMouseEvent(CGPoint mouseCursorPosition, boolean updateMouseCursorPosition, int buttonCount, boolean mouseButtonDown, boolean varArg0, boolean varArg1, boolean varArg2, boolean varArg3);
+/**
+ * @param wheelCount cast=(CGWheelCount)
+ * @param wheel1 cast=(int32_t)
+ */
+public static final native int CGPostScrollWheelEvent(int wheelCount, int wheel1);
+/**
+ * @param filter cast=(CGEventFilterMask)
+ * @param state cast=(CGEventSuppressionState)
+ */
+public static final native int CGSetLocalEventsFilterDuringSuppressionState(int filter, int state);
+/**
+ * @param seconds cast=(CFTimeInterval)
+ */
+public static final native int CGSetLocalEventsSuppressionInterval(double seconds);
+/**
+ * @param newCursorPosition flags=struct
+ */
+public static final native int CGWarpMouseCursorPosition(CGPoint newCursorPosition);
+/**
+ * @param aRect flags=struct
+ * @param bRect flags=struct
+ */
+public static final native boolean NSEqualRects(NSRect aRect, NSRect bRect);
+/**
+ * @param hfsFileTypeCode cast=(OSType)
+ */
+public static final native int /*long*/ NSFileTypeForHFSTypeCode(int hfsFileTypeCode);
+/**
+ * @param typePtr cast=(char*)
+ * @param sizep cast=(NSUInteger*)
+ * @param alignp cast=(NSUInteger*)
+ */
+public static final native int /*long*/ NSGetSizeAndAlignment(int /*long*/ typePtr, int[] /*long[]*/ sizep, int[] /*long[]*/ alignp);
+/**
+ * @param aPoint flags=struct
+ * @param aRect flags=struct
+ */
+public static final native boolean NSPointInRect(NSPoint aPoint, NSRect aRect);
+/**
+ * @param directory cast=(NSSearchPathDirectory)
+ * @param domainMask cast=(NSSearchPathDomainMask)
+ * @param expandTilde cast=(BOOL)
+ */
+public static final native int /*long*/ NSSearchPathForDirectoriesInDomains(int /*long*/ directory, int /*long*/ domainMask, boolean expandTilde);
+public static final native int /*long*/ NSTemporaryDirectory();
+
+/** Super Sends */
+
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native boolean objc_msgSendSuper_bool(objc_super superId, int /*long*/ sel, NSRange arg0, int /*long*/ arg1);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSendSuper(objc_super superId, int /*long*/ sel);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSendSuper(objc_super superId, int /*long*/ sel, NSPoint arg0);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSendSuper(objc_super superId, int /*long*/ sel, NSRect arg0);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSendSuper(objc_super superId, int /*long*/ sel, NSRect arg0, int /*long*/ arg1);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSendSuper(objc_super superId, int /*long*/ sel, NSSize arg0);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSendSuper(objc_super superId, int /*long*/ sel, boolean arg0);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSendSuper(objc_super superId, int /*long*/ sel, int /*long*/ arg0);
+/**
+ * @method flags=cast
+ * @param arg1 flags=struct
+ */
+public static final native int /*long*/ objc_msgSendSuper(objc_super superId, int /*long*/ sel, int /*long*/ arg0, NSPoint arg1, int /*long*/ arg2);
+/**
+ * @method flags=cast
+ * @param arg1 flags=struct
+ */
+public static final native int /*long*/ objc_msgSendSuper(objc_super superId, int /*long*/ sel, int /*long*/ arg0, NSRect arg1, int /*long*/ arg2);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSendSuper(objc_super superId, int /*long*/ sel, int /*long*/ arg0, boolean arg1);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSendSuper(objc_super superId, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSendSuper(objc_super superId, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, boolean arg3);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSendSuper(objc_super superId, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native void objc_msgSendSuper_stret(NSRect result, objc_super superId, int /*long*/ sel, NSRect arg0);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native void objc_msgSendSuper_stret(NSRect result, objc_super superId, int /*long*/ sel, NSRect arg0, int /*long*/ arg1);
+/** @method flags=cast */
+public static final native void objc_msgSendSuper_stret(NSSize result, objc_super superId, int /*long*/ sel);
+
+/** Sends */
+
+/** @method flags=cast */
+public static final native boolean objc_msgSend_bool(int /*long*/ id, int /*long*/ sel);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native boolean objc_msgSend_bool(int /*long*/ id, int /*long*/ sel, NSPoint arg0);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native boolean objc_msgSend_bool(int /*long*/ id, int /*long*/ sel, NSRange arg0, int /*long*/ arg1);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native boolean objc_msgSend_bool(int /*long*/ id, int /*long*/ sel, NSRect arg0);
+/** @method flags=cast */
+public static final native boolean objc_msgSend_bool(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0);
+/**
+ * @method flags=cast
+ * @param arg1 flags=struct
+ */
+public static final native boolean objc_msgSend_bool(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, NSPoint arg1);
+/**
+ * @method flags=cast
+ * @param arg1 flags=struct
+ */
+public static final native boolean objc_msgSend_bool(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, NSSize arg1, boolean arg2);
+/** @method flags=cast */
+public static final native boolean objc_msgSend_bool(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1);
+/** @method flags=cast */
+public static final native boolean objc_msgSend_bool(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2);
+/** @method flags=cast */
+public static final native boolean objc_msgSend_bool(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3, int /*long*/ arg4);
+/** @method flags=cast */
+public static final native boolean objc_msgSend_bool(int /*long*/ id, int /*long*/ sel, short arg0);
+/** @method flags=cast */
+public static final native double objc_msgSend_fpret(int /*long*/ id, int /*long*/ sel);
+/** @method flags=cast */
+public static final native double objc_msgSend_fpret(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0);
+/** @method flags=cast */
+public static final native double objc_msgSend_fpret(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSAffineTransformStruct arg0);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSPoint arg0);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ * @param arg1 flags=struct
+ * @param arg2 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSPoint arg0, NSPoint arg1, NSPoint arg2);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ * @param arg1 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSPoint arg0, NSPoint arg1, int /*long*/ arg2);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ * @param arg1 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSPoint arg0, NSRect arg1, int /*long*/ arg2, float /*double*/ arg3);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSPoint arg0, float /*double*/ arg1, float /*double*/ arg2, float /*double*/ arg3);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSPoint arg0, float /*double*/ arg1, float /*double*/ arg2, float /*double*/ arg3, boolean arg4);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSPoint arg0, int /*long*/ arg1, float[] /*double[]*/ arg2);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSRange arg0);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ * @param arg1 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSRange arg0, NSPoint arg1);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ * @param arg1 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSRange arg0, NSRange arg1, int /*long*/ arg2, int /*long*/ arg3);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSRange arg0, int /*long*/ arg1);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSRange arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3, int /*long*/ arg4, int /*long*/ arg5);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSRect arg0);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ * @param arg1 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSRect arg0, NSPoint arg1);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ * @param arg1 flags=struct
+ * @param arg2 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSRect arg0, NSRange arg1, NSRect arg2);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ * @param arg1 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSRect arg0, NSRect arg1, int /*long*/ arg2, float /*double*/ arg3);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSRect arg0, boolean arg1);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSRect arg0, boolean arg1, boolean arg2);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSRect arg0, float /*double*/ arg1);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSRect arg0, float /*double*/ arg1, float /*double*/ arg2);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSRect arg0, int /*long*/ arg1);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSRect arg0, int /*long*/ arg1, boolean arg2, int /*long*/ arg3);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSRect arg0, int /*long*/ arg1, int /*long*/ arg2);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSRect arg0, int /*long*/ arg1, int /*long*/ arg2, boolean arg3);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSRect arg0, int /*long*/ arg1, int /*long*/ arg2, boolean arg3, int /*long*/ arg4);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSRect arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, NSSize arg0);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, boolean arg0);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, boolean arg0, int /*long*/ arg1);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, byte[] arg0);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, byte[] arg0, int /*long*/ arg1);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, char[] arg0);
+/**
+ * @method flags=cast
+ * @param arg1 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, char[] arg0, NSRange arg1);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, char[] arg0, int /*long*/ arg1);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, double arg0);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, double arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3, boolean arg4);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, float /*double*/ arg0, float /*double*/ arg1);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, float /*double*/ arg0, float /*double*/ arg1, float /*double*/ arg2, float /*double*/ arg3);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, float /*double*/ arg0, int /*long*/ arg1);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, float[] /*double[]*/ arg0);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, float[] /*double[]*/ arg0, int /*long*/ arg1, float /*double*/ arg2);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0);
+/**
+ * @method flags=cast
+ * @param arg1 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, NSPoint arg1);
+/**
+ * @method flags=cast
+ * @param arg1 flags=struct
+ * @param arg2 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, NSPoint arg1, NSSize arg2, int /*long*/ arg3, int /*long*/ arg4, int /*long*/ arg5, boolean arg6);
+/**
+ * @method flags=cast
+ * @param arg1 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, NSPoint arg1, int /*long*/ arg2);
+/**
+ * @method flags=cast
+ * @param arg1 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, NSPoint arg1, int /*long*/ arg2, double arg3, int /*long*/ arg4, int /*long*/ arg5, int /*long*/ arg6, int /*long*/ arg7, int /*long*/ arg8);
+/**
+ * @method flags=cast
+ * @param arg1 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, NSPoint arg1, int /*long*/ arg2, double arg3, int /*long*/ arg4, int /*long*/ arg5, short arg6, int /*long*/ arg7, int /*long*/ arg8);
+/**
+ * @method flags=cast
+ * @param arg1 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, NSRange arg1);
+/**
+ * @method flags=cast
+ * @param arg1 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, NSRect arg1, int /*long*/ arg2);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, boolean arg1);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, float /*double*/ arg1);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1);
+/**
+ * @method flags=cast
+ * @param arg2 flags=struct
+ */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, NSRange arg2);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, boolean arg2);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, boolean arg3);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, float /*double*/ arg3);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3, int /*long*/ arg4);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3, int /*long*/ arg4, boolean arg5, boolean arg6, int /*long*/ arg7, int /*long*/ arg8, int /*long*/ arg9);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3, int /*long*/ arg4, boolean arg5, boolean arg6, int /*long*/ arg7, int /*long*/ arg8, int /*long*/ arg9, int /*long*/ arg10);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3, int /*long*/ arg4, int /*long*/ arg5, int /*long*/ arg6);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, int[] /*long[]*/ arg0);
+/** @method flags=cast */
+public static final native int /*long*/ objc_msgSend(int /*long*/ id, int /*long*/ sel, int[] /*long[]*/ arg0, int arg1, int arg2);
+/** @method flags=cast */
+public static final native int objc_msgSend(int id, int sel, float arg0);
+/** @method flags=cast */
+public static final native long objc_msgSend(long id, long sel, float arg0, double arg1);
+/** @method flags=cast */
+public static final native long objc_msgSend(long id, long sel, int arg0);
+/** @method flags=cast */
+public static final native long objc_msgSend(long id, long sel, int[] arg0);
+/** @method flags=cast */
+public static final native long objc_msgSend(long id, long sel, long[] arg0, long arg1, long arg2);
+/** @method flags=cast */
+public static final native void objc_msgSend_stret(NSAffineTransformStruct result, int /*long*/ id, int /*long*/ sel);
+/** @method flags=cast */
+public static final native void objc_msgSend_stret(NSPoint result, int /*long*/ id, int /*long*/ sel);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native void objc_msgSend_stret(NSPoint result, int /*long*/ id, int /*long*/ sel, NSPoint arg0);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native void objc_msgSend_stret(NSPoint result, int /*long*/ id, int /*long*/ sel, NSPoint arg0, int /*long*/ arg1);
+/** @method flags=cast */
+public static final native void objc_msgSend_stret(NSPoint result, int /*long*/ id, int /*long*/ sel, int /*long*/ arg0);
+/** @method flags=cast */
+public static final native void objc_msgSend_stret(NSRange result, int /*long*/ id, int /*long*/ sel);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native void objc_msgSend_stret(NSRange result, int /*long*/ id, int /*long*/ sel, NSRange arg0, int /*long*/ arg1);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native void objc_msgSend_stret(NSRange result, int /*long*/ id, int /*long*/ sel, NSRect arg0);
+/** @method flags=cast */
+public static final native void objc_msgSend_stret(NSRange result, int /*long*/ id, int /*long*/ sel, int /*long*/ arg0);
+/** @method flags=cast */
+public static final native void objc_msgSend_stret(NSRect result, int /*long*/ id, int /*long*/ sel);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native void objc_msgSend_stret(NSRect result, int /*long*/ id, int /*long*/ sel, NSRange arg0, int /*long*/ arg1);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native void objc_msgSend_stret(NSRect result, int /*long*/ id, int /*long*/ sel, NSRect arg0);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native void objc_msgSend_stret(NSRect result, int /*long*/ id, int /*long*/ sel, NSRect arg0, int /*long*/ arg1);
+/** @method flags=cast */
+public static final native void objc_msgSend_stret(NSRect result, int /*long*/ id, int /*long*/ sel, int /*long*/ arg0);
+/** @method flags=cast */
+public static final native void objc_msgSend_stret(NSRect result, int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1);
+/** @method flags=cast */
+public static final native void objc_msgSend_stret(NSRect result, int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, boolean arg2);
+/** @method flags=cast */
+public static final native void objc_msgSend_stret(NSSize result, int /*long*/ id, int /*long*/ sel);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native void objc_msgSend_stret(NSSize result, int /*long*/ id, int /*long*/ sel, NSRect arg0);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native void objc_msgSend_stret(NSSize result, int /*long*/ id, int /*long*/ sel, NSSize arg0);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native void objc_msgSend_stret(NSSize result, int /*long*/ id, int /*long*/ sel, NSSize arg0, boolean arg1, boolean arg2, int /*long*/ arg3);
+/**
+ * @method flags=cast
+ * @param arg0 flags=struct
+ */
+public static final native void objc_msgSend_stret(NSSize result, int /*long*/ id, int /*long*/ sel, NSSize arg0, int /*long*/ arg1);
+
+/** Sizeof natives */
+public static final native int CGPathElement_sizeof();
+public static final native int CGPoint_sizeof();
+public static final native int CGRect_sizeof();
+public static final native int CGSize_sizeof();
+public static final native int NSAffineTransformStruct_sizeof();
+public static final native int NSPoint_sizeof();
+public static final native int NSRange_sizeof();
+public static final native int NSRect_sizeof();
+public static final native int NSSize_sizeof();
+
+/** Memmove natives */
+
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(void *),flags=critical
+ */
+public static final native void memmove(int /*long*/ dest, CGPathElement src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(void *),flags=critical
+ */
+public static final native void memmove(CGPathElement dest, int /*long*/ src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(void *),flags=critical
+ */
+public static final native void memmove(int /*long*/ dest, CGPoint src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(void *),flags=critical
+ */
+public static final native void memmove(CGPoint dest, int /*long*/ src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(void *),flags=critical
+ */
+public static final native void memmove(int /*long*/ dest, CGRect src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(void *),flags=critical
+ */
+public static final native void memmove(CGRect dest, int /*long*/ src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(void *),flags=critical
+ */
+public static final native void memmove(int /*long*/ dest, CGSize src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(void *),flags=critical
+ */
+public static final native void memmove(CGSize dest, int /*long*/ src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(void *),flags=critical
+ */
+public static final native void memmove(int /*long*/ dest, NSAffineTransformStruct src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(void *),flags=critical
+ */
+public static final native void memmove(NSAffineTransformStruct dest, int /*long*/ src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(void *),flags=critical
+ */
+public static final native void memmove(int /*long*/ dest, NSPoint src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(void *),flags=critical
+ */
+public static final native void memmove(NSPoint dest, int /*long*/ src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(void *),flags=critical
+ */
+public static final native void memmove(int /*long*/ dest, NSRange src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(void *),flags=critical
+ */
+public static final native void memmove(NSRange dest, int /*long*/ src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(void *),flags=critical
+ */
+public static final native void memmove(int /*long*/ dest, NSRect src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(void *),flags=critical
+ */
+public static final native void memmove(NSRect dest, int /*long*/ src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(void *),flags=critical
+ */
+public static final native void memmove(int /*long*/ dest, NSSize src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(void *),flags=critical
+ */
+public static final native void memmove(NSSize dest, int /*long*/ src, int /*long*/ size);
+
+/** This section is auto generated */
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/Protocol.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/Protocol.java
new file mode 100644
index 0000000..c23340b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/Protocol.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * 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.internal.cocoa;
+
+public class Protocol extends id {
+
+public Protocol() {
+	super();
+}
+
+public Protocol(int /*long*/ id) {
+	super(id);
+}
+
+public Protocol(id id) {
+	super(id);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTApplicationDelegate.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTApplicationDelegate.java
new file mode 100644
index 0000000..00398c3
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTApplicationDelegate.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+public class SWTApplicationDelegate extends NSObject {
+	public SWTApplicationDelegate() {
+		super(0);
+	}
+		
+	public SWTApplicationDelegate(int id) {
+		super(id);
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTBox.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTBox.java
new file mode 100644
index 0000000..d59eadb
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTBox.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+public class SWTBox extends NSBox {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTButton.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTButton.java
new file mode 100644
index 0000000..cf53093
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTButton.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.internal.cocoa;
+
+public class SWTButton extends NSButton {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTButtonCell.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTButtonCell.java
new file mode 100644
index 0000000..f659955
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTButtonCell.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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.internal.cocoa;
+
+public class SWTButtonCell extends NSButtonCell {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTCanvasView.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTCanvasView.java
new file mode 100644
index 0000000..be70fcb
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTCanvasView.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.internal.cocoa;
+
+
+public class SWTCanvasView extends NSView {
+
+public SWTCanvasView() {
+	super(0);
+}
+	
+public SWTCanvasView(int id) {
+	super(id);
+}
+
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTComboBox.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTComboBox.java
new file mode 100644
index 0000000..52f5e9c
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTComboBox.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.internal.cocoa;
+
+public class SWTComboBox extends NSComboBox {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTDatePicker.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTDatePicker.java
new file mode 100644
index 0000000..1a9547d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTDatePicker.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.internal.cocoa;
+
+public class SWTDatePicker extends NSDatePicker {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTDragSourceDelegate.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTDragSourceDelegate.java
new file mode 100644
index 0000000..34da394
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTDragSourceDelegate.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+public class SWTDragSourceDelegate extends NSObject {
+
+	public SWTDragSourceDelegate() {
+		super(0);
+	}
+		
+	public SWTDragSourceDelegate(int id) {
+		super(id);
+	}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTImageTextCell.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTImageTextCell.java
new file mode 100644
index 0000000..4668420
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTImageTextCell.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.internal.cocoa;
+
+public class SWTImageTextCell extends NSTextFieldCell {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTImageView.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTImageView.java
new file mode 100644
index 0000000..b7d8a3e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTImageView.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.internal.cocoa;
+
+public class SWTImageView extends NSImageView {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTMenu.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTMenu.java
new file mode 100644
index 0000000..5797741
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTMenu.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+public class SWTMenu extends NSMenu {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTMenuItem.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTMenuItem.java
new file mode 100644
index 0000000..0a3f2ab
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTMenuItem.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.internal.cocoa;
+
+public class SWTMenuItem extends NSMenuItem {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTOutlineView.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTOutlineView.java
new file mode 100644
index 0000000..0de8410
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTOutlineView.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.internal.cocoa;
+
+public class SWTOutlineView extends NSOutlineView {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTPanelDelegate.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTPanelDelegate.java
new file mode 100644
index 0000000..9a00738
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTPanelDelegate.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+public class SWTPanelDelegate extends NSObject {
+
+public SWTPanelDelegate() {
+	super(0);
+}
+	
+public SWTPanelDelegate(int id) {
+	super(id);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTPopUpButton.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTPopUpButton.java
new file mode 100644
index 0000000..6698a9f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTPopUpButton.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.internal.cocoa;
+
+public class SWTPopUpButton extends NSPopUpButton {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTPrintPanelDelegate.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTPrintPanelDelegate.java
new file mode 100644
index 0000000..9d29880
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTPrintPanelDelegate.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.internal.cocoa;
+
+public class SWTPrintPanelDelegate extends NSObject {
+
+public SWTPrintPanelDelegate() {
+	super(0);
+}
+	
+public SWTPrintPanelDelegate(int id) {
+	super(id);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTPrinterView.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTPrinterView.java
new file mode 100644
index 0000000..c4fc3d1
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTPrinterView.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+public class SWTPrinterView extends NSView {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTProgressIndicator.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTProgressIndicator.java
new file mode 100644
index 0000000..219bdfd
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTProgressIndicator.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+public class SWTProgressIndicator extends NSProgressIndicator {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTScrollView.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTScrollView.java
new file mode 100644
index 0000000..df73239
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTScrollView.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+public class SWTScrollView extends NSScrollView {
+
+public SWTScrollView() {
+	super(0);
+}
+	
+public SWTScrollView(int id) {
+	super(id);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTScroller.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTScroller.java
new file mode 100644
index 0000000..15726d8
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTScroller.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.internal.cocoa;
+
+public class SWTScroller extends NSScroller {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTSearchField.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTSearchField.java
new file mode 100644
index 0000000..58a7964
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTSearchField.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+public class SWTSearchField extends NSSearchField {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTSecureTextField.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTSecureTextField.java
new file mode 100644
index 0000000..43de316
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTSecureTextField.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+public class SWTSecureTextField extends NSSecureTextField {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTSlider.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTSlider.java
new file mode 100644
index 0000000..6567abc
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTSlider.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.internal.cocoa;
+
+public class SWTSlider extends NSSlider {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTStepper.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTStepper.java
new file mode 100644
index 0000000..9772772
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTStepper.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.internal.cocoa;
+
+public class SWTStepper extends NSStepper {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTabView.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTabView.java
new file mode 100644
index 0000000..dd517d0
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTabView.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+public class SWTTabView extends NSTabView {
+
+public SWTTabView() {
+	super(0);
+}
+	
+public SWTTabView(int id) {
+	super(id);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTableHeaderCell.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTableHeaderCell.java
new file mode 100644
index 0000000..a56bebb
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTableHeaderCell.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 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.internal.cocoa;
+
+public class SWTTableHeaderCell extends NSTableHeaderCell {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTableHeaderView.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTableHeaderView.java
new file mode 100644
index 0000000..8f15c5e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTableHeaderView.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 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.internal.cocoa;
+
+public class SWTTableHeaderView extends NSTableHeaderView {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTableView.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTableView.java
new file mode 100644
index 0000000..4b80bf9
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTableView.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.internal.cocoa;
+
+public class SWTTableView extends NSTableView {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTextField.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTextField.java
new file mode 100644
index 0000000..55619b9
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTextField.java
@@ -0,0 +1,16 @@
+/*******************************************************************************
+ * Copyright (c) 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.internal.cocoa;
+
+public class SWTTextField extends NSTextField {
+
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTextView.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTextView.java
new file mode 100644
index 0000000..5e88291
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTextView.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 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.internal.cocoa;
+
+public class SWTTextView extends NSTextView {
+
+public SWTTextView() {
+	super(0);
+}
+
+public SWTTextView(int id) {
+	super(id);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTToolbar.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTToolbar.java
new file mode 100644
index 0000000..6bd9ef9
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTToolbar.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2009 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.internal.cocoa;
+
+public class SWTToolbar extends NSToolbar {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTreeItem.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTreeItem.java
new file mode 100644
index 0000000..b1bbd1d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTTreeItem.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+public class SWTTreeItem extends NSObject {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTView.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTView.java
new file mode 100644
index 0000000..ae71db6
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTView.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+
+public class SWTView extends NSView {
+
+public SWTView() {
+	super(0);
+}
+	
+public SWTView(int id) {
+	super(id);
+}
+
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTWebViewDelegate.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTWebViewDelegate.java
new file mode 100644
index 0000000..aaa628c
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTWebViewDelegate.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+public class SWTWebViewDelegate extends NSObject {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTWindow.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTWindow.java
new file mode 100644
index 0000000..89eb61d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTWindow.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 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.internal.cocoa;
+
+public class SWTWindow extends NSWindow {
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTWindowDelegate.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTWindowDelegate.java
new file mode 100644
index 0000000..7387bb4
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/SWTWindowDelegate.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+public class SWTWindowDelegate extends NSObject {
+
+public SWTWindowDelegate() {
+	super(0);
+}
+	
+public SWTWindowDelegate(int id) {
+	super(id);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebDataSource.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebDataSource.java
new file mode 100644
index 0000000..51e6ac6
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebDataSource.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class WebDataSource extends NSObject {
+
+public WebDataSource() {
+	super();
+}
+
+public WebDataSource(int /*long*/ id) {
+	super(id);
+}
+
+public WebDataSource(id id) {
+	super(id);
+}
+
+public NSString pageTitle() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_pageTitle);
+	return result != 0 ? new NSString(result) : null;
+}
+
+public WebDocumentRepresentation representation() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_representation);
+	return result != 0 ? new WebDocumentRepresentation(result) : null;
+}
+
+public NSMutableURLRequest request() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_request);
+	return result != 0 ? new NSMutableURLRequest(result) : null;
+}
+
+public WebFrame webFrame() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_webFrame);
+	return result != 0 ? new WebFrame(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebDocumentRepresentation.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebDocumentRepresentation.java
new file mode 100644
index 0000000..36e16c9
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebDocumentRepresentation.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+public class WebDocumentRepresentation extends NSObject {
+
+public WebDocumentRepresentation() {
+	super();
+}
+
+public WebDocumentRepresentation(int /*long*/ id) {
+	super(id);
+}
+
+public WebDocumentRepresentation(id id) {
+	super(id);
+}
+
+public NSString documentSource() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_documentSource);
+	return result != 0 ? new NSString(result) : null;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebFrame.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebFrame.java
new file mode 100644
index 0000000..951ebfb
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebFrame.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class WebFrame extends NSObject {
+
+public WebFrame() {
+	super();
+}
+
+public WebFrame(int /*long*/ id) {
+	super(id);
+}
+
+public WebFrame(id id) {
+	super(id);
+}
+
+public DOMDocument DOMDocument() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_DOMDocument);
+	return result != 0 ? new DOMDocument(result) : null;
+}
+
+public WebDataSource dataSource() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_dataSource);
+	return result != 0 ? new WebDataSource(result) : null;
+}
+
+public void loadHTMLString(NSString string, NSURL URL) {
+	OS.objc_msgSend(this.id, OS.sel_loadHTMLString_baseURL_, string != null ? string.id : 0, URL != null ? URL.id : 0);
+}
+
+public void loadRequest(NSURLRequest request) {
+	OS.objc_msgSend(this.id, OS.sel_loadRequest_, request != null ? request.id : 0);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebFrameView.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebFrameView.java
new file mode 100644
index 0000000..5075e8e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebFrameView.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class WebFrameView extends NSObject {
+
+public WebFrameView() {
+	super();
+}
+
+public WebFrameView(int /*long*/ id) {
+	super(id);
+}
+
+public WebFrameView(id id) {
+	super(id);
+}
+
+public boolean documentViewShouldHandlePrint() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_documentViewShouldHandlePrint);
+}
+
+public void printDocumentView() {
+	OS.objc_msgSend(this.id, OS.sel_printDocumentView);
+}
+
+public NSPrintOperation printOperationWithPrintInfo(NSPrintInfo printInfo) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_printOperationWithPrintInfo_, printInfo != null ? printInfo.id : 0);
+	return result != 0 ? new NSPrintOperation(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebKitFull.bridgesupport.extras b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebKitFull.bridgesupport.extras
new file mode 100644
index 0000000..2d1617c
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebKitFull.bridgesupport.extras
@@ -0,0 +1,410 @@
+<?xml version="1.0" encoding="UTF8"?>
+<signatures swt_gen="mixed">
+	<class name="DOMDocument" swt_gen="mixed">
+		<method selector="webFrame" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="DOMEvent" swt_gen="mixed">
+		<method selector="preventDefault" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="DOMKeyboardEvent" swt_gen="mixed" swt_superclass="DOMUIEvent">
+		<method selector="altKey" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="charCode" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="ctrlKey" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="keyCode" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="metaKey" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="shiftKey" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="DOMMouseEvent" swt_gen="mixed" swt_superclass="DOMUIEvent">
+		<method selector="altKey" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="button" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="clientX" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="clientY" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="ctrlKey" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="metaKey" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="shiftKey" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="DOMUIEvent" swt_gen="mixed" swt_superclass="DOMEvent">
+		<method selector="detail" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="DOMWheelEvent" swt_gen="mixed">
+		<method selector="altKey" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="clientX" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="clientY" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="ctrlKey" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="metaKey" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="shiftKey" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="wheelDelta" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="NSObject" swt_gen="mixed">
+		<method selector="addEventListener:listener:useCapture:" swt_gen="true">
+			<arg name="type" swt_gen="true"></arg>
+			<arg name="listener" swt_gen="true"></arg>
+			<arg name="useCapture" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="handleEvent:" swt_gen="true">
+			<arg name="evt" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="WebDataSource" swt_gen="mixed">
+		<method selector="pageTitle" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="representation" swt_gen="true">
+			<retval swt_gen="true" swt_java_type="WebDocumentRepresentation"></retval>
+		</method>
+		<method selector="request" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="webFrame" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="WebFrame" swt_gen="mixed">
+		<method selector="DOMDocument" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="dataSource" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="loadHTMLString:baseURL:" swt_gen="true">
+			<arg name="string" swt_gen="true"></arg>
+			<arg name="URL" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="loadRequest:" swt_gen="true">
+			<arg name="request" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="WebFrameView" swt_gen="mixed">
+		<method selector="documentViewShouldHandlePrint" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="printDocumentView" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="printOperationWithPrintInfo:" swt_gen="true">
+			<arg name="printInfo" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="WebPreferences" swt_gen="mixed">
+		<method selector="setJavaEnabled:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setJavaScriptEnabled:" swt_gen="true">
+			<arg name="flag" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="standardPreferences" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="WebScriptObject" swt_gen="mixed">
+		<method selector="webScriptValueAtIndex:" swt_gen="true">
+			<arg name="index" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="WebUndefined" swt_gen="true">
+		<method class_method="true" selector="undefined" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<class name="WebView" swt_gen="mixed" swt_superclass="NSView">
+		<method selector="canGoBack" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="canGoForward" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method class_method="true" selector="canShowMIMEType:" swt_gen="true">
+			<arg name="MIMEType" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="copy:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="cut:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="goBack" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="goForward" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="initWithFrame:frameName:groupName:" swt_gen="true">
+			<arg name="frame" swt_gen="true"></arg>
+			<arg name="frameName" swt_gen="true"></arg>
+			<arg name="groupName" swt_gen="true"></arg>
+			<retval swt_gen="true" swt_java_type="WebView"></retval>
+		</method>
+		<method selector="mainFrame" swt_gen="true">
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="paste:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="reload:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setApplicationNameForUserAgent:" swt_gen="true">
+			<arg name="applicationName" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setDownloadDelegate:" swt_gen="true">
+			<arg name="delegate" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setFrameLoadDelegate:" swt_gen="true">
+			<arg name="delegate" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setPolicyDelegate:" swt_gen="true">
+			<arg name="delegate" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setPreferences:" swt_gen="true">
+			<arg name="prefs" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setResourceLoadDelegate:" swt_gen="true">
+			<arg name="delegate" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="setUIDelegate:" swt_gen="true">
+			<arg name="delegate" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="stopLoading:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+		<method selector="stringByEvaluatingJavaScriptFromString:" swt_gen="true">
+			<arg name="script" swt_gen="true"></arg>
+			<retval swt_gen="true"></retval>
+		</method>
+	</class>
+	<informal_protocol name="WebFrameLoadDelegate" swt_gen="mixed">
+		<method selector="webView:didChangeLocationWithinPageForFrame:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="frame" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:didCommitLoadForFrame:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="frame" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:didFailProvisionalLoadWithError:forFrame:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="error" swt_gen="true"></arg>
+			<arg name="frame" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:didFinishLoadForFrame:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="frame" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:didReceiveTitle:forFrame:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="title" swt_gen="true"></arg>
+			<arg name="frame" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:didStartProvisionalLoadForFrame:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="frame" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:windowScriptObjectAvailable:" swt_gen="true">
+			<arg name="webView" swt_gen="true"></arg>
+			<arg name="windowScriptObject" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="WebPolicyDelegate" swt_gen="true">
+		<method selector="webView:decidePolicyForMIMEType:request:frame:decisionListener:" swt_gen="true">
+			<arg name="webView" swt_gen="true"></arg>
+			<arg name="type" swt_gen="true"></arg>
+			<arg name="request" swt_gen="true"></arg>
+			<arg name="frame" swt_gen="true"></arg>
+			<arg name="listener" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:decidePolicyForNavigationAction:request:frame:decisionListener:" swt_gen="true">
+			<arg name="webView" swt_gen="true"></arg>
+			<arg name="actionInformation" swt_gen="true"></arg>
+			<arg name="request" swt_gen="true"></arg>
+			<arg name="frame" swt_gen="true"></arg>
+			<arg name="listener" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:decidePolicyForNewWindowAction:request:newFrameName:decisionListener:" swt_gen="true">
+			<arg name="webView" swt_gen="true"></arg>
+			<arg name="actionInformation" swt_gen="true"></arg>
+			<arg name="request" swt_gen="true"></arg>
+			<arg name="frameName" swt_gen="true"></arg>
+			<arg name="listener" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:unableToImplementPolicyWithError:frame:" swt_gen="true">
+			<arg name="webView" swt_gen="true"></arg>
+			<arg name="error" swt_gen="true"></arg>
+			<arg name="frame" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="WebResourceLoadDelegate" swt_gen="mixed">
+		<method selector="webView:identifierForInitialRequest:fromDataSource:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="request" swt_gen="true"></arg>
+			<arg name="dataSource" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:resource:didFailLoadingWithError:fromDataSource:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="identifier" swt_gen="true"></arg>
+			<arg name="error" swt_gen="true"></arg>
+			<arg name="dataSource" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:resource:didFinishLoadingFromDataSource:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="identifier" swt_gen="true"></arg>
+			<arg name="dataSource" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:resource:didReceiveAuthenticationChallenge:fromDataSource:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="identifier" swt_gen="true"></arg>
+			<arg name="challenge" swt_gen="true"></arg>
+			<arg name="dataSource" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:resource:willSendRequest:redirectResponse:fromDataSource:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="identifier" swt_gen="true"></arg>
+			<arg name="request" swt_gen="true"></arg>
+			<arg name="redirectResponse" swt_gen="true"></arg>
+			<arg name="dataSource" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="WebUIDelegate" swt_gen="mixed">
+		<method selector="webView:contextMenuItemsForElement:defaultMenuItems:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="element" swt_gen="true"></arg>
+			<arg name="defaultMenuItems" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:createWebViewWithRequest:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="request" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:mouseDidMoveOverElement:modifierFlags:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="elementInformation" swt_gen="true"></arg>
+			<arg name="modifierFlags" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:printFrameView:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="frameView" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:runJavaScriptAlertPanelWithMessage:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="message" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:runJavaScriptConfirmPanelWithMessage:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="message" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:runOpenPanelForFileButtonWithResultListener:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="resultListener" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:setFrame:" swt_gen="true" swt_gen_custom_callback="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="frame" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:setResizable:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="resizable" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:setStatusBarVisible:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="visible" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:setStatusText:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="text" swt_gen="true"></arg>
+		</method>
+		<method selector="webView:setToolbarsVisible:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+			<arg name="visible" swt_gen="true"></arg>
+		</method>
+		<method selector="webViewClose:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+		</method>
+		<method selector="webViewFocus:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+		</method>
+		<method selector="webViewShow:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+		</method>
+		<method selector="webViewUnfocus:" swt_gen="true">
+			<arg name="sender" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="WebOpenPanelResultListener" swt_gen="true">
+		<method selector="chooseFilename:" swt_gen="true">
+			<arg name="theRange" swt_gen="true"></arg>
+		</method>
+	</informal_protocol>
+	<informal_protocol name="WebDocumentRepresentation" swt_gen="true">
+		<method selector="documentSource" swt_gen="true"></method>
+	</informal_protocol>
+	<informal_protocol name="WebPolicyDecisionListener" swt_gen="true">
+		<method selector="use" swt_gen="true"></method>
+		<method selector="download" swt_gen="true"></method>
+		<method selector="ignore" swt_gen="true"></method>
+	</informal_protocol>
+</signatures>
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebOpenPanelResultListener.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebOpenPanelResultListener.java
new file mode 100644
index 0000000..19f1ba7
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebOpenPanelResultListener.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+public class WebOpenPanelResultListener extends NSObject {
+
+public WebOpenPanelResultListener() {
+	super();
+}
+
+public WebOpenPanelResultListener(int /*long*/ id) {
+	super(id);
+}
+
+public WebOpenPanelResultListener(id id) {
+	super(id);
+}
+
+public void cancel() {
+	OS.objc_msgSend(id, OS.sel_cancel);
+}
+
+public void chooseFilename(NSString string) {
+	OS.objc_msgSend(id, OS.sel_chooseFilename_, string != null ? string.id : 0);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebPolicyDecisionListener.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebPolicyDecisionListener.java
new file mode 100644
index 0000000..ffa3aa1
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebPolicyDecisionListener.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.cocoa;
+
+public class WebPolicyDecisionListener extends NSObject {
+
+public WebPolicyDecisionListener() {
+	super();
+}
+
+public WebPolicyDecisionListener(int /*long*/ id) {
+	super(id);
+}
+
+public WebPolicyDecisionListener(id id) {
+	super(id);
+}
+	
+public void download() {
+	OS.objc_msgSend(id, OS.sel_download);
+}
+
+public void use() {
+	OS.objc_msgSend(id, OS.sel_use);
+}
+
+public void ignore() {
+	OS.objc_msgSend(id, OS.sel_ignore);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebPreferences.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebPreferences.java
new file mode 100644
index 0000000..da9bc92
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebPreferences.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class WebPreferences extends NSObject {
+
+public WebPreferences() {
+	super();
+}
+
+public WebPreferences(int /*long*/ id) {
+	super(id);
+}
+
+public WebPreferences(id id) {
+	super(id);
+}
+
+public void setJavaEnabled(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setJavaEnabled_, flag);
+}
+
+public void setJavaScriptEnabled(boolean flag) {
+	OS.objc_msgSend(this.id, OS.sel_setJavaScriptEnabled_, flag);
+}
+
+public static WebPreferences standardPreferences() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_WebPreferences, OS.sel_standardPreferences);
+	return result != 0 ? new WebPreferences(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebScriptObject.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebScriptObject.java
new file mode 100644
index 0000000..c25eb95
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebScriptObject.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class WebScriptObject extends NSObject {
+
+public WebScriptObject() {
+	super();
+}
+
+public WebScriptObject(int /*long*/ id) {
+	super(id);
+}
+
+public WebScriptObject(id id) {
+	super(id);
+}
+
+public id webScriptValueAtIndex(int index) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_webScriptValueAtIndex_, index);
+	return result != 0 ? new id(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebUndefined.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebUndefined.java
new file mode 100644
index 0000000..dd75807
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebUndefined.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class WebUndefined extends NSObject {
+
+public WebUndefined() {
+	super();
+}
+
+public WebUndefined(int /*long*/ id) {
+	super(id);
+}
+
+public WebUndefined(id id) {
+	super(id);
+}
+
+public static WebUndefined undefined() {
+	int /*long*/ result = OS.objc_msgSend(OS.class_WebUndefined, OS.sel_undefined);
+	return result != 0 ? new WebUndefined(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebView.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebView.java
new file mode 100644
index 0000000..34df6e3
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebView.java
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.cocoa;
+
+public class WebView extends NSView {
+
+public WebView() {
+	super();
+}
+
+public WebView(int /*long*/ id) {
+	super(id);
+}
+
+public WebView(id id) {
+	super(id);
+}
+
+public boolean canGoBack() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_canGoBack);
+}
+
+public boolean canGoForward() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_canGoForward);
+}
+
+public static boolean canShowMIMEType(NSString MIMEType) {
+	return OS.objc_msgSend_bool(OS.class_WebView, OS.sel_canShowMIMEType_, MIMEType != null ? MIMEType.id : 0);
+}
+
+public void copy(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_copy_, sender != null ? sender.id : 0);
+}
+
+public void cut(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_cut_, sender != null ? sender.id : 0);
+}
+
+public boolean goBack() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_goBack);
+}
+
+public boolean goForward() {
+	return OS.objc_msgSend_bool(this.id, OS.sel_goForward);
+}
+
+public WebView initWithFrame(NSRect frame, NSString frameName, NSString groupName) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_initWithFrame_frameName_groupName_, frame, frameName != null ? frameName.id : 0, groupName != null ? groupName.id : 0);
+	return result == this.id ? this : (result != 0 ? new WebView(result) : null);
+}
+
+public WebFrame mainFrame() {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_mainFrame);
+	return result != 0 ? new WebFrame(result) : null;
+}
+
+public void paste(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_paste_, sender != null ? sender.id : 0);
+}
+
+public void reload(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_reload_, sender != null ? sender.id : 0);
+}
+
+public void setApplicationNameForUserAgent(NSString applicationName) {
+	OS.objc_msgSend(this.id, OS.sel_setApplicationNameForUserAgent_, applicationName != null ? applicationName.id : 0);
+}
+
+public void setDownloadDelegate(id delegate) {
+	OS.objc_msgSend(this.id, OS.sel_setDownloadDelegate_, delegate != null ? delegate.id : 0);
+}
+
+public void setFrameLoadDelegate(id delegate) {
+	OS.objc_msgSend(this.id, OS.sel_setFrameLoadDelegate_, delegate != null ? delegate.id : 0);
+}
+
+public void setPolicyDelegate(id delegate) {
+	OS.objc_msgSend(this.id, OS.sel_setPolicyDelegate_, delegate != null ? delegate.id : 0);
+}
+
+public void setPreferences(WebPreferences prefs) {
+	OS.objc_msgSend(this.id, OS.sel_setPreferences_, prefs != null ? prefs.id : 0);
+}
+
+public void setResourceLoadDelegate(id delegate) {
+	OS.objc_msgSend(this.id, OS.sel_setResourceLoadDelegate_, delegate != null ? delegate.id : 0);
+}
+
+public void setUIDelegate(id delegate) {
+	OS.objc_msgSend(this.id, OS.sel_setUIDelegate_, delegate != null ? delegate.id : 0);
+}
+
+public void stopLoading(id sender) {
+	OS.objc_msgSend(this.id, OS.sel_stopLoading_, sender != null ? sender.id : 0);
+}
+
+public NSString stringByEvaluatingJavaScriptFromString(NSString script) {
+	int /*long*/ result = OS.objc_msgSend(this.id, OS.sel_stringByEvaluatingJavaScriptFromString_, script != null ? script.id : 0);
+	return result != 0 ? new NSString(result) : null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/id.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/id.java
new file mode 100644
index 0000000..2eee3a7
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/id.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.internal.cocoa;
+
+/**
+ * @jniclass flags=no_gen
+ */
+public class id {
+
+public int /*long*/ id;
+
+public id() {
+}
+
+public id(int /*long*/ id) {
+	this.id = id;
+}
+
+public id(id id) {
+	this.id = id != null ? id.id : 0;
+}
+
+public int /*long*/ objc_getClass() {
+	String name = getClass().getName();
+	int index = name.lastIndexOf('.');
+	if (index != -1) name = name.substring(index + 1);
+	return OS.objc_getClass(name);
+}
+
+public String toString() {
+	return getClass().getName() + "{" + id +  "}";
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/objc_super.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/objc_super.java
new file mode 100644
index 0000000..e9bf5d5
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/objc_super.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.internal.cocoa;
+
+/**
+ * @jniclass flags=struct
+ */
+public class objc_super {
+	/** @field cast=(id) */
+	public int /*long*/ receiver;
+	/** @field accessor=swt_super_class,cast=(Class) */
+	public int /*long*/ super_class;
+	public static final int sizeof = OS.objc_super_sizeof();	
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c.c b/bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c.c
new file mode 100644
index 0000000..15cfa51
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c.c
@@ -0,0 +1,744 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "c_structs.h"
+#include "c_stats.h"
+
+#define C_NATIVE(func) Java_org_eclipse_swt_internal_C_##func
+
+#ifndef NO_PTR_1sizeof
+JNIEXPORT jint JNICALL C_NATIVE(PTR_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	C_NATIVE_ENTER(env, that, PTR_1sizeof_FUNC);
+	rc = (jint)PTR_sizeof();
+	C_NATIVE_EXIT(env, that, PTR_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_free
+JNIEXPORT void JNICALL C_NATIVE(free)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	C_NATIVE_ENTER(env, that, free_FUNC);
+	free((void *)arg0);
+	C_NATIVE_EXIT(env, that, free_FUNC);
+}
+#endif
+
+#ifndef NO_getenv
+JNIEXPORT jintLong JNICALL C_NATIVE(getenv)
+	(JNIEnv *env, jclass that, jbyteArray arg0)
+{
+	jbyte *lparg0=NULL;
+	jintLong rc = 0;
+	C_NATIVE_ENTER(env, that, getenv_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL)) == NULL) goto fail;
+	rc = (jintLong)getenv((const char *)lparg0);
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
+	C_NATIVE_EXIT(env, that, getenv_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_malloc
+JNIEXPORT jintLong JNICALL C_NATIVE(malloc)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jintLong rc = 0;
+	C_NATIVE_ENTER(env, that, malloc_FUNC);
+	rc = (jintLong)malloc(arg0);
+	C_NATIVE_EXIT(env, that, malloc_FUNC);
+	return rc;
+}
+#endif
+
+#if (!defined(NO_memmove__III) && !defined(JNI64)) || (!defined(NO_memmove__JJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL C_NATIVE(memmove__III)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL C_NATIVE(memmove__JJJ)(JNIEnv *env, jclass that, jintLong arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+#ifndef JNI64
+	C_NATIVE_ENTER(env, that, memmove__III_FUNC);
+#else
+	C_NATIVE_ENTER(env, that, memmove__JJJ_FUNC);
+#endif
+	memmove((void *)arg0, (const void *)arg1, (size_t)arg2);
+#ifndef JNI64
+	C_NATIVE_EXIT(env, that, memmove__III_FUNC);
+#else
+	C_NATIVE_EXIT(env, that, memmove__JJJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__I_3BI) && !defined(JNI64)) || (!defined(NO_memmove__J_3BJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL C_NATIVE(memmove__I_3BI)(JNIEnv *env, jclass that, jintLong arg0, jbyteArray arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL C_NATIVE(memmove__J_3BJ)(JNIEnv *env, jclass that, jintLong arg0, jbyteArray arg1, jintLong arg2)
+#endif
+{
+	jbyte *lparg1=NULL;
+#ifndef JNI64
+	C_NATIVE_ENTER(env, that, memmove__I_3BI_FUNC);
+#else
+	C_NATIVE_ENTER(env, that, memmove__J_3BJ_FUNC);
+#endif
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg1) if ((lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg1) if ((lparg1 = (*env)->GetByteArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	}
+	memmove((void *)arg0, (const void *)lparg1, (size_t)arg2);
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg1 && lparg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, JNI_ABORT);
+	} else
+#endif
+	{
+		if (arg1 && lparg1) (*env)->ReleaseByteArrayElements(env, arg1, lparg1, JNI_ABORT);
+	}
+#ifndef JNI64
+	C_NATIVE_EXIT(env, that, memmove__I_3BI_FUNC);
+#else
+	C_NATIVE_EXIT(env, that, memmove__J_3BJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__I_3CI) && !defined(JNI64)) || (!defined(NO_memmove__J_3CJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL C_NATIVE(memmove__I_3CI)(JNIEnv *env, jclass that, jintLong arg0, jcharArray arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL C_NATIVE(memmove__J_3CJ)(JNIEnv *env, jclass that, jintLong arg0, jcharArray arg1, jintLong arg2)
+#endif
+{
+	jchar *lparg1=NULL;
+#ifndef JNI64
+	C_NATIVE_ENTER(env, that, memmove__I_3CI_FUNC);
+#else
+	C_NATIVE_ENTER(env, that, memmove__J_3CJ_FUNC);
+#endif
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg1) if ((lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg1) if ((lparg1 = (*env)->GetCharArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	}
+	memmove((void *)arg0, (const void *)lparg1, (size_t)arg2);
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg1 && lparg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, JNI_ABORT);
+	} else
+#endif
+	{
+		if (arg1 && lparg1) (*env)->ReleaseCharArrayElements(env, arg1, lparg1, JNI_ABORT);
+	}
+#ifndef JNI64
+	C_NATIVE_EXIT(env, that, memmove__I_3CI_FUNC);
+#else
+	C_NATIVE_EXIT(env, that, memmove__J_3CJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__I_3DI) && !defined(JNI64)) || (!defined(NO_memmove__J_3DJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL C_NATIVE(memmove__I_3DI)(JNIEnv *env, jclass that, jintLong arg0, jdoubleArray arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL C_NATIVE(memmove__J_3DJ)(JNIEnv *env, jclass that, jintLong arg0, jdoubleArray arg1, jintLong arg2)
+#endif
+{
+	jdouble *lparg1=NULL;
+#ifndef JNI64
+	C_NATIVE_ENTER(env, that, memmove__I_3DI_FUNC);
+#else
+	C_NATIVE_ENTER(env, that, memmove__J_3DJ_FUNC);
+#endif
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg1) if ((lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg1) if ((lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	}
+	memmove((void *)arg0, (const void *)lparg1, (size_t)arg2);
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg1 && lparg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, JNI_ABORT);
+	} else
+#endif
+	{
+		if (arg1 && lparg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, JNI_ABORT);
+	}
+#ifndef JNI64
+	C_NATIVE_EXIT(env, that, memmove__I_3DI_FUNC);
+#else
+	C_NATIVE_EXIT(env, that, memmove__J_3DJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__I_3FI) && !defined(JNI64)) || (!defined(NO_memmove__J_3FJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL C_NATIVE(memmove__I_3FI)(JNIEnv *env, jclass that, jintLong arg0, jfloatArray arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL C_NATIVE(memmove__J_3FJ)(JNIEnv *env, jclass that, jintLong arg0, jfloatArray arg1, jintLong arg2)
+#endif
+{
+	jfloat *lparg1=NULL;
+#ifndef JNI64
+	C_NATIVE_ENTER(env, that, memmove__I_3FI_FUNC);
+#else
+	C_NATIVE_ENTER(env, that, memmove__J_3FJ_FUNC);
+#endif
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg1) if ((lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg1) if ((lparg1 = (*env)->GetFloatArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	}
+	memmove((void *)arg0, (const void *)lparg1, (size_t)arg2);
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg1 && lparg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, JNI_ABORT);
+	} else
+#endif
+	{
+		if (arg1 && lparg1) (*env)->ReleaseFloatArrayElements(env, arg1, lparg1, JNI_ABORT);
+	}
+#ifndef JNI64
+	C_NATIVE_EXIT(env, that, memmove__I_3FI_FUNC);
+#else
+	C_NATIVE_EXIT(env, that, memmove__J_3FJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__I_3II) && !defined(JNI64)) || (!defined(NO_memmove__J_3IJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL C_NATIVE(memmove__I_3II)(JNIEnv *env, jclass that, jintLong arg0, jintArray arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL C_NATIVE(memmove__J_3IJ)(JNIEnv *env, jclass that, jintLong arg0, jintArray arg1, jintLong arg2)
+#endif
+{
+	jint *lparg1=NULL;
+#ifndef JNI64
+	C_NATIVE_ENTER(env, that, memmove__I_3II_FUNC);
+#else
+	C_NATIVE_ENTER(env, that, memmove__J_3IJ_FUNC);
+#endif
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg1) if ((lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg1) if ((lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	}
+	memmove((void *)arg0, (const void *)lparg1, (size_t)arg2);
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg1 && lparg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, JNI_ABORT);
+	} else
+#endif
+	{
+		if (arg1 && lparg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, JNI_ABORT);
+	}
+#ifndef JNI64
+	C_NATIVE_EXIT(env, that, memmove__I_3II_FUNC);
+#else
+	C_NATIVE_EXIT(env, that, memmove__J_3IJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__I_3JI) && !defined(JNI64)) || (!defined(NO_memmove__J_3JJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL C_NATIVE(memmove__I_3JI)(JNIEnv *env, jclass that, jintLong arg0, jlongArray arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL C_NATIVE(memmove__J_3JJ)(JNIEnv *env, jclass that, jintLong arg0, jlongArray arg1, jintLong arg2)
+#endif
+{
+	jlong *lparg1=NULL;
+#ifndef JNI64
+	C_NATIVE_ENTER(env, that, memmove__I_3JI_FUNC);
+#else
+	C_NATIVE_ENTER(env, that, memmove__J_3JJ_FUNC);
+#endif
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg1) if ((lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg1) if ((lparg1 = (*env)->GetLongArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	}
+	memmove((void *)arg0, (const void *)lparg1, (size_t)arg2);
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg1 && lparg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, JNI_ABORT);
+	} else
+#endif
+	{
+		if (arg1 && lparg1) (*env)->ReleaseLongArrayElements(env, arg1, lparg1, JNI_ABORT);
+	}
+#ifndef JNI64
+	C_NATIVE_EXIT(env, that, memmove__I_3JI_FUNC);
+#else
+	C_NATIVE_EXIT(env, that, memmove__J_3JJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove__I_3SI) && !defined(JNI64)) || (!defined(NO_memmove__J_3SJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL C_NATIVE(memmove__I_3SI)(JNIEnv *env, jclass that, jintLong arg0, jshortArray arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL C_NATIVE(memmove__J_3SJ)(JNIEnv *env, jclass that, jintLong arg0, jshortArray arg1, jintLong arg2)
+#endif
+{
+	jshort *lparg1=NULL;
+#ifndef JNI64
+	C_NATIVE_ENTER(env, that, memmove__I_3SI_FUNC);
+#else
+	C_NATIVE_ENTER(env, that, memmove__J_3SJ_FUNC);
+#endif
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg1) if ((lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg1) if ((lparg1 = (*env)->GetShortArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	}
+	memmove((void *)arg0, (const void *)lparg1, (size_t)arg2);
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg1 && lparg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, JNI_ABORT);
+	} else
+#endif
+	{
+		if (arg1 && lparg1) (*env)->ReleaseShortArrayElements(env, arg1, lparg1, JNI_ABORT);
+	}
+#ifndef JNI64
+	C_NATIVE_EXIT(env, that, memmove__I_3SI_FUNC);
+#else
+	C_NATIVE_EXIT(env, that, memmove__J_3SJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove___3BII) && !defined(JNI64)) || (!defined(NO_memmove___3BJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL C_NATIVE(memmove___3BII)(JNIEnv *env, jclass that, jbyteArray arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL C_NATIVE(memmove___3BJJ)(JNIEnv *env, jclass that, jbyteArray arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	jbyte *lparg0=NULL;
+#ifndef JNI64
+	C_NATIVE_ENTER(env, that, memmove___3BII_FUNC);
+#else
+	C_NATIVE_ENTER(env, that, memmove___3BJJ_FUNC);
+#endif
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg0) if ((lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg0) if ((lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL)) == NULL) goto fail;
+	}
+	memmove((void *)lparg0, (const void *)arg1, (size_t)arg2);
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg0 && lparg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
+	} else
+#endif
+	{
+		if (arg0 && lparg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
+	}
+#ifndef JNI64
+	C_NATIVE_EXIT(env, that, memmove___3BII_FUNC);
+#else
+	C_NATIVE_EXIT(env, that, memmove___3BJJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove___3B_3CI) && !defined(JNI64)) || (!defined(NO_memmove___3B_3CJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL C_NATIVE(memmove___3B_3CI)(JNIEnv *env, jclass that, jbyteArray arg0, jcharArray arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL C_NATIVE(memmove___3B_3CJ)(JNIEnv *env, jclass that, jbyteArray arg0, jcharArray arg1, jintLong arg2)
+#endif
+{
+	jbyte *lparg0=NULL;
+	jchar *lparg1=NULL;
+#ifndef JNI64
+	C_NATIVE_ENTER(env, that, memmove___3B_3CI_FUNC);
+#else
+	C_NATIVE_ENTER(env, that, memmove___3B_3CJ_FUNC);
+#endif
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg0) if ((lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL)) == NULL) goto fail;
+		if (arg1) if ((lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg0) if ((lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL)) == NULL) goto fail;
+		if (arg1) if ((lparg1 = (*env)->GetCharArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	}
+	memmove((void *)lparg0, (const void *)lparg1, (size_t)arg2);
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg1 && lparg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, JNI_ABORT);
+		if (arg0 && lparg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
+	} else
+#endif
+	{
+		if (arg1 && lparg1) (*env)->ReleaseCharArrayElements(env, arg1, lparg1, JNI_ABORT);
+		if (arg0 && lparg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
+	}
+#ifndef JNI64
+	C_NATIVE_EXIT(env, that, memmove___3B_3CI_FUNC);
+#else
+	C_NATIVE_EXIT(env, that, memmove___3B_3CJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove___3CII) && !defined(JNI64)) || (!defined(NO_memmove___3CJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL C_NATIVE(memmove___3CII)(JNIEnv *env, jclass that, jcharArray arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL C_NATIVE(memmove___3CJJ)(JNIEnv *env, jclass that, jcharArray arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	jchar *lparg0=NULL;
+#ifndef JNI64
+	C_NATIVE_ENTER(env, that, memmove___3CII_FUNC);
+#else
+	C_NATIVE_ENTER(env, that, memmove___3CJJ_FUNC);
+#endif
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg0) if ((lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg0) if ((lparg0 = (*env)->GetCharArrayElements(env, arg0, NULL)) == NULL) goto fail;
+	}
+	memmove((void *)lparg0, (const void *)arg1, (size_t)arg2);
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg0 && lparg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
+	} else
+#endif
+	{
+		if (arg0 && lparg0) (*env)->ReleaseCharArrayElements(env, arg0, lparg0, 0);
+	}
+#ifndef JNI64
+	C_NATIVE_EXIT(env, that, memmove___3CII_FUNC);
+#else
+	C_NATIVE_EXIT(env, that, memmove___3CJJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove___3DII) && !defined(JNI64)) || (!defined(NO_memmove___3DJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL C_NATIVE(memmove___3DII)(JNIEnv *env, jclass that, jdoubleArray arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL C_NATIVE(memmove___3DJJ)(JNIEnv *env, jclass that, jdoubleArray arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	jdouble *lparg0=NULL;
+#ifndef JNI64
+	C_NATIVE_ENTER(env, that, memmove___3DII_FUNC);
+#else
+	C_NATIVE_ENTER(env, that, memmove___3DJJ_FUNC);
+#endif
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg0) if ((lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg0) if ((lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL)) == NULL) goto fail;
+	}
+	memmove((void *)lparg0, (const void *)arg1, (size_t)arg2);
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg0 && lparg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
+	} else
+#endif
+	{
+		if (arg0 && lparg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+	}
+#ifndef JNI64
+	C_NATIVE_EXIT(env, that, memmove___3DII_FUNC);
+#else
+	C_NATIVE_EXIT(env, that, memmove___3DJJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove___3FII) && !defined(JNI64)) || (!defined(NO_memmove___3FJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL C_NATIVE(memmove___3FII)(JNIEnv *env, jclass that, jfloatArray arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL C_NATIVE(memmove___3FJJ)(JNIEnv *env, jclass that, jfloatArray arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	jfloat *lparg0=NULL;
+#ifndef JNI64
+	C_NATIVE_ENTER(env, that, memmove___3FII_FUNC);
+#else
+	C_NATIVE_ENTER(env, that, memmove___3FJJ_FUNC);
+#endif
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg0) if ((lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg0) if ((lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL)) == NULL) goto fail;
+	}
+	memmove((void *)lparg0, (const void *)arg1, (size_t)arg2);
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg0 && lparg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
+	} else
+#endif
+	{
+		if (arg0 && lparg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
+	}
+#ifndef JNI64
+	C_NATIVE_EXIT(env, that, memmove___3FII_FUNC);
+#else
+	C_NATIVE_EXIT(env, that, memmove___3FJJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove___3III) && !defined(JNI64)) || (!defined(NO_memmove___3IJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL C_NATIVE(memmove___3III)(JNIEnv *env, jclass that, jintArray arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL C_NATIVE(memmove___3IJJ)(JNIEnv *env, jclass that, jintArray arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	jint *lparg0=NULL;
+#ifndef JNI64
+	C_NATIVE_ENTER(env, that, memmove___3III_FUNC);
+#else
+	C_NATIVE_ENTER(env, that, memmove___3IJJ_FUNC);
+#endif
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg0) if ((lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg0) if ((lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL)) == NULL) goto fail;
+	}
+	memmove((void *)lparg0, (const void *)arg1, (size_t)arg2);
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg0 && lparg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
+	} else
+#endif
+	{
+		if (arg0 && lparg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+	}
+#ifndef JNI64
+	C_NATIVE_EXIT(env, that, memmove___3III_FUNC);
+#else
+	C_NATIVE_EXIT(env, that, memmove___3IJJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove___3I_3BI) && !defined(JNI64)) || (!defined(NO_memmove___3I_3BJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL C_NATIVE(memmove___3I_3BI)(JNIEnv *env, jclass that, jintArray arg0, jbyteArray arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL C_NATIVE(memmove___3I_3BJ)(JNIEnv *env, jclass that, jintArray arg0, jbyteArray arg1, jintLong arg2)
+#endif
+{
+	jint *lparg0=NULL;
+	jbyte *lparg1=NULL;
+#ifndef JNI64
+	C_NATIVE_ENTER(env, that, memmove___3I_3BI_FUNC);
+#else
+	C_NATIVE_ENTER(env, that, memmove___3I_3BJ_FUNC);
+#endif
+	if (arg1) if ((lparg1 = (*env)->GetByteArrayElements(env, arg1, NULL)) == NULL) goto fail;
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg0) if ((lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg0) if ((lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL)) == NULL) goto fail;
+	}
+	memmove((void *)lparg0, (const void *)lparg1, (size_t)arg2);
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg0 && lparg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
+	} else
+#endif
+	{
+		if (arg0 && lparg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+	}
+	if (arg1 && lparg1) (*env)->ReleaseByteArrayElements(env, arg1, lparg1, 0);
+#ifndef JNI64
+	C_NATIVE_EXIT(env, that, memmove___3I_3BI_FUNC);
+#else
+	C_NATIVE_EXIT(env, that, memmove___3I_3BJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove___3JII) && !defined(JNI64)) || (!defined(NO_memmove___3JJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL C_NATIVE(memmove___3JII)(JNIEnv *env, jclass that, jlongArray arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL C_NATIVE(memmove___3JJJ)(JNIEnv *env, jclass that, jlongArray arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	jlong *lparg0=NULL;
+#ifndef JNI64
+	C_NATIVE_ENTER(env, that, memmove___3JII_FUNC);
+#else
+	C_NATIVE_ENTER(env, that, memmove___3JJJ_FUNC);
+#endif
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg0) if ((lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg0) if ((lparg0 = (*env)->GetLongArrayElements(env, arg0, NULL)) == NULL) goto fail;
+	}
+	memmove((void *)lparg0, (const void *)arg1, (size_t)arg2);
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg0 && lparg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
+	} else
+#endif
+	{
+		if (arg0 && lparg0) (*env)->ReleaseLongArrayElements(env, arg0, lparg0, 0);
+	}
+#ifndef JNI64
+	C_NATIVE_EXIT(env, that, memmove___3JII_FUNC);
+#else
+	C_NATIVE_EXIT(env, that, memmove___3JJJ_FUNC);
+#endif
+}
+#endif
+
+#if (!defined(NO_memmove___3SII) && !defined(JNI64)) || (!defined(NO_memmove___3SJJ) && defined(JNI64))
+#ifndef JNI64
+JNIEXPORT void JNICALL C_NATIVE(memmove___3SII)(JNIEnv *env, jclass that, jshortArray arg0, jintLong arg1, jintLong arg2)
+#else
+JNIEXPORT void JNICALL C_NATIVE(memmove___3SJJ)(JNIEnv *env, jclass that, jshortArray arg0, jintLong arg1, jintLong arg2)
+#endif
+{
+	jshort *lparg0=NULL;
+#ifndef JNI64
+	C_NATIVE_ENTER(env, that, memmove___3SII_FUNC);
+#else
+	C_NATIVE_ENTER(env, that, memmove___3SJJ_FUNC);
+#endif
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg0) if ((lparg0 = (*env)->GetPrimitiveArrayCritical(env, arg0, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg0) if ((lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL)) == NULL) goto fail;
+	}
+	memmove((void *)lparg0, (const void *)arg1, (size_t)arg2);
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg0 && lparg0) (*env)->ReleasePrimitiveArrayCritical(env, arg0, lparg0, 0);
+	} else
+#endif
+	{
+		if (arg0 && lparg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
+	}
+#ifndef JNI64
+	C_NATIVE_EXIT(env, that, memmove___3SII_FUNC);
+#else
+	C_NATIVE_EXIT(env, that, memmove___3SJJ_FUNC);
+#endif
+}
+#endif
+
+#ifndef NO_memset
+JNIEXPORT jintLong JNICALL C_NATIVE(memset)
+	(JNIEnv *env, jclass that, jintLong arg0, jint arg1, jintLong arg2)
+{
+	jintLong rc = 0;
+	C_NATIVE_ENTER(env, that, memset_FUNC);
+	rc = (jintLong)memset((void *)arg0, arg1, (size_t)arg2);
+	C_NATIVE_EXIT(env, that, memset_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_strlen
+JNIEXPORT jint JNICALL C_NATIVE(strlen)
+	(JNIEnv *env, jclass that, jintLong arg0)
+{
+	jint rc = 0;
+	C_NATIVE_ENTER(env, that, strlen_FUNC);
+	rc = (jint)strlen((char *)arg0);
+	C_NATIVE_EXIT(env, that, strlen_FUNC);
+	return rc;
+}
+#endif
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c.h b/bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c.h
new file mode 100644
index 0000000..d87f5ec
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c.h
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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
+ *******************************************************************************/
+
+#ifndef INC_c_H
+#define INC_c_H
+
+#include <stdlib.h>
+#include <string.h>
+
+#define PTR_sizeof() sizeof(void *)
+
+/* Functions excludes */
+#ifdef _WIN32_WCE
+#define NO_getenv
+#endif /* _WIN32_WCE */
+
+#endif /* INC_c_H */
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c_stats.c b/bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c_stats.c
new file mode 100644
index 0000000..ee4a74d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c_stats.c
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "c_stats.h"
+
+#ifdef NATIVE_STATS
+
+int C_nativeFunctionCount = 23;
+int C_nativeFunctionCallCount[23];
+char * C_nativeFunctionNames[] = {
+	"PTR_1sizeof",
+	"free",
+	"getenv",
+	"malloc",
+#ifndef JNI64
+	"memmove__III",
+#else
+	"memmove__JJJ",
+#endif
+#ifndef JNI64
+	"memmove__I_3BI",
+#else
+	"memmove__J_3BJ",
+#endif
+#ifndef JNI64
+	"memmove__I_3CI",
+#else
+	"memmove__J_3CJ",
+#endif
+#ifndef JNI64
+	"memmove__I_3DI",
+#else
+	"memmove__J_3DJ",
+#endif
+#ifndef JNI64
+	"memmove__I_3FI",
+#else
+	"memmove__J_3FJ",
+#endif
+#ifndef JNI64
+	"memmove__I_3II",
+#else
+	"memmove__J_3IJ",
+#endif
+#ifndef JNI64
+	"memmove__I_3JI",
+#else
+	"memmove__J_3JJ",
+#endif
+#ifndef JNI64
+	"memmove__I_3SI",
+#else
+	"memmove__J_3SJ",
+#endif
+#ifndef JNI64
+	"memmove___3BII",
+#else
+	"memmove___3BJJ",
+#endif
+#ifndef JNI64
+	"memmove___3B_3CI",
+#else
+	"memmove___3B_3CJ",
+#endif
+#ifndef JNI64
+	"memmove___3CII",
+#else
+	"memmove___3CJJ",
+#endif
+#ifndef JNI64
+	"memmove___3DII",
+#else
+	"memmove___3DJJ",
+#endif
+#ifndef JNI64
+	"memmove___3FII",
+#else
+	"memmove___3FJJ",
+#endif
+#ifndef JNI64
+	"memmove___3III",
+#else
+	"memmove___3IJJ",
+#endif
+#ifndef JNI64
+	"memmove___3I_3BI",
+#else
+	"memmove___3I_3BJ",
+#endif
+#ifndef JNI64
+	"memmove___3JII",
+#else
+	"memmove___3JJJ",
+#endif
+#ifndef JNI64
+	"memmove___3SII",
+#else
+	"memmove___3SJJ",
+#endif
+	"memset",
+	"strlen",
+};
+
+#define STATS_NATIVE(func) Java_org_eclipse_swt_tools_internal_NativeStats_##func
+
+JNIEXPORT jint JNICALL STATS_NATIVE(C_1GetFunctionCount)
+	(JNIEnv *env, jclass that)
+{
+	return C_nativeFunctionCount;
+}
+
+JNIEXPORT jstring JNICALL STATS_NATIVE(C_1GetFunctionName)
+	(JNIEnv *env, jclass that, jint index)
+{
+	return (*env)->NewStringUTF(env, C_nativeFunctionNames[index]);
+}
+
+JNIEXPORT jint JNICALL STATS_NATIVE(C_1GetFunctionCallCount)
+	(JNIEnv *env, jclass that, jint index)
+{
+	return C_nativeFunctionCallCount[index];
+}
+
+#endif
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c_stats.h b/bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c_stats.h
new file mode 100644
index 0000000..cc34b1c
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c_stats.h
@@ -0,0 +1,119 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#ifdef NATIVE_STATS
+extern int C_nativeFunctionCount;
+extern int C_nativeFunctionCallCount[];
+extern char* C_nativeFunctionNames[];
+#define C_NATIVE_ENTER(env, that, func) C_nativeFunctionCallCount[func]++;
+#define C_NATIVE_EXIT(env, that, func) 
+#else
+#ifndef C_NATIVE_ENTER
+#define C_NATIVE_ENTER(env, that, func) 
+#endif
+#ifndef C_NATIVE_EXIT
+#define C_NATIVE_EXIT(env, that, func) 
+#endif
+#endif
+
+typedef enum {
+	PTR_1sizeof_FUNC,
+	free_FUNC,
+	getenv_FUNC,
+	malloc_FUNC,
+#ifndef JNI64
+	memmove__III_FUNC,
+#else
+	memmove__JJJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove__I_3BI_FUNC,
+#else
+	memmove__J_3BJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove__I_3CI_FUNC,
+#else
+	memmove__J_3CJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove__I_3DI_FUNC,
+#else
+	memmove__J_3DJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove__I_3FI_FUNC,
+#else
+	memmove__J_3FJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove__I_3II_FUNC,
+#else
+	memmove__J_3IJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove__I_3JI_FUNC,
+#else
+	memmove__J_3JJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove__I_3SI_FUNC,
+#else
+	memmove__J_3SJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove___3BII_FUNC,
+#else
+	memmove___3BJJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove___3B_3CI_FUNC,
+#else
+	memmove___3B_3CJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove___3CII_FUNC,
+#else
+	memmove___3CJJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove___3DII_FUNC,
+#else
+	memmove___3DJJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove___3FII_FUNC,
+#else
+	memmove___3FJJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove___3III_FUNC,
+#else
+	memmove___3IJJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove___3I_3BI_FUNC,
+#else
+	memmove___3I_3BJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove___3JII_FUNC,
+#else
+	memmove___3JJJ_FUNC,
+#endif
+#ifndef JNI64
+	memmove___3SII_FUNC,
+#else
+	memmove___3SJJ_FUNC,
+#endif
+	memset_FUNC,
+	strlen_FUNC,
+} C_FUNCS;
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c_structs.c b/bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c_structs.c
new file mode 100644
index 0000000..dc2a847
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c_structs.c
@@ -0,0 +1,14 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "c_structs.h"
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c_structs.h b/bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c_structs.h
new file mode 100644
index 0000000..7796b83
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c_structs.h
@@ -0,0 +1,13 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#include "c.h"
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/C.java b/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/C.java
new file mode 100644
index 0000000..886cb6e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/C.java
@@ -0,0 +1,141 @@
+/*******************************************************************************
+ * 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.internal;
+
+public class C extends Platform {
+
+	static {
+		if ("Linux".equals (System.getProperty ("os.name")) && "motif".equals (Platform.PLATFORM)) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			try {
+				Library.loadLibrary ("libXm.so.2", false); //$NON-NLS-1$
+			} catch (Throwable ex) {}
+		}
+		Library.loadLibrary ("swt"); //$NON-NLS-1$
+	}
+
+	public static final int PTR_SIZEOF = PTR_sizeof ();
+
+/** @param ptr cast=(void *) */
+public static final native void free (int /*long*/ ptr);
+/** @param env cast=(const char *) */
+public static final native int /*long*/ getenv (byte[] env);
+public static final native int /*long*/ malloc (int /*long*/ size);
+/**
+ * @param dest cast=(void *)
+ * @param src cast=(const void *),flags=no_out critical
+ * @param size cast=(size_t)
+ */
+public static final native void memmove (int /*long*/ dest, byte[] src, int /*long*/ size);
+/**
+ * @param dest cast=(void *)
+ * @param src cast=(const void *),flags=no_out critical
+ * @param size cast=(size_t)
+ */
+public static final native void memmove (int /*long*/ dest, char[] src, int /*long*/ size);
+/**
+ * @param dest cast=(void *)
+ * @param src cast=(const void *),flags=no_out critical
+ * @param size cast=(size_t)
+ */
+public static final native void memmove (int /*long*/ dest, double[] src, int /*long*/ size);
+/**
+ * @param dest cast=(void *)
+ * @param src cast=(const void *),flags=no_out critical
+ * @param size cast=(size_t)
+ */
+public static final native void memmove (int /*long*/ dest, float[] src, int /*long*/ size);
+/**
+ * @param dest cast=(void *)
+ * @param src cast=(const void *),flags=no_out critical
+ * @param size cast=(size_t)
+ */
+public static final native void memmove (int /*long*/ dest, int[] src, int /*long*/ size);
+/**
+ * @param dest cast=(void *)
+ * @param src cast=(const void *),flags=no_out critical
+ * @param size cast=(size_t)
+ */
+public static final native void memmove (int /*long*/ dest, long[] src, int /*long*/ size);
+/**
+ * @param dest cast=(void *)
+ * @param src cast=(const void *),flags=no_out critical
+ * @param size cast=(size_t)
+ */
+public static final native void memmove (int /*long*/ dest, short[] src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(const void *),flags=no_out critical
+ * @param size cast=(size_t)
+ */
+public static final native void memmove (byte[] dest, char[] src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(const void *)
+ * @param size cast=(size_t)
+ */
+public static final native void memmove (byte[] dest, int /*long*/ src, int /*long*/ size);
+/**
+ * @param dest cast=(void *)
+ * @param src cast=(const void *)
+ * @param size cast=(size_t)
+ */
+public static final native void memmove (int /*long*/ dest, int /*long*/ src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(const void *)
+ * @param size cast=(size_t)
+ */
+public static final native void memmove (char[] dest, int /*long*/ src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(const void *)
+ * @param size cast=(size_t)
+ */
+public static final native void memmove (double[] dest, int /*long*/ src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(const void *)
+ * @param size cast=(size_t)
+ */
+public static final native void memmove (float[] dest, int /*long*/ src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(const void *)
+ * @param size cast=(size_t)
+ */
+public static final native void memmove (int[] dest, byte[] src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(const void *)
+ * @param size cast=(size_t)
+ */
+public static final native void memmove (short[] dest, int /*long*/ src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(const void *)
+ * @param size cast=(size_t)
+ */
+public static final native void memmove (int[] dest, int /*long*/ src, int /*long*/ size);
+/**
+ * @param dest cast=(void *),flags=no_in critical
+ * @param src cast=(const void *)
+ * @param size cast=(size_t)
+ */
+public static final native void memmove (long[] dest, int /*long*/ src, int /*long*/ size);
+/**
+ * @param buffer cast=(void *),flags=critical
+ * @param num cast=(size_t)
+ */
+public static final native int /*long*/ memset (int /*long*/ buffer, int c, int /*long*/ num);
+public static final native int PTR_sizeof ();
+/** @param s cast=(char *) */
+public static final native int strlen (int /*long*/ s);
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/LONG.java b/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/LONG.java
new file mode 100644
index 0000000..8609adc
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/common/org/eclipse/swt/internal/LONG.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * 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.internal;
+
+/** @jniclass flags=no_gen */
+public class LONG {
+	public int /*long*/ value;
+	
+	public LONG (int /*long*/ value) {
+		this.value = value;
+	}
+
+	public boolean equals (Object object) {
+		if (object == this) return true;
+		if (!(object instanceof LONG)) return false;
+		LONG obj = (LONG)object;
+		return obj.value == this.value;
+	}
+
+	public int hashCode () {
+		return (int)/*64*/value;
+	}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_freebsd.mak b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_freebsd.mak
new file mode 100755
index 0000000..82b4dab
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_freebsd.mak
@@ -0,0 +1,293 @@
+#*******************************************************************************
+# Copyright (c) 2000, 2007 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
+#*******************************************************************************
+
+# Makefile for creating SWT libraries for Linux GTK
+
+include make_common.mak
+
+SWT_VERSION=$(maj_ver)$(min_ver)
+
+# Define the various shared libraries to be build.
+WS_PREFIX = gtk
+SWT_PREFIX = swt
+CDE_PREFIX = swt-cde
+AWT_PREFIX = swt-awt
+SWTPI_PREFIX = swt-pi
+CAIRO_PREFIX = swt-cairo
+ATK_PREFIX = swt-atk
+GNOME_PREFIX = swt-gnome
+MOZILLA_PREFIX = swt-mozilla$(GCC_VERSION)
+XULRUNNER_PREFIX = swt-xulrunner
+XPCOMINIT_PREFIX = swt-xpcominit
+GLX_PREFIX = swt-glx
+
+SWT_LIB = lib$(SWT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+CDE_LIB = lib$(CDE_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+AWT_LIB = lib$(AWT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+SWTPI_LIB = lib$(SWTPI_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+CAIRO_LIB = lib$(CAIRO_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+ATK_LIB = lib$(ATK_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+GNOME_LIB = lib$(GNOME_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+MOZILLA_LIB = lib$(MOZILLA_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+XULRUNNER_LIB = lib$(XULRUNNER_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+XPCOMINIT_LIB = lib$(XPCOMINIT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+GLX_LIB = lib$(GLX_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+
+CAIROCFLAGS = `pkg-config --cflags cairo`
+CAIROLIBS = `pkg-config --libs-only-L cairo` -lcairo
+
+# Do not use pkg-config to get libs because it includes unnecessary dependencies (i.e. pangoxft-1.0)
+GTKCFLAGS = `pkg-config --cflags gtk+-2.0`
+GTKLIBS = `pkg-config --libs-only-L gtk+-2.0 gthread-2.0` -lgtk-x11-2.0 -lgthread-2.0 -L/usr/X11R6/lib $(XLIB64) -lXtst
+
+CDE_LIBS = -L$(CDE_HOME)/lib -R$(CDE_HOME)/lib -lXt -lX11 -lDtSvc
+
+AWT_LIBS = -L$(AWT_LIB_PATH) -ljawt -shared
+
+ATKCFLAGS = `pkg-config --cflags atk gtk+-2.0`
+ATKLIBS = `pkg-config --libs-only-L atk gtk+-2.0` -latk-1.0 -lgtk-x11-2.0
+
+GNOMECFLAGS = `pkg-config --cflags gnome-vfs-module-2.0 libgnome-2.0 libgnomeui-2.0`
+GNOMELIBS = `pkg-config --libs-only-L gnome-vfs-module-2.0 libgnome-2.0 libgnomeui-2.0` -lgnomevfs-2 -lgnome-2 -lgnomeui-2
+
+GLXCFLAGS = 
+GLXLIBS = -shared -fPIC -L/usr/X11R6/lib -lGL -lGLU -lm
+
+# Uncomment for Native Stats tool
+#NATIVE_STATS = -DNATIVE_STATS
+
+MOZILLACFLAGS = -O \
+	-DSWT_VERSION=$(SWT_VERSION) \
+	$(NATIVE_STATS) \
+	-DMOZILLA_STRICT_API=1 \
+	-fno-rtti \
+	-fno-exceptions \
+	-Wall \
+	-Wno-non-virtual-dtor \
+	-fPIC \
+	-I. \
+	-I$(JAVA_HOME)/include \
+	-I$(JAVA_HOME)/include/freebsd \
+	${SWT_PTR_CFLAGS}
+MOZILLALIBS = -shared -Wl,--version-script=mozilla_exports -Bsymbolic
+	
+SWT_OBJECTS = swt.o c.o c_stats.o callback.o
+CDE_OBJECTS = swt.o cde.o cde_structs.o cde_stats.o
+AWT_OBJECTS = swt_awt.o
+SWTPI_OBJECTS = swt.o os.o os_structs.o os_custom.o os_stats.o
+CAIRO_OBJECTS = swt.o cairo.o cairo_structs.o cairo_stats.o
+ATK_OBJECTS = swt.o atk.o atk_structs.o atk_custom.o atk_stats.o
+GNOME_OBJECTS = swt.o gnome.o gnome_structs.o gnome_stats.o
+MOZILLA_OBJECTS = swt.o xpcom.o xpcom_custom.o xpcom_structs.o xpcom_stats.o
+XULRUNNER_OBJECTS = swt.o xpcomxul.o xpcomxul_custom.o xpcomxul_structs.o xpcomxul_stats.o xpcomxulglue.o xpcomxulglue_stats.o
+XPCOMINIT_OBJECTS = swt.o xpcominit.o xpcominit_structs.o xpcominit_stats.o
+GLX_OBJECTS = swt.o glx.o glx_structs.o glx_stats.o
+
+CFLAGS = -O -Wall \
+		-DSWT_VERSION=$(SWT_VERSION) \
+		$(NATIVE_STATS) \
+		-DFREEBSD -DGTK \
+		-I$(JAVA_HOME)/include \
+		-I$(JAVA_HOME)/include/freebsd \
+		-fPIC \
+		${SWT_PTR_CFLAGS}
+LIBS = -shared -fPIC
+
+ifndef NO_STRIP
+	AWT_LIBS := $(AWT_LIBS) -s
+	MOZILLALIBS := $(MOZILLALIBS) -s
+	LIBS := $(LIBS) -s
+endif
+
+all: make_swt make_atk make_gnome make_glx
+
+#
+# SWT libs
+#
+make_swt: $(SWT_LIB) $(SWTPI_LIB)
+
+$(SWT_LIB): $(SWT_OBJECTS)
+	$(CC) $(LIBS) -o $(SWT_LIB) $(SWT_OBJECTS)
+
+callback.o: callback.c callback.h
+	$(CC) $(CFLAGS) -DUSE_ASSEMBLER -c callback.c
+
+$(SWTPI_LIB): $(SWTPI_OBJECTS)
+	$(CC) $(LIBS) $(GTKLIBS) -o $(SWTPI_LIB) $(SWTPI_OBJECTS)
+
+swt.o: swt.c swt.h
+	$(CC) $(CFLAGS) -c swt.c
+os.o: os.c os.h swt.h os_custom.h
+	$(CC) $(CFLAGS) $(GTKCFLAGS) -c os.c
+os_structs.o: os_structs.c os_structs.h os.h swt.h
+	$(CC) $(CFLAGS) $(GTKCFLAGS) -c os_structs.c 
+os_custom.o: os_custom.c os_structs.h os.h swt.h
+	$(CC) $(CFLAGS) $(GTKCFLAGS) -c os_custom.c
+os_stats.o: os_stats.c os_structs.h os.h os_stats.h swt.h
+	$(CC) $(CFLAGS) $(GTKCFLAGS) -c os_stats.c
+
+#
+# CAIRO libs
+#
+make_cairo: $(CAIRO_LIB)
+
+$(CAIRO_LIB): $(CAIRO_OBJECTS)
+	$(CC) $(LIBS) $(CAIROLIBS) -o $(CAIRO_LIB) $(CAIRO_OBJECTS)
+
+cairo.o: cairo.c cairo.h swt.h
+	$(CC) $(CFLAGS) $(CAIROCFLAGS) -c cairo.c
+cairo_structs.o: cairo_structs.c cairo_structs.h cairo.h swt.h
+	$(CC) $(CFLAGS) $(CAIROCFLAGS) -c cairo_structs.c
+cairo_stats.o: cairo_stats.c cairo_structs.h cairo.h cairo_stats.h swt.h
+	$(CC) $(CFLAGS) $(CAIROCFLAGS) -c cairo_stats.c
+
+#
+# CDE lib
+#
+
+make_cde: $(CDE_LIB)
+
+$(CDE_LIB): $(CDE_OBJECTS)
+	$(CC) $(LIBS) $(CDE_LIBS) -o $(CDE_LIB) $(CDE_OBJECTS)
+
+#
+# AWT lib
+#
+make_awt:$(AWT_LIB)
+
+$(AWT_LIB): $(AWT_OBJECTS)
+	$(CC) $(AWT_LIBS) -o $(AWT_LIB) $(AWT_OBJECTS)
+
+#
+# Atk lib
+#
+make_atk: $(ATK_LIB)
+
+$(ATK_LIB): $(ATK_OBJECTS)
+	$(CC) $(LIBS) $(ATKLIBS) -o $(ATK_LIB) $(ATK_OBJECTS)
+
+atk.o: atk.c atk.h
+	$(CC) $(CFLAGS) $(ATKCFLAGS) -c atk.c
+atk_structs.o: atk_structs.c atk_structs.h atk.h
+	$(CC) $(CFLAGS) $(ATKCFLAGS) -c atk_structs.c
+atk_custom.o: atk_custom.c atk_structs.h atk.h
+	$(CC) $(CFLAGS) $(ATKCFLAGS) -c atk_custom.c
+atk_stats.o: atk_stats.c atk_structs.h atk_stats.h atk.h
+	$(CC) $(CFLAGS) $(ATKCFLAGS) -c atk_stats.c
+
+#
+# Gnome lib
+#
+make_gnome: $(GNOME_LIB)
+
+$(GNOME_LIB): $(GNOME_OBJECTS)
+	$(CC) $(LIBS) $(GNOMELIBS) -o $(GNOME_LIB) $(GNOME_OBJECTS)
+
+gnome.o: gnome.c 
+	$(CC) $(CFLAGS) $(GNOMECFLAGS) -c gnome.c
+
+gnome_structs.o: gnome_structs.c 
+	$(CC) $(CFLAGS) $(GNOMECFLAGS) -c gnome_structs.c
+	
+gnome_stats.o: gnome_stats.c gnome_stats.h
+	$(CC) $(CFLAGS) $(GNOMECFLAGS) -c gnome_stats.c
+
+#
+# Mozilla lib
+#
+make_mozilla:$(MOZILLA_LIB)
+
+$(MOZILLA_LIB): $(MOZILLA_OBJECTS)
+	$(CXX) -o $(MOZILLA_LIB) $(MOZILLA_OBJECTS) $(MOZILLALIBS) ${MOZILLA_LIBS}
+
+xpcom.o: xpcom.cpp
+	$(CXX) $(MOZILLACFLAGS) ${MOZILLA_INCLUDES} -c xpcom.cpp
+
+xpcom_structs.o: xpcom_structs.cpp
+	$(CXX) $(MOZILLACFLAGS) ${MOZILLA_INCLUDES} -c xpcom_structs.cpp
+	
+xpcom_custom.o: xpcom_custom.cpp
+	$(CXX) $(MOZILLACFLAGS) ${MOZILLA_INCLUDES} -c xpcom_custom.cpp
+
+xpcom_stats.o: xpcom_stats.cpp
+	$(CXX) $(MOZILLACFLAGS) ${MOZILLA_INCLUDES} -c xpcom_stats.cpp
+
+#
+# XULRunner lib
+#
+make_xulrunner:$(XULRUNNER_LIB)
+
+$(XULRUNNER_LIB): $(XULRUNNER_OBJECTS)
+	$(CXX) -o $(XULRUNNER_LIB) $(XULRUNNER_OBJECTS) $(MOZILLALIBS) ${XULRUNNER_LIBS}
+
+xpcomxul.o: xpcom.cpp
+	$(CXX) -o xpcomxul.o $(MOZILLACFLAGS) ${XULRUNNER_INCLUDES} -c xpcom.cpp
+
+xpcomxul_structs.o: xpcom_structs.cpp
+	$(CXX) -o xpcomxul_structs.o $(MOZILLACFLAGS) ${XULRUNNER_INCLUDES} -c xpcom_structs.cpp
+	
+xpcomxul_custom.o: xpcom_custom.cpp
+	$(CXX) -o xpcomxul_custom.o $(MOZILLACFLAGS) ${XULRUNNER_INCLUDES} -c xpcom_custom.cpp
+
+xpcomxul_stats.o: xpcom_stats.cpp
+	$(CXX) -o xpcomxul_stats.o $(MOZILLACFLAGS) ${XULRUNNER_INCLUDES} -c xpcom_stats.cpp
+
+xpcomxulglue.o: xpcomglue.cpp
+	$(CXX) -o xpcomxulglue.o $(MOZILLACFLAGS) ${XULRUNNER_INCLUDES} -c xpcomglue.cpp
+
+xpcomxulglue_stats.o: xpcomglue_stats.cpp
+	$(CXX) -o xpcomxulglue_stats.o $(MOZILLACFLAGS) ${XULRUNNER_INCLUDES} -c xpcomglue_stats.cpp
+
+#
+# XPCOMInit lib
+#
+make_xpcominit:$(XPCOMINIT_LIB)
+
+$(XPCOMINIT_LIB): $(XPCOMINIT_OBJECTS)
+	$(CXX) -o $(XPCOMINIT_LIB) $(XPCOMINIT_OBJECTS) $(MOZILLALIBS) ${XULRUNNER_LIBS}
+
+xpcominit.o: xpcominit.cpp
+	$(CXX) $(MOZILLACFLAGS) ${XULRUNNER_INCLUDES} -c xpcominit.cpp
+
+xpcominit_structs.o: xpcominit_structs.cpp
+	$(CXX) $(MOZILLACFLAGS) ${XULRUNNER_INCLUDES} -c xpcominit_structs.cpp
+	
+xpcominit_stats.o: xpcominit_stats.cpp
+	$(CXX) $(MOZILLACFLAGS) ${XULRUNNER_INCLUDES} -c xpcominit_stats.cpp
+
+#
+# GLX lib
+#
+make_glx: $(GLX_LIB)
+
+$(GLX_LIB): $(GLX_OBJECTS)
+	$(CC) $(LIBS) $(GLXLIBS) -o $(GLX_LIB) $(GLX_OBJECTS)
+
+glx.o: glx.c 
+	$(CC) $(CFLAGS) $(GLXCFLAGS) -c glx.c
+
+glx_structs.o: glx_structs.c 
+	$(CC) $(CFLAGS) $(GLXCFLAGS) -c glx_structs.c
+	
+glx_stats.o: glx_stats.c glx_stats.h
+	$(CC) $(CFLAGS) $(GLXCFLAGS) -c glx_stats.c
+
+#
+# Install
+#
+install: all
+	cp *.so $(OUTPUT_DIR)
+
+#
+# Clean
+#
+clean:
+	rm -f *.o *.so
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_solaris_x86.mak b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_solaris_x86.mak
new file mode 100755
index 0000000..a6f8cd5
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/make_solaris_x86.mak
@@ -0,0 +1,294 @@
+#*******************************************************************************
+# Copyright (c) 2000, 2009 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
+#*******************************************************************************
+
+# Makefile for creating SWT libraries for Solaris GTK (x86)
+
+include make_common.mak
+
+SWT_VERSION=$(maj_ver)$(min_ver)
+
+# Define the various shared libraries to be build.
+WS_PREFIX = gtk
+SWT_PREFIX = swt
+CDE_PREFIX = swt-cde
+AWT_PREFIX = swt-awt
+SWTPI_PREFIX = swt-pi
+CAIRO_PREFIX = swt-cairo
+ATK_PREFIX = swt-atk
+GNOME_PREFIX = swt-gnome
+MOZILLA_PREFIX = swt-mozilla$(GCC_VERSION)
+XULRUNNER_PREFIX = swt-xulrunner
+XPCOMINIT_PREFIX = swt-xpcominit
+GLX_PREFIX = swt-glx
+
+SWT_LIB = lib$(SWT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+CDE_LIB = lib$(CDE_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+AWT_LIB = lib$(AWT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+SWTPI_LIB = lib$(SWTPI_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+CAIRO_LIB = lib$(CAIRO_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+ATK_LIB = lib$(ATK_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+GNOME_LIB = lib$(GNOME_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+MOZILLA_LIB = lib$(MOZILLA_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+XULRUNNER_LIB = lib$(XULRUNNER_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+XPCOMINIT_LIB = lib$(XPCOMINIT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+GLX_LIB = lib$(GLX_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).so
+
+CAIROCFLAGS = `pkg-config --cflags cairo`
+CAIROLIBS = `pkg-config --libs-only-L cairo` -lcairo
+
+# Do not use pkg-config to get libs because it includes unnecessary dependencies (i.e. pangoxft-1.0)
+GTKCFLAGS = `pkg-config --cflags gtk+-2.0`
+GTKLIBS = `pkg-config --libs-only-L gtk+-2.0 gthread-2.0` -lgtk-x11-2.0 -lgthread-2.0 -L/usr/X11R6/lib $(XLIB64) -lXtst
+
+CDE_LIBS = -L$(CDE_HOME)/lib -R$(CDE_HOME)/lib -lXt -lX11 -lDtSvc
+
+AWT_LIBS = -L$(AWT_LIB_PATH) -ljawt -G 
+
+ATKCFLAGS = `pkg-config --cflags atk gtk+-2.0`
+ATKLIBS = `pkg-config --libs-only-L atk gtk+-2.0` -latk-1.0 -lgtk-x11-2.0
+
+GNOMECFLAGS = `pkg-config --cflags gnome-vfs-module-2.0 libgnome-2.0 libgnomeui-2.0`
+GNOMELIBS = `pkg-config --libs-only-L gnome-vfs-module-2.0 libgnome-2.0 libgnomeui-2.0` -lgnomevfs-2 -lgnome-2 -lgnomeui-2
+
+GLXCFLAGS = 
+GLXLIBS = -L/usr/X11R6/lib -lGL -lGLU -lm
+
+# Uncomment for Native Stats tool
+#NATIVE_STATS = -DNATIVE_STATS
+
+MOZILLACFLAGS = -O \
+	-DSWT_VERSION=$(SWT_VERSION) \
+	$(NATIVE_STATS) \
+	-DMOZILLA_STRICT_API=1 \
+	-KPIC \
+	+w \
+	-I. \
+	-I$(JAVA_HOME)/include \
+	-I$(JAVA_HOME)/include/linux \
+	${SWT_PTR_CFLAGS}
+MOZILLALIBS =  -G
+MOZILLAEXCLUDES = -DNO__1XPCOMGlueShutdown \
+	-DNO__1XPCOMGlueStartup \
+	-DNO__1XPCOMGlueLoadXULFunctions \
+	-DNO_memmove__ILorg_eclipse_swt_internal_mozilla_nsDynamicFunctionLoad_2I \
+	-DNO_memmove__JLorg_eclipse_swt_internal_mozilla_nsDynamicFunctionLoad_2J \
+	-DNO_nsDynamicFunctionLoad_1sizeof \
+	-DNO__1Call__IIIIII \
+	-DNO__1Call__JJJJJI \
+	-DNO_nsDynamicFunctionLoad
+XULRUNNEREXCLUDES = -DNO__1NS_1InitXPCOM2
+
+SWT_OBJECTS = swt.o c.o c_stats.o callback.o
+CDE_OBJECTS = swt.o cde.o cde_structs.o cde_stats.o
+AWT_OBJECTS = swt_awt.o
+SWTPI_OBJECTS = swt.o os.o os_structs.o os_custom.o os_stats.o
+CAIRO_OBJECTS = swt.o cairo.o cairo_structs.o cairo_stats.o
+ATK_OBJECTS = swt.o atk.o atk_structs.o atk_custom.o atk_stats.o
+GNOME_OBJECTS = swt.o gnome.o gnome_structs.o gnome_stats.o
+MOZILLA_OBJECTS = swt.o xpcom.o xpcom_custom.o xpcom_structs.o xpcom_stats.o
+XULRUNNER_OBJECTS = swt.o xpcomxul.o xpcomxul_custom.o xpcomxul_structs.o xpcomxul_stats.o
+XPCOMINIT_OBJECTS = swt.o xpcominit.o xpcominit_structs.o xpcominit_stats.o
+GLX_OBJECTS = swt.o glx.o glx_structs.o glx_stats.o
+
+CFLAGS = -O  +w \
+		-DSWT_VERSION=$(SWT_VERSION) \
+		$(NATIVE_STATS) \
+		-DLINUX -DGTK \
+		-I$(JAVA_HOME)/include \
+		-I$(JAVA_HOME)/include/linux \
+		-KPIC \
+		${SWT_PTR_CFLAGS}
+LIBS = -G -KPIC 
+
+ifndef NO_STRIP
+	AWT_LIBS := $(AWT_LIBS) -s
+	MOZILLALIBS := $(MOZILLALIBS) -s
+	LIBS := $(LIBS) -s
+endif
+
+all: make_swt make_atk make_gnome make_glx
+
+#
+# SWT libs
+#
+make_swt: $(SWT_LIB) $(SWTPI_LIB)
+
+$(SWT_LIB): $(SWT_OBJECTS)
+	$(CC) $(LIBS) -o $(SWT_LIB) $(SWT_OBJECTS)
+
+callback.o: callback.c callback.h
+	$(CC) $(CFLAGS) -DUSE_ASSEMBLER -c callback.c
+
+$(SWTPI_LIB): $(SWTPI_OBJECTS)
+	$(CC) $(LIBS) $(GTKLIBS) -o $(SWTPI_LIB) $(SWTPI_OBJECTS)
+
+swt.o: swt.c swt.h
+	$(CC) $(CFLAGS) -c swt.c
+os.o: os.c os.h swt.h os_custom.h
+	$(CC) $(CFLAGS) $(GTKCFLAGS) -c os.c
+os_structs.o: os_structs.c os_structs.h os.h swt.h
+	$(CC) $(CFLAGS) $(GTKCFLAGS) -c os_structs.c 
+os_custom.o: os_custom.c os_structs.h os.h swt.h
+	$(CC) $(CFLAGS) $(GTKCFLAGS) -c os_custom.c
+os_stats.o: os_stats.c os_structs.h os.h os_stats.h swt.h
+	$(CC) $(CFLAGS) $(GTKCFLAGS) -c os_stats.c
+
+#
+# CAIRO libs
+#
+make_cairo: $(CAIRO_LIB)
+
+$(CAIRO_LIB): $(CAIRO_OBJECTS)
+	$(CC) $(LIBS) $(CAIROLIBS) -o $(CAIRO_LIB) $(CAIRO_OBJECTS)
+
+cairo.o: cairo.c cairo.h swt.h
+	$(CC) $(CFLAGS) $(CAIROCFLAGS) -c cairo.c
+cairo_structs.o: cairo_structs.c cairo_structs.h cairo.h swt.h
+	$(CC) $(CFLAGS) $(CAIROCFLAGS) -c cairo_structs.c
+cairo_stats.o: cairo_stats.c cairo_structs.h cairo.h cairo_stats.h swt.h
+	$(CC) $(CFLAGS) $(CAIROCFLAGS) -c cairo_stats.c
+
+#
+# CDE lib
+#
+
+make_cde: $(CDE_LIB)
+
+$(CDE_LIB): $(CDE_OBJECTS)
+	$(CC) $(LIBS) $(CDE_LIBS) -o $(CDE_LIB) $(CDE_OBJECTS)
+
+#
+# AWT lib
+#
+make_awt:$(AWT_LIB)
+
+$(AWT_LIB): $(AWT_OBJECTS)
+	$(CC) $(AWT_LIBS) -o $(AWT_LIB) $(AWT_OBJECTS)
+
+#
+# Atk lib
+#
+make_atk: $(ATK_LIB)
+
+$(ATK_LIB): $(ATK_OBJECTS)
+	$(CC) $(LIBS) $(ATKLIBS) -o $(ATK_LIB) $(ATK_OBJECTS)
+
+atk.o: atk.c atk.h
+	$(CC) $(CFLAGS) $(ATKCFLAGS) -c atk.c
+atk_structs.o: atk_structs.c atk_structs.h atk.h
+	$(CC) $(CFLAGS) $(ATKCFLAGS) -c atk_structs.c
+atk_custom.o: atk_custom.c atk_structs.h atk.h
+	$(CC) $(CFLAGS) $(ATKCFLAGS) -c atk_custom.c
+atk_stats.o: atk_stats.c atk_structs.h atk_stats.h atk.h
+	$(CC) $(CFLAGS) $(ATKCFLAGS) -c atk_stats.c
+
+#
+# Gnome lib
+#
+make_gnome: $(GNOME_LIB)
+
+$(GNOME_LIB): $(GNOME_OBJECTS)
+	$(CC) $(LIBS) $(GNOMELIBS) -o $(GNOME_LIB) $(GNOME_OBJECTS)
+
+gnome.o: gnome.c 
+	$(CC) $(CFLAGS) $(GNOMECFLAGS) -c gnome.c
+
+gnome_structs.o: gnome_structs.c 
+	$(CC) $(CFLAGS) $(GNOMECFLAGS) -c gnome_structs.c
+	
+gnome_stats.o: gnome_stats.c gnome_stats.h
+	$(CC) $(CFLAGS) $(GNOMECFLAGS) -c gnome_stats.c
+
+#
+# Mozilla lib
+#
+make_mozilla:$(MOZILLA_LIB)
+
+$(MOZILLA_LIB): $(MOZILLA_OBJECTS)
+	$(CXX) -o $(MOZILLA_LIB) $(MOZILLA_OBJECTS) $(MOZILLALIBS) ${MOZILLA_LIBS}
+
+xpcom.o: xpcom.cpp
+	$(CXX) $(MOZILLACFLAGS) $(MOZILLAEXCLUDES) ${MOZILLA_INCLUDES} -c xpcom.cpp
+
+xpcom_structs.o: xpcom_structs.cpp
+	$(CXX) $(MOZILLACFLAGS) $(MOZILLAEXCLUDES) ${MOZILLA_INCLUDES} -c xpcom_structs.cpp
+	
+xpcom_custom.o: xpcom_custom.cpp
+	$(CXX) $(MOZILLACFLAGS) $(MOZILLAEXCLUDES) ${MOZILLA_INCLUDES} -c xpcom_custom.cpp
+
+xpcom_stats.o: xpcom_stats.cpp
+	$(CXX) $(MOZILLACFLAGS) $(MOZILLAEXCLUDES) ${MOZILLA_INCLUDES} -c xpcom_stats.cpp
+
+#
+# XULRunner lib
+#
+make_xulrunner:$(XULRUNNER_LIB)
+
+$(XULRUNNER_LIB): $(XULRUNNER_OBJECTS)
+	$(CXX) -o $(XULRUNNER_LIB) $(XULRUNNER_OBJECTS) $(MOZILLALIBS) ${XULRUNNER_LIBS}
+
+xpcomxul.o: xpcom.cpp
+	$(CXX) -o xpcomxul.o $(MOZILLACFLAGS) $(XULRUNNEREXCLUDES) ${XULRUNNER_INCLUDES} -c xpcom.cpp
+
+xpcomxul_structs.o: xpcom_structs.cpp
+	$(CXX) -o xpcomxul_structs.o $(MOZILLACFLAGS) $(XULRUNNEREXCLUDES) ${XULRUNNER_INCLUDES} -c xpcom_structs.cpp
+	
+xpcomxul_custom.o: xpcom_custom.cpp
+	$(CXX) -o xpcomxul_custom.o $(MOZILLACFLAGS) $(XULRUNNEREXCLUDES) ${XULRUNNER_INCLUDES} -c xpcom_custom.cpp
+
+xpcomxul_stats.o: xpcom_stats.cpp
+	$(CXX) -o xpcomxul_stats.o $(MOZILLACFLAGS) $(XULRUNNEREXCLUDES) ${XULRUNNER_INCLUDES} -c xpcom_stats.cpp
+
+#
+# XPCOMInit lib
+#
+make_xpcominit:$(XPCOMINIT_LIB)
+
+$(XPCOMINIT_LIB): $(XPCOMINIT_OBJECTS)
+	$(CXX) -o $(XPCOMINIT_LIB) $(XPCOMINIT_OBJECTS) $(MOZILLALIBS) ${XULRUNNER_LIBS}
+
+xpcominit.o: xpcominit.cpp
+	$(CXX) $(MOZILLACFLAGS) ${XULRUNNER_INCLUDES} -c xpcominit.cpp
+
+xpcominit_structs.o: xpcominit_structs.cpp
+	$(CXX) $(MOZILLACFLAGS) ${XULRUNNER_INCLUDES} -c xpcominit_structs.cpp
+	
+xpcominit_stats.o: xpcominit_stats.cpp
+	$(CXX) $(MOZILLACFLAGS) ${XULRUNNER_INCLUDES} -c xpcominit_stats.cpp
+
+#
+# GLX lib
+#
+make_glx: $(GLX_LIB)
+
+$(GLX_LIB): $(GLX_OBJECTS)
+	$(CC) $(LIBS) $(GLXLIBS) -o $(GLX_LIB) $(GLX_OBJECTS)
+
+glx.o: glx.c 
+	$(CC) $(CFLAGS) $(GLXCFLAGS) -c glx.c
+
+glx_structs.o: glx_structs.c 
+	$(CC) $(CFLAGS) $(GLXCFLAGS) -c glx_structs.c
+	
+glx_stats.o: glx_stats.c glx_stats.h
+	$(CC) $(CFLAGS) $(GLXCFLAGS) -c glx_stats.c
+
+#
+# Install
+#
+install: all
+	cp *.so $(OUTPUT_DIR)
+
+#
+# Clean
+#
+clean:
+	rm -f *.o *.so
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/Lock.java b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/Lock.java
new file mode 100755
index 0000000..7254f52
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/Lock.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * 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.internal;
+
+/**
+ * Instances of this represent a recursive monitor.
+ */
+public class Lock {
+	int count, waitCount;
+	Thread owner;
+
+/**
+ * Locks the monitor and returns the lock count. If
+ * the lock is owned by another thread, wait until
+ * the lock is released.
+ * 
+ * @return the lock count
+ */
+public int lock() {
+	synchronized (this) {
+		Thread current = Thread.currentThread();
+		if (owner != current) {
+			waitCount++;
+			while (count > 0) {
+				try {
+					wait();
+				} catch (InterruptedException e) {
+					/* Wait forever, just like synchronized blocks */
+				}
+			}
+			--waitCount;
+			owner = current;
+		}
+		return ++count;
+	}
+}
+
+/**
+ * Unlocks the monitor. If the current thread is not
+ * the monitor owner, do nothing.
+ */
+public void unlock() {
+	synchronized (this) {
+		Thread current = Thread.currentThread();
+		if (owner == current) {
+			if (--count == 0) {
+				owner = null;
+				if (waitCount > 0) notifyAll();
+			}
+		}
+	}
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/PangoAttrColor.java b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/PangoAttrColor.java
new file mode 100644
index 0000000..8b96802
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/PangoAttrColor.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others. All rights reserved.
+ * The contents of this file are made available under the terms
+ * of the GNU Lesser General Public License (LGPL) Version 2.1 that
+ * accompanies this distribution (lgpl-v21.txt).  The LGPL is also
+ * available at http://www.gnu.org/licenses/lgpl.html.  If the version
+ * of the LGPL at http://www.gnu.org is different to the version of
+ * the LGPL accompanying this distribution and there is any conflict
+ * between the two license versions, the terms of the LGPL accompanying
+ * this distribution shall govern.
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.gtk;
+
+
+public class PangoAttrColor extends PangoAttribute {
+	/** @field accessor=color.red */
+	public short color_red;
+	/** @field accessor=color.green */
+	public short color_green;
+	/** @field accessor=color.blue */
+	public short color_blue;
+	public static final int sizeof = OS.PangoAttrColor_sizeof();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/PangoAttrInt.java b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/PangoAttrInt.java
new file mode 100644
index 0000000..0a71c1c
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/PangoAttrInt.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 IBM Corporation and others. All rights reserved.
+ * The contents of this file are made available under the terms
+ * of the GNU Lesser General Public License (LGPL) Version 2.1 that
+ * accompanies this distribution (lgpl-v21.txt).  The LGPL is also
+ * available at http://www.gnu.org/licenses/lgpl.html.  If the version
+ * of the LGPL at http://www.gnu.org is different to the version of
+ * the LGPL accompanying this distribution and there is any conflict
+ * between the two license versions, the terms of the LGPL accompanying
+ * this distribution shall govern.
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.gtk;
+
+
+public class PangoAttrInt extends PangoAttribute {
+	public int value;
+	public static final int sizeof = OS.PangoAttrInt_sizeof();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/motif/org/eclipse/swt/internal/Lock.java b/bundles/org.eclipse.swt/Eclipse SWT PI/motif/org/eclipse/swt/internal/Lock.java
new file mode 100755
index 0000000..7254f52
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/motif/org/eclipse/swt/internal/Lock.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * 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.internal;
+
+/**
+ * Instances of this represent a recursive monitor.
+ */
+public class Lock {
+	int count, waitCount;
+	Thread owner;
+
+/**
+ * Locks the monitor and returns the lock count. If
+ * the lock is owned by another thread, wait until
+ * the lock is released.
+ * 
+ * @return the lock count
+ */
+public int lock() {
+	synchronized (this) {
+		Thread current = Thread.currentThread();
+		if (owner != current) {
+			waitCount++;
+			while (count > 0) {
+				try {
+					wait();
+				} catch (InterruptedException e) {
+					/* Wait forever, just like synchronized blocks */
+				}
+			}
+			--waitCount;
+			owner = current;
+		}
+		return ++count;
+	}
+}
+
+/**
+ * Unlocks the monitor. If the current thread is not
+ * the monitor owner, do nothing.
+ */
+public void unlock() {
+	synchronized (this) {
+		Thread current = Thread.currentThread();
+		if (owner == current) {
+			if (--count == 0) {
+				owner = null;
+				if (waitCount > 0) notifyAll();
+			}
+		}
+	}
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/photon/org/eclipse/swt/internal/photon/PtWebClient2Data_t.java b/bundles/org.eclipse.swt/Eclipse SWT PI/photon/org/eclipse/swt/internal/photon/PtWebClient2Data_t.java
new file mode 100755
index 0000000..3f6aecf
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/photon/org/eclipse/swt/internal/photon/PtWebClient2Data_t.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.internal.photon;
+
+public class PtWebClient2Data_t {
+	public int type;
+	public int url;
+	public int length;
+	public int data;
+	public static final int sizeof = 16;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/com_custom.c b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/com_custom.c
new file mode 100644
index 0000000..59e8228
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/com_custom.c
@@ -0,0 +1,312 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "com_structs.h"
+#include "com_stats.h"
+
+#define COM_NATIVE(func) Java_org_eclipse_swt_internal_ole_win32_COM_##func
+
+#ifndef NO_get_1accChild_1CALLBACK
+static jintLong get_accChild_CALLBACK;
+static HRESULT CALLBACK get_accChild(void* ppVTable, VARIANT varChildID, IDispatch** ppdispChild)
+{
+	return ((HRESULT (CALLBACK *)(void*, VARIANT*, IDispatch**))get_accChild_CALLBACK)(ppVTable, &varChildID, ppdispChild);
+}
+JNIEXPORT jintLong JNICALL COM_NATIVE(get_1accChild_1CALLBACK)
+	(JNIEnv *env, jclass that, jintLong func)
+{
+	get_accChild_CALLBACK = func;
+	return (jintLong)get_accChild;
+}
+#endif
+
+#ifndef NO_get_1accName_1CALLBACK
+static jintLong get_accName_CALLBACK;
+static HRESULT CALLBACK get_accName(void* ppVTable, VARIANT varID, BSTR* pszName)
+{
+	return ((HRESULT (CALLBACK *)(void*, VARIANT*, BSTR*))get_accName_CALLBACK)(ppVTable, &varID, pszName);
+}
+JNIEXPORT jintLong JNICALL COM_NATIVE(get_1accName_1CALLBACK)
+	(JNIEnv *env, jclass that, jintLong func)
+{
+	get_accName_CALLBACK = func;
+	return (jintLong)get_accName;
+}
+#endif
+
+#ifndef NO_get_1accValue_1CALLBACK
+static jintLong get_accValue_CALLBACK;
+static HRESULT CALLBACK get_accValue(void* ppVTable, VARIANT varID, BSTR* pszValue)
+{
+	return ((HRESULT (CALLBACK *)(void*, VARIANT*, BSTR*))get_accValue_CALLBACK)(ppVTable, &varID, pszValue);
+}
+JNIEXPORT jintLong JNICALL COM_NATIVE(get_1accValue_1CALLBACK)
+	(JNIEnv *env, jclass that, jintLong func)
+{
+	get_accValue_CALLBACK = func;
+	return (jintLong)get_accValue;
+}
+#endif
+
+#ifndef NO_get_1accDescription_1CALLBACK
+static jintLong get_accDescription_CALLBACK;
+static HRESULT CALLBACK get_accDescription( void* ppVTable, VARIANT varID, BSTR* pszDescription)
+{
+	return ((HRESULT (CALLBACK *)(void*, VARIANT*, BSTR*))get_accDescription_CALLBACK)(ppVTable, &varID, pszDescription);
+}
+JNIEXPORT jintLong JNICALL COM_NATIVE(get_1accDescription_1CALLBACK)
+	(JNIEnv *env, jclass that, jintLong func)
+{
+	get_accDescription_CALLBACK = func;
+	return (jintLong)get_accDescription;
+}
+#endif
+
+#ifndef NO_get_1accRole_1CALLBACK
+static jintLong get_accRole_CALLBACK;
+static HRESULT CALLBACK get_accRole(void* ppVTable, VARIANT varID, VARIANT* pvarRole)
+{
+	return ((HRESULT (CALLBACK *)(void*, VARIANT*, VARIANT*))get_accRole_CALLBACK)(ppVTable, &varID, pvarRole);
+}
+JNIEXPORT jintLong JNICALL COM_NATIVE(get_1accRole_1CALLBACK)
+	(JNIEnv *env, jclass that, jintLong func)
+{
+	get_accRole_CALLBACK = func;
+	return (jintLong)get_accRole;
+}
+#endif
+
+#ifndef NO_get_1accState_1CALLBACK
+static jintLong get_accState_CALLBACK;
+static HRESULT CALLBACK get_accState(void* ppVTable, VARIANT varID, VARIANT* pvarState)
+{
+	return ((HRESULT (CALLBACK *)(void*, VARIANT*, VARIANT*))get_accState_CALLBACK)(ppVTable, &varID, pvarState);
+}
+JNIEXPORT jintLong JNICALL COM_NATIVE(get_1accState_1CALLBACK)
+	(JNIEnv *env, jclass that, jintLong func)
+{
+	get_accState_CALLBACK = func;
+	return (jintLong)get_accState;
+}
+#endif
+
+#ifndef NO_get_1accHelp_1CALLBACK
+static jintLong get_accHelp_CALLBACK;
+static HRESULT CALLBACK get_accHelp(void* ppVTable, VARIANT varID, BSTR* pszHelp)
+{
+	return ((HRESULT (CALLBACK *)(void*, VARIANT*, BSTR*))get_accHelp_CALLBACK)(ppVTable, &varID, pszHelp);
+}
+JNIEXPORT jintLong JNICALL COM_NATIVE(get_1accHelp_1CALLBACK)
+	(JNIEnv *env, jclass that, jintLong func)
+{
+	get_accHelp_CALLBACK = func;
+	return (jintLong)get_accHelp;
+}
+#endif
+
+#ifndef NO_get_1accHelpTopic_1CALLBACK
+static jintLong get_accHelpTopic_CALLBACK;
+static HRESULT CALLBACK get_accHelpTopic(void* ppVTable, BSTR* pszHelpFile, VARIANT varChild, long* pidTopic)
+{
+	return ((HRESULT (CALLBACK *)(void*, BSTR*, VARIANT*, long*))get_accHelpTopic_CALLBACK)(ppVTable, pszHelpFile, &varChild, pidTopic);
+}
+JNIEXPORT jintLong JNICALL COM_NATIVE(get_1accHelpTopic_1CALLBACK)
+	(JNIEnv *env, jclass that, jintLong func)
+{
+	get_accHelpTopic_CALLBACK = func;
+	return (jintLong)get_accHelpTopic;
+}
+#endif
+
+#ifndef NO_get_1accKeyboardShortcut_1CALLBACK
+static jintLong get_accKeyboardShortcut_CALLBACK;
+static HRESULT CALLBACK get_accKeyboardShortcut(void* ppVTable, VARIANT varID, BSTR* pszKeyboardShortcut)
+{
+	return ((HRESULT (CALLBACK *)(void*, VARIANT*, BSTR*))get_accKeyboardShortcut_CALLBACK)(ppVTable, &varID, pszKeyboardShortcut);
+}
+JNIEXPORT jintLong JNICALL COM_NATIVE(get_1accKeyboardShortcut_1CALLBACK)
+	(JNIEnv *env, jclass that, jintLong func)
+{
+	get_accKeyboardShortcut_CALLBACK = func;
+	return (jintLong)get_accKeyboardShortcut;
+}
+#endif
+
+#ifndef NO_get_1accDefaultAction_1CALLBACK
+static jintLong get_accDefaultAction_CALLBACK;
+static HRESULT CALLBACK get_accDefaultAction(void* ppVTable, VARIANT varID, BSTR* pszDefaultAction)
+{
+	return ((HRESULT (CALLBACK *)(void*, VARIANT*, BSTR*))get_accDefaultAction_CALLBACK)(ppVTable, &varID, pszDefaultAction);
+}
+JNIEXPORT jintLong JNICALL COM_NATIVE(get_1accDefaultAction_1CALLBACK)
+	(JNIEnv *env, jclass that, jintLong func)
+{
+	get_accDefaultAction_CALLBACK = func;
+	return (jintLong)get_accDefaultAction;
+}
+#endif
+
+#ifndef NO_accSelect_1CALLBACK
+static jintLong accSelect_CALLBACK;
+static HRESULT CALLBACK accSelect(void* ppVTable, long flagsSelect, VARIANT varID)
+{
+	return ((HRESULT (CALLBACK *)(void*, long, VARIANT*))accSelect_CALLBACK)(ppVTable, flagsSelect, &varID);
+}
+JNIEXPORT jintLong JNICALL COM_NATIVE(accSelect_1CALLBACK)
+	(JNIEnv *env, jclass that, jintLong func)
+{
+	accSelect_CALLBACK = func;
+	return (jintLong)accSelect;
+}
+#endif
+
+#ifndef NO_accLocation_1CALLBACK
+static jintLong accLocation_CALLBACK;
+static HRESULT CALLBACK accLocation(void* ppVTable, long* pxLeft, long* pyTop, long* pcxWidth, long* pcyHeight, VARIANT varID) 
+{
+	return ((HRESULT (CALLBACK *)(void*, long*, long*, long*, long*, VARIANT*))accLocation_CALLBACK)(ppVTable, pxLeft, pyTop, pcxWidth, pcyHeight, &varID);
+}
+JNIEXPORT jintLong JNICALL COM_NATIVE(accLocation_1CALLBACK)
+	(JNIEnv *env, jclass that, jintLong func)
+{
+	accLocation_CALLBACK = func;
+	return (jintLong)accLocation;
+}
+#endif
+
+#ifndef NO_accNavigate_1CALLBACK
+static jintLong accNavigate_CALLBACK;
+static HRESULT CALLBACK accNavigate(void* ppVTable, long navDir, VARIANT varStart, VARIANT* pvarEnd)
+{
+	return ((HRESULT (CALLBACK *)(void*, long, VARIANT*, VARIANT*))accNavigate_CALLBACK)(ppVTable, navDir, &varStart, pvarEnd);
+}
+JNIEXPORT jintLong JNICALL COM_NATIVE(accNavigate_1CALLBACK)
+	(JNIEnv *env, jclass that, jintLong func)
+{
+	accNavigate_CALLBACK = func;
+	return (jintLong)accNavigate;
+}
+#endif
+
+#ifndef NO_accDoDefaultAction_1CALLBACK
+static jintLong accDoDefaultAction_CALLBACK;
+static HRESULT CALLBACK accDoDefaultAction(void* ppVTable, VARIANT varID)
+{
+	return ((HRESULT (CALLBACK *)(void*, VARIANT*))accDoDefaultAction_CALLBACK)(ppVTable, &varID);
+}
+JNIEXPORT jintLong JNICALL COM_NATIVE(accDoDefaultAction_1CALLBACK)
+	(JNIEnv *env, jclass that, jintLong func)
+{
+	accDoDefaultAction_CALLBACK = func;
+	return (jintLong)accDoDefaultAction;
+}
+#endif
+
+#ifndef NO_put_1accName_1CALLBACK
+static jintLong put_accName_CALLBACK;
+static HRESULT CALLBACK put_accName(void* ppVTable, VARIANT varID, BSTR* pszName)
+{
+	return ((HRESULT (CALLBACK *)(void*, VARIANT*, BSTR*))put_accName_CALLBACK)(ppVTable, &varID, pszName);
+}
+JNIEXPORT jintLong JNICALL COM_NATIVE(put_1accName_1CALLBACK)
+	(JNIEnv *env, jclass that, jintLong func)
+{
+	put_accName_CALLBACK = func;
+	return (jintLong)put_accName;
+}
+#endif
+
+#ifndef NO_put_1accValue_1CALLBACK
+static jintLong put_accValue_CALLBACK;
+static HRESULT CALLBACK put_accValue(void* ppVTable, VARIANT varID, BSTR* pszValue)
+{
+	return ((HRESULT (CALLBACK *)(void*, VARIANT*, BSTR*))put_accValue_CALLBACK)(ppVTable, &varID, pszValue);
+}
+JNIEXPORT jintLong JNICALL COM_NATIVE(put_1accValue_1CALLBACK)
+	(JNIEnv *env, jclass that, jintLong func)
+{
+	put_accValue_CALLBACK = func;
+	return (jintLong)put_accValue;
+}
+#endif
+
+#ifndef NO_VtblCall_1PPPPVARIANT
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall_1PPPPVARIANT)
+	(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4, jintLong arg5, jintLong arg6)
+{
+	jint rc = 0;
+	COM_NATIVE_ENTER(env, that, VtblCall_1PPPPVARIANT_FUNC);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, jintLong, jintLong, jintLong, VARIANT))(*(jintLong **)arg1)[arg0])(arg1, arg2, arg3, arg4, arg5, *(VARIANT *)arg6);
+	COM_NATIVE_EXIT(env, that, VtblCall_1PPPPVARIANT_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_VtblCall_1IVARIANT
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall_1IVARIANT)
+	(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jint arg2, jintLong arg3)
+{
+	jint rc = 0;
+	COM_NATIVE_ENTER(env, that, VtblCall_1IVARIANT_FUNC);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jint, VARIANT))(*(jintLong **)arg1)[arg0])(arg1, arg2, *(VARIANT *)arg3);
+	COM_NATIVE_EXIT(env, that, VtblCall_1IVARIANT_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_VtblCall_1PVARIANTP
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall_1PVARIANTP)
+	(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jintLong arg2, jintLong arg3, jintLong arg4)
+{
+	jint rc = 0;
+	COM_NATIVE_ENTER(env, that, VtblCall_1PVARIANTP_FUNC);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jintLong, VARIANT, jintLong))(*(jintLong **)arg1)[arg0])(arg1, arg2, *(VARIANT *)arg3, arg4);
+	COM_NATIVE_EXIT(env, that, VtblCall_1PVARIANTP_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_VtblCall_1IVARIANTP
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall_1IVARIANTP)
+	(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jint arg2, jintLong arg3, jintLong arg4)
+{
+	jint rc = 0;
+	COM_NATIVE_ENTER(env, that, VtblCall_1IVARIANTP_FUNC);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, jint, VARIANT, jintLong))(*(jintLong **)arg1)[arg0])(arg1, arg2, *(VARIANT *)arg3, arg4);
+	COM_NATIVE_EXIT(env, that, VtblCall_1IVARIANTP_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_VtblCall_1VARIANT
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall_1VARIANT)
+	(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jintLong arg2)
+{
+	jint rc = 0;
+	COM_NATIVE_ENTER(env, that, VtblCall_1VARIANT_FUNC);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, VARIANT))(*(jintLong **)arg1)[arg0])(arg1, *(VARIANT *)arg2);
+	COM_NATIVE_EXIT(env, that, VtblCall_1VARIANT_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_VtblCall_1VARIANTI
+JNIEXPORT jint JNICALL COM_NATIVE(VtblCall_1VARIANTP)
+	(JNIEnv *env, jclass that, jint arg0, jintLong arg1, jintLong arg2, jintLong arg3)
+{
+	jint rc = 0;
+	COM_NATIVE_ENTER(env, that, VtblCall_1VARIANTP_FUNC);
+	rc = (jint)((jint (STDMETHODCALLTYPE *)(jintLong, VARIANT, jintLong))(*(jintLong **)arg1)[arg0])(arg1, *(VARIANT *)arg2, arg3);
+	COM_NATIVE_EXIT(env, that, VtblCall_1VARIANTP_FUNC);
+	return rc;
+}
+#endif
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/Lock.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/Lock.java
new file mode 100644
index 0000000..7712dd0
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/Lock.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * 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.internal;
+
+/**
+ * Instances of this represent a recursive monitor.  Note that this
+ * is an empty implementation which does not actually perform locking.
+ */
+public class Lock {
+
+/**
+ * Locks the monitor and returns the lock count. If
+ * the lock is owned by another thread, wait until
+ * the lock is released.
+ * 
+ * @return the lock count
+ */
+public int lock() {
+	return 0;
+}
+
+/**
+ * Unlocks the monitor. If the current thread is not
+ * the monitor owner, do nothing.
+ */
+public void unlock() {
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/IDispatchEx.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/IDispatchEx.java
new file mode 100644
index 0000000..76e1875
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/IDispatchEx.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 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.internal.ole.win32;
+
+public class IDispatchEx extends IDispatch {
+
+public IDispatchEx (int /*long*/ address) {
+	super (address);
+}
+
+public int GetDispID (int /*long*/ bstrName, int grfdex, int[] pid) {
+	return COM.VtblCall (7, address, bstrName, grfdex, pid);
+}
+
+public int InvokeEx (int id, int lcid, int wFlags, DISPPARAMS pdp, int /*long*/ pvarRes, EXCEPINFO pei, int /*long*/ pspCaller) {
+	return COM.VtblCall (8, address, id, lcid, wFlags, pdp, pvarRes, pei, pspCaller);
+}
+
+public int DeleteMemberByName (int /*long*/ bstrName, int grfdex) {
+	return COM.VtblCall (9, address, bstrName, grfdex);
+}
+
+public int DeleteMemberByDispID (int id) {
+	return COM.VtblCall (10, address, id);
+}
+
+public int GetMemberProperties (int id, int grfdexFetch, int[] pgrfdex) {
+	return COM.VtblCall (11, address, id, grfdexFetch, pgrfdex);
+}
+
+public int GetMemberName (int id, int /*long*/[] pbstrName) {
+	return COM.VtblCall (12, address, id, pbstrName);
+}
+
+public int GetNextDispID (int grfdex, int id, int[] pid) {
+	return COM.VtblCall (13, address, grfdex, id, pid);
+}
+
+public int GetNameSpaceParent (int /*long*/[] ppunk) {
+	return COM.VtblCall (14, address, ppunk);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/IDragSourceHelper.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/IDragSourceHelper.java
new file mode 100644
index 0000000..b739306
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/IDragSourceHelper.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 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.internal.ole.win32;
+
+import org.eclipse.swt.internal.win32.*;
+
+public class IDragSourceHelper extends IUnknown {
+public IDragSourceHelper(int /*long*/ address) {
+	super(address);
+}
+public int InitializeFromBitmap(SHDRAGIMAGE pshdi, int /*long*/ pDataObject) {
+	return COM.VtblCall(3, address, pshdi, pDataObject);
+}
+public int InitializeFromWindow(int /*long*/ hwnd, POINT ppt, int /*long*/ pDataObject) {
+	return COM.VtblCall(4, address, hwnd, ppt, pDataObject);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/IDragSourceHelper2.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/IDragSourceHelper2.java
new file mode 100644
index 0000000..5a2f611
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/IDragSourceHelper2.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 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.internal.ole.win32;
+
+public class IDragSourceHelper2 extends IDragSourceHelper {
+public IDragSourceHelper2(int /*long*/ address) {
+	super(address);
+}
+public int SetFlags(int dwFlags) {
+	return COM.VtblCall(5, address, dwFlags);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/IDropTargetHelper.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/IDropTargetHelper.java
new file mode 100644
index 0000000..4c66578
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/IDropTargetHelper.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 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.internal.ole.win32;
+
+import org.eclipse.swt.internal.win32.*;
+
+public class IDropTargetHelper extends IUnknown {
+public IDropTargetHelper(int /*long*/ address) {
+	super(address);
+}
+public int DragEnter(int /*long*/ hwndTarget, int /*long*/ pDataObject, POINT ppt, int dwEffect) {
+	return COM.VtblCall(3, address, hwndTarget, pDataObject, ppt, dwEffect);
+}
+public int DragLeave() {
+	return COM.VtblCall(4, address);
+}
+public int DragOver(POINT ppt, int dwEffect) {
+	return COM.VtblCall(5, address, ppt, dwEffect);
+}
+public int Drop(int /*long*/ pDataObject, POINT ppt, int dwEffect) {
+	return COM.VtblCall(6, address, pDataObject, ppt, dwEffect);
+}
+public int Show(boolean fShow) {
+	return COM.VtblCall(7, address, fShow);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/IPersistFile.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/IPersistFile.java
new file mode 100644
index 0000000..39bfcce
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/IPersistFile.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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.internal.ole.win32;
+
+public class IPersistFile extends IPersist
+{
+public IPersistFile(int /*long*/ address) {
+	super(address);
+}
+public int IsDirty() {
+	return COM.VtblCall(4, address);
+}
+public int Load(int /*long*/ pszFileName, int dwMode) {
+	return COM.VtblCall(5, address, pszFileName, dwMode);
+}
+public int Save(int /*long*/ pszFileName, boolean fRemember) {
+	return COM.VtblCall(6, address, pszFileName, fRemember);
+}
+public int SaveCompleted(int /*long*/ pszFileName) {
+	return COM.VtblCall(7, address, pszFileName);
+}
+public int GetCurFile(int /*long*/ [] ppszFileName){
+	return COM.VtblCall(8, address, ppszFileName);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/VARIANT.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/VARIANT.java
new file mode 100644
index 0000000..04f621a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/ole/win32/VARIANT.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.internal.ole.win32;
+
+public class VARIANT {
+	public short vt;
+	public short wReserved1;
+	public short wReserved2;
+	public short wReserved3;
+	public int lVal;
+	public static final int sizeof = COM.VARIANT_sizeof();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/BP_PAINTPARAMS.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/BP_PAINTPARAMS.java
new file mode 100644
index 0000000..4c1f118
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/BP_PAINTPARAMS.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * 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.internal.win32;
+
+public class BP_PAINTPARAMS {
+	public int cbSize;
+	public int dwFlags;
+	/** @field cast=(RECT*) */
+	public int /*long*/ prcExclude;
+	/** @field cast=(BLENDFUNCTION*) */
+	public int /*long*/ pBlendFunction;
+	public static final int sizeof = OS.BP_PAINTPARAMS_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CANDIDATEFORM.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CANDIDATEFORM.java
new file mode 100644
index 0000000..ee3c6dc
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/CANDIDATEFORM.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.internal.win32;
+
+public class CANDIDATEFORM {
+	public int dwIndex;
+	public int dwStyle;
+	public POINT ptCurrentPos = new POINT();
+	public RECT rcArea = new RECT();  
+	public static final int sizeof = OS.CANDIDATEFORM_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/DEVMODE.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/DEVMODE.java
new file mode 100644
index 0000000..4358572
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/DEVMODE.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.win32;
+
+public abstract class DEVMODE {
+	public short dmSpecVersion;
+	public short dmDriverVersion;
+	public short dmSize;
+	public short dmDriverExtra;
+	public int dmFields;
+	public short dmOrientation;
+	public short dmPaperSize;
+	public short dmPaperLength;
+	public short dmPaperWidth;
+	public short dmScale;
+	public short dmCopies;
+	public short dmDefaultSource;
+	public short dmPrintQuality;
+	public short dmColor;
+	public short dmDuplex;
+	public short dmYResolution;
+	public short dmTTOption;
+	public short dmCollate;
+	public short dmLogPixels;
+	public int dmBitsPerPel;
+	public int dmPelsWidth;
+	public int dmPelsHeight;
+	public int dmNup;
+	public int dmDisplayFrequency;
+	public int dmICMMethod;
+	public int dmICMIntent;
+	public int dmMediaType;
+	public int dmDitherType;
+	public int dmReserved1;
+	public int dmReserved2;
+	public int dmPanningWidth;
+	public int dmPanningHeight;
+	public static final int sizeof = OS.IsUnicode ? OS.DEVMODEW_sizeof () : OS.DEVMODEA_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/DEVMODEA.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/DEVMODEA.java
new file mode 100644
index 0000000..d2cbf88
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/DEVMODEA.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.win32;
+
+public class DEVMODEA extends DEVMODE {
+	public byte[] dmDeviceName = new byte[OS.CCHDEVICENAME];
+	public byte[] dmFormName = new byte[OS.CCHFORMNAME];
+	public static final int sizeof = OS.DEVMODEA_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/DEVMODEW.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/DEVMODEW.java
new file mode 100644
index 0000000..3d26ea9
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/DEVMODEW.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.win32;
+
+public class DEVMODEW extends DEVMODE {
+	public char[] dmDeviceName = new char[OS.CCHDEVICENAME];
+	public char[] dmFormName = new char[OS.CCHFORMNAME];
+	public static final int sizeof = OS.DEVMODEW_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/DOCHOSTUIINFO.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/DOCHOSTUIINFO.java
new file mode 100644
index 0000000..46722dd
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/DOCHOSTUIINFO.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.internal.win32;
+
+public class DOCHOSTUIINFO {
+	public int cbSize;
+	public int dwFlags;
+	public int dwDoubleClick;
+	/*
+	 * TODO uncomment the following two fields when 32-bit swt starts
+	 * compiling with a newer mssdk whose definition of DOCHOSTUIINFO
+	 * includes these fields.
+	 */
+//	public int /*long*/ pchHostCss;
+//	public int /*long*/ pchHostNS;
+	public static final int sizeof = OS.DOCHOSTUIINFO_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/DWM_BLURBEHIND.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/DWM_BLURBEHIND.java
new file mode 100644
index 0000000..3c4b181
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/DWM_BLURBEHIND.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * 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.internal.win32;
+
+public class DWM_BLURBEHIND {
+	public int dwFlags;
+	public boolean fEnable;
+	/** @field cast=(HRGN) */
+	public int /*long*/ hRgnBlur;
+	public boolean fTransitionOnMaximized;
+	public static final int sizeof = OS.DWM_BLURBEHIND_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/EMR.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/EMR.java
new file mode 100644
index 0000000..0483a88
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/EMR.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * 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.internal.win32;
+
+public class EMR {
+	public int iType;
+	public int nSize;  
+	public static final int sizeof = OS.EMR_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/EMREXTCREATEFONTINDIRECTW.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/EMREXTCREATEFONTINDIRECTW.java
new file mode 100644
index 0000000..d3400dc
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/EMREXTCREATEFONTINDIRECTW.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * 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.internal.win32;
+
+public class EMREXTCREATEFONTINDIRECTW {
+	public EMR emr = new EMR();
+	public int ihFont;
+	public EXTLOGFONTW elfw = new EXTLOGFONTW();
+	public static final int sizeof = OS.EMREXTCREATEFONTINDIRECTW_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/EXTLOGFONTW.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/EXTLOGFONTW.java
new file mode 100644
index 0000000..d7f14df
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/EXTLOGFONTW.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * 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.internal.win32;
+
+public class EXTLOGFONTW {
+	public LOGFONTW elfLogFont = new LOGFONTW();
+	public char[] elfFullName = new char[OS.LF_FULLFACESIZE];
+	public char[] elfStyle = new char[OS.LF_FACESIZE];
+	public int elfVersion;
+	public int elfStyleSize;
+	public int elfMatch;
+	public int elfReserved;
+	public byte[] elfVendorId = new byte[OS.ELF_VENDOR_SIZE];
+	public int elfCulture;
+	public PANOSE elfPanose = new PANOSE();
+	public static final int sizeof = OS.EXTLOGFONTW_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/HDHITTESTINFO.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/HDHITTESTINFO.java
new file mode 100644
index 0000000..87b064c
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/HDHITTESTINFO.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * 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.internal.win32;
+
+public class HDHITTESTINFO {
+//	POINT pt;
+	/** @field accessor=pt.x */
+	public int x;
+	/** @field accessor=pt.y */
+	public int y;
+	public int flags;
+	public int iItem;
+	public static int sizeof = OS.HDHITTESTINFO_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/MCHITTESTINFO.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/MCHITTESTINFO.java
new file mode 100644
index 0000000..6e9f423
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/MCHITTESTINFO.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * 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.internal.win32;
+
+public class MCHITTESTINFO {
+	public int cbSize;
+	public POINT pt = new POINT ();
+	public int uHit;
+	public SYSTEMTIME st = new SYSTEMTIME ();
+//	public RECT rc = new RECT ();
+//	public int iOffset;
+//	public int iRow;
+//	public int iCol;
+	public static final int sizeof = OS.MCHITTESTINFO_sizeof ();
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/NMLVODSTATECHANGE.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/NMLVODSTATECHANGE.java
new file mode 100644
index 0000000..e627450
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/NMLVODSTATECHANGE.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.internal.win32;
+
+public class NMLVODSTATECHANGE extends NMHDR {
+//	NMHDR hdr;
+	public int iFrom;
+	public int iTo;
+	public int uNewState;
+	public int uOldState;
+	public static final int sizeof = OS.NMLVODSTATECHANGE_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/NMTREEVIEW.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/NMTREEVIEW.java
new file mode 100644
index 0000000..36cae17
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/NMTREEVIEW.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.internal.win32;
+
+public class NMTREEVIEW {
+	public NMHDR hdr = new NMHDR ();
+	public int action;
+	public TVITEM itemOld = new TVITEM ();
+	public TVITEM itemNew = new TVITEM ();
+	public POINT ptDrag = new POINT ();
+	public static final int sizeof = OS.NMTREEVIEW_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/NMTTCUSTOMDRAW.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/NMTTCUSTOMDRAW.java
new file mode 100644
index 0000000..0a9dfde
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/NMTTCUSTOMDRAW.java
@@ -0,0 +1,16 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.internal.win32;
+
+public class NMTTCUSTOMDRAW extends NMCUSTOMDRAW {
+	public int uDrawFlags;
+	public static final int sizeof = OS.NMTTCUSTOMDRAW_sizeof ();
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/NMTVITEMCHANGE.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/NMTVITEMCHANGE.java
new file mode 100644
index 0000000..701818d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/NMTVITEMCHANGE.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * 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.internal.win32;
+
+public class NMTVITEMCHANGE extends NMHDR {
+	public int uChanged;
+	/** @field cast=(HTREEITEM) */
+	public int /*long*/ hItem;
+	public int uStateNew;
+	public int uStateOld;
+	public int /*long*/ lParam;
+	public static int sizeof = OS.NMTVITEMCHANGE_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OFNOTIFY.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OFNOTIFY.java
new file mode 100644
index 0000000..290db32
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OFNOTIFY.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * 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.internal.win32;
+
+public class OFNOTIFY extends NMHDR {
+	/** @field cast=(LPOPENFILENAME) */
+	public int /*long*/ lpOFN;
+	/** @field cast=(LPTSTR) */
+	public int /*long*/ pszFile;
+	public static int sizeof = OS.OFNOTIFY_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OSVERSIONINFOEX.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OSVERSIONINFOEX.java
new file mode 100644
index 0000000..5d5e2e1
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OSVERSIONINFOEX.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.win32;
+
+public abstract class OSVERSIONINFOEX extends OSVERSIONINFO {
+	public short wServicePackMajor;
+	public short wServicePackMinor;
+	public short wSuiteMask;
+	public byte wProductType;
+	public byte wReserved;
+	public static /*final*/ int sizeof = OS.IsUnicode ? OS.OSVERSIONINFOEXW_sizeof () : OS.OSVERSIONINFOEXA_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OSVERSIONINFOEXA.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OSVERSIONINFOEXA.java
new file mode 100644
index 0000000..ef2e667
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OSVERSIONINFOEXA.java
@@ -0,0 +1,16 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.win32;
+
+public class OSVERSIONINFOEXA extends OSVERSIONINFOEX {
+	public byte[] szCSDVersion = new byte[128];
+	public static final int sizeof = OS.OSVERSIONINFOEXA_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OSVERSIONINFOEXW.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OSVERSIONINFOEXW.java
new file mode 100644
index 0000000..43ae5d8
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OSVERSIONINFOEXW.java
@@ -0,0 +1,16 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.win32;
+
+public class OSVERSIONINFOEXW extends OSVERSIONINFOEX {
+	public char[] szCSDVersion = new char[128];
+	public static final int sizeof = OS.OSVERSIONINFOEXW_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OUTLINETEXTMETRIC.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OUTLINETEXTMETRIC.java
new file mode 100644
index 0000000..24a2578
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OUTLINETEXTMETRIC.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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.internal.win32;
+
+public class OUTLINETEXTMETRIC {
+	public int otmSize;
+    public byte otmFiller;
+    /** @field accessor=otmPanoseNumber.bFamilyType */
+	public byte otmPanoseNumber_bFamilyType;
+    /** @field accessor=otmPanoseNumber.bSerifStyle */
+	public byte otmPanoseNumber_bSerifStyle;
+    /** @field accessor=otmPanoseNumber.bWeight */
+	public byte otmPanoseNumber_bWeight;
+    /** @field accessor=otmPanoseNumber.bProportion */
+	public byte otmPanoseNumber_bProportion;
+    /** @field accessor=otmPanoseNumber.bContrast */
+	public byte otmPanoseNumber_bContrast;
+    /** @field accessor=otmPanoseNumber.bStrokeVariation */
+	public byte otmPanoseNumber_bStrokeVariation;
+    /** @field accessor=otmPanoseNumber.bArmStyle */
+	public byte otmPanoseNumber_bArmStyle;
+    /** @field accessor=otmPanoseNumber.bLetterform */
+	public byte otmPanoseNumber_bLetterform;
+    /** @field accessor=otmPanoseNumber.bMidline */
+	public byte otmPanoseNumber_bMidline;
+    /** @field accessor=otmPanoseNumber.bXHeight */
+	public byte otmPanoseNumber_bXHeight;
+    public int otmfsSelection;
+    public int otmfsType;
+    public int otmsCharSlopeRise;
+    public int otmsCharSlopeRun;
+    public int otmItalicAngle;
+    public int otmEMSquare;
+    public int otmAscent;
+    public int otmDescent;
+    public int otmLineGap;
+    public int otmsCapEmHeight;
+    public int otmsXHeight;
+	public RECT otmrcFontBox = new RECT();
+    public int otmMacAscent;
+    public int otmMacDescent;
+    public int otmMacLineGap;
+    public int otmusMinimumPPEM;
+	public POINT otmptSubscriptSize = new POINT();
+	public POINT otmptSubscriptOffset = new POINT();
+	public POINT otmptSuperscriptSize = new POINT();
+	public POINT otmptSuperscriptOffset = new POINT();
+    public int otmsStrikeoutSize;
+    public int otmsStrikeoutPosition;
+    public int otmsUnderscoreSize;
+    public int otmsUnderscorePosition;
+    /** @field cast=(PSTR) */
+	public int /*long*/ otmpFamilyName;
+    /** @field cast=(PSTR) */
+	public int /*long*/ otmpFaceName;
+    /** @field cast=(PSTR) */
+	public int /*long*/ otmpStyleName;
+    /** @field cast=(PSTR) */
+	public int /*long*/ otmpFullName;
+    public static final int sizeof = OS.IsUnicode ? OS.OUTLINETEXTMETRICW_sizeof ():  OS.OUTLINETEXTMETRICA_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OUTLINETEXTMETRICA.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OUTLINETEXTMETRICA.java
new file mode 100644
index 0000000..988f86c
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OUTLINETEXTMETRICA.java
@@ -0,0 +1,16 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.internal.win32;
+
+public class OUTLINETEXTMETRICA extends OUTLINETEXTMETRIC {
+	public TEXTMETRICA otmTextMetrics = new TEXTMETRICA ();
+	public static final int sizeof = OS.OUTLINETEXTMETRICA_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OUTLINETEXTMETRICW.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OUTLINETEXTMETRICW.java
new file mode 100644
index 0000000..5a9b7ce
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OUTLINETEXTMETRICW.java
@@ -0,0 +1,16 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.internal.win32;
+
+public class OUTLINETEXTMETRICW extends OUTLINETEXTMETRIC {
+	public TEXTMETRICW otmTextMetrics = new TEXTMETRICW ();
+	public static final int sizeof = OS.OUTLINETEXTMETRICW_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/PANOSE.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/PANOSE.java
new file mode 100644
index 0000000..7afaa39
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/PANOSE.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * 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.internal.win32;
+
+public class PANOSE {
+	public byte bFamilyType;
+	public byte bSerifStyle;
+	public byte bWeight;
+	public byte bProportion;
+	public byte bContrast;
+	public byte bStrokeVariation;
+	public byte bArmStyle;
+	public byte bLetterform;
+	public byte bMidline;
+	public byte bXHeight; 
+	public static final int sizeof = OS.PANOSE_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/PROCESS_INFORMATION.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/PROCESS_INFORMATION.java
new file mode 100644
index 0000000..0fdc8ed
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/PROCESS_INFORMATION.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * 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.internal.win32;
+
+public class PROCESS_INFORMATION {
+	/** @field cast=(HANDLE) */
+	public int /*long*/ hProcess;
+	/** @field cast=(HANDLE) */
+	public int /*long*/ hThread;
+	public int dwProcessId;
+	public int dwThreadId;
+	public static int sizeof = OS.PROCESS_INFORMATION_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SCRIPT_DIGITSUBSTITUTE.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SCRIPT_DIGITSUBSTITUTE.java
new file mode 100644
index 0000000..052341f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SCRIPT_DIGITSUBSTITUTE.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.win32;
+
+public class SCRIPT_DIGITSUBSTITUTE {
+	public short NationalDigitLanguage;
+	public short TraditionalDigitLanguage;
+	public byte DigitSubstitute;
+	public int dwReserved;
+	public static final int sizeof = OS.SCRIPT_DIGITSUBSTITUTE_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SCROLLBARINFO.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SCROLLBARINFO.java
new file mode 100644
index 0000000..ae10c8a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SCROLLBARINFO.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.internal.win32;
+
+public class SCROLLBARINFO {
+	public int cbSize;
+	public RECT rcScrollBar = new RECT ();
+	public int dxyLineButton;
+	public int xyThumbTop;
+	public int xyThumbBottom;
+	public int reserved;
+	public int [] rgstate = new int [OS.CCHILDREN_SCROLLBAR + 1];
+	public static final int sizeof = OS.SCROLLBARINFO_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHDRAGIMAGE.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHDRAGIMAGE.java
new file mode 100644
index 0000000..440139f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHDRAGIMAGE.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 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.internal.win32;
+
+public final class SHDRAGIMAGE {
+	public SIZE sizeDragImage = new SIZE ();
+	public POINT ptOffset = new POINT ();
+	/** @field cast=(HBITMAP) */
+	public int /*long*/ hbmpDragImage;
+	public int crColorKey;
+	public static final int sizeof = OS.SHDRAGIMAGE_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHFILEINFO.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHFILEINFO.java
new file mode 100644
index 0000000..ce92cf8
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHFILEINFO.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * 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.internal.win32;
+
+public class SHFILEINFO {
+	/** @field cast=(HICON) */
+	public int /*long*/ hIcon;
+	public int iIcon;
+	public int dwAttributes;
+	public static int sizeof = OS.IsUnicode ? OS.SHFILEINFOW_sizeof ():  OS.SHFILEINFOA_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHFILEINFOA.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHFILEINFOA.java
new file mode 100644
index 0000000..9b457f0
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHFILEINFOA.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.win32;
+
+public class SHFILEINFOA extends SHFILEINFO {
+	public byte [] szDisplayName = new byte [OS.MAX_PATH];
+	public byte [] szTypeName = new byte [80];
+	public static int sizeof = OS.SHFILEINFOA_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHFILEINFOW.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHFILEINFOW.java
new file mode 100644
index 0000000..9379fee
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHFILEINFOW.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.win32;
+
+public class SHFILEINFOW extends SHFILEINFO {
+	public char [] szDisplayName = new char [OS.MAX_PATH];
+	public char [] szTypeName = new char [80];
+	public static int sizeof = OS.SHFILEINFOW_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/STARTUPINFO.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/STARTUPINFO.java
new file mode 100644
index 0000000..49e387d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/STARTUPINFO.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * 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.internal.win32;
+
+public class STARTUPINFO {
+	public int cb;
+	/** @field cast=(LPTSTR) */
+	public int /*long*/ lpReserved;
+	/** @field cast=(LPTSTR) */
+	public int /*long*/ lpDesktop;
+	/** @field cast=(LPTSTR) */
+	public int /*long*/ lpTitle;
+	public int dwX;
+	public int dwY;
+	public int dwXSize;
+	public int dwYSize;
+	public int dwXCountChars;
+	public int dwYCountChars;
+	public int dwFillAttribute;
+	public int dwFlags;
+	public short wShowWindow;
+	public short cbReserved2;
+	/** @field cast=(LPBYTE) */
+	public int /*long*/ lpReserved2;
+	/** @field cast=(HANDLE) */
+	public int /*long*/ hStdInput;
+	/** @field cast=(HANDLE) */
+	public int /*long*/ hStdOutput;
+	/** @field cast=(HANDLE) */
+	public int /*long*/ hStdError;
+	public static int sizeof = OS.STARTUPINFO_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SYSTEMTIME.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SYSTEMTIME.java
new file mode 100644
index 0000000..2a27dd4
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SYSTEMTIME.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.win32;
+
+public class SYSTEMTIME {
+	public short wYear;
+	public short wMonth;
+	public short wDayOfWeek;
+	public short wDay;
+	public short wHour;
+	public short wMinute;
+	public short wSecond;
+	public short wMilliseconds;
+	public static final int sizeof = OS.SYSTEMTIME_sizeof ();
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/TCHITTESTINFO.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/TCHITTESTINFO.java
new file mode 100644
index 0000000..70d6505
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/TCHITTESTINFO.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 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.internal.win32;
+
+public class TCHITTESTINFO {
+//	POINT pt;
+	/** @field accessor=pt.x */
+	public int x;
+	/** @field accessor=pt.y */
+	public int y;
+	public int flags;
+	public static int sizeof = OS.TCHITTESTINFO_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/TF_DA_COLOR.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/TF_DA_COLOR.java
new file mode 100644
index 0000000..55ded82
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/TF_DA_COLOR.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.internal.win32;
+
+public class TF_DA_COLOR {
+	public int type;
+	public int cr;
+	public static final int sizeof = OS.TF_DA_COLOR_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/TF_DISPLAYATTRIBUTE.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/TF_DISPLAYATTRIBUTE.java
new file mode 100644
index 0000000..26bb99e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/TF_DISPLAYATTRIBUTE.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.internal.win32;
+
+public class TF_DISPLAYATTRIBUTE {
+	public TF_DA_COLOR crText = new TF_DA_COLOR();
+	public TF_DA_COLOR crBk = new TF_DA_COLOR();
+	public int lsStyle;
+	public boolean fBoldLine;
+	public TF_DA_COLOR crLine = new TF_DA_COLOR();
+	public int bAttr;
+	public static final int sizeof = OS.TF_DISPLAYATTRIBUTE_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/TVSORTCB.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/TVSORTCB.java
new file mode 100644
index 0000000..6b55788
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/TVSORTCB.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * 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.internal.win32;
+
+public class TVSORTCB {
+	/** @field cast=(HTREEITEM) */
+	public int /*long*/ hParent;
+	/** @field cast=(PFNTVCOMPARE) */
+	public int /*long*/ lpfnCompare;
+	/** @field cast=(LPARAM) */
+	public int /*long*/ lParam;
+	public static final int sizeof = OS.TVSORTCB_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/build.bat b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/build.bat
new file mode 100644
index 0000000..5f10193
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/build.bat
@@ -0,0 +1,30 @@
+@echo off
+rem *******************************************************************************
+rem  Copyright (c) 2000, 2009 IBM Corporation and others.
+rem  All rights reserved. This program and the accompanying materials
+rem  are made available under the terms of the Eclipse Public License v1.0
+rem  which accompanies this distribution, and is available at
+rem  http://www.eclipse.org/legal/epl-v10.html
+rem  
+rem  Contributors:
+rem      IBM Corporation - initial API and implementation
+rem *******************************************************************************
+
+rem @echo off
+
+rem *****
+rem Java
+rem *****
+set JAVA_HOME=S:\swt-builddir\ibm-jdk1.4.1
+
+rem ****** 
+rem MS-SDK
+rem ******
+call "S:\PRODUCTS\PLATSDK\March2007VistaRTM\Bin\setenv.cmd" /x86 /vista
+
+rem ****** 
+rem OUTPUT DIR
+rem ******
+set OUTPUT_DIR=..\..\..\org.eclipse.swt.wpf.win32.x86
+
+nmake -f make_wpf.mak %1 %2 %3 %4
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/build.xml b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/build.xml
new file mode 100644
index 0000000..e082f7d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/build.xml
Binary files differ
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/make_wpf.mak b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/make_wpf.mak
new file mode 100644
index 0000000..f4a8ace
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/make_wpf.mak
@@ -0,0 +1,59 @@
+#*******************************************************************************
+# Copyright (c) 2000, 2007 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
+#*******************************************************************************
+
+# Makefile for SWT libraries on Windows
+
+# assumes JAVA_HOME is set in the environment from which nmake is run
+
+!include <make_common.mak>
+
+SWT_PREFIX = swt
+WS_PREFIX = wpf
+SWT_VERSION = $(maj_ver)$(min_ver)
+SWT_LIB = $(SWT_PREFIX)-$(WS_PREFIX)-$(SWT_VERSION).dll
+SWT_WIN32_LIB = $(SWT_PREFIX)-win32-$(WS_PREFIX)-$(SWT_VERSION).dll
+SWT_C_OBJS = swt.obj c.obj c_stats.obj
+SWT_CPP_OBJS = os.obj os_custom.obj os_stats.obj os_structs.obj
+SWT_WIN32_OBJS = win32.obj win32_stats.obj win32_structs.obj  
+
+# Uncomment for Native Stats tool
+#NATIVE_STATS = -DNATIVE_STATS
+
+# Uncomment for try/catch exceptions
+TRYCATCH = -DTRYCATCH
+
+WPF_HOME = C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0
+DOTNET_HOME = C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
+CFLAGS = -c -W2 -D_WIN32_DCOM -O2 -DVISTA -DSWT_VERSION=$(SWT_VERSION) -DNO_getenv $(NATIVE_STATS) $(TRYCATCH) /I"$(JAVA_HOME)\include" /I"$(JAVA_HOME)\include\win32" /I.
+CPPFLAGS = -clr /FU"$(WPF_HOME)\PresentationCore.dll" /FU"$(WPF_HOME)\PresentationFramework.dll" /FU$(DOTNET_HOME)\System.Data.dll /FU$(DOTNET_HOME)\System.dll /FU$(DOTNET_HOME)\System.Xml.dll /FU"$(WPF_HOME)\UIAutomationProvider.dll" /FU"$(WPF_HOME)\UIAutomationTypes.dll" /FU"$(WPF_HOME)\WindowsBase.dll" /FU$(DOTNET_HOME)\System.Drawing.dll /FU$(DOTNET_HOME)\System.Windows.Forms.dll  /FU"$(WPF_HOME)\WindowsFormsIntegration.dll"
+LFLAGS = -DLL -NODEFAULTLIB:"LIBCMT.LIB" -CLRTHREADATTRIBUTE:STA 
+WIN32LFLAGS = -DLL ole32.lib user32.lib gdi32.lib shell32.lib
+
+all: $(SWT_LIB) $(SWT_WIN32_LIB)
+
+.c.obj:
+	cl $(CFLAGS) $*.c
+
+.cpp.obj:
+	cl $(CPPFLAGS) $(CFLAGS)  $*.cpp
+
+$(SWT_LIB): $(SWT_C_OBJS) $(SWT_CPP_OBJS)
+	link $(LFLAGS) -OUT:$(SWT_LIB) $(SWT_C_OBJS) $(SWT_CPP_OBJS)
+	mt.exe -manifest $(SWT_LIB).manifest -outputresource:$(SWT_LIB);2
+	
+$(SWT_WIN32_LIB): $(SWT_C_OBJS) $(SWT_WIN32_OBJS)
+	link $(WIN32LFLAGS) -OUT:$(SWT_WIN32_LIB) $(SWT_C_OBJS) $(SWT_WIN32_OBJS)
+
+install: all
+	copy *.dll $(OUTPUT_DIR)
+
+clean:
+    del *.obj *.res *.dll *.lib *.exp *.manifest
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os.cpp b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os.cpp
new file mode 100644
index 0000000..1e61948
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os.cpp
@@ -0,0 +1,16849 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "os_structs.h"
+#include "os_stats.h"
+
+#define OS_NATIVE(func) Java_org_eclipse_swt_internal_wpf_OS_##func
+
+#ifndef NO_AccessText_1AccessKey
+extern "C" JNIEXPORT jchar JNICALL OS_NATIVE(AccessText_1AccessKey)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jchar JNICALL OS_NATIVE(AccessText_1AccessKey)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jchar rc = 0;
+	OS_NATIVE_ENTER(env, that, AccessText_1AccessKey_FUNC);
+	rc = (jchar)((AccessText^)TO_OBJECT(arg0))->AccessKey;
+	OS_NATIVE_EXIT(env, that, AccessText_1AccessKey_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_AccessText_1Text
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(AccessText_1Text)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(AccessText_1Text)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, AccessText_1Text_FUNC);
+	((AccessText^)TO_OBJECT(arg0))->Text = ((String^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, AccessText_1Text_FUNC);
+}
+#endif
+
+#ifndef NO_AccessText_1TextWrapping
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(AccessText_1TextWrapping)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(AccessText_1TextWrapping)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, AccessText_1TextWrapping_FUNC);
+	((AccessText^)TO_OBJECT(arg0))->TextWrapping = ((TextWrapping)arg1);
+	OS_NATIVE_EXIT(env, that, AccessText_1TextWrapping_FUNC);
+}
+#endif
+
+#ifndef NO_ApplicationCommands_1Cut
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ApplicationCommands_1Cut)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(ApplicationCommands_1Cut)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ApplicationCommands_1Cut_FUNC);
+	rc = (jint)TO_HANDLE(ApplicationCommands::Cut);
+	OS_NATIVE_EXIT(env, that, ApplicationCommands_1Cut_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ApplicationCommands_1Paste
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ApplicationCommands_1Paste)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(ApplicationCommands_1Paste)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ApplicationCommands_1Paste_FUNC);
+	rc = (jint)TO_HANDLE(ApplicationCommands::Paste);
+	OS_NATIVE_EXIT(env, that, ApplicationCommands_1Paste_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ApplicationCommands_1Redo
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ApplicationCommands_1Redo)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(ApplicationCommands_1Redo)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ApplicationCommands_1Redo_FUNC);
+	rc = (jint)TO_HANDLE(ApplicationCommands::Redo);
+	OS_NATIVE_EXIT(env, that, ApplicationCommands_1Redo_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ApplicationCommands_1Undo
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ApplicationCommands_1Undo)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(ApplicationCommands_1Undo)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ApplicationCommands_1Undo_FUNC);
+	rc = (jint)TO_HANDLE(ApplicationCommands::Undo);
+	OS_NATIVE_EXIT(env, that, ApplicationCommands_1Undo_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Application_1Current
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Application_1Current)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Application_1Current)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Application_1Current_FUNC);
+	rc = (jint)TO_HANDLE(Application::Current);
+	OS_NATIVE_EXIT(env, that, Application_1Current_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Application_1Dispatcher
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Application_1Dispatcher)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Application_1Dispatcher)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Application_1Dispatcher_FUNC);
+	rc = (jint)TO_HANDLE(((Application ^)TO_OBJECT(arg0))->Dispatcher);
+	OS_NATIVE_EXIT(env, that, Application_1Dispatcher_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Application_1Resources__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Application_1Resources__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Application_1Resources__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Application_1Resources__I_FUNC);
+	rc = (jint)TO_HANDLE(((Application^)TO_OBJECT(arg0))->Resources);
+	OS_NATIVE_EXIT(env, that, Application_1Resources__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Application_1Resources__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Application_1Resources__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Application_1Resources__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Application_1Resources__II_FUNC);
+	((Application^)TO_OBJECT(arg0))->Resources = ((ResourceDictionary^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Application_1Resources__II_FUNC);
+}
+#endif
+
+#ifndef NO_Application_1Run
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Application_1Run)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(Application_1Run)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, Application_1Run_FUNC);
+	((Application^)TO_OBJECT(arg0))->Run();
+	OS_NATIVE_EXIT(env, that, Application_1Run_FUNC);
+}
+#endif
+
+#ifndef NO_Application_1Shutdown
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Application_1Shutdown)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(Application_1Shutdown)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, Application_1Shutdown_FUNC);
+	((Application^)TO_OBJECT(arg0))->Shutdown();
+	OS_NATIVE_EXIT(env, that, Application_1Shutdown_FUNC);
+}
+#endif
+
+#ifndef NO_Application_1ShutdownMode
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Application_1ShutdownMode)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Application_1ShutdownMode)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Application_1ShutdownMode_FUNC);
+	((Application^)TO_OBJECT(arg0))->ShutdownMode = ((ShutdownMode)arg1);
+	OS_NATIVE_EXIT(env, that, Application_1ShutdownMode_FUNC);
+}
+#endif
+
+#ifndef NO_Application_1Windows
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Application_1Windows)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Application_1Windows)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Application_1Windows_FUNC);
+	rc = (jint)TO_HANDLE(((Application^)TO_OBJECT(arg0))->Windows);
+	OS_NATIVE_EXIT(env, that, Application_1Windows_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ArrayList_1Clear
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ArrayList_1Clear)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(ArrayList_1Clear)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, ArrayList_1Clear_FUNC);
+	((ArrayList^)TO_OBJECT(arg0))->Clear();
+	OS_NATIVE_EXIT(env, that, ArrayList_1Clear_FUNC);
+}
+#endif
+
+#ifndef NO_ArrayList_1Count
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ArrayList_1Count)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ArrayList_1Count)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ArrayList_1Count_FUNC);
+	rc = (jint)((ArrayList^)TO_OBJECT(arg0))->Count;
+	OS_NATIVE_EXIT(env, that, ArrayList_1Count_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ArrayList_1Insert
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ArrayList_1Insert)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(ArrayList_1Insert)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, ArrayList_1Insert_FUNC);
+	((ArrayList^)TO_OBJECT(arg0))->Insert(arg1, (Object^)TO_OBJECT(arg2));
+	OS_NATIVE_EXIT(env, that, ArrayList_1Insert_FUNC);
+}
+#endif
+
+#ifndef NO_ArrayList_1RemoveAt
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ArrayList_1RemoveAt)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ArrayList_1RemoveAt)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ArrayList_1RemoveAt_FUNC);
+	((ArrayList^)TO_OBJECT(arg0))->RemoveAt(arg1);
+	OS_NATIVE_EXIT(env, that, ArrayList_1RemoveAt_FUNC);
+}
+#endif
+
+#ifndef NO_ArrayList_1ToArray
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ArrayList_1ToArray)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ArrayList_1ToArray)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ArrayList_1ToArray_FUNC);
+	rc = (jint)TO_HANDLE(((ArrayList^)TO_OBJECT(arg0))->ToArray());
+	OS_NATIVE_EXIT(env, that, ArrayList_1ToArray_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ArrayList_1default__II
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ArrayList_1default__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(ArrayList_1default__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ArrayList_1default__II_FUNC);
+	rc = (jint)TO_HANDLE(((ArrayList^)TO_OBJECT(arg0))->default[arg1]);
+	OS_NATIVE_EXIT(env, that, ArrayList_1default__II_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ArrayList_1default__III
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ArrayList_1default__III)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(ArrayList_1default__III)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, ArrayList_1default__III_FUNC);
+	((ArrayList^)TO_OBJECT(arg0))->default[arg1] = ((Object^)TO_OBJECT(arg2));
+	OS_NATIVE_EXIT(env, that, ArrayList_1default__III_FUNC);
+}
+#endif
+
+#ifndef NO_Array_1CreateInstance
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Array_1CreateInstance)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(Array_1CreateInstance)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Array_1CreateInstance_FUNC);
+	rc = (jint)TO_HANDLE(Array::CreateInstance((Type^)TO_OBJECT(arg0), arg1));
+	OS_NATIVE_EXIT(env, that, Array_1CreateInstance_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Array_1GetLength
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Array_1GetLength)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(Array_1GetLength)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Array_1GetLength_FUNC);
+	rc = (jint)((Array^)TO_OBJECT(arg0))->GetLength(arg1);
+	OS_NATIVE_EXIT(env, that, Array_1GetLength_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Array_1GetValue
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Array_1GetValue)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(Array_1GetValue)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Array_1GetValue_FUNC);
+	rc = (jint)TO_HANDLE(((Array^)TO_OBJECT(arg0))->GetValue(arg1));
+	OS_NATIVE_EXIT(env, that, Array_1GetValue_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Array_1SetValue
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Array_1SetValue)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(Array_1SetValue)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, Array_1SetValue_FUNC);
+	((Array^)TO_OBJECT(arg0))->SetValue((Object^)TO_OBJECT(arg1), arg2);
+	OS_NATIVE_EXIT(env, that, Array_1SetValue_FUNC);
+}
+#endif
+
+#ifndef NO_BevelBitmapEffect_1BevelWidth__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(BevelBitmapEffect_1BevelWidth__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(BevelBitmapEffect_1BevelWidth__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, BevelBitmapEffect_1BevelWidth__I_FUNC);
+	rc = (jdouble)((BevelBitmapEffect^)TO_OBJECT(arg0))->BevelWidth;
+	OS_NATIVE_EXIT(env, that, BevelBitmapEffect_1BevelWidth__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_BevelBitmapEffect_1BevelWidth__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(BevelBitmapEffect_1BevelWidth__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(BevelBitmapEffect_1BevelWidth__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, BevelBitmapEffect_1BevelWidth__ID_FUNC);
+	((BevelBitmapEffect^)TO_OBJECT(arg0))->BevelWidth = (arg1);
+	OS_NATIVE_EXIT(env, that, BevelBitmapEffect_1BevelWidth__ID_FUNC);
+}
+#endif
+
+#ifndef NO_BevelBitmapEffect_1LightAngle__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(BevelBitmapEffect_1LightAngle__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(BevelBitmapEffect_1LightAngle__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, BevelBitmapEffect_1LightAngle__I_FUNC);
+	rc = (jdouble)((BevelBitmapEffect^)TO_OBJECT(arg0))->LightAngle;
+	OS_NATIVE_EXIT(env, that, BevelBitmapEffect_1LightAngle__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_BevelBitmapEffect_1LightAngle__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(BevelBitmapEffect_1LightAngle__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(BevelBitmapEffect_1LightAngle__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, BevelBitmapEffect_1LightAngle__ID_FUNC);
+	((BevelBitmapEffect^)TO_OBJECT(arg0))->LightAngle = (arg1);
+	OS_NATIVE_EXIT(env, that, BevelBitmapEffect_1LightAngle__ID_FUNC);
+}
+#endif
+
+#ifndef NO_BevelBitmapEffect_1Smoothness__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(BevelBitmapEffect_1Smoothness__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(BevelBitmapEffect_1Smoothness__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, BevelBitmapEffect_1Smoothness__I_FUNC);
+	rc = (jdouble)((BevelBitmapEffect^)TO_OBJECT(arg0))->Smoothness;
+	OS_NATIVE_EXIT(env, that, BevelBitmapEffect_1Smoothness__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_BevelBitmapEffect_1Smoothness__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(BevelBitmapEffect_1Smoothness__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(BevelBitmapEffect_1Smoothness__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, BevelBitmapEffect_1Smoothness__ID_FUNC);
+	((BevelBitmapEffect^)TO_OBJECT(arg0))->Smoothness = (arg1);
+	OS_NATIVE_EXIT(env, that, BevelBitmapEffect_1Smoothness__ID_FUNC);
+}
+#endif
+
+#ifndef NO_Binding_1RelativeSource
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Binding_1RelativeSource)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Binding_1RelativeSource)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Binding_1RelativeSource_FUNC);
+	((Binding^)TO_OBJECT(arg0))->RelativeSource = ((RelativeSource^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Binding_1RelativeSource_FUNC);
+}
+#endif
+
+#ifndef NO_BitmapDecoder_1Create
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(BitmapDecoder_1Create)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT jint JNICALL OS_NATIVE(BitmapDecoder_1Create)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, BitmapDecoder_1Create_FUNC);
+	rc = (jint)TO_HANDLE(BitmapDecoder::Create((System::IO::Stream^)TO_OBJECT(arg0), (BitmapCreateOptions)arg1, (BitmapCacheOption)arg2));
+	OS_NATIVE_EXIT(env, that, BitmapDecoder_1Create_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_BitmapDecoder_1Frames
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(BitmapDecoder_1Frames)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(BitmapDecoder_1Frames)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, BitmapDecoder_1Frames_FUNC);
+	rc = (jint)TO_HANDLE(((BitmapDecoder^)TO_OBJECT(arg0))->Frames);
+	OS_NATIVE_EXIT(env, that, BitmapDecoder_1Frames_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_BitmapEffectGroup_1Children
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(BitmapEffectGroup_1Children)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(BitmapEffectGroup_1Children)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, BitmapEffectGroup_1Children_FUNC);
+	rc = (jint)TO_HANDLE(((BitmapEffectGroup^)TO_OBJECT(arg0))->Children);
+	OS_NATIVE_EXIT(env, that, BitmapEffectGroup_1Children_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_BitmapEncoder_1Frames
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(BitmapEncoder_1Frames)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(BitmapEncoder_1Frames)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, BitmapEncoder_1Frames_FUNC);
+	rc = (jint)TO_HANDLE(((BitmapEncoder^)TO_OBJECT(arg0))->Frames);
+	OS_NATIVE_EXIT(env, that, BitmapEncoder_1Frames_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_BitmapEncoder_1Save
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(BitmapEncoder_1Save)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(BitmapEncoder_1Save)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, BitmapEncoder_1Save_FUNC);
+	((BitmapEncoder^)TO_OBJECT(arg0))->Save((System::IO::Stream^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, BitmapEncoder_1Save_FUNC);
+}
+#endif
+
+#ifndef NO_BitmapFrameCollection_1Add
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(BitmapFrameCollection_1Add)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(BitmapFrameCollection_1Add)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, BitmapFrameCollection_1Add_FUNC);
+	((System::Collections::Generic::IList<BitmapFrame^>^)TO_OBJECT(arg0))->Add((BitmapFrame^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, BitmapFrameCollection_1Add_FUNC);
+}
+#endif
+
+#ifndef NO_BitmapFrameCollection_1default
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(BitmapFrameCollection_1default)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(BitmapFrameCollection_1default)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, BitmapFrameCollection_1default_FUNC);
+	rc = (jint)TO_HANDLE(((System::Collections::Generic::IList<BitmapFrame^>^)TO_OBJECT(arg0))->default[arg1]);
+	OS_NATIVE_EXIT(env, that, BitmapFrameCollection_1default_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_BitmapFrame_1Create
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(BitmapFrame_1Create)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(BitmapFrame_1Create)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, BitmapFrame_1Create_FUNC);
+	rc = (jint)TO_HANDLE(BitmapFrame::Create((BitmapSource^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, BitmapFrame_1Create_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_BitmapImage_1BeginInit
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(BitmapImage_1BeginInit)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(BitmapImage_1BeginInit)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, BitmapImage_1BeginInit_FUNC);
+	((BitmapImage^)TO_OBJECT(arg0))->BeginInit();
+	OS_NATIVE_EXIT(env, that, BitmapImage_1BeginInit_FUNC);
+}
+#endif
+
+#ifndef NO_BitmapImage_1CreateOptions
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(BitmapImage_1CreateOptions)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(BitmapImage_1CreateOptions)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, BitmapImage_1CreateOptions_FUNC);
+	((BitmapImage^)TO_OBJECT(arg0))->CreateOptions = ((BitmapCreateOptions)arg1);
+	OS_NATIVE_EXIT(env, that, BitmapImage_1CreateOptions_FUNC);
+}
+#endif
+
+#ifndef NO_BitmapImage_1EndInit
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(BitmapImage_1EndInit)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(BitmapImage_1EndInit)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, BitmapImage_1EndInit_FUNC);
+	((BitmapImage^)TO_OBJECT(arg0))->EndInit();
+	OS_NATIVE_EXIT(env, that, BitmapImage_1EndInit_FUNC);
+}
+#endif
+
+#ifndef NO_BitmapImage_1UriSource
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(BitmapImage_1UriSource)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(BitmapImage_1UriSource)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, BitmapImage_1UriSource_FUNC);
+	((BitmapImage^)TO_OBJECT(arg0))->UriSource = ((Uri^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, BitmapImage_1UriSource_FUNC);
+}
+#endif
+
+#ifndef NO_BitmapPalette_1Colors
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(BitmapPalette_1Colors)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(BitmapPalette_1Colors)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, BitmapPalette_1Colors_FUNC);
+	rc = (jint)TO_HANDLE(((BitmapPalette^)TO_OBJECT(arg0))->Colors);
+	OS_NATIVE_EXIT(env, that, BitmapPalette_1Colors_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_BitmapSource_1Clone
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(BitmapSource_1Clone)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(BitmapSource_1Clone)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, BitmapSource_1Clone_FUNC);
+	rc = (jint)TO_HANDLE(((BitmapSource^)TO_OBJECT(arg0))->Clone());
+	OS_NATIVE_EXIT(env, that, BitmapSource_1Clone_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_BitmapSource_1CopyPixels
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(BitmapSource_1CopyPixels)(JNIEnv *env, jclass that, jint arg0, jint arg1, jbyteArray arg2, jint arg3, jint arg4);
+JNIEXPORT void JNICALL OS_NATIVE(BitmapSource_1CopyPixels)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jbyteArray arg2, jint arg3, jint arg4)
+{
+	jbyte *lparg2=NULL;
+	OS_NATIVE_ENTER(env, that, BitmapSource_1CopyPixels_FUNC);
+	if (arg2) if ((lparg2 = env->GetByteArrayElements(arg2, NULL)) == NULL) goto fail;
+	((BitmapSource^)TO_OBJECT(arg0))->CopyPixels((Int32Rect)TO_OBJECT(arg1), (IntPtr)lparg2, arg3, arg4);
+fail:
+	if (arg2 && lparg2) env->ReleaseByteArrayElements(arg2, lparg2, 0);
+	OS_NATIVE_EXIT(env, that, BitmapSource_1CopyPixels_FUNC);
+}
+#endif
+
+#ifndef NO_BitmapSource_1Create
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(BitmapSource_1Create)(JNIEnv *env, jclass that, jint arg0, jint arg1, jdouble arg2, jdouble arg3, jint arg4, jint arg5, jbyteArray arg6, jint arg7, jint arg8);
+JNIEXPORT jint JNICALL OS_NATIVE(BitmapSource_1Create)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jdouble arg2, jdouble arg3, jint arg4, jint arg5, jbyteArray arg6, jint arg7, jint arg8)
+{
+	jbyte *lparg6=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, BitmapSource_1Create_FUNC);
+	if (arg6) if ((lparg6 = env->GetByteArrayElements(arg6, NULL)) == NULL) goto fail;
+	rc = (jint)TO_HANDLE(BitmapSource::Create(arg0, arg1, arg2, arg3, (PixelFormat)TO_OBJECT(arg4), (BitmapPalette^)TO_OBJECT(arg5), (IntPtr)lparg6, arg7, arg8));
+fail:
+	if (arg6 && lparg6) env->ReleaseByteArrayElements(arg6, lparg6, 0);
+	OS_NATIVE_EXIT(env, that, BitmapSource_1Create_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_BitmapSource_1Format
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(BitmapSource_1Format)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(BitmapSource_1Format)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, BitmapSource_1Format_FUNC);
+	rc = (jint)TO_HANDLE(((BitmapSource^)TO_OBJECT(arg0))->Format);
+	OS_NATIVE_EXIT(env, that, BitmapSource_1Format_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_BitmapSource_1Palette
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(BitmapSource_1Palette)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(BitmapSource_1Palette)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, BitmapSource_1Palette_FUNC);
+	rc = (jint)TO_HANDLE(((BitmapSource^)TO_OBJECT(arg0))->Palette);
+	OS_NATIVE_EXIT(env, that, BitmapSource_1Palette_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_BitmapSource_1PixelHeight
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(BitmapSource_1PixelHeight)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(BitmapSource_1PixelHeight)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, BitmapSource_1PixelHeight_FUNC);
+	rc = (jint)((BitmapSource^)TO_OBJECT(arg0))->PixelHeight;
+	OS_NATIVE_EXIT(env, that, BitmapSource_1PixelHeight_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_BitmapSource_1PixelWidth
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(BitmapSource_1PixelWidth)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(BitmapSource_1PixelWidth)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, BitmapSource_1PixelWidth_FUNC);
+	rc = (jint)((BitmapSource^)TO_OBJECT(arg0))->PixelWidth;
+	OS_NATIVE_EXIT(env, that, BitmapSource_1PixelWidth_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_BlurBitmapEffect_1Radius__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(BlurBitmapEffect_1Radius__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(BlurBitmapEffect_1Radius__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, BlurBitmapEffect_1Radius__I_FUNC);
+	rc = (jdouble)((BlurBitmapEffect^)TO_OBJECT(arg0))->Radius;
+	OS_NATIVE_EXIT(env, that, BlurBitmapEffect_1Radius__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_BlurBitmapEffect_1Radius__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(BlurBitmapEffect_1Radius__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(BlurBitmapEffect_1Radius__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, BlurBitmapEffect_1Radius__ID_FUNC);
+	((BlurBitmapEffect^)TO_OBJECT(arg0))->Radius = (arg1);
+	OS_NATIVE_EXIT(env, that, BlurBitmapEffect_1Radius__ID_FUNC);
+}
+#endif
+
+#ifndef NO_Border_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Border_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Border_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Border_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(Border::typeid);
+	OS_NATIVE_EXIT(env, that, Border_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Brush_1Opacity
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Brush_1Opacity)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Brush_1Opacity)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Brush_1Opacity_FUNC);
+	((Brush^)TO_OBJECT(arg0))->Opacity = (arg1);
+	OS_NATIVE_EXIT(env, that, Brush_1Opacity_FUNC);
+}
+#endif
+
+#ifndef NO_Brushes_1Black
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Brushes_1Black)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Brushes_1Black)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Brushes_1Black_FUNC);
+	rc = (jint)TO_HANDLE(Brushes::Black);
+	OS_NATIVE_EXIT(env, that, Brushes_1Black_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Brushes_1LightSkyBlue
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Brushes_1LightSkyBlue)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Brushes_1LightSkyBlue)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Brushes_1LightSkyBlue_FUNC);
+	rc = (jint)TO_HANDLE(Brushes::LightSkyBlue);
+	OS_NATIVE_EXIT(env, that, Brushes_1LightSkyBlue_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Brushes_1Navy
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Brushes_1Navy)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Brushes_1Navy)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Brushes_1Navy_FUNC);
+	rc = (jint)TO_HANDLE(Brushes::Navy);
+	OS_NATIVE_EXIT(env, that, Brushes_1Navy_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Brushes_1Red
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Brushes_1Red)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Brushes_1Red)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Brushes_1Red_FUNC);
+	rc = (jint)TO_HANDLE(Brushes::Red);
+	OS_NATIVE_EXIT(env, that, Brushes_1Red_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Brushes_1Transparent
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Brushes_1Transparent)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Brushes_1Transparent)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Brushes_1Transparent_FUNC);
+	rc = (jint)TO_HANDLE(Brushes::Transparent);
+	OS_NATIVE_EXIT(env, that, Brushes_1Transparent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Brushes_1White
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Brushes_1White)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Brushes_1White)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Brushes_1White_FUNC);
+	rc = (jint)TO_HANDLE(Brushes::White);
+	OS_NATIVE_EXIT(env, that, Brushes_1White_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ButtonBase_1Click
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ButtonBase_1Click)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ButtonBase_1Click)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ButtonBase_1Click_FUNC);
+	((ButtonBase^)TO_OBJECT(arg0))->Click += ((RoutedEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, ButtonBase_1Click_FUNC);
+}
+#endif
+
+#ifndef NO_ButtonBase_1ClickEvent
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ButtonBase_1ClickEvent)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(ButtonBase_1ClickEvent)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ButtonBase_1ClickEvent_FUNC);
+	rc = (jint)TO_HANDLE(ButtonBase::ClickEvent);
+	OS_NATIVE_EXIT(env, that, ButtonBase_1ClickEvent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Button_1IsDefault__I
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(Button_1IsDefault__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(Button_1IsDefault__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, Button_1IsDefault__I_FUNC);
+	rc = (jboolean)((Button^)TO_OBJECT(arg0))->IsDefault;
+	OS_NATIVE_EXIT(env, that, Button_1IsDefault__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Button_1IsDefault__IZ
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Button_1IsDefault__IZ)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Button_1IsDefault__IZ)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, Button_1IsDefault__IZ_FUNC);
+	((Button^)TO_OBJECT(arg0))->IsDefault = (arg1);
+	OS_NATIVE_EXIT(env, that, Button_1IsDefault__IZ_FUNC);
+}
+#endif
+
+#ifndef NO_Byte_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Byte_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Byte_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Byte_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(Byte::typeid);
+	OS_NATIVE_EXIT(env, that, Byte_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CancelEventArgs_1Cancel
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(CancelEventArgs_1Cancel)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(CancelEventArgs_1Cancel)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, CancelEventArgs_1Cancel_FUNC);
+	((CancelEventArgs^)TO_OBJECT(arg0))->Cancel = (arg1);
+	OS_NATIVE_EXIT(env, that, CancelEventArgs_1Cancel_FUNC);
+}
+#endif
+
+#ifndef NO_Canvas_1GetLeft
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Canvas_1GetLeft)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Canvas_1GetLeft)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Canvas_1GetLeft_FUNC);
+	rc = (jdouble)Canvas::GetLeft((UIElement^)TO_OBJECT(arg0));
+	OS_NATIVE_EXIT(env, that, Canvas_1GetLeft_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Canvas_1GetTop
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Canvas_1GetTop)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Canvas_1GetTop)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Canvas_1GetTop_FUNC);
+	rc = (jdouble)Canvas::GetTop((UIElement^)TO_OBJECT(arg0));
+	OS_NATIVE_EXIT(env, that, Canvas_1GetTop_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Canvas_1LeftProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Canvas_1LeftProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Canvas_1LeftProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Canvas_1LeftProperty_FUNC);
+	rc = (jint)TO_HANDLE(Canvas::LeftProperty);
+	OS_NATIVE_EXIT(env, that, Canvas_1LeftProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Canvas_1SetLeft
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Canvas_1SetLeft)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Canvas_1SetLeft)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Canvas_1SetLeft_FUNC);
+	Canvas::SetLeft((UIElement^)TO_OBJECT(arg0), arg1);
+	OS_NATIVE_EXIT(env, that, Canvas_1SetLeft_FUNC);
+}
+#endif
+
+#ifndef NO_Canvas_1SetTop
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Canvas_1SetTop)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Canvas_1SetTop)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Canvas_1SetTop_FUNC);
+	Canvas::SetTop((UIElement^)TO_OBJECT(arg0), arg1);
+	OS_NATIVE_EXIT(env, that, Canvas_1SetTop_FUNC);
+}
+#endif
+
+#ifndef NO_Canvas_1TopProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Canvas_1TopProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Canvas_1TopProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Canvas_1TopProperty_FUNC);
+	rc = (jint)TO_HANDLE(Canvas::TopProperty);
+	OS_NATIVE_EXIT(env, that, Canvas_1TopProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Canvas_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Canvas_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Canvas_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Canvas_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(Canvas::typeid);
+	OS_NATIVE_EXIT(env, that, Canvas_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CharacterHit_1FirstCharacterIndex
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(CharacterHit_1FirstCharacterIndex)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(CharacterHit_1FirstCharacterIndex)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CharacterHit_1FirstCharacterIndex_FUNC);
+	rc = (jint)((CharacterHit^)TO_OBJECT(arg0))->FirstCharacterIndex;
+	OS_NATIVE_EXIT(env, that, CharacterHit_1FirstCharacterIndex_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CharacterHit_1TrailingLength
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(CharacterHit_1TrailingLength)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(CharacterHit_1TrailingLength)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CharacterHit_1TrailingLength_FUNC);
+	rc = (jint)((CharacterHit^)TO_OBJECT(arg0))->TrailingLength;
+	OS_NATIVE_EXIT(env, that, CharacterHit_1TrailingLength_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CheckBox_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(CheckBox_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(CheckBox_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CheckBox_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(CheckBox::typeid);
+	OS_NATIVE_EXIT(env, that, CheckBox_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Clipboard_1Clear
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Clipboard_1Clear)(JNIEnv *env, jclass that);
+JNIEXPORT void JNICALL OS_NATIVE(Clipboard_1Clear)
+	(JNIEnv *env, jclass that)
+{
+	OS_NATIVE_ENTER(env, that, Clipboard_1Clear_FUNC);
+	Clipboard::Clear();
+	OS_NATIVE_EXIT(env, that, Clipboard_1Clear_FUNC);
+}
+#endif
+
+#ifndef NO_Clipboard_1ContainsData
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(Clipboard_1ContainsData)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(Clipboard_1ContainsData)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, Clipboard_1ContainsData_FUNC);
+	rc = (jboolean)Clipboard::ContainsData((String^)TO_OBJECT(arg0));
+	OS_NATIVE_EXIT(env, that, Clipboard_1ContainsData_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Clipboard_1GetData
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Clipboard_1GetData)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Clipboard_1GetData)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Clipboard_1GetData_FUNC);
+	rc = (jint)TO_HANDLE(Clipboard::GetData((String^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, Clipboard_1GetData_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Clipboard_1GetDataObject
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Clipboard_1GetDataObject)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Clipboard_1GetDataObject)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Clipboard_1GetDataObject_FUNC);
+	rc = (jint)TO_HANDLE(Clipboard::GetDataObject());
+	OS_NATIVE_EXIT(env, that, Clipboard_1GetDataObject_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Clipboard_1GetText
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Clipboard_1GetText)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Clipboard_1GetText)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Clipboard_1GetText_FUNC);
+	rc = (jint)TO_HANDLE(Clipboard::GetText());
+	OS_NATIVE_EXIT(env, that, Clipboard_1GetText_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Clipboard_1SetData
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Clipboard_1SetData)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Clipboard_1SetData)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Clipboard_1SetData_FUNC);
+	Clipboard::SetData((String^)TO_OBJECT(arg0), (Object^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Clipboard_1SetData_FUNC);
+}
+#endif
+
+#ifndef NO_Clipboard_1SetDataObject
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Clipboard_1SetDataObject)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Clipboard_1SetDataObject)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, Clipboard_1SetDataObject_FUNC);
+	Clipboard::SetDataObject((Object^)TO_OBJECT(arg0), arg1);
+	OS_NATIVE_EXIT(env, that, Clipboard_1SetDataObject_FUNC);
+}
+#endif
+
+#ifndef NO_ColorDialog_1AnyColor
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ColorDialog_1AnyColor)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ColorDialog_1AnyColor)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, ColorDialog_1AnyColor_FUNC);
+	((System::Windows::Forms::ColorDialog^)TO_OBJECT(arg0))->AnyColor = (arg1);
+	OS_NATIVE_EXIT(env, that, ColorDialog_1AnyColor_FUNC);
+}
+#endif
+
+#ifndef NO_ColorDialog_1Color__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ColorDialog_1Color__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ColorDialog_1Color__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ColorDialog_1Color__I_FUNC);
+	rc = (jint)TO_HANDLE(((System::Windows::Forms::ColorDialog^)TO_OBJECT(arg0))->Color);
+	OS_NATIVE_EXIT(env, that, ColorDialog_1Color__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ColorDialog_1Color__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ColorDialog_1Color__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ColorDialog_1Color__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ColorDialog_1Color__II_FUNC);
+	((System::Windows::Forms::ColorDialog^)TO_OBJECT(arg0))->Color = ((System::Drawing::Color)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, ColorDialog_1Color__II_FUNC);
+}
+#endif
+
+#ifndef NO_ColorDialog_1CustomColors__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ColorDialog_1CustomColors__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ColorDialog_1CustomColors__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ColorDialog_1CustomColors__I_FUNC);
+	rc = (jint)TO_HANDLE(((System::Windows::Forms::ColorDialog^)TO_OBJECT(arg0))->CustomColors);
+	OS_NATIVE_EXIT(env, that, ColorDialog_1CustomColors__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ColorDialog_1CustomColors__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ColorDialog_1CustomColors__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ColorDialog_1CustomColors__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ColorDialog_1CustomColors__II_FUNC);
+	((System::Windows::Forms::ColorDialog^)TO_OBJECT(arg0))->CustomColors = ((array<int>^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, ColorDialog_1CustomColors__II_FUNC);
+}
+#endif
+
+#ifndef NO_ColorList_1Add
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ColorList_1Add)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ColorList_1Add)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ColorList_1Add_FUNC);
+	((System::Collections::Generic::List<Color>^)TO_OBJECT(arg0))->Add((Color)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, ColorList_1Add_FUNC);
+}
+#endif
+
+#ifndef NO_ColorList_1Count
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ColorList_1Count)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ColorList_1Count)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ColorList_1Count_FUNC);
+	rc = (jint)((System::Collections::Generic::IList<Color>^)TO_OBJECT(arg0))->Count;
+	OS_NATIVE_EXIT(env, that, ColorList_1Count_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ColorList_1Current
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ColorList_1Current)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ColorList_1Current)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ColorList_1Current_FUNC);
+	rc = (jint)TO_HANDLE(((System::Collections::Generic::IEnumerator<Color>^)TO_OBJECT(arg0))->Current);
+	OS_NATIVE_EXIT(env, that, ColorList_1Current_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ColorList_1GetEnumerator
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ColorList_1GetEnumerator)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ColorList_1GetEnumerator)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ColorList_1GetEnumerator_FUNC);
+	rc = (jint)TO_HANDLE(((System::Collections::Generic::IEnumerable<Color>^)TO_OBJECT(arg0))->GetEnumerator());
+	OS_NATIVE_EXIT(env, that, ColorList_1GetEnumerator_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Color_1A
+extern "C" JNIEXPORT jbyte JNICALL OS_NATIVE(Color_1A)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jbyte JNICALL OS_NATIVE(Color_1A)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jbyte rc = 0;
+	OS_NATIVE_ENTER(env, that, Color_1A_FUNC);
+	rc = (jbyte)((Color^)TO_OBJECT(arg0))->A;
+	OS_NATIVE_EXIT(env, that, Color_1A_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Color_1B
+extern "C" JNIEXPORT jbyte JNICALL OS_NATIVE(Color_1B)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jbyte JNICALL OS_NATIVE(Color_1B)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jbyte rc = 0;
+	OS_NATIVE_ENTER(env, that, Color_1B_FUNC);
+	rc = (jbyte)((Color^)TO_OBJECT(arg0))->B;
+	OS_NATIVE_EXIT(env, that, Color_1B_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Color_1FromArgb
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Color_1FromArgb)(JNIEnv *env, jclass that, jbyte arg0, jbyte arg1, jbyte arg2, jbyte arg3);
+JNIEXPORT jint JNICALL OS_NATIVE(Color_1FromArgb)
+	(JNIEnv *env, jclass that, jbyte arg0, jbyte arg1, jbyte arg2, jbyte arg3)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Color_1FromArgb_FUNC);
+	rc = (jint)TO_HANDLE(Color::FromArgb(arg0, arg1, arg2, arg3));
+	OS_NATIVE_EXIT(env, that, Color_1FromArgb_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Color_1G
+extern "C" JNIEXPORT jbyte JNICALL OS_NATIVE(Color_1G)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jbyte JNICALL OS_NATIVE(Color_1G)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jbyte rc = 0;
+	OS_NATIVE_ENTER(env, that, Color_1G_FUNC);
+	rc = (jbyte)((Color^)TO_OBJECT(arg0))->G;
+	OS_NATIVE_EXIT(env, that, Color_1G_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Color_1R
+extern "C" JNIEXPORT jbyte JNICALL OS_NATIVE(Color_1R)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jbyte JNICALL OS_NATIVE(Color_1R)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jbyte rc = 0;
+	OS_NATIVE_ENTER(env, that, Color_1R_FUNC);
+	rc = (jbyte)((Color^)TO_OBJECT(arg0))->R;
+	OS_NATIVE_EXIT(env, that, Color_1R_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Colors_1Black
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Black)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Black)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Colors_1Black_FUNC);
+	rc = (jint)TO_HANDLE(Colors::Black);
+	OS_NATIVE_EXIT(env, that, Colors_1Black_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Colors_1Blue
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Blue)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Blue)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Colors_1Blue_FUNC);
+	rc = (jint)TO_HANDLE(Colors::Blue);
+	OS_NATIVE_EXIT(env, that, Colors_1Blue_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Colors_1Cyan
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Cyan)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Cyan)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Colors_1Cyan_FUNC);
+	rc = (jint)TO_HANDLE(Colors::Cyan);
+	OS_NATIVE_EXIT(env, that, Colors_1Cyan_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Colors_1DarkGray
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Colors_1DarkGray)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Colors_1DarkGray)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Colors_1DarkGray_FUNC);
+	rc = (jint)TO_HANDLE(Colors::DarkGray);
+	OS_NATIVE_EXIT(env, that, Colors_1DarkGray_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Colors_1Green
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Green)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Green)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Colors_1Green_FUNC);
+	rc = (jint)TO_HANDLE(Colors::Green);
+	OS_NATIVE_EXIT(env, that, Colors_1Green_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Colors_1LightSkyBlue
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Colors_1LightSkyBlue)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Colors_1LightSkyBlue)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Colors_1LightSkyBlue_FUNC);
+	rc = (jint)TO_HANDLE(Colors::LightSkyBlue);
+	OS_NATIVE_EXIT(env, that, Colors_1LightSkyBlue_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Colors_1Lime
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Lime)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Lime)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Colors_1Lime_FUNC);
+	rc = (jint)TO_HANDLE(Colors::Lime);
+	OS_NATIVE_EXIT(env, that, Colors_1Lime_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Colors_1Magenta
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Magenta)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Magenta)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Colors_1Magenta_FUNC);
+	rc = (jint)TO_HANDLE(Colors::Magenta);
+	OS_NATIVE_EXIT(env, that, Colors_1Magenta_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Colors_1Maroon
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Maroon)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Maroon)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Colors_1Maroon_FUNC);
+	rc = (jint)TO_HANDLE(Colors::Maroon);
+	OS_NATIVE_EXIT(env, that, Colors_1Maroon_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Colors_1Navy
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Navy)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Navy)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Colors_1Navy_FUNC);
+	rc = (jint)TO_HANDLE(Colors::Navy);
+	OS_NATIVE_EXIT(env, that, Colors_1Navy_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Colors_1Olive
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Olive)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Olive)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Colors_1Olive_FUNC);
+	rc = (jint)TO_HANDLE(Colors::Olive);
+	OS_NATIVE_EXIT(env, that, Colors_1Olive_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Colors_1Purple
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Purple)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Purple)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Colors_1Purple_FUNC);
+	rc = (jint)TO_HANDLE(Colors::Purple);
+	OS_NATIVE_EXIT(env, that, Colors_1Purple_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Colors_1Red
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Red)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Red)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Colors_1Red_FUNC);
+	rc = (jint)TO_HANDLE(Colors::Red);
+	OS_NATIVE_EXIT(env, that, Colors_1Red_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Colors_1Silver
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Silver)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Silver)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Colors_1Silver_FUNC);
+	rc = (jint)TO_HANDLE(Colors::Silver);
+	OS_NATIVE_EXIT(env, that, Colors_1Silver_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Colors_1Teal
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Teal)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Teal)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Colors_1Teal_FUNC);
+	rc = (jint)TO_HANDLE(Colors::Teal);
+	OS_NATIVE_EXIT(env, that, Colors_1Teal_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Colors_1Transparent
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Transparent)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Transparent)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Colors_1Transparent_FUNC);
+	rc = (jint)TO_HANDLE(Colors::Transparent);
+	OS_NATIVE_EXIT(env, that, Colors_1Transparent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Colors_1White
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Colors_1White)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Colors_1White)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Colors_1White_FUNC);
+	rc = (jint)TO_HANDLE(Colors::White);
+	OS_NATIVE_EXIT(env, that, Colors_1White_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Colors_1Yellow
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Yellow)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Colors_1Yellow)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Colors_1Yellow_FUNC);
+	rc = (jint)TO_HANDLE(Colors::Yellow);
+	OS_NATIVE_EXIT(env, that, Colors_1Yellow_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ColumnDefinitionCollection_1Add
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ColumnDefinitionCollection_1Add)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ColumnDefinitionCollection_1Add)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ColumnDefinitionCollection_1Add_FUNC);
+	((ColumnDefinitionCollection^)TO_OBJECT(arg0))->Add((ColumnDefinition^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, ColumnDefinitionCollection_1Add_FUNC);
+}
+#endif
+
+#ifndef NO_ColumnDefinition_1Width
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ColumnDefinition_1Width)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ColumnDefinition_1Width)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ColumnDefinition_1Width_FUNC);
+	((ColumnDefinition^)TO_OBJECT(arg0))->Width = ((GridLength)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, ColumnDefinition_1Width_FUNC);
+}
+#endif
+
+#ifndef NO_ComboBox_1IsDropDownOpen__I
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(ComboBox_1IsDropDownOpen__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(ComboBox_1IsDropDownOpen__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, ComboBox_1IsDropDownOpen__I_FUNC);
+	rc = (jboolean)((ComboBox^)TO_OBJECT(arg0))->IsDropDownOpen;
+	OS_NATIVE_EXIT(env, that, ComboBox_1IsDropDownOpen__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ComboBox_1IsDropDownOpen__IZ
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ComboBox_1IsDropDownOpen__IZ)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ComboBox_1IsDropDownOpen__IZ)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, ComboBox_1IsDropDownOpen__IZ_FUNC);
+	((ComboBox^)TO_OBJECT(arg0))->IsDropDownOpen = (arg1);
+	OS_NATIVE_EXIT(env, that, ComboBox_1IsDropDownOpen__IZ_FUNC);
+}
+#endif
+
+#ifndef NO_ComboBox_1IsEditable
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ComboBox_1IsEditable)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ComboBox_1IsEditable)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, ComboBox_1IsEditable_FUNC);
+	((ComboBox^)TO_OBJECT(arg0))->IsEditable = (arg1);
+	OS_NATIVE_EXIT(env, that, ComboBox_1IsEditable_FUNC);
+}
+#endif
+
+#ifndef NO_ComboBox_1SelectionBoxItem
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ComboBox_1SelectionBoxItem)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ComboBox_1SelectionBoxItem)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ComboBox_1SelectionBoxItem_FUNC);
+	rc = (jint)TO_HANDLE(((ComboBox^)TO_OBJECT(arg0))->SelectionBoxItem);
+	OS_NATIVE_EXIT(env, that, ComboBox_1SelectionBoxItem_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CommandManager_1AddPreviewExecutedHandler
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(CommandManager_1AddPreviewExecutedHandler)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(CommandManager_1AddPreviewExecutedHandler)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, CommandManager_1AddPreviewExecutedHandler_FUNC);
+	CommandManager::AddPreviewExecutedHandler((UIElement^)TO_OBJECT(arg0), (ExecutedRoutedEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, CommandManager_1AddPreviewExecutedHandler_FUNC);
+}
+#endif
+
+#ifndef NO_CommonDialog_1ShowDialog
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(CommonDialog_1ShowDialog)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jboolean JNICALL OS_NATIVE(CommonDialog_1ShowDialog)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, CommonDialog_1ShowDialog_FUNC);
+	rc = (jboolean)((CommonDialog^)TO_OBJECT(arg0))->ShowDialog((Window^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, CommonDialog_1ShowDialog_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CompositeCollection_1IndexOf
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(CompositeCollection_1IndexOf)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(CompositeCollection_1IndexOf)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CompositeCollection_1IndexOf_FUNC);
+	rc = (jint)((CompositeCollection^)TO_OBJECT(arg0))->IndexOf((Object^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, CompositeCollection_1IndexOf_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CompositeCollection_1Insert
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(CompositeCollection_1Insert)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(CompositeCollection_1Insert)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, CompositeCollection_1Insert_FUNC);
+	((CompositeCollection^)TO_OBJECT(arg0))->Insert(arg1, (Object^)TO_OBJECT(arg2));
+	OS_NATIVE_EXIT(env, that, CompositeCollection_1Insert_FUNC);
+}
+#endif
+
+#ifndef NO_CompositeCollection_1Remove
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(CompositeCollection_1Remove)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(CompositeCollection_1Remove)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, CompositeCollection_1Remove_FUNC);
+	((CompositeCollection^)TO_OBJECT(arg0))->Remove((Object^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, CompositeCollection_1Remove_FUNC);
+}
+#endif
+
+#ifndef NO_CompositeCollection_1RemoveAt
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(CompositeCollection_1RemoveAt)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(CompositeCollection_1RemoveAt)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, CompositeCollection_1RemoveAt_FUNC);
+	((CompositeCollection^)TO_OBJECT(arg0))->RemoveAt(arg1);
+	OS_NATIVE_EXIT(env, that, CompositeCollection_1RemoveAt_FUNC);
+}
+#endif
+
+#ifndef NO_Console_1Beep
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Console_1Beep)(JNIEnv *env, jclass that);
+JNIEXPORT void JNICALL OS_NATIVE(Console_1Beep)
+	(JNIEnv *env, jclass that)
+{
+	OS_NATIVE_ENTER(env, that, Console_1Beep_FUNC);
+	Console::Beep();
+	OS_NATIVE_EXIT(env, that, Console_1Beep_FUNC);
+}
+#endif
+
+#ifndef NO_ContainerVisual_1Clip__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ContainerVisual_1Clip__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ContainerVisual_1Clip__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ContainerVisual_1Clip__I_FUNC);
+	rc = (jint)TO_HANDLE(((ContainerVisual^)TO_OBJECT(arg0))->Clip);
+	OS_NATIVE_EXIT(env, that, ContainerVisual_1Clip__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ContainerVisual_1Clip__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ContainerVisual_1Clip__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ContainerVisual_1Clip__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ContainerVisual_1Clip__II_FUNC);
+	((ContainerVisual^)TO_OBJECT(arg0))->Clip = ((Geometry^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, ContainerVisual_1Clip__II_FUNC);
+}
+#endif
+
+#ifndef NO_ContentControl_1Content__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ContentControl_1Content__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ContentControl_1Content__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ContentControl_1Content__I_FUNC);
+	rc = (jint)TO_HANDLE(((ContentControl^)TO_OBJECT(arg0))->Content);
+	OS_NATIVE_EXIT(env, that, ContentControl_1Content__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ContentControl_1Content__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ContentControl_1Content__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ContentControl_1Content__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ContentControl_1Content__II_FUNC);
+	((ContentControl^)TO_OBJECT(arg0))->Content = ((Object^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, ContentControl_1Content__II_FUNC);
+}
+#endif
+
+#ifndef NO_ContentPresenter_1Content
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ContentPresenter_1Content)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ContentPresenter_1Content)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ContentPresenter_1Content_FUNC);
+	rc = (jint)TO_HANDLE(((ContentPresenter^)TO_OBJECT(arg0))->Content);
+	OS_NATIVE_EXIT(env, that, ContentPresenter_1Content_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ContentPresenter_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ContentPresenter_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(ContentPresenter_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ContentPresenter_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(ContentPresenter::typeid);
+	OS_NATIVE_EXIT(env, that, ContentPresenter_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ContextMenuEventArgs_1CursorLeft
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(ContextMenuEventArgs_1CursorLeft)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(ContextMenuEventArgs_1CursorLeft)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, ContextMenuEventArgs_1CursorLeft_FUNC);
+	rc = (jdouble)((ContextMenuEventArgs^)TO_OBJECT(arg0))->CursorLeft;
+	OS_NATIVE_EXIT(env, that, ContextMenuEventArgs_1CursorLeft_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ContextMenuEventArgs_1CursorTop
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(ContextMenuEventArgs_1CursorTop)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(ContextMenuEventArgs_1CursorTop)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, ContextMenuEventArgs_1CursorTop_FUNC);
+	rc = (jdouble)((ContextMenuEventArgs^)TO_OBJECT(arg0))->CursorTop;
+	OS_NATIVE_EXIT(env, that, ContextMenuEventArgs_1CursorTop_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ContextMenu_1Closed
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ContextMenu_1Closed)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ContextMenu_1Closed)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ContextMenu_1Closed_FUNC);
+	((ContextMenu^)TO_OBJECT(arg0))->Closed += ((RoutedEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, ContextMenu_1Closed_FUNC);
+}
+#endif
+
+#ifndef NO_ContextMenu_1HorizontalOffset
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ContextMenu_1HorizontalOffset)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ContextMenu_1HorizontalOffset)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ContextMenu_1HorizontalOffset_FUNC);
+	((ContextMenu^)TO_OBJECT(arg0))->HorizontalOffset = (arg1);
+	OS_NATIVE_EXIT(env, that, ContextMenu_1HorizontalOffset_FUNC);
+}
+#endif
+
+#ifndef NO_ContextMenu_1IsOpen
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ContextMenu_1IsOpen)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ContextMenu_1IsOpen)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, ContextMenu_1IsOpen_FUNC);
+	((ContextMenu^)TO_OBJECT(arg0))->IsOpen = (arg1);
+	OS_NATIVE_EXIT(env, that, ContextMenu_1IsOpen_FUNC);
+}
+#endif
+
+#ifndef NO_ContextMenu_1Opened
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ContextMenu_1Opened)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ContextMenu_1Opened)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ContextMenu_1Opened_FUNC);
+	((ContextMenu^)TO_OBJECT(arg0))->Opened += ((RoutedEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, ContextMenu_1Opened_FUNC);
+}
+#endif
+
+#ifndef NO_ContextMenu_1Placement
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ContextMenu_1Placement)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ContextMenu_1Placement)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ContextMenu_1Placement_FUNC);
+	((ContextMenu^)TO_OBJECT(arg0))->Placement = ((PlacementMode)arg1);
+	OS_NATIVE_EXIT(env, that, ContextMenu_1Placement_FUNC);
+}
+#endif
+
+#ifndef NO_ContextMenu_1VerticalOffset
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ContextMenu_1VerticalOffset)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ContextMenu_1VerticalOffset)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ContextMenu_1VerticalOffset_FUNC);
+	((ContextMenu^)TO_OBJECT(arg0))->VerticalOffset = (arg1);
+	OS_NATIVE_EXIT(env, that, ContextMenu_1VerticalOffset_FUNC);
+}
+#endif
+
+#ifndef NO_Control_1Background
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Control_1Background)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Control_1Background)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Control_1Background_FUNC);
+	((Control^)TO_OBJECT(arg0))->Background = ((Brush^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Control_1Background_FUNC);
+}
+#endif
+
+#ifndef NO_Control_1BackgroundProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Control_1BackgroundProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Control_1BackgroundProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Control_1BackgroundProperty_FUNC);
+	rc = (jint)TO_HANDLE(Control::BackgroundProperty);
+	OS_NATIVE_EXIT(env, that, Control_1BackgroundProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Control_1BorderBrushProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Control_1BorderBrushProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Control_1BorderBrushProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Control_1BorderBrushProperty_FUNC);
+	rc = (jint)TO_HANDLE(Control::BorderBrushProperty);
+	OS_NATIVE_EXIT(env, that, Control_1BorderBrushProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Control_1BorderThickness
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Control_1BorderThickness)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Control_1BorderThickness)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Control_1BorderThickness_FUNC);
+	((Control^)TO_OBJECT(arg0))->BorderThickness = ((Thickness)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Control_1BorderThickness_FUNC);
+}
+#endif
+
+#ifndef NO_Control_1BorderThicknessProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Control_1BorderThicknessProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Control_1BorderThicknessProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Control_1BorderThicknessProperty_FUNC);
+	rc = (jint)TO_HANDLE(Control::BorderThicknessProperty);
+	OS_NATIVE_EXIT(env, that, Control_1BorderThicknessProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Control_1FontFamily__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Control_1FontFamily__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Control_1FontFamily__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Control_1FontFamily__I_FUNC);
+	rc = (jint)TO_HANDLE(((Control^)TO_OBJECT(arg0))->FontFamily);
+	OS_NATIVE_EXIT(env, that, Control_1FontFamily__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Control_1FontFamily__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Control_1FontFamily__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Control_1FontFamily__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Control_1FontFamily__II_FUNC);
+	((Control^)TO_OBJECT(arg0))->FontFamily = ((FontFamily^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Control_1FontFamily__II_FUNC);
+}
+#endif
+
+#ifndef NO_Control_1FontFamilyProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Control_1FontFamilyProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Control_1FontFamilyProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Control_1FontFamilyProperty_FUNC);
+	rc = (jint)TO_HANDLE(Control::FontFamilyProperty);
+	OS_NATIVE_EXIT(env, that, Control_1FontFamilyProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Control_1FontSize__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Control_1FontSize__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Control_1FontSize__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Control_1FontSize__I_FUNC);
+	rc = (jdouble)((Control^)TO_OBJECT(arg0))->FontSize;
+	OS_NATIVE_EXIT(env, that, Control_1FontSize__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Control_1FontSize__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Control_1FontSize__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Control_1FontSize__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Control_1FontSize__ID_FUNC);
+	((Control^)TO_OBJECT(arg0))->FontSize = (arg1);
+	OS_NATIVE_EXIT(env, that, Control_1FontSize__ID_FUNC);
+}
+#endif
+
+#ifndef NO_Control_1FontSizeProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Control_1FontSizeProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Control_1FontSizeProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Control_1FontSizeProperty_FUNC);
+	rc = (jint)TO_HANDLE(Control::FontSizeProperty);
+	OS_NATIVE_EXIT(env, that, Control_1FontSizeProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Control_1FontStretch
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Control_1FontStretch)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Control_1FontStretch)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Control_1FontStretch_FUNC);
+	((Control^)TO_OBJECT(arg0))->FontStretch = ((FontStretch)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Control_1FontStretch_FUNC);
+}
+#endif
+
+#ifndef NO_Control_1FontStretchProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Control_1FontStretchProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Control_1FontStretchProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Control_1FontStretchProperty_FUNC);
+	rc = (jint)TO_HANDLE(Control::FontStretchProperty);
+	OS_NATIVE_EXIT(env, that, Control_1FontStretchProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Control_1FontStyle
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Control_1FontStyle)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Control_1FontStyle)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Control_1FontStyle_FUNC);
+	((Control^)TO_OBJECT(arg0))->FontStyle = ((FontStyle)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Control_1FontStyle_FUNC);
+}
+#endif
+
+#ifndef NO_Control_1FontStyleProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Control_1FontStyleProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Control_1FontStyleProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Control_1FontStyleProperty_FUNC);
+	rc = (jint)TO_HANDLE(Control::FontStyleProperty);
+	OS_NATIVE_EXIT(env, that, Control_1FontStyleProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Control_1FontWeight
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Control_1FontWeight)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Control_1FontWeight)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Control_1FontWeight_FUNC);
+	((Control^)TO_OBJECT(arg0))->FontWeight = ((FontWeight)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Control_1FontWeight_FUNC);
+}
+#endif
+
+#ifndef NO_Control_1FontWeightProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Control_1FontWeightProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Control_1FontWeightProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Control_1FontWeightProperty_FUNC);
+	rc = (jint)TO_HANDLE(Control::FontWeightProperty);
+	OS_NATIVE_EXIT(env, that, Control_1FontWeightProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Control_1Foreground
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Control_1Foreground)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Control_1Foreground)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Control_1Foreground_FUNC);
+	((Control^)TO_OBJECT(arg0))->Foreground = ((Brush^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Control_1Foreground_FUNC);
+}
+#endif
+
+#ifndef NO_Control_1ForegroundProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Control_1ForegroundProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Control_1ForegroundProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Control_1ForegroundProperty_FUNC);
+	rc = (jint)TO_HANDLE(Control::ForegroundProperty);
+	OS_NATIVE_EXIT(env, that, Control_1ForegroundProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Control_1HorizontalContentAlignment__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Control_1HorizontalContentAlignment__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Control_1HorizontalContentAlignment__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Control_1HorizontalContentAlignment__I_FUNC);
+	rc = (jint)((Control ^)TO_OBJECT(arg0))->HorizontalContentAlignment;
+	OS_NATIVE_EXIT(env, that, Control_1HorizontalContentAlignment__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Control_1HorizontalContentAlignment__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Control_1HorizontalContentAlignment__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Control_1HorizontalContentAlignment__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Control_1HorizontalContentAlignment__II_FUNC);
+	((Control ^)TO_OBJECT(arg0))->HorizontalContentAlignment = ((HorizontalAlignment)arg1);
+	OS_NATIVE_EXIT(env, that, Control_1HorizontalContentAlignment__II_FUNC);
+}
+#endif
+
+#ifndef NO_Control_1MouseDoubleClick
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Control_1MouseDoubleClick)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Control_1MouseDoubleClick)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Control_1MouseDoubleClick_FUNC);
+	((Control^)TO_OBJECT(arg0))->MouseDoubleClick += ((MouseButtonEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Control_1MouseDoubleClick_FUNC);
+}
+#endif
+
+#ifndef NO_Control_1MouseDoubleClickEvent
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Control_1MouseDoubleClickEvent)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Control_1MouseDoubleClickEvent)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Control_1MouseDoubleClickEvent_FUNC);
+	rc = (jint)TO_HANDLE(Control::MouseDoubleClickEvent);
+	OS_NATIVE_EXIT(env, that, Control_1MouseDoubleClickEvent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Control_1Padding__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Control_1Padding__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Control_1Padding__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Control_1Padding__I_FUNC);
+	rc = (jint)TO_HANDLE(((Control^)TO_OBJECT(arg0))->Padding);
+	OS_NATIVE_EXIT(env, that, Control_1Padding__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Control_1Padding__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Control_1Padding__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Control_1Padding__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Control_1Padding__II_FUNC);
+	((Control^)TO_OBJECT(arg0))->Padding = ((Thickness)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Control_1Padding__II_FUNC);
+}
+#endif
+
+#ifndef NO_Control_1PreviewMouseDoubleClick
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Control_1PreviewMouseDoubleClick)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Control_1PreviewMouseDoubleClick)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Control_1PreviewMouseDoubleClick_FUNC);
+	((Control^)TO_OBJECT(arg0))->PreviewMouseDoubleClick += ((MouseButtonEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Control_1PreviewMouseDoubleClick_FUNC);
+}
+#endif
+
+#ifndef NO_Control_1Template__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Control_1Template__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Control_1Template__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Control_1Template__I_FUNC);
+	rc = (jint)TO_HANDLE(((Control^)TO_OBJECT(arg0))->Template);
+	OS_NATIVE_EXIT(env, that, Control_1Template__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Control_1Template__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Control_1Template__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Control_1Template__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Control_1Template__II_FUNC);
+	((Control^)TO_OBJECT(arg0))->Template = ((ControlTemplate^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Control_1Template__II_FUNC);
+}
+#endif
+
+#ifndef NO_Control_1TemplateProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Control_1TemplateProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Control_1TemplateProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Control_1TemplateProperty_FUNC);
+	rc = (jint)TO_HANDLE(Control::TemplateProperty);
+	OS_NATIVE_EXIT(env, that, Control_1TemplateProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Control_1VerticalContentAlignment
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Control_1VerticalContentAlignment)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Control_1VerticalContentAlignment)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Control_1VerticalContentAlignment_FUNC);
+	((Control^)TO_OBJECT(arg0))->VerticalContentAlignment = ((VerticalAlignment)arg1);
+	OS_NATIVE_EXIT(env, that, Control_1VerticalContentAlignment_FUNC);
+}
+#endif
+
+#ifndef NO_CultureInfo_1CurrentUICulture
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(CultureInfo_1CurrentUICulture)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(CultureInfo_1CurrentUICulture)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CultureInfo_1CurrentUICulture_FUNC);
+	rc = (jint)TO_HANDLE(CultureInfo::CurrentUICulture);
+	OS_NATIVE_EXIT(env, that, CultureInfo_1CurrentUICulture_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CursorInteropHelper_1Create
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(CursorInteropHelper_1Create)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(CursorInteropHelper_1Create)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, CursorInteropHelper_1Create_FUNC);
+	rc = (jint)TO_HANDLE(System::Windows::Interop::CursorInteropHelper::Create((SafeHandle^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, CursorInteropHelper_1Create_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Cursors_1AppStarting
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1AppStarting)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1AppStarting)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Cursors_1AppStarting_FUNC);
+	rc = (jint)TO_HANDLE(Cursors::AppStarting);
+	OS_NATIVE_EXIT(env, that, Cursors_1AppStarting_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Cursors_1Arrow
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1Arrow)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1Arrow)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Cursors_1Arrow_FUNC);
+	rc = (jint)TO_HANDLE(Cursors::Arrow);
+	OS_NATIVE_EXIT(env, that, Cursors_1Arrow_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Cursors_1Cross
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1Cross)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1Cross)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Cursors_1Cross_FUNC);
+	rc = (jint)TO_HANDLE(Cursors::Cross);
+	OS_NATIVE_EXIT(env, that, Cursors_1Cross_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Cursors_1Hand
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1Hand)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1Hand)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Cursors_1Hand_FUNC);
+	rc = (jint)TO_HANDLE(Cursors::Hand);
+	OS_NATIVE_EXIT(env, that, Cursors_1Hand_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Cursors_1Help
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1Help)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1Help)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Cursors_1Help_FUNC);
+	rc = (jint)TO_HANDLE(Cursors::Help);
+	OS_NATIVE_EXIT(env, that, Cursors_1Help_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Cursors_1IBeam
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1IBeam)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1IBeam)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Cursors_1IBeam_FUNC);
+	rc = (jint)TO_HANDLE(Cursors::IBeam);
+	OS_NATIVE_EXIT(env, that, Cursors_1IBeam_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Cursors_1No
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1No)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1No)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Cursors_1No_FUNC);
+	rc = (jint)TO_HANDLE(Cursors::No);
+	OS_NATIVE_EXIT(env, that, Cursors_1No_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Cursors_1ScrollE
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1ScrollE)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1ScrollE)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Cursors_1ScrollE_FUNC);
+	rc = (jint)TO_HANDLE(Cursors::ScrollE);
+	OS_NATIVE_EXIT(env, that, Cursors_1ScrollE_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Cursors_1ScrollN
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1ScrollN)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1ScrollN)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Cursors_1ScrollN_FUNC);
+	rc = (jint)TO_HANDLE(Cursors::ScrollN);
+	OS_NATIVE_EXIT(env, that, Cursors_1ScrollN_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Cursors_1ScrollNE
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1ScrollNE)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1ScrollNE)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Cursors_1ScrollNE_FUNC);
+	rc = (jint)TO_HANDLE(Cursors::ScrollNE);
+	OS_NATIVE_EXIT(env, that, Cursors_1ScrollNE_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Cursors_1ScrollNW
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1ScrollNW)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1ScrollNW)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Cursors_1ScrollNW_FUNC);
+	rc = (jint)TO_HANDLE(Cursors::ScrollNW);
+	OS_NATIVE_EXIT(env, that, Cursors_1ScrollNW_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Cursors_1ScrollS
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1ScrollS)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1ScrollS)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Cursors_1ScrollS_FUNC);
+	rc = (jint)TO_HANDLE(Cursors::ScrollS);
+	OS_NATIVE_EXIT(env, that, Cursors_1ScrollS_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Cursors_1ScrollSE
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1ScrollSE)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1ScrollSE)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Cursors_1ScrollSE_FUNC);
+	rc = (jint)TO_HANDLE(Cursors::ScrollSE);
+	OS_NATIVE_EXIT(env, that, Cursors_1ScrollSE_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Cursors_1ScrollSW
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1ScrollSW)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1ScrollSW)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Cursors_1ScrollSW_FUNC);
+	rc = (jint)TO_HANDLE(Cursors::ScrollSW);
+	OS_NATIVE_EXIT(env, that, Cursors_1ScrollSW_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Cursors_1ScrollW
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1ScrollW)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1ScrollW)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Cursors_1ScrollW_FUNC);
+	rc = (jint)TO_HANDLE(Cursors::ScrollW);
+	OS_NATIVE_EXIT(env, that, Cursors_1ScrollW_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Cursors_1SizeAll
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1SizeAll)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1SizeAll)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Cursors_1SizeAll_FUNC);
+	rc = (jint)TO_HANDLE(Cursors::SizeAll);
+	OS_NATIVE_EXIT(env, that, Cursors_1SizeAll_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Cursors_1SizeNESW
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1SizeNESW)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1SizeNESW)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Cursors_1SizeNESW_FUNC);
+	rc = (jint)TO_HANDLE(Cursors::SizeNESW);
+	OS_NATIVE_EXIT(env, that, Cursors_1SizeNESW_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Cursors_1SizeNS
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1SizeNS)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1SizeNS)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Cursors_1SizeNS_FUNC);
+	rc = (jint)TO_HANDLE(Cursors::SizeNS);
+	OS_NATIVE_EXIT(env, that, Cursors_1SizeNS_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Cursors_1SizeNWSE
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1SizeNWSE)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1SizeNWSE)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Cursors_1SizeNWSE_FUNC);
+	rc = (jint)TO_HANDLE(Cursors::SizeNWSE);
+	OS_NATIVE_EXIT(env, that, Cursors_1SizeNWSE_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Cursors_1SizeWE
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1SizeWE)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1SizeWE)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Cursors_1SizeWE_FUNC);
+	rc = (jint)TO_HANDLE(Cursors::SizeWE);
+	OS_NATIVE_EXIT(env, that, Cursors_1SizeWE_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Cursors_1UpArrow
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1UpArrow)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1UpArrow)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Cursors_1UpArrow_FUNC);
+	rc = (jint)TO_HANDLE(Cursors::UpArrow);
+	OS_NATIVE_EXIT(env, that, Cursors_1UpArrow_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Cursors_1Wait
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1Wait)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Cursors_1Wait)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Cursors_1Wait_FUNC);
+	rc = (jint)TO_HANDLE(Cursors::Wait);
+	OS_NATIVE_EXIT(env, that, Cursors_1Wait_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DashStyles_1Dash
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DashStyles_1Dash)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(DashStyles_1Dash)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DashStyles_1Dash_FUNC);
+	rc = (jint)TO_HANDLE(DashStyles::Dash);
+	OS_NATIVE_EXIT(env, that, DashStyles_1Dash_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DashStyles_1DashDot
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DashStyles_1DashDot)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(DashStyles_1DashDot)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DashStyles_1DashDot_FUNC);
+	rc = (jint)TO_HANDLE(DashStyles::DashDot);
+	OS_NATIVE_EXIT(env, that, DashStyles_1DashDot_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DashStyles_1DashDotDot
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DashStyles_1DashDotDot)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(DashStyles_1DashDotDot)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DashStyles_1DashDotDot_FUNC);
+	rc = (jint)TO_HANDLE(DashStyles::DashDotDot);
+	OS_NATIVE_EXIT(env, that, DashStyles_1DashDotDot_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DashStyles_1Dot
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DashStyles_1Dot)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(DashStyles_1Dot)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DashStyles_1Dot_FUNC);
+	rc = (jint)TO_HANDLE(DashStyles::Dot);
+	OS_NATIVE_EXIT(env, that, DashStyles_1Dot_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DashStyles_1Solid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DashStyles_1Solid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(DashStyles_1Solid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DashStyles_1Solid_FUNC);
+	rc = (jint)TO_HANDLE(DashStyles::Solid);
+	OS_NATIVE_EXIT(env, that, DashStyles_1Solid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DataFormats_1Bitmap
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DataFormats_1Bitmap)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(DataFormats_1Bitmap)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DataFormats_1Bitmap_FUNC);
+	rc = (jint)TO_HANDLE(DataFormats::Bitmap);
+	OS_NATIVE_EXIT(env, that, DataFormats_1Bitmap_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DataFormats_1FileDrop
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DataFormats_1FileDrop)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(DataFormats_1FileDrop)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DataFormats_1FileDrop_FUNC);
+	rc = (jint)TO_HANDLE(DataFormats::FileDrop);
+	OS_NATIVE_EXIT(env, that, DataFormats_1FileDrop_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DataFormats_1Html
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DataFormats_1Html)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(DataFormats_1Html)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DataFormats_1Html_FUNC);
+	rc = (jint)TO_HANDLE(DataFormats::Html);
+	OS_NATIVE_EXIT(env, that, DataFormats_1Html_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DataFormats_1Rtf
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DataFormats_1Rtf)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(DataFormats_1Rtf)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DataFormats_1Rtf_FUNC);
+	rc = (jint)TO_HANDLE(DataFormats::Rtf);
+	OS_NATIVE_EXIT(env, that, DataFormats_1Rtf_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DataFormats_1UnicodeText
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DataFormats_1UnicodeText)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(DataFormats_1UnicodeText)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DataFormats_1UnicodeText_FUNC);
+	rc = (jint)TO_HANDLE(DataFormats::UnicodeText);
+	OS_NATIVE_EXIT(env, that, DataFormats_1UnicodeText_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DataObject_1GetData
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DataObject_1GetData)(JNIEnv *env, jclass that, jint arg0, jint arg1, jboolean arg2);
+JNIEXPORT jint JNICALL OS_NATIVE(DataObject_1GetData)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jboolean arg2)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DataObject_1GetData_FUNC);
+	rc = (jint)TO_HANDLE(((DataObject^)TO_OBJECT(arg0))->GetData((String^)TO_OBJECT(arg1), arg2));
+	OS_NATIVE_EXIT(env, that, DataObject_1GetData_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DataObject_1GetDataPresent
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(DataObject_1GetDataPresent)(JNIEnv *env, jclass that, jint arg0, jint arg1, jboolean arg2);
+JNIEXPORT jboolean JNICALL OS_NATIVE(DataObject_1GetDataPresent)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jboolean arg2)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, DataObject_1GetDataPresent_FUNC);
+	rc = (jboolean)((DataObject^)TO_OBJECT(arg0))->GetDataPresent((String^)TO_OBJECT(arg1), arg2);
+	OS_NATIVE_EXIT(env, that, DataObject_1GetDataPresent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DataObject_1GetFormats
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DataObject_1GetFormats)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(DataObject_1GetFormats)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DataObject_1GetFormats_FUNC);
+	rc = (jint)TO_HANDLE(((DataObject^)TO_OBJECT(arg0))->GetFormats(arg1));
+	OS_NATIVE_EXIT(env, that, DataObject_1GetFormats_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DataObject_1SetData
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DataObject_1SetData)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jboolean arg3);
+JNIEXPORT void JNICALL OS_NATIVE(DataObject_1SetData)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jboolean arg3)
+{
+	OS_NATIVE_ENTER(env, that, DataObject_1SetData_FUNC);
+	((DataObject^)TO_OBJECT(arg0))->SetData((String^)TO_OBJECT(arg1), (Object^)TO_OBJECT(arg2), arg3);
+	OS_NATIVE_EXIT(env, that, DataObject_1SetData_FUNC);
+}
+#endif
+
+#ifndef NO_DeleteGlobalRef
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DeleteGlobalRef)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(DeleteGlobalRef)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, DeleteGlobalRef_FUNC);
+	env->DeleteGlobalRef((jobject)arg0);
+	OS_NATIVE_EXIT(env, that, DeleteGlobalRef_FUNC);
+}
+#endif
+
+#ifndef NO_DependencyObject_1ClearValue
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DependencyObject_1ClearValue)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DependencyObject_1ClearValue)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, DependencyObject_1ClearValue_FUNC);
+	((DependencyObject^)TO_OBJECT(arg0))->ClearValue((DependencyProperty^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, DependencyObject_1ClearValue_FUNC);
+}
+#endif
+
+#ifndef NO_DependencyObject_1GetValue
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DependencyObject_1GetValue)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(DependencyObject_1GetValue)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DependencyObject_1GetValue_FUNC);
+	rc = (jint)TO_HANDLE(((DependencyObject^)TO_OBJECT(arg0))->GetValue((DependencyProperty^)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, DependencyObject_1GetValue_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DependencyObject_1GetValueDouble
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(DependencyObject_1GetValueDouble)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jdouble JNICALL OS_NATIVE(DependencyObject_1GetValueDouble)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, DependencyObject_1GetValueDouble_FUNC);
+	rc = (jdouble)((DependencyObject^)TO_OBJECT(arg0))->GetValue((DependencyProperty^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, DependencyObject_1GetValueDouble_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DependencyObject_1GetValueInt
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DependencyObject_1GetValueInt)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(DependencyObject_1GetValueInt)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DependencyObject_1GetValueInt_FUNC);
+	rc = (jint)((DependencyObject^)TO_OBJECT(arg0))->GetValue((DependencyProperty^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, DependencyObject_1GetValueInt_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DependencyObject_1SetValue
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DependencyObject_1SetValue)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(DependencyObject_1SetValue)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, DependencyObject_1SetValue_FUNC);
+	((DependencyObject^)TO_OBJECT(arg0))->SetValue((DependencyProperty^)TO_OBJECT(arg1), (Object^)TO_OBJECT(arg2));
+	OS_NATIVE_EXIT(env, that, DependencyObject_1SetValue_FUNC);
+}
+#endif
+
+#ifndef NO_DependencyPropertyChangedEventArgs_1NewValueDouble
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(DependencyPropertyChangedEventArgs_1NewValueDouble)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(DependencyPropertyChangedEventArgs_1NewValueDouble)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, DependencyPropertyChangedEventArgs_1NewValueDouble_FUNC);
+	rc = (jdouble)((DependencyPropertyChangedEventArgs^)TO_OBJECT(arg0))->NewValue;
+	OS_NATIVE_EXIT(env, that, DependencyPropertyChangedEventArgs_1NewValueDouble_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DependencyPropertyChangedEventArgs_1NewValueInt
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DependencyPropertyChangedEventArgs_1NewValueInt)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(DependencyPropertyChangedEventArgs_1NewValueInt)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DependencyPropertyChangedEventArgs_1NewValueInt_FUNC);
+	rc = (jint)((DependencyPropertyChangedEventArgs^)TO_OBJECT(arg0))->NewValue;
+	OS_NATIVE_EXIT(env, that, DependencyPropertyChangedEventArgs_1NewValueInt_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DependencyPropertyChangedEventArgs_1OldValueDouble
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(DependencyPropertyChangedEventArgs_1OldValueDouble)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(DependencyPropertyChangedEventArgs_1OldValueDouble)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, DependencyPropertyChangedEventArgs_1OldValueDouble_FUNC);
+	rc = (jdouble)((DependencyPropertyChangedEventArgs^)TO_OBJECT(arg0))->OldValue;
+	OS_NATIVE_EXIT(env, that, DependencyPropertyChangedEventArgs_1OldValueDouble_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DependencyPropertyChangedEventArgs_1OldValueInt
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DependencyPropertyChangedEventArgs_1OldValueInt)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(DependencyPropertyChangedEventArgs_1OldValueInt)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DependencyPropertyChangedEventArgs_1OldValueInt_FUNC);
+	rc = (jint)((DependencyPropertyChangedEventArgs^)TO_OBJECT(arg0))->OldValue;
+	OS_NATIVE_EXIT(env, that, DependencyPropertyChangedEventArgs_1OldValueInt_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DependencyPropertyDescriptor_1AddValueChanged
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DependencyPropertyDescriptor_1AddValueChanged)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(DependencyPropertyDescriptor_1AddValueChanged)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, DependencyPropertyDescriptor_1AddValueChanged_FUNC);
+	((DependencyPropertyDescriptor^)TO_OBJECT(arg0))->AddValueChanged((Object^)TO_OBJECT(arg1), (EventHandler^)TO_OBJECT(arg2));
+	OS_NATIVE_EXIT(env, that, DependencyPropertyDescriptor_1AddValueChanged_FUNC);
+}
+#endif
+
+#ifndef NO_DependencyPropertyDescriptor_1DependencyProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DependencyPropertyDescriptor_1DependencyProperty)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(DependencyPropertyDescriptor_1DependencyProperty)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DependencyPropertyDescriptor_1DependencyProperty_FUNC);
+	rc = (jint)TO_HANDLE(((DependencyPropertyDescriptor^)TO_OBJECT(arg0))->DependencyProperty);
+	OS_NATIVE_EXIT(env, that, DependencyPropertyDescriptor_1DependencyProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DependencyPropertyDescriptor_1FromProperty__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DependencyPropertyDescriptor_1FromProperty__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(DependencyPropertyDescriptor_1FromProperty__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DependencyPropertyDescriptor_1FromProperty__I_FUNC);
+	rc = (jint)TO_HANDLE(DependencyPropertyDescriptor::FromProperty((PropertyDescriptor^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, DependencyPropertyDescriptor_1FromProperty__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DependencyPropertyDescriptor_1FromProperty__II
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DependencyPropertyDescriptor_1FromProperty__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(DependencyPropertyDescriptor_1FromProperty__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DependencyPropertyDescriptor_1FromProperty__II_FUNC);
+	rc = (jint)TO_HANDLE(DependencyPropertyDescriptor::FromProperty((DependencyProperty^)TO_OBJECT(arg0), (Type^)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, DependencyPropertyDescriptor_1FromProperty__II_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DependencyPropertyDescriptor_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DependencyPropertyDescriptor_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(DependencyPropertyDescriptor_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DependencyPropertyDescriptor_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(DependencyPropertyDescriptor::typeid);
+	OS_NATIVE_EXIT(env, that, DependencyPropertyDescriptor_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DependencyProperty_1UnsetValue
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DependencyProperty_1UnsetValue)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(DependencyProperty_1UnsetValue)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DependencyProperty_1UnsetValue_FUNC);
+	rc = (jint)TO_HANDLE(DependencyProperty::UnsetValue);
+	OS_NATIVE_EXIT(env, that, DependencyProperty_1UnsetValue_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DispatcherFrame_1Continue__I
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(DispatcherFrame_1Continue__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(DispatcherFrame_1Continue__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, DispatcherFrame_1Continue__I_FUNC);
+	rc = (jboolean)((DispatcherFrame^)TO_OBJECT(arg0))->Continue;
+	OS_NATIVE_EXIT(env, that, DispatcherFrame_1Continue__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DispatcherFrame_1Continue__IZ
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DispatcherFrame_1Continue__IZ)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DispatcherFrame_1Continue__IZ)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, DispatcherFrame_1Continue__IZ_FUNC);
+	((DispatcherFrame^)TO_OBJECT(arg0))->Continue = (arg1);
+	OS_NATIVE_EXIT(env, that, DispatcherFrame_1Continue__IZ_FUNC);
+}
+#endif
+
+#ifndef NO_DispatcherHookEventArgs_1Operation
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DispatcherHookEventArgs_1Operation)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(DispatcherHookEventArgs_1Operation)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DispatcherHookEventArgs_1Operation_FUNC);
+	rc = (jint)TO_HANDLE(((DispatcherHookEventArgs ^)TO_OBJECT(arg0))->Operation);
+	OS_NATIVE_EXIT(env, that, DispatcherHookEventArgs_1Operation_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DispatcherHooks_1DispatcherInactive
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DispatcherHooks_1DispatcherInactive)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DispatcherHooks_1DispatcherInactive)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, DispatcherHooks_1DispatcherInactive_FUNC);
+	((DispatcherHooks ^)TO_OBJECT(arg0))->DispatcherInactive += ((EventHandler ^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, DispatcherHooks_1DispatcherInactive_FUNC);
+}
+#endif
+
+#ifndef NO_DispatcherHooks_1OperationAborted
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DispatcherHooks_1OperationAborted)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DispatcherHooks_1OperationAborted)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, DispatcherHooks_1OperationAborted_FUNC);
+	((DispatcherHooks ^)TO_OBJECT(arg0))->OperationAborted += ((DispatcherHookEventHandler ^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, DispatcherHooks_1OperationAborted_FUNC);
+}
+#endif
+
+#ifndef NO_DispatcherHooks_1OperationCompleted
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DispatcherHooks_1OperationCompleted)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DispatcherHooks_1OperationCompleted)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, DispatcherHooks_1OperationCompleted_FUNC);
+	((DispatcherHooks ^)TO_OBJECT(arg0))->OperationCompleted += ((DispatcherHookEventHandler ^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, DispatcherHooks_1OperationCompleted_FUNC);
+}
+#endif
+
+#ifndef NO_DispatcherHooks_1OperationPosted
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DispatcherHooks_1OperationPosted)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DispatcherHooks_1OperationPosted)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, DispatcherHooks_1OperationPosted_FUNC);
+	((DispatcherHooks ^)TO_OBJECT(arg0))->OperationPosted += ((DispatcherHookEventHandler ^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, DispatcherHooks_1OperationPosted_FUNC);
+}
+#endif
+
+#ifndef NO_DispatcherOperation_1Abort
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(DispatcherOperation_1Abort)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(DispatcherOperation_1Abort)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, DispatcherOperation_1Abort_FUNC);
+	rc = (jboolean)((DispatcherOperation^)TO_OBJECT(arg0))->Abort();
+	OS_NATIVE_EXIT(env, that, DispatcherOperation_1Abort_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DispatcherOperation_1Priority__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DispatcherOperation_1Priority__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(DispatcherOperation_1Priority__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DispatcherOperation_1Priority__I_FUNC);
+	rc = (jint)((DispatcherOperation ^)TO_OBJECT(arg0))->Priority;
+	OS_NATIVE_EXIT(env, that, DispatcherOperation_1Priority__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DispatcherOperation_1Priority__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DispatcherOperation_1Priority__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DispatcherOperation_1Priority__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, DispatcherOperation_1Priority__II_FUNC);
+	((DispatcherOperation ^)TO_OBJECT(arg0))->Priority = ((DispatcherPriority)arg1);
+	OS_NATIVE_EXIT(env, that, DispatcherOperation_1Priority__II_FUNC);
+}
+#endif
+
+#ifndef NO_DispatcherOperation_1Wait
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DispatcherOperation_1Wait)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(DispatcherOperation_1Wait)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DispatcherOperation_1Wait_FUNC);
+	rc = (jint)((DispatcherOperation^)TO_OBJECT(arg0))->Wait();
+	OS_NATIVE_EXIT(env, that, DispatcherOperation_1Wait_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DispatcherTimer_1Interval
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DispatcherTimer_1Interval)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DispatcherTimer_1Interval)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, DispatcherTimer_1Interval_FUNC);
+	((DispatcherTimer^)TO_OBJECT(arg0))->Interval = ((TimeSpan)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, DispatcherTimer_1Interval_FUNC);
+}
+#endif
+
+#ifndef NO_DispatcherTimer_1Start
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DispatcherTimer_1Start)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(DispatcherTimer_1Start)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, DispatcherTimer_1Start_FUNC);
+	((DispatcherTimer^)TO_OBJECT(arg0))->Start();
+	OS_NATIVE_EXIT(env, that, DispatcherTimer_1Start_FUNC);
+}
+#endif
+
+#ifndef NO_DispatcherTimer_1Stop
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DispatcherTimer_1Stop)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(DispatcherTimer_1Stop)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, DispatcherTimer_1Stop_FUNC);
+	((DispatcherTimer^)TO_OBJECT(arg0))->Stop();
+	OS_NATIVE_EXIT(env, that, DispatcherTimer_1Stop_FUNC);
+}
+#endif
+
+#ifndef NO_DispatcherTimer_1Tag__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DispatcherTimer_1Tag__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(DispatcherTimer_1Tag__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DispatcherTimer_1Tag__I_FUNC);
+	rc = (jint)((DispatcherTimer^)TO_OBJECT(arg0))->Tag;
+	OS_NATIVE_EXIT(env, that, DispatcherTimer_1Tag__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DispatcherTimer_1Tag__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DispatcherTimer_1Tag__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DispatcherTimer_1Tag__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, DispatcherTimer_1Tag__II_FUNC);
+	((DispatcherTimer^)TO_OBJECT(arg0))->Tag = (arg1);
+	OS_NATIVE_EXIT(env, that, DispatcherTimer_1Tag__II_FUNC);
+}
+#endif
+
+#ifndef NO_DispatcherTimer_1Tick
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DispatcherTimer_1Tick)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DispatcherTimer_1Tick)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, DispatcherTimer_1Tick_FUNC);
+	((DispatcherTimer^)TO_OBJECT(arg0))->Tick += ((EventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, DispatcherTimer_1Tick_FUNC);
+}
+#endif
+
+#ifndef NO_Dispatcher_1BeginInvoke
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Dispatcher_1BeginInvoke)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT jint JNICALL OS_NATIVE(Dispatcher_1BeginInvoke)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Dispatcher_1BeginInvoke_FUNC);
+	rc = (jint)TO_HANDLE(((Dispatcher ^)TO_OBJECT(arg0))->BeginInvoke((DispatcherPriority)arg1, (Delegate ^)TO_OBJECT(arg2)));
+	OS_NATIVE_EXIT(env, that, Dispatcher_1BeginInvoke_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Dispatcher_1Hooks
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Dispatcher_1Hooks)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Dispatcher_1Hooks)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Dispatcher_1Hooks_FUNC);
+	rc = (jint)TO_HANDLE(((Dispatcher ^)TO_OBJECT(arg0))->Hooks);
+	OS_NATIVE_EXIT(env, that, Dispatcher_1Hooks_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Dispatcher_1PushFrame
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Dispatcher_1PushFrame)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(Dispatcher_1PushFrame)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, Dispatcher_1PushFrame_FUNC);
+	Dispatcher::PushFrame((DispatcherFrame ^)TO_OBJECT(arg0));
+	OS_NATIVE_EXIT(env, that, Dispatcher_1PushFrame_FUNC);
+}
+#endif
+
+#ifndef NO_DockPanel_1DockProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DockPanel_1DockProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(DockPanel_1DockProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DockPanel_1DockProperty_FUNC);
+	rc = (jint)TO_HANDLE(DockPanel::DockProperty);
+	OS_NATIVE_EXIT(env, that, DockPanel_1DockProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DockPanel_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DockPanel_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(DockPanel_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DockPanel_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(DockPanel::typeid);
+	OS_NATIVE_EXIT(env, that, DockPanel_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DoubleAnimationUsingKeyFrames_1KeyFrames
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DoubleAnimationUsingKeyFrames_1KeyFrames)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(DoubleAnimationUsingKeyFrames_1KeyFrames)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DoubleAnimationUsingKeyFrames_1KeyFrames_FUNC);
+	rc = (jint)TO_HANDLE(((DoubleAnimationUsingKeyFrames^)TO_OBJECT(arg0))->KeyFrames);
+	OS_NATIVE_EXIT(env, that, DoubleAnimationUsingKeyFrames_1KeyFrames_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DoubleAnimation_1From__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(DoubleAnimation_1From__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(DoubleAnimation_1From__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, DoubleAnimation_1From__I_FUNC);
+	rc = (jdouble)((DoubleAnimation^)TO_OBJECT(arg0))->From;
+	OS_NATIVE_EXIT(env, that, DoubleAnimation_1From__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DoubleAnimation_1From__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DoubleAnimation_1From__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DoubleAnimation_1From__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, DoubleAnimation_1From__ID_FUNC);
+	((DoubleAnimation^)TO_OBJECT(arg0))->From = (arg1);
+	OS_NATIVE_EXIT(env, that, DoubleAnimation_1From__ID_FUNC);
+}
+#endif
+
+#ifndef NO_DoubleAnimation_1To__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(DoubleAnimation_1To__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(DoubleAnimation_1To__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, DoubleAnimation_1To__I_FUNC);
+	rc = (jdouble)((DoubleAnimation^)TO_OBJECT(arg0))->To;
+	OS_NATIVE_EXIT(env, that, DoubleAnimation_1To__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DoubleAnimation_1To__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DoubleAnimation_1To__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DoubleAnimation_1To__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, DoubleAnimation_1To__ID_FUNC);
+	((DoubleAnimation^)TO_OBJECT(arg0))->To = (arg1);
+	OS_NATIVE_EXIT(env, that, DoubleAnimation_1To__ID_FUNC);
+}
+#endif
+
+#ifndef NO_DoubleCollection_1Add
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DoubleCollection_1Add)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DoubleCollection_1Add)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, DoubleCollection_1Add_FUNC);
+	((DoubleCollection^)TO_OBJECT(arg0))->Add(arg1);
+	OS_NATIVE_EXIT(env, that, DoubleCollection_1Add_FUNC);
+}
+#endif
+
+#ifndef NO_DoubleKeyFrameCollection_1Add
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DoubleKeyFrameCollection_1Add)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(DoubleKeyFrameCollection_1Add)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DoubleKeyFrameCollection_1Add_FUNC);
+	rc = (jint)((DoubleKeyFrameCollection^)TO_OBJECT(arg0))->Add((DoubleKeyFrame^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, DoubleKeyFrameCollection_1Add_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DoubleKeyFrame_1KeyTime
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DoubleKeyFrame_1KeyTime)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DoubleKeyFrame_1KeyTime)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, DoubleKeyFrame_1KeyTime_FUNC);
+	((DoubleKeyFrame^)TO_OBJECT(arg0))->KeyTime = ((KeyTime)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, DoubleKeyFrame_1KeyTime_FUNC);
+}
+#endif
+
+#ifndef NO_DoubleKeyFrame_1Value
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DoubleKeyFrame_1Value)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DoubleKeyFrame_1Value)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, DoubleKeyFrame_1Value_FUNC);
+	((DoubleKeyFrame^)TO_OBJECT(arg0))->Value = (arg1);
+	OS_NATIVE_EXIT(env, that, DoubleKeyFrame_1Value_FUNC);
+}
+#endif
+
+#ifndef NO_DragDeltaEventArgs_1HorizontalChange
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DragDeltaEventArgs_1HorizontalChange)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(DragDeltaEventArgs_1HorizontalChange)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DragDeltaEventArgs_1HorizontalChange_FUNC);
+	rc = (jint)((DragDeltaEventArgs^)TO_OBJECT(arg0))->HorizontalChange;
+	OS_NATIVE_EXIT(env, that, DragDeltaEventArgs_1HorizontalChange_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DragDeltaEventArgs_1VerticalChange
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DragDeltaEventArgs_1VerticalChange)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(DragDeltaEventArgs_1VerticalChange)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DragDeltaEventArgs_1VerticalChange_FUNC);
+	rc = (jint)((DragDeltaEventArgs^)TO_OBJECT(arg0))->VerticalChange;
+	OS_NATIVE_EXIT(env, that, DragDeltaEventArgs_1VerticalChange_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DragDrop_1DoDragDrop
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DragDrop_1DoDragDrop)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT jint JNICALL OS_NATIVE(DragDrop_1DoDragDrop)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DragDrop_1DoDragDrop_FUNC);
+	rc = (jint)DragDrop::DoDragDrop((DependencyObject^)TO_OBJECT(arg0), (Object^)TO_OBJECT(arg1), (DragDropEffects)arg2);
+	OS_NATIVE_EXIT(env, that, DragDrop_1DoDragDrop_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DragEventArgs_1AllowedEffects
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DragEventArgs_1AllowedEffects)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(DragEventArgs_1AllowedEffects)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DragEventArgs_1AllowedEffects_FUNC);
+	rc = (jint)((DragEventArgs^)TO_OBJECT(arg0))->AllowedEffects;
+	OS_NATIVE_EXIT(env, that, DragEventArgs_1AllowedEffects_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DragEventArgs_1Data
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DragEventArgs_1Data)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(DragEventArgs_1Data)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DragEventArgs_1Data_FUNC);
+	rc = (jint)TO_HANDLE(((DragEventArgs^)TO_OBJECT(arg0))->Data);
+	OS_NATIVE_EXIT(env, that, DragEventArgs_1Data_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DragEventArgs_1Effects__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DragEventArgs_1Effects__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(DragEventArgs_1Effects__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DragEventArgs_1Effects__I_FUNC);
+	rc = (jint)((DragEventArgs^)TO_OBJECT(arg0))->Effects;
+	OS_NATIVE_EXIT(env, that, DragEventArgs_1Effects__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DragEventArgs_1Effects__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DragEventArgs_1Effects__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DragEventArgs_1Effects__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, DragEventArgs_1Effects__II_FUNC);
+	((DragEventArgs^)TO_OBJECT(arg0))->Effects = ((DragDropEffects)arg1);
+	OS_NATIVE_EXIT(env, that, DragEventArgs_1Effects__II_FUNC);
+}
+#endif
+
+#ifndef NO_DragEventArgs_1GetPosition
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DragEventArgs_1GetPosition)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(DragEventArgs_1GetPosition)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DragEventArgs_1GetPosition_FUNC);
+	rc = (jint)TO_HANDLE(((DragEventArgs^)TO_OBJECT(arg0))->GetPosition((IInputElement^)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, DragEventArgs_1GetPosition_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DragEventArgs_1KeyStates
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DragEventArgs_1KeyStates)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(DragEventArgs_1KeyStates)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DragEventArgs_1KeyStates_FUNC);
+	rc = (jint)((DragEventArgs^)TO_OBJECT(arg0))->KeyStates;
+	OS_NATIVE_EXIT(env, that, DragEventArgs_1KeyStates_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DrawingColor_1FromArgb
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DrawingColor_1FromArgb)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3);
+JNIEXPORT jint JNICALL OS_NATIVE(DrawingColor_1FromArgb)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DrawingColor_1FromArgb_FUNC);
+	rc = (jint)TO_HANDLE(System::Drawing::Color::FromArgb(arg0, arg1, arg2, arg3));
+	OS_NATIVE_EXIT(env, that, DrawingColor_1FromArgb_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DrawingColor_1ToArgb
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DrawingColor_1ToArgb)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(DrawingColor_1ToArgb)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DrawingColor_1ToArgb_FUNC);
+	rc = (jint)((System::Drawing::Color^)TO_OBJECT(arg0))->ToArgb();
+	OS_NATIVE_EXIT(env, that, DrawingColor_1ToArgb_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DrawingContext_1Close
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1Close)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1Close)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, DrawingContext_1Close_FUNC);
+	((DrawingContext^)TO_OBJECT(arg0))->Close();
+	OS_NATIVE_EXIT(env, that, DrawingContext_1Close_FUNC);
+}
+#endif
+
+#ifndef NO_DrawingContext_1DrawDrawing
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1DrawDrawing)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1DrawDrawing)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, DrawingContext_1DrawDrawing_FUNC);
+	((DrawingContext^)TO_OBJECT(arg0))->DrawDrawing((System::Windows::Media::Drawing^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, DrawingContext_1DrawDrawing_FUNC);
+}
+#endif
+
+#ifndef NO_DrawingContext_1DrawEllipse
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1DrawEllipse)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jdouble arg4, jdouble arg5);
+JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1DrawEllipse)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jdouble arg4, jdouble arg5)
+{
+	OS_NATIVE_ENTER(env, that, DrawingContext_1DrawEllipse_FUNC);
+	((DrawingContext^)TO_OBJECT(arg0))->DrawEllipse((Brush^)TO_OBJECT(arg1), (Pen^)TO_OBJECT(arg2), (Point)TO_OBJECT(arg3), arg4, arg5);
+	OS_NATIVE_EXIT(env, that, DrawingContext_1DrawEllipse_FUNC);
+}
+#endif
+
+#ifndef NO_DrawingContext_1DrawGeometry
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1DrawGeometry)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3);
+JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1DrawGeometry)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+{
+	OS_NATIVE_ENTER(env, that, DrawingContext_1DrawGeometry_FUNC);
+	((DrawingContext^)TO_OBJECT(arg0))->DrawGeometry((Brush^)TO_OBJECT(arg1), (Pen^)TO_OBJECT(arg2), (Geometry^)TO_OBJECT(arg3));
+	OS_NATIVE_EXIT(env, that, DrawingContext_1DrawGeometry_FUNC);
+}
+#endif
+
+#ifndef NO_DrawingContext_1DrawImage
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1DrawImage)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1DrawImage)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, DrawingContext_1DrawImage_FUNC);
+	((DrawingContext^)TO_OBJECT(arg0))->DrawImage((ImageSource^)TO_OBJECT(arg1), (Rect)TO_OBJECT(arg2));
+	OS_NATIVE_EXIT(env, that, DrawingContext_1DrawImage_FUNC);
+}
+#endif
+
+#ifndef NO_DrawingContext_1DrawLine
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1DrawLine)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3);
+JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1DrawLine)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+{
+	OS_NATIVE_ENTER(env, that, DrawingContext_1DrawLine_FUNC);
+	((DrawingContext^)TO_OBJECT(arg0))->DrawLine((Pen^)TO_OBJECT(arg1), (Point)TO_OBJECT(arg2), (Point)TO_OBJECT(arg3));
+	OS_NATIVE_EXIT(env, that, DrawingContext_1DrawLine_FUNC);
+}
+#endif
+
+#ifndef NO_DrawingContext_1DrawRectangle
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1DrawRectangle)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3);
+JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1DrawRectangle)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+{
+	OS_NATIVE_ENTER(env, that, DrawingContext_1DrawRectangle_FUNC);
+	((DrawingContext^)TO_OBJECT(arg0))->DrawRectangle((Brush^)TO_OBJECT(arg1), (Pen^)TO_OBJECT(arg2), (Rect)TO_OBJECT(arg3));
+	OS_NATIVE_EXIT(env, that, DrawingContext_1DrawRectangle_FUNC);
+}
+#endif
+
+#ifndef NO_DrawingContext_1DrawRoundedRectangle
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1DrawRoundedRectangle)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jdouble arg4, jdouble arg5);
+JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1DrawRoundedRectangle)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jdouble arg4, jdouble arg5)
+{
+	OS_NATIVE_ENTER(env, that, DrawingContext_1DrawRoundedRectangle_FUNC);
+	((DrawingContext^)TO_OBJECT(arg0))->DrawRoundedRectangle((Brush^)TO_OBJECT(arg1), (Pen^)TO_OBJECT(arg2), (Rect)TO_OBJECT(arg3), arg4, arg5);
+	OS_NATIVE_EXIT(env, that, DrawingContext_1DrawRoundedRectangle_FUNC);
+}
+#endif
+
+#ifndef NO_DrawingContext_1DrawText
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1DrawText)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1DrawText)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, DrawingContext_1DrawText_FUNC);
+	((DrawingContext^)TO_OBJECT(arg0))->DrawText((FormattedText^)TO_OBJECT(arg1), (Point)TO_OBJECT(arg2));
+	OS_NATIVE_EXIT(env, that, DrawingContext_1DrawText_FUNC);
+}
+#endif
+
+#ifndef NO_DrawingContext_1Pop
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1Pop)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1Pop)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, DrawingContext_1Pop_FUNC);
+	((DrawingContext^)TO_OBJECT(arg0))->Pop();
+	OS_NATIVE_EXIT(env, that, DrawingContext_1Pop_FUNC);
+}
+#endif
+
+#ifndef NO_DrawingContext_1PushClip
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1PushClip)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1PushClip)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, DrawingContext_1PushClip_FUNC);
+	((DrawingContext^)TO_OBJECT(arg0))->PushClip((Geometry^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, DrawingContext_1PushClip_FUNC);
+}
+#endif
+
+#ifndef NO_DrawingContext_1PushOpacity
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1PushOpacity)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1PushOpacity)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, DrawingContext_1PushOpacity_FUNC);
+	((DrawingContext^)TO_OBJECT(arg0))->PushOpacity(arg1);
+	OS_NATIVE_EXIT(env, that, DrawingContext_1PushOpacity_FUNC);
+}
+#endif
+
+#ifndef NO_DrawingContext_1PushTransform
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1PushTransform)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DrawingContext_1PushTransform)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, DrawingContext_1PushTransform_FUNC);
+	((DrawingContext^)TO_OBJECT(arg0))->PushTransform((Transform^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, DrawingContext_1PushTransform_FUNC);
+}
+#endif
+
+#ifndef NO_DrawingFontFamily_1Name
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DrawingFontFamily_1Name)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(DrawingFontFamily_1Name)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DrawingFontFamily_1Name_FUNC);
+	rc = (jint)TO_HANDLE(((System::Drawing::FontFamily^)TO_OBJECT(arg0))->Name);
+	OS_NATIVE_EXIT(env, that, DrawingFontFamily_1Name_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DrawingVisual_1Drawing
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DrawingVisual_1Drawing)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(DrawingVisual_1Drawing)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DrawingVisual_1Drawing_FUNC);
+	rc = (jint)TO_HANDLE(((DrawingVisual^)TO_OBJECT(arg0))->Drawing);
+	OS_NATIVE_EXIT(env, that, DrawingVisual_1Drawing_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DrawingVisual_1RenderOpen
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DrawingVisual_1RenderOpen)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(DrawingVisual_1RenderOpen)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DrawingVisual_1RenderOpen_FUNC);
+	rc = (jint)TO_HANDLE(((DrawingVisual^)TO_OBJECT(arg0))->RenderOpen());
+	OS_NATIVE_EXIT(env, that, DrawingVisual_1RenderOpen_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DrawingVisual_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DrawingVisual_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(DrawingVisual_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DrawingVisual_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(DrawingVisual::typeid);
+	OS_NATIVE_EXIT(env, that, DrawingVisual_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DropShadowBitmapEffect_1Color__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(DropShadowBitmapEffect_1Color__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(DropShadowBitmapEffect_1Color__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, DropShadowBitmapEffect_1Color__I_FUNC);
+	rc = (jint)TO_HANDLE(((DropShadowBitmapEffect^)TO_OBJECT(arg0))->Color);
+	OS_NATIVE_EXIT(env, that, DropShadowBitmapEffect_1Color__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DropShadowBitmapEffect_1Color__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DropShadowBitmapEffect_1Color__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DropShadowBitmapEffect_1Color__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, DropShadowBitmapEffect_1Color__II_FUNC);
+	((DropShadowBitmapEffect^)TO_OBJECT(arg0))->Color = ((Color)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, DropShadowBitmapEffect_1Color__II_FUNC);
+}
+#endif
+
+#ifndef NO_DropShadowBitmapEffect_1Direction__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(DropShadowBitmapEffect_1Direction__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(DropShadowBitmapEffect_1Direction__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, DropShadowBitmapEffect_1Direction__I_FUNC);
+	rc = (jdouble)((DropShadowBitmapEffect^)TO_OBJECT(arg0))->Direction;
+	OS_NATIVE_EXIT(env, that, DropShadowBitmapEffect_1Direction__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DropShadowBitmapEffect_1Direction__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DropShadowBitmapEffect_1Direction__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DropShadowBitmapEffect_1Direction__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, DropShadowBitmapEffect_1Direction__ID_FUNC);
+	((DropShadowBitmapEffect^)TO_OBJECT(arg0))->Direction = (arg1);
+	OS_NATIVE_EXIT(env, that, DropShadowBitmapEffect_1Direction__ID_FUNC);
+}
+#endif
+
+#ifndef NO_DropShadowBitmapEffect_1Opacity__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(DropShadowBitmapEffect_1Opacity__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(DropShadowBitmapEffect_1Opacity__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, DropShadowBitmapEffect_1Opacity__I_FUNC);
+	rc = (jdouble)((DropShadowBitmapEffect^)TO_OBJECT(arg0))->Opacity;
+	OS_NATIVE_EXIT(env, that, DropShadowBitmapEffect_1Opacity__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DropShadowBitmapEffect_1Opacity__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DropShadowBitmapEffect_1Opacity__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DropShadowBitmapEffect_1Opacity__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, DropShadowBitmapEffect_1Opacity__ID_FUNC);
+	((DropShadowBitmapEffect^)TO_OBJECT(arg0))->Opacity = (arg1);
+	OS_NATIVE_EXIT(env, that, DropShadowBitmapEffect_1Opacity__ID_FUNC);
+}
+#endif
+
+#ifndef NO_DropShadowBitmapEffect_1ShadowDepth__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(DropShadowBitmapEffect_1ShadowDepth__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(DropShadowBitmapEffect_1ShadowDepth__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, DropShadowBitmapEffect_1ShadowDepth__I_FUNC);
+	rc = (jdouble)((DropShadowBitmapEffect^)TO_OBJECT(arg0))->ShadowDepth;
+	OS_NATIVE_EXIT(env, that, DropShadowBitmapEffect_1ShadowDepth__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DropShadowBitmapEffect_1ShadowDepth__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DropShadowBitmapEffect_1ShadowDepth__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DropShadowBitmapEffect_1ShadowDepth__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, DropShadowBitmapEffect_1ShadowDepth__ID_FUNC);
+	((DropShadowBitmapEffect^)TO_OBJECT(arg0))->ShadowDepth = (arg1);
+	OS_NATIVE_EXIT(env, that, DropShadowBitmapEffect_1ShadowDepth__ID_FUNC);
+}
+#endif
+
+#ifndef NO_DropShadowBitmapEffect_1Softness__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(DropShadowBitmapEffect_1Softness__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(DropShadowBitmapEffect_1Softness__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, DropShadowBitmapEffect_1Softness__I_FUNC);
+	rc = (jdouble)((DropShadowBitmapEffect^)TO_OBJECT(arg0))->Softness;
+	OS_NATIVE_EXIT(env, that, DropShadowBitmapEffect_1Softness__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DropShadowBitmapEffect_1Softness__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(DropShadowBitmapEffect_1Softness__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(DropShadowBitmapEffect_1Softness__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, DropShadowBitmapEffect_1Softness__ID_FUNC);
+	((DropShadowBitmapEffect^)TO_OBJECT(arg0))->Softness = (arg1);
+	OS_NATIVE_EXIT(env, that, DropShadowBitmapEffect_1Softness__ID_FUNC);
+}
+#endif
+
+#ifndef NO_Duration_1TimeSpan
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Duration_1TimeSpan)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Duration_1TimeSpan)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Duration_1TimeSpan_FUNC);
+	rc = (jint)TO_HANDLE(((Duration^)TO_OBJECT(arg0))->TimeSpan);
+	OS_NATIVE_EXIT(env, that, Duration_1TimeSpan_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_EditingCommands_1Backspace
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(EditingCommands_1Backspace)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(EditingCommands_1Backspace)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, EditingCommands_1Backspace_FUNC);
+	rc = (jint)TO_HANDLE(EditingCommands::Backspace);
+	OS_NATIVE_EXIT(env, that, EditingCommands_1Backspace_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_EditingCommands_1Delete
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(EditingCommands_1Delete)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(EditingCommands_1Delete)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, EditingCommands_1Delete_FUNC);
+	rc = (jint)TO_HANDLE(EditingCommands::Delete);
+	OS_NATIVE_EXIT(env, that, EditingCommands_1Delete_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_EditingCommands_1DeleteNextWord
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(EditingCommands_1DeleteNextWord)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(EditingCommands_1DeleteNextWord)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, EditingCommands_1DeleteNextWord_FUNC);
+	rc = (jint)TO_HANDLE(EditingCommands::DeleteNextWord);
+	OS_NATIVE_EXIT(env, that, EditingCommands_1DeleteNextWord_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_EditingCommands_1DeletePreviousWord
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(EditingCommands_1DeletePreviousWord)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(EditingCommands_1DeletePreviousWord)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, EditingCommands_1DeletePreviousWord_FUNC);
+	rc = (jint)TO_HANDLE(EditingCommands::DeletePreviousWord);
+	OS_NATIVE_EXIT(env, that, EditingCommands_1DeletePreviousWord_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Environment_1ExpandEnvironmentVariables
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Environment_1ExpandEnvironmentVariables)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Environment_1ExpandEnvironmentVariables)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Environment_1ExpandEnvironmentVariables_FUNC);
+	rc = (jint)TO_HANDLE(Environment::ExpandEnvironmentVariables((String^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, Environment_1ExpandEnvironmentVariables_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ExecutedRoutedEventArgs_1Command
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ExecutedRoutedEventArgs_1Command)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ExecutedRoutedEventArgs_1Command)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ExecutedRoutedEventArgs_1Command_FUNC);
+	rc = (jint)TO_HANDLE(((ExecutedRoutedEventArgs^)TO_OBJECT(arg0))->Command);
+	OS_NATIVE_EXIT(env, that, ExecutedRoutedEventArgs_1Command_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ExecutedRoutedEventArgs_1Handled
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ExecutedRoutedEventArgs_1Handled)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ExecutedRoutedEventArgs_1Handled)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, ExecutedRoutedEventArgs_1Handled_FUNC);
+	((ExecutedRoutedEventArgs^)TO_OBJECT(arg0))->Handled = (arg1);
+	OS_NATIVE_EXIT(env, that, ExecutedRoutedEventArgs_1Handled_FUNC);
+}
+#endif
+
+#ifndef NO_Expander_1Collapsed
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Expander_1Collapsed)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Expander_1Collapsed)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Expander_1Collapsed_FUNC);
+	((Expander^)TO_OBJECT(arg0))->Collapsed += ((RoutedEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Expander_1Collapsed_FUNC);
+}
+#endif
+
+#ifndef NO_Expander_1Expanded
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Expander_1Expanded)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Expander_1Expanded)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Expander_1Expanded_FUNC);
+	((Expander^)TO_OBJECT(arg0))->Expanded += ((RoutedEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Expander_1Expanded_FUNC);
+}
+#endif
+
+#ifndef NO_Expander_1IsExpanded__I
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(Expander_1IsExpanded__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(Expander_1IsExpanded__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, Expander_1IsExpanded__I_FUNC);
+	rc = (jboolean)((Expander^)TO_OBJECT(arg0))->IsExpanded;
+	OS_NATIVE_EXIT(env, that, Expander_1IsExpanded__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Expander_1IsExpanded__IZ
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Expander_1IsExpanded__IZ)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Expander_1IsExpanded__IZ)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, Expander_1IsExpanded__IZ_FUNC);
+	((Expander^)TO_OBJECT(arg0))->IsExpanded = (arg1);
+	OS_NATIVE_EXIT(env, that, Expander_1IsExpanded__IZ_FUNC);
+}
+#endif
+
+#ifndef NO_FileDialog_1FileName
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FileDialog_1FileName)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FileDialog_1FileName)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FileDialog_1FileName_FUNC);
+	((FileDialog^)TO_OBJECT(arg0))->FileName = ((String^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FileDialog_1FileName_FUNC);
+}
+#endif
+
+#ifndef NO_FileDialog_1FileNames
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FileDialog_1FileNames)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FileDialog_1FileNames)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FileDialog_1FileNames_FUNC);
+	rc = (jint)TO_HANDLE(((FileDialog^)TO_OBJECT(arg0))->FileNames);
+	OS_NATIVE_EXIT(env, that, FileDialog_1FileNames_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FileDialog_1Filter
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FileDialog_1Filter)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FileDialog_1Filter)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FileDialog_1Filter_FUNC);
+	((FileDialog^)TO_OBJECT(arg0))->Filter = ((String^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FileDialog_1Filter_FUNC);
+}
+#endif
+
+#ifndef NO_FileDialog_1FilterIndex__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FileDialog_1FilterIndex__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FileDialog_1FilterIndex__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FileDialog_1FilterIndex__I_FUNC);
+	rc = (jint)((FileDialog^)TO_OBJECT(arg0))->FilterIndex;
+	OS_NATIVE_EXIT(env, that, FileDialog_1FilterIndex__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FileDialog_1FilterIndex__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FileDialog_1FilterIndex__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FileDialog_1FilterIndex__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FileDialog_1FilterIndex__II_FUNC);
+	((FileDialog^)TO_OBJECT(arg0))->FilterIndex = (arg1);
+	OS_NATIVE_EXIT(env, that, FileDialog_1FilterIndex__II_FUNC);
+}
+#endif
+
+#ifndef NO_FileDialog_1InitialDirectory
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FileDialog_1InitialDirectory)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FileDialog_1InitialDirectory)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FileDialog_1InitialDirectory_FUNC);
+	((FileDialog^)TO_OBJECT(arg0))->InitialDirectory = ((String^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FileDialog_1InitialDirectory_FUNC);
+}
+#endif
+
+#ifndef NO_FileDialog_1Title
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FileDialog_1Title)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FileDialog_1Title)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FileDialog_1Title_FUNC);
+	((FileDialog^)TO_OBJECT(arg0))->Title = ((String^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FileDialog_1Title_FUNC);
+}
+#endif
+
+#ifndef NO_FileInfo_1DirectoryName
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FileInfo_1DirectoryName)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FileInfo_1DirectoryName)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FileInfo_1DirectoryName_FUNC);
+	rc = (jint)TO_HANDLE(((System::IO::FileInfo^)TO_OBJECT(arg0))->DirectoryName);
+	OS_NATIVE_EXIT(env, that, FileInfo_1DirectoryName_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FileInfo_1Name
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FileInfo_1Name)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FileInfo_1Name)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FileInfo_1Name_FUNC);
+	rc = (jint)TO_HANDLE(((System::IO::FileInfo^)TO_OBJECT(arg0))->Name);
+	OS_NATIVE_EXIT(env, that, FileInfo_1Name_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_File_1Exists
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(File_1Exists)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(File_1Exists)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, File_1Exists_FUNC);
+	rc = (jboolean)System::IO::File::Exists((String^)TO_OBJECT(arg0));
+	OS_NATIVE_EXIT(env, that, File_1Exists_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_File_1ReadAllText
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(File_1ReadAllText)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(File_1ReadAllText)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, File_1ReadAllText_FUNC);
+	rc = (jint)TO_HANDLE(System::IO::File::ReadAllText((String^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, File_1ReadAllText_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FocusManager_1GetFocusScope
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FocusManager_1GetFocusScope)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FocusManager_1GetFocusScope)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FocusManager_1GetFocusScope_FUNC);
+	rc = (jint)TO_HANDLE(FocusManager::GetFocusScope((DependencyObject^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, FocusManager_1GetFocusScope_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FocusManager_1GetFocusedElement
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FocusManager_1GetFocusedElement)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FocusManager_1GetFocusedElement)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FocusManager_1GetFocusedElement_FUNC);
+	rc = (jint)TO_HANDLE(FocusManager::GetFocusedElement((DependencyObject^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, FocusManager_1GetFocusedElement_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FolderBrowserDialog_1Description
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FolderBrowserDialog_1Description)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FolderBrowserDialog_1Description)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FolderBrowserDialog_1Description_FUNC);
+	((System::Windows::Forms::FolderBrowserDialog^)TO_OBJECT(arg0))->Description = ((String^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FolderBrowserDialog_1Description_FUNC);
+}
+#endif
+
+#ifndef NO_FolderBrowserDialog_1SelectedPath__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FolderBrowserDialog_1SelectedPath__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FolderBrowserDialog_1SelectedPath__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FolderBrowserDialog_1SelectedPath__I_FUNC);
+	rc = (jint)TO_HANDLE(((System::Windows::Forms::FolderBrowserDialog^)TO_OBJECT(arg0))->SelectedPath);
+	OS_NATIVE_EXIT(env, that, FolderBrowserDialog_1SelectedPath__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FolderBrowserDialog_1SelectedPath__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FolderBrowserDialog_1SelectedPath__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FolderBrowserDialog_1SelectedPath__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FolderBrowserDialog_1SelectedPath__II_FUNC);
+	((System::Windows::Forms::FolderBrowserDialog^)TO_OBJECT(arg0))->SelectedPath = ((String^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FolderBrowserDialog_1SelectedPath__II_FUNC);
+}
+#endif
+
+#ifndef NO_FontDialog_1Color__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FontDialog_1Color__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FontDialog_1Color__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FontDialog_1Color__I_FUNC);
+	rc = (jint)TO_HANDLE(((System::Windows::Forms::FontDialog^)TO_OBJECT(arg0))->Color);
+	OS_NATIVE_EXIT(env, that, FontDialog_1Color__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FontDialog_1Color__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FontDialog_1Color__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FontDialog_1Color__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FontDialog_1Color__II_FUNC);
+	((System::Windows::Forms::FontDialog^)TO_OBJECT(arg0))->Color = ((System::Drawing::Color)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FontDialog_1Color__II_FUNC);
+}
+#endif
+
+#ifndef NO_FontDialog_1Font__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FontDialog_1Font__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FontDialog_1Font__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FontDialog_1Font__I_FUNC);
+	rc = (jint)TO_HANDLE(((System::Windows::Forms::FontDialog^)TO_OBJECT(arg0))->Font);
+	OS_NATIVE_EXIT(env, that, FontDialog_1Font__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FontDialog_1Font__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FontDialog_1Font__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FontDialog_1Font__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FontDialog_1Font__II_FUNC);
+	((System::Windows::Forms::FontDialog^)TO_OBJECT(arg0))->Font = ((System::Drawing::Font^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FontDialog_1Font__II_FUNC);
+}
+#endif
+
+#ifndef NO_FontDialog_1ShowColor
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FontDialog_1ShowColor)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FontDialog_1ShowColor)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, FontDialog_1ShowColor_FUNC);
+	((System::Windows::Forms::FontDialog^)TO_OBJECT(arg0))->ShowColor = (arg1);
+	OS_NATIVE_EXIT(env, that, FontDialog_1ShowColor_FUNC);
+}
+#endif
+
+#ifndef NO_FontFamily_1GetTypefaces
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FontFamily_1GetTypefaces)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FontFamily_1GetTypefaces)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FontFamily_1GetTypefaces_FUNC);
+	rc = (jint)TO_HANDLE(((FontFamily^)TO_OBJECT(arg0))->GetTypefaces());
+	OS_NATIVE_EXIT(env, that, FontFamily_1GetTypefaces_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FontFamily_1LineSpacing
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(FontFamily_1LineSpacing)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(FontFamily_1LineSpacing)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, FontFamily_1LineSpacing_FUNC);
+	rc = (jdouble)((FontFamily^)TO_OBJECT(arg0))->LineSpacing;
+	OS_NATIVE_EXIT(env, that, FontFamily_1LineSpacing_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FontFamily_1Source
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FontFamily_1Source)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FontFamily_1Source)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FontFamily_1Source_FUNC);
+	rc = (jint)TO_HANDLE(((FontFamily^)TO_OBJECT(arg0))->Source);
+	OS_NATIVE_EXIT(env, that, FontFamily_1Source_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FontStretch_1FromOpenTypeStretch
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FontStretch_1FromOpenTypeStretch)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FontStretch_1FromOpenTypeStretch)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FontStretch_1FromOpenTypeStretch_FUNC);
+	rc = (jint)TO_HANDLE(FontStretch::FromOpenTypeStretch(arg0));
+	OS_NATIVE_EXIT(env, that, FontStretch_1FromOpenTypeStretch_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FontStretch_1ToOpenTypeStretch
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FontStretch_1ToOpenTypeStretch)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FontStretch_1ToOpenTypeStretch)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FontStretch_1ToOpenTypeStretch_FUNC);
+	rc = (jint)((FontStretch^)TO_OBJECT(arg0))->ToOpenTypeStretch();
+	OS_NATIVE_EXIT(env, that, FontStretch_1ToOpenTypeStretch_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FontStretches_1Normal
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FontStretches_1Normal)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(FontStretches_1Normal)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FontStretches_1Normal_FUNC);
+	rc = (jint)TO_HANDLE(FontStretches::Normal);
+	OS_NATIVE_EXIT(env, that, FontStretches_1Normal_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FontStyles_1Italic
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FontStyles_1Italic)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(FontStyles_1Italic)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FontStyles_1Italic_FUNC);
+	rc = (jint)TO_HANDLE(FontStyles::Italic);
+	OS_NATIVE_EXIT(env, that, FontStyles_1Italic_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FontStyles_1Normal
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FontStyles_1Normal)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(FontStyles_1Normal)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FontStyles_1Normal_FUNC);
+	rc = (jint)TO_HANDLE(FontStyles::Normal);
+	OS_NATIVE_EXIT(env, that, FontStyles_1Normal_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FontStyles_1Oblique
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FontStyles_1Oblique)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(FontStyles_1Oblique)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FontStyles_1Oblique_FUNC);
+	rc = (jint)TO_HANDLE(FontStyles::Oblique);
+	OS_NATIVE_EXIT(env, that, FontStyles_1Oblique_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FontWeight_1FromOpenTypeWeight
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FontWeight_1FromOpenTypeWeight)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FontWeight_1FromOpenTypeWeight)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FontWeight_1FromOpenTypeWeight_FUNC);
+	rc = (jint)TO_HANDLE(FontWeight::FromOpenTypeWeight(arg0));
+	OS_NATIVE_EXIT(env, that, FontWeight_1FromOpenTypeWeight_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FontWeight_1ToOpenTypeWeight
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FontWeight_1ToOpenTypeWeight)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FontWeight_1ToOpenTypeWeight)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FontWeight_1ToOpenTypeWeight_FUNC);
+	rc = (jint)((FontWeight^)TO_OBJECT(arg0))->ToOpenTypeWeight();
+	OS_NATIVE_EXIT(env, that, FontWeight_1ToOpenTypeWeight_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FontWeights_1Bold
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FontWeights_1Bold)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(FontWeights_1Bold)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FontWeights_1Bold_FUNC);
+	rc = (jint)TO_HANDLE(FontWeights::Bold);
+	OS_NATIVE_EXIT(env, that, FontWeights_1Bold_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FontWeights_1Normal
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FontWeights_1Normal)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(FontWeights_1Normal)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FontWeights_1Normal_FUNC);
+	rc = (jint)TO_HANDLE(FontWeights::Normal);
+	OS_NATIVE_EXIT(env, that, FontWeights_1Normal_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Font_1FontFamily
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Font_1FontFamily)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Font_1FontFamily)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Font_1FontFamily_FUNC);
+	rc = (jint)TO_HANDLE(((System::Drawing::Font^)TO_OBJECT(arg0))->FontFamily);
+	OS_NATIVE_EXIT(env, that, Font_1FontFamily_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Font_1Size
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Font_1Size)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Font_1Size)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Font_1Size_FUNC);
+	rc = (jint)((System::Drawing::Font^)TO_OBJECT(arg0))->Size;
+	OS_NATIVE_EXIT(env, that, Font_1Size_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Font_1Style
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Font_1Style)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Font_1Style)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Font_1Style_FUNC);
+	rc = (jint)((System::Drawing::Font^)TO_OBJECT(arg0))->Style;
+	OS_NATIVE_EXIT(env, that, Font_1Style_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Fonts_1GetTypefaces
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Fonts_1GetTypefaces)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Fonts_1GetTypefaces)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Fonts_1GetTypefaces_FUNC);
+	rc = (jint)TO_HANDLE(Fonts::GetTypefaces((String^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, Fonts_1GetTypefaces_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Fonts_1SystemTypefaces
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Fonts_1SystemTypefaces)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Fonts_1SystemTypefaces)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Fonts_1SystemTypefaces_FUNC);
+	rc = (jint)TO_HANDLE(Fonts::SystemTypefaces);
+	OS_NATIVE_EXIT(env, that, Fonts_1SystemTypefaces_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FormattedText_1Baseline
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(FormattedText_1Baseline)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(FormattedText_1Baseline)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, FormattedText_1Baseline_FUNC);
+	rc = (jdouble)((FormattedText^)TO_OBJECT(arg0))->Baseline;
+	OS_NATIVE_EXIT(env, that, FormattedText_1Baseline_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FormattedText_1BuildGeometry
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FormattedText_1BuildGeometry)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(FormattedText_1BuildGeometry)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FormattedText_1BuildGeometry_FUNC);
+	rc = (jint)TO_HANDLE(((FormattedText^)TO_OBJECT(arg0))->BuildGeometry((Point)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, FormattedText_1BuildGeometry_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FormattedText_1BuildHighlightGeometry
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FormattedText_1BuildHighlightGeometry)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(FormattedText_1BuildHighlightGeometry)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FormattedText_1BuildHighlightGeometry_FUNC);
+	rc = (jint)TO_HANDLE(((FormattedText^)TO_OBJECT(arg0))->BuildHighlightGeometry((Point)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, FormattedText_1BuildHighlightGeometry_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FormattedText_1Height
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(FormattedText_1Height)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(FormattedText_1Height)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, FormattedText_1Height_FUNC);
+	rc = (jdouble)((FormattedText^)TO_OBJECT(arg0))->Height;
+	OS_NATIVE_EXIT(env, that, FormattedText_1Height_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FormattedText_1SetTextDecorations
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FormattedText_1SetTextDecorations)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3);
+JNIEXPORT void JNICALL OS_NATIVE(FormattedText_1SetTextDecorations)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+{
+	OS_NATIVE_ENTER(env, that, FormattedText_1SetTextDecorations_FUNC);
+	((FormattedText^)TO_OBJECT(arg0))->SetTextDecorations((TextDecorationCollection^)TO_OBJECT(arg1), arg2, arg3);
+	OS_NATIVE_EXIT(env, that, FormattedText_1SetTextDecorations_FUNC);
+}
+#endif
+
+#ifndef NO_FormattedText_1WidthIncludingTrailingWhitespace
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(FormattedText_1WidthIncludingTrailingWhitespace)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(FormattedText_1WidthIncludingTrailingWhitespace)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, FormattedText_1WidthIncludingTrailingWhitespace_FUNC);
+	rc = (jdouble)((FormattedText^)TO_OBJECT(arg0))->WidthIncludingTrailingWhitespace;
+	OS_NATIVE_EXIT(env, that, FormattedText_1WidthIncludingTrailingWhitespace_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FormsCommonDialog_1ShowDialog
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FormsCommonDialog_1ShowDialog)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FormsCommonDialog_1ShowDialog)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FormsCommonDialog_1ShowDialog_FUNC);
+	rc = (jint)((System::Windows::Forms::CommonDialog^)TO_OBJECT(arg0))->ShowDialog();
+	OS_NATIVE_EXIT(env, that, FormsCommonDialog_1ShowDialog_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FormsMouseEventArgs_1Button
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FormsMouseEventArgs_1Button)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FormsMouseEventArgs_1Button)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FormsMouseEventArgs_1Button_FUNC);
+	rc = (jint)((System::Windows::Forms::MouseEventArgs^)TO_OBJECT(arg0))->Button;
+	OS_NATIVE_EXIT(env, that, FormsMouseEventArgs_1Button_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Frame_1CanGoBack
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(Frame_1CanGoBack)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(Frame_1CanGoBack)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, Frame_1CanGoBack_FUNC);
+	rc = (jboolean)((Frame^)TO_OBJECT(arg0))->CanGoBack;
+	OS_NATIVE_EXIT(env, that, Frame_1CanGoBack_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Frame_1CanGoForward
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(Frame_1CanGoForward)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(Frame_1CanGoForward)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, Frame_1CanGoForward_FUNC);
+	rc = (jboolean)((Frame^)TO_OBJECT(arg0))->CanGoForward;
+	OS_NATIVE_EXIT(env, that, Frame_1CanGoForward_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Frame_1CurrentSource
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Frame_1CurrentSource)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Frame_1CurrentSource)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Frame_1CurrentSource_FUNC);
+	rc = (jint)TO_HANDLE(((Frame^)TO_OBJECT(arg0))->CurrentSource);
+	OS_NATIVE_EXIT(env, that, Frame_1CurrentSource_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Frame_1GoBack
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Frame_1GoBack)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(Frame_1GoBack)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, Frame_1GoBack_FUNC);
+	((Frame^)TO_OBJECT(arg0))->GoBack();
+	OS_NATIVE_EXIT(env, that, Frame_1GoBack_FUNC);
+}
+#endif
+
+#ifndef NO_Frame_1GoForward
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Frame_1GoForward)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(Frame_1GoForward)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, Frame_1GoForward_FUNC);
+	((Frame^)TO_OBJECT(arg0))->GoForward();
+	OS_NATIVE_EXIT(env, that, Frame_1GoForward_FUNC);
+}
+#endif
+
+#ifndef NO_Frame_1Navigate
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(Frame_1Navigate)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jboolean JNICALL OS_NATIVE(Frame_1Navigate)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, Frame_1Navigate_FUNC);
+	rc = (jboolean)((Frame^)TO_OBJECT(arg0))->Navigate((Uri^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Frame_1Navigate_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Frame_1NavigationUIVisibility
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Frame_1NavigationUIVisibility)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Frame_1NavigationUIVisibility)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Frame_1NavigationUIVisibility_FUNC);
+	((Frame^)TO_OBJECT(arg0))->NavigationUIVisibility = ((System::Windows::Navigation::NavigationUIVisibility)arg1);
+	OS_NATIVE_EXIT(env, that, Frame_1NavigationUIVisibility_FUNC);
+}
+#endif
+
+#ifndef NO_Frame_1Refresh
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Frame_1Refresh)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(Frame_1Refresh)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, Frame_1Refresh_FUNC);
+	((Frame^)TO_OBJECT(arg0))->Refresh();
+	OS_NATIVE_EXIT(env, that, Frame_1Refresh_FUNC);
+}
+#endif
+
+#ifndef NO_Frame_1Source__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Frame_1Source__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Frame_1Source__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Frame_1Source__I_FUNC);
+	rc = (jint)TO_HANDLE(((Frame^)TO_OBJECT(arg0))->Source);
+	OS_NATIVE_EXIT(env, that, Frame_1Source__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Frame_1Source__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Frame_1Source__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Frame_1Source__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Frame_1Source__II_FUNC);
+	((Frame^)TO_OBJECT(arg0))->Source = ((Uri^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Frame_1Source__II_FUNC);
+}
+#endif
+
+#ifndef NO_Frame_1StopLoading
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Frame_1StopLoading)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(Frame_1StopLoading)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, Frame_1StopLoading_FUNC);
+	((Frame^)TO_OBJECT(arg0))->StopLoading();
+	OS_NATIVE_EXIT(env, that, Frame_1StopLoading_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkContentElement_1Parent
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkContentElement_1Parent)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkContentElement_1Parent)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkContentElement_1Parent_FUNC);
+	rc = (jint)TO_HANDLE(((FrameworkContentElement^)TO_OBJECT(arg0))->Parent);
+	OS_NATIVE_EXIT(env, that, FrameworkContentElement_1Parent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkContentElement_1Tag__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkContentElement_1Tag__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkContentElement_1Tag__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkContentElement_1Tag__I_FUNC);
+	rc = (jint)((FrameworkContentElement^)TO_OBJECT(arg0))->Tag;
+	OS_NATIVE_EXIT(env, that, FrameworkContentElement_1Tag__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkContentElement_1Tag__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkContentElement_1Tag__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkContentElement_1Tag__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkContentElement_1Tag__II_FUNC);
+	((FrameworkContentElement^)TO_OBJECT(arg0))->Tag = (arg1);
+	OS_NATIVE_EXIT(env, that, FrameworkContentElement_1Tag__II_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkContentElement_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkContentElement_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkContentElement_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkContentElement_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(FrameworkContentElement::typeid);
+	OS_NATIVE_EXIT(env, that, FrameworkContentElement_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElementFactory_1AppendChild
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElementFactory_1AppendChild)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElementFactory_1AppendChild)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElementFactory_1AppendChild_FUNC);
+	((FrameworkElementFactory^)TO_OBJECT(arg0))->AppendChild((FrameworkElementFactory^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FrameworkElementFactory_1AppendChild_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElementFactory_1SetBinding
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElementFactory_1SetBinding)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElementFactory_1SetBinding)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElementFactory_1SetBinding_FUNC);
+	((FrameworkElementFactory^)TO_OBJECT(arg0))->SetBinding((DependencyProperty^)TO_OBJECT(arg1), (BindingBase^)TO_OBJECT(arg2));
+	OS_NATIVE_EXIT(env, that, FrameworkElementFactory_1SetBinding_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElementFactory_1SetValue__III
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElementFactory_1SetValue__III)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElementFactory_1SetValue__III)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElementFactory_1SetValue__III_FUNC);
+	((FrameworkElementFactory^)TO_OBJECT(arg0))->SetValue((DependencyProperty^)TO_OBJECT(arg1), (Object^)TO_OBJECT(arg2));
+	OS_NATIVE_EXIT(env, that, FrameworkElementFactory_1SetValue__III_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElementFactory_1SetValue__IIZ
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElementFactory_1SetValue__IIZ)(JNIEnv *env, jclass that, jint arg0, jint arg1, jboolean arg2);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElementFactory_1SetValue__IIZ)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jboolean arg2)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElementFactory_1SetValue__IIZ_FUNC);
+	((FrameworkElementFactory^)TO_OBJECT(arg0))->SetValue((DependencyProperty^)TO_OBJECT(arg1), (Boolean)arg2);
+	OS_NATIVE_EXIT(env, that, FrameworkElementFactory_1SetValue__IIZ_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElementFactory_1SetValueDock
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElementFactory_1SetValueDock)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElementFactory_1SetValueDock)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElementFactory_1SetValueDock_FUNC);
+	((FrameworkElementFactory^)TO_OBJECT(arg0))->SetValue((DependencyProperty^)TO_OBJECT(arg1), (Dock)arg2);
+	OS_NATIVE_EXIT(env, that, FrameworkElementFactory_1SetValueDock_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElementFactory_1SetValueInt
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElementFactory_1SetValueInt)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElementFactory_1SetValueInt)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElementFactory_1SetValueInt_FUNC);
+	((FrameworkElementFactory^)TO_OBJECT(arg0))->SetValue((DependencyProperty^)TO_OBJECT(arg1), arg2);
+	OS_NATIVE_EXIT(env, that, FrameworkElementFactory_1SetValueInt_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElementFactory_1SetValueOrientation
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElementFactory_1SetValueOrientation)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElementFactory_1SetValueOrientation)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElementFactory_1SetValueOrientation_FUNC);
+	((FrameworkElementFactory^)TO_OBJECT(arg0))->SetValue((DependencyProperty^)TO_OBJECT(arg1), (Orientation)arg2);
+	OS_NATIVE_EXIT(env, that, FrameworkElementFactory_1SetValueOrientation_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElementFactory_1SetValueStretch
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElementFactory_1SetValueStretch)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElementFactory_1SetValueStretch)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElementFactory_1SetValueStretch_FUNC);
+	((FrameworkElementFactory^)TO_OBJECT(arg0))->SetValue((DependencyProperty^)TO_OBJECT(arg1), (Stretch)arg2);
+	OS_NATIVE_EXIT(env, that, FrameworkElementFactory_1SetValueStretch_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElementFactory_1SetValueVerticalAlignment
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElementFactory_1SetValueVerticalAlignment)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElementFactory_1SetValueVerticalAlignment)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElementFactory_1SetValueVerticalAlignment_FUNC);
+	((FrameworkElementFactory^)TO_OBJECT(arg0))->SetValue((DependencyProperty^)TO_OBJECT(arg1), (VerticalAlignment)arg2);
+	OS_NATIVE_EXIT(env, that, FrameworkElementFactory_1SetValueVerticalAlignment_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElementFactory_1SetValueVisibility
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElementFactory_1SetValueVisibility)(JNIEnv *env, jclass that, jint arg0, jint arg1, jbyte arg2);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElementFactory_1SetValueVisibility)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jbyte arg2)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElementFactory_1SetValueVisibility_FUNC);
+	((FrameworkElementFactory^)TO_OBJECT(arg0))->SetValue((DependencyProperty^)TO_OBJECT(arg1), (Visibility)arg2);
+	OS_NATIVE_EXIT(env, that, FrameworkElementFactory_1SetValueVisibility_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1ActualHeight
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(FrameworkElement_1ActualHeight)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(FrameworkElement_1ActualHeight)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1ActualHeight_FUNC);
+	rc = (jdouble)((FrameworkElement^)TO_OBJECT(arg0))->ActualHeight;
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1ActualHeight_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1ActualHeightProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1ActualHeightProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1ActualHeightProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1ActualHeightProperty_FUNC);
+	rc = (jint)TO_HANDLE(FrameworkElement::ActualHeightProperty);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1ActualHeightProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1ActualWidth
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(FrameworkElement_1ActualWidth)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(FrameworkElement_1ActualWidth)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1ActualWidth_FUNC);
+	rc = (jdouble)((FrameworkElement^)TO_OBJECT(arg0))->ActualWidth;
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1ActualWidth_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1ActualWidthProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1ActualWidthProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1ActualWidthProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1ActualWidthProperty_FUNC);
+	rc = (jint)TO_HANDLE(FrameworkElement::ActualWidthProperty);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1ActualWidthProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1BeginInit
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1BeginInit)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1BeginInit)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1BeginInit_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->BeginInit();
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1BeginInit_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1BringIntoView
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1BringIntoView)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1BringIntoView)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1BringIntoView_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->BringIntoView();
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1BringIntoView_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1ContextMenu
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1ContextMenu)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1ContextMenu)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1ContextMenu_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->ContextMenu = ((ContextMenu^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1ContextMenu_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1ContextMenuClosing
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1ContextMenuClosing)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1ContextMenuClosing)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1ContextMenuClosing_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->ContextMenuClosing += ((ContextMenuEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1ContextMenuClosing_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1ContextMenuOpening
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1ContextMenuOpening)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1ContextMenuOpening)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1ContextMenuOpening_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->ContextMenuOpening += ((ContextMenuEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1ContextMenuOpening_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1Cursor
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1Cursor)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1Cursor)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1Cursor_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->Cursor = ((Cursor^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1Cursor_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1CursorProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1CursorProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1CursorProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1CursorProperty_FUNC);
+	rc = (jint)TO_HANDLE(FrameworkElement::CursorProperty);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1CursorProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1FindResource
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1FindResource)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1FindResource)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1FindResource_FUNC);
+	rc = (jint)TO_HANDLE(((FrameworkElement^)TO_OBJECT(arg0))->FindResource((Object^)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1FindResource_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1FlowDirection__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1FlowDirection__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1FlowDirection__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1FlowDirection__I_FUNC);
+	rc = (jint)((FrameworkElement^)TO_OBJECT(arg0))->FlowDirection;
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1FlowDirection__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1FlowDirection__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1FlowDirection__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1FlowDirection__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1FlowDirection__II_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->FlowDirection = ((FlowDirection)arg1);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1FlowDirection__II_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1FocusVisualStyle
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1FocusVisualStyle)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1FocusVisualStyle)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1FocusVisualStyle_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->FocusVisualStyle = ((Style^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1FocusVisualStyle_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1GetBindingExpression
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1GetBindingExpression)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1GetBindingExpression)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1GetBindingExpression_FUNC);
+	rc = (jint)TO_HANDLE(((FrameworkElement^)TO_OBJECT(arg0))->GetBindingExpression((DependencyProperty^)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1GetBindingExpression_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1Height__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(FrameworkElement_1Height__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(FrameworkElement_1Height__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1Height__I_FUNC);
+	rc = (jdouble)((FrameworkElement^)TO_OBJECT(arg0))->Height;
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1Height__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1Height__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1Height__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1Height__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1Height__ID_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->Height = (arg1);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1Height__ID_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1HeightProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1HeightProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1HeightProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1HeightProperty_FUNC);
+	rc = (jint)TO_HANDLE(FrameworkElement::HeightProperty);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1HeightProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1HorizontalAlignment
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1HorizontalAlignment)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1HorizontalAlignment)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1HorizontalAlignment_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->HorizontalAlignment = ((HorizontalAlignment)arg1);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1HorizontalAlignment_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1IsLoaded
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(FrameworkElement_1IsLoaded)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(FrameworkElement_1IsLoaded)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1IsLoaded_FUNC);
+	rc = (jboolean)((FrameworkElement^)TO_OBJECT(arg0))->IsLoaded;
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1IsLoaded_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1LayoutTransform
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1LayoutTransform)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1LayoutTransform)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1LayoutTransform_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->LayoutTransform = ((Transform^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1LayoutTransform_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1Loaded
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1Loaded)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1Loaded)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1Loaded_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->Loaded += ((RoutedEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1Loaded_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1Margin__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1Margin__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1Margin__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1Margin__I_FUNC);
+	rc = (jint)TO_HANDLE(((FrameworkElement^)TO_OBJECT(arg0))->Margin);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1Margin__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1Margin__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1Margin__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1Margin__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1Margin__II_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->Margin = ((Thickness)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1Margin__II_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1MarginProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1MarginProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1MarginProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1MarginProperty_FUNC);
+	rc = (jint)TO_HANDLE(FrameworkElement::MarginProperty);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1MarginProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1MaxHeight__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(FrameworkElement_1MaxHeight__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(FrameworkElement_1MaxHeight__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1MaxHeight__I_FUNC);
+	rc = (jdouble)((FrameworkElement^)TO_OBJECT(arg0))->MaxHeight;
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1MaxHeight__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1MaxHeight__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1MaxHeight__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1MaxHeight__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1MaxHeight__ID_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->MaxHeight = (arg1);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1MaxHeight__ID_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1MaxWidth__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(FrameworkElement_1MaxWidth__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(FrameworkElement_1MaxWidth__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1MaxWidth__I_FUNC);
+	rc = (jdouble)((FrameworkElement^)TO_OBJECT(arg0))->MaxWidth;
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1MaxWidth__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1MaxWidth__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1MaxWidth__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1MaxWidth__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1MaxWidth__ID_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->MaxWidth = (arg1);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1MaxWidth__ID_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1MinHeight__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(FrameworkElement_1MinHeight__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(FrameworkElement_1MinHeight__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1MinHeight__I_FUNC);
+	rc = (jdouble)((FrameworkElement^)TO_OBJECT(arg0))->MinHeight;
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1MinHeight__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1MinHeight__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1MinHeight__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1MinHeight__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1MinHeight__ID_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->MinHeight = (arg1);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1MinHeight__ID_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1MinWidth__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(FrameworkElement_1MinWidth__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(FrameworkElement_1MinWidth__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1MinWidth__I_FUNC);
+	rc = (jdouble)((FrameworkElement^)TO_OBJECT(arg0))->MinWidth;
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1MinWidth__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1MinWidth__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1MinWidth__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1MinWidth__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1MinWidth__ID_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->MinWidth = (arg1);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1MinWidth__ID_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1Name
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1Name)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1Name)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1Name_FUNC);
+	rc = (jint)TO_HANDLE(((FrameworkElement^)TO_OBJECT(arg0))->Name);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1Name_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1NameProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1NameProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1NameProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1NameProperty_FUNC);
+	rc = (jint)TO_HANDLE(FrameworkElement::NameProperty);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1NameProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1Parent
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1Parent)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1Parent)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1Parent_FUNC);
+	rc = (jint)TO_HANDLE(((FrameworkElement^)TO_OBJECT(arg0))->Parent);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1Parent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1RegisterName
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1RegisterName)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1RegisterName)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1RegisterName_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->RegisterName((String^)TO_OBJECT(arg1), (Object^)TO_OBJECT(arg2));
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1RegisterName_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1RenderTransform__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1RenderTransform__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1RenderTransform__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1RenderTransform__I_FUNC);
+	rc = (jint)TO_HANDLE(((FrameworkElement^)TO_OBJECT(arg0))->RenderTransform);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1RenderTransform__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1RenderTransform__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1RenderTransform__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1RenderTransform__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1RenderTransform__II_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->RenderTransform = ((Transform^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1RenderTransform__II_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1Resources__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1Resources__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1Resources__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1Resources__I_FUNC);
+	rc = (jint)TO_HANDLE(((FrameworkElement^)TO_OBJECT(arg0))->Resources);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1Resources__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1Resources__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1Resources__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1Resources__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1Resources__II_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->Resources = ((ResourceDictionary^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1Resources__II_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1SizeChanged
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1SizeChanged)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1SizeChanged)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1SizeChanged_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->SizeChanged += ((SizeChangedEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1SizeChanged_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1SizeChangedEvent
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1SizeChangedEvent)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1SizeChangedEvent)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1SizeChangedEvent_FUNC);
+	rc = (jint)TO_HANDLE(FrameworkElement::SizeChangedEvent);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1SizeChangedEvent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1Style__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1Style__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1Style__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1Style__I_FUNC);
+	rc = (jint)TO_HANDLE(((FrameworkElement^)TO_OBJECT(arg0))->Style);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1Style__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1Style__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1Style__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1Style__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1Style__II_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->Style = ((Style^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1Style__II_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1StyleProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1StyleProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1StyleProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1StyleProperty_FUNC);
+	rc = (jint)TO_HANDLE(FrameworkElement::StyleProperty);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1StyleProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1Tag__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1Tag__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1Tag__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1Tag__I_FUNC);
+	rc = (jint)TO_HANDLE(((FrameworkElement^)TO_OBJECT(arg0))->Tag);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1Tag__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1Tag__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1Tag__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1Tag__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1Tag__II_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->Tag = ((Object^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1Tag__II_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1TagProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1TagProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1TagProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1TagProperty_FUNC);
+	rc = (jint)TO_HANDLE(FrameworkElement::TagProperty);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1TagProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1ToolTip__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1ToolTip__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1ToolTip__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1ToolTip__I_FUNC);
+	rc = (jint)TO_HANDLE(((FrameworkElement^)TO_OBJECT(arg0))->ToolTip);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1ToolTip__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1ToolTip__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1ToolTip__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1ToolTip__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1ToolTip__II_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->ToolTip = ((Object^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1ToolTip__II_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1VerticalAlignment
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1VerticalAlignment)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1VerticalAlignment)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1VerticalAlignment_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->VerticalAlignment = ((VerticalAlignment)arg1);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1VerticalAlignment_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1VerticalAlignmentProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1VerticalAlignmentProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1VerticalAlignmentProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1VerticalAlignmentProperty_FUNC);
+	rc = (jint)TO_HANDLE(FrameworkElement::VerticalAlignmentProperty);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1VerticalAlignmentProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1Width__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(FrameworkElement_1Width__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(FrameworkElement_1Width__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1Width__I_FUNC);
+	rc = (jdouble)((FrameworkElement^)TO_OBJECT(arg0))->Width;
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1Width__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1Width__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1Width__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkElement_1Width__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1Width__ID_FUNC);
+	((FrameworkElement^)TO_OBJECT(arg0))->Width = (arg1);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1Width__ID_FUNC);
+}
+#endif
+
+#ifndef NO_FrameworkElement_1WidthProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1WidthProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1WidthProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1WidthProperty_FUNC);
+	rc = (jint)TO_HANDLE(FrameworkElement::WidthProperty);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1WidthProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkElement_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkElement_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkElement_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(FrameworkElement::typeid);
+	OS_NATIVE_EXIT(env, that, FrameworkElement_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkTemplate_1FindName
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(FrameworkTemplate_1FindName)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT jint JNICALL OS_NATIVE(FrameworkTemplate_1FindName)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, FrameworkTemplate_1FindName_FUNC);
+	rc = (jint)TO_HANDLE(((FrameworkTemplate^)TO_OBJECT(arg0))->FindName((String^)TO_OBJECT(arg1), (FrameworkElement^)TO_OBJECT(arg2)));
+	OS_NATIVE_EXIT(env, that, FrameworkTemplate_1FindName_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_FrameworkTemplate_1VisualTree
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(FrameworkTemplate_1VisualTree)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(FrameworkTemplate_1VisualTree)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, FrameworkTemplate_1VisualTree_FUNC);
+	((FrameworkTemplate^)TO_OBJECT(arg0))->VisualTree = ((FrameworkElementFactory^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, FrameworkTemplate_1VisualTree_FUNC);
+}
+#endif
+
+#ifndef NO_Freezable_1CanFreeze
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(Freezable_1CanFreeze)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(Freezable_1CanFreeze)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, Freezable_1CanFreeze_FUNC);
+	rc = (jboolean)((Freezable^)TO_OBJECT(arg0))->CanFreeze;
+	OS_NATIVE_EXIT(env, that, Freezable_1CanFreeze_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Freezable_1Clone
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Freezable_1Clone)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Freezable_1Clone)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Freezable_1Clone_FUNC);
+	rc = (jint)TO_HANDLE(((Freezable^)TO_OBJECT(arg0))->Clone());
+	OS_NATIVE_EXIT(env, that, Freezable_1Clone_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Freezable_1Freeze
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Freezable_1Freeze)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(Freezable_1Freeze)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, Freezable_1Freeze_FUNC);
+	((Freezable^)TO_OBJECT(arg0))->Freeze();
+	OS_NATIVE_EXIT(env, that, Freezable_1Freeze_FUNC);
+}
+#endif
+
+#ifndef NO_GeometryCollection_1Add
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(GeometryCollection_1Add)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(GeometryCollection_1Add)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, GeometryCollection_1Add_FUNC);
+	((GeometryCollection^)TO_OBJECT(arg0))->Add((Geometry^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, GeometryCollection_1Add_FUNC);
+}
+#endif
+
+#ifndef NO_GeometryCollection_1Clear
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(GeometryCollection_1Clear)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(GeometryCollection_1Clear)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, GeometryCollection_1Clear_FUNC);
+	((GeometryCollection^)TO_OBJECT(arg0))->Clear();
+	OS_NATIVE_EXIT(env, that, GeometryCollection_1Clear_FUNC);
+}
+#endif
+
+#ifndef NO_GeometryCollection_1Count
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(GeometryCollection_1Count)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(GeometryCollection_1Count)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GeometryCollection_1Count_FUNC);
+	rc = (jint)((GeometryCollection^)TO_OBJECT(arg0))->Count;
+	OS_NATIVE_EXIT(env, that, GeometryCollection_1Count_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GeometryCollection_1Remove
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(GeometryCollection_1Remove)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(GeometryCollection_1Remove)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, GeometryCollection_1Remove_FUNC);
+	((GeometryCollection^)TO_OBJECT(arg0))->Remove((Geometry^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, GeometryCollection_1Remove_FUNC);
+}
+#endif
+
+#ifndef NO_GeometryGroup_1Children__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(GeometryGroup_1Children__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(GeometryGroup_1Children__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GeometryGroup_1Children__I_FUNC);
+	rc = (jint)TO_HANDLE(((GeometryGroup^)TO_OBJECT(arg0))->Children);
+	OS_NATIVE_EXIT(env, that, GeometryGroup_1Children__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GeometryGroup_1Children__II
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(GeometryGroup_1Children__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(GeometryGroup_1Children__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GeometryGroup_1Children__II_FUNC);
+	rc = (jint)TO_HANDLE(((GeometryGroup^)TO_OBJECT(arg0))->Children[arg1]);
+	OS_NATIVE_EXIT(env, that, GeometryGroup_1Children__II_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Geometry_1Bounds
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Geometry_1Bounds)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Geometry_1Bounds)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Geometry_1Bounds_FUNC);
+	rc = (jint)TO_HANDLE(((Geometry^)TO_OBJECT(arg0))->Bounds);
+	OS_NATIVE_EXIT(env, that, Geometry_1Bounds_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Geometry_1Clone
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Geometry_1Clone)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Geometry_1Clone)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Geometry_1Clone_FUNC);
+	rc = (jint)TO_HANDLE(((Geometry^)TO_OBJECT(arg0))->Clone());
+	OS_NATIVE_EXIT(env, that, Geometry_1Clone_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Geometry_1FillContains
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(Geometry_1FillContains)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jboolean JNICALL OS_NATIVE(Geometry_1FillContains)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, Geometry_1FillContains_FUNC);
+	rc = (jboolean)((Geometry^)TO_OBJECT(arg0))->FillContains((Point)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Geometry_1FillContains_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Geometry_1FillContainsWithDetail
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Geometry_1FillContainsWithDetail)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(Geometry_1FillContainsWithDetail)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Geometry_1FillContainsWithDetail_FUNC);
+	rc = (jint)((Geometry^)TO_OBJECT(arg0))->FillContainsWithDetail((Geometry^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Geometry_1FillContainsWithDetail_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Geometry_1GetFlattenedPathGeometry__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Geometry_1GetFlattenedPathGeometry__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Geometry_1GetFlattenedPathGeometry__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Geometry_1GetFlattenedPathGeometry__I_FUNC);
+	rc = (jint)TO_HANDLE(((Geometry^)TO_OBJECT(arg0))->GetFlattenedPathGeometry());
+	OS_NATIVE_EXIT(env, that, Geometry_1GetFlattenedPathGeometry__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Geometry_1GetFlattenedPathGeometry__IDI
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Geometry_1GetFlattenedPathGeometry__IDI)(JNIEnv *env, jclass that, jint arg0, jdouble arg1, jint arg2);
+JNIEXPORT jint JNICALL OS_NATIVE(Geometry_1GetFlattenedPathGeometry__IDI)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1, jint arg2)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Geometry_1GetFlattenedPathGeometry__IDI_FUNC);
+	rc = (jint)TO_HANDLE(((Geometry^)TO_OBJECT(arg0))->GetFlattenedPathGeometry(arg1, (ToleranceType)arg2));
+	OS_NATIVE_EXIT(env, that, Geometry_1GetFlattenedPathGeometry__IDI_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Geometry_1IsEmpty
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(Geometry_1IsEmpty)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(Geometry_1IsEmpty)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, Geometry_1IsEmpty_FUNC);
+	rc = (jboolean)((Geometry^)TO_OBJECT(arg0))->IsEmpty();
+	OS_NATIVE_EXIT(env, that, Geometry_1IsEmpty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Geometry_1StrokeContains
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(Geometry_1StrokeContains)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT jboolean JNICALL OS_NATIVE(Geometry_1StrokeContains)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, Geometry_1StrokeContains_FUNC);
+	rc = (jboolean)((Geometry^)TO_OBJECT(arg0))->StrokeContains((Pen^)TO_OBJECT(arg1), (Point)TO_OBJECT(arg2));
+	OS_NATIVE_EXIT(env, that, Geometry_1StrokeContains_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Geometry_1Transform__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Geometry_1Transform__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Geometry_1Transform__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Geometry_1Transform__I_FUNC);
+	rc = (jint)TO_HANDLE(((Geometry^)TO_OBJECT(arg0))->Transform);
+	OS_NATIVE_EXIT(env, that, Geometry_1Transform__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Geometry_1Transform__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Geometry_1Transform__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Geometry_1Transform__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Geometry_1Transform__II_FUNC);
+	((Geometry^)TO_OBJECT(arg0))->Transform = ((Transform^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Geometry_1Transform__II_FUNC);
+}
+#endif
+
+#ifndef NO_GiveFeedbackEventArgs_1Effects
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(GiveFeedbackEventArgs_1Effects)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(GiveFeedbackEventArgs_1Effects)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GiveFeedbackEventArgs_1Effects_FUNC);
+	rc = (jint)((GiveFeedbackEventArgs^)TO_OBJECT(arg0))->Effects;
+	OS_NATIVE_EXIT(env, that, GiveFeedbackEventArgs_1Effects_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GlyphRun_1BidiLevel
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(GlyphRun_1BidiLevel)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(GlyphRun_1BidiLevel)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GlyphRun_1BidiLevel_FUNC);
+	rc = (jint)((GlyphRun^)TO_OBJECT(arg0))->BidiLevel;
+	OS_NATIVE_EXIT(env, that, GlyphRun_1BidiLevel_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GradientBrush_1MappingMode
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(GradientBrush_1MappingMode)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(GradientBrush_1MappingMode)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, GradientBrush_1MappingMode_FUNC);
+	((GradientBrush^)TO_OBJECT(arg0))->MappingMode = ((BrushMappingMode)arg1);
+	OS_NATIVE_EXIT(env, that, GradientBrush_1MappingMode_FUNC);
+}
+#endif
+
+#ifndef NO_GradientBrush_1SpreadMethod
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(GradientBrush_1SpreadMethod)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(GradientBrush_1SpreadMethod)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, GradientBrush_1SpreadMethod_FUNC);
+	((GradientBrush^)TO_OBJECT(arg0))->SpreadMethod = ((GradientSpreadMethod)arg1);
+	OS_NATIVE_EXIT(env, that, GradientBrush_1SpreadMethod_FUNC);
+}
+#endif
+
+#ifndef NO_GridViewColumnCollection_1Clear
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(GridViewColumnCollection_1Clear)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(GridViewColumnCollection_1Clear)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, GridViewColumnCollection_1Clear_FUNC);
+	((GridViewColumnCollection^)TO_OBJECT(arg0))->Clear();
+	OS_NATIVE_EXIT(env, that, GridViewColumnCollection_1Clear_FUNC);
+}
+#endif
+
+#ifndef NO_GridViewColumnCollection_1Count
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(GridViewColumnCollection_1Count)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(GridViewColumnCollection_1Count)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GridViewColumnCollection_1Count_FUNC);
+	rc = (jint)((GridViewColumnCollection^)TO_OBJECT(arg0))->Count;
+	OS_NATIVE_EXIT(env, that, GridViewColumnCollection_1Count_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GridViewColumnCollection_1IndexOf
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(GridViewColumnCollection_1IndexOf)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(GridViewColumnCollection_1IndexOf)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GridViewColumnCollection_1IndexOf_FUNC);
+	rc = (jint)((GridViewColumnCollection ^)TO_OBJECT(arg0))->IndexOf((GridViewColumn^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, GridViewColumnCollection_1IndexOf_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GridViewColumnCollection_1Insert
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(GridViewColumnCollection_1Insert)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(GridViewColumnCollection_1Insert)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, GridViewColumnCollection_1Insert_FUNC);
+	((GridViewColumnCollection^)TO_OBJECT(arg0))->Insert(arg1, (GridViewColumn^)TO_OBJECT(arg2));
+	OS_NATIVE_EXIT(env, that, GridViewColumnCollection_1Insert_FUNC);
+}
+#endif
+
+#ifndef NO_GridViewColumnCollection_1Remove
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(GridViewColumnCollection_1Remove)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jboolean JNICALL OS_NATIVE(GridViewColumnCollection_1Remove)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, GridViewColumnCollection_1Remove_FUNC);
+	rc = (jboolean)((GridViewColumnCollection^)TO_OBJECT(arg0))->Remove((GridViewColumn^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, GridViewColumnCollection_1Remove_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GridViewColumnCollection_1default
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(GridViewColumnCollection_1default)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(GridViewColumnCollection_1default)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GridViewColumnCollection_1default_FUNC);
+	rc = (jint)TO_HANDLE(((GridViewColumnCollection^)TO_OBJECT(arg0))->default[arg1]);
+	OS_NATIVE_EXIT(env, that, GridViewColumnCollection_1default_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GridViewColumnHeader_1Content
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(GridViewColumnHeader_1Content)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(GridViewColumnHeader_1Content)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, GridViewColumnHeader_1Content_FUNC);
+	((GridViewColumnHeader^)TO_OBJECT(arg0))->Content = ((Object^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, GridViewColumnHeader_1Content_FUNC);
+}
+#endif
+
+#ifndef NO_GridViewColumn_1ActualWidth
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(GridViewColumn_1ActualWidth)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(GridViewColumn_1ActualWidth)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, GridViewColumn_1ActualWidth_FUNC);
+	rc = (jdouble)((GridViewColumn^)TO_OBJECT(arg0))->ActualWidth;
+	OS_NATIVE_EXIT(env, that, GridViewColumn_1ActualWidth_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GridViewColumn_1CellTemplate__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(GridViewColumn_1CellTemplate__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(GridViewColumn_1CellTemplate__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GridViewColumn_1CellTemplate__I_FUNC);
+	rc = (jint)TO_HANDLE(((GridViewColumn^)TO_OBJECT(arg0))->CellTemplate);
+	OS_NATIVE_EXIT(env, that, GridViewColumn_1CellTemplate__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GridViewColumn_1CellTemplate__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(GridViewColumn_1CellTemplate__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(GridViewColumn_1CellTemplate__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, GridViewColumn_1CellTemplate__II_FUNC);
+	((GridViewColumn^)TO_OBJECT(arg0))->CellTemplate = ((DataTemplate^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, GridViewColumn_1CellTemplate__II_FUNC);
+}
+#endif
+
+#ifndef NO_GridViewColumn_1Header__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(GridViewColumn_1Header__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(GridViewColumn_1Header__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GridViewColumn_1Header__I_FUNC);
+	rc = (jint)TO_HANDLE(((GridViewColumn^)TO_OBJECT(arg0))->Header);
+	OS_NATIVE_EXIT(env, that, GridViewColumn_1Header__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GridViewColumn_1Header__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(GridViewColumn_1Header__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(GridViewColumn_1Header__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, GridViewColumn_1Header__II_FUNC);
+	((GridViewColumn^)TO_OBJECT(arg0))->Header = ((Object^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, GridViewColumn_1Header__II_FUNC);
+}
+#endif
+
+#ifndef NO_GridViewColumn_1HeaderTemplate__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(GridViewColumn_1HeaderTemplate__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(GridViewColumn_1HeaderTemplate__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GridViewColumn_1HeaderTemplate__I_FUNC);
+	rc = (jint)TO_HANDLE(((GridViewColumn^)TO_OBJECT(arg0))->HeaderTemplate);
+	OS_NATIVE_EXIT(env, that, GridViewColumn_1HeaderTemplate__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GridViewColumn_1HeaderTemplate__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(GridViewColumn_1HeaderTemplate__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(GridViewColumn_1HeaderTemplate__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, GridViewColumn_1HeaderTemplate__II_FUNC);
+	((GridViewColumn^)TO_OBJECT(arg0))->HeaderTemplate = ((DataTemplate^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, GridViewColumn_1HeaderTemplate__II_FUNC);
+}
+#endif
+
+#ifndef NO_GridViewColumn_1Width__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(GridViewColumn_1Width__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(GridViewColumn_1Width__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, GridViewColumn_1Width__I_FUNC);
+	rc = (jdouble)((GridViewColumn^)TO_OBJECT(arg0))->Width;
+	OS_NATIVE_EXIT(env, that, GridViewColumn_1Width__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GridViewColumn_1Width__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(GridViewColumn_1Width__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(GridViewColumn_1Width__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, GridViewColumn_1Width__ID_FUNC);
+	((GridViewColumn^)TO_OBJECT(arg0))->Width = (arg1);
+	OS_NATIVE_EXIT(env, that, GridViewColumn_1Width__ID_FUNC);
+}
+#endif
+
+#ifndef NO_GridViewColumn_1WidthProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(GridViewColumn_1WidthProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(GridViewColumn_1WidthProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GridViewColumn_1WidthProperty_FUNC);
+	rc = (jint)TO_HANDLE(GridViewColumn::WidthProperty);
+	OS_NATIVE_EXIT(env, that, GridViewColumn_1WidthProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GridViewHeaderRowPresenter_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(GridViewHeaderRowPresenter_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(GridViewHeaderRowPresenter_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GridViewHeaderRowPresenter_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(GridViewHeaderRowPresenter::typeid);
+	OS_NATIVE_EXIT(env, that, GridViewHeaderRowPresenter_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GridViewRowPresenterBase_1Columns
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(GridViewRowPresenterBase_1Columns)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(GridViewRowPresenterBase_1Columns)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, GridViewRowPresenterBase_1Columns_FUNC);
+	((GridViewRowPresenterBase^)TO_OBJECT(arg0))->Columns = ((GridViewColumnCollection^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, GridViewRowPresenterBase_1Columns_FUNC);
+}
+#endif
+
+#ifndef NO_GridViewRowPresenterBase_1ColumnsProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(GridViewRowPresenterBase_1ColumnsProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(GridViewRowPresenterBase_1ColumnsProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GridViewRowPresenterBase_1ColumnsProperty_FUNC);
+	rc = (jint)TO_HANDLE(GridViewRowPresenterBase::ColumnsProperty);
+	OS_NATIVE_EXIT(env, that, GridViewRowPresenterBase_1ColumnsProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GridViewRowPresenter_1Content__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(GridViewRowPresenter_1Content__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(GridViewRowPresenter_1Content__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GridViewRowPresenter_1Content__I_FUNC);
+	rc = (jint)TO_HANDLE(((GridViewRowPresenter^)TO_OBJECT(arg0))->Content);
+	OS_NATIVE_EXIT(env, that, GridViewRowPresenter_1Content__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GridViewRowPresenter_1Content__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(GridViewRowPresenter_1Content__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(GridViewRowPresenter_1Content__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, GridViewRowPresenter_1Content__II_FUNC);
+	((GridViewRowPresenter^)TO_OBJECT(arg0))->Content = ((Object^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, GridViewRowPresenter_1Content__II_FUNC);
+}
+#endif
+
+#ifndef NO_GridViewRowPresenter_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(GridViewRowPresenter_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(GridViewRowPresenter_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GridViewRowPresenter_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(GridViewRowPresenter::typeid);
+	OS_NATIVE_EXIT(env, that, GridViewRowPresenter_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GridView_1AllowsColumnReorder
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(GridView_1AllowsColumnReorder)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(GridView_1AllowsColumnReorder)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, GridView_1AllowsColumnReorder_FUNC);
+	((GridView^)TO_OBJECT(arg0))->AllowsColumnReorder = (arg1);
+	OS_NATIVE_EXIT(env, that, GridView_1AllowsColumnReorder_FUNC);
+}
+#endif
+
+#ifndef NO_GridView_1ColumnHeaderContainerStyle
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(GridView_1ColumnHeaderContainerStyle)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(GridView_1ColumnHeaderContainerStyle)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, GridView_1ColumnHeaderContainerStyle_FUNC);
+	((GridView^)TO_OBJECT(arg0))->ColumnHeaderContainerStyle = ((Style^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, GridView_1ColumnHeaderContainerStyle_FUNC);
+}
+#endif
+
+#ifndef NO_GridView_1Columns
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(GridView_1Columns)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(GridView_1Columns)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GridView_1Columns_FUNC);
+	rc = (jint)TO_HANDLE(((GridView^)TO_OBJECT(arg0))->Columns);
+	OS_NATIVE_EXIT(env, that, GridView_1Columns_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Grid_1ColumnDefinitions
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Grid_1ColumnDefinitions)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Grid_1ColumnDefinitions)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Grid_1ColumnDefinitions_FUNC);
+	rc = (jint)TO_HANDLE(((Grid^)TO_OBJECT(arg0))->ColumnDefinitions);
+	OS_NATIVE_EXIT(env, that, Grid_1ColumnDefinitions_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Grid_1RowDefinitions
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Grid_1RowDefinitions)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Grid_1RowDefinitions)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Grid_1RowDefinitions_FUNC);
+	rc = (jint)TO_HANDLE(((Grid^)TO_OBJECT(arg0))->RowDefinitions);
+	OS_NATIVE_EXIT(env, that, Grid_1RowDefinitions_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Grid_1SetColumn
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Grid_1SetColumn)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Grid_1SetColumn)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Grid_1SetColumn_FUNC);
+	Grid::SetColumn((UIElement^)TO_OBJECT(arg0), arg1);
+	OS_NATIVE_EXIT(env, that, Grid_1SetColumn_FUNC);
+}
+#endif
+
+#ifndef NO_Grid_1SetColumnSpan
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Grid_1SetColumnSpan)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Grid_1SetColumnSpan)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Grid_1SetColumnSpan_FUNC);
+	Grid::SetColumnSpan((UIElement^)TO_OBJECT(arg0), arg1);
+	OS_NATIVE_EXIT(env, that, Grid_1SetColumnSpan_FUNC);
+}
+#endif
+
+#ifndef NO_Grid_1SetRow
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Grid_1SetRow)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Grid_1SetRow)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Grid_1SetRow_FUNC);
+	Grid::SetRow((UIElement^)TO_OBJECT(arg0), arg1);
+	OS_NATIVE_EXIT(env, that, Grid_1SetRow_FUNC);
+}
+#endif
+
+#ifndef NO_Grid_1SetRowSpan
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Grid_1SetRowSpan)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Grid_1SetRowSpan)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Grid_1SetRowSpan_FUNC);
+	Grid::SetRowSpan((UIElement^)TO_OBJECT(arg0), arg1);
+	OS_NATIVE_EXIT(env, that, Grid_1SetRowSpan_FUNC);
+}
+#endif
+
+#ifndef NO_HeaderedContentControl_1Header__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(HeaderedContentControl_1Header__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(HeaderedContentControl_1Header__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, HeaderedContentControl_1Header__I_FUNC);
+	rc = (jint)TO_HANDLE(((HeaderedContentControl^)TO_OBJECT(arg0))->Header);
+	OS_NATIVE_EXIT(env, that, HeaderedContentControl_1Header__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_HeaderedContentControl_1Header__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(HeaderedContentControl_1Header__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(HeaderedContentControl_1Header__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, HeaderedContentControl_1Header__II_FUNC);
+	((HeaderedContentControl^)TO_OBJECT(arg0))->Header = ((Object^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, HeaderedContentControl_1Header__II_FUNC);
+}
+#endif
+
+#ifndef NO_HeaderedItemsControl_1Header__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(HeaderedItemsControl_1Header__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(HeaderedItemsControl_1Header__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, HeaderedItemsControl_1Header__I_FUNC);
+	rc = (jint)TO_HANDLE(((HeaderedItemsControl^)TO_OBJECT(arg0))->Header);
+	OS_NATIVE_EXIT(env, that, HeaderedItemsControl_1Header__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_HeaderedItemsControl_1Header__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(HeaderedItemsControl_1Header__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(HeaderedItemsControl_1Header__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, HeaderedItemsControl_1Header__II_FUNC);
+	((HeaderedItemsControl^)TO_OBJECT(arg0))->Header = ((Object^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, HeaderedItemsControl_1Header__II_FUNC);
+}
+#endif
+
+#ifndef NO_HeaderedItemsControl_1HeaderTemplateProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(HeaderedItemsControl_1HeaderTemplateProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(HeaderedItemsControl_1HeaderTemplateProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, HeaderedItemsControl_1HeaderTemplateProperty_FUNC);
+	rc = (jint)TO_HANDLE(HeaderedItemsControl::HeaderTemplateProperty);
+	OS_NATIVE_EXIT(env, that, HeaderedItemsControl_1HeaderTemplateProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_HtmlDocument_1InvokeScript
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(HtmlDocument_1InvokeScript)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(HtmlDocument_1InvokeScript)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, HtmlDocument_1InvokeScript_FUNC);
+	rc = (jint)TO_HANDLE(((System::Windows::Forms::HtmlDocument^)TO_OBJECT(arg0))->InvokeScript((String^)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, HtmlDocument_1InvokeScript_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_HwndSource_1CompositionTarget
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(HwndSource_1CompositionTarget)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(HwndSource_1CompositionTarget)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, HwndSource_1CompositionTarget_FUNC);
+	rc = (jint)TO_HANDLE(((HwndSource^)TO_OBJECT(arg0))->CompositionTarget);
+	OS_NATIVE_EXIT(env, that, HwndSource_1CompositionTarget_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_HwndSource_1Handle
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(HwndSource_1Handle)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(HwndSource_1Handle)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, HwndSource_1Handle_FUNC);
+	rc = (jint)TO_HANDLE(((HwndSource^)TO_OBJECT(arg0))->Handle);
+	OS_NATIVE_EXIT(env, that, HwndSource_1Handle_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_HwndTarget_1BackgroundColor
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(HwndTarget_1BackgroundColor)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(HwndTarget_1BackgroundColor)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, HwndTarget_1BackgroundColor_FUNC);
+	((HwndTarget^)TO_OBJECT(arg0))->BackgroundColor = ((Color)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, HwndTarget_1BackgroundColor_FUNC);
+}
+#endif
+
+#ifndef NO_Hyperlink_1Click
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Hyperlink_1Click)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Hyperlink_1Click)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Hyperlink_1Click_FUNC);
+	((Hyperlink^)TO_OBJECT(arg0))->Click += ((RoutedEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Hyperlink_1Click_FUNC);
+}
+#endif
+
+#ifndef NO_ICollection_1Count
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ICollection_1Count)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ICollection_1Count)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ICollection_1Count_FUNC);
+	rc = (jint)((ICollection^)TO_OBJECT(arg0))->Count;
+	OS_NATIVE_EXIT(env, that, ICollection_1Count_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_IEnumerable_1GetEnumerator
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(IEnumerable_1GetEnumerator)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(IEnumerable_1GetEnumerator)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, IEnumerable_1GetEnumerator_FUNC);
+	rc = (jint)TO_HANDLE(((IEnumerable ^)TO_OBJECT(arg0))->GetEnumerator());
+	OS_NATIVE_EXIT(env, that, IEnumerable_1GetEnumerator_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_IEnumerator_1Current
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(IEnumerator_1Current)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(IEnumerator_1Current)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, IEnumerator_1Current_FUNC);
+	rc = (jint)TO_HANDLE(((IEnumerator^)TO_OBJECT(arg0))->Current);
+	OS_NATIVE_EXIT(env, that, IEnumerator_1Current_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_IEnumerator_1MoveNext
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(IEnumerator_1MoveNext)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(IEnumerator_1MoveNext)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, IEnumerator_1MoveNext_FUNC);
+	rc = (jboolean)((IEnumerator^)TO_OBJECT(arg0))->MoveNext();
+	OS_NATIVE_EXIT(env, that, IEnumerator_1MoveNext_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_IList_1Add
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(IList_1Add)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(IList_1Add)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, IList_1Add_FUNC);
+	((IList^)TO_OBJECT(arg0))->Add((Object^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, IList_1Add_FUNC);
+}
+#endif
+
+#ifndef NO_IList_1Clear
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(IList_1Clear)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(IList_1Clear)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, IList_1Clear_FUNC);
+	((IList^)TO_OBJECT(arg0))->Clear();
+	OS_NATIVE_EXIT(env, that, IList_1Clear_FUNC);
+}
+#endif
+
+#ifndef NO_IList_1GetEnumerator
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(IList_1GetEnumerator)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(IList_1GetEnumerator)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, IList_1GetEnumerator_FUNC);
+	rc = (jint)TO_HANDLE(((IList^)TO_OBJECT(arg0))->GetEnumerator());
+	OS_NATIVE_EXIT(env, that, IList_1GetEnumerator_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_IList_1IndexOf
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(IList_1IndexOf)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(IList_1IndexOf)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, IList_1IndexOf_FUNC);
+	rc = (jint)((IList^)TO_OBJECT(arg0))->IndexOf((Object^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, IList_1IndexOf_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_IList_1Insert
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(IList_1Insert)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(IList_1Insert)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, IList_1Insert_FUNC);
+	((IList^)TO_OBJECT(arg0))->Insert(arg1, (Object^)TO_OBJECT(arg2));
+	OS_NATIVE_EXIT(env, that, IList_1Insert_FUNC);
+}
+#endif
+
+#ifndef NO_IList_1Remove
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(IList_1Remove)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(IList_1Remove)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, IList_1Remove_FUNC);
+	((IList^)TO_OBJECT(arg0))->Remove((Object^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, IList_1Remove_FUNC);
+}
+#endif
+
+#ifndef NO_IList_1default
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(IList_1default)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(IList_1default)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, IList_1default_FUNC);
+	rc = (jint)TO_HANDLE(((IList^)TO_OBJECT(arg0))->default[arg1]);
+	OS_NATIVE_EXIT(env, that, IList_1default_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ImageSource_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ImageSource_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(ImageSource_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ImageSource_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(ImageSource::typeid);
+	OS_NATIVE_EXIT(env, that, ImageSource_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Image_1Source__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Image_1Source__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Image_1Source__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Image_1Source__I_FUNC);
+	rc = (jint)TO_HANDLE(((Image^)TO_OBJECT(arg0))->Source);
+	OS_NATIVE_EXIT(env, that, Image_1Source__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Image_1Source__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Image_1Source__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Image_1Source__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Image_1Source__II_FUNC);
+	((Image^)TO_OBJECT(arg0))->Source = ((ImageSource^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Image_1Source__II_FUNC);
+}
+#endif
+
+#ifndef NO_Image_1SourceProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Image_1SourceProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Image_1SourceProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Image_1SourceProperty_FUNC);
+	rc = (jint)TO_HANDLE(Image::SourceProperty);
+	OS_NATIVE_EXIT(env, that, Image_1SourceProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Image_1Stretch
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Image_1Stretch)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Image_1Stretch)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Image_1Stretch_FUNC);
+	((Image^)TO_OBJECT(arg0))->Stretch = ((Stretch)arg1);
+	OS_NATIVE_EXIT(env, that, Image_1Stretch_FUNC);
+}
+#endif
+
+#ifndef NO_Image_1StretchProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Image_1StretchProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Image_1StretchProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Image_1StretchProperty_FUNC);
+	rc = (jint)TO_HANDLE(Image::StretchProperty);
+	OS_NATIVE_EXIT(env, that, Image_1StretchProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Image_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Image_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Image_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Image_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(Image::typeid);
+	OS_NATIVE_EXIT(env, that, Image_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Imaging_1CreateBitmapSourceFromHIcon
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Imaging_1CreateBitmapSourceFromHIcon)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT jint JNICALL OS_NATIVE(Imaging_1CreateBitmapSourceFromHIcon)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Imaging_1CreateBitmapSourceFromHIcon_FUNC);
+	rc = (jint)TO_HANDLE(System::Windows::Interop::Imaging::CreateBitmapSourceFromHIcon((IntPtr)arg0, (Int32Rect)TO_OBJECT(arg1), (BitmapSizeOptions^)TO_OBJECT(arg2)));
+	OS_NATIVE_EXIT(env, that, Imaging_1CreateBitmapSourceFromHIcon_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_IndexedGlyphRunCollection_1Current
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(IndexedGlyphRunCollection_1Current)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(IndexedGlyphRunCollection_1Current)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, IndexedGlyphRunCollection_1Current_FUNC);
+	rc = (jint)TO_HANDLE(((IEnumerator^)TO_OBJECT(arg0))->Current);
+	OS_NATIVE_EXIT(env, that, IndexedGlyphRunCollection_1Current_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_IndexedGlyphRunCollection_1GetEnumerator
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(IndexedGlyphRunCollection_1GetEnumerator)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(IndexedGlyphRunCollection_1GetEnumerator)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, IndexedGlyphRunCollection_1GetEnumerator_FUNC);
+	rc = (jint)TO_HANDLE(((IEnumerable^)TO_OBJECT(arg0))->GetEnumerator());
+	OS_NATIVE_EXIT(env, that, IndexedGlyphRunCollection_1GetEnumerator_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_IndexedGlyphRun_1GlyphRun
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(IndexedGlyphRun_1GlyphRun)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(IndexedGlyphRun_1GlyphRun)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, IndexedGlyphRun_1GlyphRun_FUNC);
+	rc = (jint)TO_HANDLE(((IndexedGlyphRun^)TO_OBJECT(arg0))->GlyphRun);
+	OS_NATIVE_EXIT(env, that, IndexedGlyphRun_1GlyphRun_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_IndexedGlyphRun_1TextSourceCharacterIndex
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(IndexedGlyphRun_1TextSourceCharacterIndex)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(IndexedGlyphRun_1TextSourceCharacterIndex)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, IndexedGlyphRun_1TextSourceCharacterIndex_FUNC);
+	rc = (jint)((IndexedGlyphRun^)TO_OBJECT(arg0))->TextSourceCharacterIndex;
+	OS_NATIVE_EXIT(env, that, IndexedGlyphRun_1TextSourceCharacterIndex_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_IndexedGlyphRun_1TextSourceLength
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(IndexedGlyphRun_1TextSourceLength)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(IndexedGlyphRun_1TextSourceLength)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, IndexedGlyphRun_1TextSourceLength_FUNC);
+	rc = (jint)((IndexedGlyphRun^)TO_OBJECT(arg0))->TextSourceLength;
+	OS_NATIVE_EXIT(env, that, IndexedGlyphRun_1TextSourceLength_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_InlineCollection_1Add
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(InlineCollection_1Add)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(InlineCollection_1Add)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, InlineCollection_1Add_FUNC);
+	((InlineCollection^)TO_OBJECT(arg0))->Add((Inline^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, InlineCollection_1Add_FUNC);
+}
+#endif
+
+#ifndef NO_InlineCollection_1Clear
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(InlineCollection_1Clear)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(InlineCollection_1Clear)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, InlineCollection_1Clear_FUNC);
+	((InlineCollection^)TO_OBJECT(arg0))->Clear();
+	OS_NATIVE_EXIT(env, that, InlineCollection_1Clear_FUNC);
+}
+#endif
+
+#ifndef NO_InputEventArgs_1Timestamp
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(InputEventArgs_1Timestamp)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(InputEventArgs_1Timestamp)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, InputEventArgs_1Timestamp_FUNC);
+	rc = (jint)((InputEventArgs^)TO_OBJECT(arg0))->Timestamp;
+	OS_NATIVE_EXIT(env, that, InputEventArgs_1Timestamp_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Int32AnimationUsingKeyFrames_1KeyFrames
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Int32AnimationUsingKeyFrames_1KeyFrames)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Int32AnimationUsingKeyFrames_1KeyFrames)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Int32AnimationUsingKeyFrames_1KeyFrames_FUNC);
+	rc = (jint)TO_HANDLE(((Int32AnimationUsingKeyFrames^)TO_OBJECT(arg0))->KeyFrames);
+	OS_NATIVE_EXIT(env, that, Int32AnimationUsingKeyFrames_1KeyFrames_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Int32Animation_1From__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Int32Animation_1From__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Int32Animation_1From__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Int32Animation_1From__I_FUNC);
+	rc = (jint)((Int32Animation^)TO_OBJECT(arg0))->From;
+	OS_NATIVE_EXIT(env, that, Int32Animation_1From__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Int32Animation_1From__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Int32Animation_1From__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Int32Animation_1From__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Int32Animation_1From__II_FUNC);
+	((Int32Animation^)TO_OBJECT(arg0))->From = (arg1);
+	OS_NATIVE_EXIT(env, that, Int32Animation_1From__II_FUNC);
+}
+#endif
+
+#ifndef NO_Int32Animation_1To__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Int32Animation_1To__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Int32Animation_1To__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Int32Animation_1To__I_FUNC);
+	rc = (jint)((Int32Animation^)TO_OBJECT(arg0))->To;
+	OS_NATIVE_EXIT(env, that, Int32Animation_1To__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Int32Animation_1To__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Int32Animation_1To__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Int32Animation_1To__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Int32Animation_1To__II_FUNC);
+	((Int32Animation^)TO_OBJECT(arg0))->To = (arg1);
+	OS_NATIVE_EXIT(env, that, Int32Animation_1To__II_FUNC);
+}
+#endif
+
+#ifndef NO_Int32KeyFrame_1KeyTime
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Int32KeyFrame_1KeyTime)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Int32KeyFrame_1KeyTime)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Int32KeyFrame_1KeyTime_FUNC);
+	((Int32KeyFrame^)TO_OBJECT(arg0))->KeyTime = ((KeyTime)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Int32KeyFrame_1KeyTime_FUNC);
+}
+#endif
+
+#ifndef NO_Int32KeyFrame_1Value
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Int32KeyFrame_1Value)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Int32KeyFrame_1Value)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Int32KeyFrame_1Value_FUNC);
+	((Int32KeyFrame^)TO_OBJECT(arg0))->Value = (arg1);
+	OS_NATIVE_EXIT(env, that, Int32KeyFrame_1Value_FUNC);
+}
+#endif
+
+#ifndef NO_Int32Rect_1Empty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Int32Rect_1Empty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Int32Rect_1Empty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Int32Rect_1Empty_FUNC);
+	rc = (jint)TO_HANDLE(Int32Rect::Empty);
+	OS_NATIVE_EXIT(env, that, Int32Rect_1Empty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_IntPtr_1ToInt32
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(IntPtr_1ToInt32)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(IntPtr_1ToInt32)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, IntPtr_1ToInt32_FUNC);
+	rc = (jint)((IntPtr^)TO_OBJECT(arg0))->ToInt32();
+	OS_NATIVE_EXIT(env, that, IntPtr_1ToInt32_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ItemCollection_1Add
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ItemCollection_1Add)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ItemCollection_1Add)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ItemCollection_1Add_FUNC);
+	((ItemCollection^)TO_OBJECT(arg0))->Add((Object^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, ItemCollection_1Add_FUNC);
+}
+#endif
+
+#ifndef NO_ItemCollection_1Clear
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ItemCollection_1Clear)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(ItemCollection_1Clear)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, ItemCollection_1Clear_FUNC);
+	((ItemCollection^)TO_OBJECT(arg0))->Clear();
+	OS_NATIVE_EXIT(env, that, ItemCollection_1Clear_FUNC);
+}
+#endif
+
+#ifndef NO_ItemCollection_1Count
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ItemCollection_1Count)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ItemCollection_1Count)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ItemCollection_1Count_FUNC);
+	rc = (jint)((ItemCollection^)TO_OBJECT(arg0))->Count;
+	OS_NATIVE_EXIT(env, that, ItemCollection_1Count_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ItemCollection_1CurrentItem
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ItemCollection_1CurrentItem)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ItemCollection_1CurrentItem)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ItemCollection_1CurrentItem_FUNC);
+	rc = (jint)TO_HANDLE(((ItemCollection^)TO_OBJECT(arg0))->CurrentItem);
+	OS_NATIVE_EXIT(env, that, ItemCollection_1CurrentItem_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ItemCollection_1CurrentPosition
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ItemCollection_1CurrentPosition)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ItemCollection_1CurrentPosition)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ItemCollection_1CurrentPosition_FUNC);
+	rc = (jint)((ItemCollection^)TO_OBJECT(arg0))->CurrentPosition;
+	OS_NATIVE_EXIT(env, that, ItemCollection_1CurrentPosition_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ItemCollection_1GetItemAt
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ItemCollection_1GetItemAt)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(ItemCollection_1GetItemAt)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ItemCollection_1GetItemAt_FUNC);
+	rc = (jint)TO_HANDLE(((ItemCollection^)TO_OBJECT(arg0))->GetItemAt(arg1));
+	OS_NATIVE_EXIT(env, that, ItemCollection_1GetItemAt_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ItemCollection_1IndexOf
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ItemCollection_1IndexOf)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(ItemCollection_1IndexOf)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ItemCollection_1IndexOf_FUNC);
+	rc = (jint)((ItemCollection^)TO_OBJECT(arg0))->IndexOf((Object^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, ItemCollection_1IndexOf_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ItemCollection_1Insert
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ItemCollection_1Insert)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(ItemCollection_1Insert)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, ItemCollection_1Insert_FUNC);
+	((ItemCollection^)TO_OBJECT(arg0))->Insert(arg1, (Object^)TO_OBJECT(arg2));
+	OS_NATIVE_EXIT(env, that, ItemCollection_1Insert_FUNC);
+}
+#endif
+
+#ifndef NO_ItemCollection_1Remove
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ItemCollection_1Remove)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ItemCollection_1Remove)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ItemCollection_1Remove_FUNC);
+	((ItemCollection^)TO_OBJECT(arg0))->Remove((Object^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, ItemCollection_1Remove_FUNC);
+}
+#endif
+
+#ifndef NO_ItemCollection_1RemoveAt
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ItemCollection_1RemoveAt)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ItemCollection_1RemoveAt)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ItemCollection_1RemoveAt_FUNC);
+	((ItemCollection^)TO_OBJECT(arg0))->RemoveAt(arg1);
+	OS_NATIVE_EXIT(env, that, ItemCollection_1RemoveAt_FUNC);
+}
+#endif
+
+#ifndef NO_ItemsControl_1HasItems
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(ItemsControl_1HasItems)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(ItemsControl_1HasItems)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, ItemsControl_1HasItems_FUNC);
+	rc = (jboolean)((ItemsControl^)TO_OBJECT(arg0))->HasItems;
+	OS_NATIVE_EXIT(env, that, ItemsControl_1HasItems_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ItemsControl_1IsTextSearchEnabled
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ItemsControl_1IsTextSearchEnabled)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ItemsControl_1IsTextSearchEnabled)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, ItemsControl_1IsTextSearchEnabled_FUNC);
+	((ItemsControl^)TO_OBJECT(arg0))->IsTextSearchEnabled = (arg1);
+	OS_NATIVE_EXIT(env, that, ItemsControl_1IsTextSearchEnabled_FUNC);
+}
+#endif
+
+#ifndef NO_ItemsControl_1ItemTemplate__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ItemsControl_1ItemTemplate__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ItemsControl_1ItemTemplate__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ItemsControl_1ItemTemplate__I_FUNC);
+	rc = (jint)TO_HANDLE(((ItemsControl^)TO_OBJECT(arg0))->ItemTemplate);
+	OS_NATIVE_EXIT(env, that, ItemsControl_1ItemTemplate__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ItemsControl_1ItemTemplate__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ItemsControl_1ItemTemplate__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ItemsControl_1ItemTemplate__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ItemsControl_1ItemTemplate__II_FUNC);
+	((ItemsControl^)TO_OBJECT(arg0))->ItemTemplate = ((DataTemplate^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, ItemsControl_1ItemTemplate__II_FUNC);
+}
+#endif
+
+#ifndef NO_ItemsControl_1Items
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ItemsControl_1Items)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ItemsControl_1Items)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ItemsControl_1Items_FUNC);
+	rc = (jint)TO_HANDLE(((ItemsControl^)TO_OBJECT(arg0))->Items);
+	OS_NATIVE_EXIT(env, that, ItemsControl_1Items_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ItemsControl_1ItemsSource
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ItemsControl_1ItemsSource)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ItemsControl_1ItemsSource)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ItemsControl_1ItemsSource_FUNC);
+	((ItemsControl^)TO_OBJECT(arg0))->ItemsSource = ((IEnumerable^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, ItemsControl_1ItemsSource_FUNC);
+}
+#endif
+
+#ifndef NO_ItemsPresenter_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ItemsPresenter_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(ItemsPresenter_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ItemsPresenter_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(ItemsPresenter::typeid);
+	OS_NATIVE_EXIT(env, that, ItemsPresenter_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_KeyEventArgs_1IsDown
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(KeyEventArgs_1IsDown)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(KeyEventArgs_1IsDown)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, KeyEventArgs_1IsDown_FUNC);
+	rc = (jboolean)((KeyEventArgs^)TO_OBJECT(arg0))->IsDown;
+	OS_NATIVE_EXIT(env, that, KeyEventArgs_1IsDown_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_KeyEventArgs_1IsRepeat
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(KeyEventArgs_1IsRepeat)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(KeyEventArgs_1IsRepeat)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, KeyEventArgs_1IsRepeat_FUNC);
+	rc = (jboolean)((KeyEventArgs^)TO_OBJECT(arg0))->IsRepeat;
+	OS_NATIVE_EXIT(env, that, KeyEventArgs_1IsRepeat_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_KeyEventArgs_1IsToggled
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(KeyEventArgs_1IsToggled)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(KeyEventArgs_1IsToggled)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, KeyEventArgs_1IsToggled_FUNC);
+	rc = (jboolean)((KeyEventArgs^)TO_OBJECT(arg0))->IsToggled;
+	OS_NATIVE_EXIT(env, that, KeyEventArgs_1IsToggled_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_KeyEventArgs_1Key
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(KeyEventArgs_1Key)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(KeyEventArgs_1Key)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, KeyEventArgs_1Key_FUNC);
+	rc = (jint)((KeyEventArgs^)TO_OBJECT(arg0))->Key;
+	OS_NATIVE_EXIT(env, that, KeyEventArgs_1Key_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_KeyEventArgs_1SystemKey
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(KeyEventArgs_1SystemKey)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(KeyEventArgs_1SystemKey)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, KeyEventArgs_1SystemKey_FUNC);
+	rc = (jint)((KeyEventArgs^)TO_OBJECT(arg0))->SystemKey;
+	OS_NATIVE_EXIT(env, that, KeyEventArgs_1SystemKey_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_KeyInterop_1VirtualKeyFromKey
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(KeyInterop_1VirtualKeyFromKey)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(KeyInterop_1VirtualKeyFromKey)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, KeyInterop_1VirtualKeyFromKey_FUNC);
+	rc = (jint)KeyInterop::VirtualKeyFromKey((Key)arg0);
+	OS_NATIVE_EXIT(env, that, KeyInterop_1VirtualKeyFromKey_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_KeyTime_1FromTimeSpan
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(KeyTime_1FromTimeSpan)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(KeyTime_1FromTimeSpan)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, KeyTime_1FromTimeSpan_FUNC);
+	rc = (jint)TO_HANDLE(KeyTime::FromTimeSpan((TimeSpan)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, KeyTime_1FromTimeSpan_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_KeyTime_1Uniform
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(KeyTime_1Uniform)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(KeyTime_1Uniform)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, KeyTime_1Uniform_FUNC);
+	rc = (jint)TO_HANDLE(KeyTime::Uniform);
+	OS_NATIVE_EXIT(env, that, KeyTime_1Uniform_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_KeyboardDevice_1Modifiers
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(KeyboardDevice_1Modifiers)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(KeyboardDevice_1Modifiers)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, KeyboardDevice_1Modifiers_FUNC);
+	rc = (jint)((KeyboardDevice^)TO_OBJECT(arg0))->Modifiers;
+	OS_NATIVE_EXIT(env, that, KeyboardDevice_1Modifiers_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_KeyboardEventArgs_1KeyboardDevice
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(KeyboardEventArgs_1KeyboardDevice)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(KeyboardEventArgs_1KeyboardDevice)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, KeyboardEventArgs_1KeyboardDevice_FUNC);
+	rc = (jint)TO_HANDLE(((KeyboardEventArgs^)TO_OBJECT(arg0))->KeyboardDevice);
+	OS_NATIVE_EXIT(env, that, KeyboardEventArgs_1KeyboardDevice_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_KeyboardNavigation_1GetIsTabStop
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(KeyboardNavigation_1GetIsTabStop)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(KeyboardNavigation_1GetIsTabStop)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, KeyboardNavigation_1GetIsTabStop_FUNC);
+	rc = (jboolean)KeyboardNavigation::GetIsTabStop((DependencyObject^)TO_OBJECT(arg0));
+	OS_NATIVE_EXIT(env, that, KeyboardNavigation_1GetIsTabStop_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_KeyboardNavigation_1SetControlTabNavigation
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(KeyboardNavigation_1SetControlTabNavigation)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(KeyboardNavigation_1SetControlTabNavigation)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, KeyboardNavigation_1SetControlTabNavigation_FUNC);
+	KeyboardNavigation::SetControlTabNavigation((DependencyObject^)TO_OBJECT(arg0), (KeyboardNavigationMode)arg1);
+	OS_NATIVE_EXIT(env, that, KeyboardNavigation_1SetControlTabNavigation_FUNC);
+}
+#endif
+
+#ifndef NO_KeyboardNavigation_1SetDirectionalNavigation
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(KeyboardNavigation_1SetDirectionalNavigation)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(KeyboardNavigation_1SetDirectionalNavigation)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, KeyboardNavigation_1SetDirectionalNavigation_FUNC);
+	KeyboardNavigation::SetDirectionalNavigation((DependencyObject^)TO_OBJECT(arg0), (KeyboardNavigationMode)arg1);
+	OS_NATIVE_EXIT(env, that, KeyboardNavigation_1SetDirectionalNavigation_FUNC);
+}
+#endif
+
+#ifndef NO_KeyboardNavigation_1SetIsTabStop
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(KeyboardNavigation_1SetIsTabStop)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(KeyboardNavigation_1SetIsTabStop)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, KeyboardNavigation_1SetIsTabStop_FUNC);
+	KeyboardNavigation::SetIsTabStop((DependencyObject^)TO_OBJECT(arg0), arg1);
+	OS_NATIVE_EXIT(env, that, KeyboardNavigation_1SetIsTabStop_FUNC);
+}
+#endif
+
+#ifndef NO_KeyboardNavigation_1SetTabNavigation
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(KeyboardNavigation_1SetTabNavigation)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(KeyboardNavigation_1SetTabNavigation)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, KeyboardNavigation_1SetTabNavigation_FUNC);
+	KeyboardNavigation::SetTabNavigation((DependencyObject^)TO_OBJECT(arg0), (KeyboardNavigationMode)arg1);
+	OS_NATIVE_EXIT(env, that, KeyboardNavigation_1SetTabNavigation_FUNC);
+}
+#endif
+
+#ifndef NO_Keyboard_1Focus
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Keyboard_1Focus)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Keyboard_1Focus)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Keyboard_1Focus_FUNC);
+	rc = (jint)TO_HANDLE(Keyboard::Focus((IInputElement^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, Keyboard_1Focus_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Keyboard_1FocusedElement
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Keyboard_1FocusedElement)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Keyboard_1FocusedElement)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Keyboard_1FocusedElement_FUNC);
+	rc = (jint)TO_HANDLE(Keyboard::FocusedElement);
+	OS_NATIVE_EXIT(env, that, Keyboard_1FocusedElement_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Keyboard_1Modifiers
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Keyboard_1Modifiers)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Keyboard_1Modifiers)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Keyboard_1Modifiers_FUNC);
+	rc = (jint)Keyboard::Modifiers;
+	OS_NATIVE_EXIT(env, that, Keyboard_1Modifiers_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ListBoxItem_1IsSelected__I
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(ListBoxItem_1IsSelected__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(ListBoxItem_1IsSelected__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, ListBoxItem_1IsSelected__I_FUNC);
+	rc = (jboolean)((ListBoxItem^)TO_OBJECT(arg0))->IsSelected;
+	OS_NATIVE_EXIT(env, that, ListBoxItem_1IsSelected__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ListBoxItem_1IsSelected__IZ
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ListBoxItem_1IsSelected__IZ)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ListBoxItem_1IsSelected__IZ)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, ListBoxItem_1IsSelected__IZ_FUNC);
+	((ListBoxItem^)TO_OBJECT(arg0))->IsSelected = (arg1);
+	OS_NATIVE_EXIT(env, that, ListBoxItem_1IsSelected__IZ_FUNC);
+}
+#endif
+
+#ifndef NO_ListBox_1ScrollIntoView
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ListBox_1ScrollIntoView)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ListBox_1ScrollIntoView)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ListBox_1ScrollIntoView_FUNC);
+	((ListBox^)TO_OBJECT(arg0))->ScrollIntoView((Object^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, ListBox_1ScrollIntoView_FUNC);
+}
+#endif
+
+#ifndef NO_ListBox_1SelectAll
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ListBox_1SelectAll)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(ListBox_1SelectAll)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, ListBox_1SelectAll_FUNC);
+	((ListBox^)TO_OBJECT(arg0))->SelectAll();
+	OS_NATIVE_EXIT(env, that, ListBox_1SelectAll_FUNC);
+}
+#endif
+
+#ifndef NO_ListBox_1SelectedItems
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ListBox_1SelectedItems)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ListBox_1SelectedItems)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ListBox_1SelectedItems_FUNC);
+	rc = (jint)TO_HANDLE(((ListBox^)TO_OBJECT(arg0))->SelectedItems);
+	OS_NATIVE_EXIT(env, that, ListBox_1SelectedItems_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ListBox_1SelectionMode
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ListBox_1SelectionMode)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ListBox_1SelectionMode)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ListBox_1SelectionMode_FUNC);
+	((ListBox^)TO_OBJECT(arg0))->SelectionMode = ((SelectionMode)arg1);
+	OS_NATIVE_EXIT(env, that, ListBox_1SelectionMode_FUNC);
+}
+#endif
+
+#ifndef NO_ListBox_1UnselectAll
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ListBox_1UnselectAll)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(ListBox_1UnselectAll)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, ListBox_1UnselectAll_FUNC);
+	((ListBox^)TO_OBJECT(arg0))->UnselectAll();
+	OS_NATIVE_EXIT(env, that, ListBox_1UnselectAll_FUNC);
+}
+#endif
+
+#ifndef NO_ListViewItem_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ListViewItem_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(ListViewItem_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ListViewItem_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(ListViewItem::typeid);
+	OS_NATIVE_EXIT(env, that, ListViewItem_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ListView_1View
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ListView_1View)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ListView_1View)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ListView_1View_FUNC);
+	((ListView^)TO_OBJECT(arg0))->View = ((ViewBase^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, ListView_1View_FUNC);
+}
+#endif
+
+#ifndef NO_MatrixTransform_1Matrix__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(MatrixTransform_1Matrix__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(MatrixTransform_1Matrix__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, MatrixTransform_1Matrix__I_FUNC);
+	rc = (jint)TO_HANDLE(((MatrixTransform^)TO_OBJECT(arg0))->Matrix);
+	OS_NATIVE_EXIT(env, that, MatrixTransform_1Matrix__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_MatrixTransform_1Matrix__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(MatrixTransform_1Matrix__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(MatrixTransform_1Matrix__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, MatrixTransform_1Matrix__II_FUNC);
+	((MatrixTransform^)TO_OBJECT(arg0))->Matrix = ((Matrix)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, MatrixTransform_1Matrix__II_FUNC);
+}
+#endif
+
+#ifndef NO_Matrix_1Invert
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Matrix_1Invert)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(Matrix_1Invert)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, Matrix_1Invert_FUNC);
+	((Matrix^)TO_OBJECT(arg0))->Invert();
+	OS_NATIVE_EXIT(env, that, Matrix_1Invert_FUNC);
+}
+#endif
+
+#ifndef NO_Matrix_1IsIdentity
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(Matrix_1IsIdentity)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(Matrix_1IsIdentity)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, Matrix_1IsIdentity_FUNC);
+	rc = (jboolean)((Matrix^)TO_OBJECT(arg0))->IsIdentity;
+	OS_NATIVE_EXIT(env, that, Matrix_1IsIdentity_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Matrix_1M11__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Matrix_1M11__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Matrix_1M11__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Matrix_1M11__I_FUNC);
+	rc = (jdouble)((Matrix^)TO_OBJECT(arg0))->M11;
+	OS_NATIVE_EXIT(env, that, Matrix_1M11__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Matrix_1M11__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Matrix_1M11__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Matrix_1M11__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Matrix_1M11__ID_FUNC);
+	((Matrix^)TO_OBJECT(arg0))->M11 = (arg1);
+	OS_NATIVE_EXIT(env, that, Matrix_1M11__ID_FUNC);
+}
+#endif
+
+#ifndef NO_Matrix_1M12__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Matrix_1M12__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Matrix_1M12__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Matrix_1M12__I_FUNC);
+	rc = (jdouble)((Matrix^)TO_OBJECT(arg0))->M12;
+	OS_NATIVE_EXIT(env, that, Matrix_1M12__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Matrix_1M12__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Matrix_1M12__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Matrix_1M12__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Matrix_1M12__ID_FUNC);
+	((Matrix^)TO_OBJECT(arg0))->M12 = (arg1);
+	OS_NATIVE_EXIT(env, that, Matrix_1M12__ID_FUNC);
+}
+#endif
+
+#ifndef NO_Matrix_1M21__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Matrix_1M21__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Matrix_1M21__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Matrix_1M21__I_FUNC);
+	rc = (jdouble)((Matrix^)TO_OBJECT(arg0))->M21;
+	OS_NATIVE_EXIT(env, that, Matrix_1M21__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Matrix_1M21__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Matrix_1M21__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Matrix_1M21__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Matrix_1M21__ID_FUNC);
+	((Matrix^)TO_OBJECT(arg0))->M21 = (arg1);
+	OS_NATIVE_EXIT(env, that, Matrix_1M21__ID_FUNC);
+}
+#endif
+
+#ifndef NO_Matrix_1M22__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Matrix_1M22__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Matrix_1M22__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Matrix_1M22__I_FUNC);
+	rc = (jdouble)((Matrix^)TO_OBJECT(arg0))->M22;
+	OS_NATIVE_EXIT(env, that, Matrix_1M22__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Matrix_1M22__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Matrix_1M22__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Matrix_1M22__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Matrix_1M22__ID_FUNC);
+	((Matrix^)TO_OBJECT(arg0))->M22 = (arg1);
+	OS_NATIVE_EXIT(env, that, Matrix_1M22__ID_FUNC);
+}
+#endif
+
+#ifndef NO_Matrix_1Multiply
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Matrix_1Multiply)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(Matrix_1Multiply)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Matrix_1Multiply_FUNC);
+	rc = (jint)TO_HANDLE(Matrix::Multiply((Matrix)TO_OBJECT(arg0), (Matrix)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, Matrix_1Multiply_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Matrix_1OffsetX__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Matrix_1OffsetX__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Matrix_1OffsetX__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Matrix_1OffsetX__I_FUNC);
+	rc = (jdouble)((Matrix^)TO_OBJECT(arg0))->OffsetX;
+	OS_NATIVE_EXIT(env, that, Matrix_1OffsetX__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Matrix_1OffsetX__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Matrix_1OffsetX__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Matrix_1OffsetX__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Matrix_1OffsetX__ID_FUNC);
+	((Matrix^)TO_OBJECT(arg0))->OffsetX = (arg1);
+	OS_NATIVE_EXIT(env, that, Matrix_1OffsetX__ID_FUNC);
+}
+#endif
+
+#ifndef NO_Matrix_1OffsetY__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Matrix_1OffsetY__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Matrix_1OffsetY__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Matrix_1OffsetY__I_FUNC);
+	rc = (jdouble)((Matrix^)TO_OBJECT(arg0))->OffsetY;
+	OS_NATIVE_EXIT(env, that, Matrix_1OffsetY__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Matrix_1OffsetY__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Matrix_1OffsetY__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Matrix_1OffsetY__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Matrix_1OffsetY__ID_FUNC);
+	((Matrix^)TO_OBJECT(arg0))->OffsetY = (arg1);
+	OS_NATIVE_EXIT(env, that, Matrix_1OffsetY__ID_FUNC);
+}
+#endif
+
+#ifndef NO_Matrix_1RotatePrepend
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Matrix_1RotatePrepend)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Matrix_1RotatePrepend)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Matrix_1RotatePrepend_FUNC);
+	((Matrix^)TO_OBJECT(arg0))->RotatePrepend(arg1);
+	OS_NATIVE_EXIT(env, that, Matrix_1RotatePrepend_FUNC);
+}
+#endif
+
+#ifndef NO_Matrix_1ScalePrepend
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Matrix_1ScalePrepend)(JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2);
+JNIEXPORT void JNICALL OS_NATIVE(Matrix_1ScalePrepend)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2)
+{
+	OS_NATIVE_ENTER(env, that, Matrix_1ScalePrepend_FUNC);
+	((Matrix^)TO_OBJECT(arg0))->ScalePrepend(arg1, arg2);
+	OS_NATIVE_EXIT(env, that, Matrix_1ScalePrepend_FUNC);
+}
+#endif
+
+#ifndef NO_Matrix_1SetIdentity
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Matrix_1SetIdentity)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(Matrix_1SetIdentity)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, Matrix_1SetIdentity_FUNC);
+	((Matrix^)TO_OBJECT(arg0))->SetIdentity();
+	OS_NATIVE_EXIT(env, that, Matrix_1SetIdentity_FUNC);
+}
+#endif
+
+#ifndef NO_Matrix_1SkewPrepend
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Matrix_1SkewPrepend)(JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2);
+JNIEXPORT void JNICALL OS_NATIVE(Matrix_1SkewPrepend)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2)
+{
+	OS_NATIVE_ENTER(env, that, Matrix_1SkewPrepend_FUNC);
+	((Matrix^)TO_OBJECT(arg0))->SkewPrepend(arg1, arg2);
+	OS_NATIVE_EXIT(env, that, Matrix_1SkewPrepend_FUNC);
+}
+#endif
+
+#ifndef NO_Matrix_1Transform
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Matrix_1Transform)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(Matrix_1Transform)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Matrix_1Transform_FUNC);
+	rc = (jint)TO_HANDLE(((Matrix^)TO_OBJECT(arg0))->Transform((Point)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, Matrix_1Transform_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Matrix_1TranslatePrepend
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Matrix_1TranslatePrepend)(JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2);
+JNIEXPORT void JNICALL OS_NATIVE(Matrix_1TranslatePrepend)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2)
+{
+	OS_NATIVE_ENTER(env, that, Matrix_1TranslatePrepend_FUNC);
+	((Matrix^)TO_OBJECT(arg0))->TranslatePrepend(arg1, arg2);
+	OS_NATIVE_EXIT(env, that, Matrix_1TranslatePrepend_FUNC);
+}
+#endif
+
+#ifndef NO_MemberDescriptor_1Name
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(MemberDescriptor_1Name)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(MemberDescriptor_1Name)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, MemberDescriptor_1Name_FUNC);
+	rc = (jint)TO_HANDLE(((MemberDescriptor^)TO_OBJECT(arg0))->Name);
+	OS_NATIVE_EXIT(env, that, MemberDescriptor_1Name_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_MemoryStream_1ToArray
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(MemoryStream_1ToArray)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(MemoryStream_1ToArray)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, MemoryStream_1ToArray_FUNC);
+	rc = (jint)TO_HANDLE(((System::IO::MemoryStream^)TO_OBJECT(arg0))->ToArray());
+	OS_NATIVE_EXIT(env, that, MemoryStream_1ToArray_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_MemoryStream_1Write
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(MemoryStream_1Write)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3);
+JNIEXPORT void JNICALL OS_NATIVE(MemoryStream_1Write)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+{
+	OS_NATIVE_ENTER(env, that, MemoryStream_1Write_FUNC);
+	((System::IO::MemoryStream^)TO_OBJECT(arg0))->Write((array<Byte>^)TO_OBJECT(arg1), arg2, arg3);
+	OS_NATIVE_EXIT(env, that, MemoryStream_1Write_FUNC);
+}
+#endif
+
+#ifndef NO_MenuItem_1Click
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(MenuItem_1Click)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(MenuItem_1Click)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, MenuItem_1Click_FUNC);
+	((MenuItem^)TO_OBJECT(arg0))->Click += ((RoutedEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, MenuItem_1Click_FUNC);
+}
+#endif
+
+#ifndef NO_MenuItem_1Icon
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(MenuItem_1Icon)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(MenuItem_1Icon)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, MenuItem_1Icon_FUNC);
+	((MenuItem^)TO_OBJECT(arg0))->Icon = ((Image^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, MenuItem_1Icon_FUNC);
+}
+#endif
+
+#ifndef NO_MenuItem_1InputGestureText
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(MenuItem_1InputGestureText)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(MenuItem_1InputGestureText)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, MenuItem_1InputGestureText_FUNC);
+	((MenuItem^)TO_OBJECT(arg0))->InputGestureText = ((String^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, MenuItem_1InputGestureText_FUNC);
+}
+#endif
+
+#ifndef NO_MenuItem_1IsCheckable
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(MenuItem_1IsCheckable)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(MenuItem_1IsCheckable)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, MenuItem_1IsCheckable_FUNC);
+	((MenuItem^)TO_OBJECT(arg0))->IsCheckable = (arg1);
+	OS_NATIVE_EXIT(env, that, MenuItem_1IsCheckable_FUNC);
+}
+#endif
+
+#ifndef NO_MenuItem_1IsChecked__I
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(MenuItem_1IsChecked__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(MenuItem_1IsChecked__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, MenuItem_1IsChecked__I_FUNC);
+	rc = (jboolean)((MenuItem^)TO_OBJECT(arg0))->IsChecked;
+	OS_NATIVE_EXIT(env, that, MenuItem_1IsChecked__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_MenuItem_1IsChecked__IZ
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(MenuItem_1IsChecked__IZ)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(MenuItem_1IsChecked__IZ)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, MenuItem_1IsChecked__IZ_FUNC);
+	((MenuItem^)TO_OBJECT(arg0))->IsChecked = (arg1);
+	OS_NATIVE_EXIT(env, that, MenuItem_1IsChecked__IZ_FUNC);
+}
+#endif
+
+#ifndef NO_MenuItem_1SubmenuClosed
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(MenuItem_1SubmenuClosed)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(MenuItem_1SubmenuClosed)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, MenuItem_1SubmenuClosed_FUNC);
+	((MenuItem^)TO_OBJECT(arg0))->SubmenuClosed += ((RoutedEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, MenuItem_1SubmenuClosed_FUNC);
+}
+#endif
+
+#ifndef NO_MenuItem_1SubmenuOpened
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(MenuItem_1SubmenuOpened)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(MenuItem_1SubmenuOpened)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, MenuItem_1SubmenuOpened_FUNC);
+	((MenuItem^)TO_OBJECT(arg0))->SubmenuOpened += ((RoutedEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, MenuItem_1SubmenuOpened_FUNC);
+}
+#endif
+
+#ifndef NO_Menu_1IsMainMenu
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Menu_1IsMainMenu)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Menu_1IsMainMenu)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, Menu_1IsMainMenu_FUNC);
+	((Menu^)TO_OBJECT(arg0))->IsMainMenu = (arg1);
+	OS_NATIVE_EXIT(env, that, Menu_1IsMainMenu_FUNC);
+}
+#endif
+
+#ifndef NO_MessageBox_1Show
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(MessageBox_1Show)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4);
+JNIEXPORT jint JNICALL OS_NATIVE(MessageBox_1Show)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, MessageBox_1Show_FUNC);
+	rc = (jint)MessageBox::Show((String^)TO_OBJECT(arg0), (String^)TO_OBJECT(arg1), (MessageBoxButton)arg2, (MessageBoxImage)arg3, (MessageBoxResult)arg4);
+	OS_NATIVE_EXIT(env, that, MessageBox_1Show_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_MethodInfo_1Invoke
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(MethodInfo_1Invoke)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT jint JNICALL OS_NATIVE(MethodInfo_1Invoke)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, MethodInfo_1Invoke_FUNC);
+	rc = (jint)TO_HANDLE(((MethodInfo^)TO_OBJECT(arg0))->Invoke((Object^)TO_OBJECT(arg1), (array<Object^>^)TO_OBJECT(arg2)));
+	OS_NATIVE_EXIT(env, that, MethodInfo_1Invoke_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_MouseButtonEventArgs_1ButtonState
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(MouseButtonEventArgs_1ButtonState)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(MouseButtonEventArgs_1ButtonState)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, MouseButtonEventArgs_1ButtonState_FUNC);
+	rc = (jint)((MouseButtonEventArgs^)TO_OBJECT(arg0))->ButtonState;
+	OS_NATIVE_EXIT(env, that, MouseButtonEventArgs_1ButtonState_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_MouseButtonEventArgs_1ChangedButton
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(MouseButtonEventArgs_1ChangedButton)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(MouseButtonEventArgs_1ChangedButton)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, MouseButtonEventArgs_1ChangedButton_FUNC);
+	rc = (jint)((MouseButtonEventArgs^)TO_OBJECT(arg0))->ChangedButton;
+	OS_NATIVE_EXIT(env, that, MouseButtonEventArgs_1ChangedButton_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_MouseButtonEventArgs_1ClickCount
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(MouseButtonEventArgs_1ClickCount)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(MouseButtonEventArgs_1ClickCount)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, MouseButtonEventArgs_1ClickCount_FUNC);
+	rc = (jint)((MouseButtonEventArgs^)TO_OBJECT(arg0))->ClickCount;
+	OS_NATIVE_EXIT(env, that, MouseButtonEventArgs_1ClickCount_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_MouseEventArgs_1GetPosition
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(MouseEventArgs_1GetPosition)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(MouseEventArgs_1GetPosition)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, MouseEventArgs_1GetPosition_FUNC);
+	rc = (jint)TO_HANDLE(((MouseEventArgs^)TO_OBJECT(arg0))->GetPosition((IInputElement^)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, MouseEventArgs_1GetPosition_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_MouseEventArgs_1LeftButton
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(MouseEventArgs_1LeftButton)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(MouseEventArgs_1LeftButton)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, MouseEventArgs_1LeftButton_FUNC);
+	rc = (jint)((MouseEventArgs^)TO_OBJECT(arg0))->LeftButton;
+	OS_NATIVE_EXIT(env, that, MouseEventArgs_1LeftButton_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_MouseEventArgs_1MiddleButton
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(MouseEventArgs_1MiddleButton)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(MouseEventArgs_1MiddleButton)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, MouseEventArgs_1MiddleButton_FUNC);
+	rc = (jint)((MouseEventArgs^)TO_OBJECT(arg0))->MiddleButton;
+	OS_NATIVE_EXIT(env, that, MouseEventArgs_1MiddleButton_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_MouseEventArgs_1RightButton
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(MouseEventArgs_1RightButton)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(MouseEventArgs_1RightButton)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, MouseEventArgs_1RightButton_FUNC);
+	rc = (jint)((MouseEventArgs^)TO_OBJECT(arg0))->RightButton;
+	OS_NATIVE_EXIT(env, that, MouseEventArgs_1RightButton_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_MouseEventArgs_1XButton1
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(MouseEventArgs_1XButton1)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(MouseEventArgs_1XButton1)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, MouseEventArgs_1XButton1_FUNC);
+	rc = (jint)((MouseEventArgs^)TO_OBJECT(arg0))->XButton1;
+	OS_NATIVE_EXIT(env, that, MouseEventArgs_1XButton1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_MouseEventArgs_1XButton2
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(MouseEventArgs_1XButton2)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(MouseEventArgs_1XButton2)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, MouseEventArgs_1XButton2_FUNC);
+	rc = (jint)((MouseEventArgs^)TO_OBJECT(arg0))->XButton2;
+	OS_NATIVE_EXIT(env, that, MouseEventArgs_1XButton2_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_MouseWheelEventArgs_1Delta
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(MouseWheelEventArgs_1Delta)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(MouseWheelEventArgs_1Delta)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, MouseWheelEventArgs_1Delta_FUNC);
+	rc = (jint)((MouseWheelEventArgs^)TO_OBJECT(arg0))->Delta;
+	OS_NATIVE_EXIT(env, that, MouseWheelEventArgs_1Delta_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Mouse_1Captured
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Mouse_1Captured)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Mouse_1Captured)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Mouse_1Captured_FUNC);
+	rc = (jint)TO_HANDLE(Mouse::Captured);
+	OS_NATIVE_EXIT(env, that, Mouse_1Captured_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Mouse_1DirectlyOver
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Mouse_1DirectlyOver)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Mouse_1DirectlyOver)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Mouse_1DirectlyOver_FUNC);
+	rc = (jint)TO_HANDLE(Mouse::DirectlyOver);
+	OS_NATIVE_EXIT(env, that, Mouse_1DirectlyOver_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Mouse_1GetPosition
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Mouse_1GetPosition)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Mouse_1GetPosition)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Mouse_1GetPosition_FUNC);
+	rc = (jint)TO_HANDLE(Mouse::GetPosition((IInputElement^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, Mouse_1GetPosition_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Mouse_1LeftButton
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Mouse_1LeftButton)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Mouse_1LeftButton)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Mouse_1LeftButton_FUNC);
+	rc = (jint)Mouse::LeftButton;
+	OS_NATIVE_EXIT(env, that, Mouse_1LeftButton_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Mouse_1MiddleButton
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Mouse_1MiddleButton)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Mouse_1MiddleButton)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Mouse_1MiddleButton_FUNC);
+	rc = (jint)Mouse::MiddleButton;
+	OS_NATIVE_EXIT(env, that, Mouse_1MiddleButton_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Mouse_1RightButton
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Mouse_1RightButton)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Mouse_1RightButton)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Mouse_1RightButton_FUNC);
+	rc = (jint)Mouse::RightButton;
+	OS_NATIVE_EXIT(env, that, Mouse_1RightButton_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Mouse_1SetCursor
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(Mouse_1SetCursor)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(Mouse_1SetCursor)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, Mouse_1SetCursor_FUNC);
+	rc = (jboolean)Mouse::SetCursor((Cursor^)TO_OBJECT(arg0));
+	OS_NATIVE_EXIT(env, that, Mouse_1SetCursor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Mouse_1XButton1
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Mouse_1XButton1)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Mouse_1XButton1)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Mouse_1XButton1_FUNC);
+	rc = (jint)Mouse::XButton1;
+	OS_NATIVE_EXIT(env, that, Mouse_1XButton1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Mouse_1XButton2
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Mouse_1XButton2)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Mouse_1XButton2)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Mouse_1XButton2_FUNC);
+	rc = (jint)Mouse::XButton2;
+	OS_NATIVE_EXIT(env, that, Mouse_1XButton2_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NameScope_1GetNameScope
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(NameScope_1GetNameScope)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(NameScope_1GetNameScope)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, NameScope_1GetNameScope_FUNC);
+	rc = (jint)TO_HANDLE(NameScope::GetNameScope((DependencyObject^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, NameScope_1GetNameScope_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NameScope_1RegisterName
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(NameScope_1RegisterName)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(NameScope_1RegisterName)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, NameScope_1RegisterName_FUNC);
+	((NameScope^)TO_OBJECT(arg0))->RegisterName((String^)TO_OBJECT(arg1), (Object^)TO_OBJECT(arg2));
+	OS_NATIVE_EXIT(env, that, NameScope_1RegisterName_FUNC);
+}
+#endif
+
+#ifndef NO_NameScope_1SetNameScope
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(NameScope_1SetNameScope)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(NameScope_1SetNameScope)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, NameScope_1SetNameScope_FUNC);
+	NameScope::SetNameScope((DependencyObject^)TO_OBJECT(arg0), (INameScope^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, NameScope_1SetNameScope_FUNC);
+}
+#endif
+
+#ifndef NO_NewGlobalRef
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(NewGlobalRef)(JNIEnv *env, jclass that, jobject arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(NewGlobalRef)
+	(JNIEnv *env, jclass that, jobject arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, NewGlobalRef_FUNC);
+	rc = (jint)env->NewGlobalRef(arg0);
+	OS_NATIVE_EXIT(env, that, NewGlobalRef_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_NotifyIcon_1DoubleClick
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(NotifyIcon_1DoubleClick)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(NotifyIcon_1DoubleClick)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, NotifyIcon_1DoubleClick_FUNC);
+	((System::Windows::Forms::NotifyIcon^)TO_OBJECT(arg0))->DoubleClick += ((EventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, NotifyIcon_1DoubleClick_FUNC);
+}
+#endif
+
+#ifndef NO_NotifyIcon_1Icon
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(NotifyIcon_1Icon)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(NotifyIcon_1Icon)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, NotifyIcon_1Icon_FUNC);
+	((System::Windows::Forms::NotifyIcon^)TO_OBJECT(arg0))->Icon = ((System::Drawing::Icon^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, NotifyIcon_1Icon_FUNC);
+}
+#endif
+
+#ifndef NO_NotifyIcon_1MouseDown
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(NotifyIcon_1MouseDown)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(NotifyIcon_1MouseDown)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, NotifyIcon_1MouseDown_FUNC);
+	((System::Windows::Forms::NotifyIcon^)TO_OBJECT(arg0))->MouseDown += ((System::Windows::Forms::MouseEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, NotifyIcon_1MouseDown_FUNC);
+}
+#endif
+
+#ifndef NO_NotifyIcon_1MouseUp
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(NotifyIcon_1MouseUp)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(NotifyIcon_1MouseUp)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, NotifyIcon_1MouseUp_FUNC);
+	((System::Windows::Forms::NotifyIcon^)TO_OBJECT(arg0))->MouseUp += ((System::Windows::Forms::MouseEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, NotifyIcon_1MouseUp_FUNC);
+}
+#endif
+
+#ifndef NO_NotifyIcon_1Text
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(NotifyIcon_1Text)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(NotifyIcon_1Text)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, NotifyIcon_1Text_FUNC);
+	((System::Windows::Forms::NotifyIcon^)TO_OBJECT(arg0))->Text = ((String^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, NotifyIcon_1Text_FUNC);
+}
+#endif
+
+#ifndef NO_NotifyIcon_1Visible
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(NotifyIcon_1Visible)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(NotifyIcon_1Visible)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, NotifyIcon_1Visible_FUNC);
+	((System::Windows::Forms::NotifyIcon^)TO_OBJECT(arg0))->Visible = (arg1);
+	OS_NATIVE_EXIT(env, that, NotifyIcon_1Visible_FUNC);
+}
+#endif
+
+#ifndef NO_Object_1Equals
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(Object_1Equals)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jboolean JNICALL OS_NATIVE(Object_1Equals)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, Object_1Equals_FUNC);
+	rc = (jboolean)((Object ^)TO_OBJECT(arg0))->Equals((Object ^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Object_1Equals_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Object_1GetType
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Object_1GetType)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Object_1GetType)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Object_1GetType_FUNC);
+	rc = (jint)TO_HANDLE(((Object ^)TO_OBJECT(arg0))->GetType());
+	OS_NATIVE_EXIT(env, that, Object_1GetType_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Object_1ToString
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Object_1ToString)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Object_1ToString)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Object_1ToString_FUNC);
+	rc = (jint)TO_HANDLE(((Object ^)TO_OBJECT(arg0))->ToString());
+	OS_NATIVE_EXIT(env, that, Object_1ToString_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ObservableCollectionGridViewColumn_1Move
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ObservableCollectionGridViewColumn_1Move)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(ObservableCollectionGridViewColumn_1Move)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, ObservableCollectionGridViewColumn_1Move_FUNC);
+	((ObservableCollection<GridViewColumn^>^)TO_OBJECT(arg0))->Move(arg1, arg2);
+	OS_NATIVE_EXIT(env, that, ObservableCollectionGridViewColumn_1Move_FUNC);
+}
+#endif
+
+#ifndef NO_OpenFileDialog_1Multiselect
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(OpenFileDialog_1Multiselect)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(OpenFileDialog_1Multiselect)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, OpenFileDialog_1Multiselect_FUNC);
+	((OpenFileDialog^)TO_OBJECT(arg0))->Multiselect = (arg1);
+	OS_NATIVE_EXIT(env, that, OpenFileDialog_1Multiselect_FUNC);
+}
+#endif
+
+#ifndef NO_OuterGlowBitmapEffect_1GlowColor__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(OuterGlowBitmapEffect_1GlowColor__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(OuterGlowBitmapEffect_1GlowColor__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, OuterGlowBitmapEffect_1GlowColor__I_FUNC);
+	rc = (jint)TO_HANDLE(((OuterGlowBitmapEffect^)TO_OBJECT(arg0))->GlowColor);
+	OS_NATIVE_EXIT(env, that, OuterGlowBitmapEffect_1GlowColor__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_OuterGlowBitmapEffect_1GlowColor__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(OuterGlowBitmapEffect_1GlowColor__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(OuterGlowBitmapEffect_1GlowColor__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, OuterGlowBitmapEffect_1GlowColor__II_FUNC);
+	((OuterGlowBitmapEffect^)TO_OBJECT(arg0))->GlowColor = ((Color)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, OuterGlowBitmapEffect_1GlowColor__II_FUNC);
+}
+#endif
+
+#ifndef NO_OuterGlowBitmapEffect_1GlowSize__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(OuterGlowBitmapEffect_1GlowSize__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(OuterGlowBitmapEffect_1GlowSize__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, OuterGlowBitmapEffect_1GlowSize__I_FUNC);
+	rc = (jdouble)((OuterGlowBitmapEffect^)TO_OBJECT(arg0))->GlowSize;
+	OS_NATIVE_EXIT(env, that, OuterGlowBitmapEffect_1GlowSize__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_OuterGlowBitmapEffect_1GlowSize__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(OuterGlowBitmapEffect_1GlowSize__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(OuterGlowBitmapEffect_1GlowSize__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, OuterGlowBitmapEffect_1GlowSize__ID_FUNC);
+	((OuterGlowBitmapEffect^)TO_OBJECT(arg0))->GlowSize = (arg1);
+	OS_NATIVE_EXIT(env, that, OuterGlowBitmapEffect_1GlowSize__ID_FUNC);
+}
+#endif
+
+#ifndef NO_OuterGlowBitmapEffect_1GlowSizeProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(OuterGlowBitmapEffect_1GlowSizeProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(OuterGlowBitmapEffect_1GlowSizeProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, OuterGlowBitmapEffect_1GlowSizeProperty_FUNC);
+	rc = (jint)TO_HANDLE(OuterGlowBitmapEffect::GlowSizeProperty);
+	OS_NATIVE_EXIT(env, that, OuterGlowBitmapEffect_1GlowSizeProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_OuterGlowBitmapEffect_1Opacity__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(OuterGlowBitmapEffect_1Opacity__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(OuterGlowBitmapEffect_1Opacity__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, OuterGlowBitmapEffect_1Opacity__I_FUNC);
+	rc = (jdouble)((OuterGlowBitmapEffect^)TO_OBJECT(arg0))->Opacity;
+	OS_NATIVE_EXIT(env, that, OuterGlowBitmapEffect_1Opacity__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_OuterGlowBitmapEffect_1Opacity__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(OuterGlowBitmapEffect_1Opacity__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(OuterGlowBitmapEffect_1Opacity__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, OuterGlowBitmapEffect_1Opacity__ID_FUNC);
+	((OuterGlowBitmapEffect^)TO_OBJECT(arg0))->Opacity = (arg1);
+	OS_NATIVE_EXIT(env, that, OuterGlowBitmapEffect_1Opacity__ID_FUNC);
+}
+#endif
+
+#ifndef NO_Panel_1Background__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Panel_1Background__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Panel_1Background__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Panel_1Background__I_FUNC);
+	rc = (jint)TO_HANDLE(((Panel^)TO_OBJECT(arg0))->Background);
+	OS_NATIVE_EXIT(env, that, Panel_1Background__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Panel_1Background__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Panel_1Background__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Panel_1Background__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Panel_1Background__II_FUNC);
+	((Panel^)TO_OBJECT(arg0))->Background = ((Brush^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Panel_1Background__II_FUNC);
+}
+#endif
+
+#ifndef NO_Panel_1BackgroundProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Panel_1BackgroundProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Panel_1BackgroundProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Panel_1BackgroundProperty_FUNC);
+	rc = (jint)TO_HANDLE(Panel::BackgroundProperty);
+	OS_NATIVE_EXIT(env, that, Panel_1BackgroundProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Panel_1Children
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Panel_1Children)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Panel_1Children)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Panel_1Children_FUNC);
+	rc = (jint)TO_HANDLE(((Panel^)TO_OBJECT(arg0))->Children);
+	OS_NATIVE_EXIT(env, that, Panel_1Children_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Panel_1GetZIndex
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Panel_1GetZIndex)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Panel_1GetZIndex)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Panel_1GetZIndex_FUNC);
+	rc = (jint)Panel::GetZIndex((UIElement^)TO_OBJECT(arg0));
+	OS_NATIVE_EXIT(env, that, Panel_1GetZIndex_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Panel_1HeightProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Panel_1HeightProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Panel_1HeightProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Panel_1HeightProperty_FUNC);
+	rc = (jint)TO_HANDLE(Panel::HeightProperty);
+	OS_NATIVE_EXIT(env, that, Panel_1HeightProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Panel_1SetZIndex
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Panel_1SetZIndex)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Panel_1SetZIndex)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Panel_1SetZIndex_FUNC);
+	Panel::SetZIndex((UIElement ^)TO_OBJECT(arg0), arg1);
+	OS_NATIVE_EXIT(env, that, Panel_1SetZIndex_FUNC);
+}
+#endif
+
+#ifndef NO_Panel_1WidthProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Panel_1WidthProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Panel_1WidthProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Panel_1WidthProperty_FUNC);
+	rc = (jint)TO_HANDLE(Panel::WidthProperty);
+	OS_NATIVE_EXIT(env, that, Panel_1WidthProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PasswordBox_1MaxLength__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PasswordBox_1MaxLength__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(PasswordBox_1MaxLength__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PasswordBox_1MaxLength__I_FUNC);
+	rc = (jint)((PasswordBox^)TO_OBJECT(arg0))->MaxLength;
+	OS_NATIVE_EXIT(env, that, PasswordBox_1MaxLength__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PasswordBox_1MaxLength__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(PasswordBox_1MaxLength__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(PasswordBox_1MaxLength__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, PasswordBox_1MaxLength__II_FUNC);
+	((PasswordBox^)TO_OBJECT(arg0))->MaxLength = (arg1);
+	OS_NATIVE_EXIT(env, that, PasswordBox_1MaxLength__II_FUNC);
+}
+#endif
+
+#ifndef NO_PasswordBox_1Password__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PasswordBox_1Password__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(PasswordBox_1Password__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PasswordBox_1Password__I_FUNC);
+	rc = (jint)TO_HANDLE(((PasswordBox^)TO_OBJECT(arg0))->Password);
+	OS_NATIVE_EXIT(env, that, PasswordBox_1Password__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PasswordBox_1Password__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(PasswordBox_1Password__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(PasswordBox_1Password__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, PasswordBox_1Password__II_FUNC);
+	((PasswordBox^)TO_OBJECT(arg0))->Password = ((String^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, PasswordBox_1Password__II_FUNC);
+}
+#endif
+
+#ifndef NO_PasswordBox_1PasswordChanged
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(PasswordBox_1PasswordChanged)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(PasswordBox_1PasswordChanged)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, PasswordBox_1PasswordChanged_FUNC);
+	((PasswordBox^)TO_OBJECT(arg0))->PasswordChanged += ((RoutedEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, PasswordBox_1PasswordChanged_FUNC);
+}
+#endif
+
+#ifndef NO_PasswordBox_1PasswordChar__I
+extern "C" JNIEXPORT jchar JNICALL OS_NATIVE(PasswordBox_1PasswordChar__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jchar JNICALL OS_NATIVE(PasswordBox_1PasswordChar__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jchar rc = 0;
+	OS_NATIVE_ENTER(env, that, PasswordBox_1PasswordChar__I_FUNC);
+	rc = (jchar)((PasswordBox^)TO_OBJECT(arg0))->PasswordChar;
+	OS_NATIVE_EXIT(env, that, PasswordBox_1PasswordChar__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PasswordBox_1PasswordChar__IC
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(PasswordBox_1PasswordChar__IC)(JNIEnv *env, jclass that, jint arg0, jchar arg1);
+JNIEXPORT void JNICALL OS_NATIVE(PasswordBox_1PasswordChar__IC)
+	(JNIEnv *env, jclass that, jint arg0, jchar arg1)
+{
+	OS_NATIVE_ENTER(env, that, PasswordBox_1PasswordChar__IC_FUNC);
+	((PasswordBox^)TO_OBJECT(arg0))->PasswordChar = (arg1);
+	OS_NATIVE_EXIT(env, that, PasswordBox_1PasswordChar__IC_FUNC);
+}
+#endif
+
+#ifndef NO_PasswordBox_1Paste
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(PasswordBox_1Paste)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(PasswordBox_1Paste)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, PasswordBox_1Paste_FUNC);
+	((PasswordBox^)TO_OBJECT(arg0))->Paste();
+	OS_NATIVE_EXIT(env, that, PasswordBox_1Paste_FUNC);
+}
+#endif
+
+#ifndef NO_PathFigureCollection_1Add
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(PathFigureCollection_1Add)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(PathFigureCollection_1Add)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, PathFigureCollection_1Add_FUNC);
+	((PathFigureCollection^)TO_OBJECT(arg0))->Add((PathFigure^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, PathFigureCollection_1Add_FUNC);
+}
+#endif
+
+#ifndef NO_PathFigureCollection_1Count
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PathFigureCollection_1Count)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(PathFigureCollection_1Count)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PathFigureCollection_1Count_FUNC);
+	rc = (jint)((PathFigureCollection^)TO_OBJECT(arg0))->Count;
+	OS_NATIVE_EXIT(env, that, PathFigureCollection_1Count_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PathFigure_1IsClosed__I
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(PathFigure_1IsClosed__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(PathFigure_1IsClosed__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, PathFigure_1IsClosed__I_FUNC);
+	rc = (jboolean)((PathFigure^)TO_OBJECT(arg0))->IsClosed;
+	OS_NATIVE_EXIT(env, that, PathFigure_1IsClosed__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PathFigure_1IsClosed__IZ
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(PathFigure_1IsClosed__IZ)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(PathFigure_1IsClosed__IZ)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, PathFigure_1IsClosed__IZ_FUNC);
+	((PathFigure^)TO_OBJECT(arg0))->IsClosed = (arg1);
+	OS_NATIVE_EXIT(env, that, PathFigure_1IsClosed__IZ_FUNC);
+}
+#endif
+
+#ifndef NO_PathFigure_1Segments__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PathFigure_1Segments__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(PathFigure_1Segments__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PathFigure_1Segments__I_FUNC);
+	rc = (jint)TO_HANDLE(((PathFigure^)TO_OBJECT(arg0))->Segments);
+	OS_NATIVE_EXIT(env, that, PathFigure_1Segments__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PathFigure_1Segments__II
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PathFigure_1Segments__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(PathFigure_1Segments__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PathFigure_1Segments__II_FUNC);
+	rc = (jint)TO_HANDLE(((PathFigure^)TO_OBJECT(arg0))->Segments[arg1]);
+	OS_NATIVE_EXIT(env, that, PathFigure_1Segments__II_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PathFigure_1StartPoint
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(PathFigure_1StartPoint)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(PathFigure_1StartPoint)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, PathFigure_1StartPoint_FUNC);
+	((PathFigure^)TO_OBJECT(arg0))->StartPoint = ((Point)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, PathFigure_1StartPoint_FUNC);
+}
+#endif
+
+#ifndef NO_PathGeometry_1AddGeometry
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(PathGeometry_1AddGeometry)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(PathGeometry_1AddGeometry)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, PathGeometry_1AddGeometry_FUNC);
+	((PathGeometry^)TO_OBJECT(arg0))->AddGeometry((Geometry^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, PathGeometry_1AddGeometry_FUNC);
+}
+#endif
+
+#ifndef NO_PathGeometry_1Bounds
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PathGeometry_1Bounds)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(PathGeometry_1Bounds)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PathGeometry_1Bounds_FUNC);
+	rc = (jint)TO_HANDLE(((PathGeometry^)TO_OBJECT(arg0))->Bounds);
+	OS_NATIVE_EXIT(env, that, PathGeometry_1Bounds_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PathGeometry_1Clone
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PathGeometry_1Clone)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(PathGeometry_1Clone)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PathGeometry_1Clone_FUNC);
+	rc = (jint)TO_HANDLE(((PathGeometry^)TO_OBJECT(arg0))->Clone());
+	OS_NATIVE_EXIT(env, that, PathGeometry_1Clone_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PathGeometry_1Figures__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PathGeometry_1Figures__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(PathGeometry_1Figures__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PathGeometry_1Figures__I_FUNC);
+	rc = (jint)TO_HANDLE(((PathGeometry^)TO_OBJECT(arg0))->Figures);
+	OS_NATIVE_EXIT(env, that, PathGeometry_1Figures__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PathGeometry_1Figures__II
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PathGeometry_1Figures__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(PathGeometry_1Figures__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PathGeometry_1Figures__II_FUNC);
+	rc = (jint)TO_HANDLE(((PathGeometry^)TO_OBJECT(arg0))->Figures[arg1]);
+	OS_NATIVE_EXIT(env, that, PathGeometry_1Figures__II_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PathGeometry_1FillRule
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(PathGeometry_1FillRule)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(PathGeometry_1FillRule)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, PathGeometry_1FillRule_FUNC);
+	((PathGeometry^)TO_OBJECT(arg0))->FillRule = ((FillRule)arg1);
+	OS_NATIVE_EXIT(env, that, PathGeometry_1FillRule_FUNC);
+}
+#endif
+
+#ifndef NO_PathSegmentCollection_1Add
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(PathSegmentCollection_1Add)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(PathSegmentCollection_1Add)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, PathSegmentCollection_1Add_FUNC);
+	((PathSegmentCollection^)TO_OBJECT(arg0))->Add((PathSegment^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, PathSegmentCollection_1Add_FUNC);
+}
+#endif
+
+#ifndef NO_PathSegmentCollection_1Count
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PathSegmentCollection_1Count)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(PathSegmentCollection_1Count)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PathSegmentCollection_1Count_FUNC);
+	rc = (jint)((PathSegmentCollection^)TO_OBJECT(arg0))->Count;
+	OS_NATIVE_EXIT(env, that, PathSegmentCollection_1Count_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Path_1Data
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Path_1Data)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Path_1Data)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Path_1Data_FUNC);
+	((Path^)TO_OBJECT(arg0))->Data = ((Geometry^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Path_1Data_FUNC);
+}
+#endif
+
+#ifndef NO_Path_1Fill
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Path_1Fill)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Path_1Fill)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Path_1Fill_FUNC);
+	((Path^)TO_OBJECT(arg0))->Fill = ((Brush^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Path_1Fill_FUNC);
+}
+#endif
+
+#ifndef NO_Path_1Stretch
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Path_1Stretch)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Path_1Stretch)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Path_1Stretch_FUNC);
+	((Path^)TO_OBJECT(arg0))->Stretch = ((Stretch)arg1);
+	OS_NATIVE_EXIT(env, that, Path_1Stretch_FUNC);
+}
+#endif
+
+#ifndef NO_Pen_1Brush__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Pen_1Brush__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Pen_1Brush__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Pen_1Brush__I_FUNC);
+	rc = (jint)TO_HANDLE(((Pen^)TO_OBJECT(arg0))->Brush);
+	OS_NATIVE_EXIT(env, that, Pen_1Brush__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Pen_1Brush__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Pen_1Brush__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Pen_1Brush__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Pen_1Brush__II_FUNC);
+	((Pen^)TO_OBJECT(arg0))->Brush = ((Brush^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Pen_1Brush__II_FUNC);
+}
+#endif
+
+#ifndef NO_Pen_1DashCap
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Pen_1DashCap)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Pen_1DashCap)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Pen_1DashCap_FUNC);
+	((Pen^)TO_OBJECT(arg0))->DashCap = ((PenLineCap)arg1);
+	OS_NATIVE_EXIT(env, that, Pen_1DashCap_FUNC);
+}
+#endif
+
+#ifndef NO_Pen_1DashStyle
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Pen_1DashStyle)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Pen_1DashStyle)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Pen_1DashStyle_FUNC);
+	((Pen^)TO_OBJECT(arg0))->DashStyle = ((DashStyle^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Pen_1DashStyle_FUNC);
+}
+#endif
+
+#ifndef NO_Pen_1EndLineCap
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Pen_1EndLineCap)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Pen_1EndLineCap)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Pen_1EndLineCap_FUNC);
+	((Pen^)TO_OBJECT(arg0))->EndLineCap = ((PenLineCap)arg1);
+	OS_NATIVE_EXIT(env, that, Pen_1EndLineCap_FUNC);
+}
+#endif
+
+#ifndef NO_Pen_1LineJoin
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Pen_1LineJoin)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Pen_1LineJoin)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Pen_1LineJoin_FUNC);
+	((Pen^)TO_OBJECT(arg0))->LineJoin = ((PenLineJoin)arg1);
+	OS_NATIVE_EXIT(env, that, Pen_1LineJoin_FUNC);
+}
+#endif
+
+#ifndef NO_Pen_1MiterLimit
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Pen_1MiterLimit)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Pen_1MiterLimit)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Pen_1MiterLimit_FUNC);
+	((Pen^)TO_OBJECT(arg0))->MiterLimit = (arg1);
+	OS_NATIVE_EXIT(env, that, Pen_1MiterLimit_FUNC);
+}
+#endif
+
+#ifndef NO_Pen_1StartLineCap
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Pen_1StartLineCap)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Pen_1StartLineCap)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Pen_1StartLineCap_FUNC);
+	((Pen^)TO_OBJECT(arg0))->StartLineCap = ((PenLineCap)arg1);
+	OS_NATIVE_EXIT(env, that, Pen_1StartLineCap_FUNC);
+}
+#endif
+
+#ifndef NO_Pen_1Thickness
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Pen_1Thickness)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Pen_1Thickness)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Pen_1Thickness_FUNC);
+	((Pen^)TO_OBJECT(arg0))->Thickness = (arg1);
+	OS_NATIVE_EXIT(env, that, Pen_1Thickness_FUNC);
+}
+#endif
+
+#ifndef NO_PixelFormat_1BitsPerPixel
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PixelFormat_1BitsPerPixel)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(PixelFormat_1BitsPerPixel)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PixelFormat_1BitsPerPixel_FUNC);
+	rc = (jint)((PixelFormat^)TO_OBJECT(arg0))->BitsPerPixel;
+	OS_NATIVE_EXIT(env, that, PixelFormat_1BitsPerPixel_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PixelFormats_1Bgr101010
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Bgr101010)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Bgr101010)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PixelFormats_1Bgr101010_FUNC);
+	rc = (jint)TO_HANDLE(PixelFormats::Bgr101010);
+	OS_NATIVE_EXIT(env, that, PixelFormats_1Bgr101010_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PixelFormats_1Bgr24
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Bgr24)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Bgr24)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PixelFormats_1Bgr24_FUNC);
+	rc = (jint)TO_HANDLE(PixelFormats::Bgr24);
+	OS_NATIVE_EXIT(env, that, PixelFormats_1Bgr24_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PixelFormats_1Bgr32
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Bgr32)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Bgr32)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PixelFormats_1Bgr32_FUNC);
+	rc = (jint)TO_HANDLE(PixelFormats::Bgr32);
+	OS_NATIVE_EXIT(env, that, PixelFormats_1Bgr32_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PixelFormats_1Bgr555
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Bgr555)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Bgr555)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PixelFormats_1Bgr555_FUNC);
+	rc = (jint)TO_HANDLE(PixelFormats::Bgr555);
+	OS_NATIVE_EXIT(env, that, PixelFormats_1Bgr555_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PixelFormats_1Bgr565
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Bgr565)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Bgr565)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PixelFormats_1Bgr565_FUNC);
+	rc = (jint)TO_HANDLE(PixelFormats::Bgr565);
+	OS_NATIVE_EXIT(env, that, PixelFormats_1Bgr565_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PixelFormats_1Bgra32
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Bgra32)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Bgra32)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PixelFormats_1Bgra32_FUNC);
+	rc = (jint)TO_HANDLE(PixelFormats::Bgra32);
+	OS_NATIVE_EXIT(env, that, PixelFormats_1Bgra32_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PixelFormats_1BlackWhite
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1BlackWhite)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1BlackWhite)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PixelFormats_1BlackWhite_FUNC);
+	rc = (jint)TO_HANDLE(PixelFormats::BlackWhite);
+	OS_NATIVE_EXIT(env, that, PixelFormats_1BlackWhite_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PixelFormats_1Default
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Default)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Default)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PixelFormats_1Default_FUNC);
+	rc = (jint)TO_HANDLE(PixelFormats::Default);
+	OS_NATIVE_EXIT(env, that, PixelFormats_1Default_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PixelFormats_1Indexed1
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Indexed1)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Indexed1)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PixelFormats_1Indexed1_FUNC);
+	rc = (jint)TO_HANDLE(PixelFormats::Indexed1);
+	OS_NATIVE_EXIT(env, that, PixelFormats_1Indexed1_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PixelFormats_1Indexed2
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Indexed2)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Indexed2)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PixelFormats_1Indexed2_FUNC);
+	rc = (jint)TO_HANDLE(PixelFormats::Indexed2);
+	OS_NATIVE_EXIT(env, that, PixelFormats_1Indexed2_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PixelFormats_1Indexed4
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Indexed4)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Indexed4)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PixelFormats_1Indexed4_FUNC);
+	rc = (jint)TO_HANDLE(PixelFormats::Indexed4);
+	OS_NATIVE_EXIT(env, that, PixelFormats_1Indexed4_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PixelFormats_1Indexed8
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Indexed8)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Indexed8)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PixelFormats_1Indexed8_FUNC);
+	rc = (jint)TO_HANDLE(PixelFormats::Indexed8);
+	OS_NATIVE_EXIT(env, that, PixelFormats_1Indexed8_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PixelFormats_1Pbgra32
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Pbgra32)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Pbgra32)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PixelFormats_1Pbgra32_FUNC);
+	rc = (jint)TO_HANDLE(PixelFormats::Pbgra32);
+	OS_NATIVE_EXIT(env, that, PixelFormats_1Pbgra32_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PixelFormats_1Rgb24
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Rgb24)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(PixelFormats_1Rgb24)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PixelFormats_1Rgb24_FUNC);
+	rc = (jint)TO_HANDLE(PixelFormats::Rgb24);
+	OS_NATIVE_EXIT(env, that, PixelFormats_1Rgb24_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PointCollection_1Add
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(PointCollection_1Add)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(PointCollection_1Add)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, PointCollection_1Add_FUNC);
+	((PointCollection^)TO_OBJECT(arg0))->Add((Point)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, PointCollection_1Add_FUNC);
+}
+#endif
+
+#ifndef NO_Point_1X
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Point_1X)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Point_1X)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Point_1X_FUNC);
+	rc = (jdouble)((Point^)TO_OBJECT(arg0))->X;
+	OS_NATIVE_EXIT(env, that, Point_1X_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Point_1Y
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Point_1Y)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Point_1Y)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Point_1Y_FUNC);
+	rc = (jdouble)((Point^)TO_OBJECT(arg0))->Y;
+	OS_NATIVE_EXIT(env, that, Point_1Y_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Popup_1AllowsTransparency
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Popup_1AllowsTransparency)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Popup_1AllowsTransparency)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, Popup_1AllowsTransparency_FUNC);
+	((Popup^)TO_OBJECT(arg0))->AllowsTransparency = (arg1);
+	OS_NATIVE_EXIT(env, that, Popup_1AllowsTransparency_FUNC);
+}
+#endif
+
+#ifndef NO_Popup_1Child__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Popup_1Child__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Popup_1Child__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Popup_1Child__I_FUNC);
+	rc = (jint)TO_HANDLE(((Popup^)TO_OBJECT(arg0))->Child);
+	OS_NATIVE_EXIT(env, that, Popup_1Child__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Popup_1Child__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Popup_1Child__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Popup_1Child__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Popup_1Child__II_FUNC);
+	((Popup^)TO_OBJECT(arg0))->Child = ((UIElement^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Popup_1Child__II_FUNC);
+}
+#endif
+
+#ifndef NO_Popup_1Closed
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Popup_1Closed)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Popup_1Closed)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Popup_1Closed_FUNC);
+	((Popup^)TO_OBJECT(arg0))->Closed += ((EventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Popup_1Closed_FUNC);
+}
+#endif
+
+#ifndef NO_Popup_1HorizontalOffset__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Popup_1HorizontalOffset__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Popup_1HorizontalOffset__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Popup_1HorizontalOffset__I_FUNC);
+	rc = (jdouble)((Popup^)TO_OBJECT(arg0))->HorizontalOffset;
+	OS_NATIVE_EXIT(env, that, Popup_1HorizontalOffset__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Popup_1HorizontalOffset__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Popup_1HorizontalOffset__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Popup_1HorizontalOffset__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Popup_1HorizontalOffset__ID_FUNC);
+	((Popup^)TO_OBJECT(arg0))->HorizontalOffset = (arg1);
+	OS_NATIVE_EXIT(env, that, Popup_1HorizontalOffset__ID_FUNC);
+}
+#endif
+
+#ifndef NO_Popup_1IsOpen__I
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(Popup_1IsOpen__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(Popup_1IsOpen__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, Popup_1IsOpen__I_FUNC);
+	rc = (jboolean)((Popup^)TO_OBJECT(arg0))->IsOpen;
+	OS_NATIVE_EXIT(env, that, Popup_1IsOpen__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Popup_1IsOpen__IZ
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Popup_1IsOpen__IZ)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Popup_1IsOpen__IZ)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, Popup_1IsOpen__IZ_FUNC);
+	((Popup^)TO_OBJECT(arg0))->IsOpen = (arg1);
+	OS_NATIVE_EXIT(env, that, Popup_1IsOpen__IZ_FUNC);
+}
+#endif
+
+#ifndef NO_Popup_1Opened
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Popup_1Opened)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Popup_1Opened)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Popup_1Opened_FUNC);
+	((Popup^)TO_OBJECT(arg0))->Opened += ((EventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Popup_1Opened_FUNC);
+}
+#endif
+
+#ifndef NO_Popup_1VerticalOffset__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Popup_1VerticalOffset__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Popup_1VerticalOffset__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Popup_1VerticalOffset__I_FUNC);
+	rc = (jdouble)((Popup^)TO_OBJECT(arg0))->VerticalOffset;
+	OS_NATIVE_EXIT(env, that, Popup_1VerticalOffset__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Popup_1VerticalOffset__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Popup_1VerticalOffset__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Popup_1VerticalOffset__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Popup_1VerticalOffset__ID_FUNC);
+	((Popup^)TO_OBJECT(arg0))->VerticalOffset = (arg1);
+	OS_NATIVE_EXIT(env, that, Popup_1VerticalOffset__ID_FUNC);
+}
+#endif
+
+#ifndef NO_PresentationSource_1CurrentSources
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PresentationSource_1CurrentSources)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(PresentationSource_1CurrentSources)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PresentationSource_1CurrentSources_FUNC);
+	rc = (jint)TO_HANDLE(PresentationSource::CurrentSources);
+	OS_NATIVE_EXIT(env, that, PresentationSource_1CurrentSources_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PresentationSource_1FromVisual
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PresentationSource_1FromVisual)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(PresentationSource_1FromVisual)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PresentationSource_1FromVisual_FUNC);
+	rc = (jint)TO_HANDLE(PresentationSource::FromVisual((Visual^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, PresentationSource_1FromVisual_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_PresentationSource_1RootVisual
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(PresentationSource_1RootVisual)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(PresentationSource_1RootVisual)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, PresentationSource_1RootVisual_FUNC);
+	rc = (jint)TO_HANDLE(((PresentationSource^)TO_OBJECT(arg0))->RootVisual);
+	OS_NATIVE_EXIT(env, that, PresentationSource_1RootVisual_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ProgressBar_1IsIndeterminate__I
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ProgressBar_1IsIndeterminate__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(ProgressBar_1IsIndeterminate__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, ProgressBar_1IsIndeterminate__I_FUNC);
+	((ProgressBar ^)TO_OBJECT(arg0))->IsIndeterminate;
+	OS_NATIVE_EXIT(env, that, ProgressBar_1IsIndeterminate__I_FUNC);
+}
+#endif
+
+#ifndef NO_ProgressBar_1IsIndeterminate__IZ
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ProgressBar_1IsIndeterminate__IZ)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ProgressBar_1IsIndeterminate__IZ)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, ProgressBar_1IsIndeterminate__IZ_FUNC);
+	((ProgressBar ^)TO_OBJECT(arg0))->IsIndeterminate = (arg1);
+	OS_NATIVE_EXIT(env, that, ProgressBar_1IsIndeterminate__IZ_FUNC);
+}
+#endif
+
+#ifndef NO_ProgressBar_1Orientation
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ProgressBar_1Orientation)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ProgressBar_1Orientation)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ProgressBar_1Orientation_FUNC);
+	((ProgressBar ^)TO_OBJECT(arg0))->Orientation = ((Orientation)arg1);
+	OS_NATIVE_EXIT(env, that, ProgressBar_1Orientation_FUNC);
+}
+#endif
+
+#ifndef NO_PropertyInfo_1SetValue
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(PropertyInfo_1SetValue)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3);
+JNIEXPORT void JNICALL OS_NATIVE(PropertyInfo_1SetValue)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+{
+	OS_NATIVE_ENTER(env, that, PropertyInfo_1SetValue_FUNC);
+	((PropertyInfo^)TO_OBJECT(arg0))->SetValue((Object^)TO_OBJECT(arg1), (Object^)TO_OBJECT(arg2), (array<Object^>^)TO_OBJECT(arg3));
+	OS_NATIVE_EXIT(env, that, PropertyInfo_1SetValue_FUNC);
+}
+#endif
+
+#ifndef NO_PropertyInfo_1SetValueBoolean
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(PropertyInfo_1SetValueBoolean)(JNIEnv *env, jclass that, jint arg0, jint arg1, jboolean arg2, jint arg3);
+JNIEXPORT void JNICALL OS_NATIVE(PropertyInfo_1SetValueBoolean)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jboolean arg2, jint arg3)
+{
+	OS_NATIVE_ENTER(env, that, PropertyInfo_1SetValueBoolean_FUNC);
+	((PropertyInfo^)TO_OBJECT(arg0))->PropertyInfo::SetValue((Object^)TO_OBJECT(arg1), (bool)arg2, (array<Object^>^)TO_OBJECT(arg3));
+	OS_NATIVE_EXIT(env, that, PropertyInfo_1SetValueBoolean_FUNC);
+}
+#endif
+
+#ifndef NO_QueryContinueDragEventArgs_1Action
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(QueryContinueDragEventArgs_1Action)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(QueryContinueDragEventArgs_1Action)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, QueryContinueDragEventArgs_1Action_FUNC);
+	((QueryContinueDragEventArgs^)TO_OBJECT(arg0))->Action = ((DragAction)arg1);
+	OS_NATIVE_EXIT(env, that, QueryContinueDragEventArgs_1Action_FUNC);
+}
+#endif
+
+#ifndef NO_QueryContinueDragEventArgs_1EscapePressed
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(QueryContinueDragEventArgs_1EscapePressed)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(QueryContinueDragEventArgs_1EscapePressed)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, QueryContinueDragEventArgs_1EscapePressed_FUNC);
+	rc = (jboolean)((QueryContinueDragEventArgs^)TO_OBJECT(arg0))->EscapePressed;
+	OS_NATIVE_EXIT(env, that, QueryContinueDragEventArgs_1EscapePressed_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_RangeBase_1LargeChange__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(RangeBase_1LargeChange__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(RangeBase_1LargeChange__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, RangeBase_1LargeChange__I_FUNC);
+	rc = (jdouble)((RangeBase ^)TO_OBJECT(arg0))->LargeChange;
+	OS_NATIVE_EXIT(env, that, RangeBase_1LargeChange__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_RangeBase_1LargeChange__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(RangeBase_1LargeChange__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(RangeBase_1LargeChange__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, RangeBase_1LargeChange__ID_FUNC);
+	((RangeBase ^)TO_OBJECT(arg0))->LargeChange = (arg1);
+	OS_NATIVE_EXIT(env, that, RangeBase_1LargeChange__ID_FUNC);
+}
+#endif
+
+#ifndef NO_RangeBase_1Maximum__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(RangeBase_1Maximum__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(RangeBase_1Maximum__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, RangeBase_1Maximum__I_FUNC);
+	rc = (jdouble)((RangeBase ^)TO_OBJECT(arg0))->Maximum;
+	OS_NATIVE_EXIT(env, that, RangeBase_1Maximum__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_RangeBase_1Maximum__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(RangeBase_1Maximum__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(RangeBase_1Maximum__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, RangeBase_1Maximum__ID_FUNC);
+	((RangeBase ^)TO_OBJECT(arg0))->Maximum = (arg1);
+	OS_NATIVE_EXIT(env, that, RangeBase_1Maximum__ID_FUNC);
+}
+#endif
+
+#ifndef NO_RangeBase_1Minimum__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(RangeBase_1Minimum__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(RangeBase_1Minimum__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, RangeBase_1Minimum__I_FUNC);
+	rc = (jdouble)((RangeBase ^)TO_OBJECT(arg0))->Minimum;
+	OS_NATIVE_EXIT(env, that, RangeBase_1Minimum__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_RangeBase_1Minimum__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(RangeBase_1Minimum__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(RangeBase_1Minimum__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, RangeBase_1Minimum__ID_FUNC);
+	((RangeBase ^)TO_OBJECT(arg0))->Minimum = (arg1);
+	OS_NATIVE_EXIT(env, that, RangeBase_1Minimum__ID_FUNC);
+}
+#endif
+
+#ifndef NO_RangeBase_1SmallChange__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(RangeBase_1SmallChange__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(RangeBase_1SmallChange__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, RangeBase_1SmallChange__I_FUNC);
+	rc = (jdouble)((RangeBase ^)TO_OBJECT(arg0))->SmallChange;
+	OS_NATIVE_EXIT(env, that, RangeBase_1SmallChange__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_RangeBase_1SmallChange__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(RangeBase_1SmallChange__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(RangeBase_1SmallChange__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, RangeBase_1SmallChange__ID_FUNC);
+	((RangeBase ^)TO_OBJECT(arg0))->SmallChange = (arg1);
+	OS_NATIVE_EXIT(env, that, RangeBase_1SmallChange__ID_FUNC);
+}
+#endif
+
+#ifndef NO_RangeBase_1Value__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(RangeBase_1Value__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(RangeBase_1Value__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, RangeBase_1Value__I_FUNC);
+	rc = (jdouble)((RangeBase ^)TO_OBJECT(arg0))->Value;
+	OS_NATIVE_EXIT(env, that, RangeBase_1Value__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_RangeBase_1Value__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(RangeBase_1Value__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(RangeBase_1Value__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, RangeBase_1Value__ID_FUNC);
+	((RangeBase ^)TO_OBJECT(arg0))->Value = (arg1);
+	OS_NATIVE_EXIT(env, that, RangeBase_1Value__ID_FUNC);
+}
+#endif
+
+#ifndef NO_RangeBase_1ValueChanged
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(RangeBase_1ValueChanged)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(RangeBase_1ValueChanged)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, RangeBase_1ValueChanged_FUNC);
+	((RangeBase ^)TO_OBJECT(arg0))->ValueChanged += ((RoutedPropertyChangedEventHandler<double> ^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, RangeBase_1ValueChanged_FUNC);
+}
+#endif
+
+#ifndef NO_Rect_1Contains
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(Rect_1Contains)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jboolean JNICALL OS_NATIVE(Rect_1Contains)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, Rect_1Contains_FUNC);
+	rc = (jboolean)((Rect^)TO_OBJECT(arg0))->Contains((Point)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Rect_1Contains_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Rect_1Height__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Rect_1Height__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Rect_1Height__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Rect_1Height__I_FUNC);
+	rc = (jdouble)((Rect^)TO_OBJECT(arg0))->Height;
+	OS_NATIVE_EXIT(env, that, Rect_1Height__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Rect_1Height__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Rect_1Height__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Rect_1Height__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Rect_1Height__ID_FUNC);
+	((Rect^)TO_OBJECT(arg0))->Height = (arg1);
+	OS_NATIVE_EXIT(env, that, Rect_1Height__ID_FUNC);
+}
+#endif
+
+#ifndef NO_Rect_1Intersect
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Rect_1Intersect)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Rect_1Intersect)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Rect_1Intersect_FUNC);
+	((Rect^)TO_OBJECT(arg0))->Intersect((Rect)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Rect_1Intersect_FUNC);
+}
+#endif
+
+#ifndef NO_Rect_1Union
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Rect_1Union)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Rect_1Union)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Rect_1Union_FUNC);
+	((Rect^)TO_OBJECT(arg0))->Union((Rect)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Rect_1Union_FUNC);
+}
+#endif
+
+#ifndef NO_Rect_1Width__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Rect_1Width__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Rect_1Width__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Rect_1Width__I_FUNC);
+	rc = (jdouble)((Rect^)TO_OBJECT(arg0))->Width;
+	OS_NATIVE_EXIT(env, that, Rect_1Width__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Rect_1Width__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Rect_1Width__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Rect_1Width__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Rect_1Width__ID_FUNC);
+	((Rect^)TO_OBJECT(arg0))->Width = (arg1);
+	OS_NATIVE_EXIT(env, that, Rect_1Width__ID_FUNC);
+}
+#endif
+
+#ifndef NO_Rect_1X__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Rect_1X__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Rect_1X__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Rect_1X__I_FUNC);
+	rc = (jdouble)((Rect^)TO_OBJECT(arg0))->X;
+	OS_NATIVE_EXIT(env, that, Rect_1X__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Rect_1X__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Rect_1X__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Rect_1X__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Rect_1X__ID_FUNC);
+	((Rect^)TO_OBJECT(arg0))->X = (arg1);
+	OS_NATIVE_EXIT(env, that, Rect_1X__ID_FUNC);
+}
+#endif
+
+#ifndef NO_Rect_1Y__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Rect_1Y__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Rect_1Y__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Rect_1Y__I_FUNC);
+	rc = (jdouble)((Rect^)TO_OBJECT(arg0))->Y;
+	OS_NATIVE_EXIT(env, that, Rect_1Y__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Rect_1Y__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Rect_1Y__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Rect_1Y__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Rect_1Y__ID_FUNC);
+	((Rect^)TO_OBJECT(arg0))->Y = (arg1);
+	OS_NATIVE_EXIT(env, that, Rect_1Y__ID_FUNC);
+}
+#endif
+
+#ifndef NO_Rectangle_1Height
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Rectangle_1Height)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Rectangle_1Height)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Rectangle_1Height_FUNC);
+	rc = (jint)((System::Drawing::Rectangle^)TO_OBJECT(arg0))->Height;
+	OS_NATIVE_EXIT(env, that, Rectangle_1Height_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Rectangle_1Width
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Rectangle_1Width)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Rectangle_1Width)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Rectangle_1Width_FUNC);
+	rc = (jint)((System::Drawing::Rectangle^)TO_OBJECT(arg0))->Width;
+	OS_NATIVE_EXIT(env, that, Rectangle_1Width_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Rectangle_1X
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Rectangle_1X)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Rectangle_1X)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Rectangle_1X_FUNC);
+	rc = (jint)((System::Drawing::Rectangle^)TO_OBJECT(arg0))->X;
+	OS_NATIVE_EXIT(env, that, Rectangle_1X_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Rectangle_1Y
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Rectangle_1Y)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Rectangle_1Y)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Rectangle_1Y_FUNC);
+	rc = (jint)((System::Drawing::Rectangle^)TO_OBJECT(arg0))->Y;
+	OS_NATIVE_EXIT(env, that, Rectangle_1Y_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_RegistryKey_1GetSubKeyNames
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(RegistryKey_1GetSubKeyNames)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(RegistryKey_1GetSubKeyNames)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, RegistryKey_1GetSubKeyNames_FUNC);
+	rc = (jint)TO_HANDLE(((RegistryKey^)TO_OBJECT(arg0))->GetSubKeyNames());
+	OS_NATIVE_EXIT(env, that, RegistryKey_1GetSubKeyNames_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_RegistryKey_1GetValue
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(RegistryKey_1GetValue)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(RegistryKey_1GetValue)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, RegistryKey_1GetValue_FUNC);
+	rc = (jint)TO_HANDLE(((RegistryKey^)TO_OBJECT(arg0))->GetValue((String^)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, RegistryKey_1GetValue_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_RegistryKey_1OpenSubKey
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(RegistryKey_1OpenSubKey)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(RegistryKey_1OpenSubKey)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, RegistryKey_1OpenSubKey_FUNC);
+	rc = (jint)TO_HANDLE(((RegistryKey^)TO_OBJECT(arg0))->OpenSubKey((String^)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, RegistryKey_1OpenSubKey_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Registry_1ClassesRoot
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Registry_1ClassesRoot)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Registry_1ClassesRoot)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Registry_1ClassesRoot_FUNC);
+	rc = (jint)TO_HANDLE(Registry::ClassesRoot);
+	OS_NATIVE_EXIT(env, that, Registry_1ClassesRoot_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_RelativeSource_1AncestorType
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(RelativeSource_1AncestorType)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(RelativeSource_1AncestorType)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, RelativeSource_1AncestorType_FUNC);
+	((RelativeSource^)TO_OBJECT(arg0))->AncestorType = ((Type^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, RelativeSource_1AncestorType_FUNC);
+}
+#endif
+
+#ifndef NO_RenderOptions_1GetBitmapScalingMode
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(RenderOptions_1GetBitmapScalingMode)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(RenderOptions_1GetBitmapScalingMode)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, RenderOptions_1GetBitmapScalingMode_FUNC);
+	rc = (jint)RenderOptions::GetBitmapScalingMode((DependencyObject^)TO_OBJECT(arg0));
+	OS_NATIVE_EXIT(env, that, RenderOptions_1GetBitmapScalingMode_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_RenderOptions_1SetBitmapScalingMode
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(RenderOptions_1SetBitmapScalingMode)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(RenderOptions_1SetBitmapScalingMode)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, RenderOptions_1SetBitmapScalingMode_FUNC);
+	RenderOptions::SetBitmapScalingMode((DependencyObject^)TO_OBJECT(arg0), (BitmapScalingMode)arg1);
+	OS_NATIVE_EXIT(env, that, RenderOptions_1SetBitmapScalingMode_FUNC);
+}
+#endif
+
+#ifndef NO_RenderOptions_1SetEdgeMode
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(RenderOptions_1SetEdgeMode)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(RenderOptions_1SetEdgeMode)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, RenderOptions_1SetEdgeMode_FUNC);
+	RenderOptions::SetEdgeMode((DependencyObject^)TO_OBJECT(arg0), (EdgeMode)arg1);
+	OS_NATIVE_EXIT(env, that, RenderOptions_1SetEdgeMode_FUNC);
+}
+#endif
+
+#ifndef NO_RenderTargetBitmap_1Render
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(RenderTargetBitmap_1Render)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(RenderTargetBitmap_1Render)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, RenderTargetBitmap_1Render_FUNC);
+	((RenderTargetBitmap^)TO_OBJECT(arg0))->Render((Visual^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, RenderTargetBitmap_1Render_FUNC);
+}
+#endif
+
+#ifndef NO_RepeatBehavior_1Forever
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(RepeatBehavior_1Forever)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(RepeatBehavior_1Forever)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, RepeatBehavior_1Forever_FUNC);
+	rc = (jint)TO_HANDLE(RepeatBehavior::Forever);
+	OS_NATIVE_EXIT(env, that, RepeatBehavior_1Forever_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ResourceDictionary_1Source
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ResourceDictionary_1Source)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ResourceDictionary_1Source)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ResourceDictionary_1Source_FUNC);
+	((ResourceDictionary^)TO_OBJECT(arg0))->Source = ((Uri^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, ResourceDictionary_1Source_FUNC);
+}
+#endif
+
+#ifndef NO_RoutedEventArgs_1Handled
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(RoutedEventArgs_1Handled)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(RoutedEventArgs_1Handled)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, RoutedEventArgs_1Handled_FUNC);
+	((RoutedEventArgs^)TO_OBJECT(arg0))->Handled = (arg1);
+	OS_NATIVE_EXIT(env, that, RoutedEventArgs_1Handled_FUNC);
+}
+#endif
+
+#ifndef NO_RoutedEventArgs_1OriginalSource
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(RoutedEventArgs_1OriginalSource)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(RoutedEventArgs_1OriginalSource)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, RoutedEventArgs_1OriginalSource_FUNC);
+	rc = (jint)TO_HANDLE(((RoutedEventArgs^)TO_OBJECT(arg0))->OriginalSource);
+	OS_NATIVE_EXIT(env, that, RoutedEventArgs_1OriginalSource_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_RoutedEventArgs_1Source
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(RoutedEventArgs_1Source)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(RoutedEventArgs_1Source)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, RoutedEventArgs_1Source_FUNC);
+	rc = (jint)TO_HANDLE(((RoutedEventArgs^)TO_OBJECT(arg0))->Source);
+	OS_NATIVE_EXIT(env, that, RoutedEventArgs_1Source_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_RoutedEventArgs_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(RoutedEventArgs_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(RoutedEventArgs_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, RoutedEventArgs_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(RoutedEventArgs::typeid);
+	OS_NATIVE_EXIT(env, that, RoutedEventArgs_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_RoutedPropertyChangedEventArgs_1NewValue
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(RoutedPropertyChangedEventArgs_1NewValue)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(RoutedPropertyChangedEventArgs_1NewValue)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, RoutedPropertyChangedEventArgs_1NewValue_FUNC);
+	rc = (jint)TO_HANDLE(((RoutedPropertyChangedEventArgs<Object^>^)TO_OBJECT(arg0))->NewValue);
+	OS_NATIVE_EXIT(env, that, RoutedPropertyChangedEventArgs_1NewValue_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_RoutedPropertyChangedEventArgs_1OldValue
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(RoutedPropertyChangedEventArgs_1OldValue)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(RoutedPropertyChangedEventArgs_1OldValue)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, RoutedPropertyChangedEventArgs_1OldValue_FUNC);
+	rc = (jint)TO_HANDLE(((RoutedPropertyChangedEventArgs<Object^>^)TO_OBJECT(arg0))->OldValue);
+	OS_NATIVE_EXIT(env, that, RoutedPropertyChangedEventArgs_1OldValue_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_RowDefinitionCollection_1Add
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(RowDefinitionCollection_1Add)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(RowDefinitionCollection_1Add)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, RowDefinitionCollection_1Add_FUNC);
+	((RowDefinitionCollection^)TO_OBJECT(arg0))->Add((RowDefinition^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, RowDefinitionCollection_1Add_FUNC);
+}
+#endif
+
+#ifndef NO_RowDefinition_1Height
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(RowDefinition_1Height)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(RowDefinition_1Height)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, RowDefinition_1Height_FUNC);
+	((RowDefinition^)TO_OBJECT(arg0))->Height = ((GridLength)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, RowDefinition_1Height_FUNC);
+}
+#endif
+
+#ifndef NO_Run_1Text
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Run_1Text)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Run_1Text)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Run_1Text_FUNC);
+	((Run^)TO_OBJECT(arg0))->Text = ((String^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Run_1Text_FUNC);
+}
+#endif
+
+#ifndef NO_SaveFileDialog_1OverwritePrompt
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(SaveFileDialog_1OverwritePrompt)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(SaveFileDialog_1OverwritePrompt)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, SaveFileDialog_1OverwritePrompt_FUNC);
+	((SaveFileDialog^)TO_OBJECT(arg0))->OverwritePrompt = (arg1);
+	OS_NATIVE_EXIT(env, that, SaveFileDialog_1OverwritePrompt_FUNC);
+}
+#endif
+
+#ifndef NO_Screen_1AllScreens
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Screen_1AllScreens)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Screen_1AllScreens)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Screen_1AllScreens_FUNC);
+	rc = (jint)TO_HANDLE(System::Windows::Forms::Screen::AllScreens);
+	OS_NATIVE_EXIT(env, that, Screen_1AllScreens_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Screen_1Bounds
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Screen_1Bounds)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Screen_1Bounds)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Screen_1Bounds_FUNC);
+	rc = (jint)TO_HANDLE(((System::Windows::Forms::Screen^)TO_OBJECT(arg0))->Bounds);
+	OS_NATIVE_EXIT(env, that, Screen_1Bounds_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Screen_1PrimaryScreen
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Screen_1PrimaryScreen)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Screen_1PrimaryScreen)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Screen_1PrimaryScreen_FUNC);
+	rc = (jint)TO_HANDLE(System::Windows::Forms::Screen::PrimaryScreen);
+	OS_NATIVE_EXIT(env, that, Screen_1PrimaryScreen_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Screen_1WorkingArea
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Screen_1WorkingArea)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Screen_1WorkingArea)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Screen_1WorkingArea_FUNC);
+	rc = (jint)TO_HANDLE(((System::Windows::Forms::Screen^)TO_OBJECT(arg0))->WorkingArea);
+	OS_NATIVE_EXIT(env, that, Screen_1WorkingArea_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ScrollBar_1Orientation__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ScrollBar_1Orientation__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ScrollBar_1Orientation__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ScrollBar_1Orientation__I_FUNC);
+	rc = (jint)((ScrollBar^)TO_OBJECT(arg0))->Orientation;
+	OS_NATIVE_EXIT(env, that, ScrollBar_1Orientation__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ScrollBar_1Orientation__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ScrollBar_1Orientation__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ScrollBar_1Orientation__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ScrollBar_1Orientation__II_FUNC);
+	((ScrollBar^)TO_OBJECT(arg0))->Orientation = ((Orientation)arg1);
+	OS_NATIVE_EXIT(env, that, ScrollBar_1Orientation__II_FUNC);
+}
+#endif
+
+#ifndef NO_ScrollBar_1Scroll
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ScrollBar_1Scroll)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ScrollBar_1Scroll)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ScrollBar_1Scroll_FUNC);
+	((ScrollBar^)TO_OBJECT(arg0))->Scroll += ((ScrollEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, ScrollBar_1Scroll_FUNC);
+}
+#endif
+
+#ifndef NO_ScrollBar_1ViewportSize__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(ScrollBar_1ViewportSize__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(ScrollBar_1ViewportSize__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, ScrollBar_1ViewportSize__I_FUNC);
+	rc = (jdouble)((ScrollBar^)TO_OBJECT(arg0))->ViewportSize;
+	OS_NATIVE_EXIT(env, that, ScrollBar_1ViewportSize__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ScrollBar_1ViewportSize__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ScrollBar_1ViewportSize__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ScrollBar_1ViewportSize__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, ScrollBar_1ViewportSize__ID_FUNC);
+	((ScrollBar^)TO_OBJECT(arg0))->ViewportSize = (arg1);
+	OS_NATIVE_EXIT(env, that, ScrollBar_1ViewportSize__ID_FUNC);
+}
+#endif
+
+#ifndef NO_ScrollBar_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ScrollBar_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(ScrollBar_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ScrollBar_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(ScrollBar::typeid);
+	OS_NATIVE_EXIT(env, that, ScrollBar_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ScrollEventArgs_1ScrollEventType
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ScrollEventArgs_1ScrollEventType)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ScrollEventArgs_1ScrollEventType)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ScrollEventArgs_1ScrollEventType_FUNC);
+	rc = (jint)((ScrollEventArgs^)TO_OBJECT(arg0))->ScrollEventType;
+	OS_NATIVE_EXIT(env, that, ScrollEventArgs_1ScrollEventType_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ScrollViewer_1ScrollToVerticalOffset
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ScrollViewer_1ScrollToVerticalOffset)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ScrollViewer_1ScrollToVerticalOffset)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, ScrollViewer_1ScrollToVerticalOffset_FUNC);
+	((ScrollViewer^)TO_OBJECT(arg0))->ScrollToVerticalOffset(arg1);
+	OS_NATIVE_EXIT(env, that, ScrollViewer_1ScrollToVerticalOffset_FUNC);
+}
+#endif
+
+#ifndef NO_ScrollViewer_1SetHorizontalScrollBarVisibility
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ScrollViewer_1SetHorizontalScrollBarVisibility)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ScrollViewer_1SetHorizontalScrollBarVisibility)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ScrollViewer_1SetHorizontalScrollBarVisibility_FUNC);
+	ScrollViewer::SetHorizontalScrollBarVisibility((DependencyObject^)TO_OBJECT(arg0), (ScrollBarVisibility)arg1);
+	OS_NATIVE_EXIT(env, that, ScrollViewer_1SetHorizontalScrollBarVisibility_FUNC);
+}
+#endif
+
+#ifndef NO_ScrollViewer_1SetVerticalScrollBarVisibility
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ScrollViewer_1SetVerticalScrollBarVisibility)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ScrollViewer_1SetVerticalScrollBarVisibility)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ScrollViewer_1SetVerticalScrollBarVisibility_FUNC);
+	ScrollViewer::SetVerticalScrollBarVisibility((DependencyObject^)TO_OBJECT(arg0), (ScrollBarVisibility)arg1);
+	OS_NATIVE_EXIT(env, that, ScrollViewer_1SetVerticalScrollBarVisibility_FUNC);
+}
+#endif
+
+#ifndef NO_ScrollViewer_1VerticalOffset
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(ScrollViewer_1VerticalOffset)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(ScrollViewer_1VerticalOffset)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, ScrollViewer_1VerticalOffset_FUNC);
+	rc = (jdouble)((ScrollViewer^)TO_OBJECT(arg0))->VerticalOffset;
+	OS_NATIVE_EXIT(env, that, ScrollViewer_1VerticalOffset_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ScrollViewer_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ScrollViewer_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(ScrollViewer_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ScrollViewer_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(ScrollViewer::typeid);
+	OS_NATIVE_EXIT(env, that, ScrollViewer_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SelectionChangedEventArgs_1AddedItems
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SelectionChangedEventArgs_1AddedItems)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(SelectionChangedEventArgs_1AddedItems)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SelectionChangedEventArgs_1AddedItems_FUNC);
+	rc = (jint)TO_HANDLE(((SelectionChangedEventArgs^)TO_OBJECT(arg0))->AddedItems);
+	OS_NATIVE_EXIT(env, that, SelectionChangedEventArgs_1AddedItems_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SelectionChangedEventArgs_1RemovedItems
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SelectionChangedEventArgs_1RemovedItems)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(SelectionChangedEventArgs_1RemovedItems)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SelectionChangedEventArgs_1RemovedItems_FUNC);
+	rc = (jint)TO_HANDLE(((SelectionChangedEventArgs^)TO_OBJECT(arg0))->RemovedItems);
+	OS_NATIVE_EXIT(env, that, SelectionChangedEventArgs_1RemovedItems_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Selector_1IsSynchronizedWithCurrentItem
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Selector_1IsSynchronizedWithCurrentItem)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Selector_1IsSynchronizedWithCurrentItem)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, Selector_1IsSynchronizedWithCurrentItem_FUNC);
+	((Selector^)TO_OBJECT(arg0))->IsSynchronizedWithCurrentItem = (arg1);
+	OS_NATIVE_EXIT(env, that, Selector_1IsSynchronizedWithCurrentItem_FUNC);
+}
+#endif
+
+#ifndef NO_Selector_1SelectedIndex__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Selector_1SelectedIndex__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Selector_1SelectedIndex__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Selector_1SelectedIndex__I_FUNC);
+	rc = (jint)((Selector^)TO_OBJECT(arg0))->SelectedIndex;
+	OS_NATIVE_EXIT(env, that, Selector_1SelectedIndex__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Selector_1SelectedIndex__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Selector_1SelectedIndex__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Selector_1SelectedIndex__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Selector_1SelectedIndex__II_FUNC);
+	((Selector^)TO_OBJECT(arg0))->SelectedIndex = (arg1);
+	OS_NATIVE_EXIT(env, that, Selector_1SelectedIndex__II_FUNC);
+}
+#endif
+
+#ifndef NO_Selector_1SelectedItem
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Selector_1SelectedItem)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Selector_1SelectedItem)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Selector_1SelectedItem_FUNC);
+	rc = (jint)TO_HANDLE(((Selector^)TO_OBJECT(arg0))->SelectedItem);
+	OS_NATIVE_EXIT(env, that, Selector_1SelectedItem_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Selector_1SelectedValue
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Selector_1SelectedValue)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Selector_1SelectedValue)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Selector_1SelectedValue_FUNC);
+	rc = (jint)TO_HANDLE(((Selector^)TO_OBJECT(arg0))->SelectedValue);
+	OS_NATIVE_EXIT(env, that, Selector_1SelectedValue_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Selector_1SelectionChanged
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Selector_1SelectionChanged)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Selector_1SelectionChanged)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Selector_1SelectionChanged_FUNC);
+	((Selector^)TO_OBJECT(arg0))->SelectionChanged += ((SelectionChangedEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Selector_1SelectionChanged_FUNC);
+}
+#endif
+
+#ifndef NO_SetterBaseCollection_1Add
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(SetterBaseCollection_1Add)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(SetterBaseCollection_1Add)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, SetterBaseCollection_1Add_FUNC);
+	((SetterBaseCollection^)TO_OBJECT(arg0))->Add((SetterBase^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, SetterBaseCollection_1Add_FUNC);
+}
+#endif
+
+#ifndef NO_Shape_1Fill
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Shape_1Fill)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Shape_1Fill)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Shape_1Fill_FUNC);
+	((Shape^)TO_OBJECT(arg0))->Fill = ((Brush^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Shape_1Fill_FUNC);
+}
+#endif
+
+#ifndef NO_Shape_1Stroke
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Shape_1Stroke)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Shape_1Stroke)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Shape_1Stroke_FUNC);
+	((Shape^)TO_OBJECT(arg0))->Stroke = ((Brush^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Shape_1Stroke_FUNC);
+}
+#endif
+
+#ifndef NO_Shape_1StrokeThickness
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Shape_1StrokeThickness)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Shape_1StrokeThickness)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Shape_1StrokeThickness_FUNC);
+	((Shape^)TO_OBJECT(arg0))->StrokeThickness = (arg1);
+	OS_NATIVE_EXIT(env, that, Shape_1StrokeThickness_FUNC);
+}
+#endif
+
+#ifndef NO_SizeChangedEventArgs_1NewSize
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SizeChangedEventArgs_1NewSize)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(SizeChangedEventArgs_1NewSize)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SizeChangedEventArgs_1NewSize_FUNC);
+	rc = (jint)TO_HANDLE(((SizeChangedEventArgs^)TO_OBJECT(arg0))->NewSize);
+	OS_NATIVE_EXIT(env, that, SizeChangedEventArgs_1NewSize_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SizeChangedEventArgs_1PreviousSize
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SizeChangedEventArgs_1PreviousSize)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(SizeChangedEventArgs_1PreviousSize)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SizeChangedEventArgs_1PreviousSize_FUNC);
+	rc = (jint)TO_HANDLE(((SizeChangedEventArgs^)TO_OBJECT(arg0))->PreviousSize);
+	OS_NATIVE_EXIT(env, that, SizeChangedEventArgs_1PreviousSize_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Size_1Height__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Size_1Height__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Size_1Height__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Size_1Height__I_FUNC);
+	rc = (jdouble)((Size ^)TO_OBJECT(arg0))->Height;
+	OS_NATIVE_EXIT(env, that, Size_1Height__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Size_1Height__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Size_1Height__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Size_1Height__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Size_1Height__ID_FUNC);
+	((Size ^)TO_OBJECT(arg0))->Height = (arg1);
+	OS_NATIVE_EXIT(env, that, Size_1Height__ID_FUNC);
+}
+#endif
+
+#ifndef NO_Size_1Width__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Size_1Width__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Size_1Width__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Size_1Width__I_FUNC);
+	rc = (jdouble)((Size ^)TO_OBJECT(arg0))->Width;
+	OS_NATIVE_EXIT(env, that, Size_1Width__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Size_1Width__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Size_1Width__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Size_1Width__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Size_1Width__ID_FUNC);
+	((Size ^)TO_OBJECT(arg0))->Width = (arg1);
+	OS_NATIVE_EXIT(env, that, Size_1Width__ID_FUNC);
+}
+#endif
+
+#ifndef NO_Slider_1Orientation
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Slider_1Orientation)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Slider_1Orientation)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Slider_1Orientation_FUNC);
+	((Slider ^)TO_OBJECT(arg0))->Orientation = ((Orientation)arg1);
+	OS_NATIVE_EXIT(env, that, Slider_1Orientation_FUNC);
+}
+#endif
+
+#ifndef NO_Slider_1TickFrequency
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Slider_1TickFrequency)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Slider_1TickFrequency)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Slider_1TickFrequency_FUNC);
+	((Slider^)TO_OBJECT(arg0))->TickFrequency = (arg1);
+	OS_NATIVE_EXIT(env, that, Slider_1TickFrequency_FUNC);
+}
+#endif
+
+#ifndef NO_Slider_1TickPlacement
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Slider_1TickPlacement)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Slider_1TickPlacement)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Slider_1TickPlacement_FUNC);
+	((Slider^)TO_OBJECT(arg0))->TickPlacement = ((TickPlacement)arg1);
+	OS_NATIVE_EXIT(env, that, Slider_1TickPlacement_FUNC);
+}
+#endif
+
+#ifndef NO_SplineDoubleKeyFrame_1KeySpline
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(SplineDoubleKeyFrame_1KeySpline)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(SplineDoubleKeyFrame_1KeySpline)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, SplineDoubleKeyFrame_1KeySpline_FUNC);
+	((SplineDoubleKeyFrame^)TO_OBJECT(arg0))->KeySpline = ((KeySpline^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, SplineDoubleKeyFrame_1KeySpline_FUNC);
+}
+#endif
+
+#ifndef NO_SplineInt32KeyFrame_1KeySpline
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(SplineInt32KeyFrame_1KeySpline)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(SplineInt32KeyFrame_1KeySpline)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, SplineInt32KeyFrame_1KeySpline_FUNC);
+	((SplineInt32KeyFrame^)TO_OBJECT(arg0))->KeySpline = ((KeySpline^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, SplineInt32KeyFrame_1KeySpline_FUNC);
+}
+#endif
+
+#ifndef NO_StackPanel_1Orientation
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(StackPanel_1Orientation)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(StackPanel_1Orientation)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, StackPanel_1Orientation_FUNC);
+	((StackPanel^)TO_OBJECT(arg0))->Orientation = ((Orientation)arg1);
+	OS_NATIVE_EXIT(env, that, StackPanel_1Orientation_FUNC);
+}
+#endif
+
+#ifndef NO_StackPanel_1OrientationProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(StackPanel_1OrientationProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(StackPanel_1OrientationProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, StackPanel_1OrientationProperty_FUNC);
+	rc = (jint)TO_HANDLE(StackPanel::OrientationProperty);
+	OS_NATIVE_EXIT(env, that, StackPanel_1OrientationProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_StackPanel_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(StackPanel_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(StackPanel_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, StackPanel_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(StackPanel::typeid);
+	OS_NATIVE_EXIT(env, that, StackPanel_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Storyboard_1Begin
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Storyboard_1Begin)(JNIEnv *env, jclass that, jint arg0, jint arg1, jboolean arg2);
+JNIEXPORT void JNICALL OS_NATIVE(Storyboard_1Begin)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jboolean arg2)
+{
+	OS_NATIVE_ENTER(env, that, Storyboard_1Begin_FUNC);
+	((Storyboard^)TO_OBJECT(arg0))->Begin((FrameworkElement^)TO_OBJECT(arg1), arg2);
+	OS_NATIVE_EXIT(env, that, Storyboard_1Begin_FUNC);
+}
+#endif
+
+#ifndef NO_Storyboard_1Pause
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Storyboard_1Pause)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Storyboard_1Pause)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Storyboard_1Pause_FUNC);
+	((Storyboard^)TO_OBJECT(arg0))->Pause((FrameworkElement^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Storyboard_1Pause_FUNC);
+}
+#endif
+
+#ifndef NO_Storyboard_1Resume
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Storyboard_1Resume)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Storyboard_1Resume)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Storyboard_1Resume_FUNC);
+	((Storyboard^)TO_OBJECT(arg0))->Resume((FrameworkElement^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Storyboard_1Resume_FUNC);
+}
+#endif
+
+#ifndef NO_Storyboard_1SetTargetName
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Storyboard_1SetTargetName)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Storyboard_1SetTargetName)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Storyboard_1SetTargetName_FUNC);
+	Storyboard::SetTargetName((DependencyObject^)TO_OBJECT(arg0), (String^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Storyboard_1SetTargetName_FUNC);
+}
+#endif
+
+#ifndef NO_Storyboard_1SetTargetProperty
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Storyboard_1SetTargetProperty)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Storyboard_1SetTargetProperty)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Storyboard_1SetTargetProperty_FUNC);
+	Storyboard::SetTargetProperty((DependencyObject^)TO_OBJECT(arg0), (PropertyPath^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Storyboard_1SetTargetProperty_FUNC);
+}
+#endif
+
+#ifndef NO_Storyboard_1Stop
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Storyboard_1Stop)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Storyboard_1Stop)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Storyboard_1Stop_FUNC);
+	((Storyboard^)TO_OBJECT(arg0))->Stop((FrameworkElement^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Storyboard_1Stop_FUNC);
+}
+#endif
+
+#ifndef NO_StreamGeometryContext_1BeginFigure
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(StreamGeometryContext_1BeginFigure)(JNIEnv *env, jclass that, jint arg0, jint arg1, jboolean arg2, jboolean arg3);
+JNIEXPORT void JNICALL OS_NATIVE(StreamGeometryContext_1BeginFigure)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jboolean arg2, jboolean arg3)
+{
+	OS_NATIVE_ENTER(env, that, StreamGeometryContext_1BeginFigure_FUNC);
+	((StreamGeometryContext^)TO_OBJECT(arg0))->BeginFigure((Point)TO_OBJECT(arg1), arg2, arg3);
+	OS_NATIVE_EXIT(env, that, StreamGeometryContext_1BeginFigure_FUNC);
+}
+#endif
+
+#ifndef NO_StreamGeometryContext_1Close
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(StreamGeometryContext_1Close)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(StreamGeometryContext_1Close)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, StreamGeometryContext_1Close_FUNC);
+	((StreamGeometryContext^)TO_OBJECT(arg0))->Close();
+	OS_NATIVE_EXIT(env, that, StreamGeometryContext_1Close_FUNC);
+}
+#endif
+
+#ifndef NO_StreamGeometryContext_1LineTo
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(StreamGeometryContext_1LineTo)(JNIEnv *env, jclass that, jint arg0, jint arg1, jboolean arg2, jboolean arg3);
+JNIEXPORT void JNICALL OS_NATIVE(StreamGeometryContext_1LineTo)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jboolean arg2, jboolean arg3)
+{
+	OS_NATIVE_ENTER(env, that, StreamGeometryContext_1LineTo_FUNC);
+	((StreamGeometryContext^)TO_OBJECT(arg0))->LineTo((Point)TO_OBJECT(arg1), arg2, arg3);
+	OS_NATIVE_EXIT(env, that, StreamGeometryContext_1LineTo_FUNC);
+}
+#endif
+
+#ifndef NO_StreamGeometry_1Open
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(StreamGeometry_1Open)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(StreamGeometry_1Open)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, StreamGeometry_1Open_FUNC);
+	rc = (jint)TO_HANDLE(((StreamGeometry^)TO_OBJECT(arg0))->Open());
+	OS_NATIVE_EXIT(env, that, StreamGeometry_1Open_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_String_1Length
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(String_1Length)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(String_1Length)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, String_1Length_FUNC);
+	rc = (jint)((String^)TO_OBJECT(arg0))->Length;
+	OS_NATIVE_EXIT(env, that, String_1Length_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_String_1ToCharArray
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(String_1ToCharArray)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(String_1ToCharArray)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, String_1ToCharArray_FUNC);
+	rc = (jint)TO_HANDLE(((String^)TO_OBJECT(arg0))->ToCharArray());
+	OS_NATIVE_EXIT(env, that, String_1ToCharArray_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_String_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(String_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(String_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, String_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(String::typeid);
+	OS_NATIVE_EXIT(env, that, String_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Style_1Setters
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Style_1Setters)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Style_1Setters)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Style_1Setters_FUNC);
+	rc = (jint)TO_HANDLE(((Style^)TO_OBJECT(arg0))->Setters);
+	OS_NATIVE_EXIT(env, that, Style_1Setters_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemColors_1ActiveBorderBrush
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ActiveBorderBrush)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ActiveBorderBrush)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemColors_1ActiveBorderBrush_FUNC);
+	rc = (jint)TO_HANDLE(SystemColors::ActiveBorderBrush);
+	OS_NATIVE_EXIT(env, that, SystemColors_1ActiveBorderBrush_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemColors_1ActiveBorderColor
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ActiveBorderColor)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ActiveBorderColor)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemColors_1ActiveBorderColor_FUNC);
+	rc = (jint)TO_HANDLE(SystemColors::ActiveBorderColor);
+	OS_NATIVE_EXIT(env, that, SystemColors_1ActiveBorderColor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemColors_1ActiveCaptionColor
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ActiveCaptionColor)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ActiveCaptionColor)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemColors_1ActiveCaptionColor_FUNC);
+	rc = (jint)TO_HANDLE(SystemColors::ActiveCaptionColor);
+	OS_NATIVE_EXIT(env, that, SystemColors_1ActiveCaptionColor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemColors_1ActiveCaptionTextColor
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ActiveCaptionTextColor)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ActiveCaptionTextColor)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemColors_1ActiveCaptionTextColor_FUNC);
+	rc = (jint)TO_HANDLE(SystemColors::ActiveCaptionTextColor);
+	OS_NATIVE_EXIT(env, that, SystemColors_1ActiveCaptionTextColor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemColors_1ControlBrush
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ControlBrush)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ControlBrush)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemColors_1ControlBrush_FUNC);
+	rc = (jint)TO_HANDLE(SystemColors::ControlBrush);
+	OS_NATIVE_EXIT(env, that, SystemColors_1ControlBrush_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemColors_1ControlColor
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ControlColor)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ControlColor)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemColors_1ControlColor_FUNC);
+	rc = (jint)TO_HANDLE(SystemColors::ControlColor);
+	OS_NATIVE_EXIT(env, that, SystemColors_1ControlColor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemColors_1ControlDarkColor
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ControlDarkColor)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ControlDarkColor)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemColors_1ControlDarkColor_FUNC);
+	rc = (jint)TO_HANDLE(SystemColors::ControlDarkColor);
+	OS_NATIVE_EXIT(env, that, SystemColors_1ControlDarkColor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemColors_1ControlDarkDarkColor
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ControlDarkDarkColor)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ControlDarkDarkColor)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemColors_1ControlDarkDarkColor_FUNC);
+	rc = (jint)TO_HANDLE(SystemColors::ControlDarkDarkColor);
+	OS_NATIVE_EXIT(env, that, SystemColors_1ControlDarkDarkColor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemColors_1ControlLightColor
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ControlLightColor)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ControlLightColor)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemColors_1ControlLightColor_FUNC);
+	rc = (jint)TO_HANDLE(SystemColors::ControlLightColor);
+	OS_NATIVE_EXIT(env, that, SystemColors_1ControlLightColor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemColors_1ControlLightLightColor
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ControlLightLightColor)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ControlLightLightColor)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemColors_1ControlLightLightColor_FUNC);
+	rc = (jint)TO_HANDLE(SystemColors::ControlLightLightColor);
+	OS_NATIVE_EXIT(env, that, SystemColors_1ControlLightLightColor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemColors_1ControlTextBrush
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ControlTextBrush)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ControlTextBrush)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemColors_1ControlTextBrush_FUNC);
+	rc = (jint)TO_HANDLE(SystemColors::ControlTextBrush);
+	OS_NATIVE_EXIT(env, that, SystemColors_1ControlTextBrush_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemColors_1ControlTextColor
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ControlTextColor)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1ControlTextColor)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemColors_1ControlTextColor_FUNC);
+	rc = (jint)TO_HANDLE(SystemColors::ControlTextColor);
+	OS_NATIVE_EXIT(env, that, SystemColors_1ControlTextColor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemColors_1GradientActiveCaptionColor
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1GradientActiveCaptionColor)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1GradientActiveCaptionColor)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemColors_1GradientActiveCaptionColor_FUNC);
+	rc = (jint)TO_HANDLE(SystemColors::GradientActiveCaptionColor);
+	OS_NATIVE_EXIT(env, that, SystemColors_1GradientActiveCaptionColor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemColors_1GradientInactiveCaptionColor
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1GradientInactiveCaptionColor)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1GradientInactiveCaptionColor)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemColors_1GradientInactiveCaptionColor_FUNC);
+	rc = (jint)TO_HANDLE(SystemColors::GradientInactiveCaptionColor);
+	OS_NATIVE_EXIT(env, that, SystemColors_1GradientInactiveCaptionColor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemColors_1HighlightBrush
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1HighlightBrush)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1HighlightBrush)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemColors_1HighlightBrush_FUNC);
+	rc = (jint)TO_HANDLE(SystemColors::HighlightBrush);
+	OS_NATIVE_EXIT(env, that, SystemColors_1HighlightBrush_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemColors_1HighlightColor
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1HighlightColor)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1HighlightColor)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemColors_1HighlightColor_FUNC);
+	rc = (jint)TO_HANDLE(SystemColors::HighlightColor);
+	OS_NATIVE_EXIT(env, that, SystemColors_1HighlightColor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemColors_1HighlightTextColor
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1HighlightTextColor)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1HighlightTextColor)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemColors_1HighlightTextColor_FUNC);
+	rc = (jint)TO_HANDLE(SystemColors::HighlightTextColor);
+	OS_NATIVE_EXIT(env, that, SystemColors_1HighlightTextColor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemColors_1InactiveCaptionColor
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1InactiveCaptionColor)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1InactiveCaptionColor)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemColors_1InactiveCaptionColor_FUNC);
+	rc = (jint)TO_HANDLE(SystemColors::InactiveCaptionColor);
+	OS_NATIVE_EXIT(env, that, SystemColors_1InactiveCaptionColor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemColors_1InactiveCaptionTextColor
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1InactiveCaptionTextColor)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1InactiveCaptionTextColor)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemColors_1InactiveCaptionTextColor_FUNC);
+	rc = (jint)TO_HANDLE(SystemColors::InactiveCaptionTextColor);
+	OS_NATIVE_EXIT(env, that, SystemColors_1InactiveCaptionTextColor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemColors_1InfoColor
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1InfoColor)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1InfoColor)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemColors_1InfoColor_FUNC);
+	rc = (jint)TO_HANDLE(SystemColors::InfoColor);
+	OS_NATIVE_EXIT(env, that, SystemColors_1InfoColor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemColors_1InfoTextColor
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1InfoTextColor)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1InfoTextColor)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemColors_1InfoTextColor_FUNC);
+	rc = (jint)TO_HANDLE(SystemColors::InfoTextColor);
+	OS_NATIVE_EXIT(env, that, SystemColors_1InfoTextColor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemColors_1WindowColor
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1WindowColor)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1WindowColor)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemColors_1WindowColor_FUNC);
+	rc = (jint)TO_HANDLE(SystemColors::WindowColor);
+	OS_NATIVE_EXIT(env, that, SystemColors_1WindowColor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemColors_1WindowTextColor
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1WindowTextColor)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemColors_1WindowTextColor)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemColors_1WindowTextColor_FUNC);
+	rc = (jint)TO_HANDLE(SystemColors::WindowTextColor);
+	OS_NATIVE_EXIT(env, that, SystemColors_1WindowTextColor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemFonts_1MessageFontFamily
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemFonts_1MessageFontFamily)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemFonts_1MessageFontFamily)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemFonts_1MessageFontFamily_FUNC);
+	rc = (jint)TO_HANDLE(SystemFonts::MessageFontFamily);
+	OS_NATIVE_EXIT(env, that, SystemFonts_1MessageFontFamily_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemFonts_1MessageFontSize
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(SystemFonts_1MessageFontSize)(JNIEnv *env, jclass that);
+JNIEXPORT jdouble JNICALL OS_NATIVE(SystemFonts_1MessageFontSize)
+	(JNIEnv *env, jclass that)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemFonts_1MessageFontSize_FUNC);
+	rc = (jdouble)SystemFonts::MessageFontSize;
+	OS_NATIVE_EXIT(env, that, SystemFonts_1MessageFontSize_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemFonts_1MessageFontStyle
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemFonts_1MessageFontStyle)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemFonts_1MessageFontStyle)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemFonts_1MessageFontStyle_FUNC);
+	rc = (jint)TO_HANDLE(SystemFonts::MessageFontStyle);
+	OS_NATIVE_EXIT(env, that, SystemFonts_1MessageFontStyle_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemFonts_1MessageFontWeight
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemFonts_1MessageFontWeight)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemFonts_1MessageFontWeight)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemFonts_1MessageFontWeight_FUNC);
+	rc = (jint)TO_HANDLE(SystemFonts::MessageFontWeight);
+	OS_NATIVE_EXIT(env, that, SystemFonts_1MessageFontWeight_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemParameters_1HighContrast
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(SystemParameters_1HighContrast)(JNIEnv *env, jclass that);
+JNIEXPORT jboolean JNICALL OS_NATIVE(SystemParameters_1HighContrast)
+	(JNIEnv *env, jclass that)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemParameters_1HighContrast_FUNC);
+	rc = (jboolean)SystemParameters::HighContrast;
+	OS_NATIVE_EXIT(env, that, SystemParameters_1HighContrast_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemParameters_1HorizontalScrollBarButtonWidth
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1HorizontalScrollBarButtonWidth)(JNIEnv *env, jclass that);
+JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1HorizontalScrollBarButtonWidth)
+	(JNIEnv *env, jclass that)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemParameters_1HorizontalScrollBarButtonWidth_FUNC);
+	rc = (jdouble)SystemParameters::HorizontalScrollBarButtonWidth;
+	OS_NATIVE_EXIT(env, that, SystemParameters_1HorizontalScrollBarButtonWidth_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemParameters_1HorizontalScrollBarHeight
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1HorizontalScrollBarHeight)(JNIEnv *env, jclass that);
+JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1HorizontalScrollBarHeight)
+	(JNIEnv *env, jclass that)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemParameters_1HorizontalScrollBarHeight_FUNC);
+	rc = (jdouble)SystemParameters::HorizontalScrollBarHeight;
+	OS_NATIVE_EXIT(env, that, SystemParameters_1HorizontalScrollBarHeight_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemParameters_1MinimumHorizontalDragDistance
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1MinimumHorizontalDragDistance)(JNIEnv *env, jclass that);
+JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1MinimumHorizontalDragDistance)
+	(JNIEnv *env, jclass that)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemParameters_1MinimumHorizontalDragDistance_FUNC);
+	rc = (jdouble)SystemParameters::MinimumHorizontalDragDistance;
+	OS_NATIVE_EXIT(env, that, SystemParameters_1MinimumHorizontalDragDistance_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemParameters_1MinimumVerticalDragDistance
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1MinimumVerticalDragDistance)(JNIEnv *env, jclass that);
+JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1MinimumVerticalDragDistance)
+	(JNIEnv *env, jclass that)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemParameters_1MinimumVerticalDragDistance_FUNC);
+	rc = (jdouble)SystemParameters::MinimumVerticalDragDistance;
+	OS_NATIVE_EXIT(env, that, SystemParameters_1MinimumVerticalDragDistance_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemParameters_1PrimaryScreenHeight
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1PrimaryScreenHeight)(JNIEnv *env, jclass that);
+JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1PrimaryScreenHeight)
+	(JNIEnv *env, jclass that)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemParameters_1PrimaryScreenHeight_FUNC);
+	rc = (jdouble)SystemParameters::PrimaryScreenHeight;
+	OS_NATIVE_EXIT(env, that, SystemParameters_1PrimaryScreenHeight_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemParameters_1PrimaryScreenWidth
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1PrimaryScreenWidth)(JNIEnv *env, jclass that);
+JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1PrimaryScreenWidth)
+	(JNIEnv *env, jclass that)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemParameters_1PrimaryScreenWidth_FUNC);
+	rc = (jdouble)SystemParameters::PrimaryScreenWidth;
+	OS_NATIVE_EXIT(env, that, SystemParameters_1PrimaryScreenWidth_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemParameters_1ThinHorizontalBorderHeight
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1ThinHorizontalBorderHeight)(JNIEnv *env, jclass that);
+JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1ThinHorizontalBorderHeight)
+	(JNIEnv *env, jclass that)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemParameters_1ThinHorizontalBorderHeight_FUNC);
+	rc = (jdouble)SystemParameters::ThinHorizontalBorderHeight;
+	OS_NATIVE_EXIT(env, that, SystemParameters_1ThinHorizontalBorderHeight_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemParameters_1ThinVerticalBorderWidth
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1ThinVerticalBorderWidth)(JNIEnv *env, jclass that);
+JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1ThinVerticalBorderWidth)
+	(JNIEnv *env, jclass that)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemParameters_1ThinVerticalBorderWidth_FUNC);
+	rc = (jdouble)SystemParameters::ThinVerticalBorderWidth;
+	OS_NATIVE_EXIT(env, that, SystemParameters_1ThinVerticalBorderWidth_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemParameters_1VerticalScrollBarButtonHeight
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1VerticalScrollBarButtonHeight)(JNIEnv *env, jclass that);
+JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1VerticalScrollBarButtonHeight)
+	(JNIEnv *env, jclass that)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemParameters_1VerticalScrollBarButtonHeight_FUNC);
+	rc = (jdouble)SystemParameters::VerticalScrollBarButtonHeight;
+	OS_NATIVE_EXIT(env, that, SystemParameters_1VerticalScrollBarButtonHeight_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemParameters_1VerticalScrollBarWidth
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1VerticalScrollBarWidth)(JNIEnv *env, jclass that);
+JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1VerticalScrollBarWidth)
+	(JNIEnv *env, jclass that)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemParameters_1VerticalScrollBarWidth_FUNC);
+	rc = (jdouble)SystemParameters::VerticalScrollBarWidth;
+	OS_NATIVE_EXIT(env, that, SystemParameters_1VerticalScrollBarWidth_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemParameters_1VirtualScreenHeight
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1VirtualScreenHeight)(JNIEnv *env, jclass that);
+JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1VirtualScreenHeight)
+	(JNIEnv *env, jclass that)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemParameters_1VirtualScreenHeight_FUNC);
+	rc = (jdouble)SystemParameters::VirtualScreenHeight;
+	OS_NATIVE_EXIT(env, that, SystemParameters_1VirtualScreenHeight_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemParameters_1VirtualScreenLeft
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1VirtualScreenLeft)(JNIEnv *env, jclass that);
+JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1VirtualScreenLeft)
+	(JNIEnv *env, jclass that)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemParameters_1VirtualScreenLeft_FUNC);
+	rc = (jdouble)SystemParameters::VirtualScreenLeft;
+	OS_NATIVE_EXIT(env, that, SystemParameters_1VirtualScreenLeft_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemParameters_1VirtualScreenTop
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1VirtualScreenTop)(JNIEnv *env, jclass that);
+JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1VirtualScreenTop)
+	(JNIEnv *env, jclass that)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemParameters_1VirtualScreenTop_FUNC);
+	rc = (jdouble)SystemParameters::VirtualScreenTop;
+	OS_NATIVE_EXIT(env, that, SystemParameters_1VirtualScreenTop_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemParameters_1VirtualScreenWidth
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1VirtualScreenWidth)(JNIEnv *env, jclass that);
+JNIEXPORT jdouble JNICALL OS_NATIVE(SystemParameters_1VirtualScreenWidth)
+	(JNIEnv *env, jclass that)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemParameters_1VirtualScreenWidth_FUNC);
+	rc = (jdouble)SystemParameters::VirtualScreenWidth;
+	OS_NATIVE_EXIT(env, that, SystemParameters_1VirtualScreenWidth_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemParameters_1WheelScrollLines
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemParameters_1WheelScrollLines)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemParameters_1WheelScrollLines)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemParameters_1WheelScrollLines_FUNC);
+	rc = (jint)SystemParameters::WheelScrollLines;
+	OS_NATIVE_EXIT(env, that, SystemParameters_1WheelScrollLines_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SystemParameters_1WorkArea
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SystemParameters_1WorkArea)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SystemParameters_1WorkArea)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SystemParameters_1WorkArea_FUNC);
+	rc = (jint)TO_HANDLE(SystemParameters::WorkArea);
+	OS_NATIVE_EXIT(env, that, SystemParameters_1WorkArea_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TabControl_1TabStripPlacement
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TabControl_1TabStripPlacement)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TabControl_1TabStripPlacement)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TabControl_1TabStripPlacement_FUNC);
+	((TabControl^)TO_OBJECT(arg0))->TabStripPlacement = ((Dock)arg1);
+	OS_NATIVE_EXIT(env, that, TabControl_1TabStripPlacement_FUNC);
+}
+#endif
+
+#ifndef NO_TabItem_1IsSelected
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(TabItem_1IsSelected)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(TabItem_1IsSelected)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, TabItem_1IsSelected_FUNC);
+	rc = (jboolean)((TabItem^)TO_OBJECT(arg0))->IsSelected;
+	OS_NATIVE_EXIT(env, that, TabItem_1IsSelected_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBlock_1Background
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBlock_1Background)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBlock_1Background)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBlock_1Background_FUNC);
+	((TextBlock^)TO_OBJECT(arg0))->Background = ((Brush^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, TextBlock_1Background_FUNC);
+}
+#endif
+
+#ifndef NO_TextBlock_1BackgroundProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBlock_1BackgroundProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBlock_1BackgroundProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBlock_1BackgroundProperty_FUNC);
+	rc = (jint)TO_HANDLE(TextBlock::BackgroundProperty);
+	OS_NATIVE_EXIT(env, that, TextBlock_1BackgroundProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBlock_1FontFamily
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBlock_1FontFamily)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBlock_1FontFamily)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBlock_1FontFamily_FUNC);
+	((TextBlock^)TO_OBJECT(arg0))->FontFamily = ((FontFamily^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, TextBlock_1FontFamily_FUNC);
+}
+#endif
+
+#ifndef NO_TextBlock_1FontFamilyProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBlock_1FontFamilyProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBlock_1FontFamilyProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBlock_1FontFamilyProperty_FUNC);
+	rc = (jint)TO_HANDLE(TextBlock::FontFamilyProperty);
+	OS_NATIVE_EXIT(env, that, TextBlock_1FontFamilyProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBlock_1FontSize
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBlock_1FontSize)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBlock_1FontSize)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBlock_1FontSize_FUNC);
+	((TextBlock^)TO_OBJECT(arg0))->FontSize = (arg1);
+	OS_NATIVE_EXIT(env, that, TextBlock_1FontSize_FUNC);
+}
+#endif
+
+#ifndef NO_TextBlock_1FontSizeProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBlock_1FontSizeProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBlock_1FontSizeProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBlock_1FontSizeProperty_FUNC);
+	rc = (jint)TO_HANDLE(TextBlock::FontSizeProperty);
+	OS_NATIVE_EXIT(env, that, TextBlock_1FontSizeProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBlock_1FontStretch
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBlock_1FontStretch)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBlock_1FontStretch)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBlock_1FontStretch_FUNC);
+	((TextBlock^)TO_OBJECT(arg0))->FontStretch = ((FontStretch)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, TextBlock_1FontStretch_FUNC);
+}
+#endif
+
+#ifndef NO_TextBlock_1FontStretchProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBlock_1FontStretchProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBlock_1FontStretchProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBlock_1FontStretchProperty_FUNC);
+	rc = (jint)TO_HANDLE(TextBlock::FontStretchProperty);
+	OS_NATIVE_EXIT(env, that, TextBlock_1FontStretchProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBlock_1FontStyle
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBlock_1FontStyle)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBlock_1FontStyle)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBlock_1FontStyle_FUNC);
+	((TextBlock^)TO_OBJECT(arg0))->FontStyle = ((FontStyle)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, TextBlock_1FontStyle_FUNC);
+}
+#endif
+
+#ifndef NO_TextBlock_1FontStyleProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBlock_1FontStyleProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBlock_1FontStyleProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBlock_1FontStyleProperty_FUNC);
+	rc = (jint)TO_HANDLE(TextBlock::FontStyleProperty);
+	OS_NATIVE_EXIT(env, that, TextBlock_1FontStyleProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBlock_1FontWeight
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBlock_1FontWeight)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBlock_1FontWeight)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBlock_1FontWeight_FUNC);
+	((TextBlock^)TO_OBJECT(arg0))->FontWeight = ((FontWeight)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, TextBlock_1FontWeight_FUNC);
+}
+#endif
+
+#ifndef NO_TextBlock_1FontWeightProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBlock_1FontWeightProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBlock_1FontWeightProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBlock_1FontWeightProperty_FUNC);
+	rc = (jint)TO_HANDLE(TextBlock::FontWeightProperty);
+	OS_NATIVE_EXIT(env, that, TextBlock_1FontWeightProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBlock_1Foreground
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBlock_1Foreground)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBlock_1Foreground)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBlock_1Foreground_FUNC);
+	((TextBlock^)TO_OBJECT(arg0))->Foreground = ((Brush^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, TextBlock_1Foreground_FUNC);
+}
+#endif
+
+#ifndef NO_TextBlock_1ForegroundProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBlock_1ForegroundProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBlock_1ForegroundProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBlock_1ForegroundProperty_FUNC);
+	rc = (jint)TO_HANDLE(TextBlock::ForegroundProperty);
+	OS_NATIVE_EXIT(env, that, TextBlock_1ForegroundProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBlock_1Inlines
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBlock_1Inlines)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBlock_1Inlines)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBlock_1Inlines_FUNC);
+	rc = (jint)TO_HANDLE(((TextBlock^)TO_OBJECT(arg0))->Inlines);
+	OS_NATIVE_EXIT(env, that, TextBlock_1Inlines_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBlock_1Text__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBlock_1Text__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBlock_1Text__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBlock_1Text__I_FUNC);
+	rc = (jint)TO_HANDLE(((TextBlock^)TO_OBJECT(arg0))->Text);
+	OS_NATIVE_EXIT(env, that, TextBlock_1Text__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBlock_1Text__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBlock_1Text__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBlock_1Text__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBlock_1Text__II_FUNC);
+	((TextBlock^)TO_OBJECT(arg0))->Text = ((String^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, TextBlock_1Text__II_FUNC);
+}
+#endif
+
+#ifndef NO_TextBlock_1TextProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBlock_1TextProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBlock_1TextProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBlock_1TextProperty_FUNC);
+	rc = (jint)TO_HANDLE(TextBlock::TextProperty);
+	OS_NATIVE_EXIT(env, that, TextBlock_1TextProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBlock_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBlock_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBlock_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBlock_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(TextBlock::typeid);
+	OS_NATIVE_EXIT(env, that, TextBlock_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBoundsCollection_1Current
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBoundsCollection_1Current)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBoundsCollection_1Current)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBoundsCollection_1Current_FUNC);
+	rc = (jint)TO_HANDLE(((IEnumerator^)TO_OBJECT(arg0))->Current);
+	OS_NATIVE_EXIT(env, that, TextBoundsCollection_1Current_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBoundsCollection_1GetEnumerator
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBoundsCollection_1GetEnumerator)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBoundsCollection_1GetEnumerator)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBoundsCollection_1GetEnumerator_FUNC);
+	rc = (jint)TO_HANDLE(((IEnumerable^)TO_OBJECT(arg0))->GetEnumerator());
+	OS_NATIVE_EXIT(env, that, TextBoundsCollection_1GetEnumerator_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBounds_1Rectangle
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBounds_1Rectangle)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBounds_1Rectangle)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBounds_1Rectangle_FUNC);
+	rc = (jint)TO_HANDLE(((TextBounds^)TO_OBJECT(arg0))->Rectangle);
+	OS_NATIVE_EXIT(env, that, TextBounds_1Rectangle_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBoxBase_1AcceptsReturn
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1AcceptsReturn)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1AcceptsReturn)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBoxBase_1AcceptsReturn_FUNC);
+	((TextBoxBase^)TO_OBJECT(arg0))->AcceptsReturn = (arg1);
+	OS_NATIVE_EXIT(env, that, TextBoxBase_1AcceptsReturn_FUNC);
+}
+#endif
+
+#ifndef NO_TextBoxBase_1AcceptsTab
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1AcceptsTab)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1AcceptsTab)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBoxBase_1AcceptsTab_FUNC);
+	((TextBoxBase^)TO_OBJECT(arg0))->AcceptsTab = (arg1);
+	OS_NATIVE_EXIT(env, that, TextBoxBase_1AcceptsTab_FUNC);
+}
+#endif
+
+#ifndef NO_TextBoxBase_1AppendText
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1AppendText)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1AppendText)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBoxBase_1AppendText_FUNC);
+	((TextBoxBase^)TO_OBJECT(arg0))->AppendText((String^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, TextBoxBase_1AppendText_FUNC);
+}
+#endif
+
+#ifndef NO_TextBoxBase_1Copy
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1Copy)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1Copy)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, TextBoxBase_1Copy_FUNC);
+	((TextBoxBase^)TO_OBJECT(arg0))->Copy();
+	OS_NATIVE_EXIT(env, that, TextBoxBase_1Copy_FUNC);
+}
+#endif
+
+#ifndef NO_TextBoxBase_1Cut
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1Cut)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1Cut)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, TextBoxBase_1Cut_FUNC);
+	((TextBoxBase^)TO_OBJECT(arg0))->Cut();
+	OS_NATIVE_EXIT(env, that, TextBoxBase_1Cut_FUNC);
+}
+#endif
+
+#ifndef NO_TextBoxBase_1HorizontalScrollBarVisibility
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1HorizontalScrollBarVisibility)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1HorizontalScrollBarVisibility)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBoxBase_1HorizontalScrollBarVisibility_FUNC);
+	((TextBoxBase^)TO_OBJECT(arg0))->HorizontalScrollBarVisibility = ((ScrollBarVisibility)arg1);
+	OS_NATIVE_EXIT(env, that, TextBoxBase_1HorizontalScrollBarVisibility_FUNC);
+}
+#endif
+
+#ifndef NO_TextBoxBase_1IsReadOnly__I
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(TextBoxBase_1IsReadOnly__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(TextBoxBase_1IsReadOnly__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBoxBase_1IsReadOnly__I_FUNC);
+	rc = (jboolean)((TextBoxBase^)TO_OBJECT(arg0))->IsReadOnly;
+	OS_NATIVE_EXIT(env, that, TextBoxBase_1IsReadOnly__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBoxBase_1IsReadOnly__IZ
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1IsReadOnly__IZ)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1IsReadOnly__IZ)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBoxBase_1IsReadOnly__IZ_FUNC);
+	((TextBoxBase^)TO_OBJECT(arg0))->IsReadOnly = (arg1);
+	OS_NATIVE_EXIT(env, that, TextBoxBase_1IsReadOnly__IZ_FUNC);
+}
+#endif
+
+#ifndef NO_TextBoxBase_1Paste
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1Paste)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1Paste)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, TextBoxBase_1Paste_FUNC);
+	((TextBoxBase^)TO_OBJECT(arg0))->Paste();
+	OS_NATIVE_EXIT(env, that, TextBoxBase_1Paste_FUNC);
+}
+#endif
+
+#ifndef NO_TextBoxBase_1ScrollToEnd
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1ScrollToEnd)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1ScrollToEnd)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, TextBoxBase_1ScrollToEnd_FUNC);
+	((TextBoxBase^)TO_OBJECT(arg0))->ScrollToEnd();
+	OS_NATIVE_EXIT(env, that, TextBoxBase_1ScrollToEnd_FUNC);
+}
+#endif
+
+#ifndef NO_TextBoxBase_1ScrollToVerticalOffset
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1ScrollToVerticalOffset)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1ScrollToVerticalOffset)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBoxBase_1ScrollToVerticalOffset_FUNC);
+	((TextBoxBase^)TO_OBJECT(arg0))->ScrollToVerticalOffset(arg1);
+	OS_NATIVE_EXIT(env, that, TextBoxBase_1ScrollToVerticalOffset_FUNC);
+}
+#endif
+
+#ifndef NO_TextBoxBase_1SelectAll
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1SelectAll)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1SelectAll)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, TextBoxBase_1SelectAll_FUNC);
+	((TextBoxBase^)TO_OBJECT(arg0))->SelectAll();
+	OS_NATIVE_EXIT(env, that, TextBoxBase_1SelectAll_FUNC);
+}
+#endif
+
+#ifndef NO_TextBoxBase_1TextChanged
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1TextChanged)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1TextChanged)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBoxBase_1TextChanged_FUNC);
+	((TextBoxBase^)TO_OBJECT(arg0))->TextChanged += ((TextChangedEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, TextBoxBase_1TextChanged_FUNC);
+}
+#endif
+
+#ifndef NO_TextBoxBase_1VerticalOffset
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(TextBoxBase_1VerticalOffset)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(TextBoxBase_1VerticalOffset)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBoxBase_1VerticalOffset_FUNC);
+	rc = (jdouble)((TextBoxBase^)TO_OBJECT(arg0))->VerticalOffset;
+	OS_NATIVE_EXIT(env, that, TextBoxBase_1VerticalOffset_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBoxBase_1VerticalScrollBarVisibility
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1VerticalScrollBarVisibility)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBoxBase_1VerticalScrollBarVisibility)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBoxBase_1VerticalScrollBarVisibility_FUNC);
+	((TextBoxBase^)TO_OBJECT(arg0))->VerticalScrollBarVisibility = ((ScrollBarVisibility)arg1);
+	OS_NATIVE_EXIT(env, that, TextBoxBase_1VerticalScrollBarVisibility_FUNC);
+}
+#endif
+
+#ifndef NO_TextBox_1CaretIndex__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBox_1CaretIndex__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBox_1CaretIndex__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBox_1CaretIndex__I_FUNC);
+	rc = (jint)((TextBox^)TO_OBJECT(arg0))->CaretIndex;
+	OS_NATIVE_EXIT(env, that, TextBox_1CaretIndex__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBox_1CaretIndex__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBox_1CaretIndex__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBox_1CaretIndex__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBox_1CaretIndex__II_FUNC);
+	((TextBox^)TO_OBJECT(arg0))->CaretIndex = (arg1);
+	OS_NATIVE_EXIT(env, that, TextBox_1CaretIndex__II_FUNC);
+}
+#endif
+
+#ifndef NO_TextBox_1GetFirstVisibleLineIndex
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBox_1GetFirstVisibleLineIndex)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBox_1GetFirstVisibleLineIndex)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBox_1GetFirstVisibleLineIndex_FUNC);
+	rc = (jint)((TextBox^)TO_OBJECT(arg0))->GetFirstVisibleLineIndex();
+	OS_NATIVE_EXIT(env, that, TextBox_1GetFirstVisibleLineIndex_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBox_1GetLineIndexFromCharacterIndex
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBox_1GetLineIndexFromCharacterIndex)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBox_1GetLineIndexFromCharacterIndex)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBox_1GetLineIndexFromCharacterIndex_FUNC);
+	rc = (jint)((TextBox^)TO_OBJECT(arg0))->GetLineIndexFromCharacterIndex(arg1);
+	OS_NATIVE_EXIT(env, that, TextBox_1GetLineIndexFromCharacterIndex_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBox_1GetRectFromCharacterIndex
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBox_1GetRectFromCharacterIndex)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBox_1GetRectFromCharacterIndex)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBox_1GetRectFromCharacterIndex_FUNC);
+	rc = (jint)TO_HANDLE(((TextBox^)TO_OBJECT(arg0))->GetRectFromCharacterIndex(arg1));
+	OS_NATIVE_EXIT(env, that, TextBox_1GetRectFromCharacterIndex_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBox_1LineCount
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBox_1LineCount)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBox_1LineCount)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBox_1LineCount_FUNC);
+	rc = (jint)((TextBox^)TO_OBJECT(arg0))->LineCount;
+	OS_NATIVE_EXIT(env, that, TextBox_1LineCount_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBox_1MaxLength__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBox_1MaxLength__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBox_1MaxLength__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBox_1MaxLength__I_FUNC);
+	rc = (jint)((TextBox^)TO_OBJECT(arg0))->MaxLength;
+	OS_NATIVE_EXIT(env, that, TextBox_1MaxLength__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBox_1MaxLength__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBox_1MaxLength__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBox_1MaxLength__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBox_1MaxLength__II_FUNC);
+	((TextBox^)TO_OBJECT(arg0))->MaxLength = (arg1);
+	OS_NATIVE_EXIT(env, that, TextBox_1MaxLength__II_FUNC);
+}
+#endif
+
+#ifndef NO_TextBox_1ScrollToLine
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBox_1ScrollToLine)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBox_1ScrollToLine)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBox_1ScrollToLine_FUNC);
+	((TextBox^)TO_OBJECT(arg0))->ScrollToLine(arg1);
+	OS_NATIVE_EXIT(env, that, TextBox_1ScrollToLine_FUNC);
+}
+#endif
+
+#ifndef NO_TextBox_1Select
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBox_1Select)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(TextBox_1Select)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, TextBox_1Select_FUNC);
+	((TextBox^)TO_OBJECT(arg0))->Select(arg1, arg2);
+	OS_NATIVE_EXIT(env, that, TextBox_1Select_FUNC);
+}
+#endif
+
+#ifndef NO_TextBox_1SelectedText__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBox_1SelectedText__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBox_1SelectedText__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBox_1SelectedText__I_FUNC);
+	rc = (jint)TO_HANDLE(((TextBox^)TO_OBJECT(arg0))->SelectedText);
+	OS_NATIVE_EXIT(env, that, TextBox_1SelectedText__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBox_1SelectedText__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBox_1SelectedText__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBox_1SelectedText__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBox_1SelectedText__II_FUNC);
+	((TextBox^)TO_OBJECT(arg0))->SelectedText = ((String^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, TextBox_1SelectedText__II_FUNC);
+}
+#endif
+
+#ifndef NO_TextBox_1SelectionLength__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBox_1SelectionLength__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBox_1SelectionLength__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBox_1SelectionLength__I_FUNC);
+	rc = (jint)((TextBox^)TO_OBJECT(arg0))->SelectionLength;
+	OS_NATIVE_EXIT(env, that, TextBox_1SelectionLength__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBox_1SelectionLength__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBox_1SelectionLength__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBox_1SelectionLength__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBox_1SelectionLength__II_FUNC);
+	((TextBox^)TO_OBJECT(arg0))->SelectionLength = (arg1);
+	OS_NATIVE_EXIT(env, that, TextBox_1SelectionLength__II_FUNC);
+}
+#endif
+
+#ifndef NO_TextBox_1SelectionStart__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBox_1SelectionStart__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBox_1SelectionStart__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBox_1SelectionStart__I_FUNC);
+	rc = (jint)((TextBox^)TO_OBJECT(arg0))->SelectionStart;
+	OS_NATIVE_EXIT(env, that, TextBox_1SelectionStart__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBox_1SelectionStart__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBox_1SelectionStart__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBox_1SelectionStart__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBox_1SelectionStart__II_FUNC);
+	((TextBox^)TO_OBJECT(arg0))->SelectionStart = (arg1);
+	OS_NATIVE_EXIT(env, that, TextBox_1SelectionStart__II_FUNC);
+}
+#endif
+
+#ifndef NO_TextBox_1Text__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextBox_1Text__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TextBox_1Text__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextBox_1Text__I_FUNC);
+	rc = (jint)TO_HANDLE(((TextBox^)TO_OBJECT(arg0))->Text);
+	OS_NATIVE_EXIT(env, that, TextBox_1Text__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextBox_1Text__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBox_1Text__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBox_1Text__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBox_1Text__II_FUNC);
+	((TextBox^)TO_OBJECT(arg0))->Text = ((String^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, TextBox_1Text__II_FUNC);
+}
+#endif
+
+#ifndef NO_TextBox_1TextWrapping
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextBox_1TextWrapping)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextBox_1TextWrapping)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextBox_1TextWrapping_FUNC);
+	((TextBox^)TO_OBJECT(arg0))->TextWrapping = ((TextWrapping)arg1);
+	OS_NATIVE_EXIT(env, that, TextBox_1TextWrapping_FUNC);
+}
+#endif
+
+#ifndef NO_TextCompositionEventArgs_1ControlText
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextCompositionEventArgs_1ControlText)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TextCompositionEventArgs_1ControlText)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextCompositionEventArgs_1ControlText_FUNC);
+	rc = (jint)TO_HANDLE(((TextCompositionEventArgs^)TO_OBJECT(arg0))->ControlText);
+	OS_NATIVE_EXIT(env, that, TextCompositionEventArgs_1ControlText_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextCompositionEventArgs_1Handled
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextCompositionEventArgs_1Handled)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextCompositionEventArgs_1Handled)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextCompositionEventArgs_1Handled_FUNC);
+	((TextCompositionEventArgs^)TO_OBJECT(arg0))->Handled = (arg1);
+	OS_NATIVE_EXIT(env, that, TextCompositionEventArgs_1Handled_FUNC);
+}
+#endif
+
+#ifndef NO_TextCompositionEventArgs_1SystemText
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextCompositionEventArgs_1SystemText)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TextCompositionEventArgs_1SystemText)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextCompositionEventArgs_1SystemText_FUNC);
+	rc = (jint)TO_HANDLE(((TextCompositionEventArgs^)TO_OBJECT(arg0))->SystemText);
+	OS_NATIVE_EXIT(env, that, TextCompositionEventArgs_1SystemText_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextCompositionEventArgs_1Text
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextCompositionEventArgs_1Text)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TextCompositionEventArgs_1Text)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextCompositionEventArgs_1Text_FUNC);
+	rc = (jint)TO_HANDLE(((TextCompositionEventArgs^)TO_OBJECT(arg0))->Text);
+	OS_NATIVE_EXIT(env, that, TextCompositionEventArgs_1Text_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextDecorationCollection_1Add
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextDecorationCollection_1Add)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextDecorationCollection_1Add)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextDecorationCollection_1Add_FUNC);
+	((TextDecorationCollection^)TO_OBJECT(arg0))->Add((TextDecoration^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, TextDecorationCollection_1Add_FUNC);
+}
+#endif
+
+#ifndef NO_TextDecorations_1Strikethrough
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextDecorations_1Strikethrough)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(TextDecorations_1Strikethrough)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextDecorations_1Strikethrough_FUNC);
+	rc = (jint)TO_HANDLE(TextDecorations::Strikethrough);
+	OS_NATIVE_EXIT(env, that, TextDecorations_1Strikethrough_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextDecorations_1Underline
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextDecorations_1Underline)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(TextDecorations_1Underline)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextDecorations_1Underline_FUNC);
+	rc = (jint)TO_HANDLE(TextDecorations::Underline);
+	OS_NATIVE_EXIT(env, that, TextDecorations_1Underline_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextFormatter_1Create
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextFormatter_1Create)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(TextFormatter_1Create)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextFormatter_1Create_FUNC);
+	rc = (jint)TO_HANDLE(TextFormatter::Create());
+	OS_NATIVE_EXIT(env, that, TextFormatter_1Create_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextFormatter_1FormatLine
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextFormatter_1FormatLine)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jdouble arg3, jint arg4, jint arg5);
+JNIEXPORT jint JNICALL OS_NATIVE(TextFormatter_1FormatLine)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jdouble arg3, jint arg4, jint arg5)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextFormatter_1FormatLine_FUNC);
+	rc = (jint)TO_HANDLE(((TextFormatter^)TO_OBJECT(arg0))->FormatLine((TextSource^)TO_OBJECT(arg1), arg2, arg3, (TextParagraphProperties^)TO_OBJECT(arg4), (TextLineBreak^)TO_OBJECT(arg5)));
+	OS_NATIVE_EXIT(env, that, TextFormatter_1FormatLine_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextLine_1Baseline
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(TextLine_1Baseline)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(TextLine_1Baseline)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, TextLine_1Baseline_FUNC);
+	rc = (jdouble)((TextLine^)TO_OBJECT(arg0))->Baseline;
+	OS_NATIVE_EXIT(env, that, TextLine_1Baseline_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextLine_1Draw
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextLine_1Draw)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3);
+JNIEXPORT void JNICALL OS_NATIVE(TextLine_1Draw)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+{
+	OS_NATIVE_ENTER(env, that, TextLine_1Draw_FUNC);
+	((TextLine^)TO_OBJECT(arg0))->Draw((DrawingContext^)TO_OBJECT(arg1), (Point)TO_OBJECT(arg2), (InvertAxes)arg3);
+	OS_NATIVE_EXIT(env, that, TextLine_1Draw_FUNC);
+}
+#endif
+
+#ifndef NO_TextLine_1GetCharacterHitFromDistance
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextLine_1GetCharacterHitFromDistance)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(TextLine_1GetCharacterHitFromDistance)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextLine_1GetCharacterHitFromDistance_FUNC);
+	rc = (jint)TO_HANDLE(((TextLine^)TO_OBJECT(arg0))->GetCharacterHitFromDistance(arg1));
+	OS_NATIVE_EXIT(env, that, TextLine_1GetCharacterHitFromDistance_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextLine_1GetDistanceFromCharacterHit
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(TextLine_1GetDistanceFromCharacterHit)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jdouble JNICALL OS_NATIVE(TextLine_1GetDistanceFromCharacterHit)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, TextLine_1GetDistanceFromCharacterHit_FUNC);
+	rc = (jdouble)((TextLine^)TO_OBJECT(arg0))->GetDistanceFromCharacterHit((CharacterHit)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, TextLine_1GetDistanceFromCharacterHit_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextLine_1GetIndexedGlyphRuns
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextLine_1GetIndexedGlyphRuns)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TextLine_1GetIndexedGlyphRuns)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextLine_1GetIndexedGlyphRuns_FUNC);
+	rc = (jint)TO_HANDLE(((TextLine^)TO_OBJECT(arg0))->GetIndexedGlyphRuns());
+	OS_NATIVE_EXIT(env, that, TextLine_1GetIndexedGlyphRuns_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextLine_1GetNextCaretCharacterHit
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextLine_1GetNextCaretCharacterHit)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(TextLine_1GetNextCaretCharacterHit)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextLine_1GetNextCaretCharacterHit_FUNC);
+	rc = (jint)TO_HANDLE(((TextLine^)TO_OBJECT(arg0))->GetNextCaretCharacterHit((CharacterHit)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, TextLine_1GetNextCaretCharacterHit_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextLine_1GetPreviousCaretCharacterHit
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextLine_1GetPreviousCaretCharacterHit)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(TextLine_1GetPreviousCaretCharacterHit)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextLine_1GetPreviousCaretCharacterHit_FUNC);
+	rc = (jint)TO_HANDLE(((TextLine^)TO_OBJECT(arg0))->GetPreviousCaretCharacterHit((CharacterHit)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, TextLine_1GetPreviousCaretCharacterHit_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextLine_1GetTextBounds
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextLine_1GetTextBounds)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT jint JNICALL OS_NATIVE(TextLine_1GetTextBounds)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextLine_1GetTextBounds_FUNC);
+	rc = (jint)TO_HANDLE(((TextLine^)TO_OBJECT(arg0))->GetTextBounds(arg1, arg2));
+	OS_NATIVE_EXIT(env, that, TextLine_1GetTextBounds_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextLine_1GetTextLineBreak
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextLine_1GetTextLineBreak)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TextLine_1GetTextLineBreak)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextLine_1GetTextLineBreak_FUNC);
+	rc = (jint)TO_HANDLE(((TextLine^)TO_OBJECT(arg0))->GetTextLineBreak());
+	OS_NATIVE_EXIT(env, that, TextLine_1GetTextLineBreak_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextLine_1Height
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(TextLine_1Height)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(TextLine_1Height)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, TextLine_1Height_FUNC);
+	rc = (jdouble)((TextLine^)TO_OBJECT(arg0))->Height;
+	OS_NATIVE_EXIT(env, that, TextLine_1Height_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextLine_1Length
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextLine_1Length)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TextLine_1Length)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextLine_1Length_FUNC);
+	rc = (jint)((TextLine^)TO_OBJECT(arg0))->Length;
+	OS_NATIVE_EXIT(env, that, TextLine_1Length_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextLine_1NewlineLength
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TextLine_1NewlineLength)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TextLine_1NewlineLength)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TextLine_1NewlineLength_FUNC);
+	rc = (jint)((TextLine^)TO_OBJECT(arg0))->NewlineLength;
+	OS_NATIVE_EXIT(env, that, TextLine_1NewlineLength_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextLine_1Start
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(TextLine_1Start)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(TextLine_1Start)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, TextLine_1Start_FUNC);
+	rc = (jdouble)((TextLine^)TO_OBJECT(arg0))->Start;
+	OS_NATIVE_EXIT(env, that, TextLine_1Start_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextLine_1Width
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(TextLine_1Width)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(TextLine_1Width)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, TextLine_1Width_FUNC);
+	rc = (jdouble)((TextLine^)TO_OBJECT(arg0))->Width;
+	OS_NATIVE_EXIT(env, that, TextLine_1Width_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextLine_1WidthIncludingTrailingWhitespace
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(TextLine_1WidthIncludingTrailingWhitespace)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(TextLine_1WidthIncludingTrailingWhitespace)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, TextLine_1WidthIncludingTrailingWhitespace_FUNC);
+	rc = (jdouble)((TextLine^)TO_OBJECT(arg0))->WidthIncludingTrailingWhitespace;
+	OS_NATIVE_EXIT(env, that, TextLine_1WidthIncludingTrailingWhitespace_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TextTabPropertiesCollection_1Add
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TextTabPropertiesCollection_1Add)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TextTabPropertiesCollection_1Add)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TextTabPropertiesCollection_1Add_FUNC);
+	((System::Collections::Generic::IList<TextTabProperties^>^)TO_OBJECT(arg0))->Add((TextTabProperties^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, TextTabPropertiesCollection_1Add_FUNC);
+}
+#endif
+
+#ifndef NO_Thickness_1Bottom
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Thickness_1Bottom)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Thickness_1Bottom)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Thickness_1Bottom_FUNC);
+	rc = (jdouble)((Thickness^)TO_OBJECT(arg0))->Bottom;
+	OS_NATIVE_EXIT(env, that, Thickness_1Bottom_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Thickness_1Left
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Thickness_1Left)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Thickness_1Left)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Thickness_1Left_FUNC);
+	rc = (jdouble)((Thickness^)TO_OBJECT(arg0))->Left;
+	OS_NATIVE_EXIT(env, that, Thickness_1Left_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Thickness_1Right
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Thickness_1Right)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Thickness_1Right)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Thickness_1Right_FUNC);
+	rc = (jdouble)((Thickness^)TO_OBJECT(arg0))->Right;
+	OS_NATIVE_EXIT(env, that, Thickness_1Right_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Thickness_1Top
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Thickness_1Top)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Thickness_1Top)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Thickness_1Top_FUNC);
+	rc = (jdouble)((Thickness^)TO_OBJECT(arg0))->Top;
+	OS_NATIVE_EXIT(env, that, Thickness_1Top_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Thumb_1DragDeltaEvent
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Thumb_1DragDeltaEvent)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(Thumb_1DragDeltaEvent)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Thumb_1DragDeltaEvent_FUNC);
+	rc = (jint)TO_HANDLE(Thumb::DragDeltaEvent);
+	OS_NATIVE_EXIT(env, that, Thumb_1DragDeltaEvent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TileBrush_1AlignmentX
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TileBrush_1AlignmentX)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TileBrush_1AlignmentX)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TileBrush_1AlignmentX_FUNC);
+	((TileBrush^)TO_OBJECT(arg0))->AlignmentX = ((AlignmentX)arg1);
+	OS_NATIVE_EXIT(env, that, TileBrush_1AlignmentX_FUNC);
+}
+#endif
+
+#ifndef NO_TileBrush_1AlignmentY
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TileBrush_1AlignmentY)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TileBrush_1AlignmentY)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TileBrush_1AlignmentY_FUNC);
+	((TileBrush^)TO_OBJECT(arg0))->AlignmentY = ((AlignmentY)arg1);
+	OS_NATIVE_EXIT(env, that, TileBrush_1AlignmentY_FUNC);
+}
+#endif
+
+#ifndef NO_TileBrush_1Stretch
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TileBrush_1Stretch)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TileBrush_1Stretch)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TileBrush_1Stretch_FUNC);
+	((TileBrush^)TO_OBJECT(arg0))->Stretch = ((Stretch)arg1);
+	OS_NATIVE_EXIT(env, that, TileBrush_1Stretch_FUNC);
+}
+#endif
+
+#ifndef NO_TileBrush_1TileMode
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TileBrush_1TileMode)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TileBrush_1TileMode)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TileBrush_1TileMode_FUNC);
+	((TileBrush^)TO_OBJECT(arg0))->TileMode = ((TileMode)arg1);
+	OS_NATIVE_EXIT(env, that, TileBrush_1TileMode_FUNC);
+}
+#endif
+
+#ifndef NO_TileBrush_1Viewport
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TileBrush_1Viewport)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TileBrush_1Viewport)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TileBrush_1Viewport_FUNC);
+	((TileBrush^)TO_OBJECT(arg0))->Viewport = ((Rect)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, TileBrush_1Viewport_FUNC);
+}
+#endif
+
+#ifndef NO_TileBrush_1ViewportUnits
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TileBrush_1ViewportUnits)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TileBrush_1ViewportUnits)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TileBrush_1ViewportUnits_FUNC);
+	((TileBrush^)TO_OBJECT(arg0))->ViewportUnits = ((BrushMappingMode)arg1);
+	OS_NATIVE_EXIT(env, that, TileBrush_1ViewportUnits_FUNC);
+}
+#endif
+
+#ifndef NO_TimeSpan_1FromMilliseconds
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TimeSpan_1FromMilliseconds)(JNIEnv *env, jclass that, jdouble arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TimeSpan_1FromMilliseconds)
+	(JNIEnv *env, jclass that, jdouble arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TimeSpan_1FromMilliseconds_FUNC);
+	rc = (jint)TO_HANDLE(TimeSpan::FromMilliseconds(arg0));
+	OS_NATIVE_EXIT(env, that, TimeSpan_1FromMilliseconds_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TimeSpan_1TotalMilliseconds
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(TimeSpan_1TotalMilliseconds)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(TimeSpan_1TotalMilliseconds)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, TimeSpan_1TotalMilliseconds_FUNC);
+	rc = (jdouble)((TimeSpan^)TO_OBJECT(arg0))->TotalMilliseconds;
+	OS_NATIVE_EXIT(env, that, TimeSpan_1TotalMilliseconds_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TimelineGroup_1Children
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TimelineGroup_1Children)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TimelineGroup_1Children)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TimelineGroup_1Children_FUNC);
+	rc = (jint)TO_HANDLE(((TimelineGroup^)TO_OBJECT(arg0))->Children);
+	OS_NATIVE_EXIT(env, that, TimelineGroup_1Children_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Timeline_1AccelerationRatio__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Timeline_1AccelerationRatio__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Timeline_1AccelerationRatio__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Timeline_1AccelerationRatio__I_FUNC);
+	rc = (jdouble)((Timeline^)TO_OBJECT(arg0))->AccelerationRatio;
+	OS_NATIVE_EXIT(env, that, Timeline_1AccelerationRatio__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Timeline_1AccelerationRatio__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Timeline_1AccelerationRatio__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Timeline_1AccelerationRatio__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Timeline_1AccelerationRatio__ID_FUNC);
+	((Timeline^)TO_OBJECT(arg0))->AccelerationRatio = (arg1);
+	OS_NATIVE_EXIT(env, that, Timeline_1AccelerationRatio__ID_FUNC);
+}
+#endif
+
+#ifndef NO_Timeline_1AutoReverse
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Timeline_1AutoReverse)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Timeline_1AutoReverse)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, Timeline_1AutoReverse_FUNC);
+	((Timeline^)TO_OBJECT(arg0))->AutoReverse = (arg1);
+	OS_NATIVE_EXIT(env, that, Timeline_1AutoReverse_FUNC);
+}
+#endif
+
+#ifndef NO_Timeline_1BeginTime__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Timeline_1BeginTime__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Timeline_1BeginTime__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Timeline_1BeginTime__I_FUNC);
+	rc = (jint)TO_HANDLE(((Timeline^)TO_OBJECT(arg0))->BeginTime);
+	OS_NATIVE_EXIT(env, that, Timeline_1BeginTime__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Timeline_1Completed
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Timeline_1Completed)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Timeline_1Completed)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Timeline_1Completed_FUNC);
+	((Timeline^)TO_OBJECT(arg0))->Completed += ((EventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Timeline_1Completed_FUNC);
+}
+#endif
+
+#ifndef NO_Timeline_1DecelerationRatio__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Timeline_1DecelerationRatio__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Timeline_1DecelerationRatio__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Timeline_1DecelerationRatio__I_FUNC);
+	rc = (jdouble)((Timeline^)TO_OBJECT(arg0))->DecelerationRatio;
+	OS_NATIVE_EXIT(env, that, Timeline_1DecelerationRatio__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Timeline_1DecelerationRatio__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Timeline_1DecelerationRatio__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Timeline_1DecelerationRatio__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Timeline_1DecelerationRatio__ID_FUNC);
+	((Timeline^)TO_OBJECT(arg0))->DecelerationRatio = (arg1);
+	OS_NATIVE_EXIT(env, that, Timeline_1DecelerationRatio__ID_FUNC);
+}
+#endif
+
+#ifndef NO_Timeline_1Duration__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Timeline_1Duration__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Timeline_1Duration__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Timeline_1Duration__I_FUNC);
+	rc = (jint)TO_HANDLE(((Timeline^)TO_OBJECT(arg0))->Duration);
+	OS_NATIVE_EXIT(env, that, Timeline_1Duration__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Timeline_1Duration__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Timeline_1Duration__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Timeline_1Duration__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Timeline_1Duration__II_FUNC);
+	((Timeline^)TO_OBJECT(arg0))->Duration = ((Duration)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Timeline_1Duration__II_FUNC);
+}
+#endif
+
+#ifndef NO_Timeline_1RepeatBehavior
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Timeline_1RepeatBehavior)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Timeline_1RepeatBehavior)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Timeline_1RepeatBehavior_FUNC);
+	((Timeline^)TO_OBJECT(arg0))->RepeatBehavior = ((RepeatBehavior)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Timeline_1RepeatBehavior_FUNC);
+}
+#endif
+
+#ifndef NO_ToggleButton_1Checked
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ToggleButton_1Checked)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ToggleButton_1Checked)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ToggleButton_1Checked_FUNC);
+	((ToggleButton^)TO_OBJECT(arg0))->Checked += ((RoutedEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, ToggleButton_1Checked_FUNC);
+}
+#endif
+
+#ifndef NO_ToggleButton_1CheckedEvent
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ToggleButton_1CheckedEvent)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(ToggleButton_1CheckedEvent)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ToggleButton_1CheckedEvent_FUNC);
+	rc = (jint)TO_HANDLE(ToggleButton::CheckedEvent);
+	OS_NATIVE_EXIT(env, that, ToggleButton_1CheckedEvent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ToggleButton_1IndeterminateEvent
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ToggleButton_1IndeterminateEvent)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(ToggleButton_1IndeterminateEvent)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ToggleButton_1IndeterminateEvent_FUNC);
+	rc = (jint)TO_HANDLE(ToggleButton::IndeterminateEvent);
+	OS_NATIVE_EXIT(env, that, ToggleButton_1IndeterminateEvent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ToggleButton_1IsChecked__I
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(ToggleButton_1IsChecked__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(ToggleButton_1IsChecked__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, ToggleButton_1IsChecked__I_FUNC);
+	rc = (jboolean)((ToggleButton ^)TO_OBJECT(arg0))->IsChecked;
+	OS_NATIVE_EXIT(env, that, ToggleButton_1IsChecked__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ToggleButton_1IsChecked__IZ
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ToggleButton_1IsChecked__IZ)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ToggleButton_1IsChecked__IZ)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, ToggleButton_1IsChecked__IZ_FUNC);
+	((ToggleButton ^)TO_OBJECT(arg0))->IsChecked = (arg1);
+	OS_NATIVE_EXIT(env, that, ToggleButton_1IsChecked__IZ_FUNC);
+}
+#endif
+
+#ifndef NO_ToggleButton_1IsCheckedProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ToggleButton_1IsCheckedProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(ToggleButton_1IsCheckedProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ToggleButton_1IsCheckedProperty_FUNC);
+	rc = (jint)TO_HANDLE(ToggleButton::IsCheckedProperty);
+	OS_NATIVE_EXIT(env, that, ToggleButton_1IsCheckedProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ToggleButton_1IsThreeStateProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ToggleButton_1IsThreeStateProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(ToggleButton_1IsThreeStateProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ToggleButton_1IsThreeStateProperty_FUNC);
+	rc = (jint)TO_HANDLE(ToggleButton::IsThreeStateProperty);
+	OS_NATIVE_EXIT(env, that, ToggleButton_1IsThreeStateProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ToggleButton_1Unchecked
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ToggleButton_1Unchecked)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ToggleButton_1Unchecked)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ToggleButton_1Unchecked_FUNC);
+	((ToggleButton^)TO_OBJECT(arg0))->Unchecked += ((RoutedEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, ToggleButton_1Unchecked_FUNC);
+}
+#endif
+
+#ifndef NO_ToggleButton_1UncheckedEvent
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ToggleButton_1UncheckedEvent)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(ToggleButton_1UncheckedEvent)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ToggleButton_1UncheckedEvent_FUNC);
+	rc = (jint)TO_HANDLE(ToggleButton::UncheckedEvent);
+	OS_NATIVE_EXIT(env, that, ToggleButton_1UncheckedEvent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ToolBarTray_1Background
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ToolBarTray_1Background)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ToolBarTray_1Background)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ToolBarTray_1Background_FUNC);
+	((ToolBarTray^)TO_OBJECT(arg0))->Background = ((Brush^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, ToolBarTray_1Background_FUNC);
+}
+#endif
+
+#ifndef NO_ToolBarTray_1IsLocked__I
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(ToolBarTray_1IsLocked__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(ToolBarTray_1IsLocked__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, ToolBarTray_1IsLocked__I_FUNC);
+	rc = (jboolean)((ToolBarTray^)TO_OBJECT(arg0))->IsLocked;
+	OS_NATIVE_EXIT(env, that, ToolBarTray_1IsLocked__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ToolBarTray_1IsLocked__IZ
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ToolBarTray_1IsLocked__IZ)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ToolBarTray_1IsLocked__IZ)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, ToolBarTray_1IsLocked__IZ_FUNC);
+	((ToolBarTray^)TO_OBJECT(arg0))->IsLocked = (arg1);
+	OS_NATIVE_EXIT(env, that, ToolBarTray_1IsLocked__IZ_FUNC);
+}
+#endif
+
+#ifndef NO_ToolBarTray_1Orientation
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ToolBarTray_1Orientation)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ToolBarTray_1Orientation)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ToolBarTray_1Orientation_FUNC);
+	((ToolBarTray^)TO_OBJECT(arg0))->Orientation = ((Orientation)arg1);
+	OS_NATIVE_EXIT(env, that, ToolBarTray_1Orientation_FUNC);
+}
+#endif
+
+#ifndef NO_ToolBarTray_1ToolBars
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ToolBarTray_1ToolBars)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ToolBarTray_1ToolBars)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ToolBarTray_1ToolBars_FUNC);
+	rc = (jint)TO_HANDLE(((ToolBarTray^)TO_OBJECT(arg0))->ToolBars);
+	OS_NATIVE_EXIT(env, that, ToolBarTray_1ToolBars_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ToolBar_1Band__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ToolBar_1Band__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ToolBar_1Band__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ToolBar_1Band__I_FUNC);
+	rc = (jint)((ToolBar^)TO_OBJECT(arg0))->Band;
+	OS_NATIVE_EXIT(env, that, ToolBar_1Band__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ToolBar_1Band__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ToolBar_1Band__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ToolBar_1Band__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ToolBar_1Band__II_FUNC);
+	((ToolBar^)TO_OBJECT(arg0))->Band = (arg1);
+	OS_NATIVE_EXIT(env, that, ToolBar_1Band__II_FUNC);
+}
+#endif
+
+#ifndef NO_ToolBar_1BandIndex__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ToolBar_1BandIndex__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(ToolBar_1BandIndex__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ToolBar_1BandIndex__I_FUNC);
+	rc = (jint)((ToolBar^)TO_OBJECT(arg0))->BandIndex;
+	OS_NATIVE_EXIT(env, that, ToolBar_1BandIndex__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ToolBar_1BandIndex__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ToolBar_1BandIndex__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ToolBar_1BandIndex__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ToolBar_1BandIndex__II_FUNC);
+	((ToolBar^)TO_OBJECT(arg0))->BandIndex = (arg1);
+	OS_NATIVE_EXIT(env, that, ToolBar_1BandIndex__II_FUNC);
+}
+#endif
+
+#ifndef NO_ToolBar_1BandProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ToolBar_1BandProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(ToolBar_1BandProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ToolBar_1BandProperty_FUNC);
+	rc = (jint)TO_HANDLE(ToolBar::BandProperty);
+	OS_NATIVE_EXIT(env, that, ToolBar_1BandProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ToolBar_1ButtonStyleKey
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ToolBar_1ButtonStyleKey)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(ToolBar_1ButtonStyleKey)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ToolBar_1ButtonStyleKey_FUNC);
+	rc = (jint)TO_HANDLE(ToolBar::ButtonStyleKey);
+	OS_NATIVE_EXIT(env, that, ToolBar_1ButtonStyleKey_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ToolBar_1CheckBoxStyleKey
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ToolBar_1CheckBoxStyleKey)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(ToolBar_1CheckBoxStyleKey)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ToolBar_1CheckBoxStyleKey_FUNC);
+	rc = (jint)TO_HANDLE(ToolBar::CheckBoxStyleKey);
+	OS_NATIVE_EXIT(env, that, ToolBar_1CheckBoxStyleKey_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ToolBar_1HasOverflowItems
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(ToolBar_1HasOverflowItems)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(ToolBar_1HasOverflowItems)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, ToolBar_1HasOverflowItems_FUNC);
+	rc = (jboolean)((ToolBar^)TO_OBJECT(arg0))->HasOverflowItems;
+	OS_NATIVE_EXIT(env, that, ToolBar_1HasOverflowItems_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ToolBar_1RadioButtonStyleKey
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ToolBar_1RadioButtonStyleKey)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(ToolBar_1RadioButtonStyleKey)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ToolBar_1RadioButtonStyleKey_FUNC);
+	rc = (jint)TO_HANDLE(ToolBar::RadioButtonStyleKey);
+	OS_NATIVE_EXIT(env, that, ToolBar_1RadioButtonStyleKey_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ToolBar_1SeparatorStyleKey
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ToolBar_1SeparatorStyleKey)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(ToolBar_1SeparatorStyleKey)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ToolBar_1SeparatorStyleKey_FUNC);
+	rc = (jint)TO_HANDLE(ToolBar::SeparatorStyleKey);
+	OS_NATIVE_EXIT(env, that, ToolBar_1SeparatorStyleKey_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ToolBar_1SetOverflowMode
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ToolBar_1SetOverflowMode)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(ToolBar_1SetOverflowMode)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, ToolBar_1SetOverflowMode_FUNC);
+	ToolBar::SetOverflowMode((DependencyObject^)TO_OBJECT(arg0), (OverflowMode)arg1);
+	OS_NATIVE_EXIT(env, that, ToolBar_1SetOverflowMode_FUNC);
+}
+#endif
+
+#ifndef NO_ToolBar_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(ToolBar_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(ToolBar_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, ToolBar_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(ToolBar::typeid);
+	OS_NATIVE_EXIT(env, that, ToolBar_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TransformCollection_1Add
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TransformCollection_1Add)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TransformCollection_1Add)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TransformCollection_1Add_FUNC);
+	((TransformCollection^)TO_OBJECT(arg0))->Add((Transform^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, TransformCollection_1Add_FUNC);
+}
+#endif
+
+#ifndef NO_TransformGroup_1Children
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TransformGroup_1Children)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TransformGroup_1Children)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TransformGroup_1Children_FUNC);
+	rc = (jint)TO_HANDLE(((TransformGroup^)TO_OBJECT(arg0))->Children);
+	OS_NATIVE_EXIT(env, that, TransformGroup_1Children_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Transform_1Clone
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Transform_1Clone)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Transform_1Clone)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Transform_1Clone_FUNC);
+	rc = (jint)TO_HANDLE(((Transform^)TO_OBJECT(arg0))->Clone());
+	OS_NATIVE_EXIT(env, that, Transform_1Clone_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TreeViewItem_1CollapsedEvent
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TreeViewItem_1CollapsedEvent)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(TreeViewItem_1CollapsedEvent)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TreeViewItem_1CollapsedEvent_FUNC);
+	rc = (jint)TO_HANDLE(TreeViewItem::CollapsedEvent);
+	OS_NATIVE_EXIT(env, that, TreeViewItem_1CollapsedEvent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TreeViewItem_1ExpandedEvent
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TreeViewItem_1ExpandedEvent)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(TreeViewItem_1ExpandedEvent)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TreeViewItem_1ExpandedEvent_FUNC);
+	rc = (jint)TO_HANDLE(TreeViewItem::ExpandedEvent);
+	OS_NATIVE_EXIT(env, that, TreeViewItem_1ExpandedEvent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TreeViewItem_1HeaderTemplate__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TreeViewItem_1HeaderTemplate__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TreeViewItem_1HeaderTemplate__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TreeViewItem_1HeaderTemplate__I_FUNC);
+	rc = (jint)TO_HANDLE(((TreeViewItem^)TO_OBJECT(arg0))->HeaderTemplate);
+	OS_NATIVE_EXIT(env, that, TreeViewItem_1HeaderTemplate__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TreeViewItem_1HeaderTemplate__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TreeViewItem_1HeaderTemplate__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TreeViewItem_1HeaderTemplate__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TreeViewItem_1HeaderTemplate__II_FUNC);
+	((TreeViewItem^)TO_OBJECT(arg0))->HeaderTemplate = ((DataTemplate^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, TreeViewItem_1HeaderTemplate__II_FUNC);
+}
+#endif
+
+#ifndef NO_TreeViewItem_1HeaderTemplateProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TreeViewItem_1HeaderTemplateProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(TreeViewItem_1HeaderTemplateProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TreeViewItem_1HeaderTemplateProperty_FUNC);
+	rc = (jint)TO_HANDLE(TreeViewItem::HeaderTemplateProperty);
+	OS_NATIVE_EXIT(env, that, TreeViewItem_1HeaderTemplateProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TreeViewItem_1IsExpanded__I
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(TreeViewItem_1IsExpanded__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(TreeViewItem_1IsExpanded__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, TreeViewItem_1IsExpanded__I_FUNC);
+	rc = (jboolean)((TreeViewItem^)TO_OBJECT(arg0))->IsExpanded;
+	OS_NATIVE_EXIT(env, that, TreeViewItem_1IsExpanded__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TreeViewItem_1IsExpanded__IZ
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TreeViewItem_1IsExpanded__IZ)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TreeViewItem_1IsExpanded__IZ)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, TreeViewItem_1IsExpanded__IZ_FUNC);
+	((TreeViewItem^)TO_OBJECT(arg0))->IsExpanded = (arg1);
+	OS_NATIVE_EXIT(env, that, TreeViewItem_1IsExpanded__IZ_FUNC);
+}
+#endif
+
+#ifndef NO_TreeViewItem_1IsSelected__I
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(TreeViewItem_1IsSelected__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(TreeViewItem_1IsSelected__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, TreeViewItem_1IsSelected__I_FUNC);
+	rc = (jboolean)((TreeViewItem^)TO_OBJECT(arg0))->IsSelected;
+	OS_NATIVE_EXIT(env, that, TreeViewItem_1IsSelected__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TreeViewItem_1IsSelected__IZ
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TreeViewItem_1IsSelected__IZ)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TreeViewItem_1IsSelected__IZ)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, TreeViewItem_1IsSelected__IZ_FUNC);
+	((TreeViewItem^)TO_OBJECT(arg0))->IsSelected = (arg1);
+	OS_NATIVE_EXIT(env, that, TreeViewItem_1IsSelected__IZ_FUNC);
+}
+#endif
+
+#ifndef NO_TreeViewItem_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TreeViewItem_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(TreeViewItem_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TreeViewItem_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(TreeViewItem::typeid);
+	OS_NATIVE_EXIT(env, that, TreeViewItem_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TreeView_1SelectedItem
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TreeView_1SelectedItem)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TreeView_1SelectedItem)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TreeView_1SelectedItem_FUNC);
+	rc = (jint)TO_HANDLE(((TreeView^)TO_OBJECT(arg0))->SelectedItem);
+	OS_NATIVE_EXIT(env, that, TreeView_1SelectedItem_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TreeView_1SelectedItemChanged
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(TreeView_1SelectedItemChanged)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(TreeView_1SelectedItemChanged)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, TreeView_1SelectedItemChanged_FUNC);
+	((TreeView^)TO_OBJECT(arg0))->SelectedItemChanged += ((RoutedPropertyChangedEventHandler<Object^>^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, TreeView_1SelectedItemChanged_FUNC);
+}
+#endif
+
+#ifndef NO_TreeView_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TreeView_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(TreeView_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TreeView_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(TreeView::typeid);
+	OS_NATIVE_EXIT(env, that, TreeView_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TypeConverter_1ConvertFromString
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TypeConverter_1ConvertFromString)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(TypeConverter_1ConvertFromString)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TypeConverter_1ConvertFromString_FUNC);
+	rc = (jint)TO_HANDLE(((TypeConverter^)TO_OBJECT(arg0))->ConvertFromString((String^)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, TypeConverter_1ConvertFromString_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TypeConverter_1ConvertToString
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TypeConverter_1ConvertToString)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(TypeConverter_1ConvertToString)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TypeConverter_1ConvertToString_FUNC);
+	rc = (jint)TO_HANDLE(((TypeConverter^)TO_OBJECT(arg0))->ConvertToString((Object^)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, TypeConverter_1ConvertToString_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TypeDescriptor_1GetConverter
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TypeDescriptor_1GetConverter)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TypeDescriptor_1GetConverter)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TypeDescriptor_1GetConverter_FUNC);
+	rc = (jint)TO_HANDLE(TypeDescriptor::GetConverter((Object^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, TypeDescriptor_1GetConverter_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TypeDescriptor_1GetProperties
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TypeDescriptor_1GetProperties)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TypeDescriptor_1GetProperties)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TypeDescriptor_1GetProperties_FUNC);
+	rc = (jint)TO_HANDLE(TypeDescriptor::GetProperties((Object^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, TypeDescriptor_1GetProperties_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Type_1FullName
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Type_1FullName)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Type_1FullName)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Type_1FullName_FUNC);
+	rc = (jint)TO_HANDLE(((Type^)TO_OBJECT(arg0))->FullName);
+	OS_NATIVE_EXIT(env, that, Type_1FullName_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Type_1GetMethod
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Type_1GetMethod)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT jint JNICALL OS_NATIVE(Type_1GetMethod)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Type_1GetMethod_FUNC);
+	rc = (jint)TO_HANDLE(((Type^)TO_OBJECT(arg0))->GetMethod((String^)TO_OBJECT(arg1), (BindingFlags)arg2));
+	OS_NATIVE_EXIT(env, that, Type_1GetMethod_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Type_1GetProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Type_1GetProperty)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT jint JNICALL OS_NATIVE(Type_1GetProperty)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Type_1GetProperty_FUNC);
+	rc = (jint)TO_HANDLE(((Type^)TO_OBJECT(arg0))->GetProperty((String^)TO_OBJECT(arg1), (BindingFlags)arg2));
+	OS_NATIVE_EXIT(env, that, Type_1GetProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Type_1GetType
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Type_1GetType)(JNIEnv *env, jclass that, jint arg0, jboolean arg1, jboolean arg2);
+JNIEXPORT jint JNICALL OS_NATIVE(Type_1GetType)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1, jboolean arg2)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Type_1GetType_FUNC);
+	rc = (jint)TO_HANDLE(Type::GetType((String^)TO_OBJECT(arg0), arg1, arg2));
+	OS_NATIVE_EXIT(env, that, Type_1GetType_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Type_1IsInstanceOfType
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(Type_1IsInstanceOfType)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jboolean JNICALL OS_NATIVE(Type_1IsInstanceOfType)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, Type_1IsInstanceOfType_FUNC);
+	rc = (jboolean)((Type^)TO_OBJECT(arg0))->IsInstanceOfType((Object^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Type_1IsInstanceOfType_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TypefaceCollection_1Count
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TypefaceCollection_1Count)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TypefaceCollection_1Count)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TypefaceCollection_1Count_FUNC);
+	rc = (jint)((System::Collections::Generic::ICollection<Typeface^>^)TO_OBJECT(arg0))->Count;
+	OS_NATIVE_EXIT(env, that, TypefaceCollection_1Count_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TypefaceCollection_1Current
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TypefaceCollection_1Current)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TypefaceCollection_1Current)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TypefaceCollection_1Current_FUNC);
+	rc = (jint)TO_HANDLE(((System::Collections::Generic::IEnumerator<Typeface^>^)TO_OBJECT(arg0))->Current);
+	OS_NATIVE_EXIT(env, that, TypefaceCollection_1Current_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_TypefaceCollection_1GetEnumerator
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(TypefaceCollection_1GetEnumerator)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(TypefaceCollection_1GetEnumerator)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, TypefaceCollection_1GetEnumerator_FUNC);
+	rc = (jint)TO_HANDLE(((System::Collections::Generic::IEnumerable<Typeface^>^)TO_OBJECT(arg0))->GetEnumerator());
+	OS_NATIVE_EXIT(env, that, TypefaceCollection_1GetEnumerator_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Typeface_1FontFamily
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Typeface_1FontFamily)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Typeface_1FontFamily)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Typeface_1FontFamily_FUNC);
+	rc = (jint)TO_HANDLE(((Typeface^)TO_OBJECT(arg0))->FontFamily);
+	OS_NATIVE_EXIT(env, that, Typeface_1FontFamily_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Typeface_1Stretch
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Typeface_1Stretch)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Typeface_1Stretch)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Typeface_1Stretch_FUNC);
+	rc = (jint)TO_HANDLE(((Typeface^)TO_OBJECT(arg0))->Stretch);
+	OS_NATIVE_EXIT(env, that, Typeface_1Stretch_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Typeface_1Style
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Typeface_1Style)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Typeface_1Style)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Typeface_1Style_FUNC);
+	rc = (jint)TO_HANDLE(((Typeface^)TO_OBJECT(arg0))->Style);
+	OS_NATIVE_EXIT(env, that, Typeface_1Style_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Typeface_1Weight
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Typeface_1Weight)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Typeface_1Weight)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Typeface_1Weight_FUNC);
+	rc = (jint)TO_HANDLE(((Typeface^)TO_OBJECT(arg0))->Weight);
+	OS_NATIVE_EXIT(env, that, Typeface_1Weight_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElementCollection_1Add
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElementCollection_1Add)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElementCollection_1Add)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElementCollection_1Add_FUNC);
+	((UIElementCollection^)TO_OBJECT(arg0))->Add((UIElement^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElementCollection_1Add_FUNC);
+}
+#endif
+
+#ifndef NO_UIElementCollection_1Clear
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElementCollection_1Clear)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(UIElementCollection_1Clear)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, UIElementCollection_1Clear_FUNC);
+	((UIElementCollection^)TO_OBJECT(arg0))->Clear();
+	OS_NATIVE_EXIT(env, that, UIElementCollection_1Clear_FUNC);
+}
+#endif
+
+#ifndef NO_UIElementCollection_1Contains
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(UIElementCollection_1Contains)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jboolean JNICALL OS_NATIVE(UIElementCollection_1Contains)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElementCollection_1Contains_FUNC);
+	rc = (jboolean)((UIElementCollection^)TO_OBJECT(arg0))->Contains((UIElement^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElementCollection_1Contains_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElementCollection_1Count
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(UIElementCollection_1Count)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(UIElementCollection_1Count)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElementCollection_1Count_FUNC);
+	rc = (jint)((UIElementCollection^)TO_OBJECT(arg0))->Count;
+	OS_NATIVE_EXIT(env, that, UIElementCollection_1Count_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElementCollection_1Current
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(UIElementCollection_1Current)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(UIElementCollection_1Current)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElementCollection_1Current_FUNC);
+	rc = (jint)TO_HANDLE(((IEnumerator^)TO_OBJECT(arg0))->Current);
+	OS_NATIVE_EXIT(env, that, UIElementCollection_1Current_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElementCollection_1GetEnumerator
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(UIElementCollection_1GetEnumerator)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(UIElementCollection_1GetEnumerator)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElementCollection_1GetEnumerator_FUNC);
+	rc = (jint)TO_HANDLE(((IEnumerable^)TO_OBJECT(arg0))->GetEnumerator());
+	OS_NATIVE_EXIT(env, that, UIElementCollection_1GetEnumerator_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElementCollection_1IndexOf
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(UIElementCollection_1IndexOf)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(UIElementCollection_1IndexOf)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElementCollection_1IndexOf_FUNC);
+	rc = (jint)((UIElementCollection^)TO_OBJECT(arg0))->IndexOf((UIElement^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElementCollection_1IndexOf_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElementCollection_1Insert
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElementCollection_1Insert)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(UIElementCollection_1Insert)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, UIElementCollection_1Insert_FUNC);
+	((UIElementCollection^)TO_OBJECT(arg0))->Insert(arg1, (UIElement^)TO_OBJECT(arg2));
+	OS_NATIVE_EXIT(env, that, UIElementCollection_1Insert_FUNC);
+}
+#endif
+
+#ifndef NO_UIElementCollection_1Remove
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElementCollection_1Remove)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElementCollection_1Remove)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElementCollection_1Remove_FUNC);
+	((UIElementCollection^)TO_OBJECT(arg0))->Remove((UIElement^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElementCollection_1Remove_FUNC);
+}
+#endif
+
+#ifndef NO_UIElementCollection_1default
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(UIElementCollection_1default)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(UIElementCollection_1default)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElementCollection_1default_FUNC);
+	rc = (jint)TO_HANDLE(((UIElementCollection^)TO_OBJECT(arg0))->default[arg1]);
+	OS_NATIVE_EXIT(env, that, UIElementCollection_1default_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1AddHandler
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1AddHandler)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jboolean arg3);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1AddHandler)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jboolean arg3)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1AddHandler_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->AddHandler((RoutedEvent^)TO_OBJECT(arg1), (Delegate^)TO_OBJECT(arg2), arg3);
+	OS_NATIVE_EXIT(env, that, UIElement_1AddHandler_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1AllowDrop
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1AllowDrop)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1AllowDrop)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1AllowDrop_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->AllowDrop = (arg1);
+	OS_NATIVE_EXIT(env, that, UIElement_1AllowDrop_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1BeginAnimation
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1BeginAnimation)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1BeginAnimation)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1BeginAnimation_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->BeginAnimation((DependencyProperty^)TO_OBJECT(arg1), (AnimationTimeline^)TO_OBJECT(arg2));
+	OS_NATIVE_EXIT(env, that, UIElement_1BeginAnimation_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1BitmapEffect__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1BitmapEffect__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1BitmapEffect__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1BitmapEffect__I_FUNC);
+	rc = (jint)TO_HANDLE(((UIElement^)TO_OBJECT(arg0))->BitmapEffect);
+	OS_NATIVE_EXIT(env, that, UIElement_1BitmapEffect__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1BitmapEffect__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1BitmapEffect__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1BitmapEffect__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1BitmapEffect__II_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->BitmapEffect = ((BitmapEffect^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1BitmapEffect__II_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1CaptureMouse
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(UIElement_1CaptureMouse)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(UIElement_1CaptureMouse)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1CaptureMouse_FUNC);
+	rc = (jboolean)((UIElement^)TO_OBJECT(arg0))->CaptureMouse();
+	OS_NATIVE_EXIT(env, that, UIElement_1CaptureMouse_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1Clip
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1Clip)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1Clip)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1Clip_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->Clip = ((Geometry^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1Clip_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1ClipToBounds
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1ClipToBounds)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1ClipToBounds)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1ClipToBounds_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->ClipToBounds = (arg1);
+	OS_NATIVE_EXIT(env, that, UIElement_1ClipToBounds_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1ClipToBoundsProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1ClipToBoundsProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1ClipToBoundsProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1ClipToBoundsProperty_FUNC);
+	rc = (jint)TO_HANDLE(UIElement::ClipToBoundsProperty);
+	OS_NATIVE_EXIT(env, that, UIElement_1ClipToBoundsProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1DesiredSize
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1DesiredSize)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1DesiredSize)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1DesiredSize_FUNC);
+	rc = (jint)TO_HANDLE(((UIElement^)TO_OBJECT(arg0))->DesiredSize);
+	OS_NATIVE_EXIT(env, that, UIElement_1DesiredSize_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1DragEnter
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1DragEnter)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1DragEnter)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1DragEnter_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->DragEnter += ((DragEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1DragEnter_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1DragEnterEvent
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1DragEnterEvent)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1DragEnterEvent)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1DragEnterEvent_FUNC);
+	rc = (jint)TO_HANDLE(UIElement::DragEnterEvent);
+	OS_NATIVE_EXIT(env, that, UIElement_1DragEnterEvent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1DragLeave
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1DragLeave)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1DragLeave)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1DragLeave_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->DragLeave += ((DragEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1DragLeave_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1DragLeaveEvent
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1DragLeaveEvent)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1DragLeaveEvent)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1DragLeaveEvent_FUNC);
+	rc = (jint)TO_HANDLE(UIElement::DragLeaveEvent);
+	OS_NATIVE_EXIT(env, that, UIElement_1DragLeaveEvent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1DragOver
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1DragOver)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1DragOver)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1DragOver_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->DragOver += ((DragEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1DragOver_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1DragOverEvent
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1DragOverEvent)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1DragOverEvent)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1DragOverEvent_FUNC);
+	rc = (jint)TO_HANDLE(UIElement::DragOverEvent);
+	OS_NATIVE_EXIT(env, that, UIElement_1DragOverEvent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1Drop
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1Drop)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1Drop)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1Drop_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->Drop += ((DragEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1Drop_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1DropEvent
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1DropEvent)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1DropEvent)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1DropEvent_FUNC);
+	rc = (jint)TO_HANDLE(UIElement::DropEvent);
+	OS_NATIVE_EXIT(env, that, UIElement_1DropEvent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1Focus
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(UIElement_1Focus)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(UIElement_1Focus)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1Focus_FUNC);
+	rc = (jboolean)((UIElement^)TO_OBJECT(arg0))->Focus();
+	OS_NATIVE_EXIT(env, that, UIElement_1Focus_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1Focusable
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1Focusable)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1Focusable)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1Focusable_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->Focusable = (arg1);
+	OS_NATIVE_EXIT(env, that, UIElement_1Focusable_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1GiveFeedback
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1GiveFeedback)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1GiveFeedback)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1GiveFeedback_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->GiveFeedback += ((GiveFeedbackEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1GiveFeedback_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1GiveFeedbackEvent
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1GiveFeedbackEvent)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1GiveFeedbackEvent)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1GiveFeedbackEvent_FUNC);
+	rc = (jint)TO_HANDLE(UIElement::GiveFeedbackEvent);
+	OS_NATIVE_EXIT(env, that, UIElement_1GiveFeedbackEvent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1InputHitTest
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1InputHitTest)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1InputHitTest)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1InputHitTest_FUNC);
+	rc = (jint)TO_HANDLE(((UIElement^)TO_OBJECT(arg0))->InputHitTest((Point)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, UIElement_1InputHitTest_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1InvalidateVisual
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1InvalidateVisual)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1InvalidateVisual)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1InvalidateVisual_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->InvalidateVisual();
+	OS_NATIVE_EXIT(env, that, UIElement_1InvalidateVisual_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1IsEnabled__I
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(UIElement_1IsEnabled__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(UIElement_1IsEnabled__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1IsEnabled__I_FUNC);
+	rc = (jboolean)((UIElement^)TO_OBJECT(arg0))->IsEnabled;
+	OS_NATIVE_EXIT(env, that, UIElement_1IsEnabled__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1IsEnabled__IZ
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1IsEnabled__IZ)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1IsEnabled__IZ)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1IsEnabled__IZ_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->IsEnabled = (arg1);
+	OS_NATIVE_EXIT(env, that, UIElement_1IsEnabled__IZ_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1IsFocused
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(UIElement_1IsFocused)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(UIElement_1IsFocused)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1IsFocused_FUNC);
+	rc = (jboolean)((UIElement^)TO_OBJECT(arg0))->IsFocused;
+	OS_NATIVE_EXIT(env, that, UIElement_1IsFocused_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1IsHitTestVisible
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1IsHitTestVisible)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1IsHitTestVisible)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1IsHitTestVisible_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->IsHitTestVisible = (arg1);
+	OS_NATIVE_EXIT(env, that, UIElement_1IsHitTestVisible_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1IsKeyboardFocusWithin
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(UIElement_1IsKeyboardFocusWithin)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(UIElement_1IsKeyboardFocusWithin)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1IsKeyboardFocusWithin_FUNC);
+	rc = (jboolean)((UIElement^)TO_OBJECT(arg0))->IsKeyboardFocusWithin;
+	OS_NATIVE_EXIT(env, that, UIElement_1IsKeyboardFocusWithin_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1IsKeyboardFocused
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(UIElement_1IsKeyboardFocused)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(UIElement_1IsKeyboardFocused)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1IsKeyboardFocused_FUNC);
+	rc = (jboolean)((UIElement^)TO_OBJECT(arg0))->IsKeyboardFocused;
+	OS_NATIVE_EXIT(env, that, UIElement_1IsKeyboardFocused_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1IsMeasureValid
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(UIElement_1IsMeasureValid)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(UIElement_1IsMeasureValid)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1IsMeasureValid_FUNC);
+	rc = (jboolean)((UIElement^)TO_OBJECT(arg0))->IsMeasureValid;
+	OS_NATIVE_EXIT(env, that, UIElement_1IsMeasureValid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1IsMouseOver
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(UIElement_1IsMouseOver)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(UIElement_1IsMouseOver)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1IsMouseOver_FUNC);
+	rc = (jboolean)((UIElement^)TO_OBJECT(arg0))->IsMouseOver;
+	OS_NATIVE_EXIT(env, that, UIElement_1IsMouseOver_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1IsVisible
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(UIElement_1IsVisible)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(UIElement_1IsVisible)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1IsVisible_FUNC);
+	rc = (jboolean)((UIElement^)TO_OBJECT(arg0))->IsVisible;
+	OS_NATIVE_EXIT(env, that, UIElement_1IsVisible_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1KeyDown
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1KeyDown)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1KeyDown)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1KeyDown_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->KeyDown += ((KeyEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1KeyDown_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1KeyUp
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1KeyUp)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1KeyUp)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1KeyUp_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->KeyUp += ((KeyEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1KeyUp_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1LayoutUpdated
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1LayoutUpdated)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1LayoutUpdated)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1LayoutUpdated_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->LayoutUpdated += ((EventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1LayoutUpdated_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1LostKeyboardFocus
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1LostKeyboardFocus)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1LostKeyboardFocus)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1LostKeyboardFocus_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->LostKeyboardFocus += ((KeyboardFocusChangedEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1LostKeyboardFocus_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1Measure
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1Measure)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1Measure)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1Measure_FUNC);
+	((UIElement ^)TO_OBJECT(arg0))->Measure((Size)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1Measure_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1MouseDown
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1MouseDown)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1MouseDown)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1MouseDown_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->MouseDown += ((MouseButtonEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1MouseDown_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1MouseEnter
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1MouseEnter)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1MouseEnter)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1MouseEnter_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->MouseEnter += ((MouseEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1MouseEnter_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1MouseLeave
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1MouseLeave)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1MouseLeave)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1MouseLeave_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->MouseLeave += ((MouseEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1MouseLeave_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1MouseMove
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1MouseMove)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1MouseMove)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1MouseMove_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->MouseMove += ((MouseEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1MouseMove_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1MouseUp
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1MouseUp)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1MouseUp)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1MouseUp_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->MouseUp += ((MouseButtonEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1MouseUp_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1MouseWheel
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1MouseWheel)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1MouseWheel)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1MouseWheel_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->MouseWheel += ((MouseWheelEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1MouseWheel_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1MoveFocus
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1MoveFocus)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1MoveFocus)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1MoveFocus_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->MoveFocus((TraversalRequest^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1MoveFocus_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1Opacity__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(UIElement_1Opacity__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(UIElement_1Opacity__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1Opacity__I_FUNC);
+	rc = (jdouble)((UIElement^)TO_OBJECT(arg0))->Opacity;
+	OS_NATIVE_EXIT(env, that, UIElement_1Opacity__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1Opacity__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1Opacity__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1Opacity__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1Opacity__ID_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->Opacity = (arg1);
+	OS_NATIVE_EXIT(env, that, UIElement_1Opacity__ID_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1OpacityProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1OpacityProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1OpacityProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1OpacityProperty_FUNC);
+	rc = (jint)TO_HANDLE(UIElement::OpacityProperty);
+	OS_NATIVE_EXIT(env, that, UIElement_1OpacityProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1PreviewGotKeyboardFocus
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1PreviewGotKeyboardFocus)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1PreviewGotKeyboardFocus)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1PreviewGotKeyboardFocus_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->PreviewGotKeyboardFocus += ((KeyboardFocusChangedEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1PreviewGotKeyboardFocus_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1PreviewKeyDown
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1PreviewKeyDown)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1PreviewKeyDown)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1PreviewKeyDown_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->PreviewKeyDown += ((KeyEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1PreviewKeyDown_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1PreviewKeyUp
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1PreviewKeyUp)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1PreviewKeyUp)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1PreviewKeyUp_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->PreviewKeyUp += ((KeyEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1PreviewKeyUp_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1PreviewLostKeyboardFocus
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1PreviewLostKeyboardFocus)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1PreviewLostKeyboardFocus)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1PreviewLostKeyboardFocus_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->PreviewLostKeyboardFocus += ((KeyboardFocusChangedEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1PreviewLostKeyboardFocus_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1PreviewMouseDown
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1PreviewMouseDown)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1PreviewMouseDown)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1PreviewMouseDown_FUNC);
+	((UIElement ^)TO_OBJECT(arg0))->PreviewMouseDown += ((MouseButtonEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1PreviewMouseDown_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1PreviewMouseMove
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1PreviewMouseMove)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1PreviewMouseMove)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1PreviewMouseMove_FUNC);
+	((UIElement ^)TO_OBJECT(arg0))->PreviewMouseMove += ((MouseEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1PreviewMouseMove_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1PreviewMouseUp
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1PreviewMouseUp)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1PreviewMouseUp)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1PreviewMouseUp_FUNC);
+	((UIElement ^)TO_OBJECT(arg0))->PreviewMouseUp += ((MouseButtonEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1PreviewMouseUp_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1PreviewMouseWheel
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1PreviewMouseWheel)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1PreviewMouseWheel)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1PreviewMouseWheel_FUNC);
+	((UIElement ^)TO_OBJECT(arg0))->PreviewMouseWheel += ((MouseWheelEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1PreviewMouseWheel_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1PreviewTextInput
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1PreviewTextInput)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1PreviewTextInput)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1PreviewTextInput_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->PreviewTextInput += ((TextCompositionEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1PreviewTextInput_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1QueryContinueDrag
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1QueryContinueDrag)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1QueryContinueDrag)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1QueryContinueDrag_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->QueryContinueDrag += ((QueryContinueDragEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1QueryContinueDrag_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1QueryContinueDragEvent
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1QueryContinueDragEvent)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1QueryContinueDragEvent)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1QueryContinueDragEvent_FUNC);
+	rc = (jint)TO_HANDLE(UIElement::QueryContinueDragEvent);
+	OS_NATIVE_EXIT(env, that, UIElement_1QueryContinueDragEvent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1ReleaseMouseCapture
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1ReleaseMouseCapture)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1ReleaseMouseCapture)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1ReleaseMouseCapture_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->ReleaseMouseCapture();
+	OS_NATIVE_EXIT(env, that, UIElement_1ReleaseMouseCapture_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1RemoveHandler
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1RemoveHandler)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1RemoveHandler)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1RemoveHandler_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->RemoveHandler((RoutedEvent^)TO_OBJECT(arg1), (Delegate^)TO_OBJECT(arg2));
+	OS_NATIVE_EXIT(env, that, UIElement_1RemoveHandler_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1RenderSize
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1RenderSize)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1RenderSize)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1RenderSize_FUNC);
+	rc = (jint)TO_HANDLE(((UIElement^)TO_OBJECT(arg0))->RenderSize);
+	OS_NATIVE_EXIT(env, that, UIElement_1RenderSize_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1SnapsToDevicePixels
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1SnapsToDevicePixels)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1SnapsToDevicePixels)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1SnapsToDevicePixels_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->SnapsToDevicePixels = (arg1);
+	OS_NATIVE_EXIT(env, that, UIElement_1SnapsToDevicePixels_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1TextInput
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1TextInput)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1TextInput)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1TextInput_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->TextInput += ((TextCompositionEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, UIElement_1TextInput_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1TranslatePoint
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1TranslatePoint)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1TranslatePoint)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1TranslatePoint_FUNC);
+	rc = (jint)TO_HANDLE(((UIElement^)TO_OBJECT(arg0))->TranslatePoint((Point)TO_OBJECT(arg1), (UIElement^)TO_OBJECT(arg2)));
+	OS_NATIVE_EXIT(env, that, UIElement_1TranslatePoint_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1UpdateLayout
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1UpdateLayout)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1UpdateLayout)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1UpdateLayout_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->UpdateLayout();
+	OS_NATIVE_EXIT(env, that, UIElement_1UpdateLayout_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1Visibility__I
+extern "C" JNIEXPORT jbyte JNICALL OS_NATIVE(UIElement_1Visibility__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jbyte JNICALL OS_NATIVE(UIElement_1Visibility__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jbyte rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1Visibility__I_FUNC);
+	rc = (jbyte)((UIElement^)TO_OBJECT(arg0))->Visibility;
+	OS_NATIVE_EXIT(env, that, UIElement_1Visibility__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_UIElement_1Visibility__IB
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(UIElement_1Visibility__IB)(JNIEnv *env, jclass that, jint arg0, jbyte arg1);
+JNIEXPORT void JNICALL OS_NATIVE(UIElement_1Visibility__IB)
+	(JNIEnv *env, jclass that, jint arg0, jbyte arg1)
+{
+	OS_NATIVE_ENTER(env, that, UIElement_1Visibility__IB_FUNC);
+	((UIElement^)TO_OBJECT(arg0))->Visibility = ((Visibility)arg1);
+	OS_NATIVE_EXIT(env, that, UIElement_1Visibility__IB_FUNC);
+}
+#endif
+
+#ifndef NO_UIElement_1VisibilityProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1VisibilityProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(UIElement_1VisibilityProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, UIElement_1VisibilityProperty_FUNC);
+	rc = (jint)TO_HANDLE(UIElement::VisibilityProperty);
+	OS_NATIVE_EXIT(env, that, UIElement_1VisibilityProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_VirtualizingStackPanel_1VerticalOffset
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(VirtualizingStackPanel_1VerticalOffset)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(VirtualizingStackPanel_1VerticalOffset)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, VirtualizingStackPanel_1VerticalOffset_FUNC);
+	rc = (jdouble)((VirtualizingStackPanel^)TO_OBJECT(arg0))->VerticalOffset;
+	OS_NATIVE_EXIT(env, that, VirtualizingStackPanel_1VerticalOffset_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_VisualTreeHelper_1GetChild
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(VisualTreeHelper_1GetChild)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(VisualTreeHelper_1GetChild)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, VisualTreeHelper_1GetChild_FUNC);
+	rc = (jint)TO_HANDLE(VisualTreeHelper::GetChild((DependencyObject^)TO_OBJECT(arg0), arg1));
+	OS_NATIVE_EXIT(env, that, VisualTreeHelper_1GetChild_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_VisualTreeHelper_1GetChildrenCount
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(VisualTreeHelper_1GetChildrenCount)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(VisualTreeHelper_1GetChildrenCount)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, VisualTreeHelper_1GetChildrenCount_FUNC);
+	rc = (jint)VisualTreeHelper::GetChildrenCount((DependencyObject^)TO_OBJECT(arg0));
+	OS_NATIVE_EXIT(env, that, VisualTreeHelper_1GetChildrenCount_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_VisualTreeHelper_1GetParent
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(VisualTreeHelper_1GetParent)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(VisualTreeHelper_1GetParent)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, VisualTreeHelper_1GetParent_FUNC);
+	rc = (jint)TO_HANDLE(VisualTreeHelper::GetParent((DependencyObject^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, VisualTreeHelper_1GetParent_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Visual_1IsAncestorOf
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(Visual_1IsAncestorOf)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jboolean JNICALL OS_NATIVE(Visual_1IsAncestorOf)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, Visual_1IsAncestorOf_FUNC);
+	rc = (jboolean)((Visual^)TO_OBJECT(arg0))->IsAncestorOf((DependencyObject^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Visual_1IsAncestorOf_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Visual_1IsDescendantOf
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(Visual_1IsDescendantOf)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jboolean JNICALL OS_NATIVE(Visual_1IsDescendantOf)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, Visual_1IsDescendantOf_FUNC);
+	rc = (jboolean)((Visual^)TO_OBJECT(arg0))->IsDescendantOf((DependencyObject^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Visual_1IsDescendantOf_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Visual_1PointFromScreen
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Visual_1PointFromScreen)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(Visual_1PointFromScreen)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Visual_1PointFromScreen_FUNC);
+	rc = (jint)TO_HANDLE(((Visual^)TO_OBJECT(arg0))->PointFromScreen((Point)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, Visual_1PointFromScreen_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Visual_1PointToScreen
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Visual_1PointToScreen)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(Visual_1PointToScreen)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Visual_1PointToScreen_FUNC);
+	rc = (jint)TO_HANDLE(((Visual^)TO_OBJECT(arg0))->PointToScreen((Point)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, Visual_1PointToScreen_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_WebBrowserDocumentCompletedEventArgs_1Url
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(WebBrowserDocumentCompletedEventArgs_1Url)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(WebBrowserDocumentCompletedEventArgs_1Url)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, WebBrowserDocumentCompletedEventArgs_1Url_FUNC);
+	rc = (jint)TO_HANDLE(((System::Windows::Forms::WebBrowserDocumentCompletedEventArgs^)TO_OBJECT(arg0))->Url);
+	OS_NATIVE_EXIT(env, that, WebBrowserDocumentCompletedEventArgs_1Url_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_WebBrowserNavigatedEventArgs_1Url
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(WebBrowserNavigatedEventArgs_1Url)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(WebBrowserNavigatedEventArgs_1Url)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, WebBrowserNavigatedEventArgs_1Url_FUNC);
+	rc = (jint)TO_HANDLE(((System::Windows::Forms::WebBrowserNavigatedEventArgs^)TO_OBJECT(arg0))->Url);
+	OS_NATIVE_EXIT(env, that, WebBrowserNavigatedEventArgs_1Url_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_WebBrowserNavigatingEventArgs_1Url
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(WebBrowserNavigatingEventArgs_1Url)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(WebBrowserNavigatingEventArgs_1Url)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, WebBrowserNavigatingEventArgs_1Url_FUNC);
+	rc = (jint)TO_HANDLE(((System::Windows::Forms::WebBrowserNavigatingEventArgs^)TO_OBJECT(arg0))->Url);
+	OS_NATIVE_EXIT(env, that, WebBrowserNavigatingEventArgs_1Url_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_WebBrowserProgressChangedEventArgs_1CurrentProgress
+extern "C" JNIEXPORT jlong JNICALL OS_NATIVE(WebBrowserProgressChangedEventArgs_1CurrentProgress)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jlong JNICALL OS_NATIVE(WebBrowserProgressChangedEventArgs_1CurrentProgress)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jlong rc = 0;
+	OS_NATIVE_ENTER(env, that, WebBrowserProgressChangedEventArgs_1CurrentProgress_FUNC);
+	rc = (jlong)((System::Windows::Forms::WebBrowserProgressChangedEventArgs^)TO_OBJECT(arg0))->CurrentProgress;
+	OS_NATIVE_EXIT(env, that, WebBrowserProgressChangedEventArgs_1CurrentProgress_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_WebBrowserProgressChangedEventArgs_1MaximumProgress
+extern "C" JNIEXPORT jlong JNICALL OS_NATIVE(WebBrowserProgressChangedEventArgs_1MaximumProgress)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jlong JNICALL OS_NATIVE(WebBrowserProgressChangedEventArgs_1MaximumProgress)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jlong rc = 0;
+	OS_NATIVE_ENTER(env, that, WebBrowserProgressChangedEventArgs_1MaximumProgress_FUNC);
+	rc = (jlong)((System::Windows::Forms::WebBrowserProgressChangedEventArgs^)TO_OBJECT(arg0))->MaximumProgress;
+	OS_NATIVE_EXIT(env, that, WebBrowserProgressChangedEventArgs_1MaximumProgress_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_WebBrowser_1CanGoBack
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(WebBrowser_1CanGoBack)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(WebBrowser_1CanGoBack)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, WebBrowser_1CanGoBack_FUNC);
+	rc = (jboolean)((System::Windows::Forms::WebBrowser^)TO_OBJECT(arg0))->CanGoBack;
+	OS_NATIVE_EXIT(env, that, WebBrowser_1CanGoBack_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_WebBrowser_1CanGoForward
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(WebBrowser_1CanGoForward)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(WebBrowser_1CanGoForward)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, WebBrowser_1CanGoForward_FUNC);
+	rc = (jboolean)((System::Windows::Forms::WebBrowser^)TO_OBJECT(arg0))->CanGoForward;
+	OS_NATIVE_EXIT(env, that, WebBrowser_1CanGoForward_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_WebBrowser_1Document
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(WebBrowser_1Document)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(WebBrowser_1Document)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, WebBrowser_1Document_FUNC);
+	rc = (jint)TO_HANDLE(((System::Windows::Forms::WebBrowser^)TO_OBJECT(arg0))->Document);
+	OS_NATIVE_EXIT(env, that, WebBrowser_1Document_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_WebBrowser_1DocumentCompleted
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(WebBrowser_1DocumentCompleted)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(WebBrowser_1DocumentCompleted)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, WebBrowser_1DocumentCompleted_FUNC);
+	((System::Windows::Forms::WebBrowser^)TO_OBJECT(arg0))->DocumentCompleted += ((System::Windows::Forms::WebBrowserDocumentCompletedEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, WebBrowser_1DocumentCompleted_FUNC);
+}
+#endif
+
+#ifndef NO_WebBrowser_1DocumentText__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(WebBrowser_1DocumentText__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(WebBrowser_1DocumentText__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, WebBrowser_1DocumentText__I_FUNC);
+	rc = (jint)TO_HANDLE(((System::Windows::Forms::WebBrowser^)TO_OBJECT(arg0))->DocumentText);
+	OS_NATIVE_EXIT(env, that, WebBrowser_1DocumentText__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_WebBrowser_1DocumentText__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(WebBrowser_1DocumentText__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(WebBrowser_1DocumentText__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, WebBrowser_1DocumentText__II_FUNC);
+	((System::Windows::Forms::WebBrowser^)TO_OBJECT(arg0))->DocumentText = ((String^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, WebBrowser_1DocumentText__II_FUNC);
+}
+#endif
+
+#ifndef NO_WebBrowser_1DocumentTitle
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(WebBrowser_1DocumentTitle)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(WebBrowser_1DocumentTitle)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, WebBrowser_1DocumentTitle_FUNC);
+	rc = (jint)TO_HANDLE(((System::Windows::Forms::WebBrowser^)TO_OBJECT(arg0))->DocumentTitle);
+	OS_NATIVE_EXIT(env, that, WebBrowser_1DocumentTitle_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_WebBrowser_1DocumentTitleChanged
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(WebBrowser_1DocumentTitleChanged)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(WebBrowser_1DocumentTitleChanged)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, WebBrowser_1DocumentTitleChanged_FUNC);
+	((System::Windows::Forms::WebBrowser^)TO_OBJECT(arg0))->DocumentTitleChanged += ((EventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, WebBrowser_1DocumentTitleChanged_FUNC);
+}
+#endif
+
+#ifndef NO_WebBrowser_1GoBack
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(WebBrowser_1GoBack)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(WebBrowser_1GoBack)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, WebBrowser_1GoBack_FUNC);
+	rc = (jboolean)((System::Windows::Forms::WebBrowser^)TO_OBJECT(arg0))->GoBack();
+	OS_NATIVE_EXIT(env, that, WebBrowser_1GoBack_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_WebBrowser_1GoForward
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(WebBrowser_1GoForward)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(WebBrowser_1GoForward)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, WebBrowser_1GoForward_FUNC);
+	rc = (jboolean)((System::Windows::Forms::WebBrowser^)TO_OBJECT(arg0))->GoForward();
+	OS_NATIVE_EXIT(env, that, WebBrowser_1GoForward_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_WebBrowser_1Navigate
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(WebBrowser_1Navigate)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(WebBrowser_1Navigate)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, WebBrowser_1Navigate_FUNC);
+	((System::Windows::Forms::WebBrowser^)TO_OBJECT(arg0))->Navigate((String^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, WebBrowser_1Navigate_FUNC);
+}
+#endif
+
+#ifndef NO_WebBrowser_1Navigated
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(WebBrowser_1Navigated)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(WebBrowser_1Navigated)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, WebBrowser_1Navigated_FUNC);
+	((System::Windows::Forms::WebBrowser^)TO_OBJECT(arg0))->Navigated += ((System::Windows::Forms::WebBrowserNavigatedEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, WebBrowser_1Navigated_FUNC);
+}
+#endif
+
+#ifndef NO_WebBrowser_1Navigating
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(WebBrowser_1Navigating)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(WebBrowser_1Navigating)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, WebBrowser_1Navigating_FUNC);
+	((System::Windows::Forms::WebBrowser^)TO_OBJECT(arg0))->Navigating += ((System::Windows::Forms::WebBrowserNavigatingEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, WebBrowser_1Navigating_FUNC);
+}
+#endif
+
+#ifndef NO_WebBrowser_1ProgressChanged
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(WebBrowser_1ProgressChanged)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(WebBrowser_1ProgressChanged)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, WebBrowser_1ProgressChanged_FUNC);
+	((System::Windows::Forms::WebBrowser^)TO_OBJECT(arg0))->ProgressChanged += ((System::Windows::Forms::WebBrowserProgressChangedEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, WebBrowser_1ProgressChanged_FUNC);
+}
+#endif
+
+#ifndef NO_WebBrowser_1ReadyState
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(WebBrowser_1ReadyState)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(WebBrowser_1ReadyState)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, WebBrowser_1ReadyState_FUNC);
+	rc = (jint)((System::Windows::Forms::WebBrowser^)TO_OBJECT(arg0))->ReadyState;
+	OS_NATIVE_EXIT(env, that, WebBrowser_1ReadyState_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_WebBrowser_1Refresh
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(WebBrowser_1Refresh)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(WebBrowser_1Refresh)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, WebBrowser_1Refresh_FUNC);
+	((System::Windows::Forms::WebBrowser^)TO_OBJECT(arg0))->Refresh();
+	OS_NATIVE_EXIT(env, that, WebBrowser_1Refresh_FUNC);
+}
+#endif
+
+#ifndef NO_WebBrowser_1ScriptErrorsSuppressed
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(WebBrowser_1ScriptErrorsSuppressed)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(WebBrowser_1ScriptErrorsSuppressed)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, WebBrowser_1ScriptErrorsSuppressed_FUNC);
+	((System::Windows::Forms::WebBrowser^)TO_OBJECT(arg0))->ScriptErrorsSuppressed = (arg1);
+	OS_NATIVE_EXIT(env, that, WebBrowser_1ScriptErrorsSuppressed_FUNC);
+}
+#endif
+
+#ifndef NO_WebBrowser_1StatusText
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(WebBrowser_1StatusText)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(WebBrowser_1StatusText)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, WebBrowser_1StatusText_FUNC);
+	rc = (jint)TO_HANDLE(((System::Windows::Forms::WebBrowser^)TO_OBJECT(arg0))->StatusText);
+	OS_NATIVE_EXIT(env, that, WebBrowser_1StatusText_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_WebBrowser_1StatusTextChanged
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(WebBrowser_1StatusTextChanged)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(WebBrowser_1StatusTextChanged)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, WebBrowser_1StatusTextChanged_FUNC);
+	((System::Windows::Forms::WebBrowser^)TO_OBJECT(arg0))->StatusTextChanged += ((EventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, WebBrowser_1StatusTextChanged_FUNC);
+}
+#endif
+
+#ifndef NO_WebBrowser_1Stop
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(WebBrowser_1Stop)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(WebBrowser_1Stop)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, WebBrowser_1Stop_FUNC);
+	((System::Windows::Forms::WebBrowser^)TO_OBJECT(arg0))->Stop();
+	OS_NATIVE_EXIT(env, that, WebBrowser_1Stop_FUNC);
+}
+#endif
+
+#ifndef NO_WebBrowser_1Url
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(WebBrowser_1Url)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(WebBrowser_1Url)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, WebBrowser_1Url_FUNC);
+	rc = (jint)TO_HANDLE(((System::Windows::Forms::WebBrowser^)TO_OBJECT(arg0))->Url);
+	OS_NATIVE_EXIT(env, that, WebBrowser_1Url_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_WindowCollection_1Count
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(WindowCollection_1Count)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(WindowCollection_1Count)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, WindowCollection_1Count_FUNC);
+	rc = (jint)((WindowCollection^)TO_OBJECT(arg0))->Count;
+	OS_NATIVE_EXIT(env, that, WindowCollection_1Count_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_WindowCollection_1Current
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(WindowCollection_1Current)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(WindowCollection_1Current)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, WindowCollection_1Current_FUNC);
+	rc = (jint)TO_HANDLE(((IEnumerator^)TO_OBJECT(arg0))->Current);
+	OS_NATIVE_EXIT(env, that, WindowCollection_1Current_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_WindowCollection_1GetEnumerator
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(WindowCollection_1GetEnumerator)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(WindowCollection_1GetEnumerator)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, WindowCollection_1GetEnumerator_FUNC);
+	rc = (jint)TO_HANDLE(((IEnumerable^)TO_OBJECT(arg0))->GetEnumerator());
+	OS_NATIVE_EXIT(env, that, WindowCollection_1GetEnumerator_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Window_1Activate
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Window_1Activate)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(Window_1Activate)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, Window_1Activate_FUNC);
+	((Window^)TO_OBJECT(arg0))->Activate();
+	OS_NATIVE_EXIT(env, that, Window_1Activate_FUNC);
+}
+#endif
+
+#ifndef NO_Window_1Activated
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Window_1Activated)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Window_1Activated)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Window_1Activated_FUNC);
+	((Window^)TO_OBJECT(arg0))->Activated += ((EventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Window_1Activated_FUNC);
+}
+#endif
+
+#ifndef NO_Window_1AllowsTransparency
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Window_1AllowsTransparency)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Window_1AllowsTransparency)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, Window_1AllowsTransparency_FUNC);
+	((Window^)TO_OBJECT(arg0))->AllowsTransparency = (arg1);
+	OS_NATIVE_EXIT(env, that, Window_1AllowsTransparency_FUNC);
+}
+#endif
+
+#ifndef NO_Window_1Close
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Window_1Close)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(Window_1Close)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, Window_1Close_FUNC);
+	((Window^)TO_OBJECT(arg0))->Close();
+	OS_NATIVE_EXIT(env, that, Window_1Close_FUNC);
+}
+#endif
+
+#ifndef NO_Window_1Closing
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Window_1Closing)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Window_1Closing)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Window_1Closing_FUNC);
+	((Window^)TO_OBJECT(arg0))->Closing += ((CancelEventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Window_1Closing_FUNC);
+}
+#endif
+
+#ifndef NO_Window_1Deactivated
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Window_1Deactivated)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Window_1Deactivated)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Window_1Deactivated_FUNC);
+	((Window^)TO_OBJECT(arg0))->Deactivated += ((EventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Window_1Deactivated_FUNC);
+}
+#endif
+
+#ifndef NO_Window_1GetWindow
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Window_1GetWindow)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Window_1GetWindow)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Window_1GetWindow_FUNC);
+	rc = (jint)TO_HANDLE(Window::GetWindow((DependencyObject^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, Window_1GetWindow_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Window_1Hide
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Window_1Hide)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(Window_1Hide)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, Window_1Hide_FUNC);
+	((Window^)TO_OBJECT(arg0))->Hide();
+	OS_NATIVE_EXIT(env, that, Window_1Hide_FUNC);
+}
+#endif
+
+#ifndef NO_Window_1Icon
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Window_1Icon)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Window_1Icon)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Window_1Icon_FUNC);
+	((Window^)TO_OBJECT(arg0))->Icon = ((ImageSource^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Window_1Icon_FUNC);
+}
+#endif
+
+#ifndef NO_Window_1IsActive
+extern "C" JNIEXPORT jboolean JNICALL OS_NATIVE(Window_1IsActive)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jboolean JNICALL OS_NATIVE(Window_1IsActive)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	OS_NATIVE_ENTER(env, that, Window_1IsActive_FUNC);
+	rc = (jboolean)((Window^)TO_OBJECT(arg0))->IsActive;
+	OS_NATIVE_EXIT(env, that, Window_1IsActive_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Window_1Left__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Window_1Left__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Window_1Left__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Window_1Left__I_FUNC);
+	rc = (jdouble)((Window^)TO_OBJECT(arg0))->Left;
+	OS_NATIVE_EXIT(env, that, Window_1Left__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Window_1Left__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Window_1Left__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Window_1Left__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Window_1Left__ID_FUNC);
+	((Window^)TO_OBJECT(arg0))->Left = (arg1);
+	OS_NATIVE_EXIT(env, that, Window_1Left__ID_FUNC);
+}
+#endif
+
+#ifndef NO_Window_1LocationChanged
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Window_1LocationChanged)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Window_1LocationChanged)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Window_1LocationChanged_FUNC);
+	((Window^)TO_OBJECT(arg0))->LocationChanged += ((EventHandler^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Window_1LocationChanged_FUNC);
+}
+#endif
+
+#ifndef NO_Window_1Owner
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Window_1Owner)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Window_1Owner)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Window_1Owner_FUNC);
+	((Window^)TO_OBJECT(arg0))->Owner = ((Window^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Window_1Owner_FUNC);
+}
+#endif
+
+#ifndef NO_Window_1ResizeMode
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Window_1ResizeMode)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Window_1ResizeMode)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Window_1ResizeMode_FUNC);
+	((Window^)TO_OBJECT(arg0))->ResizeMode = ((ResizeMode)arg1);
+	OS_NATIVE_EXIT(env, that, Window_1ResizeMode_FUNC);
+}
+#endif
+
+#ifndef NO_Window_1Show
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Window_1Show)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(Window_1Show)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, Window_1Show_FUNC);
+	((Window^)TO_OBJECT(arg0))->Show();
+	OS_NATIVE_EXIT(env, that, Window_1Show_FUNC);
+}
+#endif
+
+#ifndef NO_Window_1ShowInTaskbar
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Window_1ShowInTaskbar)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Window_1ShowInTaskbar)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	OS_NATIVE_ENTER(env, that, Window_1ShowInTaskbar_FUNC);
+	((Window^)TO_OBJECT(arg0))->ShowInTaskbar = (arg1);
+	OS_NATIVE_EXIT(env, that, Window_1ShowInTaskbar_FUNC);
+}
+#endif
+
+#ifndef NO_Window_1Title__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Window_1Title__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Window_1Title__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Window_1Title__I_FUNC);
+	rc = (jint)TO_HANDLE(((Window^)TO_OBJECT(arg0))->Title);
+	OS_NATIVE_EXIT(env, that, Window_1Title__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Window_1Title__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Window_1Title__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Window_1Title__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Window_1Title__II_FUNC);
+	((Window^)TO_OBJECT(arg0))->Title = ((String^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, Window_1Title__II_FUNC);
+}
+#endif
+
+#ifndef NO_Window_1Top__I
+extern "C" JNIEXPORT jdouble JNICALL OS_NATIVE(Window_1Top__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jdouble JNICALL OS_NATIVE(Window_1Top__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jdouble rc = 0;
+	OS_NATIVE_ENTER(env, that, Window_1Top__I_FUNC);
+	rc = (jdouble)((Window ^)TO_OBJECT(arg0))->Top;
+	OS_NATIVE_EXIT(env, that, Window_1Top__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Window_1Top__ID
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Window_1Top__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Window_1Top__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	OS_NATIVE_ENTER(env, that, Window_1Top__ID_FUNC);
+	((Window ^)TO_OBJECT(arg0))->Top = (arg1);
+	OS_NATIVE_EXIT(env, that, Window_1Top__ID_FUNC);
+}
+#endif
+
+#ifndef NO_Window_1WindowState__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Window_1WindowState__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Window_1WindowState__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Window_1WindowState__I_FUNC);
+	rc = (jint)((Window^)TO_OBJECT(arg0))->WindowState;
+	OS_NATIVE_EXIT(env, that, Window_1WindowState__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Window_1WindowState__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Window_1WindowState__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Window_1WindowState__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Window_1WindowState__II_FUNC);
+	((Window^)TO_OBJECT(arg0))->WindowState = ((WindowState)arg1);
+	OS_NATIVE_EXIT(env, that, Window_1WindowState__II_FUNC);
+}
+#endif
+
+#ifndef NO_Window_1WindowStyle__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Window_1WindowStyle__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Window_1WindowStyle__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Window_1WindowStyle__I_FUNC);
+	rc = (jint)((Window^)TO_OBJECT(arg0))->WindowStyle;
+	OS_NATIVE_EXIT(env, that, Window_1WindowStyle__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Window_1WindowStyle__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Window_1WindowStyle__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Window_1WindowStyle__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Window_1WindowStyle__II_FUNC);
+	((Window^)TO_OBJECT(arg0))->WindowStyle = ((WindowStyle)arg1);
+	OS_NATIVE_EXIT(env, that, Window_1WindowStyle__II_FUNC);
+}
+#endif
+
+#ifndef NO_WindowsFormsHost_1Child
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(WindowsFormsHost_1Child)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(WindowsFormsHost_1Child)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, WindowsFormsHost_1Child_FUNC);
+	((System::Windows::Forms::Integration::WindowsFormsHost^)TO_OBJECT(arg0))->Child = ((System::Windows::Forms::Control^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, WindowsFormsHost_1Child_FUNC);
+}
+#endif
+
+#ifndef NO_WriteableBitmap_1WritePixels
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(WriteableBitmap_1WritePixels)(JNIEnv *env, jclass that, jint arg0, jint arg1, jbyteArray arg2, jint arg3, jint arg4);
+JNIEXPORT void JNICALL OS_NATIVE(WriteableBitmap_1WritePixels)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jbyteArray arg2, jint arg3, jint arg4)
+{
+	jbyte *lparg2=NULL;
+	OS_NATIVE_ENTER(env, that, WriteableBitmap_1WritePixels_FUNC);
+	if (arg2) if ((lparg2 = env->GetByteArrayElements(arg2, NULL)) == NULL) goto fail;
+	((WriteableBitmap^)TO_OBJECT(arg0))->WritePixels((Int32Rect)TO_OBJECT(arg1), (IntPtr)lparg2, arg3, arg4);
+fail:
+	if (arg2 && lparg2) env->ReleaseByteArrayElements(arg2, lparg2, 0);
+	OS_NATIVE_EXIT(env, that, WriteableBitmap_1WritePixels_FUNC);
+}
+#endif
+
+#ifndef NO_XamlReader_1Load
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(XamlReader_1Load)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(XamlReader_1Load)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, XamlReader_1Load_FUNC);
+	rc = (jint)TO_HANDLE(XamlReader::Load((XmlReader^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, XamlReader_1Load_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_XmlReader_1Create
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(XmlReader_1Create)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(XmlReader_1Create)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, XmlReader_1Create_FUNC);
+	rc = (jint)TO_HANDLE(XmlReader::Create((System::IO::TextReader^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, XmlReader_1Create_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1AccessText
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1AccessText)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1AccessText)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1AccessText_FUNC);
+	rc = (jint)TO_HANDLE(gcnew AccessText());
+	OS_NATIVE_EXIT(env, that, gcnew_1AccessText_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Application
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Application)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Application)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Application_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Application());
+	OS_NATIVE_EXIT(env, that, gcnew_1Application_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1ArcSegment
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ArcSegment)(JNIEnv *env, jclass that, jint arg0, jint arg1, jdouble arg2, jboolean arg3, jint arg4, jboolean arg5);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ArcSegment)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jdouble arg2, jboolean arg3, jint arg4, jboolean arg5)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1ArcSegment_FUNC);
+	rc = (jint)TO_HANDLE(gcnew ArcSegment((Point)TO_OBJECT(arg0), (Size)TO_OBJECT(arg1), arg2, arg3, (SweepDirection)arg4, arg5));
+	OS_NATIVE_EXIT(env, that, gcnew_1ArcSegment_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1ArrayList
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ArrayList)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ArrayList)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1ArrayList_FUNC);
+	rc = (jint)TO_HANDLE(gcnew ArrayList(arg0));
+	OS_NATIVE_EXIT(env, that, gcnew_1ArrayList_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1BevelBitmapEffect
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1BevelBitmapEffect)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1BevelBitmapEffect)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1BevelBitmapEffect_FUNC);
+	rc = (jint)TO_HANDLE(gcnew BevelBitmapEffect());
+	OS_NATIVE_EXIT(env, that, gcnew_1BevelBitmapEffect_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1BezierSegment
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1BezierSegment)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jboolean arg3);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1BezierSegment)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jboolean arg3)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1BezierSegment_FUNC);
+	rc = (jint)TO_HANDLE(gcnew BezierSegment((Point)TO_OBJECT(arg0), (Point)TO_OBJECT(arg1), (Point)TO_OBJECT(arg2), arg3));
+	OS_NATIVE_EXIT(env, that, gcnew_1BezierSegment_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Binding
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Binding)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Binding)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Binding_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Binding((String^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, gcnew_1Binding_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Bitmap
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Bitmap)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jbyteArray arg4);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Bitmap)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jbyteArray arg4)
+{
+	jbyte *lparg4=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Bitmap_FUNC);
+	if (arg4) if ((lparg4 = env->GetByteArrayElements(arg4, NULL)) == NULL) goto fail;
+	rc = (jint)TO_HANDLE(gcnew System::Drawing::Bitmap(arg0, arg1, arg2, (System::Drawing::Imaging::PixelFormat)arg3, (IntPtr)lparg4));
+fail:
+	if (arg4 && lparg4) env->ReleaseByteArrayElements(arg4, lparg4, 0);
+	OS_NATIVE_EXIT(env, that, gcnew_1Bitmap_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1BitmapEffectGroup
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1BitmapEffectGroup)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1BitmapEffectGroup)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1BitmapEffectGroup_FUNC);
+	rc = (jint)TO_HANDLE(gcnew BitmapEffectGroup());
+	OS_NATIVE_EXIT(env, that, gcnew_1BitmapEffectGroup_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1BitmapImage
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1BitmapImage)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1BitmapImage)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1BitmapImage_FUNC);
+	rc = (jint)TO_HANDLE(gcnew BitmapImage());
+	OS_NATIVE_EXIT(env, that, gcnew_1BitmapImage_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1BitmapPalette
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1BitmapPalette)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1BitmapPalette)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1BitmapPalette_FUNC);
+	rc = (jint)TO_HANDLE(gcnew BitmapPalette((System::Collections::Generic::IList<Color>^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, gcnew_1BitmapPalette_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1BlurBitmapEffect
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1BlurBitmapEffect)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1BlurBitmapEffect)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1BlurBitmapEffect_FUNC);
+	rc = (jint)TO_HANDLE(gcnew BlurBitmapEffect());
+	OS_NATIVE_EXIT(env, that, gcnew_1BlurBitmapEffect_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Button
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Button)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Button)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Button_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Button());
+	OS_NATIVE_EXIT(env, that, gcnew_1Button_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Canvas
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Canvas)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Canvas)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Canvas_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Canvas());
+	OS_NATIVE_EXIT(env, that, gcnew_1Canvas_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1CharacterHit
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1CharacterHit)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1CharacterHit)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1CharacterHit_FUNC);
+	rc = (jint)TO_HANDLE(gcnew CharacterHit(arg0, arg1));
+	OS_NATIVE_EXIT(env, that, gcnew_1CharacterHit_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1CheckBox
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1CheckBox)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1CheckBox)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1CheckBox_FUNC);
+	rc = (jint)TO_HANDLE(gcnew CheckBox());
+	OS_NATIVE_EXIT(env, that, gcnew_1CheckBox_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1ColorDialog
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ColorDialog)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ColorDialog)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1ColorDialog_FUNC);
+	rc = (jint)TO_HANDLE(gcnew System::Windows::Forms::ColorDialog());
+	OS_NATIVE_EXIT(env, that, gcnew_1ColorDialog_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1ColorList
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ColorList)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ColorList)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1ColorList_FUNC);
+	rc = (jint)TO_HANDLE(gcnew System::Collections::Generic::List<Color>(arg0));
+	OS_NATIVE_EXIT(env, that, gcnew_1ColorList_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1ColumnDefinition
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ColumnDefinition)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ColumnDefinition)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1ColumnDefinition_FUNC);
+	rc = (jint)TO_HANDLE(gcnew ColumnDefinition());
+	OS_NATIVE_EXIT(env, that, gcnew_1ColumnDefinition_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1CombinedGeometry
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1CombinedGeometry)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1CombinedGeometry)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1CombinedGeometry_FUNC);
+	rc = (jint)TO_HANDLE(gcnew CombinedGeometry((GeometryCombineMode)arg0, (Geometry^)TO_OBJECT(arg1), (Geometry^)TO_OBJECT(arg2)));
+	OS_NATIVE_EXIT(env, that, gcnew_1CombinedGeometry_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1ComboBox
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ComboBox)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ComboBox)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1ComboBox_FUNC);
+	rc = (jint)TO_HANDLE(gcnew ComboBox());
+	OS_NATIVE_EXIT(env, that, gcnew_1ComboBox_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1ComboBoxItem
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ComboBoxItem)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ComboBoxItem)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1ComboBoxItem_FUNC);
+	rc = (jint)TO_HANDLE(gcnew ComboBoxItem());
+	OS_NATIVE_EXIT(env, that, gcnew_1ComboBoxItem_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1CompositeCollection
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1CompositeCollection)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1CompositeCollection)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1CompositeCollection_FUNC);
+	rc = (jint)TO_HANDLE(gcnew CompositeCollection());
+	OS_NATIVE_EXIT(env, that, gcnew_1CompositeCollection_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1ContentControl
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ContentControl)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ContentControl)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1ContentControl_FUNC);
+	rc = (jint)TO_HANDLE(gcnew ContentControl());
+	OS_NATIVE_EXIT(env, that, gcnew_1ContentControl_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1ContextMenu
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ContextMenu)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ContextMenu)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1ContextMenu_FUNC);
+	rc = (jint)TO_HANDLE(gcnew ContextMenu());
+	OS_NATIVE_EXIT(env, that, gcnew_1ContextMenu_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1ControlTemplate
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ControlTemplate)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ControlTemplate)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1ControlTemplate_FUNC);
+	rc = (jint)TO_HANDLE(gcnew ControlTemplate());
+	OS_NATIVE_EXIT(env, that, gcnew_1ControlTemplate_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1CroppedBitmap
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1CroppedBitmap)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1CroppedBitmap)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1CroppedBitmap_FUNC);
+	rc = (jint)TO_HANDLE(gcnew CroppedBitmap((BitmapSource^)TO_OBJECT(arg0), (Int32Rect)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, gcnew_1CroppedBitmap_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1DashStyle
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DashStyle)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DashStyle)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1DashStyle_FUNC);
+	rc = (jint)TO_HANDLE(gcnew DashStyle((DoubleCollection^)TO_OBJECT(arg0), arg1));
+	OS_NATIVE_EXIT(env, that, gcnew_1DashStyle_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1DataObject
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DataObject)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DataObject)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1DataObject_FUNC);
+	rc = (jint)TO_HANDLE(gcnew DataObject());
+	OS_NATIVE_EXIT(env, that, gcnew_1DataObject_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1DataTemplate
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DataTemplate)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DataTemplate)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1DataTemplate_FUNC);
+	rc = (jint)TO_HANDLE(gcnew DataTemplate());
+	OS_NATIVE_EXIT(env, that, gcnew_1DataTemplate_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1DiscreteDoubleKeyFrame__
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DiscreteDoubleKeyFrame__)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DiscreteDoubleKeyFrame__)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1DiscreteDoubleKeyFrame___FUNC);
+	rc = (jint)TO_HANDLE(gcnew DiscreteDoubleKeyFrame());
+	OS_NATIVE_EXIT(env, that, gcnew_1DiscreteDoubleKeyFrame___FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1DiscreteDoubleKeyFrame__DI
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DiscreteDoubleKeyFrame__DI)(JNIEnv *env, jclass that, jdouble arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DiscreteDoubleKeyFrame__DI)
+	(JNIEnv *env, jclass that, jdouble arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1DiscreteDoubleKeyFrame__DI_FUNC);
+	rc = (jint)TO_HANDLE(gcnew DiscreteDoubleKeyFrame(arg0, (KeyTime)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, gcnew_1DiscreteDoubleKeyFrame__DI_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1DiscreteInt32KeyFrame
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DiscreteInt32KeyFrame)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DiscreteInt32KeyFrame)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1DiscreteInt32KeyFrame_FUNC);
+	rc = (jint)TO_HANDLE(gcnew DiscreteInt32KeyFrame());
+	OS_NATIVE_EXIT(env, that, gcnew_1DiscreteInt32KeyFrame_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1DispatcherFrame
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DispatcherFrame)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DispatcherFrame)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1DispatcherFrame_FUNC);
+	rc = (jint)TO_HANDLE(gcnew DispatcherFrame());
+	OS_NATIVE_EXIT(env, that, gcnew_1DispatcherFrame_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1DispatcherTimer
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DispatcherTimer)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DispatcherTimer)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1DispatcherTimer_FUNC);
+	rc = (jint)TO_HANDLE(gcnew DispatcherTimer());
+	OS_NATIVE_EXIT(env, that, gcnew_1DispatcherTimer_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1DoubleAnimation
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DoubleAnimation)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DoubleAnimation)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1DoubleAnimation_FUNC);
+	rc = (jint)TO_HANDLE(gcnew DoubleAnimation());
+	OS_NATIVE_EXIT(env, that, gcnew_1DoubleAnimation_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1DoubleAnimationUsingKeyFrames
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DoubleAnimationUsingKeyFrames)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DoubleAnimationUsingKeyFrames)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1DoubleAnimationUsingKeyFrames_FUNC);
+	rc = (jint)TO_HANDLE(gcnew DoubleAnimationUsingKeyFrames());
+	OS_NATIVE_EXIT(env, that, gcnew_1DoubleAnimationUsingKeyFrames_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1DoubleCollection
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DoubleCollection)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DoubleCollection)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1DoubleCollection_FUNC);
+	rc = (jint)TO_HANDLE(gcnew DoubleCollection(arg0));
+	OS_NATIVE_EXIT(env, that, gcnew_1DoubleCollection_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1DrawingVisual
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DrawingVisual)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DrawingVisual)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1DrawingVisual_FUNC);
+	rc = (jint)TO_HANDLE(gcnew DrawingVisual());
+	OS_NATIVE_EXIT(env, that, gcnew_1DrawingVisual_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1DropShadowBitmapEffect
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DropShadowBitmapEffect)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1DropShadowBitmapEffect)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1DropShadowBitmapEffect_FUNC);
+	rc = (jint)TO_HANDLE(gcnew DropShadowBitmapEffect());
+	OS_NATIVE_EXIT(env, that, gcnew_1DropShadowBitmapEffect_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Duration
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Duration)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Duration)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Duration_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Duration((TimeSpan)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, gcnew_1Duration_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1EllipseGeometry
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1EllipseGeometry)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1EllipseGeometry)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1EllipseGeometry_FUNC);
+	rc = (jint)TO_HANDLE(gcnew EllipseGeometry((Rect)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, gcnew_1EllipseGeometry_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Expander
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Expander)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Expander)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Expander_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Expander());
+	OS_NATIVE_EXIT(env, that, gcnew_1Expander_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1FileInfo
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1FileInfo)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1FileInfo)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1FileInfo_FUNC);
+	rc = (jint)TO_HANDLE(gcnew System::IO::FileInfo((String^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, gcnew_1FileInfo_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1FolderBrowserDialog
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1FolderBrowserDialog)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1FolderBrowserDialog)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1FolderBrowserDialog_FUNC);
+	rc = (jint)TO_HANDLE(gcnew System::Windows::Forms::FolderBrowserDialog());
+	OS_NATIVE_EXIT(env, that, gcnew_1FolderBrowserDialog_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Font
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Font)(JNIEnv *env, jclass that, jint arg0, jfloat arg1, jint arg2);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Font)
+	(JNIEnv *env, jclass that, jint arg0, jfloat arg1, jint arg2)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Font_FUNC);
+	rc = (jint)TO_HANDLE(gcnew System::Drawing::Font((String^)TO_OBJECT(arg0), arg1, (System::Drawing::FontStyle)arg2));
+	OS_NATIVE_EXIT(env, that, gcnew_1Font_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1FontDialog
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1FontDialog)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1FontDialog)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1FontDialog_FUNC);
+	rc = (jint)TO_HANDLE(gcnew System::Windows::Forms::FontDialog());
+	OS_NATIVE_EXIT(env, that, gcnew_1FontDialog_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1FontFamily
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1FontFamily)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1FontFamily)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1FontFamily_FUNC);
+	rc = (jint)TO_HANDLE(gcnew FontFamily((String^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, gcnew_1FontFamily_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1FormatConvertedBitmap
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1FormatConvertedBitmap)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jdouble arg3);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1FormatConvertedBitmap)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jdouble arg3)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1FormatConvertedBitmap_FUNC);
+	rc = (jint)TO_HANDLE(gcnew FormatConvertedBitmap((BitmapSource^)TO_OBJECT(arg0), (PixelFormat)TO_OBJECT(arg1), (BitmapPalette^)TO_OBJECT(arg2), arg3));
+	OS_NATIVE_EXIT(env, that, gcnew_1FormatConvertedBitmap_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1FormattedText
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1FormattedText)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jdouble arg4, jint arg5);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1FormattedText)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jdouble arg4, jint arg5)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1FormattedText_FUNC);
+	rc = (jint)TO_HANDLE(gcnew FormattedText((String^)TO_OBJECT(arg0), (CultureInfo^)TO_OBJECT(arg1), (FlowDirection)arg2, (Typeface^)TO_OBJECT(arg3), arg4, (Brush^)TO_OBJECT(arg5)));
+	OS_NATIVE_EXIT(env, that, gcnew_1FormattedText_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Frame
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Frame)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Frame)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Frame_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Frame());
+	OS_NATIVE_EXIT(env, that, gcnew_1Frame_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1FrameworkElementFactory__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1FrameworkElementFactory__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1FrameworkElementFactory__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1FrameworkElementFactory__I_FUNC);
+	rc = (jint)TO_HANDLE(gcnew FrameworkElementFactory((Type^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, gcnew_1FrameworkElementFactory__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1FrameworkElementFactory__II
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1FrameworkElementFactory__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1FrameworkElementFactory__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1FrameworkElementFactory__II_FUNC);
+	rc = (jint)TO_HANDLE(gcnew FrameworkElementFactory((Type^)TO_OBJECT(arg0), (String^)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, gcnew_1FrameworkElementFactory__II_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1GeometryGroup
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1GeometryGroup)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1GeometryGroup)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1GeometryGroup_FUNC);
+	rc = (jint)TO_HANDLE(gcnew GeometryGroup());
+	OS_NATIVE_EXIT(env, that, gcnew_1GeometryGroup_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Grid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Grid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Grid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Grid_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Grid());
+	OS_NATIVE_EXIT(env, that, gcnew_1Grid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1GridLength
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1GridLength)(JNIEnv *env, jclass that, jdouble arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1GridLength)
+	(JNIEnv *env, jclass that, jdouble arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1GridLength_FUNC);
+	rc = (jint)TO_HANDLE(gcnew GridLength(arg0, (GridUnitType)arg1));
+	OS_NATIVE_EXIT(env, that, gcnew_1GridLength_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1GridView
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1GridView)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1GridView)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1GridView_FUNC);
+	rc = (jint)TO_HANDLE(gcnew GridView());
+	OS_NATIVE_EXIT(env, that, gcnew_1GridView_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1GridViewColumn
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1GridViewColumn)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1GridViewColumn)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1GridViewColumn_FUNC);
+	rc = (jint)TO_HANDLE(gcnew GridViewColumn());
+	OS_NATIVE_EXIT(env, that, gcnew_1GridViewColumn_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1GridViewColumnCollection
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1GridViewColumnCollection)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1GridViewColumnCollection)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1GridViewColumnCollection_FUNC);
+	rc = (jint)TO_HANDLE(gcnew GridViewColumnCollection());
+	OS_NATIVE_EXIT(env, that, gcnew_1GridViewColumnCollection_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1GridViewColumnHeader
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1GridViewColumnHeader)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1GridViewColumnHeader)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1GridViewColumnHeader_FUNC);
+	rc = (jint)TO_HANDLE(gcnew GridViewColumnHeader());
+	OS_NATIVE_EXIT(env, that, gcnew_1GridViewColumnHeader_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1GroupBox
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1GroupBox)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1GroupBox)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1GroupBox_FUNC);
+	rc = (jint)TO_HANDLE(gcnew GroupBox());
+	OS_NATIVE_EXIT(env, that, gcnew_1GroupBox_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Hyperlink
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Hyperlink)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Hyperlink)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Hyperlink_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Hyperlink((Inline^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, gcnew_1Hyperlink_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Image
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Image)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Image)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Image_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Image());
+	OS_NATIVE_EXIT(env, that, gcnew_1Image_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1ImageBrush
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ImageBrush)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ImageBrush)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1ImageBrush_FUNC);
+	rc = (jint)TO_HANDLE(gcnew ImageBrush((ImageSource^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, gcnew_1ImageBrush_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Int32
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Int32)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Int32)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Int32_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Int32(arg0));
+	OS_NATIVE_EXIT(env, that, gcnew_1Int32_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Int32Animation
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Int32Animation)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Int32Animation)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Int32Animation_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Int32Animation());
+	OS_NATIVE_EXIT(env, that, gcnew_1Int32Animation_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Int32AnimationUsingKeyFrames
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Int32AnimationUsingKeyFrames)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Int32AnimationUsingKeyFrames)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Int32AnimationUsingKeyFrames_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Int32AnimationUsingKeyFrames());
+	OS_NATIVE_EXIT(env, that, gcnew_1Int32AnimationUsingKeyFrames_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Int32Rect
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Int32Rect)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Int32Rect)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Int32Rect_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Int32Rect(arg0, arg1, arg2, arg3));
+	OS_NATIVE_EXIT(env, that, gcnew_1Int32Rect_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1IntPtr
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1IntPtr)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1IntPtr)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1IntPtr_FUNC);
+	rc = (jint)TO_HANDLE(gcnew IntPtr(arg0));
+	OS_NATIVE_EXIT(env, that, gcnew_1IntPtr_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1KeySpline
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1KeySpline)(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1KeySpline)
+	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1KeySpline_FUNC);
+	rc = (jint)TO_HANDLE(gcnew KeySpline(arg0, arg1, arg2, arg3));
+	OS_NATIVE_EXIT(env, that, gcnew_1KeySpline_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Label
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Label)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Label)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Label_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Label());
+	OS_NATIVE_EXIT(env, that, gcnew_1Label_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1LineSegment
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1LineSegment)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1LineSegment)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1LineSegment_FUNC);
+	rc = (jint)TO_HANDLE(gcnew LineSegment((Point)TO_OBJECT(arg0), arg1));
+	OS_NATIVE_EXIT(env, that, gcnew_1LineSegment_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1LinearDoubleKeyFrame
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1LinearDoubleKeyFrame)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1LinearDoubleKeyFrame)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1LinearDoubleKeyFrame_FUNC);
+	rc = (jint)TO_HANDLE(gcnew LinearDoubleKeyFrame());
+	OS_NATIVE_EXIT(env, that, gcnew_1LinearDoubleKeyFrame_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1LinearGradientBrush__IID
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1LinearGradientBrush__IID)(JNIEnv *env, jclass that, jint arg0, jint arg1, jdouble arg2);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1LinearGradientBrush__IID)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jdouble arg2)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1LinearGradientBrush__IID_FUNC);
+	rc = (jint)TO_HANDLE(gcnew LinearGradientBrush((Color)TO_OBJECT(arg0), (Color)TO_OBJECT(arg1), arg2));
+	OS_NATIVE_EXIT(env, that, gcnew_1LinearGradientBrush__IID_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1LinearGradientBrush__IIII
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1LinearGradientBrush__IIII)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1LinearGradientBrush__IIII)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1LinearGradientBrush__IIII_FUNC);
+	rc = (jint)TO_HANDLE(gcnew LinearGradientBrush((Color)TO_OBJECT(arg0), (Color)TO_OBJECT(arg1), (Point)TO_OBJECT(arg2), (Point)TO_OBJECT(arg3)));
+	OS_NATIVE_EXIT(env, that, gcnew_1LinearGradientBrush__IIII_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1LinearInt32KeyFrame
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1LinearInt32KeyFrame)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1LinearInt32KeyFrame)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1LinearInt32KeyFrame_FUNC);
+	rc = (jint)TO_HANDLE(gcnew LinearInt32KeyFrame());
+	OS_NATIVE_EXIT(env, that, gcnew_1LinearInt32KeyFrame_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1ListBox
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ListBox)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ListBox)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1ListBox_FUNC);
+	rc = (jint)TO_HANDLE(gcnew ListBox());
+	OS_NATIVE_EXIT(env, that, gcnew_1ListBox_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1ListBoxItem
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ListBoxItem)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ListBoxItem)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1ListBoxItem_FUNC);
+	rc = (jint)TO_HANDLE(gcnew ListBoxItem());
+	OS_NATIVE_EXIT(env, that, gcnew_1ListBoxItem_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1ListView
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ListView)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ListView)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1ListView_FUNC);
+	rc = (jint)TO_HANDLE(gcnew ListView());
+	OS_NATIVE_EXIT(env, that, gcnew_1ListView_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1ListViewItem
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ListViewItem)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ListViewItem)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1ListViewItem_FUNC);
+	rc = (jint)TO_HANDLE(gcnew ListViewItem());
+	OS_NATIVE_EXIT(env, that, gcnew_1ListViewItem_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Matrix
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Matrix)(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3, jdouble arg4, jdouble arg5);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Matrix)
+	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3, jdouble arg4, jdouble arg5)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Matrix_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Matrix(arg0, arg1, arg2, arg3, arg4, arg5));
+	OS_NATIVE_EXIT(env, that, gcnew_1Matrix_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1MatrixTransform
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1MatrixTransform)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1MatrixTransform)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1MatrixTransform_FUNC);
+	rc = (jint)TO_HANDLE(gcnew MatrixTransform((Matrix)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, gcnew_1MatrixTransform_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1MemoryStream
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1MemoryStream)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1MemoryStream)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1MemoryStream_FUNC);
+	rc = (jint)TO_HANDLE(gcnew System::IO::MemoryStream());
+	OS_NATIVE_EXIT(env, that, gcnew_1MemoryStream_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Menu
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Menu)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Menu)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Menu_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Menu());
+	OS_NATIVE_EXIT(env, that, gcnew_1Menu_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1MenuItem
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1MenuItem)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1MenuItem)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1MenuItem_FUNC);
+	rc = (jint)TO_HANDLE(gcnew MenuItem());
+	OS_NATIVE_EXIT(env, that, gcnew_1MenuItem_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1NameScope
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1NameScope)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1NameScope)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1NameScope_FUNC);
+	rc = (jint)TO_HANDLE(gcnew NameScope());
+	OS_NATIVE_EXIT(env, that, gcnew_1NameScope_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1NotifyIcon
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1NotifyIcon)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1NotifyIcon)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1NotifyIcon_FUNC);
+	rc = (jint)TO_HANDLE(gcnew System::Windows::Forms::NotifyIcon());
+	OS_NATIVE_EXIT(env, that, gcnew_1NotifyIcon_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1OpenFileDialog
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1OpenFileDialog)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1OpenFileDialog)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1OpenFileDialog_FUNC);
+	rc = (jint)TO_HANDLE(gcnew OpenFileDialog());
+	OS_NATIVE_EXIT(env, that, gcnew_1OpenFileDialog_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1OuterGlowBitmapEffect
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1OuterGlowBitmapEffect)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1OuterGlowBitmapEffect)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1OuterGlowBitmapEffect_FUNC);
+	rc = (jint)TO_HANDLE(gcnew OuterGlowBitmapEffect());
+	OS_NATIVE_EXIT(env, that, gcnew_1OuterGlowBitmapEffect_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1PasswordBox
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1PasswordBox)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1PasswordBox)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1PasswordBox_FUNC);
+	rc = (jint)TO_HANDLE(gcnew PasswordBox());
+	OS_NATIVE_EXIT(env, that, gcnew_1PasswordBox_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Path
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Path)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Path)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Path_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Path());
+	OS_NATIVE_EXIT(env, that, gcnew_1Path_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1PathFigure
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1PathFigure)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1PathFigure)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1PathFigure_FUNC);
+	rc = (jint)TO_HANDLE(gcnew PathFigure());
+	OS_NATIVE_EXIT(env, that, gcnew_1PathFigure_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1PathGeometry
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1PathGeometry)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1PathGeometry)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1PathGeometry_FUNC);
+	rc = (jint)TO_HANDLE(gcnew PathGeometry());
+	OS_NATIVE_EXIT(env, that, gcnew_1PathGeometry_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Pen__
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Pen__)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Pen__)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Pen___FUNC);
+	rc = (jint)TO_HANDLE(gcnew Pen());
+	OS_NATIVE_EXIT(env, that, gcnew_1Pen___FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Pen__ID
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Pen__ID)(JNIEnv *env, jclass that, jint arg0, jdouble arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Pen__ID)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Pen__ID_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Pen((Brush^)TO_OBJECT(arg0), arg1));
+	OS_NATIVE_EXIT(env, that, gcnew_1Pen__ID_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Point
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Point)(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Point)
+	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Point_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Point(arg0, arg1));
+	OS_NATIVE_EXIT(env, that, gcnew_1Point_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1PointCollection
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1PointCollection)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1PointCollection)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1PointCollection_FUNC);
+	rc = (jint)TO_HANDLE(gcnew PointCollection(arg0));
+	OS_NATIVE_EXIT(env, that, gcnew_1PointCollection_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1PolyLineSegment
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1PolyLineSegment)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1PolyLineSegment)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1PolyLineSegment_FUNC);
+	rc = (jint)TO_HANDLE(gcnew PolyLineSegment((PointCollection^)TO_OBJECT(arg0), arg1));
+	OS_NATIVE_EXIT(env, that, gcnew_1PolyLineSegment_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Popup
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Popup)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Popup)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Popup_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Popup());
+	OS_NATIVE_EXIT(env, that, gcnew_1Popup_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1ProgressBar
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ProgressBar)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ProgressBar)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1ProgressBar_FUNC);
+	rc = (jint)TO_HANDLE(gcnew ProgressBar());
+	OS_NATIVE_EXIT(env, that, gcnew_1ProgressBar_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1PropertyPath
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1PropertyPath)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1PropertyPath)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1PropertyPath_FUNC);
+	rc = (jint)TO_HANDLE(gcnew PropertyPath((Object^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, gcnew_1PropertyPath_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1QuadraticBezierSegment
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1QuadraticBezierSegment)(JNIEnv *env, jclass that, jint arg0, jint arg1, jboolean arg2);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1QuadraticBezierSegment)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jboolean arg2)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1QuadraticBezierSegment_FUNC);
+	rc = (jint)TO_HANDLE(gcnew QuadraticBezierSegment((Point)TO_OBJECT(arg0), (Point)TO_OBJECT(arg1), arg2));
+	OS_NATIVE_EXIT(env, that, gcnew_1QuadraticBezierSegment_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1RadioButton
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1RadioButton)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1RadioButton)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1RadioButton_FUNC);
+	rc = (jint)TO_HANDLE(gcnew RadioButton());
+	OS_NATIVE_EXIT(env, that, gcnew_1RadioButton_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Rect
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Rect)(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Rect)
+	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Rect_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Rect(arg0, arg1, arg2, arg3));
+	OS_NATIVE_EXIT(env, that, gcnew_1Rect_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Rectangle
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Rectangle)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Rectangle)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Rectangle_FUNC);
+	rc = (jint)TO_HANDLE(gcnew System::Windows::Shapes::Rectangle());
+	OS_NATIVE_EXIT(env, that, gcnew_1Rectangle_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1RectangleGeometry
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1RectangleGeometry)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1RectangleGeometry)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1RectangleGeometry_FUNC);
+	rc = (jint)TO_HANDLE(gcnew RectangleGeometry((Rect)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, gcnew_1RectangleGeometry_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1RelativeSource
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1RelativeSource)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1RelativeSource)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1RelativeSource_FUNC);
+	rc = (jint)TO_HANDLE(gcnew RelativeSource((RelativeSourceMode)arg0));
+	OS_NATIVE_EXIT(env, that, gcnew_1RelativeSource_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1RenderTargetBitmap
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1RenderTargetBitmap)(JNIEnv *env, jclass that, jint arg0, jint arg1, jdouble arg2, jdouble arg3, jint arg4);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1RenderTargetBitmap)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jdouble arg2, jdouble arg3, jint arg4)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1RenderTargetBitmap_FUNC);
+	rc = (jint)TO_HANDLE(gcnew RenderTargetBitmap(arg0, arg1, arg2, arg3, (PixelFormat)TO_OBJECT(arg4)));
+	OS_NATIVE_EXIT(env, that, gcnew_1RenderTargetBitmap_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1RepeatBehavior
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1RepeatBehavior)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1RepeatBehavior)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1RepeatBehavior_FUNC);
+	rc = (jint)TO_HANDLE(gcnew RepeatBehavior(arg0));
+	OS_NATIVE_EXIT(env, that, gcnew_1RepeatBehavior_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1RepeatButton
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1RepeatButton)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1RepeatButton)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1RepeatButton_FUNC);
+	rc = (jint)TO_HANDLE(gcnew RepeatButton());
+	OS_NATIVE_EXIT(env, that, gcnew_1RepeatButton_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1ResourceDictionary
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ResourceDictionary)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ResourceDictionary)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1ResourceDictionary_FUNC);
+	rc = (jint)TO_HANDLE(gcnew ResourceDictionary());
+	OS_NATIVE_EXIT(env, that, gcnew_1ResourceDictionary_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1RowDefinition
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1RowDefinition)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1RowDefinition)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1RowDefinition_FUNC);
+	rc = (jint)TO_HANDLE(gcnew RowDefinition());
+	OS_NATIVE_EXIT(env, that, gcnew_1RowDefinition_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Run
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Run)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Run)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Run_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Run());
+	OS_NATIVE_EXIT(env, that, gcnew_1Run_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1SaveFileDialog
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SaveFileDialog)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SaveFileDialog)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1SaveFileDialog_FUNC);
+	rc = (jint)TO_HANDLE(gcnew SaveFileDialog());
+	OS_NATIVE_EXIT(env, that, gcnew_1SaveFileDialog_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1ScaleTransform
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ScaleTransform)(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ScaleTransform)
+	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1ScaleTransform_FUNC);
+	rc = (jint)TO_HANDLE(gcnew ScaleTransform(arg0, arg1));
+	OS_NATIVE_EXIT(env, that, gcnew_1ScaleTransform_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1ScrollBar
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ScrollBar)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ScrollBar)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1ScrollBar_FUNC);
+	rc = (jint)TO_HANDLE(gcnew ScrollBar());
+	OS_NATIVE_EXIT(env, that, gcnew_1ScrollBar_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1ScrollViewer
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ScrollViewer)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ScrollViewer)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1ScrollViewer_FUNC);
+	rc = (jint)TO_HANDLE(gcnew ScrollViewer());
+	OS_NATIVE_EXIT(env, that, gcnew_1ScrollViewer_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Separator
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Separator)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Separator)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Separator_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Separator());
+	OS_NATIVE_EXIT(env, that, gcnew_1Separator_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Setter
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Setter)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Setter)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Setter_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Setter((DependencyProperty^)TO_OBJECT(arg0), (Object^)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, gcnew_1Setter_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1SetterVisibility
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SetterVisibility)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SetterVisibility)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1SetterVisibility_FUNC);
+	rc = (jint)TO_HANDLE(gcnew System::Windows::Setter((DependencyProperty^)TO_OBJECT(arg0), (Visibility)arg1));
+	OS_NATIVE_EXIT(env, that, gcnew_1SetterVisibility_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Size__
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Size__)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Size__)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Size___FUNC);
+	rc = (jint)TO_HANDLE(gcnew Size());
+	OS_NATIVE_EXIT(env, that, gcnew_1Size___FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Size__DD
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Size__DD)(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Size__DD)
+	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Size__DD_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Size(arg0, arg1));
+	OS_NATIVE_EXIT(env, that, gcnew_1Size__DD_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Slider
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Slider)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Slider)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Slider_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Slider());
+	OS_NATIVE_EXIT(env, that, gcnew_1Slider_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1SolidColorBrush
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SolidColorBrush)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SolidColorBrush)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1SolidColorBrush_FUNC);
+	rc = (jint)TO_HANDLE(gcnew SolidColorBrush((Color)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, gcnew_1SolidColorBrush_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1SplineDoubleKeyFrame
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SplineDoubleKeyFrame)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SplineDoubleKeyFrame)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1SplineDoubleKeyFrame_FUNC);
+	rc = (jint)TO_HANDLE(gcnew SplineDoubleKeyFrame());
+	OS_NATIVE_EXIT(env, that, gcnew_1SplineDoubleKeyFrame_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1SplineInt32KeyFrame
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SplineInt32KeyFrame)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SplineInt32KeyFrame)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1SplineInt32KeyFrame_FUNC);
+	rc = (jint)TO_HANDLE(gcnew SplineInt32KeyFrame());
+	OS_NATIVE_EXIT(env, that, gcnew_1SplineInt32KeyFrame_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1StackPanel
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1StackPanel)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1StackPanel)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1StackPanel_FUNC);
+	rc = (jint)TO_HANDLE(gcnew StackPanel());
+	OS_NATIVE_EXIT(env, that, gcnew_1StackPanel_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Storyboard
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Storyboard)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Storyboard)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Storyboard_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Storyboard());
+	OS_NATIVE_EXIT(env, that, gcnew_1Storyboard_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1StreamGeometry
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1StreamGeometry)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1StreamGeometry)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1StreamGeometry_FUNC);
+	rc = (jint)TO_HANDLE(gcnew StreamGeometry());
+	OS_NATIVE_EXIT(env, that, gcnew_1StreamGeometry_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1String___3C
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1String___3C)(JNIEnv *env, jclass that, jcharArray arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1String___3C)
+	(JNIEnv *env, jclass that, jcharArray arg0)
+{
+	jchar *lparg0=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1String___3C_FUNC);
+	if (arg0) if ((lparg0 = env->GetCharArrayElements(arg0, NULL)) == NULL) goto fail;
+	rc = (jint)TO_HANDLE(gcnew String((const wchar_t *)lparg0));
+fail:
+	if (arg0 && lparg0) env->ReleaseCharArrayElements(arg0, lparg0, 0);
+	OS_NATIVE_EXIT(env, that, gcnew_1String___3C_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1String___3CII
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1String___3CII)(JNIEnv *env, jclass that, jcharArray arg0, jint arg1, jint arg2);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1String___3CII)
+	(JNIEnv *env, jclass that, jcharArray arg0, jint arg1, jint arg2)
+{
+	jchar *lparg0=NULL;
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1String___3CII_FUNC);
+	if (arg0) if ((lparg0 = env->GetCharArrayElements(arg0, NULL)) == NULL) goto fail;
+	rc = (jint)TO_HANDLE(gcnew String((const wchar_t *)lparg0, arg1, arg2));
+fail:
+	if (arg0 && lparg0) env->ReleaseCharArrayElements(arg0, lparg0, 0);
+	OS_NATIVE_EXIT(env, that, gcnew_1String___3CII_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1StringReader
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1StringReader)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1StringReader)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1StringReader_FUNC);
+	rc = (jint)TO_HANDLE(gcnew System::IO::StringReader((String^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, gcnew_1StringReader_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Style
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Style)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Style)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Style_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Style());
+	OS_NATIVE_EXIT(env, that, gcnew_1Style_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1TabControl
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TabControl)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TabControl)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1TabControl_FUNC);
+	rc = (jint)TO_HANDLE(gcnew TabControl());
+	OS_NATIVE_EXIT(env, that, gcnew_1TabControl_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1TabItem
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TabItem)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TabItem)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1TabItem_FUNC);
+	rc = (jint)TO_HANDLE(gcnew TabItem());
+	OS_NATIVE_EXIT(env, that, gcnew_1TabItem_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1TemplateBindingExtension
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TemplateBindingExtension)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TemplateBindingExtension)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1TemplateBindingExtension_FUNC);
+	rc = (jint)TO_HANDLE(gcnew TemplateBindingExtension((DependencyProperty^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, gcnew_1TemplateBindingExtension_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1TextBlock
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TextBlock)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TextBlock)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1TextBlock_FUNC);
+	rc = (jint)TO_HANDLE(gcnew TextBlock());
+	OS_NATIVE_EXIT(env, that, gcnew_1TextBlock_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1TextBox
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TextBox)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TextBox)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1TextBox_FUNC);
+	rc = (jint)TO_HANDLE(gcnew TextBox());
+	OS_NATIVE_EXIT(env, that, gcnew_1TextBox_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1TextCharacters
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TextCharacters)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TextCharacters)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1TextCharacters_FUNC);
+	rc = (jint)TO_HANDLE(gcnew TextCharacters((String^)TO_OBJECT(arg0), arg1, arg2, (TextRunProperties^)TO_OBJECT(arg3)));
+	OS_NATIVE_EXIT(env, that, gcnew_1TextCharacters_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1TextDecoration
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TextDecoration)(JNIEnv *env, jclass that, jint arg0, jint arg1, jdouble arg2, jint arg3, jint arg4);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TextDecoration)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jdouble arg2, jint arg3, jint arg4)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1TextDecoration_FUNC);
+	rc = (jint)TO_HANDLE(gcnew TextDecoration((TextDecorationLocation)arg0, (Pen^)TO_OBJECT(arg1), arg2, (TextDecorationUnit)arg3, (TextDecorationUnit)arg4));
+	OS_NATIVE_EXIT(env, that, gcnew_1TextDecoration_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1TextDecorationCollection
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TextDecorationCollection)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TextDecorationCollection)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1TextDecorationCollection_FUNC);
+	rc = (jint)TO_HANDLE(gcnew TextDecorationCollection(arg0));
+	OS_NATIVE_EXIT(env, that, gcnew_1TextDecorationCollection_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1TextEndOfLine
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TextEndOfLine)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TextEndOfLine)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1TextEndOfLine_FUNC);
+	rc = (jint)TO_HANDLE(gcnew TextEndOfLine(arg0, (TextRunProperties^)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, gcnew_1TextEndOfLine_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1TextEndOfParagraph
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TextEndOfParagraph)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TextEndOfParagraph)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1TextEndOfParagraph_FUNC);
+	rc = (jint)TO_HANDLE(gcnew TextEndOfParagraph(arg0, (TextRunProperties^)TO_OBJECT(arg1)));
+	OS_NATIVE_EXIT(env, that, gcnew_1TextEndOfParagraph_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1TextTabProperties
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TextTabProperties)(JNIEnv *env, jclass that, jint arg0, jdouble arg1, jint arg2, jint arg3);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TextTabProperties)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1, jint arg2, jint arg3)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1TextTabProperties_FUNC);
+	rc = (jint)TO_HANDLE(gcnew TextTabProperties((TextTabAlignment)arg0, arg1, arg2, arg3));
+	OS_NATIVE_EXIT(env, that, gcnew_1TextTabProperties_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1TextTabPropertiesCollection
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TextTabPropertiesCollection)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TextTabPropertiesCollection)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1TextTabPropertiesCollection_FUNC);
+	rc = (jint)TO_HANDLE(gcnew System::Collections::Generic::List<TextTabProperties^>(arg0));
+	OS_NATIVE_EXIT(env, that, gcnew_1TextTabPropertiesCollection_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Thickness
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Thickness)(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Thickness)
+	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Thickness_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Thickness(arg0, arg1, arg2, arg3));
+	OS_NATIVE_EXIT(env, that, gcnew_1Thickness_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1TiffBitmapEncoder
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TiffBitmapEncoder)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TiffBitmapEncoder)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1TiffBitmapEncoder_FUNC);
+	rc = (jint)TO_HANDLE(gcnew TiffBitmapEncoder());
+	OS_NATIVE_EXIT(env, that, gcnew_1TiffBitmapEncoder_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1TimeSpan
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TimeSpan)(JNIEnv *env, jclass that, jlong arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TimeSpan)
+	(JNIEnv *env, jclass that, jlong arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1TimeSpan_FUNC);
+	rc = (jint)TO_HANDLE(gcnew TimeSpan(arg0));
+	OS_NATIVE_EXIT(env, that, gcnew_1TimeSpan_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1ToggleButton
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ToggleButton)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ToggleButton)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1ToggleButton_FUNC);
+	rc = (jint)TO_HANDLE(gcnew ToggleButton());
+	OS_NATIVE_EXIT(env, that, gcnew_1ToggleButton_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1ToolBar
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ToolBar)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ToolBar)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1ToolBar_FUNC);
+	rc = (jint)TO_HANDLE(gcnew ToolBar());
+	OS_NATIVE_EXIT(env, that, gcnew_1ToolBar_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1ToolBarTray
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ToolBarTray)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1ToolBarTray)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1ToolBarTray_FUNC);
+	rc = (jint)TO_HANDLE(gcnew ToolBarTray());
+	OS_NATIVE_EXIT(env, that, gcnew_1ToolBarTray_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1TransformGroup
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TransformGroup)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TransformGroup)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1TransformGroup_FUNC);
+	rc = (jint)TO_HANDLE(gcnew TransformGroup());
+	OS_NATIVE_EXIT(env, that, gcnew_1TransformGroup_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1TranslateTransform
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TranslateTransform)(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TranslateTransform)
+	(JNIEnv *env, jclass that, jdouble arg0, jdouble arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1TranslateTransform_FUNC);
+	rc = (jint)TO_HANDLE(gcnew TranslateTransform(arg0, arg1));
+	OS_NATIVE_EXIT(env, that, gcnew_1TranslateTransform_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1TraversalRequest
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TraversalRequest)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TraversalRequest)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1TraversalRequest_FUNC);
+	rc = (jint)TO_HANDLE(gcnew TraversalRequest((FocusNavigationDirection)arg0));
+	OS_NATIVE_EXIT(env, that, gcnew_1TraversalRequest_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1TreeView
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TreeView)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TreeView)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1TreeView_FUNC);
+	rc = (jint)TO_HANDLE(gcnew TreeView());
+	OS_NATIVE_EXIT(env, that, gcnew_1TreeView_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1TreeViewItem
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TreeViewItem)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TreeViewItem)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1TreeViewItem_FUNC);
+	rc = (jint)TO_HANDLE(gcnew TreeViewItem());
+	OS_NATIVE_EXIT(env, that, gcnew_1TreeViewItem_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Typeface
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Typeface)(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Typeface)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Typeface_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Typeface((FontFamily^)TO_OBJECT(arg0), (FontStyle)TO_OBJECT(arg1), (FontWeight)TO_OBJECT(arg2), (FontStretch)TO_OBJECT(arg3)));
+	OS_NATIVE_EXIT(env, that, gcnew_1Typeface_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Uri
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Uri)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Uri)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Uri_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Uri((String^)TO_OBJECT(arg0), (UriKind)arg1));
+	OS_NATIVE_EXIT(env, that, gcnew_1Uri_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1UserControl
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1UserControl)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1UserControl)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1UserControl_FUNC);
+	rc = (jint)TO_HANDLE(gcnew UserControl());
+	OS_NATIVE_EXIT(env, that, gcnew_1UserControl_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1WebBrowser
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1WebBrowser)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1WebBrowser)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1WebBrowser_FUNC);
+	rc = (jint)TO_HANDLE(gcnew System::Windows::Forms::WebBrowser());
+	OS_NATIVE_EXIT(env, that, gcnew_1WebBrowser_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1Window
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Window)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1Window)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1Window_FUNC);
+	rc = (jint)TO_HANDLE(gcnew Window());
+	OS_NATIVE_EXIT(env, that, gcnew_1Window_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1WindowsFormsHost
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1WindowsFormsHost)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1WindowsFormsHost)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1WindowsFormsHost_FUNC);
+	rc = (jint)TO_HANDLE(gcnew System::Windows::Forms::Integration::WindowsFormsHost());
+	OS_NATIVE_EXIT(env, that, gcnew_1WindowsFormsHost_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1WriteableBitmap__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1WriteableBitmap__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1WriteableBitmap__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1WriteableBitmap__I_FUNC);
+	rc = (jint)TO_HANDLE(gcnew WriteableBitmap((BitmapSource^)TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, gcnew_1WriteableBitmap__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1WriteableBitmap__IIDDII
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1WriteableBitmap__IIDDII)(JNIEnv *env, jclass that, jint arg0, jint arg1, jdouble arg2, jdouble arg3, jint arg4, jint arg5);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1WriteableBitmap__IIDDII)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jdouble arg2, jdouble arg3, jint arg4, jint arg5)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1WriteableBitmap__IIDDII_FUNC);
+	rc = (jint)TO_HANDLE(gcnew WriteableBitmap(arg0, arg1, arg2, arg3, (PixelFormat)TO_OBJECT(arg4), (BitmapPalette^)TO_OBJECT(arg5)));
+	OS_NATIVE_EXIT(env, that, gcnew_1WriteableBitmap__IIDDII_FUNC);
+	return rc;
+}
+#endif
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os.h b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os.h
new file mode 100644
index 0000000..89ce110
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os.h
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#ifndef INC_wpf_H
+#define INC_wpf_H
+
+#using <mscorlib.dll>
+
+using namespace System;
+using namespace System::ComponentModel;
+using namespace System::Collections;
+using namespace System::Collections::ObjectModel;
+using namespace System::Globalization;
+using namespace System::Reflection;
+using namespace System::Windows;
+using namespace System::Windows::Data;
+using namespace System::Windows::Documents;
+using namespace System::Runtime::InteropServices;
+using namespace System::Windows::Input;
+using namespace System::Windows::Interop;
+using namespace System::Windows::Shapes;
+using namespace System::Windows::Media;
+using namespace System::Windows::Media::Animation;
+using namespace System::Windows::Media::Effects;
+using namespace System::Windows::Media::Imaging;
+using namespace System::Windows::Media::TextFormatting;
+using namespace System::Windows::Controls;
+using namespace System::Windows::Controls::Primitives;
+using namespace System::Windows::Threading;
+using namespace Microsoft::Win32;
+using namespace System::Windows::Markup;
+using namespace System::Xml;
+
+/* This is need to avoid clr compiler warnings */
+extern "C" {
+struct _jfieldID {
+};
+struct _jmethodID {
+};
+}
+
+#define GCHANDLE_TABLE
+
+#ifdef GCHANDLE_TABLE
+
+extern "C" {
+extern jint GCHandle_GetHandle(Object^obj);
+}
+#define TO_HANDLE(arg) GCHandle_GetHandle(arg)
+//#define TO_HANDLE(arg) (arg != nullptr ? (int)GCHandle::ToIntPtr(GCHandle::Alloc(arg)) : 0)
+#define TO_OBJECT(arg) (arg != 0 ? (GCHandle::FromIntPtr((IntPtr)arg)).Target : nullptr)
+#define FREE_HANDLE(arg) if (arg != 0) (GCHandle::FromIntPtr((IntPtr)arg)).Free()
+
+#else
+
+extern "C" {
+extern int SWTObjectTable_ToHandle(Object^obj);
+extern Object^ SWTObjectTable_ToObject(int handle);
+extern void SWTObjectTable_Free(int handle);
+}
+#define TO_HANDLE(arg) SWTObjectTable_ToHandle(arg)
+#define TO_OBJECT(arg) SWTObjectTable_ToObject(arg)
+#define FREE_HANDLE(arg) SWTObjectTable_Free(arg)
+
+#endif
+
+#ifndef NATIVE_STATS
+#define OS_NATIVE_ENTER(env, that, func) \
+	try {  
+#define OS_NATIVE_EXIT(env, that, func) \
+	} catch (Exception^ e) { \
+		jclass threadClass = env->FindClass("java/lang/Thread");  \
+		jmethodID dumpStackID = env->GetStaticMethodID(threadClass, "dumpStack", "()V");  \
+		System::Console::Error->WriteLine(e); \
+		System::Console::Error->WriteLine("Java: "); \
+		if (dumpStackID != NULL) env->CallStaticVoidMethod(threadClass, dumpStackID, 0);  \
+	}
+#endif
+
+#endif /* INC_wpf_H */
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os_custom.cpp b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os_custom.cpp
new file mode 100644
index 0000000..0c804de
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os_custom.cpp
@@ -0,0 +1,1569 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "os_structs.h"
+#include "os_stats.h"
+#include "string.h"
+
+#define OS_NATIVE(func) Java_org_eclipse_swt_internal_wpf_OS_##func
+
+static JavaVM *jvm = NULL;
+
+/*												*/
+/* SWT Handle Table     						*/
+/*												*/
+#ifndef GCHANDLE_TABLE
+#define GCHANDLE_STACKS
+public ref class SWTObjectTable {
+private:
+	static int nextHandle = 0;
+	static array<Object^>^table = nullptr;
+	static Object^ mutex = gcnew Object();
+
+#ifdef GCHANDLE_STACKS
+	static array<int>^exceptions = nullptr;
+#endif
+	
+public:
+static int ToHandle(Object^ obj) {
+	if (obj == nullptr) return 0;
+	System::Threading::Monitor::Enter(mutex);
+	if (table == nullptr || nextHandle == -1) {
+		int length = 0;
+		if (table != nullptr) length = table->GetLength(0);		
+		int newLength = length * 2;
+		if (newLength < 1024) newLength = 1024;
+//		System::Console::Error->WriteLine("\t\t***grow={1}", length, newLength);
+		Array::Resize(table, newLength);
+#ifdef GCHANDLE_STACKS
+		Array::Resize(exceptions, newLength);
+#endif
+		for (int i=length; i<newLength-1; i++) table[i] = i + 1;
+		table[newLength-1] = -1;
+		nextHandle = length;
+	}
+	int handle = nextHandle;
+	nextHandle = (int)(Int32)table[handle];
+	table[handle] = obj;
+#ifdef GCHANDLE_STACKS
+	if (jvm) {
+		JNIEnv* env;
+		if (IS_JNI_1_2) {
+			jvm->GetEnv((void **)&env, JNI_VERSION_1_2);
+		}
+		jclass exceptionClass = env->FindClass("java/lang/Exception");
+		exceptions[handle] = (int)env->NewGlobalRef(env->NewObject(exceptionClass, env->GetMethodID(exceptionClass, "<init>", "()V")));
+	}
+#endif
+	System::Threading::Monitor::Exit(mutex);
+	return handle + 1;	
+}
+
+static Object^ ToObject(int handle) {
+	System::Threading::Monitor::Enter(mutex);
+	Object^ result = nullptr;
+	if (handle > 0) result = table[handle - 1];
+	System::Threading::Monitor::Exit(mutex);
+	return result;
+}
+
+static void Free(int handle) {
+	System::Threading::Monitor::Enter(mutex);
+	if (handle > 0) {
+		table[handle - 1] = nextHandle;
+		nextHandle = handle - 1;
+#ifdef GCHANDLE_STACKS
+		if (exceptions[handle - 1] != 0) {
+			JNIEnv* env;
+			if (IS_JNI_1_2) {
+				jvm->GetEnv((void **)&env, JNI_VERSION_1_2);
+			}
+			env->DeleteGlobalRef((jobject)exceptions[handle - 1]);
+			exceptions[handle - 1] = 0;
+		}
+#endif
+	}
+	System::Threading::Monitor::Exit(mutex);
+}
+
+static void Dump() {
+	System::Threading::Monitor::Enter(mutex);
+	for (int i=0; i<table->GetLength(0); i++) {
+		if (table[i]->GetType() != Int32::typeid) {
+			System::Console::Error->WriteLine("LEAK -> {0}={1} type={2}", i + 1, table[i], table[i]->GetType());
+#ifdef GCHANDLE_STACKS
+			if (exceptions[i] != 0) {
+				JNIEnv* env;
+				jvm->GetEnv((void **)&env, JNI_VERSION_1_2);
+				jclass exceptionClass = env->FindClass("java/lang/Throwable");
+				jmethodID mid = env->GetMethodID(exceptionClass, "printStackTrace", "()V");
+				if (mid != NULL) env->CallVoidMethod((jobject)exceptions[i], mid, 0);
+			}
+#endif
+		}
+	}
+	System::Threading::Monitor::Exit(mutex);
+}
+
+};
+#endif // GCHANDLE_TABLE
+
+extern "C" {
+
+#ifdef GCHANDLE_TABLE
+
+jint GCHandle_GetHandle(Object^ obj) {
+	return obj == nullptr ? 0 : (int)GCHandle::ToIntPtr(GCHandle::Alloc(obj));
+}
+
+#else
+
+int SWTObjectTable_ToHandle(Object^ obj) {
+	return SWTObjectTable::ToHandle(obj);
+}
+
+Object^ SWTObjectTable_ToObject(int handle) {
+	return SWTObjectTable::ToObject(handle);
+}
+
+void SWTObjectTable_Free(int handle) {
+	return SWTObjectTable::Free(handle);
+}
+
+#endif // GCHANDLE_TABLE
+
+} // extern "C" ends
+
+/*												*/
+/* JNI Ref Cookie       						*/
+/*												*/
+public ref class JniRefCookie {
+public:
+	jobject object;
+	
+	JniRefCookie (JNIEnv* env, jint jniRef) {
+		if (jvm == NULL) env->GetJavaVM(&jvm);
+		this->object = env->NewGlobalRef((jobject)jniRef);
+	}
+
+	~JniRefCookie() {
+		this->!JniRefCookie();
+	}
+
+	!JniRefCookie() {
+		if (object == NULL) return; 	
+		JNIEnv* env;
+		bool detach = false;
+
+#ifdef JNI_VERSION_1_2
+		if (IS_JNI_1_2) {
+			jvm->GetEnv((void **)&env, JNI_VERSION_1_2);
+		}
+#endif
+		if (env == NULL) {
+			jvm->AttachCurrentThread((void **)&env, NULL);
+			if (IS_JNI_1_2) detach = true;
+		}
+		if (env != NULL) {
+			env->DeleteGlobalRef(object);
+			if (detach) jvm->DetachCurrentThread();
+		}
+	}
+};
+
+
+/*												*/
+/* Animation									*/
+/*												*/
+
+public ref class SWTAnimator : FrameworkElement {
+public:
+	static DependencyProperty^ DoubleValueProperty = DependencyProperty::Register("DoubleValue", double::typeid, SWTAnimator::typeid, gcnew PropertyMetadata(gcnew PropertyChangedCallback(OnPropertyChanged)));
+	static DependencyProperty^ IntValueProperty = DependencyProperty::Register("IntValue", Int32::typeid, SWTAnimator::typeid, gcnew PropertyMetadata(gcnew PropertyChangedCallback(OnPropertyChanged)));
+private:
+	jmethodID OnPropertyChangedMID;
+	JniRefCookie^ cookie;
+public:		
+	SWTAnimator(JNIEnv* env, jint jniRef) {
+		cookie = gcnew JniRefCookie(env, jniRef);
+		jobject object = cookie->object;
+		if (object) {
+			jclass javaClass = env->GetObjectClass(object);
+			OnPropertyChangedMID = env->GetMethodID(javaClass, "OnPropertyChanged", "(II)V");
+		}
+	}
+	
+	static void OnPropertyChanged(DependencyObject^ obj, DependencyPropertyChangedEventArgs args) {
+		SWTAnimator^ animator = (SWTAnimator^) obj;
+		animator->callin(obj, args);
+	}
+	
+private:
+	void callin (DependencyObject^ obj, DependencyPropertyChangedEventArgs args) {
+		jobject object = cookie->object;
+		if (object == NULL || OnPropertyChangedMID == NULL) return;
+		JNIEnv* env;
+		int result = 0;
+		bool detach = false;
+
+#ifdef JNI_VERSION_1_2
+		if (IS_JNI_1_2) {
+			jvm->GetEnv((void **)&env, JNI_VERSION_1_2);
+		}
+#endif
+		if (env == NULL) {
+			jvm->AttachCurrentThread((void **)&env, NULL);
+			if (IS_JNI_1_2) detach = true;
+		}
+		
+		if (env != NULL) {
+			if (!env->ExceptionOccurred()) {
+				int arg0 = TO_HANDLE(obj);
+				int arg1 = TO_HANDLE(args);
+				env->CallVoidMethod(object, OnPropertyChangedMID, arg0, arg1);
+				FREE_HANDLE(arg0);
+				FREE_HANDLE(arg1);
+			}
+			if (detach) jvm->DetachCurrentThread();
+		}
+	}
+};
+
+public ref class SWTAnimation : DoubleAnimation {
+private:
+	JniRefCookie^ cookie;
+	jmethodID GetCurrentValueCoreMID;
+public: 
+	SWTAnimation (JNIEnv* env, jint jniRef) {
+		cookie = gcnew JniRefCookie(env, jniRef);
+		jobject object = cookie->object;
+		if (object) {
+			jclass javaClass = env->GetObjectClass(object);
+			GetCurrentValueCoreMID = env->GetMethodID(javaClass, "GetCurrentValueCore", "(D)V");
+		}
+	}
+private:
+	SWTAnimation (JniRefCookie^ cookie, jmethodID methodID) {
+		this->cookie = cookie;
+		this->GetCurrentValueCoreMID = methodID;
+	}
+protected:
+	virtual Freezable^ CreateInstanceCore () override {
+		return gcnew SWTAnimation(cookie, GetCurrentValueCoreMID);
+	}
+	virtual double GetCurrentValueCore(double fromVal, double toVal, AnimationClock^ clock) override {
+		Nullable<TimeSpan> currentTime = clock->CurrentTime;
+		if (currentTime.HasValue) {
+			double ms = currentTime.Value.TotalMilliseconds;
+			callin(ms);
+		}
+		return DoubleAnimation::GetCurrentValueCore(fromVal, toVal, clock);
+	}
+private:
+	void callin (double args) {
+		jobject object = cookie->object;
+		if (object == NULL || GetCurrentValueCoreMID == NULL) return;
+		JNIEnv* env;
+		int result = 0;
+		bool detach = false;
+
+#ifdef JNI_VERSION_1_2
+		if (IS_JNI_1_2) {
+			jvm->GetEnv((void **)&env, JNI_VERSION_1_2);
+		}
+#endif
+		if (env == NULL) {
+			jvm->AttachCurrentThread((void **)&env, NULL);
+			if (IS_JNI_1_2) detach = true;
+		}
+		
+		if (env != NULL) {
+			if (!env->ExceptionOccurred()) {
+				env->CallVoidMethod(object, GetCurrentValueCoreMID, args);
+			}
+			if (detach) jvm->DetachCurrentThread();
+		}
+	}	
+};
+
+/*												*/
+/* Table and Tree Classes						*/
+/*												*/
+
+public ref class SWTDockPanel : DockPanel {
+public: 
+	static DependencyProperty^ JNIRefProperty = DependencyProperty::Register("JNIRef", Int32::typeid, SWTDockPanel::typeid);
+private:
+	jmethodID OnRenderMID;
+	JniRefCookie^ cookie;
+
+	void callin (jmethodID mid, DrawingContext^ context) {
+		JNIEnv* env;
+		bool detach = false;
+
+#ifdef JNI_VERSION_1_2
+		if (IS_JNI_1_2) {
+			jvm->GetEnv((void **)&env, JNI_VERSION_1_2);
+		}
+#endif
+		if (env == NULL) {
+			jvm->AttachCurrentThread((void **)&env, NULL);
+			if (IS_JNI_1_2) detach = true;
+		}
+		if (env != NULL) {
+			if (cookie == nullptr) {
+				cookie = gcnew JniRefCookie(env, (jint)(Int32)GetValue(SWTDockPanel::JNIRefProperty));
+			}
+			jobject object = cookie->object;
+			if (object == NULL) { 
+			 	return;
+			}
+			if (mid == NULL){
+				jclass javaClass = env->GetObjectClass(object);
+				OnRenderMID = env->GetMethodID(javaClass, "OnRender", "(II)V");
+				mid = OnRenderMID;
+			}
+			if (!env->ExceptionOccurred()) {
+				int arg0 = TO_HANDLE(this); 
+				int arg1 = TO_HANDLE(context);
+				env->CallVoidMethod(object, mid, arg0, arg1);
+				FREE_HANDLE(arg0);
+				FREE_HANDLE(arg1);
+			}
+			if (detach) jvm->DetachCurrentThread();
+		}
+	}
+protected:
+	virtual void OnRender(DrawingContext^ drawingContext) override {
+		this->DockPanel::OnRender(drawingContext);
+		callin(OnRenderMID, drawingContext);
+	}
+};
+
+public ref class SWTTreeView : TreeView {
+private:
+	JniRefCookie^ cookie;
+	jmethodID HandlerMID;
+	
+	void callin (jmethodID mid, RoutedPropertyChangedEventArgs<Object^>^ args) {
+		jobject object = cookie->object;
+		if (object == NULL || mid == NULL) return;
+		JNIEnv* env;
+		int result = 0;
+		bool detach = false;
+
+#ifdef JNI_VERSION_1_2
+		if (IS_JNI_1_2) {
+			jvm->GetEnv((void **)&env, JNI_VERSION_1_2);
+		}
+#endif
+		if (env == NULL) {
+			jvm->AttachCurrentThread((void **)&env, NULL);
+			if (IS_JNI_1_2) detach = true;
+		}
+		if (env != NULL) {
+			if (!env->ExceptionOccurred()) {
+				int arg0 = TO_HANDLE(args);
+				env->CallVoidMethod(object, mid, arg0);
+				FREE_HANDLE(arg0);
+			}
+			if (detach) jvm->DetachCurrentThread();
+		}
+	}	
+protected:
+	virtual void OnSelectedItemChanged (RoutedPropertyChangedEventArgs<Object^>^ args) override {
+		callin(HandlerMID, args);
+		TreeView::OnSelectedItemChanged(args);
+	}
+public:
+	SWTTreeView (JNIEnv* env, jint jniRef) {
+		cookie = gcnew JniRefCookie(env, jniRef);
+		jobject object = cookie->object;
+		if (object) {
+			jclass javaClass = env->GetObjectClass(object);
+			HandlerMID = env->GetMethodID(javaClass, "OnSelectedItemChanged", "(I)V");
+		}
+	}	
+};
+
+public ref class SWTTreeViewRowPresenter : GridViewRowPresenter {
+private: 
+	TreeView^ tree;
+	static void Handle_Loaded (Object^ sender, RoutedEventArgs^ args) {
+		SWTTreeViewRowPresenter^ presenter = (SWTTreeViewRowPresenter^) sender;
+		presenter->InvalidateMeasure ();
+	}
+public:
+	SWTTreeViewRowPresenter (Object^ treeview) {
+		this->tree = (TreeView^)treeview;
+		Loaded += gcnew RoutedEventHandler (&SWTTreeViewRowPresenter::Handle_Loaded);
+	}	
+protected:
+	virtual Size MeasureOverride (Size constraint) override {
+		Point point = TranslatePoint(*gcnew Point (0,0), tree);
+		Size size = GridViewRowPresenter::MeasureOverride (constraint);
+		size.Width -= Math::Min (point.X, size.Width);
+		return size;
+	}
+	virtual Size ArrangeOverride (Size arrangeSize) override {
+		double availableWidth = arrangeSize.Width;
+		int i = VisualChildrenCount - 1;
+		for (; i>=0; i--) {
+			UIElement^ child = (UIElement^) GetVisualChild (i);
+			GridViewColumn^ column = Columns [i];
+			double x = 0;
+			double width = 0;
+			if (i == 0) {
+				width = availableWidth;
+			} else {				
+				width = column->ActualWidth;
+				//if (Double::IsNaN(width)) width = 0;
+				x = availableWidth - width;
+			}
+			width = Math::Max (0.0, width);
+			Point^ loc = gcnew Point (x, 0);
+			Size^ size = gcnew Size (width, arrangeSize.Height);
+			Rect^ rect = gcnew Rect (*loc, *size);
+			child->Arrange (*rect);
+			availableWidth -= width;
+		}
+		return arrangeSize;
+	}
+};
+
+
+/*												*/
+/* Canvas										*/
+/*												*/
+
+public ref class SWTCanvas : Canvas {
+private:
+	DrawingVisual^ _visual;
+	jmethodID OnRenderMID;
+	JniRefCookie^ cookie;
+
+	void callin (jmethodID mid, DrawingContext^ context) {
+		jobject object = cookie->object;
+		if (object == NULL || mid == NULL) return;
+		JNIEnv* env;
+		bool detach = false;
+
+#ifdef JNI_VERSION_1_2
+		if (IS_JNI_1_2) {
+			jvm->GetEnv((void **)&env, JNI_VERSION_1_2);
+		}
+#endif
+		if (env == NULL) {
+			jvm->AttachCurrentThread((void **)&env, NULL);
+			if (IS_JNI_1_2) detach = true;
+		}
+		if (env != NULL) {
+			if (!env->ExceptionOccurred()) {
+				int arg0 = TO_HANDLE(context);
+				env->CallVoidMethod(object, mid, arg0);
+				FREE_HANDLE(arg0);
+			}
+			if (detach) jvm->DetachCurrentThread();
+		}
+	}
+	void updateVisual(DrawingVisual^ visual) {
+		if (_visual != nullptr) {
+			RemoveVisualChild(_visual);
+		}
+		_visual = visual;
+		if (_visual != nullptr) {
+			AddVisualChild(_visual);
+		}
+	}
+	
+protected:
+	virtual void OnRender(DrawingContext^ drawingContext) override {
+		this->Canvas::OnRender(drawingContext);
+		callin(OnRenderMID, drawingContext);
+	}
+	
+	property int VisualChildrenCount {
+		virtual int get () override {
+			int count = this->Canvas::VisualChildrenCount;
+			if (_visual != nullptr) count++;
+			return count;
+		}
+	}
+	
+	virtual Visual^ GetVisualChild(int index) override {
+		if (_visual != nullptr) {
+			//int count = this->Canvas::VisualChildrenCount;
+			//if (index == count) return _visual;
+			if (index == 0) return _visual;
+			return this->Canvas::GetVisualChild(index - 1);
+		}
+		return this->Canvas::GetVisualChild(index);
+	}
+
+public:
+	SWTCanvas (JNIEnv* env, jint jniRef) {
+		cookie = gcnew JniRefCookie(env, jniRef);
+		jobject object = cookie->object;
+		if (object) {
+			jclass javaClass = env->GetObjectClass(object);
+			OnRenderMID = env->GetMethodID(javaClass, "OnRender", "(I)V");
+		}
+		_visual = nullptr;
+	}
+	property DrawingVisual^ Visual {
+		DrawingVisual^ get() {
+			return _visual;
+		}
+		void set(DrawingVisual^ visual) {
+			updateVisual(visual);
+		}
+	}
+};
+
+/*												*/
+/* Cursor Support Class							*/
+/*												*/
+
+public ref class SWTSafeHandle : SafeHandle {
+private:
+	bool _isIcon;
+public:
+	SWTSafeHandle (IntPtr handle, bool isIcon) : SafeHandle ((IntPtr)-1, true) {
+		this->handle = handle;
+		_isIcon = isIcon;
+	}
+	[DllImport("user32.dll", SetLastError = true)]
+	static bool DestroyIcon(int hIcon);
+
+	[DllImport("user32.dll", SetLastError = true)]
+	static bool DestroyCursor(int hCursor);
+	
+	virtual bool ReleaseHandle () override {
+		bool result;
+		if (_isIcon) {
+			result = DestroyIcon((int)handle);
+		} else {
+			result = DestroyCursor((int)handle);
+		}
+		handle = (IntPtr)(-1);
+		return result;
+	}
+	property bool IsInvalid {
+		virtual bool get() override { return (int)handle == -1; }
+	}
+};
+
+/*												*/
+/* Text Layout Classes							*/
+/*												*/
+
+public ref class SWTTextEmbeddedObject : TextEmbeddedObject {
+private:
+	int _length;
+	double _width, _height, _baseline;
+	TextRunProperties^ _properties;
+
+public:
+	SWTTextEmbeddedObject (TextRunProperties^ properties, int length, double width, double height, double baseline) {
+		_properties = properties;
+		_length = length;
+		_width = width;
+		_height = height;
+		_baseline = baseline;
+	}
+
+	virtual void Draw(DrawingContext^ drawingContext, Point origin, bool rightToLeft, bool sideways) override {
+	}
+	virtual System::Windows::Rect ComputeBoundingBox(bool rightToLeft, bool sideways) override {
+		return System::Windows::Rect(0, 0, _width, _height);
+	}
+	virtual TextEmbeddedObjectMetrics^ Format(double remainingParagraphWidth) override {
+		return gcnew TextEmbeddedObjectMetrics(_width, _height, _baseline);
+	}
+	property LineBreakCondition BreakAfter {
+		virtual LineBreakCondition get() override { return LineBreakCondition::BreakAlways; }
+	}
+	property LineBreakCondition BreakBefore {
+		virtual LineBreakCondition get() override { return LineBreakCondition::BreakAlways; }
+	}
+	property bool HasFixedSize {
+		virtual bool get() override { return true; }
+	}
+	property System::Windows::Media::TextFormatting::CharacterBufferReference CharacterBufferReference {
+		virtual System::Windows::Media::TextFormatting::CharacterBufferReference get() override { throw gcnew Exception("The method or operation is not implemented."); }
+	}
+	property int Length {
+		virtual int get() override { return _length; }
+	}
+	property TextRunProperties^ Properties {
+		virtual TextRunProperties^ get() override { return _properties; }
+	}
+};
+
+public ref class SWTTextParagraphProperties : TextParagraphProperties {
+private:
+	System::Windows::FlowDirection _flowDirection;
+	System::Windows::TextAlignment _textAlignment;
+	bool _firstLineInParagraph;
+	TextRunProperties^ _defaultTextRunProperties;
+	System::Windows::TextWrapping _textWrap;
+	double _indent;
+	double _paragraphIndent;
+	double _lineHeight;
+	System::Collections::Generic::IList<TextTabProperties^>^ _tabs;
+
+public:
+	SWTTextParagraphProperties (
+		System::Windows::FlowDirection flowDirection,
+		System::Windows::TextAlignment textAlignment,
+		bool firstLineInParagraph,
+		TextRunProperties^ defaultTextRunProperties,
+		System::Windows::TextWrapping textWrap,
+		double lineHeight,
+		double indent,
+		System::Collections::Generic::IList<TextTabProperties^>^ tabs)
+	{
+		_flowDirection = flowDirection;
+		_textAlignment = textAlignment;
+		_firstLineInParagraph = firstLineInParagraph;
+		_defaultTextRunProperties = defaultTextRunProperties;
+		_textWrap = textWrap;
+		_lineHeight = lineHeight;
+		_indent = indent;
+		_tabs = tabs;
+	}
+	property System::Windows::FlowDirection FlowDirection {
+		virtual System::Windows::FlowDirection get() override { return _flowDirection; }
+	}
+	property System::Windows::TextAlignment TextAlignment {
+		virtual System::Windows::TextAlignment get() override { return _textAlignment; }
+	}
+	property bool FirstLineInParagraph {
+		virtual bool get() override { return _firstLineInParagraph; }
+	}
+	property TextRunProperties^ DefaultTextRunProperties {
+		virtual TextRunProperties^ get() override { return _defaultTextRunProperties; }
+	}
+	property System::Windows::TextWrapping TextWrapping {
+		virtual System::Windows::TextWrapping get() override { return _textWrap; }
+	}
+	property double LineHeight {
+		virtual double get() override { return _lineHeight; }
+	}
+	property double Indent {
+		virtual double get() override { return _indent; }
+	}
+	property System::Windows::Media::TextFormatting::TextMarkerProperties^ TextMarkerProperties {
+		virtual System::Windows::Media::TextFormatting::TextMarkerProperties^ get() override { return nullptr; }
+	}
+	property double ParagraphIndent {
+		virtual double get() override { return _paragraphIndent; }
+	}
+	property System::Collections::Generic::IList<TextTabProperties^>^ Tabs {
+		virtual System::Collections::Generic::IList<TextTabProperties^>^ get() override { return _tabs; }
+	}
+};
+
+public ref class SWTTextRunProperties : TextRunProperties {
+private:
+	System::Windows::Media::Typeface^ _typeface;
+	double _emSize;
+	double _emHintingSize;
+	System::Windows::TextDecorationCollection^ _textDecorations;
+	System::Windows::Media::Brush^ _foregroundBrush;
+	System::Windows::Media::Brush^ _backgroundBrush;
+	System::Windows::BaselineAlignment _baselineAlignment;
+	System::Globalization::CultureInfo^ _culture;
+
+public:
+	SWTTextRunProperties (
+		System::Windows::Media::Typeface^ typeface,
+		double size,
+		double hintingSize,
+		System::Windows::TextDecorationCollection^ textDecorations,
+		System::Windows::Media::Brush^  forgroundBrush,
+		System::Windows::Media::Brush^ backgroundBrush,
+		System::Windows::BaselineAlignment baselineAlignment,
+		System::Globalization::CultureInfo^ culture)
+	{
+		_typeface = typeface;
+		_emSize = size;
+		_emHintingSize = hintingSize;
+		_textDecorations = textDecorations;
+		_foregroundBrush = forgroundBrush;
+		_backgroundBrush = backgroundBrush;
+		_baselineAlignment = baselineAlignment;
+		_culture = culture;
+	}
+	property System::Windows::Media::Typeface^ Typeface {
+		virtual System::Windows::Media::Typeface^ get() override { return _typeface; }
+	}
+	property double FontRenderingEmSize {
+		virtual double get() override { return _emSize; }
+	}
+	property double FontHintingEmSize {
+		virtual double get() override { return _emHintingSize; }
+	}
+	property System::Windows::TextDecorationCollection^ TextDecorations {
+		virtual System::Windows::TextDecorationCollection^ get() override { return _textDecorations; }
+	}
+	property System::Windows::Media::Brush^ ForegroundBrush {
+		virtual System::Windows::Media::Brush^ get() override { return _foregroundBrush; }
+		void set(System::Windows::Media::Brush^ brush) { _foregroundBrush = brush; }
+	}
+	property System::Windows::Media::Brush^ BackgroundBrush {
+		virtual System::Windows::Media::Brush^ get() override { return _backgroundBrush; }
+	}
+	property System::Windows::BaselineAlignment BaselineAlignment {
+		virtual System::Windows::BaselineAlignment get() override { return _baselineAlignment; }
+	}
+	property System::Globalization::CultureInfo^ CultureInfo {
+		virtual System::Globalization::CultureInfo^ get() override { return _culture; }
+	}
+	property System::Windows::Media::TextFormatting::TextRunTypographyProperties^ TypographyProperties {
+		virtual System::Windows::Media::TextFormatting::TextRunTypographyProperties^ get() override { return nullptr; }
+	}
+	property System::Windows::Media::TextEffectCollection^ TextEffects {
+		virtual System::Windows::Media::TextEffectCollection^ get() override { return nullptr; }
+	}
+	property System::Windows::Media::NumberSubstitution^ NumberSubstitution {
+		virtual System::Windows::Media::NumberSubstitution^ get() override { return nullptr; }
+	}
+};
+
+public ref class SWTTextSource : TextSource {
+private:
+	jmethodID GetTextRunMID, GetPrecedingTextMID;
+	JniRefCookie^ cookie;
+		
+public:
+	SWTTextSource (JNIEnv* env, jint jniRef) {	
+		cookie = gcnew JniRefCookie(env, jniRef);
+		jobject object = cookie->object;
+		if (object) {
+			jclass javaClass = env->GetObjectClass(object);
+			GetTextRunMID = env->GetMethodID(javaClass, "GetTextRun", "(I)I");
+			GetPrecedingTextMID = env->GetMethodID(javaClass, "GetPrecedingText", "(I)I");
+		}
+	}
+	Object^ callin (jmethodID mid, int arg0) {
+		jobject object = cookie->object;
+		if (object == NULL || mid == NULL) return nullptr;
+		JNIEnv* env;
+		bool detach = false;
+		int result = 0;
+
+#ifdef JNI_VERSION_1_2
+		if (IS_JNI_1_2) {
+			jvm->GetEnv((void **)&env, JNI_VERSION_1_2);
+		}
+#endif
+		if (env == NULL) {
+			jvm->AttachCurrentThread((void **)&env, NULL);
+			if (IS_JNI_1_2) detach = true;
+		}
+		if (env != NULL) {
+			if (!env->ExceptionOccurred()) {
+				result = env->CallIntMethod(object, mid, arg0);
+			}
+			if (detach) jvm->DetachCurrentThread();
+		}
+		return TO_OBJECT (result);
+	}
+	
+	virtual TextRun^ GetTextRun(int textSourceCharacterIndex) override {
+		return (TextRun^) callin(GetTextRunMID, textSourceCharacterIndex);
+	}
+	virtual TextSpan<CultureSpecificCharacterBufferRange^>^ GetPrecedingText(int textSourceCharacterIndexLimit) override {
+		return (TextSpan<CultureSpecificCharacterBufferRange^>^) callin(GetPrecedingTextMID, textSourceCharacterIndexLimit);
+	}
+	virtual int GetTextEffectCharacterIndexFromTextSourceCharacterIndex(int textSourceCharacterIndex) override {
+		return 0;
+	}
+};
+
+/*												*/
+/* Event Handler Class							*/
+/*												*/
+
+delegate void NoArgsDelegate ();
+
+ref class SWTHandler {
+private:
+	jmethodID mid;
+	JniRefCookie^ cookie;
+	
+public:
+	SWTHandler() {
+	}
+	
+	SWTHandler(JNIEnv* env, jint jniRef, jstring method, char* signature) {
+		const char * methodString;	
+		cookie = gcnew JniRefCookie(env, jniRef);
+		jobject object = cookie->object;
+		if (method) methodString = (const char *) env->GetStringUTFChars(method, NULL);
+		if (object && methodString) {
+			jclass javaClass = env->GetObjectClass(object);    
+			mid = env->GetMethodID(javaClass, methodString, signature);
+		}
+		if (method && methodString) env->ReleaseStringUTFChars(method, methodString);
+	}
+	
+	void EventHandler (Object^ sender, EventArgs^ e) {
+		jobject object = cookie->object;	
+		if (object == NULL || mid == NULL) return; 	
+		JNIEnv* env;
+		bool detach = false;
+
+#ifdef JNI_VERSION_1_2
+		if (IS_JNI_1_2) {
+			jvm->GetEnv((void **)&env, JNI_VERSION_1_2);
+		}
+#endif
+		if (env == NULL) {
+			jvm->AttachCurrentThread((void **)&env, NULL);
+			if (IS_JNI_1_2) detach = true;
+		}
+		if (env != NULL) {
+			if (!env->ExceptionOccurred()) {
+				//TODO alloc sender causes handle table corruption
+				int arg0 = TO_HANDLE(sender);
+				int arg1 = TO_HANDLE(e);
+				env->CallVoidMethod(object, mid, arg0, arg1);
+				//env->CallVoidMethod(object, mid, 0, arg1);
+				FREE_HANDLE(arg0);
+				FREE_HANDLE(arg1);
+			}
+			if (detach) jvm->DetachCurrentThread();
+		}
+	}
+	
+	void TimerHandler (Object^ sender, EventArgs^ e) {
+		jobject object = cookie->object;
+		if (object == NULL || mid == NULL) return; 	
+		JNIEnv* env;
+		bool detach = false;
+
+#ifdef JNI_VERSION_1_2
+		if (IS_JNI_1_2) {
+			jvm->GetEnv((void **)&env, JNI_VERSION_1_2);
+		}
+#endif
+		if (env == NULL) {
+			jvm->AttachCurrentThread((void **)&env, NULL);
+			if (IS_JNI_1_2) detach = true;
+		}
+		if (env != NULL) {
+			if (!env->ExceptionOccurred()) {
+				if (sender->GetType() == DispatcherTimer::typeid) {
+					DispatcherTimer^ timer = (DispatcherTimer^)sender;
+					int index = (int)timer->Tag;
+					int arg1 = TO_HANDLE(e);
+					env->CallVoidMethod(object, mid, index, arg1);
+					FREE_HANDLE(arg1);
+				}
+			}
+			if (detach) jvm->DetachCurrentThread();
+		}
+	}
+	
+	void CancelEventHandler (Object^ sender, CancelEventArgs^ e) {
+		EventHandler (sender, e);	
+	}
+
+	void RoutedEventHandler (Object^ sender, RoutedEventArgs^ e) {
+		EventHandler (sender, e);	
+	}
+	
+	void RoutedPropertyChangedEventHandler  (Object^ sender, RoutedPropertyChangedEventArgs<double>^ e) {
+		EventHandler (sender, e);
+	}
+
+	void RoutedPropertyChangedEventHandlerObject  (Object^ sender, RoutedPropertyChangedEventArgs<Object^>^ e) {
+		EventHandler (sender, e);
+	}
+
+	void ExecutedRoutedEventHandler (Object^ sender, ExecutedRoutedEventArgs^ e) {
+		EventHandler (sender, e);	
+	}
+		
+	void DispatcherHookEventHandler (Object^ sender, DispatcherHookEventArgs^ e) {
+		EventHandler (sender, e);	
+	}
+
+	void SizeChangedEventHandler (Object^ sender, SizeChangedEventArgs^ e) {
+		EventHandler (sender, e);	
+	}
+	
+	void ScrollEventHandler (Object^ sender, ScrollEventArgs^ e) {
+		EventHandler (sender, e);	
+	}
+	
+	void SelectionChangedEventHandler (Object^ sender, SelectionChangedEventArgs^ e) {
+		EventHandler (sender, e);	
+	}
+
+	void KeyEventHandler (Object^ sender, KeyEventArgs^ e) {
+		EventHandler (sender, e);	
+	}
+	
+	void MouseEventHandler (Object^ sender, MouseEventArgs^ e) {
+		EventHandler (sender, e);	
+	}
+
+	void FormsMouseEventHandler (Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
+		EventHandler (sender, e);	
+	}
+		
+	void MouseButtonEventHandler (Object^ sender, MouseButtonEventArgs^ e) {
+		EventHandler (sender, e);	
+	}
+	
+	void MouseWheelEventHandler (Object^ sender, MouseWheelEventArgs^ e) {
+		EventHandler (sender, e);	
+	}
+	
+	void TextCompositionEventHandler (Object^ sender, TextCompositionEventArgs^ e) {
+		EventHandler (sender, e);	
+	}
+	
+	void TextChangedEventHandler (Object^ sender, TextChangedEventArgs^ e) {
+		EventHandler (sender, e);	
+	}
+	
+	void KeyboardFocusChangedEventHandler (Object^ sender, KeyboardFocusChangedEventArgs^ e) {
+		EventHandler (sender, e);	
+	}
+	
+	void ContextMenuEventHandler (Object^ sender, ContextMenuEventArgs^ e) {
+		EventHandler (sender, e);	
+	}
+
+	void DragEventHandler (Object^ sender, DragEventArgs^ e) {
+		EventHandler (sender, e);	
+	}
+	
+	void DragDeltaEventHandler (Object^ sender, DragDeltaEventArgs^ e) {
+		EventHandler (sender, e);	
+	}
+		
+	void GiveFeedbackEventHandler (Object^ sender, GiveFeedbackEventArgs^ e) {
+		EventHandler (sender, e);	
+	}
+
+	void QueryContinueDragEventHandler (Object^ sender, QueryContinueDragEventArgs^ e) {
+		EventHandler (sender, e);	
+	}
+		
+	void WebBrowserNavigatingEventHandler (Object^ sender, System::Windows::Forms::WebBrowserNavigatingEventArgs^ e) {
+		EventHandler (sender, e);	
+	}
+
+	void WebBrowserNavigatedEventHandler (Object^ sender, System::Windows::Forms::WebBrowserNavigatedEventArgs^ e) {
+		EventHandler (sender, e);	
+	}
+	
+	void WebBrowserProgressChangedEventHandler (Object^ sender, System::Windows::Forms::WebBrowserProgressChangedEventArgs^ e) {
+		EventHandler (sender, e);	
+	}	
+	
+	void WebBrowserDocumentCompletedEventHandler (Object^ sender, System::Windows::Forms::WebBrowserDocumentCompletedEventArgs^ e) {
+		EventHandler (sender, e);	
+	}
+
+	void NoArgsDelegate() {	
+		jobject object = cookie->object;
+		if (object == NULL || mid == NULL) return; 	
+		JNIEnv* env;
+		bool detach = false;
+
+#ifdef JNI_VERSION_1_2
+		if (IS_JNI_1_2) {
+			jvm->GetEnv((void **)&env, JNI_VERSION_1_2);
+		}
+#endif
+		if (env == NULL) {
+			jvm->AttachCurrentThread((void **)&env, NULL);
+			if (IS_JNI_1_2) detach = true;
+		}
+		if (env != NULL) {
+			if (!env->ExceptionOccurred()) {
+				env->CallVoidMethod(object, mid);
+			}
+			if (detach) jvm->DetachCurrentThread();
+		}	
+	}
+};
+
+#define HANDLER_CONSTRUCTOR(name, type, signature) extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1##name##) (JNIEnv *env, jclass that, jint arg0, jstring arg1); \
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1##name##) (JNIEnv *env, jclass that, jint arg0, jstring arg1) { \
+	jint rc = 0; \
+	OS_NATIVE_ENTER(env, that, gcnew_1##name##_FUNC); \
+	rc = (jint)TO_HANDLE(gcnew type (gcnew SWTHandler(env, arg0, arg1, signature), &SWTHandler::##name##)); \
+	OS_NATIVE_EXIT(env, that, gcnew_1##name##_FUNC); \
+	return rc; \
+} \
+
+#ifndef NO_gcnew_1EventHandler
+HANDLER_CONSTRUCTOR (EventHandler, EventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1CancelEventHandler
+HANDLER_CONSTRUCTOR (CancelEventHandler, CancelEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1ExecutedRoutedEventHandler
+HANDLER_CONSTRUCTOR (ExecutedRoutedEventHandler, ExecutedRoutedEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1DispatcherHookEventHandler
+HANDLER_CONSTRUCTOR (DispatcherHookEventHandler, DispatcherHookEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1SizeChangedEventHandler
+HANDLER_CONSTRUCTOR (SizeChangedEventHandler, SizeChangedEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1ScrollEventHandler
+HANDLER_CONSTRUCTOR (ScrollEventHandler, ScrollEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1SelectionChangedEventHandler
+HANDLER_CONSTRUCTOR (SelectionChangedEventHandler, SelectionChangedEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1KeyEventHandler
+HANDLER_CONSTRUCTOR (KeyEventHandler, KeyEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1MouseEventHandler
+HANDLER_CONSTRUCTOR (MouseEventHandler, MouseEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1FormsMouseEventHandler
+HANDLER_CONSTRUCTOR (FormsMouseEventHandler, System::Windows::Forms::MouseEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1MouseButtonEventHandler
+HANDLER_CONSTRUCTOR (MouseButtonEventHandler, MouseButtonEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1MouseWheelEventHandler
+HANDLER_CONSTRUCTOR (MouseWheelEventHandler, MouseWheelEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1TextCompositionEventHandler
+HANDLER_CONSTRUCTOR (TextCompositionEventHandler, TextCompositionEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1TextChangedEventHandler
+HANDLER_CONSTRUCTOR (TextChangedEventHandler, TextChangedEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1KeyboardFocusChangedEventHandler
+HANDLER_CONSTRUCTOR (KeyboardFocusChangedEventHandler, KeyboardFocusChangedEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1ContextMenuEventHandler
+HANDLER_CONSTRUCTOR (ContextMenuEventHandler, ContextMenuEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1RoutedEventHandler
+HANDLER_CONSTRUCTOR (RoutedEventHandler, RoutedEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1DragEventHandler
+HANDLER_CONSTRUCTOR (DragEventHandler, DragEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1DragDeltaEventHandler
+HANDLER_CONSTRUCTOR (DragDeltaEventHandler, DragDeltaEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1GiveFeedbackEventHandler
+HANDLER_CONSTRUCTOR (GiveFeedbackEventHandler, GiveFeedbackEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1QueryContinueDragEventHandler
+HANDLER_CONSTRUCTOR (QueryContinueDragEventHandler, QueryContinueDragEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1RoutedPropertyChangedEventHandlerObject
+HANDLER_CONSTRUCTOR (RoutedPropertyChangedEventHandlerObject, RoutedPropertyChangedEventHandler<Object^>, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1RoutedPropertyChangedEventHandler
+HANDLER_CONSTRUCTOR (RoutedPropertyChangedEventHandler, RoutedPropertyChangedEventHandler<double>, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1WebBrowserNavigatingEventHandler
+HANDLER_CONSTRUCTOR (WebBrowserNavigatingEventHandler, System::Windows::Forms::WebBrowserNavigatingEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1WebBrowserNavigatedEventHandler
+HANDLER_CONSTRUCTOR (WebBrowserNavigatedEventHandler, System::Windows::Forms::WebBrowserNavigatedEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1WebBrowserProgressChangedEventHandler
+HANDLER_CONSTRUCTOR (WebBrowserProgressChangedEventHandler, System::Windows::Forms::WebBrowserProgressChangedEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1WebBrowserDocumentCompletedEventHandler
+HANDLER_CONSTRUCTOR (WebBrowserDocumentCompletedEventHandler, System::Windows::Forms::WebBrowserDocumentCompletedEventHandler, "(II)V")
+#endif
+
+#ifndef NO_gcnew_1NoArgsDelegate
+HANDLER_CONSTRUCTOR (NoArgsDelegate, NoArgsDelegate, "()V")
+#endif
+
+// special cases
+#ifndef NO_gcnew_1TimerHandler
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TimerHandler) (JNIEnv *env, jclass that, jint arg0, jstring arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1TimerHandler) (JNIEnv *env, jclass that, jint arg0, jstring arg1) {
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1TimerHandler_FUNC);
+	rc = (jint)TO_HANDLE(gcnew EventHandler (gcnew SWTHandler(env, arg0, arg1, "(II)V"), &SWTHandler::TimerHandler));
+	OS_NATIVE_EXIT(env, that, gcnew_1TimerHandler_FUNC);
+	return rc;
+}
+#endif
+
+/*												*/
+/* Custom Classes Constructors and Functions	*/
+/*												*/
+
+#ifndef NO_gcnew_1SWTCanvas
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTCanvas)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTCanvas)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1SWTCanvas_FUNC);
+	rc = (jint)TO_HANDLE(gcnew SWTCanvas(env, arg0));
+	OS_NATIVE_EXIT(env, that, gcnew_1SWTCanvas_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SWTDockPanel_1JNIRefProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SWTDockPanel_1JNIRefProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SWTDockPanel_1JNIRefProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SWTDockPanel_1JNIRefProperty_FUNC);
+	rc = (jint)TO_HANDLE(SWTDockPanel::JNIRefProperty);
+	OS_NATIVE_EXIT(env, that, SWTDockPanel_1JNIRefProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SWTDockPanel_1typeid
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SWTDockPanel_1typeid)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SWTDockPanel_1typeid)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SWTDockPanel_1typeid_FUNC);
+	rc = (jint)TO_HANDLE(SWTDockPanel::typeid);
+	OS_NATIVE_EXIT(env, that, SWTDockPanel_1typeid_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1SWTSafeHandle
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTSafeHandle)(JNIEnv *env, jclass that, jint arg0, jboolean arg1);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTSafeHandle)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1SWTSafeHandle_FUNC);
+	rc = (jint)TO_HANDLE(gcnew SWTSafeHandle((IntPtr)arg0, (bool)arg1));
+	OS_NATIVE_EXIT(env, that, gcnew_1SWTSafeHandle_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1SWTTextSource
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTTextSource)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTTextSource)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1SWTTextSource_FUNC);
+	rc = (jint)TO_HANDLE(gcnew SWTTextSource(env, arg0));
+	OS_NATIVE_EXIT(env, that, gcnew_1SWTTextSource_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1SWTTextParagraphProperties
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTTextParagraphProperties)(JNIEnv *env, jclass that, jint arg0, jint arg1, jboolean arg2, jint arg3, jint arg4, jdouble arg5, jdouble arg6, int arg7);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTTextParagraphProperties)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jboolean arg2, jint arg3, jint arg4, jdouble arg5, jdouble arg6, int arg7)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1SWTTextParagraphProperties_FUNC);
+	rc = (jint)TO_HANDLE(gcnew SWTTextParagraphProperties((FlowDirection)arg0, (TextAlignment)arg1, arg2, (TextRunProperties^)TO_OBJECT(arg3), (TextWrapping)arg4, arg5, arg6, (System::Collections::Generic::IList<TextTabProperties^>^)TO_OBJECT(arg7)));
+	OS_NATIVE_EXIT(env, that, gcnew_1SWTTextParagraphProperties_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1SWTTextEmbeddedObject
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTTextEmbeddedObject)(JNIEnv *env, jclass that, jint arg0, jint arg1, jdouble arg2, jdouble arg3, jdouble arg4);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTTextEmbeddedObject)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jdouble arg2, jdouble arg3, jdouble arg4)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1SWTTextEmbeddedObject_FUNC);
+	rc = (jint)TO_HANDLE(gcnew SWTTextEmbeddedObject((TextRunProperties^)TO_OBJECT(arg0), arg1, arg2, arg3, arg4));
+	OS_NATIVE_EXIT(env, that, gcnew_1SWTTextEmbeddedObject_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1SWTTextRunProperties
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTTextRunProperties)(JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jint arg3, jint arg4, jint arg5, jint arg6, jint arg7);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTTextRunProperties)
+	(JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jint arg3, jint arg4, jint arg5, jint arg6, jint arg7)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1SWTTextRunProperties_FUNC);
+	rc = (jint)TO_HANDLE(gcnew SWTTextRunProperties((Typeface^)TO_OBJECT(arg0), arg1, arg2, (TextDecorationCollection^)TO_OBJECT(arg3), (Brush^)TO_OBJECT(arg4), (Brush^)TO_OBJECT(arg5), (BaselineAlignment)arg6, (CultureInfo^)TO_OBJECT(arg7)));
+	OS_NATIVE_EXIT(env, that, gcnew_1SWTTextRunProperties_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1SWTTreeView
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTTreeView)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTTreeView) 
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1SWTTreeView_FUNC);
+	rc = (jint)TO_HANDLE(gcnew SWTTreeView(env, arg0));
+	OS_NATIVE_EXIT(env, that, gcnew_1SWTTreeView_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1SWTTreeViewRowPresenter
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTTreeViewRowPresenter)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTTreeViewRowPresenter) 
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1SWTTreeViewRowPresenter_FUNC);
+	rc = (jint)TO_HANDLE(gcnew SWTTreeViewRowPresenter(TO_OBJECT(arg0)));
+	OS_NATIVE_EXIT(env, that, gcnew_1SWTTreeViewRowPresenter_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_gcnew_1SWTAnimator
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTAnimator)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTAnimator)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1SWTAnimator_FUNC);
+	rc = (jint)TO_HANDLE(gcnew SWTAnimator(env, arg0));
+	OS_NATIVE_EXIT(env, that, gcnew_1SWTAnimator_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SWTTextRunProperties_1ForegroundBrush
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(SWTTextRunProperties_1ForegroundBrush)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(SWTTextRunProperties_1ForegroundBrush)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, SWTTextRunProperties_1ForegroundBrush_FUNC);
+	((SWTTextRunProperties^)TO_OBJECT(arg0))->ForegroundBrush = ((Brush^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, SWTTextRunProperties_1ForegroundBrush_FUNC);
+}
+#endif
+
+#ifndef NO_SWTCanvas_1Visual__I
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SWTCanvas_1Visual__I)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(SWTCanvas_1Visual__I)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SWTCanvas_1Visual__I_FUNC);
+	rc = (jint)TO_HANDLE(((SWTCanvas^)TO_OBJECT(arg0))->Visual);
+	OS_NATIVE_EXIT(env, that, SWTCanvas_1Visual__I_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SWTCanvas_1Visual__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(SWTCanvas_1Visual__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(SWTCanvas_1Visual__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, SWTCanvas_1Visual__II_FUNC);
+	((SWTCanvas^)TO_OBJECT(arg0))->Visual = ((DrawingVisual^)TO_OBJECT(arg1));
+	OS_NATIVE_EXIT(env, that, SWTCanvas_1Visual__II_FUNC);
+}
+#endif
+
+#ifndef NO_JNIGetObject
+extern "C" JNIEXPORT jobject JNICALL OS_NATIVE(JNIGetObject)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jobject JNICALL OS_NATIVE(JNIGetObject)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jobject rc = 0;
+	OS_NATIVE_ENTER(env, that, JNIGetObject_FUNC);
+	rc = (jobject)arg0;
+	OS_NATIVE_EXIT(env, that, JNIGetObject_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GCHandle_1Free
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(GCHandle_1Free) (JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(GCHandle_1Free) (JNIEnv *env, jclass that, jint arg0) {
+	OS_NATIVE_ENTER(env, that, GCHandle_1Free_FUNC);
+	FREE_HANDLE(arg0);
+	OS_NATIVE_EXIT(env, that, GCHandle_1Free_FUNC);
+}
+#endif
+
+#ifndef NO_GCHandle_1Dump
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(GCHandle_1Dump) (JNIEnv *env, jclass that);
+JNIEXPORT void JNICALL OS_NATIVE(GCHandle_1Dump) (JNIEnv *env, jclass that) {
+	OS_NATIVE_ENTER(env, that, GCHandle_1Dump_FUNC);
+#ifndef GCHANDLE_TABLE	
+	SWTObjectTable::Dump();
+#endif	
+	OS_NATIVE_EXIT(env, that, GCHandle_1Dump_FUNC);
+}
+#endif
+
+#ifndef NO_GCHandle_1Alloc
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(GCHandle_1Alloc) (JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(GCHandle_1Alloc) (JNIEnv *env, jclass that, jint arg0) {
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GCHandle_1Alloc_FUNC);
+	rc = TO_HANDLE (TO_OBJECT (arg0));	
+	OS_NATIVE_EXIT(env, that, GCHandle_1Alloc_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GCHandle_1ToHandle
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(GCHandle_1ToHandle) (JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(GCHandle_1ToHandle) (JNIEnv *env, jclass that, jint arg0) {
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, GCHandle_1ToHandle_FUNC);
+#ifdef GCHANDLE_TABLE	
+	rc = arg0; 
+#else
+	GCHandle gc = GCHandle::FromIntPtr((IntPtr)arg0);
+	rc = TO_HANDLE (gc.Target);
+	gc.Free();
+#endif
+	OS_NATIVE_EXIT(env, that, GCHandle_1ToHandle_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Bitmap_1GetHicon
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Bitmap_1GetHicon)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Bitmap_1GetHicon)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Bitmap_1GetHicon_FUNC);
+	rc = (jint)(int)((System::Drawing::Bitmap^)TO_OBJECT(arg0))->GetHicon();
+	OS_NATIVE_EXIT(env, that, Bitmap_1GetHicon_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Icon_1FromHandle
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(Icon_1FromHandle)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(Icon_1FromHandle)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, Icon_1FromHandle_FUNC);
+	rc = (jint)TO_HANDLE(System::Drawing::Icon::FromHandle((IntPtr)(int)arg0));
+	OS_NATIVE_EXIT(env, that, Icon_1FromHandle_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_memcpy___3CII
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(memcpy___3CII)(JNIEnv *env, jclass that, jcharArray arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(memcpy___3CII)
+	(JNIEnv *env, jclass that, jcharArray arg0, jint arg1, jint arg2)
+{
+	jchar *lparg0=NULL;
+	pin_ptr<wchar_t> lparg1; 
+	OS_NATIVE_ENTER(env, that, memcpy___3CII_FUNC);
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg0) if ((lparg0 = (jchar *)env->GetPrimitiveArrayCritical(arg0, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg0) if ((lparg0 = env->GetCharArrayElements(arg0, NULL)) == NULL) goto fail;
+	}
+	if (arg2 > 0) {
+		lparg1 = &((array<wchar_t>^)TO_OBJECT(arg1))[0];
+		memcpy(lparg0, lparg1, arg2);
+	}
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg0 && lparg0) env->ReleasePrimitiveArrayCritical(arg0, lparg0, 0);
+	} else
+#endif
+	{
+		if (arg0 && lparg0) env->ReleaseCharArrayElements(arg0, lparg0, 0);
+	}
+	OS_NATIVE_EXIT(env, that, memcpy___3CII_FUNC);
+}
+#endif
+
+#ifndef NO_memcpy__I_3BI
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(memcpy__I_3BI)(JNIEnv *env, jclass that, jint arg0, jbyteArray arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(memcpy__I_3BI)
+	(JNIEnv *env, jclass that, jint arg0, jbyteArray arg1, jint arg2)
+{
+	jbyte *lparg1=NULL;
+	pin_ptr<Byte> lparg0; 
+	OS_NATIVE_ENTER(env, that, memcpy__I_3BI_FUNC);
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg1) if ((lparg1 = (jbyte*)env->GetPrimitiveArrayCritical(arg1, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg1) if ((lparg1 = env->GetByteArrayElements(arg1, NULL)) == NULL) goto fail;
+	}
+	if (arg2 > 0) {
+		lparg0 = &((array<Byte>^)TO_OBJECT(arg0))[0];
+		memcpy(lparg0, lparg1, arg2);	
+	}
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg1 && lparg1) env->ReleasePrimitiveArrayCritical(arg1, lparg1, JNI_ABORT);
+	} else
+#endif
+	{
+		if (arg1 && lparg1) env->ReleaseByteArrayElements(arg1, lparg1, JNI_ABORT);
+	}
+	OS_NATIVE_EXIT(env, that, memcpy__I_3BI_FUNC);
+}
+#endif
+
+#ifndef NO_memcpy___3BII
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(memcpy___3BII)(JNIEnv *env, jclass that, jbyteArray arg0, jint arg1, jint arg2);
+JNIEXPORT void JNICALL OS_NATIVE(memcpy___3BII)
+	(JNIEnv *env, jclass that, jbyteArray arg0, jint arg1, jint arg2)
+{
+	jbyte *lparg0=NULL;
+	pin_ptr<Byte> lparg1; 
+	OS_NATIVE_ENTER(env, that, memcpy___3BII_FUNC);
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg0) if ((lparg0 = (jbyte*)env->GetPrimitiveArrayCritical(arg0, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg0) if ((lparg0 = env->GetByteArrayElements(arg0, NULL)) == NULL) goto fail;
+	}
+	if (arg2 > 0) {
+		lparg1 = &((array<Byte>^)TO_OBJECT(arg1))[0];
+		memcpy(lparg0, lparg1, arg2);
+	}
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg0 && lparg0) env->ReleasePrimitiveArrayCritical(arg0, lparg0, 0);
+	} else
+#endif
+	{
+		if (arg0 && lparg0) env->ReleaseByteArrayElements(arg0, lparg0, 0);
+	}
+	OS_NATIVE_EXIT(env, that, memcpy___3BII_FUNC);
+}
+#endif
+
+#ifndef NO_ToggleButton_1IsCheckedNullSetter
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(ToggleButton_1IsCheckedNullSetter)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT void JNICALL OS_NATIVE(ToggleButton_1IsCheckedNullSetter)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	OS_NATIVE_ENTER(env, that, ToggleButton_1IsCheckedNullSetter_FUNC);
+	((ToggleButton^)TO_OBJECT(arg0))->IsChecked = Nullable<bool>(); 
+	OS_NATIVE_EXIT(env, that, ToggleButton_1IsCheckedNullSetter_FUNC);
+}
+#endif
+
+#ifndef NO_SWTAnimator_1DoubleValueProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SWTAnimator_1DoubleValueProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SWTAnimator_1DoubleValueProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SWTAnimator_1DoubleValueProperty_FUNC);
+	rc = (jint)TO_HANDLE(SWTAnimator::DoubleValueProperty);
+	OS_NATIVE_EXIT(env, that, SWTAnimator_1DoubleValueProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SWTAnimator_1IntValueProperty
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(SWTAnimator_1IntValueProperty)(JNIEnv *env, jclass that);
+JNIEXPORT jint JNICALL OS_NATIVE(SWTAnimator_1IntValueProperty)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, SWTAnimator_1IntValueProperty_FUNC);
+	rc = (jint)TO_HANDLE(SWTAnimator::IntValueProperty);
+	OS_NATIVE_EXIT(env, that, SWTAnimator_1IntValueProperty_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_Timeline_1BeginTime__II
+extern "C" JNIEXPORT void JNICALL OS_NATIVE(Timeline_1BeginTime__II)(JNIEnv *env, jclass that, jint arg0, jint arg1);
+JNIEXPORT void JNICALL OS_NATIVE(Timeline_1BeginTime__II)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	OS_NATIVE_ENTER(env, that, Timeline_1BeginTime__II_FUNC);
+	TimeSpan^ span = (TimeSpan^)TO_OBJECT(arg1);
+	Timeline^ timeline = (Timeline^)TO_OBJECT(arg0);
+	timeline->BeginTime =  (Nullable<TimeSpan>(span));
+	OS_NATIVE_EXIT(env, that, Timeline_1BeginTime__II_FUNC);
+}
+#endif
+
+#ifndef NO_gcnew_1SWTAnimation
+extern "C" JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTAnimation)(JNIEnv *env, jclass that, jint arg0);
+JNIEXPORT jint JNICALL OS_NATIVE(gcnew_1SWTAnimation)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	OS_NATIVE_ENTER(env, that, gcnew_1SWTAnimation_FUNC);
+	rc = (jint)TO_HANDLE(gcnew SWTAnimation(env, arg0));
+	OS_NATIVE_EXIT(env, that, gcnew_1SWTAnimation_FUNC);
+	return rc;
+}
+#endif
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os_stats.cpp b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os_stats.cpp
new file mode 100644
index 0000000..2ee0832
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os_stats.cpp
@@ -0,0 +1,1468 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "os_stats.h"
+
+#ifdef NATIVE_STATS
+
+int OS_nativeFunctionCount = 1426;
+int OS_nativeFunctionCallCount[1426];
+char * OS_nativeFunctionNames[] = {
+	"AccessText_1AccessKey",
+	"AccessText_1Text",
+	"AccessText_1TextWrapping",
+	"ApplicationCommands_1Cut",
+	"ApplicationCommands_1Paste",
+	"ApplicationCommands_1Redo",
+	"ApplicationCommands_1Undo",
+	"Application_1Current",
+	"Application_1Dispatcher",
+	"Application_1Resources__I",
+	"Application_1Resources__II",
+	"Application_1Run",
+	"Application_1Shutdown",
+	"Application_1ShutdownMode",
+	"Application_1Windows",
+	"ArrayList_1Clear",
+	"ArrayList_1Count",
+	"ArrayList_1Insert",
+	"ArrayList_1RemoveAt",
+	"ArrayList_1ToArray",
+	"ArrayList_1default__II",
+	"ArrayList_1default__III",
+	"Array_1CreateInstance",
+	"Array_1GetLength",
+	"Array_1GetValue",
+	"Array_1SetValue",
+	"BevelBitmapEffect_1BevelWidth__I",
+	"BevelBitmapEffect_1BevelWidth__ID",
+	"BevelBitmapEffect_1LightAngle__I",
+	"BevelBitmapEffect_1LightAngle__ID",
+	"BevelBitmapEffect_1Smoothness__I",
+	"BevelBitmapEffect_1Smoothness__ID",
+	"Binding_1RelativeSource",
+	"BitmapDecoder_1Create",
+	"BitmapDecoder_1Frames",
+	"BitmapEffectGroup_1Children",
+	"BitmapEncoder_1Frames",
+	"BitmapEncoder_1Save",
+	"BitmapFrameCollection_1Add",
+	"BitmapFrameCollection_1default",
+	"BitmapFrame_1Create",
+	"BitmapImage_1BeginInit",
+	"BitmapImage_1CreateOptions",
+	"BitmapImage_1EndInit",
+	"BitmapImage_1UriSource",
+	"BitmapPalette_1Colors",
+	"BitmapSource_1Clone",
+	"BitmapSource_1CopyPixels",
+	"BitmapSource_1Create",
+	"BitmapSource_1Format",
+	"BitmapSource_1Palette",
+	"BitmapSource_1PixelHeight",
+	"BitmapSource_1PixelWidth",
+	"Bitmap_1GetHicon",
+	"BlurBitmapEffect_1Radius__I",
+	"BlurBitmapEffect_1Radius__ID",
+	"Border_1typeid",
+	"Brush_1Opacity",
+	"Brushes_1Black",
+	"Brushes_1LightSkyBlue",
+	"Brushes_1Navy",
+	"Brushes_1Red",
+	"Brushes_1Transparent",
+	"Brushes_1White",
+	"ButtonBase_1Click",
+	"ButtonBase_1ClickEvent",
+	"Button_1IsDefault__I",
+	"Button_1IsDefault__IZ",
+	"Byte_1typeid",
+	"CancelEventArgs_1Cancel",
+	"Canvas_1GetLeft",
+	"Canvas_1GetTop",
+	"Canvas_1LeftProperty",
+	"Canvas_1SetLeft",
+	"Canvas_1SetTop",
+	"Canvas_1TopProperty",
+	"Canvas_1typeid",
+	"CharacterHit_1FirstCharacterIndex",
+	"CharacterHit_1TrailingLength",
+	"CheckBox_1typeid",
+	"Clipboard_1Clear",
+	"Clipboard_1ContainsData",
+	"Clipboard_1GetData",
+	"Clipboard_1GetDataObject",
+	"Clipboard_1GetText",
+	"Clipboard_1SetData",
+	"Clipboard_1SetDataObject",
+	"ColorDialog_1AnyColor",
+	"ColorDialog_1Color__I",
+	"ColorDialog_1Color__II",
+	"ColorDialog_1CustomColors__I",
+	"ColorDialog_1CustomColors__II",
+	"ColorList_1Add",
+	"ColorList_1Count",
+	"ColorList_1Current",
+	"ColorList_1GetEnumerator",
+	"Color_1A",
+	"Color_1B",
+	"Color_1FromArgb",
+	"Color_1G",
+	"Color_1R",
+	"Colors_1Black",
+	"Colors_1Blue",
+	"Colors_1Cyan",
+	"Colors_1DarkGray",
+	"Colors_1Green",
+	"Colors_1LightSkyBlue",
+	"Colors_1Lime",
+	"Colors_1Magenta",
+	"Colors_1Maroon",
+	"Colors_1Navy",
+	"Colors_1Olive",
+	"Colors_1Purple",
+	"Colors_1Red",
+	"Colors_1Silver",
+	"Colors_1Teal",
+	"Colors_1Transparent",
+	"Colors_1White",
+	"Colors_1Yellow",
+	"ColumnDefinitionCollection_1Add",
+	"ColumnDefinition_1Width",
+	"ComboBox_1IsDropDownOpen__I",
+	"ComboBox_1IsDropDownOpen__IZ",
+	"ComboBox_1IsEditable",
+	"ComboBox_1SelectionBoxItem",
+	"CommandManager_1AddPreviewExecutedHandler",
+	"CommonDialog_1ShowDialog",
+	"CompositeCollection_1IndexOf",
+	"CompositeCollection_1Insert",
+	"CompositeCollection_1Remove",
+	"CompositeCollection_1RemoveAt",
+	"Console_1Beep",
+	"ContainerVisual_1Clip__I",
+	"ContainerVisual_1Clip__II",
+	"ContentControl_1Content__I",
+	"ContentControl_1Content__II",
+	"ContentPresenter_1Content",
+	"ContentPresenter_1typeid",
+	"ContextMenuEventArgs_1CursorLeft",
+	"ContextMenuEventArgs_1CursorTop",
+	"ContextMenu_1Closed",
+	"ContextMenu_1HorizontalOffset",
+	"ContextMenu_1IsOpen",
+	"ContextMenu_1Opened",
+	"ContextMenu_1Placement",
+	"ContextMenu_1VerticalOffset",
+	"Control_1Background",
+	"Control_1BackgroundProperty",
+	"Control_1BorderBrushProperty",
+	"Control_1BorderThickness",
+	"Control_1BorderThicknessProperty",
+	"Control_1FontFamily__I",
+	"Control_1FontFamily__II",
+	"Control_1FontFamilyProperty",
+	"Control_1FontSize__I",
+	"Control_1FontSize__ID",
+	"Control_1FontSizeProperty",
+	"Control_1FontStretch",
+	"Control_1FontStretchProperty",
+	"Control_1FontStyle",
+	"Control_1FontStyleProperty",
+	"Control_1FontWeight",
+	"Control_1FontWeightProperty",
+	"Control_1Foreground",
+	"Control_1ForegroundProperty",
+	"Control_1HorizontalContentAlignment__I",
+	"Control_1HorizontalContentAlignment__II",
+	"Control_1MouseDoubleClick",
+	"Control_1MouseDoubleClickEvent",
+	"Control_1Padding__I",
+	"Control_1Padding__II",
+	"Control_1PreviewMouseDoubleClick",
+	"Control_1Template__I",
+	"Control_1Template__II",
+	"Control_1TemplateProperty",
+	"Control_1VerticalContentAlignment",
+	"CultureInfo_1CurrentUICulture",
+	"CursorInteropHelper_1Create",
+	"Cursors_1AppStarting",
+	"Cursors_1Arrow",
+	"Cursors_1Cross",
+	"Cursors_1Hand",
+	"Cursors_1Help",
+	"Cursors_1IBeam",
+	"Cursors_1No",
+	"Cursors_1ScrollE",
+	"Cursors_1ScrollN",
+	"Cursors_1ScrollNE",
+	"Cursors_1ScrollNW",
+	"Cursors_1ScrollS",
+	"Cursors_1ScrollSE",
+	"Cursors_1ScrollSW",
+	"Cursors_1ScrollW",
+	"Cursors_1SizeAll",
+	"Cursors_1SizeNESW",
+	"Cursors_1SizeNS",
+	"Cursors_1SizeNWSE",
+	"Cursors_1SizeWE",
+	"Cursors_1UpArrow",
+	"Cursors_1Wait",
+	"DashStyles_1Dash",
+	"DashStyles_1DashDot",
+	"DashStyles_1DashDotDot",
+	"DashStyles_1Dot",
+	"DashStyles_1Solid",
+	"DataFormats_1Bitmap",
+	"DataFormats_1FileDrop",
+	"DataFormats_1Html",
+	"DataFormats_1Rtf",
+	"DataFormats_1UnicodeText",
+	"DataObject_1GetData",
+	"DataObject_1GetDataPresent",
+	"DataObject_1GetFormats",
+	"DataObject_1SetData",
+	"DeleteGlobalRef",
+	"DependencyObject_1ClearValue",
+	"DependencyObject_1GetValue",
+	"DependencyObject_1GetValueDouble",
+	"DependencyObject_1GetValueInt",
+	"DependencyObject_1SetValue",
+	"DependencyPropertyChangedEventArgs_1NewValueDouble",
+	"DependencyPropertyChangedEventArgs_1NewValueInt",
+	"DependencyPropertyChangedEventArgs_1OldValueDouble",
+	"DependencyPropertyChangedEventArgs_1OldValueInt",
+	"DependencyPropertyDescriptor_1AddValueChanged",
+	"DependencyPropertyDescriptor_1DependencyProperty",
+	"DependencyPropertyDescriptor_1FromProperty__I",
+	"DependencyPropertyDescriptor_1FromProperty__II",
+	"DependencyPropertyDescriptor_1typeid",
+	"DependencyProperty_1UnsetValue",
+	"DispatcherFrame_1Continue__I",
+	"DispatcherFrame_1Continue__IZ",
+	"DispatcherHookEventArgs_1Operation",
+	"DispatcherHooks_1DispatcherInactive",
+	"DispatcherHooks_1OperationAborted",
+	"DispatcherHooks_1OperationCompleted",
+	"DispatcherHooks_1OperationPosted",
+	"DispatcherOperation_1Abort",
+	"DispatcherOperation_1Priority__I",
+	"DispatcherOperation_1Priority__II",
+	"DispatcherOperation_1Wait",
+	"DispatcherTimer_1Interval",
+	"DispatcherTimer_1Start",
+	"DispatcherTimer_1Stop",
+	"DispatcherTimer_1Tag__I",
+	"DispatcherTimer_1Tag__II",
+	"DispatcherTimer_1Tick",
+	"Dispatcher_1BeginInvoke",
+	"Dispatcher_1Hooks",
+	"Dispatcher_1PushFrame",
+	"DockPanel_1DockProperty",
+	"DockPanel_1typeid",
+	"DoubleAnimationUsingKeyFrames_1KeyFrames",
+	"DoubleAnimation_1From__I",
+	"DoubleAnimation_1From__ID",
+	"DoubleAnimation_1To__I",
+	"DoubleAnimation_1To__ID",
+	"DoubleCollection_1Add",
+	"DoubleKeyFrameCollection_1Add",
+	"DoubleKeyFrame_1KeyTime",
+	"DoubleKeyFrame_1Value",
+	"DragDeltaEventArgs_1HorizontalChange",
+	"DragDeltaEventArgs_1VerticalChange",
+	"DragDrop_1DoDragDrop",
+	"DragEventArgs_1AllowedEffects",
+	"DragEventArgs_1Data",
+	"DragEventArgs_1Effects__I",
+	"DragEventArgs_1Effects__II",
+	"DragEventArgs_1GetPosition",
+	"DragEventArgs_1KeyStates",
+	"DrawingColor_1FromArgb",
+	"DrawingColor_1ToArgb",
+	"DrawingContext_1Close",
+	"DrawingContext_1DrawDrawing",
+	"DrawingContext_1DrawEllipse",
+	"DrawingContext_1DrawGeometry",
+	"DrawingContext_1DrawImage",
+	"DrawingContext_1DrawLine",
+	"DrawingContext_1DrawRectangle",
+	"DrawingContext_1DrawRoundedRectangle",
+	"DrawingContext_1DrawText",
+	"DrawingContext_1Pop",
+	"DrawingContext_1PushClip",
+	"DrawingContext_1PushOpacity",
+	"DrawingContext_1PushTransform",
+	"DrawingFontFamily_1Name",
+	"DrawingVisual_1Drawing",
+	"DrawingVisual_1RenderOpen",
+	"DrawingVisual_1typeid",
+	"DropShadowBitmapEffect_1Color__I",
+	"DropShadowBitmapEffect_1Color__II",
+	"DropShadowBitmapEffect_1Direction__I",
+	"DropShadowBitmapEffect_1Direction__ID",
+	"DropShadowBitmapEffect_1Opacity__I",
+	"DropShadowBitmapEffect_1Opacity__ID",
+	"DropShadowBitmapEffect_1ShadowDepth__I",
+	"DropShadowBitmapEffect_1ShadowDepth__ID",
+	"DropShadowBitmapEffect_1Softness__I",
+	"DropShadowBitmapEffect_1Softness__ID",
+	"Duration_1TimeSpan",
+	"EditingCommands_1Backspace",
+	"EditingCommands_1Delete",
+	"EditingCommands_1DeleteNextWord",
+	"EditingCommands_1DeletePreviousWord",
+	"Environment_1ExpandEnvironmentVariables",
+	"ExecutedRoutedEventArgs_1Command",
+	"ExecutedRoutedEventArgs_1Handled",
+	"Expander_1Collapsed",
+	"Expander_1Expanded",
+	"Expander_1IsExpanded__I",
+	"Expander_1IsExpanded__IZ",
+	"FileDialog_1FileName",
+	"FileDialog_1FileNames",
+	"FileDialog_1Filter",
+	"FileDialog_1FilterIndex__I",
+	"FileDialog_1FilterIndex__II",
+	"FileDialog_1InitialDirectory",
+	"FileDialog_1Title",
+	"FileInfo_1DirectoryName",
+	"FileInfo_1Name",
+	"File_1Exists",
+	"File_1ReadAllText",
+	"FocusManager_1GetFocusScope",
+	"FocusManager_1GetFocusedElement",
+	"FolderBrowserDialog_1Description",
+	"FolderBrowserDialog_1SelectedPath__I",
+	"FolderBrowserDialog_1SelectedPath__II",
+	"FontDialog_1Color__I",
+	"FontDialog_1Color__II",
+	"FontDialog_1Font__I",
+	"FontDialog_1Font__II",
+	"FontDialog_1ShowColor",
+	"FontFamily_1GetTypefaces",
+	"FontFamily_1LineSpacing",
+	"FontFamily_1Source",
+	"FontStretch_1FromOpenTypeStretch",
+	"FontStretch_1ToOpenTypeStretch",
+	"FontStretches_1Normal",
+	"FontStyles_1Italic",
+	"FontStyles_1Normal",
+	"FontStyles_1Oblique",
+	"FontWeight_1FromOpenTypeWeight",
+	"FontWeight_1ToOpenTypeWeight",
+	"FontWeights_1Bold",
+	"FontWeights_1Normal",
+	"Font_1FontFamily",
+	"Font_1Size",
+	"Font_1Style",
+	"Fonts_1GetTypefaces",
+	"Fonts_1SystemTypefaces",
+	"FormattedText_1Baseline",
+	"FormattedText_1BuildGeometry",
+	"FormattedText_1BuildHighlightGeometry",
+	"FormattedText_1Height",
+	"FormattedText_1SetTextDecorations",
+	"FormattedText_1WidthIncludingTrailingWhitespace",
+	"FormsCommonDialog_1ShowDialog",
+	"FormsMouseEventArgs_1Button",
+	"Frame_1CanGoBack",
+	"Frame_1CanGoForward",
+	"Frame_1CurrentSource",
+	"Frame_1GoBack",
+	"Frame_1GoForward",
+	"Frame_1Navigate",
+	"Frame_1NavigationUIVisibility",
+	"Frame_1Refresh",
+	"Frame_1Source__I",
+	"Frame_1Source__II",
+	"Frame_1StopLoading",
+	"FrameworkContentElement_1Parent",
+	"FrameworkContentElement_1Tag__I",
+	"FrameworkContentElement_1Tag__II",
+	"FrameworkContentElement_1typeid",
+	"FrameworkElementFactory_1AppendChild",
+	"FrameworkElementFactory_1SetBinding",
+	"FrameworkElementFactory_1SetValue__III",
+	"FrameworkElementFactory_1SetValue__IIZ",
+	"FrameworkElementFactory_1SetValueDock",
+	"FrameworkElementFactory_1SetValueInt",
+	"FrameworkElementFactory_1SetValueOrientation",
+	"FrameworkElementFactory_1SetValueStretch",
+	"FrameworkElementFactory_1SetValueVerticalAlignment",
+	"FrameworkElementFactory_1SetValueVisibility",
+	"FrameworkElement_1ActualHeight",
+	"FrameworkElement_1ActualHeightProperty",
+	"FrameworkElement_1ActualWidth",
+	"FrameworkElement_1ActualWidthProperty",
+	"FrameworkElement_1BeginInit",
+	"FrameworkElement_1BringIntoView",
+	"FrameworkElement_1ContextMenu",
+	"FrameworkElement_1ContextMenuClosing",
+	"FrameworkElement_1ContextMenuOpening",
+	"FrameworkElement_1Cursor",
+	"FrameworkElement_1CursorProperty",
+	"FrameworkElement_1FindResource",
+	"FrameworkElement_1FlowDirection__I",
+	"FrameworkElement_1FlowDirection__II",
+	"FrameworkElement_1FocusVisualStyle",
+	"FrameworkElement_1GetBindingExpression",
+	"FrameworkElement_1Height__I",
+	"FrameworkElement_1Height__ID",
+	"FrameworkElement_1HeightProperty",
+	"FrameworkElement_1HorizontalAlignment",
+	"FrameworkElement_1IsLoaded",
+	"FrameworkElement_1LayoutTransform",
+	"FrameworkElement_1Loaded",
+	"FrameworkElement_1Margin__I",
+	"FrameworkElement_1Margin__II",
+	"FrameworkElement_1MarginProperty",
+	"FrameworkElement_1MaxHeight__I",
+	"FrameworkElement_1MaxHeight__ID",
+	"FrameworkElement_1MaxWidth__I",
+	"FrameworkElement_1MaxWidth__ID",
+	"FrameworkElement_1MinHeight__I",
+	"FrameworkElement_1MinHeight__ID",
+	"FrameworkElement_1MinWidth__I",
+	"FrameworkElement_1MinWidth__ID",
+	"FrameworkElement_1Name",
+	"FrameworkElement_1NameProperty",
+	"FrameworkElement_1Parent",
+	"FrameworkElement_1RegisterName",
+	"FrameworkElement_1RenderTransform__I",
+	"FrameworkElement_1RenderTransform__II",
+	"FrameworkElement_1Resources__I",
+	"FrameworkElement_1Resources__II",
+	"FrameworkElement_1SizeChanged",
+	"FrameworkElement_1SizeChangedEvent",
+	"FrameworkElement_1Style__I",
+	"FrameworkElement_1Style__II",
+	"FrameworkElement_1StyleProperty",
+	"FrameworkElement_1Tag__I",
+	"FrameworkElement_1Tag__II",
+	"FrameworkElement_1TagProperty",
+	"FrameworkElement_1ToolTip__I",
+	"FrameworkElement_1ToolTip__II",
+	"FrameworkElement_1VerticalAlignment",
+	"FrameworkElement_1VerticalAlignmentProperty",
+	"FrameworkElement_1Width__I",
+	"FrameworkElement_1Width__ID",
+	"FrameworkElement_1WidthProperty",
+	"FrameworkElement_1typeid",
+	"FrameworkTemplate_1FindName",
+	"FrameworkTemplate_1VisualTree",
+	"Freezable_1CanFreeze",
+	"Freezable_1Clone",
+	"Freezable_1Freeze",
+	"GCHandle_1Alloc",
+	"GCHandle_1Dump",
+	"GCHandle_1Free",
+	"GCHandle_1ToHandle",
+	"GeometryCollection_1Add",
+	"GeometryCollection_1Clear",
+	"GeometryCollection_1Count",
+	"GeometryCollection_1Remove",
+	"GeometryGroup_1Children__I",
+	"GeometryGroup_1Children__II",
+	"Geometry_1Bounds",
+	"Geometry_1Clone",
+	"Geometry_1FillContains",
+	"Geometry_1FillContainsWithDetail",
+	"Geometry_1GetFlattenedPathGeometry__I",
+	"Geometry_1GetFlattenedPathGeometry__IDI",
+	"Geometry_1IsEmpty",
+	"Geometry_1StrokeContains",
+	"Geometry_1Transform__I",
+	"Geometry_1Transform__II",
+	"GiveFeedbackEventArgs_1Effects",
+	"GlyphRun_1BidiLevel",
+	"GradientBrush_1MappingMode",
+	"GradientBrush_1SpreadMethod",
+	"GridViewColumnCollection_1Clear",
+	"GridViewColumnCollection_1Count",
+	"GridViewColumnCollection_1IndexOf",
+	"GridViewColumnCollection_1Insert",
+	"GridViewColumnCollection_1Remove",
+	"GridViewColumnCollection_1default",
+	"GridViewColumnHeader_1Content",
+	"GridViewColumn_1ActualWidth",
+	"GridViewColumn_1CellTemplate__I",
+	"GridViewColumn_1CellTemplate__II",
+	"GridViewColumn_1Header__I",
+	"GridViewColumn_1Header__II",
+	"GridViewColumn_1HeaderTemplate__I",
+	"GridViewColumn_1HeaderTemplate__II",
+	"GridViewColumn_1Width__I",
+	"GridViewColumn_1Width__ID",
+	"GridViewColumn_1WidthProperty",
+	"GridViewHeaderRowPresenter_1typeid",
+	"GridViewRowPresenterBase_1Columns",
+	"GridViewRowPresenterBase_1ColumnsProperty",
+	"GridViewRowPresenter_1Content__I",
+	"GridViewRowPresenter_1Content__II",
+	"GridViewRowPresenter_1typeid",
+	"GridView_1AllowsColumnReorder",
+	"GridView_1ColumnHeaderContainerStyle",
+	"GridView_1Columns",
+	"Grid_1ColumnDefinitions",
+	"Grid_1RowDefinitions",
+	"Grid_1SetColumn",
+	"Grid_1SetColumnSpan",
+	"Grid_1SetRow",
+	"Grid_1SetRowSpan",
+	"HeaderedContentControl_1Header__I",
+	"HeaderedContentControl_1Header__II",
+	"HeaderedItemsControl_1Header__I",
+	"HeaderedItemsControl_1Header__II",
+	"HeaderedItemsControl_1HeaderTemplateProperty",
+	"HtmlDocument_1InvokeScript",
+	"HwndSource_1CompositionTarget",
+	"HwndSource_1Handle",
+	"HwndTarget_1BackgroundColor",
+	"Hyperlink_1Click",
+	"ICollection_1Count",
+	"IEnumerable_1GetEnumerator",
+	"IEnumerator_1Current",
+	"IEnumerator_1MoveNext",
+	"IList_1Add",
+	"IList_1Clear",
+	"IList_1GetEnumerator",
+	"IList_1IndexOf",
+	"IList_1Insert",
+	"IList_1Remove",
+	"IList_1default",
+	"Icon_1FromHandle",
+	"ImageSource_1typeid",
+	"Image_1Source__I",
+	"Image_1Source__II",
+	"Image_1SourceProperty",
+	"Image_1Stretch",
+	"Image_1StretchProperty",
+	"Image_1typeid",
+	"Imaging_1CreateBitmapSourceFromHIcon",
+	"IndexedGlyphRunCollection_1Current",
+	"IndexedGlyphRunCollection_1GetEnumerator",
+	"IndexedGlyphRun_1GlyphRun",
+	"IndexedGlyphRun_1TextSourceCharacterIndex",
+	"IndexedGlyphRun_1TextSourceLength",
+	"InlineCollection_1Add",
+	"InlineCollection_1Clear",
+	"InputEventArgs_1Timestamp",
+	"Int32AnimationUsingKeyFrames_1KeyFrames",
+	"Int32Animation_1From__I",
+	"Int32Animation_1From__II",
+	"Int32Animation_1To__I",
+	"Int32Animation_1To__II",
+	"Int32KeyFrame_1KeyTime",
+	"Int32KeyFrame_1Value",
+	"Int32Rect_1Empty",
+	"IntPtr_1ToInt32",
+	"ItemCollection_1Add",
+	"ItemCollection_1Clear",
+	"ItemCollection_1Count",
+	"ItemCollection_1CurrentItem",
+	"ItemCollection_1CurrentPosition",
+	"ItemCollection_1GetItemAt",
+	"ItemCollection_1IndexOf",
+	"ItemCollection_1Insert",
+	"ItemCollection_1Remove",
+	"ItemCollection_1RemoveAt",
+	"ItemsControl_1HasItems",
+	"ItemsControl_1IsTextSearchEnabled",
+	"ItemsControl_1ItemTemplate__I",
+	"ItemsControl_1ItemTemplate__II",
+	"ItemsControl_1Items",
+	"ItemsControl_1ItemsSource",
+	"ItemsPresenter_1typeid",
+	"JNIGetObject",
+	"KeyEventArgs_1IsDown",
+	"KeyEventArgs_1IsRepeat",
+	"KeyEventArgs_1IsToggled",
+	"KeyEventArgs_1Key",
+	"KeyEventArgs_1SystemKey",
+	"KeyInterop_1VirtualKeyFromKey",
+	"KeyTime_1FromTimeSpan",
+	"KeyTime_1Uniform",
+	"KeyboardDevice_1Modifiers",
+	"KeyboardEventArgs_1KeyboardDevice",
+	"KeyboardNavigation_1GetIsTabStop",
+	"KeyboardNavigation_1SetControlTabNavigation",
+	"KeyboardNavigation_1SetDirectionalNavigation",
+	"KeyboardNavigation_1SetIsTabStop",
+	"KeyboardNavigation_1SetTabNavigation",
+	"Keyboard_1Focus",
+	"Keyboard_1FocusedElement",
+	"Keyboard_1Modifiers",
+	"ListBoxItem_1IsSelected__I",
+	"ListBoxItem_1IsSelected__IZ",
+	"ListBox_1ScrollIntoView",
+	"ListBox_1SelectAll",
+	"ListBox_1SelectedItems",
+	"ListBox_1SelectionMode",
+	"ListBox_1UnselectAll",
+	"ListViewItem_1typeid",
+	"ListView_1View",
+	"MatrixTransform_1Matrix__I",
+	"MatrixTransform_1Matrix__II",
+	"Matrix_1Invert",
+	"Matrix_1IsIdentity",
+	"Matrix_1M11__I",
+	"Matrix_1M11__ID",
+	"Matrix_1M12__I",
+	"Matrix_1M12__ID",
+	"Matrix_1M21__I",
+	"Matrix_1M21__ID",
+	"Matrix_1M22__I",
+	"Matrix_1M22__ID",
+	"Matrix_1Multiply",
+	"Matrix_1OffsetX__I",
+	"Matrix_1OffsetX__ID",
+	"Matrix_1OffsetY__I",
+	"Matrix_1OffsetY__ID",
+	"Matrix_1RotatePrepend",
+	"Matrix_1ScalePrepend",
+	"Matrix_1SetIdentity",
+	"Matrix_1SkewPrepend",
+	"Matrix_1Transform",
+	"Matrix_1TranslatePrepend",
+	"MemberDescriptor_1Name",
+	"MemoryStream_1ToArray",
+	"MemoryStream_1Write",
+	"MenuItem_1Click",
+	"MenuItem_1Icon",
+	"MenuItem_1InputGestureText",
+	"MenuItem_1IsCheckable",
+	"MenuItem_1IsChecked__I",
+	"MenuItem_1IsChecked__IZ",
+	"MenuItem_1SubmenuClosed",
+	"MenuItem_1SubmenuOpened",
+	"Menu_1IsMainMenu",
+	"MessageBox_1Show",
+	"MethodInfo_1Invoke",
+	"MouseButtonEventArgs_1ButtonState",
+	"MouseButtonEventArgs_1ChangedButton",
+	"MouseButtonEventArgs_1ClickCount",
+	"MouseEventArgs_1GetPosition",
+	"MouseEventArgs_1LeftButton",
+	"MouseEventArgs_1MiddleButton",
+	"MouseEventArgs_1RightButton",
+	"MouseEventArgs_1XButton1",
+	"MouseEventArgs_1XButton2",
+	"MouseWheelEventArgs_1Delta",
+	"Mouse_1Captured",
+	"Mouse_1DirectlyOver",
+	"Mouse_1GetPosition",
+	"Mouse_1LeftButton",
+	"Mouse_1MiddleButton",
+	"Mouse_1RightButton",
+	"Mouse_1SetCursor",
+	"Mouse_1XButton1",
+	"Mouse_1XButton2",
+	"NameScope_1GetNameScope",
+	"NameScope_1RegisterName",
+	"NameScope_1SetNameScope",
+	"NewGlobalRef",
+	"NotifyIcon_1DoubleClick",
+	"NotifyIcon_1Icon",
+	"NotifyIcon_1MouseDown",
+	"NotifyIcon_1MouseUp",
+	"NotifyIcon_1Text",
+	"NotifyIcon_1Visible",
+	"Object_1Equals",
+	"Object_1GetType",
+	"Object_1ToString",
+	"ObservableCollectionGridViewColumn_1Move",
+	"OpenFileDialog_1Multiselect",
+	"OuterGlowBitmapEffect_1GlowColor__I",
+	"OuterGlowBitmapEffect_1GlowColor__II",
+	"OuterGlowBitmapEffect_1GlowSize__I",
+	"OuterGlowBitmapEffect_1GlowSize__ID",
+	"OuterGlowBitmapEffect_1GlowSizeProperty",
+	"OuterGlowBitmapEffect_1Opacity__I",
+	"OuterGlowBitmapEffect_1Opacity__ID",
+	"Panel_1Background__I",
+	"Panel_1Background__II",
+	"Panel_1BackgroundProperty",
+	"Panel_1Children",
+	"Panel_1GetZIndex",
+	"Panel_1HeightProperty",
+	"Panel_1SetZIndex",
+	"Panel_1WidthProperty",
+	"PasswordBox_1MaxLength__I",
+	"PasswordBox_1MaxLength__II",
+	"PasswordBox_1Password__I",
+	"PasswordBox_1Password__II",
+	"PasswordBox_1PasswordChanged",
+	"PasswordBox_1PasswordChar__I",
+	"PasswordBox_1PasswordChar__IC",
+	"PasswordBox_1Paste",
+	"PathFigureCollection_1Add",
+	"PathFigureCollection_1Count",
+	"PathFigure_1IsClosed__I",
+	"PathFigure_1IsClosed__IZ",
+	"PathFigure_1Segments__I",
+	"PathFigure_1Segments__II",
+	"PathFigure_1StartPoint",
+	"PathGeometry_1AddGeometry",
+	"PathGeometry_1Bounds",
+	"PathGeometry_1Clone",
+	"PathGeometry_1Figures__I",
+	"PathGeometry_1Figures__II",
+	"PathGeometry_1FillRule",
+	"PathSegmentCollection_1Add",
+	"PathSegmentCollection_1Count",
+	"Path_1Data",
+	"Path_1Fill",
+	"Path_1Stretch",
+	"Pen_1Brush__I",
+	"Pen_1Brush__II",
+	"Pen_1DashCap",
+	"Pen_1DashStyle",
+	"Pen_1EndLineCap",
+	"Pen_1LineJoin",
+	"Pen_1MiterLimit",
+	"Pen_1StartLineCap",
+	"Pen_1Thickness",
+	"PixelFormat_1BitsPerPixel",
+	"PixelFormats_1Bgr101010",
+	"PixelFormats_1Bgr24",
+	"PixelFormats_1Bgr32",
+	"PixelFormats_1Bgr555",
+	"PixelFormats_1Bgr565",
+	"PixelFormats_1Bgra32",
+	"PixelFormats_1BlackWhite",
+	"PixelFormats_1Default",
+	"PixelFormats_1Indexed1",
+	"PixelFormats_1Indexed2",
+	"PixelFormats_1Indexed4",
+	"PixelFormats_1Indexed8",
+	"PixelFormats_1Pbgra32",
+	"PixelFormats_1Rgb24",
+	"PointCollection_1Add",
+	"Point_1X",
+	"Point_1Y",
+	"Popup_1AllowsTransparency",
+	"Popup_1Child__I",
+	"Popup_1Child__II",
+	"Popup_1Closed",
+	"Popup_1HorizontalOffset__I",
+	"Popup_1HorizontalOffset__ID",
+	"Popup_1IsOpen__I",
+	"Popup_1IsOpen__IZ",
+	"Popup_1Opened",
+	"Popup_1VerticalOffset__I",
+	"Popup_1VerticalOffset__ID",
+	"PresentationSource_1CurrentSources",
+	"PresentationSource_1FromVisual",
+	"PresentationSource_1RootVisual",
+	"ProgressBar_1IsIndeterminate__I",
+	"ProgressBar_1IsIndeterminate__IZ",
+	"ProgressBar_1Orientation",
+	"PropertyInfo_1SetValue",
+	"PropertyInfo_1SetValueBoolean",
+	"QueryContinueDragEventArgs_1Action",
+	"QueryContinueDragEventArgs_1EscapePressed",
+	"RangeBase_1LargeChange__I",
+	"RangeBase_1LargeChange__ID",
+	"RangeBase_1Maximum__I",
+	"RangeBase_1Maximum__ID",
+	"RangeBase_1Minimum__I",
+	"RangeBase_1Minimum__ID",
+	"RangeBase_1SmallChange__I",
+	"RangeBase_1SmallChange__ID",
+	"RangeBase_1Value__I",
+	"RangeBase_1Value__ID",
+	"RangeBase_1ValueChanged",
+	"Rect_1Contains",
+	"Rect_1Height__I",
+	"Rect_1Height__ID",
+	"Rect_1Intersect",
+	"Rect_1Union",
+	"Rect_1Width__I",
+	"Rect_1Width__ID",
+	"Rect_1X__I",
+	"Rect_1X__ID",
+	"Rect_1Y__I",
+	"Rect_1Y__ID",
+	"Rectangle_1Height",
+	"Rectangle_1Width",
+	"Rectangle_1X",
+	"Rectangle_1Y",
+	"RegistryKey_1GetSubKeyNames",
+	"RegistryKey_1GetValue",
+	"RegistryKey_1OpenSubKey",
+	"Registry_1ClassesRoot",
+	"RelativeSource_1AncestorType",
+	"RenderOptions_1GetBitmapScalingMode",
+	"RenderOptions_1SetBitmapScalingMode",
+	"RenderOptions_1SetEdgeMode",
+	"RenderTargetBitmap_1Render",
+	"RepeatBehavior_1Forever",
+	"ResourceDictionary_1Source",
+	"RoutedEventArgs_1Handled",
+	"RoutedEventArgs_1OriginalSource",
+	"RoutedEventArgs_1Source",
+	"RoutedEventArgs_1typeid",
+	"RoutedPropertyChangedEventArgs_1NewValue",
+	"RoutedPropertyChangedEventArgs_1OldValue",
+	"RowDefinitionCollection_1Add",
+	"RowDefinition_1Height",
+	"Run_1Text",
+	"SWTAnimator_1DoubleValueProperty",
+	"SWTAnimator_1IntValueProperty",
+	"SWTCanvas_1Visual__I",
+	"SWTCanvas_1Visual__II",
+	"SWTDockPanel_1JNIRefProperty",
+	"SWTDockPanel_1typeid",
+	"SWTTextRunProperties_1ForegroundBrush",
+	"SaveFileDialog_1OverwritePrompt",
+	"Screen_1AllScreens",
+	"Screen_1Bounds",
+	"Screen_1PrimaryScreen",
+	"Screen_1WorkingArea",
+	"ScrollBar_1Orientation__I",
+	"ScrollBar_1Orientation__II",
+	"ScrollBar_1Scroll",
+	"ScrollBar_1ViewportSize__I",
+	"ScrollBar_1ViewportSize__ID",
+	"ScrollBar_1typeid",
+	"ScrollEventArgs_1ScrollEventType",
+	"ScrollViewer_1ScrollToVerticalOffset",
+	"ScrollViewer_1SetHorizontalScrollBarVisibility",
+	"ScrollViewer_1SetVerticalScrollBarVisibility",
+	"ScrollViewer_1VerticalOffset",
+	"ScrollViewer_1typeid",
+	"SelectionChangedEventArgs_1AddedItems",
+	"SelectionChangedEventArgs_1RemovedItems",
+	"Selector_1IsSynchronizedWithCurrentItem",
+	"Selector_1SelectedIndex__I",
+	"Selector_1SelectedIndex__II",
+	"Selector_1SelectedItem",
+	"Selector_1SelectedValue",
+	"Selector_1SelectionChanged",
+	"SetterBaseCollection_1Add",
+	"Shape_1Fill",
+	"Shape_1Stroke",
+	"Shape_1StrokeThickness",
+	"SizeChangedEventArgs_1NewSize",
+	"SizeChangedEventArgs_1PreviousSize",
+	"Size_1Height__I",
+	"Size_1Height__ID",
+	"Size_1Width__I",
+	"Size_1Width__ID",
+	"Slider_1Orientation",
+	"Slider_1TickFrequency",
+	"Slider_1TickPlacement",
+	"SplineDoubleKeyFrame_1KeySpline",
+	"SplineInt32KeyFrame_1KeySpline",
+	"StackPanel_1Orientation",
+	"StackPanel_1OrientationProperty",
+	"StackPanel_1typeid",
+	"Storyboard_1Begin",
+	"Storyboard_1Pause",
+	"Storyboard_1Resume",
+	"Storyboard_1SetTargetName",
+	"Storyboard_1SetTargetProperty",
+	"Storyboard_1Stop",
+	"StreamGeometryContext_1BeginFigure",
+	"StreamGeometryContext_1Close",
+	"StreamGeometryContext_1LineTo",
+	"StreamGeometry_1Open",
+	"String_1Length",
+	"String_1ToCharArray",
+	"String_1typeid",
+	"Style_1Setters",
+	"SystemColors_1ActiveBorderBrush",
+	"SystemColors_1ActiveBorderColor",
+	"SystemColors_1ActiveCaptionColor",
+	"SystemColors_1ActiveCaptionTextColor",
+	"SystemColors_1ControlBrush",
+	"SystemColors_1ControlColor",
+	"SystemColors_1ControlDarkColor",
+	"SystemColors_1ControlDarkDarkColor",
+	"SystemColors_1ControlLightColor",
+	"SystemColors_1ControlLightLightColor",
+	"SystemColors_1ControlTextBrush",
+	"SystemColors_1ControlTextColor",
+	"SystemColors_1GradientActiveCaptionColor",
+	"SystemColors_1GradientInactiveCaptionColor",
+	"SystemColors_1HighlightBrush",
+	"SystemColors_1HighlightColor",
+	"SystemColors_1HighlightTextColor",
+	"SystemColors_1InactiveCaptionColor",
+	"SystemColors_1InactiveCaptionTextColor",
+	"SystemColors_1InfoColor",
+	"SystemColors_1InfoTextColor",
+	"SystemColors_1WindowColor",
+	"SystemColors_1WindowTextColor",
+	"SystemFonts_1MessageFontFamily",
+	"SystemFonts_1MessageFontSize",
+	"SystemFonts_1MessageFontStyle",
+	"SystemFonts_1MessageFontWeight",
+	"SystemParameters_1HighContrast",
+	"SystemParameters_1HorizontalScrollBarButtonWidth",
+	"SystemParameters_1HorizontalScrollBarHeight",
+	"SystemParameters_1MinimumHorizontalDragDistance",
+	"SystemParameters_1MinimumVerticalDragDistance",
+	"SystemParameters_1PrimaryScreenHeight",
+	"SystemParameters_1PrimaryScreenWidth",
+	"SystemParameters_1ThinHorizontalBorderHeight",
+	"SystemParameters_1ThinVerticalBorderWidth",
+	"SystemParameters_1VerticalScrollBarButtonHeight",
+	"SystemParameters_1VerticalScrollBarWidth",
+	"SystemParameters_1VirtualScreenHeight",
+	"SystemParameters_1VirtualScreenLeft",
+	"SystemParameters_1VirtualScreenTop",
+	"SystemParameters_1VirtualScreenWidth",
+	"SystemParameters_1WheelScrollLines",
+	"SystemParameters_1WorkArea",
+	"TabControl_1TabStripPlacement",
+	"TabItem_1IsSelected",
+	"TextBlock_1Background",
+	"TextBlock_1BackgroundProperty",
+	"TextBlock_1FontFamily",
+	"TextBlock_1FontFamilyProperty",
+	"TextBlock_1FontSize",
+	"TextBlock_1FontSizeProperty",
+	"TextBlock_1FontStretch",
+	"TextBlock_1FontStretchProperty",
+	"TextBlock_1FontStyle",
+	"TextBlock_1FontStyleProperty",
+	"TextBlock_1FontWeight",
+	"TextBlock_1FontWeightProperty",
+	"TextBlock_1Foreground",
+	"TextBlock_1ForegroundProperty",
+	"TextBlock_1Inlines",
+	"TextBlock_1Text__I",
+	"TextBlock_1Text__II",
+	"TextBlock_1TextProperty",
+	"TextBlock_1typeid",
+	"TextBoundsCollection_1Current",
+	"TextBoundsCollection_1GetEnumerator",
+	"TextBounds_1Rectangle",
+	"TextBoxBase_1AcceptsReturn",
+	"TextBoxBase_1AcceptsTab",
+	"TextBoxBase_1AppendText",
+	"TextBoxBase_1Copy",
+	"TextBoxBase_1Cut",
+	"TextBoxBase_1HorizontalScrollBarVisibility",
+	"TextBoxBase_1IsReadOnly__I",
+	"TextBoxBase_1IsReadOnly__IZ",
+	"TextBoxBase_1Paste",
+	"TextBoxBase_1ScrollToEnd",
+	"TextBoxBase_1ScrollToVerticalOffset",
+	"TextBoxBase_1SelectAll",
+	"TextBoxBase_1TextChanged",
+	"TextBoxBase_1VerticalOffset",
+	"TextBoxBase_1VerticalScrollBarVisibility",
+	"TextBox_1CaretIndex__I",
+	"TextBox_1CaretIndex__II",
+	"TextBox_1GetFirstVisibleLineIndex",
+	"TextBox_1GetLineIndexFromCharacterIndex",
+	"TextBox_1GetRectFromCharacterIndex",
+	"TextBox_1LineCount",
+	"TextBox_1MaxLength__I",
+	"TextBox_1MaxLength__II",
+	"TextBox_1ScrollToLine",
+	"TextBox_1Select",
+	"TextBox_1SelectedText__I",
+	"TextBox_1SelectedText__II",
+	"TextBox_1SelectionLength__I",
+	"TextBox_1SelectionLength__II",
+	"TextBox_1SelectionStart__I",
+	"TextBox_1SelectionStart__II",
+	"TextBox_1Text__I",
+	"TextBox_1Text__II",
+	"TextBox_1TextWrapping",
+	"TextCompositionEventArgs_1ControlText",
+	"TextCompositionEventArgs_1Handled",
+	"TextCompositionEventArgs_1SystemText",
+	"TextCompositionEventArgs_1Text",
+	"TextDecorationCollection_1Add",
+	"TextDecorations_1Strikethrough",
+	"TextDecorations_1Underline",
+	"TextFormatter_1Create",
+	"TextFormatter_1FormatLine",
+	"TextLine_1Baseline",
+	"TextLine_1Draw",
+	"TextLine_1GetCharacterHitFromDistance",
+	"TextLine_1GetDistanceFromCharacterHit",
+	"TextLine_1GetIndexedGlyphRuns",
+	"TextLine_1GetNextCaretCharacterHit",
+	"TextLine_1GetPreviousCaretCharacterHit",
+	"TextLine_1GetTextBounds",
+	"TextLine_1GetTextLineBreak",
+	"TextLine_1Height",
+	"TextLine_1Length",
+	"TextLine_1NewlineLength",
+	"TextLine_1Start",
+	"TextLine_1Width",
+	"TextLine_1WidthIncludingTrailingWhitespace",
+	"TextTabPropertiesCollection_1Add",
+	"Thickness_1Bottom",
+	"Thickness_1Left",
+	"Thickness_1Right",
+	"Thickness_1Top",
+	"Thumb_1DragDeltaEvent",
+	"TileBrush_1AlignmentX",
+	"TileBrush_1AlignmentY",
+	"TileBrush_1Stretch",
+	"TileBrush_1TileMode",
+	"TileBrush_1Viewport",
+	"TileBrush_1ViewportUnits",
+	"TimeSpan_1FromMilliseconds",
+	"TimeSpan_1TotalMilliseconds",
+	"TimelineGroup_1Children",
+	"Timeline_1AccelerationRatio__I",
+	"Timeline_1AccelerationRatio__ID",
+	"Timeline_1AutoReverse",
+	"Timeline_1BeginTime__I",
+	"Timeline_1BeginTime__II",
+	"Timeline_1Completed",
+	"Timeline_1DecelerationRatio__I",
+	"Timeline_1DecelerationRatio__ID",
+	"Timeline_1Duration__I",
+	"Timeline_1Duration__II",
+	"Timeline_1RepeatBehavior",
+	"ToggleButton_1Checked",
+	"ToggleButton_1CheckedEvent",
+	"ToggleButton_1IndeterminateEvent",
+	"ToggleButton_1IsChecked__I",
+	"ToggleButton_1IsChecked__IZ",
+	"ToggleButton_1IsCheckedNullSetter",
+	"ToggleButton_1IsCheckedProperty",
+	"ToggleButton_1IsThreeStateProperty",
+	"ToggleButton_1Unchecked",
+	"ToggleButton_1UncheckedEvent",
+	"ToolBarTray_1Background",
+	"ToolBarTray_1IsLocked__I",
+	"ToolBarTray_1IsLocked__IZ",
+	"ToolBarTray_1Orientation",
+	"ToolBarTray_1ToolBars",
+	"ToolBar_1Band__I",
+	"ToolBar_1Band__II",
+	"ToolBar_1BandIndex__I",
+	"ToolBar_1BandIndex__II",
+	"ToolBar_1BandProperty",
+	"ToolBar_1ButtonStyleKey",
+	"ToolBar_1CheckBoxStyleKey",
+	"ToolBar_1HasOverflowItems",
+	"ToolBar_1RadioButtonStyleKey",
+	"ToolBar_1SeparatorStyleKey",
+	"ToolBar_1SetOverflowMode",
+	"ToolBar_1typeid",
+	"TransformCollection_1Add",
+	"TransformGroup_1Children",
+	"Transform_1Clone",
+	"TreeViewItem_1CollapsedEvent",
+	"TreeViewItem_1ExpandedEvent",
+	"TreeViewItem_1HeaderTemplate__I",
+	"TreeViewItem_1HeaderTemplate__II",
+	"TreeViewItem_1HeaderTemplateProperty",
+	"TreeViewItem_1IsExpanded__I",
+	"TreeViewItem_1IsExpanded__IZ",
+	"TreeViewItem_1IsSelected__I",
+	"TreeViewItem_1IsSelected__IZ",
+	"TreeViewItem_1typeid",
+	"TreeView_1SelectedItem",
+	"TreeView_1SelectedItemChanged",
+	"TreeView_1typeid",
+	"TypeConverter_1ConvertFromString",
+	"TypeConverter_1ConvertToString",
+	"TypeDescriptor_1GetConverter",
+	"TypeDescriptor_1GetProperties",
+	"Type_1FullName",
+	"Type_1GetMethod",
+	"Type_1GetProperty",
+	"Type_1GetType",
+	"Type_1IsInstanceOfType",
+	"TypefaceCollection_1Count",
+	"TypefaceCollection_1Current",
+	"TypefaceCollection_1GetEnumerator",
+	"Typeface_1FontFamily",
+	"Typeface_1Stretch",
+	"Typeface_1Style",
+	"Typeface_1Weight",
+	"UIElementCollection_1Add",
+	"UIElementCollection_1Clear",
+	"UIElementCollection_1Contains",
+	"UIElementCollection_1Count",
+	"UIElementCollection_1Current",
+	"UIElementCollection_1GetEnumerator",
+	"UIElementCollection_1IndexOf",
+	"UIElementCollection_1Insert",
+	"UIElementCollection_1Remove",
+	"UIElementCollection_1default",
+	"UIElement_1AddHandler",
+	"UIElement_1AllowDrop",
+	"UIElement_1BeginAnimation",
+	"UIElement_1BitmapEffect__I",
+	"UIElement_1BitmapEffect__II",
+	"UIElement_1CaptureMouse",
+	"UIElement_1Clip",
+	"UIElement_1ClipToBounds",
+	"UIElement_1ClipToBoundsProperty",
+	"UIElement_1DesiredSize",
+	"UIElement_1DragEnter",
+	"UIElement_1DragEnterEvent",
+	"UIElement_1DragLeave",
+	"UIElement_1DragLeaveEvent",
+	"UIElement_1DragOver",
+	"UIElement_1DragOverEvent",
+	"UIElement_1Drop",
+	"UIElement_1DropEvent",
+	"UIElement_1Focus",
+	"UIElement_1Focusable",
+	"UIElement_1GiveFeedback",
+	"UIElement_1GiveFeedbackEvent",
+	"UIElement_1InputHitTest",
+	"UIElement_1InvalidateVisual",
+	"UIElement_1IsEnabled__I",
+	"UIElement_1IsEnabled__IZ",
+	"UIElement_1IsFocused",
+	"UIElement_1IsHitTestVisible",
+	"UIElement_1IsKeyboardFocusWithin",
+	"UIElement_1IsKeyboardFocused",
+	"UIElement_1IsMeasureValid",
+	"UIElement_1IsMouseOver",
+	"UIElement_1IsVisible",
+	"UIElement_1KeyDown",
+	"UIElement_1KeyUp",
+	"UIElement_1LayoutUpdated",
+	"UIElement_1LostKeyboardFocus",
+	"UIElement_1Measure",
+	"UIElement_1MouseDown",
+	"UIElement_1MouseEnter",
+	"UIElement_1MouseLeave",
+	"UIElement_1MouseMove",
+	"UIElement_1MouseUp",
+	"UIElement_1MouseWheel",
+	"UIElement_1MoveFocus",
+	"UIElement_1Opacity__I",
+	"UIElement_1Opacity__ID",
+	"UIElement_1OpacityProperty",
+	"UIElement_1PreviewGotKeyboardFocus",
+	"UIElement_1PreviewKeyDown",
+	"UIElement_1PreviewKeyUp",
+	"UIElement_1PreviewLostKeyboardFocus",
+	"UIElement_1PreviewMouseDown",
+	"UIElement_1PreviewMouseMove",
+	"UIElement_1PreviewMouseUp",
+	"UIElement_1PreviewMouseWheel",
+	"UIElement_1PreviewTextInput",
+	"UIElement_1QueryContinueDrag",
+	"UIElement_1QueryContinueDragEvent",
+	"UIElement_1ReleaseMouseCapture",
+	"UIElement_1RemoveHandler",
+	"UIElement_1RenderSize",
+	"UIElement_1SnapsToDevicePixels",
+	"UIElement_1TextInput",
+	"UIElement_1TranslatePoint",
+	"UIElement_1UpdateLayout",
+	"UIElement_1Visibility__I",
+	"UIElement_1Visibility__IB",
+	"UIElement_1VisibilityProperty",
+	"VirtualizingStackPanel_1VerticalOffset",
+	"VisualTreeHelper_1GetChild",
+	"VisualTreeHelper_1GetChildrenCount",
+	"VisualTreeHelper_1GetParent",
+	"Visual_1IsAncestorOf",
+	"Visual_1IsDescendantOf",
+	"Visual_1PointFromScreen",
+	"Visual_1PointToScreen",
+	"WebBrowserDocumentCompletedEventArgs_1Url",
+	"WebBrowserNavigatedEventArgs_1Url",
+	"WebBrowserNavigatingEventArgs_1Url",
+	"WebBrowserProgressChangedEventArgs_1CurrentProgress",
+	"WebBrowserProgressChangedEventArgs_1MaximumProgress",
+	"WebBrowser_1CanGoBack",
+	"WebBrowser_1CanGoForward",
+	"WebBrowser_1Document",
+	"WebBrowser_1DocumentCompleted",
+	"WebBrowser_1DocumentText__I",
+	"WebBrowser_1DocumentText__II",
+	"WebBrowser_1DocumentTitle",
+	"WebBrowser_1DocumentTitleChanged",
+	"WebBrowser_1GoBack",
+	"WebBrowser_1GoForward",
+	"WebBrowser_1Navigate",
+	"WebBrowser_1Navigated",
+	"WebBrowser_1Navigating",
+	"WebBrowser_1ProgressChanged",
+	"WebBrowser_1ReadyState",
+	"WebBrowser_1Refresh",
+	"WebBrowser_1ScriptErrorsSuppressed",
+	"WebBrowser_1StatusText",
+	"WebBrowser_1StatusTextChanged",
+	"WebBrowser_1Stop",
+	"WebBrowser_1Url",
+	"WindowCollection_1Count",
+	"WindowCollection_1Current",
+	"WindowCollection_1GetEnumerator",
+	"Window_1Activate",
+	"Window_1Activated",
+	"Window_1AllowsTransparency",
+	"Window_1Close",
+	"Window_1Closing",
+	"Window_1Deactivated",
+	"Window_1GetWindow",
+	"Window_1Hide",
+	"Window_1Icon",
+	"Window_1IsActive",
+	"Window_1Left__I",
+	"Window_1Left__ID",
+	"Window_1LocationChanged",
+	"Window_1Owner",
+	"Window_1ResizeMode",
+	"Window_1Show",
+	"Window_1ShowInTaskbar",
+	"Window_1Title__I",
+	"Window_1Title__II",
+	"Window_1Top__I",
+	"Window_1Top__ID",
+	"Window_1WindowState__I",
+	"Window_1WindowState__II",
+	"Window_1WindowStyle__I",
+	"Window_1WindowStyle__II",
+	"WindowsFormsHost_1Child",
+	"WriteableBitmap_1WritePixels",
+	"XamlReader_1Load",
+	"XmlReader_1Create",
+	"gcnew_1AccessText",
+	"gcnew_1Application",
+	"gcnew_1ArcSegment",
+	"gcnew_1ArrayList",
+	"gcnew_1BevelBitmapEffect",
+	"gcnew_1BezierSegment",
+	"gcnew_1Binding",
+	"gcnew_1Bitmap",
+	"gcnew_1BitmapEffectGroup",
+	"gcnew_1BitmapImage",
+	"gcnew_1BitmapPalette",
+	"gcnew_1BlurBitmapEffect",
+	"gcnew_1Button",
+	"gcnew_1CancelEventHandler",
+	"gcnew_1Canvas",
+	"gcnew_1CharacterHit",
+	"gcnew_1CheckBox",
+	"gcnew_1ColorDialog",
+	"gcnew_1ColorList",
+	"gcnew_1ColumnDefinition",
+	"gcnew_1CombinedGeometry",
+	"gcnew_1ComboBox",
+	"gcnew_1ComboBoxItem",
+	"gcnew_1CompositeCollection",
+	"gcnew_1ContentControl",
+	"gcnew_1ContextMenu",
+	"gcnew_1ContextMenuEventHandler",
+	"gcnew_1ControlTemplate",
+	"gcnew_1CroppedBitmap",
+	"gcnew_1DashStyle",
+	"gcnew_1DataObject",
+	"gcnew_1DataTemplate",
+	"gcnew_1DiscreteDoubleKeyFrame__",
+	"gcnew_1DiscreteDoubleKeyFrame__DI",
+	"gcnew_1DiscreteInt32KeyFrame",
+	"gcnew_1DispatcherFrame",
+	"gcnew_1DispatcherHookEventHandler",
+	"gcnew_1DispatcherTimer",
+	"gcnew_1DoubleAnimation",
+	"gcnew_1DoubleAnimationUsingKeyFrames",
+	"gcnew_1DoubleCollection",
+	"gcnew_1DragDeltaEventHandler",
+	"gcnew_1DragEventHandler",
+	"gcnew_1DrawingVisual",
+	"gcnew_1DropShadowBitmapEffect",
+	"gcnew_1Duration",
+	"gcnew_1EllipseGeometry",
+	"gcnew_1EventHandler",
+	"gcnew_1ExecutedRoutedEventHandler",
+	"gcnew_1Expander",
+	"gcnew_1FileInfo",
+	"gcnew_1FolderBrowserDialog",
+	"gcnew_1Font",
+	"gcnew_1FontDialog",
+	"gcnew_1FontFamily",
+	"gcnew_1FormatConvertedBitmap",
+	"gcnew_1FormattedText",
+	"gcnew_1FormsMouseEventHandler",
+	"gcnew_1Frame",
+	"gcnew_1FrameworkElementFactory__I",
+	"gcnew_1FrameworkElementFactory__II",
+	"gcnew_1GeometryGroup",
+	"gcnew_1GiveFeedbackEventHandler",
+	"gcnew_1Grid",
+	"gcnew_1GridLength",
+	"gcnew_1GridView",
+	"gcnew_1GridViewColumn",
+	"gcnew_1GridViewColumnCollection",
+	"gcnew_1GridViewColumnHeader",
+	"gcnew_1GroupBox",
+	"gcnew_1Hyperlink",
+	"gcnew_1Image",
+	"gcnew_1ImageBrush",
+	"gcnew_1Int32",
+	"gcnew_1Int32Animation",
+	"gcnew_1Int32AnimationUsingKeyFrames",
+	"gcnew_1Int32Rect",
+	"gcnew_1IntPtr",
+	"gcnew_1KeyEventHandler",
+	"gcnew_1KeySpline",
+	"gcnew_1KeyboardFocusChangedEventHandler",
+	"gcnew_1Label",
+	"gcnew_1LineSegment",
+	"gcnew_1LinearDoubleKeyFrame",
+	"gcnew_1LinearGradientBrush__IID",
+	"gcnew_1LinearGradientBrush__IIII",
+	"gcnew_1LinearInt32KeyFrame",
+	"gcnew_1ListBox",
+	"gcnew_1ListBoxItem",
+	"gcnew_1ListView",
+	"gcnew_1ListViewItem",
+	"gcnew_1Matrix",
+	"gcnew_1MatrixTransform",
+	"gcnew_1MemoryStream",
+	"gcnew_1Menu",
+	"gcnew_1MenuItem",
+	"gcnew_1MouseButtonEventHandler",
+	"gcnew_1MouseEventHandler",
+	"gcnew_1MouseWheelEventHandler",
+	"gcnew_1NameScope",
+	"gcnew_1NoArgsDelegate",
+	"gcnew_1NotifyIcon",
+	"gcnew_1OpenFileDialog",
+	"gcnew_1OuterGlowBitmapEffect",
+	"gcnew_1PasswordBox",
+	"gcnew_1Path",
+	"gcnew_1PathFigure",
+	"gcnew_1PathGeometry",
+	"gcnew_1Pen__",
+	"gcnew_1Pen__ID",
+	"gcnew_1Point",
+	"gcnew_1PointCollection",
+	"gcnew_1PolyLineSegment",
+	"gcnew_1Popup",
+	"gcnew_1ProgressBar",
+	"gcnew_1PropertyPath",
+	"gcnew_1QuadraticBezierSegment",
+	"gcnew_1QueryContinueDragEventHandler",
+	"gcnew_1RadioButton",
+	"gcnew_1Rect",
+	"gcnew_1Rectangle",
+	"gcnew_1RectangleGeometry",
+	"gcnew_1RelativeSource",
+	"gcnew_1RenderTargetBitmap",
+	"gcnew_1RepeatBehavior",
+	"gcnew_1RepeatButton",
+	"gcnew_1ResourceDictionary",
+	"gcnew_1RoutedEventHandler",
+	"gcnew_1RoutedPropertyChangedEventHandler",
+	"gcnew_1RoutedPropertyChangedEventHandlerObject",
+	"gcnew_1RowDefinition",
+	"gcnew_1Run",
+	"gcnew_1SWTAnimation",
+	"gcnew_1SWTAnimator",
+	"gcnew_1SWTCanvas",
+	"gcnew_1SWTSafeHandle",
+	"gcnew_1SWTTextEmbeddedObject",
+	"gcnew_1SWTTextParagraphProperties",
+	"gcnew_1SWTTextRunProperties",
+	"gcnew_1SWTTextSource",
+	"gcnew_1SWTTreeView",
+	"gcnew_1SWTTreeViewRowPresenter",
+	"gcnew_1SaveFileDialog",
+	"gcnew_1ScaleTransform",
+	"gcnew_1ScrollBar",
+	"gcnew_1ScrollEventHandler",
+	"gcnew_1ScrollViewer",
+	"gcnew_1SelectionChangedEventHandler",
+	"gcnew_1Separator",
+	"gcnew_1Setter",
+	"gcnew_1SetterVisibility",
+	"gcnew_1Size__",
+	"gcnew_1Size__DD",
+	"gcnew_1SizeChangedEventHandler",
+	"gcnew_1Slider",
+	"gcnew_1SolidColorBrush",
+	"gcnew_1SplineDoubleKeyFrame",
+	"gcnew_1SplineInt32KeyFrame",
+	"gcnew_1StackPanel",
+	"gcnew_1Storyboard",
+	"gcnew_1StreamGeometry",
+	"gcnew_1String___3C",
+	"gcnew_1String___3CII",
+	"gcnew_1StringReader",
+	"gcnew_1Style",
+	"gcnew_1TabControl",
+	"gcnew_1TabItem",
+	"gcnew_1TemplateBindingExtension",
+	"gcnew_1TextBlock",
+	"gcnew_1TextBox",
+	"gcnew_1TextChangedEventHandler",
+	"gcnew_1TextCharacters",
+	"gcnew_1TextCompositionEventHandler",
+	"gcnew_1TextDecoration",
+	"gcnew_1TextDecorationCollection",
+	"gcnew_1TextEndOfLine",
+	"gcnew_1TextEndOfParagraph",
+	"gcnew_1TextTabProperties",
+	"gcnew_1TextTabPropertiesCollection",
+	"gcnew_1Thickness",
+	"gcnew_1TiffBitmapEncoder",
+	"gcnew_1TimeSpan",
+	"gcnew_1TimerHandler",
+	"gcnew_1ToggleButton",
+	"gcnew_1ToolBar",
+	"gcnew_1ToolBarTray",
+	"gcnew_1TransformGroup",
+	"gcnew_1TranslateTransform",
+	"gcnew_1TraversalRequest",
+	"gcnew_1TreeView",
+	"gcnew_1TreeViewItem",
+	"gcnew_1Typeface",
+	"gcnew_1Uri",
+	"gcnew_1UserControl",
+	"gcnew_1WebBrowser",
+	"gcnew_1WebBrowserDocumentCompletedEventHandler",
+	"gcnew_1WebBrowserNavigatedEventHandler",
+	"gcnew_1WebBrowserNavigatingEventHandler",
+	"gcnew_1WebBrowserProgressChangedEventHandler",
+	"gcnew_1Window",
+	"gcnew_1WindowsFormsHost",
+	"gcnew_1WriteableBitmap__I",
+	"gcnew_1WriteableBitmap__IIDDII",
+	"memcpy__I_3BI",
+	"memcpy___3BII",
+	"memcpy___3CII",
+};
+
+#define STATS_NATIVE(func) Java_org_eclipse_swt_tools_internal_NativeStats_##func
+
+JNIEXPORT jint JNICALL STATS_NATIVE(OS_1GetFunctionCount)
+	(JNIEnv *env, jclass that)
+{
+	return OS_nativeFunctionCount;
+}
+
+JNIEXPORT jstring JNICALL STATS_NATIVE(OS_1GetFunctionName)
+	(JNIEnv *env, jclass that, jint index)
+{
+	return env->NewStringUTF(OS_nativeFunctionNames[index]);
+}
+
+JNIEXPORT jint JNICALL STATS_NATIVE(OS_1GetFunctionCallCount)
+	(JNIEnv *env, jclass that, jint index)
+{
+	return OS_nativeFunctionCallCount[index];
+}
+
+#endif
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os_stats.h b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os_stats.h
new file mode 100644
index 0000000..7c15c32
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os_stats.h
@@ -0,0 +1,1454 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#ifdef NATIVE_STATS
+extern int OS_nativeFunctionCount;
+extern int OS_nativeFunctionCallCount[];
+extern char* OS_nativeFunctionNames[];
+#define OS_NATIVE_ENTER(env, that, func) OS_nativeFunctionCallCount[func]++;
+#define OS_NATIVE_EXIT(env, that, func) 
+#else
+#ifndef OS_NATIVE_ENTER
+#define OS_NATIVE_ENTER(env, that, func) 
+#endif
+#ifndef OS_NATIVE_EXIT
+#define OS_NATIVE_EXIT(env, that, func) 
+#endif
+#endif
+
+typedef enum {
+	AccessText_1AccessKey_FUNC,
+	AccessText_1Text_FUNC,
+	AccessText_1TextWrapping_FUNC,
+	ApplicationCommands_1Cut_FUNC,
+	ApplicationCommands_1Paste_FUNC,
+	ApplicationCommands_1Redo_FUNC,
+	ApplicationCommands_1Undo_FUNC,
+	Application_1Current_FUNC,
+	Application_1Dispatcher_FUNC,
+	Application_1Resources__I_FUNC,
+	Application_1Resources__II_FUNC,
+	Application_1Run_FUNC,
+	Application_1Shutdown_FUNC,
+	Application_1ShutdownMode_FUNC,
+	Application_1Windows_FUNC,
+	ArrayList_1Clear_FUNC,
+	ArrayList_1Count_FUNC,
+	ArrayList_1Insert_FUNC,
+	ArrayList_1RemoveAt_FUNC,
+	ArrayList_1ToArray_FUNC,
+	ArrayList_1default__II_FUNC,
+	ArrayList_1default__III_FUNC,
+	Array_1CreateInstance_FUNC,
+	Array_1GetLength_FUNC,
+	Array_1GetValue_FUNC,
+	Array_1SetValue_FUNC,
+	BevelBitmapEffect_1BevelWidth__I_FUNC,
+	BevelBitmapEffect_1BevelWidth__ID_FUNC,
+	BevelBitmapEffect_1LightAngle__I_FUNC,
+	BevelBitmapEffect_1LightAngle__ID_FUNC,
+	BevelBitmapEffect_1Smoothness__I_FUNC,
+	BevelBitmapEffect_1Smoothness__ID_FUNC,
+	Binding_1RelativeSource_FUNC,
+	BitmapDecoder_1Create_FUNC,
+	BitmapDecoder_1Frames_FUNC,
+	BitmapEffectGroup_1Children_FUNC,
+	BitmapEncoder_1Frames_FUNC,
+	BitmapEncoder_1Save_FUNC,
+	BitmapFrameCollection_1Add_FUNC,
+	BitmapFrameCollection_1default_FUNC,
+	BitmapFrame_1Create_FUNC,
+	BitmapImage_1BeginInit_FUNC,
+	BitmapImage_1CreateOptions_FUNC,
+	BitmapImage_1EndInit_FUNC,
+	BitmapImage_1UriSource_FUNC,
+	BitmapPalette_1Colors_FUNC,
+	BitmapSource_1Clone_FUNC,
+	BitmapSource_1CopyPixels_FUNC,
+	BitmapSource_1Create_FUNC,
+	BitmapSource_1Format_FUNC,
+	BitmapSource_1Palette_FUNC,
+	BitmapSource_1PixelHeight_FUNC,
+	BitmapSource_1PixelWidth_FUNC,
+	Bitmap_1GetHicon_FUNC,
+	BlurBitmapEffect_1Radius__I_FUNC,
+	BlurBitmapEffect_1Radius__ID_FUNC,
+	Border_1typeid_FUNC,
+	Brush_1Opacity_FUNC,
+	Brushes_1Black_FUNC,
+	Brushes_1LightSkyBlue_FUNC,
+	Brushes_1Navy_FUNC,
+	Brushes_1Red_FUNC,
+	Brushes_1Transparent_FUNC,
+	Brushes_1White_FUNC,
+	ButtonBase_1Click_FUNC,
+	ButtonBase_1ClickEvent_FUNC,
+	Button_1IsDefault__I_FUNC,
+	Button_1IsDefault__IZ_FUNC,
+	Byte_1typeid_FUNC,
+	CancelEventArgs_1Cancel_FUNC,
+	Canvas_1GetLeft_FUNC,
+	Canvas_1GetTop_FUNC,
+	Canvas_1LeftProperty_FUNC,
+	Canvas_1SetLeft_FUNC,
+	Canvas_1SetTop_FUNC,
+	Canvas_1TopProperty_FUNC,
+	Canvas_1typeid_FUNC,
+	CharacterHit_1FirstCharacterIndex_FUNC,
+	CharacterHit_1TrailingLength_FUNC,
+	CheckBox_1typeid_FUNC,
+	Clipboard_1Clear_FUNC,
+	Clipboard_1ContainsData_FUNC,
+	Clipboard_1GetData_FUNC,
+	Clipboard_1GetDataObject_FUNC,
+	Clipboard_1GetText_FUNC,
+	Clipboard_1SetData_FUNC,
+	Clipboard_1SetDataObject_FUNC,
+	ColorDialog_1AnyColor_FUNC,
+	ColorDialog_1Color__I_FUNC,
+	ColorDialog_1Color__II_FUNC,
+	ColorDialog_1CustomColors__I_FUNC,
+	ColorDialog_1CustomColors__II_FUNC,
+	ColorList_1Add_FUNC,
+	ColorList_1Count_FUNC,
+	ColorList_1Current_FUNC,
+	ColorList_1GetEnumerator_FUNC,
+	Color_1A_FUNC,
+	Color_1B_FUNC,
+	Color_1FromArgb_FUNC,
+	Color_1G_FUNC,
+	Color_1R_FUNC,
+	Colors_1Black_FUNC,
+	Colors_1Blue_FUNC,
+	Colors_1Cyan_FUNC,
+	Colors_1DarkGray_FUNC,
+	Colors_1Green_FUNC,
+	Colors_1LightSkyBlue_FUNC,
+	Colors_1Lime_FUNC,
+	Colors_1Magenta_FUNC,
+	Colors_1Maroon_FUNC,
+	Colors_1Navy_FUNC,
+	Colors_1Olive_FUNC,
+	Colors_1Purple_FUNC,
+	Colors_1Red_FUNC,
+	Colors_1Silver_FUNC,
+	Colors_1Teal_FUNC,
+	Colors_1Transparent_FUNC,
+	Colors_1White_FUNC,
+	Colors_1Yellow_FUNC,
+	ColumnDefinitionCollection_1Add_FUNC,
+	ColumnDefinition_1Width_FUNC,
+	ComboBox_1IsDropDownOpen__I_FUNC,
+	ComboBox_1IsDropDownOpen__IZ_FUNC,
+	ComboBox_1IsEditable_FUNC,
+	ComboBox_1SelectionBoxItem_FUNC,
+	CommandManager_1AddPreviewExecutedHandler_FUNC,
+	CommonDialog_1ShowDialog_FUNC,
+	CompositeCollection_1IndexOf_FUNC,
+	CompositeCollection_1Insert_FUNC,
+	CompositeCollection_1Remove_FUNC,
+	CompositeCollection_1RemoveAt_FUNC,
+	Console_1Beep_FUNC,
+	ContainerVisual_1Clip__I_FUNC,
+	ContainerVisual_1Clip__II_FUNC,
+	ContentControl_1Content__I_FUNC,
+	ContentControl_1Content__II_FUNC,
+	ContentPresenter_1Content_FUNC,
+	ContentPresenter_1typeid_FUNC,
+	ContextMenuEventArgs_1CursorLeft_FUNC,
+	ContextMenuEventArgs_1CursorTop_FUNC,
+	ContextMenu_1Closed_FUNC,
+	ContextMenu_1HorizontalOffset_FUNC,
+	ContextMenu_1IsOpen_FUNC,
+	ContextMenu_1Opened_FUNC,
+	ContextMenu_1Placement_FUNC,
+	ContextMenu_1VerticalOffset_FUNC,
+	Control_1Background_FUNC,
+	Control_1BackgroundProperty_FUNC,
+	Control_1BorderBrushProperty_FUNC,
+	Control_1BorderThickness_FUNC,
+	Control_1BorderThicknessProperty_FUNC,
+	Control_1FontFamily__I_FUNC,
+	Control_1FontFamily__II_FUNC,
+	Control_1FontFamilyProperty_FUNC,
+	Control_1FontSize__I_FUNC,
+	Control_1FontSize__ID_FUNC,
+	Control_1FontSizeProperty_FUNC,
+	Control_1FontStretch_FUNC,
+	Control_1FontStretchProperty_FUNC,
+	Control_1FontStyle_FUNC,
+	Control_1FontStyleProperty_FUNC,
+	Control_1FontWeight_FUNC,
+	Control_1FontWeightProperty_FUNC,
+	Control_1Foreground_FUNC,
+	Control_1ForegroundProperty_FUNC,
+	Control_1HorizontalContentAlignment__I_FUNC,
+	Control_1HorizontalContentAlignment__II_FUNC,
+	Control_1MouseDoubleClick_FUNC,
+	Control_1MouseDoubleClickEvent_FUNC,
+	Control_1Padding__I_FUNC,
+	Control_1Padding__II_FUNC,
+	Control_1PreviewMouseDoubleClick_FUNC,
+	Control_1Template__I_FUNC,
+	Control_1Template__II_FUNC,
+	Control_1TemplateProperty_FUNC,
+	Control_1VerticalContentAlignment_FUNC,
+	CultureInfo_1CurrentUICulture_FUNC,
+	CursorInteropHelper_1Create_FUNC,
+	Cursors_1AppStarting_FUNC,
+	Cursors_1Arrow_FUNC,
+	Cursors_1Cross_FUNC,
+	Cursors_1Hand_FUNC,
+	Cursors_1Help_FUNC,
+	Cursors_1IBeam_FUNC,
+	Cursors_1No_FUNC,
+	Cursors_1ScrollE_FUNC,
+	Cursors_1ScrollN_FUNC,
+	Cursors_1ScrollNE_FUNC,
+	Cursors_1ScrollNW_FUNC,
+	Cursors_1ScrollS_FUNC,
+	Cursors_1ScrollSE_FUNC,
+	Cursors_1ScrollSW_FUNC,
+	Cursors_1ScrollW_FUNC,
+	Cursors_1SizeAll_FUNC,
+	Cursors_1SizeNESW_FUNC,
+	Cursors_1SizeNS_FUNC,
+	Cursors_1SizeNWSE_FUNC,
+	Cursors_1SizeWE_FUNC,
+	Cursors_1UpArrow_FUNC,
+	Cursors_1Wait_FUNC,
+	DashStyles_1Dash_FUNC,
+	DashStyles_1DashDot_FUNC,
+	DashStyles_1DashDotDot_FUNC,
+	DashStyles_1Dot_FUNC,
+	DashStyles_1Solid_FUNC,
+	DataFormats_1Bitmap_FUNC,
+	DataFormats_1FileDrop_FUNC,
+	DataFormats_1Html_FUNC,
+	DataFormats_1Rtf_FUNC,
+	DataFormats_1UnicodeText_FUNC,
+	DataObject_1GetData_FUNC,
+	DataObject_1GetDataPresent_FUNC,
+	DataObject_1GetFormats_FUNC,
+	DataObject_1SetData_FUNC,
+	DeleteGlobalRef_FUNC,
+	DependencyObject_1ClearValue_FUNC,
+	DependencyObject_1GetValue_FUNC,
+	DependencyObject_1GetValueDouble_FUNC,
+	DependencyObject_1GetValueInt_FUNC,
+	DependencyObject_1SetValue_FUNC,
+	DependencyPropertyChangedEventArgs_1NewValueDouble_FUNC,
+	DependencyPropertyChangedEventArgs_1NewValueInt_FUNC,
+	DependencyPropertyChangedEventArgs_1OldValueDouble_FUNC,
+	DependencyPropertyChangedEventArgs_1OldValueInt_FUNC,
+	DependencyPropertyDescriptor_1AddValueChanged_FUNC,
+	DependencyPropertyDescriptor_1DependencyProperty_FUNC,
+	DependencyPropertyDescriptor_1FromProperty__I_FUNC,
+	DependencyPropertyDescriptor_1FromProperty__II_FUNC,
+	DependencyPropertyDescriptor_1typeid_FUNC,
+	DependencyProperty_1UnsetValue_FUNC,
+	DispatcherFrame_1Continue__I_FUNC,
+	DispatcherFrame_1Continue__IZ_FUNC,
+	DispatcherHookEventArgs_1Operation_FUNC,
+	DispatcherHooks_1DispatcherInactive_FUNC,
+	DispatcherHooks_1OperationAborted_FUNC,
+	DispatcherHooks_1OperationCompleted_FUNC,
+	DispatcherHooks_1OperationPosted_FUNC,
+	DispatcherOperation_1Abort_FUNC,
+	DispatcherOperation_1Priority__I_FUNC,
+	DispatcherOperation_1Priority__II_FUNC,
+	DispatcherOperation_1Wait_FUNC,
+	DispatcherTimer_1Interval_FUNC,
+	DispatcherTimer_1Start_FUNC,
+	DispatcherTimer_1Stop_FUNC,
+	DispatcherTimer_1Tag__I_FUNC,
+	DispatcherTimer_1Tag__II_FUNC,
+	DispatcherTimer_1Tick_FUNC,
+	Dispatcher_1BeginInvoke_FUNC,
+	Dispatcher_1Hooks_FUNC,
+	Dispatcher_1PushFrame_FUNC,
+	DockPanel_1DockProperty_FUNC,
+	DockPanel_1typeid_FUNC,
+	DoubleAnimationUsingKeyFrames_1KeyFrames_FUNC,
+	DoubleAnimation_1From__I_FUNC,
+	DoubleAnimation_1From__ID_FUNC,
+	DoubleAnimation_1To__I_FUNC,
+	DoubleAnimation_1To__ID_FUNC,
+	DoubleCollection_1Add_FUNC,
+	DoubleKeyFrameCollection_1Add_FUNC,
+	DoubleKeyFrame_1KeyTime_FUNC,
+	DoubleKeyFrame_1Value_FUNC,
+	DragDeltaEventArgs_1HorizontalChange_FUNC,
+	DragDeltaEventArgs_1VerticalChange_FUNC,
+	DragDrop_1DoDragDrop_FUNC,
+	DragEventArgs_1AllowedEffects_FUNC,
+	DragEventArgs_1Data_FUNC,
+	DragEventArgs_1Effects__I_FUNC,
+	DragEventArgs_1Effects__II_FUNC,
+	DragEventArgs_1GetPosition_FUNC,
+	DragEventArgs_1KeyStates_FUNC,
+	DrawingColor_1FromArgb_FUNC,
+	DrawingColor_1ToArgb_FUNC,
+	DrawingContext_1Close_FUNC,
+	DrawingContext_1DrawDrawing_FUNC,
+	DrawingContext_1DrawEllipse_FUNC,
+	DrawingContext_1DrawGeometry_FUNC,
+	DrawingContext_1DrawImage_FUNC,
+	DrawingContext_1DrawLine_FUNC,
+	DrawingContext_1DrawRectangle_FUNC,
+	DrawingContext_1DrawRoundedRectangle_FUNC,
+	DrawingContext_1DrawText_FUNC,
+	DrawingContext_1Pop_FUNC,
+	DrawingContext_1PushClip_FUNC,
+	DrawingContext_1PushOpacity_FUNC,
+	DrawingContext_1PushTransform_FUNC,
+	DrawingFontFamily_1Name_FUNC,
+	DrawingVisual_1Drawing_FUNC,
+	DrawingVisual_1RenderOpen_FUNC,
+	DrawingVisual_1typeid_FUNC,
+	DropShadowBitmapEffect_1Color__I_FUNC,
+	DropShadowBitmapEffect_1Color__II_FUNC,
+	DropShadowBitmapEffect_1Direction__I_FUNC,
+	DropShadowBitmapEffect_1Direction__ID_FUNC,
+	DropShadowBitmapEffect_1Opacity__I_FUNC,
+	DropShadowBitmapEffect_1Opacity__ID_FUNC,
+	DropShadowBitmapEffect_1ShadowDepth__I_FUNC,
+	DropShadowBitmapEffect_1ShadowDepth__ID_FUNC,
+	DropShadowBitmapEffect_1Softness__I_FUNC,
+	DropShadowBitmapEffect_1Softness__ID_FUNC,
+	Duration_1TimeSpan_FUNC,
+	EditingCommands_1Backspace_FUNC,
+	EditingCommands_1Delete_FUNC,
+	EditingCommands_1DeleteNextWord_FUNC,
+	EditingCommands_1DeletePreviousWord_FUNC,
+	Environment_1ExpandEnvironmentVariables_FUNC,
+	ExecutedRoutedEventArgs_1Command_FUNC,
+	ExecutedRoutedEventArgs_1Handled_FUNC,
+	Expander_1Collapsed_FUNC,
+	Expander_1Expanded_FUNC,
+	Expander_1IsExpanded__I_FUNC,
+	Expander_1IsExpanded__IZ_FUNC,
+	FileDialog_1FileName_FUNC,
+	FileDialog_1FileNames_FUNC,
+	FileDialog_1Filter_FUNC,
+	FileDialog_1FilterIndex__I_FUNC,
+	FileDialog_1FilterIndex__II_FUNC,
+	FileDialog_1InitialDirectory_FUNC,
+	FileDialog_1Title_FUNC,
+	FileInfo_1DirectoryName_FUNC,
+	FileInfo_1Name_FUNC,
+	File_1Exists_FUNC,
+	File_1ReadAllText_FUNC,
+	FocusManager_1GetFocusScope_FUNC,
+	FocusManager_1GetFocusedElement_FUNC,
+	FolderBrowserDialog_1Description_FUNC,
+	FolderBrowserDialog_1SelectedPath__I_FUNC,
+	FolderBrowserDialog_1SelectedPath__II_FUNC,
+	FontDialog_1Color__I_FUNC,
+	FontDialog_1Color__II_FUNC,
+	FontDialog_1Font__I_FUNC,
+	FontDialog_1Font__II_FUNC,
+	FontDialog_1ShowColor_FUNC,
+	FontFamily_1GetTypefaces_FUNC,
+	FontFamily_1LineSpacing_FUNC,
+	FontFamily_1Source_FUNC,
+	FontStretch_1FromOpenTypeStretch_FUNC,
+	FontStretch_1ToOpenTypeStretch_FUNC,
+	FontStretches_1Normal_FUNC,
+	FontStyles_1Italic_FUNC,
+	FontStyles_1Normal_FUNC,
+	FontStyles_1Oblique_FUNC,
+	FontWeight_1FromOpenTypeWeight_FUNC,
+	FontWeight_1ToOpenTypeWeight_FUNC,
+	FontWeights_1Bold_FUNC,
+	FontWeights_1Normal_FUNC,
+	Font_1FontFamily_FUNC,
+	Font_1Size_FUNC,
+	Font_1Style_FUNC,
+	Fonts_1GetTypefaces_FUNC,
+	Fonts_1SystemTypefaces_FUNC,
+	FormattedText_1Baseline_FUNC,
+	FormattedText_1BuildGeometry_FUNC,
+	FormattedText_1BuildHighlightGeometry_FUNC,
+	FormattedText_1Height_FUNC,
+	FormattedText_1SetTextDecorations_FUNC,
+	FormattedText_1WidthIncludingTrailingWhitespace_FUNC,
+	FormsCommonDialog_1ShowDialog_FUNC,
+	FormsMouseEventArgs_1Button_FUNC,
+	Frame_1CanGoBack_FUNC,
+	Frame_1CanGoForward_FUNC,
+	Frame_1CurrentSource_FUNC,
+	Frame_1GoBack_FUNC,
+	Frame_1GoForward_FUNC,
+	Frame_1Navigate_FUNC,
+	Frame_1NavigationUIVisibility_FUNC,
+	Frame_1Refresh_FUNC,
+	Frame_1Source__I_FUNC,
+	Frame_1Source__II_FUNC,
+	Frame_1StopLoading_FUNC,
+	FrameworkContentElement_1Parent_FUNC,
+	FrameworkContentElement_1Tag__I_FUNC,
+	FrameworkContentElement_1Tag__II_FUNC,
+	FrameworkContentElement_1typeid_FUNC,
+	FrameworkElementFactory_1AppendChild_FUNC,
+	FrameworkElementFactory_1SetBinding_FUNC,
+	FrameworkElementFactory_1SetValue__III_FUNC,
+	FrameworkElementFactory_1SetValue__IIZ_FUNC,
+	FrameworkElementFactory_1SetValueDock_FUNC,
+	FrameworkElementFactory_1SetValueInt_FUNC,
+	FrameworkElementFactory_1SetValueOrientation_FUNC,
+	FrameworkElementFactory_1SetValueStretch_FUNC,
+	FrameworkElementFactory_1SetValueVerticalAlignment_FUNC,
+	FrameworkElementFactory_1SetValueVisibility_FUNC,
+	FrameworkElement_1ActualHeight_FUNC,
+	FrameworkElement_1ActualHeightProperty_FUNC,
+	FrameworkElement_1ActualWidth_FUNC,
+	FrameworkElement_1ActualWidthProperty_FUNC,
+	FrameworkElement_1BeginInit_FUNC,
+	FrameworkElement_1BringIntoView_FUNC,
+	FrameworkElement_1ContextMenu_FUNC,
+	FrameworkElement_1ContextMenuClosing_FUNC,
+	FrameworkElement_1ContextMenuOpening_FUNC,
+	FrameworkElement_1Cursor_FUNC,
+	FrameworkElement_1CursorProperty_FUNC,
+	FrameworkElement_1FindResource_FUNC,
+	FrameworkElement_1FlowDirection__I_FUNC,
+	FrameworkElement_1FlowDirection__II_FUNC,
+	FrameworkElement_1FocusVisualStyle_FUNC,
+	FrameworkElement_1GetBindingExpression_FUNC,
+	FrameworkElement_1Height__I_FUNC,
+	FrameworkElement_1Height__ID_FUNC,
+	FrameworkElement_1HeightProperty_FUNC,
+	FrameworkElement_1HorizontalAlignment_FUNC,
+	FrameworkElement_1IsLoaded_FUNC,
+	FrameworkElement_1LayoutTransform_FUNC,
+	FrameworkElement_1Loaded_FUNC,
+	FrameworkElement_1Margin__I_FUNC,
+	FrameworkElement_1Margin__II_FUNC,
+	FrameworkElement_1MarginProperty_FUNC,
+	FrameworkElement_1MaxHeight__I_FUNC,
+	FrameworkElement_1MaxHeight__ID_FUNC,
+	FrameworkElement_1MaxWidth__I_FUNC,
+	FrameworkElement_1MaxWidth__ID_FUNC,
+	FrameworkElement_1MinHeight__I_FUNC,
+	FrameworkElement_1MinHeight__ID_FUNC,
+	FrameworkElement_1MinWidth__I_FUNC,
+	FrameworkElement_1MinWidth__ID_FUNC,
+	FrameworkElement_1Name_FUNC,
+	FrameworkElement_1NameProperty_FUNC,
+	FrameworkElement_1Parent_FUNC,
+	FrameworkElement_1RegisterName_FUNC,
+	FrameworkElement_1RenderTransform__I_FUNC,
+	FrameworkElement_1RenderTransform__II_FUNC,
+	FrameworkElement_1Resources__I_FUNC,
+	FrameworkElement_1Resources__II_FUNC,
+	FrameworkElement_1SizeChanged_FUNC,
+	FrameworkElement_1SizeChangedEvent_FUNC,
+	FrameworkElement_1Style__I_FUNC,
+	FrameworkElement_1Style__II_FUNC,
+	FrameworkElement_1StyleProperty_FUNC,
+	FrameworkElement_1Tag__I_FUNC,
+	FrameworkElement_1Tag__II_FUNC,
+	FrameworkElement_1TagProperty_FUNC,
+	FrameworkElement_1ToolTip__I_FUNC,
+	FrameworkElement_1ToolTip__II_FUNC,
+	FrameworkElement_1VerticalAlignment_FUNC,
+	FrameworkElement_1VerticalAlignmentProperty_FUNC,
+	FrameworkElement_1Width__I_FUNC,
+	FrameworkElement_1Width__ID_FUNC,
+	FrameworkElement_1WidthProperty_FUNC,
+	FrameworkElement_1typeid_FUNC,
+	FrameworkTemplate_1FindName_FUNC,
+	FrameworkTemplate_1VisualTree_FUNC,
+	Freezable_1CanFreeze_FUNC,
+	Freezable_1Clone_FUNC,
+	Freezable_1Freeze_FUNC,
+	GCHandle_1Alloc_FUNC,
+	GCHandle_1Dump_FUNC,
+	GCHandle_1Free_FUNC,
+	GCHandle_1ToHandle_FUNC,
+	GeometryCollection_1Add_FUNC,
+	GeometryCollection_1Clear_FUNC,
+	GeometryCollection_1Count_FUNC,
+	GeometryCollection_1Remove_FUNC,
+	GeometryGroup_1Children__I_FUNC,
+	GeometryGroup_1Children__II_FUNC,
+	Geometry_1Bounds_FUNC,
+	Geometry_1Clone_FUNC,
+	Geometry_1FillContains_FUNC,
+	Geometry_1FillContainsWithDetail_FUNC,
+	Geometry_1GetFlattenedPathGeometry__I_FUNC,
+	Geometry_1GetFlattenedPathGeometry__IDI_FUNC,
+	Geometry_1IsEmpty_FUNC,
+	Geometry_1StrokeContains_FUNC,
+	Geometry_1Transform__I_FUNC,
+	Geometry_1Transform__II_FUNC,
+	GiveFeedbackEventArgs_1Effects_FUNC,
+	GlyphRun_1BidiLevel_FUNC,
+	GradientBrush_1MappingMode_FUNC,
+	GradientBrush_1SpreadMethod_FUNC,
+	GridViewColumnCollection_1Clear_FUNC,
+	GridViewColumnCollection_1Count_FUNC,
+	GridViewColumnCollection_1IndexOf_FUNC,
+	GridViewColumnCollection_1Insert_FUNC,
+	GridViewColumnCollection_1Remove_FUNC,
+	GridViewColumnCollection_1default_FUNC,
+	GridViewColumnHeader_1Content_FUNC,
+	GridViewColumn_1ActualWidth_FUNC,
+	GridViewColumn_1CellTemplate__I_FUNC,
+	GridViewColumn_1CellTemplate__II_FUNC,
+	GridViewColumn_1Header__I_FUNC,
+	GridViewColumn_1Header__II_FUNC,
+	GridViewColumn_1HeaderTemplate__I_FUNC,
+	GridViewColumn_1HeaderTemplate__II_FUNC,
+	GridViewColumn_1Width__I_FUNC,
+	GridViewColumn_1Width__ID_FUNC,
+	GridViewColumn_1WidthProperty_FUNC,
+	GridViewHeaderRowPresenter_1typeid_FUNC,
+	GridViewRowPresenterBase_1Columns_FUNC,
+	GridViewRowPresenterBase_1ColumnsProperty_FUNC,
+	GridViewRowPresenter_1Content__I_FUNC,
+	GridViewRowPresenter_1Content__II_FUNC,
+	GridViewRowPresenter_1typeid_FUNC,
+	GridView_1AllowsColumnReorder_FUNC,
+	GridView_1ColumnHeaderContainerStyle_FUNC,
+	GridView_1Columns_FUNC,
+	Grid_1ColumnDefinitions_FUNC,
+	Grid_1RowDefinitions_FUNC,
+	Grid_1SetColumn_FUNC,
+	Grid_1SetColumnSpan_FUNC,
+	Grid_1SetRow_FUNC,
+	Grid_1SetRowSpan_FUNC,
+	HeaderedContentControl_1Header__I_FUNC,
+	HeaderedContentControl_1Header__II_FUNC,
+	HeaderedItemsControl_1Header__I_FUNC,
+	HeaderedItemsControl_1Header__II_FUNC,
+	HeaderedItemsControl_1HeaderTemplateProperty_FUNC,
+	HtmlDocument_1InvokeScript_FUNC,
+	HwndSource_1CompositionTarget_FUNC,
+	HwndSource_1Handle_FUNC,
+	HwndTarget_1BackgroundColor_FUNC,
+	Hyperlink_1Click_FUNC,
+	ICollection_1Count_FUNC,
+	IEnumerable_1GetEnumerator_FUNC,
+	IEnumerator_1Current_FUNC,
+	IEnumerator_1MoveNext_FUNC,
+	IList_1Add_FUNC,
+	IList_1Clear_FUNC,
+	IList_1GetEnumerator_FUNC,
+	IList_1IndexOf_FUNC,
+	IList_1Insert_FUNC,
+	IList_1Remove_FUNC,
+	IList_1default_FUNC,
+	Icon_1FromHandle_FUNC,
+	ImageSource_1typeid_FUNC,
+	Image_1Source__I_FUNC,
+	Image_1Source__II_FUNC,
+	Image_1SourceProperty_FUNC,
+	Image_1Stretch_FUNC,
+	Image_1StretchProperty_FUNC,
+	Image_1typeid_FUNC,
+	Imaging_1CreateBitmapSourceFromHIcon_FUNC,
+	IndexedGlyphRunCollection_1Current_FUNC,
+	IndexedGlyphRunCollection_1GetEnumerator_FUNC,
+	IndexedGlyphRun_1GlyphRun_FUNC,
+	IndexedGlyphRun_1TextSourceCharacterIndex_FUNC,
+	IndexedGlyphRun_1TextSourceLength_FUNC,
+	InlineCollection_1Add_FUNC,
+	InlineCollection_1Clear_FUNC,
+	InputEventArgs_1Timestamp_FUNC,
+	Int32AnimationUsingKeyFrames_1KeyFrames_FUNC,
+	Int32Animation_1From__I_FUNC,
+	Int32Animation_1From__II_FUNC,
+	Int32Animation_1To__I_FUNC,
+	Int32Animation_1To__II_FUNC,
+	Int32KeyFrame_1KeyTime_FUNC,
+	Int32KeyFrame_1Value_FUNC,
+	Int32Rect_1Empty_FUNC,
+	IntPtr_1ToInt32_FUNC,
+	ItemCollection_1Add_FUNC,
+	ItemCollection_1Clear_FUNC,
+	ItemCollection_1Count_FUNC,
+	ItemCollection_1CurrentItem_FUNC,
+	ItemCollection_1CurrentPosition_FUNC,
+	ItemCollection_1GetItemAt_FUNC,
+	ItemCollection_1IndexOf_FUNC,
+	ItemCollection_1Insert_FUNC,
+	ItemCollection_1Remove_FUNC,
+	ItemCollection_1RemoveAt_FUNC,
+	ItemsControl_1HasItems_FUNC,
+	ItemsControl_1IsTextSearchEnabled_FUNC,
+	ItemsControl_1ItemTemplate__I_FUNC,
+	ItemsControl_1ItemTemplate__II_FUNC,
+	ItemsControl_1Items_FUNC,
+	ItemsControl_1ItemsSource_FUNC,
+	ItemsPresenter_1typeid_FUNC,
+	JNIGetObject_FUNC,
+	KeyEventArgs_1IsDown_FUNC,
+	KeyEventArgs_1IsRepeat_FUNC,
+	KeyEventArgs_1IsToggled_FUNC,
+	KeyEventArgs_1Key_FUNC,
+	KeyEventArgs_1SystemKey_FUNC,
+	KeyInterop_1VirtualKeyFromKey_FUNC,
+	KeyTime_1FromTimeSpan_FUNC,
+	KeyTime_1Uniform_FUNC,
+	KeyboardDevice_1Modifiers_FUNC,
+	KeyboardEventArgs_1KeyboardDevice_FUNC,
+	KeyboardNavigation_1GetIsTabStop_FUNC,
+	KeyboardNavigation_1SetControlTabNavigation_FUNC,
+	KeyboardNavigation_1SetDirectionalNavigation_FUNC,
+	KeyboardNavigation_1SetIsTabStop_FUNC,
+	KeyboardNavigation_1SetTabNavigation_FUNC,
+	Keyboard_1Focus_FUNC,
+	Keyboard_1FocusedElement_FUNC,
+	Keyboard_1Modifiers_FUNC,
+	ListBoxItem_1IsSelected__I_FUNC,
+	ListBoxItem_1IsSelected__IZ_FUNC,
+	ListBox_1ScrollIntoView_FUNC,
+	ListBox_1SelectAll_FUNC,
+	ListBox_1SelectedItems_FUNC,
+	ListBox_1SelectionMode_FUNC,
+	ListBox_1UnselectAll_FUNC,
+	ListViewItem_1typeid_FUNC,
+	ListView_1View_FUNC,
+	MatrixTransform_1Matrix__I_FUNC,
+	MatrixTransform_1Matrix__II_FUNC,
+	Matrix_1Invert_FUNC,
+	Matrix_1IsIdentity_FUNC,
+	Matrix_1M11__I_FUNC,
+	Matrix_1M11__ID_FUNC,
+	Matrix_1M12__I_FUNC,
+	Matrix_1M12__ID_FUNC,
+	Matrix_1M21__I_FUNC,
+	Matrix_1M21__ID_FUNC,
+	Matrix_1M22__I_FUNC,
+	Matrix_1M22__ID_FUNC,
+	Matrix_1Multiply_FUNC,
+	Matrix_1OffsetX__I_FUNC,
+	Matrix_1OffsetX__ID_FUNC,
+	Matrix_1OffsetY__I_FUNC,
+	Matrix_1OffsetY__ID_FUNC,
+	Matrix_1RotatePrepend_FUNC,
+	Matrix_1ScalePrepend_FUNC,
+	Matrix_1SetIdentity_FUNC,
+	Matrix_1SkewPrepend_FUNC,
+	Matrix_1Transform_FUNC,
+	Matrix_1TranslatePrepend_FUNC,
+	MemberDescriptor_1Name_FUNC,
+	MemoryStream_1ToArray_FUNC,
+	MemoryStream_1Write_FUNC,
+	MenuItem_1Click_FUNC,
+	MenuItem_1Icon_FUNC,
+	MenuItem_1InputGestureText_FUNC,
+	MenuItem_1IsCheckable_FUNC,
+	MenuItem_1IsChecked__I_FUNC,
+	MenuItem_1IsChecked__IZ_FUNC,
+	MenuItem_1SubmenuClosed_FUNC,
+	MenuItem_1SubmenuOpened_FUNC,
+	Menu_1IsMainMenu_FUNC,
+	MessageBox_1Show_FUNC,
+	MethodInfo_1Invoke_FUNC,
+	MouseButtonEventArgs_1ButtonState_FUNC,
+	MouseButtonEventArgs_1ChangedButton_FUNC,
+	MouseButtonEventArgs_1ClickCount_FUNC,
+	MouseEventArgs_1GetPosition_FUNC,
+	MouseEventArgs_1LeftButton_FUNC,
+	MouseEventArgs_1MiddleButton_FUNC,
+	MouseEventArgs_1RightButton_FUNC,
+	MouseEventArgs_1XButton1_FUNC,
+	MouseEventArgs_1XButton2_FUNC,
+	MouseWheelEventArgs_1Delta_FUNC,
+	Mouse_1Captured_FUNC,
+	Mouse_1DirectlyOver_FUNC,
+	Mouse_1GetPosition_FUNC,
+	Mouse_1LeftButton_FUNC,
+	Mouse_1MiddleButton_FUNC,
+	Mouse_1RightButton_FUNC,
+	Mouse_1SetCursor_FUNC,
+	Mouse_1XButton1_FUNC,
+	Mouse_1XButton2_FUNC,
+	NameScope_1GetNameScope_FUNC,
+	NameScope_1RegisterName_FUNC,
+	NameScope_1SetNameScope_FUNC,
+	NewGlobalRef_FUNC,
+	NotifyIcon_1DoubleClick_FUNC,
+	NotifyIcon_1Icon_FUNC,
+	NotifyIcon_1MouseDown_FUNC,
+	NotifyIcon_1MouseUp_FUNC,
+	NotifyIcon_1Text_FUNC,
+	NotifyIcon_1Visible_FUNC,
+	Object_1Equals_FUNC,
+	Object_1GetType_FUNC,
+	Object_1ToString_FUNC,
+	ObservableCollectionGridViewColumn_1Move_FUNC,
+	OpenFileDialog_1Multiselect_FUNC,
+	OuterGlowBitmapEffect_1GlowColor__I_FUNC,
+	OuterGlowBitmapEffect_1GlowColor__II_FUNC,
+	OuterGlowBitmapEffect_1GlowSize__I_FUNC,
+	OuterGlowBitmapEffect_1GlowSize__ID_FUNC,
+	OuterGlowBitmapEffect_1GlowSizeProperty_FUNC,
+	OuterGlowBitmapEffect_1Opacity__I_FUNC,
+	OuterGlowBitmapEffect_1Opacity__ID_FUNC,
+	Panel_1Background__I_FUNC,
+	Panel_1Background__II_FUNC,
+	Panel_1BackgroundProperty_FUNC,
+	Panel_1Children_FUNC,
+	Panel_1GetZIndex_FUNC,
+	Panel_1HeightProperty_FUNC,
+	Panel_1SetZIndex_FUNC,
+	Panel_1WidthProperty_FUNC,
+	PasswordBox_1MaxLength__I_FUNC,
+	PasswordBox_1MaxLength__II_FUNC,
+	PasswordBox_1Password__I_FUNC,
+	PasswordBox_1Password__II_FUNC,
+	PasswordBox_1PasswordChanged_FUNC,
+	PasswordBox_1PasswordChar__I_FUNC,
+	PasswordBox_1PasswordChar__IC_FUNC,
+	PasswordBox_1Paste_FUNC,
+	PathFigureCollection_1Add_FUNC,
+	PathFigureCollection_1Count_FUNC,
+	PathFigure_1IsClosed__I_FUNC,
+	PathFigure_1IsClosed__IZ_FUNC,
+	PathFigure_1Segments__I_FUNC,
+	PathFigure_1Segments__II_FUNC,
+	PathFigure_1StartPoint_FUNC,
+	PathGeometry_1AddGeometry_FUNC,
+	PathGeometry_1Bounds_FUNC,
+	PathGeometry_1Clone_FUNC,
+	PathGeometry_1Figures__I_FUNC,
+	PathGeometry_1Figures__II_FUNC,
+	PathGeometry_1FillRule_FUNC,
+	PathSegmentCollection_1Add_FUNC,
+	PathSegmentCollection_1Count_FUNC,
+	Path_1Data_FUNC,
+	Path_1Fill_FUNC,
+	Path_1Stretch_FUNC,
+	Pen_1Brush__I_FUNC,
+	Pen_1Brush__II_FUNC,
+	Pen_1DashCap_FUNC,
+	Pen_1DashStyle_FUNC,
+	Pen_1EndLineCap_FUNC,
+	Pen_1LineJoin_FUNC,
+	Pen_1MiterLimit_FUNC,
+	Pen_1StartLineCap_FUNC,
+	Pen_1Thickness_FUNC,
+	PixelFormat_1BitsPerPixel_FUNC,
+	PixelFormats_1Bgr101010_FUNC,
+	PixelFormats_1Bgr24_FUNC,
+	PixelFormats_1Bgr32_FUNC,
+	PixelFormats_1Bgr555_FUNC,
+	PixelFormats_1Bgr565_FUNC,
+	PixelFormats_1Bgra32_FUNC,
+	PixelFormats_1BlackWhite_FUNC,
+	PixelFormats_1Default_FUNC,
+	PixelFormats_1Indexed1_FUNC,
+	PixelFormats_1Indexed2_FUNC,
+	PixelFormats_1Indexed4_FUNC,
+	PixelFormats_1Indexed8_FUNC,
+	PixelFormats_1Pbgra32_FUNC,
+	PixelFormats_1Rgb24_FUNC,
+	PointCollection_1Add_FUNC,
+	Point_1X_FUNC,
+	Point_1Y_FUNC,
+	Popup_1AllowsTransparency_FUNC,
+	Popup_1Child__I_FUNC,
+	Popup_1Child__II_FUNC,
+	Popup_1Closed_FUNC,
+	Popup_1HorizontalOffset__I_FUNC,
+	Popup_1HorizontalOffset__ID_FUNC,
+	Popup_1IsOpen__I_FUNC,
+	Popup_1IsOpen__IZ_FUNC,
+	Popup_1Opened_FUNC,
+	Popup_1VerticalOffset__I_FUNC,
+	Popup_1VerticalOffset__ID_FUNC,
+	PresentationSource_1CurrentSources_FUNC,
+	PresentationSource_1FromVisual_FUNC,
+	PresentationSource_1RootVisual_FUNC,
+	ProgressBar_1IsIndeterminate__I_FUNC,
+	ProgressBar_1IsIndeterminate__IZ_FUNC,
+	ProgressBar_1Orientation_FUNC,
+	PropertyInfo_1SetValue_FUNC,
+	PropertyInfo_1SetValueBoolean_FUNC,
+	QueryContinueDragEventArgs_1Action_FUNC,
+	QueryContinueDragEventArgs_1EscapePressed_FUNC,
+	RangeBase_1LargeChange__I_FUNC,
+	RangeBase_1LargeChange__ID_FUNC,
+	RangeBase_1Maximum__I_FUNC,
+	RangeBase_1Maximum__ID_FUNC,
+	RangeBase_1Minimum__I_FUNC,
+	RangeBase_1Minimum__ID_FUNC,
+	RangeBase_1SmallChange__I_FUNC,
+	RangeBase_1SmallChange__ID_FUNC,
+	RangeBase_1Value__I_FUNC,
+	RangeBase_1Value__ID_FUNC,
+	RangeBase_1ValueChanged_FUNC,
+	Rect_1Contains_FUNC,
+	Rect_1Height__I_FUNC,
+	Rect_1Height__ID_FUNC,
+	Rect_1Intersect_FUNC,
+	Rect_1Union_FUNC,
+	Rect_1Width__I_FUNC,
+	Rect_1Width__ID_FUNC,
+	Rect_1X__I_FUNC,
+	Rect_1X__ID_FUNC,
+	Rect_1Y__I_FUNC,
+	Rect_1Y__ID_FUNC,
+	Rectangle_1Height_FUNC,
+	Rectangle_1Width_FUNC,
+	Rectangle_1X_FUNC,
+	Rectangle_1Y_FUNC,
+	RegistryKey_1GetSubKeyNames_FUNC,
+	RegistryKey_1GetValue_FUNC,
+	RegistryKey_1OpenSubKey_FUNC,
+	Registry_1ClassesRoot_FUNC,
+	RelativeSource_1AncestorType_FUNC,
+	RenderOptions_1GetBitmapScalingMode_FUNC,
+	RenderOptions_1SetBitmapScalingMode_FUNC,
+	RenderOptions_1SetEdgeMode_FUNC,
+	RenderTargetBitmap_1Render_FUNC,
+	RepeatBehavior_1Forever_FUNC,
+	ResourceDictionary_1Source_FUNC,
+	RoutedEventArgs_1Handled_FUNC,
+	RoutedEventArgs_1OriginalSource_FUNC,
+	RoutedEventArgs_1Source_FUNC,
+	RoutedEventArgs_1typeid_FUNC,
+	RoutedPropertyChangedEventArgs_1NewValue_FUNC,
+	RoutedPropertyChangedEventArgs_1OldValue_FUNC,
+	RowDefinitionCollection_1Add_FUNC,
+	RowDefinition_1Height_FUNC,
+	Run_1Text_FUNC,
+	SWTAnimator_1DoubleValueProperty_FUNC,
+	SWTAnimator_1IntValueProperty_FUNC,
+	SWTCanvas_1Visual__I_FUNC,
+	SWTCanvas_1Visual__II_FUNC,
+	SWTDockPanel_1JNIRefProperty_FUNC,
+	SWTDockPanel_1typeid_FUNC,
+	SWTTextRunProperties_1ForegroundBrush_FUNC,
+	SaveFileDialog_1OverwritePrompt_FUNC,
+	Screen_1AllScreens_FUNC,
+	Screen_1Bounds_FUNC,
+	Screen_1PrimaryScreen_FUNC,
+	Screen_1WorkingArea_FUNC,
+	ScrollBar_1Orientation__I_FUNC,
+	ScrollBar_1Orientation__II_FUNC,
+	ScrollBar_1Scroll_FUNC,
+	ScrollBar_1ViewportSize__I_FUNC,
+	ScrollBar_1ViewportSize__ID_FUNC,
+	ScrollBar_1typeid_FUNC,
+	ScrollEventArgs_1ScrollEventType_FUNC,
+	ScrollViewer_1ScrollToVerticalOffset_FUNC,
+	ScrollViewer_1SetHorizontalScrollBarVisibility_FUNC,
+	ScrollViewer_1SetVerticalScrollBarVisibility_FUNC,
+	ScrollViewer_1VerticalOffset_FUNC,
+	ScrollViewer_1typeid_FUNC,
+	SelectionChangedEventArgs_1AddedItems_FUNC,
+	SelectionChangedEventArgs_1RemovedItems_FUNC,
+	Selector_1IsSynchronizedWithCurrentItem_FUNC,
+	Selector_1SelectedIndex__I_FUNC,
+	Selector_1SelectedIndex__II_FUNC,
+	Selector_1SelectedItem_FUNC,
+	Selector_1SelectedValue_FUNC,
+	Selector_1SelectionChanged_FUNC,
+	SetterBaseCollection_1Add_FUNC,
+	Shape_1Fill_FUNC,
+	Shape_1Stroke_FUNC,
+	Shape_1StrokeThickness_FUNC,
+	SizeChangedEventArgs_1NewSize_FUNC,
+	SizeChangedEventArgs_1PreviousSize_FUNC,
+	Size_1Height__I_FUNC,
+	Size_1Height__ID_FUNC,
+	Size_1Width__I_FUNC,
+	Size_1Width__ID_FUNC,
+	Slider_1Orientation_FUNC,
+	Slider_1TickFrequency_FUNC,
+	Slider_1TickPlacement_FUNC,
+	SplineDoubleKeyFrame_1KeySpline_FUNC,
+	SplineInt32KeyFrame_1KeySpline_FUNC,
+	StackPanel_1Orientation_FUNC,
+	StackPanel_1OrientationProperty_FUNC,
+	StackPanel_1typeid_FUNC,
+	Storyboard_1Begin_FUNC,
+	Storyboard_1Pause_FUNC,
+	Storyboard_1Resume_FUNC,
+	Storyboard_1SetTargetName_FUNC,
+	Storyboard_1SetTargetProperty_FUNC,
+	Storyboard_1Stop_FUNC,
+	StreamGeometryContext_1BeginFigure_FUNC,
+	StreamGeometryContext_1Close_FUNC,
+	StreamGeometryContext_1LineTo_FUNC,
+	StreamGeometry_1Open_FUNC,
+	String_1Length_FUNC,
+	String_1ToCharArray_FUNC,
+	String_1typeid_FUNC,
+	Style_1Setters_FUNC,
+	SystemColors_1ActiveBorderBrush_FUNC,
+	SystemColors_1ActiveBorderColor_FUNC,
+	SystemColors_1ActiveCaptionColor_FUNC,
+	SystemColors_1ActiveCaptionTextColor_FUNC,
+	SystemColors_1ControlBrush_FUNC,
+	SystemColors_1ControlColor_FUNC,
+	SystemColors_1ControlDarkColor_FUNC,
+	SystemColors_1ControlDarkDarkColor_FUNC,
+	SystemColors_1ControlLightColor_FUNC,
+	SystemColors_1ControlLightLightColor_FUNC,
+	SystemColors_1ControlTextBrush_FUNC,
+	SystemColors_1ControlTextColor_FUNC,
+	SystemColors_1GradientActiveCaptionColor_FUNC,
+	SystemColors_1GradientInactiveCaptionColor_FUNC,
+	SystemColors_1HighlightBrush_FUNC,
+	SystemColors_1HighlightColor_FUNC,
+	SystemColors_1HighlightTextColor_FUNC,
+	SystemColors_1InactiveCaptionColor_FUNC,
+	SystemColors_1InactiveCaptionTextColor_FUNC,
+	SystemColors_1InfoColor_FUNC,
+	SystemColors_1InfoTextColor_FUNC,
+	SystemColors_1WindowColor_FUNC,
+	SystemColors_1WindowTextColor_FUNC,
+	SystemFonts_1MessageFontFamily_FUNC,
+	SystemFonts_1MessageFontSize_FUNC,
+	SystemFonts_1MessageFontStyle_FUNC,
+	SystemFonts_1MessageFontWeight_FUNC,
+	SystemParameters_1HighContrast_FUNC,
+	SystemParameters_1HorizontalScrollBarButtonWidth_FUNC,
+	SystemParameters_1HorizontalScrollBarHeight_FUNC,
+	SystemParameters_1MinimumHorizontalDragDistance_FUNC,
+	SystemParameters_1MinimumVerticalDragDistance_FUNC,
+	SystemParameters_1PrimaryScreenHeight_FUNC,
+	SystemParameters_1PrimaryScreenWidth_FUNC,
+	SystemParameters_1ThinHorizontalBorderHeight_FUNC,
+	SystemParameters_1ThinVerticalBorderWidth_FUNC,
+	SystemParameters_1VerticalScrollBarButtonHeight_FUNC,
+	SystemParameters_1VerticalScrollBarWidth_FUNC,
+	SystemParameters_1VirtualScreenHeight_FUNC,
+	SystemParameters_1VirtualScreenLeft_FUNC,
+	SystemParameters_1VirtualScreenTop_FUNC,
+	SystemParameters_1VirtualScreenWidth_FUNC,
+	SystemParameters_1WheelScrollLines_FUNC,
+	SystemParameters_1WorkArea_FUNC,
+	TabControl_1TabStripPlacement_FUNC,
+	TabItem_1IsSelected_FUNC,
+	TextBlock_1Background_FUNC,
+	TextBlock_1BackgroundProperty_FUNC,
+	TextBlock_1FontFamily_FUNC,
+	TextBlock_1FontFamilyProperty_FUNC,
+	TextBlock_1FontSize_FUNC,
+	TextBlock_1FontSizeProperty_FUNC,
+	TextBlock_1FontStretch_FUNC,
+	TextBlock_1FontStretchProperty_FUNC,
+	TextBlock_1FontStyle_FUNC,
+	TextBlock_1FontStyleProperty_FUNC,
+	TextBlock_1FontWeight_FUNC,
+	TextBlock_1FontWeightProperty_FUNC,
+	TextBlock_1Foreground_FUNC,
+	TextBlock_1ForegroundProperty_FUNC,
+	TextBlock_1Inlines_FUNC,
+	TextBlock_1Text__I_FUNC,
+	TextBlock_1Text__II_FUNC,
+	TextBlock_1TextProperty_FUNC,
+	TextBlock_1typeid_FUNC,
+	TextBoundsCollection_1Current_FUNC,
+	TextBoundsCollection_1GetEnumerator_FUNC,
+	TextBounds_1Rectangle_FUNC,
+	TextBoxBase_1AcceptsReturn_FUNC,
+	TextBoxBase_1AcceptsTab_FUNC,
+	TextBoxBase_1AppendText_FUNC,
+	TextBoxBase_1Copy_FUNC,
+	TextBoxBase_1Cut_FUNC,
+	TextBoxBase_1HorizontalScrollBarVisibility_FUNC,
+	TextBoxBase_1IsReadOnly__I_FUNC,
+	TextBoxBase_1IsReadOnly__IZ_FUNC,
+	TextBoxBase_1Paste_FUNC,
+	TextBoxBase_1ScrollToEnd_FUNC,
+	TextBoxBase_1ScrollToVerticalOffset_FUNC,
+	TextBoxBase_1SelectAll_FUNC,
+	TextBoxBase_1TextChanged_FUNC,
+	TextBoxBase_1VerticalOffset_FUNC,
+	TextBoxBase_1VerticalScrollBarVisibility_FUNC,
+	TextBox_1CaretIndex__I_FUNC,
+	TextBox_1CaretIndex__II_FUNC,
+	TextBox_1GetFirstVisibleLineIndex_FUNC,
+	TextBox_1GetLineIndexFromCharacterIndex_FUNC,
+	TextBox_1GetRectFromCharacterIndex_FUNC,
+	TextBox_1LineCount_FUNC,
+	TextBox_1MaxLength__I_FUNC,
+	TextBox_1MaxLength__II_FUNC,
+	TextBox_1ScrollToLine_FUNC,
+	TextBox_1Select_FUNC,
+	TextBox_1SelectedText__I_FUNC,
+	TextBox_1SelectedText__II_FUNC,
+	TextBox_1SelectionLength__I_FUNC,
+	TextBox_1SelectionLength__II_FUNC,
+	TextBox_1SelectionStart__I_FUNC,
+	TextBox_1SelectionStart__II_FUNC,
+	TextBox_1Text__I_FUNC,
+	TextBox_1Text__II_FUNC,
+	TextBox_1TextWrapping_FUNC,
+	TextCompositionEventArgs_1ControlText_FUNC,
+	TextCompositionEventArgs_1Handled_FUNC,
+	TextCompositionEventArgs_1SystemText_FUNC,
+	TextCompositionEventArgs_1Text_FUNC,
+	TextDecorationCollection_1Add_FUNC,
+	TextDecorations_1Strikethrough_FUNC,
+	TextDecorations_1Underline_FUNC,
+	TextFormatter_1Create_FUNC,
+	TextFormatter_1FormatLine_FUNC,
+	TextLine_1Baseline_FUNC,
+	TextLine_1Draw_FUNC,
+	TextLine_1GetCharacterHitFromDistance_FUNC,
+	TextLine_1GetDistanceFromCharacterHit_FUNC,
+	TextLine_1GetIndexedGlyphRuns_FUNC,
+	TextLine_1GetNextCaretCharacterHit_FUNC,
+	TextLine_1GetPreviousCaretCharacterHit_FUNC,
+	TextLine_1GetTextBounds_FUNC,
+	TextLine_1GetTextLineBreak_FUNC,
+	TextLine_1Height_FUNC,
+	TextLine_1Length_FUNC,
+	TextLine_1NewlineLength_FUNC,
+	TextLine_1Start_FUNC,
+	TextLine_1Width_FUNC,
+	TextLine_1WidthIncludingTrailingWhitespace_FUNC,
+	TextTabPropertiesCollection_1Add_FUNC,
+	Thickness_1Bottom_FUNC,
+	Thickness_1Left_FUNC,
+	Thickness_1Right_FUNC,
+	Thickness_1Top_FUNC,
+	Thumb_1DragDeltaEvent_FUNC,
+	TileBrush_1AlignmentX_FUNC,
+	TileBrush_1AlignmentY_FUNC,
+	TileBrush_1Stretch_FUNC,
+	TileBrush_1TileMode_FUNC,
+	TileBrush_1Viewport_FUNC,
+	TileBrush_1ViewportUnits_FUNC,
+	TimeSpan_1FromMilliseconds_FUNC,
+	TimeSpan_1TotalMilliseconds_FUNC,
+	TimelineGroup_1Children_FUNC,
+	Timeline_1AccelerationRatio__I_FUNC,
+	Timeline_1AccelerationRatio__ID_FUNC,
+	Timeline_1AutoReverse_FUNC,
+	Timeline_1BeginTime__I_FUNC,
+	Timeline_1BeginTime__II_FUNC,
+	Timeline_1Completed_FUNC,
+	Timeline_1DecelerationRatio__I_FUNC,
+	Timeline_1DecelerationRatio__ID_FUNC,
+	Timeline_1Duration__I_FUNC,
+	Timeline_1Duration__II_FUNC,
+	Timeline_1RepeatBehavior_FUNC,
+	ToggleButton_1Checked_FUNC,
+	ToggleButton_1CheckedEvent_FUNC,
+	ToggleButton_1IndeterminateEvent_FUNC,
+	ToggleButton_1IsChecked__I_FUNC,
+	ToggleButton_1IsChecked__IZ_FUNC,
+	ToggleButton_1IsCheckedNullSetter_FUNC,
+	ToggleButton_1IsCheckedProperty_FUNC,
+	ToggleButton_1IsThreeStateProperty_FUNC,
+	ToggleButton_1Unchecked_FUNC,
+	ToggleButton_1UncheckedEvent_FUNC,
+	ToolBarTray_1Background_FUNC,
+	ToolBarTray_1IsLocked__I_FUNC,
+	ToolBarTray_1IsLocked__IZ_FUNC,
+	ToolBarTray_1Orientation_FUNC,
+	ToolBarTray_1ToolBars_FUNC,
+	ToolBar_1Band__I_FUNC,
+	ToolBar_1Band__II_FUNC,
+	ToolBar_1BandIndex__I_FUNC,
+	ToolBar_1BandIndex__II_FUNC,
+	ToolBar_1BandProperty_FUNC,
+	ToolBar_1ButtonStyleKey_FUNC,
+	ToolBar_1CheckBoxStyleKey_FUNC,
+	ToolBar_1HasOverflowItems_FUNC,
+	ToolBar_1RadioButtonStyleKey_FUNC,
+	ToolBar_1SeparatorStyleKey_FUNC,
+	ToolBar_1SetOverflowMode_FUNC,
+	ToolBar_1typeid_FUNC,
+	TransformCollection_1Add_FUNC,
+	TransformGroup_1Children_FUNC,
+	Transform_1Clone_FUNC,
+	TreeViewItem_1CollapsedEvent_FUNC,
+	TreeViewItem_1ExpandedEvent_FUNC,
+	TreeViewItem_1HeaderTemplate__I_FUNC,
+	TreeViewItem_1HeaderTemplate__II_FUNC,
+	TreeViewItem_1HeaderTemplateProperty_FUNC,
+	TreeViewItem_1IsExpanded__I_FUNC,
+	TreeViewItem_1IsExpanded__IZ_FUNC,
+	TreeViewItem_1IsSelected__I_FUNC,
+	TreeViewItem_1IsSelected__IZ_FUNC,
+	TreeViewItem_1typeid_FUNC,
+	TreeView_1SelectedItem_FUNC,
+	TreeView_1SelectedItemChanged_FUNC,
+	TreeView_1typeid_FUNC,
+	TypeConverter_1ConvertFromString_FUNC,
+	TypeConverter_1ConvertToString_FUNC,
+	TypeDescriptor_1GetConverter_FUNC,
+	TypeDescriptor_1GetProperties_FUNC,
+	Type_1FullName_FUNC,
+	Type_1GetMethod_FUNC,
+	Type_1GetProperty_FUNC,
+	Type_1GetType_FUNC,
+	Type_1IsInstanceOfType_FUNC,
+	TypefaceCollection_1Count_FUNC,
+	TypefaceCollection_1Current_FUNC,
+	TypefaceCollection_1GetEnumerator_FUNC,
+	Typeface_1FontFamily_FUNC,
+	Typeface_1Stretch_FUNC,
+	Typeface_1Style_FUNC,
+	Typeface_1Weight_FUNC,
+	UIElementCollection_1Add_FUNC,
+	UIElementCollection_1Clear_FUNC,
+	UIElementCollection_1Contains_FUNC,
+	UIElementCollection_1Count_FUNC,
+	UIElementCollection_1Current_FUNC,
+	UIElementCollection_1GetEnumerator_FUNC,
+	UIElementCollection_1IndexOf_FUNC,
+	UIElementCollection_1Insert_FUNC,
+	UIElementCollection_1Remove_FUNC,
+	UIElementCollection_1default_FUNC,
+	UIElement_1AddHandler_FUNC,
+	UIElement_1AllowDrop_FUNC,
+	UIElement_1BeginAnimation_FUNC,
+	UIElement_1BitmapEffect__I_FUNC,
+	UIElement_1BitmapEffect__II_FUNC,
+	UIElement_1CaptureMouse_FUNC,
+	UIElement_1Clip_FUNC,
+	UIElement_1ClipToBounds_FUNC,
+	UIElement_1ClipToBoundsProperty_FUNC,
+	UIElement_1DesiredSize_FUNC,
+	UIElement_1DragEnter_FUNC,
+	UIElement_1DragEnterEvent_FUNC,
+	UIElement_1DragLeave_FUNC,
+	UIElement_1DragLeaveEvent_FUNC,
+	UIElement_1DragOver_FUNC,
+	UIElement_1DragOverEvent_FUNC,
+	UIElement_1Drop_FUNC,
+	UIElement_1DropEvent_FUNC,
+	UIElement_1Focus_FUNC,
+	UIElement_1Focusable_FUNC,
+	UIElement_1GiveFeedback_FUNC,
+	UIElement_1GiveFeedbackEvent_FUNC,
+	UIElement_1InputHitTest_FUNC,
+	UIElement_1InvalidateVisual_FUNC,
+	UIElement_1IsEnabled__I_FUNC,
+	UIElement_1IsEnabled__IZ_FUNC,
+	UIElement_1IsFocused_FUNC,
+	UIElement_1IsHitTestVisible_FUNC,
+	UIElement_1IsKeyboardFocusWithin_FUNC,
+	UIElement_1IsKeyboardFocused_FUNC,
+	UIElement_1IsMeasureValid_FUNC,
+	UIElement_1IsMouseOver_FUNC,
+	UIElement_1IsVisible_FUNC,
+	UIElement_1KeyDown_FUNC,
+	UIElement_1KeyUp_FUNC,
+	UIElement_1LayoutUpdated_FUNC,
+	UIElement_1LostKeyboardFocus_FUNC,
+	UIElement_1Measure_FUNC,
+	UIElement_1MouseDown_FUNC,
+	UIElement_1MouseEnter_FUNC,
+	UIElement_1MouseLeave_FUNC,
+	UIElement_1MouseMove_FUNC,
+	UIElement_1MouseUp_FUNC,
+	UIElement_1MouseWheel_FUNC,
+	UIElement_1MoveFocus_FUNC,
+	UIElement_1Opacity__I_FUNC,
+	UIElement_1Opacity__ID_FUNC,
+	UIElement_1OpacityProperty_FUNC,
+	UIElement_1PreviewGotKeyboardFocus_FUNC,
+	UIElement_1PreviewKeyDown_FUNC,
+	UIElement_1PreviewKeyUp_FUNC,
+	UIElement_1PreviewLostKeyboardFocus_FUNC,
+	UIElement_1PreviewMouseDown_FUNC,
+	UIElement_1PreviewMouseMove_FUNC,
+	UIElement_1PreviewMouseUp_FUNC,
+	UIElement_1PreviewMouseWheel_FUNC,
+	UIElement_1PreviewTextInput_FUNC,
+	UIElement_1QueryContinueDrag_FUNC,
+	UIElement_1QueryContinueDragEvent_FUNC,
+	UIElement_1ReleaseMouseCapture_FUNC,
+	UIElement_1RemoveHandler_FUNC,
+	UIElement_1RenderSize_FUNC,
+	UIElement_1SnapsToDevicePixels_FUNC,
+	UIElement_1TextInput_FUNC,
+	UIElement_1TranslatePoint_FUNC,
+	UIElement_1UpdateLayout_FUNC,
+	UIElement_1Visibility__I_FUNC,
+	UIElement_1Visibility__IB_FUNC,
+	UIElement_1VisibilityProperty_FUNC,
+	VirtualizingStackPanel_1VerticalOffset_FUNC,
+	VisualTreeHelper_1GetChild_FUNC,
+	VisualTreeHelper_1GetChildrenCount_FUNC,
+	VisualTreeHelper_1GetParent_FUNC,
+	Visual_1IsAncestorOf_FUNC,
+	Visual_1IsDescendantOf_FUNC,
+	Visual_1PointFromScreen_FUNC,
+	Visual_1PointToScreen_FUNC,
+	WebBrowserDocumentCompletedEventArgs_1Url_FUNC,
+	WebBrowserNavigatedEventArgs_1Url_FUNC,
+	WebBrowserNavigatingEventArgs_1Url_FUNC,
+	WebBrowserProgressChangedEventArgs_1CurrentProgress_FUNC,
+	WebBrowserProgressChangedEventArgs_1MaximumProgress_FUNC,
+	WebBrowser_1CanGoBack_FUNC,
+	WebBrowser_1CanGoForward_FUNC,
+	WebBrowser_1Document_FUNC,
+	WebBrowser_1DocumentCompleted_FUNC,
+	WebBrowser_1DocumentText__I_FUNC,
+	WebBrowser_1DocumentText__II_FUNC,
+	WebBrowser_1DocumentTitle_FUNC,
+	WebBrowser_1DocumentTitleChanged_FUNC,
+	WebBrowser_1GoBack_FUNC,
+	WebBrowser_1GoForward_FUNC,
+	WebBrowser_1Navigate_FUNC,
+	WebBrowser_1Navigated_FUNC,
+	WebBrowser_1Navigating_FUNC,
+	WebBrowser_1ProgressChanged_FUNC,
+	WebBrowser_1ReadyState_FUNC,
+	WebBrowser_1Refresh_FUNC,
+	WebBrowser_1ScriptErrorsSuppressed_FUNC,
+	WebBrowser_1StatusText_FUNC,
+	WebBrowser_1StatusTextChanged_FUNC,
+	WebBrowser_1Stop_FUNC,
+	WebBrowser_1Url_FUNC,
+	WindowCollection_1Count_FUNC,
+	WindowCollection_1Current_FUNC,
+	WindowCollection_1GetEnumerator_FUNC,
+	Window_1Activate_FUNC,
+	Window_1Activated_FUNC,
+	Window_1AllowsTransparency_FUNC,
+	Window_1Close_FUNC,
+	Window_1Closing_FUNC,
+	Window_1Deactivated_FUNC,
+	Window_1GetWindow_FUNC,
+	Window_1Hide_FUNC,
+	Window_1Icon_FUNC,
+	Window_1IsActive_FUNC,
+	Window_1Left__I_FUNC,
+	Window_1Left__ID_FUNC,
+	Window_1LocationChanged_FUNC,
+	Window_1Owner_FUNC,
+	Window_1ResizeMode_FUNC,
+	Window_1Show_FUNC,
+	Window_1ShowInTaskbar_FUNC,
+	Window_1Title__I_FUNC,
+	Window_1Title__II_FUNC,
+	Window_1Top__I_FUNC,
+	Window_1Top__ID_FUNC,
+	Window_1WindowState__I_FUNC,
+	Window_1WindowState__II_FUNC,
+	Window_1WindowStyle__I_FUNC,
+	Window_1WindowStyle__II_FUNC,
+	WindowsFormsHost_1Child_FUNC,
+	WriteableBitmap_1WritePixels_FUNC,
+	XamlReader_1Load_FUNC,
+	XmlReader_1Create_FUNC,
+	gcnew_1AccessText_FUNC,
+	gcnew_1Application_FUNC,
+	gcnew_1ArcSegment_FUNC,
+	gcnew_1ArrayList_FUNC,
+	gcnew_1BevelBitmapEffect_FUNC,
+	gcnew_1BezierSegment_FUNC,
+	gcnew_1Binding_FUNC,
+	gcnew_1Bitmap_FUNC,
+	gcnew_1BitmapEffectGroup_FUNC,
+	gcnew_1BitmapImage_FUNC,
+	gcnew_1BitmapPalette_FUNC,
+	gcnew_1BlurBitmapEffect_FUNC,
+	gcnew_1Button_FUNC,
+	gcnew_1CancelEventHandler_FUNC,
+	gcnew_1Canvas_FUNC,
+	gcnew_1CharacterHit_FUNC,
+	gcnew_1CheckBox_FUNC,
+	gcnew_1ColorDialog_FUNC,
+	gcnew_1ColorList_FUNC,
+	gcnew_1ColumnDefinition_FUNC,
+	gcnew_1CombinedGeometry_FUNC,
+	gcnew_1ComboBox_FUNC,
+	gcnew_1ComboBoxItem_FUNC,
+	gcnew_1CompositeCollection_FUNC,
+	gcnew_1ContentControl_FUNC,
+	gcnew_1ContextMenu_FUNC,
+	gcnew_1ContextMenuEventHandler_FUNC,
+	gcnew_1ControlTemplate_FUNC,
+	gcnew_1CroppedBitmap_FUNC,
+	gcnew_1DashStyle_FUNC,
+	gcnew_1DataObject_FUNC,
+	gcnew_1DataTemplate_FUNC,
+	gcnew_1DiscreteDoubleKeyFrame___FUNC,
+	gcnew_1DiscreteDoubleKeyFrame__DI_FUNC,
+	gcnew_1DiscreteInt32KeyFrame_FUNC,
+	gcnew_1DispatcherFrame_FUNC,
+	gcnew_1DispatcherHookEventHandler_FUNC,
+	gcnew_1DispatcherTimer_FUNC,
+	gcnew_1DoubleAnimation_FUNC,
+	gcnew_1DoubleAnimationUsingKeyFrames_FUNC,
+	gcnew_1DoubleCollection_FUNC,
+	gcnew_1DragDeltaEventHandler_FUNC,
+	gcnew_1DragEventHandler_FUNC,
+	gcnew_1DrawingVisual_FUNC,
+	gcnew_1DropShadowBitmapEffect_FUNC,
+	gcnew_1Duration_FUNC,
+	gcnew_1EllipseGeometry_FUNC,
+	gcnew_1EventHandler_FUNC,
+	gcnew_1ExecutedRoutedEventHandler_FUNC,
+	gcnew_1Expander_FUNC,
+	gcnew_1FileInfo_FUNC,
+	gcnew_1FolderBrowserDialog_FUNC,
+	gcnew_1Font_FUNC,
+	gcnew_1FontDialog_FUNC,
+	gcnew_1FontFamily_FUNC,
+	gcnew_1FormatConvertedBitmap_FUNC,
+	gcnew_1FormattedText_FUNC,
+	gcnew_1FormsMouseEventHandler_FUNC,
+	gcnew_1Frame_FUNC,
+	gcnew_1FrameworkElementFactory__I_FUNC,
+	gcnew_1FrameworkElementFactory__II_FUNC,
+	gcnew_1GeometryGroup_FUNC,
+	gcnew_1GiveFeedbackEventHandler_FUNC,
+	gcnew_1Grid_FUNC,
+	gcnew_1GridLength_FUNC,
+	gcnew_1GridView_FUNC,
+	gcnew_1GridViewColumn_FUNC,
+	gcnew_1GridViewColumnCollection_FUNC,
+	gcnew_1GridViewColumnHeader_FUNC,
+	gcnew_1GroupBox_FUNC,
+	gcnew_1Hyperlink_FUNC,
+	gcnew_1Image_FUNC,
+	gcnew_1ImageBrush_FUNC,
+	gcnew_1Int32_FUNC,
+	gcnew_1Int32Animation_FUNC,
+	gcnew_1Int32AnimationUsingKeyFrames_FUNC,
+	gcnew_1Int32Rect_FUNC,
+	gcnew_1IntPtr_FUNC,
+	gcnew_1KeyEventHandler_FUNC,
+	gcnew_1KeySpline_FUNC,
+	gcnew_1KeyboardFocusChangedEventHandler_FUNC,
+	gcnew_1Label_FUNC,
+	gcnew_1LineSegment_FUNC,
+	gcnew_1LinearDoubleKeyFrame_FUNC,
+	gcnew_1LinearGradientBrush__IID_FUNC,
+	gcnew_1LinearGradientBrush__IIII_FUNC,
+	gcnew_1LinearInt32KeyFrame_FUNC,
+	gcnew_1ListBox_FUNC,
+	gcnew_1ListBoxItem_FUNC,
+	gcnew_1ListView_FUNC,
+	gcnew_1ListViewItem_FUNC,
+	gcnew_1Matrix_FUNC,
+	gcnew_1MatrixTransform_FUNC,
+	gcnew_1MemoryStream_FUNC,
+	gcnew_1Menu_FUNC,
+	gcnew_1MenuItem_FUNC,
+	gcnew_1MouseButtonEventHandler_FUNC,
+	gcnew_1MouseEventHandler_FUNC,
+	gcnew_1MouseWheelEventHandler_FUNC,
+	gcnew_1NameScope_FUNC,
+	gcnew_1NoArgsDelegate_FUNC,
+	gcnew_1NotifyIcon_FUNC,
+	gcnew_1OpenFileDialog_FUNC,
+	gcnew_1OuterGlowBitmapEffect_FUNC,
+	gcnew_1PasswordBox_FUNC,
+	gcnew_1Path_FUNC,
+	gcnew_1PathFigure_FUNC,
+	gcnew_1PathGeometry_FUNC,
+	gcnew_1Pen___FUNC,
+	gcnew_1Pen__ID_FUNC,
+	gcnew_1Point_FUNC,
+	gcnew_1PointCollection_FUNC,
+	gcnew_1PolyLineSegment_FUNC,
+	gcnew_1Popup_FUNC,
+	gcnew_1ProgressBar_FUNC,
+	gcnew_1PropertyPath_FUNC,
+	gcnew_1QuadraticBezierSegment_FUNC,
+	gcnew_1QueryContinueDragEventHandler_FUNC,
+	gcnew_1RadioButton_FUNC,
+	gcnew_1Rect_FUNC,
+	gcnew_1Rectangle_FUNC,
+	gcnew_1RectangleGeometry_FUNC,
+	gcnew_1RelativeSource_FUNC,
+	gcnew_1RenderTargetBitmap_FUNC,
+	gcnew_1RepeatBehavior_FUNC,
+	gcnew_1RepeatButton_FUNC,
+	gcnew_1ResourceDictionary_FUNC,
+	gcnew_1RoutedEventHandler_FUNC,
+	gcnew_1RoutedPropertyChangedEventHandler_FUNC,
+	gcnew_1RoutedPropertyChangedEventHandlerObject_FUNC,
+	gcnew_1RowDefinition_FUNC,
+	gcnew_1Run_FUNC,
+	gcnew_1SWTAnimation_FUNC,
+	gcnew_1SWTAnimator_FUNC,
+	gcnew_1SWTCanvas_FUNC,
+	gcnew_1SWTSafeHandle_FUNC,
+	gcnew_1SWTTextEmbeddedObject_FUNC,
+	gcnew_1SWTTextParagraphProperties_FUNC,
+	gcnew_1SWTTextRunProperties_FUNC,
+	gcnew_1SWTTextSource_FUNC,
+	gcnew_1SWTTreeView_FUNC,
+	gcnew_1SWTTreeViewRowPresenter_FUNC,
+	gcnew_1SaveFileDialog_FUNC,
+	gcnew_1ScaleTransform_FUNC,
+	gcnew_1ScrollBar_FUNC,
+	gcnew_1ScrollEventHandler_FUNC,
+	gcnew_1ScrollViewer_FUNC,
+	gcnew_1SelectionChangedEventHandler_FUNC,
+	gcnew_1Separator_FUNC,
+	gcnew_1Setter_FUNC,
+	gcnew_1SetterVisibility_FUNC,
+	gcnew_1Size___FUNC,
+	gcnew_1Size__DD_FUNC,
+	gcnew_1SizeChangedEventHandler_FUNC,
+	gcnew_1Slider_FUNC,
+	gcnew_1SolidColorBrush_FUNC,
+	gcnew_1SplineDoubleKeyFrame_FUNC,
+	gcnew_1SplineInt32KeyFrame_FUNC,
+	gcnew_1StackPanel_FUNC,
+	gcnew_1Storyboard_FUNC,
+	gcnew_1StreamGeometry_FUNC,
+	gcnew_1String___3C_FUNC,
+	gcnew_1String___3CII_FUNC,
+	gcnew_1StringReader_FUNC,
+	gcnew_1Style_FUNC,
+	gcnew_1TabControl_FUNC,
+	gcnew_1TabItem_FUNC,
+	gcnew_1TemplateBindingExtension_FUNC,
+	gcnew_1TextBlock_FUNC,
+	gcnew_1TextBox_FUNC,
+	gcnew_1TextChangedEventHandler_FUNC,
+	gcnew_1TextCharacters_FUNC,
+	gcnew_1TextCompositionEventHandler_FUNC,
+	gcnew_1TextDecoration_FUNC,
+	gcnew_1TextDecorationCollection_FUNC,
+	gcnew_1TextEndOfLine_FUNC,
+	gcnew_1TextEndOfParagraph_FUNC,
+	gcnew_1TextTabProperties_FUNC,
+	gcnew_1TextTabPropertiesCollection_FUNC,
+	gcnew_1Thickness_FUNC,
+	gcnew_1TiffBitmapEncoder_FUNC,
+	gcnew_1TimeSpan_FUNC,
+	gcnew_1TimerHandler_FUNC,
+	gcnew_1ToggleButton_FUNC,
+	gcnew_1ToolBar_FUNC,
+	gcnew_1ToolBarTray_FUNC,
+	gcnew_1TransformGroup_FUNC,
+	gcnew_1TranslateTransform_FUNC,
+	gcnew_1TraversalRequest_FUNC,
+	gcnew_1TreeView_FUNC,
+	gcnew_1TreeViewItem_FUNC,
+	gcnew_1Typeface_FUNC,
+	gcnew_1Uri_FUNC,
+	gcnew_1UserControl_FUNC,
+	gcnew_1WebBrowser_FUNC,
+	gcnew_1WebBrowserDocumentCompletedEventHandler_FUNC,
+	gcnew_1WebBrowserNavigatedEventHandler_FUNC,
+	gcnew_1WebBrowserNavigatingEventHandler_FUNC,
+	gcnew_1WebBrowserProgressChangedEventHandler_FUNC,
+	gcnew_1Window_FUNC,
+	gcnew_1WindowsFormsHost_FUNC,
+	gcnew_1WriteableBitmap__I_FUNC,
+	gcnew_1WriteableBitmap__IIDDII_FUNC,
+	memcpy__I_3BI_FUNC,
+	memcpy___3BII_FUNC,
+	memcpy___3CII_FUNC,
+} OS_FUNCS;
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os_structs.cpp b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os_structs.cpp
new file mode 100644
index 0000000..40e774b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os_structs.cpp
@@ -0,0 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "os_structs.h"
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os_structs.h b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os_structs.h
new file mode 100644
index 0000000..d06414e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/library/os_structs.h
@@ -0,0 +1,13 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#include "os.h"
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/org/eclipse/swt/internal/Platform.java b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/org/eclipse/swt/internal/Platform.java
new file mode 100644
index 0000000..af0286f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/org/eclipse/swt/internal/Platform.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.internal;
+
+public class Platform {
+	
+public static final String PLATFORM = "wpf";
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/org/eclipse/swt/internal/wpf/OS.java b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/org/eclipse/swt/internal/wpf/OS.java
new file mode 100644
index 0000000..383ad11
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf/org/eclipse/swt/internal/wpf/OS.java
@@ -0,0 +1,6749 @@
+/*******************************************************************************
+ * 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.internal.wpf;
+
+
+import org.eclipse.swt.internal.*;
+
+/** @jniclass flags=cpp */
+public class OS extends C {
+	
+	/** Constants */
+	public static final int BindingFlags_Instance = 4;
+	public static final int BindingFlags_NonPublic = 32;
+	
+	public static final int DragAction_Cancel = 2;
+	public static final int DragAction_Continue = 0;
+	public static final int DragAction_Drop = 1;
+
+	public static final int DragDropEffects_Copy = 1;
+	public static final int DragDropEffects_Link = 4;
+	public static final int DragDropEffects_Move = 2;
+	public static final int DragDropEffects_None = 0;
+
+	public static final int DragDropKeyStates_AltKey = 32;
+	public static final int DragDropKeyStates_ControlKey = 8;
+	public static final int DragDropKeyStates_None = 0;
+	public static final int DragDropKeyStates_ShiftKey = 4;
+
+	public static final int FontStyle_Bold = 1;
+	public static final int FontStyle_Italic = 2;
+	public static final int FontStyle_Regular = 0;
+	public static final int FontStyle_Strikeout = 8;
+	public static final int FontStyle_Underline = 4;
+
+	public static final int Key_LeftAlt = 120;
+	public static final int Key_RightAlt = 121;
+	public static final int Key_LeftCtrl = 118;
+	public static final int Key_RightCtrl = 119;
+	public static final int Key_LeftShift = 116;
+	public static final int Key_RightShift = 117;
+	public static final int Key_Left = 23;
+	public static final int Key_Up = 24;
+	public static final int Key_Right = 25;
+	public static final int Key_Down = 26;
+	public static final int Key_PageUp = 19;
+	public static final int Key_PageDown = 20;
+	public static final int Key_End = 21;
+	public static final int Key_Home = 22;
+	public static final int Key_Insert = 31;
+	public static final int Key_ImeProcessed = 155;
+	public static final int Key_F1 = 90;
+	public static final int Key_F2 = 91;
+	public static final int Key_F3 = 92;
+	public static final int Key_F4 = 93;
+	public static final int Key_F5 = 94;
+	public static final int Key_F6 = 95;
+	public static final int Key_F7 = 96;
+	public static final int Key_F8 = 97;
+	public static final int Key_F9 = 98;
+	public static final int Key_F10 = 99;
+	public static final int Key_F11 = 100;
+	public static final int Key_F12 = 101;
+	public static final int Key_F13 = 102;
+	public static final int Key_F14 = 103;
+	public static final int Key_F15 = 104;
+	public static final int Key_Back = 2;
+	public static final int Key_Return = 6;
+	public static final int Key_Delete = 32;
+	public static final int Key_Escape = 13;
+	public static final int Key_Tab = 3;
+	public static final int Key_LineFeed = 4;
+	public static final int Key_NumPad0 = 74;
+	public static final int Key_NumPad1 = 75;
+	public static final int Key_NumPad2 = 76;
+	public static final int Key_NumPad3 = 77;
+	public static final int Key_NumPad4 = 78;
+	public static final int Key_NumPad5 = 79;
+	public static final int Key_NumPad6 = 80;
+	public static final int Key_NumPad7 = 81;
+	public static final int Key_NumPad8 = 82;
+	public static final int Key_NumPad9 = 83;
+	public static final int Key_Multiply = 84;
+	public static final int Key_Add = 85;
+	public static final int Key_Separator = 86;
+	public static final int Key_Subtract = 87;
+	public static final int Key_System = 156;
+	public static final int Key_Decimal = 88;
+	public static final int Key_Divide = 89;
+	public static final int Key_CapsLock = 8;
+	public static final int Key_PrintScreen = 30;
+	public static final int Key_Pause = 7;
+	public static final int Key_Cancel = 1;
+	public static final int Key_NumLock = 114;
+	public static final int Key_Scroll = 115;
+	public static final int Key_D0 = 34;
+	public static final int Key_D1 = 35;
+	public static final int Key_D2 = 36;
+	public static final int Key_D3 = 37;
+	public static final int Key_D4 = 38;
+	public static final int Key_D5 = 39;
+	public static final int Key_D6 = 40;
+	public static final int Key_D7 = 41;
+	public static final int Key_D8 = 42;
+	public static final int Key_D9 = 43;
+	public static final int Key_A = 44;
+	public static final int Key_B = 45;
+	public static final int Key_C = 46;
+	public static final int Key_D = 47;
+	public static final int Key_E = 48;
+	public static final int Key_F = 49;
+	public static final int Key_G = 50;
+	public static final int Key_H = 51;
+	public static final int Key_I = 52;
+	public static final int Key_J = 53;
+	public static final int Key_K = 54;
+	public static final int Key_L = 55;
+	public static final int Key_M = 56;
+	public static final int Key_N = 57;
+	public static final int Key_O = 58;
+	public static final int Key_P = 59;
+	public static final int Key_Q = 60;
+	public static final int Key_R = 61;
+	public static final int Key_S = 62;
+	public static final int Key_T = 63;
+	public static final int Key_U = 64;
+	public static final int Key_V = 65;
+	public static final int Key_W = 66;
+	public static final int Key_X = 67;
+	public static final int Key_Y = 68;
+	public static final int Key_Z = 69;
+	public static final int Key_OemTilde = 146;
+	public static final int Key_Oem2 = 145;
+	public static final int Key_Oem4 = 149;
+	public static final int Key_Oem6 = 151;
+	public static final int Key_Oem7 = 152;
+	public static final int Key_OemPipe = 150;
+	public static final int Key_OemMinus = 143;
+	public static final int Key_OemPlus = 141;
+	public static final int Key_OemSemicolon = 140;
+	public static final int Key_OemComma = 142;
+	public static final int Key_OemPeriod = 144;
+	
+	public static final byte Visibility_Visible = 0;
+	public static final byte Visibility_Hidden = 1;
+	public static final byte Visibility_Collapsed = 2;
+	
+	public static final int GridUnitType_Auto = 0;
+	public static final int GridUnitType_Pixel = 1;
+	public static final int GridUnitType_Star = 2;
+	
+	public static final int Orientation_Horizontal = 0; 
+	public static final int Orientation_Vertical = 1;
+	
+	public static final int OverflowMode_Never = 2;
+	
+	public static final int NavigationUIVisibility_Hidden = 2;
+	
+	public static final int ScrollEventType_EndScroll = 0;
+	public static final int ScrollEventType_First = 1;
+	public static final int ScrollEventType_LargeDecrement = 2;
+	public static final int ScrollEventType_LargeIncrement = 3;
+	public static final int ScrollEventType_Last = 4;
+	public static final int ScrollEventType_SmallDecrement = 5;
+	public static final int ScrollEventType_SmallIncrement = 6;
+	public static final int ScrollEventType_ThumbPosition = 7;
+	public static final int ScrollEventType_ThumbTrack = 8;
+	
+	public static final int ShutdownMode_OnExplicitShutdown = 2;
+	
+	public static final int HorizontalAlignment_Left = 0;
+	public static final int HorizontalAlignment_Center = 1;
+	public static final int HorizontalAlignment_Right = 2;
+	public static final int HorizontalAlignment_Stretch = 3;
+	
+	public static final int VerticalAlignment_Top = 0;
+	public static final int VerticalAlignment_Center = 1;
+	public static final int VerticalAlignment_Bottom = 2;
+	public static final int VerticalAlignment_Stretch = 3;
+	
+	public static final int UriKind_RelativeOrAbsolute = 0;
+	public static final int UriKind_Absolute = 1;
+	public static final int UriKind_Relative = 2;
+	
+	public static final int Stretch_None = 0;
+	public static final int Stretch_Fill = 1;
+	public static final int Stretch_Uniform = 2;
+	public static final int Stretch_UniformToFill = 3;
+	
+	public static final int PenLineCap_Flat = 0;
+	public static final int PenLineCap_Round = 1;
+	public static final int PenLineCap_Square = 2;
+	
+	public static final int PenLineJoin_Miter = 0;
+	public static final int PenLineJoin_Bevel = 1;
+	public static final int PenLineJoin_Round = 2;
+	
+	public static final int SweepDirection_Clockwise = 0;
+	public static final int SweepDirection_CounterClockwise = 1;
+	
+	public static final int FillRule_EvenOdd = 0;
+	public static final int FillRule_Nonzero = 1;
+	
+	public static final int BitmapScalingMode_Unspecified = 0;
+	public static final int BitmapScalingMode_LowQuality = 1;
+	public static final int BitmapScalingMode_HighQuality = 2;
+
+	public static final int EdgeMode_Unspecified = 0;
+	public static final int EdgeMode_Aliased = 1;
+	
+	public static final int FlowDirection_LeftToRight = 0;
+	public static final int FlowDirection_RightToLeft = 1;
+
+	public static final int TileMode_Tile = 4;
+	
+	public static final int AlignmentX_Left = 0;
+	public static final int AlignmentX_Center = 1;
+	public static final int AlignmentX_Right = 2;
+	public static final int AlignmentY_Top = 0;
+	public static final int AlignmentY_Center = 1;
+	public static final int Alignmenty_Bottom = 2;
+	
+	public static final int BrushMappingMode_Absolute = 0;
+	public static final int BrushMappingMode_RelativeToBoundingBox = 1;
+
+	public static final int GradientSpreadMethod_Pad = 0;
+	public static final int GradientSpreadMethod_Reflect = 1;
+	public static final int GradientSpreadMethod_Repeat = 2;
+	
+	public static final int GeometryCombineMode_Union = 0;
+	public static final int GeometryCombineMode_Intersect = 1;
+	public static final int GeometryCombineMode_Xor = 2;
+	public static final int GeometryCombineMode_Exclude = 3;
+	
+	public static final int TextAlignment_Left = 0;
+	public static final int TextAlignment_Right = 1;
+	public static final int TextAlignment_Center = 2;
+	public static final int TextAlignment_Justify = 3;
+	
+	public static final int BaselineAlignment_Baseline = 3;
+	
+	public static final int TextWrapping_WrapWithOverflow = 0;
+	public static final int TextWrapping_NoWrap = 1;
+	public static final int TextWrapping_Wrap = 2;
+		
+	public static final int IntersectionDetail_Empty = 1;
+	
+	public static final int TextTabAlignment_Left = 0;
+	
+	public static final int MouseButtonState_Released = 0;
+	public static final int MouseButtonState_Pressed = 1;
+	
+	public static final int MouseButton_Left = 0;
+	public static final int MouseButton_Middle = 1;
+	public static final int MouseButton_Right = 2;
+	public static final int MouseButton_XButton1 = 3;
+	public static final int MouseButton_XButton2 = 4;
+	
+	public static final int MouseButtons_None = 0;
+	public static final int MouseButtons_Left = 1048576;
+	public static final int MouseButtons_Right = 2097152;
+	public static final int MouseButtons_Middle = 4194304;
+	public static final int MouseButtons_XButton1 = 8388608;
+	public static final int MouseButtons_XButton2 = 16777216;
+	
+	public static final int ModifierKeys_Alt = 1;
+	public static final int ModifierKeys_Control = 2;
+	public static final int ModifierKeys_Shift = 4;
+	
+	public static final int ResizeMode_NoResize = 0;
+	public static final int ResizeMode_CanMinimize = 1;
+	public static final int ResizeMode_CanResize = 2;
+	public static final int ResizeMode_CanResizeWithGrip = 3;
+	
+	public static final int WindowStyle_None = 0;
+	public static final int WindowStyle_SingleBorderWindow = 1;
+	public static final int WindowStyle_ThreeDBorderWindow = 2;
+	public static final int WindowStyle_ToolWindow = 3;
+	
+
+	public static final int WebBrowserReadyState_Uninitialized = 0;
+	public static final int WebBrowserReadyState_Loading = 1;
+	public static final int WebBrowserReadyState_Loaded = 2;
+	public static final int WebBrowserReadyState_Interactive = 3;
+	public static final int WebBrowserReadyState_Complete = 4;
+	
+	public static final int Dock_Top = 1;
+	public static final int Dock_Bottom = 3;
+
+	public static final int SelectionMode_Single = 0;
+	public static final int SelectionMode_Multiple = 1;
+	public static final int SelectionMode_Extended = 2;
+	
+	public static final int TickPlacement_None = 0;
+    public static final int TickPlacement_TopLeft = 1;
+    public static final int TickPlacement_BottomRight = 2;
+	public static final int TickPlacement_Both = 3;
+
+	public static final int WindowState_Normal = 0;
+    public static final int WindowState_Minimized = 1;
+    public static final int WindowState_Maximized = 2;
+    
+    public static final int BitmapCreateOptions_None = 0;
+    public static final int BitmapCreateOptions_PreservePixelFormat = 1;
+    public static final int BitmapCacheOption_Default = 0;
+    
+    public static final int MessageBoxButton_OK = 0;
+    public static final int MessageBoxButton_OKCancel = 1;
+    public static final int MessageBoxButton_YesNoCancel = 3;
+    public static final int MessageBoxButton_YesNo = 4;
+    
+    public static final int MessageBoxImage_None = 0;
+    public static final int MessageBoxImage_Error = 16;
+    public static final int MessageBoxImage_Hand = 16;
+    public static final int MessageBoxImage_Stop = 16;
+    public static final int MessageBoxImage_Question = 32;
+    public static final int MessageBoxImage_Exclamation = 48;
+    public static final int MessageBoxImage_Warning = 48;
+    public static final int MessageBoxImage_Information = 64;
+    public static final int MessageBoxImage_Asterisk = 64;
+    
+    public static final int MessageBoxResult_None = 0;
+    public static final int MessageBoxResult_OK = 1;
+    public static final int MessageBoxResult_Cancel = 2;
+    public static final int MessageBoxResult_Yes = 6;
+    public static final int MessageBoxResult_No = 7;
+    
+    public static final int KeyboardNavigationMode_None = 3;
+    
+    public static final int PlacementMode_AbsolutePoint = 5;
+    public static final int PlacementMode_MousePoint = 8;
+    
+    public static final int DispatcherPriority_Inactive = 0;
+    public static final int DispatcherPriority_Normal = 9;
+    public static final int DispatcherPriority_Send = 10;
+    
+    public static final int ScrollBarVisibility_Disabled = 0;
+    public static final int ScrollBarVisibility_Auto = 1;
+    public static final int ScrollBarVisibility_Hidden = 2;
+    public static final int ScrollBarVisibility_Visible = 3;
+ 
+ 	public static final int FocusNavigationDirection_Next = 0;
+	public static final int FocusNavigationDirection_Previous = 1;
+	public static final int FocusNavigationDirection_First = 2;
+	public static final int FocusNavigationDirection_Last = 3;
+	
+	public static final int RelativeSourceMode_FindAncestor = 3;
+
+	public static final int DialogResult_OK = 1;
+	
+	public static final int TextDecorationUnit_FontRecommended = 0;
+	public static final int TextDecorationLocation_Underline = 0;
+	public static final int TextDecorationLocation_Strikethrough = 2;
+	
+	public static final int ToleranceType_Absolute = 0;
+	
+
+	/*
+	* Note that these GCHandles are leaked.
+	*/
+	public static final int FontStyles_Italic = FontStyles_Italic();
+	public static final int FontStyles_Normal = FontStyles_Normal();	
+	public static final int FontStyles_Oblique = FontStyles_Oblique();	
+	public static final int FontWeights_Bold = FontWeights_Bold();
+	public static final int FontWeights_Normal = FontWeights_Normal();	
+	public static final int FontStretches_Normal = FontStretches_Normal();
+	public static final int Colors_White = Colors_White();
+	public static final int Colors_Black = Colors_Black();
+	public static final int Colors_Transparent = Colors_Transparent();
+	public static final int SystemColors_ControlColor = SystemColors_ControlColor();
+	
+/** Handlers */
+
+/** @method flags=no_gen */
+public static final native int gcnew_CancelEventHandler(int jniRef, String string);
+/** @method flags=gcnew no_gen */
+public static final native int gcnew_ContextMenuEventHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_RoutedPropertyChangedEventHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_RoutedPropertyChangedEventHandlerObject(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_RoutedEventHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_DragDeltaEventHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_EventHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_ExecutedRoutedEventHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_FormsMouseEventHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_DispatcherHookEventHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_SelectionChangedEventHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_SizeChangedEventHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_ScrollEventHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_KeyEventHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_KeyboardFocusChangedEventHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_TextChangedEventHandler(int jniRef, String string);
+/** @method flags=no_gen gcnew */
+public static final native int gcnew_TextCompositionEventHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_TimerHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_MouseEventHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_MouseButtonEventHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_MouseWheelEventHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_NoArgsDelegate(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_GiveFeedbackEventHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_QueryContinueDragEventHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_DragEventHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_WebBrowserNavigatingEventHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_WebBrowserNavigatedEventHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_WebBrowserProgressChangedEventHandler(int jniRef, String string);
+/** @method flags=no_gen */
+public static final native int gcnew_WebBrowserDocumentCompletedEventHandler(int jniRef, String string);
+
+/** JNI natives */
+
+/** @method flags=jni */
+public static final native int NewGlobalRef(Object object);
+/**
+ * @method flags=jni
+ * @param globalRef cast=(jobject)
+ */
+public static final native void DeleteGlobalRef(int globalRef);
+/** @method flags=no_gen */
+public static final native Object JNIGetObject(int globalRef);
+
+/** Natives */
+
+/**
+ * @method flags=getter
+ * @param sender cast=(AccessText^),flags=gcobject
+ */
+public static final native char AccessText_AccessKey(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(AccessText^),flags=gcobject
+ * @param value cast=(String^),flags=gcobject
+ */
+public static final native void AccessText_Text(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(AccessText^),flags=gcobject
+ * @param value cast=(TextWrapping)
+ */
+public static final native void AccessText_TextWrapping(int sender, int value);
+/** @method accessor=ApplicationCommands::Cut,flags=const gcobject */
+public static final native int ApplicationCommands_Cut();
+/** @method accessor=ApplicationCommands::Paste,flags=const gcobject */
+public static final native int ApplicationCommands_Paste();
+/** @method accessor=ApplicationCommands::Redo,flags=const gcobject */
+public static final native int ApplicationCommands_Redo();
+/** @method accessor=ApplicationCommands::Undo,flags=const gcobject */
+public static final native int ApplicationCommands_Undo();
+/** @method accessor=Application::Current,flags=const gcobject */
+public static final native int Application_Current();
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Application ^),flags=gcobject
+ */
+public static final native int Application_Dispatcher(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Application^),flags=gcobject
+ */
+public static final native int Application_Resources(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Application^),flags=gcobject
+ * @param value cast=(ResourceDictionary^),flags=gcobject
+ */
+public static final native void Application_Resources(int sender, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Application^),flags=gcobject
+ */
+public static final native void Application_Run(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Application^),flags=gcobject
+ */
+public static final native void Application_Shutdown(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Application^),flags=gcobject
+ * @param value cast=(ShutdownMode)
+ */
+public static final native void Application_ShutdownMode(int sender, int value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Application^),flags=gcobject
+ */
+public static final native int Application_Windows(int sender);
+/**
+ * @method accessor=Array::CreateInstance,flags=gcobject
+ * @param elementType cast=(Type^),flags=gcobject
+ */
+public static final native int Array_CreateInstance(int elementType, int length);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Array^),flags=gcobject
+ */
+public static final native int Array_GetLength(int sender, int dimension);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(Array^),flags=gcobject
+ */
+public static final native int Array_GetValue (int sender, int index);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Array^),flags=gcobject
+ * @param value cast=(Object^),flags=gcobject
+ */
+public static final native void Array_SetValue (int sender, int value, int index);
+/**
+ * @method flags=cpp
+ * @param sender cast=(ArrayList^),flags=gcobject
+ */
+public static final native void ArrayList_Clear(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(ArrayList^),flags=gcobject
+ */
+public static final native int ArrayList_Count(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(ArrayList^),flags=gcobject
+ */
+public static final native int ArrayList_default(int sender, int index);
+/**
+ * @method flags=setter
+ * @param sender cast=(ArrayList^),flags=gcobject
+ * @param value cast=(Object^),flags=gcobject
+ */
+public static final native void ArrayList_default(int sender, int index, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(ArrayList^),flags=gcobject
+ * @param value cast=(Object^),flags=gcobject
+ */
+public static final native void ArrayList_Insert(int sender, int index, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(ArrayList^),flags=gcobject
+ */
+public static final native void ArrayList_RemoveAt(int sender, int index);
+/**
+ * @method flags=setter
+ * @param sender cast=(Binding^),flags=gcobject
+ * @param value cast=(RelativeSource^),flags=gcobject
+ */
+public static final native void Binding_RelativeSource(int sender, int value);
+/**
+ * @method flags=no_gen cpp
+ * @param sender cast=(System::Drawing::Bitmap^),flags=gcobject
+ */
+public static final native int Bitmap_GetHicon(int sender);
+/**
+ * @method accessor=BitmapDecoder::Create,flags=gcobject
+ * @param stream cast=(System::IO::Stream^),flags=gcobject
+ * @param createOptions cast=(BitmapCreateOptions)
+ * @param cacheOption cast=(BitmapCacheOption)
+ */
+public static final native int BitmapDecoder_Create(int stream, int createOptions, int cacheOption);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(BitmapDecoder^),flags=gcobject
+ */
+public static final native int BitmapDecoder_Frames(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(BitmapEncoder^),flags=gcobject
+ */
+public static final native int BitmapEncoder_Frames(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(BitmapEncoder^),flags=gcobject
+ * @param stream cast=(System::IO::Stream^),flags=gcobject
+ */
+public static final native void BitmapEncoder_Save(int sender, int stream);
+/**
+ * @method accessor=BitmapFrame::Create,flags=gcobject
+ * @param source cast=(BitmapSource^),flags=gcobject
+ */
+public static final native int BitmapFrame_Create(int source);
+/**
+ * @method flags=cpp
+ * @param sender cast=(System::Collections::Generic::IList<BitmapFrame^>^),flags=gcobject
+ * @param frame cast=(BitmapFrame^),flags=gcobject
+ */
+public static final native void BitmapFrameCollection_Add(int sender, int frame);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(System::Collections::Generic::IList<BitmapFrame^>^),flags=gcobject
+ */
+public static final native int BitmapFrameCollection_default(int sender, int index);
+/**
+ * @method flags=cpp
+ * @param sender cast=(BitmapImage^),flags=gcobject
+ */
+public static final native void BitmapImage_BeginInit(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(BitmapImage^),flags=gcobject
+ * @param value cast=(BitmapCreateOptions)
+ */
+public static final native void BitmapImage_CreateOptions(int sender, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(BitmapImage^),flags=gcobject
+ */
+public static final native void BitmapImage_EndInit(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(BitmapImage^),flags=gcobject
+ * @param uri cast=(Uri^),flags=gcobject
+ */
+public static final native void BitmapImage_UriSource(int sender, int uri);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(BitmapPalette^),flags=gcobject
+ */
+public static final native int BitmapPalette_Colors(int sender);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(BitmapSource^),flags=gcobject
+ */
+public static final native int BitmapSource_Clone(int sender);
+/**
+ * @method accessor=BitmapSource::Create,flags=gcobject
+ * @param pixelFormat cast=(PixelFormat),flags=gcobject
+ * @param palette cast=(BitmapPalette^),flags=gcobject
+ * @param buffer cast=(IntPtr)
+ */
+public static final native int BitmapSource_Create(int pixelWidth, int pixelHeight, double dpiX, double dpiY, int pixelFormat, int palette, byte[] buffer, int bufferSize, int stride);
+/**
+ * @method flags=cpp
+ * @param sender cast=(BitmapSource^),flags=gcobject
+ * @param sourceRect cast=(Int32Rect),flags=gcobject
+ * @param buffer cast=(IntPtr)
+ */
+public static final native void BitmapSource_CopyPixels(int sender, int sourceRect, byte[] buffer, int bufferSize, int stride);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(BitmapSource^),flags=gcobject
+ */
+public static final native int BitmapSource_Format(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(BitmapSource^),flags=gcobject
+ */
+public static final native int BitmapSource_Palette(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(BitmapSource^),flags=gcobject
+ */
+public static final native int BitmapSource_PixelHeight(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(BitmapSource^),flags=gcobject
+ */
+public static final native int BitmapSource_PixelWidth(int sender);
+/** @method accessor=Border::typeid,flags=const gcobject */
+public static final native int Border_typeid();
+/** @method accessor=Brushes::White,flags=const gcobject */
+public static final native int Brushes_White();
+/** @method accessor=Brushes::Black,flags=const gcobject */
+public static final native int Brushes_Black();
+/** @method accessor=Brushes::Navy,flags=const gcobject */
+public static final native int Brushes_Navy();
+/** @method accessor=Brushes::Red,flags=const gcobject */
+public static final native int Brushes_Red();
+/** @method accessor=Brushes::Transparent,flags=const gcobject */
+public static final native int Brushes_Transparent();
+/** @method accessor=Brushes::LightSkyBlue,flags=const gcobject */
+public static final native int Brushes_LightSkyBlue();
+/**
+ * @method flags=setter
+ * @param sender cast=(Brush^),flags=gcobject
+ */
+public static final native void Brush_Opacity(int sender, double opacity);
+/**
+ * @method flags=getter
+ * @param sender cast=(Button^),flags=gcobject
+ */
+public static final native boolean Button_IsDefault(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Button^),flags=gcobject
+ */
+public static final native void Button_IsDefault(int sender, boolean value);
+/**
+ * @method flags=adder
+ * @param sender cast=(ButtonBase^),flags=gcobject
+ * @param handler cast=(RoutedEventHandler^),flags=gcobject
+ */
+public static final native void ButtonBase_Click(int sender, int handler);
+/** @method accessor=ButtonBase::ClickEvent,flags=const gcobject */
+public static final native int ButtonBase_ClickEvent();
+/** @method accessor=Byte::typeid,flags=const gcobject */
+public static final native int Byte_typeid();
+/**
+ * @method flags=setter
+ * @param sender cast=(CancelEventArgs^),flags=gcobject
+ */
+public static final native void CancelEventArgs_Cancel(int sender, boolean value);
+/**
+ * @method accessor=Canvas::GetLeft
+ * @param element cast=(UIElement^),flags=gcobject
+ */
+public static final native double Canvas_GetLeft(int element);
+/**
+ * @method accessor=Canvas::GetTop
+ * @param element cast=(UIElement^),flags=gcobject
+ */
+public static final native double Canvas_GetTop(int element);
+/**
+ * @method accessor=Canvas::SetLeft
+ * @param element cast=(UIElement^),flags=gcobject
+ */
+public static final native void Canvas_SetLeft(int element, double length);
+/**
+ * @method accessor=Canvas::SetTop
+ * @param element cast=(UIElement^),flags=gcobject
+ */
+public static final native void Canvas_SetTop(int element, double length);
+/** @method accessor=Canvas::typeid,flags=const gcobject */
+public static final native int Canvas_typeid();
+/**
+ * @method flags=getter
+ * @param sender cast=(CharacterHit^),flags=gcobject
+ */
+public static final native int CharacterHit_FirstCharacterIndex(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(CharacterHit^),flags=gcobject
+ */
+public static final native int CharacterHit_TrailingLength(int sender);
+/** @method accessor=CheckBox::typeid,flags=const gcobject */
+public static final native int CheckBox_typeid();
+/** @method accessor=Clipboard::Clear */
+public static final native void Clipboard_Clear();
+/**
+ * @method accessor=Clipboard::ContainsData
+ * @param format cast=(String^),flags=gcobject
+ */
+public static final native boolean Clipboard_ContainsData(int format);
+/**
+ * @method accessor=Clipboard::GetData,flags=gcobject
+ * @param format cast=(String^),flags=gcobject
+ */
+public static final native int Clipboard_GetData(int format);
+/** @method accessor=Clipboard::GetDataObject,flags=gcobject */
+public static final native int Clipboard_GetDataObject();
+/** @method accessor=Clipboard::GetText,flags=gcobject */
+public static final native int Clipboard_GetText();
+/**
+ * @method accessor=Clipboard::SetData
+ * @param format cast=(String^),flags=gcobject
+ * @param data cast=(Object^),flags=gcobject
+ */
+public static final native void Clipboard_SetData(int format, int data);
+/**
+ * @method accessor=Clipboard::SetDataObject
+ * @param data cast=(Object^),flags=gcobject
+ */
+public static final native void Clipboard_SetDataObject(int data, boolean copy);
+/** @method accessor=Color::FromArgb,flags=struct gcobject */
+public static final native int Color_FromArgb(byte a, byte r, byte g, byte b);
+/**
+ * @method flags=getter
+ * @param sender cast=(Color^),flags=gcobject
+ */
+public static final native byte Color_A(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(Color^),flags=gcobject
+ */
+public static final native byte Color_B(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(Color^),flags=gcobject
+ */
+public static final native byte Color_G(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(Color^),flags=gcobject
+ */
+public static final native byte Color_R(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(System::Windows::Forms::ColorDialog^),flags=gcobject
+ */
+public static final native void ColorDialog_AnyColor(int sender, boolean value);
+/**
+ * @method flags=setter
+ * @param sender cast=(System::Windows::Forms::ColorDialog^),flags=gcobject
+ * @param color cast=(System::Drawing::Color),flags=gcobject
+ */
+public static final native void ColorDialog_Color(int sender, int color);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(System::Windows::Forms::ColorDialog^),flags=gcobject
+ */
+public static final native int ColorDialog_Color(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(System::Windows::Forms::ColorDialog^),flags=gcobject
+ * @param colors cast=(array<int>^),flags=gcobject
+ */
+public static final native void ColorDialog_CustomColors(int sender, int colors);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(System::Windows::Forms::ColorDialog^),flags=gcobject
+ */
+public static final native int ColorDialog_CustomColors(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(System::Collections::Generic::List<Color>^),flags=gcobject
+ * @param color cast=(Color),flags=gcobject
+ */
+public static final native void ColorList_Add(int sender, int color);
+/**
+ * @method flags=getter
+ * @param sender cast=(System::Collections::Generic::IList<Color>^),flags=gcobject
+ */
+public static final native int ColorList_Count(int sender);
+/**
+ * @method flags=getter gcobject
+ * @param sender cast=(System::Collections::Generic::IEnumerator<Color>^),flags=gcobject
+ */
+public static final native int ColorList_Current(int sender);
+/**
+ * @method flags=gcobject cpp
+ * @param sender cast=(System::Collections::Generic::IEnumerable<Color>^),flags=gcobject
+ */
+public static final native int ColorList_GetEnumerator(int sender);
+/** @method accessor=Colors::White,flags=const struct gcobject */
+public static final native int Colors_White();
+/** @method accessor=Colors::Black,flags=const struct gcobject */
+public static final native int Colors_Black();
+/** @method accessor=Colors::Red,flags=const struct gcobject */
+public static final native int Colors_Red();
+/** @method accessor=Colors::Maroon,flags=const struct gcobject */
+public static final native int Colors_Maroon();
+/** @method accessor=Colors::Lime,flags=const struct gcobject */
+public static final native int Colors_Lime();
+/** @method accessor=Colors::Green,flags=const struct gcobject */
+public static final native int Colors_Green();
+/** @method accessor=Colors::Olive,flags=const struct gcobject */
+public static final native int Colors_Olive();
+/** @method accessor=Colors::Blue,flags=const struct gcobject */
+public static final native int Colors_Blue();
+/** @method accessor=Colors::Navy,flags=const struct gcobject */
+public static final native int Colors_Navy();
+/** @method accessor=Colors::LightSkyBlue,flags=const struct gcobject */
+public static final native int Colors_LightSkyBlue();
+/** @method accessor=Colors::Magenta,flags=const struct gcobject */
+public static final native int Colors_Magenta();
+/** @method accessor=Colors::Purple,flags=const struct gcobject */
+public static final native int Colors_Purple();
+/** @method accessor=Colors::Cyan,flags=const struct gcobject */
+public static final native int Colors_Cyan();
+/** @method accessor=Colors::Teal,flags=const struct gcobject */
+public static final native int Colors_Teal();
+/** @method accessor=Colors::Transparent,flags=const struct gcobject */
+public static final native int Colors_Transparent();
+/** @method accessor=Colors::Silver,flags=const struct gcobject */
+public static final native int Colors_Silver();
+/** @method accessor=Colors::DarkGray,flags=const struct gcobject */
+public static final native int Colors_DarkGray();
+/** @method accessor=Colors::Yellow,flags=const struct gcobject */
+public static final native int Colors_Yellow();
+/**
+ * @method flags=setter
+ * @param sender cast=(ColumnDefinition^),flags=gcobject
+ * @param width cast=(GridLength),flags=gcobject
+ */
+public static final native void ColumnDefinition_Width(int sender, int width);
+/**
+ * @method flags=cpp
+ * @param sender cast=(ColumnDefinitionCollection^),flags=gcobject
+ * @param column cast=(ColumnDefinition^),flags=gcobject
+ */
+public static final native void ColumnDefinitionCollection_Add(int sender, int column);
+/**
+ * @method flags=getter
+ * @param sender cast=(ComboBox^),flags=gcobject
+ */
+public static final native boolean ComboBox_IsDropDownOpen(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(ComboBox^),flags=gcobject
+ */
+public static final native void ComboBox_IsDropDownOpen(int sender, boolean value);
+/**
+ * @method flags=setter
+ * @param sender cast=(ComboBox^),flags=gcobject
+ */
+public static final native void ComboBox_IsEditable(int sender, boolean value);
+/**
+ * @method flags=gcobject getter
+ * @param handle cast=(ComboBox^),flags=gcobject
+ */
+public static final native int ComboBox_SelectionBoxItem(int handle);
+/**
+ * @method accessor=CommandManager::AddPreviewExecutedHandler,flags=struct
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param handler cast=(ExecutedRoutedEventHandler^),flags=gcobject
+ */
+public static final native void CommandManager_AddPreviewExecutedHandler(int sender, int handler);
+/**
+ * @method flags=cpp
+ * @param sender cast=(CommonDialog^),flags=gcobject
+ * @param parent cast=(Window^),flags=gcobject
+ */
+public static final native boolean CommonDialog_ShowDialog(int sender, int parent);
+/**
+ * @method flags=cpp
+ * @param sender cast=(CompositeCollection^),flags=gcobject
+ * @param object cast=(Object^),flags=gcobject
+ */
+public static final native int CompositeCollection_IndexOf(int sender, int object);
+/**
+ * @method flags=cpp
+ * @param sender cast=(CompositeCollection^),flags=gcobject
+ * @param value cast=(Object^),flags=gcobject
+ */
+public static final native void CompositeCollection_Insert(int sender, int index, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(CompositeCollection^),flags=gcobject
+ * @param value cast=(Object^),flags=gcobject
+ */
+public static final native void CompositeCollection_Remove(int sender, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(CompositeCollection^),flags=gcobject
+ */
+public static final native void CompositeCollection_RemoveAt(int sender, int value);
+/** @method accessor=Console::Beep */
+public static final native void Console_Beep();
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Control^),flags=gcobject
+ */
+public static final native int Control_Padding(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Control^),flags=gcobject
+ * @param value cast=(Thickness),flags=gcobject
+ */
+public static final native void Control_Padding(int sender, int value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(ContainerVisual^),flags=gcobject
+ */
+public static final native int ContainerVisual_Clip(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(ContainerVisual^),flags=gcobject
+ * @param clip cast=(Geometry^),flags=gcobject
+ */
+public static final native void ContainerVisual_Clip(int sender, int clip);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(ContentControl^),flags=gcobject
+ */
+public static final native int ContentControl_Content(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(ContentControl^),flags=gcobject
+ * @param content cast=(Object^),flags=gcobject
+ */
+public static final native void ContentControl_Content(int sender, int content);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(ContentPresenter^),flags=gcobject
+ */
+public static final native int ContentPresenter_Content(int sender);
+/** @method accessor=ContentPresenter::typeid,flags=const gcobject */
+public static final native int ContentPresenter_typeid();
+/**
+ * @method flags=setter
+ * @param sender cast=(ContextMenu^),flags=gcobject
+ */
+public static final native void ContextMenu_IsOpen(int sender, boolean value);
+/**
+ * @method flags=setter
+ * @param sender cast=(ContextMenu^),flags=gcobject
+ * @param mode cast=(PlacementMode)
+ */
+public static final native void ContextMenu_Placement(int sender, int mode);
+/**
+ * @method flags=setter
+ * @param sender cast=(ContextMenu^),flags=gcobject
+ */
+public static final native void ContextMenu_HorizontalOffset(int sender, int offset);
+/**
+ * @method flags=setter
+ * @param sender cast=(ContextMenu^),flags=gcobject
+ */
+public static final native void ContextMenu_VerticalOffset(int sender, int offset);
+/**
+ * @method flags=adder
+ * @param sender cast=(ContextMenu^),flags=gcobject
+ * @param handler cast=(RoutedEventHandler^),flags=gcobject
+ */
+public static final native void ContextMenu_Opened(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(ContextMenu^),flags=gcobject
+ * @param handler cast=(RoutedEventHandler^),flags=gcobject
+ */
+public static final native void ContextMenu_Closed(int sender, int handler);
+/**
+ * @method flags=getter
+ * @param sender cast=(ContextMenuEventArgs^),flags=gcobject
+ */
+public static final native double ContextMenuEventArgs_CursorLeft(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(ContextMenuEventArgs^),flags=gcobject
+ */
+public static final native double ContextMenuEventArgs_CursorTop(int sender);
+/** @method accessor=Control::BackgroundProperty,flags=const gcobject */
+public static final native int Control_BackgroundProperty();
+/** @method accessor=Control::BorderBrushProperty,flags=const gcobject */
+public static final native int Control_BorderBrushProperty();
+/** @method accessor=Control::BorderThicknessProperty,flags=const gcobject */
+public static final native int Control_BorderThicknessProperty();
+/** @method accessor=Control::ForegroundProperty,flags=const gcobject */
+public static final native int Control_ForegroundProperty();
+/** @method accessor=Control::FontFamilyProperty,flags=const gcobject */
+public static final native int Control_FontFamilyProperty();
+/** @method accessor=Control::FontStyleProperty,flags=const gcobject */
+public static final native int Control_FontStyleProperty();
+/** @method accessor=Control::FontWeightProperty,flags=const gcobject */
+public static final native int Control_FontWeightProperty();
+/** @method accessor=Control::FontStretchProperty,flags=const gcobject */
+public static final native int Control_FontStretchProperty();
+/** @method accessor=Control::FontSizeProperty,flags=const gcobject */
+public static final native int Control_FontSizeProperty();
+/**
+ * @method flags=setter
+ * @param sender cast=(Control^),flags=gcobject
+ * @param value cast=(Thickness),flags=gcobject
+ */
+public static final native void Control_BorderThickness(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Control^),flags=gcobject
+ * @param value cast=(Brush^),flags=gcobject
+ */
+public static final native void Control_Background(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Control^),flags=gcobject
+ * @param value cast=(Brush^),flags=gcobject
+ */
+public static final native void Control_Foreground(int sender, int value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Control^),flags=gcobject
+ */
+public static final native int Control_FontFamily(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Control^),flags=gcobject
+ * @param value cast=(FontFamily^),flags=gcobject
+ */
+public static final native void Control_FontFamily(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Control^),flags=gcobject
+ * @param value cast=(FontStyle),flags=gcobject
+ */
+public static final native void Control_FontStyle(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Control^),flags=gcobject
+ * @param value cast=(FontWeight),flags=gcobject
+ */
+public static final native void Control_FontWeight(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Control^),flags=gcobject
+ * @param value cast=(FontStretch),flags=gcobject
+ */
+public static final native void Control_FontStretch(int sender, int value);
+/**
+ * @method flags=getter
+ * @param sender cast=(Control^),flags=gcobject
+ */
+public static final native double Control_FontSize(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Control^),flags=gcobject
+ */
+public static final native void Control_FontSize(int sender, double value);
+/**
+ * @method flags=getter
+ * @param sender cast=(Control ^),flags=gcobject
+ */
+public static final native int Control_HorizontalContentAlignment(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Control ^),flags=gcobject
+ * @param value cast=(HorizontalAlignment)
+ */
+public static final native void Control_HorizontalContentAlignment(int sender, int value);
+/**
+ * @method flags=adder
+ * @param sender cast=(Control^),flags=gcobject
+ * @param handler cast=(MouseButtonEventHandler^),flags=gcobject
+ */
+public static final native void Control_MouseDoubleClick(int sender, int handler);
+/** @method accessor=Control::MouseDoubleClickEvent,flags=const gcobject */
+public static final native int Control_MouseDoubleClickEvent();
+/**
+ * @method flags=adder
+ * @param sender cast=(Control^),flags=gcobject
+ * @param handler cast=(MouseButtonEventHandler^),flags=gcobject
+ */
+public static final native void Control_PreviewMouseDoubleClick(int sender, int handler);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Control^),flags=gcobject
+ */
+public static final native int Control_Template(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Control^),flags=gcobject
+ * @param value cast=(ControlTemplate^),flags=gcobject
+ */
+public static final native void Control_Template(int sender, int value);
+/** @method accessor=Control::TemplateProperty,flags=const gcobject */
+public static final native int Control_TemplateProperty();
+/**
+ * @method flags=setter
+ * @param sender cast=(Control^),flags=gcobject
+ * @param value cast=(VerticalAlignment)
+ */
+public static final native void Control_VerticalContentAlignment(int sender, int value);
+/** @method accessor=CultureInfo::CurrentUICulture,flags=gcobject const */
+public static final native int CultureInfo_CurrentUICulture();
+/** @method accessor=Cursors::AppStarting,flags=const gcobject */
+public static final native int Cursors_AppStarting();
+/** @method accessor=Cursors::Arrow,flags=const gcobject */
+public static final native int Cursors_Arrow();
+/** @method accessor=Cursors::Hand,flags=const gcobject */
+public static final native int Cursors_Hand();
+/** @method accessor=Cursors::Wait,flags=const gcobject */
+public static final native int Cursors_Wait();
+/** @method accessor=Cursors::Cross,flags=const gcobject */
+public static final native int Cursors_Cross();
+/** @method accessor=Cursors::Help,flags=const gcobject */
+public static final native int Cursors_Help();
+/** @method accessor=Cursors::SizeAll,flags=const gcobject */
+public static final native int Cursors_SizeAll();
+/** @method accessor=Cursors::SizeNS,flags=const gcobject */
+public static final native int Cursors_SizeNS();
+/** @method accessor=Cursors::SizeNWSE,flags=const gcobject */
+public static final native int Cursors_SizeNWSE();
+/** @method accessor=Cursors::SizeNESW,flags=const gcobject */
+public static final native int Cursors_SizeNESW();
+/** @method accessor=Cursors::SizeWE,flags=const gcobject */
+public static final native int Cursors_SizeWE();
+/** @method accessor=Cursors::ScrollE,flags=const gcobject */
+public static final native int Cursors_ScrollE();
+/** @method accessor=Cursors::ScrollN,flags=const gcobject */
+public static final native int Cursors_ScrollN();
+/** @method accessor=Cursors::ScrollNE,flags=const gcobject */
+public static final native int Cursors_ScrollNE();
+/** @method accessor=Cursors::ScrollNW,flags=const gcobject */
+public static final native int Cursors_ScrollNW();
+/** @method accessor=Cursors::ScrollS,flags=const gcobject */
+public static final native int Cursors_ScrollS();
+/** @method accessor=Cursors::ScrollSE,flags=const gcobject */
+public static final native int Cursors_ScrollSE();
+/** @method accessor=Cursors::ScrollSW,flags=const gcobject */
+public static final native int Cursors_ScrollSW();
+/** @method accessor=Cursors::ScrollW,flags=const gcobject */
+public static final native int Cursors_ScrollW();
+/** @method accessor=Cursors::IBeam,flags=const gcobject */
+public static final native int Cursors_IBeam();
+/** @method accessor=Cursors::UpArrow,flags=const gcobject */
+public static final native int Cursors_UpArrow();
+/** @method accessor=Cursors::No,flags=const gcobject */
+public static final native int Cursors_No();
+/**
+ * @method accessor=System::Windows::Interop::CursorInteropHelper::Create,flags=gcobject
+ * @param safeHandle cast=(SafeHandle^),flags=gcobject
+ */
+public static final native int CursorInteropHelper_Create(int safeHandle);
+/** @method accessor=DashStyles::Dash,flags=const gcobject */
+public static final native int DashStyles_Dash();
+/** @method accessor=DashStyles::DashDot,flags=const gcobject */
+public static final native int DashStyles_DashDot();
+/** @method accessor=DashStyles::DashDotDot,flags=const gcobject */
+public static final native int DashStyles_DashDotDot();
+/** @method accessor=DashStyles::Dot,flags=const gcobject */
+public static final native int DashStyles_Dot();
+/** @method accessor=DashStyles::Solid,flags=const gcobject */
+public static final native int DashStyles_Solid();
+/** @method accessor=DataFormats::Bitmap,flags=const gcobject */
+public static final native int DataFormats_Bitmap();
+/** @method accessor=DataFormats::FileDrop,flags=const gcobject */
+public static final native int DataFormats_FileDrop();
+/** @method accessor=DataFormats::Html,flags=const gcobject */
+public static final native int DataFormats_Html();
+/** @method accessor=DataFormats::Rtf,flags=const gcobject */
+public static final native int DataFormats_Rtf();
+/** @method accessor=DataFormats::UnicodeText,flags=const gcobject */
+public static final native int DataFormats_UnicodeText();
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(DataObject^),flags=gcobject
+ * @param format cast=(String^),flags=gcobject
+ */
+public static final native int DataObject_GetData(int sender, int format, boolean autoConvert);
+/**
+ * @method flags=cpp
+ * @param sender cast=(DataObject^),flags=gcobject
+ * @param format cast=(String^),flags=gcobject
+ */
+public static final native boolean DataObject_GetDataPresent(int sender, int format, boolean autoConvert);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(DataObject^),flags=gcobject
+ */
+public static final native int DataObject_GetFormats(int sender, boolean autoConvert);
+/**
+ * @method flags=cpp
+ * @param sender cast=(DataObject^),flags=gcobject
+ * @param format cast=(String^),flags=gcobject
+ * @param data cast=(Object^),flags=gcobject
+ */
+public static final native void DataObject_SetData(int sender, int format, int data, boolean autoConvert);
+/**
+ * @method flags=cpp
+ * @param sender cast=(DependencyObject^),flags=gcobject
+ * @param property cast=(DependencyProperty^),flags=gcobject
+ */
+public static final native void DependencyObject_ClearValue(int sender, int property);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(DependencyObject^),flags=gcobject
+ * @param property cast=(DependencyProperty^),flags=gcobject
+ */
+public static final native int DependencyObject_GetValue(int sender, int property);
+/**
+ * @method accessor=GetValue,flags=cpp
+ * @param sender cast=(DependencyObject^),flags=gcobject
+ * @param property cast=(DependencyProperty^),flags=gcobject
+ */
+public static final native double DependencyObject_GetValueDouble(int sender, int property);
+/**
+ * @method accessor=GetValue,flags=cpp
+ * @param sender cast=(DependencyObject^),flags=gcobject
+ * @param property cast=(DependencyProperty^),flags=gcobject
+ */
+public static final native int DependencyObject_GetValueInt(int sender, int property);
+/**
+ * @method flags=cpp
+ * @param sender cast=(DependencyObject^),flags=gcobject
+ * @param property cast=(DependencyProperty^),flags=gcobject
+ * @param object cast=(Object^),flags=gcobject
+ */
+public static final native void DependencyObject_SetValue(int sender, int property, int object);
+/** @method accessor=DependencyProperty::UnsetValue,flags=const gcobject */
+public static final native int DependencyProperty_UnsetValue();
+/**
+ * @method flags=cpp
+ * @param sender cast=(DependencyPropertyDescriptor^),flags=gcobject
+ * @param object cast=(Object^),flags=gcobject
+ * @param handler cast=(EventHandler^),flags=gcobject
+ */
+public static final native void DependencyPropertyDescriptor_AddValueChanged(int sender, int object, int handler);
+/**
+ * @method accessor=DependencyPropertyDescriptor::FromProperty,flags=gcobject
+ * @param dp cast=(DependencyProperty^),flags=gcobject
+ * @param type cast=(Type^),flags=gcobject
+ */
+public static final native int DependencyPropertyDescriptor_FromProperty(int dp, int type);
+/**
+ * @method accessor=Dispatcher::PushFrame
+ * @param frame cast=(DispatcherFrame ^),flags=gcobject
+ */
+public static final native void Dispatcher_PushFrame(int frame);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Dispatcher ^),flags=gcobject
+ */
+public static final native int Dispatcher_Hooks(int sender);
+/**
+ * @method flags=adder
+ * @param sender cast=(DispatcherHooks ^),flags=gcobject
+ * @param handler cast=(EventHandler ^),flags=gcobject
+ */
+public static final native void DispatcherHooks_DispatcherInactive(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(DispatcherHooks ^),flags=gcobject
+ * @param handler cast=(DispatcherHookEventHandler ^),flags=gcobject
+ */
+public static final native void DispatcherHooks_OperationAborted(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(DispatcherHooks ^),flags=gcobject
+ * @param handler cast=(DispatcherHookEventHandler ^),flags=gcobject
+ */
+public static final native void DispatcherHooks_OperationCompleted(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(DispatcherHooks ^),flags=gcobject
+ * @param handler cast=(DispatcherHookEventHandler ^),flags=gcobject
+ */
+public static final native void DispatcherHooks_OperationPosted(int sender, int handler);
+/**
+ * @method flags=getter
+ * @param sender cast=(DispatcherFrame^),flags=gcobject
+ */
+public static final native boolean DispatcherFrame_Continue(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(DispatcherFrame^),flags=gcobject
+ */
+public static final native void DispatcherFrame_Continue(int sender, boolean value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(DispatcherHookEventArgs ^),flags=gcobject
+ */
+public static final native int DispatcherHookEventArgs_Operation(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(DispatcherOperation^),flags=gcobject
+ */
+public static final native boolean DispatcherOperation_Abort(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(DispatcherOperation ^),flags=gcobject
+ */
+public static final native int DispatcherOperation_Priority(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(DispatcherOperation ^),flags=gcobject
+ * @param value cast=(DispatcherPriority)
+ */
+public static final native void DispatcherOperation_Priority(int sender, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(DispatcherOperation^),flags=gcobject
+ */
+public static final native int DispatcherOperation_Wait(int sender);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(Dispatcher ^),flags=gcobject
+ * @param priority cast=(DispatcherPriority)
+ * @param method cast=(Delegate ^),flags=gcobject
+ */
+public static final native int Dispatcher_BeginInvoke(int sender, int priority, int method);
+/**
+ * @method flags=setter
+ * @param sender cast=(DispatcherTimer^),flags=gcobject
+ * @param value cast=(TimeSpan),flags=gcobject
+ */
+public static final native void DispatcherTimer_Interval(int sender, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(DispatcherTimer^),flags=gcobject
+ */
+public static final native void DispatcherTimer_Start(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(DispatcherTimer^),flags=gcobject
+ */
+public static final native void DispatcherTimer_Stop(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(DispatcherTimer^),flags=gcobject
+ */
+public static final native void DispatcherTimer_Tag(int sender, int value);
+/**
+ * @method flags=getter
+ * @param sender cast=(DispatcherTimer^),flags=gcobject
+ */
+public static final native int DispatcherTimer_Tag(int sender);
+/**
+ * @method flags=adder
+ * @param sender cast=(DispatcherTimer^),flags=gcobject
+ * @param handler cast=(EventHandler^),flags=gcobject
+ */
+public static final native void DispatcherTimer_Tick(int sender, int handler);
+/** @method accessor=DockPanel::DockProperty,flags=const gcobject */
+public static final native int DockPanel_DockProperty();
+/** @method accessor=DockPanel::typeid,flags=const gcobject */
+public static final native int DockPanel_typeid();
+/**
+ * @method flags=cpp
+ * @param sender cast=(DoubleCollection^),flags=gcobject
+ */
+public static final native void DoubleCollection_Add(int sender, double value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(DoubleAnimationUsingKeyFrames^),flags=gcobject
+ */
+public static final native int DoubleAnimationUsingKeyFrames_KeyFrames(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(DoubleKeyFrameCollection^),flags=gcobject
+ * @param keyFrame cast=(DoubleKeyFrame^),flags=gcobject
+ */
+public static final native int DoubleKeyFrameCollection_Add(int sender, int keyFrame);
+/**
+ * @method flags=getter
+ * @param e cast=(DragDeltaEventArgs^),flags=gcobject
+ */
+public static final native int DragDeltaEventArgs_VerticalChange(int e);
+/**
+ * @method flags=getter
+ * @param e cast=(DragDeltaEventArgs^),flags=gcobject
+ */
+public static final native int DragDeltaEventArgs_HorizontalChange(int e);
+/**
+ * @method accessor=DragDrop::DoDragDrop
+ * @param dragSource cast=(DependencyObject^),flags=gcobject
+ * @param data cast=(Object^),flags=gcobject
+ * @param allowedEffects cast=(DragDropEffects)
+ */
+public static final native int DragDrop_DoDragDrop(int dragSource, int data, int allowedEffects);
+/**
+ * @method flags=getter
+ * @param sender cast=(DragEventArgs^),flags=gcobject
+ */
+public static final native int DragEventArgs_AllowedEffects (int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(DragEventArgs^),flags=gcobject
+ */
+public static final native int DragEventArgs_Data (int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(DragEventArgs^),flags=gcobject
+ */
+public static final native int DragEventArgs_Effects (int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(DragEventArgs^),flags=gcobject
+ * @param effects cast=(DragDropEffects)
+ */
+public static final native void DragEventArgs_Effects (int sender, int effects);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(DragEventArgs^),flags=gcobject
+ * @param relativeTo cast=(IInputElement^),flags=gcobject
+ */
+public static final native int DragEventArgs_GetPosition (int sender, int relativeTo);
+/**
+ * @method flags=getter
+ * @param sender cast=(DragEventArgs^),flags=gcobject
+ */
+public static final native int DragEventArgs_KeyStates (int sender);
+/** @method accessor=System::Drawing::Color::FromArgb,flags=gcobject */
+public static final native int DrawingColor_FromArgb(int a, int r, int g, int b);
+/**
+ * @method flags=cpp
+ * @param sender cast=(System::Drawing::Color^),flags=gcobject
+ */
+public static final native int DrawingColor_ToArgb(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(DrawingContext^),flags=gcobject
+ */
+public static final native void DrawingContext_Close(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(DrawingContext^),flags=gcobject
+ * @param Drawing cast=(System::Windows::Media::Drawing^),flags=gcobject
+ */
+public static final native void DrawingContext_DrawDrawing(int sender, int Drawing);
+/**
+ * @method flags=cpp
+ * @param sender cast=(DrawingContext^),flags=gcobject
+ * @param brush cast=(Brush^),flags=gcobject
+ * @param pen cast=(Pen^),flags=gcobject
+ * @param center cast=(Point),flags=gcobject
+ */
+public static final native void DrawingContext_DrawEllipse(int sender, int brush, int pen, int center, double radiusX, double radiusY);
+/**
+ * @method flags=cpp
+ * @param sender cast=(DrawingContext^),flags=gcobject
+ * @param imagesource cast=(ImageSource^),flags=gcobject
+ * @param rect cast=(Rect),flags=gcobject
+ */
+public static final native void DrawingContext_DrawImage(int sender, int imagesource, int rect);
+/**
+ * @method flags=cpp
+ * @param sender cast=(DrawingContext^),flags=gcobject
+ * @param pen cast=(Pen^),flags=gcobject
+ * @param point0 cast=(Point),flags=gcobject
+ * @param point1 cast=(Point),flags=gcobject
+ */
+public static final native void DrawingContext_DrawLine(int sender, int pen, int point0, int point1);
+/**
+ * @method flags=cpp
+ * @param sender cast=(DrawingContext^),flags=gcobject
+ * @param brush cast=(Brush^),flags=gcobject
+ * @param pen cast=(Pen^),flags=gcobject
+ * @param geometry cast=(Geometry^),flags=gcobject
+ */
+public static final native void DrawingContext_DrawGeometry(int sender, int brush, int pen, int geometry);
+/**
+ * @method flags=cpp
+ * @param sender cast=(DrawingContext^),flags=gcobject
+ * @param brush cast=(Brush^),flags=gcobject
+ * @param pen cast=(Pen^),flags=gcobject
+ * @param rect cast=(Rect),flags=gcobject
+ */
+public static final native void DrawingContext_DrawRectangle(int sender, int brush, int pen, int rect);
+/**
+ * @method flags=cpp
+ * @param sender cast=(DrawingContext^),flags=gcobject
+ * @param brush cast=(Brush^),flags=gcobject
+ * @param pen cast=(Pen^),flags=gcobject
+ * @param rect cast=(Rect),flags=gcobject
+ */
+public static final native void DrawingContext_DrawRoundedRectangle(int sender, int brush, int pen, int rect, double radiusX, double radiusY);
+/**
+ * @method flags=cpp
+ * @param sender cast=(DrawingContext^),flags=gcobject
+ * @param formattedText cast=(FormattedText^),flags=gcobject
+ * @param point cast=(Point),flags=gcobject
+ */
+public static final native void DrawingContext_DrawText(int sender, int formattedText, int point);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(System::Drawing::FontFamily^),flags=gcobject
+ */
+public static final native int DrawingFontFamily_Name(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(DrawingContext^),flags=gcobject
+ * @param transform cast=(Transform^),flags=gcobject
+ */
+public static final native void DrawingContext_PushTransform(int sender, int transform);
+/**
+ * @method flags=cpp
+ * @param sender cast=(DrawingContext^),flags=gcobject
+ * @param clipGeometry cast=(Geometry^),flags=gcobject
+ */
+public static final native void DrawingContext_PushClip(int sender, int clipGeometry);
+/**
+ * @method flags=cpp
+ * @param sender cast=(DrawingContext^),flags=gcobject
+ */
+public static final native void DrawingContext_PushOpacity(int sender, double opacity);
+/**
+ * @method flags=cpp
+ * @param sender cast=(DrawingContext^),flags=gcobject
+ */
+public static final native void DrawingContext_Pop(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(DrawingVisual^),flags=gcobject
+ */
+public static final native int DrawingVisual_Drawing(int sender);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(DrawingVisual^),flags=gcobject
+ */
+public static final native int DrawingVisual_RenderOpen(int sender);
+/** @method accessor=DrawingVisual::typeid,flags=const gcobject */
+public static final native int DrawingVisual_typeid();
+/** @method accessor=EditingCommands::Backspace,flags=const gcobject */
+public static final native int EditingCommands_Backspace();
+/** @method accessor=EditingCommands::Delete,flags=const gcobject */
+public static final native int EditingCommands_Delete();
+/** @method accessor=EditingCommands::DeleteNextWord,flags=const gcobject */
+public static final native int EditingCommands_DeleteNextWord();
+/** @method accessor=EditingCommands::DeletePreviousWord,flags=const gcobject */
+public static final native int EditingCommands_DeletePreviousWord();
+/**
+ * @method accessor=Environment::ExpandEnvironmentVariables,flags=gcobject
+ * @param string cast=(String^),flags=gcobject
+ */
+public static final native int Environment_ExpandEnvironmentVariables(int string);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(ExecutedRoutedEventArgs^),flags=gcobject
+ */
+public static final native int ExecutedRoutedEventArgs_Command(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(ExecutedRoutedEventArgs^),flags=gcobject
+ */
+public static final native void ExecutedRoutedEventArgs_Handled(int sender, boolean handled);
+/**
+ * @method flags=adder
+ * @param sender cast=(Expander^),flags=gcobject
+ * @param handler cast=(RoutedEventHandler^),flags=gcobject
+ */
+public static final native void Expander_Collapsed(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(Expander^),flags=gcobject
+ * @param handler cast=(RoutedEventHandler^),flags=gcobject
+ */
+public static final native void Expander_Expanded(int sender, int handler);
+/**
+ * @method flags=getter
+ * @param sender cast=(Expander^),flags=gcobject
+ */
+public static final native boolean Expander_IsExpanded(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Expander^),flags=gcobject
+ */
+public static final native void Expander_IsExpanded(int sender, boolean value);
+/**
+ * @method flags=setter
+ * @param sender cast=(FileDialog^),flags=gcobject
+ * @param value cast=(String^),flags=gcobject
+ */
+public static final native void FileDialog_FileName(int sender, int value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(FileDialog^),flags=gcobject
+ */
+public static final native int FileDialog_FileNames(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(FileDialog^),flags=gcobject
+ * @param value cast=(String^),flags=gcobject
+ */
+public static final native void FileDialog_Filter(int sender, int value);
+/**
+ * @method flags=getter
+ * @param sender cast=(FileDialog^),flags=gcobject
+ */
+public static final native int FileDialog_FilterIndex(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(FileDialog^),flags=gcobject
+ */
+public static final native void FileDialog_FilterIndex(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(FileDialog^),flags=gcobject
+ * @param value cast=(String^),flags=gcobject
+ */
+public static final native void FileDialog_InitialDirectory(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(FileDialog^),flags=gcobject
+ * @param value cast=(String^),flags=gcobject
+ */
+public static final native void FileDialog_Title(int sender, int value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(System::IO::FileInfo^),flags=gcobject
+ */
+public static final native int FileInfo_DirectoryName(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(System::IO::FileInfo^),flags=gcobject
+ */
+public static final native int FileInfo_Name(int sender);
+/**
+ * @method accessor=System::IO::File::Exists
+ * @param sender cast=(String^),flags=gcobject
+ */
+public static final native boolean File_Exists(int sender);
+/**
+ * @method accessor=System::IO::File::ReadAllText,flags=gcobject
+ * @param sender cast=(String^),flags=gcobject
+ */
+public static final native int File_ReadAllText(int sender);
+/**
+ * @method accessor=FocusManager::GetFocusScope,flags=gcobject
+ * @param element cast=(DependencyObject^),flags=gcobject
+ */
+public static final native int FocusManager_GetFocusScope(int element);
+/**
+ * @method accessor=FocusManager::GetFocusedElement,flags=gcobject
+ * @param element cast=(DependencyObject^),flags=gcobject
+ */
+public static final native int FocusManager_GetFocusedElement(int element);
+/**
+ * @method flags=setter
+ * @param sender cast=(System::Windows::Forms::FolderBrowserDialog^),flags=gcobject
+ * @param value cast=(String^),flags=gcobject
+ */
+public static final native void FolderBrowserDialog_Description(int sender, int value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(System::Windows::Forms::FolderBrowserDialog^),flags=gcobject
+ */
+public static final native int FolderBrowserDialog_SelectedPath(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(System::Windows::Forms::FolderBrowserDialog^),flags=gcobject
+ * @param value cast=(String^),flags=gcobject
+ */
+public static final native void FolderBrowserDialog_SelectedPath(int sender, int value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(System::Drawing::Font^),flags=gcobject
+ */
+public static final native int Font_FontFamily(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(System::Drawing::Font^),flags=gcobject
+ */
+public static final native int Font_Size(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(System::Drawing::Font^),flags=gcobject
+ */
+public static final native int Font_Style(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(System::Windows::Forms::FontDialog^),flags=gcobject
+ */
+public static final native int FontDialog_Color(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(System::Windows::Forms::FontDialog^),flags=gcobject
+ * @param value cast=(System::Drawing::Color),flags=gcobject
+ */
+public static final native void FontDialog_Color(int sender, int value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(System::Windows::Forms::FontDialog^),flags=gcobject
+ */
+public static final native int FontDialog_Font(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(System::Windows::Forms::FontDialog^),flags=gcobject
+ * @param value cast=(System::Drawing::Font^),flags=gcobject
+ */
+public static final native void FontDialog_Font(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(System::Windows::Forms::FontDialog^),flags=gcobject
+ */
+public static final native void FontDialog_ShowColor (int sender, boolean value);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(FontFamily^),flags=gcobject
+ */
+public static final native int FontFamily_GetTypefaces(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(FontFamily^),flags=gcobject
+ */
+public static final native double FontFamily_LineSpacing(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(FontFamily^),flags=gcobject
+ */
+public static final native int FontFamily_Source(int sender);
+/** @method accessor=FontStyles::Italic,flags=const gcobject */
+public static final native int FontStyles_Italic();
+/** @method accessor=FontStyles::Normal,flags=const gcobject */
+public static final native int FontStyles_Normal();
+/** @method accessor=FontStyles::Oblique,flags=const gcobject */
+public static final native int FontStyles_Oblique();
+/** @method accessor=FontWeight::FromOpenTypeWeight,flags=gcobject */
+public static final native int FontWeight_FromOpenTypeWeight(int weight);
+/**
+ * @method flags=cpp
+ * @param sender cast=(FontWeight^),flags=gcobject
+ */
+public static final native int FontWeight_ToOpenTypeWeight(int sender);
+/** @method accessor=FontWeights::Bold,flags=const gcobject */
+public static final native int FontWeights_Bold();
+/** @method accessor=FontWeights::Normal,flags=const gcobject */
+public static final native int FontWeights_Normal();
+/** @method accessor=FontStretches::Normal,flags=const gcobject */
+public static final native int FontStretches_Normal();
+/** @method accessor=FontStretch::FromOpenTypeStretch,flags=gcobject */
+public static final native int FontStretch_FromOpenTypeStretch(int stretch);
+/**
+ * @method flags=cpp
+ * @param sender cast=(FontStretch^),flags=gcobject
+ */
+public static final native int FontStretch_ToOpenTypeStretch(int sender);
+/**
+ * @method accessor=Fonts::GetTypefaces,flags=gcobject
+ * @param uri cast=(String^),flags=gcobject
+ */
+public static final native int Fonts_GetTypefaces(int uri);
+/** @method accessor=Fonts::SystemTypefaces,flags=const gcobject */
+public static final native int Fonts_SystemTypefaces();
+/**
+ * @method flags=getter
+ * @param sender cast=(FormattedText^),flags=gcobject
+ */
+public static final native double FormattedText_Baseline(int sender);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(FormattedText^),flags=gcobject
+ * @param origin cast=(Point),flags=gcobject
+ */
+public static final native int FormattedText_BuildGeometry(int sender, int origin);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(FormattedText^),flags=gcobject
+ * @param origin cast=(Point),flags=gcobject
+ */
+public static final native int FormattedText_BuildHighlightGeometry(int sender, int origin);
+/**
+ * @method flags=getter
+ * @param sender cast=(FormattedText^),flags=gcobject
+ */
+public static final native double FormattedText_Height(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(FormattedText^),flags=gcobject
+ * @param decorations cast=(TextDecorationCollection^),flags=gcobject
+ */
+public static final native void FormattedText_SetTextDecorations(int sender, int decorations, int startIndex, int count);
+/**
+ * @method flags=getter
+ * @param sender cast=(FormattedText^),flags=gcobject
+ */
+public static final native double FormattedText_WidthIncludingTrailingWhitespace(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(System::Windows::Forms::CommonDialog^),flags=gcobject
+ */
+public static final native int FormsCommonDialog_ShowDialog(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(System::Windows::Forms::MouseEventArgs^),flags=gcobject
+ */
+public static final native int FormsMouseEventArgs_Button(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(Frame^),flags=gcobject
+ */
+public static final native boolean Frame_CanGoBack(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(Frame^),flags=gcobject
+ */
+public static final native boolean Frame_CanGoForward(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Frame^),flags=gcobject
+ */
+public static final native int Frame_CurrentSource(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Frame^),flags=gcobject
+ */
+public static final native int Frame_Source(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Frame^),flags=gcobject
+ * @param uri cast=(Uri^),flags=gcobject
+ */
+public static final native void Frame_Source(int sender, int uri);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Frame^),flags=gcobject
+ * @param uri cast=(Uri^),flags=gcobject
+ */
+public static final native boolean Frame_Navigate(int sender, int uri);
+/**
+ * @method flags=setter
+ * @param sender cast=(Frame^),flags=gcobject
+ * @param visiblity cast=(System::Windows::Navigation::NavigationUIVisibility)
+ */
+public static final native void Frame_NavigationUIVisibility(int sender, int visiblity);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Frame^),flags=gcobject
+ */
+public static final native void Frame_GoBack(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Frame^),flags=gcobject
+ */
+public static final native void Frame_GoForward(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Frame^),flags=gcobject
+ */
+public static final native void Frame_Refresh(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Frame^),flags=gcobject
+ */
+public static final native void Frame_StopLoading(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(FrameworkContentElement^),flags=gcobject
+ */
+public static final native int FrameworkContentElement_Parent(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(FrameworkContentElement^),flags=gcobject
+ */
+public static final native int FrameworkContentElement_Tag(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(FrameworkContentElement^),flags=gcobject
+ */
+public static final native void FrameworkContentElement_Tag(int sender, int value);
+/** @method accessor=FrameworkContentElement::typeid,flags=const gcobject */
+public static final native int FrameworkContentElement_typeid();
+/**
+ * @method flags=cpp
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native void FrameworkElement_BeginInit(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native void FrameworkElement_BringIntoView(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ * @param value cast=(ContextMenu^),flags=gcobject
+ */
+public static final native void FrameworkElement_ContextMenu(int sender, int value);
+/**
+ * @method flags=adder
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ * @param handler cast=(ContextMenuEventHandler^),flags=gcobject
+ */
+public static final native void FrameworkElement_ContextMenuClosing(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ * @param handler cast=(ContextMenuEventHandler^),flags=gcobject
+ */
+public static final native void FrameworkElement_ContextMenuOpening(int sender, int handler);
+/**
+ * @method flags=setter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ * @param cursor cast=(Cursor^),flags=gcobject
+ */
+public static final native void FrameworkElement_Cursor(int sender, int cursor);
+/** @method accessor=FrameworkElement::CursorProperty,flags=const gcobject */
+public static final native int FrameworkElement_CursorProperty();
+/** @method accessor=FrameworkElement::ActualHeightProperty,flags=const gcobject */
+public static final native int FrameworkElement_ActualHeightProperty();
+/** @method accessor=FrameworkElement::ActualWidthProperty,flags=const gcobject */
+public static final native int FrameworkElement_ActualWidthProperty();
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ * @param key cast=(Object^),flags=gcobject
+ */
+public static final native int FrameworkElement_FindResource(int sender, int key);
+/**
+ * @method flags=setter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ * @param style cast=(Style^),flags=gcobject
+ */
+public static final native void FrameworkElement_FocusVisualStyle(int sender, int style);
+/**
+ * @method flags=getter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native int FrameworkElement_FlowDirection(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ * @param value cast=(FlowDirection)
+ */
+public static final native void FrameworkElement_FlowDirection(int sender, int value);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ * @param dp cast=(DependencyProperty^),flags=gcobject
+ */
+public static final native int FrameworkElement_GetBindingExpression(int sender, int dp);
+/**
+ * @method flags=setter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ * @param value cast=(HorizontalAlignment)
+ */
+public static final native void FrameworkElement_HorizontalAlignment(int sender, int value);
+/**
+ * @method flags=getter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native boolean FrameworkElement_IsLoaded(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ * @param value cast=(Transform^),flags=gcobject
+ */
+public static final native void FrameworkElement_LayoutTransform(int sender, int value);
+/**
+ * @method flags=adder
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ * @param handler cast=(RoutedEventHandler^),flags=gcobject
+ */
+public static final native void FrameworkElement_Loaded(int sender, int handler);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native int FrameworkElement_Margin(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ * @param value cast=(Thickness),flags=gcobject
+ */
+public static final native void FrameworkElement_Margin(int sender, int value);
+/** @method accessor=FrameworkElement::MarginProperty,flags=const gcobject */
+public static final native int FrameworkElement_MarginProperty();
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native int FrameworkElement_Name(int sender);
+/** @method accessor=FrameworkElement::NameProperty,flags=const gcobject */
+public static final native int FrameworkElement_NameProperty();
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native int FrameworkElement_Parent(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native int FrameworkElement_RenderTransform(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ * @param value cast=(Transform^),flags=gcobject
+ */
+public static final native void FrameworkElement_RenderTransform(int sender, int value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native int FrameworkElement_Style(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ * @param value cast=(Style^),flags=gcobject
+ */
+public static final native void FrameworkElement_Style(int sender, int value);
+/** @method accessor=FrameworkElement::StyleProperty,flags=const gcobject */
+public static final native int FrameworkElement_StyleProperty();
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native int FrameworkElement_Tag(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ * @param tag cast=(Object^),flags=gcobject
+ */
+public static final native void FrameworkElement_Tag(int sender, int tag);
+/** @method accessor=FrameworkElement::TagProperty,flags=const gcobject */
+public static final native int FrameworkElement_TagProperty();
+/** @method accessor=FrameworkElement::typeid,flags=const gcobject */
+public static final native int FrameworkElement_typeid();
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native int FrameworkElement_ToolTip(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ * @param value cast=(Object^),flags=gcobject
+ */
+public static final native void FrameworkElement_ToolTip(int sender, int value);
+/**
+ * @method flags=getter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native double FrameworkElement_MaxHeight(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native void FrameworkElement_MaxHeight(int sender, double height);
+/**
+ * @method flags=getter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native double FrameworkElement_MaxWidth(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native void FrameworkElement_MaxWidth(int sender, double width);
+/**
+ * @method flags=getter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native double FrameworkElement_MinHeight(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native void FrameworkElement_MinHeight(int sender, double height);
+/**
+ * @method flags=getter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native double FrameworkElement_MinWidth(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native void FrameworkElement_MinWidth(int sender, double width);
+/**
+ * @method flags=getter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native double FrameworkElement_Height(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native void FrameworkElement_Height(int sender, double height);
+/**
+ * @method flags=getter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native double FrameworkElement_Width(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native void FrameworkElement_Width(int sender, double width);
+/**
+ * @method flags=getter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native double FrameworkElement_ActualWidth(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native double FrameworkElement_ActualHeight(int sender);
+/** @method accessor=FrameworkElement::WidthProperty,flags=const gcobject */
+public static final native int FrameworkElement_WidthProperty();
+/** @method accessor=FrameworkElement::HeightProperty,flags=const gcobject */
+public static final native int FrameworkElement_HeightProperty();
+/**
+ * @method flags=adder
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ * @param handler cast=(SizeChangedEventHandler^),flags=gcobject
+ */
+public static final native void FrameworkElement_SizeChanged(int sender, int handler);
+/** @method accessor=FrameworkElement::SizeChangedEvent,flags=const gcobject */
+public static final native int FrameworkElement_SizeChangedEvent();
+/**
+ * @method flags=setter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ * @param str cast=(VerticalAlignment)
+ */
+public static final native void FrameworkElement_VerticalAlignment(int sender, int str);
+/** @method accessor=FrameworkElement::VerticalAlignmentProperty,flags=const gcobject */
+public static final native int FrameworkElement_VerticalAlignmentProperty();
+/**
+ * @method flags=cpp
+ * @param sender cast=(FrameworkElementFactory^),flags=gcobject
+ * @param value cast=(FrameworkElementFactory^),flags=gcobject
+ */
+public static final native void FrameworkElementFactory_AppendChild(int sender, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(FrameworkElementFactory^),flags=gcobject
+ * @param dp cast=(DependencyProperty^),flags=gcobject
+ * @param binding cast=(BindingBase^),flags=gcobject
+ */
+public static final native void FrameworkElementFactory_SetBinding(int sender, int dp, int binding);
+/**
+ * @method flags=cpp
+ * @param sender cast=(FrameworkElementFactory^),flags=gcobject
+ * @param dp cast=(DependencyProperty^),flags=gcobject
+ * @param value cast=(Boolean)
+ */
+public static final native void FrameworkElementFactory_SetValue(int sender, int dp, boolean value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(FrameworkElementFactory^),flags=gcobject
+ * @param dp cast=(DependencyProperty^),flags=gcobject
+ * @param value cast=(Object^),flags=gcobject
+ */
+public static final native void FrameworkElementFactory_SetValue(int sender, int dp, int value);
+/**
+ * @method accessor=SetValue,flags=cpp
+ * @param sender cast=(FrameworkElementFactory^),flags=gcobject
+ * @param dp cast=(DependencyProperty^),flags=gcobject
+ * @param value cast=(Dock)
+ */
+public static final native void FrameworkElementFactory_SetValueDock(int sender, int dp, int value);
+/**
+ * @method accessor=SetValue,flags=cpp
+ * @param sender cast=(FrameworkElementFactory^),flags=gcobject
+ * @param dp cast=(DependencyProperty^),flags=gcobject
+ */
+public static final native void FrameworkElementFactory_SetValueInt(int sender, int dp, int value);
+/**
+ * @method accessor=SetValue,flags=cpp
+ * @param sender cast=(FrameworkElementFactory^),flags=gcobject
+ * @param dp cast=(DependencyProperty^),flags=gcobject
+ * @param value cast=(Stretch)
+ */
+public static final native void FrameworkElementFactory_SetValueStretch(int sender, int dp, int value);
+/**
+ * @method accessor=SetValue,flags=cpp
+ * @param sender cast=(FrameworkElementFactory^),flags=gcobject
+ * @param dp cast=(DependencyProperty^),flags=gcobject
+ * @param value cast=(Orientation)
+ */
+public static final native void FrameworkElementFactory_SetValueOrientation(int sender, int dp, int value);
+/**
+ * @method accessor=SetValue,flags=cpp
+ * @param sender cast=(FrameworkElementFactory^),flags=gcobject
+ * @param dp cast=(DependencyProperty^),flags=gcobject
+ * @param value cast=(VerticalAlignment)
+ */
+public static final native void FrameworkElementFactory_SetValueVerticalAlignment(int sender, int dp, int value);
+/**
+ * @method accessor=SetValue,flags=cpp
+ * @param sender cast=(FrameworkElementFactory^),flags=gcobject
+ * @param dp cast=(DependencyProperty^),flags=gcobject
+ * @param value cast=(Visibility)
+ */
+public static final native void FrameworkElementFactory_SetValueVisibility(int sender, int dp, byte value);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(FrameworkTemplate^),flags=gcobject
+ * @param name cast=(String^),flags=gcobject
+ * @param parent cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native int FrameworkTemplate_FindName(int sender, int name, int parent);
+/**
+ * @method flags=setter
+ * @param sender cast=(FrameworkTemplate^),flags=gcobject
+ * @param value cast=(FrameworkElementFactory^),flags=gcobject
+ */
+public static final native void FrameworkTemplate_VisualTree(int sender, int value);
+/**
+ * @method flags=getter
+ * @param sender cast=(Freezable^),flags=gcobject
+ */
+public static final native boolean Freezable_CanFreeze(int sender);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(Freezable^),flags=gcobject
+ */
+public static final native int Freezable_Clone(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Freezable^),flags=gcobject
+ */
+public static final native void Freezable_Freeze(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(GeometryCollection^),flags=gcobject
+ */
+public static final native void GeometryCollection_Clear(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(GeometryCollection^),flags=gcobject
+ */
+public static final native int GeometryCollection_Count(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(GeometryCollection^),flags=gcobject
+ * @param geometry cast=(Geometry^),flags=gcobject
+ */
+public static final native void GeometryCollection_Add(int sender, int geometry);
+/**
+ * @method flags=cpp
+ * @param sender cast=(GeometryCollection^),flags=gcobject
+ * @param geometry cast=(Geometry^),flags=gcobject
+ */
+public static final native void GeometryCollection_Remove(int sender, int geometry);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(Geometry^),flags=gcobject
+ */
+public static final native int Geometry_Clone(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Geometry^),flags=gcobject
+ */
+public static final native int Geometry_Bounds(int sender);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(Geometry^),flags=gcobject
+ */
+public static final native int Geometry_GetFlattenedPathGeometry(int sender);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(Geometry^),flags=gcobject
+ * @param type cast=(ToleranceType)
+ */
+public static final native int Geometry_GetFlattenedPathGeometry(int sender, double tolerance, int type);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Geometry^),flags=gcobject
+ */
+public static final native boolean Geometry_IsEmpty(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Geometry^),flags=gcobject
+ * @param point cast=(Point),flags=gcobject
+ */
+public static final native boolean Geometry_FillContains(int sender, int point);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Geometry^),flags=gcobject
+ * @param geometry cast=(Geometry^),flags=gcobject
+ */
+public static final native int Geometry_FillContainsWithDetail(int sender, int geometry);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Geometry^),flags=gcobject
+ * @param pen cast=(Pen^),flags=gcobject
+ * @param hitPoint cast=(Point),flags=gcobject
+ */
+public static final native boolean Geometry_StrokeContains(int sender, int pen, int hitPoint);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Geometry^),flags=gcobject
+ */
+public static final native int Geometry_Transform(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Geometry^),flags=gcobject
+ * @param transform cast=(Transform^),flags=gcobject
+ */
+public static final native void Geometry_Transform(int sender, int transform);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(GeometryGroup^),flags=gcobject
+ */
+public static final native int GeometryGroup_Children(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(GeometryGroup^),flags=gcobject
+ */
+public static final native int GeometryGroup_Children(int sender, int index);
+/**
+ * @method flags=getter
+ * @param sender cast=(GiveFeedbackEventArgs^),flags=gcobject
+ */
+public static final native int GiveFeedbackEventArgs_Effects (int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(GlyphRun^),flags=gcobject
+ */
+public static final native int GlyphRun_BidiLevel(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(GradientBrush^),flags=gcobject
+ * @param mode cast=(BrushMappingMode)
+ */
+public static final native void GradientBrush_MappingMode(int sender, int mode);
+/**
+ * @method flags=setter
+ * @param sender cast=(GradientBrush^),flags=gcobject
+ * @param method cast=(GradientSpreadMethod)
+ */
+public static final native void GradientBrush_SpreadMethod(int sender, int method);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Grid^),flags=gcobject
+ */
+public static final native int Grid_ColumnDefinitions(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Grid^),flags=gcobject
+ */
+public static final native int Grid_RowDefinitions(int sender);
+/**
+ * @method accessor=Grid::SetColumn
+ * @param element cast=(UIElement^),flags=gcobject
+ */
+public static final native void Grid_SetColumn(int element, int index);
+/**
+ * @method accessor=Grid::SetColumnSpan
+ * @param element cast=(UIElement^),flags=gcobject
+ */
+public static final native void Grid_SetColumnSpan(int element, int value);
+/**
+ * @method accessor=Grid::SetRow
+ * @param element cast=(UIElement^),flags=gcobject
+ */
+public static final native void Grid_SetRow(int element, int index);
+/**
+ * @method accessor=Grid::SetRowSpan
+ * @param element cast=(UIElement^),flags=gcobject
+ */
+public static final native void Grid_SetRowSpan(int element, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(GridView^),flags=gcobject
+ * @param style cast=(Style^),flags=gcobject
+ */
+public static final native void GridView_ColumnHeaderContainerStyle(int sender, int style);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(GridView^),flags=gcobject
+ */
+public static final native int GridView_Columns(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(GridView^),flags=gcobject
+ */
+public static final native void GridView_AllowsColumnReorder(int sender, boolean value);
+/**
+ * @method flags=getter
+ * @param sender cast=(GridViewColumn^),flags=gcobject
+ */
+public static final native double GridViewColumn_ActualWidth(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(GridViewColumn^),flags=gcobject
+ */
+public static final native int GridViewColumn_CellTemplate(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(GridViewColumn^),flags=gcobject
+ * @param value cast=(DataTemplate^),flags=gcobject
+ */
+public static final native void GridViewColumn_CellTemplate(int sender, int value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(GridViewColumn^),flags=gcobject
+ */
+public static final native int GridViewColumn_Header(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(GridViewColumn^),flags=gcobject
+ * @param value cast=(Object^),flags=gcobject
+ */
+public static final native void GridViewColumn_Header(int sender, int value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(GridViewColumn^),flags=gcobject
+ */
+public static final native int GridViewColumn_HeaderTemplate(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(GridViewColumn^),flags=gcobject
+ * @param value cast=(DataTemplate^),flags=gcobject
+ */
+public static final native void GridViewColumn_HeaderTemplate(int sender, int value);
+/**
+ * @method flags=getter
+ * @param sender cast=(GridViewColumn^),flags=gcobject
+ */
+public static final native double GridViewColumn_Width(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(GridViewColumn^),flags=gcobject
+ */
+public static final native void GridViewColumn_Width(int sender, double value);
+/** @method accessor=GridViewColumn::WidthProperty,flags=const gcobject */
+public static final native int GridViewColumn_WidthProperty();
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(GridViewColumnCollection^),flags=gcobject
+ */
+public static final native int GridViewColumnCollection_default(int sender, int index);
+/**
+ * @method flags=cpp
+ * @param sender cast=(GridViewColumnCollection^),flags=gcobject
+ */
+public static final native void GridViewColumnCollection_Clear(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(GridViewColumnCollection^),flags=gcobject
+ */
+public static final native int GridViewColumnCollection_Count(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(GridViewColumnCollection ^),flags=gcobject
+ * @param item cast=(GridViewColumn^),flags=gcobject
+ */
+public static final native int GridViewColumnCollection_IndexOf(int sender, int item);
+/**
+ * @method flags=cpp
+ * @param sender cast=(GridViewColumnCollection^),flags=gcobject
+ * @param value cast=(GridViewColumn^),flags=gcobject
+ */
+public static final native void GridViewColumnCollection_Insert(int sender, int index, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(GridViewColumnCollection^),flags=gcobject
+ * @param value cast=(GridViewColumn^),flags=gcobject
+ */
+public static final native boolean GridViewColumnCollection_Remove(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(GridViewColumnHeader^),flags=gcobject
+ * @param value cast=(Object^),flags=gcobject
+ */
+public static final native void GridViewColumnHeader_Content(int sender, int value);
+/** @method accessor=GridViewRowPresenterBase::ColumnsProperty,flags=const gcobject */
+public static final native int GridViewRowPresenterBase_ColumnsProperty();
+/** @method accessor=GridViewHeaderRowPresenter::typeid,flags=const gcobject */
+public static final native int GridViewHeaderRowPresenter_typeid();
+/**
+ * @method flags=setter
+ * @param sender cast=(GridViewRowPresenter^),flags=gcobject
+ * @param value cast=(Object^),flags=gcobject
+ */
+public static final native void GridViewRowPresenter_Content(int sender, int value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(GridViewRowPresenter^),flags=gcobject
+ */
+public static final native int GridViewRowPresenter_Content(int sender);
+/** @method accessor=GridViewRowPresenter::typeid,flags=const gcobject */
+public static final native int GridViewRowPresenter_typeid();
+/**
+ * @method flags=setter
+ * @param sender cast=(GridViewRowPresenterBase^),flags=gcobject
+ * @param value cast=(GridViewColumnCollection^),flags=gcobject
+ */
+public static final native void GridViewRowPresenterBase_Columns(int sender, int value);
+/** @method flags=no_gen */
+public static final native int GCHandle_Alloc(int sender);
+/** @method flags=no_gen */
+public static final native void GCHandle_Free(int sender);
+/** @method flags=no_gen */
+public static final native void GCHandle_Dump();
+/** @method flags=no_gen */
+public static final native int GCHandle_ToHandle(int gchandle);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(HeaderedContentControl^),flags=gcobject
+ */
+public static final native int HeaderedContentControl_Header(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(HeaderedContentControl^),flags=gcobject
+ * @param header cast=(Object^),flags=gcobject
+ */
+public static final native void HeaderedContentControl_Header(int sender, int header);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(HeaderedItemsControl^),flags=gcobject
+ */
+public static final native int HeaderedItemsControl_Header(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(HeaderedItemsControl^),flags=gcobject
+ * @param value cast=(Object^),flags=gcobject
+ */
+public static final native void HeaderedItemsControl_Header(int sender, int value);  
+/** @method accessor=HeaderedItemsControl::HeaderTemplateProperty,flags=const gcobject */
+public static final native int HeaderedItemsControl_HeaderTemplateProperty();
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(System::Windows::Forms::HtmlDocument^),flags=gcobject
+ * @param string cast=(String^),flags=gcobject
+ */
+public static final native int HtmlDocument_InvokeScript(int sender, int string);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(HwndSource^),flags=gcobject
+ */
+public static final native int HwndSource_Handle(int sender);
+/**
+ * @method flags=adder
+ * @param sender cast=(Hyperlink^),flags=gcobject
+ * @param handler cast=(RoutedEventHandler^),flags=gcobject
+ */
+public static final native void Hyperlink_Click(int sender, int handler);
+/**
+ * @method flags=getter
+ * @param sender cast=(ICollection^),flags=gcobject
+ */
+public static final native int ICollection_Count(int sender);
+/**
+ * @method accessor=System::Drawing::Icon::FromHandle,flags=no_gen gcobject
+ * @param hIcon cast=(IntPtr),flags=gcobject
+ */
+public static final native int Icon_FromHandle(int hIcon);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(IEnumerable ^),flags=gcobject
+ */
+public static final native int IEnumerable_GetEnumerator(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(IEnumerator^),flags=gcobject
+ */
+public static final native int IEnumerator_Current(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(IEnumerator^),flags=gcobject
+ */
+public static final native boolean IEnumerator_MoveNext(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(IList^),flags=gcobject
+ * @param value cast=(Object^),flags=gcobject
+ */
+public static final native void IList_Add(int sender, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(IList^),flags=gcobject
+ */
+public static final native void IList_Clear(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(IList^),flags=gcobject
+ */
+public static final native int IList_default(int sender, int index);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(IList^),flags=gcobject
+ */
+public static final native int IList_GetEnumerator(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(IList^),flags=gcobject
+ * @param value cast=(Object^),flags=gcobject
+ */
+public static final native int IList_IndexOf(int sender, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(IList^),flags=gcobject
+ * @param value cast=(Object^),flags=gcobject
+ */
+public static final native void IList_Insert(int sender, int index, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(IList^),flags=gcobject
+ * @param value cast=(Object^),flags=gcobject
+ */
+public static final native void IList_Remove(int sender, int value);
+/**
+ * @method flags=getter
+ * @param sender cast=(IndexedGlyphRun^),flags=gcobject
+ */
+public static final native int IndexedGlyphRun_TextSourceCharacterIndex(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(IndexedGlyphRun^),flags=gcobject
+ */
+public static final native int IndexedGlyphRun_TextSourceLength(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(IndexedGlyphRun^),flags=gcobject
+ */
+public static final native int IndexedGlyphRun_GlyphRun(int sender);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(IEnumerable^),flags=gcobject
+ */
+public static final native int IndexedGlyphRunCollection_GetEnumerator(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(IEnumerator^),flags=gcobject
+ */
+public static final native int IndexedGlyphRunCollection_Current(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(InlineCollection^),flags=gcobject
+ * @param value cast=(Inline^),flags=gcobject
+ */
+public static final native void InlineCollection_Add(int sender, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(InlineCollection^),flags=gcobject
+ */
+public static final native void InlineCollection_Clear(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(InputEventArgs^),flags=gcobject
+ */
+public static final native int InputEventArgs_Timestamp(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Image^),flags=gcobject
+ */
+public static final native int Image_Source(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Image^),flags=gcobject
+ * @param imageSource cast=(ImageSource^),flags=gcobject
+ */
+public static final native void Image_Source(int sender, int imageSource);
+/** @method accessor=Image::SourceProperty,flags=const gcobject */
+public static final native int Image_SourceProperty();
+/** @method accessor=Image::StretchProperty,flags=const gcobject */
+public static final native int Image_StretchProperty();
+/**
+ * @method flags=setter
+ * @param sender cast=(Image^),flags=gcobject
+ * @param stretch cast=(Stretch)
+ */
+public static final native void Image_Stretch(int sender, int stretch);
+/** @method accessor=Image::typeid,flags=const gcobject */
+public static final native int Image_typeid();
+/**
+ * @method accessor=System::Windows::Interop::Imaging::CreateBitmapSourceFromHIcon,flags=gcobject
+ * @param hIcon cast=(IntPtr)
+ * @param sourceRect cast=(Int32Rect),flags=gcobject
+ * @param sizeOptions cast=(BitmapSizeOptions^),flags=gcobject
+ */
+public static final native int Imaging_CreateBitmapSourceFromHIcon(int hIcon, int sourceRect, int sizeOptions);
+/** @method accessor=ImageSource::typeid,flags=const gcobject */
+public static final native int ImageSource_typeid();
+/**
+ * @method flags=cpp
+ * @param value cast=(IntPtr^),flags=gcobject
+ */
+public static final native int IntPtr_ToInt32 (int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(ItemCollection^),flags=gcobject
+ * @param item cast=(Object^),flags=gcobject
+ */
+public static final native void ItemCollection_Add(int sender, int item);
+/**
+ * @method flags=cpp
+ * @param sender cast=(ItemCollection^),flags=gcobject
+ */
+public static final native void ItemCollection_Clear(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(ItemCollection^),flags=gcobject
+ */
+public static final native int ItemCollection_Count(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(ItemCollection^),flags=gcobject
+ */
+public static final native int ItemCollection_CurrentItem(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(ItemCollection^),flags=gcobject
+ */
+public static final native int ItemCollection_CurrentPosition(int sender);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(ItemCollection^),flags=gcobject
+ */
+public static final native int ItemCollection_GetItemAt(int sender, int index);
+/**
+ * @method flags=cpp
+ * @param sender cast=(ItemCollection^),flags=gcobject
+ * @param value cast=(Object^),flags=gcobject
+ */
+public static final native int ItemCollection_IndexOf(int sender, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(ItemCollection^),flags=gcobject
+ * @param value cast=(Object^),flags=gcobject
+ */
+public static final native void ItemCollection_Insert(int sender, int index, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(ItemCollection^),flags=gcobject
+ * @param item cast=(Object^),flags=gcobject
+ */
+public static final native void ItemCollection_Remove(int sender, int item);
+/**
+ * @method flags=cpp
+ * @param sender cast=(ItemCollection^),flags=gcobject
+ */
+public static final native void ItemCollection_RemoveAt(int sender, int index);
+/**
+ * @method flags=getter
+ * @param sender cast=(ItemsControl^),flags=gcobject
+ */
+public static final native boolean ItemsControl_HasItems(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(ItemsControl^),flags=gcobject
+ */
+public static final native int ItemsControl_Items(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(ItemsControl^),flags=gcobject
+ * @param value cast=(IEnumerable^),flags=gcobject
+ */
+public static final native void ItemsControl_ItemsSource(int sender, int value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(ItemsControl^),flags=gcobject
+ */
+public static final native int ItemsControl_ItemTemplate(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(ItemsControl^),flags=gcobject
+ * @param value cast=(DataTemplate^),flags=gcobject
+ */
+public static final native void ItemsControl_ItemTemplate(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(ItemsControl^),flags=gcobject
+ */
+public static final native void ItemsControl_IsTextSearchEnabled(int sender, boolean value);
+/** @method accessor=ItemsPresenter::typeid,flags=const gcobject */
+public static final native int ItemsPresenter_typeid();
+/**
+ * @method accessor=KeyInterop::VirtualKeyFromKey
+ * @param key cast=(Key)
+ */
+public static final native int KeyInterop_VirtualKeyFromKey(int key);
+/** @method accessor=Keyboard::FocusedElement,flags=const gcobject */
+public static final native int Keyboard_FocusedElement();
+/**
+ * @method accessor=Keyboard::Focus,flags=gcobject
+ * @param element cast=(IInputElement^),flags=gcobject
+ */
+public static final native int Keyboard_Focus(int element);
+/** @method accessor=Keyboard::Modifiers,flags=const */
+public static final native int Keyboard_Modifiers();
+/**
+ * @method accessor=KeyboardNavigation::GetIsTabStop
+ * @param element cast=(DependencyObject^),flags=gcobject
+ */
+public static final native boolean KeyboardNavigation_GetIsTabStop(int element);
+/**
+ * @method accessor=KeyboardNavigation::SetIsTabStop
+ * @param element cast=(DependencyObject^),flags=gcobject
+ */
+public static final native void KeyboardNavigation_SetIsTabStop(int element, boolean istabstop);
+/**
+ * @method accessor=KeyboardNavigation::SetDirectionalNavigation
+ * @param element cast=(DependencyObject^),flags=gcobject
+ * @param mode cast=(KeyboardNavigationMode)
+ */
+public static final native void KeyboardNavigation_SetDirectionalNavigation(int element, int mode);
+/**
+ * @method accessor=KeyboardNavigation::SetTabNavigation
+ * @param element cast=(DependencyObject^),flags=gcobject
+ * @param mode cast=(KeyboardNavigationMode)
+ */
+public static final native void KeyboardNavigation_SetTabNavigation(int element, int mode);
+/**
+ * @method accessor=KeyboardNavigation::SetControlTabNavigation
+ * @param element cast=(DependencyObject^),flags=gcobject
+ * @param mode cast=(KeyboardNavigationMode)
+ */
+public static final native void KeyboardNavigation_SetControlTabNavigation(int element, int mode);
+/**
+ * @method flags=getter
+ * @param sender cast=(KeyboardDevice^),flags=gcobject
+ */
+public static final native int KeyboardDevice_Modifiers(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(KeyboardEventArgs^),flags=gcobject
+ */
+public static final native int KeyboardEventArgs_KeyboardDevice(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(KeyEventArgs^),flags=gcobject
+ */
+public static final native boolean KeyEventArgs_IsDown(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(KeyEventArgs^),flags=gcobject
+ */
+public static final native boolean KeyEventArgs_IsRepeat(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(KeyEventArgs^),flags=gcobject
+ */
+public static final native boolean KeyEventArgs_IsToggled(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(KeyEventArgs^),flags=gcobject
+ */
+public static final native int KeyEventArgs_Key(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(KeyEventArgs^),flags=gcobject
+ */
+public static final native int KeyEventArgs_SystemKey(int sender);
+/** @method accessor=KeyTime::Uniform,flags=const gcobject */
+public static final native int KeyTime_Uniform();
+/**
+ * @method flags=getter
+ * @param sender cast=(Matrix^),flags=gcobject
+ */
+public static final native boolean Matrix_IsIdentity(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Matrix^),flags=gcobject
+ */
+public static final native void Matrix_Invert(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(Matrix^),flags=gcobject
+ */
+public static final native double Matrix_M11(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(Matrix^),flags=gcobject
+ */
+public static final native double Matrix_M12(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(Matrix^),flags=gcobject
+ */
+public static final native double Matrix_M21(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(Matrix^),flags=gcobject
+ */
+public static final native double Matrix_M22(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(Matrix^),flags=gcobject
+ */
+public static final native double Matrix_OffsetX(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(Matrix^),flags=gcobject
+ */
+public static final native double Matrix_OffsetY(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Matrix^),flags=gcobject
+ */
+public static final native void Matrix_M11(int sender, double value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Matrix^),flags=gcobject
+ */
+public static final native void Matrix_M12(int sender, double value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Matrix^),flags=gcobject
+ */
+public static final native void Matrix_M21(int sender, double value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Matrix^),flags=gcobject
+ */
+public static final native void Matrix_M22(int sender, double value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Matrix^),flags=gcobject
+ */
+public static final native void Matrix_OffsetX(int sender, double value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Matrix^),flags=gcobject
+ */
+public static final native void Matrix_OffsetY(int sender, double value);
+/**
+ * @method accessor=Matrix::Multiply,flags=gcobject
+ * @param m1 cast=(Matrix),flags=gcobject
+ * @param m2 cast=(Matrix),flags=gcobject
+ */
+public static final native int Matrix_Multiply(int m1, int m2);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Matrix^),flags=gcobject
+ */
+public static final native void Matrix_RotatePrepend(int sender, double angle);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Matrix^),flags=gcobject
+ */
+public static final native void Matrix_ScalePrepend(int sender, double scaleX, double scaleY);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Matrix^),flags=gcobject
+ */
+public static final native void Matrix_SetIdentity(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Matrix^),flags=gcobject
+ */
+public static final native void Matrix_SkewPrepend(int sender, double skewX, double skewY);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Matrix^),flags=gcobject
+ */
+public static final native void Matrix_TranslatePrepend(int sender, double tx, double ty);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(Matrix^),flags=gcobject
+ * @param point cast=(Point),flags=gcobject
+ */
+public static final native int Matrix_Transform(int sender, int point);
+/**
+ * @method accessor=MessageBox::Show
+ * @param messageBoxText cast=(String^),flags=gcobject
+ * @param caption cast=(String^),flags=gcobject
+ * @param button cast=(MessageBoxButton)
+ * @param icon cast=(MessageBoxImage)
+ * @param defaultResult cast=(MessageBoxResult)
+ */
+public static final native int MessageBox_Show (int messageBoxText, int caption, int button, int icon,	int defaultResult);
+/** @method accessor=Mouse::Captured,flags=const gcobject */
+public static final native int Mouse_Captured();
+/** @method accessor=Mouse::DirectlyOver,flags=const gcobject */
+public static final native int Mouse_DirectlyOver();
+/**
+ * @method accessor=Mouse::GetPosition,flags=gcobject
+ * @param relativeTo cast=(IInputElement^),flags=gcobject
+ */
+public static final native int Mouse_GetPosition(int relativeTo);
+/**
+ * @method accessor=Mouse::SetCursor
+ * @param cursor cast=(Cursor^),flags=gcobject
+ */
+public static final native boolean Mouse_SetCursor(int cursor);
+/** @method accessor=Mouse::LeftButton,flags=const */
+public static final native int Mouse_LeftButton();
+/** @method accessor=Mouse::RightButton,flags=const */
+public static final native int Mouse_RightButton();
+/** @method accessor=Mouse::MiddleButton,flags=const */
+public static final native int Mouse_MiddleButton();
+/** @method accessor=Mouse::XButton1,flags=const */
+public static final native int Mouse_XButton1();
+/** @method accessor=Mouse::XButton2,flags=const */
+public static final native int Mouse_XButton2();
+/**
+ * @method flags=getter
+ * @param sender cast=(MouseButtonEventArgs^),flags=gcobject
+ */
+public static final native int MouseButtonEventArgs_ButtonState(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(MouseButtonEventArgs^),flags=gcobject
+ */
+public static final native int MouseButtonEventArgs_ClickCount(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(MouseButtonEventArgs^),flags=gcobject
+ */
+public static final native int MouseButtonEventArgs_ChangedButton(int sender);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(MouseEventArgs^),flags=gcobject
+ * @param relativeTo cast=(IInputElement^),flags=gcobject
+ */
+public static final native int MouseEventArgs_GetPosition(int sender, int relativeTo);
+/**
+ * @method flags=getter
+ * @param sender cast=(MouseEventArgs^),flags=gcobject
+ */
+public static final native int MouseEventArgs_LeftButton(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(MouseEventArgs^),flags=gcobject
+ */
+public static final native int MouseEventArgs_MiddleButton(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(MouseEventArgs^),flags=gcobject
+ */
+public static final native int MouseEventArgs_RightButton(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(MouseEventArgs^),flags=gcobject
+ */
+public static final native int MouseEventArgs_XButton1(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(MouseEventArgs^),flags=gcobject
+ */
+public static final native int MouseEventArgs_XButton2(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(MouseWheelEventArgs^),flags=gcobject
+ */
+public static final native int MouseWheelEventArgs_Delta(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(ListBoxItem^),flags=gcobject
+ */
+public static final native boolean ListBoxItem_IsSelected(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(ListBoxItem^),flags=gcobject
+ */
+public static final native void ListBoxItem_IsSelected(int sender, boolean value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(ListBox^),flags=gcobject
+ * @param value cast=(Object^),flags=gcobject
+ */
+public static final native void ListBox_ScrollIntoView(int sender, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(ListBox^),flags=gcobject
+ */
+public static final native void ListBox_SelectAll(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(ListBox^),flags=gcobject
+ */
+public static final native int ListBox_SelectedItems(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(ListBox^),flags=gcobject
+ * @param value cast=(SelectionMode)
+ */
+public static final native void ListBox_SelectionMode(int sender, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(ListBox^),flags=gcobject
+ */
+public static final native void ListBox_UnselectAll(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(ListView^),flags=gcobject
+ * @param value cast=(ViewBase^),flags=gcobject
+ */
+public static final native void ListView_View(int sender, int value);
+/** @method accessor=ListViewItem::typeid,flags=const gcobject */
+public static final native int ListViewItem_typeid();
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(System::IO::MemoryStream^),flags=gcobject
+ */
+public static final native int MemoryStream_ToArray(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(System::IO::MemoryStream^),flags=gcobject
+ * @param buffer cast=(array<Byte>^),flags=gcobject
+ */
+public static final native void MemoryStream_Write(int sender, int buffer, int offset, int count);
+/**
+ * @method flags=setter
+ * @param sender cast=(Menu^),flags=gcobject
+ */
+public static final native void Menu_IsMainMenu(int sender, boolean value);
+/**
+ * @method flags=adder
+ * @param sender cast=(MenuItem^),flags=gcobject
+ * @param handler cast=(RoutedEventHandler^),flags=gcobject
+ */
+public static final native void MenuItem_Click(int sender, int handler);
+/**
+ * @method flags=setter
+ * @param sender cast=(MenuItem^),flags=gcobject
+ * @param value cast=(Image^),flags=gcobject
+ */
+public static final native void MenuItem_Icon(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(MenuItem^),flags=gcobject
+ * @param value cast=(String^),flags=gcobject
+ */
+public static final native void MenuItem_InputGestureText(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(MenuItem^),flags=gcobject
+ */
+public static final native void MenuItem_IsCheckable(int sender, boolean value);
+/**
+ * @method flags=getter
+ * @param sender cast=(MenuItem^),flags=gcobject
+ */
+public static final native boolean MenuItem_IsChecked(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(MenuItem^),flags=gcobject
+ */
+public static final native void MenuItem_IsChecked(int sender, boolean value);
+/**
+ * @method flags=adder
+ * @param sender cast=(MenuItem^),flags=gcobject
+ * @param handler cast=(RoutedEventHandler^),flags=gcobject
+ */
+public static final native void MenuItem_SubmenuClosed(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(MenuItem^),flags=gcobject
+ * @param handler cast=(RoutedEventHandler^),flags=gcobject
+ */
+public static final native void MenuItem_SubmenuOpened(int sender, int handler);
+/** @method accessor=Int32Rect::Empty,flags=const gcobject */
+public static final native int Int32Rect_Empty();
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(MatrixTransform^),flags=gcobject
+ */
+public static final native int MatrixTransform_Matrix(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(MatrixTransform^),flags=gcobject
+ * @param value cast=(Matrix),flags=gcobject
+ */
+public static final native void MatrixTransform_Matrix(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(System::Windows::Forms::NotifyIcon^),flags=gcobject
+ * @param value cast=(System::Drawing::Icon^),flags=gcobject
+ */
+public static final native void NotifyIcon_Icon(int sender, int value);
+/**
+ * @method flags=adder
+ * @param sender cast=(System::Windows::Forms::NotifyIcon^),flags=gcobject
+ * @param handler cast=(System::Windows::Forms::MouseEventHandler^),flags=gcobject
+ */
+public static final native void NotifyIcon_MouseDown(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(System::Windows::Forms::NotifyIcon^),flags=gcobject
+ * @param handler cast=(System::Windows::Forms::MouseEventHandler^),flags=gcobject
+ */
+public static final native void NotifyIcon_MouseUp(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(System::Windows::Forms::NotifyIcon^),flags=gcobject
+ * @param handler cast=(EventHandler^),flags=gcobject
+ */
+public static final native void NotifyIcon_DoubleClick(int sender, int handler);
+/**
+ * @method flags=setter
+ * @param sender cast=(System::Windows::Forms::NotifyIcon^),flags=gcobject
+ * @param value cast=(String^),flags=gcobject
+ */
+public static final native void NotifyIcon_Text(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(System::Windows::Forms::NotifyIcon^),flags=gcobject
+ */
+public static final native void NotifyIcon_Visible(int sender, boolean value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Object ^),flags=gcobject
+ * @param o cast=(Object ^),flags=gcobject
+ */
+public static final native boolean Object_Equals(int sender, int o);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(Object ^),flags=gcobject
+ */
+public static final native int Object_GetType(int sender);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(Object ^),flags=gcobject
+ */
+public static final native int Object_ToString(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(ObservableCollection<GridViewColumn^>^),flags=gcobject
+ */
+public static final native void ObservableCollectionGridViewColumn_Move(int sender, int oldIndex, int newIndex);
+/**
+ * @method flags=setter
+ * @param sender cast=(OpenFileDialog^),flags=gcobject
+ */
+public static final native void OpenFileDialog_Multiselect (int sender, boolean value);
+/**
+ * @method flags=setter
+ * @param sender cast=(RowDefinition^),flags=gcobject
+ * @param height cast=(GridLength),flags=gcobject
+ */
+public static final native void RowDefinition_Height(int sender, int height);
+/**
+ * @method flags=cpp
+ * @param sender cast=(RowDefinitionCollection^),flags=gcobject
+ * @param row cast=(RowDefinition^),flags=gcobject
+ */
+public static final native void RowDefinitionCollection_Add(int sender, int row);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Panel^),flags=gcobject
+ */
+public static final native int Panel_Background(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Panel^),flags=gcobject
+ * @param brush cast=(Brush^),flags=gcobject
+ */
+public static final native void Panel_Background(int sender, int brush);
+/** @method accessor=Panel::BackgroundProperty,flags=const gcobject */
+public static final native int Panel_BackgroundProperty();
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Panel^),flags=gcobject
+ */
+public static final native int Panel_Children(int sender);
+/**
+ * @method accessor=Panel::GetZIndex
+ * @param element cast=(UIElement^),flags=gcobject
+ */
+public static final native int Panel_GetZIndex(int element);
+/**
+ * @method accessor=Panel::SetZIndex
+ * @param element cast=(UIElement ^),flags=gcobject
+ */
+public static final native void Panel_SetZIndex(int element, int index);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(PasswordBox^),flags=gcobject
+ */
+public static final native int PasswordBox_Password(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(PasswordBox^),flags=gcobject
+ * @param value cast=(String^),flags=gcobject
+ */
+public static final native void PasswordBox_Password(int sender, int value);
+/**
+ * @method flags=getter
+ * @param sender cast=(PasswordBox^),flags=gcobject
+ */
+public static final native char PasswordBox_PasswordChar(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(PasswordBox^),flags=gcobject
+ */
+public static final native void PasswordBox_PasswordChar(int sender, char value);
+/**
+ * @method flags=getter
+ * @param sender cast=(PasswordBox^),flags=gcobject
+ */
+public static final native int PasswordBox_MaxLength(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(PasswordBox^),flags=gcobject
+ */
+public static final native void PasswordBox_MaxLength(int sender, int value);
+/**
+ * @method flags=adder
+ * @param sender cast=(PasswordBox^),flags=gcobject
+ * @param handler cast=(RoutedEventHandler^),flags=gcobject
+ */
+public static final native void PasswordBox_PasswordChanged(int sender, int handler);
+/**
+ * @method flags=cpp
+ * @param sender cast=(PasswordBox^),flags=gcobject
+ */
+public static final native void PasswordBox_Paste(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Path^),flags=gcobject
+ * @param geometry cast=(Geometry^),flags=gcobject
+ */
+public static final native void Path_Data(int sender, int geometry);
+/**
+ * @method flags=setter
+ * @param sender cast=(Path^),flags=gcobject
+ * @param brush cast=(Brush^),flags=gcobject
+ */
+public static final native void Path_Fill(int sender, int brush);
+/**
+ * @method flags=setter
+ * @param sender cast=(Path^),flags=gcobject
+ * @param value cast=(Stretch)
+ */
+public static final native void Path_Stretch(int sender, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(PathFigureCollection^),flags=gcobject
+ * @param element cast=(PathFigure^),flags=gcobject
+ */
+public static final native void PathFigureCollection_Add(int sender, int element);
+/**
+ * @method flags=getter
+ * @param sender cast=(PathFigureCollection^),flags=gcobject
+ */
+public static final native int PathFigureCollection_Count(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(PathFigure^),flags=gcobject
+ * @param point cast=(Point),flags=gcobject
+ */
+public static final native void PathFigure_StartPoint(int sender, int point);
+/**
+ * @method flags=setter
+ * @param sender cast=(PathFigure^),flags=gcobject
+ */
+public static final native void PathFigure_IsClosed(int sender, boolean closed);
+/**
+ * @method flags=getter
+ * @param sender cast=(PathFigure^),flags=gcobject
+ */
+public static final native boolean PathFigure_IsClosed(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(PathFigure^),flags=gcobject
+ */
+public static final native int PathFigure_Segments(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(PathFigure^),flags=gcobject
+ */
+public static final native int PathFigure_Segments(int sender, int index);
+/**
+ * @method flags=cpp
+ * @param sender cast=(PathGeometry^),flags=gcobject
+ * @param geometry cast=(Geometry^),flags=gcobject
+ */
+public static final native void PathGeometry_AddGeometry(int sender, int geometry);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(PathGeometry^),flags=gcobject
+ */
+public static final native int PathGeometry_Bounds(int sender);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(PathGeometry^),flags=gcobject
+ */
+public static final native int PathGeometry_Clone(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(PathGeometry^),flags=gcobject
+ * @param value cast=(FillRule)
+ */
+public static final native void PathGeometry_FillRule(int sender, int value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(PathGeometry^),flags=gcobject
+ */
+public static final native int PathGeometry_Figures(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(PathGeometry^),flags=gcobject
+ */
+public static final native int PathGeometry_Figures(int sender, int index);
+/**
+ * @method flags=cpp
+ * @param sender cast=(PathSegmentCollection^),flags=gcobject
+ * @param element cast=(PathSegment^),flags=gcobject
+ */
+public static final native void PathSegmentCollection_Add(int sender, int element);
+/**
+ * @method flags=getter
+ * @param sender cast=(PathSegmentCollection^),flags=gcobject
+ */
+public static final native int PathSegmentCollection_Count(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Pen^),flags=gcobject
+ */
+public static final native int Pen_Brush(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Pen^),flags=gcobject
+ * @param value cast=(Brush^),flags=gcobject
+ */
+public static final native void Pen_Brush(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Pen^),flags=gcobject
+ * @param value cast=(PenLineCap)
+ */
+public static final native void Pen_DashCap(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Pen^),flags=gcobject
+ * @param value cast=(DashStyle^),flags=gcobject
+ */
+public static final native void Pen_DashStyle(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Pen^),flags=gcobject
+ * @param value cast=(PenLineCap)
+ */
+public static final native void Pen_EndLineCap(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Pen^),flags=gcobject
+ * @param value cast=(PenLineCap)
+ */
+public static final native void Pen_StartLineCap(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Pen^),flags=gcobject
+ * @param value cast=(PenLineJoin)
+ */
+public static final native void Pen_LineJoin(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Pen^),flags=gcobject
+ */
+public static final native void Pen_MiterLimit(int sender, double value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Pen^),flags=gcobject
+ */
+public static final native void Pen_Thickness(int sender, double value);
+/**
+ * @method flags=getter
+ * @param sender cast=(PixelFormat^),flags=gcobject
+ */
+public static final native int PixelFormat_BitsPerPixel(int sender);
+/** @method accessor=PixelFormats::Bgr101010,flags=const gcobject */
+public static final native int PixelFormats_Bgr101010();
+/** @method accessor=PixelFormats::Bgr24,flags=const gcobject */
+public static final native int PixelFormats_Bgr24();
+/** @method accessor=PixelFormats::Bgr32,flags=const gcobject */
+public static final native int PixelFormats_Bgr32();
+/** @method accessor=PixelFormats::Bgr555,flags=const gcobject */
+public static final native int PixelFormats_Bgr555();
+/** @method accessor=PixelFormats::Bgr565,flags=const gcobject */
+public static final native int PixelFormats_Bgr565();
+/** @method accessor=PixelFormats::Bgra32,flags=const gcobject */
+public static final native int PixelFormats_Bgra32();
+/** @method accessor=PixelFormats::BlackWhite,flags=const gcobject */
+public static final native int PixelFormats_BlackWhite();
+/** @method accessor=PixelFormats::Default,flags=const gcobject */
+public static final native int PixelFormats_Default();
+/** @method accessor=PixelFormats::Indexed1,flags=const gcobject */
+public static final native int PixelFormats_Indexed1();
+/** @method accessor=PixelFormats::Indexed2,flags=const gcobject */
+public static final native int PixelFormats_Indexed2();
+/** @method accessor=PixelFormats::Indexed4,flags=const gcobject */
+public static final native int PixelFormats_Indexed4();
+/** @method accessor=PixelFormats::Indexed8,flags=const gcobject */
+public static final native int PixelFormats_Indexed8();
+/** @method accessor=PixelFormats::Pbgra32,flags=const gcobject */
+public static final native int PixelFormats_Pbgra32();
+/** @method accessor=PixelFormats::Rgb24,flags=const gcobject */
+public static final native int PixelFormats_Rgb24();
+/**
+ * @method flags=cpp
+ * @param sender cast=(PointCollection^),flags=gcobject
+ * @param point cast=(Point),flags=gcobject
+ */
+public static final native void PointCollection_Add(int sender, int point);
+/**
+ * @method flags=getter
+ * @param sender cast=(Point^),flags=gcobject
+ */
+public static final native double Point_X(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(Point^),flags=gcobject
+ */
+public static final native double Point_Y(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Popup^),flags=gcobject
+ */
+public static final native void Popup_AllowsTransparency(int sender, boolean value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Popup^),flags=gcobject
+ * @param child cast=(UIElement^),flags=gcobject
+ */
+public static final native void Popup_Child(int sender, int child);
+/**
+ * @method flags=getter gcobject
+ * @param sender cast=(Popup^),flags=gcobject
+ */
+public static final native int Popup_Child(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Popup^),flags=gcobject
+ */
+public static final native void Popup_HorizontalOffset(int sender, double value);
+/**
+ * @method flags=getter
+ * @param sender cast=(Popup^),flags=gcobject
+ */
+public static final native double Popup_HorizontalOffset(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Popup^),flags=gcobject
+ */
+public static final native void Popup_IsOpen(int sender, boolean value);
+/**
+ * @method flags=getter
+ * @param sender cast=(Popup^),flags=gcobject
+ */
+public static final native boolean Popup_IsOpen(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Popup^),flags=gcobject
+ */
+public static final native void Popup_VerticalOffset(int sender, double value);
+/**
+ * @method flags=getter
+ * @param sender cast=(Popup^),flags=gcobject
+ */
+public static final native double Popup_VerticalOffset(int sender);
+/**
+ * @method flags=adder
+ * @param sender cast=(Popup^),flags=gcobject
+ * @param handler cast=(EventHandler^),flags=gcobject
+ */
+public static final native void Popup_Closed(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(Popup^),flags=gcobject
+ * @param handler cast=(EventHandler^),flags=gcobject
+ */
+public static final native void Popup_Opened(int sender, int handler);
+/** @method accessor=PresentationSource::CurrentSources,flags=const gcobject */
+public static final native int PresentationSource_CurrentSources();
+/**
+ * @method accessor=PresentationSource::FromVisual,flags=gcobject
+ * @param visual cast=(Visual^),flags=gcobject
+ */
+public static final native int PresentationSource_FromVisual(int visual);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(PresentationSource^),flags=gcobject
+ */
+public static final native int PresentationSource_RootVisual(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(ProgressBar ^),flags=gcobject
+ */
+public static final native void ProgressBar_IsIndeterminate(int sender, boolean value);
+/**
+ * @method flags=getter
+ * @param sender cast=(ProgressBar ^),flags=gcobject
+ */
+public static final native void ProgressBar_IsIndeterminate(int sender);
+/**
+ * @method flags=setter
+ * @param handle cast=(ProgressBar ^),flags=gcobject
+ * @param value cast=(Orientation)
+ */
+public static final native void ProgressBar_Orientation(int handle, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(PropertyInfo^),flags=gcobject
+ * @param obj cast=(Object^),flags=gcobject
+ * @param value cast=(Object^),flags=gcobject
+ * @param indexArray cast=(array<Object^>^),flags=gcobject
+ */
+public static final native void PropertyInfo_SetValue(int sender, int obj, int value, int indexArray);
+/**
+ * @method accessor=PropertyInfo::SetValue,flags=cpp
+ * @param sender cast=(PropertyInfo^),flags=gcobject
+ * @param obj cast=(Object^),flags=gcobject
+ * @param value cast=(bool)
+ * @param indexArray cast=(array<Object^>^),flags=gcobject
+ */
+public static final native void PropertyInfo_SetValueBoolean(int sender, int obj, boolean value, int indexArray);
+/**
+ * @method flags=getter
+ * @param sender cast=(QueryContinueDragEventArgs^),flags=gcobject
+ */
+public static final native boolean QueryContinueDragEventArgs_EscapePressed(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(QueryContinueDragEventArgs^),flags=gcobject
+ * @param dragAction cast=(DragAction)
+ */
+public static final native void QueryContinueDragEventArgs_Action(int sender, int dragAction);
+/**
+ * @method flags=getter
+ * @param sender cast=(RangeBase ^),flags=gcobject
+ */
+public static final native double RangeBase_LargeChange(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(RangeBase ^),flags=gcobject
+ */
+public static final native void RangeBase_LargeChange(int sender, double value);
+/**
+ * @method flags=getter
+ * @param sender cast=(RangeBase ^),flags=gcobject
+ */
+public static final native double RangeBase_Maximum(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(RangeBase ^),flags=gcobject
+ */
+public static final native void  RangeBase_Maximum(int sender, double value);
+/**
+ * @method flags=getter
+ * @param sender cast=(RangeBase ^),flags=gcobject
+ */
+public static final native double RangeBase_Minimum(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(RangeBase ^),flags=gcobject
+ */
+public static final native void  RangeBase_Minimum(int sender, double value);
+/**
+ * @method flags=getter
+ * @param sender cast=(RangeBase ^),flags=gcobject
+ */
+public static final native double RangeBase_SmallChange(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(RangeBase ^),flags=gcobject
+ */
+public static final native void RangeBase_SmallChange(int sender, double value);
+/**
+ * @method flags=getter
+ * @param sender cast=(RangeBase ^),flags=gcobject
+ */
+public static final native double RangeBase_Value(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(RangeBase ^),flags=gcobject
+ */
+public static final native void RangeBase_Value(int sender, double value);
+/**
+ * @method flags=adder
+ * @param sender cast=(RangeBase ^),flags=gcobject
+ * @param handler cast=(RoutedPropertyChangedEventHandler<double> ^),flags=gcobject
+ */
+public static final native void RangeBase_ValueChanged(int sender, int handler);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Rect^),flags=gcobject
+ * @param point cast=(Point),flags=gcobject
+ */
+public static final native boolean Rect_Contains(int sender, int point);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Rect^),flags=gcobject
+ * @param rect cast=(Rect),flags=gcobject
+ */
+public static final native void Rect_Intersect(int sender, int rect);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Rect^),flags=gcobject
+ * @param rect cast=(Rect),flags=gcobject
+ */
+public static final native void Rect_Union(int sender, int rect);
+/**
+ * @method flags=getter
+ * @param sender cast=(Rect^),flags=gcobject
+ */
+public static final native double Rect_X(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Rect^),flags=gcobject
+ */
+public static final native void Rect_X(int sender, double value);
+/**
+ * @method flags=getter
+ * @param sender cast=(Rect^),flags=gcobject
+ */
+public static final native double Rect_Y(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Rect^),flags=gcobject
+ */
+public static final native void Rect_Y(int sender, double value);
+/**
+ * @method flags=getter
+ * @param sender cast=(Rect^),flags=gcobject
+ */
+public static final native double Rect_Width(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Rect^),flags=gcobject
+ */
+public static final native void Rect_Width(int sender, double value);
+/**
+ * @method flags=getter
+ * @param sender cast=(Rect^),flags=gcobject
+ */
+public static final native double Rect_Height(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Rect^),flags=gcobject
+ */
+public static final native void Rect_Height(int sender, double value);
+/**
+ * @method flags=getter
+ * @param sender cast=(System::Drawing::Rectangle^),flags=gcobject
+ */
+public static final native int Rectangle_X(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(System::Drawing::Rectangle^),flags=gcobject
+ */
+public static final native int Rectangle_Y(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(System::Drawing::Rectangle^),flags=gcobject
+ */
+public static final native int Rectangle_Width(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(System::Drawing::Rectangle^),flags=gcobject
+ */
+public static final native int Rectangle_Height(int sender);
+/** @method accessor=Registry::ClassesRoot,flags=const gcobject */
+public static final native int Registry_ClassesRoot();
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(RegistryKey^),flags=gcobject
+ * @param key cast=(String^),flags=gcobject
+ */
+public static final native int RegistryKey_OpenSubKey(int sender, int key);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(RegistryKey^),flags=gcobject
+ */
+public static final native int RegistryKey_GetSubKeyNames(int sender);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(RegistryKey^),flags=gcobject
+ * @param name cast=(String^),flags=gcobject
+ */
+public static final native int RegistryKey_GetValue(int sender, int name);
+/** @method accessor=RepeatBehavior::Forever,flags=const gcobject */
+public static final native int RepeatBehavior_Forever();
+/**
+ * @method flags=setter
+ * @param sender cast=(RelativeSource^),flags=gcobject
+ * @param type cast=(Type^),flags=gcobject
+ */
+public static final native void RelativeSource_AncestorType(int sender, int type);
+/**
+ * @method accessor=RenderOptions::GetBitmapScalingMode
+ * @param target cast=(DependencyObject^),flags=gcobject
+ */
+public static final native int RenderOptions_GetBitmapScalingMode(int target);
+/**
+ * @method accessor=RenderOptions::SetBitmapScalingMode
+ * @param target cast=(DependencyObject^),flags=gcobject
+ * @param mode cast=(BitmapScalingMode)
+ */
+public static final native void RenderOptions_SetBitmapScalingMode(int target, int mode);
+/**
+ * @method accessor=RenderOptions::SetEdgeMode
+ * @param target cast=(DependencyObject^),flags=gcobject
+ * @param edgeMode cast=(EdgeMode)
+ */
+public static final native void RenderOptions_SetEdgeMode(int target, int edgeMode);
+/**
+ * @method flags=cpp
+ * @param sender cast=(RenderTargetBitmap^),flags=gcobject
+ * @param visual cast=(Visual^),flags=gcobject
+ */
+public static final native void RenderTargetBitmap_Render(int sender, int visual);
+/**
+ * @method flags=setter
+ * @param sender cast=(RoutedEventArgs^),flags=gcobject
+ */
+public static final native void RoutedEventArgs_Handled(int sender, boolean handled);
+/** @method accessor=RoutedEventArgs::typeid,flags=const gcobject */
+public static final native int RoutedEventArgs_typeid();
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(RoutedEventArgs^),flags=gcobject
+ */
+public static final native int RoutedEventArgs_OriginalSource(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(RoutedEventArgs^),flags=gcobject
+ */
+public static final native int RoutedEventArgs_Source(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(RoutedPropertyChangedEventArgs<Object^>^),flags=gcobject
+ */
+public static final native int RoutedPropertyChangedEventArgs_NewValue(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(RoutedPropertyChangedEventArgs<Object^>^),flags=gcobject
+ */
+public static final native int RoutedPropertyChangedEventArgs_OldValue(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Run^),flags=gcobject
+ * @param value cast=(String^),flags=gcobject
+ */
+public static final native void Run_Text(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(SaveFileDialog^),flags=gcobject
+ */
+public static final native void SaveFileDialog_OverwritePrompt(int sender, boolean value);
+/** @method accessor=System::Windows::Forms::Screen::AllScreens,flags=const gcobject */
+public static final native int Screen_AllScreens();
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(System::Windows::Forms::Screen^),flags=gcobject
+ */
+public static final native int Screen_Bounds(int sender);
+/** @method accessor=System::Windows::Forms::Screen::PrimaryScreen,flags=const gcobject */
+public static final native int Screen_PrimaryScreen();
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(System::Windows::Forms::Screen^),flags=gcobject
+ */
+public static final native int Screen_WorkingArea(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(ScrollBar^),flags=gcobject
+ */
+public static final native int ScrollBar_Orientation(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(ScrollBar^),flags=gcobject
+ * @param orientation cast=(Orientation)
+ */
+public static final native void ScrollBar_Orientation(int sender, int orientation);
+/**
+ * @method flags=adder
+ * @param sender cast=(ScrollBar^),flags=gcobject
+ * @param handler cast=(ScrollEventHandler^),flags=gcobject
+ */
+public static final native void ScrollBar_Scroll(int sender, int handler);
+/**
+ * @method flags=getter
+ * @param sender cast=(ScrollBar^),flags=gcobject
+ */
+public static final native double ScrollBar_ViewportSize(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(ScrollBar^),flags=gcobject
+ */
+public static final native void ScrollBar_ViewportSize(int sender, double value);
+/** @method accessor=ScrollBar::typeid,flags=const gcobject */
+public static final native int ScrollBar_typeid();
+/**
+ * @method flags=getter
+ * @param sender cast=(ScrollEventArgs^),flags=gcobject
+ */
+public static final native int ScrollEventArgs_ScrollEventType(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(ScrollViewer^),flags=gcobject
+ */
+public static final native void ScrollViewer_ScrollToVerticalOffset(int sender, double offset);
+/**
+ * @method accessor=ScrollViewer::SetVerticalScrollBarVisibility
+ * @param sender cast=(DependencyObject^),flags=gcobject
+ * @param visibility cast=(ScrollBarVisibility)
+ */
+public static final native void ScrollViewer_SetVerticalScrollBarVisibility(int sender, int visibility);
+/**
+ * @method accessor=ScrollViewer::SetHorizontalScrollBarVisibility
+ * @param sender cast=(DependencyObject^),flags=gcobject
+ * @param visibility cast=(ScrollBarVisibility)
+ */
+public static final native void ScrollViewer_SetHorizontalScrollBarVisibility(int sender, int visibility);
+/** @method accessor=ScrollViewer::typeid,flags=const gcobject */
+public static final native int ScrollViewer_typeid();
+/**
+ * @method flags=getter
+ * @param sender cast=(ScrollViewer^),flags=gcobject
+ */
+public static final native double ScrollViewer_VerticalOffset(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Selector^),flags=gcobject
+ */
+public static final native void Selector_IsSynchronizedWithCurrentItem(int sender, boolean value);
+/**
+ * @method flags=getter
+ * @param sender cast=(Selector^),flags=gcobject
+ */
+public static final native int Selector_SelectedIndex(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Selector^),flags=gcobject
+ */
+public static final native void Selector_SelectedIndex(int sender, int value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Selector^),flags=gcobject
+ */
+public static final native int Selector_SelectedItem(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Selector^),flags=gcobject
+ */
+public static final native int Selector_SelectedValue(int sender);
+/**
+ * @method flags=adder
+ * @param sender cast=(Selector^),flags=gcobject
+ * @param handler cast=(SelectionChangedEventHandler^),flags=gcobject
+ */
+public static final native void Selector_SelectionChanged(int sender, int handler);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(SelectionChangedEventArgs^),flags=gcobject
+ */
+public static final native int SelectionChangedEventArgs_AddedItems(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(SelectionChangedEventArgs^),flags=gcobject
+ */
+public static final native int SelectionChangedEventArgs_RemovedItems(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(SetterBaseCollection^),flags=gcobject
+ * @param setter cast=(SetterBase^),flags=gcobject
+ */
+public static final native void SetterBaseCollection_Add(int sender, int setter);
+/**
+ * @method flags=setter
+ * @param sender cast=(Shape^),flags=gcobject
+ * @param brush cast=(Brush^),flags=gcobject
+ */
+public static final native void Shape_Fill(int sender, int brush);
+/**
+ * @method flags=setter
+ * @param sender cast=(Shape^),flags=gcobject
+ * @param brush cast=(Brush^),flags=gcobject
+ */
+public static final native void Shape_Stroke(int sender, int brush);
+/**
+ * @method flags=setter
+ * @param sender cast=(Shape^),flags=gcobject
+ */
+public static final native void Shape_StrokeThickness(int sender, double strokethickness);
+/**
+ * @method flags=getter
+ * @param sender cast=(Size ^),flags=gcobject
+ */
+public static final native double Size_Width(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(Size ^),flags=gcobject
+ */
+public static final native double Size_Height(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Size ^),flags=gcobject
+ */
+public static final native void Size_Width(int sender, double width);
+/**
+ * @method flags=setter
+ * @param sender cast=(Size ^),flags=gcobject
+ */
+public static final native void Size_Height(int sender, double height);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(SizeChangedEventArgs^),flags=gcobject
+ */
+public static final native int SizeChangedEventArgs_NewSize(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(SizeChangedEventArgs^),flags=gcobject
+ */
+public static final native int SizeChangedEventArgs_PreviousSize(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Slider ^),flags=gcobject
+ * @param value cast=(Orientation)
+ */
+public static final native void Slider_Orientation(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Slider^),flags=gcobject
+ */
+public static final native void Slider_TickFrequency(int sender, double value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Slider^),flags=gcobject
+ * @param value cast=(TickPlacement)
+ */
+public static final native void Slider_TickPlacement(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(StackPanel^),flags=gcobject
+ * @param orientation cast=(Orientation)
+ */
+public static final native void StackPanel_Orientation(int sender, int orientation);
+/** @method accessor=StackPanel::OrientationProperty,flags=const gcobject */
+public static final native int StackPanel_OrientationProperty();
+/** @method accessor=StackPanel::typeid,flags=const gcobject */
+public static final native int StackPanel_typeid();
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(StreamGeometry^),flags=gcobject
+ */
+public static final native int StreamGeometry_Open(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(StreamGeometryContext^),flags=gcobject
+ * @param startPoint cast=(Point),flags=gcobject
+ */
+public static final native void StreamGeometryContext_BeginFigure(int sender, int startPoint, boolean isFilled, boolean isClosed);
+/**
+ * @method flags=cpp
+ * @param sender cast=(StreamGeometryContext^),flags=gcobject
+ */
+public static final native void StreamGeometryContext_Close(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(StreamGeometryContext^),flags=gcobject
+ * @param startPoint cast=(Point),flags=gcobject
+ */
+public static final native void StreamGeometryContext_LineTo(int sender, int startPoint, boolean isStroked, boolean isSmoothJoin);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(String^),flags=gcobject
+ */
+public static final native int String_ToCharArray(int sender);
+/** @method accessor=String::typeid,flags=const gcobject */
+public static final native int String_typeid();
+/**
+ * @method flags=getter
+ * @param sender cast=(String^),flags=gcobject
+ */
+public static final native int String_Length(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Style^),flags=gcobject
+ */
+public static final native int Style_Setters(int sender);
+/**
+ * @method flags=getter no_gen gcobject
+ * @param sender cast=(SWTCanvas^),flags=gcobject
+ */
+public static final native int SWTCanvas_Visual(int sender);
+/**
+ * @method flags=no_gen setter
+ * @param sender cast=(SWTCanvas^),flags=gcobject
+ * @param visual cast=(DrawingVisual^),flags=gcobject
+ */
+public static final native void SWTCanvas_Visual(int sender, int visual);
+/** @method flags=no_gen */
+public static final native int SWTDockPanel_JNIRefProperty();
+/** @method flags=no_gen */
+public static final native int SWTDockPanel_typeid();
+/**
+ * @method flags=no_gen setter
+ * @param sender cast=(SWTTextRunProperties^),flags=gcobject
+ * @param brush cast=(Brush^),flags=gcobject
+ */
+public static final native void SWTTextRunProperties_ForegroundBrush(int sender, int brush);
+/** @method accessor=SystemColors::ControlBrush,flags=const gcobject */
+public static final native int SystemColors_ControlBrush();
+/** @method accessor=SystemColors::ControlColor,flags=const struct gcobject */
+public static final native int SystemColors_ControlColor();
+/** @method accessor=SystemColors::ControlTextBrush,flags=const gcobject */
+public static final native int SystemColors_ControlTextBrush();
+/** @method accessor=SystemColors::ControlTextColor,flags=const struct gcobject */
+public static final native int SystemColors_ControlTextColor();
+/** @method accessor=SystemColors::ControlDarkColor,flags=const struct gcobject */
+public static final native int SystemColors_ControlDarkColor();
+/** @method accessor=SystemColors::ControlLightColor,flags=const struct gcobject */
+public static final native int SystemColors_ControlLightColor();
+/** @method accessor=SystemColors::ControlLightLightColor,flags=const struct gcobject */
+public static final native int SystemColors_ControlLightLightColor();
+/** @method accessor=SystemColors::ControlDarkDarkColor,flags=const struct gcobject */
+public static final native int SystemColors_ControlDarkDarkColor();
+/** @method accessor=SystemColors::InfoColor,flags=const struct gcobject */
+public static final native int SystemColors_InfoColor();
+/** @method accessor=SystemColors::InfoTextColor,flags=const struct gcobject */
+public static final native int SystemColors_InfoTextColor();
+/** @method accessor=SystemColors::ActiveBorderColor,flags=const struct gcobject */
+public static final native int SystemColors_ActiveBorderColor();
+/** @method accessor=SystemColors::ActiveBorderBrush,flags=const gcobject */
+public static final native int SystemColors_ActiveBorderBrush();
+/** @method accessor=SystemColors::ActiveCaptionColor,flags=const struct gcobject */
+public static final native int SystemColors_ActiveCaptionColor();
+/** @method accessor=SystemColors::ActiveCaptionTextColor,flags=const struct gcobject */
+public static final native int SystemColors_ActiveCaptionTextColor();
+/** @method accessor=SystemColors::GradientActiveCaptionColor,flags=const struct gcobject */
+public static final native int SystemColors_GradientActiveCaptionColor();
+/** @method accessor=SystemColors::InactiveCaptionColor,flags=const struct gcobject */
+public static final native int SystemColors_InactiveCaptionColor();
+/** @method accessor=SystemColors::InactiveCaptionTextColor,flags=const struct gcobject */
+public static final native int SystemColors_InactiveCaptionTextColor();
+/** @method accessor=SystemColors::GradientInactiveCaptionColor,flags=const struct gcobject */
+public static final native int SystemColors_GradientInactiveCaptionColor();
+/** @method accessor=SystemColors::WindowColor,flags=const struct gcobject */
+public static final native int SystemColors_WindowColor();
+/** @method accessor=SystemColors::WindowTextColor,flags=const struct gcobject */
+public static final native int SystemColors_WindowTextColor();
+/** @method accessor=SystemColors::HighlightBrush,flags=const gcobject */
+public static final native int SystemColors_HighlightBrush();
+/** @method accessor=SystemColors::HighlightColor,flags=const struct gcobject */
+public static final native int SystemColors_HighlightColor();
+/** @method accessor=SystemColors::HighlightTextColor,flags=const struct gcobject */
+public static final native int SystemColors_HighlightTextColor();
+/** @method accessor=SystemFonts::MessageFontFamily,flags=const gcobject */
+public static final native int SystemFonts_MessageFontFamily();
+/** @method accessor=SystemFonts::MessageFontStyle,flags=const gcobject */
+public static final native int SystemFonts_MessageFontStyle();
+/** @method accessor=SystemParameters::MinimumHorizontalDragDistance,flags=const */
+public static final native double SystemParameters_MinimumHorizontalDragDistance();
+/** @method accessor=SystemParameters::MinimumVerticalDragDistance,flags=const */
+public static final native double SystemParameters_MinimumVerticalDragDistance();
+/** @method accessor=SystemParameters::PrimaryScreenHeight,flags=const */
+public static final native double SystemParameters_PrimaryScreenHeight();
+/** @method accessor=SystemParameters::PrimaryScreenWidth,flags=const */
+public static final native double SystemParameters_PrimaryScreenWidth();
+/** @method accessor=SystemParameters::VirtualScreenLeft,flags=const */
+public static final native double SystemParameters_VirtualScreenLeft();
+/** @method accessor=SystemParameters::VirtualScreenTop,flags=const */
+public static final native double SystemParameters_VirtualScreenTop();
+/** @method accessor=SystemParameters::VirtualScreenWidth,flags=const */
+public static final native double SystemParameters_VirtualScreenWidth();
+/** @method accessor=SystemParameters::VirtualScreenHeight,flags=const */
+public static final native double SystemParameters_VirtualScreenHeight();
+/** @method accessor=SystemParameters::VerticalScrollBarWidth,flags=const */
+public static final native double SystemParameters_VerticalScrollBarWidth();
+/** @method accessor=SystemParameters::VerticalScrollBarButtonHeight,flags=const */
+public static final native double SystemParameters_VerticalScrollBarButtonHeight();
+/** @method accessor=SystemParameters::HighContrast,flags=const */
+public static final native boolean SystemParameters_HighContrast();
+/** @method accessor=SystemParameters::HorizontalScrollBarHeight,flags=const */
+public static final native double SystemParameters_HorizontalScrollBarHeight();
+/** @method accessor=SystemParameters::HorizontalScrollBarButtonWidth,flags=const */
+public static final native double SystemParameters_HorizontalScrollBarButtonWidth();
+/** @method accessor=SystemParameters::WheelScrollLines,flags=const */
+public static final native int SystemParameters_WheelScrollLines();
+/** @method accessor=SystemParameters::WorkArea,flags=const gcobject */
+public static final native int SystemParameters_WorkArea();
+/** @method accessor=SystemParameters::ThinHorizontalBorderHeight,flags=const */
+public static final native double SystemParameters_ThinHorizontalBorderHeight();
+/** @method accessor=SystemParameters::ThinVerticalBorderWidth,flags=const */
+public static final native double SystemParameters_ThinVerticalBorderWidth();
+/** @method accessor=SystemFonts::MessageFontSize,flags=const */
+public static final native double SystemFonts_MessageFontSize();
+/** @method accessor=SystemFonts::MessageFontWeight,flags=const gcobject */
+public static final native int SystemFonts_MessageFontWeight();
+/**
+ * @method flags=setter
+ * @param sender cast=(TextBlock^),flags=gcobject
+ * @param brush cast=(Brush^),flags=gcobject
+ */
+public static final native void TextBlock_Background(int sender, int brush);
+/** @method accessor=TextBlock::BackgroundProperty,flags=const gcobject */
+public static final native int TextBlock_BackgroundProperty();
+/** @method accessor=TextBlock::FontFamilyProperty,flags=const gcobject */
+public static final native int TextBlock_FontFamilyProperty();
+/** @method accessor=TextBlock::FontStyleProperty,flags=const gcobject */
+public static final native int TextBlock_FontStyleProperty();
+/** @method accessor=TextBlock::FontWeightProperty,flags=const gcobject */
+public static final native int TextBlock_FontWeightProperty();
+/** @method accessor=TextBlock::FontStretchProperty,flags=const gcobject */
+public static final native int TextBlock_FontStretchProperty();
+/** @method accessor=TextBlock::FontSizeProperty,flags=const gcobject */
+public static final native int TextBlock_FontSizeProperty();
+/**
+ * @method flags=setter
+ * @param sender cast=(TextBlock^),flags=gcobject
+ * @param value cast=(FontFamily^),flags=gcobject
+ */
+public static final native void TextBlock_FontFamily(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(TextBlock^),flags=gcobject
+ * @param value cast=(FontStyle),flags=gcobject
+ */
+public static final native void TextBlock_FontStyle(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(TextBlock^),flags=gcobject
+ * @param value cast=(FontWeight),flags=gcobject
+ */
+public static final native void TextBlock_FontWeight(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(TextBlock^),flags=gcobject
+ * @param value cast=(FontStretch),flags=gcobject
+ */
+public static final native void TextBlock_FontStretch(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(TextBlock^),flags=gcobject
+ */
+public static final native void TextBlock_FontSize(int sender, double value);
+/**
+ * @method flags=setter
+ * @param sender cast=(TextBlock^),flags=gcobject
+ * @param brush cast=(Brush^),flags=gcobject
+ */
+public static final native void TextBlock_Foreground(int sender, int brush);
+/** @method accessor=TextBlock::ForegroundProperty,flags=const gcobject */
+public static final native int TextBlock_ForegroundProperty();
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(TextBounds^),flags=gcobject
+ */
+public static final native int TextBounds_Rectangle(int sender);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(IEnumerable^),flags=gcobject
+ */
+public static final native int TextBoundsCollection_GetEnumerator(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(IEnumerator^),flags=gcobject
+ */
+public static final native int TextBoundsCollection_Current(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(System::Collections::Generic::IList<TextTabProperties^>^),flags=gcobject
+ * @param tab cast=(TextTabProperties^),flags=gcobject
+ */
+public static final native void TextTabPropertiesCollection_Add(int sender, int tab);
+/**
+ * @method flags=setter
+ * @param sender cast=(TabControl^),flags=gcobject
+ * @param value cast=(Dock)
+ */
+public static final native void TabControl_TabStripPlacement(int sender, int value);
+/**
+ * @method flags=getter
+ * @param sender cast=(TabItem^),flags=gcobject
+ */
+public static final native boolean TabItem_IsSelected(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(TextBlock^),flags=gcobject
+ */
+public static final native int TextBlock_Inlines(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(TextBlock^),flags=gcobject
+ */
+public static final native int TextBlock_Text(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(TextBlock^),flags=gcobject
+ * @param str cast=(String^),flags=gcobject
+ */
+public static final native void TextBlock_Text(int sender, int str);
+/** @method accessor=TextBlock::TextProperty,flags=const gcobject */
+public static final native int TextBlock_TextProperty();
+/** @method accessor=TextBlock::typeid,flags=const gcobject */
+public static final native int TextBlock_typeid();
+/**
+ * @method flags=getter
+ * @param sender cast=(TextBox^),flags=gcobject
+ */
+public static final native int TextBox_CaretIndex(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(TextBox^),flags=gcobject
+ */
+public static final native void TextBox_CaretIndex(int sender, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(TextBox^),flags=gcobject
+ */
+public static final native int TextBox_GetFirstVisibleLineIndex(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(TextBox^),flags=gcobject
+ */
+public static final native int TextBox_GetLineIndexFromCharacterIndex(int sender, int value);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(TextBox^),flags=gcobject
+ */
+public static final native int TextBox_GetRectFromCharacterIndex(int sender, int value);
+/**
+ * @method flags=getter
+ * @param sender cast=(TextBox^),flags=gcobject
+ */
+public static final native int TextBox_LineCount(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(TextBox^),flags=gcobject
+ */
+public static final native int TextBox_MaxLength(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(TextBox^),flags=gcobject
+ */
+public static final native void TextBox_MaxLength(int sender, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(TextBox^),flags=gcobject
+ */
+public static final native void TextBox_ScrollToLine(int sender, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(TextBox^),flags=gcobject
+ */
+public static final native void TextBox_Select(int sender, int start, int length);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(TextBox^),flags=gcobject
+ */
+public static final native int TextBox_SelectedText(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(TextBox^),flags=gcobject
+ * @param value cast=(String^),flags=gcobject
+ */
+public static final native void TextBox_SelectedText(int sender, int value);
+/**
+ * @method flags=getter
+ * @param sender cast=(TextBox^),flags=gcobject
+ */
+public static final native int TextBox_SelectionLength(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(TextBox^),flags=gcobject
+ */
+public static final native void TextBox_SelectionLength(int sender, int value);
+/**
+ * @method flags=getter
+ * @param sender cast=(TextBox^),flags=gcobject
+ */
+public static final native int TextBox_SelectionStart(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(TextBox^),flags=gcobject
+ */
+public static final native void TextBox_SelectionStart(int sender, int value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(TextBox^),flags=gcobject
+ */
+public static final native int TextBox_Text(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(TextBox^),flags=gcobject
+ * @param value cast=(String^),flags=gcobject
+ */
+public static final native void TextBox_Text(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(TextBox^),flags=gcobject
+ * @param value cast=(TextWrapping)
+ */
+public static final native void TextBox_TextWrapping(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(TextBoxBase^),flags=gcobject
+ */
+public static final native void TextBoxBase_AcceptsReturn(int sender, boolean value);
+/**
+ * @method flags=setter
+ * @param sender cast=(TextBoxBase^),flags=gcobject
+ */
+public static final native void TextBoxBase_AcceptsTab(int sender, boolean value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(TextBoxBase^),flags=gcobject
+ * @param value cast=(String^),flags=gcobject
+ */
+public static final native void TextBoxBase_AppendText(int sender, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(TextBoxBase^),flags=gcobject
+ */
+public static final native void TextBoxBase_Copy(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(TextBoxBase^),flags=gcobject
+ * @param value cast=(ScrollBarVisibility)
+ */
+public static final native void TextBoxBase_HorizontalScrollBarVisibility(int sender, int value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(TextBoxBase^),flags=gcobject
+ */
+public static final native void TextBoxBase_Cut(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(TextBoxBase^),flags=gcobject
+ */
+public static final native boolean TextBoxBase_IsReadOnly(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(TextBoxBase^),flags=gcobject
+ */
+public static final native void TextBoxBase_IsReadOnly(int sender, boolean value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(TextBoxBase^),flags=gcobject
+ */
+public static final native void TextBoxBase_Paste(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(TextBoxBase^),flags=gcobject
+ */
+public static final native void TextBoxBase_ScrollToEnd(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(TextBoxBase^),flags=gcobject
+ */
+public static final native void TextBoxBase_ScrollToVerticalOffset(int sender, double value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(TextBoxBase^),flags=gcobject
+ */
+public static final native void TextBoxBase_SelectAll(int sender);
+/**
+ * @method flags=adder
+ * @param sender cast=(TextBoxBase^),flags=gcobject
+ * @param handler cast=(TextChangedEventHandler^),flags=gcobject
+ */
+public static final native void TextBoxBase_TextChanged(int sender, int handler);
+/**
+ * @method flags=getter
+ * @param sender cast=(TextBoxBase^),flags=gcobject
+ */
+public static final native double TextBoxBase_VerticalOffset(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(TextBoxBase^),flags=gcobject
+ * @param value cast=(ScrollBarVisibility)
+ */
+public static final native void TextBoxBase_VerticalScrollBarVisibility(int sender, int value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(TextCompositionEventArgs^),flags=gcobject
+ */
+public static final native int TextCompositionEventArgs_ControlText(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(TextCompositionEventArgs^),flags=gcobject
+ */
+public static final native void TextCompositionEventArgs_Handled(int sender, boolean value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(TextCompositionEventArgs^),flags=gcobject
+ */
+public static final native int TextCompositionEventArgs_SystemText(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(TextCompositionEventArgs^),flags=gcobject
+ */
+public static final native int TextCompositionEventArgs_Text(int sender);
+/** @method accessor=TextDecorations::Underline,flags=const gcobject */
+public static final native int TextDecorations_Underline();
+/** @method accessor=TextDecorations::Strikethrough,flags=const gcobject */
+public static final native int TextDecorations_Strikethrough();
+/**
+ * @method flags=cpp
+ * @param sender cast=(TextDecorationCollection^),flags=gcobject
+ * @param decoration cast=(TextDecoration^),flags=gcobject
+ */
+public static final native void TextDecorationCollection_Add(int sender, int decoration); 
+/** @method accessor=TextFormatter::Create,flags=gcobject */
+public static final native int TextFormatter_Create();
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(TextFormatter^),flags=gcobject
+ * @param textSource cast=(TextSource^),flags=gcobject
+ * @param paragraphProperties cast=(TextParagraphProperties^),flags=gcobject
+ * @param previousLineBreak cast=(TextLineBreak^),flags=gcobject
+ */
+public static final native int TextFormatter_FormatLine(int sender, int textSource, int firstCharIndex, double paragraphWidth, int paragraphProperties, int previousLineBreak);
+/**
+ * @method flags=getter
+ * @param sender cast=(TextLine^),flags=gcobject
+ */
+public static final native double TextLine_Baseline(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(TextLine^),flags=gcobject
+ */
+public static final native double TextLine_Height(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(TextLine^),flags=gcobject
+ */
+public static final native int TextLine_NewlineLength(int sender);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(TextLine^),flags=gcobject
+ * @param characterHit cast=(CharacterHit),flags=gcobject
+ */
+public static final native int TextLine_GetNextCaretCharacterHit(int sender, int characterHit);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(TextLine^),flags=gcobject
+ * @param characterHit cast=(CharacterHit),flags=gcobject
+ */
+public static final native int TextLine_GetPreviousCaretCharacterHit(int sender, int characterHit);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(TextLine^),flags=gcobject
+ */
+public static final native int TextLine_GetTextLineBreak(int sender);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(TextLine^),flags=gcobject
+ */
+public static final native int TextLine_GetTextBounds(int sender, int firstTextSourceCharacterIndex, int textLength);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(TextLine^),flags=gcobject
+ */
+public static final native int TextLine_GetCharacterHitFromDistance(int sender, double distance);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(TextLine^),flags=gcobject
+ */
+public static final native int TextLine_GetIndexedGlyphRuns(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(TextLine^),flags=gcobject
+ * @param characterHit cast=(CharacterHit),flags=gcobject
+ */
+public static final native double TextLine_GetDistanceFromCharacterHit(int sender, int characterHit);
+/**
+ * @method flags=getter
+ * @param sender cast=(TextLine^),flags=gcobject
+ */
+public static final native int TextLine_Length(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(TextLine^),flags=gcobject
+ */
+public static final native double TextLine_Start(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(TextLine^),flags=gcobject
+ */
+public static final native double TextLine_Width(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(TextLine^),flags=gcobject
+ */
+public static final native double TextLine_WidthIncludingTrailingWhitespace(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(TextLine^),flags=gcobject
+ * @param drawContext cast=(DrawingContext^),flags=gcobject
+ * @param origin cast=(Point),flags=gcobject
+ * @param invertAxes cast=(InvertAxes)
+ */
+public static final native void TextLine_Draw(int sender, int drawContext, int origin, int invertAxes);
+/**
+ * @method flags=getter
+ * @param sender cast=(Thickness^),flags=gcobject
+ */
+public static final native double Thickness_Left(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(Thickness^),flags=gcobject
+ */
+public static final native double Thickness_Right(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(Thickness^),flags=gcobject
+ */
+public static final native double Thickness_Top(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(Thickness^),flags=gcobject
+ */
+public static final native double Thickness_Bottom(int sender);
+/** @method accessor=Thumb::DragDeltaEvent,flags=const gcobject */
+public static final native int Thumb_DragDeltaEvent();
+/**
+ * @method flags=setter
+ * @param sender cast=(TileBrush^),flags=gcobject
+ * @param mode cast=(TileMode)
+ */
+public static final native void TileBrush_TileMode(int sender, int mode);
+/**
+ * @method flags=setter
+ * @param sender cast=(TileBrush^),flags=gcobject
+ * @param stretch cast=(Stretch)
+ */
+public static final native void TileBrush_Stretch(int sender, int stretch);
+/**
+ * @method flags=setter
+ * @param sender cast=(TileBrush^),flags=gcobject
+ * @param viewport cast=(Rect),flags=gcobject
+ */
+public static final native void TileBrush_Viewport(int sender, int viewport);
+/**
+ * @method flags=setter
+ * @param sender cast=(TileBrush^),flags=gcobject
+ * @param mode cast=(BrushMappingMode)
+ */
+public static final native void TileBrush_ViewportUnits(int sender, int mode);
+/**
+ * @method flags=setter
+ * @param sender cast=(TileBrush^),flags=gcobject
+ * @param value cast=(AlignmentX)
+ */
+public static final native void TileBrush_AlignmentX(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(TileBrush^),flags=gcobject
+ * @param value cast=(AlignmentY)
+ */
+public static final native void TileBrush_AlignmentY(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Timeline^),flags=gcobject
+ */
+public static final native void Timeline_AutoReverse(int sender, boolean autoReverse);
+/**
+ * @method flags=setter
+ * @param sender cast=(Timeline^),flags=gcobject
+ * @param duration cast=(Duration),flags=gcobject
+ */
+public static final native void Timeline_Duration(int sender, int duration);
+/**
+ * @method flags=setter
+ * @param sender cast=(Timeline^),flags=gcobject
+ * @param behavior cast=(RepeatBehavior),flags=gcobject
+ */
+public static final native void Timeline_RepeatBehavior(int sender, int behavior);
+/** @method accessor=TimeSpan::FromMilliseconds(arg0),flags=const gcobject */
+public static final native int TimeSpan_FromMilliseconds(double ms);
+/**
+ * @method flags=adder
+ * @param sender cast=(ToggleButton^),flags=gcobject
+ * @param handler cast=(RoutedEventHandler^),flags=gcobject
+ */
+public static final native void ToggleButton_Checked(int sender, int handler);
+/** @method accessor=ToggleButton::CheckedEvent,flags=const gcobject */
+public static final native int ToggleButton_CheckedEvent();
+/** @method accessor=ToggleButton::IndeterminateEvent,flags=const gcobject */
+public static final native int ToggleButton_IndeterminateEvent ();
+/**
+ * @method flags=getter
+ * @param sender cast=(ToggleButton ^),flags=gcobject
+ */
+public static final native boolean ToggleButton_IsChecked(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(ToggleButton ^),flags=gcobject
+ */
+public static final native void ToggleButton_IsChecked(int sender, boolean value);
+/**
+ * @method flags=no_gen setter
+ * @param sender cast=(ToggleButton^),flags=gcobject
+ */
+public static final native void ToggleButton_IsCheckedNullSetter(int sender);
+/** @method accessor=ToggleButton::IsCheckedProperty,flags=const gcobject */
+public static final native int ToggleButton_IsCheckedProperty();
+/** @method accessor=ToggleButton::IsThreeStateProperty,flags=const gcobject */
+public static final native int ToggleButton_IsThreeStateProperty();
+/**
+ * @method flags=adder
+ * @param sender cast=(ToggleButton^),flags=gcobject
+ * @param handler cast=(RoutedEventHandler^),flags=gcobject
+ */
+public static final native void ToggleButton_Unchecked(int sender, int handler);
+/** @method accessor=ToggleButton::UncheckedEvent,flags=const gcobject */
+public static final native int ToggleButton_UncheckedEvent();
+/**
+ * @method flags=getter
+ * @param sender cast=(ToolBar^),flags=gcobject
+ */
+public static final native int ToolBar_Band(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(ToolBar^),flags=gcobject
+ */
+public static final native void ToolBar_Band(int sender, int value);
+/**
+ * @method flags=getter
+ * @param sender cast=(ToolBar^),flags=gcobject
+ */
+public static final native int ToolBar_BandIndex(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(ToolBar^),flags=gcobject
+ */
+public static final native void ToolBar_BandIndex(int sender, int value);
+/** @method accessor=ToolBar::BandProperty,flags=const gcobject */
+public static final native int ToolBar_BandProperty();
+/** @method accessor=ToolBar::ButtonStyleKey,flags=const gcobject */
+public static final native int ToolBar_ButtonStyleKey();
+/** @method accessor=ToolBar::CheckBoxStyleKey,flags=const gcobject */
+public static final native int ToolBar_CheckBoxStyleKey();
+/** @method accessor=ToolBar::RadioButtonStyleKey,flags=const gcobject */
+public static final native int ToolBar_RadioButtonStyleKey();
+/** @method accessor=ToolBar::SeparatorStyleKey,flags=const gcobject */
+public static final native int ToolBar_SeparatorStyleKey();
+/**
+ * @method flags=getter
+ * @param sender cast=(ToolBar^),flags=gcobject
+ */
+public static final native boolean ToolBar_HasOverflowItems(int sender);
+/**
+ * @method accessor=ToolBar::SetOverflowMode
+ * @param element cast=(DependencyObject^),flags=gcobject
+ * @param mode cast=(OverflowMode)
+ */
+public static final native void ToolBar_SetOverflowMode(int element, int mode);
+/** @method accessor=ToolBar::typeid,flags=const gcobject */
+public static final native int ToolBar_typeid();
+/**
+ * @method flags=setter
+ * @param sender cast=(ToolBarTray^),flags=gcobject
+ * @param value cast=(Brush^),flags=gcobject
+ */
+public static final native void ToolBarTray_Background(int sender, int value);
+/**
+ * @method flags=getter
+ * @param sender cast=(ToolBarTray^),flags=gcobject
+ */
+public static final native boolean ToolBarTray_IsLocked(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(ToolBarTray^),flags=gcobject
+ */
+public static final native void ToolBarTray_IsLocked(int sender, boolean value);
+/**
+ * @method flags=setter
+ * @param sender cast=(ToolBarTray^),flags=gcobject
+ * @param value cast=(Orientation)
+ */
+public static final native void ToolBarTray_Orientation(int sender, int value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(ToolBarTray^),flags=gcobject
+ */
+public static final native int ToolBarTray_ToolBars(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(TransformCollection^),flags=gcobject
+ * @param transform cast=(Transform^),flags=gcobject
+ */
+public static final native void TransformCollection_Add(int sender, int transform);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(Transform^),flags=gcobject
+ */
+public static final native int Transform_Clone(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(TransformGroup^),flags=gcobject
+ */
+public static final native int TransformGroup_Children(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(TreeView^),flags=gcobject
+ */
+public static final native int TreeView_SelectedItem(int sender);
+/**
+ * @method flags=adder
+ * @param sender cast=(TreeView^),flags=gcobject
+ * @param handler cast=(RoutedPropertyChangedEventHandler<Object^>^),flags=gcobject
+ */
+public static final native void TreeView_SelectedItemChanged(int sender, int handler);
+/** @method accessor=TreeView::typeid,flags=const gcobject */
+public static final native int TreeView_typeid();
+/** @method accessor=TreeViewItem::CollapsedEvent,flags=const gcobject */
+public static final native int TreeViewItem_CollapsedEvent();
+/** @method accessor=TreeViewItem::ExpandedEvent,flags=const gcobject */
+public static final native int TreeViewItem_ExpandedEvent();
+/**
+ * @method flags=getter
+ * @param sender cast=(TreeViewItem^),flags=gcobject
+ */
+public static final native boolean TreeViewItem_IsExpanded(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(TreeViewItem^),flags=gcobject
+ */
+public static final native void TreeViewItem_IsExpanded(int sender, boolean value);
+/**
+ * @method flags=getter
+ * @param sender cast=(TreeViewItem^),flags=gcobject
+ */
+public static final native boolean TreeViewItem_IsSelected(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(TreeViewItem^),flags=gcobject
+ */
+public static final native void TreeViewItem_IsSelected(int sender, boolean value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(TreeViewItem^),flags=gcobject
+ */
+public static final native int TreeViewItem_HeaderTemplate(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(TreeViewItem^),flags=gcobject
+ * @param value cast=(DataTemplate^),flags=gcobject
+ */
+public static final native void TreeViewItem_HeaderTemplate(int sender, int value);
+/** @method accessor=TreeViewItem::HeaderTemplateProperty,flags=const gcobject */
+public static final native int TreeViewItem_HeaderTemplateProperty();
+/** @method accessor=TreeViewItem::typeid,flags=const gcobject */
+public static final native int TreeViewItem_typeid();
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(Type^),flags=gcobject
+ * @param name cast=(String^),flags=gcobject
+ * @param bindingFlags cast=(BindingFlags)
+ */
+public static final native int Type_GetProperty(int sender, int name, int bindingFlags);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(TypeConverter^),flags=gcobject
+ * @param string cast=(String^),flags=gcobject
+ */
+public static final native int TypeConverter_ConvertFromString(int sender, int string);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(TypeConverter^),flags=gcobject
+ * @param object cast=(Object^),flags=gcobject
+ */
+public static final native int TypeConverter_ConvertToString(int sender, int object);
+/**
+ * @method accessor=TypeDescriptor::GetConverter,flags=gcobject
+ * @param object cast=(Object^),flags=gcobject
+ */
+public static final native int TypeDescriptor_GetConverter(int object);
+/**
+ * @method flags=struct gcobject getter
+ * @param sender cast=(Typeface^),flags=gcobject
+ */
+public static final native int Typeface_FontFamily(int sender);
+/**
+ * @method flags=struct gcobject getter
+ * @param sender cast=(Typeface^),flags=gcobject
+ */
+public static final native int Typeface_Style(int sender);
+/**
+ * @method flags=struct gcobject getter
+ * @param sender cast=(Typeface^),flags=gcobject
+ */
+public static final native int Typeface_Weight(int sender);
+/**
+ * @method flags=struct gcobject getter
+ * @param sender cast=(Typeface^),flags=gcobject
+ */
+public static final native int Typeface_Stretch(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(System::Collections::Generic::ICollection<Typeface^>^),flags=gcobject
+ */
+public static final native int TypefaceCollection_Count(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(System::Collections::Generic::IEnumerator<Typeface^>^),flags=gcobject
+ */
+public static final native int TypefaceCollection_Current(int sender);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(System::Collections::Generic::IEnumerable<Typeface^>^),flags=gcobject
+ */
+public static final native int TypefaceCollection_GetEnumerator(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Type^),flags=gcobject
+ * @param object cast=(Object^),flags=gcobject
+ */
+public static final native boolean Type_IsInstanceOfType(int sender, int object);
+/**
+ * @method flags=struct gcobject getter
+ * @param sender cast=(Type^),flags=gcobject
+ */
+public static final native int Type_FullName(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(UIElementCollection^),flags=gcobject
+ */
+public static final native int UIElementCollection_default(int sender, int index);
+/**
+ * @method flags=cpp
+ * @param sender cast=(UIElementCollection^),flags=gcobject
+ * @param child cast=(UIElement^),flags=gcobject
+ */
+public static final native void UIElementCollection_Add(int sender, int child);
+/**
+ * @method flags=cpp
+ * @param sender cast=(UIElementCollection^),flags=gcobject
+ * @param child cast=(UIElement^),flags=gcobject
+ */
+public static final native void UIElementCollection_Insert(int sender, int index, int child);
+/**
+ * @method flags=cpp
+ * @param sender cast=(UIElementCollection^),flags=gcobject
+ * @param child cast=(UIElement^),flags=gcobject
+ */
+public static final native int UIElementCollection_IndexOf(int sender, int child);
+/**
+ * @method flags=cpp
+ * @param sender cast=(UIElementCollection^),flags=gcobject
+ * @param child cast=(UIElement^),flags=gcobject
+ */
+public static final native boolean UIElementCollection_Contains(int sender, int child);
+/**
+ * @method flags=cpp
+ * @param sender cast=(UIElementCollection^),flags=gcobject
+ */
+public static final native void UIElementCollection_Clear(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(UIElementCollection^),flags=gcobject
+ */
+public static final native int UIElementCollection_Count(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(IEnumerator^),flags=gcobject
+ */
+public static final native int UIElementCollection_Current(int sender);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(IEnumerable^),flags=gcobject
+ */
+public static final native int UIElementCollection_GetEnumerator(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(UIElementCollection^),flags=gcobject
+ * @param child cast=(UIElement^),flags=gcobject
+ */
+public static final native void UIElementCollection_Remove(int sender, int child);
+/**
+ * @method flags=cpp
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param event cast=(RoutedEvent^),flags=gcobject
+ * @param handler cast=(Delegate^),flags=gcobject
+ */
+public static final native void UIElement_AddHandler(int sender, int event, int handler, boolean handledEventsToo);
+/**
+ * @method flags=setter
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native void UIElement_AllowDrop(int sender, boolean value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native boolean UIElement_CaptureMouse(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param geometry cast=(Geometry^),flags=gcobject
+ */
+public static final native void UIElement_Clip(int sender, int geometry);
+/**
+ * @method flags=setter
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native void UIElement_ClipToBounds(int sender, boolean value);
+/** @method accessor=UIElement::ClipToBoundsProperty,flags=const gcobject */
+public static final native int UIElement_ClipToBoundsProperty();
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param handler cast=(DragEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_DragEnter(int sender, int handler);
+/** @method accessor=UIElement::DragEnterEvent,flags=const gcobject */
+public static final native int UIElement_DragEnterEvent();
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param handler cast=(DragEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_DragLeave(int sender, int handler);
+/** @method accessor=UIElement::DragLeaveEvent,flags=const gcobject */
+public static final native int UIElement_DragLeaveEvent();
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param handler cast=(DragEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_DragOver(int sender, int handler);
+/** @method accessor=UIElement::DragOverEvent,flags=const gcobject */
+public static final native int UIElement_DragOverEvent();
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param handler cast=(DragEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_Drop(int sender, int handler);
+/** @method accessor=UIElement::DropEvent,flags=const gcobject */
+public static final native int UIElement_DropEvent();
+/**
+ * @method flags=cpp
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native boolean UIElement_Focus(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native void UIElement_Focusable (int sender, boolean value);
+/**
+ * @method flags=cpp
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param dp cast=(DependencyProperty^),flags=gcobject
+ * @param animation cast=(AnimationTimeline^),flags=gcobject
+ */
+public static final native void UIElement_BeginAnimation(int sender, int dp, int animation);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param point cast=(Point),flags=gcobject
+ */
+public static final native int UIElement_InputHitTest(int sender, int point);
+/**
+ * @method flags=cpp
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native void UIElement_InvalidateVisual(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native boolean UIElement_IsEnabled(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native void UIElement_IsEnabled(int sender, boolean enable);
+/**
+ * @method flags=getter
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native boolean UIElement_IsFocused(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native void UIElement_IsHitTestVisible(int sender, boolean value);
+/**
+ * @method flags=getter
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native boolean UIElement_IsKeyboardFocused(int sender); 
+/**
+ * @method flags=getter
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native boolean UIElement_IsKeyboardFocusWithin(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native boolean UIElement_IsMeasureValid(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native boolean UIElement_IsMouseOver(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native boolean UIElement_IsVisible(int sender);
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param handler cast=(KeyEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_KeyUp(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param handler cast=(KeyEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_KeyDown(int sender, int handler);
+/**
+ * @method flags=struct gcobject getter
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native int UIElement_DesiredSize(int sender);
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param handler cast=(GiveFeedbackEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_GiveFeedback(int sender, int handler);
+/** @method accessor=UIElement::GiveFeedbackEvent,flags=const gcobject */
+public static final native int UIElement_GiveFeedbackEvent();
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param handler cast=(EventHandler^),flags=gcobject
+ */
+public static final native void UIElement_LayoutUpdated(int sender, int handler);
+/**
+ * @method flags=cpp
+ * @param sender cast=(UIElement ^),flags=gcobject
+ * @param availableSize cast=(Size),flags=gcobject
+ */
+public static final native void UIElement_Measure(int sender, int availableSize);
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param handler cast=(MouseButtonEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_MouseDown(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param handler cast=(MouseEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_MouseEnter(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param handler cast=(MouseEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_MouseLeave(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param handler cast=(MouseEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_MouseMove(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param handler cast=(MouseWheelEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_MouseWheel(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param handler cast=(MouseButtonEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_MouseUp(int sender, int handler);
+/**
+ * @method flags=cpp
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param request cast=(TraversalRequest^),flags=gcobject
+ */
+public static final native void UIElement_MoveFocus(int sender, int request);
+/**
+ * @method flags=getter
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native double UIElement_Opacity(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native void UIElement_Opacity(int sender, double value);
+/** @method accessor=UIElement::OpacityProperty,flags=const gcobject */
+public static final native int UIElement_OpacityProperty();
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param handler cast=(KeyEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_PreviewKeyDown(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param handler cast=(KeyEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_PreviewKeyUp(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement ^),flags=gcobject
+ * @param handler cast=(MouseButtonEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_PreviewMouseDown(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement ^),flags=gcobject
+ * @param handler cast=(MouseEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_PreviewMouseMove(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement ^),flags=gcobject
+ * @param handler cast=(MouseWheelEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_PreviewMouseWheel(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement ^),flags=gcobject
+ * @param handler cast=(MouseButtonEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_PreviewMouseUp(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param handler cast=(KeyboardFocusChangedEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_PreviewGotKeyboardFocus(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param handler cast=(KeyboardFocusChangedEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_PreviewLostKeyboardFocus(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param handler cast=(KeyboardFocusChangedEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_LostKeyboardFocus(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param handler cast=(TextCompositionEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_PreviewTextInput(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param handler cast=(QueryContinueDragEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_QueryContinueDrag(int sender, int handler);
+/** @method accessor=UIElement::QueryContinueDragEvent,flags=const gcobject */
+public static final native int UIElement_QueryContinueDragEvent();
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native int UIElement_RenderSize(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native void UIElement_ReleaseMouseCapture(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param routedEvent cast=(RoutedEvent^),flags=gcobject
+ * @param handler cast=(Delegate^),flags=gcobject
+ */
+public static final native void UIElement_RemoveHandler(int sender, int routedEvent, int handler);
+/**
+ * @method flags=setter
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native void UIElement_SnapsToDevicePixels(int sender, boolean value);
+/**
+ * @method flags=adder
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param handler cast=(TextCompositionEventHandler^),flags=gcobject
+ */
+public static final native void UIElement_TextInput(int sender, int handler);
+/**
+ * @method flags=struct cpp gcobject
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param point cast=(Point),flags=gcobject
+ * @param relativeTo cast=(UIElement^),flags=gcobject
+ */
+public static final native int UIElement_TranslatePoint(int sender, int point, int relativeTo);
+/**
+ * @method flags=cpp
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native void UIElement_UpdateLayout(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native byte UIElement_Visibility(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param visible cast=(Visibility)
+ */
+public static final native void UIElement_Visibility(int sender, byte visible);
+/** @method accessor=UIElement::VisibilityProperty,flags=const gcobject */
+public static final native int UIElement_VisibilityProperty();
+/**
+ * @method flags=getter
+ * @param sender cast=(VirtualizingStackPanel^),flags=gcobject
+ */
+public static final native double VirtualizingStackPanel_VerticalOffset(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Visual^),flags=gcobject
+ * @param descendant cast=(DependencyObject^),flags=gcobject
+ */
+public static final native boolean Visual_IsAncestorOf(int sender, int descendant);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Visual^),flags=gcobject
+ * @param ancestor cast=(DependencyObject^),flags=gcobject
+ */
+public static final native boolean Visual_IsDescendantOf(int sender, int ancestor);
+/**
+ * @method flags=struct cpp gcobject
+ * @param sender cast=(Visual^),flags=gcobject
+ * @param point cast=(Point),flags=gcobject
+ */
+public static final native int Visual_PointToScreen(int sender, int point);
+/**
+ * @method flags=struct cpp gcobject
+ * @param sender cast=(Visual^),flags=gcobject
+ * @param point cast=(Point),flags=gcobject
+ */
+public static final native int Visual_PointFromScreen(int sender, int point);
+/**
+ * @method accessor=VisualTreeHelper::GetChild,flags=gcobject
+ * @param sender cast=(DependencyObject^),flags=gcobject
+ */
+public static final native int VisualTreeHelper_GetChild(int sender, int value);
+/**
+ * @method accessor=VisualTreeHelper::GetChildrenCount
+ * @param sender cast=(DependencyObject^),flags=gcobject
+ */
+public static final native int VisualTreeHelper_GetChildrenCount(int sender);
+/**
+ * @method accessor=VisualTreeHelper::GetParent,flags=gcobject
+ * @param sender cast=(DependencyObject^),flags=gcobject
+ */
+public static final native int VisualTreeHelper_GetParent(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(System::Windows::Forms::WebBrowser^),flags=gcobject
+ */
+public static final native boolean WebBrowser_CanGoBack(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(System::Windows::Forms::WebBrowser^),flags=gcobject
+ */
+public static final native boolean WebBrowser_CanGoForward(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(System::Windows::Forms::WebBrowser^),flags=gcobject
+ */
+public static final native int WebBrowser_Document(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(System::Windows::Forms::WebBrowser^),flags=gcobject
+ */
+public static final native int WebBrowser_DocumentText(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(System::Windows::Forms::WebBrowser^),flags=gcobject
+ * @param string cast=(String^),flags=gcobject
+ */
+public static final native void WebBrowser_DocumentText(int sender, int string);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(System::Windows::Forms::WebBrowser^),flags=gcobject
+ */
+public static final native int WebBrowser_DocumentTitle(int sender);
+/**
+ * @method flags=adder
+ * @param sender cast=(System::Windows::Forms::WebBrowser^),flags=gcobject
+ * @param handler cast=(System::Windows::Forms::WebBrowserDocumentCompletedEventHandler^),flags=gcobject
+ */
+public static final native void WebBrowser_DocumentCompleted(int sender, int handler);
+/**
+ * @method flags=cpp
+ * @param sender cast=(System::Windows::Forms::WebBrowser^),flags=gcobject
+ */
+public static final native boolean WebBrowser_GoBack(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(System::Windows::Forms::WebBrowser^),flags=gcobject
+ */
+public static final native boolean WebBrowser_GoForward(int sender);
+/**
+ * @method flags=adder
+ * @param sender cast=(System::Windows::Forms::WebBrowser^),flags=gcobject
+ * @param handler cast=(System::Windows::Forms::WebBrowserNavigatingEventHandler^),flags=gcobject
+ */
+public static final native void WebBrowser_Navigating(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(System::Windows::Forms::WebBrowser^),flags=gcobject
+ * @param handler cast=(System::Windows::Forms::WebBrowserNavigatedEventHandler^),flags=gcobject
+ */
+public static final native void WebBrowser_Navigated(int sender, int handler);
+/**
+ * @method flags=cpp
+ * @param sender cast=(System::Windows::Forms::WebBrowser^),flags=gcobject
+ * @param urlString cast=(String^),flags=gcobject
+ */
+public static final native void WebBrowser_Navigate(int sender, int urlString);
+/**
+ * @method flags=adder
+ * @param sender cast=(System::Windows::Forms::WebBrowser^),flags=gcobject
+ * @param handler cast=(System::Windows::Forms::WebBrowserProgressChangedEventHandler^),flags=gcobject
+ */
+public static final native void WebBrowser_ProgressChanged(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(System::Windows::Forms::WebBrowser^),flags=gcobject
+ * @param handler cast=(EventHandler^),flags=gcobject
+ */
+public static final native void WebBrowser_DocumentTitleChanged(int sender, int handler);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(System::Windows::Forms::WebBrowser^),flags=gcobject
+ */
+public static final native int WebBrowser_StatusText(int sender);
+/**
+ * @method flags=adder
+ * @param sender cast=(System::Windows::Forms::WebBrowser^),flags=gcobject
+ * @param handler cast=(EventHandler^),flags=gcobject
+ */
+public static final native void WebBrowser_StatusTextChanged(int sender, int handler);
+/**
+ * @method flags=getter
+ * @param sender cast=(System::Windows::Forms::WebBrowser^),flags=gcobject
+ */
+public static final native int WebBrowser_ReadyState(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(System::Windows::Forms::WebBrowser^),flags=gcobject
+ */
+public static final native void WebBrowser_Refresh(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(System::Windows::Forms::WebBrowser^),flags=gcobject
+ */
+public static final native void WebBrowser_Stop(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(System::Windows::Forms::WebBrowser^),flags=gcobject
+ */
+public static final native void WebBrowser_ScriptErrorsSuppressed(int sender, boolean value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(System::Windows::Forms::WebBrowser^),flags=gcobject
+ */
+public static final native int WebBrowser_Url(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(System::Windows::Forms::WebBrowserNavigatingEventArgs^),flags=gcobject
+ */
+public static final native int WebBrowserNavigatingEventArgs_Url(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(System::Windows::Forms::WebBrowserNavigatedEventArgs^),flags=gcobject
+ */
+public static final native int WebBrowserNavigatedEventArgs_Url(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(System::Windows::Forms::WebBrowserDocumentCompletedEventArgs^),flags=gcobject
+ */
+public static final native int WebBrowserDocumentCompletedEventArgs_Url(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(System::Windows::Forms::WebBrowserProgressChangedEventArgs^),flags=gcobject
+ */
+public static final native long WebBrowserProgressChangedEventArgs_CurrentProgress(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(System::Windows::Forms::WebBrowserProgressChangedEventArgs^),flags=gcobject
+ */
+public static final native long WebBrowserProgressChangedEventArgs_MaximumProgress(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(WindowCollection^),flags=gcobject
+ */
+public static final native int WindowCollection_Count(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(IEnumerator^),flags=gcobject
+ */
+public static final native int WindowCollection_Current(int sender);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(IEnumerable^),flags=gcobject
+ */
+public static final native int WindowCollection_GetEnumerator(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Window^),flags=gcobject
+ */
+public static final native void Window_Activate(int sender);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Window^),flags=gcobject
+ */
+public static final native void Window_Close(int sender);
+/**
+ * @method flags=adder
+ * @param sender cast=(Window^),flags=gcobject
+ * @param handler cast=(CancelEventHandler^),flags=gcobject
+ */
+public static final native void Window_Closing(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(Window^),flags=gcobject
+ * @param handler cast=(EventHandler^),flags=gcobject
+ */
+public static final native void Window_Activated(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(Window^),flags=gcobject
+ * @param handler cast=(EventHandler^),flags=gcobject
+ */
+public static final native void Window_Deactivated(int sender, int handler);
+/**
+ * @method flags=adder
+ * @param sender cast=(Window^),flags=gcobject
+ * @param handler cast=(EventHandler^),flags=gcobject
+ */
+public static final native void Window_LocationChanged(int sender, int handler);
+/**
+ * @method accessor=Window::GetWindow,flags=gcobject
+ * @param dependencyObject cast=(DependencyObject^),flags=gcobject
+ */
+public static final native int Window_GetWindow(int dependencyObject);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Window^),flags=gcobject
+ */
+public static final native void Window_Hide(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Window^),flags=gcobject
+ * @param owner cast=(Window^),flags=gcobject
+ */
+public static final native void Window_Owner(int sender, int owner);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Window^),flags=gcobject
+ */
+public static final native void Window_Show(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(Window^),flags=gcobject
+ */
+public static final native double Window_Left(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(Window ^),flags=gcobject
+ */
+public static final native double Window_Top(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Window^),flags=gcobject
+ */
+public static final native void Window_Left(int sender, double left);
+/**
+ * @method flags=setter
+ * @param sender cast=(Window ^),flags=gcobject
+ */
+public static final native void Window_Top(int sender, double top);
+/**
+ * @method flags=setter
+ * @param sender cast=(Window^),flags=gcobject
+ * @param icon cast=(ImageSource^),flags=gcobject
+ */
+public static final native void Window_Icon(int sender, int icon);
+/**
+ * @method flags=getter
+ * @param sender cast=(Window^),flags=gcobject
+ */
+public static final native boolean Window_IsActive(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(Window^),flags=gcobject
+ */
+public static final native int Window_WindowState (int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Window^),flags=gcobject
+ * @param windowState cast=(WindowState)
+ */
+public static final native void Window_WindowState (int sender, int windowState);
+/**
+ * @method flags=setter
+ * @param sender cast=(Window^),flags=gcobject
+ */
+public static final native void Window_AllowsTransparency(int sender, boolean value);
+/**
+ * @method flags=getter
+ * @param sender cast=(Window^),flags=gcobject
+ */
+public static final native int Window_WindowStyle(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Window^),flags=gcobject
+ * @param value cast=(WindowStyle)
+ */
+public static final native void Window_WindowStyle(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Window^),flags=gcobject
+ */
+public static final native void Window_ShowInTaskbar(int sender, boolean value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Window^),flags=gcobject
+ * @param value cast=(ResizeMode)
+ */
+public static final native void Window_ResizeMode(int sender, int value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Window^),flags=gcobject
+ */
+public static final native int Window_Title(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Window^),flags=gcobject
+ * @param string cast=(String^),flags=gcobject
+ */
+public static final native void Window_Title(int sender, int string);
+/**
+ * @method flags=setter
+ * @param sender cast=(System::Windows::Forms::Integration::WindowsFormsHost^),flags=gcobject
+ * @param child cast=(System::Windows::Forms::Control^),flags=gcobject
+ */
+public static final native void WindowsFormsHost_Child(int sender, int child);
+/**
+ * @method flags=cpp
+ * @param sender cast=(WriteableBitmap^),flags=gcobject
+ * @param sourceRect cast=(Int32Rect),flags=gcobject
+ * @param buffer cast=(IntPtr)
+ */
+public static final native void WriteableBitmap_WritePixels(int sender, int sourceRect, byte[] buffer, int bufferSize, int stride);
+
+/** @method flags=gcnew */
+public static final native int gcnew_AccessText();
+/** @method flags=gcnew */
+public static final native int gcnew_Application();
+/** @method flags=gcnew */
+public static final native int gcnew_ArrayList(int count);
+/**
+ * @method flags=gcnew
+ * @param point cast=(Point),flags=gcobject
+ * @param size cast=(Size),flags=gcobject
+ * @param sweepDirection cast=(SweepDirection)
+ */
+public static final native int gcnew_ArcSegment(int point, int size,  double rotationAngle, boolean isLargeArc, int sweepDirection, boolean isStroked);
+/** @method flags=gcnew */
+public static final native int gcnew_BitmapImage();
+/**
+ * @method flags=gcnew
+ * @param point1 cast=(Point),flags=gcobject
+ * @param point2 cast=(Point),flags=gcobject
+ * @param point3 cast=(Point),flags=gcobject
+ */
+public static final native int gcnew_BezierSegment(int point1, int point2, int point3, boolean isScrolled);
+/**
+ * @method flags=gcnew
+ * @param propertyPath cast=(String^),flags=gcobject
+ */
+public static final native int gcnew_Binding(int propertyPath);
+/**
+ * @method flags=gcnew
+ * @param colors cast=(System::Collections::Generic::IList<Color>^),flags=gcobject
+ */
+public static final native int gcnew_BitmapPalette(int colors);
+/**
+ * @method accessor=System::Drawing::Bitmap,flags=gcnew
+ * @param format cast=(System::Drawing::Imaging::PixelFormat)
+ * @param scan0 cast=(IntPtr)
+ */
+public static final native int gcnew_Bitmap(int width, int height, int stride, int format, byte[] scan0);
+/** @method flags=gcnew */
+public static final native int gcnew_Button();
+/** @method flags=gcnew */
+public static final native int gcnew_Canvas();
+/** @method flags=gcnew */
+public static final native int gcnew_CheckBox();
+/** @method accessor=System::Windows::Forms::ColorDialog,flags=gcnew */
+public static final native int gcnew_ColorDialog();
+/** @method accessor=System::Collections::Generic::List<Color>,flags=gcnew */
+public static final native int gcnew_ColorList(int count);
+/** @method flags=gcnew */
+public static final native int gcnew_ComboBox();
+/** @method flags=gcnew */
+public static final native int gcnew_ComboBoxItem();
+/** @method flags=gcnew */
+public static final native int gcnew_ControlTemplate();
+/**
+ * @method flags=gcnew
+ * @param source cast=(BitmapSource^),flags=gcobject
+ * @param sourceRect cast=(Int32Rect),flags=gcobject
+ */
+public static final native int gcnew_CroppedBitmap(int source, int sourceRect);
+/** @method flags=gcnew */
+public static final native int gcnew_CharacterHit(int firstCharacterIndex, int trailingLength);
+/**
+ * @method flags=gcnew
+ * @param geometryCombineMode cast=(GeometryCombineMode)
+ * @param geometry1 cast=(Geometry^),flags=gcobject
+ * @param geometry2 cast=(Geometry^),flags=gcobject
+ */
+public static final native int gcnew_CombinedGeometry(int geometryCombineMode, int geometry1, int geometry2); 
+/** @method flags=gcnew */
+public static final native int gcnew_CompositeCollection();
+/** @method flags=gcnew */
+public static final native int gcnew_ContextMenu();
+/** @method flags=gcnew */
+public static final native int gcnew_ContentControl(); 
+/** @method flags=gcnew */
+public static final native int gcnew_ColumnDefinition();
+/** @method flags=gcnew */
+public static final native int gcnew_DrawingVisual();
+/** @method flags=gcnew */
+public static final native int gcnew_DoubleAnimationUsingKeyFrames();
+/**
+ * @method flags=gcnew
+ * @param dashes cast=(DoubleCollection^),flags=gcobject
+ */
+public static final native int gcnew_DashStyle(int dashes, double offset);
+/** @method flags=gcnew */
+public static final native int gcnew_DataObject();
+/** @method flags=gcnew */
+public static final native int gcnew_DataTemplate();
+/** @method flags=gcnew */
+public static final native int gcnew_DispatcherFrame();
+/** @method flags=gcnew */
+public static final native int gcnew_DispatcherTimer();
+/**
+ * @method flags=gcnew
+ * @param keytime cast=(KeyTime),flags=gcobject
+ */
+public static final native int gcnew_DiscreteDoubleKeyFrame(double value, int keytime);
+/** @method flags=gcnew */
+public static final native int gcnew_DoubleCollection(int capacity);
+/**
+ * @method flags=gcnew
+ * @param timespan cast=(TimeSpan),flags=gcobject
+ */
+public static final native int gcnew_Duration(int timespan);
+/** @method flags=gcnew */
+public static final native int gcnew_Expander();
+/**
+ * @method flags=gcnew
+ * @param rect cast=(Rect),flags=gcobject
+ */
+public static final native int gcnew_EllipseGeometry(int rect);
+/**
+ * @method accessor=System::IO::FileInfo,flags=gcnew
+ * @param path cast=(String^),flags=gcobject
+ */
+public static final native int gcnew_FileInfo(int path);
+/** @method accessor=System::Windows::Forms::FolderBrowserDialog,flags=gcnew */
+public static final native int gcnew_FolderBrowserDialog();
+/**
+ * @method accessor=System::Drawing::Font,flags=gcnew
+ * @param fontFamily cast=(String^),flags=gcobject
+ * @param fontStyle cast=(System::Drawing::FontStyle)
+ */
+public static final native int gcnew_Font(int fontFamily, float size, int fontStyle);
+/** @method accessor=System::Windows::Forms::FontDialog,flags=gcnew */
+public static final native int gcnew_FontDialog();
+/**
+ * @method flags=gcnew
+ * @param str cast=(String^),flags=gcobject
+ */
+public static final native int gcnew_FontFamily(int str);
+/**
+ * @method flags=gcnew
+ * @param source cast=(BitmapSource^),flags=gcobject
+ * @param destinationFormat cast=(PixelFormat),flags=gcobject
+ * @param destinationPalette cast=(BitmapPalette^),flags=gcobject
+ */
+public static final native int gcnew_FormatConvertedBitmap(int source, int destinationFormat, int destinationPalette, double alphaThreshold);
+/**
+ * @method flags=gcnew
+ * @param string cast=(String^),flags=gcobject
+ * @param culture cast=(CultureInfo^),flags=gcobject
+ * @param flowDirection cast=(FlowDirection)
+ * @param typeface cast=(Typeface^),flags=gcobject
+ * @param brush cast=(Brush^),flags=gcobject
+ */
+public static final native int gcnew_FormattedText(int string, int culture, int flowDirection, int typeface, double emSize, int brush);
+/** @method flags=gcnew */
+public static final native int gcnew_Frame();
+/**
+ * @method flags=gcnew
+ * @param type cast=(Type^),flags=gcobject
+ */
+public static final native int gcnew_FrameworkElementFactory(int type);
+/**
+ * @method flags=gcnew
+ * @param type cast=(Type^),flags=gcobject
+ * @param name cast=(String^),flags=gcobject
+ */
+public static final native int gcnew_FrameworkElementFactory(int type, int name);
+/** @method flags=gcnew */
+public static final native int gcnew_GeometryGroup();
+/** @method flags=gcnew */
+public static final native int gcnew_Grid();
+/**
+ * @method flags=gcnew
+ * @param type cast=(GridUnitType)
+ */
+public static final native int gcnew_GridLength(double value, int type);
+/** @method flags=gcnew */
+public static final native int gcnew_GridView();
+/** @method flags=gcnew */
+public static final native int gcnew_GridViewColumn();
+/** @method flags=gcnew */
+public static final native int gcnew_GridViewColumnCollection();
+/** @method flags=gcnew */
+public static final native int gcnew_GridViewColumnHeader();
+/** @method flags=gcnew */
+public static final native int gcnew_GroupBox();
+/**
+ * @method flags=gcnew
+ * @param inline cast=(Inline^),flags=gcobject
+ */
+public static final native int gcnew_Hyperlink(int inline);
+//public static final native int gcnew_Icon(int stream);
+/**
+ * @method flags=gcnew
+ * @param imageSource cast=(ImageSource^),flags=gcobject
+ */
+public static final native int gcnew_ImageBrush(int imageSource);
+/** @method flags=gcnew */
+public static final native int gcnew_Image();
+/** @method flags=gcnew */
+public static final native int gcnew_Int32(int value);
+/** @method flags=gcnew */
+public static final native int gcnew_Int32Rect(int x, int y, int width, int height);
+/** @method flags=gcnew */
+public static final native int gcnew_IntPtr(int value);
+/** @method flags=gcnew */
+public static final native int gcnew_Label();
+/**
+ * @method flags=gcnew
+ * @param startColor cast=(Color),flags=gcobject
+ * @param endColor cast=(Color),flags=gcobject
+ */
+public static final native int gcnew_LinearGradientBrush(int startColor, int endColor, double angle);
+/**
+ * @method flags=gcnew
+ * @param startColor cast=(Color),flags=gcobject
+ * @param endColor cast=(Color),flags=gcobject
+ * @param startPoint cast=(Point),flags=gcobject
+ * @param endPonit cast=(Point),flags=gcobject
+ */
+public static final native int gcnew_LinearGradientBrush(int startColor, int endColor, int startPoint, int endPonit);
+/**
+ * @method flags=gcnew
+ * @param point cast=(Point),flags=gcobject
+ */
+public static final native int gcnew_LineSegment(int point, boolean isStroked);
+/** @method flags=gcnew */
+public static final native int gcnew_ListBox();
+/** @method flags=gcnew */
+public static final native int gcnew_ListBoxItem();
+/** @method flags=gcnew */
+public static final native int gcnew_ListView();
+/** @method flags=gcnew */
+public static final native int gcnew_ListViewItem();
+/** @method flags=gcnew */
+public static final native int gcnew_Matrix(double m11, double m12, double m21, double m22, double offsetX, double offsetY);
+/**
+ * @method flags=gcnew
+ * @param matrix cast=(Matrix),flags=gcobject
+ */
+public static final native int gcnew_MatrixTransform(int matrix);
+/** @method accessor=System::IO::MemoryStream,flags=gcnew */
+public static final native int gcnew_MemoryStream();
+/** @method flags=gcnew */
+public static final native int gcnew_Menu();
+/** @method flags=gcnew */
+public static final native int gcnew_MenuItem();
+/** @method accessor=System::Windows::Forms::NotifyIcon,flags=gcnew */
+public static final native int gcnew_NotifyIcon();
+/** @method flags=gcnew */
+public static final native int gcnew_OpenFileDialog();
+/** @method flags=gcnew */
+public static final native int gcnew_PasswordBox();
+/** @method flags=gcnew */
+public static final native int gcnew_Path();
+/** @method flags=gcnew */
+public static final native int gcnew_PathFigure();
+/** @method flags=gcnew */
+public static final native int gcnew_PathGeometry();
+/** @method flags=gcnew */
+public static final native int gcnew_Pen();
+/**
+ * @method flags=gcnew
+ * @param brush cast=(Brush^),flags=gcobject
+ */
+public static final native int gcnew_Pen(int brush, double thickness);
+/**
+ * @method flags=gcnew
+ * @param points cast=(PointCollection^),flags=gcobject
+ */
+public static final native int gcnew_PolyLineSegment(int points, boolean isStroked);
+/** @method flags=gcnew */
+public static final native int gcnew_PointCollection(int capacity);
+/** @method flags=gcnew */
+public static final native int gcnew_Point(double x, double y);
+/** @method flags=gcnew */
+public static final native int gcnew_Popup();
+/** @method flags=gcnew */
+public static final native int gcnew_ProgressBar();
+/**
+ * @method flags=gcnew
+ * @param point1 cast=(Point),flags=gcobject
+ * @param point2 cast=(Point),flags=gcobject
+ */
+public static final native int gcnew_QuadraticBezierSegment(int point1, int point2, boolean isScrolled);
+/** @method flags=gcnew */
+public static final native int gcnew_RadioButton();
+/** @method flags=gcnew */
+public static final native int gcnew_Rect(double x, double y, double width, double height);
+/**
+ * @method flags=gcnew
+ * @param rect cast=(Rect),flags=gcobject
+ */
+public static final native int gcnew_RectangleGeometry(int rect);
+/**
+ * @method flags=gcnew
+ * @param relativeSourceMode cast=(RelativeSourceMode)
+ */
+public static final native int gcnew_RelativeSource(int relativeSourceMode);
+/**
+ * @method flags=gcnew
+ * @param pixelFormat cast=(PixelFormat),flags=gcobject
+ */
+public static final native int gcnew_RenderTargetBitmap(int pixelWidth, int pixelHeight, double dpiX, double dpiY, int pixelFormat);
+/** @method flags=gcnew */
+public static final native int gcnew_RepeatBehavior(int repeatCount);
+/** @method flags=gcnew */
+public static final native int gcnew_RepeatButton();
+/** @method accessor=System::Windows::Shapes::Rectangle,flags=gcnew */
+public static final native int gcnew_Rectangle();
+/** @method flags=gcnew */
+public static final native int gcnew_RowDefinition();
+/** @method flags=gcnew */
+public static final native int gcnew_Run();
+/** @method flags=gcnew */
+public static final native int gcnew_SaveFileDialog();
+/** @method flags=gcnew */
+public static final native int gcnew_ScrollBar();
+/** @method flags=gcnew */
+public static final native int gcnew_ScrollViewer();
+/** @method flags=gcnew */
+public static final native int gcnew_Separator();
+/**
+ * @method flags=gcnew
+ * @param dp cast=(DependencyProperty^),flags=gcobject
+ * @param value cast=(Object^),flags=gcobject
+ */
+public static final native int gcnew_Setter(int dp, int value);
+/**
+ * @method accessor=System::Windows::Setter,flags=gcnew
+ * @param dp cast=(DependencyProperty^),flags=gcobject
+ * @param value cast=(Visibility)
+ */
+public static final native int gcnew_SetterVisibility(int dp, int value);
+/** @method flags=gcnew */
+public static final native int gcnew_Size();
+/** @method flags=gcnew */
+public static final native int gcnew_Size(double width, double height);
+/** @method flags=gcnew */
+public static final native int gcnew_Slider();
+/** @method flags=gcnew */
+public static final native int gcnew_ScaleTransform(double scaleX, double scaleY);
+/**
+ * @method flags=gcnew
+ * @param color cast=(Color),flags=gcobject
+ */
+public static final native int gcnew_SolidColorBrush(int color);
+/** @method flags=gcnew */
+public static final native int gcnew_StackPanel();
+/** @method flags=gcnew */
+public static final native int gcnew_StreamGeometry();
+/**
+ * @method flags=gcnew
+ * @param value cast=(const wchar_t *)
+ */
+public static final native int gcnew_String(char[] value);
+/**
+ * @method flags=gcnew
+ * @param value cast=(const wchar_t *)
+ */
+public static final native int gcnew_String(char[] value, int startIndex, int length);
+/** @method flags=gcnew */
+public static final native int gcnew_Style();
+/** @method flags=no_gen */
+public static final native int gcnew_SWTCanvas(int jniRef);
+/**
+ * @method flags=no_gen gcnew
+ * @param handle cast=(IntPtr)
+ */
+public static final native int gcnew_SWTSafeHandle(int handle, boolean isIcon);
+//public static final native int gcnew_SWTDockPanel(int jniRef);
+/** @method flags=no_gen gcnew */
+public static final native int gcnew_SWTTextSource(int jniRef);
+/**
+ * @method flags=no_gen gcnew
+ * @param properties cast=(TextRunProperties^),flags=gcobject
+ */
+public static final native int gcnew_SWTTextEmbeddedObject(int properties, int lenght, double width, double height, double baseline);
+/**
+ * @method flags=no_gen gcnew
+ * @param typeface cast=(Typeface^),flags=gcobject
+ * @param textDecorations cast=(TextDecorationCollection^),flags=gcobject
+ * @param foregroundBrush cast=(Brush^),flags=gcobject
+ * @param backgroundBrush cast=(Brush^),flags=gcobject
+ * @param baselineAlignment cast=(BaselineAlignment)
+ * @param culture cast=(CultureInfo^),flags=gcobject
+ */
+public static final native int gcnew_SWTTextRunProperties(int typeface, double size, double hittingSize, int textDecorations, int foregroundBrush, int backgroundBrush, int baselineAlignment, int culture);
+/** @method flags=no_gen */
+public static final native int gcnew_SWTTextParagraphProperties(int flowDirection, int textAlignment, boolean firstLineInParagraph, int defaultTextRunProperties, int textWrap, double lineHeight, double indent, int tabs);
+/** @method flags=no_gen gcnew */
+public static final native int gcnew_SWTTreeView(int jniRef);
+/**
+ * @method flags=no_gen gcnew
+ * @param treeView cast=(TreeView^),flags=gcobject
+ */
+public static final native int gcnew_SWTTreeViewRowPresenter(int treeView);
+/** @method flags=gcnew */
+public static final native int gcnew_TabControl();
+/** @method flags=gcnew */
+public static final native int gcnew_TabItem();
+/**
+ * @method flags=gcnew
+ * @param dp cast=(DependencyProperty^),flags=gcobject
+ */
+public static final native int gcnew_TemplateBindingExtension(int dp);
+/** @method flags=gcnew */
+public static final native int gcnew_TextDecorationCollection(int capacity); 
+/**
+ * @method flags=gcnew
+ * @param location cast=(TextDecorationLocation)
+ * @param pen cast=(Pen^),flags=gcobject
+ * @param penOffsetUnit cast=(TextDecorationUnit)
+ * @param penThicknessUnit cast=(TextDecorationUnit)
+ */
+public static final native int gcnew_TextDecoration(int location, int pen, double penOffset, int penOffsetUnit, int penThicknessUnit);
+/**
+ * @method flags=gcnew
+ * @param alignment cast=(TextTabAlignment)
+ */
+public static final native int gcnew_TextTabProperties(int alignment, double location, int tabLeader, int aligningChar);
+/** @method accessor=System::Collections::Generic::List<TextTabProperties^>,flags=gcnew */
+public static final native int gcnew_TextTabPropertiesCollection(int capacity);
+/** @method flags=gcnew */
+public static final native int gcnew_TextBlock();
+/** @method flags=gcnew */
+public static final native int gcnew_TextBox();
+/**
+ * @method flags=gcnew
+ * @param string cast=(String^),flags=gcobject
+ * @param textRunProperties cast=(TextRunProperties^),flags=gcobject
+ */
+public static final native int gcnew_TextCharacters(int string, int offsetToFirstChar, int length, int textRunProperties);
+/**
+ * @method flags=gcnew
+ * @param textRunProperties cast=(TextRunProperties^),flags=gcobject
+ */
+public static final native int gcnew_TextEndOfLine(int length, int textRunProperties);
+/**
+ * @method flags=gcnew
+ * @param textRunProperties cast=(TextRunProperties^),flags=gcobject
+ */
+public static final native int gcnew_TextEndOfParagraph(int length, int textRunProperties);
+/** @method flags=gcnew */
+public static final native int gcnew_TiffBitmapEncoder();
+/** @method flags=gcnew */
+public static final native int gcnew_TimeSpan(long ticks);
+/** @method flags=gcnew */
+public static final native int gcnew_Thickness(double left, double top, double right, double bottom);
+/** @method flags=gcnew */
+public static final native int gcnew_ToggleButton();
+/** @method flags=gcnew */
+public static final native int gcnew_ToolBar();
+/** @method flags=gcnew */
+public static final native int gcnew_ToolBarTray();
+/** @method flags=gcnew */
+public static final native int gcnew_TransformGroup();
+/** @method flags=gcnew */
+public static final native int gcnew_TranslateTransform(double offsetX, double offsetY);
+/**
+ * @method flags=gcnew
+ * @param direction cast=(FocusNavigationDirection)
+ */
+public static final native int gcnew_TraversalRequest(int direction);
+/** @method flags=gcnew */
+public static final native int gcnew_TreeView();
+/** @method flags=gcnew */
+public static final native int gcnew_TreeViewItem();
+/**
+ * @method flags=gcnew
+ * @param fontFamily cast=(FontFamily^),flags=gcobject
+ * @param style cast=(FontStyle),flags=gcobject
+ * @param weight cast=(FontWeight),flags=gcobject
+ * @param stretch cast=(FontStretch),flags=gcobject
+ */
+public static final native int gcnew_Typeface(int fontFamily, int style, int weight, int stretch);
+/** @method flags=gcnew */
+public static final native int gcnew_UserControl();
+/**
+ * @method flags=gcnew
+ * @param str cast=(String^),flags=gcobject
+ * @param type cast=(UriKind)
+ */
+public static final native int gcnew_Uri(int str, int type);
+/** @method accessor=System::Windows::Forms::WebBrowser,flags=gcnew */
+public static final native int gcnew_WebBrowser();
+/** @method accessor=System::Windows::Forms::Integration::WindowsFormsHost,flags=gcnew */
+public static final native int gcnew_WindowsFormsHost();
+/** @method flags=gcnew */
+public static final native int gcnew_Window();
+/**
+ * @method flags=gcnew
+ * @param source cast=(BitmapSource^),flags=gcobject
+ */
+public static final native int gcnew_WriteableBitmap (int source);
+/**
+ * @method flags=gcnew
+ * @param pixelFormat cast=(PixelFormat),flags=gcobject
+ * @param palette cast=(BitmapPalette^),flags=gcobject
+ */
+public static final native int gcnew_WriteableBitmap (int pixelWidth, int pixelHeight, double dpiX, double dpiY, int pixelFormat, int palette);
+/** @method flags=no_gen */
+public static final native void memcpy(char[] dest, int src, int size);
+/**
+ * @method flags=no_gen
+ * @param dest flags=no_in critical
+ * @param src cast=(array<Byte>^),flags=gcobject
+ */
+public static final native void memcpy(byte[] dest, int src, int size);
+/**
+ * @method flags=no_gen
+ * @param src cast=(array<Byte>^),flags=gcobject
+ * @param dest flags=no_out critical
+ */
+public static final native void memcpy(int src, byte[] dest, int size);
+
+
+//Demo
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native int FrameworkElement_Resources(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ * @param value cast=(ResourceDictionary^),flags=gcobject
+ */
+public static final native void FrameworkElement_Resources(int sender, int value);
+/**
+ * @method accessor=System::IO::StringReader,flags=gcnew
+ * @param string cast=(String^),flags=gcobject
+ */
+public static final native int gcnew_StringReader(int string);
+/**
+ * @method accessor=XmlReader::Create,flags=gcobject
+ * @param stream cast=(System::IO::TextReader^),flags=gcobject
+ */
+public static final native int XmlReader_Create(int stream);
+/**
+ * @method accessor=XamlReader::Load,flags=gcobject
+ * @param stream cast=(XmlReader^),flags=gcobject
+ */
+public static final native int XamlReader_Load(int stream);
+/** @method flags=gcnew */
+public static final native int gcnew_ResourceDictionary();
+/**
+ * @method flags=setter
+ * @param sender cast=(ResourceDictionary^),flags=gcobject
+ * @param uri cast=(Uri^),flags=gcobject
+ */
+public static final native void ResourceDictionary_Source(int sender, int uri);
+
+
+
+/** @method flags=gcnew */
+public static final native int gcnew_DiscreteDoubleKeyFrame();
+/** @method flags=gcnew */
+public static final native int gcnew_LinearDoubleKeyFrame();
+/**
+ * @method flags=gcnew
+ * @param parameter cast=(Object^),flags=gcobject
+ */
+public static final native int gcnew_PropertyPath(int parameter);
+/** @method flags=gcnew */
+public static final native int gcnew_SplineDoubleKeyFrame();
+/** @method flags=gcnew */
+public static final native int gcnew_Storyboard();
+/** @method flags=no_gen gcnew */
+public static final native int gcnew_SWTAnimator(int jniRef);
+/**
+ * @method flags=setter
+ * @param sender cast=(DoubleKeyFrame^),flags=gcobject
+ */
+public static final native void DoubleKeyFrame_Value(int sender, double value);
+/**
+ * @method flags=setter
+ * @param sender cast=(DoubleKeyFrame^),flags=gcobject
+ * @param value cast=(KeyTime),flags=gcobject
+ */
+public static final native void DoubleKeyFrame_KeyTime(int sender, int value);
+/**
+ * @method accessor=KeyTime::FromTimeSpan,flags=gcobject
+ * @param timeSpan cast=(TimeSpan),flags=gcobject
+ */
+public static final native int KeyTime_FromTimeSpan(int timeSpan);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Storyboard^),flags=gcobject
+ * @param containingObject cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native void Storyboard_Begin(int sender, int containingObject, boolean isControllable);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Storyboard^),flags=gcobject
+ * @param containingObject cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native void Storyboard_Pause(int sender, int containingObject);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Storyboard^),flags=gcobject
+ * @param containingObject cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native void Storyboard_Resume(int sender, int containingObject);
+/**
+ * @method flags=cpp
+ * @param sender cast=(Storyboard^),flags=gcobject
+ * @param containingObject cast=(FrameworkElement^),flags=gcobject
+ */
+public static final native void Storyboard_Stop(int sender, int containingObject);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(TimelineGroup^),flags=gcobject
+ */
+public static final native int TimelineGroup_Children(int sender);
+/** @method accessor=SWTAnimator::DoubleValueProperty,flags=no_gen gcobject const */
+public static final native int SWTAnimator_DoubleValueProperty();
+/** @method accessor=SWTAnimator::IntValueProperty,flags=no_gen gcobject const */
+public static final native int SWTAnimator_IntValueProperty();
+/**
+ * @method flags=cpp
+ * @param sender cast=(FrameworkElement^),flags=gcobject
+ * @param name cast=(String^),flags=gcobject
+ * @param scopedElement cast=(Object^),flags=gcobject
+ */
+public static final native void FrameworkElement_RegisterName(int sender, int name, int scopedElement);
+/**
+ * @method accessor=NewValue,flags=getter
+ * @param sender cast=(DependencyPropertyChangedEventArgs^),flags=gcobject
+ */
+public static final native double DependencyPropertyChangedEventArgs_NewValueDouble(int sender);
+/**
+ * @method accessor=OldValue,flags=getter
+ * @param sender cast=(DependencyPropertyChangedEventArgs^),flags=gcobject
+ */
+public static final native double DependencyPropertyChangedEventArgs_OldValueDouble(int sender);
+/**
+ * @method accessor=NewValue,flags=getter
+ * @param sender cast=(DependencyPropertyChangedEventArgs^),flags=gcobject
+ */
+public static final native int DependencyPropertyChangedEventArgs_NewValueInt(int sender);
+/**
+ * @method accessor=OldValue,flags=getter
+ * @param sender cast=(DependencyPropertyChangedEventArgs^),flags=gcobject
+ */
+public static final native int DependencyPropertyChangedEventArgs_OldValueInt(int sender);
+/**
+ * @method accessor=Storyboard::SetTargetName
+ * @param element cast=(DependencyObject^),flags=gcobject
+ * @param name cast=(String^),flags=gcobject
+ */
+public static final native void Storyboard_SetTargetName(int element, int name);
+/**
+ * @method accessor=Storyboard::SetTargetProperty
+ * @param element cast=(DependencyObject^),flags=gcobject
+ * @param propertyPath cast=(PropertyPath^),flags=gcobject
+ */
+public static final native void Storyboard_SetTargetProperty(int element, int propertyPath);
+/** @method flags=gcnew */
+public static final native int gcnew_NameScope();
+/**
+ * @method accessor=NameScope::GetNameScope,flags=gcobject
+ * @param dependencyObject cast=(DependencyObject^),flags=gcobject
+ */
+public static final native int NameScope_GetNameScope(int dependencyObject);
+/**
+ * @method accessor=NameScope::SetNameScope
+ * @param dependencyObject cast=(DependencyObject^),flags=gcobject
+ * @param nameScope cast=(INameScope^),flags=gcobject
+ */
+public static final native void NameScope_SetNameScope(int dependencyObject, int nameScope);
+/** @method flags=gcnew */
+public static final native int gcnew_KeySpline(double x1, double y1, double x2, double y2);
+/**
+ * @method flags=setter
+ * @param sender cast=(SplineDoubleKeyFrame^),flags=gcobject
+ * @param value cast=(KeySpline^),flags=gcobject
+ */
+public static final native void SplineDoubleKeyFrame_KeySpline(int sender, int value);
+/**
+ * @method flags=adder
+ * @param sender cast=(Timeline^),flags=gcobject
+ * @param handler cast=(EventHandler^),flags=gcobject
+ */
+public static final native void Timeline_Completed(int sender, int handler);
+/** @method flags=gcnew */
+public static final native int gcnew_Int32AnimationUsingKeyFrames();
+/** @method flags=gcnew */
+public static final native int gcnew_DiscreteInt32KeyFrame();
+/** @method flags=gcnew */
+public static final native int gcnew_LinearInt32KeyFrame();
+/** @method flags=gcnew */
+public static final native int gcnew_SplineInt32KeyFrame();
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Int32AnimationUsingKeyFrames^),flags=gcobject
+ */
+public static final native int Int32AnimationUsingKeyFrames_KeyFrames(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Int32KeyFrame^),flags=gcobject
+ */
+public static final native void Int32KeyFrame_Value(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(SplineInt32KeyFrame^),flags=gcobject
+ * @param value cast=(KeySpline^),flags=gcobject
+ */
+public static final native void SplineInt32KeyFrame_KeySpline(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(Int32KeyFrame^),flags=gcobject
+ * @param value cast=(KeyTime),flags=gcobject
+ */
+public static final native void Int32KeyFrame_KeyTime(int sender, int value);
+
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Timeline^),flags=gcobject
+ */
+public static final native int Timeline_Duration(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Duration^),flags=gcobject
+ */
+public static final native int Duration_TimeSpan(int sender);
+/**
+ * @method flags=getter
+ * @param sender cast=(TimeSpan^),flags=gcobject
+ */
+public static final native double TimeSpan_TotalMilliseconds(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(Timeline^),flags=gcobject
+ */
+public static final native int Timeline_BeginTime(int sender);
+
+/** @method flags=gcnew */
+public static final native int gcnew_OuterGlowBitmapEffect();
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(OuterGlowBitmapEffect^),flags=gcobject
+ */
+public static final native int OuterGlowBitmapEffect_GlowColor(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(OuterGlowBitmapEffect^),flags=gcobject
+ * @param value cast=(Color),flags=gcobject
+ */
+public static final native void OuterGlowBitmapEffect_GlowColor(int sender, int value);
+/**
+ * @method flags=getter
+ * @param sender cast=(OuterGlowBitmapEffect^),flags=gcobject
+ */
+public static final native double OuterGlowBitmapEffect_GlowSize(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(OuterGlowBitmapEffect^),flags=gcobject
+ */
+public static final native void OuterGlowBitmapEffect_GlowSize(int sender, double value);
+/**
+ * @method flags=getter
+ * @param sender cast=(OuterGlowBitmapEffect^),flags=gcobject
+ */
+public static final native double OuterGlowBitmapEffect_Opacity(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(OuterGlowBitmapEffect^),flags=gcobject
+ */
+public static final native void OuterGlowBitmapEffect_Opacity(int sender, double value);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(UIElement^),flags=gcobject
+ */
+public static final native int UIElement_BitmapEffect(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(UIElement^),flags=gcobject
+ * @param value cast=(BitmapEffect^),flags=gcobject
+ */
+public static final native void UIElement_BitmapEffect(int sender, int value);
+/** @method flags=gcnew */
+public static final native int gcnew_DropShadowBitmapEffect();
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(DropShadowBitmapEffect^),flags=gcobject
+ */
+public static final native int DropShadowBitmapEffect_Color(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(DropShadowBitmapEffect^),flags=gcobject
+ * @param value cast=(Color),flags=gcobject
+ */
+public static final native void DropShadowBitmapEffect_Color(int sender, int value);
+/**
+ * @method flags=getter
+ * @param sender cast=(DropShadowBitmapEffect^),flags=gcobject
+ */
+public static final native double DropShadowBitmapEffect_Direction(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(DropShadowBitmapEffect^),flags=gcobject
+ */
+public static final native void DropShadowBitmapEffect_Direction(int sender, double value);
+/**
+ * @method flags=getter
+ * @param sender cast=(DropShadowBitmapEffect^),flags=gcobject
+ */
+public static final native double DropShadowBitmapEffect_Opacity(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(DropShadowBitmapEffect^),flags=gcobject
+ */
+public static final native void DropShadowBitmapEffect_Opacity(int sender, double value);
+/**
+ * @method flags=getter
+ * @param sender cast=(DropShadowBitmapEffect^),flags=gcobject
+ */
+public static final native double DropShadowBitmapEffect_ShadowDepth(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(DropShadowBitmapEffect^),flags=gcobject
+ */
+public static final native void DropShadowBitmapEffect_ShadowDepth(int sender, double value);
+/**
+ * @method flags=getter
+ * @param sender cast=(DropShadowBitmapEffect^),flags=gcobject
+ */
+public static final native double DropShadowBitmapEffect_Softness(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(DropShadowBitmapEffect^),flags=gcobject
+ */
+public static final native void DropShadowBitmapEffect_Softness(int sender, double value);
+/** @method flags=gcnew */
+public static final native int gcnew_BlurBitmapEffect();
+/**
+ * @method flags=setter
+ * @param sender cast=(BlurBitmapEffect^),flags=gcobject
+ */
+public static final native void BlurBitmapEffect_Radius(int sender, double value);
+/**
+ * @method flags=getter
+ * @param sender cast=(BlurBitmapEffect^),flags=gcobject
+ */
+public static final native double BlurBitmapEffect_Radius(int sender);
+/** @method flags=gcnew */
+public static final native int gcnew_BevelBitmapEffect();
+/**
+ * @method flags=getter
+ * @param handle cast=(BevelBitmapEffect^),flags=gcobject
+ */
+public static final native double BevelBitmapEffect_LightAngle(int handle);
+/**
+ * @method flags=setter
+ * @param handle cast=(BevelBitmapEffect^),flags=gcobject
+ */
+public static final native void BevelBitmapEffect_LightAngle(int handle, double value);
+/**
+ * @method flags=getter
+ * @param handle cast=(BevelBitmapEffect^),flags=gcobject
+ */
+public static final native double BevelBitmapEffect_BevelWidth(int handle);
+/**
+ * @method flags=setter
+ * @param handle cast=(BevelBitmapEffect^),flags=gcobject
+ */
+public static final native void BevelBitmapEffect_BevelWidth(int handle, double value);
+/**
+ * @method flags=getter
+ * @param handle cast=(BevelBitmapEffect^),flags=gcobject
+ */
+public static final native double BevelBitmapEffect_Smoothness(int handle);
+/**
+ * @method flags=setter
+ * @param handle cast=(BevelBitmapEffect^),flags=gcobject
+ */
+public static final native void BevelBitmapEffect_Smoothness(int handle, double value);
+/** @method flags=gcnew */
+public static final native int gcnew_BitmapEffectGroup();
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(BitmapEffectGroup^),flags=gcobject
+ */
+public static final native int BitmapEffectGroup_Children(int sender);
+
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(HwndSource^),flags=gcobject
+ */
+public static final native int HwndSource_CompositionTarget(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(HwndTarget^),flags=gcobject
+ * @param value cast=(Color),flags=gcobject
+ */
+public static final native void HwndTarget_BackgroundColor(int sender, int value);
+
+/**
+ * @method accessor=TypeDescriptor::GetProperties,flags=gcobject
+ * @param sender cast=(Object^),flags=gcobject
+ */
+public static final native int TypeDescriptor_GetProperties(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(MemberDescriptor^),flags=gcobject
+ */
+public static final native int MemberDescriptor_Name(int sender);
+/**
+ * @method flags=gcobject getter
+ * @param sender cast=(DependencyPropertyDescriptor^),flags=gcobject
+ */
+public static final native int DependencyPropertyDescriptor_DependencyProperty(int sender);
+/** @method accessor=DependencyPropertyDescriptor::typeid,flags=const gcobject */
+public static final native int DependencyPropertyDescriptor_typeid();
+/**
+ * @method accessor=DependencyPropertyDescriptor::FromProperty,flags=gcobject
+ * @param propertyDescriptor cast=(PropertyDescriptor^),flags=gcobject
+ */
+public static final native int DependencyPropertyDescriptor_FromProperty(int propertyDescriptor);
+/**
+ * @method accessor=Type::GetType,flags=gcobject
+ * @param typeName cast=(String^),flags=gcobject
+ */
+public static final native int Type_GetType(int typeName, boolean throwOnError, boolean ignoreCase);
+/**
+ * @method flags=cpp
+ * @param sender cast=(NameScope^),flags=gcobject
+ * @param name cast=(String^),flags=gcobject
+ * @param scopedElement cast=(Object^),flags=gcobject
+ */
+public static final native void NameScope_RegisterName(int sender, int name, int scopedElement);
+
+/** @method accessor=Panel::HeightProperty,flags=const gcobject */
+public static final native int Panel_HeightProperty();
+/** @method accessor=Panel::WidthProperty,flags=const gcobject */
+public static final native int Panel_WidthProperty();
+/** @method accessor=Canvas::TopProperty,flags=const gcobject */
+public static final native int Canvas_TopProperty();
+/** @method accessor=Canvas::LeftProperty,flags=const gcobject */
+public static final native int Canvas_LeftProperty();
+/** @method accessor=OuterGlowBitmapEffect::GlowSizeProperty,flags=const gcobject */
+public static final native int OuterGlowBitmapEffect_GlowSizeProperty();
+/** @method flags=gcnew */
+public static final native int gcnew_Int32Animation();
+/** @method flags=gcnew */
+public static final native int gcnew_DoubleAnimation();
+/**
+ * @method flags=no_gen setter gcobject
+ * @param sender cast=(Timeline^),flags=gcobject
+ * @param value cast=(TimeSpan^),flags=gcobject
+ */
+public static final native void Timeline_BeginTime(int sender, int value);
+/**
+ * @method flags=setter
+ * @param sender cast=(DoubleAnimation^),flags=gcobject
+ */
+public static final native void DoubleAnimation_To(int sender, double value);
+/**
+ * @method flags=getter
+ * @param sender cast=(DoubleAnimation^),flags=gcobject
+ */
+public static final native double DoubleAnimation_To(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Int32Animation^),flags=gcobject
+ */
+public static final native void Int32Animation_To(int sender, int value);
+/**
+ * @method flags=getter
+ * @param sender cast=(Int32Animation^),flags=gcobject
+ */
+public static final native int Int32Animation_To(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(DoubleAnimation^),flags=gcobject
+ */
+public static final native void DoubleAnimation_From(int sender, double value);
+/**
+ * @method flags=getter
+ * @param sender cast=(DoubleAnimation^),flags=gcobject
+ */
+public static final native double DoubleAnimation_From(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Int32Animation^),flags=gcobject
+ */
+public static final native void Int32Animation_From(int sender, int value);
+/**
+ * @method flags=getter
+ * @param sender cast=(Int32Animation^),flags=gcobject
+ */
+public static final native int Int32Animation_From(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Timeline^),flags=gcobject
+ */
+public static final native void Timeline_DecelerationRatio(int sender, double value);
+/**
+ * @method flags=getter
+ * @param sender cast=(Timeline^),flags=gcobject
+ */
+public static final native double Timeline_DecelerationRatio(int sender);
+/**
+ * @method flags=setter
+ * @param sender cast=(Timeline^),flags=gcobject
+ */
+public static final native void Timeline_AccelerationRatio(int sender, double value);
+/**
+ * @method flags=getter
+ * @param sender cast=(Timeline^),flags=gcobject
+ */
+public static final native double Timeline_AccelerationRatio(int sender);
+
+/** @method flags=no_gen gcnew */
+public static final native int gcnew_SWTAnimation(int jniRef);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(Type^),flags=gcobject
+ * @param name cast=(String^),flags=gcobject
+ * @param bindingFlags cast=(BindingFlags)
+ */
+public static final native int Type_GetMethod(int sender, int name, int bindingFlags);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(ArrayList^),flags=gcobject
+ */
+public static final native int ArrayList_ToArray(int sender);
+/**
+ * @method flags=cpp gcobject
+ * @param sender cast=(MethodInfo^),flags=gcobject
+ * @param obj cast=(Object^),flags=gcobject
+ * @param parameters cast=(array<Object^>^),flags=gcobject
+ */
+public static final native int MethodInfo_Invoke(int sender, int obj, int parameters);
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32.c b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32.c
new file mode 100644
index 0000000..54cfe03
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32.c
@@ -0,0 +1,413 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "win32_structs.h"
+#include "win32_stats.h"
+
+#define Win32_NATIVE(func) Java_org_eclipse_swt_internal_win32_Win32_##func
+
+#ifndef NO_CloseHandle
+JNIEXPORT jboolean JNICALL Win32_NATIVE(CloseHandle)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	Win32_NATIVE_ENTER(env, that, CloseHandle_FUNC);
+	rc = (jboolean)CloseHandle((HANDLE)arg0);
+	Win32_NATIVE_EXIT(env, that, CloseHandle_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CreateCursor
+JNIEXPORT jint JNICALL Win32_NATIVE(CreateCursor)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jbyteArray arg5, jbyteArray arg6)
+{
+	jbyte *lparg5=NULL;
+	jbyte *lparg6=NULL;
+	jint rc = 0;
+	Win32_NATIVE_ENTER(env, that, CreateCursor_FUNC);
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg5) if ((lparg5 = (*env)->GetPrimitiveArrayCritical(env, arg5, NULL)) == NULL) goto fail;
+		if (arg6) if ((lparg6 = (*env)->GetPrimitiveArrayCritical(env, arg6, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg5) if ((lparg5 = (*env)->GetByteArrayElements(env, arg5, NULL)) == NULL) goto fail;
+		if (arg6) if ((lparg6 = (*env)->GetByteArrayElements(env, arg6, NULL)) == NULL) goto fail;
+	}
+	rc = (jint)CreateCursor((HINSTANCE)arg0, arg1, arg2, arg3, arg4, (CONST VOID *)lparg5, (CONST VOID *)lparg6);
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg6 && lparg6) (*env)->ReleasePrimitiveArrayCritical(env, arg6, lparg6, JNI_ABORT);
+		if (arg5 && lparg5) (*env)->ReleasePrimitiveArrayCritical(env, arg5, lparg5, JNI_ABORT);
+	} else
+#endif
+	{
+		if (arg6 && lparg6) (*env)->ReleaseByteArrayElements(env, arg6, lparg6, JNI_ABORT);
+		if (arg5 && lparg5) (*env)->ReleaseByteArrayElements(env, arg5, lparg5, JNI_ABORT);
+	}
+	Win32_NATIVE_EXIT(env, that, CreateCursor_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CreateIconIndirect
+JNIEXPORT jint JNICALL Win32_NATIVE(CreateIconIndirect)
+	(JNIEnv *env, jclass that, jobject arg0)
+{
+	ICONINFO _arg0, *lparg0=NULL;
+	jint rc = 0;
+	Win32_NATIVE_ENTER(env, that, CreateIconIndirect_FUNC);
+	if (arg0) if ((lparg0 = getICONINFOFields(env, arg0, &_arg0)) == NULL) goto fail;
+	rc = (jint)CreateIconIndirect(lparg0);
+fail:
+	if (arg0 && lparg0) setICONINFOFields(env, arg0, lparg0);
+	Win32_NATIVE_EXIT(env, that, CreateIconIndirect_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_CreateProcessW
+JNIEXPORT jboolean JNICALL Win32_NATIVE(CreateProcessW)
+	(JNIEnv *env, jclass that, jint arg0, jcharArray arg1, jint arg2, jint arg3, jboolean arg4, jint arg5, jint arg6, jint arg7, jobject arg8, jobject arg9)
+{
+	jchar *lparg1=NULL;
+	STARTUPINFOW _arg8, *lparg8=NULL;
+	PROCESS_INFORMATION _arg9, *lparg9=NULL;
+	jboolean rc = 0;
+	Win32_NATIVE_ENTER(env, that, CreateProcessW_FUNC);
+	if (arg1) if ((lparg1 = (*env)->GetCharArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	if (arg8) if ((lparg8 = getSTARTUPINFOWFields(env, arg8, &_arg8)) == NULL) goto fail;
+	if (arg9) if ((lparg9 = getPROCESS_INFORMATIONFields(env, arg9, &_arg9)) == NULL) goto fail;
+	rc = (jboolean)CreateProcessW((LPCWSTR)arg0, (LPWSTR)lparg1, (LPSECURITY_ATTRIBUTES)arg2, (LPSECURITY_ATTRIBUTES)arg3, arg4, (DWORD)arg5, (LPVOID)arg6, (LPCWSTR)arg7, (LPSTARTUPINFOW)lparg8, (LPPROCESS_INFORMATION)lparg9);
+fail:
+	if (arg9 && lparg9) setPROCESS_INFORMATIONFields(env, arg9, lparg9);
+	if (arg8 && lparg8) setSTARTUPINFOWFields(env, arg8, lparg8);
+	if (arg1 && lparg1) (*env)->ReleaseCharArrayElements(env, arg1, lparg1, 0);
+	Win32_NATIVE_EXIT(env, that, CreateProcessW_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DeleteObject
+JNIEXPORT jboolean JNICALL Win32_NATIVE(DeleteObject)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	Win32_NATIVE_ENTER(env, that, DeleteObject_FUNC);
+	rc = (jboolean)DeleteObject((HGDIOBJ)arg0);
+	Win32_NATIVE_EXIT(env, that, DeleteObject_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_DestroyIcon
+JNIEXPORT jboolean JNICALL Win32_NATIVE(DestroyIcon)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jboolean rc = 0;
+	Win32_NATIVE_ENTER(env, that, DestroyIcon_FUNC);
+	rc = (jboolean)DestroyIcon((HICON)arg0);
+	Win32_NATIVE_EXIT(env, that, DestroyIcon_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_EnableWindow
+JNIEXPORT void JNICALL Win32_NATIVE(EnableWindow)
+	(JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+	Win32_NATIVE_ENTER(env, that, EnableWindow_FUNC);
+	EnableWindow((HWND)arg0, arg1);
+	Win32_NATIVE_EXIT(env, that, EnableWindow_FUNC);
+}
+#endif
+
+#ifndef NO_ExtractIconExW
+JNIEXPORT jint JNICALL Win32_NATIVE(ExtractIconExW)
+	(JNIEnv *env, jclass that, jcharArray arg0, jint arg1, jintArray arg2, jintArray arg3, jint arg4)
+{
+	jchar *lparg0=NULL;
+	jint *lparg2=NULL;
+	jint *lparg3=NULL;
+	jint rc = 0;
+	Win32_NATIVE_ENTER(env, that, ExtractIconExW_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetCharArrayElements(env, arg0, NULL)) == NULL) goto fail;
+	if (arg2) if ((lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL)) == NULL) goto fail;
+	rc = (jint)ExtractIconExW((LPCWSTR)lparg0, arg1, (HICON*)lparg2, (HICON*)lparg3, (UINT)arg4);
+fail:
+	if (arg3 && lparg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
+	if (arg2 && lparg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
+	if (arg0 && lparg0) (*env)->ReleaseCharArrayElements(env, arg0, lparg0, 0);
+	Win32_NATIVE_EXIT(env, that, ExtractIconExW_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GetCursorPos
+JNIEXPORT void JNICALL Win32_NATIVE(GetCursorPos)
+	(JNIEnv *env, jclass that, jobject arg0)
+{
+	POINT _arg0, *lparg0=NULL;
+	Win32_NATIVE_ENTER(env, that, GetCursorPos_FUNC);
+	if (arg0) if ((lparg0 = getPOINTFields(env, arg0, &_arg0)) == NULL) goto fail;
+	GetCursorPos((LPPOINT)lparg0);
+fail:
+	if (arg0 && lparg0) setPOINTFields(env, arg0, lparg0);
+	Win32_NATIVE_EXIT(env, that, GetCursorPos_FUNC);
+}
+#endif
+
+#ifndef NO_GetIconInfo
+JNIEXPORT jboolean JNICALL Win32_NATIVE(GetIconInfo)
+	(JNIEnv *env, jclass that, jint arg0, jobject arg1)
+{
+	ICONINFO _arg1, *lparg1=NULL;
+	jboolean rc = 0;
+	Win32_NATIVE_ENTER(env, that, GetIconInfo_FUNC);
+	if (arg1) if ((lparg1 = getICONINFOFields(env, arg1, &_arg1)) == NULL) goto fail;
+	rc = (jboolean)GetIconInfo((HICON)arg0, lparg1);
+fail:
+	if (arg1 && lparg1) setICONINFOFields(env, arg1, lparg1);
+	Win32_NATIVE_EXIT(env, that, GetIconInfo_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GetKeyboardState
+JNIEXPORT jboolean JNICALL Win32_NATIVE(GetKeyboardState)
+	(JNIEnv *env, jclass that, jbyteArray arg0)
+{
+	jbyte *lparg0=NULL;
+	jboolean rc = 0;
+	Win32_NATIVE_ENTER(env, that, GetKeyboardState_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL)) == NULL) goto fail;
+	rc = (jboolean)GetKeyboardState((PBYTE)lparg0);
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
+	Win32_NATIVE_EXIT(env, that, GetKeyboardState_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GetModuleHandleW
+JNIEXPORT jint JNICALL Win32_NATIVE(GetModuleHandleW)
+	(JNIEnv *env, jclass that, jcharArray arg0)
+{
+	jchar *lparg0=NULL;
+	jint rc = 0;
+	Win32_NATIVE_ENTER(env, that, GetModuleHandleW_FUNC);
+	if (arg0) if ((lparg0 = (*env)->GetCharArrayElements(env, arg0, NULL)) == NULL) goto fail;
+	rc = (jint)GetModuleHandleW((LPCWSTR)lparg0);
+fail:
+	if (arg0 && lparg0) (*env)->ReleaseCharArrayElements(env, arg0, lparg0, 0);
+	Win32_NATIVE_EXIT(env, that, GetModuleHandleW_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_GetProcessHeap
+JNIEXPORT jint JNICALL Win32_NATIVE(GetProcessHeap)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	Win32_NATIVE_ENTER(env, that, GetProcessHeap_FUNC);
+	rc = (jint)GetProcessHeap();
+	Win32_NATIVE_EXIT(env, that, GetProcessHeap_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_HeapAlloc
+JNIEXPORT jint JNICALL Win32_NATIVE(HeapAlloc)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	jint rc = 0;
+	Win32_NATIVE_ENTER(env, that, HeapAlloc_FUNC);
+	rc = (jint)HeapAlloc((HANDLE)arg0, arg1, arg2);
+	Win32_NATIVE_EXIT(env, that, HeapAlloc_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_HeapFree
+JNIEXPORT jboolean JNICALL Win32_NATIVE(HeapFree)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+	jboolean rc = 0;
+	Win32_NATIVE_ENTER(env, that, HeapFree_FUNC);
+	rc = (jboolean)HeapFree((HANDLE)arg0, arg1, (LPVOID)arg2);
+	Win32_NATIVE_EXIT(env, that, HeapFree_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_LoadImage
+JNIEXPORT jint JNICALL Win32_NATIVE(LoadImage)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5)
+{
+	jint rc = 0;
+	Win32_NATIVE_ENTER(env, that, LoadImage_FUNC);
+	rc = (jint)LoadImage((HINSTANCE)arg0, (LPCTSTR)arg1, (UINT)arg2, arg3, arg4, (UINT)arg5);
+	Win32_NATIVE_EXIT(env, that, LoadImage_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_MapVirtualKeyW
+JNIEXPORT jint JNICALL Win32_NATIVE(MapVirtualKeyW)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	Win32_NATIVE_ENTER(env, that, MapVirtualKeyW_FUNC);
+	rc = (jint)MapVirtualKeyW(arg0, arg1);
+	Win32_NATIVE_EXIT(env, that, MapVirtualKeyW_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_MoveMemory
+JNIEXPORT void JNICALL Win32_NATIVE(MoveMemory)
+	(JNIEnv *env, jclass that, jint arg0, jcharArray arg1, jint arg2)
+{
+	jchar *lparg1=NULL;
+	Win32_NATIVE_ENTER(env, that, MoveMemory_FUNC);
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg1) if ((lparg1 = (*env)->GetPrimitiveArrayCritical(env, arg1, NULL)) == NULL) goto fail;
+	} else
+#endif
+	{
+		if (arg1) if ((lparg1 = (*env)->GetCharArrayElements(env, arg1, NULL)) == NULL) goto fail;
+	}
+	MoveMemory((PVOID)arg0, (CONST VOID *)lparg1, arg2);
+fail:
+#ifdef JNI_VERSION_1_2
+	if (IS_JNI_1_2) {
+		if (arg1 && lparg1) (*env)->ReleasePrimitiveArrayCritical(env, arg1, lparg1, JNI_ABORT);
+	} else
+#endif
+	{
+		if (arg1 && lparg1) (*env)->ReleaseCharArrayElements(env, arg1, lparg1, JNI_ABORT);
+	}
+	Win32_NATIVE_EXIT(env, that, MoveMemory_FUNC);
+}
+#endif
+
+#ifndef NO_OleInitialize
+JNIEXPORT jint JNICALL Win32_NATIVE(OleInitialize)
+	(JNIEnv *env, jclass that, jint arg0)
+{
+	jint rc = 0;
+	Win32_NATIVE_ENTER(env, that, OleInitialize_FUNC);
+	rc = (jint)OleInitialize((LPVOID)arg0);
+	Win32_NATIVE_EXIT(env, that, OleInitialize_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_OleUninitialize
+JNIEXPORT void JNICALL Win32_NATIVE(OleUninitialize)
+	(JNIEnv *env, jclass that)
+{
+	Win32_NATIVE_ENTER(env, that, OleUninitialize_FUNC);
+	OleUninitialize();
+	Win32_NATIVE_EXIT(env, that, OleUninitialize_FUNC);
+}
+#endif
+
+#ifndef NO_PROCESS_1INFORMATION_1sizeof
+JNIEXPORT jint JNICALL Win32_NATIVE(PROCESS_1INFORMATION_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	Win32_NATIVE_ENTER(env, that, PROCESS_1INFORMATION_1sizeof_FUNC);
+	rc = (jint)PROCESS_INFORMATION_sizeof();
+	Win32_NATIVE_EXIT(env, that, PROCESS_1INFORMATION_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SHELLEXECUTEINFOW_1sizeof
+JNIEXPORT jint JNICALL Win32_NATIVE(SHELLEXECUTEINFOW_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	Win32_NATIVE_ENTER(env, that, SHELLEXECUTEINFOW_1sizeof_FUNC);
+	rc = (jint)SHELLEXECUTEINFOW_sizeof();
+	Win32_NATIVE_EXIT(env, that, SHELLEXECUTEINFOW_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_STARTUPINFOW_1sizeof
+JNIEXPORT jint JNICALL Win32_NATIVE(STARTUPINFOW_1sizeof)
+	(JNIEnv *env, jclass that)
+{
+	jint rc = 0;
+	Win32_NATIVE_ENTER(env, that, STARTUPINFOW_1sizeof_FUNC);
+	rc = (jint)STARTUPINFOW_sizeof();
+	Win32_NATIVE_EXIT(env, that, STARTUPINFOW_1sizeof_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_SetCursorPos
+JNIEXPORT jint JNICALL Win32_NATIVE(SetCursorPos)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+	jint rc = 0;
+	Win32_NATIVE_ENTER(env, that, SetCursorPos_FUNC);
+	rc = (jint)SetCursorPos(arg0, arg1);
+	Win32_NATIVE_EXIT(env, that, SetCursorPos_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ShellExecuteExW
+JNIEXPORT jboolean JNICALL Win32_NATIVE(ShellExecuteExW)
+	(JNIEnv *env, jclass that, jobject arg0)
+{
+	SHELLEXECUTEINFOW _arg0, *lparg0=NULL;
+	jboolean rc = 0;
+	Win32_NATIVE_ENTER(env, that, ShellExecuteExW_FUNC);
+	if (arg0) if ((lparg0 = getSHELLEXECUTEINFOWFields(env, arg0, &_arg0)) == NULL) goto fail;
+	rc = (jboolean)ShellExecuteExW((LPSHELLEXECUTEINFOW)lparg0);
+fail:
+	if (arg0 && lparg0) setSHELLEXECUTEINFOWFields(env, arg0, lparg0);
+	Win32_NATIVE_EXIT(env, that, ShellExecuteExW_FUNC);
+	return rc;
+}
+#endif
+
+#ifndef NO_ToUnicode
+JNIEXPORT jint JNICALL Win32_NATIVE(ToUnicode)
+	(JNIEnv *env, jclass that, jint arg0, jint arg1, jbyteArray arg2, jcharArray arg3, jint arg4, jint arg5)
+{
+	jbyte *lparg2=NULL;
+	jchar *lparg3=NULL;
+	jint rc = 0;
+	Win32_NATIVE_ENTER(env, that, ToUnicode_FUNC);
+	if (arg2) if ((lparg2 = (*env)->GetByteArrayElements(env, arg2, NULL)) == NULL) goto fail;
+	if (arg3) if ((lparg3 = (*env)->GetCharArrayElements(env, arg3, NULL)) == NULL) goto fail;
+	rc = (jint)ToUnicode(arg0, arg1, (PBYTE)lparg2, (LPWSTR)lparg3, arg4, arg5);
+fail:
+	if (arg3 && lparg3) (*env)->ReleaseCharArrayElements(env, arg3, lparg3, 0);
+	if (arg2 && lparg2) (*env)->ReleaseByteArrayElements(env, arg2, lparg2, 0);
+	Win32_NATIVE_EXIT(env, that, ToUnicode_FUNC);
+	return rc;
+}
+#endif
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32.h b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32.h
new file mode 100644
index 0000000..1d6f24b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32.h
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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
+ *******************************************************************************/
+
+#ifndef INC_win32_H
+#define INC_win32_H
+
+
+#include "swt.h"
+#include <ole2.h>
+#include <objbase.h>
+#include <string.h>
+#include <windows.h>
+
+#endif /* INC_win32_H */
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32_stats.c b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32_stats.c
new file mode 100644
index 0000000..f7b83f2
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32_stats.c
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "win32_stats.h"
+
+#ifdef NATIVE_STATS
+
+int Win32_nativeFunctionCount = 26;
+int Win32_nativeFunctionCallCount[26];
+char * Win32_nativeFunctionNames[] = {
+	"CloseHandle",
+	"CreateCursor",
+	"CreateIconIndirect",
+	"CreateProcessW",
+	"DeleteObject",
+	"DestroyIcon",
+	"EnableWindow",
+	"ExtractIconExW",
+	"GetCursorPos",
+	"GetIconInfo",
+	"GetKeyboardState",
+	"GetModuleHandleW",
+	"GetProcessHeap",
+	"HeapAlloc",
+	"HeapFree",
+	"LoadImage",
+	"MapVirtualKeyW",
+	"MoveMemory",
+	"OleInitialize",
+	"OleUninitialize",
+	"PROCESS_1INFORMATION_1sizeof",
+	"SHELLEXECUTEINFOW_1sizeof",
+	"STARTUPINFOW_1sizeof",
+	"SetCursorPos",
+	"ShellExecuteExW",
+	"ToUnicode",
+};
+
+#define STATS_NATIVE(func) Java_org_eclipse_swt_tools_internal_NativeStats_##func
+
+JNIEXPORT jint JNICALL STATS_NATIVE(Win32_1GetFunctionCount)
+	(JNIEnv *env, jclass that)
+{
+	return Win32_nativeFunctionCount;
+}
+
+JNIEXPORT jstring JNICALL STATS_NATIVE(Win32_1GetFunctionName)
+	(JNIEnv *env, jclass that, jint index)
+{
+	return (*env)->NewStringUTF(env, Win32_nativeFunctionNames[index]);
+}
+
+JNIEXPORT jint JNICALL STATS_NATIVE(Win32_1GetFunctionCallCount)
+	(JNIEnv *env, jclass that, jint index)
+{
+	return Win32_nativeFunctionCallCount[index];
+}
+
+#endif
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32_stats.h b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32_stats.h
new file mode 100644
index 0000000..39fe188
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32_stats.h
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#ifdef NATIVE_STATS
+extern int Win32_nativeFunctionCount;
+extern int Win32_nativeFunctionCallCount[];
+extern char* Win32_nativeFunctionNames[];
+#define Win32_NATIVE_ENTER(env, that, func) Win32_nativeFunctionCallCount[func]++;
+#define Win32_NATIVE_EXIT(env, that, func) 
+#else
+#ifndef Win32_NATIVE_ENTER
+#define Win32_NATIVE_ENTER(env, that, func) 
+#endif
+#ifndef Win32_NATIVE_EXIT
+#define Win32_NATIVE_EXIT(env, that, func) 
+#endif
+#endif
+
+typedef enum {
+	CloseHandle_FUNC,
+	CreateCursor_FUNC,
+	CreateIconIndirect_FUNC,
+	CreateProcessW_FUNC,
+	DeleteObject_FUNC,
+	DestroyIcon_FUNC,
+	EnableWindow_FUNC,
+	ExtractIconExW_FUNC,
+	GetCursorPos_FUNC,
+	GetIconInfo_FUNC,
+	GetKeyboardState_FUNC,
+	GetModuleHandleW_FUNC,
+	GetProcessHeap_FUNC,
+	HeapAlloc_FUNC,
+	HeapFree_FUNC,
+	LoadImage_FUNC,
+	MapVirtualKeyW_FUNC,
+	MoveMemory_FUNC,
+	OleInitialize_FUNC,
+	OleUninitialize_FUNC,
+	PROCESS_1INFORMATION_1sizeof_FUNC,
+	SHELLEXECUTEINFOW_1sizeof_FUNC,
+	STARTUPINFOW_1sizeof_FUNC,
+	SetCursorPos_FUNC,
+	ShellExecuteExW_FUNC,
+	ToUnicode_FUNC,
+} Win32_FUNCS;
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32_structs.c b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32_structs.c
new file mode 100644
index 0000000..6dded9d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32_structs.c
@@ -0,0 +1,286 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "win32_structs.h"
+
+#ifndef NO_ICONINFO
+typedef struct ICONINFO_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID fIcon, xHotspot, yHotspot, hbmMask, hbmColor;
+} ICONINFO_FID_CACHE;
+
+ICONINFO_FID_CACHE ICONINFOFc;
+
+void cacheICONINFOFields(JNIEnv *env, jobject lpObject)
+{
+	if (ICONINFOFc.cached) return;
+	ICONINFOFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	ICONINFOFc.fIcon = (*env)->GetFieldID(env, ICONINFOFc.clazz, "fIcon", "Z");
+	ICONINFOFc.xHotspot = (*env)->GetFieldID(env, ICONINFOFc.clazz, "xHotspot", "I");
+	ICONINFOFc.yHotspot = (*env)->GetFieldID(env, ICONINFOFc.clazz, "yHotspot", "I");
+	ICONINFOFc.hbmMask = (*env)->GetFieldID(env, ICONINFOFc.clazz, "hbmMask", "I");
+	ICONINFOFc.hbmColor = (*env)->GetFieldID(env, ICONINFOFc.clazz, "hbmColor", "I");
+	ICONINFOFc.cached = 1;
+}
+
+ICONINFO *getICONINFOFields(JNIEnv *env, jobject lpObject, ICONINFO *lpStruct)
+{
+	if (!ICONINFOFc.cached) cacheICONINFOFields(env, lpObject);
+	lpStruct->fIcon = (*env)->GetBooleanField(env, lpObject, ICONINFOFc.fIcon);
+	lpStruct->xHotspot = (*env)->GetIntField(env, lpObject, ICONINFOFc.xHotspot);
+	lpStruct->yHotspot = (*env)->GetIntField(env, lpObject, ICONINFOFc.yHotspot);
+	lpStruct->hbmMask = (HBITMAP)(*env)->GetIntField(env, lpObject, ICONINFOFc.hbmMask);
+	lpStruct->hbmColor = (HBITMAP)(*env)->GetIntField(env, lpObject, ICONINFOFc.hbmColor);
+	return lpStruct;
+}
+
+void setICONINFOFields(JNIEnv *env, jobject lpObject, ICONINFO *lpStruct)
+{
+	if (!ICONINFOFc.cached) cacheICONINFOFields(env, lpObject);
+	(*env)->SetBooleanField(env, lpObject, ICONINFOFc.fIcon, (jboolean)lpStruct->fIcon);
+	(*env)->SetIntField(env, lpObject, ICONINFOFc.xHotspot, (jint)lpStruct->xHotspot);
+	(*env)->SetIntField(env, lpObject, ICONINFOFc.yHotspot, (jint)lpStruct->yHotspot);
+	(*env)->SetIntField(env, lpObject, ICONINFOFc.hbmMask, (jint)lpStruct->hbmMask);
+	(*env)->SetIntField(env, lpObject, ICONINFOFc.hbmColor, (jint)lpStruct->hbmColor);
+}
+#endif
+
+#ifndef NO_POINT
+typedef struct POINT_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID x, y;
+} POINT_FID_CACHE;
+
+POINT_FID_CACHE POINTFc;
+
+void cachePOINTFields(JNIEnv *env, jobject lpObject)
+{
+	if (POINTFc.cached) return;
+	POINTFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	POINTFc.x = (*env)->GetFieldID(env, POINTFc.clazz, "x", "I");
+	POINTFc.y = (*env)->GetFieldID(env, POINTFc.clazz, "y", "I");
+	POINTFc.cached = 1;
+}
+
+POINT *getPOINTFields(JNIEnv *env, jobject lpObject, POINT *lpStruct)
+{
+	if (!POINTFc.cached) cachePOINTFields(env, lpObject);
+	lpStruct->x = (*env)->GetIntField(env, lpObject, POINTFc.x);
+	lpStruct->y = (*env)->GetIntField(env, lpObject, POINTFc.y);
+	return lpStruct;
+}
+
+void setPOINTFields(JNIEnv *env, jobject lpObject, POINT *lpStruct)
+{
+	if (!POINTFc.cached) cachePOINTFields(env, lpObject);
+	(*env)->SetIntField(env, lpObject, POINTFc.x, (jint)lpStruct->x);
+	(*env)->SetIntField(env, lpObject, POINTFc.y, (jint)lpStruct->y);
+}
+#endif
+
+#ifndef NO_PROCESS_INFORMATION
+typedef struct PROCESS_INFORMATION_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID hProcess, hThread, dwProcessId, dwThreadId;
+} PROCESS_INFORMATION_FID_CACHE;
+
+PROCESS_INFORMATION_FID_CACHE PROCESS_INFORMATIONFc;
+
+void cachePROCESS_INFORMATIONFields(JNIEnv *env, jobject lpObject)
+{
+	if (PROCESS_INFORMATIONFc.cached) return;
+	PROCESS_INFORMATIONFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	PROCESS_INFORMATIONFc.hProcess = (*env)->GetFieldID(env, PROCESS_INFORMATIONFc.clazz, "hProcess", I_J);
+	PROCESS_INFORMATIONFc.hThread = (*env)->GetFieldID(env, PROCESS_INFORMATIONFc.clazz, "hThread", I_J);
+	PROCESS_INFORMATIONFc.dwProcessId = (*env)->GetFieldID(env, PROCESS_INFORMATIONFc.clazz, "dwProcessId", "I");
+	PROCESS_INFORMATIONFc.dwThreadId = (*env)->GetFieldID(env, PROCESS_INFORMATIONFc.clazz, "dwThreadId", "I");
+	PROCESS_INFORMATIONFc.cached = 1;
+}
+
+PROCESS_INFORMATION *getPROCESS_INFORMATIONFields(JNIEnv *env, jobject lpObject, PROCESS_INFORMATION *lpStruct)
+{
+	if (!PROCESS_INFORMATIONFc.cached) cachePROCESS_INFORMATIONFields(env, lpObject);
+	lpStruct->hProcess = (HANDLE)(*env)->GetIntLongField(env, lpObject, PROCESS_INFORMATIONFc.hProcess);
+	lpStruct->hThread = (HANDLE)(*env)->GetIntLongField(env, lpObject, PROCESS_INFORMATIONFc.hThread);
+	lpStruct->dwProcessId = (*env)->GetIntField(env, lpObject, PROCESS_INFORMATIONFc.dwProcessId);
+	lpStruct->dwThreadId = (*env)->GetIntField(env, lpObject, PROCESS_INFORMATIONFc.dwThreadId);
+	return lpStruct;
+}
+
+void setPROCESS_INFORMATIONFields(JNIEnv *env, jobject lpObject, PROCESS_INFORMATION *lpStruct)
+{
+	if (!PROCESS_INFORMATIONFc.cached) cachePROCESS_INFORMATIONFields(env, lpObject);
+	(*env)->SetIntLongField(env, lpObject, PROCESS_INFORMATIONFc.hProcess, (jintLong)lpStruct->hProcess);
+	(*env)->SetIntLongField(env, lpObject, PROCESS_INFORMATIONFc.hThread, (jintLong)lpStruct->hThread);
+	(*env)->SetIntField(env, lpObject, PROCESS_INFORMATIONFc.dwProcessId, (jint)lpStruct->dwProcessId);
+	(*env)->SetIntField(env, lpObject, PROCESS_INFORMATIONFc.dwThreadId, (jint)lpStruct->dwThreadId);
+}
+#endif
+
+#ifndef NO_SHELLEXECUTEINFOW
+typedef struct SHELLEXECUTEINFOW_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID cbSize, fMask, hwnd, lpVerb, lpFile, lpParameters, lpDirectory, nShow, hInstApp, lpIDList, lpClass, hkeyClass, dwHotKey, hIcon, hProcess;
+} SHELLEXECUTEINFOW_FID_CACHE;
+
+SHELLEXECUTEINFOW_FID_CACHE SHELLEXECUTEINFOWFc;
+
+void cacheSHELLEXECUTEINFOWFields(JNIEnv *env, jobject lpObject)
+{
+	if (SHELLEXECUTEINFOWFc.cached) return;
+	SHELLEXECUTEINFOWFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	SHELLEXECUTEINFOWFc.cbSize = (*env)->GetFieldID(env, SHELLEXECUTEINFOWFc.clazz, "cbSize", "I");
+	SHELLEXECUTEINFOWFc.fMask = (*env)->GetFieldID(env, SHELLEXECUTEINFOWFc.clazz, "fMask", "I");
+	SHELLEXECUTEINFOWFc.hwnd = (*env)->GetFieldID(env, SHELLEXECUTEINFOWFc.clazz, "hwnd", I_J);
+	SHELLEXECUTEINFOWFc.lpVerb = (*env)->GetFieldID(env, SHELLEXECUTEINFOWFc.clazz, "lpVerb", I_J);
+	SHELLEXECUTEINFOWFc.lpFile = (*env)->GetFieldID(env, SHELLEXECUTEINFOWFc.clazz, "lpFile", "I");
+	SHELLEXECUTEINFOWFc.lpParameters = (*env)->GetFieldID(env, SHELLEXECUTEINFOWFc.clazz, "lpParameters", I_J);
+	SHELLEXECUTEINFOWFc.lpDirectory = (*env)->GetFieldID(env, SHELLEXECUTEINFOWFc.clazz, "lpDirectory", I_J);
+	SHELLEXECUTEINFOWFc.nShow = (*env)->GetFieldID(env, SHELLEXECUTEINFOWFc.clazz, "nShow", "I");
+	SHELLEXECUTEINFOWFc.hInstApp = (*env)->GetFieldID(env, SHELLEXECUTEINFOWFc.clazz, "hInstApp", I_J);
+	SHELLEXECUTEINFOWFc.lpIDList = (*env)->GetFieldID(env, SHELLEXECUTEINFOWFc.clazz, "lpIDList", I_J);
+	SHELLEXECUTEINFOWFc.lpClass = (*env)->GetFieldID(env, SHELLEXECUTEINFOWFc.clazz, "lpClass", I_J);
+	SHELLEXECUTEINFOWFc.hkeyClass = (*env)->GetFieldID(env, SHELLEXECUTEINFOWFc.clazz, "hkeyClass", I_J);
+	SHELLEXECUTEINFOWFc.dwHotKey = (*env)->GetFieldID(env, SHELLEXECUTEINFOWFc.clazz, "dwHotKey", "I");
+	SHELLEXECUTEINFOWFc.hIcon = (*env)->GetFieldID(env, SHELLEXECUTEINFOWFc.clazz, "hIcon", I_J);
+	SHELLEXECUTEINFOWFc.hProcess = (*env)->GetFieldID(env, SHELLEXECUTEINFOWFc.clazz, "hProcess", I_J);
+	SHELLEXECUTEINFOWFc.cached = 1;
+}
+
+SHELLEXECUTEINFOW *getSHELLEXECUTEINFOWFields(JNIEnv *env, jobject lpObject, SHELLEXECUTEINFOW *lpStruct)
+{
+	if (!SHELLEXECUTEINFOWFc.cached) cacheSHELLEXECUTEINFOWFields(env, lpObject);
+	lpStruct->cbSize = (*env)->GetIntField(env, lpObject, SHELLEXECUTEINFOWFc.cbSize);
+	lpStruct->fMask = (*env)->GetIntField(env, lpObject, SHELLEXECUTEINFOWFc.fMask);
+	lpStruct->hwnd = (HWND)(*env)->GetIntLongField(env, lpObject, SHELLEXECUTEINFOWFc.hwnd);
+	lpStruct->lpVerb = (LPWSTR)(*env)->GetIntLongField(env, lpObject, SHELLEXECUTEINFOWFc.lpVerb);
+	lpStruct->lpFile = (LPWSTR)(*env)->GetIntField(env, lpObject, SHELLEXECUTEINFOWFc.lpFile);
+	lpStruct->lpParameters = (LPWSTR)(*env)->GetIntLongField(env, lpObject, SHELLEXECUTEINFOWFc.lpParameters);
+	lpStruct->lpDirectory = (LPWSTR)(*env)->GetIntLongField(env, lpObject, SHELLEXECUTEINFOWFc.lpDirectory);
+	lpStruct->nShow = (*env)->GetIntField(env, lpObject, SHELLEXECUTEINFOWFc.nShow);
+	lpStruct->hInstApp = (HINSTANCE)(*env)->GetIntLongField(env, lpObject, SHELLEXECUTEINFOWFc.hInstApp);
+	lpStruct->lpIDList = (LPVOID)(*env)->GetIntLongField(env, lpObject, SHELLEXECUTEINFOWFc.lpIDList);
+	lpStruct->lpClass = (LPWSTR)(*env)->GetIntLongField(env, lpObject, SHELLEXECUTEINFOWFc.lpClass);
+	lpStruct->hkeyClass = (HKEY)(*env)->GetIntLongField(env, lpObject, SHELLEXECUTEINFOWFc.hkeyClass);
+	lpStruct->dwHotKey = (*env)->GetIntField(env, lpObject, SHELLEXECUTEINFOWFc.dwHotKey);
+	lpStruct->hIcon = (HANDLE)(*env)->GetIntLongField(env, lpObject, SHELLEXECUTEINFOWFc.hIcon);
+	lpStruct->hProcess = (HANDLE)(*env)->GetIntLongField(env, lpObject, SHELLEXECUTEINFOWFc.hProcess);
+	return lpStruct;
+}
+
+void setSHELLEXECUTEINFOWFields(JNIEnv *env, jobject lpObject, SHELLEXECUTEINFOW *lpStruct)
+{
+	if (!SHELLEXECUTEINFOWFc.cached) cacheSHELLEXECUTEINFOWFields(env, lpObject);
+	(*env)->SetIntField(env, lpObject, SHELLEXECUTEINFOWFc.cbSize, (jint)lpStruct->cbSize);
+	(*env)->SetIntField(env, lpObject, SHELLEXECUTEINFOWFc.fMask, (jint)lpStruct->fMask);
+	(*env)->SetIntLongField(env, lpObject, SHELLEXECUTEINFOWFc.hwnd, (jintLong)lpStruct->hwnd);
+	(*env)->SetIntLongField(env, lpObject, SHELLEXECUTEINFOWFc.lpVerb, (jintLong)lpStruct->lpVerb);
+	(*env)->SetIntField(env, lpObject, SHELLEXECUTEINFOWFc.lpFile, (jint)lpStruct->lpFile);
+	(*env)->SetIntLongField(env, lpObject, SHELLEXECUTEINFOWFc.lpParameters, (jintLong)lpStruct->lpParameters);
+	(*env)->SetIntLongField(env, lpObject, SHELLEXECUTEINFOWFc.lpDirectory, (jintLong)lpStruct->lpDirectory);
+	(*env)->SetIntField(env, lpObject, SHELLEXECUTEINFOWFc.nShow, (jint)lpStruct->nShow);
+	(*env)->SetIntLongField(env, lpObject, SHELLEXECUTEINFOWFc.hInstApp, (jintLong)lpStruct->hInstApp);
+	(*env)->SetIntLongField(env, lpObject, SHELLEXECUTEINFOWFc.lpIDList, (jintLong)lpStruct->lpIDList);
+	(*env)->SetIntLongField(env, lpObject, SHELLEXECUTEINFOWFc.lpClass, (jintLong)lpStruct->lpClass);
+	(*env)->SetIntLongField(env, lpObject, SHELLEXECUTEINFOWFc.hkeyClass, (jintLong)lpStruct->hkeyClass);
+	(*env)->SetIntField(env, lpObject, SHELLEXECUTEINFOWFc.dwHotKey, (jint)lpStruct->dwHotKey);
+	(*env)->SetIntLongField(env, lpObject, SHELLEXECUTEINFOWFc.hIcon, (jintLong)lpStruct->hIcon);
+	(*env)->SetIntLongField(env, lpObject, SHELLEXECUTEINFOWFc.hProcess, (jintLong)lpStruct->hProcess);
+}
+#endif
+
+#ifndef NO_STARTUPINFOW
+typedef struct STARTUPINFOW_FID_CACHE {
+	int cached;
+	jclass clazz;
+	jfieldID cb, lpReserved, lpDesktop, lpTitle, dwX, dwY, dwXSize, dwYSize, dwXCountChars, dwYCountChars, dwFillAttribute, dwFlags, wShowWindow, cbReserved2, lpReserved2, hStdInput, hStdOutput, hStdError;
+} STARTUPINFOW_FID_CACHE;
+
+STARTUPINFOW_FID_CACHE STARTUPINFOWFc;
+
+void cacheSTARTUPINFOWFields(JNIEnv *env, jobject lpObject)
+{
+	if (STARTUPINFOWFc.cached) return;
+	STARTUPINFOWFc.clazz = (*env)->GetObjectClass(env, lpObject);
+	STARTUPINFOWFc.cb = (*env)->GetFieldID(env, STARTUPINFOWFc.clazz, "cb", "I");
+	STARTUPINFOWFc.lpReserved = (*env)->GetFieldID(env, STARTUPINFOWFc.clazz, "lpReserved", I_J);
+	STARTUPINFOWFc.lpDesktop = (*env)->GetFieldID(env, STARTUPINFOWFc.clazz, "lpDesktop", I_J);
+	STARTUPINFOWFc.lpTitle = (*env)->GetFieldID(env, STARTUPINFOWFc.clazz, "lpTitle", I_J);
+	STARTUPINFOWFc.dwX = (*env)->GetFieldID(env, STARTUPINFOWFc.clazz, "dwX", "I");
+	STARTUPINFOWFc.dwY = (*env)->GetFieldID(env, STARTUPINFOWFc.clazz, "dwY", "I");
+	STARTUPINFOWFc.dwXSize = (*env)->GetFieldID(env, STARTUPINFOWFc.clazz, "dwXSize", "I");
+	STARTUPINFOWFc.dwYSize = (*env)->GetFieldID(env, STARTUPINFOWFc.clazz, "dwYSize", "I");
+	STARTUPINFOWFc.dwXCountChars = (*env)->GetFieldID(env, STARTUPINFOWFc.clazz, "dwXCountChars", "I");
+	STARTUPINFOWFc.dwYCountChars = (*env)->GetFieldID(env, STARTUPINFOWFc.clazz, "dwYCountChars", "I");
+	STARTUPINFOWFc.dwFillAttribute = (*env)->GetFieldID(env, STARTUPINFOWFc.clazz, "dwFillAttribute", "I");
+	STARTUPINFOWFc.dwFlags = (*env)->GetFieldID(env, STARTUPINFOWFc.clazz, "dwFlags", "I");
+	STARTUPINFOWFc.wShowWindow = (*env)->GetFieldID(env, STARTUPINFOWFc.clazz, "wShowWindow", "S");
+	STARTUPINFOWFc.cbReserved2 = (*env)->GetFieldID(env, STARTUPINFOWFc.clazz, "cbReserved2", "S");
+	STARTUPINFOWFc.lpReserved2 = (*env)->GetFieldID(env, STARTUPINFOWFc.clazz, "lpReserved2", I_J);
+	STARTUPINFOWFc.hStdInput = (*env)->GetFieldID(env, STARTUPINFOWFc.clazz, "hStdInput", I_J);
+	STARTUPINFOWFc.hStdOutput = (*env)->GetFieldID(env, STARTUPINFOWFc.clazz, "hStdOutput", I_J);
+	STARTUPINFOWFc.hStdError = (*env)->GetFieldID(env, STARTUPINFOWFc.clazz, "hStdError", I_J);
+	STARTUPINFOWFc.cached = 1;
+}
+
+STARTUPINFOW *getSTARTUPINFOWFields(JNIEnv *env, jobject lpObject, STARTUPINFOW *lpStruct)
+{
+	if (!STARTUPINFOWFc.cached) cacheSTARTUPINFOWFields(env, lpObject);
+	lpStruct->cb = (*env)->GetIntField(env, lpObject, STARTUPINFOWFc.cb);
+	lpStruct->lpReserved = (LPWSTR)(*env)->GetIntLongField(env, lpObject, STARTUPINFOWFc.lpReserved);
+	lpStruct->lpDesktop = (LPWSTR)(*env)->GetIntLongField(env, lpObject, STARTUPINFOWFc.lpDesktop);
+	lpStruct->lpTitle = (LPWSTR)(*env)->GetIntLongField(env, lpObject, STARTUPINFOWFc.lpTitle);
+	lpStruct->dwX = (*env)->GetIntField(env, lpObject, STARTUPINFOWFc.dwX);
+	lpStruct->dwY = (*env)->GetIntField(env, lpObject, STARTUPINFOWFc.dwY);
+	lpStruct->dwXSize = (*env)->GetIntField(env, lpObject, STARTUPINFOWFc.dwXSize);
+	lpStruct->dwYSize = (*env)->GetIntField(env, lpObject, STARTUPINFOWFc.dwYSize);
+	lpStruct->dwXCountChars = (*env)->GetIntField(env, lpObject, STARTUPINFOWFc.dwXCountChars);
+	lpStruct->dwYCountChars = (*env)->GetIntField(env, lpObject, STARTUPINFOWFc.dwYCountChars);
+	lpStruct->dwFillAttribute = (*env)->GetIntField(env, lpObject, STARTUPINFOWFc.dwFillAttribute);
+	lpStruct->dwFlags = (*env)->GetIntField(env, lpObject, STARTUPINFOWFc.dwFlags);
+	lpStruct->wShowWindow = (*env)->GetShortField(env, lpObject, STARTUPINFOWFc.wShowWindow);
+	lpStruct->cbReserved2 = (*env)->GetShortField(env, lpObject, STARTUPINFOWFc.cbReserved2);
+	lpStruct->lpReserved2 = (LPBYTE)(*env)->GetIntLongField(env, lpObject, STARTUPINFOWFc.lpReserved2);
+	lpStruct->hStdInput = (HANDLE)(*env)->GetIntLongField(env, lpObject, STARTUPINFOWFc.hStdInput);
+	lpStruct->hStdOutput = (HANDLE)(*env)->GetIntLongField(env, lpObject, STARTUPINFOWFc.hStdOutput);
+	lpStruct->hStdError = (HANDLE)(*env)->GetIntLongField(env, lpObject, STARTUPINFOWFc.hStdError);
+	return lpStruct;
+}
+
+void setSTARTUPINFOWFields(JNIEnv *env, jobject lpObject, STARTUPINFOW *lpStruct)
+{
+	if (!STARTUPINFOWFc.cached) cacheSTARTUPINFOWFields(env, lpObject);
+	(*env)->SetIntField(env, lpObject, STARTUPINFOWFc.cb, (jint)lpStruct->cb);
+	(*env)->SetIntLongField(env, lpObject, STARTUPINFOWFc.lpReserved, (jintLong)lpStruct->lpReserved);
+	(*env)->SetIntLongField(env, lpObject, STARTUPINFOWFc.lpDesktop, (jintLong)lpStruct->lpDesktop);
+	(*env)->SetIntLongField(env, lpObject, STARTUPINFOWFc.lpTitle, (jintLong)lpStruct->lpTitle);
+	(*env)->SetIntField(env, lpObject, STARTUPINFOWFc.dwX, (jint)lpStruct->dwX);
+	(*env)->SetIntField(env, lpObject, STARTUPINFOWFc.dwY, (jint)lpStruct->dwY);
+	(*env)->SetIntField(env, lpObject, STARTUPINFOWFc.dwXSize, (jint)lpStruct->dwXSize);
+	(*env)->SetIntField(env, lpObject, STARTUPINFOWFc.dwYSize, (jint)lpStruct->dwYSize);
+	(*env)->SetIntField(env, lpObject, STARTUPINFOWFc.dwXCountChars, (jint)lpStruct->dwXCountChars);
+	(*env)->SetIntField(env, lpObject, STARTUPINFOWFc.dwYCountChars, (jint)lpStruct->dwYCountChars);
+	(*env)->SetIntField(env, lpObject, STARTUPINFOWFc.dwFillAttribute, (jint)lpStruct->dwFillAttribute);
+	(*env)->SetIntField(env, lpObject, STARTUPINFOWFc.dwFlags, (jint)lpStruct->dwFlags);
+	(*env)->SetShortField(env, lpObject, STARTUPINFOWFc.wShowWindow, (jshort)lpStruct->wShowWindow);
+	(*env)->SetShortField(env, lpObject, STARTUPINFOWFc.cbReserved2, (jshort)lpStruct->cbReserved2);
+	(*env)->SetIntLongField(env, lpObject, STARTUPINFOWFc.lpReserved2, (jintLong)lpStruct->lpReserved2);
+	(*env)->SetIntLongField(env, lpObject, STARTUPINFOWFc.hStdInput, (jintLong)lpStruct->hStdInput);
+	(*env)->SetIntLongField(env, lpObject, STARTUPINFOWFc.hStdOutput, (jintLong)lpStruct->hStdOutput);
+	(*env)->SetIntLongField(env, lpObject, STARTUPINFOWFc.hStdError, (jintLong)lpStruct->hStdError);
+}
+#endif
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32_structs.h b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32_structs.h
new file mode 100644
index 0000000..0eb00b3
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/library/win32_structs.h
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#include "win32.h"
+
+#ifndef NO_ICONINFO
+void cacheICONINFOFields(JNIEnv *env, jobject lpObject);
+ICONINFO *getICONINFOFields(JNIEnv *env, jobject lpObject, ICONINFO *lpStruct);
+void setICONINFOFields(JNIEnv *env, jobject lpObject, ICONINFO *lpStruct);
+#define ICONINFO_sizeof() sizeof(ICONINFO)
+#else
+#define cacheICONINFOFields(a,b)
+#define getICONINFOFields(a,b,c) NULL
+#define setICONINFOFields(a,b,c)
+#define ICONINFO_sizeof() 0
+#endif
+
+#ifndef NO_POINT
+void cachePOINTFields(JNIEnv *env, jobject lpObject);
+POINT *getPOINTFields(JNIEnv *env, jobject lpObject, POINT *lpStruct);
+void setPOINTFields(JNIEnv *env, jobject lpObject, POINT *lpStruct);
+#define POINT_sizeof() sizeof(POINT)
+#else
+#define cachePOINTFields(a,b)
+#define getPOINTFields(a,b,c) NULL
+#define setPOINTFields(a,b,c)
+#define POINT_sizeof() 0
+#endif
+
+#ifndef NO_PROCESS_INFORMATION
+void cachePROCESS_INFORMATIONFields(JNIEnv *env, jobject lpObject);
+PROCESS_INFORMATION *getPROCESS_INFORMATIONFields(JNIEnv *env, jobject lpObject, PROCESS_INFORMATION *lpStruct);
+void setPROCESS_INFORMATIONFields(JNIEnv *env, jobject lpObject, PROCESS_INFORMATION *lpStruct);
+#define PROCESS_INFORMATION_sizeof() sizeof(PROCESS_INFORMATION)
+#else
+#define cachePROCESS_INFORMATIONFields(a,b)
+#define getPROCESS_INFORMATIONFields(a,b,c) NULL
+#define setPROCESS_INFORMATIONFields(a,b,c)
+#define PROCESS_INFORMATION_sizeof() 0
+#endif
+
+#ifndef NO_SHELLEXECUTEINFOW
+void cacheSHELLEXECUTEINFOWFields(JNIEnv *env, jobject lpObject);
+SHELLEXECUTEINFOW *getSHELLEXECUTEINFOWFields(JNIEnv *env, jobject lpObject, SHELLEXECUTEINFOW *lpStruct);
+void setSHELLEXECUTEINFOWFields(JNIEnv *env, jobject lpObject, SHELLEXECUTEINFOW *lpStruct);
+#define SHELLEXECUTEINFOW_sizeof() sizeof(SHELLEXECUTEINFOW)
+#else
+#define cacheSHELLEXECUTEINFOWFields(a,b)
+#define getSHELLEXECUTEINFOWFields(a,b,c) NULL
+#define setSHELLEXECUTEINFOWFields(a,b,c)
+#define SHELLEXECUTEINFOW_sizeof() 0
+#endif
+
+#ifndef NO_STARTUPINFOW
+void cacheSTARTUPINFOWFields(JNIEnv *env, jobject lpObject);
+STARTUPINFOW *getSTARTUPINFOWFields(JNIEnv *env, jobject lpObject, STARTUPINFOW *lpStruct);
+void setSTARTUPINFOWFields(JNIEnv *env, jobject lpObject, STARTUPINFOW *lpStruct);
+#define STARTUPINFOW_sizeof() sizeof(STARTUPINFOW)
+#else
+#define cacheSTARTUPINFOWFields(a,b)
+#define getSTARTUPINFOWFields(a,b,c) NULL
+#define setSTARTUPINFOWFields(a,b,c)
+#define STARTUPINFOW_sizeof() 0
+#endif
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/ICONINFO.java b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/ICONINFO.java
new file mode 100644
index 0000000..84e165d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/ICONINFO.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * 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.internal.win32;
+
+public class ICONINFO {
+	public boolean fIcon;
+	public int xHotspot; 
+	public int yHotspot;
+	/** @field cast=(HBITMAP) */
+	public int hbmMask;
+	/** @field cast=(HBITMAP) */
+	public int hbmColor;
+	public static final int sizeof = 20;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/POINT.java b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/POINT.java
new file mode 100644
index 0000000..3f07037
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/POINT.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.internal.win32;
+
+public class POINT {
+	public int x;
+	public int y;
+	public static final int sizeof = 8;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/PROCESS_INFORMATION.java b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/PROCESS_INFORMATION.java
new file mode 100644
index 0000000..efc7d20
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/PROCESS_INFORMATION.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * 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.internal.win32;
+
+public class PROCESS_INFORMATION {
+	/** @field cast=(HANDLE) */
+	public int /*long*/ hProcess;
+	/** @field cast=(HANDLE) */
+	public int /*long*/ hThread;
+	public int dwProcessId;
+	public int dwThreadId;
+	public static int sizeof = Win32.PROCESS_INFORMATION_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/SHELLEXECUTEINFOW.java b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/SHELLEXECUTEINFOW.java
new file mode 100644
index 0000000..a8214aa
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/SHELLEXECUTEINFOW.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * 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.internal.win32;
+
+public class SHELLEXECUTEINFOW {
+	public int cbSize;
+	public int fMask; 
+	/** @field cast=(HWND) */
+	public int /*long*/ hwnd;
+	/** @field cast=(LPWSTR) */
+	public int /*long*/ lpVerb;
+	/** @field cast=(LPWSTR) */
+	public int lpFile;
+	/** @field cast=(LPWSTR) */
+	public int /*long*/ lpParameters;
+	/** @field cast=(LPWSTR) */
+	public int /*long*/ lpDirectory;
+	public int nShow; 
+	/** @field cast=(HINSTANCE) */
+	public int /*long*/ hInstApp;
+	// Optional members
+	/** @field cast=(LPVOID) */
+	public int /*long*/ lpIDList; 
+	/** @field cast=(LPWSTR) */
+	public int /*long*/ lpClass;
+	/** @field cast=(HKEY) */
+	public int /*long*/ hkeyClass;
+	public int dwHotKey;
+//	union {
+//		HANDLE hIcon;		
+//		HANDLE hMonitor;
+//	};
+	/** @field cast=(HANDLE) */
+	public int /*long*/ hIcon;
+	/** @field cast=(HANDLE) */
+	public int /*long*/ hProcess; 
+	public static final int sizeof = Win32.SHELLEXECUTEINFOW_sizeof ();
+}
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/STARTUPINFOW.java b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/STARTUPINFOW.java
new file mode 100644
index 0000000..7448750
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/STARTUPINFOW.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * 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.internal.win32;
+
+public class STARTUPINFOW {
+	public int cb;
+	/** @field cast=(LPWSTR) */
+	public int /*long*/ lpReserved;
+	/** @field cast=(LPWSTR) */
+	public int /*long*/ lpDesktop;
+	/** @field cast=(LPWSTR) */
+	public int /*long*/ lpTitle;
+	public int dwX;
+	public int dwY;
+	public int dwXSize;
+	public int dwYSize;
+	public int dwXCountChars;
+	public int dwYCountChars;
+	public int dwFillAttribute;
+	public int dwFlags;
+	public short wShowWindow;
+	public short cbReserved2;
+	/** @field cast=(LPBYTE) */
+	public int /*long*/ lpReserved2;
+	/** @field cast=(HANDLE) */
+	public int /*long*/ hStdInput;
+	/** @field cast=(HANDLE) */
+	public int /*long*/ hStdOutput;
+	/** @field cast=(HANDLE) */
+	public int /*long*/ hStdError;
+	public static int sizeof = Win32.STARTUPINFOW_sizeof ();
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/Win32.java b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/Win32.java
new file mode 100644
index 0000000..20c9820
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/wpf_win32/org/eclipse/swt/internal/win32/Win32.java
@@ -0,0 +1,124 @@
+/*******************************************************************************
+ * 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.internal.win32;
+
+
+import org.eclipse.swt.internal.*;
+
+public class Win32 extends C {
+	static {
+		Library.loadLibrary ("swt-win32"); //$NON-NLS-1$
+	}
+
+	/** GDI+ constants */
+	public static final int PixelFormat_Format24bppRgb = 137224;
+	public static final int PixelFormat_Format32bppRgb = 139273;
+	public static final int PixelFormat_Format32bppArgb = 2498570;
+	public static final int PixelFormat_Format16bppRgb555 = 135173;
+	public static final int PixelFormat_Format16bppRgb565 = 135174;
+	public static final int PixelFormat_Format16bppArgb1555 = 397319;
+	
+	public static final int OIC_BANG = 0x7F03;
+	public static final int OIC_HAND = 0x7F01;
+	public static final int OIC_INFORMATION = 0x7F04;
+	public static final int OIC_QUES = 0x7F02;
+	public static final int OIC_WINLOGO = 0x7F05;
+	public static final int IMAGE_ICON = 0x1;
+	public static final int LR_SHARED = 0x8000;
+	
+	public static int HEAP_ZERO_MEMORY = 0x8;
+	public static int SW_SHOW = 0x5;
+	
+/** OLE Natives */	
+
+/** @param reserved cast=(LPVOID) */
+public static final native int OleInitialize(int reserved);
+public static final native void OleUninitialize();
+
+/** Win32 Natives */
+	
+/** @param hObject cast=(HANDLE) */
+public static final native boolean CloseHandle(int hObject);
+/**
+ * @param hInst cast=(HINSTANCE)
+ * @param pvANDPlane cast=(CONST VOID *),flags=no_out critical
+ * @param pvXORPlane cast=(CONST VOID *),flags=no_out critical
+ */
+public static final native int CreateCursor (int hInst, int xHotSpot, int yHotSpot, int nWidth, int nHeight, byte [] pvANDPlane, byte [] pvXORPlane);
+/**
+ * @param lpApplicationName cast=(LPCWSTR)
+ * @param lpCommandLine cast=(LPWSTR)
+ * @param lpProcessAttributes cast=(LPSECURITY_ATTRIBUTES)
+ * @param lpThreadAttributes cast=(LPSECURITY_ATTRIBUTES)
+ * @param dwCreationFlags cast=(DWORD)
+ * @param lpEnvironment cast=(LPVOID)
+ * @param lpCurrentDirectory cast=(LPCWSTR)
+ * @param lpStartupInfo cast=(LPSTARTUPINFOW)
+ * @param lpProcessInformation cast=(LPPROCESS_INFORMATION)
+ */
+public static final native boolean CreateProcessW(int lpApplicationName, char [] lpCommandLine, int lpProcessAttributes, int lpThreadAttributes, boolean bInheritHandles, int dwCreationFlags, int lpEnvironment, int lpCurrentDirectory, STARTUPINFOW lpStartupInfo, PROCESS_INFORMATION lpProcessInformation);
+public static final native int CreateIconIndirect (ICONINFO lplf);
+/** @param hGdiObj cast=(HGDIOBJ) */
+public static final native boolean DeleteObject (int hGdiObj);
+/** @param hIcon cast=(HICON) */
+public static final native boolean DestroyIcon (int hIcon);
+/** @param window cast=(HWND) */
+public static final native void EnableWindow(int window, boolean enabled);
+/**
+ * @param lpszFile cast=(LPCWSTR)
+ * @param phiconLarge cast=(HICON*)
+ * @param phiconSmall cast=(HICON*)
+ * @param nIcons cast=(UINT)
+ */
+public static final native int ExtractIconExW(char[] lpszFile, int nIconIndex, int [] phiconLarge, int [] phiconSmall, int nIcons);
+/** @param point cast=(LPPOINT) */
+public static final native void GetCursorPos (POINT point);
+/** @param hIcon cast=(HICON) */
+public static final native boolean GetIconInfo (int hIcon, ICONINFO piconinfo);
+/** @param lpKeyState cast=(PBYTE) */
+public static final native boolean GetKeyboardState (byte [] lpKeyState);
+public static final native int GetProcessHeap();
+/** @param lpModuleName cast=(LPCWSTR) */
+public static final native int GetModuleHandleW (char [] lpModuleName);
+/** @param hHeap cast=(HANDLE) */
+public static final native int HeapAlloc (int hHeap, int dwFlags, int dwBytes);
+/**
+ * @param hHeap cast=(HANDLE)
+ * @param lpMem cast=(LPVOID)
+ */
+public static final native boolean HeapFree (int hHeap, int dwFlags, int lpMem);
+/**
+ * @param hinst cast=(HINSTANCE)
+ * @param lpszName cast=(LPCTSTR)
+ * @param uType cast=(UINT)
+ * @param fuLoad cast=(UINT)
+ */
+public static final native int LoadImage (int hinst, int lpszName, int uType, int cxDesired, int cyDesired, int fuLoad);
+public static final native int MapVirtualKeyW (int uCode, int uMapType);
+/**
+ * @param Destination cast=(PVOID)
+ * @param Source cast=(CONST VOID *),flags=no_out critical
+ */
+public static final native void MoveMemory (int Destination, char [] Source, int Length);
+public static final native int PROCESS_INFORMATION_sizeof();
+public static final native int SetCursorPos (int x, int y);
+/** @param lpExecInfo cast=(LPSHELLEXECUTEINFOW) */
+public static final native boolean ShellExecuteExW(SHELLEXECUTEINFOW lpExecInfo);
+public static final native int SHELLEXECUTEINFOW_sizeof();
+public static final native int STARTUPINFOW_sizeof();
+/**
+ * @param lpKeyState cast=(PBYTE)
+ * @param pwszBuff cast=(LPWSTR)
+ */
+public static final native int ToUnicode(int wVirtKey, int wScanCode, byte [] lpKeyState, char [] pwszBuff, int cchBuff, int wFlags);
+
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Printing/cocoa/org/eclipse/swt/printing/PrintDialog.java b/bundles/org.eclipse.swt/Eclipse SWT Printing/cocoa/org/eclipse/swt/printing/PrintDialog.java
new file mode 100755
index 0000000..5b3d03b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Printing/cocoa/org/eclipse/swt/printing/PrintDialog.java
@@ -0,0 +1,377 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.printing;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.printing.PrinterData;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class allow the user to select
+ * a printer and various print-related parameters
+ * prior to starting a print job.
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#printing">Printing snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class PrintDialog extends Dialog {
+	PrinterData printerData = new PrinterData();
+	int returnCode;
+	
+	// the following Callbacks are never freed
+	static Callback dialogCallback5;
+	static final byte[] SWT_OBJECT = {'S', 'W', 'T', '_', 'O', 'B', 'J', 'E', 'C', 'T', '\0'};
+
+/**
+ * Constructs a new instance of this class given only its parent.
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public PrintDialog (Shell parent) {
+	this (parent, SWT.PRIMARY_MODAL);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public PrintDialog (Shell parent, int style) {
+	super (parent, checkStyle(parent, style));
+	checkSubclass ();
+}
+
+static int checkStyle (Shell parent, int style) {
+	int mask = SWT.PRIMARY_MODAL | SWT.APPLICATION_MODAL | SWT.SYSTEM_MODAL;
+	if ((style & SWT.SHEET) != 0) {
+		if (getSheetEnabled ()) {
+			if (parent == null) {
+				style &= ~SWT.SHEET;
+			}
+		} else {
+			style &= ~SWT.SHEET;
+		}
+		if ((style & mask) == 0) {
+			style |= parent == null ? SWT.APPLICATION_MODAL : SWT.PRIMARY_MODAL;
+		}
+	}
+	return style;
+}
+
+/**
+ * Sets the printer data that will be used when the dialog
+ * is opened.
+ * <p>
+ * Setting the printer data to null is equivalent to
+ * resetting all data fields to their default values.
+ * </p>
+ * 
+ * @param data the data that will be used when the dialog is opened or null to use default data
+ * 
+ * @since 3.4
+ */
+public void setPrinterData(PrinterData data) {
+	this.printerData = data;
+}
+
+/**
+ * Returns the printer data that will be used when the dialog
+ * is opened.
+ * 
+ * @return the data that will be used when the dialog is opened
+ * 
+ * @since 3.4
+ */
+public PrinterData getPrinterData() {
+	return printerData;
+}
+
+/**
+ * Makes the receiver visible and brings it to the front
+ * of the display.
+ *
+ * @return a printer data object describing the desired print job parameters,
+ *         or null if the dialog was canceled, no printers were found, or an error occurred
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public PrinterData open() {
+	PrinterData data = null;
+	NSPrintPanel panel = NSPrintPanel.printPanel();
+	NSPrintInfo printInfo = new NSPrintInfo(NSPrintInfo.sharedPrintInfo().copy());
+	printInfo.setOrientation(printerData.orientation == PrinterData.LANDSCAPE ? OS.NSLandscapeOrientation : OS.NSPortraitOrientation);
+	NSMutableDictionary dict = printInfo.dictionary();	
+	dict.setValue(NSNumber.numberWithBool(printerData.collate), OS.NSPrintMustCollate);
+	dict.setValue(NSNumber.numberWithInt(printerData.copyCount), OS.NSPrintCopies);
+	if (printerData.printToFile) {
+		dict.setValue(OS.NSPrintSaveJob, OS.NSPrintJobDisposition);
+	}
+	if (printerData.fileName != null && printerData.fileName.length() > 0) {
+		dict.setValue(NSString.stringWith(printerData.fileName), OS.NSPrintSavePath);
+	}
+	dict.setValue(NSNumber.numberWithBool(printerData.scope == PrinterData.ALL_PAGES), OS.NSPrintAllPages);
+	if (printerData.scope == PrinterData.PAGE_RANGE) {
+		dict.setValue(NSNumber.numberWithInt(printerData.startPage), OS.NSPrintFirstPage);
+		dict.setValue(NSNumber.numberWithInt(printerData.endPage), OS.NSPrintLastPage);
+	}
+	panel.setOptions(OS.NSPrintPanelShowsPageSetupAccessory | panel.options());
+	int response;
+	if ((getStyle () & SWT.SHEET) != 0) {
+		initClasses();
+		SWTPrintPanelDelegate delegate = (SWTPrintPanelDelegate)new SWTPrintPanelDelegate().alloc().init();
+		int /*long*/ jniRef = OS.NewGlobalRef(this);
+		if (jniRef == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+		OS.object_setInstanceVariable(delegate.id, SWT_OBJECT, jniRef);
+		returnCode = -1;
+		Shell parent = getParent();
+		panel.beginSheetWithPrintInfo(printInfo, parent.view.window(), delegate, OS.sel_panelDidEnd_returnCode_contextInfo_, 0);
+		NSApplication application = NSApplication.sharedApplication();
+		while (returnCode == -1) application.run();
+		if (delegate != null) delegate.release();
+		if (jniRef != 0) OS.DeleteGlobalRef(jniRef);
+		response = returnCode;
+	} else {
+		response = (int)/*64*/panel.runModalWithPrintInfo(printInfo);
+	}
+	if (response != OS.NSCancelButton) {
+		NSPrinter printer = printInfo.printer();
+		NSString str = printer.name();
+		data = new PrinterData(Printer.DRIVER, str.getString());
+		data.printToFile = printInfo.jobDisposition().isEqual(OS.NSPrintSaveJob);
+		if (data.printToFile) {
+			NSString filename = new NSString(dict.objectForKey(OS.NSPrintSavePath));
+			data.fileName = filename.getString();
+		}
+		data.scope = new NSNumber(dict.objectForKey(OS.NSPrintAllPages)).intValue() != 0 ? PrinterData.ALL_PAGES : PrinterData.PAGE_RANGE;
+		if (data.scope == PrinterData.PAGE_RANGE) {
+			data.startPage = new NSNumber(dict.objectForKey(OS.NSPrintFirstPage)).intValue();
+			data.endPage = new NSNumber(dict.objectForKey(OS.NSPrintLastPage)).intValue();
+		}
+		data.collate = new NSNumber(dict.objectForKey(OS.NSPrintMustCollate)).intValue() != 0;
+		data.collate = false; //TODO: Only set to false if the printer does the collate internally (most printers do)
+		data.copyCount = new NSNumber(dict.objectForKey(OS.NSPrintCopies)).intValue();
+		data.copyCount = 1; //TODO: Only set to 1 if the printer does the copy internally (most printers do)
+		data.orientation = printInfo.orientation() == OS.NSLandscapeOrientation ? PrinterData.LANDSCAPE : PrinterData.PORTRAIT;
+		NSData nsData = NSKeyedArchiver.archivedDataWithRootObject(printInfo);
+		data.otherData = new byte[(int)/*64*/nsData.length()];
+		OS.memmove(data.otherData, nsData.bytes(), data.otherData.length);
+		printerData = data;
+	}
+	printInfo.release();
+	return data;
+}
+
+/**
+ * Returns the print job scope that the user selected
+ * before pressing OK in the dialog. This will be one
+ * of the following values:
+ * <dl>
+ * <dt><code>PrinterData.ALL_PAGES</code></dt>
+ * <dd>Print all pages in the current document</dd>
+ * <dt><code>PrinterData.PAGE_RANGE</code></dt>
+ * <dd>Print the range of pages specified by startPage and endPage</dd>
+ * <dt><code>PrinterData.SELECTION</code></dt>
+ * <dd>Print the current selection</dd>
+ * </dl>
+ *
+ * @return the scope setting that the user selected
+ */
+public int getScope() {
+	return printerData.scope;
+}
+
+static boolean getSheetEnabled () {
+	return !"false".equals(System.getProperty("org.eclipse.swt.sheet"));
+}
+
+static int /*long*/ dialogProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2) {
+	int /*long*/ [] jniRef = new int /*long*/ [1];
+	OS.object_getInstanceVariable(id, SWT_OBJECT, jniRef);
+	if (jniRef[0] == 0) return 0;
+	if (sel == OS.sel_panelDidEnd_returnCode_contextInfo_) {
+		PrintDialog dialog = (PrintDialog)OS.JNIGetObject(jniRef[0]);
+		if (dialog == null) return 0;
+		dialog.panelDidEnd_returnCode_contextInfo(id, sel, arg0, arg1, arg2);
+	}
+	return 0;
+}
+
+void initClasses () {
+	String className = "SWTPrintPanelDelegate";
+	if (OS.objc_lookUpClass (className) != 0) return;
+	
+	dialogCallback5 = new Callback(getClass(), "dialogProc", 5);
+	int /*long*/ dialogProc5 = dialogCallback5.getAddress();
+	if (dialogProc5 == 0) SWT.error (SWT.ERROR_NO_MORE_CALLBACKS);	
+	
+	byte[] types = {'*','\0'};
+	int size = C.PTR_SIZEOF, align = C.PTR_SIZEOF == 4 ? 2 : 3;
+	int /*long*/ cls = OS.objc_allocateClassPair(OS.class_NSObject, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_panelDidEnd_returnCode_contextInfo_, dialogProc5, "@:@i@");
+	OS.objc_registerClassPair(cls);
+}
+
+void panelDidEnd_returnCode_contextInfo(int /*long*/ id, int /*long*/ sel, int /*long*/ alert, int /*long*/ returnCode, int /*long*/ contextInfo) {
+	this.returnCode = (int)/*64*/returnCode;
+	NSApplication application = NSApplication.sharedApplication();
+	application.stop(null);
+}
+
+/**
+ * Sets the scope of the print job. The user will see this
+ * setting when the dialog is opened. This can have one of
+ * the following values:
+ * <dl>
+ * <dt><code>PrinterData.ALL_PAGES</code></dt>
+ * <dd>Print all pages in the current document</dd>
+ * <dt><code>PrinterData.PAGE_RANGE</code></dt>
+ * <dd>Print the range of pages specified by startPage and endPage</dd>
+ * <dt><code>PrinterData.SELECTION</code></dt>
+ * <dd>Print the current selection</dd>
+ * </dl>
+ *
+ * @param scope the scope setting when the dialog is opened
+ */
+public void setScope(int scope) {
+	printerData.scope = scope;
+}
+
+/**
+ * Returns the start page setting that the user selected
+ * before pressing OK in the dialog.
+ * <p>
+ * This value can be from 1 to the maximum number of pages for the platform.
+ * Note that it is only valid if the scope is <code>PrinterData.PAGE_RANGE</code>.
+ * </p>
+ *
+ * @return the start page setting that the user selected
+ */
+public int getStartPage() {
+	return printerData.startPage;
+}
+
+/**
+ * Sets the start page that the user will see when the dialog
+ * is opened.
+ * <p>
+ * This value can be from 1 to the maximum number of pages for the platform.
+ * Note that it is only valid if the scope is <code>PrinterData.PAGE_RANGE</code>.
+ * </p>
+ * 
+ * @param startPage the startPage setting when the dialog is opened
+ */
+public void setStartPage(int startPage) {
+	printerData.startPage = startPage;
+}
+
+/**
+ * Returns the end page setting that the user selected
+ * before pressing OK in the dialog.
+ * <p>
+ * This value can be from 1 to the maximum number of pages for the platform.
+ * Note that it is only valid if the scope is <code>PrinterData.PAGE_RANGE</code>.
+ * </p>
+ *
+ * @return the end page setting that the user selected
+ */
+public int getEndPage() {
+	return printerData.endPage;
+}
+
+/**
+ * Sets the end page that the user will see when the dialog
+ * is opened.
+ * <p>
+ * This value can be from 1 to the maximum number of pages for the platform.
+ * Note that it is only valid if the scope is <code>PrinterData.PAGE_RANGE</code>.
+ * </p>
+ * 
+ * @param endPage the end page setting when the dialog is opened
+ */
+public void setEndPage(int endPage) {
+	printerData.endPage = endPage;
+}
+
+/**
+ * Returns the 'Print to file' setting that the user selected
+ * before pressing OK in the dialog.
+ *
+ * @return the 'Print to file' setting that the user selected
+ */
+public boolean getPrintToFile() {
+	return printerData.printToFile;
+}
+
+/**
+ * Sets the 'Print to file' setting that the user will see
+ * when the dialog is opened.
+ *
+ * @param printToFile the 'Print to file' setting when the dialog is opened
+ */
+public void setPrintToFile(boolean printToFile) {
+	printerData.printToFile = printToFile;
+}
+
+protected void checkSubclass() {
+	String name = getClass().getName();
+	String validName = PrintDialog.class.getName();
+	if (!validName.equals(name)) {
+		SWT.error(SWT.ERROR_INVALID_SUBCLASS);
+	}
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Printing/cocoa/org/eclipse/swt/printing/Printer.java b/bundles/org.eclipse.swt/Eclipse SWT Printing/cocoa/org/eclipse/swt/printing/Printer.java
new file mode 100755
index 0000000..91e63fd
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Printing/cocoa/org/eclipse/swt/printing/Printer.java
@@ -0,0 +1,613 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.printing;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class are used to print to a printer.
+ * Applications create a GC on a printer using <code>new GC(printer)</code>
+ * and then draw on the printer GC using the usual graphics calls.
+ * <p>
+ * A <code>Printer</code> object may be constructed by providing
+ * a <code>PrinterData</code> object which identifies the printer.
+ * A <code>PrintDialog</code> presents a print dialog to the user
+ * and returns an initialized instance of <code>PrinterData</code>.
+ * Alternatively, calling <code>new Printer()</code> will construct a
+ * printer object for the user's default printer.
+ * </p><p>
+ * Application code must explicitly invoke the <code>Printer.dispose()</code> 
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ *
+ * @see PrinterData
+ * @see PrintDialog
+ * @see <a href="http://www.eclipse.org/swt/snippets/#printing">Printing snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public final class Printer extends Device {
+	PrinterData data;
+	NSPrinter printer;
+	NSPrintInfo printInfo;
+	NSPrintOperation operation;
+	NSView view;
+	NSWindow window;
+	boolean isGCCreated;
+	
+	static final String DRIVER = "Mac";
+
+/**
+ * Returns an array of <code>PrinterData</code> objects
+ * representing all available printers.  If there are no
+ * printers, the array will be empty.
+ *
+ * @return an array of PrinterData objects representing the available printers
+ */
+public static PrinterData[] getPrinterList() {
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSArray printers = NSPrinter.printerNames();
+		int count = (int)/*64*/printers.count();
+		PrinterData[] result = new PrinterData[count];
+		for (int i = 0; i < count; i++) {
+			NSString str = new NSString(printers.objectAtIndex(i));
+			result[i] = new PrinterData(DRIVER, str.getString());
+		}
+		return result;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns a <code>PrinterData</code> object representing
+ * the default printer or <code>null</code> if there is no 
+ * default printer.
+ *
+ * @return the default printer data or null
+ * 
+ * @since 2.1
+ */
+public static PrinterData getDefaultPrinterData() {
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSPrinter printer = NSPrintInfo.defaultPrinter();
+		if (printer == null) return null;
+		NSString str = printer.name();
+		return new PrinterData(DRIVER, str.getString());
+	} finally {
+		if (pool != null) pool.release();
+	}
+	
+}
+
+/**
+ * Constructs a new printer representing the default printer.
+ * <p>
+ * Note: You must dispose the printer when it is no longer required. 
+ * </p>
+ *
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES - if there are no valid printers
+ * </ul>
+ *
+ * @see Device#dispose
+ */
+public Printer() {
+	this(null);
+}
+
+/**
+ * Constructs a new printer given a <code>PrinterData</code>
+ * object representing the desired printer. If the argument
+ * is null, then the default printer will be used.
+ * <p>
+ * Note: You must dispose the printer when it is no longer required. 
+ * </p>
+ *
+ * @param data the printer data for the specified printer, or null to use the default printer
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the specified printer data does not represent a valid printer
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES - if there are no valid printers
+ * </ul>
+ *
+ * @see Device#dispose
+ */
+public Printer(PrinterData data) {
+	super (checkNull(data));
+}
+
+/**
+ * Given a <em>client area</em> (as described by the arguments),
+ * returns a rectangle, relative to the client area's coordinates,
+ * that is the client area expanded by the printer's trim (or minimum margins).
+ * <p>
+ * Most printers have a minimum margin on each edge of the paper where the
+ * printer device is unable to print.  This margin is known as the "trim."
+ * This method can be used to calculate the printer's minimum margins
+ * by passing in a client area of 0, 0, 0, 0 and then using the resulting
+ * x and y coordinates (which will be <= 0) to determine the minimum margins
+ * for the top and left edges of the paper, and the resulting width and height
+ * (offset by the resulting x and y) to determine the minimum margins for the
+ * bottom and right edges of the paper, as follows:
+ * <ul>
+ * 		<li>The left trim width is -x pixels</li>
+ * 		<li>The top trim height is -y pixels</li>
+ * 		<li>The right trim width is (x + width) pixels</li>
+ * 		<li>The bottom trim height is (y + height) pixels</li>
+ * </ul>
+ * </p>
+ * 
+ * @param x the x coordinate of the client area
+ * @param y the y coordinate of the client area
+ * @param width the width of the client area
+ * @param height the height of the client area
+ * @return a rectangle, relative to the client area's coordinates, that is
+ * 		the client area expanded by the printer's trim (or minimum margins)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #getBounds
+ * @see #getClientArea
+ */
+public Rectangle computeTrim(int x, int y, int width, int height) {
+	checkDevice();
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSSize paperSize = printInfo.paperSize();
+		NSRect bounds = printInfo.imageablePageBounds();
+		Point dpi = getDPI (), screenDPI = getIndependentDPI();
+		float scaling = scalingFactor();
+		x -= (bounds.x * dpi.x / screenDPI.x) / scaling;
+		y -= (bounds.y * dpi.y / screenDPI.y) / scaling;
+		width += ((paperSize.width - bounds.width) * dpi.x / screenDPI.x) / scaling;
+		height += ((paperSize.height - bounds.height) * dpi.y / screenDPI.y) / scaling;
+		return new Rectangle(x, y, width, height);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**	 
+ * Creates the printer handle.
+ * This method is called internally by the instance creation
+ * mechanism of the <code>Device</code> class.
+ * @param deviceData the device data
+ */
+protected void create(DeviceData deviceData) {
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSApplication.sharedApplication();
+		data = (PrinterData)deviceData;
+		if (data.otherData != null) {
+			NSData nsData = NSData.dataWithBytes(data.otherData, data.otherData.length);
+			printInfo = new NSPrintInfo(NSKeyedUnarchiver.unarchiveObjectWithData(nsData).id);
+		} else {
+			printInfo = NSPrintInfo.sharedPrintInfo();
+		}
+		printInfo.retain();
+		printer = NSPrinter.printerWithName(NSString.stringWith(data.name));
+		if (printer != null) {
+			printer.retain();
+			printInfo.setPrinter(printer);
+		}
+		printInfo.setOrientation(data.orientation == PrinterData.LANDSCAPE ? OS.NSLandscapeOrientation : OS.NSPortraitOrientation);
+		NSMutableDictionary dict = printInfo.dictionary();	
+		if (data.collate != false) dict.setValue(NSNumber.numberWithBool(data.collate), OS.NSPrintMustCollate);
+		if (data.copyCount != 1) dict.setValue(NSNumber.numberWithInt(data.copyCount), OS.NSPrintCopies);
+		if (data.printToFile) {
+			dict.setValue(OS.NSPrintSaveJob, OS.NSPrintJobDisposition);
+			if (data.fileName != null) dict.setValue(NSString.stringWith(data.fileName), OS.NSPrintSavePath);
+		}
+		/*
+		* Bug in Cocoa.  For some reason, the output still goes to the printer when
+		* the user chooses the preview button.  The fix is to reset the job disposition.
+		*/
+		NSString job = printInfo.jobDisposition();
+		if (job.isEqual(new NSString(OS.NSPrintPreviewJob()))) {
+			printInfo.setJobDisposition(job);
+		}
+		NSRect rect = new NSRect();
+		window = (NSWindow)new NSWindow().alloc();
+		window.initWithContentRect(rect, OS.NSBorderlessWindowMask, OS.NSBackingStoreBuffered, false);
+		String className = "SWTPrinterView"; //$NON-NLS-1$
+		if (OS.objc_lookUpClass(className) == 0) {
+			int /*long*/ cls = OS.objc_allocateClassPair(OS.class_NSView, className, 0);
+			OS.class_addMethod(cls, OS.sel_isFlipped, OS.isFlipped_CALLBACK(), "@:");
+			OS.objc_registerClassPair(cls);
+		}
+		view = (NSView)new SWTPrinterView().alloc();
+		view.initWithFrame(rect);
+		window.setContentView(view);
+		operation = NSPrintOperation.printOperationWithView(view, printInfo);
+		operation.retain();
+		operation.setShowsPrintPanel(false);
+		operation.setShowsProgressPanel(false);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**	 
+ * Destroys the printer handle.
+ * This method is called internally by the dispose
+ * mechanism of the <code>Device</code> class.
+ */
+protected void destroy() {
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		if (printer != null) printer.release();
+		if (printInfo != null) printInfo.release();
+		if (view != null) view.release();
+		if (window != null) window.release();
+		if (operation != null) operation.release();
+		printer = null;
+		printInfo = null;
+		view = null;
+		window = null;
+		operation = null;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new GC handle.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Printer</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param data the platform specific GC data 
+ * @return the platform specific GC handle
+ */
+public int /*long*/ internal_new_GC(GCData data) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		if (data != null) {
+			if (isGCCreated) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			data.device = this;
+			data.background = getSystemColor(SWT.COLOR_WHITE).handle;
+			data.foreground = getSystemColor(SWT.COLOR_BLACK).handle;
+			data.font = getSystemFont ();
+			float scaling = scalingFactor();
+			Point dpi = getDPI (), screenDPI = getIndependentDPI();
+			NSSize size = printInfo.paperSize();
+			size.width = (size.width * (dpi.x / screenDPI.x)) / scaling;
+			size.height = (size.height * dpi.y / screenDPI.y) / scaling;
+			data.size = size;
+			isGCCreated = true;
+		}
+		return operation.context().id;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+protected void init () {
+	super.init();
+}
+
+/**	 
+ * Invokes platform specific functionality to dispose a GC handle.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Printer</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param hDC the platform specific GC handle
+ * @param data the platform specific GC data 
+ */
+public void internal_dispose_GC(int /*long*/ context, GCData data) {
+	if (data != null) isGCCreated = false;
+}
+
+/**	 
+ * Releases any internal state prior to destroying this printer.
+ * This method is called internally by the dispose
+ * mechanism of the <code>Device</code> class.
+ */
+protected void release () {
+	super.release();
+}
+
+float scalingFactor() {
+	return new NSNumber(printInfo.dictionary().objectForKey(OS.NSPrintScalingFactor)).floatValue();
+}
+
+/**
+ * Starts a print job and returns true if the job started successfully
+ * and false otherwise.
+ * <p>
+ * This must be the first method called to initiate a print job,
+ * followed by any number of startPage/endPage calls, followed by
+ * endJob. Calling startPage, endPage, or endJob before startJob
+ * will result in undefined behavior.
+ * </p>
+ * 
+ * @param jobName the name of the print job to start
+ * @return true if the job started successfully and false otherwise.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #startPage
+ * @see #endPage
+ * @see #endJob
+ */
+public boolean startJob(String jobName) {
+	checkDevice();
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		if (jobName != null && jobName.length() != 0) {
+			operation.setJobTitle(NSString.stringWith(jobName));
+		}
+		printInfo.setUpPrintOperationDefaultValues();
+		NSPrintOperation.setCurrentOperation(operation);
+		NSGraphicsContext context = operation.createContext();
+		if (context != null) {
+			view.beginDocument();
+			return true;
+		}
+		return false;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Ends the current print job.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #startJob
+ * @see #startPage
+ * @see #endPage
+ */
+public void endJob() {
+	checkDevice();
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		view.endDocument();
+		operation.deliverResult();
+		operation.destroyContext();
+		operation.cleanUpOperation();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Cancels a print job in progress. 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void cancelJob() {
+	checkDevice();
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		operation.destroyContext();
+		operation.cleanUpOperation();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+static DeviceData checkNull (PrinterData data) {
+	if (data == null) data = new PrinterData();
+	if (data.driver == null || data.name == null) {
+		PrinterData defaultPrinter = getDefaultPrinterData();
+		if (defaultPrinter == null) SWT.error(SWT.ERROR_NO_HANDLES);
+		data.driver = defaultPrinter.driver;
+		data.name = defaultPrinter.name;		
+	}
+	return data;
+}
+
+/**
+ * Starts a page and returns true if the page started successfully
+ * and false otherwise.
+ * <p>
+ * After calling startJob, this method may be called any number of times
+ * along with a matching endPage.
+ * </p>
+ * 
+ * @return true if the page started successfully and false otherwise.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #endPage
+ * @see #startJob
+ * @see #endJob
+ */
+public boolean startPage() {
+	checkDevice();
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		float scaling = scalingFactor();
+		NSSize paperSize = printInfo.paperSize();
+		paperSize.width /= scaling;
+		paperSize.height /= scaling;
+		NSRect rect = new NSRect();
+		rect.width = paperSize.width;
+		rect.height = paperSize.height;
+		view.beginPageInRect(rect, new NSPoint());
+		NSRect imageBounds = printInfo.imageablePageBounds();
+		imageBounds.x /= scaling;
+		imageBounds.y /= scaling;
+		imageBounds.width /= scaling;
+		imageBounds.height /= scaling;
+		NSBezierPath.bezierPathWithRect(imageBounds).setClip();
+		NSAffineTransform transform = NSAffineTransform.transform();
+		transform.translateXBy(imageBounds.x, imageBounds.y);
+		Point dpi = getDPI (), screenDPI = getIndependentDPI();
+		transform.scaleXBy(screenDPI.x / (float)dpi.x, screenDPI.y / (float)dpi.y);
+		transform.concat();
+		operation.context().saveGraphicsState();
+		return true;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Ends the current page.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #startPage
+ * @see #startJob
+ * @see #endJob
+ */
+public void endPage() {
+	checkDevice();
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		operation.context().restoreGraphicsState();
+		view.endPage();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns a point whose x coordinate is the horizontal
+ * dots per inch of the printer, and whose y coordinate
+ * is the vertical dots per inch of the printer.
+ *
+ * @return the horizontal and vertical DPI
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Point getDPI() {
+	checkDevice();
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		//TODO get output resolution
+		return getIndependentDPI();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+Point getIndependentDPI() {
+	return super.getDPI();
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location.
+ * <p>
+ * For a printer, this is the size of the physical page, in pixels.
+ * </p>
+ *
+ * @return the bounding rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #getClientArea
+ * @see #computeTrim
+ */
+public Rectangle getBounds() {
+	checkDevice();
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSSize size = printInfo.paperSize();
+		float scaling = scalingFactor();
+		Point dpi = getDPI (), screenDPI = getIndependentDPI();
+		return new Rectangle (0, 0, (int)((size.width * dpi.x / screenDPI.x) / scaling), (int)((size.height * dpi.y / screenDPI.y)  / scaling));
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns a rectangle which describes the area of the
+ * receiver which is capable of displaying data.
+ * <p>
+ * For a printer, this is the size of the printable area
+ * of the page, in pixels.
+ * </p>
+ * 
+ * @return the client area
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #getBounds
+ * @see #computeTrim
+ */
+public Rectangle getClientArea() {
+	checkDevice();
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		float scaling = scalingFactor();
+		NSRect rect = printInfo.imageablePageBounds();
+		Point dpi = getDPI (), screenDPI = getIndependentDPI();
+		return new Rectangle(0, 0, (int)((rect.width * dpi.x / screenDPI.x) / scaling), (int)((rect.height * dpi.y / screenDPI.y) / scaling));
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns a <code>PrinterData</code> object representing the
+ * target printer for this print job.
+ * 
+ * @return a PrinterData object describing the receiver
+ */
+public PrinterData getPrinterData() {
+	checkDevice();
+	return data;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Printing/emulated/org/eclipse/swt/printing/PrintDialog.java b/bundles/org.eclipse.swt/Eclipse SWT Printing/emulated/org/eclipse/swt/printing/PrintDialog.java
new file mode 100644
index 0000000..12e3bdf
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Printing/emulated/org/eclipse/swt/printing/PrintDialog.java
@@ -0,0 +1,271 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.printing;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.printing.PrinterData;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * Instances of this class allow the user to select
+ * a printer and various print-related parameters
+ * prior to starting a print job.
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#printing">Printing snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class PrintDialog extends Dialog {
+	PrinterData printerData;
+	int scope = PrinterData.ALL_PAGES;
+	int startPage = 1, endPage = 1;
+	boolean printToFile = false;
+
+/**
+ * Constructs a new instance of this class given only its parent.
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public PrintDialog (Shell parent) {
+	this (parent, SWT.PRIMARY_MODAL);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public PrintDialog (Shell parent, int style) {
+	super (parent, checkStyle (parent, style));
+	checkSubclass ();
+}
+
+static int checkStyle (Shell parent, int style) {
+	int mask = SWT.PRIMARY_MODAL | SWT.APPLICATION_MODAL | SWT.SYSTEM_MODAL;
+	if ((style & SWT.SHEET) != 0) {
+		style &= ~SWT.SHEET;
+		if ((style & mask) == 0) {
+			style |= parent == null ? SWT.APPLICATION_MODAL : SWT.PRIMARY_MODAL;
+		}
+	}
+	return style;
+}
+
+/**
+ * Sets the printer data that will be used when the dialog
+ * is opened.
+ * <p>
+ * Setting the printer data to null is equivalent to
+ * resetting all data fields to their default values.
+ * </p>
+ * 
+ * @param data the data that will be used when the dialog is opened or null to use default data
+ * 
+ * @since 3.4
+ */
+public void setPrinterData(PrinterData data) {
+	this.printerData = data;
+}
+
+/**
+ * Returns the printer data that will be used when the dialog
+ * is opened.
+ * 
+ * @return the data that will be used when the dialog is opened
+ * 
+ * @since 3.4
+ */
+public PrinterData getPrinterData() {
+	return printerData;
+}
+
+/**
+ * Returns the print job scope that the user selected
+ * before pressing OK in the dialog. This will be one
+ * of the following values:
+ * <dl>
+ * <dt><code>PrinterData.ALL_PAGES</code></dt>
+ * <dd>Print all pages in the current document</dd>
+ * <dt><code>PrinterData.PAGE_RANGE</code></dt>
+ * <dd>Print the range of pages specified by startPage and endPage</dd>
+ * <dt><code>PrinterData.SELECTION</code></dt>
+ * <dd>Print the current selection</dd>
+ * </dl>
+ *
+ * @return the scope setting that the user selected
+ */
+public int getScope() {
+	return scope;
+}
+
+/**
+ * Sets the scope of the print job. The user will see this
+ * setting when the dialog is opened. This can have one of
+ * the following values:
+ * <dl>
+ * <dt><code>PrinterData.ALL_PAGES</code></dt>
+ * <dd>Print all pages in the current document</dd>
+ * <dt><code>PrinterData.PAGE_RANGE</code></dt>
+ * <dd>Print the range of pages specified by startPage and endPage</dd>
+ * <dt><code>PrinterData.SELECTION</code></dt>
+ * <dd>Print the current selection</dd>
+ * </dl>
+ *
+ * @param scope the scope setting when the dialog is opened
+ */
+public void setScope(int scope) {
+	this.scope = scope;
+}
+
+/**
+ * Returns the start page setting that the user selected
+ * before pressing OK in the dialog.
+ * <p>
+ * This value can be from 1 to the maximum number of pages for the platform.
+ * Note that it is only valid if the scope is <code>PrinterData.PAGE_RANGE</code>.
+ * </p>
+ *
+ * @return the start page setting that the user selected
+ */
+public int getStartPage() {
+	return startPage;
+}
+
+/**
+ * Sets the start page that the user will see when the dialog
+ * is opened.
+ * <p>
+ * This value can be from 1 to the maximum number of pages for the platform.
+ * Note that it is only valid if the scope is <code>PrinterData.PAGE_RANGE</code>.
+ * </p>
+ * 
+ * @param startPage the startPage setting when the dialog is opened
+ */
+public void setStartPage(int startPage) {
+	this.startPage = startPage;
+}
+
+/**
+ * Returns the end page setting that the user selected
+ * before pressing OK in the dialog.
+ * <p>
+ * This value can be from 1 to the maximum number of pages for the platform.
+ * Note that it is only valid if the scope is <code>PrinterData.PAGE_RANGE</code>.
+ * </p>
+ *
+ * @return the end page setting that the user selected
+ */
+public int getEndPage() {
+	return endPage;
+}
+
+/**
+ * Sets the end page that the user will see when the dialog
+ * is opened.
+ * <p>
+ * This value can be from 1 to the maximum number of pages for the platform.
+ * Note that it is only valid if the scope is <code>PrinterData.PAGE_RANGE</code>.
+ * </p>
+ * 
+ * @param endPage the end page setting when the dialog is opened
+ */
+public void setEndPage(int endPage) {
+	this.endPage = endPage;
+}
+
+/**
+ * Returns the 'Print to file' setting that the user selected
+ * before pressing OK in the dialog.
+ *
+ * @return the 'Print to file' setting that the user selected
+ */
+public boolean getPrintToFile() {
+	return printToFile;
+}
+
+/**
+ * Sets the 'Print to file' setting that the user will see
+ * when the dialog is opened.
+ *
+ * @param printToFile the 'Print to file' setting when the dialog is opened
+ */
+public void setPrintToFile(boolean printToFile) {
+	this.printToFile = printToFile;
+}
+
+protected void checkSubclass() {
+	String name = getClass().getName();
+	String validName = PrintDialog.class.getName();
+	if (!validName.equals(name)) {
+		SWT.error(SWT.ERROR_INVALID_SUBCLASS);
+	}
+}
+
+/**
+ * Makes the receiver visible and brings it to the front
+ * of the display.
+ *
+ * @return a printer data object describing the desired print job parameters,
+ *         or null if the dialog was canceled, no printers were found, or an error occurred
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public PrinterData open() {
+	/* Return the first printer in the list */
+	PrinterData[] printers = Printer.getPrinterList();
+	if (printers.length > 0) return printers[0];
+	return null;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Printing/emulated/org/eclipse/swt/printing/Printer.java b/bundles/org.eclipse.swt/Eclipse SWT Printing/emulated/org/eclipse/swt/printing/Printer.java
new file mode 100644
index 0000000..cd1f6a0
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Printing/emulated/org/eclipse/swt/printing/Printer.java
@@ -0,0 +1,349 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.printing;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class are used to print to a printer.
+ * Applications create a GC on a printer using <code>new GC(printer)</code>
+ * and then draw on the printer GC using the usual graphics calls.
+ * <p>
+ * A <code>Printer</code> object may be constructed by providing
+ * a <code>PrinterData</code> object which identifies the printer.
+ * A <code>PrintDialog</code> presents a print dialog to the user
+ * and returns an initialized instance of <code>PrinterData</code>.
+ * Alternatively, calling <code>new Printer()</code> will construct a
+ * printer object for the user's default printer.
+ * </p><p>
+ * Application code must explicitly invoke the <code>Printer.dispose()</code> 
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ *
+ * @see PrinterData
+ * @see PrintDialog
+ * @see <a href="http://www.eclipse.org/swt/snippets/#printing">Printing snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public final class Printer extends Device {
+	PrinterData data;
+
+/**
+ * Returns an array of <code>PrinterData</code> objects
+ * representing all available printers.  If there are no
+ * printers, the array will be empty.
+ *
+ * @return an array of PrinterData objects representing the available printers
+ */
+public static PrinterData[] getPrinterList() {
+	PrinterData printerList[] = new PrinterData[0];
+	return printerList;
+}
+
+/**
+ * Returns a <code>PrinterData</code> object representing
+ * the default printer or <code>null</code> if there is no 
+ * default printer.
+ *
+ * @return the default printer data or null
+ * 
+ * @since 2.1
+ */
+public static PrinterData getDefaultPrinterData() {
+	return null;
+}
+
+static DeviceData checkNull (PrinterData data) {
+	if (data == null) data = new PrinterData();
+	if (data.driver == null || data.name == null) {
+		PrinterData defaultPrinter = getDefaultPrinterData();
+		if (defaultPrinter == null) SWT.error(SWT.ERROR_NO_HANDLES);
+		data.driver = defaultPrinter.driver;
+		data.name = defaultPrinter.name;		
+	}
+	return data;
+}
+
+/**
+ * Constructs a new printer representing the default printer.
+ * <p>
+ * Note: You must dispose the printer when it is no longer required. 
+ * </p>
+ *
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES - if there are no valid printers
+ * </ul>
+ *
+ * @see Device#dispose
+ */
+public Printer() {
+	this(null);
+}
+
+/**
+ * Constructs a new printer given a <code>PrinterData</code>
+ * object representing the desired printer. If the argument
+ * is null, then the default printer will be used.
+ * <p>
+ * Note: You must dispose the printer when it is no longer required. 
+ * </p>
+ *
+ * @param data the printer data for the specified printer, or null to use the default printer
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the specified printer data does not represent a valid printer
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES - if there are no valid printers
+ * </ul>
+ *
+ * @see Device#dispose
+ */
+public Printer(PrinterData data) {
+	super(checkNull(data));
+	SWT.error(SWT.ERROR_NO_HANDLES);
+}
+
+
+/**	 
+ * Invokes platform specific functionality to allocate a new GC handle.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Printer</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param data the platform specific GC data 
+ * @return the platform specific GC handle
+ */
+public int internal_new_GC(GCData data) {
+	return 0;
+}
+
+/**	 
+ * Invokes platform specific functionality to dispose a GC handle.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Printer</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param hDC the platform specific GC handle
+ * @param data the platform specific GC data 
+ */
+public void internal_dispose_GC(int xGC, GCData data) {
+}
+
+/**
+ * Starts a print job and returns true if the job started successfully
+ * and false otherwise.
+ * <p>
+ * This must be the first method called to initiate a print job,
+ * followed by any number of startPage/endPage calls, followed by
+ * endJob. Calling startPage, endPage, or endJob before startJob
+ * will result in undefined behavior.
+ * </p>
+ * 
+ * @param jobName the name of the print job to start
+ * @return true if the job started successfully and false otherwise.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #startPage
+ * @see #endPage
+ * @see #endJob
+ */
+public boolean startJob(String jobName) {
+	checkDevice();
+	return true;
+}
+
+/**
+ * Ends the current print job.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #startJob
+ * @see #startPage
+ * @see #endPage
+ */
+public void endJob() {
+	checkDevice();
+}
+
+/**
+ * Cancels a print job in progress. 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void cancelJob() {
+	checkDevice();
+}
+
+/**
+ * Starts a page and returns true if the page started successfully
+ * and false otherwise.
+ * <p>
+ * After calling startJob, this method may be called any number of times
+ * along with a matching endPage.
+ * </p>
+ * 
+ * @return true if the page started successfully and false otherwise.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #endPage
+ * @see #startJob
+ * @see #endJob
+ */
+public boolean startPage() {
+	checkDevice();
+	return true;
+}
+
+/**
+ * Ends the current page.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #startPage
+ * @see #startJob
+ * @see #endJob
+ */
+public void endPage() {
+	checkDevice();
+}
+
+/**
+ * Returns a point whose x coordinate is the horizontal
+ * dots per inch of the printer, and whose y coordinate
+ * is the vertical dots per inch of the printer.
+ *
+ * @return the horizontal and vertical DPI
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Point getDPI() {
+	checkDevice();
+	return new Point(0, 0);
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location.
+ * <p>
+ * For a printer, this is the size of the physical page, in pixels.
+ * </p>
+ *
+ * @return the bounding rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #getClientArea
+ * @see #computeTrim
+ */
+public Rectangle getBounds() {
+	checkDevice();
+	return new Rectangle(0, 0, 0, 0);
+}
+
+/**
+ * Returns a rectangle which describes the area of the
+ * receiver which is capable of displaying data.
+ * <p>
+ * For a printer, this is the size of the printable area
+ * of the page, in pixels.
+ * </p>
+ * 
+ * @return the client area
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #getBounds
+ * @see #computeTrim
+ */
+public Rectangle getClientArea() {
+	checkDevice();
+	return new Rectangle(0, 0, 0, 0);
+}
+
+/**
+ * Given a <em>client area</em> (as described by the arguments),
+ * returns a rectangle, relative to the client area's coordinates,
+ * that is the client area expanded by the printer's trim (or minimum margins).
+ * <p>
+ * Most printers have a minimum margin on each edge of the paper where the
+ * printer device is unable to print.  This margin is known as the "trim."
+ * This method can be used to calculate the printer's minimum margins
+ * by passing in a client area of 0, 0, 0, 0 and then using the resulting
+ * x and y coordinates (which will be <= 0) to determine the minimum margins
+ * for the top and left edges of the paper, and the resulting width and height
+ * (offset by the resulting x and y) to determine the minimum margins for the
+ * bottom and right edges of the paper, as follows:
+ * <ul>
+ * 		<li>The left trim width is -x pixels</li>
+ * 		<li>The top trim height is -y pixels</li>
+ * 		<li>The right trim width is (x + width) pixels</li>
+ * 		<li>The bottom trim height is (y + height) pixels</li>
+ * </ul>
+ * </p>
+ * 
+ * @param x the x coordinate of the client area
+ * @param y the y coordinate of the client area
+ * @param width the width of the client area
+ * @param height the height of the client area
+ * @return a rectangle, relative to the client area's coordinates, that is
+ * 		the client area expanded by the printer's trim (or minimum margins)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #getBounds
+ * @see #getClientArea
+ */
+public Rectangle computeTrim(int x, int y, int width, int height) {
+	return new Rectangle(0,0,0,0);
+}
+
+/**
+ * Returns a <code>PrinterData</code> object representing the
+ * target printer for this print job.
+ * 
+ * @return a PrinterData object describing the receiver
+ */
+public PrinterData getPrinterData() {
+	return data;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Printing/wpf/org/eclipse/swt/printing/PrintDialog.java b/bundles/org.eclipse.swt/Eclipse SWT Printing/wpf/org/eclipse/swt/printing/PrintDialog.java
new file mode 100644
index 0000000..70854fc
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Printing/wpf/org/eclipse/swt/printing/PrintDialog.java
@@ -0,0 +1,252 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.printing;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.printing.PrinterData;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * Instances of this class allow the user to select
+ * a printer and various print-related parameters
+ * prior to starting a print job.
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#printing">Printing snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class PrintDialog extends Dialog {
+	PrinterData printerData;
+	int scope = PrinterData.ALL_PAGES;
+	int startPage = -1, endPage = -1;
+	boolean printToFile = false;
+
+/**
+ * Constructs a new instance of this class given only its parent.
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public PrintDialog (Shell parent) {
+	this (parent, SWT.PRIMARY_MODAL);
+}
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public PrintDialog (Shell parent, int style) {
+	super (parent, checkStyle (parent, style));
+	checkSubclass ();
+}
+static int checkStyle (Shell parent, int style) {
+	int mask = SWT.PRIMARY_MODAL | SWT.APPLICATION_MODAL | SWT.SYSTEM_MODAL;
+	if ((style & SWT.SHEET) != 0) {
+		style &= ~SWT.SHEET;
+		if ((style & mask) == 0) {
+			style |= parent == null ? SWT.APPLICATION_MODAL : SWT.PRIMARY_MODAL;
+		}
+	}
+	return style;
+}
+/**
+ * Sets the printer data that will be used when the dialog
+ * is opened.
+ * <p>
+ * Setting the printer data to null is equivalent to
+ * resetting all data fields to their default values.
+ * </p>
+ * 
+ * @param data the data that will be used when the dialog is opened or null to use default data
+ * 
+ * @since 3.4
+ */
+public void setPrinterData(PrinterData data) {
+	this.printerData = data;
+}
+/**
+ * Returns the printer data that will be used when the dialog
+ * is opened.
+ * 
+ * @return the data that will be used when the dialog is opened
+ * 
+ * @since 3.4
+ */
+public PrinterData getPrinterData() {
+	return printerData;
+}
+/**
+ * Makes the receiver visible and brings it to the front
+ * of the display.
+ *
+ * @return a printer data object describing the desired print job parameters,
+ *         or null if the dialog was canceled, no printers were found, or an error occurred
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public PrinterData open() {
+	/* Return the first printer in the list */
+	PrinterData[] printers = Printer.getPrinterList();
+	if (printers.length > 0) return printers[0];
+	return null;
+}
+/**
+ * Returns the print job scope that the user selected
+ * before pressing OK in the dialog. This will be one
+ * of the following values:
+ * <dl>
+ * <dt><code>PrinterData.ALL_PAGES</code></dt>
+ * <dd>Print all pages in the current document</dd>
+ * <dt><code>PrinterData.PAGE_RANGE</code></dt>
+ * <dd>Print the range of pages specified by startPage and endPage</dd>
+ * <dt><code>PrinterData.SELECTION</code></dt>
+ * <dd>Print the current selection</dd>
+ * </dl>
+ *
+ * @return the scope setting that the user selected
+ */
+public int getScope() {
+	return scope;
+}
+/**
+ * Sets the scope of the print job. The user will see this
+ * setting when the dialog is opened. This can have one of
+ * the following values:
+ * <dl>
+ * <dt><code>PrinterData.ALL_PAGES</code></dt>
+ * <dd>Print all pages in the current document</dd>
+ * <dt><code>PrinterData.PAGE_RANGE</code></dt>
+ * <dd>Print the range of pages specified by startPage and endPage</dd>
+ * <dt><code>PrinterData.SELECTION</code></dt>
+ * <dd>Print the current selection</dd>
+ * </dl>
+ *
+ * @param scope the scope setting when the dialog is opened
+ */
+public void setScope(int scope) {
+	this.scope = scope;
+}
+/**
+ * Returns the start page setting that the user selected
+ * before pressing OK in the dialog.
+ * <p>
+ * This value can be from 1 to the maximum number of pages for the platform.
+ * Note that it is only valid if the scope is <code>PrinterData.PAGE_RANGE</code>.
+ * </p>
+ *
+ * @return the start page setting that the user selected
+ */
+public int getStartPage() {
+	return startPage;
+}
+/**
+ * Sets the start page that the user will see when the dialog
+ * is opened.
+ * <p>
+ * This value can be from 1 to the maximum number of pages for the platform.
+ * Note that it is only valid if the scope is <code>PrinterData.PAGE_RANGE</code>.
+ * </p>
+ * 
+ * @param startPage the startPage setting when the dialog is opened
+ */
+public void setStartPage(int startPage) {
+	this.startPage = startPage;
+}
+/**
+ * Returns the end page setting that the user selected
+ * before pressing OK in the dialog.
+ * <p>
+ * This value can be from 1 to the maximum number of pages for the platform.
+ * Note that it is only valid if the scope is <code>PrinterData.PAGE_RANGE</code>.
+ * </p>
+ *
+ * @return the end page setting that the user selected
+ */
+public int getEndPage() {
+	return endPage;
+}
+/**
+ * Sets the end page that the user will see when the dialog
+ * is opened.
+ * <p>
+ * This value can be from 1 to the maximum number of pages for the platform.
+ * Note that it is only valid if the scope is <code>PrinterData.PAGE_RANGE</code>.
+ * </p>
+ * 
+ * @param endPage the end page setting when the dialog is opened
+ */
+public void setEndPage(int endPage) {
+	this.endPage = endPage;
+}
+/**
+ * Returns the 'Print to file' setting that the user selected
+ * before pressing OK in the dialog.
+ *
+ * @return the 'Print to file' setting that the user selected
+ */
+public boolean getPrintToFile() {
+	return printToFile;
+}
+/**
+ * Sets the 'Print to file' setting that the user will see
+ * when the dialog is opened.
+ *
+ * @param printToFile the 'Print to file' setting when the dialog is opened
+ */
+public void setPrintToFile(boolean printToFile) {
+	this.printToFile = printToFile;
+}
+protected void checkSubclass() {
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Printing/wpf/org/eclipse/swt/printing/Printer.java b/bundles/org.eclipse.swt/Eclipse SWT Printing/wpf/org/eclipse/swt/printing/Printer.java
new file mode 100644
index 0000000..7723304
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Printing/wpf/org/eclipse/swt/printing/Printer.java
@@ -0,0 +1,330 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.printing;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class are used to print to a printer.
+ * Applications create a GC on a printer using <code>new GC(printer)</code>
+ * and then draw on the printer GC using the usual graphics calls.
+ * <p>
+ * A <code>Printer</code> object may be constructed by providing
+ * a <code>PrinterData</code> object which identifies the printer.
+ * A <code>PrintDialog</code> presents a print dialog to the user
+ * and returns an initialized instance of <code>PrinterData</code>.
+ * Alternatively, calling <code>new Printer()</code> will construct a
+ * printer object for the user's default printer.
+ * </p><p>
+ * Application code must explicitly invoke the <code>Printer.dispose()</code> 
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ *
+ * @see PrinterData
+ * @see PrintDialog
+ * @see <a href="http://www.eclipse.org/swt/snippets/#printing">Printing snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public final class Printer extends Device {
+	PrinterData data;
+
+/**
+ * Returns an array of <code>PrinterData</code> objects
+ * representing all available printers.  If there are no
+ * printers, the array will be empty.
+ *
+ * @return an array of PrinterData objects representing the available printers
+ */
+public static PrinterData[] getPrinterList() {
+	PrinterData printerList[] = new PrinterData[0];
+	return printerList;
+}
+
+/**
+ * Returns a <code>PrinterData</code> object representing
+ * the default printer or <code>null</code> if there is no 
+ * default printer.
+ *
+ * @return the default printer data or null
+ * 
+ * @since 2.1
+ */
+public static PrinterData getDefaultPrinterData() {
+	return null;
+}
+
+/**
+ * Constructs a new printer representing the default printer.
+ * <p>
+ * Note: You must dispose the printer when it is no longer required. 
+ * </p>
+ *
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES - if there are no valid printers
+ * </ul>
+ *
+ * @see Device#dispose
+ */
+public Printer() {
+	this(getDefaultPrinterData());
+}
+
+/**
+ * Constructs a new printer given a <code>PrinterData</code>
+ * object representing the desired printer. If the argument
+ * is null, then the default printer will be used.
+ * <p>
+ * Note: You must dispose the printer when it is no longer required. 
+ * </p>
+ *
+ * @param data the printer data for the specified printer, or null to use the default printer
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the specified printer data does not represent a valid printer
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES - if there are no valid printers
+ * </ul>
+ *
+ * @see Device#dispose
+ */
+public Printer(PrinterData data) {
+	super (data);
+	SWT.error(SWT.ERROR_NO_HANDLES);
+}
+
+
+/**	 
+ * Invokes platform specific functionality to allocate a new GC handle.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Printer</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param data the platform specific GC data 
+ * @return the platform specific GC handle
+ */
+public int internal_new_GC(GCData data) {
+	return 0;
+}
+
+/**	 
+ * Invokes platform specific functionality to dispose a GC handle.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Printer</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param hDC the platform specific GC handle
+ * @param data the platform specific GC data 
+ */
+public void internal_dispose_GC(int xGC, GCData data) {
+}
+
+/**
+ * Starts a print job and returns true if the job started successfully
+ * and false otherwise.
+ * <p>
+ * This must be the first method called to initiate a print job,
+ * followed by any number of startPage/endPage calls, followed by
+ * endJob. Calling startPage, endPage, or endJob before startJob
+ * will result in undefined behavior.
+ * </p>
+ * 
+ * @param jobName the name of the print job to start
+ * @return true if the job started successfully and false otherwise.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #startPage
+ * @see #endPage
+ * @see #endJob
+ */
+public boolean startJob(String jobName) {
+	return true;
+}
+
+/**
+ * Ends the current print job.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #startJob
+ * @see #startPage
+ * @see #endPage
+ */
+public void endJob() {
+}
+
+/**
+ * Cancels a print job in progress. 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void cancelJob() {
+}
+
+/**
+ * Starts a page and returns true if the page started successfully
+ * and false otherwise.
+ * <p>
+ * After calling startJob, this method may be called any number of times
+ * along with a matching endPage.
+ * </p>
+ * 
+ * @return true if the page started successfully and false otherwise.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #endPage
+ * @see #startJob
+ * @see #endJob
+ */
+public boolean startPage() {
+	return true;
+}
+
+/**
+ * Ends the current page.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #startPage
+ * @see #startJob
+ * @see #endJob
+ */
+public void endPage() {
+}
+
+/**
+ * Returns a point whose x coordinate is the horizontal
+ * dots per inch of the printer, and whose y coordinate
+ * is the vertical dots per inch of the printer.
+ *
+ * @return the horizontal and vertical DPI
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Point getDPI() {
+	return new Point(0, 0);
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location.
+ * <p>
+ * For a printer, this is the size of the physical page, in pixels.
+ * </p>
+ *
+ * @return the bounding rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #getClientArea
+ * @see #computeTrim
+ */
+public Rectangle getBounds() {
+	return null;
+}
+
+/**
+ * Returns a rectangle which describes the area of the
+ * receiver which is capable of displaying data.
+ * <p>
+ * For a printer, this is the size of the printable area
+ * of the page, in pixels.
+ * </p>
+ * 
+ * @return the client area
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #getBounds
+ * @see #computeTrim
+ */
+public Rectangle getClientArea() {
+	return null;
+}
+
+/**
+ * Given a <em>client area</em> (as described by the arguments),
+ * returns a rectangle, relative to the client area's coordinates,
+ * that is the client area expanded by the printer's trim (or minimum margins).
+ * <p>
+ * Most printers have a minimum margin on each edge of the paper where the
+ * printer device is unable to print.  This margin is known as the "trim."
+ * This method can be used to calculate the printer's minimum margins
+ * by passing in a client area of 0, 0, 0, 0 and then using the resulting
+ * x and y coordinates (which will be <= 0) to determine the minimum margins
+ * for the top and left edges of the paper, and the resulting width and height
+ * (offset by the resulting x and y) to determine the minimum margins for the
+ * bottom and right edges of the paper, as follows:
+ * <ul>
+ * 		<li>The left trim width is -x pixels</li>
+ * 		<li>The top trim height is -y pixels</li>
+ * 		<li>The right trim width is (x + width) pixels</li>
+ * 		<li>The bottom trim height is (y + height) pixels</li>
+ * </ul>
+ * </p>
+ * 
+ * @param x the x coordinate of the client area
+ * @param y the y coordinate of the client area
+ * @param width the width of the client area
+ * @param height the height of the client area
+ * @return a rectangle, relative to the client area's coordinates, that is
+ * 		the client area expanded by the printer's trim (or minimum margins)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #getBounds
+ * @see #getClientArea
+ */
+public Rectangle computeTrim(int x, int y, int width, int height) {
+	return new Rectangle(0,0,0,0);
+}
+
+/**
+ * Returns a <code>PrinterData</code> object representing the
+ * target printer for this print job.
+ * 
+ * @return a PrinterData object describing the receiver
+ */
+public PrinterData getPrinterData() {
+	return data;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Program/cocoa/org/eclipse/swt/program/Program.java b/bundles/org.eclipse.swt/Eclipse SWT Program/cocoa/org/eclipse/swt/program/Program.java
new file mode 100755
index 0000000..fd0e383
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Program/cocoa/org/eclipse/swt/program/Program.java
@@ -0,0 +1,425 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.program;
+
+
+import org.eclipse.swt.internal.C;
+import org.eclipse.swt.internal.cocoa.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+import java.util.Vector;
+
+/**
+ * Instances of this class represent programs and
+ * their associated file extensions in the operating
+ * system.
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#program">Program snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public final class Program {
+	String name, fullPath, identifier;
+
+	static final String PREFIX_FILE = "file:"; //$NON-NLS-1$
+	static final String PREFIX_HTTP = "http://"; //$NON-NLS-1$
+	static final String PREFIX_HTTPS = "https://"; //$NON-NLS-1$
+
+/**
+ * Prevents uninitialized instances from being created outside the package.
+ */
+Program () {
+}
+
+/**
+ * Finds the program that is associated with an extension.
+ * The extension may or may not begin with a '.'.  Note that
+ * a <code>Display</code> must already exist to guarantee that
+ * this method returns an appropriate result.
+ *
+ * @param extension the program extension
+ * @return the program or <code>null</code>
+ *
+ * @exception IllegalArgumentException <ul>
+ *		<li>ERROR_NULL_ARGUMENT when extension is null</li>
+ *	</ul>
+ */
+public static Program findProgram (String extension) {
+	if (extension == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	if (extension.length () == 0) return null;
+	if (extension.charAt(0) != '.') extension = "." + extension;
+	NSAutoreleasePool pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSWorkspace workspace = NSWorkspace.sharedWorkspace();
+		int /*long*/ appName = OS.malloc(C.PTR_SIZEOF);
+		int /*long*/ type = OS.malloc(C.PTR_SIZEOF);
+		NSString temp = new NSString(OS.NSTemporaryDirectory());
+		NSString fileName = NSString.stringWith("swt" + System.currentTimeMillis() + extension);
+		NSString fullPath = temp.stringByAppendingPathComponent(fileName);
+		NSFileManager fileManager = NSFileManager.defaultManager();
+		fileManager.createFileAtPath(fullPath, null, null);
+		if (!workspace.getInfoForFile(fullPath, appName, type)) return null;
+		fileManager.removeItemAtPath(fullPath, 0);
+		int /*long*/ [] buffer = new int /*long*/[1];
+		int /*long*/ [] buffer2 = new int /*long*/[1];
+		OS.memmove(buffer, appName, C.PTR_SIZEOF);
+		OS.memmove(buffer2, type, C.PTR_SIZEOF);
+		OS.free(appName);
+		OS.free(type);
+		if (buffer [0] != 0) {
+			NSString appPath = new NSString(buffer[0]);
+			NSString appType = new NSString(buffer2[0]);
+			NSBundle bundle = NSBundle.bundleWithPath(appPath);
+			if (bundle != null) {
+				NSString textEditId = NSString.stringWith("com.apple.TextEdit");
+				NSString bundleId = NSString.stringWith("CFBundleIdentifier");
+				NSDictionary infoDictionary = bundle.infoDictionary();
+				boolean textEdit = textEditId.isEqual(infoDictionary.objectForKey(bundleId));
+				if (!textEdit) return getProgram(bundle);
+				// if text edit, make sure we're really one of the extensions that
+				// text edit says it can handle.
+				NSString CFBundleDocumentTypes = NSString.stringWith("CFBundleDocumentTypes");
+				NSString CFBundleTypeExtensions = NSString.stringWith("CFBundleTypeExtensions");
+				id id = infoDictionary.objectForKey(CFBundleDocumentTypes);
+				if (id != null) {
+					NSDictionary documentTypes = new NSDictionary(id.id);
+					NSEnumerator documentTypesEnumerator = documentTypes.objectEnumerator();
+					while ((id = documentTypesEnumerator.nextObject()) != null) {
+						NSDictionary documentType = new NSDictionary(id.id);
+						NSDictionary supportedExtensions = new NSDictionary(documentType.objectForKey(CFBundleTypeExtensions));
+						if (supportedExtensions != null) {
+							NSEnumerator supportedExtensionsEnumerator = supportedExtensions.objectEnumerator();
+							if (supportedExtensionsEnumerator != null) {
+								id ext = null;
+								while((ext = supportedExtensionsEnumerator.nextObject()) != null) {
+									NSString strExt = new NSString(ext);
+									if (appType.isEqual(strExt)) return getProgram (bundle);
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+		return null;
+	} finally {
+		pool.release();
+	}
+}
+
+/**
+ * Answer all program extensions in the operating system.  Note
+ * that a <code>Display</code> must already exist to guarantee
+ * that this method returns an appropriate result.
+ *
+ * @return an array of extensions
+ */
+public static String [] getExtensions () {
+	NSAutoreleasePool pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSMutableSet supportedDocumentTypes = (NSMutableSet)NSMutableSet.set();
+		NSWorkspace workspace = NSWorkspace.sharedWorkspace();
+		NSString CFBundleDocumentTypes = NSString.stringWith("CFBundleDocumentTypes");
+		NSString CFBundleTypeExtensions = NSString.stringWith("CFBundleTypeExtensions");
+		NSArray array = new NSArray(OS.NSSearchPathForDirectoriesInDomains(OS.NSAllApplicationsDirectory, OS.NSAllDomainsMask, true));
+		int count = (int)/*64*/array.count();
+		for (int i = 0; i < count; i++) {
+			NSString path = new NSString(array.objectAtIndex(i));
+			NSFileManager fileManager = NSFileManager.defaultManager();
+			NSDirectoryEnumerator enumerator = fileManager.enumeratorAtPath(path);
+			if (enumerator != null) {
+				id id;
+				while ((id = enumerator.nextObject()) != null) {
+					enumerator.skipDescendents();
+					NSString filePath = new NSString(id.id);
+					NSString fullPath = path.stringByAppendingPathComponent(filePath);
+					if (workspace.isFilePackageAtPath(fullPath)) {
+						NSBundle bundle = NSBundle.bundleWithPath(fullPath);
+						id = bundle.infoDictionary().objectForKey(CFBundleDocumentTypes);
+						if (id != null) {
+							NSDictionary documentTypes = new NSDictionary(id.id);
+							NSEnumerator documentTypesEnumerator = documentTypes.objectEnumerator();
+							while ((id = documentTypesEnumerator.nextObject()) != null) {
+								NSDictionary documentType = new NSDictionary(id.id);
+								id = documentType.objectForKey(CFBundleTypeExtensions);
+								if (id != null) {
+									supportedDocumentTypes.addObjectsFromArray(new NSArray(id.id));
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+		int i = 0;
+		String[] exts = new String[(int)/*64*/supportedDocumentTypes.count()];
+		NSEnumerator enumerator = supportedDocumentTypes.objectEnumerator();
+		id id;
+		while ((id = enumerator.nextObject()) != null) {
+			String ext = new NSString(id.id).getString();
+			if (!ext.equals("*")) exts[i++] = "." + ext;
+		}
+		if (i != exts.length) {
+			String[] temp = new String[i];
+			System.arraycopy(exts, 0, temp, 0, i);
+			exts = temp;
+		}
+		return exts;
+	} finally {
+		pool.release();
+	}
+}
+
+static Program getProgram(NSBundle bundle) {
+	NSString CFBundleName = NSString.stringWith("CFBundleName");
+	NSString CFBundleDisplayName = NSString.stringWith("CFBundleDisplayName");
+	NSString fullPath = bundle.bundlePath();
+	NSString identifier = bundle.bundleIdentifier();
+	id bundleName = bundle.objectForInfoDictionaryKey(CFBundleDisplayName);
+    if (bundleName == null) {
+        bundleName = bundle.objectForInfoDictionaryKey(CFBundleName);
+    }
+    if (bundleName == null) {
+        bundleName = fullPath.lastPathComponent().stringByDeletingPathExtension();
+    }
+    NSString name = new NSString(bundleName.id);
+    Program program = new Program();
+    program.name = name.getString();
+    program.fullPath = fullPath.getString();
+    program.identifier = identifier != null ? identifier.getString() : "";
+    return program;
+}
+
+/**
+ * Answers all available programs in the operating system.  Note
+ * that a <code>Display</code> must already exist to guarantee
+ * that this method returns an appropriate result.
+ *
+ * @return an array of programs
+ */
+public static Program [] getPrograms () {
+	NSAutoreleasePool pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		Vector vector = new Vector();
+		NSWorkspace workspace = NSWorkspace.sharedWorkspace();
+		NSArray array = new NSArray(OS.NSSearchPathForDirectoriesInDomains(OS.NSAllApplicationsDirectory, OS.NSAllDomainsMask, true));
+		int count = (int)/*64*/array.count();
+		for (int i = 0; i < count; i++) {
+			NSString path = new NSString(array.objectAtIndex(i));
+			NSFileManager fileManager = NSFileManager.defaultManager();
+			NSDirectoryEnumerator enumerator = fileManager.enumeratorAtPath(path);
+			if (enumerator != null) {
+				id id;
+				while ((id = enumerator.nextObject()) != null) {
+					enumerator.skipDescendents();
+					NSString fullPath = path.stringByAppendingPathComponent(new NSString(id.id));
+					if (workspace.isFilePackageAtPath(fullPath)) {
+						NSBundle bundle = NSBundle.bundleWithPath(fullPath);
+						if (bundle != null) vector.addElement(getProgram(bundle));
+					}
+				}
+			}
+		}
+		Program[] programs = new Program[vector.size()];
+		vector.copyInto(programs);
+		return programs;
+	} finally {
+		pool.release();
+	}
+}
+
+/**
+ * Launches the operating system executable associated with the file or
+ * URL (http:// or https://).  If the file is an executable then the
+ * executable is launched.  Note that a <code>Display</code> must already
+ * exist to guarantee that this method returns an appropriate result.
+ *
+ * @param fileName the file or program name or URL (http:// or https://)
+ * @return <code>true</code> if the file is launched, otherwise <code>false</code>
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT when fileName is null</li>
+ * </ul>
+ */
+public static boolean launch (String fileName) {
+	if (fileName == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	NSAutoreleasePool pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSString unescapedStr = NSString.stringWith("%"); //$NON-NLS-1$
+		String lowercaseName = fileName.toLowerCase ();
+		if (lowercaseName.startsWith (PREFIX_HTTP) || lowercaseName.startsWith (PREFIX_HTTPS)) {
+			unescapedStr = NSString.stringWith("%#"); //$NON-NLS-1$
+		} else {
+			if (!lowercaseName.startsWith (PREFIX_FILE)) {
+				fileName = PREFIX_FILE + fileName;
+			}
+		}
+		NSString fullPath = NSString.stringWith(fileName);
+		int /*long*/ ptr = OS.CFURLCreateStringByAddingPercentEscapes(0, fullPath.id, unescapedStr.id, 0, OS.kCFStringEncodingUTF8);
+		NSString escapedString = new NSString(ptr);
+		NSWorkspace workspace = NSWorkspace.sharedWorkspace();
+		boolean result = workspace.openURL(NSURL.URLWithString(escapedString));
+		OS.CFRelease(ptr);
+		return result;
+	} finally {
+		pool.release();
+	}
+}
+
+/**
+ * Executes the program with the file as the single argument
+ * in the operating system.  It is the responsibility of the
+ * programmer to ensure that the file contains valid data for 
+ * this program.
+ *
+ * @param fileName the file or program name
+ * @return <code>true</code> if the file is launched, otherwise <code>false</code>
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT when fileName is null</li>
+ * </ul>
+ */
+public boolean execute (String fileName) {
+	if (fileName == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	NSAutoreleasePool pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSWorkspace workspace = NSWorkspace.sharedWorkspace();
+		String lowercaseName = fileName.toLowerCase ();
+		if (lowercaseName.startsWith (PREFIX_HTTP) || lowercaseName.startsWith (PREFIX_HTTPS)) {
+			NSString fullPath = NSString.stringWith(fileName);
+			NSString unescapedStr = NSString.stringWith("%#"); //$NON-NLS-1$
+			int /*long*/ ptr = OS.CFURLCreateStringByAddingPercentEscapes(0, fullPath.id, unescapedStr.id, 0, OS.kCFStringEncodingUTF8);
+			NSString escapedString = new NSString(ptr);
+			NSArray urls = NSArray.arrayWithObject(NSURL.URLWithString(escapedString));
+			OS.CFRelease(ptr);
+			return workspace.openURLs(urls, NSString.stringWith(identifier), 0, null, 0);
+		} else {
+			if (fileName.startsWith (PREFIX_FILE)) {
+				fileName = fileName.substring (PREFIX_FILE.length ());
+			}
+			NSString fullPath = NSString.stringWith (fileName);
+			return workspace.openFile (fullPath, NSString.stringWith (name));
+		}
+	} finally {
+		pool.release();
+	}
+}
+
+/**
+ * Returns the receiver's image data.  This is the icon
+ * that is associated with the receiver in the operating
+ * system.
+ *
+ * @return the image data for the program, may be null
+ */
+public ImageData getImageData () {
+	NSAutoreleasePool pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSWorkspace workspace = NSWorkspace.sharedWorkspace();
+		NSString fullPath;
+		if (this.fullPath != null) {
+			fullPath = NSString.stringWith(this.fullPath);
+		} else {
+			fullPath = workspace.fullPathForApplication(NSString.stringWith(name));
+		}
+		if (fullPath != null) {
+			NSImage nsImage = workspace.iconForFile(fullPath);
+			if (nsImage != null) {
+				NSSize size = new NSSize();
+				size.width = size.height = 16;
+				nsImage.setSize(size);
+				NSBitmapImageRep imageRep = null;
+				NSImageRep rep = nsImage.bestRepresentationForDevice(null);
+				if (rep.isKindOfClass(OS.class_NSBitmapImageRep)) { 
+					imageRep = new NSBitmapImageRep(rep.id);
+				}
+				if (imageRep != null) {
+					int width = (int)/*64*/imageRep.pixelsWide();
+					int height = (int)/*64*/imageRep.pixelsHigh();
+					int bpr = (int)/*64*/imageRep.bytesPerRow();
+					int bpp = (int)/*64*/imageRep.bitsPerPixel();
+					int dataSize = height * bpr;
+					byte[] srcData = new byte[dataSize];
+					OS.memmove(srcData, imageRep.bitmapData(), dataSize);
+					//TODO: Image representation wrong???
+					PaletteData palette = new PaletteData(0xFF000000, 0xFF0000, 0xFF00);
+					ImageData data = new ImageData(width, height, bpp, palette, 4, srcData);
+					data.bytesPerLine = bpr;
+					data.alphaData = new byte[width * height];
+					for (int i = 3, o = 0; i < srcData.length; i+= 4, o++) {
+						data.alphaData[o] = srcData[i];
+					}
+					return data;
+				}
+			}
+		}
+		return null;
+	} finally {
+		pool.release();
+	}
+}
+
+/**
+ * Returns the receiver's name.  This is as short and
+ * descriptive a name as possible for the program.  If
+ * the program has no descriptive name, this string may
+ * be the executable name, path or empty.
+ *
+ * @return the name of the program
+ */
+public String getName () {
+	return name;
+}
+
+/**
+ * Compares the argument to the receiver, and returns true
+ * if they represent the <em>same</em> object using a class
+ * specific comparison.
+ *
+ * @param other the object to compare with this object
+ * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
+ *
+ * @see #hashCode()
+ */
+public boolean equals(Object other) {
+	if (this == other) return true;
+	if (other instanceof Program) {
+		final Program program = (Program) other;
+		return name.equals(program.name);
+	}
+	return false;
+}
+
+/**
+ * Returns an integer hash code for the receiver. Any two 
+ * objects that return <code>true</code> when passed to 
+ * <code>equals</code> must return the same value for this
+ * method.
+ *
+ * @return the receiver's hash
+ *
+ * @see #equals(Object)
+ */
+public int hashCode() {
+	return name.hashCode();
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the program
+ */
+public String toString () {
+	return "Program {" + name + "}";
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Program/emulated/org/eclipse/swt/program/Program.java b/bundles/org.eclipse.swt/Eclipse SWT Program/emulated/org/eclipse/swt/program/Program.java
new file mode 100644
index 0000000..355f215
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Program/emulated/org/eclipse/swt/program/Program.java
@@ -0,0 +1,181 @@
+/*******************************************************************************
+ * 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.program;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class represent programs and
+ * their associated file extensions in the operating
+ * system.
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#program">Program snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public final class Program {
+	String name;
+
+/**
+ * Prevents uninitialized instances from being created outside the package.
+ */
+Program () {
+}
+
+/**
+ * Finds the program that is associated with an extension.
+ * The extension may or may not begin with a '.'.  Note that
+ * a <code>Display</code> must already exist to guarantee that
+ * this method returns an appropriate result.
+ *
+ * @param extension the program extension
+ * @return the program or <code>null</code>
+ *
+ * @exception IllegalArgumentException <ul>
+ *		<li>ERROR_NULL_ARGUMENT when extension is null</li>
+ *	</ul>
+ */
+public static Program findProgram (String extension) {
+	if (extension == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	if (extension.length () == 0) return null;
+	if (extension.charAt (0) != '.') extension = "." + extension; //$NON-NLS-1$
+	Program program = null;
+	return program;
+}
+
+/**
+ * Answer all program extensions in the operating system.  Note
+ * that a <code>Display</code> must already exist to guarantee
+ * that this method returns an appropriate result.
+ *
+ * @return an array of extensions
+ */
+public static String [] getExtensions () {
+	String [] extensions = new String [0];
+	return extensions;
+}
+
+/**
+ * Answers all available programs in the operating system.  Note
+ * that a <code>Display</code> must already exist to guarantee
+ * that this method returns an appropriate result.
+ *
+ * @return an array of programs
+ */
+public static Program [] getPrograms () {
+	Program [] programs = new Program [0];
+	return programs;
+}
+
+/**
+ * Launches the operating system executable associated with the file or
+ * URL (http:// or https://).  If the file is an executable then the
+ * executable is launched.  Note that a <code>Display</code> must already
+ * exist to guarantee that this method returns an appropriate result.
+ *
+ * @param fileName the file or program name or URL (http:// or https://)
+ * @return <code>true</code> if the file is launched, otherwise <code>false</code>
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT when fileName is null</li>
+ * </ul>
+ */
+public static boolean launch (String fileName) {
+	if (fileName == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	return false;
+}
+
+/**
+ * Executes the program with the file as the single argument
+ * in the operating system.  It is the responsibility of the
+ * programmer to ensure that the file contains valid data for 
+ * this program.
+ *
+ * @param fileName the file or program name
+ * @return <code>true</code> if the file is launched, otherwise <code>false</code>
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT when fileName is null</li>
+ * </ul>
+ */
+public boolean execute (String fileName) {
+	if (fileName == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	return false;
+}
+
+/**
+ * Returns the receiver's image data.  This is the icon
+ * that is associated with the receiver in the operating
+ * system.
+ *
+ * @return the image data for the program, may be null
+ */
+public ImageData getImageData () {
+	ImageData imageData = null;
+	return imageData;
+}
+
+/**
+ * Returns the receiver's name.  This is as short and
+ * descriptive a name as possible for the program.  If
+ * the program has no descriptive name, this string may
+ * be the executable name, path or empty.
+ *
+ * @return the name of the program
+ */
+public String getName () {
+	return name;
+}
+
+/**
+ * Compares the argument to the receiver, and returns true
+ * if they represent the <em>same</em> object using a class
+ * specific comparison.
+ *
+ * @param other the object to compare with this object
+ * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
+ *
+ * @see #hashCode()
+ */
+public boolean equals(Object other) {
+	if (this == other) return true;
+	if (other instanceof Program) {
+		final Program program = (Program) other;
+		return name.equals(program.name);
+	}
+	return false;
+}
+
+/**
+ * Returns an integer hash code for the receiver. Any two 
+ * objects that return <code>true</code> when passed to 
+ * <code>equals</code> must return the same value for this
+ * method.
+ *
+ * @return the receiver's hash
+ *
+ * @see #equals(Object)
+ */
+public int hashCode() {
+	return name.hashCode();
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the program
+ */
+public String toString () {
+	return "Program {" + name + "}"; //$NON-NLS-1$ //$NON-NLS-2$
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Program/wpf/org/eclipse/swt/program/Program.java b/bundles/org.eclipse.swt/Eclipse SWT Program/wpf/org/eclipse/swt/program/Program.java
new file mode 100644
index 0000000..7563947
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Program/wpf/org/eclipse/swt/program/Program.java
@@ -0,0 +1,387 @@
+/*******************************************************************************
+ * 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.program;
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.internal.win32.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class represent programs and
+ * their associated file extensions in the operating
+ * system.
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#program">Program snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public final class Program {
+	String name;
+	String command;
+	String iconName;
+	static final String [] ARGUMENTS = new String [] {"%1", "%l", "%L"};
+
+/**
+ * Prevents uninitialized instances from being created outside the package.
+ */
+Program () {
+}
+
+static int createDotNetString (String string) {
+	if (string == null) return 0;
+	int length = string.length ();
+	char [] buffer = new char [length + 1];
+	string.getChars (0, length, buffer, 0);
+	return OS.gcnew_String (buffer);
+}
+
+static String createJavaString (int ptr) {
+	int charArray = OS.String_ToCharArray (ptr);
+	char[] chars = new char[OS.String_Length (ptr)];
+	OS.memcpy (chars, charArray, chars.length * 2);
+	OS.GCHandle_Free (charArray);
+	return new String (chars);
+}
+
+/**
+ * Finds the program that is associated with an extension.
+ * The extension may or may not begin with a '.'.  Note that
+ * a <code>Display</code> must already exist to guarantee that
+ * this method returns an appropriate result.
+ *
+ * @param extension the program extension
+ * @return the program or <code>null</code>
+ *
+ * @exception IllegalArgumentException <ul>
+ *		<li>ERROR_NULL_ARGUMENT when extension is null</li>
+ *	</ul>
+ */
+public static Program findProgram (String extension) {
+	if (extension == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	if (extension.length () == 0) return null;
+	if (extension.charAt (0) != '.') extension = "." + extension; //$NON-NLS-1$
+	if (extension.length() > 0xff) return null;
+	int key = createDotNetString (extension);
+	int classesRoot = OS.Registry_ClassesRoot ();
+	int registryKey = OS.RegistryKey_OpenSubKey (classesRoot, key);
+	OS.GCHandle_Free (key);
+	OS.GCHandle_Free (classesRoot);
+	if (registryKey == 0) return null;
+	Program program = null;
+	int value = OS.RegistryKey_GetValue (registryKey, 0);
+	if (value != 0) {
+		program = getProgram (value);
+		OS.GCHandle_Free (value);
+	}
+	OS.GCHandle_Free (registryKey);
+	return program;
+}
+
+/**
+ * Answer all program extensions in the operating system.  Note
+ * that a <code>Display</code> must already exist to guarantee
+ * that this method returns an appropriate result.
+ *
+ * @return an array of extensions
+ */
+public static String [] getExtensions () {
+	String [] extensions = new String [1024];
+	int classesRoot = OS.Registry_ClassesRoot ();
+	int subKeys = OS.RegistryKey_GetSubKeyNames (classesRoot);
+	OS.GCHandle_Free (classesRoot);
+	int count = 0, length = OS.ICollection_Count (subKeys);
+	for (int i=0; i<length; i++) {
+		int key = OS.IList_default (subKeys, i);
+		String extension = createJavaString (key);
+		OS.GCHandle_Free (key);
+		if (extension.length () > 0 && extension.charAt (0) == '.') {
+			if (count == extensions.length) {
+				String [] newExtensions = new String [extensions.length + 1024];
+				System.arraycopy (extensions, 0, newExtensions, 0, extensions.length);
+				extensions = newExtensions;
+			}
+			extensions [count++] = extension;
+		}
+
+	}
+	OS.GCHandle_Free (subKeys);
+	if (count != extensions.length) {
+		String [] newExtension = new String [count];
+		System.arraycopy (extensions, 0, newExtension, 0, count);
+		extensions = newExtension;
+	}
+	return extensions;
+}
+
+static int getKeyValue (int key, boolean expand) {
+	int value = OS.RegistryKey_GetValue (key, 0);
+	if (value != 0) {
+		if (expand) {
+			int expandedValue = OS.Environment_ExpandEnvironmentVariables (value);
+			OS.GCHandle_Free (value);
+			value = expandedValue;
+		}	
+	}
+	return value;
+}
+
+static Program getProgram (int key) {
+	int classesRoot = OS.Registry_ClassesRoot ();
+	int registryKey = OS.RegistryKey_OpenSubKey (classesRoot, key);
+	OS.GCHandle_Free (classesRoot);
+	/* Name */
+	int name = getKeyValue (registryKey, false);
+	String programName = createJavaString (name == 0 ? key : name);
+	OS.GCHandle_Free (name);
+	/* Command */
+	int shellCommand = createDotNetString ("shell");
+	int shellKey = OS.RegistryKey_OpenSubKey (registryKey, shellCommand);
+	OS.GCHandle_Free (shellCommand);
+	int command = 0;
+	if (shellKey != 0) {
+		command = getKeyValue (shellKey, true);
+		if (command == 0) {
+			int openCommand = createDotNetString ("open");
+			int openKey = OS.RegistryKey_OpenSubKey (shellKey, openCommand);
+			if (openKey != 0) {
+				int commandCommand = createDotNetString ("command");
+				int commandKey = OS.RegistryKey_OpenSubKey (openKey, commandCommand);
+				if (commandKey != 0) {
+					command = getKeyValue (commandKey, true);
+					OS.GCHandle_Free (commandKey);			
+				}
+				OS.GCHandle_Free (commandCommand);
+				OS.GCHandle_Free (openKey);
+			}
+			OS.GCHandle_Free (openCommand);
+		}
+	}
+	OS.GCHandle_Free (shellKey);
+	int iconName = 0;
+	if (command != 0) {
+		int defaultIconCommand = createDotNetString ("DefaultIcon");
+		int defaultIconKey = OS.RegistryKey_OpenSubKey (registryKey, defaultIconCommand);
+		if (defaultIconKey != 0) {
+			iconName = getKeyValue (defaultIconKey, true);
+			OS.GCHandle_Free (defaultIconKey);
+		}
+		OS.GCHandle_Free (defaultIconCommand);
+	}
+	OS.GCHandle_Free (registryKey);
+	if (command == 0) return null;
+	Program program = new Program ();
+	program.name = programName;
+	program.command = createJavaString (command);
+	OS.GCHandle_Free (command);
+	program.iconName = iconName != 0 ? createJavaString (iconName) : "";
+	OS.GCHandle_Free (iconName);
+	return program;
+}
+
+/**
+ * Answers all available programs in the operating system.  Note
+ * that a <code>Display</code> must already exist to guarantee
+ * that this method returns an appropriate result.
+ *
+ * @return an array of programs
+ */
+public static Program [] getPrograms () {
+	Program [] programs = new Program [1024];
+	int classesRoot = OS.Registry_ClassesRoot ();
+	int subKeyNames = OS.RegistryKey_GetSubKeyNames (classesRoot);
+	OS.GCHandle_Free (classesRoot);
+	int count = 0;
+	int length = OS.ICollection_Count (subKeyNames);
+	for (int i = 0; i < length; i++) {
+		int keyName = OS.IList_default (subKeyNames, i);
+		Program program = getProgram (keyName);
+		OS.GCHandle_Free (keyName);
+		if (program != null) {
+			if (count == programs.length) {
+				Program [] newPrograms = new Program [programs.length + 1024];
+				System.arraycopy (programs, 0, newPrograms, 0, programs.length);
+				programs = newPrograms;
+			}
+			programs [count++] = program;
+		}
+	}
+	OS.GCHandle_Free (subKeyNames);
+	if (count != programs.length) {
+		Program [] newPrograms = new Program [count];
+		System.arraycopy (programs, 0, newPrograms, 0, count);
+		programs = newPrograms;
+	}
+	return programs;
+}
+
+/**
+ * Launches the operating system executable associated with the file or
+ * URL (http:// or https://).  If the file is an executable then the
+ * executable is launched.  Note that a <code>Display</code> must already
+ * exist to guarantee that this method returns an appropriate result.
+ *
+ * @param fileName the file or program name or URL (http:// or https://)
+ * @return <code>true</code> if the file is launched, otherwise <code>false</code>
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT when fileName is null</li>
+ * </ul>
+ */
+public static boolean launch (String fileName) {
+	if (fileName == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);	
+	int hHeap = Win32.GetProcessHeap ();
+	int length = fileName.length ();
+	char [] buffer = new char [length + 1];
+	fileName.getChars (0, length, buffer, 0);
+	int byteCount = buffer.length  * 2;
+	int lpFile = Win32.HeapAlloc (hHeap, Win32.HEAP_ZERO_MEMORY, byteCount);
+	Win32.MoveMemory (lpFile, buffer, byteCount);
+	SHELLEXECUTEINFOW info = new SHELLEXECUTEINFOW ();
+	info.cbSize = SHELLEXECUTEINFOW.sizeof;
+	info.lpFile = lpFile;
+	info.nShow = Win32.SW_SHOW;
+	boolean result = Win32.ShellExecuteExW (info);
+	if (lpFile != 0) Win32.HeapFree (hHeap, 0, lpFile);
+	return result;
+}
+
+/**
+ * Executes the program with the file as the single argument
+ * in the operating system.  It is the responsibility of the
+ * programmer to ensure that the file contains valid data for 
+ * this program.
+ *
+ * @param fileName the file or program name
+ * @return <code>true</code> if the file is launched, otherwise <code>false</code>
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT when fileName is null</li>
+ * </ul>
+ */
+public boolean execute (String fileName) {
+	if (fileName == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	int index = 0;
+	boolean append = true;
+	String prefix = command, suffix = ""; //$NON-NLS-1$
+	while (index < ARGUMENTS.length) {
+		int i = command.indexOf (ARGUMENTS [index]);
+		if (i != -1) {
+			append = false;
+			prefix = command.substring (0, i);
+			suffix = command.substring (i + ARGUMENTS [index].length (), command.length ());
+			break;
+		}
+		index++;
+	}
+	if (append) fileName = " \"" + fileName + "\"";
+	String commandLine = prefix + fileName + suffix;
+	int length = commandLine.length ();
+	char [] buffer = new char [length + 1];
+	commandLine.getChars (0, length, buffer, 0);
+	STARTUPINFOW lpStartupInfo = new STARTUPINFOW ();
+	lpStartupInfo.cb = STARTUPINFOW.sizeof;
+	PROCESS_INFORMATION lpProcessInformation = new PROCESS_INFORMATION ();
+	boolean success = Win32.CreateProcessW (0, buffer, 0, 0, false, 0, 0, 0, lpStartupInfo, lpProcessInformation);
+	if (lpProcessInformation.hProcess != 0) Win32.CloseHandle (lpProcessInformation.hProcess);
+	if (lpProcessInformation.hThread != 0) Win32.CloseHandle (lpProcessInformation.hThread);
+	return success;
+}
+
+/**
+ * Returns the receiver's image data.  This is the icon
+ * that is associated with the receiver in the operating
+ * system.
+ *
+ * @return the image data for the program, may be null
+ */
+public ImageData getImageData () {
+	int nIconIndex = 0;
+	String fileName = iconName;
+	int index = iconName.indexOf (',');
+	if (index != -1) {
+		fileName = iconName.substring (0, index);
+		String iconIndex = iconName.substring (index + 1, iconName.length ()).trim ();
+		try {
+			nIconIndex = Integer.parseInt (iconIndex);
+		} catch (NumberFormatException e) {}
+	}
+	int length = fileName.length ();
+	char [] buffer = new char [length + 1];
+	fileName.getChars (0, length, buffer, 0);
+	int [] phiconSmall = new int [1], phiconLarge = null;
+	Win32.ExtractIconExW (buffer, nIconIndex, phiconLarge, phiconSmall, 1);
+	if (phiconSmall [0] == 0) return null;
+	int empty = OS.Int32Rect_Empty ();
+	int source = OS.Imaging_CreateBitmapSourceFromHIcon (phiconSmall [0], empty, 0);
+	Image image = Image.wpf_new (null, SWT.ICON, source);
+	OS.GCHandle_Free (empty);
+	ImageData imageData = image.getImageData ();
+	image.dispose ();
+	return imageData;
+}
+
+/**
+ * Returns the receiver's name.  This is as short and
+ * descriptive a name as possible for the program.  If
+ * the program has no descriptive name, this string may
+ * be the executable name, path or empty.
+ *
+ * @return the name of the program
+ */
+public String getName () {
+	return name;
+}
+
+/**
+ * Compares the argument to the receiver, and returns true
+ * if they represent the <em>same</em> object using a class
+ * specific comparison.
+ *
+ * @param other the object to compare with this object
+ * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
+ *
+ * @see #hashCode()
+ */
+public boolean equals (Object other) {
+	if (this == other) return true;
+	if (other instanceof Program) {
+		final Program program = (Program) other;
+		return name.equals (program.name) && command.equals (program.command)
+			&& iconName.equals (program.iconName);
+	}
+	return false;
+}
+
+/**
+ * Returns an integer hash code for the receiver. Any two 
+ * objects that return <code>true</code> when passed to 
+ * <code>equals</code> must return the same value for this
+ * method.
+ *
+ * @return the receiver's hash
+ *
+ * @see #equals(Object)
+ */
+public int hashCode () {
+	return name.hashCode () ^ command.hashCode () ^ iconName.hashCode ();
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the program
+ */
+public String toString () {
+	return "Program {" + name + "}"; //$NON-NLS-1$ //$NON-NLS-2$
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ButtonDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ButtonDrawData.java
new file mode 100644
index 0000000..f53ad79
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ButtonDrawData.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.carbon.OS;
+import org.eclipse.swt.internal.carbon.HIThemeButtonDrawInfo;
+import org.eclipse.swt.internal.carbon.CGRect;
+
+public class ButtonDrawData extends DrawData {
+	
+public ButtonDrawData() {
+	state = new int[1];
+}
+
+HIThemeButtonDrawInfo getInfo () {
+	int state = this.state[DrawData.WIDGET_WHOLE];
+	HIThemeButtonDrawInfo info = new HIThemeButtonDrawInfo();
+	info.version = 0;
+	if ((style & SWT.PUSH) != 0) info.kind = OS.kThemePushButton;
+	if ((style & SWT.CHECK) != 0) info.kind = OS.kThemeCheckBox;
+	if ((style & SWT.RADIO) != 0) info.kind = OS.kThemeRadioButton;
+	if ((state & DrawData.SELECTED) != 0) {
+		info.value = OS.kThemeButtonOn;				
+	} else {
+		info.value = OS.kThemeButtonOff;				
+	}
+	if ((state & DrawData.PRESSED) != 0) {
+		info.state = OS.kThemeStatePressed;
+	} else {
+		if ((state & DrawData.ACTIVE) != 0) {
+			info.state = (state & DrawData.DISABLED) == 0 ? OS.kThemeStateActive : OS.kThemeStateUnavailable;
+		} else {
+			info.state = (state & DrawData.DISABLED) == 0 ? OS.kThemeStateInactive : OS.kThemeStateUnavailableInactive;
+		}
+	}
+	if ((state & DrawData.DEFAULTED) != 0) info.adornment |= OS.kThemeAdornmentDefault;
+	if ((state & DrawData.FOCUSED) != 0)	info.adornment |= OS.kThemeAdornmentFocus;
+	return info;
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	HIThemeButtonDrawInfo info = getInfo();
+	CGRect rect = new CGRect();
+	rect.x = bounds.x;
+	rect.y = bounds.y;
+	rect.width = bounds.width;
+	rect.height = bounds.height;
+	CGRect backRect = new CGRect();
+	OS.HIThemeGetButtonBackgroundBounds(rect, info, backRect);
+	rect.x += (rect.x - backRect.x);
+	rect.y += (rect.y - backRect.y);
+	rect.width -= (backRect.width - rect.width);
+	rect.height -= (backRect.height - rect.height);	
+	CGRect labelRect = clientArea != null ? new CGRect() : null;
+	OS.HIThemeDrawButton(rect, info, gc.handle, OS.kHIThemeOrientationNormal, labelRect);
+	if (clientArea != null) {
+		clientArea.x = (int)labelRect.x;
+		clientArea.y = (int)labelRect.y;
+		clientArea.width = (int)labelRect.width;
+		clientArea.height = (int)labelRect.height;
+	}
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	HIThemeButtonDrawInfo info = getInfo();
+	CGRect rect = new CGRect();
+	rect.x = bounds.x;
+	rect.y = bounds.y;
+	rect.width = bounds.width;
+	rect.height = bounds.height;
+	CGRect backRect = new CGRect();
+	OS.HIThemeGetButtonBackgroundBounds(rect, info, backRect);
+	rect.x += (rect.x - backRect.x);
+	rect.y += (rect.y - backRect.y);
+	rect.width -= (backRect.width - rect.width);
+	rect.height -= (backRect.height - rect.height);
+	return new Rectangle((int)rect.x, (int)rect.y, (int)rect.width, (int)rect.height).contains(position) ? DrawData.WIDGET_WHOLE : DrawData.WIDGET_NOWHERE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ComboDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ComboDrawData.java
new file mode 100644
index 0000000..51a00a0
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ComboDrawData.java
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.carbon.OS;
+import org.eclipse.swt.internal.carbon.CGRect;
+import org.eclipse.swt.internal.carbon.HIThemeButtonDrawInfo;
+
+public class ComboDrawData extends DrawData {
+	
+public ComboDrawData() {
+	state = new int[2];
+}
+
+HIThemeButtonDrawInfo getInfo() {
+	int state = this.state[DrawData.WIDGET_WHOLE];
+	HIThemeButtonDrawInfo info = new HIThemeButtonDrawInfo();
+	info.version = 0;
+	info.kind = OS.kThemeComboBox;
+	if ((style & SWT.READ_ONLY) != 0) info.kind = OS.kThemePopupButton;
+	if ((state & DrawData.DISABLED) != 0) {
+		info.state = (state & DrawData.ACTIVE) != 0 ? OS.kThemeStateUnavailable : OS.kThemeStateUnavailableInactive;
+	} else {
+		if (((style & SWT.READ_ONLY) != 0 && (state & DrawData.PRESSED) != 0) || ((style & SWT.READ_ONLY) == 0 && (this.state[DrawData.COMBO_ARROW] & DrawData.PRESSED) != 0)) {
+			info.state = OS.kThemeStatePressed;
+		} else {
+			info.state = (state & DrawData.ACTIVE) != 0 ? OS.kThemeStateActive : OS.kThemeStateInactive;
+		}
+	}
+	if ((state & DrawData.FOCUSED) != 0)	info.adornment |= OS.kThemeAdornmentFocus;
+	return info;
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	HIThemeButtonDrawInfo info = getInfo();
+	CGRect rect = new CGRect();
+	rect.x = bounds.x;
+	rect.y = bounds.y;
+	rect.width = bounds.width;
+	rect.height = bounds.height;
+	int inset = 0, arrowWidth = 0;
+	if ((style & SWT.READ_ONLY) == 0) {
+		int[] metric = new int[1];
+		OS.GetThemeMetric(OS.kThemeMetricFocusRectOutset, metric);
+		inset = metric[0];
+		OS.GetThemeMetric(OS.kThemeMetricComboBoxLargeDisclosureWidth, metric);
+		arrowWidth = metric[0];
+		rect.x += inset;
+		rect.y += inset;
+		rect.width -= 2 * inset;
+		rect.height -= 2 * inset;
+	} else {		
+		CGRect backRect = new CGRect();
+		OS.HIThemeGetButtonBackgroundBounds(rect, info, backRect);
+		rect.x += (rect.x - backRect.x);
+		rect.y += (rect.y - backRect.y);
+		rect.width -= (backRect.width - rect.width);
+		rect.height -= (backRect.height - rect.height);
+	}
+	CGRect labelRect = clientArea != null && (style & SWT.READ_ONLY) != 0 ? new CGRect() : null;
+	OS.HIThemeDrawButton(rect, info, gc.handle, OS.kHIThemeOrientationNormal, labelRect);
+	if (clientArea != null) {
+		if ((style & SWT.READ_ONLY) != 0) {
+			clientArea.x = (int)labelRect.x;
+			clientArea.y = (int)labelRect.y;
+			clientArea.width = (int)labelRect.width;
+			clientArea.height = (int)labelRect.height;
+		} else {
+			clientArea.x = (int)bounds.x + inset;
+			clientArea.y = (int)bounds.y + inset;
+			clientArea.width = (int)bounds.width - (2 * inset) - arrowWidth;
+			clientArea.height = (int)bounds.height - (2 * inset);
+		}
+	}
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	if (!bounds.contains(position)) return DrawData.WIDGET_NOWHERE;
+	if ((style & SWT.READ_ONLY) == 0) {
+		int[] metric = new int[1];
+		OS.GetThemeMetric(OS.kThemeMetricFocusRectOutset, metric);
+		int inset = metric[0];
+		OS.GetThemeMetric(OS.kThemeMetricComboBoxLargeDisclosureWidth, metric);
+		int arrowWidth = metric[0];
+		Rectangle arrowRect = new Rectangle(bounds.x + bounds.width - inset - arrowWidth, bounds.y - inset, arrowWidth, bounds.height - inset * 2);
+		if (arrowRect.contains(position)) return DrawData.COMBO_ARROW;
+	}
+	return DrawData.WIDGET_WHOLE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/DrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/DrawData.java
new file mode 100644
index 0000000..7e6680f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/DrawData.java
@@ -0,0 +1,190 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.carbon.OS;
+import org.eclipse.swt.internal.carbon.CGRect;
+import org.eclipse.swt.internal.carbon.HIThemeTextInfo;
+
+public class DrawData {
+	public int style;
+	public int[] state;
+	public Rectangle clientArea;
+
+	/** Part states */
+	public static final int SELECTED = 1 << 1;
+	public static final int FOCUSED = 1 << 2;
+	public static final int PRESSED = 1 << 3;
+	public static final int ACTIVE = 1 << 4;
+	public static final int DISABLED = 1 << 5;
+	public static final int HOT = 1 << 6;
+	public static final int DEFAULTED = 1 << 7;
+	public static final int GRAYED = 1 << 8;
+	
+	/** Text and Image drawing flags */
+	public static final int DRAW_LEFT = 1 << 4;
+	public static final int DRAW_TOP = 1 << 5;
+	public static final int DRAW_RIGHT = 1 << 6;
+	public static final int DRAW_BOTTOM = 1 << 7;
+	public static final int DRAW_HCENTER = 1 << 8;
+	public static final int DRAW_VCENTER = 1 << 9;
+
+	/** Widget parts */
+	public static final int WIDGET_NOWHERE = -1;
+	public static final int WIDGET_WHOLE = 0;
+
+	/** Scrollbar parts */
+	public static final int SCROLLBAR_UP_ARROW = 1;
+	public static final int SCROLLBAR_DOWN_ARROW = 2;
+	public static final int SCROLLBAR_LEFT_ARROW = SCROLLBAR_UP_ARROW;
+	public static final int SCROLLBAR_RIGHT_ARROW = SCROLLBAR_DOWN_ARROW;
+	public static final int SCROLLBAR_UP_TRACK = 3;
+	public static final int SCROLLBAR_DOWN_TRACK = 4;
+	public static final int SCROLLBAR_LEFT_TRACK = SCROLLBAR_UP_TRACK;
+	public static final int SCROLLBAR_RIGHT_TRACK = SCROLLBAR_DOWN_TRACK;
+	public static final int SCROLLBAR_THUMB = 5;
+	
+	/** Scale parts */
+	public static final int SCALE_UP_TRACK = 1;
+	public static final int SCALE_LEFT_TRACK = SCALE_UP_TRACK;
+	public static final int SCALE_DOWN_TRACK = 2;
+	public static final int SCALE_RIGHT_TRACK = SCALE_DOWN_TRACK;
+	public static final int SCALE_THUMB = 3;
+	
+	/** ToolItem parts */
+	public static final int TOOLITEM_ARROW = 1;
+	
+	/** Combo parts */
+	public static final int COMBO_ARROW = 1;
+	
+public DrawData() {
+	state = new int[1];
+}
+
+Rectangle computeTrim(Theme theme, GC gc) {
+	return new Rectangle(clientArea.x, clientArea.y, clientArea.width, clientArea.height);
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+}
+
+void drawImage(Theme theme, Image image, GC gc, Rectangle bounds) {
+	Image drawImage = image;
+	Rectangle rect = drawImage.getBounds();
+	int state = this.state[DrawData.WIDGET_WHOLE];
+	if (OS.VERSION >= 0x1040) {
+		if ((state & (DrawData.PRESSED | DrawData.DISABLED)) != 0) {
+			int transform = OS.kHITransformNone;
+			if ((state & DrawData.DISABLED) != 0) {
+				transform = OS.kHITransformDisabled;
+			} else {
+				if ((state & DrawData.PRESSED) != 0) {
+					transform = OS.kHITransformSelected;
+				}
+			}
+			if (transform != OS.kHITransformNone) {
+				int[] buffer = new int[1];
+				OS.HICreateTransformedCGImage(drawImage.handle, transform, buffer);
+				if (buffer[0] != 0) {
+					//TODO - get device
+					//TODO - is data needed
+					drawImage = Image.carbon_new(null, drawImage.type, buffer[0], 0);
+				}
+			}
+		}
+	}		
+	gc.drawImage(drawImage, 0, 0, rect.width, rect.height, bounds.x, bounds.y, bounds.width, bounds.height);
+	if (drawImage != image) {
+		drawImage.dispose();
+	}
+}
+
+void drawText(Theme theme, String text, int flags, GC gc, Rectangle bounds) {
+	int state = this.state[DrawData.WIDGET_WHOLE];
+	char[] chars = new char[text.length()];
+	text.getChars(0, chars.length, chars, 0);
+	int ptr = OS.CFStringCreateWithCharacters(OS.kCFAllocatorDefault, chars, chars.length);	
+	OS.CGContextSaveGState(gc.handle);
+	if ((state & DrawData.DISABLED) != 0) {
+		//TODO - find out disable color
+		OS.CGContextSetFillColor(gc.handle, new float[]{0.5f, 0.5f, 0.5f, 1});
+	} else {
+		if ((state & DrawData.ACTIVE) != 0) {
+			OS.CGContextSetFillColor(gc.handle, new float[]{0, 0, 0, 1});
+		} else {
+			//TODO - find out inative color
+			OS.CGContextSetFillColor(gc.handle, new float[]{0.6f, 0.6f, 0.6f, 1});					
+		}
+	}
+	CGRect rect = new CGRect();
+	rect.x = bounds.x;
+	rect.y = bounds.y;
+	rect.width = bounds.width;
+	rect.height = bounds.height;
+	HIThemeTextInfo info = getTextInfo(flags);
+	OS.HIThemeDrawTextBox(ptr, rect, info, gc.handle, OS.kHIThemeOrientationNormal);
+	OS.CGContextRestoreGState(gc.handle);
+	OS.CFRelease(ptr);
+}
+
+Rectangle getBounds(int part, Rectangle bounds) {
+	return new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height);
+}
+
+int getFontId() {
+	return OS.kThemeSmallSystemFont;
+}
+
+HIThemeTextInfo getTextInfo(int flags) {
+	int state = this.state[DrawData.WIDGET_WHOLE];
+	HIThemeTextInfo info = new HIThemeTextInfo();
+	if ((state & DrawData.PRESSED) != 0) {
+		info.state = OS.kThemeStatePressed;
+	} else {
+		if ((state & DrawData.ACTIVE) != 0) {
+			info.state = (state & DrawData.DISABLED) == 0 ? OS.kThemeStateActive : OS.kThemeStateUnavailable;
+		} else {
+			info.state = (state & DrawData.DISABLED) == 0 ? OS.kThemeStateInactive : OS.kThemeStateUnavailableInactive;
+		}
+	}
+	info.state = info.state;
+	info.fontID = (short)getFontId();
+	if ((flags & DrawData.DRAW_LEFT) != 0) info.horizontalFlushness = OS.kHIThemeTextHorizontalFlushLeft;
+	if ((flags & DrawData.DRAW_HCENTER) != 0) info.horizontalFlushness = OS.kHIThemeTextHorizontalFlushCenter;
+	if ((flags & DrawData.DRAW_RIGHT) != 0) info.horizontalFlushness = OS.kHIThemeTextHorizontalFlushRight;
+	if ((flags & DrawData.DRAW_TOP) != 0) info.verticalFlushness = OS.kHIThemeTextVerticalFlushTop;
+	if ((flags & DrawData.DRAW_VCENTER) != 0) info.verticalFlushness = OS.kHIThemeTextVerticalFlushCenter;
+	if ((flags & DrawData.DRAW_BOTTOM) != 0) info.verticalFlushness = OS.kHIThemeTextVerticalFlushBottom;
+	info.truncationMaxLines = 0;
+	info.truncationPosition = 0;
+	info.options = 0;
+	return info;
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	return -1;
+}
+
+Rectangle measureText(Theme theme, String text, int flags, GC gc, Rectangle bounds) {
+	//TODO - decide if should take only width and return only width/height
+	char[] chars = new char[text.length()];
+	text.getChars(0, chars.length, chars, 0);
+	int ptr = OS.CFStringCreateWithCharacters(OS.kCFAllocatorDefault, chars, chars.length);
+	int width = bounds != null ? bounds.width : 0;
+	float[] outWidth = new float[1], outHeight = new float[1];
+	HIThemeTextInfo info = getTextInfo(flags);
+	OS.HIThemeGetTextDimensions(ptr, width, info, outWidth, outHeight, null);
+	OS.CFRelease(ptr);
+	return new Rectangle(0, 0, (int)outWidth[0], (int)outHeight[0]);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ExpanderDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ExpanderDrawData.java
new file mode 100644
index 0000000..9c04a0c
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ExpanderDrawData.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.carbon.OS;
+import org.eclipse.swt.internal.carbon.CGRect;
+import org.eclipse.swt.internal.carbon.HIThemeButtonDrawInfo;
+
+public class ExpanderDrawData extends DrawData {
+	
+public ExpanderDrawData() {
+	state = new int[1];
+}
+
+HIThemeButtonDrawInfo getInfo() {
+	int state = this.state[DrawData.WIDGET_WHOLE];
+	HIThemeButtonDrawInfo info = new HIThemeButtonDrawInfo();
+	info.version = 0;
+	info.kind = OS.kThemeDisclosureTriangle;
+	if ((style & SWT.DOWN) != 0) {
+		info.value = OS.kThemeButtonOn;
+	} else {
+		info.value = OS.kThemeButtonOff;
+	}
+	if ((state & DrawData.PRESSED) != 0) {
+		info.state = OS.kThemeStatePressed;
+	} else {
+		if ((state & DrawData.ACTIVE) != 0) {
+			info.state = (state & DrawData.DISABLED) == 0 ? OS.kThemeStateActive : OS.kThemeStateUnavailable;
+		} else {
+			info.state = (state & DrawData.DISABLED) == 0 ? OS.kThemeStateInactive : OS.kThemeStateUnavailableInactive;
+		}
+	}
+	return info;
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	HIThemeButtonDrawInfo info = getInfo();
+	CGRect rect = new CGRect();
+	rect.x = bounds.x;
+	rect.y = bounds.y;
+	rect.width = bounds.width;
+	rect.height = bounds.height;
+	CGRect backRect = new CGRect();
+	OS.HIThemeGetButtonBackgroundBounds(rect, info, backRect);
+	rect.x += (rect.x - backRect.x);
+	rect.y += (rect.y - backRect.y);
+	int[] metric = new int[1];
+	OS.GetThemeMetric(OS.kThemeMetricDisclosureTriangleWidth, metric);
+	rect.width = metric[0];
+	OS.GetThemeMetric(OS.kThemeMetricDisclosureTriangleHeight, metric);
+	rect.height = metric[0];		 
+	OS.HIThemeDrawButton(rect, info, gc.handle, OS.kHIThemeOrientationNormal, null);
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	if (!bounds.contains(position)) return DrawData.WIDGET_NOWHERE;
+	int[] metric = new int[1];
+	OS.GetThemeMetric(OS.kThemeMetricDisclosureTriangleWidth, metric);
+	int width = metric[0];
+	OS.GetThemeMetric(OS.kThemeMetricDisclosureTriangleHeight, metric);
+	int height = metric[0];
+	if (new Rectangle(bounds.x, bounds.y, width, height).contains(position)) return DrawData.WIDGET_WHOLE;
+	return DrawData.WIDGET_NOWHERE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/GroupDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/GroupDrawData.java
new file mode 100644
index 0000000..085be5a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/GroupDrawData.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.carbon.OS;
+import org.eclipse.swt.internal.carbon.CGRect;
+import org.eclipse.swt.internal.carbon.HIThemeGroupBoxDrawInfo;
+
+public class GroupDrawData extends DrawData {
+	public int headerWidth;
+	public int headerHeight;
+	public Rectangle headerArea;
+	
+public GroupDrawData() {
+	state = new int[1];
+}
+
+HIThemeGroupBoxDrawInfo getInfo () {
+	int state = this.state[DrawData.WIDGET_WHOLE];
+	HIThemeGroupBoxDrawInfo info = new HIThemeGroupBoxDrawInfo();
+	info.version = 0;
+	info.kind = OS.kHIThemeGroupBoxKindPrimary;
+	if ((style & SWT.READ_ONLY) != 0) info.kind = OS.kThemePopupButton;
+	if ((state & DrawData.DISABLED) != 0) {
+		info.state = (state & DrawData.ACTIVE) != 0 ? OS.kThemeStateUnavailable : OS.kThemeStateUnavailableInactive;
+	} else {
+		if ((state & DrawData.PRESSED) != 0) {
+			info.state = OS.kThemeStatePressed;
+		} else {
+			info.state = (state & DrawData.ACTIVE) != 0 ? OS.kThemeStateActive : OS.kThemeStateInactive;
+		}
+	}
+	return info;
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	HIThemeGroupBoxDrawInfo info = getInfo();
+	int headerHeight = this.headerHeight + 1;
+	CGRect rect = new CGRect();
+	rect.x = bounds.x;
+	rect.y = bounds.y + headerHeight;
+	rect.width = bounds.width;
+	rect.height = bounds.height - headerHeight;
+	OS.HIThemeDrawGroupBox(rect, info, gc.handle, OS.kHIThemeOrientationNormal);
+	int[] metric = new int[1];
+	if (headerArea != null) {
+		OS.GetThemeMetric(OS.kThemeMetricLargeTabCapsWidth, metric);
+		int capsWidth = metric[0];
+		headerArea.x = bounds.x + capsWidth;
+		headerArea.y = bounds.y;
+		headerArea.width = bounds.width - capsWidth * 2;
+		headerArea.height = this.headerHeight;
+	}
+	if (clientArea != null) {
+		OS.GetThemeMetric(OS.kThemeMetricPrimaryGroupBoxContentInset, metric);
+		int inset = metric[0];
+		clientArea.x = bounds.x + inset;
+		clientArea.y = bounds.y + inset + headerHeight;
+		clientArea.width = bounds.width - (2 * inset);
+		clientArea.height = bounds.height - (2 * inset) - headerHeight;
+	}
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+   	return bounds.contains(position) ? DrawData.WIDGET_WHOLE : DrawData.WIDGET_NOWHERE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ProgressBarDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ProgressBarDrawData.java
new file mode 100644
index 0000000..5e0bf39
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ProgressBarDrawData.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.carbon.OS;
+import org.eclipse.swt.internal.carbon.HIThemeTrackDrawInfo;
+import org.eclipse.swt.internal.carbon.ProgressTrackInfo;
+
+public class ProgressBarDrawData extends RangeDrawData {
+
+public ProgressBarDrawData() {
+	state = new int[1];
+}
+
+HIThemeTrackDrawInfo getInfo() {
+	int state = this.state[DrawData.WIDGET_WHOLE];
+	HIThemeTrackDrawInfo info = new HIThemeTrackDrawInfo();
+	info.min = minimum;
+	info.max = maximum;
+	info.value = selection;	
+	info.kind = OS.kThemeProgressBarMedium;
+	info.attributes = OS.kThemeTrackShowThumb;
+	if ((style & SWT.HORIZONTAL) != 0) info.attributes |= OS.kThemeTrackHorizontal;
+	info.enableState = OS.kThemeTrackInactive;
+	if ((state & DrawData.ACTIVE) != 0) info.enableState = OS.kThemeTrackActive;
+	if ((state & DrawData.DISABLED) != 0) info.enableState = OS.kThemeTrackDisabled;
+	info.progress = new ProgressTrackInfo();
+	return info;
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	HIThemeTrackDrawInfo info = getInfo();
+	info.bounds_x = bounds.x;
+	info.bounds_y = bounds.y;
+	info.bounds_width = bounds.width;
+	info.bounds_height = bounds.height;
+	info.progress = new ProgressTrackInfo();
+	OS.HIThemeDrawTrack(info, null, gc.handle, OS.kHIThemeOrientationNormal);
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	return bounds.contains(position) ? DrawData.WIDGET_WHOLE : DrawData.WIDGET_NOWHERE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/RangeDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/RangeDrawData.java
new file mode 100644
index 0000000..51f7bca
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/RangeDrawData.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.graphics.*;
+
+public class RangeDrawData extends DrawData {
+	public int selection;
+	public int minimum;
+	public int maximum;
+
+int getSelection(Point position, Rectangle bounds) {
+	return 0;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ScaleDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ScaleDrawData.java
new file mode 100644
index 0000000..96b25c7
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ScaleDrawData.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.carbon.OS;
+import org.eclipse.swt.internal.carbon.CGPoint;
+import org.eclipse.swt.internal.carbon.HIThemeTrackDrawInfo;
+import org.eclipse.swt.internal.carbon.SliderTrackInfo;
+
+public class ScaleDrawData extends RangeDrawData {
+	public int increment;
+	public int pageIncrement;
+	
+public ScaleDrawData() {
+	state = new int[4];
+}
+
+HIThemeTrackDrawInfo getInfo() {
+	int upTrackState = this.state[DrawData.SCALE_UP_TRACK];
+	int downTrackState = this.state[DrawData.SCALE_DOWN_TRACK];
+	int thumbState = this.state[DrawData.SCALE_THUMB];
+	HIThemeTrackDrawInfo info = new HIThemeTrackDrawInfo();
+	info.min = minimum;
+	info.max = Math.max(minimum, maximum);
+	info.value = selection;	
+	info.kind = OS.kThemeSliderMedium;
+	info.attributes = OS.kThemeTrackShowThumb;
+	if ((style & SWT.HORIZONTAL) != 0) info.attributes |= OS.kThemeTrackHorizontal;
+	info.enableState = OS.kThemeTrackInactive;
+	if ((this.state[DrawData.WIDGET_WHOLE] & DrawData.ACTIVE) != 0) info.enableState = OS.kThemeTrackActive;
+	if ((this.state[DrawData.WIDGET_WHOLE] & DrawData.DISABLED) != 0) info.enableState = OS.kThemeTrackDisabled;
+	info.slider = new SliderTrackInfo();
+	int state = 0;
+	if ((upTrackState & DrawData.PRESSED) != 0) state |= OS.kThemeLeftInsideArrowPressed;
+	if ((downTrackState & DrawData.PRESSED) != 0) state |= OS.kThemeRightInsideArrowPressed;
+	if ((thumbState & DrawData.PRESSED) != 0) state |= OS.kThemeThumbPressed;
+	info.slider.pressState = (byte)state;
+	return info;
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	HIThemeTrackDrawInfo info = getInfo();
+	info.bounds_x = bounds.x;
+	info.bounds_y = bounds.y;
+	info.bounds_width = bounds.width;
+	info.bounds_height = bounds.height;
+	OS.HIThemeDrawTrack(info, null, gc.handle, OS.kHIThemeOrientationNormal);
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	if (!bounds.contains(position)) return DrawData.WIDGET_NOWHERE;
+	CGPoint pt = new CGPoint();
+	pt.x = position.x;
+	pt.y = position.y;
+	short[] part = new short[1];
+	HIThemeTrackDrawInfo info = getInfo();
+	if (OS.HIThemeHitTestTrack(info, pt, part)) {
+		switch (part[0]) {
+			case 22: return DrawData.SCALE_UP_TRACK;
+			case 23: return DrawData.SCALE_DOWN_TRACK;
+			case 129: return DrawData.SCALE_THUMB;
+		}
+	}
+	return DrawData.WIDGET_NOWHERE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ScrollBarDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ScrollBarDrawData.java
new file mode 100644
index 0000000..67448dd
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ScrollBarDrawData.java
@@ -0,0 +1,157 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.carbon.OS;
+import org.eclipse.swt.internal.carbon.CGPoint;
+import org.eclipse.swt.internal.carbon.CGRect;
+import org.eclipse.swt.internal.carbon.HIThemeTrackDrawInfo;
+import org.eclipse.swt.internal.carbon.ScrollBarTrackInfo;
+import org.eclipse.swt.internal.carbon.HIScrollBarTrackInfo;
+
+public class ScrollBarDrawData extends RangeDrawData {
+	public int thumb;
+	public int increment;
+	public int pageIncrement;
+	
+public ScrollBarDrawData() {
+	state = new int[6];
+}
+
+HIScrollBarTrackInfo getArrowsInfo() {
+	int upArrowState = this.state[DrawData.SCROLLBAR_UP_ARROW];
+	int downArrowState = this.state[DrawData.SCROLLBAR_DOWN_ARROW];
+	int upTrackState = this.state[DrawData.SCROLLBAR_UP_TRACK];
+	int downTrackState = this.state[DrawData.SCROLLBAR_DOWN_TRACK];
+	int thumbState = this.state[DrawData.SCROLLBAR_THUMB];
+	int state = 0;
+	if ((upArrowState & DrawData.PRESSED) != 0) state |= OS.kThemeLeftOutsideArrowPressed;
+	if ((downArrowState & DrawData.PRESSED) != 0) state |= OS.kThemeRightOutsideArrowPressed;
+	if ((upTrackState & DrawData.PRESSED) != 0) state |= OS.kThemeLeftInsideArrowPressed;
+	if ((downTrackState & DrawData.PRESSED) != 0) state |= OS.kThemeRightInsideArrowPressed;
+	if ((thumbState & DrawData.PRESSED) != 0) state |= OS.kThemeThumbPressed;
+	int enableState = OS.kThemeTrackInactive;
+	if ((this.state[DrawData.WIDGET_WHOLE] & DrawData.ACTIVE) != 0) enableState = OS.kThemeTrackActive;
+	if ((this.state[DrawData.WIDGET_WHOLE] & DrawData.DISABLED) != 0) enableState = OS.kThemeTrackDisabled;
+	HIScrollBarTrackInfo scrollInfo = new HIScrollBarTrackInfo();
+	scrollInfo.pressState = (byte)state;
+	scrollInfo.enableState = (byte)enableState;
+	scrollInfo.viewsize = thumb;
+	return scrollInfo;
+}
+
+HIThemeTrackDrawInfo getInfo() {
+	int upArrowState = this.state[DrawData.SCROLLBAR_UP_ARROW];
+	int downArrowState = this.state[DrawData.SCROLLBAR_DOWN_ARROW];
+	int upTrackState = this.state[DrawData.SCROLLBAR_UP_TRACK];
+	int downTrackState = this.state[DrawData.SCROLLBAR_DOWN_TRACK];
+	int thumbState = this.state[DrawData.SCROLLBAR_THUMB];
+	HIThemeTrackDrawInfo info = new HIThemeTrackDrawInfo();
+	info.min = minimum;
+	info.max = Math.max(minimum, maximum - thumb);
+	info.value = selection;	
+	info.kind = OS.kThemeScrollBarMedium;
+	info.attributes = OS.kThemeTrackShowThumb;
+	if ((style & SWT.HORIZONTAL) != 0) info.attributes |= OS.kThemeTrackHorizontal;
+	info.enableState = OS.kThemeTrackInactive;
+	if ((this.state[DrawData.WIDGET_WHOLE] & DrawData.ACTIVE) != 0) info.enableState = OS.kThemeTrackActive;
+	if ((this.state[DrawData.WIDGET_WHOLE] & DrawData.DISABLED) != 0) info.enableState = OS.kThemeTrackDisabled;
+	info.scrollbar = new ScrollBarTrackInfo();
+	int state = 0;
+	if ((upArrowState & DrawData.PRESSED) != 0) state |= OS.kThemeLeftOutsideArrowPressed;
+	if ((downArrowState & DrawData.PRESSED) != 0) state |= OS.kThemeRightOutsideArrowPressed;
+	if ((upTrackState & DrawData.PRESSED) != 0) state |= OS.kThemeLeftInsideArrowPressed;
+	if ((downTrackState & DrawData.PRESSED) != 0) state |= OS.kThemeRightInsideArrowPressed;
+	if ((thumbState & DrawData.PRESSED) != 0) state |= OS.kThemeThumbPressed;
+	info.scrollbar.pressState = (byte)state;
+	info.scrollbar.viewsize = thumb;
+	return info;
+}
+
+
+Rectangle getBounds(int part, Rectangle bounds) {
+	HIThemeTrackDrawInfo info = getInfo();
+	info.bounds_x = bounds.x;
+	info.bounds_y = bounds.y;
+	info.bounds_width = bounds.width;
+	info.bounds_height = bounds.height;
+	CGRect rect = new CGRect();
+	short partCode = 0;
+	switch (part) {
+		case DrawData.SCROLLBAR_UP_ARROW: partCode = 20; break;
+		case DrawData.SCROLLBAR_DOWN_ARROW: partCode = 21; break;
+		case DrawData.SCROLLBAR_UP_TRACK: partCode = 22; break;
+		case DrawData.SCROLLBAR_THUMB: partCode = 129; break;
+		case DrawData.SCROLLBAR_DOWN_TRACK: partCode = 23; break;
+	}
+	OS.HIThemeGetTrackPartBounds(info, partCode, rect);
+	return new Rectangle((int)rect.x, (int)rect.y, (int)rect.width, (int)rect.height);
+}
+
+int getSelection (Point position, Rectangle bounds) {
+	HIThemeTrackDrawInfo info = getInfo();
+	info.bounds_x = bounds.x;
+	info.bounds_y = bounds.y;
+	info.bounds_width = bounds.width;
+	info.bounds_height = bounds.height;
+	CGPoint pt = new CGPoint();
+	pt.x = position.x;
+	pt.y = position.y;
+	float[] relativePosition = new float[1];
+	OS.HIThemeGetTrackThumbPositionFromOffset(info, pt, relativePosition);
+	int[] selection = new int[1];
+	OS.HIThemeGetTrackLiveValue(info, relativePosition[0], selection);
+	return (int)selection[0];
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	HIThemeTrackDrawInfo info = getInfo();
+	info.bounds_x = bounds.x;
+	info.bounds_y = bounds.y;
+	info.bounds_width = bounds.width;
+	info.bounds_height = bounds.height;
+	OS.HIThemeDrawTrack(info, null, gc.handle, OS.kHIThemeOrientationNormal);
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	CGPoint pt = new CGPoint();
+	pt.x = position.x;
+	pt.y = position.y;
+	CGRect rect = new CGRect();
+	rect.x = bounds.x;
+	rect.y = bounds.y;
+	rect.width = bounds.width;
+	rect.height = bounds.height;
+	short[] part = new short[1];
+	HIScrollBarTrackInfo scrollInfo = getArrowsInfo();
+	OS.HIThemeHitTestScrollBarArrows(rect, scrollInfo, (style & SWT.HORIZONTAL) != 0, pt, null, part);
+	switch (part[0]) {
+		case 20: return DrawData.SCROLLBAR_UP_ARROW;
+		case 21: return DrawData.SCROLLBAR_DOWN_ARROW;
+	}
+	HIThemeTrackDrawInfo info = getInfo();
+	info.bounds_x = bounds.x;
+	info.bounds_y = bounds.y;
+	info.bounds_width = bounds.width;
+	info.bounds_height = bounds.height;
+	if (OS.HIThemeHitTestTrack(info, pt, part)) {
+		switch (part[0]) {
+		case 22: return DrawData.SCROLLBAR_UP_TRACK;
+		case 23: return DrawData.SCROLLBAR_DOWN_TRACK;
+		case 129: return DrawData.SCROLLBAR_THUMB;
+		}
+	}
+	return DrawData.WIDGET_NOWHERE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/TabFolderDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/TabFolderDrawData.java
new file mode 100644
index 0000000..6bf5ea0
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/TabFolderDrawData.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.carbon.OS;
+import org.eclipse.swt.internal.carbon.HIThemeTabPaneDrawInfo;
+import org.eclipse.swt.internal.carbon.CGRect;
+
+public class TabFolderDrawData extends DrawData {
+	public int tabsWidth;
+	public int tabsHeight;
+	public Rectangle tabsArea;
+	public int selectedX;
+	public int selectedWidth;
+	public int spacing;
+	
+public TabFolderDrawData() {
+	state = new int[1];
+	if (SWT.getPlatform().equals("gtk")) {
+		spacing = -2;
+	}
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {	
+	int[] metric = new int[1];
+	OS.GetThemeMetric(OS.kThemeMetricLargeTabHeight, metric);
+	int tabHeight = metric[0];
+	OS.GetThemeMetric(OS.kThemeMetricLargeTabCapsWidth, metric);
+	int capsWidth = metric[0];
+	CGRect rect = new CGRect();
+	rect.x = bounds.x;
+	rect.y = bounds.y;
+	rect.width = bounds.width;
+	rect.height = bounds.height;
+	if ((style & SWT.BOTTOM) != 0) {
+		rect.height -= tabHeight / 2;
+	} else {		
+		rect.y += (capsWidth + tabHeight) / 2;
+		rect.height  -= (capsWidth + tabHeight) / 2;
+	}
+	HIThemeTabPaneDrawInfo info = getInfo();
+	OS.HIThemeDrawTabPane(rect, info, gc.handle, OS.kHIThemeOrientationNormal);
+	if (tabsArea != null) {
+		tabsArea.x = bounds.x + capsWidth + ((bounds.width - capsWidth * 2) - tabsWidth) / 2;
+		tabsArea.y = bounds.y;
+		tabsArea.width = bounds.width - capsWidth * 2;
+		tabsArea.height = tabHeight;
+		if ((style & SWT.BOTTOM) != 0) {
+			tabsArea.y += bounds.height - tabHeight;
+		} else {
+			tabsArea.y += capsWidth / 2;
+		}
+	}
+}
+
+HIThemeTabPaneDrawInfo getInfo() {
+	int state = this.state[DrawData.WIDGET_WHOLE];
+	HIThemeTabPaneDrawInfo info = new HIThemeTabPaneDrawInfo();
+	info.version = 1;
+	info.direction = OS.kThemeTabNorth;
+	if ((style & SWT.BOTTOM) != 0) info.direction = OS.kThemeTabSouth;
+	if ((style & SWT.TOP) != 0) info.direction = OS.kThemeTabNorth;
+	if ((state & DrawData.PRESSED) != 0) {
+		info.state = OS.kThemeStatePressed;
+	} else {
+		if ((state & DrawData.ACTIVE) != 0) {
+			info.state = (state & DrawData.DISABLED) == 0 ? OS.kThemeStateActive : OS.kThemeStateUnavailable;
+		} else {
+			info.state = (state & DrawData.DISABLED) == 0 ? OS.kThemeStateInactive : OS.kThemeStateUnavailableInactive;
+		}
+	}
+	return info;
+}
+
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	if (!bounds.contains(position)) return DrawData.WIDGET_NOWHERE;
+	return DrawData.WIDGET_WHOLE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/TabItemDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/TabItemDrawData.java
new file mode 100644
index 0000000..9cf2109
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/TabItemDrawData.java
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.carbon.OS;
+import org.eclipse.swt.internal.carbon.HIThemeTabDrawInfo;
+import org.eclipse.swt.internal.carbon.CGRect;
+
+public class TabItemDrawData extends DrawData {
+
+	public TabFolderDrawData parent;
+	public int position;
+	
+public TabItemDrawData() {
+	state = new int[1];
+}
+
+Rectangle computeTrim(Theme theme, GC gc) {
+	int[] metric = new int[1];
+	OS.GetThemeMetric(OS.kThemeMetricLargeTabCapsWidth, metric);
+	int x = clientArea.x - metric[0];
+	int y = clientArea.y - metric[0];
+	int width = clientArea.width + metric[0] * 2;
+	int height = clientArea.height + metric[0] * 2;
+	return new Rectangle(x, y, width, height);
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	CGRect rect = new CGRect();
+	rect.x = bounds.x;
+	rect.y = bounds.y;
+	rect.width = bounds.width;
+	rect.height = bounds.height;
+	CGRect labelRect = clientArea != null ? new CGRect() : null;
+	HIThemeTabDrawInfo info = getInfo();
+	OS.HIThemeDrawTab(rect, info, gc.handle, OS.kHIThemeOrientationNormal, labelRect);
+	if (clientArea != null) {
+		clientArea.x = (int)labelRect.x;
+		clientArea.y = (int)labelRect.y;
+		clientArea.width = (int)labelRect.width;
+		clientArea.height = (int)labelRect.height;
+	}
+}
+
+HIThemeTabDrawInfo getInfo() {
+	int state = this.state[DrawData.WIDGET_WHOLE];
+	HIThemeTabDrawInfo info = new HIThemeTabDrawInfo();
+	info.version = 1;
+	if ((state & DrawData.DISABLED) == 0) {
+		if ((state & DrawData.ACTIVE) != 0) {
+			if ((state & DrawData.SELECTED) != 0) {
+				info.style = OS.kThemeTabFront;
+			} else {
+				if ((state & DrawData.PRESSED) != 0) {
+					info.style = OS.kThemeTabNonFrontPressed;
+				} else {
+					info.style = OS.kThemeTabNonFront;					
+				}
+			}
+		} else {
+			if ((state & DrawData.SELECTED) != 0) {
+				info.style = OS.kThemeTabFrontInactive;				
+			} else {
+				info.style = OS.kThemeTabNonFrontInactive;	
+			}
+		}
+	} else {
+		if ((state & DrawData.ACTIVE) != 0) {
+			info.style = OS.kThemeTabFrontUnavailable;
+		} else {
+			info.style = OS.kThemeTabNonFrontUnavailable;				
+		}
+	}
+	info.direction = OS.kThemeTabNorth;
+	if ((parent.style & SWT.BOTTOM) != 0) info.direction = OS.kThemeTabSouth;
+	if ((parent.style & SWT.TOP) != 0) info.direction = OS.kThemeTabNorth;
+	info.size = 0;
+	if ((state & DrawData.FOCUSED) != 0) info.adornment = OS.kHIThemeTabAdornmentFocus;
+	info.adornment |= OS.kHIThemeTabAdornmentTrailingSeparator;
+	info.position = OS.kHIThemeTabPositionMiddle;	
+	if ((position & SWT.RIGHT) != 0 && (position & SWT.LEFT) != 0) {
+		info.position = OS.kHIThemeTabPositionOnly;
+	} else if ((position & SWT.LEFT) != 0) {
+		info.position = OS.kHIThemeTabPositionFirst;
+		info.adornment |= OS.kHIThemeTabAdornmentTrailingSeparator;
+	} else if ((position & SWT.RIGHT) != 0) {
+		info.position = OS.kHIThemeTabPositionLast;
+	}
+	return info;
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	if (!bounds.contains(position)) return DrawData.WIDGET_NOWHERE;
+	return DrawData.WIDGET_WHOLE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/Theme.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/Theme.java
new file mode 100644
index 0000000..c1de3c6
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/Theme.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+public class Theme {
+	
+	Device device;
+	
+public Theme(Device device) {
+	if (device == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	this.device = device;
+}
+
+void checkTheme() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+}
+
+public Rectangle computeTrim(GC gc, DrawData data) {
+	checkTheme();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	return data.computeTrim(this, gc);
+}
+
+public void dispose () {
+	device = null;
+}
+
+public void drawBackground(GC gc, Rectangle bounds, DrawData data) {
+	checkTheme();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	data.draw(this, gc, bounds);
+}
+
+public void drawFocus(GC gc, Rectangle bounds, DrawData data) {
+	checkTheme();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	gc.drawFocus(bounds.x, bounds.y, bounds.width, bounds.height);
+}
+
+public void drawImage(GC gc, Rectangle bounds, DrawData data, Image image, int flags) {
+	checkTheme();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (image == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	data.drawImage(this, image, gc, bounds);
+}
+
+public void drawText(GC gc, Rectangle bounds, DrawData data, String text, int flags) {
+	checkTheme();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (text == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	data.drawText(this, text, flags, gc, bounds);
+}
+
+public Rectangle getBounds(int part, Rectangle bounds, DrawData data) {
+	checkTheme();
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	return data.getBounds(part, bounds);
+}
+
+public int getSelection(Point offset, Rectangle bounds, RangeDrawData data) {
+	checkTheme();
+	if (offset == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	return data.getSelection(offset, bounds);
+}
+
+public int hitBackground(Point position, Rectangle bounds, DrawData data) {
+	checkTheme();
+	if (position == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	return data.hit(this, position, bounds);
+}
+
+public boolean isDisposed() {
+	return device == null;
+}
+
+public Rectangle measureText(GC gc, Rectangle bounds, DrawData data, String text, int flags) {
+	checkTheme();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (text == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	return data.measureText(this, text, flags, gc, bounds);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ToolBarDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ToolBarDrawData.java
new file mode 100644
index 0000000..c0e123e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ToolBarDrawData.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.graphics.*;
+
+public class ToolBarDrawData extends DrawData {
+	
+public ToolBarDrawData() {
+	state = new int[1];
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	if (!bounds.contains(position)) return DrawData.WIDGET_NOWHERE;
+	return DrawData.WIDGET_WHOLE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ToolItemDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ToolItemDrawData.java
new file mode 100644
index 0000000..1bd99d8
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/carbon/org/eclipse/swt/internal/theme/ToolItemDrawData.java
@@ -0,0 +1,120 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.carbon.OS;
+import org.eclipse.swt.internal.carbon.CGRect;
+import org.eclipse.swt.internal.carbon.HIThemeSeparatorDrawInfo;
+import org.eclipse.swt.internal.carbon.HIThemePopupArrowDrawInfo;
+
+public class ToolItemDrawData extends DrawData {
+
+	public ToolBarDrawData parent;
+	
+	static final int ARROW_WIDTH = 9;
+	static final int INSET = 3;
+
+public ToolItemDrawData() {
+	state = new int[2];
+}
+
+Rectangle computeTrim(Theme theme, GC gc) {
+	int x = clientArea.x - INSET;
+	int y = clientArea.y - INSET;
+	int width = clientArea.width + INSET * 2;
+	int height = clientArea.height + INSET * 2;
+	if ((style & SWT.DROP_DOWN) != 0) {
+		width += ARROW_WIDTH;
+	}
+	return new Rectangle(x, y, width, height);
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	CGRect rect = new CGRect();
+	rect.x = bounds.x;
+	rect.y = bounds.y;
+	rect.width = bounds.width;
+	rect.height = bounds.height;
+	if ((style & SWT.SEPARATOR) != 0) {
+		HIThemeSeparatorDrawInfo info = getSeparatorInfo();
+		OS.HIThemeDrawSeparator (rect, info, gc.handle, OS.kHIThemeOrientationNormal);
+	} else {
+		if ((state[DrawData.WIDGET_WHOLE] & DrawData.SELECTED) != 0) {
+			OS.CGContextSaveGState (gc.handle);
+			OS.CGContextSetFillColor (gc.handle, new float[]{0.025f, 0.025f, 0.025f, 0.025f});
+			OS.CGContextFillRect (gc.handle, rect);
+			OS.CGContextSetStrokeColor (gc.handle, new float[]{0.2f, 0.2f, 0.2f, 0.2f});
+			rect.x += 0.5f;
+			rect.y += 0.5f;
+			rect.width -= 1;
+			rect.height -= 1;
+			OS.CGContextStrokeRect (gc.handle, rect);
+			OS.CGContextRestoreGState (gc.handle);
+		}
+	}
+	if (clientArea != null) {
+		clientArea.x = bounds.x;
+		clientArea.y = bounds.y;
+		clientArea.width = bounds.width;
+		clientArea.height = bounds.height;
+	}
+	if ((style & SWT.DROP_DOWN) != 0) {
+		rect.y = bounds.y + rect.height / 2 - 1;
+		rect.x = bounds.x + rect.width - ARROW_WIDTH;
+		HIThemePopupArrowDrawInfo info = getArrowInfo();
+		OS.HIThemeDrawPopupArrow (rect, info, gc.handle, OS.kHIThemeOrientationNormal);
+		if (clientArea != null) {
+			clientArea.width -= ARROW_WIDTH;
+		}
+	}
+}
+
+HIThemePopupArrowDrawInfo getArrowInfo() {
+	HIThemePopupArrowDrawInfo info = new HIThemePopupArrowDrawInfo();
+	int state = this.state[DrawData.TOOLITEM_ARROW];
+	if ((state & DrawData.PRESSED) != 0) {
+		info.state = OS.kThemeStatePressed;
+	} else {
+		if ((state & DrawData.ACTIVE) != 0) {
+			info.state = (state & DrawData.DISABLED) == 0 ? OS.kThemeStateActive : OS.kThemeStateUnavailable;
+		} else {
+			info.state = (state & DrawData.DISABLED) == 0 ? OS.kThemeStateInactive : OS.kThemeStateUnavailableInactive;
+		}
+	}
+	info.orientation = (short) OS.kThemeArrowDown;
+	info.size = (short) OS.kThemeArrow5pt;
+	return info;
+}
+
+HIThemeSeparatorDrawInfo getSeparatorInfo() {
+	HIThemeSeparatorDrawInfo info = new HIThemeSeparatorDrawInfo();
+	int state = this.state[DrawData.WIDGET_WHOLE];
+	if ((state & DrawData.ACTIVE) != 0) {
+		info.state = (state & DrawData.DISABLED) == 0 ? OS.kThemeStateActive : OS.kThemeStateUnavailable;
+	} else {
+		info.state = (state & DrawData.DISABLED) == 0 ? OS.kThemeStateInactive : OS.kThemeStateUnavailableInactive;
+	}
+	return info;
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	if (!bounds.contains(position)) return DrawData.WIDGET_NOWHERE;
+	if ((style & SWT.DROP_DOWN) != 0) {
+		if (bounds.x + bounds.width - ARROW_WIDTH <= position.x) {
+			return DrawData.TOOLITEM_ARROW; 
+		}
+	}
+	return DrawData.WIDGET_WHOLE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ButtonDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ButtonDrawData.java
new file mode 100644
index 0000000..968f510
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ButtonDrawData.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+public class ButtonDrawData extends DrawData {
+	
+public ButtonDrawData() {
+	state = new int[1];
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ComboDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ComboDrawData.java
new file mode 100644
index 0000000..f3f9a76
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ComboDrawData.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+public class ComboDrawData extends DrawData {
+
+public ComboDrawData() {
+	state = new int[2];
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/DrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/DrawData.java
new file mode 100644
index 0000000..883d821
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/DrawData.java
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.graphics.*;
+
+public class DrawData {
+	public int style;
+	public int[] state;
+	public Rectangle clientArea;
+
+	/** Part states */
+	public static final int SELECTED = 1 << 1;
+	public static final int FOCUSED = 1 << 2;
+	public static final int PRESSED = 1 << 3;
+	public static final int ACTIVE = 1 << 4;
+	public static final int DISABLED = 1 << 5;
+	public static final int HOT = 1 << 6;
+	public static final int DEFAULTED = 1 << 7;
+	public static final int GRAYED = 1 << 8;
+	
+	/** Text and Image drawing flags */
+	public static final int DRAW_LEFT = 1 << 4;
+	public static final int DRAW_TOP = 1 << 5;
+	public static final int DRAW_RIGHT = 1 << 6;
+	public static final int DRAW_BOTTOM = 1 << 7;
+	public static final int DRAW_HCENTER = 1 << 8;
+	public static final int DRAW_VCENTER = 1 << 9;
+
+	/** Widget parts */
+	public static final int WIDGET_NOWHERE = -1;
+	public static final int WIDGET_WHOLE = 0;
+
+	/** Scrollbar parts */
+	public static final int SCROLLBAR_UP_ARROW = 1;
+	public static final int SCROLLBAR_DOWN_ARROW = 2;
+	public static final int SCROLLBAR_LEFT_ARROW = SCROLLBAR_UP_ARROW;
+	public static final int SCROLLBAR_RIGHT_ARROW = SCROLLBAR_DOWN_ARROW;
+	public static final int SCROLLBAR_UP_TRACK = 3;
+	public static final int SCROLLBAR_DOWN_TRACK = 4;
+	public static final int SCROLLBAR_LEFT_TRACK = SCROLLBAR_UP_TRACK;
+	public static final int SCROLLBAR_RIGHT_TRACK = SCROLLBAR_DOWN_TRACK;
+	public static final int SCROLLBAR_THUMB = 5;
+	
+	/** Scale parts */
+	public static final int SCALE_UP_TRACK = 1;
+	public static final int SCALE_LEFT_TRACK = SCALE_UP_TRACK;
+	public static final int SCALE_DOWN_TRACK = 2;
+	public static final int SCALE_RIGHT_TRACK = SCALE_DOWN_TRACK;
+	public static final int SCALE_THUMB = 3;
+	
+	/** ToolItem parts */
+	public static final int TOOLITEM_ARROW = 1;
+	
+	/** Combo parts */
+	public static final int COMBO_ARROW = 1;
+	
+
+public DrawData() {
+	state = new int[1];
+}
+
+Rectangle computeTrim(Theme theme, GC gc) {
+	return new Rectangle(clientArea.x, clientArea.y, clientArea.width, clientArea.height);
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {	
+}
+
+void drawImage(Theme theme, Image image, GC gc, Rectangle bounds) {
+}
+
+void drawText(Theme theme, String text, int flags, GC gc, Rectangle bounds) {
+}
+
+Rectangle getBounds(int part, Rectangle bounds) {
+	return new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height);
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	return bounds.contains(position) ? DrawData.WIDGET_WHOLE : DrawData.WIDGET_NOWHERE;
+}
+
+Rectangle measureText(Theme theme, String text, int flags, GC gc, Rectangle bounds) {
+	return new Rectangle(0, 0, 0, 0);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ExpanderDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ExpanderDrawData.java
new file mode 100644
index 0000000..c006b4e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ExpanderDrawData.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+public class ExpanderDrawData extends DrawData {
+	
+public ExpanderDrawData() {
+	state = new int[1];
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/GroupDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/GroupDrawData.java
new file mode 100644
index 0000000..8c57057
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/GroupDrawData.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.graphics.*;
+
+public class GroupDrawData extends DrawData {
+	public int headerWidth;
+	public int headerHeight;
+	public Rectangle headerArea;
+	
+public GroupDrawData() {
+	state = new int[1];
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ProgressBarDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ProgressBarDrawData.java
new file mode 100644
index 0000000..c12ca60
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ProgressBarDrawData.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+public class ProgressBarDrawData extends RangeDrawData {
+
+public ProgressBarDrawData() {
+	state = new int[1];
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/RangeDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/RangeDrawData.java
new file mode 100644
index 0000000..501611e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/RangeDrawData.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.graphics.*;
+
+public class RangeDrawData extends DrawData {
+	public int selection;
+	public int minimum;
+	public int maximum;
+
+int getSelection(Point position, Rectangle bounds) {
+	return 0;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ScaleDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ScaleDrawData.java
new file mode 100644
index 0000000..9ead055
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ScaleDrawData.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+public class ScaleDrawData extends RangeDrawData {
+	public int increment;
+	public int pageIncrement;
+	
+public ScaleDrawData() {
+	state = new int[4];
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ScrollBarDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ScrollBarDrawData.java
new file mode 100644
index 0000000..1f18960
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ScrollBarDrawData.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+public class ScrollBarDrawData extends RangeDrawData {
+	public int thumb;
+	public int increment;
+	public int pageIncrement;
+	
+public ScrollBarDrawData() {
+	state = new int[6];
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/TabFolderDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/TabFolderDrawData.java
new file mode 100644
index 0000000..e992e51
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/TabFolderDrawData.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+public class TabFolderDrawData extends DrawData {
+	public int tabsWidth;
+	public int tabsHeight;
+	public Rectangle tabsArea;
+	public int selectedX;
+	public int selectedWidth;
+	public int spacing;
+	
+public TabFolderDrawData() {
+	state = new int[1];
+	if (SWT.getPlatform().equals("gtk")) {
+		spacing = -2;
+	}
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/TabItemDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/TabItemDrawData.java
new file mode 100644
index 0000000..af1549a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/TabItemDrawData.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+
+public class TabItemDrawData extends DrawData {
+	
+	public TabFolderDrawData parent;
+	public int position;
+
+public TabItemDrawData() {
+	state = new int[1];
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/Theme.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/Theme.java
new file mode 100644
index 0000000..143c2b2
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/Theme.java
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+public class Theme {
+	Device device;
+	
+public Theme(Device device) {
+	this.device = device;
+}
+
+void checkTheme() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+}
+
+public Rectangle computeTrim(GC gc, DrawData data) {
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	return data.computeTrim(this, gc);
+}
+
+public void dispose () {
+	device = null;
+}
+	
+public void drawBackground(GC gc, Rectangle bounds, DrawData data) {
+	checkTheme();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	data.draw(this, gc, bounds);
+}
+
+public void drawFocus(GC gc, Rectangle bounds, DrawData data) {
+	checkTheme();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	gc.drawFocus(bounds.x, bounds.y, bounds.width, bounds.height);
+}
+
+public void drawImage(GC gc, Rectangle bounds, DrawData data, Image image, int flags) {
+	checkTheme();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (image == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	data.drawImage(this, image, gc, bounds);
+}
+
+public void drawText(GC gc, Rectangle bounds, DrawData data, String text, int flags) {
+	checkTheme();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (text == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	data.drawText(this, text, flags, gc, bounds);
+}
+
+public Rectangle getBounds(int part, Rectangle bounds, DrawData data) {
+	checkTheme();
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	return data.getBounds(part, bounds);
+}
+
+public int getSelection(Point offset, Rectangle bounds, RangeDrawData data) {
+	checkTheme();
+	if (offset == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	return data.getSelection(offset, bounds);
+}
+
+public int hitBackground(Point position, Rectangle bounds, DrawData data) {
+	checkTheme();
+	if (position == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	return data.hit(this, position, bounds);
+}
+
+public boolean isDisposed() {
+	return device == null;
+}
+
+public Rectangle measureText(GC gc, Rectangle bounds, DrawData data, String text, int flags) {
+	checkTheme();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (text == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	return data.measureText(this, text, flags, gc, bounds);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ToolBarDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ToolBarDrawData.java
new file mode 100644
index 0000000..527fa9f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ToolBarDrawData.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+public class ToolBarDrawData extends DrawData {
+	
+public ToolBarDrawData() {
+	state = new int[1];
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ToolItemDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ToolItemDrawData.java
new file mode 100644
index 0000000..305dfb9
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/emulated/org/eclipse/swt/internal/theme/ToolItemDrawData.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+public class ToolItemDrawData extends DrawData {
+
+	public ToolBarDrawData parent;
+
+public ToolItemDrawData() {
+	state = new int[2];
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ButtonDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ButtonDrawData.java
new file mode 100644
index 0000000..a170c1f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ButtonDrawData.java
@@ -0,0 +1,220 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.gtk.*;
+
+public class ButtonDrawData extends DrawData {
+	
+public ButtonDrawData() {
+	state = new int[1];
+}
+
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	int state = this.state[DrawData.WIDGET_WHOLE];
+
+	int /*long*/ drawable = gc.getGCData().drawable;
+	if ((style & SWT.RADIO) != 0) {
+		int /*long*/ radioButtonHandle = theme.radioButtonHandle;
+		int /*long*/ gtkStyle = OS.gtk_widget_get_style (radioButtonHandle);
+		theme.transferClipping (gc, gtkStyle);
+		int indicator_size = theme.getWidgetProperty(radioButtonHandle, "indicator-size");
+		int indicator_spacing = theme.getWidgetProperty(radioButtonHandle, "indicator-spacing");
+		int interior_focus = theme.getWidgetProperty(radioButtonHandle, "interior-focus");
+		int focus_line_width = theme.getWidgetProperty(radioButtonHandle, "focus-line-width");
+		int focus_padding = theme.getWidgetProperty(radioButtonHandle, "focus-padding");
+		int border_width = OS.gtk_container_get_border_width(radioButtonHandle);
+		
+		int x = bounds.x + indicator_spacing + border_width;
+		int y = bounds.y + (bounds.height - indicator_size) / 2;
+		
+		if (interior_focus == 0) {
+			x += focus_line_width + focus_padding;
+		}
+		
+		int shadow_type;
+		if ((state & DrawData.GRAYED) != 0) {
+			shadow_type = OS.GTK_SHADOW_ETCHED_IN;
+		} else if ((state & DrawData.SELECTED) != 0) {
+			shadow_type = OS.GTK_SHADOW_IN;
+		} else {
+			shadow_type = OS.GTK_SHADOW_OUT;
+		}
+		
+		byte[] detail = Converter.wcsToMbcs(null, "radiobutton", true);
+		if ((state & DrawData.HOT) != 0) {
+			int prelight_x, prelight_y, prelight_width, prelight_height;
+			prelight_x = bounds.x + border_width;
+			prelight_y = bounds.y + border_width;
+			prelight_width = bounds.width - (2 * border_width);
+			prelight_height = bounds.height - (2 * border_width);
+			OS.gtk_paint_flat_box(gtkStyle, drawable, OS.GTK_STATE_PRELIGHT, OS.GTK_SHADOW_ETCHED_OUT, null, radioButtonHandle, detail, prelight_x, prelight_y, prelight_width, prelight_height);
+		}
+		int state_type = getStateType(DrawData.WIDGET_WHOLE);
+		OS.gtk_paint_option(gtkStyle, drawable, state_type, shadow_type, null, radioButtonHandle, detail, x, y, indicator_size, indicator_size);
+		if (clientArea != null) {
+			clientArea.x = bounds.x + 2 * indicator_spacing + border_width + indicator_size;
+			clientArea.y = bounds.y + border_width;
+			clientArea.width = bounds.width - (2 * indicator_spacing + 2 * border_width + indicator_size);
+			clientArea.height = bounds.height - 2 * border_width;
+		}
+		return;
+	}
+	
+	if ((style & SWT.CHECK) != 0) {
+		int /*long*/ checkButtonHandle = theme.checkButtonHandle;
+		int /*long*/ gtkStyle = OS.gtk_widget_get_style (checkButtonHandle);
+		theme.transferClipping (gc, gtkStyle);
+		int indicator_size = theme.getWidgetProperty(checkButtonHandle, "indicator-size");
+		int indicator_spacing = theme.getWidgetProperty(checkButtonHandle, "indicator-spacing");
+		int interior_focus = theme.getWidgetProperty(checkButtonHandle, "interior-focus");
+		int focus_line_width = theme.getWidgetProperty(checkButtonHandle, "focus-line-width");
+		int focus_padding = theme.getWidgetProperty(checkButtonHandle, "focus-padding");
+		int border_width = OS.gtk_container_get_border_width(checkButtonHandle);
+		
+		int x = bounds.x + indicator_spacing + border_width;
+		int y = bounds.y + (bounds.height - indicator_size) / 2;
+		
+		if (interior_focus == 0) {
+			x += focus_line_width + focus_padding;
+		}
+		
+		int shadow_type;
+		if ((state & DrawData.GRAYED) != 0) {
+			shadow_type = OS.GTK_SHADOW_ETCHED_IN;
+		} else if ((state & DrawData.SELECTED) != 0) {
+			shadow_type = OS.GTK_SHADOW_IN;
+		} else {
+			shadow_type = OS.GTK_SHADOW_OUT;
+		}
+		
+		byte[] detail = Converter.wcsToMbcs(null, "checkbutton", true);
+		if ((state & DrawData.HOT) != 0) {
+			int prelight_x, prelight_y, prelight_width, prelight_height;
+			prelight_x = bounds.x + border_width;
+			prelight_y = bounds.y + border_width;
+			prelight_width = bounds.width - (2 * border_width);
+			prelight_height = bounds.height - (2 * border_width);
+			OS.gtk_paint_flat_box(gtkStyle, drawable, OS.GTK_STATE_PRELIGHT, OS.GTK_SHADOW_ETCHED_OUT, null, checkButtonHandle, detail, prelight_x, prelight_y, prelight_width, prelight_height);
+		}
+		int state_type = getStateType(DrawData.WIDGET_WHOLE);
+		OS.gtk_paint_check(gtkStyle, drawable, state_type, shadow_type, null, checkButtonHandle, detail, x, y, indicator_size, indicator_size);
+		if (clientArea != null) {
+			clientArea.x = bounds.x + 2 * indicator_spacing + border_width + indicator_size;
+			clientArea.y = bounds.y + border_width;
+			clientArea.width = bounds.width - (2 * indicator_spacing + 2 * border_width + indicator_size);
+			clientArea.height = bounds.height - 2 * border_width;
+		}
+		return;
+	}
+	
+
+	if ((style & SWT.PUSH) != 0) {
+		int /*long*/ buttonHandle = theme.buttonHandle;
+		int /*long*/ gtkStyle = OS.gtk_widget_get_style (buttonHandle);
+		theme.transferClipping (gc, gtkStyle);		
+		int focus_line_width = theme.getWidgetProperty(buttonHandle, "focus-line-width");
+		int focus_padding = theme.getWidgetProperty(buttonHandle, "focus-padding");
+		int border_width = OS.gtk_container_get_border_width(buttonHandle);
+		
+		GtkBorder default_border = new GtkBorder();
+		int default_border_ptr = theme.getWidgetProperty(buttonHandle, "default-border");
+		if (default_border_ptr != 0) {
+			OS.memmove(default_border, default_border_ptr, GdkRectangle.sizeof);
+		} else {
+			default_border.left = default_border.right = default_border.top = default_border.bottom = 1;
+		}
+
+		GtkBorder default_outside_border = new GtkBorder();
+		int default_outside_border_ptr = theme.getWidgetProperty(buttonHandle, "default-outside-border");
+		if (default_outside_border_ptr != 0) {
+			OS.memmove(default_outside_border, default_outside_border_ptr, GdkRectangle.sizeof);
+		} else {
+			default_outside_border.left = default_outside_border.right = default_outside_border.top = default_outside_border.bottom = 0;
+		}
+		
+		int x = bounds.x + border_width;
+		int y = bounds.y + border_width;
+		int width = bounds.width - border_width * 2;
+		int height = bounds.height - border_width * 2;
+
+		int relief = OS.gtk_button_get_relief(buttonHandle);
+		byte[] detail = Converter.wcsToMbcs(null, (state & DrawData.DEFAULTED) != 0 ? "buttondefault" : "button", true);
+		if ((state & DrawData.DEFAULTED) != 0 && relief == OS.GTK_RELIEF_NORMAL) {
+            OS.gtk_paint_box(gtkStyle, drawable, OS.GTK_STATE_NORMAL, OS.GTK_SHADOW_IN, null, buttonHandle, detail, x, y, width, height);
+            x += default_border.left;
+            y += default_border.top;
+            width -= default_border.left + default_border.right;
+            height -= default_border.top + default_border.bottom;
+		} else if ((state & DrawData.DEFAULTED) != 0) {
+			x += default_outside_border.left;
+			y += default_outside_border.top;
+			width -= default_outside_border.left + default_outside_border.right;
+			height -= default_outside_border.top + default_outside_border.bottom;
+        }
+
+		int shadow_type = OS.GTK_SHADOW_OUT;
+		if ((state & (DrawData.SELECTED | DrawData.PRESSED)) != 0) shadow_type = OS.GTK_SHADOW_IN;
+		int state_type = getStateType(DrawData.WIDGET_WHOLE);
+
+		if (relief != OS.GTK_RELIEF_NONE || ((state & (DrawData.PRESSED | DrawData.HOT)) != 0)) {
+			OS.gtk_paint_box(gtkStyle, drawable, state_type, shadow_type, null, buttonHandle, detail, x, y, width, height);
+		}
+		
+	    if ((state & DrawData.FOCUSED) != 0) {
+	    	int child_displacement_y = theme.getWidgetProperty(buttonHandle, "child-displacement-y");
+	    	int child_displacement_x = theme.getWidgetProperty(buttonHandle, "child-displacement-x");
+	    	int displace_focus = 0;
+	    	if (OS.GTK_VERSION >= OS.VERSION (2, 6, 0)) {
+	    		displace_focus = theme.getWidgetProperty(buttonHandle, "displace-focus");		    	
+	    	}
+	    	int interior_focus = theme.getWidgetProperty(buttonHandle, "interior-focus");
+	    	
+	    	if (interior_focus != 0) {
+	    		int xthickness = OS.gtk_style_get_xthickness(gtkStyle);
+	    		int ythickness = OS.gtk_style_get_ythickness(gtkStyle);
+	    		x += xthickness + focus_padding;
+	            y += ythickness + focus_padding;
+	            width -= 2 * (xthickness + focus_padding);
+	            height -=  2 * (ythickness + focus_padding);
+	    	} else {
+	    		x -= focus_line_width + focus_padding;
+	    		y -= focus_line_width + focus_padding;
+	    		width += 2 * (focus_line_width + focus_padding);
+	    		height += 2 * (focus_line_width + focus_padding);
+	    	}
+	    	
+	    	if ((state & DrawData.PRESSED) != 0 && displace_focus != 0) {
+	              x += child_displacement_x;
+	              y += child_displacement_y;
+	    	}
+	    	
+	        OS.gtk_paint_focus(gtkStyle, drawable, state_type, null, buttonHandle, detail, x, y, width, height);
+	    }
+		if (clientArea != null) {
+			clientArea.x = bounds.x + border_width;
+			clientArea.y = bounds.y + border_width;
+			clientArea.width = bounds.width - 2 * border_width;
+			clientArea.height = bounds.height - 2 * border_width;
+		}
+	    return;
+	}
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	return bounds.contains(position) ? DrawData.WIDGET_WHOLE : DrawData.WIDGET_NOWHERE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ComboDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ComboDrawData.java
new file mode 100644
index 0000000..3bab8a1
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ComboDrawData.java
@@ -0,0 +1,124 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.gtk.*;
+
+public class ComboDrawData extends DrawData {
+
+	static final int ARROW_HEIGHT = 6;
+	static final int MIN_ARROW_SIZE = 15;
+
+public ComboDrawData() {
+	state = new int[2];
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	int /*long*/ buttonHandle = theme.buttonHandle;
+	int /*long*/ gtkStyle = OS.gtk_widget_get_style(buttonHandle);
+	int /*long*/ drawable = gc.getGCData().drawable;
+	theme.transferClipping(gc, gtkStyle);
+	
+	int x = bounds.x;
+	int y = bounds.y ;
+	int width = bounds.width;
+	int height = bounds.height;
+
+	int shadow_type = OS.GTK_SHADOW_OUT;
+	if ((state[DrawData.COMBO_ARROW] & DrawData.PRESSED) != 0) shadow_type = OS.GTK_SHADOW_IN;
+	int state_type = getStateType(DrawData.COMBO_ARROW);
+	
+	int relief = OS.gtk_button_get_relief(buttonHandle);
+	int interior_focus = theme.getWidgetProperty(buttonHandle, "interior-focus");
+	int focus_line_width = theme.getWidgetProperty(buttonHandle, "focus-line-width");
+	int focus_padding = theme.getWidgetProperty(buttonHandle, "focus-padding");
+	int xthickness = OS.gtk_style_get_xthickness(gtkStyle);
+	int ythickness = OS.gtk_style_get_xthickness(gtkStyle);
+	int arrow_width = MIN_ARROW_SIZE;
+	int arrow_height = ARROW_HEIGHT;
+	int x_border = xthickness + focus_padding;
+	int y_border = ythickness + focus_padding;
+	if (interior_focus == 0) {
+		x_border += focus_line_width;
+		y_border += focus_line_width;
+	}
+	int arrow_button_width = arrow_width + x_border * 2;		
+	int arrow_button_x = x + width - arrow_button_width;
+	int arrow_x = arrow_button_x + (arrow_button_width - arrow_width) / 2;
+	int arrow_y = y + (height - arrow_height) / 2 + 1;
+	if (relief != OS.GTK_RELIEF_NONE || ((state[DrawData.COMBO_ARROW] & (DrawData.PRESSED | DrawData.HOT)) != 0)) {
+		byte[] detail = Converter.wcsToMbcs(null, "button", true);
+		OS.gtk_paint_box(gtkStyle, drawable, state_type, shadow_type, null, buttonHandle, detail, arrow_button_x, y, arrow_button_width, height);
+	}		
+	byte[] arrow_detail = Converter.wcsToMbcs(null, "arrow", true);
+	int /*long*/ arrowHandle = theme.arrowHandle;
+	OS.gtk_paint_arrow(gtkStyle, drawable, state_type, OS.GTK_SHADOW_OUT, null, arrowHandle, arrow_detail, OS.GTK_ARROW_DOWN, true, arrow_x, arrow_y, arrow_width, arrow_height);
+	
+	int /*long*/ entryHandle = theme.entryHandle;
+	gtkStyle = OS.gtk_widget_get_style(entryHandle);
+	theme.transferClipping(gc, gtkStyle);
+	state_type = getStateType(DrawData.WIDGET_WHOLE);
+	byte[] detail = Converter.wcsToMbcs(null, "entry", true);
+	OS.gtk_paint_shadow(gtkStyle, drawable, OS.GTK_STATE_NORMAL, OS.GTK_SHADOW_IN, null, entryHandle, detail, x, y, width - arrow_button_width, height);
+	xthickness = OS.gtk_style_get_xthickness(gtkStyle);
+	ythickness = OS.gtk_style_get_xthickness(gtkStyle);
+	x += xthickness;
+	y += ythickness;
+	width -= 2 * xthickness;
+	height -= 2 * ythickness;
+	detail = Converter.wcsToMbcs(null, "entry_bg", true);
+	OS.gtk_paint_flat_box(gtkStyle, drawable, state_type, OS.GTK_SHADOW_NONE, null, entryHandle, detail, x, y, width - arrow_button_width, height);
+		
+	if (clientArea != null) {
+		clientArea.x = x;
+		clientArea.y = y;
+		clientArea.width = width - arrow_button_width;
+		clientArea.height = height;
+	}	
+}
+
+int getStateType(int part) {
+	if (part == DrawData.WIDGET_WHOLE) {
+		int state_type = OS.GTK_STATE_NORMAL;
+		if ((state[DrawData.WIDGET_WHOLE] & DrawData.DISABLED) != 0) {
+			state_type = OS.GTK_STATE_INSENSITIVE;
+		}
+		return state_type;
+	}
+	return super.getStateType(part);
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	if (!bounds.contains(position)) return DrawData.WIDGET_NOWHERE;
+	int /*long*/ buttonHandle = theme.buttonHandle;
+	int /*long*/ gtkStyle = OS.gtk_widget_get_style(buttonHandle);
+	int interior_focus = theme.getWidgetProperty(buttonHandle, "interior-focus");
+	int focus_line_width = theme.getWidgetProperty(buttonHandle, "focus-line-width");
+	int focus_padding = theme.getWidgetProperty(buttonHandle, "focus-padding");
+	int xthickness = OS.gtk_style_get_xthickness(gtkStyle);
+	int ythickness = OS.gtk_style_get_xthickness(gtkStyle);
+	int arrow_width = MIN_ARROW_SIZE;
+	int x_border = xthickness + focus_padding;
+	int y_border = ythickness + focus_padding;
+	if (interior_focus == 0) {
+		x_border += focus_line_width;
+		y_border += focus_line_width;
+	}
+	int arrow_button_width = arrow_width + x_border * 2;		
+	int arrow_button_x = bounds.x + bounds.width - arrow_button_width;
+	Rectangle arrowRect = new Rectangle(arrow_button_x, bounds.y, arrow_button_width, bounds.height);
+	if (arrowRect.contains(position)) return DrawData.COMBO_ARROW;
+	return DrawData.WIDGET_WHOLE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/DrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/DrawData.java
new file mode 100644
index 0000000..f4492b5
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/DrawData.java
@@ -0,0 +1,191 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.gtk.*;
+
+public class DrawData {
+	public int style;
+	public int[] state;
+	public Rectangle clientArea;
+
+	/** Part states */
+	public static final int SELECTED = 1 << 1;
+	public static final int FOCUSED = 1 << 2;
+	public static final int PRESSED = 1 << 3;
+	public static final int ACTIVE = 1 << 4;
+	public static final int DISABLED = 1 << 5;
+	public static final int HOT = 1 << 6;
+	public static final int DEFAULTED = 1 << 7;
+	public static final int GRAYED = 1 << 8;
+	
+	/** Text and Image drawing flags */
+	public static final int DRAW_LEFT = 1 << 4;
+	public static final int DRAW_TOP = 1 << 5;
+	public static final int DRAW_RIGHT = 1 << 6;
+	public static final int DRAW_BOTTOM = 1 << 7;
+	public static final int DRAW_HCENTER = 1 << 8;
+	public static final int DRAW_VCENTER = 1 << 9;
+
+	/** Widget parts */
+	public static final int WIDGET_NOWHERE = -1;
+	public static final int WIDGET_WHOLE = 0;
+
+	/** Scrollbar parts */
+	public static final int SCROLLBAR_UP_ARROW = 1;
+	public static final int SCROLLBAR_DOWN_ARROW = 2;
+	public static final int SCROLLBAR_LEFT_ARROW = SCROLLBAR_UP_ARROW;
+	public static final int SCROLLBAR_RIGHT_ARROW = SCROLLBAR_DOWN_ARROW;
+	public static final int SCROLLBAR_UP_TRACK = 3;
+	public static final int SCROLLBAR_DOWN_TRACK = 4;
+	public static final int SCROLLBAR_LEFT_TRACK = SCROLLBAR_UP_TRACK;
+	public static final int SCROLLBAR_RIGHT_TRACK = SCROLLBAR_DOWN_TRACK;
+	public static final int SCROLLBAR_THUMB = 5;
+	
+	/** Scale parts */
+	public static final int SCALE_UP_TRACK = 1;
+	public static final int SCALE_LEFT_TRACK = SCALE_UP_TRACK;
+	public static final int SCALE_DOWN_TRACK = 2;
+	public static final int SCALE_RIGHT_TRACK = SCALE_DOWN_TRACK;
+	public static final int SCALE_THUMB = 3;
+	
+	/** ToolItem parts */
+	public static final int TOOLITEM_ARROW = 1;
+	
+	/** Combo parts */
+	public static final int COMBO_ARROW = 1;
+	
+
+public DrawData() {
+	state = new int[1];
+}
+
+Rectangle computeTrim(Theme theme, GC gc) {
+	return new Rectangle(clientArea.x, clientArea.y, clientArea.width, clientArea.height);
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	
+}
+
+void drawImage(Theme theme, Image image, GC gc, Rectangle bounds) {
+	int /*long*/ drawable = gc.getGCData().drawable;
+	Rectangle rect = image.getBounds();
+	int state_type = getStateType(DrawData.WIDGET_WHOLE);
+	if (state_type == OS.GTK_STATE_NORMAL) {
+		gc.drawImage(image, 0, 0, rect.width, rect.height, bounds.x, bounds.y, bounds.width, bounds.height);
+	} else {
+		int /*long*/ pixbuf = Theme.createPixbuf(image);
+		int /*long*/ source = OS.gtk_icon_source_new();
+		if (source != 0) {
+			OS.gtk_icon_source_set_pixbuf(source, pixbuf);
+			//TODO - always uses buttonHandle
+			int /*long*/ buttonHandle = theme.buttonHandle;
+			int /*long*/ gtkStyle = OS.gtk_widget_get_style (buttonHandle);
+			theme.transferClipping(gc, gtkStyle);
+			int /*long*/ rendered = OS.gtk_style_render_icon(gtkStyle, source, OS.GTK_TEXT_DIR_NONE, state_type, -1, buttonHandle, null);
+			OS.g_object_unref(pixbuf);
+			//TODO - stretching
+			if (rendered != 0) {
+				OS.gdk_draw_pixbuf(drawable, gc.handle, rendered, 0, 0, bounds.x, bounds.y, bounds.width, bounds.height, OS.GDK_RGB_DITHER_NORMAL, 0, 0);
+				OS.g_object_unref(rendered);
+			}
+			OS.gtk_icon_source_free(source);
+		}
+	}
+}
+
+void drawText(Theme theme, String text, int flags, GC gc, Rectangle bounds) {
+	int /*long*/ widget = getTextHandle(theme);
+	int /*long*/ gtkStyle = OS.gtk_widget_get_style(widget);
+	int /*long*/ drawable = gc.getGCData().drawable;
+	theme.transferClipping (gc, gtkStyle);
+	byte[] buffer = Converter.wcsToMbcs(null, text, true);
+	int /*long*/ layout = OS.gtk_widget_create_pango_layout(widget, buffer);
+	int[] width = new int[1], height = new int[1];
+	OS.pango_layout_get_size(layout, width, height);
+	OS.pango_layout_set_width(layout, bounds.width * OS.PANGO_SCALE);
+	int x = bounds.x;
+	int y = bounds.y;
+	if ((flags & DrawData.DRAW_LEFT) != 0) {
+		OS.pango_layout_set_alignment(layout, OS.PANGO_ALIGN_LEFT);
+	}
+	if ((flags & DrawData.DRAW_HCENTER) != 0) {
+		OS.pango_layout_set_alignment(layout, OS.PANGO_ALIGN_CENTER);
+	}
+	if ((flags & DrawData.DRAW_RIGHT) != 0) {
+		OS.pango_layout_set_alignment(layout, OS.PANGO_ALIGN_RIGHT);
+	}
+	if ((flags & DrawData.DRAW_VCENTER) != 0) {
+		y += (bounds.height - OS.PANGO_PIXELS(height[0])) / 2;
+	}
+	if ((flags & DrawData.DRAW_BOTTOM) != 0) {
+		y += bounds.height - OS.PANGO_PIXELS(height[0]);
+	}
+	int state_type = getStateType(DrawData.WIDGET_WHOLE);
+	byte[] detail = Converter.wcsToMbcs(null, "label", true);
+	OS.gtk_paint_layout(gtkStyle, drawable, state_type, false, null, widget, detail, x, y, layout);
+	OS.g_object_unref(layout);
+}
+
+Rectangle getBounds(int part, Rectangle bounds) {
+	return new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height);
+}
+
+int getStateType(int part) {
+	int state = this.state[part];
+	int state_type = OS.GTK_STATE_NORMAL;
+	if ((state & DrawData.DISABLED) != 0) {
+		state_type = OS.GTK_STATE_INSENSITIVE;
+	} else {
+		if ((state & DrawData.SELECTED) != 0) state_type = OS.GTK_STATE_ACTIVE;
+		if ((state & DrawData.HOT) != 0) {
+			if ((state & DrawData.PRESSED) != 0) { 
+				state_type = OS.GTK_STATE_ACTIVE;
+			} else {
+				state_type = OS.GTK_STATE_PRELIGHT;
+			}
+		}
+	}
+	return state_type;
+}
+
+int /*long*/ getTextHandle(Theme theme) {
+	return theme.labelHandle;
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	return -1;
+}
+
+Rectangle measureText(Theme theme, String text, int flags, GC gc, Rectangle bounds) {
+	int /*long*/ widget = getTextHandle(theme);
+	byte[] buffer = Converter.wcsToMbcs(null, text, true);
+	int /*long*/ layout = OS.gtk_widget_create_pango_layout(widget, buffer);
+	if (bounds != null) OS.pango_layout_set_width(layout, bounds.width);
+	if ((flags & DrawData.DRAW_LEFT) != 0) {
+		OS.pango_layout_set_alignment(layout, OS.PANGO_ALIGN_LEFT);
+	}
+	if ((flags & DrawData.DRAW_HCENTER) != 0) {
+		OS.pango_layout_set_alignment(layout, OS.PANGO_ALIGN_CENTER);
+	}
+	if ((flags & DrawData.DRAW_RIGHT) != 0) {
+		OS.pango_layout_set_alignment(layout, OS.PANGO_ALIGN_RIGHT);
+	}
+	int[] width = new int[1], height = new int[1];
+	OS.pango_layout_get_size(layout, width, height);
+	OS.g_object_unref(layout);
+	return new Rectangle(0, 0, OS.PANGO_PIXELS(width[0]), OS.PANGO_PIXELS(height[0]));
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ExpanderDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ExpanderDrawData.java
new file mode 100644
index 0000000..7553116
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ExpanderDrawData.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.gtk.*;
+
+public class ExpanderDrawData extends DrawData {
+	
+public ExpanderDrawData() {
+	state = new int[1];
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	int /*long*/ treeHandle = theme.treeHandle;
+	int /*long*/ gtkStyle = OS.gtk_widget_get_style (treeHandle);
+	int /*long*/ drawable = gc.getGCData().drawable;
+	theme.transferClipping(gc, gtkStyle);
+	int state_type = getStateType(DrawData.WIDGET_WHOLE);
+	int expander_style = OS.GTK_EXPANDER_COLAPSED;
+	if ((this.style & SWT.DOWN) != 0) expander_style = OS.GTK_EXPANDER_EXPANDED;
+	byte[] detail = Converter.wcsToMbcs(null, "treeview", true);
+	int expander_size = theme.getWidgetProperty(treeHandle, "expander-size");
+	int x = bounds.x + expander_size / 2;
+	int y = bounds.y + expander_size / 2;
+	OS.gtk_paint_expander(gtkStyle, drawable, state_type, null, treeHandle, detail, x, y, expander_style);
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	if (!bounds.contains(position)) return DrawData.WIDGET_NOWHERE;
+	int /*long*/ treeHandle = theme.treeHandle;
+	int expander_size = theme.getWidgetProperty(treeHandle, "expander-size");
+	if (new Rectangle(bounds.x, bounds.y, expander_size, expander_size).contains(position)) {
+		return DrawData.WIDGET_WHOLE;
+	}
+	return DrawData.WIDGET_NOWHERE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/GroupDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/GroupDrawData.java
new file mode 100644
index 0000000..bd18278
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/GroupDrawData.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.gtk.*;
+
+public class GroupDrawData extends DrawData {
+	public int headerWidth;
+	public int headerHeight;
+	public Rectangle headerArea;
+	
+	static final int GROUP_X = 2;
+	static final int GROUP_PAD = 1;
+	
+public GroupDrawData() {
+	state = new int[1];
+}
+
+static final int GROUP_HEADER_X = 9;
+static final int GROUP_HEADER_PAD = 2;
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	int /*long*/ frameHandle = theme.frameHandle;
+	int /*long*/ gtkStyle = OS.gtk_widget_get_style (frameHandle);
+	int /*long*/ drawable = gc.getGCData().drawable;
+	theme.transferClipping(gc, gtkStyle);
+	int xthickness = OS.gtk_style_get_xthickness(gtkStyle);
+	int ythickness = OS.gtk_style_get_ythickness(gtkStyle);
+	int x = bounds.x, y = bounds.y + headerHeight / 2, width = bounds.width, height = bounds.height - headerHeight / 2;
+	byte[] detail = Converter.wcsToMbcs(null, "frame", true);
+	int gap_x = xthickness + GROUP_X, gap_width = headerWidth + GROUP_PAD * 2, gap_side = OS.GTK_POS_TOP;
+	int state_type = getStateType(DrawData.WIDGET_WHOLE);
+	OS.gtk_paint_shadow_gap(gtkStyle, drawable, state_type, OS.GTK_SHADOW_ETCHED_IN, null, frameHandle, detail, x, y, width, height, gap_side, gap_x, gap_width);
+	if (headerArea != null) {
+		headerArea.x = bounds.x + gap_x + GROUP_PAD;
+		headerArea.y = bounds.y;
+		headerArea.width = headerWidth;
+		headerArea.height = headerHeight;
+	}
+	if (clientArea != null) {
+		clientArea.x = bounds.x + xthickness;
+		clientArea.y = bounds.y + ythickness + headerHeight;
+		clientArea.width = bounds.width - 2 * xthickness;
+		clientArea.height = bounds.height - 2 * ythickness - headerHeight;
+	}
+}
+
+int getStateType(int part) {
+	int state = this.state[part];
+	int state_type = OS.GTK_STATE_NORMAL;
+	if ((state & DrawData.DISABLED) != 0) state_type = OS.GTK_STATE_INSENSITIVE;
+	return state_type;
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+   	return bounds.contains(position) ? DrawData.WIDGET_WHOLE : DrawData.WIDGET_NOWHERE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ProgressBarDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ProgressBarDrawData.java
new file mode 100644
index 0000000..04d3ea9
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ProgressBarDrawData.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.gtk.*;
+
+public class ProgressBarDrawData extends RangeDrawData {
+
+public ProgressBarDrawData() {
+	state = new int[1];
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	int /*long*/ progressHandle = theme.progressHandle;
+	int /*long*/ gtkStyle = OS.gtk_widget_get_style (progressHandle);
+	int /*long*/ drawable = gc.getGCData().drawable;
+	theme.transferClipping(gc, gtkStyle);
+	byte[] detail = Converter.wcsToMbcs(null, "trough", true);
+	int x = bounds.x, y = bounds.y, width = bounds.width, height = bounds.height;
+	OS.gtk_paint_box(gtkStyle, drawable, getStateType(DrawData.WIDGET_WHOLE), OS.GTK_SHADOW_IN, null, progressHandle, detail, x, y, width, height);
+	int xthichness = OS.gtk_style_get_xthickness(gtkStyle);
+	int ythichness = OS.gtk_style_get_ythickness(gtkStyle);
+	if ((style & SWT.VERTICAL) != 0) {
+		OS.gtk_progress_bar_set_orientation(progressHandle, OS.GTK_PROGRESS_BOTTOM_TO_TOP);
+		x += xthichness;
+		width -= xthichness * 2;
+		height -= ythichness * 2;
+		height *= selection / (float)Math.max(1, (maximum - minimum));
+		y += bounds.height - ythichness - height;
+	} else {
+		OS.gtk_progress_bar_set_orientation(progressHandle, OS.GTK_PROGRESS_LEFT_TO_RIGHT);
+		x += xthichness;
+		y += ythichness;
+		width -= xthichness * 2;
+		height -= ythichness * 2;
+		width *= selection / (float)Math.max(1, maximum - minimum);
+	}
+	detail = Converter.wcsToMbcs(null, "bar", true);
+	OS.gtk_paint_box(gtkStyle, drawable, OS.GTK_STATE_PRELIGHT, OS.GTK_SHADOW_OUT, null, progressHandle, detail, x, y, width, height);
+}
+
+int getStateType(int part) {
+	return OS.GTK_STATE_NORMAL;
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	return bounds.contains(position) ? DrawData.WIDGET_WHOLE : DrawData.WIDGET_NOWHERE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/RangeDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/RangeDrawData.java
new file mode 100644
index 0000000..51f7bca
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/RangeDrawData.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.graphics.*;
+
+public class RangeDrawData extends DrawData {
+	public int selection;
+	public int minimum;
+	public int maximum;
+
+int getSelection(Point position, Rectangle bounds) {
+	return 0;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ScaleDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ScaleDrawData.java
new file mode 100644
index 0000000..9840c92
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ScaleDrawData.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.graphics.*;
+
+public class ScaleDrawData extends RangeDrawData {
+	public int increment;
+	public int pageIncrement;
+	
+public ScaleDrawData() {
+	state = new int[4];
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	return bounds.contains(position) ? DrawData.WIDGET_WHOLE : DrawData.WIDGET_NOWHERE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ScrollBarDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ScrollBarDrawData.java
new file mode 100644
index 0000000..dc2d173
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ScrollBarDrawData.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.graphics.*;
+
+public class ScrollBarDrawData extends RangeDrawData {
+	public int thumb;
+	public int increment;
+	public int pageIncrement;
+	
+public ScrollBarDrawData() {
+	state = new int[6];
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	return bounds.contains(position) ? DrawData.WIDGET_WHOLE : DrawData.WIDGET_NOWHERE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/TabFolderDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/TabFolderDrawData.java
new file mode 100644
index 0000000..a261ec4
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/TabFolderDrawData.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.gtk.*;
+
+public class TabFolderDrawData extends DrawData {
+	public int tabsWidth;
+	public int tabsHeight;
+	public Rectangle tabsArea;
+	public int selectedX;
+	public int selectedWidth;
+	public int spacing;
+	
+public TabFolderDrawData() {
+	state = new int[1];
+	if (SWT.getPlatform().equals("gtk")) {
+		spacing = -2;
+	}
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	int /*long*/ notebookHandle = theme.notebookHandle;
+	int /*long*/ gtkStyle = OS.gtk_widget_get_style (notebookHandle);
+	int /*long*/ drawable = gc.getGCData().drawable;
+	theme.transferClipping(gc, gtkStyle);
+	int x = bounds.x, y = bounds.y, width = bounds.width, height = bounds.height;
+	height -= tabsHeight;
+	int gap_x = selectedX, gap_width = selectedWidth, gap_side = OS.GTK_POS_TOP;
+	if ((style & SWT.BOTTOM) != 0) {
+		gap_side = OS.GTK_POS_BOTTOM;
+	} else {
+		y += tabsHeight;
+	}
+	byte[] detail = Converter.wcsToMbcs(null, "notebook", true);
+	OS.gtk_paint_box_gap(gtkStyle, drawable, getStateType(DrawData.WIDGET_WHOLE), OS.GTK_SHADOW_OUT, null, notebookHandle, detail, x, y, width, height, gap_side, gap_x, gap_width);
+	if (tabsArea != null) {
+		tabsArea.x = bounds.x;
+		tabsArea.y = bounds.y;
+		tabsArea.width = bounds.width;
+		tabsArea.height = tabsHeight;
+		if ((style & SWT.BOTTOM) != 0) {
+			tabsArea.y += bounds.height - tabsHeight;
+		}
+	}
+}
+
+int getStateType(int part) {
+	return OS.GTK_STATE_NORMAL;
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	return bounds.contains(position) ? DrawData.WIDGET_WHOLE : DrawData.WIDGET_NOWHERE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/TabItemDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/TabItemDrawData.java
new file mode 100644
index 0000000..00b05e2
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/TabItemDrawData.java
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.gtk.*;
+
+public class TabItemDrawData extends DrawData {
+	
+	public TabFolderDrawData parent;
+	public int position;
+
+	static final int TAB_CURVATURE = 1;
+
+public TabItemDrawData() {
+	state = new int[1];
+}
+
+Rectangle computeTrim(Theme theme, GC gc) {
+	int /*long*/ notebookHandle = theme.notebookHandle;
+	int /*long*/ gtkStyle = OS.gtk_widget_get_style(notebookHandle);
+	int hborder, vborder;
+	if (OS.GTK_VERSION >= OS.VERSION(2, 4, 0)) {
+		hborder = theme.getWidgetProperty(notebookHandle, "tab-hborder");
+		vborder = theme.getWidgetProperty(notebookHandle, "tab-vborder");
+	} else {
+		hborder = 2;
+		vborder = 2;
+	}
+	int focus_width = theme.getWidgetProperty(notebookHandle, "focus-line-width");
+	int xthickness = OS.gtk_style_get_xthickness(gtkStyle);
+	int ythickness = OS.gtk_style_get_ythickness(gtkStyle);
+	int borderX = xthickness + TAB_CURVATURE + focus_width + hborder;
+	int borderY = ythickness + TAB_CURVATURE + focus_width + vborder;
+	int x = clientArea.x - borderX;
+	int y = clientArea.y - borderY;
+	int width = clientArea.width + 2 * borderX;
+	int height = clientArea.height + 2 * borderY;
+	return new Rectangle(x, y, width, height);
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	int /*long*/ notebookHandle = theme.notebookHandle;
+	int /*long*/ gtkStyle = OS.gtk_widget_get_style (notebookHandle);
+	int /*long*/ drawable = gc.getGCData().drawable;
+	theme.transferClipping(gc, gtkStyle);
+	int x = bounds.x, y = bounds.y, width = bounds.width, height = bounds.height;
+	if ((state[DrawData.WIDGET_WHOLE] & DrawData.SELECTED) == 0) {
+		if ((parent.style & SWT.BOTTOM) == 0) {
+			y += TAB_CURVATURE;
+		}
+		height -= TAB_CURVATURE;
+	}
+	int gap_side = OS.GTK_POS_BOTTOM;
+	if ((parent.style & SWT.BOTTOM) != 0) {
+		gap_side = OS.GTK_POS_TOP;
+	}
+	int state_type = getStateType(DrawData.WIDGET_WHOLE);
+	byte[] detail = Converter.wcsToMbcs(null, "tab", true);
+	OS.gtk_paint_extension(gtkStyle, drawable, state_type, OS.GTK_SHADOW_OUT, null, notebookHandle, detail, x, y, width, height, gap_side);
+	if (clientArea != null) {
+		int hborder, vborder;
+		if (OS.GTK_VERSION >= OS.VERSION(2, 4, 0)) {
+			hborder = theme.getWidgetProperty(notebookHandle, "tab-hborder");
+			vborder = theme.getWidgetProperty(notebookHandle, "tab-vborder");
+		} else {
+			hborder = 2;
+			vborder = 2;
+		}
+		int focus_line_width = theme.getWidgetProperty(notebookHandle, "focus-line-width");
+		int xthickness = OS.gtk_style_get_xthickness(gtkStyle);
+		int ythickness = OS.gtk_style_get_ythickness(gtkStyle);
+		int borderX = xthickness + TAB_CURVATURE + focus_line_width + hborder;
+		int borderY = ythickness + TAB_CURVATURE + focus_line_width + vborder;
+		clientArea.x = bounds.x + borderX;
+		clientArea.y = bounds.y + borderY;
+		clientArea.width = bounds.width - 2 * borderX;
+		clientArea.height = bounds.height - 2 * borderY;
+	}
+}
+
+int getStateType(int part) {
+	int state = this.state[part];
+	int state_type = OS.GTK_STATE_ACTIVE;
+	if ((state & DrawData.SELECTED) != 0) state_type = OS.GTK_STATE_NORMAL;
+	return state_type;
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	return bounds.contains(position) ? DrawData.WIDGET_WHOLE : DrawData.WIDGET_NOWHERE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/Theme.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/Theme.java
new file mode 100644
index 0000000..a174a93
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/Theme.java
@@ -0,0 +1,267 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.gtk.*;
+
+public class Theme {
+	Device device;
+	
+	int /*long*/ shellHandle, fixedHandle, buttonHandle, arrowHandle,
+		frameHandle, entryHandle, checkButtonHandle, radioButtonHandle, 
+		notebookHandle, treeHandle, progressHandle, toolbarHandle,
+		labelHandle, separatorHandle;
+	
+public Theme(Device device) {
+	this.device = device;
+	shellHandle = OS.gtk_window_new (OS.GTK_WINDOW_TOPLEVEL);
+	fixedHandle = OS.gtk_fixed_new();
+	buttonHandle = OS.gtk_button_new();
+	arrowHandle = OS.gtk_arrow_new(OS.GTK_ARROW_DOWN, OS.GTK_SHADOW_NONE);
+	checkButtonHandle = OS.gtk_check_button_new();
+	frameHandle = OS.gtk_check_button_new();
+	entryHandle = OS.gtk_entry_new();
+	radioButtonHandle = OS.gtk_radio_button_new(0);
+	notebookHandle = OS.gtk_notebook_new();
+	progressHandle = OS.gtk_progress_bar_new();
+	toolbarHandle = OS.gtk_toolbar_new();
+	treeHandle = OS.gtk_tree_view_new_with_model(0);
+	separatorHandle = OS.gtk_vseparator_new();
+	labelHandle = OS.gtk_label_new(null);
+	OS.gtk_container_add (fixedHandle, labelHandle);
+	OS.gtk_container_add (fixedHandle, frameHandle);
+	OS.gtk_container_add (fixedHandle, entryHandle);
+	OS.gtk_container_add (fixedHandle, separatorHandle);
+	OS.gtk_container_add (fixedHandle, arrowHandle);
+	OS.gtk_container_add (fixedHandle, toolbarHandle);
+	OS.gtk_container_add (fixedHandle, progressHandle);
+	OS.gtk_container_add (fixedHandle, checkButtonHandle);
+	OS.gtk_container_add (fixedHandle, radioButtonHandle);
+	OS.gtk_container_add (fixedHandle, buttonHandle);
+	OS.gtk_container_add (fixedHandle, treeHandle);
+	OS.gtk_container_add (fixedHandle, notebookHandle);
+	OS.gtk_container_add (shellHandle, fixedHandle);
+	OS.gtk_widget_realize (separatorHandle);
+	OS.gtk_widget_realize (labelHandle);
+	OS.gtk_widget_realize (frameHandle);
+	OS.gtk_widget_realize (entryHandle);
+	OS.gtk_widget_realize (arrowHandle);
+	OS.gtk_widget_realize (buttonHandle);
+	OS.gtk_widget_realize (treeHandle);
+	OS.gtk_widget_realize (notebookHandle);
+	OS.gtk_widget_realize (checkButtonHandle);
+	OS.gtk_widget_realize (radioButtonHandle);
+	OS.gtk_widget_realize (progressHandle);
+	OS.gtk_widget_realize (toolbarHandle);
+	OS.gtk_widget_realize (shellHandle);
+}
+
+//TODO - share this code 
+static int /*long*/ createPixbuf(Image image) {
+	int [] w = new int [1], h = new int [1];
+ 	OS.gdk_drawable_get_size (image.pixmap, w, h);
+	int /*long*/ colormap = OS.gdk_colormap_get_system ();
+	int /*long*/ pixbuf;
+	boolean hasMask = image.mask != 0 && OS.gdk_drawable_get_depth (image.mask) == 1;
+	if (hasMask) {
+		pixbuf = OS.gdk_pixbuf_new (OS.GDK_COLORSPACE_RGB, true, 8, w [0], h [0]);
+		if (pixbuf == 0) SWT.error (SWT.ERROR_NO_HANDLES);
+		OS.gdk_pixbuf_get_from_drawable (pixbuf, image.pixmap, colormap, 0, 0, 0, 0, w [0], h [0]);
+		int /*long*/ maskPixbuf = OS.gdk_pixbuf_new(OS.GDK_COLORSPACE_RGB, false, 8, w [0], h [0]);
+		if (maskPixbuf == 0) SWT.error (SWT.ERROR_NO_HANDLES);
+		OS.gdk_pixbuf_get_from_drawable(maskPixbuf, image.mask, 0, 0, 0, 0, 0, w [0], h [0]);
+		int stride = OS.gdk_pixbuf_get_rowstride(pixbuf);
+		int /*long*/ pixels = OS.gdk_pixbuf_get_pixels(pixbuf);
+		byte[] line = new byte[stride];
+		int maskStride = OS.gdk_pixbuf_get_rowstride(maskPixbuf);
+		int /*long*/ maskPixels = OS.gdk_pixbuf_get_pixels(maskPixbuf);
+		byte[] maskLine = new byte[maskStride];
+		for (int y=0; y<h[0]; y++) {
+			int /*long*/ offset = pixels + (y * stride);
+			OS.memmove(line, offset, stride);
+			int /*long*/ maskOffset = maskPixels + (y * maskStride);
+			OS.memmove(maskLine, maskOffset, maskStride);
+			for (int x=0; x<w[0]; x++) {
+				if (maskLine[x * 3] == 0) {
+					line[x * 4 + 3] = 0;
+				}
+			}
+			OS.memmove(offset, line, stride);
+		}
+		OS.g_object_unref(maskPixbuf);
+	} else {
+		ImageData data = image.getImageData ();
+		boolean hasAlpha = data.getTransparencyType () == SWT.TRANSPARENCY_ALPHA;
+		pixbuf = OS.gdk_pixbuf_new (OS.GDK_COLORSPACE_RGB, hasAlpha, 8, w [0], h [0]);
+		if (pixbuf == 0) SWT.error (SWT.ERROR_NO_HANDLES);
+		OS.gdk_pixbuf_get_from_drawable (pixbuf, image.pixmap, colormap, 0, 0, 0, 0, w [0], h [0]);
+		if (hasAlpha) {
+			byte [] alpha = data.alphaData;
+			int stride = OS.gdk_pixbuf_get_rowstride (pixbuf);
+			int /*long*/ pixels = OS.gdk_pixbuf_get_pixels (pixbuf);
+			byte [] line = new byte [stride];
+			for (int y = 0; y < h [0]; y++) {
+				int /*long*/ offset = pixels + (y * stride);
+				OS.memmove (line, offset, stride);
+				for (int x = 0; x < w [0]; x++) {
+					line [x*4+3] = alpha [y*w [0]+x];
+				}
+				OS.memmove (offset, line, stride);
+			}
+		}
+	}
+	return pixbuf;
+}
+
+void checkTheme() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+}
+
+public Rectangle computeTrim(GC gc, DrawData data) {
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	return data.computeTrim(this, gc);
+}
+
+public void dispose () {
+	if (shellHandle == 0) return;
+	OS.gtk_widget_destroy(shellHandle);
+	shellHandle = fixedHandle = buttonHandle = arrowHandle =
+	frameHandle = entryHandle = checkButtonHandle = radioButtonHandle = 
+	notebookHandle = treeHandle = progressHandle = toolbarHandle = 
+	labelHandle = separatorHandle = 0;
+}
+	
+public void drawBackground(GC gc, Rectangle bounds, DrawData data) {
+	checkTheme();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	data.draw(this, gc, bounds);
+}
+
+public void drawFocus(GC gc, Rectangle bounds, DrawData data) {
+	checkTheme();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	gc.drawFocus(bounds.x, bounds.y, bounds.width, bounds.height);
+}
+
+public void drawImage(GC gc, Rectangle bounds, DrawData data, Image image, int flags) {
+	checkTheme();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (image == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	data.drawImage(this, image, gc, bounds);
+}
+
+public void drawText(GC gc, Rectangle bounds, DrawData data, String text, int flags) {
+	checkTheme();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (text == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	data.drawText(this, text, flags, gc, bounds);
+}
+
+public Rectangle getBounds(int part, Rectangle bounds, DrawData data) {
+	checkTheme();
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	return data.getBounds(part, bounds);
+}
+
+public int getSelection(Point offset, Rectangle bounds, RangeDrawData data) {
+	checkTheme();
+	if (offset == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	return data.getSelection(offset, bounds);
+}
+
+public int hitBackground(Point position, Rectangle bounds, DrawData data) {
+	checkTheme();
+	if (position == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	return data.hit(this, position, bounds);
+}
+
+public boolean isDisposed() {
+	return device == null;
+}
+
+public Rectangle measureText(GC gc, Rectangle bounds, DrawData data, String text, int flags) {
+	checkTheme();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (text == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	return data.measureText(this, text, flags, gc, bounds);
+}
+
+int getWidgetProperty(int /*long*/ handle, String name) {
+	byte[] propertyName = Converter.wcsToMbcs(null, name, true);
+	int[] result = new int[1];
+	OS.gtk_widget_style_get(handle, propertyName, result, 0);
+	return result[0];
+}
+
+void transferClipping(GC gc, int /*long*/ style) {
+	GCData data = gc.getGCData();
+	int /*long*/ clipRgn = data.clipRgn;
+	int /*long*/ damageRgn = data.damageRgn;
+	int /*long*/ clipping = clipRgn;
+	if (damageRgn != 0) {
+		if (clipping != 0) {
+			clipping = OS.gdk_region_new();
+			OS.gdk_region_union(clipping, clipRgn);
+			OS.gdk_region_intersect(clipping, damageRgn);
+		} else {
+			clipping = damageRgn;
+		}
+	}
+	int /*long*/ [] curGC = new int /*long*/ [1];
+	for (int i = 0; i < 5; i++) {
+		OS.gtk_style_get_fg_gc (style, i, curGC);
+		if (curGC[0] != 0) OS.gdk_gc_set_clip_region (curGC[0], clipping);
+		OS.gtk_style_get_bg_gc (style, i, curGC);
+		if (curGC[0] != 0) OS.gdk_gc_set_clip_region (curGC[0], clipping);
+		OS.gtk_style_get_light_gc (style, i, curGC);
+		if (curGC[0] != 0) OS.gdk_gc_set_clip_region (curGC[0], clipping);
+		OS.gtk_style_get_dark_gc (style, i, curGC);
+		if (curGC[0] != 0) OS.gdk_gc_set_clip_region (curGC[0], clipping);
+		OS.gtk_style_get_mid_gc (style, i, curGC);
+		if (curGC[0] != 0) OS.gdk_gc_set_clip_region (curGC[0], clipping);
+		OS.gtk_style_get_text_gc (style, i, curGC);
+		if (curGC[0] != 0) OS.gdk_gc_set_clip_region (curGC[0], clipping);
+		OS.gtk_style_get_text_aa_gc (style, i, curGC);
+		if (curGC[0] != 0) OS.gdk_gc_set_clip_region (curGC[0], clipping);
+	}
+	OS.gtk_style_get_black_gc (style, curGC);
+	if (curGC[0] != 0) OS.gdk_gc_set_clip_region (curGC[0], clipping);
+	OS.gtk_style_get_white_gc (style, curGC);
+	if (curGC[0] != 0) OS.gdk_gc_set_clip_region (curGC[0], clipping);
+	if (clipping != clipRgn && clipping != damageRgn) {
+		OS.gdk_region_destroy(clipping);
+	}
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ToolBarDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ToolBarDrawData.java
new file mode 100644
index 0000000..4c99b12
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ToolBarDrawData.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.gtk.*;
+
+public class ToolBarDrawData extends DrawData {
+	
+public ToolBarDrawData() {
+	state = new int[1];
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	int /*long*/ toolbarHandle = theme.toolbarHandle;
+	int /*long*/ gtkStyle = OS.gtk_widget_get_style (toolbarHandle);
+	int /*long*/ drawable = gc.getGCData().drawable;
+	theme.transferClipping(gc, gtkStyle);
+	int x = bounds.x, y = bounds.y, width = bounds.width, height = bounds.height;
+	byte[] detail = Converter.wcsToMbcs(null, "toolbar", true);
+	OS.gtk_paint_box(gtkStyle, drawable, getStateType(DrawData.WIDGET_WHOLE), OS.GTK_SHADOW_NONE, null, toolbarHandle, detail, x, y, width, height);
+	if (clientArea != null) {
+		clientArea.x = bounds.x;
+		clientArea.y = bounds.y;
+		clientArea.width = bounds.width;
+		clientArea.height = bounds.height;
+	}
+}
+
+int getStateType(int part) {
+	return OS.GTK_STATE_NORMAL;
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	return bounds.contains(position) ? DrawData.WIDGET_WHOLE : DrawData.WIDGET_NOWHERE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ToolItemDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ToolItemDrawData.java
new file mode 100644
index 0000000..67cc405
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/gtk/org/eclipse/swt/internal/theme/ToolItemDrawData.java
@@ -0,0 +1,166 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.gtk.*;
+
+public class ToolItemDrawData extends DrawData {
+
+	public ToolBarDrawData parent;
+
+	static final int ARROW_WIDTH = 8;
+	static final int ARROW_HEIGHT = 6;
+
+public ToolItemDrawData() {
+	state = new int[2];
+}
+
+Rectangle computeTrim(Theme theme, GC gc) {
+	int /*long*/ buttonHandle = theme.buttonHandle;
+	int /*long*/ gtkStyle = OS.gtk_widget_get_style(buttonHandle);
+	int focus_width = theme.getWidgetProperty(buttonHandle, "focus-line-width");
+	int focus_padding = theme.getWidgetProperty(buttonHandle, "focus-padding");
+	int xthickness = OS.gtk_style_get_xthickness(gtkStyle);
+	int ythickness = OS.gtk_style_get_ythickness(gtkStyle);
+	int borderX = xthickness + focus_width + focus_padding;
+	int borderY = ythickness + focus_width + focus_padding;
+	int x = clientArea.x - borderX;
+	int y = clientArea.y - borderY;
+	int width = clientArea.width + 2 * borderX;
+	int height = clientArea.height + 2 * borderY;
+	if ((style & SWT.DROP_DOWN) != 0) {
+		width += ARROW_WIDTH;
+	}
+	return new Rectangle(x, y, width, height);
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	int state = this.state[DrawData.WIDGET_WHOLE];
+	int /*long*/ drawable = gc.getGCData().drawable;
+
+	if ((style & SWT.SEPARATOR) != 0) {
+		int state_type = getStateType(DrawData.WIDGET_WHOLE);
+		int /*long*/ separatorHandle = theme.separatorHandle;
+		byte[] detail = Converter.wcsToMbcs(null, "vseparator", true);
+		int /*long*/ gtkStyle = OS.gtk_widget_get_style (separatorHandle);
+		theme.transferClipping(gc, gtkStyle);
+		if ((parent.style & SWT.VERTICAL) != 0) {
+			OS.gtk_paint_hline(gtkStyle, drawable, state_type, null, separatorHandle, detail, bounds.x, bounds.x + bounds.width, bounds.y + bounds.height / 2);
+		} else {
+			OS.gtk_paint_vline(gtkStyle, drawable, state_type, null, separatorHandle, detail, bounds.y, bounds.y + bounds.height, bounds.x + bounds.width / 2);
+		}
+		return;
+	}
+
+	int /*long*/ buttonHandle = theme.buttonHandle;
+	int /*long*/ gtkStyle = OS.gtk_widget_get_style (buttonHandle);
+	theme.transferClipping (gc, gtkStyle);
+	int focus_line_width = theme.getWidgetProperty(buttonHandle, "focus-line-width");
+	int focus_padding = theme.getWidgetProperty(buttonHandle, "focus-padding");
+	int border_width = OS.gtk_container_get_border_width(buttonHandle);
+
+	int x = bounds.x + border_width;
+	int y = bounds.y + border_width;
+	int width = bounds.width - border_width * 2;
+	int height = bounds.height - border_width * 2;
+
+	byte[] detail = null;
+	if ((style & (SWT.PUSH | SWT.DROP_DOWN)) != 0) {
+		detail = Converter.wcsToMbcs(null, "button", true);
+	} else if ((style & (SWT.CHECK | SWT.RADIO)) != 0) {
+		detail = Converter.wcsToMbcs(null, "togglebutton", true);
+	}
+	
+	int[] relief = new int[1];
+	int /*long*/ toolbarHandle = theme.toolbarHandle;
+	OS.gtk_widget_style_get(toolbarHandle, OS.button_relief, relief, 0);
+
+	int shadow_type = OS.GTK_SHADOW_OUT;
+	if ((state & (DrawData.SELECTED | DrawData.PRESSED)) != 0) shadow_type = OS.GTK_SHADOW_IN;
+	int state_type = getStateType(DrawData.WIDGET_WHOLE);
+		
+	if (relief[0] != OS.GTK_RELIEF_NONE || ((state & (DrawData.PRESSED | DrawData.HOT | DrawData.SELECTED)) != 0)) {
+		OS.gtk_paint_box(gtkStyle, drawable, state_type, shadow_type, null, buttonHandle, detail, x, y, width, height);
+	}
+
+	if (clientArea != null) {
+		clientArea.x = bounds.x + border_width;
+		clientArea.y = bounds.y + border_width;
+		clientArea.width = bounds.width - 2 * border_width;
+		clientArea.height = bounds.height - 2 * border_width;
+	}
+
+	int xthickness = OS.gtk_style_get_xthickness(gtkStyle);
+	int interior_focus = theme.getWidgetProperty(buttonHandle, "interior-focus");
+	if ((style & SWT.DROP_DOWN) != 0) {
+		int arrow_width = ARROW_WIDTH;
+		int arrow_height = ARROW_HEIGHT;
+		int arrow_x = x + width - arrow_width - xthickness - focus_padding;
+		if (interior_focus == 0) arrow_x -= focus_line_width;
+		int arrow_y = y + (height - arrow_height) / 2;
+		byte[] arrow_detail = Converter.wcsToMbcs(null, "arrow", true);
+		OS.gtk_paint_arrow(gtkStyle, drawable, state_type, OS.GTK_SHADOW_NONE, null, theme.arrowHandle, arrow_detail, OS.GTK_ARROW_DOWN, true, arrow_x, arrow_y, arrow_width, arrow_height);
+		if (clientArea != null) {
+			clientArea.width -= bounds.x + bounds.width - arrow_x;
+		}
+	}
+
+    if ((state & DrawData.FOCUSED) != 0) {
+    	int child_displacement_y = theme.getWidgetProperty(buttonHandle, "child-displacement-y");
+    	int child_displacement_x = theme.getWidgetProperty(buttonHandle, "child-displacement-x");
+    	int displace_focus = 0;
+    	if (OS.GTK_VERSION >= OS.VERSION (2, 6, 0)) {
+    		displace_focus = theme.getWidgetProperty(buttonHandle, "displace-focus");
+    	}
+    	
+    	if (interior_focus != 0) {
+    		int ythickness = OS.gtk_style_get_ythickness(gtkStyle);
+    		x += xthickness + focus_padding;
+            y += ythickness + focus_padding;
+            width -= 2 * (xthickness + focus_padding);
+            height -=  2 * (ythickness + focus_padding);
+    	} else {
+    		x -= focus_line_width + focus_padding;
+    		y -= focus_line_width + focus_padding;
+    		width += 2 * (focus_line_width + focus_padding);
+    		height += 2 * (focus_line_width + focus_padding);
+    	}
+    	
+    	if ((state & (DrawData.PRESSED | DrawData.SELECTED)) != 0 && displace_focus != 0) {
+              x += child_displacement_x;
+              y += child_displacement_y;
+    	}
+    	
+        OS.gtk_paint_focus(gtkStyle, drawable, state_type, null, buttonHandle, detail, x, y, width, height);
+    }
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	if (!bounds.contains(position)) return DrawData.WIDGET_NOWHERE;
+	if ((style & SWT.DROP_DOWN) != 0) {
+		int /*long*/ buttonHandle = theme.buttonHandle;
+		int /*long*/ gtkStyle = OS.gtk_widget_get_style (buttonHandle);
+		int xthickness = OS.gtk_style_get_xthickness(gtkStyle);
+		int interior_focus = theme.getWidgetProperty(buttonHandle, "interior-focus");
+		int focus_line_width = theme.getWidgetProperty(buttonHandle, "focus-line-width");
+		int focus_padding = theme.getWidgetProperty(buttonHandle, "focus-padding");
+		int arrow_width = ARROW_WIDTH;
+		int arrow_x = bounds.x + bounds.width - arrow_width - xthickness - focus_padding;
+		if (interior_focus == 0) arrow_x -= focus_line_width;
+		if (arrow_x <= position.x) return DrawData.TOOLITEM_ARROW;
+	}
+	return DrawData.WIDGET_WHOLE; 
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ButtonDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ButtonDrawData.java
new file mode 100644
index 0000000..1d813c7
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ButtonDrawData.java
@@ -0,0 +1,109 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.win32.*;
+
+public class ButtonDrawData extends DrawData {
+	
+public ButtonDrawData() {
+	state = new int[1];
+}
+
+int[] getPartId(int part) {
+	int state = this.state[part];
+	int style = this.style;
+	int iPartId = 0, iStateId = 0;			
+	if ((style & SWT.PUSH) != 0) {
+		iPartId = OS.BP_PUSHBUTTON;
+		iStateId = OS.PBS_NORMAL;
+		if ((state & DrawData.DEFAULTED) != 0 && (state & DrawData.ACTIVE) != 0) iStateId = OS.PBS_DEFAULTED;
+		if ((state & DrawData.HOT) != 0) iStateId = OS.PBS_HOT;
+		if ((state & DrawData.PRESSED) != 0) iStateId = OS.PBS_PRESSED;
+		if ((state & DrawData.DISABLED) != 0) iStateId = OS.PBS_DISABLED;
+	}
+	if ((style & SWT.RADIO) != 0) {
+		iPartId = OS.BP_RADIOBUTTON;
+	}
+	if ((style & SWT.CHECK) != 0) {
+		iPartId = OS.BP_CHECKBOX;
+	}
+	if ((style & (SWT.CHECK | SWT.RADIO)) != 0) {
+		if ((state & DrawData.SELECTED) != 0) {
+			iStateId = OS.CBS_CHECKEDNORMAL;
+			if ((state & DrawData.HOT) != 0) iStateId = OS.CBS_CHECKEDHOT;
+			if ((state & DrawData.PRESSED) != 0) iStateId = OS.CBS_CHECKEDPRESSED;
+			if ((state & DrawData.DISABLED) != 0) iStateId = OS.CBS_CHECKEDDISABLED;
+		} else {
+			iStateId = OS.CBS_UNCHECKEDNORMAL;
+			if ((state & DrawData.HOT) != 0) iStateId = OS.CBS_UNCHECKEDHOT;
+			if ((state & DrawData.PRESSED) != 0) iStateId = OS.CBS_UNCHECKEDPRESSED;
+			if ((state & DrawData.DISABLED) != 0) iStateId = OS.CBS_UNCHECKEDDISABLED;
+		}
+	}
+	return new int[]{iPartId, iStateId};
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	if (OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ()) {
+		//TODO - arrow and toggle
+		int /*long*/ hTheme = OS.OpenThemeData(0, getClassId());
+		RECT rect = new RECT ();
+		rect.left = bounds.x;
+		rect.right = bounds.x + bounds.width;
+		rect.top = bounds.y;
+		rect.bottom = bounds.y + bounds.height;
+		int[] part = getPartId(DrawData.WIDGET_WHOLE);
+		if ((style & (SWT.CHECK | SWT.RADIO)) != 0) {
+			SIZE size = new SIZE();
+			OS.GetThemePartSize(hTheme, gc.handle, part[0], part[1], rect, 2, size);
+			rect.right = rect.left + size.cx;
+			OS.DrawThemeBackground (hTheme, gc.handle, part[0], part[1], rect, null);			
+			rect.left = rect.right + 3;
+			rect.right = rect.left + bounds.width - size.cx - 3;
+		} else {
+			OS.DrawThemeBackground (hTheme, gc.handle, part[0], part[1], rect, null);
+		}
+		Rectangle clientArea = this.clientArea;
+		if (clientArea != null) {
+			RECT contentRect = new RECT();
+			OS.GetThemeBackgroundContentRect(hTheme, gc.handle, part[0], part[1], rect, contentRect);				
+			clientArea.x = contentRect.left;
+			clientArea.y = contentRect.top;
+			clientArea.width = contentRect.right - contentRect.left;
+			clientArea.height = contentRect.bottom - contentRect.top;
+		}
+		OS.CloseThemeData(hTheme);
+	}
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	if (!(OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ())) return DrawData.WIDGET_NOWHERE;
+	if (!bounds.contains(position)) return DrawData.WIDGET_NOWHERE;
+	int /*long*/ hTheme = OS.OpenThemeData(0, getClassId());
+	RECT rect = new RECT ();
+	rect.left = bounds.x;
+	rect.right = bounds.x + bounds.width;
+	rect.top = bounds.y;
+	rect.bottom = bounds.y + bounds.height;
+	POINT pt = new POINT();
+	pt.x = position.x;
+	pt.y = position.y;
+	short[] code = new short[1];
+	int[] part = getPartId(DrawData.WIDGET_WHOLE);
+	OS.HitTestThemeBackground(hTheme, 0, part[0], part[1], 0, rect, 0, pt, code);
+	OS.CloseThemeData (hTheme);
+	return code[0] == OS.HTNOWHERE ?  DrawData.WIDGET_NOWHERE : DrawData.WIDGET_WHOLE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ComboDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ComboDrawData.java
new file mode 100644
index 0000000..49da9f3
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ComboDrawData.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.internal.theme;
+
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.win32.*;
+
+public class ComboDrawData extends DrawData {
+	
+public ComboDrawData() {
+	state = new int[2];
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	if (OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ()) {
+		int /*long*/ hTheme = OS.OpenThemeData(0, EDIT);
+		RECT rect = new RECT ();
+		rect.left = bounds.x;
+		rect.right = bounds.x + bounds.width;
+		rect.top = bounds.y;
+		rect.bottom = bounds.y + bounds.height;
+		int[] part = getPartId(DrawData.WIDGET_WHOLE);
+		OS.DrawThemeBackground (hTheme, gc.handle, part[0], part[1], rect, null);
+		RECT contentRect = new RECT();
+		OS.GetThemeBackgroundContentRect(hTheme, gc.handle, part[0], part[1], rect, contentRect);				
+		Rectangle clientArea = this.clientArea;
+		if (clientArea != null) {
+			clientArea.x = contentRect.left;
+			clientArea.y = contentRect.top;
+			clientArea.width = contentRect.right - contentRect.left;
+			clientArea.height = contentRect.bottom - contentRect.top;
+		}
+		OS.CloseThemeData(hTheme);
+		hTheme = OS.OpenThemeData(0, getClassId());
+		int width = OS.GetThemeSysSize(hTheme, OS.SM_CXVSCROLL);
+		rect.left = contentRect.right - width;
+		rect.top = contentRect.top;
+		rect.right = contentRect.right;
+		rect.bottom = contentRect.bottom;
+		part = getPartId(DrawData.COMBO_ARROW);
+		OS.DrawThemeBackground (hTheme, gc.handle, part[0], part[1], rect, null);
+		OS.CloseThemeData(hTheme);
+		if (clientArea != null) {
+			clientArea.width -= width;
+		}
+	}
+}
+
+char[] getClassId() {
+	return COMBOBOX;
+}
+
+int[] getPartId(int part) {
+	int state = this.state[part];
+	int iPartId = 0, iStateId = 0;
+	switch (part) {
+		case DrawData.WIDGET_WHOLE: 
+			iPartId = OS.EP_EDITTEXT;
+			iStateId = OS.ETS_NORMAL;
+			if ((state & DrawData.DISABLED) != 0) iStateId = OS.ETS_DISABLED;
+			break;
+		case DrawData.COMBO_ARROW:
+			iPartId = OS.CP_DROPDOWNBUTTON;
+			iStateId = OS.CBXS_NORMAL;
+			if ((state & DrawData.DISABLED) != 0) iStateId = OS.CBXS_DISABLED;
+			if ((state & DrawData.HOT) != 0) iStateId = OS.CBXS_HOT;
+			if ((state & DrawData.PRESSED) != 0) iStateId = OS.CBXS_PRESSED;
+			break;
+	}
+	return new int[]{iPartId, iStateId};	
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	if (!(OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ())) return DrawData.WIDGET_NOWHERE;
+	if (!bounds.contains(position)) return DrawData.WIDGET_NOWHERE;
+	int /*long*/ hTheme = OS.OpenThemeData(0, EDIT);
+	int[] part = getPartId(DrawData.WIDGET_WHOLE);
+	int iPartId = part[0];
+	int iStateId = part[1];
+	RECT rect = new RECT ();
+	rect.left = bounds.x;
+	rect.right = bounds.x + bounds.width;
+	rect.top = bounds.y;
+	rect.bottom = bounds.y + bounds.height;
+	RECT contentRect = new RECT();
+	OS.GetThemeBackgroundContentRect(hTheme, 0, iPartId, iStateId, rect, contentRect);
+	OS.CloseThemeData(hTheme);
+	hTheme = OS.OpenThemeData(0, getClassId());
+	int width = OS.GetThemeSysSize(hTheme, OS.SM_CXVSCROLL);
+	OS.CloseThemeData(hTheme);
+	Rectangle arrowRect = new Rectangle(contentRect.right - width, contentRect.top, contentRect.bottom - contentRect.top, width);
+	if (arrowRect.contains(position)) return DrawData.COMBO_ARROW;
+	return DrawData.WIDGET_WHOLE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/DrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/DrawData.java
new file mode 100644
index 0000000..4ba8939
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/DrawData.java
@@ -0,0 +1,178 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.win32.*;
+
+public class DrawData {
+	public int style;
+	public int[] state;
+	public Rectangle clientArea;
+
+	/** Part states */
+	public static final int SELECTED = 1 << 1;
+	public static final int FOCUSED = 1 << 2;
+	public static final int PRESSED = 1 << 3;
+	public static final int ACTIVE = 1 << 4;
+	public static final int DISABLED = 1 << 5;
+	public static final int HOT = 1 << 6;
+	public static final int DEFAULTED = 1 << 7;
+	public static final int GRAYED = 1 << 8;
+	
+	/** Text and Image drawing flags */
+	public static final int DRAW_LEFT = 1 << 4;
+	public static final int DRAW_TOP = 1 << 5;
+	public static final int DRAW_RIGHT = 1 << 6;
+	public static final int DRAW_BOTTOM = 1 << 7;
+	public static final int DRAW_HCENTER = 1 << 8;
+	public static final int DRAW_VCENTER = 1 << 9;
+
+	/** Widget parts */
+	public static final int WIDGET_NOWHERE = -1;
+	public static final int WIDGET_WHOLE = 0;
+
+	/** Scrollbar parts */
+	public static final int SCROLLBAR_UP_ARROW = 1;
+	public static final int SCROLLBAR_DOWN_ARROW = 2;
+	public static final int SCROLLBAR_LEFT_ARROW = SCROLLBAR_UP_ARROW;
+	public static final int SCROLLBAR_RIGHT_ARROW = SCROLLBAR_DOWN_ARROW;
+	public static final int SCROLLBAR_UP_TRACK = 3;
+	public static final int SCROLLBAR_DOWN_TRACK = 4;
+	public static final int SCROLLBAR_LEFT_TRACK = SCROLLBAR_UP_TRACK;
+	public static final int SCROLLBAR_RIGHT_TRACK = SCROLLBAR_DOWN_TRACK;
+	public static final int SCROLLBAR_THUMB = 5;
+	
+	/** Scale parts */
+	public static final int SCALE_UP_TRACK = 1;
+	public static final int SCALE_LEFT_TRACK = SCALE_UP_TRACK;
+	public static final int SCALE_DOWN_TRACK = 2;
+	public static final int SCALE_RIGHT_TRACK = SCALE_DOWN_TRACK;
+	public static final int SCALE_THUMB = 3;
+	
+	/** ToolItem parts */
+	public static final int TOOLITEM_ARROW = 1;
+	
+	/** Combo parts */
+	public static final int COMBO_ARROW = 1;
+	
+	static final char [] EDIT = new char [] {'E', 'D', 'I', 'T', 0};
+	static final char [] COMBOBOX = new char [] {'C', 'O', 'M', 'B', 'O', 'B', 'O', 'X', 0};
+	static final char [] BUTTON = new char [] {'B', 'U', 'T', 'T', 'O', 'N', 0};
+	static final char [] PROGRESS = new char [] {'P', 'R', 'O', 'G', 'R', 'E', 'S', 'S', 0};
+	static final char [] SCROLLBAR = new char [] {'S', 'C', 'R', 'O', 'L', 'L', 'B', 'A', 'R', 0};
+	static final char [] TAB = new char [] {'T', 'A', 'B', 0};
+	static final char [] TRACKBAR = new char [] {'T', 'R', 'A', 'C', 'K', 'B', 'A', 'R', 0};
+	static final char [] TOOLBAR = new char [] {'T', 'O', 'O', 'L', 'B', 'A', 'R', 0};
+	static final char [] TREEVIEW = new char [] {'T', 'R', 'E', 'E', 'V', 'I', 'E', 'W', 0};
+
+public DrawData() {
+	state = new int[1];
+}
+
+Rectangle computeTrim(Theme theme, GC gc) {
+	return new Rectangle(clientArea.x, clientArea.y, clientArea.width, clientArea.height);
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	
+}
+
+void drawImage(Theme theme, Image image, GC gc, Rectangle bounds) {
+	if (OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ()) {
+//		int /*long*/ hTheme = OS.OpenThemeData(0, getClassId());
+//		RECT rect = new RECT ();
+//		rect.left = bounds.x;
+//		rect.right = bounds.x + bounds.width;
+//		rect.top = bounds.y;
+//		rect.bottom = bounds.y + bounds.height;
+//		//TODO - remove reference to widgets.
+//		ImageList imageList = new ImageList(0);
+//		int imageIndex = imageList.add(image);
+//		int[] part = getPartId(DrawData.WIDGET_WHOLE);
+//		OS.DrawThemeIcon(hTheme, gc.handle, part[0], part[1], rect, imageList.getHandle(), imageIndex);
+//		imageList.dispose();
+//		OS.CloseThemeData(hTheme);
+		Rectangle rect = image.getBounds();
+		gc.drawImage(image, 0, 0, rect.width, rect.height, bounds.x, bounds.y, bounds.width, bounds.height);
+	}
+}
+
+void drawText(Theme theme, String text, int flags, GC gc, Rectangle bounds) { 
+	if (OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ()) {
+		int /*long*/ hTheme = OS.OpenThemeData(0, getClassId());
+		char[] chars = new char[text.length()];
+		text.getChars(0, chars.length, chars, 0);
+		int textFlags = OS.DT_SINGLELINE;
+		if ((flags & DrawData.DRAW_LEFT) != 0) textFlags |= OS.DT_LEFT;
+		if ((flags & DrawData.DRAW_HCENTER) != 0) textFlags |= OS.DT_CENTER;
+		if ((flags & DrawData.DRAW_RIGHT) != 0) textFlags |= OS.DT_RIGHT;
+		if ((flags & DrawData.DRAW_TOP) != 0) textFlags |= OS.DT_TOP;
+		if ((flags & DrawData.DRAW_BOTTOM) != 0) textFlags |= OS.DT_BOTTOM;
+		if ((flags & DrawData.DRAW_VCENTER) != 0) textFlags |= OS.DT_VCENTER;
+		RECT rect = new RECT ();
+		rect.left = bounds.x;
+		rect.right = bounds.x + bounds.width;
+		rect.top = bounds.y;
+		rect.bottom = bounds.y + bounds.height;
+		int[] part = getPartId(DrawData.WIDGET_WHOLE);
+		int iPartId = part[0];
+		int iStateId = part[1];
+		OS.DrawThemeText(hTheme, gc.handle, iPartId, iStateId, chars, chars.length, textFlags, 0, rect);
+		OS.CloseThemeData(hTheme);
+	}
+}
+
+char[] getClassId() {
+	return BUTTON;
+}
+
+int[] getPartId(int part) {
+	return new int[]{0, 0};
+}
+
+Rectangle getBounds(int part, Rectangle bounds) {
+	return new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height);
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	return -1;
+}
+
+Rectangle measureText(Theme theme, String text, int flags, GC gc, Rectangle bounds) {
+	if (!(OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ())) return new Rectangle(0, 0, 0, 0);
+	int /*long*/ hTheme = OS.OpenThemeData(0, getClassId());
+	char[] chars = new char[text.length()];
+	text.getChars(0, chars.length, chars, 0);
+	//TODO - constant for VCENTER and flags
+	int textFlags = 0;//OS.DT_VCENTER | OS.DT_SINGLELINE | OS.DT_CALCRECT;
+	if ((style & SWT.LEFT) != 0) textFlags |= OS.DT_LEFT;
+	if ((style & SWT.CENTER) != 0) textFlags |= OS.DT_CENTER;
+	if ((style & SWT.RIGHT) != 0) textFlags |= OS.DT_RIGHT;
+	RECT extent = new RECT();
+	RECT rect = null;
+	if (bounds != null) {
+		rect = new RECT();
+		rect.left = bounds.x;
+		rect.right = bounds.x + bounds.width;
+		rect.top = bounds.y;
+		rect.bottom = bounds.y + bounds.height;
+	}
+	int[] part = getPartId(DrawData.WIDGET_WHOLE);
+	int iPartId = part[0];
+	int iStateId = part[1];
+	OS.GetThemeTextExtent(hTheme, gc.handle, iPartId, iStateId, chars, chars.length, textFlags, rect, extent);
+	OS.CloseThemeData(hTheme);
+	return new Rectangle(extent.left, extent.top, extent.right - extent.left, extent.bottom - extent.top);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ExpanderDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ExpanderDrawData.java
new file mode 100644
index 0000000..04bf337
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ExpanderDrawData.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.win32.*;
+
+public class ExpanderDrawData extends DrawData {
+	
+public ExpanderDrawData() {
+	state = new int[1];
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	if (OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ()) {
+		int /*long*/ hTheme = OS.OpenThemeData(0, getClassId());
+		int iStateId = OS.GLPS_CLOSED;
+		if ((this.style & SWT.DOWN) != 0) iStateId = OS.GLPS_OPENED;
+		SIZE size = new SIZE();
+		OS.GetThemePartSize(hTheme, gc.handle, OS.TVP_GLYPH, iStateId, null, OS.TS_TRUE, size);
+		RECT rect = new RECT ();
+		rect.left = bounds.x;
+		rect.right = rect.left + size.cx;
+		rect.top = bounds.y;
+		rect.bottom = rect.top + size.cy;
+		OS.DrawThemeBackground (hTheme, gc.handle, OS.TVP_GLYPH, iStateId, rect, null);		
+		OS.CloseThemeData (hTheme);
+	}
+}
+
+char[] getClassId() {
+	return TREEVIEW;
+}
+
+int[] getPartId(int part) {
+	int iPartId = OS.TVP_GLYPH;
+	int iStateId = OS.GLPS_CLOSED;
+	if ((this.style & SWT.DOWN) != 0) iStateId = OS.GLPS_OPENED;
+	return new int[]{iPartId, iStateId};	
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	if (!(OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ())) return DrawData.WIDGET_NOWHERE;
+	if (!bounds.contains(position)) return DrawData.WIDGET_NOWHERE;
+	int /*long*/ hTheme = OS.OpenThemeData(0, getClassId());
+	SIZE size = new SIZE();
+	int[] part = getPartId(DrawData.WIDGET_WHOLE);
+	OS.GetThemePartSize(hTheme, 0, part[0], part[1], null, OS.TS_TRUE, size);
+	OS.CloseThemeData (hTheme);
+	if (new Rectangle(bounds.x, bounds.y, size.cx, size.cy).contains(position)) {
+		return DrawData.WIDGET_WHOLE;
+	}
+	return DrawData.WIDGET_NOWHERE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/GroupDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/GroupDrawData.java
new file mode 100644
index 0000000..e02eaed
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/GroupDrawData.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.internal.theme;
+
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.win32.*;
+
+public class GroupDrawData extends DrawData {
+	public int headerWidth;
+	public int headerHeight;
+	public Rectangle headerArea;
+	
+public GroupDrawData() {
+	state = new int[1];
+}
+
+static final int GROUP_HEADER_X = 9;
+static final int GROUP_HEADER_PAD = 2;
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	if (OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ()) {
+		int /*long*/ hTheme = OS.OpenThemeData(0, getClassId());
+		RECT rect = new RECT ();
+		rect.left = bounds.x;
+		rect.right = bounds.x + bounds.width;
+		rect.top = bounds.y + this.headerHeight / 2;
+		rect.bottom = bounds.y + bounds.height;
+		int headerX = bounds.x + GROUP_HEADER_X, headerY = bounds.y;
+		int savedDC = OS.SaveDC(gc.handle);
+		OS.ExcludeClipRect (gc.handle, headerX - GROUP_HEADER_PAD, headerY, headerX + this.headerWidth + GROUP_HEADER_PAD, headerY + this.headerHeight);
+		int[] part = getPartId(DrawData.WIDGET_WHOLE);
+		OS.DrawThemeBackground(hTheme, gc.handle, part[0], part[1], rect, null);
+		OS.RestoreDC(gc.handle, savedDC);
+		Rectangle headerArea = this.headerArea;
+		if (headerArea != null) {
+			headerArea.x = headerX;
+			headerArea.y = headerY;
+			headerArea.width = this.headerWidth;
+			headerArea.height = this.headerHeight;
+		}
+		Rectangle clientArea = this.clientArea;			
+		if (clientArea != null) {
+			RECT contentRect = new RECT();
+			OS.GetThemeBackgroundContentRect(hTheme, gc.handle, part[0], part[1], rect, contentRect);				
+			clientArea.x = contentRect.left;
+			clientArea.y = contentRect.top;
+			clientArea.width = contentRect.right - contentRect.left;
+			clientArea.height = contentRect.bottom - contentRect.top;
+		}
+		OS.CloseThemeData(hTheme);
+	}
+}
+
+int[] getPartId(int part) {
+	int state = this.state[part];
+	int iPartId = OS.BP_GROUPBOX, iStateId = OS.GBS_NORMAL;			
+	if ((state & DrawData.DISABLED) != 0) iStateId = OS.GBS_DISABLED;
+	return new int[]{iPartId, iStateId};	
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+   	return bounds.contains(position) ? DrawData.WIDGET_WHOLE : DrawData.WIDGET_NOWHERE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ProgressBarDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ProgressBarDrawData.java
new file mode 100644
index 0000000..00b72ee
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ProgressBarDrawData.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.win32.*;
+
+public class ProgressBarDrawData extends RangeDrawData {
+
+public ProgressBarDrawData() {
+	state = new int[1];
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	if (OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ()) {
+		int /*long*/ hTheme = OS.OpenThemeData(0, getClassId());
+		RECT rect = new RECT ();
+		rect.left = bounds.x;
+		rect.right = rect.left + bounds.width;
+		rect.top = bounds.y;
+		rect.bottom = rect.top + bounds.height;
+		int[] buffer = new int[1];
+		OS.GetThemeInt(hTheme, 0, 0, OS.PROGRESSCHUNKSIZE, buffer);
+		int chunkSize = buffer[0];
+		OS.GetThemeInt(hTheme, 0, 0, OS.PROGRESSSPACESIZE, buffer);
+		int spaceSize = buffer[0];		
+		RECT content = new RECT();
+		int[] part = getPartId(DrawData.WIDGET_WHOLE);
+		if ((style & SWT.VERTICAL) != 0) {
+			OS.GetThemeBackgroundContentRect(hTheme, gc.handle, part[0], part[1], rect, content);
+			OS.DrawThemeBackground(hTheme, gc.handle, part[0], part[1], rect, null);
+			int top = content.bottom - (((content.bottom - content.top) * (selection - minimum)) / (maximum - minimum));
+			content.top = content.bottom - chunkSize;
+			while (content.top >= top) {
+				OS.DrawThemeBackground(hTheme, gc.handle, OS.PP_CHUNKVERT, 0, content, null);
+				content.bottom -= chunkSize + spaceSize;
+				content.top = content.bottom - chunkSize;
+			}
+			if (selection != 0) {
+				OS.DrawThemeBackground(hTheme, gc.handle, OS.PP_CHUNKVERT, 0, content, null);
+			}
+		} else {
+			OS.GetThemeBackgroundContentRect(hTheme, gc.handle, part[0], part[1], rect, content);
+			OS.DrawThemeBackground(hTheme, gc.handle, part[0], part[1], rect, null);
+			int right = content.left + (((content.right - content.left) * (selection - minimum)) / (maximum - minimum));
+			content.right = content.left + chunkSize;
+			while (content.right <= right) {
+				OS.DrawThemeBackground(hTheme, gc.handle, OS.PP_CHUNK, 0, content, null);
+				content.left += chunkSize + spaceSize;
+				content.right = content.left + chunkSize;
+			}
+			if (selection != 0) {
+				OS.DrawThemeBackground(hTheme, gc.handle, OS.PP_CHUNK, 0, content, null);				
+			}
+		}
+		OS.CloseThemeData (hTheme);
+	}
+}
+
+char[] getClassId() {
+	return PROGRESS;
+}
+
+int[] getPartId(int part) {
+	int iPartId = 0, iStateId = 0;	
+	if ((style & SWT.VERTICAL) != 0) {
+		iPartId = OS.PP_BARVERT;
+	} else {
+		iPartId = OS.PP_BAR;
+	}
+	return new int[]{iPartId, iStateId};	
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	return bounds.contains(position) ? DrawData.WIDGET_WHOLE : DrawData.WIDGET_NOWHERE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/RangeDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/RangeDrawData.java
new file mode 100644
index 0000000..51f7bca
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/RangeDrawData.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.graphics.*;
+
+public class RangeDrawData extends DrawData {
+	public int selection;
+	public int minimum;
+	public int maximum;
+
+int getSelection(Point position, Rectangle bounds) {
+	return 0;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ScaleDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ScaleDrawData.java
new file mode 100644
index 0000000..5493a67
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ScaleDrawData.java
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.win32.*;
+
+public class ScaleDrawData extends RangeDrawData {
+	public int increment;
+	public int pageIncrement;
+	
+	static final int TICS_MARGIN = 10;
+
+public ScaleDrawData() {
+	state = new int[4];
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	if (OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ()) {
+		// TODO - drawScale not done
+		int style = this.style;
+		int minimum = this.minimum;
+		int maximum = this.maximum;
+		int selection = this.selection;
+		int pageIncrement = this.pageIncrement;
+		int /*long*/ hTheme = OS.OpenThemeData(0, getClassId());
+		RECT rect = new RECT ();
+		rect.left = bounds.x;
+		rect.right = rect.left + bounds.width;
+		rect.top = bounds.y;
+		rect.bottom = rect.top + bounds.height;
+		SIZE size = new SIZE();
+		if ((style & SWT.VERTICAL) != 0) {
+			OS.GetThemePartSize(hTheme, gc.handle, OS.TKP_TRACKVERT, 0, null, OS.TS_TRUE, size);
+			int trackWidth = size.cx - 1;
+			OS.GetThemePartSize(hTheme, gc.handle, OS.TKP_THUMBVERT, 0, null, OS.TS_TRUE, size);
+			int thumbWidth = size.cx, thumbHeight = size.cy;
+			OS.GetThemePartSize(hTheme, gc.handle, OS.TKP_TICS, 0, rect, OS.TS_TRUE, size);
+			int ticWidth = size.cx;
+			int marginX = (thumbWidth - trackWidth) / 2;
+			int marginY = marginX;
+			marginX += TICS_MARGIN;
+			rect.left += marginX;
+			rect.top += marginY;
+			rect.right = rect.left + trackWidth;
+			rect.bottom -= marginY;
+			int trackHeight = rect.bottom - rect.top;
+			OS.DrawThemeBackground(hTheme, gc.handle, OS.TKP_TRACKVERT, 0, rect, null);
+			rect.top += ((trackHeight - thumbHeight) * (selection - minimum)) / Math.max(1, maximum - minimum);
+			rect.left -= (thumbWidth - trackWidth) / 2;
+			rect.right = rect.left + thumbWidth;
+			rect.bottom = rect.top + thumbHeight;
+			OS.DrawThemeBackground(hTheme, gc.handle, OS.TKP_THUMBVERT, 0, rect, null);
+			rect.top = bounds.y + marginY + thumbHeight / 2;
+			rect.bottom = rect.top + 1;
+			for (int sel = minimum; sel <= maximum; sel += pageIncrement) {
+				rect.left = bounds.x + TICS_MARGIN / 2;
+				rect.right = rect.left + ticWidth;
+				if (sel != minimum && sel != maximum) rect.left++;
+				rect.top = bounds.y + marginY + thumbHeight / 2;
+				rect.top += ((trackHeight - thumbHeight) * (sel - minimum)) / Math.max(1, maximum - minimum);
+				rect.bottom = rect.top + 1;
+				//TODO - why tics are ot drawn
+				OS.DrawThemeBackground(hTheme, gc.handle, OS.TKP_TICSVERT, 1, rect, null);
+				gc.drawLine(rect.left, rect.top, rect.right, rect.top);
+				rect.left = bounds.x + TICS_MARGIN + thumbWidth + 1;
+				rect.right = rect.left + ticWidth;
+				if (sel != minimum && sel != maximum) rect.right--;
+				//TODO - why tics are ot drawn
+				OS.DrawThemeBackground(hTheme, gc.handle, OS.TKP_TICSVERT, 1, rect, null);
+				gc.drawLine(rect.left, rect.top, rect.right, rect.top);
+			}
+		} else {
+
+		}
+		OS.CloseThemeData (hTheme);
+	}
+}
+
+char[] getClassId() {
+	return TRACKBAR;
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	return bounds.contains(position) ? DrawData.WIDGET_WHOLE : DrawData.WIDGET_NOWHERE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ScrollBarDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ScrollBarDrawData.java
new file mode 100644
index 0000000..d71d9d5
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ScrollBarDrawData.java
@@ -0,0 +1,288 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.win32.*;
+
+public class ScrollBarDrawData extends RangeDrawData {
+	public int thumb;
+	public int increment;
+	public int pageIncrement;
+	
+public ScrollBarDrawData() {
+	state = new int[6];
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	if (OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ()) {
+		int /*long*/ hTheme = OS.OpenThemeData(0, getClassId());
+		RECT rect = new RECT ();
+		if ((style & SWT.VERTICAL) != 0) {
+			int width = OS.GetThemeSysSize(hTheme, OS.SM_CXVSCROLL);
+			rect.left = bounds.x;
+			rect.right = rect.left + bounds.width;
+			rect.top = bounds.y;
+			rect.bottom = rect.top + width;
+			int[] part = getPartId(DrawData.SCROLLBAR_UP_ARROW);
+			OS.DrawThemeBackground (hTheme, gc.handle, part[0], part[1], rect, null);
+			rect.bottom = bounds.y + bounds.height;
+			rect.top = rect.bottom - width;
+			part = getPartId(DrawData.SCROLLBAR_DOWN_ARROW);
+			OS.DrawThemeBackground (hTheme, gc.handle, part[0], part[1], rect, null);
+			int totalWidth = bounds.height - 2 * width;
+			int thumbWidth = Math.max(width / 2, (totalWidth * thumb) / Math.max(1, (maximum - minimum)));//BAD
+			int thumbPos = bounds.y + width + Math.max(0, (totalWidth * selection) / Math.max(1, (maximum - minimum)));
+			rect.top = bounds.y + width;		
+			rect.bottom = thumbPos;
+			part = getPartId(DrawData.SCROLLBAR_UP_TRACK);
+			OS.DrawThemeBackground (hTheme, gc.handle, part[0], part[1], rect, null);
+			rect.top = rect.bottom;
+			rect.bottom = rect.top + thumbWidth;
+			part = getPartId(DrawData.SCROLLBAR_THUMB);
+			OS.DrawThemeBackground (hTheme, gc.handle, part[0], part[1], rect, null);
+			OS.DrawThemeBackground (hTheme, gc.handle, OS.SBP_GRIPPERVERT, part[1], rect, null);
+			rect.top = rect.bottom;		
+			rect.bottom = bounds.y + bounds.height - width;
+			part = getPartId(DrawData.SCROLLBAR_DOWN_TRACK);
+			OS.DrawThemeBackground (hTheme, gc.handle, part[0], part[1], rect, null);
+		} else {
+			//TODO - why SM_CXHSCROLL = 0?
+			int height = OS.GetThemeSysSize(hTheme, OS.SM_CXVSCROLL);
+			rect.top = bounds.y;
+			rect.bottom = rect.top + bounds.height;
+			rect.left = bounds.x;
+			rect.right = rect.left + height;
+			int[] part = getPartId(DrawData.SCROLLBAR_LEFT_ARROW);
+			OS.DrawThemeBackground (hTheme, gc.handle, part[0], part[1], rect, null);
+			rect.right = bounds.x + bounds.width;
+			rect.left = rect.right - height;
+			part = getPartId(DrawData.SCROLLBAR_RIGHT_ARROW);
+			OS.DrawThemeBackground (hTheme, gc.handle, part[0], part[1], rect, null);
+			int totalWidth = bounds.width - 2 * height;
+			int thumbWidth = Math.max(height / 2, (totalWidth * thumb) / (maximum - minimum));//BAD
+			int thumbPos = bounds.x + height + Math.max(0, (totalWidth * selection) / Math.max(1, (maximum - minimum)));
+			rect.left = bounds.x + height;		
+			rect.right = thumbPos;
+			part = getPartId(DrawData.SCROLLBAR_UP_TRACK);
+			OS.DrawThemeBackground (hTheme, gc.handle, part[0], part[1], rect, null);
+			rect.left = rect.right;
+			rect.right = rect.left + thumbWidth;
+			part = getPartId(DrawData.SCROLLBAR_THUMB);
+			OS.DrawThemeBackground (hTheme, gc.handle, part[0], part[1], rect, null);
+			OS.DrawThemeBackground (hTheme, gc.handle, OS.SBP_GRIPPERHORZ, part[1], rect, null);
+			rect.left = rect.right;		
+			rect.right = bounds.x + bounds.width - height;
+			part = getPartId(DrawData.SCROLLBAR_DOWN_TRACK);
+			OS.DrawThemeBackground (hTheme, gc.handle, part[0], part[1], rect, null);
+		}
+		OS.CloseThemeData (hTheme);
+	}
+}
+
+char[] getClassId() {
+	return SCROLLBAR;
+}
+
+int[] getPartId(int part) {
+	int iPartId = 0, iStateId = 0;
+	int state = this.state[part];
+	switch (part) {
+		case DrawData.SCROLLBAR_UP_ARROW:
+			iPartId = OS.SBP_ARROWBTN;
+			if ((style & SWT.VERTICAL) != 0) {
+				iStateId = OS.ABS_UPNORMAL;
+				if ((state & DrawData.HOT) != 0) iStateId = OS.ABS_UPHOT;
+				if ((state & DrawData.PRESSED) != 0) iStateId = OS.ABS_UPPRESSED;
+				if ((state & DrawData.DISABLED) != 0) iStateId = OS.ABS_UPDISABLED;
+			} else {
+				iStateId = OS.ABS_LEFTNORMAL;
+				if ((state & DrawData.HOT) != 0) iStateId = OS.ABS_LEFTHOT;
+				if ((state & DrawData.PRESSED) != 0) iStateId = OS.ABS_LEFTPRESSED;
+				if ((state & DrawData.DISABLED) != 0) iStateId = OS.ABS_LEFTDISABLED;				
+			}
+			break;
+		case DrawData.SCROLLBAR_DOWN_ARROW:
+			iPartId = OS.SBP_ARROWBTN;
+			if ((style & SWT.VERTICAL) != 0) {
+				iStateId = OS.ABS_DOWNNORMAL;
+				if ((state & DrawData.HOT) != 0) iStateId = OS.ABS_DOWNHOT;
+				if ((state & DrawData.PRESSED) != 0) iStateId = OS.ABS_DOWNPRESSED;
+				if ((state & DrawData.DISABLED) != 0) iStateId = OS.ABS_DOWNDISABLED;
+			} else {
+				iStateId = OS.ABS_RIGHTNORMAL;
+				if ((state & DrawData.HOT) != 0) iStateId = OS.ABS_RIGHTHOT;
+				if ((state & DrawData.PRESSED) != 0) iStateId = OS.ABS_RIGHTPRESSED;
+				if ((state & DrawData.DISABLED) != 0) iStateId = OS.ABS_RIGHTDISABLED;
+			}
+			break;
+		case DrawData.WIDGET_WHOLE:
+		case DrawData.SCROLLBAR_THUMB:
+			if ((style & SWT.VERTICAL) != 0) {
+				iPartId = OS.SBP_THUMBBTNVERT;
+			} else {
+				iPartId = OS.SBP_THUMBBTNHORZ;
+			}
+			break;
+		case DrawData.SCROLLBAR_UP_TRACK:
+			if ((style & SWT.VERTICAL) != 0) {
+				iPartId = OS.SBP_UPPERTRACKVERT;
+			} else {
+				iPartId = OS.SBP_UPPERTRACKHORZ;
+			}
+			break;
+		case DrawData.SCROLLBAR_DOWN_TRACK:
+			if ((style & SWT.VERTICAL) != 0) {
+				iPartId = OS.SBP_LOWERTRACKVERT;
+			} else {
+				iPartId = OS.SBP_LOWERTRACKHORZ;
+			}
+			break;
+	}
+	if (part != DrawData.SCROLLBAR_DOWN_ARROW && part != DrawData.SCROLLBAR_UP_ARROW) {
+		iStateId = OS.SCRBS_NORMAL;
+		if ((state & DrawData.HOT) != 0) iStateId = OS.SCRBS_HOT;
+		if ((state & DrawData.PRESSED) != 0) iStateId = OS.SCRBS_PRESSED;
+		if ((state & DrawData.DISABLED) != 0) iStateId = OS.SCRBS_DISABLED;
+	}
+	return new int[]{iPartId, iStateId};	
+}
+
+Rectangle getBounds(int part, Rectangle bounds) {
+	if (OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ()) {
+		int /*long*/ hTheme = OS.OpenThemeData(0, getClassId());
+		if ((style & SWT.VERTICAL) != 0) {
+			int width = OS.GetThemeSysSize(hTheme, OS.SM_CXVSCROLL);
+			int totalWidth = bounds.height - 2 * width;
+			int thumbWidth = Math.max(width / 2, (totalWidth * thumb) / Math.max(1, (maximum - minimum)));//BAD
+			int thumbPos = bounds.y + width + Math.max(0, (totalWidth * selection) / Math.max(1, (maximum - minimum)));
+			switch (part) {
+				case DrawData.SCROLLBAR_DOWN_ARROW:
+					return new Rectangle(bounds.x, bounds.y + bounds.height - width, bounds.width, width);
+				case DrawData.SCROLLBAR_UP_ARROW:
+					return new Rectangle(bounds.x, bounds.y, bounds.width, width);
+				case DrawData.SCROLLBAR_UP_TRACK:
+					return new Rectangle(bounds.x, bounds.y + width, bounds.width, thumbPos - bounds.y - width);
+				case DrawData.SCROLLBAR_THUMB:
+					return new Rectangle(bounds.x, thumbPos, bounds.width, thumbWidth);
+				case DrawData.SCROLLBAR_DOWN_TRACK:
+					return new Rectangle(bounds.x, thumbPos + thumbWidth, bounds.width, bounds.y + bounds.height - width - thumbPos - thumbWidth);
+			}
+		} else {
+			
+		}
+		OS.CloseThemeData (hTheme);
+	}
+	return super.getBounds(part, bounds);
+}
+
+int getSelection(Point position, Rectangle bounds) {
+	if (OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ()) {
+		int /*long*/ hTheme = OS.OpenThemeData(0, getClassId());
+		if ((style & SWT.VERTICAL) != 0) {
+			int width = OS.GetThemeSysSize(hTheme, OS.SM_CXVSCROLL);			
+			int totalWidth = bounds.height - 2 * width;
+			int thumbPos = bounds.y + width + Math.max(0, (totalWidth * selection) / Math.max(1, (maximum - minimum)));
+			thumbPos += position.y;
+			int selection = ((thumbPos - bounds.y - width) * (maximum - minimum)) / totalWidth;
+			return Math.max(0, Math.min(selection, maximum - thumb));
+		} else {
+			
+		}
+		OS.CloseThemeData (hTheme);
+	}
+	return 0;
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	if (!(OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ())) return -1;
+	int /*long*/ hTheme = OS.OpenThemeData(0, getClassId());
+	//TODO - should we take a GC?
+	int hDC = 0;
+	RECT rect = new RECT ();
+	POINT pt = new POINT();
+	pt.x = position.x;
+	pt.y = position.y;
+	short[] code = new short[1];
+	try {
+		if ((style & SWT.VERTICAL) != 0) {
+			int width = OS.GetThemeSysSize(hTheme, OS.SM_CXVSCROLL);
+			rect.left = bounds.x;
+			rect.right = rect.left + bounds.width;
+			rect.top = bounds.y;
+			rect.bottom = rect.top + width;
+			int[] part = getPartId(DrawData.SCROLLBAR_UP_ARROW);
+			OS.HitTestThemeBackground(hTheme, hDC, part[0], part[1], 0, rect, 0, pt, code);
+			if (code[0] != OS.HTNOWHERE) return DrawData.SCROLLBAR_UP_ARROW;
+			rect.bottom = bounds.y + bounds.height;
+			rect.top = rect.bottom - width;
+			part = getPartId(DrawData.SCROLLBAR_DOWN_ARROW);
+			OS.HitTestThemeBackground(hTheme, hDC, part[0], part[1], 0, rect, 0, pt, code);
+			if (code[0] != OS.HTNOWHERE) return DrawData.SCROLLBAR_DOWN_ARROW;
+			int totalWidth = bounds.height - 2 * width;
+			int thumbWidth = Math.max(width / 2, (totalWidth * thumb) / Math.max(1, (maximum - minimum)));//BAD
+			int thumbPos = bounds.y + width + Math.max(0, (totalWidth * selection) / Math.max(1, (maximum - minimum)));
+			rect.top = bounds.y + width;		
+			rect.bottom = thumbPos;
+			part = getPartId(DrawData.SCROLLBAR_THUMB);
+			OS.HitTestThemeBackground(hTheme, hDC, part[0], part[1], 0, rect, 0, pt, code);
+			if (code[0] != OS.HTNOWHERE) return DrawData.SCROLLBAR_UP_TRACK;
+			rect.top = rect.bottom;
+			rect.bottom = rect.top + thumbWidth;
+			part = getPartId(DrawData.SCROLLBAR_UP_TRACK);
+			OS.HitTestThemeBackground(hTheme, hDC, part[0], part[1], 0, rect, 0, pt, code);
+			if (code[0] != OS.HTNOWHERE) return DrawData.SCROLLBAR_THUMB;
+			rect.top = rect.bottom;		
+			rect.bottom = bounds.y + bounds.height - width;
+			part = getPartId(DrawData.SCROLLBAR_DOWN_TRACK);
+			OS.HitTestThemeBackground(hTheme, hDC, part[0], part[1], 0, rect, 0, pt, code);
+			if (code[0] != OS.HTNOWHERE) return DrawData.SCROLLBAR_DOWN_TRACK;
+		} else {
+			int height = OS.GetThemeSysSize(hTheme, OS.SM_CXVSCROLL);//BAD - why SM_CXHSCROLL = 0?
+			rect.top = bounds.y;
+			rect.bottom = rect.top + bounds.height;
+			rect.left = bounds.x;
+			rect.right = rect.left + height;
+			int[] part = getPartId(DrawData.SCROLLBAR_LEFT_ARROW);
+			OS.HitTestThemeBackground(hTheme, hDC, part[0], part[1], 0, rect, 0, pt, code);
+			if (code[0] != OS.HTNOWHERE) return DrawData.SCROLLBAR_UP_ARROW;
+			rect.right = bounds.x + bounds.width;
+			rect.left = rect.right - height;
+			part = getPartId(DrawData.SCROLLBAR_RIGHT_ARROW);
+			OS.HitTestThemeBackground(hTheme, hDC, part[0], part[1], 0, rect, 0, pt, code);
+			if (code[0] != OS.HTNOWHERE) return DrawData.SCROLLBAR_DOWN_ARROW;
+			int totalWidth = bounds.width - 2 * height;
+			int thumbWidth = Math.max(height / 2, (totalWidth * thumb) / (maximum - minimum));//BAD
+			int thumbPos = bounds.x + height + Math.max(0, (totalWidth * selection) / Math.max(1, (maximum - minimum)));
+			rect.left = bounds.x + height;		
+			rect.right = thumbPos;
+			part = getPartId(DrawData.SCROLLBAR_LEFT_TRACK);
+			OS.HitTestThemeBackground(hTheme, hDC, part[0], part[1], 0, rect, 0, pt, code);
+			if (code[0] != OS.HTNOWHERE) return DrawData.SCROLLBAR_UP_TRACK;
+			rect.left = rect.right;
+			rect.right = rect.left + thumbWidth;
+			part = getPartId(DrawData.SCROLLBAR_THUMB);
+			OS.HitTestThemeBackground(hTheme, hDC, part[0], part[1], 0, rect, 0, pt, code);
+			if (code[0] != OS.HTNOWHERE) return DrawData.SCROLLBAR_THUMB;
+			rect.left = rect.right;		
+			rect.right = bounds.x + bounds.width - height;
+			part = getPartId(DrawData.SCROLLBAR_RIGHT_TRACK);
+			OS.HitTestThemeBackground(hTheme, hDC, part[0], part[1], 0, rect, 0, pt, code);
+			if (code[0] != OS.HTNOWHERE) return DrawData.SCROLLBAR_DOWN_TRACK;
+		}
+	} finally {
+		OS.CloseThemeData (hTheme);
+	}
+	return DrawData.WIDGET_NOWHERE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/TabFolderDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/TabFolderDrawData.java
new file mode 100644
index 0000000..b2048b3
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/TabFolderDrawData.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.internal.theme;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.win32.*;
+
+public class TabFolderDrawData extends DrawData {
+	public int tabsWidth;
+	public int tabsHeight;
+	public Rectangle tabsArea;
+	public int selectedX;
+	public int selectedWidth;
+	public int spacing;
+	
+public TabFolderDrawData() {
+	state = new int[1];
+	if (SWT.getPlatform().equals("gtk")) {
+		spacing = -2;
+	}
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	if (OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ()) {
+		int /*long*/ hTheme = OS.OpenThemeData(0, getClassId());
+		RECT rect = new RECT ();
+		rect.left = bounds.x;
+		rect.right = bounds.x + bounds.width;
+		rect.top = bounds.y;
+		if ((style & SWT.BOTTOM) != 0) {
+			rect.bottom = bounds.y + bounds.height - tabsHeight;
+		} else {
+			rect.top += tabsHeight;
+			rect.bottom = bounds.y + bounds.height;
+		}
+		int[] part = getPartId(DrawData.WIDGET_WHOLE);
+		OS.DrawThemeBackground (hTheme, gc.handle, part[0], part[1], rect, null);
+		OS.CloseThemeData(hTheme);
+		if (tabsArea != null) {
+			tabsArea.x = bounds.x;
+			tabsArea.y = bounds.y;
+			tabsArea.width = bounds.width;
+			tabsArea.height = tabsHeight;
+			if ((style & SWT.BOTTOM) != 0) {
+				tabsArea.y += bounds.height - tabsHeight;
+			}
+		}
+	}
+}
+
+char[] getClassId() {
+	return TAB;
+}
+
+int[] getPartId(int part) {
+	int state = this.state[part];
+	int iPartId = OS.TABP_PANE, iStateId = OS.TIS_NORMAL;
+	if ((state & DrawData.DISABLED) != 0) {
+		iStateId = OS.TIS_DISABLED;
+	} else {
+		if ((state & DrawData.HOT) != 0) iStateId = OS.TIS_HOT;
+		if ((state & DrawData.SELECTED) != 0) iStateId = OS.TIS_SELECTED;
+	}
+	return new int[]{iPartId, iStateId};	
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	if (!bounds.contains(position)) return DrawData.WIDGET_NOWHERE;
+	return DrawData.WIDGET_WHOLE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/TabItemDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/TabItemDrawData.java
new file mode 100644
index 0000000..6998c22
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/TabItemDrawData.java
@@ -0,0 +1,129 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.win32.*;
+
+public class TabItemDrawData extends DrawData {
+
+	public TabFolderDrawData parent;
+	public int position;
+	
+	static final int TABITEM_INSET = 2;
+	static final int TABITEM_INSET2 = 6;
+	
+public TabItemDrawData() {
+	state = new int[1];
+}
+
+Rectangle computeTrim(Theme theme, GC gc) {
+	if (OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ()) {
+		int /*long*/ hTheme = OS.OpenThemeData(0, getClassId());
+		int x = clientArea.x, y = clientArea.y, width = clientArea.width, height = clientArea.height;
+		if ((style & SWT.LEFT) != 0) {
+			x -= TABITEM_INSET;
+			width += TABITEM_INSET;
+		}
+		y -= TABITEM_INSET;
+		height += TABITEM_INSET;
+		RECT rect = new RECT ();
+		rect.left = x;
+		rect.right = x + width;
+		rect.top = y;
+		rect.bottom = y + height;
+		RECT extent = new RECT ();
+		int[] part = getPartId(DrawData.WIDGET_WHOLE);
+		OS.GetThemeBackgroundExtent(hTheme, gc.handle, part[0], part[1], rect, extent);
+		extent.left -= TABITEM_INSET2;
+		extent.top -= TABITEM_INSET2;
+		extent.right += TABITEM_INSET2;
+		OS.CloseThemeData(hTheme);
+		return new Rectangle(extent.left, extent.top, extent.right - extent.left, extent.bottom - extent.top);
+	}
+	return new Rectangle(0, 0, 0, 0);
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	if (OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ()) {
+		int state = this.state[DrawData.WIDGET_WHOLE];
+		int /*long*/ hTheme = OS.OpenThemeData(0, getClassId());
+		int x = bounds.x, y = bounds.y, width = bounds.width, height = bounds.height;
+		if ((position & SWT.LEFT) != 0) {
+			x += TABITEM_INSET;
+			width -= TABITEM_INSET;
+		}
+		y += TABITEM_INSET;
+		height -= TABITEM_INSET;
+		if ((state & DrawData.SELECTED) != 0) {
+			//TODO - draws outside of bounds
+			x -= TABITEM_INSET;
+			y -= TABITEM_INSET;
+			width += TABITEM_INSET * 2;
+			height += TABITEM_INSET * 2;
+		}
+		RECT rect = new RECT ();
+		rect.left = x;
+		rect.right = x + width;
+		rect.top = y;
+		rect.bottom = y + height;
+		int[] part = getPartId(DrawData.WIDGET_WHOLE);
+		OS.DrawThemeBackground (hTheme, gc.handle, part[0], part[1], rect, null);
+		OS.CloseThemeData(hTheme);
+		Rectangle clientArea = this.clientArea;
+		if (clientArea != null) {
+			RECT contentRect = new RECT();
+			OS.GetThemeBackgroundContentRect(hTheme, gc.handle, part[0], part[1], rect, contentRect);
+			clientArea.x = contentRect.left;
+			clientArea.y = contentRect.top;
+			clientArea.width = contentRect.right - contentRect.left;
+			clientArea.height = contentRect.bottom - contentRect.top;
+		}
+	}
+}
+
+char[] getClassId() {
+	return TAB;
+}
+
+int[] getPartId(int part) {
+	int state = this.state[part];
+	int iPartId = OS.TABP_TABITEM, iStateId = OS.TIS_NORMAL;
+	if ((style & SWT.LEFT) != 0 && (style & SWT.RIGHT) != 0) {
+		iPartId = OS.TABP_TABITEMLEFTEDGE;
+	} else if ((style & SWT.LEFT) != 0) {
+		iPartId = OS.TABP_TABITEMLEFTEDGE;
+	} else if ((style & SWT.RIGHT) != 0) {
+	}
+	if ((state & DrawData.HOT) != 0) iStateId = OS.TIS_HOT;
+	if ((state & DrawData.FOCUSED) != 0) iStateId = OS.TIS_FOCUSED;
+	if ((state & DrawData.SELECTED) != 0) iStateId = OS.TIS_SELECTED;
+	if ((state & DrawData.DISABLED) != 0) iStateId = OS.TIS_DISABLED;
+	return new int[]{iPartId, iStateId};	
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	if (!bounds.contains(position)) return DrawData.WIDGET_NOWHERE;
+	int style = this.style;
+	int x = bounds.x, y = bounds.y, width = bounds.width, height = bounds.height;
+	if ((style & SWT.LEFT) != 0) {
+		x += TABITEM_INSET;
+		width -= TABITEM_INSET;
+	}
+	y += TABITEM_INSET;
+	height -= TABITEM_INSET;
+	Rectangle content = new Rectangle(x, y, width, height);
+	if (!content.contains(position)) return DrawData.WIDGET_NOWHERE;
+	return DrawData.WIDGET_WHOLE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/Theme.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/Theme.java
new file mode 100644
index 0000000..0b86e9d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/Theme.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+public class Theme {
+	
+	Device device;
+
+public Theme(Device device) {
+	this.device = device;
+}
+
+public Rectangle computeTrim(GC gc, DrawData data) {
+	checkTheme();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	return data.computeTrim(this, gc);
+}
+
+void checkTheme() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+}
+
+public void dispose () {
+	device = null;
+}
+
+public void drawBackground(GC gc, Rectangle bounds, DrawData data) {
+	checkTheme();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	data.draw(this, gc, bounds);
+}
+
+public void drawFocus(GC gc, Rectangle bounds, DrawData data) {
+	checkTheme();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	gc.drawFocus(bounds.x, bounds.y, bounds.width, bounds.height);
+}
+
+public void drawImage(GC gc, Rectangle bounds, DrawData data, Image image, int flags) {
+	checkTheme();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (image == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	data.drawImage(this, image, gc, bounds);
+}
+
+public void drawText(GC gc, Rectangle bounds, DrawData data, String text, int flags) {
+	checkTheme();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (text == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	data.drawText(this, text, flags, gc, bounds);
+}
+
+public Rectangle getBounds(int part, Rectangle bounds, DrawData data) {
+	checkTheme();
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	return data.getBounds(part, bounds);
+}
+
+public int getSelection(Point offset, Rectangle bounds, RangeDrawData data) {
+	checkTheme();
+	if (offset == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	return data.getSelection(offset, bounds);
+}
+
+public int hitBackground(Point position, Rectangle bounds, DrawData data) {
+	checkTheme();
+	if (position == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	return data.hit(this, position, bounds);
+}
+
+public boolean isDisposed() {
+	return device == null;
+}
+
+public Rectangle measureText(GC gc, Rectangle bounds, DrawData data, String text, int flags) {
+	checkTheme();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (text == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	return data.measureText(this, text, flags, gc, bounds);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ToolBarDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ToolBarDrawData.java
new file mode 100644
index 0000000..cce5953
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ToolBarDrawData.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.theme;
+
+import org.eclipse.swt.graphics.*;
+
+public class ToolBarDrawData extends DrawData {
+	
+public ToolBarDrawData() {
+	state = new int[1];
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+}
+
+char[] getClassId() {
+	return TOOLBAR;
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	if (!bounds.contains(position)) return DrawData.WIDGET_NOWHERE;
+	return DrawData.WIDGET_WHOLE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ToolItemDrawData.java b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ToolItemDrawData.java
new file mode 100644
index 0000000..516595f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT Theme/win32/org/eclipse/swt/internal/theme/ToolItemDrawData.java
@@ -0,0 +1,169 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.internal.theme;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.win32.*;
+
+public class ToolItemDrawData extends DrawData {
+
+	public ToolBarDrawData parent;
+	
+	static final int INSET = 1;
+	
+public ToolItemDrawData() {
+	state = new int[2];
+}
+
+Rectangle computeTrim(Theme theme, GC gc) {
+	if (OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ()) {
+		int /*long*/ hTheme = OS.OpenThemeData(0, getClassId());
+		RECT rect = new RECT ();
+		rect.left = clientArea.x;
+		rect.right = clientArea.x + clientArea.width;
+		rect.top = clientArea.y;
+		rect.bottom = clientArea.y + clientArea.height;
+		RECT extent = new RECT ();
+		int[] part = getPartId(DrawData.WIDGET_WHOLE);
+		OS.GetThemeBackgroundExtent(hTheme, gc.handle, part[0], part[1], rect, extent);
+		OS.CloseThemeData(hTheme);
+		if ((style & SWT.DROP_DOWN) != 0) {
+			SIZE size = new SIZE();
+			part = getPartId(DrawData.TOOLITEM_ARROW);
+			OS.GetThemePartSize(hTheme, 0, part[0], part[1], null, OS.TS_TRUE, size);
+			extent.right = Math.max(extent.left, extent.right + size.cx);
+		} else {
+			extent.left -= INSET;
+			extent.top -= INSET;
+			extent.right += INSET;
+			extent.bottom += INSET;
+		}
+		return new Rectangle(extent.left, extent.top, extent.right - extent.left, extent.bottom - extent.top);
+	}
+	return new Rectangle(0, 0, 0, 0);
+}
+
+void draw(Theme theme, GC gc, Rectangle bounds) {
+	if (OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ()) {
+		int /*long*/ hTheme = OS.OpenThemeData(0, getClassId());
+		RECT rect = new RECT ();
+		rect.left = bounds.x;
+		rect.right = bounds.x + bounds.width;
+		rect.top = bounds.y;
+		rect.bottom = bounds.y + bounds.height;
+		SIZE size = null;
+		int[] dropPart = null;
+		if ((style & SWT.DROP_DOWN) != 0) {
+			size = new SIZE();
+			dropPart = getPartId(DrawData.TOOLITEM_ARROW);
+			OS.GetThemePartSize(hTheme, gc.handle, dropPart[0], dropPart[1], rect, OS.TS_TRUE, size);
+			rect.right -= size.cx;
+			if (rect.right < rect.left) rect.right = rect.left;
+		}
+		int[] part = getPartId(DrawData.WIDGET_WHOLE);
+		OS.DrawThemeBackground(hTheme, gc.handle, part[0], part[1], rect, null);
+		Rectangle clientArea = this.clientArea;
+		if (clientArea != null) {
+			RECT contentRect = new RECT();
+			OS.GetThemeBackgroundContentRect(hTheme, gc.handle, part[0], part[1], rect, contentRect);
+			clientArea.x = contentRect.left;
+			clientArea.y = contentRect.top;
+			clientArea.width = contentRect.right - contentRect.left;
+			clientArea.height = contentRect.bottom - contentRect.top;
+		}
+		if ((style & SWT.DROP_DOWN) != 0) {
+			rect.left = rect.right;
+			rect.right = rect.left + size.cx;
+			OS.DrawThemeBackground(hTheme, gc.handle, dropPart[0], dropPart[1], rect, null);			
+		}
+		OS.CloseThemeData(hTheme);
+	}
+}
+
+char[] getClassId() {
+	return TOOLBAR;
+}
+
+int[] getPartId(int part) {
+	int state = this.state[part];
+	int iPartId = 0, iStateId = 0;
+	switch (part) {
+		case DrawData.WIDGET_WHOLE:
+			if ((style & (SWT.PUSH | SWT.CHECK | SWT.RADIO)) != 0) {
+				iPartId = OS.TP_BUTTON;
+			} else if ((style & SWT.DROP_DOWN) != 0) {
+				iPartId = OS.TP_SPLITBUTTON;
+			} else if ((style & SWT.SEPARATOR) != 0) {
+				if ((parent.style & SWT.VERTICAL) != 0) {
+					iPartId = OS.TP_SEPARATORVERT;
+				} else {
+					iPartId = OS.TP_SEPARATOR;
+				}
+			}
+			if ((style & SWT.SEPARATOR) == 0) {
+				if ((state & DrawData.HOT) != 0) {
+					if ((style & (SWT.RADIO | SWT.CHECK)) != 0 && (state & DrawData.SELECTED) != 0) {
+						iStateId = OS.TS_HOTCHECKED;
+					} else {
+						iStateId = OS.TS_HOT;
+					}
+				}
+				if ((style & (SWT.RADIO | SWT.CHECK)) != 0 && (state & DrawData.SELECTED) != 0) {
+					iStateId = OS.TS_CHECKED;			
+				}
+				if ((state & DrawData.PRESSED) != 0) iStateId = OS.TS_PRESSED;
+				if ((state & DrawData.DISABLED) != 0) iStateId = OS.TS_DISABLED;
+			}
+			break;
+		case DrawData.TOOLITEM_ARROW:
+			iPartId = OS.TP_SPLITBUTTONDROPDOWN;
+			if ((state & DrawData.HOT) != 0) iStateId = OS.TS_HOT;
+			if ((state & DrawData.PRESSED) != 0) iStateId = OS.TS_PRESSED;
+			if ((state & DrawData.DISABLED) !=0) iStateId = OS.TS_DISABLED;
+			break;
+	}
+	return new int[]{iPartId, iStateId};
+}
+
+int hit(Theme theme, Point position, Rectangle bounds) {
+	if (!(OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ())) return DrawData.WIDGET_NOWHERE;
+	if (!bounds.contains(position)) return DrawData.WIDGET_NOWHERE;
+	int /*long*/ hTheme = OS.OpenThemeData(0, getClassId());
+	try {
+		RECT rect = new RECT ();
+		rect.left = bounds.x;
+		rect.right = bounds.x + bounds.width;
+		rect.top = bounds.y;
+		rect.bottom = bounds.y + bounds.height;
+		POINT pt = new POINT();
+		pt.x = position.x;
+		pt.y = position.y;
+		short[] code = new short[1];
+		int[] part = getPartId(DrawData.WIDGET_WHOLE);
+		OS.HitTestThemeBackground(hTheme, 0, part[0], part[1], 0, rect, 0, pt, code);
+		if (code[0] == OS.HTNOWHERE) return DrawData.WIDGET_NOWHERE;
+		int style = this.style;
+		if ((style & SWT.DROP_DOWN) != 0) {
+			SIZE size = new SIZE();
+			part = getPartId(DrawData.TOOLITEM_ARROW);
+			OS.GetThemePartSize(hTheme, 0, part[0], part[1], rect, OS.TS_TRUE, size);
+			rect.left = Math.max(rect.left, rect.right - size.cx);
+			OS.HitTestThemeBackground(hTheme, 0, part[0], part[1], 0, rect, 0, pt, code);
+			if (code[0] != OS.HTNOWHERE) return DrawData.TOOLITEM_ARROW;
+		}
+	} finally {
+		OS.CloseThemeData(hTheme);
+	}
+	return DrawData.WIDGET_WHOLE;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/DateTime.java b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/DateTime.java
new file mode 100644
index 0000000..cc34412
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/DateTime.java
@@ -0,0 +1,949 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import java.text.DateFormatSymbols;
+import java.util.Calendar;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.carbon.LongDateRec;
+import org.eclipse.swt.internal.carbon.OS;
+import org.eclipse.swt.internal.carbon.Rect;
+
+/**
+ * Instances of this class are selectable user interface
+ * objects that allow the user to enter and modify date
+ * or time values.
+ * <p>
+ * Note that although this class is a subclass of <code>Composite</code>,
+ * it does not make sense to add children to it, or set a layout on it.
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>DATE, TIME, CALENDAR, SHORT, MEDIUM, LONG, DROP_DOWN</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>DefaultSelection, Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles DATE, TIME, or CALENDAR may be specified,
+ * and only one of the styles SHORT, MEDIUM, or LONG may be specified.
+ * The DROP_DOWN style is a <em>HINT</em>, and it is only valid with the DATE style.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#datetime">DateTime snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ *
+ * @since 3.3
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class DateTime extends Composite {
+	LongDateRec dateRec;
+	LongDateRec dateAndTime = new LongDateRec ();  // copy of date for a kControlClockTypeHourMinuteSecond or time for a kControlClockTypeMonthDayYear
+
+	static final int MIN_YEAR = 1752; // Gregorian switchover in North America: September 19, 1752
+	static final int MAX_YEAR = 9999;
+	
+	/* Emulated Calendar variables */
+	Color fg, bg;
+	Calendar calendar;
+	DateFormatSymbols formatSymbols;
+	Button monthDown, monthUp, yearDown, yearUp;
+	static final int MARGIN_WIDTH = 2;
+	static final int MARGIN_HEIGHT = 1;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#DATE
+ * @see SWT#TIME
+ * @see SWT#CALENDAR
+ * @see SWT#SHORT
+ * @see SWT#MEDIUM
+ * @see SWT#LONG
+ * @see SWT#DROP_DOWN
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public DateTime (Composite parent, int style) {
+	super (parent, checkStyle (style) | ((style & SWT.CALENDAR) != 0 ? SWT.NO_REDRAW_RESIZE : 0));
+	if ((this.style & SWT.CALENDAR) != 0) {
+		calendar = Calendar.getInstance();
+		formatSymbols = new DateFormatSymbols();
+
+		Listener listener = new Listener() {
+			public void handleEvent(Event event) {
+				switch(event.type) {
+					case SWT.Paint:		handlePaint(event); break;
+					case SWT.Resize:	handleResize(event); break;
+					case SWT.MouseDown:	handleMouseDown(event); break;
+					case SWT.KeyDown:	handleKeyDown(event); break;
+					case SWT.Traverse:	handleTraverse(event); break;
+				}
+			}
+		};
+		addListener(SWT.Paint, listener);
+		addListener(SWT.Resize, listener);
+		addListener(SWT.MouseDown, listener);
+		addListener(SWT.KeyDown, listener);
+		addListener(SWT.Traverse, listener);
+		yearDown = new Button(this, SWT.ARROW | SWT.LEFT);
+		//yearDown.setToolTipText(SWT.getMessage ("SWT_Last_Year")); //$NON-NLS-1$
+		monthDown = new Button(this, SWT.ARROW | SWT.LEFT);
+		//monthDown.setToolTipText(SWT.getMessage ("SWT_Last_Month")); //$NON-NLS-1$
+		monthUp = new Button(this, SWT.ARROW | SWT.RIGHT);
+		//monthUp.setToolTipText(SWT.getMessage ("SWT_Next_Month")); //$NON-NLS-1$
+		yearUp = new Button(this, SWT.ARROW | SWT.RIGHT);
+		//yearUp.setToolTipText(SWT.getMessage ("SWT_Next_Year")); //$NON-NLS-1$
+		listener = new Listener() {
+			public void handleEvent(Event event) {
+				handleSelection(event);
+			}
+		};
+		yearDown.addListener(SWT.Selection, listener);
+		monthDown.addListener(SWT.Selection, listener);
+		monthUp.addListener(SWT.Selection, listener);
+		yearUp.addListener(SWT.Selection, listener);
+	}
+}
+
+static int checkStyle (int style) {
+	/*
+	* Even though it is legal to create this widget
+	* with scroll bars, they serve no useful purpose
+	* because they do not automatically scroll the
+	* widget's client area.  The fix is to clear
+	* the SWT style.
+	*/
+	style &= ~(SWT.H_SCROLL | SWT.V_SCROLL);
+	style = checkBits (style, SWT.MEDIUM, SWT.SHORT, SWT.LONG, 0, 0, 0);
+	return checkBits (style, SWT.DATE, SWT.TIME, SWT.CALENDAR, 0, 0, 0);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is called when the user changes the control's value.
+ * <code>widgetDefaultSelected</code> is typically called when ENTER is pressed.
+ * </p>
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection, typedListener);
+	addListener (SWT.DefaultSelection, typedListener);
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget ();
+	int width = 0, height = 0;
+	if (wHint == SWT.DEFAULT || hHint == SWT.DEFAULT) {
+		if ((style & SWT.CALENDAR) != 0) {
+			Point cellSize = getCellSize(null);
+			Point buttonSize = monthDown.computeSize(SWT.DEFAULT, SWT.DEFAULT, changed);
+			width = cellSize.x * 7;
+			height = cellSize.y * 7 + Math.max(cellSize.y, buttonSize.y);
+		} else {
+			Rect rect = new Rect ();
+			OS.GetBestControlRect (handle, rect, null);
+			width = rect.right - rect.left;
+			height = rect.bottom - rect.top;
+		}
+	}
+	if (width == 0) width = DEFAULT_WIDTH;
+	if (height == 0) height = DEFAULT_HEIGHT;
+	if (wHint != SWT.DEFAULT) width = wHint;
+	if (hHint != SWT.DEFAULT) height = hHint;
+	int border = getBorderWidth ();
+	width += border * 2; height += border * 2;
+	return new Point (width, height);
+}
+
+void createHandle () {
+	int clockType = -1;
+	if ((style & SWT.TIME) != 0) clockType = (style & SWT.SHORT) != 0 ? OS.kControlClockTypeHourMinute : OS.kControlClockTypeHourMinuteSecond;
+	if ((style & SWT.DATE) != 0) clockType = (style & SWT.SHORT) != 0 ? OS.kControlClockTypeMonthYear : OS.kControlClockTypeMonthDayYear;
+	if (clockType != -1) { /* SWT.DATE and SWT.TIME */
+		int clockFlags = OS.kControlClockFlagStandard;
+		int [] outControl = new int [1];
+		int window = OS.GetControlOwner (parent.handle);
+		OS.CreateClockControl(window, null, clockType, clockFlags, outControl);
+		if (outControl [0] == 0) error (SWT.ERROR_NO_HANDLES);
+		handle = outControl [0];
+	} else { /* SWT.CALENDAR */
+		super.createHandle();
+	}
+}
+
+void createWidget() {
+	super.createWidget ();
+	getDate();
+}
+
+void drawDay(GC gc, Point cellSize, int day) {
+	int cell = getCell(day);
+	Point location = getCellLocation(cell, cellSize);
+	String str = String.valueOf(day);
+	Point extent = gc.stringExtent(str);
+	int date = calendar.get(Calendar.DAY_OF_MONTH);
+	if (day == date) {
+		Display display = getDisplay();
+		gc.setBackground(display.getSystemColor(SWT.COLOR_LIST_SELECTION));
+		gc.setForeground(display.getSystemColor(SWT.COLOR_LIST_SELECTION_TEXT));
+		gc.fillRectangle(location.x, location.y, cellSize.x, cellSize.y);
+	}
+	gc.drawString(str, location.x + (cellSize.x - extent.x) / 2, location.y + (cellSize.y - extent.y) / 2, true);
+	if (day == date) {
+		gc.setBackground(getBackground());
+		gc.setForeground(getForeground());
+	}
+}
+
+void drawDays(GC gc, Point cellSize, Rectangle client) {
+	gc.setBackground(getBackground());
+	gc.setForeground(getForeground());
+	gc.fillRectangle(0, cellSize.y, client.width, cellSize.y * 7);
+	int firstDay = calendar.getActualMinimum(Calendar.DAY_OF_MONTH);
+	int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+	for (int day = firstDay; day <= lastDay; day++) {
+		drawDay(gc, cellSize, day);
+	}
+}
+
+void drawDaysOfWeek(GC gc, Point cellSize, Rectangle client) {
+	Display display = getDisplay();
+	gc.setBackground(display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
+	gc.setForeground(display.getSystemColor(SWT.COLOR_WIDGET_FOREGROUND));
+	gc.fillRectangle(0, 0, client.width, cellSize.y);
+	String[] days = formatSymbols.getShortWeekdays();
+	int x = 0, y = 0; 
+	for (int i = 1; i < days.length; i++) {
+		String day = days[i];
+		Point extent = gc.stringExtent(day);
+		gc.drawString(day, x + (cellSize.x - extent.x) / 2, y + (cellSize.y - extent.y) / 2, true);
+		x += cellSize.x;
+	}
+	gc.drawLine(0, cellSize.y - 1, client.width, cellSize.y - 1);
+}
+
+void drawMonth(GC gc, Point cellSize, Rectangle client) {
+	Display display = getDisplay();
+	gc.setBackground(display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
+	gc.setForeground(display.getSystemColor(SWT.COLOR_WIDGET_FOREGROUND));
+	int y = cellSize.y * 7;
+	gc.fillRectangle(0, y, client.width, cellSize.y);
+	gc.drawLine(0, y - 1, client.width, y - 1);
+	String str = formatSymbols.getShortMonths()[calendar.get(Calendar.MONTH)] + ", " + calendar.get(Calendar.YEAR);
+	Point extent = gc.stringExtent(str);
+	gc.drawString(str, (cellSize.x * 7 - extent.x) / 2, y + (cellSize.y - extent.y) / 2, true);
+}
+
+void handleKeyDown(Event event) {
+	int newDay = calendar.get(Calendar.DAY_OF_MONTH);
+	switch (event.keyCode) {
+		case SWT.ARROW_DOWN: newDay += 7; break;
+		case SWT.ARROW_UP: newDay -= 7; break;
+		case SWT.ARROW_RIGHT: newDay += 1; break;
+		case SWT.ARROW_LEFT: newDay -= 1; break;
+	}
+	setDay(newDay, true);
+}
+
+void handleMouseDown(Event event) {
+	setFocus();
+	Point cellSize = getCellSize(null);
+	int column = event.x / cellSize.x;
+	int row = event.y / cellSize.y;	
+	int cell = row * 7 + column;
+	int newDay = getDate(cell);
+	setDay(newDay, true);
+}
+
+void handlePaint(Event event) {
+	GC gc = event.gc;
+	Rectangle client = getClientArea();
+	Point cellSize = getCellSize(gc);
+	drawDaysOfWeek(gc, cellSize, client);
+	drawDays(gc, cellSize, client);
+	drawMonth(gc, cellSize, client);
+}
+
+void handleResize(Event event) {
+	yearDown.pack();
+	monthDown.pack();
+	monthUp.pack();
+	yearUp.pack();
+	Point cellSize = getCellSize(null);
+	Point size = monthDown.getSize();
+	int height = Math.max(cellSize.y, size.y);
+	int y = cellSize.y * 7 + (height - size.y) / 2;
+	yearDown.setLocation(0, y);
+	monthDown.setLocation(size.x, y);
+	int x = cellSize.x * 7 - size.x;
+	monthUp.setLocation(x - size.x, y);
+	yearUp.setLocation(x, y);
+}
+
+void handleSelection(Event event) {
+	if (event.widget == monthDown) {
+		calendar.add(Calendar.MONTH, -1);
+	} else if (event.widget == monthUp) {
+		calendar.add(Calendar.MONTH, 1);
+	} else if (event.widget == yearDown) {
+		calendar.add(Calendar.YEAR, -1);
+	} else if (event.widget == yearUp) {				
+		calendar.add(Calendar.YEAR, 1);
+	} else {
+		return;
+	}
+	redraw();
+	postEvent(SWT.Selection);
+}
+
+void handleTraverse(Event event) {
+	switch (event.detail) {
+		case SWT.TRAVERSE_ESCAPE:
+		case SWT.TRAVERSE_PAGE_NEXT:
+		case SWT.TRAVERSE_PAGE_PREVIOUS:
+		case SWT.TRAVERSE_RETURN:
+		case SWT.TRAVERSE_TAB_NEXT:
+		case SWT.TRAVERSE_TAB_PREVIOUS:
+			event.doit = true;
+			break;
+	}	
+}
+
+Point getCellSize(GC gc) {
+	boolean dispose = gc == null; 
+	if (gc == null) gc = new GC(this);
+	int width = 0, height = 0;
+	String[] days = formatSymbols.getShortWeekdays();
+	for (int i = 0; i < days.length; i++) {
+		Point extent = gc.stringExtent(days[i]);
+		width = Math.max(width, extent.x);
+		height = Math.max(height, extent.y);
+	}
+	int firstDay = calendar.getMinimum(Calendar.DAY_OF_MONTH);
+	int lastDay = calendar.getMaximum(Calendar.DAY_OF_MONTH);
+	for (int day = firstDay; day <= lastDay; day++) {
+		Point extent = gc.stringExtent(String.valueOf(day));
+		width = Math.max(width, extent.x);
+		height = Math.max(height, extent.y);	
+	}
+	if (dispose) gc.dispose();
+	return new Point(width + MARGIN_WIDTH * 2, height + MARGIN_HEIGHT * 2);
+}
+
+Point getCellLocation(int cell, Point cellSize) {
+	return new Point(cell % 7 * cellSize.x, cell / 7 * cellSize.y);
+}
+
+int getCell(int date) {
+	int day = calendar.get(Calendar.DAY_OF_MONTH);
+	calendar.set(Calendar.DAY_OF_MONTH, 1);
+	int result = date + calendar.get(Calendar.DAY_OF_WEEK) + 5;
+	calendar.set(Calendar.DAY_OF_MONTH, day);
+	return result;
+}
+
+void getDate() {
+	dateRec = new LongDateRec ();
+	OS.GetControlData (handle, (short)OS.kControlEntireControl, OS.kControlClockLongDateTag, LongDateRec.sizeof, dateRec, null);
+}
+
+int getDate(int cell) {
+	int day = calendar.get(Calendar.DAY_OF_MONTH);
+	calendar.set(Calendar.DAY_OF_MONTH, 1);
+	int result = cell - calendar.get(Calendar.DAY_OF_WEEK) - 5;
+	calendar.set(Calendar.DAY_OF_MONTH, day);
+	return result;
+}
+
+public Color getBackground() {
+	checkWidget();
+	if (bg == null) {
+		return getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND);
+	}
+	return bg;
+}
+
+public Color getForeground() {
+	checkWidget();
+	if (fg == null) {
+		return getDisplay().getSystemColor(SWT.COLOR_LIST_FOREGROUND);
+	}
+	return fg;
+}
+
+/**
+ * Returns the receiver's date, or day of the month.
+ * <p>
+ * The first day of the month is 1, and the last day depends on the month and year.
+ * </p>
+ *
+ * @return a positive integer beginning with 1
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getDay () {
+	checkWidget ();
+	if ((style & SWT.TIME) != 0) return dateAndTime.day;
+	if ((style & SWT.CALENDAR) != 0) {
+		return calendar.get(Calendar.DAY_OF_MONTH);
+	}
+	getDate();
+	return dateRec.day;
+}
+
+/**
+ * Returns the receiver's hours.
+ * <p>
+ * Hours is an integer between 0 and 23.
+ * </p>
+ *
+ * @return an integer between 0 and 23
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getHours () {
+	checkWidget ();
+	if ((style & SWT.DATE) != 0) return dateAndTime.hour;
+	if ((style & SWT.CALENDAR) != 0) {
+		return calendar.get(Calendar.HOUR_OF_DAY);
+	}
+	getDate();
+	return dateRec.hour;
+}
+
+/**
+ * Returns the receiver's minutes.
+ * <p>
+ * Minutes is an integer between 0 and 59.
+ * </p>
+ *
+ * @return an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMinutes () {
+	checkWidget ();
+	if ((style & SWT.DATE) != 0) return dateAndTime.minute;
+	if ((style & SWT.CALENDAR) != 0) {
+		return calendar.get(Calendar.MINUTE);
+	}
+	getDate();
+	return dateRec.minute;
+}
+
+/**
+ * Returns the receiver's month.
+ * <p>
+ * The first month of the year is 0, and the last month is 11.
+ * </p>
+ *
+ * @return an integer between 0 and 11
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMonth () {
+	checkWidget ();
+	if ((style & SWT.TIME) != 0) return dateAndTime.month - 1;
+	if ((style & SWT.CALENDAR) != 0) {
+		return calendar.get(Calendar.MONTH);
+	}
+	getDate();
+	return dateRec.month - 1;
+}
+
+String getNameText() {
+	return (style & SWT.TIME) != 0 ? getHours() + ":" + getMinutes() + ":" + getSeconds()
+			: (getMonth() + 1) + "/" + getDay() + "/" + getYear();
+}
+
+/**
+ * Returns the receiver's seconds.
+ * <p>
+ * Seconds is an integer between 0 and 59.
+ * </p>
+ *
+ * @return an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSeconds () {
+	checkWidget ();
+	if ((style & SWT.DATE) != 0) return dateAndTime.second;
+	if ((style & SWT.CALENDAR) != 0) {
+		return calendar.get(Calendar.SECOND);
+	}
+	getDate();
+	return dateRec.second;
+}
+
+/**
+ * Returns the receiver's year.
+ * <p>
+ * The first year is 1752 and the last year is 9999.
+ * </p>
+ *
+ * @return an integer between 1752 and 9999
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getYear () {
+	checkWidget ();
+	if ((style & SWT.TIME) != 0) return dateAndTime.year;
+	if ((style & SWT.CALENDAR) != 0) {
+		return calendar.get(Calendar.YEAR);
+	}
+	getDate();
+	return dateRec.year;
+}
+
+void hookEvents () {
+	super.hookEvents ();
+	if (OS.VERSION >= 0x1040) {
+		int clockProc = display.clockProc;
+		int [] mask = new int [] {
+			OS.kEventClassClockView, OS.kEventClockDateOrTimeChanged,
+		};
+		int controlTarget = OS.GetControlEventTarget (handle);
+		OS.InstallEventHandler (controlTarget, clockProc, mask.length / 2, mask, handle, null);
+	}
+}
+
+boolean isValidTime(int fieldName, int value) {
+	Calendar calendar = Calendar.getInstance();
+	int min = calendar.getActualMinimum(fieldName);
+	int max = calendar.getActualMaximum(fieldName);
+	return value >= min && value <= max;
+}
+
+boolean isValidDate(int year, int month, int day) {
+	if (year < MIN_YEAR || year > MAX_YEAR) return false;
+	Calendar calendar = Calendar.getInstance();
+	calendar.set(year, month, day);
+	return calendar.get(Calendar.YEAR) == year
+		&& calendar.get(Calendar.MONTH) == month
+		&& calendar.get(Calendar.DAY_OF_MONTH) == day;
+}
+
+int kEventClockDateOrTimeChanged (int nextHandler, int theEvent, int userData) {
+	sendSelectionEvent ();
+	return OS.noErr;
+}
+
+int kEventControlHit (int nextHandler, int theEvent, int userData) {
+	int result = super.kEventControlHit (nextHandler, theEvent, userData);
+	if (result == OS.noErr) return result;
+	if (OS.VERSION < 0x1040) sendSelectionEvent ();
+	return result;
+}
+
+int kEventTextInputUnicodeForKeyEvent (int nextHandler, int theEvent, int userData) {
+	int result = super.kEventTextInputUnicodeForKeyEvent (nextHandler, theEvent, userData);
+	if (result == OS.noErr) return result;
+	if (OS.VERSION < 0x1040) sendSelectionEvent ();
+	return result;
+}
+
+boolean pollTrackEvent() {
+	return ((style & SWT.DATE) != 0) || ((style & SWT.TIME) != 0);
+}
+
+void redraw(int cell, Point cellSize) {
+	Point location = getCellLocation(cell, cellSize);
+	redraw(location.x, location.y, cellSize.x, cellSize.y, false);	
+}
+
+void releaseWidget () {
+	super.releaseWidget();
+	dateRec = null;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection, listener);	
+}
+
+void sendSelectionEvent () {
+	LongDateRec rec = new LongDateRec ();
+	OS.GetControlData (handle, (short)OS.kControlEntireControl, OS.kControlClockLongDateTag, LongDateRec.sizeof, rec, null);
+	if (rec.second != dateRec.second ||
+		rec.minute != dateRec.minute ||
+		rec.hour != dateRec.hour ||
+		rec.day != dateRec.day ||
+		rec.month != dateRec.month ||
+		rec.year != dateRec.year) {
+		dateRec = rec;
+		postEvent (SWT.Selection);
+	}
+}
+
+public void setBackground(Color color) {
+	checkWidget();
+	super.setBackground(color);
+	bg = color;
+}
+
+public void setForeground(Color color) {
+	checkWidget();
+	super.setForeground(color);
+	fg = color;
+}
+
+void setDay(int newDay, boolean notify) {
+	int firstDay = calendar.getActualMinimum(Calendar.DAY_OF_MONTH);
+	int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+	if (!(firstDay <= newDay && newDay <= lastDay)) return;
+	Point cellSize = getCellSize(null);
+	redraw(getCell(calendar.get(Calendar.DAY_OF_MONTH)), cellSize);
+	calendar.set(Calendar.DAY_OF_MONTH, newDay);
+	redraw(getCell(calendar.get(Calendar.DAY_OF_MONTH)), cellSize);
+	if (notify) postEvent(SWT.Selection);
+}
+
+/**
+ * Sets the receiver's year, month, and day in a single operation.
+ * <p>
+ * This is the recommended way to set the date, because setting the year,
+ * month, and day separately may result in invalid intermediate dates.
+ * </p>
+ *
+ * @param year an integer between 1752 and 9999
+ * @param month an integer between 0 and 11
+ * @param day a positive integer beginning with 1
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.4
+ */
+public void setDate (int year, int month, int day) {
+	checkWidget ();
+	if (!isValidDate(year, month, day)) return;
+	if ((style & SWT.CALENDAR) != 0) {
+		calendar.set(Calendar.YEAR, year);
+		calendar.set(Calendar.DAY_OF_MONTH, 1);
+		calendar.set(Calendar.MONTH, month);
+		redraw();
+		setDay(day, false);
+	} else {
+		dateRec.year = (short)year;
+		dateRec.month = (short)(month + 1);
+		dateRec.day = (short)day;
+		OS.SetControlData (handle, (short)OS.kControlEntireControl, OS.kControlClockLongDateTag, LongDateRec.sizeof, dateRec);
+		OS.GetControlData (handle, (short)OS.kControlEntireControl, OS.kControlClockLongDateTag, LongDateRec.sizeof, dateRec, null);
+		redraw();
+		if ((style & SWT.TIME) != 0) {
+			dateAndTime.year = (short)year;
+			dateAndTime.month = (short)(month + 1);
+			dateAndTime.day = (short)day;
+		}
+	}
+}
+
+/**
+ * Sets the receiver's date, or day of the month, to the specified day.
+ * <p>
+ * The first day of the month is 1, and the last day depends on the month and year.
+ * If the specified day is not valid for the receiver's month and year, then it is ignored. 
+ * </p>
+ *
+ * @param day a positive integer beginning with 1
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setDate
+ */
+public void setDay (int day) {
+	checkWidget ();
+	if (!isValidDate(getYear(), getMonth(), day)) return;
+	if ((style & SWT.CALENDAR) != 0) {
+		setDay(day, false);
+	} else {
+		dateRec.day = (short)day;
+		OS.SetControlData (handle, (short)OS.kControlEntireControl, OS.kControlClockLongDateTag, LongDateRec.sizeof, dateRec);
+		OS.GetControlData (handle, (short)OS.kControlEntireControl, OS.kControlClockLongDateTag, LongDateRec.sizeof, dateRec, null);
+		if ((style & SWT.TIME) != 0) dateAndTime.day = (short)day;
+		redraw();
+	}
+}
+
+/**
+ * Sets the receiver's hours.
+ * <p>
+ * Hours is an integer between 0 and 23.
+ * </p>
+ *
+ * @param hours an integer between 0 and 23
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setHours (int hours) {
+	checkWidget ();
+	if (!isValidTime(Calendar.HOUR_OF_DAY, hours)) return;
+	if ((style & SWT.CALENDAR) != 0) {
+		calendar.set(Calendar.HOUR_OF_DAY, hours);
+	} else {
+		dateRec.hour = (short)hours;
+		OS.SetControlData (handle, (short)OS.kControlEntireControl, OS.kControlClockLongDateTag, LongDateRec.sizeof, dateRec);
+		OS.GetControlData (handle, (short)OS.kControlEntireControl, OS.kControlClockLongDateTag, LongDateRec.sizeof, dateRec, null);
+		if ((style & SWT.DATE) != 0) dateAndTime.hour = (short)hours;
+	}
+	redraw();
+}
+
+/**
+ * Sets the receiver's minutes.
+ * <p>
+ * Minutes is an integer between 0 and 59.
+ * </p>
+ *
+ * @param minutes an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMinutes (int minutes) {
+	checkWidget ();
+	if (!isValidTime(Calendar.MINUTE, minutes)) return;
+	if ((style & SWT.CALENDAR) != 0) {
+		calendar.set(Calendar.MINUTE, minutes);
+	} else {
+		dateRec.minute = (short)minutes;
+		OS.SetControlData (handle, (short)OS.kControlEntireControl, OS.kControlClockLongDateTag, LongDateRec.sizeof, dateRec);
+		OS.GetControlData (handle, (short)OS.kControlEntireControl, OS.kControlClockLongDateTag, LongDateRec.sizeof, dateRec, null);
+		if ((style & SWT.DATE) != 0) dateAndTime.minute = (short)minutes;
+	}
+	redraw();
+}
+
+/**
+ * Sets the receiver's month.
+ * <p>
+ * The first month of the year is 0, and the last month is 11.
+ * If the specified month is not valid for the receiver's day and year, then it is ignored. 
+ * </p>
+ *
+ * @param month an integer between 0 and 11
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setDate
+ */
+public void setMonth (int month) {
+	checkWidget ();
+	if (!isValidDate(getYear(), month, getDay())) return;
+	if ((style & SWT.CALENDAR) != 0) {
+		calendar.set(Calendar.MONTH, month);
+	} else {
+		dateRec.month = (short)(month + 1);
+		OS.SetControlData (handle, (short)OS.kControlEntireControl, OS.kControlClockLongDateTag, LongDateRec.sizeof, dateRec);
+		OS.GetControlData (handle, (short)OS.kControlEntireControl, OS.kControlClockLongDateTag, LongDateRec.sizeof, dateRec, null);
+		if ((style & SWT.TIME) != 0) dateAndTime.month = (short)(month + 1);
+	}
+	redraw();
+}
+
+/**
+ * Sets the receiver's seconds.
+ * <p>
+ * Seconds is an integer between 0 and 59.
+ * </p>
+ *
+ * @param seconds an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSeconds (int seconds) {
+	checkWidget ();
+	if (!isValidTime(Calendar.SECOND, seconds)) return;
+	if ((style & SWT.CALENDAR) != 0) {
+		calendar.set(Calendar.SECOND, seconds);
+	} else {
+		dateRec.second = (short)seconds;
+		OS.SetControlData (handle, (short)OS.kControlEntireControl, OS.kControlClockLongDateTag, LongDateRec.sizeof, dateRec);
+		OS.GetControlData (handle, (short)OS.kControlEntireControl, OS.kControlClockLongDateTag, LongDateRec.sizeof, dateRec, null);
+		if ((style & SWT.DATE) != 0) dateAndTime.second = (short)seconds;
+	}
+	redraw();
+}
+
+/**
+ * Sets the receiver's hours, minutes, and seconds in a single operation.
+ *
+ * @param hours an integer between 0 and 23
+ * @param minutes an integer between 0 and 59
+ * @param seconds an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.4
+ */
+public void setTime (int hours, int minutes, int seconds) {
+	checkWidget ();
+	if (!isValidTime(Calendar.HOUR_OF_DAY, hours)) return;
+	if (!isValidTime(Calendar.MINUTE, minutes)) return;
+	if (!isValidTime(Calendar.SECOND, seconds)) return;
+	if ((style & SWT.CALENDAR) != 0) {
+		calendar.set(Calendar.HOUR_OF_DAY, hours);
+		calendar.set(Calendar.MINUTE, minutes);
+		calendar.set(Calendar.SECOND, seconds);
+	} else {
+		dateRec.hour = (short)hours;
+		dateRec.minute = (short)minutes;
+		dateRec.second = (short)seconds;
+		OS.SetControlData (handle, (short)OS.kControlEntireControl, OS.kControlClockLongDateTag, LongDateRec.sizeof, dateRec);
+		OS.GetControlData (handle, (short)OS.kControlEntireControl, OS.kControlClockLongDateTag, LongDateRec.sizeof, dateRec, null);
+		if ((style & SWT.DATE) != 0) {
+			dateAndTime.hour = (short)hours;
+			dateAndTime.minute = (short)minutes;
+			dateAndTime.second = (short)seconds;
+		}
+	}
+	redraw();
+}
+
+/**
+ * Sets the receiver's year.
+ * <p>
+ * The first year is 1752 and the last year is 9999.
+ * If the specified year is not valid for the receiver's day and month, then it is ignored. 
+ * </p>
+ *
+ * @param year an integer between 1752 and 9999
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setDate
+ */
+public void setYear (int year) {
+	checkWidget ();
+	if (!isValidDate(year, getMonth(), getDay())) return;
+	if ((style & SWT.CALENDAR) != 0) {
+		calendar.set(Calendar.YEAR, year);
+	} else {
+		dateRec.year = (short)year;
+		OS.SetControlData (handle, (short)OS.kControlEntireControl, OS.kControlClockLongDateTag, LongDateRec.sizeof, dateRec);
+		OS.GetControlData (handle, (short)OS.kControlEntireControl, OS.kControlClockLongDateTag, LongDateRec.sizeof, dateRec, null);
+		if ((style & SWT.TIME) != 0) dateAndTime.year = (short)year;
+	}
+	redraw();
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/IME.java b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/IME.java
new file mode 100644
index 0000000..ac213ae
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/IME.java
@@ -0,0 +1,441 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.widgets;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.carbon.OS;
+import org.eclipse.swt.internal.carbon.TextRange;
+
+
+/**
+ * Instances of this class represent input method editors.
+ * These are typically in-line pre-edit text areas that allow
+ * the user to compose characters from Far Eastern languages
+ * such as Japanese, Chinese or Korean.
+ * 
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>ImeComposition</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.4
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class IME extends Widget {
+	Canvas parent;
+	int caretOffset;
+	int startOffset;
+	int commitCount;
+	String text;
+	int [] ranges;
+	TextStyle [] styles;
+	
+	static final int UNDERLINE_IME_INPUT = 1 << 16;
+	static final int UNDERLINE_IME_TARGET_CONVERTED = 2 << 16;
+	static final int UNDERLINE_IME_CONVERTED = 3 << 16;
+	
+/**
+ * Prevents uninitialized instances from being created outside the package.
+ */
+IME () {
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a canvas control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public IME (Canvas parent, int style) {
+	super (parent, style);
+	this.parent = parent;
+	createWidget ();
+}
+
+void createWidget () {
+	text = "";
+	startOffset = -1;
+	if (parent.getIME () == null) {
+		parent.setIME (this);
+	}
+}
+
+/**
+ * Returns the offset of the caret from the start of the document.
+ * The caret is within the current composition.
+ *
+ * @return the caret offset
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getCaretOffset () {
+	checkWidget ();
+	return startOffset + caretOffset;
+}
+
+/**
+ * Returns the commit count of the composition.  This is the
+ * number of characters that have been composed.  When the
+ * commit count is equal to the length of the composition
+ * text, then the in-line edit operation is complete.
+ * 
+ * @return the commit count
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see IME#getText
+ */
+public int getCommitCount () {
+	checkWidget ();
+	return commitCount;
+}
+
+/**
+ * Returns the offset of the composition from the start of the document.
+ * This is the start offset of the composition within the document and
+ * in not changed by the input method editor itself during the in-line edit
+ * session.
+ *
+ * @return the offset of the composition
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getCompositionOffset () {
+	checkWidget ();
+	return startOffset;
+}
+
+/**
+ * Returns the ranges for the style that should be applied during the
+ * in-line edit session.
+ * <p>
+ * The ranges array contains start and end pairs.  Each pair refers to
+ * the corresponding style in the styles array.  For example, the pair
+ * that starts at ranges[n] and ends at ranges[n+1] uses the style
+ * at styles[n/2] returned by <code>getStyles()</code>.
+ * </p>
+ * @return the ranges for the styles
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see IME#getStyles
+ */
+public int [] getRanges () {
+	checkWidget ();
+	if (ranges == null) return new int [0];
+	int [] result = new int [ranges.length];
+	for (int i = 0; i < result.length; i++) {
+		result [i] = ranges [i] + startOffset; 
+	}
+	return result;
+}
+
+/**
+ * Returns the styles for the ranges.
+ * <p>
+ * The ranges array contains start and end pairs.  Each pair refers to
+ * the corresponding style in the styles array.  For example, the pair
+ * that starts at ranges[n] and ends at ranges[n+1] uses the style
+ * at styles[n/2].
+ * </p>
+ * 
+ * @return the ranges for the styles
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see IME#getRanges
+ */
+public TextStyle [] getStyles () {
+	checkWidget ();
+	if (styles == null) return new TextStyle [0];
+	TextStyle [] result = new TextStyle [styles.length];
+	System.arraycopy (styles, 0, result, 0, styles.length);
+	return result;
+}
+
+/**
+ * Returns the composition text.
+ * <p>
+ * The text for an IME is the characters in the widget that
+ * are in the current composition. When the commit count is
+ * equal to the length of the composition text, then the
+ * in-line edit operation is complete.
+ * </p>
+ *
+ * @return the widget text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getText () {
+	checkWidget ();
+	return text;
+}
+
+/**
+ * Returns <code>true</code> if the caret should be wide, and
+ * <code>false</code> otherwise.  In some languages, for example
+ * Korean, the caret is typically widened to the width of the
+ * current character in the in-line edit session.
+ * 
+ * @return the wide caret state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getWideCaret() {
+	checkWidget ();
+	return false; 
+}
+
+boolean isInlineEnabled () {
+	return hooks (SWT.ImeComposition);
+}
+
+int kEventTextInputOffsetToPos (int nextHandler, int theEvent, int userData) {
+	if (!isInlineEnabled ()) return OS.eventNotHandledErr;
+	Caret caret = parent.caret;
+	if (caret == null) return OS.eventNotHandledErr;
+	org.eclipse.swt.internal.carbon.Point pt = new org.eclipse.swt.internal.carbon.Point ();
+	int sizeof = org.eclipse.swt.internal.carbon.Point.sizeof;
+	org.eclipse.swt.graphics.Point point = parent.toDisplay (caret.x, caret.y + caret.height);
+	pt.h = (short)point.x;
+	pt.v = (short)point.y;
+	OS.SetEventParameter (theEvent, OS.kEventParamTextInputReplyPoint, OS.typeQDPoint, sizeof, pt);
+	return OS.noErr;
+}
+
+int kEventTextInputPosToOffset (int nextHandler, int theEvent, int userData) {
+	if (!isInlineEnabled ()) return OS.eventNotHandledErr;
+	if (startOffset == -1) return OS.eventNotHandledErr;
+	org.eclipse.swt.internal.carbon.Point pt = new org.eclipse.swt.internal.carbon.Point ();
+	int sizeof = org.eclipse.swt.internal.carbon.Point.sizeof;
+	OS.GetEventParameter (theEvent, OS.kEventParamTextInputSendCurrentPoint, OS.typeQDPoint, null, sizeof, null, pt);
+	org.eclipse.swt.graphics.Point point = parent.toControl (pt.h, pt.v);
+	Event event = new Event ();
+	event.detail = SWT.COMPOSITION_OFFSET;
+	event.x = point.x;
+	event.y = point.y;
+	sendEvent (SWT.ImeComposition, event);
+	int hitTest;
+	int offset = event.index + event.count;
+	if (offset == -1) {
+		hitTest = OS.kTSMOutsideOfBody;
+	} else {
+		if (startOffset <= offset && offset < startOffset + text.length()) {
+			hitTest = OS.kTSMInsideOfActiveInputArea;
+			offset -= startOffset;
+		} else {
+			hitTest = OS.kTSMInsideOfBody;
+		}
+	}
+	OS.SetEventParameter (theEvent, OS.kEventParamTextInputReplyTextOffset, OS.typeLongInteger, 4, new int [] {offset * 2});
+	OS.SetEventParameter (theEvent, OS.kEventParamTextInputReplyRegionClass, OS.typeLongInteger, 4, new int [] {hitTest});
+	OS.SetEventParameter (theEvent, OS.kEventParamTextInputReplyLeadingEdge, OS.typeBoolean, 4, new boolean [] {event.count == 0});
+	return OS.noErr;
+}
+
+int kEventTextInputGetSelectedText (int nextHandler, int theEvent, int userData) {
+	Event event = new Event ();
+	event.detail = SWT.COMPOSITION_SELECTION;
+	sendEvent (SWT.ImeComposition, event);
+	String text = event.text;
+	if (text.length () > 0) {
+		char [] buffer = new char [text.length ()];
+		text.getChars (0, buffer.length, buffer, 0);
+		OS.SetEventParameter (theEvent, OS.kEventParamTextInputReplyText, OS.typeUnicodeText, buffer.length * 2, buffer);
+		return OS.noErr;
+	}
+	return OS.eventNotHandledErr;
+}
+
+int kEventTextInputUpdateActiveInputArea (int nextHandler, int theEvent, int userData) {
+	if (!isInlineEnabled ()) return OS.eventNotHandledErr;
+	ranges = null;
+	styles = null;
+	caretOffset = commitCount = 0;
+	int [] length = new int [1];
+	OS.GetEventParameter (theEvent, OS.kEventParamTextInputSendText, OS.typeUnicodeText, null, 0, length, (char [])null);
+	char [] chars = new char [length [0]];
+	OS.GetEventParameter (theEvent, OS.kEventParamTextInputSendText, OS.typeUnicodeText, null, length [0], null, chars);
+	int [] fixed_length = new int [1];
+	OS.GetEventParameter (theEvent, OS.kEventParamTextInputSendFixLen, OS.typeLongInteger, null, 4, null, fixed_length);
+	int [] rangeSize = new int [1];
+	int rc = OS.GetEventParameter (theEvent, OS.kEventParamTextInputSendHiliteRng, OS.typeTextRangeArray, null, 0, rangeSize, (byte [])null);
+	if (rc == OS.noErr) {
+		int firstSelectedConverted = -1;
+		boolean hasConvertedText = false;
+		int textRanges = OS.NewPtr (rangeSize [0]);
+		OS.GetEventParameter (theEvent, OS.kEventParamTextInputSendHiliteRng, OS.typeTextRangeArray, null, rangeSize [0], null, textRanges);
+		short [] nRanges = new short [1];
+		OS.memmove (nRanges, textRanges, 2);
+		int count = nRanges [0];
+		if (count > 0) {
+			TextRange range = new TextRange ();
+			ranges = new int [(count - 1) * 2];
+			styles = new TextStyle [count - 1];
+			for (int i = 0, j = 0; i < count; i++) {
+				OS.memmove (range, textRanges + 2 + (i * TextRange.sizeof), TextRange.sizeof);
+				switch (range.fHiliteStyle) {
+					case OS.kCaretPosition: 
+						caretOffset = range.fStart / 2;
+						break;
+					case OS.kConvertedText:	
+					case OS.kSelectedConvertedText:
+					case OS.kSelectedRawText:
+					case OS.kRawText:
+						ranges [j * 2] = range.fStart / 2;
+						ranges [j * 2 + 1] = range.fEnd / 2 - 1;
+						styles [j] = new TextStyle ();
+						styles [j].underline = true;
+						styles [j].underlineStyle = UNDERLINE_IME_INPUT;
+						if (range.fHiliteStyle == OS.kConvertedText) {
+							styles [j].underlineStyle = UNDERLINE_IME_CONVERTED;
+							hasConvertedText = true;
+						}
+						if (range.fHiliteStyle == OS.kSelectedConvertedText) {
+							styles [j].underlineStyle = UNDERLINE_IME_TARGET_CONVERTED;
+							if (firstSelectedConverted == -1) {
+								firstSelectedConverted = range.fStart;
+							}
+						}
+						j++;
+						break;
+				}
+			}
+		}
+		OS.DisposePtr (textRanges);
+		if (hasConvertedText && firstSelectedConverted != -1) {
+			caretOffset = firstSelectedConverted / 2;
+		}
+	}
+	int end = startOffset + text.length();
+	if (startOffset == -1) {
+		Event event = new Event ();
+		event.detail = SWT.COMPOSITION_SELECTION;
+		sendEvent (SWT.ImeComposition, event);
+		startOffset = event.start;
+		end = event.end;
+	}
+	Event event = new Event ();
+	event.detail = SWT.COMPOSITION_CHANGED;
+	event.start = startOffset;
+	event.end = end;
+	event.text = text = new String(chars, 0, length [0] / 2);
+	commitCount = fixed_length [0] != -1 ? fixed_length [0] / 2: length [0] / 2;
+	sendEvent (SWT.ImeComposition, event);
+	if (commitCount == text.length ()) {
+		text = "";
+		caretOffset = commitCount = 0;
+		startOffset = -1;
+		ranges = null;
+		styles = null;
+	}
+	if (event.doit) {
+		if (fixed_length [0] == -1 || fixed_length [0] == length [0]) {
+			for (int i=0; i<chars.length; i++) {
+				if (chars [i] == 0) break;
+				event = new Event ();
+				event.character = chars [i];
+				parent.sendKeyEvent (SWT.KeyDown, event);
+			}
+		}
+	}
+	return OS.noErr;
+}
+
+void releaseParent () {
+	super.releaseParent ();
+	if (this == parent.getIME ()) parent.setIME (null);
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	parent = null;
+	text = null;
+	styles = null;
+	ranges = null;
+}
+
+/**
+ * Sets the offset of the composition from the start of the document.
+ * This is the start offset of the composition within the document and
+ * in not changed by the input method editor itself during the in-line edit
+ * session but may need to be changed by clients of the IME.  For example,
+ * if during an in-line edit operation, a text editor inserts characters
+ * above the IME, then the IME must be informed that the composition
+ * offset has changed.
+ *
+ * @param offset the offset of the composition
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setCompositionOffset (int offset) {
+	checkWidget ();
+	if (offset < 0) return;
+	if (startOffset != -1) {
+		startOffset = offset;
+	}
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/TrayItem.java b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/TrayItem.java
new file mode 100755
index 0000000..4366007
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/TrayItem.java
@@ -0,0 +1,479 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.carbon.CGRect;
+import org.eclipse.swt.internal.carbon.OS;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class represent icons that can be placed on the
+ * system tray or task bar status area.
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>DefaultSelection, MenuDetect, Selection</dd>
+ * </dl>
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tray">Tray, TrayItem snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.0
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class TrayItem extends Item {
+	Tray parent;
+	ToolTip toolTip;
+	String toolTipText;
+	boolean visible = true, highlight;
+	int handle, nsImage, view, jniRef;
+	
+	static final float BORDER = 8f;
+	
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Tray</code>) and a style value
+ * describing its behavior and appearance. The item is added
+ * to the end of the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TrayItem (Tray parent, int style) {
+	super (parent, style);
+	this.parent = parent;
+	parent.createItem (this, parent.getItemCount ());
+	createWidget ();
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the platform-specific context menu trigger
+ * has occurred, by sending it one of the messages defined in
+ * the <code>MenuDetectListener</code> interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MenuDetectListener
+ * @see #removeMenuDetectListener
+ *
+ * @since 3.3
+ */
+public void addMenuDetectListener (MenuDetectListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.MenuDetect, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the receiver is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is called when the receiver is selected
+ * <code>widgetDefaultSelected</code> is called when the receiver is double-clicked
+ * </p>
+ *
+ * @param listener the listener which should be notified when the receiver is selected by the user
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+void createWidget () {
+	int statusBar = Cocoa.objc_msgSend (Cocoa.C_NSStatusBar, Cocoa.S_systemStatusBar);
+	handle = Cocoa.objc_msgSend (statusBar, Cocoa.S_statusItemWithLength, 0f);
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	Cocoa.objc_msgSend (handle, Cocoa.S_retain);
+	Cocoa.objc_msgSend (handle, Cocoa.S_setHighlightMode, 1);	
+	jniRef = OS.NewGlobalRef (this);
+	if (jniRef == 0) SWT.error (SWT.ERROR_NO_HANDLES);
+	NSRect rect = new NSRect();
+	view = Cocoa.objc_msgSend (Cocoa.C_NSStatusItemImageView, Cocoa.S_alloc);
+	if (view == 0) error (SWT.ERROR_NO_HANDLES);
+	view = Cocoa.objc_msgSend (view, Cocoa.S_initWithProc_frame_user_data, display.trayItemProc, rect, jniRef);
+	Cocoa.objc_msgSend (handle, Cocoa.S_setView, view);
+}
+
+void destroyWidget () {
+	parent.destroyItem (this);
+	releaseHandle ();
+}
+
+Point getLocation () {
+	NSRect rect = new NSRect();
+	Cocoa.objc_msgSend_stret(rect, view, Cocoa.S_frame);
+	NSRect windowRect = new NSRect();
+	Cocoa.objc_msgSend_stret(windowRect, Cocoa.objc_msgSend(view, Cocoa.S_window), Cocoa.S_frame);
+	rect.x += rect.width / 2;
+	rect.y += rect.height;
+	Cocoa.objc_msgSend_stret(rect, view, Cocoa.S_convertRect_toView, rect, 0);
+	rect.x += windowRect.x;
+	return new Point ((int)rect.x, (int)rect.y);
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>Tray</code>.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public Tray getParent () {
+	checkWidget ();
+	return parent;
+}
+
+/**
+ * Returns the receiver's tool tip, or null if it has
+ * not been set.
+ *
+ * @return the receiver's tool tip text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public ToolTip getToolTip () {
+	checkWidget ();
+	return toolTip;
+}
+
+/**
+ * Returns the receiver's tool tip text, or null if it has
+ * not been set.
+ *
+ * @return the receiver's tool tip text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getToolTipText () {
+	checkWidget ();
+	return toolTipText;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is visible and 
+ * <code>false</code> otherwise.
+ *
+ * @return the receiver's visibility
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getVisible () {
+	checkWidget ();
+	return visible;
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	parent = null;
+	handle = 0;
+}
+
+void releaseWidget () {
+	int statusBar = Cocoa.objc_msgSend (Cocoa.C_NSStatusBar, Cocoa.S_systemStatusBar);
+	Cocoa.objc_msgSend (statusBar, Cocoa.S_removeStatusItem, handle);
+	Cocoa.objc_msgSend (handle, Cocoa.S_release);
+	if (nsImage != 0) Cocoa.objc_msgSend (nsImage, Cocoa.S_release);
+	if (view != 0) Cocoa.objc_msgSend (view, Cocoa.S_release);
+	if (jniRef != 0) OS.DeleteGlobalRef (jniRef);
+	handle = nsImage = view = jniRef = 0;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the platform-specific context menu trigger has
+ * occurred.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MenuDetectListener
+ * @see #addMenuDetectListener
+ *
+ * @since 3.3
+ */
+public void removeMenuDetectListener (MenuDetectListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.MenuDetect, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the receiver is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+/**
+ * Sets the receiver's image.
+ *
+ * @param image the new image
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setImage (Image image) {
+	checkWidget ();
+	if (image != null && image.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	super.setImage (image);
+	if (nsImage != 0) Cocoa.objc_msgSend (nsImage, Cocoa.S_release, nsImage);
+	nsImage = 0;
+	if (image != null) {
+		CGRect rect = new CGRect ();
+		rect.width = OS.CGImageGetWidth (image.handle);
+		rect.height = OS.CGImageGetHeight (image.handle);
+		NSSize size = new NSSize ();
+		size.width = rect.width;
+		size.height =  rect.height;
+		nsImage = Cocoa.objc_msgSend (Cocoa.C_NSImage, Cocoa.S_alloc);
+		nsImage = Cocoa.objc_msgSend (nsImage, Cocoa.S_initWithSize, size);
+	    Cocoa.objc_msgSend (nsImage, Cocoa.S_lockFocus);
+		int imageContext = Cocoa.objc_msgSend (Cocoa.C_NSGraphicsContext, Cocoa.S_currentContext);
+		imageContext = Cocoa.objc_msgSend (imageContext, Cocoa.S_graphicsPort);
+		OS.CGContextDrawImage (imageContext, rect, image.handle);
+	    Cocoa.objc_msgSend (nsImage, Cocoa.S_unlockFocus);
+	}
+	Cocoa.objc_msgSend (view, Cocoa.S_setImage, nsImage);
+	float width = image != null && visible ? OS.CGImageGetWidth (image.handle) + BORDER : 0;
+	Cocoa.objc_msgSend (handle, Cocoa.S_setLength, width);
+}
+
+/**
+ * Sets the receiver's tool tip to the argument, which
+ * may be null indicating that no tool tip should be shown.
+ *
+ * @param toolTip the new tool tip (or null)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setToolTip (ToolTip toolTip) {
+	checkWidget ();
+	ToolTip oldTip = this.toolTip, newTip = toolTip;
+	if (oldTip != null) oldTip.item = null;
+	this.toolTip = newTip;
+	if (newTip != null) newTip.item = this;
+}
+
+/**
+ * Sets the receiver's tool tip text to the argument, which
+ * may be null indicating that the default tool tip for the 
+ * control will be shown. For a control that has a default
+ * tool tip, such as the Tree control on Windows, setting
+ * the tool tip text to an empty string replaces the default,
+ * causing no tool tip text to be shown.
+ * <p>
+ * The mnemonic indicator (character '&amp;') is not displayed in a tool tip.
+ * To display a single '&amp;' in the tool tip, the character '&amp;' can be 
+ * escaped by doubling it in the string.
+ * </p>
+ * 
+ * @param string the new tool tip text (or null)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setToolTipText (String string) {
+	checkWidget ();
+	toolTipText = string;
+	_setToolTipText (string);
+}
+
+void _setToolTipText (String string) {
+	int ptr = 0;
+	if (string != null) {
+		char[] chars = new char [string.length ()];
+		string.getChars(0, chars.length, chars, 0);
+		ptr = OS.CFStringCreateWithCharacters (0, chars, chars.length);
+	}
+	Cocoa.objc_msgSend (view, Cocoa.S_setToolTip, ptr);
+	if (ptr != 0) OS.CFRelease (ptr);
+}
+
+/**
+ * Makes the receiver visible if the argument is <code>true</code>,
+ * and makes it invisible otherwise. 
+ *
+ * @param visible the new visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setVisible (boolean visible) {
+	checkWidget ();
+	if (this.visible == visible) return;
+	if (visible) {
+		sendEvent (SWT.Show);
+		if (isDisposed ()) return;
+	}
+	this.visible = visible;
+	float width = image != null && visible ? OS.CGImageGetWidth (image.handle) + BORDER : 0;
+	Cocoa.objc_msgSend (handle, Cocoa.S_setLength, width);
+	if (!visible) sendEvent (SWT.Hide);
+}
+
+void showMenu () {
+	_setToolTipText (null);
+	sendEvent (SWT.MenuDetect);
+	if (isDisposed ()) return;
+	display.runPopups ();
+	if (isDisposed ()) return;
+	_setToolTipText (toolTipText);
+}
+
+int trayItemProc (int target, int userData, int selector, int arg0) {
+	switch (selector) {
+		case 0: {
+			int mask = Cocoa.objc_msgSend (arg0, Cocoa.S_modifierFlags) & Cocoa.NSDeviceIndependentModifierFlagsMask;
+			if (mask == Cocoa.NSControlKeyMask) {
+				showMenu ();
+			} else {
+				highlight = true;
+				Cocoa.objc_msgSend (view, Cocoa.S_setNeedsDisplay, 1);
+				int clickCount = Cocoa.objc_msgSend (arg0, Cocoa.S_clickCount);
+				postEvent (clickCount == 2 ? SWT.DefaultSelection : SWT.Selection);
+			}
+			break;
+		}
+		case 1: {
+			highlight = false;
+			Cocoa.objc_msgSend (view, Cocoa.S_setNeedsDisplay, 1);
+			break;
+		}
+		case 2: {
+			showMenu ();
+			break;
+		}
+		case 3: {
+			NSRect rect = new NSRect ();
+			Cocoa.memcpy (rect, arg0, NSRect.sizeof);
+			Cocoa.objc_msgSend (handle, Cocoa.S_drawStatusBarBackgroundInRect_withHighlight, rect, highlight ? 1 : 0);
+		}
+	}
+	return 0;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Color.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Color.java
new file mode 100755
index 0000000..dc18235
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Color.java
@@ -0,0 +1,266 @@
+/*******************************************************************************
+ * 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.graphics;
+
+
+import org.eclipse.swt.*;
+
+/**
+ * Instances of this class manage the operating system resources that
+ * implement SWT's RGB color model. To create a color you can either
+ * specify the individual color components as integers in the range 
+ * 0 to 255 or provide an instance of an <code>RGB</code>. 
+ * <p>
+ * Application code must explicitly invoke the <code>Color.dispose()</code> 
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ *
+ * @see RGB
+ * @see Device#getSystemColor
+ * @see <a href="http://www.eclipse.org/swt/snippets/#color">Color and RGB snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: PaintExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public final class Color extends Resource {
+	/**
+	 * the handle to the OS color resource 
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public float /*double*/ [] handle;
+
+Color(Device device) {
+	super(device);
+}
+
+/**	 
+ * Constructs a new instance of this class given a device and the
+ * desired red, green and blue values expressed as ints in the range
+ * 0 to 255 (where 0 is black and 255 is full brightness). On limited
+ * color devices, the color instance created by this call may not have
+ * the same RGB values as the ones specified by the arguments. The
+ * RGB values on the returned instance will be the color values of 
+ * the operating system color.
+ * <p>
+ * You must dispose the color when it is no longer required. 
+ * </p>
+ *
+ * @param device the device on which to allocate the color
+ * @param red the amount of red in the color
+ * @param green the amount of green in the color
+ * @param blue the amount of blue in the color
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the red, green or blue argument is not between 0 and 255</li>
+ * </ul>
+ *
+ * @see #dispose
+ */
+public Color(Device device, int red, int green, int blue) {
+	super(device);
+	init(red, green, blue);
+	init();
+}
+
+/**	 
+ * Constructs a new instance of this class given a device and an
+ * <code>RGB</code> describing the desired red, green and blue values.
+ * On limited color devices, the color instance created by this call
+ * may not have the same RGB values as the ones specified by the
+ * argument. The RGB values on the returned instance will be the color
+ * values of the operating system color.
+ * <p>
+ * You must dispose the color when it is no longer required. 
+ * </p>
+ *
+ * @param device the device on which to allocate the color
+ * @param rgb the RGB values of the desired color
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the rgb argument is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the red, green or blue components of the argument are not between 0 and 255</li>
+ * </ul>
+ *
+ * @see #dispose
+ */
+public Color(Device device, RGB rgb) {
+	super(device);
+	if (rgb == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	init(rgb.red, rgb.green, rgb.blue);
+	init();
+}
+
+void destroy() {
+	handle = null;
+}
+
+/**
+ * Compares the argument to the receiver, and returns true
+ * if they represent the <em>same</em> object using a class
+ * specific comparison.
+ *
+ * @param object the object to compare with this object
+ * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
+ *
+ * @see #hashCode
+ */
+public boolean equals(Object object) {
+	if (object == this) return true;
+	if (!(object instanceof Color)) return false;
+	Color color = (Color)object;
+	float /*double*/ [] rgbColor = color.handle;
+	if (handle == rgbColor) return true;
+	return device == color.device &&
+		(int)(handle[0] * 255) == (int)(rgbColor[0] * 255) &&
+		(int)(handle[1] * 255) == (int)(rgbColor[1] * 255) &&
+		(int)(handle[2] * 255) == (int)(rgbColor[2] * 255);
+}
+
+/**
+ * Returns the amount of blue in the color, from 0 to 255.
+ *
+ * @return the blue component of the color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getBlue() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return (int)(handle[2] * 255);
+}
+
+/**
+ * Returns the amount of green in the color, from 0 to 255.
+ *
+ * @return the green component of the color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getGreen() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return (int)(handle[1] * 255);
+}
+
+/**
+ * Returns the amount of red in the color, from 0 to 255.
+ *
+ * @return the red component of the color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getRed() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return (int)(handle[0] * 255);
+}
+
+/**
+ * Returns an integer hash code for the receiver. Any two 
+ * objects that return <code>true</code> when passed to 
+ * <code>equals</code> must return the same value for this
+ * method.
+ *
+ * @return the receiver's hash
+ *
+ * @see #equals
+ */
+public int hashCode() {
+	if (isDisposed()) return 0;
+	return (int)(handle[0] * 255) ^ (int)(handle[1] * 255) ^ (int)(handle[2] * 255);
+}
+
+/**
+ * Returns an <code>RGB</code> representing the receiver.
+ *
+ * @return the RGB for the color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public RGB getRGB () {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return new RGB(getRed(), getGreen(), getBlue());
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new color.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Color</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param device the device on which to allocate the color
+ * @param handle the handle for the color
+ * 
+ * @private
+ */
+public static Color cocoa_new(Device device, float /*double*/ [] rgbColor) {
+	Color color = new Color(device);
+	color.handle = rgbColor;
+	return color;
+}
+
+void init(int red, int green, int blue) {
+	if ((red > 255) || (red < 0) ||
+		(green > 255) || (green < 0) ||
+		(blue > 255) || (blue < 0)) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	float /*double*/ [] rgbColor = new float /*double*/ [4];
+	rgbColor[0] = red / 255f;
+	rgbColor[1] = green / 255f;
+	rgbColor[2] = blue / 255f;
+	rgbColor[3] = 1;
+	handle = rgbColor;
+}
+
+/**
+ * Returns <code>true</code> if the color has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the color.
+ * When a color has been disposed, it is an error to
+ * invoke any other method using the color.
+ *
+ * @return <code>true</code> when the color is disposed and <code>false</code> otherwise
+ */
+public boolean isDisposed() {
+	return handle == null;
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the receiver
+ */
+public String toString () {
+	if (isDisposed()) return "Color {*DISPOSED*}";
+	return "Color {" + getRed() + ", " + getGreen() + ", " + getBlue() + "}";
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Cursor.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Cursor.java
new file mode 100755
index 0000000..64e4531
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Cursor.java
@@ -0,0 +1,467 @@
+/*******************************************************************************
+ * 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.graphics;
+
+
+import org.eclipse.swt.internal.cocoa.*;
+import org.eclipse.swt.*;
+
+/**
+ * Instances of this class manage operating system resources that
+ * specify the appearance of the on-screen pointer. To create a
+ * cursor you specify the device and either a simple cursor style
+ * describing one of the standard operating system provided cursors
+ * or the image and mask data for the desired appearance.
+ * <p>
+ * Application code must explicitly invoke the <code>Cursor.dispose()</code> 
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>
+ *   CURSOR_ARROW, CURSOR_WAIT, CURSOR_CROSS, CURSOR_APPSTARTING, CURSOR_HELP,
+ *   CURSOR_SIZEALL, CURSOR_SIZENESW, CURSOR_SIZENS, CURSOR_SIZENWSE, CURSOR_SIZEWE,
+ *   CURSOR_SIZEN, CURSOR_SIZES, CURSOR_SIZEE, CURSOR_SIZEW, CURSOR_SIZENE, CURSOR_SIZESE,
+ *   CURSOR_SIZESW, CURSOR_SIZENW, CURSOR_UPARROW, CURSOR_IBEAM, CURSOR_NO, CURSOR_HAND
+ * </dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the above styles may be specified.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#cursor">Cursor snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+
+public final class Cursor extends Resource {
+	
+	static final byte[] WAIT_SOURCE = new byte[] {
+		(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, 
+		(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, 
+		(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, 
+		(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, 
+		(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, 
+		(byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, 
+		(byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, 
+		(byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, 
+		(byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, 
+		(byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, 
+		(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, 
+		(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, 
+		(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, 
+		(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, 
+		(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, 
+		(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, 
+	};
+	
+	/**
+	 * the handle to the OS cursor resource
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public NSCursor handle;
+
+/**
+ * Prevents uninitialized instances from being created outside the package.
+ */
+Cursor(Device device) {
+	super(device);
+}
+
+/**	 
+ * Constructs a new cursor given a device and a style
+ * constant describing the desired cursor appearance.
+ * <p>
+ * You must dispose the cursor when it is no longer required. 
+ * </p>
+ *
+ * @param device the device on which to allocate the cursor
+ * @param style the style of cursor to allocate
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_INVALID_ARGUMENT - when an unknown style is specified</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES - if a handle could not be obtained for cursor creation</li>
+ * </ul>
+ *
+ * @see SWT#CURSOR_ARROW
+ * @see SWT#CURSOR_WAIT
+ * @see SWT#CURSOR_CROSS
+ * @see SWT#CURSOR_APPSTARTING
+ * @see SWT#CURSOR_HELP
+ * @see SWT#CURSOR_SIZEALL
+ * @see SWT#CURSOR_SIZENESW
+ * @see SWT#CURSOR_SIZENS
+ * @see SWT#CURSOR_SIZENWSE
+ * @see SWT#CURSOR_SIZEWE
+ * @see SWT#CURSOR_SIZEN
+ * @see SWT#CURSOR_SIZES
+ * @see SWT#CURSOR_SIZEE
+ * @see SWT#CURSOR_SIZEW
+ * @see SWT#CURSOR_SIZENE
+ * @see SWT#CURSOR_SIZESE
+ * @see SWT#CURSOR_SIZESW
+ * @see SWT#CURSOR_SIZENW
+ * @see SWT#CURSOR_UPARROW
+ * @see SWT#CURSOR_IBEAM
+ * @see SWT#CURSOR_NO
+ * @see SWT#CURSOR_HAND
+ */
+public Cursor(Device device, int style) {
+	super(device);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		switch (style) {
+			case SWT.CURSOR_HAND: 			handle = NSCursor.pointingHandCursor(); break;
+			case SWT.CURSOR_ARROW: 			handle = NSCursor.arrowCursor(); break;
+			case SWT.CURSOR_WAIT: 			break;
+			case SWT.CURSOR_CROSS:	 		handle = NSCursor.crosshairCursor(); break;
+			case SWT.CURSOR_APPSTARTING: 	handle = NSCursor.arrowCursor(); break;
+			case SWT.CURSOR_HELP: 			handle = NSCursor.crosshairCursor(); break;
+			case SWT.CURSOR_SIZEALL: 		handle = NSCursor.crosshairCursor(); break;
+			case SWT.CURSOR_SIZENESW: 		handle = NSCursor.crosshairCursor(); break;
+			case SWT.CURSOR_SIZENS:			handle = NSCursor.resizeUpDownCursor(); break;
+			case SWT.CURSOR_SIZENWSE: 		handle = NSCursor.crosshairCursor(); break;
+			case SWT.CURSOR_SIZEWE: 		handle = NSCursor.resizeLeftRightCursor(); break;
+			case SWT.CURSOR_SIZEN: 			handle = NSCursor.resizeUpCursor(); break;
+			case SWT.CURSOR_SIZES: 			handle = NSCursor.resizeDownCursor(); break;
+			case SWT.CURSOR_SIZEE: 			handle = NSCursor.resizeRightCursor(); break;
+			case SWT.CURSOR_SIZEW: 			handle = NSCursor.resizeLeftCursor(); break;
+			case SWT.CURSOR_SIZENE: 		handle = NSCursor.crosshairCursor(); break;
+			case SWT.CURSOR_SIZESE: 		handle = NSCursor.crosshairCursor(); break;
+			case SWT.CURSOR_SIZESW: 		handle = NSCursor.crosshairCursor(); break;
+			case SWT.CURSOR_SIZENW: 		handle = NSCursor.crosshairCursor(); break;
+			case SWT.CURSOR_UPARROW: 		handle = NSCursor.crosshairCursor(); break;
+			case SWT.CURSOR_IBEAM: 			handle = NSCursor.IBeamCursor(); break;
+			case SWT.CURSOR_NO: 			handle = NSCursor.crosshairCursor(); break;
+			default:
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		if (handle == null && style == SWT.CURSOR_WAIT) {
+			NSImage nsImage = (NSImage)new NSImage().alloc();
+			NSBitmapImageRep nsImageRep = (NSBitmapImageRep)new NSBitmapImageRep().alloc();
+			handle = (NSCursor)new NSCursor().alloc();
+			int width = 16, height = 16;
+			NSSize size = new NSSize();
+			size.width = width;
+			size.height =  height;
+			nsImage = nsImage.initWithSize(size);
+			nsImageRep = nsImageRep.initWithBitmapDataPlanes(0, width, height, 8, 4, true, false, OS.NSDeviceRGBColorSpace, 
+					OS.NSAlphaFirstBitmapFormat | OS.NSAlphaNonpremultipliedBitmapFormat, width*4, 32);
+			OS.memmove(nsImageRep.bitmapData(), WAIT_SOURCE, WAIT_SOURCE.length);
+			nsImage.addRepresentation(nsImageRep);
+			NSPoint point = new NSPoint();
+			point.x = 0;
+			point.y = 0;
+			handle = handle.initWithImage(nsImage, point);
+			nsImageRep.release();
+			nsImage.release();
+		} else {
+			handle.retain();
+		}
+		handle.setOnMouseEntered(true);
+		init();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**	 
+ * Constructs a new cursor given a device, image and mask
+ * data describing the desired cursor appearance, and the x
+ * and y coordinates of the <em>hotspot</em> (that is, the point
+ * within the area covered by the cursor which is considered
+ * to be where the on-screen pointer is "pointing").
+ * <p>
+ * The mask data is allowed to be null, but in this case the source
+ * must be an ImageData representing an icon that specifies both
+ * color data and mask data.
+ * <p>
+ * You must dispose the cursor when it is no longer required. 
+ * </p>
+ *
+ * @param device the device on which to allocate the cursor
+ * @param source the color data for the cursor
+ * @param mask the mask data for the cursor (or null)
+ * @param hotspotX the x coordinate of the cursor's hotspot
+ * @param hotspotY the y coordinate of the cursor's hotspot
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the source is null</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the mask is null and the source does not have a mask</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the source and the mask are not the same 
+ *          size, or if the hotspot is outside the bounds of the image</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES - if a handle could not be obtained for cursor creation</li>
+ * </ul>
+ */
+public Cursor(Device device, ImageData source, ImageData mask, int hotspotX, int hotspotY) {
+	super(device);
+	if (source == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (mask == null) {
+		if (source.getTransparencyType() != SWT.TRANSPARENCY_MASK) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		mask = source.getTransparencyMask();
+	}
+	/* Check the bounds. Mask must be the same size as source */
+	if (mask.width != source.width || mask.height != source.height) {
+		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	/* Check the hotspots */
+	if (hotspotX >= source.width || hotspotX < 0 ||
+		hotspotY >= source.height || hotspotY < 0) {
+		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	byte[] data = new byte[source.width * source.height * 4];
+	for (int y = 0; y < source.height; y++) {
+		int offset = y * source.width * 4;
+		for (int x = 0; x < source.width; x++) {
+			int pixel = source.getPixel(x, y);
+			int maskPixel = mask.getPixel(x, y);
+			if (pixel == 0 && maskPixel == 0) {
+				// BLACK
+				data[offset] = (byte)0xFF;
+			} else if (pixel == 0 && maskPixel == 1) {
+				// WHITE - cursor color
+				data[offset] = data[offset + 1] = data[offset + 2] = data[offset + 3] = (byte)0xFF;
+			} else if (pixel == 1 && maskPixel == 0) {
+				// SCREEN
+			} else {
+				/*
+				* Feature in the Macintosh. It is not possible to have
+				* the reverse screen case using NSCursor.
+				* Reverse screen will be the same as screen.
+				*/
+				// REVERSE SCREEN -> SCREEN
+			}
+			offset += 4;
+		}
+	}
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		createNSCursor(hotspotX, hotspotY, data, source.width, source.height);
+		init();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+void createNSCursor(int hotspotX, int hotspotY, byte[] buffer, int width, int height) {
+	NSImage nsImage = (NSImage)new NSImage().alloc();
+	NSBitmapImageRep nsImageRep = (NSBitmapImageRep)new NSBitmapImageRep().alloc();
+	handle = (NSCursor)new NSCursor().alloc();
+	NSSize size = new NSSize();
+	size.width = width;
+	size.height =  height;
+	nsImage = nsImage.initWithSize(size);
+	nsImageRep = nsImageRep.initWithBitmapDataPlanes(0, width, height,
+			8, 4, true, false, new NSString(OS.NSDeviceRGBColorSpace()),
+			OS.NSAlphaFirstBitmapFormat | OS.NSAlphaNonpremultipliedBitmapFormat, width * 4, 32);
+	OS.memmove(nsImageRep.bitmapData(), buffer, buffer.length);
+	nsImage.addRepresentation(nsImageRep);
+	NSPoint point = new NSPoint();
+	point.x = hotspotX;
+	point.y = hotspotY;
+	handle = handle.initWithImage(nsImage, point);
+	nsImageRep.release();
+	nsImage.release();
+}
+
+/**	 
+ * Constructs a new cursor given a device, image data describing
+ * the desired cursor appearance, and the x and y coordinates of
+ * the <em>hotspot</em> (that is, the point within the area
+ * covered by the cursor which is considered to be where the
+ * on-screen pointer is "pointing").
+ * <p>
+ * You must dispose the cursor when it is no longer required. 
+ * </p>
+ *
+ * @param device the device on which to allocate the cursor
+ * @param source the image data for the cursor
+ * @param hotspotX the x coordinate of the cursor's hotspot
+ * @param hotspotY the y coordinate of the cursor's hotspot
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the image is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the hotspot is outside the bounds of the
+ * 		 image</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES - if a handle could not be obtained for cursor creation</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public Cursor(Device device, ImageData source, int hotspotX, int hotspotY) {
+	super(device);
+	if (source == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (hotspotX >= source.width || hotspotX < 0 ||
+		hotspotY >= source.height || hotspotY < 0) {
+		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	byte[] data = new byte[source.width * source.height * 4];
+	PaletteData palette = source.palette;
+	if (palette.isDirect) {
+		ImageData.blit(ImageData.BLIT_SRC,
+			source.data, source.depth, source.bytesPerLine, source.getByteOrder(), 0, 0, source.width, source.height, palette.redMask, palette.greenMask, palette.blueMask,
+			ImageData.ALPHA_OPAQUE, null, 0, 0, 0, 
+			data, 32, source.width * 4, ImageData.MSB_FIRST, 0, 0, source.width, source.height, 0xFF0000, 0xFF00, 0xFF,
+			false, false);
+	} else {
+		RGB[] rgbs = palette.getRGBs();
+		int length = rgbs.length;
+		byte[] srcReds = new byte[length];
+		byte[] srcGreens = new byte[length];
+		byte[] srcBlues = new byte[length];
+		for (int i = 0; i < rgbs.length; i++) {
+			RGB rgb = rgbs[i];
+			if (rgb == null) continue;
+			srcReds[i] = (byte)rgb.red;
+			srcGreens[i] = (byte)rgb.green;
+			srcBlues[i] = (byte)rgb.blue;
+		}
+		ImageData.blit(ImageData.BLIT_SRC,
+			source.data, source.depth, source.bytesPerLine, source.getByteOrder(), 0, 0, source.width, source.height, srcReds, srcGreens, srcBlues,
+			ImageData.ALPHA_OPAQUE, null, 0, 0, 0,
+			data, 32, source.width * 4, ImageData.MSB_FIRST, 0, 0, source.width, source.height, 0xFF0000, 0xFF00, 0xFF,
+			false, false);
+	}
+	if (source.maskData != null || source.transparentPixel != -1) {
+		ImageData mask = source.getTransparencyMask();
+		byte[] maskData = mask.data;
+		int maskBpl = mask.bytesPerLine;
+		int offset = 0, maskOffset = 0;
+		for (int y = 0; y<source.height; y++) {
+			for (int x = 0; x<source.width; x++) {
+				data[offset] = ((maskData[maskOffset + (x >> 3)]) & (1 << (7 - (x & 0x7)))) != 0 ? (byte)0xff : 0;
+				offset += 4;
+			}
+			maskOffset += maskBpl;
+		}
+	} else if (source.alpha != -1) {
+		byte alpha = (byte)source.alpha;
+		for (int i=0; i<data.length; i+=4) {
+			data[i] = alpha;				
+		}
+	} else if (source.alphaData != null) {
+		byte[] alphaData = source.alphaData;
+		for (int i=0; i<data.length; i+=4) {
+			data[i] = alphaData[i/4];
+		}
+	}
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		createNSCursor(hotspotX, hotspotY, data, source.width, source.height);
+		init();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+void destroy() {
+	handle.release();
+	handle = null;
+}
+
+/**
+ * Compares the argument to the receiver, and returns true
+ * if they represent the <em>same</em> object using a class
+ * specific comparison.
+ *
+ * @param object the object to compare with this object
+ * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
+ *
+ * @see #hashCode
+ */
+public boolean equals (Object object) {
+	if (object == this) return true;
+	if (!(object instanceof Cursor)) return false;
+	Cursor cursor = (Cursor) object;
+	return device == cursor.device && handle == cursor.handle;
+}
+
+/**
+ * Returns an integer hash code for the receiver. Any two 
+ * objects that return <code>true</code> when passed to 
+ * <code>equals</code> must return the same value for this
+ * method.
+ *
+ * @return the receiver's hash
+ *
+ * @see #equals
+ */
+public int hashCode () {
+	return handle != null ? (int)/*64*/handle.id : 0;
+}
+
+/**
+ * Returns <code>true</code> if the cursor has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the cursor.
+ * When a cursor has been disposed, it is an error to
+ * invoke any other method using the cursor.
+ *
+ * @return <code>true</code> when the cursor is disposed and <code>false</code> otherwise
+ */
+public boolean isDisposed() {
+	return handle == null;
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the receiver
+ */
+public String toString () {
+	if (isDisposed()) return "Cursor {*DISPOSED*}";
+	return "Cursor {" + handle + "}";
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new cursor.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Cursor</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param device the device on which to allocate the color
+ * @param handle the handle for the cursor
+ * 
+ * @private
+ */
+public static Cursor cocoa_new(Device device, NSCursor handle) {
+	Cursor cursor = new Cursor(device);
+	cursor.handle = handle;
+	return cursor;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Device.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Device.java
new file mode 100755
index 0000000..932e1d4
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Device.java
@@ -0,0 +1,748 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.graphics;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.Compatibility;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * This class is the abstract superclass of all device objects,
+ * such as the Display device and the Printer device. Devices
+ * can have a graphics context (GC) created for them, and they
+ * can be drawn on by sending messages to the associated GC.
+ *
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public abstract class Device implements Drawable {
+	
+	/* Debugging */
+	public static boolean DEBUG;
+	boolean debug = DEBUG;
+	boolean tracking = DEBUG;
+	Error [] errors;
+	Object [] objects;
+	Object trackingLock;
+	
+	/* Disposed flag */
+	boolean disposed, warnings;
+	
+	Color COLOR_BLACK, COLOR_DARK_RED, COLOR_DARK_GREEN, COLOR_DARK_YELLOW, COLOR_DARK_BLUE;
+	Color COLOR_DARK_MAGENTA, COLOR_DARK_CYAN, COLOR_GRAY, COLOR_DARK_GRAY, COLOR_RED;
+	Color COLOR_GREEN, COLOR_YELLOW, COLOR_BLUE, COLOR_MAGENTA, COLOR_CYAN, COLOR_WHITE;
+
+	/* System Font */
+	Font systemFont;
+	
+	NSMutableParagraphStyle paragraphStyle;
+	
+	/* Device DPI */
+	Point dpi;
+	
+	/*
+	* TEMPORARY CODE. When a graphics object is
+	* created and the device parameter is null,
+	* the current Display is used. This presents
+	* a problem because SWT graphics does not
+	* reference classes in SWT widgets. The correct
+	* fix is to remove this feature. Unfortunately,
+	* too many application programs rely on this
+	* feature.
+	*/
+	protected static Device CurrentDevice;
+	protected static Runnable DeviceFinder;
+	static {
+		try {
+			Class.forName ("org.eclipse.swt.widgets.Display");
+		} catch (ClassNotFoundException e) {}
+	}	
+
+/*
+* TEMPORARY CODE.
+*/
+static synchronized Device getDevice () {
+	if (DeviceFinder != null) DeviceFinder.run();
+	Device device = CurrentDevice;
+	CurrentDevice = null;
+	return device;
+}
+
+/**
+ * Constructs a new instance of this class.
+ * <p>
+ * You must dispose the device when it is no longer required. 
+ * </p>
+ *
+ * @see #create
+ * @see #init
+ * 
+ * @since 3.1
+ */
+public Device() {
+	this(null);
+}
+
+/**
+ * Constructs a new instance of this class.
+ * <p>
+ * You must dispose the device when it is no longer required. 
+ * </p>
+ *
+ * @param data the DeviceData which describes the receiver
+ *
+ * @see #create
+ * @see #init
+ * @see DeviceData
+ */
+public Device(DeviceData data) {
+	synchronized (Device.class) {
+		if (data != null) {
+			debug = data.debug;
+			tracking = data.tracking;
+		}
+		if (tracking) {
+			errors = new Error [128];
+			objects = new Object [128];
+			trackingLock = new Object ();
+		}
+		if (NSThread.isMainThread()) {
+			NSAutoreleasePool pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+			NSThread nsthread = NSThread.currentThread();
+			NSMutableDictionary dictionary = nsthread.threadDictionary();
+			NSString key = NSString.stringWith("SWT_NSAutoreleasePool");
+			id obj = dictionary.objectForKey(key);
+			if (obj == null) {
+				NSNumber nsnumber = NSNumber.numberWithInteger(pool.id);
+				dictionary.setObject(nsnumber, key);
+			} else {
+				pool.release();
+			}
+		}
+		//check and create pool
+		create (data);
+		init ();
+	}
+}
+
+/**
+ * Throws an <code>SWTException</code> if the receiver can not
+ * be accessed by the caller. This may include both checks on
+ * the state of the receiver and more generally on the entire
+ * execution context. This method <em>should</em> be called by
+ * device implementors to enforce the standard SWT invariants.
+ * <p>
+ * Currently, it is an error to invoke any method (other than
+ * <code>isDisposed()</code> and <code>dispose()</code>) on a
+ * device that has had its <code>dispose()</code> method called.
+ * </p><p>
+ * In future releases of SWT, there may be more or fewer error
+ * checks and exceptions may be thrown for different reasons.
+ * <p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+protected void checkDevice () {
+	if (disposed) SWT.error(SWT.ERROR_DEVICE_DISPOSED);
+}
+
+/**
+ * Creates the device in the operating system.  If the device
+ * does not have a handle, this method may do nothing depending
+ * on the device.
+ * <p>
+ * This method is called before <code>init</code>.
+ * </p><p>
+ * Subclasses are supposed to reimplement this method and not
+ * call the <code>super</code> implementation.
+ * </p>
+ *
+ * @param data the DeviceData which describes the receiver
+ *
+ * @see #init
+ */
+protected void create (DeviceData data) {
+}
+
+/**
+ * Disposes of the operating system resources associated with
+ * the receiver. After this method has been invoked, the receiver
+ * will answer <code>true</code> when sent the message
+ * <code>isDisposed()</code>.
+ *
+ * @see #release
+ * @see #destroy
+ * @see #checkDevice
+ */
+public void dispose () {
+	synchronized (Device.class) {
+		if (isDisposed()) return;
+		checkDevice ();
+		release ();
+		destroy ();
+		disposed = true;
+		if (tracking) {
+			synchronized (trackingLock) {
+				printErrors ();
+				objects = null;
+				errors = null;
+				trackingLock = null;
+			}
+		}
+	}
+}
+
+void dispose_Object (Object object) {
+	synchronized (trackingLock) {
+		for (int i=0; i<objects.length; i++) {
+			if (objects [i] == object) {
+				objects [i] = null;
+				errors [i] = null;
+				return;
+			}
+		}
+	}
+}
+
+/**
+ * Destroys the device in the operating system and releases
+ * the device's handle.  If the device does not have a handle,
+ * this method may do nothing depending on the device.
+ * <p>
+ * This method is called after <code>release</code>.
+ * </p><p>
+ * Subclasses are supposed to reimplement this method and not
+ * call the <code>super</code> implementation.
+ * </p>
+ *
+ * @see #dispose
+ * @see #release
+ */
+protected void destroy () {
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location.
+ *
+ * @return the bounding rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Rectangle getBounds () {
+	checkDevice ();
+	NSRect frame = getPrimaryScreen().frame();
+	return new Rectangle((int)frame.x, (int)frame.y, (int)frame.width, (int)frame.height);
+}
+
+/**
+ * Returns a <code>DeviceData</code> based on the receiver.
+ * Modifications made to this <code>DeviceData</code> will not
+ * affect the receiver.
+ *
+ * @return a <code>DeviceData</code> containing the device's data and attributes
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see DeviceData
+ */
+public DeviceData getDeviceData () {
+	checkDevice();
+	DeviceData data = new DeviceData ();
+	data.debug = debug;
+	data.tracking = tracking;
+	if (tracking) {
+		synchronized (trackingLock) {
+			int count = 0, length = objects.length;
+			for (int i=0; i<length; i++) {
+				if (objects [i] != null) count++;
+			}
+			int index = 0;
+			data.objects = new Object [count];
+			data.errors = new Error [count];
+			for (int i=0; i<length; i++) {
+				if (objects [i] != null) {
+					data.objects [index] = objects [i];
+					data.errors [index] = errors [i];
+					index++;
+				}
+			}
+		}
+	} else {
+		data.objects = new Object [0];
+		data.errors = new Error [0];
+	}
+	return data;
+}
+
+/**
+ * Returns a rectangle which describes the area of the
+ * receiver which is capable of displaying data.
+ * 
+ * @return the client area
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #getBounds
+ */
+public Rectangle getClientArea () {
+	checkDevice ();
+	return getBounds ();
+}
+
+/**
+ * Returns the bit depth of the screen, which is the number of
+ * bits it takes to represent the number of unique colors that
+ * the screen is currently capable of displaying. This number 
+ * will typically be one of 1, 8, 15, 16, 24 or 32.
+ *
+ * @return the depth of the screen
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getDepth () {
+	checkDevice ();	
+	return (int)/*64*/OS.NSBitsPerPixelFromDepth(getPrimaryScreen().depth());
+}
+
+/**
+ * Returns a point whose x coordinate is the horizontal
+ * dots per inch of the display, and whose y coordinate
+ * is the vertical dots per inch of the display.
+ *
+ * @return the horizontal and vertical DPI
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Point getDPI () {
+	checkDevice ();
+	return getScreenDPI();
+}
+
+NSScreen getPrimaryScreen () {
+	NSArray screens = NSScreen.screens();
+	return new NSScreen(screens.objectAtIndex(0));
+}
+
+/**
+ * Returns <code>FontData</code> objects which describe
+ * the fonts that match the given arguments. If the
+ * <code>faceName</code> is null, all fonts will be returned.
+ *
+ * @param faceName the name of the font to look for, or null
+ * @param scalable if true only scalable fonts are returned, otherwise only non-scalable fonts are returned.
+ * @return the matching font data
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public FontData[] getFontList (String faceName, boolean scalable) {
+	checkDevice ();
+	if (!scalable) return new FontData[0];
+	int count = 0;
+	NSArray families = NSFontManager.sharedFontManager().availableFontFamilies();
+	int /*long*/ familyCount = families.count();
+	FontData[] fds = new FontData[100];
+	for (int i = 0; i < familyCount; i++) {
+		NSString nsFamily = new NSString(families.objectAtIndex(i));
+		String name = nsFamily.getString();
+		NSArray fonts = NSFontManager.sharedFontManager().availableMembersOfFontFamily(nsFamily);
+		int fontCount = (int)/*64*/fonts.count();
+		for (int j = 0; j < fontCount; j++) {
+			NSArray fontDetails = new NSArray(fonts.objectAtIndex(j));
+			String nsName = new NSString(fontDetails.objectAtIndex(0)).getString();
+			int /*long*/ weight = new NSNumber(fontDetails.objectAtIndex(2)).integerValue();
+			int /*long*/ traits = new NSNumber(fontDetails.objectAtIndex(3)).integerValue();
+			int style = SWT.NORMAL;
+			if ((traits & OS.NSItalicFontMask) != 0) style |= SWT.ITALIC;
+			if (weight == 9) style |= SWT.BOLD;
+			if (faceName == null || Compatibility.equalsIgnoreCase(faceName, name)) {
+				FontData data = new FontData(name, 0, style);
+				data.nsName = nsName;
+				if (count == fds.length) {
+					FontData[] newFds = new FontData[fds.length + 100];
+					System.arraycopy(fds, 0, newFds, 0, fds.length);
+					fds = newFds;
+				}
+				fds[count++] = data;
+			}
+		}
+	}
+	if (count == fds.length) return fds;
+	FontData[] result = new FontData[count];
+	System.arraycopy(fds, 0, result, 0, count);
+	return result;
+}
+
+Point getScreenDPI () {
+	NSDictionary dictionary = getPrimaryScreen().deviceDescription();
+	NSValue value = new NSValue(dictionary.objectForKey(new id(OS.NSDeviceResolution())).id);
+	NSSize size = value.sizeValue();
+	return new Point((int)size.width, (int)size.height);
+}
+
+/**
+ * Returns the matching standard color for the given
+ * constant, which should be one of the color constants
+ * specified in class <code>SWT</code>. Any value other
+ * than one of the SWT color constants which is passed
+ * in will result in the color black. This color should
+ * not be freed because it was allocated by the system,
+ * not the application.
+ *
+ * @param id the color constant
+ * @return the matching color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see SWT
+ */
+public Color getSystemColor (int id) {
+	checkDevice ();
+	switch (id) {
+		case SWT.COLOR_BLACK: 				return COLOR_BLACK;
+		case SWT.COLOR_DARK_RED: 			return COLOR_DARK_RED;
+		case SWT.COLOR_DARK_GREEN:	 		return COLOR_DARK_GREEN;
+		case SWT.COLOR_DARK_YELLOW: 		return COLOR_DARK_YELLOW;
+		case SWT.COLOR_DARK_BLUE: 			return COLOR_DARK_BLUE;
+		case SWT.COLOR_DARK_MAGENTA: 		return COLOR_DARK_MAGENTA;
+		case SWT.COLOR_DARK_CYAN: 			return COLOR_DARK_CYAN;
+		case SWT.COLOR_GRAY: 				return COLOR_GRAY;
+		case SWT.COLOR_DARK_GRAY: 			return COLOR_DARK_GRAY;
+		case SWT.COLOR_RED: 				return COLOR_RED;
+		case SWT.COLOR_GREEN: 				return COLOR_GREEN;
+		case SWT.COLOR_YELLOW: 				return COLOR_YELLOW;
+		case SWT.COLOR_BLUE: 				return COLOR_BLUE;
+		case SWT.COLOR_MAGENTA: 			return COLOR_MAGENTA;
+		case SWT.COLOR_CYAN: 				return COLOR_CYAN;
+		case SWT.COLOR_WHITE: 				return COLOR_WHITE;
+	}
+	return COLOR_BLACK;
+}
+
+/**
+ * Returns a reasonable font for applications to use.
+ * On some platforms, this will match the "default font"
+ * or "system font" if such can be found.  This font
+ * should not be freed because it was allocated by the
+ * system, not the application.
+ * <p>
+ * Typically, applications which want the default look
+ * should simply not set the font on the widgets they
+ * create. Widgets are always created with the correct
+ * default font for the class of user-interface component
+ * they represent.
+ * </p>
+ *
+ * @return a font
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Font getSystemFont () {
+	checkDevice ();
+	return systemFont;
+}
+
+/**
+ * Returns <code>true</code> if the underlying window system prints out
+ * warning messages on the console, and <code>setWarnings</code>
+ * had previously been called with <code>true</code>.
+ *
+ * @return <code>true</code>if warnings are being handled, and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public boolean getWarnings () {
+	checkDevice ();
+	return warnings;
+}
+
+/**
+ * Initializes any internal resources needed by the
+ * device.
+ * <p>
+ * This method is called after <code>create</code>.
+ * </p><p>
+ * If subclasses reimplement this method, they must
+ * call the <code>super</code> implementation.
+ * </p>
+ * 
+ * @see #create
+ */
+protected void init () {
+	/* Create the standard colors */
+	COLOR_BLACK = new Color (this, 0,0,0);
+	COLOR_DARK_RED = new Color (this, 0x80,0,0);
+	COLOR_DARK_GREEN = new Color (this, 0,0x80,0);
+	COLOR_DARK_YELLOW = new Color (this, 0x80,0x80,0);
+	COLOR_DARK_BLUE = new Color (this, 0,0,0x80);
+	COLOR_DARK_MAGENTA = new Color (this, 0x80,0,0x80);
+	COLOR_DARK_CYAN = new Color (this, 0,0x80,0x80);
+	COLOR_GRAY = new Color (this, 0xC0,0xC0,0xC0);
+	COLOR_DARK_GRAY = new Color (this, 0x80,0x80,0x80);
+	COLOR_RED = new Color (this, 0xFF,0,0);
+	COLOR_GREEN = new Color (this, 0,0xFF,0);
+	COLOR_YELLOW = new Color (this, 0xFF,0xFF,0);
+	COLOR_BLUE = new Color (this, 0,0,0xFF);
+	COLOR_MAGENTA = new Color (this, 0xFF,0,0xFF);
+	COLOR_CYAN = new Color (this, 0,0xFF,0xFF);
+	COLOR_WHITE = new Color (this, 0xFF,0xFF,0xFF);
+	
+	paragraphStyle = (NSMutableParagraphStyle)new NSMutableParagraphStyle().alloc().init();
+	paragraphStyle.setAlignment(OS.NSLeftTextAlignment);
+	paragraphStyle.setLineBreakMode(OS.NSLineBreakByClipping);
+	NSArray tabs = new NSArray(new NSArray().alloc().init());
+	paragraphStyle.setTabStops(tabs);
+	tabs.release();
+	
+	/* Initialize the system font slot */
+	boolean smallFonts = System.getProperty("org.eclipse.swt.internal.carbon.smallFonts") != null;
+	float /*double*/ systemFontSize = smallFonts ? NSFont.smallSystemFontSize() : NSFont.systemFontSize();		
+	Point dpi = this.dpi = getDPI(), screenDPI = getScreenDPI();
+	NSFont font = NSFont.systemFontOfSize(systemFontSize * dpi.y / screenDPI.y);
+	font.retain();
+	systemFont = Font.cocoa_new(this, font);
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new GC handle.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Device</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param data the platform specific GC data 
+ * @return the platform specific GC handle
+ */
+public abstract int /*long*/ internal_new_GC (GCData data);
+
+/**	 
+ * Invokes platform specific functionality to dispose a GC handle.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Device</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param hDC the platform specific GC handle
+ * @param data the platform specific GC data 
+ */
+public abstract void internal_dispose_GC (int /*long*/ handle, GCData data);
+
+/**
+ * Returns <code>true</code> if the device has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the device.
+ * When a device has been disposed, it is an error to
+ * invoke any other method using the device.
+ *
+ * @return <code>true</code> when the device is disposed and <code>false</code> otherwise
+ */
+public boolean isDisposed () {
+	synchronized (Device.class) {
+		return disposed;
+	}
+}
+
+/**
+ * Loads the font specified by a file.  The font will be
+ * present in the list of fonts available to the application.
+ *
+ * @param path the font file path
+ * @return whether the font was successfully loaded
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if path is null</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see Font
+ * 
+ * @since 3.3
+ */
+public boolean loadFont (String path) {
+	checkDevice();
+	if (path == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	boolean result = false;
+	NSString nsPath = NSString.stringWith(path);
+	int /*long*/ fsRepresentation = nsPath.fileSystemRepresentation();
+	
+	if (fsRepresentation != 0) {
+		byte [] fsRef = new byte [80];
+		boolean [] isDirectory = new boolean[1];
+		if (OS.FSPathMakeRef (fsRepresentation, fsRef, isDirectory) == OS.noErr) {
+			result = OS.ATSFontActivateFromFileReference (fsRef, OS.kATSFontContextLocal, OS.kATSFontFormatUnspecified, 0, OS.kATSOptionFlagsDefault, null) == OS.noErr;
+		}
+	}
+
+	return result;
+}
+
+void new_Object (Object object) {
+	synchronized (trackingLock) {
+		for (int i=0; i<objects.length; i++) {
+			if (objects [i] == null) {
+				objects [i] = object;
+				errors [i] = new Error ();
+				return;
+			}
+		}
+		Object [] newObjects = new Object [objects.length + 128];
+		System.arraycopy (objects, 0, newObjects, 0, objects.length);
+		newObjects [objects.length] = object;
+		objects = newObjects;
+		Error [] newErrors = new Error [errors.length + 128];
+		System.arraycopy (errors, 0, newErrors, 0, errors.length);
+		newErrors [errors.length] = new Error ();
+		errors = newErrors;
+	}
+}
+
+void printErrors () {
+	if (!DEBUG) return;
+	if (tracking) {
+		synchronized (trackingLock) {
+			if (objects == null || errors == null) return;
+			int objectCount = 0;
+			int colors = 0, cursors = 0, fonts = 0, gcs = 0, images = 0;
+			int paths = 0, patterns = 0, regions = 0, textLayouts = 0, transforms = 0;
+			for (int i=0; i<objects.length; i++) {
+				Object object = objects [i];
+				if (object != null) {
+					objectCount++;
+					if (object instanceof Color) colors++;
+					if (object instanceof Cursor) cursors++;
+					if (object instanceof Font) fonts++;
+					if (object instanceof GC) gcs++;
+					if (object instanceof Image) images++;
+					if (object instanceof Path) paths++;
+					if (object instanceof Pattern) patterns++;
+					if (object instanceof Region) regions++;
+					if (object instanceof TextLayout) textLayouts++;
+					if (object instanceof Transform) transforms++;
+				}
+			}
+			if (objectCount != 0) {
+				String string = "Summary: ";
+				if (colors != 0) string += colors + " Color(s), ";
+				if (cursors != 0) string += cursors + " Cursor(s), ";
+				if (fonts != 0) string += fonts + " Font(s), ";
+				if (gcs != 0) string += gcs + " GC(s), ";
+				if (images != 0) string += images + " Image(s), ";
+				if (paths != 0) string += paths + " Path(s), ";
+				if (patterns != 0) string += patterns + " Pattern(s), ";
+				if (regions != 0) string += regions + " Region(s), ";
+				if (textLayouts != 0) string += textLayouts + " TextLayout(s), ";
+				if (transforms != 0) string += transforms + " Transforms(s), ";
+				if (string.length () != 0) {
+					string = string.substring (0, string.length () - 2);
+					System.out.println (string);
+				}
+				for (int i=0; i<errors.length; i++) {
+					if (errors [i] != null) errors [i].printStackTrace (System.out);
+				}
+			}
+		}
+	}
+}
+
+/**
+ * Releases any internal resources back to the operating
+ * system and clears all fields except the device handle.
+ * <p>
+ * When a device is destroyed, resources that were acquired
+ * on behalf of the programmer need to be returned to the
+ * operating system.  For example, if the device allocated a
+ * font to be used as the system font, this font would be
+ * freed in <code>release</code>.  Also,to assist the garbage
+ * collector and minimize the amount of memory that is not
+ * reclaimed when the programmer keeps a reference to a
+ * disposed device, all fields except the handle are zero'd.
+ * The handle is needed by <code>destroy</code>.
+ * </p>
+ * This method is called before <code>destroy</code>.
+ * </p><p>
+ * If subclasses reimplement this method, they must
+ * call the <code>super</code> implementation.
+ * </p>
+ *
+ * @see #dispose
+ * @see #destroy
+ */
+protected void release () {
+	if (paragraphStyle != null) paragraphStyle.release();
+	paragraphStyle = null;
+	
+	if (systemFont != null) systemFont.dispose();
+	systemFont = null;
+
+	if (COLOR_BLACK != null) COLOR_BLACK.dispose();
+	if (COLOR_DARK_RED != null) COLOR_DARK_RED.dispose();
+	if (COLOR_DARK_GREEN != null) COLOR_DARK_GREEN.dispose();
+	if (COLOR_DARK_YELLOW != null) COLOR_DARK_YELLOW.dispose();
+	if (COLOR_DARK_BLUE != null) COLOR_DARK_BLUE.dispose();
+	if (COLOR_DARK_MAGENTA != null) COLOR_DARK_MAGENTA.dispose();
+	if (COLOR_DARK_CYAN != null) COLOR_DARK_CYAN.dispose();
+	if (COLOR_GRAY != null) COLOR_GRAY.dispose();
+	if (COLOR_DARK_GRAY != null) COLOR_DARK_GRAY.dispose();
+	if (COLOR_RED != null) COLOR_RED.dispose();
+	if (COLOR_GREEN != null) COLOR_GREEN.dispose();
+	if (COLOR_YELLOW != null) COLOR_YELLOW.dispose();
+	if (COLOR_BLUE != null) COLOR_BLUE.dispose();
+	if (COLOR_MAGENTA != null) COLOR_MAGENTA.dispose();
+	if (COLOR_CYAN != null) COLOR_CYAN.dispose();
+	if (COLOR_WHITE != null) COLOR_WHITE.dispose();
+	COLOR_BLACK = COLOR_DARK_RED = COLOR_DARK_GREEN = COLOR_DARK_YELLOW = COLOR_DARK_BLUE =
+	COLOR_DARK_MAGENTA = COLOR_DARK_CYAN = COLOR_GRAY = COLOR_DARK_GRAY = COLOR_RED =
+	COLOR_GREEN = COLOR_YELLOW = COLOR_BLUE = COLOR_MAGENTA = COLOR_CYAN = COLOR_WHITE = null;
+}
+
+/**
+ * If the underlying window system supports printing warning messages
+ * to the console, setting warnings to <code>false</code> prevents these
+ * messages from being printed. If the argument is <code>true</code> then
+ * message printing is not blocked.
+ *
+ * @param warnings <code>true</code>if warnings should be printed, and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setWarnings (boolean warnings) {
+	checkDevice ();
+	this.warnings = warnings;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/DeviceData.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/DeviceData.java
new file mode 100755
index 0000000..ad0c2b2
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/DeviceData.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.graphics;
+
+
+public class DeviceData {
+	/*
+	* Debug fields - may not be honoured
+	* on some SWT platforms.
+	*/
+	public boolean debug;
+	public boolean tracking;
+	public Error [] errors;
+	public Object [] objects;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Font.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Font.java
new file mode 100755
index 0000000..b30ab41
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Font.java
@@ -0,0 +1,370 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.graphics;
+
+
+import org.eclipse.swt.internal.cocoa.*;
+import org.eclipse.swt.*;
+
+/**
+ * Instances of this class manage operating system resources that
+ * define how text looks when it is displayed. Fonts may be constructed
+ * by providing a device and either name, size and style information
+ * or a <code>FontData</code> object which encapsulates this data.
+ * <p>
+ * Application code must explicitly invoke the <code>Font.dispose()</code> 
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ *
+ * @see FontData
+ * @see <a href="http://www.eclipse.org/swt/snippets/#font">Font snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Examples: GraphicsExample, PaintExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public final class Font extends Resource {
+
+	/**
+	 * the handle to the OS font resource
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public NSFont handle;
+	
+	/**
+	 * the traits not supported to the OS font resource
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public int extraTraits;
+	
+	static final double SYNTHETIC_BOLD = -2.5;
+	static final double SYNTHETIC_ITALIC = 0.2;
+
+Font(Device device) {
+	super(device);
+}
+
+/**	 
+ * Constructs a new font given a device and font data
+ * which describes the desired font's appearance.
+ * <p>
+ * You must dispose the font when it is no longer required. 
+ * </p>
+ *
+ * @param device the device to create the font on
+ * @param fd the FontData that describes the desired font (must not be null)
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the fd argument is null</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES - if a font could not be created from the given font data</li>
+ * </ul>
+ */
+public Font(Device device, FontData fd) {
+	super(device);
+	if (fd == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		init(fd.getName(), fd.getHeightF(), fd.getStyle(), fd.nsName);
+		init();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**	 
+ * Constructs a new font given a device and an array
+ * of font data which describes the desired font's
+ * appearance.
+ * <p>
+ * You must dispose the font when it is no longer required. 
+ * </p>
+ *
+ * @param device the device to create the font on
+ * @param fds the array of FontData that describes the desired font (must not be null)
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the fds argument is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the length of fds is zero</li>
+ *    <li>ERROR_NULL_ARGUMENT - if any fd in the array is null</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES - if a font could not be created from the given font data</li>
+ * </ul>
+ * 
+ * @since 2.1
+ */
+public Font(Device device, FontData[] fds) {
+	super(device);
+	if (fds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (fds.length == 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	for (int i=0; i<fds.length; i++) {
+		if (fds[i] == null) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		FontData fd = fds[0];
+		init(fd.getName(), fd.getHeightF(), fd.getStyle(), fd.nsName);
+		init();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**	 
+ * Constructs a new font given a device, a font name,
+ * the height of the desired font in points, and a font
+ * style.
+ * <p>
+ * You must dispose the font when it is no longer required. 
+ * </p>
+ *
+ * @param device the device to create the font on
+ * @param name the name of the font (must not be null)
+ * @param height the font height in points
+ * @param style a bit or combination of NORMAL, BOLD, ITALIC
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the name argument is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the height is negative</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES - if a font could not be created from the given arguments</li>
+ * </ul>
+ */
+public Font(Device device, String name, int height, int style) {
+	super(device);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		init(name, height, style, null);
+		init();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/*public*/ Font(Device device, String name, float height, int style) {
+	super(device);
+	init(name, height, style, null);
+	init();
+}
+
+void addTraits(NSMutableAttributedString attrStr, NSRange range) {
+	if ((extraTraits & OS.NSBoldFontMask) != 0) {
+		attrStr.addAttribute(OS.NSStrokeWidthAttributeName, NSNumber.numberWithDouble(SYNTHETIC_BOLD), range);
+	}
+	if ((extraTraits & OS.NSItalicFontMask) != 0) {
+		attrStr.addAttribute(OS.NSObliquenessAttributeName, NSNumber.numberWithDouble(SYNTHETIC_ITALIC), range);
+	}
+}
+
+void addTraits(NSMutableDictionary dict) {
+	if ((extraTraits & OS.NSBoldFontMask) != 0) {
+		dict.setObject(NSNumber.numberWithDouble(SYNTHETIC_BOLD), OS.NSStrokeWidthAttributeName);
+	}
+	if ((extraTraits & OS.NSItalicFontMask) != 0) {
+		dict.setObject(NSNumber.numberWithDouble(SYNTHETIC_ITALIC), OS.NSObliquenessAttributeName);
+	}
+}
+
+void destroy() {
+	handle.release();
+	handle = null;
+}
+
+/**
+ * Compares the argument to the receiver, and returns true
+ * if they represent the <em>same</em> object using a class
+ * specific comparison.
+ *
+ * @param object the object to compare with this object
+ * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
+ *
+ * @see #hashCode
+ */
+public boolean equals(Object object) {
+	if (object == this) return true;
+	if (!(object instanceof Font)) return false;
+	Font font = (Font)object;
+	return handle == font.handle;
+}
+
+/**
+ * Returns an array of <code>FontData</code>s representing the receiver.
+ * On Windows, only one FontData will be returned per font. On X however, 
+ * a <code>Font</code> object <em>may</em> be composed of multiple X 
+ * fonts. To support this case, we return an array of font data objects.
+ *
+ * @return an array of font data objects describing the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public FontData[] getFontData() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSString family = handle.familyName();
+		String name = family.getString();
+		NSString str = handle.fontName();
+		String nsName = str.getString();
+		NSFontManager manager = NSFontManager.sharedFontManager();
+		int /*long*/ traits = manager.traitsOfFont(handle);
+		int style = SWT.NORMAL;
+		if ((traits & OS.NSItalicFontMask) != 0) style |= SWT.ITALIC;
+		if ((traits & OS.NSBoldFontMask) != 0) style |= SWT.BOLD;
+		if ((extraTraits & OS.NSItalicFontMask) != 0) style |= SWT.ITALIC;
+		if ((extraTraits & OS.NSBoldFontMask) != 0) style |= SWT.BOLD;
+		Point dpi = device.dpi, screenDPI = device.getScreenDPI();
+		FontData data = new FontData(name, (float)/*64*/handle.pointSize() * screenDPI.y / dpi.y, style);
+		data.nsName = nsName;
+		return new FontData[]{data};
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new font.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Font</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param device the device on which to allocate the color
+ * @param handle the handle for the font
+ * @param style the style for the font
+ * @param size the size for the font
+ * 
+ * @private
+ */
+public static Font cocoa_new(Device device, NSFont handle) {
+	Font font = new Font(device);
+	font.handle = handle;
+	return font;
+}
+
+/**
+ * Returns an integer hash code for the receiver. Any two 
+ * objects that return <code>true</code> when passed to 
+ * <code>equals</code> must return the same value for this
+ * method.
+ *
+ * @return the receiver's hash
+ *
+ * @see #equals
+ */
+public int hashCode() {
+	return handle != null ? (int)/*64*/handle.id : 0;
+}
+
+void init(String name, float height, int style, String nsName) {
+	if (name == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (height < 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	Point dpi = device.dpi, screenDPI = device.getScreenDPI();
+	float size = height * dpi.y / screenDPI.y;
+	if (nsName != null) {
+		handle = NSFont.fontWithName(NSString.stringWith(nsName), size);
+	} else {
+		NSString family = NSString.stringWith(name);
+		NSFont nsFont = NSFont.fontWithName(family, size);
+		if (nsFont == null) nsFont = NSFont.systemFontOfSize(size);
+		NSFontManager manager = NSFontManager.sharedFontManager();
+		if (nsFont != null) {
+			if ((style & (SWT.BOLD | SWT.ITALIC)) == 0) {
+				handle = nsFont;
+			} else {
+				int traits = 0;
+				if ((style & SWT.ITALIC) != 0) traits |= OS.NSItalicFontMask;
+				if ((style & SWT.BOLD) != 0) traits |= OS.NSBoldFontMask;
+				handle = manager.convertFont(nsFont, traits);
+				if ((style & SWT.ITALIC) != 0 && (handle == null || (manager.traitsOfFont(handle) & OS.NSItalicFontMask) == 0)) {
+					traits &= ~OS.NSItalicFontMask;
+					handle = null;
+					if ((style & SWT.BOLD) != 0) {
+						handle = manager.convertFont(nsFont, traits);
+					}
+				}
+				if ((style & SWT.BOLD) != 0 && handle == null) {
+					traits &= ~OS.NSBoldFontMask;
+					if ((style & SWT.ITALIC) != 0) {
+						traits |= OS.NSItalicFontMask;
+						handle = manager.convertFont(nsFont, traits);
+					}
+				}
+				if (handle == null) handle = nsFont;
+			}
+		}
+		if (handle == null) {
+			handle = NSFont.systemFontOfSize(size);
+		}
+		if ((style & SWT.ITALIC) != 0 && (manager.traitsOfFont(handle) & OS.NSItalicFontMask) == 0) {
+			extraTraits |= OS.NSItalicFontMask;
+		}
+		if ((style & SWT.BOLD) != 0 && (manager.traitsOfFont(handle) & OS.NSBoldFontMask) == 0) {
+			extraTraits |= OS.NSBoldFontMask;
+		}
+	}
+	if (handle == null) {
+		handle = device.systemFont.handle;
+	}
+	handle.retain();
+}
+
+/**
+ * Returns <code>true</code> if the font has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the font.
+ * When a font has been disposed, it is an error to
+ * invoke any other method using the font.
+ *
+ * @return <code>true</code> when the font is disposed and <code>false</code> otherwise
+ */
+public boolean isDisposed() {
+	return handle == null;
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the receiver
+ */
+public String toString () {
+	if (isDisposed()) return "Font {*DISPOSED*}";
+	return "Font {" + handle + "}";
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/FontData.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/FontData.java
new file mode 100755
index 0000000..589f151
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/FontData.java
@@ -0,0 +1,447 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.graphics;
+
+
+import org.eclipse.swt.*;
+
+/**
+ * Instances of this class describe operating system fonts.
+ * <p>
+ * For platform-independent behaviour, use the get and set methods
+ * corresponding to the following properties:
+ * <dl>
+ * <dt>height</dt><dd>the height of the font in points</dd>
+ * <dt>name</dt><dd>the face name of the font, which may include the foundry</dd>
+ * <dt>style</dt><dd>A bitwise combination of NORMAL, ITALIC and BOLD</dd>
+ * </dl>
+ * If extra, platform-dependent functionality is required:
+ * <ul>
+ * <li>On <em>Windows</em>, the data member of the <code>FontData</code>
+ * corresponds to a Windows <code>LOGFONT</code> structure whose fields
+ * may be retrieved and modified.</li>
+ * <li>On <em>X</em>, the fields of the <code>FontData</code> correspond
+ * to the entries in the font's XLFD name and may be retrieved and modified.
+ * </ul>
+ * Application code does <em>not</em> need to explicitly release the
+ * resources managed by each instance when those instances are no longer
+ * required, and thus no <code>dispose()</code> method is provided.
+ *
+ * @see Font
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public final class FontData {
+	/**
+	 * the font name
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public String name;
+
+	/**
+	 * The height of the font data in points
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public float height;
+
+	/**
+	 * the font style
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public int style;
+
+	/**
+	 * the NSFont font name
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public String nsName;
+
+	/**
+	 * The locales of the font
+	 */
+	String lang, country, variant;
+	
+/**	 
+ * Constructs a new uninitialized font data.
+ */
+public FontData () {
+	this("", 12, SWT.NORMAL);
+}
+
+/**
+ * Constructs a new FontData given a string representation
+ * in the form generated by the <code>FontData.toString</code>
+ * method.
+ * <p>
+ * Note that the representation varies between platforms,
+ * and a FontData can only be created from a string that was 
+ * generated on the same platform.
+ * </p>
+ *
+ * @param string the string representation of a <code>FontData</code> (must not be null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument does not represent a valid description</li>
+ * </ul>
+ *
+ * @see #toString
+ */
+public FontData(String string) {
+	if (string == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	int start = 0;
+	int end = string.indexOf('|');
+	if (end == -1) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	String version1 = string.substring(start, end);
+	try {
+		if (Integer.parseInt(version1) != 1) SWT.error(SWT.ERROR_INVALID_ARGUMENT); 
+	} catch (NumberFormatException e) {
+		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	
+	start = end + 1;
+	end = string.indexOf('|', start);
+	if (end == -1) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	String name = string.substring(start, end);
+	
+	start = end + 1;
+	end = string.indexOf('|', start);
+	if (end == -1) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	float height = 0;
+	try {
+		height = Float.parseFloat(string.substring(start, end));
+	} catch (NumberFormatException e) {
+		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	
+	start = end + 1;
+	end = string.indexOf('|', start);
+	if (end == -1) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	int style = 0;
+	try {
+		style = Integer.parseInt(string.substring(start, end));
+	} catch (NumberFormatException e) {
+		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+
+	start = end + 1;
+	end = string.indexOf('|', start);
+	setName(name);
+	setHeight(height);
+	setStyle(style);
+	if (end == -1) return;
+	String platform = string.substring(start, end);
+
+	start = end + 1;
+	end = string.indexOf('|', start);
+	if (end == -1) return;
+	String version2 = string.substring(start, end);
+
+	if (platform.equals("COCOA") && version2.equals("1")) {
+		start = end + 1;
+		end = string.length();
+		if (start < end) nsName = string.substring(start, end);
+	}
+}
+
+/**	 
+ * Constructs a new font data given a font name,
+ * the height of the desired font in points, 
+ * and a font style.
+ *
+ * @param name the name of the font (must not be null)
+ * @param height the font height in points
+ * @param style a bit or combination of NORMAL, BOLD, ITALIC
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - when the font name is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the height is negative</li>
+ * </ul>
+ */
+public FontData(String name, int height, int style) {
+	setName(name);
+	setHeight(height);
+	setStyle(style);
+}
+
+/*public*/ FontData(String name, float height, int style) {
+	setName(name);
+	setHeight(height);
+	setStyle(style);
+}
+
+/**
+ * Compares the argument to the receiver, and returns true
+ * if they represent the <em>same</em> object using a class
+ * specific comparison.
+ *
+ * @param object the object to compare with this object
+ * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
+ *
+ * @see #hashCode
+ */
+public boolean equals (Object object) {
+	if (object == this) return true;
+	if (!(object instanceof FontData)) return false;
+	FontData data = (FontData)object;
+	return name.equals(data.name) && height == data.height && style == data.style;
+}
+
+/**
+ * Returns the height of the receiver in points.
+ *
+ * @return the height of this FontData
+ *
+ * @see #setHeight(int)
+ */
+public int getHeight() {
+	return (int)height;
+}
+
+/*public*/ float getHeightF() {
+	return height;
+}
+
+/**
+ * Returns the locale of the receiver.
+ * <p>
+ * The locale determines which platform character set this
+ * font is going to use. Widgets and graphics operations that
+ * use this font will convert UNICODE strings to the platform
+ * character set of the specified locale.
+ * </p>
+ * <p>
+ * On platforms where there are multiple character sets for a
+ * given language/country locale, the variant portion of the
+ * locale will determine the character set.
+ * </p>
+ * 
+ * @return the <code>String</code> representing a Locale object
+ * @since 3.0
+ */
+public String getLocale () {
+	StringBuffer buffer = new StringBuffer ();
+	char sep = '_';
+	if (lang != null) {
+		buffer.append (lang);
+		buffer.append (sep);
+	}
+	if (country != null) {
+		buffer.append (country);
+		buffer.append (sep);
+	}
+	if (variant != null) {
+		buffer.append (variant);
+	}
+	
+	String result = buffer.toString ();
+	int length = result.length ();
+	if (length > 0) {
+		if (result.charAt (length - 1) == sep) {
+			result = result.substring (0, length - 1);
+		}
+	} 
+	return result;
+}
+
+/**
+ * Returns the name of the receiver.
+ * On platforms that support font foundries, the return value will
+ * be the foundry followed by a dash ("-") followed by the face name.
+ *
+ * @return the name of this <code>FontData</code>
+ *
+ * @see #setName
+ */
+public String getName() {
+	return name;
+}
+
+/**
+ * Returns the style of the receiver which is a bitwise OR of 
+ * one or more of the <code>SWT</code> constants NORMAL, BOLD
+ * and ITALIC.
+ *
+ * @return the style of this <code>FontData</code>
+ * 
+ * @see #setStyle
+ */
+public int getStyle() {
+	return style;
+}
+
+/**
+ * Returns an integer hash code for the receiver. Any two 
+ * objects that return <code>true</code> when passed to 
+ * <code>equals</code> must return the same value for this
+ * method.
+ *
+ * @return the receiver's hash
+ *
+ * @see #equals
+ */
+public int hashCode () {
+	return name.hashCode() ^ getHeight() ^ style;
+}
+
+/**
+ * Sets the height of the receiver. The parameter is
+ * specified in terms of points, where a point is one
+ * seventy-second of an inch.
+ *
+ * @param height the height of the <code>FontData</code>
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the height is negative</li>
+ * </ul>
+ * 
+ * @see #getHeight
+ */
+public void setHeight(int height) {
+	if (height < 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	this.height = height;
+}
+
+/*public*/ void setHeight(float height) {
+	if (height < 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	this.height = height;
+}
+
+/**
+ * Sets the locale of the receiver.
+ * <p>
+ * The locale determines which platform character set this
+ * font is going to use. Widgets and graphics operations that
+ * use this font will convert UNICODE strings to the platform
+ * character set of the specified locale.
+ * </p>
+ * <p>
+ * On platforms where there are multiple character sets for a
+ * given language/country locale, the variant portion of the
+ * locale will determine the character set.
+ * </p>
+ * 
+ * @param locale the <code>String</code> representing a Locale object
+ * @see java.util.Locale#toString
+ */
+public void setLocale(String locale) {
+	lang = country = variant = null;
+	if (locale != null) {
+		char sep = '_';
+		int length = locale.length();
+		int firstSep, secondSep;
+		
+		firstSep = locale.indexOf(sep);
+		if (firstSep == -1) {
+			firstSep = secondSep = length;
+		} else {
+			secondSep = locale.indexOf(sep, firstSep + 1);
+			if (secondSep == -1) secondSep = length;
+		}
+		if (firstSep > 0) lang = locale.substring(0, firstSep);
+		if (secondSep > firstSep + 1) country = locale.substring(firstSep + 1, secondSep);
+		if (length > secondSep + 1) variant = locale.substring(secondSep + 1);
+	}	
+}
+
+/**
+ * Sets the name of the receiver.
+ * <p>
+ * Some platforms support font foundries. On these platforms, the name
+ * of the font specified in setName() may have one of the following forms:
+ * <ol>
+ * <li>a face name (for example, "courier")</li>
+ * <li>a foundry followed by a dash ("-") followed by a face name (for example, "adobe-courier")</li>
+ * </ol>
+ * In either case, the name returned from getName() will include the
+ * foundry.
+ * </p>
+ * <p>
+ * On platforms that do not support font foundries, only the face name
+ * (for example, "courier") is used in <code>setName()</code> and 
+ * <code>getName()</code>.
+ * </p>
+ *
+ * @param name the name of the font data (must not be null)
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - when the font name is null</li>
+ * </ul>
+ *
+ * @see #getName
+ */
+public void setName(String name) {
+	if (name == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	this.name = name;
+	nsName = null;
+}
+
+/**
+ * Sets the style of the receiver to the argument which must
+ * be a bitwise OR of one or more of the <code>SWT</code> 
+ * constants NORMAL, BOLD and ITALIC.  All other style bits are
+ * ignored.
+ *
+ * @param style the new style for this <code>FontData</code>
+ *
+ * @see #getStyle
+ */
+public void setStyle(int style) {
+	this.style = style;
+	nsName = null;
+}
+
+/**
+ * Returns a string representation of the receiver which is suitable
+ * for constructing an equivalent instance using the 
+ * <code>FontData(String)</code> constructor.
+ *
+ * @return a string representation of the FontData
+ *
+ * @see FontData
+ */
+public String toString() {
+	StringBuffer buffer = new StringBuffer(128);
+	buffer.append("1|");
+	buffer.append(getName());
+	buffer.append("|");
+	buffer.append(getHeightF());
+	buffer.append("|");
+	buffer.append(getStyle());
+	buffer.append("|");
+	buffer.append("COCOA|1|");
+	if (nsName != null) buffer.append(nsName);
+	return buffer.toString();
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/FontMetrics.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/FontMetrics.java
new file mode 100755
index 0000000..2c0d6a7
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/FontMetrics.java
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * 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.graphics;
+
+
+/**
+ * Instances of this class provide measurement information
+ * about fonts including ascent, descent, height, leading
+ * space between rows, and average character width.
+ * <code>FontMetrics</code> are obtained from <code>GC</code>s
+ * using the <code>getFontMetrics()</code> method.
+ *
+ * @see GC#getFontMetrics
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public final class FontMetrics {
+	int ascent, descent, averageCharWidth, leading, height;
+
+FontMetrics() {
+}
+
+public static FontMetrics cocoa_new(int ascent, int descent, int averageCharWidth, int leading, int height) {
+	FontMetrics fontMetrics = new FontMetrics();
+	fontMetrics.ascent = ascent;
+	fontMetrics.descent = descent;
+	fontMetrics.averageCharWidth = averageCharWidth;
+	fontMetrics.leading = leading;
+	fontMetrics.height = height;
+	return fontMetrics;
+}
+
+/**
+ * Compares the argument to the receiver, and returns true
+ * if they represent the <em>same</em> object using a class
+ * specific comparison.
+ *
+ * @param object the object to compare with this object
+ * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
+ *
+ * @see #hashCode
+ */
+public boolean equals (Object object) {
+	if (object == this) return true;
+	if (!(object instanceof FontMetrics)) return false;
+	FontMetrics metrics = (FontMetrics)object;
+	return ascent == metrics.ascent && descent == metrics.descent &&
+		averageCharWidth == metrics.averageCharWidth && leading == metrics.leading &&
+		height == metrics.height;
+}
+
+/**
+ * Returns the ascent of the font described by the receiver. A
+ * font's <em>ascent</em> is the distance from the baseline to the 
+ * top of actual characters, not including any of the leading area,
+ * measured in pixels.
+ *
+ * @return the ascent of the font
+ */
+public int getAscent() {
+	return ascent;
+}
+
+/**
+ * Returns the average character width, measured in pixels,
+ * of the font described by the receiver.
+ *
+ * @return the average character width of the font
+ */
+public int getAverageCharWidth() {
+	return averageCharWidth;
+}
+
+/**
+ * Returns the descent of the font described by the receiver. A
+ * font's <em>descent</em> is the distance from the baseline to the
+ * bottom of actual characters, not including any of the leading area,
+ * measured in pixels.
+ *
+ * @return the descent of the font
+ */
+public int getDescent() {
+	return descent;
+}
+
+/**
+ * Returns the height of the font described by the receiver, 
+ * measured in pixels. A font's <em>height</em> is the sum of
+ * its ascent, descent and leading area.
+ *
+ * @return the height of the font
+ *
+ * @see #getAscent
+ * @see #getDescent
+ * @see #getLeading
+ */
+public int getHeight() {
+	return height;
+}
+
+/**
+ * Returns the leading area of the font described by the
+ * receiver. A font's <em>leading area</em> is the space
+ * above its ascent which may include accents or other marks.
+ *
+ * @return the leading space of the font
+ */
+public int getLeading() {
+	return leading;
+}
+
+/**
+ * Returns an integer hash code for the receiver. Any two 
+ * objects that return <code>true</code> when passed to 
+ * <code>equals</code> must return the same value for this
+ * method.
+ *
+ * @return the receiver's hash
+ *
+ * @see #equals
+ */
+public int hashCode() {
+	return ascent ^ descent ^ averageCharWidth ^ leading ^ height;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/GC.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/GC.java
new file mode 100755
index 0000000..0d34639
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/GC.java
@@ -0,0 +1,3918 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.graphics;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Class <code>GC</code> is where all of the drawing capabilities that are 
+ * supported by SWT are located. Instances are used to draw on either an 
+ * <code>Image</code>, a <code>Control</code>, or directly on a <code>Display</code>.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>LEFT_TO_RIGHT, RIGHT_TO_LEFT</dd>
+ * </dl>
+ * 
+ * <p>
+ * The SWT drawing coordinate system is the two-dimensional space with the origin
+ * (0,0) at the top left corner of the drawing area and with (x,y) values increasing
+ * to the right and downward respectively.
+ * </p>
+ * 
+ * <p>
+ * The result of drawing on an image that was created with an indexed
+ * palette using a color that is not in the palette is platform specific.
+ * Some platforms will match to the nearest color while other will draw
+ * the color itself. This happens because the allocated image might use
+ * a direct palette on platforms that do not support indexed palette.
+ * </p>
+ * 
+ * <p>
+ * Application code must explicitly invoke the <code>GC.dispose()</code> 
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required. This is <em>particularly</em>
+ * important on Windows95 and Windows98 where the operating system has a limited
+ * number of device contexts available.
+ * </p>
+ * 
+ * <p>
+ * Note: Only one of LEFT_TO_RIGHT and RIGHT_TO_LEFT may be specified.
+ * </p>
+ *
+ * @see org.eclipse.swt.events.PaintEvent
+ * @see <a href="http://www.eclipse.org/swt/snippets/#gc">GC snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Examples: GraphicsExample, PaintExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public final class GC extends Resource {
+	/**
+	 * the handle to the OS device context
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public NSGraphicsContext handle;
+	
+	Drawable drawable;
+	GCData data;
+
+	CGPathElement element;
+	int count, typeCount;
+	byte[] types;
+	float /*double*/[] points;
+	float /*double*/ [] point;
+	
+	static final int TAB_COUNT = 32;
+
+	final static int FOREGROUND = 1 << 0;
+	final static int BACKGROUND = 1 << 1;
+	final static int FONT = 1 << 2;
+	final static int LINE_STYLE = 1 << 3;
+	final static int LINE_CAP = 1 << 4;
+	final static int LINE_JOIN = 1 << 5;
+	final static int LINE_WIDTH = 1 << 6;
+	final static int LINE_MITERLIMIT = 1 << 7;
+	final static int FOREGROUND_FILL = 1 << 8;
+	final static int DRAW_OFFSET = 1 << 9;
+	final static int CLIPPING = 1 << 10;
+	final static int TRANSFORM = 1 << 11;
+	final static int VISIBLE_REGION = 1 << 12;
+	final static int DRAW = CLIPPING | TRANSFORM | FOREGROUND | LINE_WIDTH | LINE_STYLE  | LINE_CAP  | LINE_JOIN | LINE_MITERLIMIT | DRAW_OFFSET;
+	final static int FILL = CLIPPING | TRANSFORM | BACKGROUND;
+
+	static final float[] LINE_DOT = new float[]{1, 1};
+	static final float[] LINE_DASH = new float[]{3, 1};
+	static final float[] LINE_DASHDOT = new float[]{3, 1, 1, 1};
+	static final float[] LINE_DASHDOTDOT = new float[]{3, 1, 1, 1, 1, 1};
+	static final float[] LINE_DOT_ZERO = new float[]{3, 3};
+	static final float[] LINE_DASH_ZERO = new float[]{18, 6};
+	static final float[] LINE_DASHDOT_ZERO = new float[]{9, 6, 3, 6};
+	static final float[] LINE_DASHDOTDOT_ZERO = new float[]{9, 3, 3, 3, 3, 3};
+
+GC() {
+}
+
+/**	 
+ * Constructs a new instance of this class which has been
+ * configured to draw on the specified drawable. Sets the
+ * foreground color, background color and font in the GC
+ * to match those in the drawable.
+ * <p>
+ * You must dispose the graphics context when it is no longer required. 
+ * </p>
+ * @param drawable the drawable to draw on
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the drawable is null</li>
+ *    <li>ERROR_NULL_ARGUMENT - if there is no current device</li>
+ *    <li>ERROR_INVALID_ARGUMENT
+ *          - if the drawable is an image that is not a bitmap or an icon
+ *          - if the drawable is an image or printer that is already selected
+ *            into another graphics context</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for GC creation</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS if not called from the thread that created the drawable</li>
+ * </ul>
+ */
+public GC(Drawable drawable) {
+	this(drawable, 0);
+}
+
+/**	 
+ * Constructs a new instance of this class which has been
+ * configured to draw on the specified drawable. Sets the
+ * foreground color, background color and font in the GC
+ * to match those in the drawable.
+ * <p>
+ * You must dispose the graphics context when it is no longer required. 
+ * </p>
+ * 
+ * @param drawable the drawable to draw on
+ * @param style the style of GC to construct
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the drawable is null</li>
+ *    <li>ERROR_NULL_ARGUMENT - if there is no current device</li>
+ *    <li>ERROR_INVALID_ARGUMENT
+ *          - if the drawable is an image that is not a bitmap or an icon
+ *          - if the drawable is an image or printer that is already selected
+ *            into another graphics context</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for GC creation</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS if not called from the thread that created the drawable</li>
+ * </ul>
+ *  
+ * @since 2.1.2
+ */
+public GC(Drawable drawable, int style) {
+	if (drawable == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		GCData data = new GCData();
+		data.style = checkStyle(style);
+		int /*long*/ contextId = drawable.internal_new_GC(data);
+		Device device = data.device;
+		if (device == null) device = Device.getDevice();
+		if (device == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		this.device = data.device = device;
+		init(drawable, data, contextId);
+		init();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+static int checkStyle (int style) {
+	if ((style & SWT.LEFT_TO_RIGHT) != 0) style &= ~SWT.RIGHT_TO_LEFT;
+	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new graphics context.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>GC</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param drawable the Drawable for the receiver.
+ * @param data the data for the receiver.
+ *
+ * @return a new <code>GC</code>
+ *
+ * @private
+ */
+public static GC cocoa_new(Drawable drawable, GCData data) {
+	GC gc = new GC();
+	int /*long*/ context = drawable.internal_new_GC(data);
+	gc.device = data.device;
+	gc.init(drawable, data, context);
+	return gc;
+}
+
+int /*long*/ applierFunc(int /*long*/ info, int /*long*/ elementPtr) {
+	OS.memmove(element, elementPtr, CGPathElement.sizeof);
+	int type = 0, length = 1;
+	switch (element.type) {
+		case OS.kCGPathElementMoveToPoint: type = SWT.PATH_MOVE_TO; break;
+		case OS.kCGPathElementAddLineToPoint: type = SWT.PATH_LINE_TO; break;
+		case OS.kCGPathElementAddQuadCurveToPoint: type = SWT.PATH_QUAD_TO; length = 2; break;
+		case OS.kCGPathElementAddCurveToPoint: type = SWT.PATH_CUBIC_TO; length = 3; break;
+		case OS.kCGPathElementCloseSubpath: type = SWT.PATH_CLOSE; length = 0; break;
+	}
+	if (types != null) {
+		types[typeCount] = (byte)type;
+		if (length > 0) {
+			OS.memmove(point, element.points, length * CGPoint.sizeof);
+			System.arraycopy(point, 0, points, count, length * 2);
+		}
+	}
+	typeCount++;
+	count += length * 2;
+	return 0;
+}
+
+NSAutoreleasePool checkGC (int mask) {
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	if (data.flippedContext != null && !handle.isEqual(NSGraphicsContext.currentContext())) {
+		data.restoreContext = true;
+		NSGraphicsContext.static_saveGraphicsState();
+		NSGraphicsContext.setCurrentContext(handle);
+	}
+	if ((mask & (CLIPPING | TRANSFORM)) != 0) {
+		NSView view = data.view;
+		if ((data.state & CLIPPING) == 0 || (data.state & TRANSFORM) == 0 || (data.state & VISIBLE_REGION) == 0) {
+			boolean antialias = handle.shouldAntialias();
+			handle.restoreGraphicsState();
+			handle.saveGraphicsState();
+			handle.setShouldAntialias(antialias);
+			if (view != null && (data.paintRect == null || !view.isFlipped())) {
+				NSAffineTransform transform = NSAffineTransform.transform();
+				NSRect rect = view.convertRect_toView_(view.bounds(), null);
+				if (data.paintRect == null) {
+					transform.translateXBy(rect.x, rect.y + rect.height);
+				} else {
+					transform.translateXBy(0, rect.height);
+				}
+				transform.scaleXBy(1, -1);
+				transform.concat();
+				if (data.visibleRgn != 0) {
+					if (data.visiblePath == null || (data.state & VISIBLE_REGION) == 0) {
+						if (data.visiblePath != null) data.visiblePath.release();
+						data.visiblePath = Region.cocoa_new(device, data.visibleRgn).getPath();
+					}
+					data.visiblePath.addClip();
+					data.state |= VISIBLE_REGION;
+				}
+			}
+			if (data.clipPath != null) data.clipPath.addClip();
+			if (data.transform != null) data.transform.concat();
+			mask &= ~(TRANSFORM | CLIPPING);
+			data.state |= TRANSFORM | CLIPPING;
+			data.state &= ~(BACKGROUND | FOREGROUND);
+		}
+	}
+
+	int state = data.state;
+	if ((state & mask) == mask) return pool;
+	state = (state ^ mask) & mask;	
+	data.state |= mask;
+	
+	if ((state & FOREGROUND) != 0) {
+		Pattern pattern = data.foregroundPattern;
+		if (pattern != null) {
+			if (pattern.color != null) pattern.color.setStroke();
+		} else {
+			float /*double*/ [] color = data.foreground;
+			if (data.fg != null) data.fg.release();
+			NSColor fg = data.fg = NSColor.colorWithDeviceRed(color[0], color[1], color[2], data.alpha / 255f);
+			fg.retain();
+			fg.setStroke();
+		}
+	}
+	if ((state & FOREGROUND_FILL) != 0) {
+		Pattern pattern = data.foregroundPattern;
+		if (pattern != null) {
+			if (pattern.color != null) pattern.color.setFill();
+		} else {
+			float /*double*/ [] color = data.foreground;
+			if (data.fg != null) data.fg.release();
+			NSColor fg = data.fg = NSColor.colorWithDeviceRed(color[0], color[1], color[2], data.alpha / 255f);
+			fg.retain();
+			fg.setFill();
+		}
+		data.state &= ~BACKGROUND;
+	}
+	if ((state & BACKGROUND) != 0) {
+		Pattern pattern = data.backgroundPattern;
+		if (pattern != null) {
+			if (pattern.color != null) pattern.color.setFill();
+		} else {
+			float /*double*/ [] color = data.background;
+			if (data.bg != null) data.bg.release();
+			NSColor bg = data.bg = NSColor.colorWithDeviceRed(color[0], color[1], color[2], data.alpha / 255f);
+			bg.retain();
+			bg.setFill();
+		}
+		data.state &= ~FOREGROUND_FILL;
+	}
+	NSBezierPath path = data.path;
+	if ((state & LINE_WIDTH) != 0) {
+		path.setLineWidth(data.lineWidth == 0 ?  1 : data.lineWidth);
+		switch (data.lineStyle) {
+			case SWT.LINE_DOT:
+			case SWT.LINE_DASH:
+			case SWT.LINE_DASHDOT:
+			case SWT.LINE_DASHDOTDOT:
+				state |= LINE_STYLE;
+		}
+	}
+	if ((state & LINE_STYLE) != 0) {
+		float[] dashes = null;
+		float width = data.lineWidth;
+		switch (data.lineStyle) {
+			case SWT.LINE_SOLID: break;
+			case SWT.LINE_DASH: dashes = width != 0 ? LINE_DASH : LINE_DASH_ZERO; break;
+			case SWT.LINE_DOT: dashes = width != 0 ? LINE_DOT : LINE_DOT_ZERO; break;
+			case SWT.LINE_DASHDOT: dashes = width != 0 ? LINE_DASHDOT : LINE_DASHDOT_ZERO; break;
+			case SWT.LINE_DASHDOTDOT: dashes = width != 0 ? LINE_DASHDOTDOT : LINE_DASHDOTDOT_ZERO; break;
+			case SWT.LINE_CUSTOM: dashes = data.lineDashes; break;
+		}
+		if (dashes != null) {
+			float /*double*/[] lengths = new float /*double*/[dashes.length];
+			for (int i = 0; i < lengths.length; i++) {
+				lengths[i] = width == 0 || data.lineStyle == SWT.LINE_CUSTOM ? dashes[i] : dashes[i] * width;
+			}
+			path.setLineDash(lengths, lengths.length, data.lineDashesOffset);
+		} else {
+			path.setLineDash(null, 0, 0);
+		}
+	}
+	if ((state & LINE_MITERLIMIT) != 0) {
+		path.setMiterLimit(data.lineMiterLimit);
+	}
+	if ((state & LINE_JOIN) != 0) {
+		int joinStyle = 0;
+		switch (data.lineJoin) {
+			case SWT.JOIN_MITER: joinStyle = OS.NSMiterLineJoinStyle; break;
+			case SWT.JOIN_ROUND: joinStyle = OS.NSRoundLineJoinStyle; break;
+			case SWT.JOIN_BEVEL: joinStyle = OS.NSBevelLineJoinStyle; break;
+		}
+		path.setLineJoinStyle(joinStyle);
+	}
+	if ((state & LINE_CAP) != 0) {
+		int capStyle = 0;
+		switch (data.lineCap) {
+			case SWT.CAP_ROUND: capStyle = OS.NSRoundLineCapStyle; break;
+			case SWT.CAP_FLAT: capStyle = OS.NSButtLineCapStyle; break;
+			case SWT.CAP_SQUARE: capStyle = OS.NSSquareLineCapStyle; break;
+		}
+		path.setLineCapStyle(capStyle);
+	}
+	if ((state & DRAW_OFFSET) != 0) {
+		data.drawXOffset = data.drawYOffset = 0;
+		NSSize size = new NSSize();
+		size.width = size.height = 1;
+		if (data.transform != null) {
+			size = data.transform.transformSize(size);
+		}
+		float /*double*/ scaling = size.width;
+		if (scaling < 0) scaling = -scaling;
+		float /*double*/ strokeWidth = data.lineWidth * scaling;
+		if (strokeWidth == 0 || ((int)strokeWidth % 2) == 1) {
+			data.drawXOffset = 0.5f / scaling;
+		}
+		scaling = size.height;
+		if (scaling < 0) scaling = -scaling;
+		strokeWidth = data.lineWidth * scaling;
+		if (strokeWidth == 0 || ((int)strokeWidth % 2) == 1) {
+			data.drawYOffset = 0.5f / scaling;
+		}
+	}
+	return pool;
+}
+
+/**
+ * Copies a rectangular area of the receiver at the specified
+ * position into the image, which must be of type <code>SWT.BITMAP</code>.
+ *
+ * @param image the image to copy into
+ * @param x the x coordinate in the receiver of the area to be copied
+ * @param y the y coordinate in the receiver of the area to be copied
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the image is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image is not a bitmap or has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void copyArea(Image image, int x, int y) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (image == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (image.type != SWT.BITMAP || image.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAutoreleasePool pool = checkGC(TRANSFORM | CLIPPING);
+	try {
+		if (data.image != null) {
+			int srcX = x, srcY = y, destX = 0, destY = 0;
+			NSSize srcSize = data.image.handle.size();
+			int imgHeight = (int)srcSize.height;
+			int destWidth = (int)srcSize.width - x, destHeight = (int)srcSize.height - y;
+			int srcWidth = destWidth, srcHeight = destHeight;		
+			NSGraphicsContext context = NSGraphicsContext.graphicsContextWithBitmapImageRep(image.getRepresentation());
+			NSGraphicsContext.static_saveGraphicsState();
+			NSGraphicsContext.setCurrentContext(context);
+			NSAffineTransform transform = NSAffineTransform.transform();
+			NSSize size = image.handle.size();
+			transform.translateXBy(0, size.height-(destHeight + 2 * destY));
+			transform.concat();
+			NSRect srcRect = new NSRect();
+			srcRect.x = srcX;
+			srcRect.y = imgHeight - (srcY + srcHeight);
+			srcRect.width = srcWidth;
+			srcRect.height = srcHeight;
+			NSRect destRect = new NSRect();
+			destRect.x = destX;
+			destRect.y = destY;
+			destRect.width = destWidth;
+			destRect.height = destHeight;
+			data.image.handle.drawInRect(destRect, srcRect, OS.NSCompositeCopy, 1);
+	 		NSGraphicsContext.static_restoreGraphicsState();
+			return;
+		}
+		if (data.view != null) {
+			NSPoint pt = new NSPoint();
+			pt.x = x;
+			pt.y = y;
+			NSWindow window = data.view.window();
+			pt = data.view.convertPoint_toView_(pt, window.contentView().superview());
+			NSRect frame = window.frame();
+			pt.y = frame.height - pt.y;
+			NSSize size = image.handle.size();
+			CGRect destRect = new CGRect();
+			destRect.size.width = size.width;
+			destRect.size.height = size.height;
+			CGRect srcRect = new CGRect();
+			srcRect.origin.x = pt.x;
+			srcRect.origin.y = pt.y;
+			srcRect.size.width = size.width;
+			srcRect.size.height = size.height;
+			NSBitmapImageRep imageRep = image.getRepresentation();
+			NSGraphicsContext context = NSGraphicsContext.graphicsContextWithBitmapImageRep(imageRep);
+			NSGraphicsContext.static_saveGraphicsState();
+			NSGraphicsContext.setCurrentContext(context);
+			int /*long*/ contextID = OS.objc_msgSend(NSApplication.sharedApplication().id, OS.sel_contextID);
+			OS.CGContextCopyWindowContentsToRect(context.graphicsPort(), destRect, contextID, window.windowNumber(), srcRect);
+			NSGraphicsContext.static_restoreGraphicsState();
+			return;
+		}
+		if (handle.isDrawingToScreen()) {
+			NSImage imageHandle = image.handle;
+			NSSize size = imageHandle.size();
+			CGRect rect = new CGRect();
+			rect.origin.x = x;
+			rect.origin.y = y;
+			rect.size.width = size.width;
+			rect.size.height = size.height;
+			int displayCount = 16;
+			int /*long*/ displays = OS.malloc(4 * displayCount), countPtr = OS.malloc(4);
+			if (OS.CGGetDisplaysWithRect(rect, displayCount, displays, countPtr) != 0) return;
+			int[] count = new int[1], display = new int[1];
+			OS.memmove(count, countPtr, OS.PTR_SIZEOF);
+			for (int i = 0; i < count[0]; i++) {
+				OS.memmove(display, displays + (i * 4), 4);
+				OS.CGDisplayBounds(display[0], rect);
+				int /*long*/ address = OS.CGDisplayBaseAddress(display[0]);
+				if (address != 0) {
+					int /*long*/ width = OS.CGDisplayPixelsWide(display[0]);
+					int /*long*/ height = OS.CGDisplayPixelsHigh(display[0]);
+					int /*long*/ bpr = OS.CGDisplayBytesPerRow(display[0]);
+					int /*long*/ bpp = OS.CGDisplayBitsPerPixel(display[0]);
+					int /*long*/ bps = OS.CGDisplayBitsPerSample(display[0]);
+					int bitmapInfo = OS.kCGImageAlphaNoneSkipFirst;
+					switch ((int)/*63*/bpp) {
+						case 16: bitmapInfo |= OS.kCGBitmapByteOrder16Host; break;
+						case 32: bitmapInfo |= OS.kCGBitmapByteOrder32Host; break;
+					}
+					int /*long*/ srcImage = 0;
+					if (OS.__BIG_ENDIAN__() && OS.VERSION >= 0x1040) {
+						int /*long*/ colorspace = OS.CGColorSpaceCreateDeviceRGB();
+						int /*long*/ context = OS.CGBitmapContextCreate(address, width, height, bps, bpr, colorspace, bitmapInfo);
+						OS.CGColorSpaceRelease(colorspace);
+						srcImage = OS.CGBitmapContextCreateImage(context);
+						OS.CGContextRelease(context);
+					} else {
+						int /*long*/ provider = OS.CGDataProviderCreateWithData(0, address, bpr * height, 0);
+						int /*long*/ colorspace = OS.CGColorSpaceCreateDeviceRGB();
+						srcImage = OS.CGImageCreate(width, height, bps, bpp, bpr, colorspace, bitmapInfo, provider, 0, true, 0);
+						OS.CGColorSpaceRelease(colorspace);
+						OS.CGDataProviderRelease(provider);
+					}
+					copyArea(image, x - (int)rect.origin.x, y - (int)rect.origin.y, srcImage);
+					if (srcImage != 0) OS.CGImageRelease(srcImage);
+				}
+			}
+			OS.free(displays);
+			OS.free(countPtr);
+		}	
+	} finally {
+		uncheckGC(pool);
+	}
+}
+
+void copyArea (Image image, int x, int y, int /*long*/ srcImage) {
+	if (srcImage == 0) return;
+	NSBitmapImageRep rep = image.getRepresentation();
+	int /*long*/ bpc = rep.bitsPerSample();
+	int /*long*/ width = rep.pixelsWide();
+	int /*long*/ height = rep.pixelsHigh();
+	int /*long*/ bpr = rep.bytesPerRow();
+	int alphaInfo = rep.hasAlpha() ? OS.kCGImageAlphaFirst : OS.kCGImageAlphaNoneSkipFirst;
+	int /*long*/ colorspace = OS.CGColorSpaceCreateDeviceRGB();
+	int /*long*/ context = OS.CGBitmapContextCreate(rep.bitmapData(), width, height, bpc, bpr, colorspace, alphaInfo);
+	OS.CGColorSpaceRelease(colorspace);
+	if (context != 0) {
+	 	CGRect rect = new CGRect();
+	 	rect.origin.x = -x;
+	 	rect.origin.y = y;
+	 	rect.size.width = OS.CGImageGetWidth(srcImage);
+		rect.size.height = OS.CGImageGetHeight(srcImage);
+		OS.CGContextTranslateCTM(context, 0, -(rect.size.height - height));
+		OS.CGContextDrawImage(context, rect, srcImage);
+		OS.CGContextRelease(context);
+	}
+}
+
+/**
+ * Copies a rectangular area of the receiver at the source
+ * position onto the receiver at the destination position.
+ *
+ * @param srcX the x coordinate in the receiver of the area to be copied
+ * @param srcY the y coordinate in the receiver of the area to be copied
+ * @param width the width of the area to copy
+ * @param height the height of the area to copy
+ * @param destX the x coordinate in the receiver of the area to copy to
+ * @param destY the y coordinate in the receiver of the area to copy to
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void copyArea(int srcX, int srcY, int width, int height, int destX, int destY) {
+	copyArea(srcX, srcY, width, height, destX, destY, true);
+}
+/**
+ * Copies a rectangular area of the receiver at the source
+ * position onto the receiver at the destination position.
+ *
+ * @param srcX the x coordinate in the receiver of the area to be copied
+ * @param srcY the y coordinate in the receiver of the area to be copied
+ * @param width the width of the area to copy
+ * @param height the height of the area to copy
+ * @param destX the x coordinate in the receiver of the area to copy to
+ * @param destY the y coordinate in the receiver of the area to copy to
+ * @param paint if <code>true</code> paint events will be generated for old and obscured areas
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1 
+ */
+public void copyArea(int srcX, int srcY, int width, int height, int destX, int destY, boolean paint) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (width <= 0 || height <= 0) return;
+	int deltaX = destX - srcX, deltaY = destY - srcY;
+	if (deltaX == 0 && deltaY == 0) return;
+	NSAutoreleasePool pool = checkGC(TRANSFORM | CLIPPING);
+	try {
+		Image image = data.image;
+		if (image != null) {
+			NSImage imageHandle = image.handle;
+			NSSize size = imageHandle.size();
+		 	int imgHeight = (int)size.height;
+			handle.saveGraphicsState();
+			NSAffineTransform transform = NSAffineTransform.transform();
+			transform.scaleXBy(1, -1);
+			transform.translateXBy(0, -(height + 2 * destY));
+			transform.concat();
+			NSRect srcRect = new NSRect();
+			srcRect.x = srcX;
+			srcRect.y = imgHeight - (srcY + height);
+			srcRect.width = width;
+			srcRect.height = height;
+			NSRect destRect = new NSRect();
+			destRect.x = destX;
+			destRect.y = destY;
+			destRect.width = width;
+			destRect.height = height;
+			imageHandle.drawInRect(destRect, srcRect, OS.NSCompositeCopy, 1);
+			handle.restoreGraphicsState();
+	 		return;
+		}
+		if (data.view != null) {
+			NSView view = data.view;
+			NSRect visibleRect = view.visibleRect();
+			if (visibleRect.width <= 0 || visibleRect.height <= 0) return;
+			NSRect damage = new NSRect();
+			damage.x = srcX;
+			damage.y = srcY;
+			damage.width = width;
+			damage.height = height;
+			NSPoint dest = new NSPoint();
+			dest.x = destX;
+			dest.y = destY;
+
+			view.lockFocus();
+			OS.NSCopyBits(0, damage , dest);
+			view.unlockFocus();
+
+			if (paint) {
+				boolean disjoint = (destX + width < srcX) || (srcX + width < destX) || (destY + height < srcY) || (srcY + height < destY);
+				if (disjoint) {
+					view.setNeedsDisplayInRect(damage);
+				} else {
+					if (deltaX != 0) {
+						int newX = destX - deltaX;
+						if (deltaX < 0) newX = destX + width;
+						damage.x = newX;
+						damage.width = Math.abs(deltaX);
+						view.setNeedsDisplayInRect(damage);
+					}
+					if (deltaY != 0) {
+						int newY = destY - deltaY;
+						if (deltaY < 0) newY = destY + height;
+						damage.x = srcX;
+						damage.y = newY;
+						damage.width = width;
+						damage.height =  Math.abs (deltaY);
+						view.setNeedsDisplayInRect(damage);
+					}
+				}
+	
+				NSRect srcRect = new NSRect();
+				srcRect.x = srcX;
+				srcRect.y = srcY;
+				srcRect.width = width;
+				srcRect.height = height;
+				OS.NSIntersectionRect(visibleRect, visibleRect, srcRect);
+	
+				if (!OS.NSEqualRects(visibleRect, srcRect)) {
+					if (srcRect.x != visibleRect.x) {
+						damage.x = srcRect.x + deltaX;
+						damage.y = srcRect.y + deltaY;
+						damage.width = visibleRect.x - srcRect.x;
+						damage.height = srcRect.height;
+						view.setNeedsDisplayInRect(damage);
+					} 
+					if (visibleRect.x + visibleRect.width != srcRect.x + srcRect.width) {
+						damage.x = srcRect.x + visibleRect.width + deltaX;
+						damage.y = srcRect.y + deltaY;
+						damage.width = srcRect.width - visibleRect.width;
+						damage.height = srcRect.height;
+						view.setNeedsDisplayInRect(damage);
+					}
+					if (visibleRect.y != srcRect.y) {
+						damage.x = visibleRect.x + deltaX;
+						damage.y = srcRect.y + deltaY;
+						damage.width = visibleRect.width;
+						damage.height = visibleRect.y - srcRect.y;
+						view.setNeedsDisplayInRect(damage);
+					}
+					if (visibleRect.y + visibleRect.height != srcRect.y + srcRect.height) {
+						damage.x = visibleRect.x + deltaX;
+						damage.y = visibleRect.y + visibleRect.height + deltaY;
+						damage.width = visibleRect.width;
+						damage.height = srcRect.y + srcRect.height - (visibleRect.y + visibleRect.height);
+						view.setNeedsDisplayInRect(damage);
+					}
+				}
+			}
+			return;
+		}		
+	} finally {
+		uncheckGC(pool);
+	}
+}
+
+static int /*long*/ createCGPathRef(NSBezierPath nsPath) {
+	int /*long*/ count = nsPath.elementCount();
+	if (count > 0) {
+		int /*long*/ cgPath = OS.CGPathCreateMutable();
+		if (cgPath == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+		int /*long*/ points = OS.malloc(NSPoint.sizeof * 3);
+		if (points == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+		float /*double*/ [] pt = new float /*double*/ [6];
+		for (int i = 0; i < count; i++) {
+			int element = (int)/*64*/nsPath.elementAtIndex(i, points);
+			switch (element) {
+				case OS.NSMoveToBezierPathElement:
+					OS.memmove(pt, points, NSPoint.sizeof);
+					OS.CGPathMoveToPoint(cgPath, 0, pt[0], pt[1]);
+					break;
+				case OS.NSLineToBezierPathElement:
+                	OS.memmove(pt, points, NSPoint.sizeof);
+                    OS.CGPathAddLineToPoint(cgPath, 0, pt[0], pt[1]);					
+					break;	
+				 case OS.NSCurveToBezierPathElement:
+					 OS.memmove(pt, points, NSPoint.sizeof * 3);
+					 OS.CGPathAddCurveToPoint(cgPath, 0, pt[0], pt[1], pt[2], pt[3], pt[4], pt[5]);
+					 break;
+                case OS.NSClosePathBezierPathElement:
+                     OS.CGPathCloseSubpath(cgPath);
+					 break;
+			}
+		}
+		OS.free(points);
+		return cgPath;
+	}
+	return 0;
+}
+
+
+
+NSBezierPath createNSBezierPath (int /*long*/  cgPath) {
+	Callback callback = new Callback(this, "applierFunc", 2);
+	int /*long*/  proc = callback.getAddress();
+	if (proc == 0) SWT.error(SWT.ERROR_NO_MORE_CALLBACKS);
+	count = typeCount = 0;
+	element = new CGPathElement();
+	OS.CGPathApply(cgPath, 0, proc);
+	types = new byte[typeCount];
+	points = new float /*double*/ [count];
+	point = new float /*double*/ [6];
+	count = typeCount = 0;
+	OS.CGPathApply(cgPath, 0, proc);
+	callback.dispose();
+
+	NSBezierPath bezierPath = NSBezierPath.bezierPath();
+	NSPoint nsPoint = new NSPoint(), nsPoint2 = new NSPoint(), nsPoint3 = new NSPoint();
+	for (int i = 0, j = 0; i < types.length; i++) {
+		switch (types[i]) {
+			case SWT.PATH_MOVE_TO:
+				nsPoint.x = points[j++];
+				nsPoint.y = points[j++];
+				bezierPath.moveToPoint(nsPoint);
+				break;
+			case SWT.PATH_LINE_TO:
+				nsPoint.x = points[j++];
+				nsPoint.y = points[j++];
+				bezierPath.lineToPoint(nsPoint);
+				break;
+			case SWT.PATH_CUBIC_TO:
+				nsPoint2.x = points[j++];
+				nsPoint2.y = points[j++];
+				nsPoint3.x = points[j++];
+				nsPoint3.y = points[j++];
+				nsPoint.x = points[j++];
+				nsPoint.y = points[j++];
+				bezierPath.curveToPoint(nsPoint, nsPoint2, nsPoint3);
+				break;
+			case SWT.PATH_QUAD_TO:
+				float /*double*/ currentX = nsPoint.x;
+				float /*double*/ currentY = nsPoint.y;
+				nsPoint2.x = points[j++];
+				nsPoint2.y = points[j++];
+				nsPoint.x = points[j++];
+				nsPoint.y = points[j++];
+				float /*double*/ x0 = currentX;
+				float /*double*/ y0 = currentY;
+				float /*double*/ cx1 = x0 + 2 * (nsPoint2.x - x0) / 3;
+				float /*double*/ cy1 = y0 + 2 * (nsPoint2.y - y0) / 3;
+				float /*double*/ cx2 = cx1 + (nsPoint.x - x0) / 3;
+				float /*double*/ cy2 = cy1 + (nsPoint.y - y0) / 3;
+				nsPoint2.x = cx1;
+				nsPoint2.y = cy1;
+				nsPoint3.x = cx2;
+				nsPoint3.y = cy2;
+				bezierPath.curveToPoint(nsPoint, nsPoint2, nsPoint3);
+				break;
+			case SWT.PATH_CLOSE:
+				bezierPath.closePath();
+				break;
+			default:
+				dispose();
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+	}
+	element = null;
+	types = null;
+	points = null;
+	nsPoint = null;
+	return bezierPath;	
+}
+
+NSAttributedString createString(String string, int flags, boolean draw) {
+	NSMutableDictionary dict = ((NSMutableDictionary)new NSMutableDictionary().alloc()).initWithCapacity(5);
+	Font font = data.font;
+	dict.setObject(font.handle, OS.NSFontAttributeName);
+	font.addTraits(dict);
+	if (draw) {
+		Pattern pattern = data.foregroundPattern;
+		if (pattern != null) {
+			if (pattern.color != null) dict.setObject(pattern.color, OS.NSForegroundColorAttributeName);
+		} else {
+			NSColor fg = data.fg;
+			if (fg == null) {
+				float /*double*/ [] color = data.foreground;
+				fg = data.fg = NSColor.colorWithDeviceRed(color[0], color[1], color[2], data.alpha / 255f);
+				fg.retain();
+			}
+			dict.setObject(fg, OS.NSForegroundColorAttributeName);
+		}
+	}
+	if ((flags & SWT.DRAW_TAB) == 0) {
+		dict.setObject(device.paragraphStyle, OS.NSParagraphStyleAttributeName);
+	}
+	int length = string.length();
+	char[] chars = new char[length];
+	string.getChars(0, length, chars, 0);
+	int breakCount = 0;
+	int[] breaks = null;
+	if ((flags & SWT.DRAW_MNEMONIC) !=0 || (flags & SWT.DRAW_DELIMITER) == 0) {
+		int i=0, j=0;
+		while (i < chars.length) {
+			char c = chars [j++] = chars [i++];
+			switch (c) {
+				case '&': {
+					if ((flags & SWT.DRAW_MNEMONIC) != 0) {
+						if (i == chars.length) {continue;}
+						if (chars [i] == '&') {i++; continue;}
+						j--;
+					}
+					break;
+				}
+				case '\r':
+				case '\n': {
+					if ((flags & SWT.DRAW_DELIMITER) == 0) {
+						if (c == '\r' && i != chars.length && chars[i] == '\n') i++;
+						j--;
+						if (breaks == null) {
+							breaks = new int[4];
+						} else if (breakCount == breaks.length) {
+							int[] newBreaks = new int[breaks.length + 4];
+							System.arraycopy(breaks, 0, newBreaks, 0, breaks.length);
+							breaks = newBreaks;
+						}
+						breaks[breakCount++] = j;
+					}
+					break;
+				}
+			}
+		}
+		length = j;
+	}
+	NSString str = ((NSString)new NSString().alloc()).initWithCharacters(chars, length);
+	NSAttributedString attribStr = ((NSAttributedString)new NSAttributedString().alloc()).initWithString(str, dict);
+	dict.release();
+	str.release();
+	return attribStr;
+}
+
+void destroy() {
+	/* Free resources */
+	Image image = data.image;
+	if (image != null) {
+		image.memGC = null;
+		image.createAlpha();
+	}
+	if (data.fg != null) data.fg.release();
+	if (data.bg != null) data.bg.release();
+	if (data.path != null) data.path.release();
+	if (data.clipPath != null) data.clipPath.release();
+	if (data.visiblePath != null) data.visiblePath.release();
+	if (data.transform != null) data.transform.release();
+	if (data.inverseTransform != null) data.inverseTransform.release();
+	data.path = data.clipPath = data.visiblePath = null;
+	data.transform = data.inverseTransform = null;
+	data.fg = data.bg = null;
+	
+	/* Dispose the GC */
+	if (drawable != null) drawable.internal_dispose_GC(handle.id, data);
+	handle.restoreGraphicsState();
+	handle.release();
+
+	drawable = null;
+	data.image = null;
+	data = null;
+	handle = null;
+}
+
+/**
+ * Draws the outline of a circular or elliptical arc 
+ * within the specified rectangular area.
+ * <p>
+ * The resulting arc begins at <code>startAngle</code> and extends  
+ * for <code>arcAngle</code> degrees, using the current color.
+ * Angles are interpreted such that 0 degrees is at the 3 o'clock
+ * position. A positive value indicates a counter-clockwise rotation
+ * while a negative value indicates a clockwise rotation.
+ * </p><p>
+ * The center of the arc is the center of the rectangle whose origin 
+ * is (<code>x</code>, <code>y</code>) and whose size is specified by the 
+ * <code>width</code> and <code>height</code> arguments. 
+ * </p><p>
+ * The resulting arc covers an area <code>width + 1</code> pixels wide
+ * by <code>height + 1</code> pixels tall.
+ * </p>
+ *
+ * @param x the x coordinate of the upper-left corner of the arc to be drawn
+ * @param y the y coordinate of the upper-left corner of the arc to be drawn
+ * @param width the width of the arc to be drawn
+ * @param height the height of the arc to be drawn
+ * @param startAngle the beginning angle
+ * @param arcAngle the angular extent of the arc, relative to the start angle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (width < 0) {
+		x = x + width;
+		width = -width;
+	}
+	if (height < 0) {
+		y = y + height;
+		height = -height;
+	}
+	if (width == 0 || height == 0 || arcAngle == 0) return;
+	NSAutoreleasePool pool = checkGC(DRAW);
+	try {
+		handle.saveGraphicsState();
+		NSAffineTransform transform = NSAffineTransform.transform();
+		float /*double*/ xOffset = data.drawXOffset, yOffset = data.drawYOffset;
+		transform.translateXBy(x + xOffset + width / 2f, y + yOffset + height / 2f);
+		transform.scaleXBy(width / 2f, height / 2f);
+		NSBezierPath path = data.path;
+		NSPoint center = new NSPoint();
+		float sAngle = -startAngle;
+		float eAngle = -(startAngle + arcAngle);
+		path.appendBezierPathWithArcWithCenter(center, 1, sAngle,  eAngle, arcAngle>0);
+		path.transformUsingAffineTransform(transform);
+		Pattern pattern = data.foregroundPattern;
+		if (pattern != null && pattern.gradient != null) {
+			strokePattern(path, pattern);
+		} else {
+			path.stroke();
+		}
+		path.removeAllPoints();
+		handle.restoreGraphicsState();
+	} finally {
+		uncheckGC(pool);
+	}
+}
+
+/** 
+ * Draws a rectangle, based on the specified arguments, which has
+ * the appearance of the platform's <em>focus rectangle</em> if the
+ * platform supports such a notion, and otherwise draws a simple
+ * rectangle in the receiver's foreground color.
+ *
+ * @param x the x coordinate of the rectangle
+ * @param y the y coordinate of the rectangle
+ * @param width the width of the rectangle
+ * @param height the height of the rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #drawRectangle(int, int, int, int)
+ */
+public void drawFocus(int x, int y, int width, int height) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = checkGC(CLIPPING | TRANSFORM);
+	try {
+		int[] metric = new int[1];
+		OS.GetThemeMetric(OS.kThemeMetricFocusRectOutset, metric);
+		CGRect rect = new CGRect();
+		rect.origin.x = x + metric[0];
+		rect.origin.y = y + metric[0];
+		rect.size.width = width - metric[0] * 2;
+		rect.size.height = height - metric[0] * 2;
+		OS.HIThemeDrawFocusRect(rect, true, handle.graphicsPort(), OS.kHIThemeOrientationNormal);
+	} finally {
+		uncheckGC(pool);
+	}
+}
+
+/**
+ * Draws the given image in the receiver at the specified
+ * coordinates.
+ *
+ * @param image the image to draw
+ * @param x the x coordinate of where to draw
+ * @param y the y coordinate of where to draw
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the image is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the given coordinates are outside the bounds of the image</li>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES - if no handles are available to perform the operation</li>
+ * </ul>
+ */
+public void drawImage(Image image, int x, int y) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (image == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (image.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	drawImage(image, 0, 0, -1, -1, x, y, -1, -1, true);
+}
+
+/**
+ * Copies a rectangular area from the source image into a (potentially
+ * different sized) rectangular area in the receiver. If the source
+ * and destination areas are of differing sizes, then the source
+ * area will be stretched or shrunk to fit the destination area
+ * as it is copied. The copy fails if any part of the source rectangle
+ * lies outside the bounds of the source image, or if any of the width
+ * or height arguments are negative.
+ *
+ * @param image the source image
+ * @param srcX the x coordinate in the source image to copy from
+ * @param srcY the y coordinate in the source image to copy from
+ * @param srcWidth the width in pixels to copy from the source
+ * @param srcHeight the height in pixels to copy from the source
+ * @param destX the x coordinate in the destination to copy to
+ * @param destY the y coordinate in the destination to copy to
+ * @param destWidth the width in pixels of the destination rectangle
+ * @param destHeight the height in pixels of the destination rectangle
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the image is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if any of the width or height arguments are negative.
+ *    <li>ERROR_INVALID_ARGUMENT - if the source rectangle is not contained within the bounds of the source image</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES - if no handles are available to perform the operation</li>
+ * </ul>
+ */
+public void drawImage(Image image, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (srcWidth == 0 || srcHeight == 0 || destWidth == 0 || destHeight == 0) return;
+	if (srcX < 0 || srcY < 0 || srcWidth < 0 || srcHeight < 0 || destWidth < 0 || destHeight < 0) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	if (image == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (image.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	drawImage(image, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, false);
+}
+
+void drawImage(Image srcImage, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, boolean simple) {
+	NSImage imageHandle = srcImage.handle;
+	NSSize size = imageHandle.size();
+ 	int imgWidth = (int)size.width;
+ 	int imgHeight = (int)size.height;
+ 	if (simple) {
+ 		srcWidth = destWidth = imgWidth;
+ 		srcHeight = destHeight = imgHeight;
+ 	} else {
+ 		simple = srcX == 0 && srcY == 0 &&
+ 			srcWidth == destWidth && destWidth == imgWidth &&
+ 			srcHeight == destHeight && destHeight == imgHeight;
+		if (srcX + srcWidth > imgWidth || srcY + srcHeight > imgHeight) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+ 	}
+	NSAutoreleasePool pool = checkGC(CLIPPING | TRANSFORM);
+	try {
+		if (srcImage.memGC != null) {
+			srcImage.createAlpha();
+		}
+		handle.saveGraphicsState();
+		NSAffineTransform transform = NSAffineTransform.transform();
+		transform.scaleXBy(1, -1);
+		transform.translateXBy(0, -(destHeight + 2 * destY));
+		transform.concat();
+		NSRect srcRect = new NSRect();
+		srcRect.x = srcX;
+		srcRect.y = imgHeight - (srcY + srcHeight);
+		srcRect.width = srcWidth;
+		srcRect.height = srcHeight;
+		NSRect destRect = new NSRect();
+		destRect.x = destX;
+		destRect.y = destY;
+		destRect.width = destWidth;
+		destRect.height = destHeight;
+		imageHandle.drawInRect(destRect, srcRect, OS.NSCompositeSourceOver, 1);
+		handle.restoreGraphicsState();
+	} finally {
+		uncheckGC(pool);
+	}
+}
+
+/** 
+ * Draws a line, using the foreground color, between the points 
+ * (<code>x1</code>, <code>y1</code>) and (<code>x2</code>, <code>y2</code>).
+ *
+ * @param x1 the first point's x coordinate
+ * @param y1 the first point's y coordinate
+ * @param x2 the second point's x coordinate
+ * @param y2 the second point's y coordinate
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawLine(int x1, int y1, int x2, int y2) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = checkGC(DRAW);
+	try {
+		NSBezierPath path = data.path;
+		NSPoint pt = new NSPoint();
+		pt.x = x1 + data.drawXOffset;
+		pt.y = y1 + data.drawYOffset;
+		path.moveToPoint(pt);
+		pt.x = x2 + data.drawXOffset;
+		pt.y = y2 + data.drawYOffset;
+		path.lineToPoint(pt);
+		Pattern pattern = data.foregroundPattern;
+		if (pattern != null && pattern.gradient != null) {
+			strokePattern(path, pattern);
+		} else {
+			path.stroke();
+		}
+		path.removeAllPoints();
+	} finally {
+		uncheckGC(pool);
+	}
+}
+
+/** 
+ * Draws the outline of an oval, using the foreground color,
+ * within the specified rectangular area.
+ * <p>
+ * The result is a circle or ellipse that fits within the 
+ * rectangle specified by the <code>x</code>, <code>y</code>, 
+ * <code>width</code>, and <code>height</code> arguments. 
+ * </p><p> 
+ * The oval covers an area that is <code>width + 1</code> 
+ * pixels wide and <code>height + 1</code> pixels tall.
+ * </p>
+ *
+ * @param x the x coordinate of the upper left corner of the oval to be drawn
+ * @param y the y coordinate of the upper left corner of the oval to be drawn
+ * @param width the width of the oval to be drawn
+ * @param height the height of the oval to be drawn
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawOval(int x, int y, int width, int height) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = checkGC(DRAW);
+	try {
+		if (width < 0) {
+			x = x + width;
+			width = -width;
+		}
+		if (height < 0) {
+			y = y + height;
+			height = -height;
+		}
+		NSBezierPath path = data.path;
+		NSRect rect = new NSRect();
+		rect.x = x + data.drawXOffset;
+		rect.y = y + data.drawXOffset;
+		rect.width = width;
+		rect.height = height;
+		path.appendBezierPathWithOvalInRect(rect);
+		Pattern pattern = data.foregroundPattern;
+		if (pattern != null && pattern.gradient != null) {
+			strokePattern(path, pattern);
+		} else {
+			path.stroke();
+		}
+		path.removeAllPoints();
+	} finally {
+		uncheckGC(pool);
+	}
+}
+
+/** 
+ * Draws the path described by the parameter.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param path the path to draw
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parameter is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * 
+ * @see Path
+ * 
+ * @since 3.1
+ */
+public void drawPath(Path path) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (path == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (path.handle == null) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAutoreleasePool pool = checkGC(DRAW);
+	try {
+		handle.saveGraphicsState();
+		NSAffineTransform transform = NSAffineTransform.transform();
+		transform.translateXBy(data.drawXOffset, data.drawYOffset);
+		transform.concat();
+		NSBezierPath drawPath = data.path;
+		drawPath.appendBezierPath(path.handle);
+		Pattern pattern = data.foregroundPattern;
+		if (pattern != null && pattern.gradient != null) {
+			strokePattern(drawPath, pattern);
+		} else {
+			drawPath.stroke();
+		}
+		drawPath.removeAllPoints();
+		handle.restoreGraphicsState();
+	} finally {
+		uncheckGC(pool);
+	}
+}
+
+/** 
+ * Draws a pixel, using the foreground color, at the specified
+ * point (<code>x</code>, <code>y</code>).
+ * <p>
+ * Note that the receiver's line attributes do not affect this
+ * operation.
+ * </p>
+ *
+ * @param x the point's x coordinate
+ * @param y the point's y coordinate
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *  
+ * @since 3.0
+ */
+public void drawPoint(int x, int y) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = checkGC(FOREGROUND_FILL | CLIPPING | TRANSFORM);
+	try {
+		NSRect rect = new NSRect();
+		rect.x = x;
+		rect.y = y;
+		rect.width = 1;
+		rect.height = 1;
+		NSBezierPath path = data.path;
+		path.appendBezierPathWithRect(rect);
+		path.fill();
+		path.removeAllPoints();
+	} finally {
+		uncheckGC(pool);
+	}
+}
+
+/** 
+ * Draws the closed polygon which is defined by the specified array
+ * of integer coordinates, using the receiver's foreground color. The array 
+ * contains alternating x and y values which are considered to represent
+ * points which are the vertices of the polygon. Lines are drawn between
+ * each consecutive pair, and between the first pair and last pair in the
+ * array.
+ *
+ * @param pointArray an array of alternating x and y values which are the vertices of the polygon
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT if pointArray is null</li>
+ * </ul>	
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawPolygon(int[] pointArray) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (pointArray == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (pointArray.length < 4) return;
+	NSAutoreleasePool pool = checkGC(DRAW);
+	try {
+		float /*double*/ xOffset = data.drawXOffset, yOffset = data.drawYOffset;
+		NSBezierPath path = data.path;
+		NSPoint pt = new NSPoint();
+		pt.x = pointArray[0] + xOffset;
+		pt.y = pointArray[1] + yOffset;
+		path.moveToPoint(pt);
+		int end = pointArray.length / 2 * 2;
+		for (int i = 2; i < end; i+=2) {
+			pt.x = pointArray[i] + xOffset;
+			pt.y = pointArray[i+1] + yOffset;
+			path.lineToPoint(pt);
+		}
+		path.closePath();
+		Pattern pattern = data.foregroundPattern;
+		if (pattern != null && pattern.gradient != null) {
+			strokePattern(path, pattern);
+		} else {
+			path.stroke();
+		}
+		path.removeAllPoints();
+	} finally {
+		uncheckGC(pool);
+	}
+}
+
+/** 
+ * Draws the polyline which is defined by the specified array
+ * of integer coordinates, using the receiver's foreground color. The array 
+ * contains alternating x and y values which are considered to represent
+ * points which are the corners of the polyline. Lines are drawn between
+ * each consecutive pair, but not between the first pair and last pair in
+ * the array.
+ *
+ * @param pointArray an array of alternating x and y values which are the corners of the polyline
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point array is null</li>
+ * </ul>	
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawPolyline(int[] pointArray) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (pointArray == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (pointArray.length < 4) return;
+	NSAutoreleasePool pool = checkGC(DRAW);
+	try {
+		float /*double*/ xOffset = data.drawXOffset, yOffset = data.drawYOffset;
+		NSBezierPath path = data.path;
+		NSPoint pt = new NSPoint();
+		pt.x = pointArray[0] + xOffset;
+		pt.y = pointArray[1] + yOffset;
+		path.moveToPoint(pt);
+		int end = pointArray.length / 2 * 2;
+		for (int i = 2; i < end; i+=2) {
+			pt.x = pointArray[i] + xOffset;
+			pt.y = pointArray[i+1] + yOffset;
+			path.lineToPoint(pt);
+		}
+		Pattern pattern = data.foregroundPattern;
+		if (pattern != null && pattern.gradient != null) {
+			strokePattern(path, pattern);
+		} else {
+			path.stroke();
+		}
+		path.removeAllPoints();
+	} finally {
+		uncheckGC(pool);
+	}
+}
+
+/** 
+ * Draws the outline of the rectangle specified by the arguments,
+ * using the receiver's foreground color. The left and right edges
+ * of the rectangle are at <code>x</code> and <code>x + width</code>. 
+ * The top and bottom edges are at <code>y</code> and <code>y + height</code>. 
+ *
+ * @param x the x coordinate of the rectangle to be drawn
+ * @param y the y coordinate of the rectangle to be drawn
+ * @param width the width of the rectangle to be drawn
+ * @param height the height of the rectangle to be drawn
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawRectangle(int x, int y, int width, int height) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = checkGC(DRAW);
+	try {
+		if (width < 0) {
+			x = x + width;
+			width = -width;
+		}
+		if (height < 0) {
+			y = y + height;
+			height = -height;
+		}
+		NSRect rect = new NSRect();
+		rect.x = x + data.drawXOffset;
+		rect.y = y + data.drawYOffset;
+		rect.width = width;
+		rect.height = height;
+		NSBezierPath path = data.path;
+		path.appendBezierPathWithRect(rect);
+		Pattern pattern = data.foregroundPattern;
+		if (pattern != null && pattern.gradient != null) {
+			strokePattern(path, pattern);
+		} else {
+			path.stroke();
+		}
+		path.removeAllPoints();
+	} finally {
+		uncheckGC(pool);
+	}
+}
+
+/** 
+ * Draws the outline of the specified rectangle, using the receiver's
+ * foreground color. The left and right edges of the rectangle are at
+ * <code>rect.x</code> and <code>rect.x + rect.width</code>. The top 
+ * and bottom edges are at <code>rect.y</code> and 
+ * <code>rect.y + rect.height</code>. 
+ *
+ * @param rect the rectangle to draw
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the rectangle is null</li>
+ * </ul>	
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawRectangle(Rectangle rect) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (rect == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	drawRectangle (rect.x, rect.y, rect.width, rect.height);
+}
+
+/** 
+ * Draws the outline of the round-cornered rectangle specified by 
+ * the arguments, using the receiver's foreground color. The left and
+ * right edges of the rectangle are at <code>x</code> and <code>x + width</code>. 
+ * The top and bottom edges are at <code>y</code> and <code>y + height</code>.
+ * The <em>roundness</em> of the corners is specified by the 
+ * <code>arcWidth</code> and <code>arcHeight</code> arguments, which
+ * are respectively the width and height of the ellipse used to draw
+ * the corners.
+ *
+ * @param x the x coordinate of the rectangle to be drawn
+ * @param y the y coordinate of the rectangle to be drawn
+ * @param width the width of the rectangle to be drawn
+ * @param height the height of the rectangle to be drawn
+ * @param arcWidth the width of the arc
+ * @param arcHeight the height of the arc
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawRoundRectangle(int x, int y, int width, int height, int arcWidth, int arcHeight) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (arcWidth == 0 || arcHeight == 0) {
+		drawRectangle(x, y, width, height);
+    	return;
+	}
+	NSAutoreleasePool pool = checkGC(DRAW);
+	try {
+		NSBezierPath path = data.path;
+		NSRect rect = new NSRect();
+		rect.x = x + data.drawXOffset;
+		rect.y = y + data.drawYOffset;
+		rect.width = width;
+		rect.height = height;
+		path.appendBezierPathWithRoundedRect(rect, arcWidth / 2f, arcHeight / 2f);
+		Pattern pattern = data.foregroundPattern;
+		if (pattern != null && pattern.gradient != null) {
+			strokePattern(path, pattern);
+		} else {
+			path.stroke();
+		}
+		path.removeAllPoints();
+	} finally {
+		uncheckGC(pool);
+	}
+}
+
+/** 
+ * Draws the given string, using the receiver's current font and
+ * foreground color. No tab expansion or carriage return processing
+ * will be performed. The background of the rectangular area where
+ * the string is being drawn will be filled with the receiver's
+ * background color.
+ *
+ * @param string the string to be drawn
+ * @param x the x coordinate of the top left corner of the rectangular area where the string is to be drawn
+ * @param y the y coordinate of the top left corner of the rectangular area where the string is to be drawn
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>	
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawString (String string, int x, int y) {
+	drawString(string, x, y, false);
+}
+
+/** 
+ * Draws the given string, using the receiver's current font and
+ * foreground color. No tab expansion or carriage return processing
+ * will be performed. If <code>isTransparent</code> is <code>true</code>,
+ * then the background of the rectangular area where the string is being
+ * drawn will not be modified, otherwise it will be filled with the
+ * receiver's background color.
+ *
+ * @param string the string to be drawn
+ * @param x the x coordinate of the top left corner of the rectangular area where the string is to be drawn
+ * @param y the y coordinate of the top left corner of the rectangular area where the string is to be drawn
+ * @param isTransparent if <code>true</code> the background will be transparent, otherwise it will be opaque
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>	
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawString(String string, int x, int y, boolean isTransparent) {
+	drawText(string, x, y, isTransparent ? SWT.DRAW_TRANSPARENT : 0);
+}
+
+/** 
+ * Draws the given string, using the receiver's current font and
+ * foreground color. Tab expansion and carriage return processing
+ * are performed. The background of the rectangular area where
+ * the text is being drawn will be filled with the receiver's
+ * background color.
+ *
+ * @param string the string to be drawn
+ * @param x the x coordinate of the top left corner of the rectangular area where the text is to be drawn
+ * @param y the y coordinate of the top left corner of the rectangular area where the text is to be drawn
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>	
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawText(String string, int x, int y) {
+	drawText(string, x, y, SWT.DRAW_DELIMITER | SWT.DRAW_TAB);
+}
+
+/** 
+ * Draws the given string, using the receiver's current font and
+ * foreground color. Tab expansion and carriage return processing
+ * are performed. If <code>isTransparent</code> is <code>true</code>,
+ * then the background of the rectangular area where the text is being
+ * drawn will not be modified, otherwise it will be filled with the
+ * receiver's background color.
+ *
+ * @param string the string to be drawn
+ * @param x the x coordinate of the top left corner of the rectangular area where the text is to be drawn
+ * @param y the y coordinate of the top left corner of the rectangular area where the text is to be drawn
+ * @param isTransparent if <code>true</code> the background will be transparent, otherwise it will be opaque
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>	
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawText(String string, int x, int y, boolean isTransparent) {
+	int flags = SWT.DRAW_DELIMITER | SWT.DRAW_TAB;
+	if (isTransparent) flags |= SWT.DRAW_TRANSPARENT;
+	drawText(string, x, y, flags);
+}
+
+/** 
+ * Draws the given string, using the receiver's current font and
+ * foreground color. Tab expansion, line delimiter and mnemonic
+ * processing are performed according to the specified flags. If
+ * <code>flags</code> includes <code>DRAW_TRANSPARENT</code>,
+ * then the background of the rectangular area where the text is being
+ * drawn will not be modified, otherwise it will be filled with the
+ * receiver's background color.
+ * <p>
+ * The parameter <code>flags</code> may be a combination of:
+ * <dl>
+ * <dt><b>DRAW_DELIMITER</b></dt>
+ * <dd>draw multiple lines</dd>
+ * <dt><b>DRAW_TAB</b></dt>
+ * <dd>expand tabs</dd>
+ * <dt><b>DRAW_MNEMONIC</b></dt>
+ * <dd>underline the mnemonic character</dd>
+ * <dt><b>DRAW_TRANSPARENT</b></dt>
+ * <dd>transparent background</dd>
+ * </dl>
+ * </p>
+ *
+ * @param string the string to be drawn
+ * @param x the x coordinate of the top left corner of the rectangular area where the text is to be drawn
+ * @param y the y coordinate of the top left corner of the rectangular area where the text is to be drawn
+ * @param flags the flags specifying how to process the text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>	
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawText (String string, int x, int y, int flags) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (string == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	NSAutoreleasePool pool = checkGC(CLIPPING | TRANSFORM | FONT);
+	try {
+		handle.saveGraphicsState();
+		boolean mode = true;
+		switch (data.textAntialias) {
+			case SWT.DEFAULT:
+				/* Printer is off by default */
+				if (!handle.isDrawingToScreen()) mode = false;
+				break;
+			case SWT.OFF: mode = false; break;
+			case SWT.ON: mode = true; break;
+		}
+		handle.setShouldAntialias(mode);
+		NSAttributedString str = createString(string, flags, true);
+		if ((flags & SWT.DRAW_TRANSPARENT) == 0) {
+			NSSize size = str.size();
+			NSRect rect = new NSRect();
+			rect.x = x;
+			rect.y = y;
+			rect.width = size.width;
+			rect.height = size.height;
+			NSColor bg = data.bg;
+			if (bg == null) {
+				float /*double*/ [] color = data.background;
+				bg = data.bg = NSColor.colorWithDeviceRed(color[0], color[1], color[2], data.alpha / 255f);
+				bg.retain();
+			}
+			bg.setFill();
+			NSBezierPath.fillRect(rect);
+			str.drawInRect(rect);
+		} else {
+			NSPoint pt = new NSPoint();
+			pt.x = x;
+			pt.y = y;
+			str.drawAtPoint(pt);
+		}
+		str.release();
+		handle.restoreGraphicsState();
+	} finally {
+		uncheckGC(pool);
+	}
+}
+
+/**
+ * Compares the argument to the receiver, and returns true
+ * if they represent the <em>same</em> object using a class
+ * specific comparison.
+ *
+ * @param object the object to compare with this object
+ * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
+ *
+ * @see #hashCode
+ */
+public boolean equals(Object object) {
+	if (object == this) return true;
+	if (!(object instanceof GC)) return false;
+	return handle == ((GC)object).handle;
+}
+
+/**
+ * Fills the interior of a circular or elliptical arc within
+ * the specified rectangular area, with the receiver's background
+ * color.
+ * <p>
+ * The resulting arc begins at <code>startAngle</code> and extends  
+ * for <code>arcAngle</code> degrees, using the current color.
+ * Angles are interpreted such that 0 degrees is at the 3 o'clock
+ * position. A positive value indicates a counter-clockwise rotation
+ * while a negative value indicates a clockwise rotation.
+ * </p><p>
+ * The center of the arc is the center of the rectangle whose origin 
+ * is (<code>x</code>, <code>y</code>) and whose size is specified by the 
+ * <code>width</code> and <code>height</code> arguments. 
+ * </p><p>
+ * The resulting arc covers an area <code>width + 1</code> pixels wide
+ * by <code>height + 1</code> pixels tall.
+ * </p>
+ *
+ * @param x the x coordinate of the upper-left corner of the arc to be filled
+ * @param y the y coordinate of the upper-left corner of the arc to be filled
+ * @param width the width of the arc to be filled
+ * @param height the height of the arc to be filled
+ * @param startAngle the beginning angle
+ * @param arcAngle the angular extent of the arc, relative to the start angle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #drawArc
+ */
+public void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (width < 0) {
+		x = x + width;
+		width = -width;
+	}
+	if (height < 0) {
+		y = y + height;
+		height = -height;
+	}
+	if (width == 0 || height == 0 || arcAngle == 0) return;
+	NSAutoreleasePool pool = checkGC(FILL);
+	try {
+		handle.saveGraphicsState();
+		NSAffineTransform transform = NSAffineTransform.transform();
+		float /*double*/ xOffset = data.drawXOffset, yOffset = data.drawYOffset;
+		transform.translateXBy(x + xOffset + width / 2f, y + yOffset + height / 2f);
+		transform.scaleXBy(width / 2f, height / 2f);
+		NSBezierPath path = data.path;
+		NSPoint center = new NSPoint();
+		path.moveToPoint(center);
+		float sAngle = -startAngle;
+		float eAngle = -(startAngle + arcAngle);
+		path.appendBezierPathWithArcWithCenter(center, 1, sAngle,  eAngle, arcAngle>0);
+		path.closePath();
+		path.transformUsingAffineTransform(transform);
+		Pattern pattern = data.backgroundPattern;
+		if (pattern != null && pattern.gradient != null) {
+			fillPattern(path, pattern);
+		} else {
+			path.fill();
+		}
+		path.removeAllPoints();
+		handle.restoreGraphicsState();
+	} finally {
+		uncheckGC(pool);
+	}
+}
+
+/**
+ * Fills the interior of the specified rectangle with a gradient
+ * sweeping from left to right or top to bottom progressing
+ * from the receiver's foreground color to its background color.
+ *
+ * @param x the x coordinate of the rectangle to be filled
+ * @param y the y coordinate of the rectangle to be filled
+ * @param width the width of the rectangle to be filled, may be negative
+ *        (inverts direction of gradient if horizontal)
+ * @param height the height of the rectangle to be filled, may be negative
+ *        (inverts direction of gradient if vertical)
+ * @param vertical if true sweeps from top to bottom, else 
+ *        sweeps from left to right
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #drawRectangle(int, int, int, int)
+ */
+public void fillGradientRectangle(int x, int y, int width, int height, boolean vertical) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if ((width == 0) || (height == 0)) return;
+	NSAutoreleasePool pool = checkGC(CLIPPING | TRANSFORM);
+	try {
+		RGB backgroundRGB, foregroundRGB;
+		backgroundRGB = getBackground().getRGB();
+		foregroundRGB = getForeground().getRGB();
+
+		RGB fromRGB, toRGB;
+		fromRGB = foregroundRGB;
+		toRGB   = backgroundRGB;
+		boolean swapColors = false;
+		if (width < 0) {
+			x += width; width = -width;
+			if (! vertical) swapColors = true;
+		}
+		if (height < 0) {
+			y += height; height = -height;
+			if (vertical) swapColors = true;
+		}
+		if (swapColors) {
+			fromRGB = backgroundRGB;
+			toRGB   = foregroundRGB;
+		}
+		if (fromRGB.equals(toRGB)) {
+			fillRectangle(x, y, width, height);
+		} else {
+			NSColor startingColor = NSColor.colorWithDeviceRed(fromRGB.red / 255f, fromRGB.green / 255f, fromRGB.blue / 255f, data.alpha / 255f);
+			NSColor endingColor = NSColor.colorWithDeviceRed(toRGB.red / 255f, toRGB.green / 255f, toRGB.blue / 255f, data.alpha / 255f);
+			NSGradient gradient = ((NSGradient)new NSGradient().alloc()).initWithStartingColor(startingColor, endingColor);
+			NSRect rect = new NSRect();
+			rect.x = x;
+			rect.y = y;
+			rect.width = width;
+			rect.height = height;
+			gradient.drawInRect(rect, vertical ? 90 : 0);
+			gradient.release();
+		}
+	} finally {
+		uncheckGC(pool);
+	}
+}
+
+/** 
+ * Fills the interior of an oval, within the specified
+ * rectangular area, with the receiver's background
+ * color.
+ *
+ * @param x the x coordinate of the upper left corner of the oval to be filled
+ * @param y the y coordinate of the upper left corner of the oval to be filled
+ * @param width the width of the oval to be filled
+ * @param height the height of the oval to be filled
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #drawOval
+ */
+public void fillOval(int x, int y, int width, int height) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = checkGC(FILL);
+	try {
+		if (width < 0) {
+			x = x + width;
+			width = -width;
+		}
+		if (height < 0) {
+			y = y + height;
+			height = -height;
+		}
+		NSBezierPath path = data.path;
+		NSRect rect = new NSRect();
+		rect.x = x;
+		rect.y = y;
+		rect.width = width;
+		rect.height = height;
+		path.appendBezierPathWithOvalInRect(rect);
+		Pattern pattern = data.backgroundPattern;
+		if (pattern != null && pattern.gradient != null) {
+			fillPattern(path, pattern);
+		} else {
+			path.fill();
+		}
+		path.removeAllPoints();
+	} finally {
+		uncheckGC(pool);
+	}
+}
+
+void fillPattern(NSBezierPath path, Pattern pattern) {
+	handle.saveGraphicsState();
+	path.addClip();
+	NSRect bounds = path.bounds();
+	NSPoint start = new NSPoint();
+	start.x = pattern.pt1.x;
+	start.y = pattern.pt1.y;
+	NSPoint end = new NSPoint();
+	end.x = pattern.pt2.x;
+	end.y = pattern.pt2.y;
+	float /*double*/ difx = end.x - start.x;
+	float /*double*/ dify = end.y - start.y;
+	if (difx == 0 && dify == 0) {
+		float /*double*/ [] color = pattern.color1;
+		NSColor.colorWithDeviceRed(color[0], color[1], color[2], data.alpha / 255f).setFill();
+		path.fill();
+		handle.restoreGraphicsState();
+		return;
+	}
+	float /*double*/ startx, starty, endx, endy;
+	if (difx == 0 || dify == 0) {
+		startx = bounds.x;
+		starty = bounds.y;
+		endx = bounds.x + bounds.width;
+		endy = bounds.y + bounds.height;
+		if (difx < 0 || dify < 0) {
+			startx = endx;
+			starty = endy;
+			endx = bounds.x;
+			endy = bounds.y;
+		}
+	} else {
+		float /*double*/ m = (end.y-start.y)/(end.x - start.x);
+		float /*double*/ b = end.y - (m * end.x);
+		float /*double*/ m2 = -1/m; //perpendicular slope
+		float /*double*/ b2 = bounds.y - (m2 * bounds.x);
+		startx = endx = (b - b2) / (m2 - m);
+		b2 = (bounds.y + bounds.height) - (m2 * bounds.x);
+		float /*double*/ x2 = (b - b2) / (m2 - m);
+		startx = difx > 0 ? Math.min(startx, x2) : Math.max(startx, x2);
+		endx = difx < 0 ? Math.min(endx, x2) : Math.max(endx, x2);
+		b2 = bounds.y - (m2 * (bounds.x + bounds.width));
+		x2 = (b - b2) / (m2 - m);
+		startx = difx > 0 ? Math.min(startx, x2) : Math.max(startx, x2);
+		endx = difx < 0 ? Math.min(endx, x2) : Math.max(endx, x2);
+		b2 = (bounds.y + bounds.height) - (m2 * (bounds.x + bounds.width));
+		x2 = (b - b2) / (m2 - m);
+		startx = difx > 0 ? Math.min(startx, x2) : Math.max(startx, x2);
+		endx = difx < 0 ? Math.min(endx, x2) : Math.max(endx, x2);
+		starty = (m * startx) + b;
+		endy = (m * endx) + b;
+	}
+	if (difx != 0) {
+		while ((difx > 0 && start.x >= startx) || (difx < 0 && start.x <= startx)) {
+			start.x -= difx;
+			start.y -= dify;
+		}
+	} else {
+		while ((dify > 0 && start.y >= starty) || (dify < 0 && start.y <= starty)) {
+			start.x -= difx;
+			start.y -= dify;
+		}
+	}
+	end.x = start.x;
+	end.y = start.y;
+	do {
+		end.x += difx;
+		end.y += dify;
+		pattern.gradient.drawFromPoint(start, end, 0);
+		start.x = end.x;
+		start.y = end.y;
+	} while (
+				(difx > 0  && end.x <= endx) ||
+				(difx < 0  && end.x >= endx) ||
+				(difx == 0 && ((dify > 0  && end.y <= endy) || (dify < 0  && end.y >= endy)))
+			);
+	handle.restoreGraphicsState();
+}
+
+/** 
+ * Fills the path described by the parameter.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ *
+ * @param path the path to fill
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parameter is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * 
+ * @see Path
+ * 
+ * @since 3.1
+ */
+public void fillPath(Path path) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (path == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (path.handle == null) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAutoreleasePool pool = checkGC(FILL);
+	try {
+		NSBezierPath drawPath = data.path;
+		drawPath.appendBezierPath(path.handle);
+		Pattern pattern = data.backgroundPattern;
+		if (pattern != null && pattern.gradient != null) {
+			fillPattern(drawPath, pattern);
+		} else {
+			drawPath.fill();
+		}
+		drawPath.removeAllPoints();
+	} finally {
+		uncheckGC(pool);
+	}
+}
+
+/** 
+ * Fills the interior of the closed polygon which is defined by the
+ * specified array of integer coordinates, using the receiver's
+ * background color. The array contains alternating x and y values
+ * which are considered to represent points which are the vertices of
+ * the polygon. Lines are drawn between each consecutive pair, and
+ * between the first pair and last pair in the array.
+ *
+ * @param pointArray an array of alternating x and y values which are the vertices of the polygon
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT if pointArray is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #drawPolygon	
+ */
+public void fillPolygon(int[] pointArray) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (pointArray == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (pointArray.length < 4) return;
+	NSAutoreleasePool pool = checkGC(FILL);
+	try {
+		NSBezierPath path = data.path;
+		NSPoint pt = new NSPoint();
+		pt.x = pointArray[0];
+		pt.y = pointArray[1];
+		path.moveToPoint(pt);
+		int end = pointArray.length / 2 * 2;
+		for (int i = 2; i < end; i+=2) {
+			pt.x = pointArray[i];
+			pt.y = pointArray[i+1];
+			path.lineToPoint(pt);
+		}
+		path.closePath();
+		Pattern pattern = data.backgroundPattern;
+		if (pattern != null && pattern.gradient != null) {
+			fillPattern(path, pattern);
+		} else {
+			path.fill();
+		}
+		path.removeAllPoints();
+	} finally {
+		uncheckGC(pool);
+	}
+}
+
+/** 
+ * Fills the interior of the rectangle specified by the arguments,
+ * using the receiver's background color. 
+ *
+ * @param x the x coordinate of the rectangle to be filled
+ * @param y the y coordinate of the rectangle to be filled
+ * @param width the width of the rectangle to be filled
+ * @param height the height of the rectangle to be filled
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #drawRectangle(int, int, int, int)
+ */
+public void fillRectangle(int x, int y, int width, int height) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = checkGC(FILL);
+	try {
+		if (width < 0) {
+			x = x + width;
+			width = -width;
+		}
+		if (height < 0) {
+			y = y + height;
+			height = -height;
+		}
+		NSRect rect = new NSRect();
+		rect.x = x;
+		rect.y = y;
+		rect.width = width;
+		rect.height = height;
+		NSBezierPath path = data.path;
+		path.appendBezierPathWithRect(rect);
+		Pattern pattern = data.backgroundPattern;
+		if (pattern != null && pattern.gradient != null) {
+			fillPattern(path, pattern);
+		} else {
+			path.fill();
+		}
+		path.removeAllPoints();
+	} finally {
+		uncheckGC(pool);
+	}
+}
+
+/** 
+ * Fills the interior of the specified rectangle, using the receiver's
+ * background color. 
+ *
+ * @param rect the rectangle to be filled
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the rectangle is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #drawRectangle(int, int, int, int)
+ */
+public void fillRectangle(Rectangle rect) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (rect == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	fillRectangle(rect.x, rect.y, rect.width, rect.height);
+}
+
+/** 
+ * Fills the interior of the round-cornered rectangle specified by 
+ * the arguments, using the receiver's background color. 
+ *
+ * @param x the x coordinate of the rectangle to be filled
+ * @param y the y coordinate of the rectangle to be filled
+ * @param width the width of the rectangle to be filled
+ * @param height the height of the rectangle to be filled
+ * @param arcWidth the width of the arc
+ * @param arcHeight the height of the arc
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #drawRoundRectangle
+ */
+public void fillRoundRectangle(int x, int y, int width, int height, int arcWidth, int arcHeight) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (arcWidth == 0 || arcHeight == 0) {
+		fillRectangle(x, y, width, height);
+    	return;
+	}
+	NSAutoreleasePool pool = checkGC(FILL);
+	try {
+		NSBezierPath path = data.path;
+		NSRect rect = new NSRect();
+		rect.x = x;
+		rect.y = y;
+		rect.width = width;
+		rect.height = height;
+		path.appendBezierPathWithRoundedRect(rect, arcWidth / 2f, arcHeight / 2f);
+		Pattern pattern = data.backgroundPattern;
+		if (pattern != null && pattern.gradient != null) {
+			fillPattern(path, pattern);
+		} else {
+			path.fill();
+		}
+		path.removeAllPoints();
+	} finally {
+		uncheckGC(pool);
+	}
+}
+
+void strokePattern(NSBezierPath path, Pattern pattern) {
+	handle.saveGraphicsState();
+	int /*long*/ cgPath = createCGPathRef(path);
+	int /*long*/ cgContext = handle.graphicsPort();
+	OS.CGContextSaveGState(cgContext);
+	initCGContext(cgContext);
+	OS.CGContextAddPath(cgContext, cgPath);
+	OS.CGContextReplacePathWithStrokedPath(cgContext);
+	OS.CGPathRelease(cgPath);
+	cgPath = 0;
+	cgPath = OS.CGContextCopyPath(cgContext);
+	if (cgPath == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	OS.CGContextRestoreGState(cgContext);
+	NSBezierPath strokePath = createNSBezierPath(cgPath);
+	OS.CGPathRelease(cgPath);
+	fillPattern(strokePath, pattern);
+	handle.restoreGraphicsState();
+}
+
+void flush () {
+	handle.flushGraphics();
+}
+
+/**
+ * Returns the <em>advance width</em> of the specified character in
+ * the font which is currently selected into the receiver.
+ * <p>
+ * The advance width is defined as the horizontal distance the cursor
+ * should move after printing the character in the selected font.
+ * </p>
+ *
+ * @param ch the character to measure
+ * @return the distance in the x direction to move past the character before painting the next
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getAdvanceWidth(char ch) {	
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	//NOT DONE
+	return stringExtent(new String(new char[]{ch})).x;
+}
+
+/** 
+ * Returns the background color.
+ *
+ * @return the receiver's background color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Color getBackground() {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return Color.cocoa_new (data.device, data.background);
+}
+
+/** 
+ * Returns the background pattern. The default value is
+ * <code>null</code>.
+ *
+ * @return the receiver's background pattern
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see Pattern
+ * 
+ * @since 3.1
+ */
+public Pattern getBackgroundPattern() {	
+	if (handle == null) SWT.error(SWT.ERROR_WIDGET_DISPOSED);
+	return data.backgroundPattern;	
+}
+
+/**
+ * Returns <code>true</code> if receiver is using the operating system's
+ * advanced graphics subsystem.  Otherwise, <code>false</code> is returned
+ * to indicate that normal graphics are in use.
+ * <p>
+ * Advanced graphics may not be installed for the operating system.  In this
+ * case, <code>false</code> is always returned.  Some operating system have
+ * only one graphics subsystem.  If this subsystem supports advanced graphics,
+ * then <code>true</code> is always returned.  If any graphics operation such
+ * as alpha, antialias, patterns, interpolation, paths, clipping or transformation
+ * has caused the receiver to switch from regular to advanced graphics mode,
+ * <code>true</code> is returned.  If the receiver has been explicitly switched
+ * to advanced mode and this mode is supported, <code>true</code> is returned.
+ * </p>
+ *
+ * @return the advanced value
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #setAdvanced
+ * 
+ * @since 3.1
+ */
+public boolean getAdvanced() {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return true;
+}
+
+/**
+ * Returns the receiver's alpha value. The alpha value
+ * is between 0 (transparent) and 255 (opaque).
+ *
+ * @return the alpha value
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public int getAlpha() {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.alpha;
+}
+
+/**
+ * Returns the receiver's anti-aliasing setting value, which will be
+ * one of <code>SWT.DEFAULT</code>, <code>SWT.OFF</code> or
+ * <code>SWT.ON</code>. Note that this controls anti-aliasing for all
+ * <em>non-text drawing</em> operations.
+ *
+ * @return the anti-aliasing setting
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #getTextAntialias
+ * 
+ * @since 3.1
+ */
+public int getAntialias() {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.antialias;
+}
+
+/**
+ * Returns the width of the specified character in the font
+ * selected into the receiver. 
+ * <p>
+ * The width is defined as the space taken up by the actual
+ * character, not including the leading and tailing whitespace
+ * or overhang.
+ * </p>
+ *
+ * @param ch the character to measure
+ * @return the width of the character
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getCharWidth(char ch) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	//NOT DONE
+	return stringExtent(new String(new char[]{ch})).x;
+}
+
+/** 
+ * Returns the bounding rectangle of the receiver's clipping
+ * region. If no clipping region is set, the return value
+ * will be a rectangle which covers the entire bounds of the
+ * object the receiver is drawing on.
+ *
+ * @return the bounding rectangle of the clipping region
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Rectangle getClipping() {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSRect rect = null;
+		if (data.view != null) {
+			rect = data.view.visibleRect();
+		} else {
+			rect = new NSRect();
+			if (data.image != null) {
+				NSSize size = data.image.handle.size();
+				rect.width = size.width;
+				rect.height = size.height;
+			} else if (data.size != null) {
+				rect.width = data.size.width;
+				rect.height = data.size.height;
+			}
+		}
+		if (data.paintRect != null || data.clipPath != null || data.inverseTransform != null) {
+			if (data.paintRect != null) {
+				OS.NSIntersectionRect(rect, rect, data.paintRect);
+			}
+			if (data.clipPath != null) {
+				NSRect clip = data.clipPath.bounds();
+				OS.NSIntersectionRect(rect, rect, clip);
+			}
+			if (data.inverseTransform != null && rect.width > 0 && rect.height > 0) {
+				NSPoint pt = new NSPoint();
+				pt.x = rect.x;
+				pt.y = rect.y;
+				NSSize size = new NSSize();
+				size.width = rect.width;
+				size.height = rect.height;
+				pt = data.inverseTransform.transformPoint(pt);
+				size =  data.inverseTransform.transformSize(size);
+				rect.x = pt.x;
+				rect.y = pt.y;
+				rect.width = size.width;
+				rect.height = size.height;
+			}
+		}
+		return new Rectangle((int)rect.x, (int)rect.y, (int)rect.width, (int)rect.height);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/** 
+ * Sets the region managed by the argument to the current
+ * clipping region of the receiver.
+ *
+ * @param region the region to fill with the clipping region
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the region is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the region is disposed</li>
+ * </ul>	
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void getClipping(Region region) {	
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (region == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (region.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		region.subtract(region);
+		NSRect rect = null;
+		if (data.view != null) {
+			rect = data.view.visibleRect();
+		} else {
+			rect = new NSRect();
+			if (data.image != null) {
+				NSSize size = data.image.handle.size();
+				rect.width = size.width;
+				rect.height = size.height;
+			} else if (data.size != null) {
+				rect.width = data.size.width;
+				rect.height = data.size.height;
+			}
+		}
+		region.add((int)rect.x, (int)rect.y, (int)rect.width, (int)rect.height);
+		NSRect paintRect = data.paintRect;
+		if (paintRect != null) {
+			region.intersect((int)paintRect.x, (int)paintRect.y, (int)paintRect.width, (int)paintRect.height);
+		}
+		if (data.clipPath != null) {
+			NSBezierPath clip = data.clipPath.bezierPathByFlatteningPath();
+			int count = (int)/*64*/clip.elementCount();
+			int pointCount = 0;
+			Region clipRgn = new Region(device);
+			int[] pointArray = new int[count * 2];
+			int /*long*/ points = OS.malloc(NSPoint.sizeof);
+			if (points == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+			NSPoint pt = new NSPoint();
+			for (int i = 0; i < count; i++) {
+				int element = (int)/*64*/clip.elementAtIndex(i, points);
+				switch (element) {
+					case OS.NSMoveToBezierPathElement:
+						if (pointCount != 0) clipRgn.add(pointArray, pointCount);
+						pointCount = 0;
+						OS.memmove(pt, points, NSPoint.sizeof);
+						pointArray[pointCount++] = (int)pt.x;
+						pointArray[pointCount++] = (int)pt.y;
+						break;
+					case OS.NSLineToBezierPathElement:
+						OS.memmove(pt, points, NSPoint.sizeof);
+						pointArray[pointCount++] = (int)pt.x;
+						pointArray[pointCount++] = (int)pt.y;
+						break;
+					case OS.NSClosePathBezierPathElement:
+						if (pointCount != 0) clipRgn.add(pointArray, pointCount);
+						pointCount = 0;
+						break;
+				}
+			}
+			if (pointCount != 0) clipRgn.add(pointArray, pointCount);
+			OS.free(points);
+			region.intersect(clipRgn);
+			clipRgn.dispose();
+		}
+		if (data.inverseTransform != null) {
+			region.convertRgn(data.inverseTransform);
+		}
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/** 
+ * Returns the receiver's fill rule, which will be one of
+ * <code>SWT.FILL_EVEN_ODD</code> or <code>SWT.FILL_WINDING</code>.
+ *
+ * @return the receiver's fill rule
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public int getFillRule() {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.fillRule;
+}
+
+/** 
+ * Returns the font currently being used by the receiver
+ * to draw and measure text.
+ *
+ * @return the receiver's font
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Font getFont() {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.font;
+}
+
+/**
+ * Returns a FontMetrics which contains information
+ * about the font currently being used by the receiver
+ * to draw and measure text.
+ *
+ * @return font metrics for the receiver's font
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public FontMetrics getFontMetrics() {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = checkGC(FONT);
+	try {
+		NSFont font = data.font.handle;
+		int ascent = (int)(0.5f + font.ascender());
+		int descent = (int)(0.5f + (-font.descender() + font.leading()));	
+		String s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; 
+		int averageCharWidth = stringExtent(s).x / s.length();
+		return FontMetrics.cocoa_new(ascent, descent, averageCharWidth, 0, ascent + descent);
+	} finally {
+		uncheckGC(pool);
+	}
+}
+
+/** 
+ * Returns the receiver's foreground color.
+ *
+ * @return the color used for drawing foreground things
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Color getForeground() {	
+	if (handle == null) SWT.error(SWT.ERROR_WIDGET_DISPOSED);
+	return Color.cocoa_new(data.device, data.foreground);	
+}
+
+/** 
+ * Returns the foreground pattern. The default value is
+ * <code>null</code>.
+ *
+ * @return the receiver's foreground pattern
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see Pattern
+ * 
+ * @since 3.1
+ */
+public Pattern getForegroundPattern() {	
+	if (handle == null) SWT.error(SWT.ERROR_WIDGET_DISPOSED);
+	return data.foregroundPattern;	
+}
+
+/** 
+ * Returns the GCData.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>GC</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @return the receiver's GCData
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see GCData
+ * 
+ * @since 3.2
+ * @noreference This method is not intended to be referenced by clients.
+ */
+public GCData getGCData() {	
+	if (handle == null) SWT.error(SWT.ERROR_WIDGET_DISPOSED);
+	return data;	
+}
+
+/** 
+ * Returns the receiver's interpolation setting, which will be one of
+ * <code>SWT.DEFAULT</code>, <code>SWT.NONE</code>, 
+ * <code>SWT.LOW</code> or <code>SWT.HIGH</code>.
+ *
+ * @return the receiver's interpolation setting
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public int getInterpolation() {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	int interpolation = (int)/*64*/handle.imageInterpolation();
+	switch (interpolation) {
+		case OS.NSImageInterpolationDefault: return SWT.DEFAULT;
+		case OS.NSImageInterpolationNone: return SWT.NONE;
+		case OS.NSImageInterpolationLow: return SWT.LOW;
+		case OS.NSImageInterpolationHigh: return SWT.HIGH;
+	}
+	return SWT.DEFAULT;
+}
+
+/** 
+ * Returns the receiver's line attributes.
+ *
+ * @return the line attributes used for drawing lines
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.3 
+ */
+public LineAttributes getLineAttributes() {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	float[] dashes = null;
+	if (data.lineDashes != null) {
+		dashes = new float[data.lineDashes.length];
+		System.arraycopy(data.lineDashes, 0, dashes, 0, dashes.length);
+	}
+	return new LineAttributes(data.lineWidth, data.lineCap, data.lineJoin, data.lineStyle, dashes, data.lineDashesOffset, data.lineMiterLimit);
+}
+
+/** 
+ * Returns the receiver's line cap style, which will be one
+ * of the constants <code>SWT.CAP_FLAT</code>, <code>SWT.CAP_ROUND</code>,
+ * or <code>SWT.CAP_SQUARE</code>.
+ *
+ * @return the cap style used for drawing lines
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1 
+ */
+public int getLineCap() {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.lineCap;
+}
+
+/** 
+ * Returns the receiver's line dash style. The default value is
+ * <code>null</code>.
+ *
+ * @return the line dash style used for drawing lines
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1 
+ */
+public int[] getLineDash() {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (data.lineDashes == null) return null;
+	int[] lineDashes = new int[data.lineDashes.length];
+	for (int i = 0; i < lineDashes.length; i++) {
+		lineDashes[i] = (int)data.lineDashes[i];
+	}
+	return lineDashes;	
+}
+
+/** 
+ * Returns the receiver's line join style, which will be one
+ * of the constants <code>SWT.JOIN_MITER</code>, <code>SWT.JOIN_ROUND</code>,
+ * or <code>SWT.JOIN_BEVEL</code>.
+ *
+ * @return the join style used for drawing lines
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1 
+ */
+public int getLineJoin() {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.lineJoin;
+}
+
+/** 
+ * Returns the receiver's line style, which will be one
+ * of the constants <code>SWT.LINE_SOLID</code>, <code>SWT.LINE_DASH</code>,
+ * <code>SWT.LINE_DOT</code>, <code>SWT.LINE_DASHDOT</code> or
+ * <code>SWT.LINE_DASHDOTDOT</code>.
+ *
+ * @return the style used for drawing lines
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getLineStyle() {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.lineStyle;
+}
+
+/** 
+ * Returns the width that will be used when drawing lines
+ * for all of the figure drawing operations (that is,
+ * <code>drawLine</code>, <code>drawRectangle</code>, 
+ * <code>drawPolyline</code>, and so forth.
+ *
+ * @return the receiver's line width 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getLineWidth() {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return (int)data.lineWidth;
+}
+
+/**
+ * Returns the receiver's style information.
+ * <p>
+ * Note that the value which is returned by this method <em>may
+ * not match</em> the value which was provided to the constructor
+ * when the receiver was created. This can occur when the underlying
+ * operating system does not support a particular combination of
+ * requested styles. 
+ * </p>
+ *
+ * @return the style bits
+ *  
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *   
+ * @since 2.1.2
+ */
+public int getStyle () {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.style;
+}
+
+/**
+ * Returns the receiver's text drawing anti-aliasing setting value,
+ * which will be one of <code>SWT.DEFAULT</code>, <code>SWT.OFF</code> or
+ * <code>SWT.ON</code>. Note that this controls anti-aliasing
+ * <em>only</em> for text drawing operations.
+ *
+ * @return the anti-aliasing setting
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #getAntialias
+ * 
+ * @since 3.1
+ */
+public int getTextAntialias() {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.textAntialias;
+}
+
+/** 
+ * Sets the parameter to the transform that is currently being
+ * used by the receiver.
+ *
+ * @param transform the destination to copy the transform into
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parameter is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see Transform
+ * 
+ * @since 3.1
+ */
+public void getTransform (Transform transform) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (transform == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (transform.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAffineTransform cmt = data.transform;
+	if (cmt != null) {
+		NSAffineTransformStruct struct = cmt.transformStruct();
+		transform.handle.setTransformStruct(struct);
+	} else {
+		transform.setElements(1, 0, 0, 1, 0, 0);
+	}
+}
+
+/** 
+ * Returns <code>true</code> if this GC is drawing in the mode
+ * where the resulting color in the destination is the
+ * <em>exclusive or</em> of the color values in the source
+ * and the destination, and <code>false</code> if it is
+ * drawing in the mode where the destination color is being
+ * replaced with the source color value.
+ *
+ * @return <code>true</code> true if the receiver is in XOR mode, and false otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public boolean getXORMode() {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.xorMode;
+}
+
+/**
+ * Returns an integer hash code for the receiver. Any two 
+ * objects that return <code>true</code> when passed to 
+ * <code>equals</code> must return the same value for this
+ * method.
+ *
+ * @return the receiver's hash
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #equals
+ */
+public int hashCode() {
+	return handle != null ? (int)/*64*/handle.id : 0;
+}
+
+void init(Drawable drawable, GCData data, int /*long*/ context) {
+	if (data.foreground != null) data.state &= ~(FOREGROUND | FOREGROUND_FILL);
+	if (data.background != null)  data.state &= ~BACKGROUND;
+	if (data.font != null) data.state &= ~FONT;
+	data.state &= ~DRAW_OFFSET;
+
+	Image image = data.image;
+	if (image != null) image.memGC = this;
+	this.drawable = drawable;
+	this.data = data;
+	handle = new NSGraphicsContext(context);
+	handle.retain();
+	handle.saveGraphicsState();
+	data.path = NSBezierPath.bezierPath();
+	data.path.setWindingRule(data.fillRule == SWT.FILL_WINDING ? OS.NSNonZeroWindingRule : OS.NSEvenOddWindingRule);
+	data.path.retain();
+}
+
+void initCGContext(int /*long*/ cgContext) {
+	int state = data.state;
+	if ((state & LINE_WIDTH) != 0) {
+		OS.CGContextSetLineWidth(cgContext, data.lineWidth == 0 ?  1 : data.lineWidth);
+		switch (data.lineStyle) {
+			case SWT.LINE_DOT:
+			case SWT.LINE_DASH:
+			case SWT.LINE_DASHDOT:
+			case SWT.LINE_DASHDOTDOT:
+				state |= LINE_STYLE;
+		}
+	}
+	if ((state & LINE_STYLE) != 0) {
+		float[] dashes = null;
+		float width = data.lineWidth;
+		switch (data.lineStyle) {
+			case SWT.LINE_SOLID: break;
+			case SWT.LINE_DASH: dashes = width != 0 ? LINE_DASH : LINE_DASH_ZERO; break;
+			case SWT.LINE_DOT: dashes = width != 0 ? LINE_DOT : LINE_DOT_ZERO; break;
+			case SWT.LINE_DASHDOT: dashes = width != 0 ? LINE_DASHDOT : LINE_DASHDOT_ZERO; break;
+			case SWT.LINE_DASHDOTDOT: dashes = width != 0 ? LINE_DASHDOTDOT : LINE_DASHDOTDOT_ZERO; break;
+			case SWT.LINE_CUSTOM: dashes = data.lineDashes; break;
+		}
+		if (dashes != null) {
+			float[] lengths = new float[dashes.length];
+			for (int i = 0; i < lengths.length; i++) {
+				lengths[i] = width == 0 || data.lineStyle == SWT.LINE_CUSTOM ? dashes[i] : dashes[i] * width;
+			}
+			OS.CGContextSetLineDash(cgContext, data.lineDashesOffset, lengths, lengths.length);
+		} else {
+			OS.CGContextSetLineDash(cgContext, 0, null, 0);
+		}
+	}
+	if ((state & LINE_MITERLIMIT) != 0) {
+		OS.CGContextSetMiterLimit(cgContext, data.lineMiterLimit);
+	}
+	if ((state & LINE_JOIN) != 0) {
+		int joinStyle = 0;
+		switch (data.lineJoin) {
+			case SWT.JOIN_MITER: joinStyle = OS.kCGLineJoinMiter; break;
+			case SWT.JOIN_ROUND: joinStyle = OS.kCGLineJoinRound; break;
+			case SWT.JOIN_BEVEL: joinStyle = OS.kCGLineJoinBevel; break;
+		}
+		OS.CGContextSetLineJoin(cgContext, joinStyle);
+	}
+	if ((state & LINE_CAP) != 0) {
+		int capStyle = 0;
+		switch (data.lineCap) {
+			case SWT.CAP_ROUND: capStyle = OS.kCGLineCapRound; break;
+			case SWT.CAP_FLAT: capStyle = OS.kCGLineCapButt; break;
+			case SWT.CAP_SQUARE: capStyle = OS.kCGLineCapSquare; break;
+		}
+		OS.CGContextSetLineCap(cgContext, capStyle);
+	}
+}
+
+/**
+ * Returns <code>true</code> if the receiver has a clipping
+ * region set into it, and <code>false</code> otherwise.
+ * If this method returns false, the receiver will draw on all
+ * available space in the destination. If it returns true, 
+ * it will draw only in the area that is covered by the region
+ * that can be accessed with <code>getClipping(region)</code>.
+ *
+ * @return <code>true</code> if the GC has a clipping region, and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public boolean isClipped() {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.clipPath != null;
+}
+
+/**
+ * Returns <code>true</code> if the GC has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the GC.
+ * When a GC has been disposed, it is an error to
+ * invoke any other method using the GC.
+ *
+ * @return <code>true</code> when the GC is disposed and <code>false</code> otherwise
+ */
+public boolean isDisposed() {
+	return handle == null;
+}
+
+boolean isIdentity(float[] transform) {
+	return transform[0] == 1 && transform[1] == 0 && transform[2] == 0
+	 	&& transform[3] == 1 && transform[4] == 0 && transform[5] == 0;
+}
+
+/**
+ * Sets the receiver to always use the operating system's advanced graphics
+ * subsystem for all graphics operations if the argument is <code>true</code>.
+ * If the argument is <code>false</code>, the advanced graphics subsystem is 
+ * no longer used, advanced graphics state is cleared and the normal graphics
+ * subsystem is used from now on.
+ * <p>
+ * Normally, the advanced graphics subsystem is invoked automatically when
+ * any one of the alpha, antialias, patterns, interpolation, paths, clipping
+ * or transformation operations in the receiver is requested.  When the receiver
+ * is switched into advanced mode, the advanced graphics subsystem performs both
+ * advanced and normal graphics operations.  Because the two subsystems are
+ * different, their output may differ.  Switching to advanced graphics before
+ * any graphics operations are performed ensures that the output is consistent.
+ * </p><p>
+ * Advanced graphics may not be installed for the operating system.  In this
+ * case, this operation does nothing.  Some operating system have only one
+ * graphics subsystem, so switching from normal to advanced graphics does
+ * nothing.  However, switching from advanced to normal graphics will always
+ * clear the advanced graphics state, even for operating systems that have
+ * only one graphics subsystem.
+ * </p>
+ *
+ * @param advanced the new advanced graphics state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #setAlpha
+ * @see #setAntialias
+ * @see #setBackgroundPattern
+ * @see #setClipping(Path)
+ * @see #setForegroundPattern
+ * @see #setLineAttributes
+ * @see #setInterpolation
+ * @see #setTextAntialias
+ * @see #setTransform
+ * @see #getAdvanced
+ * 
+ * @since 3.1
+ */
+public void setAdvanced(boolean advanced) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (!advanced) {
+		setAlpha(0xFF);
+		setAntialias(SWT.DEFAULT);
+		setBackgroundPattern(null);
+		setClipping((Rectangle)null);
+		setForegroundPattern(null);
+		setInterpolation(SWT.DEFAULT);
+		setTextAntialias(SWT.DEFAULT);
+		setTransform(null);
+	}
+}
+
+/**
+ * Sets the receiver's alpha value which must be
+ * between 0 (transparent) and 255 (opaque).
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * @param alpha the alpha value
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * 
+ * @see #getAdvanced
+ * @see #setAdvanced
+ * 
+ * @since 3.1
+ */
+public void setAlpha(int alpha) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	data.alpha = alpha & 0xFF;
+	data.state &= ~(BACKGROUND | FOREGROUND | FOREGROUND_FILL);
+	
+}
+
+/**
+ * Sets the receiver's anti-aliasing value to the parameter, 
+ * which must be one of <code>SWT.DEFAULT</code>, <code>SWT.OFF</code>
+ * or <code>SWT.ON</code>. Note that this controls anti-aliasing for all
+ * <em>non-text drawing</em> operations.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ *
+ * @param antialias the anti-aliasing setting
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter is not one of <code>SWT.DEFAULT</code>,
+ *                                 <code>SWT.OFF</code> or <code>SWT.ON</code></li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * 
+ * @see #getAdvanced
+ * @see #setAdvanced
+ * @see #setTextAntialias
+ * 
+ * @since 3.1
+ */
+public void setAntialias(int antialias) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	boolean mode = true;
+	switch (antialias) {
+		case SWT.DEFAULT:
+			/* Printer is off by default */
+			if (!handle.isDrawingToScreen()) mode = false;
+			break;
+		case SWT.OFF: mode = false; break;
+		case SWT.ON: mode = true; break;
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	data.antialias = antialias;
+	handle.setShouldAntialias(mode);
+}
+
+/**
+ * Sets the background color. The background color is used
+ * for fill operations and as the background color when text
+ * is drawn.
+ *
+ * @param color the new background color for the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the color is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the color has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setBackground(Color color) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (color == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (color.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	data.background = color.handle;
+	data.backgroundPattern = null;
+	if (data.bg != null) data.bg.release();
+	data.bg = null;
+	data.state &= ~BACKGROUND;
+}
+
+/** 
+ * Sets the background pattern. The default value is <code>null</code>.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param pattern the new background pattern
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * 
+ * @see Pattern
+ * @see #getAdvanced
+ * @see #setAdvanced
+ * 
+ * @since 3.1
+ */
+public void setBackgroundPattern(Pattern pattern) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (pattern != null && pattern.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (data.backgroundPattern == pattern) return;
+	data.backgroundPattern = pattern;
+	data.state &= ~BACKGROUND;
+}
+
+/**
+ * Sets the area of the receiver which can be changed
+ * by drawing operations to the rectangular area specified
+ * by the arguments.
+ *
+ * @param x the x coordinate of the clipping rectangle
+ * @param y the y coordinate of the clipping rectangle
+ * @param width the width of the clipping rectangle
+ * @param height the height of the clipping rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setClipping(int x, int y, int width, int height) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		if (width < 0) {
+			x = x + width;
+			width = -width;
+		}
+		if (height < 0) {
+			y = y + height;
+			height = -height;
+		}
+		NSRect rect = new NSRect();
+		rect.x = x;
+		rect.y = y;
+		rect.width = width;
+		rect.height = height;
+		NSBezierPath path = NSBezierPath.bezierPathWithRect(rect);
+		path.retain();
+		setClipping(path);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Sets the area of the receiver which can be changed
+ * by drawing operations to the path specified
+ * by the argument.  
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param path the clipping path.
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the path has been disposed</li>
+ * </ul> 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * 
+ * @see Path
+ * @see #getAdvanced
+ * @see #setAdvanced
+ * 
+ * @since 3.1
+ */
+public void setClipping(Path path) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (path != null && path.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		setClipping(new NSBezierPath(path.handle.copy().id));
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Sets the area of the receiver which can be changed
+ * by drawing operations to the rectangular area specified
+ * by the argument.  Specifying <code>null</code> for the
+ * rectangle reverts the receiver's clipping area to its
+ * original value.
+ *
+ * @param rect the clipping rectangle or <code>null</code>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setClipping(Rectangle rect) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (rect == null) {
+		setClipping((NSBezierPath)null);
+	} else {
+		setClipping(rect.x, rect.y, rect.width, rect.height);
+	}
+}
+
+/**
+ * Sets the area of the receiver which can be changed
+ * by drawing operations to the region specified
+ * by the argument.  Specifying <code>null</code> for the
+ * region reverts the receiver's clipping area to its
+ * original value.
+ *
+ * @param region the clipping region or <code>null</code>
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the region has been disposed</li>
+ * </ul> 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setClipping(Region region) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (region != null && region.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		setClipping(region != null ? region.getPath() : null);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+void setClipping(NSBezierPath path) {
+	if (data.clipPath != null) {
+		data.clipPath.release();
+		data.clipPath = null;
+	}
+	if (path != null) {
+		data.clipPath = path;
+		if (data.transform != null) {
+			data.clipPath.transformUsingAffineTransform(data.transform);
+		}
+	}
+	data.state &= ~CLIPPING;
+}
+
+/** 
+ * Sets the receiver's fill rule to the parameter, which must be one of
+ * <code>SWT.FILL_EVEN_ODD</code> or <code>SWT.FILL_WINDING</code>.
+ *
+ * @param rule the new fill rule
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the rule is not one of <code>SWT.FILL_EVEN_ODD</code>
+ *                                 or <code>SWT.FILL_WINDING</code></li>
+ * </ul> 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void setFillRule(int rule) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	switch (rule) {
+		case SWT.FILL_WINDING:
+		case SWT.FILL_EVEN_ODD: break;
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	data.fillRule = rule;
+	data.path.setWindingRule(rule == SWT.FILL_WINDING ? OS.NSNonZeroWindingRule : OS.NSEvenOddWindingRule);
+}
+
+/** 
+ * Sets the font which will be used by the receiver
+ * to draw and measure text to the argument. If the
+ * argument is null, then a default font appropriate
+ * for the platform will be used instead.
+ *
+ * @param font the new font for the receiver, or null to indicate a default font
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the font has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setFont(Font font) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (font != null && font.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	data.font = font != null ? font : data.device.systemFont;
+	data.state &= ~FONT;
+}
+
+/**
+ * Sets the foreground color. The foreground color is used
+ * for drawing operations including when text is drawn.
+ *
+ * @param color the new foreground color for the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the color is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the color has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setForeground(Color color) {	
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (color == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (color.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	data.foreground = color.handle;
+	data.foregroundPattern = null;
+	if (data.fg != null) data.fg.release();
+	data.fg = null;
+	data.state &= ~(FOREGROUND | FOREGROUND_FILL);
+}
+
+/** 
+ * Sets the foreground pattern. The default value is <code>null</code>.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * @param pattern the new foreground pattern
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * 
+ * @see Pattern
+ * @see #getAdvanced
+ * @see #setAdvanced
+ * 
+ * @since 3.1
+ */
+public void setForegroundPattern(Pattern pattern) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (pattern != null && pattern.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (data.foregroundPattern == pattern) return;
+	data.foregroundPattern = pattern;
+	data.state &= ~(FOREGROUND | FOREGROUND_FILL);
+}
+
+/** 
+ * Sets the receiver's interpolation setting to the parameter, which
+ * must be one of <code>SWT.DEFAULT</code>, <code>SWT.NONE</code>, 
+ * <code>SWT.LOW</code> or <code>SWT.HIGH</code>.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param interpolation the new interpolation setting
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the rule is not one of <code>SWT.DEFAULT</code>, 
+ *                                 <code>SWT.NONE</code>, <code>SWT.LOW</code> or <code>SWT.HIGH</code>
+ * </ul> 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * 
+ * @see #getAdvanced
+ * @see #setAdvanced
+ * 
+ * @since 3.1
+ */
+public void setInterpolation(int interpolation) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	int quality = 0;
+	switch (interpolation) {
+		case SWT.DEFAULT: quality = OS.NSImageInterpolationDefault; break;
+		case SWT.NONE: quality = OS.NSImageInterpolationNone; break;
+		case SWT.LOW: quality = OS.NSImageInterpolationLow; break;
+		case SWT.HIGH: quality = OS.NSImageInterpolationHigh; break;
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	handle.setImageInterpolation(quality);
+}
+
+/**
+ * Sets the receiver's line attributes.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * @param attributes the line attributes
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the attributes is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if any of the line attributes is not valid</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * 
+ * @see LineAttributes
+ * @see #getAdvanced
+ * @see #setAdvanced
+ * 
+ * @since 3.3
+ */
+public void setLineAttributes(LineAttributes attributes) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (attributes == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	int mask = 0;
+	float lineWidth = attributes.width;
+	if (lineWidth != data.lineWidth) {
+		mask |= LINE_WIDTH | DRAW_OFFSET;
+	}
+	int lineStyle = attributes.style;
+	if (lineStyle != data.lineStyle) {
+		mask |= LINE_STYLE;
+		switch (lineStyle) {
+			case SWT.LINE_SOLID:
+			case SWT.LINE_DASH:
+			case SWT.LINE_DOT:
+			case SWT.LINE_DASHDOT:
+			case SWT.LINE_DASHDOTDOT:
+				break;
+			case SWT.LINE_CUSTOM:
+				if (attributes.dash == null) lineStyle = SWT.LINE_SOLID;
+				break;
+			default:
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+	}
+	int join = attributes.join;
+	if (join != data.lineJoin) {
+		mask |= LINE_JOIN;
+		switch (join) {
+			case SWT.CAP_ROUND:
+			case SWT.CAP_FLAT:
+			case SWT.CAP_SQUARE:
+				break;
+			default:
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+	}
+	int cap = attributes.cap;
+	if (cap != data.lineCap) {
+		mask |= LINE_CAP;
+		switch (cap) {
+			case SWT.JOIN_MITER:
+			case SWT.JOIN_ROUND:
+			case SWT.JOIN_BEVEL:
+				break;
+			default:
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+	}
+	float[] dashes = attributes.dash;
+	float[] lineDashes = data.lineDashes;
+	if (dashes != null && dashes.length > 0) {
+		boolean changed = lineDashes == null || lineDashes.length != dashes.length;
+		for (int i = 0; i < dashes.length; i++) {
+			float dash = dashes[i];
+			if (dash <= 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			if (!changed && lineDashes[i] != dash) changed = true;
+		}
+		if (changed) {
+			float[] newDashes = new float[dashes.length];
+			System.arraycopy(dashes, 0, newDashes, 0, dashes.length);
+			dashes = newDashes;
+			mask |= LINE_STYLE;
+		} else {
+			dashes = lineDashes;
+		}
+	} else {
+		if (lineDashes != null && lineDashes.length > 0) {
+			mask |= LINE_STYLE;
+		} else {
+			dashes = lineDashes;
+		}
+	}
+	float dashOffset = attributes.dashOffset;
+	if (dashOffset != data.lineDashesOffset) {
+		mask |= LINE_STYLE;		
+	}
+	float miterLimit = attributes.miterLimit;
+	if (miterLimit != data.lineMiterLimit) {
+		mask |= LINE_MITERLIMIT;		
+	}
+	if (mask == 0) return;
+	data.lineWidth = lineWidth;
+	data.lineStyle = lineStyle;
+	data.lineCap = cap;
+	data.lineJoin = join;
+	data.lineDashes = dashes;
+	data.lineDashesOffset = dashOffset;
+	data.lineMiterLimit = miterLimit;
+	data.state &= ~mask;
+}
+
+/** 
+ * Sets the receiver's line cap style to the argument, which must be one
+ * of the constants <code>SWT.CAP_FLAT</code>, <code>SWT.CAP_ROUND</code>,
+ * or <code>SWT.CAP_SQUARE</code>.
+ *
+ * @param cap the cap style to be used for drawing lines
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the style is not valid</li>
+ * </ul> 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1 
+ */
+public void setLineCap(int cap) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (data.lineCap == cap) return;
+	switch (cap) {
+		case SWT.CAP_ROUND:
+		case SWT.CAP_FLAT:
+		case SWT.CAP_SQUARE:
+			break;
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	data.lineCap = cap;
+	data.state &= ~LINE_CAP;
+}
+
+/** 
+ * Sets the receiver's line dash style to the argument. The default
+ * value is <code>null</code>. If the argument is not <code>null</code>,
+ * the receiver's line style is set to <code>SWT.LINE_CUSTOM</code>, otherwise
+ * it is set to <code>SWT.LINE_SOLID</code>.
+ *
+ * @param dashes the dash style to be used for drawing lines
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if any of the values in the array is less than or equal 0</li>
+ * </ul> 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1 
+ */
+public void setLineDash(int[] dashes) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	float[] lineDashes = data.lineDashes;
+	if (dashes != null && dashes.length > 0) {
+		boolean changed = data.lineStyle != SWT.LINE_CUSTOM || lineDashes == null || lineDashes.length != dashes.length;
+		for (int i = 0; i < dashes.length; i++) {
+			int dash = dashes[i];
+			if (dash <= 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			if (!changed && lineDashes[i] != dash) changed = true;
+		}
+		if (!changed) return;
+		data.lineDashes = new float[dashes.length];
+		for (int i = 0; i < dashes.length; i++) {
+			data.lineDashes[i] = dashes[i];
+		}
+		data.lineStyle = SWT.LINE_CUSTOM;
+	} else {
+		if (data.lineStyle == SWT.LINE_SOLID && (lineDashes == null || lineDashes.length == 0)) return;
+		data.lineDashes = null;
+		data.lineStyle = SWT.LINE_SOLID;
+	}
+	data.state &= ~LINE_STYLE;
+}
+
+/** 
+ * Sets the receiver's line join style to the argument, which must be one
+ * of the constants <code>SWT.JOIN_MITER</code>, <code>SWT.JOIN_ROUND</code>,
+ * or <code>SWT.JOIN_BEVEL</code>.
+ *
+ * @param join the join style to be used for drawing lines
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the style is not valid</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1 
+ */
+public void setLineJoin(int join) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (data.lineJoin == join) return;
+	switch (join) {
+		case SWT.JOIN_MITER:
+		case SWT.JOIN_ROUND:
+		case SWT.JOIN_BEVEL:
+			break;
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	data.lineJoin = join;
+	data.state &= ~LINE_JOIN;
+}
+
+/** 
+ * Sets the receiver's line style to the argument, which must be one
+ * of the constants <code>SWT.LINE_SOLID</code>, <code>SWT.LINE_DASH</code>,
+ * <code>SWT.LINE_DOT</code>, <code>SWT.LINE_DASHDOT</code> or
+ * <code>SWT.LINE_DASHDOTDOT</code>.
+ *
+ * @param lineStyle the style to be used for drawing lines
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the style is not valid</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setLineStyle(int lineStyle) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (data.lineStyle == lineStyle) return;
+	switch (lineStyle) {
+		case SWT.LINE_SOLID:
+		case SWT.LINE_DASH:
+		case SWT.LINE_DOT:
+		case SWT.LINE_DASHDOT:
+		case SWT.LINE_DASHDOTDOT:
+			break;
+		case SWT.LINE_CUSTOM:
+			if (data.lineDashes == null) lineStyle = SWT.LINE_SOLID;
+			break;
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	data.lineStyle = lineStyle;
+	data.state &= ~LINE_STYLE;
+}
+
+/** 
+ * Sets the width that will be used when drawing lines
+ * for all of the figure drawing operations (that is,
+ * <code>drawLine</code>, <code>drawRectangle</code>, 
+ * <code>drawPolyline</code>, and so forth.
+ * <p>
+ * Note that line width of zero is used as a hint to
+ * indicate that the fastest possible line drawing
+ * algorithms should be used. This means that the
+ * output may be different from line width one.
+ * </p>
+ *
+ * @param lineWidth the width of a line
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setLineWidth(int lineWidth) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (data.lineWidth == lineWidth) return;
+	data.lineWidth = lineWidth;
+	data.state &= ~(LINE_WIDTH | DRAW_OFFSET);	
+}
+
+/** 
+ * If the argument is <code>true</code>, puts the receiver
+ * in a drawing mode where the resulting color in the destination
+ * is the <em>exclusive or</em> of the color values in the source
+ * and the destination, and if the argument is <code>false</code>,
+ * puts the receiver in a drawing mode where the destination color
+ * is replaced with the source color value.
+ * <p>
+ * Note that this mode in fundamentally unsupportable on certain
+ * platforms, notably Carbon (Mac OS X). Clients that want their
+ * code to run on all platforms need to avoid this method.
+ * </p>
+ *
+ * @param xor if <code>true</code>, then <em>xor</em> mode is used, otherwise <em>source copy</em> mode is used
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @deprecated this functionality is not supported on some platforms
+ */
+public void setXORMode(boolean xor) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	data.xorMode = xor;
+}
+
+/**
+ * Sets the receiver's text anti-aliasing value to the parameter, 
+ * which must be one of <code>SWT.DEFAULT</code>, <code>SWT.OFF</code>
+ * or <code>SWT.ON</code>. Note that this controls anti-aliasing only
+ * for all <em>text drawing</em> operations.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param antialias the anti-aliasing setting
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter is not one of <code>SWT.DEFAULT</code>,
+ *                                 <code>SWT.OFF</code> or <code>SWT.ON</code></li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * 
+ * @see #getAdvanced
+ * @see #setAdvanced
+ * @see #setAntialias
+ * 
+ * @since 3.1
+ */
+public void setTextAntialias(int antialias) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	switch (antialias) {
+		case SWT.DEFAULT:
+		case SWT.OFF:
+		case SWT.ON:
+			break;
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	data.textAntialias = antialias;
+}
+
+/**
+ * Sets the transform that is currently being used by the receiver. If
+ * the argument is <code>null</code>, the current transform is set to
+ * the identity transform.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param transform the transform to set
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * 
+ * @see Transform
+ * @see #getAdvanced
+ * @see #setAdvanced
+ * 
+ * @since 3.1
+ */
+public void setTransform(Transform transform) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (transform != null && transform.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (transform != null) {
+		if (data.transform != null) data.transform.release();
+		if (data.inverseTransform != null) data.inverseTransform.release();
+		data.transform = ((NSAffineTransform)new NSAffineTransform().alloc()).initWithTransform(transform.handle);
+		data.inverseTransform = ((NSAffineTransform)new NSAffineTransform().alloc()).initWithTransform(transform.handle);
+		NSAffineTransformStruct struct = data.inverseTransform.transformStruct();
+		if ((struct.m11 * struct.m22 - struct.m12 * struct.m21) != 0) {
+			data.inverseTransform.invert();
+		}
+	} else {
+		data.transform = data.inverseTransform = null;
+	}
+	data.state &= ~(TRANSFORM | DRAW_OFFSET);
+}
+
+/**
+ * Returns the extent of the given string. No tab
+ * expansion or carriage return processing will be performed.
+ * <p>
+ * The <em>extent</em> of a string is the width and height of
+ * the rectangular area it would cover if drawn in a particular
+ * font (in this case, the current font in the receiver).
+ * </p>
+ *
+ * @param string the string to measure
+ * @return a point containing the extent of the string
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Point stringExtent(String string) {
+	return textExtent(string, 0);
+}
+
+/**
+ * Returns the extent of the given string. Tab expansion and
+ * carriage return processing are performed.
+ * <p>
+ * The <em>extent</em> of a string is the width and height of
+ * the rectangular area it would cover if drawn in a particular
+ * font (in this case, the current font in the receiver).
+ * </p>
+ *
+ * @param string the string to measure
+ * @return a point containing the extent of the string
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Point textExtent(String string) {
+	return textExtent(string, SWT.DRAW_DELIMITER | SWT.DRAW_TAB);
+}
+
+/**
+ * Returns the extent of the given string. Tab expansion, line
+ * delimiter and mnemonic processing are performed according to
+ * the specified flags, which can be a combination of:
+ * <dl>
+ * <dt><b>DRAW_DELIMITER</b></dt>
+ * <dd>draw multiple lines</dd>
+ * <dt><b>DRAW_TAB</b></dt>
+ * <dd>expand tabs</dd>
+ * <dt><b>DRAW_MNEMONIC</b></dt>
+ * <dd>underline the mnemonic character</dd>
+ * <dt><b>DRAW_TRANSPARENT</b></dt>
+ * <dd>transparent background</dd>
+ * </dl>
+ * <p>
+ * The <em>extent</em> of a string is the width and height of
+ * the rectangular area it would cover if drawn in a particular
+ * font (in this case, the current font in the receiver).
+ * </p>
+ *
+ * @param string the string to measure
+ * @param flags the flags specifying how to process the text
+ * @return a point containing the extent of the string
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Point textExtent(String string, int flags) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (string == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	NSAutoreleasePool pool = checkGC(FONT);
+	try {
+		NSAttributedString str = createString(string, flags, false);
+		NSSize size = str.size();
+		str.release();
+		return new Point((int)size.width, (int)size.height);
+	} finally {
+		uncheckGC(pool);
+	}
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the receiver
+ */
+public String toString () {
+	if (isDisposed()) return "GC {*DISPOSED*}";
+	return "GC {" + handle + "}";
+}
+
+void uncheckGC(NSAutoreleasePool pool) {
+	if (data.flippedContext != null && data.restoreContext) {
+		NSGraphicsContext.static_restoreGraphicsState();
+		data.restoreContext = false;
+	}
+	NSView view = data.view;
+	if (view != null && data.paintRect == null) {
+		if (data.thread != Thread.currentThread()) flush();
+	}
+	if (pool != null) pool.release();
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/GCData.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/GCData.java
new file mode 100755
index 0000000..9e44658
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/GCData.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.graphics;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class are descriptions of GCs in terms
+ * of unallocated platform-specific data fields.
+ * <p>
+ * <b>IMPORTANT:</b> This class is <em>not</em> part of the public
+ * API for SWT. It is marked public only so that it can be shared
+ * within the packages provided by SWT. It is not available on all
+ * platforms, and should never be called from application code.
+ * </p>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ */
+public final class GCData {
+	public Device device;
+	public int style, state = -1;
+	public float /*double*/ [] foreground;
+	public float /*double*/ [] background;
+	public Pattern foregroundPattern;
+	public Pattern backgroundPattern;
+	public Font font;
+	public int alpha = 0xFF;
+	public float lineWidth;
+	public int lineStyle = SWT.LINE_SOLID;
+	public int lineCap = SWT.CAP_FLAT;
+	public int lineJoin = SWT.JOIN_MITER;
+	public float lineDashesOffset;
+	public float[] lineDashes;
+	public float lineMiterLimit = 10;
+	public boolean xorMode;
+	public int antialias = SWT.DEFAULT;
+	public int textAntialias = SWT.DEFAULT;
+	public int fillRule = SWT.FILL_EVEN_ODD;
+	public Image image;
+	
+	public NSColor fg, bg;
+	public float /*double*/ drawXOffset, drawYOffset;
+	public NSRect paintRect;
+	public NSBezierPath path;
+	public NSAffineTransform transform, inverseTransform;
+	public NSBezierPath clipPath, visiblePath;
+	public int /*long*/ visibleRgn;
+	public NSView view;
+	public NSSize size;
+	public Thread thread;
+	public NSGraphicsContext flippedContext;
+	public boolean restoreContext;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java
new file mode 100755
index 0000000..646c5de
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Image.java
@@ -0,0 +1,1192 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.graphics;
+
+ 
+import org.eclipse.swt.internal.cocoa.*;
+import org.eclipse.swt.*;
+import java.io.*;
+ 
+/**
+ * Instances of this class are graphics which have been prepared
+ * for display on a specific device. That is, they are ready
+ * to paint using methods such as <code>GC.drawImage()</code>
+ * and display on widgets with, for example, <code>Button.setImage()</code>.
+ * <p>
+ * If loaded from a file format that supports it, an
+ * <code>Image</code> may have transparency, meaning that certain
+ * pixels are specified as being transparent when drawn. Examples
+ * of file formats that support transparency are GIF and PNG.
+ * </p><p>
+ * There are two primary ways to use <code>Images</code>. 
+ * The first is to load a graphic file from disk and create an
+ * <code>Image</code> from it. This is done using an <code>Image</code>
+ * constructor, for example:
+ * <pre>
+ *    Image i = new Image(device, "C:\\graphic.bmp");
+ * </pre>
+ * A graphic file may contain a color table specifying which
+ * colors the image was intended to possess. In the above example,
+ * these colors will be mapped to the closest available color in
+ * SWT. It is possible to get more control over the mapping of
+ * colors as the image is being created, using code of the form:
+ * <pre>
+ *    ImageData data = new ImageData("C:\\graphic.bmp"); 
+ *    RGB[] rgbs = data.getRGBs(); 
+ *    // At this point, rgbs contains specifications of all
+ *    // the colors contained within this image. You may
+ *    // allocate as many of these colors as you wish by
+ *    // using the Color constructor Color(RGB), then
+ *    // create the image:
+ *    Image i = new Image(device, data);
+ * </pre>
+ * <p>
+ * Applications which require even greater control over the image
+ * loading process should use the support provided in class
+ * <code>ImageLoader</code>.
+ * </p><p>
+ * Application code must explicitly invoke the <code>Image.dispose()</code> 
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ *
+ * @see Color
+ * @see ImageData
+ * @see ImageLoader
+ * @see <a href="http://www.eclipse.org/swt/snippets/#image">Image snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Examples: GraphicsExample, ImageAnalyzer</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public final class Image extends Resource implements Drawable {
+
+	/**
+	 * specifies whether the receiver is a bitmap or an icon
+	 * (one of <code>SWT.BITMAP</code>, <code>SWT.ICON</code>)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public int type;
+	
+	/**
+	 * the handle to the OS image resource
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public NSImage handle;
+	
+	/**
+	 * specifies the transparent pixel
+	 */
+	int transparentPixel = -1;
+	
+	/**
+	 * The GC the image is currently selected in.
+	 */
+	GC memGC;
+
+	/**
+	 * The alpha data of the image.
+	 */
+	byte[] alphaData;
+	
+	/**
+	 * The global alpha value to be used for every pixel.
+	 */
+	int alpha = -1;
+	
+	/**
+	 * The width of the image.
+	 */
+	int width = -1;
+	
+	/**
+	 * The height of the image.
+	 */
+	int height = -1;
+	
+	/**
+	 * Specifies the default scanline padding.
+	 */
+	static final int DEFAULT_SCANLINE_PAD = 4;
+
+Image(Device device) {
+	super(device);
+}
+
+/**
+ * Constructs an empty instance of this class with the
+ * specified width and height. The result may be drawn upon
+ * by creating a GC and using any of its drawing operations,
+ * as shown in the following example:
+ * <pre>
+ *    Image i = new Image(device, width, height);
+ *    GC gc = new GC(i);
+ *    gc.drawRectangle(0, 0, 50, 50);
+ *    gc.dispose();
+ * </pre>
+ * <p>
+ * Note: Some platforms may have a limitation on the size
+ * of image that can be created (size depends on width, height,
+ * and depth). For example, Windows 95, 98, and ME do not allow
+ * images larger than 16M.
+ * </p>
+ *
+ * @param device the device on which to create the image
+ * @param width the width of the new image
+ * @param height the height of the new image
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if either the width or height is negative or zero</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for image creation</li>
+ * </ul>
+ */
+public Image(Device device, int width, int height) {
+	super(device);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		init(width, height);
+		init();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Constructs a new instance of this class based on the
+ * provided image, with an appearance that varies depending
+ * on the value of the flag. The possible flag values are:
+ * <dl>
+ * <dt><b>{@link SWT#IMAGE_COPY}</b></dt>
+ * <dd>the result is an identical copy of srcImage</dd>
+ * <dt><b>{@link SWT#IMAGE_DISABLE}</b></dt>
+ * <dd>the result is a copy of srcImage which has a <em>disabled</em> look</dd>
+ * <dt><b>{@link SWT#IMAGE_GRAY}</b></dt>
+ * <dd>the result is a copy of srcImage which has a <em>gray scale</em> look</dd>
+ * </dl>
+ *
+ * @param device the device on which to create the image
+ * @param srcImage the image to use as the source
+ * @param flag the style, either <code>IMAGE_COPY</code>, <code>IMAGE_DISABLE</code> or <code>IMAGE_GRAY</code>
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if srcImage is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the flag is not one of <code>IMAGE_COPY</code>, <code>IMAGE_DISABLE</code> or <code>IMAGE_GRAY</code></li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_INVALID_IMAGE - if the image is not a bitmap or an icon, or is otherwise in an invalid state</li>
+ *    <li>ERROR_UNSUPPORTED_DEPTH - if the depth of the image is not supported</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for image creation</li>
+ * </ul>
+ */
+public Image(Device device, Image srcImage, int flag) {
+	super(device);
+	if (srcImage == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (srcImage.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	switch (flag) {
+		case SWT.IMAGE_COPY:
+		case SWT.IMAGE_DISABLE:
+		case SWT.IMAGE_GRAY:
+			break;
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		device = this.device;
+		this.type = srcImage.type;
+		/* Get source image size */
+		NSSize size = srcImage.handle.size();
+		int width = (int)size.width;
+		int height = (int)size.height;
+		NSBitmapImageRep srcRep = srcImage.getRepresentation();
+		int /*long*/ bpr = srcRep.bytesPerRow();
+
+		/* Copy transparent pixel and alpha data when necessary */
+		transparentPixel = srcImage.transparentPixel;
+		alpha = srcImage.alpha;
+		if (srcImage.alphaData != null) {
+			alphaData = new byte[srcImage.alphaData.length];
+			System.arraycopy(srcImage.alphaData, 0, alphaData, 0, alphaData.length);
+		}
+
+		/* Create the image */
+		handle = (NSImage)new NSImage().alloc();
+		handle = handle.initWithSize(size);
+		NSBitmapImageRep rep = (NSBitmapImageRep)new NSBitmapImageRep().alloc();
+		rep = rep.initWithBitmapDataPlanes(0, width, height, srcRep.bitsPerSample(), srcRep.samplesPerPixel(), srcRep.samplesPerPixel() == 4, srcRep.isPlanar(), OS.NSDeviceRGBColorSpace, OS.NSAlphaFirstBitmapFormat | OS.NSAlphaNonpremultipliedBitmapFormat, srcRep.bytesPerRow(), srcRep.bitsPerPixel());
+		handle.addRepresentation(rep);
+		rep.release();
+		handle.setCacheMode(OS.NSImageCacheNever);
+
+		int /*long*/ data = rep.bitmapData();
+		OS.memmove(data, srcRep.bitmapData(), width * height * 4);
+		if (flag != SWT.IMAGE_COPY) {
+
+			/* Apply transformation */
+			switch (flag) {
+			case SWT.IMAGE_DISABLE: {
+				Color zeroColor = device.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW);
+				RGB zeroRGB = zeroColor.getRGB();
+				byte zeroRed = (byte)zeroRGB.red;
+				byte zeroGreen = (byte)zeroRGB.green;
+				byte zeroBlue = (byte)zeroRGB.blue;
+				Color oneColor = device.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
+				RGB oneRGB = oneColor.getRGB();
+				byte oneRed = (byte)oneRGB.red;
+				byte oneGreen = (byte)oneRGB.green;
+				byte oneBlue = (byte)oneRGB.blue;
+				byte[] line = new byte[(int)/*64*/bpr];
+				for (int y=0; y<height; y++) {
+					OS.memmove(line, data + (y * bpr), bpr);
+					int offset = 0;
+					for (int x=0; x<width; x++) {
+						int red = line[offset+1] & 0xFF;
+						int green = line[offset+2] & 0xFF;
+						int blue = line[offset+3] & 0xFF;
+						int intensity = red * red + green * green + blue * blue;
+						if (intensity < 98304) {
+							line[offset+1] = zeroRed;
+							line[offset+2] = zeroGreen;
+							line[offset+3] = zeroBlue;
+						} else {
+							line[offset+1] = oneRed;
+							line[offset+2] = oneGreen;
+							line[offset+3] = oneBlue;
+						}
+						offset += 4;
+					}
+					OS.memmove(data + (y * bpr), line, bpr);
+				}
+				break;
+			}
+			case SWT.IMAGE_GRAY: {			
+				byte[] line = new byte[(int)/*64*/bpr];
+				for (int y=0; y<height; y++) {
+					OS.memmove(line, data + (y * bpr), bpr);
+					int offset = 0;
+					for (int x=0; x<width; x++) {
+						int red = line[offset+1] & 0xFF;
+						int green = line[offset+2] & 0xFF;
+						int blue = line[offset+3] & 0xFF;
+						byte intensity = (byte)((red+red+green+green+green+green+green+blue) >> 3);
+						line[offset+1] = line[offset+2] = line[offset+3] = intensity;
+						offset += 4;
+					}
+					OS.memmove(data + (y * bpr), line, bpr);
+				}
+				break;
+			}
+			}
+		}
+		init();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Constructs an empty instance of this class with the
+ * width and height of the specified rectangle. The result
+ * may be drawn upon by creating a GC and using any of its
+ * drawing operations, as shown in the following example:
+ * <pre>
+ *    Image i = new Image(device, boundsRectangle);
+ *    GC gc = new GC(i);
+ *    gc.drawRectangle(0, 0, 50, 50);
+ *    gc.dispose();
+ * </pre>
+ * <p>
+ * Note: Some platforms may have a limitation on the size
+ * of image that can be created (size depends on width, height,
+ * and depth). For example, Windows 95, 98, and ME do not allow
+ * images larger than 16M.
+ * </p>
+ *
+ * @param device the device on which to create the image
+ * @param bounds a rectangle specifying the image's width and height (must not be null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the bounds rectangle is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if either the rectangle's width or height is negative</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for image creation</li>
+ * </ul>
+ */
+public Image(Device device, Rectangle bounds) {
+	super(device);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		init(bounds.width, bounds.height);
+		init();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Constructs an instance of this class from the given
+ * <code>ImageData</code>.
+ *
+ * @param device the device on which to create the image
+ * @param data the image data to create the image from (must not be null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the image data is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_UNSUPPORTED_DEPTH - if the depth of the ImageData is not supported</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for image creation</li>
+ * </ul>
+ */
+public Image(Device device, ImageData data) {
+	super(device);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		init(data);
+		init();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Constructs an instance of this class, whose type is 
+ * <code>SWT.ICON</code>, from the two given <code>ImageData</code>
+ * objects. The two images must be the same size. Pixel transparency
+ * in either image will be ignored.
+ * <p>
+ * The mask image should contain white wherever the icon is to be visible,
+ * and black wherever the icon is to be transparent. In addition,
+ * the source image should contain black wherever the icon is to be
+ * transparent.
+ * </p>
+ *
+ * @param device the device on which to create the icon
+ * @param source the color data for the icon
+ * @param mask the mask data for the icon
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if either the source or mask is null </li>
+ *    <li>ERROR_INVALID_ARGUMENT - if source and mask are different sizes</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for image creation</li>
+ * </ul>
+ */
+public Image(Device device, ImageData source, ImageData mask) {
+	super(device);
+	if (source == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (mask == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (source.width != mask.width || source.height != mask.height) {
+		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		mask = ImageData.convertMask(mask);
+		ImageData image = new ImageData(source.width, source.height, source.depth, source.palette, source.scanlinePad, source.data);
+		image.maskPad = mask.scanlinePad;
+		image.maskData = mask.data;
+		init(image);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Constructs an instance of this class by loading its representation
+ * from the specified input stream. Throws an error if an error
+ * occurs while loading the image, or if the result is an image
+ * of an unsupported type.  Application code is still responsible
+ * for closing the input stream.
+ * <p>
+ * This constructor is provided for convenience when loading a single
+ * image only. If the stream contains multiple images, only the first
+ * one will be loaded. To load multiple images, use 
+ * <code>ImageLoader.load()</code>.
+ * </p><p>
+ * This constructor may be used to load a resource as follows:
+ * </p>
+ * <pre>
+ *     static Image loadImage (Display display, Class clazz, String string) {
+ *          InputStream stream = clazz.getResourceAsStream (string);
+ *          if (stream == null) return null;
+ *          Image image = null;
+ *          try {
+ *               image = new Image (display, stream);
+ *          } catch (SWTException ex) {
+ *          } finally {
+ *               try {
+ *                    stream.close ();
+ *               } catch (IOException ex) {}
+ *          }
+ *          return image;
+ *     }
+ * </pre>
+ *
+ * @param device the device on which to create the image
+ * @param stream the input stream to load the image from
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the stream is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_IO - if an IO error occurs while reading from the stream</li>
+ *    <li>ERROR_INVALID_IMAGE - if the image stream contains invalid data </li>
+ *    <li>ERROR_UNSUPPORTED_DEPTH - if the image stream describes an image with an unsupported depth</li>
+ *    <li>ERROR_UNSUPPORTED_FORMAT - if the image stream contains an unrecognized format</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for image creation</li>
+ * </ul>
+ */
+public Image(Device device, InputStream stream) {
+	super(device);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		init(new ImageData(stream));
+		init();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Constructs an instance of this class by loading its representation
+ * from the file with the specified name. Throws an error if an error
+ * occurs while loading the image, or if the result is an image
+ * of an unsupported type.
+ * <p>
+ * This constructor is provided for convenience when loading
+ * a single image only. If the specified file contains
+ * multiple images, only the first one will be used.
+ *
+ * @param device the device on which to create the image
+ * @param filename the name of the file to load the image from
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the file name is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_IO - if an IO error occurs while reading from the file</li>
+ *    <li>ERROR_INVALID_IMAGE - if the image file contains invalid data </li>
+ *    <li>ERROR_UNSUPPORTED_DEPTH - if the image file describes an image with an unsupported depth</li>
+ *    <li>ERROR_UNSUPPORTED_FORMAT - if the image file contains an unrecognized format</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for image creation</li>
+ * </ul>
+ */
+public Image(Device device, String filename) {
+	super(device);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		if (filename == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		initNative(filename);
+		if (this.handle == null) init(new ImageData(filename));
+		init();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+void createAlpha () {
+	if (transparentPixel == -1 && alpha == -1 && alphaData == null) return;
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSBitmapImageRep imageRep = getRepresentation();
+		int /*long*/ height = imageRep.pixelsHigh();
+		int /*long*/ bpr = imageRep.bytesPerRow();
+		int /*long*/ dataSize = height * bpr;
+		byte[] srcData = new byte[(int)/*64*/dataSize];
+		OS.memmove(srcData, imageRep.bitmapData(), dataSize);
+		if (transparentPixel != -1) {
+			for (int i=0; i<dataSize; i+=4) {
+				int pixel = ((srcData[i+1] & 0xFF) << 16) | ((srcData[i+2] & 0xFF) << 8) | (srcData[i+3] & 0xFF);
+				srcData[i] = (byte)(pixel == transparentPixel ? 0 : 0xFF); 
+			}
+		} else if (alpha != -1) {
+			byte a = (byte)this.alpha;
+			for (int i=0; i<dataSize; i+=4) {
+				srcData[i] = a;				
+			}
+		} else {
+			int /*long*/ width = imageRep.pixelsWide();
+			int offset = 0, alphaOffset = 0;
+			for (int y = 0; y<height; y++) {
+				for (int x = 0; x<width; x++) {
+					srcData[offset] = alphaData[alphaOffset];
+					offset += 4;
+					alphaOffset += 1;
+				}
+			}
+		}
+
+		// Since we just calculated alpha for the image rep, tell it that it now has an alpha component.
+		imageRep.setAlpha(true);
+
+		OS.memmove(imageRep.bitmapData(), srcData, dataSize);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+void destroy() {
+	if (memGC != null) memGC.dispose();
+	handle.release();
+	handle = null;
+	memGC = null;
+}
+
+/**
+ * Compares the argument to the receiver, and returns true
+ * if they represent the <em>same</em> object using a class
+ * specific comparison.
+ *
+ * @param object the object to compare with this object
+ * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
+ *
+ * @see #hashCode
+ */
+public boolean equals (Object object) {
+	if (object == this) return true;
+	if (!(object instanceof Image)) return false;
+	Image image = (Image)object;
+	return device == image.device && handle == image.handle &&
+		transparentPixel == image.transparentPixel;
+}
+
+/**
+ * Returns the color to which to map the transparent pixel, or null if
+ * the receiver has no transparent pixel.
+ * <p>
+ * There are certain uses of Images that do not support transparency
+ * (for example, setting an image into a button or label). In these cases,
+ * it may be desired to simulate transparency by using the background
+ * color of the widget to paint the transparent pixels of the image.
+ * Use this method to check which color will be used in these cases
+ * in place of transparency. This value may be set with setBackground().
+ * <p>
+ *
+ * @return the background color of the image, or null if there is no transparency in the image
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Color getBackground() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (transparentPixel == -1) return null;
+	int red = (transparentPixel >> 16) & 0xFF;
+	int green = (transparentPixel >> 8) & 0xFF;
+	int blue = (transparentPixel >> 0) & 0xFF;
+	return Color.cocoa_new(device, new float /*double*/ []{red / 255f, green / 255f, blue / 255f, 1});
+}
+
+/**
+ * Returns the bounds of the receiver. The rectangle will always
+ * have x and y values of 0, and the width and height of the
+ * image.
+ *
+ * @return a rectangle specifying the image's bounds
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_INVALID_IMAGE - if the image is not a bitmap or an icon</li>
+ * </ul>
+ */
+public Rectangle getBounds() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		if (width != -1 && height != -1) {
+			return new Rectangle(0, 0, width, height);
+		}
+		NSSize size = handle.size();
+		return new Rectangle(0, 0, width = (int)size.width, height = (int)size.height);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns an <code>ImageData</code> based on the receiver
+ * Modifications made to this <code>ImageData</code> will not
+ * affect the Image.
+ *
+ * @return an <code>ImageData</code> containing the image's data and attributes
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_INVALID_IMAGE - if the image is not a bitmap or an icon</li>
+ * </ul>
+ *
+ * @see ImageData
+ */
+public ImageData getImageData() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSBitmapImageRep imageRep = getRepresentation();
+		int /*long*/ width = imageRep.pixelsWide();
+		int /*long*/ height = imageRep.pixelsHigh();
+		int /*long*/ bpr = imageRep.bytesPerRow();
+		int /*long*/ bpp = imageRep.bitsPerPixel();
+		int /*long*/ dataSize = height * bpr;
+
+		byte[] srcData = new byte[(int)/*64*/dataSize];
+		OS.memmove(srcData, imageRep.bitmapData(), dataSize);
+
+		PaletteData palette = new PaletteData(0xFF0000, 0xFF00, 0xFF);
+		ImageData data = new ImageData((int)/*64*/width, (int)/*64*/height, (int)/*64*/bpp, palette, 4, srcData);
+		data.bytesPerLine = (int)/*64*/bpr;
+
+		data.transparentPixel = transparentPixel;
+		if (transparentPixel == -1 && type == SWT.ICON) {
+			/* Get the icon mask data */
+			int maskPad = 2;
+			int /*long*/ maskBpl = (((width + 7) / 8) + (maskPad - 1)) / maskPad * maskPad;
+			byte[] maskData = new byte[(int)/*64*/(height * maskBpl)];
+			int offset = 0, maskOffset = 0;
+			for (int y = 0; y<height; y++) {
+				for (int x = 0; x<width; x++) {
+					if (srcData[offset] != 0) {
+						maskData[maskOffset + (x >> 3)] |= (1 << (7 - (x & 0x7)));
+					} else {
+						maskData[maskOffset + (x >> 3)] &= ~(1 << (7 - (x & 0x7)));
+					}
+					offset += 4;
+				}
+				maskOffset += maskBpl;
+			}
+			data.maskData = maskData;
+			data.maskPad = maskPad;
+		}
+		for (int i = 0; i < srcData.length; i+= 4) {
+			srcData[i] = 0;
+		}
+		data.alpha = alpha;
+		if (alpha == -1 && alphaData != null) {
+			data.alphaData = new byte[alphaData.length];
+			System.arraycopy(alphaData, 0, data.alphaData, 0, alphaData.length);
+		}
+		return data;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new image.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Image</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param device the device on which to allocate the color
+ * @param type the type of the image (<code>SWT.BITMAP</code> or <code>SWT.ICON</code>)
+ * @param handle the OS handle for the image
+ * @param data the OS data for the image
+ *
+ * @private
+ */
+public static Image cocoa_new(Device device, int type, NSImage nsImage) {
+	Image image = new Image(device);
+	image.type = type;
+	image.handle = nsImage;
+	return image;
+}
+
+NSBitmapImageRep getRepresentation () {
+	NSImageRep rep = handle.bestRepresentationForDevice(null);
+	if (!rep.isKindOfClass(OS.class_NSBitmapImageRep)) {
+		SWT.error(SWT.ERROR_UNSPECIFIED);
+	}
+	return new NSBitmapImageRep(rep);
+}
+
+/**
+ * Returns an integer hash code for the receiver. Any two 
+ * objects that return <code>true</code> when passed to 
+ * <code>equals</code> must return the same value for this
+ * method.
+ *
+ * @return the receiver's hash
+ *
+ * @see #equals
+ */
+public int hashCode () {
+	return handle != null ? (int)/*64*/handle.id : 0;
+}
+
+void init(int width, int height) {
+	if (width <= 0 || height <= 0) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	this.type = SWT.BITMAP;
+	this.width = width;
+	this.height = height;
+
+	handle = (NSImage)new NSImage().alloc();
+	NSSize size = new NSSize();
+	size.width = width;
+	size.height = height;
+	handle = handle.initWithSize(size);
+	NSBitmapImageRep rep = (NSBitmapImageRep)new NSBitmapImageRep().alloc();
+	rep = rep.initWithBitmapDataPlanes(0, width, height, 8, 3, false, false, OS.NSDeviceRGBColorSpace, OS.NSAlphaFirstBitmapFormat | OS.NSAlphaNonpremultipliedBitmapFormat, width * 4, 32);
+	OS.memset(rep.bitmapData(), 0xFF, width * height * 4);
+	handle.addRepresentation(rep);
+	rep.release();
+	handle.setCacheMode(OS.NSImageCacheNever);
+}
+
+void init(ImageData image) {
+	if (image == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	this.width = image.width;
+	this.height = image.height;
+	PaletteData palette = image.palette;
+	if (!(((image.depth == 1 || image.depth == 2 || image.depth == 4 || image.depth == 8) && !palette.isDirect) ||
+			((image.depth == 8) || (image.depth == 16 || image.depth == 24 || image.depth == 32) && palette.isDirect)))
+				SWT.error(SWT.ERROR_UNSUPPORTED_DEPTH);
+	
+	/* Create the image */
+	int dataSize = width * height * 4;
+	
+	/* Initialize data */
+	int bpr = width * 4;
+	byte[] buffer = new byte[dataSize];
+	if (palette.isDirect) {
+		ImageData.blit(ImageData.BLIT_SRC,
+			image.data, image.depth, image.bytesPerLine, image.getByteOrder(), 0, 0, width, height, palette.redMask, palette.greenMask, palette.blueMask,
+			ImageData.ALPHA_OPAQUE, null, 0, 0, 0, 
+			buffer, 32, bpr, ImageData.MSB_FIRST, 0, 0, width, height, 0xFF0000, 0xFF00, 0xFF,
+			false, false);
+	} else {
+		RGB[] rgbs = palette.getRGBs();
+		int length = rgbs.length;
+		byte[] srcReds = new byte[length];
+		byte[] srcGreens = new byte[length];
+		byte[] srcBlues = new byte[length];
+		for (int i = 0; i < rgbs.length; i++) {
+			RGB rgb = rgbs[i];
+			if (rgb == null) continue;
+			srcReds[i] = (byte)rgb.red;
+			srcGreens[i] = (byte)rgb.green;
+			srcBlues[i] = (byte)rgb.blue;
+		}
+		ImageData.blit(ImageData.BLIT_SRC,
+			image.data, image.depth, image.bytesPerLine, image.getByteOrder(), 0, 0, width, height, srcReds, srcGreens, srcBlues,
+			ImageData.ALPHA_OPAQUE, null, 0, 0, 0,
+			buffer, 32, bpr, ImageData.MSB_FIRST, 0, 0, width, height, 0xFF0000, 0xFF00, 0xFF,
+			false, false);
+	}
+	
+	/* Initialize transparency */
+	int transparency = image.getTransparencyType();
+	boolean hasAlpha = transparency != SWT.TRANSPARENCY_NONE;
+	if (transparency == SWT.TRANSPARENCY_MASK || image.transparentPixel != -1) {
+		this.type = image.transparentPixel != -1 ? SWT.BITMAP : SWT.ICON;
+		if (image.transparentPixel != -1) {
+			int transRed = 0, transGreen = 0, transBlue = 0;
+			if (palette.isDirect) {
+				RGB rgb = palette.getRGB(image.transparentPixel);
+				transRed = rgb.red;
+				transGreen = rgb.green;
+				transBlue = rgb.blue;
+			} else {
+				RGB[] rgbs = palette.getRGBs();
+				if (image.transparentPixel < rgbs.length) {
+					RGB rgb = rgbs[image.transparentPixel];
+					transRed = rgb.red;
+					transGreen = rgb.green;
+					transBlue = rgb.blue;				
+				}
+			}
+			transparentPixel = transRed << 16 | transGreen << 8 | transBlue;
+		}
+		ImageData maskImage = image.getTransparencyMask();
+		byte[] maskData = maskImage.data;
+		int maskBpl = maskImage.bytesPerLine;
+		int offset = 0, maskOffset = 0;
+		for (int y = 0; y<height; y++) {
+			for (int x = 0; x<width; x++) {
+				buffer[offset] = ((maskData[maskOffset + (x >> 3)]) & (1 << (7 - (x & 0x7)))) != 0 ? (byte)0xff : 0;
+				offset += 4;
+			}
+			maskOffset += maskBpl;
+		}
+	} else {
+		this.type = SWT.BITMAP;
+		if (image.alpha != -1) {
+			hasAlpha = true;
+			this.alpha = image.alpha;
+			byte a = (byte)this.alpha;
+			for (int dataIndex=0; dataIndex<buffer.length; dataIndex+=4) {
+				buffer[dataIndex] = a;				
+			}
+		} else if (image.alphaData != null) {
+			hasAlpha = true;
+			this.alphaData = new byte[image.alphaData.length];
+			System.arraycopy(image.alphaData, 0, this.alphaData, 0, alphaData.length);
+			int offset = 0, alphaOffset = 0;
+			for (int y = 0; y<height; y++) {
+				for (int x = 0; x<width; x++) {
+					buffer[offset] = alphaData[alphaOffset];
+					offset += 4;
+					alphaOffset += 1;
+				}
+			}
+		}
+	}
+	
+	if (handle != null) handle.release();
+	
+	handle = (NSImage)new NSImage().alloc();
+	NSSize size = new NSSize();
+	size.width = width;
+	size.height = height;
+	handle = handle.initWithSize(size);
+	NSBitmapImageRep rep = (NSBitmapImageRep)new NSBitmapImageRep().alloc();
+	rep = rep.initWithBitmapDataPlanes(0, width, height, 8, hasAlpha ? 4 : 3, hasAlpha, false, OS.NSDeviceRGBColorSpace, OS.NSAlphaFirstBitmapFormat | OS.NSAlphaNonpremultipliedBitmapFormat, bpr, 32);
+	OS.memmove(rep.bitmapData(), buffer, dataSize);	
+	handle.addRepresentation(rep);
+	rep.release();
+	handle.setCacheMode(OS.NSImageCacheNever);
+}
+
+void initNative(String filename) {
+	NSAutoreleasePool pool = null;
+	NSImage nativeImage = null;
+	
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		nativeImage = new NSImage();
+		nativeImage.alloc();
+		
+		// initByReferencingFile returns null if the file can't be found or is
+		// not an image.
+		nativeImage = nativeImage.initWithContentsOfFile(NSString.stringWith(filename));
+		if (nativeImage == null) {
+			// In order to get the same kind of exception, let the file format try to load and throw
+			// the appropriate exception. It is possible file format supports some image formats
+			// that is not natively supported as well.
+			return;
+		}
+		
+		NSImageRep nativeRep = nativeImage.bestRepresentationForDevice(null);
+		if (!nativeRep.isKindOfClass(OS.class_NSBitmapImageRep)) {
+			return;
+		}
+
+		width = (int)/*64*/nativeRep.pixelsWide();
+		height = (int)/*64*/nativeRep.pixelsHigh();
+		
+		boolean hasAlpha = nativeRep.hasAlpha();
+		int bpr = width * 4;
+		handle = (NSImage)new NSImage().alloc();
+		NSSize size = new NSSize();
+		size.width = width;
+		size.height = height;
+		handle = handle.initWithSize(size);
+		NSBitmapImageRep rep = (NSBitmapImageRep)new NSBitmapImageRep().alloc();
+		rep = rep.initWithBitmapDataPlanes(0, width, height, 8, hasAlpha ? 4 : 3, hasAlpha, false, OS.NSDeviceRGBColorSpace, OS.NSAlphaFirstBitmapFormat | OS.NSAlphaNonpremultipliedBitmapFormat, bpr, 32);
+		handle.addRepresentation(rep);
+		rep.release();
+		handle.setCacheMode(OS.NSImageCacheNever);
+		NSRect rect = new NSRect();
+		rect.width = width;
+		rect.height = height;
+
+		/* Compute the pixels */
+		int /*long*/ colorspace = OS.CGColorSpaceCreateDeviceRGB();
+		int /*long*/ ctx = OS.CGBitmapContextCreate(rep.bitmapData(), width, height, 8, bpr, colorspace, OS.kCGImageAlphaNoneSkipFirst);
+		OS.CGColorSpaceRelease(colorspace);
+		NSGraphicsContext.static_saveGraphicsState();
+		NSGraphicsContext.setCurrentContext(NSGraphicsContext.graphicsContextWithGraphicsPort(ctx, false));
+		if (hasAlpha) OS.objc_msgSend(nativeRep.id, OS.sel_setAlpha_, 0);
+		nativeRep.drawInRect(rect);
+		if (hasAlpha) OS.objc_msgSend(nativeRep.id, OS.sel_setAlpha_, 1);
+		NSGraphicsContext.static_restoreGraphicsState();
+		OS.CGContextRelease(ctx);
+		
+		if (hasAlpha) {
+			/* Compute the alpha values */
+			int /*long*/ bitmapBytesPerRow = width;
+			int /*long*/ bitmapByteCount = bitmapBytesPerRow * height;
+			int /*long*/ alphaBitmapData = OS.malloc(bitmapByteCount);
+			int /*long*/ alphaBitmapCtx = OS.CGBitmapContextCreate(alphaBitmapData, width, height, 8, bitmapBytesPerRow, 0, OS.kCGImageAlphaOnly);
+			NSGraphicsContext.static_saveGraphicsState();
+			NSGraphicsContext.setCurrentContext(NSGraphicsContext.graphicsContextWithGraphicsPort(alphaBitmapCtx, false));
+			nativeRep.drawInRect(rect);
+			NSGraphicsContext.static_restoreGraphicsState();
+			byte[] alphaData = new byte[(int)/*64*/bitmapByteCount];
+			OS.memmove(alphaData, alphaBitmapData, bitmapByteCount);
+			OS.free(alphaBitmapData);
+			OS.CGContextRelease(alphaBitmapCtx);
+			
+			/* Merge the alpha values with the pixels */
+			byte[] srcData = new byte[height * bpr];
+			OS.memmove(srcData, rep.bitmapData(), srcData.length);
+			for (int a = 0, p = 0; a < alphaData.length; a++, p += 4) {
+				srcData[p] = alphaData[a];
+			}
+			OS.memmove(rep.bitmapData(), srcData, srcData.length);
+			
+			// If the alpha has only 0 or 255 (-1) for alpha values, compute the transparent pixel color instead
+			// of a continuous alpha range.
+			int transparentOffset = -1, i = 0;
+			for (i = 0; i < alphaData.length; i++) {
+				int alpha = alphaData[i];
+				if (transparentOffset == -1 && alpha == 0) transparentOffset = i;
+				if (!(alpha == 0 || alpha == -1)) break;
+			}
+			this.alpha = -1;
+			if (i == alphaData.length && transparentOffset != -1) {
+				NSColor color = rep.colorAtX(transparentOffset % width, transparentOffset / width);
+				int red = (int) (color.redComponent() * 255);
+				int green = (int) (color.greenComponent() * 255);
+				int blue = (int) (color.blueComponent() * 255);
+				this.transparentPixel = (red << 16) + (green << 8) + blue;
+			} else {
+				this.alphaData = alphaData;
+			}
+		}
+		
+		// For compatibility, images created from .ico files are treated as SWT.ICON format, even though
+		// they are no different than other bitmaps in Cocoa.
+		if (filename.toLowerCase().endsWith(".ico")) {
+			this.type = SWT.ICON;
+		} else {
+			this.type = SWT.BITMAP;
+		}
+	} finally {
+		if (nativeImage != null) nativeImage.release();
+		if (pool != null) pool.release();
+	}
+
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new GC handle.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Image</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param data the platform specific GC data 
+ * @return the platform specific GC handle
+ */
+public int /*long*/ internal_new_GC (GCData data) {
+	if (handle == null) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (type != SWT.BITMAP || memGC != null) {
+		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSBitmapImageRep imageRep = getRepresentation();
+
+		// Can't perform transforms on image reps with alpha.
+		imageRep.setAlpha(false);
+		
+		NSGraphicsContext context = NSGraphicsContext.graphicsContextWithBitmapImageRep(imageRep);
+		NSGraphicsContext flippedContext = NSGraphicsContext.graphicsContextWithGraphicsPort(context.graphicsPort(), true);
+		context = flippedContext;
+		context.retain();
+		if (data != null) data.flippedContext = flippedContext;
+		NSGraphicsContext.static_saveGraphicsState();
+		NSGraphicsContext.setCurrentContext(context);
+		NSAffineTransform transform = NSAffineTransform.transform();
+		NSSize size = handle.size();
+		transform.translateXBy(0, size.height);
+		transform.scaleXBy(1, -1);
+		transform.set();
+		NSGraphicsContext.static_restoreGraphicsState();
+		if (data != null) {
+			int mask = SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT;
+			if ((data.style & mask) == 0) {
+				data.style |= SWT.LEFT_TO_RIGHT;
+			}
+			data.device = device;
+			data.background = device.COLOR_WHITE.handle;
+			data.foreground = device.COLOR_BLACK.handle;
+			data.font = device.systemFont;
+			data.image = this;
+		}
+		return context.id;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**	 
+ * Invokes platform specific functionality to dispose a GC handle.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Image</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param hDC the platform specific GC handle
+ * @param data the platform specific GC data 
+ */
+public void internal_dispose_GC (int /*long*/ context, GCData data) {
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		if (context != 0) {
+			NSGraphicsContext contextObj = new NSGraphicsContext(context);
+			contextObj.release();
+		}
+//		handle.setCacheMode(OS.NSImageCacheDefault);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns <code>true</code> if the image has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the image.
+ * When an image has been disposed, it is an error to
+ * invoke any other method using the image.
+ *
+ * @return <code>true</code> when the image is disposed and <code>false</code> otherwise
+ */
+public boolean isDisposed() {
+	return handle == null;
+}
+
+/**
+ * Sets the color to which to map the transparent pixel.
+ * <p>
+ * There are certain uses of <code>Images</code> that do not support
+ * transparency (for example, setting an image into a button or label).
+ * In these cases, it may be desired to simulate transparency by using
+ * the background color of the widget to paint the transparent pixels
+ * of the image. This method specifies the color that will be used in
+ * these cases. For example:
+ * <pre>
+ *    Button b = new Button();
+ *    image.setBackground(b.getBackground());
+ *    b.setImage(image);
+ * </pre>
+ * </p><p>
+ * The image may be modified by this operation (in effect, the
+ * transparent regions may be filled with the supplied color).  Hence
+ * this operation is not reversible and it is not legal to call
+ * this function twice or with a null argument.
+ * </p><p>
+ * This method has no effect if the receiver does not have a transparent
+ * pixel value.
+ * </p>
+ *
+ * @param color the color to use when a transparent pixel is specified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the color is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the color has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setBackground(Color color) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (color == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (color.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (transparentPixel == -1) return;
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		byte red = (byte)((transparentPixel >> 16) & 0xFF);
+		byte green = (byte)((transparentPixel >> 8) & 0xFF);
+		byte blue = (byte)((transparentPixel >> 0) & 0xFF);
+		byte newRed = (byte)((int)(color.handle[0] * 255) & 0xFF);
+		byte newGreen = (byte)((int)(color.handle[1] * 255) & 0xFF);
+		byte newBlue = (byte)((int)(color.handle[2] * 255) & 0xFF);
+		NSBitmapImageRep imageRep = getRepresentation();
+		int /*long*/ bpr = imageRep.bytesPerRow();
+		int /*long*/ data = imageRep.bitmapData();
+		byte[] line = new byte[(int)bpr];
+		for (int i = 0, offset = 0; i < height; i++, offset += bpr) {
+			OS.memmove(line, data + offset, bpr);
+			for (int j = 0; j  < line.length; j += 4) {
+				if (line[j+ 1] == red && line[j + 2] == green && line[j + 3] == blue) {
+					line[j + 1] = newRed;
+					line[j + 2] = newGreen;
+					line[j + 3] = newBlue;
+				}
+			}
+			OS.memmove(data + offset, line, bpr);
+		}
+		transparentPixel = (newRed & 0xFF) << 16 | (newGreen & 0xFF) << 8 | (newBlue & 0xFF);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the receiver
+ */
+public String toString () {
+	if (isDisposed()) return "Image {*DISPOSED*}";
+	return "Image {" + handle + "}";
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Path.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Path.java
new file mode 100755
index 0000000..7ab8a8b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Path.java
@@ -0,0 +1,759 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.graphics;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class represent paths through the two-dimensional
+ * coordinate system. Paths do not have to be continuous, and can be
+ * described using lines, rectangles, arcs, cubic or quadratic bezier curves,
+ * glyphs, or other paths.
+ * <p>
+ * Application code must explicitly invoke the <code>Path.dispose()</code> 
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ * <p>
+ * This class requires the operating system's advanced graphics subsystem
+ * which may not be available on some platforms.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#path">Path, Pattern snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: GraphicsExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.1
+ */
+public class Path extends Resource {
+	
+	/**
+	 * the OS resource for the Path
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public NSBezierPath handle;
+
+/**
+ * Constructs a new empty Path.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param device the device on which to allocate the path
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the device is null and there is no current device</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle for the path could not be obtained</li>
+ * </ul>
+ * 
+ * @see #dispose()
+ */
+public Path (Device device) {
+	super(device);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		handle = NSBezierPath.bezierPath();
+		if (handle == null) SWT.error(SWT.ERROR_NO_HANDLES);
+		handle.retain();
+		handle.moveToPoint(new NSPoint());
+		init();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Constructs a new Path that is a copy of <code>path</code>. If
+ * <code>flatness</code> is less than or equal to zero, an unflatten
+ * copy of the path is created. Otherwise, it specifies the maximum
+ * error between the path and its flatten copy. Smaller numbers give
+ * better approximation.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param device the device on which to allocate the path
+ * @param path the path to make a copy
+ * @param flatness the flatness value
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the path is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the path has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle for the path could not be obtained</li>
+ * </ul>
+ * 
+ * @see #dispose()
+ * @since 3.4
+ */
+public Path (Device device, Path path, float flatness) {
+	super(device);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		if (path == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		if (path.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		flatness = Math.max(0, flatness);
+		if (flatness == 0) {
+			handle = new NSBezierPath(path.handle.copy().id);
+		} else {
+			float /*double*/ defaultFlatness = NSBezierPath.defaultFlatness();
+			NSBezierPath.setDefaultFlatness(flatness);
+			handle = path.handle.bezierPathByFlatteningPath();
+			handle.retain();
+			NSBezierPath.setDefaultFlatness(defaultFlatness);		
+		}
+		if (handle == null) SWT.error(SWT.ERROR_NO_HANDLES);
+		init();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Constructs a new Path with the specifed PathData.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param device the device on which to allocate the path
+ * @param data the data for the path
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the data is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle for the path could not be obtained</li>
+ * </ul>
+ * 
+ * @see #dispose()
+ * @since 3.4
+ */
+public Path (Device device, PathData data) {
+	this(device);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		init(data);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Adds to the receiver a circular or elliptical arc that lies within
+ * the specified rectangular area.
+ * <p>
+ * The resulting arc begins at <code>startAngle</code> and extends  
+ * for <code>arcAngle</code> degrees.
+ * Angles are interpreted such that 0 degrees is at the 3 o'clock
+ * position. A positive value indicates a counter-clockwise rotation
+ * while a negative value indicates a clockwise rotation.
+ * </p><p>
+ * The center of the arc is the center of the rectangle whose origin 
+ * is (<code>x</code>, <code>y</code>) and whose size is specified by the 
+ * <code>width</code> and <code>height</code> arguments. 
+ * </p><p>
+ * The resulting arc covers an area <code>width + 1</code> pixels wide
+ * by <code>height + 1</code> pixels tall.
+ * </p>
+ *
+ * @param x the x coordinate of the upper-left corner of the arc
+ * @param y the y coordinate of the upper-left corner of the arc
+ * @param width the width of the arc
+ * @param height the height of the arc
+ * @param startAngle the beginning angle
+ * @param arcAngle the angular extent of the arc, relative to the start angle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void addArc(float x, float y, float width, float height, float startAngle, float arcAngle) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSAffineTransform transform = NSAffineTransform.transform();
+		transform.translateXBy(x + width / 2f, y + height / 2f);
+		transform.scaleXBy(width / 2f, height / 2f);
+		NSBezierPath path = NSBezierPath.bezierPath();
+		NSPoint center = new NSPoint();
+		float sAngle = -startAngle;
+		float eAngle = -(startAngle + arcAngle);
+		path.appendBezierPathWithArcWithCenter(center, 1, sAngle,  eAngle, arcAngle>0);
+		path.transformUsingAffineTransform(transform);
+		handle.appendBezierPath(path);
+		if (Math.abs(arcAngle) >= 360) handle.closePath();
+	} finally { 
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Adds to the receiver the path described by the parameter.
+ *
+ * @param path the path to add to the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parameter is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void addPath(Path path) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (path == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (path.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		handle.appendBezierPath(path.handle);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Adds to the receiver the rectangle specified by x, y, width and height.
+ *
+ * @param x the x coordinate of the rectangle to add
+ * @param y the y coordinate of the rectangle to add
+ * @param width the width of the rectangle to add
+ * @param height the height of the rectangle to add
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void addRectangle(float x, float y, float width, float height) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSRect rect = new NSRect();
+	rect.x = x;
+	rect.y = y;
+	rect.width = width;
+	rect.height = height;
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		handle.appendBezierPathWithRect(rect);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Adds to the receiver the pattern of glyphs generated by drawing
+ * the given string using the given font starting at the point (x, y).
+ *
+ * @param string the text to use
+ * @param x the x coordinate of the starting point
+ * @param y the y coordinate of the starting point
+ * @param font the font to use
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the font is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the font has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void addString(String string, float x, float y, Font font) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (font == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (font.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSString str = NSString.stringWith(string);
+		NSTextStorage textStorage = (NSTextStorage)new NSTextStorage().alloc().init();
+		NSLayoutManager layoutManager = (NSLayoutManager)new NSLayoutManager().alloc().init();
+		NSTextContainer textContainer = (NSTextContainer)new NSTextContainer().alloc();
+		NSSize size = new NSSize();
+		size.width = Float.MAX_VALUE;
+		size.height = Float.MAX_VALUE;
+		textContainer.initWithContainerSize(size);
+		textStorage.addLayoutManager(layoutManager);
+		layoutManager.addTextContainer(textContainer);
+		NSRange range = new NSRange();
+		range.length = str.length();
+		/*
+		* Feature in Cocoa. Adding attributes directly to a NSTextStorage causes
+		* output to the console and eventually a segmentation fault when printing 
+		* on a thread other than the main thread. The fix is to add attributes to
+		* a separate NSMutableAttributedString and add it to text storage when done.
+		*/
+		NSMutableAttributedString attrStr = (NSMutableAttributedString)new NSMutableAttributedString().alloc();
+		attrStr.id = attrStr.initWithString(str).id;
+		attrStr.beginEditing();
+		attrStr.addAttribute(OS.NSFontAttributeName, font.handle, range);
+		font.addTraits(attrStr, range);
+		attrStr.endEditing();
+		textStorage.setAttributedString(attrStr);
+		attrStr.release();
+		range = layoutManager.glyphRangeForTextContainer(textContainer);
+		if (range.length != 0) {
+			int /*long*/ glyphs = OS.malloc(4 * range.length * 2);
+			layoutManager.getGlyphs(glyphs, range);
+			NSBezierPath path = NSBezierPath.bezierPath();
+			NSPoint point = new NSPoint();
+			path.moveToPoint(point);
+			path.appendBezierPathWithGlyphs(glyphs, range.length, font.handle);
+			NSAffineTransform transform = NSAffineTransform.transform();
+			transform.scaleXBy(1, -1);
+			float /*double*/ baseline = layoutManager.defaultBaselineOffsetForFont(font.handle);
+			transform.translateXBy(x, -(y + baseline));
+			path.transformUsingAffineTransform(transform);
+			OS.free(glyphs);
+			handle.appendBezierPath(path);
+		}
+		textContainer.release();
+		layoutManager.release();
+		textStorage.release();
+	} finally  {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Closes the current sub path by adding to the receiver a line
+ * from the current point of the path back to the starting point
+ * of the sub path.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void close() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		handle.closePath();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns <code>true</code> if the specified point is contained by
+ * the receiver and false otherwise.
+ * <p>
+ * If outline is <code>true</code>, the point (x, y) checked for containment in
+ * the receiver's outline. If outline is <code>false</code>, the point is
+ * checked to see if it is contained within the bounds of the (closed) area
+ * covered by the receiver.
+ *
+ * @param x the x coordinate of the point to test for containment
+ * @param y the y coordinate of the point to test for containment
+ * @param gc the GC to use when testing for containment
+ * @param outline controls whether to check the outline or contained area of the path
+ * @return <code>true</code> if the path contains the point and <code>false</code> otherwise
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the gc is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the gc has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public boolean contains(float x, float y, GC gc, boolean outline) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		//TODO - see windows
+		if (outline) {
+			int /*long*/ pixel = OS.malloc(4);
+			if (pixel == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+			int[] buffer = new int[]{0xFFFFFFFF};
+			OS.memmove(pixel, buffer, 4);
+			int /*long*/ colorspace = OS.CGColorSpaceCreateDeviceRGB();
+			int /*long*/ context = OS.CGBitmapContextCreate(pixel, 1, 1, 8, 4, colorspace, OS.kCGImageAlphaNoneSkipFirst);
+			OS.CGColorSpaceRelease(colorspace);
+			if (context == 0) {
+				OS.free(pixel);
+				SWT.error(SWT.ERROR_NO_HANDLES);
+			}
+			GCData data = gc.data;
+			int capStyle = 0;
+			switch (data.lineCap) {
+				case SWT.CAP_ROUND: capStyle = OS.kCGLineCapRound; break;
+				case SWT.CAP_FLAT: capStyle = OS.kCGLineCapButt; break;
+				case SWT.CAP_SQUARE: capStyle = OS.kCGLineCapSquare; break;
+			}
+			OS.CGContextSetLineCap(context, capStyle);
+			int joinStyle = 0;
+			switch (data.lineJoin) {
+				case SWT.JOIN_MITER: joinStyle = OS.kCGLineJoinMiter; break;
+				case SWT.JOIN_ROUND: joinStyle = OS.kCGLineJoinRound; break;
+				case SWT.JOIN_BEVEL: joinStyle = OS.kCGLineJoinBevel; break;
+			}
+			OS.CGContextSetLineJoin(context, joinStyle);
+			OS.CGContextSetLineWidth(context, data.lineWidth);
+			OS.CGContextTranslateCTM(context, -x + 0.5f, -y + 0.5f);
+			int /*long*/ path = GC.createCGPathRef(handle);
+			OS.CGContextAddPath(context, path);
+			OS.CGPathRelease(path);
+			OS.CGContextStrokePath(context);
+			OS.CGContextRelease(context);
+			OS.memmove(buffer, pixel, 4);
+			OS.free(pixel);	
+			return buffer[0] != 0xFFFFFFFF;			
+		} else {
+			NSPoint point = new NSPoint();
+			point.x = x;
+			point.y = y;
+			return handle.containsPoint(point);
+		}
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Adds to the receiver a cubic bezier curve based on the parameters.
+ *
+ * @param cx1 the x coordinate of the first control point of the spline
+ * @param cy1 the y coordinate of the first control of the spline
+ * @param cx2 the x coordinate of the second control of the spline
+ * @param cy2 the y coordinate of the second control of the spline
+ * @param x the x coordinate of the end point of the spline
+ * @param y the y coordinate of the end point of the spline
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void cubicTo(float cx1, float cy1, float cx2, float cy2, float x, float y) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSPoint pt = new NSPoint();
+		pt.x = x;
+		pt.y = y;
+		NSPoint ct1 = new NSPoint();
+		ct1.x = cx1;
+		ct1.y = cy1;
+		NSPoint ct2 = new NSPoint();
+		ct2.x = cx2;
+		ct2.y = cy2;
+		handle.curveToPoint(pt, ct1, ct2);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+void destroy() {
+	handle.release();
+	handle = null;
+}
+
+/**
+ * Replaces the first four elements in the parameter with values that
+ * describe the smallest rectangle that will completely contain the
+ * receiver (i.e. the bounding box).
+ *
+ * @param bounds the array to hold the result
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parameter is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter is too small to hold the bounding box</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void getBounds(float[] bounds) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds.length < 4) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSRect rect = handle.controlPointBounds();
+		bounds[0] = (float)/*64*/rect.x;
+		bounds[1] = (float)/*64*/rect.y;
+		bounds[2] = (float)/*64*/rect.width;
+		bounds[3] = (float)/*64*/rect.height;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Replaces the first two elements in the parameter with values that
+ * describe the current point of the path.
+ *
+ * @param point the array to hold the result
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parameter is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter is too small to hold the end point</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void getCurrentPoint(float[] point) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (point == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (point.length < 2) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSPoint pt = handle.currentPoint();
+		point[0] = (float)/*64*/pt.x;
+		point[1] = (float)/*64*/pt.y;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns a device independent representation of the receiver.
+ * 
+ * @return the PathData for the receiver
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see PathData
+ */
+public PathData getPathData() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		int count = (int)/*64*/handle.elementCount();
+		int pointCount = 0, typeCount = 0;
+		byte[] types = new byte[count];
+		float[] pointArray = new float[count * 6];
+		int /*long*/ points = OS.malloc(3 * NSPoint.sizeof);
+		if (points == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+		NSPoint pt = new NSPoint();
+		for (int i = 0; i < count; i++) {
+			int element = (int)/*64*/handle.elementAtIndex(i, points);
+			switch (element) {
+				case OS.NSMoveToBezierPathElement:
+					types[typeCount++] = SWT.PATH_MOVE_TO;
+					OS.memmove(pt, points, NSPoint.sizeof);
+					pointArray[pointCount++] = (int)pt.x;
+					pointArray[pointCount++] = (int)pt.y;
+					break;
+				case OS.NSLineToBezierPathElement:
+					types[typeCount++] = SWT.PATH_LINE_TO;
+					OS.memmove(pt, points, NSPoint.sizeof);
+					pointArray[pointCount++] = (int)pt.x;
+					pointArray[pointCount++] = (int)pt.y;
+					break;
+				case OS.NSCurveToBezierPathElement:
+					types[typeCount++] = SWT.PATH_CUBIC_TO;
+					OS.memmove(pt, points, NSPoint.sizeof);
+					pointArray[pointCount++] = (int)pt.x;
+					pointArray[pointCount++] = (int)pt.y;
+					OS.memmove(pt, points + NSPoint.sizeof, NSPoint.sizeof);
+					pointArray[pointCount++] = (int)pt.x;
+					pointArray[pointCount++] = (int)pt.y;
+					OS.memmove(pt, points + NSPoint.sizeof + NSPoint.sizeof, NSPoint.sizeof);
+					pointArray[pointCount++] = (int)pt.x;
+					pointArray[pointCount++] = (int)pt.y;
+					break;
+				case OS.NSClosePathBezierPathElement:
+					types[typeCount++] = SWT.PATH_CLOSE;
+					break;
+			}
+		}
+		OS.free(points);
+		if (pointCount != pointArray.length) {
+			float[] temp = new float[pointCount];
+			System.arraycopy(pointArray, 0, temp, 0, pointCount);
+			pointArray = temp;
+		}
+		PathData data = new PathData();
+		data.types = types;
+		data.points = pointArray;
+		return data;
+	} finally {
+		if (pool != null)  pool.release();
+	}
+}
+
+void init(PathData data) {
+	byte[] types = data.types;
+	float[] points = data.points;
+	for (int i = 0, j = 0; i < types.length; i++) {
+		switch (types[i]) {
+			case SWT.PATH_MOVE_TO:
+				moveTo(points[j++], points[j++]);
+				break;
+			case SWT.PATH_LINE_TO:
+				lineTo(points[j++], points[j++]);
+				break;
+			case SWT.PATH_CUBIC_TO:
+				cubicTo(points[j++], points[j++], points[j++], points[j++], points[j++], points[j++]);
+				break;
+			case SWT.PATH_QUAD_TO:
+				quadTo(points[j++], points[j++], points[j++], points[j++]);
+				break;
+			case SWT.PATH_CLOSE:
+				close();
+				break;
+			default:
+				dispose();
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+	}
+}
+
+/**
+ * Returns <code>true</code> if the Path has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the Path.
+ * When a Path has been disposed, it is an error to
+ * invoke any other method using the Path.
+ *
+ * @return <code>true</code> when the Path is disposed, and <code>false</code> otherwise
+ */
+public boolean isDisposed() {
+	return handle == null;
+}
+
+/**
+ * Adds to the receiver a line from the current point to
+ * the point specified by (x, y).
+ *
+ * @param x the x coordinate of the end of the line to add
+ * @param y the y coordinate of the end of the line to add
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void lineTo(float x, float y) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSPoint pt = new NSPoint();
+		pt.x = x;
+		pt.y = y;
+		handle.lineToPoint(pt);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Sets the current point of the receiver to the point
+ * specified by (x, y). Note that this starts a new
+ * sub path.
+ *
+ * @param x the x coordinate of the new end point
+ * @param y the y coordinate of the new end point
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void moveTo(float x, float y) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSPoint pt = new NSPoint();
+		pt.x = x;
+		pt.y = y;
+		handle.moveToPoint(pt);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Adds to the receiver a quadratic curve based on the parameters.
+ *
+ * @param cx the x coordinate of the control point of the spline
+ * @param cy the y coordinate of the control point of the spline
+ * @param x the x coordinate of the end point of the spline
+ * @param y the y coordinate of the end point of the spline
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void quadTo(float cx, float cy, float x, float y) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSPoint pt = new NSPoint();
+		pt.x = x;
+		pt.y = y;
+		NSPoint ct = new NSPoint();
+		ct.x = cx;
+		ct.y = cy;
+		handle.curveToPoint(pt, ct, ct);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the receiver
+ */
+public String toString () {
+	if (isDisposed()) return "Path {*DISPOSED*}";
+	return "Path {" + handle + "}";
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Pattern.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Pattern.java
new file mode 100755
index 0000000..1670e9a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Pattern.java
@@ -0,0 +1,217 @@
+/*******************************************************************************
+ * 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.graphics;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class represent patterns to use while drawing. Patterns
+ * can be specified either as bitmaps or gradients.
+ * <p>
+ * Application code must explicitly invoke the <code>Pattern.dispose()</code> 
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ * <p>
+ * This class requires the operating system's advanced graphics subsystem
+ * which may not be available on some platforms.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#path">Path, Pattern snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: GraphicsExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ *
+ * @since 3.1
+ */
+public class Pattern extends Resource {
+	NSColor color;
+	NSGradient gradient;
+	NSPoint pt1, pt2;
+	Image image;
+	float /*double*/ [] color1, color2;
+	int alpha1, alpha2;
+
+/**
+ * Constructs a new Pattern given an image. Drawing with the resulting
+ * pattern will cause the image to be tiled over the resulting area.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param device the device on which to allocate the pattern
+ * @param image the image that the pattern will draw
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the device is null and there is no current device, or the image is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle for the pattern could not be obtained</li>
+ * </ul>
+ * 
+ * @see #dispose()
+ */
+public Pattern(Device device, Image image) {
+	super(device);
+	if (image == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (image.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		this.image = image;
+		color = NSColor.colorWithPatternImage(image.handle);
+		color.retain();
+		init();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Constructs a new Pattern that represents a linear, two color
+ * gradient. Drawing with the pattern will cause the resulting area to be
+ * tiled with the gradient specified by the arguments.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param device the device on which to allocate the pattern
+ * @param x1 the x coordinate of the starting corner of the gradient
+ * @param y1 the y coordinate of the starting corner of the gradient
+ * @param x2 the x coordinate of the ending corner of the gradient
+ * @param y2 the y coordinate of the ending corner of the gradient
+ * @param color1 the starting color of the gradient
+ * @param color2 the ending color of the gradient
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the device is null and there is no current device, 
+ *                              or if either color1 or color2 is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if either color1 or color2 has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle for the pattern could not be obtained</li>
+ * </ul>
+ * 
+ * @see #dispose()
+ */
+public Pattern(Device device, float x1, float y1, float x2, float y2, Color color1, Color color2) {
+	this(device, x1, y1, x2, y2, color1, 0xFF, color2, 0xFF);
+}
+/**
+ * Constructs a new Pattern that represents a linear, two color
+ * gradient. Drawing with the pattern will cause the resulting area to be
+ * tiled with the gradient specified by the arguments.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param device the device on which to allocate the pattern
+ * @param x1 the x coordinate of the starting corner of the gradient
+ * @param y1 the y coordinate of the starting corner of the gradient
+ * @param x2 the x coordinate of the ending corner of the gradient
+ * @param y2 the y coordinate of the ending corner of the gradient
+ * @param color1 the starting color of the gradient
+ * @param alpha1 the starting alpha value of the gradient
+ * @param color2 the ending color of the gradient
+ * @param alpha2 the ending alpha value of the gradient
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the device is null and there is no current device, 
+ *                              or if either color1 or color2 is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if either color1 or color2 has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle for the pattern could not be obtained</li>
+ * </ul>
+ * 
+ * @see #dispose()
+ * 
+ * @since 3.2
+ */
+public Pattern(Device device, float x1, float y1, float x2, float y2, Color color1, int alpha1, Color color2, int alpha2) {
+	super(device);
+	if (color1 == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (color1.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (color2 == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (color2.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		pt1 = new NSPoint();
+		pt2 = new NSPoint();
+		pt1.x = x1;
+		pt1.y = y1;
+		pt2.x = x2;
+		pt2.y = y2;
+		this.color1 = color1.handle;
+		this.color2 = color2.handle;
+		this.alpha1 = alpha1;
+		this.alpha2 = alpha2;
+		NSColor start = NSColor.colorWithDeviceRed(color1.handle[0], color1.handle[1], color1.handle[2], alpha1 / 255f);
+		NSColor end = NSColor.colorWithDeviceRed(color2.handle[0], color2.handle[1], color2.handle[2], alpha2 / 255f);
+		gradient = ((NSGradient)new NSGradient().alloc()).initWithStartingColor(start, end);
+		init();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+void destroy() {
+	if (color != null) color.release();
+	color = null;
+	if (gradient != null) gradient.release();
+	gradient = null;
+	image = null;
+	color1 = color2 = null;
+}
+
+/**
+ * Returns <code>true</code> if the Pattern has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the Pattern.
+ * When a Pattern has been disposed, it is an error to
+ * invoke any other method using the Pattern.
+ *
+ * @return <code>true</code> when the Pattern is disposed, and <code>false</code> otherwise
+ */
+public boolean isDisposed() {
+	return device == null;
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the receiver
+ */
+public String toString() {
+	if (isDisposed()) return "Pattern {*DISPOSED*}";
+	return "Pattern {" + (color != null ? color.id : gradient.id) + "}";
+}
+	
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Region.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Region.java
new file mode 100755
index 0000000..c8de98b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Region.java
@@ -0,0 +1,839 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.graphics;
+
+
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.cocoa.*;
+import org.eclipse.swt.*;
+
+/**
+ * Instances of this class represent areas of an x-y coordinate
+ * system that are aggregates of the areas covered by a number
+ * of polygons.
+ * <p>
+ * Application code must explicitly invoke the <code>Region.dispose()</code> 
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: GraphicsExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public final class Region extends Resource {
+	/**
+	 * the OS resource for the region
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public int /*long*/ handle;
+
+/**
+ * Constructs a new empty region.
+ * 
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for region creation</li>
+ * </ul>
+ */
+public Region() {
+	this(null);
+}
+
+/**
+ * Constructs a new empty region.
+ * <p>
+ * You must dispose the region when it is no longer required. 
+ * </p>
+ *
+ * @param device the device on which to allocate the region
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for region creation</li>
+ * </ul>
+ *
+ * @see #dispose
+ * 
+ * @since 3.0
+ */
+public Region(Device device) {
+	super(device);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		handle = OS.NewRgn();
+		if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+		init();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+Region(Device device, int /*long*/ handle) {
+	super(device);
+	this.handle = handle;
+}
+
+public static Region cocoa_new(Device device, int /*long*/ handle) {
+	return new Region(device, handle);
+}
+
+static int /*long*/ polyToRgn(int[] poly, int length) {
+	short[] r = new short[4];
+	int /*long*/ polyRgn = OS.NewRgn(), rectRgn = OS.NewRgn();
+	int minY = poly[1], maxY = poly[1];
+	for (int y = 3; y < length; y += 2) {
+		if (poly[y] < minY) minY = poly[y];
+		if (poly[y] > maxY) maxY = poly[y];
+	}
+	int[] inter = new int[length + 1];
+	for (int y = minY; y <= maxY; y++) {
+		int count = 0;
+		int x1 = poly[0], y1 = poly[1];
+		for (int p = 2; p < length; p += 2) {
+			int x2 = poly[p], y2 = poly[p + 1];
+			if (y1 != y2 && ((y1 <= y && y < y2) || (y2 <= y && y < y1))) {
+				inter[count++] = (int)((((y - y1) / (float)(y2 - y1)) * (x2 - x1)) + x1 + 0.5f);
+			}
+			x1 = x2;
+			y1 = y2;
+		}
+		int x2 = poly[0], y2 = poly[1];			
+		if (y1 != y2 && ((y1 <= y && y < y2) || (y2 <= y && y < y1))) {
+			inter[count++] = (int)((((y - y1) / (float)(y2 - y1)) * (x2 - x1)) + x1 + 0.5f);
+		}
+		for (int gap=count/2; gap>0; gap/=2) {
+			for (int i=gap; i<count; i++) {
+				for (int j=i-gap; j>=0; j-=gap) {
+					if ((inter[j] - inter[j + gap]) <= 0)
+						break;
+					int temp = inter[j];
+					inter[j] = inter[j + gap];
+					inter[j + gap] = temp;
+				}
+			}
+		}
+		for (int i = 0; i < count; i += 2) {
+			OS.SetRect(r, (short)inter[i], (short)y, (short)(inter[i + 1]),(short)(y + 1));
+			OS.RectRgn(rectRgn, r);
+			OS.UnionRgn(polyRgn, rectRgn, polyRgn);
+		}
+	}
+	OS.DisposeRgn(rectRgn);
+	return polyRgn;
+}
+
+static int /*long*/ polyRgn(int[] pointArray, int count) {
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		int /*long*/ polyRgn;
+		if (C.PTR_SIZEOF == 4) {
+			polyRgn = OS.NewRgn();
+			OS.OpenRgn();
+			OS.MoveTo((short)pointArray[0], (short)pointArray[1]);
+			for (int i = 1; i < count / 2; i++) {
+				OS.LineTo((short)pointArray[2 * i], (short)pointArray[2 * i + 1]);
+			}
+			OS.LineTo((short)pointArray[0], (short)pointArray[1]);
+			OS.CloseRgn(polyRgn);
+		} else {
+			polyRgn = polyToRgn(pointArray, count);
+		}
+		return polyRgn;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Adds the given polygon to the collection of polygons
+ * the receiver maintains to describe its area.
+ *
+ * @param pointArray points that describe the polygon to merge with the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @since 3.0
+*
+ */
+public void add (int[] pointArray) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (pointArray == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		add(pointArray, pointArray.length);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+	
+void add(int[] pointArray, int count) {
+	if (count <= 2) return;
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		int /*long*/ polyRgn = polyRgn(pointArray, count);
+		OS.UnionRgn(handle, polyRgn, handle);
+		OS.DisposeRgn(polyRgn);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Adds the given rectangle to the collection of polygons
+ * the receiver maintains to describe its area.
+ *
+ * @param rect the rectangle to merge with the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the rectangle's width or height is negative</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void add(Rectangle rect) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (rect == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (rect.width < 0 || rect.height < 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		add (rect.x, rect.y, rect.width, rect.height);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Adds the given rectangle to the collection of polygons
+ * the receiver maintains to describe its area.
+ *
+ * @param x the x coordinate of the rectangle
+ * @param y the y coordinate of the rectangle
+ * @param width the width coordinate of the rectangle
+ * @param height the height coordinate of the rectangle
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the rectangle's width or height is negative</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void add(int x, int y, int width, int height) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (width < 0 || height < 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		int /*long*/ rectRgn = OS.NewRgn();
+		short[] r = new short[4];
+		OS.SetRect(r, (short)x, (short)y, (short)(x + width),(short)(y + height));
+		OS.RectRgn(rectRgn, r);
+		OS.UnionRgn(handle, rectRgn, handle);
+		OS.DisposeRgn(rectRgn);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Adds all of the polygons which make up the area covered
+ * by the argument to the collection of polygons the receiver
+ * maintains to describe its area.
+ *
+ * @param region the region to merge
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void add(Region region) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (region == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (region.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		OS.UnionRgn(handle, region.handle, handle);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns <code>true</code> if the point specified by the
+ * arguments is inside the area specified by the receiver,
+ * and <code>false</code> otherwise.
+ *
+ * @param x the x coordinate of the point to test for containment
+ * @param y the y coordinate of the point to test for containment
+ * @return <code>true</code> if the region contains the point and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public boolean contains(int x, int y) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		short[] point = new short[]{(short)y, (short)x};
+		return OS.PtInRgn(point, handle);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns <code>true</code> if the given point is inside the
+ * area specified by the receiver, and <code>false</code>
+ * otherwise.
+ *
+ * @param pt the point to test for containment
+ * @return <code>true</code> if the region contains the point and <code>false</code> otherwise
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public boolean contains(Point pt) {
+	if (pt == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	return contains(pt.x, pt.y);
+}
+
+NSAffineTransform transform;
+void convertRgn(NSAffineTransform transform) {
+	int /*long*/ newRgn = OS.NewRgn();
+	Callback callback = new Callback(this, "convertRgn", 4);
+	int /*long*/ proc = callback.getAddress();
+	if (proc == 0) SWT.error(SWT.ERROR_NO_MORE_CALLBACKS);
+	this.transform = transform;
+	OS.QDRegionToRects(handle, OS.kQDParseRegionFromTopLeft, proc, newRgn);
+	this.transform = null;
+	callback.dispose();
+	OS.CopyRgn(newRgn, handle);
+	OS.DisposeRgn(newRgn);
+}
+
+int /*long*/ convertRgn(int /*long*/ message, int /*long*/ rgn, int /*long*/ r, int /*long*/ newRgn) {
+	if (message == OS.kQDRegionToRectsMsgParse) {
+		short[] rect = new short[4];
+		OS.memmove(rect, r, rect.length * 2);
+		int i = 0;
+		NSPoint point = new NSPoint();
+		int[] points = new int[10];
+		point.x = rect[1];
+		point.y = rect[0];
+		point = transform.transformPoint(point);
+		short startX, startY;
+		points[i++] = startX = (short)point.x;
+		points[i++] = startY = (short)point.y;
+		point.x = rect[3];
+		point.y = rect[0];
+		point = transform.transformPoint(point);
+		points[i++] = (short)Math.round(point.x);
+		points[i++] = (short)point.y;
+		point.x = rect[3];
+		point.y = rect[2];
+		point = transform.transformPoint(point);
+		points[i++] = (short)Math.round(point.x);
+		points[i++] = (short)Math.round(point.y);
+		point.x = rect[1];
+		point.y = rect[2];
+		point = transform.transformPoint(point);
+		points[i++] = (short)point.x;
+		points[i++] = (short)Math.round(point.y);
+		points[i++] = startX;
+		points[i++] = startY;
+		int /*long*/ polyRgn = polyRgn(points, points.length);
+		OS.UnionRgn(newRgn, polyRgn, newRgn);
+		OS.DisposeRgn(polyRgn);
+	}
+	return 0;
+}
+
+void destroy() {
+	OS.DisposeRgn(handle);
+	handle = 0;
+}
+
+/**
+ * Compares the argument to the receiver, and returns true
+ * if they represent the <em>same</em> object using a class
+ * specific comparison.
+ *
+ * @param object the object to compare with this object
+ * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
+ *
+ * @see #hashCode
+ */
+public boolean equals(Object object) {
+	if (this == object) return true;
+	if (!(object instanceof Region)) return false;
+	Region region = (Region)object;
+	return handle == region.handle;
+}
+
+/**
+ * Returns a rectangle which represents the rectangular
+ * union of the collection of polygons the receiver
+ * maintains to describe its area.
+ *
+ * @return a bounding rectangle for the region
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see Rectangle#union
+ */
+public Rectangle getBounds() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		short[] bounds = new short[4];
+		OS.GetRegionBounds(handle, bounds);
+		int width = bounds[3] - bounds[1];
+		int height = bounds[2] - bounds[0];
+		return new Rectangle(bounds[1], bounds[0], width, height);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+NSBezierPath getPath() {
+	Callback callback = new Callback(this, "regionToRects", 4);
+	if (callback.getAddress() == 0) SWT.error(SWT.ERROR_NO_MORE_CALLBACKS);
+	NSBezierPath path = NSBezierPath.bezierPath();
+	path.retain();
+	OS.QDRegionToRects(handle, OS.kQDParseRegionFromTopLeft, callback.getAddress(), path.id);
+	callback.dispose();
+	if (path.isEmpty()) path.appendBezierPathWithRect(new NSRect());
+	return path;
+}
+
+NSPoint pt = new NSPoint();
+short[] rect = new short[4];
+int /*long*/ regionToRects(int /*long*/ message, int /*long*/ rgn, int /*long*/ r, int /*long*/ path) {
+	if (message == OS.kQDRegionToRectsMsgParse) {
+		OS.memmove(rect, r, rect.length * 2);
+		pt.x = rect[1];
+		pt.y = rect[0];
+		OS.objc_msgSend(path, OS.sel_moveToPoint_, pt);
+		pt.x = rect[3];
+		OS.objc_msgSend(path, OS.sel_lineToPoint_, pt);
+		pt.x = rect[3];
+		pt.y = rect[2];
+		OS.objc_msgSend(path, OS.sel_lineToPoint_, pt);
+		pt.x = rect[1];
+		OS.objc_msgSend(path, OS.sel_lineToPoint_, pt);
+		OS.objc_msgSend(path, OS.sel_closePath);
+	}
+	return 0;
+}
+
+/**
+ * Returns an integer hash code for the receiver. Any two 
+ * objects that return <code>true</code> when passed to 
+ * <code>equals</code> must return the same value for this
+ * method.
+ *
+ * @return the receiver's hash
+ *
+ * @see #equals
+ */
+public int hashCode() {
+	return (int)/*64*/handle;
+}
+
+/**
+ * Intersects the given rectangle to the collection of polygons
+ * the receiver maintains to describe its area.
+ *
+ * @param rect the rectangle to intersect with the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the rectangle's width or height is negative</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void intersect(Rectangle rect) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (rect == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	intersect (rect.x, rect.y, rect.width, rect.height);
+}
+
+/**
+ * Intersects the given rectangle to the collection of polygons
+ * the receiver maintains to describe its area.
+ *
+ * @param x the x coordinate of the rectangle
+ * @param y the y coordinate of the rectangle
+ * @param width the width coordinate of the rectangle
+ * @param height the height coordinate of the rectangle
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the rectangle's width or height is negative</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void intersect(int x, int y, int width, int height) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (width < 0 || height < 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		int /*long*/ rectRgn = OS.NewRgn();
+		short[] r = new short[4];
+		OS.SetRect(r, (short)x, (short)y, (short)(x + width),(short)(y + height));
+		OS.RectRgn(rectRgn, r);
+		OS.SectRgn(handle, rectRgn, handle);
+		OS.DisposeRgn(rectRgn);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Intersects all of the polygons which make up the area covered
+ * by the argument to the collection of polygons the receiver
+ * maintains to describe its area.
+ *
+ * @param region the region to intersect
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void intersect(Region region) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (region == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (region.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		OS.SectRgn(handle, region.handle, handle);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns <code>true</code> if the rectangle described by the
+ * arguments intersects with any of the polygons the receiver
+ * maintains to describe its area, and <code>false</code> otherwise.
+ *
+ * @param x the x coordinate of the origin of the rectangle
+ * @param y the y coordinate of the origin of the rectangle
+ * @param width the width of the rectangle
+ * @param height the height of the rectangle
+ * @return <code>true</code> if the rectangle intersects with the receiver, and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see Rectangle#intersects(Rectangle)
+ */
+public boolean intersects (int x, int y, int width, int height) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		short[] r = new short[4];
+		OS.SetRect(r, (short)x, (short)y, (short)(x + width),(short)(y + height));
+		return OS.RectInRgn(r, handle);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns <code>true</code> if the given rectangle intersects
+ * with any of the polygons the receiver maintains to describe
+ * its area and <code>false</code> otherwise.
+ *
+ * @param rect the rectangle to test for intersection
+ * @return <code>true</code> if the rectangle intersects with the receiver, and <code>false</code> otherwise
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see Rectangle#intersects(Rectangle)
+ */
+public boolean intersects(Rectangle rect) {
+	if (rect == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	return intersects(rect.x, rect.y, rect.width, rect.height);
+}
+
+/**
+ * Returns <code>true</code> if the region has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the region.
+ * When a region has been disposed, it is an error to
+ * invoke any other method using the region.
+ *
+ * @return <code>true</code> when the region is disposed, and <code>false</code> otherwise
+ */
+public boolean isDisposed() {
+	return handle == 0;
+}
+
+/**
+ * Returns <code>true</code> if the receiver does not cover any
+ * area in the (x, y) coordinate plane, and <code>false</code> if
+ * the receiver does cover some area in the plane.
+ *
+ * @return <code>true</code> if the receiver is empty, and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public boolean isEmpty() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		return OS.EmptyRgn(handle);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Subtracts the given polygon from the collection of polygons
+ * the receiver maintains to describe its area.
+ *
+ * @param pointArray points that describe the polygon to merge with the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void subtract (int[] pointArray) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (pointArray == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (pointArray.length < 2) return;
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		int /*long*/ polyRgn = polyRgn(pointArray, pointArray.length);
+		OS.DiffRgn(handle, polyRgn, handle);
+		OS.DisposeRgn(polyRgn);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Subtracts the given rectangle from the collection of polygons
+ * the receiver maintains to describe its area.
+ *
+ * @param rect the rectangle to subtract from the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the rectangle's width or height is negative</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void subtract(Rectangle rect) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (rect == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	subtract (rect.x, rect.y, rect.width, rect.height);
+}
+
+/**
+ * Subtracts the given rectangle from the collection of polygons
+ * the receiver maintains to describe its area.
+ *
+ * @param x the x coordinate of the rectangle
+ * @param y the y coordinate of the rectangle
+ * @param width the width coordinate of the rectangle
+ * @param height the height coordinate of the rectangle
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the rectangle's width or height is negative</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void subtract(int x, int y, int width, int height) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (width < 0 || height < 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		int /*long*/ rectRgn = OS.NewRgn();
+		short[] r = new short[4];
+		OS.SetRect(r, (short)x, (short)y, (short)(x + width),(short)(y + height));
+		OS.RectRgn(rectRgn, r);
+		OS.DiffRgn(handle, rectRgn, handle);
+		OS.DisposeRgn(rectRgn);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Subtracts all of the polygons which make up the area covered
+ * by the argument from the collection of polygons the receiver
+ * maintains to describe its area.
+ *
+ * @param region the region to subtract
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void subtract(Region region) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (region == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (region.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		OS.DiffRgn(handle, region.handle, handle);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Translate all of the polygons the receiver maintains to describe
+ * its area by the specified point.
+ *
+ * @param x the x coordinate of the point to translate
+ * @param y the y coordinate of the point to translate
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void translate (int x, int y) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		OS.OffsetRgn (handle, (short)x, (short)y);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Translate all of the polygons the receiver maintains to describe
+ * its area by the specified point.
+ *
+ * @param pt the point to translate
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void translate (Point pt) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (pt == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		translate (pt.x, pt.y);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the receiver
+ */
+public String toString () {
+	if (isDisposed()) return "Region {*DISPOSED*}";
+	return "Region {" + handle + "}";
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/TextLayout.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/TextLayout.java
new file mode 100755
index 0000000..1d8b96f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/TextLayout.java
@@ -0,0 +1,1980 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.graphics;
+
+import org.eclipse.swt.internal.C;
+import org.eclipse.swt.internal.Compatibility;
+import org.eclipse.swt.internal.cocoa.*;
+import org.eclipse.swt.*;
+
+/**
+ * <code>TextLayout</code> is a graphic object that represents
+ * styled text.
+ * <p>
+ * Instances of this class provide support for drawing, cursor
+ * navigation, hit testing, text wrapping, alignment, tab expansion
+ * line breaking, etc.  These are aspects required for rendering internationalized text.
+ * </p><p>
+ * Application code must explicitly invoke the <code>TextLayout#dispose()</code> 
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#textlayout">TextLayout, TextStyle snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: CustomControlExample, StyledText tab</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.0
+ */
+public final class TextLayout extends Resource {
+	
+	NSTextStorage textStorage;
+	NSLayoutManager layoutManager;
+	NSTextContainer textContainer;
+	Font font;
+	String text;
+	StyleItem[] styles;
+	int spacing, ascent, descent, indent;
+	boolean justify;
+	int alignment;
+	int[] tabs;
+	int[] segments;
+	int wrapWidth;
+	int orientation;
+	
+	int[] lineOffsets;
+	NSRect[] lineBounds;
+	
+	static final int UNDERLINE_THICK = 1 << 16;
+	static final RGB LINK_FOREGROUND = new RGB (0, 51, 153);
+	int[] invalidOffsets;
+	static final char LTR_MARK = '\u200E', RTL_MARK = '\u200F', ZWS = '\u200B';
+	
+	static class StyleItem {
+		TextStyle style;
+		int start;
+
+		public String toString () {
+			return "StyleItem {" + start + ", " + style + "}";
+		}
+	}
+	
+/**	 
+ * Constructs a new instance of this class on the given device.
+ * <p>
+ * You must dispose the text layout when it is no longer required. 
+ * </p>
+ * 
+ * @param device the device on which to allocate the text layout
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ * </ul>
+ * 
+ * @see #dispose()
+ */
+public TextLayout (Device device) {
+	super(device);
+	wrapWidth = ascent = descent = -1;
+	alignment = SWT.LEFT;
+	orientation = SWT.LEFT_TO_RIGHT;
+	text = "";
+	styles = new StyleItem[2];
+	styles[0] = new StyleItem();
+	styles[1] = new StyleItem();
+	init();
+}
+
+void checkLayout() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+}
+
+float[] computePolyline(int left, int top, int right, int bottom) {
+	int height = bottom - top; // can be any number
+	int width = 2 * height; // must be even
+	int peaks = Compatibility.ceil(right - left, width);
+	if (peaks == 0 && right - left > 2) {
+		peaks = 1;
+	}
+	int length = ((2 * peaks) + 1) * 2;
+	if (length < 0) return new float[0];
+	
+	float[] coordinates = new float[length];
+	for (int i = 0; i < peaks; i++) {
+		int index = 4 * i;
+		coordinates[index] = left + (width * i);
+		coordinates[index+1] = bottom;
+		coordinates[index+2] = coordinates[index] + width / 2;
+		coordinates[index+3] = top;
+	}
+	coordinates[length-2] = left + (width * peaks);
+	coordinates[length-1] = bottom;
+	return coordinates;
+}
+
+
+void computeRuns() {
+	if (textStorage != null) return;
+	String segmentsText = getSegmentsText();
+	NSString str = NSString.stringWith(segmentsText);
+	textStorage = (NSTextStorage)new NSTextStorage().alloc().init();
+	layoutManager = (NSLayoutManager)new NSLayoutManager().alloc().init();
+	layoutManager.setBackgroundLayoutEnabled(NSThread.isMainThread());
+	textContainer = (NSTextContainer)new NSTextContainer().alloc();
+	NSSize size = new NSSize();
+	size.width = wrapWidth != -1 ? wrapWidth : Float.MAX_VALUE;
+	size.height = Float.MAX_VALUE;
+	textContainer.initWithContainerSize(size);
+	textStorage.addLayoutManager(layoutManager);
+	layoutManager.addTextContainer(textContainer);
+
+	/*
+	* Bug in Cocoa. Adding attributes directly to a NSTextStorage causes
+	* output to the console and eventually a segmentation fault when printing 
+	* on a thread other than the main thread. The fix is to add attributes to
+	* a separate NSMutableAttributedString and add it to text storage when done.
+	*/
+	NSMutableAttributedString attrStr = (NSMutableAttributedString)new NSMutableAttributedString().alloc();
+	attrStr.id = attrStr.initWithString(str).id;
+	attrStr.beginEditing();
+	Font defaultFont = font != null ? font : device.systemFont;
+	NSRange range = new NSRange();
+	range.length = str.length();
+	attrStr.addAttribute(OS.NSFontAttributeName, defaultFont.handle, range);
+	defaultFont.addTraits(attrStr, range);
+	//TODO ascend descent wrap
+	NSMutableParagraphStyle paragraph = (NSMutableParagraphStyle)new NSMutableParagraphStyle().alloc().init();
+	int align = OS.NSLeftTextAlignment;
+	if (justify) {
+		align = OS.NSJustifiedTextAlignment;
+	} else {
+		switch (alignment) {
+			case SWT.CENTER:
+				align = OS.NSCenterTextAlignment;
+				break;
+			case SWT.RIGHT:
+				align = OS.NSRightTextAlignment;
+		}
+	}
+	paragraph.setAlignment(align);
+	paragraph.setLineSpacing(spacing);
+	paragraph.setFirstLineHeadIndent(indent);
+	paragraph.setLineBreakMode(wrapWidth != -1 ? OS.NSLineBreakByWordWrapping : OS.NSLineBreakByClipping);
+	paragraph.setTabStops(NSArray.array());
+	if (tabs != null) {
+		int count = tabs.length;
+		for (int i = 0, pos = 0; i < count; i++) {
+			pos += tabs[i];
+			NSTextTab tab = (NSTextTab)new NSTextTab().alloc();
+			tab = tab.initWithType(OS.NSLeftTabStopType, pos);
+			paragraph.addTabStop(tab);
+			tab.release();
+		}
+		int width = count - 2 >= 0 ? tabs[count - 1] - tabs[count - 2] : tabs[count - 1];
+		paragraph.setDefaultTabInterval(width);
+	}
+	attrStr.addAttribute(OS.NSParagraphStyleAttributeName, paragraph, range);
+	paragraph.release();
+	int /*long*/ textLength = str.length();
+	for (int i = 0; i < styles.length - 1; i++) {
+		StyleItem run = styles[i];
+		if (run.style == null) continue;
+		TextStyle style = run.style;		
+		range.location = textLength != 0 ? translateOffset(run.start) : 0;
+		range.length = translateOffset(styles[i + 1].start) - range.location;
+		Font font = style.font;
+		if (font != null) {
+			attrStr.addAttribute(OS.NSFontAttributeName, font.handle, range);
+			font.addTraits(attrStr, range);
+		}
+		Color foreground = style.foreground;
+		if (foreground != null) {
+			NSColor color = NSColor.colorWithDeviceRed(foreground.handle[0], foreground.handle[1], foreground.handle[2], 1);
+			attrStr.addAttribute(OS.NSForegroundColorAttributeName, color, range);
+		}
+		Color background = style.background;
+		if (background != null) {
+			NSColor color = NSColor.colorWithDeviceRed(background.handle[0], background.handle[1], background.handle[2], 1);
+			attrStr.addAttribute(OS.NSBackgroundColorAttributeName, color, range);
+		}
+		if (style.strikeout) {
+			attrStr.addAttribute(OS.NSStrikethroughStyleAttributeName, NSNumber.numberWithInt(OS.NSUnderlineStyleSingle), range);
+			Color strikeColor = style.strikeoutColor;
+			if (strikeColor != null) {
+				NSColor color = NSColor.colorWithDeviceRed(strikeColor.handle[0], strikeColor.handle[1], strikeColor.handle[2], 1);
+				attrStr.addAttribute(OS.NSStrikethroughColorAttributeName, color, range);
+			}
+		}
+		if (isUnderlineSupported(style)) {
+			int underlineStyle = 0;
+			switch (style.underlineStyle) {
+				case SWT.UNDERLINE_SINGLE:
+					underlineStyle = OS.NSUnderlineStyleSingle;
+					break;
+				case SWT.UNDERLINE_DOUBLE:
+					underlineStyle = OS.NSUnderlineStyleDouble;
+					break;
+				case UNDERLINE_THICK:
+					underlineStyle = OS.NSUnderlineStyleThick;
+					break;
+				case SWT.UNDERLINE_LINK: {
+					underlineStyle = OS.NSUnderlineStyleSingle;
+					if (foreground == null) {
+						NSColor color = NSColor.colorWithDeviceRed(LINK_FOREGROUND.red / 255f, LINK_FOREGROUND.green / 255f, LINK_FOREGROUND.blue / 255f, 1);
+						attrStr.addAttribute(OS.NSForegroundColorAttributeName, color, range);
+					}
+					break;
+				}
+			}
+			if (underlineStyle != 0) {
+				attrStr.addAttribute(OS.NSUnderlineStyleAttributeName, NSNumber.numberWithInt(underlineStyle), range);
+				Color underlineColor = style.underlineColor;
+				if (underlineColor != null) {
+					NSColor color = NSColor.colorWithDeviceRed(underlineColor.handle[0], underlineColor.handle[1], underlineColor.handle[2], 1);
+					attrStr.addAttribute(OS.NSUnderlineColorAttributeName, color, range);
+				}
+			}
+		}
+		if (style.rise != 0) {
+			attrStr.addAttribute(OS.NSBaselineOffsetAttributeName, NSNumber.numberWithInt(style.rise), range);
+		}
+		if (style.metrics != null) {
+			//TODO implement metrics 
+		}
+	}
+	attrStr.endEditing();
+	textStorage.setAttributedString(attrStr);
+	attrStr.release();
+
+	textContainer.setLineFragmentPadding(0);
+	layoutManager.glyphRangeForTextContainer(textContainer);
+	
+	int numberOfLines;
+	int /*long*/ numberOfGlyphs = layoutManager.numberOfGlyphs(), index;
+	int /*long*/ rangePtr = OS.malloc(NSRange.sizeof);
+	NSRange lineRange = new NSRange();
+	for (numberOfLines = 0, index = 0; index < numberOfGlyphs; numberOfLines++){
+	    layoutManager.lineFragmentUsedRectForGlyphAtIndex(index, rangePtr, true);
+	    OS.memmove(lineRange, rangePtr, NSRange.sizeof);
+	    index = lineRange.location + lineRange.length;
+	}
+	if (numberOfLines == 0) numberOfLines++;
+	int[] offsets = new int[numberOfLines + 1];
+	NSRect[] bounds = new NSRect[numberOfLines];
+	for (numberOfLines = 0, index = 0; index < numberOfGlyphs; numberOfLines++){
+		bounds[numberOfLines] = layoutManager.lineFragmentUsedRectForGlyphAtIndex(index, rangePtr, true);
+		if (numberOfLines < bounds.length - 1) bounds[numberOfLines].height -= spacing;
+	    OS.memmove(lineRange, rangePtr, NSRange.sizeof);
+	    offsets[numberOfLines] = (int)/*64*/lineRange.location;
+	    index = lineRange.location + lineRange.length;
+	}
+	if (numberOfLines == 0) {
+		Font font = this.font != null ? this.font : device.systemFont;
+		NSFont nsFont = font.handle;
+		bounds[0] = new NSRect();
+		bounds[0].height = Math.max(layoutManager.defaultLineHeightForFont(nsFont), ascent + descent);
+	}
+	OS.free(rangePtr);
+	offsets[numberOfLines] = (int)/*64*/textStorage.length();
+	this.lineOffsets = offsets;
+	this.lineBounds = bounds;
+}
+
+void destroy() {
+	freeRuns();
+	font = null;
+	text = null;
+	styles = null;
+}
+
+/**
+ * Draws the receiver's text using the specified GC at the specified
+ * point.
+ * 
+ * @param gc the GC to draw
+ * @param x the x coordinate of the top left corner of the rectangular area where the text is to be drawn
+ * @param y the y coordinate of the top left corner of the rectangular area where the text is to be drawn
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the gc is null</li>
+ * </ul>
+ */
+public void draw(GC gc, int x, int y) {
+	draw(gc, x, y, -1, -1, null, null);
+}
+
+/**
+ * Draws the receiver's text using the specified GC at the specified
+ * point.
+ * 
+ * @param gc the GC to draw
+ * @param x the x coordinate of the top left corner of the rectangular area where the text is to be drawn
+ * @param y the y coordinate of the top left corner of the rectangular area where the text is to be drawn
+ * @param selectionStart the offset where the selections starts, or -1 indicating no selection
+ * @param selectionEnd the offset where the selections ends, or -1 indicating no selection
+ * @param selectionForeground selection foreground, or NULL to use the system default color
+ * @param selectionBackground selection background, or NULL to use the system default color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the gc is null</li>
+ * </ul>
+ */
+public void draw(GC gc, int x, int y, int selectionStart, int selectionEnd, Color selectionForeground, Color selectionBackground) {
+	draw(gc, x, y, selectionStart, selectionEnd, selectionForeground, selectionBackground, 0);
+}
+
+/**
+ * Draws the receiver's text using the specified GC at the specified
+ * point.
+ * <p>
+ * The parameter <code>flags</code> can include one of <code>SWT.DELIMITER_SELECTION</code>
+ * or <code>SWT.FULL_SELECTION</code> to specify the selection behavior on all lines except
+ * for the last line, and can also include <code>SWT.LAST_LINE_SELECTION</code> to extend
+ * the specified selection behavior to the last line.
+ * </p>
+ * @param gc the GC to draw
+ * @param x the x coordinate of the top left corner of the rectangular area where the text is to be drawn
+ * @param y the y coordinate of the top left corner of the rectangular area where the text is to be drawn
+ * @param selectionStart the offset where the selections starts, or -1 indicating no selection
+ * @param selectionEnd the offset where the selections ends, or -1 indicating no selection
+ * @param selectionForeground selection foreground, or NULL to use the system default color
+ * @param selectionBackground selection background, or NULL to use the system default color
+ * @param flags drawing options
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the gc is null</li>
+ * </ul>
+ * 
+ * @since 3.3
+ */
+public void draw(GC gc, int x, int y, int selectionStart, int selectionEnd, Color selectionForeground, Color selectionBackground, int flags) {
+	checkLayout ();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (selectionForeground != null && selectionForeground.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (selectionBackground != null && selectionBackground.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAutoreleasePool pool = gc.checkGC(GC.CLIPPING | GC.TRANSFORM | GC.FOREGROUND);
+	try {
+		computeRuns();
+		int length = translateOffset(text.length());
+		if (length == 0 && flags == 0) return;
+		gc.handle.saveGraphicsState();
+		NSPoint pt = new NSPoint();
+		pt.x = x;
+		pt.y = y;
+		NSRange range = new NSRange();
+		int /*long*/ numberOfGlyphs = layoutManager.numberOfGlyphs();
+		if (numberOfGlyphs > 0) {
+			range.location = 0;
+			range.length = numberOfGlyphs;
+			layoutManager.drawBackgroundForGlyphRange(range, pt);
+		}
+		boolean hasSelection = selectionStart <= selectionEnd && selectionStart != -1 && selectionEnd != -1;
+		if (hasSelection || (flags & SWT.LAST_LINE_SELECTION) != 0) {
+			if (selectionBackground == null) selectionBackground = device.getSystemColor(SWT.COLOR_LIST_SELECTION);
+			NSColor selectionColor = NSColor.colorWithDeviceRed(selectionBackground.handle[0], selectionBackground.handle[1], selectionBackground.handle[2], selectionBackground.handle[3]);
+			NSBezierPath path = NSBezierPath.bezierPath();
+			NSRect rect = new NSRect();
+			if (hasSelection) {
+				int /*long*/ pRectCount = OS.malloc(C.PTR_SIZEOF);
+				range.location = translateOffset(selectionStart);
+				range.length = translateOffset(selectionEnd - selectionStart + 1);
+				int /*long*/ pArray = layoutManager.rectArrayForCharacterRange(range, range, textContainer, pRectCount);
+				int /*long*/ [] rectCount = new int /*long*/ [1];
+				OS.memmove(rectCount, pRectCount, C.PTR_SIZEOF);
+				OS.free(pRectCount);
+				for (int k = 0; k < rectCount[0]; k++, pArray += NSRect.sizeof) {
+					OS.memmove(rect, pArray, NSRect.sizeof);
+					fixRect(rect);
+					rect.x += pt.x;
+					rect.y += pt.y;
+					rect.height = Math.max(rect.height, ascent + descent);
+					path.appendBezierPathWithRect(rect);
+				}
+			}
+			//TODO draw full selection for wrapped text
+			if ((flags & SWT.LAST_LINE_SELECTION) != 0) {
+				NSRect bounds = lineBounds[lineBounds.length - 1];
+				rect.x = pt.x + bounds.x + bounds.width;
+				rect.y = y + bounds.y;
+				rect.width = (flags & SWT.FULL_SELECTION) != 0 ? 0x7fffffff : bounds.height / 3;
+				rect.height = Math.max(bounds.height, ascent + descent);
+				path.appendBezierPathWithRect(rect);
+			}
+			selectionColor.setFill();
+			path.fill();
+		}
+		if (numberOfGlyphs > 0) {
+			range.location = 0;
+			range.length = numberOfGlyphs;
+			float /*double*/ [] fg = gc.data.foreground;
+			boolean defaultFg = fg[0] == 0 && fg[1] == 0 && fg[2] == 0 && fg[3] == 1;
+			if (!defaultFg) {
+				for (int i = 0; i < styles.length - 1; i++) {
+					StyleItem run = styles[i];
+					if (run.style != null && run.style.foreground != null) continue;
+					if (run.style != null && run.style.underline && run.style.underlineStyle == SWT.UNDERLINE_LINK) continue;
+					range.location = length != 0 ? translateOffset(run.start) : 0;
+					range.length = translateOffset(styles[i + 1].start) - range.location;
+					layoutManager.addTemporaryAttribute(OS.NSForegroundColorAttributeName, gc.data.fg, range);
+				}
+			}
+			range.location = 0;
+			range.length = numberOfGlyphs;
+			layoutManager.drawGlyphsForGlyphRange(range, pt);
+			if (!defaultFg) {
+				range.location = 0;
+				range.length = length;
+				layoutManager.removeTemporaryAttribute(OS.NSForegroundColorAttributeName, range);
+			}
+			NSPoint point = new NSPoint();
+			for (int j = 0; j < styles.length; j++) {
+				StyleItem run = styles[j];
+				TextStyle style = run.style;
+				if (style == null) continue;
+				boolean drawUnderline = style.underline && !isUnderlineSupported(style);
+				drawUnderline = drawUnderline && (j + 1 == styles.length || !style.isAdherentUnderline(styles[j + 1].style)); 
+				boolean drawBorder = style.borderStyle != SWT.NONE;
+				drawBorder = drawBorder && (j + 1 == styles.length || !style.isAdherentBorder(styles[j + 1].style)); 
+				if (!drawUnderline && !drawBorder) continue;
+				int end = j + 1 < styles.length ? translateOffset(styles[j + 1].start - 1) : length;
+				for (int i = 0; i < lineOffsets.length - 1; i++) {
+					int lineStart = untranslateOffset(lineOffsets[i]);
+					int lineEnd = untranslateOffset(lineOffsets[i + 1] - 1);
+					if (drawUnderline) {
+						int start = run.start;
+						for (int k = j; k > 0 && style.isAdherentUnderline(styles[k - 1].style); k--) {
+							start = styles[k - 1].start;
+						}
+						start = translateOffset(start);
+						if (!(start > lineEnd || end < lineStart)) {
+							range.location = Math.max(lineStart, start);
+							range.length = Math.min(lineEnd, end) + 1 - range.location;
+							if (range.length > 0) {
+								int /*long*/ pRectCount = OS.malloc(C.PTR_SIZEOF);
+								int /*long*/ pArray = layoutManager.rectArrayForCharacterRange(range, range, textContainer, pRectCount);
+								int /*long*/ [] rectCount = new int /*long*/ [1];
+								OS.memmove(rectCount, pRectCount, C.PTR_SIZEOF);
+								OS.free(pRectCount);
+								NSRect rect = new NSRect();
+								gc.handle.saveGraphicsState();
+								float /*double*/ baseline = layoutManager.typesetter().baselineOffsetInLayoutManager(layoutManager, lineStart);
+								float /*double*/ [] color = null;
+								if (style.underlineColor != null) color = style.underlineColor.handle;
+								if (color == null && style.foreground != null) color = style.foreground.handle;
+								if (color != null) {
+									NSColor.colorWithDeviceRed(color[0], color[1], color[2], color[3]).setStroke();
+								}
+								for (int k = 0; k < rectCount[0]; k++, pArray += NSRect.sizeof) {
+									OS.memmove(rect, pArray, NSRect.sizeof);
+									fixRect(rect);
+									float /*double*/ underlineX = pt.x + rect.x;
+									float /*double*/ underlineY = pt.y + rect.y + rect.height - baseline + 1;
+									NSBezierPath path = NSBezierPath.bezierPath();
+									switch (style.underlineStyle) {
+										case SWT.UNDERLINE_ERROR: {
+											path.setLineWidth(2f);
+											path.setLineCapStyle(OS.NSRoundLineCapStyle);
+											path.setLineJoinStyle(OS.NSRoundLineJoinStyle);
+											path.setLineDash(new float /*double*/ []{1, 3f}, 2, 0);
+											point.x = underlineX;
+											point.y = underlineY + 0.5f;
+											path.moveToPoint(point);
+											point.x = underlineX + rect.width;
+											point.y = underlineY + 0.5f;
+											path.lineToPoint(point);
+											break;
+										}
+										case SWT.UNDERLINE_SQUIGGLE: {
+											gc.handle.setShouldAntialias(false);
+											path.setLineWidth(1.0f);
+											path.setLineCapStyle(OS.NSButtLineCapStyle);
+											path.setLineJoinStyle(OS.NSMiterLineJoinStyle);
+											float /*double*/ lineBottom = pt.y + rect.y + rect.height;
+											float squigglyThickness = 1;
+											float squigglyHeight = 2 * squigglyThickness;
+											float /*double*/ squigglyY = Math.min(underlineY - squigglyHeight / 2, lineBottom - squigglyHeight - 1);
+											float[] points = computePolyline((int)underlineX, (int)squigglyY, (int)(underlineX + rect.width), (int)(squigglyY + squigglyHeight));
+											point.x = points[0] + 0.5f;
+											point.y = points[1] + 0.5f;
+											path.moveToPoint(point);
+											for (int p = 2; p < points.length; p+=2) {
+												point.x = points[p] + 0.5f;
+												point.y = points[p+1] + 0.5f;
+												path.lineToPoint(point);
+											}
+											break;
+										}
+									}
+									path.stroke();
+								}
+								gc.handle.restoreGraphicsState();
+							}
+						}
+					}
+					if (drawBorder) {
+						int start = run.start;
+						for (int k = j; k > 0 && style.isAdherentBorder(styles[k - 1].style); k--) {
+							start = styles[k - 1].start;
+						}
+						start = translateOffset(start);
+						if (!(start > lineEnd || end < lineStart)) {
+							range.location = Math.max(lineStart, start);
+							range.length = Math.min(lineEnd, end) + 1 - range.location;
+							if (range.length > 0) {
+								int /*long*/ pRectCount = OS.malloc(C.PTR_SIZEOF);
+								int /*long*/ pArray = layoutManager.rectArrayForCharacterRange(range, range, textContainer, pRectCount);
+								int /*long*/ [] rectCount = new int /*long*/ [1];
+								OS.memmove(rectCount, pRectCount, C.PTR_SIZEOF);
+								OS.free(pRectCount);
+								NSRect rect = new NSRect();
+								gc.handle.saveGraphicsState();
+								float /*double*/ [] color = null;
+								if (style.borderColor != null) color = style.borderColor.handle;
+								if (color == null && style.foreground != null) color = style.foreground.handle;
+								if (color != null) {
+									NSColor.colorWithDeviceRed(color[0], color[1], color[2], color[3]).setStroke();
+								}
+								int width = 1;
+								float[] dashes = null;
+								switch (style.borderStyle) {
+									case SWT.BORDER_SOLID:	break;
+									case SWT.BORDER_DASH: dashes = width != 0 ? GC.LINE_DASH : GC.LINE_DASH_ZERO; break;
+									case SWT.BORDER_DOT: dashes = width != 0 ? GC.LINE_DOT : GC.LINE_DOT_ZERO; break;
+								}
+								float /*double*/ [] lengths = null;
+								if (dashes != null) {
+									lengths = new float /*double*/[dashes.length];
+									for (int k = 0; k < lengths.length; k++) {
+										lengths[k] = width == 0 ? dashes[k] : dashes[k] * width;
+									}
+								}
+								for (int k = 0; k < rectCount[0]; k++, pArray += NSRect.sizeof) {
+									OS.memmove(rect, pArray, NSRect.sizeof);
+									fixRect(rect);
+									rect.x += pt.x + 0.5f;
+									rect.y += pt.y + 0.5f;
+									rect.width -= 0.5f;
+									rect.height -= 0.5f;
+									NSBezierPath path = NSBezierPath.bezierPath();
+									path.setLineDash(lengths, lengths != null ? lengths.length : 0, 0);
+									path.appendBezierPathWithRect(rect);
+									path.stroke();
+								}
+								gc.handle.restoreGraphicsState();
+							}
+						}
+					}
+				}
+			}
+		}
+		gc.handle.restoreGraphicsState();
+	} finally {
+		gc.uncheckGC(pool);
+	}
+}
+
+void fixRect(NSRect rect) {
+	for (int j = 0; j < lineBounds.length; j++) {
+		NSRect line = lineBounds[j];
+		if (line.y <= rect.y && rect.y < line.y + line.height) {
+			if (rect.x + rect.width > line.x + line.width) {
+				rect.width = line.x + line.width - rect.x;
+			}
+		}
+	}
+}
+
+void freeRuns() {
+	if (textStorage == null) return;
+	if (textStorage != null) {
+		textStorage.release();
+	}
+	if (layoutManager != null) {
+		layoutManager.release();
+	}
+	if (textContainer != null) {
+		textContainer.release();
+	}
+	textStorage = null;
+	layoutManager = null;
+	textContainer = null;
+}
+
+/** 
+ * Returns the receiver's horizontal text alignment, which will be one
+ * of <code>SWT.LEFT</code>, <code>SWT.CENTER</code> or
+ * <code>SWT.RIGHT</code>.
+ *
+ * @return the alignment used to positioned text horizontally
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getAlignment() {
+	checkLayout();
+	return alignment;
+}
+
+/**
+ * Returns the ascent of the receiver.
+ *
+ * @return the ascent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #getDescent()
+ * @see #setDescent(int)
+ * @see #setAscent(int)
+ * @see #getLineMetrics(int)
+ */
+public int getAscent () {
+	checkLayout();	
+	return ascent;
+}
+
+/**
+ * Returns the bounds of the receiver. The width returned is either the
+ * width of the longest line or the width set using {@link TextLayout#setWidth(int)}.
+ * To obtain the text bounds of a line use {@link TextLayout#getLineBounds(int)}.
+ * 
+ * @return the bounds of the receiver
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #setWidth(int)
+ * @see #getLineBounds(int)
+ */
+public Rectangle getBounds() {
+	checkLayout();
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		computeRuns();
+		NSRect rect = layoutManager.usedRectForTextContainer(textContainer);
+		if (wrapWidth != -1) rect.width = wrapWidth;
+		if (text.length() == 0) {
+			Font font = this.font != null ? this.font : device.systemFont;
+			NSFont nsFont = font.handle;
+			rect.height = layoutManager.defaultLineHeightForFont(nsFont);
+		}
+		rect.height = Math.max(rect.height, ascent + descent) + spacing;
+		return new Rectangle(0, 0, (int)Math.ceil(rect.width), (int)Math.ceil(rect.height));
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns the bounds for the specified range of characters. The
+ * bounds is the smallest rectangle that encompasses all characters
+ * in the range. The start and end offsets are inclusive and will be
+ * clamped if out of range.
+ * 
+ * @param start the start offset
+ * @param end the end offset
+ * @return the bounds of the character range
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Rectangle getBounds(int start, int end) {
+	checkLayout();
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		computeRuns();
+		int length = text.length();
+		if (length == 0) return new Rectangle(0, 0, 0, 0);
+		if (start > end) return new Rectangle(0, 0, 0, 0);
+		start = Math.min(Math.max(0, start), length - 1);
+		end = Math.min(Math.max(0, end), length - 1);
+		start = translateOffset(start);
+		end = translateOffset(end);
+		NSRange range = new NSRange();
+		range.location = start;
+		range.length = end - start + 1;
+		int /*long*/ pRectCount = OS.malloc(C.PTR_SIZEOF);
+		int /*long*/ pArray = layoutManager.rectArrayForCharacterRange(range, range, textContainer, pRectCount);
+		int /*long*/ [] rectCount = new int /*long*/ [1];
+		OS.memmove(rectCount, pRectCount, C.PTR_SIZEOF);
+		OS.free(pRectCount);
+		NSRect rect = new NSRect();
+		int left = 0x7FFFFFFF, right = 0;
+		int top = 0x7FFFFFFF, bottom = 0;
+		for (int i = 0; i < rectCount[0]; i++, pArray += NSRect.sizeof) {
+			OS.memmove(rect, pArray, NSRect.sizeof);
+			fixRect(rect);
+			left = Math.min(left, (int)rect.x);
+			right = Math.max(right, (int)Math.ceil(rect.x + rect.width));
+			top = Math.min(top, (int)rect.y);
+			bottom = Math.max(bottom, (int)Math.ceil(rect.y + rect.height));
+		}
+		return new Rectangle(left, top, right - left, bottom - top);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns the descent of the receiver.
+ *
+ * @return the descent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #getAscent()
+ * @see #setAscent(int)
+ * @see #setDescent(int)
+ * @see #getLineMetrics(int)
+ */
+public int getDescent () {
+	checkLayout();	
+	return descent;
+}
+
+/** 
+ * Returns the default font currently being used by the receiver
+ * to draw and measure text.
+ *
+ * @return the receiver's font
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Font getFont () {
+	checkLayout();
+	return font;
+}
+
+/**
+* Returns the receiver's indent.
+*
+* @return the receiver's indent
+* 
+* @exception SWTException <ul>
+*    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+* </ul>
+* 
+* @since 3.2
+*/
+public int getIndent () {
+	checkLayout();	
+	return indent;
+}
+
+/**
+* Returns the receiver's justification.
+*
+* @return the receiver's justification
+* 
+* @exception SWTException <ul>
+*    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+* </ul>
+* 
+* @since 3.2
+*/
+public boolean getJustify () {
+	checkLayout();
+	return justify;
+}
+
+/**
+ * Returns the embedding level for the specified character offset. The
+ * embedding level is usually used to determine the directionality of a
+ * character in bidirectional text.
+ * 
+ * @param offset the character offset
+ * @return the embedding level
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the character offset is out of range</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ */
+public int getLevel(int offset) {
+	checkLayout();
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		computeRuns();
+		int length = text.length();
+		if (!(0 <= offset && offset <= length)) SWT.error(SWT.ERROR_INVALID_RANGE);
+		offset = translateOffset(offset);
+		int /*long*/ glyphOffset = layoutManager.glyphIndexForCharacterAtIndex(offset);
+		NSRange range  = new NSRange();
+		range.location = glyphOffset;
+		range.length = 1;
+		int /*long*/ pBidiLevels = OS.malloc(1);
+		byte[] bidiLevels = new byte[1];
+		int /*long*/ result = layoutManager.getGlyphsInRange(range, 0, 0, 0, 0, pBidiLevels);
+		if (result > 0) {
+			OS.memmove(bidiLevels, pBidiLevels, 1);
+		}
+		OS.free(pBidiLevels);
+		return bidiLevels[0];
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns the line offsets.  Each value in the array is the
+ * offset for the first character in a line except for the last
+ * value, which contains the length of the text.
+ * 
+ * @return the line offsets
+ *  
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int[] getLineOffsets() {
+	checkLayout ();
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		computeRuns();
+		int[] offsets = new int[lineOffsets.length];
+		for (int i = 0; i < offsets.length; i++) {
+			offsets[i] = untranslateOffset(lineOffsets[i]);
+		}
+		return offsets;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns the index of the line that contains the specified
+ * character offset.
+ * 
+ * @param offset the character offset
+ * @return the line index
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the character offset is out of range</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getLineIndex(int offset) {
+	checkLayout ();
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		computeRuns();
+		int length = text.length();
+		if (!(0 <= offset && offset <= length)) SWT.error(SWT.ERROR_INVALID_RANGE);
+		offset = translateOffset(offset);
+		for (int line=0; line<lineOffsets.length - 1; line++) {
+			if (lineOffsets[line + 1] > offset) {
+				return line;
+			}
+		}
+		return lineBounds.length - 1;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns the bounds of the line for the specified line index.
+ * 
+ * @param lineIndex the line index
+ * @return the line bounds 
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the line index is out of range</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Rectangle getLineBounds(int lineIndex) {
+	checkLayout();
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		computeRuns();
+		if (!(0 <= lineIndex && lineIndex < lineBounds.length)) SWT.error(SWT.ERROR_INVALID_RANGE);
+		NSRect rect = lineBounds[lineIndex];
+		int height =  Math.max((int)Math.ceil(rect.height), ascent + descent);
+		return new Rectangle((int)rect.x, (int)rect.y, (int)Math.ceil(rect.width), height);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns the receiver's line count. This includes lines caused
+ * by wrapping.
+ *
+ * @return the line count
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getLineCount() {
+	checkLayout ();
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		computeRuns();	
+		return lineOffsets.length - 1;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns the font metrics for the specified line index.
+ * 
+ * @param lineIndex the line index
+ * @return the font metrics 
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the line index is out of range</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public FontMetrics getLineMetrics (int lineIndex) {
+	checkLayout ();
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		computeRuns();
+		int lineCount = getLineCount();
+		if (!(0 <= lineIndex && lineIndex < lineCount)) SWT.error(SWT.ERROR_INVALID_RANGE);
+		int length = text.length();
+		if (length == 0) {
+			Font font = this.font != null ? this.font : device.systemFont;
+			NSFont nsFont = font.handle;
+			int ascent = (int)(0.5f + nsFont.ascender());
+			int descent = (int)(0.5f + (-nsFont.descender() + nsFont.leading()));	
+			ascent = Math.max(ascent, this.ascent);
+			descent = Math.max(descent, this.descent);
+			return FontMetrics.cocoa_new(ascent, descent, 0, 0, ascent + descent);
+		}
+		Rectangle rect = getLineBounds(lineIndex);
+		int baseline = (int)layoutManager.typesetter().baselineOffsetInLayoutManager(layoutManager, getLineOffsets()[lineIndex]);
+		return FontMetrics.cocoa_new(rect.height - baseline, baseline, 0, 0, rect.height);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns the location for the specified character offset. The
+ * <code>trailing</code> argument indicates whether the offset
+ * corresponds to the leading or trailing edge of the cluster.
+ * 
+ * @param offset the character offset
+ * @param trailing the trailing flag
+ * @return the location of the character offset
+ *  
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #getOffset(Point, int[])
+ * @see #getOffset(int, int, int[])
+ */
+public Point getLocation(int offset, boolean trailing) {
+	checkLayout();
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		computeRuns();
+		int length = text.length();
+		if (!(0 <= offset && offset <= length)) SWT.error(SWT.ERROR_INVALID_RANGE);
+		if (length == 0) return new Point(0, 0);
+		offset = translateOffset(offset);
+		int /*long*/ glyphIndex = layoutManager.glyphIndexForCharacterAtIndex(offset);
+		NSRect rect = layoutManager.lineFragmentUsedRectForGlyphAtIndex(glyphIndex, 0);
+		NSPoint point = layoutManager.locationForGlyphAtIndex(glyphIndex);
+		if (trailing) {
+			NSRange range = new NSRange();
+			range.location = offset;
+			range.length = 1;
+			int /*long*/ pRectCount = OS.malloc(C.PTR_SIZEOF);
+			int /*long*/ pArray = layoutManager.rectArrayForCharacterRange(range, range, textContainer, pRectCount);
+			int /*long*/ [] rectCount = new int /*long*/ [1];
+			OS.memmove(rectCount, pRectCount, C.PTR_SIZEOF);
+			OS.free(pRectCount);
+			if (rectCount[0] > 0) {
+				NSRect bounds = new NSRect();
+				OS.memmove(bounds, pArray, NSRect.sizeof);
+				fixRect(bounds);
+				point.x += bounds.width;
+			}
+		}
+		return new Point((int)point.x, (int)rect.y);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns the next offset for the specified offset and movement
+ * type.  The movement is one of <code>SWT.MOVEMENT_CHAR</code>, 
+ * <code>SWT.MOVEMENT_CLUSTER</code>, <code>SWT.MOVEMENT_WORD</code>,
+ * <code>SWT.MOVEMENT_WORD_END</code> or <code>SWT.MOVEMENT_WORD_START</code>.
+ * 
+ * @param offset the start offset
+ * @param movement the movement type 
+ * @return the next offset
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the offset is out of range</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #getPreviousOffset(int, int)
+ */
+public int getNextOffset (int offset, int movement) {
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		return _getOffset(offset, movement, true);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+int _getOffset (int offset, int movement, boolean forward) {
+	checkLayout();
+	computeRuns();
+	int length = text.length();
+	if (!(0 <= offset && offset <= length)) SWT.error(SWT.ERROR_INVALID_RANGE);
+	if (length == 0) return 0;
+	offset = translateOffset(offset);
+	length = translateOffset(length);
+	switch (movement) {
+		case SWT.MOVEMENT_CLUSTER://TODO cluster
+		case SWT.MOVEMENT_CHAR: {
+			boolean invalid = false;
+			do {
+				int newOffset = offset;
+				if (forward) {
+					if (newOffset < length) newOffset++;
+				} else {
+					if (newOffset > 0) newOffset--;
+				}
+				if (newOffset == offset) break;
+				offset = newOffset;
+				invalid = false;
+				if (invalidOffsets != null) {
+					for (int i = 0; i < invalidOffsets.length; i++) {
+						if (offset == invalidOffsets[i]) {
+							invalid = true;
+							break;
+						}
+					}
+				}
+			} while (invalid);
+			return untranslateOffset(offset);
+		}
+		case SWT.MOVEMENT_WORD: {
+			return untranslateOffset((int)/*64*/textStorage.nextWordFromIndex(offset, forward));
+		}
+		case SWT.MOVEMENT_WORD_END: {
+			NSRange range = textStorage.doubleClickAtIndex(length == offset ? length - 1 : offset);
+			return untranslateOffset((int)/*64*/(range.location + range.length));
+		}
+		case SWT.MOVEMENT_WORD_START: {
+			NSRange range = textStorage.doubleClickAtIndex(length == offset ? length - 1 : offset);
+			return untranslateOffset((int)/*64*/range.location);
+		}
+	}
+	return untranslateOffset(offset);
+}
+
+/**
+ * Returns the character offset for the specified point.  
+ * For a typical character, the trailing argument will be filled in to 
+ * indicate whether the point is closer to the leading edge (0) or
+ * the trailing edge (1).  When the point is over a cluster composed 
+ * of multiple characters, the trailing argument will be filled with the 
+ * position of the character in the cluster that is closest to
+ * the point.
+ * 
+ * @param point the point
+ * @param trailing the trailing buffer
+ * @return the character offset
+ *  
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the trailing length is less than <code>1</code></li>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #getLocation(int, boolean)
+ */
+public int getOffset(Point point, int[] trailing) {
+	checkLayout();
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		computeRuns();
+		if (point == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		return getOffset(point.x, point.y, trailing);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns the character offset for the specified point.  
+ * For a typical character, the trailing argument will be filled in to 
+ * indicate whether the point is closer to the leading edge (0) or
+ * the trailing edge (1).  When the point is over a cluster composed 
+ * of multiple characters, the trailing argument will be filled with the 
+ * position of the character in the cluster that is closest to
+ * the point.
+ * 
+ * @param x the x coordinate of the point
+ * @param y the y coordinate of the point
+ * @param trailing the trailing buffer
+ * @return the character offset
+ *  
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the trailing length is less than <code>1</code></li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #getLocation(int, boolean)
+ */
+public int getOffset(int x, int y, int[] trailing) {
+	checkLayout();
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		computeRuns();
+		if (trailing != null && trailing.length < 1) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		int length = text.length();
+		if (length == 0) return 0;
+		NSPoint pt = new NSPoint();
+		pt.x = x;
+		pt.y = y;
+		float /*double*/[] partialFration = new float /*double*/[1];
+		int /*long*/ glyphIndex = layoutManager.glyphIndexForPoint(pt, textContainer, partialFration);
+		int /*long*/ offset = layoutManager.characterIndexForGlyphAtIndex(glyphIndex);
+		if (trailing != null) trailing[0] = Math.round((float)/*64*/partialFration[0]);
+		return Math.min(untranslateOffset((int)/*64*/offset), length - 1);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns the orientation of the receiver.
+ *
+ * @return the orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getOrientation() {
+	checkLayout();
+	return orientation;
+}
+
+/**
+ * Returns the previous offset for the specified offset and movement
+ * type.  The movement is one of <code>SWT.MOVEMENT_CHAR</code>, 
+ * <code>SWT.MOVEMENT_CLUSTER</code> or <code>SWT.MOVEMENT_WORD</code>,
+ * <code>SWT.MOVEMENT_WORD_END</code> or <code>SWT.MOVEMENT_WORD_START</code>.
+ * 
+ * @param offset the start offset
+ * @param movement the movement type 
+ * @return the previous offset
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the offset is out of range</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #getNextOffset(int, int)
+ */
+public int getPreviousOffset (int index, int movement) {
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		return _getOffset(index, movement, false);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Gets the ranges of text that are associated with a <code>TextStyle</code>.
+ *
+ * @return the ranges, an array of offsets representing the start and end of each
+ * text style. 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #getStyles()
+ * 
+ * @since 3.2
+ */
+public int[] getRanges () {
+	checkLayout();
+	int[] result = new int[styles.length * 2];
+	int count = 0;
+	for (int i=0; i<styles.length - 1; i++) {
+		if (styles[i].style != null) {
+			result[count++] = styles[i].start;
+			result[count++] = styles[i + 1].start - 1;
+		}
+	}
+	if (count != result.length) {
+		int[] newResult = new int[count];
+		System.arraycopy(result, 0, newResult, 0, count);
+		result = newResult;
+	}
+	return result;
+}
+
+/**
+ * Returns the text segments offsets of the receiver.
+ *
+ * @return the text segments offsets
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int[] getSegments() {
+	checkLayout();
+	return segments;
+}
+
+String getSegmentsText() {
+	if (segments == null) return text;
+	int nSegments = segments.length;
+	if (nSegments <= 1) return text;
+	int length = text.length();
+	if (length == 0) return text;
+	if (nSegments == 2) {
+		if (segments[0] == 0 && segments[1] == length) return text;
+	}
+	invalidOffsets = new int[nSegments];
+	char[] oldChars = new char[length];
+	text.getChars(0, length, oldChars, 0);
+	char[] newChars = new char[length + nSegments];
+	int charCount = 0, segmentCount = 0;
+	char separator = getOrientation() == SWT.RIGHT_TO_LEFT ? RTL_MARK : LTR_MARK;
+	while (charCount < length) {
+		if (segmentCount < nSegments && charCount == segments[segmentCount]) {
+			invalidOffsets[segmentCount] = charCount + segmentCount;
+			newChars[charCount + segmentCount++] = separator;
+		} else {
+			newChars[charCount + segmentCount] = oldChars[charCount++];
+		}
+	}
+	if (segmentCount < nSegments) {
+		invalidOffsets[segmentCount] = charCount + segmentCount;
+		segments[segmentCount] = charCount;
+		newChars[charCount + segmentCount++] = separator;
+	}
+	if (segmentCount != nSegments) {
+		int[] tmp = new int [segmentCount];
+		System.arraycopy(invalidOffsets, 0, tmp, 0, segmentCount);
+		invalidOffsets = tmp;
+	}
+	return new String(newChars, 0, Math.min(charCount + segmentCount, newChars.length));
+}
+
+/**
+ * Returns the line spacing of the receiver.
+ *
+ * @return the line spacing
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getSpacing () {
+	checkLayout();	
+	return spacing;
+}
+
+/**
+ * Gets the style of the receiver at the specified character offset.
+ *
+ * @param offset the text offset
+ * @return the style or <code>null</code> if not set
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the character offset is out of range</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public TextStyle getStyle (int offset) {
+	checkLayout();
+	int length = text.length();
+	if (!(0 <= offset && offset < length)) SWT.error(SWT.ERROR_INVALID_RANGE);
+	for (int i=1; i<styles.length; i++) {
+		StyleItem item = styles[i];
+		if (item.start > offset) {
+			return styles[i - 1].style;
+		}
+	}
+	return null;
+}
+
+/**
+ * Gets all styles of the receiver.
+ *
+ * @return the styles
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #getRanges()
+ * 
+ * @since 3.2
+ */
+public TextStyle[] getStyles () {
+	checkLayout();
+	TextStyle[] result = new TextStyle[styles.length];
+	int count = 0;
+	for (int i=0; i<styles.length; i++) {
+		if (styles[i].style != null) {
+			result[count++] = styles[i].style;
+		}
+	}
+	if (count != result.length) {
+		TextStyle[] newResult = new TextStyle[count];
+		System.arraycopy(result, 0, newResult, 0, count);
+		result = newResult;
+	}
+	return result;
+}
+
+/**
+ * Returns the tab list of the receiver.
+ *
+ * @return the tab list
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int[] getTabs() {
+	checkLayout();
+	return tabs;
+}
+
+/**
+ * Gets the receiver's text, which will be an empty
+ * string if it has never been set.
+ *
+ * @return the receiver's text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public String getText () {
+	checkLayout ();
+	return text;
+}
+
+/**
+ * Returns the width of the receiver.
+ *
+ * @return the width
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getWidth () {
+	checkLayout();
+	return wrapWidth;
+}
+
+/**
+ * Returns <code>true</code> if the text layout has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the text layout.
+ * When a text layout has been disposed, it is an error to
+ * invoke any other method using the text layout.
+ * </p>
+ *
+ * @return <code>true</code> when the text layout is disposed and <code>false</code> otherwise
+ */
+public boolean isDisposed () {
+	return device == null;
+}
+
+/*
+ * Returns true if the underline style is supported natively
+ */
+boolean isUnderlineSupported (TextStyle style) {
+	if (style != null && style.underline) {
+		int uStyle = style.underlineStyle;
+		return uStyle == SWT.UNDERLINE_SINGLE || uStyle == SWT.UNDERLINE_DOUBLE || uStyle == SWT.UNDERLINE_LINK || uStyle == UNDERLINE_THICK;
+	}
+	return false;
+}
+
+/**
+ * Sets the text alignment for the receiver. The alignment controls
+ * how a line of text is positioned horizontally. The argument should
+ * be one of <code>SWT.LEFT</code>, <code>SWT.RIGHT</code> or <code>SWT.CENTER</code>.
+ * <p>
+ * The default alignment is <code>SWT.LEFT</code>.  Note that the receiver's
+ * width must be set in order to use <code>SWT.RIGHT</code> or <code>SWT.CENTER</code>
+ * alignment.
+ * </p>
+ *
+ * @param alignment the new alignment 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #setWidth(int)
+ */
+public void setAlignment (int alignment) {
+	checkLayout();
+	int mask = SWT.LEFT | SWT.CENTER | SWT.RIGHT;
+	alignment &= mask;
+	if (alignment == 0) return;
+	if ((alignment & SWT.LEFT) != 0) alignment = SWT.LEFT;
+	if ((alignment & SWT.RIGHT) != 0) alignment = SWT.RIGHT;
+	if (this.alignment == alignment) return;
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		freeRuns();
+		this.alignment = alignment;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Sets the ascent of the receiver. The ascent is distance in pixels
+ * from the baseline to the top of the line and it is applied to all
+ * lines. The default value is <code>-1</code> which means that the
+ * ascent is calculated from the line fonts.
+ *
+ * @param ascent the new ascent
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the ascent is less than <code>-1</code></li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #setDescent(int)
+ * @see #getLineMetrics(int)
+ */
+public void setAscent (int ascent) {
+	checkLayout ();
+	if (ascent < -1) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (this.ascent == ascent) return;
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		freeRuns();
+		this.ascent = ascent;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Sets the descent of the receiver. The descent is distance in pixels
+ * from the baseline to the bottom of the line and it is applied to all
+ * lines. The default value is <code>-1</code> which means that the
+ * descent is calculated from the line fonts.
+ *
+ * @param descent the new descent
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the descent is less than <code>-1</code></li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #setAscent(int)
+ * @see #getLineMetrics(int)
+ */
+public void setDescent (int descent) {
+	checkLayout ();
+	if (descent < -1) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (this.descent == descent) return;
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		freeRuns();
+		this.descent = descent;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/** 
+ * Sets the default font which will be used by the receiver
+ * to draw and measure text. If the
+ * argument is null, then a default font appropriate
+ * for the platform will be used instead. Note that a text
+ * style can override the default font.
+ *
+ * @param font the new font for the receiver, or null to indicate a default font
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the font has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setFont (Font font) {
+	checkLayout ();
+	if (font != null && font.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	Font oldFont = this.font;
+	if (oldFont == font) return;
+	this.font = font;
+	if (oldFont != null && oldFont.equals(font)) return;
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		freeRuns();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Sets the indent of the receiver. This indent it applied of the first line of 
+ * each paragraph.  
+ *
+ * @param indent new indent
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setIndent (int indent) {
+	checkLayout ();
+	if (indent < 0) return;
+	if (this.indent == indent) return;
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		freeRuns();
+		this.indent = indent;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Sets the justification of the receiver. Note that the receiver's
+ * width must be set in order to use justification. 
+ *
+ * @param justify new justify
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setJustify (boolean justify) {
+	checkLayout ();
+	if (justify == this.justify) return;
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		freeRuns();
+		this.justify = justify;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Sets the orientation of the receiver, which must be one
+ * of <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ *
+ * @param orientation new orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setOrientation(int orientation) {
+	checkLayout();
+	int mask = SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT;
+	orientation &= mask;
+	if (orientation == 0) return;
+	if ((orientation & SWT.LEFT_TO_RIGHT) != 0) orientation = SWT.LEFT_TO_RIGHT;
+	if (this.orientation == orientation) return;
+	this.orientation = orientation;
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		freeRuns();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Sets the offsets of the receiver's text segments. Text segments are used to
+ * override the default behaviour of the bidirectional algorithm.
+ * Bidirectional reordering can happen within a text segment but not 
+ * between two adjacent segments.
+ * <p>
+ * Each text segment is determined by two consecutive offsets in the 
+ * <code>segments</code> arrays. The first element of the array should 
+ * always be zero and the last one should always be equals to length of
+ * the text.
+ * </p>
+ * 
+ * @param segments the text segments offset
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setSegments(int[] segments) {
+	checkLayout();
+	if (this.segments == null && segments == null) return;
+	if (this.segments != null && segments !=null) {
+		if (this.segments.length == segments.length) {
+			int i;
+			for (i = 0; i <segments.length; i++) {
+				if (this.segments[i] != segments[i]) break;
+			}
+			if (i == segments.length) return;
+		}
+	}
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		freeRuns();
+		this.segments = segments;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Sets the line spacing of the receiver.  The line spacing
+ * is the space left between lines.
+ *
+ * @param spacing the new line spacing 
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the spacing is negative</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setSpacing (int spacing) {
+	checkLayout();
+	if (spacing < 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (this.spacing == spacing) return;
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		freeRuns();
+		this.spacing = spacing;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Sets the style of the receiver for the specified range.  Styles previously
+ * set for that range will be overwritten.  The start and end offsets are
+ * inclusive and will be clamped if out of range.
+ * 
+ * @param style the style
+ * @param start the start offset
+ * @param end the end offset
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setStyle (TextStyle style, int start, int end) {
+	checkLayout();
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		int length = text.length();
+		if (length == 0) return;
+		if (start > end) return;
+		start = Math.min(Math.max(0, start), length - 1);
+		end = Math.min(Math.max(0, end), length - 1);
+		int low = -1;
+		int high = styles.length;
+		while (high - low > 1) {
+			int index = (high + low) / 2;
+			if (styles[index + 1].start > start) {
+				high = index;
+			} else {
+				low = index;
+			}
+		}
+		if (0 <= high && high < styles.length) {
+			StyleItem item = styles[high];
+			if (item.start == start && styles[high + 1].start - 1 == end) {
+				if (style == null) {
+					if (item.style == null) return;
+				} else {
+					if (style.equals(item.style)) return;
+				}
+			}
+		}
+		freeRuns();
+		int modifyStart = high;
+		int modifyEnd = modifyStart;
+		while (modifyEnd < styles.length) {
+			if (styles[modifyEnd + 1].start > end) break;
+			modifyEnd++;
+		}
+		if (modifyStart == modifyEnd) {
+			int styleStart = styles[modifyStart].start; 
+			int styleEnd = styles[modifyEnd + 1].start - 1;
+			if (styleStart == start && styleEnd == end) {
+				styles[modifyStart].style = style;
+				return;
+			}
+			if (styleStart != start && styleEnd != end) {
+				StyleItem[] newStyles = new StyleItem[styles.length + 2];
+				System.arraycopy(styles, 0, newStyles, 0, modifyStart + 1);
+				StyleItem item = new StyleItem();
+				item.start = start;
+				item.style = style;
+				newStyles[modifyStart + 1] = item;	
+				item = new StyleItem();
+				item.start = end + 1;
+				item.style = styles[modifyStart].style;
+				newStyles[modifyStart + 2] = item;
+				System.arraycopy(styles, modifyEnd + 1, newStyles, modifyEnd + 3, styles.length - modifyEnd - 1);
+				styles = newStyles;
+				return;
+			}
+		}
+		if (start == styles[modifyStart].start) modifyStart--;
+		if (end == styles[modifyEnd + 1].start - 1) modifyEnd++;
+		int newLength = styles.length + 1 - (modifyEnd - modifyStart - 1);
+		StyleItem[] newStyles = new StyleItem[newLength];
+		System.arraycopy(styles, 0, newStyles, 0, modifyStart + 1);	
+		StyleItem item = new StyleItem();
+		item.start = start;
+		item.style = style;
+		newStyles[modifyStart + 1] = item;
+		styles[modifyEnd].start = end + 1;
+		System.arraycopy(styles, modifyEnd, newStyles, modifyStart + 2, styles.length - modifyEnd);
+		styles = newStyles;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Sets the receiver's tab list. Each value in the tab list specifies
+ * the space in pixels from the origin of the text layout to the respective
+ * tab stop.  The last tab stop width is repeated continuously.
+ * 
+ * @param tabs the new tab list
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setTabs(int[] tabs) {
+	checkLayout();
+	if (this.tabs == null && tabs == null) return;
+	if (this.tabs != null && tabs !=null) {
+		if (this.tabs.length == tabs.length) {
+			int i;
+			for (i = 0; i < tabs.length; i++) {
+				if (this.tabs[i] != tabs[i]) break;
+			}
+			if (i == tabs.length) return;
+		}
+	}
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		freeRuns();
+		this.tabs = tabs;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Sets the receiver's text.
+ *<p>
+ * Note: Setting the text also clears all the styles. This method 
+ * returns without doing anything if the new text is the same as 
+ * the current text.
+ * </p>
+ * 
+ * @param text the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setText (String text) {
+	checkLayout ();
+	if (text == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (text.equals(this.text)) return;
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		freeRuns();
+		this.text = text;
+		styles = new StyleItem[2];
+		styles[0] = new StyleItem();
+		styles[1] = new StyleItem();
+		styles[styles.length - 1].start = text.length();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Sets the line width of the receiver, which determines how
+ * text should be wrapped and aligned. The default value is
+ * <code>-1</code> which means wrapping is disabled.
+ *
+ * @param width the new width 
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the width is <code>0</code> or less than <code>-1</code></li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #setAlignment(int)
+ */
+public void setWidth (int width) {
+	checkLayout();
+	if (width < -1 || width == 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (this.wrapWidth == width) return;
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		freeRuns();
+		this.wrapWidth = width;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the receiver
+ */
+public String toString () {
+	if (isDisposed()) return "TextLayout {*DISPOSED*}";
+	return "TextLayout {" + text + "}";
+}
+
+/*
+ *  Translate a client offset to an internal offset
+ */
+int translateOffset (int offset) {
+	int length = text.length();
+	if (length == 0) return offset;
+	if (invalidOffsets == null) return offset;
+	for (int i = 0; i < invalidOffsets.length; i++) {
+		if (offset < invalidOffsets[i]) break; 
+		offset++;
+	}
+	return offset;
+}
+
+/*
+ *  Translate an internal offset to a client offset
+ */
+int untranslateOffset (int offset) {
+	int length = text.length();
+	if (length == 0) return offset;
+	if (invalidOffsets == null) return offset;
+	for (int i = 0; i < invalidOffsets.length; i++) {
+		if (offset == invalidOffsets[i]) {
+			offset++;
+			continue;
+		}
+		if (offset < invalidOffsets[i]) {
+			return offset - i;
+		}
+	}
+	return offset - invalidOffsets.length;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Transform.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Transform.java
new file mode 100755
index 0000000..b4eee32
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/Transform.java
@@ -0,0 +1,477 @@
+/*******************************************************************************
+ * 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.graphics;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class represent transformation matrices for 
+ * points expressed as (x, y) pairs of floating point numbers.
+ * <p>
+ * Application code must explicitly invoke the <code>Transform.dispose()</code> 
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ * <p>
+ * This class requires the operating system's advanced graphics subsystem
+ * which may not be available on some platforms.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: GraphicsExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.1
+ */
+public class Transform extends Resource {
+	/**
+	 * the OS resource for the Transform
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public NSAffineTransform handle;
+	
+/**
+ * Constructs a new identity Transform.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param device the device on which to allocate the Transform
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle for the Transform could not be obtained</li>
+ * </ul>
+ * 
+ * @see #dispose()
+ */
+public Transform (Device device) {
+	this(device, 1, 0, 0, 1, 0, 0);
+}
+
+/**
+ * Constructs a new Transform given an array of elements that represent the 
+ * matrix that describes the transformation.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param device the device on which to allocate the Transform
+ * @param elements an array of floats that describe the transformation matrix
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device, or the elements array is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the elements array is too small to hold the matrix values</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle for the Transform could not be obtained</li>
+ * </ul>
+ * 
+ * @see #dispose()
+ */
+public Transform(Device device, float[] elements) {
+	this (device, checkTransform(elements)[0], elements[1], elements[2], elements[3], elements[4], elements[5]);
+}
+
+/**
+ * Constructs a new Transform given all of the elements that represent the 
+ * matrix that describes the transformation.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param device the device on which to allocate the Transform
+ * @param m11 the first element of the first row of the matrix
+ * @param m12 the second element of the first row of the matrix
+ * @param m21 the first element of the second row of the matrix
+ * @param m22 the second element of the second row of the matrix
+ * @param dx the third element of the first row of the matrix
+ * @param dy the third element of the second row of the matrix
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle for the Transform could not be obtained</li>
+ * </ul>
+ * 
+ * @see #dispose()
+ */
+public Transform (Device device, float m11, float m12, float m21, float m22, float dx, float dy) {
+	super(device);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		handle = NSAffineTransform.transform();
+		if (handle == null) SWT.error(SWT.ERROR_NO_HANDLES);
+		handle.retain();
+		setElements(m11, m12, m21, m22, dx, dy);
+		init();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+static float[] checkTransform(float[] elements) {
+	if (elements == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (elements.length < 6) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	return elements;
+}
+
+void destroy() {
+	handle.release();
+	handle = null;
+}
+
+/**
+ * Fills the parameter with the values of the transformation matrix
+ * that the receiver represents, in the order {m11, m12, m21, m22, dx, dy}.
+ *
+ * @param elements array to hold the matrix values
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parameter is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter is too small to hold the matrix values</li>
+ * </ul>
+ */
+public void getElements(float[] elements) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (elements == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (elements.length < 6) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSAffineTransformStruct struct = handle.transformStruct();
+		elements[0] = (float)/*64*/struct.m11;
+		elements[1] = (float)/*64*/struct.m12;
+		elements[2] = (float)/*64*/struct.m21;
+		elements[3] = (float)/*64*/struct.m22;
+		elements[4] = (float)/*64*/struct.tX;
+		elements[5] = (float)/*64*/struct.tY;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Modifies the receiver such that the matrix it represents becomes the
+ * identity matrix. 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public void identity() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSAffineTransformStruct struct = new NSAffineTransformStruct();
+		struct.m11 = 1;
+		struct.m22 = 1;
+		handle.setTransformStruct(struct);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Modifies the receiver such that the matrix it represents becomes
+ * the mathematical inverse of the matrix it previously represented. 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_CANNOT_INVERT_MATRIX - if the matrix is not invertible</li>
+ * </ul>
+ */
+public void invert() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSAffineTransformStruct struct = handle.transformStruct();
+		if ((struct.m11 * struct.m22 - struct.m12 * struct.m21) == 0) {
+			SWT.error(SWT.ERROR_CANNOT_INVERT_MATRIX);
+		}
+		handle.invert();
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns <code>true</code> if the Transform has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the Transform.
+ * When a Transform has been disposed, it is an error to
+ * invoke any other method using the Transform.
+ *
+ * @return <code>true</code> when the Transform is disposed, and <code>false</code> otherwise
+ */
+public boolean isDisposed() {
+	return handle == null;
+}
+
+/**
+ * Returns <code>true</code> if the Transform represents the identity matrix
+ * and false otherwise.
+ *
+ * @return <code>true</code> if the receiver is an identity Transform, and <code>false</code> otherwise
+ */
+public boolean isIdentity() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSAffineTransformStruct struct = handle.transformStruct();
+		return struct.m11 == 1 && struct.m12 == 0 && struct.m21 == 0 && struct.m22 == 1 && struct.tX == 0 && struct.tY == 0;
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Modifies the receiver such that the matrix it represents becomes the
+ * the result of multiplying the matrix it previously represented by the
+ * argument. 
+ *
+ * @param matrix the matrix to multiply the receiver by
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parameter is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter has been disposed</li>
+ * </ul>
+ */
+public void multiply(Transform matrix) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (matrix == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (matrix.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		handle.prependTransform(matrix.handle);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Modifies the receiver so that it represents a transformation that is
+ * equivalent to its previous transformation rotated by the specified angle.
+ * The angle is specified in degrees and for the identity transform 0 degrees
+ * is at the 3 o'clock position. A positive value indicates a clockwise rotation
+ * while a negative value indicates a counter-clockwise rotation.
+ *
+ * @param angle the angle to rotate the transformation by
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void rotate(float angle) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		handle.rotateByDegrees(angle);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Modifies the receiver so that it represents a transformation that is
+ * equivalent to its previous transformation scaled by (scaleX, scaleY).
+ * 
+ * @param scaleX the amount to scale in the X direction
+ * @param scaleY the amount to scale in the Y direction
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void scale(float scaleX, float scaleY) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		handle.scaleXBy(scaleX, scaleY);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Modifies the receiver to represent a new transformation given all of
+ * the elements that represent the matrix that describes that transformation.
+ * 
+ * @param m11 the first element of the first row of the matrix
+ * @param m12 the second element of the first row of the matrix
+ * @param m21 the first element of the second row of the matrix
+ * @param m22 the second element of the second row of the matrix
+ * @param dx the third element of the first row of the matrix
+ * @param dy the third element of the second row of the matrix
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setElements(float m11, float m12, float m21, float m22, float dx, float dy) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSAffineTransformStruct struct = new NSAffineTransformStruct();
+		struct.m11 = m11;
+		struct.m12 = m12;
+		struct.m21 = m21;
+		struct.m22 = m22;
+		struct.tX = dx;
+		struct.tY = dy;
+		handle.setTransformStruct(struct);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Modifies the receiver so that it represents a transformation that is
+ * equivalent to its previous transformation sheared by (shearX, shearY).
+ * 
+ * @param shearX the shear factor in the X direction
+ * @param shearY the shear factor in the Y direction
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public void shear(float shearX, float shearY) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSAffineTransformStruct struct = new NSAffineTransformStruct();
+		struct.m11 = 1;
+		struct.m12 = shearX;
+		struct.m21 = shearY;
+		struct.m22 = 1;
+		NSAffineTransform matrix = NSAffineTransform.transform();
+		matrix.setTransformStruct(struct);
+		handle.prependTransform(matrix);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/** 
+ * Given an array containing points described by alternating x and y values,
+ * modify that array such that each point has been replaced with the result of
+ * applying the transformation represented by the receiver to that point.
+ *
+ * @param pointArray an array of alternating x and y values to be transformed
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point array is null</li>
+ * </ul>	
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void transform(float[] pointArray) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (pointArray == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		NSPoint point = new NSPoint();
+		int length = pointArray.length / 2;
+		for (int i = 0, j = 0; i < length; i++, j += 2) {
+			point.x = pointArray[j];
+			point.y = pointArray[j + 1];
+			point = handle.transformPoint(point);
+			pointArray[j] = (float)/*64*/point.x;				
+			pointArray[j + 1] = (float)/*64*/point.y;				
+		}
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Modifies the receiver so that it represents a transformation that is
+ * equivalent to its previous transformation translated by (offsetX, offsetY).
+ * 
+ * @param offsetX the distance to translate in the X direction
+ * @param offsetY the distance to translate in the Y direction
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void translate(float offsetX, float offsetY) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	NSAutoreleasePool pool = null;
+	if (!NSThread.isMainThread()) pool = (NSAutoreleasePool) new NSAutoreleasePool().alloc().init();
+	try {
+		handle.translateXBy(offsetX, offsetY);
+	} finally {
+		if (pool != null) pool.release();
+	}
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the receiver
+ */
+public String toString() {
+	if (isDisposed()) return "Transform {*DISPOSED*}";
+	float[] elements = new float[6];
+	getElements(elements);
+	return "Transform {" + elements [0] + ", " + elements [1] + ", " +elements [2] + ", " +elements [3] + ", " +elements [4] + ", " +elements [5] + "}";
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Button.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Button.java
new file mode 100755
index 0000000..c6386e2
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Button.java
@@ -0,0 +1,846 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.accessibility.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class represent a selectable user interface object that
+ * issues notification when pressed and released. 
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>ARROW, CHECK, PUSH, RADIO, TOGGLE, FLAT</dd>
+ * <dd>UP, DOWN, LEFT, RIGHT, CENTER</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles ARROW, CHECK, PUSH, RADIO, and TOGGLE 
+ * may be specified.
+ * </p><p>
+ * Note: Only one of the styles LEFT, RIGHT, and CENTER may be specified.
+ * </p><p>
+ * Note: Only one of the styles UP, DOWN, LEFT, and RIGHT may be specified
+ * when the ARROW style is specified.
+ * </p><p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#button">Button snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Button extends Control {
+	String text;
+	Image image;
+	boolean grayed;
+	
+	static final int EXTRA_HEIGHT = 2;
+	static final int EXTRA_WIDTH = 6;
+	static final int IMAGE_GAP = 2;
+	
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#ARROW
+ * @see SWT#CHECK
+ * @see SWT#PUSH
+ * @see SWT#RADIO
+ * @see SWT#TOGGLE
+ * @see SWT#FLAT
+ * @see SWT#UP
+ * @see SWT#DOWN
+ * @see SWT#LEFT
+ * @see SWT#RIGHT
+ * @see SWT#CENTER
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Button (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+int /*long*/ accessibilityAttributeValue (int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	NSString nsAttributeName = new NSString(arg0);
+	
+	if (accessible != null) {
+		id returnObject = accessible.internal_accessibilityAttributeValue(nsAttributeName, ACC.CHILDID_SELF);
+		if (returnObject != null) return returnObject.id;
+	}
+	
+	if (nsAttributeName.isEqualToString (OS.NSAccessibilityRoleAttribute) || nsAttributeName.isEqualToString (OS.NSAccessibilityRoleDescriptionAttribute)) {
+		NSString role = null;
+		
+		if ((style & SWT.RADIO) != 0) {
+			role = OS.NSAccessibilityRadioButtonRole;
+		} else if ((style & SWT.ARROW) != 0) {
+			role = OS.NSAccessibilityButtonRole;
+		}
+		
+		if (role != null) {
+			if (nsAttributeName.isEqualToString (OS.NSAccessibilityRoleAttribute))
+				return role.id;
+			else {
+				return OS.NSAccessibilityRoleDescription(role.id, 0);
+			}
+		}
+	}
+	
+	return super.accessibilityAttributeValue(id, sel, arg0);
+}
+
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is called when the control is selected by the user.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener(SelectionListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener(listener);
+	addListener(SWT.Selection,typedListener);
+	addListener(SWT.DefaultSelection,typedListener);
+}
+
+NSSize cellSize (int /*long*/ id, int /*long*/ sel) {
+	NSSize size = super.cellSize(id, sel);
+	if (image != null && ((style & (SWT.CHECK|SWT.RADIO)) !=0)) {
+		NSSize imageSize = image.handle.size();
+		size.width += imageSize.width + IMAGE_GAP;
+		size.height = Math.max(size.height, imageSize.height);
+	}
+	return size;
+}
+
+static int checkStyle (int style) {
+	style = checkBits (style, SWT.PUSH, SWT.ARROW, SWT.CHECK, SWT.RADIO, SWT.TOGGLE, 0);
+	if ((style & (SWT.PUSH | SWT.TOGGLE)) != 0) {
+		return checkBits (style, SWT.CENTER, SWT.LEFT, SWT.RIGHT, 0, 0, 0);
+	}
+	if ((style & (SWT.CHECK | SWT.RADIO)) != 0) {
+		return checkBits (style, SWT.LEFT, SWT.RIGHT, SWT.CENTER, 0, 0, 0);
+	}
+	if ((style & SWT.ARROW) != 0) {
+		style |= SWT.NO_FOCUS;
+		return checkBits (style, SWT.UP, SWT.DOWN, SWT.LEFT, SWT.RIGHT, 0, 0);
+	}
+	return style;
+}
+
+void click () {
+	postEvent (SWT.Selection);
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget();
+	if ((style & SWT.ARROW) != 0) {
+		// TODO use some OS metric instead of hardcoded values
+		int width = wHint != SWT.DEFAULT ? wHint : 14;
+		int height = hHint != SWT.DEFAULT ? hHint : 14;
+		return new Point (width, height);
+	}
+	NSSize size = ((NSButton)view).cell ().cellSize ();
+	int width = (int)Math.ceil (size.width);
+	int height = (int)Math.ceil (size.height);
+	if (wHint != SWT.DEFAULT) width = wHint;
+	if (hHint != SWT.DEFAULT) height = hHint;
+	if ((style & (SWT.PUSH | SWT.TOGGLE)) != 0 && (style & SWT.FLAT) == 0) {
+		if (display.smallFonts) height += EXTRA_HEIGHT;
+		width += EXTRA_WIDTH;
+	}
+	return new Point (width, height);
+}
+
+NSAttributedString createString() {
+	NSAttributedString attribStr = createString(text, null, foreground, style, true, true);
+	attribStr.autorelease();
+	return attribStr;
+}
+
+void createHandle () {
+	if ((style & SWT.PUSH) == 0) state |= THEME_BACKGROUND;
+	NSButton widget = (NSButton)new SWTButton().alloc();
+	widget.init();
+	/*
+	* Feature in Cocoa.  Images touch the edge of rounded buttons
+	* when set to small size. The fix to subclass the button cell
+    * and offset the image drawing.
+	*/
+//	if (display.smallFonts && (style & (SWT.PUSH | SWT.TOGGLE)) != 0 && (style & SWT.FLAT) == 0) {
+		NSButtonCell cell = (NSButtonCell)new SWTButtonCell ().alloc ().init ();
+		widget.setCell (cell);
+		cell.release ();
+//	}
+	int type = OS.NSMomentaryLightButton;
+	if ((style & SWT.PUSH) != 0) {
+		if ((style & SWT.FLAT) != 0) {
+			widget.setBezelStyle(OS.NSShadowlessSquareBezelStyle);
+//			if ((style & SWT.BORDER) == 0) widget.setShowsBorderOnlyWhileMouseInside(true);
+		} else {
+			widget.setBezelStyle(OS.NSRoundedBezelStyle);
+		}
+	} else if ((style & SWT.CHECK) != 0) {
+		type = OS.NSSwitchButton;
+	} else if ((style & SWT.RADIO) != 0) {
+		type = OS.NSRadioButton;		
+	} else if ((style & SWT.TOGGLE) != 0) {
+		type = OS.NSPushOnPushOffButton;
+		if ((style & SWT.FLAT) != 0) {
+			widget.setBezelStyle(OS.NSShadowlessSquareBezelStyle);
+//			if ((style & SWT.BORDER) == 0) widget.setShowsBorderOnlyWhileMouseInside(true);
+		} else {
+			widget.setBezelStyle(OS.NSRoundedBezelStyle);
+		}
+	} else if ((style & SWT.ARROW) != 0) {
+		widget.setBezelStyle(OS.NSShadowlessSquareBezelStyle);
+	}
+	widget.setButtonType(type);
+	widget.setTitle(NSString.stringWith(""));
+	widget.setImagePosition(OS.NSImageLeft);
+	widget.setTarget(widget);
+	widget.setAction(OS.sel_sendSelection);
+	view = widget;
+	_setAlignment(style);
+}
+
+void createWidget() {
+	text = "";
+	super.createWidget ();
+}
+
+NSFont defaultNSFont() {
+	return display.buttonFont;
+}
+
+void deregister () {
+	super.deregister ();
+	display.removeWidget(((NSControl)view).cell());
+}
+
+boolean dragDetect(int x, int y, boolean filter, boolean[] consume) {
+	boolean dragging = super.dragDetect(x, y, filter, consume);
+	consume[0] = dragging;
+	return dragging;
+}
+
+void drawImageWithFrameInView (int /*long*/ id, int /*long*/ sel, int /*long*/ image, NSRect rect, int /*long*/ view) {
+	/*
+	* Feature in Cocoa.  Images touch the edge of rounded buttons
+	* when set to small size. The fix to subclass the button cell
+    * and offset the image drawing.
+	*/
+	if (display.smallFonts && (style & (SWT.PUSH | SWT.TOGGLE)) != 0 && (style & SWT.FLAT) == 0) {
+		rect.y += EXTRA_HEIGHT / 2;
+		rect.height += EXTRA_HEIGHT;
+	}
+	callSuper (id, sel, image, rect, view);
+}
+
+void drawInteriorWithFrame_inView (int /*long*/ id, int /*long*/ sel, NSRect cellRect, int /*long*/ viewid) {
+	super.drawInteriorWithFrame_inView(id, sel, cellRect, viewid);
+	if (image != null && ((style & (SWT.CHECK|SWT.RADIO)) !=0)) {
+		NSSize imageSize = image.handle.size();
+		NSCell nsCell = new NSCell(id);
+		float /*double*/ x = 0;
+		float /*double*/ y = (imageSize.height - cellRect.height)/2f;
+		NSRect imageRect = nsCell.imageRectForBounds(cellRect);
+		NSSize stringSize = ((NSButton)view).attributedTitle().size();
+		switch (style & (SWT.LEFT|SWT.RIGHT|SWT.CENTER)) {
+			case SWT.LEFT:
+				x = imageRect.x + imageRect.width + IMAGE_GAP;
+				break;
+			case SWT.CENTER:
+				x = cellRect.x + imageRect.x + imageRect.width + ((cellRect.width-stringSize.width)/2f) - imageSize.width - IMAGE_GAP;
+				break;
+			case SWT.RIGHT:
+				x = cellRect.x + cellRect.width - stringSize.width - imageSize.width - IMAGE_GAP;
+				break;
+		}
+		NSRect destRect = new NSRect();
+		destRect.x = x;
+		destRect.y = y;
+		destRect.width = imageSize.width;
+		destRect.height = imageSize.height;
+		NSGraphicsContext.static_saveGraphicsState();
+		NSAffineTransform transform = NSAffineTransform.transform();
+		transform.scaleXBy(1, -1);
+		transform.translateXBy(0, -imageSize.height);
+		transform.concat();
+		image.handle.drawInRect(destRect, new NSRect(), OS.NSCompositeSourceOver, 1);
+		NSGraphicsContext.static_restoreGraphicsState();
+	}
+
+}
+
+void drawWidget (int /*long*/ id, NSGraphicsContext context, NSRect rect) {
+	if ((style & SWT.ARROW) != 0) {	
+		NSRect frame = view.frame();
+		int arrowSize = Math.min((int)frame.height, (int)frame.width) / 2;
+		context.saveGraphicsState();
+		NSPoint p1 = new NSPoint();
+		p1.x = -arrowSize / 2;
+		p1.y = -arrowSize / 2;
+		NSPoint p2 = new NSPoint();
+		p2.x = arrowSize / 2;
+		p2.y = p1.y;
+		NSPoint p3 = new NSPoint();
+		p3.y = arrowSize / 2;
+	
+		NSBezierPath path = NSBezierPath.bezierPath();
+		path.moveToPoint(p1);
+		path.lineToPoint(p2);
+		path.lineToPoint(p3);
+		path.closePath();
+	
+		NSAffineTransform transform = NSAffineTransform.transform();
+		if ((style & SWT.LEFT) != 0) {
+			transform.rotateByDegrees(90);
+		} else if ((style & SWT.UP) != 0) {
+			transform.rotateByDegrees(180);
+		} else if ((style & SWT.RIGHT) != 0) {
+			transform.rotateByDegrees(-90);
+		}
+		path.transformUsingAffineTransform(transform);
+		transform = NSAffineTransform.transform();
+		transform.translateXBy(frame.width / 2, frame.height / 2);
+		path.transformUsingAffineTransform(transform);
+	
+		NSColor color = isEnabled() ? NSColor.blackColor() : NSColor.disabledControlTextColor();
+		color.set();
+		path.fill();
+		context.restoreGraphicsState();
+	}
+	super.drawWidget (id, context, rect);
+}
+
+/**
+ * Returns a value which describes the position of the
+ * text or image in the receiver. The value will be one of
+ * <code>LEFT</code>, <code>RIGHT</code> or <code>CENTER</code>
+ * unless the receiver is an <code>ARROW</code> button, in 
+ * which case, the alignment will indicate the direction of
+ * the arrow (one of <code>LEFT</code>, <code>RIGHT</code>, 
+ * <code>UP</code> or <code>DOWN</code>).
+ *
+ * @return the alignment 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getAlignment () {
+	checkWidget ();
+	if ((style & SWT.ARROW) != 0) {
+		if ((style & SWT.UP) != 0) return SWT.UP;
+		if ((style & SWT.DOWN) != 0) return SWT.DOWN;
+		if ((style & SWT.LEFT) != 0) return SWT.LEFT;
+		if ((style & SWT.RIGHT) != 0) return SWT.RIGHT;
+		return SWT.UP;
+	}
+	if ((style & SWT.LEFT) != 0) return SWT.LEFT;
+	if ((style & SWT.CENTER) != 0) return SWT.CENTER;
+	if ((style & SWT.RIGHT) != 0) return SWT.RIGHT;
+	return SWT.LEFT;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is grayed,
+ * and false otherwise. When the widget does not have
+ * the <code>CHECK</code> style, return false.
+ *
+ * @return the grayed state of the checkbox
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public boolean getGrayed() {
+	checkWidget ();
+	if ((style & SWT.CHECK) == 0) return false;
+	return grayed;
+}
+
+/**
+ * Returns the receiver's image if it has one, or null
+ * if it does not.
+ *
+ * @return the receiver's image
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Image getImage () {
+	checkWidget();
+	return image;
+}
+
+String getNameText () {
+	return getText ();
+}
+
+/**
+ * Returns <code>true</code> if the receiver is selected,
+ * and false otherwise.
+ * <p>
+ * When the receiver is of type <code>CHECK</code> or <code>RADIO</code>,
+ * it is selected when it is checked. When it is of type <code>TOGGLE</code>,
+ * it is selected when it is pushed in. If the receiver is of any other type,
+ * this method returns false.
+ *
+ * @return the selection state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getSelection () {
+	checkWidget ();
+	if ((style & (SWT.CHECK | SWT.RADIO | SWT.TOGGLE)) == 0) return false;
+	if ((style & SWT.CHECK) != 0 && grayed) return ((NSButton)view).state() == OS.NSMixedState;
+    return ((NSButton)view).state() == OS.NSOnState;
+}
+
+/**
+ * Returns the receiver's text, which will be an empty
+ * string if it has never been set or if the receiver is
+ * an <code>ARROW</code> button.
+ *
+ * @return the receiver's text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getText () {
+	checkWidget ();
+	return text;
+}
+
+boolean isDescribedByLabel () {
+	return false;
+}
+
+/*
+ * Feature in Cocoa.  If a checkbox is in multi-state mode, nextState cycles from off to mixed to on and back to off again.
+ * This will cause the on state to momentarily appear while clicking on the checkbox. To avoid this, we override [NSCell nextState]
+ * to go directly to the desired state if we have a grayed checkbox.
+ */
+int /*long*/ nextState(int /*long*/ id, int /*long*/ sel) {
+	if ((style & SWT.CHECK) != 0 && grayed) {
+		return ((NSButton)view).state() == OS.NSMixedState ? OS.NSOffState : OS.NSMixedState;
+	}
+
+	return super.nextState(id, sel);	
+}
+
+void register() {
+	super.register();
+	display.addWidget(((NSControl)view).cell(), this);
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	image = null;
+	text = null;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener(SelectionListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook(SWT.Selection, listener);
+	eventTable.unhook(SWT.DefaultSelection,listener);
+}
+
+void selectRadio () {
+	/*
+	* This code is intentionally commented.  When two groups
+	* of radio buttons with the same parent are separated by
+	* another control, the correct behavior should be that
+	* the two groups act independently.  This is consistent
+	* with radio tool and menu items.  The commented code
+	* implements this behavior.
+	*/
+//	int index = 0;
+//	Control [] children = parent._getChildren ();
+//	while (index < children.length && children [index] != this) index++;
+//	int i = index - 1;
+//	while (i >= 0 && children [i].setRadioSelection (false)) --i;
+//	int j = index + 1;
+//	while (j < children.length && children [j].setRadioSelection (false)) j++;
+//	setSelection (true);
+	Control [] children = parent._getChildren ();
+	for (int i=0; i<children.length; i++) {
+		Control child = children [i];
+		if (this != child) child.setRadioSelection (false);
+	}
+	setSelection (true);
+}
+
+void sendSelection () {
+	if ((style & SWT.RADIO) != 0) {
+		if ((parent.getStyle () & SWT.NO_RADIO_GROUP) == 0) {
+			selectRadio ();
+		}
+	}
+	if ((style & SWT.CHECK) != 0) {
+		if (grayed && ((NSButton)view).state() == OS.NSOnState) {
+			((NSButton)view).setState(OS.NSOffState);
+		}
+		if (!grayed && ((NSButton)view).state() == OS.NSMixedState) {
+			((NSButton)view).setState(OS.NSOnState);
+		}
+	}
+	postEvent (SWT.Selection);
+}
+
+
+/**
+ * Controls how text, images and arrows will be displayed
+ * in the receiver. The argument should be one of
+ * <code>LEFT</code>, <code>RIGHT</code> or <code>CENTER</code>
+ * unless the receiver is an <code>ARROW</code> button, in 
+ * which case, the argument indicates the direction of
+ * the arrow (one of <code>LEFT</code>, <code>RIGHT</code>, 
+ * <code>UP</code> or <code>DOWN</code>).
+ *
+ * @param alignment the new alignment 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setAlignment (int alignment) {
+	checkWidget ();
+	_setAlignment (alignment);
+	redraw ();
+}
+
+void _setAlignment (int alignment) {
+	if ((style & SWT.ARROW) != 0) {
+		if ((style & (SWT.UP | SWT.DOWN | SWT.LEFT | SWT.RIGHT)) == 0) return; 
+		style &= ~(SWT.UP | SWT.DOWN | SWT.LEFT | SWT.RIGHT);
+		style |= alignment & (SWT.UP | SWT.DOWN | SWT.LEFT | SWT.RIGHT);
+//		int orientation = OS.kThemeDisclosureRight;
+//		if ((style & SWT.UP) != 0) orientation = OS.kThemeDisclosureUp;
+//		if ((style & SWT.DOWN) != 0) orientation = OS.kThemeDisclosureDown;
+//		if ((style & SWT.LEFT) != 0) orientation = OS.kThemeDisclosureLeft;
+//		OS.SetControl32BitValue (handle, orientation);
+		return;
+	}
+	if ((alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER)) == 0) return;
+	style &= ~(SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+	style |= alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+	/* text is still null when this is called from createHandle() */
+	if (text != null) {
+		((NSButton)view).setAttributedTitle(createString());
+	}
+//	/* Alignment not honoured when image and text is visible */
+//	boolean bothVisible = text != null && text.length () > 0 && image != null;
+//	if (bothVisible) {
+//		if ((style & (SWT.RADIO | SWT.CHECK)) != 0) alignment = SWT.LEFT;
+//		if ((style & (SWT.PUSH | SWT.TOGGLE)) != 0) alignment = SWT.CENTER;
+//	}
+//	int textAlignment = 0;
+//	int graphicAlignment = 0;
+//	if ((alignment & SWT.LEFT) != 0) {
+//		textAlignment = OS.kControlBevelButtonAlignTextFlushLeft;
+//		graphicAlignment = OS.kControlBevelButtonAlignLeft;
+//	}
+//	if ((alignment & SWT.CENTER) != 0) {
+//		textAlignment = OS.kControlBevelButtonAlignTextCenter;
+//		graphicAlignment = OS.kControlBevelButtonAlignCenter;
+//	}
+//	if ((alignment & SWT.RIGHT) != 0) {
+//		textAlignment = OS.kControlBevelButtonAlignTextFlushRight;
+//		graphicAlignment = OS.kControlBevelButtonAlignRight;
+//	}
+//	OS.SetControlData (handle, OS.kControlEntireControl, OS.kControlBevelButtonTextAlignTag, 2, new short [] {(short)textAlignment});
+//	OS.SetControlData (handle, OS.kControlEntireControl, OS.kControlBevelButtonGraphicAlignTag, 2, new short [] {(short)graphicAlignment});
+//	if (bothVisible) {
+//		OS.SetControlData (handle, OS.kControlEntireControl, OS.kControlBevelButtonTextPlaceTag, 2, new short [] {(short)OS.kControlBevelButtonPlaceToRightOfGraphic});
+//	}
+}
+
+void updateBackground () {
+	NSColor nsColor = null;
+	if (backgroundImage != null) {
+		nsColor = NSColor.colorWithPatternImage(backgroundImage.handle);
+	} else if (background != null) {
+		nsColor = NSColor.colorWithDeviceRed(background[0], background[1], background[2], background[3]);
+	} else {
+		return;	// TODO set to OS default
+	}
+	NSButtonCell cell = new NSButtonCell(((NSButton)view).cell());
+	cell.setBackgroundColor(nsColor);
+}
+
+void setFont (NSFont font) {
+	if (text != null) {
+		((NSButton)view).setAttributedTitle(createString());
+	}
+}
+
+void setForeground (float /*double*/ [] color) {
+	((NSButton)view).setAttributedTitle(createString());
+}
+
+/**
+ * Sets the grayed state of the receiver.  This state change 
+ * only applies if the control was created with the SWT.CHECK
+ * style.
+ *
+ * @param grayed the new grayed state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public void setGrayed(boolean grayed) {
+	checkWidget ();
+	if ((style & SWT.CHECK) == 0) return;
+	boolean checked = getSelection ();
+	this.grayed = grayed;
+	((NSButton) view).setAllowsMixedState(grayed);
+
+	if (checked) {
+		if (grayed) {
+			((NSButton) view).setState (OS.NSMixedState);
+		} else {
+			((NSButton) view).setState (OS.NSOnState);
+		}
+	}
+}
+
+/**
+ * Sets the receiver's image to the argument, which may be
+ * <code>null</code> indicating that no image should be displayed.
+ * <p>
+ * Note that a Button can display an image and text simultaneously
+ * on Windows (starting with XP), GTK+ and OSX.  On other platforms,
+ * a Button that has an image and text set into it will display the
+ * image or text that was set most recently.
+ * </p>
+ * @param image the image to display on the receiver (may be <code>null</code>)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li>
+ * </ul> 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setImage (Image image) {
+	checkWidget();
+	if (image != null && image.isDisposed ()) {
+		error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	if ((style & SWT.ARROW) != 0) return;
+	this.image = image;
+	if ((style & (SWT.RADIO|SWT.CHECK)) == 0) {
+		/*
+		 * Feature in Cocoa.  If the NSImage object being set into the button is
+		 * the same NSImage object that is already there then the button does not
+		 * redraw itself.  This results in the button's image not visually updating
+		 * if the NSImage object's content has changed since it was last set
+		 * into the button.  The workaround is to explicitly redraw the button.
+		 */
+		((NSButton)view).setImage(image != null ? image.handle : null);
+		view.setNeedsDisplay(true);
+	} else {
+		((NSButton)view).setAttributedTitle(createString());
+	}
+	updateAlignment ();
+}
+
+boolean setRadioSelection (boolean value){
+	if ((style & SWT.RADIO) == 0) return false;
+	if (getSelection () != value) {
+		setSelection (value);
+		postEvent (SWT.Selection);
+	}
+	return true;
+}
+
+/**
+ * Sets the selection state of the receiver, if it is of type <code>CHECK</code>, 
+ * <code>RADIO</code>, or <code>TOGGLE</code>.
+ *
+ * <p>
+ * When the receiver is of type <code>CHECK</code> or <code>RADIO</code>,
+ * it is selected when it is checked. When it is of type <code>TOGGLE</code>,
+ * it is selected when it is pushed in.
+ *
+ * @param selected the new selection state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (boolean selected) {
+	checkWidget();
+	if ((style & (SWT.CHECK | SWT.RADIO | SWT.TOGGLE)) == 0) return;
+	if (grayed) {
+		((NSButton)view).setState (selected ? OS.NSMixedState : OS.NSOffState);
+	} else {
+		((NSButton)view).setState (selected ? OS.NSOnState : OS.NSOffState);
+	}
+}
+
+/**
+ * Sets the receiver's text.
+ * <p>
+ * This method sets the button label.  The label may include
+ * the mnemonic character but must not contain line delimiters.
+ * </p>
+ * <p>
+ * Mnemonics are indicated by an '&amp;' that causes the next
+ * character to be the mnemonic.  When the user presses a
+ * key sequence that matches the mnemonic, a selection
+ * event occurs. On most platforms, the mnemonic appears
+ * underlined but may be emphasized in a platform specific
+ * manner.  The mnemonic indicator character '&amp;' can be
+ * escaped by doubling it in the string, causing a single
+ * '&amp;' to be displayed.
+ * </p><p>
+ * Note that a Button can display an image and text simultaneously
+ * on Windows (starting with XP), GTK+ and OSX.  On other platforms,
+ * a Button that has an image and text set into it will display the
+ * image or text that was set most recently.
+ * </p>
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setText (String string) {
+	checkWidget();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if ((style & SWT.ARROW) != 0) return;
+	text = string;
+	((NSButton)view).setAttributedTitle(createString());
+	updateAlignment ();
+}
+
+NSRect titleRectForBounds (int /*long*/ id, int /*long*/ sel, NSRect cellFrame) {
+	NSRect rect = super.titleRectForBounds(id, sel, cellFrame);
+	if (image != null && ((style & (SWT.CHECK|SWT.RADIO)) !=0)) {
+		NSSize imageSize = image.handle.size();
+		rect.x += imageSize.width + IMAGE_GAP; 
+		rect.width -= (imageSize.width + IMAGE_GAP);
+		rect.width = Math.max(0f, rect.width);
+	}
+	return rect;
+}
+
+int traversalCode (int key, NSEvent theEvent) {
+	int code = super.traversalCode (key, theEvent);
+	if ((style & SWT.ARROW) != 0) code &= ~(SWT.TRAVERSE_TAB_NEXT | SWT.TRAVERSE_TAB_PREVIOUS);
+	if ((style & SWT.RADIO) != 0) code |= SWT.TRAVERSE_ARROW_NEXT | SWT.TRAVERSE_ARROW_PREVIOUS;
+	return code;
+}
+
+void updateAlignment () {
+	NSButton widget = (NSButton)view;
+	if ((style & (SWT.PUSH | SWT.TOGGLE)) != 0) {
+		if (text.length() != 0 && image != null) {
+			widget.setImagePosition(OS.NSImageLeft);
+		} else {	
+			widget.setImagePosition(text.length() != 0 ? OS.NSNoImage : OS.NSImageOnly);		
+		}
+	}
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Canvas.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Canvas.java
new file mode 100755
index 0000000..97a2300
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Canvas.java
@@ -0,0 +1,512 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class provide a surface for drawing
+ * arbitrary graphics.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * This class may be subclassed by custom control implementors
+ * who are building controls that are <em>not</em> constructed
+ * from aggregates of other controls. That is, they are either
+ * painted using SWT graphics calls or are handled by native
+ * methods.
+ * </p>
+ *
+ * @see Composite
+ * @see <a href="http://www.eclipse.org/swt/snippets/#canvas">Canvas snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public class Canvas extends Composite {
+	Caret caret;
+	IME ime;
+	NSOpenGLContext context;
+
+Canvas () {
+	/* Do nothing */
+}
+
+int /*long*/ attributedSubstringFromRange (int /*long*/ id, int /*long*/ sel, int /*long*/ range) {
+	if (ime != null) return ime.attributedSubstringFromRange (id, sel, range);
+	return super.attributedSubstringFromRange(id, sel, range);
+}
+
+void sendFocusEvent(int type) {
+	if (caret != null) {
+		if (type == SWT.FocusIn) {
+			caret.setFocus();	
+		} else {
+			caret.killFocus();
+		}
+	}
+	super.sendFocusEvent(type);
+}
+
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Canvas (Composite parent, int style) {
+	super (parent, style);
+}
+
+int /*long*/ characterIndexForPoint (int /*long*/ id, int /*long*/ sel, int /*long*/ point) {
+	if (ime != null) return ime.characterIndexForPoint (id, sel, point);
+	return super.characterIndexForPoint (id, sel, point);
+}
+
+/** 
+ * Fills the interior of the rectangle specified by the arguments,
+ * with the receiver's background. 
+ *
+ * @param gc the gc where the rectangle is to be filled
+ * @param x the x coordinate of the rectangle to be filled
+ * @param y the y coordinate of the rectangle to be filled
+ * @param width the width of the rectangle to be filled
+ * @param height the height of the rectangle to be filled
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the gc is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the gc has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void drawBackground (GC gc, int x, int y, int width, int height) {
+	checkWidget ();
+	if (gc == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	Control control = findBackgroundControl ();
+	if (control != null) {
+		NSRect rect = new NSRect();
+		rect.x = x;
+		rect.y = y;
+		rect.width = width;
+		rect.height = height;
+		int imgHeight = -1;
+		GCData data = gc.getGCData();
+		if (data.image != null) imgHeight =  data.image.getBounds().height;
+		NSGraphicsContext context = gc.handle;
+		if (data.flippedContext != null) {
+			NSGraphicsContext.static_saveGraphicsState();
+			NSGraphicsContext.setCurrentContext(context);
+		}
+		control.fillBackground (view, context, rect, imgHeight);
+		if (data.flippedContext != null) {
+			NSGraphicsContext.static_restoreGraphicsState();
+		}
+	} else {
+		gc.fillRectangle (x, y, width, height);
+	}
+}
+
+void drawRect (int /*long*/ id, int /*long*/ sel, NSRect rect) {
+	if (context != null && context.view() == null) context.setView(view);
+	super.drawRect(id, sel, rect);
+}
+
+void drawWidget (int /*long*/ id, NSGraphicsContext context, NSRect rect) {
+	if (id != view.id) return;
+	super.drawWidget (id, context, rect);
+	if (caret == null) return;
+	if (caret.isShowing) {
+		Image image = caret.image;
+		if (image != null) {
+			NSImage imageHandle = image.handle;
+			NSImageRep imageRep = imageHandle.bestRepresentationForDevice(null);
+			if (!imageRep.isKindOfClass(OS.class_NSBitmapImageRep)) return;
+			NSBitmapImageRep rep = new NSBitmapImageRep(imageRep);
+			CGRect destRect = new CGRect ();
+			destRect.origin.x = caret.x;
+			destRect.origin.y = caret.y;
+		 	NSSize size = imageHandle.size();
+			destRect.size.width = size.width;
+			destRect.size.height = size.height;
+		 	int /*long*/ data = rep.bitmapData();
+		 	int /*long*/ bpr = rep.bytesPerRow();
+			int alphaInfo = rep.hasAlpha() ? OS.kCGImageAlphaFirst : OS.kCGImageAlphaNoneSkipFirst;
+		 	int /*long*/ provider = OS.CGDataProviderCreateWithData(0, data, bpr * (int)size.height, 0);
+			int /*long*/ colorspace = OS.CGColorSpaceCreateDeviceRGB();
+			int /*long*/ cgImage = OS.CGImageCreate((int)size.width, (int)size.height, rep.bitsPerSample(), rep.bitsPerPixel(), bpr, colorspace, alphaInfo, provider, 0, true, 0);
+			OS.CGColorSpaceRelease(colorspace);
+			OS.CGDataProviderRelease(provider);
+			int /*long*/ ctx = context.graphicsPort();
+			OS.CGContextSaveGState(ctx);
+		 	OS.CGContextScaleCTM (ctx, 1, -1);
+		 	OS.CGContextTranslateCTM (ctx, 0, -(size.height + 2 * destRect.origin.y));
+			OS.CGContextSetBlendMode (ctx, OS.kCGBlendModeDifference);
+			OS.CGContextDrawImage (ctx, destRect, cgImage);
+			OS.CGContextRestoreGState(ctx);
+		 	OS.CGImageRelease(cgImage);			
+		} else {
+			context.saveGraphicsState();
+			context.setCompositingOperation(OS.NSCompositeXOR);
+			NSRect drawRect = new NSRect();
+			drawRect.x = caret.x;
+			drawRect.y = caret.y;
+			drawRect.width = caret.width != 0 ? caret.width : Caret.DEFAULT_WIDTH;
+			drawRect.height = caret.height;
+			context.setShouldAntialias(false);
+			NSColor color = NSColor.colorWithDeviceRed(1, 1, 1, 1);
+			color.set();
+			NSBezierPath.fillRect(drawRect);
+			context.restoreGraphicsState();
+		}
+	}
+}
+
+NSRect firstRectForCharacterRange (int /*long*/ id, int /*long*/ sel, int /*long*/ range) {
+	if (ime != null) return ime.firstRectForCharacterRange (id, sel, range);
+	return super.firstRectForCharacterRange (id, sel, range);
+}
+
+/**
+ * Returns the caret.
+ * <p>
+ * The caret for the control is automatically hidden
+ * and shown when the control is painted or resized,
+ * when focus is gained or lost and when an the control
+ * is scrolled.  To avoid drawing on top of the caret,
+ * the programmer must hide and show the caret when
+ * drawing in the window any other time.
+ * </p>
+ *
+ * @return the caret for the receiver, may be null
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Caret getCaret () {
+	checkWidget();
+    return caret;
+}
+
+/**
+ * Returns the IME.
+ *
+ * @return the IME
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public IME getIME () {
+	checkWidget();
+    return ime;
+}
+
+boolean hasMarkedText (int /*long*/ id, int /*long*/ sel) {
+	if (ime != null) return ime.hasMarkedText (id, sel);
+	return super.hasMarkedText (id, sel);
+}
+
+boolean imeInComposition () {
+	return ime != null && ime.isInlineEnabled () && ime.startOffset != -1;
+}
+
+boolean insertText (int /*long*/ id, int /*long*/ sel, int /*long*/ string) {
+	if (ime != null) {
+		if (!ime.insertText (id, sel, string)) return false;
+	}
+	return super.insertText (id, sel, string);
+}
+
+boolean isOpaque (int /*long*/ id, int /*long*/ sel) {
+	if (context != null) return true;
+	return super.isOpaque(id, sel);
+}
+
+NSRange markedRange (int /*long*/ id, int /*long*/ sel) {
+	if (ime != null) return ime.markedRange (id, sel);
+	return super.markedRange (id, sel);
+}
+
+void releaseChildren (boolean destroy) {
+	if (caret != null) {
+		caret.release (false);
+		caret = null;
+	}
+	if (ime != null) {
+		ime.release (false);
+		ime = null;
+	}
+	super.releaseChildren (destroy);
+}
+
+/**
+ * Scrolls a rectangular area of the receiver by first copying 
+ * the source area to the destination and then causing the area
+ * of the source which is not covered by the destination to
+ * be repainted. Children that intersect the rectangle are
+ * optionally moved during the operation. In addition, outstanding
+ * paint events are flushed before the source area is copied to
+ * ensure that the contents of the canvas are drawn correctly.
+ *
+ * @param destX the x coordinate of the destination
+ * @param destY the y coordinate of the destination
+ * @param x the x coordinate of the source
+ * @param y the y coordinate of the source
+ * @param width the width of the area
+ * @param height the height of the area
+ * @param all <code>true</code>if children should be scrolled, and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void scroll (int destX, int destY, int x, int y, int width, int height, boolean all) {
+	checkWidget();
+	if (width <= 0 || height <= 0) return;
+	int deltaX = destX - x, deltaY = destY - y;
+	if (deltaX == 0 && deltaY == 0) return;
+	if (!isDrawing ()) return;
+	NSRect visibleRect = view.visibleRect();
+	if (visibleRect.width <= 0 || visibleRect.height <= 0) return;
+	boolean isFocus = caret != null && caret.isFocusCaret ();
+	if (isFocus) caret.killFocus ();
+	Rectangle clientRect = getClientArea ();
+	Rectangle sourceRect = new Rectangle (x, y, width, height);
+	if (sourceRect.intersects (clientRect)) {
+		update (all);
+	}
+	Control control = findBackgroundControl ();
+	boolean redraw = control != null && control.backgroundImage != null;
+	if (!redraw) redraw = isObscured ();
+	if (redraw) {
+		redrawWidget (view, x, y, width, height, false);
+		redrawWidget (view, destX, destY, width, height, false);
+	} else {
+		NSRect damage = new NSRect();
+		damage.x = x;
+		damage.y = y;
+		damage.width = width;
+		damage.height = height;
+		NSPoint dest = new NSPoint();
+		dest.x = destX;
+		dest.y = destY;
+
+		view.lockFocus();
+		OS.NSCopyBits(0, damage , dest);
+		view.unlockFocus();
+
+		boolean disjoint = (destX + width < x) || (x + width < destX) || (destY + height < y) || (y + height < destY);
+		if (disjoint) {
+			view.setNeedsDisplayInRect(damage);
+		} else {
+			if (deltaX != 0) {
+				int newX = destX - deltaX;
+				if (deltaX < 0) newX = destX + width;
+				damage.x = newX;
+				damage.width = Math.abs(deltaX);
+				view.setNeedsDisplayInRect(damage);
+			}
+			if (deltaY != 0) {
+				int newY = destY - deltaY;
+				if (deltaY < 0) newY = destY + height;
+				damage.x = x;
+				damage.y = newY;
+				damage.width = width;
+				damage.height =  Math.abs (deltaY);
+				view.setNeedsDisplayInRect(damage);
+			}
+		}
+
+		NSRect srcRect = new NSRect();
+		srcRect.x = sourceRect.x;
+		srcRect.y = sourceRect.y;
+		srcRect.width = sourceRect.width;
+		srcRect.height = sourceRect.height;
+		OS.NSIntersectionRect(visibleRect, visibleRect, srcRect);
+
+		if (!OS.NSEqualRects(visibleRect, srcRect)) {
+			if (srcRect.x != visibleRect.x) {
+				damage.x = srcRect.x + deltaX;
+				damage.y = srcRect.y + deltaY;
+				damage.width = visibleRect.x - srcRect.x;
+				damage.height = srcRect.height;
+				view.setNeedsDisplayInRect(damage);
+			} 
+			if (visibleRect.x + visibleRect.width != srcRect.x + srcRect.width) {
+				damage.x = srcRect.x + visibleRect.width + deltaX;
+				damage.y = srcRect.y + deltaY;
+				damage.width = srcRect.width - visibleRect.width;
+				damage.height = srcRect.height;
+				view.setNeedsDisplayInRect(damage);
+			}
+			if (visibleRect.y != srcRect.y) {
+				damage.x = visibleRect.x + deltaX;
+				damage.y = srcRect.y + deltaY;
+				damage.width = visibleRect.width;
+				damage.height = visibleRect.y - srcRect.y;
+				view.setNeedsDisplayInRect(damage);
+			}
+			if (visibleRect.y + visibleRect.height != srcRect.y + srcRect.height) {
+				damage.x = visibleRect.x + deltaX;
+				damage.y = visibleRect.y + visibleRect.height + deltaY;
+				damage.width = visibleRect.width;
+				damage.height = srcRect.y + srcRect.height - (visibleRect.y + visibleRect.height);
+				view.setNeedsDisplayInRect(damage);
+			}
+		}
+	}
+
+    if (all) {
+		Control [] children = _getChildren ();
+		for (int i=0; i<children.length; i++) {
+			Control child = children [i];
+			Rectangle rect = child.getBounds ();
+			if (Math.min(x + width, rect.x + rect.width) >= Math.max (x, rect.x) && 
+				Math.min(y + height, rect.y + rect.height) >= Math.max (y, rect.y)) {
+					child.setLocation (rect.x + deltaX, rect.y + deltaY);
+			}
+		}
+	}
+	if (isFocus) caret.setFocus ();
+}
+
+NSRange selectedRange (int /*long*/ id, int /*long*/ sel) {
+	if (ime != null) return ime.selectedRange (id, sel);
+	return super.selectedRange (id, sel);
+}
+
+boolean sendKeyEvent (NSEvent nsEvent, int type) {
+	if (caret != null) NSCursor.setHiddenUntilMouseMoves (true);
+	return super.sendKeyEvent (nsEvent, type);
+}
+
+/**
+ * Sets the receiver's caret.
+ * <p>
+ * The caret for the control is automatically hidden
+ * and shown when the control is painted or resized,
+ * when focus is gained or lost and when an the control
+ * is scrolled.  To avoid drawing on top of the caret,
+ * the programmer must hide and show the caret when
+ * drawing in the window any other time.
+ * </p>
+ * @param caret the new caret for the receiver, may be null
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the caret has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setCaret (Caret caret) {
+	checkWidget();
+	Caret newCaret = caret;
+	Caret oldCaret = this.caret;
+	this.caret = newCaret;
+	if (hasFocus ()) {
+		if (oldCaret != null) oldCaret.killFocus ();
+		if (newCaret != null) {
+			if (newCaret.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
+			newCaret.setFocus ();
+		}
+	}
+}
+
+public void setFont (Font font) {
+	checkWidget ();
+	if (caret != null) caret.setFont (font);
+	super.setFont (font);
+}
+
+void setOpenGLContext(Object value) {
+	context = (NSOpenGLContext)value;
+}
+
+/**
+ * Sets the receiver's IME.
+ * 
+ * @param ime the new IME for the receiver, may be null
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the IME has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public void setIME (IME ime) {
+	checkWidget ();
+	if (ime != null && ime.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
+	this.ime = ime;
+}
+
+boolean setMarkedText_selectedRange (int /*long*/ id, int /*long*/ sel, int /*long*/ string, int /*long*/ range) {
+	if (ime != null) {
+		if (!ime.setMarkedText_selectedRange (id, sel, string, range)) return false;
+	}
+	return super.setMarkedText_selectedRange (id, sel, string, range);
+}
+
+int /*long*/ validAttributesForMarkedText (int /*long*/ id, int /*long*/ sel) {
+	if (ime != null) return ime.validAttributesForMarkedText (id, sel);
+	return super.validAttributesForMarkedText(id, sel);
+}
+
+void updateOpenGLContext(int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
+	if (context != null) ((NSOpenGLContext)context).update();
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Caret.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Caret.java
new file mode 100755
index 0000000..410caaa
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Caret.java
@@ -0,0 +1,505 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.cocoa.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class provide an i-beam that is typically used
+ * as the insertion point for text.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#caret">Caret snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Canvas tab</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Caret extends Widget {
+	Canvas parent;
+	int x, y, width, height;
+	boolean isVisible, isShowing;
+	int blinkRate;
+	Image image;
+	Font font;
+
+	static final int DEFAULT_WIDTH	= 1;
+	
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Caret (Canvas parent, int style) {
+	super (parent, style);
+	this.parent = parent;
+	createWidget ();
+}
+
+boolean blinkCaret () {
+	if (!isVisible) return true;
+	if (!isShowing) return showCaret ();
+	if (blinkRate == 0) return true;
+	return hideCaret ();
+}
+
+void createWidget () {
+	super.createWidget ();
+	blinkRate = display.getCaretBlinkTime ();
+	isVisible = true;
+	if (parent.getCaret () == null) {
+		parent.setCaret (this);
+	}
+}
+
+boolean drawCaret () {
+	if (parent == null) return false;
+	if (parent.isDisposed ()) return false;
+	int nWidth = width, nHeight = height;
+	if (nWidth <= 0) nWidth = DEFAULT_WIDTH;
+	if (image != null) {
+		NSSize size = image.handle.size();
+		nWidth = (int)size.width;
+		nHeight = (int)size.height;
+	}
+	NSRect rect = new NSRect();
+	rect.x = x;
+	rect.y = y;
+	rect.width = nWidth;
+	rect.height = nHeight;
+	parent.view.setNeedsDisplayInRect(rect);
+	return true;
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location
+ * relative to its parent (or its display if its parent is null).
+ *
+ * @return the receiver's bounding rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Rectangle getBounds () {
+	checkWidget();
+	if (image != null) {
+		Rectangle rect = image.getBounds ();
+		return new Rectangle (x, y, rect.width, rect.height);
+	} else {
+		if (width == 0) {
+			return new Rectangle (x, y, DEFAULT_WIDTH, height);
+		}
+	}
+	return new Rectangle (x, y, width, height);
+}
+
+/**
+ * Returns the font that the receiver will use to paint textual information.
+ *
+ * @return the receiver's font
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Font getFont () {
+	checkWidget();
+	if (font != null) return font;
+	return parent.getFont ();
+}
+
+/**
+ * Returns the image that the receiver will use to paint the caret.
+ *
+ * @return the receiver's image
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Image getImage () {
+	checkWidget();
+	return image;
+}
+
+/**
+ * Returns a point describing the receiver's location relative
+ * to its parent (or its display if its parent is null).
+ *
+ * @return the receiver's location
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Point getLocation () {
+	checkWidget();
+	return new Point (x, y);
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>Canvas</code>.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Canvas getParent () {
+	checkWidget();
+	return parent;
+}
+
+/**
+ * Returns a point describing the receiver's size.
+ *
+ * @return the receiver's size
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Point getSize () {
+	checkWidget();
+	if (image != null) {
+		Rectangle rect = image.getBounds ();
+		return new Point (rect.width, rect.height);
+	} else {
+		if (width == 0) {
+			return new Point (DEFAULT_WIDTH, height);
+		}
+	}
+	return new Point (width, height);
+}
+
+/**
+ * Returns <code>true</code> if the receiver is visible, and
+ * <code>false</code> otherwise.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, this method
+ * may still indicate that it is considered visible even though
+ * it may not actually be showing.
+ * </p>
+ *
+ * @return the receiver's visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getVisible () {
+	checkWidget();
+	return isVisible;
+}
+
+boolean hideCaret () {
+	if (!isShowing) return true;
+	isShowing = false;
+	return drawCaret ();
+}
+
+/**
+ * Returns <code>true</code> if the receiver is visible and all
+ * of the receiver's ancestors are visible and <code>false</code>
+ * otherwise.
+ *
+ * @return the receiver's visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getVisible
+ */
+public boolean isVisible () {
+	checkWidget();
+	return isVisible && parent.isVisible () && parent.hasFocus ();
+}
+
+boolean isFocusCaret () {
+	return this == display.currentCaret;
+}
+
+void killFocus () {
+	if (display.currentCaret != this) return;
+	display.setCurrentCaret (null);
+	if (isVisible) hideCaret ();
+}
+
+void releaseParent () {
+	super.releaseParent ();
+	if (this == parent.getCaret ()) parent.setCaret (null);
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	if (display.currentCaret == this) {
+		hideCaret ();
+		display.setCurrentCaret (null);
+	}
+	parent = null;
+	image = null;
+}
+
+/**
+ * Sets the receiver's size and location to the rectangular
+ * area specified by the arguments. The <code>x</code> and 
+ * <code>y</code> arguments are relative to the receiver's
+ * parent (or its display if its parent is null).
+ *
+ * @param x the new x coordinate for the receiver
+ * @param y the new y coordinate for the receiver
+ * @param width the new width for the receiver
+ * @param height the new height for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setBounds (int x, int y, int width, int height) {
+	checkWidget();
+	if (this.x == x && this.y == y && this.width == width && this.height == height) return;
+	boolean isFocus = isFocusCaret ();
+	if (isFocus && isVisible) hideCaret ();
+	this.x = x;
+	this.y = y;
+	this.width = width;
+	this.height = height;
+	if (isFocus && isVisible) showCaret ();
+}
+
+/**
+ * Sets the receiver's size and location to the rectangular
+ * area specified by the argument. The <code>x</code> and 
+ * <code>y</code> fields of the rectangle are relative to
+ * the receiver's parent (or its display if its parent is null).
+ *
+ * @param rect the new bounds for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setBounds (Rectangle rect) {
+	checkWidget();
+	if (rect == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setBounds (rect.x, rect.y, rect.width, rect.height);
+}
+
+void setFocus () {
+	if (display.currentCaret == this) return;
+	display.setCurrentCaret (this);
+	if (isVisible) showCaret ();
+}
+
+/**
+ * Sets the font that the receiver will use to paint textual information
+ * to the font specified by the argument, or to the default font for that
+ * kind of control if the argument is null.
+ *
+ * @param font the new font (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the font has been disposed</li>
+ * </ul> 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setFont (Font font) {
+	checkWidget();
+	if (font != null && font.isDisposed ()) {
+		error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	this.font = font;
+}
+
+/**
+ * Sets the image that the receiver will use to paint the caret
+ * to the image specified by the argument, or to the default
+ * which is a filled rectangle if the argument is null
+ *
+ * @param image the new image (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li>
+ * </ul> 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setImage (Image image) {
+	checkWidget();
+	if (image != null && image.isDisposed ()) {
+		error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	boolean isFocus = isFocusCaret ();
+	if (isFocus && isVisible) hideCaret ();
+	this.image = image;
+	if (isFocus && isVisible) showCaret ();
+}
+
+/**
+ * Sets the receiver's location to the point specified by
+ * the arguments which are relative to the receiver's
+ * parent (or its display if its parent is null).
+ *
+ * @param x the new x coordinate for the receiver
+ * @param y the new y coordinate for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setLocation (int x, int y) {
+	checkWidget();
+	setBounds (x, y, width, height);
+}
+
+/**
+ * Sets the receiver's location to the point specified by
+ * the argument which is relative to the receiver's
+ * parent (or its display if its parent is null).
+ *
+ * @param location the new location for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setLocation (Point location) {
+	checkWidget();
+	if (location == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setLocation (location.x, location.y);
+}
+
+/**
+ * Sets the receiver's size to the point specified by the arguments.
+ *
+ * @param width the new width for the receiver
+ * @param height the new height for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSize (int width, int height) {
+	checkWidget();
+	setBounds (x, y, width, height);
+}
+
+/**
+ * Sets the receiver's size to the point specified by the argument.
+ *
+ * @param size the new extent for the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSize (Point size) {
+	checkWidget();
+	if (size == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setSize (size.x, size.y);
+}
+
+/**
+ * Marks the receiver as visible if the argument is <code>true</code>,
+ * and marks it invisible otherwise. 
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, marking
+ * it visible may not actually cause it to be displayed.
+ * </p>
+ *
+ * @param visible the new visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setVisible (boolean visible) {
+	checkWidget();
+	if (visible == isVisible) return;
+	isVisible = visible;
+	if (!isFocusCaret ()) return;
+	if (isVisible) {
+		showCaret ();
+	} else {
+		hideCaret ();
+	}
+}
+
+boolean showCaret () {
+	if (isShowing) return true;
+	isShowing = true;
+	return drawCaret ();
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ColorDialog.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ColorDialog.java
new file mode 100755
index 0000000..6ae406f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ColorDialog.java
@@ -0,0 +1,165 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class allow the user to select a color
+ * from a predefined set of available colors.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class ColorDialog extends Dialog {
+	RGB rgb;
+	boolean selected;
+
+/**
+ * Constructs a new instance of this class given only its parent.
+ *
+ * @param parent a composite control which will be the parent of the new instance
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public ColorDialog(Shell parent) {
+	this(parent, SWT.APPLICATION_MODAL);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public ColorDialog(Shell parent, int style) {
+	super (parent, checkStyle (parent, style));
+	checkSubclass ();
+}
+
+void changeColor(int /*long*/ id, int /*long*/ sel, int /*long*/ sender) {
+	selected = true;
+}
+
+/**
+ * Returns the currently selected color in the receiver.
+ *
+ * @return the RGB value for the selected color, may be null
+ *
+ * @see PaletteData#getRGBs
+ */
+public RGB getRGB() {
+	return rgb;
+}
+
+/**
+ * Makes the receiver visible and brings it to the front
+ * of the display.
+ *
+ * @return the selected color, or null if the dialog was
+ *         cancelled, no color was selected, or an error
+ *         occurred
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public RGB open() {	
+	NSColorPanel panel = NSColorPanel.sharedColorPanel();
+	if (rgb != null) {
+		NSColor color = NSColor.colorWithDeviceRed(rgb.red / 255f, rgb.green / 255f, rgb.blue / 255f, 1);
+		panel.setColor(color);
+	}
+	SWTPanelDelegate delegate = (SWTPanelDelegate)new SWTPanelDelegate().alloc().init();
+	int /*long*/ jniRef = OS.NewGlobalRef(this);
+	if (jniRef == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	OS.object_setInstanceVariable(delegate.id, Display.SWT_OBJECT, jniRef);
+	panel.setDelegate(delegate);
+	rgb = null;
+	selected = false;
+	panel.orderFront(null);
+	NSApplication.sharedApplication().runModalForWindow(panel);
+	panel.setDelegate(null);
+	delegate.release();
+	OS.DeleteGlobalRef(jniRef);
+	if (selected) {
+		NSColor color = panel.color();
+		if (color != null) {
+			color = color.colorUsingColorSpaceName(OS.NSCalibratedRGBColorSpace);
+			rgb = new RGB((int)(color.redComponent() * 255), (int)(color.greenComponent() * 255), (int)(color.blueComponent() * 255));
+		}
+	}
+	return rgb;
+}
+
+/**
+ * Sets the receiver's selected color to be the argument.
+ *
+ * @param rgb the new RGB value for the selected color, may be
+ *        null to let the platform select a default when
+ *        open() is called
+ * @see PaletteData#getRGBs
+ */
+public void setRGB(RGB rgb) {
+	this.rgb = rgb;
+}
+
+void windowWillClose(int /*long*/ id, int /*long*/ sel, int /*long*/ sender) {
+	NSApplication.sharedApplication().stop(null);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Combo.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Combo.java
new file mode 100755
index 0000000..2773e1b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Combo.java
@@ -0,0 +1,1617 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class are controls that allow the user
+ * to choose an item from a list of items, or optionally 
+ * enter a new value by typing it into an editable text
+ * field. Often, <code>Combo</code>s are used in the same place
+ * where a single selection <code>List</code> widget could
+ * be used but space is limited. A <code>Combo</code> takes
+ * less space than a <code>List</code> widget and shows
+ * similar information.
+ * <p>
+ * Note: Since <code>Combo</code>s can contain both a list
+ * and an editable text field, it is possible to confuse methods
+ * which access one versus the other (compare for example,
+ * <code>clearSelection()</code> and <code>deselectAll()</code>).
+ * The API documentation is careful to indicate either "the
+ * receiver's list" or the "the receiver's text field" to 
+ * distinguish between the two cases.
+ * </p><p>
+ * Note that although this class is a subclass of <code>Composite</code>,
+ * it does not make sense to add children to it, or set a layout on it.
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>DROP_DOWN, READ_ONLY, SIMPLE</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>DefaultSelection, Modify, Selection, Verify</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles DROP_DOWN and SIMPLE may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see List
+ * @see <a href="http://www.eclipse.org/swt/snippets/#combo">Combo snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Combo extends Composite {
+	int textLimit = LIMIT;
+	boolean receivingFocus;
+	boolean ignoreVerify, ignoreSelection;
+	NSRange selectionRange;
+
+	/**
+	 * the operating system limit for the number of characters
+	 * that the text field in an instance of this class can hold
+	 */
+	public static final int LIMIT;
+	
+	/*
+	* These values can be different on different platforms.
+	* Therefore they are not initialized in the declaration
+	* to stop the compiler from inlining.
+	*/
+	static {
+		LIMIT = 0x7FFFFFFF;
+	}
+	
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#DROP_DOWN
+ * @see SWT#READ_ONLY
+ * @see SWT#SIMPLE
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Combo (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+/**
+ * Adds the argument to the end of the receiver's list.
+ *
+ * @param string the new item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #add(String,int)
+ */
+public void add (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	NSString str = NSString.stringWith(string);
+	if ((style & SWT.READ_ONLY) != 0) {
+		NSPopUpButton widget = (NSPopUpButton)view;
+		int /*long*/ selection = widget.indexOfSelectedItem();
+		NSMenu nsMenu = widget.menu();
+		NSMenuItem nsItem = (NSMenuItem)new NSMenuItem().alloc();
+		nsItem.initWithTitle(str, 0, NSString.stringWith(""));
+		nsMenu.addItem(nsItem);
+		nsItem.release();
+		if (selection == -1) widget.selectItemAtIndex(-1);
+	} else {
+		((NSComboBox)view).addItemWithObjectValue(str);
+	}
+}
+
+/**
+ * Adds the argument to the receiver's list at the given
+ * zero-relative index.
+ * <p>
+ * Note: To add an item at the end of the list, use the
+ * result of calling <code>getItemCount()</code> as the
+ * index or use <code>add(String)</code>.
+ * </p>
+ *
+ * @param string the new item
+ * @param index the index for the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #add(String)
+ */
+public void add (String string, int index) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int count = getItemCount ();
+	if (0 > index || index > count) error (SWT.ERROR_INVALID_RANGE);
+	NSString str = NSString.stringWith(string);
+	if ((style & SWT.READ_ONLY) != 0) {
+		NSPopUpButton widget = (NSPopUpButton)view;
+		int /*long*/ selection = widget.indexOfSelectedItem();
+		NSMenu nsMenu = widget.menu();
+		NSMenuItem nsItem = (NSMenuItem)new NSMenuItem().alloc();
+		nsItem.initWithTitle(str, 0, NSString.stringWith(""));
+		nsMenu.insertItem(nsItem, index);
+		nsItem.release();
+		if (selection == -1) widget.selectItemAtIndex(-1);
+	} else {
+		((NSComboBox)view).insertItemWithObjectValue(str, index);
+	}
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the receiver's text is modified, by sending
+ * it one of the messages defined in the <code>ModifyListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ModifyListener
+ * @see #removeModifyListener
+ */
+public void addModifyListener (ModifyListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Modify, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the user changes the receiver's selection, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is called when the user changes the combo's list selection.
+ * <code>widgetDefaultSelected</code> is typically called when ENTER is pressed the combo's text area.
+ * </p>
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener(SelectionListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the receiver's text is verified, by sending
+ * it one of the messages defined in the <code>VerifyListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see VerifyListener
+ * @see #removeVerifyListener
+ * 
+ * @since 3.1
+ */
+public void addVerifyListener (VerifyListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Verify, typedListener);
+}
+
+boolean becomeFirstResponder (int /*long*/ id, int /*long*/ sel) {
+	receivingFocus = true;
+	boolean result = super.becomeFirstResponder (id, sel);
+	receivingFocus = false;
+	return result;
+}
+
+static int checkStyle (int style) {
+	/*
+	* Feature in Windows.  It is not possible to create
+	* a combo box that has a border using Windows style
+	* bits.  All combo boxes draw their own border and
+	* do not use the standard Windows border styles.
+	* Therefore, no matter what style bits are specified,
+	* clear the BORDER bits so that the SWT style will
+	* match the Windows widget.
+	*
+	* The Windows behavior is currently implemented on
+	* all platforms.
+	*/
+	style &= ~SWT.BORDER;
+
+	/*
+	* Even though it is legal to create this widget
+	* with scroll bars, they serve no useful purpose
+	* because they do not automatically scroll the
+	* widget's client area.  The fix is to clear
+	* the SWT style.
+	*/
+	style &= ~(SWT.H_SCROLL | SWT.V_SCROLL);
+	style = checkBits (style, SWT.DROP_DOWN, SWT.SIMPLE, 0, 0, 0, 0);
+	if ((style & SWT.SIMPLE) != 0) return style & ~SWT.READ_ONLY;
+	return style;
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+/**
+ * Sets the selection in the receiver's text field to an empty
+ * selection starting just before the first character. If the
+ * text field is editable, this has the effect of placing the
+ * i-beam at the start of the text.
+ * <p>
+ * Note: To clear the selected items in the receiver's list, 
+ * use <code>deselectAll()</code>.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #deselectAll
+ */
+public void clearSelection () {
+	checkWidget();
+	if ((style & SWT.READ_ONLY) == 0) {
+		Point selection = getSelection ();
+		selection.y = selection.x;
+		setSelection (selection);
+	}
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget ();
+	int width = 0, height = 0;
+	NSControl widget = (NSControl)view;
+	NSCell viewCell = widget.cell ();
+	NSSize size = viewCell.cellSize ();
+	width = (int)Math.ceil (size.width);
+	height = (int)Math.ceil (size.height);
+
+	if ((style & SWT.READ_ONLY) == 0) {
+		ignoreVerify = true;
+		NSComboBoxCell cell = new NSComboBoxCell (viewCell.id);
+		NSArray array = cell.objectValues ();
+		int length = (int)/*64*/array.count ();
+		if (length > 0) {
+			cell = new NSComboBoxCell (cell.copy ());
+			for (int i = 0; i < length; i++) {
+				id object = array.objectAtIndex (i);
+				cell.setTitle (new NSString (object));
+				size = cell.cellSize ();
+				width = Math.max (width, (int)Math.ceil (size.width));
+			}
+			cell.release ();
+		}
+		ignoreVerify = false;
+	}
+
+	/*
+	* Feature in Cocoa.  Attempting to create an NSComboBox with a
+	* height > 27 spews a very long warning message to stdout and
+	* often draws the combo incorrectly.  The workaround is to limit
+	* the returned height of editable Combos to the height that is
+	* required to display their text, even if a larger hHint is specified.
+	*/
+	if (hHint != SWT.DEFAULT) {
+		if ((style & SWT.READ_ONLY) != 0 || hHint < height) height = hHint;
+	}
+	if (wHint != SWT.DEFAULT) width = wHint;
+	return new Point (width, height);
+}
+
+/**
+ * Copies the selected text.
+ * <p>
+ * The current selection is copied to the clipboard.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.1
+ */
+public void copy () {
+	checkWidget ();
+	Point selection = getSelection ();
+	if (selection.x == selection.y) return;
+	copyToClipboard (getText (selection.x, selection.y));
+}
+
+void createHandle () {
+	if ((style & SWT.READ_ONLY) != 0) {
+		NSPopUpButton widget = (NSPopUpButton)new SWTPopUpButton().alloc();
+		widget.initWithFrame(new NSRect(), false);
+		widget.menu().setAutoenablesItems(false);
+		widget.setTarget(widget);
+		widget.setAction(OS.sel_sendSelection);
+		view = widget;
+	} else {
+		NSComboBox widget = (NSComboBox)new SWTComboBox().alloc();
+		widget.init();
+		widget.setDelegate(widget);
+		widget.setTarget(widget);
+		widget.setAction(OS.sel_sendSelection);
+		view = widget;
+	}
+}
+
+/**
+ * Cuts the selected text.
+ * <p>
+ * The current selection is first copied to the
+ * clipboard and then deleted from the widget.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.1
+ */
+public void cut () {
+	checkWidget ();
+	if ((style & SWT.READ_ONLY) != 0) return;
+	Point selection = getSelection ();
+	if (selection.x == selection.y) return;
+	int start = selection.x, end = selection.y;
+	String text = getText ();
+	String leftText = text.substring (0, start);
+	String rightText = text.substring (end, text.length ());
+	String oldText = text.substring (start, end);
+	String newText = "";
+	if (hooks (SWT.Verify) || filters (SWT.Verify)) {
+		newText = verifyText (newText, start, end, null);
+		if (newText == null) return;
+	}
+	char [] buffer = new char [oldText.length ()];
+	oldText.getChars (0, buffer.length, buffer, 0);
+	copyToClipboard (buffer);
+	setText (leftText + newText + rightText, false);
+	start += newText.length ();
+	setSelection (new Point (start, start));
+	sendEvent (SWT.Modify);
+}
+
+Color defaultBackground () {
+    return display.getWidgetColor (SWT.COLOR_LIST_BACKGROUND);
+}
+
+NSFont defaultNSFont() {
+	if ((style & SWT.READ_ONLY) != 0) return display.popUpButtonFont;		
+	return display.comboBoxFont;
+}
+
+Color defaultForeground () {
+    return display.getWidgetColor (SWT.COLOR_LIST_FOREGROUND);
+}
+
+void deregister() {
+	super.deregister();
+	display.removeWidget(((NSControl)view).cell());
+}
+
+/**
+ * Deselects the item at the given zero-relative index in the receiver's 
+ * list.  If the item at the index was already deselected, it remains
+ * deselected. Indices that are out of range are ignored.
+ *
+ * @param index the index of the item to deselect
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void deselect (int index) {
+	checkWidget ();
+	if (index == -1) return;
+	if (index == getSelectionIndex ()) {
+		if ((style & SWT.READ_ONLY) != 0) {
+			((NSPopUpButton)view).selectItem(null);
+			sendEvent (SWT.Modify);
+		} else {
+			((NSComboBox)view).deselectItemAtIndex(index);
+		}
+	}
+}
+
+/**
+ * Deselects all selected items in the receiver's list.
+ * <p>
+ * Note: To clear the selection in the receiver's text field,
+ * use <code>clearSelection()</code>.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #clearSelection
+ */
+public void deselectAll () {
+	checkWidget ();
+	if ((style & SWT.READ_ONLY) != 0) {
+		((NSPopUpButton)view).selectItem(null);
+		sendEvent (SWT.Modify);
+	} else {
+		NSComboBox widget = (NSComboBox)view;
+		int /*long*/ index = widget.indexOfSelectedItem();
+		if (index != -1) widget.deselectItemAtIndex(index);
+	}
+}
+
+boolean dragDetect(int x, int y, boolean filter, boolean[] consume) {
+	if ((style & SWT.READ_ONLY) == 0) {
+		NSText fieldEditor = ((NSControl)view).currentEditor();
+		if (fieldEditor != null) {
+			NSRange selectedRange = fieldEditor.selectedRange();
+			if (selectedRange.length > 0) {
+				NSPoint mouseLocation = NSEvent.mouseLocation();
+				NSTextView feAsTextView = new NSTextView(fieldEditor);
+				int /*long*/ charPosition = feAsTextView.characterIndexForInsertionAtPoint(mouseLocation);
+				if (charPosition != OS.NSNotFound && charPosition >= selectedRange.location && charPosition < (selectedRange.location + selectedRange.length)) {
+					if (super.dragDetect(x, y, filter, consume)) {
+						if (consume != null) consume[0] = true;
+						return true;
+					}
+				}	
+			}
+		}
+		return false;
+	}
+	
+	return super.dragDetect(x, y, filter, consume);
+}
+
+int getCharCount() {
+	NSString str;
+	if ((style & SWT.READ_ONLY) != 0) {
+		str = ((NSPopUpButton)view).titleOfSelectedItem();
+	} else {
+		str = new NSCell(((NSComboBox)view).cell()).title();
+	}
+	if (str == null) return 0;
+	return (int)/*64*/str.length();
+}
+
+/**
+ * Returns the item at the given, zero-relative index in the
+ * receiver's list. Throws an exception if the index is out
+ * of range.
+ *
+ * @param index the index of the item to return
+ * @return the item at the given index
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getItem (int index) {
+	checkWidget ();
+	int count = getItemCount ();
+	if (0 > index || index >= count) error (SWT.ERROR_INVALID_RANGE);
+	NSString str;
+	if ((style & SWT.READ_ONLY) != 0) {
+		str = ((NSPopUpButton)view).itemTitleAtIndex(index);
+	} else {
+		str = new NSString(((NSComboBox)view).itemObjectValueAtIndex(index));
+	}
+	if (str == null) error(SWT.ERROR_CANNOT_GET_ITEM);
+	return str.getString();
+}
+
+/**
+ * Returns the number of items contained in the receiver's list.
+ *
+ * @return the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemCount () {
+	checkWidget ();
+	if ((style & SWT.READ_ONLY) != 0) {
+		return (int)/*64*/((NSPopUpButton)view).numberOfItems();
+	} else {
+		return (int)/*64*/((NSComboBox)view).numberOfItems();
+	}
+}
+
+/**
+ * Returns the height of the area which would be used to
+ * display <em>one</em> of the items in the receiver's list.
+ *
+ * @return the height of one item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemHeight () {
+	checkWidget ();
+	//TODO - not supported by the OS
+	return 26;
+}
+
+/**
+ * Returns a (possibly empty) array of <code>String</code>s which are
+ * the items in the receiver's list. 
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the items in the receiver's list
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String [] getItems () {
+	checkWidget ();
+	int count = getItemCount ();
+	String [] result = new String [count];
+	for (int i=0; i<count; i++) result [i] = getItem (i);
+	return result;
+}
+
+/**
+ * Returns <code>true</code> if the receiver's list is visible,
+ * and <code>false</code> otherwise.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, this method
+ * may still indicate that it is considered visible even though
+ * it may not actually be showing.
+ * </p>
+ *
+ * @return the receiver's list's visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public boolean getListVisible () {
+	//TODO
+	return false;
+}
+
+int getMininumHeight () {
+	return getTextHeight ();
+}
+
+/**
+ * Returns the orientation of the receiver.
+ *
+ * @return the orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.1.2
+ */
+public int getOrientation () {
+	checkWidget();
+	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+}
+
+/**
+ * Returns a <code>Point</code> whose x coordinate is the
+ * character position representing the start of the selection
+ * in the receiver's text field, and whose y coordinate is the
+ * character position representing the end of the selection.
+ * An "empty" selection is indicated by the x and y coordinates
+ * having the same value.
+ * <p>
+ * Indexing is zero based.  The range of a selection is from
+ * 0..N where N is the number of characters in the widget.
+ * </p>
+ *
+ * @return a point representing the selection start and end
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Point getSelection () {
+	checkWidget ();
+	if ((style & SWT.READ_ONLY) != 0) {
+		return new Point (0, getCharCount ());
+	} else {
+		if (selectionRange == null) {
+			NSString str = new NSTextFieldCell (((NSTextField) view).cell ()).title ();
+			return new Point((int)/*64*/str.length (), (int)/*64*/str.length ());
+		}
+		return new Point((int)/*64*/selectionRange.location, (int)/*64*/(selectionRange.location + selectionRange.length));
+	}
+}
+
+/**
+ * Returns the zero-relative index of the item which is currently
+ * selected in the receiver's list, or -1 if no item is selected.
+ *
+ * @return the index of the selected item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelectionIndex () {
+	checkWidget ();
+	if ((style & SWT.READ_ONLY) != 0) {
+		return (int)/*64*/((NSPopUpButton)view).indexOfSelectedItem();
+	} else {
+		return (int)/*64*/((NSComboBox)view).indexOfSelectedItem();
+	}
+}
+
+/**
+ * Returns a string containing a copy of the contents of the
+ * receiver's text field, or an empty string if there are no
+ * contents.
+ *
+ * @return the receiver's text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getText () {
+	checkWidget ();
+	return new String (getText(0, -1));
+}
+
+char [] getText (int start, int end) {
+	NSString str;
+	if ((style & SWT.READ_ONLY) != 0) {
+		str = ((NSPopUpButton)view).titleOfSelectedItem();
+	} else {
+		str = new NSCell(((NSComboBox)view).cell()).title();
+	}
+	if (str == null) return new char[0];
+	NSRange range = new NSRange ();
+	range.location = start;
+	if (end == -1) {
+		int /*long*/ length = str.length();
+		range.length = length - start;
+	} else {
+		range.length = end - start;
+	}
+	char [] buffer= new char [(int)/*64*/range.length];
+	str.getCharacters(buffer, range);
+	return buffer;
+}
+
+/**
+ * Returns the height of the receivers's text field.
+ *
+ * @return the text height
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getTextHeight () {
+	checkWidget();
+	NSCell cell;
+	if ((style & SWT.READ_ONLY) != 0) {
+		cell = ((NSPopUpButton)view).cell();
+	} else {
+		cell = ((NSComboBox)view).cell();
+	}
+	return (int)cell.cellSize().height;
+}
+
+/**
+ * Returns the maximum number of characters that the receiver's
+ * text field is capable of holding. If this has not been changed
+ * by <code>setTextLimit()</code>, it will be the constant
+ * <code>Combo.LIMIT</code>.
+ * 
+ * @return the text limit
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #LIMIT
+ */
+public int getTextLimit () {
+	checkWidget();
+    return textLimit;
+}
+
+/**
+ * Gets the number of items that are visible in the drop
+ * down portion of the receiver's list.
+ * <p>
+ * Note: This operation is a hint and is not supported on
+ * platforms that do not have this concept.
+ * </p>
+ *
+ * @return the number of items that are visible
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public int getVisibleItemCount () {
+	checkWidget ();
+	if ((style & SWT.READ_ONLY) != 0) {
+		return getItemCount ();
+	} else {
+		return (int)/*64*/((NSComboBox)view).numberOfVisibleItems();
+	}
+}
+	
+/**
+ * Searches the receiver's list starting at the first item
+ * (index 0) until an item is found that is equal to the 
+ * argument, and returns the index of that item. If no item
+ * is found, returns -1.
+ *
+ * @param string the search item
+ * @return the index of the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int indexOf (String string) {
+	return indexOf (string, 0);
+}
+
+/**
+ * Searches the receiver's list starting at the given, 
+ * zero-relative index until an item is found that is equal
+ * to the argument, and returns the index of that item. If
+ * no item is found or the starting index is out of range,
+ * returns -1.
+ *
+ * @param string the search item
+ * @param start the zero-relative index at which to begin the search
+ * @return the index of the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int indexOf (String string, int start) {
+	checkWidget();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int count = getItemCount ();
+	if (!(0 <= start && start < count)) return -1;
+	for (int i=start; i<count; i++) {
+		if (string.equals (getItem (i))) {
+			return i;
+		}
+	}
+	return -1;
+}
+
+void insertEditText (String string) {
+	ignoreVerify = true;
+	int length = string.length ();
+	Point selection = getSelection ();
+	if (hasFocus ()) {
+		if (textLimit != LIMIT) {
+			int charCount = getCharCount();
+			if (charCount - (selection.y - selection.x) + length > textLimit) {
+				length = textLimit - charCount + (selection.y - selection.x);
+			}
+		}
+		char [] buffer = new char [length];
+		string.getChars (0, buffer.length, buffer, 0);
+		NSString nsstring = NSString.stringWithCharacters (buffer, buffer.length);
+		NSText fieldEditor = ((NSTextField) view).currentEditor ();
+		fieldEditor.replaceCharactersInRange (fieldEditor.selectedRange (), nsstring);
+		selectionRange = null;
+	} else {
+		String oldText = getText ();
+		if (textLimit != LIMIT) {
+			int charCount = oldText.length ();
+			if (charCount - (selection.y - selection.x) + length > textLimit) {
+				string = string.substring(0, textLimit - charCount + (selection.y - selection.x));
+			}
+		}
+		String newText = oldText.substring (0, selection.x) + string + oldText.substring (selection.y);
+		NSString nsstring = NSString.stringWith(newText);
+		new NSCell (((NSTextField) view).cell ()).setTitle (nsstring);
+		selectionRange = null;
+		setSelection (new Point(selection.x + string.length (), 0));
+	}
+	ignoreVerify = false;
+}
+
+boolean isEventView (int /*long*/ id) {
+	return true;
+}
+
+void mouseDown(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	// If this is a combo box with an editor field and the control is disposed
+	// while the view's cell editor is open we crash while tearing down the
+	// popup window. Fix is to retain the view before letting Cocoa track
+	// the mouse events.
+	
+	// 'view' will be cleared if disposed during the mouseDown so cache it.
+	NSView viewCopy = view;
+	viewCopy.retain();
+	super.mouseDown(id, sel, theEvent);
+	viewCopy.release();
+}
+
+/**
+ * Pastes text from clipboard.
+ * <p>
+ * The selected text is deleted from the widget
+ * and new text inserted from the clipboard.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.1
+ */
+public void paste () {
+	checkWidget ();
+	if ((style & SWT.READ_ONLY) != 0) return;
+	Point selection = getSelection ();
+	int start = selection.x, end = selection.y;
+	String text = getText ();
+	String leftText = text.substring (0, start);
+	String rightText = text.substring (end, text.length ());
+	String newText = getClipboardText ();
+	if (newText == null) return;
+	if (hooks (SWT.Verify) || filters (SWT.Verify)) {
+		newText = verifyText (newText, start, end, null);
+		if (newText == null) return;
+	}
+	if (textLimit != LIMIT) {
+		int charCount = text.length ();
+		if (charCount - (end - start) + newText.length() > textLimit) {
+			newText = newText.substring(0, textLimit - charCount + (end - start));
+		}
+	}
+	setText (leftText + newText + rightText, false);
+	start += newText.length ();
+	setSelection (new Point (start, start));
+	sendEvent (SWT.Modify);
+}
+
+void register() {
+	super.register();
+	display.addWidget(((NSControl)view).cell(), this);
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	if ((style & SWT.READ_ONLY) == 0) {
+		((NSControl)view).abortEditing();
+	}
+	selectionRange = null;
+}
+
+/**
+ * Removes the item from the receiver's list at the given
+ * zero-relative index.
+ *
+ * @param index the index for the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void remove (int index) {
+	checkWidget ();
+	if (index == -1) error (SWT.ERROR_INVALID_RANGE);
+	int count = getItemCount ();
+	if (0 > index || index >= count) error (SWT.ERROR_INVALID_RANGE);
+	if ((style & SWT.READ_ONLY) != 0) {
+		((NSPopUpButton)view).removeItemAtIndex(index);
+	} else {
+		((NSComboBox)view).removeItemAtIndex(index);
+	}
+}
+
+/**
+ * Removes the items from the receiver's list which are
+ * between the given zero-relative start and end 
+ * indices (inclusive).
+ *
+ * @param start the start of the range
+ * @param end the end of the range
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if either the start or end are not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void remove (int start, int end) {
+	checkWidget();
+	if (start > end) return;
+	int count = getItemCount ();
+	if (!(0 <= start && start <= end && end < count)) {
+		error (SWT.ERROR_INVALID_RANGE);
+	}
+	int newEnd = Math.min (end, count - 1);
+	for (int i=newEnd; i>=start; i--) {
+		remove(i);
+	}
+}
+
+/**
+ * Searches the receiver's list starting at the first item
+ * until an item is found that is equal to the argument, 
+ * and removes that item from the list.
+ *
+ * @param string the item to remove
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the string is not found in the list</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void remove (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int index = indexOf (string, 0);
+	if (index == -1) error (SWT.ERROR_INVALID_ARGUMENT);
+	remove (index);
+}
+
+/**
+ * Removes all of the items from the receiver's list and clear the
+ * contents of receiver's text field.
+ * <p>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void removeAll () {
+	checkWidget ();
+	if ((style & SWT.READ_ONLY) != 0) {
+		((NSPopUpButton)view).removeAllItems();
+	} else {
+		setText ("", true);
+		((NSComboBox)view).removeAllItems();
+	}
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the receiver's text is modified.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ModifyListener
+ * @see #addModifyListener
+ */
+public void removeModifyListener (ModifyListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Modify, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the user changes the receiver's selection.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener (SelectionListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is verified.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see VerifyListener
+ * @see #addVerifyListener
+ * 
+ * @since 3.1
+ */
+public void removeVerifyListener (VerifyListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Verify, listener);
+}
+
+/**
+ * Selects the item at the given zero-relative index in the receiver's 
+ * list.  If the item at the index was already selected, it remains
+ * selected. Indices that are out of range are ignored.
+ *
+ * @param index the index of the item to select
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void select (int index) {
+	checkWidget ();
+	int count = getItemCount ();
+	ignoreSelection = true;
+	if (0 <= index && index < count) {
+		if ((style & SWT.READ_ONLY) != 0) {
+			((NSPopUpButton)view).selectItemAtIndex(index);
+		} else {
+			((NSComboBox)view).selectItemAtIndex(index);
+		}
+	}
+	ignoreSelection = false;
+	sendEvent (SWT.Modify);
+}
+
+void sendSelection () {
+	sendEvent(SWT.Modify);
+	if (!ignoreSelection) postEvent(SWT.Selection);
+}
+
+boolean sendKeyEvent (NSEvent nsEvent, int type) {
+	boolean result = super.sendKeyEvent (nsEvent, type);
+	if (!result) return result;
+	int stateMask = 0;
+	int /*long*/ modifierFlags = nsEvent.modifierFlags();
+	if ((modifierFlags & OS.NSAlternateKeyMask) != 0) stateMask |= SWT.ALT;
+	if ((modifierFlags & OS.NSShiftKeyMask) != 0) stateMask |= SWT.SHIFT;
+	if ((modifierFlags & OS.NSControlKeyMask) != 0) stateMask |= SWT.CONTROL;
+	if ((modifierFlags & OS.NSCommandKeyMask) != 0) stateMask |= SWT.COMMAND;
+	if (type != SWT.KeyDown)  return result;
+	short keyCode = nsEvent.keyCode ();
+	if (stateMask == SWT.COMMAND) {
+		switch (keyCode) {
+			case 7: /* X */
+				cut ();
+				return false;
+			case 8: /* C */
+				copy ();
+				return false;
+			case 9: /* V */
+				paste ();
+				return false;
+			case 0: /* A */
+				if ((style & SWT.READ_ONLY) == 0) {
+					((NSComboBox)view).selectText(null);
+					return false;
+				}
+		}
+	}
+	switch (keyCode) {
+	case 76: /* KP Enter */
+	case 36: /* Return */
+		postEvent (SWT.DefaultSelection);
+	}
+	return result;
+}
+
+void updateBackground () {
+	NSColor nsColor = null;
+	if (backgroundImage != null) {
+		nsColor = NSColor.colorWithPatternImage(backgroundImage.handle);
+	} else if (background != null) {
+		nsColor = NSColor.colorWithDeviceRed(background[0], background[1], background[2], background[3]);
+	} else {
+		nsColor = NSColor.textBackgroundColor ();
+	}
+
+	if ((style & SWT.READ_ONLY) != 0) {
+		//TODO
+	} else {
+		((NSTextField)view).setBackgroundColor(nsColor);
+	}
+}
+
+void setBounds (int x, int y, int width, int height, boolean move, boolean resize) {
+	/*
+	 * Feature in Cocoa.  Attempting to create an NSComboBox with a
+	 * height > 27 spews a very long warning message to stdout and
+	 * often draws the combo incorrectly.  The workaround is to limit
+	 * the height of editable Combos to the height that is required
+	 * to display their text.
+	 */
+	if ((style & SWT.READ_ONLY) == 0) {
+		NSControl widget = (NSControl)view;
+		NSSize size = widget.cell ().cellSize ();
+		height = Math.min (height, (int)Math.ceil (size.height));
+	}
+	super.setBounds (x, y, width, height, move, resize);
+}
+
+void setForeground (float /*double*/ [] color) {
+	NSColor nsColor;
+	if (color == null) {
+		nsColor = NSColor.textColor ();
+	} else {
+		nsColor = NSColor.colorWithDeviceRed(color[0], color[1], color[2], 1);
+	}
+	if ((style & SWT.READ_ONLY) != 0) {
+		//TODO
+	} else {
+		((NSTextField)view).setTextColor(nsColor);
+	}
+}
+
+/**
+ * Sets the text of the item in the receiver's list at the given
+ * zero-relative index to the string argument.
+ *
+ * @param index the index for the item
+ * @param string the new text for the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setItem (int index, String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int count = getItemCount ();
+	if (0 > index || index >= count) error (SWT.ERROR_INVALID_RANGE);
+	NSString str = NSString.stringWith(string);
+	if ((style & SWT.READ_ONLY) != 0) {
+		NSMenuItem nsItem = ((NSPopUpButton)view).itemAtIndex(index);
+		nsItem.setTitle(str);
+	} else {
+		NSComboBox widget = (NSComboBox)view;
+		widget.insertItemWithObjectValue(str, index);
+		widget.removeItemAtIndex(index + 1);
+	}
+}
+
+/**
+ * Sets the receiver's list to be the given array of items.
+ *
+ * @param items the array of items
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the items array is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if an item in the items array is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setItems (String [] items) {
+	checkWidget();
+	if (items == null) error (SWT.ERROR_NULL_ARGUMENT);
+	for (int i=0; i<items.length; i++) {
+		if (items [i] == null) error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	removeAll();
+	if (items.length == 0) return;
+	for (int i= 0; i < items.length; i++) {
+		NSString str = NSString.stringWith(items[i]);
+		if ((style & SWT.READ_ONLY) != 0) {
+			NSMenu nsMenu = ((NSPopUpButton)view).menu();
+			NSMenuItem nsItem = (NSMenuItem)new NSMenuItem().alloc();
+			nsItem.initWithTitle(str, 0, NSString.stringWith(""));
+			nsMenu.addItem(nsItem);
+			nsItem.release();
+			//clear the selection
+			((NSPopUpButton)view).selectItemAtIndex(-1);
+		} else {
+			((NSComboBox)view).addItemWithObjectValue(str);
+		}
+	}
+}
+
+/**
+ * Marks the receiver's list as visible if the argument is <code>true</code>,
+ * and marks it invisible otherwise.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, marking
+ * it visible may not actually cause it to be displayed.
+ * </p>
+ *
+ * @param visible the new visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public void setListVisible (boolean visible) {
+	checkWidget ();
+	if ((style & SWT.READ_ONLY) != 0) {
+		((NSPopUpButton)view).setPullsDown(visible);
+	} else {
+	}
+}
+
+/**
+ * Sets the orientation of the receiver, which must be one
+ * of the constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ * <p>
+ *
+ * @param orientation new orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.1.2
+ */
+public void setOrientation (int orientation) {
+	checkWidget();
+}
+
+/**
+ * Sets the selection in the receiver's text field to the
+ * range specified by the argument whose x coordinate is the
+ * start of the selection and whose y coordinate is the end
+ * of the selection. 
+ *
+ * @param selection a point representing the new selection start and end
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (Point selection) {
+	checkWidget ();
+	if (selection == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if ((style & SWT.READ_ONLY) == 0) {
+		NSComboBox widget = (NSComboBox)view;
+		NSString str = new NSCell(widget.cell()).title();
+		int length = (int)/*64*/str.length();
+		int start = Math.min (Math.max (Math.min (selection.x, selection.y), 0), length);
+		int end = Math.min (Math.max (Math.max (selection.x, selection.y), 0), length);
+		selectionRange = new NSRange();
+		selectionRange.location = start;
+		selectionRange.length = end - start;
+		NSText fieldEditor = widget.currentEditor();
+		if (fieldEditor != null) fieldEditor.setSelectedRange(selectionRange);
+	}
+}
+
+/**
+ * Sets the contents of the receiver's text field to the
+ * given string.
+ * <p>
+ * This call is ignored when the receiver is read only and 
+ * the given string is not in the receiver's list.
+ * </p>
+ * <p>
+ * Note: The text field in a <code>Combo</code> is typically
+ * only capable of displaying a single line of text. Thus,
+ * setting the text to a string containing line breaks or
+ * other special characters will probably cause it to 
+ * display incorrectly.
+ * </p>
+ *
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setText (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setText (string, true);
+}
+
+void setText (String string, boolean notify) {
+	ignoreVerify = true;
+	if (notify) {
+		if (hooks (SWT.Verify) || filters (SWT.Verify)) {
+			string = verifyText (string, 0, getCharCount (), null);
+			if (string == null) return;
+		}
+	}
+	if ((style & SWT.READ_ONLY) != 0) {
+		int index = indexOf (string);
+		if (index != -1 && index != getSelectionIndex ()) {
+			select (index);
+			if (notify) sendEvent (SWT.Modify);
+		}
+	} else {
+		char[] buffer = new char [Math.min(string.length (), textLimit)];
+		string.getChars (0, buffer.length, buffer, 0);
+		NSString nsstring = NSString.stringWithCharacters (buffer, buffer.length);
+		new NSCell(((NSComboBox)view).cell()).setTitle(nsstring);
+		if (notify) sendEvent (SWT.Modify);
+	}
+	selectionRange = null;
+	ignoreVerify = false;
+}
+
+/**
+ * Sets the maximum number of characters that the receiver's
+ * text field is capable of holding to be the argument.
+ * <p>
+ * To reset this value to the default, use <code>setTextLimit(Combo.LIMIT)</code>.
+ * Specifying a limit value larger than <code>Combo.LIMIT</code> sets the
+ * receiver's limit to <code>Combo.LIMIT</code>.
+ * </p>
+ * @param limit new text limit
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_CANNOT_BE_ZERO - if the limit is zero</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #LIMIT
+ */
+public void setTextLimit (int limit) {
+	checkWidget ();
+	if (limit == 0) error (SWT.ERROR_CANNOT_BE_ZERO);
+	textLimit = limit;
+}
+
+/**
+ * Sets the number of items that are visible in the drop
+ * down portion of the receiver's list.
+ * <p>
+ * Note: This operation is a hint and is not supported on
+ * platforms that do not have this concept.
+ * </p>
+ *
+ * @param count the new number of items to be visible
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void setVisibleItemCount (int count) {
+	checkWidget ();
+	if (count < 0) return;
+	if ((style & SWT.READ_ONLY) != 0) {
+		//TODO 
+	} else {
+		((NSComboBox)view).setNumberOfVisibleItems(count);
+	}
+}
+
+boolean shouldChangeTextInRange_replacementString(int /*long*/ id, int /*long*/ sel, int /*long*/ affectedCharRange, int /*long*/ replacementString) {
+	NSRange range = new NSRange();
+	OS.memmove(range, affectedCharRange, NSRange.sizeof);
+	boolean result = callSuperBoolean(id, sel, range, replacementString);
+	if (hooks (SWT.Verify)) {
+		String text = new NSString(replacementString).getString();
+		NSEvent currentEvent = display.application.currentEvent();
+		int /*long*/ type = currentEvent.type();
+		if (type != OS.NSKeyDown && type != OS.NSKeyUp) currentEvent = null;
+		String newText = verifyText(text, (int)/*64*/range.location, (int)/*64*/(range.location+range.length), currentEvent);
+		if (newText == null) return false;
+		if (text != newText) {
+			insertEditText(newText);
+			result = false;
+		}
+		if (!result) sendEvent (SWT.Modify);
+	}
+	return result;
+}
+
+void textViewDidChangeSelection(int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
+	NSNotification notification = new NSNotification(aNotification);
+	NSText editor = new NSText(notification.object().id);
+	selectionRange = editor.selectedRange();
+}
+
+void textDidChange (int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
+	super.textDidChange (id, sel, aNotification);
+	postEvent (SWT.Modify);
+}
+
+NSRange textView_willChangeSelectionFromCharacterRange_toCharacterRange(int /*long*/ id, int /*long*/ sel, int /*long*/ aTextView, int /*long*/ oldSelectedCharRange, int /*long*/ newSelectedCharRange) {
+	/*
+	* If the selection is changing as a result of the receiver getting focus
+	* then return the receiver's last selection range, otherwise the full
+	* text will be automatically selected.
+	*/
+	if (receivingFocus && selectionRange != null) return selectionRange;
+
+	/* allow the selection change to proceed */
+	NSRange result = new NSRange();
+	OS.memmove(result, newSelectedCharRange, NSRange.sizeof);
+	return result;
+}
+
+String verifyText (String string, int start, int end, NSEvent keyEvent) {
+	Event event = new Event ();
+	if (keyEvent != null) setKeyState(event, SWT.MouseDown, keyEvent);
+	event.text = string;
+	event.start = start;
+	event.end = end;
+	/*
+	 * It is possible (but unlikely), that application
+	 * code could have disposed the widget in the verify
+	 * event.  If this happens, answer null to cancel
+	 * the operation.
+	 */
+	sendEvent (SWT.Verify, event);
+	if (!event.doit || isDisposed ()) return null;
+	return event.text;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Composite.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Composite.java
new file mode 100755
index 0000000..2929e28
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Composite.java
@@ -0,0 +1,1005 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.accessibility.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class are controls which are capable
+ * of containing other controls.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>NO_BACKGROUND, NO_FOCUS, NO_MERGE_PAINTS, NO_REDRAW_RESIZE, NO_RADIO_GROUP, EMBEDDED, DOUBLE_BUFFERED</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * Note: The <code>NO_BACKGROUND</code>, <code>NO_FOCUS</code>, <code>NO_MERGE_PAINTS</code>,
+ * and <code>NO_REDRAW_RESIZE</code> styles are intended for use with <code>Canvas</code>.
+ * They can be used with <code>Composite</code> if you are drawing your own, but their
+ * behavior is undefined if they are used with subclasses of <code>Composite</code> other
+ * than <code>Canvas</code>.
+ * </p><p>
+ * Note: The <code>CENTER</code> style, although undefined for composites, has the
+ * same value as <code>EMBEDDED</code> which is used to embed widgets from other
+ * widget toolkits into SWT.  On some operating systems (GTK, Motif), this may cause
+ * the children of this composite to be obscured.
+ * </p><p>
+ * This class may be subclassed by custom control implementors
+ * who are building controls that are constructed from aggregates
+ * of other controls.
+ * </p>
+ *
+ * @see Canvas
+ * @see <a href="http://www.eclipse.org/swt/snippets/#composite">Composite snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public class Composite extends Scrollable {
+	Layout layout;
+	Control[] tabList;
+	int layoutCount, backgroundMode;
+	
+Composite () {
+	/* Do nothing */
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a widget which will be the parent of the new instance (cannot be null)
+ * @param style the style of widget to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ * </ul>
+ *
+ * @see SWT#NO_BACKGROUND
+ * @see SWT#NO_FOCUS
+ * @see SWT#NO_MERGE_PAINTS
+ * @see SWT#NO_REDRAW_RESIZE
+ * @see SWT#NO_RADIO_GROUP
+ * @see SWT#EMBEDDED
+ * @see SWT#DOUBLE_BUFFERED
+ * @see Widget#getStyle
+ */
+public Composite (Composite parent, int style) {
+	super (parent, style);
+}
+
+Control [] _getChildren () {
+	NSArray views = contentView().subviews();
+	int count = (int)/*64*/views.count();
+	Control [] children = new Control [count];
+	if (count == 0) return children;
+	int j = 0;
+	for (int i=0; i<count; i++){
+		Widget widget = display.getWidget (views.objectAtIndex (count - i - 1).id);
+		if (widget != null && widget != this && widget instanceof Control) {
+			children [j++] = (Control) widget;
+		}
+	}
+	if (j == count) return children;
+	Control [] newChildren = new Control [j];
+	System.arraycopy (children, 0, newChildren, 0, j);
+	return newChildren;
+}
+
+Control [] _getTabList () {
+	if (tabList == null) return null;
+	int count = 0;
+	for (int i=0; i<tabList.length; i++) {
+		if (!tabList [i].isDisposed ()) count++;
+	}
+	if (count == tabList.length) return tabList;
+	Control [] newList = new Control [count];
+	int index = 0;
+	for (int i=0; i<tabList.length; i++) {
+		if (!tabList [i].isDisposed ()) {
+			newList [index++] = tabList [i];
+		}
+	}
+	tabList = newList;
+	return tabList;
+}
+
+boolean acceptsFirstResponder (int /*long*/ id, int /*long*/ sel) {
+	if ((state & CANVAS) != 0) {
+		if ((style & SWT.NO_FOCUS) == 0 && hooksKeys ()) {
+			if (contentView().subviews().count() == 0) return true;
+		}
+		return false;
+	}
+	return super.acceptsFirstResponder (id, sel);
+}
+
+int /*long*/ accessibilityAttributeNames(int /*long*/ id, int /*long*/ sel) {
+	
+	if (id == view.id) {
+		if (accessible != null) {
+			// If there is an accessible, it may provide its own list of attributes if it's a lightweight control.
+			// If not, let Cocoa handle it for this view.
+			id returnObject = accessible.internal_accessibilityAttributeNames(ACC.CHILDID_SELF);
+			if (returnObject != null) return returnObject.id;
+		}
+	}
+	
+	return super.accessibilityAttributeNames(id, sel);
+}
+
+boolean accessibilityIsIgnored(int /*long*/ id, int /*long*/ sel) {
+	// If we have an accessible and it represents a valid accessible role, this view is not ignored.
+	if (view != null && id == view.id) {
+		if (accessible != null) {
+			id role = accessible.internal_accessibilityAttributeValue(OS.NSAccessibilityRoleAttribute, ACC.CHILDID_SELF);
+			if (role != null) return false; 
+		}
+	}
+
+	return super.accessibilityIsIgnored(id, sel);	
+}
+
+/**
+ * Clears any data that has been cached by a Layout for all widgets that 
+ * are in the parent hierarchy of the changed control up to and including the 
+ * receiver.  If an ancestor does not have a layout, it is skipped.
+ * 
+ * @param changed an array of controls that changed state and require a recalculation of size
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the changed array is null any of its controls are null or have been disposed</li> 
+ *    <li>ERROR_INVALID_PARENT - if any control in changed is not in the widget tree of the receiver</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.1
+ */
+public void changed (Control[] changed) {
+	checkWidget ();
+	if (changed == null) error (SWT.ERROR_INVALID_ARGUMENT);
+	for (int i=0; i<changed.length; i++) {
+		Control control = changed [i];
+		if (control == null) error (SWT.ERROR_INVALID_ARGUMENT);
+		if (control.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+		boolean ancestor = false;
+		Composite composite = control.parent;
+		while (composite != null) {
+			ancestor = composite == this;
+			if (ancestor) break;
+			composite = composite.parent;
+		}
+		if (!ancestor) error (SWT.ERROR_INVALID_PARENT);
+	}
+	for (int i=0; i<changed.length; i++) {
+		Control child = changed [i];
+		Composite composite = child.parent;
+		while (child != this) {
+			if (composite.layout == null || !composite.layout.flushCache (child)) {
+				composite.state |= LAYOUT_CHANGED;
+			}
+			child = composite;
+			composite = child.parent;
+		}
+	}
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget();
+	Point size;
+	if (layout != null) {
+		if ((wHint == SWT.DEFAULT) || (hHint == SWT.DEFAULT)) {
+			changed |= (state & LAYOUT_CHANGED) != 0;
+			size = layout.computeSize (this, wHint, hHint, changed);
+			state &= ~LAYOUT_CHANGED;
+		} else {
+			size = new Point (wHint, hHint);
+		}
+	} else {
+		size = minimumSize (wHint, hHint, changed);
+	}
+	if (size.x == 0) size.x = DEFAULT_WIDTH;
+	if (size.y == 0) size.y = DEFAULT_HEIGHT;
+	if (wHint != SWT.DEFAULT) size.x = wHint;
+	if (hHint != SWT.DEFAULT) size.y = hHint;
+	Rectangle trim = computeTrim (0, 0, size.x, size.y);
+	return new Point (trim.width, trim.height);
+}
+
+protected void checkSubclass () {
+	/* Do nothing - Subclassing is allowed */
+}
+
+Widget [] computeTabList () {
+	Widget result [] = super.computeTabList ();
+	if (result.length == 0) return result;
+	Control [] list = tabList != null ? _getTabList () : _getChildren ();
+	for (int i=0; i<list.length; i++) {
+		Control child = list [i];
+		Widget [] childList = child.computeTabList ();
+		if (childList.length != 0) {
+			Widget [] newResult = new Widget [result.length + childList.length];
+			System.arraycopy (result, 0, newResult, 0, result.length);
+			System.arraycopy (childList, 0, newResult, result.length, childList.length);
+			result = newResult;
+		}
+	}
+	return result;
+}
+
+void createHandle () {
+	state |= CANVAS;
+	boolean scrolled = (style & (SWT.V_SCROLL | SWT.H_SCROLL)) != 0;
+	if (!scrolled)  state |= THEME_BACKGROUND;
+	NSRect rect = new NSRect();
+	if (scrolled || hasBorder ()) {
+		NSScrollView scrollWidget = (NSScrollView)new SWTScrollView().alloc();
+		scrollWidget.initWithFrame (rect);
+		scrollWidget.setDrawsBackground(false);
+		if ((style & SWT.H_SCROLL) != 0) scrollWidget.setHasHorizontalScroller(true);
+		if ((style & SWT.V_SCROLL) != 0) scrollWidget.setHasVerticalScroller(true);
+		scrollWidget.setBorderType(hasBorder() ? OS.NSBezelBorder : OS.NSNoBorder);
+		scrollView = scrollWidget;
+	}
+	NSView widget = (NSView)new SWTCanvasView().alloc();
+	widget.initWithFrame (rect);
+//	widget.setFocusRingType(OS.NSFocusRingTypeExterior);
+	view = widget;
+	if (scrollView != null) {
+		NSClipView contentView = scrollView.contentView();
+		contentView.setAutoresizesSubviews(true);
+		view.setAutoresizingMask(OS.NSViewWidthSizable | OS.NSViewHeightSizable);
+	}
+}
+
+void drawBackground (int /*long*/ id, NSGraphicsContext context, NSRect rect) {
+	if (id != view.id) return;
+	if ((state & CANVAS) != 0) {
+		if ((style & SWT.NO_BACKGROUND) == 0) {
+			fillBackground (view, context, rect, -1);
+		}
+	}
+}
+
+Composite findDeferredControl () {
+	return layoutCount > 0 ? this : parent.findDeferredControl ();
+}
+
+Menu [] findMenus (Control control) {
+	if (control == this) return new Menu [0];
+	Menu result [] = super.findMenus (control);
+	Control [] children = _getChildren ();
+	for (int i=0; i<children.length; i++) {
+		Control child = children [i];
+		Menu [] menuList = child.findMenus (control);
+		if (menuList.length != 0) {
+			Menu [] newResult = new Menu [result.length + menuList.length];
+			System.arraycopy (result, 0, newResult, 0, result.length);
+			System.arraycopy (menuList, 0, newResult, result.length, menuList.length);
+			result = newResult;
+		}
+	}
+	return result;
+}
+
+void fixChildren (Shell newShell, Shell oldShell, Decorations newDecorations, Decorations oldDecorations, Menu [] menus) {
+	super.fixChildren (newShell, oldShell, newDecorations, oldDecorations, menus);
+	Control [] children = _getChildren ();
+	for (int i=0; i<children.length; i++) {
+		children [i].fixChildren (newShell, oldShell, newDecorations, oldDecorations, menus);
+	}
+}
+
+void fixTabList (Control control) {
+	if (tabList == null) return;
+	int count = 0;
+	for (int i=0; i<tabList.length; i++) {
+		if (tabList [i] == control) count++;
+	}
+	if (count == 0) return;
+	Control [] newList = null;
+	int length = tabList.length - count;
+	if (length != 0) {
+		newList = new Control [length];
+		int index = 0;
+		for (int i=0; i<tabList.length; i++) {
+			if (tabList [i] != control) {
+				newList [index++] = tabList [i];
+			}
+		}
+	}
+	tabList = newList;
+}
+
+/**
+ * Returns the receiver's background drawing mode. This
+ * will be one of the following constants defined in class
+ * <code>SWT</code>:
+ * <code>INHERIT_NONE</code>, <code>INHERIT_DEFAULT</code>,
+ * <code>INHERTIT_FORCE</code>.
+ *
+ * @return the background mode
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SWT
+ * 
+ * @since 3.2
+ */
+public int getBackgroundMode () {
+	checkWidget ();
+	return backgroundMode;
+}
+
+/**
+ * Returns a (possibly empty) array containing the receiver's children.
+ * Children are returned in the order that they are drawn.  The topmost
+ * control appears at the beginning of the array.  Subsequent controls
+ * draw beneath this control and appear later in the array.
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of children, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return an array of children
+ * 
+ * @see Control#moveAbove
+ * @see Control#moveBelow
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Control [] getChildren () {
+	checkWidget();
+	return _getChildren ();
+}
+
+/**
+ * Returns layout which is associated with the receiver, or
+ * null if one has not been set.
+ *
+ * @return the receiver's layout or null
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Layout getLayout () {
+	checkWidget();
+	return layout;
+}
+
+/**
+ * Returns <code>true</code> if the receiver has deferred
+ * the performing of layout, and <code>false</code> otherwise.
+ *
+ * @return the receiver's deferred layout state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setLayoutDeferred(boolean)
+ * @see #isLayoutDeferred()
+ *
+ * @since 3.1
+ */
+public boolean getLayoutDeferred () {
+	checkWidget ();
+	return layoutCount > 0 ;
+}
+
+/**
+ * Gets the (possibly empty) tabbing order for the control.
+ *
+ * @return tabList the ordered list of controls representing the tab order
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setTabList
+ */
+public Control [] getTabList () {
+	checkWidget ();
+	Control [] tabList = _getTabList ();
+	if (tabList == null) {
+		int count = 0;
+		Control [] list =_getChildren ();
+		for (int i=0; i<list.length; i++) {
+			if (list [i].isTabGroup ()) count++;
+		}
+		tabList = new Control [count];
+		int index = 0;
+		for (int i=0; i<list.length; i++) {
+			if (list [i].isTabGroup ()) {
+				tabList [index++] = list [i];
+			}
+		}
+	}
+	return tabList;
+}
+
+boolean hooksKeys () {
+	return hooks (SWT.KeyDown) || hooks (SWT.KeyUp);
+}
+
+void invalidateChildrenVisibleRegion () {
+	Control [] children = _getChildren ();
+	for (int i=0; i<children.length; i++) {
+		Control child = children [i];
+		child.resetVisibleRegion ();
+		child.invalidateChildrenVisibleRegion ();
+	}
+}
+
+/**
+ * Returns <code>true</code> if the receiver or any ancestor 
+ * up to and including the receiver's nearest ancestor shell
+ * has deferred the performing of layouts.  Otherwise, <code>false</code>
+ * is returned.
+ *
+ * @return the receiver's deferred layout state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setLayoutDeferred(boolean)
+ * @see #getLayoutDeferred()
+ * 
+ * @since 3.1
+ */
+public boolean isLayoutDeferred () {
+	checkWidget ();
+	return findDeferredControl () != null;
+}
+
+boolean isOpaque (int /*long*/ id, int /*long*/ sel) {
+	if ((state & CANVAS) != 0) {
+		if (id == view.id) {
+			if (region == null && background != null && background[3] == 1) {
+				return true;
+			}
+		}
+	}
+	return super.isOpaque (id, sel);
+}
+
+boolean isTabGroup () {
+	if ((state & CANVAS) != 0) return true;
+	return super.isTabGroup ();
+}
+
+void keyDown (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (view.window ().firstResponder ().id == id) {
+		if ((state & CANVAS) != 0) {
+			Shell s = this.getShell();
+			NSArray array = NSArray.arrayWithObject (new NSEvent (theEvent));
+			s.keyInputHappened = false;
+			view.interpretKeyEvents (array);
+			if (imeInComposition ()) return;
+			if (!s.keyInputHappened) {
+				NSEvent nsEvent = new NSEvent (theEvent);
+				boolean [] consume = new boolean [1];
+				if (translateTraversal (nsEvent.keyCode (), nsEvent, consume)) return;
+				if (isDisposed ()) return;
+				if (!sendKeyEvent (nsEvent, SWT.KeyDown)) return;
+				if (consume [0]) return;
+			}
+			return;
+		}
+	}
+	super.keyDown (id, sel, theEvent);
+}
+
+/**
+ * If the receiver has a layout, asks the layout to <em>lay out</em>
+ * (that is, set the size and location of) the receiver's children. 
+ * If the receiver does not have a layout, do nothing.
+ * <p>
+ * This is equivalent to calling <code>layout(true)</code>.
+ * </p>
+ * <p>
+ * Note: Layout is different from painting. If a child is
+ * moved or resized such that an area in the parent is
+ * exposed, then the parent will paint. If no child is
+ * affected, the parent will not paint.
+ * </p>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void layout () {
+	checkWidget ();
+	layout (true);
+}
+
+/**
+ * If the receiver has a layout, asks the layout to <em>lay out</em>
+ * (that is, set the size and location of) the receiver's children. 
+ * If the argument is <code>true</code> the layout must not rely
+ * on any information it has cached about the immediate children. If it
+ * is <code>false</code> the layout may (potentially) optimize the
+ * work it is doing by assuming that none of the receiver's 
+ * children has changed state since the last layout.
+ * If the receiver does not have a layout, do nothing.
+ * <p>
+ * If a child is resized as a result of a call to layout, the 
+ * resize event will invoke the layout of the child.  The layout
+ * will cascade down through all child widgets in the receiver's widget 
+ * tree until a child is encountered that does not resize.  Note that 
+ * a layout due to a resize will not flush any cached information 
+ * (same as <code>layout(false)</code>).
+ * </p>
+ * <p>
+ * Note: Layout is different from painting. If a child is
+ * moved or resized such that an area in the parent is
+ * exposed, then the parent will paint. If no child is
+ * affected, the parent will not paint.
+ * </p>
+ *
+ * @param changed <code>true</code> if the layout must flush its caches, and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void layout (boolean changed) {
+	checkWidget ();
+	if (layout == null) return;
+	layout (changed, false);
+}
+
+/**
+ * If the receiver has a layout, asks the layout to <em>lay out</em>
+ * (that is, set the size and location of) the receiver's children. 
+ * If the changed argument is <code>true</code> the layout must not rely
+ * on any information it has cached about its children. If it
+ * is <code>false</code> the layout may (potentially) optimize the
+ * work it is doing by assuming that none of the receiver's 
+ * children has changed state since the last layout.
+ * If the all argument is <code>true</code> the layout will cascade down
+ * through all child widgets in the receiver's widget tree, regardless of
+ * whether the child has changed size.  The changed argument is applied to 
+ * all layouts.  If the all argument is <code>false</code>, the layout will
+ * <em>not</em> cascade down through all child widgets in the receiver's widget 
+ * tree.  However, if a child is resized as a result of a call to layout, the 
+ * resize event will invoke the layout of the child.  Note that 
+ * a layout due to a resize will not flush any cached information 
+ * (same as <code>layout(false)</code>).
+ * </p>
+ * <p>
+ * Note: Layout is different from painting. If a child is
+ * moved or resized such that an area in the parent is
+ * exposed, then the parent will paint. If no child is
+ * affected, the parent will not paint.
+ * </p>
+ *
+ * @param changed <code>true</code> if the layout must flush its caches, and <code>false</code> otherwise
+ * @param all <code>true</code> if all children in the receiver's widget tree should be laid out, and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.1
+ */
+public void layout (boolean changed, boolean all) {
+	checkWidget ();
+	if (layout == null && !all) return;
+	markLayout (changed, all);
+	updateLayout (all);
+}
+
+/**
+ * Forces a lay out (that is, sets the size and location) of all widgets that 
+ * are in the parent hierarchy of the changed control up to and including the 
+ * receiver.  The layouts in the hierarchy must not rely on any information 
+ * cached about the changed control or any of its ancestors.  The layout may 
+ * (potentially) optimize the work it is doing by assuming that none of the 
+ * peers of the changed control have changed state since the last layout.
+ * If an ancestor does not have a layout, skip it.
+ * <p>
+ * Note: Layout is different from painting. If a child is
+ * moved or resized such that an area in the parent is
+ * exposed, then the parent will paint. If no child is
+ * affected, the parent will not paint.
+ * </p>
+ * 
+ * @param changed a control that has had a state change which requires a recalculation of its size
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the changed array is null any of its controls are null or have been disposed</li> 
+ *    <li>ERROR_INVALID_PARENT - if any control in changed is not in the widget tree of the receiver</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.1
+ */
+public void layout (Control [] changed) {
+	checkWidget ();
+	if (changed == null) error (SWT.ERROR_INVALID_ARGUMENT);
+	for (int i=0; i<changed.length; i++) {
+		Control control = changed [i];
+		if (control == null) error (SWT.ERROR_INVALID_ARGUMENT);
+		if (control.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+		boolean ancestor = false;
+		Composite composite = control.parent;
+		while (composite != null) {
+			ancestor = composite == this;
+			if (ancestor) break;
+			composite = composite.parent;
+		}
+		if (!ancestor) error (SWT.ERROR_INVALID_PARENT);
+	}
+	int updateCount = 0;
+	Composite [] update = new Composite [16];
+	for (int i=0; i<changed.length; i++) {
+		Control child = changed [i];
+		Composite composite = child.parent;
+		while (child != this) {
+			if (composite.layout != null) {
+				composite.state |= LAYOUT_NEEDED;
+				if (!composite.layout.flushCache (child)) {
+					composite.state |= LAYOUT_CHANGED;
+				}
+			}
+			if (updateCount == update.length) {
+				Composite [] newUpdate = new Composite [update.length + 16];
+				System.arraycopy (update, 0, newUpdate, 0, update.length);
+				update = newUpdate;
+			}
+			child = update [updateCount++] = composite;
+			composite = child.parent;
+		}
+	}
+	for (int i=updateCount-1; i>=0; i--) {
+		update [i].updateLayout (false);
+	}
+}
+
+void markLayout (boolean changed, boolean all) {
+	if (layout != null) {
+		state |= LAYOUT_NEEDED;
+		if (changed) state |= LAYOUT_CHANGED;
+	}
+	if (all) {
+		Control [] children = _getChildren ();
+		for (int i=0; i<children.length; i++) {
+			children [i].markLayout (changed, all);
+		}
+	}
+}
+
+Point minimumSize (int wHint, int Hint, boolean changed) {
+	Control [] children = _getChildren ();
+	int width = 0, height = 0;
+	for (int i=0; i<children.length; i++) {
+		Rectangle rect = children [i].getBounds ();
+		width = Math.max (width, rect.x + rect.width);
+		height = Math.max (height, rect.y + rect.height);
+	}
+	return new Point (width, height);
+}
+
+boolean mouseEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent, int type) {
+	boolean result = super.mouseEvent (id, sel, theEvent, type);
+	return (state & CANVAS) == 0 ? result : new NSEvent (theEvent).type () != OS.NSLeftMouseDown;
+}
+
+void pageDown(int /*long*/ id, int /*long*/ sel, int /*long*/ sender) {
+	if ((state & CANVAS) != 0) return;
+	super.pageDown(id, sel, sender);
+}
+
+void pageUp(int /*long*/ id, int /*long*/ sel, int /*long*/ sender) {
+	if ((state & CANVAS) != 0) return;
+	super.pageUp(id, sel, sender);
+}
+
+void reflectScrolledClipView (int /*long*/ id, int /*long*/ sel, int /*long*/ aClipView) {
+	if ((state & CANVAS) != 0) return;
+	super.reflectScrolledClipView (id, sel, aClipView);
+}
+
+void releaseChildren (boolean destroy) {
+	Control [] children = _getChildren ();
+	for (int i=0; i<children.length; i++) {
+		Control child = children [i];
+		if (child != null && !child.isDisposed ()) {
+			child.release (false);
+		}
+	}
+	super.releaseChildren (destroy);
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	layout = null;
+	tabList = null;
+}
+
+void removeControl (Control control) {
+	fixTabList (control);
+}
+
+void resized () {
+	super.resized ();
+	if (layout != null) {
+		markLayout (false, false);
+		updateLayout (false);
+	}
+}
+
+void scrollWheel (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if ((state & CANVAS) != 0) {
+		NSView view = scrollView != null ? scrollView : this.view;
+		if (id == view.id) {
+			NSEvent nsEvent = new NSEvent(theEvent);
+			float /*double*/ delta = nsEvent.deltaY();
+			if (delta != 0) {
+				if (hooks (SWT.MouseWheel) || filters (SWT.MouseWheel)) {
+					if (!sendMouseEvent(nsEvent, SWT.MouseWheel, true)) {
+						return;
+					}
+				}
+			}
+			boolean handled = false;
+			ScrollBar bar = verticalBar;
+			if (delta != 0 && bar != null && bar.getEnabled ()) {
+				if (-1 < delta && delta < 0) delta = -1;
+				if (0 < delta && delta < 1) delta = 1;
+				int selection = Math.max (0, (int)(0.5f + bar.getSelection () - bar.getIncrement () * delta));
+				bar.setSelection (selection);
+				Event event = new Event ();
+			    event.detail = delta > 0 ? SWT.PAGE_UP : SWT.PAGE_DOWN;	
+				bar.sendEvent (SWT.Selection, event);
+				handled = true;
+			}
+			bar = horizontalBar;
+			delta = nsEvent.deltaX ();
+			if (delta != 0 && bar != null && bar.getEnabled ()) {
+				int selection = Math.max (0, (int)(0.5f + bar.getSelection () - bar.getIncrement () * delta));
+				bar.setSelection (selection);
+				Event event = new Event ();
+			    event.detail = delta > 0 ? SWT.PAGE_UP : SWT.PAGE_DOWN;	
+				bar.sendEvent (SWT.Selection, event);
+				handled = true;
+			}
+			if (!handled) view.superview().scrollWheel(nsEvent);
+			return;
+		}
+		callSuper(id, sel, theEvent);
+		return;
+	}
+	super.scrollWheel (id, sel, theEvent);
+}
+
+/**
+ * Sets the background drawing mode to the argument which should
+ * be one of the following constants defined in class <code>SWT</code>:
+ * <code>INHERIT_NONE</code>, <code>INHERIT_DEFAULT</code>,
+ * <code>INHERIT_FORCE</code>.
+ *
+ * @param mode the new background mode
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SWT
+ * 
+ * @since 3.2
+ */
+public void setBackgroundMode (int mode) {
+	checkWidget ();
+	backgroundMode = mode;
+	Control [] children = _getChildren ();
+	for (int i = 0; i < children.length; i++) {
+		children [i].updateBackgroundMode ();
+	}
+}
+
+public boolean setFocus () {
+	checkWidget ();
+	Control [] children = _getChildren ();
+	for (int i= 0; i < children.length; i++) {
+		if (children [i].setFocus ()) return true;
+	}
+	return super.setFocus ();
+}
+
+/**
+ * Sets the layout which is associated with the receiver to be
+ * the argument which may be null.
+ *
+ * @param layout the receiver's new layout or null
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setLayout (Layout layout) {
+	checkWidget();
+	this.layout = layout;
+}
+
+/**
+ * If the argument is <code>true</code>, causes subsequent layout
+ * operations in the receiver or any of its children to be ignored.
+ * No layout of any kind can occur in the receiver or any of its
+ * children until the flag is set to false.
+ * Layout operations that occurred while the flag was
+ * <code>true</code> are remembered and when the flag is set to 
+ * <code>false</code>, the layout operations are performed in an
+ * optimized manner.  Nested calls to this method are stacked.
+ *
+ * @param defer the new defer state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #layout(boolean)
+ * @see #layout(Control[])
+ *
+ * @since 3.1
+ */
+public void setLayoutDeferred (boolean defer) {
+	if (!defer) {
+		if (--layoutCount == 0) {
+			if ((state & LAYOUT_CHILD) != 0 || (state & LAYOUT_NEEDED) != 0) {
+				updateLayout (true);
+			}
+		}
+	} else {
+		layoutCount++;
+	}
+}
+
+boolean setScrollBarVisible (ScrollBar bar, boolean visible) {
+	boolean changed = super.setScrollBarVisible (bar, visible);
+	if (changed && layout != null) {
+		markLayout (false, false);
+		updateLayout (false);
+	}
+	return changed;
+}
+
+boolean setTabGroupFocus () {
+	if (isTabItem ()) return setTabItemFocus ();
+	boolean takeFocus = (style & SWT.NO_FOCUS) == 0;
+	if ((state & CANVAS) != 0) takeFocus = hooksKeys ();
+	if (takeFocus && setTabItemFocus ()) return true;
+	Control [] children = _getChildren ();
+	for (int i=0; i<children.length; i++) {
+		Control child = children [i];
+		if (child.isTabItem () && child.setTabItemFocus ()) return true;
+	}
+	return false;
+}
+
+/**
+ * Sets the tabbing order for the specified controls to
+ * match the order that they occur in the argument list.
+ *
+ * @param tabList the ordered list of controls representing the tab order or null
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if a widget in the tabList is null or has been disposed</li> 
+ *    <li>ERROR_INVALID_PARENT - if widget in the tabList is not in the same widget tree</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setTabList (Control [] tabList) {
+	checkWidget ();
+	if (tabList != null) {
+		for (int i=0; i<tabList.length; i++) {
+			Control control = tabList [i];
+			if (control == null) error (SWT.ERROR_INVALID_ARGUMENT);
+			if (control.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+			if (control.parent != this) error (SWT.ERROR_INVALID_PARENT);
+		}
+		Control [] newList = new Control [tabList.length];
+		System.arraycopy (tabList, 0, newList, 0, tabList.length);
+		tabList = newList;
+	} 
+	this.tabList = tabList;
+}
+
+int traversalCode (int key, NSEvent theEvent) {
+	if ((state & CANVAS) != 0) {
+		if ((style & SWT.NO_FOCUS) != 0) return 0;
+		if (hooksKeys ()) return 0;
+	}
+	return super.traversalCode (key, theEvent);
+}
+
+void updateBackgroundMode () {
+	super.updateBackgroundMode ();
+	Control [] children = _getChildren ();
+	for (int i = 0; i < children.length; i++) {
+		children [i].updateBackgroundMode ();
+	}
+}
+
+void updateCursorRects (boolean enabled) {
+	super.updateCursorRects (enabled);
+	Control [] children = _getChildren ();
+	for (int i = 0; i < children.length; i++) {
+		Control control = children [i];
+		control.updateCursorRects (enabled && control.isEnabled ());
+	}
+}
+
+void updateLayout (boolean all) {
+	Composite parent = findDeferredControl ();
+	if (parent != null) {
+		parent.state |= LAYOUT_CHILD;
+		return;
+	}
+	if ((state & LAYOUT_NEEDED) != 0) {
+		boolean changed = (state & LAYOUT_CHANGED) != 0;
+		state &= ~(LAYOUT_NEEDED | LAYOUT_CHANGED);
+		layout.layout (this, changed);
+	}
+	if (all) {
+		state &= ~LAYOUT_CHILD;
+		Control [] children = _getChildren ();
+		for (int i=0; i<children.length; i++) {
+			children [i].updateLayout (all);
+		}
+	}
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java
new file mode 100755
index 0000000..c3666bc
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java
@@ -0,0 +1,4114 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.accessibility.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Control is the abstract superclass of all windowed user interface classes.
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b>
+ * <dd>BORDER</dd>
+ * <dd>LEFT_TO_RIGHT, RIGHT_TO_LEFT</dd>
+ * <dt><b>Events:</b>
+ * <dd>DragDetect, FocusIn, FocusOut, Help, KeyDown, KeyUp, MenuDetect, MouseDoubleClick, MouseDown, MouseEnter,
+ *     MouseExit, MouseHover, MouseUp, MouseMove, Move, Paint, Resize, Traverse</dd>
+ * </dl>
+ * </p><p>
+ * Only one of LEFT_TO_RIGHT or RIGHT_TO_LEFT may be specified.
+ * </p><p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#control">Control snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public abstract class Control extends Widget implements Drawable {
+	/**
+	 * the handle to the OS resource 
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public NSView view;
+	Composite parent;
+	String toolTipText;
+	Object layoutData;
+	int drawCount;
+	Menu menu;
+	float /*double*/ [] foreground, background;
+	Image backgroundImage;
+	Font font;
+	Cursor cursor;
+	Region region;
+	NSBezierPath regionPath;
+	int /*long*/ visibleRgn;
+	Accessible accessible;
+
+	final static int CLIPPING = 1 << 10;
+	final static int VISIBLE_REGION = 1 << 12;
+	
+	/**
+	 * Magic number comes from experience. There's no API for this value in Cocoa or Carbon.
+	 */
+	static final int DEFAULT_DRAG_HYSTERESIS = 5;
+	
+Control () {
+	/* Do nothing */
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#BORDER
+ * @see SWT#LEFT_TO_RIGHT
+ * @see SWT#RIGHT_TO_LEFT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Control (Composite parent, int style) {
+	super (parent, style);
+	this.parent = parent;
+	createWidget ();
+}
+
+boolean acceptsFirstMouse (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	Shell shell = getShell ();
+	if ((shell.style & SWT.ON_TOP) != 0) return true;
+	return super.acceptsFirstMouse (id, sel, theEvent);
+}
+
+int /*long*/ accessibilityActionNames(int /*long*/ id, int /*long*/ sel) {
+	if (accessible != null) {
+		NSArray returnValue = accessible.internal_accessibilityActionNames(ACC.CHILDID_SELF);
+		if (returnValue != null) return returnValue.id;
+	}
+	
+	return super.accessibilityActionNames(id, sel);
+}
+
+int /*long*/ accessibilityAttributeNames(int /*long*/ id, int /*long*/ sel) {
+	
+	if (id == view.id || (view instanceof NSControl && ((NSControl)view).cell() != null && ((NSControl)view).cell().id == id)) {
+		if (accessible != null) {
+			
+			// First, see if the accessible is going to define a set of attributes for the control.
+			// If it does, return that.
+			NSArray returnValue = accessible.internal_accessibilityAttributeNames(ACC.CHILDID_SELF);
+			if (returnValue != null) return returnValue.id;
+			
+			// If not, see if it will override or augment the standard list.
+			// Help, title, and description can be overridden.
+			NSMutableArray extraAttributes = NSMutableArray.arrayWithCapacity(3);
+			extraAttributes.addObject(OS.NSAccessibilityHelpAttribute);
+			extraAttributes.addObject(OS.NSAccessibilityDescriptionAttribute);
+			extraAttributes.addObject(OS.NSAccessibilityTitleAttribute);
+
+			for (int i = (int)/*64*/extraAttributes.count() - 1; i >= 0; i--) {
+				NSString attribute = new NSString(extraAttributes.objectAtIndex(i).id);
+				if (accessible.internal_accessibilityAttributeValue(attribute, ACC.CHILDID_SELF) == null) {
+					extraAttributes.removeObjectAtIndex(i);
+				}
+			}
+
+			if (extraAttributes.count() > 0) {
+				int /*long*/ superResult = super.accessibilityAttributeNames(id, sel);
+				NSArray baseAttributes = new NSArray(superResult);
+				NSMutableArray mutableAttributes = NSMutableArray.arrayWithCapacity(baseAttributes.count() + 1);
+				mutableAttributes.addObjectsFromArray(baseAttributes);
+				
+				for (int i = 0; i < extraAttributes.count(); i++) {
+					id currAttribute = extraAttributes.objectAtIndex(i);
+					if (!mutableAttributes.containsObject(currAttribute)) {
+						mutableAttributes.addObject(currAttribute);
+					}
+				}
+				
+				return mutableAttributes.id;
+			}
+		}
+	}
+
+	return super.accessibilityAttributeNames(id, sel);
+}
+
+int /*long*/ accessibilityParameterizedAttributeNames(int /*long*/ id, int /*long*/ sel) {
+
+	if (id == view.id || (view instanceof NSControl && ((NSControl)view).cell() != null && ((NSControl)view).cell().id == id)) {
+		if (accessible != null) {
+			NSArray returnValue = accessible.internal_accessibilityParameterizedAttributeNames(ACC.CHILDID_SELF);
+			if (returnValue != null) return returnValue.id;
+		}
+	}
+
+	return super.accessibilityParameterizedAttributeNames(id, sel);
+}
+
+int /*long*/ accessibilityFocusedUIElement(int /*long*/ id, int /*long*/ sel) {
+	id returnValue = null;
+
+	if (id == view.id || (view instanceof NSControl && ((NSControl)view).cell() != null && ((NSControl)view).cell().id == id)) {
+		if (accessible != null) {
+			returnValue = accessible.internal_accessibilityFocusedUIElement(ACC.CHILDID_SELF);
+		}
+	}
+
+	// If we had an accessible and it didn't handle the attribute request, let the
+	// superclass handle it.
+	if (returnValue == null)
+		return super.accessibilityFocusedUIElement(id, sel);
+	else
+		return returnValue.id;
+}
+
+int /*long*/ accessibilityHitTest(int /*long*/ id, int /*long*/ sel, NSPoint point) {
+	id returnValue = null;
+
+	if (id == view.id || (view instanceof NSControl && ((NSControl)view).cell() != null && ((NSControl)view).cell().id == id)) {
+		if (accessible != null) {
+			returnValue = accessible.internal_accessibilityHitTest(point, ACC.CHILDID_SELF);
+		}
+	}
+
+	// If we had an accessible and it didn't handle the attribute request, let the
+	// superclass handle it.
+	if (returnValue == null)
+		return super.accessibilityHitTest(id, sel, point);
+	else
+		return returnValue.id;
+}
+
+int /*long*/ accessibilityAttributeValue(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	NSString attribute = new NSString(arg0);
+	int /*long*/ returnValue = 0;
+	id returnObject = null;
+	
+	if (accessible != null) {
+		returnObject = accessible.internal_accessibilityAttributeValue(attribute, ACC.CHILDID_SELF);
+	}
+
+	// If we had an accessible and it didn't handle the attribute request, let the
+	// superclass handle it.
+	if (returnObject == null) {
+		returnValue = super.accessibilityAttributeValue(id, sel, arg0);
+	} else {
+		returnValue = returnObject.id;
+	}
+	
+	return returnValue;
+}
+
+int /*long*/ accessibilityAttributeValue_forParameter(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
+	NSString attribute = new NSString(arg0);
+	
+	id returnValue = null;
+	
+	if (accessible != null) {
+		id parameter = new id(arg1);
+		returnValue = accessible.internal_accessibilityAttributeValue_forParameter(attribute, parameter, ACC.CHILDID_SELF);
+	}
+	
+	// If we had an accessible and it didn't handle the attribute request, let the
+	// superclass handle it.
+	if (returnValue == null)
+		return super.accessibilityAttributeValue_forParameter(id, sel, arg0, arg1);
+	else
+		return returnValue.id;
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is moved or resized, by sending
+ * it one of the messages defined in the <code>ControlListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ControlListener
+ * @see #removeControlListener
+ */
+public void addControlListener(ControlListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Resize,typedListener);
+	addListener (SWT.Move,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when a drag gesture occurs, by sending it
+ * one of the messages defined in the <code>DragDetectListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see DragDetectListener
+ * @see #removeDragDetectListener
+ * 
+ * @since 3.3
+ */
+public void addDragDetectListener (DragDetectListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.DragDetect,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control gains or loses focus, by sending
+ * it one of the messages defined in the <code>FocusListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see FocusListener
+ * @see #removeFocusListener
+ */
+public void addFocusListener(FocusListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener(SWT.FocusIn,typedListener);
+	addListener(SWT.FocusOut,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when help events are generated for the control,
+ * by sending it one of the messages defined in the
+ * <code>HelpListener</code> interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see HelpListener
+ * @see #removeHelpListener
+ */
+public void addHelpListener (HelpListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Help, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when keys are pressed and released on the system keyboard, by sending
+ * it one of the messages defined in the <code>KeyListener</code>
+ * interface.
+ * <p>
+ * When a key listener is added to a control, the control
+ * will take part in widget traversal.  By default, all
+ * traversal keys (such as the tab key and so on) are
+ * delivered to the control.  In order for a control to take
+ * part in traversal, it should listen for traversal events.
+ * Otherwise, the user can traverse into a control but not
+ * out.  Note that native controls such as table and tree
+ * implement key traversal in the operating system.  It is
+ * not necessary to add traversal listeners for these controls,
+ * unless you want to override the default traversal.
+ * </p>
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see KeyListener
+ * @see #removeKeyListener
+ */
+public void addKeyListener(KeyListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener(SWT.KeyUp,typedListener);
+	addListener(SWT.KeyDown,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the platform-specific context menu trigger
+ * has occurred, by sending it one of the messages defined in
+ * the <code>MenuDetectListener</code> interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MenuDetectListener
+ * @see #removeMenuDetectListener
+ *
+ * @since 3.3
+ */
+public void addMenuDetectListener (MenuDetectListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.MenuDetect, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when mouse buttons are pressed and released, by sending
+ * it one of the messages defined in the <code>MouseListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MouseListener
+ * @see #removeMouseListener
+ */
+public void addMouseListener(MouseListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener(SWT.MouseDown,typedListener);
+	addListener(SWT.MouseUp,typedListener);
+	addListener(SWT.MouseDoubleClick,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the mouse passes or hovers over controls, by sending
+ * it one of the messages defined in the <code>MouseTrackListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MouseTrackListener
+ * @see #removeMouseTrackListener
+ */
+public void addMouseTrackListener (MouseTrackListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.MouseEnter,typedListener);
+	addListener (SWT.MouseExit,typedListener);
+	addListener (SWT.MouseHover,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the mouse moves, by sending it one of the
+ * messages defined in the <code>MouseMoveListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MouseMoveListener
+ * @see #removeMouseMoveListener
+ */
+public void addMouseMoveListener(MouseMoveListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener(SWT.MouseMove,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the mouse wheel is scrolled, by sending
+ * it one of the messages defined in the
+ * <code>MouseWheelListener</code> interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MouseWheelListener
+ * @see #removeMouseWheelListener
+ *
+ * @since 3.3
+ */
+public void addMouseWheelListener (MouseWheelListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.MouseWheel, typedListener);
+}
+
+void addRelation (Control control) {
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the receiver needs to be painted, by sending it
+ * one of the messages defined in the <code>PaintListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see PaintListener
+ * @see #removePaintListener
+ */
+public void addPaintListener(PaintListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener(SWT.Paint,typedListener);
+}
+
+static final double SYNTHETIC_BOLD = -2.5;
+static final double SYNTHETIC_ITALIC = 0.2;
+
+void addTraits(NSMutableDictionary dict, Font font) {
+	if ((font.extraTraits & OS.NSBoldFontMask) != 0) {
+		dict.setObject(NSNumber.numberWithDouble(SYNTHETIC_BOLD), OS.NSStrokeWidthAttributeName);
+	}
+	if ((font.extraTraits & OS.NSItalicFontMask) != 0) {
+		dict.setObject(NSNumber.numberWithDouble(SYNTHETIC_ITALIC), OS.NSObliquenessAttributeName);
+	}
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when traversal events occur, by sending it
+ * one of the messages defined in the <code>TraverseListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see TraverseListener
+ * @see #removeTraverseListener
+ */
+public void addTraverseListener (TraverseListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Traverse,typedListener);
+}
+
+boolean becomeFirstResponder (int /*long*/ id, int /*long*/ sel) {
+	if ((state & DISABLED) != 0) return false;
+	return super.becomeFirstResponder (id, sel);
+}
+
+void calculateVisibleRegion (NSView view, int /*long*/ visibleRgn, boolean clipChildren) {
+	int /*long*/ tempRgn = OS.NewRgn ();
+	if (!view.isHiddenOrHasHiddenAncestor() && isDrawing()) {
+		int /*long*/ childRgn = OS.NewRgn ();
+		NSWindow window = view.window ();
+		NSView contentView = window.contentView();
+		NSView frameView = contentView.superview();
+		NSRect bounds = contentView.visibleRect();
+		bounds = contentView.convertRect_toView_(bounds, view);
+		short[] rect = new short[4];
+		OS.SetRect(rect, (short)bounds.x, (short)bounds.y, (short)(bounds.x + bounds.width), (short)(bounds.y + bounds.height));
+		OS.RectRgn(visibleRgn, rect);
+		NSView tempView = view, lastControl = null;
+		while (tempView.id != frameView.id) {
+			bounds = tempView.visibleRect();
+			bounds = tempView.convertRect_toView_(bounds, view);
+			OS.SetRect(rect, (short)bounds.x, (short)bounds.y, (short)(bounds.x + bounds.width), (short)(bounds.y + bounds.height));
+			OS.RectRgn(tempRgn, rect);
+			OS.SectRgn (tempRgn, visibleRgn, visibleRgn);
+			if (OS.EmptyRgn (visibleRgn)) break;
+			if (clipChildren || tempView.id != view.id) {
+				NSArray subviews = tempView.subviews();
+				int /*long*/ count = subviews.count();
+				for (int i = 0; i < count; i++) {
+					NSView child = new NSView (subviews.objectAtIndex(count - i - 1));
+					if (lastControl != null && child.id == lastControl.id) break;
+					if (child.isHidden()) continue;
+					bounds = child.visibleRect();
+					bounds = child.convertRect_toView_(bounds, view);
+					OS.SetRect(rect, (short)bounds.x, (short)bounds.y, (short)(bounds.x + bounds.width), (short)(bounds.y + bounds.height));
+					OS.RectRgn(tempRgn, rect);
+					OS.UnionRgn (tempRgn, childRgn, childRgn);
+				}
+			}
+			lastControl = tempView;
+			tempView = tempView.superview();
+		}
+		OS.DiffRgn (visibleRgn, childRgn, visibleRgn);
+		OS.DisposeRgn (childRgn);
+	} else {
+		OS.CopyRgn (tempRgn, visibleRgn);
+	}
+	OS.DisposeRgn (tempRgn);
+}
+
+void checkBackground () {
+	Shell shell = getShell ();
+	if (this == shell) return;
+	state &= ~PARENT_BACKGROUND;	
+	Composite composite = parent;
+	do {
+		int mode = composite.backgroundMode;
+		if (mode != 0) {
+			if (mode == SWT.INHERIT_DEFAULT) {
+				Control control = this;
+				do {
+					if ((control.state & THEME_BACKGROUND) == 0) {
+						return;
+					}
+					control = control.parent;
+				} while (control != composite);
+			}
+			state |= PARENT_BACKGROUND;					
+			return;
+		}
+		if (composite == shell) break;
+		composite = composite.parent;
+	} while (true);
+}
+
+void checkBuffered () {
+	style |= SWT.DOUBLE_BUFFERED;
+}
+
+void checkToolTip (Widget target) {
+	if (isVisible () && display.tooltipControl == this && (target == null || display.tooltipTarget == target)) {
+		Shell shell = getShell ();
+		shell.sendToolTipEvent (false);
+		shell.sendToolTipEvent (true);
+	}
+}
+
+/**
+ * Returns the preferred size of the receiver.
+ * <p>
+ * The <em>preferred size</em> of a control is the size that it would
+ * best be displayed at. The width hint and height hint arguments
+ * allow the caller to ask a control questions such as "Given a particular
+ * width, how high does the control need to be to show all of the contents?"
+ * To indicate that the caller does not wish to constrain a particular 
+ * dimension, the constant <code>SWT.DEFAULT</code> is passed for the hint. 
+ * </p>
+ *
+ * @param wHint the width hint (can be <code>SWT.DEFAULT</code>)
+ * @param hHint the height hint (can be <code>SWT.DEFAULT</code>)
+ * @return the preferred size of the control
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Layout
+ * @see #getBorderWidth
+ * @see #getBounds
+ * @see #getSize
+ * @see #pack(boolean)
+ * @see "computeTrim, getClientArea for controls that implement them"
+ */
+public Point computeSize (int wHint, int hHint) {
+	return computeSize (wHint, hHint, true);
+}
+
+/**
+ * Returns the preferred size of the receiver.
+ * <p>
+ * The <em>preferred size</em> of a control is the size that it would
+ * best be displayed at. The width hint and height hint arguments
+ * allow the caller to ask a control questions such as "Given a particular
+ * width, how high does the control need to be to show all of the contents?"
+ * To indicate that the caller does not wish to constrain a particular 
+ * dimension, the constant <code>SWT.DEFAULT</code> is passed for the hint. 
+ * </p><p>
+ * If the changed flag is <code>true</code>, it indicates that the receiver's
+ * <em>contents</em> have changed, therefore any caches that a layout manager
+ * containing the control may have been keeping need to be flushed. When the
+ * control is resized, the changed flag will be <code>false</code>, so layout
+ * manager caches can be retained. 
+ * </p>
+ *
+ * @param wHint the width hint (can be <code>SWT.DEFAULT</code>)
+ * @param hHint the height hint (can be <code>SWT.DEFAULT</code>)
+ * @param changed <code>true</code> if the control's contents have changed, and <code>false</code> otherwise
+ * @return the preferred size of the control.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Layout
+ * @see #getBorderWidth
+ * @see #getBounds
+ * @see #getSize
+ * @see #pack(boolean)
+ * @see "computeTrim, getClientArea for controls that implement them"
+ */
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget ();
+	int width = DEFAULT_WIDTH;
+	int height = DEFAULT_HEIGHT;
+	if (wHint != SWT.DEFAULT) width = wHint;
+	if (hHint != SWT.DEFAULT) height = hHint;
+	int border = getBorderWidth ();
+	width += border * 2;
+	height += border * 2;
+	return new Point (width, height);
+}
+
+Widget computeTabGroup () {
+	if (isTabGroup()) return this;
+	return parent.computeTabGroup ();
+}
+
+Widget[] computeTabList() {
+	if (isTabGroup()) {
+		if (getVisible() && getEnabled()) {
+			return new Widget[] {this};
+		}
+	}
+	return new Widget[0];
+}
+
+Control computeTabRoot () {
+	Control[] tabList = parent._getTabList();
+	if (tabList != null) {
+		int index = 0;
+		while (index < tabList.length) {
+			if (tabList [index] == this) break;
+			index++;
+		}
+		if (index == tabList.length) {
+			if (isTabGroup ()) return this;
+		}
+	}
+	return parent.computeTabRoot ();
+}
+
+NSView contentView () {
+	return view;
+}
+
+NSAttributedString createString (String string, Font font, float /*double*/ [] foreground, int style, boolean enabled, boolean mnemonics) {
+	NSMutableDictionary dict = ((NSMutableDictionary)new NSMutableDictionary().alloc()).initWithCapacity(5);
+	if (font == null) font = this.font != null ? this.font : defaultFont();
+	dict.setObject (font.handle, OS.NSFontAttributeName);
+	addTraits(dict, font);
+	if (enabled) {
+		if (foreground != null) {
+			NSColor color = NSColor.colorWithDeviceRed(foreground[0], foreground[1], foreground[2], foreground[3]);
+			dict.setObject (color, OS.NSForegroundColorAttributeName);
+		}
+	} else {
+		dict.setObject (NSColor.disabledControlTextColor (), OS.NSForegroundColorAttributeName);
+	}
+	if (style != 0) {
+		NSMutableParagraphStyle paragraphStyle = (NSMutableParagraphStyle)new NSMutableParagraphStyle ().alloc ().init ();
+		paragraphStyle.setLineBreakMode (OS.NSLineBreakByClipping);
+		int alignment = SWT.LEFT;
+		if ((style & SWT.CENTER) != 0) {
+			alignment = OS.NSCenterTextAlignment;
+		} else if ((style & SWT.RIGHT) != 0) {
+			alignment = OS.NSRightTextAlignment;
+		}
+		paragraphStyle.setAlignment (alignment);
+		dict.setObject (paragraphStyle, OS.NSParagraphStyleAttributeName);
+		paragraphStyle.release ();
+	}
+	int length = string.length ();
+	char [] chars = new char [length];
+	string.getChars (0, chars.length, chars, 0);
+	if (mnemonics) length = fixMnemonic (chars);
+	NSString str = ((NSString)new NSString().alloc()).initWithCharacters(chars, length);
+	NSAttributedString attribStr = ((NSAttributedString) new NSAttributedString ().alloc ()).initWithString (str, dict);
+	str.release();
+	dict.release();
+	return attribStr;
+}
+
+void createWidget () {
+	state |= DRAG_DETECT;
+	checkOrientation (parent);
+	super.createWidget ();
+	checkBackground ();
+	checkBuffered ();
+	setDefaultFont ();
+	setZOrder ();
+	setRelations ();
+	display.clearPool ();
+}
+
+Color defaultBackground () {
+	return display.getWidgetColor (SWT.COLOR_WIDGET_BACKGROUND);
+}
+
+Font defaultFont () {
+	if (display.smallFonts) return display.getSystemFont ();
+	return Font.cocoa_new (display, defaultNSFont ());
+}
+
+Color defaultForeground () {
+	return display.getWidgetColor (SWT.COLOR_WIDGET_FOREGROUND);
+}
+
+NSFont defaultNSFont () {
+	return display.getSystemFont().handle;
+}
+
+void deregister () {
+	super.deregister ();
+	display.removeWidget (view);
+}
+
+void destroyWidget () {
+	NSView view = topView ();
+	view.removeFromSuperview ();
+	releaseHandle ();
+}
+
+void doCommandBySelector (int /*long*/ id, int /*long*/ sel, int /*long*/ selector) {
+	if (view.window ().firstResponder ().id == id) {
+		if (imeInComposition ()) return;
+		Shell s = this.getShell();
+		NSEvent nsEvent = NSApplication.sharedApplication ().currentEvent ();
+		if (nsEvent != null && nsEvent.type () == OS.NSKeyDown) {
+			/*
+			 * Feature in Cocoa.  Pressing Alt+UpArrow invokes doCommandBySelector 
+			 * twice, with selectors moveBackward and moveToBeginningOfParagraph
+			 * (Alt+DownArrow behaves similarly).  In order to avoid sending
+			 * multiple events for these keys, do not send a KeyDown if we already sent one
+			 * during this keystroke. This rule does not apply if the command key
+			 * is down, because we likely triggered the current key sequence via flagsChanged.
+			 */
+			int /*long*/ modifiers = nsEvent.modifierFlags();
+			if (s.keyInputHappened == false || (modifiers & OS.NSCommandKeyMask) != 0) {
+				s.keyInputHappened = true;
+				boolean [] consume = new boolean [1];
+				if (translateTraversal (nsEvent.keyCode (), nsEvent, consume)) return;
+				if (isDisposed ()) return;
+				if (!sendKeyEvent (nsEvent, SWT.KeyDown)) return;
+				if (consume [0]) return;
+			}
+		}
+		if ((state & CANVAS) != 0) return;
+	}
+	super.doCommandBySelector (id, sel, selector);
+}
+
+/**
+ * Detects a drag and drop gesture.  This method is used
+ * to detect a drag gesture when called from within a mouse
+ * down listener.
+ * 
+ * <p>By default, a drag is detected when the gesture
+ * occurs anywhere within the client area of a control.
+ * Some controls, such as tables and trees, override this
+ * behavior.  In addition to the operating system specific
+ * drag gesture, they require the mouse to be inside an
+ * item.  Custom widget writers can use <code>setDragDetect</code>
+ * to disable the default detection, listen for mouse down,
+ * and then call <code>dragDetect()</code> from within the
+ * listener to conditionally detect a drag.
+ * </p>
+ *
+ * @param event the mouse down event
+ * 
+ * @return <code>true</code> if the gesture occurred, and <code>false</code> otherwise.
+ *
+ * @exception IllegalArgumentException <ul>
+ *   <li>ERROR_NULL_ARGUMENT when the event is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *  
+ * @see DragDetectListener
+ * @see #addDragDetectListener
+ * 
+ * @see #getDragDetect
+ * @see #setDragDetect
+ * 
+ * @since 3.3
+ */
+public boolean dragDetect (Event event) {
+	checkWidget ();
+	if (event == null) error (SWT.ERROR_NULL_ARGUMENT);
+	return dragDetect (event.button, event.count, event.stateMask, event.x, event.y);
+}
+
+/**
+ * Detects a drag and drop gesture.  This method is used
+ * to detect a drag gesture when called from within a mouse
+ * down listener.
+ * 
+ * <p>By default, a drag is detected when the gesture
+ * occurs anywhere within the client area of a control.
+ * Some controls, such as tables and trees, override this
+ * behavior.  In addition to the operating system specific
+ * drag gesture, they require the mouse to be inside an
+ * item.  Custom widget writers can use <code>setDragDetect</code>
+ * to disable the default detection, listen for mouse down,
+ * and then call <code>dragDetect()</code> from within the
+ * listener to conditionally detect a drag.
+ * </p>
+ *
+ * @param event the mouse down event
+ * 
+ * @return <code>true</code> if the gesture occurred, and <code>false</code> otherwise.
+ *
+ * @exception IllegalArgumentException <ul>
+ *   <li>ERROR_NULL_ARGUMENT when the event is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see DragDetectListener
+ * @see #addDragDetectListener
+ * 
+ * @see #getDragDetect
+ * @see #setDragDetect
+ * 
+ * @since 3.3
+ */
+public boolean dragDetect (MouseEvent event) {
+	checkWidget ();
+	if (event == null) error (SWT.ERROR_NULL_ARGUMENT);
+	return dragDetect (event.button, event.count, event.stateMask, event.x, event.y);
+}
+
+boolean dragDetect (int button, int count, int stateMask, int x, int y) {
+	if (button != 1 || count != 1) return false;
+	if (!dragDetect (x, y, false, null)) return false;
+	return sendDragEvent (button, stateMask, x, y);
+}
+
+boolean dragDetect (int x, int y, boolean filter, boolean [] consume) {
+	/**
+	 * Feature in Cocoa. Mouse drag events do not account for hysteresis.
+	 * As soon as the mouse drags a mouse dragged event is fired.  Fix is to
+	 * check for another mouse drag event that is at least 5 pixels away 
+	 * from the start of the drag. 
+	 */
+	NSApplication application = NSApplication.sharedApplication();
+	boolean dragging = false;
+	int /*long*/ eventType = OS.NSLeftMouseDown;
+	float /*double*/ dragX = x;
+	float /*double*/ dragY = y;
+	
+	/**
+	 * To check for an actual drag we need to pull off mouse moved and mouse up events
+	 * to detect if the user dragged outside of a 10 x 10 box centered on the mouse down location.
+	 * We still want the view to see the events, so save them and re-post when done checking.
+	 */
+	NSEvent mouseUpEvent = null;
+	NSMutableArray dragEvents = NSMutableArray.arrayWithCapacity(10);
+
+	while (eventType != OS.NSLeftMouseUp) {
+		NSEvent event = application.nextEventMatchingMask((OS.NSLeftMouseUpMask | OS.NSLeftMouseDraggedMask),
+				NSDate.distantFuture(), OS.NSEventTrackingRunLoopMode, true);
+		eventType = event.type();
+		
+		if (eventType == OS.NSLeftMouseDragged) {
+			dragEvents.addObject(event);
+			NSPoint windowLoc = event.locationInWindow();
+			NSPoint viewLoc = view.convertPoint_fromView_(windowLoc, null);
+			if (!view.isFlipped ()) {
+				viewLoc.y = view.bounds().height - viewLoc.y;
+			}
+			if ((Math.abs(viewLoc.x - dragX) > DEFAULT_DRAG_HYSTERESIS) || (Math.abs(viewLoc.y - dragY) > DEFAULT_DRAG_HYSTERESIS)) {
+				dragging = true;
+				break;
+			}
+		} else if (eventType == OS.NSLeftMouseUp) {
+			mouseUpEvent = event;
+		}
+	}
+
+	// Push back any events we took out of the queue so the control can receive them. 
+	if (mouseUpEvent != null) application.postEvent(mouseUpEvent, true);
+
+	if (dragEvents.count() > 0) {
+		while (dragEvents.count() > 0) {
+			NSEvent currEvent = new NSEvent(dragEvents.objectAtIndex(dragEvents.count() - 1).id);
+			dragEvents.removeLastObject();
+			application.postEvent(currEvent, true);
+		}
+	}
+
+	return dragging;
+}
+
+boolean drawGripper (int x, int y, int width, int height, boolean vertical) {
+	return false;
+}
+
+void drawWidget (int /*long*/ id, NSGraphicsContext context, NSRect rect) {
+	if (id != paintView().id) return;
+	if (!hooks (SWT.Paint) && !filters (SWT.Paint)) return;
+
+	/* Send paint event */
+	GCData data = new GCData ();
+	data.paintRect = rect;
+	GC gc = GC.cocoa_new (this, data);
+	Event event = new Event ();
+	event.gc = gc;
+	event.x = (int)rect.x;
+	event.y = (int)rect.y;
+	event.width = (int)rect.width;
+	event.height = (int)rect.height;
+	sendEvent (SWT.Paint, event);
+	event.gc = null;
+	gc.dispose ();
+}
+
+void enableWidget (boolean enabled) {
+	if (view instanceof NSControl) {
+		((NSControl)view).setEnabled(enabled);
+	}
+	updateCursorRects (isEnabled ());
+}
+
+boolean equals(float /*double*/ [] color1, float /*double*/ [] color2) {
+	if (color1 == color2) return true;
+	if (color1 == null) return color2 == null;
+	if (color2 == null) return color1 == null;	
+	for (int i = 0; i < color1.length; i++) {
+		if (color1 [i] != color2 [i]) return false;
+	}	
+	return true;
+}
+
+NSView eventView () {
+	return view;
+}
+
+void fillBackground (NSView view, NSGraphicsContext context, NSRect rect, int imgHeight) {
+	Control control = findBackgroundControl();
+	if (control == null) control = this;
+	Image image = control.backgroundImage;
+	if (image != null && !image.isDisposed()) {
+		context.saveGraphicsState();
+		NSColor.colorWithPatternImage(image.handle).setFill();
+		NSPoint phase = new NSPoint();
+		NSView controlView = control.view;
+		if (imgHeight == -1) {
+			NSView contentView = controlView.window().contentView();
+			phase = controlView.convertPoint_toView_(phase, contentView);
+			phase.y = contentView.bounds().height - phase.y;
+		} else {
+			phase = view.convertPoint_toView_(phase, controlView);
+			phase.y += imgHeight - backgroundImage.getBounds().height;
+		}
+		context.setPatternPhase(phase);
+		NSBezierPath.fillRect(rect);
+		context.restoreGraphicsState();
+		return;
+	}
+
+	float /*double*/ [] background = control.background;
+	float /*double*/ alpha;
+	if (background == null) {
+		background = control.defaultBackground ().handle;
+		alpha = getThemeAlpha ();
+	} else {
+		alpha = background[3];
+	}
+	context.saveGraphicsState ();
+	NSColor.colorWithDeviceRed (background [0], background [1], background [2], alpha).setFill ();
+	NSBezierPath.fillRect (rect);
+	context.restoreGraphicsState ();
+}
+
+Cursor findCursor () {
+	if (cursor != null) return cursor;
+	return parent.findCursor ();
+}
+
+Control findBackgroundControl () {
+	if (backgroundImage != null || background != null) return this;
+	return (state & PARENT_BACKGROUND) != 0 ? parent.findBackgroundControl () : null;
+}
+
+Menu [] findMenus (Control control) {
+	if (menu != null && this != control) return new Menu [] {menu};
+	return new Menu [0];
+}
+
+Widget findTooltip (NSPoint pt) {
+	return this;
+}
+
+void fixChildren (Shell newShell, Shell oldShell, Decorations newDecorations, Decorations oldDecorations, Menu [] menus) {
+	oldShell.fixShell (newShell, this);
+	oldDecorations.fixDecorations (newDecorations, this, menus);
+}
+
+void fixFocus (Control focusControl) {
+	Shell shell = getShell ();
+	Control control = this;
+	while (control != shell && (control = control.parent) != null) {
+		if (control.setFocus ()) return;
+	}
+	shell.setSavedFocus (focusControl);
+//	int window = OS.GetControlOwner (handle);
+//	OS.ClearKeyboardFocus (window);
+}
+
+void flagsChanged (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (view.window ().firstResponder ().id == id) {
+		if ((state & SAFARI_EVENTS_FIX) == 0) {
+			Shell s = this.getShell();
+			s.keyInputHappened = false;
+			int mask = 0;
+			NSEvent nsEvent = new NSEvent (theEvent);
+			int /*long*/ modifiers = nsEvent.modifierFlags ();
+			int keyCode = Display.translateKey (nsEvent.keyCode ());
+			switch (keyCode) {
+				case SWT.ALT: mask = OS.NSAlternateKeyMask; break;
+				case SWT.CONTROL: mask = OS.NSControlKeyMask; break;
+				case SWT.COMMAND: mask = OS.NSCommandKeyMask; break;
+				case SWT.SHIFT: mask = OS.NSShiftKeyMask; break;
+				case SWT.CAPS_LOCK:
+					Event event = new Event();
+					event.keyCode = keyCode;
+					setInputState (event, nsEvent, SWT.KeyDown);
+					sendKeyEvent (SWT.KeyDown, event);
+					setInputState (event, nsEvent, SWT.KeyUp);
+					sendKeyEvent (SWT.KeyUp, event);
+					break;
+			}
+			if (mask != 0) {
+				s.keyInputHappened = true;
+				int type = (mask & modifiers) != 0 ? SWT.KeyDown : SWT.KeyUp;
+				if (type == SWT.KeyDown) s.keyInputHappened = true;
+				Event event = new Event();
+				event.keyCode = keyCode;
+				setInputState (event, nsEvent, type);
+				if (!sendKeyEvent (type, event)) return;
+			}
+		}
+	}
+	super.flagsChanged (id, sel, theEvent);
+}
+
+NSView focusView () {
+	return view;
+}
+
+/**
+ * Forces the receiver to have the <em>keyboard focus</em>, causing
+ * all keyboard events to be delivered to it.
+ *
+ * @return <code>true</code> if the control got focus, and <code>false</code> if it was unable to.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #setFocus
+ */
+public boolean forceFocus () {
+	checkWidget();
+	if (display.focusEvent == SWT.FocusOut) return false;
+	Decorations shell = menuShell ();
+	shell.setSavedFocus (this);
+	if (!isEnabled () || !isVisible () || !isActive ()) return false;
+	if (isFocusControl ()) return true;
+	shell.setSavedFocus (null);
+	NSView focusView = focusView ();
+	if (!focusView.canBecomeKeyView()) return false;
+	boolean result = view.window ().makeFirstResponder (focusView);
+	if (isDisposed ()) return false;
+	shell.bringToTop (false);
+	if (isDisposed ()) return false;
+	shell.setSavedFocus (this);
+	return result;
+}
+
+/**
+ * Returns the accessible object for the receiver.
+ * If this is the first time this object is requested,
+ * then the object is created and returned.
+ *
+ * @return the accessible object
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Accessible#addAccessibleListener
+ * @see Accessible#addAccessibleControlListener
+ * 
+ * @since 2.0
+ */
+public Accessible getAccessible () {
+	checkWidget ();
+	if (accessible == null) accessible = new_Accessible (this);
+	return accessible;
+}
+
+/**
+ * Returns the receiver's background color.
+ * <p>
+ * Note: This operation is a hint and may be overridden by the platform.
+ * For example, on some versions of Windows the background of a TabFolder,
+ * is a gradient rather than a solid color.
+ * </p>
+ * @return the background color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Color getBackground () {
+	checkWidget();
+	Control control = findBackgroundControl ();
+	if (control == null) control = this;
+	return control.getBackgroundColor ();
+}
+
+Color getBackgroundColor () {
+	return background != null ? Color.cocoa_new (display, background) : defaultBackground ();
+}
+
+/**
+ * Returns the receiver's background image.
+ *
+ * @return the background image
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public Image getBackgroundImage () {
+	checkWidget();
+	Control control = findBackgroundControl ();
+	if (control == null) control = this;
+	return control.backgroundImage;
+}
+
+/**
+ * Returns the receiver's border width.
+ *
+ * @return the border width
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getBorderWidth () {
+	checkWidget();
+    return 0;
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location
+ * relative to its parent (or its display if its parent is null),
+ * unless the receiver is a shell. In this case, the location is
+ * relative to the display.
+ *
+ * @return the receiver's bounding rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Rectangle getBounds () {
+	checkWidget();
+	NSRect rect = topView().frame();
+	return new Rectangle((int)rect.x, (int)rect.y, (int)rect.width, (int)rect.height);
+}
+
+/**
+ * Returns <code>true</code> if the receiver is detecting
+ * drag gestures, and  <code>false</code> otherwise. 
+ *
+ * @return the receiver's drag detect state
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.3
+ */
+public boolean getDragDetect () {
+	checkWidget ();
+	return (state & DRAG_DETECT) != 0;
+}
+
+boolean getDrawing () {
+	return drawCount <= 0;
+}
+
+/**
+ * Returns the receiver's cursor, or null if it has not been set.
+ * <p>
+ * When the mouse pointer passes over a control its appearance
+ * is changed to match the control's cursor.
+ * </p>
+ *
+ * @return the receiver's cursor or <code>null</code>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.3
+ */
+public Cursor getCursor () {
+	checkWidget();
+	return cursor;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is enabled, and
+ * <code>false</code> otherwise. A disabled control is typically
+ * not selectable from the user interface and draws with an
+ * inactive or "grayed" look.
+ *
+ * @return the receiver's enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #isEnabled
+ */
+public boolean getEnabled () {
+	checkWidget();
+	return (state & DISABLED) == 0;
+}
+
+/**
+ * Returns the font that the receiver will use to paint textual information.
+ *
+ * @return the receiver's font
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Font getFont () {
+	checkWidget();
+	return font != null ? font : defaultFont ();
+}
+
+/**
+ * Returns the foreground color that the receiver will use to draw.
+ *
+ * @return the receiver's foreground color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Color getForeground () {
+	checkWidget();
+	return getForegroundColor ();
+}
+
+Color getForegroundColor () {
+	return foreground != null ? Color.cocoa_new (display, foreground) : defaultForeground ();
+}
+
+/**
+ * Returns layout data which is associated with the receiver.
+ *
+ * @return the receiver's layout data
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Object getLayoutData () {
+	checkWidget();
+	return layoutData;
+}
+
+/**
+ * Returns a point describing the receiver's location relative
+ * to its parent (or its display if its parent is null), unless
+ * the receiver is a shell. In this case, the point is 
+ * relative to the display. 
+ *
+ * @return the receiver's location
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Point getLocation () {
+	checkWidget();
+	NSRect rect = topView().frame();
+	return new Point((int)rect.x, (int)rect.y);
+}
+
+/**
+ * Returns the receiver's pop up menu if it has one, or null
+ * if it does not. All controls may optionally have a pop up
+ * menu that is displayed when the user requests one for
+ * the control. The sequence of key strokes, button presses
+ * and/or button releases that are used to request a pop up
+ * menu is platform specific.
+ *
+ * @return the receiver's menu
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Menu getMenu () {
+	checkWidget();
+	return menu;
+}
+
+int getMininumHeight () {
+	return 0;
+}
+
+/**
+ * Returns the receiver's monitor.
+ * 
+ * @return the receiver's monitor
+ * 
+ * @since 3.0
+ */
+public Monitor getMonitor () {
+	checkWidget();
+	Monitor [] monitors = display.getMonitors ();
+	if (monitors.length == 1) return monitors [0];
+	int index = -1, value = -1;
+	Rectangle bounds = getBounds ();
+	if (this != getShell ()) {
+		bounds = display.map (this.parent, null, bounds);
+	}
+	for (int i=0; i<monitors.length; i++) {
+		Rectangle rect = bounds.intersection (monitors [i].getBounds ());
+		int area = rect.width * rect.height;
+		if (area > 0 && area > value) {
+			index = i;
+			value = area;
+		}
+	}
+	if (index >= 0) return monitors [index];
+	int centerX = bounds.x + bounds.width / 2, centerY = bounds.y + bounds.height / 2;
+	for (int i=0; i<monitors.length; i++) {
+		Rectangle rect = monitors [i].getBounds ();
+		int x = centerX < rect.x ? rect.x - centerX : centerX > rect.x + rect.width ? centerX - rect.x - rect.width : 0;
+		int y = centerY < rect.y ? rect.y - centerY : centerY > rect.y + rect.height ? centerY - rect.y - rect.height : 0;
+		int distance = x * x + y * y;
+		if (index == -1 || distance < value) {
+			index = i;
+			value = distance;
+		} 
+	}
+	return monitors [index];
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>Composite</code>
+ * or null when the receiver is a shell that was created with null or
+ * a display for a parent.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Composite getParent () {
+	checkWidget();
+	return parent;
+}
+
+Control [] getPath () {
+	int count = 0;
+	Shell shell = getShell ();
+	Control control = this;
+	while (control != shell) {
+		count++;
+		control = control.parent;
+	}
+	control = this;
+	Control [] result = new Control [count];
+	while (control != shell) {
+		result [--count] = control;
+		control = control.parent;
+	}
+	return result;
+}
+
+NSBezierPath getPath(Region region) {
+	if (region == null) return null;
+	return getPath(region.handle);
+}
+
+NSBezierPath getPath(int /*long*/ region) {
+	Callback callback = new Callback(this, "regionToRects", 4);
+	if (callback.getAddress() == 0) SWT.error(SWT.ERROR_NO_MORE_CALLBACKS);
+	NSBezierPath path = NSBezierPath.bezierPath();
+	path.retain();
+	OS.QDRegionToRects(region, OS.kQDParseRegionFromTopLeft, callback.getAddress(), path.id);
+	callback.dispose();
+	if (path.isEmpty()) path.appendBezierPathWithRect(new NSRect());
+	return path;
+}
+
+/** 
+ * Returns the region that defines the shape of the control,
+ * or null if the control has the default shape.
+ *
+ * @return the region that defines the shape of the shell (or null)
+ *	
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.4
+ */
+public Region getRegion () {
+	checkWidget ();
+	return region;
+}
+
+/**
+ * Returns the receiver's shell. For all controls other than
+ * shells, this simply returns the control's nearest ancestor
+ * shell. Shells return themselves, even if they are children
+ * of other shells.
+ *
+ * @return the receiver's shell
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getParent
+ */
+public Shell getShell () {
+	checkWidget();
+	return parent.getShell ();
+}
+
+/**
+ * Returns a point describing the receiver's size. The
+ * x coordinate of the result is the width of the receiver.
+ * The y coordinate of the result is the height of the
+ * receiver.
+ *
+ * @return the receiver's size
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Point getSize () {
+	checkWidget();
+	NSRect rect = topView().frame();
+	return new Point((int)rect.width, (int)rect.height);
+}
+
+float getThemeAlpha () {
+	return 1 * parent.getThemeAlpha ();
+}
+
+/**
+ * Returns the receiver's tool tip text, or null if it has
+ * not been set.
+ *
+ * @return the receiver's tool tip text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getToolTipText () {
+	checkWidget();
+	return toolTipText;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is visible, and
+ * <code>false</code> otherwise.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, this method
+ * may still indicate that it is considered visible even though
+ * it may not actually be showing.
+ * </p>
+ *
+ * @return the receiver's visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getVisible () {
+	checkWidget();
+	return (state & HIDDEN) == 0;
+}
+
+int /*long*/ getVisibleRegion () {
+	if (visibleRgn == 0) {
+		visibleRgn = OS.NewRgn ();
+		calculateVisibleRegion (view, visibleRgn, true);
+	}
+	int /*long*/ result = OS.NewRgn ();
+	OS.CopyRgn (visibleRgn, result);
+	return result;
+}
+
+boolean hasBorder () {
+	return (style & SWT.BORDER) != 0;
+}
+
+boolean hasFocus () {
+	return display.getFocusControl() == this;
+}
+
+int /*long*/ hitTest (int /*long*/ id, int /*long*/ sel, NSPoint point) {
+	if ((state & DISABLED) != 0) return 0;
+	if (!isActive ()) return 0;
+	if (regionPath != null) {
+		NSView superview = new NSView(id).superview();
+		if (superview != null) {
+			NSPoint pt = superview.convertPoint_toView_(point, view);
+			if (!view.isFlipped ()) {
+				pt.y = view.bounds().height - pt.y;
+			}
+			if (!regionPath.containsPoint(pt)) return 0;
+		}
+	}
+	return super.hitTest(id, sel, point);
+}
+
+boolean imeInComposition () {
+	return false;
+}
+
+boolean insertText (int /*long*/ id, int /*long*/ sel, int /*long*/ string) {
+	if (view.window ().firstResponder ().id == id) {
+		Shell s = this.getShell();
+		NSEvent nsEvent = NSApplication.sharedApplication ().currentEvent ();
+		if (nsEvent != null) {
+			int /*long*/ type = nsEvent.type ();
+			if ((!s.keyInputHappened && type == OS.NSKeyDown) || type == OS.NSSystemDefined) {
+				NSString str = new NSString (string);
+				if (str.isKindOfClass (OS.objc_getClass ("NSAttributedString"))) {
+					str = new NSAttributedString (string).string ();
+				}
+				int length = (int)/*64*/str.length ();
+				char[] buffer = new char [length];
+				str.getCharacters(buffer);
+				for (int i = 0; i < buffer.length; i++) {
+					s.keyInputHappened = true;
+					Event event = new Event ();
+					if (i == 0 && type == OS.NSKeyDown) setKeyState (event, SWT.KeyDown, nsEvent);
+					event.character = buffer [i];
+					if (!sendKeyEvent (SWT.KeyDown, event)) return false;
+				}
+			}
+		}
+		if ((state & CANVAS) != 0) return true;
+	}
+	return super.insertText (id, sel, string);
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new GC handle.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Control</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param data the platform specific GC data 
+ * @return the platform specific GC handle
+ */
+public int /*long*/ internal_new_GC (GCData data) {
+	checkWidget();
+	NSView view = paintView();
+	int /*long*/ context = 0;
+	if (data != null && data.paintRect != null) {
+		NSGraphicsContext graphicsContext = NSGraphicsContext.currentContext();
+		context = graphicsContext.id;
+		if (!view.isFlipped()) data.state &= ~VISIBLE_REGION;
+	} else {
+		NSGraphicsContext graphicsContext = NSGraphicsContext.graphicsContextWithWindow (view.window ());
+		NSGraphicsContext flippedContext = NSGraphicsContext.graphicsContextWithGraphicsPort(graphicsContext.graphicsPort(), true);
+		graphicsContext = flippedContext;
+		context = graphicsContext.id;
+		if (data != null) {
+			data.flippedContext = flippedContext;
+			data.state &= ~VISIBLE_REGION;
+			data.visibleRgn = getVisibleRegion();
+			display.addContext (data);
+		}
+	}
+	if (data != null) {
+		int mask = SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT;
+		if ((data.style & mask) == 0) {
+			data.style |= style & (mask | SWT.MIRRORED);
+		}
+		data.device = display;
+		data.thread = display.thread;
+		data.view = view;
+		data.foreground = getForegroundColor ().handle;
+		Control control = findBackgroundControl ();
+		if (control == null) control = this;
+		data.background = control.getBackgroundColor ().handle;
+		data.font = font != null ? font : defaultFont ();		
+	}
+	return context;
+}
+
+/**	 
+ * Invokes platform specific functionality to dispose a GC handle.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Control</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param hDC the platform specific GC handle
+ * @param data the platform specific GC data 
+ */
+public void internal_dispose_GC (int /*long*/ context, GCData data) {
+	checkWidget ();
+	NSGraphicsContext graphicsContext = new NSGraphicsContext (context);
+	display.removeContext (data);
+	if (data != null) {
+		if (data.paintRect == null) graphicsContext.flushGraphics ();
+		if (data.visibleRgn != 0) OS.DisposeRgn(data.visibleRgn);
+		data.visibleRgn = 0;
+	}
+}
+
+void invalidateChildrenVisibleRegion () {
+}
+
+void invalidateVisibleRegion () {
+	int index = 0;
+	Control[] siblings = parent._getChildren ();
+	while (index < siblings.length && siblings [index] != this) index++;
+	for (int i=index; i<siblings.length; i++) {
+		Control sibling = siblings [i];
+		sibling.resetVisibleRegion ();
+		sibling.invalidateChildrenVisibleRegion ();
+	}
+	parent.resetVisibleRegion ();
+}
+
+boolean isActive () {
+	return getShell().getModalShell() == null;
+}
+
+/*
+ * Answers a boolean indicating whether a Label that precedes the receiver in
+ * a layout should be read by screen readers as the recevier's label.
+ */
+boolean isDescribedByLabel () {
+	return true;
+}
+
+boolean isDrawing () {
+	return getDrawing() && parent.isDrawing();
+}
+
+/**
+ * Returns <code>true</code> if the receiver is enabled and all
+ * ancestors up to and including the receiver's nearest ancestor
+ * shell are enabled.  Otherwise, <code>false</code> is returned.
+ * A disabled control is typically not selectable from the user
+ * interface and draws with an inactive or "grayed" look.
+ *
+ * @return the receiver's enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #getEnabled
+ */
+public boolean isEnabled () {
+	checkWidget();
+	return getEnabled () && parent.isEnabled ();
+}
+
+boolean isEnabledCursor () {
+	return isEnabled ();
+}
+
+boolean isFocusAncestor (Control control) {
+	while (control != null && control != this && !(control instanceof Shell)) {
+		control = control.parent;
+	}
+	return control == this;
+}
+
+/**
+ * Returns <code>true</code> if the receiver has the user-interface
+ * focus, and <code>false</code> otherwise.
+ *
+ * @return the receiver's focus state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean isFocusControl () {
+	checkWidget();
+	Control focusControl = display.focusControl;
+	if (focusControl != null && !focusControl.isDisposed ()) {
+		return this == focusControl;
+	}
+	return hasFocus ();
+}
+
+boolean isObscured () {
+	int /*long*/ visibleRgn = getVisibleRegion(), boundsRgn = OS.NewRgn();
+	short[] rect = new short[4];
+	NSRect bounds = view.visibleRect();
+	OS.SetRect(rect, (short)bounds.x, (short)bounds.y, (short)(bounds.x + bounds.width), (short)(bounds.y + bounds.height));
+	OS.RectRgn(boundsRgn, rect);
+	OS.DiffRgn(boundsRgn, visibleRgn, boundsRgn);
+	boolean obscured = !OS.EmptyRgn (boundsRgn);
+	OS.DisposeRgn(boundsRgn);
+	OS.DisposeRgn(visibleRgn);
+	return obscured;
+}
+
+/**
+ * Returns <code>true</code> if the underlying operating
+ * system supports this reparenting, otherwise <code>false</code>
+ *
+ * @return <code>true</code> if the widget can be reparented, otherwise <code>false</code>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean isReparentable () {
+	checkWidget();
+	return true;
+}
+
+boolean isShowing () {
+	/*
+	* This is not complete.  Need to check if the
+	* widget is obscurred by a parent or sibling.
+	*/
+	if (!isVisible ()) return false;
+	Control control = this;
+	while (control != null) {
+		Point size = control.getSize ();
+		if (size.x == 0 || size.y == 0) {
+			return false;
+		}
+		control = control.parent;
+	}
+	return true;
+}
+
+boolean isTabGroup () {
+	Control [] tabList = parent._getTabList ();
+	if (tabList != null) {
+		for (int i=0; i<tabList.length; i++) {
+			if (tabList [i] == this) return true;
+		}
+	}
+	int code = traversalCode (0, null);
+	if ((code & (SWT.TRAVERSE_ARROW_PREVIOUS | SWT.TRAVERSE_ARROW_NEXT)) != 0) return false;
+	return (code & (SWT.TRAVERSE_TAB_PREVIOUS | SWT.TRAVERSE_TAB_NEXT)) != 0;
+}
+
+boolean isTabItem () {
+	Control [] tabList = parent._getTabList ();
+	if (tabList != null) {
+		for (int i=0; i<tabList.length; i++) {
+			if (tabList [i] == this) return false;
+		}
+	}
+	int code = traversalCode (0, null);
+	return (code & (SWT.TRAVERSE_ARROW_PREVIOUS | SWT.TRAVERSE_ARROW_NEXT)) != 0;
+}
+
+boolean isTrim (NSView view) {
+	return false;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is visible and all
+ * ancestors up to and including the receiver's nearest ancestor
+ * shell are visible. Otherwise, <code>false</code> is returned.
+ *
+ * @return the receiver's visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getVisible
+ */
+public boolean isVisible () {
+	checkWidget();
+	return getVisible () && parent.isVisible ();
+}
+
+void keyDown (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (view.window ().firstResponder ().id == id) {
+		Shell s = this.getShell();
+		s.keyInputHappened = false;
+		boolean textInput = OS.objc_msgSend (id, OS.sel_conformsToProtocol_, OS.objc_getProtocol ("NSTextInput")) != 0;
+		if (!textInput) {
+			// Not a text field, so send a key event here.
+			NSEvent nsEvent = new NSEvent (theEvent);
+			boolean [] consume = new boolean [1];
+			if (translateTraversal (nsEvent.keyCode (), nsEvent, consume)) return;
+			if (isDisposed ()) return;
+			if (!sendKeyEvent (nsEvent, SWT.KeyDown)) return;
+			if (consume [0]) return;
+		} else {
+			// Control is some kind of text field, so the key event will be sent from insertText: or doCommandBySelector:
+			super.keyDown (id, sel, theEvent);
+
+			if (imeInComposition ()) return;
+			// If none of those methods triggered a key event send one now.
+			if (!s.keyInputHappened) {
+				NSEvent nsEvent = new NSEvent (theEvent);
+				boolean [] consume = new boolean [1];
+				if (translateTraversal (nsEvent.keyCode (), nsEvent, consume)) return;
+				if (isDisposed ()) return;
+				if (!sendKeyEvent (nsEvent, SWT.KeyDown)) return;
+				if (consume [0]) return;
+			}
+			
+			return;
+		}
+	}
+	super.keyDown (id, sel, theEvent);
+}
+
+void keyUp (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (view.window ().firstResponder ().id == id) {
+		NSEvent nsEvent = new NSEvent (theEvent);
+		if (!sendKeyEvent (nsEvent, SWT.KeyUp)) return;
+	}
+	super.keyUp (id, sel, theEvent);
+}
+
+void markLayout (boolean changed, boolean all) {
+	/* Do nothing */
+}
+
+int /*long*/ menuForEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (!isEnabled ()) return 0;
+
+	NSPoint pt = NSEvent.mouseLocation();
+	pt.y = (int) (display.getPrimaryFrame().height - pt.y);
+	int x = (int) pt.x;
+	int y = (int) pt.y;
+	Event event = new Event ();
+	event.x = x;
+	event.y = y;
+	sendEvent (SWT.MenuDetect, event);
+	//widget could be disposed at this point
+	if (isDisposed ()) return 0;
+	if (!event.doit) return 0;
+	Menu menu = getMenu ();
+	if (menu != null && !menu.isDisposed ()) {
+		if (x != event.x || y != event.y) {
+			menu.setLocation (event.x, event.y);
+		}
+		menu.setVisible(true);
+		return 0;
+	}
+	return super.menuForEvent (id, sel, theEvent);
+}
+
+Decorations menuShell () {
+	return parent.menuShell ();
+}
+
+void scrollWheel (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (id == view.id) {
+		if (hooks (SWT.MouseWheel) || filters (SWT.MouseWheel)) {
+			NSEvent nsEvent = new NSEvent(theEvent);
+			if (nsEvent.deltaY() != 0) {
+				if (!sendMouseEvent(nsEvent, SWT.MouseWheel, true)) {
+					return;
+				}
+			}
+		}
+	}
+	super.scrollWheel(id, sel, theEvent); 
+}
+
+boolean isEventView (int /*long*/ id) {
+	return true;
+}
+
+boolean mouseEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent, int type) {
+	if (!display.sendEvent) return true;
+	display.sendEvent = false;
+	if (!isEventView (id)) return true;
+	boolean dragging = false;
+	boolean[] consume = null;
+	NSEvent nsEvent = new NSEvent(theEvent);
+	int nsType = (int)/*64*/nsEvent.type();
+	NSInputManager manager = NSInputManager.currentInputManager ();
+	if (manager != null && manager.wantsToHandleMouseEvents ()) {
+		if (manager.handleMouseEvent (nsEvent)) {
+			return true;
+		}
+	}
+	switch (nsType) {
+		case OS.NSLeftMouseDown:
+			if (nsEvent.clickCount() == 1 && (state & DRAG_DETECT) != 0 && hooks (SWT.DragDetect)) {
+				consume = new boolean[1];
+				NSPoint location = view.convertPoint_fromView_(nsEvent.locationInWindow(), null);
+				if (!view.isFlipped ()) {
+					location.y = view.bounds().height - location.y;
+				}
+				dragging = dragDetect((int)location.x, (int)location.y, false, consume);
+			}
+			break;
+		case OS.NSLeftMouseDragged:
+		case OS.NSRightMouseDragged:
+		case OS.NSOtherMouseDragged:
+			display.checkEnterExit (this, nsEvent, false);
+			break;
+		case OS.NSLeftMouseUp:
+		case OS.NSRightMouseUp:
+		case OS.NSOtherMouseUp:
+			display.checkEnterExit (display.findControl(true), nsEvent, false);
+			break;
+	}
+	sendMouseEvent (nsEvent, type, false);	
+	if (type == SWT.MouseDown && nsEvent.clickCount() == 2) {
+		sendMouseEvent (nsEvent, SWT.MouseDoubleClick, false);
+	}
+	if (dragging) sendMouseEvent(nsEvent, SWT.DragDetect, false);
+	if (consume != null && consume[0]) return false;
+	return true;
+}
+
+void mouseDown(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (!mouseEvent(id, sel, theEvent, SWT.MouseDown)) return;
+	boolean tracking = isEventView (id);
+	Display display = this.display;
+	if (tracking) display.trackingControl = this;
+	super.mouseDown(id, sel, theEvent);
+	if (tracking) display.trackingControl = null;
+}
+
+void mouseUp(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (!mouseEvent(id, sel, theEvent, SWT.MouseUp)) return;
+	super.mouseUp(id, sel, theEvent);
+}
+
+void mouseDragged(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (!mouseEvent(id, sel, theEvent, SWT.MouseMove)) return;
+	super.mouseDragged(id, sel, theEvent);
+}
+
+void rightMouseDown(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (!mouseEvent(id, sel, theEvent, SWT.MouseDown)) return;
+	super.rightMouseDown(id, sel, theEvent);
+}
+
+void rightMouseUp(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (!mouseEvent(id, sel, theEvent, SWT.MouseUp)) return;
+	super.rightMouseUp(id, sel, theEvent);
+}
+
+void rightMouseDragged(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (!mouseEvent(id, sel, theEvent, SWT.MouseMove)) return;
+	super.rightMouseDragged(id, sel, theEvent);
+}
+
+void otherMouseDown(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (!mouseEvent(id, sel, theEvent, SWT.MouseDown)) return;
+	super.otherMouseDown(id, sel, theEvent);
+}
+
+void otherMouseUp(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (!mouseEvent(id, sel, theEvent, SWT.MouseUp)) return;
+	super.otherMouseUp(id, sel, theEvent);
+}
+
+void otherMouseDragged(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (!mouseEvent(id, sel, theEvent, SWT.MouseMove)) return;
+	super.otherMouseDragged(id, sel, theEvent);
+}
+
+void moved () {
+	sendEvent (SWT.Move);
+}
+
+/**
+ * Moves the receiver above the specified control in the
+ * drawing order. If the argument is null, then the receiver
+ * is moved to the top of the drawing order. The control at
+ * the top of the drawing order will not be covered by other
+ * controls even if they occupy intersecting areas.
+ *
+ * @param control the sibling control (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the control has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Control#moveBelow
+ * @see Composite#getChildren
+ */
+public void moveAbove (Control control) {
+	checkWidget();
+	if (control != null) {
+		if (control.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+		if (parent != control.parent) return;
+	}
+	setZOrder (control, true);
+}
+
+/**
+ * Moves the receiver below the specified control in the
+ * drawing order. If the argument is null, then the receiver
+ * is moved to the bottom of the drawing order. The control at
+ * the bottom of the drawing order will be covered by all other
+ * controls which occupy intersecting areas.
+ *
+ * @param control the sibling control (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the control has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Control#moveAbove
+ * @see Composite#getChildren
+ */
+public void moveBelow (Control control) {
+	checkWidget();
+	if (control != null) {
+		if (control.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+		if (parent != control.parent) return;
+	}
+	setZOrder (control, false);
+}
+
+Accessible new_Accessible (Control control) {
+	return Accessible.internal_new_Accessible (this);
+}
+
+/**
+ * Causes the receiver to be resized to its preferred size.
+ * For a composite, this involves computing the preferred size
+ * from its layout, if there is one.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #computeSize(int, int, boolean)
+ */
+public void pack () {
+	checkWidget();
+	pack (true);
+}
+
+/**
+ * Causes the receiver to be resized to its preferred size.
+ * For a composite, this involves computing the preferred size
+ * from its layout, if there is one.
+ * <p>
+ * If the changed flag is <code>true</code>, it indicates that the receiver's
+ * <em>contents</em> have changed, therefore any caches that a layout manager
+ * containing the control may have been keeping need to be flushed. When the
+ * control is resized, the changed flag will be <code>false</code>, so layout
+ * manager caches can be retained. 
+ * </p>
+ *
+ * @param changed whether or not the receiver's contents have changed
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #computeSize(int, int, boolean)
+ */
+public void pack (boolean changed) {
+	checkWidget();
+	setSize (computeSize (SWT.DEFAULT, SWT.DEFAULT, changed));
+}
+
+NSView paintView () {
+	return eventView ();
+}
+
+/**
+ * Prints the receiver and all children.
+ * 
+ * @param gc the gc where the drawing occurs
+ * @return <code>true</code> if the operation was successful and <code>false</code> otherwise
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the gc is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the gc has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public boolean print (GC gc) {
+	checkWidget ();
+	if (gc == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	
+	gc.handle.saveGraphicsState();
+	NSGraphicsContext.setCurrentContext(gc.handle);
+	NSAffineTransform transform = NSAffineTransform.transform ();
+	transform.translateXBy (0, view.bounds().height);
+	transform.scaleXBy (1, -1);
+	transform.concat ();
+	view.displayRectIgnoringOpacity(view.bounds(), gc.handle);
+	gc.handle.restoreGraphicsState();
+	return true;
+}
+
+/**
+ * Causes the entire bounds of the receiver to be marked
+ * as needing to be redrawn. The next time a paint request
+ * is processed, the control will be completely painted,
+ * including the background.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #update()
+ * @see PaintListener
+ * @see SWT#Paint
+ * @see SWT#NO_BACKGROUND
+ * @see SWT#NO_REDRAW_RESIZE
+ * @see SWT#NO_MERGE_PAINTS
+ * @see SWT#DOUBLE_BUFFERED
+ */
+public void redraw () {
+	checkWidget();
+	view.setNeedsDisplay(true);
+}
+
+void redraw (boolean children) {
+//	checkWidget();
+	view.setNeedsDisplay(true);
+}
+
+/**
+ * Causes the rectangular area of the receiver specified by
+ * the arguments to be marked as needing to be redrawn. 
+ * The next time a paint request is processed, that area of
+ * the receiver will be painted, including the background.
+ * If the <code>all</code> flag is <code>true</code>, any
+ * children of the receiver which intersect with the specified
+ * area will also paint their intersecting areas. If the
+ * <code>all</code> flag is <code>false</code>, the children
+ * will not be painted.
+ *
+ * @param x the x coordinate of the area to draw
+ * @param y the y coordinate of the area to draw
+ * @param width the width of the area to draw
+ * @param height the height of the area to draw
+ * @param all <code>true</code> if children should redraw, and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #update()
+ * @see PaintListener
+ * @see SWT#Paint
+ * @see SWT#NO_BACKGROUND
+ * @see SWT#NO_REDRAW_RESIZE
+ * @see SWT#NO_MERGE_PAINTS
+ * @see SWT#DOUBLE_BUFFERED
+ */
+public void redraw (int x, int y, int width, int height, boolean all) {
+	checkWidget ();
+	NSRect rect = new NSRect();
+	rect.x = x;
+	rect.y = y;
+	rect.width = width;
+	rect.height = height;
+	view.setNeedsDisplayInRect(rect);
+}
+
+int /*long*/ regionToRects(int /*long*/ message, int /*long*/ rgn, int /*long*/ r, int /*long*/ path) {
+	NSPoint pt = new NSPoint();
+	short[] rect = new short[4];
+	if (message == OS.kQDRegionToRectsMsgParse) {
+		OS.memmove(rect, r, rect.length * 2);
+		pt.x = rect[1];
+		pt.y = rect[0];
+		OS.objc_msgSend(path, OS.sel_moveToPoint_, pt);
+		pt.x = rect[3];
+		OS.objc_msgSend(path, OS.sel_lineToPoint_, pt);
+		pt.x = rect[3];
+		pt.y = rect[2];
+		OS.objc_msgSend(path, OS.sel_lineToPoint_, pt);
+		pt.x = rect[1];
+		OS.objc_msgSend(path, OS.sel_lineToPoint_, pt);
+		OS.objc_msgSend(path, OS.sel_closePath);
+	}
+	return 0;
+}
+
+void register () {
+	super.register ();
+	display.addWidget (view, this);
+}
+
+void release (boolean destroy) {
+	Control next = null, previous = null;
+	if (destroy && parent != null) {
+		Control[] children = parent._getChildren ();
+		int index = 0;
+		while (index < children.length) {
+			if (children [index] == this) break;
+			index++;
+		}
+		if (0 < index && (index + 1) < children.length) {
+			next = children [index + 1];
+			previous = children [index - 1];
+		}
+	}
+	super.release (destroy);
+	if (destroy) {
+		if (previous != null) previous.addRelation (next);
+	}
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (view != null) view.release();
+	view = null;
+	parent = null;
+}
+
+void releaseParent () {
+	invalidateVisibleRegion ();
+	parent.removeControl (this);
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	if (display.currentControl == this) {
+		display.currentControl = null;
+		display.timerExec(-1, display.hoverTimer);
+	}
+	if (display.trackingControl == this) display.trackingControl = null;
+	if (display.tooltipControl == this) display.tooltipControl = null;
+	if (menu != null && !menu.isDisposed ()) {
+		menu.dispose ();
+	}
+	menu = null;
+	if (visibleRgn != 0) OS.DisposeRgn (visibleRgn);
+	visibleRgn = 0;
+	layoutData = null;
+	if (accessible != null) {
+		accessible.internal_dispose_Accessible ();
+	}
+	accessible = null;
+	region = null;
+	if (regionPath != null) regionPath.release();
+	regionPath = null;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is moved or resized.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ControlListener
+ * @see #addControlListener
+ */
+public void removeControlListener (ControlListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Move, listener);
+	eventTable.unhook (SWT.Resize, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when a drag gesture occurs.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see DragDetectListener
+ * @see #addDragDetectListener
+ * 
+ * @since 3.3
+ */
+public void removeDragDetectListener(DragDetectListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.DragDetect, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control gains or loses focus.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see FocusListener
+ * @see #addFocusListener
+ */
+public void removeFocusListener(FocusListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook(SWT.FocusIn, listener);
+	eventTable.unhook(SWT.FocusOut, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the help events are generated for the control.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see HelpListener
+ * @see #addHelpListener
+ */
+public void removeHelpListener (HelpListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Help, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when keys are pressed and released on the system keyboard.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see KeyListener
+ * @see #addKeyListener
+ */
+public void removeKeyListener(KeyListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook(SWT.KeyUp, listener);
+	eventTable.unhook(SWT.KeyDown, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the platform-specific context menu trigger has
+ * occurred.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MenuDetectListener
+ * @see #addMenuDetectListener
+ *
+ * @since 3.3
+ */
+public void removeMenuDetectListener (MenuDetectListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.MenuDetect, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when mouse buttons are pressed and released.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MouseListener
+ * @see #addMouseListener
+ */
+public void removeMouseListener(MouseListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook(SWT.MouseDown, listener);
+	eventTable.unhook(SWT.MouseUp, listener);
+	eventTable.unhook(SWT.MouseDoubleClick, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the mouse moves.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MouseMoveListener
+ * @see #addMouseMoveListener
+ */
+public void removeMouseMoveListener(MouseMoveListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook(SWT.MouseMove, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the mouse passes or hovers over controls.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MouseTrackListener
+ * @see #addMouseTrackListener
+ */
+public void removeMouseTrackListener(MouseTrackListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.MouseEnter, listener);
+	eventTable.unhook (SWT.MouseExit, listener);
+	eventTable.unhook (SWT.MouseHover, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the mouse wheel is scrolled.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MouseWheelListener
+ * @see #addMouseWheelListener
+ *
+ * @since 3.3
+ */
+public void removeMouseWheelListener (MouseWheelListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.MouseWheel, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the receiver needs to be painted.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see PaintListener
+ * @see #addPaintListener
+ */
+public void removePaintListener(PaintListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook(SWT.Paint, listener);
+}
+
+/*
+ * Remove "Labeled by" relations from the receiver.
+ */
+void removeRelation () {
+	if (!isDescribedByLabel()) return;
+	NSObject accessibleElement = focusView();
+	
+	if (accessibleElement instanceof NSControl) {
+		NSControl viewAsControl = (NSControl) accessibleElement;
+		if (viewAsControl.cell() != null) accessibleElement = viewAsControl.cell();
+	}
+	
+	accessibleElement.accessibilitySetOverrideValue(accessibleElement, OS.NSAccessibilityTitleUIElementAttribute);
+}
+
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when traversal events occur.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see TraverseListener
+ * @see #addTraverseListener
+ */
+public void removeTraverseListener(TraverseListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Traverse, listener);
+}
+
+void resetVisibleRegion () {
+	if (visibleRgn != 0) {
+		OS.DisposeRgn (visibleRgn);
+		visibleRgn = 0;
+	}
+	GCData[] gcs = display.contexts;
+	if (gcs != null) {
+		int /*long*/ visibleRgn = 0;
+		for (int i=0; i<gcs.length; i++) {
+			GCData data = gcs [i];
+			if (data != null) {
+				if (data.view == view) {
+					if (visibleRgn == 0) visibleRgn = getVisibleRegion ();
+					data.state &= ~VISIBLE_REGION;
+					OS.CopyRgn (visibleRgn, data.visibleRgn);
+				}
+			}
+		}
+		if (visibleRgn != 0) OS.DisposeRgn (visibleRgn);
+	}
+}
+
+void resized () {
+	sendEvent (SWT.Resize);
+}
+
+boolean sendDragEvent (int button, int stateMask, int x, int y) {
+	Event event = new Event ();
+	event.button = button;
+	event.x = x;
+	event.y = y;
+	event.stateMask = stateMask;
+	postEvent (SWT.DragDetect, event);
+	return event.doit;
+}
+
+void sendFocusEvent (int type) {
+	Display display = this.display;
+	Shell shell = getShell ();
+
+	display.focusEvent = type;
+	display.focusControl = this;
+	sendEvent (type);
+	// widget could be disposed at this point
+	display.focusEvent = SWT.None;
+	display.focusControl = null;
+
+	/*
+	* It is possible that the shell may be
+	* disposed at this point.  If this happens
+	* don't send the activate and deactivate
+	* events.
+	*/
+	if (!shell.isDisposed ()) {
+		switch (type) {
+			case SWT.FocusIn:
+				shell.setActiveControl (this);
+				break;
+			case SWT.FocusOut:
+				if (shell != display.getActiveShell ()) {
+					shell.setActiveControl (null);
+				}
+				break;
+		}
+	}
+}
+
+boolean sendMouseEvent (NSEvent nsEvent, int type, boolean send) {
+	Shell shell = null;
+	Event event = new Event ();
+	switch (type) {
+		case SWT.MouseDown:
+			shell = getShell ();
+			//FALL THROUGH
+		case SWT.MouseUp:
+		case SWT.MouseDoubleClick:
+		case SWT.DragDetect:
+			int button = (int)/*64*/nsEvent.buttonNumber();
+			switch (button) {
+				case 0: event.button = 1; break;
+				case 1: event.button = 3; break;
+				case 2: event.button = 2; break;
+				case 3: event.button = 4; break;
+				case 4: event.button = 5; break;
+			}
+			break;
+		case SWT.MouseWheel:
+			event.detail = SWT.SCROLL_LINE;
+			float /*double*/ delta = nsEvent.deltaY();
+			event.count = delta > 0 ? Math.max (1, (int)delta) : Math.min (-1, (int)delta);
+			break;
+	}
+	if (event.button != 0) event.count = (int)/*64*/nsEvent.clickCount();
+	NSPoint windowPoint;
+	NSView view = eventView ();
+	if (nsEvent == null || nsEvent.type() == OS.NSMouseMoved) {
+		NSWindow window = view.window();
+		windowPoint = window.convertScreenToBase(NSEvent.mouseLocation()); 
+	} else {
+		windowPoint = nsEvent.locationInWindow();
+	}
+	NSPoint point = view.convertPoint_fromView_(windowPoint, null);
+	if (!view.isFlipped ()) {
+		point.y = view.bounds().height - point.y;
+	}
+	event.x = (int) point.x;
+	event.y = (int) point.y;
+	setInputState (event, nsEvent, type);
+	if (send) {
+		sendEvent (type, event);
+		if (isDisposed ()) return false;
+	} else {
+		postEvent (type, event);
+	}
+	if (shell != null) shell.setActiveControl(this);
+	return event.doit;
+}
+
+void setBackground () {
+//	redrawWidget (handle, false);
+}
+
+/**
+ * Sets the receiver's background color to the color specified
+ * by the argument, or to the default system color for the control
+ * if the argument is null.
+ * <p>
+ * Note: This operation is a hint and may be overridden by the platform.
+ * For example, on Windows the background of a Button cannot be changed.
+ * </p>
+ * @param color the new color (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setBackground (Color color) {
+	checkWidget();
+	if (color != null) {
+		if (color.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	float /*double*/ [] background = color != null ? color.handle : null;
+	if (equals (background, this.background)) return;
+	this.background = background;
+	updateBackground ();
+	redrawWidget(view, true);
+}
+
+/**
+ * Sets the receiver's background image to the image specified
+ * by the argument, or to the default system color for the control
+ * if the argument is null.  The background image is tiled to fill
+ * the available space.
+ * <p>
+ * Note: This operation is a hint and may be overridden by the platform.
+ * For example, on Windows the background of a Button cannot be changed.
+ * </p>
+ * @param image the new image (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument is not a bitmap</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setBackgroundImage (Image image) {
+	checkWidget();
+	if (image != null && image.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (image == backgroundImage) return;
+	backgroundImage = image;
+	updateBackground();
+	redrawWidget(view, false);
+}
+
+void updateBackground () {
+}
+
+void setBackground (NSColor nsColor) {
+}
+
+/**
+ * Sets the receiver's size and location to the rectangular
+ * area specified by the arguments. The <code>x</code> and 
+ * <code>y</code> arguments are relative to the receiver's
+ * parent (or its display if its parent is null), unless 
+ * the receiver is a shell. In this case, the <code>x</code>
+ * and <code>y</code> arguments are relative to the display.
+ * <p>
+ * Note: Attempting to set the width or height of the
+ * receiver to a negative number will cause that
+ * value to be set to zero instead.
+ * </p>
+ *
+ * @param x the new x coordinate for the receiver
+ * @param y the new y coordinate for the receiver
+ * @param width the new width for the receiver
+ * @param height the new height for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setBounds (int x, int y, int width, int height) {
+	checkWidget();
+	setBounds (x, y, Math.max (0, width), Math.max (0, height), true, true);
+}
+
+void setBounds (int x, int y, int width, int height, boolean move, boolean resize) {
+	NSView topView = topView();
+	if (move && resize) {
+		NSRect rect = new NSRect();
+		rect.x = x;
+		rect.y = y;
+		rect.width = width;
+		rect.height = height;
+		topView.setFrame (rect);
+	} else if (move) {
+		NSPoint point = new NSPoint();
+		point.x = x;
+		point.y = y;
+		topView.setFrameOrigin(point);
+	} else if (resize) {
+		NSSize size = new NSSize();
+		size.width = width;
+		size.height = height;
+		topView.setFrameSize(size);
+	}
+}
+
+/**
+ * Sets the receiver's size and location to the rectangular
+ * area specified by the argument. The <code>x</code> and 
+ * <code>y</code> fields of the rectangle are relative to
+ * the receiver's parent (or its display if its parent is null).
+ * <p>
+ * Note: Attempting to set the width or height of the
+ * receiver to a negative number will cause that
+ * value to be set to zero instead.
+ * </p>
+ *
+ * @param rect the new bounds for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setBounds (Rectangle rect) {
+	checkWidget ();
+	if (rect == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setBounds (rect.x, rect.y, Math.max (0, rect.width), Math.max (0, rect.height), true, true);
+}
+
+/**
+ * If the argument is <code>true</code>, causes the receiver to have
+ * all mouse events delivered to it until the method is called with
+ * <code>false</code> as the argument.  Note that on some platforms,
+ * a mouse button must currently be down for capture to be assigned.
+ *
+ * @param capture <code>true</code> to capture the mouse, and <code>false</code> to release it
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setCapture (boolean capture) {
+	checkWidget();
+}
+
+void setClipRegion (float /*double*/ x, float /*double*/ y) {
+	if (regionPath != null) {
+		NSAffineTransform transform = NSAffineTransform.transform();
+		transform.translateXBy(-x, -y);
+		regionPath.transformUsingAffineTransform(transform);
+		regionPath.addClip();
+		transform.translateXBy(2*x, 2*y);
+		regionPath.transformUsingAffineTransform(transform);
+	}
+	NSRect frame = topView().frame();
+	parent.setClipRegion(frame.x + x, frame.y + y);
+}
+
+/**
+ * Sets the receiver's cursor to the cursor specified by the
+ * argument, or to the default cursor for that kind of control
+ * if the argument is null.
+ * <p>
+ * When the mouse pointer passes over a control its appearance
+ * is changed to match the control's cursor.
+ * </p>
+ *
+ * @param cursor the new cursor (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setCursor (Cursor cursor) {
+	checkWidget();
+	if (cursor != null && cursor.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	this.cursor = cursor;
+	if (!isEnabled()) return;
+	if (!view.window().areCursorRectsEnabled()) return;
+	display.setCursor (display.currentControl);
+}
+
+void setDefaultFont () {
+	if (display.smallFonts) {
+		setFont (defaultFont ().handle);
+		setSmallSize ();
+	}
+}
+
+/**
+ * Sets the receiver's drag detect state. If the argument is
+ * <code>true</code>, the receiver will detect drag gestures,
+ * otherwise these gestures will be ignored.
+ *
+ * @param dragDetect the new drag detect state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.3
+ */
+public void setDragDetect (boolean dragDetect) {
+	checkWidget ();
+	if (dragDetect) {
+		state |= DRAG_DETECT;	
+	} else {
+		state &= ~DRAG_DETECT;
+	}
+}
+
+/**
+ * Enables the receiver if the argument is <code>true</code>,
+ * and disables it otherwise. A disabled control is typically
+ * not selectable from the user interface and draws with an
+ * inactive or "grayed" look.
+ *
+ * @param enabled the new enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setEnabled (boolean enabled) {
+	checkWidget();
+	if (((state & DISABLED) == 0) == enabled) return;
+	Control control = null;
+	boolean fixFocus = false;
+	if (!enabled) {
+		if (display.focusEvent != SWT.FocusOut) {
+			control = display.getFocusControl ();
+			fixFocus = isFocusAncestor (control);
+		}
+	}
+	if (enabled) {
+		state &= ~DISABLED;
+	} else {
+		state |= DISABLED;
+	}
+	enableWidget (enabled);
+	if (fixFocus) fixFocus (control);
+}
+
+/**
+ * Causes the receiver to have the <em>keyboard focus</em>, 
+ * such that all keyboard events will be delivered to it.  Focus
+ * reassignment will respect applicable platform constraints.
+ *
+ * @return <code>true</code> if the control got focus, and <code>false</code> if it was unable to.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #forceFocus
+ */
+public boolean setFocus () {
+	checkWidget();
+	if ((style & SWT.NO_FOCUS) != 0) return false;
+	return forceFocus ();
+}
+
+/**
+ * Sets the font that the receiver will use to paint textual information
+ * to the font specified by the argument, or to the default font for that
+ * kind of control if the argument is null.
+ *
+ * @param font the new font (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setFont (Font font) {
+	checkWidget();
+	if (font != null) { 
+		if (font.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	this.font = font;
+	setFont (font != null ? font.handle : defaultFont().handle);
+}
+
+void setFont (NSFont font) {
+	if (view instanceof NSControl) {
+		((NSControl)view).setFont(font);
+	}
+}
+
+/**
+ * Sets the receiver's foreground color to the color specified
+ * by the argument, or to the default system color for the control
+ * if the argument is null.
+ * <p>
+ * Note: This operation is a hint and may be overridden by the platform.
+ * </p>
+ * @param color the new color (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setForeground (Color color) {
+	checkWidget();
+	if (color != null) {
+		if (color.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	float /*double*/ [] foreground = color != null ? color.handle : null;
+	if (equals (foreground, this.foreground)) return;
+	this.foreground = foreground;
+	setForeground (foreground);
+	redrawWidget (view, false);
+}
+
+void setForeground (float /*double*/ [] color) {
+}
+
+void setFrameOrigin (int /*long*/ id, int /*long*/ sel, NSPoint point) {
+	NSView topView = topView ();
+	if (topView.id != id) {
+		super.setFrameOrigin(id, sel, point);
+		return;
+	}
+	NSRect frame = topView.frame();
+	super.setFrameOrigin(id, sel, point);
+	if (frame.x != point.x || frame.y != point.y) {
+		invalidateVisibleRegion();
+		moved ();
+	}
+}
+
+void setFrameSize (int /*long*/ id, int /*long*/ sel, NSSize size) {
+	NSView topView = topView ();
+	if (topView.id != id) {
+		super.setFrameSize(id, sel, size);
+		return;
+	}
+	NSRect frame = topView.frame();
+	super.setFrameSize(id, sel, size);
+	if (frame.width != size.width || frame.height != size.height) {
+		invalidateVisibleRegion();
+		resized ();
+	}
+}
+
+/**
+ * Sets the layout data associated with the receiver to the argument.
+ * 
+ * @param layoutData the new layout data for the receiver.
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setLayoutData (Object layoutData) {
+	checkWidget();
+	this.layoutData = layoutData;
+}
+
+/**
+ * Sets the receiver's location to the point specified by
+ * the arguments which are relative to the receiver's
+ * parent (or its display if its parent is null), unless 
+ * the receiver is a shell. In this case, the point is 
+ * relative to the display. 
+ *
+ * @param x the new x coordinate for the receiver
+ * @param y the new y coordinate for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setLocation (int x, int y) {
+	checkWidget();
+	setBounds (x, y, 0, 0, true, false);
+}
+
+/**
+ * Sets the receiver's location to the point specified by
+ * the arguments which are relative to the receiver's
+ * parent (or its display if its parent is null), unless 
+ * the receiver is a shell. In this case, the point is 
+ * relative to the display. 
+ *
+ * @param location the new location for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setLocation (Point location) {
+	checkWidget();
+	if (location == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setBounds (location.x, location.y, 0, 0, true, false);
+}
+
+/**
+ * Sets the receiver's pop up menu to the argument.
+ * All controls may optionally have a pop up
+ * menu that is displayed when the user requests one for
+ * the control. The sequence of key strokes, button presses
+ * and/or button releases that are used to request a pop up
+ * menu is platform specific.
+ * <p>
+ * Note: Disposing of a control that has a pop up menu will
+ * dispose of the menu.  To avoid this behavior, set the
+ * menu to null before the control is disposed.
+ * </p>
+ *
+ * @param menu the new pop up menu
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_MENU_NOT_POP_UP - the menu is not a pop up menu</li>
+ *    <li>ERROR_INVALID_PARENT - if the menu is not in the same widget tree</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the menu has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMenu (Menu menu) {
+	checkWidget();
+	if (menu != null) {
+		if (menu.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		if ((menu.style & SWT.POP_UP) == 0) {
+			error (SWT.ERROR_MENU_NOT_POP_UP);
+		}
+		if (menu.parent != menuShell ()) {
+			error (SWT.ERROR_INVALID_PARENT);
+		}
+	}
+	this.menu = menu;
+}
+
+/**
+ * Changes the parent of the widget to be the one provided if
+ * the underlying operating system supports this feature.
+ * Returns <code>true</code> if the parent is successfully changed.
+ *
+ * @param parent the new parent for the control.
+ * @return <code>true</code> if the parent is changed and <code>false</code> otherwise.
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is <code>null</code></li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *	</ul>
+ */
+public boolean setParent (Composite parent) {
+	checkWidget();
+	if (parent == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (parent.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (this.parent == parent) return true;
+	if (!isReparentable ()) return false;
+	releaseParent ();
+	Shell newShell = parent.getShell (), oldShell = getShell ();
+	Decorations newDecorations = parent.menuShell (), oldDecorations = menuShell ();
+	if (oldShell != newShell || oldDecorations != newDecorations) {
+		Menu [] menus = oldShell.findMenus (this);
+		fixChildren (newShell, oldShell, newDecorations, oldDecorations, menus);
+	}
+	NSView topView = topView ();
+	topView.retain();
+	topView.removeFromSuperview();
+	parent.contentView().addSubview(topView, OS.NSWindowBelow, null);
+	topView.release();
+	this.parent = parent;
+	return true;
+}
+
+/**
+ * If the argument is <code>false</code>, causes subsequent drawing
+ * operations in the receiver to be ignored. No drawing of any kind
+ * can occur in the receiver until the flag is set to true.
+ * Graphics operations that occurred while the flag was
+ * <code>false</code> are lost. When the flag is set to <code>true</code>,
+ * the entire widget is marked as needing to be redrawn.  Nested calls
+ * to this method are stacked.
+ * <p>
+ * Note: This operation is a hint and may not be supported on some
+ * platforms or for some widgets.
+ * </p>
+ *
+ * @param redraw the new redraw state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #redraw(int, int, int, int, boolean)
+ * @see #update()
+ */
+public void setRedraw (boolean redraw) {
+	checkWidget();
+	if (redraw) {
+		if (--drawCount == 0) {
+			invalidateVisibleRegion ();
+			redrawWidget(topView (), true);
+		}
+	} else {
+		if (drawCount == 0) {
+			invalidateVisibleRegion ();
+		}
+		drawCount++;
+	}
+}
+
+/**
+ * Sets the shape of the control to the region specified
+ * by the argument.  When the argument is null, the
+ * default shape of the control is restored.
+ *
+ * @param region the region that defines the shape of the control (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the region has been disposed</li>
+ * </ul>  
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.4
+ */
+public void setRegion (Region region) {
+	checkWidget ();
+	if (region != null && region.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT);
+	this.region = region;
+	if (regionPath != null) regionPath.release();
+	regionPath = getPath(region);
+	redrawWidget(view, true);
+}
+
+void setRelations () {
+	if (parent == null) return;
+	Control [] children = parent._getChildren ();
+	int count = children.length;
+	if (count > 1) {
+		/*
+		 * the receiver is the last item in the list, so its predecessor will
+		 * be the second-last item in the list
+		 */
+		Control child = children [count - 2];
+		if (child != this) {
+			child.addRelation (this);
+		}
+	}
+}
+
+boolean setRadioSelection (boolean value){
+	return false;
+}
+
+/**
+ * Sets the receiver's size to the point specified by the arguments.
+ * <p>
+ * Note: Attempting to set the width or height of the
+ * receiver to a negative number will cause that
+ * value to be set to zero instead.
+ * </p>
+ *
+ * @param width the new width for the receiver
+ * @param height the new height for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSize (int width, int height) {
+	checkWidget();
+	setBounds (0, 0, Math.max (0, width), Math.max (0, height), false, true);
+}
+
+/**
+ * Sets the receiver's size to the point specified by the argument.
+ * <p>
+ * Note: Attempting to set the width or height of the
+ * receiver to a negative number will cause them to be
+ * set to zero instead.
+ * </p>
+ *
+ * @param size the new size for the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSize (Point size) {
+	checkWidget ();
+	if (size == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setBounds (0, 0, Math.max (0, size.x), Math.max (0, size.y), false, true);
+}
+
+void setSmallSize () {
+	if (view instanceof NSControl) {
+		NSCell cell = ((NSControl)view).cell();
+		if (cell != null) cell.setControlSize (OS.NSSmallControlSize);
+	}
+}
+
+boolean setTabItemFocus () {
+	if (!isShowing ()) return false;
+	return forceFocus ();
+}
+
+/**
+ * Sets the receiver's tool tip text to the argument, which
+ * may be null indicating that the default tool tip for the 
+ * control will be shown. For a control that has a default
+ * tool tip, such as the Tree control on Windows, setting
+ * the tool tip text to an empty string replaces the default,
+ * causing no tool tip text to be shown.
+ * <p>
+ * The mnemonic indicator (character '&amp;') is not displayed in a tool tip.
+ * To display a single '&amp;' in the tool tip, the character '&amp;' can be 
+ * escaped by doubling it in the string.
+ * </p>
+ * 
+ * @param string the new tool tip text (or null)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setToolTipText (String string) {
+	checkWidget();
+	toolTipText = string;
+	checkToolTip (null);
+}
+
+/**
+ * Marks the receiver as visible if the argument is <code>true</code>,
+ * and marks it invisible otherwise. 
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, marking
+ * it visible may not actually cause it to be displayed.
+ * </p>
+ *
+ * @param visible the new visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setVisible (boolean visible) {
+	checkWidget();
+	if (visible) {
+		if ((state & HIDDEN) == 0) return;
+		state &= ~HIDDEN;
+	} else {
+		if ((state & HIDDEN) != 0) return;
+		state |= HIDDEN;
+	}
+	if (visible) {
+		/*
+		* It is possible (but unlikely), that application
+		* code could have disposed the widget in the show
+		* event.  If this happens, just return.
+		*/
+		sendEvent (SWT.Show);
+		if (isDisposed ()) return;
+	}
+	
+	/*
+	* Feature in the Macintosh.  If the receiver has focus, hiding
+	* the receiver causes no control to have focus.  Also, the focus
+	* needs to be cleared from any TXNObject so that it stops blinking
+	* the caret.  The fix is to assign focus to the first ancestor
+	* control that takes focus.  If no control will take focus, clear
+	* the focus control.
+	*/
+	Control control = null;
+	boolean fixFocus = false;
+	if (!visible) {
+		if (display.focusEvent != SWT.FocusOut) {
+			control = display.getFocusControl ();
+			fixFocus = isFocusAncestor (control);
+		}
+	}
+	topView().setHidden(!visible);
+	invalidateVisibleRegion();
+	if (!visible) {
+		/*
+		* It is possible (but unlikely), that application
+		* code could have disposed the widget in the show
+		* event.  If this happens, just return.
+		*/
+		sendEvent (SWT.Hide);
+		if (isDisposed ()) return;
+	}
+	if (fixFocus) fixFocus (control);
+}
+
+void setZOrder () {
+	NSView topView = topView ();
+	parent.contentView().addSubview(topView, OS.NSWindowBelow, null);
+}
+
+boolean shouldDelayWindowOrderingForEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	Shell shell = getShell ();
+	if ((shell.style & SWT.ON_TOP) != 0) return false;
+	return super.shouldDelayWindowOrderingForEvent (id, sel, theEvent);
+}
+
+void setZOrder (Control sibling, boolean above) {
+	int index = 0, siblingIndex = 0, oldNextIndex = -1;
+	Control[] children = null;
+	/* determine the receiver's and sibling's indexes in the parent */
+	children = parent._getChildren ();
+	while (index < children.length) {
+		if (children [index] == this) break;
+		index++;
+	}
+	if (sibling != null) {
+		while (siblingIndex < children.length) {
+			if (children [siblingIndex] == sibling) break;
+			siblingIndex++;
+		}
+	}
+	/* remove "Labeled by" relationships that will no longer be valid */
+	removeRelation ();
+	if (index + 1 < children.length) {
+		oldNextIndex = index + 1;
+		children [oldNextIndex].removeRelation ();
+	}
+	if (sibling != null) {
+		if (above) {
+			sibling.removeRelation ();
+		} else {
+			if (siblingIndex + 1 < children.length) {
+				children [siblingIndex + 1].removeRelation ();
+			}
+		}
+	}
+
+	NSView otherView = sibling == null ? null : sibling.topView ();
+	view.retain();
+	view.removeFromSuperview();
+	parent.contentView().addSubview(view, above ? OS.NSWindowAbove : OS.NSWindowBelow, otherView);
+	view.release();
+	invalidateVisibleRegion();
+	
+	/* determine the receiver's new index in the parent */
+	if (sibling != null) {
+		if (above) {
+			index = siblingIndex - (index < siblingIndex ? 1 : 0);
+		} else {
+			index = siblingIndex + (siblingIndex < index ? 1 : 0);
+		}
+	} else {
+		if (above) {
+			index = 0;
+		} else {
+			index = children.length - 1;
+		}
+	}
+
+	/* add new "Labeled by" relations as needed */
+	children = parent._getChildren ();
+	if (0 < index) {
+		children [index - 1].addRelation (this);
+	}
+	if (index + 1 < children.length) {
+		addRelation (children [index + 1]);
+	}
+	if (oldNextIndex != -1) {
+		if (oldNextIndex <= index) oldNextIndex--;
+		/* the last two conditions below ensure that duplicate relations are not hooked */
+		if (0 < oldNextIndex && oldNextIndex != index && oldNextIndex != index + 1) {
+			children [oldNextIndex - 1].addRelation (children [oldNextIndex]);
+		}
+	}
+}
+
+void sort (int [] items) {
+	/* Shell Sort from K&R, pg 108 */
+	int length = items.length;
+	for (int gap=length/2; gap>0; gap/=2) {
+		for (int i=gap; i<length; i++) {
+			for (int j=i-gap; j>=0; j-=gap) {
+		   		if (items [j] <= items [j + gap]) {
+					int swap = items [j];
+					items [j] = items [j + gap];
+					items [j + gap] = swap;
+		   		}
+	    	}
+	    }
+	}
+}
+
+NSSize textExtent (String string) {
+	NSAttributedString attribStr = createString(string, null, null, 0, true, false);
+	NSSize size = attribStr.size();
+	attribStr.release();
+	return size;
+}
+
+String tooltipText () {
+	return toolTipText;
+}
+
+/**
+ * Returns a point which is the result of converting the
+ * argument, which is specified in display relative coordinates,
+ * to coordinates relative to the receiver.
+ * <p>
+ * @param x the x coordinate to be translated
+ * @param y the y coordinate to be translated
+ * @return the translated coordinates
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.1
+ */
+public Point toControl (int x, int y) {
+	checkWidget();
+    return display.map (null, this, x, y);
+}
+
+/**
+ * Returns a point which is the result of converting the
+ * argument, which is specified in display relative coordinates,
+ * to coordinates relative to the receiver.
+ * <p>
+ * @param point the point to be translated (must not be null)
+ * @return the translated coordinates
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Point toControl (Point point) {
+	checkWidget();
+	if (point == null) error (SWT.ERROR_NULL_ARGUMENT);
+    return toControl (point.x, point.y);
+}
+
+/**
+ * Returns a point which is the result of converting the
+ * argument, which is specified in coordinates relative to
+ * the receiver, to display relative coordinates.
+ * <p>
+ * @param x the x coordinate to be translated
+ * @param y the y coordinate to be translated
+ * @return the translated coordinates
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.1
+ */
+public Point toDisplay (int x, int y) {
+	checkWidget();
+	return display.map (this, null, x, y);
+}
+
+/**
+ * Returns a point which is the result of converting the
+ * argument, which is specified in coordinates relative to
+ * the receiver, to display relative coordinates.
+ * <p>
+ * @param point the point to be translated (must not be null)
+ * @return the translated coordinates
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Point toDisplay (Point point) {
+	checkWidget();
+	if (point == null) error (SWT.ERROR_NULL_ARGUMENT);
+	return toDisplay (point.x, point.y);
+}
+
+NSView topView () {
+	return view;
+}
+
+boolean translateTraversal (int key, NSEvent theEvent, boolean [] consume) {
+	int detail = SWT.TRAVERSE_NONE;
+	int code = traversalCode (key, theEvent);
+	boolean all = false;
+	switch (key) {
+		case 53: /* Esc */ {
+			all = true;
+			detail = SWT.TRAVERSE_ESCAPE;
+			break;
+		}
+		case 76: /* KP Enter */
+		case 36: /* Return */ {
+			all = true;
+			detail = SWT.TRAVERSE_RETURN;
+			break;
+		}
+		case 48: /* Tab */ {
+			int /*long*/ modifiers = theEvent.modifierFlags ();
+			boolean next = (modifiers & OS.NSShiftKeyMask) == 0;
+			detail = next ? SWT.TRAVERSE_TAB_NEXT : SWT.TRAVERSE_TAB_PREVIOUS;
+			break;
+		}
+		case 126: /* Up arrow */
+		case 123: /* Left arrow */
+		case 125: /* Down arrow */
+		case 124: /* Right arrow */ {
+			boolean next = key == 125 /* Down arrow */ || key == 124 /* Right arrow */;
+			detail = next ? SWT.TRAVERSE_ARROW_NEXT : SWT.TRAVERSE_ARROW_PREVIOUS;
+			break;
+		}
+		case 116: /* Page up */
+		case 121: /* Page down */ {
+			all = true;
+			int /*long*/ modifiers = theEvent.modifierFlags ();
+			if ((modifiers & OS.NSControlKeyMask) == 0) return false;
+			detail = key == 121 /* Page down */ ? SWT.TRAVERSE_PAGE_NEXT : SWT.TRAVERSE_PAGE_PREVIOUS;
+			break;
+		}
+		default:
+			return false;
+	}
+	Event event = new Event ();
+	event.doit = consume [0] = (code & detail) != 0;
+	event.detail = detail;
+	if (!setKeyState (event, SWT.Traverse, theEvent)) return false;
+	Shell shell = getShell ();
+	Control control = this;
+	do {
+		if (control.traverse (event)) return true;
+		if (!event.doit && control.hooks (SWT.Traverse)) {
+			return false;
+		}
+		if (control == shell) return false;
+		control = control.parent;
+	} while (all && control != null);
+	return false;
+}
+
+int traversalCode (int key, NSEvent theEvent) {
+	int code = SWT.TRAVERSE_RETURN | SWT.TRAVERSE_TAB_NEXT | SWT.TRAVERSE_TAB_PREVIOUS | SWT.TRAVERSE_PAGE_NEXT | SWT.TRAVERSE_PAGE_PREVIOUS;
+	Shell shell = getShell ();
+	if (shell.parent != null) code |= SWT.TRAVERSE_ESCAPE;
+	return code;
+}
+
+boolean traverseMnemonic (char key) {
+	return false;
+}
+
+/**
+ * Based on the argument, perform one of the expected platform
+ * traversal action. The argument should be one of the constants:
+ * <code>SWT.TRAVERSE_ESCAPE</code>, <code>SWT.TRAVERSE_RETURN</code>, 
+ * <code>SWT.TRAVERSE_TAB_NEXT</code>, <code>SWT.TRAVERSE_TAB_PREVIOUS</code>, 
+ * <code>SWT.TRAVERSE_ARROW_NEXT</code> and <code>SWT.TRAVERSE_ARROW_PREVIOUS</code>.
+ *
+ * @param traversal the type of traversal
+ * @return true if the traversal succeeded
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean traverse (int traversal) {
+	checkWidget();
+	Event event = new Event ();
+	event.doit = true;
+	event.detail = traversal;
+	return traverse (event);
+}
+
+boolean traverse (Event event) {
+	sendEvent (SWT.Traverse, event);
+	if (isDisposed ()) return true;
+	if (!event.doit) return false;
+	switch (event.detail) {
+		case SWT.TRAVERSE_NONE:				return true;
+		case SWT.TRAVERSE_ESCAPE:			return traverseEscape ();
+		case SWT.TRAVERSE_RETURN:			return traverseReturn ();
+		case SWT.TRAVERSE_TAB_NEXT:			return traverseGroup (true);
+		case SWT.TRAVERSE_TAB_PREVIOUS:		return traverseGroup (false);
+		case SWT.TRAVERSE_ARROW_NEXT:		return traverseItem (true);
+		case SWT.TRAVERSE_ARROW_PREVIOUS:	return traverseItem (false);
+		case SWT.TRAVERSE_MNEMONIC:			return traverseMnemonic (event);	
+		case SWT.TRAVERSE_PAGE_NEXT:		return traversePage (true);
+		case SWT.TRAVERSE_PAGE_PREVIOUS:	return traversePage (false);
+	}
+	return false;
+}
+
+boolean traverseEscape () {
+	return false;
+}
+
+boolean traverseGroup (boolean next) {
+	Control root = computeTabRoot ();
+	Widget group = computeTabGroup ();
+	Widget [] list = root.computeTabList ();
+	int length = list.length;
+	int index = 0;
+	while (index < length) {
+		if (list [index] == group) break;
+		index++;
+	}
+	/*
+	* It is possible (but unlikely), that application
+	* code could have disposed the widget in focus in
+	* or out events.  Ensure that a disposed widget is
+	* not accessed.
+	*/
+	if (index == length) return false;
+	int start = index, offset = (next) ? 1 : -1;
+	while ((index = ((index + offset + length) % length)) != start) {
+		Widget widget = list [index];
+		if (!widget.isDisposed () && widget.setTabGroupFocus ()) {
+			return true;
+		}
+	}
+	if (group.isDisposed ()) return false;
+	return group.setTabGroupFocus ();
+}
+
+boolean traverseItem (boolean next) {
+	Control [] children = parent._getChildren ();
+	int length = children.length;
+	int index = 0;
+	while (index < length) {
+		if (children [index] == this) break;
+		index++;
+	}
+	/*
+	* It is possible (but unlikely), that application
+	* code could have disposed the widget in focus in
+	* or out events.  Ensure that a disposed widget is
+	* not accessed.
+	*/
+	if (index == length) return false;
+	int start = index, offset = (next) ? 1 : -1;
+	while ((index = (index + offset + length) % length) != start) {
+		Control child = children [index];
+		if (!child.isDisposed () && child.isTabItem ()) {
+			if (child.setTabItemFocus ()) return true;
+		}
+	}
+	return false;
+}
+
+boolean traverseReturn () {
+	return false;
+}
+
+boolean traversePage (boolean next) {
+	return false;
+}
+
+boolean traverseMnemonic (Event event) {
+	return false;
+}
+
+/**
+ * Forces all outstanding paint requests for the widget
+ * to be processed before this method returns. If there
+ * are no outstanding paint request, this method does
+ * nothing.
+ * <p>
+ * Note: This method does not cause a redraw.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #redraw()
+ * @see #redraw(int, int, int, int, boolean)
+ * @see PaintListener
+ * @see SWT#Paint
+ */
+public void update () {
+	checkWidget();
+	update (false);
+}
+
+void update (boolean all) {
+//	checkWidget();
+	if (display.isPainting.containsObject(view)) return;
+	//TODO - not all
+	view.displayIfNeeded ();
+}
+
+void updateBackgroundMode () {
+	int oldState = state & PARENT_BACKGROUND;
+	checkBackground ();
+	if (oldState != (state & PARENT_BACKGROUND)) {
+		setBackground ();
+	}
+}
+
+void resetCursorRects (int /*long*/ id, int /*long*/ sel) {
+	if (isEnabled ()) callSuper (id, sel);
+}
+
+void updateTrackingAreas (int /*long*/ id, int /*long*/ sel) {
+	if (isEnabled ()) callSuper (id, sel);
+}
+
+void updateCursorRects (boolean enabled) {
+	updateCursorRects (enabled, view);
+}
+
+void updateCursorRects (boolean enabled, NSView widget) {
+	if (enabled) {
+		widget.resetCursorRects ();
+		widget.updateTrackingAreas ();
+	} else {
+		widget.discardCursorRects ();
+		NSArray areas = widget.trackingAreas ();
+		for (int i = 0; i < areas.count(); i++) {
+			widget.removeTrackingArea (new NSTrackingArea (areas.objectAtIndex (i)));
+		}
+	}
+}
+
+void updateLayout (boolean all) {
+	/* Do nothing */
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/DateTime.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/DateTime.java
new file mode 100755
index 0000000..5604b20
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/DateTime.java
@@ -0,0 +1,591 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class are selectable user interface
+ * objects that allow the user to enter and modify date
+ * or time values.
+ * <p>
+ * Note that although this class is a subclass of <code>Composite</code>,
+ * it does not make sense to add children to it, or set a layout on it.
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>DATE, TIME, CALENDAR, SHORT, MEDIUM, LONG, DROP_DOWN</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>DefaultSelection, Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles DATE, TIME, or CALENDAR may be specified,
+ * and only one of the styles SHORT, MEDIUM, or LONG may be specified.
+ * The DROP_DOWN style is a <em>HINT</em>, and it is only valid with the DATE style.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#datetime">DateTime snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ *
+ * @since 3.3
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class DateTime extends Composite {
+	static final int MIN_YEAR = 1752; // Gregorian switchover in North America: September 19, 1752
+	static final int MAX_YEAR = 9999;
+	
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#DATE
+ * @see SWT#TIME
+ * @see SWT#CALENDAR
+ * @see SWT#SHORT
+ * @see SWT#MEDIUM
+ * @see SWT#LONG
+ * @see SWT#DROP_DOWN
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public DateTime (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+static int checkStyle (int style) {
+	/*
+	* Even though it is legal to create this widget
+	* with scroll bars, they serve no useful purpose
+	* because they do not automatically scroll the
+	* widget's client area.  The fix is to clear
+	* the SWT style.
+	*/
+	style &= ~(SWT.H_SCROLL | SWT.V_SCROLL);
+	style = checkBits (style, SWT.MEDIUM, SWT.SHORT, SWT.LONG, 0, 0, 0);
+	return checkBits (style, SWT.DATE, SWT.TIME, SWT.CALENDAR, 0, 0, 0);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is called when the user changes the control's value.
+ * <code>widgetDefaultSelected</code> is typically called when ENTER is pressed.
+ * </p>
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection, typedListener);
+	addListener (SWT.DefaultSelection, typedListener);
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget ();
+	int width = 0, height = 0;
+	NSControl widget = (NSControl)view;
+	NSSize size = widget.cell ().cellSize ();
+	width = (int)Math.ceil (size.width);
+	height = (int)Math.ceil (size.height);
+	if (width == 0) width = DEFAULT_WIDTH;
+	if (height == 0) height = DEFAULT_HEIGHT;
+	if (wHint != SWT.DEFAULT) width = wHint;
+	if (hHint != SWT.DEFAULT) height = hHint;
+	int border = getBorderWidth ();
+	width += border * 2; height += border * 2;
+	return new Point (width, height);
+}
+
+void createHandle () {
+	NSDatePicker widget = (NSDatePicker)new SWTDatePicker().alloc();
+	widget.init();
+	int pickerStyle = OS.NSTextFieldAndStepperDatePickerStyle;
+	int elementFlags = 0;
+	if ((style & SWT.CALENDAR) != 0) {
+		pickerStyle = OS.NSClockAndCalendarDatePickerStyle;
+		elementFlags = OS.NSYearMonthDayDatePickerElementFlag;
+	} else {
+		if ((style & SWT.TIME) != 0) {
+			elementFlags = (style & SWT.SHORT) != 0 ? OS.NSHourMinuteDatePickerElementFlag : OS.NSHourMinuteSecondDatePickerElementFlag;
+		}
+		if ((style & SWT.DATE) != 0) {
+			elementFlags = (style & SWT.SHORT) != 0 ? OS.NSYearMonthDatePickerElementFlag : OS.NSYearMonthDayDatePickerElementFlag;
+		}
+	}
+	widget.setDrawsBackground(true);
+	widget.setDatePickerStyle(pickerStyle);
+	widget.setDatePickerElements(elementFlags);
+	NSDate date = NSCalendarDate.calendarDate();
+	widget.setDateValue(date);
+	widget.setTarget(widget);
+	widget.setAction(OS.sel_sendSelection);
+	view = widget;
+}
+
+NSFont defaultNSFont() {
+	return display.datePickerFont;
+}
+
+NSCalendarDate getCalendarDate () {
+	NSDate date = ((NSDatePicker)view).dateValue();
+	return date.dateWithCalendarFormat(null, null);
+}
+
+/**
+ * Returns the receiver's date, or day of the month.
+ * <p>
+ * The first day of the month is 1, and the last day depends on the month and year.
+ * </p>
+ *
+ * @return a positive integer beginning with 1
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getDay () {
+	checkWidget ();
+	return (int)/*64*/getCalendarDate().dayOfMonth();
+}
+
+/**
+ * Returns the receiver's hours.
+ * <p>
+ * Hours is an integer between 0 and 23.
+ * </p>
+ *
+ * @return an integer between 0 and 23
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getHours () {
+	checkWidget ();
+	return (int)/*64*/getCalendarDate().hourOfDay();
+}
+
+/**
+ * Returns the receiver's minutes.
+ * <p>
+ * Minutes is an integer between 0 and 59.
+ * </p>
+ *
+ * @return an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMinutes () {
+	checkWidget ();
+	return (int)/*64*/getCalendarDate().minuteOfHour();
+}
+
+/**
+ * Returns the receiver's month.
+ * <p>
+ * The first month of the year is 0, and the last month is 11.
+ * </p>
+ *
+ * @return an integer between 0 and 11
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMonth () {
+	checkWidget ();
+	return (int)/*64*/getCalendarDate().monthOfYear() - 1;
+}
+
+String getNameText() {
+	return (style & SWT.TIME) != 0 ? getHours() + ":" + getMinutes() + ":" + getSeconds()
+			: (getMonth() + 1) + "/" + getDay() + "/" + getYear();
+}
+
+/**
+ * Returns the receiver's seconds.
+ * <p>
+ * Seconds is an integer between 0 and 59.
+ * </p>
+ *
+ * @return an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSeconds () {
+	checkWidget ();
+	return (int)/*64*/getCalendarDate().secondOfMinute();
+}
+
+/**
+ * Returns the receiver's year.
+ * <p>
+ * The first year is 1752 and the last year is 9999.
+ * </p>
+ *
+ * @return an integer between 1752 and 9999
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getYear () {
+	checkWidget ();
+	return (int)/*64*/getCalendarDate().yearOfCommonEra();
+}
+
+boolean isEventView (int /*long*/ id) {
+	return true;
+}
+
+boolean isFlipped (int /*long*/ id, int /*long*/ sel) {
+	if ((style & SWT.CALENDAR) != 0) return super.isFlipped (id, sel);
+	return true;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection, listener);	
+}
+
+boolean sendKeyEvent (NSEvent nsEvent, int type) {
+	boolean result = super.sendKeyEvent (nsEvent, type);
+	if (!result) return result;
+	if (type != SWT.KeyDown) return result;
+	if ((style & SWT.CALENDAR) == 0) {
+		short keyCode = nsEvent.keyCode ();
+		switch (keyCode) {
+			case 76: /* KP Enter */
+			case 36: /* Return */
+				postEvent (SWT.DefaultSelection);
+		}
+	}
+	return result;
+}
+
+void sendSelection () {
+	NSEvent event = NSApplication.sharedApplication().currentEvent();
+	if (event != null && (style & SWT.CALENDAR) != 0) {
+		if (event.clickCount() == 2) {
+			postEvent (SWT.DefaultSelection);
+		} else if (event.type() == OS.NSLeftMouseUp) {
+			postEvent (SWT.Selection);
+		}
+	} else { // SWT.DATE or SWT.TIME
+		postEvent (SWT.Selection);
+	}
+}
+
+void updateBackground () {
+	NSColor nsColor = null;
+	if (backgroundImage != null) {
+		nsColor = NSColor.colorWithPatternImage(backgroundImage.handle);
+	} else if (background != null) {
+		nsColor = NSColor.colorWithDeviceRed(background[0], background[1], background[2], background[3]);
+	} else {
+		if ((style & SWT.CALENDAR) != 0) {
+			nsColor = NSColor.controlBackgroundColor ();
+		} else {
+			nsColor = NSColor.textBackgroundColor ();
+		}
+
+	}
+	((NSDatePicker)view).setBackgroundColor(nsColor);
+}
+
+/**
+ * Sets the receiver's year, month, and day in a single operation.
+ * <p>
+ * This is the recommended way to set the date, because setting the year,
+ * month, and day separately may result in invalid intermediate dates.
+ * </p>
+ *
+ * @param year an integer between 1752 and 9999
+ * @param month an integer between 0 and 11
+ * @param day a positive integer beginning with 1
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.4
+ */
+public void setDate (int year, int month, int day) {
+	checkWidget ();
+	if (year < MIN_YEAR || year > MAX_YEAR) return;
+	NSCalendarDate date = getCalendarDate();
+	NSCalendarDate newDate = NSCalendarDate.dateWithYear(year, month + 1, day,
+			date.hourOfDay(), date.minuteOfHour(), date.secondOfMinute(), date.timeZone());
+	if (newDate.yearOfCommonEra() == year && newDate.monthOfYear() == month + 1 && newDate.dayOfMonth() == day) {
+		((NSDatePicker)view).setDateValue(newDate);
+	}
+}
+
+/**
+ * Sets the receiver's date, or day of the month, to the specified day.
+ * <p>
+ * The first day of the month is 1, and the last day depends on the month and year.
+ * If the specified day is not valid for the receiver's month and year, then it is ignored. 
+ * </p>
+ *
+ * @param day a positive integer beginning with 1
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setDate
+ */
+public void setDay (int day) {
+	checkWidget ();
+	NSCalendarDate date = getCalendarDate();
+	NSCalendarDate newDate = NSCalendarDate.dateWithYear(date.yearOfCommonEra(), date.monthOfYear(), day,
+			date.hourOfDay(), date.minuteOfHour(), date.secondOfMinute(), date.timeZone());
+	if (newDate.yearOfCommonEra() == date.yearOfCommonEra() && newDate.monthOfYear() == date.monthOfYear() && newDate.dayOfMonth() == day) {
+		((NSDatePicker)view).setDateValue(newDate);
+	}
+}
+
+void setForeground (float /*double*/ [] color) {
+	NSColor nsColor;
+	if (color == null) {
+		if ((style & SWT.CALENDAR) != 0) {
+			nsColor = NSColor.controlTextColor ();
+		} else {
+			nsColor = NSColor.textColor ();
+		}
+	} else {
+		nsColor = NSColor.colorWithDeviceRed(color[0], color[1], color[2], 1);
+	}
+	((NSDatePicker)view).setTextColor(nsColor);
+}
+
+/**
+ * Sets the receiver's hours.
+ * <p>
+ * Hours is an integer between 0 and 23.
+ * </p>
+ *
+ * @param hours an integer between 0 and 23
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setHours (int hours) {
+	checkWidget ();
+	if (hours < 0 || hours > 23) return;
+	NSCalendarDate date = getCalendarDate();
+	NSCalendarDate newDate = NSCalendarDate.dateWithYear(date.yearOfCommonEra(), date.monthOfYear(), date.dayOfMonth(),
+			hours, date.minuteOfHour(), date.secondOfMinute(), date.timeZone());
+	((NSDatePicker)view).setDateValue(newDate);
+}
+
+/**
+ * Sets the receiver's minutes.
+ * <p>
+ * Minutes is an integer between 0 and 59.
+ * </p>
+ *
+ * @param minutes an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMinutes (int minutes) {
+	checkWidget ();
+	if (minutes < 0 || minutes > 59) return;
+	NSCalendarDate date = getCalendarDate();
+	NSCalendarDate newDate = NSCalendarDate.dateWithYear(date.yearOfCommonEra(), date.monthOfYear(), date.dayOfMonth(),
+			date.hourOfDay(), minutes, date.secondOfMinute(), date.timeZone());
+	((NSDatePicker)view).setDateValue(newDate);
+}
+
+/**
+ * Sets the receiver's month.
+ * <p>
+ * The first month of the year is 0, and the last month is 11.
+ * If the specified month is not valid for the receiver's day and year, then it is ignored. 
+ * </p>
+ *
+ * @param month an integer between 0 and 11
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setDate
+ */
+public void setMonth (int month) {
+	checkWidget ();
+	NSCalendarDate date = getCalendarDate();
+	NSCalendarDate newDate = NSCalendarDate.dateWithYear(date.yearOfCommonEra(), month + 1, date.dayOfMonth(),
+			date.hourOfDay(), date.minuteOfHour(), date.secondOfMinute(), date.timeZone());
+	if (newDate.yearOfCommonEra() == date.yearOfCommonEra() && newDate.monthOfYear() == month + 1 && newDate.dayOfMonth() == date.dayOfMonth()) {
+		((NSDatePicker)view).setDateValue(newDate);
+	}
+}
+
+/**
+ * Sets the receiver's seconds.
+ * <p>
+ * Seconds is an integer between 0 and 59.
+ * </p>
+ *
+ * @param seconds an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSeconds (int seconds) {
+	checkWidget ();
+	if (seconds < 0 || seconds > 59) return;
+	NSCalendarDate date = getCalendarDate();
+	NSCalendarDate newDate = NSCalendarDate.dateWithYear(date.yearOfCommonEra(), date.monthOfYear(), date.dayOfMonth(),
+			date.hourOfDay(), date.minuteOfHour(), seconds, date.timeZone());
+	((NSDatePicker)view).setDateValue(newDate);
+}
+
+/**
+ * Sets the receiver's hours, minutes, and seconds in a single operation.
+ *
+ * @param hours an integer between 0 and 23
+ * @param minutes an integer between 0 and 59
+ * @param seconds an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.4
+ */
+public void setTime (int hours, int minutes, int seconds) {
+	checkWidget ();
+	if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59 || seconds < 0 || seconds > 59) return;
+	NSCalendarDate date = getCalendarDate();
+	NSCalendarDate newDate = NSCalendarDate.dateWithYear(date.yearOfCommonEra(), date.monthOfYear(), date.dayOfMonth(),
+			hours, minutes, seconds, date.timeZone());
+	((NSDatePicker)view).setDateValue(newDate);
+}
+
+/**
+ * Sets the receiver's year.
+ * <p>
+ * The first year is 1752 and the last year is 9999.
+ * If the specified year is not valid for the receiver's day and month, then it is ignored. 
+ * </p>
+ *
+ * @param year an integer between 1752 and 9999
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setDate
+ */
+public void setYear (int year) {
+	checkWidget ();
+	if (year < MIN_YEAR || year > MAX_YEAR) return;
+	NSCalendarDate date = getCalendarDate();
+	NSCalendarDate newDate = NSCalendarDate.dateWithYear(year, date.monthOfYear(), date.dayOfMonth(),
+			date.hourOfDay(), date.minuteOfHour(), date.secondOfMinute(), date.timeZone());
+	if (newDate.yearOfCommonEra() == year && newDate.monthOfYear() == date.monthOfYear() && newDate.dayOfMonth() == date.dayOfMonth()) {
+		((NSDatePicker)view).setDateValue(newDate);
+	}
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Decorations.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Decorations.java
new file mode 100755
index 0000000..e0c6c74
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Decorations.java
@@ -0,0 +1,682 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class provide the appearance and
+ * behavior of <code>Shells</code>, but are not top
+ * level shells or dialogs. Class <code>Shell</code>
+ * shares a significant amount of code with this class,
+ * and is a subclass.
+ * <p>
+ * IMPORTANT: This class was intended to be abstract and
+ * should <em>never</em> be referenced or instantiated.
+ * Instead, the class <code>Shell</code> should be used.
+ * </p>
+ * <p>
+ * Instances are always displayed in one of the maximized, 
+ * minimized or normal states:
+ * <ul>
+ * <li>
+ * When an instance is marked as <em>maximized</em>, the
+ * window manager will typically resize it to fill the
+ * entire visible area of the display, and the instance
+ * is usually put in a state where it can not be resized 
+ * (even if it has style <code>RESIZE</code>) until it is
+ * no longer maximized.
+ * </li><li>
+ * When an instance is in the <em>normal</em> state (neither
+ * maximized or minimized), its appearance is controlled by
+ * the style constants which were specified when it was created
+ * and the restrictions of the window manager (see below).
+ * </li><li>
+ * When an instance has been marked as <em>minimized</em>,
+ * its contents (client area) will usually not be visible,
+ * and depending on the window manager, it may be
+ * "iconified" (that is, replaced on the desktop by a small
+ * simplified representation of itself), relocated to a
+ * distinguished area of the screen, or hidden. Combinations
+ * of these changes are also possible.
+ * </li>
+ * </ul>
+ * </p>
+ * Note: The styles supported by this class must be treated
+ * as <em>HINT</em>s, since the window manager for the
+ * desktop on which the instance is visible has ultimate
+ * control over the appearance and behavior of decorations.
+ * For example, some window managers only support resizable
+ * windows and will always assume the RESIZE style, even if
+ * it is not set.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>BORDER, CLOSE, MIN, MAX, NO_TRIM, RESIZE, TITLE, ON_TOP, TOOL</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * Class <code>SWT</code> provides two "convenience constants"
+ * for the most commonly required style combinations:
+ * <dl>
+ * <dt><code>SHELL_TRIM</code></dt>
+ * <dd>
+ * the result of combining the constants which are required
+ * to produce a typical application top level shell: (that 
+ * is, <code>CLOSE | TITLE | MIN | MAX | RESIZE</code>)
+ * </dd>
+ * <dt><code>DIALOG_TRIM</code></dt>
+ * <dd>
+ * the result of combining the constants which are required
+ * to produce a typical application dialog shell: (that 
+ * is, <code>TITLE | CLOSE | BORDER</code>)
+ * </dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ *
+ * @see #getMinimized
+ * @see #getMaximized
+ * @see Shell
+ * @see SWT
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Decorations extends Canvas {
+	Image image;
+	Image [] images = new Image [0];
+	Menu menuBar;
+	String text = "";
+	boolean minimized, maximized;
+	Control savedFocus;
+	Button defaultButton;
+	
+Decorations () {
+	/* Do nothing */
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#BORDER
+ * @see SWT#CLOSE
+ * @see SWT#MIN
+ * @see SWT#MAX
+ * @see SWT#RESIZE
+ * @see SWT#TITLE
+ * @see SWT#NO_TRIM
+ * @see SWT#SHELL_TRIM
+ * @see SWT#DIALOG_TRIM
+ * @see SWT#ON_TOP
+ * @see SWT#TOOL
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Decorations (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+static int checkStyle (int style) {
+	if ((style & SWT.NO_TRIM) != 0) {
+		style &= ~(SWT.CLOSE | SWT.TITLE | SWT.MIN | SWT.MAX | SWT.RESIZE | SWT.BORDER);
+	}
+	if ((style & (SWT.MENU | SWT.MIN | SWT.MAX | SWT.CLOSE)) != 0) {
+		style |= SWT.TITLE;
+	}
+	return style;
+}
+
+void bringToTop (boolean force) {
+	moveAbove (null);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+int compare (ImageData data1, ImageData data2) {
+	if (data1.width == data2.width && data1.height == data2.height) {
+		int transparent1 = data1.getTransparencyType ();
+		int transparent2 = data2.getTransparencyType ();
+		if (transparent1 == SWT.TRANSPARENCY_ALPHA) return -1;
+		if (transparent2 == SWT.TRANSPARENCY_ALPHA) return 1;
+		if (transparent1 == SWT.TRANSPARENCY_MASK) return -1;
+		if (transparent2 == SWT.TRANSPARENCY_MASK) return 1;
+		if (transparent1 == SWT.TRANSPARENCY_PIXEL) return -1;
+		if (transparent2 == SWT.TRANSPARENCY_PIXEL) return 1;
+		return 0;
+	}
+	return data1.width > data2.width || data1.height > data2.height ? -1 : 1;
+}
+
+Widget computeTabGroup () {
+	return this;
+}
+
+Control computeTabRoot () {
+	return this;
+}
+
+void fixDecorations (Decorations newDecorations, Control control, Menu [] menus) {
+	if (this == newDecorations) return;
+	if (control == savedFocus) savedFocus = null;
+	if (control == defaultButton) defaultButton = null;
+	if (menus == null) return;
+	Menu menu = control.menu;
+	if (menu != null) {
+		int index = 0;
+		while (index < menus.length) {
+			if (menus [index] == menu) {
+				control.setMenu (null);
+				return;
+			}
+			index++;
+		}
+		menu.fixMenus (newDecorations);
+	}
+}
+
+/**
+ * Returns the receiver's default button if one had
+ * previously been set, otherwise returns null.
+ *
+ * @return the default button or null
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #setDefaultButton(Button)
+ */
+public Button getDefaultButton () {
+	checkWidget();
+	return defaultButton;
+}
+
+/**
+ * Returns the receiver's image if it had previously been 
+ * set using <code>setImage()</code>. The image is typically
+ * displayed by the window manager when the instance is
+ * marked as iconified, and may also be displayed somewhere
+ * in the trim when the instance is in normal or maximized
+ * states.
+ * <p>
+ * Note: This method will return null if called before
+ * <code>setImage()</code> is called. It does not provide
+ * access to a window manager provided, "default" image
+ * even if one exists.
+ * </p>
+ * 
+ * @return the image
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Image getImage () {
+	checkWidget();
+	return image;
+}
+
+/**
+ * Returns the receiver's images if they had previously been 
+ * set using <code>setImages()</code>. Images are typically
+ * displayed by the window manager when the instance is
+ * marked as iconified, and may also be displayed somewhere
+ * in the trim when the instance is in normal or maximized
+ * states. Depending where the icon is displayed, the platform
+ * chooses the icon with the "best" attributes.  It is expected
+ * that the array will contain the same icon rendered at different
+ * sizes, with different depth and transparency attributes.
+ * 
+ * <p>
+ * Note: This method will return an empty array if called before
+ * <code>setImages()</code> is called. It does not provide
+ * access to a window manager provided, "default" image
+ * even if one exists.
+ * </p>
+ * 
+ * @return the images
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public Image [] getImages () {
+	checkWidget ();
+	if (images == null) return new Image [0];
+	Image [] result = new Image [images.length];
+	System.arraycopy (images, 0, result, 0, images.length);
+	return result;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is currently
+ * maximized, and false otherwise. 
+ * <p>
+ *
+ * @return the maximized state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #setMaximized
+ */
+public boolean getMaximized () {
+	checkWidget();
+	return maximized;
+}
+
+/**
+ * Returns the receiver's menu bar if one had previously
+ * been set, otherwise returns null.
+ *
+ * @return the menu bar or null
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Menu getMenuBar () {
+	checkWidget();
+	return menuBar;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is currently
+ * minimized, and false otherwise. 
+ * <p>
+ *
+ * @return the minimized state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #setMinimized
+ */
+public boolean getMinimized () {
+	checkWidget();
+	return minimized;
+}
+
+String getNameText () {
+	return getText ();
+}
+
+/**
+ * Returns the receiver's text, which is the string that the
+ * window manager will typically display as the receiver's
+ * <em>title</em>. If the text has not previously been set, 
+ * returns an empty string.
+ *
+ * @return the text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getText () {
+	checkWidget();
+	return text;
+}
+
+public boolean isReparentable () {
+	checkWidget();
+	return false;
+}
+
+boolean isTabGroup () {
+	return true;
+}
+
+boolean isTabItem () {
+	return false;
+}
+
+Decorations menuShell () {
+	return this;
+}
+
+void releaseChildren (boolean destroy) {
+	if (menuBar != null) {
+		menuBar.dispose ();
+		menuBar = null;
+	} 
+	Display display = this.display;
+	super.releaseChildren (destroy);
+	Menu [] menus = display.getMenus (this);
+	if (menus != null) {
+		for (int i=0; i<menus.length; i++) {
+			Menu menu = menus [i];
+			if (menu != null && !menu.isDisposed ()) {
+				menu.dispose ();
+			}
+		}
+		menus = null;
+	}
+}
+void releaseWidget () {
+	super.releaseWidget ();
+	image = null;
+	images = null;
+	savedFocus = null;
+	defaultButton = null;
+}
+
+boolean restoreFocus () {
+	if (savedFocus != null && savedFocus.isDisposed ()) savedFocus = null;
+	if (savedFocus == null) return false;
+	return savedFocus.forceFocus ();
+}
+
+void saveFocus () {
+//	int window = OS.GetControlOwner (handle);
+//	Control control = display.getFocusControl (window, false);
+//	if (control != null && control != this && this == control.menuShell ()) {
+//		setSavedFocus (control);
+//	}
+}
+
+/**
+ * If the argument is not null, sets the receiver's default
+ * button to the argument, and if the argument is null, sets
+ * the receiver's default button to the first button which
+ * was set as the receiver's default button (called the 
+ * <em>saved default button</em>). If no default button had
+ * previously been set, or the saved default button was
+ * disposed, the receiver's default button will be set to
+ * null.
+ * <p>
+ * The default button is the button that is selected when
+ * the receiver is active and the user presses ENTER.
+ * </p>
+ *
+ * @param button the new default button
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the button has been disposed</li> 
+ *    <li>ERROR_INVALID_PARENT - if the control is not in the same widget tree</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setDefaultButton (Button button) {
+	checkWidget();
+	if (button != null) {
+		if (button.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+		if (button.menuShell () != this) error (SWT.ERROR_INVALID_PARENT);
+		if ((button.style & SWT.PUSH) == 0) return;
+	}
+	if (button == defaultButton) return;
+	defaultButton = button;
+	NSButtonCell cell = null;
+	if (defaultButton != null && (defaultButton.style & SWT.PUSH) != 0) {
+		cell = new NSButtonCell (((NSButton)defaultButton.view).cell ());
+	}
+	view.window().setDefaultButtonCell (cell);
+	display.updateDefaultButton();
+}
+
+/**
+ * Sets the receiver's image to the argument, which may
+ * be null. The image is typically displayed by the window
+ * manager when the instance is marked as iconified, and
+ * may also be displayed somewhere in the trim when the
+ * instance is in normal or maximized states.
+ * 
+ * @param image the new image (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setImage (Image image) {
+	checkWidget();
+	if (image != null && image.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
+	this.image = image;
+	if (parent != null) return;
+	if (display.dockImage == null) {
+		display.application.setApplicationIconImage (image != null ? image.handle : null);
+	}
+}
+
+/**
+ * Sets the receiver's images to the argument, which may
+ * be an empty array. Images are typically displayed by the
+ * window manager when the instance is marked as iconified,
+ * and may also be displayed somewhere in the trim when the
+ * instance is in normal or maximized states. Depending where
+ * the icon is displayed, the platform chooses the icon with
+ * the "best" attributes. It is expected that the array will
+ * contain the same icon rendered at different sizes, with
+ * different depth and transparency attributes.
+ * 
+ * @param images the new image array
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array of images is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if one of the images is null or has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void setImages (Image [] images) {
+	checkWidget();
+	if (images == null) error(SWT.ERROR_INVALID_ARGUMENT);
+	for (int i = 0; i < images.length; i++) {
+		if (images [i] == null || images [i].isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	this.images = images;
+	if (parent != null) return;
+	if (display.dockImage == null) {
+		if (images != null && images.length > 1) {
+			Image [] bestImages = new Image [images.length];
+			System.arraycopy (images, 0, bestImages, 0, images.length);
+			sort (bestImages);
+			images = bestImages;
+		}
+		if (images != null && images.length > 0) {
+			display.application.setApplicationIconImage (images [0].handle);
+		} else {
+			display.application.setApplicationIconImage (null);
+		}
+	}
+}
+
+/**
+ * Sets the maximized state of the receiver.
+ * If the argument is <code>true</code> causes the receiver
+ * to switch to the maximized state, and if the argument is
+ * <code>false</code> and the receiver was previously maximized,
+ * causes the receiver to switch back to either the minimized
+ * or normal states.
+ * <p>
+ * Note: The result of intermixing calls to <code>setMaximized(true)</code>
+ * and <code>setMinimized(true)</code> will vary by platform. Typically,
+ * the behavior will match the platform user's expectations, but not
+ * always. This should be avoided if possible.
+ * </p>
+ *
+ * @param maximized the new maximized state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #setMinimized
+ */
+public void setMaximized (boolean maximized) {
+	checkWidget();
+	this.maximized = maximized;
+}
+
+/**
+ * Sets the receiver's menu bar to the argument, which
+ * may be null.
+ *
+ * @param menu the new menu bar
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the menu has been disposed</li> 
+ *    <li>ERROR_INVALID_PARENT - if the menu is not in the same widget tree</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMenuBar (Menu menu) {
+	checkWidget();
+	if (menuBar == menu) return;
+	if (menu != null) {
+		if (menu.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
+		if ((menu.style & SWT.BAR) == 0) error (SWT.ERROR_MENU_NOT_BAR);
+		if (menu.parent != this) error (SWT.ERROR_INVALID_PARENT);
+	}
+	menuBar = menu;
+}
+
+/**
+ * Sets the minimized stated of the receiver.
+ * If the argument is <code>true</code> causes the receiver
+ * to switch to the minimized state, and if the argument is
+ * <code>false</code> and the receiver was previously minimized,
+ * causes the receiver to switch back to either the maximized
+ * or normal states.
+ * <p>
+ * Note: The result of intermixing calls to <code>setMaximized(true)</code>
+ * and <code>setMinimized(true)</code> will vary by platform. Typically,
+ * the behavior will match the platform user's expectations, but not
+ * always. This should be avoided if possible.
+ * </p>
+ *
+ * @param minimized the new maximized state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #setMaximized
+ */
+public void setMinimized (boolean minimized) {
+	checkWidget();
+	this.minimized = minimized;
+}
+
+void setSavedFocus (Control control) {
+	savedFocus = control;
+}
+
+/**
+ * Sets the receiver's text, which is the string that the
+ * window manager will typically display as the receiver's
+ * <em>title</em>, to the argument, which must not be null. 
+ *
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setText (String string) {
+	checkWidget();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	text = string;
+}
+
+void sort (Image [] images) {
+	/* Shell Sort from K&R, pg 108 */
+	int length = images.length;
+	if (length <= 1) return; 
+	ImageData [] datas = new ImageData [length];
+	for (int i = 0; i < length; i++) {
+		datas [i] = images [i].getImageData ();
+	}
+	for (int gap=length/2; gap>0; gap/=2) {
+		for (int i=gap; i<length; i++) {
+			for (int j=i-gap; j>=0; j-=gap) {
+		   		if (compare (datas [j], datas [j + gap]) >= 0) {
+					Image swap = images [j];
+					images [j] = images [j + gap];
+					images [j + gap] = swap;
+					ImageData swapData = datas [j];
+					datas [j] = datas [j + gap];
+					datas [j + gap] = swapData;
+		   		}
+	    	}
+	    }
+	}
+}
+
+boolean traverseItem (boolean next) {
+	return false;
+}
+
+boolean traverseReturn () {
+	if (defaultButton == null || defaultButton.isDisposed ()) return false;
+	if (!defaultButton.isVisible () || !defaultButton.isEnabled ()) return false;
+	defaultButton.click ();
+	return true;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/DirectoryDialog.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/DirectoryDialog.java
new file mode 100755
index 0000000..e12f40c
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/DirectoryDialog.java
@@ -0,0 +1,182 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.cocoa.*;
+import org.eclipse.swt.*;
+
+
+/**
+ * Instances of this class allow the user to navigate
+ * the file system and select a directory.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#directorydialog">DirectoryDialog snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class DirectoryDialog extends Dialog {
+	String message = "", filterPath = "";
+
+/**
+ * Constructs a new instance of this class given only its parent.
+ *
+ * @param parent a shell which will be the parent of the new instance
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ */
+public DirectoryDialog (Shell parent) {
+	this (parent, SWT.APPLICATION_MODAL);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a shell which will be the parent of the new instance
+ * @param style the style of dialog to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ */
+public DirectoryDialog (Shell parent, int style) {
+	super (parent, checkStyle (parent, style));
+	if (Display.getSheetEnabled ()) {
+		if (parent != null && (style & SWT.SHEET) != 0) this.style |= SWT.SHEET;
+	}
+	checkSubclass ();
+}
+
+/**
+ * Returns the path which the dialog will use to filter
+ * the directories it shows.
+ *
+ * @return the filter path
+ * 
+ * @see #setFilterPath
+ */
+public String getFilterPath () {
+	return filterPath;
+}
+
+/**
+ * Returns the dialog's message, which is a description of
+ * the purpose for which it was opened. This message will be
+ * visible on the dialog while it is open.
+ *
+ * @return the message
+ */
+public String getMessage () {
+	return message;
+}
+
+/**
+ * Makes the dialog visible and brings it to the front
+ * of the display.
+ *
+ * @return a string describing the absolute path of the selected directory,
+ *         or null if the dialog was cancelled or an error occurred
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the dialog has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the dialog</li>
+ * </ul>
+ */
+public String open () {
+	String directoryPath = null;
+	NSOpenPanel panel = NSOpenPanel.openPanel();
+	panel.setCanCreateDirectories(true);
+	panel.setAllowsMultipleSelection((style & SWT.MULTI) != 0);
+	panel.setTitle(NSString.stringWith(title != null ? title : ""));
+	panel.setMessage(NSString.stringWith(message != null ? message : ""));
+	panel.setCanChooseFiles(false);
+	panel.setCanChooseDirectories(true);
+	NSApplication application = NSApplication.sharedApplication();
+	if (parent != null && (style & SWT.SHEET) != 0) {
+		application.beginSheet(panel, parent.window, null, 0, 0);
+	}
+	NSString dir = filterPath != null ? NSString.stringWith(filterPath) : null;
+	int /*long*/ response = panel.runModalForDirectory(dir, null);
+	if (parent != null && (style & SWT.SHEET) != 0) {
+		application.endSheet(panel, 0);
+	}
+	if (response == OS.NSFileHandlingPanelOKButton) {
+		NSString filename = panel.filename();
+		directoryPath = filterPath = filename.getString();
+	}
+//	options.optionFlags = OS.kNavSupportPackages | OS.kNavAllowOpenPackages | OS.kNavAllowInvisibleFiles;
+	return directoryPath;
+}
+
+/**
+ * Sets the dialog's message, which is a description of
+ * the purpose for which it was opened. This message will be
+ * visible on the dialog while it is open.
+ *
+ * @param string the message
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ */
+public void setMessage (String string) {
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	message = string;
+}
+
+/**
+ * Sets the path that the dialog will use to filter
+ * the directories it shows to the argument, which may
+ * be null. If the string is null, then the operating
+ * system's default filter path will be used.
+ * <p>
+ * Note that the path string is platform dependent.
+ * For convenience, either '/' or '\' can be used
+ * as a path separator.
+ * </p>
+ *
+ * @param string the filter path
+ */
+public void setFilterPath (String string) {
+	filterPath = string;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java
new file mode 100755
index 0000000..5c82734
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java
@@ -0,0 +1,4900 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class are responsible for managing the
+ * connection between SWT and the underlying operating
+ * system. Their most important function is to implement
+ * the SWT event loop in terms of the platform event model.
+ * They also provide various methods for accessing information
+ * about the operating system, and have overall control over
+ * the operating system resources which SWT allocates.
+ * <p>
+ * Applications which are built with SWT will <em>almost always</em>
+ * require only a single display. In particular, some platforms
+ * which SWT supports will not allow more than one <em>active</em>
+ * display. In other words, some platforms do not support
+ * creating a new display if one already exists that has not been
+ * sent the <code>dispose()</code> message.
+ * <p>
+ * In SWT, the thread which creates a <code>Display</code>
+ * instance is distinguished as the <em>user-interface thread</em>
+ * for that display.
+ * </p>
+ * The user-interface thread for a particular display has the
+ * following special attributes:
+ * <ul>
+ * <li>
+ * The event loop for that display must be run from the thread.
+ * </li>
+ * <li>
+ * Some SWT API methods (notably, most of the public methods in
+ * <code>Widget</code> and its subclasses), may only be called
+ * from the thread. (To support multi-threaded user-interface
+ * applications, class <code>Display</code> provides inter-thread
+ * communication methods which allow threads other than the 
+ * user-interface thread to request that it perform operations
+ * on their behalf.)
+ * </li>
+ * <li>
+ * The thread is not allowed to construct other 
+ * <code>Display</code>s until that display has been disposed.
+ * (Note that, this is in addition to the restriction mentioned
+ * above concerning platform support for multiple displays. Thus,
+ * the only way to have multiple simultaneously active displays,
+ * even on platforms which support it, is to have multiple threads.)
+ * </li>
+ * </ul>
+ * Enforcing these attributes allows SWT to be implemented directly
+ * on the underlying operating system's event model. This has 
+ * numerous benefits including smaller footprint, better use of 
+ * resources, safer memory management, clearer program logic,
+ * better performance, and fewer overall operating system threads
+ * required. The down side however, is that care must be taken
+ * (only) when constructing multi-threaded applications to use the
+ * inter-thread communication mechanisms which this class provides
+ * when required.
+ * </p><p>
+ * All SWT API methods which may only be called from the user-interface
+ * thread are distinguished in their documentation by indicating that
+ * they throw the "<code>ERROR_THREAD_INVALID_ACCESS</code>"
+ * SWT exception.
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Close, Dispose, Settings</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * @see #syncExec
+ * @see #asyncExec
+ * @see #wake
+ * @see #readAndDispatch
+ * @see #sleep
+ * @see Device#dispose
+ * @see <a href="http://www.eclipse.org/swt/snippets/#display">Display snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Display extends Device {
+	
+	/* Windows and Events */
+	Event [] eventQueue;
+	EventTable eventTable, filterTable;
+	boolean disposing;
+	int sendEventCount;
+
+	/* Key event management */
+	int [] deadKeyState = new int[1];
+	int currentKeyboardUCHRdata;
+	boolean eventSourceDelaySet;
+	
+	/* Sync/Async Widget Communication */
+	Synchronizer synchronizer;
+	Thread thread;
+	boolean allowTimers, runAsyncMessages;
+
+	GCData[] contexts;
+
+	Caret currentCaret;
+	
+	boolean sendEvent;
+	Control currentControl, trackingControl, tooltipControl;
+	Widget tooltipTarget;
+	
+	NSMutableArray isPainting, needsDisplay, needsDisplayInRect;
+
+	NSDictionary markedAttributes;
+	
+	/* Fonts */
+	boolean smallFonts;
+	NSFont buttonFont, popUpButtonFont, textFieldFont, secureTextFieldFont;
+	NSFont searchFieldFont, comboBoxFont, sliderFont, scrollerFont;
+	NSFont textViewFont, tableViewFont, outlineViewFont, datePickerFont;
+	NSFont boxFont, tabViewFont, progressIndicatorFont;
+
+	Shell [] modalShells;
+	
+	Menu menuBar;
+	Menu[] menus, popups;
+
+	NSApplication application;
+	int /*long*/ applicationClass;
+	NSImage dockImage;
+	boolean isEmbedded;
+	static boolean launched = false;
+	
+	/* Focus */
+	Control focusControl, currentFocusControl;
+	int focusEvent;
+	
+	NSWindow screenWindow, keyWindow;
+
+	NSAutoreleasePool[] pools;
+	int poolCount, loopCount;
+
+	int[] screenID = new int[32];
+	NSPoint[] screenCascade = new NSPoint[32];
+	
+	int /*long*/ runLoopObserver;
+	Callback observerCallback;
+	
+	boolean lockCursor = true;
+	int /*long*/ oldCursorSetProc;
+	Callback cursorSetCallback;
+
+	// the following Callbacks are never freed
+	static Callback windowCallback2, windowCallback3, windowCallback4, windowCallback5, windowCallback6;
+	static Callback dialogCallback3, dialogCallback4, dialogCallback5;
+	static Callback applicationCallback2, applicationCallback3, applicationCallback6;
+	static Callback fieldEditorCallback3, fieldEditorCallback4;
+	
+	/* Display Shutdown */
+	Runnable [] disposeList;
+
+	/* System Tray */
+	Tray tray;
+	TrayItem currentTrayItem;
+	Menu trayItemMenu;
+	
+	/* System Resources */
+	Image errorImage, infoImage, warningImage;
+	Cursor [] cursors = new Cursor [SWT.CURSOR_HAND + 1];
+	
+	/* System Colors */
+	float /*double*/ [][] colors;
+	float /*double*/ [] alternateSelectedControlTextColor, selectedControlTextColor;
+	float /*double*/ [] alternateSelectedControlColor, secondarySelectedControlColor;
+
+	/* Key Mappings. */
+	static int [] [] KeyTable = {
+
+		/* Keyboard and Mouse Masks */
+		{58,	SWT.ALT},
+		{56,	SWT.SHIFT},
+		{59,	SWT.CONTROL},
+		{55,	SWT.COMMAND},		
+		{61,	SWT.ALT},
+		{62,	SWT.CONTROL},
+		{60,	SWT.SHIFT},
+		{54,	SWT.COMMAND},
+
+		/* Non-Numeric Keypad Keys */
+		{126, SWT.ARROW_UP},
+		{125, SWT.ARROW_DOWN},
+		{123, SWT.ARROW_LEFT},
+		{124, SWT.ARROW_RIGHT},
+		{116, SWT.PAGE_UP},
+		{121, SWT.PAGE_DOWN},
+		{115, SWT.HOME},
+		{119, SWT.END},
+//		{??,	SWT.INSERT},
+
+		/* Virtual and Ascii Keys */
+		{51,	SWT.BS},
+		{36,	SWT.CR},
+		{117, 	SWT.DEL},
+		{53,	SWT.ESC},
+		{76,	SWT.LF},
+		{48,	SWT.TAB},	
+		
+		/* Functions Keys */
+		{122, SWT.F1},
+		{120, SWT.F2},
+		{99,	SWT.F3},
+		{118, SWT.F4},
+		{96,	SWT.F5},
+		{97,	SWT.F6},
+		{98,	SWT.F7},
+		{100, SWT.F8},
+		{101, SWT.F9},
+		{109, SWT.F10},
+		{103, SWT.F11},
+		{111, SWT.F12},
+		{105, SWT.F13},
+		{107, SWT.F14},
+		{113, SWT.F15},
+		
+		/* Numeric Keypad Keys */
+		{67, SWT.KEYPAD_MULTIPLY},
+		{69, SWT.KEYPAD_ADD},
+		{76, SWT.KEYPAD_CR},
+		{78, SWT.KEYPAD_SUBTRACT},
+		{65, SWT.KEYPAD_DECIMAL},
+		{75, SWT.KEYPAD_DIVIDE},
+		{82, SWT.KEYPAD_0},
+		{83, SWT.KEYPAD_1},
+		{84, SWT.KEYPAD_2},
+		{85, SWT.KEYPAD_3},
+		{86, SWT.KEYPAD_4},
+		{87, SWT.KEYPAD_5},
+		{88, SWT.KEYPAD_6},
+		{89, SWT.KEYPAD_7},
+		{91, SWT.KEYPAD_8},
+		{92, SWT.KEYPAD_9},
+		{81, SWT.KEYPAD_EQUAL},
+
+		/* Other keys */
+		{57,	SWT.CAPS_LOCK},
+		{71,	SWT.NUM_LOCK},
+//		{??,	SWT.SCROLL_LOCK},
+//		{??,	SWT.PAUSE},
+//		{??,	SWT.BREAK},
+//		{??,	SWT.PRINT_SCREEN},
+		{114, SWT.HELP},
+		
+	};
+
+	static String APP_NAME;
+	static final String ADD_WIDGET_KEY = "org.eclipse.swt.internal.addWidget"; //$NON-NLS-1$
+	static final byte[] SWT_OBJECT = {'S', 'W', 'T', '_', 'O', 'B', 'J', 'E', 'C', 'T', '\0'};
+	static final byte[] SWT_IMAGE = {'S', 'W', 'T', '_', 'I', 'M', 'A', 'G', 'E', '\0'};
+	static final byte[] SWT_ROW = {'S', 'W', 'T', '_', 'R', 'O', 'W', '\0'};
+	static final byte[] SWT_COLUMN = {'S', 'W', 'T', '_', 'C', 'O', 'L', 'U', 'M', 'N', '\0'};
+
+	/* Multiple Displays. */
+	static Display Default;
+	static Display [] Displays = new Display [4];
+				
+	/* Package Name */
+	static final String PACKAGE_PREFIX = "org.eclipse.swt.widgets.";
+			
+	/* Timer */
+	Runnable timerList [];
+	NSTimer nsTimers [];
+	SWTWindowDelegate timerDelegate;
+	static SWTApplicationDelegate applicationDelegate;
+
+	/* Settings */
+	boolean runSettings;
+	SWTWindowDelegate settingsDelegate;
+
+	static final int DEFAULT_BUTTON_INTERVAL = 30;
+	
+	/* Display Data */
+	Object data;
+	String [] keys;
+	Object [] values;
+	
+	/*
+	* TEMPORARY CODE.  Install the runnable that
+	* gets the current display. This code will
+	* be removed in the future.
+	*/
+	static {
+		DeviceFinder = new Runnable () {
+			public void run () {
+				Device device = getCurrent ();
+				if (device == null) {
+					device = getDefault ();
+				}
+				setDevice (device);
+			}
+		};
+	}
+	
+/*
+* TEMPORARY CODE.
+*/
+static void setDevice (Device device) {
+	CurrentDevice = device;
+}
+
+static byte [] ascii (String name) {
+	int length = name.length ();
+	char [] chars = new char [length];
+	name.getChars (0, length, chars, 0);
+	byte [] buffer = new byte [length + 1];
+	for (int i=0; i<length; i++) {
+		buffer [i] = (byte) chars [i];
+	}
+	return buffer;
+}
+
+static int translateKey (int key) {
+	for (int i=0; i<KeyTable.length; i++) {
+		if (KeyTable [i] [0] == key) return KeyTable [i] [1];
+	}
+	return 0;
+}
+
+static int untranslateKey (int key) {
+	for (int i=0; i<KeyTable.length; i++) {
+		if (KeyTable [i] [1] == key) return KeyTable [i] [0];
+	}
+	return 0;
+}
+
+void addContext (GCData context) {
+	if (contexts == null) contexts = new GCData [12];
+	for (int i=0; i<contexts.length; i++) {
+		if (contexts[i] != null && contexts [i] == context) {
+			contexts [i] = context;
+			return;
+		}
+	}
+	GCData [] newContexts = new GCData [contexts.length + 12];
+	newContexts [contexts.length] = context;
+	System.arraycopy (contexts, 0, newContexts, 0, contexts.length);
+	contexts = newContexts;
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when an event of the given type occurs anywhere
+ * in a widget. The event type is one of the event constants
+ * defined in class <code>SWT</code>. When the event does occur,
+ * the listener is notified by sending it the <code>handleEvent()</code>
+ * message.
+ * <p>
+ * Setting the type of an event to <code>SWT.None</code> from
+ * within the <code>handleEvent()</code> method can be used to
+ * change the event type and stop subsequent Java listeners
+ * from running. Because event filters run before other listeners,
+ * event filters can both block other listeners and set arbitrary
+ * fields within an event. For this reason, event filters are both
+ * powerful and dangerous. They should generally be avoided for
+ * performance, debugging and code maintenance reasons.
+ * </p>
+ * 
+ * @param eventType the type of event to listen for
+ * @param listener the listener which should be notified when the event occurs
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see Listener
+ * @see SWT
+ * @see #removeFilter
+ * @see #removeListener
+ * 
+ * @since 3.0 
+ */
+public void addFilter (int eventType, Listener listener) {
+	checkDevice ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (filterTable == null) filterTable = new EventTable ();
+	filterTable.hook (eventType, listener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when an event of the given type occurs. The event
+ * type is one of the event constants defined in class <code>SWT</code>.
+ * When the event does occur in the display, the listener is notified by
+ * sending it the <code>handleEvent()</code> message.
+ *
+ * @param eventType the type of event to listen for
+ * @param listener the listener which should be notified when the event occurs
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see Listener
+ * @see SWT
+ * @see #removeListener
+ * 
+ * @since 2.0 
+ */
+public void addListener (int eventType, Listener listener) {
+	checkDevice ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) eventTable = new EventTable ();
+	eventTable.hook (eventType, listener);
+}
+
+void addMenu (Menu menu) {
+	if (menus == null) menus = new Menu [12];
+	for (int i=0; i<menus.length; i++) {
+		if (menus [i] == null) {
+			menus [i] = menu;
+			return;
+		}
+	}
+	Menu [] newMenus = new Menu [menus.length + 12];
+	newMenus [menus.length] = menu;
+	System.arraycopy (menus, 0, newMenus, 0, menus.length);
+	menus = newMenus;
+}
+
+void addPool () {
+	addPool ((NSAutoreleasePool)new NSAutoreleasePool().alloc().init());
+}
+
+void addPool (NSAutoreleasePool pool) {
+	if (pools == null) pools = new NSAutoreleasePool [4];
+	if (poolCount == pools.length) {
+		NSAutoreleasePool[] temp = new NSAutoreleasePool [poolCount + 4];
+		System.arraycopy (pools, 0, temp, 0, poolCount);
+		pools = temp;
+	}
+	if (poolCount == 0) {
+		NSMutableDictionary dictionary = NSThread.currentThread().threadDictionary();
+		dictionary.setObject(NSNumber.numberWithInteger(pool.id), NSString.stringWith("SWT_NSAutoreleasePool"));
+	}
+	pools [poolCount++] = pool;
+}
+
+void addPopup (Menu menu) {
+	if (popups == null) popups = new Menu [4];
+	int length = popups.length;
+	for (int i=0; i<length; i++) {
+		if (popups [i] == menu) return;
+	}
+	int index = 0;
+	while (index < length) {
+		if (popups [index] == null) break;
+		index++;
+	}
+	if (index == length) {
+		Menu [] newPopups = new Menu [length + 4];
+		System.arraycopy (popups, 0, newPopups, 0, length);
+		popups = newPopups;
+	}
+	popups [index] = menu;
+}
+
+void addWidget (NSObject view, Widget widget) {
+	if (view == null) return;
+	OS.object_setInstanceVariable (view.id, SWT_OBJECT, widget.jniRef);
+}
+
+/**
+ * Causes the <code>run()</code> method of the runnable to
+ * be invoked by the user-interface thread at the next 
+ * reasonable opportunity. The caller of this method continues 
+ * to run in parallel, and is not notified when the
+ * runnable has completed.  Specifying <code>null</code> as the
+ * runnable simply wakes the user-interface thread when run.
+ * <p>
+ * Note that at the time the runnable is invoked, widgets 
+ * that have the receiver as their display may have been
+ * disposed. Therefore, it is necessary to check for this
+ * case inside the runnable before accessing the widget.
+ * </p>
+ *
+ * @param runnable code to run on the user-interface thread or <code>null</code>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #syncExec
+ */
+public void asyncExec (Runnable runnable) {
+	synchronized (Device.class) {
+		if (isDisposed ()) error (SWT.ERROR_DEVICE_DISPOSED);
+		synchronizer.asyncExec (runnable);
+	}
+}
+
+/**
+ * Causes the system hardware to emit a short sound
+ * (if it supports this capability).
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void beep () {
+	checkDevice ();
+	OS.NSBeep ();
+}
+
+void cascadeWindow (NSWindow window, NSScreen screen) {
+	NSDictionary dictionary = screen.deviceDescription();
+	int screenNumber = new NSNumber(dictionary.objectForKey(NSString.stringWith("NSScreenNumber")).id).intValue();
+	int index = 0;
+	while (screenID[index] != 0 && screenID[index] != screenNumber) index++;
+	screenID[index] = screenNumber;
+	NSPoint cascade = screenCascade[index];
+	if (cascade == null) {
+		NSRect frame = screen.frame();
+		cascade = new NSPoint();
+		cascade.x = frame.x;
+		cascade.y = frame.y + frame.height;
+	}
+	screenCascade[index] = window.cascadeTopLeftFromPoint(cascade);
+}
+
+protected void checkDevice () {
+	if (thread == null) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (thread != Thread.currentThread ()) error (SWT.ERROR_THREAD_INVALID_ACCESS);
+	if (isDisposed ()) error (SWT.ERROR_DEVICE_DISPOSED);
+}
+
+void checkEnterExit (Control control, NSEvent nsEvent, boolean send) {
+	if (control != currentControl) {
+		if (currentControl != null && !currentControl.isDisposed()) {
+			currentControl.sendMouseEvent (nsEvent, SWT.MouseExit, send);
+		}
+		if (control != null && control.isDisposed()) control = null;
+		currentControl = control;
+		if (control != null) {
+			control.sendMouseEvent (nsEvent, SWT.MouseEnter, send);
+		}
+		setCursor (control);
+	}
+	timerExec (control != null && !control.isDisposed() ? getToolTipTime () : -1, hoverTimer);
+}
+
+void checkFocus () {
+	Control oldControl = currentFocusControl;
+	Control newControl = getFocusControl ();
+	if (oldControl != newControl) {
+		if (oldControl != null && !oldControl.isDisposed ()) {
+			oldControl.sendFocusEvent (SWT.FocusOut);
+		}
+		currentFocusControl = newControl;
+		if (newControl != null && !newControl.isDisposed ()) {
+			newControl.sendFocusEvent (SWT.FocusIn);
+		}
+	}
+}
+
+/**
+ * Checks that this class can be subclassed.
+ * <p>
+ * IMPORTANT: See the comment in <code>Widget.checkSubclass()</code>.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see Widget#checkSubclass
+ */
+protected void checkSubclass () {
+	if (!Display.isValidClass (getClass ())) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+/**
+ * Constructs a new instance of this class.
+ * <p>
+ * Note: The resulting display is marked as the <em>current</em>
+ * display. If this is the first display which has been 
+ * constructed since the application started, it is also
+ * marked as the <em>default</em> display.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if called from a thread that already created an existing display</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see #getCurrent
+ * @see #getDefault
+ * @see Widget#checkSubclass
+ * @see Shell
+ */
+public Display () {
+	this (null);
+}
+
+/**
+ * Constructs a new instance of this class using the parameter.
+ * 
+ * @param data the device data
+ */
+public Display (DeviceData data) {
+	super (data);
+}
+
+static void checkDisplay (Thread thread, boolean multiple) {
+	synchronized (Device.class) {
+		for (int i=0; i<Displays.length; i++) {
+			if (Displays [i] != null) {
+				if (!multiple) SWT.error (SWT.ERROR_NOT_IMPLEMENTED, null, " [multiple displays]");
+				if (Displays [i].thread == thread) SWT.error (SWT.ERROR_THREAD_INVALID_ACCESS);
+			}
+		}
+	}
+}
+
+static String convertToLf(String text) {
+	char Cr = '\r';
+	char Lf = '\n';
+	int length = text.length ();
+	if (length == 0) return text;
+	
+	/* Check for an LF or CR/LF.  Assume the rest of the string 
+	 * is formated that way.  This will not work if the string 
+	 * contains mixed delimiters. */
+	int i = text.indexOf (Lf, 0);
+	if (i == -1 || i == 0) return text;
+	if (text.charAt (i - 1) != Cr) return text;
+
+	/* The string is formatted with CR/LF.
+	 * Create a new string with the LF line delimiter. */
+	i = 0;
+	StringBuffer result = new StringBuffer ();
+	while (i < length) {
+		int j = text.indexOf (Cr, i);
+		if (j == -1) j = length;
+		String s = text.substring (i, j);
+		result.append (s);
+		i = j + 2;
+		result.append (Lf);
+	}
+	return result.toString ();
+}
+
+void clearModal (Shell shell) {
+	if (modalShells == null) return;
+	int index = 0, length = modalShells.length;
+	while (index < length) {
+		if (modalShells [index] == shell) break;
+		if (modalShells [index] == null) return;
+		index++;
+	}
+	if (index == length) return;
+	System.arraycopy (modalShells, index + 1, modalShells, index, --length - index);
+	modalShells [length] = null;
+	if (index == 0 && modalShells [0] == null) modalShells = null;
+	Shell [] shells = getShells ();
+	for (int i=0; i<shells.length; i++) shells [i].updateModal ();
+}
+
+void clearPool () {
+	if (sendEventCount == 0 && loopCount == poolCount - 1 && Callback.getEntryCount () == 0) {
+		removePool ();
+		addPool ();
+	}
+}
+
+/**
+ * Requests that the connection between SWT and the underlying
+ * operating system be closed.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see Device#dispose
+ * 
+ * @since 2.0
+ */
+public void close () {
+	checkDevice ();
+	Event event = new Event ();
+	sendEvent (SWT.Close, event);
+	if (event.doit) dispose ();
+}
+
+/**
+ * Creates the device in the operating system.  If the device
+ * does not have a handle, this method may do nothing depending
+ * on the device.
+ * <p>
+ * This method is called before <code>init</code>.
+ * </p>
+ *
+ * @param data the DeviceData which describes the receiver
+ *
+ * @see #init
+ */
+protected void create (DeviceData data) {
+	checkSubclass ();
+	checkDisplay (thread = Thread.currentThread (), false);
+	createDisplay (data);
+	register (this);
+	synchronizer = new Synchronizer (this);
+	if (Default == null) Default = this;
+}
+
+void createDisplay (DeviceData data) {
+	if (OS.VERSION < 0x1050) {
+		System.out.println ("***WARNING: SWT requires MacOS X version " + 10 + "." + 5 + " or greater"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		System.out.println ("***WARNING: Detected: " + Integer.toHexString((OS.VERSION & 0xFF00) >> 8) + "." + Integer.toHexString((OS.VERSION & 0xF0) >> 4) + "." + Integer.toHexString(OS.VERSION & 0xF)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		error(SWT.ERROR_NOT_IMPLEMENTED);
+	}
+
+	NSThread nsthread = NSThread.currentThread();
+	NSMutableDictionary dictionary = nsthread.threadDictionary();
+	NSString key = NSString.stringWith("SWT_NSAutoreleasePool");
+	NSNumber id = new NSNumber(dictionary.objectForKey(key));
+	addPool(new NSAutoreleasePool(id.integerValue()));
+
+	application = NSApplication.sharedApplication();
+
+	/*
+	 * TODO: If an NSApplication is already running we don't want to create another NSApplication.
+	 * But if we don't we won't get mouse events, since we currently need to subclass NSApplication and intercept sendEvent to
+	 * deliver mouse events correctly to widgets.   
+	 */
+	if (!application.isRunning()) {
+		/*
+		 * Feature in the Macintosh.  On OS 10.2, it is necessary
+		 * to explicitly check in with the Process Manager and set
+		 * the current process to be the front process in order for
+		 * windows to come to the front by default.  The fix is call
+		 * both GetCurrentProcess() and SetFrontProcess().
+		 * 
+		 * NOTE: It is not actually necessary to use the process
+		 * serial number returned by GetCurrentProcess() in the
+		 * call to SetFrontProcess() (ie. kCurrentProcess can be
+		 * used) but both functions must be called in order for
+		 * windows to come to the front.
+		 */
+		int [] psn = new int [2];
+		if (OS.GetCurrentProcess (psn) == OS.noErr) {
+			int pid = OS.getpid ();
+			int /*long*/ ptr = getAppName().UTF8String();
+			if (ptr != 0) OS.CPSSetProcessName (psn, ptr);
+			OS.TransformProcessType (psn, OS.kProcessTransformToForegroundApplication);
+			OS.SetFrontProcess (psn);
+			ptr = OS.getenv (ascii ("APP_ICON_" + pid));
+			if (ptr != 0) {
+				NSString path = NSString.stringWithUTF8String (ptr);
+				NSImage image = (NSImage) new NSImage().alloc();
+				image = image.initByReferencingFile(path);
+				dockImage = image;
+				application.setApplicationIconImage(image);
+			}
+		}
+
+		String className = "SWTApplication";
+		int /*long*/ cls;
+		if ((cls = OS.objc_lookUpClass (className)) == 0) {
+			Class clazz = getClass();
+			applicationCallback2 = new Callback(clazz, "applicationProc", 2);
+			int /*long*/ proc2 = applicationCallback2.getAddress();
+			if (proc2 == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);
+			applicationCallback3 = new Callback(clazz, "applicationProc", 3);
+			int /*long*/ proc3 = applicationCallback3.getAddress();
+			if (proc3 == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);
+			applicationCallback6 = new Callback(clazz, "applicationProc", 6);
+			int /*long*/ proc6 = applicationCallback6.getAddress();
+			if (proc6 == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);
+			cls = OS.objc_allocateClassPair(OS.class_NSApplication, className, 0);
+			OS.class_addMethod(cls, OS.sel_sendEvent_, proc3, "@:@");
+			OS.class_addMethod(cls, OS.sel_nextEventMatchingMask_untilDate_inMode_dequeue_, proc6, "@:i@@B");
+			OS.class_addMethod(cls, OS.sel_isRunning, proc2, "@:");
+			OS.class_addMethod(cls, OS.sel_finishLaunching, proc2, "@:");
+			OS.objc_registerClassPair(cls);
+		}
+		applicationClass = OS.object_setClass(application.id, cls);
+		
+		className = "SWTApplicationDelegate";
+		if (OS.objc_lookUpClass (className) == 0) {
+			int /*long*/ appProc3 = applicationCallback3.getAddress();
+			if (appProc3 == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);
+			cls = OS.objc_allocateClassPair(OS.class_NSObject, className, 0);
+			OS.class_addMethod(cls, OS.sel_applicationWillFinishLaunching_, appProc3, "@:@");
+			OS.class_addMethod(cls, OS.sel_terminate_, appProc3, "@:@");
+			OS.class_addMethod(cls, OS.sel_quitRequested_, appProc3, "@:@");
+			OS.class_addMethod(cls, OS.sel_orderFrontStandardAboutPanel_, appProc3, "@:@");
+			OS.class_addMethod(cls, OS.sel_hideOtherApplications_, appProc3, "@:@");
+			OS.class_addMethod(cls, OS.sel_hide_, appProc3, "@:@");
+			OS.class_addMethod(cls, OS.sel_unhideAllApplications_, appProc3, "@:@");
+			OS.class_addMethod(cls, OS.sel_applicationDidBecomeActive_, appProc3, "@:@");
+			OS.class_addMethod(cls, OS.sel_applicationDidResignActive_, appProc3, "@:@");
+			OS.objc_registerClassPair(cls);
+		}
+		if (applicationDelegate == null) {
+			applicationDelegate = (SWTApplicationDelegate)new SWTApplicationDelegate().alloc().init();
+			application.setDelegate(applicationDelegate);
+		}
+	} else {
+		isEmbedded = true;
+	}
+}
+
+void createMainMenu () {
+	NSString appName = getAppName();
+	NSString emptyStr = NSString.stringWith("");
+	NSMenu mainMenu = (NSMenu)new NSMenu().alloc();
+	mainMenu.initWithTitle(emptyStr);
+	
+	NSMenuItem menuItem;
+	NSMenu appleMenu;
+	NSString format = NSString.stringWith("%@ %@"), title;
+	
+	NSMenuItem appItem = menuItem = mainMenu.addItemWithTitle(emptyStr, 0, emptyStr);
+	appleMenu = (NSMenu)new NSMenu().alloc();
+	appleMenu.initWithTitle(emptyStr);	
+	OS.objc_msgSend(application.id, OS.sel_registerName("setAppleMenu:"), appleMenu.id);
+	
+	title = new NSString(OS.objc_msgSend(OS.class_NSString, OS.sel_stringWithFormat_, format.id, NSString.stringWith(SWT.getMessage("About")).id, appName.id));
+	menuItem = appleMenu.addItemWithTitle(title, OS.sel_orderFrontStandardAboutPanel_, emptyStr);
+	menuItem.setTarget(applicationDelegate);
+	
+	appleMenu.addItem(NSMenuItem.separatorItem());
+	
+	title = NSString.stringWith(SWT.getMessage("Preferences..."));
+	menuItem = appleMenu.addItemWithTitle(title, 0, NSString.stringWith(","));
+	
+	appleMenu.addItem(NSMenuItem.separatorItem());
+	
+	title = NSString.stringWith(SWT.getMessage("Services"));
+	menuItem = appleMenu.addItemWithTitle(title, 0, emptyStr);
+	NSMenu servicesMenu = (NSMenu)new NSMenu().alloc();
+	servicesMenu.initWithTitle(emptyStr);
+	appleMenu.setSubmenu(servicesMenu, menuItem);
+	servicesMenu.release();	
+	application.setServicesMenu(servicesMenu);
+	
+	appleMenu.addItem(NSMenuItem.separatorItem());
+	
+	title = new NSString(OS.objc_msgSend(OS.class_NSString, OS.sel_stringWithFormat_, format.id, NSString.stringWith(SWT.getMessage("Hide")).id, appName.id));
+	menuItem = appleMenu.addItemWithTitle(title, OS.sel_hide_, NSString.stringWith("h"));
+	menuItem.setTarget(applicationDelegate);
+	
+	title = NSString.stringWith(SWT.getMessage("Hide Others"));
+	menuItem = appleMenu.addItemWithTitle(title, OS.sel_hideOtherApplications_, NSString.stringWith("h"));
+	menuItem.setKeyEquivalentModifierMask(OS.NSCommandKeyMask | OS.NSAlternateKeyMask);
+	menuItem.setTarget(applicationDelegate);
+	
+	title = NSString.stringWith(SWT.getMessage("Show All"));
+	menuItem = appleMenu.addItemWithTitle(title, OS.sel_unhideAllApplications_, emptyStr);
+	menuItem.setTarget(applicationDelegate);
+	
+	appleMenu.addItem(NSMenuItem.separatorItem());
+	
+	title = new NSString(OS.objc_msgSend(OS.class_NSString, OS.sel_stringWithFormat_, format.id, NSString.stringWith(SWT.getMessage("Quit")).id, appName.id));
+	menuItem = appleMenu.addItemWithTitle(title, OS.sel_quitRequested_, NSString.stringWith("q"));
+	menuItem.setTarget(applicationDelegate);
+	
+	mainMenu.setSubmenu(appleMenu, appItem);
+	appleMenu.release();
+	application.setMainMenu(mainMenu);
+	mainMenu.release();
+}
+
+int /*long*/ cursorSetProc (int /*long*/ id, int /*long*/ sel) {
+	if (lockCursor) {
+		if (currentControl != null) {
+			Cursor cursor = currentControl.findCursor ();
+			if (cursor != null && cursor.handle.id != id) return 0;
+		}
+	}
+	OS.call (oldCursorSetProc, id, sel);
+	return 0;
+}
+
+static void deregister (Display display) {
+	synchronized (Device.class) {
+		for (int i=0; i<Displays.length; i++) {
+			if (display == Displays [i]) Displays [i] = null;
+		}
+	}
+}
+
+/**
+ * Destroys the device in the operating system and releases
+ * the device's handle.  If the device does not have a handle,
+ * this method may do nothing depending on the device.
+ * <p>
+ * This method is called after <code>release</code>.
+ * </p>
+ * @see Device#dispose
+ * @see #release
+ */
+protected void destroy () {
+	if (this == Default) Default = null;
+	deregister (this);
+	destroyDisplay ();
+}
+
+void destroyDisplay () {
+	application = null;
+}
+
+/**
+ * Causes the <code>run()</code> method of the runnable to
+ * be invoked by the user-interface thread just before the
+ * receiver is disposed.  Specifying a <code>null</code> runnable
+ * is ignored.
+ *
+ * @param runnable code to run at dispose time.
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void disposeExec (Runnable runnable) {
+	checkDevice ();
+	if (disposeList == null) disposeList = new Runnable [4];
+	for (int i=0; i<disposeList.length; i++) {
+		if (disposeList [i] == null) {
+			disposeList [i] = runnable;
+			return;
+		}
+	}
+	Runnable [] newDisposeList = new Runnable [disposeList.length + 4];
+	System.arraycopy (disposeList, 0, newDisposeList, 0, disposeList.length);
+	newDisposeList [disposeList.length] = runnable;
+	disposeList = newDisposeList;
+}
+
+void error (int code) {
+	SWT.error(code);
+}
+
+boolean filterEvent (Event event) {
+	if (filterTable != null) filterTable.sendEvent (event);
+	return false;
+}
+
+boolean filters (int eventType) {
+	if (filterTable == null) return false;
+	return filterTable.hooks (eventType);
+}
+
+/**
+ * Given the operating system handle for a widget, returns
+ * the instance of the <code>Widget</code> subclass which
+ * represents it in the currently running application, if
+ * such exists, or null if no matching widget can be found.
+ * <p>
+ * <b>IMPORTANT:</b> This method should not be called from
+ * application code. The arguments are platform-specific.
+ * </p>
+ *
+ * @param handle the handle for the widget
+ * @return the SWT widget that the handle represents
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Widget findWidget (int /*long*/ handle) {
+	checkDevice ();
+	return getWidget (handle);
+}
+
+/**
+ * Given the operating system handle for a widget,
+ * and widget-specific id, returns the instance of
+ * the <code>Widget</code> subclass which represents
+ * the handle/id pair in the currently running application,
+ * if such exists, or null if no matching widget can be found.
+ * <p>
+ * <b>IMPORTANT:</b> This method should not be called from
+ * application code. The arguments are platform-specific.
+ * </p>
+ *
+ * @param handle the handle for the widget
+ * @param id the id for the subwidget (usually an item)
+ * @return the SWT widget that the handle/id pair represents
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public Widget findWidget (int /*long*/ handle, int id) {
+	checkDevice ();
+	return getWidget (handle);
+}
+
+/**
+ * Given a widget and a widget-specific id, returns the
+ * instance of the <code>Widget</code> subclass which represents
+ * the widget/id pair in the currently running application,
+ * if such exists, or null if no matching widget can be found.
+ *
+ * @param widget the widget
+ * @param id the id for the subwidget (usually an item)
+ * @return the SWT subwidget (usually an item) that the widget/id pair represents
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.3
+ */
+public Widget findWidget (Widget widget, int id) {
+	checkDevice ();
+	return null;
+}
+
+/**
+ * Returns the display which the given thread is the
+ * user-interface thread for, or null if the given thread
+ * is not a user-interface thread for any display.  Specifying
+ * <code>null</code> as the thread will return <code>null</code>
+ * for the display. 
+ *
+ * @param thread the user-interface thread
+ * @return the display for the given thread
+ */
+public static Display findDisplay (Thread thread) {
+	synchronized (Device.class) {
+		for (int i=0; i<Displays.length; i++) {
+			Display display = Displays [i];
+			if (display != null && display.thread == thread) {
+				return display;
+			}
+		}
+		return null;
+	}
+}
+
+/**
+ * Returns the currently active <code>Shell</code>, or null
+ * if no shell belonging to the currently running application
+ * is active.
+ *
+ * @return the active shell or null
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Shell getActiveShell () {
+	checkDevice ();
+	NSWindow window = keyWindow != null ? keyWindow : application.keyWindow();
+	if (window != null) {
+		Widget widget = getWidget(window.contentView());
+		if (widget instanceof Shell) {
+			return (Shell)widget;
+		}
+	}
+	return null;
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location. Note that
+ * on multi-monitor systems the origin can be negative.
+ *
+ * @return the bounding rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Rectangle getBounds () {
+	checkDevice ();
+	NSArray screens = NSScreen.screens();
+	return getBounds (screens);
+}
+
+Rectangle getBounds (NSArray screens) {
+	NSRect primaryFrame = new NSScreen(screens.objectAtIndex(0)).frame();
+	float /*double*/ minX = Float.MAX_VALUE, maxX = Float.MIN_VALUE;
+	float /*double*/ minY = Float.MAX_VALUE, maxY = Float.MIN_VALUE;
+	int /*long*/ count = screens.count();
+	for (int i = 0; i < count; i++) {
+		NSScreen screen = new NSScreen(screens.objectAtIndex(i));
+		NSRect frame = screen.frame();
+		float /*double*/ x1 = frame.x, x2 = frame.x + frame.width;
+		float /*double*/ y1 = primaryFrame.height - frame.y, y2 = primaryFrame.height - (frame.y + frame.height);
+		if (x1 < minX) minX = x1;
+		if (x2 < minX) minX = x2;
+		if (x1 > maxX) maxX = x1;
+		if (x2 > maxX) maxX = x2;
+		if (y1 < minY) minY = y1;
+		if (y2 < minY) minY = y2;
+		if (y1 > maxY) maxY = y1;
+		if (y2 > maxY) maxY = y2;
+	}
+	return new Rectangle ((int)minX, (int)minY, (int)(maxX - minX), (int)(maxY - minY));
+}
+
+/**
+ * Returns the display which the currently running thread is
+ * the user-interface thread for, or null if the currently
+ * running thread is not a user-interface thread for any display.
+ *
+ * @return the current display
+ */
+public static Display getCurrent () {
+	return findDisplay (Thread.currentThread ());
+}
+
+int getCaretBlinkTime () {
+//	checkDevice ();
+	return 560;
+}
+
+/**
+ * Returns a rectangle which describes the area of the
+ * receiver which is capable of displaying data.
+ * 
+ * @return the client area
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #getBounds
+ */
+public Rectangle getClientArea () {
+	checkDevice ();
+	NSArray screens = NSScreen.screens();
+	if (screens.count() != 1) return getBounds (screens);
+	NSScreen screen = new NSScreen(screens.objectAtIndex(0));
+	NSRect frame = screen.frame();
+	NSRect visibleFrame = screen.visibleFrame();
+	float /*double*/ y = frame.height - (visibleFrame.y + visibleFrame.height);
+	return new Rectangle((int)visibleFrame.x, (int)y, (int)visibleFrame.width, (int)visibleFrame.height);
+}
+
+/**
+ * Returns the control which the on-screen pointer is currently
+ * over top of, or null if it is not currently over one of the
+ * controls built by the currently running application.
+ *
+ * @return the control under the cursor
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Control getCursorControl () {
+	checkDevice();
+	return findControl(false);
+}
+
+/**
+ * Returns the location of the on-screen pointer relative
+ * to the top left corner of the screen.
+ *
+ * @return the cursor location
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Point getCursorLocation () {
+	checkDevice ();
+	NSPoint location = NSEvent.mouseLocation();
+	NSRect primaryFrame = getPrimaryFrame();
+	return new Point ((int) location.x, (int) (primaryFrame.height - location.y));
+}
+
+/**
+ * Returns an array containing the recommended cursor sizes.
+ *
+ * @return the array of cursor sizes
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public Point [] getCursorSizes () {
+	checkDevice ();
+	return new Point [] {new Point (16, 16)};
+}
+
+/**
+ * Returns the default display. One is created (making the
+ * thread that invokes this method its user-interface thread)
+ * if it did not already exist.
+ *
+ * @return the default display
+ */
+public static Display getDefault () {
+	synchronized (Device.class) {
+		if (Default == null) Default = new Display ();
+		return Default;
+	}
+}
+
+/**
+ * Returns the application defined property of the receiver
+ * with the specified name, or null if it has not been set.
+ * <p>
+ * Applications may have associated arbitrary objects with the
+ * receiver in this fashion. If the objects stored in the
+ * properties need to be notified when the display is disposed
+ * of, it is the application's responsibility to provide a
+ * <code>disposeExec()</code> handler which does so.
+ * </p>
+ *
+ * @param key the name of the property
+ * @return the value of the property or null if it has not been set
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the key is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #setData(String, Object)
+ * @see #disposeExec(Runnable)
+ */
+public Object getData (String key) {
+	checkDevice ();
+	if (key == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (keys == null) return null;
+	for (int i=0; i<keys.length; i++) {
+		if (keys [i].equals (key)) return values [i];
+	}
+	return null;
+}
+
+/**
+ * Returns the application defined, display specific data
+ * associated with the receiver, or null if it has not been
+ * set. The <em>display specific data</em> is a single,
+ * unnamed field that is stored with every display. 
+ * <p>
+ * Applications may put arbitrary objects in this field. If
+ * the object stored in the display specific data needs to
+ * be notified when the display is disposed of, it is the
+ * application's responsibility to provide a
+ * <code>disposeExec()</code> handler which does so.
+ * </p>
+ *
+ * @return the display specific data
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #setData(Object)
+ * @see #disposeExec(Runnable)
+ */
+public Object getData () {
+	checkDevice ();
+	return data;
+}
+
+/**
+ * Returns the button dismissal alignment, one of <code>LEFT</code> or <code>RIGHT</code>.
+ * The button dismissal alignment is the ordering that should be used when positioning the
+ * default dismissal button for a dialog.  For example, in a dialog that contains an OK and
+ * CANCEL button, on platforms where the button dismissal alignment is <code>LEFT</code>, the
+ * button ordering should be OK/CANCEL.  When button dismissal alignment is <code>RIGHT</code>,
+ * the button ordering should be CANCEL/OK.
+ *
+ * @return the button dismissal order
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 2.1
+ */
+public int getDismissalAlignment () {
+	checkDevice ();
+	return SWT.RIGHT;
+}
+
+/**
+ * Returns the longest duration, in milliseconds, between
+ * two mouse button clicks that will be considered a
+ * <em>double click</em> by the underlying operating system.
+ *
+ * @return the double click time
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getDoubleClickTime () {
+	checkDevice ();
+	return OS.GetDblTime () * 1000 / 60; 
+}
+
+/**
+ * Returns the control which currently has keyboard focus,
+ * or null if keyboard events are not currently going to
+ * any of the controls built by the currently running
+ * application.
+ *
+ * @return the control under the cursor
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Control getFocusControl () {
+	checkDevice ();
+	if (focusControl != null && !focusControl.isDisposed ()) {
+		return focusControl;
+	}
+	NSWindow window = keyWindow != null ? keyWindow : application.keyWindow();
+	return _getFocusControl(window);
+}
+
+Control _getFocusControl (NSWindow window) {
+	if (window != null) {
+		NSResponder responder = window.firstResponder();
+		if (responder != null && !responder.respondsToSelector(OS.sel_superview)) {
+			return null;
+		}
+		NSView view = new NSView(responder.id);
+		if (view != null) {
+			do {
+				Widget widget = GetWidget (view.id);
+				if (widget instanceof Control) {
+					return (Control)widget;
+				}
+				view = view.superview();
+			} while (view != null);
+		}
+	}
+	return null;
+}
+
+/**
+ * Returns true when the high contrast mode is enabled.
+ * Otherwise, false is returned.
+ * <p>
+ * Note: This operation is a hint and is not supported on
+ * platforms that do not have this concept.
+ * </p>
+ *
+ * @return the high contrast mode
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public boolean getHighContrast () {
+	checkDevice ();
+	return false;
+}
+
+/**
+ * Returns the maximum allowed depth of icons on this display, in bits per pixel.
+ * On some platforms, this may be different than the actual depth of the display.
+ *
+ * @return the maximum icon depth
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see Device#getDepth
+ */
+public int getIconDepth () {
+	return getDepth ();
+}
+
+/**
+ * Returns an array containing the recommended icon sizes.
+ *
+ * @return the array of icon sizes
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see Decorations#setImages(Image[])
+ * 
+ * @since 3.0
+ */
+public Point [] getIconSizes () {
+	checkDevice ();
+	return new Point [] { 
+		new Point (16, 16), new Point (32, 32), 
+		new Point (64, 64), new Point (128, 128)};	
+}
+
+int getLastEventTime () {
+	NSEvent event = application.currentEvent();
+	return event != null ? (int)(event.timestamp() * 1000) : 0;
+}
+
+Menu [] getMenus (Decorations shell) {
+	if (menus == null) return new Menu [0];
+	int count = 0;
+	for (int i = 0; i < menus.length; i++) {
+		Menu menu = menus[i];
+		if (menu != null && menu.parent == shell) count++;
+	}
+	int index = 0;
+	Menu[] result = new Menu[count];
+	for (int i = 0; i < menus.length; i++) {
+		Menu menu = menus[i];
+		if (menu != null && menu.parent == shell) {
+			result[index++] = menu;
+		}
+	}
+	return result;
+}
+
+int getMessageCount () {
+	return synchronizer.getMessageCount ();
+}
+
+/**
+ * Returns an array of monitors attached to the device.
+ * 
+ * @return the array of monitors
+ * 
+ * @since 3.0
+ */
+public Monitor [] getMonitors () {
+	checkDevice ();
+	NSArray screens = NSScreen.screens();
+	NSRect primaryFrame = new NSScreen(screens.objectAtIndex(0)).frame();
+	int count = (int)/*64*/screens.count();
+	Monitor [] monitors = new Monitor [count];
+	for (int i=0; i<count; i++) {
+		Monitor monitor = new Monitor ();
+		NSScreen screen = new NSScreen(screens.objectAtIndex(i));
+		NSRect frame = screen.frame();
+		monitor.x = (int)frame.x;
+		monitor.y = (int)(primaryFrame.height - (frame.y + frame.height));
+		monitor.width = (int)frame.width;
+		monitor.height = (int)frame.height;
+		NSRect visibleFrame = screen.visibleFrame();
+		monitor.clientX = (int)visibleFrame.x;
+		monitor.clientY = (int)(primaryFrame.height - (visibleFrame.y + visibleFrame.height));
+		monitor.clientWidth = (int)visibleFrame.width;
+		monitor.clientHeight = (int)visibleFrame.height;
+		monitors [i] = monitor;
+	}
+	return monitors;
+}
+
+NSRect getPrimaryFrame () {
+	NSArray screens = NSScreen.screens();
+	return new NSScreen(screens.objectAtIndex(0)).frame();
+}
+
+/**
+ * Returns the primary monitor for that device.
+ * 
+ * @return the primary monitor
+ * 
+ * @since 3.0
+ */
+public Monitor getPrimaryMonitor () {
+	checkDevice ();
+	Monitor monitor = new Monitor ();
+	NSArray screens = NSScreen.screens();
+	NSScreen screen = new NSScreen(screens.objectAtIndex(0));
+	NSRect frame = screen.frame();
+	monitor.x = (int)frame.x;
+	monitor.y = (int)(frame.height - (frame.y + frame.height));
+	monitor.width = (int)frame.width;
+	monitor.height = (int)frame.height;
+	NSRect visibleFrame = screen.visibleFrame();
+	monitor.clientX = (int)visibleFrame.x;
+	monitor.clientY = (int)(frame.height - (visibleFrame.y + visibleFrame.height));
+	monitor.clientWidth = (int)visibleFrame.width;
+	monitor.clientHeight = (int)visibleFrame.height;
+	return monitor;
+}
+
+/**
+ * Returns a (possibly empty) array containing all shells which have
+ * not been disposed and have the receiver as their display.
+ *
+ * @return the receiver's shells
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Shell [] getShells () {
+	checkDevice ();
+	NSArray windows = application.windows();
+	int index = 0;
+	Shell [] result = new Shell [(int)/*64*/windows.count()];
+	for (int i = 0; i < result.length; i++) {
+		NSWindow window = new NSWindow(windows.objectAtIndex(i));
+		Widget widget = getWidget(window.contentView());
+		if (widget instanceof Shell) {
+			result[index++] = (Shell)widget;
+		}
+	}
+	if (index == result.length) return result;
+	Shell [] newResult = new Shell [index];
+	System.arraycopy (result, 0, newResult, 0, index);
+	return newResult;
+}
+
+static boolean getSheetEnabled () {
+	return !"false".equals(System.getProperty("org.eclipse.swt.sheet"));
+}
+
+/**
+ * Gets the synchronizer used by the display.
+ *
+ * @return the receiver's synchronizer
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public Synchronizer getSynchronizer () {
+	checkDevice ();
+	return synchronizer;
+}
+
+/**
+ * Returns the thread that has invoked <code>syncExec</code>
+ * or null if no such runnable is currently being invoked by
+ * the user-interface thread.
+ * <p>
+ * Note: If a runnable invoked by asyncExec is currently
+ * running, this method will return null.
+ * </p>
+ *
+ * @return the receiver's sync-interface thread
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Thread getSyncThread () {
+	synchronized (Device.class) {
+		if (isDisposed ()) error (SWT.ERROR_DEVICE_DISPOSED);
+		return synchronizer.syncThread;
+	}
+}
+
+/**
+ * Returns the matching standard color for the given
+ * constant, which should be one of the color constants
+ * specified in class <code>SWT</code>. Any value other
+ * than one of the SWT color constants which is passed
+ * in will result in the color black. This color should
+ * not be free'd because it was allocated by the system,
+ * not the application.
+ *
+ * @param id the color constant
+ * @return the matching color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see SWT
+ */
+public Color getSystemColor (int id) {
+	checkDevice ();
+	Color color = getWidgetColor (id);
+	if (color != null) return color;
+	return super.getSystemColor (id);	
+}
+
+Color getWidgetColor (int id) {
+	if (0 <= id && id < colors.length && colors [id] != null) {
+		return Color.cocoa_new (this, colors [id]);
+	}
+	return null;
+}
+
+float /*double*/ [] getWidgetColorRGB (int id) {
+	NSColor color = null;
+	switch (id) {
+		case SWT.COLOR_INFO_FOREGROUND: color = NSColor.blackColor (); break;
+		case SWT.COLOR_INFO_BACKGROUND: return new float /*double*/ [] {0xFF / 255f, 0xFF / 255f, 0xE1 / 255f, 1};
+		case SWT.COLOR_TITLE_FOREGROUND: color = NSColor.windowFrameTextColor(); break;
+		case SWT.COLOR_TITLE_BACKGROUND: color = NSColor.alternateSelectedControlColor(); break;
+		case SWT.COLOR_TITLE_BACKGROUND_GRADIENT: color = NSColor.selectedControlColor(); break;
+		case SWT.COLOR_TITLE_INACTIVE_FOREGROUND: color = NSColor.disabledControlTextColor();  break;
+		case SWT.COLOR_TITLE_INACTIVE_BACKGROUND: color = NSColor.secondarySelectedControlColor(); break;
+		case SWT.COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT: color = NSColor.secondarySelectedControlColor(); break;
+		case SWT.COLOR_WIDGET_DARK_SHADOW: color = NSColor.controlDarkShadowColor(); break;
+		case SWT.COLOR_WIDGET_NORMAL_SHADOW: color = NSColor.controlShadowColor(); break;
+		case SWT.COLOR_WIDGET_LIGHT_SHADOW: color = NSColor.controlHighlightColor(); break;
+		case SWT.COLOR_WIDGET_HIGHLIGHT_SHADOW: color = NSColor.controlLightHighlightColor(); break;
+		case SWT.COLOR_WIDGET_BACKGROUND: color = NSColor.controlHighlightColor(); break;
+		case SWT.COLOR_WIDGET_FOREGROUND: color = NSColor.controlTextColor(); break;
+		case SWT.COLOR_WIDGET_BORDER: color = NSColor.blackColor (); break;
+		case SWT.COLOR_LIST_FOREGROUND: color = NSColor.textColor(); break;
+		case SWT.COLOR_LIST_BACKGROUND: color = NSColor.textBackgroundColor(); break;
+		case SWT.COLOR_LIST_SELECTION_TEXT: color = NSColor.selectedTextColor(); break;
+		case SWT.COLOR_LIST_SELECTION: color = NSColor.selectedTextBackgroundColor(); break;
+	}
+	return getWidgetColorRGB (color);
+}
+
+float /*double*/ [] getWidgetColorRGB (NSColor color) {
+	if (color == null) return null;
+	color = color.colorUsingColorSpace(NSColorSpace.deviceRGBColorSpace());
+	if (color == null) return null;
+	float /*double*/[] components = new float /*double*/[(int)/*64*/color.numberOfComponents()];
+	color.getComponents(components);	
+	return new float /*double*/ []{components[0], components[1], components[2], components[3]};
+}
+
+/**
+ * Returns the matching standard platform cursor for the given
+ * constant, which should be one of the cursor constants
+ * specified in class <code>SWT</code>. This cursor should
+ * not be free'd because it was allocated by the system,
+ * not the application.  A value of <code>null</code> will
+ * be returned if the supplied constant is not an SWT cursor
+ * constant. 
+ *
+ * @param id the SWT cursor constant
+ * @return the corresponding cursor or <code>null</code>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see SWT#CURSOR_ARROW
+ * @see SWT#CURSOR_WAIT
+ * @see SWT#CURSOR_CROSS
+ * @see SWT#CURSOR_APPSTARTING
+ * @see SWT#CURSOR_HELP
+ * @see SWT#CURSOR_SIZEALL
+ * @see SWT#CURSOR_SIZENESW
+ * @see SWT#CURSOR_SIZENS
+ * @see SWT#CURSOR_SIZENWSE
+ * @see SWT#CURSOR_SIZEWE
+ * @see SWT#CURSOR_SIZEN
+ * @see SWT#CURSOR_SIZES
+ * @see SWT#CURSOR_SIZEE
+ * @see SWT#CURSOR_SIZEW
+ * @see SWT#CURSOR_SIZENE
+ * @see SWT#CURSOR_SIZESE
+ * @see SWT#CURSOR_SIZESW
+ * @see SWT#CURSOR_SIZENW
+ * @see SWT#CURSOR_UPARROW
+ * @see SWT#CURSOR_IBEAM
+ * @see SWT#CURSOR_NO
+ * @see SWT#CURSOR_HAND
+ * 
+ * @since 3.0
+ */
+public Cursor getSystemCursor (int id) {
+	checkDevice ();
+	if (!(0 <= id && id < cursors.length)) return null;
+	if (cursors [id] == null) {
+		cursors [id] = new Cursor (this, id);
+	}
+	return cursors [id];
+}
+
+/**
+ * Returns the matching standard platform image for the given
+ * constant, which should be one of the icon constants
+ * specified in class <code>SWT</code>. This image should
+ * not be free'd because it was allocated by the system,
+ * not the application.  A value of <code>null</code> will
+ * be returned either if the supplied constant is not an
+ * SWT icon constant or if the platform does not define an
+ * image that corresponds to the constant. 
+ *
+ * @param id the SWT icon constant
+ * @return the corresponding image or <code>null</code>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see SWT#ICON_ERROR
+ * @see SWT#ICON_INFORMATION
+ * @see SWT#ICON_QUESTION
+ * @see SWT#ICON_WARNING
+ * @see SWT#ICON_WORKING
+ * 
+ * @since 3.0
+ */
+public Image getSystemImage (int id) {
+	checkDevice ();
+	switch(id) {
+		case SWT.ICON_ERROR: {	
+			if (errorImage != null) return errorImage;
+			NSImage nsImage = NSWorkspace.sharedWorkspace ().iconForFileType (new NSString (OS.NSFileTypeForHFSTypeCode (OS.kAlertStopIcon)));
+			if (nsImage == null) return null;
+			nsImage.retain ();
+			return errorImage = Image.cocoa_new (this, SWT.ICON, nsImage);
+		}
+		case SWT.ICON_INFORMATION:
+		case SWT.ICON_QUESTION:
+		case SWT.ICON_WORKING: {
+			if (infoImage != null) return infoImage;
+			NSImage nsImage = NSWorkspace.sharedWorkspace ().iconForFileType (new NSString (OS.NSFileTypeForHFSTypeCode (OS.kAlertNoteIcon)));
+			if (nsImage == null) return null;
+			nsImage.retain ();
+			return infoImage = Image.cocoa_new (this, SWT.ICON, nsImage);
+		}
+		case SWT.ICON_WARNING: {
+			if (warningImage != null) return warningImage;
+			NSImage nsImage = NSWorkspace.sharedWorkspace ().iconForFileType (new NSString (OS.NSFileTypeForHFSTypeCode (OS.kAlertCautionIcon)));
+			if (nsImage == null) return null;
+			nsImage.retain ();
+			return warningImage = Image.cocoa_new (this, SWT.ICON, nsImage);
+		}
+	}
+	return null;
+}
+
+/**
+ * Returns the single instance of the system tray or null
+ * when there is no system tray available for the platform.
+ *
+ * @return the system tray or <code>null</code>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @since 3.0
+ */
+public Tray getSystemTray () {
+	checkDevice ();
+	if (tray != null) return tray;
+	return tray = new Tray (this, SWT.NONE);
+}
+
+/**
+ * Returns the user-interface thread for the receiver.
+ *
+ * @return the receiver's user-interface thread
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Thread getThread () {
+	synchronized (Device.class) {
+		if (isDisposed ()) error (SWT.ERROR_DEVICE_DISPOSED);
+		return thread;
+	}
+}
+
+int getToolTipTime () {
+	checkDevice ();
+	//TODO get OS value (NSTooltipManager?)
+	return 560;
+}
+
+Widget getWidget (int /*long*/ id) {
+	return GetWidget (id);
+}
+
+static Widget GetWidget (int /*long*/ id) {
+	if (id == 0) return null;
+	int /*long*/ [] jniRef = new int /*long*/ [1];
+	OS.object_getInstanceVariable(id, SWT_OBJECT, jniRef);
+	if (jniRef[0] == 0) return null;
+	return (Widget)OS.JNIGetObject(jniRef[0]);
+}
+
+Widget getWidget (NSView view) {
+	if (view == null) return null;
+	return getWidget(view.id);
+}
+
+boolean hasDefaultButton () {
+	NSArray windows = application.windows();
+	int /*long*/ count = windows.count();
+	for (int i = 0; i < count; i++) {
+		NSWindow window  = new NSWindow(windows.objectAtIndex(i));
+		if (window.defaultButtonCell() != null) {
+			return true;
+		}
+	}
+	return false;
+}
+
+/**
+ * Initializes any internal resources needed by the
+ * device.
+ * <p>
+ * This method is called after <code>create</code>.
+ * </p>
+ * 
+ * @see #create
+ */
+protected void init () {
+	super.init ();
+	initClasses ();
+	initColors ();
+	initFonts ();
+	
+	if (!isEmbedded) {
+		/*
+		 * Feature in Cocoa:  NSApplication.finishLaunching() adds an apple menu to the menu bar that isn't accessible via NSMenu.
+		 * If Display objects are created and disposed of multiple times in a single process, another apple menu is added to the menu bar.
+		 * It must be called or the dock icon will continue to bounce. So, it should only be called once per process, not just once per
+		 * creation of a Display.  Use a static so creation of additional Display objects won't affect the menu bar. 
+		 */
+		if (!Display.launched) {
+			application.finishLaunching();
+			Display.launched = true;
+			
+			/* only add the shutdown hook once */
+			Runtime.getRuntime().addShutdownHook(new Thread() {
+				public void run() {
+					NSApplication.sharedApplication().terminate(null);
+				}
+			});
+		}
+	}
+	
+	observerCallback = new Callback (this, "observerProc", 3); //$NON-NLS-1$
+	int /*long*/ observerProc = observerCallback.getAddress ();
+	if (observerProc == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);
+	int activities = OS.kCFRunLoopBeforeWaiting;
+	runLoopObserver = OS.CFRunLoopObserverCreate (0, activities, true, 0, observerProc, 0);
+	if (runLoopObserver == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.CFRunLoopAddObserver (OS.CFRunLoopGetCurrent (), runLoopObserver, OS.kCFRunLoopCommonModes ());
+	
+	cursorSetCallback = new Callback(this, "cursorSetProc", 2);
+	int /*long*/ cursorSetProc = cursorSetCallback.getAddress();
+	if (cursorSetProc == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);
+	int /*long*/ method = OS.class_getInstanceMethod(OS.class_NSCursor, OS.sel_set);
+	if (method != 0) oldCursorSetProc = OS.method_setImplementation(method, cursorSetProc);
+		
+	timerDelegate = (SWTWindowDelegate)new SWTWindowDelegate().alloc().init();
+
+	settingsDelegate = (SWTWindowDelegate)new SWTWindowDelegate().alloc().init();
+	NSNotificationCenter defaultCenter = NSNotificationCenter.defaultCenter();
+	defaultCenter.addObserver(settingsDelegate, OS.sel_systemSettingsChanged_, OS.NSSystemColorsDidChangeNotification, null);
+	defaultCenter.addObserver(settingsDelegate, OS.sel_systemSettingsChanged_, OS.NSApplicationDidChangeScreenParametersNotification, null);
+	
+	NSTextView textView = (NSTextView)new NSTextView().alloc();
+	textView.init ();
+	markedAttributes = textView.markedTextAttributes ();
+	markedAttributes.retain ();
+	textView.release ();
+	
+	isPainting = (NSMutableArray)new NSMutableArray().alloc();
+	isPainting = isPainting.initWithCapacity(12);
+}
+
+void addEventMethods (int /*long*/ cls, int /*long*/ proc2, int /*long*/ proc3, int /*long*/ drawRectProc, int /*long*/ hitTestProc, int /*long*/ needsDisplayInRectProc) {
+	if (proc3 != 0) {
+		OS.class_addMethod(cls, OS.sel_mouseDown_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_mouseUp_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_scrollWheel_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_rightMouseDown_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_rightMouseUp_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_rightMouseDragged_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_otherMouseDown_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_otherMouseUp_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_otherMouseDragged_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_mouseDragged_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_mouseMoved_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_mouseEntered_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_mouseExited_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_menuForEvent_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_keyDown_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_keyUp_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_flagsChanged_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_cursorUpdate_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_setNeedsDisplay_, proc3, "@:B");
+		OS.class_addMethod(cls, OS.sel_shouldDelayWindowOrderingForEvent_, proc3, "@:@");
+		OS.class_addMethod(cls, OS.sel_acceptsFirstMouse_, proc3, "@:@");
+	}
+	if (proc2 != 0) {
+		OS.class_addMethod(cls, OS.sel_resignFirstResponder, proc2, "@:");
+		OS.class_addMethod(cls, OS.sel_becomeFirstResponder, proc2, "@:");
+		OS.class_addMethod(cls, OS.sel_resetCursorRects, proc2, "@:");
+		OS.class_addMethod(cls, OS.sel_updateTrackingAreas, proc2, "@:");
+	}
+	if (needsDisplayInRectProc != 0) {
+		OS.class_addMethod(cls, OS.sel_setNeedsDisplayInRect_, needsDisplayInRectProc, "@:{NSRect}");
+	}
+	if (drawRectProc != 0) {
+		OS.class_addMethod(cls, OS.sel_drawRect_, drawRectProc, "@:{NSRect}");
+	}
+	if (hitTestProc != 0) {
+		OS.class_addMethod(cls, OS.sel_hitTest_, hitTestProc, "@:{NSPoint}");		
+	}
+}
+
+void addFrameMethods(int /*long*/ cls, int /*long*/ setFrameOriginProc, int /*long*/ setFrameSizeProc) {
+	OS.class_addMethod(cls, OS.sel_setFrameOrigin_, setFrameOriginProc, "@:{NSPoint}");	
+	OS.class_addMethod(cls, OS.sel_setFrameSize_, setFrameSizeProc, "@:{NSSize}");	
+}
+
+void addAccessibilityMethods(int /*long*/ cls, int /*long*/ proc2, int /*long*/ proc3, int /*long*/ proc4, int /*long*/ accessibilityHitTestProc) {
+	OS.class_addMethod(cls, OS.sel_accessibilityActionNames, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_accessibilityAttributeNames, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_accessibilityParameterizedAttributeNames, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_accessibilityFocusedUIElement, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_accessibilityIsIgnored, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_accessibilityAttributeValue_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_accessibilityHitTest_, accessibilityHitTestProc, "@:{NSPoint}");
+	OS.class_addMethod(cls, OS.sel_accessibilityAttributeValue_forParameter_, proc4, "@:@@");	
+	OS.class_addMethod(cls, OS.sel_accessibilityPerformAction_, proc3, "@:@");	
+	OS.class_addMethod(cls, OS.sel_accessibilityActionDescription_, proc3, "@:@");	
+}
+
+int /*long*/ registerCellSubclass(int /*long*/ cellClass, int size, int align, byte[] types) {
+	String cellClassName = OS.class_getName(cellClass);
+	int /*long*/ cls = OS.objc_allocateClassPair(cellClass, "SWTAccessible" + cellClassName, 0);	
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.objc_registerClassPair(cls);
+	return cls;
+}
+
+void initClasses () {
+	if (OS.objc_lookUpClass ("SWTView") != 0) return;
+	
+	Class clazz = getClass ();
+	dialogCallback3 = new Callback(clazz, "dialogProc", 3);
+	int /*long*/ dialogProc3 = dialogCallback3.getAddress();
+	if (dialogProc3 == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);
+	dialogCallback4 = new Callback(clazz, "dialogProc", 4);
+	int /*long*/ dialogProc4 = dialogCallback4.getAddress();
+	if (dialogProc4 == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);	
+	dialogCallback5 = new Callback(clazz, "dialogProc", 5);
+	int /*long*/ dialogProc5 = dialogCallback5.getAddress();
+	if (dialogProc5 == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);	
+	windowCallback3 = new Callback(clazz, "windowProc", 3);
+	int /*long*/ proc3 = windowCallback3.getAddress();
+	if (proc3 == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);
+	windowCallback2 = new Callback(clazz, "windowProc", 2);
+	int /*long*/ proc2 = windowCallback2.getAddress();
+	if (proc2 == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);
+	windowCallback4 = new Callback(clazz, "windowProc", 4);
+	int /*long*/ proc4 = windowCallback4.getAddress();
+	if (proc4 == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);
+	windowCallback5 = new Callback(clazz, "windowProc", 5);
+	int /*long*/ proc5 = windowCallback5.getAddress();
+	if (proc5 == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);
+	windowCallback6 = new Callback(clazz, "windowProc", 6);
+	int /*long*/ proc6 = windowCallback6.getAddress();
+	if (proc6 == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);
+	fieldEditorCallback3 = new Callback(clazz, "fieldEditorProc", 3);
+	int /*long*/ fieldEditorProc3 = fieldEditorCallback3.getAddress();
+	if (fieldEditorProc3 == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);
+	fieldEditorCallback4 = new Callback(clazz, "fieldEditorProc", 4);
+	int /*long*/ fieldEditorProc4 = fieldEditorCallback4.getAddress();
+	if (fieldEditorProc4 == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);
+
+	int /*long*/ isFlippedProc = OS.isFlipped_CALLBACK();
+	int /*long*/ drawRectProc = OS.CALLBACK_drawRect_(proc3);
+	int /*long*/ drawInteriorWithFrameInViewProc = OS.CALLBACK_drawInteriorWithFrame_inView_ (proc4);
+	int /*long*/ drawWithExpansionFrameProc = OS.CALLBACK_drawWithExpansionFrame_inView_ (proc4);
+	int /*long*/ imageRectForBoundsProc = OS.CALLBACK_imageRectForBounds_ (proc3);
+	int /*long*/ titleRectForBoundsProc = OS.CALLBACK_titleRectForBounds_ (proc3);
+	int /*long*/ hitTestForEvent_inRect_ofViewProc = OS.CALLBACK_hitTestForEvent_inRect_ofView_ (proc5);
+	int /*long*/ cellSizeProc = OS.CALLBACK_cellSize (proc2);
+	int /*long*/ drawImageWithFrameInViewProc = OS.CALLBACK_drawImage_withFrame_inView_ (proc5);
+	int /*long*/ setFrameOriginProc = OS.CALLBACK_setFrameOrigin_(proc3);
+	int /*long*/ setFrameSizeProc = OS.CALLBACK_setFrameSize_(proc3);
+	int /*long*/ hitTestProc = OS.CALLBACK_hitTest_(proc3);
+	int /*long*/ markedRangeProc = OS.CALLBACK_markedRange (proc2);
+	int /*long*/ selectedRangeProc = OS.CALLBACK_selectedRange (proc2);
+	int /*long*/ highlightSelectionInClipRectProc = OS.CALLBACK_highlightSelectionInClipRect_ (proc3);
+	int /*long*/ setMarkedText_selectedRangeProc = OS.CALLBACK_setMarkedText_selectedRange_(proc4);
+	int /*long*/ attributedSubstringFromRangeProc = OS.CALLBACK_attributedSubstringFromRange_(proc3);
+	int /*long*/ characterIndexForPointProc = OS.CALLBACK_characterIndexForPoint_(proc3);
+	int /*long*/ firstRectForCharacterRangeProc = OS.CALLBACK_firstRectForCharacterRange_(proc3);	
+	int /*long*/ textWillChangeSelectionProc = OS.CALLBACK_textView_willChangeSelectionFromCharacterRange_toCharacterRange_(proc5);
+	int /*long*/ accessibilityHitTestProc = OS.CALLBACK_accessibilityHitTest_(proc3);
+	int /*long*/ shouldChangeTextInRange_replacementString_Proc = OS.CALLBACK_shouldChangeTextInRange_replacementString_(fieldEditorProc4);
+	int /*long*/ shouldChangeTextInRange_replacementString_fieldEditorProc = shouldChangeTextInRange_replacementString_Proc;
+	int /*long*/ view_stringForToolTip_point_userDataProc = OS.CALLBACK_view_stringForToolTip_point_userData_(proc6);
+	int /*long*/ canDragRowsWithIndexes_atPoint_Proc = OS.CALLBACK_canDragRowsWithIndexes_atPoint_(proc4);
+	int /*long*/ setNeedsDisplayInRectProc = OS.CALLBACK_setNeedsDisplayInRect_(proc3);
+	int /*long*/ expansionFrameWithFrameProc = OS.CALLBACK_expansionFrameWithFrame_inView_ (proc4);
+	
+	byte[] types = {'*','\0'};
+	int size = C.PTR_SIZEOF, align = C.PTR_SIZEOF == 4 ? 2 : 3;
+
+	String className;
+	int /*long*/ cls;
+	
+	className = "SWTBox";
+	cls = OS.objc_allocateClassPair(OS.class_NSBox, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
+	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
+	OS.objc_registerClassPair(cls);
+	
+	className = "SWTButton";
+	cls = OS.objc_allocateClassPair(OS.class_NSButton, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_sendSelection, proc2, "@:");
+	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
+	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
+	OS.objc_registerClassPair(cls);
+	
+	cls = registerCellSubclass(NSButton.cellClass(), size, align, types);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);	
+	OS.class_addMethod(cls, OS.sel_nextState, proc2, "@:");
+	NSButton.setCellClass(cls);
+
+	className = "SWTButtonCell";
+	cls = OS.objc_allocateClassPair (OS.class_NSButtonCell, className, 0);
+	OS.class_addIvar (cls, SWT_OBJECT, size, (byte)align, types);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);	
+	OS.class_addMethod (cls, OS.sel_drawImage_withFrame_inView_, drawImageWithFrameInViewProc, "@:@{NSFrame}@");
+	OS.class_addMethod(cls, OS.sel_cellSize, cellSizeProc, "@:");
+	OS.class_addMethod(cls, OS.sel_drawInteriorWithFrame_inView_, drawInteriorWithFrameInViewProc, "@:{NSRect}@");
+	OS.class_addMethod(cls, OS.sel_titleRectForBounds_, titleRectForBoundsProc, "@:{NSRect}");
+	OS.objc_registerClassPair (cls);
+
+	className = "SWTCanvasView";
+	cls = OS.objc_allocateClassPair(OS.class_NSView, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	//NSTextInput protocol
+	OS.class_addProtocol(cls, OS.objc_getProtocol("NSTextInput"));
+	OS.class_addMethod(cls, OS.sel_hasMarkedText, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_markedRange, markedRangeProc, "@:");
+	OS.class_addMethod(cls, OS.sel_selectedRange, selectedRangeProc, "@:");
+	OS.class_addMethod(cls, OS.sel_setMarkedText_selectedRange_, setMarkedText_selectedRangeProc, "@:@{NSRange}");
+	OS.class_addMethod(cls, OS.sel_unmarkText, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_validAttributesForMarkedText, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_attributedSubstringFromRange_, attributedSubstringFromRangeProc, "@:{NSRange}");
+	OS.class_addMethod(cls, OS.sel_insertText_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_characterIndexForPoint_, characterIndexForPointProc, "@:{NSPoint}");
+	OS.class_addMethod(cls, OS.sel_firstRectForCharacterRange_, firstRectForCharacterRangeProc, "@:{NSRange}");
+	OS.class_addMethod(cls, OS.sel_doCommandBySelector_, proc3, "@::");
+	//NSTextInput protocol end
+	OS.class_addMethod(cls, OS.sel_canBecomeKeyView, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_isFlipped, isFlippedProc, "@:");
+	OS.class_addMethod(cls, OS.sel_acceptsFirstResponder, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_isOpaque, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_updateOpenGLContext_, proc3, "@:@");
+	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
+	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
+	OS.objc_registerClassPair(cls);
+
+	className = "SWTComboBox";
+	cls = OS.objc_allocateClassPair(OS.class_NSComboBox, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_sendSelection, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_textDidChange_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_textViewDidChangeSelection_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_textView_willChangeSelectionFromCharacterRange_toCharacterRange_, textWillChangeSelectionProc, "@:@{NSRange}{NSRange}");
+	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
+	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
+	OS.objc_registerClassPair(cls);
+	
+	cls = registerCellSubclass(NSComboBox.cellClass(), size, align, types);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);	
+	NSComboBox.setCellClass(cls);
+
+	className = "SWTDatePicker";
+	cls = OS.objc_allocateClassPair(OS.class_NSDatePicker, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_isFlipped, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_sendSelection, proc2, "@:");
+	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
+	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
+	OS.objc_registerClassPair(cls);
+	
+	className = "SWTEditorView";
+	cls = OS.objc_allocateClassPair(OS.class_NSTextView, className, 0);
+	//TODO hitTestProc and drawRectProc should be set Control.setRegion()? 
+	addEventMethods(cls, 0, fieldEditorProc3, 0, 0, 0);
+	OS.class_addMethod(cls, OS.sel_insertText_, fieldEditorProc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_doCommandBySelector_, fieldEditorProc3, "@::");
+	OS.class_addMethod(cls, OS.sel_shouldChangeTextInRange_replacementString_, shouldChangeTextInRange_replacementString_fieldEditorProc, "@:{NSRange}@");
+	OS.objc_registerClassPair(cls);
+
+	className = "SWTImageView";
+	cls = OS.objc_allocateClassPair(OS.class_NSImageView, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_isFlipped, isFlippedProc, "@:");
+	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
+	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
+	OS.objc_registerClassPair(cls);
+
+	cls = registerCellSubclass(NSImageView.cellClass(), size, align, types);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);	
+	NSImageView.setCellClass(cls);
+
+	className = "SWTImageTextCell";
+	cls = OS.objc_allocateClassPair (OS.class_NSTextFieldCell, className, 0);
+	OS.class_addIvar (cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addIvar (cls, SWT_IMAGE, size, (byte)align, types);
+	OS.class_addIvar (cls, SWT_ROW, size, (byte)align, types);
+	OS.class_addIvar (cls, SWT_COLUMN, size, (byte)align, types);
+	OS.class_addMethod (cls, OS.sel_drawInteriorWithFrame_inView_, drawInteriorWithFrameInViewProc, "@:{NSRect}@");
+	OS.class_addMethod (cls, OS.sel_drawWithExpansionFrame_inView_, drawWithExpansionFrameProc, "@:{NSRect}@");
+	OS.class_addMethod (cls, OS.sel_imageRectForBounds_, imageRectForBoundsProc, "@:{NSRect}");
+	OS.class_addMethod (cls, OS.sel_titleRectForBounds_, titleRectForBoundsProc, "@:{NSRect}");
+	OS.class_addMethod (cls, OS.sel_hitTestForEvent_inRect_ofView_, hitTestForEvent_inRect_ofViewProc, "@:@{NSRect}@");
+	OS.class_addMethod (cls, OS.sel_cellSize, cellSizeProc, "@:");
+	OS.class_addMethod (cls, OS.sel_image, proc2, "@:");
+	OS.class_addMethod (cls, OS.sel_setImage_, proc3, "@:@");
+	OS.class_addMethod (cls, OS.sel_expansionFrameWithFrame_inView_, expansionFrameWithFrameProc, "@:{NSRect}@");
+	OS.objc_registerClassPair (cls);
+
+	className = "SWTMenu";
+	cls = OS.objc_allocateClassPair(OS.class_NSMenu, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_menuWillOpen_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_menuDidClose_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_menu_willHighlightItem_, proc4, "@:@@");
+	OS.class_addMethod(cls, OS.sel_menuNeedsUpdate_, proc3, "@:@");
+	OS.objc_registerClassPair(cls);
+	
+	className = "SWTMenuItem";
+	cls = OS.objc_allocateClassPair(OS.class_NSMenuItem, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_sendSelection, proc2, "@:");
+	OS.objc_registerClassPair(cls);
+
+	className = "SWTOutlineView";
+	cls = OS.objc_allocateClassPair(OS.class_NSOutlineView, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_highlightSelectionInClipRect_, highlightSelectionInClipRectProc, "@:{NSRect}");
+	OS.class_addMethod(cls, OS.sel_sendDoubleSelection, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_outlineViewSelectionDidChange_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_outlineView_child_ofItem_, proc5, "@:@i@");
+	OS.class_addMethod(cls, OS.sel_outlineView_isItemExpandable_, proc4, "@:@@");
+	OS.class_addMethod(cls, OS.sel_outlineView_numberOfChildrenOfItem_, proc4, "@:@@");
+	OS.class_addMethod(cls, OS.sel_outlineView_objectValueForTableColumn_byItem_, proc5, "@:@@@");
+	OS.class_addMethod(cls, OS.sel_outlineView_willDisplayCell_forTableColumn_item_, proc6, "@:@@@@");
+	OS.class_addMethod(cls, OS.sel_outlineView_setObjectValue_forTableColumn_byItem_, proc6, "@:@@@@");
+	OS.class_addMethod(cls, OS.sel_outlineViewColumnDidMove_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_outlineViewColumnDidResize_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_outlineView_didClickTableColumn_, proc4, "@:@@");
+	OS.class_addMethod(cls, OS.sel_canDragRowsWithIndexes_atPoint_, canDragRowsWithIndexes_atPoint_Proc, "@:@{NSPoint=ff}");
+	OS.class_addMethod(cls, OS.sel_outlineView_writeItems_toPasteboard_, proc5, "@:@@@");
+	OS.class_addMethod(cls, OS.sel_expandItem_expandChildren_, proc4, "@:@Z");
+	OS.class_addMethod(cls, OS.sel_collapseItem_collapseChildren_, proc4, "@:@Z");
+	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
+	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
+	OS.objc_registerClassPair(cls);
+
+	className = "SWTPanelDelegate";
+	cls = OS.objc_allocateClassPair(OS.class_NSObject, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_windowWillClose_, dialogProc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_changeColor_, dialogProc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_changeFont_, dialogProc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_sendSelection_, dialogProc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_panel_shouldShowFilename_, dialogProc4, "@:@@");
+	OS.class_addMethod(cls, OS.sel_panelDidEnd_returnCode_contextInfo_, dialogProc5, "@:@i@");
+	OS.objc_registerClassPair(cls);
+
+	className = "SWTPopUpButton";
+	cls = OS.objc_allocateClassPair(OS.class_NSPopUpButton, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_sendSelection, proc2, "@:");
+	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
+	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
+	OS.objc_registerClassPair(cls);
+	
+	cls = registerCellSubclass(NSPopUpButton.cellClass(), size, align, types);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);	
+	NSPopUpButton.setCellClass(cls);
+	
+	className = "SWTProgressIndicator";
+	cls = OS.objc_allocateClassPair(OS.class_NSProgressIndicator, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_viewDidMoveToWindow, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel__drawThemeProgressArea_, proc3, "@:c");
+	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
+	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
+	OS.objc_registerClassPair(cls); 
+
+	className = "SWTScroller";
+	cls = OS.objc_allocateClassPair(OS.class_NSScroller, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_sendSelection, proc2, "@:");
+	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
+	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
+	OS.objc_registerClassPair(cls);
+	
+	className = "SWTScrollView";
+	cls = OS.objc_allocateClassPair(OS.class_NSScrollView, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_sendVerticalSelection, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_sendHorizontalSelection, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_pageDown_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_pageUp_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_reflectScrolledClipView_, proc3, "@:@");
+	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
+	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
+	OS.objc_registerClassPair(cls);
+
+	className = "SWTSearchField";
+	cls = OS.objc_allocateClassPair(OS.class_NSSearchField, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
+	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
+	OS.class_addMethod(cls, OS.sel_textDidChange_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_textViewDidChangeSelection_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_textView_willChangeSelectionFromCharacterRange_toCharacterRange_, textWillChangeSelectionProc, "@:@{NSRange}{NSRange}");
+	OS.class_addMethod(cls, OS.sel_sendSearchSelection, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_sendCancelSelection, proc2, "@:");
+	OS.objc_registerClassPair(cls);
+	
+	cls = registerCellSubclass(NSSearchField.cellClass(), size, align, types);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);	
+	NSSearchField.setCellClass(cls);
+
+	// Don't subclass NSSecureTextFieldCell -- you'll get an NSException from [NSSecureTextField setCellClass:]!
+	className = "SWTSecureTextField";
+	cls = OS.objc_allocateClassPair(OS.class_NSSecureTextField, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
+	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
+	OS.class_addMethod(cls, OS.sel_textDidChange_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_textViewDidChangeSelection_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_textView_willChangeSelectionFromCharacterRange_toCharacterRange_, textWillChangeSelectionProc, "@:@{NSRange}{NSRange}");
+	OS.objc_registerClassPair(cls);
+
+	className = "SWTSlider";
+	cls = OS.objc_allocateClassPair(OS.class_NSSlider, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_sendSelection, proc2, "@:");
+	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
+	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
+	OS.objc_registerClassPair(cls); 
+	
+	cls = registerCellSubclass(NSSlider.cellClass(), size, align, types);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);	
+	NSSlider.setCellClass(cls);
+
+	className = "SWTStepper";
+	cls = OS.objc_allocateClassPair(OS.class_NSStepper, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_sendSelection, proc2, "@:");
+	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
+	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
+	OS.objc_registerClassPair(cls);
+
+	cls = registerCellSubclass(NSStepper.cellClass(), size, align, types);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);	
+	NSStepper.setCellClass(cls);
+
+	className = "SWTTableHeaderCell";
+	cls = OS.objc_allocateClassPair (OS.class_NSTableHeaderCell, className, 0);
+	OS.class_addIvar (cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod (cls, OS.sel_drawInteriorWithFrame_inView_, drawInteriorWithFrameInViewProc, "@:{NSRect}@");
+	OS.objc_registerClassPair (cls);
+
+	className = "SWTTableHeaderView";
+	cls = OS.objc_allocateClassPair(OS.class_NSTableHeaderView, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_mouseDown_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_resetCursorRects, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_updateTrackingAreas, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_menuForEvent_, proc3, "@:@");
+	//TODO hitTestProc and drawRectProc should be set Control.setRegion()? 
+	OS.objc_registerClassPair(cls);
+
+	className = "SWTTableView";
+	cls = OS.objc_allocateClassPair(OS.class_NSTableView, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_highlightSelectionInClipRect_, highlightSelectionInClipRectProc, "@:{NSRect}");
+	OS.class_addMethod(cls, OS.sel_sendDoubleSelection, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_numberOfRowsInTableView_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_tableView_objectValueForTableColumn_row_, proc5, "@:@:@:@");
+	OS.class_addMethod(cls, OS.sel_tableView_shouldEditTableColumn_row_, proc5, "@:@:@:@");
+	OS.class_addMethod(cls, OS.sel_tableViewSelectionDidChange_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_tableView_willDisplayCell_forTableColumn_row_, proc6, "@:@@@i");
+	OS.class_addMethod(cls, OS.sel_tableView_setObjectValue_forTableColumn_row_, proc6, "@:@@@i");
+	OS.class_addMethod(cls, OS.sel_tableViewColumnDidMove_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_tableViewColumnDidResize_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_tableView_didClickTableColumn_, proc4, "@:@");
+	OS.class_addMethod(cls, OS.sel_canDragRowsWithIndexes_atPoint_, canDragRowsWithIndexes_atPoint_Proc, "@:@{NSPoint=ff}");
+	OS.class_addMethod(cls, OS.sel_tableView_writeRowsWithIndexes_toPasteboard_, proc5, "@:@@@");	
+	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
+	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
+	OS.objc_registerClassPair(cls);
+
+	className = "SWTTabView";
+	cls = OS.objc_allocateClassPair(OS.class_NSTabView, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_tabView_willSelectTabViewItem_, proc4, "@:@@");
+	OS.class_addMethod(cls, OS.sel_tabView_didSelectTabViewItem_, proc4, "@:@@");
+	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
+	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
+	OS.objc_registerClassPair(cls);
+
+	className = "SWTTextView";
+	cls = OS.objc_allocateClassPair(OS.class_NSTextView, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
+	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
+	OS.class_addMethod(cls, OS.sel_insertText_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_doCommandBySelector_, proc3, "@::");
+	OS.class_addMethod(cls, OS.sel_textDidChange_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_textView_clickedOnLink_atIndex_, proc5, "@:@@@");
+	OS.class_addMethod(cls, OS.sel_dragSelectionWithEvent_offset_slideBack_, proc5, "@:@@@");
+	OS.class_addMethod(cls, OS.sel_shouldChangeTextInRange_replacementString_, shouldChangeTextInRange_replacementString_Proc, "@:{NSRange}@");
+	OS.objc_registerClassPair(cls);
+	
+	className = "SWTTextField";
+	cls = OS.objc_allocateClassPair(OS.class_NSTextField, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
+	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
+	OS.class_addMethod(cls, OS.sel_acceptsFirstResponder, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_textDidChange_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_textDidEndEditing_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_textViewDidChangeSelection_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_textView_willChangeSelectionFromCharacterRange_toCharacterRange_, textWillChangeSelectionProc, "@:@{NSRange}{NSRange}");
+	OS.objc_registerClassPair(cls);
+	
+	cls = registerCellSubclass(NSTextField.cellClass(), size, align, types);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);	
+	NSTextField.setCellClass(cls);
+
+	className = "SWTTreeItem";
+	cls = OS.objc_allocateClassPair(OS.class_NSObject, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.objc_registerClassPair(cls);
+
+	className = "SWTView";
+	cls = OS.objc_allocateClassPair(OS.class_NSView, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_canBecomeKeyView, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_isFlipped, isFlippedProc, "@:");
+	OS.class_addMethod(cls, OS.sel_acceptsFirstResponder, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_isOpaque, proc2, "@:");
+	addEventMethods(cls, proc2, proc3, drawRectProc, hitTestProc, setNeedsDisplayInRectProc);
+	addFrameMethods(cls, setFrameOriginProc, setFrameSizeProc);
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
+	OS.objc_registerClassPair(cls);
+	
+	className = "SWTWindow";
+	cls = OS.objc_allocateClassPair(OS.class_NSWindow, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_sendEvent_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_helpRequested_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_canBecomeKeyWindow, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_becomeKeyWindow, proc2, "@:");
+	OS.class_addMethod(cls, OS.sel_makeFirstResponder_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_noResponderFor_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_view_stringForToolTip_point_userData_, view_stringForToolTip_point_userDataProc, "@:@i{NSPoint}@");
+	addAccessibilityMethods(cls, proc2, proc3, proc4, accessibilityHitTestProc);
+	OS.objc_registerClassPair(cls);
+	
+	className = "SWTWindowDelegate";
+	cls = OS.objc_allocateClassPair(OS.class_NSObject, className, 0);
+	OS.class_addIvar(cls, SWT_OBJECT, size, (byte)align, types);
+	OS.class_addMethod(cls, OS.sel_windowDidResize_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_windowDidMove_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_windowShouldClose_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_windowWillClose_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_windowDidResignKey_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_windowDidBecomeKey_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_timerProc_, proc3, "@:@");
+	OS.class_addMethod(cls, OS.sel_systemSettingsChanged_, proc3, "@:@");
+	OS.objc_registerClassPair(cls);	
+}
+
+NSFont getFont (int /*long*/ cls, int /*long*/ sel) {
+	int /*long*/ widget = OS.objc_msgSend (OS.objc_msgSend (cls, OS.sel_alloc), OS.sel_initWithFrame_, new NSRect());
+	int /*long*/ font = 0;
+	if (OS.objc_msgSend_bool (widget, OS.sel_respondsToSelector_, sel)) {
+		font = OS.objc_msgSend (widget, sel);
+	}
+	NSFont result = null;
+	if (font != 0) {
+		result = new NSFont (font);
+	} else {
+		result = NSFont.systemFontOfSize (NSFont.systemFontSizeForControlSize (OS.NSRegularControlSize));
+	}
+	result.retain ();	
+	OS.objc_msgSend (widget, OS.sel_release);
+	return result;
+}
+
+void initColors () {
+	colors = new float /*double*/ [SWT.COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT + 1][];
+	colors[SWT.COLOR_INFO_FOREGROUND] = getWidgetColorRGB(SWT.COLOR_INFO_FOREGROUND);
+	colors[SWT.COLOR_INFO_BACKGROUND] = getWidgetColorRGB(SWT.COLOR_INFO_BACKGROUND);
+	colors[SWT.COLOR_TITLE_FOREGROUND] = getWidgetColorRGB(SWT.COLOR_TITLE_FOREGROUND);
+	colors[SWT.COLOR_TITLE_BACKGROUND] = getWidgetColorRGB(SWT.COLOR_TITLE_BACKGROUND);
+	colors[SWT.COLOR_TITLE_BACKGROUND_GRADIENT] = getWidgetColorRGB(SWT.COLOR_TITLE_BACKGROUND_GRADIENT);
+	colors[SWT.COLOR_TITLE_INACTIVE_FOREGROUND] = getWidgetColorRGB(SWT.COLOR_TITLE_INACTIVE_FOREGROUND);
+	colors[SWT.COLOR_TITLE_INACTIVE_BACKGROUND] = getWidgetColorRGB(SWT.COLOR_TITLE_INACTIVE_BACKGROUND);
+	colors[SWT.COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT] = getWidgetColorRGB(SWT.COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT);
+	colors[SWT.COLOR_WIDGET_DARK_SHADOW] = getWidgetColorRGB(SWT.COLOR_WIDGET_DARK_SHADOW);
+	colors[SWT.COLOR_WIDGET_NORMAL_SHADOW] = getWidgetColorRGB(SWT.COLOR_WIDGET_NORMAL_SHADOW);
+	colors[SWT.COLOR_WIDGET_LIGHT_SHADOW] = getWidgetColorRGB(SWT.COLOR_WIDGET_LIGHT_SHADOW);
+	colors[SWT.COLOR_WIDGET_HIGHLIGHT_SHADOW] = getWidgetColorRGB(SWT.COLOR_WIDGET_HIGHLIGHT_SHADOW);
+	colors[SWT.COLOR_WIDGET_BACKGROUND] = getWidgetColorRGB(SWT.COLOR_WIDGET_BACKGROUND);
+	colors[SWT.COLOR_WIDGET_FOREGROUND] = getWidgetColorRGB(SWT.COLOR_WIDGET_FOREGROUND);
+	colors[SWT.COLOR_WIDGET_BORDER] = getWidgetColorRGB(SWT.COLOR_WIDGET_BORDER);
+	colors[SWT.COLOR_LIST_FOREGROUND] = getWidgetColorRGB(SWT.COLOR_LIST_FOREGROUND);
+	colors[SWT.COLOR_LIST_BACKGROUND] = getWidgetColorRGB(SWT.COLOR_LIST_BACKGROUND);
+	colors[SWT.COLOR_LIST_SELECTION_TEXT] = getWidgetColorRGB(SWT.COLOR_LIST_SELECTION_TEXT);
+	colors[SWT.COLOR_LIST_SELECTION] = getWidgetColorRGB(SWT.COLOR_LIST_SELECTION);
+
+	alternateSelectedControlColor = getWidgetColorRGB(NSColor.alternateSelectedControlColor());
+	alternateSelectedControlTextColor = getWidgetColorRGB(NSColor.alternateSelectedControlTextColor());
+	secondarySelectedControlColor = getWidgetColorRGB(NSColor.secondarySelectedControlColor());
+	selectedControlTextColor = getWidgetColorRGB(NSColor.selectedControlTextColor());
+}
+
+void initFonts () {
+	smallFonts = System.getProperty("org.eclipse.swt.internal.carbon.smallFonts") != null;
+	buttonFont = getFont (OS.class_NSButton, OS.sel_font);
+	popUpButtonFont = getFont (OS.class_NSPopUpButton, OS.sel_font);
+	textFieldFont = getFont (OS.class_NSTextField, OS.sel_font);
+	secureTextFieldFont = getFont (OS.class_NSSecureTextField, OS.sel_font);
+	searchFieldFont = getFont (OS.class_NSSearchField, OS.sel_font);
+	comboBoxFont = getFont (OS.class_NSComboBox, OS.sel_font);
+	sliderFont = getFont (OS.class_NSSlider, OS.sel_font);
+	scrollerFont = getFont (OS.class_NSScroller, OS.sel_font);
+	textViewFont = getFont (OS.class_NSTextView, OS.sel_font);
+	tableViewFont = getFont (OS.class_NSTableView, OS.sel_font);
+	outlineViewFont = getFont (OS.class_NSOutlineView, OS.sel_font);
+	datePickerFont = getFont (OS.class_NSDatePicker, OS.sel_font);
+	boxFont = getFont (OS.class_NSBox, OS.sel_titleFont);
+	tabViewFont = getFont (OS.class_NSTabView, OS.sel_font);
+	progressIndicatorFont = getFont (OS.class_NSProgressIndicator, OS.sel_font);
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new GC handle.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Display</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param data the platform specific GC data 
+ * @return the platform specific GC handle
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for gc creation</li>
+ * </ul>
+ */
+public int /*long*/ internal_new_GC (GCData data) {
+	if (isDisposed()) SWT.error(SWT.ERROR_DEVICE_DISPOSED);
+	if (screenWindow == null) {
+		NSWindow window = (NSWindow) new NSWindow ().alloc ();
+		NSRect rect = new NSRect();
+		window = window.initWithContentRect(rect, OS.NSBorderlessWindowMask, OS.NSBackingStoreBuffered, false);
+		window.setReleasedWhenClosed(false);
+		screenWindow = window;
+	}
+	NSGraphicsContext context = screenWindow.graphicsContext();
+//	NSAffineTransform transform = NSAffineTransform.transform();
+//	NSSize size = handle.size();
+//	transform.translateXBy(0, size.height);
+//	transform.scaleXBy(1, -1);
+//	transform.set();
+	if (data != null) {
+		int mask = SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT;
+		if ((data.style & mask) == 0) {
+			data.style |= SWT.LEFT_TO_RIGHT;
+		}
+		data.device = this;
+		data.background = getSystemColor(SWT.COLOR_WHITE).handle;
+		data.foreground = getSystemColor(SWT.COLOR_BLACK).handle;
+		data.font = getSystemFont();
+	}
+	return context.id;
+}
+
+/**	 
+ * Invokes platform specific functionality to dispose a GC handle.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Display</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param hDC the platform specific GC handle
+ * @param data the platform specific GC data 
+ */
+public void internal_dispose_GC (int /*long*/ context, GCData data) {
+	if (isDisposed()) SWT.error(SWT.ERROR_DEVICE_DISPOSED);
+	
+}
+
+static boolean isValidClass (Class clazz) {
+	String name = clazz.getName ();
+	int index = name.lastIndexOf ('.');
+	return name.substring (0, index + 1).equals (PACKAGE_PREFIX);
+}
+
+boolean isValidThread () {
+	return thread == Thread.currentThread ();
+}
+
+/**
+ * Generate a low level system event.
+ * 
+ * <code>post</code> is used to generate low level keyboard
+ * and mouse events. The intent is to enable automated UI
+ * testing by simulating the input from the user.  Most
+ * SWT applications should never need to call this method.
+ * <p>
+ * Note that this operation can fail when the operating system
+ * fails to generate the event for any reason.  For example,
+ * this can happen when there is no such key or mouse button
+ * or when the system event queue is full.
+ * </p>
+ * <p>
+ * <b>Event Types:</b>
+ * <p>KeyDown, KeyUp
+ * <p>The following fields in the <code>Event</code> apply:
+ * <ul>
+ * <li>(in) type KeyDown or KeyUp</li>
+ * <p> Either one of:
+ * <li>(in) character a character that corresponds to a keyboard key</li>
+ * <li>(in) keyCode the key code of the key that was typed,
+ *          as defined by the key code constants in class <code>SWT</code></li>
+ * </ul>
+ * <p>MouseDown, MouseUp</p>
+ * <p>The following fields in the <code>Event</code> apply:
+ * <ul>
+ * <li>(in) type MouseDown or MouseUp
+ * <li>(in) button the button that is pressed or released
+ * </ul>
+ * <p>MouseMove</p>
+ * <p>The following fields in the <code>Event</code> apply:
+ * <ul>
+ * <li>(in) type MouseMove
+ * <li>(in) x the x coordinate to move the mouse pointer to in screen coordinates
+ * <li>(in) y the y coordinate to move the mouse pointer to in screen coordinates
+ * </ul>
+ * <p>MouseWheel</p>
+ * <p>The following fields in the <code>Event</code> apply:
+ * <ul>
+ * <li>(in) type MouseWheel
+ * <li>(in) detail either SWT.SCROLL_LINE or SWT.SCROLL_PAGE
+ * <li>(in) count the number of lines or pages to scroll
+ * </ul>
+ * </dl>
+ * 
+ * @param event the event to be generated
+ * 
+ * @return true if the event was generated or false otherwise
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the event is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @since 3.0
+ * 
+ */
+public boolean post(Event event) {
+	synchronized (Device.class) {
+		if (isDisposed ()) error (SWT.ERROR_DEVICE_DISPOSED);
+		if (event == null) error (SWT.ERROR_NULL_ARGUMENT);
+
+		// TODO: Not sure if these calls have any effect on event posting.
+		if (!eventSourceDelaySet) {
+			OS.CGSetLocalEventsSuppressionInterval(0.0);
+	        OS.CGEnableEventStateCombining(1);
+	        OS.CGSetLocalEventsFilterDuringSuppressionState(OS.kCGEventFilterMaskPermitLocalKeyboardEvents | OS.kCGEventFilterMaskPermitLocalMouseEvents | OS.kCGEventFilterMaskPermitSystemDefinedEvents, OS.kCGEventSuppressionStateSuppressionInterval);
+	        OS.CGSetLocalEventsFilterDuringSuppressionState(OS.kCGEventFilterMaskPermitLocalKeyboardEvents | OS.kCGEventFilterMaskPermitLocalMouseEvents | OS.kCGEventFilterMaskPermitSystemDefinedEvents, OS.kCGEventSuppressionStateRemoteMouseDrag);
+			eventSourceDelaySet = true;
+		}
+
+		int type = event.type;
+		switch (type) {
+			case SWT.KeyDown:
+			case SWT.KeyUp: {
+				short vKey = (short)Display.untranslateKey (event.keyCode);
+				if (vKey == 0) {
+					int /*long*/ uchrPtr = 0;
+					int /*long*/ currentKbd = OS.TISCopyCurrentKeyboardInputSource();
+					int /*long*/ uchrCFData = OS.TISGetInputSourceProperty(currentKbd, OS.kTISPropertyUnicodeKeyLayoutData());
+					
+					if (uchrCFData == 0) return false;
+					uchrPtr = OS.CFDataGetBytePtr(uchrCFData);
+					if (uchrPtr == 0) return false;
+					if (OS.CFDataGetLength(uchrCFData) == 0) return false;
+					int maxStringLength = 256;
+					vKey = -1;
+					char [] output = new char [maxStringLength];
+					int [] actualStringLength = new int [1];
+					for (short i = 0 ; i <= 0x7F ; i++) {
+						OS.UCKeyTranslate (uchrPtr, i, (short)(type == SWT.KeyDown ? OS.kUCKeyActionDown : OS.kUCKeyActionUp), 0, OS.LMGetKbdType(), 0, deadKeyState, maxStringLength, actualStringLength, output);
+						if (output[0] == event.character) {
+							vKey = i;
+							break;
+						}
+					}
+					if (vKey == -1) {
+						for (short i = 0 ; i <= 0x7F ; i++) {
+							OS.UCKeyTranslate (uchrPtr, i, (short)(type == SWT.KeyDown ? OS.kUCKeyActionDown : OS.kUCKeyActionUp), OS.shiftKey, OS.LMGetKbdType(), 0, deadKeyState, maxStringLength, actualStringLength, output);
+							if (output[0] == event.character) {
+								vKey = i;
+								break;
+							}
+						}
+					}
+				}
+
+				/**
+				 * Bug(?) in UCKeyTranslate:  If event.keyCode doesn't map to a valid SWT constant and event.characer is 0 we still need to post an event.
+				 * In Carbon, KeyTranslate eventually found a key that generated 0 but UCKeyTranslate never generates 0.
+				 * When that happens, post an event from key 127, which does nothing.
+				 */
+				if (vKey == -1 && event.character == 0) {
+					vKey = 127;
+				}
+				
+				if (vKey == -1) return false;
+				
+				return OS.CGPostKeyboardEvent((short)0, vKey, type == SWT.KeyDown) == 0;
+			}
+			case SWT.MouseDown:
+			case SWT.MouseMove: 
+			case SWT.MouseUp: {
+				CGPoint mouseCursorPosition = new CGPoint ();
+				int chord = OS.GetCurrentButtonState ();
+
+				if (type == SWT.MouseMove) {
+					mouseCursorPosition.x = event.x;
+					mouseCursorPosition.y = event.y;
+					return OS.CGPostMouseEvent (mouseCursorPosition, true, 5, (chord & 0x1) != 0, (chord & 0x2) != 0, (chord & 0x4) != 0, (chord & 0x8) != 0, (chord & 0x10) != 0) == 0;
+				} else {
+					int button = event.button;
+					if (button < 1 || button > 5) return false;
+					boolean button1 = false, button2 = false, button3 = false, button4 = false, button5 = false;
+	 				switch (button) {
+						case 1: {
+							button1 = type == SWT.MouseDown;
+							button2 = (chord & 0x4) != 0;
+							button3 = (chord & 0x2) != 0;
+							button4 = (chord & 0x8) != 0;
+							button5 = (chord & 0x10) != 0;
+							break;
+						}
+						case 2: {
+							button1 = (chord & 0x1) != 0;
+							button2 = type == SWT.MouseDown;
+							button3 = (chord & 0x2) != 0;
+							button4 = (chord & 0x8) != 0;
+							button5 = (chord & 0x10) != 0;
+							break;
+						}
+						case 3: {
+							button1 = (chord & 0x1) != 0;
+							button2 = (chord & 0x4) != 0;
+							button3 = type == SWT.MouseDown;
+							button4 = (chord & 0x8) != 0;
+							button5 = (chord & 0x10) != 0;
+							break;
+						}
+						case 4: {
+							button1 = (chord & 0x1) != 0;
+							button2 = (chord & 0x4) != 0;
+							button3 = (chord & 0x2) != 0;
+							button4 = type == SWT.MouseDown;
+							button5 = (chord & 0x10) != 0;
+							break;
+						}
+						case 5: {
+							button1 = (chord & 0x1) != 0;
+							button2 = (chord & 0x4) != 0;
+							button3 = (chord & 0x2) != 0;
+							button4 = (chord & 0x8) != 0;
+							button5 = type == SWT.MouseDown;
+							break;
+						}
+					}
+	 				
+	 				NSPoint nsCursorPosition = NSEvent.mouseLocation();
+	 				NSRect primaryFrame = getPrimaryFrame();
+	 				mouseCursorPosition.x = nsCursorPosition.x;
+	 				mouseCursorPosition.y = (int) (primaryFrame.height - nsCursorPosition.y);
+					return OS.CGPostMouseEvent (mouseCursorPosition, true, 5, button1, button3, button2, button4, button5) == 0;
+				}
+			}
+			case SWT.MouseWheel: {
+				return OS.CGPostScrollWheelEvent(1, event.count) == 0;
+			}
+		} 
+		return false;
+	}
+}
+
+void postEvent (Event event) {
+	/*
+	* Place the event at the end of the event queue.
+	* This code is always called in the Display's
+	* thread so it must be re-enterant but does not
+	* need to be synchronized.
+	*/
+	if (eventQueue == null) eventQueue = new Event [4];
+	int index = 0;
+	int length = eventQueue.length;
+	while (index < length) {
+		if (eventQueue [index] == null) break;
+		index++;
+	}
+	if (index == length) {
+		Event [] newQueue = new Event [length + 4];
+		System.arraycopy (eventQueue, 0, newQueue, 0, length);
+		eventQueue = newQueue;
+	}
+	eventQueue [index] = event;
+}
+
+/**
+ * Maps a point from one coordinate system to another.
+ * When the control is null, coordinates are mapped to
+ * the display.
+ * <p>
+ * NOTE: On right-to-left platforms where the coordinate
+ * systems are mirrored, special care needs to be taken
+ * when mapping coordinates from one control to another
+ * to ensure the result is correctly mirrored.
+ * 
+ * Mapping a point that is the origin of a rectangle and
+ * then adding the width and height is not equivalent to
+ * mapping the rectangle.  When one control is mirrored
+ * and the other is not, adding the width and height to a
+ * point that was mapped causes the rectangle to extend
+ * in the wrong direction.  Mapping the entire rectangle
+ * instead of just one point causes both the origin and
+ * the corner of the rectangle to be mapped.
+ * </p>
+ * 
+ * @param from the source <code>Control</code> or <code>null</code>
+ * @param to the destination <code>Control</code> or <code>null</code>
+ * @param point to be mapped 
+ * @return point with mapped coordinates 
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the Control from or the Control to have been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 2.1.2
+ */
+public Point map (Control from, Control to, Point point) {
+	checkDevice ();
+	if (point == null) error (SWT.ERROR_NULL_ARGUMENT);	
+	return map (from, to, point.x, point.y);
+}
+
+/**
+ * Maps a point from one coordinate system to another.
+ * When the control is null, coordinates are mapped to
+ * the display.
+ * <p>
+ * NOTE: On right-to-left platforms where the coordinate
+ * systems are mirrored, special care needs to be taken
+ * when mapping coordinates from one control to another
+ * to ensure the result is correctly mirrored.
+ * 
+ * Mapping a point that is the origin of a rectangle and
+ * then adding the width and height is not equivalent to
+ * mapping the rectangle.  When one control is mirrored
+ * and the other is not, adding the width and height to a
+ * point that was mapped causes the rectangle to extend
+ * in the wrong direction.  Mapping the entire rectangle
+ * instead of just one point causes both the origin and
+ * the corner of the rectangle to be mapped.
+ * </p>
+ * 
+ * @param from the source <code>Control</code> or <code>null</code>
+ * @param to the destination <code>Control</code> or <code>null</code>
+ * @param x coordinates to be mapped
+ * @param y coordinates to be mapped
+ * @return point with mapped coordinates
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the Control from or the Control to have been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 2.1.2
+ */
+public Point map (Control from, Control to, int x, int y) {
+	checkDevice ();
+	if (from != null && from.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT);
+	if (to != null && to.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT);
+	Point point = new Point (x, y);
+	if (from == to) return point;
+	NSPoint pt = new NSPoint();
+	pt.x = x;
+	pt.y = y;
+	NSWindow fromWindow = from != null ? from.view.window() : null;
+	NSWindow toWindow = to != null ? to.view.window() : null;
+	if (toWindow != null && fromWindow != null && toWindow.id == fromWindow.id) {
+		if (!from.view.isFlipped ()) {
+			pt.y = from.view.bounds().height - pt.y;
+		}
+		pt = from.view.convertPoint_toView_(pt, to.view);
+		if (!to.view.isFlipped ()) {
+			pt.y = to.view.bounds().height - pt.y;
+		}
+	} else {
+		NSRect primaryFrame = getPrimaryFrame();
+		if (from != null) {
+			NSView view = from.eventView ();
+			if (!view.isFlipped ()) {
+				pt.y = view.bounds().height - pt.y;
+			}
+			pt = view.convertPoint_toView_(pt, null);
+			pt = fromWindow.convertBaseToScreen(pt);
+			pt.y = primaryFrame.height - pt.y;
+		}
+		if (to != null) {
+			NSView view = to.eventView ();
+			pt.y = primaryFrame.height - pt.y;
+			pt = toWindow.convertScreenToBase(pt);
+			pt = view.convertPoint_fromView_(pt, null);
+			if (!view.isFlipped ()) {
+				pt.y = view.bounds().height - pt.y;
+			}
+		}
+	}
+	point.x = (int)pt.x;
+	point.y = (int)pt.y;
+	return point;
+}
+
+/**
+ * Maps a point from one coordinate system to another.
+ * When the control is null, coordinates are mapped to
+ * the display.
+ * <p>
+ * NOTE: On right-to-left platforms where the coordinate
+ * systems are mirrored, special care needs to be taken
+ * when mapping coordinates from one control to another
+ * to ensure the result is correctly mirrored.
+ * 
+ * Mapping a point that is the origin of a rectangle and
+ * then adding the width and height is not equivalent to
+ * mapping the rectangle.  When one control is mirrored
+ * and the other is not, adding the width and height to a
+ * point that was mapped causes the rectangle to extend
+ * in the wrong direction.  Mapping the entire rectangle
+ * instead of just one point causes both the origin and
+ * the corner of the rectangle to be mapped.
+ * </p>
+ * 
+ * @param from the source <code>Control</code> or <code>null</code>
+ * @param to the destination <code>Control</code> or <code>null</code>
+ * @param rectangle to be mapped
+ * @return rectangle with mapped coordinates
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the rectangle is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the Control from or the Control to have been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 2.1.2
+ */
+public Rectangle map (Control from, Control to, Rectangle rectangle) {
+	checkDevice ();
+	if (rectangle == null) error (SWT.ERROR_NULL_ARGUMENT);	
+	return map (from, to, rectangle.x, rectangle.y, rectangle.width, rectangle.height);
+}
+
+/**
+ * Maps a point from one coordinate system to another.
+ * When the control is null, coordinates are mapped to
+ * the display.
+ * <p>
+ * NOTE: On right-to-left platforms where the coordinate
+ * systems are mirrored, special care needs to be taken
+ * when mapping coordinates from one control to another
+ * to ensure the result is correctly mirrored.
+ * 
+ * Mapping a point that is the origin of a rectangle and
+ * then adding the width and height is not equivalent to
+ * mapping the rectangle.  When one control is mirrored
+ * and the other is not, adding the width and height to a
+ * point that was mapped causes the rectangle to extend
+ * in the wrong direction.  Mapping the entire rectangle
+ * instead of just one point causes both the origin and
+ * the corner of the rectangle to be mapped.
+ * </p>
+ * 
+ * @param from the source <code>Control</code> or <code>null</code>
+ * @param to the destination <code>Control</code> or <code>null</code>
+ * @param x coordinates to be mapped
+ * @param y coordinates to be mapped
+ * @param width coordinates to be mapped
+ * @param height coordinates to be mapped
+ * @return rectangle with mapped coordinates
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the Control from or the Control to have been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 2.1.2
+ */
+public Rectangle map (Control from, Control to, int x, int y, int width, int height) {
+	checkDevice ();
+	if (from != null && from.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT);
+	if (to != null && to.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT);
+	Rectangle rectangle = new Rectangle (x, y, width, height);
+	if (from == to) return rectangle;
+	NSPoint pt = new NSPoint();
+	pt.x = x;
+	pt.y = y;
+	NSWindow fromWindow = from != null ? from.view.window() : null;
+	NSWindow toWindow = to != null ? to.view.window() : null;
+	if (toWindow != null && fromWindow != null && toWindow.id == fromWindow.id) {
+		if (!from.view.isFlipped ()) {
+			pt.y = from.view.bounds().height - pt.y;
+		}
+		pt = from.view.convertPoint_toView_(pt, to.view);
+		if (!to.view.isFlipped ()) {
+			pt.y = to.view.bounds().height - pt.y;
+		}
+	} else {
+		NSRect primaryFrame = getPrimaryFrame();
+		if (from != null) {
+			NSView view = from.eventView ();
+			if (!view.isFlipped ()) {
+				pt.y = view.bounds().height - pt.y;
+			}
+			pt = view.convertPoint_toView_(pt, null);
+			pt = fromWindow.convertBaseToScreen(pt);
+			pt.y = primaryFrame.height - pt.y;
+		}
+		if (to != null) {
+			NSView view = to.eventView ();
+			pt.y = primaryFrame.height - pt.y;
+			pt = toWindow.convertScreenToBase(pt);
+			pt = view.convertPoint_fromView_(pt, null);
+			if (!view.isFlipped ()) {
+				pt.y = view.bounds().height - pt.y;
+			}
+		}
+	}
+	rectangle.x = (int)pt.x;
+	rectangle.y = (int)pt.y;
+	return rectangle;
+}
+
+int /*long*/ observerProc (int /*long*/ observer, int /*long*/ activity, int /*long*/ info) {
+	switch ((int)/*64*/activity) {
+		case OS.kCFRunLoopBeforeWaiting:
+			if (runAsyncMessages) {
+				if (runAsyncMessages (false)) wakeThread ();
+			}
+			break;
+	}
+	return 0;
+}
+
+/**
+ * Reads an event from the operating system's event queue,
+ * dispatches it appropriately, and returns <code>true</code>
+ * if there is potentially more work to do, or <code>false</code>
+ * if the caller can sleep until another event is placed on
+ * the event queue.
+ * <p>
+ * In addition to checking the system event queue, this method also
+ * checks if any inter-thread messages (created by <code>syncExec()</code>
+ * or <code>asyncExec()</code>) are waiting to be processed, and if
+ * so handles them before returning.
+ * </p>
+ *
+ * @return <code>false</code> if the caller can sleep upon return from this method
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_FAILED_EXEC - if an exception occurred while running an inter-thread message</li>
+ * </ul>
+ *
+ * @see #sleep
+ * @see #wake
+ */
+public boolean readAndDispatch () {
+	checkDevice ();
+	if (sendEventCount == 0 && loopCount == poolCount - 1 && Callback.getEntryCount () == 0) removePool ();
+	addPool ();
+	loopCount++;
+	boolean events = false;
+	try {
+		events |= runSettings ();
+		events |= runTimers ();
+		events |= runContexts ();
+		events |= runPopups ();
+		NSEvent event = application.nextEventMatchingMask(0, null, OS.NSDefaultRunLoopMode, true);
+		if (event != null) {
+			events = true;
+			application.sendEvent(event);
+		}
+		events |= runPaint ();
+		events |= runDeferredEvents ();
+		if (!events) {
+			events = isDisposed () || runAsyncMessages (false);
+		}
+	} finally {
+		removePool ();
+		loopCount--;
+		if (sendEventCount == 0 && loopCount == poolCount && Callback.getEntryCount () == 0) addPool ();
+	}
+	return events;
+}
+
+static void register (Display display) {
+	synchronized (Device.class) {
+		for (int i=0; i<Displays.length; i++) {
+			if (Displays [i] == null) {
+				Displays [i] = display;
+				return;
+			}
+		}
+		Display [] newDisplays = new Display [Displays.length + 4];
+		System.arraycopy (Displays, 0, newDisplays, 0, Displays.length);
+		newDisplays [Displays.length] = display;
+		Displays = newDisplays;
+	}
+}
+
+/**
+ * Releases any internal resources back to the operating
+ * system and clears all fields except the device handle.
+ * <p>
+ * Disposes all shells which are currently open on the display. 
+ * After this method has been invoked, all related related shells
+ * will answer <code>true</code> when sent the message
+ * <code>isDisposed()</code>.
+ * </p><p>
+ * When a device is destroyed, resources that were acquired
+ * on behalf of the programmer need to be returned to the
+ * operating system.  For example, if the device allocated a
+ * font to be used as the system font, this font would be
+ * freed in <code>release</code>.  Also,to assist the garbage
+ * collector and minimize the amount of memory that is not
+ * reclaimed when the programmer keeps a reference to a
+ * disposed device, all fields except the handle are zero'd.
+ * The handle is needed by <code>destroy</code>.
+ * </p>
+ * This method is called before <code>destroy</code>.
+ * 
+ * @see Device#dispose
+ * @see #destroy
+ */
+protected void release () {
+	disposing = true;
+	sendEvent (SWT.Dispose, new Event ());
+	Shell [] shells = getShells ();
+	for (int i=0; i<shells.length; i++) {
+		Shell shell = shells [i];
+		if (!shell.isDisposed ()) shell.dispose ();
+	}
+	if (tray != null) tray.dispose ();
+	tray = null;
+	while (readAndDispatch ()) {}
+	if (disposeList != null) {
+		for (int i=0; i<disposeList.length; i++) {
+			if (disposeList [i] != null) disposeList [i].run ();
+		}
+	}
+	disposeList = null;
+	synchronizer.releaseSynchronizer ();
+	synchronizer = null;
+	releaseDisplay ();
+	super.release ();
+}
+
+void releaseDisplay () {	
+	/* Release the System Images */
+	if (errorImage != null) errorImage.dispose ();
+	if (infoImage != null) infoImage.dispose ();
+	if (warningImage != null) warningImage.dispose ();
+	errorImage = infoImage = warningImage = null;
+	
+	currentCaret = null;
+	
+	/* Release Timers */
+	if (hoverTimer != null) timerExec(-1, hoverTimer);
+	hoverTimer = null;
+	if (caretTimer != null) timerExec(-1, caretTimer);
+	caretTimer = null;
+	if (nsTimers != null) {
+		for (int i=0; i<nsTimers.length; i++) {
+			if (nsTimers [i] != null) {
+				nsTimers [i].invalidate();
+				nsTimers [i].release();
+			}
+		}
+	}
+	nsTimers = null;
+	if (timerDelegate != null) timerDelegate.release();
+	timerDelegate = null;
+	
+	/* Release the System Cursors */
+	for (int i = 0; i < cursors.length; i++) {
+		if (cursors [i] != null) cursors [i].dispose ();
+	}
+	cursors = null;
+	
+	/* Release default fonts */
+	if (buttonFont != null) buttonFont.release ();
+	if (popUpButtonFont != null) popUpButtonFont.release ();
+	if (textFieldFont != null) textFieldFont.release ();
+	if (secureTextFieldFont != null) secureTextFieldFont.release ();
+	if (searchFieldFont != null) searchFieldFont.release ();
+	if (comboBoxFont != null) comboBoxFont.release ();
+	if (sliderFont != null) sliderFont.release ();
+	if (scrollerFont != null) scrollerFont.release ();
+	if (textViewFont != null) textViewFont.release ();
+	if (tableViewFont != null) tableViewFont.release ();
+	if (outlineViewFont != null) outlineViewFont.release ();
+	if (datePickerFont != null) datePickerFont.release ();
+	if (boxFont != null) boxFont.release ();
+	if (tabViewFont != null) tabViewFont.release ();
+	if (progressIndicatorFont != null) progressIndicatorFont.release ();
+	buttonFont = popUpButtonFont = textFieldFont = secureTextFieldFont = null;
+	searchFieldFont = comboBoxFont = sliderFont = scrollerFont;
+	textViewFont = tableViewFont = outlineViewFont = datePickerFont = null;
+	boxFont = tabViewFont = progressIndicatorFont = null;
+	
+	/* Release Dock image */
+	if (dockImage != null) dockImage.release();
+	dockImage = null;
+
+	if (screenWindow != null) screenWindow.release();
+	screenWindow = null;
+	
+	if (needsDisplay != null) needsDisplay.release();
+	if (needsDisplayInRect != null) needsDisplayInRect.release();
+	if (isPainting != null) isPainting.release();
+	needsDisplay = needsDisplayInRect = isPainting = null;
+	
+	modalShells = null;
+	menuBar = null;
+	menus = null;
+	
+	if (markedAttributes != null) markedAttributes.release();
+	markedAttributes = null;
+	
+	if (oldCursorSetProc != 0) {
+		int /*long*/ method = OS.class_getInstanceMethod(OS.class_NSCursor, OS.sel_set);
+		OS.method_setImplementation(method, oldCursorSetProc);
+	}
+	if (cursorSetCallback != null) cursorSetCallback.dispose();
+	cursorSetCallback = null;
+
+	deadKeyState = null;
+
+	if (settingsDelegate != null) {
+		NSNotificationCenter.defaultCenter().removeObserver(settingsDelegate);
+		settingsDelegate.release();
+	}
+	settingsDelegate = null;
+	
+	// Clear the menu bar if we created it.
+	if (!isEmbedded) {
+		//remove all existing menu items except the application menu
+		NSMenu menubar = application.mainMenu();
+		int /*long*/ count = menubar.numberOfItems();
+		while (count > 1) {
+			menubar.removeItemAtIndex(count - 1);
+			count--;
+		}
+	}
+	
+	// The autorelease pool is cleaned up when we call NSApplication.terminate().
+
+	if (application != null && applicationClass != 0) {
+		OS.object_setClass (application.id, applicationClass);
+	}
+	application = null;
+	applicationClass = 0;
+	
+	if (runLoopObserver != 0) {
+		OS.CFRunLoopObserverInvalidate (runLoopObserver);
+		OS.CFRelease (runLoopObserver);
+	}
+	runLoopObserver = 0;
+	if (observerCallback != null) observerCallback.dispose();
+	observerCallback = null;
+}
+
+void removeContext (GCData context) {
+	if (contexts == null) return;
+	int count = 0;
+	for (int i = 0; i < contexts.length; i++) {
+		if (contexts[i] != null) {
+			if (contexts [i] == context) {
+				contexts[i] = null;
+			} else {
+				count++;
+			}
+		}
+	}
+	if (count == 0) contexts = null;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when an event of the given type occurs anywhere in
+ * a widget. The event type is one of the event constants defined
+ * in class <code>SWT</code>.
+ *
+ * @param eventType the type of event to listen for
+ * @param listener the listener which should no longer be notified when the event occurs
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Listener
+ * @see SWT
+ * @see #addFilter
+ * @see #addListener
+ * 
+ * @since 3.0
+ */
+public void removeFilter (int eventType, Listener listener) {
+	checkDevice ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (filterTable == null) return;
+	filterTable.unhook (eventType, listener);
+	if (filterTable.size () == 0) filterTable = null;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when an event of the given type occurs. The event type
+ * is one of the event constants defined in class <code>SWT</code>.
+ *
+ * @param eventType the type of event to listen for
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see Listener
+ * @see SWT
+ * @see #addListener
+ * 
+ * @since 2.0 
+ */
+public void removeListener (int eventType, Listener listener) {
+	checkDevice ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (eventType, listener);
+}
+
+Widget removeWidget (NSObject view) {
+	if (view == null) return null;
+	int /*long*/ [] jniRef = new int /*long*/ [1];
+	OS.object_getInstanceVariable(view.id, SWT_OBJECT, jniRef);
+	if (jniRef[0] == 0) return null;
+	Widget widget = (Widget)OS.JNIGetObject(jniRef[0]);
+	OS.object_setInstanceVariable(view.id, SWT_OBJECT, 0);
+	return widget;
+}
+
+void removeMenu (Menu menu) {
+	if (menus == null) return;
+	for (int i = 0; i < menus.length; i++) {
+		if (menus [i] == menu) {
+			menus[i] = null;
+			break;
+		}
+	}
+}
+
+void removePool () {
+	NSAutoreleasePool pool = pools [poolCount - 1];
+	pools [--poolCount] = null;
+	if (poolCount == 0) {
+		NSMutableDictionary dictionary = NSThread.currentThread().threadDictionary();
+		dictionary.removeObjectForKey(NSString.stringWith("SWT_NSAutoreleasePool"));
+	}
+	pool.release ();
+}
+
+void removePopup (Menu menu) {
+	if (popups == null) return;
+	for (int i=0; i<popups.length; i++) {
+		if (popups [i] == menu) {
+			popups [i] = null;
+			return;
+		}
+	}
+}
+
+boolean runAsyncMessages (boolean all) {
+	return synchronizer.runAsyncMessages (all);
+}
+
+boolean runContexts () {
+	if (contexts != null) {
+		for (int i = 0; i < contexts.length; i++) {
+			if (contexts[i] != null && contexts[i].flippedContext != null) {
+				contexts[i].flippedContext.flushGraphics();
+			}
+		}
+	}
+	return false;
+}
+
+boolean runDeferredEvents () {
+	boolean run = false;
+	/*
+	* Run deferred events.  This code is always
+	* called  in the Display's thread so it must
+	* be re-enterant need not be synchronized.
+	*/
+	while (eventQueue != null) {
+		
+		/* Take an event off the queue */
+		Event event = eventQueue [0];
+		if (event == null) break;
+		int length = eventQueue.length;
+		System.arraycopy (eventQueue, 1, eventQueue, 0, --length);
+		eventQueue [length] = null;
+
+		/* Run the event */
+		Widget widget = event.widget;
+		if (widget != null && !widget.isDisposed ()) {
+			Widget item = event.item;
+			if (item == null || !item.isDisposed ()) {
+				run = true;
+				widget.notifyListeners (event.type, event);
+			}
+		}
+
+		/*
+		* At this point, the event queue could
+		* be null due to a recursive invokation
+		* when running the event.
+		*/
+	}
+
+	/* Clear the queue */
+	eventQueue = null;
+	return run;
+}
+
+boolean runPaint () {
+	if (needsDisplay == null && needsDisplayInRect == null) return false;
+	if (needsDisplay != null) {
+		int /*long*/ count = needsDisplay.count();
+		for (int i = 0; i < count; i++) {
+			OS.objc_msgSend(needsDisplay.objectAtIndex(i).id, OS.sel_setNeedsDisplay_, true);
+		}
+		needsDisplay.release();
+		needsDisplay = null;
+	}
+	if (needsDisplayInRect != null) {
+		int /*long*/ count = needsDisplayInRect.count();
+		for (int i = 0; i < count; i+=2) {
+			NSValue value = new NSValue(needsDisplayInRect.objectAtIndex(i+1));
+			OS.objc_msgSend(needsDisplayInRect.objectAtIndex(i).id, OS.sel_setNeedsDisplayInRect_, value.rectValue());
+		}
+		needsDisplayInRect.release();
+		needsDisplayInRect = null;
+	}
+	return true;
+}
+
+boolean runPopups () {
+	if (popups == null) return false;
+	boolean result = false;
+	while (popups != null) {
+		Menu menu = popups [0];
+		if (menu == null) break;
+		runDeferredEvents ();
+		int length = popups.length;
+		System.arraycopy (popups, 1, popups, 0, --length);
+		popups [length] = null;
+		if (!menu.isDisposed ()) menu._setVisible (true);
+		result = true;
+	}
+	popups = null;
+	return result;
+}
+
+boolean runSettings () {
+	if (!runSettings) return false;
+	runSettings = false;
+	initColors ();
+	sendEvent (SWT.Settings, null);
+	Shell [] shells = getShells ();
+	for (int i=0; i<shells.length; i++) {
+		Shell shell = shells [i];
+		if (!shell.isDisposed ()) {
+			shell.redraw (true);
+			shell.layout (true, true);
+		}
+	}
+	return true;
+}
+
+boolean runTimers () {
+	if (timerList == null) return false;
+	boolean result = false;
+	for (int i=0; i<timerList.length; i++) {
+		if (nsTimers [i] == null && timerList [i] != null) {
+			Runnable runnable = timerList [i];
+			timerList [i] = null;
+			if (runnable != null) {
+				result = true;
+				runnable.run ();
+			}
+		}
+	}
+	return result;
+}
+
+void sendEvent (int eventType, Event event) {
+	if (eventTable == null && filterTable == null) {
+		return;
+	}
+	if (event == null) event = new Event ();
+	event.display = this;
+	event.type = eventType;
+	if (event.time == 0) event.time = getLastEventTime ();
+	sendEvent(eventTable, event);
+}
+
+void sendEvent (EventTable table, Event event) {
+	try {
+		sendEventCount++;
+		if (!filterEvent (event)) {
+			if (table != null) table.sendEvent (event);
+		}
+	} finally {
+		sendEventCount--;
+	}
+}
+
+static NSString getAppName() {
+	NSString name = null;
+	int pid = OS.getpid ();
+	int /*long*/ ptr = OS.getenv (ascii ("APP_NAME_" + pid));
+	if (ptr != 0) name = NSString.stringWithUTF8String(ptr);
+	if (name == null && APP_NAME != null) name = NSString.stringWith(APP_NAME);
+	if (name == null) {
+		id value = NSBundle.mainBundle().objectForInfoDictionaryKey(NSString.stringWith("CFBundleName"));
+		if (value != null) {
+			name = new NSString(value);
+		}
+	}
+	if (name == null) name = NSString.stringWith("SWT");
+	return name;
+}
+
+/**
+ * On platforms which support it, sets the application name
+ * to be the argument. On Motif, for example, this can be used
+ * to set the name used for resource lookup.  Specifying
+ * <code>null</code> for the name clears it.
+ *
+ * @param name the new app name or <code>null</code>
+ */
+public static void setAppName (String name) {
+	APP_NAME = name;
+}
+
+//TODO use custom timer instead of timerExec
+Runnable hoverTimer = new Runnable () {
+	public void run () {
+		if (currentControl != null && !currentControl.isDisposed()) {
+			currentControl.sendMouseEvent (NSApplication.sharedApplication().currentEvent(), SWT.MouseHover, trackingControl != null && !trackingControl.isDisposed());
+		}
+	}
+};
+//TODO - use custom timer instead of timerExec
+Runnable caretTimer = new Runnable () {
+	public void run () {
+		if (currentCaret != null) {
+			if (currentCaret == null || currentCaret.isDisposed()) return;
+			if (currentCaret.blinkCaret ()) {
+				int blinkRate = currentCaret.blinkRate;
+				if (blinkRate != 0) timerExec (blinkRate, this);
+			} else {
+				currentCaret = null;
+			}
+		}
+		
+	}
+};
+
+//TODO - use custom timer instead of timerExec
+Runnable defaultButtonTimer = new Runnable() {
+	public void run() {
+		if (isDisposed ()) return;
+		Shell shell = getActiveShell();
+		if (shell != null && !shell.isDisposed()) {
+			Button defaultButton = shell.defaultButton;
+			if (defaultButton != null && !defaultButton.isDisposed()) {
+				NSView view = defaultButton.view;
+				view.display();
+			}
+		}
+		if (isDisposed ()) return;
+		if (hasDefaultButton()) timerExec(DEFAULT_BUTTON_INTERVAL, this);
+	}
+};
+
+void setCurrentCaret (Caret caret) {
+	currentCaret = caret;
+	int blinkRate = currentCaret != null ? currentCaret.blinkRate : -1;
+	timerExec (blinkRate, caretTimer);
+}
+
+void setCursor (Control control) {
+	Cursor cursor = null;
+	if (control != null && !control.isDisposed()) cursor = control.findCursor ();
+	if (cursor == null) {
+		NSWindow window = application.keyWindow();
+		if (window != null) {
+			if (window.areCursorRectsEnabled ()) {
+				window.disableCursorRects ();
+				window.enableCursorRects ();
+			}
+			return;
+		}
+		cursor = getSystemCursor (SWT.CURSOR_ARROW);
+	}
+	lockCursor = false;
+	cursor.handle.set ();
+	lockCursor = true;
+}
+
+/**
+ * Sets the location of the on-screen pointer relative to the top left corner
+ * of the screen.  <b>Note: It is typically considered bad practice for a
+ * program to move the on-screen pointer location.</b>
+ *
+ * @param x the new x coordinate for the cursor
+ * @param y the new y coordinate for the cursor
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 2.1
+ */
+public void setCursorLocation (int x, int y) {
+	checkDevice ();
+	CGPoint pt = new CGPoint ();
+	pt.x = x;  pt.y = y;
+	OS.CGWarpMouseCursorPosition (pt);
+}
+
+/**
+ * Sets the location of the on-screen pointer relative to the top left corner
+ * of the screen.  <b>Note: It is typically considered bad practice for a
+ * program to move the on-screen pointer location.</b>
+ *
+ * @param point new position
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 2.0
+ */
+public void setCursorLocation (Point point) {
+	checkDevice ();
+	if (point == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setCursorLocation (point.x, point.y);
+}
+
+/**
+ * Sets the application defined property of the receiver
+ * with the specified name to the given argument.
+ * <p>
+ * Applications may have associated arbitrary objects with the
+ * receiver in this fashion. If the objects stored in the
+ * properties need to be notified when the display is disposed
+ * of, it is the application's responsibility provide a
+ * <code>disposeExec()</code> handler which does so.
+ * </p>
+ *
+ * @param key the name of the property
+ * @param value the new value for the property
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the key is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #getData(String)
+ * @see #disposeExec(Runnable)
+ */
+public void setData (String key, Object value) {
+	checkDevice ();
+	if (key == null) error (SWT.ERROR_NULL_ARGUMENT);
+	
+	if (key.equals (ADD_WIDGET_KEY)) {
+		Object [] data = (Object [])value;
+		NSObject object = (NSObject)data [0];
+		Widget widget = (Widget)data [1];
+		if (widget == null) {
+			removeWidget (object);
+		} else {
+			addWidget (object, widget);
+		}
+	}
+	
+	/* Remove the key/value pair */
+	if (value == null) {
+		if (keys == null) return;
+		int index = 0;
+		while (index < keys.length && !keys [index].equals (key)) index++;
+		if (index == keys.length) return;
+		if (keys.length == 1) {
+			keys = null;
+			values = null;
+		} else {
+			String [] newKeys = new String [keys.length - 1];
+			Object [] newValues = new Object [values.length - 1];
+			System.arraycopy (keys, 0, newKeys, 0, index);
+			System.arraycopy (keys, index + 1, newKeys, index, newKeys.length - index);
+			System.arraycopy (values, 0, newValues, 0, index);
+			System.arraycopy (values, index + 1, newValues, index, newValues.length - index);
+			keys = newKeys;
+			values = newValues;
+		}
+		return;
+	}
+	
+	/* Add the key/value pair */
+	if (keys == null) {
+		keys = new String [] {key};
+		values = new Object [] {value};
+		return;
+	}
+	for (int i=0; i<keys.length; i++) {
+		if (keys [i].equals (key)) {
+			values [i] = value;
+			return;
+		}
+	}
+	String [] newKeys = new String [keys.length + 1];
+	Object [] newValues = new Object [values.length + 1];
+	System.arraycopy (keys, 0, newKeys, 0, keys.length);
+	System.arraycopy (values, 0, newValues, 0, values.length);
+	newKeys [keys.length] = key;
+	newValues [values.length] = value;
+	keys = newKeys;
+	values = newValues;
+}
+
+void setMenuBar (Menu menu) {
+	if (menu == menuBar) return;
+	menuBar = menu;
+	//remove all existing menu items except the application menu
+	NSMenu menubar = application.mainMenu();
+	/*
+	* For some reason, NSMenu.cancelTracking() does not dismisses
+	* the menu right away when the menu bar is set in a stacked
+	* event loop. The fix is to use CancelMenuTracking() instead.
+	*/
+//	menubar.cancelTracking();
+	OS.CancelMenuTracking (OS.AcquireRootMenu (), true, 0);
+	int /*long*/ count = menubar.numberOfItems();
+	while (count > 1) {
+		menubar.removeItemAtIndex(count - 1);
+		count--;
+	}
+	//set parent of each item to NULL and add them to menubar
+	if (menu != null) {
+		MenuItem[] items = menu.getItems();
+		for (int i = 0; i < items.length; i++) {
+			MenuItem item = items[i];
+			NSMenuItem nsItem = item.nsItem;
+			nsItem.setMenu(null);
+			menubar.addItem(nsItem);
+			
+			/*
+			* Bug in Cocoa: Calling NSMenuItem.setEnabled() for menu item of a menu bar only
+			* works when the menu bar is the current menu bar.  The underline OS menu does get
+			* enabled/disable when that menu is set later on.  The fix is to toggle the
+			* item enabled state to force the underline menu to be updated.  
+			*/
+			boolean enabled = menu.getEnabled () && item.getEnabled ();
+			nsItem.setEnabled(!enabled);
+			nsItem.setEnabled(enabled);
+		}
+	}
+}
+
+void setModalShell (Shell shell) {
+	if (modalShells == null) modalShells = new Shell [4];
+	int index = 0, length = modalShells.length;
+	while (index < length) {
+		if (modalShells [index] == shell) return;
+		if (modalShells [index] == null) break;
+		index++;
+	}
+	if (index == length) {
+		Shell [] newModalShells = new Shell [length + 4];
+		System.arraycopy (modalShells, 0, newModalShells, 0, length);
+		modalShells = newModalShells;
+	}
+	modalShells [index] = shell;
+	Shell [] shells = getShells ();
+	for (int i=0; i<shells.length; i++) shells [i].updateModal ();
+}
+
+/**
+ * Sets the application defined, display specific data
+ * associated with the receiver, to the argument.
+ * The <em>display specific data</em> is a single,
+ * unnamed field that is stored with every display. 
+ * <p>
+ * Applications may put arbitrary objects in this field. If
+ * the object stored in the display specific data needs to
+ * be notified when the display is disposed of, it is the
+ * application's responsibility provide a
+ * <code>disposeExec()</code> handler which does so.
+ * </p>
+ *
+ * @param data the new display specific data
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #getData()
+ * @see #disposeExec(Runnable)
+ */
+public void setData (Object data) {
+	checkDevice ();
+	this.data = data;
+}
+
+/**
+ * Sets the synchronizer used by the display to be
+ * the argument, which can not be null.
+ *
+ * @param synchronizer the new synchronizer for the display (must not be null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the synchronizer is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_FAILED_EXEC - if an exception occurred while running an inter-thread message</li>
+ * </ul>
+ */
+public void setSynchronizer (Synchronizer synchronizer) {
+	checkDevice ();
+	if (synchronizer == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (synchronizer == this.synchronizer) return;
+	Synchronizer oldSynchronizer;
+	synchronized (Device.class) {
+		oldSynchronizer = this.synchronizer;
+		this.synchronizer = synchronizer;
+	}
+	if (oldSynchronizer != null) {
+		oldSynchronizer.runAsyncMessages(true);
+	}
+}
+
+/**
+ * Causes the user-interface thread to <em>sleep</em> (that is,
+ * to be put in a state where it does not consume CPU cycles)
+ * until an event is received or it is otherwise awakened.
+ *
+ * @return <code>true</code> if an event requiring dispatching was placed on the queue.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #wake
+ */
+public boolean sleep () {
+	checkDevice ();
+	if (getMessageCount () != 0) return true;
+	try {
+		addPool();
+		allowTimers = runAsyncMessages = false;
+		NSRunLoop.currentRunLoop().runMode(OS.NSDefaultRunLoopMode, NSDate.distantFuture());
+		allowTimers = runAsyncMessages = true;
+	} finally {
+		removePool();
+	}
+	return true;
+}
+
+int sourceProc (int info) {
+	return 0;
+}
+
+/**
+ * Causes the <code>run()</code> method of the runnable to
+ * be invoked by the user-interface thread at the next 
+ * reasonable opportunity. The thread which calls this method
+ * is suspended until the runnable completes.  Specifying <code>null</code>
+ * as the runnable simply wakes the user-interface thread.
+ * <p>
+ * Note that at the time the runnable is invoked, widgets 
+ * that have the receiver as their display may have been
+ * disposed. Therefore, it is necessary to check for this
+ * case inside the runnable before accessing the widget.
+ * </p>
+ * 
+ * @param runnable code to run on the user-interface thread or <code>null</code>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_FAILED_EXEC - if an exception occurred when executing the runnable</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #asyncExec
+ */
+public void syncExec (Runnable runnable) {
+	Synchronizer synchronizer;
+	synchronized (Device.class) {
+		if (isDisposed ()) error (SWT.ERROR_DEVICE_DISPOSED);
+		synchronizer = this.synchronizer;
+	}
+	synchronizer.syncExec (runnable);
+}
+
+/**
+ * Causes the <code>run()</code> method of the runnable to
+ * be invoked by the user-interface thread after the specified
+ * number of milliseconds have elapsed. If milliseconds is less
+ * than zero, the runnable is not executed.
+ * <p>
+ * Note that at the time the runnable is invoked, widgets 
+ * that have the receiver as their display may have been
+ * disposed. Therefore, it is necessary to check for this
+ * case inside the runnable before accessing the widget.
+ * </p>
+ *
+ * @param milliseconds the delay before running the runnable
+ * @param runnable code to run on the user-interface thread
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the runnable is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #asyncExec
+ */
+public void timerExec (int milliseconds, Runnable runnable) {
+	checkDevice ();
+	//TODO - remove a timer, reschedule a timer not tested
+	if (runnable == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (timerList == null) timerList = new Runnable [4];
+	if (nsTimers == null) nsTimers = new NSTimer [4];
+	int index = 0;
+	while (index < timerList.length) {
+		if (timerList [index] == runnable) break;
+		index++;
+	}
+	if (index != timerList.length) {
+		NSTimer timer = nsTimers [index];
+		if (timer == null) {
+			timerList [index] = null;
+		} else {
+			if (milliseconds < 0) {
+				timer.invalidate();
+				timer.release();
+				timerList [index] = null;
+				nsTimers [index] = null;
+			} else {
+				timer.setFireDate(NSDate.dateWithTimeIntervalSinceNow (milliseconds / 1000.0));
+			}
+			return;
+		}
+	} 
+	if (milliseconds < 0) return;
+	index = 0;
+	while (index < timerList.length) {
+		if (timerList [index] == null) break;
+		index++;
+	}
+	if (index == timerList.length) {
+		Runnable [] newTimerList = new Runnable [timerList.length + 4];
+		System.arraycopy (timerList, 0, newTimerList, 0, timerList.length);
+		timerList = newTimerList;
+		NSTimer [] newTimerIds = new NSTimer [nsTimers.length + 4];
+		System.arraycopy (nsTimers, 0, newTimerIds, 0, nsTimers.length);
+		nsTimers = newTimerIds;
+	}
+	NSNumber userInfo = NSNumber.numberWithInt(index);
+	NSTimer timer = NSTimer.scheduledTimerWithTimeInterval(milliseconds / 1000.0, timerDelegate, OS.sel_timerProc_, userInfo, false);
+	NSRunLoop.currentRunLoop().addTimer(timer, OS.NSEventTrackingRunLoopMode);
+	timer.retain();
+	if (timer != null) {
+		nsTimers [index] = timer;
+		timerList [index] = runnable;
+	}
+}
+
+int /*long*/ timerProc (int /*long*/ id, int /*long*/ sel, int /*long*/ timerID) {
+	NSTimer timer = new NSTimer (timerID);
+	NSNumber number = new NSNumber(timer.userInfo());
+	int index = number.intValue();
+	if (timerList == null) return 0;
+	if (0 <= index && index < timerList.length) {
+		if (allowTimers) {
+			Runnable runnable = timerList [index];
+			timerList [index] = null;
+			nsTimers [index] = null;
+			if (runnable != null) runnable.run ();
+		} else {
+			nsTimers [index] = null;
+			wakeThread ();
+		}
+	}
+	timer.invalidate();
+	timer.release();
+	return 0;
+}
+
+/**
+ * Forces all outstanding paint requests for the display
+ * to be processed before this method returns.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see Control#update()
+ */
+public void update () {
+	checkDevice ();	
+	Shell [] shells = getShells ();
+	for (int i=0; i<shells.length; i++) {
+		Shell shell = shells [i];
+		if (!shell.isDisposed ()) shell.update (true);
+	}
+}
+
+void updateDefaultButton () {
+	timerExec(hasDefaultButton() ? DEFAULT_BUTTON_INTERVAL : -1, defaultButtonTimer);
+}
+
+void updateQuitMenu () {
+	boolean enabled = true;
+	Shell [] shells = getShells ();
+	int mask = SWT.PRIMARY_MODAL | SWT.APPLICATION_MODAL | SWT.SYSTEM_MODAL;
+	for (int i=0; i<shells.length; i++) {
+		Shell shell = shells [i];
+		if ((shell.style & mask) != 0 && shell.isVisible ()) {
+			enabled = false;
+			break;
+		}
+	}
+	
+	NSMenu mainmenu = application.mainMenu();
+	NSMenuItem appitem = mainmenu.itemAtIndex(0);
+	if (appitem != null) {
+		NSMenu sm = appitem.submenu();
+
+		// Normally this would be sel_terminate_ but we changed it so terminate: doesn't kill the app.
+		int /*long*/ quitIndex = sm.indexOfItemWithTarget(applicationDelegate, OS.sel_quitRequested_);
+		
+		if (quitIndex != -1) {
+			NSMenuItem quitItem = sm.itemAtIndex(quitIndex);
+			quitItem.setEnabled(enabled);
+		}
+	}
+}
+
+
+/**
+ * If the receiver's user-interface thread was <code>sleep</code>ing, 
+ * causes it to be awakened and start running again. Note that this
+ * method may be called from any thread.
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #sleep
+ */
+public void wake () {
+	synchronized (Device.class) {
+		if (isDisposed ()) error (SWT.ERROR_DEVICE_DISPOSED);
+		if (thread == Thread.currentThread ()) return;
+		wakeThread ();
+	}
+}
+
+void wakeThread () {
+	//new pool?
+	NSObject object = new NSObject().alloc().init();
+	object.performSelectorOnMainThread(OS.sel_release, null, false);
+}
+
+Control findControl (boolean checkTrim) {
+	return findControl(checkTrim, null);
+}
+
+Control findControl (boolean checkTrim, NSView[] hitView) {
+	NSView view = null;
+	NSPoint screenLocation = NSEvent.mouseLocation();
+	NSArray windows = application.orderedWindows();
+	for (int i = 0, count = (int)/*64*/windows.count(); i < count && view == null; i++) {
+		NSWindow window = new NSWindow(windows.objectAtIndex(i));
+		NSView contentView = window.contentView();
+		if (contentView != null && OS.NSPointInRect(screenLocation, window.frame())) {
+			NSPoint location = window.convertScreenToBase(screenLocation);
+			view = contentView.hitTest (location);
+			if (view == null && !checkTrim) {
+				view = contentView;
+			}
+			break;
+		}
+	}
+	Control control = null;
+	if (view != null) {
+		do {
+			Widget widget = getWidget (view);
+			if (widget instanceof Control) {
+				control = (Control)widget;
+				break;
+			}
+			view = view.superview();
+		} while (view != null);
+	}
+	if (checkTrim) {
+		if (control != null && control.isTrim (view)) control = null;
+	}
+	if (control != null && hitView != null) hitView[0] = view;
+	return control;
+}
+
+void finishLaunching (int /*long*/ id, int /*long*/ sel) {
+	/* 
+	* [NSApplication finishLaunching] cannot run multiple times otherwise
+	* multiple main menus are added.
+	*/
+	if (launched) return;
+	launched = true;
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	OS.objc_msgSendSuper(super_struct, sel);
+}
+
+void applicationDidBecomeActive (int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
+	checkFocus();
+	checkEnterExit(findControl(true), null, false);
+}
+
+void applicationDidResignActive (int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
+	checkFocus();
+	checkEnterExit(null, null, false);
+}
+
+int /*long*/ applicationNextEventMatchingMask (int /*long*/ id, int /*long*/ sel, int /*long*/ mask, int /*long*/ expiration, int /*long*/ mode, int /*long*/ dequeue) {
+	if (dequeue != 0 && trackingControl != null && !trackingControl.isDisposed()) runDeferredEvents();
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	int /*long*/ result = OS.objc_msgSendSuper(super_struct, sel, mask, expiration, mode, dequeue != 0);
+	if (result != 0) {
+		if (dequeue != 0 && trackingControl != null && !trackingControl.isDisposed()) {
+			applicationSendTrackingEvent(new NSEvent(result), trackingControl);
+		}
+	}
+	return result;
+}
+
+void applicationSendTrackingEvent (NSEvent nsEvent, Control trackingControl) {
+	int type = (int)/*64*/nsEvent.type();
+	switch (type) {
+		case OS.NSLeftMouseDown:
+		case OS.NSRightMouseDown:
+		case OS.NSOtherMouseDown:
+			trackingControl.sendMouseEvent (nsEvent, SWT.MouseDown, true);
+			break;
+		case OS.NSLeftMouseUp:
+		case OS.NSRightMouseUp:
+		case OS.NSOtherMouseUp:
+			checkEnterExit (findControl (true), nsEvent, true);
+			if (trackingControl.isDisposed()) return;
+			trackingControl.sendMouseEvent (nsEvent, SWT.MouseUp, true);
+			break;
+		case OS.NSLeftMouseDragged:
+		case OS.NSRightMouseDragged:
+		case OS.NSOtherMouseDragged:
+			checkEnterExit (trackingControl, nsEvent, true);
+			if (trackingControl.isDisposed()) return;
+			//FALL THROUGH
+		case OS.NSMouseMoved:
+			trackingControl.sendMouseEvent (nsEvent, SWT.MouseMove, true);
+			break;
+	}
+}
+
+void applicationSendEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
+	NSEvent nsEvent = new NSEvent(event);
+	NSWindow window = nsEvent.window ();
+	int type = (int)/*64*/nsEvent.type ();
+	boolean down = false;
+	switch (type) {
+		case OS.NSLeftMouseDown:
+		case OS.NSRightMouseDown:
+		case OS.NSOtherMouseDown:
+			down = true;
+		case OS.NSLeftMouseUp:
+		case OS.NSRightMouseUp:
+		case OS.NSOtherMouseUp:
+		case OS.NSLeftMouseDragged:
+		case OS.NSRightMouseDragged:
+		case OS.NSOtherMouseDragged:
+		case OS.NSMouseMoved:
+		case OS.NSMouseEntered:
+		case OS.NSMouseExited:
+		case OS.NSKeyDown:
+		case OS.NSKeyUp:
+		case OS.NSScrollWheel:
+			if (window != null) {
+				Shell shell = (Shell) getWidget (window.id);
+				if (shell != null) {
+					Shell modalShell = shell.getModalShell ();
+					if (modalShell != null) {
+						if (down) {
+							if (!application.isActive()) {
+								application.activateIgnoringOtherApps(true);
+							}
+							NSRect rect = window.contentRectForFrameRect(window.frame());
+							NSPoint pt = window.convertBaseToScreen(nsEvent.locationInWindow());
+							if (OS.NSPointInRect(pt, rect)) beep ();
+						}
+						return;
+					}
+				}
+			}
+			break;
+	}
+	sendEvent = true;
+	
+	/*
+	 * Feature in Cocoa. The help key triggers context-sensitive help but doesn't get forwarded to the window as a key event.
+	 * If the event is destined for the key window, is the help key, and is an NSKeyDown, send it directly to the window first.
+	 */
+	if (window != null && window.isKeyWindow() && nsEvent.type() == OS.NSKeyDown && (nsEvent.modifierFlags() & OS.NSHelpKeyMask) != 0)	{
+		window.sendEvent(nsEvent);
+	}
+
+	/*
+	 * Feature in Cocoa. NSKeyUp events are not delivered to the window if the command key is down.
+	 * If the event is destined for the key window, and it's a key up and the command key is down, send it directly to the window.
+	 */
+	if (window != null && window.isKeyWindow() && nsEvent.type() == OS.NSKeyUp && (nsEvent.modifierFlags() & OS.NSCommandKeyMask) != 0)	{
+		window.sendEvent(nsEvent);
+	} else {
+		objc_super super_struct = new objc_super ();
+		super_struct.receiver = id;
+		super_struct.super_class = OS.objc_msgSend (id, OS.sel_superclass);
+		OS.objc_msgSendSuper (super_struct, sel, event);
+	}
+	sendEvent = false;
+}
+
+void applicationWillFinishLaunching (int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
+	boolean loaded = false;
+	NSBundle bundle = NSBundle.bundleWithIdentifier(NSString.stringWith("com.apple.JavaVM"));
+	NSDictionary dict = NSDictionary.dictionaryWithObject(applicationDelegate, NSString.stringWith("NSOwner"));
+	NSString path = bundle.pathForResource(NSString.stringWith("DefaultApp"), NSString.stringWith("nib"));
+	if (!loaded) loaded = path != null && NSBundle.loadNibFile(path, dict, 0);
+	if (!loaded) {
+		NSString resourcePath = bundle.resourcePath();
+		path = resourcePath != null ? resourcePath.stringByAppendingString(NSString.stringWith("/English.lproj/DefaultApp.nib")) : null;
+		loaded = path != null && NSBundle.loadNibFile(path, dict, 0);
+	}
+	if (!loaded) {
+		path = NSString.stringWith(System.getProperty("java.home") + "/../Resources/English.lproj/DefaultApp.nib");
+		loaded = path != null && NSBundle.loadNibFile(path, dict, 0);
+	}
+	if (!loaded) {
+		createMainMenu();
+	}
+	//replace %@ with application name
+	NSMenu mainmenu = application.mainMenu();
+	NSMenuItem appitem = mainmenu.itemAtIndex(0);
+	if (appitem != null) {
+		NSString name = getAppName();
+		NSString match = NSString.stringWith("%@");
+		appitem.setTitle(name);
+		NSMenu sm = appitem.submenu();
+		NSArray ia = sm.itemArray();
+		for(int i = 0; i < ia.count(); i++) {
+			NSMenuItem ni = new NSMenuItem(ia.objectAtIndex(i));
+			NSString title = ni.title().stringByReplacingOccurrencesOfString(match, name);
+			ni.setTitle(title);
+		}
+
+		int /*long*/ quitIndex = sm.indexOfItemWithTarget(applicationDelegate, OS.sel_terminate_);
+		
+		if (quitIndex != -1) {
+			NSMenuItem quitItem = sm.itemAtIndex(quitIndex);
+			quitItem.setAction(OS.sel_quitRequested_);
+		}
+	}
+}
+
+static int /*long*/ applicationProc(int /*long*/ id, int /*long*/ sel) {
+	//TODO optimize getting the display
+	Display display = getCurrent ();
+	if (display == null) return 0;
+	if (sel == OS.sel_isRunning) {
+		// #245724: [NSApplication isRunning] must return true to allow the AWT to load correctly.
+		return display.isDisposed() ? 0 : 1;
+	}
+	if (sel == OS.sel_finishLaunching) {
+		display.finishLaunching (id, sel);
+	}
+	return 0;
+}
+
+static int /*long*/ applicationProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	//TODO optimize getting the display
+	Display display = getCurrent ();
+	if (display == null) return 0;
+	NSApplication application = display.application;
+	if (sel == OS.sel_sendEvent_) {
+		display.applicationSendEvent (id, sel, arg0);
+	} else if (sel == OS.sel_applicationWillFinishLaunching_) {
+		display.applicationWillFinishLaunching(id, sel, arg0);
+	} else if (sel == OS.sel_terminate_) {
+		// Do nothing here -- without a definition of sel_terminate we get a warning dumped to the console.
+	} else if (sel == OS.sel_orderFrontStandardAboutPanel_) {
+//		application.orderFrontStandardAboutPanel(application);
+	} else if (sel == OS.sel_hideOtherApplications_) {
+		application.hideOtherApplications(application);
+	} else if (sel == OS.sel_hide_) {
+		application.hide(application);
+	} else if (sel == OS.sel_unhideAllApplications_) {
+		application.unhideAllApplications(application);
+	} else if (sel == OS.sel_quitRequested_) {
+		if (!display.disposing) {
+			Event event = new Event ();
+			display.sendEvent (SWT.Close, event);
+			if (event.doit) {
+				display.dispose();
+			}
+		}
+	} else if (sel == OS.sel_applicationDidBecomeActive_) {
+		display.applicationDidBecomeActive(id, sel, arg0);
+	} else if (sel == OS.sel_applicationDidResignActive_) {
+		display.applicationDidResignActive(id, sel, arg0);
+	}
+	return 0;
+}
+
+static int /*long*/ applicationProc(int /*long*/ id, int /*long*/sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3) {
+	//TODO optimize getting the display
+	Display display = getCurrent ();
+	if (display == null) return 0;
+	if (sel == OS.sel_nextEventMatchingMask_untilDate_inMode_dequeue_) {
+		return display.applicationNextEventMatchingMask(id, sel, arg0, arg1, arg2, arg3);
+	}
+	return 0;
+}
+
+static int /*long*/ dialogProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	int /*long*/ [] jniRef = new int /*long*/ [1];
+	OS.object_getInstanceVariable(id, SWT_OBJECT, jniRef);
+	if (jniRef[0] == 0) return 0;
+	if (sel == OS.sel_changeColor_) {
+		ColorDialog dialog = (ColorDialog)OS.JNIGetObject(jniRef[0]);
+		if (dialog == null) return 0;
+		dialog.changeColor(id, sel, arg0);
+	} else if (sel == OS.sel_changeFont_) {
+		FontDialog dialog = (FontDialog)OS.JNIGetObject(jniRef[0]);
+		if (dialog == null) return 0;
+		dialog.changeFont(id, sel, arg0);
+	} else if (sel == OS.sel_sendSelection_) {
+		FileDialog dialog = (FileDialog)OS.JNIGetObject(jniRef[0]);
+		if (dialog == null) return 0;
+		dialog.sendSelection(id, sel, arg0);
+	} else if (sel == OS.sel_windowWillClose_) {
+		Object object = OS.JNIGetObject(jniRef[0]);
+		if (object instanceof FontDialog) {
+			((FontDialog)object).windowWillClose(id, sel, arg0);
+		} else if (object instanceof ColorDialog) {
+			((ColorDialog)object).windowWillClose(id, sel, arg0);
+		}
+	}
+	return 0;
+}
+
+static int /*long*/ dialogProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
+	int /*long*/ [] jniRef = new int /*long*/ [1];
+	OS.object_getInstanceVariable(id, SWT_OBJECT, jniRef);
+	if (jniRef[0] == 0) return 0;
+	if (sel == OS.sel_panel_shouldShowFilename_) {
+		FileDialog dialog = (FileDialog)OS.JNIGetObject(jniRef[0]);
+		if (dialog == null) return 0;
+		return dialog.panel_shouldShowFilename(id, sel, arg0, arg1);
+	}
+	return 0;
+}
+
+static int /*long*/ dialogProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2) {
+	int /*long*/ [] jniRef = new int /*long*/ [1];
+	OS.object_getInstanceVariable(id, SWT_OBJECT, jniRef);
+	if (jniRef[0] == 0) return 0;
+	if (sel == OS.sel_panelDidEnd_returnCode_contextInfo_) {
+		MessageBox dialog = (MessageBox)OS.JNIGetObject(jniRef[0]);
+		if (dialog == null) return 0;
+		dialog.panelDidEnd_returnCode_contextInfo(id, sel, arg0, arg1, arg2);
+	}
+	return 0;
+}
+
+static int /*long*/ fieldEditorProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	Widget widget = null;
+	NSView view = new NSView (id);
+	do {
+		widget = GetWidget (view.id);
+		if (widget != null) break;
+		view = view.superview ();
+	} while (view != null);
+	if (widget == null) return 0;
+	if (sel == OS.sel_keyDown_) {
+		widget.keyDown (id, sel, arg0);
+	} else if (sel == OS.sel_keyUp_) {
+		widget.keyUp (id, sel, arg0);
+	} else if (sel == OS.sel_flagsChanged_) {
+		widget.flagsChanged(id, sel, arg0);
+	} else if (sel == OS.sel_insertText_) {
+		return widget.insertText (id, sel, arg0) ? 1 : 0;
+	} else if (sel == OS.sel_doCommandBySelector_) {
+		widget.doCommandBySelector (id, sel, arg0);
+	} else if (sel == OS.sel_menuForEvent_) {
+		return widget.menuForEvent (id, sel, arg0);
+	} else if (sel == OS.sel_mouseDown_) {
+		widget.mouseDown(id, sel, arg0);
+	} else if (sel == OS.sel_mouseUp_) {
+		widget.mouseUp(id, sel, arg0);
+	} else if (sel == OS.sel_mouseMoved_) {
+		widget.mouseMoved(id, sel, arg0);
+	} else if (sel == OS.sel_mouseDragged_) {
+		widget.mouseDragged(id, sel, arg0);
+	} else if (sel == OS.sel_mouseEntered_) {
+		widget.mouseEntered(id, sel, arg0);
+	} else if (sel == OS.sel_mouseExited_) {
+		widget.mouseExited(id, sel, arg0);
+	} else if (sel == OS.sel_cursorUpdate_) {
+		widget.cursorUpdate(id, sel, arg0);
+	} else if (sel == OS.sel_rightMouseDown_) {
+		widget.rightMouseDown(id, sel, arg0);
+	} else if (sel == OS.sel_rightMouseDragged_) {
+		widget.rightMouseDragged(id, sel, arg0);
+	} else if (sel == OS.sel_rightMouseUp_) {
+		widget.rightMouseUp(id, sel, arg0);
+	} else if (sel == OS.sel_otherMouseDown_) {
+		widget.otherMouseDown(id, sel, arg0);
+	} else if (sel == OS.sel_otherMouseUp_) {
+		widget.otherMouseUp(id, sel, arg0);
+	} else if (sel == OS.sel_otherMouseDragged_) {
+		widget.otherMouseDragged(id, sel, arg0);
+	}
+	return 0;
+}
+
+static int /*long*/ fieldEditorProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
+	Widget widget = null;
+	NSView view = new NSView (id);
+	do {
+		widget = GetWidget (view.id);
+		if (widget != null) break;
+		view = view.superview ();
+	} while (view != null);
+	if (sel == OS.sel_shouldChangeTextInRange_replacementString_) {
+		return widget.shouldChangeTextInRange_replacementString(id, sel, arg0, arg1) ? 1 : 0;
+	}
+	return 0;
+}
+
+static int /*long*/ windowProc(int /*long*/ id, int /*long*/ sel) {
+	/*
+	* Feature in Cocoa.  In Cocoa, the default button animation is done
+	* in a separate thread that calls drawRect() and isOpaque() from
+	* outside the UI thread.  This means that those methods, and application
+	* code that runs as a result of those methods, must be thread safe.
+	* In SWT, paint events must happen in the UI thread.  The fix is
+	* to detect a non-UI thread and avoid the drawing. Instead, the
+	* default button is animated by a timer.
+	*/
+	if (!NSThread.isMainThread()) {
+		if (sel == OS.sel_isOpaque) {
+			return 1;
+		}
+	}
+	Widget widget = GetWidget(id);
+	if (widget == null) return 0;
+	if (sel == OS.sel_sendSelection) {
+		widget.sendSelection();
+	} else if (sel == OS.sel_sendDoubleSelection) {
+		widget.sendDoubleSelection();
+	} else if (sel == OS.sel_sendVerticalSelection) {
+		widget.sendVerticalSelection();
+	} else if (sel == OS.sel_sendHorizontalSelection) {
+		widget.sendHorizontalSelection();
+	} else if (sel == OS.sel_sendSearchSelection) {
+		widget.sendSearchSelection();
+	} else if (sel == OS.sel_sendCancelSelection) {
+		widget.sendCancelSelection();
+	} else if (sel == OS.sel_acceptsFirstResponder) {
+		return widget.acceptsFirstResponder(id, sel) ? 1 : 0;
+	} else if (sel == OS.sel_becomeFirstResponder) {
+		return widget.becomeFirstResponder(id, sel) ? 1 : 0;
+	} else if (sel == OS.sel_resignFirstResponder) {
+		return widget.resignFirstResponder(id, sel) ? 1 : 0;
+	} else if (sel == OS.sel_isOpaque) {
+		return widget.isOpaque(id, sel) ? 1 : 0;
+	} else if (sel == OS.sel_isFlipped) {
+		return widget.isFlipped(id, sel) ? 1 : 0;
+	} else if (sel == OS.sel_canBecomeKeyView) {
+		return widget.canBecomeKeyView(id,sel) ? 1 : 0;
+	} else if (sel == OS.sel_becomeKeyWindow) {
+		widget.becomeKeyWindow(id, sel);
+	} else if (sel == OS.sel_unmarkText) {
+		//TODO not called?
+	} else if (sel == OS.sel_validAttributesForMarkedText) {
+		return widget.validAttributesForMarkedText (id, sel);
+	} else if (sel == OS.sel_markedRange) {
+		NSRange range = widget.markedRange (id, sel);
+		/* NOTE that this is freed in C */
+		int /*long*/ result = OS.malloc (NSRange.sizeof);
+		OS.memmove (result, range, NSRange.sizeof);
+		return result;
+	} else if (sel == OS.sel_selectedRange) {
+		NSRange range = widget.selectedRange (id, sel);
+		/* NOTE that this is freed in C */
+		int /*long*/ result = OS.malloc (NSRange.sizeof);
+		OS.memmove (result, range, NSRange.sizeof);
+		return result;
+	} else if (sel == OS.sel_cellSize) {
+		NSSize size = widget.cellSize (id, sel);
+		/* NOTE that this is freed in C */
+		int /*long*/ result = OS.malloc (NSSize.sizeof);
+		OS.memmove (result, size, NSSize.sizeof);
+		return result;
+	} else if (sel == OS.sel_hasMarkedText) {
+		return widget.hasMarkedText (id, sel) ? 1 : 0;
+	} else if (sel == OS.sel_canBecomeKeyWindow) {
+		return widget.canBecomeKeyWindow (id, sel) ? 1 : 0;
+	} else if (sel == OS.sel_accessibilityActionNames) {
+		return widget.accessibilityActionNames(id, sel);
+	} else if (sel == OS.sel_accessibilityAttributeNames) {
+		return widget.accessibilityAttributeNames(id, sel);
+	} else if (sel == OS.sel_accessibilityParameterizedAttributeNames) {
+		return widget.accessibilityParameterizedAttributeNames(id, sel);
+	} else if (sel == OS.sel_accessibilityFocusedUIElement) {
+		return widget.accessibilityFocusedUIElement(id, sel);
+	} else if (sel == OS.sel_accessibilityIsIgnored) {
+		return (widget.accessibilityIsIgnored(id, sel) ? 1 : 0);
+	} else if (sel == OS.sel_nextState) {
+		return widget.nextState(id, sel);
+	} else if (sel == OS.sel_resetCursorRects) {
+		widget.resetCursorRects(id, sel);
+	} else if (sel == OS.sel_updateTrackingAreas) {
+		widget.updateTrackingAreas(id, sel);
+	} else if (sel == OS.sel_viewDidMoveToWindow) {
+		widget.viewDidMoveToWindow(id, sel);
+	} else if (sel == OS.sel_image) {
+		return widget.image(id, sel);
+	}
+	return 0;
+}
+
+static int /*long*/ windowProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	/*
+	* Feature in Cocoa.  In Cocoa, the default button animation is done
+	* in a separate thread that calls drawRect() and isOpaque() from
+	* outside the UI thread.  This means that those methods, and application
+	* code that runs as a result of those methods, must be thread safe.
+	* In SWT, paint events must happen in the UI thread.  The fix is
+	* to detect a non-UI thread and avoid the drawing. Instead, the
+	* default button is animated by a timer.
+	*/
+	if (!NSThread.isMainThread()) {
+		if (sel == OS.sel_drawRect_) {
+			return 0;
+		}
+	}
+	if (sel == OS.sel_timerProc_) {
+		//TODO optimize getting the display
+		Display display = getCurrent ();
+		if (display == null) return 0;
+		return display.timerProc (id, sel, arg0);
+	}
+	if (sel == OS.sel_systemSettingsChanged_) {
+		//TODO optimize getting the display
+		Display display = getCurrent ();
+		if (display == null) return 0;
+		display.runSettings = true;
+		return 0;
+	}
+	Widget widget = GetWidget(id);
+	if (widget == null) return 0;
+	if (sel == OS.sel_windowWillClose_) {
+		widget.windowWillClose(id, sel, arg0);
+	} else if (sel == OS.sel_drawRect_) {
+		NSRect rect = new NSRect();
+		OS.memmove(rect, arg0, NSRect.sizeof);
+		widget.drawRect(id, sel, rect);
+	} else if (sel == OS.sel__drawThemeProgressArea_) {
+		widget._drawThemeProgressArea(id, sel, arg0);
+	} else if (sel == OS.sel_setFrameOrigin_) {
+		NSPoint point = new NSPoint();
+		OS.memmove(point, arg0, NSPoint.sizeof);
+		widget.setFrameOrigin(id, sel, point);
+	} else if (sel == OS.sel_setFrameSize_) {
+		NSSize size = new NSSize();
+		OS.memmove(size, arg0, NSSize.sizeof);
+		widget.setFrameSize(id, sel, size);
+	} else if (sel == OS.sel_hitTest_) {
+		NSPoint point = new NSPoint();
+		OS.memmove(point, arg0, NSPoint.sizeof);
+		return widget.hitTest(id, sel, point);
+	} else if (sel == OS.sel_windowShouldClose_) {
+		return widget.windowShouldClose(id, sel, arg0) ? 1 : 0;
+	} else if (sel == OS.sel_mouseDown_) {
+		widget.mouseDown(id, sel, arg0);
+	} else if (sel == OS.sel_keyDown_) {
+		widget.keyDown(id, sel, arg0);
+	} else if (sel == OS.sel_keyUp_) {
+		widget.keyUp(id, sel, arg0);
+	} else if (sel == OS.sel_flagsChanged_) {
+		widget.flagsChanged(id, sel, arg0);
+	} else if (sel == OS.sel_mouseUp_) {
+		widget.mouseUp(id, sel, arg0);
+	} else if (sel == OS.sel_rightMouseDown_) {
+		widget.rightMouseDown(id, sel, arg0);
+	} else if (sel == OS.sel_rightMouseDragged_) {
+		widget.rightMouseDragged(id, sel, arg0);
+	} else if (sel == OS.sel_rightMouseUp_) {
+		widget.rightMouseUp(id, sel, arg0);
+	} else if (sel == OS.sel_otherMouseDown_) {
+		widget.otherMouseDown(id, sel, arg0);
+	} else if (sel == OS.sel_otherMouseUp_) {
+		widget.otherMouseUp(id, sel, arg0);
+	} else if (sel == OS.sel_otherMouseDragged_) {
+		widget.otherMouseDragged(id, sel, arg0);
+	} else if (sel == OS.sel_mouseMoved_) {
+		widget.mouseMoved(id, sel, arg0);
+	} else if (sel == OS.sel_mouseDragged_) {
+		widget.mouseDragged(id, sel, arg0);
+	} else if (sel == OS.sel_mouseEntered_) {
+		widget.mouseEntered(id, sel, arg0);
+	} else if (sel == OS.sel_mouseExited_) {
+		widget.mouseExited(id, sel, arg0);
+	} else if (sel == OS.sel_cursorUpdate_) {
+		widget.cursorUpdate(id, sel, arg0);
+	} else if (sel == OS.sel_menuForEvent_) {
+		return widget.menuForEvent(id, sel, arg0);
+	} else if (sel == OS.sel_noResponderFor_) {
+		widget.noResponderFor(id, sel, arg0);
+	} else if (sel == OS.sel_shouldDelayWindowOrderingForEvent_) {
+		return widget.shouldDelayWindowOrderingForEvent(id, sel, arg0) ? 1 : 0;
+	} else if (sel == OS.sel_acceptsFirstMouse_) {
+		return widget.acceptsFirstMouse(id, sel, arg0) ? 1 : 0;
+	} else if (sel == OS.sel_numberOfRowsInTableView_) {
+		return widget.numberOfRowsInTableView(id, sel, arg0);
+	} else if (sel == OS.sel_tableViewSelectionDidChange_) {
+		widget.tableViewSelectionDidChange(id, sel, arg0);
+	} else if (sel == OS.sel_windowDidResignKey_) {
+		widget.windowDidResignKey(id, sel, arg0);
+	} else if (sel == OS.sel_windowDidBecomeKey_) {
+		widget.windowDidBecomeKey(id, sel, arg0);
+	} else if (sel == OS.sel_windowDidResize_) {
+		widget.windowDidResize(id, sel, arg0);
+	} else if (sel == OS.sel_windowDidMove_) {
+		widget.windowDidMove(id, sel, arg0);
+	} else if (sel == OS.sel_menuWillOpen_) {
+		widget.menuWillOpen(id, sel, arg0);
+	} else if (sel == OS.sel_menuDidClose_) {
+		widget.menuDidClose(id, sel, arg0);
+	} else if (sel == OS.sel_menuNeedsUpdate_) {
+		widget.menuNeedsUpdate(id, sel, arg0);
+	} else if (sel == OS.sel_outlineViewSelectionDidChange_) {
+		widget.outlineViewSelectionDidChange(id, sel, arg0);
+	} else if (sel == OS.sel_sendEvent_) {
+		widget.windowSendEvent(id, sel, arg0);
+	} else if (sel == OS.sel_helpRequested_) {
+		widget.helpRequested(id, sel, arg0);
+	} else if (sel == OS.sel_scrollWheel_) {
+		widget.scrollWheel(id, sel, arg0);
+	} else if (sel == OS.sel_pageDown_) {
+		widget.pageDown(id, sel, arg0);
+	} else if (sel == OS.sel_pageUp_) {
+		widget.pageUp(id, sel, arg0);
+	} else if (sel == OS.sel_textViewDidChangeSelection_) {
+		widget.textViewDidChangeSelection(id, sel, arg0);
+	} else if (sel == OS.sel_textDidChange_) {
+		widget.textDidChange(id, sel, arg0);
+	} else if (sel == OS.sel_textDidEndEditing_) {
+		widget.textDidEndEditing(id, sel, arg0);
+	} else if (sel == OS.sel_attributedSubstringFromRange_) {
+		return widget.attributedSubstringFromRange (id, sel, arg0);
+	} else if (sel == OS.sel_characterIndexForPoint_) {
+		return widget.characterIndexForPoint (id, sel, arg0);
+	} else if (sel == OS.sel_firstRectForCharacterRange_) {
+		NSRect rect = widget.firstRectForCharacterRange (id, sel, arg0);
+		/* NOTE that this is freed in C */
+		int /*long*/ result = OS.malloc (NSRect.sizeof);
+		OS.memmove (result, rect, NSRect.sizeof);
+		return result;
+	} else if (sel == OS.sel_insertText_) {
+		return widget.insertText (id, sel, arg0) ? 1 : 0;
+	} else if (sel == OS.sel_doCommandBySelector_) {
+		widget.doCommandBySelector (id, sel, arg0);
+	} else if (sel == OS.sel_highlightSelectionInClipRect_) {
+		widget.highlightSelectionInClipRect (id, sel, arg0);
+	} else if (sel == OS.sel_reflectScrolledClipView_) {
+		widget.reflectScrolledClipView (id, sel, arg0);
+	} else if (sel == OS.sel_accessibilityHitTest_) {
+		NSPoint point = new NSPoint();
+		OS.memmove(point, arg0, NSPoint.sizeof);
+		return widget.accessibilityHitTest(id, sel, point);
+	} else if (sel == OS.sel_accessibilityAttributeValue_) {
+		return widget.accessibilityAttributeValue(id, sel, arg0);
+	} else if (sel == OS.sel_accessibilityPerformAction_) {
+		widget.accessibilityPerformAction(id, sel, arg0);
+	} else if (sel == OS.sel_accessibilityActionDescription_) {
+		widget.accessibilityActionDescription(id, sel, arg0);
+	} else if (sel == OS.sel_makeFirstResponder_) {
+		return widget.makeFirstResponder(id, sel, arg0) ? 1 : 0;
+	} else if (sel == OS.sel_tableViewColumnDidMove_) {
+		widget.tableViewColumnDidMove(id, sel, arg0);
+	} else if (sel == OS.sel_tableViewColumnDidResize_) {
+		widget.tableViewColumnDidResize(id, sel, arg0);
+	} else if (sel == OS.sel_outlineViewColumnDidMove_) {
+		widget.outlineViewColumnDidMove(id, sel, arg0);
+	} else if (sel == OS.sel_outlineViewColumnDidResize_) {
+		widget.outlineViewColumnDidResize(id, sel, arg0);
+	} else if (sel == OS.sel_setNeedsDisplay_) {
+		widget.setNeedsDisplay(id, sel, arg0 != 0);
+	} else if (sel == OS.sel_setNeedsDisplayInRect_) {
+		widget.setNeedsDisplayInRect(id, sel, arg0);
+	} else if (sel == OS.sel_setImage_) {
+		widget.setImage(id, sel, arg0);
+	} else if (sel == OS.sel_imageRectForBounds_) {
+		NSRect rect = new NSRect();
+		OS.memmove(rect, arg0, NSRect.sizeof);
+		rect = widget.imageRectForBounds(id, sel, rect);
+		/* NOTE that this is freed in C */
+		int /*long*/ result = OS.malloc (NSRect.sizeof);
+		OS.memmove (result, rect, NSRect.sizeof);
+		return result;
+	} else if (sel == OS.sel_titleRectForBounds_) {
+		NSRect rect = new NSRect();
+		OS.memmove(rect, arg0, NSRect.sizeof);
+		rect = widget.titleRectForBounds(id, sel, rect);
+		/* NOTE that this is freed in C */
+		int /*long*/ result = OS.malloc (NSRect.sizeof);
+		OS.memmove (result, rect, NSRect.sizeof);
+		return result;
+	} else if (sel == OS.sel_setObjectValue_) {
+		widget.setObjectValue(id, sel, arg0);
+	} else if (sel == OS.sel_updateOpenGLContext_) {
+		widget.updateOpenGLContext(id, sel, arg0);
+	}
+	return 0;
+}
+
+static int /*long*/ windowProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
+	Widget widget = GetWidget(id);
+	if (widget == null) return 0;
+	if (sel == OS.sel_tabView_willSelectTabViewItem_) {
+		widget.tabView_willSelectTabViewItem(id, sel, arg0, arg1);
+	} else if (sel == OS.sel_tabView_didSelectTabViewItem_) {
+		widget.tabView_didSelectTabViewItem(id, sel, arg0, arg1);
+	} else if (sel == OS.sel_outlineView_isItemExpandable_) {
+		return widget.outlineView_isItemExpandable(id, sel, arg0, arg1) ? 1 : 0;
+	} else if (sel == OS.sel_outlineView_numberOfChildrenOfItem_) {
+		return widget.outlineView_numberOfChildrenOfItem(id, sel, arg0, arg1);
+	} else if (sel == OS.sel_menu_willHighlightItem_) {
+		widget.menu_willHighlightItem(id, sel, arg0, arg1);
+	} else if (sel == OS.sel_setMarkedText_selectedRange_) {
+		widget.setMarkedText_selectedRange (id, sel, arg0, arg1);
+	} else if (sel == OS.sel_drawInteriorWithFrame_inView_) {
+		NSRect rect = new NSRect ();
+		OS.memmove (rect, arg0, NSRect.sizeof);
+		widget.drawInteriorWithFrame_inView (id, sel, rect, arg1);
+	} else if (sel == OS.sel_drawWithExpansionFrame_inView_) {
+		NSRect rect = new NSRect();
+		OS.memmove(rect, arg0, NSRect.sizeof);
+		widget.drawWithExpansionFrame_inView (id, sel, rect, arg1);
+	} else if (sel == OS.sel_accessibilityAttributeValue_forParameter_) {
+		return widget.accessibilityAttributeValue_forParameter(id, sel, arg0, arg1);
+	} else if (sel == OS.sel_tableView_didClickTableColumn_) {
+		widget.tableView_didClickTableColumn (id, sel, arg0, arg1);
+	} else if (sel == OS.sel_outlineView_didClickTableColumn_) {
+		widget.outlineView_didClickTableColumn (id, sel, arg0, arg1);
+	} else if (sel == OS.sel_shouldChangeTextInRange_replacementString_) {
+		return widget.shouldChangeTextInRange_replacementString(id, sel, arg0, arg1) ? 1 : 0;
+	} else if (sel == OS.sel_canDragRowsWithIndexes_atPoint_) {
+		return widget.canDragRowsWithIndexes_atPoint(id, sel, arg0, arg1) ? 1 : 0;
+	} else if (sel == OS.sel_expandItem_expandChildren_) {
+		widget.expandItem_expandChildren(id, sel, arg0, arg1 != 0);
+	} else if (sel == OS.sel_collapseItem_collapseChildren_) {
+		widget.collapseItem_collapseChildren(id, sel, arg0, arg1 != 0);
+	} else if (sel == OS.sel_expansionFrameWithFrame_inView_) {
+		NSRect rect = new NSRect();
+		OS.memmove(rect, arg0, NSRect.sizeof);
+		rect = widget.expansionFrameWithFrame_inView(id, sel, rect, arg1);
+		/* NOTE that this is freed in C */
+		int /*long*/ result = OS.malloc (NSRect.sizeof);
+		OS.memmove (result, rect, NSRect.sizeof);
+		return result;
+	}
+	return 0;
+}
+
+static int /*long*/ windowProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2) {
+	Widget widget = GetWidget(id);
+	if (widget == null) return 0;
+	if (sel == OS.sel_tableView_objectValueForTableColumn_row_) {
+		return widget.tableView_objectValueForTableColumn_row(id, sel, arg0, arg1, arg2);
+	} else if (sel == OS.sel_tableView_shouldEditTableColumn_row_) {
+		return widget.tableView_shouldEditTableColumn_row(id, sel, arg0, arg1, arg2) ? 1 : 0;
+	} else if (sel == OS.sel_textView_clickedOnLink_atIndex_) {
+		 return widget.textView_clickOnLink_atIndex(id, sel, arg0, arg1, arg2) ? 1 : 0;
+	} else if (sel == OS.sel_outlineView_child_ofItem_) {
+		 return widget.outlineView_child_ofItem(id, sel, arg0, arg1, arg2);
+	} else if (sel == OS.sel_outlineView_objectValueForTableColumn_byItem_) {
+		 return widget.outlineView_objectValueForTableColumn_byItem(id, sel, arg0, arg1, arg2);
+	} else if (sel == OS.sel_textView_willChangeSelectionFromCharacterRange_toCharacterRange_) {
+		NSRange range = widget.textView_willChangeSelectionFromCharacterRange_toCharacterRange(id, sel, arg0, arg1, arg2);
+		/* NOTE that this is freed in C */
+		int /*long*/ result = OS.malloc (NSRange.sizeof);
+		OS.memmove (result, range, NSRange.sizeof);
+		return result;
+	} else if (sel == OS.sel_dragSelectionWithEvent_offset_slideBack_) {
+		NSSize offset = new NSSize();
+		OS.memmove(offset, arg0, NSSize.sizeof);
+		return (widget.dragSelectionWithEvent(id, sel, arg0, arg1, arg2) ? 1 : 0);
+	} else if (sel == OS.sel_drawImage_withFrame_inView_) {
+		NSRect rect = new NSRect ();
+		OS.memmove (rect, arg1, NSRect.sizeof);
+		widget.drawImageWithFrameInView (id, sel, arg0, rect, arg2);
+	} else if (sel == OS.sel_hitTestForEvent_inRect_ofView_) {
+		NSRect rect = new NSRect ();
+		OS.memmove (rect, arg1, NSRect.sizeof);
+		return widget.hitTestForEvent (id, sel, arg0, rect, arg2);
+	} else if (sel == OS.sel_tableView_writeRowsWithIndexes_toPasteboard_) {
+		return (widget.tableView_writeRowsWithIndexes_toPasteboard(id, sel, arg0, arg1, arg2) ? 1 : 0);
+	} else if (sel == OS.sel_outlineView_writeItems_toPasteboard_) {
+		return (widget.outlineView_writeItems_toPasteboard(id, sel, arg0, arg1, arg2) ? 1 : 0);
+	}
+	return 0;
+}
+
+static int /*long*/ windowProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ arg3) {
+	Widget widget = GetWidget(id);
+	if (widget == null) return 0;
+	if (sel == OS.sel_tableView_willDisplayCell_forTableColumn_row_) {
+		widget.tableView_willDisplayCell_forTableColumn_row(id, sel, arg0, arg1, arg2, arg3);
+	} else if (sel == OS.sel_outlineView_willDisplayCell_forTableColumn_item_) {
+		widget.outlineView_willDisplayCell_forTableColumn_item(id, sel, arg0, arg1, arg2, arg3);
+	} else  if (sel == OS.sel_outlineView_setObjectValue_forTableColumn_byItem_) {
+		widget.outlineView_setObjectValue_forTableColumn_byItem(id, sel, arg0, arg1, arg2, arg3);
+	} else if (sel == OS.sel_tableView_setObjectValue_forTableColumn_row_) {
+		widget.tableView_setObjectValue_forTableColumn_row(id, sel, arg0, arg1, arg2, arg3);
+	} else if (sel == OS.sel_view_stringForToolTip_point_userData_) {
+		return widget.view_stringForToolTip_point_userData(id, sel, arg0, arg1, arg2, arg3);
+	}
+	return 0;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/FileDialog.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/FileDialog.java
new file mode 100755
index 0000000..6192f94
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/FileDialog.java
@@ -0,0 +1,461 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+ 
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class allow the user to navigate
+ * the file system and select or enter a file name.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>SAVE, OPEN, MULTI</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles SAVE and OPEN may be specified.
+ * </p><p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#filedialog">FileDialog snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class FileDialog extends Dialog {
+	NSSavePanel panel;
+	NSPopUpButton popup;
+	String [] filterNames = new String [0];
+	String [] filterExtensions = new String [0];
+	String [] fileNames = new String[0];	
+	String filterPath = "", fileName = "";
+	int filterIndex = -1;
+	boolean overwrite = false;
+	static final char EXTENSION_SEPARATOR = ';';
+
+/**
+ * Constructs a new instance of this class given only its parent.
+ *
+ * @param parent a shell which will be the parent of the new instance
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ */
+public FileDialog (Shell parent) {
+	this (parent, SWT.APPLICATION_MODAL);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a shell which will be the parent of the new instance
+ * @param style the style of dialog to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ * 
+ * @see SWT#SAVE
+ * @see SWT#OPEN
+ * @see SWT#MULTI
+ */
+public FileDialog (Shell parent, int style) {
+	super (parent, checkStyle (parent, style));
+	if (Display.getSheetEnabled ()) {
+		if (parent != null && (style & SWT.SHEET) != 0) this.style |= SWT.SHEET;
+	}
+	checkSubclass ();
+}
+
+/**
+ * Returns the path of the first file that was
+ * selected in the dialog relative to the filter path, or an
+ * empty string if no such file has been selected.
+ * 
+ * @return the relative path of the file
+ */
+public String getFileName () {
+	return fileName;
+}
+
+/**
+ * Returns a (possibly empty) array with the paths of all files
+ * that were selected in the dialog relative to the filter path.
+ * 
+ * @return the relative paths of the files
+ */
+public String [] getFileNames () {
+	return fileNames;
+}
+
+/**
+ * Returns the file extensions which the dialog will
+ * use to filter the files it shows.
+ *
+ * @return the file extensions filter
+ */
+public String [] getFilterExtensions () {
+	return filterExtensions;
+}
+
+/**
+ * Get the 0-based index of the file extension filter
+ * which was selected by the user, or -1 if no filter
+ * was selected.
+ * <p>
+ * This is an index into the FilterExtensions array and
+ * the FilterNames array.
+ * </p>
+ *
+ * @return index the file extension filter index
+ * 
+ * @see #getFilterExtensions
+ * @see #getFilterNames
+ * 
+ * @since 3.4
+ */
+public int getFilterIndex () {
+	return filterIndex;
+}
+
+/**
+ * Returns the names that describe the filter extensions
+ * which the dialog will use to filter the files it shows.
+ *
+ * @return the list of filter names
+ */
+public String [] getFilterNames () {
+	return filterNames;
+}
+
+/**
+ * Returns the directory path that the dialog will use, or an empty
+ * string if this is not set.  File names in this path will appear
+ * in the dialog, filtered according to the filter extensions.
+ *
+ * @return the directory path string
+ * 
+ * @see #setFilterExtensions
+ */
+public String getFilterPath () {
+	return filterPath;
+}
+
+/**
+ * Returns the flag that the dialog will use to
+ * determine whether to prompt the user for file
+ * overwrite if the selected file already exists.
+ *
+ * @return true if the dialog will prompt for file overwrite, false otherwise
+ * 
+ * @since 3.4
+ */
+public boolean getOverwrite () {
+	return overwrite;
+}
+
+/**
+ * Makes the dialog visible and brings it to the front
+ * of the display.
+ *
+ * @return a string describing the absolute path of the first selected file,
+ *         or null if the dialog was cancelled or an error occurred
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the dialog has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the dialog</li>
+ * </ul>
+ */
+public String open () {
+	String fullPath = null;
+	fileNames = new String [0];
+	int /*long*/ method = 0;
+	int /*long*/ methodImpl = 0;
+	Callback callback = null;
+	if ((style & SWT.SAVE) != 0) {
+		NSSavePanel savePanel = NSSavePanel.savePanel();
+		panel = savePanel;
+		if (!overwrite) {
+			callback = new Callback(this, "_overwriteExistingFileCheck", 3);
+			int /*long*/ proc = callback.getAddress();
+			if (proc == 0) error (SWT.ERROR_NO_MORE_CALLBACKS);
+			method = OS.class_getInstanceMethod(OS.class_NSSavePanel, OS.sel_overwriteExistingFileCheck);
+			if (method != 0) methodImpl = OS.method_setImplementation(method, proc);
+		}
+	} else {
+		NSOpenPanel openPanel = NSOpenPanel.openPanel();
+		openPanel.setAllowsMultipleSelection((style & SWT.MULTI) != 0);
+		panel = openPanel;
+	}
+	panel.setCanCreateDirectories(true);
+	int /*long*/ jniRef = 0;
+	SWTPanelDelegate delegate = null;
+	if (filterExtensions != null && filterExtensions.length != 0) {
+		delegate = (SWTPanelDelegate)new SWTPanelDelegate().alloc().init();
+		jniRef = OS.NewGlobalRef(this);
+		if (jniRef == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+		OS.object_setInstanceVariable(delegate.id, Display.SWT_OBJECT, jniRef);
+		panel.setDelegate(delegate);
+		NSPopUpButton widget = (NSPopUpButton)new NSPopUpButton().alloc();
+		widget.initWithFrame(new NSRect(), false);
+		widget.setTarget(delegate);
+		widget.setAction(OS.sel_sendSelection_);
+		NSMenu menu = widget.menu();
+		menu.setAutoenablesItems(false);
+		for (int i = 0; i < filterExtensions.length; i++) {
+			String str = filterExtensions [i];
+			if (filterNames != null && filterNames.length > i) {
+				str = filterNames [i];
+			}
+			NSMenuItem nsItem = (NSMenuItem)new NSMenuItem().alloc();
+			nsItem.initWithTitle(NSString.stringWith(str), 0, NSString.stringWith(""));
+			menu.addItem(nsItem);
+			nsItem.release();
+		}
+		widget.selectItemAtIndex(0 <= filterIndex && filterIndex < filterExtensions.length ? filterIndex : 0);
+		widget.sizeToFit();
+		panel.setAccessoryView(widget);
+		popup = widget;
+	}
+	panel.setTitle(NSString.stringWith(title != null ? title : ""));
+	NSApplication application = NSApplication.sharedApplication();
+	if (parent != null && (style & SWT.SHEET) != 0) {
+		application.beginSheet(panel, parent.window, null, 0, 0);
+	}
+	NSString dir = filterPath != null ? NSString.stringWith(filterPath) : null;
+	NSString file = fileName != null ? NSString.stringWith(fileName) : null;
+	int /*long*/ response = panel.runModalForDirectory(dir, file);
+	if (parent != null && (style & SWT.SHEET) != 0) {
+		application.endSheet(panel, 0);
+	}
+	if (!overwrite) {
+		if (method != 0) OS.method_setImplementation(method, methodImpl);
+		if (callback != null) callback.dispose();
+	}
+	if (response == OS.NSFileHandlingPanelOKButton) {
+		NSString filename = panel.filename();
+		fullPath = filename.getString();
+		if ((style & SWT.SAVE) == 0) {
+			NSArray filenames = ((NSOpenPanel)panel).filenames();
+			int count = (int)/*64*/filenames.count();
+			fileNames = new String[count];
+			
+			for (int i = 0; i < count; i++) {
+				filename = new NSString(filenames.objectAtIndex(i));
+				NSString filenameOnly = filename.lastPathComponent();
+				NSString pathOnly = filename.stringByDeletingLastPathComponent();
+				
+				if (i == 0) {
+					/* Filter path */
+					filterPath = pathOnly.getString();
+
+					/* File name */
+					fileName = fileNames [0] = filenameOnly.getString();
+				} else {									
+					if (pathOnly.getString().equals (filterPath)) {
+						fileNames [i] = filenameOnly.getString();
+					} else {
+						fileNames [i] = filename.getString();
+					}
+				}
+			}
+		}
+		filterIndex = -1;
+	}
+	if (popup != null) {
+		filterIndex = (int)/*64*/popup.indexOfSelectedItem();
+		panel.setAccessoryView(null);
+		popup.release();
+		popup = null;
+	}
+	if (delegate != null) {
+		panel.setDelegate(null);
+		delegate.release();
+	}
+	if (jniRef != 0) OS.DeleteGlobalRef(jniRef);
+	panel = null;
+	return fullPath;	
+}
+
+int /*long*/ _overwriteExistingFileCheck (int /*long*/ id, int /*long*/ sel, int /*long*/ str) {
+	return 1;
+}
+
+int /*long*/ panel_shouldShowFilename (int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
+	NSString path = new NSString(arg1);
+	if (filterExtensions != null && filterExtensions.length != 0) {
+		NSFileManager manager = NSFileManager.defaultManager();
+		int /*long*/ ptr = OS.malloc(1);
+		boolean found = manager.fileExistsAtPath(path, ptr);
+		byte[] isDirectory = new byte[1];
+		OS.memmove(isDirectory, ptr, 1);
+		OS.free(ptr);
+		if (found) {
+			if (isDirectory[0] != 0) {
+				return 1;
+			} else {
+				NSString ext = path.pathExtension();
+				if (ext != null) {
+					int filterIndex = (int)/*64*/popup.indexOfSelectedItem();
+					String extension = ext.getString();
+					String extensions = filterExtensions [filterIndex];
+					int start = 0, length = extensions.length ();
+					while (start < length) {
+						int index = extensions.indexOf (EXTENSION_SEPARATOR, start);
+						if (index == -1) index = length;
+						String filter = extensions.substring (start, index).trim ();
+						if (filter.equals ("*") || filter.equals ("*.*")) return 1;
+						if (filter.startsWith ("*.")) filter = filter.substring (2);
+						if (filter.toLowerCase ().equals(extension.toLowerCase ())) return 1;
+						start = index + 1;
+					}
+				}
+				return 0;
+			}
+		}
+	}
+	return 1;
+}
+
+void sendSelection (int /*long*/ id, int /*long*/ sel, int /*long*/ arg) {
+	panel.validateVisibleColumns();
+}
+
+/**
+ * Set the initial filename which the dialog will
+ * select by default when opened to the argument,
+ * which may be null.  The name will be prefixed with
+ * the filter path when one is supplied.
+ * 
+ * @param string the file name
+ */
+public void setFileName (String string) {
+	fileName = string;
+}
+
+/**
+ * Set the file extensions which the dialog will
+ * use to filter the files it shows to the argument,
+ * which may be null.
+ * <p>
+ * The strings are platform specific. For example, on
+ * some platforms, an extension filter string is typically
+ * of the form "*.extension", where "*.*" matches all files.
+ * For filters with multiple extensions, use semicolon as
+ * a separator, e.g. "*.jpg;*.png".
+ * </p>
+ *
+ * @param extensions the file extension filter
+ * 
+ * @see #setFilterNames to specify the user-friendly
+ * names corresponding to the extensions
+ */
+public void setFilterExtensions (String [] extensions) {
+	filterExtensions = extensions;
+}
+
+/**
+ * Set the 0-based index of the file extension filter
+ * which the dialog will use initially to filter the files
+ * it shows to the argument.
+ * <p>
+ * This is an index into the FilterExtensions array and
+ * the FilterNames array.
+ * </p>
+ *
+ * @param index the file extension filter index
+ * 
+ * @see #setFilterExtensions
+ * @see #setFilterNames
+ * 
+ * @since 3.4
+ */
+public void setFilterIndex (int index) {
+	filterIndex = index;
+}
+
+/**
+ * Sets the names that describe the filter extensions
+ * which the dialog will use to filter the files it shows
+ * to the argument, which may be null.
+ * <p>
+ * Each name is a user-friendly short description shown for
+ * its corresponding filter. The <code>names</code> array must
+ * be the same length as the <code>extensions</code> array.
+ * </p>
+ *
+ * @param names the list of filter names, or null for no filter names
+ * 
+ * @see #setFilterExtensions
+ */
+public void setFilterNames (String [] names) {
+	filterNames = names;
+}
+
+/**
+ * Sets the directory path that the dialog will use
+ * to the argument, which may be null. File names in this
+ * path will appear in the dialog, filtered according
+ * to the filter extensions. If the string is null,
+ * then the operating system's default filter path
+ * will be used.
+ * <p>
+ * Note that the path string is platform dependent.
+ * For convenience, either '/' or '\' can be used
+ * as a path separator.
+ * </p>
+ *
+ * @param string the directory path
+ * 
+ * @see #setFilterExtensions
+ */
+public void setFilterPath (String string) {
+	filterPath = string;
+}
+
+/**
+ * Sets the flag that the dialog will use to
+ * determine whether to prompt the user for file
+ * overwrite if the selected file already exists.
+ *
+ * @param overwrite true if the dialog will prompt for file overwrite, false otherwise
+ * 
+ * @since 3.4
+ */
+public void setOverwrite (boolean overwrite) {
+	this.overwrite = overwrite;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/FontDialog.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/FontDialog.java
new file mode 100755
index 0000000..df410af
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/FontDialog.java
@@ -0,0 +1,223 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+ 
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class allow the user to select a font
+ * from all available fonts in the system.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class FontDialog extends Dialog {
+	FontData fontData;
+	RGB rgb;
+	boolean selected;
+	int fontID, fontSize;
+
+/**
+ * Constructs a new instance of this class given only its parent.
+ *
+ * @param parent a shell which will be the parent of the new instance
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ */
+public FontDialog (Shell parent) {
+	this (parent, SWT.APPLICATION_MODAL);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a shell which will be the parent of the new instance
+ * @param style the style of dialog to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ */
+public FontDialog (Shell parent, int style) {
+	super (parent, checkStyle (parent, style));
+	checkSubclass ();
+}
+
+void changeFont(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	selected = true;
+}
+
+/**
+ * Returns a FontData object describing the font that was
+ * selected in the dialog, or null if none is available.
+ * 
+ * @return the FontData for the selected font, or null
+ * @deprecated use #getFontList ()
+ */
+public FontData getFontData () {
+	return fontData;
+}
+
+/**
+ * Returns a FontData set describing the font that was
+ * selected in the dialog, or null if none is available.
+ * 
+ * @return the FontData for the selected font, or null
+ * @since 2.1.1
+ */
+public FontData [] getFontList () {
+	if (fontData == null) return null;
+	FontData [] result = new FontData [1];
+	result [0] = fontData;
+	return result;
+}
+
+/**
+ * Returns an RGB describing the color that was selected
+ * in the dialog, or null if none is available.
+ *
+ * @return the RGB value for the selected color, or null
+ *
+ * @see PaletteData#getRGBs
+ * 
+ * @since 2.1
+ */
+public RGB getRGB () {
+	return rgb;
+}
+
+/**
+ * Makes the dialog visible and brings it to the front
+ * of the display.
+ *
+ * @return a FontData object describing the font that was selected,
+ *         or null if the dialog was cancelled or an error occurred
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the dialog has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the dialog</li>
+ * </ul>
+ */
+public FontData open () {
+	Display display = parent != null ? parent.display : Display.getCurrent ();	
+	NSFontPanel panel = NSFontPanel.sharedFontPanel();
+	panel.setTitle(NSString.stringWith(title != null ? title : ""));
+	boolean create = fontData != null;
+	Font font = create ? new Font(display, fontData) : display.getSystemFont();
+	panel.setPanelFont(font.handle, false);
+	SWTPanelDelegate delegate = (SWTPanelDelegate)new SWTPanelDelegate().alloc().init();
+	int /*long*/ jniRef = OS.NewGlobalRef(this);
+	if (jniRef == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	OS.object_setInstanceVariable(delegate.id, Display.SWT_OBJECT, jniRef);
+	panel.setDelegate(delegate);
+	fontData = null;
+	selected = false;
+	panel.orderFront(null);
+	NSApplication.sharedApplication().runModalForWindow(panel);
+	if (selected) {
+		NSFont nsFont = panel.panelConvertFont(font.handle);
+		if (nsFont != null) {
+			fontData = Font.cocoa_new(display, nsFont).getFontData()[0];
+		}
+	}
+	panel.setDelegate(null);
+	delegate.release();
+	OS.DeleteGlobalRef(jniRef);
+	if (create) font.dispose();
+	return fontData;
+}
+
+/**
+ * Sets a FontData object describing the font to be
+ * selected by default in the dialog, or null to let
+ * the platform choose one.
+ * 
+ * @param fontData the FontData to use initially, or null
+ * @deprecated use #setFontList (FontData [])
+ */
+public void setFontData (FontData fontData) {
+	this.fontData = fontData;
+}
+
+/**
+ * Sets the set of FontData objects describing the font to
+ * be selected by default in the dialog, or null to let
+ * the platform choose one.
+ * 
+ * @param fontData the set of FontData objects to use initially, or null
+ *        to let the platform select a default when open() is called
+ *
+ * @see Font#getFontData
+ * 
+ * @since 2.1.1
+ */
+public void setFontList (FontData [] fontData) {
+	if (fontData != null && fontData.length > 0) {
+		this.fontData = fontData [0];
+	} else {
+		this.fontData = null;
+	}
+}
+
+/**
+ * Sets the RGB describing the color to be selected by default
+ * in the dialog, or null to let the platform choose one.
+ *
+ * @param rgb the RGB value to use initially, or null to let
+ *        the platform select a default when open() is called
+ *
+ * @see PaletteData#getRGBs
+ * 
+ * @since 2.1
+ */
+public void setRGB (RGB rgb) {
+	this.rgb = rgb;
+}
+
+void windowWillClose(int /*long*/ id, int /*long*/ sel, int /*long*/ sender) {
+	NSApplication.sharedApplication().stop(null);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Group.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Group.java
new file mode 100755
index 0000000..e5b1dc2
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Group.java
@@ -0,0 +1,241 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class provide an etched border
+ * with an optional title.
+ * <p>
+ * Shadow styles are hints and may not be honoured
+ * by the platform.  To create a group with the
+ * default shadow style for the platform, do not
+ * specify a shadow style.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>SHADOW_ETCHED_IN, SHADOW_ETCHED_OUT, SHADOW_IN, SHADOW_OUT, SHADOW_NONE</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the above styles may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Group extends Composite {
+	NSView contentView;
+	String text = "";
+	
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#SHADOW_ETCHED_IN
+ * @see SWT#SHADOW_ETCHED_OUT
+ * @see SWT#SHADOW_IN
+ * @see SWT#SHADOW_OUT
+ * @see SWT#SHADOW_NONE
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Group (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+static int checkStyle (int style) {
+	style |= SWT.NO_FOCUS;
+	/*
+	* Even though it is legal to create this widget
+	* with scroll bars, they serve no useful purpose
+	* because they do not automatically scroll the
+	* widget's client area.  The fix is to clear
+	* the SWT style.
+	*/
+	return style & ~(SWT.H_SCROLL | SWT.V_SCROLL);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+public Rectangle computeTrim (int x, int y, int width, int height) {
+	checkWidget ();
+	NSBox widget = (NSBox)view;
+	int border = (int)Math.ceil (widget.borderWidth ());
+	NSSize margins = widget.contentViewMargins();
+	NSRect frame = contentView.frame();
+	width += (margins.width + border) * 2;
+	height += (margins.height + border) * 2 + frame.y;
+	return super.computeTrim(x, y, width, height);
+}
+
+NSView contentView () {
+	return contentView;
+}
+
+void createHandle () {
+	state |= THEME_BACKGROUND;
+	NSBox widget = (NSBox)new SWTBox().alloc();
+	widget.init();
+	widget.setTitlePosition(OS.NSNoTitle);
+	NSView contentWidget = (NSView)new SWTView().alloc();
+	contentWidget.init();
+//	contentWidget.setDrawsBackground(false);
+	widget.setContentView(contentWidget);
+	contentView = contentWidget;
+	view = widget;
+}
+
+NSFont defaultNSFont () {
+	return display.boxFont;
+}
+
+void deregister () {
+	super.deregister ();
+	display.removeWidget (contentView);
+	SWTBox box = (SWTBox)view;
+	display.removeWidget (box.titleCell());
+}
+
+void drawBackground (int /*long*/ id, NSGraphicsContext context, NSRect rect) {
+	if (id != view.id) return;
+	fillBackground (view, context, rect, -1);
+}
+
+NSView eventView () {
+	return contentView;
+}
+
+public Rectangle getClientArea () {
+	checkWidget();
+	NSRect rect = contentView.bounds();
+	return new Rectangle((int)rect.x, (int)rect.y, (int)rect.width, (int)rect.height);
+}
+
+String getNameText () {
+	return getText ();
+}
+
+/**
+ * Returns the receiver's text, which is the string that the
+ * is used as the <em>title</em>. If the text has not previously
+ * been set, returns an empty string.
+ *
+ * @return the text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getText () {
+	checkWidget ();
+	return text;
+}
+
+float getThemeAlpha () {
+	return (background != null ? 1 : 0.25f) * parent.getThemeAlpha ();
+}
+
+void register () {
+	super.register ();
+	display.addWidget (contentView, this);
+	SWTBox box = (SWTBox)view;
+	display.addWidget (box.titleCell(), this);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (contentView != null) contentView.release();
+	contentView = null;
+}
+
+void setFont(NSFont font) {
+	((NSBox) view).setTitleFont(font);
+}
+
+void setForeground (float /*double*/ [] color) {
+	NSColor nsColor;
+	if (color == null) {
+		nsColor = NSColor.textColor ();
+	} else {
+		nsColor = NSColor.colorWithDeviceRed (color[0], color[1], color[2], 1);
+	}
+	NSTextFieldCell cell = new NSTextFieldCell (((NSBox)view).titleCell ().id);
+	cell.setTextColor (nsColor);
+}
+
+/**
+ * Sets the receiver's text, which is the string that will
+ * be displayed as the receiver's <em>title</em>, to the argument,
+ * which may not be null. The string may include the mnemonic character.
+ * </p>
+ * Mnemonics are indicated by an '&amp;' that causes the next
+ * character to be the mnemonic.  When the user presses a
+ * key sequence that matches the mnemonic, focus is assigned
+ * to the first child of the group. On most platforms, the
+ * mnemonic appears underlined but may be emphasised in a
+ * platform specific manner.  The mnemonic indicator character
+ * '&amp;' can be escaped by doubling it in the string, causing
+ * a single '&amp;' to be displayed.
+ * </p>
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setText (String string) {
+	checkWidget();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	text = string;
+	char [] buffer = new char [text.length ()];
+	text.getChars (0, buffer.length, buffer, 0);
+	int length = fixMnemonic (buffer);
+	NSBox box = (NSBox)view;
+	box.setTitlePosition(length == 0 ? OS.NSNoTitle : OS.NSAtTop);
+	box.setTitle(NSString.stringWithCharacters(buffer, length));
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/IME.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/IME.java
new file mode 100644
index 0000000..f6c09b0
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/IME.java
@@ -0,0 +1,510 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.widgets;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class represent input method editors.
+ * These are typically in-line pre-edit text areas that allow
+ * the user to compose characters from Far Eastern languages
+ * such as Japanese, Chinese or Korean.
+ * 
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>ImeComposition</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.4
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class IME extends Widget {
+	Canvas parent;
+	int caretOffset;
+	int startOffset;
+	int commitCount;
+	String text;
+	int [] ranges;
+	TextStyle [] styles;
+	
+	static final int UNDERLINE_THICK = 1 << 16;
+	
+/**
+ * Prevents uninitialized instances from being created outside the package.
+ */
+IME () {
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a canvas control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public IME (Canvas parent, int style) {
+	super (parent, style);
+	this.parent = parent;
+	createWidget ();
+}
+
+int /*long*/ attributedSubstringFromRange (int /*long*/ id, int /*long*/ sel, int /*long*/ rangePtr) {
+	Event event = new Event ();
+	event.detail = SWT.COMPOSITION_SELECTION;
+	sendEvent (SWT.ImeComposition, event);
+	NSRange range = new NSRange ();
+	OS.memmove (range, rangePtr, NSRange.sizeof);
+	int start = (int)/*64*/range.location;
+	int end = (int)/*64*/(range.location + range.length);
+	if (event.start <= start && start <= event.end && event.start <= end && end <= event.end) {
+		NSString str = NSString.stringWith (event.text.substring(start - event.start, end - event.start));
+		NSAttributedString attriStr = ((NSAttributedString)new NSAttributedString().alloc()).initWithString(str, null);
+		attriStr.autorelease ();
+		return attriStr.id;
+	}
+	return 0;
+}
+
+int /*long*/ characterIndexForPoint (int /*long*/ id, int /*long*/ sel, int /*long*/ point) {
+	if (!isInlineEnabled ()) return OS.NSNotFound;
+	NSPoint pt = new NSPoint ();
+	OS.memmove (pt, point, NSPoint.sizeof);
+	NSView view = parent.view;
+	pt = view.window ().convertScreenToBase (pt);
+	pt = view.convertPoint_fromView_ (pt, null);
+	Event event = new Event ();
+	event.detail = SWT.COMPOSITION_OFFSET;
+	event.x = (int) pt.x;
+	event.y = (int) pt.y;
+	sendEvent (SWT.ImeComposition, event);
+	int offset = event.index + event.count;
+	return offset != -1 ? offset : OS.NSNotFound;
+}
+
+void createWidget () {
+	text = "";
+	startOffset = -1;
+	if (parent.getIME () == null) {
+		parent.setIME (this);
+	}
+}
+
+NSRect firstRectForCharacterRange(int /*long*/ id, int /*long*/ sel, int /*long*/ range) {
+	NSRect rect = new NSRect ();
+	Caret caret = parent.caret;
+	if (caret != null) {
+		NSView view = parent.view;
+		NSPoint pt = new NSPoint ();
+		pt.x = caret.x;
+		pt.y = caret.y + caret.height;
+		pt = view.convertPoint_toView_ (pt, null);
+		pt = view.window ().convertBaseToScreen (pt);
+		rect.x = pt.x;
+		rect.y = pt.y;
+		rect.width = caret.width;
+		rect.height = caret.height;
+	}
+	return rect;
+}
+
+/**
+ * Returns the offset of the caret from the start of the document.
+ * The caret is within the current composition.
+ *
+ * @return the caret offset
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getCaretOffset () {
+	checkWidget ();
+	return startOffset + caretOffset;
+}
+
+/**
+ * Returns the commit count of the composition.  This is the
+ * number of characters that have been composed.  When the
+ * commit count is equal to the length of the composition
+ * text, then the in-line edit operation is complete.
+ * 
+ * @return the commit count
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see IME#getText
+ */
+public int getCommitCount () {
+	checkWidget ();
+	return commitCount;
+}
+
+/**
+ * Returns the offset of the composition from the start of the document.
+ * This is the start offset of the composition within the document and
+ * in not changed by the input method editor itself during the in-line edit
+ * session.
+ *
+ * @return the offset of the composition
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getCompositionOffset () {
+	checkWidget ();
+	return startOffset;
+}
+
+/**
+ * Returns the ranges for the style that should be applied during the
+ * in-line edit session.
+ * <p>
+ * The ranges array contains start and end pairs.  Each pair refers to
+ * the corresponding style in the styles array.  For example, the pair
+ * that starts at ranges[n] and ends at ranges[n+1] uses the style
+ * at styles[n/2] returned by <code>getStyles()</code>.
+ * </p>
+ * @return the ranges for the styles
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see IME#getStyles
+ */
+public int [] getRanges () {
+	checkWidget ();
+	if (ranges == null) return new int [0];
+	int [] result = new int [ranges.length];
+	for (int i = 0; i < result.length; i++) {
+		result [i] = ranges [i] + startOffset; 
+	}
+	return result;
+}
+
+/**
+ * Returns the styles for the ranges.
+ * <p>
+ * The ranges array contains start and end pairs.  Each pair refers to
+ * the corresponding style in the styles array.  For example, the pair
+ * that starts at ranges[n] and ends at ranges[n+1] uses the style
+ * at styles[n/2].
+ * </p>
+ * 
+ * @return the ranges for the styles
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see IME#getRanges
+ */
+public TextStyle [] getStyles () {
+	checkWidget ();
+	if (styles == null) return new TextStyle [0];
+	TextStyle [] result = new TextStyle [styles.length];
+	System.arraycopy (styles, 0, result, 0, styles.length);
+	return result;
+}
+
+TextStyle getStyle (NSDictionary attribs) {
+	NSArray keys = attribs.allKeys ();
+	int /*long*/ count = keys.count ();
+	TextStyle style = new TextStyle ();
+	for (int j = 0; j < count; j++) {
+		NSString key = new NSString (keys.objectAtIndex (j));
+		if (key.isEqualTo (OS.NSBackgroundColorAttributeName)) {
+			NSColor color = new NSColor (attribs.objectForKey (key)).colorUsingColorSpaceName (OS.NSCalibratedRGBColorSpace);
+			float /*double*/ [] rgbColor = new float /*double*/ []{color.redComponent(), color.greenComponent(), color.blueComponent(), color.alphaComponent()};
+			style.background = Color.cocoa_new (display, rgbColor);
+		} else if (key.isEqualTo (OS.NSForegroundColorAttributeName)) {
+			NSColor color = new NSColor (attribs.objectForKey (key)).colorUsingColorSpaceName (OS.NSCalibratedRGBColorSpace);
+			float /*double*/ [] rgbColor = new float /*double*/ []{color.redComponent(), color.greenComponent(), color.blueComponent(), color.alphaComponent()};
+			style.foreground = Color.cocoa_new (display, rgbColor);
+		} else if (key.isEqualTo (OS.NSUnderlineColorAttributeName)) {
+			NSColor color = new NSColor (attribs.objectForKey (key)).colorUsingColorSpaceName (OS.NSCalibratedRGBColorSpace);
+			float /*double*/ [] rgbColor = new float /*double*/ []{color.redComponent(), color.greenComponent(), color.blueComponent(), color.alphaComponent()};
+			style.underlineColor = Color.cocoa_new (display, rgbColor);
+		} else if (key.isEqualTo (OS.NSUnderlineStyleAttributeName)) {
+			NSNumber value = new NSNumber (attribs.objectForKey (key));
+			switch (value.intValue ()) {
+				case OS.NSUnderlineStyleSingle: style.underlineStyle = SWT.UNDERLINE_SINGLE; break;
+				case OS.NSUnderlineStyleDouble: style.underlineStyle = SWT.UNDERLINE_DOUBLE; break;
+				case OS.NSUnderlineStyleThick: style.underlineStyle = UNDERLINE_THICK; break;
+			}
+			style.underline = value.intValue () != OS.NSUnderlineStyleNone;
+		} else if (key.isEqualTo (OS.NSStrikethroughColorAttributeName)) {
+			NSColor color = new NSColor (attribs.objectForKey (key)).colorUsingColorSpaceName (OS.NSCalibratedRGBColorSpace);
+			float /*double*/ [] rgbColor = new float /*double*/ []{color.redComponent(), color.greenComponent(), color.blueComponent(), color.alphaComponent()};
+			style.strikeoutColor = Color.cocoa_new (display, rgbColor);
+		} else if (key.isEqualTo (OS.NSStrikethroughStyleAttributeName)) {
+			NSNumber value = new NSNumber (attribs.objectForKey (key));
+			style.strikeout = value.intValue () != OS.NSUnderlineStyleNone;
+		} else if (key.isEqualTo (OS.NSFontAttributeName)) {
+			NSFont font = new NSFont (attribs.objectForKey (key));
+			font.retain();
+			style.font = Font.cocoa_new (display, font);
+		} 
+	}
+	return style;
+}
+
+/**
+ * Returns the composition text.
+ * <p>
+ * The text for an IME is the characters in the widget that
+ * are in the current composition. When the commit count is
+ * equal to the length of the composition text, then the
+ * in-line edit operation is complete.
+ * </p>
+ *
+ * @return the widget text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getText () {
+	checkWidget ();
+	return text;
+}
+
+/**
+ * Returns <code>true</code> if the caret should be wide, and
+ * <code>false</code> otherwise.  In some languages, for example
+ * Korean, the caret is typically widened to the width of the
+ * current character in the in-line edit session.
+ * 
+ * @return the wide caret state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getWideCaret() {
+	return false; 
+}
+
+boolean hasMarkedText (int /*long*/ id, int /*long*/ sel) {
+	return text.length () != 0;
+}
+
+boolean insertText (int /*long*/ id, int /*long*/ sel, int /*long*/ string) {
+	if (startOffset == -1) return true;
+	NSString str = new NSString (string);
+	if (str.isKindOfClass (OS.objc_getClass ("NSAttributedString"))) {
+		str = new NSAttributedString (string).string ();
+	}
+	int length = (int)/*64*/str.length ();
+	int end = startOffset + text.length ();
+	resetStyles ();
+	caretOffset = commitCount = length;
+	Event event = new Event ();
+	event.detail = SWT.COMPOSITION_CHANGED;
+	event.start = startOffset;
+	event.end = end;
+	event.text = text = str.getString();
+	sendEvent (SWT.ImeComposition, event);
+	text = "";
+	caretOffset = commitCount = 0;
+	startOffset = -1;
+	return event.doit;
+}
+
+boolean isInlineEnabled () {
+	return hooks (SWT.ImeComposition);
+}
+
+NSRange markedRange (int /*long*/ id, int /*long*/ sel) {
+	NSRange range = new NSRange ();
+	if (startOffset != -1) {
+		range.location = startOffset;
+		range.length = text.length ();
+	} else {
+		range.location = OS.NSNotFound;
+	}
+	return range;
+}
+
+void resetStyles () {
+	if (styles != null) {
+		for (int i = 0; i < styles.length; i++) {
+			TextStyle style = styles [i];
+			Font font = style.font;
+			if (font != null) font.handle.release ();
+		}
+	}
+	styles = null;
+	ranges = null;
+}
+
+void releaseParent () {
+	super.releaseParent ();
+	if (this == parent.getIME ()) parent.setIME (null);
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	parent = null;
+	text = null;
+	resetStyles ();
+}
+
+NSRange selectedRange (int /*long*/ id, int /*long*/ sel) {
+	Event event = new Event ();
+	event.detail = SWT.COMPOSITION_SELECTION;
+	sendEvent (SWT.ImeComposition, event);
+	NSRange range = new NSRange ();
+	range.location = event.start;
+	range.length = event.text.length ();
+	return range;
+}
+
+/**
+ * Sets the offset of the composition from the start of the document.
+ * This is the start offset of the composition within the document and
+ * in not changed by the input method editor itself during the in-line edit
+ * session but may need to be changed by clients of the IME.  For example,
+ * if during an in-line edit operation, a text editor inserts characters
+ * above the IME, then the IME must be informed that the composition
+ * offset has changed.
+ *
+ * @param offset the offset of the composition
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setCompositionOffset (int offset) {
+	checkWidget ();
+	if (offset < 0) return;
+	if (startOffset != -1) {
+		startOffset = offset;
+	}
+}
+
+boolean setMarkedText_selectedRange (int /*long*/ id, int /*long*/ sel, int /*long*/ string, int /*long*/ selRange) {
+	if (!isInlineEnabled ()) return true;
+	resetStyles ();
+	caretOffset = commitCount = 0;
+	int end = startOffset + text.length ();
+	if (startOffset == -1) {
+		Event event = new Event ();
+		event.detail = SWT.COMPOSITION_SELECTION;
+		sendEvent (SWT.ImeComposition, event);
+		startOffset = event.start;
+		end = event.end;
+	}
+	NSString str = new NSString (string);
+	if (str.isKindOfClass (OS.objc_getClass ("NSAttributedString"))) {
+		NSAttributedString attribStr = new NSAttributedString (string);
+		str = attribStr.string ();
+		int length = (int)/*64*/str.length ();
+		styles = new TextStyle [length];
+		ranges = new int [length * 2];
+		NSRange rangeLimit = new NSRange (), effectiveRange = new NSRange ();
+		rangeLimit.length = length;
+		int rangeCount = 0;
+		int /*long*/ ptr = OS.malloc (NSRange.sizeof);
+		for (int i = 0; i < length;) {
+			NSDictionary attribs = attribStr.attributesAtIndex(i, ptr, rangeLimit);
+			OS.memmove (effectiveRange, ptr, NSRange.sizeof);
+			i = (int)/*64*/(effectiveRange.location + effectiveRange.length);
+			ranges [rangeCount * 2] = (int)/*64*/effectiveRange.location;
+			ranges [rangeCount * 2 + 1] = (int)/*64*/(effectiveRange.location + effectiveRange.length - 1);
+			styles [rangeCount++] = getStyle (attribs);
+		}
+		OS.free (ptr);
+		if (rangeCount != styles.length) {
+			TextStyle [] newStyles = new TextStyle [rangeCount];
+			System.arraycopy (styles, 0, newStyles, 0, newStyles.length);
+			styles = newStyles;
+			int [] newRanges = new int [rangeCount * 2];
+			System.arraycopy (ranges, 0, newRanges, 0, newRanges.length);
+			ranges = newRanges;
+		}
+	}
+	int length = (int)/*64*/str.length ();
+	if (ranges == null && length > 0) {
+		styles = new TextStyle []{getStyle (display.markedAttributes)};
+		ranges = new int[]{0, length - 1};
+	}
+	NSRange range = new NSRange ();
+	OS.memmove (range, selRange, NSRange.sizeof);
+	caretOffset = (int)/*64*/range.location;
+	Event event = new Event ();
+	event.detail = SWT.COMPOSITION_CHANGED;
+	event.start = startOffset;
+	event.end = end;
+	event.text = text = str.getString();
+	sendEvent (SWT.ImeComposition, event);
+	if (isDisposed ()) return false;
+	if (text.length () == 0) {
+		Shell s = parent.getShell ();
+		s.keyInputHappened = true;
+		startOffset = -1;
+		resetStyles ();
+	}
+	return true;
+}
+
+int /*long*/ validAttributesForMarkedText (int /*long*/ id, int /*long*/ sel) {
+	NSMutableArray attribs = NSMutableArray.arrayWithCapacity (6);
+	attribs.addObject (new NSString (OS.NSForegroundColorAttributeName ()));
+	attribs.addObject (new NSString (OS.NSBackgroundColorAttributeName ()));
+	attribs.addObject (new NSString (OS.NSUnderlineStyleAttributeName ()));
+	attribs.addObject (new NSString (OS.NSUnderlineColorAttributeName ()));
+	attribs.addObject (new NSString (OS.NSStrikethroughStyleAttributeName ()));
+	attribs.addObject (new NSString (OS.NSStrikethroughColorAttributeName ()));
+	return attribs.id;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Label.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Label.java
new file mode 100755
index 0000000..2afd162
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Label.java
@@ -0,0 +1,521 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.accessibility.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class represent a non-selectable
+ * user interface object that displays a string or image.
+ * When SEPARATOR is specified, displays a single
+ * vertical or horizontal line.
+ * <p>
+ * Shadow styles are hints and may not be honored
+ * by the platform.  To create a separator label
+ * with the default shadow style for the platform,
+ * do not specify a shadow style.
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>SEPARATOR, HORIZONTAL, VERTICAL</dd>
+ * <dd>SHADOW_IN, SHADOW_OUT, SHADOW_NONE</dd>
+ * <dd>CENTER, LEFT, RIGHT, WRAP</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of SHADOW_IN, SHADOW_OUT and SHADOW_NONE may be specified.
+ * SHADOW_NONE is a HINT. Only one of HORIZONTAL and VERTICAL may be specified.
+ * Only one of CENTER, LEFT and RIGHT may be specified.
+ * </p><p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#label">Label snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Label extends Control {
+	String text;
+	Image image;
+	boolean isImage;
+	NSTextField textView;
+	NSImageView imageView;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#SEPARATOR
+ * @see SWT#HORIZONTAL
+ * @see SWT#VERTICAL
+ * @see SWT#SHADOW_IN
+ * @see SWT#SHADOW_OUT
+ * @see SWT#SHADOW_NONE
+ * @see SWT#CENTER
+ * @see SWT#LEFT
+ * @see SWT#RIGHT
+ * @see SWT#WRAP
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Label (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+int /*long*/ accessibilityAttributeNames(int /*long*/ id, int /*long*/ sel) {
+	if (accessible != null) {		
+		if ((textView != null && (id == textView.id || id == textView.cell().id)) || (imageView != null && (id == imageView.id || id == imageView.cell().id))) {
+			// See if the accessible will override or augment the standard list.
+			// Help, title, and description can be overridden.
+			NSMutableArray extraAttributes = NSMutableArray.arrayWithCapacity(3);
+			extraAttributes.addObject(OS.NSAccessibilityHelpAttribute);
+			extraAttributes.addObject(OS.NSAccessibilityDescriptionAttribute);
+			extraAttributes.addObject(OS.NSAccessibilityTitleAttribute);
+
+			for (int i = (int)/*64*/extraAttributes.count() - 1; i >= 0; i--) {
+				NSString attribute = new NSString(extraAttributes.objectAtIndex(i).id);
+				if (accessible.internal_accessibilityAttributeValue(attribute, ACC.CHILDID_SELF) == null) {
+					extraAttributes.removeObjectAtIndex(i);
+				}
+			}
+
+			if (extraAttributes.count() > 0) {
+				int /*long*/ superResult = super.accessibilityAttributeNames(id, sel);
+				NSArray baseAttributes = new NSArray(superResult);
+				NSMutableArray mutableAttributes = NSMutableArray.arrayWithCapacity(baseAttributes.count() + 1);
+				mutableAttributes.addObjectsFromArray(baseAttributes);
+				
+				for (int i = 0; i < extraAttributes.count(); i++) {
+					id currAttribute = extraAttributes.objectAtIndex(i);
+					if (!mutableAttributes.containsObject(currAttribute)) {
+						mutableAttributes.addObject(currAttribute);
+					}
+				}
+				
+				return mutableAttributes.id;
+			}
+		}
+	}
+
+	return super.accessibilityAttributeNames(id, sel);
+}
+
+boolean accessibilityIsIgnored(int /*long*/ id, int /*long*/ sel) {
+	if (id == view.id) return true;
+	return super.accessibilityIsIgnored(id, sel);	
+}
+
+void addRelation (Control control) {
+	if (!control.isDescribedByLabel ()) return;
+	
+	if (textView != null) {
+		NSObject accessibleElement = control.focusView();
+		
+		if (accessibleElement instanceof NSControl) {
+			NSControl viewAsControl = (NSControl)accessibleElement;
+			if (viewAsControl.cell() != null) accessibleElement = viewAsControl.cell();
+		}
+		
+		accessibleElement.accessibilitySetOverrideValue(textView.cell(), OS.NSAccessibilityTitleUIElementAttribute);
+		NSArray controlArray = NSArray.arrayWithObject(accessibleElement);
+		textView.cell().accessibilitySetOverrideValue(controlArray, OS.NSAccessibilityServesAsTitleForUIElementsAttribute);
+	}
+}
+
+static int checkStyle (int style) {
+	style |= SWT.NO_FOCUS;
+	if ((style & SWT.SEPARATOR) != 0) {
+		style = checkBits (style, SWT.VERTICAL, SWT.HORIZONTAL, 0, 0, 0, 0);
+		return checkBits (style, SWT.SHADOW_OUT, SWT.SHADOW_IN, SWT.SHADOW_NONE, 0, 0, 0);
+	} 
+	return checkBits (style, SWT.LEFT, SWT.CENTER, SWT.RIGHT, 0, 0, 0);
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget();
+	int width = DEFAULT_WIDTH;
+	int height = DEFAULT_HEIGHT;
+	if ((style & SWT.SEPARATOR) != 0) {
+		float /*double*/ lineWidth = ((NSBox)view).borderWidth ();
+		if ((style & SWT.HORIZONTAL) != 0) {
+			height = (int)Math.ceil (lineWidth * 2);
+		} else {
+			width = (int)Math.ceil (lineWidth * 2);
+		}
+		if (wHint != SWT.DEFAULT) width = wHint;
+		if (hHint != SWT.DEFAULT) height = hHint;
+		int border = getBorderWidth ();
+		width += border * 2; height += border * 2;
+		return new Point (width, height);
+	}
+	if (isImage) {
+		if (image != null) {
+			NSImage nsimage = image.handle;
+			NSSize size = nsimage.size ();
+			width = (int)size.width;
+			height = (int)size.height;
+		} else {
+			width = height = 0;
+		}
+	} else {
+		NSSize size = null;
+		if ((style & SWT.WRAP) != 0 && wHint != SWT.DEFAULT) {
+			NSRect rect = new NSRect ();
+			rect.width = wHint;
+			rect.height = hHint != SWT.DEFAULT ? hHint : Float.MAX_VALUE;
+			size = textView.cell ().cellSizeForBounds (rect);
+		} else {
+			size = textView.cell ().cellSize ();
+		}
+		width = (int)Math.ceil (size.width);
+		height = (int)Math.ceil (size.height);
+	}
+	if (wHint != SWT.DEFAULT) width = wHint;
+	if (hHint != SWT.DEFAULT) height = hHint;
+	return new Point (width, height);
+}
+
+void createHandle () {
+	state |= THEME_BACKGROUND;
+	NSBox widget = (NSBox)new SWTBox().alloc();
+	widget.init();
+	widget.setTitle(NSString.stringWith(""));
+	if ((style & SWT.SEPARATOR) != 0) {
+		widget.setBoxType(OS.NSBoxSeparator);
+		NSView child = (NSView) new SWTView().alloc().init();
+		widget.setContentView(child);
+		child.release();
+	} else {
+		widget.setBorderType(OS.NSNoBorder);
+		widget.setBorderWidth (0);
+		widget.setBoxType (OS.NSBoxCustom);
+		NSSize offsetSize = new NSSize ();
+		widget.setContentViewMargins (offsetSize);
+
+		NSImageView imageWidget = (NSImageView) new SWTImageView ().alloc ();
+		imageWidget.init();
+		imageWidget.setImageScaling (OS.NSScaleNone);
+		
+		NSTextField textWidget = (NSTextField)new SWTTextField().alloc();
+		textWidget.init();
+		textWidget.setBordered(false);
+		textWidget.setEditable(false);
+		textWidget.setDrawsBackground(false);
+		NSTextFieldCell cell = new NSTextFieldCell(textWidget.cell());
+		cell.setWraps ((style & SWT.WRAP) != 0);
+		
+		widget.addSubview(imageWidget);
+		widget.addSubview(textWidget);
+		widget.setContentView(textWidget);
+		
+		imageView = imageWidget;
+		textView = textWidget;
+		_setAlignment();
+	}
+	view = widget;
+}
+
+void createWidget() {
+	text = "";
+	super.createWidget ();
+}
+
+NSAttributedString createString() {
+	NSAttributedString attribStr = createString(text, null, foreground, (style & SWT.WRAP) == 0 ? style : 0, true, true);
+	attribStr.autorelease();
+	return attribStr;
+}
+
+NSFont defaultNSFont () {
+	return display.textFieldFont;
+}
+
+void deregister () {
+	super.deregister ();
+	if (textView != null) {
+		display.removeWidget(textView);
+		display.removeWidget(textView.cell());
+	}
+	if (imageView != null) {
+		display.removeWidget (imageView);
+		display.removeWidget (imageView.cell());
+	}
+}
+
+NSView eventView () {
+	return ((NSBox)view).contentView();
+}
+
+/**
+ * Returns a value which describes the position of the
+ * text or image in the receiver. The value will be one of
+ * <code>LEFT</code>, <code>RIGHT</code> or <code>CENTER</code>
+ * unless the receiver is a <code>SEPARATOR</code> label, in 
+ * which case, <code>NONE</code> is returned.
+ *
+ * @return the alignment 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getAlignment () {
+	checkWidget();
+	if ((style & SWT.SEPARATOR) != 0) return SWT.LEFT;
+	if ((style & SWT.CENTER) != 0) return SWT.CENTER;
+	if ((style & SWT.RIGHT) != 0) return SWT.RIGHT;
+	return SWT.LEFT;
+}
+
+/**
+ * Returns the receiver's image if it has one, or null
+ * if it does not.
+ *
+ * @return the receiver's image
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Image getImage () {
+	checkWidget();
+	return image;
+}
+
+String getNameText () {
+	return getText ();
+}
+
+/**
+ * Returns the receiver's text, which will be an empty
+ * string if it has never been set or if the receiver is
+ * a <code>SEPARATOR</code> label.
+ *
+ * @return the receiver's text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getText () {
+	checkWidget();
+	if ((style & SWT.SEPARATOR) != 0) return "";
+	return text;
+}
+
+boolean isDescribedByLabel () {
+	return false;
+}
+
+void register () {
+	super.register ();
+	if (textView != null) {
+		display.addWidget (textView, this);
+		display.addWidget (textView.cell(), this);
+	}
+	if (imageView != null) {
+		display.addWidget (imageView, this);
+		display.addWidget (imageView.cell(), this);
+	}
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (textView != null) textView.release();
+	if (imageView != null) imageView.release();
+	textView = null;
+	imageView = null;
+}
+
+/*
+ * Remove "Labeled by" relations from the receiver.
+ */
+void removeRelation () {
+	if (textView != null) {
+		textView.cell().accessibilitySetOverrideValue(null, OS.NSAccessibilityServesAsTitleForUIElementsAttribute);
+	}
+}
+
+/**
+ * Controls how text and images will be displayed in the receiver.
+ * The argument should be one of <code>LEFT</code>, <code>RIGHT</code>
+ * or <code>CENTER</code>.  If the receiver is a <code>SEPARATOR</code>
+ * label, the argument is ignored and the alignment is not changed.
+ *
+ * @param alignment the new alignment 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setAlignment (int alignment) {
+	checkWidget();
+	if ((style & SWT.SEPARATOR) != 0) return;
+	if ((alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER)) == 0) return;
+	style &= ~(SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+	style |= alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+	_setAlignment();
+}
+
+void updateBackground () {
+	if ((style & SWT.SEPARATOR) != 0) return;
+	NSColor nsColor = null;
+	if (backgroundImage != null) {
+		nsColor = NSColor.colorWithPatternImage(backgroundImage.handle);
+	} else if (background != null) {
+		nsColor = NSColor.colorWithDeviceRed(background[0], background[1], background[2], background[3]);
+	} else {
+		nsColor = NSColor.clearColor();
+	}
+	((NSBox)view).setFillColor(nsColor);
+}
+
+void _setAlignment() {
+	if (image != null) {
+		if ((style & SWT.RIGHT) != 0) imageView.setImageAlignment(OS.NSImageAlignRight);
+		if ((style & SWT.LEFT) != 0) imageView.setImageAlignment(OS.NSImageAlignLeft);
+		if ((style & SWT.CENTER) != 0) imageView.setImageAlignment(OS.NSImageAlignCenter);
+	}
+	if (text != null) {
+		NSCell cell = new NSCell(textView.cell());
+		cell.setAttributedStringValue(createString());
+	}
+}
+
+void setFont(NSFont font) {
+	if (textView != null) {
+		NSCell cell = new NSCell(textView.cell());
+		cell.setAttributedStringValue(createString());
+		textView.setFont (font);
+	}
+}
+
+void setForeground (float /*double*/ [] color) {
+	if ((style & SWT.SEPARATOR) != 0) return;
+	NSCell cell = new NSCell(textView.cell());
+	cell.setAttributedStringValue(createString());
+}
+
+boolean setTabItemFocus () {
+	return false;
+}
+
+/**
+ * Sets the receiver's image to the argument, which may be
+ * null indicating that no image should be displayed.
+ *
+ * @param image the image to display on the receiver (may be null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setImage (Image image) {
+	checkWidget();
+	if ((style & SWT.SEPARATOR) != 0) return;
+	if (image != null && image.isDisposed ()) {
+		error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	this.image = image;
+	isImage = true;
+
+	/*
+	 * Feature in Cocoa.  If the NSImage object being set into the view is
+	 * the same NSImage object that is already there then the new image is
+	 * not taken.  This results in the view's image not changing even if the
+	 * NSImage object's content has changed since it was last set into the
+	 * view.  The workaround is to temporarily set the view's image to null
+	 * so that the new image will then be taken.
+	 */
+	if (image != null) {
+		NSImage current = imageView.image ();
+		if (current != null && current.id == image.handle.id) {
+			imageView.setImage (null);
+		}
+	}
+	imageView.setImage(image != null ? image.handle : null);
+	((NSBox)view).setContentView(imageView);
+}
+
+/**
+ * Sets the receiver's text.
+ * <p>
+ * This method sets the widget label.  The label may include
+ * the mnemonic character and line delimiters.
+ * </p>
+ * <p>
+ * Mnemonics are indicated by an '&amp;' that causes the next
+ * character to be the mnemonic.  When the user presses a
+ * key sequence that matches the mnemonic, focus is assigned
+ * to the control that follows the label. On most platforms,
+ * the mnemonic appears underlined but may be emphasised in a
+ * platform specific manner.  The mnemonic indicator character
+ * '&amp;' can be escaped by doubling it in the string, causing
+ * a single '&amp;' to be displayed.
+ * </p>
+ * 
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setText (String string) {
+	checkWidget();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if ((style & SWT.SEPARATOR) != 0) return;
+	isImage = false;
+	text = string;
+	NSCell cell = new NSCell(textView.cell());
+	cell.setAttributedStringValue(createString());
+	((NSBox)view).setContentView(textView);
+}
+
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Link.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Link.java
new file mode 100755
index 0000000..31f3cdc
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Link.java
@@ -0,0 +1,526 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.internal.cocoa.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class represent a selectable
+ * user interface object that displays a text with 
+ * links.
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#link">Link snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.1
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Link extends Control {
+	NSScrollView scrollView;
+	String text;
+	Point [] offsets;
+	Point selection;
+	String [] ids;
+	int [] mnemonics;
+	NSColor linkColor;
+	
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Link (Composite parent, int style) {
+	super (parent, style);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is called when the control is selected by the user.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection, typedListener);
+	addListener (SWT.DefaultSelection, typedListener);
+}
+
+boolean textView_clickOnLink_atIndex(int /*long*/ id, int /*long*/ sel, int /*long*/ textView, int /*long*/ link, int /*long*/ charIndex) {
+	NSString str = new NSString (link);
+	Event event = new Event ();
+	event.text = str.getString();
+	sendEvent (SWT.Selection, event);
+	return true;
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget ();
+	if (wHint != SWT.DEFAULT && wHint < 0) wHint = 0;
+	if (hHint != SWT.DEFAULT && hHint < 0) hHint = 0;
+	int width, height;
+	//TODO wrapping, wHint
+	int borderStyle = hasBorder() ? OS.NSBezelBorder : OS.NSNoBorder;
+	NSSize borderSize = NSScrollView.frameSizeForContentSize(new NSSize(), false, false, borderStyle);
+	NSTextView widget = (NSTextView)view;
+	NSSize size = widget.textStorage().size();
+	width = (int)(size.width + borderSize.width);
+	height = (int)(size.height + borderSize.height);
+	if (wHint != SWT.DEFAULT) width = wHint;
+	if (hHint != SWT.DEFAULT) height = hHint;
+	int border = getBorderWidth ();
+	width += border * 2;
+	height += border * 2;
+
+	// TODO is this true?  if so, can this rounding be turned off?
+	/*
+	 * Bug in Cocoa.  NSTextStorage.size() seems to return a width
+	 * value that is rounded down, because its result is never
+	 * fractional.  The workaround is to increment width by 1
+	 * to ensure that it is wide enough to show the full text.  
+	 */
+	width += 1;
+	return new Point (width, height);
+}
+
+void createHandle () {
+	state |= THEME_BACKGROUND;
+	NSScrollView scrollWidget = (NSScrollView)new SWTScrollView().alloc();
+	scrollWidget.init();
+	scrollWidget.setDrawsBackground(false);
+	scrollWidget.setBorderType(hasBorder() ? OS.NSBezelBorder : OS.NSNoBorder);
+
+	NSTextView widget = (NSTextView)new SWTTextView().alloc();
+	widget.init();
+	widget.setEditable(false);
+	widget.setDrawsBackground(false);
+	widget.setDelegate(widget);
+	widget.setAutoresizingMask (OS.NSViewWidthSizable | OS.NSViewHeightSizable);
+	widget.textContainer().setLineFragmentPadding(0);
+	
+	scrollView = scrollWidget;
+	view = widget;
+}
+
+void createWidget () {
+	super.createWidget ();
+	text = "";
+	NSDictionary dict = ((NSTextView)view).linkTextAttributes();
+	linkColor = new NSColor(dict.valueForKey(OS.NSForegroundColorAttributeName));
+}
+
+NSFont defaultNSFont () {
+	return display.textViewFont;
+}
+
+void deregister () {
+	super.deregister ();
+	if (scrollView != null) display.removeWidget (scrollView);
+}
+
+void enableWidget (boolean enabled) {
+	super.enableWidget (enabled);
+	NSColor nsColor = null; 
+	if (enabled) {
+		if (foreground == null) {
+			nsColor = NSColor.textColor ();
+		} else {
+			nsColor = NSColor.colorWithDeviceRed (foreground [0], foreground [1], foreground [2], foreground[3]);
+		}
+	} else {
+		nsColor = NSColor.disabledControlTextColor();
+	}
+	NSTextView widget = (NSTextView)view;
+	widget.setTextColor(nsColor);
+	NSDictionary linkTextAttributes = widget.linkTextAttributes();
+	int count = (int)/*64*/linkTextAttributes.count();
+	NSMutableDictionary dict = NSMutableDictionary.dictionaryWithCapacity(count);
+	dict.setDictionary(linkTextAttributes);
+	dict.setValue(enabled ? linkColor : nsColor, OS.NSForegroundColorAttributeName);
+	widget.setLinkTextAttributes(dict);
+}
+
+String getNameText () {
+	return getText ();
+}
+
+
+/**
+ * Returns the receiver's text, which will be an empty
+ * string if it has never been set.
+ *
+ * @return the receiver's text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getText () {
+	checkWidget ();
+	return text;
+}
+
+void register () {
+	super.register ();
+	if (scrollView != null) display.addWidget (scrollView, this);
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	offsets = null;
+	ids = null;
+	mnemonics = null;
+	text = null;
+	linkColor = null;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection, listener);	
+}
+
+String parse (String string) {
+	int length = string.length ();
+	offsets = new Point [length / 4];
+	ids = new String [length / 4];
+	mnemonics = new int [length / 4 + 1];
+	StringBuffer result = new StringBuffer ();
+	char [] buffer = new char [length];
+	string.getChars (0, string.length (), buffer, 0);
+	int index = 0, state = 0, linkIndex = 0;
+	int start = 0, tagStart = 0, linkStart = 0, endtagStart = 0, refStart = 0;
+	while (index < length) {
+		char c = Character.toLowerCase (buffer [index]);
+		switch (state) {
+			case 0: 
+				if (c == '<') {
+					tagStart = index;
+					state++;
+				}
+				break;
+			case 1:
+				if (c == 'a') state++;
+				break;
+			case 2:
+				switch (c) {
+					case 'h':
+						state = 7;
+						break;
+					case '>':
+						linkStart = index  + 1;
+						state++;
+						break;
+					default:
+						if (Character.isWhitespace(c)) break;
+						else state = 13;
+				}
+				break;
+			case 3:
+				if (c == '<') {
+					endtagStart = index;
+					state++;
+				}
+				break;
+			case 4:
+				state = c == '/' ? state + 1 : 3;
+				break;
+			case 5:
+				state = c == 'a' ? state + 1 : 3;
+				break;
+			case 6:
+				if (c == '>') {
+					mnemonics [linkIndex] = parseMnemonics (buffer, start, tagStart, result);
+					int offset = result.length ();
+					parseMnemonics (buffer, linkStart, endtagStart, result);
+					offsets [linkIndex] = new Point (offset, result.length () - 1);
+					if (ids [linkIndex] == null) {
+						ids [linkIndex] = new String (buffer, linkStart, endtagStart - linkStart);
+					}
+					linkIndex++;
+					start = tagStart = linkStart = endtagStart = refStart = index + 1;
+					state = 0;
+				} else {
+					state = 3;
+				}
+				break;
+			case 7:
+				state = c == 'r' ? state + 1 : 0;
+				break;
+			case 8:
+				state = c == 'e' ? state + 1 : 0;
+				break;
+			case 9:
+				state = c == 'f' ? state + 1 : 0;
+				break;
+			case 10:
+				state = c == '=' ? state + 1 : 0;
+				break;
+			case 11:
+				if (c == '"') {
+					state++;
+					refStart = index + 1;
+				} else {
+					state = 0;
+				}
+				break;
+			case 12:
+				if (c == '"') {
+					ids[linkIndex] = new String (buffer, refStart, index - refStart);
+					state = 2;
+				}
+				break;
+			case 13:
+				if (Character.isWhitespace (c)) {
+					state = 0;
+				} else if (c == '='){
+					state++;
+				}
+				break;
+			case 14:
+				state = c == '"' ? state + 1 : 0;
+				break;
+			case 15:
+				if (c == '"') state = 2;
+				break;
+			default:
+				state = 0;
+				break;
+		}
+		index++;
+	}
+	if (start < length) {
+		int tmp = parseMnemonics (buffer, start, tagStart, result);
+		int mnemonic = parseMnemonics (buffer, Math.max (tagStart, linkStart), length, result);
+		if (mnemonic == -1) mnemonic = tmp;
+		mnemonics [linkIndex] = mnemonic;
+	} else {
+		mnemonics [linkIndex] = -1;
+	}
+	if (offsets.length != linkIndex) {
+		Point [] newOffsets = new Point [linkIndex];
+		System.arraycopy (offsets, 0, newOffsets, 0, linkIndex);
+		offsets = newOffsets;
+		String [] newIDs = new String [linkIndex];
+		System.arraycopy (ids, 0, newIDs, 0, linkIndex);
+		ids = newIDs;
+		int [] newMnemonics = new int [linkIndex + 1];
+		System.arraycopy (mnemonics, 0, newMnemonics, 0, linkIndex + 1);
+		mnemonics = newMnemonics;		
+	}
+	return result.toString ();
+}
+
+int parseMnemonics (char[] buffer, int start, int end, StringBuffer result) {
+	int mnemonic = -1, index = start;
+	while (index < end) {
+		if (buffer [index] == '&') {
+			if (index + 1 < end && buffer [index + 1] == '&') {
+				result.append (buffer [index]);
+				index++;
+			} else {
+				mnemonic = result.length();
+			}
+		} else {
+			result.append (buffer [index]);
+		}
+		index++;
+	}
+	return mnemonic;
+}
+
+void updateBackground () {
+	NSColor nsColor = null;
+	if (backgroundImage != null) {
+		nsColor = NSColor.colorWithPatternImage(backgroundImage.handle);
+	} else if (background != null) {
+		nsColor = NSColor.colorWithDeviceRed(background[0], background[1], background[2], background[3]);
+	}
+	setBackground(nsColor);
+}
+
+void setBackground(NSColor nsColor) {
+	NSTextView widget = (NSTextView)view;
+	if (nsColor == null) {
+		widget.setDrawsBackground(false);
+	} else {
+		widget.setDrawsBackground(true);
+		widget.setBackgroundColor (nsColor);
+	}
+}
+
+void setFont(NSFont font) {
+	((NSTextView) view).setFont(font);
+}
+
+void setForeground (float /*double*/ [] color) {
+	if (!getEnabled ()) return;
+	NSColor nsColor;
+	if (color == null) {
+		nsColor = NSColor.textColor ();
+	} else {
+		nsColor = NSColor.colorWithDeviceRed (color [0], color [1], color [2], 1);
+	}
+	((NSTextView) view).setTextColor (nsColor);
+}
+
+/**
+ * Sets the receiver's text.
+ * <p>
+ * The string can contain both regular text and hyperlinks.  A hyperlink
+ * is delimited by an anchor tag, &lt;A&gt; and &lt;/A&gt;.  Within an
+ * anchor, a single HREF attribute is supported.  When a hyperlink is
+ * selected, the text field of the selection event contains either the
+ * text of the hyperlink or the value of its HREF, if one was specified.
+ * In the rare case of identical hyperlinks within the same string, the
+ * HREF attribute can be used to distinguish between them.  The string may
+ * include the mnemonic character and line delimiters. The only delimiter
+ * the HREF attribute supports is the quotation mark (").
+ * </p>
+ * 
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setText (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (string.equals (text)) return;
+	text = string;
+	NSTextView widget = (NSTextView)view;
+	widget.setString(NSString.stringWith(parse(string)));
+	NSTextStorage textStorage = widget.textStorage();
+	NSRange range = new NSRange();
+	for (int i = 0; i < offsets.length; i++) {
+		range.location = offsets[i].x;
+		range.length = offsets[i].y - offsets[i].x + 1;
+		textStorage.addAttribute(OS.NSLinkAttributeName, NSString.stringWith(ids[i]), range);
+	}
+}
+
+void setZOrder () {
+	super.setZOrder ();
+	if (scrollView != null) scrollView.setDocumentView (view);
+}
+
+NSView topView () {
+	return scrollView;
+}
+
+void updateCursorRects (boolean enabled) {
+	super.updateCursorRects (enabled);
+	if (scrollView == null) return;
+	updateCursorRects (enabled, scrollView);	
+	NSClipView contentView = scrollView.contentView ();
+	updateCursorRects (enabled, contentView);
+	contentView.setDocumentCursor (enabled ? NSCursor.IBeamCursor () : null);
+}
+
+//int traversalCode (int key, int theEvent) {
+//	if (offsets.length == 0) return 0;
+//	int bits = super.traversalCode (key, theEvent);
+//	if (key == 48 /* Tab */ && theEvent != 0) {
+//		int [] modifiers = new int [1];
+//		OS.GetEventParameter (theEvent, OS.kEventParamKeyModifiers, OS.typeUInt32, null, 4, null, modifiers);
+//		boolean next = (modifiers [0] & OS.shiftKey) == 0;
+//		if (next && focusIndex < offsets.length - 1) {
+//			return bits & ~ SWT.TRAVERSE_TAB_NEXT;
+//		}
+//		if (!next && focusIndex > 0) {
+//			return bits & ~ SWT.TRAVERSE_TAB_PREVIOUS;
+//		}
+//	}
+//	return bits;
+//}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/List.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/List.java
new file mode 100755
index 0000000..efc9e9a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/List.java
@@ -0,0 +1,1429 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.accessibility.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/** 
+ * Instances of this class represent a selectable user interface
+ * object that displays a list of strings and issues notification
+ * when a string is selected.  A list may be single or multi select.
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>SINGLE, MULTI</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection, DefaultSelection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of SINGLE and MULTI may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#list">List snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class List extends Scrollable {
+	NSTableColumn column;
+	String [] items;
+	int itemCount;
+	boolean ignoreSelect;
+
+	static int NEXT_ID;
+
+	static final int CELL_GAP = 1;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#SINGLE
+ * @see SWT#MULTI
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public List (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+int /*long*/ accessibilityAttributeValue (int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	
+	if (accessible != null) {
+		NSString attribute = new NSString(arg0);
+		id returnValue = accessible.internal_accessibilityAttributeValue(attribute, ACC.CHILDID_SELF);
+		if (returnValue != null) return returnValue.id;
+	}
+	
+	NSString attributeName = new NSString(arg0);
+	
+	// Accessibility Verifier queries for a title or description.  NSOutlineView doesn't
+	// seem to return either, so we return a default description value here.
+	if (attributeName.isEqualToString (OS.NSAccessibilityDescriptionAttribute)) {
+		return NSString.stringWith("").id;
+	}
+
+//	if (attributeName.isEqualToString(OS.NSAccessibilityHeaderAttribute)) {
+//		/*
+//		* Bug in the Macintosh.  Even when the header is not visible,
+//		* VoiceOver still reports each column header's role for every row.
+//		* This is confusing and overly verbose.  The fix is to return
+//		* "no header" when the screen reader asks for the header, by
+//		* returning noErr without setting the event parameter.
+//		*/
+//		return 0;
+//	}
+	
+	return super.accessibilityAttributeValue(id, sel, arg0);
+}
+
+/**
+ * Adds the argument to the end of the receiver's list.
+ *
+ * @param string the new item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #add(String,int)
+ */
+public void add (String string) {
+	checkWidget();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (itemCount == items.length) {
+		String [] newItems = new String [itemCount + 4];
+		System.arraycopy (items, 0, newItems, 0, items.length);
+		items = newItems;
+	}
+	items [itemCount++] = string;
+	((NSTableView)view).noteNumberOfRowsChanged ();
+	setScrollWidth(string);
+}
+
+/**
+ * Adds the argument to the receiver's list at the given
+ * zero-relative index.
+ * <p>
+ * Note: To add an item at the end of the list, use the
+ * result of calling <code>getItemCount()</code> as the
+ * index or use <code>add(String)</code>.
+ * </p>
+ *
+ * @param string the new item
+ * @param index the index for the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #add(String)
+ */
+public void add (String string, int index) {
+	checkWidget();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (!(0 <= index && index <= itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	if (itemCount == items.length) {
+		String [] newItems = new String [itemCount + 4];
+		System.arraycopy (items, 0, newItems, 0, items.length);
+		items = newItems;
+	}
+	System.arraycopy (items, index, items, index + 1, itemCount++ - index);
+	items [index] = string;
+	((NSTableView)view).noteNumberOfRowsChanged ();
+	if (index != itemCount) fixSelection (index, true);
+	setScrollWidth(string);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the user changes the receiver's selection, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is called when the selection changes.
+ * <code>widgetDefaultSelected</code> is typically called when an item is double-clicked.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the user changes the receiver's selection
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener(SelectionListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener(listener);
+	addListener(SWT.Selection,typedListener);
+	addListener(SWT.DefaultSelection,typedListener);
+}
+
+static int checkStyle (int style) {
+	return checkBits (style, SWT.SINGLE, SWT.MULTI, 0, 0, 0, 0);
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget();
+	int width = 0;
+	if (wHint == SWT.DEFAULT) {
+		NSCell cell = column.dataCell ();
+		Font font = this.font != null ? this.font : defaultFont ();
+		cell.setFont (font.handle);
+		for (int i = 0; i < items.length; i++) {
+			if (items[i] != null) {
+				cell.setTitle (NSString.stringWith (items[i]));
+				NSSize size = cell.cellSize ();
+				width = Math.max (width, (int)Math.ceil (size.width));
+			}
+		}
+		width += CELL_GAP;
+	} else {
+		width = wHint;
+	}
+	if (width <= 0) width = DEFAULT_WIDTH;
+	int height = 0;
+	if (hHint == SWT.DEFAULT) {
+		int itemHeight = getItemHeight () + CELL_GAP;
+		height = itemCount * itemHeight;
+	} else {
+		height = hHint;
+	}
+	if (height <= 0) height = DEFAULT_HEIGHT;
+	Rectangle rect = computeTrim (0, 0, width, height);
+	return new Point (rect.width, rect.height);
+}
+
+void createHandle () {
+	NSScrollView scrollWidget = (NSScrollView)new SWTScrollView().alloc();
+	scrollWidget.init();
+	if ((style & SWT.H_SCROLL) != 0) scrollWidget.setHasHorizontalScroller(true);
+	if ((style & SWT.V_SCROLL) != 0) scrollWidget.setHasVerticalScroller(true);
+	scrollWidget.setAutohidesScrollers(true);
+	scrollWidget.setBorderType((style & SWT.BORDER) != 0 ? OS.NSBezelBorder : OS.NSNoBorder);
+	
+	NSTableView widget = (NSTableView)new SWTTableView().alloc();
+	widget.init();
+	widget.setAllowsMultipleSelection((style & SWT.MULTI) != 0);
+	widget.setDataSource(widget);
+	widget.setHeaderView(null);
+	widget.setDelegate(widget);
+	if ((style & SWT.H_SCROLL) != 0) {
+		widget.setColumnAutoresizingStyle (OS.NSTableViewNoColumnAutoresizing);
+	}
+	NSSize spacing = new NSSize();
+	spacing.width = spacing.height = CELL_GAP;
+	widget.setIntercellSpacing(spacing);
+	widget.setDoubleAction(OS.sel_sendDoubleSelection);
+	if (!hasBorder()) widget.setFocusRingType(OS.NSFocusRingTypeNone);
+	
+	column = (NSTableColumn)new NSTableColumn().alloc();
+	column = column.initWithIdentifier(NSString.stringWith(String.valueOf(++NEXT_ID)));
+	column.setWidth(0);
+	widget.addTableColumn (column);
+	
+	scrollView = scrollWidget;
+	view = widget;
+}
+
+void createWidget () {
+	super.createWidget ();
+	items = new String [4];
+}
+
+Color defaultBackground () {
+	return display.getWidgetColor (SWT.COLOR_LIST_BACKGROUND);
+}
+
+NSFont defaultNSFont () {
+	return display.tableViewFont;
+}
+
+Color defaultForeground () {
+	return display.getWidgetColor (SWT.COLOR_LIST_FOREGROUND);
+}
+
+/**
+ * Deselects the item at the given zero-relative index in the receiver.
+ * If the item at the index was already deselected, it remains
+ * deselected. Indices that are out of range are ignored.
+ *
+ * @param index the index of the item to deselect
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void deselect (int index) {
+	checkWidget();
+	if (0 <= index && index < itemCount) {
+		NSTableView widget = (NSTableView)view;
+		ignoreSelect = true;
+		widget.deselectRow (index);
+		ignoreSelect = false;
+	}
+}
+
+/**
+ * Deselects the items at the given zero-relative indices in the receiver.
+ * If the item at the given zero-relative index in the receiver 
+ * is selected, it is deselected.  If the item at the index
+ * was not selected, it remains deselected.  The range of the
+ * indices is inclusive. Indices that are out of range are ignored.
+ *
+ * @param start the start index of the items to deselect
+ * @param end the end index of the items to deselect
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void deselect (int start, int end) {
+	checkWidget();
+	if (start > end) return;
+	if (end < 0 || start >= itemCount) return;
+	start = Math.max (0, start);
+	end = Math.min (itemCount - 1, end);
+	if (start == 0 && end == itemCount - 1) {
+		deselectAll ();
+	} else {
+		NSTableView widget = (NSTableView)view;
+		ignoreSelect = true;
+		for (int i=start; i<=end; i++) {
+			widget.deselectRow (i);
+		}
+		ignoreSelect = false;
+	}
+}
+
+/**
+ * Deselects the items at the given zero-relative indices in the receiver.
+ * If the item at the given zero-relative index in the receiver 
+ * is selected, it is deselected.  If the item at the index
+ * was not selected, it remains deselected. Indices that are out
+ * of range and duplicate indices are ignored.
+ *
+ * @param indices the array of indices for the items to deselect
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the set of indices is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void deselect (int [] indices) {
+	checkWidget();
+	if (indices == null) error (SWT.ERROR_NULL_ARGUMENT);
+	NSTableView widget = (NSTableView)view;
+	ignoreSelect = true;
+	for (int i=0; i<indices.length; i++) {
+		widget.deselectRow (indices [i]);
+	}
+	ignoreSelect = false;
+}
+
+/**
+ * Deselects all selected items in the receiver.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void deselectAll () {
+	checkWidget ();
+	NSTableView widget = (NSTableView)view;
+	ignoreSelect = true;
+	widget.deselectAll(null);
+	ignoreSelect = false;
+}
+
+boolean dragDetect(int x, int y, boolean filter, boolean[] consume) {
+	NSTableView widget = (NSTableView)view;
+	NSPoint pt = new NSPoint();
+	pt.x = x;
+	pt.y = y;
+	int /*long*/ row = widget.rowAtPoint(pt);
+	if (row == -1) return false;
+	boolean dragging = super.dragDetect(x, y, filter, consume);
+	if (dragging) {
+		if (!widget.isRowSelected(row)) {
+			//TODO expand current selection when Shift, Command key pressed??
+			NSIndexSet set = (NSIndexSet)new NSIndexSet().alloc();
+			set = set.initWithIndex(row);
+			widget.selectRowIndexes (set, false);
+			set.release();
+		}
+	}
+	consume[0] = dragging;
+	return dragging;
+}
+
+void fixSelection (int index, boolean add) {
+	int [] selection = getSelectionIndices ();
+	if (selection.length == 0) return;
+	int newCount = 0;
+	boolean fix = false;
+	for (int i = 0; i < selection.length; i++) {
+		if (!add && selection [i] == index) {
+			fix = true;
+		} else {
+			int newIndex = newCount++;
+			selection [newIndex] = selection [i];
+			if (selection [newIndex] >= index) {
+				selection [newIndex] += add ? 1 : -1;
+				fix = true;
+			}
+		}
+	}
+	if (fix) select (selection, newCount, true);
+}
+
+/**
+ * Returns the zero-relative index of the item which currently
+ * has the focus in the receiver, or -1 if no item has focus.
+ *
+ * @return the index of the selected item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getFocusIndex () {
+	checkWidget();
+	return (int)/*64*/((NSTableView)view).selectedRow();
+}
+
+/**
+ * Returns the item at the given, zero-relative index in the
+ * receiver. Throws an exception if the index is out of range.
+ *
+ * @param index the index of the item to return
+ * @return the item at the given index
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getItem (int index) {
+	checkWidget();
+	if (!(0 <= index && index < itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	return items [index];
+}
+
+/**
+ * Returns the number of items contained in the receiver.
+ *
+ * @return the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemCount () {
+	checkWidget();
+	return itemCount;
+}
+
+/**
+ * Returns the height of the area which would be used to
+ * display <em>one</em> of the items in the list.
+ *
+ * @return the height of one item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemHeight () {
+	checkWidget ();
+	return (int)((NSTableView)view).rowHeight();
+}
+
+/**
+ * Returns a (possibly empty) array of <code>String</code>s which
+ * are the items in the receiver. 
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the items in the receiver's list
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String [] getItems () {
+	checkWidget();
+    String [] result = new String [itemCount];
+	System.arraycopy (items, 0, result, 0, itemCount);
+	return result;
+}
+
+/**
+ * Returns an array of <code>String</code>s that are currently
+ * selected in the receiver.  The order of the items is unspecified.
+ * An empty array indicates that no items are selected.
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its selection, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ * @return an array representing the selection
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String [] getSelection () {
+	checkWidget ();
+	NSTableView widget = (NSTableView)view;
+	if (widget.numberOfSelectedRows() == 0) {
+		return new String [0];
+	}
+	NSIndexSet selection = widget.selectedRowIndexes();
+	int count = (int)/*64*/selection.count();
+	int /*long*/ [] indexBuffer = new int /*long*/ [count];
+	selection.getIndexes(indexBuffer, count, 0);
+	String [] result = new String  [count];
+	for (int i=0; i<count; i++) {
+		result [i] = items [(int)/*64*/indexBuffer [i]];
+	}
+	return result;
+}
+
+/**
+ * Returns the number of selected items contained in the receiver.
+ *
+ * @return the number of selected items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelectionCount () {
+	checkWidget ();
+	return (int)/*64*/((NSTableView)view).numberOfSelectedRows();
+}
+
+/**
+ * Returns the zero-relative index of the item which is currently
+ * selected in the receiver, or -1 if no item is selected.
+ *
+ * @return the index of the selected item or -1
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelectionIndex () {
+	checkWidget();
+	NSTableView widget = (NSTableView)view;
+	if (widget.numberOfSelectedRows() == 0) {
+		return -1;
+	}
+	NSIndexSet selection = widget.selectedRowIndexes();
+	int count = (int)/*64*/selection.count();
+	int /*long*/ [] result = new int /*long*/ [count];
+	selection.getIndexes(result, count, 0);
+	return (int)/*64*/result [0];
+}
+
+/**
+ * Returns the zero-relative indices of the items which are currently
+ * selected in the receiver.  The order of the indices is unspecified.
+ * The array is empty if no items are selected.
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its selection, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ * @return the array of indices of the selected items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int [] getSelectionIndices () {
+	checkWidget ();
+	NSTableView widget = (NSTableView)view;
+	if (widget.numberOfSelectedRows() == 0) {
+		return new int [0];
+	}
+	NSIndexSet selection = widget.selectedRowIndexes();
+	int count = (int)/*64*/selection.count();
+	int /*long*/ [] indices = new int /*long*/ [count];
+	selection.getIndexes(indices, count, 0);
+	int [] result = new int [count];
+	for (int i = 0; i < result.length; i++) {
+		result [i] = (int)/*64*/indices [i];
+	}
+	return result;
+}
+
+/**
+ * Returns the zero-relative index of the item which is currently
+ * at the top of the receiver. This index can change when items are
+ * scrolled or new items are added or removed.
+ *
+ * @return the index of the top item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getTopIndex () {
+	checkWidget();
+	//TODO - partial item at the top
+	NSRect rect = scrollView.documentVisibleRect();
+	NSPoint point = new NSPoint();
+	point.x = rect.x;
+	point.y = rect.y;
+    int result = (int)/*64*/((NSTableView)view).rowAtPoint(point);
+    if (result == -1) result = 0;
+    return result;
+}
+
+/**
+ * Gets the index of an item.
+ * <p>
+ * The list is searched starting at 0 until an
+ * item is found that is equal to the search item.
+ * If no item is found, -1 is returned.  Indexing
+ * is zero based.
+ *
+ * @param string the search item
+ * @return the index of the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int indexOf (String item) {
+	checkWidget();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	for (int i=0; i<itemCount; i++) {
+		if (items [i].equals (item)) return i;
+	}
+	return -1;
+}
+
+/**
+ * Searches the receiver's list starting at the given, 
+ * zero-relative index until an item is found that is equal
+ * to the argument, and returns the index of that item. If
+ * no item is found or the starting index is out of range,
+ * returns -1.
+ *
+ * @param string the search item
+ * @param start the zero-relative index at which to start the search
+ * @return the index of the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int indexOf (String string, int start) {
+	checkWidget();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	for (int i=start; i<itemCount; i++) {
+		if (items [i].equals (string)) return i;
+	}
+	return -1;
+}
+
+/**
+ * Returns <code>true</code> if the item is selected,
+ * and <code>false</code> otherwise.  Indices out of
+ * range are ignored.
+ *
+ * @param index the index of the item
+ * @return the selection state of the item at the index
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean isSelected (int index) {
+	checkWidget();
+	if (!(0 <= index && index < itemCount)) return false;
+	return ((NSTableView)view).isRowSelected(index);
+}
+
+/*
+ * Feature in Cocoa: Table views do not change the selection when the user
+ * right-clicks or control-clicks on an NSTableView or its subclasses. Fix is to select the 
+ * clicked-on row ourselves.
+ */
+int /*long*/ menuForEvent(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	NSEvent event = new NSEvent(theEvent);
+	NSTableView table = (NSTableView)view;
+	
+	// get the current selections for the outline view. 
+	NSIndexSet selectedRowIndexes = table.selectedRowIndexes();
+	
+	// select the row that was clicked before showing the menu for the event
+	NSPoint mousePoint = view.convertPoint_fromView_(event.locationInWindow(), null);
+	int /*long*/ row = table.rowAtPoint(mousePoint);
+	
+	// figure out if the row that was just clicked on is currently selected
+	if (selectedRowIndexes.containsIndex(row) == false) {
+		NSIndexSet set = (NSIndexSet)new NSIndexSet().alloc();
+		set = set.initWithIndex(row);
+		table.selectRowIndexes (set, false);
+		set.release();
+	}
+	// else that row is currently selected, so don't change anything.
+	
+	return super.menuForEvent(id, sel, theEvent);
+}
+
+int /*long*/ numberOfRowsInTableView(int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView) {
+	return itemCount;
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (column != null) column.release();
+	column = null;
+}
+
+void releaseWidget () {	
+	super.releaseWidget ();
+	items = null;
+}
+
+/**
+ * Removes the item from the receiver at the given
+ * zero-relative index.
+ *
+ * @param index the index for the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void remove (int index) {
+	checkWidget();
+	if (!(0 <= index && index < itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	remove(index, true);
+}
+
+void remove (int index, boolean fixScroll) {
+	if (index != itemCount - 1) fixSelection (index, false);
+	System.arraycopy (items, index + 1, items, index, --itemCount - index);
+	items [itemCount] = null;
+	((NSTableView)view).noteNumberOfRowsChanged();
+	if (fixScroll) setScrollWidth();
+}
+
+/**
+ * Removes the items from the receiver which are
+ * between the given zero-relative start and end 
+ * indices (inclusive).
+ *
+ * @param start the start of the range
+ * @param end the end of the range
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if either the start or end are not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void remove (int start, int end) {
+	checkWidget();
+	if (start > end) return;
+	if (!(0 <= start && start <= end && end < itemCount)) {
+		error (SWT.ERROR_INVALID_RANGE);
+	}
+	int length = end - start + 1;
+	for (int i=0; i<length; i++) remove (start, false);
+	setScrollWidth();
+}
+
+/**
+ * Searches the receiver's list starting at the first item
+ * until an item is found that is equal to the argument, 
+ * and removes that item from the list.
+ *
+ * @param string the item to remove
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the string is not found in the list</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void remove (String string) {
+	checkWidget();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int index = indexOf (string, 0);
+	if (index == -1) error (SWT.ERROR_INVALID_ARGUMENT);
+	remove (index);
+}
+
+/**
+ * Removes the items from the receiver at the given
+ * zero-relative indices.
+ *
+ * @param indices the array of indices of the items
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the indices array is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void remove (int [] indices) {
+	checkWidget ();
+	if (indices == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (indices.length == 0) return;
+	int [] newIndices = new int [indices.length];
+	System.arraycopy (indices, 0, newIndices, 0, indices.length);
+	sort (newIndices);
+	int start = newIndices [newIndices.length - 1], end = newIndices [0];
+	int count = getItemCount ();
+	if (!(0 <= start && start <= end && end < count)) {
+		error (SWT.ERROR_INVALID_RANGE);
+	}
+	int last = -1;
+	for (int i=0; i<newIndices.length; i++) {
+		int index = newIndices [i];
+		if (index != last) {
+			remove (index, false);
+			last = index;
+		}
+	}
+	setScrollWidth();
+}
+
+/**
+ * Removes all of the items from the receiver.
+ * <p>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void removeAll () {
+	checkWidget();
+	items = new String [4];
+	itemCount = 0;
+	((NSTableView)view).noteNumberOfRowsChanged();
+	setScrollWidth();
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the user changes the receiver's selection.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener(SelectionListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook(SWT.Selection, listener);
+	eventTable.unhook(SWT.DefaultSelection,listener);
+}
+
+/**
+ * Selects the item at the given zero-relative index in the receiver's 
+ * list.  If the item at the index was already selected, it remains
+ * selected. Indices that are out of range are ignored.
+ *
+ * @param index the index of the item to select
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void select (int index) {
+	checkWidget();
+	if (0 <= index && index < itemCount) {
+		NSIndexSet set = (NSIndexSet)new NSIndexSet().alloc();
+		set = set.initWithIndex(index);
+		NSTableView widget = (NSTableView)view;
+		ignoreSelect = true;
+		widget.selectRowIndexes(set, (style & SWT.MULTI) != 0);
+		ignoreSelect = false;
+		set.release();
+	}
+}
+
+/**
+ * Selects the items in the range specified by the given zero-relative
+ * indices in the receiver. The range of indices is inclusive.
+ * The current selection is not cleared before the new items are selected.
+ * <p>
+ * If an item in the given range is not selected, it is selected.
+ * If an item in the given range was already selected, it remains selected.
+ * Indices that are out of range are ignored and no items will be selected
+ * if start is greater than end.
+ * If the receiver is single-select and there is more than one item in the
+ * given range, then all indices are ignored.
+ *
+ * @param start the start of the range
+ * @param end the end of the range
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see List#setSelection(int,int)
+ */
+public void select (int start, int end) {
+	checkWidget ();
+	if (end < 0 || start > end || ((style & SWT.SINGLE) != 0 && start != end)) return;
+	if (itemCount == 0 || start >= itemCount) return;
+	if (start == 0 && end == itemCount - 1) {
+		selectAll ();
+	} else {
+		start = Math.max (0, start);
+		end = Math.min (end, itemCount - 1);
+		NSRange range = new NSRange();
+		range.location = start;
+		range.length = end - start + 1;
+		NSIndexSet set = (NSIndexSet)new NSIndexSet().alloc();
+		set = set.initWithIndexesInRange(range);
+		NSTableView widget = (NSTableView)view;
+		ignoreSelect = true;
+		widget.selectRowIndexes(set, (style & SWT.MULTI) != 0);
+		ignoreSelect = false;
+		set.release();
+	}
+}
+
+/**
+ * Selects the items at the given zero-relative indices in the receiver.
+ * The current selection is not cleared before the new items are selected.
+ * <p>
+ * If the item at a given index is not selected, it is selected.
+ * If the item at a given index was already selected, it remains selected.
+ * Indices that are out of range and duplicate indices are ignored.
+ * If the receiver is single-select and multiple indices are specified,
+ * then all indices are ignored.
+ *
+ * @param indices the array of indices for the items to select
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array of indices is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see List#setSelection(int[])
+ */
+public void select (int [] indices) {
+	checkWidget ();
+	if (indices == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int length = indices.length;
+	if (length == 0 || ((style & SWT.SINGLE) != 0 && length > 1)) return;
+	int count = 0;
+	NSMutableIndexSet set = (NSMutableIndexSet)new NSMutableIndexSet().alloc().init();
+	for (int i=0; i<length; i++) {
+		int index = indices [i];
+		if (index >= 0 && index < itemCount) {
+			set.addIndex (indices [i]);
+			count++;
+		}
+	}
+	if (count > 0) {
+		NSTableView widget = (NSTableView)view;
+		ignoreSelect = true;
+		widget.selectRowIndexes(set, (style & SWT.MULTI) != 0);
+		ignoreSelect = false;
+	}
+	set.release();
+}
+
+void select (int [] indices, int count, boolean clear) {
+	NSMutableIndexSet set = (NSMutableIndexSet)new NSMutableIndexSet().alloc().init();
+	for (int i=0; i<count; i++) set.addIndex (indices [i]);
+	NSTableView widget = (NSTableView)view;
+	ignoreSelect = true;
+	widget.selectRowIndexes(set, !clear);
+	ignoreSelect = false;
+	set.release();
+}
+
+/**
+ * Selects all of the items in the receiver.
+ * <p>
+ * If the receiver is single-select, do nothing.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void selectAll () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) return;
+	NSTableView widget = (NSTableView)view;
+	ignoreSelect = true;
+	widget.selectAll(null);
+	ignoreSelect = false;
+}
+
+void sendDoubleSelection() {
+	if (((NSTableView)view).clickedRow () != -1) {
+		postEvent (SWT.DefaultSelection);
+	}
+}
+
+boolean sendKeyEvent (NSEvent nsEvent, int type) {
+	boolean result = super.sendKeyEvent (nsEvent, type);
+	if (!result) return result;
+	if (type != SWT.KeyDown) return result;
+	short keyCode = nsEvent.keyCode ();
+	switch (keyCode) {
+		case 76: /* KP Enter */
+		case 36: { /* Return */
+			postEvent (SWT.DefaultSelection);
+			break;
+		}
+	}
+	return result;
+}
+
+void updateBackground () {
+	NSColor nsColor = null;
+	if (backgroundImage != null) {
+		nsColor = NSColor.colorWithPatternImage(backgroundImage.handle);
+	} else if (background != null) {
+		nsColor = NSColor.colorWithDeviceRed(background[0], background[1], background[2], background[3]);
+	} 
+	((NSTableView) view).setBackgroundColor (nsColor);
+}
+
+void setFont (NSFont font) {
+	super.setFont (font);
+	float /*double*/ ascent = font.ascender ();
+	float /*double*/ descent = -font.descender () + font.leading ();
+	((NSTableView)view).setRowHeight ((int)Math.ceil (ascent + descent) + 1);
+	setScrollWidth();
+}
+
+/**
+ * Sets the text of the item in the receiver's list at the given
+ * zero-relative index to the string argument.
+ *
+ * @param index the index for the item
+ * @param string the new text for the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setItem (int index, String string) {
+	checkWidget();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (!(0 <= index && index < itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	items [index] = string;
+	NSTableView tableView = (NSTableView)view;
+	NSRect rect = tableView.rectOfRow (index);
+	tableView.setNeedsDisplayInRect (rect);
+	setScrollWidth(string);
+}
+
+/**
+ * Sets the receiver's items to be the given array of items.
+ *
+ * @param items the array of items
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the items array is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if an item in the items array is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setItems (String [] items) {
+	checkWidget();
+	if (items == null) error (SWT.ERROR_NULL_ARGUMENT);
+	for (int i=0; i<items.length; i++) {
+		if (items [i] == null) error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	this.items = new String [items.length];
+	System.arraycopy (items, 0, this.items, 0, items.length);
+	itemCount = items.length;
+	((NSTableView)view).reloadData();
+	setScrollWidth();
+}
+
+boolean setScrollWidth (String item) {
+	if ((style & SWT.H_SCROLL) == 0) return false;
+	NSCell cell = column.dataCell ();
+	Font font = this.font != null ? this.font : defaultFont ();
+	cell.setFont (font.handle);
+	cell.setTitle (NSString.stringWith (item));
+	NSSize size = cell.cellSize ();
+	float /*double*/ oldWidth = column.width ();
+	if (oldWidth < size.width) {
+		column.setWidth (size.width);
+		return true;
+	}
+	return false;
+}
+
+boolean setScrollWidth () {
+	if ((style & SWT.H_SCROLL) == 0) return false;
+	if (items == null) return false;
+	NSCell cell = column.dataCell ();
+	Font font = this.font != null ? this.font : defaultFont ();
+	cell.setFont (font.handle);
+	float /*double*/ width = 0;
+	for (int i = 0; i < itemCount; i++) {
+		cell.setTitle (NSString.stringWith (items[i]));
+		NSSize size = cell.cellSize ();
+		width = Math.max (width, size.width);
+	}
+	column.setWidth (width);
+	return true;
+}
+
+/**
+ * Selects the item at the given zero-relative index in the receiver. 
+ * If the item at the index was already selected, it remains selected.
+ * The current selection is first cleared, then the new item is selected.
+ * Indices that are out of range are ignored.
+ *
+ * @param index the index of the item to select
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * @see List#deselectAll()
+ * @see List#select(int)
+ */
+public void setSelection (int index) {
+	checkWidget();
+	deselectAll ();
+	if (0 <= index && index < itemCount) {
+		NSIndexSet set = (NSIndexSet)new NSIndexSet().alloc();
+		set = set.initWithIndex(index);
+		NSTableView widget = (NSTableView)view;
+		ignoreSelect = true;
+		widget.selectRowIndexes(set, false);
+		ignoreSelect = false;
+		set.release();
+		showIndex (index);
+	}
+}
+
+/**
+ * Selects the items in the range specified by the given zero-relative
+ * indices in the receiver. The range of indices is inclusive.
+ * The current selection is cleared before the new items are selected.
+ * <p>
+ * Indices that are out of range are ignored and no items will be selected
+ * if start is greater than end.
+ * If the receiver is single-select and there is more than one item in the
+ * given range, then all indices are ignored.
+ *
+ * @param start the start index of the items to select
+ * @param end the end index of the items to select
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see List#deselectAll()
+ * @see List#select(int,int)
+ */
+public void setSelection (int start, int end) {
+	checkWidget ();
+	deselectAll ();
+	if (end < 0 || start > end || ((style & SWT.SINGLE) != 0 && start != end)) return;
+	if (itemCount == 0 || start >= itemCount) return;
+	start = Math.max (0, start);
+	end = Math.min (end, itemCount - 1);
+	NSRange range = new NSRange();
+	range.location = start;
+	range.length = end - start + 1;
+	NSIndexSet set = (NSIndexSet)new NSIndexSet().alloc();
+	set = set.initWithIndexesInRange(range);
+	NSTableView widget = (NSTableView)view;
+	ignoreSelect = true;
+	widget.selectRowIndexes(set, false);
+	ignoreSelect = false;
+	set.release();
+	showIndex(end);
+}
+
+/**
+ * Selects the items at the given zero-relative indices in the receiver.
+ * The current selection is cleared before the new items are selected.
+ * <p>
+ * Indices that are out of range and duplicate indices are ignored.
+ * If the receiver is single-select and multiple indices are specified,
+ * then all indices are ignored.
+ *
+ * @param indices the indices of the items to select
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array of indices is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see List#deselectAll()
+ * @see List#select(int[])
+ */
+public void setSelection (int [] indices) {
+	checkWidget ();
+	if (indices == null) error (SWT.ERROR_NULL_ARGUMENT);
+	deselectAll ();
+	int length = indices.length;
+	if (length == 0 || ((style & SWT.SINGLE) != 0 && length > 1)) return;
+	int [] newIndices = new int [length];
+	int count = 0;
+	for (int i=0; i<length; i++) {
+		int index = indices [length - i - 1];
+		if (index >= 0 && index < itemCount) {
+			newIndices [count++] = index;
+		}
+	}
+	if (count > 0) {
+		select (newIndices, count, true);
+		showIndex (newIndices [0]);
+	}
+}
+
+/**
+ * Sets the receiver's selection to be the given array of items.
+ * The current selection is cleared before the new items are selected.
+ * <p>
+ * Items that are not in the receiver are ignored.
+ * If the receiver is single-select and multiple items are specified,
+ * then all items are ignored.
+ *
+ * @param items the array of items
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array of items is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see List#deselectAll()
+ * @see List#select(int[])
+ * @see List#setSelection(int[])
+ */
+public void setSelection (String [] items) {
+	checkWidget ();
+	if (items == null) error (SWT.ERROR_NULL_ARGUMENT);
+	deselectAll ();
+	int length = items.length;
+	if (length == 0 || ((style & SWT.SINGLE) != 0 && length > 1)) return;
+	int count = 0;
+	int [] indices = new int [length];
+	for (int i=0; i<length; i++) {
+		String string = items [length - i - 1];
+		if ((style & SWT.SINGLE) != 0) {
+			int index = indexOf (string, 0);
+			if (index != -1) {
+				count = 1;
+				indices = new int [] {index};
+			}
+		} else {
+			int index = 0;
+			while ((index = indexOf (string, index)) != -1) {
+				if (count == indices.length) {
+					int [] newIds = new int [indices.length + 4];
+					System.arraycopy (indices, 0, newIds, 0, indices.length);
+					indices = newIds;
+				}
+				indices [count++] = index;
+				index++;
+			}
+		}
+	}
+	if (count > 0) {
+		select (indices, count, true);
+		showIndex (indices [0]);
+	}
+}
+
+/**
+ * Sets the zero-relative index of the item which is currently
+ * at the top of the receiver. This index can change when items
+ * are scrolled or new items are added and removed.
+ *
+ * @param index the index of the top item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setTopIndex (int index) {
+	checkWidget();
+	NSTableView widget = (NSTableView) view;
+	int row = Math.max(0, Math.min(index, itemCount));
+	NSPoint pt = new NSPoint();
+	pt.x = scrollView.contentView().bounds().x;
+	pt.y = widget.frameOfCellAtColumn(0, row).y;
+	view.scrollPoint(pt);
+}
+
+void showIndex (int index) {
+	if (0 <= index && index < itemCount) {
+		((NSTableView)view).scrollRowToVisible(index);
+	}
+}
+
+/**
+ * Shows the selection.  If the selection is already showing in the receiver,
+ * this method simply returns.  Otherwise, the items are scrolled until
+ * the selection is visible.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void showSelection () {
+	checkWidget();
+	int index = getSelectionIndex ();
+	if (index >= 0) showIndex (index);
+}
+
+void tableViewSelectionDidChange (int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
+	if (ignoreSelect) return;
+	postEvent (SWT.Selection);
+}
+
+boolean tableView_shouldEditTableColumn_row(int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ aTableColumn, int /*long*/ rowIndex) {
+	return false;
+}
+
+int /*long*/ tableView_objectValueForTableColumn_row(int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ aTableColumn, int /*long*/ rowIndex) {
+	NSAttributedString attribStr = createString(items[(int)/*64*/rowIndex], null, foreground, 0, true, false);
+	attribStr.autorelease();
+	return attribStr.id;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Menu.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Menu.java
new file mode 100755
index 0000000..6293453
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Menu.java
@@ -0,0 +1,926 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.cocoa.*;
+ 
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class are user interface objects that contain
+ * menu items.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>BAR, DROP_DOWN, POP_UP, NO_RADIO_GROUP</dd>
+ * <dd>LEFT_TO_RIGHT, RIGHT_TO_LEFT</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Help, Hide, Show </dd>
+ * </dl>
+ * <p>
+ * Note: Only one of BAR, DROP_DOWN and POP_UP may be specified.
+ * Only one of LEFT_TO_RIGHT or RIGHT_TO_LEFT may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#menu">Menu snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Menu extends Widget {
+	/**
+	 * the handle to the OS resource 
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	NSMenu nsMenu;
+	int x, y, itemCount;
+	boolean hasLocation, visible;
+	MenuItem [] items;
+	MenuItem cascade, defaultItem;
+	Decorations parent;
+
+/**
+ * Constructs a new instance of this class given its parent,
+ * and sets the style for the instance so that the instance
+ * will be a popup menu on the given parent's shell.
+ * <p>
+ * After constructing a menu, it can be set into its parent
+ * using <code>parent.setMenu(menu)</code>.  In this case, the parent may
+ * be any control in the same widget tree as the parent.
+ * </p>
+ *
+ * @param parent a control which will be the parent of the new instance (cannot be null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#POP_UP
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Menu (Control parent) {
+	this (checkNull (parent).menuShell (), SWT.POP_UP);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Decorations</code>) and a style value
+ * describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p><p>
+ * After constructing a menu or menuBar, it can be set into its parent
+ * using <code>parent.setMenu(menu)</code> or <code>parent.setMenuBar(menuBar)</code>.
+ * </p>
+ *
+ * @param parent a decorations control which will be the parent of the new instance (cannot be null)
+ * @param style the style of menu to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#BAR
+ * @see SWT#DROP_DOWN
+ * @see SWT#POP_UP
+ * @see SWT#NO_RADIO_GROUP
+ * @see SWT#LEFT_TO_RIGHT
+ * @see SWT#RIGHT_TO_LEFT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Menu (Decorations parent, int style) {
+	super (parent, checkStyle (style));
+	this.parent = parent;
+	createWidget ();
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Menu</code>) and sets the style
+ * for the instance so that the instance will be a drop-down
+ * menu on the given parent's parent.
+ * <p>
+ * After constructing a drop-down menu, it can be set into its parentMenu
+ * using <code>parentMenu.setMenu(menu)</code>.
+ * </p>
+ *
+ * @param parentMenu a menu which will be the parent of the new instance (cannot be null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#DROP_DOWN
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Menu (Menu parentMenu) {
+	this (checkNull (parentMenu).parent, SWT.DROP_DOWN);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>MenuItem</code>) and sets the style
+ * for the instance so that the instance will be a drop-down
+ * menu on the given parent's parent menu.
+ * <p>
+ * After constructing a drop-down menu, it can be set into its parentItem
+ * using <code>parentItem.setMenu(menu)</code>.
+ * </p>
+ *
+ * @param parentItem a menu item which will be the parent of the new instance (cannot be null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#DROP_DOWN
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Menu (MenuItem parentItem) {
+	this (checkNull (parentItem).parent);
+}
+
+static Control checkNull (Control control) {
+	if (control == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	return control;
+}
+
+static Menu checkNull (Menu menu) {
+	if (menu == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	return menu;
+}
+
+static MenuItem checkNull (MenuItem item) {
+	if (item == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	return item;
+}
+
+static int checkStyle (int style) {
+	return checkBits (style, SWT.POP_UP, SWT.BAR, SWT.DROP_DOWN, 0, 0, 0);
+}
+
+void _setVisible (boolean visible) {
+	if ((style & (SWT.BAR | SWT.DROP_DOWN)) != 0) return;
+	TrayItem trayItem = display.currentTrayItem;
+	if (trayItem != null && visible) {
+		trayItem.showMenu (this);
+		return;
+	}
+	if (visible) {
+		Shell shell = getShell ();
+		NSWindow window = shell.window;
+		NSPoint location = null;
+		if (hasLocation) {
+			NSView topView = window.contentView();
+			Point shellCoord = display.map(null, shell, new Point(x,y));
+			location = new NSPoint ();
+			location.x = shellCoord.x;
+			location.y = topView.frame().height - shellCoord.y;
+		} else {
+			location = window.mouseLocationOutsideOfEventStream();
+		}
+	
+		// Hold on to window in case it is disposed while the popup is open.
+		window.retain();
+		NSEvent nsEvent = NSEvent.otherEventWithType(OS.NSApplicationDefined, location, 0, 0.0, window.windowNumber(), window.graphicsContext(), (short)0, 0, 0);
+		NSMenu.popUpContextMenu(nsMenu, nsEvent, shell.view);
+		window.release();
+	} else {
+		nsMenu.cancelTracking ();
+	}
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when help events are generated for the control,
+ * by sending it one of the messages defined in the
+ * <code>HelpListener</code> interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see HelpListener
+ * @see #removeHelpListener
+ */
+public void addHelpListener (HelpListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Help, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when menus are hidden or shown, by sending it
+ * one of the messages defined in the <code>MenuListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MenuListener
+ * @see #removeMenuListener
+ */
+public void addMenuListener (MenuListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Hide,typedListener);
+	addListener (SWT.Show,typedListener);
+}
+
+void createHandle () {
+	display.addMenu (this);
+	NSMenu widget = (NSMenu)new SWTMenu().alloc();
+	widget = widget.initWithTitle(NSString.stringWith(""));
+	widget.setAutoenablesItems(false);
+	widget.setDelegate(widget);	
+	nsMenu = widget;	
+}
+
+void createItem (MenuItem item, int index) {
+	if (!(0 <= index && index <= itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	NSMenuItem nsItem = null;
+	if ((item.style & SWT.SEPARATOR) != 0) {
+		nsItem = NSMenuItem.separatorItem();
+		nsItem.retain();
+	} else {
+		nsItem = (NSMenuItem)new SWTMenuItem().alloc();
+		nsItem.initWithTitle(NSString.stringWith(""), 0, NSString.stringWith(""));
+		nsItem.setTarget(nsItem);
+		nsItem.setAction(OS.sel_sendSelection);
+	}
+	item.nsItem = nsItem;
+	item.createJNIRef();
+	item.register();
+	nsMenu.insertItem(nsItem, index);
+	if (itemCount == items.length) {
+		MenuItem [] newItems = new MenuItem [items.length + 4];
+		System.arraycopy (items, 0, newItems, 0, items.length);
+		items = newItems;
+	}
+	System.arraycopy (items, index, items, index + 1, itemCount++ - index);
+	items [index] = item;
+	NSMenu emptyMenu = item.createEmptyMenu ();
+	if (emptyMenu != null) {
+		nsItem.setSubmenu (emptyMenu);
+		emptyMenu.release();
+	}
+	if (display.menuBar == this) {
+		NSApplication application = display.application;
+		NSMenu menubar = application.mainMenu();
+		if (menubar != null) {
+			nsItem.setMenu(null);
+			menubar.insertItem(nsItem, index + 1);
+		}
+	}
+	//TODO - find a way to disable the menu instead of each item
+	if (!getEnabled ()) nsItem.setEnabled (false);
+}
+
+void createWidget () {
+	checkOrientation (parent);
+	super.createWidget ();
+	items = new MenuItem [4];
+}
+
+void deregister () {
+	super.deregister ();
+	display.removeWidget (nsMenu);
+}
+
+void destroyItem (MenuItem item) {
+	int index = 0;
+	while (index < itemCount) {
+		if (items [index] == item) break;
+		index++;
+	}
+	if (index == itemCount) return;
+	System.arraycopy (items, index + 1, items, index, --itemCount - index);
+	items [itemCount] = null;
+	if (itemCount == 0) items = new MenuItem [4];
+	nsMenu.removeItem (item.nsItem);
+	if (display.menuBar == this) {
+		NSApplication application = display.application;
+		NSMenu menubar = application.mainMenu();
+		if (menubar != null) {
+			NSMenuItem nsItem = item.nsItem;
+			menubar.removeItem(nsItem);
+		}
+	}
+}
+
+void fixMenus (Decorations newParent) {
+	this.parent = newParent;
+}
+
+/**
+ * Returns the default menu item or null if none has
+ * been previously set.
+ *
+ * @return the default menu item.
+ *
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public MenuItem getDefaultItem () {
+	checkWidget();
+	return defaultItem;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is enabled, and
+ * <code>false</code> otherwise. A disabled menu is typically
+ * not selectable from the user interface and draws with an
+ * inactive or "grayed" look.
+ *
+ * @return the receiver's enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #isEnabled
+ */
+public boolean getEnabled () {
+	checkWidget();
+	return (state & DISABLED) == 0;
+}
+
+/**
+ * Returns the item at the given, zero-relative index in the
+ * receiver. Throws an exception if the index is out of range.
+ *
+ * @param index the index of the item to return
+ * @return the item at the given index
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public MenuItem getItem (int index) {
+	checkWidget ();
+	if (!(0 <= index && index < itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	return items [index];
+}
+
+/**
+ * Returns the number of items contained in the receiver.
+ *
+ * @return the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemCount () {
+	checkWidget ();
+	return itemCount;
+}
+
+/**
+ * Returns a (possibly empty) array of <code>MenuItem</code>s which
+ * are the items in the receiver. 
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the items in the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public MenuItem [] getItems () {
+	checkWidget ();
+	MenuItem [] result = new MenuItem [itemCount];
+	int index = 0;
+	if (items != null) {
+		for (int i = 0; i < itemCount; i++) {
+			MenuItem item = items [i];
+			if (item != null && !item.isDisposed ()) {
+				result [index++] = item;
+			}
+		}
+	}
+	if (index != result.length) {
+		MenuItem [] newItems = new MenuItem[index];
+		System.arraycopy(result, 0, newItems, 0, index);
+		result = newItems;
+	}
+	return result;
+}
+
+String getNameText () {
+	String result = "";
+	MenuItem [] items = getItems ();
+	int length = items.length;
+	if (length > 0) {
+		for (int i=0; i<length-1; i++) {
+			result = result + items [i].getNameText() + ", ";
+		}
+		result = result + items [length-1].getNameText ();
+	}
+	return result;
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>Decorations</code>.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Decorations getParent () {
+	checkWidget ();
+	return parent;
+}
+
+/**
+ * Returns the receiver's parent item, which must be a
+ * <code>MenuItem</code> or null when the receiver is a
+ * root.
+ *
+ * @return the receiver's parent item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public MenuItem getParentItem () {
+	checkWidget ();
+	return cascade;
+}
+
+/**
+ * Returns the receiver's parent item, which must be a
+ * <code>Menu</code> or null when the receiver is a
+ * root.
+ *
+ * @return the receiver's parent item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Menu getParentMenu () {
+	checkWidget ();
+	if (cascade != null) return cascade.parent;
+	return null;
+}
+
+/**
+ * Returns the receiver's shell. For all controls other than
+ * shells, this simply returns the control's nearest ancestor
+ * shell. Shells return themselves, even if they are children
+ * of other shells.
+ *
+ * @return the receiver's shell
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getParent
+ */
+public Shell getShell () {
+	checkWidget ();
+	return parent.getShell ();
+}
+
+/**
+ * Returns <code>true</code> if the receiver is visible, and
+ * <code>false</code> otherwise.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, this method
+ * may still indicate that it is considered visible even though
+ * it may not actually be showing.
+ * </p>
+ *
+ * @return the receiver's visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getVisible () {
+	checkWidget ();
+	if ((style & SWT.BAR) != 0) {
+		return this == parent.menuShell ().menuBar;
+	}
+	if ((style & SWT.POP_UP) != 0) {
+		Menu [] popups = display.popups;
+		if (popups == null) return false;
+		for (int i=0; i<popups.length; i++) {
+			if (popups [i] == this) return true;
+		}
+	}
+	return visible;
+}
+
+/**
+ * Searches the receiver's list starting at the first item
+ * (index 0) until an item is found that is equal to the 
+ * argument, and returns the index of that item. If no item
+ * is found, returns -1.
+ *
+ * @param item the search item
+ * @return the index of the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int indexOf (MenuItem item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	for (int i=0; i<itemCount; i++) {
+		if (items [i] == item) return i;
+	}
+	return -1;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is enabled and all
+ * of the receiver's ancestors are enabled, and <code>false</code>
+ * otherwise. A disabled menu is typically not selectable from the
+ * user interface and draws with an inactive or "grayed" look.
+ *
+ * @return the receiver's enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #getEnabled
+ */
+public boolean isEnabled () {
+	checkWidget ();
+	Menu parentMenu = getParentMenu ();
+	if (parentMenu == null) {
+		return getEnabled () && parent.isEnabled ();
+	}
+	return getEnabled () && parentMenu.isEnabled ();
+}
+
+/**
+ * Returns <code>true</code> if the receiver is visible and all
+ * of the receiver's ancestors are visible and <code>false</code>
+ * otherwise.
+ *
+ * @return the receiver's visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getVisible
+ */
+public boolean isVisible () {
+	checkWidget ();
+	return getVisible ();
+}
+
+void menu_willHighlightItem(int /*long*/ id, int /*long*/ sel, int /*long*/ menu, int /*long*/ itemID) {
+	Widget widget = display.getWidget(itemID);
+	if (widget instanceof MenuItem) {
+		MenuItem item = (MenuItem)widget;
+		item.sendEvent (SWT.Arm);
+	}
+}
+
+void menuNeedsUpdate(int /*long*/ id, int /*long*/ sel, int /*long*/ menu) {
+	//This code is intentionally commented
+	//sendEvent (SWT.Show);
+}
+
+void menuWillOpen(int /*long*/ id, int /*long*/ sel, int /*long*/ menu) {
+	visible = true;
+	sendEvent (SWT.Show);
+	for (int i=0; i<items.length; i++) {
+		MenuItem item = items [i];
+		if (item != null)  item.updateAccelerator (true);
+	}
+}
+
+void menuDidClose(int /*long*/ id, int /*long*/ sel, int /*long*/ menu) {
+	sendEvent (SWT.Hide);
+	visible = false;
+	for (int i=0; i<items.length; i++) {
+		MenuItem item = items [i];
+		if (item != null)  item.updateAccelerator (false);
+	}
+}
+
+void register () {
+	super.register ();
+	display.addWidget (nsMenu, this);
+}
+
+void releaseChildren (boolean destroy) {
+	if (items != null) {
+		for (int i=0; i<items.length; i++) {
+			MenuItem item = items [i];
+			if (item != null && !item.isDisposed ()) {
+				item.release (false);
+			}
+		}
+		items = null;
+	}
+	super.releaseChildren (destroy);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (nsMenu != null) nsMenu.release();
+	nsMenu = null;
+}
+
+void releaseParent () {
+	super.releaseParent ();
+	if (cascade != null) cascade.setMenu (null);
+	if ((style & SWT.BAR) != 0 && this == parent.menuBar) {
+		parent.setMenuBar (null);
+	}
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	display.removeMenu (this);
+	parent = null;
+	cascade = defaultItem = null;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the help events are generated for the control.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see HelpListener
+ * @see #addHelpListener
+ */
+public void removeHelpListener (HelpListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Help, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the menu events are generated for the control.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MenuListener
+ * @see #addMenuListener
+ */
+public void removeMenuListener (MenuListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Hide, listener);
+	eventTable.unhook (SWT.Show, listener);
+}
+
+/**
+ * Sets the default menu item to the argument or removes
+ * the default emphasis when the argument is <code>null</code>.
+ * 
+ * @param item the default menu item or null
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the menu item has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setDefaultItem (MenuItem item) {
+	checkWidget();
+	if (item != null && item.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
+	defaultItem = item;
+}
+
+/**
+ * Enables the receiver if the argument is <code>true</code>,
+ * and disables it otherwise. A disabled menu is typically
+ * not selectable from the user interface and draws with an
+ * inactive or "grayed" look.
+ *
+ * @param enabled the new enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setEnabled (boolean enabled) {
+	checkWidget();
+	if (enabled) {
+		state &= ~DISABLED;
+	} else {
+		state |= DISABLED;
+	}
+	//TODO - find a way to disable the menu instead of each item
+	for (int i=0; i<items.length; i++) {
+		MenuItem item = items [i];
+		if (item != null) {
+			/*
+			* Feature in the Macintosh.  When a cascade menu
+			* item is disabled, rather than disabling the item,
+			* the submenu is disabled.
+			* 
+			* There is no fix for this at this time.
+			*/
+			item.nsItem.setEnabled (enabled && item.getEnabled ());
+		}
+	}
+}
+
+/**
+ * Sets the location of the receiver, which must be a popup,
+ * to the point specified by the arguments which are relative
+ * to the display.
+ * <p>
+ * Note that this is different from most widgets where the
+ * location of the widget is relative to the parent.
+ * </p><p>
+ * Note that the platform window manager ultimately has control
+ * over the location of popup menus.
+ * </p>
+ *
+ * @param x the new x coordinate for the receiver
+ * @param y the new y coordinate for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setLocation (int x, int y) {
+	checkWidget ();
+	this.x = x;
+	this.y = y;
+	hasLocation = true;
+}
+
+/**
+ * Sets the location of the receiver, which must be a popup,
+ * to the point specified by the argument which is relative
+ * to the display.
+ * <p>
+ * Note that this is different from most widgets where the
+ * location of the widget is relative to the parent.
+ * </p><p>
+ * Note that the platform window manager ultimately has control
+ * over the location of popup menus.
+ * </p>
+ *
+ * @param location the new location for the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.1
+ */
+public void setLocation (Point location) {
+	checkWidget ();
+	if (location == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setLocation (location.x, location.y);
+}
+
+/**
+ * Marks the receiver as visible if the argument is <code>true</code>,
+ * and marks it invisible otherwise. 
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, marking
+ * it visible may not actually cause it to be displayed.
+ * </p>
+ *
+ * @param visible the new visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setVisible (boolean visible) {
+	checkWidget ();
+	if ((style & (SWT.BAR | SWT.DROP_DOWN)) != 0) return;
+	if (visible) {
+		display.addPopup (this);
+	} else {
+		display.removePopup (this);
+	}
+}
+	
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/MenuItem.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/MenuItem.java
new file mode 100755
index 0000000..d27761b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/MenuItem.java
@@ -0,0 +1,850 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.cocoa.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * Instances of this class represent a selectable user interface object
+ * that issues notification when pressed and released. 
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>CHECK, CASCADE, PUSH, RADIO, SEPARATOR</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Arm, Help, Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles CHECK, CASCADE, PUSH, RADIO and SEPARATOR
+ * may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class MenuItem extends Item {
+	NSMenuItem nsItem;
+	Menu parent, menu;
+	int accelerator;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Menu</code>) and a style value
+ * describing its behavior and appearance. The item is added
+ * to the end of the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a menu control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#CHECK
+ * @see SWT#CASCADE
+ * @see SWT#PUSH
+ * @see SWT#RADIO
+ * @see SWT#SEPARATOR
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public MenuItem (Menu parent, int style) {
+	super (parent, checkStyle (style));
+	this.parent = parent;
+	parent.createItem (this, parent.getItemCount ());
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Menu</code>), a style value
+ * describing its behavior and appearance, and the index
+ * at which to place it in the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a menu control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ * @param index the zero-relative index to store the receiver in its parent
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the parent (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#CHECK
+ * @see SWT#CASCADE
+ * @see SWT#PUSH
+ * @see SWT#RADIO
+ * @see SWT#SEPARATOR
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public MenuItem (Menu parent, int style, int index) {
+	super (parent, checkStyle (style));
+	this.parent = parent;
+	parent.createItem (this, index);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the arm events are generated for the control, by sending
+ * it one of the messages defined in the <code>ArmListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ArmListener
+ * @see #removeArmListener
+ */
+public void addArmListener (ArmListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Arm, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the help events are generated for the control, by sending
+ * it one of the messages defined in the <code>HelpListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see HelpListener
+ * @see #removeHelpListener
+ */
+public void addHelpListener (HelpListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Help, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the menu item is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * When <code>widgetSelected</code> is called, the stateMask field of the event object is valid.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the menu item is selected by the user
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener(listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+static int checkStyle (int style) {
+	return checkBits (style, SWT.PUSH, SWT.CHECK, SWT.RADIO, SWT.SEPARATOR, SWT.CASCADE, 0);
+}
+
+NSMenu createEmptyMenu () {
+	if ((parent.style & SWT.BAR) != 0) {
+		return (NSMenu) new SWTMenu ().alloc ().init ();
+	}
+	return null;
+}
+
+void deregister () {
+	super.deregister ();
+	display.removeWidget (nsItem);
+}
+
+void destroyWidget () {
+	parent.destroyItem (this);
+	releaseHandle ();
+}
+
+/**
+ * Returns the widget accelerator.  An accelerator is the bit-wise
+ * OR of zero or more modifier masks and a key. Examples:
+ * <code>SWT.CONTROL | SWT.SHIFT | 'T', SWT.ALT | SWT.F2</code>.
+ * The default value is zero, indicating that the menu item does
+ * not have an accelerator.
+ *
+ * @return the accelerator or 0
+ *
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getAccelerator () {
+	checkWidget ();
+	return accelerator;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is enabled, and
+ * <code>false</code> otherwise. A disabled menu item is typically
+ * not selectable from the user interface and draws with an
+ * inactive or "grayed" look.
+ *
+ * @return the receiver's enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #isEnabled
+ */
+public boolean getEnabled () {
+	checkWidget();
+	return (state & DISABLED) == 0;
+}
+
+/**
+ * Returns the receiver's cascade menu if it has one or null
+ * if it does not. Only <code>CASCADE</code> menu items can have
+ * a pull down menu. The sequence of key strokes, button presses 
+ * and/or button releases that are used to request a pull down
+ * menu is platform specific.
+ *
+ * @return the receiver's menu
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Menu getMenu () {
+	checkWidget ();
+	return menu;
+}
+
+String getNameText () {
+	if ((style & SWT.SEPARATOR) != 0) return "|";
+	return super.getNameText ();
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>Menu</code>.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Menu getParent () {
+	checkWidget ();
+	return parent;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is selected,
+ * and false otherwise.
+ * <p>
+ * When the receiver is of type <code>CHECK</code> or <code>RADIO</code>,
+ * it is selected when it is checked.
+ *
+ * @return the selection state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getSelection () {
+	checkWidget ();
+	if ((style & (SWT.CHECK | SWT.RADIO)) == 0) return false;
+    return nsItem.state() == OS.NSOnState;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is enabled and all
+ * of the receiver's ancestors are enabled, and <code>false</code>
+ * otherwise. A disabled menu item is typically not selectable from the
+ * user interface and draws with an inactive or "grayed" look.
+ *
+ * @return the receiver's enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #getEnabled
+ */
+public boolean isEnabled () {
+	return getEnabled () && parent.isEnabled ();
+}
+
+int keyChar (int key) {
+	//TODO - use the NS key constants
+	switch (key) {
+		case SWT.BS: return OS.NSBackspaceCharacter;
+		case SWT.CR: return OS.NSCarriageReturnCharacter;
+		case SWT.DEL: return OS.NSDeleteCharacter;
+		case SWT.ESC: return SWT.ESC;
+		case SWT.LF: return OS.NSNewlineCharacter;
+		case SWT.TAB: return OS.NSTabCharacter;
+//		case ' ': return OS.kMenuBlankGlyph;
+//		case ' ': return OS.kMenuSpaceGlyph;		
+		case SWT.ALT: return 0x2325;
+		case SWT.SHIFT: return 0x21E7;
+		case SWT.CONTROL: return 0xF2303;
+		case SWT.COMMAND: return 0x2318;
+		case SWT.ARROW_UP: return 0x2191;
+		case SWT.ARROW_DOWN: return 0x2193;
+		case SWT.ARROW_LEFT: return 0x2190;
+		case SWT.ARROW_RIGHT: return 0x2192;
+		case SWT.PAGE_UP: return 0x21DE;
+		case SWT.PAGE_DOWN: return 0x21DF;
+		case SWT.KEYPAD_CR: return OS.NSEnterCharacter;
+		case SWT.HELP: return OS.NSHelpFunctionKey;
+		case SWT.HOME: return 0xF729;
+		case SWT.END: return 0xF72B;
+//		case SWT.CAPS_LOCK: return ??;
+		case SWT.F1: return 0xF704;
+		case SWT.F2: return 0xF705;
+		case SWT.F3: return 0xF706;
+		case SWT.F4: return 0xF707;
+		case SWT.F5: return 0xF708;
+		case SWT.F6: return 0xF709;
+		case SWT.F7: return 0xF70A;
+		case SWT.F8: return 0xF70B;
+		case SWT.F9: return 0xF70C;
+		case SWT.F10: return 0xF70D;
+		case SWT.F11: return 0xF70E;
+		case SWT.F12: return 0xF70F;
+		case SWT.F13: return 0xF710;
+		case SWT.F14: return 0xF711;
+		case SWT.F15: return 0xF712;
+		/*
+		* The following lines are intentionally commented.
+		*/
+//		case SWT.INSERT: return ??;
+	}
+	return 0;
+}
+
+
+void register () {
+	super.register ();
+	display.addWidget (nsItem, this);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (nsItem != null) nsItem.release();
+	nsItem = null;
+	parent = null;
+}
+
+void releaseChildren (boolean destroy) {
+	if (menu != null) {
+		menu.release (false);
+		menu = null;
+	}
+	super.releaseChildren (destroy);
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	accelerator = 0;
+	if (this == parent.defaultItem) parent.defaultItem = null;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the arm events are generated for the control.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ArmListener
+ * @see #addArmListener
+ */
+public void removeArmListener (ArmListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Arm, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the help events are generated for the control.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see HelpListener
+ * @see #addHelpListener
+ */
+public void removeHelpListener (HelpListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Help, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+void selectRadio () {
+	int index = 0;
+	MenuItem [] items = parent.getItems ();
+	while (index < items.length && items [index] != this) index++;
+	int i = index - 1;
+	while (i >= 0 && items [i].setRadioSelection (false)) --i;
+	int j = index + 1;
+	while (j < items.length && items [j].setRadioSelection (false)) j++;
+	setSelection (true);
+}
+
+void sendSelection () {
+	if ((style & SWT.CHECK) != 0) {
+		setSelection (!getSelection ());
+	} else {
+		if ((style & SWT.RADIO) != 0) {
+			if ((parent.getStyle () & SWT.NO_RADIO_GROUP) != 0) {
+				setSelection (!getSelection ());
+			} else {
+				selectRadio ();
+			}
+		}
+	}
+	Event event = new Event ();
+	NSEvent nsEvent = NSApplication.sharedApplication ().currentEvent ();
+	if (nsEvent != null) setInputState (event, nsEvent, 0);
+	postEvent (SWT.Selection, event);
+}
+
+/**
+ * Sets the widget accelerator.  An accelerator is the bit-wise
+ * OR of zero or more modifier masks and a key. Examples:
+ * <code>SWT.MOD1 | SWT.MOD2 | 'T', SWT.MOD3 | SWT.F2</code>.
+ * <code>SWT.CONTROL | SWT.SHIFT | 'T', SWT.ALT | SWT.F2</code>.
+ * The default value is zero, indicating that the menu item does
+ * not have an accelerator.
+ *
+ * @param accelerator an integer that is the bit-wise OR of masks and a key
+ *
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setAccelerator (int accelerator) {
+	checkWidget ();
+	if (this.accelerator == accelerator) return;
+	this.accelerator = accelerator;
+	int key = accelerator & SWT.KEY_MASK;
+	int virtualKey = keyChar (key);
+	NSString string = null;
+	if (virtualKey != 0) {
+		string = NSString.stringWith ((char)virtualKey + "");
+	} else {
+		string = NSString.stringWith ((char)key + "");
+	}
+	nsItem.setKeyEquivalent (string.lowercaseString());
+	int mask = 0;
+	if ((accelerator & SWT.SHIFT) != 0) mask |= OS.NSShiftKeyMask;
+	if ((accelerator & SWT.CONTROL) != 0) mask |= OS.NSControlKeyMask;
+	if ((accelerator & SWT.COMMAND) != 0) mask |= OS.NSCommandKeyMask;
+	if ((accelerator & SWT.ALT) != 0) mask |= OS.NSAlternateKeyMask;
+	nsItem.setKeyEquivalentModifierMask (mask);
+}
+
+/**
+ * Enables the receiver if the argument is <code>true</code>,
+ * and disables it otherwise. A disabled menu item is typically
+ * not selectable from the user interface and draws with an
+ * inactive or "grayed" look.
+ *
+ * @param enabled the new enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setEnabled (boolean enabled) {
+	checkWidget ();
+	if (enabled) {
+		state &= ~DISABLED;
+	} else {
+		state |= DISABLED;
+	}
+	nsItem.setEnabled(enabled);
+}
+
+/**
+ * Sets the image the receiver will display to the argument.
+ * <p>
+ * Note: This operation is a hint and is not supported on
+ * platforms that do not have this concept (for example, Windows NT).
+ * Furthermore, some platforms (such as GTK), cannot display both
+ * a check box and an image at the same time.  Instead, they hide
+ * the image and display the check box.
+ * </p>
+ *
+ * @param image the image to display
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setImage (Image image) {
+	checkWidget ();
+	if ((style & SWT.SEPARATOR) != 0) return;
+	super.setImage (image);
+	nsItem.setImage(image != null? image.handle : null);
+}
+
+/**
+ * Sets the receiver's pull down menu to the argument.
+ * Only <code>CASCADE</code> menu items can have a
+ * pull down menu. The sequence of key strokes, button presses
+ * and/or button releases that are used to request a pull down
+ * menu is platform specific.
+ * <p>
+ * Note: Disposing of a menu item that has a pull down menu
+ * will dispose of the menu.  To avoid this behavior, set the
+ * menu to null before the menu item is disposed.
+ * </p>
+ *
+ * @param menu the new pull down menu
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_MENU_NOT_DROP_DOWN - if the menu is not a drop down menu</li>
+ *    <li>ERROR_MENUITEM_NOT_CASCADE - if the menu item is not a <code>CASCADE</code></li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the menu has been disposed</li>
+ *    <li>ERROR_INVALID_PARENT - if the menu is not in the same widget tree</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMenu (Menu menu) {
+	checkWidget ();
+
+	/* Check to make sure the new menu is valid */
+	if ((style & SWT.CASCADE) == 0) {
+		error (SWT.ERROR_MENUITEM_NOT_CASCADE);
+	}
+	if (menu != null) {
+		if (menu.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
+		if ((menu.style & SWT.DROP_DOWN) == 0) {
+			error (SWT.ERROR_MENU_NOT_DROP_DOWN);
+		}
+		if (menu.parent != parent.parent) {
+			error (SWT.ERROR_INVALID_PARENT);
+		}
+	} 
+	/* Assign the new menu */
+	Menu oldMenu = this.menu;
+	if (oldMenu == menu) return;
+	if (oldMenu != null) oldMenu.cascade = null;
+	this.menu = menu;
+	
+	/* Update the menu in the OS */
+	if (menu == null) {
+		NSMenu emptyMenu = createEmptyMenu ();
+		if (emptyMenu != null) {
+			nsItem.setSubmenu (emptyMenu);
+			emptyMenu.release();
+		}
+	} else {
+		menu.cascade = this;
+		nsItem.setSubmenu (menu.nsMenu);
+	}
+	
+	if (menu != null) {
+		nsItem.setTarget(null);
+		nsItem.setAction(0);
+	} else {
+		nsItem.setTarget(nsItem);
+		nsItem.setAction(OS.sel_sendSelection);
+	}
+
+	/* Update menu title with parent item title */
+	updateText ();
+}
+
+boolean setRadioSelection (boolean value) {
+	if ((style & SWT.RADIO) == 0) return false;
+	if (getSelection () != value) {
+		setSelection (value);
+		postEvent (SWT.Selection);
+	}
+	return true;
+}
+
+/**
+ * Sets the selection state of the receiver.
+ * <p>
+ * When the receiver is of type <code>CHECK</code> or <code>RADIO</code>,
+ * it is selected when it is checked.
+ *
+ * @param selected the new selection state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (boolean selected) {
+	checkWidget ();
+	if ((style & (SWT.CHECK | SWT.RADIO)) == 0) return;
+	nsItem.setState(selected ? OS.NSOnState : OS.NSOffState);
+}
+
+/**
+ * Sets the receiver's text. The string may include
+ * the mnemonic character and accelerator text.
+ * <p>
+ * Mnemonics are indicated by an '&amp;' that causes the next
+ * character to be the mnemonic.  When the user presses a
+ * key sequence that matches the mnemonic, a selection
+ * event occurs. On most platforms, the mnemonic appears
+ * underlined but may be emphasised in a platform specific
+ * manner.  The mnemonic indicator character '&amp;' can be
+ * escaped by doubling it in the string, causing a single
+ * '&amp;' to be displayed.
+ * </p>
+ * <p>
+ * Accelerator text is indicated by the '\t' character.
+ * On platforms that support accelerator text, the text
+ * that follows the '\t' character is displayed to the user,
+ * typically indicating the key stroke that will cause
+ * the item to become selected.  On most platforms, the
+ * accelerator text appears right aligned in the menu.
+ * Setting the accelerator text does not install the
+ * accelerator key sequence. The accelerator key sequence
+ * is installed using #setAccelerator.
+ * </p>
+ * 
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setAccelerator
+ */
+public void setText (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if ((style & SWT.SEPARATOR) != 0) return;
+	if (text.equals (string)) return;
+	super.setText (string);
+	updateText ();
+}
+	
+void updateText () {
+	char [] buffer = new char [text.length ()];
+	text.getChars (0, buffer.length, buffer, 0);
+	int i=0, j=0;
+	while (i < buffer.length) {
+		if (buffer [i] == '\t') break;
+		if ((buffer [j++] = buffer [i++]) == '&') {
+			if (i == buffer.length) {continue;}
+			if (buffer [i] == '&') {i++; continue;}
+			j--;
+		}
+	}
+	String text = new String (buffer, 0, j);
+	NSMenu submenu = nsItem.submenu ();
+	NSString label = NSString.stringWith (text);
+	if(submenu != null && (parent.getStyle () & SWT.BAR) != 0) {
+		submenu.setTitle (label);
+	} else {
+		nsItem.setTitle (label);
+	}
+}
+
+void updateAccelerator (boolean show) {
+	if (accelerator != 0) return;
+	int mask = 0, key = 0;
+	if (show) {
+		char [] buffer = new char [text.length ()];
+		text.getChars (0, buffer.length, buffer, 0);
+		int i=0, j=0;
+		while (i < buffer.length) {
+			if (buffer [i] == '\t') break;
+			if ((buffer [j++] = buffer [i++]) == '&') {
+				if (i == buffer.length) {continue;}
+				if (buffer [i] == '&') {i++; continue;}
+				j--;
+			}
+		}
+		if (i < buffer.length && buffer [i] == '\t') {
+			for (j = i + 1; j < buffer.length; j++) {
+				switch (buffer [j]) {
+					case '\u2303': mask |= OS.NSControlKeyMask; i++; break;
+					case '\u2325': mask |= OS.NSAlternateKeyMask; i++; break;
+					case '\u21E7': mask |= OS.NSShiftKeyMask; i++; break;
+					case '\u2318': mask |= OS.NSCommandKeyMask; i++; break;
+					default:
+						j = buffer.length;
+						break;
+				}
+			}
+			switch (buffer.length - i - 1) {
+				case 1:
+					key = buffer [i + 1];
+					if (key == 0x2423) key = ' ';
+					break;
+				case 2:
+					if (buffer [i + 1] == 'F') {
+						switch (buffer [i + 2]) {
+							case '1': key = 0xF704; break;
+							case '2': key = 0xF705; break;
+							case '3': key = 0xF706; break;
+							case '4': key = 0xF707; break;
+							case '5': key = 0xF708; break;
+							case '6': key = 0xF709; break;
+							case '7': key = 0xF70A; break;
+							case '8': key = 0xF70B; break;
+							case '9': key = 0xF70C; break;
+						}
+					}
+					break;
+				case 3:
+					if (buffer [i + 1] == 'F' && buffer [i + 2] == '1') {
+						switch (buffer [i + 3]) {
+							case '0': key = 0xF70D; break;
+							case '1': key = 0xF70E; break;
+							case '2': key = 0xF70F; break;
+							case '3': key = 0xF710; break;
+							case '4': key = 0xF711; break;
+							case '5': key = 0xF712; break;
+						}
+					}
+					break;
+			}
+		}
+	}
+	NSString string = NSString.stringWith (key == 0 ? "" : String.valueOf ((char)key));
+	nsItem.setKeyEquivalentModifierMask (mask);
+	nsItem.setKeyEquivalent (string.lowercaseString ());
+}
+
+}
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/MessageBox.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/MessageBox.java
new file mode 100755
index 0000000..9d0ff92
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/MessageBox.java
@@ -0,0 +1,331 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class are used to inform or warn the user.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>ICON_ERROR, ICON_INFORMATION, ICON_QUESTION, ICON_WARNING, ICON_WORKING</dd>
+ * <dd>OK, OK | CANCEL</dd>
+ * <dd>YES | NO, YES | NO | CANCEL</dd>
+ * <dd>RETRY | CANCEL</dd>
+ * <dd>ABORT | RETRY | IGNORE</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles ICON_ERROR, ICON_INFORMATION, ICON_QUESTION,
+ * ICON_WARNING and ICON_WORKING may be specified.
+ * </p><p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public  class MessageBox extends Dialog {
+	String message = "";
+	int returnCode;
+
+/**
+ * Constructs a new instance of this class given only its parent.
+ *
+ * @param parent a shell which will be the parent of the new instance
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ */
+public MessageBox (Shell parent) {
+	this (parent, SWT.OK | SWT.ICON_INFORMATION | SWT.APPLICATION_MODAL);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ *
+ * @param parent a shell which will be the parent of the new instance
+ * @param style the style of dialog to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ * 
+ * @see SWT#ICON_ERROR
+ * @see SWT#ICON_INFORMATION
+ * @see SWT#ICON_QUESTION
+ * @see SWT#ICON_WARNING
+ * @see SWT#ICON_WORKING
+ * @see SWT#OK
+ * @see SWT#CANCEL
+ * @see SWT#YES
+ * @see SWT#NO
+ * @see SWT#ABORT
+ * @see SWT#RETRY
+ * @see SWT#IGNORE
+ */
+public MessageBox (Shell parent, int style) {
+	super (parent, checkStyle (parent, checkStyle (style)));
+	if (Display.getSheetEnabled ()) {
+		if (parent != null && (style & SWT.SHEET) != 0) this.style |= SWT.SHEET;
+	}
+	checkSubclass ();
+}
+
+static int checkStyle (int style) {
+	int mask = (SWT.YES | SWT.NO | SWT.OK | SWT.CANCEL | SWT.ABORT | SWT.RETRY | SWT.IGNORE);
+	int bits = style & mask;
+	if (bits == SWT.OK || bits == SWT.CANCEL || bits == (SWT.OK | SWT.CANCEL)) return style;
+	if (bits == SWT.YES || bits == SWT.NO || bits == (SWT.YES | SWT.NO) || bits == (SWT.YES | SWT.NO | SWT.CANCEL)) return style;
+	if (bits == (SWT.RETRY | SWT.CANCEL) || bits == (SWT.ABORT | SWT.RETRY | SWT.IGNORE)) return style;
+	style = (style & ~mask) | SWT.OK;
+	return style;
+}
+
+/**
+ * Returns the dialog's message, or an empty string if it does not have one.
+ * The message is a description of the purpose for which the dialog was opened.
+ * This message will be visible in the dialog while it is open.
+ *
+ * @return the message
+ */
+public String getMessage () {
+	return message;
+}
+
+/**
+ * Makes the dialog visible and brings it to the front
+ * of the display.
+ *
+ * @return the ID of the button that was selected to dismiss the
+ *         message box (e.g. SWT.OK, SWT.CANCEL, etc.)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the dialog has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the dialog</li>
+ * </ul>
+ */
+public int open () {
+	NSAlert alert = (NSAlert) new NSAlert().alloc().init();
+	int alertType = OS.NSInformationalAlertStyle;
+	if ((style & SWT.ICON_ERROR) != 0) alertType = OS.NSCriticalAlertStyle;
+	if ((style & SWT.ICON_INFORMATION) != 0) alertType = OS.NSInformationalAlertStyle;
+	if ((style & SWT.ICON_QUESTION) != 0) alertType = OS.NSInformationalAlertStyle;
+	if ((style & SWT.ICON_WARNING) != 0) alertType = OS.NSWarningAlertStyle;
+	if ((style & SWT.ICON_WORKING) != 0) alertType = OS.NSInformationalAlertStyle;
+	alert.setAlertStyle(alertType);
+	
+	int mask = (SWT.YES | SWT.NO | SWT.OK | SWT.CANCEL | SWT.ABORT | SWT.RETRY | SWT.IGNORE);
+	int bits = style & mask;
+	NSString title;
+	switch (bits) {
+		case SWT.OK:
+			title = NSString.stringWith(SWT.getMessage("SWT_OK"));
+			alert.addButtonWithTitle(title);
+			break;
+		case SWT.CANCEL:
+			title = NSString.stringWith(SWT.getMessage("SWT_Cancel"));
+			alert.addButtonWithTitle(title);
+			break;
+		case SWT.OK | SWT.CANCEL:
+			title = NSString.stringWith(SWT.getMessage("SWT_OK"));
+			alert.addButtonWithTitle(title);
+			title = NSString.stringWith(SWT.getMessage("SWT_Cancel"));
+			alert.addButtonWithTitle(title);
+			break;
+		case SWT.YES:
+			title = NSString.stringWith(SWT.getMessage("SWT_Yes"));
+			alert.addButtonWithTitle(title);
+			break;
+		case SWT.NO:
+			title = NSString.stringWith(SWT.getMessage("SWT_No"));
+			alert.addButtonWithTitle(title);
+			break;
+		case SWT.YES | SWT.NO:
+			title = NSString.stringWith(SWT.getMessage("SWT_Yes"));
+			alert.addButtonWithTitle(title);
+			title = NSString.stringWith(SWT.getMessage("SWT_No"));
+			alert.addButtonWithTitle(title);
+//			no.setKeyEquivalent(NSString.stringWith("\033"));
+			break;
+		case SWT.YES | SWT.NO | SWT.CANCEL:				
+			title = NSString.stringWith(SWT.getMessage("SWT_Yes"));
+			alert.addButtonWithTitle(title);
+			title = NSString.stringWith(SWT.getMessage("SWT_Cancel"));
+			alert.addButtonWithTitle(title);
+			title = NSString.stringWith(SWT.getMessage("SWT_No"));
+			alert.addButtonWithTitle(title);
+			break;
+		case SWT.RETRY | SWT.CANCEL:
+			title = NSString.stringWith(SWT.getMessage("SWT_Retry"));
+			alert.addButtonWithTitle(title);
+			title = NSString.stringWith(SWT.getMessage("SWT_Cancel"));
+			alert.addButtonWithTitle(title);
+			break;
+		case SWT.ABORT | SWT.RETRY | SWT.IGNORE:
+			title = NSString.stringWith(SWT.getMessage("SWT_Abort"));
+			alert.addButtonWithTitle(title);
+			title = NSString.stringWith(SWT.getMessage("SWT_Ignore"));
+			alert.addButtonWithTitle(title);
+			title = NSString.stringWith(SWT.getMessage("SWT_Retry"));
+			alert.addButtonWithTitle(title);
+			break;
+	}
+	title = NSString.stringWith(this.title != null ? this.title : "");
+	alert.window().setTitle(title);
+	NSString message = NSString.stringWith(this.message != null ? this.message : "");
+	alert.setMessageText(message);
+	int response = 0;
+	int /*long*/ jniRef = 0;
+	SWTPanelDelegate delegate = null;
+	if ((style & SWT.SHEET) != 0) {
+		delegate = (SWTPanelDelegate)new SWTPanelDelegate().alloc().init();
+		jniRef = OS.NewGlobalRef(this);
+		if (jniRef == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+		OS.object_setInstanceVariable(delegate.id, Display.SWT_OBJECT, jniRef);
+		alert.beginSheetModalForWindow(parent.window, delegate, OS.sel_panelDidEnd_returnCode_contextInfo_, 0);
+		if ((style & SWT.APPLICATION_MODAL) != 0) {
+			response = (int)/*64*/alert.runModal();
+		} else {
+			this.returnCode = 0;
+			NSWindow window = alert.window();
+			NSApplication application = NSApplication.sharedApplication();
+			while (window.isVisible()) application.run();
+			response = this.returnCode;
+		}
+	} else {
+		response = (int)/*64*/alert.runModal();
+	}
+	if (delegate != null) delegate.release();
+	if (jniRef != 0) OS.DeleteGlobalRef(jniRef);
+	alert.release();
+	switch (bits) {
+		case SWT.OK:
+			switch (response) {
+				case OS.NSAlertFirstButtonReturn:
+					return SWT.OK;
+			}
+			break;
+		case SWT.CANCEL:
+			switch (response) {
+				case OS.NSAlertFirstButtonReturn:
+					return SWT.CANCEL;
+			}
+			break;
+		case SWT.OK | SWT.CANCEL:
+			switch (response) {
+				case OS.NSAlertFirstButtonReturn:
+					return SWT.OK;
+				case OS.NSAlertSecondButtonReturn:
+					return SWT.CANCEL;
+			}
+			break;
+		case SWT.YES:
+			switch (response) {
+				case OS.NSAlertFirstButtonReturn:
+					return SWT.YES;
+			}
+			break;
+		case SWT.NO:
+			switch (response) {
+				case OS.NSAlertFirstButtonReturn:
+					return SWT.NO;
+			}
+			break;
+		case SWT.YES | SWT.NO:
+			switch (response) {
+				case OS.NSAlertFirstButtonReturn:
+					return SWT.YES;
+				case OS.NSAlertSecondButtonReturn:
+					return SWT.NO;
+			}
+			break;
+		case SWT.YES | SWT.NO | SWT.CANCEL:				
+			switch (response) {
+				case OS.NSAlertFirstButtonReturn:
+					return SWT.YES;
+				case OS.NSAlertSecondButtonReturn:
+					return SWT.CANCEL;
+				case OS.NSAlertThirdButtonReturn:
+					return SWT.NO;
+			}
+			break;
+		case SWT.RETRY | SWT.CANCEL:
+			switch (response) {
+				case OS.NSAlertFirstButtonReturn:
+					return SWT.RETRY;
+				case OS.NSAlertSecondButtonReturn:
+					return SWT.CANCEL;
+			}
+			break;
+		case SWT.ABORT | SWT.RETRY | SWT.IGNORE:
+			switch (response) {
+				case OS.NSAlertFirstButtonReturn:
+					return SWT.ABORT;
+				case OS.NSAlertSecondButtonReturn:
+					return SWT.IGNORE;
+				case OS.NSAlertThirdButtonReturn:
+					return SWT.RETRY;
+			}
+			break;
+	}
+	return SWT.CANCEL;
+}
+
+void panelDidEnd_returnCode_contextInfo(int /*long*/ id, int /*long*/ sel, int /*long*/ alert, int /*long*/ returnCode, int /*long*/ contextInfo) {
+	this.returnCode = (int)/*64*/returnCode;
+	NSApplication application = NSApplication.sharedApplication();
+	application.endSheet(new NSAlert(alert).window(), returnCode);
+	if ((style & SWT.PRIMARY_MODAL) != 0) {
+		application.stop(null);
+	}
+}
+
+/**
+ * Sets the dialog's message, which is a description of
+ * the purpose for which it was opened. This message will be
+ * visible on the dialog while it is open.
+ *
+ * @param string the message
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ */
+public void setMessage (String string) {
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	message = string;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ProgressBar.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ProgressBar.java
new file mode 100755
index 0000000..55cd724
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ProgressBar.java
@@ -0,0 +1,330 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+import org.eclipse.swt.*;
+
+/**
+ * Instances of the receiver represent an unselectable
+ * user interface object that is used to display progress,
+ * typically in the form of a bar.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>SMOOTH, HORIZONTAL, VERTICAL, INDETERMINATE</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
+ * </p><p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#progressbar">ProgressBar snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class ProgressBar extends Control {
+	
+	NSBezierPath visiblePath;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#SMOOTH
+ * @see SWT#HORIZONTAL
+ * @see SWT#VERTICAL
+ * @see SWT#INDETERMINATE
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public ProgressBar (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+static int checkStyle (int style) {
+	style |= SWT.NO_FOCUS;
+	return checkBits (style, SWT.HORIZONTAL, SWT.VERTICAL, 0, 0, 0, 0);
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget();
+	int size = OS.NSProgressIndicatorPreferredThickness;
+	int width = 0, height = 0;
+	if ((style & SWT.HORIZONTAL) != 0) {
+		height = size;
+		width = height * 10;
+	} else {
+		width = size;
+		height = width * 10;
+	}
+	if (wHint != SWT.DEFAULT) width = wHint;
+	if (hHint != SWT.DEFAULT) height = hHint;
+	return new Point (width, height);
+}
+
+void createHandle () {
+	NSProgressIndicator widget = (NSProgressIndicator)new SWTProgressIndicator().alloc();
+	widget.init();
+	widget.setUsesThreadedAnimation(false);
+	widget.setIndeterminate((style & SWT.INDETERMINATE) != 0);
+	view = widget;
+}
+
+NSFont defaultNSFont () {
+	return display.progressIndicatorFont;
+}
+
+void _drawThemeProgressArea (int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	/*
+	* Bug in Cocoa.  When the threaded animation is turned off by calling
+	* setUsesThreadedAnimation(), _drawThemeProgressArea() attempts to
+	* access a deallocated NSBitmapGraphicsContext when drawing a zero sized
+	* progress bar.  The fix is to avoid calling super when the progress bar
+	* is zero sized.
+	*/
+	NSRect frame = view.frame();
+	if (frame.width == 0 || frame.height == 0) return;
+	
+	/*
+	* Bug in Cocoa. When the progress bar is animating it calls
+	* _drawThemeProgressArea() directly without taking into account
+	* obscured areas. The fix is to clip the drawing to the visible
+	* region of the progress bar before calling super.
+	*/	
+	if (visiblePath == null) {
+		int /*long*/ visibleRegion = getVisibleRegion();
+		visiblePath = getPath(visibleRegion);
+		OS.DisposeRgn(visibleRegion);
+	}
+	NSGraphicsContext context = NSGraphicsContext.currentContext();
+	context.saveGraphicsState();
+	visiblePath.setClip();
+	super._drawThemeProgressArea (id, sel, arg0);
+	context.restoreGraphicsState();	
+}
+
+/**
+ * Returns the maximum value which the receiver will allow.
+ *
+ * @return the maximum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMaximum () {
+	checkWidget();
+	return (int)((NSProgressIndicator)view).maxValue();
+}
+
+/**
+ * Returns the minimum value which the receiver will allow.
+ *
+ * @return the minimum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMinimum () {
+	checkWidget();
+	return (int)((NSProgressIndicator)view).minValue();
+}
+
+/**
+ * Returns the single 'selection' that is the receiver's position.
+ *
+ * @return the selection
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelection () {
+	checkWidget();
+    return (int)((NSProgressIndicator)view).doubleValue();
+}
+
+/**
+ * Returns the state of the receiver. The value will be one of:
+ * <ul>
+ * 	<li>{@link SWT#NORMAL}</li>
+ * 	<li>{@link SWT#ERROR}</li>
+ * 	<li>{@link SWT#PAUSED}</li>
+ * </ul>
+ *
+ * @return the state 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public int getState () {
+	checkWidget ();
+	return SWT.NORMAL;
+}
+
+/**
+ * Sets the maximum value that the receiver will allow.  This new
+ * value will be ignored if it is not greater than the receiver's current
+ * minimum value.  If the new maximum is applied then the receiver's
+ * selection value will be adjusted if necessary to fall within its new range.
+ *
+ * @param value the new maximum, which must be greater than the current minimum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMaximum (int value) {
+	checkWidget();
+	int minimum = (int)((NSProgressIndicator)view).minValue();
+	if (value <= minimum) return;
+	((NSProgressIndicator)view).setMaxValue(value);
+	int selection = (int)((NSProgressIndicator)view).doubleValue();
+	int newSelection = Math.min (selection, value);
+	if (selection != newSelection) {
+		((NSProgressIndicator)view).setDoubleValue(newSelection);
+	}
+}
+
+/**
+ * Sets the minimum value that the receiver will allow.  This new
+ * value will be ignored if it is negative or is not less than the receiver's
+ * current maximum value.  If the new minimum is applied then the receiver's
+ * selection value will be adjusted if necessary to fall within its new range.
+ *
+ * @param value the new minimum, which must be nonnegative and less than the current maximum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMinimum (int value) {
+	checkWidget();
+	int maximum =  (int)((NSProgressIndicator)view).maxValue();
+	if (!(0 <= value && value < maximum)) return;
+	((NSProgressIndicator)view).setMinValue(value);
+	int selection = (int)((NSProgressIndicator)view).doubleValue();
+	int newSelection = Math.max (selection, value);
+	if (selection != newSelection) {
+		((NSProgressIndicator)view).setDoubleValue(newSelection);
+	}
+}
+
+/**
+ * Sets the single 'selection' that is the receiver's
+ * position to the argument which must be greater than or equal
+ * to zero.
+ *
+ * @param value the new selection (must be zero or greater)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (int value) {
+	checkWidget();
+	((NSProgressIndicator)view).setDoubleValue(value);
+	/*
+	* Feature in Cocoa.  The progress bar does
+	* not redraw right away when a value is
+	* changed.  This is not strictly incorrect
+	* but unexpected.  The fix is to force all
+	* outstanding redraws to be delivered.
+	*/
+	update(false);
+}
+
+/**
+ * Sets the state of the receiver. The state must be one of these values:
+ * <ul>
+ * 	<li>{@link SWT#NORMAL}</li>
+ * 	<li>{@link SWT#ERROR}</li>
+ * 	<li>{@link SWT#PAUSED}</li>
+ * </ul>
+ *
+ * @param state the new state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public void setState (int state) {
+	checkWidget ();
+	//NOT IMPLEMENTED
+}
+
+void releaseWidget () {
+	super.releaseWidget();
+	if (visiblePath != null) visiblePath.release();
+	visiblePath = null;
+}
+
+void resetVisibleRegion () {
+	super.resetVisibleRegion ();
+	if (visiblePath != null) visiblePath.release();
+	visiblePath = null;
+}
+
+void viewDidMoveToWindow(int /*long*/ id, int /*long*/ sel) {
+	/*
+	 * Bug in Cocoa. An indeterminate progress indicator doesn't start animating until it is in
+	 * a visible window.  Workaround is to catch when the bar has been added to a window and start
+	 * the animation there.
+	 */
+	if (view.window() != null) {
+		if ((style & SWT.INDETERMINATE) != 0) {
+			((NSProgressIndicator)view).startAnimation(null);
+		}
+	}
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Sash.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Sash.java
new file mode 100755
index 0000000..dd1454a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Sash.java
@@ -0,0 +1,478 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.accessibility.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of the receiver represent a selectable user interface object
+ * that allows the user to drag a rubber banded outline of the sash within
+ * the parent control.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>HORIZONTAL, VERTICAL, SMOOTH</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
+ * </p><p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#sash">Sash snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Sash extends Control {
+	Cursor sizeCursor;
+	boolean dragging;
+	int lastX, lastY, startX, startY;
+	private final static int INCREMENT = 1;
+	private final static int PAGE_INCREMENT = 9;
+	NSArray accessibilityAttributes = null;
+	
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#HORIZONTAL
+ * @see SWT#VERTICAL
+ * @see SWT#SMOOTH
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Sash (Composite parent, int style) {
+	super (parent, checkStyle (style));
+	int cursorStyle = (style & SWT.VERTICAL) != 0 ? SWT.CURSOR_SIZEWE : SWT.CURSOR_SIZENS;
+	sizeCursor = new Cursor (display, cursorStyle);
+}
+
+int /*long*/ accessibilityAttributeNames(int /*long*/ id, int /*long*/ sel) {
+	if (accessibilityAttributes == null) {
+		NSMutableArray ourAttributes = NSMutableArray.arrayWithCapacity(10);
+		ourAttributes.addObject(OS.NSAccessibilityRoleAttribute);
+		ourAttributes.addObject(OS.NSAccessibilityRoleDescriptionAttribute);
+		ourAttributes.addObject(OS.NSAccessibilityParentAttribute);
+		ourAttributes.addObject(OS.NSAccessibilityPositionAttribute);
+		ourAttributes.addObject(OS.NSAccessibilitySizeAttribute);
+		ourAttributes.addObject(OS.NSAccessibilityWindowAttribute);
+		ourAttributes.addObject(OS.NSAccessibilityTopLevelUIElementAttribute);
+		ourAttributes.addObject(OS.NSAccessibilityFocusedAttribute);
+		ourAttributes.addObject(OS.NSAccessibilityValueAttribute);
+		ourAttributes.addObject(OS.NSAccessibilityMaxValueAttribute);
+		ourAttributes.addObject(OS.NSAccessibilityMinValueAttribute);
+		// The accessibility documentation says that these next two are optional, but the
+		// Accessibility Verifier says they are required.
+		ourAttributes.addObject(OS.NSAccessibilityNextContentsAttribute);
+		ourAttributes.addObject(OS.NSAccessibilityPreviousContentsAttribute);
+		ourAttributes.addObject(OS.NSAccessibilityOrientationAttribute);
+
+		if (accessible != null) {
+			// See if the accessible will override or augment the standard list.
+			// Help, title, and description can be overridden.
+			NSMutableArray extraAttributes = NSMutableArray.arrayWithCapacity(3);
+			extraAttributes.addObject(OS.NSAccessibilityHelpAttribute);
+			extraAttributes.addObject(OS.NSAccessibilityDescriptionAttribute);
+			extraAttributes.addObject(OS.NSAccessibilityTitleAttribute);
+
+			for (int i = (int)/*64*/extraAttributes.count() - 1; i >= 0; i--) {
+				NSString attribute = new NSString(extraAttributes.objectAtIndex(i).id);
+				if (accessible.internal_accessibilityAttributeValue(attribute, ACC.CHILDID_SELF) != null) {
+					ourAttributes.addObject(extraAttributes.objectAtIndex(i));
+				}
+			}
+		}
+
+		accessibilityAttributes = ourAttributes;
+		accessibilityAttributes.retain();
+	}
+	
+	return accessibilityAttributes.id;
+}
+
+int /*long*/ accessibilityAttributeValue(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	int /*long*/ returnValue = 0;
+	NSString attributeName = new NSString(arg0);
+	
+	if (accessible != null) {
+		id returnObject = accessible.internal_accessibilityAttributeValue(attributeName, ACC.CHILDID_SELF);
+		
+		if (returnObject != null) returnValue = returnObject.id;
+	}
+
+	if (returnValue != 0) return returnValue;
+
+	if (attributeName.isEqualToString (OS.NSAccessibilityRoleAttribute) || attributeName.isEqualToString (OS.NSAccessibilityRoleDescriptionAttribute)) {
+		NSString roleText = OS.NSAccessibilitySplitterRole;
+
+		if (attributeName.isEqualToString (OS.NSAccessibilityRoleAttribute)) {
+			return roleText.id;
+		} else { // NSAccessibilityRoleDescriptionAttribute
+			return OS.NSAccessibilityRoleDescription (roleText.id, 0);
+		}
+	} else if (attributeName.isEqualToString (OS.NSAccessibilityEnabledAttribute)) {
+		return NSNumber.numberWithBool(isEnabled()).id;
+	} else if (attributeName.isEqualToString (OS.NSAccessibilityOrientationAttribute)) {
+		NSString orientation = (style & SWT.VERTICAL) != 0 ? OS.NSAccessibilityVerticalOrientationValue : OS.NSAccessibilityHorizontalOrientationValue;
+		return orientation.id;
+	} else if (attributeName.isEqualToString (OS.NSAccessibilityValueAttribute)) {
+		Point location = getLocation();
+		int value = (style & SWT.VERTICAL) != 0 ? location.x : location.y;
+		return NSNumber.numberWithInt(value).id;
+	} else if (attributeName.isEqualToString (OS.NSAccessibilityMaxValueAttribute)) {
+		NSRect parentBounds = view.bounds();
+		float /*double*/ maxValue = (style & SWT.VERTICAL) != 0 ?
+				parentBounds.width :
+				parentBounds.height;
+		return NSNumber.numberWithInt((int)maxValue).id;
+	} else if (attributeName.isEqualToString (OS.NSAccessibilityMinValueAttribute)) {
+		return NSNumber.numberWithInt(0).id;
+	} else if (attributeName.isEqualToString (OS.NSAccessibilityNextContentsAttribute)) {
+		Control[] children =  parent._getChildren();
+		Control nextView = null;
+		for (int i = 0; i < children.length; i++) {
+			if (children[i] == this) {
+				if (i < children.length - 1) {
+					nextView = children[i + 1];
+					break;
+				}
+			}
+		}
+		
+		if (nextView != null) 
+			return NSArray.arrayWithObject(nextView.view).id;
+		else
+			return NSArray.array().id;
+	} else if (attributeName.isEqualToString (OS.NSAccessibilityPreviousContentsAttribute)) {
+		Control[] children =  parent._getChildren();
+		Control nextView = null;
+		for (int i = 0; i < children.length; i++) {
+			if (children[i] == this) {
+				if (i > 0) {
+					nextView = children[i - 1];
+					break;
+				}
+			}
+		}
+		
+		if (nextView != null) 
+			return NSArray.arrayWithObject(nextView.view).id;
+		else
+			return NSArray.array().id;
+	}
+
+	return super.accessibilityAttributeValue(id, sel, arg0);
+}
+
+boolean accessibilityIsIgnored(int /*long*/ id, int /*long*/ sel) {
+	return false;	
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * When <code>widgetSelected</code> is called, the x, y, width, and height fields of the event object are valid.
+ * If the receiver is being dragged, the event object detail field contains the value <code>SWT.DRAG</code>.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the control is selected by the user
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener(SelectionListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener(listener);
+	addListener(SWT.Selection,typedListener);
+	addListener(SWT.DefaultSelection,typedListener);
+}
+
+static int checkStyle (int style) {
+	/*
+	* Macintosh only supports smooth dragging.
+	*/
+	style |= SWT.SMOOTH;
+	return checkBits (style, SWT.HORIZONTAL, SWT.VERTICAL, 0, 0, 0, 0);
+}
+
+boolean becomeFirstResponder (int /*long*/ id, int /*long*/ sel) {
+	boolean result = super.becomeFirstResponder(id, sel);
+	NSRect frame = view.frame();
+	lastX = (int)frame.x;
+	lastY = (int)frame.y;
+	return result;
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget();
+	int width = 0, height = 0;
+	if ((style & SWT.HORIZONTAL) != 0) {
+		width += DEFAULT_WIDTH;  height += 5;
+	} else {
+		width += 5; height += DEFAULT_HEIGHT;
+	}
+	if (wHint != SWT.DEFAULT) width = wHint;
+	if (hHint != SWT.DEFAULT) height = hHint;
+	return new Point (width, height);
+}
+
+void createHandle () {
+	state |= THEME_BACKGROUND;
+	NSView widget = (NSView)new SWTView().alloc();
+	widget.init ();
+	view = widget;
+}
+
+void drawBackground (int /*long*/ id, NSGraphicsContext context, NSRect rect) {
+	if (id != view.id) return;
+	fillBackground (view, context, rect, -1);
+}
+
+Cursor findCursor () {
+	Cursor cursor = super.findCursor ();
+	if (cursor == null)	{
+		int cursorType = (style & SWT.HORIZONTAL) != 0 ? SWT.CURSOR_SIZENS : SWT.CURSOR_SIZEWE;
+		cursor = display.getSystemCursor (cursorType);
+	}
+	return cursor;
+}
+
+boolean sendKeyEvent(NSEvent nsEvent, int type) {
+	super.sendKeyEvent (nsEvent, type);
+	if (type == SWT.KeyDown) {
+		int keyCode = nsEvent.keyCode();
+		switch (keyCode) {
+			case 126: /* Up arrow */
+			case 123: /* Left arrow */
+			case 125: /* Down arrow */
+			case 124: /* Right arrow */ {
+				int xChange = 0, yChange = 0;
+				int stepSize = PAGE_INCREMENT;
+				int /*long*/ modifiers = nsEvent.modifierFlags();
+				if ((modifiers & OS.NSControlKeyMask) != 0) stepSize = INCREMENT;
+				if ((style & SWT.VERTICAL) != 0) {
+					if (keyCode == 126 || keyCode == 125) break;
+					xChange = keyCode == 123 ? -stepSize : stepSize;
+				} else {
+					if (keyCode == 123 || keyCode  == 124) break;
+					yChange = keyCode == 126 ? -stepSize : stepSize;
+				}
+				
+				Rectangle bounds = getBounds ();
+				int width = bounds.width, height = bounds.height;
+				Rectangle parentBounds = parent.getBounds ();
+				int parentWidth = parentBounds.width;
+				int parentHeight = parentBounds.height;
+				int newX = lastX, newY = lastY;
+				if ((style & SWT.VERTICAL) != 0) {
+					newX = Math.min (Math.max (0, lastX + xChange), parentWidth - width);
+				} else {
+					newY = Math.min (Math.max (0, lastY + yChange), parentHeight - height);
+				}
+				if (newX == lastX && newY == lastY) return true;
+				Event event = new Event ();
+				event.x = newX;
+				event.y = newY;
+				event.width = width;
+				event.height = height;
+				sendEvent (SWT.Selection, event);
+				if (isDisposed ()) break;
+				if (event.doit) {
+					setBounds (event.x, event.y, width, height);
+					if (isDisposed ()) break;
+					lastX = event.x;
+					lastY = event.y;
+					if (isDisposed ()) return false;
+					int cursorX = event.x, cursorY = event.y;
+					if ((style & SWT.VERTICAL) != 0) {
+						cursorY += height / 2;
+					} else {
+						cursorX += width / 2;
+					}
+					display.setCursorLocation (parent.toDisplay (cursorX, cursorY));
+				}
+				break;
+			}
+		}
+	}
+	return true;
+}
+
+void mouseDown(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	//TODO use sendMouseEvent
+	super.mouseDown(id, sel, theEvent);
+	if (isDisposed()) return;
+	NSEvent nsEvent = new NSEvent(theEvent);
+	if (nsEvent.clickCount() != 1) return;
+	NSPoint location = nsEvent.locationInWindow();
+	NSPoint point = view.convertPoint_fromView_(location, null);
+	startX = (int)point.x;
+	startY = (int)point.y;
+	NSRect frame = view.frame();
+	Event event = new Event ();
+	event.x = (int)frame.x;
+	event.y = (int)frame.y;
+	event.width = (int)frame.width;
+	event.height = (int)frame.height;
+	sendEvent (SWT.Selection, event);
+	if (isDisposed ()) return;
+	if (event.doit) {
+		lastX = event.x;
+		lastY = event.y;
+		dragging = true;
+		setLocation(event.x, event.y);
+	}
+}
+
+boolean mouseEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent, int type) {
+	super.mouseEvent (id, sel, theEvent, type);
+	return new NSEvent (theEvent).type () != OS.NSLeftMouseDown;
+}
+
+void mouseDragged(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	//TODO use sendMouseEvent
+	super.mouseDragged(id, sel, theEvent);
+	if (isDisposed()) return;
+	if (!dragging) return;
+	NSEvent nsEvent = new NSEvent(theEvent);
+	NSPoint location = nsEvent.locationInWindow();
+	NSPoint point = view.convertPoint_fromView_(location, null);
+	NSRect frame = view.frame();
+	NSRect parentFrame = parent.topView().frame();
+	int newX = lastX, newY = lastY;
+	if ((style & SWT.VERTICAL) != 0) {
+		newX = Math.min (Math.max (0, (int)(point.x + frame.x - startX)), (int)(parentFrame.width - frame.width));
+	} else {
+		newY = Math.min (Math.max (0, (int)(point.y + frame.y - startY)), (int)(parentFrame.height - frame.height));
+	}
+	if (newX == lastX && newY == lastY) return;
+	Event event = new Event ();
+	event.x = newX;
+	event.y = newY;
+	event.width = (int)frame.width;
+	event.height = (int)frame.height;
+	sendEvent (SWT.Selection, event);
+	if (isDisposed ()) return;
+	if (event.doit) {
+		lastX = event.x;
+		lastY = event.y;
+		setBounds (event.x, event.y, (int)frame.width, (int)frame.height);
+	}
+}
+
+void mouseUp(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	//TODO use sendMouseEvent
+	super.mouseUp(id, sel, theEvent);
+	if (isDisposed()) return;
+	if (!dragging) return;
+	dragging = false;
+	NSRect frame = view.frame();
+	Event event = new Event ();
+	event.x = lastX;
+	event.y = lastY;
+	event.width = (int)frame.width;
+	event.height = (int)frame.height;
+	sendEvent (SWT.Selection, event);
+	if (isDisposed ()) return;
+	if (event.doit) {
+		setBounds (event.x, event.y, (int)frame.width, (int)frame.height);
+	}
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (accessibilityAttributes != null) accessibilityAttributes.release();
+	accessibilityAttributes = null;
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	if (sizeCursor != null) sizeCursor.dispose ();
+	sizeCursor = null;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener(SelectionListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook(SWT.Selection, listener);
+	eventTable.unhook(SWT.DefaultSelection,listener);
+}
+
+void superKeyDown (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+}
+
+void superKeyUp (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+}
+
+int traversalCode (int key, NSEvent theEvent) {
+	return 0;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scale.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scale.java
new file mode 100755
index 0000000..2d120fe
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scale.java
@@ -0,0 +1,362 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.cocoa.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of the receiver represent a selectable user
+ * interface object that present a range of continuous
+ * numeric values.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>HORIZONTAL, VERTICAL</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
+ * </p><p>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#scale">Scale snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Scale extends Control {
+	int increment = 1;
+	int pageIncrement = 10;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#HORIZONTAL
+ * @see SWT#VERTICAL
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Scale (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the user changes the receiver's value, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is called when the user changes the receiver's value.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ */
+public void addSelectionListener(SelectionListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener(listener);
+	addListener(SWT.Selection,typedListener);
+	addListener(SWT.DefaultSelection,typedListener);
+}
+
+static int checkStyle (int style) {
+	return checkBits (style, SWT.HORIZONTAL, SWT.VERTICAL, 0, 0, 0, 0);
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget();
+	NSSlider widget = (NSSlider)view;
+	float /*double*/ thickness = widget.knobThickness();
+	int width = DEFAULT_WIDTH, height = DEFAULT_HEIGHT;
+	if ((style & SWT.HORIZONTAL) != 0) {		
+		height = (int)Math.ceil(thickness);
+		width = height * 10;
+	} else {
+		width = (int)Math.ceil(thickness);
+		height = width * 10;
+	}
+	if (wHint != SWT.DEFAULT) width = wHint;
+	if (hHint != SWT.DEFAULT) height = hHint;
+	return new Point (width, height);
+}
+
+void createHandle () {
+	state |= THEME_BACKGROUND;
+	NSSlider widget = (NSSlider)new SWTSlider().alloc();
+	widget.init();
+	widget.setMaxValue(100);
+	widget.setTarget(widget);
+	widget.setAction(OS.sel_sendSelection);
+	view = widget;
+}
+
+NSFont defaultNSFont () {
+	return display.sliderFont;
+}
+
+void deregister() {
+	super.deregister();
+	display.removeWidget(((NSControl)view).cell());
+}
+
+
+/**
+ * Returns the amount that the receiver's value will be
+ * modified by when the up/down (or right/left) arrows
+ * are pressed.
+ *
+ * @return the increment
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getIncrement () {
+	checkWidget();
+	return increment;
+}
+
+/**
+ * Returns the maximum value which the receiver will allow.
+ *
+ * @return the maximum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMaximum () {
+	checkWidget();
+	return (int)((NSSlider)view).maxValue();
+}
+
+/**
+ * Returns the minimum value which the receiver will allow.
+ *
+ * @return the minimum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMinimum () {
+	checkWidget();
+	return (int)((NSSlider)view).minValue();
+}
+
+/**
+ * Returns the amount that the receiver's value will be
+ * modified by when the page increment/decrement areas
+ * are selected.
+ *
+ * @return the page increment
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getPageIncrement () {
+	checkWidget();
+    return pageIncrement;
+}
+
+/**
+ * Returns the 'selection', which is the receiver's position.
+ *
+ * @return the selection
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelection () {
+	checkWidget();
+    return (int)((NSSlider)view).doubleValue();
+}
+
+void register() {
+	super.register();
+	display.addWidget(((NSControl)view).cell(), this);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the user changes the receiver's value.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener(SelectionListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook(SWT.Selection, listener);
+	eventTable.unhook(SWT.DefaultSelection,listener);
+}
+
+void sendSelection () {
+	NSEvent currEvent = NSApplication.sharedApplication().currentEvent();
+	
+	if (currEvent.type() != OS.NSLeftMouseUp)
+		postEvent (SWT.Selection);
+}
+
+/**
+ * Sets the amount that the receiver's value will be
+ * modified by when the up/down (or right/left) arrows
+ * are pressed to the argument, which must be at least 
+ * one.
+ *
+ * @param increment the new increment (must be greater than zero)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setIncrement (int value) {
+	checkWidget();
+	if (value < 1) return;
+	increment = value;
+}
+
+/**
+ * Sets the maximum value that the receiver will allow.  This new
+ * value will be ignored if it is not greater than the receiver's current
+ * minimum value.  If the new maximum is applied then the receiver's
+ * selection value will be adjusted if necessary to fall within its new range.
+ *
+ * @param value the new maximum, which must be greater than the current minimum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMaximum (int value) {
+	checkWidget();
+	int minimum = (int)((NSSlider)view).minValue();
+	if (value <= minimum) return;
+	((NSSlider)view).setMaxValue(value);
+}
+
+/**
+ * Sets the minimum value that the receiver will allow.  This new
+ * value will be ignored if it is negative or is not less than the receiver's
+ * current maximum value.  If the new minimum is applied then the receiver's
+ * selection value will be adjusted if necessary to fall within its new range.
+ *
+ * @param value the new minimum, which must be nonnegative and less than the current maximum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMinimum (int value) {
+	checkWidget();
+	int maximum = (int)((NSSlider)view).maxValue();
+	if (!(0 <= value && value < maximum)) return;
+	((NSSlider)view).setMinValue(value);
+}
+
+/**
+ * Sets the amount that the receiver's value will be
+ * modified by when the page increment/decrement areas
+ * are selected to the argument, which must be at least
+ * one.
+ *
+ * @param pageIncrement the page increment (must be greater than zero)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setPageIncrement (int value) {
+	checkWidget();
+	if (value < 1) return;
+	pageIncrement = value;
+}
+
+/**
+ * Sets the 'selection', which is the receiver's value,
+ * to the argument which must be greater than or equal to zero.
+ *
+ * @param value the new selection (must be zero or greater)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (int value) {
+	checkWidget();
+	((NSSlider)view).setDoubleValue(value);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ScrollBar.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ScrollBar.java
new file mode 100755
index 0000000..2a9fee5
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ScrollBar.java
@@ -0,0 +1,685 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+ 
+import org.eclipse.swt.internal.cocoa.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class are selectable user interface
+ * objects that represent a range of positive, numeric values. 
+ * <p>
+ * At any given moment, a given scroll bar will have a 
+ * single 'selection' that is considered to be its
+ * value, which is constrained to be within the range of
+ * values the scroll bar represents (that is, between its
+ * <em>minimum</em> and <em>maximum</em> values).
+ * </p><p>
+ * Typically, scroll bars will be made up of five areas:
+ * <ol>
+ * <li>an arrow button for decrementing the value</li>
+ * <li>a page decrement area for decrementing the value by a larger amount</li>
+ * <li>a <em>thumb</em> for modifying the value by mouse dragging</li>
+ * <li>a page increment area for incrementing the value by a larger amount</li>
+ * <li>an arrow button for incrementing the value</li>
+ * </ol>
+ * Based on their style, scroll bars are either <code>HORIZONTAL</code>
+ * (which have a left facing button for decrementing the value and a
+ * right facing button for incrementing it) or <code>VERTICAL</code>
+ * (which have an upward facing button for decrementing the value
+ * and a downward facing buttons for incrementing it).
+ * </p><p>
+ * On some platforms, the size of the scroll bar's thumb can be
+ * varied relative to the magnitude of the range of values it
+ * represents (that is, relative to the difference between its
+ * maximum and minimum values). Typically, this is used to
+ * indicate some proportional value such as the ratio of the
+ * visible area of a document to the total amount of space that
+ * it would take to display it. SWT supports setting the thumb
+ * size even if the underlying platform does not, but in this
+ * case the appearance of the scroll bar will not change.
+ * </p><p>
+ * Scroll bars are created by specifying either <code>H_SCROLL</code>,
+ * <code>V_SCROLL</code> or both when creating a <code>Scrollable</code>.
+ * They are accessed from the <code>Scrollable</code> using
+ * <code>getHorizontalBar</code> and <code>getVerticalBar</code>.
+ * </p><p>
+ * Note: Scroll bars are not Controls.  On some platforms, scroll bars
+ * that appear as part of some standard controls such as a text or list
+ * have no operating system resources and are not children of the control.
+ * For this reason, scroll bars are treated specially.  To create a control
+ * that looks like a scroll bar but has operating system resources, use
+ * <code>Slider</code>. 
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>HORIZONTAL, VERTICAL</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see Slider
+ * @see Scrollable
+ * @see Scrollable#getHorizontalBar
+ * @see Scrollable#getVerticalBar
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class ScrollBar extends Widget {
+	NSScroller view;
+	Scrollable parent;
+	int minimum, maximum = 100, thumb = 10;
+	int increment = 1;
+	int pageIncrement = 10;
+	id target;
+	int /*long*/ actionSelector;;
+
+ScrollBar () {
+	/* Do nothing */
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the user changes the receiver's value, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * When <code>widgetSelected</code> is called, the event object detail field contains one of the following values:
+ * <code>SWT.NONE</code> - for the end of a drag.
+ * <code>SWT.DRAG</code>.
+ * <code>SWT.HOME</code>.
+ * <code>SWT.END</code>.
+ * <code>SWT.ARROW_DOWN</code>.
+ * <code>SWT.ARROW_UP</code>.
+ * <code>SWT.PAGE_DOWN</code>.
+ * <code>SWT.PAGE_UP</code>.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the user changes the receiver's value
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener(SelectionListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener(listener);
+	addListener(SWT.Selection,typedListener);
+	addListener(SWT.DefaultSelection,typedListener);
+}
+
+static int checkStyle (int style) {
+	return checkBits (style, SWT.HORIZONTAL, SWT.VERTICAL, 0, 0, 0, 0);
+}
+
+void deregister () {
+	super.deregister ();
+	display.removeWidget (view);
+}
+
+boolean getDrawing () {
+	return parent.getDrawing ();
+}
+
+/**
+ * Returns <code>true</code> if the receiver is enabled, and
+ * <code>false</code> otherwise. A disabled control is typically
+ * not selectable from the user interface and draws with an
+ * inactive or "grayed" look.
+ *
+ * @return the receiver's enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #isEnabled
+ */
+public boolean getEnabled () {
+	checkWidget();
+	return (state & DISABLED) == 0;
+}
+
+/**
+ * Returns the amount that the receiver's value will be
+ * modified by when the up/down (or right/left) arrows
+ * are pressed.
+ *
+ * @return the increment
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getIncrement () {
+	checkWidget();
+    return increment;
+}
+
+/**
+ * Returns the maximum value which the receiver will allow.
+ *
+ * @return the maximum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMaximum () {
+	checkWidget();
+	return maximum;
+}
+
+/**
+ * Returns the minimum value which the receiver will allow.
+ *
+ * @return the minimum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMinimum () {
+	checkWidget();
+	return minimum;
+}
+
+/**
+ * Returns the amount that the receiver's value will be
+ * modified by when the page increment/decrement areas
+ * are selected.
+ *
+ * @return the page increment
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getPageIncrement () {
+	checkWidget();
+    return pageIncrement;
+}
+
+/**
+ * Returns the receiver's parent, which must be a Scrollable.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Scrollable getParent () {
+	checkWidget ();
+	return parent;
+}
+
+/**
+ * Returns the single 'selection' that is the receiver's value.
+ *
+ * @return the selection
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelection () {
+	checkWidget();
+	NSScroller widget = (NSScroller)view;
+	double value = widget.doubleValue();
+    return (int)(0.5f + ((maximum - thumb - minimum) * value + minimum));
+}
+
+/**
+ * Returns a point describing the receiver's size. The
+ * x coordinate of the result is the width of the receiver.
+ * The y coordinate of the result is the height of the
+ * receiver.
+ *
+ * @return the receiver's size
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Point getSize () {
+	checkWidget();
+	NSRect rect = ((NSScroller)view).frame();
+	return new Point((int)rect.width, (int)rect.height);
+}
+
+/**
+ * Returns the size of the receiver's thumb relative to the
+ * difference between its maximum and minimum values.
+ *
+ * @return the thumb value
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ScrollBar
+ */
+public int getThumb () {
+	checkWidget();
+	return thumb;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is visible, and
+ * <code>false</code> otherwise.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, this method
+ * may still indicate that it is considered visible even though
+ * it may not actually be showing.
+ * </p>
+ *
+ * @return the receiver's visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getVisible () {
+	checkWidget();
+	return (state & HIDDEN) == 0;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is enabled and all
+ * of the receiver's ancestors are enabled, and <code>false</code>
+ * otherwise. A disabled control is typically not selectable from the
+ * user interface and draws with an inactive or "grayed" look.
+ *
+ * @return the receiver's enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #getEnabled
+ */
+public boolean isEnabled () {
+	checkWidget();
+	return getEnabled () && parent.isEnabled ();
+}
+
+boolean isDrawing () {
+	return getDrawing() && parent.isDrawing ();
+}
+
+/**
+ * Returns <code>true</code> if the receiver is visible and all
+ * of the receiver's ancestors are visible and <code>false</code>
+ * otherwise.
+ *
+ * @return the receiver's visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getVisible
+ */
+public boolean isVisible () {
+	checkWidget();
+	return getVisible () && parent.isVisible ();
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the user changes the receiver's value.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener(SelectionListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook(SWT.Selection, listener);
+	eventTable.unhook(SWT.DefaultSelection,listener);
+}
+
+void register () {
+	super.register ();
+	display.addWidget (view, this);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (view != null) view.release();
+	view = null;
+}
+
+void releaseParent () {
+	super.releaseParent ();
+	if (parent.horizontalBar == this) parent.horizontalBar = null;
+	if (parent.verticalBar == this) parent.verticalBar = null;
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	parent = null;
+}
+
+void sendSelection () {
+	int value = 0;
+	if (target != null) {
+		view.sendAction(actionSelector, target);
+	} else {
+		value = getSelection ();
+	}
+	Event event = new Event();
+	int hitPart = (int)/*64*/((NSScroller)view).hitPart();
+	switch (hitPart) {
+	    case OS.NSScrollerDecrementLine:
+	        value -= increment;
+	        event.detail = SWT.ARROW_UP;
+	        break;
+	    case OS.NSScrollerDecrementPage:
+	        value -= pageIncrement;
+	        event.detail = SWT.PAGE_UP;
+	        break;
+	    case OS.NSScrollerIncrementLine:
+	        value += increment;
+	        event.detail = SWT.ARROW_DOWN;
+	        break;
+	    case OS.NSScrollerIncrementPage:
+	        value += pageIncrement;
+	        event.detail = SWT.PAGE_DOWN;
+	        break;
+	    case OS.NSScrollerKnob:
+			event.detail = SWT.DRAG;
+	        break;
+	}
+	if (target == null) {
+		if (event.detail != SWT.DRAG) {
+			setSelection(value);
+		}
+	}
+	sendEvent(SWT.Selection, event);
+}
+
+/**
+ * Sets the amount that the receiver's value will be
+ * modified by when the up/down (or right/left) arrows
+ * are pressed to the argument, which must be at least 
+ * one.
+ *
+ * @param value the new increment (must be greater than zero)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setIncrement (int value) {
+	checkWidget();
+	if (value < 1) return;
+	increment = value;
+}
+
+void setClipRegion (float /*double*/ x, float /*double*/ y) {
+	NSRect frame = view.frame();
+	parent.setClipRegion(frame.x + x, frame.y + y);
+}
+
+/**
+ * Enables the receiver if the argument is <code>true</code>,
+ * and disables it otherwise. A disabled control is typically
+ * not selectable from the user interface and draws with an
+ * inactive or "grayed" look.
+ *
+ * @param enabled the new enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setEnabled (boolean enabled) {
+	checkWidget();
+	if (enabled) {
+		if ((state & DISABLED) == 0) return;
+		state &= ~DISABLED;
+	} else {
+		if ((state & DISABLED) != 0) return;
+		state |= DISABLED;
+	}
+	enableWidget (enabled);
+}
+
+void enableWidget (boolean enabled) {
+	if (!enabled || (state & DISABLED) == 0) {
+		view.setEnabled (enabled);
+	}
+}
+
+/**
+ * Sets the maximum. If this value is negative or less than or
+ * equal to the minimum, the value is ignored. If necessary, first
+ * the thumb and then the selection are adjusted to fit within the
+ * new range.
+ *
+ * @param value the new maximum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMaximum (int value) {
+	checkWidget();
+	if (value < 0) return;
+	if (value <= minimum) return;
+	if (value - minimum < thumb) {
+		thumb = value - minimum;
+	}
+	int selection = Math.max(minimum, Math.min (getSelection (), value - thumb));
+	this.maximum = value;
+	updateBar(selection, minimum, value, thumb);
+}
+
+/**
+ * Sets the minimum value. If this value is negative or greater
+ * than or equal to the maximum, the value is ignored. If necessary,
+ * first the thumb and then the selection are adjusted to fit within
+ * the new range.
+ *
+ * @param value the new minimum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMinimum (int value) {
+	checkWidget();
+	if (value < 0) return;
+	if (value >= maximum) return;
+	if (maximum - value < thumb) {
+		thumb = maximum - value;
+	}
+	int selection = Math.min(maximum - thumb, Math.max (getSelection (), value));
+	this.minimum = value;
+	updateBar(selection, value, maximum, thumb);
+}
+
+/**
+ * Sets the amount that the receiver's value will be
+ * modified by when the page increment/decrement areas
+ * are selected to the argument, which must be at least
+ * one.
+ *
+ * @param value the page increment (must be greater than zero)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setPageIncrement (int value) {
+	checkWidget();
+	if (value < 1) return;
+	pageIncrement = value;
+}
+
+/**
+ * Sets the single <em>selection</em> that is the receiver's
+ * value to the argument which must be greater than or equal
+ * to zero.
+ *
+ * @param selection the new selection (must be zero or greater)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (int value) {
+	checkWidget();
+	updateBar(value, minimum, maximum, thumb);
+}
+
+/**
+ * Sets the size of the receiver's thumb relative to the
+ * difference between its maximum and minimum values.  This new
+ * value will be ignored if it is less than one, and will be
+ * clamped if it exceeds the receiver's current range.
+ *
+ * @param value the new thumb value, which must be at least one and not
+ * larger than the size of the current range
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setThumb (int value) {
+	checkWidget();
+	if (value < 1) return;
+	value = Math.min (value, maximum - minimum);
+	updateBar(getSelection(), minimum, maximum, value);
+	this.thumb = value;
+}
+
+/**
+ * Sets the receiver's selection, minimum value, maximum
+ * value, thumb, increment and page increment all at once.
+ * <p>
+ * Note: This is similar to setting the values individually
+ * using the appropriate methods, but may be implemented in a 
+ * more efficient fashion on some platforms.
+ * </p>
+ *
+ * @param selection the new selection value
+ * @param minimum the new minimum value
+ * @param maximum the new maximum value
+ * @param thumb the new thumb value
+ * @param increment the new increment value
+ * @param pageIncrement the new pageIncrement value
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setValues (int selection, int minimum, int maximum, int thumb, int increment, int pageIncrement) {
+	checkWidget();
+	if (minimum < 0) return;
+	if (maximum < 0) return;
+	if (thumb < 1) return;
+	if (increment < 1) return;
+	if (pageIncrement < 1) return;
+	this.thumb = thumb = Math.min (thumb, maximum - minimum);
+	this.maximum = maximum;
+	this.minimum = minimum;
+	this.increment = increment;
+	this.pageIncrement = pageIncrement;
+	updateBar (selection, minimum, maximum, thumb);
+}
+
+/**
+ * Marks the receiver as visible if the argument is <code>true</code>,
+ * and marks it invisible otherwise. 
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, marking
+ * it visible may not actually cause it to be displayed.
+ * </p>
+ *
+ * @param visible the new visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setVisible (boolean visible) {
+	checkWidget();
+	parent.setScrollBarVisible (this, visible);
+}
+
+void updateBar (int selection, int minimum, int maximum, int thumb) {
+	NSScroller widget = (NSScroller) view;
+	selection = Math.max (minimum, Math.min (maximum - thumb, selection));
+	int range = maximum - thumb - minimum;
+	float fraction = range <= 0 ? 1 : (float) (selection - minimum) / range;
+	float knob = range <= 0 ? 1 : (float) thumb / (maximum - minimum);
+	widget.setFloatValue (fraction, knob);
+	widget.setEnabled (range > 0); 
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scrollable.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scrollable.java
new file mode 100755
index 0000000..4fa782a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Scrollable.java
@@ -0,0 +1,333 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.cocoa.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * This class is the abstract superclass of all classes which
+ * represent controls that have standard scroll bars.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>H_SCROLL, V_SCROLL</dd>
+ * <dt><b>Events:</b>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public abstract class Scrollable extends Control {
+ 	NSScrollView scrollView;
+	ScrollBar horizontalBar, verticalBar;
+	
+Scrollable () {
+	/* Do nothing */
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#H_SCROLL
+ * @see SWT#V_SCROLL
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Scrollable (Composite parent, int style) {
+	super (parent, style);
+}
+
+boolean accessibilityIsIgnored(int /*long*/ id, int /*long*/ sel) {
+	// Always ignore scrollers.
+	if (scrollView != null && id == scrollView.id) return true;
+	return super.accessibilityIsIgnored(id, sel);	
+}
+
+/**
+ * Given a desired <em>client area</em> for the receiver
+ * (as described by the arguments), returns the bounding
+ * rectangle which would be required to produce that client
+ * area.
+ * <p>
+ * In other words, it returns a rectangle such that, if the
+ * receiver's bounds were set to that rectangle, the area
+ * of the receiver which is capable of displaying data
+ * (that is, not covered by the "trimmings") would be the
+ * rectangle described by the arguments (relative to the
+ * receiver's parent).
+ * </p>
+ * 
+ * @param x the desired x coordinate of the client area
+ * @param y the desired y coordinate of the client area
+ * @param width the desired width of the client area
+ * @param height the desired height of the client area
+ * @return the required bounds to produce the given client area
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getClientArea
+ */
+public Rectangle computeTrim (int x, int y, int width, int height) {
+	checkWidget();
+	if (scrollView != null) {
+		NSSize size = new NSSize();
+		size.width = width;
+		size.height = height;
+		int border = hasBorder() ? OS.NSBezelBorder : OS.NSNoBorder;
+		size = NSScrollView.frameSizeForContentSize(size, (style & SWT.H_SCROLL) != 0, (style & SWT.V_SCROLL) != 0, border);
+		width = (int)size.width;
+		height = (int)size.height;
+		NSRect frame = scrollView.contentView().frame();
+		x -= frame.x;
+		y -= frame.y;
+	}
+	return new Rectangle (x, y, width, height);
+}
+
+ScrollBar createScrollBar (int style) {
+	if (scrollView == null) return null;
+	ScrollBar bar = new ScrollBar ();
+	bar.parent = this;
+	bar.style = style;
+	bar.display = display;
+	NSScroller scroller;
+	int /*long*/ actionSelector;
+	NSRect rect = new NSRect();
+	if ((style & SWT.H_SCROLL) != 0) {
+		rect.width = 1;
+	} else {
+		rect.height = 1;
+	}
+	scroller = (NSScroller)new SWTScroller().alloc();
+	scroller.initWithFrame(rect);
+	if ((style & SWT.H_SCROLL) != 0) {
+		scrollView.setHorizontalScroller(scroller);
+		actionSelector = OS.sel_sendHorizontalSelection;
+	} else {
+		scrollView.setVerticalScroller(scroller);
+		actionSelector = OS.sel_sendVerticalSelection;
+	}
+	bar.view = scroller;
+	bar.createJNIRef();
+	bar.register();
+	if ((state & CANVAS) == 0) {
+		bar.target = scroller.target();
+		bar.actionSelector = scroller.action();
+	}
+	scroller.setTarget(scrollView);
+	scroller.setAction(actionSelector);
+	if ((state & CANVAS) != 0) {
+		bar.updateBar(0, 0, 100, 10);
+	}
+	return bar;
+}
+
+void createWidget () {
+	super.createWidget ();
+	if ((style & SWT.H_SCROLL) != 0) horizontalBar = createScrollBar (SWT.H_SCROLL);
+	if ((style & SWT.V_SCROLL) != 0) verticalBar = createScrollBar (SWT.V_SCROLL);
+}
+
+void deregister () {
+	super.deregister ();
+	if (scrollView != null) display.removeWidget (scrollView);
+}
+
+/**
+ * Returns a rectangle which describes the area of the
+ * receiver which is capable of displaying data (that is,
+ * not covered by the "trimmings").
+ * 
+ * @return the client area
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #computeTrim
+ */
+public Rectangle getClientArea () {
+	checkWidget();
+	if (scrollView != null) {
+		NSSize size = scrollView.contentSize();
+		NSClipView contentView = scrollView.contentView();
+		NSRect bounds = contentView.bounds();
+		return new Rectangle((int)bounds.x, (int)bounds.y, (int)size.width, (int)size.height);
+	} else {
+		NSRect rect = view.bounds();
+		return new Rectangle(0, 0, (int)rect.width, (int)rect.height);
+	}
+}
+
+/**
+ * Returns the receiver's horizontal scroll bar if it has
+ * one, and null if it does not.
+ *
+ * @return the horizontal scroll bar (or null)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public ScrollBar getHorizontalBar () {
+	checkWidget();
+	return horizontalBar;
+}
+
+/**
+ * Returns the receiver's vertical scroll bar if it has
+ * one, and null if it does not.
+ *
+ * @return the vertical scroll bar (or null)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public ScrollBar getVerticalBar () {
+	checkWidget();
+	return verticalBar;
+}
+
+boolean hooksKeys () {
+	return hooks (SWT.KeyDown) || hooks (SWT.KeyUp) || hooks (SWT.Traverse);
+}
+
+boolean isEventView (int /*long*/ id) {
+	return id == eventView ().id;
+}
+
+boolean isTrim (NSView view) {
+	if (scrollView != null) {
+		if (scrollView.id == view.id) return true;
+		if (horizontalBar != null && horizontalBar.view.id == view.id) return true;
+		if (verticalBar != null && verticalBar.view.id == view.id) return true;
+	}
+	return super.isTrim (view);
+}
+
+void register () {
+	super.register ();
+	if (scrollView != null) display.addWidget (scrollView, this);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (scrollView != null) scrollView.release();
+	scrollView = null;
+}
+
+void releaseChildren (boolean destroy) {
+	if (horizontalBar != null) {
+		horizontalBar.release (false);
+		horizontalBar = null;
+	}
+	if (verticalBar != null) {
+		verticalBar.release (false);
+		verticalBar = null;
+	}
+	super.releaseChildren (destroy);
+}
+
+void sendHorizontalSelection () {
+	if ((state & CANVAS) == 0 && scrollView != null && visibleRgn == 0) {
+		scrollView.contentView().setCopiesOnScroll(!isObscured());
+	}
+	horizontalBar.sendSelection ();
+}
+
+void sendVerticalSelection () {
+	if ((state & CANVAS) == 0 && scrollView != null && visibleRgn == 0) {
+		scrollView.contentView().setCopiesOnScroll(!isObscured());
+	}
+	verticalBar.sendSelection ();
+}
+
+void enableWidget (boolean enabled) {
+	super.enableWidget (enabled);
+	if (horizontalBar != null) horizontalBar.enableWidget (enabled);
+	if (verticalBar != null) verticalBar.enableWidget (enabled);
+}
+
+boolean setScrollBarVisible (ScrollBar bar, boolean visible) {
+	if (scrollView == null) return false;
+	if ((state & CANVAS) == 0) return false;
+	if (visible) {
+		if ((bar.state & HIDDEN) == 0) return false;
+		bar.state &= ~HIDDEN;
+	} else {
+		if ((bar.state & HIDDEN) != 0) return false;
+		bar.state |= HIDDEN;
+	}
+	if ((bar.style & SWT.HORIZONTAL) != 0) {
+		scrollView.setHasHorizontalScroller (visible);
+	} else {
+		scrollView.setHasVerticalScroller (visible);
+	}
+	bar.sendEvent (visible ? SWT.Show : SWT.Hide);
+	sendEvent (SWT.Resize);
+	return true;
+}
+
+void setZOrder () {
+	super.setZOrder ();
+	if (scrollView != null) scrollView.setDocumentView (view);
+}
+
+NSView topView () {
+	if (scrollView != null) return scrollView;
+	return super.topView ();
+}
+
+void updateCursorRects (boolean enabled) {
+	super.updateCursorRects (enabled);
+	if (scrollView == null) return;
+	updateCursorRects (enabled, scrollView);	
+	NSClipView contentView = scrollView.contentView ();
+	updateCursorRects (enabled, contentView);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Shell.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Shell.java
new file mode 100755
index 0000000..3c2f2e6
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Shell.java
@@ -0,0 +1,1829 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class represent the "windows"
+ * which the desktop or "window manager" is managing.
+ * Instances that do not have a parent (that is, they
+ * are built using the constructor, which takes a 
+ * <code>Display</code> as the argument) are described
+ * as <em>top level</em> shells. Instances that do have
+ * a parent are described as <em>secondary</em> or
+ * <em>dialog</em> shells.
+ * <p>
+ * Instances are always displayed in one of the maximized, 
+ * minimized or normal states:
+ * <ul>
+ * <li>
+ * When an instance is marked as <em>maximized</em>, the
+ * window manager will typically resize it to fill the
+ * entire visible area of the display, and the instance
+ * is usually put in a state where it can not be resized 
+ * (even if it has style <code>RESIZE</code>) until it is
+ * no longer maximized.
+ * </li><li>
+ * When an instance is in the <em>normal</em> state (neither
+ * maximized or minimized), its appearance is controlled by
+ * the style constants which were specified when it was created
+ * and the restrictions of the window manager (see below).
+ * </li><li>
+ * When an instance has been marked as <em>minimized</em>,
+ * its contents (client area) will usually not be visible,
+ * and depending on the window manager, it may be
+ * "iconified" (that is, replaced on the desktop by a small
+ * simplified representation of itself), relocated to a
+ * distinguished area of the screen, or hidden. Combinations
+ * of these changes are also possible.
+ * </li>
+ * </ul>
+ * </p><p>
+ * The <em>modality</em> of an instance may be specified using
+ * style bits. The modality style bits are used to determine
+ * whether input is blocked for other shells on the display.
+ * The <code>PRIMARY_MODAL</code> style allows an instance to block
+ * input to its parent. The <code>APPLICATION_MODAL</code> style
+ * allows an instance to block input to every other shell in the
+ * display. The <code>SYSTEM_MODAL</code> style allows an instance
+ * to block input to all shells, including shells belonging to
+ * different applications.
+ * </p><p>
+ * Note: The styles supported by this class are treated
+ * as <em>HINT</em>s, since the window manager for the
+ * desktop on which the instance is visible has ultimate
+ * control over the appearance and behavior of decorations
+ * and modality. For example, some window managers only
+ * support resizable windows and will always assume the
+ * RESIZE style, even if it is not set. In addition, if a
+ * modality style is not supported, it is "upgraded" to a
+ * more restrictive modality style that is supported. For
+ * example, if <code>PRIMARY_MODAL</code> is not supported,
+ * it would be upgraded to <code>APPLICATION_MODAL</code>.
+ * A modality style may also be "downgraded" to a less
+ * restrictive style. For example, most operating systems
+ * no longer support <code>SYSTEM_MODAL</code> because
+ * it can freeze up the desktop, so this is typically
+ * downgraded to <code>APPLICATION_MODAL</code>.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>BORDER, CLOSE, MIN, MAX, NO_TRIM, RESIZE, TITLE, ON_TOP, TOOL, SHEET</dd>
+ * <dd>APPLICATION_MODAL, MODELESS, PRIMARY_MODAL, SYSTEM_MODAL</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Activate, Close, Deactivate, Deiconify, Iconify</dd>
+ * </dl>
+ * Class <code>SWT</code> provides two "convenience constants"
+ * for the most commonly required style combinations:
+ * <dl>
+ * <dt><code>SHELL_TRIM</code></dt>
+ * <dd>
+ * the result of combining the constants which are required
+ * to produce a typical application top level shell: (that 
+ * is, <code>CLOSE | TITLE | MIN | MAX | RESIZE</code>)
+ * </dd>
+ * <dt><code>DIALOG_TRIM</code></dt>
+ * <dd>
+ * the result of combining the constants which are required
+ * to produce a typical application dialog shell: (that 
+ * is, <code>TITLE | CLOSE | BORDER</code>)
+ * </dd>
+ * </dl>
+ * </p>
+ * <p>
+ * Note: Only one of the styles APPLICATION_MODAL, MODELESS, 
+ * PRIMARY_MODAL and SYSTEM_MODAL may be specified.
+ * </p><p>
+ * IMPORTANT: This class is not intended to be subclassed.
+ * </p>
+ *
+ * @see Decorations
+ * @see SWT
+ * @see <a href="http://www.eclipse.org/swt/snippets/#shell">Shell snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public class Shell extends Decorations {
+	NSWindow window;
+	SWTWindowDelegate windowDelegate;
+	int /*long*/ tooltipOwner, tooltipTag, tooltipUserData;
+	boolean opened, moved, resized, fullScreen, center;
+	Control lastActive;
+	Rectangle normalBounds;
+	boolean keyInputHappened;
+	NSRect currentFrame;
+	NSRect fullScreenFrame;
+	
+	static int DEFAULT_CLIENT_WIDTH = -1;
+	static int DEFAULT_CLIENT_HEIGHT = -1;
+
+/**
+ * Constructs a new instance of this class. This is equivalent
+ * to calling <code>Shell((Display) null)</code>.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ */
+public Shell () {
+	this ((Display) null);
+}
+
+/**
+ * Constructs a new instance of this class given only the style
+ * value describing its behavior and appearance. This is equivalent
+ * to calling <code>Shell((Display) null, style)</code>.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param style the style of control to construct
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ * 
+ * @see SWT#BORDER
+ * @see SWT#CLOSE
+ * @see SWT#MIN
+ * @see SWT#MAX
+ * @see SWT#RESIZE
+ * @see SWT#TITLE
+ * @see SWT#TOOL
+ * @see SWT#NO_TRIM
+ * @see SWT#SHELL_TRIM
+ * @see SWT#DIALOG_TRIM
+ * @see SWT#ON_TOP
+ * @see SWT#MODELESS
+ * @see SWT#PRIMARY_MODAL
+ * @see SWT#APPLICATION_MODAL
+ * @see SWT#SYSTEM_MODAL
+ * @see SWT#SHEET
+ */
+public Shell (int style) {
+	this ((Display) null, style);
+}
+
+/**
+ * Constructs a new instance of this class given only the display
+ * to create it on. It is created with style <code>SWT.SHELL_TRIM</code>.
+ * <p>
+ * Note: Currently, null can be passed in for the display argument.
+ * This has the effect of creating the shell on the currently active
+ * display if there is one. If there is no current display, the 
+ * shell is created on a "default" display. <b>Passing in null as
+ * the display argument is not considered to be good coding style,
+ * and may not be supported in a future release of SWT.</b>
+ * </p>
+ *
+ * @param display the display to create the shell on
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ */
+public Shell (Display display) {
+	this (display, SWT.SHELL_TRIM);
+}
+
+/**
+ * Constructs a new instance of this class given the display
+ * to create it on and a style value describing its behavior
+ * and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p><p>
+ * Note: Currently, null can be passed in for the display argument.
+ * This has the effect of creating the shell on the currently active
+ * display if there is one. If there is no current display, the 
+ * shell is created on a "default" display. <b>Passing in null as
+ * the display argument is not considered to be good coding style,
+ * and may not be supported in a future release of SWT.</b>
+ * </p>
+ *
+ * @param display the display to create the shell on
+ * @param style the style of control to construct
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ * 
+ * @see SWT#BORDER
+ * @see SWT#CLOSE
+ * @see SWT#MIN
+ * @see SWT#MAX
+ * @see SWT#RESIZE
+ * @see SWT#TITLE
+ * @see SWT#TOOL
+ * @see SWT#NO_TRIM
+ * @see SWT#SHELL_TRIM
+ * @see SWT#DIALOG_TRIM
+ * @see SWT#ON_TOP
+ * @see SWT#MODELESS
+ * @see SWT#PRIMARY_MODAL
+ * @see SWT#APPLICATION_MODAL
+ * @see SWT#SYSTEM_MODAL
+ * @see SWT#SHEET
+ */
+public Shell (Display display, int style) {
+	this (display, null, style, 0, false);
+}
+
+Shell (Display display, Shell parent, int style, int /*long*/handle, boolean embedded) {
+	super ();
+	checkSubclass ();
+	if (display == null) display = Display.getCurrent ();
+	if (display == null) display = Display.getDefault ();
+	if (!display.isValidThread ()) {
+		error (SWT.ERROR_THREAD_INVALID_ACCESS);
+	}
+	if (parent != null && parent.isDisposed ()) {
+		error (SWT.ERROR_INVALID_ARGUMENT);	
+	}
+	if (!Display.getSheetEnabled ()) {
+		this.center = parent != null && (style & SWT.SHEET) != 0;
+	}
+	this.style = checkStyle (parent, style);
+	this.parent = parent;
+	this.display = display;
+	if (handle != 0) {
+		if (embedded) {
+			view = new NSView(handle);
+		} else {
+			window = new NSWindow(handle);
+			state |= FOREIGN_HANDLE;
+		}
+	}
+	createWidget ();
+}
+
+/**
+ * Constructs a new instance of this class given only its
+ * parent. It is created with style <code>SWT.DIALOG_TRIM</code>.
+ * <p>
+ * Note: Currently, null can be passed in for the parent.
+ * This has the effect of creating the shell on the currently active
+ * display if there is one. If there is no current display, the 
+ * shell is created on a "default" display. <b>Passing in null as
+ * the parent is not considered to be good coding style,
+ * and may not be supported in a future release of SWT.</b>
+ * </p>
+ *
+ * @param parent a shell which will be the parent of the new instance
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parent is disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ */
+public Shell (Shell parent) {
+	this (parent, SWT.DIALOG_TRIM);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p><p>
+ * Note: Currently, null can be passed in for the parent.
+ * This has the effect of creating the shell on the currently active
+ * display if there is one. If there is no current display, the 
+ * shell is created on a "default" display. <b>Passing in null as
+ * the parent is not considered to be good coding style,
+ * and may not be supported in a future release of SWT.</b>
+ * </p>
+ *
+ * @param parent a shell which will be the parent of the new instance
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parent is disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ * 
+ * @see SWT#BORDER
+ * @see SWT#CLOSE
+ * @see SWT#MIN
+ * @see SWT#MAX
+ * @see SWT#RESIZE
+ * @see SWT#TITLE
+ * @see SWT#NO_TRIM
+ * @see SWT#SHELL_TRIM
+ * @see SWT#DIALOG_TRIM
+ * @see SWT#ON_TOP
+ * @see SWT#TOOL
+ * @see SWT#MODELESS
+ * @see SWT#PRIMARY_MODAL
+ * @see SWT#APPLICATION_MODAL
+ * @see SWT#SYSTEM_MODAL
+ * @see SWT#SHEET
+ */
+public Shell (Shell parent, int style) {
+	this (parent != null ? parent.display : null, parent, style, 0, false);
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new shell
+ * that is not embedded.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Shell</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param display the display for the shell
+ * @param handle the handle for the shell
+ * @return a new shell object containing the specified display and handle
+ * 
+ * @since 3.3
+ */
+public static Shell internal_new (Display display, int /*long*/ handle) {
+	return new Shell (display, null, SWT.NO_TRIM, handle, false);
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new shell
+ * that is 'embedded'.  In this case, the handle represents an NSView
+ * that acts as an embedded SWT Shell in an AWT Canvas.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Shell</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param display the display for the shell
+ * @param handle the handle for the shell
+ * @return a new shell object containing the specified display and handle
+ * 
+ * @since 3.5
+ */
+public static Shell cocoa_new (Display display, int /*long*/ handle) {
+	return new Shell (display, null, SWT.NO_TRIM, handle, true);
+}
+
+static int checkStyle (Shell parent, int style) {
+	style = Decorations.checkStyle (style);
+	style &= ~SWT.TRANSPARENT;
+	int mask = SWT.SYSTEM_MODAL | SWT.APPLICATION_MODAL | SWT.PRIMARY_MODAL;
+	if ((style & SWT.SHEET) != 0) {
+		if (Display.getSheetEnabled ()) {
+			style &= ~(SWT.CLOSE | SWT.TITLE | SWT.MIN | SWT.MAX);
+			if (parent == null) {
+				style &= ~SWT.SHEET;
+				style |= SWT.SHELL_TRIM;
+			}
+		} else {
+			style &= ~SWT.SHEET;
+			style |= parent == null ? SWT.SHELL_TRIM : SWT.DIALOG_TRIM;
+		}
+		if ((style & mask) == 0) {
+			style |= parent == null ? SWT.APPLICATION_MODAL : SWT.PRIMARY_MODAL;
+		}
+	}
+	int bits = style & ~mask;
+	if ((style & SWT.SYSTEM_MODAL) != 0) return bits | SWT.SYSTEM_MODAL;
+	if ((style & SWT.APPLICATION_MODAL) != 0) return bits | SWT.APPLICATION_MODAL;
+	if ((style & SWT.PRIMARY_MODAL) != 0) return bits | SWT.PRIMARY_MODAL;
+	return bits;
+}
+
+boolean accessibilityIsIgnored(int /*long*/ id, int /*long*/ sel) {
+	// The content view of a shell is always ignored.
+	if (id == view.id) return true;
+	return super.accessibilityIsIgnored(id, sel);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when operations are performed on the receiver,
+ * by sending the listener one of the messages defined in the
+ * <code>ShellListener</code> interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ShellListener
+ * @see #removeShellListener
+ */
+public void addShellListener(ShellListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener(SWT.Activate,typedListener);
+	addListener(SWT.Close,typedListener);
+	addListener(SWT.Deactivate,typedListener);
+	addListener(SWT.Iconify,typedListener);
+	addListener(SWT.Deiconify,typedListener);
+}
+
+void becomeKeyWindow (int /*long*/ id, int /*long*/ sel) {
+	Display display = this.display;
+	display.keyWindow = window;
+	super.becomeKeyWindow(id, sel);
+	display.checkFocus();
+	display.keyWindow = null;
+}
+
+void bringToTop (boolean force) {
+	if (getMinimized ()) return;
+	if (force) {
+		forceActive ();
+	} else {
+		setActive ();
+	}
+}
+
+boolean canBecomeKeyWindow (int /*long*/ id, int /*long*/ sel) {
+	if (window.styleMask () == OS.NSBorderlessWindowMask) return true;
+	return super.canBecomeKeyWindow (id, sel);
+}
+
+void checkOpen () {
+	if (!opened) resized = false;
+}
+
+void center () {
+	if (parent == null) return;
+	Rectangle rect = getBounds ();
+	Rectangle parentRect = display.map (parent, null, parent.getClientArea());
+	int x = Math.max (parentRect.x, parentRect.x + (parentRect.width - rect.width) / 2);
+	int y = Math.max (parentRect.y, parentRect.y + (parentRect.height - rect.height) / 2);
+	Rectangle monitorRect = parent.getMonitor ().getClientArea();
+	if (x + rect.width > monitorRect.x + monitorRect.width) {
+		x = Math.max (monitorRect.x, monitorRect.x + monitorRect.width - rect.width);
+	} else {
+		x = Math.max (x, monitorRect.x);
+	}
+	if (y + rect.height > monitorRect.y + monitorRect.height) {
+		y = Math.max (monitorRect.y, monitorRect.y + monitorRect.height - rect.height);
+	} else {
+		y = Math.max (y, monitorRect.y);
+	}
+	setLocation (x, y);
+}
+
+/**
+ * Requests that the window manager close the receiver in
+ * the same way it would be closed when the user clicks on
+ * the "close box" or performs some other platform specific
+ * key or mouse combination that indicates the window
+ * should be removed.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SWT#Close
+ * @see #dispose
+ */
+public void close () {
+	checkWidget();
+	closeWidget ();
+}
+
+void closeWidget () {
+	Event event = new Event ();
+	sendEvent (SWT.Close, event);
+	if (event.doit && !isDisposed ()) dispose ();
+}
+
+public Rectangle computeTrim (int x, int y, int width, int height) {
+	checkWidget();
+	Rectangle trim = super.computeTrim(x, y, width, height);
+	NSRect rect = new NSRect ();
+	rect.x = trim.x;
+	rect.y = trim.y;
+	rect.width = trim.width;
+	rect.height = trim.height;
+	if (window != null) {
+		if (!fixResize()) {
+			rect = window.frameRectForContentRect(rect);
+		}
+	}
+	return new Rectangle ((int)rect.x, (int)rect.y, (int)rect.width, (int)rect.height);
+}
+
+void createHandle () {
+	state |= HIDDEN;
+	if (window == null) {
+		window = (NSWindow) new SWTWindow ().alloc ();
+		int styleMask = OS.NSBorderlessWindowMask;
+		if ((style & SWT.NO_TRIM) == 0) {
+			if ((style & SWT.TITLE) != 0) styleMask |= OS.NSTitledWindowMask;
+			if ((style & SWT.CLOSE) != 0) styleMask |= OS.NSClosableWindowMask;
+			if ((style & SWT.MIN) != 0) styleMask |= OS.NSMiniaturizableWindowMask;
+			if ((style & SWT.MAX) != 0) styleMask |= OS.NSResizableWindowMask;
+			if ((style & SWT.RESIZE) != 0) styleMask |= OS.NSResizableWindowMask;
+		}
+		NSScreen screen = null;
+		NSScreen primaryScreen = new NSScreen(NSScreen.screens().objectAtIndex(0));
+		if (parent != null) screen = parent.getShell().window.screen();
+		if (screen == null) screen = primaryScreen;
+		window = window.initWithContentRect(new NSRect(), styleMask, OS.NSBackingStoreBuffered, false, screen);
+		if ((style & (SWT.NO_TRIM | SWT.BORDER | SWT.SHELL_TRIM)) == 0 || (style & (SWT.TOOL | SWT.SHEET)) != 0) {
+			window.setHasShadow (true);
+		}
+		if ((style & SWT.NO_TRIM) == 0) {
+			NSSize size = window.minSize();
+			size.width = NSWindow.minFrameWidthWithTitle(NSString.stringWith(""), styleMask);
+			window.setMinSize(size);
+		}
+		if (fixResize ()) {
+			if (window.respondsToSelector(OS.sel_setMovable_)) {
+				OS.objc_msgSend(window.id, OS.sel_setMovable_, 0);
+			}
+		}
+		display.cascadeWindow(window, screen);
+		NSRect screenFrame = screen.frame();
+		float /*double*/ width = screenFrame.width * 5 / 8, height = screenFrame.height * 5 / 8;;
+		NSRect frame = window.frame();
+		NSRect primaryFrame = primaryScreen.frame();
+		frame.y = primaryFrame.height - ((primaryFrame.height - (frame.y + frame.height)) + height);
+		frame.width = width;
+		frame.height = height;
+		window.setFrame(frame, false);
+		if ((style & SWT.ON_TOP) != 0) {
+			window.setLevel(OS.NSStatusWindowLevel);
+		}
+		super.createHandle ();
+		topView ().setHidden (true);
+	} else {
+//		int /*long*/ cls = OS.objc_lookUpClass ("SWTWindow");
+//		OS.object_setClass(window.id, cls);
+		state &= ~HIDDEN;
+		//TODO - get the content of the foreign window instead of creating it
+		super.createHandle ();
+		style |= SWT.NO_BACKGROUND;
+	}
+	window.setAcceptsMouseMovedEvents(true);
+	windowDelegate = (SWTWindowDelegate)new SWTWindowDelegate().alloc().init();
+	window.setDelegate(windowDelegate);
+	id id = window.fieldEditor (true, null);
+	if (id != null) {
+		OS.object_setClass (id.id, OS.objc_getClass ("SWTEditorView"));
+	}
+}
+
+void deregister () {
+	super.deregister ();
+	if (window != null) display.removeWidget (window);
+	if (windowDelegate != null) display.removeWidget (windowDelegate);
+}
+
+void destroyWidget () {
+	NSWindow window = this.window;
+	Display display = this.display;
+	boolean sheet = (style & (SWT.SHEET)) != 0;
+	releaseHandle ();
+	if (window != null) {
+		if (sheet) {
+			NSApplication application = NSApplication.sharedApplication();
+			application.endSheet(window, 0);
+		}
+		window.close();
+	}
+	//If another shell is not going to become active, clear the menu bar.
+	if (!display.isDisposed () && display.getShells ().length == 0) {
+		display.setMenuBar (null);
+	}
+}
+
+void drawBackground (int /*long*/ id, NSGraphicsContext context, NSRect rect) {
+	if (id != view.id) return;
+	if (regionPath != null && background == null) {
+		context.saveGraphicsState();
+		NSColor.windowBackgroundColor().setFill();
+		NSBezierPath.fillRect(rect);
+		context.restoreGraphicsState();
+		return;
+	}
+	super.drawBackground (id, context, rect);
+}
+
+Control findBackgroundControl () {
+	return background != null || backgroundImage != null ? this : null;
+}
+
+Composite findDeferredControl () {
+	return layoutCount > 0 ? this : null;
+}
+
+Cursor findCursor () {
+	return cursor;
+}
+
+boolean fixResize () {
+	/*
+	* Feature in Cocoa.  It is not possible to have a resizable window
+	* without the title bar.  The fix is to resize the content view on
+	* top of the title bar.
+	*/
+	if ((style & SWT.NO_TRIM) == 0) {
+		if ((style & SWT.RESIZE) != 0 && (style & (SWT.TITLE | SWT.CLOSE | SWT.MIN | SWT.MAX)) == 0) {
+			return true;
+		}
+	}
+	return false;
+}
+
+void fixShell (Shell newShell, Control control) {
+	if (this == newShell) return;
+	if (control == lastActive) setActiveControl (null);
+}
+
+/**
+ * If the receiver is visible, moves it to the top of the 
+ * drawing order for the display on which it was created 
+ * (so that all other shells on that display, which are not 
+ * the receiver's children will be drawn behind it) and forces 
+ * the window manager to make the shell active.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 2.0
+ * @see Control#moveAbove
+ * @see Control#setFocus
+ * @see Control#setVisible
+ * @see Display#getActiveShell
+ * @see Decorations#setDefaultButton(Button)
+ * @see Shell#open
+ * @see Shell#setActive
+ */
+public void forceActive () {
+	checkWidget ();
+	if (!isVisible()) return;
+	if (window == null) return;
+	makeKeyAndOrderFront ();
+	NSApplication application = NSApplication.sharedApplication ();
+	application.activateIgnoringOtherApps (true);
+}
+
+/**
+ * Returns the receiver's alpha value. The alpha value
+ * is between 0 (transparent) and 255 (opaque).
+ *
+ * @return the alpha value
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public int getAlpha () {
+	checkWidget ();
+	// TODO: Should we support embedded frame alpha?
+	if (window == null) return 255;
+	return (int)(window.alphaValue() * 255);
+}
+
+public Rectangle getBounds () {
+	checkWidget();
+	NSRect frame = (window == null ? view.frame() : window.frame());
+	float /*double*/ y = display.getPrimaryFrame().height - (int)(frame.y + frame.height);
+	return new Rectangle ((int)frame.x, (int)y, (int)frame.width, (int)frame.height);
+}
+
+public Rectangle getClientArea () {
+	checkWidget();
+	NSRect rect;
+	if (window != null) {
+		rect = window.frame();
+		if (!fixResize ()) {
+			rect = window.contentRectForFrameRect(rect);
+		}
+	} else {
+		rect = scrollView != null ? scrollView.frame() : view.frame();
+	}
+	int width = (int)rect.width, height = (int)rect.height;
+	if (scrollView != null) {
+		NSSize size = new NSSize();
+		size.width = width;
+		size.height = height;
+		size = NSScrollView.contentSizeForFrameSize(size, (style & SWT.H_SCROLL) != 0, (style & SWT.V_SCROLL) != 0, OS.NSNoBorder);
+		width = (int)size.width;
+		height = (int)size.height;
+	}
+	return new Rectangle (0, 0, width, height);
+}
+
+/**
+ * Returns <code>true</code> if the receiver is currently
+ * in fullscreen state, and false otherwise. 
+ * <p>
+ *
+ * @return the fullscreen state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.4
+ */
+public boolean getFullScreen () {
+	checkWidget();
+	return fullScreen;
+}
+
+/**
+ * Returns the receiver's input method editor mode. This
+ * will be the result of bitwise OR'ing together one or
+ * more of the following constants defined in class
+ * <code>SWT</code>:
+ * <code>NONE</code>, <code>ROMAN</code>, <code>DBCS</code>, 
+ * <code>PHONETIC</code>, <code>NATIVE</code>, <code>ALPHA</code>.
+ *
+ * @return the IME mode
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SWT
+ */
+public int getImeInputMode () {
+	checkWidget();
+	return SWT.NONE;
+}
+
+public Point getLocation () {
+	checkWidget();
+	// TODO: frame is relative to superview. What does getLocation mean in the embedded case?
+	NSRect frame = (window != null ? window.frame() : view.frame());
+	float /*double*/ y = display.getPrimaryFrame().height - (int)(frame.y + frame.height);
+	return new Point ((int)frame.x, (int)y);
+}
+
+public boolean getMaximized () {
+	checkWidget();
+	if (window == null) return false;
+	return !fullScreen && window.isZoomed();
+}
+
+Shell getModalShell () {
+	Shell shell = null;
+	Shell [] modalShells = display.modalShells;
+	if (modalShells != null) {
+		int bits = SWT.APPLICATION_MODAL | SWT.SYSTEM_MODAL;
+		int index = modalShells.length;
+		while (--index >= 0) {
+			Shell modal = modalShells [index];
+			if (modal != null) {
+				if ((modal.style & bits) != 0) {
+					Control control = this;
+					while (control != null) {
+						if (control == modal) break;
+						control = control.parent;
+					}
+					if (control != modal) return modal;
+					break;
+				}
+				if ((modal.style & SWT.PRIMARY_MODAL) != 0) {
+					if (shell == null) shell = getShell ();
+					if (modal.parent == shell) return modal;
+				}
+			}
+		}
+	}
+	return null;
+}
+
+/**
+ * Gets the receiver's modified state.
+ *
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.5
+ */
+public boolean getModified () {
+	checkWidget ();
+	return window.isDocumentEdited ();
+}
+
+public boolean getMinimized () {
+	checkWidget();
+	if (!getVisible ()) return super.getMinimized ();
+	if (window == null) return false;
+	return window.isMiniaturized();
+}
+
+/**
+ * Returns a point describing the minimum receiver's size. The
+ * x coordinate of the result is the minimum width of the receiver.
+ * The y coordinate of the result is the minimum height of the
+ * receiver.
+ *
+ * @return the receiver's size
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public Point getMinimumSize () {
+	checkWidget();
+	if (window == null) return new Point(0, 0);
+	NSSize size = window.minSize();
+	return new Point((int)size.width, (int)size.height);
+}
+
+/** 
+ * Returns the region that defines the shape of the shell,
+ * or null if the shell has the default shape.
+ *
+ * @return the region that defines the shape of the shell (or null)
+ *	
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.0
+ *
+ */
+public Region getRegion () {
+	/* This method is needed for the @since 3.0 Javadoc */
+	checkWidget ();
+	return region;
+}
+
+public Shell getShell () {
+	checkWidget();
+	return this;
+}
+
+/**
+ * Returns an array containing all shells which are 
+ * descendants of the receiver.
+ * <p>
+ * @return the dialog shells
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Shell [] getShells () {
+	checkWidget();
+	int count = 0;
+	Shell [] shells = display.getShells ();
+	for (int i=0; i<shells.length; i++) {
+		Control shell = shells [i];
+		do {
+			shell = shell.parent;
+		} while (shell != null && shell != this);
+		if (shell == this) count++;
+	}
+	int index = 0;
+	Shell [] result = new Shell [count];
+	for (int i=0; i<shells.length; i++) {
+		Control shell = shells [i];
+		do {
+			shell = shell.parent;
+		} while (shell != null && shell != this);
+		if (shell == this) {
+			result [index++] = shells [i];
+		}
+	}
+	return result;
+}
+
+public Point getSize () {
+	checkWidget();
+	NSRect frame = (window != null ? window.frame() : view.frame());
+	return new Point ((int) frame.width, (int) frame.height);
+}
+
+float getThemeAlpha () {
+	return 1;
+}
+
+boolean hasBorder () {
+	return false;
+}
+
+void helpRequested(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	Control control = display.getFocusControl();
+	while (control != null) {
+		if (control.hooks (SWT.Help)) {
+			control.postEvent (SWT.Help);
+			break;
+		}
+		control = control.parent;
+	}
+}
+
+void invalidateVisibleRegion () {
+	resetVisibleRegion ();
+	invalidateChildrenVisibleRegion ();
+}
+
+boolean isDrawing () {
+	return getDrawing ();
+}
+
+public boolean isEnabled () {
+	checkWidget();
+	return getEnabled ();
+}
+
+boolean isEnabledCursor () {
+	return true;
+}
+
+public boolean isVisible () {
+	checkWidget();
+	return getVisible ();
+}
+
+boolean makeFirstResponder (int /*long*/ id, int /*long*/ sel, int /*long*/ responder) {
+	Display display = this.display;
+	boolean result = super.makeFirstResponder(id, sel, responder);
+	display.checkFocus();
+	return result;
+}
+
+void makeKeyAndOrderFront() {
+	/*
+	* Bug in Cocoa.  If a child window becomes the key window when its
+	* parent window is miniaturized, the parent window appears as if
+	* restored to its full size without actually being restored. In this
+	* case the parent window does become active when its child is closed
+	* and the user is forced to restore the window from the dock.
+	* The fix is to be sure that the parent window is deminiaturized before
+	* making the child a key window. 
+	*/
+	if (parent != null) {
+		Shell shell = (Shell) parent;
+		if (shell.window.isMiniaturized()) shell.window.deminiaturize(null);
+	}
+	window.makeKeyAndOrderFront (null);
+}
+
+void noResponderFor(int /*long*/ id, int /*long*/ sel, int /*long*/ selector) {
+	/**
+	 * Feature in Cocoa.  If the selector is keyDown and nothing has handled the event
+	 * a system beep is generated.  There's no need to beep, as many keystrokes in the SWT
+	 * are listened for and acted upon but not explicitly handled in a keyDown handler.  Fix is to
+	 * not call the default implementation when a keyDown: is being handled. 
+	 */
+	if (selector != OS.sel_keyDown_) super.noResponderFor(id, sel, selector);
+}
+
+/**
+ * Moves the receiver to the top of the drawing order for
+ * the display on which it was created (so that all other
+ * shells on that display, which are not the receiver's
+ * children will be drawn behind it), marks it visible,
+ * sets the focus and asks the window manager to make the
+ * shell active.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Control#moveAbove
+ * @see Control#setFocus
+ * @see Control#setVisible
+ * @see Display#getActiveShell
+ * @see Decorations#setDefaultButton(Button)
+ * @see Shell#setActive
+ * @see Shell#forceActive
+ */
+public void open () {
+	checkWidget();
+	int mask = SWT.PRIMARY_MODAL | SWT.APPLICATION_MODAL | SWT.SYSTEM_MODAL;
+	if ((style & mask) != 0) {
+		display.setModalShell (this);
+	} else {
+		updateModal ();
+	}
+	bringToTop (false);
+	setWindowVisible (true, true);
+	if (isDisposed ()) return;
+	if (!restoreFocus () && !traverseGroup (true)) {
+		// if the parent shell is minimized, setting focus will cause it
+		// to become unminimized.
+		if (parent == null || !((Shell)parent).window.isMiniaturized()) {
+			setFocus ();
+		}
+	}
+}
+
+public boolean print (GC gc) {
+	checkWidget ();
+	if (gc == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	return false;
+}
+
+void register () {
+	super.register ();
+	if (window != null) display.addWidget (window, this);
+	if (windowDelegate != null) display.addWidget (windowDelegate, this);
+}
+
+void releaseChildren (boolean destroy) {
+	Shell [] shells = getShells ();
+	for (int i=0; i<shells.length; i++) {
+		Shell shell = shells [i];
+		if (shell != null && !shell.isDisposed ()) {
+			shell.dispose ();
+		}
+	}
+	super.releaseChildren (destroy);
+}
+
+void releaseHandle () {
+	if (window != null) window.setDelegate(null);
+	if (windowDelegate != null) windowDelegate.release();
+	windowDelegate = null;
+	super.releaseHandle ();
+	window = null;
+}
+
+void releaseParent () {
+	/* Do nothing */
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	display.clearModal (this);
+	updateParent (false);
+	display.updateQuitMenu();
+	lastActive = null;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when operations are performed on the receiver.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ShellListener
+ * @see #addShellListener
+ */
+public void removeShellListener(ShellListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook(SWT.Activate, listener);
+	eventTable.unhook(SWT.Close, listener);
+	eventTable.unhook(SWT.Deactivate, listener);
+	eventTable.unhook(SWT.Iconify,listener);
+	eventTable.unhook(SWT.Deiconify,listener);
+}
+
+void sendToolTipEvent (boolean enter) {
+	if (!isVisible()) return;
+	if (tooltipTag == 0) {
+		NSView view = window.contentView();
+		tooltipTag = view.addToolTipRect(new NSRect(), window, 0);
+		if (tooltipTag != 0) {
+			NSTrackingArea trackingArea = new NSTrackingArea(tooltipTag);
+			id owner = trackingArea.owner();
+			if (owner != null) tooltipOwner = owner.id;
+			id userInfo = trackingArea.userInfo();
+			if (userInfo != null) {
+				tooltipUserData = userInfo.id;
+			} else {
+				int /*long*/ [] value = new int /*long*/ [1];
+				OS.object_getInstanceVariable(tooltipTag, new byte[]{'_','u', 's', 'e', 'r', 'I', 'n', 'f', 'o'}, value);
+				tooltipUserData = value[0];
+			}
+		}
+	}
+	if (tooltipTag == 0 || tooltipOwner == 0 || tooltipUserData == 0) return;
+	NSPoint pt = window.convertScreenToBase(NSEvent.mouseLocation());
+	NSEvent event = NSEvent.enterExitEventWithType(enter ? OS.NSMouseEntered : OS.NSMouseExited, pt, 0, 0, window.windowNumber(), null, 0, tooltipTag, tooltipUserData);
+	OS.objc_msgSend(tooltipOwner, enter ? OS.sel_mouseEntered_ : OS.sel_mouseExited_, event.id);
+}
+
+/**
+ * If the receiver is visible, moves it to the top of the 
+ * drawing order for the display on which it was created 
+ * (so that all other shells on that display, which are not 
+ * the receiver's children will be drawn behind it) and asks 
+ * the window manager to make the shell active 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 2.0
+ * @see Control#moveAbove
+ * @see Control#setFocus
+ * @see Control#setVisible
+ * @see Display#getActiveShell
+ * @see Decorations#setDefaultButton(Button)
+ * @see Shell#open
+ * @see Shell#setActive
+ */
+public void setActive () {
+	if (window == null) return;	
+	checkWidget ();
+	if (!isVisible()) return;
+	makeKeyAndOrderFront ();
+}
+
+void setActiveControl (Control control) {
+	if (control != null && control.isDisposed ()) control = null;
+	if (lastActive != null && lastActive.isDisposed ()) lastActive = null;
+	if (lastActive == control) return;
+	
+	/*
+	* Compute the list of controls to be activated and
+	* deactivated by finding the first common parent
+	* control.
+	*/
+	Control [] activate = (control == null) ? new Control[0] : control.getPath ();
+	Control [] deactivate = (lastActive == null) ? new Control[0] : lastActive.getPath ();
+	lastActive = control;
+	int index = 0, length = Math.min (activate.length, deactivate.length);
+	while (index < length) {
+		if (activate [index] != deactivate [index]) break;
+		index++;
+	}
+	
+	/*
+	* It is possible (but unlikely), that application
+	* code could have destroyed some of the widgets. If
+	* this happens, keep processing those widgets that
+	* are not disposed.
+	*/
+	for (int i=deactivate.length-1; i>=index; --i) {
+		if (!deactivate [i].isDisposed ()) {
+			deactivate [i].sendEvent (SWT.Deactivate);
+		}
+	}
+	for (int i=activate.length-1; i>=index; --i) {
+		if (!activate [i].isDisposed ()) {
+			activate [i].sendEvent (SWT.Activate);
+		}
+	}
+}
+
+/**
+ * Sets the receiver's alpha value which must be
+ * between 0 (transparent) and 255 (opaque).
+ * <p>
+ * This operation requires the operating system's advanced
+ * widgets subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * @param alpha the alpha value
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public void setAlpha (int alpha) {
+	if (window == null) return;	
+	checkWidget ();
+	alpha &= 0xFF;
+	window.setAlphaValue (alpha / 255f);
+}
+
+void setBounds (int x, int y, int width, int height, boolean move, boolean resize) {
+	// Embedded Shells are not resizable.
+	if (window == null) return;
+	if (fullScreen) setFullScreen (false);
+	boolean sheet = window.isSheet();
+	if (sheet && move && !resize) return;
+	int screenHeight = (int) display.getPrimaryFrame().height;
+	NSRect frame = window.frame();
+	if (!move) {
+		x = (int)frame.x;
+		y = screenHeight - (int)(frame.y + frame.height);
+	}
+	if (resize) {
+		NSSize minSize = window.minSize();
+		width = Math.max(width, (int)minSize.width);
+		height = Math.max(height, (int)minSize.height);
+	} else {
+		width = (int)frame.width;
+		height = (int)frame.height;
+	}
+	if (sheet) {
+		y = screenHeight - (int)(frame.y + frame.height);
+		NSRect parentRect = parent.getShell().window.frame();
+		frame.width = width;
+		frame.height = height;
+		frame.x = parentRect.x + (parentRect.width - frame.width) / 2;
+		frame.y = screenHeight - (int)(y + frame.height);
+		window.setFrame(frame, isVisible(), true);
+	} else {
+		frame.x = x;
+		frame.y = screenHeight - (int)(y + height);
+		frame.width = width;
+		frame.height = height;
+		window.setFrame(frame, isVisible());
+	}
+}
+
+void setClipRegion (float /*double*/ x, float /*double*/ y) {
+	if (regionPath != null) {
+		NSAffineTransform transform = NSAffineTransform.transform();
+		transform.translateXBy(-x, -y);
+		regionPath.transformUsingAffineTransform(transform);
+		regionPath.addClip();
+		transform.translateXBy(2*x, 2*y);
+		regionPath.transformUsingAffineTransform(transform);
+	}
+}
+
+public void setEnabled (boolean enabled) {
+	checkWidget();
+	if (((state & DISABLED) == 0) == enabled) return;
+	super.setEnabled (enabled);
+//	if (enabled && OS.IsWindowActive (shellHandle)) {
+//		if (!restoreFocus ()) traverseGroup (false);
+//	}
+}
+
+/**
+ * Sets the full screen state of the receiver.
+ * If the argument is <code>true</code> causes the receiver
+ * to switch to the full screen state, and if the argument is
+ * <code>false</code> and the receiver was previously switched
+ * into full screen state, causes the receiver to switch back
+ * to either the maximized or normal states.
+ * <p>
+ * Note: The result of intermixing calls to <code>setFullScreen(true)</code>, 
+ * <code>setMaximized(true)</code> and <code>setMinimized(true)</code> will 
+ * vary by platform. Typically, the behavior will match the platform user's 
+ * expectations, but not always. This should be avoided if possible.
+ * </p>
+ * 
+ * @param fullScreen the new fullscreen state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.4
+ */
+public void setFullScreen (boolean fullScreen) {
+	checkWidget ();
+	if (this.fullScreen == fullScreen) return;
+	this.fullScreen = fullScreen; 
+
+	if (fullScreen) {
+		currentFrame = window.frame();
+		window.setShowsResizeIndicator(false); //only hides resize indicator
+		if (window.respondsToSelector(OS.sel_setMovable_)) {
+			OS.objc_msgSend(window.id, OS.sel_setMovable_, 0);
+		}
+		
+		fullScreenFrame = NSScreen.mainScreen().frame();
+		if (getMonitor().equals(display.getPrimaryMonitor ())) {
+			if (menuBar != null) {
+				float /*double*/ menuBarHt = currentFrame.height - contentView().frame().height;
+				fullScreenFrame.height -= menuBarHt;
+				OS.SetSystemUIMode(OS.kUIModeContentHidden, 0);
+			} 
+			else {
+				OS.SetSystemUIMode(OS.kUIModeAllHidden, 0);
+			}
+		}
+		window.setFrame(fullScreenFrame, true);
+		window.contentView().setFrame(fullScreenFrame);
+	} else {
+		window.setShowsResizeIndicator(true);
+		if (window.respondsToSelector(OS.sel_setMovable_)) {
+			OS.objc_msgSend(window.id, OS.sel_setMovable_, 1);
+		}
+		OS.SetSystemUIMode(OS.kUIModeNormal, 0);
+		window.setFrame(currentFrame, true);
+	}
+}
+
+public void setMenuBar (Menu menu) {
+	checkWidget();
+	super.setMenuBar (menu);
+	if (display.getActiveShell () == this) {
+		display.setMenuBar (menuBar);
+	}
+}
+
+/**
+ * Sets the input method editor mode to the argument which 
+ * should be the result of bitwise OR'ing together one or more
+ * of the following constants defined in class <code>SWT</code>:
+ * <code>NONE</code>, <code>ROMAN</code>, <code>DBCS</code>, 
+ * <code>PHONETIC</code>, <code>NATIVE</code>, <code>ALPHA</code>.
+ *
+ * @param mode the new IME mode
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SWT
+ */
+public void setImeInputMode (int mode) {
+	checkWidget();
+}
+
+public void setMaximized (boolean maximized) {
+	checkWidget();
+	super.setMaximized (maximized);
+	if (window == null) return;
+	if (window.isZoomed () == maximized) return;
+	window.zoom (null);
+}
+
+public void setMinimized (boolean minimized) {
+	checkWidget();
+	super.setMinimized (minimized);
+	if (window == null) return;
+	if (minimized) {
+		window.miniaturize (null);
+	} else {
+		window.deminiaturize (null);
+	}
+}
+
+/**
+ * Sets the receiver's minimum size to the size specified by the arguments.
+ * If the new minimum size is larger than the current size of the receiver,
+ * the receiver is resized to the new minimum size.
+ *
+ * @param width the new minimum width for the receiver
+ * @param height the new minimum height for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void setMinimumSize (int width, int height) {
+	checkWidget();
+	if (window == null) return;
+	NSSize size = new NSSize();
+	size.width = width;
+	size.height = height;
+	window.setMinSize(size);
+	NSRect frame = window.frame();
+	if (width > frame.width || height > frame.height) {
+		width = (int)(width > frame.width ? width : frame.width);
+		height = (int)(height > frame.height ? height : frame.height);
+		setBounds(0, 0, width, height, false, true);
+	}
+}
+
+/**
+ * Sets the receiver's minimum size to the size specified by the argument.
+ * If the new minimum size is larger than the current size of the receiver,
+ * the receiver is resized to the new minimum size.
+ *
+ * @param size the new minimum size for the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void setMinimumSize (Point size) {
+	checkWidget();
+	if (size == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setMinimumSize (size.x, size.y);
+}
+
+/**
+ * Sets the receiver's modified state as specified by the argument.
+ *
+ * @param modified the new modified state for the receiver
+ *
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.5
+ */
+public void setModified (boolean modified) {
+	checkWidget ();
+	window.setDocumentEdited (modified);
+}
+
+/**
+ * Sets the shape of the shell to the region specified
+ * by the argument.  When the argument is null, the
+ * default shape of the shell is restored.  The shell
+ * must be created with the style SWT.NO_TRIM in order
+ * to specify a region.
+ *
+ * @param region the region that defines the shape of the shell (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the region has been disposed</li>
+ * </ul>  
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.0
+ *
+ */
+public void setRegion (Region region) {
+	checkWidget ();
+	if ((style & SWT.NO_TRIM) == 0) return;
+	if (window == null) return;
+	if (region != null && region.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT);
+	this.region = region;
+	if (regionPath != null) regionPath.release();
+	regionPath = getPath(region);
+	if (region != null) {
+		window.setBackgroundColor(NSColor.clearColor());
+		window.setOpaque(false);
+	} else {
+		window.setBackgroundColor(NSColor.windowBackgroundColor());
+		window.setOpaque(true);
+	}
+	window.contentView().setNeedsDisplay(true);
+	if (isVisible() && window.hasShadow()) {
+		window.display();
+		window.invalidateShadow();
+	}
+}
+
+public void setText (String string) {
+	checkWidget();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (window == null) return;
+	super.setText (string);
+	NSString str = NSString.stringWith(string);
+	window.setTitle(str);
+}
+
+public void setVisible (boolean visible) {
+	checkWidget();
+	int mask = SWT.PRIMARY_MODAL | SWT.APPLICATION_MODAL | SWT.SYSTEM_MODAL;
+	if ((style & mask) != 0) {
+		if (visible) {
+			display.setModalShell (this);
+		} else {
+			display.clearModal (this);
+		}
+	} else {
+		updateModal ();
+	}
+	if (window == null) {
+		super.setVisible(visible);
+	} else {
+		setWindowVisible (visible, false);
+	}
+}
+
+void setWindowVisible (boolean visible, boolean key) {
+	if (visible) {
+		if ((state & HIDDEN) == 0) return;
+		state &= ~HIDDEN;
+	} else {
+		if ((state & HIDDEN) != 0) return;
+		state |= HIDDEN;
+	}
+	if (window != null && (window.isVisible() == visible)) return;
+	if (visible) {
+		display.clearPool ();
+		if (center && !moved) {
+			if (isDisposed ()) return;			
+			center ();
+		}
+		sendEvent (SWT.Show);
+		if (isDisposed ()) return;
+		topView ().setHidden (false);
+		invalidateVisibleRegion();
+		if ((style & (SWT.SHEET)) != 0) {
+			NSApplication application = NSApplication.sharedApplication();
+			application.beginSheet(window, ((Shell)parent).window, null, 0, 0);
+			if (OS.VERSION <= 0x1060 && window.respondsToSelector(OS.sel__setNeedsToUseHeartBeatWindow_)) {
+				OS.objc_msgSend(window.id, OS.sel__setNeedsToUseHeartBeatWindow_, 0);
+			}
+		} else {
+			// If the parent window is miniaturized, the window will be shown
+			// when its parent is shown.
+			boolean parentMinimized = parent != null && ((Shell)parent).window.isMiniaturized();
+			if (!parentMinimized) {
+				if (key) {
+					makeKeyAndOrderFront ();
+				} else {
+					window.orderFront (null);
+				}
+			}
+		}
+		updateParent (visible);
+		opened = true;
+		if (!moved) {
+			moved = true;
+			sendEvent (SWT.Move);
+			if (isDisposed ()) return;
+		}
+		if (!resized) {
+			resized = true;
+			sendEvent (SWT.Resize);
+			if (isDisposed ()) return;
+			if (layout != null) {
+				markLayout (false, false);
+				updateLayout (false);
+			}
+		}
+	} else {
+		updateParent (visible);
+		if ((style & (SWT.SHEET)) != 0) {
+			NSApplication application = NSApplication.sharedApplication();
+			application.endSheet(window, 0);
+		}
+		window.orderOut (null);
+		topView ().setHidden (true);
+		invalidateVisibleRegion();
+		sendEvent (SWT.Hide);
+	}
+	
+	display.updateQuitMenu();
+}
+
+void setZOrder () {
+	if (scrollView != null) scrollView.setDocumentView (view);
+	if (window == null) return;
+	window.setContentView (scrollView != null ? scrollView : view);
+	if (fixResize ()) {
+		NSRect rect = window.frame();
+		rect.x = rect.y = 0;
+		window.contentView().setFrame(rect);
+	}
+}
+
+void setZOrder (Control control, boolean above) {
+	if (window == null) return;
+	if (control == null) {
+		if (above) {
+			window.orderFront(null);
+		} else {
+			window.orderBack(null);
+		}
+	} else {
+		NSWindow otherWindow = control.getShell().window;
+		window.orderWindow(above ? OS.NSWindowAbove : OS.NSWindowBelow, otherWindow.windowNumber());
+	}
+}
+
+boolean traverseEscape () {
+	if (parent == null) return false;
+	if (!isVisible () || !isEnabled ()) return false;
+	close ();
+	return true;
+}
+
+void updateModal () {
+	// do nothing
+}
+
+void updateParent (boolean visible) {
+	if (visible) {
+		if (parent != null && parent.getVisible ()) {
+			((Shell)parent).window.addChildWindow (window, OS.NSWindowAbove);
+		}		
+	} else {
+		NSWindow parentWindow = window.parentWindow ();
+		if (parentWindow != null) parentWindow.removeChildWindow (window);
+	}
+	Shell [] shells = getShells ();
+	for (int i = 0; i < shells.length; i++) {
+		Shell shell = shells [i];
+		if (shell.parent == this && shell.getVisible ()) {
+			shell.updateParent (visible);
+		}
+	}
+}
+
+void updateSystemUIMode () {
+	if (!getMonitor ().equals (display.getPrimaryMonitor ())) return;
+	if (fullScreen) {
+		int mode = OS.kUIModeAllHidden;
+		if (menuBar != null) {
+			mode = OS.kUIModeContentHidden;
+		}
+		OS.SetSystemUIMode (mode, 0);
+		window.setFrame(fullScreenFrame, true);
+	} else {
+		OS.SetSystemUIMode (OS.kUIModeNormal, 0);
+	}
+}
+
+int /*long*/ view_stringForToolTip_point_userData (int /*long*/ id, int /*long*/ sel, int /*long*/ view, int /*long*/ tag, int /*long*/ point, int /*long*/ userData) {
+	NSPoint pt = new NSPoint();
+	OS.memmove (pt, point, NSPoint.sizeof);
+	Control control = display.findControl (false);
+	if (control == null) return 0;
+	Widget target = control.findTooltip (new NSView (view).convertPoint_toView_ (pt, null));
+	String string = target.tooltipText ();
+	if (string == null) return 0;
+	char[] chars = new char [string.length ()];
+	string.getChars (0, chars.length, chars, 0);
+	int length = fixMnemonic (chars);
+	return NSString.stringWithCharacters (chars, length).id;
+}
+
+void windowDidBecomeKey(int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
+	super.windowDidBecomeKey(id, sel, notification);
+	Display display = this.display;
+	display.setMenuBar (menuBar);
+	sendEvent (SWT.Activate);
+	if (isDisposed ()) return;
+	Shell parentShell = this;
+	while (parentShell.parent != null) {
+		parentShell = (Shell) parentShell.parent;
+		if (parentShell.fullScreen) {
+			break;
+		}
+	}
+	if (!parentShell.fullScreen || menuBar != null) {
+		updateSystemUIMode ();
+	} else {
+		parentShell.updateSystemUIMode ();
+	}
+}
+
+void windowDidMove(int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
+	moved = true;
+	sendEvent(SWT.Move);
+}
+
+void windowDidResize(int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
+	if (fullScreen) {
+		window.setFrame(fullScreenFrame, true);
+		window.contentView().setFrame(fullScreenFrame);
+	}
+	if (fixResize ()) {
+		NSRect rect = window.frame ();
+		rect.x = rect.y = 0;
+		window.contentView ().setFrame (rect);
+	}
+	resized = true;
+	sendEvent (SWT.Resize);
+	if (isDisposed ()) return;
+	if (layout != null) {
+		markLayout (false, false);
+		updateLayout (false);
+	}
+}
+
+void windowDidResignKey(int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
+	super.windowDidResignKey(id, sel, notification);
+	sendEvent (SWT.Deactivate);
+}
+
+void windowSendEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
+	NSEvent nsEvent = new NSEvent (event);
+	int type = (int)/*64*/nsEvent.type ();
+	switch (type) {
+		case OS.NSLeftMouseUp:
+		case OS.NSRightMouseUp:
+		case OS.NSOtherMouseUp:
+		case OS.NSMouseMoved:
+			NSView[] hitView = new NSView[1];
+			Control control = display.findControl (false, hitView);
+			if (control != null && (!control.isActive() || !control.isEnabled())) control = null;
+			if (type == OS.NSMouseMoved) {
+				Control trimControl = control;
+				if (trimControl != null && trimControl.isTrim (hitView[0])) trimControl = null;
+				display.checkEnterExit (trimControl, nsEvent, false);
+				if (trimControl != null) trimControl.sendMouseEvent (nsEvent, type, false);
+			}
+			Widget target = null;
+			if (control != null) target = control.findTooltip (nsEvent.locationInWindow());
+			if (display.tooltipControl != control || display.tooltipTarget != target) {
+				Control oldControl = display.tooltipControl;
+				Shell oldShell = oldControl != null && !oldControl.isDisposed() ? oldControl.getShell() : null;
+				Shell shell = control != null && !control.isDisposed() ? control.getShell() : null;
+				if (oldShell != null) oldShell.sendToolTipEvent (false);
+				if (shell != null) shell.sendToolTipEvent (true);
+			}
+			display.tooltipControl = control;
+			display.tooltipTarget = target;
+			break;
+			
+		case OS.NSKeyDown:
+			/**
+			 * Feature in cocoa.  Control+Tab, Ctrl+Shift+Tab, Ctrl+PageDown and Ctrl+PageUp are
+			 * swallowed to handle native traversal. If we find that, force the key event to
+			 * the first responder.
+			 */
+			if ((nsEvent.modifierFlags() & OS.NSControlKeyMask) != 0) {
+				NSString chars = nsEvent.characters();
+				
+				if (chars != null && chars.length() == 1) {
+					int firstChar = (int)/*64*/chars.characterAtIndex(0);
+
+					// Shift-tab appears as control-Y.
+					switch (firstChar) {
+						case '\t':
+						case 25:
+						case OS.NSPageDownFunctionKey:
+						case OS.NSPageUpFunctionKey:
+							window.firstResponder().keyDown(nsEvent);
+							return;
+					}
+				}
+			}
+			break;
+	}
+	super.windowSendEvent (id, sel, event);
+}
+
+boolean windowShouldClose(int /*long*/ id, int /*long*/ sel, int /*long*/ window) {
+	closeWidget ();
+	return false;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Slider.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Slider.java
new file mode 100755
index 0000000..305d47d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Slider.java
@@ -0,0 +1,527 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+ 
+import org.eclipse.swt.internal.cocoa.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class are selectable user interface
+ * objects that represent a range of positive, numeric values. 
+ * <p>
+ * At any given moment, a given slider will have a 
+ * single 'selection' that is considered to be its
+ * value, which is constrained to be within the range of
+ * values the slider represents (that is, between its
+ * <em>minimum</em> and <em>maximum</em> values).
+ * </p><p>
+ * Typically, sliders will be made up of five areas:
+ * <ol>
+ * <li>an arrow button for decrementing the value</li>
+ * <li>a page decrement area for decrementing the value by a larger amount</li>
+ * <li>a <em>thumb</em> for modifying the value by mouse dragging</li>
+ * <li>a page increment area for incrementing the value by a larger amount</li>
+ * <li>an arrow button for incrementing the value</li>
+ * </ol>
+ * Based on their style, sliders are either <code>HORIZONTAL</code>
+ * (which have a left facing button for decrementing the value and a
+ * right facing button for incrementing it) or <code>VERTICAL</code>
+ * (which have an upward facing button for decrementing the value
+ * and a downward facing buttons for incrementing it).
+ * </p><p>
+ * On some platforms, the size of the slider's thumb can be
+ * varied relative to the magnitude of the range of values it
+ * represents (that is, relative to the difference between its
+ * maximum and minimum values). Typically, this is used to
+ * indicate some proportional value such as the ratio of the
+ * visible area of a document to the total amount of space that
+ * it would take to display it. SWT supports setting the thumb
+ * size even if the underlying platform does not, but in this
+ * case the appearance of the slider will not change.
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>HORIZONTAL, VERTICAL</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see ScrollBar
+ * @see <a href="http://www.eclipse.org/swt/snippets/#slider">Slider snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Slider extends Control {
+	boolean dragging;
+	int minimum, maximum, thumb;
+	int increment = 1;
+	int pageIncrement = 10;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#HORIZONTAL
+ * @see SWT#VERTICAL
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Slider (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the user changes the receiver's value, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * When <code>widgetSelected</code> is called, the event object detail field contains one of the following values:
+ * <code>SWT.NONE</code> - for the end of a drag.
+ * <code>SWT.DRAG</code>.
+ * <code>SWT.HOME</code>.
+ * <code>SWT.END</code>.
+ * <code>SWT.ARROW_DOWN</code>.
+ * <code>SWT.ARROW_UP</code>.
+ * <code>SWT.PAGE_DOWN</code>.
+ * <code>SWT.PAGE_UP</code>.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the user changes the receiver's value
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener(SelectionListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener(listener);
+	addListener(SWT.Selection,typedListener);
+	addListener(SWT.DefaultSelection,typedListener);
+}
+
+static int checkStyle (int style) {
+	return checkBits (style, SWT.HORIZONTAL, SWT.VERTICAL, 0, 0, 0, 0);
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget();
+	int width = 0, height = 0;
+	if ((style & SWT.HORIZONTAL) != 0) {
+		height = (int)NSScroller.scrollerWidthForControlSize(((NSScroller)view).controlSize());
+		width = height * 10;
+	} else {
+		width = (int)NSScroller.scrollerWidthForControlSize(((NSScroller)view).controlSize());
+		height = width * 10;
+	}
+	if (wHint != SWT.DEFAULT) width = wHint;
+	if (hHint != SWT.DEFAULT) height = hHint;
+	return new Point (width, height);
+}
+
+void createHandle () {
+	NSScroller widget = (NSScroller)new SWTScroller().alloc();
+	NSRect rect = new NSRect();
+	if ((style & SWT.HORIZONTAL) != 0) {
+		rect.width = 1;
+	} else {
+		rect.height = 1;
+	}
+	widget.initWithFrame(rect);
+	widget.setEnabled(true);
+	widget.setTarget(widget);
+	widget.setAction(OS.sel_sendSelection);
+	view = widget;
+	updateBar(0, minimum, maximum, thumb);
+}
+
+void createWidget () {
+	maximum = 100;
+	thumb = 10;
+	super.createWidget();
+}
+
+NSFont defaultNSFont () {
+	return display.scrollerFont;
+}
+
+/**
+ * Returns the amount that the receiver's value will be
+ * modified by when the up/down (or right/left) arrows
+ * are pressed.
+ *
+ * @return the increment
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getIncrement () {
+	checkWidget();
+    return increment;
+}
+
+/**
+ * Returns the maximum value which the receiver will allow.
+ *
+ * @return the maximum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMaximum () {
+	checkWidget();
+	return maximum; 
+}
+
+/**
+ * Returns the minimum value which the receiver will allow.
+ *
+ * @return the minimum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMinimum () {
+	checkWidget();
+    return minimum;
+}
+
+/**
+ * Returns the amount that the receiver's value will be
+ * modified by when the page increment/decrement areas
+ * are selected.
+ *
+ * @return the page increment
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getPageIncrement () {
+	checkWidget();
+    return pageIncrement;
+}
+
+/**
+ * Returns the 'selection', which is the receiver's value.
+ *
+ * @return the selection
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelection () {
+	checkWidget();
+	NSScroller widget = (NSScroller)view;
+	double value = widget.doubleValue();
+    return (int)(0.5f + ((maximum - thumb - minimum) * value + minimum));
+}
+
+/**
+ * Returns the size of the receiver's thumb relative to the
+ * difference between its maximum and minimum values.
+ *
+ * @return the thumb value
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getThumb () {
+	checkWidget();
+    return thumb;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the user changes the receiver's value.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener(SelectionListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook(SWT.Selection, listener);
+	eventTable.unhook(SWT.DefaultSelection,listener);
+}
+
+void sendSelection () {
+	Event event = new Event();
+	int hitPart = (int)/*64*/((NSScroller)view).hitPart();
+	int value = getSelection ();
+	switch (hitPart) {
+	    case OS.NSScrollerDecrementLine:
+	        event.detail = SWT.ARROW_UP;
+	        value -= increment;
+	        break;
+	    case OS.NSScrollerDecrementPage:
+	        value -= pageIncrement;
+	        event.detail = SWT.PAGE_UP;
+	        break;
+	    case OS.NSScrollerIncrementLine:
+	        value += increment;
+	        event.detail = SWT.ARROW_DOWN;
+	        break;
+	    case OS.NSScrollerIncrementPage:
+	        value += pageIncrement;
+	        event.detail = SWT.PAGE_DOWN;
+	        break;
+	    case OS.NSScrollerKnob:
+			event.detail = SWT.DRAG;
+	        break;
+	}
+	if (event.detail != SWT.DRAG) {
+		setSelection(value);
+	}
+	sendEvent(SWT.Selection, event);
+}
+
+/**
+ * Sets the amount that the receiver's value will be
+ * modified by when the up/down (or right/left) arrows
+ * are pressed to the argument, which must be at least 
+ * one.
+ *
+ * @param value the new increment (must be greater than zero)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setIncrement (int value) {
+	checkWidget();
+	if (value < 1) return;
+	increment = value;
+}
+
+/**
+ * Sets the maximum. If this value is negative or less than or
+ * equal to the minimum, the value is ignored. If necessary, first
+ * the thumb and then the selection are adjusted to fit within the
+ * new range.
+ *
+ * @param value the new maximum, which must be greater than the current minimum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMaximum (int value) {
+	checkWidget();
+	if (value < 0) return;
+	if (value <= minimum) return;
+	if (value - minimum < thumb) {
+		thumb = value - minimum;
+	}
+	int selection = Math.max(minimum, Math.min (getSelection (), value - thumb));
+	this.maximum = value;
+	updateBar(selection, minimum, value, thumb);
+}
+
+/**
+ * Sets the minimum value. If this value is negative or greater
+ * than or equal to the maximum, the value is ignored. If necessary,
+ * first the thumb and then the selection are adjusted to fit within
+ * the new range.
+ *
+ * @param value the new minimum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMinimum (int value) {
+	checkWidget();
+	if (value < 0) return;
+	if (value >= maximum) return;
+	if (maximum - value < thumb) {
+		thumb = maximum - value;
+	}
+	int selection = Math.min(maximum - thumb, Math.max (getSelection (), value));
+	this.minimum = value;
+	updateBar(selection, value, maximum, thumb);
+}
+
+/**
+ * Sets the amount that the receiver's value will be
+ * modified by when the page increment/decrement areas
+ * are selected to the argument, which must be at least
+ * one.
+ *
+ * @param value the page increment (must be greater than zero)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setPageIncrement (int value) {
+	checkWidget();
+	if (value < 1) return;
+	pageIncrement = value;
+}
+
+/**
+ * Sets the 'selection', which is the receiver's
+ * value, to the argument which must be greater than or equal
+ * to zero.
+ *
+ * @param value the new selection (must be zero or greater)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (int value) {
+	checkWidget();
+	updateBar(value, minimum, maximum, thumb);
+}
+
+void setSmallSize () {
+	/* This code is intentionally comment */
+//	((NSScroller)view).setControlSize (OS.NSSmallControlSize);
+}
+
+void updateBar (int selection, int minimum, int maximum, int thumb) {
+	NSScroller widget = (NSScroller)view;
+	selection = Math.max (minimum, Math.min (maximum - thumb, selection));
+	int range = maximum - thumb - minimum;
+	float fraction = range <= 0 ? 1 : (float)(selection - minimum) / range;
+	float knob = range <= 0 ? 1 : (float)thumb / (maximum - minimum);
+	widget.setFloatValue (fraction, knob);
+}
+
+/**
+ * Sets the size of the receiver's thumb relative to the
+ * difference between its maximum and minimum values.  This new
+ * value will be ignored if it is less than one, and will be
+ * clamped if it exceeds the receiver's current range.
+ *
+ * @param value the new thumb value, which must be at least one and not
+ * larger than the size of the current range
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setThumb (int value) {
+	checkWidget();
+	if (value < 1) return;
+	value = Math.min (value, maximum - minimum);
+	updateBar(getSelection(), minimum, maximum, value);
+	this.thumb = value;
+}
+
+/**
+ * Sets the receiver's selection, minimum value, maximum
+ * value, thumb, increment and page increment all at once.
+ * <p>
+ * Note: This is similar to setting the values individually
+ * using the appropriate methods, but may be implemented in a 
+ * more efficient fashion on some platforms.
+ * </p>
+ *
+ * @param selection the new selection value
+ * @param minimum the new minimum value
+ * @param maximum the new maximum value
+ * @param thumb the new thumb value
+ * @param increment the new increment value
+ * @param pageIncrement the new pageIncrement value
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setValues (int selection, int minimum, int maximum, int thumb, int increment, int pageIncrement) {
+	checkWidget();
+	if (minimum < 0) return;
+	if (maximum < 0) return;
+	if (thumb < 1) return;
+	if (increment < 1) return;
+	if (pageIncrement < 1) return;
+	thumb = Math.min (thumb, maximum - minimum);
+	this.thumb = thumb;
+	this.maximum = maximum;
+	this.minimum = minimum;
+	this.increment = increment;
+	this.pageIncrement = pageIncrement;
+	updateBar(selection, minimum, maximum, thumb);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Spinner.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Spinner.java
new file mode 100755
index 0000000..6c53ac4
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Spinner.java
@@ -0,0 +1,1064 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class are selectable user interface
+ * objects that allow the user to enter and modify numeric
+ * values.
+ * <p>
+ * Note that although this class is a subclass of <code>Composite</code>,
+ * it does not make sense to add children to it, or set a layout on it.
+ * </p><p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>READ_ONLY, WRAP</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection, Modify, Verify</dd>
+ * </dl>
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#spinner">Spinner snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.1
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Spinner extends Composite {
+	NSTextField textView;
+	NSNumberFormatter textFormatter;
+	NSStepper buttonView;
+	int pageIncrement = 10;
+	int digits = 0;
+	int textLimit = LIMIT;
+	static int GAP = 0;
+	
+	/**
+	 * the operating system limit for the number of characters
+	 * that the text field in an instance of this class can hold
+	 * 
+	 * @since 3.4
+	 */
+	public static final int LIMIT;
+	
+	/*
+	* These values can be different on different platforms.
+	* Therefore they are not initialized in the declaration
+	* to stop the compiler from inlining.
+	*/
+	static {
+		LIMIT = 0x7FFFFFFF;
+	}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#READ_ONLY
+ * @see SWT#WRAP
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Spinner (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+boolean acceptsFirstResponder(int /*long*/ id, int /*long*/ sel) {
+	if (id == view.id) return false;
+	return super.acceptsFirstResponder (id, sel);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the receiver's text is modified, by sending
+ * it one of the messages defined in the <code>ModifyListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ModifyListener
+ * @see #removeModifyListener
+ */
+public void addModifyListener (ModifyListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Modify, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is not called for texts.
+ * <code>widgetDefaultSelected</code> is typically called when ENTER is pressed in a single-line text.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the control is selected by the user
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener(listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the receiver's text is verified, by sending
+ * it one of the messages defined in the <code>VerifyListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see VerifyListener
+ * @see #removeVerifyListener
+ */
+void addVerifyListener (VerifyListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Verify, typedListener);
+}
+
+static int checkStyle (int style) {
+	/*
+	* Even though it is legal to create this widget
+	* with scroll bars, they serve no useful purpose
+	* because they do not automatically scroll the
+	* widget's client area.  The fix is to clear
+	* the SWT style.
+	*/
+	return style & ~(SWT.H_SCROLL | SWT.V_SCROLL);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget ();
+	float /*double*/ width = 0, height = 0;
+	String string = Double.toString (buttonView.maxValue ());
+	Font font = Font.cocoa_new(display, textView.font ());
+	NSAttributedString str = parent.createString(string, font, null, 0, true, false);
+	NSSize size = str.size ();
+	str.release ();
+	width = (float)/*64*/size.width;
+	height = (float)/*64*/size.height;
+	NSRect frameRect = textView.frame();
+	NSCell cell = new NSCell (textView.cell ());
+	NSRect cellRect = cell.drawingRectForBounds(frameRect);
+	width += frameRect.width - cellRect.width;
+	height += frameRect.height - cellRect.height;
+	width += GAP;
+	size = buttonView.cell ().cellSize ();
+	width += (int)/*64*/size.width;
+	height = Math.max (height, size.height);
+	if (wHint != SWT.DEFAULT) width = wHint;
+	if (hHint != SWT.DEFAULT) height = hHint;
+	Rectangle trim = computeTrim (0, 0, (int)Math.ceil (width), (int)Math.ceil (height));
+	return new Point (trim.width, trim.height);
+}
+
+/**
+ * Copies the selected text.
+ * <p>
+ * The current selection is copied to the clipboard.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void copy () {
+	checkWidget ();
+	NSText fieldEditor = textView.currentEditor();
+	if (fieldEditor != null) {
+		fieldEditor.copy(null);
+	} else {
+		//TODO
+	}
+}
+
+void createHandle () {
+	NSView widget = (NSView)new SWTView().alloc();
+	widget.init();
+//	widget.setDrawsBackground(false);
+	NSStepper buttonWidget = (NSStepper)new SWTStepper().alloc();
+	buttonWidget.init();
+	buttonWidget.setValueWraps((style & SWT.WRAP) != 0);
+	buttonWidget.setTarget(buttonWidget);
+	buttonWidget.setAction(OS.sel_sendSelection);
+	buttonWidget.setMaxValue(100);
+	NSTextField textWidget = (NSTextField)new SWTTextField().alloc();
+	textWidget.init();
+//	textWidget.setTarget(widget);
+	textWidget.setEditable((style & SWT.READ_ONLY) == 0);
+	textFormatter = (NSNumberFormatter)new NSNumberFormatter().alloc();
+	textFormatter.init();
+	widget.addSubview(textWidget);
+	widget.addSubview(buttonWidget);
+	buttonView = buttonWidget;
+	textView = textWidget;
+	view = widget;
+	setSelection (0, false, true, false);
+}
+
+/**
+ * Cuts the selected text.
+ * <p>
+ * The current selection is first copied to the
+ * clipboard and then deleted from the widget.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void cut () {
+	checkWidget ();
+	if ((style & SWT.READ_ONLY) != 0) return;
+	NSText fieldEditor = textView.currentEditor();
+	if (fieldEditor != null) {
+		fieldEditor.cut(null);
+	} else {
+		//TODO
+	}
+}
+
+void enableWidget (boolean enabled) {
+	super.enableWidget(enabled);
+	buttonView.setEnabled(enabled);
+	textView.setEnabled(enabled);
+}
+
+NSFont defaultNSFont () {
+	return display.textFieldFont;
+}
+
+void deregister () {
+	super.deregister ();
+	if (textView != null) {
+		display.removeWidget (textView);
+		display.removeWidget (textView.cell());
+	}
+	
+	if (buttonView != null) {
+		display.removeWidget (buttonView);
+		display.removeWidget (buttonView.cell());
+	}
+}
+
+NSView focusView () {
+	return textView;
+}
+
+/**
+ * Returns the number of decimal places used by the receiver.
+ *
+ * @return the digits
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getDigits () {
+	checkWidget ();
+	return digits;
+}
+
+/**
+ * Returns the amount that the receiver's value will be
+ * modified by when the up/down arrows are pressed.
+ *
+ * @return the increment
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getIncrement () {
+	checkWidget ();
+	return (int)buttonView.increment();
+}
+
+/**
+ * Returns the maximum value which the receiver will allow.
+ *
+ * @return the maximum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMaximum () {
+	checkWidget ();
+	return (int)buttonView.maxValue();
+}
+
+/**
+ * Returns the minimum value which the receiver will allow.
+ *
+ * @return the minimum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMinimum () {
+	checkWidget ();
+	return (int)buttonView.minValue();
+}
+
+/**
+ * Returns the amount that the receiver's position will be
+ * modified by when the page up/down keys are pressed.
+ *
+ * @return the page increment
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getPageIncrement () {
+	checkWidget ();
+	return pageIncrement;
+}
+
+/**
+ * Returns the <em>selection</em>, which is the receiver's position.
+ *
+ * @return the selection 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelection () {
+	checkWidget ();
+	return (int)((NSStepper)buttonView).doubleValue();
+}
+
+int getSelectionText (boolean[] parseFail) {
+	String string = textView.stringValue().getString();
+	try {
+		int value;
+		if (digits > 0) {
+			String decimalSeparator = textFormatter.decimalSeparator().getString();
+			int index = string.indexOf (decimalSeparator);
+			if (index != -1)  {
+				int startIndex = string.startsWith ("+") || string.startsWith ("-") ? 1 : 0;
+				String wholePart = startIndex != index ? string.substring (startIndex, index) : "0";
+				String decimalPart = string.substring (index + 1);
+				if (decimalPart.length () > digits) {
+					decimalPart = decimalPart.substring (0, digits);
+				} else {
+					int i = digits - decimalPart.length ();
+					for (int j = 0; j < i; j++) {
+						decimalPart = decimalPart + "0";
+					}
+				}
+				int wholeValue = Integer.parseInt (wholePart);
+				int decimalValue = Integer.parseInt (decimalPart);
+				for (int i = 0; i < digits; i++) wholeValue *= 10;
+				value = wholeValue + decimalValue;
+				if (string.startsWith ("-")) value = -value;
+			} else {
+				value = Integer.parseInt (string);
+				for (int i = 0; i < digits; i++) value *= 10;
+			}
+		} else {
+			value = Integer.parseInt (string);
+		}
+		int max = getMaximum();
+		int min = getMinimum();
+		if (min <= value && value <= max) return value;
+	} catch (NumberFormatException e) {
+	}
+	parseFail [0] = true;
+	return -1;
+}
+
+/**
+ * Returns a string containing a copy of the contents of the
+ * receiver's text field, or an empty string if there are no
+ * contents.
+ *
+ * @return the receiver's text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public String getText () {
+	checkWidget ();
+	NSString str = new NSTextFieldCell (textView.cell ()).title ();
+	return str.getString ();
+}
+
+/**
+ * Returns the maximum number of characters that the receiver's
+ * text field is capable of holding. If this has not been changed
+ * by <code>setTextLimit()</code>, it will be the constant
+ * <code>Spinner.LIMIT</code>.
+ * 
+ * @return the text limit
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #LIMIT
+ * 
+ * @since 3.4
+ */
+public int getTextLimit () {
+	checkWidget();
+    return textLimit;
+}
+
+boolean isEventView (int /*long*/ id) {
+	return true;
+}
+
+/**
+ * Pastes text from clipboard.
+ * <p>
+ * The selected text is deleted from the widget
+ * and new text inserted from the clipboard.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void paste () {
+	checkWidget ();
+	if ((style & SWT.READ_ONLY) != 0) return;
+	NSText fieldEditor = textView.currentEditor();
+	if (fieldEditor != null) {
+		fieldEditor.paste(null);
+	} else {
+		//TODO
+	}
+}
+
+void register () {
+	super.register ();
+	if (textView != null) {
+		display.addWidget (textView, this);
+		display.addWidget (textView.cell(), this);
+	}
+	
+	if (buttonView != null) {
+		display.addWidget (buttonView, this);
+		display.addWidget (buttonView.cell(), this);
+	}
+}
+
+void releaseHandle () {
+	super.releaseHandle();
+	if (textFormatter != null) textFormatter.release();
+	if (buttonView != null) buttonView.release();
+	if (textView != null) textView.release();
+	textFormatter = null;
+	buttonView = null;
+	textView = null;
+}
+
+void releaseWidget () {	
+	super.releaseWidget ();
+	if (textView != null) textView.abortEditing();
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the receiver's text is modified.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ModifyListener
+ * @see #addModifyListener
+ */
+public void removeModifyListener (ModifyListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Modify, listener);	
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is verified.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see VerifyListener
+ * @see #addVerifyListener
+ */
+void removeVerifyListener (VerifyListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Verify, listener);	
+}
+
+void resized () {
+	super.resized ();
+	buttonView.sizeToFit();
+	NSSize textSize = textView.cell ().cellSize ();
+	NSRect buttonFrame = buttonView.bounds();
+	NSRect frame = view.frame();
+	buttonFrame.x = frame.width - buttonFrame.width;
+	buttonFrame.y = (frame.height - buttonFrame.height) / 2;
+	int textHeight = (int)Math.min(textSize.height, frame.height);
+	frame.x = 0;
+	frame.y = (frame.height - textHeight) / 2;
+	frame.width -= buttonFrame.width + GAP;
+	frame.height = textHeight;
+	textView.setFrame(frame);
+	buttonView.setFrame(buttonFrame);
+}
+
+boolean sendKeyEvent (NSEvent nsEvent, int type) {
+	boolean result = super.sendKeyEvent (nsEvent, type);
+	if (!result) return result;
+	if (type != SWT.KeyDown) return result;
+	int delta = 0;
+	short keyCode = nsEvent.keyCode ();
+	switch (keyCode) {
+		case 76: /* KP Enter */
+		case 36: { /* Return */
+			postEvent (SWT.DefaultSelection);
+			return true;
+		}
+
+	    case 116: delta = pageIncrement; break; /* Page Up */
+	    case 121: delta = -pageIncrement; break; /* Page Down */
+	    case 125: delta = -getIncrement(); break; /* Down arrow */
+	    case 126: delta = getIncrement(); break; /* Up arrow */
+    }
+
+    if (delta != 0) {
+    	boolean [] parseFail = new boolean [1];
+    	int value = getSelectionText (parseFail);
+    	if (parseFail [0]) {
+    		value = (int)buttonView.doubleValue();
+    	}
+    	int newValue = value + delta;
+    	int max = (int)buttonView.maxValue();
+    	int min = (int)buttonView.minValue();
+    	if ((style & SWT.WRAP) != 0) {
+    		if (newValue > max) newValue = min;
+    		if (newValue < min) newValue = max;
+    	}
+    	newValue = Math.min (Math.max (min, newValue), max);
+    	if (value != newValue) setSelection (newValue, true, true, true);
+    	// Prevent the arrow or page up/down from being handled by the text field.
+    	result = false;
+    } else {
+    	boolean [] parseFail = new boolean [1];
+    	int value = getSelectionText (parseFail);
+    	if (!parseFail [0]) {
+    		int pos = (int)buttonView.doubleValue();
+    		if (pos != value) setSelection (value, true, false, true);
+    	}
+    }
+
+    return result;
+}
+
+void sendSelection () {	
+	setSelection (getSelection(), false, true, true);
+}
+
+void updateBackground () {
+	NSColor nsColor = null;
+	if (backgroundImage != null) {
+		nsColor = NSColor.colorWithPatternImage(backgroundImage.handle);
+	} else if (background != null) {
+		nsColor = NSColor.colorWithDeviceRed(background[0], background[1], background[2], background[3]);
+	} else {
+		nsColor = NSColor.textBackgroundColor ();
+	}
+	((NSTextField) textView).setBackgroundColor (nsColor);
+}
+
+/**
+ * Sets the number of decimal places used by the receiver.
+ * <p>
+ * The digit setting is used to allow for floating point values in the receiver.
+ * For example, to set the selection to a floating point value of 1.37 call setDigits() with 
+ * a value of 2 and setSelection() with a value of 137. Similarly, if getDigits() has a value
+ * of 2 and getSelection() returns 137 this should be interpreted as 1.37. This applies to all
+ * numeric APIs. 
+ * </p>
+ * 
+ * @param value the new digits (must be greater than or equal to zero)
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the value is less than zero</li>
+ * </ul> 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setDigits (int value) {
+	checkWidget ();
+	if (value < 0) error (SWT.ERROR_INVALID_ARGUMENT);
+	if (value == digits) return;
+	digits = value;
+	int pos = (int)buttonView.doubleValue();	
+	setSelection (pos, false, true, false);
+}
+
+void setFont(NSFont font) {
+	textView.setFont(font);
+}
+
+void setForeground (float /*double*/ [] color) {
+	NSColor nsColor;
+	if (color == null) {
+		nsColor = NSColor.textColor ();
+	} else {
+		nsColor = NSColor.colorWithDeviceRed (color [0], color [1], color [2], 1);
+	}
+	((NSTextField) textView).setTextColor (nsColor);
+}
+
+/**
+ * Sets the amount that the receiver's value will be
+ * modified by when the up/down arrows are pressed to
+ * the argument, which must be at least one.
+ *
+ * @param value the new increment (must be greater than zero)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setIncrement (int value) {
+	checkWidget ();
+	if (value < 1) return;
+	buttonView.setIncrement(value);
+}
+
+/**
+ * Sets the maximum value that the receiver will allow.  This new
+ * value will be ignored if it is not greater than the receiver's current
+ * minimum value.  If the new maximum is applied then the receiver's
+ * selection value will be adjusted if necessary to fall within its new range.
+ *
+ * @param value the new maximum, which must be greater than the current minimum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMaximum (int value) {
+	checkWidget ();
+	int min = getMinimum ();
+	if (value <= min) return;
+	int pos = getSelection();
+	buttonView.setMaxValue(value);
+	if (pos > value) setSelection (value, true, true, false);	
+}
+
+/**
+ * Sets the minimum value that the receiver will allow.  This new
+ * value will be ignored if it is not less than the receiver's
+ * current maximum value.  If the new minimum is applied then the receiver's
+ * selection value will be adjusted if necessary to fall within its new range.
+ *
+ * @param value the new minimum, which must be less than the current maximum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMinimum (int value) {
+	checkWidget ();
+	int max = getMaximum();
+	if (value >= max) return;
+	int pos = getSelection();
+	buttonView.setMinValue(value);
+	if (pos < value) setSelection (value, true, true, false);
+}
+
+/**
+ * Sets the amount that the receiver's position will be
+ * modified by when the page up/down keys are pressed
+ * to the argument, which must be at least one.
+ *
+ * @param value the page increment (must be greater than zero)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setPageIncrement (int value) {
+	checkWidget ();
+	if (value < 1) return;
+	pageIncrement = value;
+}
+
+/**
+ * Sets the <em>selection</em>, which is the receiver's
+ * position, to the argument. If the argument is not within
+ * the range specified by minimum and maximum, it will be
+ * adjusted to fall within this range.
+ *
+ * @param value the new selection (must be zero or greater)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (int value) {
+	checkWidget ();
+	int min = getMinimum();
+	int max = getMaximum();
+	value = Math.min (Math.max (min, value), max);
+	setSelection (value, true, true, false);
+}
+
+void setSelection (int value, boolean setPos, boolean setText, boolean notify) {
+	if (setPos) {
+		((NSStepper)buttonView).setDoubleValue(value);
+	}
+	if (setText) {
+		String string = String.valueOf (value);
+		if (digits > 0) {
+			String decimalSeparator = textFormatter.decimalSeparator().getString();
+			int index = string.length () - digits;
+			StringBuffer buffer = new StringBuffer ();
+			if (index > 0) {
+				buffer.append (string.substring (0, index));
+				buffer.append (decimalSeparator);
+				buffer.append (string.substring (index));
+			} else {
+				buffer.append ("0");
+				buffer.append (decimalSeparator);
+				while (index++ < 0) buffer.append ("0");
+				buffer.append (string);
+			}
+			string = buffer.toString ();
+		}
+		NSCell cell = new NSCell(textView.cell());
+		if (hooks (SWT.Verify) || filters (SWT.Verify)) {
+			int length = (int)/*64*/cell.title().length();
+			string = verifyText (string, 0, length, null);
+			if (string == null) return;
+		}
+		textView.setStringValue(NSString.stringWith(string));
+		NSRange selection = new NSRange();
+		selection.location = 0;
+		selection.length = string.length();
+		NSText fieldEditor = textView.currentEditor();
+		if (fieldEditor != null) fieldEditor.setSelectedRange(selection);
+		sendEvent (SWT.Modify);
+	}
+	if (notify) postEvent (SWT.Selection);
+}
+
+void setSmallSize () {
+	textView.cell ().setControlSize (OS.NSSmallControlSize);
+	buttonView.cell ().setControlSize (OS.NSSmallControlSize);
+}
+
+/**
+ * Sets the maximum number of characters that the receiver's
+ * text field is capable of holding to be the argument.
+ * <p>
+ * To reset this value to the default, use <code>setTextLimit(Spinner.LIMIT)</code>.
+ * Specifying a limit value larger than <code>Spinner.LIMIT</code> sets the
+ * receiver's limit to <code>Spinner.LIMIT</code>.
+ * </p>
+ * @param limit new text limit
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_CANNOT_BE_ZERO - if the limit is zero</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #LIMIT
+ * 
+ * @since 3.4
+ */
+public void setTextLimit (int limit) {
+	checkWidget();
+	if (limit == 0) error (SWT.ERROR_CANNOT_BE_ZERO);
+	textLimit = limit;
+}
+
+/**
+ * Sets the receiver's selection, minimum value, maximum
+ * value, digits, increment and page increment all at once.
+ * <p>
+ * Note: This is similar to setting the values individually
+ * using the appropriate methods, but may be implemented in a 
+ * more efficient fashion on some platforms.
+ * </p>
+ *
+ * @param selection the new selection value
+ * @param minimum the new minimum value
+ * @param maximum the new maximum value
+ * @param digits the new digits value
+ * @param increment the new increment value
+ * @param pageIncrement the new pageIncrement value
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setValues (int selection, int minimum, int maximum, int digits, int increment, int pageIncrement) {
+	checkWidget ();
+	if (maximum <= minimum) return;
+	if (digits < 0) return;
+	if (increment < 1) return;
+	if (pageIncrement < 1) return;
+	selection = Math.min (Math.max (minimum, selection), maximum);
+	this.pageIncrement = pageIncrement;
+	this.digits = digits;
+	buttonView.setIncrement(increment);
+	buttonView.setMaxValue(maximum);
+	buttonView.setMinValue(minimum);
+	setSelection (selection, true, true, false);
+}
+
+boolean shouldChangeTextInRange_replacementString(int /*long*/ id, int /*long*/ sel, int /*long*/ affectedCharRange, int /*long*/ replacementString) {
+	NSRange range = new NSRange();
+	OS.memmove(range, affectedCharRange, NSRange.sizeof);
+	boolean result = callSuperBoolean(id, sel, range, replacementString);
+	if (hooks (SWT.Verify)) {
+		String text = new NSString(replacementString).getString();
+		NSEvent currentEvent = display.application.currentEvent();
+		int /*long*/ type = currentEvent.type();
+		if (type != OS.NSKeyDown && type != OS.NSKeyUp) currentEvent = null;
+		String newText = verifyText(text, (int)/*64*/range.location, (int)/*64*/(range.location+range.length), currentEvent);
+		if (newText == null) return false;
+		if (text != newText) {
+			int length = newText.length();
+			NSText fieldEditor = textView.currentEditor ();
+			if (fieldEditor != null) {
+				NSRange selectedRange = fieldEditor.selectedRange();
+				if (textLimit != LIMIT) {
+					int /*long*/ charCount = fieldEditor.string().length();
+					if (charCount - selectedRange.length + length > textLimit) {
+						length = (int)/*64*/(textLimit - charCount + selectedRange.length);
+					}
+				}
+				char [] buffer = new char [length];
+				newText.getChars (0, buffer.length, buffer, 0);
+				NSString nsstring = NSString.stringWithCharacters (buffer, buffer.length);
+				fieldEditor.replaceCharactersInRange (fieldEditor.selectedRange (), nsstring);
+				result = false;
+			}
+		}
+		if (!result) sendEvent (SWT.Modify);
+	}
+	return result;
+}
+
+void textDidChange (int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
+	super.textDidChange (id, sel, aNotification);
+	boolean [] parseFail = new boolean [1];
+	int value = getSelectionText (parseFail);
+	if (!parseFail [0]) {
+		int pos = (int)buttonView.doubleValue();
+		if (value != pos) {
+			setSelection (value, true, false, true);
+		}
+	}
+	postEvent (SWT.Modify);
+}
+
+NSRange textView_willChangeSelectionFromCharacterRange_toCharacterRange (int /*long*/ id, int /*long*/ sel, int /*long*/ aTextView, int /*long*/ oldSelectedCharRange, int /*long*/ newSelectedCharRange) {
+	/* allow the selection change to proceed */
+	NSRange result = new NSRange ();
+	OS.memmove(result, newSelectedCharRange, NSRange.sizeof);
+	return result;
+}
+
+void textDidEndEditing(int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
+	boolean [] parseFail = new boolean [1];
+	int value = getSelectionText (parseFail);
+	if (parseFail [0]) {
+		value = (int)buttonView.doubleValue();
+		setSelection (value, false, true, false);
+	}
+	super.textDidEndEditing(id, sel, aNotification);
+}
+
+void updateCursorRects (boolean enabled) {
+	super.updateCursorRects (enabled);
+	updateCursorRects (enabled, textView);
+	updateCursorRects (enabled, buttonView);
+}
+
+String verifyText (String string, int start, int end, NSEvent keyEvent) {
+	Event event = new Event ();
+	if (keyEvent != null) setKeyState(event, SWT.MouseDown, keyEvent);
+	event.text = string;
+	event.start = start;
+	event.end = end;
+	int index = 0;
+	if (digits > 0) {
+		String decimalSeparator = ".";//getDecimalSeparator ();
+		index = string.indexOf (decimalSeparator);
+		if (index != -1) {
+			string = string.substring (0, index) + string.substring (index + 1);
+		}
+		index = 0;
+	}
+	while (index < string.length ()) {
+		if (!Character.isDigit (string.charAt (index))) break;
+		index++;
+	}
+	event.doit = index == string.length ();	
+	/*
+	 * It is possible (but unlikely), that application
+	 * code could have disposed the widget in the verify
+	 * event.  If this happens, answer null to cancel
+	 * the operation.
+	 */
+	sendEvent (SWT.Verify, event);
+	if (!event.doit || isDisposed ()) return null;
+	return event.text;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TabFolder.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TabFolder.java
new file mode 100755
index 0000000..095bb05
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TabFolder.java
@@ -0,0 +1,652 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+ 
+import org.eclipse.swt.internal.cocoa.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class implement the notebook user interface
+ * metaphor.  It allows the user to select a notebook page from
+ * set of pages.
+ * <p>
+ * The item children that may be added to instances of this class
+ * must be of type <code>TabItem</code>.
+ * <code>Control</code> children are created and then set into a
+ * tab item using <code>TabItem#setControl</code>.
+ * </p><p>
+ * Note that although this class is a subclass of <code>Composite</code>,
+ * it does not make sense to set a layout on it.
+ * </p><p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>TOP, BOTTOM</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles TOP and BOTTOM may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tabfolder">TabFolder, TabItem snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class TabFolder extends Composite {
+	TabItem [] items;
+	int itemCount;
+	boolean ignoreSelect;
+	
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see SWT#TOP
+ * @see SWT#BOTTOM
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TabFolder (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the user changes the receiver's selection, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * When <code>widgetSelected</code> is called, the item field of the event object is valid.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the user changes the receiver's selection
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+static int checkStyle (int style) {
+	style = checkBits (style, SWT.TOP, SWT.BOTTOM, 0, 0, 0, 0);
+	/*
+	* Even though it is legal to create this widget
+	* with scroll bars, they serve no useful purpose
+	* because they do not automatically scroll the
+	* widget's client area.  The fix is to clear
+	* the SWT style.
+	*/
+	return style & ~(SWT.H_SCROLL | SWT.V_SCROLL);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	Point size = super.computeSize (wHint, hHint, changed);
+	if (wHint == SWT.DEFAULT && items.length > 0) {
+		NSSize minSize = ((NSTabView)view).minimumSize();
+		Rectangle trim = computeTrim (0, 0, (int)Math.ceil (minSize.width), 0);
+		size.x = Math.max (trim.width, size.x);
+	}
+	return size;
+}
+
+public Rectangle computeTrim (int x, int y, int width, int height) {
+	checkWidget ();
+	NSTabView widget = (NSTabView)view;
+	NSRect rect = widget.contentRect ();
+	x -= rect.x;
+	y -= rect.y;
+	NSRect frame = widget.frame();
+	width += Math.ceil (frame.width - rect.width);
+	height += Math.ceil (frame.height - rect.height);
+	return super.computeTrim (x, y, width, height);
+}
+
+void createHandle () {
+	NSTabView widget = (NSTabView)new SWTTabView().alloc();
+	widget.init ();
+	widget.setDelegate(widget);
+	if ((style & SWT.BOTTOM) != 0) {
+		widget.setTabViewType(OS.NSBottomTabsBezelBorder);
+	}
+	view = widget;
+}
+
+void createItem (TabItem item, int index) {
+	int count = itemCount;
+	if (!(0 <= index && index <= count)) error (SWT.ERROR_INVALID_RANGE);
+	if (count == items.length) {
+		TabItem [] newItems = new TabItem [items.length + 4];
+		System.arraycopy (items, 0, newItems, 0, items.length);
+		items = newItems;
+	}
+	System.arraycopy (items, index, items, index + 1, count - index);
+	items [index] = item;
+	itemCount++;
+	NSTabViewItem nsItem = (NSTabViewItem)new NSTabViewItem().alloc().init();
+	item.nsItem = nsItem;
+	((NSTabView)view).insertTabViewItem(nsItem, index);
+}
+
+void createWidget () {
+	super.createWidget ();
+	items = new TabItem [4];
+}
+
+NSFont defaultNSFont () {
+	return display.tabViewFont;
+}
+
+void destroyItem (TabItem item) {
+	int count = itemCount;
+	int index = 0;
+	while (index < count) {
+		if (items [index] == item) break;
+		index++;
+	}
+	if (index == count) return;
+	--count;
+	System.arraycopy (items, index + 1, items, index, count - index);
+	items [count] = null;
+	if (count == 0) {
+		items = new TabItem [4];
+	}
+	itemCount = count;
+	((NSTabView)view).removeTabViewItem(item.nsItem);
+}
+
+Widget findTooltip (NSPoint pt) {
+	pt = view.convertPoint_fromView_ (pt, null);
+	NSTabViewItem nsItem = ((NSTabView)view).tabViewItemAtPoint (pt);
+	if (nsItem != null) {
+		for (int i = 0; i < itemCount; i++) {
+			TabItem item = items [i];
+			if (item.nsItem.id == nsItem.id) return item;
+		}
+	}
+	return super.findTooltip (pt);
+}
+
+public Rectangle getClientArea () {
+	checkWidget ();
+	NSRect rect = ((NSTabView)view).contentRect();
+	int x = Math.max (0, (int)rect.x);
+	int y = Math.max (0, (int)rect.y);
+	int width = Math.max (0, (int)Math.ceil (rect.width));
+	int height = Math.max (0, (int)Math.ceil (rect.height));
+	return new Rectangle (x, y, width, height);
+}
+
+/**
+ * Returns the item at the given, zero-relative index in the
+ * receiver. Throws an exception if the index is out of range.
+ *
+ * @param index the index of the item to return
+ * @return the item at the given index
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TabItem getItem (int index) {
+	checkWidget ();
+	int count = itemCount;
+	if (!(0 <= index && index < count)) error (SWT.ERROR_INVALID_RANGE);
+	return items [index];
+}
+
+/**
+ * Returns the tab item at the given point in the receiver
+ * or null if no such item exists. The point is in the
+ * coordinate system of the receiver.
+ *
+ * @param point the point used to locate the item
+ * @return the tab item at the given point, or null if the point is not in a tab item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public TabItem getItem (Point point) {
+	checkWidget ();
+	if (point == null) error (SWT.ERROR_NULL_ARGUMENT);
+	NSPoint nsPoint = new NSPoint ();
+	nsPoint.x = point.x;
+	nsPoint.y = point.y;
+	NSTabView tabView = (NSTabView) view;
+	NSTabViewItem tabViewItem = tabView.tabViewItemAtPoint (nsPoint);
+	for (int i = 0; i < itemCount; i++) {
+		NSTabViewItem item = items[i].nsItem;
+		if (item.isEqual (tabViewItem)) {
+			return items [i];
+		}
+	}
+	return null;
+}
+
+/**
+ * Returns the number of items contained in the receiver.
+ *
+ * @return the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemCount () {
+	checkWidget ();
+	return itemCount;
+}
+
+/**
+ * Returns an array of <code>TabItem</code>s which are the items
+ * in the receiver. 
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the items in the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TabItem [] getItems () {
+	checkWidget ();
+	int count = itemCount;
+	TabItem [] result = new TabItem [count];
+	System.arraycopy (items, 0, result, 0, count);
+	return result;
+}
+
+/**
+ * Returns an array of <code>TabItem</code>s that are currently
+ * selected in the receiver. An empty array indicates that no
+ * items are selected.
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its selection, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ * @return an array representing the selection
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TabItem [] getSelection () {
+	checkWidget ();
+	int index = getSelectionIndex ();
+	if (index == -1) return new TabItem [0];
+	return new TabItem [] {items [index]};
+}
+
+/**
+ * Returns the zero-relative index of the item which is currently
+ * selected in the receiver, or -1 if no item is selected.
+ *
+ * @return the index of the selected item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelectionIndex () {
+	checkWidget ();
+	NSTabViewItem selected =  ((NSTabView)view).selectedTabViewItem();
+	if (selected == null) return -1;
+	for (int i = 0; i < itemCount; i++) {
+		if (items[i].nsItem.id == selected.id) return i;
+	}
+	return -1;
+}
+
+float getThemeAlpha () {
+	return (background != null ? 1 : 0.25f) * parent.getThemeAlpha ();
+}
+
+/**
+ * Searches the receiver's list starting at the first item
+ * (index 0) until an item is found that is equal to the 
+ * argument, and returns the index of that item. If no item
+ * is found, returns -1.
+ *
+ * @param item the search item
+ * @return the index of the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int indexOf (TabItem item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int count = itemCount;
+	for (int i=0; i<count; i++) {
+		if (items [i] == item) return i;
+	}
+	return -1;
+}
+
+Point minimumSize (int wHint, int hHint, boolean flushCache) {
+	Control [] children = _getChildren ();
+	int width = 0, height = 0;
+	for (int i=0; i<children.length; i++) {
+		Control child = children [i];
+		int index = 0;
+		int count = itemCount;
+		while (index < count) {
+			if (items [index].control == child) break;
+			index++;
+		}
+		if (index == count) {
+			Rectangle rect = child.getBounds ();
+			width = Math.max (width, rect.x + rect.width);
+			height = Math.max (height, rect.y + rect.height);
+		} else {
+			Point size = child.computeSize (wHint, hHint, flushCache);
+			width = Math.max (width, size.x);
+			height = Math.max (height, size.y);
+		}
+	}
+	return new Point (width, height);
+}
+
+void releaseChildren (boolean destroy) {
+	if (items != null) {
+		for (int i=0; i<items.length; i++) {
+			TabItem item = items [i];
+			if (item != null && !item.isDisposed ()) {
+				item.release (false);
+			}
+		}
+		items = null;
+	}
+	super.releaseChildren (destroy);
+}
+
+void removeControl (Control control) {
+	super.removeControl (control);
+	int count = itemCount;
+	for (int i=0; i<count; i++) {
+		TabItem item = items [i];
+		if (item.control == control) item.setControl (null);
+	}
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the user changes the receiver's selection.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+void setFont (NSFont font) {
+	((NSTabView)view).setFont(font);
+}
+
+/**
+ * Sets the receiver's selection to the given item.
+ * The current selected is first cleared, then the new item is
+ * selected.
+ *
+ * @param item the item to select
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setSelection (TabItem item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setSelection (new TabItem [] {item});
+}
+
+/**
+ * Sets the receiver's selection to be the given array of items.
+ * The current selected is first cleared, then the new items are
+ * selected.
+ *
+ * @param items the array of items
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the items array is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (TabItem [] items) {
+	checkWidget ();
+	if (items == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (items.length == 0) {
+		setSelection (-1, false, false);
+	} else {
+		for (int i=items.length - 1; i>=0; --i) {
+			int index = indexOf (items [i]);
+			if (index != -1) setSelection (index, false, false);
+		}
+	}
+}
+
+/**
+ * Selects the item at the given zero-relative index in the receiver. 
+ * If the item at the index was already selected, it remains selected.
+ * The current selection is first cleared, then the new items are
+ * selected. Indices that are out of range are ignored.
+ *
+ * @param index the index of the item to select
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (int index) {
+	checkWidget ();
+	int count = itemCount;
+	if (!(0 <= index && index < count)) return;
+	setSelection (index, false, false);
+}
+
+void setSelection (int index, boolean notify, boolean force) {
+	if (!(0 <= index && index < itemCount)) return;
+	int currentIndex = getSelectionIndex ();
+	if (!force && currentIndex == index) return;
+	if (currentIndex != -1) {
+		TabItem item = items [currentIndex];
+		if (item != null) {
+			Control control = item.control;
+			if (control != null && !control.isDisposed ()) {
+				control.setVisible (false);
+			}
+		}
+	}
+	ignoreSelect = true;
+	((NSTabView)view).selectTabViewItemAtIndex(index);
+	ignoreSelect = false;
+	index = getSelectionIndex();
+	if (index != -1) {
+		TabItem item = items [index];
+		if (item != null) {
+			Control control = item.control;
+			if (control != null && !control.isDisposed ()) {
+				control.setVisible (true);
+			}
+			if (notify) {
+				Event event = new Event ();
+				event.item = item;
+				sendEvent (SWT.Selection, event);
+			}
+		}
+	}
+}
+
+void setSmallSize () {
+	((NSTabView)view).setControlSize (OS.NSSmallControlSize);
+}
+
+boolean traversePage (boolean next) {
+	int count = getItemCount ();
+	if (count == 0) return false;
+	int index = getSelectionIndex ();
+	if (index == -1) {
+		index = 0;
+	} else {
+		int offset = (next) ? 1 : -1;
+		index = (index + offset + count) % count;
+	}
+	setSelection (index, true, false);
+	return index == getSelectionIndex ();
+}
+
+void tabView_willSelectTabViewItem(int /*long*/ id, int /*long*/ sel, int /*long*/ tabView, int /*long*/ tabViewItem) {
+	if (tabViewItem == 0) return;
+	for (int i = 0; i < itemCount; i++) {
+		TabItem item = items [i];
+		if (item.nsItem.id == tabViewItem) {
+			int currentIndex = getSelectionIndex ();
+			if (currentIndex != -1) {
+				TabItem selected = items [currentIndex];
+				if (selected != null) {
+					Control control = selected.control;
+					if (control != null && !control.isDisposed ()) {
+						control.setVisible (false);
+					}
+				}
+			}
+			Control control = item.control;
+			if (control != null && !control.isDisposed ()) {
+				control.setVisible (true);
+			}
+			break;
+		}
+	}
+}
+
+void tabView_didSelectTabViewItem(int /*long*/ id, int /*long*/ sel, int /*long*/ tabView, int /*long*/ tabViewItem) {
+	if (tabViewItem == 0) return;
+	for (int i = 0; i < itemCount; i++) {
+		TabItem item = items [i];
+		/*
+		* Feature in Cocoa.  For some reason the control on a tab being
+		* deselected has its parent removed natively.  The fix is to
+		* re-set the control's parent.
+		*/
+		Control control = item.control;
+		if (control != null) {
+			NSView topView = control.topView ();
+			if (topView.superview () == null) {
+				contentView ().addSubview (topView, OS.NSWindowBelow, null);
+			}
+		}
+		if (item.nsItem.id == tabViewItem) {
+			if (!ignoreSelect) {
+				Event event = new Event ();
+				event.item = item;
+				postEvent (SWT.Selection, event);
+			}
+		}
+	}
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TabItem.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TabItem.java
new file mode 100755
index 0000000..dcbca3e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TabItem.java
@@ -0,0 +1,373 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class represent a selectable user interface object
+ * corresponding to a tab for a page in a tab folder.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tabfolder">TabFolder, TabItem snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class TabItem extends Item {
+	TabFolder parent;
+	Control control;
+	String toolTipText;
+	NSTabViewItem nsItem;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>TabFolder</code>) and a style value
+ * describing its behavior and appearance. The item is added
+ * to the end of the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TabItem (TabFolder parent, int style) {
+	super (parent, style);
+	this.parent = parent;
+	parent.createItem (this, parent.getItemCount ());
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>TabFolder</code>), a style value
+ * describing its behavior and appearance, and the index
+ * at which to place it in the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ * @param index the zero-relative index to store the receiver in its parent
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the parent (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TabItem (TabFolder parent, int style, int index) {
+	super (parent, style);
+	this.parent = parent;
+	parent.createItem (this, index);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+void destroyWidget () {
+	parent.destroyItem (this);
+	releaseHandle ();
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location
+ * relative to its parent.
+ *
+ * @return the receiver's bounding rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public Rectangle getBounds() {
+	checkWidget();
+	Rectangle result = new Rectangle (0, 0, 0, 0);
+	if (nsItem.respondsToSelector (OS.sel_accessibilityAttributeValue_)) {
+		int /*long*/ posValue = OS.objc_msgSend (nsItem.id, OS.sel_accessibilityAttributeValue_, OS.NSAccessibilityPositionAttribute ());
+		int /*long*/ sizeValue = OS.objc_msgSend (nsItem.id, OS.sel_accessibilityAttributeValue_, OS.NSAccessibilitySizeAttribute ());		
+		NSValue val = new NSValue (posValue);
+		NSPoint pt = val.pointValue ();
+		NSWindow window = parent.view.window ();
+		pt.y = display.getPrimaryFrame().height - pt.y;
+		pt = parent.view.convertPoint_fromView_ (pt, null);
+		pt = window.convertScreenToBase (pt);
+		result.x = (int) pt.x;
+		result.y = (int) pt.y;
+		val = new NSValue (sizeValue);
+		NSSize size = val.sizeValue ();
+		result.width = (int) Math.ceil (size.width);
+		result.height = (int) Math.ceil (size.height);
+	}
+	return result;
+}
+
+/**
+ * Returns the control that is used to fill the client area of
+ * the tab folder when the user selects the tab item.  If no
+ * control has been set, return <code>null</code>.
+ * <p>
+ * @return the control
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Control getControl () {
+	checkWidget ();
+	return control;
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>TabFolder</code>.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TabFolder getParent () {
+	checkWidget ();
+	return parent;
+}
+
+/**
+ * Returns the receiver's tool tip text, or null if it has
+ * not been set.
+ *
+ * @return the receiver's tool tip text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getToolTipText () {
+	checkWidget ();
+	return toolTipText;
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (nsItem != null) nsItem.release();
+	nsItem = null;
+	parent = null;
+}
+
+void releaseParent () {
+	super.releaseParent ();
+	int index = parent.indexOf (this);
+	if (index == parent.getSelectionIndex ()) {
+		if (control != null) control.setVisible (false);
+	}
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	control = null;
+}
+
+/**
+ * Sets the control that is used to fill the client area of
+ * the tab folder when the user selects the tab item.
+ * <p>
+ * @param control the new control (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the control has been disposed</li> 
+ *    <li>ERROR_INVALID_PARENT - if the control is not in the same widget tree</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setControl (Control control) {
+	checkWidget ();
+	if (control != null) {
+		if (control.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT);
+		if (control.parent != parent) error (SWT.ERROR_INVALID_PARENT);
+	}
+	if (this.control != null && this.control.isDisposed ()) {
+		this.control = null;
+	}
+	Control oldControl = this.control, newControl = control;
+	this.control = control;
+	int index = parent.indexOf (this), selectionIndex = parent.getSelectionIndex();;
+	if (index != selectionIndex) {
+		if (newControl != null) {
+			boolean hideControl = true;
+			if (selectionIndex != -1) {
+				Control selectedControl = parent.getItem(selectionIndex).getControl();
+				if (selectedControl == newControl) hideControl=false;
+			} 
+			if (hideControl) newControl.setVisible(false);
+		}
+	} else {
+		if (newControl != null) {
+			newControl.setVisible (true);
+		}
+		if (oldControl != null) oldControl.setVisible (false);
+	}
+	NSView view;
+	if (newControl != null) {
+		view = newControl.topView();
+	} else {
+		view = (NSView)new NSView().alloc();
+		view.init ();
+		view.autorelease();
+	}
+	nsItem.setView (view);
+	/*
+	* Feature in Cocoa.  The method setView() removes the old view from
+	* its parent.  The fix is to detected it has been removed and add
+	* it back.
+	*/
+	if (oldControl != null) {
+		NSView topView = oldControl.topView ();
+		if (topView.superview () == null) {
+			parent.contentView ().addSubview (topView, OS.NSWindowBelow, null);
+		}
+	}
+}
+
+public void setImage (Image image) {
+	checkWidget ();
+	int index = parent.indexOf (this);
+	if (index == -1) return;
+	super.setImage (image);
+}
+
+/**
+ * Sets the receiver's text.  The string may include
+ * the mnemonic character.
+ * </p>
+ * <p>
+ * Mnemonics are indicated by an '&amp;' that causes the next
+ * character to be the mnemonic.  When the user presses a
+ * key sequence that matches the mnemonic, a selection
+ * event occurs. On most platforms, the mnemonic appears
+ * underlined but may be emphasised in a platform specific
+ * manner.  The mnemonic indicator character '&amp;' can be
+ * escaped by doubling it in the string, causing a single
+ * '&amp;' to be displayed.
+ * </p>
+ * 
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ */
+public void setText (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int index = parent.indexOf (this);
+	if (index == -1) return;
+	super.setText (string);
+	char [] chars = new char [string.length ()];
+	string.getChars (0, chars.length, chars, 0);
+	int length = fixMnemonic (chars);
+	NSString str = NSString.stringWithCharacters (chars, length);
+	nsItem.setLabel (str);
+}
+
+/**
+ * Sets the receiver's tool tip text to the argument, which
+ * may be null indicating that the default tool tip for the 
+ * control will be shown. For a control that has a default
+ * tool tip, such as the Tree control on Windows, setting
+ * the tool tip text to an empty string replaces the default,
+ * causing no tool tip text to be shown.
+ * <p>
+ * The mnemonic indicator (character '&amp;') is not displayed in a tool tip.
+ * To display a single '&amp;' in the tool tip, the character '&amp;' can be 
+ * escaped by doubling it in the string.
+ * </p>
+ * 
+ * @param string the new tool tip text (or null)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setToolTipText (String string) {
+	checkWidget();
+	toolTipText = string;
+	parent.checkToolTip (this);
+}
+
+String tooltipText () {
+	return toolTipText;
+}
+
+void update () {
+	setText (text);
+	setImage (image);
+	setToolTipText (toolTipText);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Table.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Table.java
new file mode 100755
index 0000000..c4f8412
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Table.java
@@ -0,0 +1,3084 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.accessibility.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/** 
+ * Instances of this class implement a selectable user interface
+ * object that displays a list of images and strings and issues
+ * notification when selected.
+ * <p>
+ * The item children that may be added to instances of this class
+ * must be of type <code>TableItem</code>.
+ * </p><p>
+ * Style <code>VIRTUAL</code> is used to create a <code>Table</code> whose
+ * <code>TableItem</code>s are to be populated by the client on an on-demand basis
+ * instead of up-front.  This can provide significant performance improvements for
+ * tables that are very large or for which <code>TableItem</code> population is
+ * expensive (for example, retrieving values from an external source).
+ * </p><p>
+ * Here is an example of using a <code>Table</code> with style <code>VIRTUAL</code>:
+ * <code><pre>
+ *  final Table table = new Table (parent, SWT.VIRTUAL | SWT.BORDER);
+ *  table.setItemCount (1000000);
+ *  table.addListener (SWT.SetData, new Listener () {
+ *      public void handleEvent (Event event) {
+ *          TableItem item = (TableItem) event.item;
+ *          int index = table.indexOf (item);
+ *          item.setText ("Item " + index);
+ *          System.out.println (item.getText ());
+ *      }
+ *  }); 
+ * </pre></code>
+ * </p><p>
+ * Note that although this class is a subclass of <code>Composite</code>,
+ * it does not normally make sense to add <code>Control</code> children to
+ * it, or set a layout on it, unless implementing something like a cell
+ * editor.
+ * </p><p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>SINGLE, MULTI, CHECK, FULL_SELECTION, HIDE_SELECTION, VIRTUAL, NO_SCROLL</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection, DefaultSelection, SetData, MeasureItem, EraseItem, PaintItem</dd>
+ * </dl>
+ * </p><p>
+ * Note: Only one of the styles SINGLE, and MULTI may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#table">Table, TableItem, TableColumn snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Table extends Composite {
+	TableItem [] items;
+	TableColumn [] columns;
+	TableColumn sortColumn;
+	TableItem currentItem;
+	NSTableHeaderView headerView;
+	NSTableColumn firstColumn, checkColumn;
+	NSTextFieldCell dataCell;
+	NSButtonCell buttonCell;
+	int columnCount, itemCount, lastIndexOf, sortDirection;
+	boolean ignoreSelect, fixScrollWidth, drawExpansion;
+	Rectangle imageBounds;
+
+	static int NEXT_ID;
+
+	static final int FIRST_COLUMN_MINIMUM_WIDTH = 5;
+	static final int IMAGE_GAP = 3;
+	static final int TEXT_GAP = 2;
+	static final int CELL_GAP = 1;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#SINGLE
+ * @see SWT#MULTI
+ * @see SWT#CHECK
+ * @see SWT#FULL_SELECTION
+ * @see SWT#HIDE_SELECTION
+ * @see SWT#VIRTUAL
+ * @see SWT#NO_SCROLL
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Table (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+int /*long*/ accessibilityAttributeValue (int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	
+	if (accessible != null) {
+		NSString attribute = new NSString(arg0);
+		id returnValue = accessible.internal_accessibilityAttributeValue(attribute, ACC.CHILDID_SELF);
+		if (returnValue != null) return returnValue.id;
+	}
+	
+	NSString attributeName = new NSString(arg0);
+	
+	// Accessibility Verifier queries for a title or description.  NSTableView doesn't
+	// seem to return either, so we return a default description value here.
+	if (attributeName.isEqualToString (OS.NSAccessibilityDescriptionAttribute)) {
+		return NSString.stringWith("").id;
+	}
+	
+	return super.accessibilityAttributeValue(id, sel, arg0);
+}
+
+void _addListener (int eventType, Listener listener) {
+	super._addListener (eventType, listener);
+	clearCachedWidth(items);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the user changes the receiver's selection, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * When <code>widgetSelected</code> is called, the item field of the event object is valid.
+ * If the receiver has the <code>SWT.CHECK</code> style and the check selection changes,
+ * the event object detail field contains the value <code>SWT.CHECK</code>.
+ * <code>widgetDefaultSelected</code> is typically called when an item is double-clicked.
+ * The item field of the event object is valid for default selection, but the detail field is not used.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the user changes the receiver's selection
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection, typedListener);
+	addListener (SWT.DefaultSelection, typedListener);
+}
+
+TableItem _getItem (int index) {
+	if ((style & SWT.VIRTUAL) == 0) return items [index];
+	if (items [index] != null) return items [index];
+	return items [index] = new TableItem (this, SWT.NULL, -1, false);
+}
+
+int calculateWidth (TableItem[] items, int index, GC gc) {
+	int width = 0;
+	for (int i=0; i < itemCount; i++) {
+		TableItem item = items [i];
+		if (item != null && item.cached) {
+			width = Math.max (width, item.calculateWidth (index, gc));
+		}
+	}
+	return width;
+}
+
+NSSize cellSize (int /*long*/ id, int /*long*/ sel) {
+	NSSize size = super.cellSize(id, sel);
+	NSImage image = new NSCell(id).image();
+	if (image != null) size.width += imageBounds.width + IMAGE_GAP;
+	if (hooks(SWT.MeasureItem)) {
+		int /*long*/ [] outValue = new int /*long*/ [1];
+		OS.object_getInstanceVariable(id, Display.SWT_ROW, outValue);
+		int /*long*/ rowIndex = outValue [0];
+		TableItem item = _getItem((int)/*64*/rowIndex);
+		OS.object_getInstanceVariable(id, Display.SWT_COLUMN, outValue);
+		int /*long*/ tableColumn = outValue[0];
+		int columnIndex = 0;
+		for (int i=0; i<columnCount; i++) {
+			if (columns [i].nsColumn.id == tableColumn) {
+				columnIndex = i;
+				break;
+			}
+		}
+		sendMeasureItem (item, columnIndex, size);
+	}
+	return size;
+}
+
+boolean canDragRowsWithIndexes_atPoint(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
+	NSPoint clickPoint = new NSPoint();
+	OS.memmove(clickPoint, arg1, NSPoint.sizeof);
+	NSTableView table = (NSTableView)view;
+	
+	// If the current row is not selected and the user is not attempting to modify the selection, select the row first.
+	int /*long*/ row = table.rowAtPoint(clickPoint);
+	int /*long*/ modifiers = NSApplication.sharedApplication().currentEvent().modifierFlags();
+	
+	boolean drag = (state & DRAG_DETECT) != 0 && hooks (SWT.DragDetect);
+	if (drag) {
+		if (!table.isRowSelected(row) && (modifiers & (OS.NSCommandKeyMask | OS.NSShiftKeyMask | OS.NSAlternateKeyMask)) == 0) {
+			NSIndexSet set = (NSIndexSet)new NSIndexSet().alloc();
+			set = set.initWithIndex(row);
+			table.selectRowIndexes (set, false);
+			set.release();
+		}
+	}
+	
+	// The clicked row must be selected to initiate a drag.
+	return (table.isRowSelected(row) && drag);
+}
+
+boolean checkData (TableItem item) {
+	return checkData (item, indexOf (item));
+}
+
+boolean checkData (TableItem item, int index) {
+	if (item.cached) return true;
+	if ((style & SWT.VIRTUAL) != 0) {
+		item.cached = true;
+		Event event = new Event ();
+		event.item = item;
+		event.index = indexOf (item);
+		currentItem = item;
+		sendEvent (SWT.SetData, event);
+		//widget could be disposed at this point
+		currentItem = null;
+		if (isDisposed () || item.isDisposed ()) return false;
+		if (!setScrollWidth (item)) item.redraw (-1);
+	}
+	return true;
+}
+
+static int checkStyle (int style) {
+	/*
+	* Feature in Windows.  Even when WS_HSCROLL or
+	* WS_VSCROLL is not specified, Windows creates
+	* trees and tables with scroll bars.  The fix
+	* is to set H_SCROLL and V_SCROLL.
+	* 
+	* NOTE: This code appears on all platforms so that
+	* applications have consistent scroll bar behavior.
+	*/
+	if ((style & SWT.NO_SCROLL) == 0) {
+		style |= SWT.H_SCROLL | SWT.V_SCROLL;
+	}
+	/* This platform is always FULL_SELECTION */
+	style |= SWT.FULL_SELECTION;
+	return checkBits (style, SWT.SINGLE, SWT.MULTI, 0, 0, 0, 0);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+/**
+ * Clears the item at the given zero-relative index in the receiver.
+ * The text, icon and other attributes of the item are set to the default
+ * value.  If the table was created with the <code>SWT.VIRTUAL</code> style,
+ * these attributes are requested again as needed.
+ *
+ * @param index the index of the item to clear
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see SWT#VIRTUAL
+ * @see SWT#SetData
+ * 
+ * @since 3.0
+ */
+public void clear (int index) {
+	checkWidget ();
+	if (!(0 <= index && index < itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	TableItem item = items [index];
+	if (item != null) {
+		if (currentItem != item) item.clear ();
+		if (currentItem == null) item.redraw (-1);
+		setScrollWidth (item);
+	}
+}
+/**
+ * Removes the items from the receiver which are between the given
+ * zero-relative start and end indices (inclusive).  The text, icon
+ * and other attributes of the items are set to their default values.
+ * If the table was created with the <code>SWT.VIRTUAL</code> style,
+ * these attributes are requested again as needed.
+ *
+ * @param start the start index of the item to clear
+ * @param end the end index of the item to clear
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if either the start or end are not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see SWT#VIRTUAL
+ * @see SWT#SetData
+ * 
+ * @since 3.0
+ */
+public void clear (int start, int end) {
+	checkWidget ();
+	if (start > end) return;
+	if (!(0 <= start && start <= end && end < itemCount)) {
+		error (SWT.ERROR_INVALID_RANGE);
+	}
+	if (start == 0 && end == itemCount - 1) {
+		clearAll ();
+	} else {
+		for (int i=start; i<=end; i++) {
+			clear (i);
+		}
+	}
+}
+
+/**
+ * Clears the items at the given zero-relative indices in the receiver.
+ * The text, icon and other attributes of the items are set to their default
+ * values.  If the table was created with the <code>SWT.VIRTUAL</code> style,
+ * these attributes are requested again as needed.
+ *
+ * @param indices the array of indices of the items
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the indices array is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see SWT#VIRTUAL
+ * @see SWT#SetData
+ * 
+ * @since 3.0
+ */
+public void clear (int [] indices) {
+	checkWidget ();
+	if (indices == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (indices.length == 0) return;
+	for (int i=0; i<indices.length; i++) {
+		if (!(0 <= indices [i] && indices [i] < itemCount)) {
+			error (SWT.ERROR_INVALID_RANGE);
+		}
+	}
+	for (int i=0; i<indices.length; i++) {
+		clear (indices [i]);
+	}
+}
+
+/**
+ * Clears all the items in the receiver. The text, icon and other
+ * attributes of the items are set to their default values. If the
+ * table was created with the <code>SWT.VIRTUAL</code> style, these
+ * attributes are requested again as needed.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see SWT#VIRTUAL
+ * @see SWT#SetData
+ * 
+ * @since 3.0
+ */
+public void clearAll () {
+	checkWidget ();
+	for (int i=0; i<itemCount; i++) {
+		TableItem item = items [i];
+		if (item != null) {
+			item.clear ();
+		}
+	}
+	if (currentItem == null && isDrawing ()) view.setNeedsDisplay(true);
+	setScrollWidth (items, true);
+}
+
+void clearCachedWidth (TableItem[] items) {
+	if (items == null) return;
+	for (int i = 0; i < items.length; i++) {
+		if (items [i] != null) items [i].width = -1;		
+	}
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget ();
+	int width = 0;
+	if (wHint == SWT.DEFAULT) {
+		if (columnCount != 0) {
+			for (int i=0; i<columnCount; i++) {
+				width += columns [i].getWidth ();
+			}
+		} else {
+			GC gc = new GC (this);
+			width += calculateWidth (items, 0, gc) + CELL_GAP;
+			gc.dispose ();
+		}
+		if ((style & SWT.CHECK) != 0) width += getCheckColumnWidth ();
+	} else {
+		width = wHint;
+	}
+	if (width <= 0) width = DEFAULT_WIDTH;
+	int height = 0;
+	if (hHint == SWT.DEFAULT) {
+		height = itemCount * getItemHeight () + getHeaderHeight();
+	} else {
+		height = hHint;
+	}
+	if (height <= 0) height = DEFAULT_HEIGHT;
+	Rectangle rect = computeTrim (0, 0, width, height);
+	return new Point (rect.width, rect.height);
+}
+
+void createColumn (TableItem item, int index) {
+	String [] strings = item.strings;
+	if (strings != null) {
+		String [] temp = new String [columnCount];
+		System.arraycopy (strings, 0, temp, 0, index);
+		System.arraycopy (strings, index, temp, index+1, columnCount-index-1);
+		temp [index] = "";
+		item.strings = temp;
+	}
+	if (index == 0) item.text = "";
+	Image [] images = item.images;
+	if (images != null) {
+		Image [] temp = new Image [columnCount];
+		System.arraycopy (images, 0, temp, 0, index);
+		System.arraycopy (images, index, temp, index+1, columnCount-index-1);
+		item.images = temp;
+	}
+	if (index == 0) item.image = null;
+	Color [] cellBackground = item.cellBackground;
+	if (cellBackground != null) {
+		Color [] temp = new Color [columnCount];
+		System.arraycopy (cellBackground, 0, temp, 0, index);
+		System.arraycopy (cellBackground, index, temp, index+1, columnCount-index-1);
+		item.cellBackground = temp;
+	}
+	Color [] cellForeground = item.cellForeground;
+	if (cellForeground != null) {
+		Color [] temp = new Color [columnCount];
+		System.arraycopy (cellForeground, 0, temp, 0, index);
+		System.arraycopy (cellForeground, index, temp, index+1, columnCount-index-1);
+		item.cellForeground = temp;
+	}
+	Font [] cellFont = item.cellFont;
+	if (cellFont != null) {
+		Font [] temp = new Font [columnCount];
+		System.arraycopy (cellFont, 0, temp, 0, index);
+		System.arraycopy (cellFont, index, temp, index+1, columnCount-index-1);
+		item.cellFont = temp;
+	}
+}
+
+void createHandle () {
+	NSScrollView scrollWidget = (NSScrollView)new SWTScrollView().alloc();
+	scrollWidget.init();
+	scrollWidget.setHasHorizontalScroller ((style & SWT.H_SCROLL) != 0);
+	scrollWidget.setHasVerticalScroller ((style & SWT.V_SCROLL) != 0);
+	scrollWidget.setAutohidesScrollers(true);
+	scrollWidget.setBorderType(hasBorder() ? OS.NSBezelBorder : OS.NSNoBorder);
+	
+	NSTableView widget = (NSTableView)new SWTTableView().alloc();
+	widget.init();
+	widget.setAllowsMultipleSelection((style & SWT.MULTI) != 0);
+	widget.setAllowsColumnReordering (false);
+	widget.setDataSource(widget);
+	widget.setDelegate(widget);
+	widget.setColumnAutoresizingStyle (OS.NSTableViewNoColumnAutoresizing);
+	NSSize spacing = new NSSize();
+	spacing.width = spacing.height = CELL_GAP;
+	widget.setIntercellSpacing(spacing);
+	widget.setDoubleAction(OS.sel_sendDoubleSelection);
+	if (!hasBorder()) widget.setFocusRingType(OS.NSFocusRingTypeNone);
+
+	headerView = (NSTableHeaderView)new SWTTableHeaderView ().alloc ().init ();
+	widget.setHeaderView (null);
+
+	NSString str = NSString.stringWith(""); //$NON-NLS-1$
+	if ((style & SWT.CHECK) != 0) {
+		checkColumn = (NSTableColumn)new NSTableColumn().alloc();
+		checkColumn = checkColumn.initWithIdentifier(NSString.stringWith(String.valueOf(++NEXT_ID)));
+		checkColumn.headerCell().setTitle(str);
+		widget.addTableColumn (checkColumn);
+		checkColumn.setResizingMask(OS.NSTableColumnNoResizing);
+		checkColumn.setEditable(false);
+		int /*long*/ cls = NSButton.cellClass (); /* use our custom cell class */
+		buttonCell = new NSButtonCell (OS.class_createInstance (cls, 0));
+		buttonCell.init ();
+		checkColumn.setDataCell (buttonCell);
+		buttonCell.setButtonType (OS.NSSwitchButton);
+		buttonCell.setImagePosition (OS.NSImageOnly);
+		buttonCell.setAllowsMixedState (true);
+		checkColumn.setWidth(getCheckColumnWidth());
+	}
+
+	firstColumn = (NSTableColumn)new NSTableColumn().alloc();
+	firstColumn = firstColumn.initWithIdentifier(NSString.stringWith(String.valueOf(++NEXT_ID)));
+	/*
+	* Feature in Cocoa.  If a column's width is too small to show any content
+	* then tableView_objectValueForTableColumn_row is never invoked to
+	* query for item values, which is a problem for VIRTUAL Tables.  The
+	* workaround is to ensure that, for 0-column Tables, the internal first
+	* column always has a minimal width that makes this call come in.
+	*/
+	firstColumn.setMinWidth (FIRST_COLUMN_MINIMUM_WIDTH);
+	firstColumn.setWidth(0);
+	firstColumn.headerCell ().setTitle (str);
+	widget.addTableColumn (firstColumn);
+	dataCell = (NSTextFieldCell)new SWTImageTextCell ().alloc ().init ();
+	dataCell.setLineBreakMode(OS.NSLineBreakByClipping);
+	firstColumn.setDataCell (dataCell);
+
+	scrollView = scrollWidget;
+	view = widget;
+}
+
+void createItem (TableColumn column, int index) {
+	if (!(0 <= index && index <= columnCount)) error (SWT.ERROR_INVALID_RANGE);
+	if (columnCount == columns.length) {
+		TableColumn [] newColumns = new TableColumn [columnCount + 4];
+		System.arraycopy (columns, 0, newColumns, 0, columns.length);
+		columns = newColumns;
+	}
+	NSTableColumn nsColumn;
+	if (columnCount == 0) {
+		//TODO - clear attributes, alignment etc.
+		nsColumn = firstColumn;
+		nsColumn.setMinWidth (0);
+		firstColumn = null;
+	} else {
+		//TODO - set attributes, alignment etc.
+		nsColumn = (NSTableColumn)new NSTableColumn().alloc();
+		nsColumn = nsColumn.initWithIdentifier(NSString.stringWith(String.valueOf(++NEXT_ID)));
+		nsColumn.setMinWidth(0);
+		((NSTableView)view).addTableColumn (nsColumn);
+		int checkColumn = (style & SWT.CHECK) != 0 ? 1 : 0;
+		((NSTableView)view).moveColumn (columnCount + checkColumn, index + checkColumn);
+		nsColumn.setDataCell (dataCell);
+	}
+	column.createJNIRef ();
+	NSTableHeaderCell headerCell = (NSTableHeaderCell)new SWTTableHeaderCell ().alloc ().init ();
+	nsColumn.setHeaderCell (headerCell);
+	display.addWidget (headerCell, column);
+	column.nsColumn = nsColumn;
+	nsColumn.setWidth(0);
+	System.arraycopy (columns, index, columns, index + 1, columnCount++ - index);
+	columns [index] = column;
+	for (int i = 0; i < itemCount; i++) {
+		TableItem item = items [i];
+		if (item != null) {
+			if (columnCount > 1) {
+				createColumn (item, index);
+			}
+		}
+	}
+}
+
+void createItem (TableItem item, int index) {
+	if (!(0 <= index && index <= itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	if (itemCount == items.length) {
+		/* Grow the array faster when redraw is off */
+		int length = getDrawing () ? items.length + 4 : Math.max (4, items.length * 3 / 2);
+		TableItem [] newItems = new TableItem [length];
+		System.arraycopy (items, 0, newItems, 0, items.length);
+		items = newItems;
+	}
+	System.arraycopy (items, index, items, index + 1, itemCount++ - index);
+	items [index] = item;
+	((NSTableView)view).noteNumberOfRowsChanged ();
+	if (index != itemCount) fixSelection (index, true);
+}
+
+void createWidget () {
+	super.createWidget ();
+	items = new TableItem [4];
+	columns = new TableColumn [4];
+}
+
+Color defaultBackground () {
+	return display.getWidgetColor (SWT.COLOR_LIST_BACKGROUND);
+}
+
+NSFont defaultNSFont () {
+	return display.tableViewFont;
+}
+
+Color defaultForeground () {
+	return display.getWidgetColor (SWT.COLOR_LIST_FOREGROUND);
+}
+
+void deregister () {
+	super.deregister ();
+	display.removeWidget (headerView);
+	display.removeWidget (dataCell);
+	if (buttonCell != null) display.removeWidget (buttonCell);
+}
+
+/**
+ * Deselects the item at the given zero-relative index in the receiver.
+ * If the item at the index was already deselected, it remains
+ * deselected. Indices that are out of range are ignored.
+ *
+ * @param index the index of the item to deselect
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void deselect (int index) {
+	checkWidget ();
+	if (0 <= index && index < itemCount) {
+		NSTableView widget = (NSTableView)view;
+		ignoreSelect = true;
+		widget.deselectRow (index);
+		ignoreSelect = false;
+	}
+}
+
+/**
+ * Deselects the items at the given zero-relative indices in the receiver.
+ * If the item at the given zero-relative index in the receiver 
+ * is selected, it is deselected.  If the item at the index
+ * was not selected, it remains deselected.  The range of the
+ * indices is inclusive. Indices that are out of range are ignored.
+ *
+ * @param start the start index of the items to deselect
+ * @param end the end index of the items to deselect
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void deselect (int start, int end) {
+	checkWidget();
+	if (start > end) return;
+	if (end < 0 || start >= itemCount) return;
+	start = Math.max (0, start);
+	end = Math.min (itemCount - 1, end);
+	if (start == 0 && end == itemCount - 1) {
+		deselectAll ();
+	} else {
+		NSTableView widget = (NSTableView)view;
+		ignoreSelect = true;
+		for (int i=start; i<=end; i++) {
+			widget.deselectRow (i);
+		}
+		ignoreSelect = false;
+	}
+}
+
+/**
+ * Deselects the items at the given zero-relative indices in the receiver.
+ * If the item at the given zero-relative index in the receiver 
+ * is selected, it is deselected.  If the item at the index
+ * was not selected, it remains deselected. Indices that are out
+ * of range and duplicate indices are ignored.
+ *
+ * @param indices the array of indices for the items to deselect
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the set of indices is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void deselect (int [] indices) {
+	checkWidget ();
+	if (indices == null) error (SWT.ERROR_NULL_ARGUMENT);
+	NSTableView widget = (NSTableView)view;
+	ignoreSelect = true;
+	for (int i=0; i<indices.length; i++) {
+		widget.deselectRow (indices [i]);
+	}
+	ignoreSelect = false;
+}
+
+/**
+ * Deselects all selected items in the receiver.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void deselectAll () {
+	checkWidget ();
+	NSTableView widget = (NSTableView)view;
+	ignoreSelect = true;
+	widget.deselectAll(null);
+	ignoreSelect = false;
+}
+
+void destroyItem (TableColumn column) {
+	int index = 0;
+	while (index < columnCount) {
+		if (columns [index] == column) break;
+		index++;
+	}
+	for (int i=0; i<itemCount; i++) {
+		TableItem item = items [i];
+		if (item != null) {
+			if (columnCount <= 1) {
+				item.strings = null;
+				item.images = null;
+				item.cellBackground = null;
+				item.cellForeground = null;
+				item.cellFont = null;
+			} else {
+				if (item.strings != null) {
+					String [] strings = item.strings;
+					if (index == 0) {
+						item.text = strings [1] != null ? strings [1] : "";
+					}
+					String [] temp = new String [columnCount - 1];
+					System.arraycopy (strings, 0, temp, 0, index);
+					System.arraycopy (strings, index + 1, temp, index, columnCount - 1 - index);
+					item.strings = temp;
+				} else {
+					if (index == 0) item.text = "";
+				}
+				if (item.images != null) {
+					Image [] images = item.images;
+					if (index == 0) item.image = images [1];
+					Image [] temp = new Image [columnCount - 1];
+					System.arraycopy (images, 0, temp, 0, index);
+					System.arraycopy (images, index + 1, temp, index, columnCount - 1 - index);
+					item.images = temp;
+				} else {
+					if (index == 0) item.image = null;
+				}
+				if (item.cellBackground != null) {
+					Color [] cellBackground = item.cellBackground;
+					Color [] temp = new Color [columnCount - 1];
+					System.arraycopy (cellBackground, 0, temp, 0, index);
+					System.arraycopy (cellBackground, index + 1, temp, index, columnCount - 1 - index);
+					item.cellBackground = temp;
+				}
+				if (item.cellForeground != null) {
+					Color [] cellForeground = item.cellForeground;
+					Color [] temp = new Color [columnCount - 1];
+					System.arraycopy (cellForeground, 0, temp, 0, index);
+					System.arraycopy (cellForeground, index + 1, temp, index, columnCount - 1 - index);
+					item.cellForeground = temp;
+				}
+				if (item.cellFont != null) {
+					Font [] cellFont = item.cellFont;
+					Font [] temp = new Font [columnCount - 1];
+					System.arraycopy (cellFont, 0, temp, 0, index);
+					System.arraycopy (cellFont, index + 1, temp, index, columnCount - 1 - index);
+					item.cellFont = temp;
+				}
+			}
+		}
+	}
+
+	int oldIndex = indexOf (column.nsColumn);
+
+	System.arraycopy (columns, index + 1, columns, index, --columnCount - index);
+	columns [columnCount] = null;
+	if (columnCount == 0) {
+		//TODO - reset attributes
+		firstColumn = column.nsColumn;
+		firstColumn.retain ();
+		/*
+		* Feature in Cocoa.  If a column's width is too small to show any content
+		* then tableView_objectValueForTableColumn_row is never invoked to
+		* query for item values, which is a problem for VIRTUAL Tables.  The
+		* workaround is to ensure that, for 0-column Tables, the internal first
+		* column always has a minimal width that makes this call come in.
+		*/
+		firstColumn.setMinWidth (FIRST_COLUMN_MINIMUM_WIDTH);
+		setScrollWidth ();
+	} else {
+		((NSTableView)view).removeTableColumn(column.nsColumn);
+	}
+
+	NSArray array = ((NSTableView)view).tableColumns ();
+	int arraySize = (int)/*64*/array.count ();
+	for (int i = oldIndex; i < arraySize; i++) {
+		int /*long*/ columnId = array.objectAtIndex (i).id;
+		for (int j = 0; j < columnCount; j++) {
+			if (columns[j].nsColumn.id == columnId) {
+				columns [j].sendEvent (SWT.Move);
+				break;
+			}
+		}
+	}
+}
+
+void destroyItem (TableItem item) {
+	int index = 0;
+	while (index < itemCount) {
+		if (items [index] == item) break;
+		index++;
+	}
+	if (index != itemCount - 1) fixSelection (index, false); 
+	System.arraycopy (items, index + 1, items, index, --itemCount - index);
+	items [itemCount] = null;
+	((NSTableView)view).noteNumberOfRowsChanged();
+	if (itemCount == 0) setTableEmpty ();
+}
+
+boolean dragDetect(int x, int y, boolean filter, boolean[] consume) {
+	// Let Cocoa determine if a drag is starting and fire the notification when we get the callback.
+	return false;
+}
+
+void drawInteriorWithFrame_inView (int /*long*/ id, int /*long*/ sel, NSRect rect, int /*long*/ view) {
+	boolean hooksErase = hooks (SWT.EraseItem);
+	boolean hooksPaint = hooks (SWT.PaintItem);
+	boolean hooksMeasure = hooks (SWT.MeasureItem);
+
+	NSTextFieldCell cell = new NSTextFieldCell (id);
+
+	NSTableView widget = (NSTableView)this.view;
+	int /*long*/ [] outValue = new int /*long*/ [1];
+	OS.object_getInstanceVariable(id, Display.SWT_ROW, outValue);
+	int /*long*/ rowIndex = outValue [0];
+	TableItem item = _getItem((int)/*64*/rowIndex);
+	OS.object_getInstanceVariable(id, Display.SWT_COLUMN, outValue);
+	int /*long*/ tableColumn = outValue[0];
+	int /*long*/ nsColumnIndex = widget.tableColumns().indexOfObjectIdenticalTo(new id(tableColumn));
+	int columnIndex = 0;
+	for (int i=0; i<columnCount; i++) {
+		if (columns [i].nsColumn.id == tableColumn) {
+			columnIndex = i;
+			break;
+		}
+	}
+
+	Color background = item.cellBackground != null ? item.cellBackground [columnIndex] : null;
+	if (background == null) background = item.background;
+	boolean drawBackground = background != null;
+	boolean drawForeground = true;
+	boolean isSelected = cell.isHighlighted();
+	boolean drawSelection = isSelected;
+	boolean hasFocus = hooksErase && hasFocus ();
+
+	Color selectionBackground = null, selectionForeground = null;
+	if (isSelected && (hooksErase || hooksPaint)) {
+		selectionForeground = Color.cocoa_new(display, hasFocus ? display.alternateSelectedControlTextColor : display.selectedControlTextColor);
+		selectionBackground = Color.cocoa_new(display, hasFocus ? display.alternateSelectedControlColor : display.secondarySelectedControlColor);
+	}
+	
+	NSSize contentSize = super.cellSize(id, OS.sel_cellSize);
+	NSImage image = cell.image();
+	if (image != null) contentSize.width += imageBounds.width + IMAGE_GAP;
+	int contentWidth = (int)Math.ceil (contentSize.width);
+	NSSize spacing = widget.intercellSpacing();
+	int itemHeight = (int)Math.ceil (widget.rowHeight() + spacing.height);
+	
+	NSRect cellRect = widget.rectOfColumn (nsColumnIndex);
+	cellRect.y = rect.y;
+	cellRect.height = rect.height + spacing.height;
+	if (columnCount == 0) {
+		NSRect rowRect = widget.rectOfRow (rowIndex);
+		cellRect.width = rowRect.width;
+	}
+	float /*double*/ offsetX = 0, offsetY = 0;
+	if (hooksPaint || hooksErase) {
+		NSRect frameCell = widget.frameOfCellAtColumn(nsColumnIndex, rowIndex);
+		offsetX = rect.x - frameCell.x;
+		offsetY = rect.y - frameCell.y;
+		if (drawExpansion) {
+			offsetX -= 0.5f;
+			offsetY -= 0.5f;
+		}
+	}
+	int itemX = (int)(rect.x - offsetX), itemY = (int)(rect.y - offsetY);
+	NSGraphicsContext context = NSGraphicsContext.currentContext ();
+
+	if (hooksMeasure) {
+		sendMeasureItem(item, columnIndex, contentSize);
+	}
+	
+	Color userForeground = null;
+	if (hooksErase) {
+		context.saveGraphicsState();
+		NSAffineTransform transform = NSAffineTransform.transform();
+		transform.translateXBy(offsetX, offsetY);
+		transform.concat();
+
+		GCData data = new GCData ();
+		data.paintRect = cellRect;
+		GC gc = GC.cocoa_new (this, data);
+		gc.setFont (item.getFont (columnIndex));
+		if (isSelected) {
+			gc.setForeground (selectionForeground);
+			gc.setBackground (selectionBackground);
+		} else {
+			gc.setForeground (item.getForeground (columnIndex));
+			gc.setBackground (item.getBackground (columnIndex));
+		}
+		if (!drawExpansion) {
+			gc.setClipping ((int)(cellRect.x - offsetX), (int)(cellRect.y - offsetY), (int)cellRect.width, (int)cellRect.height);
+		}
+		Event event = new Event ();
+		event.item = item;
+		event.gc = gc;
+		event.index = columnIndex;
+		event.detail = SWT.FOREGROUND;
+		if (drawBackground) event.detail |= SWT.BACKGROUND;
+		if (isSelected) event.detail |= SWT.SELECTED;
+		event.x = (int)cellRect.x;
+		event.y = (int)cellRect.y;
+		event.width = (int)cellRect.width;
+		event.height = (int)cellRect.height;
+		sendEvent (SWT.EraseItem, event);
+		if (!event.doit) {
+			drawForeground = drawBackground = drawSelection = false; 
+		} else {
+			drawBackground = drawBackground && (event.detail & SWT.BACKGROUND) != 0;
+			drawForeground = (event.detail & SWT.FOREGROUND) != 0;
+			drawSelection = drawSelection && (event.detail & SWT.SELECTED) != 0;			
+		}
+		if (!drawSelection && isSelected) {
+			userForeground = Color.cocoa_new(display, gc.getForeground().handle);
+		}
+		gc.dispose ();
+		
+		context.restoreGraphicsState();
+
+		if (isDisposed ()) return;
+		if (item.isDisposed ()) return;
+
+		if (drawSelection && ((style & SWT.HIDE_SELECTION) == 0 || hasFocus)) {
+			cellRect.height -= spacing.height;
+			callSuper (widget.id, OS.sel_highlightSelectionInClipRect_, cellRect);
+			cellRect.height += spacing.height;
+		}
+	}
+
+	if (drawBackground && !drawSelection) {
+		context.saveGraphicsState ();
+		float /*double*/ [] colorRGB = background.handle;
+		NSColor color = NSColor.colorWithDeviceRed (colorRGB[0], colorRGB[1], colorRGB[2], 1f);
+		color.setFill ();
+		NSBezierPath.fillRect (cellRect);
+		context.restoreGraphicsState ();
+	}
+
+	if (drawForeground) {
+		if ((!drawExpansion || hooksMeasure) && image != null) {
+			NSRect destRect = new NSRect();
+			destRect.x = rect.x + IMAGE_GAP;
+			destRect.y = rect.y + (float)Math.ceil((rect.height - imageBounds.height) / 2);
+			destRect.width = imageBounds.width;
+			destRect.height = imageBounds.height;
+			NSRect srcRect = new NSRect();
+			NSSize size = image.size();
+			srcRect.width = size.width;
+			srcRect.height = size.height;
+			context.saveGraphicsState();
+			NSBezierPath.bezierPathWithRect(rect).addClip();
+			NSAffineTransform transform = NSAffineTransform.transform();
+			transform.scaleXBy(1, -1);
+			transform.translateXBy(0, -(destRect.height + 2 * destRect.y));
+			transform.concat();
+			image.drawInRect(destRect, srcRect, OS.NSCompositeSourceOver, 1);
+			context.restoreGraphicsState();
+			int imageWidth = imageBounds.width + IMAGE_GAP;
+			rect.x += imageWidth;
+			rect.width -= imageWidth;
+		}
+		cell.setHighlighted (false);
+		boolean callSuper = false;
+		if (userForeground != null) {
+			/*
+			* Bug in Cocoa.  For some reason, it is not possible to change the
+			* foreground color to black when the cell is highlighted. The text
+			* still draws white.  The fix is to draw the text and not call super.
+			*/
+			float /*double*/ [] color = userForeground.handle;
+			if (color[0] == 0 && color[1] == 0 && color[2] == 0 && color[3] == 1) {
+				NSMutableAttributedString newStr = new NSMutableAttributedString(cell.attributedStringValue().mutableCopy());
+				NSRange range = new NSRange();
+				range.length = newStr.length();
+				newStr.removeAttribute(OS.NSForegroundColorAttributeName, range);
+				NSRect newRect = new NSRect();
+				newRect.x = rect.x + TEXT_GAP;
+				newRect.y = rect.y;
+				newRect.width = rect.width - TEXT_GAP;
+				newRect.height = rect.height;
+				NSSize size = newStr.size();
+				if (newRect.height > size.height) {
+					newRect.y += (newRect.height - size.height) / 2;
+					newRect.height = size.height;
+				}
+				newStr.drawInRect(newRect);
+				newStr.release();
+			} else {
+				NSColor nsColor = NSColor.colorWithDeviceRed(color[0], color[1], color[2], color[3]);
+				cell.setTextColor(nsColor);
+				callSuper = true;
+			}			
+		} else {
+			callSuper = true;
+		}
+		if (callSuper) {
+			NSAttributedString attrStr = cell.attributedStringValue();
+			NSSize size = attrStr.size();
+			if (rect.height > size.height) {
+				rect.y += (rect.height - size.height) / 2;
+				rect.height = size.height;
+			}
+			super.drawInteriorWithFrame_inView(id, sel, rect, view);
+		}
+	}
+
+	if (hooksPaint) {
+		context.saveGraphicsState();
+		NSAffineTransform transform = NSAffineTransform.transform();
+		transform.translateXBy(offsetX, offsetY);
+		transform.concat();
+
+		GCData data = new GCData ();
+		data.paintRect = cellRect;
+		GC gc = GC.cocoa_new (this, data);
+		gc.setFont (item.getFont (columnIndex));
+		if (drawSelection) {
+			gc.setForeground (selectionForeground);
+			gc.setBackground (selectionBackground);
+		} else {
+			gc.setForeground (userForeground != null ? userForeground : item.getForeground (columnIndex));
+			gc.setBackground (item.getBackground (columnIndex));
+		}
+		if (!drawExpansion) {
+			gc.setClipping ((int)(cellRect.x - offsetX), (int)(cellRect.y - offsetY), (int)cellRect.width, (int)cellRect.height);
+		}
+		Event event = new Event ();
+		event.item = item;
+		event.gc = gc;
+		event.index = columnIndex;
+		if (drawForeground) event.detail |= SWT.FOREGROUND;
+		if (drawBackground) event.detail |= SWT.BACKGROUND;
+		if (drawSelection) event.detail |= SWT.SELECTED;
+		event.x = itemX;
+		event.y = itemY;
+		event.width = contentWidth;
+		event.height = itemHeight;
+		sendEvent (SWT.PaintItem, event);
+		gc.dispose ();
+
+		context.restoreGraphicsState();
+	}
+}
+
+void drawWithExpansionFrame_inView (int /*long*/ id, int /*long*/ sel, NSRect cellFrame, int /*long*/ view) {
+	drawExpansion = true;
+	super.drawWithExpansionFrame_inView(id, sel, cellFrame, view);
+	drawExpansion = false;
+}
+
+void drawRect(int id, int sel, NSRect rect) {
+	fixScrollWidth = false;
+	super.drawRect(id, sel, rect);
+	if (isDisposed ()) return;
+	if (fixScrollWidth) {
+		fixScrollWidth = false;
+		if (setScrollWidth (items, true)) view.setNeedsDisplay(true);
+	}
+}
+
+NSRect expansionFrameWithFrame_inView(int /*long*/ id, int /*long*/ sel, NSRect cellRect, int /*long*/ view) {
+	if (toolTipText == null) {
+		NSRect rect = super.expansionFrameWithFrame_inView(id, sel, cellRect, view);
+		NSCell cell = new NSCell(id);
+		if (rect.width != 0 && rect.height != 0) {
+			if (hooks(SWT.MeasureItem)) {
+				NSSize cellSize = cell.cellSize();
+				cellRect.width = cellSize.width;
+				return cellRect;
+			}
+		} else {
+			NSRect expansionRect;
+			if (hooks(SWT.MeasureItem)) {
+				expansionRect = cellRect;
+				NSSize cellSize = cell.cellSize();
+				expansionRect.width = cellSize.width;
+			} else {
+				expansionRect = cell.titleRectForBounds(cellRect);
+				NSSize cellSize = super.cellSize(id, OS.sel_cellSize);
+				expansionRect.width = cellSize.width;
+			}
+			NSRect contentRect = scrollView.contentView().bounds();
+			OS.NSIntersectionRect(contentRect, expansionRect, contentRect);
+			if (!OS.NSEqualRects(expansionRect, contentRect)) {
+				return expansionRect;
+			}
+		}
+		return rect;
+	}
+	return new NSRect();
+}
+
+Widget findTooltip (NSPoint pt) {
+	NSTableView widget = (NSTableView)view;
+	NSTableHeaderView headerView = widget.headerView();
+	if (headerView != null) {
+		pt = headerView.convertPoint_fromView_ (pt, null);
+		int /*long*/ index = headerView.columnAtPoint (pt);
+		if (index != -1) {
+			NSArray nsColumns = widget.tableColumns ();
+			id nsColumn = nsColumns.objectAtIndex (index);
+			for (int i = 0; i < columnCount; i++) {
+				TableColumn column = columns [i];
+				if (column.nsColumn.id == nsColumn.id) {
+					return column;
+				}
+			}
+		}
+	}
+	return super.findTooltip (pt);
+}
+
+void fixSelection (int index, boolean add) {
+	int [] selection = getSelectionIndices ();
+	if (selection.length == 0) return;
+	int newCount = 0;
+	boolean fix = false;
+	for (int i = 0; i < selection.length; i++) {
+		if (!add && selection [i] == index) {
+			fix = true;
+		} else {
+			int newIndex = newCount++;
+			selection [newIndex] = selection [i];
+			if (selection [newIndex] >= index) {
+				selection [newIndex] += add ? 1 : -1;
+				fix = true;
+			}
+		}
+	}
+	if (fix) select (selection, newCount, true);
+}
+
+int getCheckColumnWidth () {
+	return (int)checkColumn.dataCell().cellSize().width;
+}
+
+public Rectangle getClientArea () {
+	checkWidget ();
+	Rectangle rect = super.getClientArea ();
+	NSTableHeaderView headerView = ((NSTableView) view).headerView ();
+	if (headerView != null) {
+		int height =  (int) headerView.bounds ().height;
+		rect.y -= height;
+		rect.height += height;
+	}
+	return rect;
+}
+
+TableColumn getColumn (id id) {
+	for (int i = 0; i < columnCount; i++) {
+		if (columns[i].nsColumn.id == id.id) {
+			return columns[i]; 
+		}
+	}
+	return null;
+}
+
+/**
+ * Returns the column at the given, zero-relative index in the
+ * receiver. Throws an exception if the index is out of range.
+ * Columns are returned in the order that they were created.
+ * If no <code>TableColumn</code>s were created by the programmer,
+ * this method will throw <code>ERROR_INVALID_RANGE</code> despite
+ * the fact that a single column of data may be visible in the table.
+ * This occurs when the programmer uses the table like a list, adding
+ * items but never creating a column.
+ *
+ * @param index the index of the column to return
+ * @return the column at the given index
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Table#getColumnOrder()
+ * @see Table#setColumnOrder(int[])
+ * @see TableColumn#getMoveable()
+ * @see TableColumn#setMoveable(boolean)
+ * @see SWT#Move
+ */
+public TableColumn getColumn (int index) {
+	checkWidget ();
+	if (!(0 <=index && index < columnCount)) error (SWT.ERROR_INVALID_RANGE);
+	return columns [index];
+}
+
+/**
+ * Returns the number of columns contained in the receiver.
+ * If no <code>TableColumn</code>s were created by the programmer,
+ * this value is zero, despite the fact that visually, one column
+ * of items may be visible. This occurs when the programmer uses
+ * the table like a list, adding items but never creating a column.
+ *
+ * @return the number of columns
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getColumnCount () {
+	checkWidget ();
+	return columnCount;
+}
+
+/**
+ * Returns an array of zero-relative integers that map
+ * the creation order of the receiver's items to the
+ * order in which they are currently being displayed.
+ * <p>
+ * Specifically, the indices of the returned array represent
+ * the current visual order of the items, and the contents
+ * of the array represent the creation order of the items.
+ * </p><p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the current visual order of the receiver's items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Table#setColumnOrder(int[])
+ * @see TableColumn#getMoveable()
+ * @see TableColumn#setMoveable(boolean)
+ * @see SWT#Move
+ * 
+ * @since 3.1
+ */
+public int [] getColumnOrder () {
+	checkWidget ();
+	int [] order = new int [columnCount];
+	for (int i = 0; i < columnCount; i++) {
+		TableColumn column = columns [i];
+		int index = indexOf (column.nsColumn);
+		if ((style & SWT.CHECK) != 0) index -= 1;
+		order [index] = i;
+	}
+	return order;
+}
+
+/**
+ * Returns an array of <code>TableColumn</code>s which are the
+ * columns in the receiver.  Columns are returned in the order
+ * that they were created.  If no <code>TableColumn</code>s were
+ * created by the programmer, the array is empty, despite the fact
+ * that visually, one column of items may be visible. This occurs
+ * when the programmer uses the table like a list, adding items but
+ * never creating a column.
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the items in the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Table#getColumnOrder()
+ * @see Table#setColumnOrder(int[])
+ * @see TableColumn#getMoveable()
+ * @see TableColumn#setMoveable(boolean)
+ * @see SWT#Move
+ */
+public TableColumn [] getColumns () {
+	checkWidget ();
+	TableColumn [] result = new TableColumn [columnCount];
+	System.arraycopy (columns, 0, result, 0, columnCount);
+	return result;
+}
+
+/**
+ * Returns the width in pixels of a grid line.
+ *
+ * @return the width of a grid line in pixels
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getGridLineWidth () {
+	checkWidget ();
+	return 0;
+}
+
+/**
+ * Returns the height of the receiver's header 
+ *
+ * @return the height of the header or zero if the header is not visible
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.0 
+ */
+public int getHeaderHeight () {
+	checkWidget ();
+	NSTableHeaderView headerView = ((NSTableView)view).headerView();
+	if (headerView == null) return 0;
+	return (int)headerView.bounds().height;
+}
+
+/**
+ * Returns <code>true</code> if the receiver's header is visible,
+ * and <code>false</code> otherwise.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, this method
+ * may still indicate that it is considered visible even though
+ * it may not actually be showing.
+ * </p>
+ *
+ * @return the receiver's header's visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getHeaderVisible () {
+	checkWidget ();
+	return ((NSTableView)view).headerView() != null;
+}
+
+/**
+ * Returns the item at the given, zero-relative index in the
+ * receiver. Throws an exception if the index is out of range.
+ *
+ * @param index the index of the item to return
+ * @return the item at the given index
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TableItem getItem (int index) {
+	checkWidget ();
+	if (!(0 <= index && index < itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	return _getItem (index);
+}
+
+/**
+ * Returns the item at the given point in the receiver
+ * or null if no such item exists. The point is in the
+ * coordinate system of the receiver.
+ * <p>
+ * The item that is returned represents an item that could be selected by the user.
+ * For example, if selection only occurs in items in the first column, then null is 
+ * returned if the point is outside of the item. 
+ * Note that the SWT.FULL_SELECTION style hint, which specifies the selection policy,
+ * determines the extent of the selection.
+ * </p>
+ *
+ * @param point the point used to locate the item
+ * @return the item at the given point, or null if the point is not in a selectable item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TableItem getItem (Point point) {
+	checkWidget ();
+	NSTableView widget = (NSTableView)view;
+	NSPoint pt = new NSPoint();
+	pt.x = point.x;
+	pt.y = point.y;
+	int row = (int)/*64*/widget.rowAtPoint(pt);
+	if (row == -1) return null;
+	return items[row];
+}
+
+/**
+ * Returns the number of items contained in the receiver.
+ *
+ * @return the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemCount () {
+	checkWidget ();
+	return itemCount;
+}
+
+/**
+ * Returns the height of the area which would be used to
+ * display <em>one</em> of the items in the receiver.
+ *
+ * @return the height of one item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemHeight () {
+	checkWidget ();
+	return (int)((NSTableView)view).rowHeight() + CELL_GAP;
+}
+
+/**
+ * Returns a (possibly empty) array of <code>TableItem</code>s which
+ * are the items in the receiver. 
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the items in the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TableItem [] getItems () {
+	checkWidget ();
+	TableItem [] result = new TableItem [itemCount];
+	if ((style & SWT.VIRTUAL) != 0) {
+		for (int i=0; i<itemCount; i++) {
+			result [i] = _getItem (i);
+		}
+	} else {
+		System.arraycopy (items, 0, result, 0, itemCount);
+	}
+	return result;
+}
+
+/**
+ * Returns <code>true</code> if the receiver's lines are visible,
+ * and <code>false</code> otherwise. Note that some platforms draw 
+ * grid lines while others may draw alternating row colors.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, this method
+ * may still indicate that it is considered visible even though
+ * it may not actually be showing.
+ * </p>
+ *
+ * @return the visibility state of the lines
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getLinesVisible () {
+	checkWidget ();
+	return ((NSTableView)view).usesAlternatingRowBackgroundColors();
+}
+
+/**
+ * Returns an array of <code>TableItem</code>s that are currently
+ * selected in the receiver. The order of the items is unspecified.
+ * An empty array indicates that no items are selected.
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its selection, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ * @return an array representing the selection
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TableItem [] getSelection () {
+	checkWidget ();
+	NSTableView widget = (NSTableView)view;
+	if (widget.numberOfSelectedRows() == 0) {
+		return new TableItem [0];
+	}
+	NSIndexSet selection = widget.selectedRowIndexes();
+	int count = (int)/*64*/selection.count();
+	int /*long*/ [] indexBuffer = new int /*long*/ [count];
+	selection.getIndexes(indexBuffer, count, 0);
+	TableItem [] result = new TableItem  [count];
+	for (int i=0; i<count; i++) {
+		result [i] = _getItem ((int)/*64*/indexBuffer [i]);
+	}
+	return result;
+}
+
+/**
+ * Returns the number of selected items contained in the receiver.
+ *
+ * @return the number of selected items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelectionCount () {
+	checkWidget ();
+	return (int)/*64*/((NSTableView)view).numberOfSelectedRows();
+}
+
+/**
+ * Returns the zero-relative index of the item which is currently
+ * selected in the receiver, or -1 if no item is selected.
+ *
+ * @return the index of the selected item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelectionIndex () {
+	checkWidget ();
+	NSTableView widget = (NSTableView)view;
+	if (widget.numberOfSelectedRows() == 0) {
+		return -1;
+	}
+	NSIndexSet selection = widget.selectedRowIndexes();
+	int count = (int)/*64*/selection.count();
+	int /*long*/ [] result = new int /*long*/ [count];
+	selection.getIndexes(result, count, 0);
+	return (int)/*64*/result [0];
+}
+
+/**
+ * Returns the zero-relative indices of the items which are currently
+ * selected in the receiver. The order of the indices is unspecified.
+ * The array is empty if no items are selected.
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its selection, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ * @return the array of indices of the selected items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int [] getSelectionIndices () {
+	checkWidget ();
+	NSTableView widget = (NSTableView)view;
+	if (widget.numberOfSelectedRows() == 0) {
+		return new int [0];
+	}
+	NSIndexSet selection = widget.selectedRowIndexes();
+	int count = (int)/*64*/selection.count();
+	int /*long*/ [] indices = new int /*long*/ [count];
+	selection.getIndexes(indices, count, 0);
+	int [] result = new int [count];
+	for (int i = 0; i < indices.length; i++) {
+		result [i] = (int)/*64*/indices [i];
+	}
+	return result;
+}
+
+/**
+ * Returns the column which shows the sort indicator for
+ * the receiver. The value may be null if no column shows
+ * the sort indicator.
+ *
+ * @return the sort indicator 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setSortColumn(TableColumn)
+ * 
+ * @since 3.2
+ */
+public TableColumn getSortColumn () {
+	checkWidget ();
+	return sortColumn;
+}
+
+/**
+ * Returns the direction of the sort indicator for the receiver. 
+ * The value will be one of <code>UP</code>, <code>DOWN</code> 
+ * or <code>NONE</code>.
+ *
+ * @return the sort direction
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setSortDirection(int)
+ * 
+ * @since 3.2
+ */
+public int getSortDirection () {
+	checkWidget ();
+	return sortDirection;
+}
+
+/**
+ * Returns the zero-relative index of the item which is currently
+ * at the top of the receiver. This index can change when items are
+ * scrolled or new items are added or removed.
+ *
+ * @return the index of the top item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getTopIndex () {
+	checkWidget ();
+	//TODO - partial item at the top
+	NSRect rect = scrollView.documentVisibleRect();
+	NSPoint point = new NSPoint();
+	point.x = rect.x;
+	point.y = rect.y;
+    return (int)/*64*/((NSTableView)view).rowAtPoint(point);
+}
+
+void highlightSelectionInClipRect(int /*long*/ id, int /*long*/ sel, int /*long*/ rect) {
+	if (hooks (SWT.EraseItem)) return;
+	if ((style & SWT.HIDE_SELECTION) != 0 && !hasFocus()) return;
+	NSRect clipRect = new NSRect ();
+	OS.memmove (clipRect, rect, NSRect.sizeof);
+	callSuper (id, sel, clipRect);
+}
+
+int /*long*/ hitTestForEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event, NSRect rect, int /*long*/ controlView) {
+	/*
+	* For some reason, the cell class needs to implement hitTestForEvent:inRect:ofView:,
+	* otherwise the double action selector is not called properly.
+	*/	
+	return callSuper(id, sel, event, rect, controlView);
+}
+
+int /*long*/ image (int /*long*/ id, int /*long*/ sel) {
+	int /*long*/ [] image = new int /*long*/ [1];
+	OS.object_getInstanceVariable(id, Display.SWT_IMAGE, image);
+	return image[0];
+}
+
+NSRect imageRectForBounds (int /*long*/ id, int /*long*/ sel, NSRect cellFrame) {
+	NSImage image = new NSCell(id).image();
+	if (image != null) {
+		cellFrame.x += IMAGE_GAP;
+		cellFrame.width = imageBounds.width;
+		cellFrame.height = imageBounds.height;
+	}
+	return cellFrame;
+}
+
+int indexOf (NSTableColumn column) {
+	return (int)/*64*/((NSTableView)view).tableColumns().indexOfObjectIdenticalTo(column);
+}
+
+/**
+ * Searches the receiver's list starting at the first column
+ * (index 0) until a column is found that is equal to the 
+ * argument, and returns the index of that column. If no column
+ * is found, returns -1.
+ *
+ * @param column the search column
+ * @return the index of the column
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the column is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int indexOf (TableColumn column) {
+	checkWidget ();
+	if (column == null) error (SWT.ERROR_NULL_ARGUMENT);
+	for (int i=0; i<columnCount; i++) {
+		if (columns [i] == column) return i;
+	}
+	return -1;
+}
+
+/**
+ * Searches the receiver's list starting at the first item
+ * (index 0) until an item is found that is equal to the 
+ * argument, and returns the index of that item. If no item
+ * is found, returns -1.
+ *
+ * @param item the search item
+ * @return the index of the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int indexOf (TableItem item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (1 <= lastIndexOf && lastIndexOf < itemCount - 1) {
+		if (items [lastIndexOf] == item) return lastIndexOf;
+		if (items [lastIndexOf + 1] == item) return ++lastIndexOf;
+		if (items [lastIndexOf - 1] == item) return --lastIndexOf;
+	}
+	if (lastIndexOf < itemCount / 2) {
+		for (int i=0; i<itemCount; i++) {
+			if (items [i] == item) return lastIndexOf = i;
+		}
+	} else {
+		for (int i=itemCount - 1; i>=0; --i) {
+			if (items [i] == item) return lastIndexOf = i;
+		}
+	}
+	return -1;
+}
+
+/**
+ * Returns <code>true</code> if the item is selected,
+ * and <code>false</code> otherwise.  Indices out of
+ * range are ignored.
+ *
+ * @param index the index of the item
+ * @return the selection state of the item at the index
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean isSelected (int index) {
+	checkWidget ();
+	if (!(0 <= index && index < itemCount)) return false;
+	return ((NSTableView)view).isRowSelected(index);
+}
+
+boolean isTrim (NSView view) {
+	if (super.isTrim (view)) return true;
+	return view.id == headerView.id;
+}
+
+int /*long*/ menuForEvent(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (id != headerView.id) {
+		/*
+		 * Feature in Cocoa: Table views do not change the selection when the user
+		 * right-clicks or control-clicks on an NSTableView or its subclasses. Fix is to select the 
+		 * clicked-on row ourselves.
+		 */
+		NSEvent event = new NSEvent(theEvent);
+		NSTableView table = (NSTableView)view;
+		
+		// get the current selections for the table view. 
+		NSIndexSet selectedRowIndexes = table.selectedRowIndexes();
+		
+		// select the row that was clicked before showing the menu for the event
+		NSPoint mousePoint = view.convertPoint_fromView_(event.locationInWindow(), null);
+		int /*long*/ row = table.rowAtPoint(mousePoint);
+		
+		// figure out if the row that was just clicked on is currently selected
+		if (selectedRowIndexes.containsIndex(row) == false) {
+			NSIndexSet set = (NSIndexSet)new NSIndexSet().alloc();
+			set = set.initWithIndex(row);
+			table.selectRowIndexes (set, false);
+			set.release();
+		}
+		// else that row is currently selected, so don't change anything.
+	}
+	return super.menuForEvent(id, sel, theEvent);
+}
+
+void mouseDown (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (headerView != null && id == headerView.id) {
+		NSTableView widget = (NSTableView)view;
+		widget.setAllowsColumnReordering(false);
+		NSPoint pt = headerView.convertPoint_fromView_(new NSEvent(theEvent).locationInWindow(), null);
+		int /*long*/ nsIndex = headerView.columnAtPoint(pt);
+		if (nsIndex != -1) {
+			id nsColumn = widget.tableColumns().objectAtIndex(nsIndex);
+			for (int i = 0; i < columnCount; i++) {
+				if (columns[i].nsColumn.id == nsColumn.id) {
+					widget.setAllowsColumnReordering(columns[i].movable);
+					break;
+				}
+			}
+		}
+	}
+	else if (id == view.id) {
+		// Bug/feature in Cocoa:  If the table has a context menu we just set it visible instead of returning
+		// it from menuForEvent:.  This has the side effect, however, of sending control-click to the NSTableView,
+		// which is interpreted as a single click that clears the selection.  Fix is to ignore control-click if the 
+		// view has a context menu.
+		NSEvent event = new NSEvent(theEvent);
+		if ((event.modifierFlags() & OS.NSControlKeyMask) != 0) return;
+	}
+	super.mouseDown(id, sel, theEvent);
+}
+
+/*
+ * Feature in Cocoa.  If a checkbox is in multi-state mode, nextState cycles
+ * from off to mixed to on and back to off again.  This will cause the on state
+ * to momentarily appear while clicking on the checkbox.  To avoid this, 
+ * override [NSCell nextState] to go directly to the desired state.
+ */
+int /*long*/ nextState (int /*long*/ id, int /*long*/ sel) {
+	NSTableView tableView = (NSTableView)view;
+	int index = (int)/*64*/tableView.selectedRow ();
+	TableItem item = items[index];
+	if (item.grayed) {
+		return item.checked ? OS.NSOffState : OS.NSMixedState;
+	}
+	return item.checked ? OS.NSOffState : OS.NSOnState;
+}
+
+int /*long*/ numberOfRowsInTableView(int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView) {
+	return itemCount;
+}
+
+void register () {
+	super.register ();
+	display.addWidget (headerView, this);
+	display.addWidget (dataCell, this);
+	if (buttonCell != null) display.addWidget (buttonCell, this);
+}
+
+void releaseChildren (boolean destroy) {
+	if (items != null) {
+		for (int i=0; i<itemCount; i++) {
+			TableItem item = items [i];
+			if (item != null && !item.isDisposed ()) {
+				item.release (false);
+			}
+		}
+		items = null;
+	}
+	if (columns != null) {
+		for (int i=0; i<columnCount; i++) {
+			TableColumn column = columns [i];
+			if (column != null && !column.isDisposed ()) {
+				column.release (false);
+			}
+		}
+		columns = null;
+	}
+	super.releaseChildren (destroy);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (headerView != null) headerView.release();
+	headerView = null;
+	if (firstColumn != null) firstColumn.release();
+	firstColumn = null;
+	if (checkColumn != null) checkColumn.release();
+	checkColumn = null;
+	if (dataCell != null) dataCell.release();
+	dataCell = null;
+	if (buttonCell != null) buttonCell.release();
+	buttonCell = null;
+}
+
+void releaseWidget () {	
+	super.releaseWidget ();
+	currentItem = null;
+	sortColumn = null;
+}
+
+/**
+ * Removes the item from the receiver at the given
+ * zero-relative index.
+ *
+ * @param index the index for the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void remove (int index) {
+	checkWidget ();
+	if (!(0 <= index && index < itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	TableItem item = items [index];
+	if (item != null) item.release (false);
+	if (index != itemCount - 1) fixSelection (index, false);
+	System.arraycopy (items, index + 1, items, index, --itemCount - index);
+	items [itemCount] = null;
+	((NSTableView)view).noteNumberOfRowsChanged();
+	if (itemCount == 0) {
+		setTableEmpty ();
+	}
+}
+
+/**
+ * Removes the items from the receiver which are
+ * between the given zero-relative start and end 
+ * indices (inclusive).
+ *
+ * @param start the start of the range
+ * @param end the end of the range
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if either the start or end are not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void remove (int start, int end) {
+	checkWidget ();
+	if (start > end) return;
+	if (!(0 <= start && start <= end && end < itemCount)) {
+		error (SWT.ERROR_INVALID_RANGE);
+	}
+	if (start == 0 && end == itemCount - 1) {
+		removeAll ();
+	} else {
+		int length = end - start + 1;
+		for (int i=0; i<length; i++) remove (start);
+	}
+}
+
+/**
+ * Removes the items from the receiver's list at the given
+ * zero-relative indices.
+ *
+ * @param indices the array of indices of the items
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the indices array is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void remove (int [] indices) {
+	checkWidget ();
+	if (indices == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (indices.length == 0) return;
+	int [] newIndices = new int [indices.length];
+	System.arraycopy (indices, 0, newIndices, 0, indices.length);
+	sort (newIndices);
+	int start = newIndices [newIndices.length - 1], end = newIndices [0];
+	if (!(0 <= start && start <= end && end < itemCount)) {
+		error (SWT.ERROR_INVALID_RANGE);
+	}
+	int last = -1;
+	for (int i=0; i<newIndices.length; i++) {
+		int index = newIndices [i];
+		if (index != last) {
+			remove (index);
+			last = index;
+		}
+	}
+}
+
+/**
+ * Removes all of the items from the receiver.
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void removeAll () {
+	checkWidget ();
+	for (int i=0; i<itemCount; i++) {
+		TableItem item = items [i];
+		if (item != null && !item.isDisposed ()) item.release (false);
+	}
+	setTableEmpty ();
+	((NSTableView)view).noteNumberOfRowsChanged();
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the user changes the receiver's selection.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener(SelectionListener)
+ */
+public void removeSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+/**
+ * Selects the item at the given zero-relative index in the receiver. 
+ * If the item at the index was already selected, it remains
+ * selected. Indices that are out of range are ignored.
+ *
+ * @param index the index of the item to select
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void select (int index) {
+	checkWidget ();
+	if (0 <= index && index < itemCount) {
+		NSIndexSet set = (NSIndexSet)new NSIndexSet().alloc();
+		set = set.initWithIndex(index);
+		NSTableView widget = (NSTableView)view;
+		ignoreSelect = true;
+		widget.selectRowIndexes(set, (style & SWT.MULTI) != 0);
+		ignoreSelect = false;
+		set.release();
+	}
+}
+
+/**
+ * Selects the items in the range specified by the given zero-relative
+ * indices in the receiver. The range of indices is inclusive.
+ * The current selection is not cleared before the new items are selected.
+ * <p>
+ * If an item in the given range is not selected, it is selected.
+ * If an item in the given range was already selected, it remains selected.
+ * Indices that are out of range are ignored and no items will be selected
+ * if start is greater than end.
+ * If the receiver is single-select and there is more than one item in the
+ * given range, then all indices are ignored.
+ * </p>
+ *
+ * @param start the start of the range
+ * @param end the end of the range
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Table#setSelection(int,int)
+ */
+public void select (int start, int end) {
+	checkWidget ();
+	if (end < 0 || start > end || ((style & SWT.SINGLE) != 0 && start != end)) return;
+	if (itemCount == 0 || start >= itemCount) return;
+	if (start == 0 && end == itemCount - 1) {
+		selectAll ();
+	} else {
+		start = Math.max (0, start);
+		end = Math.min (end, itemCount - 1);
+		NSRange range = new NSRange();
+		range.location = start;
+		range.length = end - start + 1;
+		NSIndexSet set = (NSIndexSet)new NSIndexSet().alloc();
+		set = set.initWithIndexesInRange(range);
+		NSTableView widget = (NSTableView)view;
+		ignoreSelect = true;
+		widget.selectRowIndexes(set, (style & SWT.MULTI) != 0);
+		ignoreSelect = false;
+		set.release();
+	}
+}
+
+/**
+ * Selects the items at the given zero-relative indices in the receiver.
+ * The current selection is not cleared before the new items are selected.
+ * <p>
+ * If the item at a given index is not selected, it is selected.
+ * If the item at a given index was already selected, it remains selected.
+ * Indices that are out of range and duplicate indices are ignored.
+ * If the receiver is single-select and multiple indices are specified,
+ * then all indices are ignored.
+ * </p>
+ *
+ * @param indices the array of indices for the items to select
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array of indices is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Table#setSelection(int[])
+ */
+public void select (int [] indices) {
+	checkWidget ();
+	if (indices == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int length = indices.length;
+	if (length == 0 || ((style & SWT.SINGLE) != 0 && length > 1)) return;
+	int count = 0;
+	NSMutableIndexSet set = (NSMutableIndexSet)new NSMutableIndexSet().alloc().init();
+	for (int i=0; i<length; i++) {
+		int index = indices [i];
+		if (index >= 0 && index < itemCount) {
+			set.addIndex (indices [i]);
+			count++;
+		}
+	}
+	if (count > 0) {
+		NSTableView widget = (NSTableView)view;
+		ignoreSelect = true;
+		widget.selectRowIndexes(set, (style & SWT.MULTI) != 0);
+		ignoreSelect = false;
+	}
+	set.release();
+}
+
+void select (int [] indices, int count, boolean clear) {
+	NSMutableIndexSet set = (NSMutableIndexSet)new NSMutableIndexSet().alloc().init();
+	for (int i=0; i<count; i++) set.addIndex (indices [i]);
+	NSTableView widget = (NSTableView)view;
+	ignoreSelect = true;
+	widget.selectRowIndexes(set, !clear);
+	ignoreSelect = false;
+	set.release();
+}
+
+/**
+ * Selects all of the items in the receiver.
+ * <p>
+ * If the receiver is single-select, do nothing.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void selectAll () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) return;
+	NSTableView widget = (NSTableView)view;
+	ignoreSelect = true;
+	widget.selectAll(null);
+	ignoreSelect = false;
+}
+
+void updateBackground () {
+	NSColor nsColor = null;
+	if (backgroundImage != null) {
+		nsColor = NSColor.colorWithPatternImage(backgroundImage.handle);
+	} else if (background != null) {
+		nsColor = NSColor.colorWithDeviceRed(background[0], background[1], background[2], background[3]);
+	} 
+	((NSTableView) view).setBackgroundColor (nsColor);
+}
+
+/**
+ * Sets the order that the items in the receiver should 
+ * be displayed in to the given argument which is described
+ * in terms of the zero-relative ordering of when the items
+ * were added.
+ *
+ * @param order the new order to display the items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item order is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item order is not the same length as the number of items</li>
+ * </ul>
+ * 
+ * @see Table#getColumnOrder()
+ * @see TableColumn#getMoveable()
+ * @see TableColumn#setMoveable(boolean)
+ * @see SWT#Move
+ * 
+ * @since 3.1
+ */
+public void setColumnOrder (int [] order) {
+	checkWidget ();
+	if (order == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (columnCount == 0) {
+		if (order.length != 0) error (SWT.ERROR_INVALID_ARGUMENT);
+		return;
+	}
+	if (order.length != columnCount) error (SWT.ERROR_INVALID_ARGUMENT);
+	int [] oldOrder = getColumnOrder ();
+	boolean reorder = false;
+	boolean [] seen = new boolean [columnCount];
+	for (int i=0; i<order.length; i++) {
+		int index = order [i];
+		if (index < 0 || index >= columnCount) error (SWT.ERROR_INVALID_ARGUMENT);
+		if (seen [index]) error (SWT.ERROR_INVALID_ARGUMENT);
+		seen [index] = true;
+		if (order [i] != oldOrder [i]) reorder = true;
+	}
+	if (reorder) {
+		NSTableView tableView = (NSTableView)view;
+		int [] oldX = new int [oldOrder.length];
+		int check = (style & SWT.CHECK) != 0 ? 1 : 0;
+		for (int i=0; i<oldOrder.length; i++) {
+			int index = oldOrder[i];
+			oldX [index] = (int)tableView.rectOfColumn (i + check).x;
+		}
+		int [] newX = new int [order.length];
+		for (int i=0; i<order.length; i++) {
+			int index = order [i];
+			TableColumn column = columns[index];
+			int oldIndex = indexOf (column.nsColumn);
+			int newIndex = i + check;
+			tableView.moveColumn (oldIndex, newIndex);
+			newX [index] = (int)tableView.rectOfColumn (newIndex).x;
+		}
+		TableColumn[] newColumns = new TableColumn [columnCount];
+		System.arraycopy (columns, 0, newColumns, 0, columnCount);
+		for (int i=0; i<columnCount; i++) {
+			TableColumn column = newColumns [i];
+			if (!column.isDisposed ()) {
+				if (newX [i] != oldX [i]) {
+					column.sendEvent (SWT.Move);
+				}
+			}
+		}
+	}
+}
+
+void setFont (NSFont font) {
+	super.setFont (font);
+	setItemHeight (null, font, !hooks (SWT.MeasureItem));
+	view.setNeedsDisplay (true);
+	clearCachedWidth (items);
+	setScrollWidth (items, true);
+}
+
+/**
+ * Marks the receiver's header as visible if the argument is <code>true</code>,
+ * and marks it invisible otherwise. 
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, marking
+ * it visible may not actually cause it to be displayed.
+ * </p>
+ *
+ * @param show the new visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setHeaderVisible (boolean show) {
+	checkWidget ();
+	((NSTableView)view).setHeaderView (show ? headerView : null);
+}
+
+void setImage (int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	OS.object_setInstanceVariable(id, Display.SWT_IMAGE, arg0);
+}
+
+/**
+ * Sets the number of items contained in the receiver.
+ *
+ * @param count the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.0
+ */
+public void setItemCount (int count) {
+	checkWidget ();
+	count = Math.max (0, count);
+	if (count == itemCount) return;
+	if (count == itemCount) return;
+	TableItem [] children = items;
+	if (count < itemCount) {
+		for (int index = count; index < itemCount; index ++) {
+			TableItem item = children [index];
+			if (item != null && !item.isDisposed()) item.release (false);
+		}
+	}
+	if (count > itemCount) {
+		if ((getStyle() & SWT.VIRTUAL) == 0) {
+			for (int i=itemCount; i<count; i++) {
+				new TableItem (this, SWT.NONE, i, true);
+			}
+			return;
+		} 
+	}
+	int length = Math.max (4, (count + 3) / 4 * 4);
+	TableItem [] newItems = new TableItem [length];
+	if (children != null) {
+		System.arraycopy (items, 0, newItems, 0, Math.min (count, itemCount));
+	}
+	children = newItems;
+	this.items = newItems;
+	this.itemCount = count;
+	((NSTableView) view).noteNumberOfRowsChanged ();
+}
+
+/*public*/ void setItemHeight (int itemHeight) {
+	checkWidget ();
+	if (itemHeight < -1) error (SWT.ERROR_INVALID_ARGUMENT);
+	if (itemHeight == -1) {
+		//TODO - reset item height, ensure other API's such as setFont don't do this
+	} else {
+		((NSTableView)view).setRowHeight (itemHeight);
+	}
+}
+
+void setItemHeight (Image image, NSFont font, boolean set) {
+	if (font == null) font = getFont ().handle;
+	float /*double*/ ascent = font.ascender ();
+	float /*double*/ descent = -font.descender () + font.leading ();
+	int height = (int)Math.ceil (ascent + descent) + 1;
+	Rectangle bounds = image != null ? image.getBounds () : imageBounds;
+	if (bounds != null) {
+		imageBounds = bounds;
+		height = Math.max (height, bounds.height);
+	}
+	NSTableView widget = (NSTableView)view;
+	if (set || widget.rowHeight () < height) {
+		widget.setRowHeight (height);
+	}
+}
+
+public void setRedraw (boolean redraw) {
+	checkWidget ();
+	super.setRedraw (redraw);
+	if (redraw && drawCount == 0) {
+	 	/* Resize the item array to match the item count */
+		if (items.length > 4 && items.length - itemCount > 3) {
+			int length = Math.max (4, (itemCount + 3) / 4 * 4);
+			TableItem [] newItems = new TableItem [length];
+			System.arraycopy (items, 0, newItems, 0, itemCount);
+			items = newItems;
+		}
+		setScrollWidth ();
+	}
+}
+
+/**
+ * Marks the receiver's lines as visible if the argument is <code>true</code>,
+ * and marks it invisible otherwise. Note that some platforms draw grid lines
+ * while others may draw alternating row colors.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, marking
+ * it visible may not actually cause it to be displayed.
+ * </p>
+ *
+ * @param show the new visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setLinesVisible (boolean show) {
+	checkWidget ();
+	((NSTableView)view).setUsesAlternatingRowBackgroundColors(show);
+}
+
+boolean setScrollWidth () {
+	return setScrollWidth (items, true);
+}
+
+boolean setScrollWidth (TableItem item) {
+	if (columnCount != 0) return false;
+	if (!getDrawing()) return false;
+	if (currentItem != null) {
+		if (currentItem != item) fixScrollWidth = true;
+		return false;
+	}
+	GC gc = new GC (this);
+	int newWidth = item.calculateWidth (0, gc);
+	gc.dispose ();
+	int oldWidth = (int)firstColumn.width ();
+	if (oldWidth < newWidth) {
+		firstColumn.setWidth (newWidth);
+		if (horizontalBar != null && horizontalBar.view != null) redrawWidget (horizontalBar.view, false);
+		return true;
+	}
+	return false;
+}
+
+boolean setScrollWidth (TableItem [] items, boolean set) {
+	if (items == null) return false;
+	if (columnCount != 0) return false;
+	if (!getDrawing()) return false;
+	if (currentItem != null) {
+		fixScrollWidth = true;
+		return false;
+	}
+	GC gc = new GC (this);
+	int newWidth = 0;
+	for (int i = 0; i < items.length; i++) {
+		TableItem item = items [i];
+		if (item != null) {
+			newWidth = Math.max (newWidth, item.calculateWidth (0, gc));
+		}
+	}
+	gc.dispose ();
+	if (!set) {
+		int oldWidth = (int)firstColumn.width ();
+		if (oldWidth >= newWidth) return false;
+	}
+	firstColumn.setWidth (newWidth);
+	if (horizontalBar != null && horizontalBar.view != null) redrawWidget (horizontalBar.view, false);
+	return true;
+}
+
+/**
+ * Selects the item at the given zero-relative index in the receiver. 
+ * The current selection is first cleared, then the new item is selected.
+ *
+ * @param index the index of the item to select
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Table#deselectAll()
+ * @see Table#select(int)
+ */
+public void setSelection (int index) {
+	checkWidget ();
+	//TODO - optimize to use expand flag
+	deselectAll ();
+	if (0 <= index && index < itemCount) {
+		select (index);
+		showIndex (index);
+	}
+}
+
+/**
+ * Selects the items in the range specified by the given zero-relative
+ * indices in the receiver. The range of indices is inclusive.
+ * The current selection is cleared before the new items are selected.
+ * <p>
+ * Indices that are out of range are ignored and no items will be selected
+ * if start is greater than end.
+ * If the receiver is single-select and there is more than one item in the
+ * given range, then all indices are ignored.
+ * </p>
+ * 
+ * @param start the start index of the items to select
+ * @param end the end index of the items to select
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Table#deselectAll()
+ * @see Table#select(int,int)
+ */
+public void setSelection (int start, int end) {
+	checkWidget ();
+	//TODO - optimize to use expand flag
+	deselectAll ();
+	if (end < 0 || start > end || ((style & SWT.SINGLE) != 0 && start != end)) return;
+	if (itemCount == 0 || start >= itemCount) return;
+	start = Math.max (0, start);
+	end = Math.min (end, itemCount - 1);
+	select (start, end);
+	showIndex (start);
+}
+
+/**
+ * Selects the items at the given zero-relative indices in the receiver.
+ * The current selection is cleared before the new items are selected.
+ * <p>
+ * Indices that are out of range and duplicate indices are ignored.
+ * If the receiver is single-select and multiple indices are specified,
+ * then all indices are ignored.
+ * </p>
+ *
+ * @param indices the indices of the items to select
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array of indices is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Table#deselectAll()
+ * @see Table#select(int[])
+ */
+public void setSelection (int [] indices) {
+	checkWidget ();
+	if (indices == null) error (SWT.ERROR_NULL_ARGUMENT);
+	//TODO - optimize to use expand flag
+	deselectAll ();
+	int length = indices.length;
+	if (length == 0 || ((style & SWT.SINGLE) != 0 && length > 1)) return;
+	select (indices);
+	showIndex (indices [0]);
+}
+
+/**
+ * Sets the receiver's selection to the given item.
+ * The current selection is cleared before the new item is selected.
+ * <p>
+ * If the item is not in the receiver, then it is ignored.
+ * </p>
+ *
+ * @param item the item to select
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setSelection (TableItem  item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setSelection (new TableItem [] {item});
+}
+
+/**
+ * Sets the receiver's selection to be the given array of items.
+ * The current selection is cleared before the new items are selected.
+ * <p>
+ * Items that are not in the receiver are ignored.
+ * If the receiver is single-select and multiple items are specified,
+ * then all items are ignored.
+ * </p>
+ *
+ * @param items the array of items
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array of items is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if one of the items has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Table#deselectAll()
+ * @see Table#select(int[])
+ * @see Table#setSelection(int[])
+ */
+public void setSelection (TableItem [] items) {
+	checkWidget ();
+	if (items == null) error (SWT.ERROR_NULL_ARGUMENT);
+	//TODO - optimize to use expand flag
+	deselectAll ();
+	int length = items.length;
+	if (length == 0 || ((style & SWT.SINGLE) != 0 && length > 1)) return;
+	int [] indices = new int [length];
+	int count = 0;
+	for (int i=0; i<length; i++) {
+		int index = indexOf (items [length - i - 1]);
+		if (index != -1) {
+			indices [count++] = index;
+		}
+	}
+	if (count > 0) {
+		select (indices);
+		showIndex (indices [0]);
+	}
+}
+
+void setSmallSize () {
+	if (checkColumn == null) return;
+	checkColumn.dataCell ().setControlSize (OS.NSSmallControlSize);
+	checkColumn.setWidth (getCheckColumnWidth ());
+}
+
+/**
+ * Sets the column used by the sort indicator for the receiver. A null
+ * value will clear the sort indicator.  The current sort column is cleared 
+ * before the new column is set.
+ *
+ * @param column the column used by the sort indicator or <code>null</code>
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the column is disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setSortColumn (TableColumn column) {
+	checkWidget ();
+	if (column != null && column.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	if (column == sortColumn) return;
+	sortColumn = column;
+	((NSTableView)view).setHighlightedTableColumn (column == null ? null : column.nsColumn);
+}
+
+/**
+ * Sets the direction of the sort indicator for the receiver. The value 
+ * can be one of <code>UP</code>, <code>DOWN</code> or <code>NONE</code>.
+ *
+ * @param direction the direction of the sort indicator 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setSortDirection  (int direction) {
+	checkWidget ();
+	if (direction != SWT.UP && direction != SWT.DOWN && direction != SWT.NONE) return;
+	if (direction == sortDirection) return;
+	sortDirection = direction;
+	if (sortColumn == null) return;
+	NSTableHeaderView headerView = ((NSTableView)view).headerView ();
+	if (headerView == null) return;
+	int index = indexOf (sortColumn.nsColumn);
+	NSRect rect = headerView.headerRectOfColumn (index);
+	headerView.setNeedsDisplayInRect (rect);
+}
+
+void setTableEmpty () {
+	itemCount = 0;
+	items = new TableItem [4];
+	imageBounds = null;
+}
+
+/**
+ * Sets the zero-relative index of the item which is currently
+ * at the top of the receiver. This index can change when items
+ * are scrolled or new items are added and removed.
+ *
+ * @param index the index of the top item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setTopIndex (int index) {
+	checkWidget ();
+	NSTableView widget = (NSTableView) view;
+	int row = Math.max(0, Math.min(index, itemCount));
+	NSPoint pt = new NSPoint();
+	pt.x = scrollView.contentView().bounds().x;
+	pt.y = widget.frameOfCellAtColumn(0, row).y;
+	view.scrollPoint(pt);
+}
+
+/**
+ * Shows the column.  If the column is already showing in the receiver,
+ * this method simply returns.  Otherwise, the columns are scrolled until
+ * the column is visible.
+ *
+ * @param column the column to be shown
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the column is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the column has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.0
+ */
+public void showColumn (TableColumn column) {
+	checkWidget ();
+	if (column == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (column.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
+	if (column.parent != this) return;
+	if (columnCount <= 1) return;
+	int index = indexOf (column.nsColumn);
+	if (!(0 <= index && index < columnCount + ((style & SWT.CHECK) != 0 ? 1 : 0))) return;
+	((NSTableView)view).scrollColumnToVisible (index);
+}
+
+void showIndex (int index) {
+	if (0 <= index && index < itemCount) {
+		((NSTableView)view).scrollRowToVisible(index);
+	}
+}
+
+/**
+ * Shows the item.  If the item is already showing in the receiver,
+ * this method simply returns.  Otherwise, the items are scrolled until
+ * the item is visible.
+ *
+ * @param item the item to be shown
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Table#showSelection()
+ */
+public void showItem (TableItem item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (item.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
+	int index = indexOf (item);
+	if (index != -1) showIndex (index);
+}
+
+/**
+ * Shows the selection.  If the selection is already showing in the receiver,
+ * this method simply returns.  Otherwise, the items are scrolled until
+ * the selection is visible.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Table#showItem(TableItem)
+ */
+public void showSelection () {
+	checkWidget ();
+	int index = getSelectionIndex ();
+	if (index >= 0) {
+		checkData(_getItem(index));
+		showIndex (index);
+	}
+}
+
+void sendDoubleSelection() {
+	NSTableView tableView = (NSTableView)view;
+	int rowIndex = (int)/*64*/tableView.clickedRow (); 
+	if (rowIndex != -1) {
+		if ((style & SWT.CHECK) != 0) {
+			NSArray columns = tableView.tableColumns ();
+			int columnIndex = (int)/*64*/tableView.clickedColumn ();
+			id column = columns.objectAtIndex (columnIndex);
+			if (column.id == checkColumn.id) return;
+		}
+		Event event = new Event ();
+		event.item = _getItem (rowIndex);
+		postEvent (SWT.DefaultSelection, event);
+	}
+}
+
+boolean sendKeyEvent (NSEvent nsEvent, int type) {
+	boolean result = super.sendKeyEvent (nsEvent, type);
+	if (!result) return result;
+	if (type != SWT.KeyDown) return result;
+	short keyCode = nsEvent.keyCode ();
+	switch (keyCode) {
+		case 76: /* KP Enter */
+		case 36: { /* Return */
+			postEvent (SWT.DefaultSelection);
+			break;
+		}
+	}
+	return result;
+}
+
+void sendMeasureItem (TableItem item, int columnIndex, NSSize size) {
+	NSTableView widget = (NSTableView)this.view;
+	int contentWidth = (int)Math.ceil (size.width);
+	NSSize spacing = widget.intercellSpacing();
+	int itemHeight = (int)Math.ceil (widget.rowHeight() + spacing.height);
+	GCData data = new GCData ();
+	data.paintRect = widget.frame ();
+	GC gc = GC.cocoa_new (this, data);
+	gc.setFont (item.getFont (columnIndex));
+	Event event = new Event ();
+	event.item = item;
+	event.gc = gc;
+	event.index = columnIndex;
+	event.width = contentWidth;
+	event.height = itemHeight;
+	sendEvent (SWT.MeasureItem, event);
+	gc.dispose ();
+	if (!isDisposed () && !item.isDisposed ()) {
+		size.width = event.width;
+		size.height = event.height;
+		if (itemHeight < event.height) {
+			widget.setRowHeight (event.height);
+		}
+		if (contentWidth != event.width) {
+			if (columnCount == 0 && columnIndex == 0) {
+				item.width = event.width;
+				if (setScrollWidth (item)) {
+					widget.setNeedsDisplay(true);
+				}
+			}
+		}
+	}
+}
+
+void tableViewColumnDidMove (int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
+	NSNotification notification = new NSNotification (aNotification);
+	NSDictionary userInfo = notification.userInfo ();
+	id nsOldIndex = userInfo.valueForKey (NSString.stringWith ("NSOldColumn")); //$NON-NLS-1$
+	id nsNewIndex = userInfo.valueForKey (NSString.stringWith ("NSNewColumn")); //$NON-NLS-1$
+	int oldIndex = new NSNumber (nsOldIndex).intValue ();
+	int newIndex = new NSNumber (nsNewIndex).intValue ();
+	int startIndex = Math.min (oldIndex, newIndex);
+	int endIndex = Math.max (oldIndex, newIndex);
+	NSTableView tableView = (NSTableView)view;
+	NSArray nsColumns = tableView.tableColumns ();
+	for (int i = startIndex; i <= endIndex; i++) {
+		id columnId = nsColumns.objectAtIndex (i);
+		TableColumn column = getColumn (columnId);
+		if (column != null) {
+			column.sendEvent (SWT.Move);
+			if (isDisposed ()) return;
+		}
+	}
+}
+
+void tableViewColumnDidResize (int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
+	NSNotification notification = new NSNotification (aNotification);
+	NSDictionary userInfo = notification.userInfo ();
+	id columnId = userInfo.valueForKey (NSString.stringWith ("NSTableColumn")); //$NON-NLS-1$
+	TableColumn column = getColumn (columnId);
+	if (column == null) return; /* either CHECK column or firstColumn in 0-column Table */
+
+	column.sendEvent (SWT.Resize);
+	if (isDisposed ()) return;
+
+	NSTableView tableView = (NSTableView)view;
+	int index = indexOf (column.nsColumn);
+	if (index == -1) return; /* column was disposed in Resize callback */
+
+	NSArray nsColumns = tableView.tableColumns ();
+	int columnCount = (int)/*64*/tableView.numberOfColumns ();
+	for (int i = index + 1; i < columnCount; i++) {
+		columnId = nsColumns.objectAtIndex (i);
+		column = getColumn (columnId);
+		if (column != null) {
+			column.sendEvent (SWT.Move);
+			if (isDisposed ()) return;
+		}
+	}
+}
+
+void tableViewSelectionDidChange (int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
+	if (ignoreSelect) return;
+	NSTableView widget = (NSTableView) view;
+	int row = (int)/*64*/widget.selectedRow ();
+	if(row == -1)
+		postEvent (SWT.Selection);
+	else {
+		TableItem item = _getItem (row);
+		Event event = new Event ();
+		event.item = item;
+		event.index = row;
+		postEvent (SWT.Selection, event);
+	}
+}
+
+void tableView_didClickTableColumn (int /*long*/ id, int /*long*/ sel, int /*long*/ tableView, int /*long*/ tableColumn) {
+	TableColumn column = getColumn (new id (tableColumn));
+	if (column == null) return; /* either CHECK column or firstColumn in 0-column Table */
+	column.postEvent (SWT.Selection);
+}
+
+int /*long*/ tableView_objectValueForTableColumn_row (int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ aTableColumn, int /*long*/ rowIndex) {
+	int index = (int)/*64*/rowIndex;
+	TableItem item = _getItem (index);
+	checkData (item, index);
+	if (checkColumn != null && aTableColumn == checkColumn.id) {
+		NSNumber value;
+		if (item.checked && item.grayed) {
+			value = NSNumber.numberWithInt (OS.NSMixedState);
+		} else {
+			value = NSNumber.numberWithInt (item.checked ? OS.NSOnState : OS.NSOffState);
+		}
+		return value.id;
+	}
+	for (int i=0; i<columnCount; i++) {
+		if (columns [i].nsColumn.id == aTableColumn) {
+			return item.createString (i).id;
+		}
+	}
+	return item.createString (0).id;
+}
+
+void tableView_setObjectValue_forTableColumn_row (int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ anObject, int /*long*/ aTableColumn, int /*long*/ rowIndex) {
+	if (checkColumn != null && aTableColumn == checkColumn.id)  {
+		TableItem item = items [(int)/*64*/rowIndex];
+		item.checked = !item.checked;
+		Event event = new Event ();
+		event.detail = SWT.CHECK;
+		event.item = item;
+		event.index = (int)/*64*/rowIndex;
+		postEvent (SWT.Selection, event);
+		item.redraw (-1);
+	}
+}
+
+boolean tableView_shouldEditTableColumn_row (int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ aTableColumn, int /*long*/ rowIndex) {
+	return false;
+}
+
+void tableView_willDisplayCell_forTableColumn_row (int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ cell, int /*long*/ tableColumn, int /*long*/ rowIndex) {
+	if (checkColumn != null && tableColumn == checkColumn.id) return;
+	TableItem item = items [(int)/*64*/rowIndex];
+	int index = 0;
+	for (int i=0; i<columnCount; i++) {
+		if (columns [i].nsColumn.id == tableColumn) {
+			index = i;
+			break;
+		}
+	}
+	NSTextFieldCell textCell = new NSTextFieldCell (cell);
+	OS.object_setInstanceVariable(cell, Display.SWT_ROW, rowIndex);
+	OS.object_setInstanceVariable(cell, Display.SWT_COLUMN, tableColumn);
+	Image image = index == 0 ? item.image : (item.images == null ? null : item.images [index]);
+	textCell.setImage (image != null ? image.handle : null);
+	NSColor color;
+	if (textCell.isEnabled()) {
+		if (textCell.isHighlighted()) {
+			color = NSColor.selectedControlTextColor();
+		} else {
+			Color foreground = item.cellForeground != null ? item.cellForeground [index] : null;
+			if (foreground == null) foreground = item.foreground;
+			if (foreground == null) foreground = getForegroundColor();
+			color = NSColor.colorWithDeviceRed (foreground.handle [0], foreground.handle [1], foreground.handle [2], 1);
+		}
+	} else {
+		color = NSColor.disabledControlTextColor();
+	}
+	int alignment = OS.NSLeftTextAlignment;
+	if (columnCount > 0) {
+		int style = columns [index].style;
+		if ((style & SWT.CENTER) != 0) {
+			alignment = OS.NSCenterTextAlignment;
+		} else if ((style & SWT.RIGHT) != 0) {
+			alignment = OS.NSRightTextAlignment;
+		}
+	}
+	Font font = item.cellFont != null ? item.cellFont [index] : null;
+	if (font == null) font = item.font;
+	if (font == null) font = this.font;
+	if (font == null) font = defaultFont ();
+	if (font.extraTraits != 0) {
+		NSMutableDictionary dict = ((NSMutableDictionary)new NSMutableDictionary().alloc()).initWithCapacity(5);
+		dict.setObject (color, OS.NSForegroundColorAttributeName);
+		dict.setObject (font.handle, OS.NSFontAttributeName);
+		addTraits(dict, font);
+		NSMutableParagraphStyle paragraphStyle = (NSMutableParagraphStyle)new NSMutableParagraphStyle ().alloc ().init ();
+		paragraphStyle.setLineBreakMode (OS.NSLineBreakByClipping);
+		paragraphStyle.setAlignment (alignment);
+		dict.setObject (paragraphStyle, OS.NSParagraphStyleAttributeName);
+		paragraphStyle.release ();
+		NSAttributedString attribStr = ((NSAttributedString) new NSAttributedString ().alloc ()).initWithString (textCell.title(), dict);
+		textCell.setAttributedStringValue(attribStr);
+		attribStr.release();
+		dict.release();
+	} else {
+		textCell.setFont(font.handle);
+		textCell.setTextColor(color);
+		textCell.setAlignment (alignment);
+	}
+}
+
+boolean tableView_writeRowsWithIndexes_toPasteboard(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2) {
+	return sendMouseEvent(NSApplication.sharedApplication().currentEvent(), SWT.DragDetect, true);
+}
+
+NSRect titleRectForBounds (int /*long*/ id, int /*long*/ sel, NSRect cellFrame) {
+	NSImage image = new NSCell(id).image();
+	if (image != null) {
+		int imageWidth = imageBounds.width + IMAGE_GAP;
+		cellFrame.x += imageWidth;
+		cellFrame.width -= imageWidth;
+	}
+	return cellFrame;
+}
+
+void updateCursorRects (boolean enabled) {
+	super.updateCursorRects (enabled);
+	if (headerView == null) return;
+	updateCursorRects (enabled, headerView);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TableColumn.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TableColumn.java
new file mode 100755
index 0000000..8bfd658
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TableColumn.java
@@ -0,0 +1,677 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.cocoa.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * Instances of this class represent a column in a table widget.
+ * <p><dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>LEFT, RIGHT, CENTER</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd> Move, Resize, Selection</dd>
+ * </dl>
+ * </p><p>
+ * Note: Only one of the styles LEFT, RIGHT and CENTER may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#table">Table, TableItem, TableColumn snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class TableColumn extends Item {
+	Table parent;
+	NSTableColumn nsColumn;
+	String toolTipText, displayText;
+	boolean movable;
+
+	static final int MARGIN = 2;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Table</code>) and a style value
+ * describing its behavior and appearance. The item is added
+ * to the end of the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#LEFT
+ * @see SWT#RIGHT
+ * @see SWT#CENTER
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TableColumn (Table parent, int style) {
+	super (parent, checkStyle (style));
+	this.parent = parent;
+	parent.createItem (this, parent.columnCount);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Table</code>), a style value
+ * describing its behavior and appearance, and the index
+ * at which to place it in the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ * <p>
+ * Note that due to a restriction on some platforms, the first column
+ * is always left aligned.
+ * </p>
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ * @param index the zero-relative index to store the receiver in its parent
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the parent (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#LEFT
+ * @see SWT#RIGHT
+ * @see SWT#CENTER
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TableColumn (Table parent, int style, int index) {
+	super (parent, checkStyle (style));
+	this.parent = parent;
+	parent.createItem (this, index);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is moved or resized, by sending
+ * it one of the messages defined in the <code>ControlListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ControlListener
+ * @see #removeControlListener
+ */
+public void addControlListener(ControlListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Resize,typedListener);
+	addListener (SWT.Move,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is called when the column header is selected.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the control is selected by the user
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+static int checkStyle (int style) {
+	return checkBits (style, SWT.LEFT, SWT.CENTER, SWT.RIGHT, 0, 0, 0);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+void deregister () {
+	super.deregister ();
+	display.removeWidget (nsColumn.headerCell());
+}
+
+void destroyWidget () {
+	parent.destroyItem (this);
+	releaseHandle ();
+}
+
+void drawInteriorWithFrame_inView (int /*long*/ id, int /*long*/ sel, NSRect cellRect, int /*long*/ view) {
+	/*
+	 * Feature in Cocoa.  When the last column in a table does not reach the
+	 * rightmost edge of the table view, the cell that draws the rightmost-
+	 * column's header is also invoked to draw the header space between its
+	 * right edge and the table's right edge.  If this case is detected then
+	 * nothing should be drawn.
+	 */
+	int columnIndex = parent.indexOf (nsColumn);
+	NSRect headerRect = parent.headerView.headerRectOfColumn (columnIndex);
+	if (headerRect.x != cellRect.x || headerRect.width != cellRect.width) return;
+
+	NSGraphicsContext context = NSGraphicsContext.currentContext ();
+	context.saveGraphicsState ();
+
+	int contentWidth = 0;
+	NSSize stringSize = null, imageSize = null;
+	NSAttributedString attrString = null;
+	NSTableHeaderCell headerCell = nsColumn.headerCell ();
+	if (displayText != null) {
+		Font font = Font.cocoa_new(display, headerCell.font ());
+		attrString = parent.createString(displayText, font, null, SWT.LEFT, (parent.state & DISABLED) == 0, false);
+		stringSize = attrString.size ();
+		contentWidth += Math.ceil (stringSize.width);
+		if (image != null) contentWidth += MARGIN; /* space between image and text */
+	}
+	if (image != null) {
+		imageSize = image.handle.size ();
+		contentWidth += Math.ceil (imageSize.width);
+	}
+
+	if (parent.sortColumn == this && parent.sortDirection != SWT.NONE) {
+		boolean ascending = parent.sortDirection == SWT.UP;
+		headerCell.drawSortIndicatorWithFrame (cellRect, new NSView(view), ascending, 0);
+		/* remove the arrow's space from the available drawing width */
+		NSRect sortRect = headerCell.sortIndicatorRectForBounds (cellRect);
+		cellRect.width = Math.max (0, sortRect.x - cellRect.x);
+	}
+
+	int drawX = 0;
+	if ((style & SWT.CENTER) != 0) {
+		drawX = (int)(cellRect.x + Math.max (MARGIN, ((cellRect.width - contentWidth) / 2)));
+	} else if ((style & SWT.RIGHT) != 0) {
+		drawX = (int)(cellRect.x + Math.max (MARGIN, cellRect.width - contentWidth - MARGIN));
+	} else {
+		drawX = (int)cellRect.x + MARGIN;
+	}
+
+	if (image != null) {
+		NSRect destRect = new NSRect ();
+		destRect.x = drawX;
+		destRect.y = cellRect.y;
+		destRect.width = Math.min (imageSize.width, cellRect.width - 2 * MARGIN);
+		destRect.height = Math.min (imageSize.height, cellRect.height);
+		boolean isFlipped = new NSView (view).isFlipped(); 
+		if (isFlipped) {
+			context.saveGraphicsState ();
+			NSAffineTransform transform = NSAffineTransform.transform ();
+		 	transform.scaleXBy (1, -1);
+		 	transform.translateXBy (0, -(destRect.height + 2 * destRect.y));
+		 	transform.concat ();
+		}
+		NSRect sourceRect = new NSRect ();
+		sourceRect.width = destRect.width;
+		sourceRect.height = destRect.height;
+		image.handle.drawInRect (destRect, sourceRect, OS.NSCompositeSourceOver, 1f);
+		if (isFlipped) context.restoreGraphicsState ();
+		drawX += destRect.width;
+	}
+
+	if (displayText != null && displayText.length () > 0) {
+		if (image != null) drawX += MARGIN; /* space between image and text */
+		NSRect destRect = new NSRect ();
+		destRect.x = drawX;
+		destRect.y = cellRect.y;
+		destRect.width = Math.min (stringSize.width, cellRect.x + cellRect.width - MARGIN - drawX);
+		destRect.height = Math.min (stringSize.height, cellRect.height);
+		attrString.drawInRect (destRect);
+	}
+	if (attrString != null) attrString.release ();
+
+	context.restoreGraphicsState ();
+}
+
+/**
+ * Returns a value which describes the position of the
+ * text or image in the receiver. The value will be one of
+ * <code>LEFT</code>, <code>RIGHT</code> or <code>CENTER</code>.
+ *
+ * @return the alignment 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getAlignment () {
+	checkWidget ();
+	if ((style & SWT.LEFT) != 0) return SWT.LEFT;
+	if ((style & SWT.CENTER) != 0) return SWT.CENTER;
+	if ((style & SWT.RIGHT) != 0) return SWT.RIGHT;
+	return SWT.LEFT;
+}
+
+String getNameText () {
+	return getText ();
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>Table</code>.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Table getParent () {
+	checkWidget ();
+	return parent;
+}
+
+/**
+ * Gets the moveable attribute. A column that is
+ * not moveable cannot be reordered by the user 
+ * by dragging the header but may be reordered 
+ * by the programmer.
+ *
+ * @return the moveable attribute
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Table#getColumnOrder()
+ * @see Table#setColumnOrder(int[])
+ * @see TableColumn#setMoveable(boolean)
+ * @see SWT#Move
+ * 
+ * @since 3.1
+ */
+public boolean getMoveable () {
+	checkWidget ();
+	return movable;
+}
+
+/**
+ * Gets the resizable attribute. A column that is
+ * not resizable cannot be dragged by the user but
+ * may be resized by the programmer.
+ *
+ * @return the resizable attribute
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getResizable () {
+	checkWidget ();
+	return nsColumn.resizingMask() != OS.NSTableColumnNoResizing;
+}
+
+/**
+ * Returns the receiver's tool tip text, or null if it has
+ * not been set.
+ *
+ * @return the receiver's tool tip text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public String getToolTipText () {
+	checkWidget ();
+	return toolTipText;
+}
+
+/**
+ * Gets the width of the receiver.
+ *
+ * @return the width
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getWidth () {
+	checkWidget ();
+	int width = (int)nsColumn.width();
+	// TODO how to differentiate 0 and 1 cases?
+	if (width > 0) width += Table.CELL_GAP;
+	return width;
+}
+
+/**
+ * Causes the receiver to be resized to its preferred size.
+ * For a composite, this involves computing the preferred size
+ * from its layout, if there is one.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ */
+public void pack () {
+	checkWidget ();
+
+	int width = 0;
+
+	/* compute header width */
+	if (displayText != null) {
+		NSTableHeaderCell headerCell = nsColumn.headerCell ();
+		Font font = Font.cocoa_new(display, headerCell.font ());
+		NSAttributedString attrString = parent.createString(displayText, font, null, 0, true, false);
+		NSSize stringSize = attrString.size ();
+		attrString.release ();
+		width += Math.ceil (stringSize.width);
+		if (image != null) width += MARGIN; /* space between image and text */
+	}
+	if (image != null) {
+		NSSize imageSize = image.handle.size ();
+		width += Math.ceil (imageSize.width);
+	}
+	if (parent.sortColumn == this && parent.sortDirection != SWT.NONE) {
+		NSTableHeaderCell headerCell = nsColumn.headerCell ();
+		NSRect rect = new NSRect ();
+		rect.width = rect.height = Float.MAX_VALUE;
+		NSSize cellSize = headerCell.cellSizeForBounds (rect);
+		rect.height = cellSize.height;
+		NSRect sortRect = headerCell.sortIndicatorRectForBounds (rect);
+		width += Math.ceil (sortRect.width);
+	}
+
+	/* compute item widths down column */
+	GC gc = new GC (parent);
+	int index = parent.indexOf (this);
+	width = Math.max (width, parent.calculateWidth (parent.items, index, gc));
+	gc.dispose ();
+	setWidth (width);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (nsColumn != null) {
+		nsColumn.headerCell ().release ();
+		nsColumn.release ();
+	}
+	nsColumn = null;
+	parent = null;
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	if (parent.sortColumn == this) {
+		parent.sortColumn = null;
+	}
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is moved or resized.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ControlListener
+ * @see #addControlListener
+ */
+public void removeControlListener (ControlListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Move, listener);
+	eventTable.unhook (SWT.Resize, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+/**
+ * Controls how text and images will be displayed in the receiver.
+ * The argument should be one of <code>LEFT</code>, <code>RIGHT</code>
+ * or <code>CENTER</code>.
+ * <p>
+ * Note that due to a restriction on some platforms, the first column
+ * is always left aligned.
+ * </p>
+ * @param alignment the new alignment 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setAlignment (int alignment) {
+	checkWidget ();
+	if ((alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER)) == 0) return;
+	int index = parent.indexOf (this);
+	if (index == -1 || index == 0) return;
+	style &= ~(SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+	style |= alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+	NSTableView tableView = ((NSTableView) parent.view);
+	NSTableHeaderView headerView = tableView.headerView ();
+	if (headerView == null) return;
+	index = parent.indexOf (nsColumn);
+	NSRect rect = headerView.headerRectOfColumn (index);
+	headerView.setNeedsDisplayInRect (rect);
+	rect = tableView.rectOfColumn (index);
+	parent.view.setNeedsDisplayInRect (rect);
+}
+
+public void setImage (Image image) {
+	checkWidget();
+	if (image != null && image.isDisposed ()) {
+		error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	super.setImage (image);
+	NSTableHeaderView headerView = ((NSTableView) parent.view).headerView ();
+	if (headerView == null) return;
+	int index = parent.indexOf (nsColumn);
+	NSRect rect = headerView.headerRectOfColumn (index);
+	headerView.setNeedsDisplayInRect (rect);
+}
+
+/**
+ * Sets the moveable attribute.  A column that is
+ * moveable can be reordered by the user by dragging
+ * the header. A column that is not moveable cannot be 
+ * dragged by the user but may be reordered 
+ * by the programmer.
+ *
+ * @param moveable the moveable attribute
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Table#setColumnOrder(int[])
+ * @see Table#getColumnOrder()
+ * @see TableColumn#getMoveable()
+ * @see SWT#Move
+ * 
+ * @since 3.1
+ */
+public void setMoveable (boolean moveable) {
+	checkWidget ();
+	this.movable = moveable;
+}
+
+/**
+ * Sets the resizable attribute.  A column that is
+ * resizable can be resized by the user dragging the
+ * edge of the header.  A column that is not resizable 
+ * cannot be dragged by the user but may be resized 
+ * by the programmer.
+ *
+ * @param resizable the resize attribute
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setResizable (boolean resizable) {
+	checkWidget ();
+	nsColumn.setResizingMask (resizable ? OS.NSTableColumnUserResizingMask : OS.NSTableColumnNoResizing);
+}
+
+public void setText (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	super.setText (string);
+	char [] buffer = new char [text.length ()];
+	text.getChars (0, buffer.length, buffer, 0);
+	int length = fixMnemonic (buffer);
+	displayText = new String (buffer, 0, length);
+	NSString title = NSString.stringWith (displayText);
+	nsColumn.headerCell ().setTitle (title);
+	NSTableHeaderView headerView = ((NSTableView) parent.view).headerView ();
+	if (headerView == null) return;
+	int index = parent.indexOf (nsColumn);
+	NSRect rect = headerView.headerRectOfColumn (index);
+	headerView.setNeedsDisplayInRect (rect);
+}
+
+/**
+ * Sets the receiver's tool tip text to the argument, which
+ * may be null indicating that the default tool tip for the 
+ * control will be shown. For a control that has a default
+ * tool tip, such as the Tree control on Windows, setting
+ * the tool tip text to an empty string replaces the default,
+ * causing no tool tip text to be shown.
+ * <p>
+ * The mnemonic indicator (character '&amp;') is not displayed in a tool tip.
+ * To display a single '&amp;' in the tool tip, the character '&amp;' can be 
+ * escaped by doubling it in the string.
+ * </p>
+ * 
+ * @param string the new tool tip text (or null)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setToolTipText (String string) {
+	checkWidget();
+	toolTipText = string;
+	parent.checkToolTip (this);
+}
+
+/**
+ * Sets the width of the receiver.
+ *
+ * @param width the new width
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setWidth (int width) {
+	checkWidget ();
+	if (width < 0) return;
+	// TODO how to differentiate 0 and 1 cases?
+	width = Math.max (0, width - Table.CELL_GAP); 
+	nsColumn.setWidth (width);
+}
+
+String tooltipText () {
+	return toolTipText;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TableItem.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TableItem.java
new file mode 100755
index 0000000..01b736a
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TableItem.java
@@ -0,0 +1,1031 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.cocoa.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class represent a selectable user interface object
+ * that represents an item in a table.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#table">Table, TableItem, TableColumn snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class TableItem extends Item {
+	Table parent;
+	String [] strings;
+	Image [] images;
+	boolean checked, grayed, cached;
+	Color foreground, background;
+	Color[] cellForeground, cellBackground;
+	Font font;
+	Font[] cellFont;
+	int width = -1;
+	
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Table</code>) and a style value
+ * describing its behavior and appearance. The item is added
+ * to the end of the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TableItem (Table parent, int style) {
+	this (parent, style, checkNull (parent).getItemCount (), true);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Table</code>), a style value
+ * describing its behavior and appearance, and the index
+ * at which to place it in the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ * @param index the zero-relative index to store the receiver in its parent
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the parent (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TableItem (Table parent, int style, int index) {
+	this (parent, style, index, true);
+}
+
+TableItem (Table parent, int style, int index, boolean create) {
+	super (parent, style);
+	this.parent = parent;
+	if (create) parent.createItem (this, index);
+}
+
+static Table checkNull (Table control) {
+	if (control == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	return control;
+}
+
+int calculateWidth (int index, GC gc) {
+	if (index == 0 && width != -1) return width;
+	Font font = null;
+	if (cellFont != null) font = cellFont[index];
+	if (font == null) font = this.font;
+	if (font == null) font = parent.font;
+	if (font == null) font = parent.defaultFont();
+	String text = index == 0 ? this.text : (strings == null ? "" : strings [index]);
+	Image image = index == 0 ? this.image : (images == null ? null : images [index]);
+	NSCell cell = parent.dataCell;
+	if (font.extraTraits != 0) {
+		NSAttributedString attribStr = parent.createString(text, font, null, 0, true, false);
+		cell.setAttributedStringValue(attribStr);
+		attribStr.release();
+	} else {
+		cell.setFont (font.handle);
+		cell.setTitle (NSString.stringWith(text != null ? text : ""));
+	}
+
+	/* This code is inlined for performance */
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = cell.id;
+	super_struct.super_class = OS.objc_msgSend(cell.id, OS.sel_superclass);
+	NSSize size = new NSSize();
+	OS.objc_msgSendSuper_stret(size, super_struct, OS.sel_cellSize);
+	if (image != null) size.width += parent.imageBounds.width + Table.IMAGE_GAP;
+//	cell.setImage (image != null ? image.handle : null);
+//	NSSize size = cell.cellSize ();
+
+	int width = (int)Math.ceil (size.width);
+	boolean sendMeasure = true;
+	if ((parent.style & SWT.VIRTUAL) != 0) {
+		sendMeasure = cached;
+	}
+	if (sendMeasure && parent.hooks (SWT.MeasureItem)) {
+		gc.setFont (font);
+		Event event = new Event ();
+		event.item = this;
+		event.index = index;
+		event.gc = gc;
+		NSTableView widget = (NSTableView)parent.view;
+		int height = (int)widget.rowHeight ();
+		event.width = width;
+		event.height = height;
+		parent.sendEvent (SWT.MeasureItem, event);
+		if (height < event.height) {
+			widget.setRowHeight (event.height);
+			widget.setNeedsDisplay (true);
+		}
+		width = event.width;
+	}
+	if (index == 0) this.width = width;
+	return width;
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+void clear () {
+	text = "";
+	image = null;
+	strings = null;
+	images = null;
+	checked = grayed = cached = false;
+	foreground = background = null;
+	cellForeground = cellBackground = null;
+	font = null;
+	cellFont = null;
+	width = -1;
+}
+
+NSObject createString (int index) {
+	String text = index == 0 ? this.text : (strings == null ? "" : strings [index]);
+	return NSString.stringWith(text != null ? text : "");
+}
+
+void destroyWidget () {
+	parent.destroyItem (this);
+	releaseHandle ();
+}
+
+/**
+ * Returns the receiver's background color.
+ *
+ * @return the background color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.0
+ */
+public Color getBackground () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	return background != null ? background : parent.getBackground ();
+}
+
+/**
+ * Returns the background color at the given column index in the receiver.
+ *
+ * @param index the column index
+ * @return the background color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public Color getBackground (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	int count = Math.max (1, parent.columnCount);
+	if (0 > index || index > count -1) return getBackground ();
+	if (cellBackground == null || cellBackground [index] == null) return getBackground ();
+	return cellBackground [index];
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location
+ * relative to its parent.
+ *
+ * @return the receiver's bounding rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public Rectangle getBounds () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	NSTableView tableView = (NSTableView) parent.view;
+	NSRect rect = tableView.rectOfRow (parent.indexOf (this));
+	return new Rectangle((int) rect.x, (int) rect.y, (int) rect.width, (int) rect.height);
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location
+ * relative to its parent at a column in the table.
+ *
+ * @param index the index that specifies the column
+ * @return the receiver's bounding column rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Rectangle getBounds (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (!(0 <= index && index < Math.max (1, parent.columnCount))) return new Rectangle (0, 0, 0, 0);
+
+	NSTableView tableView = (NSTableView) parent.view;
+	if (parent.columnCount == 0) {
+		index = (parent.style & SWT.CHECK) != 0 ? 1 : 0;
+	} else {
+		TableColumn column = parent.getColumn (index);
+		index = parent.indexOf (column.nsColumn);
+	}
+	NSRect rect = tableView.frameOfCellAtColumn (index, parent.indexOf (this));
+	return new Rectangle ((int) rect.x, (int) rect.y, (int) rect.width, (int) rect.height);
+}
+
+/**
+ * Returns <code>true</code> if the receiver is checked,
+ * and false otherwise.  When the parent does not have
+ * the <code>CHECK</code> style, return false.
+ *
+ * @return the checked state of the checkbox
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getChecked () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if ((parent.style & SWT.CHECK) == 0) return false;
+	return checked;
+}
+
+/**
+ * Returns the font that the receiver will use to paint textual information for this item.
+ *
+ * @return the receiver's font
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.0
+ */
+public Font getFont () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	return font != null ? font : parent.getFont ();
+}
+
+/**
+ * Returns the font that the receiver will use to paint textual information
+ * for the specified cell in this item.
+ *
+ * @param index the column index
+ * @return the receiver's font
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.0
+ */
+public Font getFont (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	int count = Math.max (1, parent.columnCount);
+	if (0 > index || index > count -1) return getFont ();
+	if (cellFont == null || cellFont [index] == null) return getFont ();
+	return cellFont [index];
+}
+
+/**
+ * Returns the foreground color that the receiver will use to draw.
+ *
+ * @return the receiver's foreground color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.0
+ */
+public Color getForeground () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	return foreground != null ? foreground : parent.getForeground ();
+}
+
+/**
+ * 
+ * Returns the foreground color at the given column index in the receiver.
+ *
+ * @param index the column index
+ * @return the foreground color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public Color getForeground (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	int count = Math.max (1, parent.columnCount);
+	if (0 > index || index > count -1) return getForeground ();
+	if (cellForeground == null || cellForeground [index] == null) return getForeground ();
+	return cellForeground [index];
+}
+
+/**
+ * Returns <code>true</code> if the receiver is grayed,
+ * and false otherwise. When the parent does not have
+ * the <code>CHECK</code> style, return false.
+ *
+ * @return the grayed state of the checkbox
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getGrayed () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if ((parent.style & SWT.CHECK) == 0) return false;
+	return grayed;
+}
+
+public Image getImage () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	return super.getImage ();
+}
+
+/**
+ * Returns the image stored at the given column index in the receiver,
+ * or null if the image has not been set or if the column does not exist.
+ *
+ * @param index the column index
+ * @return the image stored at the given column index in the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Image getImage (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (index == 0) return getImage ();
+	if (images != null) {
+		if (0 <= index && index < images.length) return images [index];
+	}
+	return null;
+}
+
+/**
+ * Returns a rectangle describing the size and location
+ * relative to its parent of an image at a column in the
+ * table.  An empty rectangle is returned if index exceeds
+ * the index of the table's last column.
+ *
+ * @param index the index that specifies the column
+ * @return the receiver's bounding image rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Rectangle getImageBounds (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (!(0 <= index && index < Math.max (1, parent.columnCount))) return new Rectangle (0, 0, 0, 0);
+
+	NSTableView tableView = (NSTableView) parent.view;
+	Image image = index == 0 ? this.image : (images != null) ? images [index] : null;
+	if (parent.columnCount == 0) {
+		index = (parent.style & SWT.CHECK) != 0 ? 1 : 0;
+	} else {
+		TableColumn column = parent.getColumn (index);
+		index = parent.indexOf (column.nsColumn);
+	}
+	NSRect rect = tableView.frameOfCellAtColumn (index, parent.indexOf (this));
+	rect.x += Tree.IMAGE_GAP;
+	if (image != null) {
+		rect.width = parent.imageBounds.width;
+	} else {
+		rect.width = 0;
+	}
+	return new Rectangle((int) rect.x, (int) rect.y, (int) rect.width, (int) rect.height);
+}
+
+/**
+ * Gets the image indent.
+ *
+ * @return the indent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getImageIndent () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	return 0;
+}
+
+String getNameText () {
+	if ((parent.style & SWT.VIRTUAL) != 0) {
+		if (!cached) return "*virtual*"; //$NON-NLS-1$
+	}
+	return super.getNameText ();
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>Table</code>.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Table getParent () {
+	checkWidget ();
+	return parent;
+}
+
+public String getText () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	return super.getText ();
+}
+
+/**
+ * Returns the text stored at the given column index in the receiver,
+ * or empty string if the text has not been set.
+ *
+ * @param index the column index
+ * @return the text stored at the given column index in the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getText (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (index == 0) return getText ();
+	if (strings != null) {
+		if (0 <= index && index < strings.length) {
+			String string = strings [index];
+			return string != null ? string : "";
+		}
+	}
+	return "";
+}
+
+/**
+ * Returns a rectangle describing the size and location
+ * relative to its parent of the text at a column in the
+ * table.  An empty rectangle is returned if index exceeds
+ * the index of the table's last column.
+ *
+ * @param index the index that specifies the column
+ * @return the receiver's bounding text rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.3
+ */
+public Rectangle getTextBounds (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (!(0 <= index && index < Math.max (1, parent.columnCount))) return new Rectangle (0, 0, 0, 0);
+
+	NSTableView tableView = (NSTableView) parent.view;
+	Image image = index == 0 ? this.image : (images != null) ? images [index] : null;
+	if (parent.columnCount == 0) {
+		index = (parent.style & SWT.CHECK) != 0 ? 1 : 0;
+	} else {
+		TableColumn column = parent.getColumn (index);
+		index = parent.indexOf (column.nsColumn);
+	}
+	NSRect rect = tableView.frameOfCellAtColumn (index, parent.indexOf (this));
+	rect.x += Tree.TEXT_GAP;
+	rect.width -= Tree.TEXT_GAP;
+	if (image != null) {
+		int offset = parent.imageBounds.width + Tree.IMAGE_GAP;
+		rect.x += offset;
+		rect.width -= offset;
+	}
+	return new Rectangle((int) rect.x, (int) rect.y, (int) rect.width, (int) rect.height);
+}
+
+void redraw (int columnIndex) {
+	if (parent.currentItem == this || !isDrawing()) return;
+	/* redraw the full item if columnIndex == -1 */
+	NSTableView tableView = (NSTableView) parent.view;
+	NSRect rect = null;
+	if (columnIndex == -1 || parent.hooks (SWT.MeasureItem) || parent.hooks (SWT.EraseItem) || parent.hooks (SWT.PaintItem)) {
+		rect = tableView.rectOfRow (parent.indexOf (this));
+	} else {
+		int index;
+		if (parent.columnCount == 0) {
+			index = (parent.style & SWT.CHECK) != 0 ? 1 : 0;
+		} else {
+			if (0 <= columnIndex && columnIndex < parent.columnCount) {
+				index = parent.indexOf (parent.columns[columnIndex].nsColumn);
+			} else {
+				return;
+			}
+		}
+		rect = tableView.frameOfCellAtColumn (index, parent.indexOf (this));
+	}
+	tableView.setNeedsDisplayInRect (rect);	
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	parent = null;
+}
+
+void releaseParent () {
+	super.releaseParent ();
+//	parent.checkItems (true);
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	strings = null;
+	images = null;
+	background = foreground = null;
+	font = null;
+	cellBackground = cellForeground = null;
+	cellFont = null;
+}
+
+/**
+ * Sets the receiver's background color to the color specified
+ * by the argument, or to the default system color for the item
+ * if the argument is null.
+ *
+ * @param color the new color (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.0
+ */
+public void setBackground (Color color) {
+	checkWidget ();
+	if (color != null && color.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	Color oldColor = background;
+	if (oldColor == color) return;
+	background = color;
+	if (oldColor != null && oldColor.equals (color)) return;
+	cached = true;
+	redraw (-1);
+}
+
+/**
+ * Sets the background color at the given column index in the receiver 
+ * to the color specified by the argument, or to the default system color for the item
+ * if the argument is null.
+ *
+ * @param index the column index
+ * @param color the new color (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void setBackground (int index, Color color) {
+	checkWidget ();
+	if (color != null && color.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	int count = Math.max (1, parent.columnCount);
+	if (0 > index || index > count - 1) return;
+	if (cellBackground == null) {
+		if (color == null) return;
+		cellBackground = new Color [count];
+	}
+	Color oldColor = cellBackground [index];
+	if (oldColor == color) return;
+	cellBackground [index] = color;
+	if (oldColor != null && oldColor.equals (color)) return;
+	cached = true;
+	redraw (index);	
+}
+
+/**
+ * Sets the checked state of the checkbox for this item.  This state change 
+ * only applies if the Table was created with the SWT.CHECK style.
+ *
+ * @param checked the new checked state of the checkbox
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setChecked (boolean checked) {
+	checkWidget ();
+	if ((parent.style & SWT.CHECK) == 0) return;
+	if (this.checked == checked) return;
+	this.checked = checked;
+	cached = true;
+	redraw (-1);
+}
+
+/**
+ * Sets the font that the receiver will use to paint textual information
+ * for this item to the font specified by the argument, or to the default font
+ * for that kind of control if the argument is null.
+ *
+ * @param font the new font (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void setFont (Font font) {
+	checkWidget ();
+	if (font != null && font.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	Font oldFont = this.font;
+	if (oldFont == font) return;
+	this.font = font;
+	if (oldFont != null && oldFont.equals (font)) return;
+	width = -1;
+	cached = true;
+	redraw (-1);
+}
+
+/**
+ * Sets the font that the receiver will use to paint textual information
+ * for the specified cell in this item to the font specified by the 
+ * argument, or to the default font for that kind of control if the 
+ * argument is null.
+ *
+ * @param index the column index
+ * @param font the new font (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void setFont (int index, Font font) {
+	checkWidget ();
+	if (font != null && font.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	int count = Math.max (1, parent.columnCount);
+	if (0 > index || index > count - 1) return;
+	if (cellFont == null) {
+		if (font == null) return;
+		cellFont = new Font [count];
+	}
+	Font oldFont = cellFont [index];
+	if (oldFont == font) return;
+	cellFont [index] = font;
+	if (oldFont != null && oldFont.equals (font)) return;
+	width = -1;
+	cached = true;
+	redraw (index);
+}
+
+/**
+ * Sets the receiver's foreground color to the color specified
+ * by the argument, or to the default system color for the item
+ * if the argument is null.
+ *
+ * @param color the new color (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.0
+ */
+public void setForeground (Color color) {
+	checkWidget ();
+	if (color != null && color.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	Color oldColor = foreground;
+	if (oldColor == color) return;
+	foreground = color;
+	if (oldColor != null && oldColor.equals (color)) return;
+	cached = true;
+	redraw (-1);
+}
+
+/**
+ * Sets the foreground color at the given column index in the receiver 
+ * to the color specified by the argument, or to the default system color for the item
+ * if the argument is null.
+ *
+ * @param index the column index
+ * @param color the new color (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void setForeground (int index, Color color) {
+	checkWidget ();
+	if (color != null && color.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	int count = Math.max (1, parent.columnCount);
+	if (0 > index || index > count - 1) return;
+	if (cellForeground == null) {
+		if (color == null) return;
+		cellForeground = new Color [count];
+	}
+	Color oldColor = cellForeground [index];
+	if (oldColor == color) return;
+	cellForeground [index] = color;
+	if (oldColor != null && oldColor.equals (color)) return;
+	cached = true;
+	redraw (index);
+}
+
+/**
+ * Sets the grayed state of the checkbox for this item.  This state change 
+ * only applies if the Table was created with the SWT.CHECK style.
+ *
+ * @param grayed the new grayed state of the checkbox; 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setGrayed (boolean grayed) {
+	checkWidget ();
+	if ((parent.style & SWT.CHECK) == 0) return;
+	if (this.grayed == grayed) return;
+	this.grayed = grayed;
+	cached = true;
+	redraw (-1);
+}
+
+/**
+ * Sets the image for multiple columns in the table. 
+ * 
+ * @param images the array of new images
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array of images is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if one of the images has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setImage (Image [] images) {
+	checkWidget ();
+	if (images == null) error (SWT.ERROR_NULL_ARGUMENT);
+	for (int i=0; i<images.length; i++) {
+		setImage (i, images [i]);
+	}
+}
+
+/**
+ * Sets the receiver's image at a column.
+ *
+ * @param index the column index
+ * @param image the new image
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setImage (int index, Image image) {
+	checkWidget ();
+	if (image != null && image.isDisposed ()) {
+		error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	int itemIndex = parent.indexOf (this);
+	if (itemIndex == -1) return;
+	if (parent.imageBounds == null && image != null) {
+		parent.setItemHeight (image, null, false);
+	}
+	if (index == 0)  {
+		if (image != null && image.type == SWT.ICON) {
+			if (image.equals (this.image)) return;
+		}
+		width = -1;
+		super.setImage (image);
+	}
+	int count = Math.max (1, parent.columnCount);
+	if (0 <= index && index < count) {
+		if (images == null) images = new Image [count];
+		if (image != null && image.type == SWT.ICON) {
+			if (image.equals (images [index])) return;
+		}
+		images [index] = image;	
+	}
+	cached = true;
+	if (index == 0) parent.setScrollWidth (this);	
+	redraw (index);
+}
+
+public void setImage (Image image) {
+	checkWidget ();
+	setImage (0, image);
+}
+
+/**
+ * Sets the indent of the first column's image, expressed in terms of the image's width.
+ *
+ * @param indent the new indent
+ *
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @deprecated this functionality is not supported on most platforms
+ */
+public void setImageIndent (int indent) {
+	checkWidget ();
+	if (indent < 0) return;
+	cached = true;
+	/* Image indent is not supported on the Macintosh */
+}
+
+/**
+ * Sets the text for multiple columns in the table. 
+ * 
+ * @param strings the array of new strings
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setText (String [] strings) {
+	checkWidget ();
+	if (strings == null) error (SWT.ERROR_NULL_ARGUMENT);
+	for (int i=0; i<strings.length; i++) {
+		String string = strings [i];
+		if (string != null) setText (i, string);
+	}
+}
+
+/**
+ * Sets the receiver's text at a column
+ *
+ * @param index the column index
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setText (int index, String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (index == 0) {
+		if (string.equals (text)) return;
+		width = -1;
+		super.setText (string);
+	}
+	int count = Math.max (1, parent.columnCount);
+	if (0 <= index && index < count) {
+		if (strings == null) strings = new String [count];
+		if (string.equals (strings [index])) return;
+		strings [index] = string;
+	}
+	cached = true;
+	if (index == 0) parent.setScrollWidth (this);
+	redraw (index);
+}
+
+public void setText (String string) {
+	checkWidget ();
+	setText (0, string);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Text.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Text.java
new file mode 100755
index 0000000..b7876ed
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Text.java
@@ -0,0 +1,1983 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class are selectable user interface
+ * objects that allow the user to enter and modify text.
+ * Text controls can be either single or multi-line.
+ * When a text control is created with a border, the
+ * operating system includes a platform specific inset
+ * around the contents of the control.  When created
+ * without a border, an effort is made to remove the
+ * inset such that the preferred size of the control
+ * is the same size as the contents.
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>CENTER, ICON_CANCEL, ICON_SEARCH, LEFT, MULTI, PASSWORD, SEARCH, SINGLE, RIGHT, READ_ONLY, WRAP</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>DefaultSelection, Modify, Verify</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles MULTI and SINGLE may be specified,
+ * and only one of the styles LEFT, CENTER, and RIGHT may be specified.
+ * </p>
+ * <p>
+ * Note: The styles ICON_CANCEL and ICON_SEARCH are hints used in combination with SEARCH.
+ * When the platform supports the hint, the text control shows these icons.  When an icon
+ * is selected, a default selection event is sent with the detail field set to one of
+ * ICON_CANCEL or ICON_SEARCH.  Normally, application code does not need to check the
+ * detail.  In the case of ICON_CANCEL, the text is cleared before the default selection
+ * event is sent causing the application to search for an empty string.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#text">Text snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Text extends Scrollable {
+	int textLimit = LIMIT, tabs = 8;
+	char echoCharacter;
+	boolean doubleClick, receivingFocus;
+	String hiddenText, message;
+	NSRange selectionRange;
+	id targetSearch, targetCancel;
+	int /*long*/ actionSearch, actionCancel;
+	
+	/**
+	* The maximum number of characters that can be entered
+	* into a text widget.
+	* <p>
+	* Note that this value is platform dependent, based upon
+	* the native widget implementation.
+	* </p>
+	*/
+	public static final int LIMIT;
+	
+	/**
+	* The delimiter used by multi-line text widgets.  When text
+	* is queried and from the widget, it will be delimited using
+	* this delimiter.
+	*/
+	public static final String DELIMITER;
+	static final char PASSWORD = '\u2022';
+
+	/*
+	* These values can be different on different platforms.
+	* Therefore they are not initialized in the declaration
+	* to stop the compiler from inlining.
+	*/
+	static {
+		LIMIT = 0x7FFFFFFF;
+		DELIMITER = "\r";
+	}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#SINGLE
+ * @see SWT#MULTI
+ * @see SWT#READ_ONLY
+ * @see SWT#WRAP
+ * @see SWT#LEFT
+ * @see SWT#RIGHT
+ * @see SWT#CENTER
+ * @see SWT#PASSWORD
+ * @see SWT#SEARCH
+ * @see SWT#ICON_SEARCH
+ * @see SWT#ICON_CANCEL
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Text (Composite parent, int style) {
+	super (parent, checkStyle (style));
+	if ((style & SWT.SEARCH) != 0) {
+		/*
+		* Ensure that SWT.ICON_CANCEL and ICON_SEARCH are set.
+		* NOTE: ICON_CANCEL has the same value as H_SCROLL and
+		* ICON_SEARCH has the same value as V_SCROLL so it is
+		* necessary to first clear these bits to avoid a scroll
+		* bar and then reset the bit using the original style
+		* supplied by the programmer.
+		*/
+		NSSearchFieldCell cell = new NSSearchFieldCell (((NSSearchField) view).cell ());
+		if ((style & SWT.ICON_CANCEL) != 0) {
+			this.style |= SWT.ICON_CANCEL;
+			NSButtonCell cancelCell = cell.cancelButtonCell();
+			targetCancel = cancelCell.target();
+			actionCancel = cancelCell.action();
+			cancelCell.setTarget (view);
+			cancelCell.setAction (OS.sel_sendCancelSelection);
+		} else {
+			cell.setCancelButtonCell (null);
+		}
+		if ((style & SWT.ICON_SEARCH) != 0) {
+			this.style |= SWT.ICON_SEARCH;
+			NSButtonCell searchCell = cell.searchButtonCell();
+			targetSearch = searchCell.target();
+			actionSearch = searchCell.action();
+			searchCell.setTarget (view);
+			searchCell.setAction (OS.sel_sendSearchSelection);
+		} else {
+			cell.setSearchButtonCell (null);
+		}
+	}
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the receiver's text is modified, by sending
+ * it one of the messages defined in the <code>ModifyListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ModifyListener
+ * @see #removeModifyListener
+ */
+public void addModifyListener (ModifyListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Modify, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is not called for texts.
+ * <code>widgetDefaultSelected</code> is typically called when ENTER is pressed in a single-line text,
+ * or when ENTER is pressed in a search text. If the receiver has the <code>SWT.SEARCH | SWT.CANCEL</code> style
+ * and the user cancels the search, the event object detail field contains the value <code>SWT.CANCEL</code>.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the control is selected by the user
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the receiver's text is verified, by sending
+ * it one of the messages defined in the <code>VerifyListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see VerifyListener
+ * @see #removeVerifyListener
+ */
+public void addVerifyListener (VerifyListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Verify, typedListener);
+}
+
+/**
+ * Appends a string.
+ * <p>
+ * The new text is appended to the text at
+ * the end of the widget.
+ * </p>
+ *
+ * @param string the string to be appended
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void append (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (hooks (SWT.Verify) || filters (SWT.Verify)) {
+		int charCount = getCharCount ();
+		string = verifyText (string, charCount, charCount, null);
+		if (string == null) return;
+	}
+	NSString str = NSString.stringWith (string);
+	if ((style & SWT.SINGLE) != 0) {
+		setSelection (getCharCount ());
+		insertEditText (string);
+	} else {
+		NSTextView widget = (NSTextView) view;
+		NSTextStorage storage = widget.textStorage ();
+		NSRange range = new NSRange();
+		range.location = storage.length();
+		storage.replaceCharactersInRange (range, str);
+		range.location = storage.length();
+		widget.scrollRangeToVisible (range);
+		widget.setSelectedRange(range);
+	}
+	if (string.length () != 0) sendEvent (SWT.Modify);
+}
+
+boolean becomeFirstResponder (int /*long*/ id, int /*long*/ sel) {
+	receivingFocus = true;
+	boolean result = super.becomeFirstResponder (id, sel);
+	receivingFocus = false;
+	return result;
+}
+
+static int checkStyle (int style) {
+	if ((style & SWT.SEARCH) != 0) {
+		style |= SWT.SINGLE | SWT.BORDER;
+		style &= ~SWT.PASSWORD;
+		/* 
+		* NOTE: ICON_CANCEL has the same value as H_SCROLL and
+		* ICON_SEARCH has the same value as V_SCROLL so they are
+		* cleared because SWT.SINGLE is set. 
+		*/
+	}
+	if ((style & SWT.SINGLE) != 0 && (style & SWT.MULTI) != 0) {
+		style &= ~SWT.MULTI;
+	}
+	style = checkBits (style, SWT.LEFT, SWT.CENTER, SWT.RIGHT, 0, 0, 0);
+	if ((style & SWT.SINGLE) != 0) style &= ~(SWT.H_SCROLL | SWT.V_SCROLL | SWT.WRAP);
+	if ((style & SWT.WRAP) != 0) {
+		style |= SWT.MULTI;
+		style &= ~SWT.H_SCROLL;
+	}
+	if ((style & SWT.MULTI) != 0) style &= ~SWT.PASSWORD;
+	if ((style & (SWT.SINGLE | SWT.MULTI)) != 0) return style;
+	if ((style & (SWT.H_SCROLL | SWT.V_SCROLL)) != 0) return style | SWT.MULTI;
+	return style | SWT.SINGLE;
+}
+
+/**
+ * Clears the selection.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void clearSelection () {
+	checkWidget ();
+	Point selection = getSelection ();
+	setSelection (selection.x);	
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget ();
+	int width = 0, height = 0;
+	if ((style & SWT.SINGLE) != 0) {
+		NSTextField widget = (NSTextField) view;
+		NSSize size = widget.cell ().cellSize ();
+		width = (int)Math.ceil (size.width);
+		height = (int)Math.ceil (size.height);
+
+		Point border = null;
+		if ((style & SWT.BORDER) != 0 && (wHint != SWT.DEFAULT || hHint != SWT.DEFAULT)) {
+			/* determine the size of the cell without its border */
+			NSRect insets = widget.cell ().titleRectForBounds (new NSRect ());
+			border = new Point (-(int)Math.ceil (insets.width), -(int)Math.ceil (insets.height));
+			width -= border.x;
+			height -= border.y;
+		}
+		if (width <= 0) width = DEFAULT_WIDTH;
+		if (height <= 0) height = DEFAULT_HEIGHT;
+		if (wHint != SWT.DEFAULT) width = wHint;
+		if (hHint != SWT.DEFAULT) height = hHint;
+		if (border != null) {
+			/* re-add the border size (if any) now that wHint/hHint is taken */
+			width += border.x;
+			height += border.y;
+		}
+	} else {
+		NSLayoutManager layoutManager = (NSLayoutManager)new NSLayoutManager ().alloc ().init ();
+		NSTextContainer textContainer = (NSTextContainer)new NSTextContainer ().alloc ();
+		NSSize size = new NSSize ();
+		size.width = size.height = Float.MAX_VALUE;
+		if ((style & SWT.WRAP) != 0) {
+			if (wHint != SWT.DEFAULT) size.width = wHint;
+			if (hHint != SWT.DEFAULT) size.height = hHint;
+		}
+		textContainer.initWithContainerSize (size);
+		layoutManager.addTextContainer (textContainer);
+
+		NSTextStorage textStorage = (NSTextStorage)new NSTextStorage ().alloc ().init ();
+		textStorage.setAttributedString (((NSTextView)view).textStorage ());
+		layoutManager.setTextStorage (textStorage);
+		layoutManager.glyphRangeForTextContainer (textContainer);
+
+		NSRect rect = layoutManager.usedRectForTextContainer (textContainer);
+		width = layoutManager.numberOfGlyphs () == 0 ? DEFAULT_WIDTH : (int)Math.ceil (rect.width);
+		height = (int)Math.ceil (rect.height);
+		textStorage.release ();
+		textContainer.release ();
+		layoutManager.release ();
+
+		if (width <= 0) width = DEFAULT_WIDTH;
+		if (height <= 0) height = DEFAULT_HEIGHT;
+		if (wHint != SWT.DEFAULT) width = wHint;
+		if (hHint != SWT.DEFAULT) height = hHint;
+		Rectangle trim = computeTrim (0, 0, width, height);
+		width = trim.width;
+		height = trim.height;
+	}
+	return new Point (width, height);
+}
+
+public Rectangle computeTrim (int x, int y, int width, int height) {
+	Rectangle result = super.computeTrim (x, y, width, height);
+	if ((style & SWT.SINGLE) != 0) {
+		NSTextField widget = (NSTextField) view;
+		if ((style & SWT.SEARCH) != 0) {
+			NSSearchFieldCell cell = new NSSearchFieldCell (widget.cell ());
+			int testWidth = 100;
+			NSRect rect = new NSRect ();
+			rect.width = testWidth;
+			rect = cell.searchTextRectForBounds (rect);
+			int leftIndent = (int)rect.x;
+			int rightIndent = testWidth - leftIndent - (int)Math.ceil (rect.width);
+			result.x -= leftIndent;
+			result.width += leftIndent + rightIndent;
+		}
+		NSRect inset = widget.cell ().titleRectForBounds (new NSRect ());
+		result.x -= inset.x;
+		result.y -= inset.y;
+		result.width -= inset.width;
+		result.height -= inset.height;
+	}
+	return result;
+}
+
+/**
+ * Copies the selected text.
+ * <p>
+ * The current selection is copied to the clipboard.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void copy () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) {
+		Point selection = getSelection ();
+		if (selection.x == selection.y) return;
+		copyToClipboard (getEditText (selection.x, selection.y - 1));
+	} else {
+		NSText text = (NSText) view;
+		if (text.selectedRange ().length == 0) return;
+		text.copy (null);
+	}
+}
+
+void createHandle () {
+	if ((style & SWT.READ_ONLY) != 0) {
+		if ((style & (SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL)) == 0) {
+			state |= THEME_BACKGROUND;
+		}
+	}
+	if ((style & SWT.SINGLE) != 0) {
+		NSTextField widget;
+		if ((style & SWT.PASSWORD) != 0) {
+			widget = (NSTextField) new SWTSecureTextField ().alloc ();
+		} else if ((style & SWT.SEARCH) != 0) {
+			widget = (NSTextField) new SWTSearchField ().alloc ();
+		} else {
+			widget = (NSTextField) new SWTTextField ().alloc ();
+		}
+		widget.init ();
+		widget.setSelectable (true);
+		widget.setEditable((style & SWT.READ_ONLY) == 0);
+		if ((style & SWT.BORDER) == 0) {
+			widget.setFocusRingType (OS.NSFocusRingTypeNone);
+			widget.setBordered (false);
+		}
+		int align = OS.NSLeftTextAlignment;
+		if ((style & SWT.CENTER) != 0) align = OS.NSCenterTextAlignment;
+		if ((style & SWT.RIGHT) != 0) align = OS.NSRightTextAlignment;
+		widget.setAlignment (align);
+		NSCell cell = widget.cell();
+		cell.setWraps(false);
+		cell.setScrollable(true);
+//		widget.setTarget(widget);
+//		widget.setAction(OS.sel_sendSelection);
+		view = widget;
+	} else {
+		NSScrollView scrollWidget = (NSScrollView) new SWTScrollView ().alloc ();
+		scrollWidget.init ();
+		scrollWidget.setHasVerticalScroller ((style & SWT.VERTICAL) != 0);
+		scrollWidget.setHasHorizontalScroller ((style & SWT.HORIZONTAL) != 0);
+		scrollWidget.setAutoresizesSubviews (true);
+		if ((style & SWT.BORDER) != 0) scrollWidget.setBorderType (OS.NSBezelBorder);
+		
+		NSTextView widget = (NSTextView) new SWTTextView ().alloc ();
+		widget.init ();
+		widget.setEditable ((style & SWT.READ_ONLY) == 0);
+		
+		NSSize size = new NSSize ();
+		size.width = size.height = Float.MAX_VALUE;
+		widget.setMaxSize (size);
+		widget.setAutoresizingMask (OS.NSViewWidthSizable | OS.NSViewHeightSizable);
+
+		if ((style & SWT.WRAP) == 0) {
+			NSTextContainer textContainer = widget.textContainer ();
+			widget.setHorizontallyResizable (true);
+			textContainer.setWidthTracksTextView (false);
+			NSSize csize = new NSSize ();
+			csize.width = csize.height = Float.MAX_VALUE;
+			textContainer.setContainerSize (csize);
+		}
+
+		int align = OS.NSLeftTextAlignment;
+		if ((style & SWT.CENTER) != 0) align = OS.NSCenterTextAlignment;
+		if ((style & SWT.RIGHT) != 0) align = OS.NSRightTextAlignment;
+		widget.setAlignment (align);
+//		widget.setTarget(widget);
+//		widget.setAction(OS.sel_sendSelection);
+		widget.setRichText (false);
+		widget.setDelegate(widget);
+		widget.setFont (display.getSystemFont ().handle);
+
+		view = widget;
+		scrollView = scrollWidget;
+	}
+}
+
+void createWidget () {
+	super.createWidget ();
+	doubleClick = true;
+	message = "";
+}
+
+/**
+ * Cuts the selected text.
+ * <p>
+ * The current selection is first copied to the
+ * clipboard and then deleted from the widget.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void cut () {
+	checkWidget ();
+	if ((style & SWT.READ_ONLY) != 0) return;
+	boolean cut = true;
+	char [] oldText = null;
+	Point oldSelection = getSelection ();
+	if (hooks (SWT.Verify) || filters (SWT.Verify)) {
+		if (oldSelection.x != oldSelection.y) {
+			oldText = getEditText (oldSelection.x, oldSelection.y - 1);
+			String newText = verifyText ("", oldSelection.x, oldSelection.y, null);
+			if (newText == null) return;
+			if (newText.length () != 0) {
+				copyToClipboard (oldText);
+				if ((style & SWT.SINGLE) != 0) {
+					insertEditText (newText);
+				} else {
+					NSTextView widget = (NSTextView) view;
+					widget.replaceCharactersInRange (widget.selectedRange (), NSString.stringWith (newText));
+				}
+				cut = false;
+			}
+		}
+	}
+	if (cut) {
+		if ((style & SWT.SINGLE) != 0) {
+			if (oldText == null) oldText = getEditText (oldSelection.x, oldSelection.y - 1);
+			copyToClipboard (oldText);
+			insertEditText ("");
+		} else {
+			((NSTextView) view).cut (null);
+		}
+	}
+	Point newSelection = getSelection ();
+	if (!cut || !oldSelection.equals (newSelection)) sendEvent (SWT.Modify);
+}
+
+Color defaultBackground () {
+	return display.getWidgetColor (SWT.COLOR_LIST_BACKGROUND);
+}
+
+NSFont defaultNSFont () {
+	if ((style & SWT.MULTI) != 0) return display.textViewFont;
+	if ((style & SWT.SEARCH) != 0) return display.searchFieldFont;
+	if ((style & SWT.PASSWORD) != 0) return display.secureTextFieldFont;
+	return display.textFieldFont;
+}
+
+Color defaultForeground () {
+	return display.getWidgetColor (SWT.COLOR_LIST_FOREGROUND);
+}
+
+void deregister() {
+	super.deregister();
+	
+	if ((style & SWT.SINGLE) != 0) {
+		display.removeWidget(((NSControl)view).cell());
+	}
+}
+
+boolean dragDetect (int x, int y, boolean filter, boolean [] consume) {
+	Point selection = getSelection ();
+	if (selection.x != selection.y) {
+		int /*long*/ position = getPosition (x, y);
+		if (selection.x <= position && position < selection.y) {
+			if (super.dragDetect (x, y, filter, consume)) {
+				if (consume != null) consume [0] = true;
+				return true;
+			}
+		}
+	}
+	return false;
+}
+
+/**
+ * Returns the line number of the caret.
+ * <p>
+ * The line number of the caret is returned.
+ * </p>
+ *
+ * @return the line number
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getCaretLineNumber () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) return 0;
+    return (getTopPixel () + getCaretLocation ().y) / getLineHeight ();
+}
+
+boolean acceptsFirstResponder(int /*long*/ id, int /*long*/ sel) {
+	if ((style & SWT.READ_ONLY) != 0) return true;
+	return super.acceptsFirstResponder(id, sel);
+}
+
+/**
+ * Returns a point describing the receiver's location relative
+ * to its parent (or its display if its parent is null).
+ * <p>
+ * The location of the caret is returned.
+ * </p>
+ *
+ * @return a point, the location of the caret
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Point getCaretLocation () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) {
+		//TODO - caret location for single text
+		return new Point (0, 0);
+	}
+	NSTextView widget = (NSTextView)view;
+	NSLayoutManager layoutManager = widget.layoutManager();
+	NSTextContainer container = widget.textContainer();
+	NSRange range = widget.selectedRange();
+	int /*long*/ pRectCount = OS.malloc(C.PTR_SIZEOF);
+	int /*long*/ pArray = layoutManager.rectArrayForCharacterRange(range, range, container, pRectCount);
+	int /*long*/ [] rectCount = new int /*long*/ [1];
+	OS.memmove(rectCount, pRectCount, C.PTR_SIZEOF);
+	OS.free(pRectCount);
+	NSRect rect = new NSRect();
+	if (rectCount[0] > 0) OS.memmove(rect, pArray, NSRect.sizeof);
+	return new Point((int)rect.x, (int)rect.y);
+}
+
+/**
+ * Returns the character position of the caret.
+ * <p>
+ * Indexing is zero based.
+ * </p>
+ *
+ * @return the position of the caret
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getCaretPosition () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) {
+		return selectionRange != null ? (int)/*64*/selectionRange.location : 0;
+	} else {
+		NSRange range = ((NSTextView)view).selectedRange();
+		return (int)/*64*/range.location;
+	}
+}
+
+/**
+ * Returns the number of characters.
+ *
+ * @return number of characters in the widget
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getCharCount () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) {
+		return (int)/*64*/new NSCell (((NSControl) view).cell ()).title ().length ();
+	} else {
+		return (int)/*64*/((NSTextView) view).textStorage ().length ();
+	}
+}
+
+/**
+ * Returns the double click enabled flag.
+ * <p>
+ * The double click flag enables or disables the
+ * default action of the text widget when the user
+ * double clicks.
+ * </p>
+ * 
+ * @return whether or not double click is enabled
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getDoubleClickEnabled () {
+	checkWidget ();
+    return doubleClick;
+}
+
+/**
+ * Returns the echo character.
+ * <p>
+ * The echo character is the character that is
+ * displayed when the user enters text or the
+ * text is changed by the programmer.
+ * </p>
+ * 
+ * @return the echo character
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setEchoChar
+ */
+public char getEchoChar () {
+	checkWidget ();
+	return echoCharacter;
+}
+
+/**
+ * Returns the editable state.
+ *
+ * @return whether or not the receiver is editable
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getEditable () {
+	checkWidget ();
+	return (style & SWT.READ_ONLY) == 0;
+}
+
+char [] getEditText () {
+	NSString str = null;
+	if ((style & SWT.SINGLE) != 0) {
+		str = new NSTextFieldCell (((NSTextField) view).cell ()).title ();
+	} else {
+		str = ((NSTextView)view).textStorage().string();
+	}
+
+	int length = (int)/*64*/str.length ();
+	char [] buffer = new char [length];
+	if (hiddenText != null) {
+		hiddenText.getChars (0, length, buffer, 0);
+	} else {
+		NSRange range = new NSRange ();
+		range.length = length;
+		str.getCharacters (buffer, range);
+	}
+	return buffer;
+}
+
+char [] getEditText (int start, int end) {
+	NSString str = null;
+	if ((style & SWT.SINGLE) != 0) {
+		str = new NSTextFieldCell (((NSTextField) view).cell ()).title ();
+	} else {
+		str = ((NSTextView)view).textStorage().string();
+	}
+
+	int length = (int)/*64*/str.length ();
+	end = Math.min (end, length - 1);
+	if (start > end) return new char [0];
+	start = Math.max (0, start);
+	NSRange range = new NSRange ();
+	range.location = start;
+	range.length = Math.max (0, end - start + 1);
+	char [] buffer = new char [(int)/*64*/range.length];
+	if (hiddenText != null) {
+		hiddenText.getChars ((int)/*64*/range.location, (int)/*64*/(range.location + range.length), buffer, 0);
+	} else {
+		str.getCharacters (buffer, range);
+	}
+	return buffer;
+}
+
+/**
+ * Returns the number of lines.
+ *
+ * @return the number of lines in the widget
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getLineCount () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) return 1;
+	NSTextStorage storage = ((NSTextView) view).textStorage ();
+	int count = (int)/*64*/storage.paragraphs ().count ();
+	NSString string = storage.string();
+	int /*long*/ length = string.length(), c;
+	if (length == 0 || (c = string.characterAtIndex(length - 1)) == '\n' || c == '\r') {
+		count++;
+	}
+	return count;
+}
+
+/**
+ * Returns the line delimiter.
+ *
+ * @return a string that is the line delimiter
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #DELIMITER
+ */
+public String getLineDelimiter () {
+	checkWidget ();
+	return DELIMITER;
+}
+
+/**
+ * Returns the height of a line.
+ *
+ * @return the height of a row of text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getLineHeight () {
+	checkWidget ();
+	Font font = this.font != null ? this.font : defaultFont();
+	if ((style & SWT.SINGLE) != 0) {
+		NSDictionary dict = NSDictionary.dictionaryWithObject(font.handle, OS.NSFontAttributeName);
+		NSString str = NSString.stringWith(" ");
+		NSAttributedString attribStr = ((NSAttributedString)new NSAttributedString().alloc()).initWithString(str, dict);
+		NSSize size = attribStr.size();
+		attribStr.release();
+		return (int) size.height;
+	} else {
+		NSTextView widget = (NSTextView)view;
+		return (int)Math.ceil(widget.layoutManager().defaultLineHeightForFont(font.handle));
+	}
+}
+
+/**
+ * Returns the orientation of the receiver, which will be one of the
+ * constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ *
+ * @return the orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.1.2
+ */
+public int getOrientation () {
+	checkWidget ();
+	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+}
+
+/**
+ * Returns the widget message.  The message text is displayed
+ * as a hint for the user, indicating the purpose of the field.
+ * <p>
+ * Typically this is used in conjunction with <code>SWT.SEARCH</code>.
+ * </p>
+ * 
+ * @return the widget message
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.3
+ */
+public String getMessage () {
+	checkWidget ();
+	return message;
+}
+
+int /*long*/ getPosition (int /*long*/ x, int /*long*/ y) {
+//	checkWidget ();
+	if ((style & SWT.MULTI) != 0) {
+		NSTextView widget = (NSTextView) view;
+		NSPoint viewLocation = new NSPoint();
+		viewLocation.x = x;
+		viewLocation.y = y;
+		return widget.characterIndexForInsertionAtPoint(viewLocation);
+	} else {
+		//TODO 
+		return 0;
+	}
+}
+
+/**
+ * Returns a <code>Point</code> whose x coordinate is the
+ * character position representing the start of the selected
+ * text, and whose y coordinate is the character position
+ * representing the end of the selection. An "empty" selection
+ * is indicated by the x and y coordinates having the same value.
+ * <p>
+ * Indexing is zero based.  The range of a selection is from
+ * 0..N where N is the number of characters in the widget.
+ * </p>
+ *
+ * @return a point representing the selection start and end
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Point getSelection () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) {
+		if (selectionRange == null) {
+			NSString str = new NSTextFieldCell (((NSTextField) view).cell ()).title ();
+			return new Point((int)/*64*/str.length (), (int)/*64*/str.length ());
+		}
+		return new Point ((int)/*64*/selectionRange.location, (int)/*64*/(selectionRange.location + selectionRange.length));
+	} else {
+		NSTextView widget = (NSTextView) view;
+		NSRange range = widget.selectedRange ();
+		return new Point ((int)/*64*/range.location, (int)/*64*/(range.location + range.length));
+	}
+}
+
+/**
+ * Returns the number of selected characters.
+ *
+ * @return the number of selected characters.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelectionCount () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) {
+		return selectionRange != null ? (int)/*64*/selectionRange.length : 0;
+	} else {
+		NSTextView widget = (NSTextView) view;
+		NSRange range = widget.selectedRange ();
+		return (int)/*64*/range.length;
+	}
+}
+
+/**
+ * Gets the selected text, or an empty string if there is no current selection.
+ *
+ * @return the selected text
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getSelectionText () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) {
+		Point selection = getSelection ();
+		if (selection.x == selection.y) return "";
+		return new String (getEditText (selection.x, selection.y - 1));
+	} else {
+		NSTextView widget = (NSTextView) view;
+		NSRange range = widget.selectedRange ();
+		NSString str = widget.textStorage ().string ();
+		char[] buffer = new char [(int)/*64*/range.length];
+		str.getCharacters (buffer, range);
+		return new String (buffer);
+	}
+}
+
+/**
+ * Returns the number of tabs.
+ * <p>
+ * Tab stop spacing is specified in terms of the
+ * space (' ') character.  The width of a single
+ * tab stop is the pixel width of the spaces.
+ * </p>
+ *
+ * @return the number of tab characters
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getTabs () {
+	checkWidget ();
+	return tabs;
+}
+
+/**
+ * Returns the widget text.
+ * <p>
+ * The text for a text widget is the characters in the widget, or
+ * an empty string if this has never been set.
+ * </p>
+ *
+ * @return the widget text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getText () {
+	checkWidget ();
+	NSString str;
+	if ((style & SWT.SINGLE) != 0) {
+		return new String (getEditText ());
+	} else {
+		str = ((NSTextView)view).textStorage ().string ();
+	}
+	return str.getString();
+}
+
+/**
+ * Returns a range of text.  Returns an empty string if the
+ * start of the range is greater than the end.
+ * <p>
+ * Indexing is zero based.  The range of
+ * a selection is from 0..N-1 where N is
+ * the number of characters in the widget.
+ * </p>
+ *
+ * @param start the start of the range
+ * @param end the end of the range
+ * @return the range of text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getText (int start, int end) {
+	checkWidget ();
+	if (!(start <= end && 0 <= end)) return ""; //$NON-NLS-1$
+	if ((style & SWT.SINGLE) != 0) {
+		return new String (getEditText (start, end));
+	}
+	NSTextStorage storage = ((NSTextView) view).textStorage ();
+	end = Math.min (end, (int)/*64*/storage.length () - 1);
+	if (start > end) return ""; //$NON-NLS-1$
+	start = Math.max (0, start);
+	NSRange range = new NSRange ();
+	range.location = start;
+	range.length = end - start + 1;
+	NSAttributedString substring = storage.attributedSubstringFromRange (range);
+	NSString string = substring.string ();
+	return string.getString();
+}
+
+/**
+ * Returns the maximum number of characters that the receiver is capable of holding. 
+ * <p>
+ * If this has not been changed by <code>setTextLimit()</code>,
+ * it will be the constant <code>Text.LIMIT</code>.
+ * </p>
+ * 
+ * @return the text limit
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #LIMIT
+ */
+public int getTextLimit () {
+	checkWidget ();
+    return textLimit;
+}
+
+/**
+ * Returns the zero-relative index of the line which is currently
+ * at the top of the receiver.
+ * <p>
+ * This index can change when lines are scrolled or new lines are added or removed.
+ * </p>
+ *
+ * @return the index of the top line
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getTopIndex () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) return 0;
+    return getTopPixel () / getLineHeight ();
+}
+
+/**
+ * Returns the top pixel.
+ * <p>
+ * The top pixel is the pixel position of the line
+ * that is currently at the top of the widget.  On
+ * some platforms, a text widget can be scrolled by
+ * pixels instead of lines so that a partial line
+ * is displayed at the top of the widget.
+ * </p><p>
+ * The top pixel changes when the widget is scrolled.
+ * The top pixel does not include the widget trimming.
+ * </p>
+ *
+ * @return the pixel position of the top line
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getTopPixel () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) return 0;
+	return (int)scrollView.contentView().bounds().y;
+}
+
+/**
+ * Inserts a string.
+ * <p>
+ * The old selection is replaced with the new text.
+ * </p>
+ *
+ * @param string the string
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is <code>null</code></li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void insert (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (hooks (SWT.Verify) || filters (SWT.Verify)) {
+		Point selection = getSelection ();
+		string = verifyText (string, selection.x, selection.y, null);
+		if (string == null) return;
+	}
+	if ((style & SWT.SINGLE) != 0) {
+		insertEditText (string);
+	} else {
+		NSString str = NSString.stringWith (string);
+		NSTextView widget = (NSTextView) view;
+		NSRange range = widget.selectedRange ();
+		widget.textStorage ().replaceCharactersInRange (range, str);
+	}
+	if (string.length () != 0) sendEvent (SWT.Modify);
+}
+
+void insertEditText (String string) {
+	int length = string.length ();
+	Point selection = getSelection ();
+	if (hasFocus () && hiddenText == null) {
+		if (textLimit != LIMIT) {
+			int charCount = getCharCount();
+			if (charCount - (selection.y - selection.x) + length > textLimit) {
+				length = textLimit - charCount + (selection.y - selection.x);
+			}
+		}
+		char [] buffer = new char [length];
+		string.getChars (0, buffer.length, buffer, 0);
+		NSString nsstring = NSString.stringWithCharacters (buffer, buffer.length);
+		NSText fieldEditor = ((NSTextField) view).currentEditor ();
+		if (fieldEditor != null) fieldEditor.replaceCharactersInRange (fieldEditor.selectedRange (), nsstring);
+		selectionRange = null;
+	} else {
+		String oldText = getText ();
+		if (textLimit != LIMIT) {
+			int charCount = oldText.length ();
+			if (charCount - (selection.y - selection.x) + length > textLimit) {
+				string = string.substring(0, textLimit - charCount + (selection.y - selection.x));
+			}
+		}
+		String newText = oldText.substring (0, selection.x) + string + oldText.substring (selection.y);
+		setEditText (newText);
+		setSelection (selection.x + string.length ());
+	}
+}
+
+boolean isEventView (int /*long*/ id) {
+	if ((style & SWT.MULTI) != 0) return super.isEventView (id);
+	return true;
+}
+
+/**
+ * Pastes text from clipboard.
+ * <p>
+ * The selected text is deleted from the widget
+ * and new text inserted from the clipboard.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void paste () {
+	checkWidget ();
+	if ((style & SWT.READ_ONLY) != 0) return;
+	boolean paste = true;
+	String oldText = null;
+	if (hooks (SWT.Verify) || filters (SWT.Verify)) {
+		oldText = getClipboardText ();
+		if (oldText != null) {
+			Point selection = getSelection ();
+			String newText = verifyText (oldText, selection.x, selection.y, null);
+			if (newText == null) return;
+			if (!newText.equals (oldText)) {
+				if ((style & SWT.SINGLE) != 0) {
+					insertEditText (newText);
+				} else {
+					NSTextView textView = (NSTextView) view;
+					textView.replaceCharactersInRange (textView.selectedRange (), NSString.stringWith (newText));
+				}
+				paste = false;
+			}
+		}
+	}
+	if (paste) {
+		if ((style & SWT.SINGLE) != 0) {
+			if (oldText == null) oldText = getClipboardText ();
+			if (oldText == null) return;
+			insertEditText (oldText);
+		} else {
+			//TODO check text limit
+			((NSTextView) view).paste (null);
+		}
+	}
+	sendEvent (SWT.Modify);
+}
+
+void register() {
+	super.register();
+	
+	if ((style & SWT.SINGLE) != 0) {
+		display.addWidget(((NSControl)view).cell(), this);
+	}
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	if ((style & SWT.SINGLE) != 0) ((NSControl)view).abortEditing();
+	hiddenText = message = null;
+	selectionRange = null;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the receiver's text is modified.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ModifyListener
+ * @see #addModifyListener
+ */
+public void removeModifyListener (ModifyListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Modify, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is verified.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see VerifyListener
+ * @see #addVerifyListener
+ */
+public void removeVerifyListener (VerifyListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Verify, listener);
+}
+
+/**
+ * Selects all the text in the receiver.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void selectAll () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) {
+		setSelection (0, getCharCount ());
+	} else {
+		((NSTextView) view).selectAll (null);
+	}
+}
+
+boolean sendKeyEvent (NSEvent nsEvent, int type) {
+	boolean result = super.sendKeyEvent (nsEvent, type);
+	if (!result) return result;
+	if (type != SWT.KeyDown) return result;
+	int stateMask = 0;
+	int /*long*/ modifierFlags = nsEvent.modifierFlags();
+	if ((modifierFlags & OS.NSAlternateKeyMask) != 0) stateMask |= SWT.ALT;
+	if ((modifierFlags & OS.NSShiftKeyMask) != 0) stateMask |= SWT.SHIFT;
+	if ((modifierFlags & OS.NSControlKeyMask) != 0) stateMask |= SWT.CONTROL;
+	if ((modifierFlags & OS.NSCommandKeyMask) != 0) stateMask |= SWT.COMMAND;
+	if (stateMask == SWT.COMMAND) {
+		short keyCode = nsEvent.keyCode ();
+		switch (keyCode) {
+			case 7: /* X */
+				cut ();
+				return false;
+			case 8: /* C */
+				copy ();
+				return false;
+			case 9: /* V */
+				paste ();
+				return false;
+		}
+	}
+	if ((style & SWT.SINGLE) != 0) {
+		short keyCode = nsEvent.keyCode ();
+		switch (keyCode) {
+			case 76: /* KP Enter */
+			case 36: /* Return */
+				postEvent (SWT.DefaultSelection);
+		}
+	}
+	return result;
+}
+
+void sendSearchSelection () {
+	if (targetSearch != null) {
+		((NSSearchField)view).sendAction(actionSearch, targetSearch);
+	}
+	Event event = new Event ();
+	event.detail = SWT.ICON_SEARCH;
+	postEvent (SWT.DefaultSelection, event);
+}
+
+void sendCancelSelection () {
+	if (targetCancel != null) {
+		((NSSearchField)view).sendAction(actionCancel, targetCancel);
+	}
+	Event event = new Event ();
+	event.detail = SWT.ICON_CANCEL;
+	postEvent (SWT.DefaultSelection, event);
+}
+
+void updateBackground () {
+	NSColor nsColor = null;
+	if (backgroundImage != null) {
+		nsColor = NSColor.colorWithPatternImage(backgroundImage.handle);
+	} else if (background != null) {
+		nsColor = NSColor.colorWithDeviceRed(background[0], background[1], background[2], background[3]);
+	} else {
+		nsColor = NSColor.textBackgroundColor ();
+	}
+	if ((style & SWT.SINGLE) != 0) {
+		((NSTextField) view).setBackgroundColor (nsColor);
+	} else {
+		((NSTextView) view).setBackgroundColor (nsColor);
+	}
+}
+
+/**
+ * Sets the double click enabled flag.
+ * <p>
+ * The double click flag enables or disables the
+ * default action of the text widget when the user
+ * double clicks.
+ * </p><p>
+ * Note: This operation is a hint and is not supported on
+ * platforms that do not have this concept.
+ * </p>
+ * 
+ * @param doubleClick the new double click flag
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setDoubleClickEnabled (boolean doubleClick) {
+	checkWidget ();
+	this.doubleClick = doubleClick;
+}
+
+/**
+ * Sets the echo character.
+ * <p>
+ * The echo character is the character that is
+ * displayed when the user enters text or the
+ * text is changed by the programmer. Setting
+ * the echo character to '\0' clears the echo
+ * character and redraws the original text.
+ * If for any reason the echo character is invalid,
+ * or if the platform does not allow modification
+ * of the echo character, the default echo character
+ * for the platform is used.
+ * </p>
+ *
+ * @param echo the new echo character
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setEchoChar (char echo) {
+	checkWidget ();
+	if ((style & SWT.MULTI) != 0) return;
+	if ((style & SWT.PASSWORD) == 0) {
+		Point selection = getSelection ();
+		String text = getText ();
+		echoCharacter = echo;
+		setEditText (text);
+		setSelection (selection);
+	}
+	echoCharacter = echo;
+}
+
+/**
+ * Sets the editable state.
+ *
+ * @param editable the new editable state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setEditable (boolean editable) {
+	checkWidget ();
+	if (editable) {
+		style &= ~SWT.READ_ONLY;
+	} else {
+		style |= SWT.READ_ONLY;
+	}
+	if ((style & SWT.SINGLE) != 0) {
+		((NSTextField) view).setEditable (editable);
+	} else {
+		((NSTextView) view).setEditable (editable);
+	}
+}
+
+void setEditText (String string) {
+	char [] buffer;
+	if ((style & SWT.PASSWORD) == 0 && echoCharacter != '\0') {
+		hiddenText = string;
+		buffer = new char [Math.min(hiddenText.length (), textLimit)];
+		for (int i = 0; i < buffer.length; i++) buffer [i] = echoCharacter;
+	} else {
+		hiddenText = null;
+		buffer = new char [Math.min(string.length (), textLimit)];
+		string.getChars (0, buffer.length, buffer, 0);
+	}
+	NSString nsstring = NSString.stringWithCharacters (buffer, buffer.length);
+	new NSCell (((NSTextField) view).cell ()).setTitle (nsstring);
+	selectionRange = null;
+}
+
+void setFont(NSFont font) {
+	if ((style & SWT.MULTI) !=  0) {
+		((NSTextView) view).setFont (font);
+		return;
+	}
+	super.setFont (font);
+}
+
+void setForeground (float /*double*/ [] color) {
+	NSColor nsColor;
+	if (color == null) {
+		nsColor = NSColor.textColor ();
+	} else {
+		nsColor = NSColor.colorWithDeviceRed (color [0], color [1], color [2], 1);
+	}
+	if ((style & SWT.SINGLE) != 0) {
+		((NSTextField) view).setTextColor (nsColor);
+	} else {
+		((NSTextView) view).setTextColor (nsColor);
+	}
+}
+
+/**
+ * Sets the orientation of the receiver, which must be one
+ * of the constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ * <p>
+ * Note: This operation is a hint and is not supported on
+ * platforms that do not have this concept.
+ * </p>
+ *
+ * @param orientation new orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.1.2
+ */
+public void setOrientation (int orientation) {
+	checkWidget ();
+}
+
+/**
+ * Sets the widget message. The message text is displayed
+ * as a hint for the user, indicating the purpose of the field.
+ * <p>
+ * Typically this is used in conjunction with <code>SWT.SEARCH</code>.
+ * </p>
+ * 
+ * @param message the new message
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the message is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.3
+ */
+public void setMessage (String message) {
+	checkWidget ();
+	if (message == null) error (SWT.ERROR_NULL_ARGUMENT);
+	this.message = message;
+	if ((style & SWT.SINGLE) != 0) {
+		NSString str = NSString.stringWith (message);
+		NSTextFieldCell cell = new NSTextFieldCell (((NSTextField) view).cell ());
+		cell.setPlaceholderString (str);
+	}
+}
+
+/**
+ * Sets the selection.
+ * <p>
+ * Indexing is zero based.  The range of
+ * a selection is from 0..N where N is
+ * the number of characters in the widget.
+ * </p><p>
+ * Text selections are specified in terms of
+ * caret positions.  In a text widget that
+ * contains N characters, there are N+1 caret
+ * positions, ranging from 0..N.  This differs
+ * from other functions that address character
+ * position such as getText () that use the
+ * regular array indexing rules.
+ * </p>
+ *
+ * @param start new caret position
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (int start) {
+	checkWidget ();
+	setSelection (start, start);
+}
+
+/**
+ * Sets the selection to the range specified
+ * by the given start and end indices.
+ * <p>
+ * Indexing is zero based.  The range of
+ * a selection is from 0..N where N is
+ * the number of characters in the widget.
+ * </p><p>
+ * Text selections are specified in terms of
+ * caret positions.  In a text widget that
+ * contains N characters, there are N+1 caret
+ * positions, ranging from 0..N.  This differs
+ * from other functions that address character
+ * position such as getText () that use the
+ * usual array indexing rules.
+ * </p>
+ *
+ * @param start the start of the range
+ * @param end the end of the range
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (int start, int end) {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) {
+		NSString str = new NSCell (((NSTextField) view).cell ()).title ();
+		int length = (int)/*64*/str.length ();
+		int selStart = Math.min (Math.max (Math.min (start, end), 0), length);
+		int selEnd = Math.min (Math.max (Math.max (start, end), 0), length);
+		selectionRange = new NSRange ();
+		selectionRange.location = selStart;
+		selectionRange.length = selEnd - selStart;
+		NSText fieldEditor = ((NSControl)view).currentEditor();
+		if (fieldEditor != null) {
+			fieldEditor.setSelectedRange (selectionRange);
+		}
+	} else {
+		int length = (int)/*64*/((NSTextView) view).textStorage ().length ();
+		int selStart = Math.min (Math.max (Math.min (start, end), 0), length);
+		int selEnd = Math.min (Math.max (Math.max (start, end), 0), length);
+		NSRange range = new NSRange ();
+		range.location = selStart;
+		range.length = selEnd - selStart;
+		((NSTextView) view).setSelectedRange (range);
+	}
+}
+
+/**
+ * Sets the selection to the range specified
+ * by the given point, where the x coordinate
+ * represents the start index and the y coordinate
+ * represents the end index.
+ * <p>
+ * Indexing is zero based.  The range of
+ * a selection is from 0..N where N is
+ * the number of characters in the widget.
+ * </p><p>
+ * Text selections are specified in terms of
+ * caret positions.  In a text widget that
+ * contains N characters, there are N+1 caret
+ * positions, ranging from 0..N.  This differs
+ * from other functions that address character
+ * position such as getText () that use the
+ * usual array indexing rules.
+ * </p>
+ *
+ * @param selection the point
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (Point selection) {
+	checkWidget ();
+	if (selection == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setSelection (selection.x, selection.y);
+}
+
+/**
+ * Sets the number of tabs.
+ * <p>
+ * Tab stop spacing is specified in terms of the
+ * space (' ') character.  The width of a single
+ * tab stop is the pixel width of the spaces.
+ * </p>
+ *
+ * @param tabs the number of tabs
+ *
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setTabs (int tabs) {
+	checkWidget ();
+	if (this.tabs == tabs) return;
+	this.tabs = tabs;
+	if ((style & SWT.SINGLE) != 0) return;
+	float /*double*/ size = textExtent("s").width * tabs;
+	NSTextView widget = (NSTextView)view;
+	NSParagraphStyle defaultStyle = widget.defaultParagraphStyle();
+	NSMutableParagraphStyle paragraphStyle = new NSMutableParagraphStyle(defaultStyle.mutableCopy());
+	paragraphStyle.setTabStops(NSArray.array());
+	NSTextTab tab = (NSTextTab)new NSTextTab().alloc();
+	tab = tab.initWithType(OS.NSLeftTabStopType, size);
+	paragraphStyle.addTabStop(tab);
+	tab.release();
+	paragraphStyle.setDefaultTabInterval(size);
+	widget.setDefaultParagraphStyle(paragraphStyle);
+	paragraphStyle.release();
+}
+
+/**
+ * Sets the contents of the receiver to the given string. If the receiver has style
+ * SINGLE and the argument contains multiple lines of text, the result of this
+ * operation is undefined and may vary from platform to platform.
+ *
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setText (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (hooks (SWT.Verify) || filters (SWT.Verify)) {
+		string = verifyText (string, 0, getCharCount (), null);
+		if (string == null) return;
+	}
+	if ((style & SWT.SINGLE) != 0) {
+		setEditText (string);
+	} else {
+		NSTextView widget = (NSTextView)view;
+		NSString str = NSString.stringWith (string);
+		widget.setString (str);
+		widget.setSelectedRange(new NSRange());
+	}
+	sendEvent (SWT.Modify);
+}
+
+/**
+ * Sets the maximum number of characters that the receiver
+ * is capable of holding to be the argument.
+ * <p>
+ * Instead of trying to set the text limit to zero, consider
+ * creating a read-only text widget.
+ * </p><p>
+ * To reset this value to the default, use <code>setTextLimit(Text.LIMIT)</code>.
+ * Specifying a limit value larger than <code>Text.LIMIT</code> sets the
+ * receiver's limit to <code>Text.LIMIT</code>.
+ * </p>
+ *
+ * @param limit new text limit
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_CANNOT_BE_ZERO - if the limit is zero</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #LIMIT
+ */
+public void setTextLimit (int limit) {
+	checkWidget ();
+	if (limit == 0) error (SWT.ERROR_CANNOT_BE_ZERO);
+	textLimit = limit;
+}
+
+/**
+ * Sets the zero-relative index of the line which is currently
+ * at the top of the receiver. This index can change when lines
+ * are scrolled or new lines are added and removed.
+ *
+ * @param index the index of the top item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setTopIndex (int index) {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) return;
+	int row = Math.max(0, Math.min(index, getLineCount() - 1));
+	NSPoint pt = new NSPoint();
+	pt.x = scrollView.contentView().bounds().x;
+	pt.y = getLineHeight() * row;
+	view.scrollPoint(pt);
+}
+
+boolean shouldChangeTextInRange_replacementString(int /*long*/ id, int /*long*/ sel, int /*long*/ affectedCharRange, int /*long*/ replacementString) {
+	NSRange range = new NSRange();
+	OS.memmove(range, affectedCharRange, NSRange.sizeof);
+	boolean result = callSuperBoolean(id, sel, range, replacementString);
+	if (!hooks(SWT.Verify) && echoCharacter =='\0') return result;
+	String text = new NSString(replacementString).getString();
+	String newText = text;
+	if (hooks (SWT.Verify)) {
+		NSEvent currentEvent = display.application.currentEvent();
+		int /*long*/ type = currentEvent.type();
+		if (type != OS.NSKeyDown && type != OS.NSKeyUp) currentEvent = null;
+		newText = verifyText(text, (int)/*64*/range.location, (int)/*64*/(range.location+range.length),  currentEvent);
+	}
+	if (newText == null) return false;
+	if ((style & SWT.SINGLE) != 0) {
+		if (text != newText || echoCharacter != '\0') {
+			 //handle backspace and delete
+			if (range.length == 1) {
+				NSText editor = new NSText(id);
+				editor.setSelectedRange (range);
+			}
+			insertEditText(newText);
+			result = false;
+		}
+	} else {
+		if (text != newText) {
+			NSTextView widget = (NSTextView) view;
+			Point selection = getSelection();
+			NSRange selRange = new NSRange();
+			selRange.location = selection.x;
+			selRange.length = selection.x + selection.y;
+			widget.textStorage ().replaceCharactersInRange (selRange, NSString.stringWith(newText));
+			result = false;
+		}
+	}
+	if (!result) sendEvent (SWT.Modify);
+	return result;
+}
+
+/**
+ * Shows the selection.
+ * <p>
+ * If the selection is already showing
+ * in the receiver, this method simply returns.  Otherwise,
+ * lines are scrolled until the selection is visible.
+ * </p>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void showSelection () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0)  {
+		setSelection (getSelection ());
+	} else {
+		NSTextView widget = (NSTextView) view;
+		widget.scrollRangeToVisible (widget.selectedRange ());
+	}
+}
+
+void textViewDidChangeSelection(int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
+	NSNotification notification = new NSNotification (aNotification);
+	NSText editor = new NSText (notification.object ().id);
+	selectionRange = editor.selectedRange ();
+}
+
+void textDidChange (int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
+	if ((style & SWT.SINGLE) != 0) super.textDidChange (id, sel, aNotification);
+	postEvent (SWT.Modify);
+}
+
+NSRange textView_willChangeSelectionFromCharacterRange_toCharacterRange (int /*long*/ id, int /*long*/ sel, int /*long*/ aTextView, int /*long*/ oldSelectedCharRange, int /*long*/ newSelectedCharRange) {
+	/*
+	* If the selection is changing as a result of the receiver getting focus
+	* then return the receiver's last selection range, otherwise the full
+	* text will be automatically selected.
+	*/
+	if (receivingFocus && selectionRange != null) return selectionRange;
+
+	/* allow the selection change to proceed */
+	NSRange result = new NSRange ();
+	OS.memmove(result, newSelectedCharRange, NSRange.sizeof);
+	return result;
+}
+
+int traversalCode (int key, NSEvent theEvent) {
+	int bits = super.traversalCode (key, theEvent);
+	if ((style & SWT.READ_ONLY) != 0) return bits;
+	if ((style & SWT.MULTI) != 0) {
+		bits &= ~SWT.TRAVERSE_RETURN;
+		if (key == 48 /* Tab */ && theEvent != null) {
+			int /*long*/ modifiers = theEvent.modifierFlags ();
+			boolean next = (modifiers & OS.NSShiftKeyMask) == 0;
+			if (next && (modifiers & OS.NSControlKeyMask) == 0) {
+				bits &= ~(SWT.TRAVERSE_TAB_NEXT | SWT.TRAVERSE_TAB_PREVIOUS);
+			}
+		}
+	}
+	return bits;
+}
+
+void updateCursorRects (boolean enabled) {
+	super.updateCursorRects (enabled);
+	if (scrollView == null) return;
+	NSClipView contentView = scrollView.contentView ();
+	contentView.setDocumentCursor (enabled ? NSCursor.IBeamCursor () : null);
+}
+
+String verifyText (String string, int start, int end, NSEvent keyEvent) {
+	Event event = new Event ();
+	if (keyEvent != null) setKeyState(event, SWT.MouseDown, keyEvent);
+	event.text = string;
+	event.start = start;
+	event.end = end;
+	/*
+	 * It is possible (but unlikely), that application
+	 * code could have disposed the widget in the verify
+	 * event.  If this happens, answer null to cancel
+	 * the operation.
+	 */
+	sendEvent (SWT.Verify, event);
+	if (!event.doit || isDisposed ()) return null;
+	return event.text;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ToolBar.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ToolBar.java
new file mode 100755
index 0000000..77d70b7
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ToolBar.java
@@ -0,0 +1,536 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+ 
+import org.eclipse.swt.internal.cocoa.*;
+ 
+import org.eclipse.swt.*;
+import org.eclipse.swt.accessibility.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class support the layout of selectable
+ * tool bar items.
+ * <p>
+ * The item children that may be added to instances of this class
+ * must be of type <code>ToolItem</code>.
+ * </p><p>
+ * Note that although this class is a subclass of <code>Composite</code>,
+ * it does not make sense to add <code>Control</code> children to it,
+ * or set a layout on it.
+ * </p><p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>FLAT, WRAP, RIGHT, HORIZONTAL, VERTICAL, SHADOW_OUT</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#toolbar">ToolBar, ToolItem snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class ToolBar extends Composite {
+	int itemCount;
+	ToolItem [] items;
+	NSArray accessibilityAttributes = null;
+	
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#FLAT
+ * @see SWT#WRAP
+ * @see SWT#RIGHT
+ * @see SWT#HORIZONTAL
+ * @see SWT#SHADOW_OUT
+ * @see SWT#VERTICAL
+ * @see Widget#checkSubclass()
+ * @see Widget#getStyle()
+ */
+public ToolBar (Composite parent, int style) {
+	super (parent, checkStyle (style));
+	
+	/*
+	* Ensure that either of HORIZONTAL or VERTICAL is set.
+	* NOTE: HORIZONTAL and VERTICAL have the same values
+	* as H_SCROLL and V_SCROLL so it is necessary to first
+	* clear these bits to avoid scroll bars and then reset
+	* the bits using the original style supplied by the
+	* programmer.
+	*/
+	if ((style & SWT.VERTICAL) != 0) {
+		this.style |= SWT.VERTICAL;
+	} else {
+		this.style |= SWT.HORIZONTAL;
+	}
+}
+
+int /*long*/ accessibilityAttributeNames(int /*long*/ id, int /*long*/ sel) {
+	
+	if (accessibilityAttributes == null) {
+		NSMutableArray ourAttributes = NSMutableArray.arrayWithCapacity(10);
+		ourAttributes.addObject(OS.NSAccessibilityRoleAttribute);
+		ourAttributes.addObject(OS.NSAccessibilityRoleDescriptionAttribute);
+		ourAttributes.addObject(OS.NSAccessibilityParentAttribute);
+		ourAttributes.addObject(OS.NSAccessibilityPositionAttribute);
+		ourAttributes.addObject(OS.NSAccessibilitySizeAttribute);
+		ourAttributes.addObject(OS.NSAccessibilityWindowAttribute);
+		ourAttributes.addObject(OS.NSAccessibilityTopLevelUIElementAttribute);
+		ourAttributes.addObject(OS.NSAccessibilityHelpAttribute);
+		ourAttributes.addObject(OS.NSAccessibilityEnabledAttribute);
+		ourAttributes.addObject(OS.NSAccessibilityFocusedAttribute);
+		ourAttributes.addObject(OS.NSAccessibilityChildrenAttribute);
+
+		if (accessible != null) {
+			// See if the accessible will override or augment the standard list.
+			// Help, title, and description can be overridden.
+			NSMutableArray extraAttributes = NSMutableArray.arrayWithCapacity(3);
+			extraAttributes.addObject(OS.NSAccessibilityHelpAttribute);
+			extraAttributes.addObject(OS.NSAccessibilityDescriptionAttribute);
+			extraAttributes.addObject(OS.NSAccessibilityTitleAttribute);
+
+			for (int i = (int)/*64*/extraAttributes.count() - 1; i >= 0; i--) {
+				NSString attribute = new NSString(extraAttributes.objectAtIndex(i).id);
+				if (accessible.internal_accessibilityAttributeValue(attribute, ACC.CHILDID_SELF) != null) {
+					ourAttributes.addObject(extraAttributes.objectAtIndex(i));
+				}
+			}
+		}
+		
+		accessibilityAttributes = ourAttributes;
+		accessibilityAttributes.retain();
+	}
+	
+	return accessibilityAttributes.id;
+}
+
+int /*long*/ accessibilityAttributeValue (int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	NSString nsAttributeName = new NSString(arg0);
+	
+	if (accessible != null) {
+		id returnObject = accessible.internal_accessibilityAttributeValue(nsAttributeName, ACC.CHILDID_SELF);
+		if (returnObject != null) return returnObject.id;
+	}
+	
+	if (nsAttributeName.isEqualToString (OS.NSAccessibilityRoleAttribute) || nsAttributeName.isEqualToString (OS.NSAccessibilityRoleDescriptionAttribute)) {
+		NSString role = OS.NSAccessibilityToolbarRole;
+
+		if (nsAttributeName.isEqualToString (OS.NSAccessibilityRoleAttribute))
+			return role.id;
+		else {
+			int /*long*/ roleDescription = OS.NSAccessibilityRoleDescription(role.id, 0);
+			return roleDescription;
+		}
+	} else if (nsAttributeName.isEqualToString(OS.NSAccessibilityEnabledAttribute)) {
+		return NSNumber.numberWithBool(isEnabled()).id;
+	} else if (nsAttributeName.isEqualToString(OS.NSAccessibilityFocusedAttribute)) {
+		boolean focused = (view.id == view.window().firstResponder().id);
+		return NSNumber.numberWithBool(focused).id;
+	}
+	
+	return super.accessibilityAttributeValue(id, sel, arg0);
+}
+
+boolean accessibilityIsIgnored(int /*long*/ id, int /*long*/ sel) {
+	// Toolbars aren't ignored.
+	return false;	
+}
+
+static int checkStyle (int style) {
+	/*
+	* Even though it is legal to create this widget
+	* with scroll bars, they serve no useful purpose
+	* because they do not automatically scroll the
+	* widget's client area.  The fix is to clear
+	* the SWT style.
+	*/
+	return style & ~(SWT.H_SCROLL | SWT.V_SCROLL);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget();
+	int width = wHint, height = hHint;
+	if (wHint == SWT.DEFAULT) width = 0x7FFFFFFF;
+	if (hHint == SWT.DEFAULT) height = 0x7FFFFFFF;
+	int [] result = layout (width, height, false);
+	Point extent = new Point (result [1], result [2]);
+	if (wHint != SWT.DEFAULT) extent.x = wHint;
+	if (hHint != SWT.DEFAULT) extent.y = hHint;
+	return extent;
+}
+
+void createHandle () {
+	state |= THEME_BACKGROUND;
+	NSView widget = (NSView)new SWTView().alloc();
+	widget.init();
+//	widget.setDrawsBackground(false);
+	view = widget;
+}
+
+void createItem (ToolItem item, int index) {
+	if (!(0 <= index && index <= itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	if (itemCount == items.length) {
+		ToolItem [] newItems = new ToolItem [itemCount + 4];
+		System.arraycopy (items, 0, newItems, 0, items.length);
+		items = newItems;
+	}
+	item.createWidget();
+	view.addSubview(item.view);
+	System.arraycopy (items, index, items, index + 1, itemCount++ - index);
+	items [index] = item;
+	relayout ();
+}
+
+void createWidget () {
+	super.createWidget ();
+	items = new ToolItem [4];
+	itemCount = 0;
+}
+
+void destroyItem (ToolItem item) {
+	int index = 0;
+	while (index < itemCount) {
+		if (items [index] == item) break;
+		index++;
+	}
+	if (index == itemCount) return;
+	System.arraycopy (items, index + 1, items, index, --itemCount - index);
+	items [itemCount] = null;
+	item.view.removeFromSuperview();
+	relayout ();
+}
+
+void drawBackground (int /*long*/ id, NSGraphicsContext context, NSRect rect) {
+	if (id != view.id) return;
+	if (background != null) {
+		fillBackground (view, context, rect, -1);
+	}
+}
+
+void enableWidget(boolean enabled) {
+	super.enableWidget(enabled);
+	for (int i = 0; i < itemCount; i++) {
+		ToolItem item = items[i];
+		if (item != null) {
+			item.enableWidget(enabled);
+		}
+	}
+}
+
+Widget findTooltip (NSPoint pt) {
+	pt = view.convertPoint_fromView_ (pt, null);
+	for (int i = 0; i < itemCount; i++) {
+		ToolItem item = items [i];
+		if (OS.NSPointInRect(pt, item.view.frame())) return item;
+	}
+	return super.findTooltip (pt);
+}
+
+/**
+ * Returns the item at the given, zero-relative index in the
+ * receiver. Throws an exception if the index is out of range.
+ *
+ * @param index the index of the item to return
+ * @return the item at the given index
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public ToolItem getItem (int index) {
+	checkWidget();
+	if (0 <= index && index < itemCount) return items [index];
+	error (SWT.ERROR_INVALID_RANGE);
+	return null;
+}
+
+/**
+ * Returns the item at the given point in the receiver
+ * or null if no such item exists. The point is in the
+ * coordinate system of the receiver.
+ *
+ * @param point the point used to locate the item
+ * @return the item at the given point
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public ToolItem getItem (Point pt) {
+	checkWidget();
+	if (pt == null) error (SWT.ERROR_NULL_ARGUMENT);
+	for (int i=0; i<itemCount; i++) {
+		Rectangle rect = items [i].getBounds ();
+		if (rect.contains (pt)) return items [i];
+	}
+	return null;
+}
+
+/**
+ * Returns the number of items contained in the receiver.
+ *
+ * @return the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemCount () {
+	checkWidget();
+	return itemCount;
+}
+
+/**
+ * Returns an array of <code>ToolItem</code>s which are the items
+ * in the receiver. 
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the items in the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public ToolItem [] getItems () {
+	checkWidget();
+	ToolItem [] result = new ToolItem [itemCount];
+	System.arraycopy (items, 0, result, 0, itemCount);
+	return result;
+}
+
+/**
+ * Returns the number of rows in the receiver. When
+ * the receiver has the <code>WRAP</code> style, the
+ * number of rows can be greater than one.  Otherwise,
+ * the number of rows is always one.
+ *
+ * @return the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getRowCount () {
+	checkWidget();
+	Rectangle rect = getClientArea ();
+	return layout (rect.width, rect.height, false) [0];
+}
+
+/**
+ * Searches the receiver's list starting at the first item
+ * (index 0) until an item is found that is equal to the 
+ * argument, and returns the index of that item. If no item
+ * is found, returns -1.
+ *
+ * @param item the search item
+ * @return the index of the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the tool item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the tool item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int indexOf (ToolItem item) {
+	checkWidget();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (item.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
+	for (int i=0; i<itemCount; i++) {
+		if (items [i] == item) return i;
+	}
+	return -1;
+}
+
+int [] layoutHorizontal (int width, int height, boolean resize) {
+	int xSpacing = 0, ySpacing = 2;
+	int marginWidth = 0, marginHeight = 0;
+	int x = marginWidth, y = marginHeight;
+	int maxX = 0, rows = 1;
+	boolean wrap = (style & SWT.WRAP) != 0;
+	int itemHeight = 0;
+	Point [] sizes = new Point [itemCount];
+	for (int i=0; i<itemCount; i++) {
+		Point size = sizes [i] = items [i].computeSize ();
+		itemHeight = Math.max (itemHeight, size.y);
+	}
+	for (int i=0; i<itemCount; i++) {
+		ToolItem item = items [i];
+		Point size = sizes [i];
+		if (wrap && i != 0 && x + size.x > width) {
+			rows++;
+			x = marginWidth;
+			y += ySpacing + itemHeight;
+		}
+		if (resize) {
+			item.setBounds (x, y, size.x, itemHeight);
+			boolean visible = x + size.x <= width && y + itemHeight <= height;
+			item.setVisible (visible);
+			Control control = item.control;
+			if (control != null) {
+				int controlY = y + (itemHeight - size.y) / 2;
+				control.setBounds (x, controlY, size.x, itemHeight - (controlY - y));
+			}
+		}
+		x += xSpacing + size.x;
+		maxX = Math.max (maxX, x);
+	}
+	
+	return new int [] {rows, maxX, y + itemHeight};
+}
+
+int [] layoutVertical (int width, int height, boolean resize) {
+	int xSpacing = 2, ySpacing = 0;
+	int marginWidth = 0, marginHeight = 0;
+	int x = marginWidth, y = marginHeight;
+	int maxY = 0, cols = 1;
+	boolean wrap = (style & SWT.WRAP) != 0;
+	int itemWidth = 0;
+	Point [] sizes = new Point [itemCount];
+	for (int i=0; i<itemCount; i++) {
+		Point size = sizes [i] = items [i].computeSize ();
+		itemWidth = Math.max (itemWidth, size.x);
+	}
+	for (int i=0; i<itemCount; i++) {
+		ToolItem item = items [i];
+		Point size = sizes [i];
+		if (wrap && i != 0 && y + size.y > height) {
+			cols++;
+			x += xSpacing + itemWidth;
+			y = marginHeight;
+		}
+		if (resize) {
+			item.setBounds (x, y, itemWidth, size.y);
+			boolean visible = x + itemWidth <= width && y + size.y <= height;
+			item.setVisible (visible);
+			Control control = item.control;
+			if (control != null) {
+				int controlX = x + (itemWidth - size.x) / 2;
+				control.setBounds (controlX, y, itemWidth - (controlX - x), size.y);
+			}
+		}
+		y += ySpacing + size.y;
+		maxY = Math.max (maxY, y);
+	}
+	
+	return new int [] {cols, x + itemWidth, maxY};
+}
+
+int [] layout (int nWidth, int nHeight, boolean resize) {
+	if ((style & SWT.VERTICAL) != 0) {
+		return layoutVertical (nWidth, nHeight, resize);
+	} else {
+		return layoutHorizontal (nWidth, nHeight, resize);
+	}
+}
+
+void relayout () {
+	if (!getDrawing()) return;
+	Rectangle rect = getClientArea ();
+	layout (rect.width, rect.height, true);
+}
+
+void releaseChildren (boolean destroy) {
+	if (items != null) {
+		for (int i=0; i<itemCount; i++) {
+			ToolItem item = items [i];
+			if (item != null && !item.isDisposed ()) {
+				item.release (false);
+			}
+		}
+		itemCount = 0;
+		items = null;
+	}
+	super.releaseChildren (destroy);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (accessibilityAttributes != null) accessibilityAttributes.release();
+	accessibilityAttributes = null;
+}
+
+void removeControl (Control control) {
+	super.removeControl (control);
+	for (int i=0; i<itemCount; i++) {
+		ToolItem item = items [i];
+		if (item.control == control) item.setControl (null);
+	}
+}
+
+void resized () {
+	super.resized ();
+	relayout ();
+}
+
+void setFont(NSFont font) {
+	for (int i = 0; i < itemCount; i++) {
+		ToolItem item = items[i];
+		if (item.button != null) ((NSButton)item.button).setAttributedTitle(item.createString());
+	}
+}
+
+public void setRedraw (boolean redraw) {
+	checkWidget();
+	super.setRedraw (redraw);
+	if (redraw && drawCount == 0) relayout();
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ToolItem.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ToolItem.java
new file mode 100755
index 0000000..21853d5
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/ToolItem.java
@@ -0,0 +1,992 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class represent a selectable user interface object
+ * that represents a button in a tool bar.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>PUSH, CHECK, RADIO, SEPARATOR, DROP_DOWN</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles CHECK, PUSH, RADIO, SEPARATOR and DROP_DOWN 
+ * may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#toolbar">ToolBar, ToolItem snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class ToolItem extends Item {
+	NSView view;
+	NSButton button;
+	int width = DEFAULT_SEPARATOR_WIDTH;
+	ToolBar parent;
+	Image hotImage, disabledImage;
+	String toolTipText;
+	Control control;
+	boolean selection;
+
+	static final int DEFAULT_WIDTH = 24;
+	static final int DEFAULT_HEIGHT = 22;
+	static final int DEFAULT_SEPARATOR_WIDTH = 6;
+	static final int INSET = 3;
+	static final int ARROW_WIDTH = 5;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>ToolBar</code>) and a style value
+ * describing its behavior and appearance. The item is added
+ * to the end of the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#PUSH
+ * @see SWT#CHECK
+ * @see SWT#RADIO
+ * @see SWT#SEPARATOR
+ * @see SWT#DROP_DOWN
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public ToolItem (ToolBar parent, int style) {
+	super (parent, checkStyle (style));
+	this.parent = parent;
+	parent.createItem (this, parent.getItemCount ());
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>ToolBar</code>), a style value
+ * describing its behavior and appearance, and the index
+ * at which to place it in the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ * @param index the zero-relative index to store the receiver in its parent
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the parent (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#PUSH
+ * @see SWT#CHECK
+ * @see SWT#RADIO
+ * @see SWT#SEPARATOR
+ * @see SWT#DROP_DOWN
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public ToolItem (ToolBar parent, int style, int index) {
+	super (parent, checkStyle (style));
+	this.parent = parent;
+	parent.createItem (this, index);
+}
+
+int /*long*/ accessibilityAttributeValue(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	NSString nsAttributeName = new NSString(arg0);
+
+	if (nsAttributeName.isEqualToString (OS.NSAccessibilityRoleAttribute) || nsAttributeName.isEqualToString (OS.NSAccessibilityRoleDescriptionAttribute)) {
+		NSString roleText = ((style & SWT.PUSH) != 0) ? OS.NSAccessibilityButtonRole
+				: ((style & SWT.RADIO) != 0) ? OS.NSAccessibilityRadioButtonRole
+				: ((style & SWT.CHECK) != 0) ? OS.NSAccessibilityCheckBoxRole
+				: ((style & SWT.DROP_DOWN) != 0) ? OS.NSAccessibilityMenuButtonRole
+				: null; // SEPARATOR
+		if (roleText != null) {
+			if (nsAttributeName.isEqualToString (OS.NSAccessibilityRoleAttribute)) {
+				return roleText.id;
+			} else { // NSAccessibilityRoleDescriptionAttribute
+				int /*long*/ description = OS.NSAccessibilityRoleDescription (roleText.id, 0);
+				return description;
+			}
+		}
+	} else if (nsAttributeName.isEqualToString (OS.NSAccessibilityTitleAttribute) || nsAttributeName.isEqualToString (OS.NSAccessibilityDescriptionAttribute)) {
+		String accessibleText = toolTipText;
+		if (accessibleText == null || accessibleText.equals("")) accessibleText = text;
+		if (!(accessibleText == null || accessibleText.equals(""))) {
+			return NSString.stringWith(accessibleText).id;
+		} else {
+			return NSString.stringWith("").id;
+		}
+	} else if (nsAttributeName.isEqualToString (OS.NSAccessibilityValueAttribute) && (style & (SWT.CHECK | SWT.RADIO)) != 0) {
+		NSNumber value = NSNumber.numberWithInt(selection ? 1 : 0);
+		return value.id;
+	} else if (nsAttributeName.isEqualToString(OS.NSAccessibilityEnabledAttribute)) {
+		NSNumber value = NSNumber.numberWithInt(getEnabled() ? 1 : 0);
+		return value.id;
+	}
+
+	return super.accessibilityAttributeValue(id, sel, arg0);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * When <code>widgetSelected</code> is called when the mouse is over the arrow portion of a drop-down tool,
+ * the event object detail field contains the value <code>SWT.ARROW</code>.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the control is selected by the user,
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener(SelectionListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener(listener);
+	addListener(SWT.Selection,typedListener);
+	addListener(SWT.DefaultSelection,typedListener);
+}
+
+static int checkStyle (int style) {
+	return checkBits (style, SWT.PUSH, SWT.CHECK, SWT.RADIO, SWT.SEPARATOR, SWT.DROP_DOWN, 0);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+Point computeSize () {
+	checkWidget();
+	int width = 0, height = 0;
+	if ((style & SWT.SEPARATOR) != 0) {
+		if ((parent.style & SWT.HORIZONTAL) != 0) {
+			width = getWidth ();
+			height = DEFAULT_HEIGHT;
+		} else {
+			width = DEFAULT_WIDTH;
+			height = getWidth ();
+		}
+		if (control != null) {
+			height = Math.max (height, control.getMininumHeight ());
+		}
+	} else {
+		if (text.length () != 0 || image != null) {
+			NSButton widget = (NSButton)button;
+			NSSize size = widget.cell().cellSize();
+			width = (int)Math.ceil(size.width);
+			height = (int)Math.ceil(size.height);
+		} else {
+			width = DEFAULT_WIDTH;
+			height = DEFAULT_HEIGHT;
+		}
+		if ((style & SWT.DROP_DOWN) != 0) {
+			width += ARROW_WIDTH + INSET;
+		}
+		width += INSET * 2;
+		height += INSET * 2;
+	}
+	return new Point (width, height);
+}
+
+void createHandle () {
+	if ((style & SWT.SEPARATOR) != 0) {
+		NSBox widget = (NSBox)new SWTBox().alloc();
+		widget.init();
+		widget.setBoxType(OS.NSBoxSeparator);
+		widget.setBorderWidth(0);
+		view = widget;
+	} else {
+		NSView widget = (NSView)new SWTView().alloc();
+		widget.init();
+		button = (NSButton)new SWTButton().alloc();
+		button.init();
+		/*
+		* Feature in Cocoa.  NSButtons without borders do not leave any margin
+		* between their edge and their image.  The workaround is to provide a
+		* custom cell that displays the image in a better position. 
+		*/
+		NSButtonCell cell = (NSButtonCell)new SWTButtonCell ().alloc ().init ();
+		button.setCell (cell);
+		cell.release();
+		button.setBordered(false);
+		button.setAction(OS.sel_sendSelection);
+		button.setTarget(button);
+		Font font = parent.font != null ? parent.font : parent.defaultFont ();
+		button.setFont(font.handle);
+		button.setImagePosition(OS.NSImageOverlaps);
+		NSString emptyStr = NSString.stringWith("");
+		button.setTitle(emptyStr);
+		button.setEnabled(parent.getEnabled());
+		widget.addSubview(button);
+		view = widget;
+	}
+}
+
+NSAttributedString createString() {
+	NSAttributedString attribStr = parent.createString(text, null, parent.foreground, SWT.CENTER, true, true);
+	attribStr.autorelease();
+	return attribStr;
+}
+
+void deregister () {
+	super.deregister ();
+	display.removeWidget(view);
+	
+	if (button != null) {
+		display.removeWidget (button);
+		display.removeWidget (button.cell());
+	}
+}
+
+void destroyWidget() {
+	parent.destroyItem(this);
+	super.destroyWidget();
+}
+
+void drawImageWithFrameInView (int /*long*/ id, int /*long*/ sel, int /*long*/ image, NSRect rect, int /*long*/ view) {
+	if (text.length () > 0) {
+		if ((parent.style & SWT.RIGHT) != 0) {
+			rect.x += 3;
+		} else {
+			rect.y += 3;			
+		}
+	}
+	callSuper (id, sel, image, rect, view);
+}
+
+void drawWidget (int /*long*/ id, NSGraphicsContext context, NSRect rect) {
+	if (id == view.id) {
+		if (getSelection ()) {
+			NSRect bounds = view.bounds();
+			context.saveGraphicsState();
+			NSColor.colorWithDeviceRed(0.1f, 0.1f, 0.1f, 0.1f).setFill();
+			NSColor.colorWithDeviceRed(0.2f, 0.2f, 0.2f, 0.2f).setStroke();
+			NSBezierPath.fillRect(bounds);
+			bounds.x += 0.5f;
+			bounds.y += 0.5f;
+			bounds.width -= 1;
+			bounds.height -= 1;
+			NSBezierPath.strokeRect(bounds);
+			context.restoreGraphicsState();
+		}
+		if ((style & SWT.DROP_DOWN) != 0) {
+			NSRect bounds = view.bounds();
+			context.saveGraphicsState();
+			NSBezierPath path = NSBezierPath.bezierPath();
+			NSPoint pt = new NSPoint();
+			path.moveToPoint(pt);
+			pt.x += ARROW_WIDTH;
+			path.lineToPoint(pt);
+			pt.y += ARROW_WIDTH - 1;
+			pt.x -= ARROW_WIDTH / 2f;
+			path.lineToPoint(pt);
+			path.closePath();
+			NSAffineTransform transform = NSAffineTransform.transform();
+			transform.translateXBy((int)bounds.width - ARROW_WIDTH - INSET, (int)(bounds.height - ARROW_WIDTH / 2) / 2);
+			transform.concat();
+			NSColor color = isEnabled() ? NSColor.blackColor() : NSColor.disabledControlTextColor();
+			color.set();
+			path.fill();
+			context.restoreGraphicsState();
+		}
+	}
+}
+
+void enableWidget(boolean enabled) {
+	if ((style & SWT.SEPARATOR) == 0) {
+		((NSButton)button).setEnabled(enabled);
+	}
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location
+ * relative to its parent.
+ *
+ * @return the receiver's bounding rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Rectangle getBounds () {
+	checkWidget();
+	NSRect rect = view.frame();
+	return new Rectangle((int)rect.x, (int)rect.y, (int)rect.width, (int)rect.height);
+}
+
+void setClipRegion (float /*double*/ x, float /*double*/ y) {
+	NSRect frame = view.frame();
+	parent.setClipRegion(frame.x + x, frame.y + y);
+}
+
+/**
+ * Returns the control that is used to fill the bounds of
+ * the item when the item is a <code>SEPARATOR</code>.
+ *
+ * @return the control
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Control getControl () {
+	checkWidget();
+	return control;
+}
+
+/**
+ * Returns the receiver's disabled image if it has one, or null
+ * if it does not.
+ * <p>
+ * The disabled image is displayed when the receiver is disabled.
+ * </p>
+ *
+ * @return the receiver's disabled image
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Image getDisabledImage () {
+	checkWidget();
+	return disabledImage;
+}
+
+boolean getDrawing () {
+	return parent.getDrawing ();
+}
+
+/**
+ * Returns <code>true</code> if the receiver is enabled, and
+ * <code>false</code> otherwise. A disabled control is typically
+ * not selectable from the user interface and draws with an
+ * inactive or "grayed" look.
+ *
+ * @return the receiver's enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #isEnabled
+ */
+public boolean getEnabled () {
+	checkWidget();
+	return (state & DISABLED) == 0;
+}
+
+/**
+ * Returns the receiver's hot image if it has one, or null
+ * if it does not.
+ * <p>
+ * The hot image is displayed when the mouse enters the receiver.
+ * </p>
+ *
+ * @return the receiver's hot image
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Image getHotImage () {
+	checkWidget();
+	return hotImage;
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>ToolBar</code>.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public ToolBar getParent () {
+	checkWidget();
+	return parent;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is selected,
+ * and false otherwise.
+ * <p>
+ * When the receiver is of type <code>CHECK</code> or <code>RADIO</code>,
+ * it is selected when it is checked (which some platforms draw as a
+ * pushed in button). If the receiver is of any other type, this method
+ * returns false.
+ * </p>
+ *
+ * @return the selection state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getSelection () {
+	checkWidget();
+	if ((style & (SWT.CHECK | SWT.RADIO)) == 0) return false;
+	return selection;
+}
+
+/**
+ * Returns the receiver's tool tip text, or null if it has not been set.
+ *
+ * @return the receiver's tool tip text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getToolTipText () {
+	checkWidget();
+	return toolTipText;
+}
+
+/**
+ * Gets the width of the receiver.
+ *
+ * @return the width
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getWidth () {
+	checkWidget();
+	return width;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is enabled and all
+ * of the receiver's ancestors are enabled, and <code>false</code>
+ * otherwise. A disabled control is typically not selectable from the
+ * user interface and draws with an inactive or "grayed" look.
+ *
+ * @return the receiver's enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #getEnabled
+ */
+public boolean isEnabled () {
+	checkWidget();
+	return getEnabled () && parent.isEnabled ();
+}
+
+boolean isDrawing () {
+	return getDrawing() && parent.isDrawing ();
+}
+
+int /*long*/ menuForEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	return parent.menuForEvent (id, sel, theEvent);
+}
+
+void mouseDown(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (!parent.mouseEvent(parent.view.id, sel, theEvent, SWT.MouseDown)) return;
+	Display display = this.display;
+	display.trackingControl = parent;
+	super.mouseDown(id, sel, theEvent);
+	display.trackingControl = null;
+	if ((style & SWT.DROP_DOWN) != 0 && id == view.id) {
+		NSRect frame = view.frame();
+		Event event = new Event ();
+		event.detail = SWT.ARROW;
+		event.x = (int)frame.x;
+		event.y = (int)(frame.y + frame.height);
+		postEvent (SWT.Selection, event);
+	}
+}
+
+void mouseUp(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (!parent.mouseEvent(parent.view.id, sel, theEvent, SWT.MouseUp)) return;
+	super.mouseUp(id, sel, theEvent);
+}
+
+void mouseDragged(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (!parent.mouseEvent(parent.view.id, sel, theEvent, SWT.MouseMove)) return;
+	super.mouseDragged(id, sel, theEvent);
+}
+
+void rightMouseDown(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (!parent.mouseEvent(parent.view.id, sel, theEvent, SWT.MouseDown)) return;
+	super.rightMouseDown(id, sel, theEvent);
+}
+
+void rightMouseUp(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (!parent.mouseEvent(parent.view.id, sel, theEvent, SWT.MouseUp)) return;
+	super.rightMouseUp(id, sel, theEvent);
+}
+
+void rightMouseDragged(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (!parent.mouseEvent(parent.view.id, sel, theEvent, SWT.MouseMove)) return;
+	super.rightMouseDragged(id, sel, theEvent);
+}
+
+void otherMouseDown(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (!parent.mouseEvent(parent.view.id, sel, theEvent, SWT.MouseDown)) return;
+	super.otherMouseDown(id, sel, theEvent);
+}
+
+void otherMouseUp(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (!parent.mouseEvent(parent.view.id, sel, theEvent, SWT.MouseUp)) return;
+	super.otherMouseUp(id, sel, theEvent);
+}
+
+void otherMouseDragged(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (!parent.mouseEvent(parent.view.id, sel, theEvent, SWT.MouseMove)) return;
+	super.otherMouseDragged(id, sel, theEvent);
+}
+
+void register () {
+	super.register ();
+	display.addWidget (view, this);
+	
+	if (button != null) {
+		display.addWidget (button, this);
+		display.addWidget (button.cell(), this);
+	}
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener(SelectionListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook(SWT.Selection, listener);
+	eventTable.unhook(SWT.DefaultSelection,listener);	
+}
+
+void releaseParent () {
+	super.releaseParent ();
+	setVisible (false);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (view != null) view.release ();
+	if (button != null) button.release ();
+	view = button = null;
+	parent = null;
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	control = null;
+	toolTipText = null;
+	image = disabledImage = hotImage = null; 
+}
+
+void selectRadio () {
+	int index = 0;
+	ToolItem [] items = parent.getItems ();
+	while (index < items.length && items [index] != this) index++;
+	int i = index - 1;
+	while (i >= 0 && items [i].setRadioSelection (false)) --i;
+	int j = index + 1;
+	while (j < items.length && items [j].setRadioSelection (false)) j++;
+	setSelection (true);
+}
+
+void sendSelection () {
+	if ((style & SWT.RADIO) != 0) {
+		if ((parent.getStyle () & SWT.NO_RADIO_GROUP) == 0) {
+			selectRadio ();
+		}
+	}
+	if ((style & SWT.CHECK) != 0) setSelection (!getSelection ());
+	postEvent (SWT.Selection);
+}
+
+void setBounds (int x, int y, int width, int height) {
+	NSRect rect = new NSRect();
+	rect.x = x;
+	rect.y = y;
+	rect.width = width;
+	rect.height = height;
+	view.setFrame(rect);
+	if (button != null) {
+		rect.x = 0;
+		rect.y = 0;
+		rect.width = width;
+		rect.height = height;
+		if ((style & SWT.DROP_DOWN) != 0) rect.width -= ARROW_WIDTH + INSET;
+		button.setFrame(rect);
+	}
+}
+
+/**
+ * Sets the control that is used to fill the bounds of
+ * the item when the item is a <code>SEPARATOR</code>.
+ *
+ * @param control the new control
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the control has been disposed</li> 
+ *    <li>ERROR_INVALID_PARENT - if the control is not in the same widget tree</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setControl (Control control) {
+	checkWidget();
+	if (control != null) {
+		if (control.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT);
+		if (control.parent != parent) error (SWT.ERROR_INVALID_PARENT);
+	}
+	if ((style & SWT.SEPARATOR) == 0) return;
+	if (this.control == control) return;
+	NSBox widget = (NSBox)view;
+	if (control == null) {
+		widget.setBoxType(OS.NSBoxSeparator);
+	} else {
+		widget.setBoxType(OS.NSBoxCustom);
+	}
+	this.control = control;
+	view.setHidden(control != null);
+	if (control != null && !control.isDisposed ()) {
+		control.moveAbove (null);
+	}
+	parent.relayout ();
+}
+
+/**
+ * Enables the receiver if the argument is <code>true</code>,
+ * and disables it otherwise.
+ * <p>
+ * A disabled control is typically
+ * not selectable from the user interface and draws with an
+ * inactive or "grayed" look.
+ * </p>
+ *
+ * @param enabled the new enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setEnabled (boolean enabled) {
+	checkWidget();
+	if ((state & DISABLED) == 0 && enabled) return;
+	if (enabled) {
+		state &= ~DISABLED;		
+	} else {
+		state |= DISABLED;
+	}
+	enableWidget(enabled);
+}
+
+/**
+ * Sets the receiver's disabled image to the argument, which may be
+ * null indicating that no disabled image should be displayed.
+ * <p>
+ * The disabled image is displayed when the receiver is disabled.
+ * </p>
+ *
+ * @param image the disabled image to display on the receiver (may be null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setDisabledImage (Image image) {
+	checkWidget();
+	if (image != null && image.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
+	if ((style & SWT.SEPARATOR) != 0) return;
+	disabledImage = image;
+	updateImage (true);
+}
+
+/**
+ * Sets the receiver's hot image to the argument, which may be
+ * null indicating that no hot image should be displayed.
+ * <p>
+ * The hot image is displayed when the mouse enters the receiver.
+ * </p>
+ *
+ * @param image the hot image to display on the receiver (may be null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setHotImage (Image image) {
+	checkWidget();
+	if (image != null && image.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
+	if ((style & SWT.SEPARATOR) != 0) return;
+	hotImage = image;
+	updateImage (true);
+}
+
+public void setImage (Image image) {
+	checkWidget();
+	if (image != null && image.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
+	if ((style & SWT.SEPARATOR) != 0) return;
+	super.setImage (image);
+	updateImage (true);
+}
+
+boolean setRadioSelection (boolean value) {
+	if ((style & SWT.RADIO) == 0) return false;
+	if (getSelection () != value) {
+		setSelection (value);
+		postEvent (SWT.Selection);
+	}
+	return true;
+}
+
+/**
+ * Sets the selection state of the receiver.
+ * <p>
+ * When the receiver is of type <code>CHECK</code> or <code>RADIO</code>,
+ * it is selected when it is checked (which some platforms draw as a
+ * pushed in button).
+ * </p>
+ *
+ * @param selected the new selection state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (boolean selected) {
+	checkWidget();
+	if ((style & (SWT.CHECK | SWT.RADIO)) == 0) return;
+	this.selection = selected;
+	view.setNeedsDisplay(true);
+}
+
+/**
+ * Sets the receiver's text. The string may include
+ * the mnemonic character.
+ * </p>
+ * <p>
+ * Mnemonics are indicated by an '&amp;' that causes the next
+ * character to be the mnemonic.  When the user presses a
+ * key sequence that matches the mnemonic, a selection
+ * event occurs. On most platforms, the mnemonic appears
+ * underlined but may be emphasised in a platform specific
+ * manner.  The mnemonic indicator character '&amp;' can be
+ * escaped by doubling it in the string, causing a single
+ * '&amp;' to be displayed.
+ * </p>
+ * 
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setText (String string) {
+	checkWidget();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if ((style & SWT.SEPARATOR) != 0) return;
+	super.setText (string);
+	NSButton widget = (NSButton)button;
+	widget.setAttributedTitle(createString());
+	if (text.length() != 0 && image != null) {
+		if ((parent.style & SWT.RIGHT) != 0) {
+			widget.setImagePosition(OS.NSImageLeft);
+		} else {
+			widget.setImagePosition(OS.NSImageAbove);		
+		}
+	} else {
+		widget.setImagePosition(text.length() != 0 ? OS.NSNoImage : OS.NSImageOnly);
+	}
+	parent.relayout ();
+}
+
+/**
+ * Sets the receiver's tool tip text to the argument, which
+ * may be null indicating that the default tool tip for the 
+ * control will be shown. For a control that has a default
+ * tool tip, such as the Tree control on Windows, setting
+ * the tool tip text to an empty string replaces the default,
+ * causing no tool tip text to be shown.
+ * <p>
+ * The mnemonic indicator (character '&amp;') is not displayed in a tool tip.
+ * To display a single '&amp;' in the tool tip, the character '&amp;' can be 
+ * escaped by doubling it in the string.
+ * </p>
+ * 
+ * @param string the new tool tip text (or null)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setToolTipText (String string) {
+	checkWidget();
+	toolTipText = string;
+	parent.checkToolTip (this);
+}
+
+void setVisible (boolean visible) {
+	if (visible) {
+		if ((state & HIDDEN) == 0) return;
+		state &= ~HIDDEN;
+	} else {
+		if ((state & HIDDEN) != 0) return;
+		state |= HIDDEN;
+	}
+	view.setHidden(!visible);
+}
+
+/**
+ * Sets the width of the receiver, for <code>SEPARATOR</code> ToolItems.
+ *
+ * @param width the new width
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setWidth (int width) {
+	checkWidget();
+	if ((style & SWT.SEPARATOR) == 0) return;
+	if (width < 0 || this.width == width) return;
+	this.width = width;
+	parent.relayout();
+}
+
+String tooltipText () {
+	return toolTipText;
+}
+
+void updateImage (boolean layout) {
+	if ((style & SWT.SEPARATOR) != 0) return;
+	Image image = null;
+	if (hotImage != null) {
+		image = hotImage;
+	} else {
+		if (this.image != null) {
+			image = this.image;
+		} else {
+			image = disabledImage;
+		}
+	}
+	NSButton widget = (NSButton)button;
+	/*
+	 * Feature in Cocoa.  If the NSImage object being set into the button is
+	 * the same NSImage object that is already there then the button does not
+	 * redraw itself.  This results in the button's image not visually updating
+	 * if the NSImage object's content has changed since it was last set
+	 * into the button.  The workaround is to explicitly redraw the button.
+	 */
+	widget.setImage(image != null ? image.handle : null);
+	widget.setNeedsDisplay(true);
+	if (text.length() != 0 && image != null) {
+		if ((parent.style & SWT.RIGHT) != 0) {
+			widget.setImagePosition(OS.NSImageLeft);
+		} else {
+			((NSButton)button).setImagePosition(OS.NSImageAbove);		
+		}
+	} else {	
+		widget.setImagePosition(text.length() != 0 ? OS.NSNoImage : OS.NSImageOnly);		
+	}
+	parent.relayout();
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tracker.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tracker.java
new file mode 100755
index 0000000..c7a9e95
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tracker.java
@@ -0,0 +1,1113 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+ 
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ *  Instances of this class implement rubber banding rectangles that are
+ *  drawn onto a parent <code>Composite</code> or <code>Display</code>.
+ *  These rectangles can be specified to respond to mouse and key events
+ *  by either moving or resizing themselves accordingly.  Trackers are
+ *  typically used to represent window geometries in a lightweight manner.
+ *  
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>LEFT, RIGHT, UP, DOWN, RESIZE</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Move, Resize</dd>
+ * </dl>
+ * <p>
+ * Note: Rectangle move behavior is assumed unless RESIZE is specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tracker">Tracker snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Tracker extends Widget {
+	Control parent;
+	boolean tracking, cancelled, stippled;
+	Cursor clientCursor, resizeCursor;
+	Rectangle [] rectangles = new Rectangle [0], proportions = rectangles;
+	Rectangle bounds;
+	int cursorOrientation = SWT.NONE;
+	boolean inEvent = false;
+	NSWindow window;
+	int oldX, oldY;
+		
+	/*
+	* The following values mirror step sizes on Windows
+	*/
+	final static int STEPSIZE_SMALL = 1;
+	final static int STEPSIZE_LARGE = 9;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a widget which will be the parent of the new instance (cannot be null)
+ * @param style the style of widget to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#LEFT
+ * @see SWT#RIGHT
+ * @see SWT#UP
+ * @see SWT#DOWN
+ * @see SWT#RESIZE
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Tracker (Composite parent, int style) {
+	super (parent, checkStyle (style));
+	this.parent = parent;
+}
+
+/**
+ * Constructs a new instance of this class given the display
+ * to create it on and a style value describing its behavior
+ * and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p><p>
+ * Note: Currently, null can be passed in for the display argument.
+ * This has the effect of creating the tracker on the currently active
+ * display if there is one. If there is no current display, the 
+ * tracker is created on a "default" display. <b>Passing in null as
+ * the display argument is not considered to be good coding style,
+ * and may not be supported in a future release of SWT.</b>
+ * </p>
+ *
+ * @param display the display to create the tracker on
+ * @param style the style of control to construct
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ * 
+ * @see SWT#LEFT
+ * @see SWT#RIGHT
+ * @see SWT#UP
+ * @see SWT#DOWN
+ * @see SWT#RESIZE
+ */
+public Tracker (Display display, int style) {
+	if (display == null) display = Display.getCurrent ();
+	if (display == null) display = Display.getDefault ();
+	if (!display.isValidThread ()) {
+		error (SWT.ERROR_THREAD_INVALID_ACCESS);
+	}
+	this.style = checkStyle (style);
+	this.display = display;
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is moved or resized, by sending
+ * it one of the messages defined in the <code>ControlListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ControlListener
+ * @see #removeControlListener
+ */
+public void addControlListener (ControlListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Resize, typedListener);
+	addListener (SWT.Move, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when keys are pressed and released on the system keyboard, by sending
+ * it one of the messages defined in the <code>KeyListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see KeyListener
+ * @see #removeKeyListener
+ */
+public void addKeyListener(KeyListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener(SWT.KeyUp,typedListener);
+	addListener(SWT.KeyDown,typedListener);
+}
+
+Point adjustMoveCursor () {
+	if (bounds == null) return null;
+	int newX = bounds.x + bounds.width / 2;
+	int newY = bounds.y;
+	/*
+	 * Convert to screen coordinates if needed
+ 	 */
+	if (parent != null) {
+		Point pt = parent.toDisplay (newX, newY);
+		newX = pt.x;
+		newY = pt.y;
+	}
+	display.setCursorLocation(newX, newY);
+	return new Point (newX, newY);
+}
+
+Point adjustResizeCursor (boolean movePointer) {
+	if (bounds == null) return null;
+	int newX, newY;
+
+	if ((cursorOrientation & SWT.LEFT) != 0) {
+		newX = bounds.x;
+	} else if ((cursorOrientation & SWT.RIGHT) != 0) {
+		newX = bounds.x + bounds.width;
+	} else {
+		newX = bounds.x + bounds.width / 2;
+	}
+
+	if ((cursorOrientation & SWT.UP) != 0) {
+		newY = bounds.y;
+	} else if ((cursorOrientation & SWT.DOWN) != 0) {
+		newY = bounds.y + bounds.height;
+	} else {
+		newY = bounds.y + bounds.height / 2;
+	}
+
+	/*
+	 * Convert to screen coordinates if needed
+ 	 */
+	if (parent != null) {
+		Point pt = parent.toDisplay (newX, newY);
+		newX = pt.x;
+		newY = pt.y; 
+	}
+	if (movePointer) {
+		display.setCursorLocation(newX, newY);
+	}
+
+	/*
+	* If the client has not provided a custom cursor then determine
+	* the appropriate resize cursor.
+	*/
+	if (clientCursor == null) {
+		Cursor newCursor = null;
+		switch (cursorOrientation) {
+			case SWT.UP:
+				newCursor = new Cursor(display, SWT.CURSOR_SIZENS);
+				break;
+			case SWT.DOWN:
+				newCursor = new Cursor(display, SWT.CURSOR_SIZENS);
+				break;
+			case SWT.LEFT:
+				newCursor = new Cursor(display, SWT.CURSOR_SIZEWE);
+				break;
+			case SWT.RIGHT:
+				newCursor = new Cursor(display, SWT.CURSOR_SIZEWE);
+				break;
+			case SWT.LEFT | SWT.UP:
+				newCursor = new Cursor(display, SWT.CURSOR_SIZENWSE);
+				break;
+			case SWT.RIGHT | SWT.DOWN:
+				newCursor = new Cursor(display, SWT.CURSOR_SIZENWSE);
+				break;
+			case SWT.LEFT | SWT.DOWN:
+				newCursor = new Cursor(display, SWT.CURSOR_SIZENESW);
+				break;
+			case SWT.RIGHT | SWT.UP:
+				newCursor = new Cursor(display, SWT.CURSOR_SIZENESW);
+				break;
+			default:
+				newCursor = new Cursor(display, SWT.CURSOR_SIZEALL);
+				break;
+		}
+		display.lockCursor = false;
+		newCursor.handle.set();
+		display.lockCursor = true;
+		if (resizeCursor != null) {
+			resizeCursor.dispose ();
+		}
+		resizeCursor = newCursor;
+	}
+		
+	return new Point (newX, newY);
+}
+
+static int checkStyle (int style) {
+	if ((style & (SWT.LEFT | SWT.RIGHT | SWT.UP | SWT.DOWN)) == 0) {
+		style |= SWT.LEFT | SWT.RIGHT | SWT.UP | SWT.DOWN;
+	}
+	return style;
+}
+
+/**
+ * Stops displaying the tracker rectangles.  Note that this is not considered
+ * to be a cancelation by the user.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void close () {
+	checkWidget ();
+	tracking = false;
+}
+Rectangle computeBounds () {
+	if (rectangles.length == 0) return null;
+	int xMin = rectangles [0].x;
+	int yMin = rectangles [0].y;
+	int xMax = rectangles [0].x + rectangles [0].width;
+	int yMax = rectangles [0].y + rectangles [0].height;
+	
+	for (int i = 1; i < rectangles.length; i++) {
+		if (rectangles [i].x < xMin) xMin = rectangles [i].x;
+		if (rectangles [i].y < yMin) yMin = rectangles [i].y;
+		int rectRight = rectangles [i].x + rectangles [i].width;
+		if (rectRight > xMax) xMax = rectRight;		
+		int rectBottom = rectangles [i].y + rectangles [i].height;
+		if (rectBottom > yMax) yMax = rectBottom;
+	}
+	
+	return new Rectangle (xMin, yMin, xMax - xMin, yMax - yMin);
+}
+
+Rectangle [] computeProportions (Rectangle [] rects) {
+	Rectangle [] result = new Rectangle [rects.length];
+	bounds = computeBounds ();
+	if (bounds != null) {
+		for (int i = 0; i < rects.length; i++) {
+			int x = 0, y = 0, width = 0, height = 0;
+			if (bounds.width != 0) {
+				x = (rects [i].x - bounds.x) * 100 / bounds.width;
+				width = rects [i].width * 100 / bounds.width;
+			} else {
+				width = 100;
+			}
+			if (bounds.height != 0) {
+				y = (rects [i].y - bounds.y) * 100 / bounds.height;
+				height = rects [i].height * 100 / bounds.height;
+			} else {
+				height = 100;
+			}
+			result [i] = new Rectangle (x, y, width, height);			
+		}
+	}
+	return result;
+}
+
+void drawRectangles (NSWindow window, Rectangle [] rects, boolean erase) {
+	NSGraphicsContext context = window.graphicsContext();
+	NSGraphicsContext.static_saveGraphicsState();
+	NSGraphicsContext.setCurrentContext(context);
+	context.saveGraphicsState();
+	Point parentOrigin;
+	if (parent != null) {
+		parentOrigin = display.map (parent, null, 0, 0);
+	} else {
+		parentOrigin = new Point (0, 0);	
+	}
+	context.setCompositingOperation(erase ? OS.NSCompositeClear : OS.NSCompositeSourceOver);
+	NSRect rectFrame = new NSRect();
+	NSPoint globalPoint = new NSPoint();
+	float /*double*/ screenHeight = display.getPrimaryFrame().height;
+	for (int i=0; i<rects.length; i++) {
+		Rectangle rect = rects [i];
+		rectFrame.x = rect.x + parentOrigin.x;
+		rectFrame.y = screenHeight - (int)((rect.y + parentOrigin.y) + rect.height);
+		rectFrame.width = rect.width;
+		rectFrame.height = rect.height;
+		globalPoint.x = rectFrame.x;
+		globalPoint.y = rectFrame.y;
+		globalPoint = window.convertScreenToBase(globalPoint);
+		rectFrame.x = globalPoint.x;
+		rectFrame.y = globalPoint.y;
+		
+		if (erase) {
+			rectFrame.width++;
+			rectFrame.height++;
+			NSBezierPath.fillRect(rectFrame);
+		} else {
+			rectFrame.x += 0.5f;
+			rectFrame.y += 0.5f;
+			NSBezierPath.strokeRect(rectFrame);
+		}
+	}
+	if (!erase) context.flushGraphics();
+	context.restoreGraphicsState();
+	NSGraphicsContext.static_restoreGraphicsState();
+}
+
+/**
+ * Returns the bounds that are being drawn, expressed relative to the parent
+ * widget.  If the parent is a <code>Display</code> then these are screen
+ * coordinates.
+ *
+ * @return the bounds of the Rectangles being drawn
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Rectangle [] getRectangles () {
+	checkWidget();
+	Rectangle [] result = new Rectangle [rectangles.length];
+	for (int i = 0; i < rectangles.length; i++) {
+		Rectangle current = rectangles [i];
+		result [i] = new Rectangle (current.x, current.y, current.width, current.height);
+	}
+	return result;
+}
+
+/**
+ * Returns <code>true</code> if the rectangles are drawn with a stippled line, <code>false</code> otherwise.
+ *
+ * @return the stippled effect of the rectangles
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getStippled () {
+	checkWidget ();
+	return stippled;
+}
+
+void mouse (NSEvent nsEvent) {
+	NSPoint location;
+	if (nsEvent == null || nsEvent.type() == OS.NSMouseMoved) {
+		location = NSEvent.mouseLocation();
+	} else {
+		location = nsEvent.locationInWindow();
+		location = nsEvent.window().convertBaseToScreen(location);
+	}
+	location.y = display.getPrimaryFrame().height - location.y;
+	int newX = (int)location.x, newY = (int)location.y;
+	if (newX != oldX || newY != oldY) {
+		Rectangle [] oldRectangles = rectangles;
+		Rectangle [] rectsToErase = new Rectangle [rectangles.length];
+		for (int i = 0; i < rectangles.length; i++) {
+			Rectangle current = rectangles [i];
+			rectsToErase [i] = new Rectangle (current.x, current.y, current.width, current.height);
+		}
+		Event event = new Event ();
+		event.x = newX;
+		event.y = newY;
+		if ((style & SWT.RESIZE) != 0) {
+			boolean orientationInit = resizeRectangles (newX - oldX, newY - oldY);
+			inEvent = true;
+			sendEvent (SWT.Resize, event);
+			inEvent = false;
+			/*
+			* It is possible (but unlikely), that application
+			* code could have disposed the widget in the move
+			* event.  If this happens, return false to indicate
+			* that the tracking has failed.
+			*/
+			if (isDisposed ()) {
+				cancelled = true;
+				return;
+			}
+			boolean draw = false;
+			/*
+			 * It is possible that application code could have
+			 * changed the rectangles in the resize event.  If this
+			 * happens then only redraw the tracker if the rectangle
+			 * values have changed.
+			 */
+			if (rectangles != oldRectangles) {
+				int length = rectangles.length;
+				if (length != rectsToErase.length) {
+					draw = true;
+				} else {
+					for (int i = 0; i < length; i++) {
+						if (!rectangles [i].equals (rectsToErase [i])) {
+							draw = true;
+							break;
+						}
+					}
+				}
+			}
+			else {
+				draw = true;
+			}
+			if (draw) {
+				drawRectangles (window, rectsToErase, true);
+				drawRectangles (window, rectangles, false);
+			}
+			Point cursorPos = adjustResizeCursor (orientationInit);
+			if (cursorPos != null) {
+				newX = cursorPos.x;
+				newY = cursorPos.y;
+			}
+		} else {
+			moveRectangles (newX - oldX, newY - oldY);
+			inEvent = true;
+			sendEvent (SWT.Move, event);
+			inEvent = false;
+			/*
+			* It is possible (but unlikely), that application
+			* code could have disposed the widget in the move
+			* event.  If this happens, return false to indicate
+			* that the tracking has failed.
+			*/
+			if (isDisposed ()) {
+				cancelled = true;
+				return;
+			}
+			boolean draw = false;
+			/*
+			 * It is possible that application code could have
+			 * changed the rectangles in the move event.  If this
+			 * happens then only redraw the tracker if the rectangle
+			 * values have changed.
+			 */
+			if (rectangles != oldRectangles) {
+				int length = rectangles.length;
+				if (length != rectsToErase.length) {
+					draw = true;
+				} else {
+					for (int i = 0; i < length; i++) {
+						if (!rectangles [i].equals (rectsToErase [i])) {
+							draw = true;
+							break;
+						}
+					}
+				}
+			} else {
+				draw = true;
+			}
+			if (draw) {
+				drawRectangles (window, rectsToErase, true);
+				drawRectangles (window, rectangles, false);
+			}
+		}
+		oldX = newX;  oldY = newY;
+	}
+	switch ((int)/*64*/nsEvent.type()) {
+		case OS.NSLeftMouseUp:
+		case OS.NSRightMouseUp:
+		case OS.NSOtherMouseUp:
+			tracking = false;
+	}
+}
+
+void key (NSEvent nsEvent) {
+	//TODO send event
+//	if (!sendKeyEvent (SWT.KeyDown, theEvent)) return OS.noErr;
+	int /*long*/ modifierFlags = nsEvent.modifierFlags();
+	int stepSize = (modifierFlags & OS.NSControlKeyMask) != 0 ? STEPSIZE_SMALL : STEPSIZE_LARGE;
+	int xChange = 0, yChange = 0;
+	switch (nsEvent.keyCode()) {
+		case 53: /* Esc */
+			cancelled = true;
+			tracking = false;
+			break;
+		case 76: /* KP Enter */
+		case 36: /* Return */
+			tracking = false;
+			break;
+		case 123: /* Left arrow */
+			xChange = -stepSize;
+			break;
+		case 124: /* Right arrow */
+			xChange = stepSize;
+			break;
+		case 126: /* Up arrow */
+			yChange = -stepSize;
+			break;
+		case 125: /* Down arrow */
+			yChange = stepSize;
+			break;
+	}
+	if (xChange != 0 || yChange != 0) {
+		Rectangle [] oldRectangles = rectangles;
+		Rectangle [] rectsToErase = new Rectangle [rectangles.length];
+		for (int i = 0; i < rectangles.length; i++) {
+			Rectangle current = rectangles [i];
+			rectsToErase [i] = new Rectangle (current.x, current.y, current.width, current.height);
+		}
+		Event event = new Event ();
+		int newX = oldX + xChange;
+		int newY = oldY + yChange;
+		event.x = newX;
+		event.y = newY;
+		Point cursorPos;
+		if ((style & SWT.RESIZE) != 0) {
+			resizeRectangles (xChange, yChange);
+			inEvent = true;
+			sendEvent (SWT.Resize, event);
+			inEvent = false;
+			/*
+			* It is possible (but unlikely) that application
+			* code could have disposed the widget in the move
+			* event.  If this happens return false to indicate
+			* that the tracking has failed.
+			*/
+			if (isDisposed ()) {
+				cancelled = true;
+				return;
+			}
+			boolean draw = false;
+			/*
+			 * It is possible that application code could have
+			 * changed the rectangles in the resize event.  If this
+			 * happens then only redraw the tracker if the rectangle
+			 * values have changed.
+			 */
+			if (rectangles != oldRectangles) {
+				int length = rectangles.length;
+				if (length != rectsToErase.length) {
+					draw = true;
+				} else {
+					for (int i = 0; i < length; i++) {
+						if (!rectangles [i].equals (rectsToErase [i])) {
+							draw = true;
+							break;
+						}
+					}
+				}
+			} else {
+				draw = true;
+			}
+			if (draw) {
+				drawRectangles (window, rectsToErase, true);
+				drawRectangles (window, rectangles, false);
+			}
+			cursorPos = adjustResizeCursor (true);
+		} else {
+			moveRectangles (xChange, yChange);
+			inEvent = true;
+			sendEvent (SWT.Move, event);
+			inEvent = false;
+			/*
+			* It is possible (but unlikely) that application
+			* code could have disposed the widget in the move
+			* event.  If this happens return false to indicate
+			* that the tracking has failed.
+			*/
+			if (isDisposed ()) {
+				cancelled = true;
+				return;
+			}
+			boolean draw = false;
+			/*
+			 * It is possible that application code could have
+			 * changed the rectangles in the move event.  If this
+			 * happens then only redraw the tracker if the rectangle
+			 * values have changed.
+			 */
+			if (rectangles != oldRectangles) {
+				int length = rectangles.length;
+				if (length != rectsToErase.length) {
+					draw = true;
+				} else {
+					for (int i = 0; i < length; i++) {
+						if (!rectangles [i].equals (rectsToErase [i])) {
+							draw = true;
+							break;
+						}
+					}
+				}
+			} else {
+				draw = true;
+			}
+			if (draw) {
+				drawRectangles (window, rectsToErase, true);
+				drawRectangles (window, rectangles, false);
+			}
+			cursorPos = adjustMoveCursor ();
+		}
+		if (cursorPos != null) {
+			oldX = cursorPos.x;
+			oldY = cursorPos.y;
+		}
+	}
+}
+
+void moveRectangles (int xChange, int yChange) {
+	if (bounds == null) return;
+	if (xChange < 0 && ((style & SWT.LEFT) == 0)) xChange = 0;
+	if (xChange > 0 && ((style & SWT.RIGHT) == 0)) xChange = 0;
+	if (yChange < 0 && ((style & SWT.UP) == 0)) yChange = 0;
+	if (yChange > 0 && ((style & SWT.DOWN) == 0)) yChange = 0;
+	if (xChange == 0 && yChange == 0) return;
+	bounds.x += xChange; bounds.y += yChange;
+	for (int i = 0; i < rectangles.length; i++) {
+		rectangles [i].x += xChange;
+		rectangles [i].y += yChange;
+	}
+}
+
+/**
+ * Displays the Tracker rectangles for manipulation by the user.  Returns when
+ * the user has either finished manipulating the rectangles or has cancelled the
+ * Tracker.
+ * 
+ * @return <code>true</code> if the user did not cancel the Tracker, <code>false</code> otherwise
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean open () {
+	checkWidget ();
+	Display display = this.display;
+	cancelled = false;
+	tracking = true;
+	window = (NSWindow)new NSWindow().alloc();
+	NSArray screens = NSScreen.screens();
+	float /*double*/ minX = Float.MAX_VALUE, maxX = Float.MIN_VALUE;
+	float /*double*/ minY = Float.MAX_VALUE, maxY = Float.MIN_VALUE;	
+	int count = (int)/*64*/screens.count();
+	for (int i = 0; i < count; i++) {
+		NSScreen screen = new NSScreen(screens.objectAtIndex(i));
+		NSRect frame = screen.frame();
+		float /*double*/ x1 = frame.x, x2 = frame.x + frame.width;
+		float /*double*/ y1 = frame.y, y2 = frame.y + frame.height;
+		if (x1 < minX) minX = x1;
+		if (x2 < minX) minX = x2;
+		if (x1 > maxX) maxX = x1;
+		if (x2 > maxX) maxX = x2;
+		if (y1 < minY) minY = y1;
+		if (y2 < minY) minY = y2;
+		if (y1 > maxY) maxY = y1;
+		if (y2 > maxY) maxY = y2;
+	}	
+	NSRect frame = new NSRect();
+	frame.x = minX;
+	frame.y = minY;
+	frame.width = maxX - minX;
+	frame.height = maxY - minY;
+	window = window.initWithContentRect(frame, OS.NSBorderlessWindowMask, OS.NSBackingStoreBuffered, false);
+	window.setOpaque(false);
+	window.setContentView(null);
+	window.setBackgroundColor(NSColor.clearColor());
+	NSGraphicsContext context = window.graphicsContext();
+	NSGraphicsContext.static_saveGraphicsState();
+	NSGraphicsContext.setCurrentContext(context);
+	context.setCompositingOperation(OS.NSCompositeClear);
+	frame.x = frame.y = 0;
+	NSBezierPath.fillRect(frame);
+	NSGraphicsContext.static_restoreGraphicsState();
+	window.orderFrontRegardless();
+
+	drawRectangles (window, rectangles, false);
+	
+	/*
+	* If exactly one of UP/DOWN is specified as a style then set the cursor
+	* orientation accordingly (the same is done for LEFT/RIGHT styles below).
+	*/
+	int vStyle = style & (SWT.UP | SWT.DOWN);
+	if (vStyle == SWT.UP || vStyle == SWT.DOWN) {
+		cursorOrientation |= vStyle;
+	}
+	int hStyle = style & (SWT.LEFT | SWT.RIGHT);
+	if (hStyle == SWT.LEFT || hStyle == SWT.RIGHT) {
+		cursorOrientation |= hStyle;
+	}
+	
+	Point cursorPos;
+	boolean down = false;
+	NSApplication application = NSApplication.sharedApplication();
+	NSEvent currentEvent = application.currentEvent();
+	if (currentEvent != null) {
+		switch ((int)/*64*/currentEvent.type()) {
+			case OS.NSLeftMouseDown:
+			case OS.NSLeftMouseDragged:
+			case OS.NSRightMouseDown:
+			case OS.NSRightMouseDragged:
+			case OS.NSOtherMouseDown:
+			case OS.NSOtherMouseDragged:
+				down = true;
+		}
+	}
+	if (down) {
+		cursorPos = display.getCursorLocation();
+	} else {
+		if ((style & SWT.RESIZE) != 0) {
+			cursorPos = adjustResizeCursor (true);
+		} else {
+			cursorPos = adjustMoveCursor ();
+		}
+	}
+	if (cursorPos != null) {
+		oldX = cursorPos.x;
+		oldY = cursorPos.y;
+	}
+
+	Control oldTrackingControl = display.trackingControl;
+	display.trackingControl = null;
+	/* Tracker behaves like a Dialog with its own OS event loop. */
+	while (tracking && !cancelled) {
+		display.addPool();
+		try {
+			NSEvent event = application.nextEventMatchingMask(0, NSDate.distantFuture(), OS.NSDefaultRunLoopMode, true);
+			if (event == null) continue;
+			int type = (int)/*64*/event.type();
+			switch (type) {
+				case OS.NSLeftMouseUp:
+				case OS.NSRightMouseUp:
+				case OS.NSOtherMouseUp:
+				case OS.NSMouseMoved:
+				case OS.NSLeftMouseDragged:
+				case OS.NSRightMouseDragged:
+				case OS.NSOtherMouseDragged:
+					mouse(event);
+					break;
+				case OS.NSKeyDown:
+//				case OS.NSKeyUp:
+				case OS.NSFlagsChanged:
+					key(event);
+					break;
+			}
+			boolean dispatch = true;
+			switch (type) {
+				case OS.NSLeftMouseDown:
+				case OS.NSLeftMouseUp:
+				case OS.NSRightMouseDown:
+				case OS.NSRightMouseUp:
+				case OS.NSOtherMouseDown:
+				case OS.NSOtherMouseUp:
+				case OS.NSMouseMoved:
+				case OS.NSLeftMouseDragged:
+				case OS.NSRightMouseDragged:
+				case OS.NSOtherMouseDragged:
+				case OS.NSMouseEntered:
+				case OS.NSMouseExited:
+				case OS.NSKeyDown:
+				case OS.NSKeyUp:
+				case OS.NSFlagsChanged:
+					dispatch = false;
+			}
+			if (dispatch) application.sendEvent(event);
+			if (clientCursor != null && resizeCursor == null) {
+				display.lockCursor = false;
+				clientCursor.handle.set();
+				display.lockCursor = true;
+			}
+		} finally {
+			display.removePool();
+		}
+	}
+	if (oldTrackingControl != null && !oldTrackingControl.isDisposed()) {
+		display.trackingControl = oldTrackingControl;
+	}
+	display.setCursor(display.findControl(true));
+	if (!isDisposed()) {
+		drawRectangles (window, rectangles, true);
+	}
+	if (window != null) window.close();
+	tracking = false;
+	window = null;
+	return !cancelled;
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	parent = null;
+	rectangles = proportions = null;
+	bounds = null;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is moved or resized.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ControlListener
+ * @see #addControlListener
+ */
+public void removeControlListener (ControlListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Resize, listener);
+	eventTable.unhook (SWT.Move, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when keys are pressed and released on the system keyboard.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see KeyListener
+ * @see #addKeyListener
+ */
+public void removeKeyListener(KeyListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook(SWT.KeyUp, listener);
+	eventTable.unhook(SWT.KeyDown, listener);
+}
+
+/*
+ * Returns true if the pointer's orientation was initialized in some dimension,
+ * and false otherwise.
+ */
+boolean resizeRectangles (int xChange, int yChange) {
+	if (bounds == null) return false;
+	boolean orientationInit = false;
+	/*
+	* If the cursor orientation has not been set in the orientation of
+	* this change then try to set it here.
+	*/
+	if (xChange < 0 && ((style & SWT.LEFT) != 0) && ((cursorOrientation & SWT.RIGHT) == 0)) {
+		if ((cursorOrientation & SWT.LEFT) == 0) {
+			cursorOrientation |= SWT.LEFT;
+			orientationInit = true;
+		}
+	}
+	if (xChange > 0 && ((style & SWT.RIGHT) != 0) && ((cursorOrientation & SWT.LEFT) == 0)) {
+		if ((cursorOrientation & SWT.RIGHT) == 0) {
+			cursorOrientation |= SWT.RIGHT;
+			orientationInit = true;
+		}
+	} 
+	if (yChange < 0 && ((style & SWT.UP) != 0) && ((cursorOrientation & SWT.DOWN) == 0)) {
+		if ((cursorOrientation & SWT.UP) == 0) {
+			cursorOrientation |= SWT.UP;
+			orientationInit = true;
+		}
+	} 
+	if (yChange > 0 && ((style & SWT.DOWN) != 0) && ((cursorOrientation & SWT.UP) == 0)) {
+		if ((cursorOrientation & SWT.DOWN) == 0) {
+			cursorOrientation |= SWT.DOWN;
+			orientationInit = true;
+		}
+	}
+	
+	/*
+	 * If the bounds will flip about the x or y axis then apply the adjustment
+	 * up to the axis (ie.- where bounds width/height becomes 0), change the
+	 * cursor's orientation accordingly, and flip each Rectangle's origin (only
+	 * necessary for > 1 Rectangles) 
+	 */
+	if ((cursorOrientation & SWT.LEFT) != 0) {
+		if (xChange > bounds.width) {
+			if ((style & SWT.RIGHT) == 0) return orientationInit;
+			cursorOrientation |= SWT.RIGHT;
+			cursorOrientation &= ~SWT.LEFT;
+			bounds.x += bounds.width;
+			xChange -= bounds.width;
+			bounds.width = 0;
+			if (proportions.length > 1) {
+				for (int i = 0; i < proportions.length; i++) {
+					Rectangle proportion = proportions [i];
+					proportion.x = 100 - proportion.x - proportion.width;
+				}
+			}
+		}
+	} else if ((cursorOrientation & SWT.RIGHT) != 0) {
+		if (bounds.width < -xChange) {
+			if ((style & SWT.LEFT) == 0) return orientationInit;
+			cursorOrientation |= SWT.LEFT;
+			cursorOrientation &= ~SWT.RIGHT;
+			xChange += bounds.width;
+			bounds.width = 0;
+			if (proportions.length > 1) {
+				for (int i = 0; i < proportions.length; i++) {
+					Rectangle proportion = proportions [i];
+					proportion.x = 100 - proportion.x - proportion.width;
+				}
+			}
+		}
+	}
+	if ((cursorOrientation & SWT.UP) != 0) {
+		if (yChange > bounds.height) {
+			if ((style & SWT.DOWN) == 0) return orientationInit;
+			cursorOrientation |= SWT.DOWN;
+			cursorOrientation &= ~SWT.UP;
+			bounds.y += bounds.height;
+			yChange -= bounds.height;
+			bounds.height = 0;
+			if (proportions.length > 1) {
+				for (int i = 0; i < proportions.length; i++) {
+					Rectangle proportion = proportions [i];
+					proportion.y = 100 - proportion.y - proportion.height;
+				}
+			}
+		}
+	} else if ((cursorOrientation & SWT.DOWN) != 0) {
+		if (bounds.height < -yChange) {
+			if ((style & SWT.UP) == 0) return orientationInit;
+			cursorOrientation |= SWT.UP;
+			cursorOrientation &= ~SWT.DOWN;
+			yChange += bounds.height;
+			bounds.height = 0;
+			if (proportions.length > 1) {
+				for (int i = 0; i < proportions.length; i++) {
+					Rectangle proportion = proportions [i];
+					proportion.y = 100 - proportion.y - proportion.height;
+				}
+			}
+		}
+	}
+	
+	// apply the bounds adjustment
+	if ((cursorOrientation & SWT.LEFT) != 0) {
+		bounds.x += xChange;
+		bounds.width -= xChange;
+	} else if ((cursorOrientation & SWT.RIGHT) != 0) {
+		bounds.width += xChange;
+	}
+	if ((cursorOrientation & SWT.UP) != 0) {
+		bounds.y += yChange;
+		bounds.height -= yChange;
+	} else if ((cursorOrientation & SWT.DOWN) != 0) {
+		bounds.height += yChange;
+	}
+	
+	Rectangle [] newRects = new Rectangle [rectangles.length];
+	for (int i = 0; i < rectangles.length; i++) {
+		Rectangle proportion = proportions[i];
+		newRects[i] = new Rectangle (
+			proportion.x * bounds.width / 100 + bounds.x,
+			proportion.y * bounds.height / 100 + bounds.y,
+			proportion.width * bounds.width / 100,
+			proportion.height * bounds.height / 100);
+	}
+	rectangles = newRects;
+	return orientationInit;
+}
+
+/**
+ * Sets the <code>Cursor</code> of the Tracker.  If this cursor is <code>null</code>
+ * then the cursor reverts to the default.
+ *
+ * @param newCursor the new <code>Cursor</code> to display
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setCursor (Cursor newCursor) {
+	checkWidget ();
+	clientCursor = newCursor;
+	if (newCursor != null) {
+		display.lockCursor = false;
+		if (inEvent) newCursor.handle.set();
+		display.lockCursor = true;
+	}
+}
+
+/**
+ * Specifies the rectangles that should be drawn, expressed relative to the parent
+ * widget.  If the parent is a Display then these are screen coordinates.
+ *
+ * @param rectangles the bounds of the rectangles to be drawn
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the set of rectangles is null or contains a null rectangle</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setRectangles (Rectangle [] rectangles) {
+	checkWidget ();
+	if (rectangles == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int length = rectangles.length;
+	this.rectangles = new Rectangle [length];
+	for (int i = 0; i < length; i++) {
+		Rectangle current = rectangles [i];
+		if (current == null) error (SWT.ERROR_NULL_ARGUMENT);
+		this.rectangles [i] = new Rectangle (current.x, current.y, current.width, current.height);
+	}
+	proportions = computeProportions (rectangles);
+}
+
+/**
+ * Changes the appearance of the line used to draw the rectangles.
+ *
+ * @param stippled <code>true</code> if rectangle should appear stippled
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setStippled (boolean stippled) {
+	checkWidget ();
+	this.stippled = stippled;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TrayItem.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TrayItem.java
new file mode 100755
index 0000000..ec0a782
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TrayItem.java
@@ -0,0 +1,537 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class represent icons that can be placed on the
+ * system tray or task bar status area.
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>DefaultSelection, MenuDetect, Selection</dd>
+ * </dl>
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tray">Tray, TrayItem snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.0
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class TrayItem extends Item {
+	Tray parent;
+	ToolTip toolTip;
+	String toolTipText;
+	boolean visible = true, highlight;
+	NSStatusItem item;
+	NSImageView view;
+	
+	static final float BORDER = 8f;
+	
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Tray</code>) and a style value
+ * describing its behavior and appearance. The item is added
+ * to the end of the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TrayItem (Tray parent, int style) {
+	super (parent, style);
+	this.parent = parent;
+	parent.createItem (this, parent.getItemCount ());
+	createWidget ();
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the platform-specific context menu trigger
+ * has occurred, by sending it one of the messages defined in
+ * the <code>MenuDetectListener</code> interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MenuDetectListener
+ * @see #removeMenuDetectListener
+ *
+ * @since 3.3
+ */
+public void addMenuDetectListener (MenuDetectListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.MenuDetect, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the receiver is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is called when the receiver is selected
+ * <code>widgetDefaultSelected</code> is called when the receiver is double-clicked
+ * </p>
+ *
+ * @param listener the listener which should be notified when the receiver is selected by the user
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+void createHandle () {
+	NSStatusBar statusBar = NSStatusBar.systemStatusBar();
+	item = statusBar.statusItemWithLength(0);
+	if (item == null) error (SWT.ERROR_NO_HANDLES);
+	item.retain();
+	item.setHighlightMode(true);	
+	view = (NSImageView)new SWTImageView().alloc();
+	if (view == null) error (SWT.ERROR_NO_HANDLES);
+	view.init ();
+	item.setView(view);
+}
+
+void deregister () {
+	super.deregister ();
+	display.removeWidget (view);
+	display.removeWidget(view.cell());
+}
+
+void destroyWidget () {
+	parent.destroyItem (this);
+	releaseHandle ();
+}
+
+Point getLocation () {
+	NSRect rect = view.frame();
+	NSRect windowRect = view.window().frame();
+	NSPoint pt = new NSPoint();
+	pt.x = rect.width / 2;
+	pt = view.convertPoint_fromView_(pt, null);
+	pt.x += windowRect.x;
+	return new Point ((int)pt.x, (int)pt.y);
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>Tray</code>.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public Tray getParent () {
+	checkWidget ();
+	return parent;
+}
+
+/**
+ * Returns the receiver's tool tip, or null if it has
+ * not been set.
+ *
+ * @return the receiver's tool tip text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public ToolTip getToolTip () {
+	checkWidget ();
+	return toolTip;
+}
+
+/**
+ * Returns the receiver's tool tip text, or null if it has
+ * not been set.
+ *
+ * @return the receiver's tool tip text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getToolTipText () {
+	checkWidget ();
+	return toolTipText;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is visible and 
+ * <code>false</code> otherwise.
+ *
+ * @return the receiver's visibility
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getVisible () {
+	checkWidget ();
+	return visible;
+}
+
+void register () {
+	super.register ();
+	display.addWidget (view, this);
+	display.addWidget (((NSControl)view).cell(), this);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	parent = null;
+	if (item != null) item.release();
+	if (view != null) view.release();
+	item = null;
+	view = null;
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	NSStatusBar statusBar = NSStatusBar.systemStatusBar();
+	statusBar.removeStatusItem(item);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the platform-specific context menu trigger has
+ * occurred.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MenuDetectListener
+ * @see #addMenuDetectListener
+ *
+ * @since 3.3
+ */
+public void removeMenuDetectListener (MenuDetectListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.MenuDetect, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the receiver is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+/**
+ * Sets the receiver's image.
+ *
+ * @param image the new image
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setImage (Image image) {
+	checkWidget ();
+	if (image != null && image.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	super.setImage (image);
+	float /*double*/ width = 0;
+	if (image == null) {
+		view.setImage (null);
+	} else {
+		/*
+		 * Feature in Cocoa.  If the NSImage object being set into the view is
+		 * the same NSImage object that is already there then the new image is
+		 * not taken.  This results in the view's image not changing even if the
+		 * NSImage object's content has changed since it was last set into the
+		 * view.  The workaround is to temporarily set the view's image to null
+		 * so that the new image will then be taken.
+		 */
+		NSImage current = view.image ();
+		if (current != null && current.id == image.handle.id) {
+			view.setImage (null);
+		}
+		view.setImage (image.handle);
+		if (visible) {
+			width = image.handle.size ().width + BORDER;
+		}
+	}
+	item.setLength (width);
+}
+
+/**
+ * Sets the receiver's tool tip to the argument, which
+ * may be null indicating that no tool tip should be shown.
+ *
+ * @param toolTip the new tool tip (or null)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setToolTip (ToolTip toolTip) {
+	checkWidget ();
+	ToolTip oldTip = this.toolTip, newTip = toolTip;
+	if (oldTip != null) oldTip.item = null;
+	this.toolTip = newTip;
+	if (newTip != null) newTip.item = this;
+}
+
+/**
+ * Sets the receiver's tool tip text to the argument, which
+ * may be null indicating that the default tool tip for the 
+ * control will be shown. For a control that has a default
+ * tool tip, such as the Tree control on Windows, setting
+ * the tool tip text to an empty string replaces the default,
+ * causing no tool tip text to be shown.
+ * <p>
+ * The mnemonic indicator (character '&amp;') is not displayed in a tool tip.
+ * To display a single '&amp;' in the tool tip, the character '&amp;' can be 
+ * escaped by doubling it in the string.
+ * </p>
+ * 
+ * @param string the new tool tip text (or null)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setToolTipText (String string) {
+	checkWidget ();
+	toolTipText = string;
+	_setToolTipText (string);
+}
+
+void _setToolTipText (String string) {
+	if (string != null) {
+		char[] chars = new char [string.length ()];
+		string.getChars (0, chars.length, chars, 0);
+		int length = fixMnemonic (chars);
+		NSString str = NSString.stringWithCharacters (chars, length);
+		view.setToolTip (str);
+	} else {
+		view.setToolTip (null);
+	}
+}
+
+/**
+ * Makes the receiver visible if the argument is <code>true</code>,
+ * and makes it invisible otherwise. 
+ *
+ * @param visible the new visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setVisible (boolean visible) {
+	checkWidget ();
+	if (this.visible == visible) return;
+	if (visible) {
+		sendEvent (SWT.Show);
+		if (isDisposed ()) return;
+	}
+	this.visible = visible;
+	float /*double*/ width = image != null && visible ? image.handle.size().width + BORDER : 0;
+	item.setLength(width);
+	if (!visible) sendEvent (SWT.Hide);
+}
+
+void showMenu (Menu menu) {
+	display.trayItemMenu = menu;
+	item.popUpStatusItemMenu(menu.nsMenu);
+}
+
+void showMenu () {
+	_setToolTipText (null);
+	Display display = this.display;
+	display.currentTrayItem = this;
+	sendEvent (SWT.MenuDetect);
+	if (!isDisposed ()) display.runPopups();
+	display.currentTrayItem = null;
+	if (isDisposed ()) return;
+	_setToolTipText (toolTipText);
+}
+
+void displayMenu () {
+	if (highlight) {
+		view.display();
+		display.trayItemMenu = null;
+		showMenu();
+		if (display.trayItemMenu != null) {
+			display.trayItemMenu = null;
+			highlight = false;
+			view.setNeedsDisplay(true);
+		}
+	}
+}
+
+boolean shouldShowMenu (NSEvent event) {
+	if (!hooks(SWT.MenuDetect)) return false;
+	switch ((int)/*64*/event.type()) {
+		case OS.NSRightMouseDown: return true;
+		case OS.NSLeftMouseDown:
+			if (!(hooks(SWT.Selection) || hooks(SWT.DefaultSelection))) {
+				return true;
+			}
+			if ((event.modifierFlags() & OS.NSDeviceIndependentModifierFlagsMask) == OS.NSControlKeyMask) {
+				return true;
+			}
+			return false;
+		case OS.NSLeftMouseDragged:
+		case OS.NSRightMouseDragged:
+			return true;
+	}
+	return false;
+}
+
+void mouseDown(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	NSEvent nsEvent = new NSEvent(theEvent);
+	highlight = true;
+	view.setNeedsDisplay(true);
+	if (shouldShowMenu(nsEvent)) displayMenu();
+}
+
+void mouseDragged(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	NSEvent nsEvent = new NSEvent(theEvent);
+	NSRect frame = view.frame();
+	highlight = OS.NSPointInRect(nsEvent.locationInWindow(), frame);
+	view.setNeedsDisplay(true);
+	if (shouldShowMenu(nsEvent)) displayMenu();
+}
+
+void mouseUp(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (highlight) {
+		NSEvent nsEvent = new NSEvent(theEvent);
+		if (nsEvent.type() == OS.NSLeftMouseUp) {
+			postEvent(nsEvent.clickCount() == 2 ? SWT.DefaultSelection : SWT.Selection);
+		}
+	}
+	highlight = false;
+	view.setNeedsDisplay(true);
+}
+
+void rightMouseDown(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	mouseDown(id, sel, theEvent);
+}
+
+void rightMouseUp(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	mouseUp(id, sel, theEvent);
+}
+
+void rightMouseDragged(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	mouseDragged(id, sel, theEvent);
+}
+
+void drawRect(int /*long*/ id, int /*long*/ sel, NSRect rect) {
+	item.drawStatusBarBackgroundInRect(rect, highlight);
+	super.drawRect(id, sel, rect);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tree.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tree.java
new file mode 100755
index 0000000..f300eb4
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tree.java
@@ -0,0 +1,2971 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.accessibility.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+/**
+ * Instances of this class provide a selectable user interface object
+ * that displays a hierarchy of items and issues notification when an
+ * item in the hierarchy is selected.
+ * <p>
+ * The item children that may be added to instances of this class
+ * must be of type <code>TreeItem</code>.
+ * </p><p>
+ * Style <code>VIRTUAL</code> is used to create a <code>Tree</code> whose
+ * <code>TreeItem</code>s are to be populated by the client on an on-demand basis
+ * instead of up-front.  This can provide significant performance improvements for
+ * trees that are very large or for which <code>TreeItem</code> population is
+ * expensive (for example, retrieving values from an external source).
+ * </p><p>
+ * Here is an example of using a <code>Tree</code> with style <code>VIRTUAL</code>:
+ * <code><pre>
+ *  final Tree tree = new Tree(parent, SWT.VIRTUAL | SWT.BORDER);
+ *  tree.setItemCount(20);
+ *  tree.addListener(SWT.SetData, new Listener() {
+ *      public void handleEvent(Event event) {
+ *          TreeItem item = (TreeItem)event.item;
+ *          TreeItem parentItem = item.getParentItem();
+ *          String text = null;
+ *          if (parentItem == null) {
+ *              text = "node " + tree.indexOf(item);
+ *          } else {
+ *              text = parentItem.getText() + " - " + parentItem.indexOf(item);
+ *          }
+ *          item.setText(text);
+ *          System.out.println(text);
+ *          item.setItemCount(10);
+ *      }
+ *  });
+ * </pre></code>
+ * </p><p>
+ * Note that although this class is a subclass of <code>Composite</code>,
+ * it does not normally make sense to add <code>Control</code> children to
+ * it, or set a layout on it, unless implementing something like a cell
+ * editor.
+ * </p><p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>SINGLE, MULTI, CHECK, FULL_SELECTION, VIRTUAL, NO_SCROLL</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection, DefaultSelection, Collapse, Expand, SetData, MeasureItem, EraseItem, PaintItem</dd>
+ * </dl>
+ * </p><p>
+ * Note: Only one of the styles SINGLE and MULTI may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tree">Tree, TreeItem, TreeColumn snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Tree extends Composite {
+	NSTableColumn firstColumn, checkColumn;
+	NSTextFieldCell dataCell;
+	NSButtonCell buttonCell;
+	NSTableHeaderView headerView;
+	TreeItem [] items;
+	int itemCount;
+	TreeColumn [] columns;
+	TreeColumn sortColumn;
+	int columnCount;
+	int sortDirection;
+	boolean ignoreExpand, ignoreSelect, ignoreRedraw, reloadPending, drawExpansion;
+	Rectangle imageBounds;
+	TreeItem insertItem;
+	boolean insertBefore;
+
+	static int NEXT_ID;
+
+	static final int FIRST_COLUMN_MINIMUM_WIDTH = 5;
+	static final int IMAGE_GAP = 3;
+	static final int TEXT_GAP = 2;
+	static final int CELL_GAP = 1;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#SINGLE
+ * @see SWT#MULTI
+ * @see SWT#CHECK
+ * @see SWT#FULL_SELECTION
+ * @see SWT#VIRTUAL
+ * @see SWT#NO_SCROLL
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Tree (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+void _addListener (int eventType, Listener listener) {
+	super._addListener (eventType, listener);
+	clearCachedWidth (items);
+}
+
+TreeItem _getItem (TreeItem parentItem, int index, boolean create) {
+	int count;
+	TreeItem[] items;
+	if (parentItem != null) {
+		count = parentItem.itemCount;
+		items = parentItem.items;
+	} else {
+		count = this.itemCount;
+		items = this.items;
+	}
+	if (index < 0 || index >= count) return null;
+	TreeItem item = items [index]; 
+	if (item != null || (style & SWT.VIRTUAL) == 0 || !create) return item;
+	item = new TreeItem (this, parentItem, SWT.NONE, index, false);
+	items [index] = item;
+	return item;
+}
+
+int /*long*/ accessibilityAttributeValue (int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+
+	if (accessible != null) {
+		NSString attribute = new NSString(arg0);
+		id returnValue = accessible.internal_accessibilityAttributeValue(attribute, ACC.CHILDID_SELF);
+		if (returnValue != null) return returnValue.id;
+	}
+	
+	NSString attributeName = new NSString(arg0);
+	
+	// Accessibility Verifier queries for a title or description.  NSOutlineView doesn't
+	// seem to return either, so we return a default description value here.
+	if (attributeName.isEqualToString (OS.NSAccessibilityDescriptionAttribute)) {
+		return NSString.stringWith("").id;
+	}
+	
+	return super.accessibilityAttributeValue(id, sel, arg0);
+}
+
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the user changes the receiver's selection, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * When <code>widgetSelected</code> is called, the item field of the event object is valid.
+ * If the receiver has the <code>SWT.CHECK</code> style and the check selection changes,
+ * the event object detail field contains the value <code>SWT.CHECK</code>.
+ * <code>widgetDefaultSelected</code> is typically called when an item is double-clicked.
+ * The item field of the event object is valid for default selection, but the detail field is not used.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the user changes the receiver's selection
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection, typedListener);
+	addListener (SWT.DefaultSelection, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when an item in the receiver is expanded or collapsed
+ * by sending it one of the messages defined in the <code>TreeListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see TreeListener
+ * @see #removeTreeListener
+ */
+public void addTreeListener(TreeListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Expand, typedListener);
+	addListener (SWT.Collapse, typedListener);
+}
+
+int calculateWidth (TreeItem[] items, int index, GC gc, boolean recurse) {
+	if (items == null) return 0;
+	int width = 0;
+	for (int i=0; i<items.length; i++) {
+		TreeItem item = items [i];
+		if (item != null) {
+			int itemWidth = item.calculateWidth (index, gc);
+			width = Math.max (width, itemWidth);
+			if (recurse && item.getExpanded ()) {
+				width = Math.max (width, calculateWidth (item.items, index, gc, recurse));
+			}
+		}
+	}
+	return width;
+}
+
+NSSize cellSize (int /*long*/ id, int /*long*/ sel) {
+	NSSize size = super.cellSize(id, sel);
+	NSImage image = new NSCell(id).image();
+	if (image != null) size.width += imageBounds.width + IMAGE_GAP;
+	if (hooks(SWT.MeasureItem)) {
+		int /*long*/ [] outValue = new int /*long*/ [1];
+		OS.object_getInstanceVariable(id, Display.SWT_ROW, outValue);
+		TreeItem item = (TreeItem) display.getWidget (outValue [0]);
+		OS.object_getInstanceVariable(id, Display.SWT_COLUMN, outValue);
+		int /*long*/ tableColumn = outValue[0];
+		int columnIndex = 0;
+		for (int i=0; i<columnCount; i++) {
+			if (columns [i].nsColumn.id == tableColumn) {
+				columnIndex = i;
+				break;
+			}
+		}
+		sendMeasureItem (item, columnIndex, size);
+	}
+	return size;
+}
+
+boolean canDragRowsWithIndexes_atPoint(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
+	NSPoint clickPoint = new NSPoint();
+	OS.memmove(clickPoint, arg1, NSPoint.sizeof);
+	NSOutlineView tree = (NSOutlineView)view;
+	
+	// If the current row is not selected and the user is not attempting to modify the selection, select the row first.
+	int /*long*/ row = tree.rowAtPoint(clickPoint);
+	int /*long*/ modifiers = NSApplication.sharedApplication().currentEvent().modifierFlags();
+	
+	boolean drag = (state & DRAG_DETECT) != 0 && hooks (SWT.DragDetect);
+	if (drag) {
+		if (!tree.isRowSelected(row) && (modifiers & (OS.NSCommandKeyMask | OS.NSShiftKeyMask | OS.NSAlternateKeyMask | OS.NSControlKeyMask)) == 0) {
+			NSIndexSet set = (NSIndexSet)new NSIndexSet().alloc();
+			set = set.initWithIndex(row);
+			tree.selectRowIndexes (set, false);
+			set.release();
+		}
+	}
+	
+	// The clicked row must be selected to initiate a drag.
+	return (tree.isRowSelected(row) && drag);
+}
+
+boolean checkData (TreeItem item) {
+	if (item.cached) return true;
+	if ((style & SWT.VIRTUAL) != 0) {
+		item.cached = true;
+		Event event = new Event ();
+		TreeItem parentItem = item.getParentItem ();
+		event.item = item;
+		event.index = parentItem == null ? indexOf (item) : parentItem.indexOf (item);
+		ignoreRedraw = true;
+		sendEvent (SWT.SetData, event);
+		//widget could be disposed at this point
+		ignoreRedraw = false;
+		if (isDisposed () || item.isDisposed ()) return false;
+		if (!setScrollWidth (item)) item.redraw (-1);
+	}
+	return true;
+}
+
+static int checkStyle (int style) {
+	/*
+	* Feature in Windows.  Even when WS_HSCROLL or
+	* WS_VSCROLL is not specified, Windows creates
+	* trees and tables with scroll bars.  The fix
+	* is to set H_SCROLL and V_SCROLL.
+	* 
+	* NOTE: This code appears on all platforms so that
+	* applications have consistent scroll bar behavior.
+	*/
+	if ((style & SWT.NO_SCROLL) == 0) {
+		style |= SWT.H_SCROLL | SWT.V_SCROLL;
+	}
+	/* This platform is always FULL_SELECTION */
+	style |= SWT.FULL_SELECTION;
+	return checkBits (style, SWT.SINGLE, SWT.MULTI, 0, 0, 0, 0);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+void checkItems () {
+	if (!reloadPending) return;
+	reloadPending = false;
+	TreeItem[] selectedItems = getSelection ();
+	((NSOutlineView)view).reloadData ();
+	selectItems (selectedItems, true);
+	ignoreExpand = true;
+	for (int i = 0; i < itemCount; i++) {
+		if (items[i] != null) items[i].updateExpanded ();
+	}
+	ignoreExpand = false;
+}
+
+void clear (TreeItem parentItem, int index, boolean all) {
+	TreeItem item = _getItem (parentItem, index, false);
+	if (item != null) {
+		item.clear();
+		item.redraw (-1);
+		if (all) {
+			clearAll (item, true);
+		}
+	}
+}
+
+void clearAll (TreeItem parentItem, boolean all) {
+	int count = getItemCount (parentItem);
+	if (count == 0) return;
+	TreeItem [] children = parentItem == null ? items : parentItem.items; 
+	for (int i=0; i<count; i++) {
+		TreeItem item = children [i];
+		if (item != null) {
+			item.clear ();
+			item.redraw (-1);
+			if (all) clearAll (item, true);
+		}
+	}
+}
+
+/**
+ * Clears the item at the given zero-relative index in the receiver.
+ * The text, icon and other attributes of the item are set to the default
+ * value.  If the tree was created with the <code>SWT.VIRTUAL</code> style,
+ * these attributes are requested again as needed.
+ *
+ * @param index the index of the item to clear
+ * @param all <code>true</code> if all child items of the indexed item should be
+ * cleared recursively, and <code>false</code> otherwise
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see SWT#VIRTUAL
+ * @see SWT#SetData
+ * 
+ * @since 3.2
+ */
+public void clear (int index, boolean all) {
+	checkWidget ();
+	int count = getItemCount ();
+	if (index < 0 || index >= count) error (SWT.ERROR_INVALID_RANGE);
+	clear (null, index, all);
+}
+
+/**
+ * Clears all the items in the receiver. The text, icon and other
+ * attributes of the items are set to their default values. If the
+ * tree was created with the <code>SWT.VIRTUAL</code> style, these
+ * attributes are requested again as needed.
+ * 
+ * @param all <code>true</code> if all child items should be cleared
+ * recursively, and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see SWT#VIRTUAL
+ * @see SWT#SetData
+ * 
+ * @since 3.2
+ */
+public void clearAll (boolean all) {
+	checkWidget ();
+	clearAll (null, all);
+}
+
+void clearCachedWidth (TreeItem[] items) {
+	if (items == null) return;
+	for (int i = 0; i < items.length; i++) {
+		TreeItem item = items [i];
+		if (item == null) break;
+		item.width = -1;
+		clearCachedWidth (item.items);
+	}
+}
+
+void collapseItem_collapseChildren (int /*long*/ id, int /*long*/ sel, int /*long*/ itemID, boolean children) {
+	TreeItem item = (TreeItem)display.getWidget(itemID);
+	if (!ignoreExpand) item.sendExpand (false, children);
+	ignoreExpand = true;
+	super.collapseItem_collapseChildren (id, sel, itemID, children);
+	ignoreExpand = false;
+	if (isDisposed() || item.isDisposed()) return;
+	setScrollWidth ();
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget ();
+	int width = 0, height = 0;
+	if (wHint == SWT.DEFAULT) {
+		if (columnCount != 0) {
+			for (int i=0; i<columnCount; i++) {
+				width += columns [i].getWidth ();
+			}
+		} else {
+			GC gc = new GC (this);
+			width = calculateWidth (items, 0, gc, true) + CELL_GAP;
+			gc.dispose ();
+		}
+		if ((style & SWT.CHECK) != 0) width += getCheckColumnWidth ();
+	} else {
+		width = wHint;
+	}
+	if (hHint == SWT.DEFAULT) {
+		height = (int)/*64*/((NSOutlineView) view).numberOfRows () * getItemHeight () + getHeaderHeight ();
+	} else {
+		height = hHint;
+	}
+	if (width <= 0) width = DEFAULT_WIDTH;
+	if (height <= 0) height = DEFAULT_HEIGHT;
+	Rectangle rect = computeTrim (0, 0, width, height);
+	return new Point (rect.width, rect.height);
+}
+
+void createColumn (TreeItem item, int index) {
+	if (item.items != null) {
+		for (int i = 0; i < item.items.length; i++) {
+			if (item.items[i] != null) createColumn (item.items[i], index);
+		}
+	}
+	String [] strings = item.strings;
+	if (strings != null) {
+		String [] temp = new String [columnCount];
+		System.arraycopy (strings, 0, temp, 0, index);
+		System.arraycopy (strings, index, temp, index+1, columnCount-index-1);
+		temp [index] = "";
+		item.strings = temp;
+	}
+	if (index == 0) item.text = "";
+	Image [] images = item.images;
+	if (images != null) {
+		Image [] temp = new Image [columnCount];
+		System.arraycopy (images, 0, temp, 0, index);
+		System.arraycopy (images, index, temp, index+1, columnCount-index-1);
+		item.images = temp;
+	}
+	if (index == 0) item.image = null;
+	Color [] cellBackground = item.cellBackground;
+	if (cellBackground != null) {
+		Color [] temp = new Color [columnCount];
+		System.arraycopy (cellBackground, 0, temp, 0, index);
+		System.arraycopy (cellBackground, index, temp, index+1, columnCount-index-1);
+		item.cellBackground = temp;
+	}
+	Color [] cellForeground = item.cellForeground;
+	if (cellForeground != null) {
+		Color [] temp = new Color [columnCount];
+		System.arraycopy (cellForeground, 0, temp, 0, index);
+		System.arraycopy (cellForeground, index, temp, index+1, columnCount-index-1);
+		item.cellForeground = temp;
+	}
+	Font [] cellFont = item.cellFont;
+	if (cellFont != null) {
+		Font [] temp = new Font [columnCount];
+		System.arraycopy (cellFont, 0, temp, 0, index);
+		System.arraycopy (cellFont, index, temp, index+1, columnCount-index-1);
+		item.cellFont = temp;
+	}
+}
+
+void createHandle () {
+	NSScrollView scrollWidget = (NSScrollView) new SWTScrollView ().alloc ();
+	scrollWidget.init ();
+	scrollWidget.setHasHorizontalScroller ((style & SWT.H_SCROLL) != 0);
+	scrollWidget.setHasVerticalScroller ((style & SWT.V_SCROLL) != 0);
+	scrollWidget.setAutohidesScrollers (true);
+	scrollWidget.setBorderType(hasBorder () ? OS.NSBezelBorder : OS.NSNoBorder);
+	
+	NSOutlineView widget = (NSOutlineView) new SWTOutlineView ().alloc ();
+	/*
+	* Bug in Cocoa.  Calling init, instead of initWithFrame on an NSOutlineView
+	* cause the NSOutlineView to leak some memory.  The work around is to call 
+	* initWithFrame and pass an empty NSRect instead of calling init. 
+	*/
+	widget.initWithFrame(new NSRect());
+	widget.setAllowsMultipleSelection ((style & SWT.MULTI) != 0);
+	widget.setAllowsColumnReordering (false);
+	widget.setAutoresizesOutlineColumn (false);
+	widget.setAutosaveExpandedItems (true);
+	widget.setDataSource (widget);
+	widget.setDelegate (widget);
+	widget.setColumnAutoresizingStyle (OS.NSTableViewNoColumnAutoresizing);
+	NSSize spacing = new NSSize();
+	spacing.width = spacing.height = CELL_GAP;
+	widget.setIntercellSpacing(spacing);
+	widget.setDoubleAction (OS.sel_sendDoubleSelection);
+	if (!hasBorder ()) widget.setFocusRingType (OS.NSFocusRingTypeNone);
+	
+	headerView = (NSTableHeaderView)new SWTTableHeaderView ().alloc ().init ();
+	widget.setHeaderView (null);
+	
+	NSString str = NSString.stringWith ("");  //$NON-NLS-1$
+	if ((style & SWT.CHECK) != 0) {
+		checkColumn = (NSTableColumn) new NSTableColumn ().alloc ();
+		checkColumn = checkColumn.initWithIdentifier(NSString.stringWith(String.valueOf(++NEXT_ID)));
+		checkColumn.headerCell ().setTitle (str);
+		widget.addTableColumn (checkColumn);
+		widget.setOutlineTableColumn (checkColumn);
+		checkColumn.setResizingMask (OS.NSTableColumnNoResizing);
+		checkColumn.setEditable (false);
+		int /*long*/ cls = NSButton.cellClass (); /* use our custom cell class */
+		buttonCell = new NSButtonCell (OS.class_createInstance (cls, 0));
+		buttonCell.init ();
+		checkColumn.setDataCell (buttonCell);
+		buttonCell.setButtonType (OS.NSSwitchButton);
+		buttonCell.setImagePosition (OS.NSImageOnly);
+		buttonCell.setAllowsMixedState (true);
+		checkColumn.setWidth (getCheckColumnWidth ());
+	}
+	
+	firstColumn = (NSTableColumn) new NSTableColumn ().alloc ();
+	firstColumn = firstColumn.initWithIdentifier(NSString.stringWith(String.valueOf(++NEXT_ID)));
+	/*
+	* Feature in Cocoa.  If a column's width is too small to show any content
+	* then outlineView_objectValueForTableColumn_byItem is never invoked to
+	* query for item values, which is a problem for VIRTUAL Trees.  The
+	* workaround is to ensure that, for 0-column Trees, the internal first
+	* column always has a minimal width that makes this call come in.
+	*/
+	firstColumn.setMinWidth (FIRST_COLUMN_MINIMUM_WIDTH);
+	firstColumn.setWidth(0);
+	firstColumn.headerCell ().setTitle (str);
+	widget.addTableColumn (firstColumn);
+	widget.setOutlineTableColumn (firstColumn);
+	dataCell = (NSTextFieldCell)new SWTImageTextCell ().alloc ().init ();
+	dataCell.setLineBreakMode(OS.NSLineBreakByClipping);
+	firstColumn.setDataCell (dataCell);
+	
+	scrollView = scrollWidget;
+	view = widget;
+}
+
+void createItem (TreeColumn column, int index) {
+	if (!(0 <= index && index <= columnCount)) error (SWT.ERROR_INVALID_RANGE);
+	if (index == 0) {
+		// first column must be left aligned
+		column.style &= ~(SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+		column.style |= SWT.LEFT;
+	}
+	if (columnCount == columns.length) {
+		TreeColumn [] newColumns = new TreeColumn [columnCount + 4];
+		System.arraycopy (columns, 0, newColumns, 0, columns.length);
+		columns = newColumns;
+	}
+	NSTableColumn nsColumn;
+	if (columnCount == 0) {
+		//TODO - clear attributes, alignment etc.
+		nsColumn = firstColumn;
+		nsColumn.setMinWidth (0);
+		firstColumn = null;
+	} else {
+		//TODO - set attributes, alignment etc.
+		NSOutlineView outlineView = (NSOutlineView)view;
+		NSString str = NSString.stringWith ("");
+		nsColumn = (NSTableColumn) new NSTableColumn ().alloc ();
+		nsColumn = nsColumn.initWithIdentifier(NSString.stringWith(String.valueOf(++NEXT_ID)));
+		nsColumn.setMinWidth(0);
+		nsColumn.headerCell ().setTitle (str);
+		outlineView.addTableColumn (nsColumn);
+		int checkColumn = (style & SWT.CHECK) != 0 ? 1 : 0;
+		outlineView.moveColumn (columnCount + checkColumn, index + checkColumn);
+		nsColumn.setDataCell (dataCell);
+		if (index == 0) {
+			outlineView.setOutlineTableColumn (nsColumn);
+		}
+	}
+	column.createJNIRef ();
+	NSTableHeaderCell headerCell = (NSTableHeaderCell)new SWTTableHeaderCell ().alloc ().init ();
+	nsColumn.setHeaderCell (headerCell);
+	display.addWidget (headerCell, column);
+	column.nsColumn = nsColumn;
+	nsColumn.setWidth (0);
+	System.arraycopy (columns, index, columns, index + 1, columnCount++ - index);
+	columns [index] = column;
+	for (int i = 0; i < itemCount; i++) {
+		TreeItem item = items [i];
+		if (item != null) {
+			if (columnCount > 1) {
+				createColumn (item, index);
+			}
+		}
+	}
+}
+
+void createItem (TreeItem item, TreeItem parentItem, int index) {
+	int count;
+	TreeItem [] items;
+	if (parentItem != null) {
+		count = parentItem.itemCount;
+		items = parentItem.items;
+	} else {
+		count = this.itemCount;
+		items = this.items;
+	}
+	if (index == -1) index = count;
+	if (!(0 <= index && index <= count)) error (SWT.ERROR_INVALID_RANGE);
+	if (count == items.length) {
+		TreeItem [] newItems = new TreeItem [items.length + 4];
+		System.arraycopy (items, 0, newItems, 0, items.length);
+		items = newItems;
+		if (parentItem != null) {
+			parentItem.items = items;
+		} else {
+			this.items = items;
+		}
+	}
+	System.arraycopy (items, index, items, index + 1, count++ - index);
+	items [index] = item;
+	item.items = new TreeItem [4];
+	SWTTreeItem handle = (SWTTreeItem) new SWTTreeItem ().alloc ().init ();
+	item.handle = handle;
+	item.createJNIRef ();
+	item.register ();
+	if (parentItem != null) {
+		parentItem.itemCount = count;
+	} else {
+		this.itemCount = count;
+	}
+	ignoreExpand = true;
+	reloadItem (parentItem, true);
+	if (parentItem != null && parentItem.itemCount == 1 && parentItem.expanded) {
+		((NSOutlineView)view).expandItem (parentItem.handle);
+	}
+	ignoreExpand = false;
+}
+
+void createWidget () {
+	super.createWidget ();
+	items = new TreeItem [4];
+	columns = new TreeColumn [4];
+}
+
+Color defaultBackground () {
+	return display.getWidgetColor (SWT.COLOR_LIST_BACKGROUND);
+}
+
+NSFont defaultNSFont () {
+	return display.outlineViewFont;
+}
+
+Color defaultForeground () {
+	return display.getWidgetColor (SWT.COLOR_LIST_FOREGROUND);
+}
+
+/**
+ * Deselects all selected items in the receiver.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void deselectAll () {
+	checkWidget ();
+	NSTableView widget = (NSOutlineView) view;
+	ignoreSelect = true;
+	widget.deselectAll (null);
+	ignoreSelect = false;
+}
+
+void deregister () {
+	super.deregister ();
+	display.removeWidget (headerView);
+	display.removeWidget (dataCell);
+	if (buttonCell != null) display.removeWidget (buttonCell);
+}
+
+/**
+ * Deselects an item in the receiver.  If the item was already
+ * deselected, it remains deselected.
+ *
+ * @param item the item to be deselected
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.4
+ */
+public void deselect (TreeItem item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (item.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	NSOutlineView widget = (NSOutlineView)view;
+	int /*long*/ row = widget.rowForItem(item.handle);
+	ignoreSelect = true;
+	widget.deselectRow (row);
+	ignoreSelect = false;
+}
+
+void destroyItem (TreeColumn column) {
+	int index = 0;
+	while (index < columnCount) {
+		if (columns [index] == column) break;
+		index++;
+	}
+	for (int i=0; i<items.length; i++) {
+		TreeItem item = items [i];
+		if (item != null) {
+			if (columnCount <= 1) {
+				item.strings = null;
+				item.images = null;
+				item.cellBackground = null;
+				item.cellForeground = null;
+				item.cellFont = null;
+			} else {
+				if (item.strings != null) {
+					String [] strings = item.strings;
+					if (index == 0) {
+						item.text = strings [1] != null ? strings [1] : "";
+					}
+					String [] temp = new String [columnCount - 1];
+					System.arraycopy (strings, 0, temp, 0, index);
+					System.arraycopy (strings, index + 1, temp, index, columnCount - 1 - index);
+					item.strings = temp;
+				} else {
+					if (index == 0) item.text = "";
+				}
+				if (item.images != null) {
+					Image [] images = item.images;
+					if (index == 0) item.image = images [1];
+					Image [] temp = new Image [columnCount - 1];
+					System.arraycopy (images, 0, temp, 0, index);
+					System.arraycopy (images, index + 1, temp, index, columnCount - 1 - index);
+					item.images = temp;
+				} else {
+					if (index == 0) item.image = null;
+				}
+				if (item.cellBackground != null) {
+					Color [] cellBackground = item.cellBackground;
+					Color [] temp = new Color [columnCount - 1];
+					System.arraycopy (cellBackground, 0, temp, 0, index);
+					System.arraycopy (cellBackground, index + 1, temp, index, columnCount - 1 - index);
+					item.cellBackground = temp;
+				}
+				if (item.cellForeground != null) {
+					Color [] cellForeground = item.cellForeground;
+					Color [] temp = new Color [columnCount - 1];
+					System.arraycopy (cellForeground, 0, temp, 0, index);
+					System.arraycopy (cellForeground, index + 1, temp, index, columnCount - 1 - index);
+					item.cellForeground = temp;
+				}
+				if (item.cellFont != null) {
+					Font [] cellFont = item.cellFont;
+					Font [] temp = new Font [columnCount - 1];
+					System.arraycopy (cellFont, 0, temp, 0, index);
+					System.arraycopy (cellFont, index + 1, temp, index, columnCount - 1 - index);
+					item.cellFont = temp;
+				}
+			}
+		}
+	}
+
+	int oldIndex = indexOf (column.nsColumn);
+
+	System.arraycopy (columns, index + 1, columns, index, --columnCount - index);
+	columns [columnCount] = null;
+	if (columnCount == 0) {
+		//TODO - reset attributes
+		firstColumn = column.nsColumn;
+		firstColumn.retain ();
+		/*
+		* Feature in Cocoa.  If a column's width is too small to show any content
+		* then outlineView_objectValueForTableColumn_byItem is never invoked to
+		* query for item values, which is a problem for VIRTUAL Trees.  The
+		* workaround is to ensure that, for 0-column Trees, the internal first
+		* column always has a minimal width that makes this call come in.
+		*/
+		firstColumn.setMinWidth (FIRST_COLUMN_MINIMUM_WIDTH);
+		setScrollWidth ();
+	} else {
+		if (index == 0) {
+			((NSOutlineView)view).setOutlineTableColumn(columns[0].nsColumn);
+		}
+		((NSOutlineView)view).removeTableColumn(column.nsColumn);
+	}
+
+	NSArray array = ((NSOutlineView)view).tableColumns ();
+	int arraySize = (int)/*64*/array.count ();
+	for (int i = oldIndex; i < arraySize; i++) {
+		int /*long*/ columnId = array.objectAtIndex (i).id;
+		for (int j = 0; j < columnCount; j++) {
+			if (columns[j].nsColumn.id == columnId) {
+				columns [j].sendEvent (SWT.Move);
+				break;
+			}
+		}
+	}
+}
+
+void destroyItem (TreeItem item) {
+	int count;
+	TreeItem[] items;
+	TreeItem parentItem = item.parentItem;
+	if (parentItem != null) {
+		count = parentItem.itemCount;
+		items = parentItem.items;
+	} else {
+		count = this.itemCount;
+		items = this.items;
+	}
+	int index = 0;
+	while (index < count) {
+		if (items [index] == item) break;
+		index++;
+	}
+	System.arraycopy (items, index + 1, items, index, --count - index);
+	items [count] = null;
+	if (parentItem != null) {
+		parentItem.itemCount = count;
+	} else {
+		this.itemCount = count;
+	}
+	reloadItem (parentItem, true);
+	setScrollWidth ();
+	if (this.itemCount == 0) imageBounds = null;
+}
+
+boolean dragDetect(int x, int y, boolean filter, boolean[] consume) {
+	// Let Cocoa determine if a drag is starting and fire the notification when we get the callback.
+	return false;
+}
+
+void drawInteriorWithFrame_inView (int /*long*/ id, int /*long*/ sel, NSRect rect, int /*long*/ view) {
+	boolean hooksErase = hooks (SWT.EraseItem);
+	boolean hooksPaint = hooks (SWT.PaintItem);
+	boolean hooksMeasure = hooks (SWT.MeasureItem);
+
+	NSTextFieldCell cell = new NSTextFieldCell (id);
+
+	NSOutlineView widget = (NSOutlineView)this.view;
+	int /*long*/ [] outValue = new int /*long*/ [1];
+	OS.object_getInstanceVariable(id, Display.SWT_ROW, outValue);
+	TreeItem item = (TreeItem) display.getWidget (outValue [0]);
+	int /*long*/ rowIndex = widget.rowForItem(item.handle);
+	OS.object_getInstanceVariable(id, Display.SWT_COLUMN, outValue);
+	int /*long*/ tableColumn = outValue[0];
+	int /*long*/ nsColumnIndex = widget.tableColumns().indexOfObjectIdenticalTo(new id(tableColumn));
+	int columnIndex = 0;
+	for (int i=0; i<columnCount; i++) {
+		if (columns [i].nsColumn.id == tableColumn) {
+			columnIndex = i;
+			break;
+		}
+	}
+
+	Color background = item.cellBackground != null ? item.cellBackground [columnIndex] : null;
+	if (background == null) background = item.background;
+	boolean drawBackground = background != null;
+	boolean drawForeground = true;
+	boolean isSelected = cell.isHighlighted();
+	boolean drawSelection = isSelected;
+	boolean hasFocus = hooksErase && hasFocus ();
+
+	Color selectionBackground = null, selectionForeground = null;
+	if (isSelected && (hooksErase || hooksPaint)) {
+		selectionForeground = Color.cocoa_new(display, hasFocus ? display.alternateSelectedControlTextColor : display.selectedControlTextColor);
+		selectionBackground = Color.cocoa_new(display, hasFocus ? display.alternateSelectedControlColor : display.secondarySelectedControlColor);
+	}
+	
+	NSSize contentSize = super.cellSize(id, OS.sel_cellSize);
+	NSImage image = cell.image();
+	if (image != null) contentSize.width += imageBounds.width + IMAGE_GAP;
+	int contentWidth = (int)Math.ceil (contentSize.width);
+	NSSize spacing = widget.intercellSpacing();
+	int itemHeight = (int)Math.ceil (widget.rowHeight() + spacing.height);
+	
+	NSRect cellRect = widget.rectOfColumn (nsColumnIndex);
+	cellRect.y = rect.y;
+	cellRect.height = rect.height + spacing.height;
+	if (columnCount == 0) {
+		NSRect rowRect = widget.rectOfRow (rowIndex);
+		cellRect.width = rowRect.width;
+	}
+	float /*double*/ offsetX = 0, offsetY = 0;
+	if (hooksPaint || hooksErase) {
+		NSRect frameCell = widget.frameOfCellAtColumn(nsColumnIndex, rowIndex);
+		offsetX = rect.x - frameCell.x;
+		offsetY = rect.y - frameCell.y;
+		if (drawExpansion) {
+			offsetX -= 0.5f;
+			offsetY -= 0.5f;
+		}
+	}
+	int itemX = (int)(rect.x - offsetX), itemY = (int)(rect.y - offsetY);
+	NSGraphicsContext context = NSGraphicsContext.currentContext ();
+	
+	if (hooksMeasure) {
+		sendMeasureItem(item, columnIndex, contentSize);
+	}
+
+	Color userForeground = null;
+	if (hooksErase) {
+		context.saveGraphicsState();
+		NSAffineTransform transform = NSAffineTransform.transform();
+		transform.translateXBy(offsetX, offsetY);
+		transform.concat();
+
+		GCData data = new GCData ();
+		data.paintRect = cellRect;
+		GC gc = GC.cocoa_new (this, data);
+		gc.setFont (item.getFont (columnIndex));
+		if (isSelected) {
+			gc.setForeground (selectionForeground);
+			gc.setBackground (selectionBackground);
+		} else {
+			gc.setForeground (item.getForeground (columnIndex));
+			gc.setBackground (item.getBackground (columnIndex));
+		}
+		if (!drawExpansion) {
+			gc.setClipping ((int)(cellRect.x - offsetX), (int)(cellRect.y - offsetY), (int)cellRect.width, (int)cellRect.height);
+		}
+		Event event = new Event ();
+		event.item = item;
+		event.gc = gc;
+		event.index = columnIndex;
+		event.detail = SWT.FOREGROUND;
+		if (drawBackground) event.detail |= SWT.BACKGROUND;
+		if (isSelected) event.detail |= SWT.SELECTED;
+		event.x = (int)cellRect.x;
+		event.y = (int)cellRect.y;
+		event.width = (int)cellRect.width;
+		event.height = (int)cellRect.height;
+		sendEvent (SWT.EraseItem, event);
+		if (!event.doit) {
+			drawForeground = drawBackground = drawSelection = false; 
+		} else {
+			drawBackground = drawBackground && (event.detail & SWT.BACKGROUND) != 0;
+			drawForeground = (event.detail & SWT.FOREGROUND) != 0;
+			drawSelection = drawSelection && (event.detail & SWT.SELECTED) != 0;			
+		}
+		if (!drawSelection && isSelected) {
+			userForeground = Color.cocoa_new(display, gc.getForeground().handle);
+		}
+		gc.dispose ();
+		
+		context.restoreGraphicsState();
+
+		if (isDisposed ()) return;
+		if (item.isDisposed ()) return;
+
+		if (drawSelection && ((style & SWT.HIDE_SELECTION) == 0 || hasFocus)) {
+			cellRect.height -= spacing.height;
+			callSuper (widget.id, OS.sel_highlightSelectionInClipRect_, cellRect);
+			cellRect.height += spacing.height;
+		}
+	}
+
+	if (drawBackground && !drawSelection) {
+		context.saveGraphicsState ();
+		float /*double*/ [] colorRGB = background.handle;
+		NSColor color = NSColor.colorWithDeviceRed (colorRGB[0], colorRGB[1], colorRGB[2], 1f);
+		color.setFill ();
+		NSBezierPath.fillRect (cellRect);
+		context.restoreGraphicsState ();
+	}
+	
+	if (insertItem != null && !insertItem.isDisposed()) {
+		context.saveGraphicsState ();
+		NSRect contentRect = cell.titleRectForBounds (rect);
+		GCData data = new GCData ();
+		data.paintRect = contentRect;
+		GC gc = GC.cocoa_new (this, data);
+		gc.setClipping ((int)(contentRect.x - offsetX), (int)(contentRect.y - offsetY), (int)contentRect.width, (int)contentRect.height);
+		Rectangle itemRect = insertItem.getImageBounds(0).union(insertItem.getBounds());
+		Rectangle clientRect = getClientArea();
+		int x = clientRect.x + clientRect.width;
+		int posY = insertBefore ? itemRect.y : itemRect.y + itemRect.height - 1;
+		gc.drawLine(itemRect.x, posY, x, posY);
+		gc.dispose ();
+		context.restoreGraphicsState ();
+	}
+
+	if (drawForeground) {
+		if ((!drawExpansion || hooksMeasure) && image != null) {
+			NSRect destRect = new NSRect();
+			destRect.x = rect.x + IMAGE_GAP;
+			destRect.y = rect.y + (float)Math.ceil((rect.height - imageBounds.height) / 2);
+			destRect.width = imageBounds.width;
+			destRect.height = imageBounds.height;
+			NSRect srcRect = new NSRect();
+			NSSize size = image.size();
+			srcRect.width = size.width;
+			srcRect.height = size.height;
+			context.saveGraphicsState();
+			NSBezierPath.bezierPathWithRect(rect).addClip();
+			NSAffineTransform transform = NSAffineTransform.transform();
+			transform.scaleXBy(1, -1);
+			transform.translateXBy(0, -(destRect.height + 2 * destRect.y));
+			transform.concat();
+			image.drawInRect(destRect, srcRect, OS.NSCompositeSourceOver, 1);
+			context.restoreGraphicsState();
+			int imageWidth = imageBounds.width + IMAGE_GAP;
+			rect.x += imageWidth;
+			rect.width -= imageWidth;
+		}
+		cell.setHighlighted (false);
+		boolean callSuper = false;
+		if (userForeground != null) {
+			/*
+			* Bug in Cocoa.  For some reason, it is not possible to change the
+			* foreground color to black when the cell is highlighted. The text
+			* still draws white.  The fix is to draw the text and not call super.
+			*/
+			float /*double*/ [] color = userForeground.handle;
+			if (color[0] == 0 && color[1] == 0 && color[2] == 0 && color[3] == 1) {
+				NSMutableAttributedString newStr = new NSMutableAttributedString(cell.attributedStringValue().mutableCopy());
+				NSRange range = new NSRange();
+				range.length = newStr.length();
+				newStr.removeAttribute(OS.NSForegroundColorAttributeName, range);
+				NSRect newRect = new NSRect();
+				newRect.x = rect.x + TEXT_GAP;
+				newRect.y = rect.y;
+				newRect.width = rect.width - TEXT_GAP;
+				newRect.height = rect.height;
+				NSSize size = newStr.size();
+				if (newRect.height > size.height) {
+					newRect.y += (newRect.height - size.height) / 2;
+					newRect.height = size.height;
+				}
+				newStr.drawInRect(newRect);
+				newStr.release();
+			} else {
+				NSColor nsColor = NSColor.colorWithDeviceRed(color[0], color[1], color[2], color[3]);
+				cell.setTextColor(nsColor);
+				callSuper = true;
+			}			
+		} else {
+			callSuper = true;
+		}
+		if (callSuper) {
+			NSAttributedString attrStr = cell.attributedStringValue();
+			NSSize size = attrStr.size();
+			if (rect.height > size.height) {
+				rect.y += (rect.height - size.height) / 2;
+				rect.height = size.height;
+			}
+			super.drawInteriorWithFrame_inView(id, sel, rect, view);
+		}
+	}
+
+	if (hooksPaint) {
+		context.saveGraphicsState();
+		NSAffineTransform transform = NSAffineTransform.transform();
+		transform.translateXBy(offsetX, offsetY);
+		transform.concat();
+
+		GCData data = new GCData ();
+		data.paintRect = cellRect;
+		GC gc = GC.cocoa_new (this, data);
+		gc.setFont (item.getFont (columnIndex));
+		if (drawSelection) {
+			gc.setForeground (selectionForeground);
+			gc.setBackground (selectionBackground);
+		} else {
+			gc.setForeground (userForeground != null ? userForeground : item.getForeground (columnIndex));
+			gc.setBackground (item.getBackground (columnIndex));
+		}
+		if (!drawExpansion) {
+			gc.setClipping ((int)(cellRect.x - offsetX), (int)(cellRect.y - offsetY), (int)cellRect.width, (int)cellRect.height);
+		}
+		Event event = new Event ();
+		event.item = item;
+		event.gc = gc;
+		event.index = columnIndex;
+		if (drawForeground) event.detail |= SWT.FOREGROUND;
+		if (drawBackground) event.detail |= SWT.BACKGROUND;
+		if (drawSelection) event.detail |= SWT.SELECTED;
+		event.x = itemX;
+		event.y = itemY;
+		event.width = contentWidth;
+		event.height = itemHeight;
+		sendEvent (SWT.PaintItem, event);
+		gc.dispose ();
+
+		context.restoreGraphicsState();
+	}
+}
+
+void drawWithExpansionFrame_inView (int /*long*/ id, int /*long*/ sel, NSRect cellFrame, int /*long*/ view) {
+	drawExpansion = true;
+	super.drawWithExpansionFrame_inView(id, sel, cellFrame, view);
+	drawExpansion = false;
+}
+
+void expandItem_expandChildren (int /*long*/ id, int /*long*/ sel, int /*long*/ itemID, boolean children) {
+	TreeItem item = (TreeItem)display.getWidget(itemID);
+	if (!ignoreExpand) item.sendExpand (true, children);
+	ignoreExpand = true;
+	super.expandItem_expandChildren (id, sel, itemID, children);
+	ignoreExpand = false;
+	if (isDisposed() || item.isDisposed()) return;
+	if (!children) {
+		ignoreExpand = true;
+		TreeItem[] items = item.items;
+		for (int i = 0; i < item.itemCount; i++) {
+			if (items[i] != null) items[i].updateExpanded ();
+		}
+		ignoreExpand = false;
+	}
+	setScrollWidth (false, item.items, true);
+}
+
+NSRect expansionFrameWithFrame_inView(int /*long*/ id, int /*long*/ sel, NSRect cellRect, int /*long*/ view) {
+	if (toolTipText == null) {
+		NSRect rect = super.expansionFrameWithFrame_inView(id, sel, cellRect, view);
+		NSCell cell = new NSCell(id);
+		if (rect.width != 0 && rect.height != 0) {
+			if (hooks(SWT.MeasureItem)) {
+				NSSize cellSize = cell.cellSize();
+				cellRect.width = cellSize.width;
+				return cellRect;
+			}
+		} else {
+			NSRect expansionRect;
+			if (hooks(SWT.MeasureItem)) {
+				expansionRect = cellRect;
+				NSSize cellSize = cell.cellSize();
+				expansionRect.width = cellSize.width;
+			} else {
+				expansionRect = cell.titleRectForBounds(cellRect);
+				NSSize cellSize = super.cellSize(id, OS.sel_cellSize);
+				expansionRect.width = cellSize.width;
+			}
+			NSRect contentRect = scrollView.contentView().bounds();
+			OS.NSIntersectionRect(contentRect, expansionRect, contentRect);
+			if (!OS.NSEqualRects(expansionRect, contentRect)) {
+				return expansionRect;
+			}
+		}
+		return rect;
+	}
+	return new NSRect();
+}
+
+Widget findTooltip (NSPoint pt) {
+	NSTableView widget = (NSTableView)view;
+	NSTableHeaderView headerView = widget.headerView();
+	if (headerView != null) {
+		pt = headerView.convertPoint_fromView_ (pt, null);
+		int /*long*/ index = headerView.columnAtPoint (pt);
+		if (index != -1) {
+			NSArray nsColumns = widget.tableColumns ();
+			id nsColumn = nsColumns.objectAtIndex (index);
+			for (int i = 0; i < columnCount; i++) {
+				TreeColumn column = columns [i];
+				if (column.nsColumn.id == nsColumn.id) {
+					return column;
+				}
+			}
+		}
+	}
+	return super.findTooltip (pt);
+}
+
+int getCheckColumnWidth () {
+	return (int)checkColumn.dataCell().cellSize().width;
+}
+
+public Rectangle getClientArea () {
+	checkWidget ();
+	Rectangle rect = super.getClientArea ();
+	NSTableHeaderView headerView = ((NSTableView) view).headerView ();
+	if (headerView != null) {
+		int height =  (int) headerView.bounds ().height;
+		rect.y -= height;
+		rect.height += height;
+	}
+	return rect;
+}
+
+TreeColumn getColumn (id id) {
+	for (int i = 0; i < columnCount; i++) {
+		if (columns[i].nsColumn.id == id.id) {
+			return columns[i]; 
+		}
+	}
+	return null;
+}
+
+/**
+ * Returns the column at the given, zero-relative index in the
+ * receiver. Throws an exception if the index is out of range.
+ * Columns are returned in the order that they were created.
+ * If no <code>TreeColumn</code>s were created by the programmer,
+ * this method will throw <code>ERROR_INVALID_RANGE</code> despite
+ * the fact that a single column of data may be visible in the tree.
+ * This occurs when the programmer uses the tree like a list, adding
+ * items but never creating a column.
+ *
+ * @param index the index of the column to return
+ * @return the column at the given index
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Tree#getColumnOrder()
+ * @see Tree#setColumnOrder(int[])
+ * @see TreeColumn#getMoveable()
+ * @see TreeColumn#setMoveable(boolean)
+ * @see SWT#Move
+ * 
+ * @since 3.1
+ */
+public TreeColumn getColumn (int index) {
+	checkWidget ();
+	if (!(0 <=index && index < columnCount)) error (SWT.ERROR_INVALID_RANGE);
+	return columns [index];
+}
+
+/**
+ * Returns the number of columns contained in the receiver.
+ * If no <code>TreeColumn</code>s were created by the programmer,
+ * this value is zero, despite the fact that visually, one column
+ * of items may be visible. This occurs when the programmer uses
+ * the tree like a list, adding items but never creating a column.
+ *
+ * @return the number of columns
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public int getColumnCount () {
+	checkWidget ();
+	return columnCount;
+}
+
+/**
+ * Returns an array of zero-relative integers that map
+ * the creation order of the receiver's items to the
+ * order in which they are currently being displayed.
+ * <p>
+ * Specifically, the indices of the returned array represent
+ * the current visual order of the items, and the contents
+ * of the array represent the creation order of the items.
+ * </p><p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the current visual order of the receiver's items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Tree#setColumnOrder(int[])
+ * @see TreeColumn#getMoveable()
+ * @see TreeColumn#setMoveable(boolean)
+ * @see SWT#Move
+ * 
+ * @since 3.2
+ */
+public int [] getColumnOrder () {
+	checkWidget ();
+	int [] order = new int [columnCount];
+	for (int i = 0; i < columnCount; i++) {
+		TreeColumn column = columns [i];
+		int index = indexOf (column.nsColumn);
+		if ((style & SWT.CHECK) != 0) index -= 1;
+		order [index] = i;
+	}
+	return order;
+}
+
+/**
+ * Returns an array of <code>TreeColumn</code>s which are the
+ * columns in the receiver. Columns are returned in the order
+ * that they were created.  If no <code>TreeColumn</code>s were
+ * created by the programmer, the array is empty, despite the fact
+ * that visually, one column of items may be visible. This occurs
+ * when the programmer uses the tree like a list, adding items but
+ * never creating a column.
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the items in the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Tree#getColumnOrder()
+ * @see Tree#setColumnOrder(int[])
+ * @see TreeColumn#getMoveable()
+ * @see TreeColumn#setMoveable(boolean)
+ * @see SWT#Move
+ * 
+ * @since 3.1
+ */
+public TreeColumn [] getColumns () {
+	checkWidget ();
+	TreeColumn [] result = new TreeColumn [columnCount];
+	System.arraycopy (columns, 0, result, 0, columnCount);
+	return result;
+}
+
+/**
+ * Returns the width in pixels of a grid line.
+ *
+ * @return the width of a grid line in pixels
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public int getGridLineWidth () {
+	checkWidget ();
+	return 0;
+}
+
+/**
+ * Returns the height of the receiver's header 
+ *
+ * @return the height of the header or zero if the header is not visible
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1 
+ */
+public int getHeaderHeight () {
+	checkWidget ();
+	NSTableHeaderView headerView = ((NSOutlineView) view).headerView ();
+	if (headerView == null) return 0;
+	return (int) headerView.bounds ().height;
+}
+
+/**
+ * Returns <code>true</code> if the receiver's header is visible,
+ * and <code>false</code> otherwise.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, this method
+ * may still indicate that it is considered visible even though
+ * it may not actually be showing.
+ * </p>
+ *
+ * @return the receiver's header's visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public boolean getHeaderVisible () {
+	checkWidget ();
+	return ((NSOutlineView) view).headerView () != null;
+}
+
+/**
+ * Returns the item at the given, zero-relative index in the
+ * receiver. Throws an exception if the index is out of range.
+ *
+ * @param index the index of the item to return
+ * @return the item at the given index
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public TreeItem getItem (int index) {
+	checkWidget ();
+	int count = getItemCount ();
+	if (index < 0 || index >= count) error (SWT.ERROR_INVALID_RANGE);
+	return _getItem (null, index, true);
+}
+
+/**
+ * Returns the item at the given point in the receiver
+ * or null if no such item exists. The point is in the
+ * coordinate system of the receiver.
+ * <p>
+ * The item that is returned represents an item that could be selected by the user.
+ * For example, if selection only occurs in items in the first column, then null is 
+ * returned if the point is outside of the item. 
+ * Note that the SWT.FULL_SELECTION style hint, which specifies the selection policy,
+ * determines the extent of the selection.
+ * </p>
+ *
+ * @param point the point used to locate the item
+ * @return the item at the given point, or null if the point is not in a selectable item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TreeItem getItem (Point point) {
+	checkWidget ();
+	if (point == null) error (SWT.ERROR_NULL_ARGUMENT);
+	checkItems ();
+	NSOutlineView widget = (NSOutlineView)view;
+	NSPoint pt = new NSPoint();
+	pt.x = point.x;
+	pt.y = point.y;
+	int row = (int)/*64*/widget.rowAtPoint(pt);
+	if (row == -1) return null;
+	NSRect rect = widget.frameOfOutlineCellAtRow(row);
+	if (OS.NSPointInRect(pt, rect)) return null;
+	id id = widget.itemAtRow(row);
+	Widget item = display.getWidget (id.id);
+	if (item != null && item instanceof TreeItem) {
+		return (TreeItem)item;
+	}
+	return null;
+}
+
+/**
+ * Returns the number of items contained in the receiver
+ * that are direct item children of the receiver.  The
+ * number that is returned is the number of roots in the
+ * tree.
+ *
+ * @return the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemCount () {
+	checkWidget ();
+	return itemCount;
+}
+
+int getItemCount (TreeItem item) {
+	return item == null ? itemCount : item.itemCount;
+}
+
+/**
+ * Returns the height of the area which would be used to
+ * display <em>one</em> of the items in the tree.
+ *
+ * @return the height of one item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemHeight () {
+	checkWidget ();
+	return (int)((NSOutlineView) view).rowHeight () + CELL_GAP;
+}
+
+/**
+ * Returns a (possibly empty) array of items contained in the
+ * receiver that are direct item children of the receiver.  These
+ * are the roots of the tree.
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TreeItem [] getItems () {
+	checkWidget ();
+	TreeItem [] result = new TreeItem [itemCount];
+	for (int i=0; i<itemCount; i++) {
+		result [i] = _getItem (null, i, true);
+	}
+	return result;
+}
+
+/**
+ * Returns <code>true</code> if the receiver's lines are visible,
+ * and <code>false</code> otherwise. Note that some platforms draw 
+ * grid lines while others may draw alternating row colors.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, this method
+ * may still indicate that it is considered visible even though
+ * it may not actually be showing.
+ * </p>
+ *
+ * @return the visibility state of the lines
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public boolean getLinesVisible () {
+	checkWidget ();
+	return ((NSOutlineView) view).usesAlternatingRowBackgroundColors ();
+}
+
+/**
+ * Returns the receiver's parent item, which must be a
+ * <code>TreeItem</code> or null when the receiver is a
+ * root.
+ *
+ * @return the receiver's parent item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TreeItem getParentItem () {
+	checkWidget ();
+	return null;
+}
+
+/**
+ * Returns an array of <code>TreeItem</code>s that are currently
+ * selected in the receiver. The order of the items is unspecified.
+ * An empty array indicates that no items are selected. 
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its selection, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ * @return an array representing the selection
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TreeItem [] getSelection () {
+	checkWidget ();
+	NSOutlineView widget = (NSOutlineView) view;
+	if (widget.numberOfSelectedRows () == 0) {
+		return new TreeItem [0];
+	}
+	NSIndexSet selection = widget.selectedRowIndexes ();
+	int count = (int)/*64*/selection.count ();
+	int /*long*/ [] indexBuffer = new int /*long*/ [count];
+	selection.getIndexes (indexBuffer, count, 0);
+	TreeItem [] result = new TreeItem [count];
+	for (int i=0; i<count; i++) {
+		id id = widget.itemAtRow (indexBuffer [i]);
+		Widget item = display.getWidget (id.id);
+		if (item != null && item instanceof TreeItem) {
+			result[i] = (TreeItem) item;
+		}
+	}
+	return result;
+}
+
+/**
+ * Returns the number of selected items contained in the receiver.
+ *
+ * @return the number of selected items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelectionCount () {
+	checkWidget ();
+	return (int)/*64*/((NSOutlineView) view).numberOfSelectedRows ();
+}
+
+/**
+ * Returns the column which shows the sort indicator for
+ * the receiver. The value may be null if no column shows
+ * the sort indicator.
+ *
+ * @return the sort indicator 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setSortColumn(TreeColumn)
+ * 
+ * @since 3.2
+ */
+public TreeColumn getSortColumn () {
+	checkWidget ();
+	return sortColumn;
+}
+
+/**
+ * Returns the direction of the sort indicator for the receiver. 
+ * The value will be one of <code>UP</code>, <code>DOWN</code> 
+ * or <code>NONE</code>.
+ *
+ * @return the sort direction
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setSortDirection(int)
+ * 
+ * @since 3.2
+ */
+public int getSortDirection () {
+	checkWidget ();
+	return sortDirection;
+}
+
+/**
+ * Returns the item which is currently at the top of the receiver.
+ * This item can change when items are expanded, collapsed, scrolled
+ * or new items are added or removed.
+ *
+ * @return the item at the top of the receiver 
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.1
+ */
+public TreeItem getTopItem () {
+	checkWidget ();
+	//TODO - partial item at the top
+	NSRect rect = scrollView.documentVisibleRect ();
+	NSPoint point = new NSPoint ();
+	point.x = rect.x;
+	point.y = rect.y;
+	NSOutlineView outlineView = (NSOutlineView)view;
+	int /*long*/ index = outlineView.rowAtPoint (point);
+	if (index == -1) return null; /* empty */
+	id item = outlineView.itemAtRow (index);
+	return (TreeItem)display.getWidget (item.id);
+}
+
+void highlightSelectionInClipRect(int /*long*/ id, int /*long*/ sel, int /*long*/ rect) {
+	if (hooks (SWT.EraseItem)) return;
+	if ((style & SWT.HIDE_SELECTION) != 0 && !hasFocus()) return;
+	NSRect clipRect = new NSRect ();
+	OS.memmove (clipRect, rect, NSRect.sizeof);
+	callSuper (id, sel, clipRect);
+}
+
+int /*long*/ hitTestForEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event, NSRect rect, int /*long*/ controlView) {
+	/*
+	* For some reason, the cell class needs to implement hitTestForEvent:inRect:ofView:,
+	* otherwise the double action selector is not called properly.
+	*/
+	return callSuper(id, sel, event, rect, controlView);
+}
+
+int /*long*/ image (int /*long*/ id, int /*long*/ sel) {
+	int /*long*/ [] image = new int /*long*/ [1];
+	OS.object_getInstanceVariable(id, Display.SWT_IMAGE, image);
+	return image[0];
+}
+
+NSRect imageRectForBounds (int /*long*/ id, int /*long*/ sel, NSRect cellFrame) {
+	NSImage image = new NSCell(id).image();
+	if (image != null) {
+		cellFrame.x += IMAGE_GAP;
+		cellFrame.width = imageBounds.width;
+		cellFrame.height = imageBounds.height;
+	}
+	return cellFrame;
+}
+
+int indexOf (NSTableColumn column) {
+	return (int)/*64*/((NSTableView)view).tableColumns().indexOfObjectIdenticalTo(column);
+}
+
+/**
+ * Searches the receiver's list starting at the first column
+ * (index 0) until a column is found that is equal to the 
+ * argument, and returns the index of that column. If no column
+ * is found, returns -1.
+ *
+ * @param column the search column
+ * @return the index of the column
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the column is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public int indexOf (TreeColumn column) {
+	checkWidget ();
+	if (column == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (column.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	for (int i=0; i<columnCount; i++) {
+		if (columns [i] == column) return i;
+	}
+	return -1;
+}
+
+/**
+ * Searches the receiver's list starting at the first item
+ * (index 0) until an item is found that is equal to the 
+ * argument, and returns the index of that item. If no item
+ * is found, returns -1.
+ *
+ * @param item the search item
+ * @return the index of the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public int indexOf (TreeItem item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (item.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	if (item.parentItem != null) return -1;
+	for (int i = 0; i < itemCount; i++) {
+		if (item == items[i]) return i;
+	}
+	return -1;
+}
+
+boolean isTrim (NSView view) {
+	if (super.isTrim (view)) return true;
+	return view.id == headerView.id;
+}
+
+int /*long*/ menuForEvent(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (id != headerView.id) {
+		/*
+		 * Feature in Cocoa: Table views do not change the selection when the user
+		 * right-clicks or control-clicks on an NSTableView or its subclasses. Fix is to select the 
+		 * clicked-on row ourselves.
+		 */
+		NSEvent event = new NSEvent(theEvent);
+		NSOutlineView tree = (NSOutlineView)view;
+		
+		// get the current selections for the outline view. 
+		NSIndexSet selectedRowIndexes = tree.selectedRowIndexes();
+		
+		// select the row that was clicked before showing the menu for the event
+		NSPoint mousePoint = view.convertPoint_fromView_(event.locationInWindow(), null);
+		int /*long*/ row = tree.rowAtPoint(mousePoint);
+		
+		// figure out if the row that was just clicked on is currently selected
+		if (selectedRowIndexes.containsIndex(row) == false) {
+			NSIndexSet set = (NSIndexSet)new NSIndexSet().alloc();
+			set = set.initWithIndex(row);
+			tree.selectRowIndexes (set, false);
+			set.release();
+		}
+		// else that row is currently selected, so don't change anything.
+	}
+	
+	return super.menuForEvent(id, sel, theEvent);
+}
+
+void mouseDown (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	if (headerView != null && id == headerView.id) {
+		NSTableView widget = (NSTableView)view;
+		widget.setAllowsColumnReordering(false);
+		NSPoint pt = headerView.convertPoint_fromView_(new NSEvent(theEvent).locationInWindow(), null);
+		int /*long*/ nsIndex = headerView.columnAtPoint(pt);
+		if (nsIndex != -1) {
+			id nsColumn = widget.tableColumns().objectAtIndex(nsIndex);
+			for (int i = 0; i < columnCount; i++) {
+				if (columns[i].nsColumn.id == nsColumn.id) {
+					widget.setAllowsColumnReordering(columns[i].movable);
+					break;
+				}
+			}
+		}
+	}
+	else if (id == view.id) {
+		// Bug/feature in Cocoa:  If the tree has a context menu we just set it visible instead of returning
+		// it from menuForEvent:.  This has the side effect, however, of sending control-click to the NSTableView,
+		// which is interpreted as a single click that clears the selection.  Fix is to ignore control-click,
+		NSEvent event = new NSEvent(theEvent);
+		if ((event.modifierFlags() & OS.NSControlKeyMask) != 0) return;
+	}
+	super.mouseDown(id, sel, theEvent);
+}
+
+/*
+ * Feature in Cocoa.  If a checkbox is in multi-state mode, nextState cycles
+ * from off to mixed to on and back to off again.  This will cause the on state
+ * to momentarily appear while clicking on the checkbox.  To avoid this, 
+ * override [NSCell nextState] to go directly to the desired state.
+ */
+int /*long*/ nextState (int /*long*/ id, int /*long*/ sel) {
+	NSOutlineView outlineView = (NSOutlineView)view;
+	int index = (int)/*64*/outlineView.selectedRow ();
+	TreeItem item = (TreeItem)display.getWidget (outlineView.itemAtRow (index).id);
+	if (item.grayed) {
+		return item.checked ? OS.NSOffState : OS.NSMixedState;
+	}
+	return item.checked ? OS.NSOffState : OS.NSOnState;
+}
+
+int /*long*/ outlineView_child_ofItem (int /*long*/ id, int /*long*/ sel, int /*long*/ outlineView, int /*long*/ index, int /*long*/ itemID) {
+	TreeItem parent = (TreeItem) display.getWidget (itemID);
+	TreeItem item = _getItem (parent, (int)/*64*/index, true);
+	return item.handle.id;
+}
+
+void outlineView_didClickTableColumn (int /*long*/ id, int /*long*/ sel, int /*long*/ outlineView, int /*long*/ tableColumn) {
+	TreeColumn column = getColumn (new id (tableColumn));
+	if (column == null) return; /* either CHECK column or firstColumn in 0-column Tree */
+	column.postEvent (SWT.Selection);
+}
+
+int /*long*/ outlineView_objectValueForTableColumn_byItem (int /*long*/ id, int /*long*/ sel, int /*long*/ outlineView, int /*long*/ tableColumn, int /*long*/ itemID) {
+	TreeItem item = (TreeItem) display.getWidget (itemID);
+	checkData (item);
+	if (checkColumn != null && tableColumn == checkColumn.id) {
+		NSNumber value;
+		if (item.checked && item.grayed) {
+			value = NSNumber.numberWithInt (OS.NSMixedState);
+		} else {
+			value = NSNumber.numberWithInt (item.checked ? OS.NSOnState : OS.NSOffState);
+		}
+		return value.id;
+	}
+	for (int i=0; i<columnCount; i++) {
+		if (columns [i].nsColumn.id == tableColumn) {
+			return item.createString (i).id;
+		}
+	}
+	return item.createString (0).id;
+}
+
+boolean outlineView_isItemExpandable (int /*long*/ id, int /*long*/ sel, int /*long*/ outlineView, int /*long*/ item) {
+	if (item == 0) return true;
+	return ((TreeItem) display.getWidget (item)).itemCount != 0;
+}
+
+int /*long*/ outlineView_numberOfChildrenOfItem (int /*long*/ id, int /*long*/ sel, int /*long*/ outlineView, int /*long*/ item) {
+	if (item == 0) return itemCount;
+	return ((TreeItem) display.getWidget (item)).itemCount;
+}
+
+void outlineView_willDisplayCell_forTableColumn_item (int /*long*/ id, int /*long*/ sel, int /*long*/ outlineView, int /*long*/ cell, int /*long*/ tableColumn, int /*long*/ itemID) {
+	if (checkColumn != null && tableColumn == checkColumn.id) return;
+	TreeItem item = (TreeItem) display.getWidget(itemID);
+	int index = 0;
+	for (int i=0; i<columnCount; i++) {
+		if (columns [i].nsColumn.id == tableColumn) {
+			index = i;
+			break;
+		}
+	}
+	NSTextFieldCell textCell = new NSTextFieldCell (cell);
+	OS.object_setInstanceVariable(cell, Display.SWT_ROW, itemID);
+	OS.object_setInstanceVariable(cell, Display.SWT_COLUMN, tableColumn);
+	Image image = index == 0 ? item.image : (item.images == null ? null : item.images [index]);
+	textCell.setImage (image != null ? image.handle : null);
+	NSColor color;
+	if (textCell.isEnabled()) {
+		if (textCell.isHighlighted ()) {
+			color = NSColor.selectedControlTextColor();
+		} else {
+			Color foreground = item.cellForeground != null ? item.cellForeground [index] : null;
+			if (foreground == null) foreground = item.foreground;
+			if (foreground == null) foreground = getForegroundColor ();
+			color = NSColor.colorWithDeviceRed (foreground.handle [0], foreground.handle [1], foreground.handle [2], 1);
+		}
+	} else {
+		color = NSColor.disabledControlTextColor();
+	}
+	int alignment = OS.NSLeftTextAlignment;
+	if (columnCount > 0) {
+		int style = columns [index].style;
+		if ((style & SWT.CENTER) != 0) {
+			alignment = OS.NSCenterTextAlignment;
+		} else if ((style & SWT.RIGHT) != 0) {
+			alignment = OS.NSRightTextAlignment;
+		}
+	}
+	Font font = item.cellFont != null ? item.cellFont [index] : null;
+	if (font == null) font = item.font;
+	if (font == null) font = this.font;
+	if (font == null) font = defaultFont ();
+	if (font.extraTraits != 0) {
+		NSMutableDictionary dict = ((NSMutableDictionary)new NSMutableDictionary().alloc()).initWithCapacity(5);
+		dict.setObject (color, OS.NSForegroundColorAttributeName);
+		dict.setObject (font.handle, OS.NSFontAttributeName);
+		addTraits(dict, font);
+		NSMutableParagraphStyle paragraphStyle = (NSMutableParagraphStyle)new NSMutableParagraphStyle ().alloc ().init ();
+		paragraphStyle.setLineBreakMode (OS.NSLineBreakByClipping);
+		paragraphStyle.setAlignment (alignment);
+		dict.setObject (paragraphStyle, OS.NSParagraphStyleAttributeName);
+		paragraphStyle.release ();
+		NSAttributedString attribStr = ((NSAttributedString) new NSAttributedString ().alloc ()).initWithString (textCell.title(), dict);
+		textCell.setAttributedStringValue(attribStr);
+		attribStr.release();
+		dict.release();
+	} else {
+		textCell.setFont(font.handle);
+		textCell.setTextColor(color);
+		textCell.setAlignment (alignment);
+	}
+}
+
+void outlineViewColumnDidMove (int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
+	NSNotification notification = new NSNotification (aNotification);
+	NSDictionary userInfo = notification.userInfo ();
+	id nsOldIndex = userInfo.valueForKey (NSString.stringWith ("NSOldColumn")); //$NON-NLS-1$
+	id nsNewIndex = userInfo.valueForKey (NSString.stringWith ("NSNewColumn")); //$NON-NLS-1$
+	int oldIndex = new NSNumber (nsOldIndex).intValue ();
+	int newIndex = new NSNumber (nsNewIndex).intValue ();
+	int startIndex = Math.min (oldIndex, newIndex);
+	int endIndex = Math.max (oldIndex, newIndex);
+	NSOutlineView outlineView = (NSOutlineView)view;
+	NSArray nsColumns = outlineView.tableColumns ();
+	for (int i = startIndex; i <= endIndex; i++) {
+		id columnId = nsColumns.objectAtIndex (i);
+		TreeColumn column = getColumn (columnId);
+		if (column != null) {
+			column.sendEvent (SWT.Move);
+			if (isDisposed ()) return;
+		}
+	}
+}
+
+void outlineViewColumnDidResize (int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
+	NSNotification notification = new NSNotification (aNotification);
+	NSDictionary userInfo = notification.userInfo ();
+	id columnId = userInfo.valueForKey (NSString.stringWith ("NSTableColumn")); //$NON-NLS-1$
+	TreeColumn column = getColumn (columnId);
+	if (column == null) return; /* either CHECK column or firstColumn in 0-column Tree */
+
+	column.sendEvent (SWT.Resize);
+	if (isDisposed ()) return;
+
+	NSOutlineView outlineView = (NSOutlineView)view;
+	int index = indexOf (column.nsColumn);
+	if (index == -1) return; /* column was disposed in Resize callback */
+
+	NSArray nsColumns = outlineView.tableColumns ();
+	int columnCount = (int)/*64*/outlineView.numberOfColumns ();
+	for (int i = index + 1; i < columnCount; i++) {
+		columnId = nsColumns.objectAtIndex (i);
+		column = getColumn (columnId);
+		if (column != null) {
+			column.sendEvent (SWT.Move);
+			if (isDisposed ()) return;
+		}
+	}
+}
+
+void outlineViewSelectionDidChange (int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
+	if (ignoreSelect) return;
+	NSOutlineView widget = (NSOutlineView) view;
+	int row = (int)/*64*/widget.selectedRow ();
+	if (row == -1)
+		postEvent (SWT.Selection);
+	else {
+		id _id = widget.itemAtRow (row);
+		TreeItem item = (TreeItem) display.getWidget (_id.id);
+		Event event = new Event ();
+		event.item = item;
+		event.index = row;
+		postEvent (SWT.Selection, event);
+	}
+}
+
+void outlineView_setObjectValue_forTableColumn_byItem (int /*long*/ id, int /*long*/ sel, int /*long*/ outlineView, int /*long*/ object, int /*long*/ tableColumn, int /*long*/ itemID) {
+	if (checkColumn != null && tableColumn == checkColumn.id)  {
+		TreeItem item = (TreeItem) display.getWidget (itemID);
+		item.checked = !item.checked;
+		Event event = new Event ();
+		event.detail = SWT.CHECK;
+		event.item = item;
+		postEvent (SWT.Selection, event);
+		item.redraw (-1);
+	}
+}
+
+boolean outlineView_writeItems_toPasteboard(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2) {
+	return sendMouseEvent(NSApplication.sharedApplication().currentEvent(), SWT.DragDetect, true);
+}
+
+void register () {
+	super.register ();
+	display.addWidget (headerView, this);
+	display.addWidget (dataCell, this);
+	if (buttonCell != null) display.addWidget (buttonCell, this);
+}
+
+void releaseChildren (boolean destroy) {
+	for (int i=0; i<items.length; i++) {
+		TreeItem item = items [i];
+		if (item != null && !item.isDisposed ()) {
+			item.release (false);
+		}
+	}
+	items = null;
+	if (columns != null) {
+		for (int i=0; i<columnCount; i++) {
+			TreeColumn column = columns [i];
+			if (column != null && !column.isDisposed ()) {
+				column.release (false);
+			}
+		}
+		columns = null;
+	}
+	super.releaseChildren (destroy);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (headerView != null) headerView.release ();
+	headerView = null;
+	if (firstColumn != null) firstColumn.release ();
+	firstColumn = null;
+	if (checkColumn != null) checkColumn.release ();
+	checkColumn = null;
+	if (dataCell != null) dataCell.release ();
+	dataCell = null;
+	if (buttonCell != null) buttonCell.release();
+	buttonCell = null;
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	sortColumn = null;
+}
+
+void reloadItem (TreeItem item, boolean recurse) {
+	if (getDrawing()) {
+		NSOutlineView widget = (NSOutlineView)view;
+		TreeItem[] selectedItems = getSelection ();
+		if (item != null) {
+			widget.reloadItem (item.handle, recurse);
+		} else {
+			widget.reloadData ();
+		}
+		selectItems (selectedItems, true);
+	} else {
+		reloadPending = true;
+	}
+}
+
+/**
+ * Removes all of the items from the receiver.
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void removeAll () {
+	checkWidget ();
+	for (int i=0; i<items.length; i++) {
+		TreeItem item = items [i];
+		if (item != null && !item.isDisposed ()) item.release (false);
+	}
+	items = new TreeItem [4];
+	itemCount = 0;
+	imageBounds = null;
+	((NSOutlineView) view).reloadData ();
+	setScrollWidth ();
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the user changes the receiver's selection.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection, listener);	
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when items in the receiver are expanded or collapsed.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see TreeListener
+ * @see #addTreeListener
+ */
+public void removeTreeListener (TreeListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Expand, listener);
+	eventTable.unhook (SWT.Collapse, listener);
+}
+
+void setImage (int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	OS.object_setInstanceVariable(id, Display.SWT_IMAGE, arg0);
+}
+
+/**
+ * Display a mark indicating the point at which an item will be inserted.
+ * The drop insert item has a visual hint to show where a dragged item 
+ * will be inserted when dropped on the tree.
+ * 
+ * @param item the insert item.  Null will clear the insertion mark.
+ * @param before true places the insert mark above 'item'. false places 
+ *	the insert mark below 'item'.
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setInsertMark (TreeItem item, boolean before) {
+	checkWidget ();
+	if (item != null && item.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
+	TreeItem oldMark = insertItem;
+	insertItem = item;
+	insertBefore = before;
+	if (oldMark != null && !oldMark.isDisposed()) oldMark.redraw (-1);
+	if (item != null) item.redraw (-1);
+}
+
+/**
+ * Selects all of the items in the receiver.
+ * <p>
+ * If the receiver is single-select, do nothing.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void selectAll () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) return;
+	checkItems ();
+	NSOutlineView widget = (NSOutlineView) view;
+	ignoreSelect = true;
+	widget.selectAll (null);
+	ignoreSelect = false;
+}
+
+/**
+ * Selects an item in the receiver.  If the item was already
+ * selected, it remains selected.
+ *
+ * @param item the item to be selected
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.4
+ */
+public void select (TreeItem item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (item.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	checkItems ();
+	showItem (item);
+	NSOutlineView outlineView = (NSOutlineView) view;
+	int /*long*/ row = outlineView.rowForItem (item.handle);
+	NSIndexSet set = (NSIndexSet)new NSIndexSet().alloc();
+	set = set.initWithIndex(row);
+	ignoreSelect = true;
+	outlineView.selectRowIndexes (set, false);
+	ignoreSelect = false;
+	set.release();
+}
+
+void sendDoubleSelection() {
+	NSOutlineView outlineView = (NSOutlineView)view;
+	int rowIndex = (int)/*64*/outlineView.clickedRow (); 
+	if (rowIndex != -1) {
+		if ((style & SWT.CHECK) != 0) {
+			NSArray columns = outlineView.tableColumns ();
+			int columnIndex = (int)/*64*/outlineView.clickedColumn ();
+			id column = columns.objectAtIndex (columnIndex);
+			if (column.id == checkColumn.id) return;
+		}
+		TreeItem item = (TreeItem) display.getWidget (outlineView.itemAtRow (rowIndex).id);
+		Event event = new Event ();
+		event.item = item;
+		postEvent (SWT.DefaultSelection, event);
+	}
+}
+
+boolean sendKeyEvent (NSEvent nsEvent, int type) {
+	boolean result = super.sendKeyEvent (nsEvent, type);
+	if (!result) return result;
+	if (type != SWT.KeyDown) return result;
+	short keyCode = nsEvent.keyCode ();
+	switch (keyCode) {
+		case 76: /* KP Enter */
+		case 36: { /* Return */
+			postEvent (SWT.DefaultSelection);
+			break;
+		}
+	}
+	return result;
+}
+
+void sendMeasureItem (TreeItem item, int columnIndex, NSSize size) {
+	NSOutlineView widget = (NSOutlineView)this.view;
+	int contentWidth = (int)Math.ceil (size.width);
+	NSSize spacing = widget.intercellSpacing();
+	int itemHeight = (int)Math.ceil (widget.rowHeight() + spacing.height);
+	GCData data = new GCData ();
+	data.paintRect = widget.frame ();
+	GC gc = GC.cocoa_new (this, data);
+	gc.setFont (item.getFont (columnIndex));
+	Event event = new Event ();
+	event.item = item;
+	event.gc = gc;
+	event.index = columnIndex;
+	event.width = contentWidth;
+	event.height = itemHeight;
+	sendEvent (SWT.MeasureItem, event);
+	gc.dispose ();
+	if (!isDisposed () && !item.isDisposed ()) {
+		size.width = event.width;
+		size.height = event.height;
+		if (itemHeight < event.height) {
+			widget.setRowHeight (event.height);
+		}
+		if (contentWidth != event.width) {
+			if (columnCount == 0 && columnIndex == 0) {
+				item.width = event.width;
+				item.width += widget.indentationPerLevel () * (1 + widget.levelForItem (item.handle));
+				if (setScrollWidth (item)) {
+					widget.setNeedsDisplay(true);
+				}
+			}
+		}
+	}
+}
+
+void selectItems (TreeItem[] items, boolean ignoreDisposed) {
+	NSOutlineView outlineView = (NSOutlineView) view;
+	NSMutableIndexSet set = (NSMutableIndexSet) new NSMutableIndexSet ().alloc ().init ();
+	int length = items.length;
+	for (int i=0; i<length; i++) {
+		if (items [i] != null) {
+			if (items [i].isDisposed ()) {
+				if (ignoreDisposed) continue;
+				error (SWT.ERROR_INVALID_ARGUMENT);
+			}
+			TreeItem item = items [i];
+			if (!ignoreDisposed) showItem (items [i], false);
+			set.addIndex (outlineView.rowForItem (item.handle));
+		}
+	}
+	ignoreSelect = true;
+	outlineView.selectRowIndexes (set, false);
+	ignoreSelect = false;
+	set.release();
+}
+
+NSRect titleRectForBounds (int /*long*/ id, int /*long*/ sel, NSRect cellFrame) {
+	NSImage image = new NSCell(id).image();
+	if (image != null) {
+		int imageWidth = imageBounds.width + IMAGE_GAP;
+		cellFrame.x += imageWidth;
+		cellFrame.width -= imageWidth;
+	}
+	return cellFrame;
+}
+
+void updateBackground () {
+	NSColor nsColor = null;
+	if (backgroundImage != null) {
+		nsColor = NSColor.colorWithPatternImage(backgroundImage.handle);
+	} else if (background != null) {
+		nsColor = NSColor.colorWithDeviceRed(background[0], background[1], background[2], background[3]);
+	}
+	((NSOutlineView) view).setBackgroundColor (nsColor);
+}
+
+/**
+ * Sets the order that the items in the receiver should 
+ * be displayed in to the given argument which is described
+ * in terms of the zero-relative ordering of when the items
+ * were added.
+ *
+ * @param order the new order to display the items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item order is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item order is not the same length as the number of items</li>
+ * </ul>
+ * 
+ * @see Tree#getColumnOrder()
+ * @see TreeColumn#getMoveable()
+ * @see TreeColumn#setMoveable(boolean)
+ * @see SWT#Move
+ * 
+ * @since 3.2
+ */
+public void setColumnOrder (int [] order) {
+	checkWidget ();
+	if (order == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (columnCount == 0) {
+		if (order.length != 0) error (SWT.ERROR_INVALID_ARGUMENT);
+		return;
+	}
+	if (order.length != columnCount) error (SWT.ERROR_INVALID_ARGUMENT);
+	int [] oldOrder = getColumnOrder ();
+	boolean reorder = false;
+	boolean [] seen = new boolean [columnCount];
+	for (int i=0; i<order.length; i++) {
+		int index = order [i];
+		if (index < 0 || index >= columnCount) error (SWT.ERROR_INVALID_ARGUMENT);
+		if (seen [index]) error (SWT.ERROR_INVALID_ARGUMENT);
+		seen [index] = true;
+		if (order [i] != oldOrder [i]) reorder = true;
+	}
+	if (reorder) {
+		NSOutlineView outlineView = (NSOutlineView)view;
+		int [] oldX = new int [oldOrder.length];
+		int check = (style & SWT.CHECK) != 0 ? 1 : 0;
+		for (int i=0; i<oldOrder.length; i++) {
+			int index = oldOrder[i];
+			oldX [index] = (int)outlineView.rectOfColumn (i + check).x;
+		}
+		int [] newX = new int [order.length];
+		for (int i=0; i<order.length; i++) {
+			int index = order [i];
+			TreeColumn column = columns[index];
+			int oldIndex = indexOf (column.nsColumn);
+			int newIndex = i + check;
+			outlineView.moveColumn (oldIndex, newIndex);
+			newX [index] = (int)outlineView.rectOfColumn (newIndex).x;
+		}
+
+		TreeColumn[] newColumns = new TreeColumn [columnCount];
+		System.arraycopy (columns, 0, newColumns, 0, columnCount);
+		for (int i=0; i<columnCount; i++) {
+			TreeColumn column = newColumns [i];
+			if (!column.isDisposed ()) {
+				if (newX [i] != oldX [i]) {
+					column.sendEvent (SWT.Move);
+				}
+			}
+		}
+	}
+}
+
+void setFont (NSFont font) {
+	super.setFont (font);
+	setItemHeight (null, font, !hooks (SWT.MeasureItem));
+	view.setNeedsDisplay (true);
+	clearCachedWidth (items);
+	setScrollWidth ();
+}
+
+/**
+ * Marks the receiver's header as visible if the argument is <code>true</code>,
+ * and marks it invisible otherwise. 
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, marking
+ * it visible may not actually cause it to be displayed.
+ * </p>
+ *
+ * @param show the new visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void setHeaderVisible (boolean show) {
+	checkWidget ();
+	((NSOutlineView) view).setHeaderView (show ? headerView : null);
+}
+
+/**
+ * Sets the number of root-level items contained in the receiver.
+ *
+ * @param count the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.2
+ */
+public void setItemCount (int count) {
+	checkWidget ();
+	checkItems ();
+	count = Math.max (0, count);
+	setItemCount (null, count);
+}
+
+void setItemCount (TreeItem parentItem, int count) {
+	int itemCount = getItemCount (parentItem);
+	if (count == itemCount) return;
+	NSOutlineView widget = (NSOutlineView) view;
+	int length = Math.max (4, (count + 3) / 4 * 4);
+	TreeItem [] children = parentItem == null ? items : parentItem.items;
+	boolean expanded = parentItem == null || parentItem.getExpanded();
+	if (count < itemCount) {
+		/*
+		* Note that the item count has to be updated before the call to reloadItem(), but
+		* the items have to be released after.
+		*/
+		if (parentItem == null) {
+			this.itemCount = count;
+		} else {
+			parentItem.itemCount = count;
+		}
+		/*
+		* Bug in Cocoa.  When removing selected items from an NSOutlineView, the selection
+		* is not properly updated.  The fix is to ensure that the item and its subitems
+		* are deselected before the item is removed by the reloadItem call. 
+		*/
+		if (expanded) {
+			for (int index = count; index < itemCount; index ++) {
+				TreeItem item = children [index];
+				if (item != null && !item.isDisposed ()) item.clearSelection ();
+			}
+		}
+		TreeItem[] selectedItems = getSelection ();
+		widget.reloadItem (parentItem != null ? parentItem.handle : null, expanded);
+		selectItems (selectedItems, true);
+		for (int index = count; index < itemCount; index ++) {
+			TreeItem item = children [index];
+			if (item != null && !item.isDisposed()) item.release (false);
+		}
+		TreeItem [] newItems = new TreeItem [length];
+		if (children != null) {
+			System.arraycopy (children, 0, newItems, 0, count);
+		}
+		children = newItems;
+		if (parentItem == null) {
+			this.items = newItems;
+		} else {
+			parentItem.items = newItems;
+		}
+	} else {
+		if ((style & SWT.VIRTUAL) == 0) {
+			for (int i=itemCount; i<count; i++) {
+				new TreeItem (this, parentItem, SWT.NONE, i, true);
+			}
+		} else {
+			TreeItem [] newItems = new TreeItem [length];
+			if (children != null) {
+				System.arraycopy (children, 0, newItems, 0, itemCount);
+			}
+			children = newItems;
+			if (parentItem == null) {
+				this.items = newItems;
+				this.itemCount = count;
+			} else {
+				parentItem.items = newItems;
+				parentItem.itemCount = count;
+			}
+			TreeItem[] selectedItems = getSelection ();
+			widget.reloadItem (parentItem != null ? parentItem.handle : null, expanded);
+			selectItems (selectedItems, true);
+
+			if (parentItem != null && itemCount == 0 && parentItem.expanded) {
+				ignoreExpand = true;
+				widget.expandItem (parentItem.handle);
+				ignoreExpand = false;
+			}
+		}
+	}
+}
+
+/*public*/ void setItemHeight (int itemHeight) {
+	checkWidget ();
+	if (itemHeight < -1) error (SWT.ERROR_INVALID_ARGUMENT);
+	if (itemHeight == -1) {
+		setItemHeight (null, null, true);
+	} else {
+		((NSOutlineView)view).setRowHeight (itemHeight);
+	}
+}
+
+void setItemHeight (Image image, NSFont font, boolean set) {
+	if (font == null) font = getFont ().handle;
+	float /*double*/ ascent = font.ascender ();
+	float /*double*/ descent = -font.descender () + font.leading ();
+	int height = (int)Math.ceil (ascent + descent) + 1;
+	Rectangle bounds = image != null ? image.getBounds () : imageBounds;
+	if (bounds != null) {
+		imageBounds = bounds;
+		height = Math.max (height, bounds.height);
+	}
+	NSTableView widget = (NSTableView)view;
+	if (set || widget.rowHeight () < height) {
+		widget.setRowHeight (height);
+	}
+}
+
+/**
+ * Marks the receiver's lines as visible if the argument is <code>true</code>,
+ * and marks it invisible otherwise. Note that some platforms draw 
+ * grid lines while others may draw alternating row colors.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, marking
+ * it visible may not actually cause it to be displayed.
+ * </p>
+ *
+ * @param show the new visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void setLinesVisible (boolean show) {
+	checkWidget ();
+	((NSOutlineView) view).setUsesAlternatingRowBackgroundColors (show);
+}
+
+public void setRedraw (boolean redraw) {
+	checkWidget ();
+	super.setRedraw (redraw);
+	if (redraw && drawCount == 0) {
+		checkItems ();
+		setScrollWidth ();
+	}
+}
+
+boolean setScrollWidth () {
+	return setScrollWidth (true, items, true);
+}
+
+boolean setScrollWidth (boolean set, TreeItem[] items, boolean recurse) {
+	if (items == null) return false;
+	if (ignoreRedraw || !getDrawing()) return false;
+	if (columnCount != 0) return false;
+	GC gc = new GC (this);
+	int newWidth = calculateWidth (items, 0, gc, recurse);
+	gc.dispose ();
+	if (!set) {
+		int oldWidth = (int)firstColumn.width ();
+		if (oldWidth >= newWidth) return false;
+	}
+	firstColumn.setWidth (newWidth);
+	if (horizontalBar != null && horizontalBar.view != null) redrawWidget (horizontalBar.view, false);
+	return true;
+}
+
+boolean setScrollWidth (TreeItem item) {
+	if (ignoreRedraw || !getDrawing()) return false;
+	if (columnCount != 0) return false;
+	TreeItem parentItem = item.parentItem;
+	if (parentItem != null && !parentItem.getExpanded ()) return false;
+	GC gc = new GC (this);
+	int newWidth = item.calculateWidth (0, gc);
+	gc.dispose ();
+	int oldWidth = (int)firstColumn.width ();
+	if (oldWidth < newWidth) {
+		firstColumn.setWidth (newWidth);
+		if (horizontalBar != null && horizontalBar.view != null) redrawWidget (horizontalBar.view, false);
+		return true;
+	}
+	return false;
+}
+
+/**
+ * Sets the receiver's selection to the given item.
+ * The current selection is cleared before the new item is selected.
+ * <p>
+ * If the item is not in the receiver, then it is ignored.
+ * </p>
+ *
+ * @param item the item to select
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setSelection (TreeItem item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setSelection (new TreeItem [] {item});
+}
+
+/**
+ * Sets the receiver's selection to be the given array of items.
+ * The current selection is cleared before the new items are selected.
+ * <p>
+ * Items that are not in the receiver are ignored.
+ * If the receiver is single-select and multiple items are specified,
+ * then all items are ignored.
+ * </p>
+ *
+ * @param items the array of items
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array of items is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if one of the items has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Tree#deselectAll()
+ */
+public void setSelection (TreeItem [] items) {
+	checkWidget ();
+	if (items == null) error (SWT.ERROR_NULL_ARGUMENT);
+	checkItems ();
+	deselectAll ();
+	int length = items.length;
+	if (length == 0 || ((style & SWT.SINGLE) != 0 && length > 1)) return;
+	selectItems (items, false);
+	if (items.length > 0) {
+		for (int i = 0; i < items.length; i++) {
+			TreeItem item = items[i];
+			if (item != null) {
+				showItem(item, true);			
+				break;
+			}
+		}
+	}
+}
+
+void setSmallSize () {
+	if (checkColumn == null) return;
+	checkColumn.dataCell ().setControlSize (OS.NSSmallControlSize);
+	checkColumn.setWidth (getCheckColumnWidth ());
+}
+
+/**
+ * Sets the column used by the sort indicator for the receiver. A null
+ * value will clear the sort indicator.  The current sort column is cleared 
+ * before the new column is set.
+ *
+ * @param column the column used by the sort indicator or <code>null</code>
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the column is disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setSortColumn (TreeColumn column) {
+	checkWidget ();
+	if (column != null && column.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	if (column == sortColumn) return;
+	sortColumn = column;
+	((NSOutlineView)view).setHighlightedTableColumn (column == null ? null : column.nsColumn);
+}
+
+/**
+ * Sets the direction of the sort indicator for the receiver. The value 
+ * can be one of <code>UP</code>, <code>DOWN</code> or <code>NONE</code>.
+ *
+ * @param direction the direction of the sort indicator 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setSortDirection  (int direction) {
+	checkWidget ();
+	if (direction != SWT.UP && direction != SWT.DOWN && direction != SWT.NONE) return;
+	if (direction == sortDirection) return;
+	sortDirection = direction;
+	if (sortColumn == null) return;
+	NSTableHeaderView headerView = ((NSOutlineView)view).headerView ();
+	if (headerView == null) return;
+	int index = indexOf (sortColumn.nsColumn);
+	NSRect rect = headerView.headerRectOfColumn (index);
+	headerView.setNeedsDisplayInRect (rect);
+}
+
+/**
+ * Sets the item which is currently at the top of the receiver.
+ * This item can change when items are expanded, collapsed, scrolled
+ * or new items are added or removed.
+ *
+ * @param item the item to be shown
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Tree#getTopItem()
+ * 
+ * @since 2.1
+ */
+public void setTopItem (TreeItem item) {
+	checkWidget();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (item.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	checkItems ();
+	showItem (item, false);
+	NSOutlineView widget = (NSOutlineView) view;
+	int /*long*/ row = widget.rowForItem (item.handle);
+	if (row == -1) return;
+	NSPoint pt = new NSPoint();
+	pt.x = scrollView.contentView().bounds().x;
+	pt.y = widget.frameOfCellAtColumn(0, row).y;
+	view.scrollPoint(pt);
+}
+
+/**
+ * Shows the column.  If the column is already showing in the receiver,
+ * this method simply returns.  Otherwise, the columns are scrolled until
+ * the column is visible.
+ *
+ * @param column the column to be shown
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.1
+ */
+public void showColumn (TreeColumn column) {
+	checkWidget ();
+	if (column == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (column.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT);
+	if (column.parent != this) return;
+	if (columnCount <= 1) return;
+	int index = indexOf (column.nsColumn);
+	if (!(0 <= index && index < columnCount + ((style & SWT.CHECK) != 0 ? 1 : 0))) return;
+	((NSOutlineView)view).scrollColumnToVisible (index);
+}
+
+/**
+ * Shows the item.  If the item is already showing in the receiver,
+ * this method simply returns.  Otherwise, the items are scrolled
+ * and expanded until the item is visible.
+ *
+ * @param item the item to be shown
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Tree#showSelection()
+ */
+public void showItem (TreeItem item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (item.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	checkItems ();
+	showItem (item, true);
+}
+
+void showItem (TreeItem item, boolean scroll) {
+	TreeItem parentItem = item.parentItem;
+	if (parentItem != null) {
+		showItem (parentItem, false);
+		parentItem.setExpanded (true);
+	}
+	if (scroll) {
+		NSOutlineView outlineView = (NSOutlineView) view;
+		outlineView.scrollRowToVisible (outlineView.rowForItem (item.handle));
+	}
+}
+
+/**
+ * Shows the selection.  If the selection is already showing in the receiver,
+ * this method simply returns.  Otherwise, the items are scrolled until
+ * the selection is visible.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Tree#showItem(TreeItem)
+ */
+public void showSelection () {
+	checkWidget ();
+	checkItems ();
+	//TODO - optimize
+	TreeItem [] selection = getSelection ();
+	if (selection.length > 0) {
+		checkData(selection [0]);
+		showItem (selection [0], true);
+	}
+}
+
+void updateCursorRects (boolean enabled) {
+	super.updateCursorRects (enabled);
+	if (headerView == null) return;
+	updateCursorRects (enabled, headerView);
+}
+
+}
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TreeColumn.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TreeColumn.java
new file mode 100755
index 0000000..ed0180f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TreeColumn.java
@@ -0,0 +1,675 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.cocoa.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * Instances of this class represent a column in a tree widget.
+ * <p><dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>LEFT, RIGHT, CENTER</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd> Move, Resize, Selection</dd>
+ * </dl>
+ * </p><p>
+ * Note: Only one of the styles LEFT, RIGHT and CENTER may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tree">Tree, TreeItem, TreeColumn snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.1
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class TreeColumn extends Item {
+	NSTableColumn nsColumn;
+	Tree parent;
+	String toolTipText, displayText;
+	boolean movable;
+
+	static final int MARGIN = 2;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Tree</code>) and a style value
+ * describing its behavior and appearance. The item is added
+ * to the end of the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#LEFT
+ * @see SWT#RIGHT
+ * @see SWT#CENTER
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TreeColumn (Tree parent, int style) {
+	super (parent, checkStyle (style));
+	this.parent = parent;
+	parent.createItem (this, parent.columnCount);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Tree</code>), a style value
+ * describing its behavior and appearance, and the index
+ * at which to place it in the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ * <p>
+ * Note that due to a restriction on some platforms, the first column
+ * is always left aligned.
+ * </p>
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ * @param index the zero-relative index to store the receiver in its parent
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the parent (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#LEFT
+ * @see SWT#RIGHT
+ * @see SWT#CENTER
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TreeColumn (Tree parent, int style, int index) {
+	super (parent, checkStyle (style));
+	this.parent = parent;
+	parent.createItem (this, index);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is moved or resized, by sending
+ * it one of the messages defined in the <code>ControlListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ControlListener
+ * @see #removeControlListener
+ */
+public void addControlListener(ControlListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Resize,typedListener);
+	addListener (SWT.Move,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is called when the column header is selected.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the control is selected by the user
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+static int checkStyle (int style) {
+	return checkBits (style, SWT.LEFT, SWT.CENTER, SWT.RIGHT, 0, 0, 0);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+void deregister () {
+	super.deregister ();
+	display.removeWidget (nsColumn.headerCell());
+}
+
+void destroyWidget () {
+	parent.destroyItem (this);
+	releaseHandle ();
+}
+
+void drawInteriorWithFrame_inView (int /*long*/ id, int /*long*/ sel, NSRect cellRect, int /*long*/ view) {
+	/*
+	 * Feature in Cocoa.  When the last column in a tree does not reach the
+	 * rightmost edge of the tree view, the cell that draws the rightmost-
+	 * column's header is also invoked to draw the header space between its
+	 * right edge and the tree's right edge.  If this case is detected then
+	 * nothing should be drawn.
+	 */
+	int columnIndex = parent.indexOf (nsColumn);
+	NSRect headerRect = parent.headerView.headerRectOfColumn (columnIndex);
+	if (headerRect.x != cellRect.x || headerRect.width != cellRect.width) return;
+
+	NSGraphicsContext context = NSGraphicsContext.currentContext ();
+	context.saveGraphicsState ();
+
+	int contentWidth = 0;
+	NSSize stringSize = null, imageSize = null;
+	NSAttributedString attrString = null;
+	NSTableHeaderCell headerCell = nsColumn.headerCell ();
+	if (displayText != null) {
+		Font font = Font.cocoa_new(display, headerCell.font ());
+		attrString = parent.createString(displayText, font, null, SWT.LEFT, (parent.state & DISABLED) == 0, false);
+		stringSize = attrString.size ();
+		contentWidth += Math.ceil (stringSize.width);
+		if (image != null) contentWidth += MARGIN; /* space between image and text */
+	}
+	if (image != null) {
+		imageSize = image.handle.size ();
+		contentWidth += Math.ceil (imageSize.width);
+	}
+
+	if (parent.sortColumn == this && parent.sortDirection != SWT.NONE) {
+		boolean ascending = parent.sortDirection == SWT.UP;
+		headerCell.drawSortIndicatorWithFrame (cellRect, new NSView(view), ascending, 0);
+		/* remove the arrow's space from the available drawing width */
+		NSRect sortRect = headerCell.sortIndicatorRectForBounds (cellRect);
+		cellRect.width = Math.max (0, sortRect.x - cellRect.x);
+	}
+
+	int drawX = 0;
+	if ((style & SWT.CENTER) != 0) {
+		drawX = (int)(cellRect.x + Math.max (MARGIN, ((cellRect.width - contentWidth) / 2)));
+	} else if ((style & SWT.RIGHT) != 0) {
+		drawX = (int)(cellRect.x + Math.max (MARGIN, cellRect.width - contentWidth - MARGIN));
+	} else {
+		drawX = (int)cellRect.x + MARGIN;
+	}
+
+	if (image != null) {
+		NSRect destRect = new NSRect ();
+		destRect.x = drawX;
+		destRect.y = cellRect.y;
+		destRect.width = Math.min (imageSize.width, cellRect.width - 2 * MARGIN);
+		destRect.height = Math.min (imageSize.height, cellRect.height);
+		boolean isFlipped = new NSView (view).isFlipped(); 
+		if (isFlipped) {
+			context.saveGraphicsState ();
+			NSAffineTransform transform = NSAffineTransform.transform ();
+		 	transform.scaleXBy (1, -1);
+		 	transform.translateXBy (0, -(destRect.height + 2 * destRect.y));
+		 	transform.concat ();
+		}
+		NSRect sourceRect = new NSRect ();
+		sourceRect.width = destRect.width;
+		sourceRect.height = destRect.height;
+		image.handle.drawInRect (destRect, sourceRect, OS.NSCompositeSourceOver, 1f);
+		if (isFlipped) context.restoreGraphicsState ();
+		drawX += destRect.width;
+	}
+
+	if (displayText != null && displayText.length () > 0) {
+		if (image != null) drawX += MARGIN; /* space between image and text */
+		NSRect destRect = new NSRect ();
+		destRect.x = drawX;
+		destRect.y = cellRect.y;
+		destRect.width = Math.min (stringSize.width, cellRect.x + cellRect.width - MARGIN - drawX);
+		destRect.height = Math.min (stringSize.height, cellRect.height);
+		attrString.drawInRect (destRect);
+	}
+	if (attrString != null) attrString.release ();
+
+	context.restoreGraphicsState ();
+}
+
+/**
+ * Returns a value which describes the position of the
+ * text or image in the receiver. The value will be one of
+ * <code>LEFT</code>, <code>RIGHT</code> or <code>CENTER</code>.
+ *
+ * @return the alignment 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getAlignment () {
+	checkWidget ();
+	if ((style & SWT.LEFT) != 0) return SWT.LEFT;
+	if ((style & SWT.CENTER) != 0) return SWT.CENTER;
+	if ((style & SWT.RIGHT) != 0) return SWT.RIGHT;
+	return SWT.LEFT;
+}
+
+String getNameText () {
+	return getText ();
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>Tree</code>.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Tree getParent () {
+	checkWidget ();
+	return parent;
+}
+
+/**
+ * Gets the moveable attribute. A column that is
+ * not moveable cannot be reordered by the user 
+ * by dragging the header but may be reordered 
+ * by the programmer.
+ *
+ * @return the moveable attribute
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Tree#getColumnOrder()
+ * @see Tree#setColumnOrder(int[])
+ * @see TreeColumn#setMoveable(boolean)
+ * @see SWT#Move
+ * 
+ * @since 3.2
+ */
+public boolean getMoveable () {
+	checkWidget ();
+	return movable;
+}
+
+/**
+ * Gets the resizable attribute. A column that is
+ * not resizable cannot be dragged by the user but
+ * may be resized by the programmer.
+ *
+ * @return the resizable attribute
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getResizable () {
+	checkWidget ();
+	return nsColumn.resizingMask() != OS.NSTableColumnNoResizing;
+}
+
+/**
+ * Returns the receiver's tool tip text, or null if it has
+ * not been set.
+ *
+ * @return the receiver's tool tip text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public String getToolTipText () {
+	checkWidget ();
+	return toolTipText;
+}
+
+/**
+ * Gets the width of the receiver.
+ *
+ * @return the width
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getWidth () {
+	checkWidget ();
+	int width = (int)nsColumn.width();
+	// TODO how to differentiate 0 and 1 cases?
+	if (width > 0) width += Tree.CELL_GAP;
+	return width;
+}
+
+/**
+ * Causes the receiver to be resized to its preferred size.
+ * For a composite, this involves computing the preferred size
+ * from its layout, if there is one.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ */
+public void pack () {
+	checkWidget ();
+
+	int width = 0;
+
+	/* compute header width */
+	if (displayText != null) {
+		NSTableHeaderCell headerCell = nsColumn.headerCell ();
+		Font font = Font.cocoa_new(display, headerCell.font ());
+		NSAttributedString attrString = parent.createString(displayText, font, null, 0, true, false);
+		NSSize stringSize = attrString.size ();
+		attrString.release ();
+		width += Math.ceil (stringSize.width);
+		if (image != null) width += MARGIN; /* space between image and text */
+	}
+	if (image != null) {
+		NSSize imageSize = image.handle.size ();
+		width += Math.ceil (imageSize.width);
+	}
+	if (parent.sortColumn == this && parent.sortDirection != SWT.NONE) {
+		NSTableHeaderCell headerCell = nsColumn.headerCell ();
+		NSRect rect = new NSRect ();
+		rect.width = rect.height = Float.MAX_VALUE;
+		NSSize cellSize = headerCell.cellSizeForBounds (rect);
+		rect.height = cellSize.height;
+		NSRect sortRect = headerCell.sortIndicatorRectForBounds (rect);
+		width += Math.ceil (sortRect.width);
+	}
+
+	/* compute item widths down column */
+	GC gc = new GC (parent);
+	width = Math.max(width, parent.calculateWidth(parent.items, parent.indexOf (this), gc, true));
+	gc.dispose ();
+	setWidth (width);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (nsColumn != null) {
+		nsColumn.headerCell ().release ();
+		nsColumn.release ();
+	}
+	nsColumn = null;
+	parent = null;
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	if (parent.sortColumn == this) {
+		parent.sortColumn = null;
+	}
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is moved or resized.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ControlListener
+ * @see #addControlListener
+ */
+public void removeControlListener (ControlListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Move, listener);
+	eventTable.unhook (SWT.Resize, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+/**
+ * Controls how text and images will be displayed in the receiver.
+ * The argument should be one of <code>LEFT</code>, <code>RIGHT</code>
+ * or <code>CENTER</code>.
+ * <p>
+ * Note that due to a restriction on some platforms, the first column
+ * is always left aligned.
+ * </p>
+ * @param alignment the new alignment 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setAlignment (int alignment) {
+	checkWidget ();
+	if ((alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER)) == 0) return;
+	int index = parent.indexOf (this);
+	if (index == -1 || index == 0) return;
+	style &= ~(SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+	style |= alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+	NSOutlineView outlineView = ((NSOutlineView) parent.view);
+	NSTableHeaderView headerView = outlineView.headerView ();
+	if (headerView == null) return;
+	index = parent.indexOf (nsColumn);
+	NSRect rect = headerView.headerRectOfColumn (index);
+	headerView.setNeedsDisplayInRect (rect);
+	rect = outlineView.rectOfColumn (index);
+	parent.view.setNeedsDisplayInRect (rect);
+}
+
+public void setImage (Image image) {
+	checkWidget();
+	if (image != null && image.isDisposed ()) {
+		error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	super.setImage (image);
+	NSTableHeaderView headerView = ((NSOutlineView) parent.view).headerView ();
+	if (headerView == null) return;
+	int index = parent.indexOf (nsColumn);
+	NSRect rect = headerView.headerRectOfColumn (index);
+	headerView.setNeedsDisplayInRect (rect);
+}
+
+/**
+ * Sets the moveable attribute.  A column that is
+ * moveable can be reordered by the user by dragging
+ * the header. A column that is not moveable cannot be 
+ * dragged by the user but may be reordered 
+ * by the programmer.
+ *
+ * @param moveable the moveable attribute
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Tree#setColumnOrder(int[])
+ * @see Tree#getColumnOrder()
+ * @see TreeColumn#getMoveable()
+ * @see SWT#Move
+ * 
+ * @since 3.2
+ */
+public void setMoveable (boolean moveable) {
+	checkWidget ();
+	this.movable = moveable;
+}
+
+/**
+ * Sets the resizable attribute.  A column that is
+ * not resizable cannot be dragged by the user but
+ * may be resized by the programmer.
+ *
+ * @param resizable the resize attribute
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setResizable (boolean resizable) {
+	checkWidget ();
+	nsColumn.setResizingMask(resizable ? OS.NSTableColumnUserResizingMask : OS.NSTableColumnNoResizing);
+}
+
+public void setText (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	super.setText (string);
+	char [] buffer = new char [text.length ()];
+	text.getChars (0, buffer.length, buffer, 0);
+	int length = fixMnemonic (buffer);
+	displayText = new String (buffer, 0, length);
+	NSString title = NSString.stringWith (displayText);
+	nsColumn.headerCell ().setTitle (title);
+	NSTableHeaderView headerView = ((NSOutlineView) parent.view).headerView ();
+	if (headerView == null) return;
+	int index = parent.indexOf (nsColumn);
+	NSRect rect = headerView.headerRectOfColumn (index);
+	headerView.setNeedsDisplayInRect (rect);
+}
+
+/**
+ * Sets the receiver's tool tip text to the argument, which
+ * may be null indicating that the default tool tip for the 
+ * control will be shown. For a control that has a default
+ * tool tip, such as the Tree control on Windows, setting
+ * the tool tip text to an empty string replaces the default,
+ * causing no tool tip text to be shown.
+ * <p>
+ * The mnemonic indicator (character '&amp;') is not displayed in a tool tip.
+ * To display a single '&amp;' in the tool tip, the character '&amp;' can be 
+ * escaped by doubling it in the string.
+ * </p>
+ * 
+ * @param string the new tool tip text (or null)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setToolTipText (String string) {
+	checkWidget();
+	toolTipText = string;
+	parent.checkToolTip (this);
+}
+
+/**
+ * Sets the width of the receiver.
+ *
+ * @param width the new width
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setWidth (int width) {
+	checkWidget ();
+	if (width < 0) return;
+	// TODO how to differentiate 0 and 1 cases?
+	width = Math.max (0, width - Tree.CELL_GAP); 
+	nsColumn.setWidth (width);
+}
+
+String tooltipText () {
+	return toolTipText;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TreeItem.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TreeItem.java
new file mode 100755
index 0000000..7d57e77
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/TreeItem.java
@@ -0,0 +1,1456 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.cocoa.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class represent a selectable user interface object
+ * that represents a hierarchy of tree items in a tree widget.
+ * 
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tree">Tree, TreeItem, TreeColumn snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class TreeItem extends Item {
+	Tree parent;
+	TreeItem parentItem;
+	TreeItem[] items;
+	int itemCount;
+	String [] strings;
+	Image [] images;
+	boolean checked, grayed, cached, expanded;
+	Color foreground, background;
+	Color [] cellForeground, cellBackground;
+	Font font;
+	Font [] cellFont;
+	int width = -1;
+	/**
+	 * the handle to the OS resource 
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public SWTTreeItem handle;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Tree</code> or a <code>TreeItem</code>)
+ * and a style value describing its behavior and appearance.
+ * The item is added to the end of the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a tree control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TreeItem (Tree parent, int style) {
+	this (checkNull (parent), null, style, -1, true);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Tree</code> or a <code>TreeItem</code>),
+ * a style value describing its behavior and appearance, and the index
+ * at which to place it in the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a tree control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ * @param index the zero-relative index to store the receiver in its parent
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the parent (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TreeItem (Tree parent, int style, int index) {
+	this (checkNull (parent), null, style, checkIndex (index), true);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Tree</code> or a <code>TreeItem</code>)
+ * and a style value describing its behavior and appearance.
+ * The item is added to the end of the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parentItem a tree control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TreeItem (TreeItem parentItem, int style) {
+	this (checkNull (parentItem).parent, parentItem, style, -1, true);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Tree</code> or a <code>TreeItem</code>),
+ * a style value describing its behavior and appearance, and the index
+ * at which to place it in the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parentItem a tree control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ * @param index the zero-relative index to store the receiver in its parent
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the parent (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TreeItem (TreeItem parentItem, int style, int index) {
+	this (checkNull (parentItem).parent, parentItem, style, checkIndex (index), true);
+}
+
+TreeItem (Tree parent, TreeItem parentItem, int style, int index, boolean create) {
+	super (parent, style);
+	this.parent = parent;
+	this.parentItem = parentItem;
+	if (create) {
+		parent.createItem (this, parentItem, index);
+	} else {
+		handle = (SWTTreeItem) new SWTTreeItem ().alloc ().init ();
+		createJNIRef ();
+		register ();
+		items = new TreeItem[4];
+	}
+}
+
+static TreeItem checkNull (TreeItem item) {
+	if (item == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	return item;
+}
+
+static Tree checkNull (Tree parent) {
+	if (parent == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	return parent;
+}
+
+static int checkIndex (int index) {
+	if (index < 0) SWT.error (SWT.ERROR_INVALID_RANGE);
+	return index;
+}
+
+int calculateWidth (int index, GC gc) {
+	if (index == 0 && width != -1) return width;
+	Font font = null;
+	if (cellFont != null) font = cellFont[index];
+	if (font == null) font = this.font;
+	if (font == null) font = parent.font;
+	if (font == null) font = parent.defaultFont();
+	String text = index == 0 ? this.text : (strings == null ? "" : strings [index]);
+	Image image = index == 0 ? this.image : (images == null ? null : images [index]);
+	NSCell cell = parent.dataCell;
+	if (font.extraTraits != 0) {
+		NSAttributedString attribStr = parent.createString(text, font, null, 0, true, false);
+		cell.setAttributedStringValue(attribStr);
+		attribStr.release();
+	} else {
+		cell.setFont (font.handle);
+		cell.setTitle (NSString.stringWith(text != null ? text : ""));
+	}
+
+	/* This code is inlined for performance */
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = cell.id;
+	super_struct.super_class = OS.objc_msgSend(cell.id, OS.sel_superclass);
+	NSSize size = new NSSize();
+	OS.objc_msgSendSuper_stret(size, super_struct, OS.sel_cellSize);
+	if (image != null) size.width += parent.imageBounds.width + Table.IMAGE_GAP;
+//	cell.setImage (image != null ? image.handle : null);
+//	NSSize size = cell.cellSize ();
+
+	int width = (int)Math.ceil (size.width);
+	boolean sendMeasure = true;
+	if ((parent.style & SWT.VIRTUAL) != 0) {
+		sendMeasure = cached;
+	}
+	if (sendMeasure && parent.hooks (SWT.MeasureItem)) {
+		gc.setFont (font);
+		Event event = new Event ();
+		event.item = this;
+		event.index = index;
+		event.gc = gc;
+		NSTableView widget = (NSTableView)parent.view;
+		int height = (int)widget.rowHeight ();
+		event.width = width;
+		event.height = height;
+		parent.sendEvent (SWT.MeasureItem, event);
+		if (height < event.height) {
+			widget.setRowHeight (event.height);
+			widget.setNeedsDisplay (true);
+		}
+		width = event.width;
+	}
+	if (index == 0) {
+		NSOutlineView outlineView = (NSOutlineView)parent.view;
+		width += outlineView.indentationPerLevel () * (1 + outlineView.levelForItem (handle));
+		this.width = width;
+	}
+	return width;
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+void clear () {
+	cached = false;
+	text = "";
+	image = null;
+	strings = null;
+	images = null;
+	checked = grayed = false;
+	foreground = background = null;
+	cellForeground = cellBackground = null;
+	font = null;
+	cellFont = null;
+	width = -1;
+}
+
+/**
+ * Clears the item at the given zero-relative index in the receiver.
+ * The text, icon and other attributes of the item are set to the default
+ * value.  If the tree was created with the <code>SWT.VIRTUAL</code> style,
+ * these attributes are requested again as needed.
+ *
+ * @param index the index of the item to clear
+ * @param all <code>true</code> if all child items of the indexed item should be
+ * cleared recursively, and <code>false</code> otherwise
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see SWT#VIRTUAL
+ * @see SWT#SetData
+ * 
+ * @since 3.2
+ */
+public void clear (int index, boolean all) {
+	checkWidget ();
+	int count = getItemCount ();
+	if (index < 0 || index >= count) 
+		SWT.error (SWT.ERROR_INVALID_RANGE);
+	parent.clear (this, index, all);
+}
+
+
+/**
+ * Clears all the items in the receiver. The text, icon and other
+ * attributes of the items are set to their default values. If the
+ * tree was created with the <code>SWT.VIRTUAL</code> style, these
+ * attributes are requested again as needed.
+ * 
+ * @param all <code>true</code> if all child items should be cleared
+ * recursively, and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see SWT#VIRTUAL
+ * @see SWT#SetData
+ * 
+ * @since 3.2
+ */
+public void clearAll (boolean all) {
+	checkWidget ();
+	parent.clearAll (this, all);
+}
+
+void clearSelection () {
+	NSOutlineView widget = (NSOutlineView) parent.view;
+	int /*long*/ row = widget.rowForItem (handle);
+	if (widget.isRowSelected(row)) widget.deselectRow (row);
+	if (items != null && getExpanded ()) {
+		for (int i = 0; i < items.length; i++) {
+			TreeItem item = items [i];
+			if (item != null && !item.isDisposed ()) item.clearSelection ();
+		}
+	}
+}
+
+NSObject createString(int index) {
+	String text = index == 0 ? this.text : (strings == null ? "" : strings [index]);
+	return NSString.stringWith(text != null ? text : "");
+}
+
+void deregister () {
+	super.deregister ();
+	display.removeWidget (handle);
+}
+
+void destroyWidget () {
+	parent.destroyItem (this);
+	releaseHandle ();
+}
+
+/**
+ * Returns the receiver's background color.
+ *
+ * @return the background color
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.0
+ * 
+ */
+public Color getBackground () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	return background != null ? background : parent.getBackground ();
+}
+
+/**
+ * Returns the background color at the given column index in the receiver.
+ *
+ * @param index the column index
+ * @return the background color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public Color getBackground (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	int count = Math.max (1, parent.columnCount);
+	if (0 > index || index > count -1) return getBackground ();
+	if (cellBackground == null || cellBackground [index] == null) return getBackground ();
+	return cellBackground [index];
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location
+ * relative to its parent.
+ *
+ * @return the receiver's bounding rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Rectangle getBounds () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	parent.checkItems ();
+	NSOutlineView outlineView = (NSOutlineView) parent.view;
+	NSRect rect = outlineView.rectOfRow (outlineView.rowForItem (handle));
+	return new Rectangle((int) rect.x, (int) rect.y, (int) rect.width, (int) rect.height);
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location
+ * relative to its parent at a column in the tree.
+ *
+ * @param index the index that specifies the column
+ * @return the receiver's bounding column rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public Rectangle getBounds (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (!(0 <= index && index < Math.max (1, parent.columnCount))) return new Rectangle (0, 0, 0, 0);
+
+	parent.checkItems ();
+	NSOutlineView outlineView = (NSOutlineView) parent.view;
+	if (parent.columnCount == 0) {
+		index = (parent.style & SWT.CHECK) != 0 ? 1 : 0;
+	} else {
+		TreeColumn column = parent.getColumn (index);
+		index = parent.indexOf (column.nsColumn);
+	}
+	NSRect rect = outlineView.frameOfCellAtColumn (index, outlineView.rowForItem (handle));
+	return new Rectangle ((int) rect.x, (int) rect.y, (int) rect.width, (int) rect.height);
+}
+
+/**
+ * Returns <code>true</code> if the receiver is checked,
+ * and false otherwise.  When the parent does not have
+ * the <code>CHECK style, return false.
+ * <p>
+ *
+ * @return the checked state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getChecked () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if ((parent.style & SWT.CHECK) == 0) return false;
+	return checked;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is expanded,
+ * and false otherwise.
+ * <p>
+ *
+ * @return the expanded state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getExpanded () {
+	checkWidget ();
+	return expanded;
+}
+
+/**
+ * Returns the font that the receiver will use to paint textual information for this item.
+ *
+ * @return the receiver's font
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.0
+ */
+public Font getFont () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	return font != null ? font : parent.getFont ();
+}
+
+/**
+ * Returns the font that the receiver will use to paint textual information
+ * for the specified cell in this item.
+ *
+ * @param index the column index
+ * @return the receiver's font
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.1
+ */
+public Font getFont (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	int count = Math.max (1, parent.columnCount);
+	if (0 > index || index > count -1) return getFont ();
+	if (cellFont == null || cellFont [index] == null) return getFont ();
+	return cellFont [index];
+}
+
+/**
+ * Returns the foreground color that the receiver will use to draw.
+ *
+ * @return the receiver's foreground color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.0
+ * 
+ */
+public Color getForeground () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	return foreground != null ? foreground : parent.getForeground ();
+}
+
+/**
+ * 
+ * Returns the foreground color at the given column index in the receiver.
+ *
+ * @param index the column index
+ * @return the foreground color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public Color getForeground (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	int count = Math.max (1, parent.columnCount);
+	if (0 > index || index > count -1) return getForeground ();
+	if (cellForeground == null || cellForeground [index] == null) return getForeground ();
+	return cellForeground [index];
+}
+
+/**
+ * Returns <code>true</code> if the receiver is grayed,
+ * and false otherwise. When the parent does not have
+ * the <code>CHECK style, return false.
+ * <p>
+ *
+ * @return the grayed state of the checkbox
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getGrayed () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if ((parent.style & SWT.CHECK) == 0) return false;
+	return grayed;
+}
+
+public Image getImage () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	return super.getImage ();
+}
+
+/**
+ * Returns the image stored at the given column index in the receiver,
+ * or null if the image has not been set or if the column does not exist.
+ *
+ * @param index the column index
+ * @return the image stored at the given column index in the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public Image getImage (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (index == 0) return getImage ();
+	if (images != null) {
+		if (0 <= index && index < images.length) return images [index];
+	}
+	return null;
+}
+
+/**
+ * Returns a rectangle describing the size and location
+ * relative to its parent of an image at a column in the
+ * tree.
+ *
+ * @param index the index that specifies the column
+ * @return the receiver's bounding image rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public Rectangle getImageBounds (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (!(0 <= index && index < Math.max (1, parent.columnCount))) return new Rectangle (0, 0, 0, 0);
+
+	parent.checkItems ();
+	NSOutlineView outlineView = (NSOutlineView) parent.view;
+	Image image = index == 0 ? this.image : (images != null) ? images [index] : null;
+	if (parent.columnCount == 0) {
+		index = (parent.style & SWT.CHECK) != 0 ? 1 : 0;
+	} else {
+		TreeColumn column = parent.getColumn (index);
+		index = parent.indexOf (column.nsColumn);
+	}
+	NSRect rect = outlineView.frameOfCellAtColumn (index, outlineView.rowForItem (handle));
+	rect.x += Tree.IMAGE_GAP;
+	if (image != null) {
+		rect.width = parent.imageBounds.width;
+	} else {
+		rect.width = 0;
+	}
+	return new Rectangle((int) rect.x, (int) rect.y, (int) rect.width, (int) rect.height);
+}
+
+/**
+ * Returns the item at the given, zero-relative index in the
+ * receiver. Throws an exception if the index is out of range.
+ *
+ * @param index the index of the item to return
+ * @return the item at the given index
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public TreeItem getItem (int index) {
+	checkWidget ();
+	if (index < 0) error (SWT.ERROR_INVALID_RANGE);
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (index >= itemCount) error (SWT.ERROR_INVALID_RANGE);
+	return parent._getItem (this, index, true);
+}
+
+/**
+ * Returns the number of items contained in the receiver
+ * that are direct item children of the receiver.
+ *
+ * @return the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemCount () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	return itemCount;
+}
+
+/**
+ * Returns a (possibly empty) array of <code>TreeItem</code>s which
+ * are the direct item children of the receiver.
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the receiver's items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TreeItem [] getItems () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	TreeItem [] result = new TreeItem [itemCount];
+	for (int i=0; i<itemCount; i++) {
+		result [i] = parent._getItem (this, i, true);
+	}
+	return result;
+}
+
+String getNameText () {
+	if ((parent.style & SWT.VIRTUAL) != 0) {
+		if (!cached) return "*virtual*"; //$NON-NLS-1$
+	}
+	return super.getNameText ();
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>Tree</code>.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Tree getParent () {
+	checkWidget ();
+	return parent;
+}
+
+/**
+ * Returns the receiver's parent item, which must be a
+ * <code>TreeItem</code> or null when the receiver is a
+ * root.
+ *
+ * @return the receiver's parent item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TreeItem getParentItem () {
+	checkWidget ();
+	return parentItem;
+}
+
+public String getText () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	return super.getText ();
+}
+
+/**
+ * Returns the text stored at the given column index in the receiver,
+ * or empty string if the text has not been set.
+ *
+ * @param index the column index
+ * @return the text stored at the given column index in the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public String getText (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (index == 0) return getText ();
+	if (strings != null) {
+		if (0 <= index && index < strings.length) {
+			String string = strings [index];
+			return string != null ? string : "";
+		}
+	}
+	return "";
+}
+
+/**
+ * Returns a rectangle describing the size and location
+ * relative to its parent of the text at a column in the
+ * tree.
+ *
+ * @param index the index that specifies the column
+ * @return the receiver's bounding text rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.3
+ */
+public Rectangle getTextBounds (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (!(0 <= index && index < Math.max (1, parent.columnCount))) return new Rectangle (0, 0, 0, 0);
+
+	parent.checkItems ();
+	NSOutlineView outlineView = (NSOutlineView) parent.view;
+	Image image = index == 0 ? this.image : (images != null) ? images [index] : null;
+	if (parent.columnCount == 0) {
+		index = (parent.style & SWT.CHECK) != 0 ? 1 : 0;
+	} else {
+		TreeColumn column = parent.getColumn (index);
+		index = parent.indexOf (column.nsColumn);
+	}
+	NSRect rect = outlineView.frameOfCellAtColumn (index, outlineView.rowForItem (handle));
+	rect.x += Tree.TEXT_GAP;
+	rect.width -= Tree.TEXT_GAP;
+	if (image != null) {
+		int offset = parent.imageBounds.width + Tree.IMAGE_GAP;
+		rect.x += offset;
+		rect.width -= offset;
+	}
+	return new Rectangle((int) rect.x, (int) rect.y, (int) rect.width, (int) rect.height);
+}
+
+/**
+ * Searches the receiver's list starting at the first item
+ * (index 0) until an item is found that is equal to the 
+ * argument, and returns the index of that item. If no item
+ * is found, returns -1.
+ *
+ * @param item the search item
+ * @return the index of the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public int indexOf (TreeItem item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (item.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	if (item.parentItem != this) return -1;
+	for (int i = 0; i < itemCount; i++) {
+		if (item == items [i]) return i;
+	}
+	return -1;
+}
+
+void redraw (int columnIndex) {
+	if (parent.ignoreRedraw || !isDrawing()) return;
+	/* redraw the full item if columnIndex == -1 */
+	NSOutlineView outlineView = (NSOutlineView) parent.view;
+	NSRect rect;
+	if (columnIndex == -1 || parent.hooks (SWT.MeasureItem) || parent.hooks (SWT.EraseItem) || parent.hooks (SWT.PaintItem)) {
+		rect = outlineView.rectOfRow (outlineView.rowForItem (handle));
+	} else {
+		int index;
+		if (parent.columnCount == 0) {
+			index = (parent.style & SWT.CHECK) != 0 ? 1 : 0;
+		} else {
+			if (0 <= columnIndex && columnIndex < parent.columnCount) {
+				index = parent.indexOf (parent.columns[columnIndex].nsColumn);
+			} else {
+				return;
+			}
+		}
+		rect = outlineView.frameOfCellAtColumn (index, outlineView.rowForItem (handle));
+	}
+	outlineView.setNeedsDisplayInRect (rect);
+}
+
+void register () {
+	super.register ();
+	display.addWidget (handle, this);
+}
+
+void release(boolean destroy) {
+	/*
+	* Bug in Cocoa.  When removing selected items from an NSOutlineView, the selection
+	* is not properly updated.  The fix is to ensure that the item and its subitems
+	* are deselected before the item is removed by the reloadItem call. 
+	* 
+	* This has to be done in release to avoid traversing the tree twice when items are
+	* removed from the tree by setItemCount. 
+	*/
+	if (destroy) clearSelection ();
+	super.release(destroy);
+}
+
+void releaseChildren (boolean destroy) {
+	for (int i=0; i<items.length; i++) {
+		TreeItem item = items [i];
+		if (item != null && !item.isDisposed ()) {
+			item.release (false);
+		}
+	}
+	items = null;
+	itemCount = 0;
+	super.releaseChildren (destroy);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (handle != null) handle.release ();
+	handle = null;
+	parentItem = null;
+	parent = null;
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	strings = null;
+	images = null;
+	background = foreground = null;
+	font = null;
+	cellBackground = cellForeground = null;
+	cellFont = null;
+}
+
+/**
+ * Removes all of the items from the receiver.
+ * <p>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.1
+ */
+public void removeAll () {
+	checkWidget ();
+	parent.setItemCount (0);
+}
+
+void sendExpand (boolean expand, boolean recurse) {
+	if (itemCount == 0) return;
+	if (expanded != expand) {
+		Event event = new Event ();
+		event.item = this;
+		parent.sendEvent (expand ? SWT.Expand : SWT.Collapse, event);
+		if (isDisposed ()) return;
+		expanded = expand;
+	}
+	if (recurse) {
+		for (int i = 0; i < itemCount; i++) {
+			if (items[i] != null) items[i].sendExpand (expand, recurse);
+		}
+	}
+}
+
+/**
+ * Sets the receiver's background color to the color specified
+ * by the argument, or to the default system color for the item
+ * if the argument is null.
+ *
+ * @param color the new color (or null)
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.0
+ * 
+ */
+public void setBackground (Color color) {
+	checkWidget ();
+	if (color != null && color.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	Color oldColor = background;
+	if (oldColor == color) return;
+	background = color;
+	if (oldColor != null && oldColor.equals (color)) return;
+	cached = true;
+	redraw (-1);
+}
+
+/**
+ * Sets the background color at the given column index in the receiver 
+ * to the color specified by the argument, or to the default system color for the item
+ * if the argument is null.
+ *
+ * @param index the column index
+ * @param color the new color (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ * 
+ */
+public void setBackground (int index, Color color) {
+	checkWidget ();
+	if (color != null && color.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	int count = Math.max (1, parent.columnCount);
+	if (0 > index || index > count - 1) return;
+	if (cellBackground == null) {
+		if (color == null) return;
+		cellBackground = new Color [count];
+	}
+	Color oldColor = cellBackground [index];
+	if (oldColor == color) return;
+	cellBackground [index] = color;
+	if (oldColor != null && oldColor.equals (color)) return;
+	cached = true; 
+	redraw (index);
+}
+
+/**
+ * Sets the checked state of the receiver.
+ * <p>
+ *
+ * @param checked the new checked state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setChecked (boolean checked) {
+	checkWidget ();
+	if ((parent.style & SWT.CHECK) == 0) return;
+	if (this.checked == checked) return;
+	this.checked = checked;
+	cached = true;
+	redraw (-1);
+}
+
+/**
+ * Sets the expanded state of the receiver.
+ * <p>
+ *
+ * @param expanded the new expanded state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setExpanded (boolean expanded) {
+	checkWidget ();
+
+	/* Do nothing when the item is a leaf or already expanded */
+	if (itemCount == 0 || expanded == getExpanded ()) return;
+
+	parent.checkItems ();
+	parent.ignoreExpand = true;
+	this.expanded = expanded;
+	if (expanded) {
+		((NSOutlineView) parent.view).expandItem (handle);
+	} else {
+		((NSOutlineView) parent.view).collapseItem (handle);
+	}
+	parent.ignoreExpand = false;
+	cached = true;
+	if (!expanded) {
+		parent.setScrollWidth ();
+	}
+}
+
+/**
+ * Sets the font that the receiver will use to paint textual information
+ * for this item to the font specified by the argument, or to the default font
+ * for that kind of control if the argument is null.
+ *
+ * @param font the new font (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void setFont (Font font) {
+	checkWidget ();
+	if (font != null && font.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	Font oldFont = this.font;
+	if (oldFont == font) return;
+	this.font = font;
+	if (oldFont != null && oldFont.equals (font)) return;
+	width = -1;
+	cached = true;
+	redraw (-1);
+}
+
+/**
+ * Sets the font that the receiver will use to paint textual information
+ * for the specified cell in this item to the font specified by the 
+ * argument, or to the default font for that kind of control if the 
+ * argument is null.
+ *
+ * @param index the column index
+ * @param font the new font (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void setFont (int index, Font font) {
+	checkWidget ();
+	if (font != null && font.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	int count = Math.max (1, parent.columnCount);
+	if (0 > index || index > count - 1) return;
+	if (cellFont == null) {
+		if (font == null) return;
+		cellFont = new Font [count];
+	}
+	Font oldFont = cellFont [index];
+	if (oldFont == font) return;
+	cellFont [index] = font;
+	if (oldFont != null && oldFont.equals (font)) return;
+	width = -1;
+	cached = true;
+	redraw (index);
+}
+
+/**
+ * Sets the receiver's foreground color to the color specified
+ * by the argument, or to the default system color for the item
+ * if the argument is null.
+ *
+ * @param color the new color (or null)
+ *
+ * @since 2.0
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.0
+ * 
+ */
+public void setForeground (Color color) {
+	checkWidget ();
+	if (color != null && color.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	Color oldColor = foreground;
+	if (oldColor == color) return;
+	foreground = color;
+	if (oldColor != null && oldColor.equals (color)) return;
+	cached = true;
+	redraw (-1);
+}
+
+/**
+ * Sets the foreground color at the given column index in the receiver 
+ * to the color specified by the argument, or to the default system color for the item
+ * if the argument is null.
+ *
+ * @param index the column index
+ * @param color the new color (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ * 
+ */
+public void setForeground (int index, Color color){
+	checkWidget ();
+	if (color != null && color.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	int count = Math.max (1, parent.columnCount);
+	if (0 > index || index > count - 1) return;
+	if (cellForeground == null) {
+		if (color == null) return;
+		cellForeground = new Color [count];
+	}
+	Color oldColor = cellForeground [index];
+	if (oldColor == color) return;
+	cellForeground [index] = color;
+	if (oldColor != null && oldColor.equals (color)) return;
+	cached = true;
+	redraw (index);
+}
+
+/**
+ * Sets the grayed state of the checkbox for this item.  This state change 
+ * only applies if the Tree was created with the SWT.CHECK style.
+ *
+ * @param grayed the new grayed state of the checkbox
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setGrayed (boolean grayed) {
+	checkWidget ();
+	if ((parent.style & SWT.CHECK) == 0) return;
+	if (this.grayed == grayed) return;
+	this.grayed = grayed;
+	cached = true;
+	redraw (-1);
+}
+
+/**
+ * Sets the image for multiple columns in the tree. 
+ * 
+ * @param images the array of new images
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array of images is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if one of the images has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void setImage (Image [] images) {
+	checkWidget ();
+	if (images == null) error (SWT.ERROR_NULL_ARGUMENT);
+	for (int i=0; i<images.length; i++) {
+		setImage (i, images [i]);
+	}
+}
+
+/**
+ * Sets the receiver's image at a column.
+ *
+ * @param index the column index
+ * @param image the new image
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void setImage (int index, Image image) {
+	checkWidget ();
+	if (image != null && image.isDisposed ()) {
+		error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	if (parent.imageBounds == null && image != null) {
+		parent.setItemHeight (image, null, false);
+	}
+	if (index == 0)  {
+		if (image != null && image.type == SWT.ICON) {
+			if (image.equals (this.image)) return;
+		}
+		width = -1;
+		super.setImage (image);
+	}
+	int count = Math.max (1, parent.columnCount);
+	if (0 <= index && index < count) {
+		if (images == null) images = new Image [count];
+		if (image != null && image.type == SWT.ICON) {
+			if (image.equals (images [index])) return;
+		}
+		images [index] = image;	
+	}
+	cached = true;
+	if (index == 0) parent.setScrollWidth (this);
+	if (0 <= index && index < count) redraw (index);
+}
+
+public void setImage (Image image) {
+	checkWidget ();
+	setImage (0, image);
+}
+
+/**
+ * Sets the number of child items contained in the receiver.
+ *
+ * @param count the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.2
+ */
+public void setItemCount (int count) {
+	checkWidget ();
+	count = Math.max (0, count);
+	parent.setItemCount (this, count);
+}
+
+/**
+ * Sets the text for multiple columns in the tree. 
+ * 
+ * @param strings the array of new strings
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void setText (String [] strings) {
+	checkWidget ();
+	if (strings == null) error (SWT.ERROR_NULL_ARGUMENT);
+	for (int i=0; i<strings.length; i++) {
+		String string = strings [i];
+		if (string != null) setText (i, string);
+	}
+}
+
+/**
+ * Sets the receiver's text at a column
+ *
+ * @param index the column index
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void setText (int index, String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (index == 0) {
+		if (string.equals (text)) return;
+		width = -1;
+		super.setText (string);
+	}
+	int count = Math.max (1, parent.columnCount);
+	if (0 <= index && index < count) {
+		if (strings == null) strings = new String [count];
+		if (string.equals (strings [index])) return;
+		strings [index] = string;
+	}
+	cached = true;
+	if (index == 0) parent.setScrollWidth (this);
+	if (0 <= index && index < count) redraw (index);
+}
+
+public void setText (String string) {
+	checkWidget ();
+	setText (0, string);
+}
+
+void updateExpanded () {
+	if (itemCount == 0) return;
+	NSOutlineView outlineView = (NSOutlineView)parent.view;
+	if (expanded != outlineView.isItemExpanded (handle)) {
+		if (expanded) {
+			outlineView.expandItem (handle);
+		} else {
+			outlineView.collapseItem (handle);
+		}
+	}
+	for (int i = 0; i < itemCount; i++) {
+		if (items[i] != null) items[i].updateExpanded ();
+	}
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Widget.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Widget.java
new file mode 100755
index 0000000..3ec4ead
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Widget.java
@@ -0,0 +1,1767 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.cocoa.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * This class is the abstract superclass of all user interface objects.  
+ * Widgets are created, disposed and issue notification to listeners
+ * when events occur which affect them.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Dispose</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation. However, it has not been marked
+ * final to allow those outside of the SWT development team to implement
+ * patched versions of the class in order to get around specific
+ * limitations in advance of when those limitations can be addressed
+ * by the team.  Any class built using subclassing to access the internals
+ * of this class will likely fail to compile or run between releases and
+ * may be strongly platform specific. Subclassing should not be attempted
+ * without an intimate and detailed understanding of the workings of the
+ * hierarchy. No support is provided for user-written classes which are
+ * implemented as subclasses of this class.
+ * </p>
+ *
+ * @see #checkSubclass
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public abstract class Widget {
+	int style, state;
+	Display display;
+	EventTable eventTable;
+	Object data;
+
+	int /*long*/ jniRef;
+
+	/* Global state flags */
+	static final int DISPOSED         = 1 << 0;
+	static final int CANVAS           = 1 << 1;
+	static final int KEYED_DATA       = 1 << 2;
+	static final int DISABLED         = 1 << 3;
+	static final int HIDDEN           = 1 << 4;
+	static final int GRAB	             = 1 << 5;
+	static final int MOVED            = 1 << 6;
+	static final int RESIZED          = 1 << 7;
+	static final int EXPANDING        = 1 << 8;
+	static final int IGNORE_WHEEL     = 1 << 9;
+	static final int PARENT_BACKGROUND = 1 << 10;
+	static final int THEME_BACKGROUND = 1 << 11;
+	
+	/* A layout was requested on this widget */
+	static final int LAYOUT_NEEDED	= 1<<12;
+	
+	/* The preferred size of a child has changed */
+	static final int LAYOUT_CHANGED = 1<<13;
+	
+	/* A layout was requested in this widget hierachy */
+	static final int LAYOUT_CHILD = 1<<14;
+
+	/* More global state flags */
+	static final int RELEASED = 1<<15;
+	static final int DISPOSE_SENT = 1<<16;	
+	static final int FOREIGN_HANDLE = 1<<17;
+	static final int DRAG_DETECT = 1<<18;
+
+	/* Safari fixes */
+	static final int SAFARI_EVENTS_FIX = 1<<19;
+	static final String SAFARI_EVENTS_FIX_KEY = "org.eclipse.swt.internal.safariEventsFix"; //$NON-NLS-1$
+	static final String GLCONTEXT_KEY = "org.eclipse.swt.internal.cocoa.glcontext"; //$NON-NLS-1$
+
+	/* Default size for widgets */
+	static final int DEFAULT_WIDTH	= 64;
+	static final int DEFAULT_HEIGHT	= 64;
+
+Widget () {
+	/* Do nothing */
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a widget which will be the parent of the new instance (cannot be null)
+ * @param style the style of widget to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parent is disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see #checkSubclass
+ * @see #getStyle
+ */
+public Widget (Widget parent, int style) {
+	checkSubclass ();
+	checkParent (parent);
+	this.style = style;
+	display = parent.display;
+}
+
+int /*long*/ accessibilityActionDescription(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	return callSuperObject(id, sel, arg0);
+}
+
+int /*long*/ accessibilityActionNames(int /*long*/ id, int /*long*/ sel) {
+	return callSuperObject(id, sel);
+}
+
+int /*long*/ accessibilityAttributeNames(int /*long*/ id, int /*long*/ sel) {
+	return callSuperObject(id, sel);
+}
+
+int /*long*/ accessibilityAttributeValue(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	return callSuperObject(id, sel, arg0);
+}
+
+int /*long*/ accessibilityAttributeValue_forParameter(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	return OS.objc_msgSendSuper(super_struct, sel, arg0, arg1);
+}
+
+int /*long*/ accessibilityFocusedUIElement(int /*long*/ id, int /*long*/ sel) {
+	return callSuperObject(id, sel);
+}
+
+int /*long*/ accessibilityHitTest(int /*long*/ id, int /*long*/ sel, NSPoint point) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	return OS.objc_msgSendSuper(super_struct, sel, point);
+}
+
+boolean accessibilityIsIgnored(int /*long*/ id, int /*long*/ sel) {
+	return callSuperBoolean(id, sel);
+}
+
+int /*long*/ accessibilityParameterizedAttributeNames(int /*long*/ id, int /*long*/ sel) {
+	return callSuperObject(id, sel);
+}
+
+void accessibilityPerformAction(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	callSuper(id, sel, arg0);
+}
+
+String getClipboardText () {
+	NSPasteboard pasteboard = NSPasteboard.generalPasteboard ();
+	NSString string = pasteboard.stringForType (OS.NSStringPboardType);
+	return string != null ? string.getString () : null;
+}
+
+void setClipRegion (float /*double*/ x, float /*double*/ y) {
+}
+
+int /*long*/ attributedSubstringFromRange (int /*long*/ id, int /*long*/ sel, int /*long*/ range) {
+	return 0;
+}
+
+void callSuper(int /*long*/ id, int /*long*/ sel) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	OS.objc_msgSendSuper(super_struct, sel);
+}
+
+void callSuper(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	OS.objc_msgSendSuper(super_struct, sel, arg0);
+}
+
+void callSuper(int /*long*/ id, int /*long*/ sel, NSRect arg0) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	OS.objc_msgSendSuper(super_struct, sel, arg0);
+}
+
+void callSuper(int /*long*/ id, int /*long*/ sel, NSRect arg0, int /*long*/ arg1) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	OS.objc_msgSendSuper(super_struct, sel, arg0, arg1);
+}
+
+int /*long*/ callSuper(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, NSRect arg1, int /*long*/ arg2) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	return OS.objc_msgSendSuper(super_struct, sel, arg0, arg1, arg2);
+}
+
+boolean callSuperBoolean(int /*long*/ id, int /*long*/ sel) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	return OS.objc_msgSendSuper(super_struct, sel) != 0;
+}
+
+boolean canBecomeKeyWindow (int /*long*/ id, int /*long*/ sel) {
+	return callSuperBoolean (id, sel);
+}
+
+NSSize cellSize (int /*long*/ id, int /*long*/ sel) {
+	NSSize result = new NSSize();
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	OS.objc_msgSendSuper_stret(result, super_struct, sel);
+	return result;
+}
+
+boolean callSuperBoolean(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	return OS.objc_msgSendSuper(super_struct, sel, arg0) != 0;
+}
+
+boolean callSuperBoolean(int /*long*/ id, int /*long*/ sel, NSRange range, int /*long*/ arg1) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	return OS.objc_msgSendSuper_bool(super_struct, sel, range, arg1);
+}
+
+int /*long*/ callSuperObject(int /*long*/ id, int /*long*/ sel) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	return OS.objc_msgSendSuper(super_struct, sel);
+}
+
+int /*long*/ callSuperObject(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	return OS.objc_msgSendSuper(super_struct, sel, arg0);
+}
+
+boolean canDragRowsWithIndexes_atPoint(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
+	// Trees/tables are not draggable unless explicitly told they are.
+	return false;
+}
+
+int /*long*/ characterIndexForPoint (int /*long*/ id, int /*long*/ sel, int /*long*/ point) {
+	return OS.NSNotFound;
+}
+
+boolean acceptsFirstMouse (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	return OS.objc_msgSendSuper(super_struct, sel, theEvent) != 0;
+}
+
+boolean acceptsFirstResponder (int /*long*/ id, int /*long*/ sel) {
+	return callSuperBoolean(id, sel);
+}
+
+boolean becomeFirstResponder (int /*long*/ id, int /*long*/ sel) {
+	return callSuperBoolean(id, sel);
+}
+
+void becomeKeyWindow (int /*long*/ id, int /*long*/ sel) {
+	callSuper(id, sel);
+}
+
+boolean resignFirstResponder (int /*long*/ id, int /*long*/ sel) {
+	return callSuperBoolean(id, sel);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when an event of the given type occurs. When the
+ * event does occur in the widget, the listener is notified by
+ * sending it the <code>handleEvent()</code> message. The event
+ * type is one of the event constants defined in class <code>SWT</code>.
+ *
+ * @param eventType the type of event to listen for
+ * @param listener the listener which should be notified when the event occurs
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Listener
+ * @see SWT
+ * @see #getListeners(int)
+ * @see #removeListener(int, Listener)
+ * @see #notifyListeners
+ */
+public void addListener (int eventType, Listener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	_addListener (eventType, listener);
+}
+
+void _addListener (int eventType, Listener listener) {
+	if (eventTable == null) eventTable = new EventTable ();
+	eventTable.hook (eventType, listener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the widget is disposed. When the widget is
+ * disposed, the listener is notified by sending it the
+ * <code>widgetDisposed()</code> message.
+ *
+ * @param listener the listener which should be notified when the receiver is disposed
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see DisposeListener
+ * @see #removeDisposeListener
+ */
+public void addDisposeListener (DisposeListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Dispose, typedListener);
+}
+
+boolean canBecomeKeyView(int /*long*/ id, int /*long*/ sel) {
+	return true;
+}
+
+static int checkBits (int style, int int0, int int1, int int2, int int3, int int4, int int5) {
+	int mask = int0 | int1 | int2 | int3 | int4 | int5;
+	if ((style & mask) == 0) style |= int0;
+	if ((style & int0) != 0) style = (style & ~mask) | int0;
+	if ((style & int1) != 0) style = (style & ~mask) | int1;
+	if ((style & int2) != 0) style = (style & ~mask) | int2;
+	if ((style & int3) != 0) style = (style & ~mask) | int3;
+	if ((style & int4) != 0) style = (style & ~mask) | int4;
+	if ((style & int5) != 0) style = (style & ~mask) | int5;
+	return style;
+}
+
+void checkOpen () {
+	/* Do nothing */
+}
+
+void checkOrientation (Widget parent) {
+	style &= ~SWT.MIRRORED;
+	if ((style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT)) == 0) {
+		if (parent != null) {
+			if ((parent.style & SWT.LEFT_TO_RIGHT) != 0) style |= SWT.LEFT_TO_RIGHT;
+			if ((parent.style & SWT.RIGHT_TO_LEFT) != 0) style |= SWT.RIGHT_TO_LEFT;
+		}
+	}
+	style = checkBits (style, SWT.LEFT_TO_RIGHT, SWT.RIGHT_TO_LEFT, 0, 0, 0, 0);
+}
+
+void checkParent (Widget parent) {
+	if (parent == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (parent.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	parent.checkWidget ();
+	parent.checkOpen ();
+}
+
+/**
+ * Checks that this class can be subclassed.
+ * <p>
+ * The SWT class library is intended to be subclassed 
+ * only at specific, controlled points (most notably, 
+ * <code>Composite</code> and <code>Canvas</code> when
+ * implementing new widgets). This method enforces this
+ * rule unless it is overridden.
+ * </p><p>
+ * <em>IMPORTANT:</em> By providing an implementation of this
+ * method that allows a subclass of a class which does not 
+ * normally allow subclassing to be created, the implementer
+ * agrees to be fully responsible for the fact that any such
+ * subclass will likely fail between SWT releases and will be
+ * strongly platform specific. No support is provided for
+ * user-written classes which are implemented in this fashion.
+ * </p><p>
+ * The ability to subclass outside of the allowed SWT classes
+ * is intended purely to enable those not on the SWT development
+ * team to implement patches in order to get around specific
+ * limitations in advance of when those limitations can be
+ * addressed by the team. Subclassing should not be attempted
+ * without an intimate and detailed understanding of the hierarchy.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ */
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+/**
+ * Throws an <code>SWTException</code> if the receiver can not
+ * be accessed by the caller. This may include both checks on
+ * the state of the receiver and more generally on the entire
+ * execution context. This method <em>should</em> be called by
+ * widget implementors to enforce the standard SWT invariants.
+ * <p>
+ * Currently, it is an error to invoke any method (other than
+ * <code>isDisposed()</code>) on a widget that has had its 
+ * <code>dispose()</code> method called. It is also an error
+ * to call widget methods from any thread that is different
+ * from the thread that created the widget.
+ * </p><p>
+ * In future releases of SWT, there may be more or fewer error
+ * checks and exceptions may be thrown for different reasons.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+protected void checkWidget () {
+	Display display = this.display;
+	if (display == null) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (display.thread != Thread.currentThread () && !display.isEmbedded) error (SWT.ERROR_THREAD_INVALID_ACCESS);
+	if ((state & DISPOSED) != 0) error (SWT.ERROR_WIDGET_DISPOSED);
+}
+
+boolean textView_clickOnLink_atIndex(int /*long*/ id, int /*long*/ sel, int /*long*/ textView, int /*long*/ link, int /*long*/ charIndex) {
+	return true;
+}
+
+void collapseItem_collapseChildren (int /*long*/ id, int /*long*/ sel, int /*long*/ item, boolean children) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	OS.objc_msgSendSuper(super_struct, sel, item, children);
+}
+
+void copyToClipboard (char [] buffer) {
+	if (buffer.length == 0) return;
+	NSPasteboard pasteboard = NSPasteboard.generalPasteboard ();
+	pasteboard.declareTypes (NSArray.arrayWithObject (OS.NSStringPboardType), null);
+	pasteboard.setString (NSString.stringWithCharacters (buffer, buffer.length), OS.NSStringPboardType);
+}
+
+void createHandle () {
+}
+
+void createJNIRef () {
+	jniRef = OS.NewGlobalRef(this);
+	if (jniRef == 0) error (SWT.ERROR_NO_HANDLES);
+}
+
+void createWidget () {
+	createJNIRef ();
+	createHandle ();
+	register ();
+}
+	
+void deregister () {
+}
+
+void destroyJNIRef () {
+	if (jniRef != 0) OS.DeleteGlobalRef (jniRef);
+	jniRef = 0;
+}
+
+void destroyWidget () {
+	releaseHandle ();
+}
+
+/**
+ * Disposes of the operating system resources associated with
+ * the receiver and all its descendants. After this method has
+ * been invoked, the receiver and all descendants will answer
+ * <code>true</code> when sent the message <code>isDisposed()</code>.
+ * Any internal connections between the widgets in the tree will
+ * have been removed to facilitate garbage collection.
+ * <p>
+ * NOTE: This method is not called recursively on the descendants
+ * of the receiver. This means that, widget implementers can not
+ * detect when a widget is being disposed of by re-implementing
+ * this method, but should instead listen for the <code>Dispose</code>
+ * event.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #addDisposeListener
+ * @see #removeDisposeListener
+ * @see #checkWidget
+ */
+public void dispose () {
+	/*
+	* Note:  It is valid to attempt to dispose a widget
+	* more than once.  If this happens, fail silently.
+	*/
+	if (isDisposed ()) return;
+	if (!isValidThread ()) error (SWT.ERROR_THREAD_INVALID_ACCESS);
+	release (true);
+}
+
+void doCommandBySelector (int /*long*/ id, int /*long*/ sel, int /*long*/ aSelector) {
+	callSuper (id, sel, aSelector);
+}
+
+boolean dragSelectionWithEvent(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2) {
+	return false;
+}
+
+void drawBackground (int /*long*/ id, NSGraphicsContext context, NSRect rect) {
+	/* Do nothing */
+}
+
+void drawImageWithFrameInView (int /*long*/ id, int /*long*/ sel, int /*long*/ image, NSRect rect, int /*long*/ view) {
+}
+
+void drawInteriorWithFrame_inView (int /*long*/ id, int /*long*/ sel, NSRect cellFrame, int /*long*/ view) {
+	callSuper(id, sel, cellFrame, view);
+}
+
+void drawWithExpansionFrame_inView (int /*long*/ id, int /*long*/ sel, NSRect cellFrame, int /*long*/ view) {
+	callSuper(id, sel, cellFrame, view);
+}
+
+void drawRect (int /*long*/ id, int /*long*/ sel, NSRect rect) {
+	if (!isDrawing()) return;
+	Display display = this.display;
+	NSView view = new NSView(id);
+	display.isPainting.addObject(view);
+	NSGraphicsContext context = NSGraphicsContext.currentContext();
+	context.saveGraphicsState();
+	setClipRegion(0, 0);
+	drawBackground (id, context, rect);
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	OS.objc_msgSendSuper(super_struct, sel, rect);
+	if (!isDisposed()) {
+		/* 
+		* Feature in Cocoa. There are widgets that draw outside of the UI thread,
+		* such as the progress bar and default button.  The fix is to draw the
+		* widget but not send paint events.
+		*/
+		drawWidget (id, context, rect);
+	}
+	context.restoreGraphicsState();
+	display.isPainting.removeObjectIdenticalTo(view);
+}
+
+void _drawThemeProgressArea (int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	OS.objc_msgSendSuper(super_struct, sel, arg0);
+}
+
+void drawWidget (int /*long*/ id, NSGraphicsContext context, NSRect rect) {
+}
+
+void redrawWidget (NSView view, boolean children) {
+	view.setNeedsDisplay(true);
+}
+
+void redrawWidget (NSView view, int /*long*/ x, int /*long*/ y, int /*long*/ width, int /*long*/ height, boolean children) {
+	NSRect rect = new NSRect();
+	rect.x = x;
+	rect.y = y;
+	rect.width = width;
+	rect.height = height;
+	view.setNeedsDisplayInRect(rect);
+}
+
+void error (int code) {
+	SWT.error(code);
+}
+
+void expandItem_expandChildren (int /*long*/ id, int /*long*/ sel, int /*long*/ item, boolean children) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	OS.objc_msgSendSuper(super_struct, sel, item, children);
+}
+
+NSRect expansionFrameWithFrame_inView(int /*long*/ id, int /*long*/ sel, NSRect cellRect, int /*long*/ view) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	NSRect result = new NSRect();
+	OS.objc_msgSendSuper_stret(result, super_struct, sel, cellRect, view);
+	return result;
+}
+
+boolean filters (int eventType) {
+	return display.filters (eventType);
+}
+
+NSRect firstRectForCharacterRange(int /*long*/ id, int /*long*/ sel, int /*long*/ range) {
+	return new NSRect ();
+}
+
+int fixMnemonic (char [] buffer) {
+	int i=0, j=0;
+	while (i < buffer.length) {
+		if ((buffer [j++] = buffer [i++]) == '&') {
+			if (i == buffer.length) {continue;}
+			if (buffer [i] == '&') {i++; continue;}
+			j--;
+		}
+	}
+	return j;
+}
+
+/**
+ * Returns the application defined widget data associated
+ * with the receiver, or null if it has not been set. The
+ * <em>widget data</em> is a single, unnamed field that is
+ * stored with every widget. 
+ * <p>
+ * Applications may put arbitrary objects in this field. If
+ * the object stored in the widget data needs to be notified
+ * when the widget is disposed of, it is the application's
+ * responsibility to hook the Dispose event on the widget and
+ * do so.
+ * </p>
+ *
+ * @return the widget data
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - when the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - when called from the wrong thread</li>
+ * </ul>
+ *
+ * @see #setData(Object)
+ */
+public Object getData () {
+	checkWidget();
+	return (state & KEYED_DATA) != 0 ? ((Object []) data) [0] : data;
+}
+
+/**
+ * Returns the application defined property of the receiver
+ * with the specified name, or null if it has not been set.
+ * <p>
+ * Applications may have associated arbitrary objects with the
+ * receiver in this fashion. If the objects stored in the
+ * properties need to be notified when the widget is disposed
+ * of, it is the application's responsibility to hook the
+ * Dispose event on the widget and do so.
+ * </p>
+ *
+ * @param	key the name of the property
+ * @return the value of the property or null if it has not been set
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the key is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #setData(String, Object)
+ */
+public Object getData (String key) {
+	checkWidget();
+	if (key == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if ((state & KEYED_DATA) != 0) {
+		Object [] table = (Object []) data;
+		for (int i=1; i<table.length; i+=2) {
+			if (key.equals (table [i])) return table [i+1];
+		}
+	}
+	return null;
+}
+
+/**
+ * Returns the <code>Display</code> that is associated with
+ * the receiver.
+ * <p>
+ * A widget's display is either provided when it is created
+ * (for example, top level <code>Shell</code>s) or is the
+ * same as its parent's display.
+ * </p>
+ *
+ * @return the receiver's display
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Display getDisplay () {
+	Display display = this.display;
+	if (display == null) error (SWT.ERROR_WIDGET_DISPOSED);
+	return display;
+}
+
+boolean getDrawing () {
+	return true;
+}
+
+/**
+ * Returns an array of listeners who will be notified when an event 
+ * of the given type occurs. The event type is one of the event constants 
+ * defined in class <code>SWT</code>.
+ *
+ * @param eventType the type of event to listen for
+ * @return an array of listeners that will be notified when the event occurs
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Listener
+ * @see SWT
+ * @see #addListener(int, Listener)
+ * @see #removeListener(int, Listener)
+ * @see #notifyListeners
+ * 
+ * @since 3.4
+ */
+public Listener[] getListeners (int eventType) {
+	checkWidget();
+	if (eventTable == null) return new Listener[0];
+	return eventTable.getListeners(eventType);
+}
+
+String getName () {
+	String string = getClass ().getName ();
+	int index = string.lastIndexOf ('.');
+	if (index == -1) return string;
+	return string.substring (index + 1, string.length ());
+}
+
+String getNameText () {
+	return "";
+}
+
+/**
+ * Returns the receiver's style information.
+ * <p>
+ * Note that the value which is returned by this method <em>may
+ * not match</em> the value which was provided to the constructor
+ * when the receiver was created. This can occur when the underlying
+ * operating system does not support a particular combination of
+ * requested styles. For example, if the platform widget used to
+ * implement a particular SWT widget always has scroll bars, the
+ * result of calling this method would always have the
+ * <code>SWT.H_SCROLL</code> and <code>SWT.V_SCROLL</code> bits set.
+ * </p>
+ *
+ * @return the style bits
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getStyle () {
+	checkWidget();
+	return style;
+}
+
+boolean hasMarkedText (int /*long*/ id, int /*long*/ sel) {
+	return false;
+}
+
+void helpRequested(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+}
+
+void highlightSelectionInClipRect(int /*long*/ id, int /*long*/ sel, int /*long*/ rect) {	
+}
+
+int /*long*/ hitTest (int /*long*/ id, int /*long*/ sel, NSPoint point) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	return OS.objc_msgSendSuper(super_struct, sel, point);
+}
+
+int /*long*/ hitTestForEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ event, NSRect rect, int /*long*/ controlView) {
+	return 0;
+}
+
+boolean hooks (int eventType) {
+	if (eventTable == null) return false;
+	return eventTable.hooks (eventType);
+}
+
+int /*long*/ image (int /*long*/ id, int /*long*/ sel) {
+	return 0;
+}
+
+NSRect imageRectForBounds (int /*long*/ id, int /*long*/ sel, NSRect cellFrame) {
+	return new NSRect();
+}
+
+boolean insertText (int /*long*/ id, int /*long*/ sel, int /*long*/ string) {
+	callSuper (id, sel, string);
+	return true;
+}
+
+/**
+ * Returns <code>true</code> if the widget has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the widget.
+ * When a widget has been disposed, it is an error to
+ * invoke any other method using the widget.
+ * </p>
+ *
+ * @return <code>true</code> when the widget is disposed and <code>false</code> otherwise
+ */
+public boolean isDisposed () {
+	return (state & DISPOSED) != 0;
+}
+
+boolean isDrawing () {
+	return true;
+}
+
+boolean isFlipped(int /*long*/ id, int /*long*/ sel) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	return OS.objc_msgSendSuper(super_struct, sel) != 0;
+}
+
+/**
+ * Returns <code>true</code> if there are any listeners
+ * for the specified event type associated with the receiver,
+ * and <code>false</code> otherwise. The event type is one of
+ * the event constants defined in class <code>SWT</code>.
+ *
+ * @param eventType the type of event
+ * @return true if the event is hooked
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SWT
+ */
+public boolean isListening (int eventType) {
+	checkWidget();
+	return hooks (eventType);
+}
+
+boolean isOpaque(int /*long*/ id, int /*long*/ sel) {
+	return false;
+}
+
+boolean isValidSubclass () {
+	return Display.isValidClass (getClass ());
+}
+
+boolean isValidThread () {
+	return getDisplay ().isValidThread ();
+}
+
+void flagsChanged (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	callSuper (id, sel, theEvent);
+}
+
+void keyDown (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	superKeyDown(id, sel, theEvent);
+}
+
+void keyUp (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	superKeyUp(id, sel, theEvent);
+}
+
+void mouseDown(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	callSuper(id, sel, theEvent);
+}
+
+void mouseUp(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	callSuper(id, sel, theEvent);
+}
+
+void mouseMoved(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	callSuper(id, sel, theEvent);
+}
+
+void mouseDragged(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	callSuper(id, sel, theEvent);
+}
+
+void mouseEntered(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	callSuper(id, sel, theEvent);
+}
+
+void mouseExited(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	callSuper(id, sel, theEvent);
+}
+
+void cursorUpdate(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	callSuper(id, sel, theEvent);
+}
+
+void rightMouseDown(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	callSuper(id, sel, theEvent);
+}
+
+void rightMouseUp(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	callSuper(id, sel, theEvent);
+}
+
+void rightMouseDragged(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	callSuper(id, sel, theEvent);
+}
+
+void otherMouseDown(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	callSuper(id, sel, theEvent);
+}
+
+void otherMouseUp(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	callSuper(id, sel, theEvent);
+}
+
+void otherMouseDragged(int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	callSuper(id, sel, theEvent);
+}
+
+boolean shouldDelayWindowOrderingForEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	return OS.objc_msgSendSuper(super_struct, sel, theEvent) != 0;
+}
+
+boolean menuHasKeyEquivalent_forEvent_target_action(int /*long*/ id, int /*long*/ sel, int /*long*/ menu, int /*long*/ event, int /*long*/ target, int /*long*/ action) {
+	return true;
+}
+
+int /*long*/ menuForEvent (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	return OS.objc_msgSendSuper(super_struct, sel, theEvent);
+}
+
+void menuNeedsUpdate(int /*long*/ id, int /*long*/ sel, int /*long*/ menu) {
+}
+
+boolean makeFirstResponder(int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
+	return callSuperBoolean(id, sel, notification);
+}
+
+NSRange markedRange (int /*long*/ id, int /*long*/ sel) {
+	return new NSRange ();
+}
+
+void menu_willHighlightItem(int /*long*/ id, int /*long*/ sel, int /*long*/ menu, int /*long*/ item) {
+}
+
+void menuDidClose(int /*long*/ id, int /*long*/ sel, int /*long*/ menu) {
+}
+
+void menuWillOpen(int /*long*/ id, int /*long*/ sel, int /*long*/ menu) {
+}
+
+void noResponderFor(int /*long*/ id, int /*long*/ sel, int /*long*/ selector) {
+	callSuper(id, sel, selector);
+}
+
+int /*long*/ numberOfRowsInTableView(int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView) {
+	return 0;
+}
+
+int /*long*/ outlineView_child_ofItem(int /*long*/ id, int /*long*/ sel, int /*long*/ outlineView, int /*long*/ index, int /*long*/ item) {
+	return 0;
+}
+
+void outlineView_didClickTableColumn(int /*long*/ id, int /*long*/ sel, int /*long*/ outlineView, int /*long*/ tableColumn) {
+}
+
+int /*long*/ outlineView_objectValueForTableColumn_byItem(int /*long*/ id, int /*long*/ sel, int /*long*/ outlineView, int /*long*/ tableColumn, int /*long*/ item) {
+	return 0;
+}
+
+boolean outlineView_isItemExpandable(int /*long*/ id, int /*long*/ sel, int /*long*/ outlineView, int /*long*/ item) {
+	return false;
+}
+
+int /*long*/ outlineView_numberOfChildrenOfItem(int /*long*/ id, int /*long*/ sel, int /*long*/ outlineView, int /*long*/ item) {
+	return 0;
+}
+
+void outlineView_willDisplayCell_forTableColumn_item(int /*long*/ id, int /*long*/ sel, int /*long*/ outlineView, int /*long*/ cell, int /*long*/ tableColumn, int /*long*/ item) {
+}
+
+void outlineViewColumnDidMove (int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
+}
+
+void outlineViewColumnDidResize (int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
+}
+
+void outlineViewSelectionDidChange(int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
+}
+
+void outlineView_setObjectValue_forTableColumn_byItem(int /*long*/ id, int /*long*/ sel, int /*long*/ outlineView, int /*long*/ object, int /*long*/ tableColumn, int /*long*/ item) {
+}
+
+boolean outlineView_writeItems_toPasteboard(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2) {
+	return false;
+}
+
+
+/**
+ * Notifies all of the receiver's listeners for events
+ * of the given type that one such event has occurred by
+ * invoking their <code>handleEvent()</code> method.  The
+ * event type is one of the event constants defined in class
+ * <code>SWT</code>.
+ *
+ * @param eventType the type of event which has occurred
+ * @param event the event data
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see SWT
+ * @see #addListener
+ * @see #getListeners(int)
+ * @see #removeListener(int, Listener)
+ */
+public void notifyListeners (int eventType, Event event) {
+	checkWidget();
+	if (event == null) event = new Event ();
+	sendEvent (eventType, event);
+}
+
+void pageDown (int /*long*/ id, int /*long*/ sel, int /*long*/ sender) {
+	callSuper(id, sel, sender);
+}
+
+void pageUp (int /*long*/ id, int /*long*/ sel, int /*long*/ sender) {
+	callSuper(id, sel, sender);
+}
+
+void postEvent (int eventType) {
+	sendEvent (eventType, null, false);
+}
+
+void postEvent (int eventType, Event event) {
+	sendEvent (eventType, event, false);
+}
+
+void reflectScrolledClipView (int /*long*/ id, int /*long*/ sel, int /*long*/ aClipView) {
+	callSuper (id, sel, aClipView);
+}
+
+void register () {
+}
+
+void release (boolean destroy) {
+	if ((state & DISPOSE_SENT) == 0) {
+		state |= DISPOSE_SENT;
+		sendEvent (SWT.Dispose);
+	}
+	if ((state & DISPOSED) == 0) {
+		releaseChildren (destroy);
+	}
+	if ((state & RELEASED) == 0) {
+		state |= RELEASED;
+		if (destroy) {
+			releaseParent ();
+			releaseWidget ();
+			destroyWidget ();
+		} else {
+			releaseWidget ();
+			releaseHandle ();
+		}
+	}
+}
+
+void releaseChildren (boolean destroy) {
+}
+
+void releaseHandle () {
+	state |= DISPOSED;
+	display = null;
+	destroyJNIRef ();
+}
+
+void releaseParent () {
+	/* Do nothing */
+}
+
+void releaseWidget () {
+	deregister ();
+	if (display.tooltipTarget == this) display.tooltipTarget = null;
+	eventTable = null;
+	data = null;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when an event of the given type occurs. The event
+ * type is one of the event constants defined in class <code>SWT</code>.
+ *
+ * @param eventType the type of event to listen for
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Listener
+ * @see SWT
+ * @see #addListener
+ * @see #getListeners(int)
+ * @see #notifyListeners
+ */
+public void removeListener (int eventType, Listener handler) {
+	checkWidget();
+	if (handler == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (eventType, handler);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when an event of the given type occurs.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the SWT
+ * public API. It is marked public only so that it can be shared
+ * within the packages provided by SWT. It should never be
+ * referenced from application code.
+ * </p>
+ *
+ * @param eventType the type of event to listen for
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Listener
+ * @see #addListener
+ */
+protected void removeListener (int eventType, SWTEventListener handler) {
+	checkWidget();
+	if (handler == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (eventType, handler);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the widget is disposed.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see DisposeListener
+ * @see #addDisposeListener
+ */
+public void removeDisposeListener (DisposeListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Dispose, listener);
+}
+
+void scrollWheel (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	callSuper(id, sel, theEvent);
+}
+
+NSRange selectedRange (int /*long*/ id, int /*long*/ sel) {
+	return new NSRange ();
+}
+
+int /*long*/ nextValidKeyView (int /*long*/ id, int /*long*/ sel) {
+	return callSuperObject(id, sel);
+}
+
+int /*long*/ previousValidKeyView (int /*long*/ id, int /*long*/ sel) {
+	return callSuperObject(id, sel);
+}
+
+void sendDoubleSelection() {
+}
+
+void sendEvent (Event event) {
+	display.sendEvent (eventTable, event);
+}
+
+void sendEvent (int eventType) {
+	sendEvent (eventType, null, true);
+}
+
+void sendEvent (int eventType, Event event) {
+	sendEvent (eventType, event, true);
+}
+
+void sendEvent (int eventType, Event event, boolean send) {
+	if (eventTable == null && !display.filters (eventType)) {
+		return;
+	}
+	if (event == null) event = new Event ();
+	event.type = eventType;
+	event.display = display;
+	event.widget = this;
+	if (event.time == 0) {
+		event.time = display.getLastEventTime ();
+	}
+	if (send) {
+		sendEvent (event);
+	} else {
+		display.postEvent (event);
+	}
+}
+
+boolean sendKeyEvent (NSEvent nsEvent, int type) {
+	if ((state & SAFARI_EVENTS_FIX) != 0) return true;
+	Event event = new Event ();
+	if (!setKeyState (event, type, nsEvent)) return true;
+	return sendKeyEvent (type, event);
+}
+
+boolean sendKeyEvent (int type, Event event) {
+	sendEvent (type, event);
+	// widget could be disposed at this point
+	
+	/*
+	* It is possible (but unlikely), that application
+	* code could have disposed the widget in the key
+	* events.  If this happens, end the processing of
+	* the key by returning false.
+	*/
+	if (isDisposed ()) return false;
+	return event.doit;
+}
+
+void sendHorizontalSelection () {
+}
+
+void sendCancelSelection () {
+}
+
+void sendSearchSelection () {
+}
+
+void sendSelection () {
+}
+
+void sendVerticalSelection () {
+}
+
+/**
+ * Sets the application defined widget data associated
+ * with the receiver to be the argument. The <em>widget
+ * data</em> is a single, unnamed field that is stored
+ * with every widget. 
+ * <p>
+ * Applications may put arbitrary objects in this field. If
+ * the object stored in the widget data needs to be notified
+ * when the widget is disposed of, it is the application's
+ * responsibility to hook the Dispose event on the widget and
+ * do so.
+ * </p>
+ *
+ * @param data the widget data
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - when the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - when called from the wrong thread</li>
+ * </ul>
+ * 
+ * @see #getData()
+ */
+public void setData (Object data) {
+	checkWidget();
+	if (SAFARI_EVENTS_FIX_KEY.equals (data)) {
+		state |= SAFARI_EVENTS_FIX;
+		return;
+	}
+	if ((state & KEYED_DATA) != 0) {
+		((Object []) this.data) [0] = data;
+	} else {
+		this.data = data;
+	}
+}
+
+/**
+ * Sets the application defined property of the receiver
+ * with the specified name to the given value.
+ * <p>
+ * Applications may associate arbitrary objects with the
+ * receiver in this fashion. If the objects stored in the
+ * properties need to be notified when the widget is disposed
+ * of, it is the application's responsibility to hook the
+ * Dispose event on the widget and do so.
+ * </p>
+ *
+ * @param key the name of the property
+ * @param value the new value for the property
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the key is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getData(String)
+ */
+public void setData (String key, Object value) {
+	checkWidget();
+	if (key == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (GLCONTEXT_KEY.equals (key)) {
+		setOpenGLContext(value);
+		return;
+	}
+	int index = 1;
+	Object [] table = null;
+	if ((state & KEYED_DATA) != 0) {
+		table = (Object []) data;
+		while (index < table.length) {
+			if (key.equals (table [index])) break;
+			index += 2;
+		}
+	}
+	if (value != null) {
+		if ((state & KEYED_DATA) != 0) {
+			if (index == table.length) {
+				Object [] newTable = new Object [table.length + 2];
+				System.arraycopy (table, 0, newTable, 0, table.length);
+				data = table = newTable;
+			}
+		} else {
+			table = new Object [3];
+			table [0] = data;
+			data = table;
+			state |= KEYED_DATA;
+		}
+		table [index] = key;
+		table [index + 1] = value;
+	} else {
+		if ((state & KEYED_DATA) != 0) {
+			if (index != table.length) {
+				int length = table.length - 2;
+				if (length == 1) {
+					data = table [0];
+					state &= ~KEYED_DATA;
+				} else {
+					Object [] newTable = new Object [length];
+					System.arraycopy (table, 0, newTable, 0, index);
+					System.arraycopy (table, index + 2, newTable, index, length - index);
+					data = newTable;
+				}
+			}
+		}
+	}
+}
+
+void setOpenGLContext(Object value) {
+}
+
+void setFrameOrigin (int /*long*/ id, int /*long*/ sel, NSPoint point) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	OS.objc_msgSendSuper(super_struct, sel, point);
+}
+
+void setFrameSize (int /*long*/ id, int /*long*/ sel, NSSize size) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	OS.objc_msgSendSuper(super_struct, sel, size);
+}
+
+void setImage (int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+}
+
+boolean setInputState (Event event, NSEvent nsEvent, int type) {
+	if (nsEvent == null) return true;
+	int /*long*/ modifierFlags = nsEvent.modifierFlags();
+	if ((modifierFlags & OS.NSAlternateKeyMask) != 0) event.stateMask |= SWT.ALT;
+	if ((modifierFlags & OS.NSShiftKeyMask) != 0) event.stateMask |= SWT.SHIFT;
+	if ((modifierFlags & OS.NSControlKeyMask) != 0) event.stateMask |= SWT.CONTROL;
+	if ((modifierFlags & OS.NSCommandKeyMask) != 0) event.stateMask |= SWT.COMMAND;
+	//TODO multiple mouse buttons pressed
+	switch ((int)/*64*/nsEvent.type()) {
+		case OS.NSLeftMouseDragged:
+		case OS.NSRightMouseDragged:
+		case OS.NSOtherMouseDragged:
+			switch ((int)/*64*/nsEvent.buttonNumber()) {
+				case 0: event.stateMask |= SWT.BUTTON1; break;
+				case 1: event.stateMask |= SWT.BUTTON3; break;
+				case 2: event.stateMask |= SWT.BUTTON2; break;
+				case 3: event.stateMask |= SWT.BUTTON4; break;
+				case 4: event.stateMask |= SWT.BUTTON5; break;
+			}
+			break;
+		case OS.NSScrollWheel:
+		case OS.NSKeyDown:
+		case OS.NSKeyUp:
+			int state = OS.GetCurrentButtonState ();
+			if ((state & 0x1) != 0) event.stateMask |= SWT.BUTTON1;
+			if ((state & 0x2) != 0) event.stateMask |= SWT.BUTTON3;
+			if ((state & 0x4) != 0) event.stateMask |= SWT.BUTTON2;
+			if ((state & 0x8) != 0) event.stateMask |= SWT.BUTTON4;
+			if ((state & 0x10) != 0) event.stateMask |= SWT.BUTTON5;
+			break;
+	}
+	switch (type) {
+		case SWT.MouseDown:
+		case SWT.MouseDoubleClick:
+			if (event.button == 1) event.stateMask &= ~SWT.BUTTON1;
+			if (event.button == 2) event.stateMask &= ~SWT.BUTTON2;
+			if (event.button == 3) event.stateMask &= ~SWT.BUTTON3;
+			if (event.button == 4) event.stateMask &= ~SWT.BUTTON4;
+			if (event.button == 5) event.stateMask &= ~SWT.BUTTON5;
+			break;
+		case SWT.MouseUp:
+			if (event.button == 1) event.stateMask |= SWT.BUTTON1;
+			if (event.button == 2) event.stateMask |= SWT.BUTTON2;
+			if (event.button == 3) event.stateMask |= SWT.BUTTON3;
+			if (event.button == 4) event.stateMask |= SWT.BUTTON4;
+			if (event.button == 5) event.stateMask |= SWT.BUTTON5;
+			break;
+		case SWT.KeyDown:
+		case SWT.Traverse:
+			if (event.keyCode == SWT.ALT) event.stateMask &= ~SWT.ALT;
+			if (event.keyCode == SWT.SHIFT) event.stateMask &= ~SWT.SHIFT;
+			if (event.keyCode == SWT.CONTROL) event.stateMask &= ~SWT.CONTROL;
+			if (event.keyCode == SWT.COMMAND) event.stateMask &= ~SWT.COMMAND;
+			break;
+		case SWT.KeyUp:
+			if (event.keyCode == SWT.ALT) event.stateMask |= SWT.ALT;
+			if (event.keyCode == SWT.SHIFT) event.stateMask |= SWT.SHIFT;
+			if (event.keyCode == SWT.CONTROL) event.stateMask |= SWT.CONTROL;
+			if (event.keyCode == SWT.COMMAND) event.stateMask |= SWT.COMMAND;
+			break;
+	}		
+	return true;
+}
+
+boolean setKeyState (Event event, int type, NSEvent nsEvent) {
+	boolean isNull = false;
+	int keyCode = nsEvent.keyCode ();
+	event.keyCode = Display.translateKey (keyCode);
+	switch (event.keyCode) {
+		case SWT.LF: {
+			/*
+			* Feature in the Macintosh.  When the numeric key pad
+			* Enter key is pressed, it generates '\n'.  This is the
+			* correct platform behavior but is not portable.  The
+			* fix is to convert the '\n' into '\r'.
+			*/
+			event.keyCode = SWT.KEYPAD_CR;
+			event.character = '\r';
+			break;
+		}
+		case SWT.BS: event.character = '\b'; break;
+		case SWT.CR: event.character = '\r'; break;
+		case SWT.DEL: event.character = 0x7F; break;
+		case SWT.ESC: event.character = 0x1B; break;
+		case SWT.TAB: event.character = '\t'; break;
+		default:
+			if (event.keyCode == 0 || (SWT.KEYPAD_MULTIPLY <= event.keyCode && event.keyCode <= SWT.KEYPAD_CR)) {
+				NSString chars = nsEvent.characters ();
+				if (chars.length() > 0) event.character = (char)chars.characterAtIndex (0);
+			}
+			if (event.keyCode == 0) {
+				int /*long*/ uchrPtr = 0;
+				int /*long*/ currentKbd = OS.TISCopyCurrentKeyboardInputSource();
+				int /*long*/ uchrCFData = OS.TISGetInputSourceProperty(currentKbd, OS.kTISPropertyUnicodeKeyLayoutData());
+				
+				if (uchrCFData != 0) {
+					// If the keyboard changed since the last keystroke clear the dead key state.
+					if (uchrCFData != display.currentKeyboardUCHRdata) display.deadKeyState[0] = 0;
+					uchrPtr = OS.CFDataGetBytePtr(uchrCFData);
+					
+					if (uchrPtr != 0 && OS.CFDataGetLength(uchrCFData) > 0) {
+						int /*long*/ cgEvent = nsEvent.CGEvent();
+						long keyboardType = OS.CGEventGetIntegerValueField(cgEvent, OS.kCGKeyboardEventKeyboardType);
+						
+						int maxStringLength = 256;
+						char [] output = new char [maxStringLength];
+						int [] actualStringLength = new int [1];
+						OS.UCKeyTranslate (uchrPtr, (short)keyCode, (short)OS.kUCKeyActionDown, 0, (int)keyboardType, 0, display.deadKeyState, maxStringLength, actualStringLength, output);
+						if (actualStringLength[0] < 1) {
+							// part of a multi-key key
+							event.keyCode = 0;
+						} else {
+							event.keyCode = output[0];
+						}
+					}
+				} else {
+					// KCHR keyboard layouts are no longer supported, so fall back to the basic but flawed
+					// method of determining which key was pressed.
+					NSString unmodifiedChars = nsEvent.charactersIgnoringModifiers ().lowercaseString();
+					if (unmodifiedChars.length() > 0) event.keyCode = (char)unmodifiedChars.characterAtIndex(0);
+				}
+				
+				if (currentKbd != 0) OS.CFRelease(currentKbd);
+			}
+	}
+	if (event.keyCode == 0 && event.character == 0) {
+		if (!isNull) return false;
+	}
+	setInputState (event, nsEvent, type);
+	return true;
+}
+
+boolean setMarkedText_selectedRange (int /*long*/ id, int /*long*/ sel, int /*long*/ string, int /*long*/ range) {
+	return true;
+}
+
+void setNeedsDisplay (int /*long*/ id, int /*long*/ sel, boolean flag) {
+	if (flag && !isDrawing()) return;
+	NSView view = new NSView(id);
+	if (flag && display.isPainting.containsObject(view)) {
+		NSMutableArray needsDisplay = display.needsDisplay;
+		if (needsDisplay == null) {
+			needsDisplay = (NSMutableArray)new NSMutableArray().alloc();
+			display.needsDisplay = needsDisplay = needsDisplay.initWithCapacity(12);
+		}
+		needsDisplay.addObject(view);
+		return;
+	}
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	OS.objc_msgSendSuper(super_struct, sel, flag);
+}
+
+void setNeedsDisplayInRect (int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	if (!isDrawing()) return;
+	NSRect rect = new NSRect();
+	OS.memmove(rect, arg0, NSRect.sizeof);
+	NSView view = new NSView(id);
+	if (display.isPainting.containsObject(view)) {
+		NSMutableArray needsDisplayInRect = display.needsDisplayInRect;
+		if (needsDisplayInRect == null) {
+			needsDisplayInRect = (NSMutableArray)new NSMutableArray().alloc();
+			display.needsDisplayInRect = needsDisplayInRect = needsDisplayInRect.initWithCapacity(12);
+		}
+		needsDisplayInRect.addObject(view);
+		needsDisplayInRect.addObject(NSValue.valueWithRect(rect));
+		return;
+	}
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	OS.objc_msgSendSuper(super_struct, sel, rect);
+}
+
+void setObjectValue(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+	callSuper(id, sel, arg0);
+}
+
+boolean setTabGroupFocus () {
+	return setTabItemFocus ();
+}
+
+boolean setTabItemFocus () {
+	return false;
+}
+
+boolean shouldChangeTextInRange_replacementString(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
+	return true;
+}
+
+void superKeyDown (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	callSuper (id, sel, theEvent);
+}
+
+void superKeyUp (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
+	callSuper (id, sel, theEvent);
+}
+
+void tableViewColumnDidMove (int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
+}
+
+void tableViewColumnDidResize (int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
+}
+
+void tableViewSelectionDidChange (int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
+}
+
+void tableView_didClickTableColumn(int /*long*/ id, int /*long*/ sel, int /*long*/ tableView, int /*long*/ tableColumn) {
+}
+
+int /*long*/ tableView_objectValueForTableColumn_row(int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ aTableColumn, int /*long*/ rowIndex) {
+	return 0;
+}
+
+void tableView_setObjectValue_forTableColumn_row(int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ anObject, int /*long*/ aTableColumn, int /*long*/ rowIndex) {	
+}
+
+boolean tableView_shouldEditTableColumn_row(int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ aTableColumn, int /*long*/ rowIndex) {
+	return true;
+}
+
+void tableView_willDisplayCell_forTableColumn_row(int /*long*/ id, int /*long*/ sel, int /*long*/ aTableView, int /*long*/ aCell, int /*long*/ aTableColumn, int /*long*/ rowIndex) {
+}
+
+void textViewDidChangeSelection(int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
+}
+
+void textDidChange(int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
+	callSuper (id, sel, aNotification);
+}
+
+void textDidEndEditing(int /*long*/ id, int /*long*/ sel, int /*long*/ aNotification) {
+	callSuper(id, sel, aNotification);
+}
+
+NSRange textView_willChangeSelectionFromCharacterRange_toCharacterRange(int /*long*/ id, int /*long*/ sel, int /*long*/ aTextView, int /*long*/ oldSelectedCharRange, int /*long*/ newSelectedCharRange) {
+	return new NSRange();
+}
+
+NSRect titleRectForBounds (int /*long*/ id, int /*long*/ sel, NSRect cellFrame) {
+	objc_super super_struct = new objc_super();
+	super_struct.receiver = id;
+	super_struct.super_class = OS.objc_msgSend(id, OS.sel_superclass);
+	NSRect result = new NSRect();
+	OS.objc_msgSendSuper_stret(result, super_struct, sel, cellFrame);
+	return result;
+}
+
+String tooltipText () {
+	return null;
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the receiver
+ */
+public String toString () {
+	String string = "*Disposed*";
+	if (!isDisposed ()) {
+		string = "*Wrong Thread*";
+		if (isValidThread ()) string = getNameText ();
+	}
+	return getName () + " {" + string + "}";
+}
+
+void resetCursorRects (int /*long*/ id, int /*long*/ sel) {
+	callSuper (id, sel);
+}
+
+void updateTrackingAreas (int /*long*/ id, int /*long*/ sel) {
+	callSuper (id, sel);
+}
+
+int /*long*/ validAttributesForMarkedText (int /*long*/ id, int /*long*/ sel) {
+	return 0;
+}
+
+void tabView_didSelectTabViewItem(int /*long*/ id, int /*long*/ sel, int /*long*/ tabView, int /*long*/ tabViewItem) {
+}
+
+void tabView_willSelectTabViewItem(int /*long*/ id, int /*long*/ sel, int /*long*/ tabView, int /*long*/ tabViewItem) {
+}
+
+boolean tableView_writeRowsWithIndexes_toPasteboard(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2) {
+	return false;
+}
+
+int /*long*/ view_stringForToolTip_point_userData (int /*long*/ id, int /*long*/ sel, int /*long*/ view, int /*long*/ tag, int /*long*/ point, int /*long*/ userData) {
+	return 0;
+}
+
+void viewDidMoveToWindow(int /*long*/ id, int /*long*/ sel) {	
+}
+
+void windowDidMove(int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
+}
+
+void windowDidResize(int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
+}
+
+void windowDidResignKey(int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
+}
+
+void windowDidBecomeKey(int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
+}
+
+void windowSendEvent(int /*long*/ id, int /*long*/ sel, int /*long*/ event) {
+	callSuper(id, sel, event);
+}
+
+boolean windowShouldClose(int /*long*/ id, int /*long*/ sel, int /*long*/ window) {
+	return false;
+}
+
+void windowWillClose(int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
+}
+
+int /*long*/ nextState(int /*long*/ id, int /*long*/ sel) {
+	return callSuperObject(id, sel);
+}
+
+void updateOpenGLContext(int /*long*/ id, int /*long*/ sel, int /*long*/ notification) {
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/DragDetectEvent.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/DragDetectEvent.java
new file mode 100644
index 0000000..a10148d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/DragDetectEvent.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * 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.events;
+
+import org.eclipse.swt.widgets.Event;
+
+/**
+ * Instances of this class are sent as a result of
+ * a drag gesture.
+ *
+ * @see DragDetectListener
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.3
+ */
+
+public final class DragDetectEvent extends MouseEvent {
+
+	private static final long serialVersionUID = -7229172519733647232L;
+
+/**
+ * Constructs a new instance of this class based on the
+ * information in the given untyped event.
+ *
+ * @param e the untyped event containing the information
+ */
+public DragDetectEvent(Event e) {
+	super(e);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/DragDetectListener.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/DragDetectListener.java
new file mode 100644
index 0000000..805747d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/DragDetectListener.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.events;
+
+
+import org.eclipse.swt.internal.SWTEventListener;
+
+/**
+ * Classes which implement this interface provide methods
+ * that deal with the events that are generated when a drag
+ * gesture is detected.
+ * <p>
+ * After creating an instance of a class that implements
+ * this interface it can be added to a control using the
+ * <code>addDragDetectListener</code> method and removed using
+ * the <code>removeDragDetectListener</code> method. When the
+ * drag is detected, the drageDetected method will be invoked.
+ * </p>
+ *
+ * @see DragDetectEvent
+ * 
+ * @since 3.3
+ */
+public interface DragDetectListener extends SWTEventListener {
+
+/**
+ * Sent when a drag gesture is detected.
+ *
+ * @param e an event containing information about the drag
+ */
+public void dragDetected(DragDetectEvent e);
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MenuDetectEvent.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MenuDetectEvent.java
new file mode 100644
index 0000000..8f36c30
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MenuDetectEvent.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * 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.events;
+
+
+import org.eclipse.swt.widgets.Event;
+
+/**
+ * Instances of this class are sent whenever the platform-
+ * specific trigger for showing a context menu is detected.
+ *
+ * @see MenuDetectListener
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ *
+ * @since 3.3
+ */
+
+public final class MenuDetectEvent extends TypedEvent {
+
+	/**
+	 * the display-relative x coordinate of the pointer
+	 * at the time the context menu trigger occurred
+	 */
+	public int x;
+	
+	/**
+	 * the display-relative y coordinate of the pointer
+	 * at the time the context menu trigger occurred
+	 */	
+	public int y;
+	
+	/**
+	 * A flag indicating whether the operation should be allowed.
+	 * Setting this field to <code>false</code> will cancel the operation.
+	 */
+	public boolean doit;
+
+	private static final long serialVersionUID = -3061660596590828941L;
+
+/**
+ * Constructs a new instance of this class based on the
+ * information in the given untyped event.
+ *
+ * @param e the untyped event containing the information
+ */
+public MenuDetectEvent(Event e) {
+	super(e);
+	this.x = e.x;
+	this.y = e.y;
+	this.doit = e.doit;
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the event
+ */
+public String toString() {
+	String string = super.toString ();
+	return string.substring (0, string.length() - 1) // remove trailing '}'
+		+ " x=" + x
+		+ " y=" + y
+		+ " doit=" + doit
+		+ "}";
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MenuDetectListener.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MenuDetectListener.java
new file mode 100644
index 0000000..1d6769c
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MenuDetectListener.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.events;
+
+
+import org.eclipse.swt.internal.SWTEventListener;
+
+/**
+ * Classes which implement this interface provide methods
+ * that deal with the events that are generated when the
+ * platform-specific trigger for showing a context menu is
+ * detected.
+ * <p>
+ * After creating an instance of a class that implements
+ * this interface it can be added to a control or TrayItem
+ * using the <code>addMenuDetectListener</code> method and
+ * removed using the <code>removeMenuDetectListener</code> method.
+ * When the context menu trigger occurs, the
+ * <code>menuDetected</code> method will be invoked.
+ * </p>
+ *
+ * @see MenuDetectEvent
+ *
+ * @since 3.3
+ */
+public interface MenuDetectListener extends SWTEventListener {
+
+/**
+ * Sent when the platform-dependent trigger for showing a menu item is detected.
+ *
+ * @param e an event containing information about the menu detect
+ */
+public void menuDetected (MenuDetectEvent e);
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MouseWheelListener.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MouseWheelListener.java
new file mode 100644
index 0000000..74d50b1
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/events/MouseWheelListener.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.events;
+
+
+import org.eclipse.swt.internal.SWTEventListener;
+
+/**
+ * Classes which implement this interface provide a method
+ * that deals with the event that is generated as the mouse
+ * wheel is scrolled.
+ * <p>
+ * After creating an instance of a class that implements
+ * this interface it can be added to a control using the
+ * <code>addMouseWheelListener</code> method and removed using
+ * the <code>removeMouseWheelListener</code> method. When the
+ * mouse wheel is scrolled the <code>mouseScrolled</code> method
+ * will be invoked.
+ * </p>
+ *
+ * @see MouseEvent
+ *
+ * @since 3.3
+ */
+public interface MouseWheelListener extends SWTEventListener {
+
+/**
+ * Sent when the mouse wheel is scrolled.
+ *
+ * @param e an event containing information about the mouse wheel action
+ */
+public void mouseScrolled (MouseEvent e);	
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/LineAttributes.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/LineAttributes.java
new file mode 100644
index 0000000..6d02341
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/LineAttributes.java
@@ -0,0 +1,122 @@
+/*******************************************************************************
+ * 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.graphics;
+
+import org.eclipse.swt.*;
+
+/**
+ * <code>LineAttributes</code> defines a set of line attributes that
+ * can be modified in a GC.
+ * <p>
+ * Application code does <em>not</em> need to explicitly release the
+ * resources managed by each instance when those instances are no longer
+ * required, and thus no <code>dispose()</code> method is provided.
+ * </p>
+ * 
+ * @see GC#getLineAttributes()
+ * @see GC#setLineAttributes(LineAttributes)
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ *  
+ * @since 3.3
+ */
+public class LineAttributes {
+
+	/**
+	 * The line width.
+	 */
+	public float width;
+
+	/**
+	 * The line style.
+	 * 
+	 * @see org.eclipse.swt.SWT#LINE_CUSTOM
+	 * @see org.eclipse.swt.SWT#LINE_DASH
+	 * @see org.eclipse.swt.SWT#LINE_DASHDOT
+	 * @see org.eclipse.swt.SWT#LINE_DASHDOTDOT
+	 * @see org.eclipse.swt.SWT#LINE_DOT
+	 * @see org.eclipse.swt.SWT#LINE_SOLID
+	 */
+	public int style;
+
+	/**
+	 * The line cap style.
+	 * 
+	 * @see org.eclipse.swt.SWT#CAP_FLAT
+	 * @see org.eclipse.swt.SWT#CAP_ROUND
+	 * @see org.eclipse.swt.SWT#CAP_SQUARE
+	 */
+	public int cap;
+
+	/**
+	 * The line join style.
+	 * 
+	 * @see org.eclipse.swt.SWT#JOIN_BEVEL
+	 * @see org.eclipse.swt.SWT#JOIN_MITER
+	 * @see org.eclipse.swt.SWT#JOIN_ROUND
+	 */
+	public int join;
+
+	/**
+	 * The line dash style for SWT.LINE_CUSTOM.
+	 */
+	public float[] dash;
+
+	/**
+	 * The line dash style offset for SWT.LINE_CUSTOM.
+	 */
+	public float dashOffset;
+
+	/**
+	 * The line miter limit.
+	 */
+	public float miterLimit;
+
+/** 
+ * Create a new line attributes with the specified line width.
+ *
+ * @param width the line width
+ */
+public LineAttributes(float width) {
+	this(width, SWT.CAP_FLAT, SWT.JOIN_MITER, SWT.LINE_SOLID, null, 0, 10);
+}
+	
+/** 
+ * Create a new line attributes with the specified line cap, join and width.
+ *
+ * @param width the line width
+ * @param cap the line cap style
+ * @param join the line join style
+ */
+public LineAttributes(float width, int cap, int join) {
+	this(width, cap, join, SWT.LINE_SOLID, null, 0, 10);
+}
+
+/** 
+ * Create a new line attributes with the specified arguments.
+ *
+ * @param width the line width
+ * @param cap the line cap style
+ * @param join the line join style
+ * @param style the line style
+ * @param dash the line dash style
+ * @param dashOffset the line dash style offset
+ * @param miterLimit the line miter limit
+ */
+public LineAttributes(float width, int cap, int join, int style, float[] dash, float dashOffset, float miterLimit) {
+	this.width = width;
+	this.cap = cap;
+	this.join = join;
+	this.style = style;
+	this.dash = dash;
+	this.dashOffset = dashOffset;
+	this.miterLimit = miterLimit;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGDecoder.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGDecoder.java
new file mode 100644
index 0000000..54d6daa
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/JPEGDecoder.java
@@ -0,0 +1,6355 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.internal.image;
+
+import java.io.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+public class JPEGDecoder {
+	
+	static final int DCTSIZE = 8;
+	static final int DCTSIZE2 = 64;
+	static final int NUM_QUANT_TBLS = 4;
+	static final int NUM_HUFF_TBLS = 4;
+	static final int NUM_ARITH_TBLS = 16;
+	static final int MAX_COMPS_IN_SCAN = 4;
+	static final int MAX_COMPONENTS = 10;
+	static final int MAX_SAMP_FACTOR = 4;
+	static final int D_MAX_BLOCKS_IN_MCU = 10;
+	static final int HUFF_LOOKAHEAD = 8;
+	static final int MAX_Q_COMPS = 4;
+	static final int IFAST_SCALE_BITS = 2;
+	static final int MAXJSAMPLE = 255;
+	static final int CENTERJSAMPLE = 128;
+	static final int MIN_GET_BITS = 32-7;
+	static final int INPUT_BUFFER_SIZE = 4096;
+
+	static final int SCALEBITS = 16;	/* speediest right-shift on some machines */
+	static final int ONE_HALF = 1 << (SCALEBITS-1);
+	
+	static final int RGB_RED = 2;	/* Offset of Red in an RGB scanline element */
+	static final int RGB_GREEN = 1;	/* Offset of Green */
+	static final int RGB_BLUE = 0;	/* Offset of Blue */
+	static final int RGB_PIXELSIZE = 3;
+	
+	static final int JBUF_PASS_THRU = 0;
+	static final int JBUF_SAVE_SOURCE = 1;	/* Run source subobject only, save output */
+	static final int JBUF_CRANK_DEST = 2;	/* Run dest subobject only, using saved data */
+	static final int JBUF_SAVE_AND_PASS = 3;	
+	
+	static final int JPEG_MAX_DIMENSION = 65500;
+	static final int BITS_IN_JSAMPLE = 8;
+	
+	static final int JDITHER_NONE = 0;		/* no dithering */
+	static final int JDITHER_ORDERED = 1;	/* simple ordered dither */
+	static final int JDITHER_FS = 2;	
+	
+	static final int JDCT_ISLOW = 0;	/* slow but accurate integer algorithm */
+	static final int JDCT_IFAST = 1;	/* faster, less accurate integer method */
+	static final int JDCT_FLOAT = 2;	/* floating-point: accurate, fast on fast HW */
+	static final int JDCT_DEFAULT = JDCT_ISLOW;
+
+	static final int JCS_UNKNOWN = 0;		/* error/unspecified */
+	static final int JCS_GRAYSCALE = 1;		/* monochrome */
+	static final int JCS_RGB = 2;		/* red/green/blue */
+	static final int JCS_YCbCr = 3;		/* Y/Cb/Cr (also known as YUV) */
+	static final int JCS_CMYK = 4;		/* C/M/Y/K */
+	static final int JCS_YCCK = 5;		/* Y/Cb/Cr/K */
+
+	static final int SAVED_COEFS = 6;
+	static final int Q01_POS = 1;
+	static final int Q10_POS = 8;
+	static final int Q20_POS = 16;
+	static final int Q11_POS = 9;
+	static final int Q02_POS = 2;
+	
+	static final int CTX_PREPARE_FOR_IMCU = 0;	/* need to prepare for MCU row */
+	static final int CTX_PROCESS_IMCU = 1;	/* feeding iMCU to postprocessor */
+	static final int CTX_POSTPONED_ROW = 2;	/* feeding postponed row group */
+	
+	static final int APP0_DATA_LEN = 14;	/* Length of interesting data in APP0 */
+	static final int APP14_DATA_LEN = 12;	/* Length of interesting data in APP14 */
+	static final int APPN_DATA_LEN = 14;	/* Must be the largest of the above!! */
+
+	/* markers */
+	static final int M_SOF0 = 0xc0;
+	static final int M_SOF1 = 0xc1;
+	static final int M_SOF2 = 0xc2;
+	static final int M_SOF3 = 0xc3;
+	static final int M_SOF5 = 0xc5;
+	static final int M_SOF6 = 0xc6;
+	static final int M_SOF7 = 0xc7;
+	static final int M_JPG = 0xc8;
+	static final int M_SOF9 = 0xc9;
+	static final int M_SOF10 = 0xca;
+	static final int M_SOF11 = 0xcb;
+	static final int M_SOF13 = 0xcd;
+	static final int M_SOF14 = 0xce;
+	static final int M_SOF15 = 0xcf;
+	static final int M_DHT = 0xc4;
+	static final int M_DAC = 0xcc;
+	static final int M_RST0 = 0xd0;
+	static final int M_RST1 = 0xd1;
+	static final int M_RST2	= 0xd2;
+	static final int M_RST3 = 0xd3;
+	static final int M_RST4 = 0xd4;
+	static final int M_RST5 = 0xd5;
+	static final int M_RST6 = 0xd6;
+	static final int M_RST7 = 0xd7;
+	static final int M_SOI = 0xd8;
+	static final int M_EOI = 0xd9;
+	static final int M_SOS = 0xda;
+	static final int M_DQT = 0xdb;
+	static final int M_DNL = 0xdc;
+	static final int M_DRI = 0xdd;
+	static final int M_DHP = 0xde;
+	static final int M_EXP = 0xdf;
+	static final int M_APP0 = 0xe0;
+	static final int M_APP1 = 0xe1;
+	static final int M_APP2 = 0xe2;
+	static final int M_APP3 = 0xe3;
+	static final int M_APP4 = 0xe4;
+	static final int M_APP5 = 0xe5;
+	static final int M_APP6 = 0xe6;
+	static final int M_APP7 = 0xe7;
+	static final int M_APP8 = 0xe8;
+	static final int M_APP9 = 0xe9;
+	static final int M_APP10 = 0xea;
+	static final int M_APP11 = 0xeb;
+	static final int M_APP12 = 0xec;
+	static final int M_APP13 = 0xed;
+	static final int M_APP14 = 0xee;
+	static final int M_APP15 = 0xef;
+ 	static final int M_JPG0 = 0xf0;
+	static final int M_JPG13 = 0xfd;
+	static final int M_COM = 0xfe;
+	static final int M_TEM = 0x01;
+	static final int M_ERROR = 0x100;
+	
+	/* Values of global_state field (jdapi.c has some dependencies on ordering!) */
+	static final int CSTATE_START = 100;	/* after create_compress */
+	static final int CSTATE_SCANNING = 101;	/* start_compress done, write_scanlines OK */
+	static final int CSTATE_RAW_OK = 102;	/* start_compress done, write_raw_data OK */
+	static final int CSTATE_WRCOEFS = 103;	/* jpeg_write_coefficients done */
+	static final int DSTATE_START = 200;	/* after create_decompress */
+	static final int DSTATE_INHEADER = 201;	/* reading header markers, no SOS yet */
+	static final int DSTATE_READY = 202;	/* found SOS, ready for start_decompress */
+	static final int DSTATE_PRELOAD = 203;	/* reading multiscan file in start_decompress*/
+	static final int DSTATE_PRESCAN = 204;	/* performing dummy pass for 2-pass quant */
+	static final int DSTATE_SCANNING = 205;	/* start_decompress done, read_scanlines OK */
+	static final int DSTATE_RAW_OK = 206;	/* start_decompress done, read_raw_data OK */
+	static final int DSTATE_BUFIMAGE = 207;	/* expecting jpeg_start_output */
+	static final int DSTATE_BUFPOST = 208;	/* looking for SOS/EOI in jpeg_finish_output */
+	static final int DSTATE_RDCOEFS = 209;	/* reading file in jpeg_read_coefficients */
+	static final int DSTATE_STOPPING = 210;	/* looking for EOI in jpeg_finish_decompress */
+
+	static final int JPEG_REACHED_SOS = 1; /* Reached start of new scan */
+	static final int JPEG_REACHED_EOI = 2; /* Reached end of image */
+	static final int JPEG_ROW_COMPLETED = 3; /* Completed one iMCU row */
+	static final int JPEG_SCAN_COMPLETED = 4; /* Completed last iMCU row of a scan */
+	
+	static final int JPEG_SUSPENDED = 0; /* Suspended due to lack of input data */
+	static final int JPEG_HEADER_OK = 1; /* Found valid image datastream */
+	static final int JPEG_HEADER_TABLES_ONLY = 2; /* Found valid table-specs-only datastream */
+
+	/* Function pointers */
+	static final int DECOMPRESS_DATA = 0;
+	static final int DECOMPRESS_SMOOTH_DATA = 1;
+	static final int DECOMPRESS_ONEPASS = 2;
+	
+	static final int CONSUME_DATA = 0;
+	static final int DUMMY_CONSUME_DATA = 1;
+	
+	static final int PROCESS_DATA_SIMPLE_MAIN = 0;
+	static final int PROCESS_DATA_CONTEXT_MAIN = 1;
+	static final int PROCESS_DATA_CRANK_POST = 2;
+	
+	static final int POST_PROCESS_1PASS = 0;
+	static final int POST_PROCESS_DATA_UPSAMPLE = 1;
+	
+	static final int NULL_CONVERT = 0;
+	static final int GRAYSCALE_CONVERT = 1;
+	static final int YCC_RGB_CONVERT = 2;
+	static final int GRAY_RGB_CONVERT = 3;
+	static final int YCCK_CMYK_CONVERT = 4;
+	
+	static final int NOOP_UPSAMPLE = 0;
+	static final int FULLSIZE_UPSAMPLE = 1;
+	static final int H2V1_FANCY_UPSAMPLE = 2;
+	static final int H2V1_UPSAMPLE = 3;
+	static final int H2V2_FANCY_UPSAMPLE = 4;
+	static final int H2V2_UPSAMPLE = 5;
+	static final int INT_UPSAMPLE = 6;
+	
+	static final int INPUT_CONSUME_INPUT = 0;
+	static final int COEF_CONSUME_INPUT = 1;
+	
+	static int extend_test[] =	 /* entry n is 2**(n-1) */
+	{
+		0, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
+		0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000
+	};
+
+	static int extend_offset[] = /* entry n is (-1 << n) + 1 */
+	{
+		0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1,
+		((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1,
+		((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1,
+		((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1
+	};
+	
+	static int jpeg_natural_order[] = {
+		0,	1,	8, 16,	9,	2,	3, 10,
+		17, 24, 32, 25, 18, 11,	4,	5,
+		12, 19, 26, 33, 40, 48, 41, 34,
+		27, 20, 13,	6,	7, 14, 21, 28,
+		35, 42, 49, 56, 57, 50, 43, 36,
+		29, 22, 15, 23, 30, 37, 44, 51,
+		58, 59, 52, 45, 38, 31, 39, 46,
+		53, 60, 61, 54, 47, 55, 62, 63,
+		63, 63, 63, 63, 63, 63, 63, 63, /* extra entries for safety in decoder */
+		63, 63, 63, 63, 63, 63, 63, 63
+	};
+	
+	static final class JQUANT_TBL {
+		/* This array gives the coefficient quantizers in natural array order
+		 * (not the zigzag order in which they are stored in a JPEG DQT marker).
+		 * CAUTION: IJG versions prior to v6a kept this array in zigzag order.
+		 */
+		short[] quantval = new short[DCTSIZE2];	/* quantization step for each coefficient */
+		/* This field is used only during compression.	It's initialized false when
+		 * the table is created, and set true when it's been output to the file.
+		 * You could suppress output of a table by setting this to true.
+		 * (See jpeg_suppress_tables for an example.)
+		 */
+		boolean sent_table;		/* true when table has been output */
+	}
+	
+	static final class JHUFF_TBL {
+		/* These two fields directly represent the contents of a JPEG DHT marker */
+		byte[] bits = new byte[17]; /* bits[k] = # of symbols with codes of */
+									/* length k bits; bits[0] is unused */
+		byte[] huffval = new byte[256];		/* The symbols, in order of incr code length */
+		/* This field is used only during compression.	It's initialized false when
+		 * the table is created, and set true when it's been output to the file.
+		 * You could suppress output of a table by setting this to true.
+		 * (See jpeg_suppress_tables for an example.)
+		 */
+		boolean sent_table;		/* true when table has been output */
+	}
+	
+	static final class bitread_perm_state {		/* Bitreading state saved across MCUs */
+		int get_buffer;	/* current bit-extraction buffer */
+		int bits_left;		/* # of unused bits in it */
+	}
+	
+	static final class bitread_working_state {		/* Bitreading working state within an MCU */
+		/* Current data source location */
+		/* We need a copy, rather than munging the original, in case of suspension */
+		byte[] buffer; /* => next byte to read from source */
+		int bytes_offset;
+		int bytes_in_buffer;	/* # of bytes remaining in source buffer */
+		/* Bit input buffer --- note these values are kept in register variables,
+		 * not in this struct, inside the inner loops.
+		 */
+		int get_buffer;	/* current bit-extraction buffer */
+		int bits_left;		/* # of unused bits in it */
+		/* Pointer needed by jpeg_fill_bit_buffer. */
+		jpeg_decompress_struct cinfo;	/* back link to decompress master record */
+	} 
+	
+	static final class savable_state {
+		int EOBRUN; //Note that this is only used in the progressive case
+		int[] last_dc_val = new int[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */
+	}
+	
+	static final class d_derived_tbl {
+		/* Basic tables: (element [0] of each array is unused) */
+		int[] maxcode = new int[18];		/* largest code of length k (-1 if none) */
+		/* (maxcode[17] is a sentinel to ensure jpeg_huff_decode terminates) */
+		int[] valoffset = new int[17];		/* huffval[] offset for codes of length k */
+		/* valoffset[k] = huffval[] index of 1st symbol of code length k, less
+		 * the smallest code of length k; so given a code of length k, the
+		 * corresponding symbol is huffval[code + valoffset[k]]
+		 */
+
+		/* Link to public Huffman table (needed only in jpeg_huff_decode) */
+		JHUFF_TBL pub;
+
+		/* Lookahead tables: indexed by the next HUFF_LOOKAHEAD bits of
+		 * the input data stream.	If the next Huffman code is no more
+		 * than HUFF_LOOKAHEAD bits long, we can obtain its length and
+		 * the corresponding symbol directly from these tables.
+		 */
+		int[] look_nbits = new int[1<<HUFF_LOOKAHEAD]; /* # bits, or 0 if too long */
+		byte[] look_sym = new byte[1<<HUFF_LOOKAHEAD]; /* symbol, or unused */
+	} 
+	
+	static final class jpeg_d_coef_controller {
+		int consume_data;
+		int decompress_data;
+
+		/* Pointer to array of coefficient virtual arrays, or null if none */
+		short[][][] coef_arrays;
+	
+		/* These variables keep track of the current location of the input side. */
+		/* cinfo.input_iMCU_row is also used for this. */
+		int MCU_ctr;		/* counts MCUs processed in current row */
+		int MCU_vert_offset;		/* counts MCU rows within iMCU row */
+		int MCU_rows_per_iMCU_row;	/* number of such rows needed */
+
+		/* The output side's location is represented by cinfo.output_iMCU_row. */
+
+		/* In single-pass modes, it's sufficient to buffer just one MCU.
+		 * We allocate a workspace of D_MAX_BLOCKS_IN_MCU coefficient blocks,
+		 * and let the entropy decoder write into that workspace each time.
+		 * (On 80x86, the workspace is FAR even though it's not really very big;
+		 * this is to keep the module interfaces unchanged when a large coefficient
+		 * buffer is necessary.)
+		 * In multi-pass modes, this array points to the current MCU's blocks
+		 * within the virtual arrays; it is used only by the input side.
+		 */
+		short[][] MCU_buffer = new short[D_MAX_BLOCKS_IN_MCU][];
+
+		/* In multi-pass modes, we need a virtual block array for each component. */
+		short[][][][] whole_image = new short[MAX_COMPONENTS][][][];
+
+		/* When doing block smoothing, we latch coefficient Al values here */
+		int[] coef_bits_latch;
+		
+		short[] workspace;
+
+		void start_input_pass (jpeg_decompress_struct cinfo) {
+			cinfo.input_iMCU_row = 0;
+			start_iMCU_row(cinfo);
+		}
+		
+		/* Reset within-iMCU-row counters for a new row (input side) */
+		void start_iMCU_row (jpeg_decompress_struct cinfo) {
+			jpeg_d_coef_controller coef = cinfo.coef;
+
+			/* In an interleaved scan, an MCU row is the same as an iMCU row.
+			 * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows.
+			 * But at the bottom of the image, process only what's left.
+			 */
+			if (cinfo.comps_in_scan > 1) {
+				coef.MCU_rows_per_iMCU_row = 1;
+			} else {
+				if (cinfo.input_iMCU_row < (cinfo.total_iMCU_rows-1))
+					coef.MCU_rows_per_iMCU_row = cinfo.cur_comp_info[0].v_samp_factor;
+				else
+					coef.MCU_rows_per_iMCU_row = cinfo.cur_comp_info[0].last_row_height;
+			}
+
+			coef.MCU_ctr = 0;
+			coef.MCU_vert_offset = 0;
+		}
+		
+	}
+	
+	static abstract class jpeg_entropy_decoder {
+		abstract void start_pass (jpeg_decompress_struct cinfo);
+		abstract boolean decode_mcu (jpeg_decompress_struct cinfo, short[][] MCU_data);
+
+		/* This is here to share code between baseline and progressive decoders; */
+		/* other modules probably should not use it */
+		boolean insufficient_data;	/* set true after emitting warning */
+		
+		bitread_working_state br_state_local = new bitread_working_state();
+		savable_state state_local = new savable_state();
+	}	
+
+	static final class huff_entropy_decoder extends jpeg_entropy_decoder {
+		bitread_perm_state bitstate = new bitread_perm_state();	/* Bit buffer at start of MCU */
+		savable_state saved = new savable_state();		/* Other state at start of MCU */
+
+		/* These fields are NOT loaded into local working state. */
+		int restarts_to_go;	/* MCUs left in this restart interval */
+
+		/* Pointers to derived tables (these workspaces have image lifespan) */
+		d_derived_tbl[] dc_derived_tbls = new d_derived_tbl[NUM_HUFF_TBLS];
+		d_derived_tbl[] ac_derived_tbls = new d_derived_tbl[NUM_HUFF_TBLS];
+
+		/* Precalculated info set up by start_pass for use in decode_mcu: */
+
+		/* Pointers to derived tables to be used for each block within an MCU */
+		d_derived_tbl[] dc_cur_tbls = new d_derived_tbl[D_MAX_BLOCKS_IN_MCU];
+		d_derived_tbl[] ac_cur_tbls = new d_derived_tbl[D_MAX_BLOCKS_IN_MCU];
+		/* Whether we care about the DC and AC coefficient values for each block */
+		boolean[] dc_needed = new boolean[D_MAX_BLOCKS_IN_MCU];
+		boolean[] ac_needed = new boolean[D_MAX_BLOCKS_IN_MCU];
+		
+		void start_pass (jpeg_decompress_struct cinfo) {
+			start_pass_huff_decoder(cinfo);
+		}
+
+		boolean decode_mcu (jpeg_decompress_struct cinfo, short[][] MCU_data) {
+			huff_entropy_decoder entropy = this;
+			int blkn;
+//			BITREAD_STATE_VARS;
+			int get_buffer;
+			int bits_left;
+//			bitread_working_state br_state = new bitread_working_state();
+//			savable_state state = new savable_state();
+			bitread_working_state br_state = br_state_local;
+			savable_state state = state_local;
+
+				/* Process restart marker if needed; may have to suspend */
+			if (cinfo.restart_interval != 0) {
+				if (entropy.restarts_to_go == 0)
+					if (! process_restart(cinfo))
+						return false;
+			}
+
+			/* If we've run out of data, just leave the MCU set to zeroes.
+			 * This way, we return uniform gray for the remainder of the segment.
+			 */
+			if (! entropy.insufficient_data) {
+
+				/* Load up working state */
+//				BITREAD_LOAD_STATE(cinfo,entropy.bitstate);
+				br_state.cinfo = cinfo;
+				br_state.buffer = cinfo.buffer; 
+				br_state.bytes_in_buffer = cinfo.bytes_in_buffer;
+				br_state.bytes_offset = cinfo.bytes_offset;
+				get_buffer = entropy.bitstate.get_buffer;
+				bits_left = entropy.bitstate.bits_left;
+					
+//				ASSIGN_STATE(state, entropy.saved);
+				state.last_dc_val[0] = entropy.saved.last_dc_val[0];
+				state.last_dc_val[1] = entropy.saved.last_dc_val[1];
+				state.last_dc_val[2] = entropy.saved.last_dc_val[2];
+				state.last_dc_val[3] = entropy.saved.last_dc_val[3];
+
+				/* Outer loop handles each block in the MCU */
+
+				for (blkn = 0; blkn < cinfo.blocks_in_MCU; blkn++) {
+					short[] block = MCU_data[blkn];
+					d_derived_tbl dctbl = entropy.dc_cur_tbls[blkn];
+					d_derived_tbl actbl = entropy.ac_cur_tbls[blkn];
+					int s = 0, k, r;
+
+					/* Decode a single block's worth of coefficients */
+
+					/* Section F.2.2.1: decode the DC coefficient difference */
+//					HUFF_DECODE(s, br_state, dctbl, return FALSE, label1);
+					{
+					int nb = 0, look;
+					if (bits_left < HUFF_LOOKAHEAD) {
+						if (!jpeg_fill_bit_buffer(br_state,get_buffer,bits_left, 0)) {
+							return false;
+						}
+						get_buffer = br_state.get_buffer; bits_left = br_state.bits_left;
+						if (bits_left < HUFF_LOOKAHEAD) {
+							nb = 1;
+//							goto slowlabel;
+							if ((s=jpeg_huff_decode(br_state,get_buffer,bits_left,dctbl,nb)) < 0) {
+								return false;
+							}
+							get_buffer = br_state.get_buffer; bits_left = br_state.bits_left;
+						}
+					}
+//					look = PEEK_BITS(HUFF_LOOKAHEAD);
+					if (nb != 1) {
+						look = (( (get_buffer >> (bits_left -	(HUFF_LOOKAHEAD)))) & ((1<<(HUFF_LOOKAHEAD))-1));
+						if ((nb = dctbl.look_nbits[look]) != 0) {
+//							DROP_BITS(nb);
+							bits_left -= nb;
+							s = dctbl.look_sym[look] & 0xFF;
+						} else {
+							nb = HUFF_LOOKAHEAD+1;
+//							slowlabel:
+							if ((s=jpeg_huff_decode(br_state,get_buffer,bits_left,dctbl,nb)) < 0) {
+								return false;
+							}
+							get_buffer = br_state.get_buffer; bits_left = br_state.bits_left;
+						}
+					}
+					}
+
+					if (s != 0) {
+//						CHECK_BIT_BUFFER(br_state, s, return FALSE);
+						{
+						if (bits_left < (s)) {
+							if (!jpeg_fill_bit_buffer(br_state,get_buffer,bits_left,s)) {
+								return false;
+							}
+							get_buffer = (br_state).get_buffer; bits_left = (br_state).bits_left;
+						}
+						}
+//						r = GET_BITS(s);
+						r = (( (get_buffer >> (bits_left -= (s)))) & ((1<<(s))-1));
+//						s = HUFF_EXTEND(r, s);
+						s = ((r) < extend_test[s] ? (r) + extend_offset[s] : (r));
+					}
+
+					if (entropy.dc_needed[blkn]) {
+						/* Convert DC difference to actual value, update last_dc_val */
+						int ci = cinfo.MCU_membership[blkn];
+						s += state.last_dc_val[ci];
+						state.last_dc_val[ci] = s;
+						/* Output the DC coefficient (assumes jpeg_natural_order[0] = 0) */
+						block[0] = (short) s;
+					}
+
+					if (entropy.ac_needed[blkn]) {
+
+						/* Section F.2.2.2: decode the AC coefficients */
+						/* Since zeroes are skipped, output area must be cleared beforehand */
+						for (k = 1; k < DCTSIZE2; k++) {
+//							HUFF_DECODE(s, br_state, actbl, return FALSE, label2);	
+							{
+							int nb = 0, look;
+							if (bits_left < HUFF_LOOKAHEAD) {
+								if (!jpeg_fill_bit_buffer(br_state,get_buffer,bits_left, 0)) {
+									return false;
+								}
+								get_buffer = br_state.get_buffer; bits_left = br_state.bits_left;
+								if (bits_left < HUFF_LOOKAHEAD) {
+									nb = 1; 
+//									goto slowlabel;
+									if ((s=jpeg_huff_decode(br_state,get_buffer,bits_left,actbl,nb)) < 0) {
+										return false;
+									}
+									get_buffer = br_state.get_buffer; bits_left = br_state.bits_left;
+								}
+							}
+							if (nb != 1) {
+//								look = PEEK_BITS(HUFF_LOOKAHEAD);
+								look = (( (get_buffer >> (bits_left -	(HUFF_LOOKAHEAD)))) & ((1<<(HUFF_LOOKAHEAD))-1));
+								if ((nb = actbl.look_nbits[look]) != 0) {
+//									DROP_BITS(nb);
+									bits_left -= (nb);
+									s = actbl.look_sym[look] & 0xFF;
+								} else {
+									nb = HUFF_LOOKAHEAD+1;
+//									slowlabel:
+									if ((s=jpeg_huff_decode(br_state,get_buffer,bits_left,actbl,nb)) < 0) {
+										return false;
+									}
+									get_buffer = br_state.get_buffer; bits_left = br_state.bits_left;
+								}
+							}
+							}			
+							r = s >> 4;
+							s &= 15;
+						
+							if (s != 0) {
+								k += r;
+//								CHECK_BIT_BUFFER(br_state, s, return FALSE);
+								{
+								if (bits_left < (s)) {
+									if (!jpeg_fill_bit_buffer(br_state, get_buffer, bits_left, s)) {
+										return false;
+									}
+									get_buffer = (br_state).get_buffer;
+									bits_left = (br_state).bits_left;
+								}
+								}
+//								r = GET_BITS(s);
+								r = (((get_buffer >> (bits_left -= (s)))) & ((1 << (s)) - 1));
+//								s = HUFF_EXTEND(r, s);
+								s = ((r) < extend_test[s] ? (r) + extend_offset[s] : (r));
+								/*
+								 * Output coefficient in natural (dezigzagged)
+								 * order. Note: the extra entries in
+								 * jpeg_natural_order[] will save us if k >=
+								 * DCTSIZE2, which could happen if the data is
+								 * corrupted.
+								 */
+								block[jpeg_natural_order[k]] = (short) s;
+							} else {
+								if (r != 15)
+									break;
+								k += 15;
+							}
+						}
+
+					} else {
+
+						/* Section F.2.2.2: decode the AC coefficients */
+						/* In this path we just discard the values */
+						for (k = 1; k < DCTSIZE2; k++) {
+//							HUFF_DECODE(s, br_state, actbl, return FALSE, label3);
+							{
+							int nb = 0, look;
+							if (bits_left < HUFF_LOOKAHEAD) {
+								if (!jpeg_fill_bit_buffer(br_state,get_buffer,bits_left, 0)) {
+									return false;
+								}
+								get_buffer = br_state.get_buffer; bits_left = br_state.bits_left;
+								if (bits_left < HUFF_LOOKAHEAD) {
+									nb = 1;
+//									goto slowlabel;
+									if ((s=jpeg_huff_decode(br_state,get_buffer,bits_left,actbl,nb)) < 0) {
+										return false;
+									}
+									get_buffer = br_state.get_buffer; bits_left = br_state.bits_left;
+								}
+							}
+							if (nb != 1) {
+//								look = PEEK_BITS(HUFF_LOOKAHEAD);
+								look = (( (get_buffer >> (bits_left -	(HUFF_LOOKAHEAD)))) & ((1<<(HUFF_LOOKAHEAD))-1));
+								if ((nb = actbl.look_nbits[look]) != 0) {
+//									DROP_BITS(nb);
+									bits_left -= (nb);
+									s = actbl.look_sym[look] & 0xFF;
+								} else {
+									nb = HUFF_LOOKAHEAD+1;
+//									slowlabel:
+									if ((s=jpeg_huff_decode(br_state,get_buffer,bits_left,actbl,nb)) < 0) {
+										return false;
+									}
+									get_buffer = br_state.get_buffer; bits_left = br_state.bits_left;
+								}
+							}
+							}			
+							r = s >> 4;
+							s &= 15;
+						
+							if (s != 0) {
+								k += r;
+//								CHECK_BIT_BUFFER(br_state, s, return FALSE);
+								{
+								if (bits_left < (s)) {
+									if (!jpeg_fill_bit_buffer((br_state),get_buffer,bits_left,s)) {
+										return false;
+									}
+									get_buffer = (br_state).get_buffer; bits_left = (br_state).bits_left;
+									}
+								}
+//								DROP_BITS(s);
+								bits_left -= s;
+							} else {
+								if (r != 15)
+									break;
+								k += 15;
+							}
+						}
+
+					}
+				}
+
+				/* Completed MCU, so update state */
+//				BITREAD_SAVE_STATE(cinfo,entropy.bitstate);
+				cinfo.buffer = br_state.buffer;
+				cinfo.bytes_in_buffer = br_state.bytes_in_buffer;
+				cinfo.bytes_offset = br_state.bytes_offset;
+				entropy.bitstate.get_buffer = get_buffer;
+				entropy.bitstate.bits_left = bits_left;
+//				ASSIGN_STATE(entropy.saved, state);
+				entropy.saved.last_dc_val[0] = state.last_dc_val[0];
+				entropy.saved.last_dc_val[1] = state.last_dc_val[1];
+				entropy.saved.last_dc_val[2] = state.last_dc_val[2];
+				entropy.saved.last_dc_val[3] = state.last_dc_val[3];
+			}
+
+			/* Account for restart interval (no-op if not using restarts) */
+			entropy.restarts_to_go--;
+
+			return true;
+		}
+
+		void start_pass_huff_decoder (jpeg_decompress_struct cinfo) {
+			huff_entropy_decoder entropy = this;
+			int ci, blkn, dctbl, actbl;
+			jpeg_component_info compptr;
+
+			/* Check that the scan parameters Ss, Se, Ah/Al are OK for sequential JPEG.
+			 * This ought to be an error condition, but we make it a warning because
+			 * there are some baseline files out there with all zeroes in these bytes.
+			 */
+			if (cinfo.Ss != 0 || cinfo.Se != DCTSIZE2-1 || cinfo.Ah != 0 || cinfo.Al != 0) {
+//				WARNMS(cinfo, JWRN_NOT_SEQUENTIAL);
+			}
+
+			for (ci = 0; ci < cinfo.comps_in_scan; ci++) {
+				compptr = cinfo.cur_comp_info[ci];
+				dctbl = compptr.dc_tbl_no;
+				actbl = compptr.ac_tbl_no;
+				/* Compute derived values for Huffman tables */
+				/* We may do this more than once for a table, but it's not expensive */
+				jpeg_make_d_derived_tbl(cinfo, true, dctbl, entropy.dc_derived_tbls[dctbl] = new d_derived_tbl());
+				jpeg_make_d_derived_tbl(cinfo, false, actbl, entropy.ac_derived_tbls[actbl] = new d_derived_tbl());
+				/* Initialize DC predictions to 0 */
+				entropy.saved.last_dc_val[ci] = 0;
+			}
+
+			/* Precalculate decoding info for each block in an MCU of this scan */
+			for (blkn = 0; blkn < cinfo.blocks_in_MCU; blkn++) {
+				ci = cinfo.MCU_membership[blkn];
+				compptr = cinfo.cur_comp_info[ci];
+				/* Precalculate which table to use for each block */
+				entropy.dc_cur_tbls[blkn] = entropy.dc_derived_tbls[compptr.dc_tbl_no];
+				entropy.ac_cur_tbls[blkn] = entropy.ac_derived_tbls[compptr.ac_tbl_no];
+				/* Decide whether we really care about the coefficient values */
+				if (compptr.component_needed) {
+					entropy.dc_needed[blkn] = true;
+					/* we don't need the ACs if producing a 1/8th-size image */
+					entropy.ac_needed[blkn] = (compptr.DCT_scaled_size > 1);
+				} else {
+					entropy.dc_needed[blkn] = entropy.ac_needed[blkn] = false;
+				}
+			}
+
+			/* Initialize bitread state variables */
+			entropy.bitstate.bits_left = 0;
+			entropy.bitstate.get_buffer = 0; /* unnecessary, but keeps Purify quiet */
+			entropy.insufficient_data = false;
+
+			/* Initialize restart counter */
+			entropy.restarts_to_go = cinfo.restart_interval;
+		}
+	
+		boolean process_restart (jpeg_decompress_struct cinfo) {
+			huff_entropy_decoder entropy = this;
+			int ci;
+
+			/* Throw away any unused bits remaining in bit buffer; */
+			/* include any full bytes in next_marker's count of discarded bytes */
+			cinfo.marker.discarded_bytes += entropy.bitstate.bits_left / 8;
+			entropy.bitstate.bits_left = 0;
+
+			/* Advance past the RSTn marker */
+			if (! read_restart_marker (cinfo))
+				return false;
+
+			/* Re-initialize DC predictions to 0 */
+			for (ci = 0; ci < cinfo.comps_in_scan; ci++)
+				entropy.saved.last_dc_val[ci] = 0;
+
+			/* Reset restart counter */
+			entropy.restarts_to_go = cinfo.restart_interval;
+
+			/* Reset out-of-data flag, unless read_restart_marker left us smack up
+			 * against a marker.	In that case we will end up treating the next data
+			 * segment as empty, and we can avoid producing bogus output pixels by
+			 * leaving the flag set.
+			 */
+			if (cinfo.unread_marker == 0)
+				entropy.insufficient_data = false;
+
+			return true;
+		}
+	}
+	
+	static final class phuff_entropy_decoder extends jpeg_entropy_decoder {
+
+		/* These fields are loaded into local variables at start of each MCU.
+		 * In case of suspension, we exit WITHOUT updating them.
+		 */
+		bitread_perm_state bitstate = new bitread_perm_state();	/* Bit buffer at start of MCU */
+		savable_state saved = new savable_state();		/* Other state at start of MCU */
+
+		/* These fields are NOT loaded into local working state. */
+		int restarts_to_go;	/* MCUs left in this restart interval */
+
+		/* Pointers to derived tables (these workspaces have image lifespan) */
+		d_derived_tbl[] derived_tbls = new d_derived_tbl[NUM_HUFF_TBLS];
+
+		d_derived_tbl ac_derived_tbl; /* active table during an AC scan */
+		
+		int[] newnz_pos = new int[DCTSIZE2];
+			
+		void start_pass (jpeg_decompress_struct cinfo) {
+			start_pass_phuff_decoder(cinfo);
+		}
+			
+		boolean decode_mcu (jpeg_decompress_struct cinfo, short[][] MCU_data) {
+			boolean is_DC_band = (cinfo.Ss == 0);
+			if (cinfo.Ah == 0) {
+				if (is_DC_band)
+					return decode_mcu_DC_first(cinfo, MCU_data);
+				else
+					return decode_mcu_AC_first(cinfo, MCU_data);
+			} else {
+				if (is_DC_band)
+					return decode_mcu_DC_refine(cinfo, MCU_data);
+				else
+					return decode_mcu_AC_refine(cinfo, MCU_data);
+			}
+		}
+			
+		boolean decode_mcu_DC_refine (jpeg_decompress_struct cinfo, short[][] MCU_data) {
+			phuff_entropy_decoder entropy = this;
+			int p1 = 1 << cinfo.Al;	/* 1 in the bit position being coded */
+			int blkn;
+			short[] block;
+//			BITREAD_STATE_VARS;
+			int get_buffer;
+			int bits_left;
+//			bitread_working_state br_state = new bitread_working_state();
+			bitread_working_state br_state = br_state_local;
+					
+			/* Process restart marker if needed; may have to suspend */
+			if (cinfo.restart_interval != 0) {
+				if (entropy.restarts_to_go == 0)
+					if (! process_restart(cinfo))
+						return false;
+			}
+
+			/* Not worth the cycles to check insufficient_data here,
+			 * since we will not change the data anyway if we read zeroes.
+			 */
+
+			/* Load up working state */
+//			BITREAD_LOAD_STATE(cinfo,entropy.bitstate);
+			br_state.cinfo = cinfo;
+			br_state.buffer = cinfo.buffer; 
+			br_state.bytes_in_buffer = cinfo.bytes_in_buffer;
+			br_state.bytes_offset = cinfo.bytes_offset;
+			get_buffer = entropy.bitstate.get_buffer;
+			bits_left = entropy.bitstate.bits_left;
+					
+			/* Outer loop handles each block in the MCU */
+
+			for (blkn = 0; blkn < cinfo.blocks_in_MCU; blkn++) {
+				block = MCU_data[blkn];
+
+				/* Encoded data is simply the next bit of the two's-complement DC value */
+//				CHECK_BIT_BUFFER(br_state, 1, return FALSE);
+				{
+				if (bits_left < (1)) {
+					if (!jpeg_fill_bit_buffer(br_state,get_buffer,bits_left,1)) {
+						 return false;
+					}
+					get_buffer = (br_state).get_buffer; bits_left = (br_state).bits_left;
+				}
+				}
+//				if (GET_BITS(1))
+				if ((( (get_buffer >> (bits_left -= (1)))) & ((1<<(1))-1)) != 0)
+					block[0] |= p1;
+					/* Note: since we use |=, repeating the assignment later is safe */
+			}
+
+			/* Completed MCU, so update state */
+//			BITREAD_SAVE_STATE(cinfo,entropy.bitstate);
+			cinfo.buffer = br_state.buffer;
+			cinfo.bytes_in_buffer = br_state.bytes_in_buffer;
+			cinfo.bytes_offset = br_state.bytes_offset;
+			entropy.bitstate.get_buffer = get_buffer;
+			entropy.bitstate.bits_left = bits_left;
+					
+			/* Account for restart interval (no-op if not using restarts) */
+			entropy.restarts_to_go--;
+
+			return true;
+
+		}
+			
+		boolean decode_mcu_AC_refine (jpeg_decompress_struct cinfo, short[][] MCU_data) {
+			phuff_entropy_decoder entropy = this;
+			int Se = cinfo.Se;
+			int p1 = 1 << cinfo.Al;	/* 1 in the bit position being coded */
+			int m1 = (-1) << cinfo.Al;	/* -1 in the bit position being coded */
+			int s = 0, k, r;
+			int EOBRUN;
+			short[] block;
+			short[] thiscoef;
+//			BITREAD_STATE_VARS;
+			int get_buffer;
+			int bits_left;
+//			bitread_working_state br_state = new bitread_working_state();
+			bitread_working_state br_state = br_state_local;
+				
+			d_derived_tbl tbl;
+			int num_newnz;
+			int[] newnz_pos = entropy.newnz_pos;
+
+				/* Process restart marker if needed; may have to suspend */
+			if (cinfo.restart_interval != 0) {
+				if (entropy.restarts_to_go == 0)
+					if (! process_restart(cinfo))
+						return false;
+			}
+
+			/* If we've run out of data, don't modify the MCU.
+			 */
+			if (! entropy.insufficient_data) {
+
+				/* Load up working state */
+//				BITREAD_LOAD_STATE(cinfo,entropy.bitstate);
+				br_state.cinfo = cinfo;
+				br_state.buffer = cinfo.buffer; 
+				br_state.bytes_in_buffer = cinfo.bytes_in_buffer;
+				br_state.bytes_offset = cinfo.bytes_offset;
+				get_buffer = entropy.bitstate.get_buffer;
+				bits_left = entropy.bitstate.bits_left;
+					
+				EOBRUN = entropy.saved.EOBRUN; /* only part of saved state we need */
+
+				/* There is always only one block per MCU */
+				block = MCU_data[0];
+				tbl = entropy.ac_derived_tbl;
+
+				/* If we are forced to suspend, we must undo the assignments to any newly
+				 * nonzero coefficients in the block, because otherwise we'd get confused
+				 * next time about which coefficients were already nonzero.
+				 * But we need not undo addition of bits to already-nonzero coefficients;
+				 * instead, we can test the current bit to see if we already did it.
+				 */
+				num_newnz = 0;
+
+				/* initialize coefficient loop counter to start of band */
+				k = cinfo.Ss;
+
+				if (EOBRUN == 0) {
+					for (; k <= Se; k++) {
+//						HUFF_DECODE(s, br_state, tbl, goto undoit, label3);
+						{
+						int nb = 0, look;
+						if (bits_left < HUFF_LOOKAHEAD) {
+							if (! jpeg_fill_bit_buffer(br_state,get_buffer,bits_left, 0)) {
+//								failaction;
+								while (num_newnz > 0)
+									block[newnz_pos[--num_newnz]] = 0;
+
+								return false;
+							}
+							get_buffer = br_state.get_buffer; bits_left = br_state.bits_left;
+							if (bits_left < HUFF_LOOKAHEAD) {
+								nb = 1; 
+//								goto slowlabel;
+								if ((s=jpeg_huff_decode(br_state,get_buffer,bits_left,tbl,nb)) < 0) {
+//									failaction;
+									while (num_newnz > 0)
+										block[newnz_pos[--num_newnz]] = 0;
+
+									return false;
+								}
+								get_buffer = br_state.get_buffer; bits_left = br_state.bits_left;
+							}
+						}
+						if (nb != 1) {
+//							look = PEEK_BITS(HUFF_LOOKAHEAD);
+							look = (( (get_buffer >> (bits_left -	(HUFF_LOOKAHEAD)))) & ((1<<(HUFF_LOOKAHEAD))-1));
+							if ((nb = tbl.look_nbits[look]) != 0) {
+//								DROP_BITS(nb);
+								bits_left -= nb;
+								s = tbl.look_sym[look] & 0xFF;
+							} else {
+								nb = HUFF_LOOKAHEAD+1;
+//								slowlabel:
+								if ((s=jpeg_huff_decode(br_state,get_buffer,bits_left,tbl,nb)) < 0) { 
+//									failaction;
+									while (num_newnz > 0)
+										block[newnz_pos[--num_newnz]] = 0;
+
+									return false;
+								}
+								get_buffer = br_state.get_buffer; bits_left = br_state.bits_left;
+							}
+						}
+						}
+						r = s >> 4;
+						s &= 15;
+						if (s != 0) {
+							if (s != 1) {		/* size of new coef should always be 1 */
+//								WARNMS(cinfo, JWRN_HUFF_BAD_CODE);
+							}
+//							CHECK_BIT_BUFFER(br_state, 1, goto undoit);
+							{
+							if (bits_left < (1)) {
+								if (! jpeg_fill_bit_buffer(br_state,get_buffer,bits_left,1)) {
+//									failaction;
+									while (num_newnz > 0)
+										block[newnz_pos[--num_newnz]] = 0;
+
+									return false;
+								}
+								get_buffer = (br_state).get_buffer; bits_left = (br_state).bits_left;
+								}
+							}
+//							if (GET_BITS(1))
+							if ((( (get_buffer >> (bits_left -= (1)))) & ((1<<(1))-1)) != 0)
+								s = p1;		/* newly nonzero coef is positive */
+							else
+								s = m1;		/* newly nonzero coef is negative */
+						} else {
+							if (r != 15) {
+								EOBRUN = 1 << r;	/* EOBr, run length is 2^r + appended bits */
+								if (r != 0) {
+//									CHECK_BIT_BUFFER(br_state, r, goto undoit);
+									{
+									if (bits_left < (r)) {
+										if (!jpeg_fill_bit_buffer(br_state,get_buffer,bits_left,r)) {
+//											failaction;
+											while (num_newnz > 0)
+												block[newnz_pos[--num_newnz]] = 0;
+
+											return false;
+										}
+										get_buffer = (br_state).get_buffer; bits_left = (br_state).bits_left;
+									}
+									}
+//									r = GET_BITS(r);
+									r = (( (get_buffer >> (bits_left -= (r)))) & ((1<<(r))-1));
+									EOBRUN += r;
+								}
+								break;		/* rest of block is handled by EOB logic */
+							}
+							/* note s = 0 for processing ZRL */
+						}
+						/* Advance over already-nonzero coefs and r still-zero coefs,
+						 * appending correction bits to the nonzeroes.	A correction bit is 1
+						 * if the absolute value of the coefficient must be increased.
+						 */
+						do {
+							thiscoef = block;
+							int thiscoef_offset = jpeg_natural_order[k];
+							if (thiscoef[thiscoef_offset] != 0) {
+//								CHECK_BIT_BUFFER(br_state, 1, goto undoit);
+								{
+								if (bits_left < (1)) {
+									if (!jpeg_fill_bit_buffer(br_state,get_buffer,bits_left,1)) {
+//										failaction;
+										while (num_newnz > 0)
+											block[newnz_pos[--num_newnz]] = 0;
+
+										return false;
+									}
+									get_buffer = (br_state).get_buffer; bits_left = (br_state).bits_left;
+								}
+								}
+//								if (GET_BITS(1)) {
+								if ((( (get_buffer >> (bits_left -= (1)))) & ((1<<(1))-1)) != 0) {
+									if ((thiscoef[thiscoef_offset] & p1) == 0) { /* do nothing if already set it */
+										if (thiscoef[thiscoef_offset] >= 0)
+											thiscoef[thiscoef_offset] += p1;
+										else
+											thiscoef[thiscoef_offset] += m1;
+									}
+								}
+							} else {
+								if (--r < 0)
+									break;		/* reached target zero coefficient */
+							}
+							k++;
+						} while (k <= Se);
+						if (s != 0) {
+							int pos = jpeg_natural_order[k];
+							/* Output newly nonzero coefficient */
+							block[pos] = (short) s;
+							/* Remember its position in case we have to suspend */
+							newnz_pos[num_newnz++] = pos;
+						}
+					}
+				}
+
+				if (EOBRUN > 0) {
+					/* Scan any remaining coefficient positions after the end-of-band
+					 * (the last newly nonzero coefficient, if any).	Append a correction
+					 * bit to each already-nonzero coefficient.	A correction bit is 1
+					 * if the absolute value of the coefficient must be increased.
+					 */
+					for (; k <= Se; k++) {
+						thiscoef = block;
+						int thiscoef_offset = jpeg_natural_order[k];
+						if (thiscoef[thiscoef_offset] != 0) {
+//							CHECK_BIT_BUFFER(br_state, 1, goto undoit);
+							{
+							if (bits_left < (1)) {
+								if (! jpeg_fill_bit_buffer(br_state,get_buffer,bits_left,1)) {
+//									failaction;
+									while (num_newnz > 0)
+										block[newnz_pos[--num_newnz]] = 0;
+	
+									return false;
+								}
+								get_buffer = (br_state).get_buffer; bits_left = (br_state).bits_left;
+							}
+							}
+//							if (GET_BITS(1)) {
+							if ((( (get_buffer >> (bits_left -= (1)))) & ((1<<(1))-1)) != 0) {
+								if ((thiscoef[thiscoef_offset] & p1) == 0) { /* do nothing if already changed it */
+									if (thiscoef[thiscoef_offset] >= 0)
+										thiscoef[thiscoef_offset] += p1;
+									else
+										thiscoef[thiscoef_offset] += m1;
+								}
+							}
+						}
+					}
+						/* Count one block completed in EOB run */
+					EOBRUN--;
+				}
+
+				/* Completed MCU, so update state */
+//				BITREAD_SAVE_STATE(cinfo,entropy.bitstate);
+				cinfo.buffer = br_state.buffer;
+				cinfo.bytes_in_buffer = br_state.bytes_in_buffer;
+				cinfo.bytes_offset = br_state.bytes_offset;
+				entropy.bitstate.get_buffer = get_buffer;
+				entropy.bitstate.bits_left = bits_left;
+						
+				entropy.saved.EOBRUN = EOBRUN; /* only part of saved state we need */
+			}
+
+			/* Account for restart interval (no-op if not using restarts) */
+			entropy.restarts_to_go--;
+
+			return true;
+
+//			undoit:
+//				/* Re-zero any output coefficients that we made newly nonzero */
+//				while (num_newnz > 0)
+//					(*block)[newnz_pos[--num_newnz]] = 0;
+//
+//				return false;
+
+		}			
+			
+		boolean decode_mcu_AC_first (jpeg_decompress_struct cinfo, short[][] MCU_data) {
+			phuff_entropy_decoder entropy = this;
+			int Se = cinfo.Se;
+			int Al = cinfo.Al;
+			int s = 0, k, r;
+			int EOBRUN;
+			short[] block;
+//			BITREAD_STATE_VARS;
+			int get_buffer;
+			int bits_left;
+//			bitread_working_state br_state = new bitread_working_state();
+			bitread_working_state br_state = br_state_local;
+					
+			d_derived_tbl tbl;
+
+			/* Process restart marker if needed; may have to suspend */
+			if (cinfo.restart_interval != 0) {
+				if (entropy.restarts_to_go == 0)
+					if (! process_restart(cinfo))
+						return false;
+			}
+
+			/* If we've run out of data, just leave the MCU set to zeroes.
+			 * This way, we return uniform gray for the remainder of the segment.
+			 */
+			if (! entropy.insufficient_data) {
+
+				/* Load up working state.
+				 * We can avoid loading/saving bitread state if in an EOB run.
+				 */
+				EOBRUN = entropy.saved.EOBRUN;	/* only part of saved state we need */
+
+				/* There is always only one block per MCU */
+
+				if (EOBRUN > 0)		/* if it's a band of zeroes... */
+					EOBRUN--;			/* ...process it now (we do nothing) */
+				else {
+//					BITREAD_LOAD_STATE(cinfo,entropy.bitstate);
+					br_state.cinfo = cinfo;
+					br_state.buffer = cinfo.buffer; 
+					br_state.bytes_in_buffer = cinfo.bytes_in_buffer;
+					br_state.bytes_offset = cinfo.bytes_offset;
+					get_buffer = entropy.bitstate.get_buffer;
+					bits_left = entropy.bitstate.bits_left;
+						
+					block = MCU_data[0];
+					tbl = entropy.ac_derived_tbl;
+
+					for (k = cinfo.Ss; k <= Se; k++) {
+//						HUFF_DECODE(s, br_state, tbl, return FALSE, label2);
+						{
+						int nb = 0, look;
+						if (bits_left < HUFF_LOOKAHEAD) {
+							if (! jpeg_fill_bit_buffer(br_state,get_buffer,bits_left, 0)) {
+								return false;
+							}
+							get_buffer = br_state.get_buffer; bits_left = br_state.bits_left;
+							if (bits_left < HUFF_LOOKAHEAD) {
+								nb = 1;
+//								goto slowlabel;
+								if ((s=jpeg_huff_decode(br_state,get_buffer,bits_left,tbl,nb)) < 0) {
+									return false;
+								}
+								get_buffer = br_state.get_buffer; bits_left = br_state.bits_left;
+							}
+						}
+						if (nb != 1) {
+//							look = PEEK_BITS(HUFF_LOOKAHEAD);
+							look = (( (get_buffer >> (bits_left -	(HUFF_LOOKAHEAD)))) & ((1<<(HUFF_LOOKAHEAD))-1));
+
+							if ((nb = tbl.look_nbits[look]) != 0) {
+//								DROP_BITS(nb);
+								bits_left -= nb;
+								s = tbl.look_sym[look] & 0xFF;
+							} else {
+								nb = HUFF_LOOKAHEAD+1;
+//								slowlabel:
+								if ((s=jpeg_huff_decode(br_state,get_buffer,bits_left,tbl,nb)) < 0) {
+									return false;
+								}
+								get_buffer = br_state.get_buffer; bits_left = br_state.bits_left;
+							}
+						}
+						}
+						r = s >> 4;
+						s &= 15;
+						if (s != 0) {
+							k += r;
+//							CHECK_BIT_BUFFER(br_state, s, return FALSE);
+							{
+							if (bits_left < (s)) {
+								if (! jpeg_fill_bit_buffer(br_state,get_buffer,bits_left,s)) {
+									return false;
+								}
+								get_buffer = (br_state).get_buffer; bits_left = (br_state).bits_left;
+							}
+							}
+//							r = GET_BITS(s);
+							r = (( (get_buffer >> (bits_left -= (s)))) & ((1<<(s))-1));
+//							s = HUFF_EXTEND(r, s);
+							s = ((r) < extend_test[s] ? (r) + extend_offset[s] : (r));
+							/* Scale and output coefficient in natural (dezigzagged) order */
+							block[jpeg_natural_order[k]] = (short) (s << Al);
+						} else {
+							if (r == 15) {	/* ZRL */
+								k += 15;		/* skip 15 zeroes in band */
+							} else {		/* EOBr, run length is 2^r + appended bits */
+								EOBRUN = 1 << r;
+								if (r != 0) {		/* EOBr, r > 0 */
+//									CHECK_BIT_BUFFER(br_state, r, return FALSE);
+									{
+									if (bits_left < (r)) {
+										if (! jpeg_fill_bit_buffer(br_state,get_buffer,bits_left,r)) {
+											return false;
+										}
+										get_buffer = (br_state).get_buffer; bits_left = (br_state).bits_left;
+									}
+									}
+//									r = GET_BITS(r);
+									r = (( (get_buffer >> (bits_left -= (r)))) & ((1<<(r))-1));
+									EOBRUN += r;
+								}
+								EOBRUN--;		/* this band is processed at this moment */
+								break;		/* force end-of-band */
+							}
+						}
+					}
+
+//					BITREAD_SAVE_STATE(cinfo,entropy.bitstate);
+					cinfo.buffer = br_state.buffer;
+					cinfo.bytes_in_buffer = br_state.bytes_in_buffer;
+					cinfo.bytes_offset = br_state.bytes_offset;
+					entropy.bitstate.get_buffer = get_buffer;
+					entropy.bitstate.bits_left = bits_left;
+				}
+
+				/* Completed MCU, so update state */
+				entropy.saved.EOBRUN = EOBRUN;	/* only part of saved state we need */
+			}
+
+			/* Account for restart interval (no-op if not using restarts) */
+			entropy.restarts_to_go--;
+
+			return true;
+		}
+			
+		boolean decode_mcu_DC_first (jpeg_decompress_struct cinfo, short[][] MCU_data) {	 
+			phuff_entropy_decoder entropy = this;
+			int Al = cinfo.Al;
+			int s = 0, r;
+			int blkn, ci;
+			short[] block;
+//			BITREAD_STATE_VARS;
+			int get_buffer;
+			int bits_left;
+//			bitread_working_state br_state = new bitread_working_state();
+			bitread_working_state br_state = br_state_local;
+				
+//			savable_state state = new savable_state();
+			savable_state state = state_local;
+			d_derived_tbl tbl;
+			jpeg_component_info compptr;
+
+			/* Process restart marker if needed; may have to suspend */
+			if (cinfo.restart_interval != 0) {
+				if (entropy.restarts_to_go == 0)
+					if (! process_restart(cinfo))
+						return false;
+			}
+
+			/* If we've run out of data, just leave the MCU set to zeroes.
+			 * This way, we return uniform gray for the remainder of the segment.
+			 */
+			if (! entropy.insufficient_data) {
+
+				/* Load up working state */
+//				BITREAD_LOAD_STATE(cinfo,entropy.bitstate);
+				br_state.cinfo = cinfo;
+				br_state.buffer = cinfo.buffer; 
+				br_state.bytes_in_buffer = cinfo.bytes_in_buffer;
+				br_state.bytes_offset = cinfo.bytes_offset;
+				get_buffer = entropy.bitstate.get_buffer;
+				bits_left = entropy.bitstate.bits_left;
+					
+//				ASSIGN_STATE(state, entropy.saved);
+				state.EOBRUN = entropy.saved.EOBRUN;
+				state.last_dc_val[0] = entropy.saved.last_dc_val[0];
+				state.last_dc_val[1] = entropy.saved.last_dc_val[1];
+				state.last_dc_val[2] = entropy.saved.last_dc_val[2];
+				state.last_dc_val[3] = entropy.saved.last_dc_val[3];
+					
+				/* Outer loop handles each block in the MCU */
+
+				for (blkn = 0; blkn < cinfo.blocks_in_MCU; blkn++) {
+					block = MCU_data[blkn];
+					ci = cinfo.MCU_membership[blkn];
+					compptr = cinfo.cur_comp_info[ci];
+					tbl = entropy.derived_tbls[compptr.dc_tbl_no];
+
+					/* Decode a single block's worth of coefficients */
+
+					/* Section F.2.2.1: decode the DC coefficient difference */
+//					HUFF_DECODE(s, br_state, tbl, return FALSE, label1);
+					{
+					int nb = 0, look;
+					if (bits_left < HUFF_LOOKAHEAD) {
+						if (! jpeg_fill_bit_buffer(br_state,get_buffer,bits_left, 0)) {
+							return false;
+						}
+						get_buffer = br_state.get_buffer; bits_left = br_state.bits_left;
+						if (bits_left < HUFF_LOOKAHEAD) {
+							nb = 1;
+//							goto slowlabel;
+							if ((s=jpeg_huff_decode(br_state,get_buffer,bits_left,tbl,nb)) < 0) {
+								return false;
+							}
+							get_buffer = br_state.get_buffer; bits_left = br_state.bits_left;
+						}
+					}
+					if (nb != 1) {
+//						look = PEEK_BITS(HUFF_LOOKAHEAD);
+						look = (( (get_buffer >> (bits_left -	(HUFF_LOOKAHEAD)))) & ((1<<(HUFF_LOOKAHEAD))-1));
+
+						if ((nb = tbl.look_nbits[look]) != 0) {
+//							DROP_BITS(nb);
+							bits_left -= nb;
+							s = tbl.look_sym[look] & 0xFF;
+						} else {
+							nb = HUFF_LOOKAHEAD+1;
+//							slowlabel:
+							if ((s=jpeg_huff_decode(br_state,get_buffer,bits_left,tbl,nb)) < 0) {
+								return false;
+							}
+							get_buffer = br_state.get_buffer; bits_left = br_state.bits_left;
+						}
+					}
+					}
+					if (s != 0) {
+//						CHECK_BIT_BUFFER(br_state, s, return FALSE);
+						{
+						if (bits_left < (s)) {
+							if (! jpeg_fill_bit_buffer(br_state,get_buffer,bits_left,s)) {
+								return false;
+							}
+							get_buffer = (br_state).get_buffer; bits_left = (br_state).bits_left;
+						}
+						}
+//						r = GET_BITS(s);
+						r = (( (get_buffer >> (bits_left -= (s)))) & ((1<<(s))-1));
+//						s = HUFF_EXTEND(r, s);
+						s = ((r) < extend_test[s] ? (r) + extend_offset[s] : (r));
+					}
+
+						/* Convert DC difference to actual value, update last_dc_val */
+					s += state.last_dc_val[ci];
+					state.last_dc_val[ci] = s;
+					/* Scale and output the coefficient (assumes jpeg_natural_order[0]=0) */
+					block[0] = (short) (s << Al);
+				}
+
+				/* Completed MCU, so update state */
+//				BITREAD_SAVE_STATE(cinfo,entropy.bitstate);
+				cinfo.buffer = br_state.buffer;
+				cinfo.bytes_in_buffer = br_state.bytes_in_buffer;
+				cinfo.bytes_offset = br_state.bytes_offset;
+				entropy.bitstate.get_buffer = get_buffer;
+				entropy.bitstate.bits_left = bits_left;
+//				ASSIGN_STATE(entropy.saved, state);
+				entropy.saved.EOBRUN = state.EOBRUN;
+				entropy.saved.last_dc_val[0] = state.last_dc_val[0];
+				entropy.saved.last_dc_val[1] = state.last_dc_val[1];
+				entropy.saved.last_dc_val[2] = state.last_dc_val[2];
+				entropy.saved.last_dc_val[3] = state.last_dc_val[3];
+			}
+
+			/* Account for restart interval (no-op if not using restarts) */
+			entropy.restarts_to_go--;
+
+			return true;
+		}
+			
+		boolean process_restart (jpeg_decompress_struct cinfo) {
+			phuff_entropy_decoder entropy = this;
+			int ci;
+
+			/* Throw away any unused bits remaining in bit buffer; */
+			/* include any full bytes in next_marker's count of discarded bytes */
+			cinfo.marker.discarded_bytes += entropy.bitstate.bits_left / 8;
+			entropy.bitstate.bits_left = 0;
+
+			/* Advance past the RSTn marker */
+			if (! read_restart_marker (cinfo))
+				return false;
+
+			/* Re-initialize DC predictions to 0 */
+			for (ci = 0; ci < cinfo.comps_in_scan; ci++)
+				entropy.saved.last_dc_val[ci] = 0;
+				/* Re-init EOB run count, too */
+			entropy.saved.EOBRUN = 0;
+
+			/* Reset restart counter */
+			entropy.restarts_to_go = cinfo.restart_interval;
+
+			/* Reset out-of-data flag, unless read_restart_marker left us smack up
+			 * against a marker.	In that case we will end up treating the next data
+			 * segment as empty, and we can avoid producing bogus output pixels by
+			 * leaving the flag set.
+			 */
+			if (cinfo.unread_marker == 0)
+				entropy.insufficient_data = false;
+
+			return true;
+		}
+
+		void start_pass_phuff_decoder (jpeg_decompress_struct cinfo) {
+			phuff_entropy_decoder entropy = this;
+			boolean is_DC_band, bad;
+			int ci, coefi, tbl;
+			int[] coef_bit_ptr;
+			jpeg_component_info compptr;
+
+			is_DC_band = (cinfo.Ss == 0);
+
+			/* Validate scan parameters */
+			bad = false;
+			if (is_DC_band) {
+				if (cinfo.Se != 0)
+					bad = true;
+			} else {
+				/* need not check Ss/Se < 0 since they came from unsigned bytes */
+				if (cinfo.Ss > cinfo.Se || cinfo.Se >= DCTSIZE2)
+					bad = true;
+				/* AC scans may have only one component */
+				if (cinfo.comps_in_scan != 1)
+					bad = true;
+			}
+			if (cinfo.Ah != 0) {
+				/* Successive approximation refinement scan: must have Al = Ah-1. */
+				if (cinfo.Al != cinfo.Ah-1)
+					bad = true;
+			}
+			if (cinfo.Al > 13)		/* need not check for < 0 */
+				bad = true;
+			/* Arguably the maximum Al value should be less than 13 for 8-bit precision,
+			 * but the spec doesn't say so, and we try to be liberal about what we
+			 * accept.	Note: large Al values could result in out-of-range DC
+			 * coefficients during early scans, leading to bizarre displays due to
+			 * overflows in the IDCT math.	But we won't crash.
+			 */
+			if (bad)
+				error();
+//				ERREXIT4(cinfo, JERR_BAD_PROGRESSION, cinfo.Ss, cinfo.Se, cinfo.Ah, cinfo.Al);
+			/* Update progression status, and verify that scan order is legal.
+			 * Note that inter-scan inconsistencies are treated as warnings
+			 * not fatal errors ... not clear if this is right way to behave.
+			 */
+			for (ci = 0; ci < cinfo.comps_in_scan; ci++) {
+				int cindex = cinfo.cur_comp_info[ci].component_index;
+				coef_bit_ptr = cinfo.coef_bits[cindex];
+				if (!is_DC_band && coef_bit_ptr[0] < 0) {/* AC without prior DC scan */
+//					WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, 0);
+				}
+				for (coefi = cinfo.Ss; coefi <= cinfo.Se; coefi++) {
+					int expected = (coef_bit_ptr[coefi] < 0) ? 0 : coef_bit_ptr[coefi];
+					if (cinfo.Ah != expected) {
+//						WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, coefi);
+					}
+					coef_bit_ptr[coefi] = cinfo.Al;
+				}
+			}
+
+			/* Select MCU decoding routine */
+//			if (cinfo.Ah == 0) {
+//				if (is_DC_band)
+//					entropy.pub.decode_mcu = decode_mcu_DC_first;
+//				else
+//					entropy.pub.decode_mcu = decode_mcu_AC_first;
+//			} else {
+//				if (is_DC_band)
+//					entropy.pub.decode_mcu = decode_mcu_DC_refine;
+//				else
+//					entropy.pub.decode_mcu = decode_mcu_AC_refine;
+//			}
+
+			for (ci = 0; ci < cinfo.comps_in_scan; ci++) {
+				compptr = cinfo.cur_comp_info[ci];
+				/* Make sure requested tables are present, and compute derived tables.
+				 * We may build same derived table more than once, but it's not expensive.
+				 */
+				if (is_DC_band) {
+					if (cinfo.Ah == 0) {	/* DC refinement needs no table */
+						tbl = compptr.dc_tbl_no;
+						jpeg_make_d_derived_tbl(cinfo, true, tbl, entropy.derived_tbls[tbl] = new d_derived_tbl());
+					}
+				} else {
+					tbl = compptr.ac_tbl_no;
+					jpeg_make_d_derived_tbl(cinfo, false, tbl, entropy.derived_tbls[tbl] = new d_derived_tbl());
+					/* remember the single active table */
+					entropy.ac_derived_tbl = entropy.derived_tbls[tbl];
+				}
+				/* Initialize DC predictions to 0 */
+				entropy.saved.last_dc_val[ci] = 0;
+			}
+
+			/* Initialize bitread state variables */
+			entropy.bitstate.bits_left = 0;
+			entropy.bitstate.get_buffer = 0; /* unnecessary, but keeps Purify quiet */
+			entropy.insufficient_data = false;
+
+			/* Initialize private state variables */
+			entropy.saved.EOBRUN = 0;
+
+			/* Initialize restart counter */
+			entropy.restarts_to_go = cinfo.restart_interval;
+		}
+
+	}
+	
+	static final class jpeg_component_info {
+		/* These values are fixed over the whole image. */
+		/* For compression, they must be supplied by parameter setup; */
+		/* for decompression, they are read from the SOF marker. */
+		int component_id;		/* identifier for this component (0..255) */
+		int component_index;		/* its index in SOF or cinfo.comp_info[] */
+		int h_samp_factor;		/* horizontal sampling factor (1..4) */
+		int v_samp_factor;		/* vertical sampling factor (1..4) */
+		int quant_tbl_no;		/* quantization table selector (0..3) */
+		/* These values may vary between scans. */
+		/* For compression, they must be supplied by parameter setup; */
+		/* for decompression, they are read from the SOS marker. */
+		/* The decompressor output side may not use these variables. */
+		int dc_tbl_no;		/* DC entropy table selector (0..3) */
+		int ac_tbl_no;		/* AC entropy table selector (0..3) */
+		
+		/* Remaining fields should be treated as private by applications. */
+		
+		/* These values are computed during compression or decompression startup: */
+		/* Component's size in DCT blocks.
+		 * Any dummy blocks added to complete an MCU are not counted; therefore
+		 * these values do not depend on whether a scan is interleaved or not.
+		 */
+		int width_in_blocks;
+		int height_in_blocks;
+		/* Size of a DCT block in samples.	Always DCTSIZE for compression.
+		 * For decompression this is the size of the output from one DCT block,
+		 * reflecting any scaling we choose to apply during the IDCT step.
+		 * Values of 1,2,4,8 are likely to be supported.	Note that different
+		 * components may receive different IDCT scalings.
+		 */
+		int DCT_scaled_size;
+		/* The downsampled dimensions are the component's actual, unpadded number
+		 * of samples at the main buffer (preprocessing/compression interface), thus
+		 * downsampled_width = ceil(image_width * Hi/Hmax)
+		 * and similarly for height.	For decompression, IDCT scaling is included, so
+		 * downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE)
+		 */
+		int downsampled_width;	 /* actual width in samples */
+		int downsampled_height; /* actual height in samples */
+		/* This flag is used only for decompression.	In cases where some of the
+		 * components will be ignored (eg grayscale output from YCbCr image),
+		 * we can skip most computations for the unused components.
+		 */
+		boolean component_needed;	/* do we need the value of this component? */
+
+		/* These values are computed before starting a scan of the component. */
+		/* The decompressor output side may not use these variables. */
+		int MCU_width;		/* number of blocks per MCU, horizontally */
+		int MCU_height;		/* number of blocks per MCU, vertically */
+		int MCU_blocks;		/* MCU_width * MCU_height */
+		int MCU_sample_width;		/* MCU width in samples, MCU_width*DCT_scaled_size */
+		int last_col_width;		/* # of non-dummy blocks across in last MCU */
+		int last_row_height;		/* # of non-dummy blocks down in last MCU */
+
+		/* Saved quantization table for component; null if none yet saved.
+		 * See jdinput.c comments about the need for this information.
+		 * This field is currently used only for decompression.
+		 */
+		JQUANT_TBL quant_table;
+
+		/* Private per-component storage for DCT or IDCT subsystem. */
+		int[] dct_table;
+	}
+	
+	static final class jpeg_color_quantizer {
+//		JMETHOD(void, start_pass, (j_decompress_ptr cinfo, boolean is_pre_scan));
+//		JMETHOD(void, color_quantize, (j_decompress_ptr cinfo,
+//					 JSAMPARRAY input_buf, JSAMPARRAY output_buf,
+//					 int num_rows));
+//		JMETHOD(void, finish_pass, (j_decompress_ptr cinfo));
+//		JMETHOD(void, new_color_map, (j_decompress_ptr cinfo));
+		
+		/* Initially allocated colormap is saved here */
+		int[][] sv_colormap;	/* The color map as a 2-D pixel array */
+		int sv_actual;		/* number of entries in use */
+
+		int[][] colorindex;	/* Precomputed mapping for speed */
+		/* colorindex[i][j] = index of color closest to pixel value j in component i,
+		 * premultiplied as described above.	Since colormap indexes must fit into
+		 * JSAMPLEs, the entries of this array will too.
+		 */
+		boolean is_padded;		/* is the colorindex padded for odither? */
+
+		int[] Ncolors = new int [MAX_Q_COMPS];	/* # of values alloced to each component */
+
+		/* Variables for ordered dithering */
+		int row_index;		/* cur row's vertical index in dither matrix */
+//			ODITHER_MATRIX_PTR odither[MAX_Q_COMPS]; /* one dither array per component */
+
+		/* Variables for Floyd-Steinberg dithering */
+//			FSERRPTR fserrors[MAX_Q_COMPS]; /* accumulated errors */
+		boolean on_odd_row;	
+			
+		void start_pass (jpeg_decompress_struct cinfo, boolean is_pre_scan) {
+			error();
+		}
+	}
+	
+	static final class jpeg_upsampler {
+//		JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
+//		JMETHOD(void, upsample, (j_decompress_ptr cinfo,
+//					 JSAMPIMAGE input_buf,
+//					 JDIMENSION *in_row_group_ctr,
+//					 JDIMENSION in_row_groups_avail,
+//					 JSAMPARRAY output_buf,
+//					 JDIMENSION *out_row_ctr,
+//					 JDIMENSION out_rows_avail));
+
+		boolean need_context_rows;	/* TRUE if need rows above & below */
+			
+		/* Color conversion buffer.	When using separate upsampling and color
+		 * conversion steps, this buffer holds one upsampled row group until it
+		 * has been color converted and output.
+		 * Note: we do not allocate any storage for component(s) which are full-size,
+		 * ie do not need rescaling.	The corresponding entry of color_buf[] is
+		 * simply set to point to the input data array, thereby avoiding copying.
+		 */
+		byte[][][] color_buf = new byte[MAX_COMPONENTS][][];
+		int[] color_buf_offset = new int[MAX_COMPONENTS];
+
+		/* Per-component upsampling method pointers */
+		int[] methods = new int[MAX_COMPONENTS];
+
+		int next_row_out;		/* counts rows emitted from color_buf */
+		int rows_to_go;	/* counts rows remaining in image */
+
+		/* Height of an input row group for each component. */
+		int[] rowgroup_height = new int[MAX_COMPONENTS];
+
+		/* These arrays save pixel expansion factors so that int_expand need not
+		 * recompute them each time.	They are unused for other upsampling methods.
+		 */
+		byte[] h_expand = new byte[MAX_COMPONENTS];
+		byte[] v_expand = new byte[MAX_COMPONENTS];
+			
+		void start_pass (jpeg_decompress_struct cinfo) {
+			jpeg_upsampler upsample = cinfo.upsample;
+
+			/* Mark the conversion buffer empty */
+			upsample.next_row_out = cinfo.max_v_samp_factor;
+			/* Initialize total-height counter for detecting bottom of image */
+			upsample.rows_to_go = cinfo.output_height;
+		}
+			
+	}
+	
+	static final class jpeg_marker_reader {
+		/* Read a restart marker --- exported for use by entropy decoder only */
+//		jpeg_marker_parser_method read_restart_marker;
+
+		/* State of marker reader --- nominally internal, but applications
+		 * supplying COM or APPn handlers might like to know the state.
+		 */
+		boolean saw_SOI;		/* found SOI? */
+		boolean saw_SOF;		/* found SOF? */
+		int next_restart_num;		/* next restart number expected (0-7) */
+		int discarded_bytes;	/* # of bytes skipped looking for a marker */
+		
+		/* Application-overridable marker processing methods */
+//		jpeg_marker_parser_method process_COM;
+//		jpeg_marker_parser_method process_APPn[16];
+
+		/* Limit on marker data length to save for each marker type */
+		int length_limit_COM;
+		int[] length_limit_APPn = new int[16];
+
+		/* Status of COM/APPn marker saving */
+//		jpeg_marker_reader cur_marker;	/* null if not processing a marker */
+//		int bytes_read;		/* data bytes read so far in marker */
+		/* Note: cur_marker is not linked into marker_list until it's all read. */
+	}
+	
+	
+	static final class jpeg_d_main_controller {
+//		JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode));
+		int process_data;
+				
+		 /* Pointer to allocated workspace (M or M+2 row groups). */
+		byte[][][] buffer = new byte[MAX_COMPONENTS][][];
+		int[] buffer_offset = new int[MAX_COMPONENTS];
+
+		boolean buffer_full;		/* Have we gotten an iMCU row from decoder? */
+		int[] rowgroup_ctr = new int[1];	/* counts row groups output to postprocessor */
+
+		/* Remaining fields are only used in the context case. */
+
+		/* These are the master pointers to the funny-order pointer lists. */
+		byte[][][][] xbuffer = new byte[2][][][];	/* pointers to weird pointer lists */
+		int[][] xbuffer_offset = new int[2][];
+
+		int whichptr;			/* indicates which pointer set is now in use */
+		int context_state;		/* process_data state machine status */
+		int rowgroups_avail;	/* row groups available to postprocessor */
+		int iMCU_row_ctr;	/* counts iMCU rows to detect image top/bot */
+					
+		void start_pass (jpeg_decompress_struct cinfo, int pass_mode) {
+			jpeg_d_main_controller main = cinfo.main;
+
+			switch (pass_mode) {
+				case JBUF_PASS_THRU:
+					if (cinfo.upsample.need_context_rows) {
+						main.process_data = PROCESS_DATA_CONTEXT_MAIN;
+						make_funny_pointers(cinfo); /* Create the xbuffer[] lists */
+						main.whichptr = 0;	/* Read first iMCU row into xbuffer[0] */
+						main.context_state = CTX_PREPARE_FOR_IMCU;
+						main.iMCU_row_ctr = 0;
+					} else {
+						/* Simple case with no context needed */
+						main.process_data = PROCESS_DATA_SIMPLE_MAIN;
+					}
+					main.buffer_full = false;	/* Mark buffer empty */
+					main.rowgroup_ctr[0] = 0;
+					break;
+//				#ifdef QUANT_2PASS_SUPPORTED
+//				case JBUF_CRANK_DEST:
+//					/* For last pass of 2-pass quantization, just crank the postprocessor */
+//					main.process_data = PROCESS_DATA_CRANK_POST;
+//					break;
+//				#endif
+				default:
+					error();
+//					ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
+					break;
+			}
+		}
+					
+	}
+
+	static final class jpeg_decomp_master {
+//		JMETHOD(void, prepare_for_output_pass, (j_decompress_ptr cinfo));
+//		JMETHOD(void, finish_output_pass, (j_decompress_ptr cinfo));
+
+		/* State variables made visible to other modules */
+		boolean is_dummy_pass;
+
+		int pass_number;		/* # of passes completed */
+
+		boolean using_merged_upsample; /* true if using merged upsample/cconvert */
+
+		/* Saved references to initialized quantizer modules,
+		 * in case we need to switch modes.
+		 */
+		jpeg_color_quantizer quantizer_1pass;
+		jpeg_color_quantizer quantizer_2pass;
+	}
+	
+	static final class jpeg_inverse_dct {
+//		JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
+//		/* It is useful to allow each component to have a separate IDCT method. */
+//		inverse_DCT_method_ptr inverse_DCT[MAX_COMPONENTS];
+		int[] cur_method = new int[MAX_COMPONENTS];
+			
+		void start_pass (jpeg_decompress_struct cinfo) {
+			jpeg_inverse_dct idct = cinfo.idct;
+			int ci, i;
+			jpeg_component_info compptr;
+			int method = 0;
+//			inverse_DCT_method_ptr method_ptr = NULL;
+			JQUANT_TBL qtbl;
+
+			for (ci = 0; ci < cinfo.num_components; ci++) {
+				compptr = cinfo.comp_info[ci];
+				/* Select the proper IDCT routine for this component's scaling */
+				switch (compptr.DCT_scaled_size) {
+//					#ifdef IDCT_SCALING_SUPPORTED
+//					case 1:
+//						method_ptr = jpeg_idct_1x1;
+//						method = JDCT_ISLOW;	/* jidctred uses islow-style table */
+//						break;
+//					case 2:
+//						method_ptr = jpeg_idct_2x2;
+//						method = JDCT_ISLOW;	/* jidctred uses islow-style table */
+//						break;
+//					case 4:
+//						method_ptr = jpeg_idct_4x4;
+//						method = JDCT_ISLOW;	/* jidctred uses islow-style table */
+//						break;
+//					#endif
+					case DCTSIZE:
+						switch (cinfo.dct_method) {
+//							#ifdef DCT_ISLOW_SUPPORTED
+							case JDCT_ISLOW:
+//								method_ptr = jpeg_idct_islow;
+								method = JDCT_ISLOW;
+								break;
+//							#endif
+//							#ifdef DCT_IFAST_SUPPORTED
+//							case JDCT_IFAST:
+//								method_ptr = jpeg_idct_ifast;
+//								method = JDCT_IFAST;
+//								break;
+//							#endif
+//							#ifdef DCT_FLOAT_SUPPORTED
+//							case JDCT_FLOAT:
+//								method_ptr = jpeg_idct_float;
+//								method = JDCT_FLOAT;
+//								break;
+//							#endif
+							default:
+								error();
+//								ERREXIT(cinfo, JERR_NOT_COMPILED);
+								break;
+						}
+						break;
+					default:
+						error();
+//						ERREXIT1(cinfo, JERR_BAD_DCTSIZE, compptr.DCT_scaled_size);
+						break;
+					}
+//					idct.inverse_DCT[ci] = method_ptr;
+					/* Create multiplier table from quant table.
+					 * However, we can skip this if the component is uninteresting
+					 * or if we already built the table.	Also, if no quant table
+					 * has yet been saved for the component, we leave the
+					 * multiplier table all-zero; we'll be reading zeroes from the
+					 * coefficient controller's buffer anyway.
+					 */
+					if (! compptr.component_needed || idct.cur_method[ci] == method)
+						continue;
+					qtbl = compptr.quant_table;
+					if (qtbl == null)		/* happens if no data yet for component */
+						continue;
+					idct.cur_method[ci] = method;
+					switch (method) {
+//						#ifdef PROVIDE_ISLOW_TABLES
+						case JDCT_ISLOW:
+						{
+							/* For LL&M IDCT method, multipliers are equal to raw quantization
+							 * coefficients, but are stored as ints to ensure access efficiency.
+							 */
+							int[] ismtbl = compptr.dct_table;
+							for (i = 0; i < DCTSIZE2; i++) {
+								ismtbl[i] = qtbl.quantval[i];
+							}
+						}
+						break;
+//						#endif
+//						#ifdef DCT_IFAST_SUPPORTED
+//						case JDCT_IFAST:
+//						{
+//							/* For AA&N IDCT method, multipliers are equal to quantization
+//							 * coefficients scaled by scalefactor[row]*scalefactor[col], where
+//							 *	 scalefactor[0] = 1
+//							 *	 scalefactor[k] = cos(k*PI/16) * sqrt(2)		for k=1..7
+//							 * For integer operation, the multiplier table is to be scaled by
+//							 * IFAST_SCALE_BITS.
+//							 */
+//							int[] ifmtbl = compptr.dct_table;
+//							short aanscales[] = {
+//								/* precomputed values scaled up by 14 bits */
+//								16384, 22725, 21407, 19266, 16384, 12873,	8867,	4520,
+//								22725, 31521, 29692, 26722, 22725, 17855, 12299,	6270,
+//								21407, 29692, 27969, 25172, 21407, 16819, 11585,	5906,
+//								19266, 26722, 25172, 22654, 19266, 15137, 10426,	5315,
+//								16384, 22725, 21407, 19266, 16384, 12873,	8867,	4520,
+//								12873, 17855, 16819, 15137, 12873, 10114,	6967,	3552,
+//								8867, 12299, 11585, 10426,	8867,	6967,	4799,	2446,
+//								4520,	6270,	5906,	5315,	4520,	3552,	2446,	1247
+//							};
+//							SHIFT_TEMPS
+//							
+//							for (i = 0; i < DCTSIZE2; i++) {
+//								ifmtbl[i] = DESCALE(MULTIPLY16V16( qtbl.quantval[i], aanscales[i]), CONST_BITS-IFAST_SCALE_BITS);
+//							}
+//						}
+//						break;
+//						#endif
+//						#ifdef DCT_FLOAT_SUPPORTED
+//						case JDCT_FLOAT:
+//						{
+//							/* For float AA&N IDCT method, multipliers are equal to quantization
+//							 * coefficients scaled by scalefactor[row]*scalefactor[col], where
+//							 *	 scalefactor[0] = 1
+//							 *	 scalefactor[k] = cos(k*PI/16) * sqrt(2)		for k=1..7
+//							 */
+//							FLOAT_MULT_TYPE * fmtbl = (FLOAT_MULT_TYPE *) compptr.dct_table;
+//							int row, col;
+//							static const double aanscalefactor[DCTSIZE] = {
+//								1.0, 1.387039845, 1.306562965, 1.175875602,
+//								1.0, 0.785694958, 0.541196100, 0.275899379
+//							};
+//
+//							i = 0;
+//							for (row = 0; row < DCTSIZE; row++) {
+//								for (col = 0; col < DCTSIZE; col++) {
+//									fmtbl[i] = (FLOAT_MULT_TYPE)
+//										((double) qtbl.quantval[i] *
+//									 aanscalefactor[row] * aanscalefactor[col]);
+//									i++;
+//								}
+//							}
+//						}
+//						break;
+//						#endif
+					default:
+						error();
+//						ERREXIT(cinfo, JERR_NOT_COMPILED);
+						break;
+				}
+			}
+		}
+	}
+			
+	static final class jpeg_input_controller {
+		int consume_input;
+		boolean has_multiple_scans;	/* True if file has multiple scans */
+		boolean eoi_reached;
+
+		boolean inheaders;		/* true until first SOS is reached */
+	}
+	
+	static final class	jpeg_color_deconverter {
+//		JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
+		int color_convert;
+		
+		/* Private state for YCC.RGB conversion */
+		int[] Cr_r_tab;		/* => table for Cr to R conversion */
+		int[] Cb_b_tab;		/* => table for Cb to B conversion */
+		int[] Cr_g_tab;		/* => table for Cr to G conversion */
+		int[] Cb_g_tab;		/* => table for Cb to G conversion */
+			
+		void start_pass (jpeg_decompress_struct cinfo) {
+			/* no work needed */
+		}
+
+	}
+		
+	static final class jpeg_d_post_controller {
+//		JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode));
+		int post_process_data;
+			
+		/* Color quantization source buffer: this holds output data from
+		 * the upsample/color conversion step to be passed to the quantizer.
+		 * For two-pass color quantization, we need a full-image buffer;
+		 * for one-pass operation, a strip buffer is sufficient.
+		 */
+		int[] whole_image;	/* virtual array, or NULL if one-pass */
+		int[][] buffer;		/* strip buffer, or current strip of virtual */
+		int strip_height;	/* buffer size in rows */
+		/* for two-pass mode only: */
+		int starting_row;	/* row # of first row in current strip */
+		int next_row;		/* index of next row to fill/empty in strip */
+				
+		void start_pass (jpeg_decompress_struct cinfo, int pass_mode) {
+			jpeg_d_post_controller post = cinfo.post;
+
+			switch (pass_mode) {
+				case JBUF_PASS_THRU:
+					if (cinfo.quantize_colors) {
+						error(SWT.ERROR_NOT_IMPLEMENTED);
+//						/* Single-pass processing with color quantization. */
+//						post.post_process_data = POST_PROCESS_1PASS;
+//						/* We could be doing buffered-image output before starting a 2-pass
+//						 * color quantization; in that case, jinit_d_post_controller did not
+//						 * allocate a strip buffer.	Use the virtual-array buffer as workspace.
+//						 */
+//						if (post.buffer == null) {
+//							post.buffer = (*cinfo.mem.access_virt_sarray)
+//								((j_common_ptr) cinfo, post.whole_image,
+//						 		(JDIMENSION) 0, post.strip_height, TRUE);
+//						}
+					} else {
+						/* For single-pass processing without color quantization,
+						 * I have no work to do; just call the upsampler directly.
+						 */
+						post.post_process_data = POST_PROCESS_DATA_UPSAMPLE;
+					}
+					break;
+//				#ifdef QUANT_2PASS_SUPPORTED
+//				case JBUF_SAVE_AND_PASS:
+//					/* First pass of 2-pass quantization */
+//					if (post.whole_image == NULL)
+//						ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
+//					post.pub.post_process_data = post_process_prepass;
+//					break;
+//				case JBUF_CRANK_DEST:
+//					/* Second pass of 2-pass quantization */
+//					if (post.whole_image == NULL)
+//						ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
+//					post.pub.post_process_data = post_process_2pass;
+//					break;
+//				#endif /* QUANT_2PASS_SUPPORTED */
+					default:
+						error();
+//						ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
+						break;
+			}
+			post.starting_row = post.next_row = 0;
+		}
+
+	}
+	
+	static final class jpeg_decompress_struct {
+//		jpeg_error_mgr * err;	/* Error handler module */\
+//		struct jpeg_memory_mgr * mem;	/* Memory manager module */\
+//		struct jpeg_progress_mgr * progress; /* Progress monitor, or null if none */\
+//		void * client_data;		/* Available for use by application */\
+		boolean is_decompressor;	/* So common code can tell which is which */
+		int global_state;		/* For checking call sequence validity */
+
+//		/* Source of compressed data */
+//		struct jpeg_source_mgr * src;
+		InputStream inputStream;
+		byte[] buffer;
+		int bytes_in_buffer;
+		int bytes_offset;
+		boolean start_of_file;
+
+		/* Basic description of image --- filled in by jpeg_read_header(). */
+		/* Application may inspect these values to decide how to process image. */
+
+		int image_width;	/* nominal image width (from SOF marker) */
+		int image_height;	/* nominal image height */
+		int num_components;		/* # of color components in JPEG image */
+		int jpeg_color_space; /* colorspace of JPEG image */
+
+		/* Decompression processing parameters --- these fields must be set before
+		 * calling jpeg_start_decompress().	Note that jpeg_read_header() initializes
+		 * them to default values.
+		 */
+
+		int out_color_space; /* colorspace for output */
+
+		int scale_num, scale_denom; /* fraction by which to scale image */
+
+		double output_gamma;		/* image gamma wanted in output */
+
+		boolean buffered_image;	/* true=multiple output passes */
+		boolean raw_data_out;		/* true=downsampled data wanted */
+
+		int dct_method;	/* IDCT algorithm selector */
+		boolean do_fancy_upsampling;	/* true=apply fancy upsampling */
+		boolean do_block_smoothing;	/* true=apply interblock smoothing */
+
+		boolean quantize_colors;	/* true=colormapped output wanted */
+		/* the following are ignored if not quantize_colors: */
+		int dither_mode;	/* type of color dithering to use */
+		boolean two_pass_quantize;	/* true=use two-pass color quantization */
+		int desired_number_of_colors;	/* max # colors to use in created colormap */
+		/* these are significant only in buffered-image mode: */
+		boolean enable_1pass_quant;	/* enable future use of 1-pass quantizer */
+		boolean enable_external_quant;/* enable future use of external colormap */
+		boolean enable_2pass_quant;	/* enable future use of 2-pass quantizer */
+
+		/* Description of actual output image that will be returned to application.
+		 * These fields are computed by jpeg_start_decompress().
+		 * You can also use jpeg_calc_output_dimensions() to determine these values
+		 * in advance of calling jpeg_start_decompress().
+		 */
+
+		int output_width;	/* scaled image width */
+		int output_height;	/* scaled image height */
+		int out_color_components;	/* # of color components in out_color_space */
+		int output_components;	/* # of color components returned */
+		/* output_components is 1 (a colormap index) when quantizing colors;
+		 * otherwise it equals out_color_components.
+		 */
+		int rec_outbuf_height;	/* min recommended height of scanline buffer */
+		/* If the buffer passed to jpeg_read_scanlines() is less than this many rows
+		 * high, space and time will be wasted due to unnecessary data copying.
+		 * Usually rec_outbuf_height will be 1 or 2, at most 4.
+		 */
+
+		/* When quantizing colors, the output colormap is described by these fields.
+		 * The application can supply a colormap by setting colormap non-null before
+		 * calling jpeg_start_decompress; otherwise a colormap is created during
+		 * jpeg_start_decompress or jpeg_start_output.
+		 * The map has out_color_components rows and actual_number_of_colors columns.
+		 */
+		int actual_number_of_colors;	/* number of entries in use */
+		int[] colormap;		/* The color map as a 2-D pixel array */
+
+		/* State variables: these variables indicate the progress of decompression.
+		 * The application may examine these but must not modify them.
+		 */
+
+		/* Row index of next scanline to be read from jpeg_read_scanlines().
+		 * Application may use this to control its processing loop, e.g.,
+		 * "while (output_scanline < output_height)".
+		 */
+		int output_scanline;	/* 0 .. output_height-1	*/
+
+		/* Current input scan number and number of iMCU rows completed in scan.
+		 * These indicate the progress of the decompressor input side.
+		 */
+		int input_scan_number;	/* Number of SOS markers seen so far */
+		int input_iMCU_row;	/* Number of iMCU rows completed */
+
+		/* The "output scan number" is the notional scan being displayed by the
+		 * output side.	The decompressor will not allow output scan/row number
+		 * to get ahead of input scan/row, but it can fall arbitrarily far behind.
+		 */
+		int output_scan_number;	/* Nominal scan number being displayed */
+		int output_iMCU_row;	/* Number of iMCU rows read */
+
+		/* Current progression status.	coef_bits[c][i] indicates the precision
+		 * with which component c's DCT coefficient i (in zigzag order) is known.
+		 * It is -1 when no data has yet been received, otherwise it is the point
+		 * transform (shift) value for the most recent scan of the coefficient
+		 * (thus, 0 at completion of the progression).
+		 * This pointer is null when reading a non-progressive file.
+		 */
+		int[][] coef_bits;	/* -1 or current Al value for each coef */
+
+		/* Internal JPEG parameters --- the application usually need not look at
+		 * these fields.	Note that the decompressor output side may not use
+		 * any parameters that can change between scans.
+		 */
+
+		/* Quantization and Huffman tables are carried forward across input
+		 * datastreams when processing abbreviated JPEG datastreams.
+		 */
+
+		JQUANT_TBL[] quant_tbl_ptrs = new JQUANT_TBL[NUM_QUANT_TBLS];
+		/* ptrs to coefficient quantization tables, or null if not defined */
+
+		JHUFF_TBL[] dc_huff_tbl_ptrs = new JHUFF_TBL[NUM_HUFF_TBLS];
+		JHUFF_TBL[] ac_huff_tbl_ptrs = new JHUFF_TBL[NUM_HUFF_TBLS];
+		/* ptrs to Huffman coding tables, or null if not defined */
+
+		/* These parameters are never carried across datastreams, since they
+		 * are given in SOF/SOS markers or defined to be reset by SOI.
+		 */
+
+		int data_precision;		/* bits of precision in image data */
+
+		jpeg_component_info[] comp_info;
+		/* comp_info[i] describes component that appears i'th in SOF */
+
+		boolean progressive_mode;	/* true if SOFn specifies progressive mode */
+		boolean arith_code;		/* true=arithmetic coding, false=Huffman */
+
+		byte[] arith_dc_L = new byte[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */
+		byte[] arith_dc_U = new byte[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */
+		byte[] arith_ac_K = new byte[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */
+
+		int restart_interval; /* MCUs per restart interval, or 0 for no restart */
+
+		/* These fields record data obtained from optional markers recognized by
+		 * the JPEG library.
+		 */
+		boolean saw_JFIF_marker;	/* true iff a JFIF APP0 marker was found */
+		/* Data copied from JFIF marker; only valid if saw_JFIF_marker is true: */
+		byte JFIF_major_version;	/* JFIF version number */
+		byte JFIF_minor_version;
+		byte density_unit;		/* JFIF code for pixel size units */
+		short X_density;		/* Horizontal pixel density */
+		short Y_density;		/* Vertical pixel density */
+		boolean saw_Adobe_marker;	/* true iff an Adobe APP14 marker was found */
+		byte Adobe_transform;	/* Color transform code from Adobe marker */
+
+		boolean CCIR601_sampling;	/* true=first samples are cosited */
+
+		/* Aside from the specific data retained from APPn markers known to the
+		 * library, the uninterpreted contents of any or all APPn and COM markers
+		 * can be saved in a list for examination by the application.
+		 */
+		jpeg_marker_reader marker_list; /* Head of list of saved markers */
+
+		/* Remaining fields are known throughout decompressor, but generally
+		 * should not be touched by a surrounding application.
+		 */
+
+		/*
+		 * These fields are computed during decompression startup
+		 */
+		int max_h_samp_factor;	/* largest h_samp_factor */
+		int max_v_samp_factor;	/* largest v_samp_factor */
+
+		int min_DCT_scaled_size;	/* smallest DCT_scaled_size of any component */
+
+		int total_iMCU_rows;	/* # of iMCU rows in image */
+		/* The coefficient controller's input and output progress is measured in
+		 * units of "iMCU" (interleaved MCU) rows.	These are the same as MCU rows
+		 * in fully interleaved JPEG scans, but are used whether the scan is
+		 * interleaved or not.	We define an iMCU row as v_samp_factor DCT block
+		 * rows of each component.	Therefore, the IDCT output contains
+		 * v_samp_factor*DCT_scaled_size sample rows of a component per iMCU row.
+		 */
+
+		byte[] sample_range_limit; /* table for fast range-limiting */
+		int sample_range_limit_offset;
+
+		/*
+		 * These fields are valid during any one scan.
+		 * They describe the components and MCUs actually appearing in the scan.
+		 * Note that the decompressor output side must not use these fields.
+		 */
+		int comps_in_scan;		/* # of JPEG components in this scan */
+		jpeg_component_info[] cur_comp_info = new jpeg_component_info[MAX_COMPS_IN_SCAN];
+		/* *cur_comp_info[i] describes component that appears i'th in SOS */
+
+		int MCUs_per_row;	/* # of MCUs across the image */
+		int MCU_rows_in_scan;	/* # of MCU rows in the image */
+
+		int blocks_in_MCU;		/* # of DCT blocks per MCU */
+		int[] MCU_membership = new int[D_MAX_BLOCKS_IN_MCU];
+		/* MCU_membership[i] is index in cur_comp_info of component owning */
+		/* i'th block in an MCU */
+
+		int Ss, Se, Ah, Al;		/* progressive JPEG parameters for scan */
+
+		/* This field is shared between entropy decoder and marker parser.
+		 * It is either zero or the code of a JPEG marker that has been
+		 * read from the data source, but has not yet been processed.
+		 */
+		int unread_marker;
+		
+		int[] workspace = new int[DCTSIZE2];
+		int[] row_ctr = new int[1];
+
+		/*
+		 * Links to decompression subobjects (methods, private variables of modules)
+		 */
+		jpeg_decomp_master master;
+		jpeg_d_main_controller main;
+		jpeg_d_coef_controller coef;
+		jpeg_d_post_controller post;
+		jpeg_input_controller inputctl;
+		jpeg_marker_reader marker;
+		jpeg_entropy_decoder entropy;
+		jpeg_inverse_dct idct;
+		jpeg_upsampler upsample;
+		jpeg_color_deconverter cconvert;
+		jpeg_color_quantizer cquantize;
+	}
+
+static void error() {
+	SWT.error(SWT.ERROR_INVALID_IMAGE);
+}
+
+static void error(int code) {
+	SWT.error(code);
+}
+
+static void error(String msg) {
+	SWT.error(SWT.ERROR_INVALID_IMAGE, null, msg);
+}
+
+static void jinit_marker_reader (jpeg_decompress_struct cinfo) {
+	jpeg_marker_reader marker = cinfo.marker = new jpeg_marker_reader();
+//	int i;
+
+	/* Initialize COM/APPn processing.
+	 * By default, we examine and then discard APP0 and APP14,
+	 * but simply discard COM and all other APPn.
+	 */
+//	marker.process_COM = skip_variable;
+	marker.length_limit_COM = 0;
+//	for (i = 0; i < 16; i++) {
+//		marker.process_APPn[i] = skip_variable;
+//		marker.length_limit_APPn[i] = 0;
+//	}
+//	marker.process_APPn[0] = get_interesting_appn;
+//	marker.process_APPn[14] = get_interesting_appn;
+	/* Reset marker processing state */
+	reset_marker_reader(cinfo);
+}
+
+static void jinit_d_coef_controller (jpeg_decompress_struct cinfo, boolean need_full_buffer) {
+	jpeg_d_coef_controller coef = new jpeg_d_coef_controller();
+	cinfo.coef = coef;
+//	coef.pub.start_input_pass = start_input_pass;
+//	coef.pub.start_output_pass = start_output_pass;
+	coef.coef_bits_latch = null;
+
+	/* Create the coefficient buffer. */
+	if (need_full_buffer) {
+//#ifdef D_MULTISCAN_FILES_SUPPORTED
+		/* Allocate a full-image virtual array for each component, */
+		/* padded to a multiple of samp_factor DCT blocks in each direction. */
+		/* Note we ask for a pre-zeroed array. */
+		int ci, access_rows;
+		jpeg_component_info compptr;
+
+		for (ci = 0; ci < cinfo.num_components; ci++) {
+			compptr = cinfo.comp_info[ci];
+			access_rows = compptr.v_samp_factor;
+//#ifdef BLOCK_SMOOTHING_SUPPORTED
+			/* If block smoothing could be used, need a bigger window */
+			if (cinfo.progressive_mode)
+				access_rows *= 3;
+//#endif
+			coef.whole_image[ci] = 
+				new short
+					[(int)jround_up( compptr.height_in_blocks, compptr.v_samp_factor)]
+				    [(int)jround_up( compptr.width_in_blocks, compptr.h_samp_factor)]
+				    [DCTSIZE2];
+		}
+//		coef.consume_data = consume_data;
+		coef.decompress_data = DECOMPRESS_DATA;
+		coef.coef_arrays = coef.whole_image[0]; /* link to virtual arrays */
+//		#else
+//				ERREXIT(cinfo, JERR_NOT_COMPILED);
+//		#endif
+	} else {
+		/* We only need a single-MCU buffer. */
+		coef.MCU_buffer = new short[D_MAX_BLOCKS_IN_MCU][DCTSIZE2];
+//		coef.consume_data = dummy_consume_data;
+		coef.decompress_data = DECOMPRESS_ONEPASS;
+		coef.coef_arrays = null; /* flag for no virtual arrays */
+	}
+}
+
+static void start_output_pass (jpeg_decompress_struct cinfo) {
+//#ifdef BLOCK_SMOOTHING_SUPPORTED
+	jpeg_d_coef_controller coef = cinfo.coef;
+
+	/* If multipass, check to see whether to use block smoothing on this pass */
+	if (coef.coef_arrays != null) {
+		if (cinfo.do_block_smoothing && smoothing_ok(cinfo))
+			coef.decompress_data = DECOMPRESS_SMOOTH_DATA;
+		else
+			coef.decompress_data = DECOMPRESS_DATA;
+	}
+//#endif
+	cinfo.output_iMCU_row = 0;
+}
+
+static void jpeg_create_decompress(jpeg_decompress_struct cinfo) {
+	cinfo.is_decompressor = true;
+
+
+	/* Initialize marker processor so application can override methods
+	 * for COM, APPn markers before calling jpeg_read_header.
+	 */
+	cinfo.marker_list = null;
+	jinit_marker_reader(cinfo);
+
+	/* And initialize the overall input controller. */
+	jinit_input_controller(cinfo);
+
+	/* OK, I'm ready */
+	cinfo.global_state = DSTATE_START;
+}
+
+static void jpeg_calc_output_dimensions (jpeg_decompress_struct cinfo)
+/* Do computations that are needed before master selection phase */
+{
+//#ifdef IDCT_SCALING_SUPPORTED
+//	int ci;
+//	jpeg_component_info compptr;
+//#endif
+
+	/* Prevent application from calling me at wrong times */
+	if (cinfo.global_state != DSTATE_READY)
+		error();
+//		ERREXIT1(cinfo, JERR_BAD_STATE, cinfo.global_state);
+
+//#ifdef IDCT_SCALING_SUPPORTED
+//
+//	/* Compute actual output image dimensions and DCT scaling choices. */
+//	if (cinfo.scale_num * 8 <= cinfo.scale_denom) {
+//		/* Provide 1/8 scaling */
+//		cinfo.output_width = (int)
+//			jdiv_round_up(cinfo.image_width, 8L);
+//		cinfo.output_height = (int)
+//			jdiv_round_up(cinfo.image_height, 8L);
+//		cinfo.min_DCT_scaled_size = 1;
+//	} else if (cinfo.scale_num * 4 <= cinfo.scale_denom) {
+//		/* Provide 1/4 scaling */
+//		cinfo.output_width = (int)
+//			jdiv_round_up(cinfo.image_width, 4L);
+//		cinfo.output_height = (int)
+//			jdiv_round_up(cinfo.image_height, 4L);
+//		cinfo.min_DCT_scaled_size = 2;
+//	} else if (cinfo.scale_num * 2 <= cinfo.scale_denom) {
+//		/* Provide 1/2 scaling */
+//		cinfo.output_width = (int)
+//			jdiv_round_up(cinfo.image_width, 2L);
+//		cinfo.output_height = (int)
+//			jdiv_round_up(cinfo.image_height, 2L);
+//		cinfo.min_DCT_scaled_size = 4;
+//	} else {
+//		/* Provide 1/1 scaling */
+//		cinfo.output_width = cinfo.image_width;
+//		cinfo.output_height = cinfo.image_height;
+//		cinfo.min_DCT_scaled_size = DCTSIZE;
+//	}
+//	/* In selecting the actual DCT scaling for each component, we try to
+//	 * scale up the chroma components via IDCT scaling rather than upsampling.
+//	 * This saves time if the upsampler gets to use 1:1 scaling.
+//	 * Note this code assumes that the supported DCT scalings are powers of 2.
+//	 */
+//	for (ci = 0; ci < cinfo.num_components; ci++) {
+//		compptr = cinfo.comp_info[ci];
+//		int ssize = cinfo.min_DCT_scaled_size;
+//		while (ssize < DCTSIZE &&
+//			(compptr.h_samp_factor * ssize * 2 <= cinfo.max_h_samp_factor * cinfo.min_DCT_scaled_size) &&
+//			(compptr.v_samp_factor * ssize * 2 <= cinfo.max_v_samp_factor * cinfo.min_DCT_scaled_size))
+//		{
+//			ssize = ssize * 2;
+//		}
+//		compptr.DCT_scaled_size = ssize;
+//	}
+//
+//	/* Recompute downsampled dimensions of components;
+//	 * application needs to know these if using raw downsampled data.
+//	 */
+//	for (ci = 0; ci < cinfo.num_components; ci++) {
+//		compptr = cinfo.comp_info[ci];
+//		/* Size in samples, after IDCT scaling */
+//		compptr.downsampled_width = (int)
+//			jdiv_round_up((long) cinfo.image_width * (long) (compptr.h_samp_factor * compptr.DCT_scaled_size),
+//				(cinfo.max_h_samp_factor * DCTSIZE));
+//		compptr.downsampled_height = (int)
+//			jdiv_round_up((long) cinfo.image_height * (long) (compptr.v_samp_factor * compptr.DCT_scaled_size),
+//				(cinfo.max_v_samp_factor * DCTSIZE));
+//	}
+//
+//#else /* !IDCT_SCALING_SUPPORTED */
+
+	/* Hardwire it to "no scaling" */
+	cinfo.output_width = cinfo.image_width;
+	cinfo.output_height = cinfo.image_height;
+	/* jdinput.c has already initialized DCT_scaled_size to DCTSIZE,
+	 * and has computed unscaled downsampled_width and downsampled_height.
+	 */
+
+//#endif /* IDCT_SCALING_SUPPORTED */
+
+	/* Report number of components in selected colorspace. */
+	/* Probably this should be in the color conversion module... */
+	switch (cinfo.out_color_space) {
+		case JCS_GRAYSCALE:
+			cinfo.out_color_components = 1;
+			break;
+		case JCS_RGB:
+		case JCS_YCbCr:
+			cinfo.out_color_components = 3;
+			break;
+		case JCS_CMYK:
+		case JCS_YCCK:
+			cinfo.out_color_components = 4;
+			break;
+		default:			/* else must be same colorspace as in file */
+			cinfo.out_color_components = cinfo.num_components;
+			break;
+	}
+	cinfo.output_components = (cinfo.quantize_colors ? 1 : cinfo.out_color_components);
+
+	/* See if upsampler will want to emit more than one row at a time */
+	if (use_merged_upsample(cinfo))
+		cinfo.rec_outbuf_height = cinfo.max_v_samp_factor;
+	else
+		cinfo.rec_outbuf_height = 1;
+}
+
+static boolean use_merged_upsample (jpeg_decompress_struct cinfo) {
+//#ifdef UPSAMPLE_MERGING_SUPPORTED
+	/* Merging is the equivalent of plain box-filter upsampling */
+	if (cinfo.do_fancy_upsampling || cinfo.CCIR601_sampling)
+		return false;
+	/* jdmerge.c only supports YCC=>RGB color conversion */
+	if (cinfo.jpeg_color_space != JCS_YCbCr || cinfo.num_components != 3 ||
+			cinfo.out_color_space != JCS_RGB ||
+			cinfo.out_color_components != RGB_PIXELSIZE)
+		return false;
+	/* and it only handles 2h1v or 2h2v sampling ratios */
+	if (cinfo.comp_info[0].h_samp_factor != 2 ||
+			cinfo.comp_info[1].h_samp_factor != 1 ||
+			cinfo.comp_info[2].h_samp_factor != 1 ||
+			cinfo.comp_info[0].v_samp_factor >	2 ||
+			cinfo.comp_info[1].v_samp_factor != 1 ||
+			cinfo.comp_info[2].v_samp_factor != 1)
+		return false;
+	/* furthermore, it doesn't work if we've scaled the IDCTs differently */
+	if (cinfo.comp_info[0].DCT_scaled_size != cinfo.min_DCT_scaled_size ||
+			cinfo.comp_info[1].DCT_scaled_size != cinfo.min_DCT_scaled_size ||
+			cinfo.comp_info[2].DCT_scaled_size != cinfo.min_DCT_scaled_size)
+		return false;
+	/* ??? also need to test for upsample-time rescaling, when & if supported */
+	return true;			/* by golly, it'll work... */
+//#else
+//	return false;
+//#endif
+}
+
+static void prepare_range_limit_table (jpeg_decompress_struct cinfo)
+/* Allocate and fill in the sample_range_limit table */
+{
+	byte[] table;
+	int i;
+
+	table = new byte[5 * (MAXJSAMPLE+1) + CENTERJSAMPLE];
+	int offset = (MAXJSAMPLE+1);	/* allow negative subscripts of simple table */
+	cinfo.sample_range_limit_offset = offset;
+	cinfo.sample_range_limit = table;
+	/* First segment of "simple" table: limit[x] = 0 for x < 0 */
+	/* Main part of "simple" table: limit[x] = x */
+	for (i = 0; i <= MAXJSAMPLE; i++)
+		table[i + offset] = (byte)i;
+	offset += CENTERJSAMPLE;	/* Point to where post-IDCT table starts */
+	/* End of simple table, rest of first half of post-IDCT table */
+	for (i = CENTERJSAMPLE; i < 2*(MAXJSAMPLE+1); i++)
+		table[i+offset] = (byte)MAXJSAMPLE;
+	/* Second half of post-IDCT table */
+	System.arraycopy(cinfo.sample_range_limit, cinfo.sample_range_limit_offset, table, offset + (4 * (MAXJSAMPLE+1) - CENTERJSAMPLE), CENTERJSAMPLE);
+}
+
+static void build_ycc_rgb_table (jpeg_decompress_struct cinfo) {
+	jpeg_color_deconverter cconvert = cinfo.cconvert;
+	int i;
+	int x;
+//	SHIFT_TEMPS
+
+	cconvert.Cr_r_tab = new int[MAXJSAMPLE+1];
+	cconvert.Cb_b_tab = new int[MAXJSAMPLE+1];
+	cconvert.Cr_g_tab = new int[MAXJSAMPLE+1];
+	cconvert.Cb_g_tab = new int[MAXJSAMPLE+1];
+
+	for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) {
+		/* i is the actual input pixel value, in the range 0..MAXJSAMPLE */
+		/* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */
+		/* Cr=>R value is nearest int to 1.40200 * x */
+		cconvert.Cr_r_tab[i] = ((int)(1.40200f * (1<<SCALEBITS) + 0.5f) * x + ONE_HALF) >> SCALEBITS;
+		/* Cb=>B value is nearest int to 1.77200 * x */
+		cconvert.Cb_b_tab[i] = ((int)(1.77200f * (1<<SCALEBITS) + 0.5f) * x + ONE_HALF) >> SCALEBITS;
+		/* Cr=>G value is scaled-up -0.71414 * x */
+		cconvert.Cr_g_tab[i] = ((int)(- (0.71414f * (1<<SCALEBITS) + 0.5f)) * x);
+		/* Cb=>G value is scaled-up -0.34414 * x */
+		/* We also add in ONE_HALF so that need not do it in inner loop */
+		cconvert.Cb_g_tab[i] = ((int)(- (0.34414f* (1<<SCALEBITS) + 0.5f)) * x + ONE_HALF);
+	}
+}
+
+static void jinit_color_deconverter (jpeg_decompress_struct cinfo) {
+	jpeg_color_deconverter cconvert = cinfo.cconvert = new jpeg_color_deconverter();
+//	cconvert.start_pass = start_pass_dcolor;
+
+	/* Make sure num_components agrees with jpeg_color_space */
+	switch (cinfo.jpeg_color_space) {
+		case JCS_GRAYSCALE:
+			if (cinfo.num_components != 1)
+				error();
+//				ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
+			break;
+
+		case JCS_RGB:
+		case JCS_YCbCr:
+			if (cinfo.num_components != 3)
+				error();
+//				ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
+			break;
+
+		case JCS_CMYK:
+		case JCS_YCCK:
+			if (cinfo.num_components != 4)
+				error();
+//				ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
+			break;
+
+		default:			/* JCS_UNKNOWN can be anything */
+			if (cinfo.num_components < 1)
+				error();
+//				ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
+			break;
+	}
+
+	/* Set out_color_components and conversion method based on requested space.
+	 * Also clear the component_needed flags for any unused components,
+	 * so that earlier pipeline stages can avoid useless computation.
+	 */
+
+	int ci;
+	switch (cinfo.out_color_space) {
+		case JCS_GRAYSCALE:
+			cinfo.out_color_components = 1;
+			if (cinfo.jpeg_color_space == JCS_GRAYSCALE || cinfo.jpeg_color_space == JCS_YCbCr) {
+				cconvert.color_convert = GRAYSCALE_CONVERT;
+				/* For color.grayscale conversion, only the Y (0) component is needed */
+				for (ci = 1; ci < cinfo.num_components; ci++)
+					cinfo.comp_info[ci].component_needed = false;
+			} else
+				error();
+//				ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
+			break;
+
+		case JCS_RGB:
+			cinfo.out_color_components = RGB_PIXELSIZE;
+			if (cinfo.jpeg_color_space == JCS_YCbCr) {
+				cconvert.color_convert = YCC_RGB_CONVERT;
+				build_ycc_rgb_table(cinfo);
+			} else if (cinfo.jpeg_color_space == JCS_GRAYSCALE) {
+				cconvert.color_convert = GRAY_RGB_CONVERT;
+			} else if (cinfo.jpeg_color_space == JCS_RGB) {
+				cconvert.color_convert = NULL_CONVERT;
+			} else
+				error();
+//				ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
+				break;
+
+		case JCS_CMYK:
+			cinfo.out_color_components = 4;
+			if (cinfo.jpeg_color_space == JCS_YCCK) {
+				cconvert.color_convert = YCCK_CMYK_CONVERT;
+				build_ycc_rgb_table(cinfo);
+			} else if (cinfo.jpeg_color_space == JCS_CMYK) {
+				cconvert.color_convert = NULL_CONVERT;
+			} else
+				error();
+//				ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
+			break;
+
+		default:
+			/* Permit null conversion to same output space */
+			if (cinfo.out_color_space == cinfo.jpeg_color_space) {
+				cinfo.out_color_components = cinfo.num_components;
+				cconvert.color_convert = NULL_CONVERT;
+			} else	/* unsupported non-null conversion */
+				error();
+//				ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
+			break;
+	}
+
+	if (cinfo.quantize_colors)
+		cinfo.output_components = 1; /* single colormapped output component */
+	else
+		cinfo.output_components = cinfo.out_color_components;
+}
+
+static void jinit_d_post_controller (jpeg_decompress_struct cinfo, boolean need_full_buffer) {
+	jpeg_d_post_controller post = cinfo.post = new jpeg_d_post_controller();
+//	post.pub.start_pass = start_pass_dpost;
+	post.whole_image = null;	/* flag for no virtual arrays */
+	post.buffer = null;		/* flag for no strip buffer */
+
+	/* Create the quantization buffer, if needed */
+	if (cinfo.quantize_colors) {
+		error(SWT.ERROR_NOT_IMPLEMENTED);
+//		/* The buffer strip height is max_v_samp_factor, which is typically
+//		 * an efficient number of rows for upsampling to return.
+//		 * (In the presence of output rescaling, we might want to be smarter?)
+//		 */
+//		post.strip_height = cinfo.max_v_samp_factor;
+//		if (need_full_buffer) {
+//			/* Two-pass color quantization: need full-image storage. */
+//			/* We round up the number of rows to a multiple of the strip height. */
+//#ifdef QUANT_2PASS_SUPPORTED
+//			post.whole_image = (*cinfo.mem.request_virt_sarray)
+//				((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE,
+//	 			cinfo.output_width * cinfo.out_color_components,
+//	 			(JDIMENSION) jround_up((long) cinfo.output_height,
+//				(long) post.strip_height),
+//	 post.strip_height);
+//#else
+//			ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
+//#endif /* QUANT_2PASS_SUPPORTED */
+//		} else {
+//			/* One-pass color quantization: just make a strip buffer. */
+//			post.buffer = (*cinfo.mem.alloc_sarray)
+//				((j_common_ptr) cinfo, JPOOL_IMAGE,
+//	 			cinfo.output_width * cinfo.out_color_components,
+//	 			post.strip_height);
+//		}
+	}
+}
+
+static void make_funny_pointers (jpeg_decompress_struct cinfo)
+/* Create the funny pointer lists discussed in the comments above.
+ * The actual workspace is already allocated (in main.buffer),
+ * and the space for the pointer lists is allocated too.
+ * This routine just fills in the curiously ordered lists.
+ * This will be repeated at the beginning of each pass.
+ */
+{
+	jpeg_d_main_controller main = cinfo.main;
+	int ci, i, rgroup;
+	int M = cinfo.min_DCT_scaled_size;
+	jpeg_component_info compptr;
+	byte[][] buf, xbuf0, xbuf1;
+	
+	for (ci = 0; ci < cinfo.num_components; ci++) {
+		compptr = cinfo.comp_info[ci];
+		rgroup = (compptr.v_samp_factor * compptr.DCT_scaled_size) /
+			cinfo.min_DCT_scaled_size; /* height of a row group of component */
+		xbuf0 = main.xbuffer[0][ci];
+		int xbuf0_offset = main.xbuffer_offset[0][ci];
+		xbuf1 = main.xbuffer[1][ci];
+		int xbuf1_offset = main.xbuffer_offset[1][ci];
+		/* First copy the workspace pointers as-is */
+		buf = main.buffer[ci];
+		for (i = 0; i < rgroup * (M + 2); i++) {
+			xbuf0[i + xbuf0_offset] = xbuf1[i + xbuf1_offset] = buf[i];
+		}
+		/* In the second list, put the last four row groups in swapped order */
+		for (i = 0; i < rgroup * 2; i++) {
+			xbuf1[rgroup*(M-2) + i + xbuf1_offset] = buf[rgroup*M + i];
+			xbuf1[rgroup*M + i + xbuf1_offset] = buf[rgroup*(M-2) + i];
+		}
+		/* The wraparound pointers at top and bottom will be filled later
+		 * (see set_wraparound_pointers, below).	Initially we want the "above"
+		 * pointers to duplicate the first actual data line.	This only needs
+		 * to happen in xbuffer[0].
+		 */
+		for (i = 0; i < rgroup; i++) {
+			xbuf0[i - rgroup + xbuf0_offset] = xbuf0[0 + xbuf0_offset];
+		}
+	}
+}
+
+static void alloc_funny_pointers (jpeg_decompress_struct cinfo)
+/* Allocate space for the funny pointer lists.
+ * This is done only once, not once per pass.
+ */
+{
+	jpeg_d_main_controller main = cinfo.main;
+	int ci, rgroup;
+	int M = cinfo.min_DCT_scaled_size;
+	jpeg_component_info compptr;
+	byte[][] xbuf;
+
+	/* Get top-level space for component array pointers.
+	 * We alloc both arrays with one call to save a few cycles.
+	 */
+	main.xbuffer[0] = new byte[cinfo.num_components][][];
+	main.xbuffer[1] = new byte[cinfo.num_components][][];
+	main.xbuffer_offset[0] = new int[cinfo.num_components];
+	main.xbuffer_offset[1] = new int[cinfo.num_components];
+
+	for (ci = 0; ci < cinfo.num_components; ci++) {
+		compptr = cinfo.comp_info[ci];
+		rgroup = (compptr.v_samp_factor * compptr.DCT_scaled_size) / cinfo.min_DCT_scaled_size; /* height of a row group of component */
+		/* Get space for pointer lists --- M+4 row groups in each list.
+		 * We alloc both pointer lists with one call to save a few cycles.
+		 */
+		xbuf = new byte[2 * (rgroup * (M + 4))][];
+		int offset = rgroup;
+		main.xbuffer_offset[0][ci] = offset;
+		main.xbuffer[0][ci] = xbuf;
+		offset += rgroup * (M + 4);
+		main.xbuffer_offset[1][ci] = offset;
+		main.xbuffer[1][ci] = xbuf;
+	}
+}
+
+
+static void jinit_d_main_controller (jpeg_decompress_struct cinfo, boolean need_full_buffer) {
+	int ci, rgroup, ngroups;
+	jpeg_component_info compptr;
+
+	jpeg_d_main_controller main = cinfo.main = new jpeg_d_main_controller();
+//	main.pub.start_pass = start_pass_main;
+
+	if (need_full_buffer)		/* shouldn't happen */
+		error();
+//		ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
+
+	/* Allocate the workspace.
+	 * ngroups is the number of row groups we need.
+	 */
+	if (cinfo.upsample.need_context_rows) {
+		if (cinfo.min_DCT_scaled_size < 2) /* unsupported, see comments above */
+			error();
+//			ERREXIT(cinfo, JERR_NOTIMPL);
+		alloc_funny_pointers(cinfo); /* Alloc space for xbuffer[] lists */
+		ngroups = cinfo.min_DCT_scaled_size + 2;
+	} else {
+		ngroups = cinfo.min_DCT_scaled_size;
+	}
+
+	for (ci = 0; ci < cinfo.num_components; ci++) {
+		compptr = cinfo.comp_info[ci];
+		rgroup = (compptr.v_samp_factor * compptr.DCT_scaled_size) / cinfo.min_DCT_scaled_size; /* height of a row group of component */
+		main.buffer[ci] = new byte[rgroup * ngroups][compptr.width_in_blocks * compptr.DCT_scaled_size];
+	}
+}
+
+static long jround_up (long a, long b)
+/* Compute a rounded up to next multiple of b, ie, ceil(a/b)*b */
+/* Assumes a >= 0, b > 0 */
+{
+	a += b - 1L;
+	return a - (a % b);
+}
+
+static void jinit_upsampler (jpeg_decompress_struct cinfo) {
+	int ci;
+	jpeg_component_info compptr;
+	boolean need_buffer, do_fancy;
+	int h_in_group, v_in_group, h_out_group, v_out_group;
+
+	jpeg_upsampler upsample = new jpeg_upsampler();
+	cinfo.upsample = upsample;
+//	upsample.start_pass = start_pass_upsample;
+//	upsample.upsample = sep_upsample;
+	upsample.need_context_rows = false; /* until we find out differently */
+
+	if (cinfo.CCIR601_sampling)	/* this isn't supported */
+		error();
+//		ERREXIT(cinfo, JERR_CCIR601_NOTIMPL);
+
+	/* jdmainct.c doesn't support context rows when min_DCT_scaled_size = 1,
+	 * so don't ask for it.
+	 */
+	do_fancy = cinfo.do_fancy_upsampling && cinfo.min_DCT_scaled_size > 1;
+
+	/* Verify we can handle the sampling factors, select per-component methods,
+	 * and create storage as needed.
+	 */
+	for (ci = 0; ci < cinfo.num_components; ci++) {
+		compptr = cinfo.comp_info[ci];
+		/* Compute size of an "input group" after IDCT scaling.	This many samples
+		 * are to be converted to max_h_samp_factor * max_v_samp_factor pixels.
+		 */
+		h_in_group = (compptr.h_samp_factor * compptr.DCT_scaled_size) /
+		 cinfo.min_DCT_scaled_size;
+		v_in_group = (compptr.v_samp_factor * compptr.DCT_scaled_size) /
+		 cinfo.min_DCT_scaled_size;
+		h_out_group = cinfo.max_h_samp_factor;
+		v_out_group = cinfo.max_v_samp_factor;
+		upsample.rowgroup_height[ci] = v_in_group; /* save for use later */
+		need_buffer = true;
+		if (! compptr.component_needed) {
+			/* Don't bother to upsample an uninteresting component. */
+			upsample.methods[ci] = NOOP_UPSAMPLE;
+			need_buffer = false;
+		} else if (h_in_group == h_out_group && v_in_group == v_out_group) {
+			/* Fullsize components can be processed without any work. */
+			upsample.methods[ci] = FULLSIZE_UPSAMPLE;
+			need_buffer = false;
+		} else if (h_in_group * 2 == h_out_group && v_in_group == v_out_group) {
+			/* Special cases for 2h1v upsampling */
+			if (do_fancy && compptr.downsampled_width > 2)
+				upsample.methods[ci] = H2V1_FANCY_UPSAMPLE;
+			else
+				upsample.methods[ci] = H2V1_UPSAMPLE;
+		} else if (h_in_group * 2 == h_out_group && v_in_group * 2 == v_out_group) {
+			/* Special cases for 2h2v upsampling */
+			if (do_fancy && compptr.downsampled_width > 2) {
+				upsample.methods[ci] = H2V2_FANCY_UPSAMPLE;
+				upsample.need_context_rows = true;
+			} else
+				upsample.methods[ci] = H2V2_UPSAMPLE;
+		} else if ((h_out_group % h_in_group) == 0 && (v_out_group % v_in_group) == 0) {
+			/* Generic integral-factors upsampling method */
+			upsample.methods[ci] = INT_UPSAMPLE;
+			upsample.h_expand[ci] = (byte) (h_out_group / h_in_group);
+			upsample.v_expand[ci] = (byte) (v_out_group / v_in_group);
+		} else
+			error();
+//			ERREXIT(cinfo, JERR_FRACT_SAMPLE_NOTIMPL);
+		if (need_buffer) {
+			upsample.color_buf[ci] = new byte[cinfo.max_v_samp_factor]
+						 [(int) jround_up(cinfo.output_width, cinfo.max_h_samp_factor)];
+		}
+	}
+}
+
+static void jinit_phuff_decoder (jpeg_decompress_struct cinfo) {
+	int[][] coef_bit_ptr;
+	int ci, i;
+
+	cinfo.entropy = new phuff_entropy_decoder();
+//	entropy.pub.start_pass = start_pass_phuff_decoder;
+
+	/* Create progression status table */
+	cinfo.coef_bits = new int[cinfo.num_components][DCTSIZE2];
+	coef_bit_ptr = cinfo.coef_bits;
+	for (ci = 0; ci < cinfo.num_components; ci++) 
+		for (i = 0; i < DCTSIZE2; i++)
+			coef_bit_ptr[ci][i] = -1;
+}
+
+
+static void jinit_huff_decoder (jpeg_decompress_struct cinfo) {
+
+	cinfo.entropy = new huff_entropy_decoder();
+//	entropy.pub.start_pass = start_pass_huff_decoder;
+//	entropy.pub.decode_mcu = decode_mcu;
+
+}
+
+static void jinit_inverse_dct (jpeg_decompress_struct cinfo) {
+	int ci;
+	jpeg_component_info compptr;
+
+	jpeg_inverse_dct idct = cinfo.idct = new jpeg_inverse_dct();
+//	idct.pub.start_pass = start_pass;
+
+	for (ci = 0; ci < cinfo.num_components; ci++) {
+		compptr = cinfo.comp_info[ci];
+		/* Allocate and pre-zero a multiplier table for each component */
+		compptr.dct_table = new int[DCTSIZE2];
+		/* Mark multiplier table not yet set up for any method */
+		idct.cur_method[ci] = -1;
+	}
+}
+
+static final int CONST_BITS = 13;
+static final int PASS1_BITS = 2;
+static final int RANGE_MASK =(MAXJSAMPLE * 4 + 3);
+static void jpeg_idct_islow (jpeg_decompress_struct cinfo, jpeg_component_info compptr,
+	short[] coef_block,
+	byte[][] output_buf, int output_buf_offset, int output_col)
+{
+	int tmp0, tmp1, tmp2, tmp3;
+	int tmp10, tmp11, tmp12, tmp13;
+	int z1, z2, z3, z4, z5;
+	short[] inptr;
+	int[] quantptr;
+	int[] wsptr;
+	byte[] outptr;
+	byte[] range_limit = cinfo.sample_range_limit;
+	int range_limit_offset = cinfo.sample_range_limit_offset + CENTERJSAMPLE;
+	int ctr;
+	int[] workspace = cinfo.workspace;	/* buffers data between passes */
+//	SHIFT_TEMPS
+	
+	/* Pass 1: process columns from input, store into work array. */
+	/* Note results are scaled up by sqrt(8) compared to a true IDCT; */
+	/* furthermore, we scale the results by 2**PASS1_BITS. */
+	
+	inptr = coef_block;
+	quantptr = compptr.dct_table;
+	wsptr = workspace;
+	int inptr_offset = 0, quantptr_offset = 0, wsptr_offset = 0;
+	for (ctr = DCTSIZE; ctr > 0; ctr--) {
+		/* Due to quantization, we will usually find that many of the input
+		 * coefficients are zero, especially the AC terms.	We can exploit this
+		 * by short-circuiting the IDCT calculation for any column in which all
+		 * the AC terms are zero.	In that case each output is equal to the
+		 * DC coefficient (with scale factor as needed).
+		 * With typical images and quantization tables, half or more of the
+		 * column DCT calculations can be simplified this way.
+		 */
+		
+		if (inptr[DCTSIZE*1+inptr_offset] == 0 && inptr[DCTSIZE*2+inptr_offset] == 0 &&
+			inptr[DCTSIZE*3+inptr_offset] == 0 && inptr[DCTSIZE*4+inptr_offset] == 0 &&
+			inptr[DCTSIZE*5+inptr_offset] == 0 && inptr[DCTSIZE*6+inptr_offset] == 0 &&
+			inptr[DCTSIZE*7+inptr_offset] == 0)
+		{
+			/* AC terms all zero */
+			int dcval = ((inptr[DCTSIZE*0+inptr_offset]) * quantptr[DCTSIZE*0+quantptr_offset]) << PASS1_BITS;
+			
+			wsptr[DCTSIZE*0+wsptr_offset] = dcval;
+			wsptr[DCTSIZE*1+wsptr_offset] = dcval;
+			wsptr[DCTSIZE*2+wsptr_offset] = dcval;
+			wsptr[DCTSIZE*3+wsptr_offset] = dcval;
+			wsptr[DCTSIZE*4+wsptr_offset] = dcval;
+			wsptr[DCTSIZE*5+wsptr_offset] = dcval;
+			wsptr[DCTSIZE*6+wsptr_offset] = dcval;
+			wsptr[DCTSIZE*7+wsptr_offset] = dcval;
+			
+			inptr_offset++;			/* advance pointers to next column */
+			quantptr_offset++;
+			wsptr_offset++;
+			continue;
+		}
+		
+		/* Even part: reverse the even part of the forward DCT. */
+		/* The rotator is sqrt(2)*c(-6). */
+		
+		z2 = ((inptr[DCTSIZE*2+inptr_offset]) * quantptr[DCTSIZE*2+quantptr_offset]);
+		z3 = ((inptr[DCTSIZE*6+inptr_offset]) * quantptr[DCTSIZE*6+quantptr_offset]);
+		
+		z1 = ((z2 + z3) * 4433/*FIX_0_541196100*/);
+		tmp2 = z1 + (z3 * - 15137/*FIX_1_847759065*/);
+		tmp3 = z1 + (z2 * 6270/*FIX_0_765366865*/);
+		
+		z2 = ((inptr[DCTSIZE*0+inptr_offset]) * quantptr[DCTSIZE*0+quantptr_offset]);
+		z3 = ((inptr[DCTSIZE*4+inptr_offset]) * quantptr[DCTSIZE*4+quantptr_offset]);
+
+		tmp0 = (z2 + z3) << CONST_BITS;
+		tmp1 = (z2 - z3) << CONST_BITS;
+		
+		tmp10 = tmp0 + tmp3;
+		tmp13 = tmp0 - tmp3;
+		tmp11 = tmp1 + tmp2;
+		tmp12 = tmp1 - tmp2;
+		
+		/* Odd part per figure 8; the matrix is unitary and hence its
+		 * transpose is its inverse.	i0..i3 are y7,y5,y3,y1 respectively.
+		 */
+		
+		tmp0 = ((inptr[DCTSIZE*7+inptr_offset]) * quantptr[DCTSIZE*7+quantptr_offset]);
+		tmp1 = ((inptr[DCTSIZE*5+inptr_offset]) * quantptr[DCTSIZE*5+quantptr_offset]);
+		tmp2 = ((inptr[DCTSIZE*3+inptr_offset]) * quantptr[DCTSIZE*3+quantptr_offset]);
+		tmp3 = ((inptr[DCTSIZE*1+inptr_offset]) * quantptr[DCTSIZE*1+quantptr_offset]);
+		
+		z1 = tmp0 + tmp3;
+		z2 = tmp1 + tmp2;
+		z3 = tmp0 + tmp2;
+		z4 = tmp1 + tmp3;
+		z5 = ((z3 + z4) * 9633/*FIX_1_175875602*/); /* sqrt(2) * c3 */
+		
+		tmp0 = (tmp0 * 2446/*FIX_0_298631336*/); /* sqrt(2) * (-c1+c3+c5-c7) */
+		tmp1 = (tmp1 * 16819/*FIX_2_053119869*/); /* sqrt(2) * ( c1+c3-c5+c7) */
+		tmp2 = (tmp2 * 25172/*FIX_3_072711026*/); /* sqrt(2) * ( c1+c3+c5-c7) */
+		tmp3 = (tmp3 * 12299/*FIX_1_501321110*/); /* sqrt(2) * ( c1+c3-c5-c7) */
+		z1 = (z1 * - 7373/*FIX_0_899976223*/); /* sqrt(2) * (c7-c3) */
+		z2 = (z2 * - 20995/*FIX_2_562915447*/); /* sqrt(2) * (-c1-c3) */
+		z3 = (z3 * - 16069/*FIX_1_961570560*/); /* sqrt(2) * (-c3-c5) */
+		z4 = (z4 * - 3196/*FIX_0_390180644*/); /* sqrt(2) * (c5-c3) */
+		
+		z3 += z5;
+		z4 += z5;
+		
+		tmp0 += z1 + z3;
+		tmp1 += z2 + z4;
+		tmp2 += z2 + z3;
+		tmp3 += z1 + z4;
+		
+		/* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */
+		
+//		#define DESCALE(x,n)	RIGHT_SHIFT((x) + (ONE << ((n)-1)), n)
+		wsptr[DCTSIZE*0+wsptr_offset] = (((tmp10 + tmp3) + (1 << ((CONST_BITS-PASS1_BITS)-1))) >> (CONST_BITS-PASS1_BITS));
+		wsptr[DCTSIZE*7+wsptr_offset] = (((tmp10 - tmp3) + (1 << ((CONST_BITS-PASS1_BITS)-1))) >> (CONST_BITS-PASS1_BITS));
+		wsptr[DCTSIZE*1+wsptr_offset] = (((tmp11 + tmp2) + (1 << ((CONST_BITS-PASS1_BITS)-1))) >> (CONST_BITS-PASS1_BITS));
+		wsptr[DCTSIZE*6+wsptr_offset] = (((tmp11 - tmp2) + (1 << ((CONST_BITS-PASS1_BITS)-1))) >> (CONST_BITS-PASS1_BITS));
+		wsptr[DCTSIZE*2+wsptr_offset] = (((tmp12 + tmp1) + (1 << ((CONST_BITS-PASS1_BITS)-1))) >> (CONST_BITS-PASS1_BITS));
+		wsptr[DCTSIZE*5+wsptr_offset] = (((tmp12 - tmp1) + (1 << ((CONST_BITS-PASS1_BITS)-1))) >> (CONST_BITS-PASS1_BITS));
+		wsptr[DCTSIZE*3+wsptr_offset] = (((tmp13 + tmp0) + (1 << ((CONST_BITS-PASS1_BITS)-1))) >> (CONST_BITS-PASS1_BITS));
+		wsptr[DCTSIZE*4+wsptr_offset] = (((tmp13 - tmp0) + (1 << ((CONST_BITS-PASS1_BITS)-1))) >> (CONST_BITS-PASS1_BITS));
+		
+		inptr_offset++;			/* advance pointers to next column */
+		quantptr_offset++;
+		wsptr_offset++;
+	}
+
+	
+	/* Pass 2: process rows from work array, store into output array. */
+	/* Note that we must descale the results by a factor of 8 == 2**3, */
+	/* and also undo the PASS1_BITS scaling. */
+
+	int outptr_offset = 0;
+	wsptr = workspace;
+	wsptr_offset =0;
+	for (ctr = 0; ctr < DCTSIZE; ctr++) {
+		outptr = output_buf[ctr+output_buf_offset];
+		outptr_offset = output_col;
+		/* Rows of zeroes can be exploited in the same way as we did with columns.
+		 * However, the column calculation has created many nonzero AC terms, so
+		 * the simplification applies less often (typically 5% to 10% of the time).
+		 * On machines with very fast multiplication, it's possible that the
+		 * test takes more time than it's worth.	In that case this section
+		 * may be commented out.
+		 */
+		
+//#ifndef NO_ZERO_ROW_TEST
+		if (wsptr[1+wsptr_offset] == 0 && wsptr[2+wsptr_offset] == 0 && wsptr[3+wsptr_offset] == 0 && wsptr[4+wsptr_offset] == 0 &&
+			wsptr[5+wsptr_offset] == 0 && wsptr[6+wsptr_offset] == 0 && wsptr[7+wsptr_offset] == 0)
+		{
+			/* AC terms all zero */
+//			#define DESCALE(x,n)	RIGHT_SHIFT((x) + (ONE << ((n)-1)), n)
+			byte dcval = range_limit[range_limit_offset + ((((wsptr[0+wsptr_offset]) + (1 << ((PASS1_BITS+3)-1))) >> PASS1_BITS+3)
+					& RANGE_MASK)];
+			
+			outptr[0+outptr_offset] = dcval;
+			outptr[1+outptr_offset] = dcval;
+			outptr[2+outptr_offset] = dcval;
+			outptr[3+outptr_offset] = dcval;
+			outptr[4+outptr_offset] = dcval;
+			outptr[5+outptr_offset] = dcval;
+			outptr[6+outptr_offset] = dcval;
+			outptr[7+outptr_offset] = dcval;
+
+			wsptr_offset += DCTSIZE;		/* advance pointer to next row */
+			continue;
+		}
+//#endif
+		
+		/* Even part: reverse the even part of the forward DCT. */
+		/* The rotator is sqrt(2)*c(-6). */
+		
+		z2 = wsptr[2+wsptr_offset];
+		z3 = wsptr[6+wsptr_offset];
+		
+		z1 = ((z2 + z3) * 4433/*FIX_0_541196100*/);
+		tmp2 = z1 + (z3 * - 15137/*FIX_1_847759065*/);
+		tmp3 = z1 + (z2 * 6270/*FIX_0_765366865*/);
+		
+		tmp0 = (wsptr[0+wsptr_offset] + wsptr[4+wsptr_offset]) << CONST_BITS;
+		tmp1 = (wsptr[0+wsptr_offset] - wsptr[4+wsptr_offset]) << CONST_BITS;
+		
+		tmp10 = tmp0 + tmp3;
+		tmp13 = tmp0 - tmp3;
+		tmp11 = tmp1 + tmp2;
+		tmp12 = tmp1 - tmp2;
+		
+		/* Odd part per figure 8; the matrix is unitary and hence its
+		 * transpose is its inverse.	i0..i3 are y7,y5,y3,y1 respectively.
+		 */
+		
+		tmp0 = wsptr[7+wsptr_offset];
+		tmp1 = wsptr[5+wsptr_offset];
+		tmp2 = wsptr[3+wsptr_offset];
+		tmp3 = wsptr[1+wsptr_offset];
+		
+		z1 = tmp0 + tmp3;
+		z2 = tmp1 + tmp2;
+		z3 = tmp0 + tmp2;
+		z4 = tmp1 + tmp3;
+		z5 = ((z3 + z4) * 9633/*FIX_1_175875602*/); /* sqrt(2) * c3 */
+		
+		tmp0 = (tmp0 * 2446/*FIX_0_298631336*/); /* sqrt(2) * (-c1+c3+c5-c7) */
+		tmp1 = (tmp1 * 16819/*FIX_2_053119869*/); /* sqrt(2) * ( c1+c3-c5+c7) */
+		tmp2 = (tmp2 * 25172/*FIX_3_072711026*/); /* sqrt(2) * ( c1+c3+c5-c7) */
+		tmp3 = (tmp3 * 12299/*FIX_1_501321110*/); /* sqrt(2) * ( c1+c3-c5-c7) */
+		z1 = (z1 * - 7373/*FIX_0_899976223*/); /* sqrt(2) * (c7-c3) */
+		z2 = (z2 * - 20995/*FIX_2_562915447*/); /* sqrt(2) * (-c1-c3) */
+		z3 = (z3 * - 16069/*FIX_1_961570560*/); /* sqrt(2) * (-c3-c5) */
+		z4 = (z4 * - 3196/*FIX_0_390180644*/); /* sqrt(2) * (c5-c3) */
+		
+		z3 += z5;
+		z4 += z5;
+		
+		tmp0 += z1 + z3;
+		tmp1 += z2 + z4;
+		tmp2 += z2 + z3;
+		tmp3 += z1 + z4;
+		
+		/* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */
+		
+
+//		#define DESCALE(x,n)	RIGHT_SHIFT((x) + (ONE << ((n)-1)), n)
+		outptr[0+outptr_offset] = range_limit[range_limit_offset + ((((tmp10 + tmp3) + (1 << ((CONST_BITS+PASS1_BITS+3)-1))) >>
+						CONST_BITS+PASS1_BITS+3)
+					& RANGE_MASK)];
+		outptr[7+outptr_offset] = range_limit[range_limit_offset + ((((tmp10 - tmp3) + (1 << ((CONST_BITS+PASS1_BITS+3)-1))) >>
+									CONST_BITS+PASS1_BITS+3)
+					& RANGE_MASK)];
+		outptr[1+outptr_offset] = range_limit[range_limit_offset + ((((tmp11 + tmp2) + (1 << ((CONST_BITS+PASS1_BITS+3)-1))) >>
+									CONST_BITS+PASS1_BITS+3)
+					& RANGE_MASK)];
+		outptr[6+outptr_offset] = range_limit[range_limit_offset + ((((tmp11 - tmp2) + (1 << ((CONST_BITS+PASS1_BITS+3)-1))) >>
+									CONST_BITS+PASS1_BITS+3)
+					& RANGE_MASK)];
+		outptr[2+outptr_offset] = range_limit[range_limit_offset + ((((tmp12 + tmp1) + (1 << ((CONST_BITS+PASS1_BITS+3)-1))) >>
+									CONST_BITS+PASS1_BITS+3)
+					& RANGE_MASK)];
+		outptr[5+outptr_offset] = range_limit[range_limit_offset + ((((tmp12 - tmp1) + (1 << ((CONST_BITS+PASS1_BITS+3)-1))) >>
+									CONST_BITS+PASS1_BITS+3)
+					& RANGE_MASK)];
+		outptr[3+outptr_offset] = range_limit[range_limit_offset + ((((tmp13 + tmp0) + (1 << ((CONST_BITS+PASS1_BITS+3)-1))) >>
+									CONST_BITS+PASS1_BITS+3)
+					& RANGE_MASK)];
+		outptr[4+outptr_offset] = range_limit[range_limit_offset + ((((tmp13 - tmp0) + (1 << ((CONST_BITS+PASS1_BITS+3)-1))) >>
+									CONST_BITS+PASS1_BITS+3)
+					& RANGE_MASK)];
+
+		wsptr_offset += DCTSIZE;		/* advance pointer to next row */
+	}
+}
+
+static void upsample (jpeg_decompress_struct cinfo,
+	byte[][][] input_buf, int[] input_buf_offset, int[] in_row_group_ctr,
+	int in_row_groups_avail,
+	byte[][] output_buf, int[] out_row_ctr,
+	int out_rows_avail)
+{
+	sep_upsample(cinfo, input_buf, input_buf_offset, in_row_group_ctr, in_row_groups_avail, output_buf, out_row_ctr, out_rows_avail);
+}
+
+static boolean smoothing_ok (jpeg_decompress_struct cinfo) {
+	jpeg_d_coef_controller coef = cinfo.coef;
+	boolean smoothing_useful = false;
+	int ci, coefi;
+	jpeg_component_info compptr;
+	JQUANT_TBL qtable;
+	int[] coef_bits;
+	int[] coef_bits_latch;
+
+	if (! cinfo.progressive_mode || cinfo.coef_bits == null)
+		return false;
+
+	/* Allocate latch area if not already done */
+	if (coef.coef_bits_latch == null)
+		coef.coef_bits_latch = new int[cinfo.num_components * SAVED_COEFS];
+	coef_bits_latch = coef.coef_bits_latch;
+	int coef_bits_latch_offset = 0;
+
+	for (ci = 0; ci < cinfo.num_components; ci++) {
+		compptr = cinfo.comp_info[ci];
+		/* All components' quantization values must already be latched. */
+		if ((qtable = compptr.quant_table) == null)
+			return false;
+		/* Verify DC & first 5 AC quantizers are nonzero to avoid zero-divide. */
+		if (qtable.quantval[0] == 0 ||
+			qtable.quantval[Q01_POS] == 0 ||
+			qtable.quantval[Q10_POS] == 0 ||
+			qtable.quantval[Q20_POS] == 0 ||
+			qtable.quantval[Q11_POS] == 0 ||
+			qtable.quantval[Q02_POS] == 0)
+				return false;
+		/* DC values must be at least partly known for all components. */
+		coef_bits = cinfo.coef_bits[ci];
+		if (coef_bits[0] < 0)
+			return false;
+		/* Block smoothing is helpful if some AC coefficients remain inaccurate. */
+		for (coefi = 1; coefi <= 5; coefi++) {
+			coef_bits_latch[coefi+coef_bits_latch_offset] = coef_bits[coefi];
+			if (coef_bits[coefi] != 0)
+				smoothing_useful = true;
+		}
+		coef_bits_latch_offset += SAVED_COEFS;
+	}
+
+	return smoothing_useful;
+}
+
+static void master_selection (jpeg_decompress_struct cinfo) {
+	jpeg_decomp_master master = cinfo.master;
+	boolean use_c_buffer;
+	long samplesperrow;
+	int jd_samplesperrow;
+
+	/* Initialize dimensions and other stuff */
+	jpeg_calc_output_dimensions(cinfo);
+	prepare_range_limit_table(cinfo);
+
+	/* Width of an output scanline must be representable as JDIMENSION. */
+	samplesperrow = (long) cinfo.output_width * (long) cinfo.out_color_components;
+	jd_samplesperrow = (int) samplesperrow;
+	if ( jd_samplesperrow != samplesperrow)
+		error();
+//		ERREXIT(cinfo, JERR_WIDTH_OVERFLOW);
+
+	/* Initialize my private state */
+	master.pass_number = 0;
+	master.using_merged_upsample = use_merged_upsample(cinfo);
+
+	/* Color quantizer selection */
+	master.quantizer_1pass = null;
+	master.quantizer_2pass = null;
+	/* No mode changes if not using buffered-image mode. */
+	if (! cinfo.quantize_colors || ! cinfo.buffered_image) {
+		cinfo.enable_1pass_quant = false;
+		cinfo.enable_external_quant = false;
+		cinfo.enable_2pass_quant = false;
+	}
+	if (cinfo.quantize_colors) {
+		error(SWT.ERROR_NOT_IMPLEMENTED);
+//		if (cinfo.raw_data_out)
+//			ERREXIT(cinfo, JERR_NOTIMPL);
+//		/* 2-pass quantizer only works in 3-component color space. */
+//		if (cinfo.out_color_components != 3) {
+//			cinfo.enable_1pass_quant = true;
+//			cinfo.enable_external_quant = false;
+//			cinfo.enable_2pass_quant = false;
+//			cinfo.colormap = null;
+//		} else if (cinfo.colormap != null) {
+//			cinfo.enable_external_quant = true;
+//		} else if (cinfo.two_pass_quantize) {
+//			cinfo.enable_2pass_quant = true;
+//		} else {
+//			cinfo.enable_1pass_quant = true;
+//		}
+//
+//		if (cinfo.enable_1pass_quant) {
+//#ifdef QUANT_1PASS_SUPPORTED
+//			jinit_1pass_quantizer(cinfo);
+//			master.quantizer_1pass = cinfo.cquantize;
+//#else
+//			ERREXIT(cinfo, JERR_NOT_COMPILED);
+//#endif
+//		}
+//
+//		/* We use the 2-pass code to map to external colormaps. */
+//		if (cinfo.enable_2pass_quant || cinfo.enable_external_quant) {
+//#ifdef QUANT_2PASS_SUPPORTED
+//			jinit_2pass_quantizer(cinfo);
+//			master.quantizer_2pass = cinfo.cquantize;
+//#else
+//			ERREXIT(cinfo, JERR_NOT_COMPILED);
+//#endif
+//		}
+//		/* If both quantizers are initialized, the 2-pass one is left active;
+//		 * this is necessary for starting with quantization to an external map.
+//		 */
+	}
+
+	/* Post-processing: in particular, color conversion first */
+	if (! cinfo.raw_data_out) {
+		if (master.using_merged_upsample) {
+//#ifdef UPSAMPLE_MERGING_SUPPORTED
+//			jinit_merged_upsampler(cinfo); /* does color conversion too */
+//#else
+			error();
+//			ERREXIT(cinfo, JERR_NOT_COMPILED);
+//#endif
+		} else {
+			jinit_color_deconverter(cinfo);
+			jinit_upsampler(cinfo);
+		}
+		jinit_d_post_controller(cinfo, cinfo.enable_2pass_quant);
+	}
+	/* Inverse DCT */
+	jinit_inverse_dct(cinfo);
+	/* Entropy decoding: either Huffman or arithmetic coding. */
+	if (cinfo.arith_code) {
+		error();
+//		ERREXIT(cinfo, JERR_ARITH_NOTIMPL);
+	} else {
+		if (cinfo.progressive_mode) {
+//#ifdef D_PROGRESSIVE_SUPPORTED
+			jinit_phuff_decoder(cinfo);
+//#else
+//			ERREXIT(cinfo, JERR_NOT_COMPILED);
+//#endif
+		} else
+			jinit_huff_decoder(cinfo);
+	}
+
+	/* Initialize principal buffer controllers. */
+	use_c_buffer = cinfo.inputctl.has_multiple_scans || cinfo.buffered_image;
+	jinit_d_coef_controller(cinfo, use_c_buffer);
+
+	if (! cinfo.raw_data_out)
+		jinit_d_main_controller(cinfo, false /* never need full buffer here */);
+
+	/* Initialize input side of decompressor to consume first scan. */
+	start_input_pass (cinfo);
+
+//#ifdef D_MULTISCAN_FILES_SUPPORTED
+	/* If jpeg_start_decompress will read the whole file, initialize
+	 * progress monitoring appropriately.	The input step is counted
+	 * as one pass.
+	 */
+//	if (cinfo.progress != null && ! cinfo.buffered_image &&
+//			cinfo.inputctl.has_multiple_scans) {
+//		int nscans;
+//		/* Estimate number of scans to set pass_limit. */
+//		if (cinfo.progressive_mode) {
+//			/* Arbitrarily estimate 2 interleaved DC scans + 3 AC scans/component. */
+//			nscans = 2 + 3 * cinfo.num_components;
+//		} else {
+//			/* For a nonprogressive multiscan file, estimate 1 scan per component. */
+//			nscans = cinfo.num_components;
+//		}
+//		cinfo.progress.pass_counter = 0L;
+//		cinfo.progress.pass_limit = (long) cinfo.total_iMCU_rows * nscans;
+//		cinfo.progress.completed_passes = 0;
+//		cinfo.progress.total_passes = (cinfo.enable_2pass_quant ? 3 : 2);
+//		/* Count the input pass as done */
+//		master.pass_number++;
+//	}
+//#endif /* D_MULTISCAN_FILES_SUPPORTED */
+}
+
+static void jinit_master_decompress (jpeg_decompress_struct cinfo) {
+	jpeg_decomp_master master = new jpeg_decomp_master();
+	cinfo.master = master;
+//	master.prepare_for_output_pass = prepare_for_output_pass;
+//	master.finish_output_pass = finish_output_pass;
+
+	master.is_dummy_pass = false;
+
+	master_selection(cinfo);
+}
+
+static void
+jcopy_sample_rows (byte[][] input_array, int source_row,
+		   byte[][] output_array, int dest_row,
+		   int num_rows, int num_cols)
+/* Copy some rows of samples from one place to another.
+ * num_rows rows are copied from input_array[source_row++]
+ * to output_array[dest_row++]; these areas may overlap for duplication.
+ * The source and destination arrays must be at least as wide as num_cols.
+ */
+{
+  byte[] inptr, outptr;
+  int count = num_cols;
+  int row;
+
+  int input_array_offset = source_row;
+  int output_array_offset = dest_row;
+
+  for (row = num_rows; row > 0; row--) {
+    inptr = input_array[input_array_offset++];
+    outptr = output_array[output_array_offset++];
+    System.arraycopy(inptr, 0, outptr, 0, count);
+  }
+}
+
+static boolean jpeg_start_decompress (jpeg_decompress_struct cinfo) {
+	if (cinfo.global_state == DSTATE_READY) {
+		/* First call: initialize master control, select active modules */
+		jinit_master_decompress(cinfo);
+		if (cinfo.buffered_image) {
+			/* No more work here; expecting jpeg_start_output next */
+			cinfo.global_state = DSTATE_BUFIMAGE;
+			return true;
+		}
+		cinfo.global_state = DSTATE_PRELOAD;
+	}
+	if (cinfo.global_state == DSTATE_PRELOAD) {
+		/* If file has multiple scans, absorb them all into the coef buffer */
+		if (cinfo.inputctl.has_multiple_scans) {
+//#ifdef D_MULTISCAN_FILES_SUPPORTED
+			for (;;) {
+				int retcode;
+				/* Call progress monitor hook if present */
+//				if (cinfo.progress != null)
+//					(*cinfo.progress.progress_monitor) ((j_common_ptr) cinfo);
+				/* Absorb some more input */
+				retcode = consume_input (cinfo);
+				if (retcode == JPEG_SUSPENDED)
+					return false;
+				if (retcode == JPEG_REACHED_EOI)
+					break;
+				/* Advance progress counter if appropriate */
+//				if (cinfo.progress != null && (retcode == JPEG_ROW_COMPLETED || retcode == JPEG_REACHED_SOS)) {
+//					if (++cinfo.progress.pass_counter >= cinfo.progress.pass_limit) {
+//						/* jdmaster underestimated number of scans; ratchet up one scan */
+//						cinfo.progress.pass_limit += (long) cinfo.total_iMCU_rows;
+//					}
+//				}
+			}
+//#else
+//			ERREXIT(cinfo, JERR_NOT_COMPILED);
+//#endif /* D_MULTISCAN_FILES_SUPPORTED */
+		}
+		cinfo.output_scan_number = cinfo.input_scan_number;
+	} else if (cinfo.global_state != DSTATE_PRESCAN)
+		error();
+//		ERREXIT1(cinfo, JERR_BAD_STATE, cinfo.global_state);
+	/* Perform any dummy output passes, and set up for the final pass */
+	return output_pass_setup(cinfo);
+}
+
+static void prepare_for_output_pass (jpeg_decompress_struct cinfo) {
+	jpeg_decomp_master master = cinfo.master;
+
+	if (master.is_dummy_pass) {
+//#ifdef QUANT_2PASS_SUPPORTED
+//		/* Final pass of 2-pass quantization */
+//		master.pub.is_dummy_pass = FALSE;
+//		(*cinfo.cquantize.start_pass) (cinfo, FALSE);
+//		(*cinfo.post.start_pass) (cinfo, JBUF_CRANK_DEST);
+//		(*cinfo.main.start_pass) (cinfo, JBUF_CRANK_DEST);
+//#else
+		error(SWT.ERROR_NOT_IMPLEMENTED);
+//		ERREXIT(cinfo, JERR_NOT_COMPILED);
+//#endif /* QUANT_2PASS_SUPPORTED */
+	} else {
+		if (cinfo.quantize_colors && cinfo.colormap == null) {
+			/* Select new quantization method */
+			if (cinfo.two_pass_quantize && cinfo.enable_2pass_quant) {
+				cinfo.cquantize = master.quantizer_2pass;
+				master.is_dummy_pass = true;
+			} else if (cinfo.enable_1pass_quant) {
+				cinfo.cquantize = master.quantizer_1pass;
+			} else {
+				error();
+//	ERREXIT(cinfo, JERR_MODE_CHANGE);
+			}
+		}
+		cinfo.idct.start_pass (cinfo);
+		start_output_pass (cinfo);
+		if (! cinfo.raw_data_out) {
+			if (! master.using_merged_upsample)
+				cinfo.cconvert.start_pass (cinfo);
+			cinfo.upsample.start_pass (cinfo);
+			if (cinfo.quantize_colors) 
+				cinfo.cquantize.start_pass (cinfo, master.is_dummy_pass);
+			cinfo.post.start_pass (cinfo, (master.is_dummy_pass ? JBUF_SAVE_AND_PASS : JBUF_PASS_THRU));
+			cinfo.main.start_pass (cinfo, JBUF_PASS_THRU);
+		}
+	}
+
+//	/* Set up progress monitor's pass info if present */
+//	if (cinfo.progress != NULL) {
+//		cinfo.progress.completed_passes = master.pass_number;
+//		cinfo.progress.total_passes = master.pass_number +
+//						(master.pub.is_dummy_pass ? 2 : 1);
+//		/* In buffered-image mode, we assume one more output pass if EOI not
+//		 * yet reached, but no more passes if EOI has been reached.
+//		 */
+//		if (cinfo.buffered_image && ! cinfo.inputctl.eoi_reached) {
+//			cinfo.progress.total_passes += (cinfo.enable_2pass_quant ? 2 : 1);
+//		}
+//	}
+}
+
+
+static boolean jpeg_resync_to_restart (jpeg_decompress_struct cinfo, int desired) {
+	int marker = cinfo.unread_marker;
+	int action = 1;
+	
+	/* Always put up a warning. */
+//	WARNMS2(cinfo, JWRN_MUST_RESYNC, marker, desired);
+	
+	/* Outer loop handles repeated decision after scanning forward. */
+	for (;;) {
+		if (marker < M_SOF0)
+			action = 2;		/* invalid marker */
+		else if (marker < M_RST0 || marker > M_RST7)
+			action = 3;		/* valid non-restart marker */
+		else {
+			if (marker == (M_RST0 + ((desired+1) & 7)) || marker == ( M_RST0 + ((desired+2) & 7)))
+				action = 3;		/* one of the next two expected restarts */
+			else if (marker == (M_RST0 + ((desired-1) & 7)) || marker == ( M_RST0 + ((desired-2) & 7)))
+				action = 2;		/* a prior restart, so advance */
+			else
+				action = 1;		/* desired restart or too far away */
+		}
+//		TRACEMS2(cinfo, 4, JTRC_RECOVERY_ACTION, marker, action);
+		switch (action) {
+			case 1:
+				/* Discard marker and let entropy decoder resume processing. */
+				cinfo.unread_marker = 0;
+				return true;
+			case 2:
+				/* Scan to the next marker, and repeat the decision loop. */
+				if (! next_marker(cinfo))
+					return false;
+				marker = cinfo.unread_marker;
+				break;
+			case 3:
+				/* Return without advancing past this marker. */
+				/* Entropy decoder will be forced to process an empty segment. */
+				return true;
+		}
+	} /* end loop */
+}
+
+static boolean read_restart_marker (jpeg_decompress_struct cinfo) {
+	/* Obtain a marker unless we already did. */
+	/* Note that next_marker will complain if it skips any data. */
+	if (cinfo.unread_marker == 0) {
+		if (! next_marker(cinfo))
+			return false;
+	}
+
+	if (cinfo.unread_marker == (M_RST0 + cinfo.marker.next_restart_num)) {
+		/* Normal case --- swallow the marker and let entropy decoder continue */
+//		TRACEMS1(cinfo, 3, JTRC_RST, cinfo.marker.next_restart_num);
+		cinfo.unread_marker = 0;
+	} else {
+		/* Uh-oh, the restart markers have been messed up. */
+		/* Let the data source manager determine how to resync. */
+		if (! jpeg_resync_to_restart (cinfo, cinfo.marker.next_restart_num))
+			return false;
+	}
+
+	/* Update next-restart state */
+	cinfo.marker.next_restart_num = (cinfo.marker.next_restart_num + 1) & 7;
+
+	return true;
+}
+
+static boolean jpeg_fill_bit_buffer (bitread_working_state state, int get_buffer, int bits_left, int nbits)
+/* Load up the bit buffer to a depth of at least nbits */
+{
+	/* Copy heavily used state fields into locals (hopefully registers) */
+	byte[] buffer = state.buffer;
+	int bytes_in_buffer = state.bytes_in_buffer;
+	int bytes_offset = state.bytes_offset;
+	jpeg_decompress_struct cinfo = state.cinfo;
+
+	/* Attempt to load at least MIN_GET_BITS bits into get_buffer. */
+	/* (It is assumed that no request will be for more than that many bits.) */
+	/* We fail to do so only if we hit a marker or are forced to suspend. */
+
+	if (cinfo.unread_marker == 0) {	/* cannot advance past a marker */
+		while (bits_left < MIN_GET_BITS) {
+			int c;
+
+			/* Attempt to read a byte */
+			if (bytes_offset == bytes_in_buffer) {
+				if (! fill_input_buffer (cinfo))
+					return false;
+				buffer = cinfo.buffer;
+				bytes_in_buffer = cinfo.bytes_in_buffer;
+				bytes_offset = cinfo.bytes_offset;
+			}
+			c = buffer[bytes_offset++] & 0xFF;
+
+			/* If it's 0xFF, check and discard stuffed zero byte */
+			if (c == 0xFF) {
+				/* Loop here to discard any padding FF's on terminating marker,
+				 * so that we can save a valid unread_marker value.	NOTE: we will
+				 * accept multiple FF's followed by a 0 as meaning a single FF data
+				 * byte.	This data pattern is not valid according to the standard.
+				 */
+				do {
+					if (bytes_offset == bytes_in_buffer) {
+						if (! fill_input_buffer (cinfo))
+							return false;
+						buffer = cinfo.buffer;
+						bytes_in_buffer = cinfo.bytes_in_buffer;
+						bytes_offset = cinfo.bytes_offset;
+					}
+					c = buffer[bytes_offset++] & 0xFF;
+				} while (c == 0xFF);
+
+				if (c == 0) {
+					/* Found FF/00, which represents an FF data byte */
+					c = 0xFF;
+				} else {
+					/* Oops, it's actually a marker indicating end of compressed data.
+					 * Save the marker code for later use.
+					 * Fine point: it might appear that we should save the marker into
+					 * bitread working state, not straight into permanent state.	But
+					 * once we have hit a marker, we cannot need to suspend within the
+					 * current MCU, because we will read no more bytes from the data
+					 * source.	So it is OK to update permanent state right away.
+					 */
+					cinfo.unread_marker = c;
+					/* See if we need to insert some fake zero bits. */
+//					goto no_more_bytes;
+					if (nbits > bits_left) {
+						/* Uh-oh.	Report corrupted data to user and stuff zeroes into
+						 * the data stream, so that we can produce some kind of image.
+						 * We use a nonvolatile flag to ensure that only one warning message
+						 * appears per data segment.
+						 */
+						if (! cinfo.entropy.insufficient_data) {
+//							WARNMS(cinfo, JWRN_HIT_MARKER);
+							cinfo.entropy.insufficient_data = true;
+						}
+					/* Fill the buffer with zero bits */
+						get_buffer <<= MIN_GET_BITS - bits_left;
+						bits_left = MIN_GET_BITS;
+					}
+
+					/* Unload the local registers */
+					state.buffer = buffer;
+					state.bytes_in_buffer = bytes_in_buffer;
+					state.bytes_offset = bytes_offset;
+					state.get_buffer = get_buffer;
+					state.bits_left = bits_left;
+
+					return true;
+		
+				}
+			}
+
+			/* OK, load c into get_buffer */
+			get_buffer = (get_buffer << 8) | c;
+			bits_left += 8;
+		} /* end while */
+	} else {
+//		no_more_bytes:
+		/* We get here if we've read the marker that terminates the compressed
+		 * data segment.	There should be enough bits in the buffer register
+		 * to satisfy the request; if so, no problem.
+		 */
+		if (nbits > bits_left) {
+			/* Uh-oh.	Report corrupted data to user and stuff zeroes into
+			 * the data stream, so that we can produce some kind of image.
+			 * We use a nonvolatile flag to ensure that only one warning message
+			 * appears per data segment.
+			 */
+			if (! cinfo.entropy.insufficient_data) {
+//				WARNMS(cinfo, JWRN_HIT_MARKER);
+				cinfo.entropy.insufficient_data = true;
+			}
+			/* Fill the buffer with zero bits */
+			get_buffer <<= MIN_GET_BITS - bits_left;
+			bits_left = MIN_GET_BITS;
+		}
+	}
+
+	/* Unload the local registers */
+	state.buffer = buffer;
+	state.bytes_in_buffer = bytes_in_buffer;
+	state.bytes_offset = bytes_offset;
+	state.get_buffer = get_buffer;
+	state.bits_left = bits_left;
+
+	return true;
+}
+
+static int jpeg_huff_decode (bitread_working_state state, int get_buffer, int bits_left, d_derived_tbl htbl, int min_bits) {
+	int l = min_bits;
+	int code;
+
+	/* HUFF_DECODE has determined that the code is at least min_bits */
+	/* bits long, so fetch that many bits in one swoop. */
+
+//	CHECK_BIT_BUFFER(*state, l, return -1);
+	{
+	if (bits_left < (l)) {
+		if (! jpeg_fill_bit_buffer(state,get_buffer,bits_left,l)) { 
+			return -1;
+		}
+		get_buffer = (state).get_buffer; bits_left = (state).bits_left;
+	}
+	}
+//	code = GET_BITS(l);
+	code = (( (get_buffer >> (bits_left -= (l)))) & ((1<<(l))-1));
+
+	/* Collect the rest of the Huffman code one bit at a time. */
+	/* This is per Figure F.16 in the JPEG spec. */
+
+	while (code > htbl.maxcode[l]) {
+		code <<= 1;
+//		CHECK_BIT_BUFFER(*state, 1, return -1);
+		{
+		if (bits_left < (1)) {
+			if (! jpeg_fill_bit_buffer(state,get_buffer,bits_left,1)) { 
+				return -1;
+			}
+			get_buffer = (state).get_buffer; bits_left = (state).bits_left;
+		}
+		}
+//		code |= GET_BITS(1);
+		code |= (( (get_buffer >> (bits_left -= (1)))) & ((1<<(1))-1));
+		l++;
+	}
+
+	/* Unload the local registers */
+	state.get_buffer = get_buffer;
+	state.bits_left = bits_left;
+
+	/* With garbage input we may reach the sentinel value l = 17. */
+
+	if (l > 16) {
+//		WARNMS(state.cinfo, JWRN_HUFF_BAD_CODE);
+		return 0;			/* fake a zero as the safest result */
+	}
+
+	return htbl.pub.huffval[ (code + htbl.valoffset[l]) ] & 0xFF;
+}
+
+static int decompress_onepass (jpeg_decompress_struct cinfo, byte[][][] output_buf, int[] output_buf_offset) {
+	jpeg_d_coef_controller coef = cinfo.coef;
+	int MCU_col_num;	/* index of current MCU within row */
+	int last_MCU_col = cinfo.MCUs_per_row - 1;
+	int last_iMCU_row = cinfo.total_iMCU_rows - 1;
+	int blkn, ci, xindex, yindex, yoffset, useful_width;
+	byte[][] output_ptr;
+	int start_col, output_col;
+	jpeg_component_info compptr;
+//	inverse_DCT_method_ptr inverse_DCT;
+
+	/* Loop to process as much as one whole iMCU row */
+	for (yoffset = coef.MCU_vert_offset; yoffset < coef.MCU_rows_per_iMCU_row; yoffset++) {
+		for (MCU_col_num = coef.MCU_ctr; MCU_col_num <= last_MCU_col; MCU_col_num++) {
+			/* Try to fetch an MCU.	Entropy decoder expects buffer to be zeroed. */
+			for (int i = 0; i < cinfo.blocks_in_MCU; i++) {
+				short[] blk = coef.MCU_buffer[i];
+				for (int j = 0; j < blk.length; j++) {
+					blk[j] = 0;
+				}
+			}
+			if (! cinfo.entropy.decode_mcu (cinfo, coef.MCU_buffer)) {
+				/* Suspension forced; update state counters and exit */
+				coef.MCU_vert_offset = yoffset;
+				coef.MCU_ctr = MCU_col_num;
+				return JPEG_SUSPENDED;
+			}
+			/* Determine where data should go in output_buf and do the IDCT thing.
+			 * We skip dummy blocks at the right and bottom edges (but blkn gets
+			 * incremented past them!).	Note the inner loop relies on having
+			 * allocated the MCU_buffer[] blocks sequentially.
+			 */
+			blkn = 0;			/* index of current DCT block within MCU */
+			for (ci = 0; ci < cinfo.comps_in_scan; ci++) {
+				compptr = cinfo.cur_comp_info[ci];
+				/* Don't bother to IDCT an uninteresting component. */
+				if (! compptr.component_needed) {
+					blkn += compptr.MCU_blocks;
+					continue;
+				}
+//				inverse_DCT = cinfo.idct.inverse_DCT[compptr.component_index];
+				useful_width = (MCU_col_num < last_MCU_col) ? compptr.MCU_width	: compptr.last_col_width;
+				output_ptr = output_buf[compptr.component_index];
+				int output_ptr_offset = output_buf_offset[compptr.component_index] + yoffset * compptr.DCT_scaled_size;
+				start_col = MCU_col_num * compptr.MCU_sample_width;
+				for (yindex = 0; yindex < compptr.MCU_height; yindex++) {
+					if (cinfo.input_iMCU_row < last_iMCU_row ||	yoffset+yindex < compptr.last_row_height) {
+						output_col = start_col;
+						for (xindex = 0; xindex < useful_width; xindex++) {
+							jpeg_idct_islow(cinfo, compptr, coef.MCU_buffer[blkn+xindex], output_ptr, output_ptr_offset, output_col);
+							output_col += compptr.DCT_scaled_size;
+						}
+					}
+					blkn += compptr.MCU_width;
+					output_ptr_offset += compptr.DCT_scaled_size;
+				}
+			}
+		}
+		/* Completed an MCU row, but perhaps not an iMCU row */
+		coef.MCU_ctr = 0;
+	}
+	/* Completed the iMCU row, advance counters for next one */
+	cinfo.output_iMCU_row++;
+	if (++(cinfo.input_iMCU_row) < cinfo.total_iMCU_rows) {
+		coef.start_iMCU_row(cinfo);
+		return JPEG_ROW_COMPLETED;
+	}
+	/* Completed the scan */
+	finish_input_pass (cinfo);
+	return JPEG_SCAN_COMPLETED;
+}
+
+static int decompress_smooth_data (jpeg_decompress_struct cinfo, byte[][][] output_buf, int[] output_buf_offset) {
+	jpeg_d_coef_controller coef = cinfo.coef;
+	int last_iMCU_row = cinfo.total_iMCU_rows - 1;
+	int block_num, last_block_column;
+	int ci, block_row, block_rows, access_rows;
+	short[][][] buffer;
+	short[][] buffer_ptr, prev_block_row, next_block_row;
+	byte[][] output_ptr;
+	int output_col;
+	jpeg_component_info compptr;
+//	inverse_DCT_method_ptr inverse_DCT;
+	boolean first_row, last_row;
+	short[] workspace = coef.workspace;
+	if (workspace == null) workspace = coef.workspace = new short[DCTSIZE2];
+	int[] coef_bits;
+	JQUANT_TBL quanttbl;
+	int Q00,Q01,Q02,Q10,Q11,Q20, num;
+	int DC1,DC2,DC3,DC4,DC5,DC6,DC7,DC8,DC9;
+	int Al, pred;
+
+	/* Force some input to be done if we are getting ahead of the input. */
+	while (cinfo.input_scan_number <= cinfo.output_scan_number && ! cinfo.inputctl.eoi_reached) {
+		if (cinfo.input_scan_number == cinfo.output_scan_number) {
+			/* If input is working on current scan, we ordinarily want it to
+			 * have completed the current row.	But if input scan is DC,
+			 * we want it to keep one row ahead so that next block row's DC
+			 * values are up to date.
+			 */
+			int delta = (cinfo.Ss == 0) ? 1 : 0;
+			if (cinfo.input_iMCU_row > cinfo.output_iMCU_row+delta)
+				break;
+		}
+		if (consume_input(cinfo) == JPEG_SUSPENDED)
+			return JPEG_SUSPENDED;
+	}
+
+	/* OK, output from the virtual arrays. */
+	for (ci = 0; ci < cinfo.num_components; ci++) {
+		compptr = cinfo.comp_info[ci];
+		/* Don't bother to IDCT an uninteresting component. */
+		if (! compptr.component_needed)
+			continue;
+		/* Count non-dummy DCT block rows in this iMCU row. */
+		if (cinfo.output_iMCU_row < last_iMCU_row) {
+			block_rows = compptr.v_samp_factor;
+			access_rows = block_rows * 2; /* this and next iMCU row */
+			last_row = false;
+		} else {
+			/* NB: can't use last_row_height here; it is input-side-dependent! */
+			block_rows = (compptr.height_in_blocks % compptr.v_samp_factor);
+			if (block_rows == 0) block_rows = compptr.v_samp_factor;
+			access_rows = block_rows; /* this iMCU row only */
+			last_row = true;
+		}
+		/* Align the virtual buffer for this component. */
+		int buffer_offset;
+		if (cinfo.output_iMCU_row > 0) {
+			access_rows += compptr.v_samp_factor; /* prior iMCU row too */
+			buffer = coef.whole_image[ci];
+			buffer_offset = (cinfo.output_iMCU_row - 1) * compptr.v_samp_factor;
+			buffer_offset += compptr.v_samp_factor;	/* point to current iMCU row */
+			first_row = false;
+		} else {
+			buffer = coef.whole_image[ci];
+			buffer_offset = 0;
+			first_row = true;
+		}
+		/* Fetch component-dependent info */
+		coef_bits = coef.coef_bits_latch;
+		int coef_offset = (ci * SAVED_COEFS);
+		quanttbl = compptr.quant_table;
+		Q00 = quanttbl.quantval[0];
+		Q01 = quanttbl.quantval[Q01_POS];
+		Q10 = quanttbl.quantval[Q10_POS];
+		Q20 = quanttbl.quantval[Q20_POS];
+		Q11 = quanttbl.quantval[Q11_POS];
+		Q02 = quanttbl.quantval[Q02_POS];
+//		inverse_DCT = cinfo.idct.inverse_DCT[ci];
+		output_ptr = output_buf[ci];
+		int output_ptr_offset = output_buf_offset[ci];
+		/* Loop over all DCT blocks to be processed. */
+		for (block_row = 0; block_row < block_rows; block_row++) {
+			buffer_ptr = buffer[block_row+buffer_offset];
+			int buffer_ptr_offset = 0, prev_block_row_offset = 0, next_block_row_offset = 0;
+			if (first_row && block_row == 0) {
+				prev_block_row = buffer_ptr;
+				prev_block_row_offset = buffer_ptr_offset;
+			} else {
+				prev_block_row = buffer[block_row-1+buffer_offset];
+				prev_block_row_offset = 0;
+			}
+			if (last_row && block_row == block_rows-1) {
+				next_block_row = buffer_ptr;
+				next_block_row_offset = buffer_ptr_offset;
+			} else {
+				next_block_row = buffer[block_row+1+buffer_offset];
+				next_block_row_offset = 0;
+			}
+			/* We fetch the surrounding DC values using a sliding-register approach.
+			 * Initialize all nine here so as to do the right thing on narrow pics.
+			 */
+			DC1 = DC2 = DC3 = prev_block_row[0+prev_block_row_offset][0];
+			DC4 = DC5 = DC6 = buffer_ptr[0+buffer_ptr_offset][0];
+			DC7 = DC8 = DC9 = next_block_row[0+next_block_row_offset][0];
+			output_col = 0;
+			last_block_column = compptr.width_in_blocks - 1;
+			for (block_num = 0; block_num <= last_block_column; block_num++) {
+				/* Fetch current DCT block into workspace so we can modify it. */
+//				jcopy_block_row(buffer_ptr, workspace, 1);
+				System.arraycopy(buffer_ptr[buffer_ptr_offset], 0, workspace, 0, workspace.length);
+				/* Update DC values */
+				if (block_num < last_block_column) {
+					DC3 = prev_block_row[1+prev_block_row_offset][0];
+					DC6 = buffer_ptr[1+buffer_ptr_offset][0];
+					DC9 = next_block_row[1+next_block_row_offset][0];
+				}
+				/* Compute coefficient estimates per K.8.
+				 * An estimate is applied only if coefficient is still zero,
+				 * and is not known to be fully accurate.
+				 */
+				/* AC01 */
+				if ((Al=coef_bits[1+coef_offset]) != 0 && workspace[1] == 0) {
+					num = 36 * Q00 * (DC4 - DC6);
+					if (num >= 0) {
+						pred = (((Q01<<7) + num) / (Q01<<8));
+						if (Al > 0 && pred >= (1<<Al))
+							pred = (1<<Al)-1;
+					} else {
+						pred = (((Q01<<7) - num) / (Q01<<8));
+						if (Al > 0 && pred >= (1<<Al))
+							pred = (1<<Al)-1;
+						pred = -pred;
+					}
+					workspace[1] = (short) pred;
+				}
+				/* AC10 */
+				if ((Al=coef_bits[2+coef_offset]) != 0 && workspace[8] == 0) {
+					num = 36 * Q00 * (DC2 - DC8);
+					if (num >= 0) {
+						pred = (((Q10<<7) + num) / (Q10<<8));
+						if (Al > 0 && pred >= (1<<Al))
+							pred = (1<<Al)-1;
+					} else {
+						pred = (((Q10<<7) - num) / (Q10<<8));
+						if (Al > 0 && pred >= (1<<Al))
+							pred = (1<<Al)-1;
+						pred = -pred;
+					}
+					workspace[8] = (short) pred;
+				}
+				/* AC20 */
+				if ((Al=coef_bits[3+coef_offset]) != 0 && workspace[16] == 0) {
+					num = 9 * Q00 * (DC2 + DC8 - 2*DC5);
+					if (num >= 0) {
+						pred = (((Q20<<7) + num) / (Q20<<8));
+						if (Al > 0 && pred >= (1<<Al))
+							pred = (1<<Al)-1;
+					} else {
+						pred = (((Q20<<7) - num) / (Q20<<8));
+						if (Al > 0 && pred >= (1<<Al))
+							pred = (1<<Al)-1;
+						pred = -pred;
+					}
+					workspace[16] = (short) pred;
+				}
+				/* AC11 */
+				if ((Al=coef_bits[4+coef_offset]) != 0 && workspace[9] == 0) {
+					num = 5 * Q00 * (DC1 - DC3 - DC7 + DC9);
+					if (num >= 0) {
+						pred = (((Q11<<7) + num) / (Q11<<8));
+						if (Al > 0 && pred >= (1<<Al))
+							pred = (1<<Al)-1;
+					} else {
+						pred = (((Q11<<7) - num) / (Q11<<8));
+						if (Al > 0 && pred >= (1<<Al))
+							pred = (1<<Al)-1;
+						pred = -pred;
+					}
+					workspace[9] = (short) pred;
+				}
+				/* AC02 */
+				if ((Al=coef_bits[5+coef_offset]) != 0 && workspace[2] == 0) {
+					num = 9 * Q00 * (DC4 + DC6 - 2*DC5);
+					if (num >= 0) {
+						pred = (((Q02<<7) + num) / (Q02<<8));
+						if (Al > 0 && pred >= (1<<Al))
+							pred = (1<<Al)-1;
+					} else {
+						pred = (((Q02<<7) - num) / (Q02<<8));
+						if (Al > 0 && pred >= (1<<Al))
+							pred = (1<<Al)-1;
+						pred = -pred;
+					}
+					workspace[2] = (short) pred;
+				}
+				/* OK, do the IDCT */
+				jpeg_idct_islow(cinfo, compptr, workspace, output_ptr, output_ptr_offset, output_col);
+				/* Advance for next column */
+				DC1 = DC2; DC2 = DC3;
+				DC4 = DC5; DC5 = DC6;
+				DC7 = DC8; DC8 = DC9;
+				buffer_ptr_offset++; prev_block_row_offset++; next_block_row_offset++;
+				output_col += compptr.DCT_scaled_size;
+			}
+			output_ptr_offset += compptr.DCT_scaled_size;
+		}
+	}
+
+	if (++(cinfo.output_iMCU_row) < cinfo.total_iMCU_rows)
+		return JPEG_ROW_COMPLETED;
+	return JPEG_SCAN_COMPLETED;
+}
+
+static int decompress_data (jpeg_decompress_struct cinfo, byte[][][] output_buf, int[] output_buf_offset) {
+	jpeg_d_coef_controller coef = cinfo.coef;
+	int last_iMCU_row = cinfo.total_iMCU_rows - 1;
+	int block_num;
+	int ci, block_row, block_rows;
+	short[][][] buffer;
+	short[][] buffer_ptr;
+	byte[][] output_ptr;
+	int output_col;
+	jpeg_component_info compptr;
+//	inverse_DCT_method_ptr inverse_DCT;
+
+	/* Force some input to be done if we are getting ahead of the input. */
+	while (cinfo.input_scan_number < cinfo.output_scan_number ||
+	 (cinfo.input_scan_number == cinfo.output_scan_number &&
+		cinfo.input_iMCU_row <= cinfo.output_iMCU_row))
+	{
+		if (consume_input(cinfo) == JPEG_SUSPENDED)
+			return JPEG_SUSPENDED;
+	}
+
+	/* OK, output from the virtual arrays. */
+	for (ci = 0; ci < cinfo.num_components; ci++) {
+		compptr = cinfo.comp_info[ci];
+		/* Don't bother to IDCT an uninteresting component. */
+		if (! compptr.component_needed)
+			continue;
+		/* Align the virtual buffer for this component. */
+		buffer = coef.whole_image[ci];
+		int buffer_offset = cinfo.output_iMCU_row * compptr.v_samp_factor;
+		/* Count non-dummy DCT block rows in this iMCU row. */
+		if (cinfo.output_iMCU_row < last_iMCU_row)
+			block_rows = compptr.v_samp_factor;
+		else {
+			/* NB: can't use last_row_height here; it is input-side-dependent! */
+			block_rows = (compptr.height_in_blocks % compptr.v_samp_factor);
+			if (block_rows == 0) block_rows = compptr.v_samp_factor;
+		}
+//		inverse_DCT = cinfo.idct.inverse_DCT[ci];
+		output_ptr = output_buf[ci];
+		int output_ptr_offset = output_buf_offset[ci];
+		/* Loop over all DCT blocks to be processed. */
+		for (block_row = 0; block_row < block_rows; block_row++) {
+			buffer_ptr = buffer[block_row+buffer_offset];
+			int buffer_ptr_offset = 0;
+			output_col = 0;
+			for (block_num = 0; block_num < compptr.width_in_blocks; block_num++) {
+				jpeg_idct_islow(cinfo, compptr, buffer_ptr[buffer_ptr_offset], output_ptr, output_ptr_offset, output_col);
+
+				buffer_ptr_offset++;
+				output_col += compptr.DCT_scaled_size;
+			}
+			output_ptr_offset += compptr.DCT_scaled_size;
+		}
+	}
+
+	if (++(cinfo.output_iMCU_row) < cinfo.total_iMCU_rows)
+		return JPEG_ROW_COMPLETED;
+	return JPEG_SCAN_COMPLETED;
+}
+
+static void post_process_data (jpeg_decompress_struct cinfo,
+				byte[][][] input_buf, int[] input_buf_offset, int[] in_row_group_ctr,
+				int in_row_groups_avail,
+				byte[][] output_buf, int[] out_row_ctr,
+				int out_rows_avail)
+{
+	upsample(cinfo, input_buf, input_buf_offset, in_row_group_ctr, in_row_groups_avail, output_buf, out_row_ctr, out_rows_avail);
+}
+
+static void set_bottom_pointers (jpeg_decompress_struct cinfo)
+/* Change the pointer lists to duplicate the last sample row at the bottom
+ * of the image.	whichptr indicates which xbuffer holds the final iMCU row.
+ * Also sets rowgroups_avail to indicate number of nondummy row groups in row.
+ */
+{
+	jpeg_d_main_controller main = cinfo.main;
+	int ci, i, rgroup, iMCUheight, rows_left;
+	jpeg_component_info compptr;
+	byte[][] xbuf;
+
+	for (ci = 0; ci < cinfo.num_components; ci++) {
+		compptr = cinfo.comp_info[ci];
+		/* Count sample rows in one iMCU row and in one row group */
+		iMCUheight = compptr.v_samp_factor * compptr.DCT_scaled_size;
+		rgroup = iMCUheight / cinfo.min_DCT_scaled_size;
+		/* Count nondummy sample rows remaining for this component */
+		rows_left = (compptr.downsampled_height % iMCUheight);
+		if (rows_left == 0) rows_left = iMCUheight;
+		/* Count nondummy row groups.	Should get same answer for each component,
+		 * so we need only do it once.
+		 */
+		if (ci == 0) {
+			main.rowgroups_avail = ((rows_left-1) / rgroup + 1);
+		}
+		/* Duplicate the last real sample row rgroup*2 times; this pads out the
+		 * last partial rowgroup and ensures at least one full rowgroup of context.
+		 */
+		xbuf = main.xbuffer[main.whichptr][ci];
+		int xbuf_offset = main.xbuffer_offset[main.whichptr][ci];
+		for (i = 0; i < rgroup * 2; i++) {
+			xbuf[rows_left + i + xbuf_offset] = xbuf[rows_left-1 + xbuf_offset];
+		}
+	}
+}
+
+static void set_wraparound_pointers (jpeg_decompress_struct cinfo)
+/* Set up the "wraparound" pointers at top and bottom of the pointer lists.
+ * This changes the pointer list state from top-of-image to the normal state.
+ */
+{
+	jpeg_d_main_controller main = cinfo.main;
+	int ci, i, rgroup;
+	int M = cinfo.min_DCT_scaled_size;
+	jpeg_component_info compptr;
+	byte[][] xbuf0, xbuf1;
+
+	for (ci = 0; ci < cinfo.num_components; ci++) {
+		compptr = cinfo.comp_info[ci];
+		rgroup = (compptr.v_samp_factor * compptr.DCT_scaled_size) / cinfo.min_DCT_scaled_size; /* height of a row group of component */
+		xbuf0 = main.xbuffer[0][ci];
+		int xbuf0_offset = main.xbuffer_offset[0][ci];
+		xbuf1 = main.xbuffer[1][ci];
+		int xbuf1_offset = main.xbuffer_offset[1][ci];
+		for (i = 0; i < rgroup; i++) {
+			xbuf0[i - rgroup + xbuf0_offset] = xbuf0[rgroup*(M+1) + i + xbuf0_offset];
+			xbuf1[i - rgroup + xbuf1_offset] = xbuf1[rgroup*(M+1) + i + xbuf1_offset];
+			xbuf0[rgroup*(M+2) + i + xbuf0_offset] = xbuf0[i + xbuf0_offset];
+			xbuf1[rgroup*(M+2) + i + xbuf1_offset] = xbuf1[i + xbuf1_offset];
+		}
+	}
+}
+
+static void process_data_crank_post (jpeg_decompress_struct cinfo,
+	byte[][] output_buf, int[] out_row_ctr,
+	int out_rows_avail)
+{
+	error();
+}
+
+static void process_data_context_main (jpeg_decompress_struct cinfo,
+	byte[][] output_buf, int[] out_row_ctr,
+	int out_rows_avail)
+{
+	jpeg_d_main_controller main = cinfo.main;
+
+	/* Read input data if we haven't filled the main buffer yet */
+	if (! main.buffer_full) {
+		int result;
+		switch (cinfo.coef.decompress_data) {
+			case DECOMPRESS_DATA:
+				result = decompress_data(cinfo, main.xbuffer[main.whichptr], main.xbuffer_offset[main.whichptr]);
+				break;
+			case DECOMPRESS_SMOOTH_DATA:
+				result = decompress_smooth_data(cinfo, main.xbuffer[main.whichptr], main.xbuffer_offset[main.whichptr]);
+				break;
+			case DECOMPRESS_ONEPASS:
+				result = decompress_onepass(cinfo, main.xbuffer[main.whichptr], main.xbuffer_offset[main.whichptr]);
+				break;
+			default: result = 0;
+		}
+		if (result == 0)
+			return;			/* suspension forced, can do nothing more */
+		main.buffer_full = true;	/* OK, we have an iMCU row to work with */
+		main.iMCU_row_ctr++;	/* count rows received */
+	}
+
+	/* Postprocessor typically will not swallow all the input data it is handed
+	 * in one call (due to filling the output buffer first).	Must be prepared
+	 * to exit and restart.	This switch lets us keep track of how far we got.
+	 * Note that each case falls through to the next on successful completion.
+	 */
+	switch (main.context_state) {
+		case CTX_POSTPONED_ROW:
+			/* Call postprocessor using previously set pointers for postponed row */
+			post_process_data (cinfo, main.xbuffer[main.whichptr], main.xbuffer_offset[main.whichptr], main.rowgroup_ctr, main.rowgroups_avail, output_buf, out_row_ctr, out_rows_avail);
+			if (main.rowgroup_ctr[0] < main.rowgroups_avail)
+				return;			/* Need to suspend */
+			main.context_state = CTX_PREPARE_FOR_IMCU;
+			if (out_row_ctr[0] >= out_rows_avail)
+				return;			/* Postprocessor exactly filled output buf */
+			/*FALLTHROUGH*/
+		case CTX_PREPARE_FOR_IMCU:
+			/* Prepare to process first M-1 row groups of this iMCU row */
+			main.rowgroup_ctr[0] = 0;
+			main.rowgroups_avail = (cinfo.min_DCT_scaled_size - 1);
+			/* Check for bottom of image: if so, tweak pointers to "duplicate"
+			 * the last sample row, and adjust rowgroups_avail to ignore padding rows.
+			 */
+			if (main.iMCU_row_ctr == cinfo.total_iMCU_rows)
+				set_bottom_pointers(cinfo);
+			main.context_state = CTX_PROCESS_IMCU;
+			/*FALLTHROUGH*/
+		case CTX_PROCESS_IMCU:
+			/* Call postprocessor using previously set pointers */
+			post_process_data (cinfo, main.xbuffer[main.whichptr], main.xbuffer_offset[main.whichptr], main.rowgroup_ctr, main.rowgroups_avail, output_buf, out_row_ctr, out_rows_avail);
+			if (main.rowgroup_ctr[0] < main.rowgroups_avail)
+				return;			/* Need to suspend */
+			/* After the first iMCU, change wraparound pointers to normal state */
+			if (main.iMCU_row_ctr == 1)
+				set_wraparound_pointers(cinfo);
+			/* Prepare to load new iMCU row using other xbuffer list */
+			main.whichptr ^= 1;	/* 0=>1 or 1=>0 */
+			main.buffer_full = false;
+			/* Still need to process last row group of this iMCU row, */
+			/* which is saved at index M+1 of the other xbuffer */
+			main.rowgroup_ctr[0] = (cinfo.min_DCT_scaled_size + 1);
+			main.rowgroups_avail =	(cinfo.min_DCT_scaled_size + 2);
+			main.context_state = CTX_POSTPONED_ROW;
+	}
+}
+
+static void process_data_simple_main (jpeg_decompress_struct cinfo, byte[][] output_buf, int[] out_row_ctr, int out_rows_avail) {
+	jpeg_d_main_controller main = cinfo.main;
+	int rowgroups_avail;
+
+	/* Read input data if we haven't filled the main buffer yet */
+	if (! main.buffer_full) {
+		int result;
+		switch (cinfo.coef.decompress_data) {
+			case DECOMPRESS_DATA:
+				result = decompress_data(cinfo, main.buffer, main.buffer_offset);
+				break;
+			case DECOMPRESS_SMOOTH_DATA:
+				result = decompress_smooth_data(cinfo, main.buffer, main.buffer_offset);
+				break;
+			case DECOMPRESS_ONEPASS: 
+				result = decompress_onepass(cinfo, main.buffer, main.buffer_offset);
+				break;
+			default: result = 0;
+		}
+		if (result == 0)
+			return;			/* suspension forced, can do nothing more */
+		main.buffer_full = true;	/* OK, we have an iMCU row to work with */
+	}
+
+	/* There are always min_DCT_scaled_size row groups in an iMCU row. */
+	rowgroups_avail = cinfo.min_DCT_scaled_size;
+	/* Note: at the bottom of the image, we may pass extra garbage row groups
+	 * to the postprocessor.	The postprocessor has to check for bottom
+	 * of image anyway (at row resolution), so no point in us doing it too.
+	 */
+
+	/* Feed the postprocessor */
+	post_process_data (cinfo, main.buffer, main.buffer_offset, main.rowgroup_ctr, rowgroups_avail, output_buf, out_row_ctr, out_rows_avail);
+
+	/* Has postprocessor consumed all the data yet? If so, mark buffer empty */
+	if (main.rowgroup_ctr[0] >= rowgroups_avail) {
+		main.buffer_full = false;
+		main.rowgroup_ctr[0] = 0;
+	}
+}
+
+static int jpeg_read_scanlines (jpeg_decompress_struct cinfo, byte[][] scanlines, int max_lines) {
+
+	if (cinfo.global_state != DSTATE_SCANNING)
+		error();
+//		ERREXIT1(cinfo, JERR_BAD_STATE, cinfo.global_state);
+	if (cinfo.output_scanline >= cinfo.output_height) {
+//		WARNMS(cinfo, JWRN_TOO_MUCH_DATA);
+		return 0;
+	}
+
+	/* Call progress monitor hook if present */
+//	if (cinfo.progress != NULL) {
+//		cinfo.progress.pass_counter = (long) cinfo.output_scanline;
+//		cinfo.progress.pass_limit = (long) cinfo.output_height;
+//		(*cinfo.progress.progress_monitor) ((j_common_ptr) cinfo);
+//	}
+
+	/* Process some data */
+	cinfo.row_ctr[0] = 0;
+	switch (cinfo.main.process_data) {
+		case PROCESS_DATA_SIMPLE_MAIN:
+			process_data_simple_main (cinfo, scanlines, cinfo.row_ctr, max_lines);
+			break;
+		case PROCESS_DATA_CONTEXT_MAIN:
+			process_data_context_main (cinfo, scanlines, cinfo.row_ctr, max_lines);
+			break;
+		case PROCESS_DATA_CRANK_POST:
+			process_data_crank_post (cinfo, scanlines, cinfo.row_ctr, max_lines);
+			break;
+		default: error();
+	}
+	cinfo.output_scanline += cinfo.row_ctr[0];
+	return cinfo.row_ctr[0];
+}
+
+
+static boolean output_pass_setup (jpeg_decompress_struct cinfo) {
+	if (cinfo.global_state != DSTATE_PRESCAN) {
+		/* First call: do pass setup */
+		prepare_for_output_pass (cinfo);
+		cinfo.output_scanline = 0;
+		cinfo.global_state = DSTATE_PRESCAN;
+	}
+	/* Loop over any required dummy passes */
+	while (cinfo.master.is_dummy_pass) {
+		error();
+//#ifdef QUANT_2PASS_SUPPORTED
+//		/* Crank through the dummy pass */
+//		while (cinfo.output_scanline < cinfo.output_height) {
+//			JDIMENSION last_scanline;
+//			/* Call progress monitor hook if present */
+//			if (cinfo.progress != NULL) {
+//	cinfo.progress.pass_counter = (long) cinfo.output_scanline;
+//	cinfo.progress.pass_limit = (long) cinfo.output_height;
+//	(*cinfo.progress.progress_monitor) ((j_common_ptr) cinfo);
+//			}
+//			/* Process some data */
+//			last_scanline = cinfo.output_scanline;
+//			(*cinfo.main.process_data) (cinfo, (JSAMPARRAY) NULL,
+//						&cinfo.output_scanline, (JDIMENSION) 0);
+//			if (cinfo.output_scanline == last_scanline)
+//	return FALSE;		/* No progress made, must suspend */
+//		}
+//		/* Finish up dummy pass, and set up for another one */
+//		(*cinfo.master.finish_output_pass) (cinfo);
+//		(*cinfo.master.prepare_for_output_pass) (cinfo);
+//		cinfo.output_scanline = 0;
+//#else
+//		ERREXIT(cinfo, JERR_NOT_COMPILED);
+//#endif /* QUANT_2PASS_SUPPORTED */
+	}
+	/* Ready for application to drive output pass through
+	 * jpeg_read_scanlines or jpeg_read_raw_data.
+	 */
+	cinfo.global_state = cinfo.raw_data_out ? DSTATE_RAW_OK : DSTATE_SCANNING;
+	return true;
+}
+
+static boolean get_dht (jpeg_decompress_struct cinfo)
+/* Process a DHT marker */
+{
+	int length;
+	byte[] bits = new byte[17];
+	byte[] huffval = new byte[256];
+	int i, index, count;
+	JHUFF_TBL htblptr;
+
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	length = (cinfo.buffer[cinfo.bytes_offset++] & 0xFF) << 8;
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	length |= cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+	length -= 2;
+	
+	while (length > 16) {
+		if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+		index = cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+
+//		TRACEMS1(cinfo, 1, JTRC_DHT, index);
+			
+		bits[0] = 0;
+		count = 0;
+		for (i = 1; i <= 16; i++) {
+			if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+		bits[i] = cinfo.buffer[cinfo.bytes_offset++];
+			count += bits[i] & 0xFF;
+		}
+
+		length -= 1 + 16;
+
+//		TRACEMS8(cinfo, 2, JTRC_HUFFBITS,
+//			 bits[1], bits[2], bits[3], bits[4],
+//			 bits[5], bits[6], bits[7], bits[8]);
+//		TRACEMS8(cinfo, 2, JTRC_HUFFBITS,
+//			 bits[9], bits[10], bits[11], bits[12],
+//			 bits[13], bits[14], bits[15], bits[16]);
+
+		/* Here we just do minimal validation of the counts to avoid walking
+		 * off the end of our table space.	jdhuff.c will check more carefully.
+		 */
+		if (count > 256 || (count) > length)
+			error();
+//			ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
+
+		for (i = 0; i < count; i++) {
+	 		if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	 		huffval[i] = cinfo.buffer[cinfo.bytes_offset++];
+		}
+
+		length -= count;
+
+		if ((index & 0x10) != 0) {		/* AC table definition */
+			index -= 0x10;
+			htblptr = cinfo.ac_huff_tbl_ptrs[index] = new JHUFF_TBL();
+		} else {			/* DC table definition */
+			htblptr = cinfo.dc_huff_tbl_ptrs[index] = new JHUFF_TBL();
+		}
+
+		if (index < 0 || index >= NUM_HUFF_TBLS)
+			error();
+//			ERREXIT1(cinfo, JERR_DHT_INDEX, index);
+
+		System.arraycopy(bits, 0, htblptr.bits, 0, bits.length);
+		System.arraycopy(huffval, 0, htblptr.huffval, 0, huffval.length);
+	}
+
+	if (length != 0)
+		error();
+//		ERREXIT(cinfo, JERR_BAD_LENGTH);
+
+	return true;
+}
+
+
+static boolean get_dqt (jpeg_decompress_struct cinfo)
+/* Process a DQT marker */
+{
+	int length;
+	int n, i, prec;
+	int tmp;
+	JQUANT_TBL quant_ptr;
+
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	length = (cinfo.buffer[cinfo.bytes_offset++] & 0xFF) << 8;
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	length |= cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+	length -= 2;
+
+	while (length > 0) {
+		if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	n = cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+		prec = n >> 4;
+		n &= 0x0F;
+
+//		TRACEMS2(cinfo, 1, JTRC_DQT, n, prec);
+
+		if (n >= NUM_QUANT_TBLS)
+			error();
+//			ERREXIT1(cinfo, JERR_DQT_INDEX, n);
+			
+		if (cinfo.quant_tbl_ptrs[n] == null)
+			cinfo.quant_tbl_ptrs[n] = new JQUANT_TBL();
+		quant_ptr = cinfo.quant_tbl_ptrs[n];
+
+		for (i = 0; i < DCTSIZE2; i++) {
+			if (prec != 0) {
+				if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+				tmp = (cinfo.buffer[cinfo.bytes_offset++] & 0xFF) << 8;
+				if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+				tmp |= cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+			} else {
+					if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+				tmp = cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+			}
+			/* We convert the zigzag-order table to natural array order. */
+			quant_ptr.quantval[jpeg_natural_order[i]] = (short) tmp;
+		}
+
+//		if (cinfo.err.trace_level >= 2) {
+//			for (i = 0; i < DCTSIZE2; i += 8) {
+//				TRACEMS8(cinfo, 2, JTRC_QUANTVALS,
+//		 			quant_ptr.quantval[i],	 quant_ptr.quantval[i+1],
+//					 quant_ptr.quantval[i+2], quant_ptr.quantval[i+3],
+//					 quant_ptr.quantval[i+4], quant_ptr.quantval[i+5],
+//					 quant_ptr.quantval[i+6], quant_ptr.quantval[i+7]);
+//			}
+//		}
+
+		length -= (DCTSIZE2+1);
+		if (prec != 0) length -= DCTSIZE2;
+	}
+
+	if (length != 0)
+		error();
+//		ERREXIT(cinfo, JERR_BAD_LENGTH);
+
+	return true;
+}
+
+static boolean get_dri (jpeg_decompress_struct cinfo)
+/* Process a DRI marker */
+{
+	int length;
+	int tmp;
+
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	length = (cinfo.buffer[cinfo.bytes_offset++] & 0xFF) << 8;
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	length |= cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+	
+	if (length != 4)
+	error();
+//		ERREXIT(cinfo, JERR_BAD_LENGTH);
+
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	tmp = (cinfo.buffer[cinfo.bytes_offset++] & 0xFF) << 8;
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	tmp |= cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+
+//	TRACEMS1(cinfo, 1, JTRC_DRI, tmp);
+
+	cinfo.restart_interval = tmp;
+
+	return true;
+}
+
+static boolean get_dac (jpeg_decompress_struct cinfo)
+/* Process a DAC marker */
+{
+	int length;
+	int index, val;
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	length = (cinfo.buffer[cinfo.bytes_offset++] & 0xFF) << 8;
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	length |= cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+	length -= 2;
+	
+	while (length > 0) {
+		if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+		index = cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+		if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+		val = cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+
+		length -= 2;
+
+//		TRACEMS2(cinfo, 1, JTRC_DAC, index, val);
+
+		if (index < 0 || index >= (2*NUM_ARITH_TBLS))
+			error();
+//			ERREXIT1(cinfo, JERR_DAC_INDEX, index);
+
+		if (index >= NUM_ARITH_TBLS) { /* define AC table */
+			cinfo.arith_ac_K[index-NUM_ARITH_TBLS] = (byte) val;
+		} else {			/* define DC table */
+			cinfo.arith_dc_L[index] = (byte) (val & 0x0F);
+			cinfo.arith_dc_U[index] = (byte) (val >> 4);
+			if (cinfo.arith_dc_L[index] > cinfo.arith_dc_U[index])
+				error();
+//	ERREXIT1(cinfo, JERR_DAC_VALUE, val);
+		}
+	}
+
+	if (length != 0)
+		error();
+//		ERREXIT(cinfo, JERR_BAD_LENGTH);
+
+	return true;
+}
+
+
+static boolean get_sos (jpeg_decompress_struct cinfo)
+/* Process a SOS marker */
+{
+	int length;
+	int i, ci, n, c, cc;
+	jpeg_component_info compptr = null;
+
+	if (! cinfo.marker.saw_SOF)
+		error();
+//		ERREXIT(cinfo, JERR_SOS_NO_SOF);
+
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	length = (cinfo.buffer[cinfo.bytes_offset++] & 0xFF) << 8;
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	length |= cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	n = cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+
+//	TRACEMS1(cinfo, 1, JTRC_SOS, n);
+
+	if (length != (n * 2 + 6) || n < 1 || n > MAX_COMPS_IN_SCAN)
+		error();
+//		ERREXIT(cinfo, JERR_BAD_LENGTH);
+
+	cinfo.comps_in_scan = n;
+
+	/* Collect the component-spec parameters */
+
+	for (i = 0; i < n; i++) {
+		if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+		cc = cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+		if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+		c = cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+		
+		for (ci = 0; ci < cinfo.num_components; ci++) {
+			compptr = cinfo.comp_info[ci];
+			if (cc == compptr.component_id)
+				break;
+		}
+
+		if (ci == cinfo.num_components)
+			error();
+//			ERREXIT1(cinfo, JERR_BAD_COMPONENT_ID, cc);
+
+		cinfo.cur_comp_info[i] = compptr;
+		compptr.dc_tbl_no = (c >> 4) & 15;
+		compptr.ac_tbl_no = (c		 ) & 15;
+		
+//		TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, cc, compptr.dc_tbl_no, compptr.ac_tbl_no);
+	}
+
+	/* Collect the additional scan parameters Ss, Se, Ah/Al. */
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	c = cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+	cinfo.Ss = c;
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	c = cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+	cinfo.Se = c;
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	c = cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+	cinfo.Ah = (c >> 4) & 15;
+	cinfo.Al = (c		 ) & 15;
+
+//	TRACEMS4(cinfo, 1, JTRC_SOS_PARAMS, cinfo.Ss, cinfo.Se, cinfo.Ah, cinfo.Al);
+
+	/* Prepare to scan data & restart markers */
+	cinfo.marker.next_restart_num = 0;
+
+	/* Count another SOS marker */
+	cinfo.input_scan_number++;
+
+	return true;
+}
+
+static boolean get_sof (jpeg_decompress_struct cinfo, boolean is_prog, boolean is_arith) {
+	int length;
+	int c, ci;
+
+	cinfo.progressive_mode = is_prog;
+	cinfo.arith_code = is_arith;
+
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	length = (cinfo.buffer[cinfo.bytes_offset++] & 0xFF) << 8;
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	length |= cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	cinfo.data_precision = cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	cinfo.image_height = (cinfo.buffer[cinfo.bytes_offset++] & 0xFF) << 8;
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	cinfo.image_height |= cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	cinfo.image_width = (cinfo.buffer[cinfo.bytes_offset++] & 0xFF) << 8;
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	cinfo.image_width |= cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+	
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	cinfo.num_components = cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+
+	length -= 8;
+
+//	TRACEMS4(cinfo, 1, JTRC_SOF, cinfo.unread_marker,
+//		 (int) cinfo.image_width, (int) cinfo.image_height,
+//		 cinfo.num_components);
+
+	if (cinfo.marker.saw_SOF)
+		error();
+//		ERREXIT(cinfo, JERR_SOF_DUPLICATE);
+
+	/* We don't support files in which the image height is initially specified */
+	/* as 0 and is later redefined by DNL.	As long as we have to check that,	*/
+	/* might as well have a general sanity check. */
+	if (cinfo.image_height <= 0 || cinfo.image_width <= 0 || cinfo.num_components <= 0)
+		error();
+//		ERREXIT(cinfo, JERR_EMPTY_IMAGE);
+
+	if (length != (cinfo.num_components * 3))
+		error();
+//		ERREXIT(cinfo, JERR_BAD_LENGTH);
+
+	if (cinfo.comp_info == null)	/* do only once, even if suspend */
+		cinfo.comp_info = new jpeg_component_info[cinfo.num_components];
+	
+	for (ci = 0; ci < cinfo.num_components; ci++) {
+		jpeg_component_info compptr = cinfo.comp_info[ci] = new jpeg_component_info();
+		compptr.component_index = ci;
+		if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+		compptr.component_id = cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+		if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+		c = cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+		compptr.h_samp_factor = (c >> 4) & 15;
+		compptr.v_samp_factor = (c		 ) & 15;
+		if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+		compptr.quant_tbl_no = cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+
+//		TRACEMS4(cinfo, 1, JTRC_SOF_COMPONENT,
+//			 compptr.component_id, compptr.h_samp_factor,
+//			 compptr.v_samp_factor, compptr.quant_tbl_no);
+	}
+
+	cinfo.marker.saw_SOF = true;
+
+	return true;
+}
+
+static void sep_upsample (jpeg_decompress_struct cinfo, byte[][][] input_buf, int[] input_buf_offset,
+		int[] in_row_group_ctr, int in_row_groups_avail,
+		byte[][] output_buf, int[] out_row_ctr,	int out_rows_avail)
+{
+	jpeg_upsampler upsample = cinfo.upsample;
+	int ci;
+	jpeg_component_info compptr;
+	int num_rows;
+
+	/* Fill the conversion buffer, if it's empty */
+	if (upsample.next_row_out >= cinfo.max_v_samp_factor) {
+		for (ci = 0; ci < cinfo.num_components; ci++) {
+			compptr = cinfo.comp_info[ci];
+			/* Invoke per-component upsample method.	Notice we pass a POINTER
+			 * to color_buf[ci], so that fullsize_upsample can change it.
+			 */
+			int offset = input_buf_offset[ci] + (in_row_group_ctr[0] * upsample.rowgroup_height[ci]);
+			switch (upsample.methods[ci]) {
+				case NOOP_UPSAMPLE: noop_upsample(cinfo, compptr, input_buf[ci], offset, upsample.color_buf, upsample.color_buf_offset, ci); break;
+				case FULLSIZE_UPSAMPLE: fullsize_upsample(cinfo, compptr, input_buf[ci], offset, upsample.color_buf, upsample.color_buf_offset, ci); break;
+				case H2V1_FANCY_UPSAMPLE: h2v1_fancy_upsample(cinfo, compptr, input_buf[ci], offset, upsample.color_buf, upsample.color_buf_offset, ci); break;
+				case H2V1_UPSAMPLE: h2v1_upsample(cinfo, compptr, input_buf[ci], offset, upsample.color_buf, upsample.color_buf_offset, ci); break;
+				case H2V2_FANCY_UPSAMPLE: h2v2_fancy_upsample(cinfo, compptr, input_buf[ci], offset, upsample.color_buf, upsample.color_buf_offset, ci); break;
+				case H2V2_UPSAMPLE: h2v2_upsample(cinfo, compptr, input_buf[ci], offset, upsample.color_buf, upsample.color_buf_offset, ci); break;
+				case INT_UPSAMPLE: int_upsample(cinfo, compptr, input_buf[ci], offset, upsample.color_buf, upsample.color_buf_offset, ci); break;
+			}
+		}
+		upsample.next_row_out = 0;
+	}
+
+	/* Color-convert and emit rows */
+
+	/* How many we have in the buffer: */
+	num_rows =	(cinfo.max_v_samp_factor - upsample.next_row_out);
+	/* Not more than the distance to the end of the image.	Need this test
+	 * in case the image height is not a multiple of max_v_samp_factor:
+	 */
+	if (num_rows > upsample.rows_to_go) 
+		num_rows = upsample.rows_to_go;
+	/* And not more than what the client can accept: */
+	out_rows_avail -= out_row_ctr[0];
+	if (num_rows > out_rows_avail)
+		num_rows = out_rows_avail;
+
+	switch (cinfo.cconvert.color_convert) {
+		case NULL_CONVERT: null_convert (cinfo, upsample.color_buf, upsample.color_buf_offset, upsample.next_row_out, output_buf, out_row_ctr[0], num_rows); break;
+		case GRAYSCALE_CONVERT: grayscale_convert (cinfo, upsample.color_buf, upsample.color_buf_offset, upsample.next_row_out, output_buf, out_row_ctr[0], num_rows); break;
+		case YCC_RGB_CONVERT: ycc_rgb_convert (cinfo, upsample.color_buf, upsample.color_buf_offset, upsample.next_row_out, output_buf, out_row_ctr[0], num_rows); break;
+		case GRAY_RGB_CONVERT: gray_rgb_convert (cinfo, upsample.color_buf, upsample.color_buf_offset, upsample.next_row_out, output_buf, out_row_ctr[0], num_rows); break;
+		case YCCK_CMYK_CONVERT: error(); break;
+	}
+
+	/* Adjust counts */
+	out_row_ctr[0] += num_rows;
+	upsample.rows_to_go -= num_rows;
+	upsample.next_row_out += num_rows;
+	/* When the buffer is emptied, declare this input row group consumed */
+	if (upsample.next_row_out >= cinfo.max_v_samp_factor) {
+		in_row_group_ctr[0]++;
+	}
+}
+	
+static void noop_upsample (jpeg_decompress_struct cinfo, jpeg_component_info compptr,
+	 byte[][] input_data, int input_data_offset, byte[][][] output_data_ptr, int[] output_data_offset, int output_data_index)
+{
+	output_data_ptr[output_data_index] = null;	/* safety check */
+}
+	
+static void fullsize_upsample (jpeg_decompress_struct cinfo, jpeg_component_info compptr,
+	 byte[][] input_data, int input_data_offset, byte[][][] output_data_ptr, int[] output_data_offset, int output_data_index)
+{
+	output_data_ptr[output_data_index] = input_data;
+	output_data_offset[output_data_index] = input_data_offset;
+}
+	
+static void h2v1_upsample (jpeg_decompress_struct cinfo, jpeg_component_info compptr,
+	 byte[][] input_data, int input_data_offset, byte[][][] output_data_ptr, int[] output_data_offset, int output_data_index)
+{
+	byte[][] output_data = output_data_ptr[output_data_index];
+	byte[] inptr, outptr;
+	byte invalue;
+	int outend;
+	int inrow;
+	output_data_offset[output_data_index] = 0;
+
+	for (inrow = 0; inrow < cinfo.max_v_samp_factor; inrow++) {
+		inptr = input_data[inrow+input_data_offset];
+		outptr = output_data[inrow];
+		int inptr_offset = 0, outptr_offset = 0;
+		outend = outptr_offset + cinfo.output_width;
+		while (outptr_offset < outend) {
+			invalue = inptr[inptr_offset++];	/* don't need GETJSAMPLE() here */
+			outptr[outptr_offset++] = invalue;
+			outptr[outptr_offset++] = invalue;
+		}
+	}
+}
+	
+static void h2v2_upsample (jpeg_decompress_struct cinfo, jpeg_component_info compptr,
+	byte[][] input_data, int input_data_offset, byte[][][] output_data_ptr, int[] output_data_offset, int output_data_index)
+{
+	byte[][] output_data = output_data_ptr[output_data_index];
+	byte[] inptr, outptr;
+	byte invalue;
+	int outend;
+	int inrow, outrow;
+	output_data_offset[output_data_index] = 0;
+
+	inrow = outrow = 0;
+	while (outrow < cinfo.max_v_samp_factor) {
+		inptr = input_data[inrow+input_data_offset];
+		outptr = output_data[outrow];
+		int inptr_offset = 0, outptr_offset = 0;
+		outend = outptr_offset + cinfo.output_width;
+		while (outptr_offset < outend) {
+			invalue = inptr[inptr_offset++];	/* don't need GETJSAMPLE() here */
+			outptr[outptr_offset++] = invalue;
+			outptr[outptr_offset++] = invalue;
+		}
+		jcopy_sample_rows(output_data, outrow, output_data, outrow+1, 1, cinfo.output_width);
+		inrow++;
+		outrow += 2;
+	}
+}
+	
+static void h2v1_fancy_upsample (jpeg_decompress_struct cinfo, jpeg_component_info compptr,
+	 byte[][] input_data, int input_data_offset, byte[][][] output_data_ptr, int[] output_data_offset, int output_data_index)
+{
+	byte[][] output_data = output_data_ptr[output_data_index];
+	byte[] inptr, outptr;
+	int invalue;
+	int colctr;
+	int inrow;					
+	output_data_offset[output_data_index] = 0;
+
+	for (inrow = 0; inrow < cinfo.max_v_samp_factor; inrow++) {
+		inptr = input_data[inrow+input_data_offset];
+		outptr = output_data[inrow];
+		int inptr_offset = 0, outptr_offset = 0;
+		/* Special case for first column */
+		invalue = inptr[inptr_offset++] & 0xFF;
+		outptr[outptr_offset++] = (byte) invalue;
+		outptr[outptr_offset++] = (byte) ((invalue * 3 + (inptr[inptr_offset] & 0xFF) + 2) >> 2);
+
+		for (colctr = compptr.downsampled_width - 2; colctr > 0; colctr--) {
+			/* General case: 3/4 * nearer pixel + 1/4 * further pixel */
+			invalue = (inptr[inptr_offset++] & 0xFF) * 3;
+			outptr[outptr_offset++] = (byte) ((invalue + (inptr[inptr_offset-2] & 0xFF) + 1) >> 2);
+			outptr[outptr_offset++] = (byte) ((invalue + (inptr[inptr_offset] & 0xFF) + 2) >> 2);
+		}
+
+		/* Special case for last column */
+		invalue = (inptr[inptr_offset] & 0xFF);
+		outptr[outptr_offset++] = (byte) ((invalue * 3 + (inptr[inptr_offset-1] & 0xFF) + 1) >> 2);
+		outptr[outptr_offset++] = (byte) invalue;
+	}
+}
+	
+static void h2v2_fancy_upsample (jpeg_decompress_struct cinfo, jpeg_component_info compptr,
+	byte[][] input_data, int input_data_offset, byte[][][] output_data_ptr, int[] output_data_offset, int output_data_index)
+{
+	byte[][] output_data = output_data_ptr[output_data_index];
+	byte[] inptr0, inptr1, outptr;
+	int thiscolsum, lastcolsum, nextcolsum;
+	int colctr;
+	int inrow, outrow, v;
+	output_data_offset[output_data_index] = 0;
+
+	inrow = outrow = 0;
+	while (outrow < cinfo.max_v_samp_factor) {
+		for (v = 0; v < 2; v++) {
+			/* inptr0 points to nearest input row, inptr1 points to next nearest */
+			inptr0 = input_data[inrow+input_data_offset];
+			if (v == 0)		/* next nearest is row above */
+				inptr1 = input_data[inrow-1+input_data_offset];
+			else			/* next nearest is row below */
+				inptr1 = input_data[inrow+1+input_data_offset];
+			outptr = output_data[outrow++];
+				
+			int inptr0_offset = 0, inptr1_offset = 0, outptr_offset = 0;
+
+			/* Special case for first column */
+			thiscolsum = (inptr0[inptr0_offset++] & 0xFF) * 3 + (inptr1[inptr1_offset++] & 0xFF);
+			nextcolsum = (inptr0[inptr0_offset++] & 0xFF) * 3 + (inptr1[inptr1_offset++] & 0xFF);
+			outptr[outptr_offset++] = (byte) ((thiscolsum * 4 + 8) >> 4);
+			outptr[outptr_offset++] = (byte) ((thiscolsum * 3 + nextcolsum + 7) >> 4);
+			lastcolsum = thiscolsum; thiscolsum = nextcolsum;
+
+			for (colctr = compptr.downsampled_width - 2; colctr > 0; colctr--) {
+				/* General case: 3/4 * nearer pixel + 1/4 * further pixel in each */
+				/* dimension, thus 9/16, 3/16, 3/16, 1/16 overall */
+				nextcolsum = (inptr0[inptr0_offset++] & 0xFF) * 3 + (inptr1[inptr1_offset++] & 0xFF);
+				outptr[outptr_offset++] = (byte) ((thiscolsum * 3 + lastcolsum + 8) >> 4);
+				outptr[outptr_offset++] = (byte) ((thiscolsum * 3 + nextcolsum + 7) >> 4);
+				lastcolsum = thiscolsum; thiscolsum = nextcolsum;
+			}
+
+			/* Special case for last column */
+			outptr[outptr_offset++] = (byte) ((thiscolsum * 3 + lastcolsum + 8) >> 4);
+			outptr[outptr_offset++] = (byte) ((thiscolsum * 4 + 7) >> 4);
+		}
+		inrow++;
+	}
+}
+	
+static void int_upsample (jpeg_decompress_struct cinfo, jpeg_component_info compptr,
+	 byte[][] input_data, int input_data_offset, byte[][][] output_data_ptr, int[] output_data_offset, int output_data_index)
+{
+	jpeg_upsampler upsample = cinfo.upsample;
+	byte[][] output_data = output_data_ptr[output_data_index];
+	byte[] inptr, outptr;
+	byte invalue;
+	int h;
+	int outend;
+	int h_expand, v_expand;
+	int inrow, outrow;
+	output_data_offset[output_data_index] = 0;
+		
+	h_expand = upsample.h_expand[compptr.component_index];
+	v_expand = upsample.v_expand[compptr.component_index];
+
+	inrow = outrow = 0;
+	while (outrow < cinfo.max_v_samp_factor) {
+		/* Generate one output row with proper horizontal expansion */
+		inptr = input_data[inrow+input_data_offset];
+		int inptr_offset = 0;
+		outptr = output_data[outrow];
+		int outptr_offset = 0;
+		outend = outptr_offset + cinfo.output_width;
+		while (outptr_offset < outend) {
+			invalue = inptr[inptr_offset++];	/* don't need GETJSAMPLE() here */
+			for (h = h_expand; h > 0; h--) {
+				outptr[outptr_offset++] = invalue;
+			}
+		}
+		/* Generate any additional output rows by duplicating the first one */
+		if (v_expand > 1) {
+			jcopy_sample_rows(output_data, outrow, output_data, outrow+1, v_expand-1, cinfo.output_width);
+		}
+		inrow++;
+		outrow += v_expand;
+	}
+}
+
+static void null_convert (jpeg_decompress_struct cinfo,
+	byte[][][] input_buf, int[] input_buf_offset, int input_row,
+	byte[][] output_buf, int output_buf_offset, int num_rows)
+{
+	byte[] inptr, outptr;
+	int count;
+	int num_components = cinfo.num_components;
+	int num_cols = cinfo.output_width;
+	int ci;
+
+	while (--num_rows >= 0) {
+		for (ci = 0; ci < num_components; ci++) {
+			inptr = input_buf[ci][input_row+input_buf_offset[0]];
+			outptr = output_buf[output_buf_offset];
+			/* BGR instead of RGB */
+			int offset = 0;
+			switch (ci) {
+				case 2: offset = RGB_BLUE; break;
+				case 1: offset = RGB_GREEN; break;
+				case 0: offset = RGB_RED; break;
+			}
+			int outptr_offset = offset, inptr_offset = 0;
+			for (count = num_cols; count > 0; count--) {
+				outptr[outptr_offset] = inptr[inptr_offset++];	/* needn't bother with GETJSAMPLE() here */
+				outptr_offset += num_components;
+			}
+		}
+		input_row++;
+		output_buf_offset++;
+	}
+}
+	
+static void grayscale_convert (jpeg_decompress_struct cinfo,
+	byte[][][] input_buf, int[] input_buf_offset, int input_row,
+	byte[][] output_buf, int output_buf_offset, int num_rows)
+{
+  jcopy_sample_rows(input_buf[0], input_row+input_buf_offset[0], output_buf, output_buf_offset,
+		    num_rows, cinfo.output_width);
+}
+
+static void gray_rgb_convert (jpeg_decompress_struct cinfo,
+	byte[][][] input_buf, int[] input_buf_offset, int input_row,
+	byte[][] output_buf, int output_buf_offset, int num_rows)
+{
+	byte[] inptr, outptr;
+	int col;
+	int num_cols = cinfo.output_width;
+
+	while (--num_rows >= 0) {
+		inptr = input_buf[0][input_row+++input_buf_offset[0]];
+		outptr = output_buf[output_buf_offset++];
+		int outptr_offset = 0;
+		for (col = 0; col < num_cols; col++) {
+			/* We can dispense with GETJSAMPLE() here */
+			outptr[RGB_RED+outptr_offset] = outptr[RGB_GREEN+outptr_offset] = outptr[RGB_BLUE+outptr_offset] = inptr[col];
+			outptr_offset += RGB_PIXELSIZE;
+		}
+	}
+}
+	
+static void ycc_rgb_convert (jpeg_decompress_struct cinfo,
+	byte[][][] input_buf, int[] input_buf_offset, int input_row,
+	byte[][] output_buf, int output_buf_offset, int num_rows)
+{
+	jpeg_color_deconverter cconvert = cinfo.cconvert;
+	int y, cb, cr;
+	byte[] outptr;
+	byte[] inptr0, inptr1, inptr2;
+	int col;
+	int num_cols = cinfo.output_width;
+	/* copy these pointers into registers if possible */
+	byte[] range_limit = cinfo.sample_range_limit;
+	int range_limit_offset = cinfo.sample_range_limit_offset;
+	int[] Crrtab = cconvert.Cr_r_tab;
+	int[] Cbbtab = cconvert.Cb_b_tab;
+	int[] Crgtab = cconvert.Cr_g_tab;
+	int[] Cbgtab = cconvert.Cb_g_tab;
+//		SHIFT_TEMPS
+
+	while (--num_rows >= 0) {
+		inptr0 = input_buf[0][input_row+input_buf_offset[0]];
+		inptr1 = input_buf[1][input_row+input_buf_offset[1]];
+		inptr2 = input_buf[2][input_row+input_buf_offset[2]];
+		input_row++;
+		outptr = output_buf[output_buf_offset++];
+		int outptr_offset = 0;
+		for (col = 0; col < num_cols; col++) {
+			y = (inptr0[col] & 0xFF);
+			cb = (inptr1[col] & 0xFF);
+			cr = (inptr2[col] & 0xFF);
+			/* Range-limiting is essential due to noise introduced by DCT losses. */
+			outptr[outptr_offset + RGB_RED] =	range_limit[y + Crrtab[cr] + range_limit_offset];
+			outptr[outptr_offset + RGB_GREEN] = range_limit[y + ((Cbgtab[cb] + Crgtab[cr]>>SCALEBITS)) + range_limit_offset];
+			outptr[outptr_offset + RGB_BLUE] =	range_limit[y + Cbbtab[cb] + range_limit_offset];
+			outptr_offset += RGB_PIXELSIZE;
+		}
+	}
+}
+
+static boolean process_APPn(int n, jpeg_decompress_struct cinfo) {
+	if (n == 0 || n == 14) {
+		return get_interesting_appn(cinfo);
+	}
+	return skip_variable(cinfo);
+}
+
+static boolean process_COM(jpeg_decompress_struct cinfo) {
+	return skip_variable(cinfo);
+}
+
+static void skip_input_data (jpeg_decompress_struct cinfo, int num_bytes) {
+	if (num_bytes > 0) {
+		while (num_bytes > cinfo.bytes_in_buffer - cinfo.bytes_offset) {
+			num_bytes -= cinfo.bytes_in_buffer - cinfo.bytes_offset;
+			if (!fill_input_buffer(cinfo)) error();
+			/* note we assume that fill_input_buffer will never return FALSE,
+			 * so suspension need not be handled.
+			 */
+		}
+		cinfo.bytes_offset += num_bytes;
+	}
+}
+
+static boolean skip_variable (jpeg_decompress_struct cinfo)
+/* Skip over an unknown or uninteresting variable-length marker */
+{
+	int length;
+
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	length = (cinfo.buffer[cinfo.bytes_offset++] & 0xFF) << 8;
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	length |= cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+
+	length -= 2;
+	
+//	TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo.unread_marker, (int) length);
+
+	if (length > 0) {
+		skip_input_data (cinfo, length);
+	}
+	
+	return true;
+}
+
+static boolean get_interesting_appn (jpeg_decompress_struct cinfo)
+/* Process an APP0 or APP14 marker without saving it */
+{
+	int length;
+	byte[] b = new byte[APPN_DATA_LEN];
+	int i, numtoread;
+
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	length = (cinfo.buffer[cinfo.bytes_offset++] & 0xFF) << 8;
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	length |= cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+	length -= 2;
+
+	/* get the interesting part of the marker data */
+	if (length >= APPN_DATA_LEN)
+		numtoread = APPN_DATA_LEN;
+	else if (length > 0)
+		numtoread = length;
+	else
+		numtoread = 0;
+	for (i = 0; i < numtoread; i++) {
+		if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+		b[i] = cinfo.buffer[cinfo.bytes_offset++];
+	}
+	length -= numtoread;
+
+	/* process it */
+	switch (cinfo.unread_marker) {
+		case M_APP0:
+			examine_app0(cinfo, b, numtoread, length);
+			break;
+		case M_APP14:
+			examine_app14(cinfo, b, numtoread, length);
+			break;
+		default:
+			/* can't get here unless jpeg_save_markers chooses wrong processor */
+			error();
+//			ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo.unread_marker);
+			break;
+	}
+
+	/* skip any remaining data -- could be lots */
+	if (length > 0)
+		skip_input_data (cinfo, length);
+
+	return true;
+}
+
+static void examine_app0 (jpeg_decompress_struct cinfo, byte[] data, int datalen, int remaining)
+/* Examine first few bytes from an APP0.
+ * Take appropriate action if it is a JFIF marker.
+ * datalen is # of bytes at data[], remaining is length of rest of marker data.
+ */
+{
+	int totallen = datalen + remaining;
+
+	if (datalen >= APP0_DATA_LEN &&
+			(data[0] & 0xFF) == 0x4A &&
+			(data[1] & 0xFF) == 0x46 &&
+			(data[2] & 0xFF) == 0x49 &&
+			(data[3] & 0xFF) == 0x46 &&
+			(data[4] & 0xFF) == 0)
+	{
+		/* Found JFIF APP0 marker: save info */
+		cinfo.saw_JFIF_marker = true;
+		cinfo.JFIF_major_version = (data[5]);
+		cinfo.JFIF_minor_version = (byte)(data[6] & 0xFF);
+		cinfo.density_unit = (byte)(data[7] & 0xFF);
+		cinfo.X_density = (short)(((data[8] & 0xFF) << 8) + (data[9] & 0xFF));
+		cinfo.Y_density = (short)(((data[10] & 0xFF) << 8) + (data[11] & 0xFF));
+		/* Check version.
+		 * Major version must be 1, anything else signals an incompatible change.
+		 * (We used to treat this as an error, but now it's a nonfatal warning,
+		 * because some bozo at Hijaak couldn't read the spec.)
+		 * Minor version should be 0..2, but process anyway if newer.
+		 */
+		if (cinfo.JFIF_major_version != 1) {
+//			WARNMS2(cinfo, JWRN_JFIF_MAJOR,
+//				cinfo.JFIF_major_version, cinfo.JFIF_minor_version);
+		}
+		/* Generate trace messages */
+//		TRACEMS5(cinfo, 1, JTRC_JFIF,
+//			 cinfo.JFIF_major_version, cinfo.JFIF_minor_version,
+//			 cinfo.X_density, cinfo.Y_density, cinfo.density_unit);
+		/* Validate thumbnail dimensions and issue appropriate messages */
+		if (((data[12] & 0xFF) | (data[13]) & 0xFF) != 0) {
+//			TRACEMS2(cinfo, 1, JTRC_JFIF_THUMBNAIL,
+//				 GETJOCTET(data[12]), GETJOCTET(data[13]));
+		}
+		totallen -= APP0_DATA_LEN;
+		if (totallen !=	((data[12] & 0xFF) * (data[13] & 0xFF) * 3)) {
+//			TRACEMS1(cinfo, 1, JTRC_JFIF_BADTHUMBNAILSIZE, (int) totallen);
+		}
+	} else if (datalen >= 6 &&
+			(data[0] & 0xFF) == 0x4A &&
+			(data[1] & 0xFF) == 0x46 &&
+			(data[2] & 0xFF) == 0x58 &&
+			(data[3] & 0xFF) == 0x58 &&
+			(data[4] & 0xFF) == 0)
+	{
+		/* Found JFIF "JFXX" extension APP0 marker */
+		/* The library doesn't actually do anything with these,
+		 * but we try to produce a helpful trace message.
+		 */
+		switch ((data[5]) & 0xFF) {
+			case 0x10:
+//				TRACEMS1(cinfo, 1, JTRC_THUMB_JPEG, (int) totallen);
+				break;
+			case 0x11:
+//				TRACEMS1(cinfo, 1, JTRC_THUMB_PALETTE, (int) totallen);
+				break;
+			case 0x13:
+//				TRACEMS1(cinfo, 1, JTRC_THUMB_RGB, (int) totallen);
+				break;
+			default:
+//				TRACEMS2(cinfo, 1, JTRC_JFIF_EXTENSION, GETJOCTET(data[5]), (int) totallen);
+			break;
+		}
+	} else {
+		/* Start of APP0 does not match "JFIF" or "JFXX", or too short */
+//		TRACEMS1(cinfo, 1, JTRC_APP0, (int) totallen);
+	}
+}
+
+static void examine_app14 (jpeg_decompress_struct cinfo, byte[] data, int datalen, int remaining)
+/* Examine first few bytes from an APP14.
+ * Take appropriate action if it is an Adobe marker.
+ * datalen is # of bytes at data[], remaining is length of rest of marker data.
+ */
+{
+	int /*version, flags0, flags1, */transform;
+
+	if (datalen >= APP14_DATA_LEN &&
+			(data[0] & 0xFF) == 0x41 &&
+			(data[1] & 0xFF) == 0x64 &&
+			(data[2] & 0xFF) == 0x6F &&
+			(data[3] & 0xFF) == 0x62 &&
+			(data[4] & 0xFF) == 0x65)
+	{
+		/* Found Adobe APP14 marker */
+//		version = ((data[5] & 0xFF) << 8) + (data[6] & 0xFF);
+//		flags0 = ((data[7] & 0xFF) << 8) + (data[8] & 0xFF);
+//		flags1 = ((data[9] & 0xFF) << 8) + (data[10] & 0xFF);
+		transform = (data[11] & 0xFF);
+//		TRACEMS4(cinfo, 1, JTRC_ADOBE, version, flags0, flags1, transform);
+		cinfo.saw_Adobe_marker = true;
+		cinfo.Adobe_transform = (byte) transform;
+	} else {
+		/* Start of APP14 does not match "Adobe", or too short */
+//		TRACEMS1(cinfo, 1, JTRC_APP14, (int) (datalen + remaining));
+	}
+}
+
+static boolean get_soi (jpeg_decompress_struct cinfo) /* Process an SOI marker */ {
+	int i;
+	
+//	TRACEMS(cinfo, 1, JTRC_SOI);
+
+	if (cinfo.marker.saw_SOI)
+		error();
+//		ERREXIT(cinfo, JERR_SOI_DUPLICATE);
+
+	/* Reset all parameters that are defined to be reset by SOI */
+
+	for (i = 0; i < NUM_ARITH_TBLS; i++) {
+		cinfo.arith_dc_L[i] = 0;
+		cinfo.arith_dc_U[i] = 1;
+		cinfo.arith_ac_K[i] = 5;
+	}
+	cinfo.restart_interval = 0;
+
+	/* Set initial assumptions for colorspace etc */
+
+	cinfo.jpeg_color_space = JCS_UNKNOWN;
+	cinfo.CCIR601_sampling = false; /* Assume non-CCIR sampling??? */
+
+	cinfo.saw_JFIF_marker = false;
+	cinfo.JFIF_major_version = 1; /* set default JFIF APP0 values */
+	cinfo.JFIF_minor_version = 1;
+	cinfo.density_unit = 0;
+	cinfo.X_density = 1;
+	cinfo.Y_density = 1;
+	cinfo.saw_Adobe_marker = false;
+	cinfo.Adobe_transform = 0;
+
+	cinfo.marker.saw_SOI = true;
+
+	return true;
+}
+
+static void jinit_input_controller (jpeg_decompress_struct cinfo)
+{
+	/* Initialize state: can't use reset_input_controller since we don't
+	 * want to try to reset other modules yet.
+	 */
+	jpeg_input_controller inputctl = cinfo.inputctl = new jpeg_input_controller();
+	inputctl.has_multiple_scans = false; /* "unknown" would be better */
+	inputctl.eoi_reached = false;
+	inputctl.inheaders = true;
+}
+
+static void reset_marker_reader (jpeg_decompress_struct cinfo) {
+	jpeg_marker_reader marker = cinfo.marker;
+
+	cinfo.comp_info = null;		/* until allocated by get_sof */
+	cinfo.input_scan_number = 0;		/* no SOS seen yet */
+	cinfo.unread_marker = 0;		/* no pending marker */
+	marker.saw_SOI = false;		/* set internal state too */
+	marker.saw_SOF = false;
+	marker.discarded_bytes = 0;
+//	marker.cur_marker = null;
+}
+
+static void reset_input_controller (jpeg_decompress_struct cinfo) {
+	jpeg_input_controller inputctl = cinfo.inputctl;
+
+	inputctl.has_multiple_scans = false; /* "unknown" would be better */
+	inputctl.eoi_reached = false;
+	inputctl.inheaders = true;
+	/* Reset other modules */
+	reset_marker_reader (cinfo);
+	/* Reset progression state -- would be cleaner if entropy decoder did this */
+	cinfo.coef_bits = null;
+}
+
+static void finish_output_pass (jpeg_decompress_struct cinfo) {
+	jpeg_decomp_master master = cinfo.master;
+
+	if (cinfo.quantize_colors) {
+		error(SWT.ERROR_NOT_IMPLEMENTED);
+//		(*cinfo.cquantize.finish_pass) (cinfo);
+	}
+	master.pass_number++;
+}
+
+static void jpeg_destroy (jpeg_decompress_struct cinfo) {
+	/* We need only tell the memory manager to release everything. */
+	/* NB: mem pointer is NULL if memory mgr failed to initialize. */
+//	if (cinfo.mem != NULL)
+//		(*cinfo.mem.self_destruct) (cinfo);
+//	cinfo.mem = NULL;		/* be safe if jpeg_destroy is called twice */
+	cinfo.global_state = 0;	/* mark it destroyed */
+}
+
+static void jpeg_destroy_decompress (jpeg_decompress_struct cinfo) {
+	jpeg_destroy(cinfo); /* use common routine */
+}
+
+static boolean jpeg_input_complete (jpeg_decompress_struct cinfo) {
+	/* Check for valid jpeg object */
+	if (cinfo.global_state < DSTATE_START || cinfo.global_state > DSTATE_STOPPING)
+		error();
+//		ERREXIT1(cinfo, JERR_BAD_STATE, cinfo.global_state);
+	return cinfo.inputctl.eoi_reached;
+}
+
+static boolean jpeg_start_output (jpeg_decompress_struct cinfo, int scan_number) {
+	if (cinfo.global_state != DSTATE_BUFIMAGE && cinfo.global_state != DSTATE_PRESCAN)
+		error();
+//		ERREXIT1(cinfo, JERR_BAD_STATE, cinfo.global_state);
+	/* Limit scan number to valid range */
+	if (scan_number <= 0)
+		scan_number = 1;
+	if (cinfo.inputctl.eoi_reached && scan_number > cinfo.input_scan_number)
+		scan_number = cinfo.input_scan_number;
+	cinfo.output_scan_number = scan_number;
+	/* Perform any dummy output passes, and set up for the real pass */
+	return output_pass_setup(cinfo);
+}
+
+static boolean jpeg_finish_output (jpeg_decompress_struct cinfo) {
+	if ((cinfo.global_state == DSTATE_SCANNING || cinfo.global_state == DSTATE_RAW_OK) && cinfo.buffered_image) {
+		/* Terminate this pass. */
+		/* We do not require the whole pass to have been completed. */
+		finish_output_pass (cinfo);
+		cinfo.global_state = DSTATE_BUFPOST;
+	} else if (cinfo.global_state != DSTATE_BUFPOST) {
+		/* BUFPOST = repeat call after a suspension, anything else is error */
+		error();
+//		ERREXIT1(cinfo, JERR_BAD_STATE, cinfo.global_state);
+	}
+	/* Read markers looking for SOS or EOI */
+	while (cinfo.input_scan_number <= cinfo.output_scan_number && !cinfo.inputctl.eoi_reached) {
+		if (consume_input (cinfo) == JPEG_SUSPENDED)
+			return false;		/* Suspend, come back later */
+	}
+	cinfo.global_state = DSTATE_BUFIMAGE;
+	return true;
+}
+
+static boolean jpeg_finish_decompress (jpeg_decompress_struct cinfo) {
+	if ((cinfo.global_state == DSTATE_SCANNING || cinfo.global_state == DSTATE_RAW_OK) && ! cinfo.buffered_image) {
+		/* Terminate final pass of non-buffered mode */
+		if (cinfo.output_scanline < cinfo.output_height)
+			error();
+//			ERREXIT(cinfo, JERR_TOO_LITTLE_DATA);
+		finish_output_pass (cinfo);
+		cinfo.global_state = DSTATE_STOPPING;
+	} else if (cinfo.global_state == DSTATE_BUFIMAGE) {
+		/* Finishing after a buffered-image operation */
+		cinfo.global_state = DSTATE_STOPPING;
+	} else if (cinfo.global_state != DSTATE_STOPPING) {
+		/* STOPPING = repeat call after a suspension, anything else is error */
+		error();
+//		ERREXIT1(cinfo, JERR_BAD_STATE, cinfo.global_state);
+	}
+	/* Read until EOI */
+	while (! cinfo.inputctl.eoi_reached) {
+		if (consume_input (cinfo) == JPEG_SUSPENDED)
+			return false;		/* Suspend, come back later */
+	}
+	/* Do final cleanup */
+//	(*cinfo.src.term_source) (cinfo);
+	/* We can use jpeg_abort to release memory and reset global_state */
+	jpeg_abort(cinfo);
+	return true;
+}
+
+
+static int jpeg_read_header (jpeg_decompress_struct cinfo, boolean require_image) {
+	int retcode;
+
+	if (cinfo.global_state != DSTATE_START && cinfo.global_state != DSTATE_INHEADER)
+		error();
+//		ERREXIT1(cinfo, JERR_BAD_STATE, cinfo.global_state);
+
+	retcode = jpeg_consume_input(cinfo);
+
+	switch (retcode) {
+		case JPEG_REACHED_SOS:
+			retcode = JPEG_HEADER_OK;
+			break;
+		case JPEG_REACHED_EOI:
+			if (require_image)		/* Complain if application wanted an image */
+				error();
+//				ERREXIT(cinfo, JERR_NO_IMAGE);
+			/* Reset to start state; it would be safer to require the application to
+			 * call jpeg_abort, but we can't change it now for compatibility reasons.
+			 * A side effect is to free any temporary memory (there shouldn't be any).
+			 */
+			jpeg_abort(cinfo); /* sets state = DSTATE_START */
+			retcode = JPEG_HEADER_TABLES_ONLY;
+			break;
+		case JPEG_SUSPENDED:
+			/* no work */
+			break;
+	}
+
+	return retcode;
+}
+
+static int dummy_consume_data (jpeg_decompress_struct cinfo) {
+	return JPEG_SUSPENDED;	/* Always indicate nothing was done */
+}
+
+static int consume_data (jpeg_decompress_struct cinfo) {
+	jpeg_d_coef_controller coef = cinfo.coef;
+	int MCU_col_num;	/* index of current MCU within row */
+	int blkn, ci, xindex, yindex, yoffset;
+	int start_col;
+//	short[][][][] buffer = new short[MAX_COMPS_IN_SCAN][][][];
+	short[][] buffer_ptr;
+	jpeg_component_info compptr;
+
+//	/* Align the virtual buffers for the components used in this scan. */
+//	for (ci = 0; ci < cinfo.comps_in_scan; ci++) {
+//		compptr = cinfo.cur_comp_info[ci];
+//		buffer[ci] = coef.whole_image[compptr.component_index];
+//		/* Note: entropy decoder expects buffer to be zeroed,
+//		 * but this is handled automatically by the memory manager
+//		 * because we requested a pre-zeroed array.
+//		 */
+//	}
+
+	/* Loop to process one whole iMCU row */
+	for (yoffset = coef.MCU_vert_offset; yoffset < coef.MCU_rows_per_iMCU_row; yoffset++) {
+		for (MCU_col_num = coef.MCU_ctr; MCU_col_num < cinfo.MCUs_per_row; MCU_col_num++) {
+			/* Construct list of pointers to DCT blocks belonging to this MCU */
+			blkn = 0; /* index of current DCT block within MCU */
+			for (ci = 0; ci < cinfo.comps_in_scan; ci++) {
+				compptr = cinfo.cur_comp_info[ci];
+				start_col = MCU_col_num * compptr.MCU_width;
+				for (yindex = 0; yindex < compptr.MCU_height; yindex++) {
+//					buffer_ptr = buffer[ci][yindex+yoffset] + start_col;
+					buffer_ptr = coef.whole_image[compptr.component_index][yindex+yoffset+cinfo.input_iMCU_row*compptr.v_samp_factor];
+					int buffer_ptr_offset = start_col;
+					for (xindex = 0; xindex < compptr.MCU_width; xindex++) {
+						coef.MCU_buffer[blkn++] = buffer_ptr[buffer_ptr_offset++];
+					}
+				}
+			}
+			/* Try to fetch the MCU. */
+			if (! cinfo.entropy.decode_mcu (cinfo, coef.MCU_buffer)) {
+				/* Suspension forced; update state counters and exit */
+				coef.MCU_vert_offset = yoffset;
+				coef.MCU_ctr = MCU_col_num;
+				return JPEG_SUSPENDED;
+			}
+		}
+		/* Completed an MCU row, but perhaps not an iMCU row */
+		coef.MCU_ctr = 0;
+	}
+	/* Completed the iMCU row, advance counters for next one */
+	if (++(cinfo.input_iMCU_row) < cinfo.total_iMCU_rows) {
+		coef.start_iMCU_row(cinfo);
+		return JPEG_ROW_COMPLETED;
+	}
+	/* Completed the scan */
+	finish_input_pass (cinfo);
+	return JPEG_SCAN_COMPLETED;
+}
+
+static int consume_input (jpeg_decompress_struct cinfo) {
+	switch (cinfo.inputctl.consume_input) {
+		case COEF_CONSUME_INPUT:
+			 switch (cinfo.coef.consume_data) {
+				case CONSUME_DATA: return consume_data(cinfo);
+				case DUMMY_CONSUME_DATA: return dummy_consume_data(cinfo);
+				default: error();
+			 }
+			 break;
+		case INPUT_CONSUME_INPUT:
+			return consume_markers(cinfo);
+		default:
+			error();
+	}
+	return 0;	
+}
+
+static boolean fill_input_buffer(jpeg_decompress_struct cinfo) {
+	try {
+		InputStream inputStream = cinfo.inputStream;
+		int nbytes = inputStream.read(cinfo.buffer);
+		if (nbytes <= 0) {
+			if (cinfo.start_of_file)	/* Treat empty input file as fatal error */
+				error();
+//				ERREXIT(cinfo, JERR_INPUT_EMPTY);
+//			WARNMS(cinfo, JWRN_JPEG_EOF);
+			/* Insert a fake EOI marker */
+			cinfo.buffer[0] = (byte)0xFF;
+			cinfo.buffer[1] = (byte)M_EOI;
+			nbytes = 2;
+		}
+		cinfo.bytes_in_buffer = nbytes;
+		cinfo.bytes_offset = 0;
+		cinfo.start_of_file = false;
+	} catch (IOException e) {
+		error(SWT.ERROR_IO);
+		return false;
+	}
+	return true;
+}
+
+static boolean first_marker (jpeg_decompress_struct cinfo) {
+	/* Like next_marker, but used to obtain the initial SOI marker. */
+	/* For this marker, we do not allow preceding garbage or fill; otherwise,
+	 * we might well scan an entire input file before realizing it ain't JPEG.
+	 * If an application wants to process non-JFIF files, it must seek to the
+	 * SOI before calling the JPEG library.
+	 */
+	int c, c2;
+
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	c = cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+	if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+	c2 = cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+	if (c != 0xFF || c2 != M_SOI)
+		error();
+//		ERREXIT2(cinfo, JERR_NO_SOI, c, c2);
+
+	cinfo.unread_marker = c2;
+
+	return true;
+}
+
+static boolean next_marker (jpeg_decompress_struct cinfo) {
+	int c;
+
+	for (;;) {
+		if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+		c = cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+		/* Skip any non-FF bytes.
+		 * This may look a bit inefficient, but it will not occur in a valid file.
+		 * We sync after each discarded byte so that a suspending data source
+		 * can discard the byte from its buffer.
+		 */
+		while (c != 0xFF) {
+			cinfo.marker.discarded_bytes++;
+			if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+			c = cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+		}
+		/* This loop swallows any duplicate FF bytes.	Extra FFs are legal as
+		 * pad bytes, so don't count them in discarded_bytes.	We assume there
+		 * will not be so many consecutive FF bytes as to overflow a suspending
+		 * data source's input buffer.
+		 */
+		do {
+			 if (cinfo.bytes_offset == cinfo.bytes_in_buffer) fill_input_buffer(cinfo);
+				c = cinfo.buffer[cinfo.bytes_offset++] & 0xFF;
+		} while (c == 0xFF);
+		if (c != 0)
+			break;			/* found a valid marker, exit loop */
+		/* Reach here if we found a stuffed-zero data sequence (FF/00).
+		 * Discard it and loop back to try again.
+		 */
+		cinfo.marker.discarded_bytes += 2;
+	}
+
+	if (cinfo.marker.discarded_bytes != 0) {
+//		WARNMS2(cinfo, JWRN_EXTRANEOUS_DATA, cinfo.marker.discarded_bytes, c);
+		cinfo.marker.discarded_bytes = 0;
+	}
+
+	cinfo.unread_marker = c;
+
+	return true;
+}
+
+static int read_markers (jpeg_decompress_struct cinfo) {
+	/* Outer loop repeats once for each marker. */
+	for (;;) {
+		/* Collect the marker proper, unless we already did. */
+		/* NB: first_marker() enforces the requirement that SOI appear first. */
+		if (cinfo.unread_marker == 0) {
+			if (! cinfo.marker.saw_SOI) {
+				if (! first_marker(cinfo))
+					return JPEG_SUSPENDED;
+				} else {
+					if (! next_marker(cinfo))
+						return JPEG_SUSPENDED;
+				}
+		}
+		/* At this point cinfo.unread_marker contains the marker code and the
+		 * input point is just past the marker proper, but before any parameters.
+		 * A suspension will cause us to return with this state still true.
+		 */
+		switch (cinfo.unread_marker) {
+			case M_SOI:
+				if (! get_soi(cinfo))
+					return JPEG_SUSPENDED;
+				break;
+
+			case M_SOF0:		/* Baseline */
+			case M_SOF1:		/* Extended sequential, Huffman */
+				if (! get_sof(cinfo, false, false))
+					return JPEG_SUSPENDED;
+				break;
+
+			case M_SOF2:		/* Progressive, Huffman */
+				if (! get_sof(cinfo, true, false))
+					return JPEG_SUSPENDED;
+				break;
+
+			case M_SOF9:		/* Extended sequential, arithmetic */
+				if (! get_sof(cinfo, false, true))
+					return JPEG_SUSPENDED;
+				break;
+
+			case M_SOF10:		/* Progressive, arithmetic */
+				if (! get_sof(cinfo, true, true))
+					return JPEG_SUSPENDED;
+				break;
+
+			/* Currently unsupported SOFn types */
+			case M_SOF3:		/* Lossless, Huffman */
+			case M_SOF5:		/* Differential sequential, Huffman */
+			case M_SOF6:		/* Differential progressive, Huffman */
+			case M_SOF7:		/* Differential lossless, Huffman */
+			case M_JPG:			/* Reserved for JPEG extensions */
+			case M_SOF11:		/* Lossless, arithmetic */
+			case M_SOF13:		/* Differential sequential, arithmetic */
+			case M_SOF14:		/* Differential progressive, arithmetic */
+			case M_SOF15:		/* Differential lossless, arithmetic */
+				error();
+//				ERREXIT1(cinfo, JERR_SOF_UNSUPPORTED, cinfo.unread_marker);
+				break;
+
+			case M_SOS:
+				if (! get_sos(cinfo))
+					return JPEG_SUSPENDED;
+				cinfo.unread_marker = 0;	/* processed the marker */
+				return JPEG_REACHED_SOS;
+	
+			case M_EOI:
+//				TRACEMS(cinfo, 1, JTRC_EOI);
+				cinfo.unread_marker = 0;	/* processed the marker */
+				return JPEG_REACHED_EOI;
+		
+			case M_DAC:
+				if (! get_dac(cinfo))
+					return JPEG_SUSPENDED;
+				break;
+		
+			case M_DHT:
+				if (! get_dht(cinfo))
+					return JPEG_SUSPENDED;
+				break;
+		
+			case M_DQT:
+				if (! get_dqt(cinfo))
+					return JPEG_SUSPENDED;
+				break;
+		
+			case M_DRI:
+				if (! get_dri(cinfo))
+					return JPEG_SUSPENDED;
+				break;
+		
+			case M_APP0:
+			case M_APP1:
+			case M_APP2:
+			case M_APP3:
+			case M_APP4:
+			case M_APP5:
+			case M_APP6:
+			case M_APP7:
+			case M_APP8:
+			case M_APP9:
+			case M_APP10:
+			case M_APP11:
+			case M_APP12:
+			case M_APP13:
+			case M_APP14:
+			case M_APP15:
+				if (! process_APPn(cinfo.unread_marker - M_APP0, cinfo))
+					return JPEG_SUSPENDED;
+				break;
+		
+			case M_COM:
+				if (! process_COM(cinfo))
+					return JPEG_SUSPENDED;
+				break;
+
+			case M_RST0:		/* these are all parameterless */
+			case M_RST1:
+			case M_RST2:
+			case M_RST3:
+			case M_RST4:
+			case M_RST5:
+			case M_RST6:
+			case M_RST7:
+			case M_TEM:
+//				TRACEMS1(cinfo, 1, JTRC_PARMLESS_MARKER, cinfo.unread_marker);
+				break;
+
+			case M_DNL:			/* Ignore DNL ... perhaps the wrong thing */
+				if (! skip_variable(cinfo))
+					return JPEG_SUSPENDED;
+				break;
+
+			default:			/* must be DHP, EXP, JPGn, or RESn */
+				/* For now, we treat the reserved markers as fatal errors since they are
+				 * likely to be used to signal incompatible JPEG Part 3 extensions.
+				 * Once the JPEG 3 version-number marker is well defined, this code
+				 * ought to change!
+				 */
+				error();
+ //		 		ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo.unread_marker);
+				break;
+		}
+		/* Successfully processed marker, so reset state variable */
+		cinfo.unread_marker = 0;
+	} /* end loop */
+}
+
+static long jdiv_round_up (long a, long b)
+/* Compute a/b rounded up to next integer, ie, ceil(a/b) */
+/* Assumes a >= 0, b > 0 */
+{
+	return (a + b - 1) / b;
+}
+
+static void initial_setup (jpeg_decompress_struct cinfo)
+/* Called once, when first SOS marker is reached */
+{
+	int ci;
+	jpeg_component_info compptr;
+
+	/* Make sure image isn't bigger than I can handle */
+	if (cinfo.image_height >	JPEG_MAX_DIMENSION || cinfo.image_width > JPEG_MAX_DIMENSION)
+		error();
+//		ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) JPEG_MAX_DIMENSION);
+
+	/* For now, precision must match compiled-in value... */
+	if (cinfo.data_precision != BITS_IN_JSAMPLE)
+		error(" [data precision=" + cinfo.data_precision + "]");
+//		ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo.data_precision);
+
+	/* Check that number of components won't exceed internal array sizes */
+	if (cinfo.num_components > MAX_COMPONENTS)
+		error();
+//		ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo.num_components, MAX_COMPONENTS);
+
+	/* Compute maximum sampling factors; check factor validity */
+	cinfo.max_h_samp_factor = 1;
+	cinfo.max_v_samp_factor = 1;
+	for (ci = 0; ci < cinfo.num_components; ci++) {
+		compptr = cinfo.comp_info[ci];
+		if (compptr.h_samp_factor<=0 || compptr.h_samp_factor>MAX_SAMP_FACTOR || compptr.v_samp_factor<=0 || compptr.v_samp_factor>MAX_SAMP_FACTOR)
+			error();
+//			ERREXIT(cinfo, JERR_BAD_SAMPLING);
+		cinfo.max_h_samp_factor = Math.max(cinfo.max_h_samp_factor, compptr.h_samp_factor);
+		cinfo.max_v_samp_factor = Math.max(cinfo.max_v_samp_factor, compptr.v_samp_factor);
+	}
+
+	/* We initialize DCT_scaled_size and min_DCT_scaled_size to DCTSIZE.
+	 * In the full decompressor, this will be overridden by jdmaster.c;
+	 * but in the transcoder, jdmaster.c is not used, so we must do it here.
+	 */
+	cinfo.min_DCT_scaled_size = DCTSIZE;
+
+	/* Compute dimensions of components */
+	for (ci = 0; ci < cinfo.num_components; ci++) {
+		compptr = cinfo.comp_info[ci];
+		compptr.DCT_scaled_size = DCTSIZE;
+		/* Size in DCT blocks */
+		compptr.width_in_blocks = (int)jdiv_round_up((long) cinfo.image_width * (long) compptr.h_samp_factor, (cinfo.max_h_samp_factor * DCTSIZE));
+		compptr.height_in_blocks = (int)jdiv_round_up((long) cinfo.image_height * (long) compptr.v_samp_factor, (cinfo.max_v_samp_factor * DCTSIZE));
+		/* downsampled_width and downsampled_height will also be overridden by
+		 * jdmaster.c if we are doing full decompression.	The transcoder library
+		 * doesn't use these values, but the calling application might.
+		 */
+		/* Size in samples */
+		compptr.downsampled_width = (int)jdiv_round_up((long) cinfo.image_width * (long) compptr.h_samp_factor,	cinfo.max_h_samp_factor);
+		compptr.downsampled_height = (int)jdiv_round_up((long) cinfo.image_height * (long) compptr.v_samp_factor, cinfo.max_v_samp_factor);
+		/* Mark component needed, until color conversion says otherwise */
+		compptr.component_needed = true;
+		/* Mark no quantization table yet saved for component */
+		compptr.quant_table = null;
+	}
+
+	/* Compute number of fully interleaved MCU rows. */
+	cinfo.total_iMCU_rows = (int)jdiv_round_up( cinfo.image_height, (cinfo.max_v_samp_factor*DCTSIZE));
+
+	/* Decide whether file contains multiple scans */
+	if (cinfo.comps_in_scan < cinfo.num_components || cinfo.progressive_mode)
+		cinfo.inputctl.has_multiple_scans = true;
+	else
+		cinfo.inputctl.has_multiple_scans = false;
+}
+
+
+static void per_scan_setup (jpeg_decompress_struct cinfo)
+/* Do computations that are needed before processing a JPEG scan */
+/* cinfo.comps_in_scan and cinfo.cur_comp_info[] were set from SOS marker */
+{
+	int ci, mcublks, tmp = 0;
+	jpeg_component_info compptr;
+	
+	if (cinfo.comps_in_scan == 1) {
+		
+		/* Noninterleaved (single-component) scan */
+		compptr = cinfo.cur_comp_info[0];
+		
+		/* Overall image size in MCUs */
+		cinfo.MCUs_per_row = compptr.width_in_blocks;
+		cinfo.MCU_rows_in_scan = compptr.height_in_blocks;
+		
+		/* For noninterleaved scan, always one block per MCU */
+		compptr.MCU_width = 1;
+		compptr.MCU_height = 1;
+		compptr.MCU_blocks = 1;
+		compptr.MCU_sample_width = compptr.DCT_scaled_size;
+		compptr.last_col_width = 1;
+		/* For noninterleaved scans, it is convenient to define last_row_height
+		 * as the number of block rows present in the last iMCU row.
+		 */
+		tmp = (compptr.height_in_blocks % compptr.v_samp_factor);
+		if (tmp == 0) tmp = compptr.v_samp_factor;
+		compptr.last_row_height = tmp;
+		
+		/* Prepare array describing MCU composition */
+		cinfo.blocks_in_MCU = 1;
+		cinfo.MCU_membership[0] = 0;
+		
+	} else {
+		
+		/* Interleaved (multi-component) scan */
+		if (cinfo.comps_in_scan <= 0 || cinfo.comps_in_scan > MAX_COMPS_IN_SCAN)
+			error();
+//			ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo.comps_in_scan, MAX_COMPS_IN_SCAN);
+		
+		/* Overall image size in MCUs */
+		cinfo.MCUs_per_row = (int)jdiv_round_up( cinfo.image_width, (cinfo.max_h_samp_factor*DCTSIZE));
+		cinfo.MCU_rows_in_scan = (int)jdiv_round_up( cinfo.image_height, (cinfo.max_v_samp_factor*DCTSIZE));
+		
+		cinfo.blocks_in_MCU = 0;
+		
+		for (ci = 0; ci < cinfo.comps_in_scan; ci++) {
+			compptr = cinfo.cur_comp_info[ci];
+			/* Sampling factors give # of blocks of component in each MCU */
+			compptr.MCU_width = compptr.h_samp_factor;
+			compptr.MCU_height = compptr.v_samp_factor;
+			compptr.MCU_blocks = compptr.MCU_width * compptr.MCU_height;
+			compptr.MCU_sample_width = compptr.MCU_width * compptr.DCT_scaled_size;
+			/* Figure number of non-dummy blocks in last MCU column & row */
+			tmp = (compptr.width_in_blocks % compptr.MCU_width);
+			if (tmp == 0) tmp = compptr.MCU_width;
+			compptr.last_col_width = tmp;
+			tmp = (compptr.height_in_blocks % compptr.MCU_height);
+			if (tmp == 0) tmp = compptr.MCU_height;
+			compptr.last_row_height = tmp;
+			/* Prepare array describing MCU composition */
+			mcublks = compptr.MCU_blocks;
+			if (cinfo.blocks_in_MCU + mcublks > D_MAX_BLOCKS_IN_MCU)
+				error();
+//	ERREXIT(cinfo, JERR_BAD_MCU_SIZE);
+			while (mcublks-- > 0) {
+				cinfo.MCU_membership[cinfo.blocks_in_MCU++] = ci;
+			}
+		}
+		
+	}
+}
+
+static void latch_quant_tables (jpeg_decompress_struct cinfo) {
+	int ci, qtblno;
+	jpeg_component_info compptr;
+	JQUANT_TBL qtbl;
+
+	for (ci = 0; ci < cinfo.comps_in_scan; ci++) {
+		compptr = cinfo.cur_comp_info[ci];
+		/* No work if we already saved Q-table for this component */
+		if (compptr.quant_table != null)
+			continue;
+		/* Make sure specified quantization table is present */
+		qtblno = compptr.quant_tbl_no;
+		if (qtblno < 0 || qtblno >= NUM_QUANT_TBLS || cinfo.quant_tbl_ptrs[qtblno] == null)
+			error();
+//			ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, qtblno);
+		/* OK, save away the quantization table */
+		qtbl = new JQUANT_TBL();
+		System.arraycopy(cinfo.quant_tbl_ptrs[qtblno].quantval, 0, qtbl.quantval, 0, qtbl.quantval.length);
+		qtbl.sent_table = cinfo.quant_tbl_ptrs[qtblno].sent_table;
+		compptr.quant_table = qtbl;
+	}
+}
+
+static void jpeg_make_d_derived_tbl (jpeg_decompress_struct cinfo, boolean isDC, int tblno, d_derived_tbl dtbl) {
+	JHUFF_TBL htbl;
+	int p, i = 0, l, si, numsymbols;
+	int lookbits, ctr;
+	byte[] huffsize = new byte[257];
+	int[] huffcode = new int[257];
+	int code;
+
+	/* Note that huffsize[] and huffcode[] are filled in code-length order,
+	 * paralleling the order of the symbols themselves in htbl.huffval[].
+	 */
+
+	/* Find the input Huffman table */
+	if (tblno < 0 || tblno >= NUM_HUFF_TBLS)
+		error();
+//		ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno);
+	htbl = isDC ? cinfo.dc_huff_tbl_ptrs[tblno] : cinfo.ac_huff_tbl_ptrs[tblno];
+	if (htbl == null)
+		error();
+//		ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno);
+
+	/* Allocate a workspace if we haven't already done so. */
+	dtbl.pub = htbl;		/* fill in back link */
+	
+	/* Figure C.1: make table of Huffman code length for each symbol */
+
+	p = 0;
+	for (l = 1; l <= 16; l++) {
+		i = htbl.bits[l] & 0xFF;
+		if (i < 0 || p + i > 256)	/* protect against table overrun */
+			error();
+//			ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
+		while (i-- != 0)
+			huffsize[p++] = (byte) l;
+	}
+	huffsize[p] = 0;
+	numsymbols = p;
+	
+	/* Figure C.2: generate the codes themselves */
+	/* We also validate that the counts represent a legal Huffman code tree. */
+	
+	code = 0;
+	si = huffsize[0];
+	p = 0;
+	while ((huffsize[p]) != 0) {
+		while (( huffsize[p]) == si) {
+			huffcode[p++] = code;
+			code++;
+		}
+		/* code is now 1 more than the last code used for codelength si; but
+		 * it must still fit in si bits, since no code is allowed to be all ones.
+		 */
+		if (( code) >= (( 1) << si))
+			error();
+//			ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
+		code <<= 1;
+		si++;
+	}
+
+	/* Figure F.15: generate decoding tables for bit-sequential decoding */
+
+	p = 0;
+	for (l = 1; l <= 16; l++) {
+		if ((htbl.bits[l] & 0xFF) != 0) {
+			/* valoffset[l] = huffval[] index of 1st symbol of code length l,
+			 * minus the minimum code of length l
+			 */
+			dtbl.valoffset[l] =	p -	huffcode[p];
+			p += (htbl.bits[l] & 0xFF);
+			dtbl.maxcode[l] = huffcode[p-1]; /* maximum code of length l */
+		} else {
+			dtbl.maxcode[l] = -1;	/* -1 if no codes of this length */
+		}
+	}
+	dtbl.maxcode[17] = 0xFFFFF; /* ensures jpeg_huff_decode terminates */
+
+	/* Compute lookahead tables to speed up decoding.
+	 * First we set all the table entries to 0, indicating "too long";
+	 * then we iterate through the Huffman codes that are short enough and
+	 * fill in all the entries that correspond to bit sequences starting
+	 * with that code.
+	 */
+
+	for (int j = 0; j < dtbl.look_nbits.length; j++) {
+		dtbl.look_nbits[j] = 0;
+	}
+
+	p = 0;
+	for (l = 1; l <= HUFF_LOOKAHEAD; l++) {
+		for (i = 1; i <= (htbl.bits[l] & 0xFF); i++, p++) {
+			/* l = current code's length, p = its index in huffcode[] & huffval[]. */
+			/* Generate left-justified code followed by all possible bit sequences */
+			lookbits = huffcode[p] << (HUFF_LOOKAHEAD-l);
+			for (ctr = 1 << (HUFF_LOOKAHEAD-l); ctr > 0; ctr--) {
+				dtbl.look_nbits[lookbits] = l;
+				dtbl.look_sym[lookbits] = htbl.huffval[p];
+				lookbits++;
+			}
+		}
+	}
+
+	/* Validate symbols as being reasonable.
+	 * For AC tables, we make no check, but accept all byte values 0..255.
+	 * For DC tables, we require the symbols to be in range 0..15.
+	 * (Tighter bounds could be applied depending on the data depth and mode,
+	 * but this is sufficient to ensure safe decoding.)
+	 */
+	if (isDC) {
+		for (i = 0; i < numsymbols; i++) {
+			int sym = htbl.huffval[i] & 0xFF;
+			if (sym < 0 || sym > 15)
+				error();
+//				ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
+		}
+	}
+}
+
+static void start_input_pass (jpeg_decompress_struct cinfo) {
+	per_scan_setup(cinfo);
+	latch_quant_tables(cinfo);
+	cinfo.entropy.start_pass(cinfo);
+	cinfo.coef.start_input_pass (cinfo);
+	cinfo.inputctl.consume_input = COEF_CONSUME_INPUT;
+}
+
+static void finish_input_pass (jpeg_decompress_struct cinfo) {
+	cinfo.inputctl.consume_input = INPUT_CONSUME_INPUT;
+}
+
+static int consume_markers (jpeg_decompress_struct cinfo) {
+	jpeg_input_controller inputctl = cinfo.inputctl;
+	int val;
+
+	if (inputctl.eoi_reached) /* After hitting EOI, read no further */
+		return JPEG_REACHED_EOI;
+
+	val = read_markers (cinfo);
+
+	switch (val) {
+	case JPEG_REACHED_SOS:	/* Found SOS */
+		if (inputctl.inheaders) {	/* 1st SOS */
+			initial_setup(cinfo);
+			inputctl.inheaders = false;
+			/* Note: start_input_pass must be called by jdmaster.c
+			 * before any more input can be consumed.	jdapimin.c is
+			 * responsible for enforcing this sequencing.
+			 */
+		} else {			/* 2nd or later SOS marker */
+			if (! inputctl.has_multiple_scans)
+				error();
+//				ERREXIT(cinfo, JERR_EOI_EXPECTED); /* Oops, I wasn't expecting this! */
+			start_input_pass(cinfo);
+		}
+		break;
+	case JPEG_REACHED_EOI:	/* Found EOI */
+		inputctl.eoi_reached = true;
+		if (inputctl.inheaders) {	/* Tables-only datastream, apparently */
+			if (cinfo.marker.saw_SOF)
+				error();
+//				ERREXIT(cinfo, JERR_SOF_NO_SOS);
+		} else {
+			/* Prevent infinite loop in coef ctlr's decompress_data routine
+			 * if user set output_scan_number larger than number of scans.
+			 */
+			if (cinfo.output_scan_number > cinfo.input_scan_number)
+				cinfo.output_scan_number = cinfo.input_scan_number;
+		}
+		break;
+	case JPEG_SUSPENDED:
+		break;
+	}
+
+	return val;
+}
+
+static void default_decompress_parms (jpeg_decompress_struct cinfo) {
+	/* Guess the input colorspace, and set output colorspace accordingly. */
+	/* (Wish JPEG committee had provided a real way to specify this...) */
+	/* Note application may override our guesses. */
+	switch (cinfo.num_components) {
+		case 1:
+			cinfo.jpeg_color_space = JCS_GRAYSCALE;
+			cinfo.out_color_space = JCS_GRAYSCALE;
+			break;
+			
+		case 3:
+			if (cinfo.saw_JFIF_marker) {
+				cinfo.jpeg_color_space = JCS_YCbCr; /* JFIF implies YCbCr */
+			} else if (cinfo.saw_Adobe_marker) {
+				switch (cinfo.Adobe_transform) {
+					case 0:
+						cinfo.jpeg_color_space = JCS_RGB;
+						break;
+					case 1:
+						cinfo.jpeg_color_space = JCS_YCbCr;
+						break;
+					default:	
+//						WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo.Adobe_transform);
+						cinfo.jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */
+					break;
+				}
+			} else {
+				/* Saw no special markers, try to guess from the component IDs */
+				int cid0 = cinfo.comp_info[0].component_id;
+				int cid1 = cinfo.comp_info[1].component_id;
+				int cid2 = cinfo.comp_info[2].component_id;
+	
+				if (cid0 == 1 && cid1 == 2 && cid2 == 3)
+					cinfo.jpeg_color_space = JCS_YCbCr; /* assume JFIF w/out marker */
+				else if (cid0 == 82 && cid1 == 71 && cid2 == 66)
+					cinfo.jpeg_color_space = JCS_RGB; /* ASCII 'R', 'G', 'B' */
+				else {
+//					TRACEMS3(cinfo, 1, JTRC_UNKNOWN_IDS, cid0, cid1, cid2);
+					cinfo.jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */
+				}
+			}
+			/* Always guess RGB is proper output colorspace. */
+			cinfo.out_color_space = JCS_RGB;
+			break;
+			
+		case 4:
+			if (cinfo.saw_Adobe_marker) {
+				switch (cinfo.Adobe_transform) {
+					case 0:
+						cinfo.jpeg_color_space = JCS_CMYK;
+						break;
+					case 2:
+						cinfo.jpeg_color_space = JCS_YCCK;
+						break;
+					default:
+//						WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo.Adobe_transform);
+						cinfo.jpeg_color_space = JCS_YCCK; /* assume it's YCCK */
+						break;
+				}
+			} else {
+				/* No special markers, assume straight CMYK. */
+				cinfo.jpeg_color_space = JCS_CMYK;
+			}
+			cinfo.out_color_space = JCS_CMYK;
+			break;
+			
+		default:
+			cinfo.jpeg_color_space = JCS_UNKNOWN;
+			cinfo.out_color_space = JCS_UNKNOWN;
+			break;
+	}
+
+	/* Set defaults for other decompression parameters. */
+	cinfo.scale_num = 1;		/* 1:1 scaling */
+	cinfo.scale_denom = 1;
+	cinfo.output_gamma = 1.0;
+	cinfo.buffered_image = false;
+	cinfo.raw_data_out = false;
+	cinfo.dct_method = JDCT_DEFAULT;
+	cinfo.do_fancy_upsampling = true;
+	cinfo.do_block_smoothing = true;
+	cinfo.quantize_colors = false;
+	/* We set these in case application only sets quantize_colors. */
+	cinfo.dither_mode = JDITHER_FS;
+	cinfo.two_pass_quantize = true;
+	cinfo.desired_number_of_colors = 256;
+	cinfo.colormap = null;
+	/* Initialize for no mode change in buffered-image mode. */
+	cinfo.enable_1pass_quant = false;
+	cinfo.enable_external_quant = false;
+	cinfo.enable_2pass_quant = false;
+}
+
+static void init_source(jpeg_decompress_struct cinfo) {
+	cinfo.buffer = new byte[INPUT_BUFFER_SIZE];
+	cinfo.bytes_in_buffer = 0;
+	cinfo.bytes_offset = 0;
+	cinfo.start_of_file = true;
+}
+
+static int jpeg_consume_input (jpeg_decompress_struct cinfo) {
+	int retcode = JPEG_SUSPENDED;
+
+	/* NB: every possible DSTATE value should be listed in this switch */
+	switch (cinfo.global_state) {
+	case DSTATE_START:
+		/* Start-of-datastream actions: reset appropriate modules */
+		reset_input_controller(cinfo);
+		/* Initialize application's data source module */
+		init_source (cinfo);
+		cinfo.global_state = DSTATE_INHEADER;
+		/*FALLTHROUGH*/
+	case DSTATE_INHEADER:
+		retcode = consume_input(cinfo);
+		if (retcode == JPEG_REACHED_SOS) { /* Found SOS, prepare to decompress */
+			/* Set up default parameters based on header data */
+			default_decompress_parms(cinfo);
+			/* Set global state: ready for start_decompress */
+			cinfo.global_state = DSTATE_READY;
+		}
+		break;
+	case DSTATE_READY:
+		/* Can't advance past first SOS until start_decompress is called */
+		retcode = JPEG_REACHED_SOS;
+		break;
+	case DSTATE_PRELOAD:
+	case DSTATE_PRESCAN:
+	case DSTATE_SCANNING:
+	case DSTATE_RAW_OK:
+	case DSTATE_BUFIMAGE:
+	case DSTATE_BUFPOST:
+	case DSTATE_STOPPING:
+		retcode = consume_input (cinfo);
+		break;
+	default:
+		error();
+//		ERREXIT1(cinfo, JERR_BAD_STATE, cinfo.global_state);
+	}
+	return retcode;
+}
+
+
+static void jpeg_abort (jpeg_decompress_struct cinfo) {
+//	int pool;
+//
+//	/* Releasing pools in reverse order might help avoid fragmentation
+//	 * with some (brain-damaged) malloc libraries.
+//	 */
+//	for (pool = JPOOL_NUMPOOLS-1; pool > JPOOL_PERMANENT; pool--) {
+//		(*cinfo.mem.free_pool) (cinfo, pool);
+//	}
+
+	/* Reset overall state for possible reuse of object */
+	if (cinfo.is_decompressor) {
+		cinfo.global_state = DSTATE_START;
+		/* Try to keep application from accessing now-deleted marker list.
+		 * A bit kludgy to do it here, but this is the most central place.
+		 */
+//		((j_decompress_ptr) cinfo).marker_list = null;
+	} else {
+		cinfo.global_state = CSTATE_START;
+	}
+}
+
+
+static boolean isFileFormat(LEDataInputStream stream) {
+	try {
+		byte[] buffer = new byte[2];
+		stream.read(buffer);
+		stream.unread(buffer);
+		return (buffer[0] & 0xFF) == 0xFF && (buffer[1] & 0xFF) == M_SOI;
+	} catch (Exception e) {
+		return false;
+	}
+}
+	
+static ImageData[] loadFromByteStream(InputStream inputStream, ImageLoader loader) {
+	jpeg_decompress_struct cinfo = new jpeg_decompress_struct();
+	cinfo.inputStream = inputStream;
+	jpeg_create_decompress(cinfo);
+	jpeg_read_header(cinfo, true);
+	cinfo.buffered_image = cinfo.progressive_mode && loader.hasListeners();
+	jpeg_start_decompress(cinfo);
+	PaletteData palette = null;
+	switch (cinfo.out_color_space) {
+		case JCS_RGB:
+			palette = new PaletteData(0xFF, 0xFF00, 0xFF0000);
+			break;
+		case JCS_GRAYSCALE:
+			RGB[] colors = new RGB[256];
+			for (int i = 0; i < colors.length; i++) {
+				colors[i] = new RGB(i, i, i);
+			}
+			palette = new PaletteData(colors);
+			break;
+		default:
+			error();
+	}
+	int scanlinePad = 4;
+	int row_stride = (((cinfo.output_width * cinfo.out_color_components * 8 + 7) / 8) + (scanlinePad - 1)) / scanlinePad * scanlinePad;
+	byte[][] buffer = new byte[1][row_stride];
+	byte[] data = new byte[row_stride * cinfo.output_height];
+	ImageData imageData = ImageData.internal_new(
+			cinfo.output_width, cinfo.output_height, palette.isDirect ? 24 : 8, palette, scanlinePad, data,
+			0, null, null, -1, -1, SWT.IMAGE_JPEG, 0, 0, 0, 0);
+	if (cinfo.buffered_image) {
+		boolean done;
+		do {
+			int incrementCount = cinfo.input_scan_number - 1;
+			jpeg_start_output(cinfo, cinfo.input_scan_number);
+			while (cinfo.output_scanline < cinfo.output_height) {
+				int offset = row_stride * cinfo.output_scanline;
+				jpeg_read_scanlines(cinfo, buffer, 1);
+				System.arraycopy(buffer[0], 0, data, offset, row_stride);
+			}
+			jpeg_finish_output(cinfo);
+			loader.notifyListeners(new ImageLoaderEvent(loader, (ImageData)imageData.clone(), incrementCount, done = jpeg_input_complete(cinfo)));
+		} while (!done);
+	} else {
+		while (cinfo.output_scanline < cinfo.output_height) {
+			int offset = row_stride * cinfo.output_scanline;
+			jpeg_read_scanlines(cinfo, buffer, 1);
+			System.arraycopy(buffer[0], 0, data, offset, row_stride);
+		}
+	}
+	jpeg_finish_decompress(cinfo);
+	jpeg_destroy_decompress(cinfo);
+	return new ImageData[]{imageData};
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngDeflater.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngDeflater.java
new file mode 100644
index 0000000..d382f38
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngDeflater.java
@@ -0,0 +1,618 @@
+/*******************************************************************************
+ * 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.internal.image;
+
+import java.io.ByteArrayOutputStream;
+
+public class PngDeflater {
+
+	static final int BASE = 65521;
+	static final int WINDOW = 32768;
+	static final int MIN_LENGTH = 3;
+	static final int MAX_MATCHES = 32;
+	static final int HASH = 8209;
+	
+	byte[] in;
+	int inLength;
+	
+	ByteArrayOutputStream bytes = new ByteArrayOutputStream(1024);
+	
+	int adler32 = 1;
+	
+	int buffer, bitCount;
+	
+	Link[] hashtable = new Link[HASH];
+	Link[] window = new Link[WINDOW];
+	int nextWindow;
+
+static class Link {
+
+	int hash, value;
+	Link previous, next;
+	
+	Link() {
+	
+		this.hash = 0;
+		this.value = 0;
+		this.previous = null;
+		this.next = null;
+	
+	}
+
+}
+
+static class Match {
+
+	int length, distance;
+	
+	Match(int length, int distance) {
+	
+		this.length = length;
+		this.distance = distance;
+	
+	}
+
+}
+
+static final short mirrorBytes[] = {
+
+    0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
+    0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
+    0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
+    0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
+    0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
+    0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
+    0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
+    0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
+    0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
+    0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
+    0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
+    0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
+    0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
+    0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
+    0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
+    0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
+    0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
+    0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
+    0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
+    0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
+    0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
+    0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
+    0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
+    0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
+    0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
+    0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
+    0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
+    0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
+    0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
+    0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
+    0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
+    0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff,
+
+};
+
+static class Code {
+
+	int code, extraBits, min, max;
+	
+	Code(int code, int extraBits, int min, int max) {
+	
+		this.code = code;
+		this.extraBits = extraBits;
+		this.min = min;
+		this.max = max;
+    
+    }
+
+}
+
+static final Code lengthCodes[] = {
+
+	new Code(257, 0, 3, 3),
+	new Code(258, 0, 4, 4),
+	new Code(259, 0, 5, 5),
+	new Code(260, 0, 6, 6),
+	new Code(261, 0, 7, 7),
+	new Code(262, 0, 8, 8),
+	new Code(263, 0, 9, 9),
+	new Code(264, 0, 10, 10),
+	new Code(265, 1, 11, 12),
+	new Code(266, 1, 13, 14),
+	new Code(267, 1, 15, 16),
+	new Code(268, 1, 17, 18),
+	new Code(269, 2, 19, 22),
+	new Code(270, 2, 23, 26),
+	new Code(271, 2, 27, 30),
+	new Code(272, 2, 31, 34),
+	new Code(273, 3, 35, 42),
+	new Code(274, 3, 43, 50),
+	new Code(275, 3, 51, 58),
+	new Code(276, 3, 59, 66),
+	new Code(277, 4, 67, 82),
+	new Code(278, 4, 83, 98),
+	new Code(279, 4, 99, 114),
+	new Code(280, 4, 115, 130),
+	new Code(281, 5, 131, 162),
+	new Code(282, 5, 163, 194),
+	new Code(283, 5, 195, 226),
+	new Code(284, 5, 227, 257),
+	new Code(285, 0, 258, 258)
+
+};
+
+static final Code distanceCodes[] = {
+
+	new Code(0, 0, 1, 1),
+	new Code(1, 0, 2, 2),
+	new Code(2, 0, 3, 3),
+	new Code(3, 0, 4, 4),
+	new Code(4, 1, 5, 6),
+	new Code(5, 1, 7, 8),
+	new Code(6, 2, 9, 12),
+	new Code(7, 2, 13, 16),
+	new Code(8, 3, 17, 24),
+	new Code(9, 3, 25, 32),
+	new Code(10, 4, 33, 48),
+	new Code(11, 4, 49, 64),
+	new Code(12, 5, 65, 96),
+	new Code(13, 5, 97, 128),
+	new Code(14, 6, 129, 192),
+	new Code(15, 6, 193, 256),
+	new Code(16, 7, 257, 384),
+	new Code(17, 7, 385, 512),
+	new Code(18, 8, 513, 768),
+	new Code(19, 8, 769, 1024),
+	new Code(20, 9, 1025, 1536),
+	new Code(21, 9, 1537, 2048),
+	new Code(22, 10, 2049, 3072),
+	new Code(23, 10, 3073, 4096),
+	new Code(24, 11, 4097, 6144),
+	new Code(25, 11, 6145, 8192),
+	new Code(26, 12, 8193, 12288),
+	new Code(27, 12, 12289, 16384),
+	new Code(28, 13, 16385, 24576),
+	new Code(29, 13, 24577, 32768)
+
+};
+
+void writeShortLSB(ByteArrayOutputStream baos, int theShort) {
+
+	byte byte1 = (byte) (theShort & 0xff);
+	byte byte2 = (byte) ((theShort >> 8) & 0xff);
+	byte[] temp = {byte1, byte2};
+	baos.write(temp, 0, 2);
+
+}
+
+void writeInt(ByteArrayOutputStream baos, int theInt) {
+
+	byte byte1 = (byte) ((theInt >> 24) & 0xff);
+	byte byte2 = (byte) ((theInt >> 16) & 0xff);
+	byte byte3 = (byte) ((theInt >> 8) & 0xff);
+	byte byte4 = (byte) (theInt & 0xff);
+	byte[] temp = {byte1, byte2, byte3, byte4};
+	baos.write(temp, 0, 4);
+
+}
+
+void updateAdler(byte value) {
+
+	int low = adler32 & 0xffff;
+	int high = (adler32 >> 16) & 0xffff;
+	int valueInt = value & 0xff;
+	low = (low + valueInt) % BASE;
+	high = (low + high) % BASE;
+	adler32 = (high << 16) | low;
+
+}
+
+int hash(byte[] bytes) {
+
+	int hash = ((bytes[0] & 0xff) << 24 | (bytes[1] & 0xff) << 16 | (bytes[2] & 0xff) << 8) % HASH;
+	if (hash < 0) {
+		hash = hash + HASH;
+	}
+	return hash;
+
+}
+
+void writeBits(int value, int count) {
+
+	buffer |= value << bitCount;
+	bitCount += count;
+	if (bitCount >= 16) {
+		bytes.write((byte) buffer);
+		bytes.write((byte) (buffer >>> 8));
+		buffer >>>= 16;
+		bitCount -= 16;
+	}
+
+}
+
+void alignToByte() {
+
+	if (bitCount > 0) {
+		bytes.write((byte) buffer);
+		if (bitCount > 8) bytes.write((byte) (buffer >>> 8));
+	}
+	buffer = 0;
+	bitCount = 0;
+
+}
+
+void outputLiteral(byte literal) {
+
+	int i = literal & 0xff;
+	
+	if (i <= 143) {
+		// 0 through 143 are 8 bits long starting at 00110000
+		writeBits(mirrorBytes[0x30 + i], 8);
+	}
+	else {
+		// 144 through 255 are 9 bits long starting at 110010000
+		writeBits(1 + 2 * mirrorBytes[0x90 - 144 + i], 9);
+	}
+
+}
+
+Code findCode(int value, Code[] codes) {
+
+	int i, j, k;
+	
+	i = -1;
+	j = codes.length;
+	while (true) {
+		k = (j + i) / 2;
+		if (value < codes[k].min) {
+			j = k;
+		}
+		else if (value > codes[k].max) {
+			i = k;
+		}
+		else {
+			return codes[k];
+		}
+	}
+
+}
+
+void outputMatch(int length, int distance) {
+
+	Code d, l;
+	int thisLength;
+	
+	while (length > 0) {
+
+		// we can transmit matches of lengths 3 through 258 inclusive
+		// so if length exceeds 258, we must transmit in several steps,
+		// with 258 or less in each step
+		
+		if (length > 260) {
+			thisLength = 258;
+		}
+		else if (length <= 258) {
+			thisLength = length;
+		}
+		else {
+			thisLength = length - 3;
+		}
+		
+		length = length - thisLength;
+				
+		// find length code
+		l = findCode(thisLength, lengthCodes);
+		
+		// transmit the length code
+		// 256 through 279 are 7 bits long starting at 0000000
+		// 280 through 287 are 8 bits long starting at 11000000
+		if (l.code <= 279) {
+			writeBits(mirrorBytes[(l.code - 256) * 2], 7);
+		}
+		else {
+			writeBits(mirrorBytes[0xc0 - 280 + l.code], 8);
+		}
+		
+		// transmit the extra bits
+		if (l.extraBits != 0) {
+			writeBits(thisLength - l.min, l.extraBits);
+		}
+		
+		// find distance code
+		d = findCode(distance, distanceCodes);
+		
+		// transmit the distance code
+		// 5 bits long starting at 00000
+		writeBits(mirrorBytes[d.code * 8], 5);
+		
+		// transmit the extra bits
+		if (d.extraBits != 0) {
+			writeBits(distance - d.min, d.extraBits);
+		}
+	
+	}
+
+}
+
+Match findLongestMatch(int position, Link firstPosition) {
+
+	Link link = firstPosition;
+	int numberOfMatches = 0;
+	Match bestMatch = new Match(-1, -1);
+	
+	while (true) {
+	
+		int matchPosition = link.value;
+		
+		if (position - matchPosition < WINDOW && matchPosition != 0) {
+
+			int i;
+			
+			for (i = 1; position + i < inLength; i++) {
+				if (in[position + i] != in[matchPosition + i]) {
+					break;
+				}
+			}
+			
+			if (i >= MIN_LENGTH) {
+			
+				if (i > bestMatch.length) {
+					bestMatch.length = i;
+					bestMatch.distance = position - matchPosition;
+				}
+				
+				numberOfMatches = numberOfMatches + 1;
+				
+				if (numberOfMatches == MAX_MATCHES) {
+					break;
+				}
+			
+			}
+						
+		}
+		
+		link = link.next;
+		if (link == null) {
+			break;
+		}
+	
+	}
+	
+	if (bestMatch.length < MIN_LENGTH || bestMatch.distance < 1 || bestMatch.distance > WINDOW) {
+		return null;
+	}
+	
+	return bestMatch;	
+
+}
+
+void updateHashtable(int to, int from) {
+
+	byte[] data = new byte[3];
+	int hash;
+	Link temp;
+	
+	for (int i = to; i < from; i++) {
+		
+		if (i + MIN_LENGTH > inLength) {
+			break;
+		}
+		
+		data[0] = in[i];
+		data[1] = in[i + 1];
+		data[2] = in[i + 2];
+		
+		hash = hash(data);
+		
+		if (window[nextWindow].previous != null) {
+			window[nextWindow].previous.next = null;
+		}
+		else if (window[nextWindow].hash != 0) {
+			hashtable[window[nextWindow].hash].next = null;
+		}
+		
+		window[nextWindow].hash = hash;
+		window[nextWindow].value = i;
+		window[nextWindow].previous = null;
+		temp = window[nextWindow].next = hashtable[hash].next;
+		hashtable[hash].next = window[nextWindow];
+		if (temp != null) {
+			temp.previous = window[nextWindow];
+		}
+		
+		nextWindow = nextWindow + 1;
+		if (nextWindow == WINDOW) {
+			nextWindow = 0;
+		}
+			
+	}
+
+}
+
+void compress() {
+
+	int position, newPosition;
+	byte[] data = new byte[3];
+	int hash;
+	for (int i = 0; i < HASH; i++) {
+		hashtable[i] = new Link();
+	}
+	for (int i = 0; i < WINDOW; i++) {
+		window[i] = new Link();
+	}
+	nextWindow = 0;
+	Link firstPosition;
+	Match match;
+	int deferredPosition = -1;
+	Match deferredMatch = null;
+	
+	writeBits(0x01, 1); // BFINAL = 0x01 (final block)
+	writeBits(0x01, 2); // BTYPE = 0x01 (compression with fixed Huffman codes)
+	
+	// just output first byte so we never match at zero
+	outputLiteral(in[0]);
+	position = 1;
+	
+	while (position < inLength) {
+	
+		if (inLength - position < MIN_LENGTH) {
+			outputLiteral(in[position]);
+			position = position + 1;
+			continue;
+		}
+		
+		data[0] = in[position];
+		data[1] = in[position + 1];
+		data[2] = in[position + 2];
+		
+		hash = hash(data);
+		firstPosition = hashtable[hash];
+		
+		match = findLongestMatch(position, firstPosition);
+		
+		updateHashtable(position, position + 1);
+		
+		if (match != null) {
+		
+			if (deferredMatch != null) {
+				if (match.length > deferredMatch.length + 1) {
+					// output literal at deferredPosition
+					outputLiteral(in[deferredPosition]);
+					// defer this match
+					deferredPosition = position;
+					deferredMatch = match;
+					position = position + 1;
+				}
+				else {
+					// output deferredMatch
+					outputMatch(deferredMatch.length, deferredMatch.distance);
+					newPosition = deferredPosition + deferredMatch.length;
+					deferredPosition = -1;
+					deferredMatch = null;
+					updateHashtable(position + 1, newPosition);
+					position = newPosition;
+				}
+			}
+			else {
+				// defer this match
+				deferredPosition = position;
+				deferredMatch = match;
+				position = position + 1;
+			}
+		
+		}
+		
+		else {
+		
+			// no match found
+			if (deferredMatch != null) {
+				outputMatch(deferredMatch.length, deferredMatch.distance);
+				newPosition = deferredPosition + deferredMatch.length;
+				deferredPosition = -1;
+				deferredMatch = null;
+				updateHashtable(position + 1, newPosition);
+				position = newPosition;
+			}
+			else {
+				outputLiteral(in[position]);
+				position = position + 1;
+			}
+		
+		}
+	
+	}
+	
+	writeBits(0, 7); // end of block code
+	alignToByte();
+
+}
+
+void compressHuffmanOnly() {
+
+	int position;
+	
+	writeBits(0x01, 1); // BFINAL = 0x01 (final block)
+	writeBits(0x01, 2); // BTYPE = 0x01 (compression with fixed Huffman codes)
+	
+	for (position = 0; position < inLength;) {
+	
+		outputLiteral(in[position]);
+		position = position + 1;
+	
+	}
+	
+	writeBits(0, 7); // end of block code
+	alignToByte();
+
+}
+
+void store() {
+
+	// stored blocks are limited to 0xffff bytes
+	
+	int start = 0;
+	int length = inLength;
+	int blockLength;
+	int BFINAL = 0x00; // BFINAL = 0x00 or 0x01 (if final block), BTYPE = 0x00 (no compression)
+	
+	while (length > 0) {
+	
+		if (length < 65535) {
+			blockLength = length;
+			BFINAL = 0x01;
+		}
+		else {
+			blockLength = 65535;
+			BFINAL = 0x00;
+		}
+		
+		// write data header
+		bytes.write((byte) BFINAL);
+		writeShortLSB(bytes, blockLength); // LEN
+		writeShortLSB(bytes, blockLength ^ 0xffff); // NLEN (one's complement of LEN)
+	
+		// write actual data
+		bytes.write(in, start, blockLength);
+		
+		length = length - blockLength;
+		start = start + blockLength;
+	
+	}
+
+}
+
+public byte[] deflate(byte[] input) {
+
+	in = input;
+	inLength = input.length;
+	
+	// write zlib header
+	bytes.write((byte) 0x78); // window size = 0x70 (32768), compression method = 0x08
+	bytes.write((byte) 0x9C); // compression level = 0x80 (default), check bits = 0x1C
+	
+	// compute checksum
+	for (int i = 0; i < inLength; i++) {
+		updateAdler(in[i]);
+	}
+	
+	//store();
+	
+	//compressHuffmanOnly();
+	
+	compress();
+	
+	// write checksum
+	writeInt(bytes, adler32);
+	
+	return bytes.toByteArray();
+
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngEncoder.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngEncoder.java
new file mode 100644
index 0000000..26fe574
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngEncoder.java
@@ -0,0 +1,364 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.internal.image;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.ImageLoader;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.internal.Compatibility;
+
+final class PngEncoder extends Object {
+
+	static final byte SIGNATURE[] = {(byte) '\211', (byte) 'P', (byte) 'N', (byte) 'G', (byte) '\r', (byte) '\n', (byte) '\032', (byte) '\n'};
+	static final byte TAG_IHDR[] = {(byte) 'I', (byte) 'H', (byte) 'D', (byte) 'R'};
+	static final byte TAG_PLTE[] = {(byte) 'P', (byte) 'L', (byte) 'T', (byte) 'E'};
+	static final byte TAG_TRNS[] = {(byte) 't', (byte) 'R', (byte) 'N', (byte) 'S'};
+	static final byte TAG_IDAT[] = {(byte) 'I', (byte) 'D', (byte) 'A', (byte) 'T'};
+	static final byte TAG_IEND[] = {(byte) 'I', (byte) 'E', (byte) 'N', (byte) 'D'};
+	
+	ByteArrayOutputStream bytes = new ByteArrayOutputStream(1024);
+	PngChunk chunk;
+	
+	ImageLoader loader;
+	ImageData data;
+	int transparencyType;
+	
+	int width, height, bitDepth, colorType;
+	
+	int compressionMethod = 0;
+	int filterMethod = 0;
+	int interlaceMethod = 0;
+	
+public PngEncoder(ImageLoader loader) {
+
+	this.loader = loader;
+	this.data = loader.data[0];
+	this.transparencyType = data.getTransparencyType();
+	
+	this.width = data.width;
+	this.height = data.height;
+	
+	this.bitDepth = 8;
+	
+	this.colorType = 2;
+	
+	if (data.palette.isDirect) {
+		if (transparencyType == SWT.TRANSPARENCY_ALPHA) {
+			this.colorType = 6;
+		}
+	}
+	else {
+		this.colorType = 3;
+	}
+	
+	if (!(colorType == 2 || colorType == 3 || colorType == 6)) SWT.error(SWT.ERROR_INVALID_IMAGE);
+
+}
+
+void writeShort(ByteArrayOutputStream baos, int theShort) {
+
+	byte byte1 = (byte) ((theShort >> 8) & 0xff);
+	byte byte2 = (byte) (theShort & 0xff);
+	byte[] temp = {byte1, byte2};
+	baos.write(temp, 0, 2);
+
+}
+
+void writeInt(ByteArrayOutputStream baos, int theInt) {
+
+	byte byte1 = (byte) ((theInt >> 24) & 0xff);
+	byte byte2 = (byte) ((theInt >> 16) & 0xff);
+	byte byte3 = (byte) ((theInt >> 8) & 0xff);
+	byte byte4 = (byte) (theInt & 0xff);
+	byte[] temp = {byte1, byte2, byte3, byte4};
+	baos.write(temp, 0, 4);
+
+}
+
+void writeChunk(byte[] tag, byte[] buffer) {
+
+	int bufferLength = (buffer != null) ? buffer.length : 0;
+	
+	chunk = new PngChunk(bufferLength);
+	
+	writeInt(bytes, bufferLength);
+	bytes.write(tag, 0, 4);
+	chunk.setType(tag);
+	if (bufferLength != 0) {
+		bytes.write(buffer, 0, bufferLength);
+		chunk.setData(buffer);
+	}
+	else {
+		chunk.setCRC(chunk.computeCRC());
+	}
+	writeInt(bytes, chunk.getCRC());
+
+}
+
+void writeSignature() {
+
+	bytes.write(SIGNATURE, 0, 8);
+
+}
+
+void writeHeader() {
+
+	ByteArrayOutputStream baos = new ByteArrayOutputStream(13);
+	
+	writeInt(baos, width);
+	writeInt(baos, height);
+	baos.write(bitDepth);
+	baos.write(colorType);
+	baos.write(compressionMethod);
+	baos.write(filterMethod);
+	baos.write(interlaceMethod);
+	
+	writeChunk(TAG_IHDR, baos.toByteArray());
+
+}
+
+void writePalette() {
+
+	RGB[] RGBs = data.palette.getRGBs();
+	
+	if (RGBs.length > 256) SWT.error(SWT.ERROR_INVALID_IMAGE);
+	
+	ByteArrayOutputStream baos = new ByteArrayOutputStream(RGBs.length);
+	
+	for (int i = 0; i < RGBs.length; i++) {
+	
+		baos.write((byte) RGBs[i].red);
+		baos.write((byte) RGBs[i].green);
+		baos.write((byte) RGBs[i].blue);
+	
+	}
+	
+	writeChunk(TAG_PLTE, baos.toByteArray());
+
+}
+
+void writeTransparency() {
+
+	ByteArrayOutputStream baos = new ByteArrayOutputStream();
+	
+	switch (transparencyType) {
+	
+		case SWT.TRANSPARENCY_ALPHA:
+			
+			int pixelValue, alphaValue;
+			
+			byte[] alphas = new byte[data.palette.getRGBs().length];
+			
+			for (int y = 0; y < height; y++) {
+			
+				for (int x = 0; x < width; x++) {
+				
+					pixelValue = data.getPixel(x, y);
+					alphaValue = data.getAlpha(x, y);
+					
+					alphas[pixelValue] = (byte) alphaValue;
+				
+				}
+			
+			}
+			
+			baos.write(alphas, 0, alphas.length);
+			
+			break;
+		
+		case SWT.TRANSPARENCY_PIXEL:
+			
+			int pixel = data.transparentPixel;
+			
+			if (colorType == 2) {
+			
+				int redMask = data.palette.redMask;
+				int redShift = data.palette.redShift;
+				int greenMask = data.palette.greenMask;
+				int greenShift = data.palette.greenShift;
+				int blueShift = data.palette.blueShift;
+				int blueMask = data.palette.blueMask;
+				
+				int r = pixel & redMask;
+				r = (redShift < 0) ? r >>> -redShift : r << redShift;
+				int g = pixel & greenMask;
+				g = (greenShift < 0) ? g >>> -greenShift : g << greenShift;
+				int b = pixel & blueMask;
+				b = (blueShift < 0) ? b >>> -blueShift : b << blueShift;
+				
+				writeShort(baos, r);
+				writeShort(baos, g);
+				writeShort(baos, b);
+			
+			}
+			
+			if (colorType == 3) {
+			
+				byte[] padding = new byte[pixel + 1];
+				
+				for (int i = 0; i < pixel; i++) {
+				
+					padding[i] = (byte) 255;
+				
+				}
+				
+				padding[pixel] = (byte) 0;
+				
+				baos.write(padding, 0, padding.length);
+			
+			}
+			
+			break;
+	
+	}
+	
+	writeChunk(TAG_TRNS, baos.toByteArray());
+
+}
+
+void writeImageData() throws IOException {
+
+	ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
+	OutputStream os = Compatibility.newDeflaterOutputStream(baos);
+	if (os == null) os = baos;
+	
+	if (colorType == 3) {
+	
+		byte[] lineData = new byte[width];
+		
+		for (int y = 0; y < height; y++) {
+			
+			int filter = 0;
+			os.write(filter);
+			
+			data.getPixels(0, y, width, lineData, 0);
+			
+			for (int x = 0; x < lineData.length; x++) {
+			
+				os.write(lineData[x]);
+			
+			}
+		
+		}
+	
+	}
+	
+	else {
+	
+		int[] lineData = new int[width];
+		byte[] alphaData = null;
+		if (colorType == 6) {
+			alphaData = new byte[width];
+		}
+		
+		int redMask = data.palette.redMask;
+		int redShift = data.palette.redShift;
+		int greenMask = data.palette.greenMask;
+		int greenShift = data.palette.greenShift;
+		int blueShift = data.palette.blueShift;
+		int blueMask = data.palette.blueMask;
+		
+		for (int y = 0; y < height; y++) {
+		
+			int filter = 0;
+			os.write(filter);
+			
+			data.getPixels(0, y, width, lineData, 0);
+			
+			if (colorType == 6) {
+				data.getAlphas(0, y, width, alphaData, 0);
+			}
+			
+			for (int x = 0; x < lineData.length; x++) {
+			
+				int pixel = lineData[x];
+				
+				int r = pixel & redMask;
+				r = (redShift < 0) ? r >>> -redShift : r << redShift;
+				int g = pixel & greenMask;
+				g = (greenShift < 0) ? g >>> -greenShift : g << greenShift;
+				int b = pixel & blueMask;
+				b = (blueShift < 0) ? b >>> -blueShift : b << blueShift;
+				
+				os.write(r);
+				os.write(g);
+				os.write(b);
+				
+				if (colorType == 6) {
+					os.write(alphaData[x]);
+				}
+			
+			}
+		
+		}
+	
+	}
+	
+	os.flush();
+	os.close();
+	
+	byte[] compressed = baos.toByteArray();
+	if (os == baos) {
+		PngDeflater deflater = new PngDeflater();
+		compressed = deflater.deflate(compressed);
+	}
+	
+	writeChunk(TAG_IDAT, compressed);
+
+}
+
+void writeEnd() {
+
+	writeChunk(TAG_IEND, null);
+
+}
+
+public void encode(LEDataOutputStream outputStream) {
+
+	try {
+	
+		writeSignature();
+		writeHeader();
+		
+		if (colorType == 3) {
+			writePalette();
+		}
+		
+		boolean transparencyAlpha = (transparencyType == SWT.TRANSPARENCY_ALPHA);
+		boolean transparencyPixel = (transparencyType == SWT.TRANSPARENCY_PIXEL);
+		boolean type2Transparency = (colorType == 2 && transparencyPixel);
+		boolean type3Transparency = (colorType == 3 && (transparencyAlpha || transparencyPixel));
+		
+		if (type2Transparency || type3Transparency) {
+			writeTransparency();
+		}
+		
+		writeImageData();
+		writeEnd();
+		
+		outputStream.write(bytes.toByteArray());
+	
+	}
+	
+	catch (IOException e) {
+	
+		SWT.error(SWT.ERROR_IO, e);
+	
+	}
+
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngInputStream.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngInputStream.java
new file mode 100644
index 0000000..c0fd08e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/internal/image/PngInputStream.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.internal.image;
+
+import java.io.*;
+
+public class PngInputStream extends InputStream {
+	PngChunkReader reader;
+	PngChunk chunk;
+	int offset, length;
+	
+	final static int DATA_OFFSET = 8; 
+	
+public PngInputStream(PngIdatChunk chunk, PngChunkReader reader) {
+	this.chunk = chunk;
+	this.reader = reader;
+	length = chunk.getLength();
+	offset = 0;
+}
+
+private boolean checkChunk() throws IOException {
+	while (offset == length) {
+		chunk = reader.readNextChunk();
+		if (chunk == null) throw new IOException();
+		if (chunk.getChunkType() == PngChunk.CHUNK_IEND) return false;
+		if (chunk.getChunkType() != PngChunk.CHUNK_IDAT) throw new IOException();
+		length = chunk.getLength();
+		offset = 0;
+	}
+	return true;
+}
+
+public void close() throws IOException {
+	chunk = null;
+}
+
+public int read() throws IOException {
+	if (chunk == null) throw new IOException();
+	if (offset == length && !checkChunk()) return -1;
+	int b = chunk.reference[DATA_OFFSET + offset] & 0xFF;
+	offset++;
+	return b;
+}
+
+public int read(byte[] b, int off, int len) throws IOException {
+	if (chunk == null) throw new IOException();
+	if (offset == length && !checkChunk()) return -1;
+	len = Math.min(len, length - offset);
+	System.arraycopy(chunk.reference, DATA_OFFSET + offset, b, off, len);
+	offset += len;
+	return len;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ar._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ar._properties
new file mode 100644
index 0000000..c14fda9
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ar._properties
@@ -0,0 +1,25 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=\u0646\u0639\u0645
+SWT_No=\u0644\u0627
+SWT_OK=\u062d\u0633\u0646\u0627
+SWT_Cancel=\u0627\u0644\u063a\u0627\u0621
+SWT_Abort=\u0627\u0646\u0647\u0627\u0621
+SWT_Ignore=\u062a\u062c\u0627\u0647\u0644
+SWT_Sample=\u0646\u0645\u0648\u0630\u062c
+SWT_Selection=\u0627\u0644\u0627\u062e\u062a\u064a\u0627\u0631
+SWT_Font=\u0637\u0627\u0642\u0645 \u0627\u0644\u0637\u0628\u0627\u0639\u0629
+SWT_Color=\u0627\u0644\u0644\u0648\u0646
+SWT_Size=\u062a\u063a\u064a\u064a\u0631 \u062d\u062c\u0645
+SWT_Style=\u0627\u0644\u0646\u0645\u0637
+SWT_Save=\u062d\u0641\u0638
+SWT_FontDialog_Title=\u0623\u0637\u0642\u0645 \u0627\u0644\u0637\u0628\u0627\u0639\u0629
+SWT_Remove=\u0627\u0632\u0627\u0644\u0629
+SWT_Up=\u0644\u0623\u0639\u0644\u0649
+SWT_Down=\u0644\u0623\u0633\u0641\u0644
+SWT_Charset_ASCII=ASCII
+SWT_Password=\u0643\u0644\u0645\u0629 \u0627\u0644\u0633\u0631\u064a\u0629:
+SWT_Open=\u0641\u062a\u062d
+SWT_Close=\u0627\u063a\u0644\u0627\u0642
+SWT_Minimize=\u062a\u0635\u063a\u064a\u0631
+SWT_Maximize=\u062a\u0643\u0628\u064a\u0631
+SWT_Restore=\u0627\u0633\u062a\u0639\u0627\u062f\u0629
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_cs._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_cs._properties
new file mode 100644
index 0000000..f6c9664
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_cs._properties
@@ -0,0 +1,29 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=Ano
+SWT_No=Ne
+SWT_OK=OK
+SWT_Cancel=Storno
+SWT_Abort=P\u0159ed\u010dasn\u011b ukon\u010dit
+SWT_Retry=Zkusit znovu
+SWT_Ignore=Ignorovat
+SWT_Sample=Uk\u00e1zka
+SWT_Selection=V\u00fdb\u011br
+SWT_Current_Selection=Aktu\u00e1ln\u00ed v\u00fdb\u011br
+SWT_Font=P\u00edsmo
+SWT_Color=Barva
+SWT_Size=Velikost
+SWT_Style=Styl
+SWT_Save=Ulo\u017eit
+SWT_ColorDialog_Title=Barvy
+SWT_FontDialog_Title=P\u00edsma
+SWT_Remove=Odstranit
+SWT_Up=Nahoru
+SWT_Down=Dol\u016f
+SWT_Charset_ASCII=ASCII
+SWT_Password=Heslo:
+SWT_Username=U\u017eivatelsk\u00e9 jm\u00e9no:
+SWT_Open=Otev\u0159\u00edt
+SWT_Close=Zav\u0159\u00edt
+SWT_Minimize=Minimalizovat
+SWT_Maximize=Maximalizovat
+SWT_Restore=Obnovit
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_da._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_da._properties
new file mode 100644
index 0000000..e6efe92
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_da._properties
@@ -0,0 +1,25 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=Ja
+SWT_No=Nej
+SWT_OK=OK
+SWT_Cancel=Annull\u00e9r
+SWT_Abort=Afbryd
+SWT_Ignore=Ignor\u00e9r
+SWT_Sample=Eksempel
+SWT_Selection=Valg
+SWT_Font=Font
+SWT_Color=Farve
+SWT_Size=St\u00f8rrelse
+SWT_Style=Typografi
+SWT_Save=Gem
+SWT_FontDialog_Title=Fonte
+SWT_Remove=Fjern
+SWT_Up=Op
+SWT_Down=Ned
+SWT_Charset_ASCII=ASCII
+SWT_Password=Kodeord:
+SWT_Open=\u00c5bn
+SWT_Close=Luk
+SWT_Minimize=Minim\u00e9r
+SWT_Maximize=Maksim\u00e9r
+SWT_Restore=Gendan
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_de._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_de._properties
new file mode 100644
index 0000000..28563b7
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_de._properties
@@ -0,0 +1,65 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=Ja
+SWT_No=Nein
+SWT_OK=OK
+SWT_Cancel=Abbrechen
+SWT_Abort=Abbrechen
+SWT_Retry=Erneut versuchen
+SWT_Ignore=Ignorieren
+SWT_Sample=Beispiel
+SWT_A_Sample_Text=Beispieltext
+SWT_Selection=Auswahl
+SWT_Current_Selection=Aktuelle Auswahl
+SWT_Font=Schriftart
+SWT_Color=Farbe
+SWT_Extended_style=Erweiterter Stil
+SWT_Size=Gr\u00f6\u00dfe
+SWT_Style=Darstellung
+SWT_Save=Speichern
+SWT_Character_set=Zeichensatz
+SWT_ColorDialog_Title=Farben
+SWT_FontDialog_Title=Schriftarten
+SWT_FontSet=Schriftsatz
+SWT_NewFont=Neue Schriftart
+SWT_Remove=Entfernen
+SWT_Up=Nach oben
+SWT_Down=Nach unten
+SWT_Charset_Western=westlich
+SWT_Charset_EastEuropean=\u00f6stlich
+SWT_Charset_SouthEuropean=s\u00fcdlich
+SWT_Charset_NorthEuropean=n\u00f6rdlich
+SWT_Charset_Cyrillic=kyrillisch
+SWT_Charset_Arabic=arabisch
+SWT_Charset_Greek=Griechisch
+SWT_Charset_Hebrew=Hebr\u00e4isch
+SWT_Charset_Turkish=T\u00fcrkisch
+SWT_Charset_Nordic=Nordisch
+SWT_Charset_Thai=Thail\u00e4ndisch
+SWT_Charset_BalticRim=Baltisch
+SWT_Charset_Celtic=Keltisch
+SWT_Charset_Euro=Euro
+SWT_Charset_Romanian=Rum\u00e4nisch
+SWT_Charset_SimplifiedChinese=chinesisch, vereinfacht
+SWT_Charset_TraditionalChinese=chinesisch, traditionell
+SWT_Charset_Japanese=Japanisch
+SWT_Charset_Korean=Koreanisch
+SWT_Charset_Unicode=Unicode
+SWT_Charset_ASCII=ASCII
+SWT_InputMethods=Eingabemethoden
+SWT_Password=Kennwort\:
+SWT_Username=Benutzername:
+SWT_Switch=Schalter
+SWT_Press=Dr\u00fccken
+SWT_Open=\u00d6ffnen
+SWT_Close=Schlie\u00dfen
+SWT_Minimize=Minimieren
+SWT_Maximize=Maximieren
+SWT_Restore=Wiederherstellen
+SWT_ShowList=Liste anzeigen
+SWT_FileDownload=Datei-Download
+SWT_Download_File=Herunterladen: {0}
+SWT_Download_Location=Speichern von {0} von {1}
+SWT_Download_Started=Herunterladen\...
+SWT_Download_Status=Download: {0,Zahl,Ganzzahl} KB von {1,Zahl,Ganzzahl} KB
+SWT_Authentication_Required=Authentifizierung erforderlich
+SWT_Enter_Username_and_Password=Benutzernamen und Kennwort f\u00fcr {0} unter {1} eingeben
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_el._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_el._properties
new file mode 100644
index 0000000..a14609e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_el._properties
@@ -0,0 +1,25 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=\u039d\u03b1\u03b9
+SWT_No=\u038c\u03c7\u03b9
+SWT_OK=OK
+SWT_Cancel=\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7
+SWT_Abort=\u039c\u03b1\u03c4\u03b1\u03af\u03c9\u03c3\u03b7
+SWT_Ignore=\u03a0\u03b1\u03c1\u03ac\u03b2\u03bb\u03b5\u03c8\u03b7
+SWT_Sample=\u0394\u03b5\u03af\u03b3\u03bc\u03b1
+SWT_Selection=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae
+SWT_Font=\u0393\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac
+SWT_Color=\u03a7\u03c1\u03ce\u03bc\u03b1
+SWT_Size=\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2
+SWT_Style=\u03a3\u03c4\u03c5\u03bb
+SWT_Save=\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7
+SWT_FontDialog_Title=\u0393\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ad\u03c2
+SWT_Remove=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7
+SWT_Up=\u03a0\u03ac\u03bd\u03c9
+SWT_Down=\u039a\u03ac\u03c4\u03c9
+SWT_Charset_ASCII=ASCII
+SWT_Password=\u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2:
+SWT_Open=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1
+SWT_Close=\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf
+SWT_Minimize=\u0395\u03bb\u03b1\u03c7\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7
+SWT_Maximize=\u039c\u03b5\u03b3\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7
+SWT_Restore=\u0395\u03c0\u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_es._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_es._properties
new file mode 100644
index 0000000..6c891db
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_es._properties
@@ -0,0 +1,57 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=S\u00ed
+SWT_No=No
+SWT_OK=Aceptar
+SWT_Cancel=Cancelar
+SWT_Abort=Terminar anormalmente
+SWT_Retry=Reintentar
+SWT_Ignore=Omitir
+SWT_Sample=Muestra
+SWT_A_Sample_Text=Un Texto de Muestra
+SWT_Selection=Selecci\u00f3n
+SWT_Current_Selection=Seleccion Actual
+SWT_Font=Fuente
+SWT_Color=Color
+SWT_Extended_style=Estilo extendido
+SWT_Size=Tama\u00f1o
+SWT_Style=Estilo
+SWT_Save=Guardar
+SWT_Character_set=Conjunto de caracteres
+SWT_ColorDialog_Title=Colores
+SWT_FontDialog_Title=Fuentes
+SWT_FontSet=Conjunto de Fuentes
+SWT_NewFont=Nueva Fuente
+SWT_Remove=Eliminar
+SWT_Up=Subir
+SWT_Down=Bajar
+SWT_Charset_Western=oeste
+SWT_Charset_EastEuropean=este
+SWT_Charset_SouthEuropean=sur
+SWT_Charset_NorthEuropean=norte
+SWT_Charset_Arabic=ar\u00e1bico
+SWT_Charset_Greek=griego
+SWT_Charset_Hebrew=hebreo
+SWT_Charset_Turkish=turco
+SWT_Charset_Nordic=noruego
+SWT_Charset_Celtic=celta
+SWT_Charset_Romanian=rumano
+SWT_Charset_SimplifiedChinese=chino simple
+SWT_Charset_TraditionalChinese=chino tradicional
+SWT_Charset_Japanese=japones
+SWT_Charset_Korean=coreano
+SWT_Charset_Unicode=unicode
+SWT_Charset_ASCII=ASCII
+SWT_Password=Contrase\u00f1a:
+SWT_Username=Nombre de Usuario:
+SWT_Switch=Cambiar
+SWT_Press=Presionar
+SWT_Open=Abrir
+SWT_Close=Cerrar
+SWT_Minimize=Minimizar
+SWT_Maximize=Maximizar
+SWT_Restore=Restaurar
+SWT_ShowList=Mostrar Lista
+SWT_FileDownload=Descarga Fichero
+SWT_Download_File=Descarga: {0}
+SWT_Download_Location=Guardando {0} desde {1}
+SWT_Download_Started=Descargando...
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_fi._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_fi._properties
new file mode 100644
index 0000000..796ae74
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_fi._properties
@@ -0,0 +1,25 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=Kyll\u00e4
+SWT_No=Ei
+SWT_OK=OK
+SWT_Cancel=Peruuta
+SWT_Abort=Keskeyt\u00e4
+SWT_Ignore=Ohita
+SWT_Sample=Malli
+SWT_Selection=Valinta
+SWT_Font=Fontti
+SWT_Color=V\u00e4ri
+SWT_Size=Koko
+SWT_Style=Tyyli
+SWT_Save=Tallenna
+SWT_FontDialog_Title=Fontit
+SWT_Remove=Poista
+SWT_Up=Yl\u00f6s
+SWT_Down=Alas
+SWT_Charset_ASCII=ASCII
+SWT_Password=Salasana:
+SWT_Open=Avaa
+SWT_Close=Sulje
+SWT_Minimize=Pienenn\u00e4
+SWT_Maximize=Suurenna
+SWT_Restore=Palauta
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_fr._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_fr._properties
new file mode 100644
index 0000000..b5ea714
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_fr._properties
@@ -0,0 +1,65 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=Oui
+SWT_No=Non
+SWT_OK=OK
+SWT_Cancel=Annuler
+SWT_Abort=Abandonner
+SWT_Retry=Recommencer
+SWT_Ignore=Ignorer
+SWT_Sample=Exemple
+SWT_A_Sample_Text=Exemple de texte
+SWT_Selection=S\u00e9lection
+SWT_Current_Selection=S\u00e9lection en cours
+SWT_Font=Police
+SWT_Color=Couleur
+SWT_Extended_style=Style \u00e9tendu
+SWT_Size=Taille
+SWT_Style=Style
+SWT_Save=Enregistrer
+SWT_Character_set=Jeu de caract\u00e8res
+SWT_ColorDialog_Title=Couleurs
+SWT_FontDialog_Title=Polices
+SWT_FontSet=Jeu de polices
+SWT_NewFont=Nouvelle police
+SWT_Remove=Supprimer
+SWT_Up=Haut
+SWT_Down=Bas
+SWT_Charset_Western=occidental
+SWT_Charset_EastEuropean=oriental
+SWT_Charset_SouthEuropean=austral
+SWT_Charset_NorthEuropean=septentrional
+SWT_Charset_Cyrillic=cyrillique
+SWT_Charset_Arabic=arabe
+SWT_Charset_Greek=grec
+SWT_Charset_Hebrew=h\u00e9breu
+SWT_Charset_Turkish=turc
+SWT_Charset_Nordic=nordique
+SWT_Charset_Thai=tha\u00ef
+SWT_Charset_BalticRim=baltique
+SWT_Charset_Celtic=celtique
+SWT_Charset_Euro=euro
+SWT_Charset_Romanian=roumain
+SWT_Charset_SimplifiedChinese=chinois simplifi\u00e9
+SWT_Charset_TraditionalChinese=chinois traditionnel
+SWT_Charset_Japanese=japonais
+SWT_Charset_Korean=cor\u00e9en
+SWT_Charset_Unicode=unicode
+SWT_Charset_ASCII=ASCII
+SWT_InputMethods=M\u00e9thodes d'entr\u00e9e
+SWT_Password=Mot de passe \:
+SWT_Username=Nom d'utilisateur\u00a0:
+SWT_Switch=Commuter
+SWT_Press=Appuyer
+SWT_Open=Ouvrir
+SWT_Close=Fermer
+SWT_Minimize=R\u00e9duire
+SWT_Maximize=Agrandir
+SWT_Restore=Restaurer
+SWT_ShowList=Afficher la liste
+SWT_FileDownload=T\u00e9l\u00e9chargement de fichiers
+SWT_Download_File=T\u00e9l\u00e9charger\u00a0: {0}
+SWT_Download_Location=Enregistrement de {0} depuis {1}
+SWT_Download_Started=T\u00e9l\u00e9chargement \...
+SWT_Download_Status=T\u00e9l\u00e9charger\u00a0: {0,number,integer} ko de {1,number,integer} ko
+SWT_Authentication_Required=Authentification requise
+SWT_Enter_Username_and_Password=Entrer le nom d'utilisateur et le mot de passe pour {0} au niveau de {1}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_hu._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_hu._properties
new file mode 100644
index 0000000..f2dd2c1
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_hu._properties
@@ -0,0 +1,25 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=Igen
+SWT_No=Nem
+SWT_OK=OK
+SWT_Cancel=M\u00e9gse
+SWT_Abort=Megszak\u00edt\u00e1s
+SWT_Ignore=Mell\u0151z\u00e9s
+SWT_Sample=Minta
+SWT_Selection=Kiv\u00e1laszt\u00e1s
+SWT_Font=Bet\u0171t\u00edpus
+SWT_Color=Sz\u00edn
+SWT_Size=M\u00e9ret
+SWT_Style=St\u00edlus
+SWT_Save=Ment\u00e9s
+SWT_FontDialog_Title=Bet\u0171t\u00edpusok
+SWT_Remove=Elt\u00e1vol\u00edt\u00e1s
+SWT_Up=Fel
+SWT_Down=Le
+SWT_Charset_ASCII=ASCII
+SWT_Password=Jelsz\u00f3:
+SWT_Open=Megnyit\u00e1s
+SWT_Close=Bez\u00e1r\u00e1s
+SWT_Minimize=Kis m\u00e9ret
+SWT_Maximize=Teljes m\u00e9ret
+SWT_Restore=Vissza\u00e1ll\u00edt\u00e1s
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_it._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_it._properties
new file mode 100644
index 0000000..bb229e6
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_it._properties
@@ -0,0 +1,63 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=S\u00ec
+SWT_No=No
+SWT_OK=OK
+SWT_Cancel=Annulla
+SWT_Abort=Interrompi
+SWT_Retry=Riprova
+SWT_Ignore=Ignora
+SWT_Sample=Esempio
+SWT_A_Sample_Text=Testo di esempio
+SWT_Selection=Selezione
+SWT_Current_Selection=Selezione corrente
+SWT_Font=Tipo di carattere
+SWT_Color=Colore
+SWT_Extended_style=Stile esteso
+SWT_Size=Dimensione
+SWT_Style=Stile
+SWT_Save=Salva
+SWT_Character_set=Insieme di caratteri
+SWT_ColorDialog_Title=Colori
+SWT_FontDialog_Title=Tipi di carattere
+SWT_FontSet=Insieme di tipi di carattere
+SWT_NewFont=Nuovo tipo di carattere
+SWT_Remove=Rimuovi
+SWT_Up=Su
+SWT_Down=Gi\u00f9
+SWT_Charset_Western=occidentali
+SWT_Charset_EastEuropean=orientali
+SWT_Charset_SouthEuropean=area del Mediterraneo
+SWT_Charset_NorthEuropean=area settentrionale
+SWT_Charset_Cyrillic=cirillici
+SWT_Charset_Arabic=arabi
+SWT_Charset_Greek=greci
+SWT_Charset_Hebrew=ebraici
+SWT_Charset_Turkish=turchi
+SWT_Charset_Nordic=nordici
+SWT_Charset_Thai=thai
+SWT_Charset_BalticRim=del Baltico
+SWT_Charset_Celtic=celtici
+SWT_Charset_Euro=europei
+SWT_Charset_Romanian=rumeni
+SWT_Charset_SimplifiedChinese=cinesi sempl.
+SWT_Charset_TraditionalChinese=cinesi trad.
+SWT_Charset_Japanese=giapponesi
+SWT_Charset_Korean=coreani
+SWT_Charset_Unicode=unicode
+SWT_Charset_ASCII=ASCII
+SWT_InputMethods=Metodi di input
+SWT_Password=Password:
+SWT_Username=Nome utente:
+SWT_Switch=Passa a
+SWT_Press=Premi
+SWT_Open=Apertura
+SWT_Close=Chiudi
+SWT_Minimize=Riduci a icona
+SWT_Maximize=Ingrandisci
+SWT_Restore=Ripristina
+SWT_ShowList=Mostra elenco
+SWT_FileDownload=Download file
+SWT_Download_File=Download: {0}
+SWT_Download_Location=Salvataggio di {0} da {1}
+SWT_Download_Started=Download in corso...
+SWT_Download_Status=Download: {0,number,integer} KB di {1,number,integer} KB
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_iw._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_iw._properties
new file mode 100644
index 0000000..0e9d119
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_iw._properties
@@ -0,0 +1,21 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=\u05db\u05df
+SWT_No=\u05dc\u05d0
+SWT_OK=OK
+SWT_Cancel=\u05d1\u05d9\u05d8\u05d5\u05dc
+SWT_Abort=Abort
+SWT_Ignore=Ignore
+SWT_Selection=Selection
+SWT_Font=\u05d2\u05d5\u05e4\u05df
+SWT_Style=Style
+SWT_Save=\u05e9\u05de\u05d9\u05e8\u05d4
+SWT_Remove=Remove
+SWT_Up=Up
+SWT_Down=Down
+SWT_Charset_ASCII=ASCII
+SWT_Password=\u05e1\u05d9\u05e1\u05de\u05d4:
+SWT_Open=Open
+SWT_Close=\u05e1\u05d2\u05d9\u05e8\u05d4
+SWT_Minimize=\u05de\u05d6\u05e2\u05d5\u05e8
+SWT_Maximize=\u05d4\u05d2\u05d3\u05dc\u05d4
+SWT_Restore=\u05e9\u05d7\u05d6\u05d5\u05e8
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ja._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ja._properties
new file mode 100644
index 0000000..3f48738
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ja._properties
@@ -0,0 +1,65 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=\u306f\u3044
+SWT_No=\u3044\u3044\u3048
+SWT_OK=OK
+SWT_Cancel=\u30ad\u30e3\u30f3\u30bb\u30eb
+SWT_Abort=\u4e2d\u65ad
+SWT_Retry=\u518d\u8a66\u884c
+SWT_Ignore=\u7121\u8996
+SWT_Sample=\u30b5\u30f3\u30d7\u30eb
+SWT_A_Sample_Text=\u30b5\u30f3\u30d7\u30eb\u30c6\u30ad\u30b9\u30c8
+SWT_Selection=\u9078\u629e
+SWT_Current_Selection=\u73fe\u5728\u306e\u9078\u629e
+SWT_Font=\u30d5\u30a9\u30f3\u30c8
+SWT_Color=\u8272
+SWT_Extended_style=\u62e1\u5f35\u30b9\u30bf\u30a4\u30eb
+SWT_Size=\u30b5\u30a4\u30ba
+SWT_Style=\u30b9\u30bf\u30a4\u30eb
+SWT_Save=\u4fdd\u7ba1
+SWT_Character_set=\u6587\u5b57\u30bb\u30c3\u30c8
+SWT_ColorDialog_Title=\u8272
+SWT_FontDialog_Title=\u30d5\u30a9\u30f3\u30c8
+SWT_FontSet=\u30d5\u30a9\u30f3\u30c8\u30bb\u30c3\u30c8
+SWT_NewFont=\u65b0\u3057\u3044\u30d5\u30a9\u30f3\u30c8
+SWT_Remove=\u524a\u9664
+SWT_Up=\u4e0a\u3078
+SWT_Down=\u4e0b\u3078
+SWT_Charset_Western=\u897f\u90e8
+SWT_Charset_EastEuropean=\u6771\u90e8
+SWT_Charset_SouthEuropean=\u5357\u90e8
+SWT_Charset_NorthEuropean=\u5317\u90e8
+SWT_Charset_Cyrillic=\u30ad\u30ea\u30eb\u8a9e
+SWT_Charset_Arabic=\u30a2\u30e9\u30d3\u30a2\u8a9e
+SWT_Charset_Greek=\u30ae\u30ea\u30b7\u30e3\u8a9e
+SWT_Charset_Hebrew=\u30d8\u30d6\u30e9\u30a4\u8a9e
+SWT_Charset_Turkish=\u30c8\u30eb\u30b3\u8a9e
+SWT_Charset_Nordic=\u30ce\u30eb\u30a6\u30a7\u30fc\u8a9e
+SWT_Charset_Thai=\u30bf\u30a4\u8a9e
+SWT_Charset_BalticRim=\u30d0\u30eb\u30c8\u6d77\u5468\u8fba
+SWT_Charset_Celtic=\u30b1\u30eb\u30c8\u8a9e
+SWT_Charset_Euro=\u30e6\u30fc\u30ed
+SWT_Charset_Romanian=\u30eb\u30fc\u30de\u30cb\u30a2\u8a9e
+SWT_Charset_SimplifiedChinese=\u7c21\u4f53\u5b57\u4e2d\u56fd\u8a9e
+SWT_Charset_TraditionalChinese=\u7e41\u4f53\u5b57\u4e2d\u56fd\u8a9e
+SWT_Charset_Japanese=\u65e5\u672c\u8a9e
+SWT_Charset_Korean=\u97d3\u56fd\u8a9e
+SWT_Charset_Unicode=Unicode
+SWT_Charset_ASCII=ASCII
+SWT_InputMethods=\u5165\u529b\u30e1\u30bd\u30c3\u30c9
+SWT_Password=\u30d1\u30b9\u30ef\u30fc\u30c9\:
+SWT_Username=\u30e6\u30fc\u30b6\u540d :
+SWT_Switch=\u5207\u308a\u66ff\u3048
+SWT_Press=\u62bc\u3059
+SWT_Open=\u958b\u304f
+SWT_Close=\u9589\u3058\u308b
+SWT_Minimize=\u6700\u5c0f\u5316
+SWT_Maximize=\u6700\u5927\u5316
+SWT_Restore=\u5fa9\u5143
+SWT_ShowList=\u30ea\u30b9\u30c8\u3092\u8868\u793a
+SWT_FileDownload=\u30d5\u30a1\u30a4\u30eb\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
+SWT_Download_File=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9 : {0}
+SWT_Download_Location={1} \u304b\u3089 {0} \u3092\u4fdd\u5b58\u3057\u3066\u3044\u307e\u3059
+SWT_Download_Started=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9...
+SWT_Download_Status=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9 : {0,number,integer} KB / {1,number,integer} KB
+SWT_Authentication_Required=\u8a8d\u8a3c\u304c\u5fc5\u8981\u3067\u3059
+SWT_Enter_Username_and_Password={1} \u306b\u304a\u3051\u308b {0} \u306e\u30e6\u30fc\u30b6\u540d\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ko._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ko._properties
new file mode 100644
index 0000000..2adca26
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ko._properties
@@ -0,0 +1,65 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=\uc608
+SWT_No=\uc544\ub2c8\uc624
+SWT_OK=\ud655\uc778
+SWT_Cancel=\ucde8\uc18c
+SWT_Abort=\uc911\ub2e8
+SWT_Retry=\uc7ac\uc2dc\ub3c4
+SWT_Ignore=\ubb34\uc2dc
+SWT_Sample=\uc0d8\ud50c
+SWT_A_Sample_Text=\uc0d8\ud50c \ud14d\uc2a4\ud2b8
+SWT_Selection=\uc120\ud0dd\uc0ac\ud56d
+SWT_Current_Selection=\ud604\uc7ac \uc120\ud0dd\uc0ac\ud56d
+SWT_Font=\uae00\uaf34
+SWT_Color=\uc0c9\uc0c1
+SWT_Extended_style=\ud655\uc7a5 \uc2a4\ud0c0\uc77c
+SWT_Size=\ud06c\uae30
+SWT_Style=\uc2a4\ud0c0\uc77c
+SWT_Save=\uc800\uc7a5
+SWT_Character_set=\ubb38\uc790 \uc138\ud2b8
+SWT_ColorDialog_Title=\uc0c9\uc0c1
+SWT_FontDialog_Title=\uae00\uaf34
+SWT_FontSet=\uae00\uaf34 \uc138\ud2b8
+SWT_NewFont=\uc0c8 \uae00\uaf34
+SWT_Remove=\uc81c\uac70
+SWT_Up=\uc704\ub85c
+SWT_Down=\uc544\ub798\ub85c
+SWT_Charset_Western=\uc11c\ubc29
+SWT_Charset_EastEuropean=\ub3d9\ubc29
+SWT_Charset_SouthEuropean=\ub0a8\ubc29
+SWT_Charset_NorthEuropean=\ubd81\ubc29
+SWT_Charset_Cyrillic=\ud0a4\ub9b4 \uc790\ubaa8
+SWT_Charset_Arabic=\uc544\ub78d\uc5b4
+SWT_Charset_Greek=\uadf8\ub9ac\uc2a4\uc5b4
+SWT_Charset_Hebrew=\ud5e4\ube0c\ub8e8\uc5b4
+SWT_Charset_Turkish=\ud130\ud0a4\uc5b4
+SWT_Charset_Nordic=\ubd81\uc720\ub7fd\uc5b4
+SWT_Charset_Thai=\ud0dc\uad6d\uc5b4
+SWT_Charset_BalticRim=\ubc1c\ud2b8\ud574 \uc5f0\uc548\uad6d\uac00
+SWT_Charset_Celtic=\ucf08\ud2b8\uc5b4
+SWT_Charset_Euro=\uc720\ub85c
+SWT_Charset_Romanian=\ub8e8\ub9c8\ub2c8\uc544\uc5b4
+SWT_Charset_SimplifiedChinese=\uc911\uad6d\uc5b4 \uac04\uccb4
+SWT_Charset_TraditionalChinese=\uc911\uad6d\uc5b4 \ubc88\uccb4
+SWT_Charset_Japanese=\uc77c\ubcf8\uc5b4
+SWT_Charset_Korean=\ud55c\uad6d\uc5b4
+SWT_Charset_Unicode=\uc720\ub2c8\ucf54\ub4dc
+SWT_Charset_ASCII=ASCII
+SWT_InputMethods=\uc785\ub825 \uba54\uc18c\ub4dc
+SWT_Password=\uc554\ud638:
+SWT_Username=\uc0ac\uc6a9\uc790 \uc774\ub984:
+SWT_Switch=\uc804\ud658
+SWT_Press=\ub204\ub974\uae30
+SWT_Open=\uc5f4\uae30
+SWT_Close=\ub2eb\uae30
+SWT_Minimize=\ucd5c\uc18c\ud654
+SWT_Maximize=\ucd5c\ub300\ud654
+SWT_Restore=\ubcf5\uc6d0
+SWT_ShowList=\ubaa9\ub85d \ud45c\uc2dc
+SWT_FileDownload=\ud30c\uc77c \ub2e4\uc6b4\ub85c\ub4dc
+SWT_Download_File=\ub2e4\uc6b4\ub85c\ub4dc: {0}
+SWT_Download_Location={1}\uc5d0\uc11c {0} \uc800\uc7a5
+SWT_Download_Started=\ub2e4\uc6b4\ub85c\ub4dc \uc911 ...
+SWT_Download_Status=\ub2e4\uc6b4\ub85c\ub4dc: {0,number,integer}KB/{1,number,integer}KB
+SWT_Authentication_Required=\uc778\uc99d \ud544\uc694
+SWT_Enter_Username_and_Password={1}\uc5d0 {0}\uc758 \uc0ac\uc6a9\uc790 \uc774\ub984\uacfc \uc554\ud638\ub97c \uc785\ub825\ud569\ub2c8\ub2e4.
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_mn._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_mn._properties
new file mode 100644
index 0000000..7ce97ec
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_mn._properties
@@ -0,0 +1,2 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Cancel=\u0411\u043e\u043b\u0438\u0445
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_nl._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_nl._properties
new file mode 100644
index 0000000..db94758
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_nl._properties
@@ -0,0 +1,25 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=Ja
+SWT_No=Nee
+SWT_OK=OK
+SWT_Cancel=Annuleren
+SWT_Abort=Afbreken
+SWT_Ignore=Negeren
+SWT_Sample=Voorbeeld
+SWT_Selection=Selectie
+SWT_Font=Lettertype
+SWT_Color=Kleur
+SWT_Size=Grootte
+SWT_Style=Stijl
+SWT_Save=Opslaan
+SWT_FontDialog_Title=Lettertypen
+SWT_Remove=Verwijderen
+SWT_Up=Omhoog
+SWT_Down=Omlaag
+SWT_Charset_ASCII=ASCII
+SWT_Password=Wachtwoord:
+SWT_Open=Openen
+SWT_Close=Sluiten
+SWT_Minimize=Minimaliseren
+SWT_Maximize=Maximaliseren
+SWT_Restore=Herstellen
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_no._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_no._properties
new file mode 100644
index 0000000..2d1bc5d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_no._properties
@@ -0,0 +1,25 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=Ja
+SWT_No=Nei
+SWT_OK=Ok
+SWT_Cancel=Avbryt
+SWT_Abort=Avbryt
+SWT_Ignore=Ignorer
+SWT_Sample=Eksempel
+SWT_Selection=Valg
+SWT_Font=Font
+SWT_Color=Farge
+SWT_Size=St\u00f8rrelse
+SWT_Style=Stil
+SWT_Save=Lagre
+SWT_FontDialog_Title=Fonter
+SWT_Remove=Fjern
+SWT_Up=Opp
+SWT_Down=Ned
+SWT_Charset_ASCII=ASCII
+SWT_Password=Passord:
+SWT_Open=\u00c5pne
+SWT_Close=Lukk
+SWT_Minimize=Minimer
+SWT_Maximize=Maksimer
+SWT_Restore=Gjenopprett
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pl._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pl._properties
new file mode 100644
index 0000000..5f09c29
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pl._properties
@@ -0,0 +1,42 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=Tak
+SWT_No=Nie
+SWT_OK=OK
+SWT_Cancel=Anuluj
+SWT_Abort=Przerwij
+SWT_Retry=Powt\u00f3rz
+SWT_Ignore=Ignoruj
+SWT_Sample=Przyk\u0142ad
+SWT_A_Sample_Text=Przyk\u0142adowy text
+SWT_Selection=Wyb\u00f3r
+SWT_Current_Selection=Obecny wyb\u00f3r
+SWT_Font=Czcionka
+SWT_Color=Kolor
+SWT_Extended_style=Rozszerzony styl
+SWT_Size=Rozmiar
+SWT_Style=Styl
+SWT_Save=Zapisz
+SWT_Character_set=Tablica znak\u00f3w
+SWT_ColorDialog_Title=Kolory
+SWT_FontDialog_Title=Czcionki
+SWT_FontSet=Zestaw czcionek
+SWT_NewFont=Nowa czcionka
+SWT_Remove=Usu\u0144
+SWT_Up=W g\u00f3r\u0119
+SWT_Down=W d\u00f3\u0142
+SWT_Charset_ASCII=ASCII
+SWT_Password=Has\u0142o:
+SWT_Username=Nazwa u\u017cytkownika:
+SWT_Switch=Zmie\u0144
+SWT_Press=Wci\u015bnij
+SWT_Open=Otwieranie
+SWT_Close=Zamknij
+SWT_Minimize=Minimalizuj
+SWT_Maximize=Maksymalizuj
+SWT_Restore=Odtw\u00f3rz
+SWT_ShowList=Poka\u017c list\u0119
+SWT_FileDownload=Pobierz plik
+SWT_Download_File=Pobierz
+SWT_Download_Location=Zapisuj\u0119 {0} z {1}
+SWT_Download_Started=Pobieranie...
+SWT_Download_Status=Pobrano: {0,number,integer} KB z {1,number,integer} KB
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pt._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pt._properties
new file mode 100644
index 0000000..6b03c74
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pt._properties
@@ -0,0 +1,64 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=Sim
+SWT_No=N\u00e3o
+SWT_OK=OK
+SWT_Cancel=Cancelar
+SWT_Abort=Abortar
+SWT_Retry=Tentar Novamente
+SWT_Ignore=Ignorar
+SWT_Sample=Exemplo
+SWT_A_Sample_Text=Texto de Exemplo
+SWT_Selection=Selec\u00e7\u00e3o
+SWT_Current_Selection=Selec\u00e7\u00e3o Actual
+SWT_Font=Tipo de letra
+SWT_Color=Cor
+SWT_Extended_style=Estilo Adicional
+SWT_Size=Tamanho
+SWT_Style=Estilo
+SWT_Save=Guardar
+SWT_Character_set=Conjunto de caracteres
+SWT_ColorDialog_Title=Cores
+SWT_FontDialog_Title=Tipos de Letra
+SWT_FontSet=Conjunto de Fontes
+SWT_NewFont=Nova Fonte
+SWT_Remove=Remover
+SWT_Up=Para cima
+SWT_Down=Para baixo
+SWT_Charset_Western=ocidental
+SWT_Charset_EastEuropean=oriental
+SWT_Charset_SouthEuropean=sul
+SWT_Charset_NorthEuropean=norte
+SWT_Charset_Cyrillic=cir\u00edlico
+SWT_Charset_Arabic=\u00e1rabe 
+SWT_Charset_Greek=grego
+SWT_Charset_Hebrew=hebraico
+SWT_Charset_Turkish=turco
+SWT_Charset_Nordic=n\u00f3rdico
+SWT_Charset_Thai=tailand\u00eas 
+SWT_Charset_BalticRim=b\u00e1ltico
+SWT_Charset_Celtic=celta
+SWT_Charset_Euro=euro
+SWT_Charset_Romanian=romeno
+SWT_Charset_SimplifiedChinese=chin\u00eas simp.
+SWT_Charset_TraditionalChinese=chin\u00eas trad.
+SWT_Charset_Japanese=japon\u00eas 
+SWT_Charset_Korean=coreano
+SWT_Charset_ASCII=ASCII
+SWT_InputMethods=M\u00e9todos de Entrada
+SWT_Password=Palavra-passe:
+SWT_Username=Nome de Utilizador:
+SWT_Switch=Bot\u00e3o
+SWT_Press=Pressionar
+SWT_Open=Abrir
+SWT_Close=Fechar
+SWT_Minimize=Minimizar
+SWT_Maximize=Maximizar
+SWT_Restore=Restaurar
+SWT_ShowList=Mostrar Lista
+SWT_FileDownload=Descarregar Ficheiro
+SWT_Download_File=Descarga: {0}
+SWT_Download_Location=Gravando {0} de {1}
+SWT_Download_Started=Descarregando...
+SWT_Download_Status=Descarregar: {0,number,integer} KB de {1,number,integer} KB
+SWT_Authentication_Required=Autentica\u00e7\u00e3o Necess\u00e1ria
+SWT_Enter_Username_and_Password=Insira nome de utilizador e palavra-passe para {0} em {1}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pt_BR._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pt_BR._properties
new file mode 100644
index 0000000..e80c352
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_pt_BR._properties
@@ -0,0 +1,25 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=Sim
+SWT_No=N\u00e3o
+SWT_OK=OK
+SWT_Cancel=Cancelar
+SWT_Abort=Interromper
+SWT_Ignore=Ignorar
+SWT_Sample=Exemplo
+SWT_Selection=Sele\u00e7\u00e3o
+SWT_Font=Fonte
+SWT_Color=Cor
+SWT_Size=Tamanho
+SWT_Style=Estilo
+SWT_Save=Salvar
+SWT_FontDialog_Title=Fontes
+SWT_Remove=Remover
+SWT_Up=Para Cima
+SWT_Down=Para Baixo
+SWT_Charset_ASCII=ASCII
+SWT_Password=Senha:
+SWT_Open=Abrir
+SWT_Close=Fechar
+SWT_Minimize=Minimizar
+SWT_Maximize=Maximizar
+SWT_Restore=Restaurar
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ro._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ro._properties
new file mode 100644
index 0000000..820114f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ro._properties
@@ -0,0 +1,5 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=Da
+SWT_No=Nu
+SWT_Password=Parol\u0103:
+SWT_Close=\u00cenchide
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ru._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ru._properties
new file mode 100644
index 0000000..415f033
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_ru._properties
@@ -0,0 +1,30 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=\u0414\u0430
+SWT_No=\u041d\u0435\u0442
+SWT_OK=OK
+SWT_Cancel=\u041e\u0442\u043c\u0435\u043d\u0430
+SWT_Abort=\u041f\u0440\u0435\u0440\u0432\u0430\u0442\u044c
+SWT_Retry=\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c
+SWT_Ignore=\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c
+SWT_Sample=\u041f\u0440\u0438\u043c\u0435\u0440
+SWT_Selection=\u0412\u044b\u0431\u043e\u0440
+SWT_Font=\u0428\u0440\u0438\u0444\u0442
+SWT_Color=\u0426\u0432\u0435\u0442
+SWT_Size=\u0420\u0430\u0437\u043c\u0435\u0440
+SWT_Style=\u0421\u0442\u0438\u043b\u044c
+SWT_Save=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c
+SWT_ColorDialog_Title=\u0426\u0432\u0435\u0442\u0430
+SWT_FontDialog_Title=\u0428\u0440\u0438\u0444\u0442\u044b
+SWT_NewFont=\u041d\u043e\u0432\u044b\u0439 \u0448\u0440\u0438\u0444\u0442
+SWT_Remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
+SWT_Up=\u0412\u044b\u0448\u0435
+SWT_Down=\u041d\u0438\u0436\u0435
+SWT_Charset_ASCII=ASCII
+SWT_Password=\u041f\u0430\u0440\u043e\u043b\u044c:
+SWT_Username=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f:
+SWT_Open=\u041e\u0442\u043a\u0440\u044b\u0442\u044c
+SWT_Close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c
+SWT_Minimize=\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c
+SWT_Maximize=\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c
+SWT_Restore=\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c
+SWT_Download_Started=\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430:
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_sv._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_sv._properties
new file mode 100644
index 0000000..b251051
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_sv._properties
@@ -0,0 +1,25 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=Ja
+SWT_No=Nej
+SWT_OK=OK
+SWT_Cancel=Avbryt
+SWT_Abort=Avbryt
+SWT_Ignore=Ignorera
+SWT_Sample=Exempel
+SWT_Selection=Urval
+SWT_Font=Teckensnitt
+SWT_Color=F\u00e4rg
+SWT_Size=Storlek
+SWT_Style=Format
+SWT_Save=Spara
+SWT_FontDialog_Title=Teckensnitt
+SWT_Remove=Ta bort
+SWT_Up=Upp
+SWT_Down=Ned
+SWT_Charset_ASCII=ASCII
+SWT_Password=L\u00f6senord:
+SWT_Open=\u00d6ppna
+SWT_Close=St\u00e4ng
+SWT_Minimize=Minimera
+SWT_Maximize=Maximera
+SWT_Restore=\u00c5terst\u00e4ll
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_tr._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_tr._properties
new file mode 100644
index 0000000..1b90791
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_tr._properties
@@ -0,0 +1,25 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=Evet
+SWT_No=Hay\u0131r
+SWT_OK=Tamam
+SWT_Cancel=\u0130ptal
+SWT_Abort=Durdur
+SWT_Ignore=Yoksay
+SWT_Sample=\u00d6rnek
+SWT_Selection=Se\u00e7im
+SWT_Font=Yaz\u0131y\u00fcz\u00fc
+SWT_Color=Renk
+SWT_Size=B\u00fcy\u00fckl\u00fck
+SWT_Style=Bi\u00e7em
+SWT_Save=Sakla
+SWT_FontDialog_Title=Yaz\u0131y\u00fczleri
+SWT_Remove=Kald\u0131r
+SWT_Up=Yukar\u0131
+SWT_Down=A\u015fa\u011f\u0131
+SWT_Charset_ASCII=ASCII
+SWT_Password=Parola:
+SWT_Open=A\u00e7
+SWT_Close=Kapat
+SWT_Minimize=Simge Durumuna K\u00fc\u00e7\u00fclt
+SWT_Maximize=Ekran Boyutuna Getir
+SWT_Restore=Geri Y\u00fckle
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_uk._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_uk._properties
new file mode 100644
index 0000000..b254c73
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_uk._properties
@@ -0,0 +1,65 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=\u0422\u0430\u043a
+SWT_No=\u041d\u0456
+SWT_OK=OK
+SWT_Cancel=\u0421\u043a\u0430\u0441\u0443\u0432\u0430\u0442\u0438
+SWT_Abort=\u041f\u0435\u0440\u0435\u0440\u0432\u0430\u0442\u0438
+SWT_Retry=\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0438
+SWT_Ignore=\u0406\u0433\u043d\u043e\u0440\u0443\u0432\u0430\u0442\u0438
+SWT_Sample=\u041f\u0440\u0438\u043a\u043b\u0430\u0434
+SWT_A_Sample_Text=\u0422\u0435\u043a\u0441\u0442 \u041f\u0440\u0438\u043a\u043b\u0430\u0434
+SWT_Selection=\u0412\u0438\u0431\u0456\u0440
+SWT_Current_Selection=\u041f\u043e\u0442\u043e\u0447\u043d\u0438\u0439 \u0412\u0438\u0431\u0456\u0440
+SWT_Font=\u0428\u0440\u0438\u0444\u0442
+SWT_Color=\u041a\u043e\u043b\u0456\u0440
+SWT_Extended_style=\u0420\u043e\u0437\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0441\u0442\u0438\u043b\u044c
+SWT_Size=\u0420\u043e\u0437\u043c\u0456\u0440
+SWT_Style=\u0421\u0442\u0438\u043b\u044c
+SWT_Save=\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438
+SWT_Character_set=\u041a\u043e\u0434\u043e\u0432\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0430
+SWT_ColorDialog_Title=\u041a\u043e\u043b\u044c\u043e\u0440\u0438
+SWT_FontDialog_Title=\u0428\u0440\u0438\u0444\u0442\u0438
+SWT_FontSet=\u041d\u0430\u0431\u0456\u0440 \u0428\u0440\u0438\u0444\u0442\u0456\u0432
+SWT_NewFont=\u041d\u043e\u0432\u0438\u0439 \u0428\u0440\u0438\u0444\u0442
+SWT_Remove=\u0412\u0438\u043b\u0443\u0447\u0438\u0442\u0438
+SWT_Up=\u041d\u0430\u0433\u043e\u0440\u0443
+SWT_Down=\u0412\u043d\u0438\u0437
+SWT_Charset_Western=\u0437\u0430\u0445\u0456\u0434\u043d\u0438\u0439
+SWT_Charset_EastEuropean=\u0441\u0445\u0456\u0434\u043d\u0438\u0439
+SWT_Charset_SouthEuropean=\u043f\u0456\u0432\u0434\u0435\u043d\u043d\u0438\u0439
+SWT_Charset_NorthEuropean=\u043f\u0456\u0432\u043d\u0456\u0447\u043d\u0438\u0439
+SWT_Charset_Cyrillic=\u043a\u0438\u0440\u0438\u043b\u0438\u0446\u044f
+SWT_Charset_Arabic=\u0430\u0440\u0430\u0431\u0441\u044c\u043a\u0430
+SWT_Charset_Greek=\u0433\u0440\u0435\u0446\u044c\u043a\u0430
+SWT_Charset_Hebrew=\u0433\u0435\u0431\u0440\u0435\u0439\u0441\u044c\u043a\u0430
+SWT_Charset_Turkish=\u0442\u0443\u0440\u0435\u0446\u044c\u043a\u0430
+SWT_Charset_Nordic=\u0441\u043a\u0430\u043d\u0434\u0438\u043d\u0430\u0432\u0441\u044c\u043a\u0430
+SWT_Charset_Thai=\u0442\u0430\u0439\u0441\u044c\u043a\u0430
+SWT_Charset_BalticRim=\u043f\u0440\u0438\u0431\u0430\u043b\u0442\u0456\u0439\u0441\u044c\u043a\u0430
+SWT_Charset_Celtic=\u043a\u0435\u043b\u044c\u0442\u0441\u044c\u043a\u0430
+SWT_Charset_Euro=\u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u044c\u043a\u0430
+SWT_Charset_Romanian=\u0440\u0443\u043c\u0443\u043d\u0441\u044c\u043a\u0430
+SWT_Charset_SimplifiedChinese=\u0441\u043f\u0440\u043e\u0449\u0435\u043d\u0430 \u043a\u0438\u0442\u0430\u0439\u0441\u044c\u043a\u0430
+SWT_Charset_TraditionalChinese=\u0442\u0440\u0430\u0434\u0438\u0446\u0456\u0439\u043d\u0430 \u043a\u0438\u0442\u0430\u0439\u0441\u044c\u043a\u0430
+SWT_Charset_Japanese=\u044f\u043f\u043e\u043d\u0441\u044c\u043a\u0430
+SWT_Charset_Korean=\u043a\u043e\u0440\u0435\u0439\u0441\u044c\u043a\u0430
+SWT_Charset_Unicode=\u0443\u043d\u0456\u043a\u043e\u0434
+SWT_Charset_ASCII=ASCII
+SWT_InputMethods=\u041c\u0435\u0442\u043e\u0434 \u0412\u0432\u043e\u0434\u0443
+SWT_Password=\u041f\u0430\u0440\u043e\u043b\u044c
+SWT_Username=\u0406\u043c\'\u044f \u041a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430:
+SWT_Switch=\u041f\u0435\u0440\u0435\u043c\u0438\u043a\u0430\u0447
+SWT_Press=\u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c
+SWT_Open=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438
+SWT_Close=\u0417\u0430\u043a\u0440\u0438\u0442\u0438
+SWT_Minimize=\u041c\u0456\u043d\u0456\u043c\u0456\u0437\u0443\u0432\u0430\u0442\u0438
+SWT_Maximize=\u041c\u0430\u043a\u0441\u0438\u043c\u0456\u0437\u0443\u0432\u0430\u0442\u0438
+SWT_Restore=\u0412\u0456\u0434\u043d\u043e\u0432\u0438\u0442\u0438
+SWT_ShowList=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u041f\u0435\u0440\u0435\u043b\u0456\u043a
+SWT_FileDownload=\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u0424\u0430\u0439\u043b\u0443
+SWT_Download_File=\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f: {0}
+SWT_Download_Location=\u0417\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u043e {0} \u0437 {1}
+SWT_Download_Started=\u0422\u0440\u0438\u0432\u0430\u0454 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f...
+SWT_Download_Status=\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f: {0,number,integer} KB \u0437 {1,number,integer} KB
+SWT_Authentication_Required=\u041f\u043e\u0442\u0440\u0456\u0431\u043d\u0430 \u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0456\u044f
+SWT_Enter_Username_and_Password=\u0412\u0432\u0435\u0434\u0456\u0442\u044c \u0456\u043c\'\u044f \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430 \u0442\u0430 \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f {0} \u0432 {1}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_zh._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_zh._properties
new file mode 100644
index 0000000..064802e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_zh._properties
@@ -0,0 +1,65 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=\u662f
+SWT_No=\u5426
+SWT_OK=\u786e\u5b9a
+SWT_Cancel=\u53d6\u6d88
+SWT_Abort=\u653e\u5f03
+SWT_Retry=\u91cd\u8bd5
+SWT_Ignore=\u5ffd\u7565
+SWT_Sample=\u6837\u672c
+SWT_A_Sample_Text=\u6837\u672c\u6587\u672c
+SWT_Selection=\u9009\u62e9
+SWT_Current_Selection=\u5f53\u524d\u9009\u62e9
+SWT_Font=\u5b57\u4f53
+SWT_Color=\u989c\u8272
+SWT_Extended_style=\u6269\u5c55\u6837\u5f0f
+SWT_Size=\u5927\u5c0f
+SWT_Style=\u6837\u5f0f
+SWT_Save=\u4fdd\u5b58
+SWT_Character_set=\u5b57\u7b26\u96c6
+SWT_ColorDialog_Title=\u989c\u8272
+SWT_FontDialog_Title=\u5b57\u4f53
+SWT_FontSet=\u5b57\u4f53\u96c6
+SWT_NewFont=\u65b0\u5b57\u4f53
+SWT_Remove=\u5220\u9664
+SWT_Up=\u5411\u4e0a
+SWT_Down=\u5411\u4e0b
+SWT_Charset_Western=\u897f\u6b27\u8bed\u8a00
+SWT_Charset_EastEuropean=\u4e1c\u6b27\u8bed\u8a00
+SWT_Charset_SouthEuropean=\u5357\u6b27\u8bed\u8a00
+SWT_Charset_NorthEuropean=\u5317\u6b27\u8bed\u8a00
+SWT_Charset_Cyrillic=\u897f\u91cc\u5c14\u8bed
+SWT_Charset_Arabic=\u963f\u62c9\u4f2f\u8bed
+SWT_Charset_Greek=\u5e0c\u814a\u8bed
+SWT_Charset_Hebrew=\u5e0c\u4f2f\u83b1\u8bed
+SWT_Charset_Turkish=\u571f\u8033\u5176\u8bed
+SWT_Charset_Nordic=\u632a\u5a01\u8bed
+SWT_Charset_Thai=\u6cf0\u56fd\u8bed
+SWT_Charset_BalticRim=\u6ce2\u7f57\u7684\u8bed
+SWT_Charset_Celtic=\u51ef\u5c14\u7279\u8bed
+SWT_Charset_Euro=\u6b27\u6d32\u8bed\u8a00
+SWT_Charset_Romanian=\u7f57\u9a6c\u5c3c\u4e9a\u8bed
+SWT_Charset_SimplifiedChinese=\u7b80\u4f53\u4e2d\u6587
+SWT_Charset_TraditionalChinese=\u7e41\u4f53\u4e2d\u6587
+SWT_Charset_Japanese=\u65e5\u8bed
+SWT_Charset_Korean=\u671d\u9c9c\u8bed
+SWT_Charset_Unicode=Unicode
+SWT_Charset_ASCII=ASCII
+SWT_InputMethods=\u8f93\u5165\u6cd5
+SWT_Password=\u5bc6\u7801\uff1a
+SWT_Username=\u7528\u6237\u540d\uff1a
+SWT_Switch=\u5207\u6362
+SWT_Press=\u6309
+SWT_Open=\u6253\u5f00
+SWT_Close=\u5173\u95ed
+SWT_Minimize=\u6700\u5c0f\u5316
+SWT_Maximize=\u6700\u5927\u5316
+SWT_Restore=\u590d\u539f
+SWT_ShowList=\u663e\u793a\u5217\u8868
+SWT_FileDownload=\u6587\u4ef6\u4e0b\u8f7d
+SWT_Download_File=\u4e0b\u8f7d\uff1a{0}
+SWT_Download_Location=\u4fdd\u5b58 {1} \u4e2d\u7684 {0}
+SWT_Download_Started=\u6b63\u5728\u4e0b\u8f7d...
+SWT_Download_Status=\u4e0b\u8f7d\uff1a{0,number,integer} KB\uff08\u5171 {1,number,integer} KB\uff09
+SWT_Authentication_Required=\u9700\u8981\u8ba4\u8bc1
+SWT_Enter_Username_and_Password=\u8f93\u5165 {0}\uff08\u4f4d\u4e8e {1}\uff09\u7684\u7528\u6237\u540d\u548c\u5bc6\u7801
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_zh_TW._properties b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_zh_TW._properties
new file mode 100644
index 0000000..9ec42cc
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common_j2se/org/eclipse/swt/internal/SWTMessages_zh_TW._properties
@@ -0,0 +1,64 @@
+# Copyright by many contributors; see http://babel.eclipse.org/
+SWT_Yes=\u662f
+SWT_No=\u5426
+SWT_OK=\u78ba\u5b9a
+SWT_Cancel=\u53d6\u6d88
+SWT_Abort=\u4e2d\u6b62
+SWT_Retry=\u91cd\u8a66
+SWT_Ignore=\u5ffd\u7565
+SWT_Sample=\u7bc4\u4f8b
+SWT_A_Sample_Text=\u7bc4\u4f8b\u6587\u5b57
+SWT_Selection=\u9078\u53d6
+SWT_Current_Selection=\u73fe\u884c\u9078\u64c7
+SWT_Font=\u5b57\u578b
+SWT_Color=\u984f\u8272
+SWT_Extended_style=\u5ef6\u4f38\u6a23\u5f0f
+SWT_Size=\u5927\u5c0f
+SWT_Style=\u6a23\u5f0f
+SWT_Save=\u5132\u5b58
+SWT_Character_set=\u5b57\u96c6
+SWT_ColorDialog_Title=\u984f\u8272
+SWT_FontDialog_Title=\u5b57\u578b
+SWT_FontSet=\u5b57\u578b\u8a2d\u5b9a
+SWT_NewFont=\u65b0\u5b57\u578b
+SWT_Remove=\u79fb\u9664
+SWT_Up=\u4e0a
+SWT_Down=\u4e0b
+SWT_Charset_Western=\u897f\u90e8
+SWT_Charset_EastEuropean=\u6771\u90e8
+SWT_Charset_SouthEuropean=\u5357\u90e8
+SWT_Charset_NorthEuropean=\u5317\u90e8
+SWT_Charset_Cyrillic=\u65af\u62c9\u592b\u6587
+SWT_Charset_Arabic=\u963f\u62c9\u4f2f\u6587
+SWT_Charset_Greek=\u5e0c\u81d8\u6587
+SWT_Charset_Hebrew=\u5e0c\u4f2f\u4f86\u6587
+SWT_Charset_Turkish=\u571f\u8033\u5176\u6587
+SWT_Charset_Nordic=\u65e5\u8033\u66fc\u6587
+SWT_Charset_Thai=\u6cf0\u6587
+SWT_Charset_BalticRim=\u6ce2\u7f85\u7684\u6d77\u5404\u65cf\u6587
+SWT_Charset_Celtic=\u585e\u723e\u7279\u6587
+SWT_Charset_Euro=\u6b50\u6d32
+SWT_Charset_Romanian=\u7f85\u99ac\u5c3c\u4e9e\u6587
+SWT_Charset_SimplifiedChinese=\u7c21\u9ad4\u4e2d\u6587
+SWT_Charset_TraditionalChinese=\u7e41\u9ad4\u4e2d\u6587
+SWT_Charset_Japanese=\u65e5\u6587
+SWT_Charset_Korean=\u97d3\u6587
+SWT_Charset_ASCII=ASCII
+SWT_InputMethods=\u8f38\u5165\u65b9\u6cd5
+SWT_Password=\u5bc6\u78bc\uff1a
+SWT_Username=\u4f7f\u7528\u8005\u540d\u7a31\uff1a
+SWT_Switch=\u5207\u63db
+SWT_Press=\u6309
+SWT_Open=\u958b\u555f
+SWT_Close=\u95dc\u9589
+SWT_Minimize=\u6700\u5c0f\u5316
+SWT_Maximize=\u6700\u5927\u5316
+SWT_Restore=\u9084\u539f
+SWT_ShowList=\u986f\u793a\u6e05\u55ae
+SWT_FileDownload=\u6a94\u6848\u4e0b\u8f09
+SWT_Download_File=\u4e0b\u8f09\uff1a{0}
+SWT_Download_Location=\u5132\u5b58 {1} \u7684 {0}
+SWT_Download_Started=\u6b63\u5728\u4e0b\u8f09...
+SWT_Download_Status=\u4e0b\u8f09\uff1a{0,number,integer} KB (\u5171 {1,number,integer} KB)
+SWT_Authentication_Required=\u9700\u8981\u9451\u5225
+SWT_Enter_Username_and_Password=\u65bc {1} \u8655\u8f38\u5165 {0} \u7684\u4f7f\u7528\u8005\u540d\u7a31\u53ca\u5bc6\u78bc
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/emulated/datetime/org/eclipse/swt/widgets/DateTime.java b/bundles/org.eclipse.swt/Eclipse SWT/emulated/datetime/org/eclipse/swt/widgets/DateTime.java
new file mode 100644
index 0000000..cafcb09
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/emulated/datetime/org/eclipse/swt/widgets/DateTime.java
@@ -0,0 +1,1180 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2009 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.widgets;
+
+
+import java.text.DateFormatSymbols; //TODO: not in CLDC
+import java.util.Calendar; // TODO: Gregorian not in CLDC
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * Instances of this class are selectable user interface
+ * objects that allow the user to enter and modify date
+ * or time values.
+ * <p>
+ * Note that although this class is a subclass of <code>Composite</code>,
+ * it does not make sense to add children to it, or set a layout on it.
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>DATE, TIME, CALENDAR, SHORT, MEDIUM, LONG, DROP_DOWN</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>DefaultSelection, Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles DATE, TIME, or CALENDAR may be specified,
+ * and only one of the styles SHORT, MEDIUM, or LONG may be specified.
+ * The DROP_DOWN style is a <em>HINT</em>, and it is only valid with the DATE style.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#datetime">DateTime snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ *
+ * @since 3.3
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class DateTime extends Composite {
+	Color fg, bg;
+	Calendar calendar;
+	DateFormatSymbols formatSymbols;
+	Button down, up, monthDown, monthUp, yearDown, yearUp;
+	Text text;
+	Point[] fieldIndices;
+	int[] fieldNames;
+	int fieldCount, currentField = 0, characterCount = 0;
+	boolean ignoreVerify = false;
+	
+	// TODO: default format strings need more work for locale
+	static final String DEFAULT_SHORT_DATE_FORMAT = "MM/YYYY";
+	static final String DEFAULT_MEDIUM_DATE_FORMAT = "MM/DD/YYYY";
+	static final String DEFAULT_LONG_DATE_FORMAT = "MM/DD/YYYY";
+	static final String DEFAULT_SHORT_TIME_FORMAT = "HH:MM AM";
+	static final String DEFAULT_MEDIUM_TIME_FORMAT = "HH:MM:SS AM";
+	static final String DEFAULT_LONG_TIME_FORMAT = "HH:MM:SS AM";
+	static final int MARGIN_WIDTH = 2;
+	static final int MARGIN_HEIGHT = 1;
+	static final int MIN_YEAR = 1752; // Gregorian switchover in North America: September 19, 1752
+	static final int MAX_YEAR = 9999;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#DATE
+ * @see SWT#TIME
+ * @see SWT#CALENDAR
+ * @see SWT#SHORT
+ * @see SWT#MEDIUM
+ * @see SWT#LONG
+ * @see SWT#DROP_DOWN
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public DateTime(Composite parent, int style) {
+	super(parent, checkStyle(style) | SWT.NO_REDRAW_RESIZE);
+	calendar = Calendar.getInstance();
+	formatSymbols = new DateFormatSymbols();
+	if ((this.style & SWT.CALENDAR) != 0) {
+		Listener listener = new Listener() {
+			public void handleEvent(Event event) {
+				switch(event.type) {
+					case SWT.Paint:		handlePaint(event); break;
+					case SWT.Resize:	handleResize(event); break;
+					case SWT.MouseDown:	handleMouseDown(event); break;
+					case SWT.KeyDown:	handleKeyDown(event); break;
+					case SWT.Traverse:	handleTraverse(event); break;
+				}
+			}
+		};
+		addListener(SWT.Paint, listener);
+		addListener(SWT.Resize, listener);
+		addListener(SWT.MouseDown, listener);
+		addListener(SWT.KeyDown, listener);
+		addListener(SWT.Traverse, listener);
+		yearDown = new Button(this, SWT.ARROW | SWT.LEFT);
+		//yearDown.setToolTipText(SWT.getMessage ("SWT_Last_Year")); //$NON-NLS-1$
+		monthDown = new Button(this, SWT.ARROW | SWT.LEFT);
+		//monthDown.setToolTipText(SWT.getMessage ("SWT_Last_Month")); //$NON-NLS-1$
+		monthUp = new Button(this, SWT.ARROW | SWT.RIGHT);
+		//monthUp.setToolTipText(SWT.getMessage ("SWT_Next_Month")); //$NON-NLS-1$
+		yearUp = new Button(this, SWT.ARROW | SWT.RIGHT);
+		//yearUp.setToolTipText(SWT.getMessage ("SWT_Next_Year")); //$NON-NLS-1$
+		listener = new Listener() {
+			public void handleEvent(Event event) {
+				handleSelection(event);
+			}
+		};
+		yearDown.addListener(SWT.Selection, listener);
+		monthDown.addListener(SWT.Selection, listener);
+		monthUp.addListener(SWT.Selection, listener);
+		yearUp.addListener(SWT.Selection, listener);
+	} else {
+		text = new Text(this, SWT.SINGLE);
+		if ((this.style & SWT.DATE) != 0) {
+			setFormat((this.style & SWT.SHORT) != 0 ? DEFAULT_SHORT_DATE_FORMAT : (this.style & SWT.LONG) != 0 ? DEFAULT_LONG_DATE_FORMAT : DEFAULT_MEDIUM_DATE_FORMAT);
+		} else { // SWT.TIME
+			setFormat((this.style & SWT.SHORT) != 0 ? DEFAULT_SHORT_TIME_FORMAT : (this.style & SWT.LONG) != 0 ? DEFAULT_LONG_TIME_FORMAT : DEFAULT_MEDIUM_TIME_FORMAT);
+		}
+		text.setText(getFormattedString(this.style));
+		Listener listener = new Listener() {
+			public void handleEvent(Event event) {
+				switch(event.type) {
+					case SWT.KeyDown: onKeyDown(event); break;
+					case SWT.FocusIn: onFocusIn(event); break;
+					case SWT.FocusOut: onFocusOut(event); break;
+					case SWT.MouseDown: onMouseClick(event); break;
+					case SWT.MouseUp: onMouseClick(event); break;
+					case SWT.Verify: onVerify(event); break;
+				}
+			}
+		};
+		text.addListener(SWT.KeyDown, listener);
+		text.addListener(SWT.FocusIn, listener);
+		text.addListener(SWT.FocusOut, listener);
+		text.addListener(SWT.MouseDown, listener);
+		text.addListener(SWT.MouseUp, listener);
+		text.addListener(SWT.Verify, listener);
+		up = new Button(this, SWT.ARROW | SWT.UP);
+		//up.setToolTipText(SWT.getMessage ("SWT_Up")); //$NON-NLS-1$
+		down = new Button(this, SWT.ARROW | SWT.DOWN);
+		//down.setToolTipText(SWT.getMessage ("SWT_Down")); //$NON-NLS-1$
+		up.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event event) {
+				incrementField(+1);
+				text.setFocus();
+			}
+		});
+		down.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event event) {
+				incrementField(-1);
+				text.setFocus();
+			}
+		});
+		addListener(SWT.Resize, new Listener() {
+			public void handleEvent(Event event) {
+				onResize(event);
+			}
+		});
+	}
+}
+
+static int checkStyle (int style) {
+	style = checkBits (style, SWT.DATE, SWT.TIME, SWT.CALENDAR, 0, 0, 0);
+	return checkBits (style, SWT.MEDIUM, SWT.SHORT, SWT.LONG, 0, 0, 0);
+}
+
+String formattedStringValue(int fieldName, int value, boolean adjust) {
+	if (fieldName == Calendar.AM_PM) {
+		String[] ampm = formatSymbols.getAmPmStrings();
+		return ampm[value];
+	}
+	if (adjust) {
+		if (fieldName == Calendar.HOUR && value == 0) {
+			return String.valueOf(12); // TODO: needs more work for setFormat and locale
+		}
+		if (fieldName == Calendar.MONTH) {
+			return String.valueOf(value + 1);
+		}
+	}
+	return String.valueOf(value);
+}
+
+String getFormattedString(int style) {
+	if ((style & SWT.TIME) != 0) {
+		String[] ampm = formatSymbols.getAmPmStrings();
+		int h = calendar.get(Calendar.HOUR); if (h == 0) h = 12;
+		int m = calendar.get(Calendar.MINUTE);
+		int s = calendar.get(Calendar.SECOND);
+		int a = calendar.get(Calendar.AM_PM);
+		if ((style & SWT.SHORT) != 0) return "" + (h < 10 ? " " : "") + h + ":" + (m < 10 ? "0" : "") + m + " " + ampm[a];
+		return "" + (h < 10 ? " " : "") + h + ":" + (m < 10 ? "0" : "") + m + ":" + (s < 10 ? "0" : "") + s + " " + ampm[a];
+	}
+	/* SWT.DATE */
+	int y = calendar.get(Calendar.YEAR);
+	int m = calendar.get(Calendar.MONTH) + 1;
+	int d = calendar.get(Calendar.DAY_OF_MONTH);
+	if ((style & SWT.SHORT) != 0) return "" + (m < 10 ? " " : "") + m + "/" + y;
+	return "" + (m < 10 ? " " : "") + m + "/" + (d < 10 ? " " : "") + d + "/" + y;
+}
+
+String getComputeSizeString(int style) {
+	if ((style & SWT.DATE) != 0) {
+		return (style & SWT.SHORT) != 0 ? DEFAULT_SHORT_DATE_FORMAT : (style & SWT.LONG) != 0 ? DEFAULT_LONG_DATE_FORMAT : DEFAULT_MEDIUM_DATE_FORMAT;
+	}
+	// SWT.TIME
+	return (style & SWT.SHORT) != 0 ? DEFAULT_SHORT_TIME_FORMAT : (style & SWT.LONG) != 0 ? DEFAULT_LONG_TIME_FORMAT : DEFAULT_MEDIUM_TIME_FORMAT;
+}
+
+int getFieldIndex(int fieldName) {
+	for (int i = 0; i < fieldCount; i++) {
+		if (fieldNames[i] == fieldName) {
+			return i;
+		}
+	}
+	return -1;
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is called when the user changes the control's value.
+ * <code>widgetDefaultSelected</code> is typically called when ENTER is pressed.
+ * </p>
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection, typedListener);
+	addListener (SWT.DefaultSelection, typedListener);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+void commitCurrentField() {
+	if (characterCount > 0) {
+		characterCount = 0;
+		int fieldName = fieldNames[currentField];
+		int start = fieldIndices[currentField].x;
+		int end = fieldIndices[currentField].y;
+		String value = text.getText(start, end - 1);
+		int s = value.lastIndexOf(' ');
+		if (s != -1) value = value.substring(s + 1);
+		int newValue = unformattedIntValue(fieldName, value, characterCount == 0, calendar.getActualMaximum(fieldName));
+		if (newValue != -1) setTextField(fieldName, newValue, true, true);
+	}
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget();
+	int width = 0, height = 0;
+	Rectangle trim;
+	if ((style & SWT.CALENDAR) != 0) {
+		Point cellSize = getCellSize(null);
+		Point buttonSize = monthDown.computeSize(SWT.DEFAULT, SWT.DEFAULT, changed);
+		width = cellSize.x * 7;
+		height = cellSize.y * 7 + Math.max(cellSize.y, buttonSize.y);
+	} else { /* SWT.DATE and SWT.TIME */
+		GC gc = new GC(text);
+		Point textSize = gc.stringExtent(getComputeSizeString(style));
+		gc.dispose();
+		trim = text.computeTrim(0, 0, textSize.x, textSize.y);
+		Point buttonSize = up.computeSize(SWT.DEFAULT, SWT.DEFAULT, changed);
+		width = trim.width + buttonSize.x;
+		height = Math.max(trim.height, buttonSize.y);
+	}
+	if (wHint != SWT.DEFAULT) width = wHint;
+	if (hHint != SWT.DEFAULT) height = hHint;
+	int borderWidth = getBorderWidth ();
+	return new Point (width + 2*borderWidth, height + 2*borderWidth);
+}
+
+void drawDay(GC gc, Point cellSize, int day) {
+	int cell = getCell(day);
+	Point location = getCellLocation(cell, cellSize);
+	String str = String.valueOf(day);
+	Point extent = gc.stringExtent(str);
+	int date = calendar.get(Calendar.DAY_OF_MONTH);
+	if (day == date) {
+		Display display = getDisplay();
+		gc.setBackground(display.getSystemColor(SWT.COLOR_LIST_SELECTION));
+		gc.setForeground(display.getSystemColor(SWT.COLOR_LIST_SELECTION_TEXT));
+		gc.fillRectangle(location.x, location.y, cellSize.x, cellSize.y);
+	}
+	gc.drawString(str, location.x + (cellSize.x - extent.x) / 2, location.y + (cellSize.y - extent.y) / 2, true);
+	if (day == date) {
+		gc.setBackground(getBackground());
+		gc.setForeground(getForeground());
+	}
+}
+
+void drawDays(GC gc, Point cellSize, Rectangle client) {
+	gc.setBackground(getBackground());
+	gc.setForeground(getForeground());
+	gc.fillRectangle(0, cellSize.y, client.width, cellSize.y * 7);
+	int firstDay = calendar.getActualMinimum(Calendar.DAY_OF_MONTH);
+	int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+	for (int day = firstDay; day <= lastDay; day++) {
+		drawDay(gc, cellSize, day);
+	}
+}
+
+void drawDaysOfWeek(GC gc, Point cellSize, Rectangle client) {
+	Display display = getDisplay();
+	gc.setBackground(display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
+	gc.setForeground(display.getSystemColor(SWT.COLOR_WIDGET_FOREGROUND));
+	gc.fillRectangle(0, 0, client.width, cellSize.y);
+	String[] days = formatSymbols.getShortWeekdays();
+	int x = 0, y = 0; 
+	for (int i = 1; i < days.length; i++) {
+		String day = days[i];
+		Point extent = gc.stringExtent(day);
+		gc.drawString(day, x + (cellSize.x - extent.x) / 2, y + (cellSize.y - extent.y) / 2, true);
+		x += cellSize.x;
+	}
+	gc.drawLine(0, cellSize.y - 1, client.width, cellSize.y - 1);
+}
+
+void drawMonth(GC gc, Point cellSize, Rectangle client) {
+	Display display = getDisplay();
+	gc.setBackground(display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
+	gc.setForeground(display.getSystemColor(SWT.COLOR_WIDGET_FOREGROUND));
+	int y = cellSize.y * 7;
+	gc.fillRectangle(0, y, client.width, cellSize.y);
+	gc.drawLine(0, y - 1, client.width, y - 1);
+	String str = formatSymbols.getShortMonths()[calendar.get(Calendar.MONTH)] + ", " + calendar.get(Calendar.YEAR);
+	Point extent = gc.stringExtent(str);
+	gc.drawString(str, (cellSize.x * 7 - extent.x) / 2, y + (cellSize.y - extent.y) / 2, true);
+}
+
+Point getCellSize(GC gc) {
+	boolean dispose = gc == null; 
+	if (gc == null) gc = new GC(this);
+	int width = 0, height = 0;
+	String[] days = formatSymbols.getShortWeekdays();
+	for (int i = 0; i < days.length; i++) {
+		Point extent = gc.stringExtent(days[i]);
+		width = Math.max(width, extent.x);
+		height = Math.max(height, extent.y);
+	}
+	int firstDay = calendar.getMinimum(Calendar.DAY_OF_MONTH);
+	int lastDay = calendar.getMaximum(Calendar.DAY_OF_MONTH);
+	for (int day = firstDay; day <= lastDay; day++) {
+		Point extent = gc.stringExtent(String.valueOf(day));
+		width = Math.max(width, extent.x);
+		height = Math.max(height, extent.y);	
+	}
+	if (dispose) gc.dispose();
+	return new Point(width + MARGIN_WIDTH * 2, height + MARGIN_HEIGHT * 2);
+}
+
+Point getCellLocation(int cell, Point cellSize) {
+	return new Point(cell % 7 * cellSize.x, cell / 7 * cellSize.y);
+}
+
+int getCell(int date) {
+	int day = calendar.get(Calendar.DAY_OF_MONTH);
+	calendar.set(Calendar.DAY_OF_MONTH, 1);
+	int result = date + calendar.get(Calendar.DAY_OF_WEEK) + 5;
+	calendar.set(Calendar.DAY_OF_MONTH, day);
+	return result;
+}
+
+int getDate(int cell) {
+	int day = calendar.get(Calendar.DAY_OF_MONTH);
+	calendar.set(Calendar.DAY_OF_MONTH, 1);
+	int result = cell - calendar.get(Calendar.DAY_OF_WEEK) - 5;
+	calendar.set(Calendar.DAY_OF_MONTH, day);
+	return result;
+}
+
+public Color getBackground() {
+	checkWidget();
+	if (bg == null) {
+		return getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND);
+	}
+	return bg;
+}
+
+/**
+ * Returns the receiver's date, or day of the month.
+ * <p>
+ * The first day of the month is 1, and the last day depends on the month and year.
+ * </p>
+ *
+ * @return a positive integer beginning with 1
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getDay() {
+	checkWidget();
+	return calendar.get(Calendar.DAY_OF_MONTH);
+}
+
+public Color getForeground() {
+	checkWidget();
+	if (fg == null) {
+		return getDisplay().getSystemColor(SWT.COLOR_LIST_FOREGROUND);
+	}
+	return fg;
+}
+
+/**
+ * Returns the receiver's hours.
+ * <p>
+ * Hours is an integer between 0 and 23.
+ * </p>
+ *
+ * @return an integer between 0 and 23
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getHours () {
+	checkWidget ();
+	return calendar.get(Calendar.HOUR_OF_DAY);
+}
+
+/**
+ * Returns the receiver's minutes.
+ * <p>
+ * Minutes is an integer between 0 and 59.
+ * </p>
+ *
+ * @return an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMinutes () {
+	checkWidget ();
+	return calendar.get(Calendar.MINUTE);
+}
+
+/**
+ * Returns the receiver's month.
+ * <p>
+ * The first month of the year is 0, and the last month is 11.
+ * </p>
+ *
+ * @return an integer between 0 and 11
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMonth() {
+	checkWidget();
+	return calendar.get(Calendar.MONTH);
+}
+
+String getNameText() {
+	return (style & SWT.TIME) != 0 ? getHours() + ":" + getMinutes() + ":" + getSeconds()
+			: (getMonth() + 1) + "/" + getDay() + "/" + getYear();
+}
+
+/**
+ * Returns the receiver's seconds.
+ * <p>
+ * Seconds is an integer between 0 and 59.
+ * </p>
+ *
+ * @return an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSeconds () {
+	checkWidget ();
+	return calendar.get(Calendar.SECOND);
+}
+
+/**
+ * Returns the receiver's year.
+ * <p>
+ * The first year is 1752 and the last year is 9999.
+ * </p>
+ *
+ * @return an integer between 1752 and 9999
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getYear() {
+	checkWidget();
+	return calendar.get(Calendar.YEAR);
+}
+
+void handleKeyDown(Event event) {
+	int newDay = calendar.get(Calendar.DAY_OF_MONTH);
+	switch (event.keyCode) {
+		case SWT.ARROW_DOWN: newDay += 7; break;
+		case SWT.ARROW_UP: newDay -= 7; break;
+		case SWT.ARROW_RIGHT: newDay += 1; break;
+		case SWT.ARROW_LEFT: newDay -= 1; break;
+	}
+	setDay(newDay, true);
+}
+
+void handleMouseDown(Event event) {
+	setFocus();
+	Point cellSize = getCellSize(null);
+	int column = event.x / cellSize.x;
+	int row = event.y / cellSize.y;	
+	int cell = row * 7 + column;
+	int newDay = getDate(cell);
+	setDay(newDay, true);
+}
+
+void handlePaint(Event event) {
+	GC gc = event.gc;
+	Rectangle client = getClientArea();
+	Point cellSize = getCellSize(gc);
+	drawDaysOfWeek(gc, cellSize, client);
+	drawDays(gc, cellSize, client);
+	drawMonth(gc, cellSize, client);
+}
+
+void handleResize(Event event) {
+	yearDown.pack();
+	monthDown.pack();
+	monthUp.pack();
+	yearUp.pack();
+	Point cellSize = getCellSize(null);
+	Point size = monthDown.getSize();
+	int height = Math.max(cellSize.y, size.y);
+	int y = cellSize.y * 7 + (height - size.y) / 2;
+	yearDown.setLocation(0, y);
+	monthDown.setLocation(size.x, y);
+	int x = cellSize.x * 7 - size.x;
+	monthUp.setLocation(x - size.x, y);
+	yearUp.setLocation(x, y);
+}
+
+void handleSelection(Event event) {
+	if (event.widget == monthDown) {
+		calendar.add(Calendar.MONTH, -1);
+	} else if (event.widget == monthUp) {
+		calendar.add(Calendar.MONTH, 1);
+	} else if (event.widget == yearDown) {
+		calendar.add(Calendar.YEAR, -1);
+	} else if (event.widget == yearUp) {				
+		calendar.add(Calendar.YEAR, 1);
+	} else {
+		return;
+	}
+	redraw();
+	postEvent(SWT.Selection);
+}
+
+void handleTraverse(Event event) {
+	switch (event.detail) {
+		case SWT.TRAVERSE_ESCAPE:
+		case SWT.TRAVERSE_PAGE_NEXT:
+		case SWT.TRAVERSE_PAGE_PREVIOUS:
+		case SWT.TRAVERSE_RETURN:
+		case SWT.TRAVERSE_TAB_NEXT:
+		case SWT.TRAVERSE_TAB_PREVIOUS:
+			event.doit = true;
+			break;
+	}	
+}
+
+boolean isValidTime(int fieldName, int value) {
+	int min = calendar.getActualMinimum(fieldName);
+	int max = calendar.getActualMaximum(fieldName);
+	return value >= min && value <= max;
+}
+
+boolean isValidDate(int year, int month, int day) {
+	if (year < MIN_YEAR || year > MAX_YEAR) return false;
+	Calendar valid = Calendar.getInstance();
+	valid.set(year, month, day);
+	return valid.get(Calendar.YEAR) == year
+		&& valid.get(Calendar.MONTH) == month
+		&& valid.get(Calendar.DAY_OF_MONTH) == day;
+}
+
+void onKeyDown(Event event) {
+	int fieldName;
+	switch (event.keyCode) {
+		case SWT.ARROW_RIGHT:
+		case SWT.KEYPAD_DIVIDE:
+			// a right arrow or a valid separator navigates to the field on the right, with wraping
+			selectField((currentField + 1) % fieldCount);
+			break;
+		case SWT.ARROW_LEFT:
+			// navigate to the field on the left, with wrapping
+			int index = currentField - 1;
+			selectField(index < 0 ? fieldCount - 1 : index);
+			break;
+		case SWT.ARROW_UP:
+		case SWT.KEYPAD_ADD:
+			// set the value of the current field to value + 1, with wrapping
+			commitCurrentField();
+			incrementField(+1);
+			break;
+		case SWT.ARROW_DOWN:
+		case SWT.KEYPAD_SUBTRACT:
+			// set the value of the current field to value - 1, with wrapping
+			commitCurrentField();
+			incrementField(-1);
+			break;
+		case SWT.HOME:
+			// set the value of the current field to its minimum
+			fieldName = fieldNames[currentField];
+			setTextField(fieldName, calendar.getActualMinimum(fieldName), true, true);
+			break;
+		case SWT.END:
+			// set the value of the current field to its maximum
+			fieldName = fieldNames[currentField];
+			setTextField(fieldName, calendar.getActualMaximum(fieldName), true, true);
+			break;
+		default:
+			switch (event.character) {
+				case '/':
+				case ':':
+				case '-':
+				case '.':
+					// a valid separator navigates to the field on the right, with wraping
+					selectField((currentField + 1) % fieldCount);
+					break;
+			}
+	}
+}
+
+void onFocusIn(Event event) {
+	selectField(currentField);
+}
+
+void onFocusOut(Event event) {
+	commitCurrentField();
+}
+
+void onMouseClick(Event event) {
+	if (event.button != 1) return;
+	Point sel = text.getSelection();
+	for (int i = 0; i < fieldCount; i++) {
+		if (fieldIndices[i].x <= sel.x && sel.x <= fieldIndices[i].y) {
+			selectField(i);
+			break;
+		}
+	}
+}
+
+void onResize(Event event) {
+	Rectangle rect = getClientArea ();
+	int width = rect.width;
+	int height = rect.height;
+	Point buttonSize = up.computeSize(SWT.DEFAULT, height);
+	int buttonHeight = buttonSize.y / 2;
+	text.setBounds(0, 0, width - buttonSize.x, height);
+	up.setBounds(width - buttonSize.x, 0, buttonSize.x, buttonHeight);
+	down.setBounds(width - buttonSize.x, buttonHeight, buttonSize.x, buttonHeight);
+}
+
+void onVerify(Event event) {
+	if (ignoreVerify) return;
+	event.doit = false;
+	int fieldName = fieldNames[currentField];
+	int start = fieldIndices[currentField].x;
+	int end = fieldIndices[currentField].y;
+	int length = end - start;
+	String newText = event.text;
+	if (fieldName == Calendar.AM_PM) {
+		String[] ampm = formatSymbols.getAmPmStrings();
+		if (newText.equalsIgnoreCase(ampm[Calendar.AM].substring(0, 1)) || newText.equalsIgnoreCase(ampm[Calendar.AM])) {
+			setTextField(fieldName, Calendar.AM, true, false);
+		} else if (newText.equalsIgnoreCase(ampm[Calendar.PM].substring(0, 1)) || newText.equalsIgnoreCase(ampm[Calendar.PM])) {
+			setTextField(fieldName, Calendar.PM, true, false);
+		}
+		return;
+	}
+	if (characterCount > 0) {
+		try {
+			Integer.parseInt(newText);
+		} catch (NumberFormatException ex) {
+			return;
+		}
+		String value = text.getText(start, end - 1);
+		int s = value.lastIndexOf(' ');
+		if (s != -1) value = value.substring(s + 1);
+		newText = "" + value + newText;
+	}
+	int newTextLength = newText.length();
+	boolean first = characterCount == 0;
+	characterCount = (newTextLength < length) ? newTextLength : 0;
+	int max = calendar.getActualMaximum(fieldName);
+	int min = calendar.getActualMinimum(fieldName);
+	int newValue = unformattedIntValue(fieldName, newText, characterCount == 0, max);
+	if (newValue == -1) {
+		characterCount = 0;
+		return;
+	}
+	if (first && newValue == 0 && length > 1) {
+		setTextField(fieldName, newValue, false, false);
+	} else if (min <= newValue && newValue <= max) {
+		setTextField(fieldName, newValue, characterCount == 0, characterCount == 0);
+	} else {
+		if (newTextLength >= length) {
+			newText = newText.substring(newTextLength - length + 1);
+			newValue = unformattedIntValue(fieldName, newText, characterCount == 0, max);
+			if (newValue != -1) {
+				characterCount = length - 1;
+				if (min <= newValue && newValue <= max) {
+					setTextField(fieldName, newValue, characterCount == 0, true);
+				}
+			}
+		}
+	}
+}
+
+void incrementField(int amount) {
+	int fieldName = fieldNames[currentField];
+	int value = calendar.get(fieldName);
+	if (fieldName == Calendar.HOUR) {
+		int max = calendar.getMaximum(Calendar.HOUR);
+		int min = calendar.getMinimum(Calendar.HOUR);
+		if ((value == max && amount == 1) || (value == min && amount == -1)) {
+			int temp = currentField;
+			currentField = getFieldIndex(Calendar.AM_PM);
+			setTextField(Calendar.AM_PM, (calendar.get(Calendar.AM_PM) + 1) % 2, true, true);
+			currentField = temp;
+		}
+	}
+	setTextField(fieldName, value + amount, true, true);
+}
+
+void selectField(int index) {
+	if (index != currentField) {
+		commitCurrentField();
+	}
+	final int start = fieldIndices[index].x;
+	final int end = fieldIndices[index].y;
+	Point pt = text.getSelection();
+	if (index == currentField && start == pt.x && end == pt.y) return;
+	currentField = index;
+	display.asyncExec(new Runnable() {
+		public void run() {
+			if (!text.isDisposed()) {
+				String value = text.getText(start, end - 1);
+				int s = value.lastIndexOf(' ');
+				if (s == -1) s = start;
+				else s = start + s + 1;
+				text.setSelection(s, end);
+			}
+		}
+	});	
+}
+
+void setTextField(int fieldName, int value, boolean commit, boolean adjust) {
+	if (commit) {
+		int max = calendar.getActualMaximum(fieldName);
+		int min = calendar.getActualMinimum(fieldName);
+		if (fieldName == Calendar.YEAR) {
+			max = MAX_YEAR;
+			min = MIN_YEAR;
+			/* Special case: convert 1 or 2-digit years into reasonable 4-digit years. */
+			int currentYear = Calendar.getInstance().get(Calendar.YEAR);
+			int currentCentury = (currentYear / 100) * 100;
+			if (value < (currentYear + 30) % 100) value += currentCentury;
+			else if (value < 100) value += currentCentury - 100;
+		}
+		if (value > max) value = min; // wrap
+		if (value < min) value = max; // wrap
+	}
+	int start = fieldIndices[currentField].x;
+	int end = fieldIndices[currentField].y;
+	text.setSelection(start, end);
+	String newValue = formattedStringValue(fieldName, value, adjust);
+	StringBuffer buffer = new StringBuffer(newValue);
+	/* Convert leading 0's into spaces. */
+	int prependCount = end - start - buffer.length();
+	for (int i = 0; i < prependCount; i++) {
+		switch (fieldName) {
+		case Calendar.MINUTE:
+		case Calendar.SECOND:
+			buffer.insert(0, 0);
+		break;
+		default:
+			buffer.insert(0, ' ');
+		break;
+		}
+	}	
+	newValue = buffer.toString();
+	ignoreVerify = true;
+	text.insert(newValue);
+	ignoreVerify = false;
+	selectField(currentField);
+	if (commit) setField(fieldName, value);
+}
+
+void setField(int fieldName, int value) {
+	if (calendar.get(fieldName) == value) return;
+	if (fieldName == Calendar.AM_PM) {
+		calendar.roll(Calendar.HOUR_OF_DAY, 12); // TODO: needs more work for setFormat and locale
+	}
+	calendar.set(fieldName, value);
+	postEvent(SWT.Selection);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	removeListener (SWT.Selection, listener);
+	removeListener (SWT.DefaultSelection,listener);	
+}
+
+void redraw(int cell, Point cellSize) {
+	Point location = getCellLocation(cell, cellSize);
+	redraw(location.x, location.y, cellSize.x, cellSize.y, false);	
+}
+
+public void setBackground(Color color) {
+	checkWidget();
+	super.setBackground(color);
+	bg = color;
+	if (text != null) text.setBackground(color);
+}
+
+/**
+ * Sets the receiver's year, month, and day in a single operation.
+ * <p>
+ * This is the recommended way to set the date, because setting the year,
+ * month, and day separately may result in invalid intermediate dates.
+ * </p>
+ *
+ * @param year an integer between 1752 and 9999
+ * @param month an integer between 0 and 11
+ * @param day a positive integer beginning with 1
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.4
+ */
+public void setDate (int year, int month, int day) {
+	checkWidget ();
+	if (!isValidDate(year, month, day)) return;
+	calendar.set(Calendar.YEAR, year);
+	calendar.set(Calendar.DAY_OF_MONTH, 1);
+	calendar.set(Calendar.MONTH, month);
+	if ((style & SWT.CALENDAR) != 0) {
+		updateControl();
+		setDay(day, false);
+	} else {
+		calendar.set(Calendar.DAY_OF_MONTH, day);
+		updateControl();
+	}
+}
+
+/**
+ * Sets the receiver's date, or day of the month, to the specified day.
+ * <p>
+ * The first day of the month is 1, and the last day depends on the month and year.
+ * If the specified day is not valid for the receiver's month and year, then it is ignored. 
+ * </p>
+ *
+ * @param day a positive integer beginning with 1
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setDate
+ */
+public void setDay (int day) {
+	checkWidget();
+	if (!isValidDate(getYear(), getMonth(), day)) return;
+	if ((style & SWT.CALENDAR) != 0) {
+		setDay(day, false);
+	} else {
+		calendar.set(Calendar.DAY_OF_MONTH, day);
+		updateControl();
+	}
+}
+
+void setDay(int newDay, boolean notify) {
+	int firstDay = calendar.getActualMinimum(Calendar.DAY_OF_MONTH);
+	int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+	if (!(firstDay <= newDay && newDay <= lastDay)) return;
+	Point cellSize = getCellSize(null);
+	redraw(getCell(calendar.get(Calendar.DAY_OF_MONTH)), cellSize);
+	calendar.set(Calendar.DAY_OF_MONTH, newDay);
+	redraw(getCell(calendar.get(Calendar.DAY_OF_MONTH)), cellSize);
+	if (notify) postEvent(SWT.Selection);
+}
+
+public void setFont(Font font) {
+	checkWidget();
+	super.setFont(font);
+	if (text != null) text.setFont(font);
+	redraw();
+}
+
+public void setForeground(Color color) {
+	checkWidget();
+	super.setForeground(color);
+	fg = color;
+	if (text != null) text.setForeground(color);
+}
+
+void setFormat(String string) {
+	checkWidget();
+	// TODO: this needs to be locale sensitive
+	fieldCount = (style & SWT.DATE) != 0 ? ((style & SWT.SHORT) != 0 ? 2 : 3) : ((style & SWT.SHORT) != 0 ? 3 : 4);
+	fieldIndices = new Point[fieldCount];
+	fieldNames = new int[fieldCount];
+	if ((style & SWT.DATE) != 0) {
+		fieldNames[0] = Calendar.MONTH;
+		fieldIndices[0] = new Point(0, 2);
+		if ((style & SWT.SHORT) != 0) {
+			fieldNames[1] = Calendar.YEAR;
+			fieldIndices[1] = new Point(3, 7);
+		} else {
+			fieldNames[1] = Calendar.DAY_OF_MONTH;
+			fieldIndices[1] = new Point(3, 5);
+			fieldNames[2] = Calendar.YEAR;
+			fieldIndices[2] = new Point(6, 10);
+		}
+	} else { /* SWT.TIME */
+		fieldNames[0] = Calendar.HOUR;
+		fieldIndices[0] = new Point(0, 2);
+		fieldNames[1] = Calendar.MINUTE;
+		fieldIndices[1] = new Point(3, 5);
+		if ((style & SWT.SHORT) != 0) {
+			fieldNames[2] = Calendar.AM_PM;
+			fieldIndices[2] = new Point(6, 8);
+		} else {
+			fieldNames[2] = Calendar.SECOND;
+			fieldIndices[2] = new Point(6, 8);
+			fieldNames[3] = Calendar.AM_PM;
+			fieldIndices[3] = new Point(9, 11);
+		}
+	}
+}
+
+/**
+ * Sets the receiver's hours.
+ * <p>
+ * Hours is an integer between 0 and 23.
+ * </p>
+ *
+ * @param hours an integer between 0 and 23
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setHours (int hours) {
+	checkWidget ();
+	if (!isValidTime(Calendar.HOUR_OF_DAY, hours)) return;
+	calendar.set(Calendar.HOUR_OF_DAY, hours);
+	updateControl();
+}
+
+/**
+ * Sets the receiver's minutes.
+ * <p>
+ * Minutes is an integer between 0 and 59.
+ * </p>
+ *
+ * @param minutes an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMinutes (int minutes) {
+	checkWidget ();
+	if (!isValidTime(Calendar.MINUTE, minutes)) return;
+	calendar.set(Calendar.MINUTE, minutes);
+	updateControl();
+}
+
+/**
+ * Sets the receiver's month.
+ * <p>
+ * The first month of the year is 0, and the last month is 11.
+ * If the specified month is not valid for the receiver's day and year, then it is ignored. 
+ * </p>
+ *
+ * @param month an integer between 0 and 11
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setDate
+ */
+public void setMonth (int month) {
+	checkWidget();
+	if (!isValidDate(getYear(), month, getDay())) return;
+	calendar.set(Calendar.MONTH, month);
+	updateControl();
+}
+
+/**
+ * Sets the receiver's seconds.
+ * <p>
+ * Seconds is an integer between 0 and 59.
+ * </p>
+ *
+ * @param seconds an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSeconds (int seconds) {
+	checkWidget ();
+	if (!isValidTime(Calendar.SECOND, seconds)) return;
+	calendar.set(Calendar.SECOND, seconds);
+	updateControl();
+}
+
+/**
+ * Sets the receiver's hours, minutes, and seconds in a single operation.
+ *
+ * @param hours an integer between 0 and 23
+ * @param minutes an integer between 0 and 59
+ * @param seconds an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.4
+ */
+public void setTime (int hours, int minutes, int seconds) {
+	checkWidget ();
+	if (!isValidTime(Calendar.HOUR_OF_DAY, hours)) return;
+	if (!isValidTime(Calendar.MINUTE, minutes)) return;
+	if (!isValidTime(Calendar.SECOND, seconds)) return;
+	calendar.set(Calendar.HOUR_OF_DAY, hours);
+	calendar.set(Calendar.MINUTE, minutes);
+	calendar.set(Calendar.SECOND, seconds);
+	updateControl();
+}
+
+/**
+ * Sets the receiver's year.
+ * <p>
+ * The first year is 1752 and the last year is 9999.
+ * If the specified year is not valid for the receiver's day and month, then it is ignored. 
+ * </p>
+ *
+ * @param year an integer between 1752 and 9999
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setDate
+ */
+public void setYear (int year) {
+	checkWidget();
+	//if (!isValidDate(year, getMonth(), getDay())) return;
+	if (year < MIN_YEAR || year > MAX_YEAR) return;
+	calendar.set(Calendar.YEAR, year);
+	updateControl();
+}
+
+int unformattedIntValue(int fieldName, String newText, boolean adjust, int max) {
+	int newValue;
+	try {
+		newValue = Integer.parseInt(newText);
+	} catch (NumberFormatException ex) {
+		return -1;
+	}
+	if (fieldName == Calendar.MONTH && adjust) {
+		newValue--;
+		if (newValue == -1) newValue = max;
+	}
+	if (fieldName == Calendar.HOUR && adjust) {
+		if (newValue == 12) newValue = 0; // TODO: needs more work for setFormat and locale
+	}
+	return newValue;
+}
+
+void updateControl() {
+	if (text != null) {
+		String string = getFormattedString(style);
+		ignoreVerify = true;
+		text.setText(string);
+		ignoreVerify = false;
+	}
+	redraw();	
+}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/emulated/ime/org/eclipse/swt/widgets/IME.java b/bundles/org.eclipse.swt/Eclipse SWT/emulated/ime/org/eclipse/swt/widgets/IME.java
new file mode 100644
index 0000000..8b144cb
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/emulated/ime/org/eclipse/swt/widgets/IME.java
@@ -0,0 +1,268 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.widgets;
+
+
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class represent input method editors.
+ * These are typically in-line pre-edit text areas that allow
+ * the user to compose characters from Far Eastern languages
+ * such as Japanese, Chinese or Korean.
+ * 
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>ImeComposition</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.4
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class IME extends Widget {
+	Canvas parent;
+	int caretOffset;
+	int startOffset;
+	int commitCount;
+	String text;
+	int [] ranges;
+	TextStyle [] styles;
+	
+/**
+ * Prevents uninitialized instances from being created outside the package.
+ */
+IME () {
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a canvas control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public IME (Canvas parent, int style) {
+	super (parent, style);
+	this.parent = parent;
+	createWidget ();
+}
+
+void createWidget () {
+	text = "";
+	startOffset = -1;
+	if (parent.getIME () == null) {
+		parent.setIME (this);
+	}
+}
+
+/**
+ * Returns the offset of the caret from the start of the document.
+ * The caret is within the current composition.
+ *
+ * @return the caret offset
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getCaretOffset () {
+	checkWidget ();
+	return startOffset + caretOffset;
+}
+
+/**
+ * Returns the commit count of the composition.  This is the
+ * number of characters that have been composed.  When the
+ * commit count is equal to the length of the composition
+ * text, then the in-line edit operation is complete.
+ * 
+ * @return the commit count
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see IME#getText
+ */
+public int getCommitCount () {
+	checkWidget ();
+	return commitCount;
+}
+
+/**
+ * Returns the offset of the composition from the start of the document.
+ * This is the start offset of the composition within the document and
+ * in not changed by the input method editor itself during the in-line edit
+ * session.
+ *
+ * @return the offset of the composition
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getCompositionOffset () {
+	checkWidget ();
+	return startOffset;
+}
+
+/**
+ * Returns the ranges for the style that should be applied during the
+ * in-line edit session.
+ * <p>
+ * The ranges array contains start and end pairs.  Each pair refers to
+ * the corresponding style in the styles array.  For example, the pair
+ * that starts at ranges[n] and ends at ranges[n+1] uses the style
+ * at styles[n/2] returned by <code>getStyles()</code>.
+ * </p>
+ * @return the ranges for the styles
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see IME#getStyles
+ */
+public int [] getRanges () {
+	checkWidget ();
+	return ranges != null ? ranges : new int [0];
+}
+
+/**
+ * Returns the styles for the ranges.
+ * <p>
+ * The ranges array contains start and end pairs.  Each pair refers to
+ * the corresponding style in the styles array.  For example, the pair
+ * that starts at ranges[n] and ends at ranges[n+1] uses the style
+ * at styles[n/2].
+ * </p>
+ * 
+ * @return the ranges for the styles
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see IME#getRanges
+ */
+public TextStyle [] getStyles () {
+	checkWidget ();
+	return styles != null ? styles : new TextStyle [0];
+}
+
+/**
+ * Returns the composition text.
+ * <p>
+ * The text for an IME is the characters in the widget that
+ * are in the current composition. When the commit count is
+ * equal to the length of the composition text, then the
+ * in-line edit operation is complete.
+ * </p>
+ *
+ * @return the widget text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getText () {
+	checkWidget ();
+	return text;
+}
+
+/**
+ * Returns <code>true</code> if the caret should be wide, and
+ * <code>false</code> otherwise.  In some languages, for example
+ * Korean, the caret is typically widened to the width of the
+ * current character in the in-line edit session.
+ * 
+ * @return the wide caret state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getWideCaret() {
+	return false; 
+}
+
+void releaseParent () {
+	super.releaseParent ();
+	if (this == parent.getIME ()) parent.setIME (null);
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	parent = null;
+	text = null;
+	styles = null;
+	ranges = null;
+}
+
+/**
+ * Sets the offset of the composition from the start of the document.
+ * This is the start offset of the composition within the document and
+ * in not changed by the input method editor itself during the in-line edit
+ * session but may need to be changed by clients of the IME.  For example,
+ * if during an in-line edit operation, a text editor inserts characters
+ * above the IME, then the IME must be informed that the composition
+ * offset has changed.
+ *
+ * @param offset the offset of the composition
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setCompositionOffset (int offset) {
+	checkWidget ();
+	if (offset < 0) return;
+	if (startOffset != -1) {
+		startOffset = offset;
+	}
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java
new file mode 100644
index 0000000..11248e3
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java
@@ -0,0 +1,1103 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import java.text.DateFormatSymbols;
+import java.util.Calendar;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.gtk.OS;
+
+/**
+ * Instances of this class are selectable user interface
+ * objects that allow the user to enter and modify date
+ * or time values.
+ * <p>
+ * Note that although this class is a subclass of <code>Composite</code>,
+ * it does not make sense to add children to it, or set a layout on it.
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>DATE, TIME, CALENDAR, SHORT, MEDIUM, LONG, DROP_DOWN</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>DefaultSelection, Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles DATE, TIME, or CALENDAR may be specified,
+ * and only one of the styles SHORT, MEDIUM, or LONG may be specified.
+ * The DROP_DOWN style is a <em>HINT</em>, and it is only valid with the DATE style.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#datetime">DateTime snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ *
+ * @since 3.3
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class DateTime extends Composite {
+	int day, month, year, hours, minutes, seconds;
+	
+	static final int MIN_YEAR = 1752; // Gregorian switchover in North America: September 19, 1752
+	static final int MAX_YEAR = 9999;
+
+	/* Emulated DATE and TIME variables */
+	Calendar calendar;
+	DateFormatSymbols formatSymbols;
+	Button down, up;
+	Text text;
+	String format;
+	Point[] fieldIndices;
+	int[] fieldNames;
+	int fieldCount, currentField = 0, characterCount = 0;
+	boolean ignoreVerify = false;
+	static final String DEFAULT_SHORT_DATE_FORMAT = "MM/YYYY";
+	static final String DEFAULT_MEDIUM_DATE_FORMAT = "MM/DD/YYYY";
+	static final String DEFAULT_LONG_DATE_FORMAT = "MM/DD/YYYY";
+	static final String DEFAULT_SHORT_TIME_FORMAT = "HH:MM AM";
+	static final String DEFAULT_MEDIUM_TIME_FORMAT = "HH:MM:SS AM";
+	static final String DEFAULT_LONG_TIME_FORMAT = "HH:MM:SS AM";
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#DATE
+ * @see SWT#TIME
+ * @see SWT#CALENDAR
+ * @see SWT#SHORT
+ * @see SWT#MEDIUM
+ * @see SWT#LONG
+ * @see SWT#DROP_DOWN
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public DateTime (Composite parent, int style) {
+	super (parent, checkStyle (style));
+	if ((this.style & SWT.CALENDAR) == 0) {
+		/* SWT.DATE and SWT.TIME */
+		calendar = Calendar.getInstance();
+		formatSymbols = new DateFormatSymbols();
+		text = new Text(this, SWT.SINGLE);
+		/* disable the native drag and drop for the date/time text field */
+		OS.gtk_drag_dest_unset(text.handle);
+		if ((this.style & SWT.DATE) != 0) {
+			setFormat((this.style & SWT.SHORT) != 0 ? DEFAULT_SHORT_DATE_FORMAT : (this.style & SWT.LONG) != 0 ? DEFAULT_LONG_DATE_FORMAT : DEFAULT_MEDIUM_DATE_FORMAT);
+		} else { // SWT.TIME
+			setFormat((this.style & SWT.SHORT) != 0 ? DEFAULT_SHORT_TIME_FORMAT : (this.style & SWT.LONG) != 0 ? DEFAULT_LONG_TIME_FORMAT : DEFAULT_MEDIUM_TIME_FORMAT);
+		}
+		text.setText(getFormattedString(this.style));
+		Listener listener = new Listener() {
+			public void handleEvent(Event event) {
+				switch(event.type) {
+					case SWT.KeyDown: onKeyDown(event); break;
+					case SWT.FocusIn: onFocusIn(event); break;
+					case SWT.FocusOut: onFocusOut(event); break;
+					case SWT.MouseDown: onMouseClick(event); break;
+					case SWT.MouseUp: onMouseClick(event); break;
+					case SWT.Verify: onVerify(event); break;
+				}
+			}
+		};
+		text.addListener(SWT.KeyDown, listener);
+		text.addListener(SWT.FocusIn, listener);
+		text.addListener(SWT.FocusOut, listener);
+		text.addListener(SWT.MouseDown, listener);
+		text.addListener(SWT.MouseUp, listener);
+		text.addListener(SWT.Verify, listener);
+		up = new Button(this, SWT.ARROW | SWT.UP);
+		//up.setToolTipText(SWT.getMessage ("SWT_Up")); //$NON-NLS-1$
+		down = new Button(this, SWT.ARROW | SWT.DOWN);
+		//down.setToolTipText(SWT.getMessage ("SWT_Down")); //$NON-NLS-1$
+		up.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event event) {
+				incrementField(+1);
+				text.setFocus();
+			}
+		});
+		down.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event event) {
+				incrementField(-1);
+				text.setFocus();
+			}
+		});
+		addListener(SWT.Resize, new Listener() {
+			public void handleEvent(Event event) {
+				onResize(event);
+			}
+		});
+	}
+}
+
+static int checkStyle (int style) {
+	/*
+	* Even though it is legal to create this widget
+	* with scroll bars, they serve no useful purpose
+	* because they do not automatically scroll the
+	* widget's client area.  The fix is to clear
+	* the SWT style.
+	*/
+	style &= ~(SWT.H_SCROLL | SWT.V_SCROLL);
+	style = checkBits (style, SWT.DATE, SWT.TIME, SWT.CALENDAR, 0, 0, 0);
+	return checkBits (style, SWT.MEDIUM, SWT.SHORT, SWT.LONG, 0, 0, 0);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is called when the user changes the control's value.
+ * <code>widgetDefaultSelected</code> is typically called when ENTER is pressed.
+ * </p>
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection, typedListener);
+	addListener (SWT.DefaultSelection, typedListener);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget ();
+	int width = 0, height = 0;
+	if (wHint == SWT.DEFAULT || hHint == SWT.DEFAULT) {
+		if ((style & SWT.CALENDAR) != 0) {
+			// TODO: CALENDAR computeSize
+			width = 300;
+			height = 200;
+		} else {
+			/* SWT.DATE and SWT.TIME */
+			GC gc = new GC(text);
+			Point textSize = gc.stringExtent(getComputeSizeString(style));
+			gc.dispose();
+			Rectangle trim = text.computeTrim(0, 0, textSize.x, textSize.y);
+			Point buttonSize = up.computeSize(SWT.DEFAULT, SWT.DEFAULT, changed);
+			width = trim.width + buttonSize.x;
+			height = Math.max(trim.height, buttonSize.y);
+		}
+	}
+	if (width == 0) width = DEFAULT_WIDTH;
+	if (height == 0) height = DEFAULT_HEIGHT;
+	if (wHint != SWT.DEFAULT) width = wHint;
+	if (hHint != SWT.DEFAULT) height = hHint;
+	int border = getBorderWidth ();
+	width += border * 2; height += border * 2;
+	return new Point (width, height);
+}
+
+void createHandle (int index) {
+	if ((style & SWT.CALENDAR) != 0) {
+		state |= HANDLE;
+		fixedHandle = OS.g_object_new (display.gtk_fixed_get_type (), 0);
+		if (fixedHandle == 0) error (SWT.ERROR_NO_HANDLES);
+		OS.gtk_fixed_set_has_window (fixedHandle, true);
+		handle = OS.gtk_calendar_new ();
+		if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+		OS.gtk_container_add (fixedHandle, handle);
+		if (OS.GTK_VERSION >= OS.VERSION(2, 4, 0)) {
+			OS.gtk_calendar_set_display_options(handle, OS.GTK_CALENDAR_SHOW_HEADING | OS.GTK_CALENDAR_SHOW_DAY_NAMES);
+		} else {
+			OS.gtk_calendar_display_options(handle, OS.GTK_CALENDAR_SHOW_HEADING | OS.GTK_CALENDAR_SHOW_DAY_NAMES);			
+		}
+	} else {
+		super.createHandle(index);
+	}
+}
+
+boolean checkSubwindow () {
+	return false;
+}
+
+void createWidget (int index) {
+	super.createWidget (index);
+	if ((style & SWT.CALENDAR) != 0) {
+		getDate();
+	}
+}
+
+void commitCurrentField() {
+	if (characterCount > 0) {
+		characterCount = 0;
+		int fieldName = fieldNames[currentField];
+		int start = fieldIndices[currentField].x;
+		int end = fieldIndices[currentField].y;
+		String value = text.getText(start, end - 1);
+		int s = value.lastIndexOf(' ');
+		if (s != -1) value = value.substring(s + 1);
+		int newValue = unformattedIntValue(fieldName, value, characterCount == 0, calendar.getActualMaximum(fieldName));
+		if (newValue != -1) setTextField(fieldName, newValue, true, true);
+	}
+}
+
+String formattedStringValue(int fieldName, int value, boolean adjust) {
+	if (fieldName == Calendar.AM_PM) {
+		String[] ampm = formatSymbols.getAmPmStrings();
+		return ampm[value];
+	}
+	if (adjust) {
+		if (fieldName == Calendar.HOUR && value == 0) {
+			return String.valueOf(12);
+		}
+		if (fieldName == Calendar.MONTH) {
+			return String.valueOf(value + 1);
+		}
+	}
+	return String.valueOf(value);
+}
+
+String getComputeSizeString(int style) {
+	if ((style & SWT.DATE) != 0) {
+		return (style & SWT.SHORT) != 0 ? DEFAULT_SHORT_DATE_FORMAT : (style & SWT.LONG) != 0 ? DEFAULT_LONG_DATE_FORMAT : DEFAULT_MEDIUM_DATE_FORMAT;
+	}
+	// SWT.TIME
+	return (style & SWT.SHORT) != 0 ? DEFAULT_SHORT_TIME_FORMAT : (style & SWT.LONG) != 0 ? DEFAULT_LONG_TIME_FORMAT : DEFAULT_MEDIUM_TIME_FORMAT;
+}
+
+int getFieldIndex(int fieldName) {
+	for (int i = 0; i < fieldCount; i++) {
+		if (fieldNames[i] == fieldName) {
+			return i;
+		}
+	}
+	return -1;
+}
+
+String getFormattedString(int style) {
+	if ((style & SWT.TIME) != 0) {
+		String[] ampm = formatSymbols.getAmPmStrings();
+		int h = calendar.get(Calendar.HOUR); if (h == 0) h = 12;
+		int m = calendar.get(Calendar.MINUTE);
+		int s = calendar.get(Calendar.SECOND);
+		int a = calendar.get(Calendar.AM_PM);
+		if ((style & SWT.SHORT) != 0) return "" + (h < 10 ? " " : "") + h + ":" + (m < 10 ? "0" : "") + m + " " + ampm[a];
+		return "" + (h < 10 ? " " : "") + h + ":" + (m < 10 ? "0" : "") + m + ":" + (s < 10 ? "0" : "") + s + " " + ampm[a];
+	}
+	/* SWT.DATE */
+	int y = calendar.get(Calendar.YEAR);
+	int m = calendar.get(Calendar.MONTH) + 1;
+	int d = calendar.get(Calendar.DAY_OF_MONTH);
+	if ((style & SWT.SHORT) != 0) return "" + (m < 10 ? " " : "") + m + "/" + y;
+	return "" + (m < 10 ? " " : "") + m + "/" + (d < 10 ? " " : "") + d + "/" + y;
+}
+
+void getDate() {
+	int [] y = new int [1];
+	int [] m = new int [1];
+	int [] d = new int [1];
+	OS.gtk_calendar_get_date(handle, y, m, d);
+	year = y[0];
+	month = m[0];
+	day = d[0];
+}
+
+/**
+ * Returns the receiver's date, or day of the month.
+ * <p>
+ * The first day of the month is 1, and the last day depends on the month and year.
+ * </p>
+ *
+ * @return a positive integer beginning with 1
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getDay () {
+	checkWidget ();
+	if ((style & SWT.CALENDAR) != 0) {
+		getDate();
+		return day;
+	} else {
+		return calendar.get(Calendar.DAY_OF_MONTH);
+	}
+}
+
+/**
+ * Returns the receiver's hours.
+ * <p>
+ * Hours is an integer between 0 and 23.
+ * </p>
+ *
+ * @return an integer between 0 and 23
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getHours () {
+	checkWidget ();
+	if ((style & SWT.CALENDAR) != 0) {
+		return hours;
+	} else {
+		return calendar.get(Calendar.HOUR_OF_DAY);
+	}
+}
+
+/**
+ * Returns the receiver's minutes.
+ * <p>
+ * Minutes is an integer between 0 and 59.
+ * </p>
+ *
+ * @return an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMinutes () {
+	checkWidget ();
+	if ((style & SWT.CALENDAR) != 0) {
+		return minutes;
+	} else {
+		return calendar.get(Calendar.MINUTE);
+	}
+}
+
+/**
+ * Returns the receiver's month.
+ * <p>
+ * The first month of the year is 0, and the last month is 11.
+ * </p>
+ *
+ * @return an integer between 0 and 11
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMonth () {
+	checkWidget ();
+	if ((style & SWT.CALENDAR) != 0) {
+		getDate();
+		return month;
+	} else {
+		return calendar.get(Calendar.MONTH);
+	}
+}
+
+String getNameText() {
+	return (style & SWT.TIME) != 0 ? getHours() + ":" + getMinutes() + ":" + getSeconds()
+			: (getMonth() + 1) + "/" + getDay() + "/" + getYear();
+}
+
+/**
+ * Returns the receiver's seconds.
+ * <p>
+ * Seconds is an integer between 0 and 59.
+ * </p>
+ *
+ * @return an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSeconds () {
+	checkWidget ();
+	if ((style & SWT.CALENDAR) != 0) {
+		return seconds;
+	} else {
+		return calendar.get(Calendar.SECOND);
+	}
+}
+
+/**
+ * Returns the receiver's year.
+ * <p>
+ * The first year is 1752 and the last year is 9999.
+ * </p>
+ *
+ * @return an integer between 1752 and 9999
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getYear () {
+	checkWidget ();
+	if ((style & SWT.CALENDAR) != 0) {
+		getDate();
+		return year;
+	} else {
+		return calendar.get(Calendar.YEAR);
+	}
+}
+
+int /*long*/ gtk_day_selected (int /*long*/ widget) {
+	sendSelectionEvent ();
+	return 0;
+}
+
+int /*long*/ gtk_day_selected_double_click (int /*long*/ widget) {
+	postEvent(SWT.DefaultSelection);
+	return 0;
+}
+
+int /*long*/ gtk_month_changed (int /*long*/ widget) {
+	sendSelectionEvent ();
+	return 0;
+}
+
+void hookEvents () {
+	super.hookEvents();
+	if ((style & SWT.CALENDAR) != 0) {
+		OS.g_signal_connect_closure (handle, OS.day_selected, display.closures [DAY_SELECTED], false);
+		OS.g_signal_connect_closure (handle, OS.day_selected_double_click, display.closures [DAY_SELECTED_DOUBLE_CLICK], false);
+		OS.g_signal_connect_closure (handle, OS.month_changed, display.closures [MONTH_CHANGED], false);
+	}
+}
+
+boolean isValidTime(int fieldName, int value) {
+	Calendar validCalendar;
+	if ((style & SWT.CALENDAR) != 0) {
+		validCalendar = Calendar.getInstance();
+	} else {
+		validCalendar = calendar;
+	}
+	int min = validCalendar.getActualMinimum(fieldName);
+	int max = validCalendar.getActualMaximum(fieldName);
+	return value >= min && value <= max;
+}
+
+boolean isValidDate(int year, int month, int day) {
+	if (year < MIN_YEAR || year > MAX_YEAR) return false;
+	Calendar valid = Calendar.getInstance();
+	valid.set(year, month, day);
+	return valid.get(Calendar.YEAR) == year
+		&& valid.get(Calendar.MONTH) == month
+		&& valid.get(Calendar.DAY_OF_MONTH) == day;
+}
+
+void incrementField(int amount) {
+	int fieldName = fieldNames[currentField];
+	int value = calendar.get(fieldName);
+	if (fieldName == Calendar.HOUR) {
+		int max = calendar.getMaximum(Calendar.HOUR);
+		int min = calendar.getMinimum(Calendar.HOUR);
+		if ((value == max && amount == 1) || (value == min && amount == -1)) {
+			int temp = currentField;
+			currentField = getFieldIndex(Calendar.AM_PM);
+			setTextField(Calendar.AM_PM, (calendar.get(Calendar.AM_PM) + 1) % 2, true, true);
+			currentField = temp;
+		}
+	}
+	setTextField(fieldName, value + amount, true, true);
+}
+
+void onKeyDown(Event event) {
+	int fieldName;
+	switch (event.keyCode) {
+		case SWT.ARROW_RIGHT:
+		case SWT.KEYPAD_DIVIDE:
+			// a right arrow or a valid separator navigates to the field on the right, with wraping
+			selectField((currentField + 1) % fieldCount);
+			break;
+		case SWT.ARROW_LEFT:
+			// navigate to the field on the left, with wrapping
+			int index = currentField - 1;
+			selectField(index < 0 ? fieldCount - 1 : index);
+			break;
+		case SWT.ARROW_UP:
+		case SWT.KEYPAD_ADD:
+			// set the value of the current field to value + 1, with wrapping
+			commitCurrentField();
+			incrementField(+1);
+			break;
+		case SWT.ARROW_DOWN:
+		case SWT.KEYPAD_SUBTRACT:
+			// set the value of the current field to value - 1, with wrapping
+			commitCurrentField();
+			incrementField(-1);
+			break;
+		case SWT.HOME:
+			// set the value of the current field to its minimum
+			fieldName = fieldNames[currentField];
+			setTextField(fieldName, calendar.getActualMinimum(fieldName), true, true);
+			break;
+		case SWT.END:
+			// set the value of the current field to its maximum
+			fieldName = fieldNames[currentField];
+			setTextField(fieldName, calendar.getActualMaximum(fieldName), true, true);
+			break;
+		case SWT.CR:
+			postEvent(SWT.DefaultSelection);
+			break;
+		default:
+			switch (event.character) {
+				case '/':
+				case ':':
+				case '-':
+				case '.':
+					// a valid separator navigates to the field on the right, with wraping
+					selectField((currentField + 1) % fieldCount);
+					break;
+			}
+	}
+}
+
+void onFocusIn(Event event) {
+	selectField(currentField);
+}
+
+void onFocusOut(Event event) {
+	commitCurrentField();
+}
+
+void onMouseClick(Event event) {
+	if (event.button != 1) return;
+	Point sel = text.getSelection();
+	for (int i = 0; i < fieldCount; i++) {
+		if (fieldIndices[i].x <= sel.x && sel.x <= fieldIndices[i].y) {
+			selectField(i);
+			break;
+		}
+	}
+}
+
+void onResize(Event event) {
+	Rectangle rect = getClientArea ();
+	int width = rect.width;
+	int height = rect.height;
+	Point buttonSize = up.computeSize(SWT.DEFAULT, height);
+	int buttonHeight = buttonSize.y / 2;
+	text.setBounds(0, 0, width - buttonSize.x, height);
+	up.setBounds(width - buttonSize.x, 0, buttonSize.x, buttonHeight);
+	down.setBounds(width - buttonSize.x, buttonHeight, buttonSize.x, buttonHeight);
+}
+
+void onVerify(Event event) {
+	if (ignoreVerify) return;
+	event.doit = false;
+	int fieldName = fieldNames[currentField];
+	int start = fieldIndices[currentField].x;
+	int end = fieldIndices[currentField].y;
+	int length = end - start;
+	String newText = event.text;
+	if (fieldName == Calendar.AM_PM) {
+		String[] ampm = formatSymbols.getAmPmStrings();
+		if (newText.equalsIgnoreCase(ampm[Calendar.AM].substring(0, 1)) || newText.equalsIgnoreCase(ampm[Calendar.AM])) {
+			setTextField(fieldName, Calendar.AM, true, false);
+		} else if (newText.equalsIgnoreCase(ampm[Calendar.PM].substring(0, 1)) || newText.equalsIgnoreCase(ampm[Calendar.PM])) {
+			setTextField(fieldName, Calendar.PM, true, false);
+		}
+		return;
+	}
+	if (characterCount > 0) {
+		try {
+			Integer.parseInt(newText);
+		} catch (NumberFormatException ex) {
+			return;
+		}
+		String value = text.getText(start, end - 1);
+		int s = value.lastIndexOf(' ');
+		if (s != -1) value = value.substring(s + 1);
+		newText = "" + value + newText;
+	}
+	int newTextLength = newText.length();
+	boolean first = characterCount == 0;
+	characterCount = (newTextLength < length) ? newTextLength : 0;
+	int max = calendar.getActualMaximum(fieldName);
+	int min = calendar.getActualMinimum(fieldName);
+	int newValue = unformattedIntValue(fieldName, newText, characterCount == 0, max);
+	if (newValue == -1) {
+		characterCount = 0;
+		return;
+	}
+	if (first && newValue == 0 && length > 1) {
+		setTextField(fieldName, newValue, false, false);
+	} else if (min <= newValue && newValue <= max) {
+		setTextField(fieldName, newValue, characterCount == 0, characterCount == 0);
+	} else {
+		if (newTextLength >= length) {
+			newText = newText.substring(newTextLength - length + 1);
+			newValue = unformattedIntValue(fieldName, newText, characterCount == 0, max);
+			if (newValue != -1) {
+				characterCount = length - 1;
+				if (min <= newValue && newValue <= max) {
+					setTextField(fieldName, newValue, characterCount == 0, true);
+				}
+			}
+		}
+	}
+}
+
+void releaseWidget () {
+	super.releaseWidget();
+	//TODO: need to do anything here?
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection, listener);	
+}
+
+void selectField(int index) {
+	if (index != currentField) {
+		commitCurrentField();
+	}
+	final int start = fieldIndices[index].x;
+	final int end = fieldIndices[index].y;
+	Point pt = text.getSelection();
+	if (index == currentField && start == pt.x && end == pt.y) return;
+	currentField = index;
+	display.asyncExec(new Runnable() {
+		public void run() {
+			if (!text.isDisposed()) {
+				String value = text.getText(start, end - 1);
+				int s = value.lastIndexOf(' ');
+				if (s == -1) s = start;
+				else s = start + s + 1;
+				text.setSelection(s, end);
+			}
+		}
+	});	
+}
+
+void sendSelectionEvent () {
+	int [] y = new int [1];
+	int [] m = new int [1];
+	int [] d = new int [1];
+	OS.gtk_calendar_get_date(handle, y, m, d);
+	//TODO: hours, minutes, seconds?
+	if (d[0] != day ||
+		m[0] != month ||
+		y[0] != year) {
+		year = y[0];
+		month = m[0];
+		day = d[0];
+		postEvent (SWT.Selection);
+	}
+}
+
+public void setBackground(Color color) {
+	checkWidget();
+	super.setBackground(color);
+	if (text != null) text.setBackground(color);
+}
+
+public void setFont(Font font) {
+	checkWidget();
+	super.setFont(font);
+	if (text != null) text.setFont(font);
+	redraw();
+}
+
+public void setForeground(Color color) {
+	checkWidget();
+	super.setForeground(color);
+	if (text != null) text.setForeground(color);
+}
+
+/*public*/ void setFormat(String string) {
+	checkWidget();
+	// TODO: this needs to be locale sensitive
+	fieldCount = (style & SWT.DATE) != 0 ? ((style & SWT.SHORT) != 0 ? 2 : 3) : ((style & SWT.SHORT) != 0 ? 3 : 4);
+	fieldIndices = new Point[fieldCount];
+	fieldNames = new int[fieldCount];
+	if ((style & SWT.DATE) != 0) {
+		fieldNames[0] = Calendar.MONTH;
+		fieldIndices[0] = new Point(0, 2);
+		if ((style & SWT.SHORT) != 0) {
+			fieldNames[1] = Calendar.YEAR;
+			fieldIndices[1] = new Point(3, 7);
+		} else {
+			fieldNames[1] = Calendar.DAY_OF_MONTH;
+			fieldIndices[1] = new Point(3, 5);
+			fieldNames[2] = Calendar.YEAR;
+			fieldIndices[2] = new Point(6, 10);
+		}
+	} else { /* SWT.TIME */
+		fieldNames[0] = Calendar.HOUR;
+		fieldIndices[0] = new Point(0, 2);
+		fieldNames[1] = Calendar.MINUTE;
+		fieldIndices[1] = new Point(3, 5);
+		if ((style & SWT.SHORT) != 0) {
+			fieldNames[2] = Calendar.AM_PM;
+			fieldIndices[2] = new Point(6, 8);
+		} else {
+			fieldNames[2] = Calendar.SECOND;
+			fieldIndices[2] = new Point(6, 8);
+			fieldNames[3] = Calendar.AM_PM;
+			fieldIndices[3] = new Point(9, 11);
+		}
+	}
+}
+
+void setField(int fieldName, int value) {
+	if (calendar.get(fieldName) == value) return;
+	if (fieldName == Calendar.AM_PM) {
+		calendar.roll(Calendar.HOUR_OF_DAY, 12); // TODO: needs more work for setFormat and locale
+	}
+	calendar.set(fieldName, value);
+	postEvent(SWT.Selection);
+}
+
+void setTextField(int fieldName, int value, boolean commit, boolean adjust) {
+	if (commit) {
+		int max = calendar.getActualMaximum(fieldName);
+		int min = calendar.getActualMinimum(fieldName);
+		if (fieldName == Calendar.YEAR) {
+			max = MAX_YEAR;
+			min = MIN_YEAR;
+			/* Special case: convert 1 or 2-digit years into reasonable 4-digit years. */
+			int currentYear = Calendar.getInstance().get(Calendar.YEAR);
+			int currentCentury = (currentYear / 100) * 100;
+			if (value < (currentYear + 30) % 100) value += currentCentury;
+			else if (value < 100) value += currentCentury - 100;
+		}
+		if (value > max) value = min; // wrap
+		if (value < min) value = max; // wrap
+	}
+	int start = fieldIndices[currentField].x;
+	int end = fieldIndices[currentField].y;
+	text.setSelection(start, end);
+	String newValue = formattedStringValue(fieldName, value, adjust);
+	StringBuffer buffer = new StringBuffer(newValue);
+	/* Convert leading 0's into spaces. */
+	int prependCount = end - start - buffer.length();
+	for (int i = 0; i < prependCount; i++) {
+		switch (fieldName) {
+		case Calendar.MINUTE:
+		case Calendar.SECOND:
+			buffer.insert(0, 0);
+		break;
+		default:
+			buffer.insert(0, ' ');
+		break;
+		}
+	}		
+	newValue = buffer.toString();
+	ignoreVerify = true;
+	text.insert(newValue);
+	ignoreVerify = false;
+	selectField(currentField);
+	if (commit) setField(fieldName, value);
+}
+
+/**
+ * Sets the receiver's year, month, and day in a single operation.
+ * <p>
+ * This is the recommended way to set the date, because setting the year,
+ * month, and day separately may result in invalid intermediate dates.
+ * </p>
+ *
+ * @param year an integer between 1752 and 9999
+ * @param month an integer between 0 and 11
+ * @param day a positive integer beginning with 1
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.4
+ */
+public void setDate (int year, int month, int day) {
+	checkWidget ();
+	if (!isValidDate(year, month, day)) return;
+	if ((style & SWT.CALENDAR) != 0) {
+		this.year = year;
+		this.month = month;
+		this.day = day;
+		OS.gtk_calendar_select_month(handle, month, year);
+		OS.gtk_calendar_select_day(handle, day);
+	} else {
+		calendar.set(year, month, day);
+		updateControl();
+	}
+}
+
+/**
+ * Sets the receiver's date, or day of the month, to the specified day.
+ * <p>
+ * The first day of the month is 1, and the last day depends on the month and year.
+ * If the specified day is not valid for the receiver's month and year, then it is ignored. 
+ * </p>
+ *
+ * @param day a positive integer beginning with 1
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setDate
+ */
+public void setDay (int day) {
+	checkWidget ();
+	if (!isValidDate(getYear(), getMonth(), day)) return;
+	if ((style & SWT.CALENDAR) != 0) {
+		this.day = day;
+		OS.gtk_calendar_select_day(handle, day);
+	} else {
+		calendar.set(Calendar.DAY_OF_MONTH, day);
+		updateControl();
+	}
+}
+
+/**
+ * Sets the receiver's hours.
+ * <p>
+ * Hours is an integer between 0 and 23.
+ * </p>
+ *
+ * @param hours an integer between 0 and 23
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setHours (int hours) {
+	checkWidget ();
+	if (!isValidTime(Calendar.HOUR_OF_DAY, hours)) return;
+	if ((style & SWT.CALENDAR) != 0) {
+		this.hours = hours;
+	} else {
+		calendar.set(Calendar.HOUR_OF_DAY, hours);
+		updateControl();
+	}
+}
+
+/**
+ * Sets the receiver's minutes.
+ * <p>
+ * Minutes is an integer between 0 and 59.
+ * </p>
+ *
+ * @param minutes an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMinutes (int minutes) {
+	checkWidget ();
+	if (!isValidTime(Calendar.MINUTE, minutes)) return;
+	if ((style & SWT.CALENDAR) != 0) {
+		this.minutes = minutes;
+	} else {
+		calendar.set(Calendar.MINUTE, minutes);
+		updateControl();
+	}
+}
+
+/**
+ * Sets the receiver's month.
+ * <p>
+ * The first month of the year is 0, and the last month is 11.
+ * If the specified month is not valid for the receiver's day and year, then it is ignored. 
+ * </p>
+ *
+ * @param month an integer between 0 and 11
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setDate
+ */
+public void setMonth (int month) {
+	checkWidget ();
+	if (!isValidDate(getYear(), month, getDay())) return;
+	if ((style & SWT.CALENDAR) != 0) {
+		this.month = month;
+		OS.gtk_calendar_select_month(handle, month, year);
+	} else {
+		calendar.set(Calendar.MONTH, month);
+		updateControl();
+	}
+}
+
+/**
+ * Sets the receiver's seconds.
+ * <p>
+ * Seconds is an integer between 0 and 59.
+ * </p>
+ *
+ * @param seconds an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSeconds (int seconds) {
+	checkWidget ();
+	if (!isValidTime(Calendar.SECOND, seconds)) return;
+	if ((style & SWT.CALENDAR) != 0) {
+		this.seconds = seconds;
+	} else {
+		calendar.set(Calendar.SECOND, seconds);
+		updateControl();
+	}
+}
+
+/**
+ * Sets the receiver's hours, minutes, and seconds in a single operation.
+ *
+ * @param hours an integer between 0 and 23
+ * @param minutes an integer between 0 and 59
+ * @param seconds an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.4
+ */
+public void setTime (int hours, int minutes, int seconds) {
+	checkWidget ();
+	if (!isValidTime(Calendar.HOUR_OF_DAY, hours)) return;
+	if (!isValidTime(Calendar.MINUTE, minutes)) return;
+	if (!isValidTime(Calendar.SECOND, seconds)) return;
+	if ((style & SWT.CALENDAR) != 0) {
+		this.hours = hours;
+		this.minutes = minutes;
+		this.seconds = seconds;
+	} else {
+		calendar.set(Calendar.HOUR_OF_DAY, hours);
+		calendar.set(Calendar.MINUTE, minutes);
+		calendar.set(Calendar.SECOND, seconds);
+		updateControl();
+	}
+}
+
+/**
+ * Sets the receiver's year.
+ * <p>
+ * The first year is 1752 and the last year is 9999.
+ * If the specified year is not valid for the receiver's day and month, then it is ignored. 
+ * </p>
+ *
+ * @param year an integer between 1752 and 9999
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setDate
+ */
+public void setYear (int year) {
+	checkWidget ();
+	if (!isValidDate(year, getMonth(), getDay())) return;
+	if ((style & SWT.CALENDAR) != 0) {
+		this.year = year;
+		OS.gtk_calendar_select_month(handle, month, year);
+	} else {
+		calendar.set(Calendar.YEAR, year);
+		updateControl();
+	}
+}
+
+int unformattedIntValue(int fieldName, String newText, boolean adjust, int max) {
+	int newValue;
+	try {
+		newValue = Integer.parseInt(newText);
+	} catch (NumberFormatException ex) {
+		return -1;
+	}
+	if (fieldName == Calendar.MONTH && adjust) {
+		newValue--;
+		if (newValue == -1) newValue = max;
+	}
+	if (fieldName == Calendar.HOUR && adjust) {
+		if (newValue == 12) newValue = 0; // TODO: needs more work for setFormat and locale
+	}
+	return newValue;
+}
+
+public void updateControl() {
+	if (text != null) {
+		String string = getFormattedString(style);
+		ignoreVerify = true;
+		text.setText(string);
+		ignoreVerify = false;
+	}
+	redraw();	
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/IME.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/IME.java
new file mode 100644
index 0000000..cc0036e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/IME.java
@@ -0,0 +1,443 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.widgets;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.gtk.*;
+
+
+/**
+ * Instances of this class represent input method editors.
+ * These are typically in-line pre-edit text areas that allow
+ * the user to compose characters from Far Eastern languages
+ * such as Japanese, Chinese or Korean.
+ * 
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>ImeComposition</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.4
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class IME extends Widget {
+	Canvas parent;
+	int caretOffset;
+	int startOffset;
+	int commitCount;
+	String text;
+	int [] ranges;
+	TextStyle [] styles;
+	boolean inComposition;
+
+/**
+ * Prevents uninitialized instances from being created outside the package.
+ */
+IME () {
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a canvas control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public IME (Canvas parent, int style) {
+	super (parent, style);
+	this.parent = parent;
+	createWidget ();
+}
+
+void createWidget () {
+	text = "";
+	startOffset = -1;
+	if (parent.getIME () == null) {
+		parent.setIME (this);
+	}
+}
+
+/**
+ * Returns the offset of the caret from the start of the document.
+ * The caret is within the current composition.
+ *
+ * @return the caret offset
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getCaretOffset () {
+	checkWidget ();
+	return startOffset + caretOffset;
+}
+
+/**
+ * Returns the commit count of the composition.  This is the
+ * number of characters that have been composed.  When the
+ * commit count is equal to the length of the composition
+ * text, then the in-line edit operation is complete.
+ * 
+ * @return the commit count
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see IME#getText
+ */
+public int getCommitCount () {
+	checkWidget ();
+	return commitCount;
+}
+
+/**
+ * Returns the offset of the composition from the start of the document.
+ * This is the start offset of the composition within the document and
+ * in not changed by the input method editor itself during the in-line edit
+ * session.
+ *
+ * @return the offset of the composition
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getCompositionOffset () {
+	checkWidget ();
+	return startOffset;
+}
+
+/**
+ * Returns the ranges for the style that should be applied during the
+ * in-line edit session.
+ * <p>
+ * The ranges array contains start and end pairs.  Each pair refers to
+ * the corresponding style in the styles array.  For example, the pair
+ * that starts at ranges[n] and ends at ranges[n+1] uses the style
+ * at styles[n/2] returned by <code>getStyles()</code>.
+ * </p>
+ * @return the ranges for the styles
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see IME#getStyles
+ */
+public int [] getRanges () {
+	checkWidget ();
+	if (ranges == null) return new int [0];
+	int [] result = new int [ranges.length];
+	for (int i = 0; i < result.length; i++) {
+		result [i] = ranges [i] + startOffset; 
+	}
+	return result;
+}
+
+/**
+ * Returns the styles for the ranges.
+ * <p>
+ * The ranges array contains start and end pairs.  Each pair refers to
+ * the corresponding style in the styles array.  For example, the pair
+ * that starts at ranges[n] and ends at ranges[n+1] uses the style
+ * at styles[n/2].
+ * </p>
+ * 
+ * @return the ranges for the styles
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see IME#getRanges
+ */
+public TextStyle [] getStyles () {
+	checkWidget ();
+	if (styles == null) return new TextStyle [0];
+	TextStyle [] result = new TextStyle [styles.length];
+	System.arraycopy (styles, 0, result, 0, styles.length);
+	return result;
+}
+
+/**
+ * Returns the composition text.
+ * <p>
+ * The text for an IME is the characters in the widget that
+ * are in the current composition. When the commit count is
+ * equal to the length of the composition text, then the
+ * in-line edit operation is complete.
+ * </p>
+ *
+ * @return the widget text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getText () {
+	checkWidget ();
+	return text;
+}
+
+/**
+ * Returns <code>true</code> if the caret should be wide, and
+ * <code>false</code> otherwise.  In some languages, for example
+ * Korean, the caret is typically widened to the width of the
+ * current character in the in-line edit session.
+ * 
+ * @return the wide caret state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getWideCaret () {
+	checkWidget ();
+	return false; 
+}
+
+int /*long*/ gtk_button_press_event (int /*long*/ widget, int /*long*/ event) {
+	if (!isInlineEnabled ()) return 0;
+	int /*long*/ imHandle = imHandle ();
+	if (imHandle != 0) OS.gtk_im_context_reset (imHandle);
+	return 0;
+}
+
+int /*long*/ gtk_commit (int /*long*/ imcontext, int /*long*/ textPtr) {
+	if (!isInlineEnabled ()) return 0;
+	boolean doit = true;
+	ranges = null;
+	styles = null;
+	caretOffset = commitCount = 0;
+	if (textPtr != 0 && inComposition) {
+		int length = OS.strlen (textPtr);
+		if (length != 0) {
+			byte [] buffer = new byte [length];
+			OS.memmove (buffer, textPtr, length);
+			char [] chars = Converter.mbcsToWcs (null, buffer);
+			Event event = new Event();
+			event.detail = SWT.COMPOSITION_CHANGED;
+			event.start = startOffset;
+			event.end = startOffset + text.length ();
+			event.text = text = chars != null ? new String (chars) : "";
+			commitCount = text.length();
+			sendEvent (SWT.ImeComposition, event);
+			doit = event.doit;
+			text = "";
+			startOffset = -1;
+			commitCount = 0;
+		}
+	}
+	inComposition = false;
+	return doit ? 0 : 1;
+}
+
+int /*long*/ gtk_preedit_changed (int /*long*/ imcontext) {
+	if (!isInlineEnabled ()) return 0;
+	ranges = null;
+	styles = null;
+	commitCount = 0;
+	int /*long*/ imHandle = imHandle ();
+	int /*long*/ [] preeditString = new int /*long*/ [1];
+	int /*long*/ [] pangoAttrs = new int /*long*/ [1];
+	int [] cursorPos = new int [1];
+	OS.gtk_im_context_get_preedit_string (imHandle, preeditString, pangoAttrs, cursorPos);
+	caretOffset = cursorPos [0];
+	char [] chars = null;
+	if (preeditString [0] != 0) {
+		int length = OS.strlen (preeditString [0]);
+		byte [] buffer = new byte [length];
+		OS.memmove (buffer, preeditString [0], length);
+		chars = Converter.mbcsToWcs (null, buffer);
+		if (pangoAttrs [0] != 0) {
+			int count = 0;
+			int /*long*/ iterator = OS.pango_attr_list_get_iterator (pangoAttrs [0]);
+			while (OS.pango_attr_iterator_next (iterator)) count++;
+			OS.pango_attr_iterator_destroy (iterator);
+			ranges = new int [count * 2];
+			styles = new TextStyle [count];
+			iterator = OS.pango_attr_list_get_iterator (pangoAttrs [0]);
+			PangoAttrColor attrColor = new PangoAttrColor ();
+			PangoAttrInt attrInt = new PangoAttrInt ();
+			int [] start = new int [1];
+			int [] end = new int [1];
+			for (int i = 0; i < count; i++) {
+				OS.pango_attr_iterator_range (iterator, start, end);
+				ranges [i * 2] = (int)/*64*/OS.g_utf8_pointer_to_offset (preeditString [0], preeditString [0] + start [0]);
+				ranges [i * 2 + 1] = (int)/*64*/OS.g_utf8_pointer_to_offset (preeditString [0], preeditString [0] + end [0]) - 1;
+				styles [i] = new TextStyle (null, null, null);
+				int /*long*/ attr = OS.pango_attr_iterator_get (iterator, OS.PANGO_ATTR_FOREGROUND);
+				if (attr != 0) {
+					OS.memmove (attrColor, attr, PangoAttrColor.sizeof);
+					GdkColor color = new GdkColor ();
+					color.red = attrColor.color_red;
+					color.green = attrColor.color_green;
+					color.blue = attrColor.color_blue;
+					styles [i].foreground = Color.gtk_new (display, color);
+				}
+				attr = OS.pango_attr_iterator_get (iterator, OS.PANGO_ATTR_BACKGROUND);
+				if (attr != 0) {
+					OS.memmove (attrColor, attr, PangoAttrColor.sizeof);
+					GdkColor color = new GdkColor ();
+					color.red = attrColor.color_red;
+					color.green = attrColor.color_green;
+					color.blue = attrColor.color_blue;
+					styles [i].background = Color.gtk_new (display, color);
+				}
+				attr = OS.pango_attr_iterator_get (iterator, OS.PANGO_ATTR_UNDERLINE);
+				if (attr != 0) {
+					OS.memmove (attrInt, attr, PangoAttrInt.sizeof);
+					styles [i].underline = attrInt.value != OS.PANGO_UNDERLINE_NONE;;
+					styles [i].underlineStyle = SWT.UNDERLINE_SINGLE;
+					switch (attrInt.value) {
+						case OS.PANGO_UNDERLINE_DOUBLE:
+							styles [i].underlineStyle = SWT.UNDERLINE_DOUBLE;
+							break;
+						case OS.PANGO_UNDERLINE_ERROR:
+							styles [i].underlineStyle = SWT.UNDERLINE_ERROR;
+							break;
+					}
+					if (styles [i].underline) {
+						attr = OS.pango_attr_iterator_get(iterator, OS.PANGO_ATTR_UNDERLINE_COLOR);
+						if (attr != 0) {
+							OS.memmove (attrColor, attr, PangoAttrColor.sizeof);
+							GdkColor color = new GdkColor ();
+							color.red = attrColor.color_red;
+							color.green = attrColor.color_green;
+							color.blue = attrColor.color_blue;
+							styles [i].underlineColor = Color.gtk_new (display, color);
+						}
+					}
+				}
+				OS.pango_attr_iterator_next (iterator);
+			}
+			OS.pango_attr_iterator_destroy (iterator);
+			OS.pango_attr_list_unref (pangoAttrs [0]);	
+		}
+		OS.g_free (preeditString [0]);
+	}
+	if (chars != null) {
+		if (text.length() == 0) {
+			/*
+			* Bug in GTK. In Solaris, the IME sends multiple
+			* preedit_changed signals with an empty text.
+			* This behavior is not correct for SWT and can 
+			* cause the editor to replace its current selection
+			* with an empty string. The fix is to ignore any 
+			* preedit_changed signals with an empty text when
+			* the preedit buffer is already empty.    
+			*/
+			if (chars.length == 0) return 0;
+			startOffset = -1;
+		}
+		int end = startOffset + text.length();
+		if (startOffset == -1) {
+			Event event = new Event ();
+			event.detail = SWT.COMPOSITION_SELECTION;
+			sendEvent (SWT.ImeComposition, event);
+			startOffset = event.start;
+			end = event.end;
+		}
+		inComposition = true;
+		Event event = new Event ();
+		event.detail = SWT.COMPOSITION_CHANGED;
+		event.start = startOffset;
+		event.end = end;
+		event.text = text = chars != null ? new String (chars) : "";
+		sendEvent (SWT.ImeComposition, event);
+	}
+	return 1;
+}
+
+int /*long*/ imHandle () {
+	return parent.imHandle ();
+}
+
+boolean isInlineEnabled () {
+	return hooks (SWT.ImeComposition);
+}
+
+void releaseParent () {
+	super.releaseParent ();
+	if (this == parent.getIME ()) parent.setIME (null);
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	parent = null;
+	text = null;
+	styles = null;
+	ranges = null;
+}
+
+/**
+ * Sets the offset of the composition from the start of the document.
+ * This is the start offset of the composition within the document and
+ * in not changed by the input method editor itself during the in-line edit
+ * session but may need to be changed by clients of the IME.  For example,
+ * if during an in-line edit operation, a text editor inserts characters
+ * above the IME, then the IME must be informed that the composition
+ * offset has changed.
+ *
+ * @param offset the offset of the composition
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setCompositionOffset (int offset) {
+	checkWidget ();
+	if (offset < 0) return;
+	if (startOffset != -1) {
+		startOffset = offset;
+	}
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ImageList.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ImageList.java
new file mode 100644
index 0000000..e82f728
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/ImageList.java
@@ -0,0 +1,459 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.internal;
+
+
+import org.eclipse.swt.internal.win32.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+public class ImageList {
+	int /*long*/ handle;
+	int style, refCount;
+	Image [] images;
+
+public ImageList (int style) {
+	this.style = style;
+	int flags = OS.ILC_MASK;
+	if (OS.IsWinCE) {
+		flags |= OS.ILC_COLOR;
+	} else {
+		if (OS.COMCTL32_MAJOR >= 6) {
+			flags |= OS.ILC_COLOR32;
+		} else {
+			int /*long*/ hDC = OS.GetDC (0);
+			int bits = OS.GetDeviceCaps (hDC, OS.BITSPIXEL);
+			int planes = OS.GetDeviceCaps (hDC, OS.PLANES);
+			OS.ReleaseDC (0, hDC);
+			int depth = bits * planes;
+			switch (depth) {
+				case 4: flags |= OS.ILC_COLOR4; break;
+				case 8: flags |= OS.ILC_COLOR8; break;
+				case 16: flags |= OS.ILC_COLOR16; break;
+				case 24: flags |= OS.ILC_COLOR24; break;
+				case 32: flags |= OS.ILC_COLOR32; break;
+				default: flags |= OS.ILC_COLOR; break;
+			}
+		}
+	}
+	if ((style & SWT.RIGHT_TO_LEFT) != 0) flags |= OS.ILC_MIRROR;
+	handle = OS.ImageList_Create (32, 32, flags, 16, 16);
+	images = new Image [4];
+}
+
+public int add (Image image) {
+	int count = OS.ImageList_GetImageCount (handle);
+	int index = 0;
+	while (index < count) {
+		if (images [index] != null) {
+			if (images [index].isDisposed ()) images [index] = null;
+		}
+		if (images [index] == null) break;
+		index++;
+	}
+	if (count == 0) {
+		Rectangle rect = image.getBounds ();
+		OS.ImageList_SetIconSize (handle, rect.width, rect.height);
+	}
+	set (index, image, count);
+	if (index == images.length) {
+		Image [] newImages = new Image [images.length + 4];
+		System.arraycopy (images, 0, newImages, 0, images.length);
+		images = newImages;
+	}
+	images [index] = image;
+	return index;
+}
+
+public int addRef() {
+	return ++refCount;
+}
+
+int /*long*/ copyBitmap (int /*long*/ hImage, int width, int height) {
+	BITMAP bm = new BITMAP ();
+	OS.GetObject (hImage, BITMAP.sizeof, bm);
+	int /*long*/ hDC = OS.GetDC (0);
+	int /*long*/ hdc1 = OS.CreateCompatibleDC (hDC);
+	OS.SelectObject (hdc1, hImage);
+	int /*long*/ hdc2 = OS.CreateCompatibleDC (hDC);
+	/*
+	* Feature in Windows.  If a bitmap has a 32-bit depth and any
+	* pixel has an alpha value different than zero, common controls
+	* version 6.0 assumes that the bitmap should be alpha blended.
+	* AlphaBlend() composes the alpha channel of a destination 32-bit
+	* depth image with the alpha channel of the source image. This
+	* may cause opaque images to draw transparently.  The fix is
+	* remove the alpha channel of opaque images by down sampling
+	* it to 24-bit depth.
+	*/
+	int /*long*/ hBitmap;
+	if (bm.bmBitsPixel == 32 && OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ()) {
+		BITMAPINFOHEADER bmiHeader = new BITMAPINFOHEADER();
+		bmiHeader.biSize = BITMAPINFOHEADER.sizeof;
+		bmiHeader.biWidth = width;
+		bmiHeader.biHeight = -height;
+		bmiHeader.biPlanes = 1;
+		bmiHeader.biBitCount = (short)24;
+		if (OS.IsWinCE) bmiHeader.biCompression = OS.BI_BITFIELDS;
+		else bmiHeader.biCompression = OS.BI_RGB;
+		byte[] bmi = new byte[BITMAPINFOHEADER.sizeof + (OS.IsWinCE ? 12 : 0)];
+		OS.MoveMemory(bmi, bmiHeader, BITMAPINFOHEADER.sizeof);
+		/* Set the rgb colors into the bitmap info */
+		if (OS.IsWinCE) {
+			int redMask = 0xFF00;
+			int greenMask = 0xFF0000;
+			int blueMask = 0xFF000000;
+			/* big endian */
+			int offset = BITMAPINFOHEADER.sizeof;
+			bmi[offset] = (byte)((redMask & 0xFF000000) >> 24);
+			bmi[offset + 1] = (byte)((redMask & 0xFF0000) >> 16);
+			bmi[offset + 2] = (byte)((redMask & 0xFF00) >> 8);
+			bmi[offset + 3] = (byte)((redMask & 0xFF) >> 0);
+			bmi[offset + 4] = (byte)((greenMask & 0xFF000000) >> 24);
+			bmi[offset + 5] = (byte)((greenMask & 0xFF0000) >> 16);
+			bmi[offset + 6] = (byte)((greenMask & 0xFF00) >> 8);
+			bmi[offset + 7] = (byte)((greenMask & 0xFF) >> 0);
+			bmi[offset + 8] = (byte)((blueMask & 0xFF000000) >> 24);
+			bmi[offset + 9] = (byte)((blueMask & 0xFF0000) >> 16);
+			bmi[offset + 10] = (byte)((blueMask & 0xFF00) >> 8);
+			bmi[offset + 11] = (byte)((blueMask & 0xFF) >> 0);
+		}
+		int /*long*/[] pBits = new int /*long*/[1];
+		hBitmap = OS.CreateDIBSection(0, bmi, OS.DIB_RGB_COLORS, pBits, 0, 0);
+	} else {
+		hBitmap = OS.CreateCompatibleBitmap (hDC, width, height);
+	}
+	OS.SelectObject (hdc2, hBitmap);
+	if (width != bm.bmWidth || height != bm.bmHeight) {
+		if (!OS.IsWinCE) OS.SetStretchBltMode(hdc2, OS.COLORONCOLOR);
+		OS.StretchBlt (hdc2, 0, 0, width, height, hdc1, 0, 0, bm.bmWidth, bm.bmHeight, OS.SRCCOPY);
+	} else {
+		OS.BitBlt (hdc2, 0, 0, width, height, hdc1, 0, 0, OS.SRCCOPY);
+	}
+	OS.DeleteDC (hdc1);
+	OS.DeleteDC (hdc2);
+	OS.ReleaseDC (0, hDC);
+	return hBitmap;
+}
+
+int /*long*/ copyIcon (int /*long*/ hImage, int width, int height) {
+	if (OS.IsWinCE) SWT.error(SWT.ERROR_NOT_IMPLEMENTED);
+	int /*long*/ hIcon = OS.CopyImage (hImage, OS.IMAGE_ICON, width, height, 0);
+	return hIcon != 0 ? hIcon : hImage;
+}
+
+int /*long*/ copyWithAlpha (int /*long*/ hBitmap, int background, byte[] alphaData, int destWidth, int destHeight) {
+	BITMAP bm = new BITMAP ();
+	OS.GetObject (hBitmap, BITMAP.sizeof, bm);
+	int srcWidth = bm.bmWidth;
+	int srcHeight = bm.bmHeight;
+	
+	/* Create resources */
+	int /*long*/ hdc = OS.GetDC (0);
+	int /*long*/ srcHdc = OS.CreateCompatibleDC (hdc);
+	int /*long*/ oldSrcBitmap = OS.SelectObject (srcHdc, hBitmap);
+	int /*long*/ memHdc = OS.CreateCompatibleDC (hdc);
+	BITMAPINFOHEADER bmiHeader = new BITMAPINFOHEADER ();
+	bmiHeader.biSize = BITMAPINFOHEADER.sizeof;
+	bmiHeader.biWidth = srcWidth;
+	bmiHeader.biHeight = -srcHeight;
+	bmiHeader.biPlanes = 1;
+	bmiHeader.biBitCount = 32;
+	bmiHeader.biCompression = OS.BI_RGB;
+	byte []	bmi = new byte[BITMAPINFOHEADER.sizeof];
+	OS.MoveMemory (bmi, bmiHeader, BITMAPINFOHEADER.sizeof);
+	int /*long*/ [] pBits = new int /*long*/ [1];
+	int /*long*/ memDib = OS.CreateDIBSection (0, bmi, OS.DIB_RGB_COLORS, pBits, 0, 0);
+	if (memDib == 0) SWT.error (SWT.ERROR_NO_HANDLES);
+	int /*long*/ oldMemBitmap = OS.SelectObject (memHdc, memDib);
+
+	BITMAP dibBM = new BITMAP ();
+	OS.GetObject (memDib, BITMAP.sizeof, dibBM);
+	int sizeInBytes = dibBM.bmWidthBytes * dibBM.bmHeight;
+
+ 	/* Get the foreground pixels */
+ 	OS.BitBlt (memHdc, 0, 0, srcWidth, srcHeight, srcHdc, 0, 0, OS.SRCCOPY);
+ 	byte[] srcData = new byte [sizeInBytes];
+	OS.MoveMemory (srcData, dibBM.bmBits, sizeInBytes);
+	
+	/* Merge the alpha channel in place */
+	if (alphaData != null) {
+		int spinc = dibBM.bmWidthBytes - srcWidth * 4;
+		int ap = 0, sp = 3;
+		for (int y = 0; y < srcHeight; ++y) {
+			for (int x = 0; x < srcWidth; ++x) {
+				srcData [sp] = alphaData [ap++];
+				sp += 4;
+			}
+			sp += spinc;
+		}
+	} else {
+		byte transRed = (byte)(background & 0xFF);
+		byte transGreen = (byte)((background >> 8) & 0xFF);
+		byte transBlue = (byte)((background >> 16) & 0xFF);
+		final int spinc = dibBM.bmWidthBytes - srcWidth * 4;
+		int sp = 3;
+		for (int y = 0; y < srcHeight; ++y) {
+			for (int x = 0; x < srcWidth; ++x) {
+				srcData [sp] = (srcData[sp-1] == transRed && srcData[sp-2] == transGreen && srcData[sp-3] == transBlue) ? 0 : (byte)255;
+				sp += 4;
+			}
+			sp += spinc;
+		}
+	}
+	OS.MoveMemory (dibBM.bmBits, srcData, sizeInBytes);
+	
+	/* Stretch and free resources */
+	if (srcWidth != destWidth || srcHeight != destHeight) {
+		BITMAPINFOHEADER bmiHeader2 = new BITMAPINFOHEADER ();
+		bmiHeader2.biSize = BITMAPINFOHEADER.sizeof;
+		bmiHeader2.biWidth = destWidth;
+		bmiHeader2.biHeight = -destHeight;
+		bmiHeader2.biPlanes = 1;
+		bmiHeader2.biBitCount = 32;
+		bmiHeader2.biCompression = OS.BI_RGB;
+		byte []	bmi2 = new byte[BITMAPINFOHEADER.sizeof];
+		OS.MoveMemory (bmi2, bmiHeader2, BITMAPINFOHEADER.sizeof);
+		int /*long*/ [] pBits2 = new int /*long*/ [1];
+		int /*long*/ memDib2 = OS.CreateDIBSection (0, bmi2, OS.DIB_RGB_COLORS, pBits2, 0, 0);
+		int /*long*/ memHdc2 = OS.CreateCompatibleDC (hdc);
+		int /*long*/ oldMemBitmap2 = OS.SelectObject (memHdc2, memDib2);
+		if (!OS.IsWinCE) OS.SetStretchBltMode(memHdc2, OS.COLORONCOLOR);
+		OS.StretchBlt (memHdc2, 0, 0, destWidth, destHeight, memHdc, 0, 0, srcWidth, srcHeight, OS.SRCCOPY);
+		OS.SelectObject (memHdc2, oldMemBitmap2);
+		OS.DeleteDC (memHdc2);
+		OS.SelectObject (memHdc, oldMemBitmap);
+		OS.DeleteDC (memHdc);
+		OS.DeleteObject (memDib);
+		memDib = memDib2;
+	} else {
+		OS.SelectObject (memHdc, oldMemBitmap);
+		OS.DeleteDC (memHdc);
+	}
+	OS.SelectObject (srcHdc, oldSrcBitmap);
+	OS.DeleteDC (srcHdc);
+	OS.ReleaseDC (0, hdc);
+	return memDib;
+}
+
+int /*long*/ createMaskFromAlpha (ImageData data, int destWidth, int destHeight) {
+	int srcWidth = data.width;
+	int srcHeight = data.height;
+	ImageData mask = ImageData.internal_new (srcWidth, srcHeight, 1,
+			new PaletteData(new RGB [] {new RGB (0, 0, 0), new RGB (0xff, 0xff, 0xff)}),
+			2, null, 1, null, null, -1, -1, -1, 0, 0, 0, 0);
+	int ap = 0;
+	for (int y = 0; y < mask.height; y++) {
+		for (int x = 0; x < mask.width; x++) {
+			mask.setPixel (x, y, (data.alphaData [ap++] & 0xff) <= 127 ? 1 : 0);
+		}
+	}
+	int /*long*/ hMask = OS.CreateBitmap (srcWidth, srcHeight, 1, 1, mask.data);
+	if (srcWidth != destWidth || srcHeight != destHeight) {
+		int /*long*/ hdc = OS.GetDC (0);
+		int /*long*/ hdc1 = OS.CreateCompatibleDC (hdc);
+		OS.SelectObject (hdc1, hMask);
+		int /*long*/ hdc2 = OS.CreateCompatibleDC (hdc);
+		int /*long*/ hMask2 = OS.CreateBitmap (destWidth, destHeight, 1, 1, null);
+		OS.SelectObject (hdc2, hMask2);
+		if (!OS.IsWinCE) OS.SetStretchBltMode(hdc2, OS.COLORONCOLOR);
+		OS.StretchBlt (hdc2, 0, 0, destWidth, destHeight, hdc1, 0, 0, srcWidth, srcHeight, OS.SRCCOPY);
+		OS.DeleteDC (hdc1);
+		OS.DeleteDC (hdc2);
+		OS.ReleaseDC (0, hdc);
+		OS.DeleteObject(hMask);
+		hMask = hMask2;
+	}
+	return hMask;
+}
+
+int /*long*/ createMask (int /*long*/ hBitmap, int destWidth, int destHeight, int background, int transparentPixel) {
+	BITMAP bm = new BITMAP ();
+	OS.GetObject (hBitmap, BITMAP.sizeof, bm);
+	int srcWidth = bm.bmWidth;
+	int srcHeight = bm.bmHeight;
+	int /*long*/ hMask = OS.CreateBitmap (destWidth, destHeight, 1, 1, null);
+	int /*long*/ hDC = OS.GetDC (0);
+	int /*long*/ hdc1 = OS.CreateCompatibleDC (hDC);
+	if (background != -1) {
+		OS.SelectObject (hdc1, hBitmap);
+		
+		/*
+		* If the image has a palette with multiple entries having
+		* the same color and one of those entries is the transparentPixel,
+		* only the first entry becomes transparent. To avoid this
+		* problem, temporarily change the image palette to a palette
+		* where the transparentPixel is white and everything else is
+		* black. 
+		*/
+		boolean isDib = bm.bmBits != 0;
+		byte[] originalColors = null;
+		if (!OS.IsWinCE && transparentPixel != -1 && isDib && bm.bmBitsPixel <= 8) {
+			int maxColors = 1 << bm.bmBitsPixel;
+			byte[] oldColors = new byte[maxColors * 4];
+			OS.GetDIBColorTable(hdc1, 0, maxColors, oldColors);
+			int offset = transparentPixel * 4;
+			byte[] newColors = new byte[oldColors.length];
+			newColors[offset] = (byte)0xFF;
+			newColors[offset+1] = (byte)0xFF;
+			newColors[offset+2] = (byte)0xFF;
+			OS.SetDIBColorTable(hdc1, 0, maxColors, newColors);
+			originalColors = oldColors;
+			OS.SetBkColor (hdc1, 0xFFFFFF);
+		} else {
+			OS.SetBkColor (hdc1, background);
+		}
+		
+		int /*long*/ hdc2 = OS.CreateCompatibleDC (hDC);
+		OS.SelectObject (hdc2, hMask);
+		if (destWidth != srcWidth || destHeight != srcHeight) {
+			if (!OS.IsWinCE) OS.SetStretchBltMode (hdc2, OS.COLORONCOLOR);
+			OS.StretchBlt (hdc2, 0, 0, destWidth, destHeight, hdc1, 0, 0, srcWidth, srcHeight, OS.SRCCOPY);
+		} else {
+			OS.BitBlt (hdc2, 0, 0, destWidth, destHeight, hdc1, 0, 0, OS.SRCCOPY);
+		}
+		OS.DeleteDC (hdc2);
+
+		/* Put back the original palette */
+		if (originalColors != null) OS.SetDIBColorTable(hdc1, 0, 1 << bm.bmBitsPixel, originalColors);
+	} else {
+		int /*long*/ hOldBitmap = OS.SelectObject (hdc1, hMask);
+		OS.PatBlt (hdc1, 0, 0, destWidth, destHeight, OS.BLACKNESS);
+		OS.SelectObject (hdc1, hOldBitmap);
+	}
+	OS.ReleaseDC (0, hDC);
+	OS.DeleteDC (hdc1);
+	return hMask;
+}
+
+public void dispose () {
+	if (handle != 0) OS.ImageList_Destroy (handle);
+	handle = 0;
+	images = null;
+}
+
+public Image get (int index) {
+	return images [index];
+}
+
+public int getStyle () {
+	return style;
+}
+
+public int /*long*/ getHandle () {
+	return handle;
+}
+
+public Point getImageSize() {
+	int [] cx = new int [1], cy = new int [1];
+	OS.ImageList_GetIconSize (handle, cx, cy);
+	return new Point (cx [0], cy [0]);
+}
+
+public int indexOf (Image image) {
+	int count = OS.ImageList_GetImageCount (handle);
+	for (int i=0; i<count; i++) {
+		if (images [i] != null) {
+			if (images [i].isDisposed ()) images [i] = null;
+			if (images [i] != null && images [i].equals (image)) return i;
+		}
+	}
+	return -1;
+}
+
+public void put (int index, Image image) {
+	int count = OS.ImageList_GetImageCount (handle);
+	if (!(0 <= index && index < count)) return;
+	if (image != null) set(index, image, count);
+	images [index] = image;
+}
+
+public void remove (int index) {
+	int count = OS.ImageList_GetImageCount (handle);
+	if (!(0 <= index && index < count)) return;
+	OS.ImageList_Remove (handle, index);
+	System.arraycopy (images, index + 1, images, index, --count - index);
+	images [index] = null;
+}
+
+public int removeRef() {
+	return --refCount;
+}
+
+void set (int index, Image image, int count) {
+	int /*long*/ hImage = image.handle;
+	int [] cx = new int [1], cy = new int [1];
+	OS.ImageList_GetIconSize (handle, cx, cy);
+	switch (image.type) {
+		case SWT.BITMAP: {
+			/*
+			* Note that the image size has to match the image list icon size. 
+			*/
+			int /*long*/ hBitmap = 0, hMask = 0;
+			ImageData data = image.getImageData ();
+			switch (data.getTransparencyType ()) {
+				case SWT.TRANSPARENCY_ALPHA:
+					if (OS.COMCTL32_MAJOR >= 6) {
+						hBitmap = copyWithAlpha (hImage, -1, data.alphaData, cx [0], cy [0]);
+					} else {
+						hBitmap = copyBitmap (hImage, cx [0], cy [0]);
+						hMask = createMaskFromAlpha (data, cx [0], cy [0]);
+					}
+					break;
+				case SWT.TRANSPARENCY_PIXEL:
+					int background = -1;
+					Color color = image.getBackground ();
+					if (color != null) background = color.handle;
+					hBitmap = copyBitmap (hImage, cx [0], cy [0]);
+					hMask = createMask (hImage, cx [0], cy [0], background, data.transparentPixel);
+					break;
+				case SWT.TRANSPARENCY_NONE:
+				default:
+					hBitmap = copyBitmap (hImage, cx [0], cy [0]);
+					if (index != count) hMask = createMask (hImage, cx [0], cy [0], -1, -1);
+					break;
+			}
+			if (index == count) {
+				OS.ImageList_Add (handle, hBitmap, hMask);
+			} else {
+				/* Note that the mask must always be replaced even for TRANSPARENCY_NONE */
+				OS.ImageList_Replace (handle, index, hBitmap, hMask);
+			}
+			if (hMask != 0) OS.DeleteObject (hMask);
+			if (hBitmap != hImage) OS.DeleteObject (hBitmap);
+			break;
+		}
+		case SWT.ICON: {
+			if (OS.IsWinCE) {	
+				OS.ImageList_ReplaceIcon (handle, index == count ? -1 : index, hImage);
+			} else {
+				int /*long*/ hIcon = copyIcon (hImage, cx [0], cy [0]);
+				OS.ImageList_ReplaceIcon (handle, index == count ? -1 : index, hIcon);
+				OS.DestroyIcon (hIcon);
+			}
+			break;
+		}
+	}
+}
+
+public int size () {
+	int result = 0;
+	int count = OS.ImageList_GetImageCount (handle);
+	for (int i=0; i<count; i++) {
+		if (images [i] != null) {
+			if (images [i].isDisposed ()) images [i] = null;
+			if (images [i] != null) result++;
+		}
+	}
+	return result;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/DateTime.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/DateTime.java
new file mode 100644
index 0000000..541ef00
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/DateTime.java
@@ -0,0 +1,1048 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.internal.win32.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class are selectable user interface
+ * objects that allow the user to enter and modify date
+ * or time values.
+ * <p>
+ * Note that although this class is a subclass of <code>Composite</code>,
+ * it does not make sense to add children to it, or set a layout on it.
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>DATE, TIME, CALENDAR, SHORT, MEDIUM, LONG, DROP_DOWN</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>DefaultSelection, Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles DATE, TIME, or CALENDAR may be specified,
+ * and only one of the styles SHORT, MEDIUM, or LONG may be specified.
+ * The DROP_DOWN style is a <em>HINT</em>, and it is only valid with the DATE style.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#datetime">DateTime snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ *
+ * @since 3.3
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class DateTime extends Composite {
+	boolean doubleClick, ignoreSelection;
+	SYSTEMTIME lastSystemTime;
+	SYSTEMTIME time = new SYSTEMTIME (); // only used in calendar mode
+	static final int /*long*/ DateTimeProc;
+	static final TCHAR DateTimeClass = new TCHAR (0, OS.DATETIMEPICK_CLASS, true);
+	static final int /*long*/ CalendarProc;
+	static final TCHAR CalendarClass = new TCHAR (0, OS.MONTHCAL_CLASS, true);
+	static {
+		INITCOMMONCONTROLSEX icex = new INITCOMMONCONTROLSEX ();
+		icex.dwSize = INITCOMMONCONTROLSEX.sizeof;
+		icex.dwICC = OS.ICC_DATE_CLASSES;
+		OS.InitCommonControlsEx (icex);
+	}
+	static {
+		WNDCLASS lpWndClass = new WNDCLASS ();
+		OS.GetClassInfo (0, DateTimeClass, lpWndClass);
+		DateTimeProc = lpWndClass.lpfnWndProc;
+		/*
+		* Feature in Windows.  The date time window class
+		* does not include CS_DBLCLKS.  This means that these
+		* controls will not get double click messages such as
+		* WM_LBUTTONDBLCLK.  The fix is to register a new 
+		* window class with CS_DBLCLKS.
+		* 
+		* NOTE:  Screen readers look for the exact class name
+		* of the control in order to provide the correct kind
+		* of assistance.  Therefore, it is critical that the
+		* new window class have the same name.  It is possible
+		* to register a local window class with the same name
+		* as a global class.  Since bits that affect the class
+		* are being changed, it is possible that other native
+		* code, other than SWT, could create a control with
+		* this class name, and fail unexpectedly.
+		*/
+		int /*long*/ hInstance = OS.GetModuleHandle (null);
+		int /*long*/ hHeap = OS.GetProcessHeap ();
+		lpWndClass.hInstance = hInstance;
+		lpWndClass.style &= ~OS.CS_GLOBALCLASS;
+		lpWndClass.style |= OS.CS_DBLCLKS;
+		int byteCount = DateTimeClass.length () * TCHAR.sizeof;
+		int /*long*/ lpszClassName = OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY, byteCount);
+		OS.MoveMemory (lpszClassName, DateTimeClass, byteCount);
+		lpWndClass.lpszClassName = lpszClassName;
+		OS.RegisterClass (lpWndClass);
+		OS.HeapFree (hHeap, 0, lpszClassName);
+	}
+	static {
+		WNDCLASS lpWndClass = new WNDCLASS ();
+		OS.GetClassInfo (0, CalendarClass, lpWndClass);
+		CalendarProc = lpWndClass.lpfnWndProc;
+		/*
+		* Feature in Windows.  The date time window class
+		* does not include CS_DBLCLKS.  This means that these
+		* controls will not get double click messages such as
+		* WM_LBUTTONDBLCLK.  The fix is to register a new 
+		* window class with CS_DBLCLKS.
+		* 
+		* NOTE:  Screen readers look for the exact class name
+		* of the control in order to provide the correct kind
+		* of assistance.  Therefore, it is critical that the
+		* new window class have the same name.  It is possible
+		* to register a local window class with the same name
+		* as a global class.  Since bits that affect the class
+		* are being changed, it is possible that other native
+		* code, other than SWT, could create a control with
+		* this class name, and fail unexpectedly.
+		*/
+		int /*long*/ hInstance = OS.GetModuleHandle (null);
+		int /*long*/ hHeap = OS.GetProcessHeap ();
+		lpWndClass.hInstance = hInstance;
+		lpWndClass.style &= ~OS.CS_GLOBALCLASS;
+		lpWndClass.style |= OS.CS_DBLCLKS;
+		int byteCount = CalendarClass.length () * TCHAR.sizeof;
+		int /*long*/ lpszClassName = OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY, byteCount);
+		OS.MoveMemory (lpszClassName, CalendarClass, byteCount);
+		lpWndClass.lpszClassName = lpszClassName;
+		OS.RegisterClass (lpWndClass);
+		OS.HeapFree (hHeap, 0, lpszClassName);
+	}
+	static final int MARGIN = 4;
+	static final int MAX_DIGIT = 9;
+	static final int MAX_DAY = 31;
+	static final int MAX_12HOUR = 12;
+	static final int MAX_24HOUR = 24;
+	static final int MAX_MINUTE = 60;
+	static final int MONTH_DAY_YEAR = 0;
+	static final int DAY_MONTH_YEAR = 1;
+	static final int YEAR_MONTH_DAY = 2;
+	static final char SINGLE_QUOTE = '\''; //$NON-NLS-1$ short date format may include quoted text
+	static final char DAY_FORMAT_CONSTANT = 'd'; //$NON-NLS-1$ 1-4 lowercase 'd's represent day
+	static final char MONTH_FORMAT_CONSTANT = 'M'; //$NON-NLS-1$ 1-4 uppercase 'M's represent month
+	static final char YEAR_FORMAT_CONSTANT = 'y'; //$NON-NLS-1$ 1-5 lowercase 'y's represent year
+	static final char HOURS_FORMAT_CONSTANT = 'h'; //$NON-NLS-1$ 1-2 upper or lowercase 'h's represent hours
+	static final char MINUTES_FORMAT_CONSTANT = 'm'; //$NON-NLS-1$ 1-2 lowercase 'm's represent minutes
+	static final char SECONDS_FORMAT_CONSTANT = 's'; //$NON-NLS-1$ 1-2 lowercase 's's represent seconds
+	static final char AMPM_FORMAT_CONSTANT = 't'; //$NON-NLS-1$ 1-2 lowercase 't's represent am/pm
+	static final int[] MONTH_NAMES = new int[] {OS.LOCALE_SMONTHNAME1, OS.LOCALE_SMONTHNAME2, OS.LOCALE_SMONTHNAME3, OS.LOCALE_SMONTHNAME4, OS.LOCALE_SMONTHNAME5, OS.LOCALE_SMONTHNAME6, OS.LOCALE_SMONTHNAME7, OS.LOCALE_SMONTHNAME8, OS.LOCALE_SMONTHNAME9, OS.LOCALE_SMONTHNAME10, OS.LOCALE_SMONTHNAME11, OS.LOCALE_SMONTHNAME12};
+
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#DATE
+ * @see SWT#TIME
+ * @see SWT#CALENDAR
+ * @see SWT#SHORT
+ * @see SWT#MEDIUM
+ * @see SWT#LONG
+ * @see SWT#DROP_DOWN
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public DateTime (Composite parent, int style) {
+	super (parent, checkStyle (style));
+	if ((this.style & SWT.SHORT) != 0) {
+		String buffer = ((this.style & SWT.DATE) != 0) ? getCustomShortDateFormat() : getCustomShortTimeFormat();
+		TCHAR lpszFormat = new TCHAR (0, buffer, true);
+		OS.SendMessage (handle, OS.DTM_SETFORMAT, 0, lpszFormat);
+	}
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is called when the user changes the control's value.
+ * <code>widgetDefaultSelected</code> is typically called when ENTER is pressed.
+ * </p>
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection, typedListener);
+	addListener (SWT.DefaultSelection, typedListener);
+}
+
+int /*long*/ callWindowProc (int /*long*/ hwnd, int msg, int /*long*/ wParam, int /*long*/ lParam) {
+	if (handle == 0) return 0;
+	return OS.CallWindowProc (windowProc (), hwnd, msg, wParam, lParam);
+}
+
+static int checkStyle (int style) {
+	/*
+	* Even though it is legal to create this widget
+	* with scroll bars, they serve no useful purpose
+	* because they do not automatically scroll the
+	* widget's client area.  The fix is to clear
+	* the SWT style.
+	*/
+	style &= ~(SWT.H_SCROLL | SWT.V_SCROLL);
+	style = checkBits (style, SWT.DATE, SWT.TIME, SWT.CALENDAR, 0, 0, 0);
+	style = checkBits (style, SWT.MEDIUM, SWT.SHORT, SWT.LONG, 0, 0, 0);
+	if ((style & SWT.DATE) == 0) style &=~ SWT.DROP_DOWN;
+	return style;
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget ();
+	int width = 0, height = 0;
+	if (wHint == SWT.DEFAULT || hHint == SWT.DEFAULT) {
+		if ((style & SWT.CALENDAR) != 0) {
+			RECT rect = new RECT ();
+			OS.SendMessage(handle, OS.MCM_GETMINREQRECT, 0, rect);
+			width = rect.right;
+			height = rect.bottom;
+		} else {
+			TCHAR buffer = new TCHAR (getCodePage (), 128);
+			int /*long*/ newFont, oldFont = 0;
+			int /*long*/ hDC = OS.GetDC (handle);
+			newFont = OS.SendMessage (handle, OS.WM_GETFONT, 0, 0);
+			if (newFont != 0) oldFont = OS.SelectObject (hDC, newFont);
+			RECT rect = new RECT ();
+			int flags = OS.DT_CALCRECT | OS.DT_EDITCONTROL | OS.DT_NOPREFIX;
+			SYSTEMTIME systime = new SYSTEMTIME ();
+			if ((style & SWT.DATE) != 0) {
+				/* Determine the widest/tallest year string. */
+				systime.wMonth = 1;
+				systime.wDay = 1;
+				int widest = 0, secondWidest = 0, thirdWidest = 0;
+				for (int i = 0; i <= MAX_DIGIT; i++) {
+					systime.wYear = (short) (2000 + i); // year 2000 + i is guaranteed to exist
+					int size = OS.GetDateFormat(OS.LOCALE_USER_DEFAULT, OS.DATE_SHORTDATE, systime, null, buffer, buffer.length ());
+					if (size == 0) {
+						buffer = new TCHAR (getCodePage (), size);
+						OS.GetDateFormat(OS.LOCALE_USER_DEFAULT, OS.DATE_SHORTDATE, systime, null, buffer, buffer.length ());
+					}
+					rect.left = rect.top = rect.right = rect.bottom = 0;
+					OS.DrawText (hDC, buffer, size, rect, flags);
+					if (rect.right - rect.left >= width) {
+						width = rect.right - rect.left;
+						thirdWidest = secondWidest;
+						secondWidest = widest;
+						widest = i;
+					}
+					height = Math.max(height, rect.bottom - rect.top);
+				}
+				if (widest > 1) widest = widest * 1000 + widest * 100 + widest * 10 + widest;
+				else if (secondWidest > 1) widest = secondWidest * 1000 + widest * 100 + widest * 10 + widest;
+				else widest = thirdWidest * 1000 + widest * 100 + widest * 10 + widest;
+				systime.wYear = (short) widest;
+
+				/* Determine the widest/tallest month name string. */
+				width = widest = 0;
+				for (short i = 0; i < MONTH_NAMES.length; i++) {
+					int name = MONTH_NAMES [i];
+					int size = OS.GetLocaleInfo (OS.LOCALE_USER_DEFAULT, name, buffer, buffer.length ());
+					if (size == 0) {
+						buffer = new TCHAR (getCodePage (), size);
+						OS.GetLocaleInfo (OS.LOCALE_USER_DEFAULT, name, buffer, buffer.length ());
+					}
+					rect.left = rect.top = rect.right = rect.bottom = 0;
+					OS.DrawText (hDC, buffer, size, rect, flags);
+					if (rect.right - rect.left > width) {
+						width = rect.right - rect.left;
+						widest = i;
+					}
+					height = Math.max(height, rect.bottom - rect.top);
+				}
+				systime.wMonth = (short) (widest + 1);
+
+				/* Determine the widest/tallest date string in the widest month of the widest year. */
+				int dwFlags = ((style & SWT.MEDIUM) != 0) ? OS.DATE_SHORTDATE : ((style & SWT.SHORT) != 0) ? OS.DATE_YEARMONTH : OS.DATE_LONGDATE;
+				width = 0;
+				for (short i = 1; i <= MAX_DAY; i++) {
+					systime.wDay = i;
+					int size = OS.GetDateFormat(OS.LOCALE_USER_DEFAULT, dwFlags, systime, null, buffer, buffer.length ());
+					if (size == 0) {
+						buffer = new TCHAR (getCodePage (), size);
+						OS.GetDateFormat(OS.LOCALE_USER_DEFAULT, dwFlags, systime, null, buffer, buffer.length ());
+					}
+					rect.left = rect.top = rect.right = rect.bottom = 0;
+					OS.DrawText (hDC, buffer, size, rect, flags);
+					width = Math.max(width, rect.right - rect.left);
+					height = Math.max(height, rect.bottom - rect.top);
+					if ((style & SWT.SHORT) != 0) break;
+				}
+			} else if ((style & SWT.TIME) != 0) {
+				/* Determine the widest/tallest hour string. This code allows for the possibility of ligatures. */
+				int dwFlags = ((style & SWT.SHORT) != 0) ? OS.TIME_NOSECONDS : 0;
+				short widest = 0;
+				int max = is24HourTime () ? MAX_24HOUR : MAX_12HOUR;
+				for (short i = 0; i < max; i++) {
+					systime.wHour = i;
+					int size = OS.GetTimeFormat(OS.LOCALE_USER_DEFAULT, dwFlags, systime, null, buffer, buffer.length ());
+					if (size == 0) {
+						buffer = new TCHAR (getCodePage (), size);
+						OS.GetTimeFormat(OS.LOCALE_USER_DEFAULT, dwFlags, systime, null, buffer, buffer.length ());
+					}
+					rect.left = rect.top = rect.right = rect.bottom = 0;
+					OS.DrawText (hDC, buffer, size, rect, flags);
+					if (rect.right - rect.left > width) {
+						width = rect.right - rect.left;
+						widest = i;
+					}
+					height = Math.max(height, rect.bottom - rect.top);
+				}
+				systime.wHour = widest;
+
+				/* Determine the widest/tallest minute and second string. */
+				width = widest = 0;
+				for (short i = 0; i < MAX_MINUTE; i++) {
+					systime.wMinute = i;
+					int size = OS.GetTimeFormat(OS.LOCALE_USER_DEFAULT, dwFlags, systime, null, buffer, buffer.length ());
+					if (size == 0) {
+						buffer = new TCHAR (getCodePage (), size);
+						OS.GetTimeFormat(OS.LOCALE_USER_DEFAULT, dwFlags, systime, null, buffer, buffer.length ());
+					}
+					rect.left = rect.top = rect.right = rect.bottom = 0;
+					OS.DrawText (hDC, buffer, size, rect, flags);
+					if (rect.right - rect.left > width) {
+						width = rect.right - rect.left;
+						widest = i;
+					}
+					height = Math.max(height, rect.bottom - rect.top);
+				}
+				systime.wMinute = widest;
+				systime.wSecond = widest;
+
+				/* Determine the widest/tallest time string for the widest hour, widest minute, and if applicable, widest second. */
+				int size = OS.GetTimeFormat(OS.LOCALE_USER_DEFAULT, dwFlags, systime, null, buffer, buffer.length ());
+				if (size == 0) {
+					buffer = new TCHAR (getCodePage (), size);
+					OS.GetTimeFormat(OS.LOCALE_USER_DEFAULT, dwFlags, systime, null, buffer, buffer.length ());
+				}
+				rect.left = rect.top = rect.right = rect.bottom = 0;
+				OS.DrawText (hDC, buffer, size, rect, flags);
+				width = rect.right - rect.left;
+				height = Math.max(height, rect.bottom - rect.top);
+			}
+			if (newFont != 0) OS.SelectObject (hDC, oldFont);
+			OS.ReleaseDC (handle, hDC);
+			int upDownWidth = OS.GetSystemMetrics (OS.SM_CXVSCROLL);
+			int upDownHeight = OS.GetSystemMetrics (OS.SM_CYVSCROLL);
+			if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (6, 0)) {
+				// TODO: On Vista, can send DTM_GETDATETIMEPICKERINFO to ask the Edit control what its margins are
+				upDownHeight += 7;
+				if ((style & SWT.DROP_DOWN) != 0) upDownWidth += 16;
+			}
+			width += upDownWidth + MARGIN;
+			height = Math.max (height, upDownHeight);
+		}
+	}
+	if (width == 0) width = DEFAULT_WIDTH;
+	if (height == 0) height = DEFAULT_HEIGHT;
+	if (wHint != SWT.DEFAULT) width = wHint;
+	if (hHint != SWT.DEFAULT) height = hHint;
+	int border = getBorderWidth ();
+	width += border * 2;
+	height += border * 2;
+	return new Point (width, height);
+}
+
+void createHandle () {
+	super.createHandle ();
+	state &= ~(CANVAS | THEME_BACKGROUND);
+	
+	if ((style & SWT.BORDER) == 0) {
+		int bits = OS.GetWindowLong (handle, OS.GWL_EXSTYLE);
+		bits &= ~(OS.WS_EX_CLIENTEDGE | OS.WS_EX_STATICEDGE);
+		OS.SetWindowLong (handle, OS.GWL_EXSTYLE, bits);
+	}
+}
+
+int defaultBackground () {
+	return OS.GetSysColor (OS.COLOR_WINDOW);
+}
+
+String getComputeSizeString () {
+	// TODO: Not currently used but might need for WinCE
+	if ((style & SWT.DATE) != 0) {
+		if ((style & SWT.SHORT) != 0) return getCustomShortDateFormat ();
+		if ((style & SWT.MEDIUM) != 0) return getShortDateFormat ();
+		if ((style & SWT.LONG) != 0) return getLongDateFormat ();
+	}
+	if ((style & SWT.TIME) != 0) {
+		if ((style & SWT.SHORT) != 0) return getCustomShortTimeFormat ();
+		return getTimeFormat ();
+	}
+	return "";
+}
+
+String getCustomShortDateFormat () {
+	TCHAR tchar = new TCHAR (getCodePage (), 80);
+	int size = OS.GetLocaleInfo (OS.LOCALE_USER_DEFAULT, OS.LOCALE_SYEARMONTH, tchar, 80);
+	return size != 0 ? tchar.toString (0, size - 1) : "M/yyyy"; //$NON-NLS-1$
+	
+	//TODO: Not currently used, but may need for WinCE (or if numeric short date is required)
+//	StringBuffer buffer = new StringBuffer (getShortDateFormat ());
+//	int length = buffer.length ();
+//	boolean inQuotes = false;
+//	int start = 0, end = 0;
+//	while (start < length) {
+//		char ch = buffer.charAt (start);
+//		if (ch == SINGLE_QUOTE) inQuotes = !inQuotes;
+//		else if (ch == DAY_FORMAT_CONSTANT && !inQuotes) {
+//			end = start + 1;
+//			while (end < length && buffer.charAt (end) == DAY_FORMAT_CONSTANT) end++;
+//			int ordering = getShortDateFormatOrdering ();
+//			switch (ordering) {
+//			case MONTH_DAY_YEAR:
+//				// skip the following separator
+//				while (end < length && buffer.charAt (end) != YEAR_FORMAT_CONSTANT) end++;
+//				break;
+//			case DAY_MONTH_YEAR:
+//				// skip the following separator
+//				while (end < length && buffer.charAt (end) != MONTH_FORMAT_CONSTANT) end++;
+//				break;
+//			case YEAR_MONTH_DAY:
+//				// skip the preceding separator
+//				while (start > 0 && buffer.charAt (start) != MONTH_FORMAT_CONSTANT) start--;
+//				break;
+//			}
+//			break;
+//		}
+//		start++;
+//	}
+//	if (start < end) buffer.delete (start, end);
+//	return buffer.toString ();
+}
+
+String getCustomShortTimeFormat () {
+	StringBuffer buffer = new StringBuffer (getTimeFormat ());
+	int length = buffer.length ();
+	boolean inQuotes = false;
+	int start = 0, end = 0;
+	while (start < length) {
+		char ch = buffer.charAt (start);
+		if (ch == SINGLE_QUOTE) inQuotes = !inQuotes;
+		else if (ch == SECONDS_FORMAT_CONSTANT && !inQuotes) {
+			end = start + 1;
+			while (end < length && buffer.charAt (end) == SECONDS_FORMAT_CONSTANT) end++;
+			// skip the preceding separator
+			while (start > 0 && buffer.charAt (start) != MINUTES_FORMAT_CONSTANT) start--;
+			start++;
+			break;
+		}
+		start++;
+	}
+	if (start < end) buffer.delete (start, end);
+	return buffer.toString ();
+}
+
+String getLongDateFormat () {
+	//TODO: Not currently used, but may need for WinCE
+	TCHAR tchar = new TCHAR (getCodePage (), 80);
+	int size = OS.GetLocaleInfo (OS.LOCALE_USER_DEFAULT, OS.LOCALE_SLONGDATE, tchar, 80);
+	return size > 0 ? tchar.toString (0, size - 1) : "dddd, MMMM dd, yyyy"; //$NON-NLS-1$
+}
+
+String getShortDateFormat () {
+	//TODO: Not currently used, but may need for WinCE
+	TCHAR tchar = new TCHAR (getCodePage (), 80);
+	//TODO: May need to OR with LOCALE_ICENTURY
+	int size = OS.GetLocaleInfo (OS.LOCALE_USER_DEFAULT, OS.LOCALE_SSHORTDATE, tchar, 80);
+	return size > 0 ? tchar.toString (0, size - 1) : "M/d/yyyy"; //$NON-NLS-1$
+}
+
+int getShortDateFormatOrdering () {
+	//TODO: Not currently used, but may need for WinCE
+	TCHAR tchar = new TCHAR (getCodePage (), 4);
+	int size = OS.GetLocaleInfo (OS.LOCALE_USER_DEFAULT, OS.LOCALE_IDATE, tchar, 4);
+	if (size > 0) {
+		String number = tchar.toString (0, size - 1);
+		return Integer.parseInt (number);
+	}
+	return 0;
+}
+
+String getTimeFormat () {
+	TCHAR tchar = new TCHAR (getCodePage (), 80);
+	int size = OS.GetLocaleInfo (OS.LOCALE_USER_DEFAULT, OS.LOCALE_STIMEFORMAT, tchar, 80);
+	return size > 0 ? tchar.toString (0, size - 1) : "h:mm:ss tt"; //$NON-NLS-1$
+}
+
+boolean is24HourTime () {
+	TCHAR tchar = new TCHAR (getCodePage (), 4);
+	int size = OS.GetLocaleInfo (OS.LOCALE_USER_DEFAULT, OS.LOCALE_ITIME, tchar, 4);
+	if (size > 0) {
+		String number = tchar.toString (0, size - 1);
+		return Integer.parseInt (number) != 0;
+	}
+	return true;
+}
+
+/**
+ * Returns the receiver's date, or day of the month.
+ * <p>
+ * The first day of the month is 1, and the last day depends on the month and year.
+ * </p>
+ *
+ * @return a positive integer beginning with 1
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getDay () {
+	checkWidget ();
+	SYSTEMTIME systime = new SYSTEMTIME ();
+	int msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_GETCURSEL : OS.DTM_GETSYSTEMTIME;
+	OS.SendMessage (handle, msg, 0, systime);
+	return systime.wDay;
+}
+
+/**
+ * Returns the receiver's hours.
+ * <p>
+ * Hours is an integer between 0 and 23.
+ * </p>
+ *
+ * @return an integer between 0 and 23
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getHours () {
+	checkWidget ();
+	if ((style & SWT.CALENDAR) != 0) return time.wHour;
+	SYSTEMTIME systime = new SYSTEMTIME ();
+	int msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_GETCURSEL : OS.DTM_GETSYSTEMTIME;
+	OS.SendMessage (handle, msg, 0, systime);
+	return systime.wHour;
+}
+
+/**
+ * Returns the receiver's minutes.
+ * <p>
+ * Minutes is an integer between 0 and 59.
+ * </p>
+ *
+ * @return an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMinutes () {
+	checkWidget ();
+	if ((style & SWT.CALENDAR) != 0) return time.wMinute;
+	SYSTEMTIME systime = new SYSTEMTIME ();
+	int msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_GETCURSEL : OS.DTM_GETSYSTEMTIME;
+	OS.SendMessage (handle, msg, 0, systime);
+	return systime.wMinute;
+}
+
+/**
+ * Returns the receiver's month.
+ * <p>
+ * The first month of the year is 0, and the last month is 11.
+ * </p>
+ *
+ * @return an integer between 0 and 11
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMonth () {
+	checkWidget ();
+	SYSTEMTIME systime = new SYSTEMTIME ();
+	int msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_GETCURSEL : OS.DTM_GETSYSTEMTIME;
+	OS.SendMessage (handle, msg, 0, systime);
+	return systime.wMonth - 1;
+}
+
+String getNameText() {
+	return (style & SWT.TIME) != 0 ? getHours() + ":" + getMinutes() + ":" + getSeconds()
+			: (getMonth() + 1) + "/" + getDay() + "/" + getYear();
+}
+
+/**
+ * Returns the receiver's seconds.
+ * <p>
+ * Seconds is an integer between 0 and 59.
+ * </p>
+ *
+ * @return an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSeconds () {
+	checkWidget ();
+	if ((style & SWT.CALENDAR) != 0) return time.wSecond;
+	SYSTEMTIME systime = new SYSTEMTIME ();
+	int msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_GETCURSEL : OS.DTM_GETSYSTEMTIME;
+	OS.SendMessage (handle, msg, 0, systime);
+	return systime.wSecond;
+}
+
+/**
+ * Returns the receiver's year.
+ * <p>
+ * The first year is 1752 and the last year is 9999.
+ * </p>
+ *
+ * @return an integer between 1752 and 9999
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getYear () {
+	checkWidget ();
+	SYSTEMTIME systime = new SYSTEMTIME ();
+	int msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_GETCURSEL : OS.DTM_GETSYSTEMTIME;
+	OS.SendMessage (handle, msg, 0, systime);
+	return systime.wYear;
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	lastSystemTime = null;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection, listener);	
+}
+
+/**
+ * Sets the receiver's year, month, and day in a single operation.
+ * <p>
+ * This is the recommended way to set the date, because setting the year,
+ * month, and day separately may result in invalid intermediate dates.
+ * </p>
+ *
+ * @param year an integer between 1752 and 9999
+ * @param month an integer between 0 and 11
+ * @param day a positive integer beginning with 1
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.4
+ */
+public void setDate (int year, int month, int day) {
+	checkWidget ();
+	SYSTEMTIME systime = new SYSTEMTIME ();
+	int msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_GETCURSEL : OS.DTM_GETSYSTEMTIME;
+	OS.SendMessage (handle, msg, 0, systime);
+	msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_SETCURSEL : OS.DTM_SETSYSTEMTIME;
+	systime.wYear = (short)year;
+	systime.wMonth = (short)(month + 1);
+	systime.wDay = (short)day;
+	OS.SendMessage (handle, msg, 0, systime);
+	lastSystemTime = null;
+}
+
+/**
+ * Sets the receiver's date, or day of the month, to the specified day.
+ * <p>
+ * The first day of the month is 1, and the last day depends on the month and year.
+ * If the specified day is not valid for the receiver's month and year, then it is ignored. 
+ * </p>
+ *
+ * @param day a positive integer beginning with 1
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setDate
+ */
+public void setDay (int day) {
+	checkWidget ();
+	SYSTEMTIME systime = new SYSTEMTIME ();
+	int msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_GETCURSEL : OS.DTM_GETSYSTEMTIME;
+	OS.SendMessage (handle, msg, 0, systime);
+	msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_SETCURSEL : OS.DTM_SETSYSTEMTIME;
+	systime.wDay = (short)day;
+	OS.SendMessage (handle, msg, 0, systime);
+	lastSystemTime = null;
+}
+
+/**
+ * Sets the receiver's hours.
+ * <p>
+ * Hours is an integer between 0 and 23.
+ * </p>
+ *
+ * @param hours an integer between 0 and 23
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setHours (int hours) {
+	checkWidget ();
+	SYSTEMTIME systime = new SYSTEMTIME ();
+	int msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_GETCURSEL : OS.DTM_GETSYSTEMTIME;
+	OS.SendMessage (handle, msg, 0, systime);
+	msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_SETCURSEL : OS.DTM_SETSYSTEMTIME;
+	systime.wHour = (short)hours;
+	OS.SendMessage (handle, msg, 0, systime);
+	if ((style & SWT.CALENDAR) != 0 && hours >= 0 && hours <= 23) time.wHour = (short)hours;
+}
+
+/**
+ * Sets the receiver's minutes.
+ * <p>
+ * Minutes is an integer between 0 and 59.
+ * </p>
+ *
+ * @param minutes an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMinutes (int minutes) {
+	checkWidget ();
+	SYSTEMTIME systime = new SYSTEMTIME ();
+	int msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_GETCURSEL : OS.DTM_GETSYSTEMTIME;
+	OS.SendMessage (handle, msg, 0, systime);
+	msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_SETCURSEL : OS.DTM_SETSYSTEMTIME;
+	systime.wMinute = (short)minutes;
+	OS.SendMessage (handle, msg, 0, systime);
+	if ((style & SWT.CALENDAR) != 0 && minutes >= 0 && minutes <= 59) time.wMinute = (short)minutes;
+}
+
+/**
+ * Sets the receiver's month.
+ * <p>
+ * The first month of the year is 0, and the last month is 11.
+ * If the specified month is not valid for the receiver's day and year, then it is ignored. 
+ * </p>
+ *
+ * @param month an integer between 0 and 11
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setDate
+ */
+public void setMonth (int month) {
+	checkWidget ();
+	SYSTEMTIME systime = new SYSTEMTIME ();
+	int msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_GETCURSEL : OS.DTM_GETSYSTEMTIME;
+	OS.SendMessage (handle, msg, 0, systime);
+	msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_SETCURSEL : OS.DTM_SETSYSTEMTIME;
+	systime.wMonth = (short)(month + 1);
+	OS.SendMessage (handle, msg, 0, systime);
+	lastSystemTime = null;
+}
+
+/**
+ * Sets the receiver's seconds.
+ * <p>
+ * Seconds is an integer between 0 and 59.
+ * </p>
+ *
+ * @param seconds an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSeconds (int seconds) {
+	checkWidget ();
+	SYSTEMTIME systime = new SYSTEMTIME ();
+	int msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_GETCURSEL : OS.DTM_GETSYSTEMTIME;
+	OS.SendMessage (handle, msg, 0, systime);
+	msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_SETCURSEL : OS.DTM_SETSYSTEMTIME;
+	systime.wSecond = (short)seconds;
+	OS.SendMessage (handle, msg, 0, systime);
+	if ((style & SWT.CALENDAR) != 0 && seconds >= 0 && seconds <= 59) time.wSecond = (short)seconds;
+}
+
+/**
+ * Sets the receiver's hours, minutes, and seconds in a single operation.
+ *
+ * @param hours an integer between 0 and 23
+ * @param minutes an integer between 0 and 59
+ * @param seconds an integer between 0 and 59
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.4
+ */
+public void setTime (int hours, int minutes, int seconds) {
+	checkWidget ();
+	SYSTEMTIME systime = new SYSTEMTIME ();
+	int msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_GETCURSEL : OS.DTM_GETSYSTEMTIME;
+	OS.SendMessage (handle, msg, 0, systime);
+	msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_SETCURSEL : OS.DTM_SETSYSTEMTIME;
+	systime.wHour = (short)hours;
+	systime.wMinute = (short)minutes;
+	systime.wSecond = (short)seconds;
+	OS.SendMessage (handle, msg, 0, systime);
+	if ((style & SWT.CALENDAR) != 0
+			&& hours >= 0 && hours <= 23
+			&& minutes >= 0 && minutes <= 59
+			&& seconds >= 0 && seconds <= 59) {
+		time.wHour = (short)hours;
+		time.wMinute = (short)minutes;
+		time.wSecond = (short)seconds;
+	}
+}
+
+/**
+ * Sets the receiver's year.
+ * <p>
+ * The first year is 1752 and the last year is 9999.
+ * If the specified year is not valid for the receiver's day and month, then it is ignored. 
+ * </p>
+ *
+ * @param year an integer between 1752 and 9999
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setDate
+ */
+public void setYear (int year) {
+	checkWidget ();
+	SYSTEMTIME systime = new SYSTEMTIME ();
+	int msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_GETCURSEL : OS.DTM_GETSYSTEMTIME;
+	OS.SendMessage (handle, msg, 0, systime);
+	msg = (style & SWT.CALENDAR) != 0 ? OS.MCM_SETCURSEL : OS.DTM_SETSYSTEMTIME;
+	systime.wYear = (short)year;
+	OS.SendMessage (handle, msg, 0, systime);
+	lastSystemTime = null;
+}
+
+int widgetStyle () {
+	int bits = super.widgetStyle () | OS.WS_TABSTOP;
+	if ((style & SWT.CALENDAR) != 0) return bits | OS.MCS_NOTODAY;
+	/*
+	* Bug in Windows: When WS_CLIPCHILDREN is set in a
+	* Date and Time Picker, the widget draws on top of
+	* the updown control. The fix is to clear the bits.
+	*/
+	bits &= ~OS.WS_CLIPCHILDREN;
+	if ((style & SWT.TIME) != 0) bits |= OS.DTS_TIMEFORMAT;
+	if ((style & SWT.DATE) != 0) {
+		bits |= ((style & SWT.MEDIUM) != 0 ? OS.DTS_SHORTDATECENTURYFORMAT : OS.DTS_LONGDATEFORMAT);
+		if ((style & SWT.DROP_DOWN) == 0) bits |= OS.DTS_UPDOWN;
+	}
+	return bits;
+}
+
+TCHAR windowClass () {
+	return (style & SWT.CALENDAR) != 0 ? CalendarClass : DateTimeClass;
+}
+
+int /*long*/ windowProc () {
+	return (style & SWT.CALENDAR) != 0 ? CalendarProc : DateTimeProc;
+}
+
+LRESULT wmNotifyChild (NMHDR hdr, int /*long*/ wParam, int /*long*/ lParam) {
+	switch (hdr.code) {
+		case OS.DTN_CLOSEUP: {
+			/*
+			* Feature in Windows.  When the user selects the drop-down button,
+			* the DateTimePicker runs a modal loop and consumes WM_LBUTTONUP.
+			* This is done without adding a mouse capture.  Since WM_LBUTTONUP
+			* is not delivered, the normal mechanism where a mouse capture is
+			* added on mouse down and removed when the mouse is released
+			* is broken, leaving an unwanted capture.  The fix is to avoid
+			* setting capture on mouse down right after WM_LBUTTONUP is consumed.
+			*/
+			display.captureChanged = true;
+			break;
+		}
+		case OS.MCN_SELCHANGE: {
+			if (ignoreSelection) break;
+			SYSTEMTIME systime = new SYSTEMTIME ();
+			OS.SendMessage (handle, OS.MCM_GETCURSEL, 0, systime);
+			postEvent (SWT.Selection);
+			break;
+		}
+		case OS.DTN_DATETIMECHANGE: {
+			SYSTEMTIME systime = new SYSTEMTIME ();
+			OS.SendMessage (handle, OS.DTM_GETSYSTEMTIME, 0, systime);
+			if (lastSystemTime == null || systime.wDay != lastSystemTime.wDay || systime.wMonth != lastSystemTime.wMonth || systime.wYear != lastSystemTime.wYear) {
+				postEvent (SWT.Selection);
+				if ((style & SWT.TIME) == 0) lastSystemTime = systime;
+			}
+			break;
+		}
+	}
+	return super.wmNotifyChild (hdr, wParam, lParam);
+}
+
+LRESULT WM_CHAR (int /*long*/ wParam, int /*long*/ lParam) {
+	LRESULT result = super.WM_CHAR (wParam, lParam);
+	if (result != null) return result;
+	/*
+	* Feature in Windows.  For some reason, when the
+	* user presses tab, return or escape, Windows beeps.
+	* The fix is to look for these keys and not call
+	* the window proc.
+	*/
+	switch ((int)/*64*/wParam) {
+		case SWT.CR:
+			postEvent (SWT.DefaultSelection);
+			// FALL THROUGH
+		case SWT.TAB:
+		case SWT.ESC: return LRESULT.ZERO;
+	}
+	return result;
+}
+
+LRESULT WM_LBUTTONDBLCLK (int /*long*/ wParam, int /*long*/ lParam) {	
+	LRESULT result = super.WM_LBUTTONDBLCLK (wParam, lParam);
+	if (isDisposed ()) return LRESULT.ZERO;
+	if ((style & SWT.CALENDAR) != 0) {
+		MCHITTESTINFO pMCHitTest = new MCHITTESTINFO ();
+		pMCHitTest.cbSize = MCHITTESTINFO.sizeof;
+		POINT pt = new POINT ();
+		pt.x = OS.GET_X_LPARAM (lParam);
+		pt.y = OS.GET_Y_LPARAM (lParam);
+		pMCHitTest.pt = pt;
+		int /*long*/ code = OS.SendMessage (handle, OS.MCM_HITTEST, 0, pMCHitTest);
+		if ((code & OS.MCHT_CALENDARDATE) == OS.MCHT_CALENDARDATE) doubleClick = true;
+	}
+	return result;
+}
+
+LRESULT WM_LBUTTONDOWN (int /*long*/ wParam, int /*long*/ lParam) {
+	LRESULT result = super.WM_LBUTTONDOWN (wParam, lParam);
+	if (result == LRESULT.ZERO) return result;
+	doubleClick = false;
+	/*
+	* Feature in Windows. For some reason, the calendar control
+	* does not take focus on WM_LBUTTONDOWN.  The fix is to
+	* explicitly set focus.
+	*/
+	if ((style & SWT.CALENDAR) != 0) {
+		if ((style & SWT.NO_FOCUS) == 0) OS.SetFocus (handle);
+	}
+	return result;
+}
+
+LRESULT WM_LBUTTONUP (int /*long*/ wParam, int /*long*/ lParam) {	
+	LRESULT result = super.WM_LBUTTONUP (wParam, lParam);
+	if (isDisposed ()) return LRESULT.ZERO;
+	if (doubleClick) postEvent (SWT.DefaultSelection);
+	doubleClick = false;
+	return result;
+}
+
+LRESULT WM_TIMER (int /*long*/ wParam, int /*long*/ lParam) {
+	LRESULT result = super.WM_TIMER (wParam, lParam);
+	if (result != null) return result;
+	/*
+	* Feature in Windows. For some reason, Windows sends WM_NOTIFY with
+	* MCN_SELCHANGE at regular intervals. This is unexpected. The fix is
+	* to ignore MCN_SELCHANGE during WM_TIMER.
+	*/
+	ignoreSelection = true;
+	int /*long*/ code = callWindowProc(handle, OS.WM_TIMER, wParam, lParam);
+	ignoreSelection = false;
+	return code == 0 ? LRESULT.ZERO : new LRESULT(code);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/IME.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/IME.java
new file mode 100644
index 0000000..bfd9425
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/IME.java
@@ -0,0 +1,566 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.win32.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class represent input method editors.
+ * These are typically in-line pre-edit text areas that allow
+ * the user to compose characters from Far Eastern languages
+ * such as Japanese, Chinese or Korean.
+ * 
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>ImeComposition</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.4
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class IME extends Widget {
+	Canvas parent;
+	int caretOffset;
+	int startOffset;
+	int commitCount;
+	String text;
+	int [] ranges;
+	TextStyle [] styles;
+	
+	static final int WM_MSIME_MOUSE = OS.RegisterWindowMessage (new TCHAR (0, "MSIMEMouseOperation", true)); //$NON-NLS-1$
+	
+	static final byte [] IID_ITfInputProcessorProfiles = new byte [16];
+	static final byte [] IID_ITfDisplayAttributeProvider = new byte [16];
+	static final byte [] CLSID_TF_InputProcessorProfiles = new byte [16];
+	static final byte [] GUID_TFCAT_TIP_KEYBOARD = new byte [16];
+	static {
+		OS.IIDFromString ("{1F02B6C5-7842-4EE6-8A0B-9A24183A95CA}\0".toCharArray (), IID_ITfInputProcessorProfiles); //$NON-NLS-1$
+		OS.IIDFromString ("{fee47777-163c-4769-996a-6e9c50ad8f54}\0".toCharArray (), IID_ITfDisplayAttributeProvider); //$NON-NLS-1$
+		OS.IIDFromString ("{33C53A50-F456-4884-B049-85FD643ECFED}\0".toCharArray (), CLSID_TF_InputProcessorProfiles); //$NON-NLS-1$
+		OS.IIDFromString ("{34745C63-B2F0-4784-8B67-5E12C8701A31}\0".toCharArray (), GUID_TFCAT_TIP_KEYBOARD); //$NON-NLS-1$
+	}
+	
+	/* TextLayout has a copy of these constants */
+	static final int UNDERLINE_IME_DOT = 1 << 16;
+	static final int UNDERLINE_IME_DASH = 2 << 16;
+	static final int UNDERLINE_IME_THICK = 3 << 16;
+	
+/**
+ * Prevents uninitialized instances from being created outside the package.
+ */
+IME () {
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a canvas control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public IME (Canvas parent, int style) {
+	super (parent, style);
+	this.parent = parent;
+	createWidget ();
+}
+
+void createWidget () {
+	text = ""; //$NON-NLS-1$
+	startOffset = -1;
+	if (parent.getIME () == null) {
+		parent.setIME (this);
+	}
+}
+
+/**
+ * Returns the offset of the caret from the start of the document.
+ * The caret is within the current composition.
+ *
+ * @return the caret offset
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getCaretOffset () {
+	checkWidget ();
+	return startOffset + caretOffset;
+}
+
+/**
+ * Returns the commit count of the composition.  This is the
+ * number of characters that have been composed.  When the
+ * commit count is equal to the length of the composition
+ * text, then the in-line edit operation is complete.
+ * 
+ * @return the commit count
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see IME#getText
+ */
+public int getCommitCount () {
+	checkWidget ();
+	return commitCount;
+}
+
+/**
+ * Returns the offset of the composition from the start of the document.
+ * This is the start offset of the composition within the document and
+ * in not changed by the input method editor itself during the in-line edit
+ * session.
+ *
+ * @return the offset of the composition
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getCompositionOffset () {
+	checkWidget ();
+	return startOffset;
+}
+
+TF_DISPLAYATTRIBUTE getDisplayAttribute (short langid, int attInfo) {
+	int /*long*/ [] pProfiles = new int /*long*/ [1];
+	int hr = OS.CoCreateInstance (CLSID_TF_InputProcessorProfiles, 0, OS.CLSCTX_INPROC_SERVER, IID_ITfInputProcessorProfiles, pProfiles);
+	TF_DISPLAYATTRIBUTE pda = null;
+	if (hr == OS.S_OK) {
+		byte [] pclsid = new byte [16];
+		byte [] pguidProfile = new byte [16];
+		/* pProfiles.GetDefaultLanguageProfile () */
+		hr = OS.VtblCall (8, pProfiles [0], langid, GUID_TFCAT_TIP_KEYBOARD, pclsid, pguidProfile);
+		if (hr == OS.S_OK) {
+			int /*long*/ [] pProvider = new int /*long*/ [1];
+			hr = OS.CoCreateInstance (pclsid, 0, OS.CLSCTX_INPROC_SERVER, IID_ITfDisplayAttributeProvider, pProvider);
+			if (hr == OS.S_OK) {
+				int /*long*/ [] pEnum = new int /*long*/ [1];
+				/* pProvider.EnumDisplayAttributeInfo () */
+				hr = OS.VtblCall (3, pProvider [0], pEnum);
+				if (hr == OS.S_OK) {
+					int /*long*/ [] pDispInfo = new int /*long*/ [1];
+					TF_DISPLAYATTRIBUTE tempPda = new TF_DISPLAYATTRIBUTE ();
+					/* pEnum.Next () */
+					while ((hr = OS.VtblCall (4, pEnum [0], 1, pDispInfo, null)) == OS.S_OK) {
+						/* pDispInfo.GetAttributeInfo(); */
+						OS.VtblCall (5, pDispInfo [0], tempPda);
+						/* pDispInfo.Release () */
+						OS.VtblCall (2, pDispInfo [0]);
+						if (tempPda.bAttr == attInfo) {
+							pda = tempPda;
+							break;
+						}
+					}
+					/* pEnum.Release () */
+					hr = OS.VtblCall (2, pEnum [0]);
+				}
+				/* pProvider.Release () */ 
+				hr = OS.VtblCall (2, pProvider [0]);
+			}
+		}
+		/* pProfiles.Release () */
+		hr = OS.VtblCall (2, pProfiles [0]);
+	}
+	if (pda == null) {
+		pda = new TF_DISPLAYATTRIBUTE ();
+		switch (attInfo) {
+			case OS.TF_ATTR_INPUT:
+				pda.lsStyle = OS.TF_LS_SQUIGGLE;
+				break;
+			case OS.TF_ATTR_CONVERTED:
+			case OS.TF_ATTR_TARGET_CONVERTED:
+				pda.lsStyle = OS.TF_LS_SOLID;
+				pda.fBoldLine = attInfo == OS.TF_ATTR_TARGET_CONVERTED; 
+				break;
+		}
+	}
+	return pda;
+}
+
+/**
+ * Returns the ranges for the style that should be applied during the
+ * in-line edit session.
+ * <p>
+ * The ranges array contains start and end pairs.  Each pair refers to
+ * the corresponding style in the styles array.  For example, the pair
+ * that starts at ranges[n] and ends at ranges[n+1] uses the style
+ * at styles[n/2] returned by <code>getStyles()</code>.
+ * </p>
+ * @return the ranges for the styles
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see IME#getStyles
+ */
+public int [] getRanges () {
+	checkWidget ();
+	if (ranges == null) return new int [0];
+	int [] result = new int [ranges.length];
+	for (int i = 0; i < result.length; i++) {
+		result [i] = ranges [i] + startOffset; 
+	}
+	return result;
+}
+
+/**
+ * Returns the styles for the ranges.
+ * <p>
+ * The ranges array contains start and end pairs.  Each pair refers to
+ * the corresponding style in the styles array.  For example, the pair
+ * that starts at ranges[n] and ends at ranges[n+1] uses the style
+ * at styles[n/2].
+ * </p>
+ * 
+ * @return the ranges for the styles
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see IME#getRanges
+ */
+public TextStyle [] getStyles () {
+	checkWidget ();
+	if (styles == null) return new TextStyle [0];
+	TextStyle [] result = new TextStyle [styles.length];
+	System.arraycopy (styles, 0, result, 0, styles.length);
+	return result;
+}
+
+/**
+ * Returns the composition text.
+ * <p>
+ * The text for an IME is the characters in the widget that
+ * are in the current composition. When the commit count is
+ * equal to the length of the composition text, then the
+ * in-line edit operation is complete.
+ * </p>
+ *
+ * @return the widget text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getText () {
+	checkWidget ();
+	return text;
+}
+
+/**
+ * Returns <code>true</code> if the caret should be wide, and
+ * <code>false</code> otherwise.  In some languages, for example
+ * Korean, the caret is typically widened to the width of the
+ * current character in the in-line edit session.
+ * 
+ * @return the wide caret state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getWideCaret() {
+	checkWidget ();
+	int /*long*/ layout = OS.GetKeyboardLayout (0);
+	short langID = (short)OS.LOWORD (layout);
+	return OS.PRIMARYLANGID (langID) == OS.LANG_KOREAN; 
+}
+
+boolean isInlineEnabled () {
+	if (OS.IsWinCE || OS.WIN32_VERSION < OS.VERSION (5, 1)) return false;
+	return OS.IsDBLocale && hooks (SWT.ImeComposition);
+}
+
+void releaseParent () {
+	super.releaseParent ();
+	if (this == parent.getIME ()) parent.setIME (null);
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	parent = null;
+	text = null;
+	styles = null;
+	ranges = null;
+}
+
+/**
+ * Sets the offset of the composition from the start of the document.
+ * This is the start offset of the composition within the document and
+ * in not changed by the input method editor itself during the in-line edit
+ * session but may need to be changed by clients of the IME.  For example,
+ * if during an in-line edit operation, a text editor inserts characters
+ * above the IME, then the IME must be informed that the composition
+ * offset has changed.
+ *
+ * @param offset the offset of the composition
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setCompositionOffset (int offset) {
+	checkWidget ();
+	if (offset < 0) return;
+	if (startOffset != -1) {
+		startOffset = offset;
+	}
+}
+
+LRESULT WM_IME_COMPOSITION (int /*long*/ wParam, int /*long*/ lParam) {
+	if (!isInlineEnabled ()) return null;
+	ranges = null;
+	styles = null;
+	caretOffset = commitCount = 0;
+	int /*long*/ hwnd = parent.handle;
+	int /*long*/ hIMC = OS.ImmGetContext (hwnd);
+	int codePage = parent.getCodePage ();
+	if (hIMC != 0) {
+		TCHAR buffer = null;
+		if ((lParam & OS.GCS_RESULTSTR) != 0) {
+			int length = OS.ImmGetCompositionString (hIMC, OS.GCS_RESULTSTR, (TCHAR)null, 0);
+			if (length > 0) {
+				buffer = new TCHAR (codePage, length / TCHAR.sizeof);
+				OS.ImmGetCompositionString (hIMC, OS.GCS_RESULTSTR, buffer, length);
+				if (startOffset == -1) {
+					Event event = new Event ();
+					event.detail = SWT.COMPOSITION_SELECTION;
+					sendEvent (SWT.ImeComposition, event);
+					startOffset = event.start;
+				}
+				Event event = new Event ();
+				event.detail = SWT.COMPOSITION_CHANGED;
+				event.start = startOffset;
+				event.end = startOffset + text.length();
+				event.text = text = buffer != null ? buffer.toString () : ""; //$NON-NLS-1$
+				commitCount = text.length ();
+				sendEvent (SWT.ImeComposition, event);
+				String chars = text;
+				text = ""; //$NON-NLS-1$
+				startOffset = -1;
+				commitCount = 0;
+				if (event.doit) {
+					Display display = this.display;
+					display.lastKey = 0;
+					display.lastVirtual = display.lastNull = display.lastDead = false;
+					length = chars.length ();
+					for (int i = 0; i < length; i++) {
+						char c = chars.charAt (i);
+						display.lastAscii = c;
+						event = new Event ();
+						event.character = c;
+						parent.sendEvent (SWT.KeyDown, event);
+					}
+				}
+			}
+			if ((lParam & OS.GCS_COMPSTR) == 0) return LRESULT.ONE;
+		}
+		buffer = null;
+		if ((lParam & OS.GCS_COMPSTR) != 0) {
+			int length = OS.ImmGetCompositionString (hIMC, OS.GCS_COMPSTR, (TCHAR)null, 0);
+			if (length > 0) {
+				buffer = new TCHAR (codePage, length / TCHAR.sizeof);
+				OS.ImmGetCompositionString (hIMC, OS.GCS_COMPSTR, buffer, length);
+				if ((lParam & OS.GCS_CURSORPOS) != 0) {
+					caretOffset = OS.ImmGetCompositionString (hIMC, OS.GCS_CURSORPOS, (TCHAR) null, 0);
+				}
+				int [] clauses = null;
+				if ((lParam & OS.GCS_COMPCLAUSE) != 0) {
+					length = OS.ImmGetCompositionString (hIMC, OS.GCS_COMPCLAUSE, (int [])null, 0);
+					if (length > 0) {
+						clauses = new int [length / 4];
+						OS.ImmGetCompositionString (hIMC, OS.GCS_COMPCLAUSE, clauses, length);
+					}
+				}
+				if ((lParam & OS.GCS_COMPATTR) != 0 && clauses != null) {
+					length = OS.ImmGetCompositionString (hIMC, OS.GCS_COMPATTR, (byte [])null, 0);
+					if (length > 0) {
+						byte [] attrs = new byte [length];
+						OS.ImmGetCompositionString (hIMC, OS.GCS_COMPATTR, attrs, length);
+						length = clauses.length - 1;
+						ranges = new int [length * 2];
+						styles = new TextStyle [length];
+						int /*long*/ layout = OS.GetKeyboardLayout (0);
+						short langID = (short)OS.LOWORD (layout);
+						TF_DISPLAYATTRIBUTE attr = null; 
+						TextStyle style = null;
+						for (int i = 0; i < length; i++) {
+							ranges [i * 2] = clauses [i];
+							ranges [i * 2 + 1] = clauses [i + 1] - 1;
+							styles [i] = style = new TextStyle ();
+							attr = getDisplayAttribute (langID, attrs [clauses [i]]);
+							if (attr != null) {
+								switch (attr.crText.type) {
+									case OS.TF_CT_COLORREF:
+										style.foreground = Color.win32_new (display, attr.crText.cr);
+										break;
+									case OS.TF_CT_SYSCOLOR:
+										int colorRef = OS.GetSysColor (attr.crText.cr);
+										style.foreground = Color.win32_new (display, colorRef);
+										break;
+								}
+								switch (attr.crBk.type) {
+									case OS.TF_CT_COLORREF:
+										style.background = Color.win32_new (display, attr.crBk.cr);
+										break;
+									case OS.TF_CT_SYSCOLOR:
+										int colorRef = OS.GetSysColor (attr.crBk.cr);
+										style.background = Color.win32_new (display, colorRef);
+										break;
+								}
+								switch (attr.crLine.type) {
+									case OS.TF_CT_COLORREF:
+										style.underlineColor = Color.win32_new (display, attr.crLine.cr);
+										break;
+									case OS.TF_CT_SYSCOLOR:
+										int colorRef = OS.GetSysColor (attr.crLine.cr);
+										style.underlineColor = Color.win32_new (display, colorRef);
+										break;
+								}
+								style.underline = attr.lsStyle != OS.TF_LS_NONE;
+								switch (attr.lsStyle) {
+									case OS.TF_LS_SQUIGGLE:
+										style.underlineStyle = SWT.UNDERLINE_SQUIGGLE;
+										break;
+									case OS.TF_LS_DASH:
+										style.underlineStyle = UNDERLINE_IME_DASH; 
+										break;
+									case OS.TF_LS_DOT:
+										style.underlineStyle = UNDERLINE_IME_DOT;
+										break;
+									case OS.TF_LS_SOLID:
+										style.underlineStyle = attr.fBoldLine ? UNDERLINE_IME_THICK : SWT.UNDERLINE_SINGLE;
+										break;
+								}
+							}
+						}
+					}
+				}
+			}
+			OS.ImmReleaseContext (hwnd, hIMC);
+		}
+		int end = startOffset + text.length();
+		if (startOffset == -1) {
+			Event event = new Event ();
+			event.detail = SWT.COMPOSITION_SELECTION;
+			sendEvent (SWT.ImeComposition, event);
+			startOffset = event.start;
+			end = event.end;
+		}
+		Event event = new Event ();
+		event.detail = SWT.COMPOSITION_CHANGED;
+		event.start = startOffset;
+		event.end = end;
+		event.text = text = buffer != null ? buffer.toString () : ""; //$NON-NLS-1$
+		sendEvent (SWT.ImeComposition, event);
+		if (text.length() == 0) {
+			startOffset = -1;
+			ranges = null;
+			styles = null;
+		}
+	}
+	return LRESULT.ONE;
+}
+
+LRESULT WM_IME_COMPOSITION_START (int /*long*/ wParam, int /*long*/ lParam) {
+	return isInlineEnabled () ? LRESULT.ONE : null;
+}
+
+LRESULT WM_IME_ENDCOMPOSITION (int /*long*/ wParam, int /*long*/ lParam) {
+	return isInlineEnabled () ? LRESULT.ONE : null;
+}
+
+LRESULT WM_KILLFOCUS (int /*long*/ wParam, int /*long*/ lParam) {
+	if (!isInlineEnabled ()) return null;
+	int /*long*/ hwnd = parent.handle;
+	int /*long*/ hIMC = OS.ImmGetContext (hwnd);
+	if (hIMC != 0) {
+		if (OS.ImmGetOpenStatus (hIMC)) {
+			OS.ImmNotifyIME (hIMC, OS.NI_COMPOSITIONSTR, OS.CPS_COMPLETE, 0);
+		}
+		OS.ImmReleaseContext (hwnd, hIMC);
+	}
+	return null;
+}
+
+LRESULT WM_LBUTTONDOWN (int /*long*/ wParam, int /*long*/ lParam) {
+	if (!isInlineEnabled ()) return null;
+	int /*long*/ hwnd = parent.handle;
+	int /*long*/ hIMC = OS.ImmGetContext (hwnd);
+	if (hIMC != 0) {
+		if (OS.ImmGetOpenStatus (hIMC)) {
+			if (OS.ImmGetCompositionString (hIMC, OS.GCS_COMPSTR, (TCHAR)null, 0) > 0) {
+				Event event = new Event ();
+				event.detail = SWT.COMPOSITION_OFFSET;
+				event.x = OS.GET_X_LPARAM (lParam); 
+				event.y = OS.GET_Y_LPARAM (lParam);
+				sendEvent (SWT.ImeComposition, event);
+				int offset = event.index;
+				int length = text.length();
+				if (offset != -1 && startOffset != -1 && startOffset <= offset && offset < startOffset + length) {
+					int /*long*/ imeWnd = OS.ImmGetDefaultIMEWnd (hwnd);
+					offset = event.index + event.count - startOffset;
+					int trailing = event.count > 0 ? 1 : 2;
+					int /*long*/ param = OS.MAKEWPARAM (OS.MAKEWORD (OS.IMEMOUSE_LDOWN, trailing), offset);
+					OS.SendMessage (imeWnd, WM_MSIME_MOUSE, param, hIMC);
+				} else {
+					OS.ImmNotifyIME (hIMC, OS.NI_COMPOSITIONSTR, OS.CPS_COMPLETE, 0);
+				}
+			}
+		}
+		OS.ImmReleaseContext (hwnd, hIMC);
+	}
+	return null;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Color.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Color.java
new file mode 100644
index 0000000..6fc68ac
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Color.java
@@ -0,0 +1,275 @@
+/*******************************************************************************
+ * 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.graphics;
+
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+
+/**
+ * Instances of this class manage the operating system resources that
+ * implement SWT's RGB color model. To create a color you can either
+ * specify the individual color components as integers in the range 
+ * 0 to 255 or provide an instance of an <code>RGB</code>. 
+ * <p>
+ * Application code must explicitly invoke the <code>Color.dispose()</code> 
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ *
+ * @see RGB
+ * @see Device#getSystemColor
+ * @see <a href="http://www.eclipse.org/swt/snippets/#color">Color and RGB snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: PaintExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+
+public final class Color extends Resource {
+	
+	/**
+	 * the handle to the OS color resource 
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public int handle;
+
+/**
+ * Prevents uninitialized instances from being created outside the package.
+ */
+Color(Device device) {
+	super(device);
+}
+
+/**	 
+ * Constructs a new instance of this class given a device and the
+ * desired red, green and blue values expressed as ints in the range
+ * 0 to 255 (where 0 is black and 255 is full brightness). On limited
+ * color devices, the color instance created by this call may not have
+ * the same RGB values as the ones specified by the arguments. The
+ * RGB values on the returned instance will be the color values of 
+ * the operating system color.
+ * <p>
+ * You must dispose the color when it is no longer required. 
+ * </p>
+ *
+ * @param device the device on which to allocate the color
+ * @param red the amount of red in the color
+ * @param green the amount of green in the color
+ * @param blue the amount of blue in the color
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the red, green or blue argument is not between 0 and 255</li>
+ * </ul>
+ *
+ * @see #dispose
+ */
+public Color (Device device, int red, int green, int blue) {
+	super(device);
+	init(red, green, blue);
+	init();
+}
+
+/**	 
+ * Constructs a new instance of this class given a device and an
+ * <code>RGB</code> describing the desired red, green and blue values.
+ * On limited color devices, the color instance created by this call
+ * may not have the same RGB values as the ones specified by the
+ * argument. The RGB values on the returned instance will be the color
+ * values of the operating system color.
+ * <p>
+ * You must dispose the color when it is no longer required. 
+ * </p>
+ *
+ * @param device the device on which to allocate the color
+ * @param rgb the RGB values of the desired color
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the rgb argument is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the red, green or blue components of the argument are not between 0 and 255</li>
+ * </ul>
+ *
+ * @see #dispose
+ */
+public Color (Device device, RGB rgb) {
+	super(device);
+	if (rgb == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	init(rgb.red, rgb.green, rgb.blue);
+	init();
+}
+
+void destroy() {
+	OS.GCHandle_Free(handle);
+	handle = 0;
+}
+
+/**
+ * Compares the argument to the receiver, and returns true
+ * if they represent the <em>same</em> object using a class
+ * specific comparison.
+ *
+ * @param object the object to compare with this object
+ * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
+ *
+ * @see #hashCode
+ */
+public boolean equals (Object object) {
+	if (object == this) return true;
+	if (!(object instanceof Color)) return false;
+	Color color = (Color) object;
+	return device == color.device && (handle & 0xFFFFFF) == (color.handle & 0xFFFFFF);
+}
+
+/**
+ * Returns the amount of blue in the color, from 0 to 255.
+ *
+ * @return the blue component of the color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getBlue () {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return OS.Color_B(handle) & 0xFF;
+}
+
+/**
+ * Returns the amount of green in the color, from 0 to 255.
+ *
+ * @return the green component of the color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getGreen () {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return OS.Color_G(handle) & 0xFF;
+}
+
+/**
+ * Returns the amount of red in the color, from 0 to 255.
+ *
+ * @return the red component of the color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getRed () {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return OS.Color_R(handle) & 0xFF;
+}
+
+/**
+ * Returns an <code>RGB</code> representing the receiver.
+ *
+ * @return the RGB for the color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public RGB getRGB () {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return new RGB(OS.Color_R(handle) & 0xFF, OS.Color_G(handle) & 0xFF, OS.Color_B(handle) & 0xFF);
+}
+
+/**
+ * Returns an integer hash code for the receiver. Any two 
+ * objects that return <code>true</code> when passed to 
+ * <code>equals</code> must return the same value for this
+ * method.
+ *
+ * @return the receiver's hash
+ *
+ * @see #equals
+ */
+public int hashCode () {
+	return handle;
+}
+
+/**
+ * Allocates the operating system resources associated 
+ * with the receiver.
+ *
+ * @param device the device on which to allocate the color
+ * @param red the amount of red in the color
+ * @param green the amount of green in the color
+ * @param blue the amount of blue in the color
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the red, green or blue argument is not between 0 and 255</li>
+ * </ul>
+ *
+ * @see #dispose
+ */
+void init(int red, int green, int blue) {
+	if (red > 255 || red < 0 || green > 255 || green < 0 || blue > 255 || blue < 0) {
+		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	handle = OS.Color_FromArgb((byte)0xFF, (byte)red, (byte)green, (byte)blue);
+	if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+}
+
+/**
+ * Returns <code>true</code> if the color has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the color.
+ * When a color has been disposed, it is an error to
+ * invoke any other method using the color.
+ *
+ * @return <code>true</code> when the color is disposed and <code>false</code> otherwise
+ */
+public boolean isDisposed() {
+	return handle == 0;
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the receiver
+ */
+public String toString () {
+	if (isDisposed()) return "Color {*DISPOSED*}"; //$NON-NLS-1$
+	return "Color {" + getRed() + ", " + getGreen() + ", " + getBlue() + "}"; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new color.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Color</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param device the device on which to allocate the color
+ * @param handle the handle for the color
+ * @return a new color object containing the specified device and handle
+ */
+public static Color wpf_new(Device device, int handle) {
+	Color color = new Color(device);
+	color.handle = handle;
+	return color;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Cursor.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Cursor.java
new file mode 100644
index 0000000..e1b617c
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Cursor.java
@@ -0,0 +1,466 @@
+/*******************************************************************************
+ * 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.graphics;
+
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.internal.win32.*;
+
+import org.eclipse.swt.*;
+
+/**
+ * Instances of this class manage operating system resources that
+ * specify the appearance of the on-screen pointer. To create a
+ * cursor you specify the device and either a simple cursor style
+ * describing one of the standard operating system provided cursors
+ * or the image and mask data for the desired appearance.
+ * <p>
+ * Application code must explicitly invoke the <code>Cursor.dispose()</code> 
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>
+ *   CURSOR_ARROW, CURSOR_WAIT, CURSOR_CROSS, CURSOR_APPSTARTING, CURSOR_HELP,
+ *   CURSOR_SIZEALL, CURSOR_SIZENESW, CURSOR_SIZENS, CURSOR_SIZENWSE, CURSOR_SIZEWE,
+ *   CURSOR_SIZEN, CURSOR_SIZES, CURSOR_SIZEE, CURSOR_SIZEW, CURSOR_SIZENE, CURSOR_SIZESE,
+ *   CURSOR_SIZESW, CURSOR_SIZENW, CURSOR_UPARROW, CURSOR_IBEAM, CURSOR_NO, CURSOR_HAND
+ * </dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the above styles may be specified.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#cursor">Cursor snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+
+public final class Cursor extends Resource {
+	
+	/**
+	 * the handle to the OS cursor resource
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public int handle;
+
+/**
+ * Prevents uninitialized instances from being created outside the package.
+ */
+Cursor(Device device) {
+	super(device);
+}
+
+/**	 
+ * Constructs a new cursor given a device and a style
+ * constant describing the desired cursor appearance.
+ * <p>
+ * You must dispose the cursor when it is no longer required. 
+ * </p>
+ *
+ * @param device the device on which to allocate the cursor
+ * @param style the style of cursor to allocate
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_INVALID_ARGUMENT - when an unknown style is specified</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES - if a handle could not be obtained for cursor creation</li>
+ * </ul>
+ *
+ * @see SWT#CURSOR_ARROW
+ * @see SWT#CURSOR_WAIT
+ * @see SWT#CURSOR_CROSS
+ * @see SWT#CURSOR_APPSTARTING
+ * @see SWT#CURSOR_HELP
+ * @see SWT#CURSOR_SIZEALL
+ * @see SWT#CURSOR_SIZENESW
+ * @see SWT#CURSOR_SIZENS
+ * @see SWT#CURSOR_SIZENWSE
+ * @see SWT#CURSOR_SIZEWE
+ * @see SWT#CURSOR_SIZEN
+ * @see SWT#CURSOR_SIZES
+ * @see SWT#CURSOR_SIZEE
+ * @see SWT#CURSOR_SIZEW
+ * @see SWT#CURSOR_SIZENE
+ * @see SWT#CURSOR_SIZESE
+ * @see SWT#CURSOR_SIZESW
+ * @see SWT#CURSOR_SIZENW
+ * @see SWT#CURSOR_UPARROW
+ * @see SWT#CURSOR_IBEAM
+ * @see SWT#CURSOR_NO
+ * @see SWT#CURSOR_HAND
+ */
+public Cursor(Device device, int style) {
+	super(device);
+	switch (style) {
+		case SWT.CURSOR_HAND: 		handle = OS.Cursors_Hand(); break;
+		case SWT.CURSOR_ARROW: 		handle = OS.Cursors_Arrow(); break;
+		case SWT.CURSOR_WAIT: 		handle = OS.Cursors_Wait(); break;
+		case SWT.CURSOR_CROSS: 		handle = OS.Cursors_Cross(); break;
+		case SWT.CURSOR_APPSTARTING: handle = OS.Cursors_AppStarting(); break;
+		case SWT.CURSOR_HELP: 		handle = OS.Cursors_Help(); break;
+		case SWT.CURSOR_SIZEALL: 	handle = OS.Cursors_SizeAll(); break;
+		case SWT.CURSOR_SIZENESW: 	handle = OS.Cursors_SizeNESW(); break;
+		case SWT.CURSOR_SIZENS: 	handle = OS.Cursors_SizeNS(); break;
+		case SWT.CURSOR_SIZENWSE: 	handle = OS.Cursors_SizeNWSE(); break;
+		case SWT.CURSOR_SIZEWE: 	handle = OS.Cursors_SizeWE(); break;
+		case SWT.CURSOR_SIZEN: 		handle = OS.Cursors_ScrollN(); break;
+		case SWT.CURSOR_SIZES: 		handle = OS.Cursors_ScrollS(); break;
+		case SWT.CURSOR_SIZEE: 		handle = OS.Cursors_ScrollE(); break;
+		case SWT.CURSOR_SIZEW: 		handle = OS.Cursors_ScrollW(); break;
+		case SWT.CURSOR_SIZENE: 	handle = OS.Cursors_ScrollNE(); break;
+		case SWT.CURSOR_SIZESE: 	handle = OS.Cursors_ScrollSE(); break;
+		case SWT.CURSOR_SIZESW: 	handle = OS.Cursors_ScrollSW(); break;
+		case SWT.CURSOR_SIZENW: 	handle = OS.Cursors_ScrollNW(); break;
+		case SWT.CURSOR_UPARROW: 	handle = OS.Cursors_UpArrow(); break;
+		case SWT.CURSOR_IBEAM: 		handle = OS.Cursors_IBeam(); break;
+		case SWT.CURSOR_NO: 		handle = OS.Cursors_No(); break;
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	init();
+}
+
+/**	 
+ * Constructs a new cursor given a device, image and mask
+ * data describing the desired cursor appearance, and the x
+ * and y coordinates of the <em>hotspot</em> (that is, the point
+ * within the area covered by the cursor which is considered
+ * to be where the on-screen pointer is "pointing").
+ * <p>
+ * The mask data is allowed to be null, but in this case the source
+ * must be an ImageData representing an icon that specifies both
+ * color data and mask data.
+ * <p>
+ * You must dispose the cursor when it is no longer required. 
+ * </p>
+ *
+ * @param device the device on which to allocate the cursor
+ * @param source the color data for the cursor
+ * @param mask the mask data for the cursor (or null)
+ * @param hotspotX the x coordinate of the cursor's hotspot
+ * @param hotspotY the y coordinate of the cursor's hotspot
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the source is null</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the mask is null and the source does not have a mask</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the source and the mask are not the same 
+ *          size, or if the hotspot is outside the bounds of the image</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES - if a handle could not be obtained for cursor creation</li>
+ * </ul>
+ */
+public Cursor(Device device, ImageData source, ImageData mask, int hotspotX, int hotspotY) {
+	super(device);
+	if (source == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (mask == null) {
+		if (source.getTransparencyType() != SWT.TRANSPARENCY_MASK) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		mask = source.getTransparencyMask();
+	}
+	/* Check the bounds. Mask must be the same size as source */
+	if (mask.width != source.width || mask.height != source.height) {
+		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	/* Check the hotspots */
+	if (hotspotX >= source.width || hotspotX < 0 ||
+		hotspotY >= source.height || hotspotY < 0) {
+		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	/* Convert depth to 1 */
+	mask = ImageData.convertMask(mask);
+	source = ImageData.convertMask(source);
+
+	/* Make sure source and mask scanline pad is 2 */
+	byte[] sourceData = ImageData.convertPad(source.data, source.width, source.height, source.depth, source.scanlinePad, 2);
+	byte[] maskData = ImageData.convertPad(mask.data, mask.width, mask.height, mask.depth, mask.scanlinePad, 2);
+	
+	/* Create the cursor */
+	int hInst = Win32.GetModuleHandleW(null);
+	int cursor = Win32.CreateCursor(hInst, hotspotX, hotspotY, source.width, source.height, sourceData, maskData);
+	if (cursor == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	int safeHandle = OS.gcnew_SWTSafeHandle(cursor, false);
+	if (safeHandle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	handle = OS.CursorInteropHelper_Create(safeHandle);
+	if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	OS.GCHandle_Free(safeHandle);
+	init();
+}
+
+/**	 
+ * Constructs a new cursor given a device, image data describing
+ * the desired cursor appearance, and the x and y coordinates of
+ * the <em>hotspot</em> (that is, the point within the area
+ * covered by the cursor which is considered to be where the
+ * on-screen pointer is "pointing").
+ * <p>
+ * You must dispose the cursor when it is no longer required. 
+ * </p>
+ *
+ * @param device the device on which to allocate the cursor
+ * @param source the image data for the cursor
+ * @param hotspotX the x coordinate of the cursor's hotspot
+ * @param hotspotY the y coordinate of the cursor's hotspot
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the image is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the hotspot is outside the bounds of the
+ * 		 image</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES - if a handle could not be obtained for cursor creation</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public Cursor(Device device, ImageData source, int hotspotX, int hotspotY) {
+	super(device);
+	if (source == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	/* Check the hotspots */
+	if (hotspotX >= source.width || hotspotX < 0 ||
+		hotspotY >= source.height || hotspotY < 0) {
+		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	PaletteData palette = source.palette;
+	if (!(((source.depth == 1 || source.depth == 2 || source.depth == 4 || source.depth == 8) && !palette.isDirect) ||
+		((source.depth == 8) || (source.depth == 16 || source.depth == 24 || source.depth == 32) && palette.isDirect)))
+			SWT.error (SWT.ERROR_UNSUPPORTED_DEPTH);
+	int width = source.width;
+	int height = source.height;
+	int redMask = palette.redMask;
+	int greenMask = palette.greenMask;
+	int blueMask = palette.blueMask;
+	ImageData newData = null;
+	int pixelFormat = 0;
+	boolean transparent = source.maskData != null || source.transparentPixel != -1 || source.alpha != -1 || source.alphaData != null;
+	if (transparent) {
+		pixelFormat = Win32.PixelFormat_Format32bppArgb;
+		if (!(palette.isDirect && source.depth == 32 && redMask == 0xFF00 && greenMask == 0xFF0000 && blueMask == 0xFF000000)) {
+			newData = new ImageData(width, height, 32, new PaletteData(0xFF00, 0xFF0000, 0xFF000000));
+		}
+	} else {
+		switch (source.depth) {
+			case 1:
+			case 2:
+			case 4:
+			case 8:
+				pixelFormat = Win32.PixelFormat_Format24bppRgb;
+				newData = new ImageData(source.width, source.height, 24, new PaletteData(0xFF, 0xFF00, 0xFF0000));
+				break;
+			case 16:
+				if (redMask == 0x7C00 && greenMask == 0x3E0 && blueMask == 0x1F) {
+					pixelFormat = Win32.PixelFormat_Format16bppRgb555;
+				} else if (redMask == 0xF800 && greenMask == 0x7E0 && blueMask == 0x1F) {
+					pixelFormat = Win32.PixelFormat_Format16bppRgb565;
+				} else {
+					pixelFormat = Win32.PixelFormat_Format16bppRgb555;
+					newData = new ImageData(source.width, source.height, 16, new PaletteData(0x7C00, 0x3E0, 0x1F));
+				}
+				break;
+			case 24:
+				if (redMask == 0xFF && greenMask == 0xFF00 && blueMask == 0xFF0000) {
+					pixelFormat = Win32.PixelFormat_Format24bppRgb;
+				} else {
+					pixelFormat = Win32.PixelFormat_Format24bppRgb;
+					newData = new ImageData(source.width, source.height, 24, new PaletteData(0xFF, 0xFF00, 0xFF0000));
+				}
+				break;
+			case 32:
+				if (redMask == 0xFF00 && greenMask == 0xFF0000 && blueMask == 0xFF000000) {
+					pixelFormat = Win32.PixelFormat_Format32bppRgb;
+				} else {
+					pixelFormat = Win32.PixelFormat_Format32bppRgb;
+					newData = new ImageData(source.width, source.height, 32, new PaletteData(0xFF00, 0xFF0000, 0xFF000000));
+				}
+				break;
+		}
+	}
+	if (newData != null) {
+		PaletteData newPalette = newData.palette;
+		if (palette.isDirect) {
+			ImageData.blit(ImageData.BLIT_SRC, 
+					source.data, source.depth, source.bytesPerLine, source.getByteOrder(), 0, 0, width, height, redMask, greenMask, blueMask,
+					ImageData.ALPHA_OPAQUE, null, 0, 0, 0,
+					newData.data, newData.depth, newData.bytesPerLine, newData.getByteOrder(), 0, 0, width, height, newPalette.redMask, newPalette.greenMask, newPalette.blueMask,
+					false, false);
+		} else {
+			RGB[] rgbs = palette.getRGBs();
+			int length = rgbs.length;
+			byte[] srcReds = new byte[length];
+			byte[] srcGreens = new byte[length];
+			byte[] srcBlues = new byte[length];
+			for (int i = 0; i < rgbs.length; i++) {
+				RGB rgb = rgbs[i];
+				if (rgb == null) continue;
+				srcReds[i] = (byte)rgb.red;
+				srcGreens[i] = (byte)rgb.green;
+				srcBlues[i] = (byte)rgb.blue;
+			}
+			ImageData.blit(ImageData.BLIT_SRC,
+				source.data, source.depth, source.bytesPerLine, source.getByteOrder(), 0, 0, width, height, srcReds, srcGreens, srcBlues,
+				ImageData.ALPHA_OPAQUE, null, 0, 0, 0,
+				newData.data, newData.depth, newData.bytesPerLine, newData.getByteOrder(), 0, 0, width, height, newPalette.redMask, newPalette.greenMask, newPalette.blueMask,
+				false, false);
+		}
+		if (source.transparentPixel != -1) {
+			newData.transparentPixel = newPalette.getPixel(palette.getRGB(source.transparentPixel));
+		}
+		newData.maskPad = source.maskPad;
+		newData.maskData = source.maskData;
+		newData.alpha = source.alpha;
+		newData.alphaData = source.alphaData;
+		source = newData;
+		palette = source.palette;
+	}
+	if (transparent) {
+		if (source.maskData != null || source.transparentPixel != -1) {
+			ImageData maskImage = source.getTransparencyMask();
+			byte[] maskData = maskImage.data;
+			int maskBpl = maskImage.bytesPerLine;
+			int offset = 3, maskOffset = 0;
+			for (int y = 0; y<height; y++) {
+				for (int x = 0; x<width; x++) {
+					source.data[offset] = ((maskData[maskOffset + (x >> 3)]) & (1 << (7 - (x & 0x7)))) != 0 ? (byte)0xff : 0;
+					offset += 4;
+				}
+				maskOffset += maskBpl;
+			}
+		} else if (source.alpha != -1) {
+			byte alpha = (byte)source.alpha;
+			for (int i = 3, j = 0; i < source.data.length; i+=4, j++) {
+				source.data[i] = alpha;
+			}
+		} else {
+			for (int i = 3, j = 0; i < source.data.length; i+=4, j++) {
+				source.data[i] = source.alphaData[j];
+			}
+		}
+	}
+	int bitmap = OS.gcnew_Bitmap(source.width, source.height, source.bytesPerLine, pixelFormat, source.data);
+	if (bitmap == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	int hIcon = OS.Bitmap_GetHicon(bitmap);
+	if (hIcon == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	ICONINFO info = new ICONINFO(); 
+	Win32.GetIconInfo(hIcon, info);
+	info.fIcon = false;
+	info.xHotspot = hotspotX;
+	info.yHotspot = hotspotY;
+	Win32.DestroyIcon(hIcon);
+	hIcon = Win32.CreateIconIndirect(info);
+	if (info.hbmColor != 0) Win32.DeleteObject(info.hbmColor);
+	if (info.hbmMask != 0)Win32.DeleteObject(info.hbmMask);
+	if (hIcon == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	
+	/* Create the cursor */
+	int safeHandle = OS.gcnew_SWTSafeHandle(hIcon, true);
+	if (safeHandle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	handle = OS.CursorInteropHelper_Create(safeHandle);
+	if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	OS.GCHandle_Free(safeHandle);
+	OS.GCHandle_Free(bitmap);
+	init();
+}
+
+void destroy() {
+	OS.GCHandle_Free(handle);
+	handle = 0;
+}
+
+/**
+ * Compares the argument to the receiver, and returns true
+ * if they represent the <em>same</em> object using a class
+ * specific comparison.
+ *
+ * @param object the object to compare with this object
+ * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
+ *
+ * @see #hashCode
+ */
+public boolean equals (Object object) {
+	if (object == this) return true;
+	if (!(object instanceof Cursor)) return false;
+	Cursor cursor = (Cursor) object;
+	return device == cursor.device && handle == cursor.handle;
+}
+
+/**
+ * Returns an integer hash code for the receiver. Any two 
+ * objects that return <code>true</code> when passed to 
+ * <code>equals</code> must return the same value for this
+ * method.
+ *
+ * @return the receiver's hash
+ *
+ * @see #equals
+ */
+public int hashCode () {
+	return handle;
+}
+
+/**
+ * Returns <code>true</code> if the cursor has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the cursor.
+ * When a cursor has been disposed, it is an error to
+ * invoke any other method using the cursor.
+ *
+ * @return <code>true</code> when the cursor is disposed and <code>false</code> otherwise
+ */
+public boolean isDisposed() {
+	return handle == 0;
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the receiver
+ */
+public String toString () {
+	if (isDisposed()) return "Cursor {*DISPOSED*}";
+	return "Cursor {" + handle + "}";
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new cursor.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Cursor</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param device the device on which to allocate the color
+ * @param handle the handle for the cursor
+ * @return a new cursor object containing the specified device and handle
+ */
+public static Cursor wpf_new(Device device, int handle) {
+	Cursor cursor = new Cursor(device);
+	cursor.handle = handle;
+	return cursor;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Device.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Device.java
new file mode 100644
index 0000000..fd43333
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Device.java
@@ -0,0 +1,650 @@
+/*******************************************************************************
+ * 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.graphics;
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+
+/**
+ * This class is the abstract superclass of all device objects,
+ * such as the Display device and the Printer device. Devices
+ * can have a graphics context (GC) created for them, and they
+ * can be drawn on by sending messages to the associated GC.
+ *
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public abstract class Device implements Drawable {
+	
+	/* Debugging */
+	public static boolean DEBUG;
+	public static boolean TRACK;
+	boolean debug = DEBUG;
+	boolean tracking = DEBUG || TRACK;
+	Error [] errors;
+	Object [] objects;
+	Object trackingLock;
+	
+	Color[] colors;
+	
+	/* System Font */
+	Font systemFont;
+
+	boolean disposed;
+
+	/*
+	* TEMPORARY CODE. When a graphics object is
+	* created and the device parameter is null,
+	* the current Display is used. This presents
+	* a problem because SWT graphics does not
+	* reference classes in SWT widgets. The correct
+	* fix is to remove this feature. Unfortunately,
+	* too many application programs rely on this
+	* feature.
+	*/
+	protected static Device CurrentDevice;
+	protected static Runnable DeviceFinder;
+	static {
+		try {
+			Class.forName ("org.eclipse.swt.widgets.Display"); //$NON-NLS-1$
+		} catch (ClassNotFoundException e) {}
+	}	
+
+/*
+* TEMPORARY CODE.
+*/
+static synchronized Device getDevice () {
+	if (DeviceFinder != null) DeviceFinder.run();
+	Device device = CurrentDevice;	
+	CurrentDevice = null;
+	return device;
+}
+
+/**
+ * Constructs a new instance of this class.
+ * <p>
+ * You must dispose the device when it is no longer required. 
+ * </p>
+ *
+ * @see #create
+ * @see #init
+ * 
+ * @since 3.1
+ */
+public Device() {
+	this(null);
+}
+
+/**
+ * Constructs a new instance of this class.
+ * <p>
+ * You must dispose the device when it is no longer required. 
+ * </p>
+ *
+ * @param data the DeviceData which describes the receiver
+ *
+ * @see #create
+ * @see #init
+ * @see DeviceData
+ */
+public Device(DeviceData data) {
+	synchronized (Device.class) {
+		if (data != null) {
+			debug = data.debug;
+			tracking = data.tracking;
+		}
+		if (tracking) {
+			errors = new Error [128];
+			objects = new Object [128];
+			trackingLock = new Object ();
+		}
+		create (data);
+		init ();
+	}
+}
+
+/**
+ * Throws an <code>SWTException</code> if the receiver can not
+ * be accessed by the caller. This may include both checks on
+ * the state of the receiver and more generally on the entire
+ * execution context. This method <em>should</em> be called by
+ * device implementors to enforce the standard SWT invariants.
+ * <p>
+ * Currently, it is an error to invoke any method (other than
+ * <code>isDisposed()</code> and <code>dispose()</code>) on a
+ * device that has had its <code>dispose()</code> method called.
+ * </p><p>
+ * In future releases of SWT, there may be more or fewer error
+ * checks and exceptions may be thrown for different reasons.
+ * <p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+protected void checkDevice () {
+	if (disposed) SWT.error(SWT.ERROR_DEVICE_DISPOSED);
+}
+
+/**
+ * Creates the device in the operating system.  If the device
+ * does not have a handle, this method may do nothing depending
+ * on the device.
+ * <p>
+ * This method is called before <code>init</code>.
+ * </p><p>
+ * Subclasses are supposed to reimplement this method and not
+ * call the <code>super</code> implementation.
+ * </p>
+ *
+ * @param data the DeviceData which describes the receiver
+ *
+ * @see #init
+ */
+protected void create (DeviceData data) {
+}
+
+/**
+ * Destroys the device in the operating system and releases
+ * the device's handle.  If the device does not have a handle,
+ * this method may do nothing depending on the device.
+ * <p>
+ * This method is called after <code>release</code>.
+ * </p><p>
+ * Subclasses are supposed to reimplement this method and not
+ * call the <code>super</code> implementation.
+ * </p>
+ *
+ * @see #dispose
+ * @see #release
+ */
+protected void destroy () {
+}
+
+/**
+ * Disposes of the operating system resources associated with
+ * the receiver. After this method has been invoked, the receiver
+ * will answer <code>true</code> when sent the message
+ * <code>isDisposed()</code>.
+ *
+ * @see #release
+ * @see #destroy
+ * @see #checkDevice
+ */
+public void dispose () {
+	synchronized (Device.class) {
+		if (isDisposed()) return;
+		checkDevice ();
+		release ();
+		destroy ();
+		disposed = true;
+		if (tracking) {
+			synchronized (trackingLock) {
+				objects = null;
+				errors = null;
+				trackingLock = null;
+			}
+		}
+	}
+}
+
+void dispose_Object (Object object) {
+	synchronized (trackingLock) {
+		for (int i=0; i<objects.length; i++) {
+			if (objects [i] == object) {
+				objects [i] = null;
+				errors [i] = null;
+				return;
+			}
+		}
+	}
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location.
+ *
+ * @return the bounding rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Rectangle getBounds () {
+	checkDevice ();
+	int width = (int) OS.SystemParameters_PrimaryScreenWidth();
+	int height = (int) OS.SystemParameters_PrimaryScreenHeight();
+	return new Rectangle (0, 0, width, height);
+}
+
+/**
+ * Returns a <code>DeviceData</code> based on the receiver.
+ * Modifications made to this <code>DeviceData</code> will not
+ * affect the receiver.
+ *
+ * @return a <code>DeviceData</code> containing the device's data and attributes
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see DeviceData
+ */
+public DeviceData getDeviceData () {
+	checkDevice();
+	DeviceData data = new DeviceData ();
+	data.debug = debug;
+	data.tracking = tracking;
+	if (tracking) {
+		synchronized (trackingLock) {
+			int count = 0, length = objects.length;
+			for (int i=0; i<length; i++) {
+				if (objects [i] != null) count++;
+			}
+			int index = 0;
+			data.objects = new Object [count];
+			data.errors = new Error [count];
+			for (int i=0; i<length; i++) {
+				if (objects [i] != null) {
+					data.objects [index] = objects [i];
+					data.errors [index] = errors [i];
+					index++;
+				}
+			}
+		}
+	} else {
+		data.objects = new Object [0];
+		data.errors = new Error [0];
+	}
+	return data;
+}
+
+/**
+ * Returns a rectangle which describes the area of the
+ * receiver which is capable of displaying data.
+ * 
+ * @return the client area
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #getBounds
+ */
+public Rectangle getClientArea () {
+	return getBounds ();
+}
+
+/**
+ * Returns the bit depth of the screen, which is the number of
+ * bits it takes to represent the number of unique colors that
+ * the screen is currently capable of displaying. This number 
+ * will typically be one of 1, 8, 15, 16, 24 or 32.
+ *
+ * @return the depth of the screen
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getDepth () {
+	checkDevice ();
+	//TODO - implement getDepth
+	return 32;
+}
+
+/**
+ * Returns a point whose x coordinate is the horizontal
+ * dots per inch of the display, and whose y coordinate
+ * is the vertical dots per inch of the display.
+ *
+ * @return the horizontal and vertical DPI
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Point getDPI () {
+	checkDevice ();
+	//TODO implement getDPI
+	return new Point(96, 96);
+}
+
+/**
+ * Returns <code>FontData</code> objects which describe
+ * the fonts that match the given arguments. If the
+ * <code>faceName</code> is null, all fonts will be returned.
+ *
+ * @param faceName the name of the font to look for, or null
+ * @param scalable if true only scalable fonts are returned, otherwise only non-scalable fonts are returned.
+ * @return the matching font data
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public FontData [] getFontList (String faceName, boolean scalable) {
+	checkDevice ();
+	if (!scalable) return new FontData[0];
+	int typefaces;
+	if (faceName != null) {
+		int length = faceName.length();
+		char[] chars = new char[length + 1];
+		faceName.getChars(0, length, chars, 0);
+		int str = OS.gcnew_String(chars);
+		int fontFamily = OS.gcnew_FontFamily(str);
+		typefaces = OS.FontFamily_GetTypefaces(fontFamily);
+		OS.GCHandle_Free(fontFamily);
+		OS.GCHandle_Free(str);
+	} else {
+		typefaces = OS.Fonts_SystemTypefaces();
+	}
+	int count = OS.TypefaceCollection_Count(typefaces);
+	int index = 0;
+	FontData[] result = new FontData[count];
+	int enumerator = OS.TypefaceCollection_GetEnumerator(typefaces);
+	while (OS.IEnumerator_MoveNext(enumerator)) {
+		int typeface = OS.TypefaceCollection_Current(enumerator);
+		int fontFamily = OS.Typeface_FontFamily(typeface);
+		int style = OS.Typeface_Style(typeface);
+		int weight = OS.Typeface_Weight(typeface);
+		int stretch = OS.Typeface_Stretch(typeface);
+		int str = OS.FontFamily_Source(fontFamily);
+		int charArray = OS.String_ToCharArray(str);
+		char[] chars = new char[OS.String_Length(str)];
+		OS.memcpy(chars, charArray, chars.length * 2);
+		int fontStyle = OS.FontStyles_Normal;
+		if (OS.Object_Equals(style, OS.FontStyles_Italic)) fontStyle = OS.FontStyles_Italic;
+		if (OS.Object_Equals(style, OS.FontStyles_Oblique)) fontStyle = OS.FontStyles_Oblique;
+		FontData data = FontData.wpf_new(new String(chars), fontStyle,
+				OS.FontWeight_ToOpenTypeWeight(weight), OS.FontStretch_ToOpenTypeStretch(stretch), 0);
+		OS.GCHandle_Free(charArray);
+		OS.GCHandle_Free(str);
+		OS.GCHandle_Free(fontFamily);
+		OS.GCHandle_Free(style);
+		OS.GCHandle_Free(weight);
+		OS.GCHandle_Free(stretch);
+		OS.GCHandle_Free(typeface);
+		result[index++] = data;
+	}
+	OS.GCHandle_Free(enumerator);
+	OS.GCHandle_Free(typefaces);
+	return result;
+}
+
+/**
+ * Returns the matching standard color for the given
+ * constant, which should be one of the color constants
+ * specified in class <code>SWT</code>. Any value other
+ * than one of the SWT color constants which is passed
+ * in will result in the color black. This color should
+ * not be freed because it was allocated by the system,
+ * not the application.
+ *
+ * @param id the color constant
+ * @return the matching color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see SWT
+ */
+public Color getSystemColor (int id) {
+	checkDevice ();
+	if (0 <= id && id < colors.length) {
+		return colors[id];
+	}
+	return colors[0];
+}
+
+/**
+ * Returns a reasonable font for applications to use.
+ * On some platforms, this will match the "default font"
+ * or "system font" if such can be found.  This font
+ * should not be freed because it was allocated by the
+ * system, not the application.
+ * <p>
+ * Typically, applications which want the default look
+ * should simply not set the font on the widgets they
+ * create. Widgets are always created with the correct
+ * default font for the class of user-interface component
+ * they represent.
+ * </p>
+ *
+ * @return a font
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Font getSystemFont () {
+	checkDevice ();	
+	return systemFont;
+}
+
+/**
+ * Returns <code>true</code> if the underlying window system prints out
+ * warning messages on the console, and <code>setWarnings</code>
+ * had previously been called with <code>true</code>.
+ *
+ * @return <code>true</code>if warnings are being handled, and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public boolean getWarnings () {
+	checkDevice ();
+	return false;
+}
+
+/**
+ * Initializes any internal resources needed by the
+ * device.
+ * <p>
+ * This method is called after <code>create</code>.
+ * </p><p>
+ * If subclasses reimplement this method, they must
+ * call the <code>super</code> implementation.
+ * </p>
+ * 
+ * @see #create
+ */
+protected void init () {
+	/* Create the standard colors */
+	colors = new Color[SWT.COLOR_DARK_GRAY + 1];
+	colors[SWT.COLOR_BLACK] = colors[0] = Color.wpf_new(this, OS.Colors_Black());
+	colors[SWT.COLOR_DARK_RED] = Color.wpf_new(this, OS.Colors_Maroon ());
+	colors[SWT.COLOR_DARK_GREEN] = Color.wpf_new(this, OS.Colors_Green ());
+	colors[SWT.COLOR_DARK_YELLOW] = Color.wpf_new(this, OS.Colors_Olive());
+	colors[SWT.COLOR_DARK_BLUE] = Color.wpf_new(this, OS.Colors_Navy ());
+	colors[SWT.COLOR_DARK_MAGENTA] = Color.wpf_new(this, OS.Colors_Purple());
+	colors[SWT.COLOR_DARK_CYAN] = Color.wpf_new(this, OS.Colors_Teal ());
+	colors[SWT.COLOR_GRAY] = Color.wpf_new(this, OS.Colors_Silver ());
+	colors[SWT.COLOR_DARK_GRAY] = Color.wpf_new(this, OS.Colors_Silver ());
+	colors[SWT.COLOR_RED] = Color.wpf_new(this, OS.Colors_Red ());
+	colors[SWT.COLOR_GREEN] = Color.wpf_new(this, OS.Colors_Lime ());
+	colors[SWT.COLOR_YELLOW] = Color.wpf_new(this, OS.Colors_Yellow ());
+	colors[SWT.COLOR_BLUE] = Color.wpf_new(this, OS.Colors_Blue ());
+	colors[SWT.COLOR_MAGENTA] = Color.wpf_new(this, OS.Colors_Magenta ());
+	colors[SWT.COLOR_CYAN] = Color.wpf_new(this, OS.Colors_Cyan ());
+	colors[SWT.COLOR_WHITE] = Color.wpf_new(this, OS.Colors_White ());
+
+	/* Initialize the system font slot */
+	int fontFamily = OS.SystemFonts_MessageFontFamily();
+	int style = OS.SystemFonts_MessageFontStyle();
+	int weight = OS.SystemFonts_MessageFontWeight();
+	double size = OS.SystemFonts_MessageFontSize();
+	int typeface = OS.gcnew_Typeface(fontFamily, style, weight, OS.FontStretches_Normal);
+	OS.GCHandle_Free(fontFamily);
+	OS.GCHandle_Free(style);
+	OS.GCHandle_Free(weight);
+	systemFont = Font.wpf_new(this, typeface, size);
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new GC handle.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Device</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param data the platform specific GC data 
+ * @return the platform specific GC handle
+ */
+public abstract int internal_new_GC (GCData data);
+
+/**	 
+ * Invokes platform specific functionality to dispose a GC handle.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Device</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param hDC the platform specific GC handle
+ * @param data the platform specific GC data 
+ */
+public abstract void internal_dispose_GC (int hDC, GCData data);
+
+/**
+ * Returns <code>true</code> if the device has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the device.
+ * When a device has been disposed, it is an error to
+ * invoke any other method using the device.
+ *
+ * @return <code>true</code> when the device is disposed and <code>false</code> otherwise
+ */
+public boolean isDisposed () {
+	synchronized (Device.class) {
+		return disposed;
+	}
+}
+
+/**
+ * Loads the font specified by a file.  The font will be
+ * present in the list of fonts available to the application.
+ *
+ * @param path the font file path
+ * @return whether the font was successfully loaded
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if path is null</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see Font
+ * 
+ * @since 3.3
+ */
+public boolean loadFont (String path) {
+	checkDevice();
+	if (path == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	int length = path.length ();
+	char[] buffer = new char [length + 1];
+	path.getChars (0, length, buffer, 0);
+	int str = OS.gcnew_String(buffer);
+	int uri = OS.gcnew_Uri(str, OS.UriKind_RelativeOrAbsolute);
+	int list = OS.Fonts_GetTypefaces(uri);
+	int count = OS.TypefaceCollection_Count(list);
+	OS.GCHandle_Free(list);
+	OS.GCHandle_Free(uri);
+	OS.GCHandle_Free(str);
+	return count != 0;
+}
+
+void new_Object (Object object) {
+	synchronized (trackingLock) {
+		for (int i=0; i<objects.length; i++) {
+			if (objects [i] == null) {
+				objects [i] = object;
+				errors [i] = new Error ();
+				return;
+			}
+		}
+		Object [] newObjects = new Object [objects.length + 128];
+		System.arraycopy (objects, 0, newObjects, 0, objects.length);
+		newObjects [objects.length] = object;
+		objects = newObjects;
+		Error [] newErrors = new Error [errors.length + 128];
+		System.arraycopy (errors, 0, newErrors, 0, errors.length);
+		newErrors [errors.length] = new Error ();
+		errors = newErrors;
+	}
+}
+
+/**
+ * Releases any internal resources back to the operating
+ * system and clears all fields except the device handle.
+ * <p>
+ * When a device is destroyed, resources that were acquired
+ * on behalf of the programmer need to be returned to the
+ * operating system.  For example, if the device allocated a
+ * font to be used as the system font, this font would be
+ * freed in <code>release</code>.  Also,to assist the garbage
+ * collector and minimize the amount of memory that is not
+ * reclaimed when the programmer keeps a reference to a
+ * disposed device, all fields except the handle are zero'd.
+ * The handle is needed by <code>destroy</code>.
+ * </p>
+ * This method is called before <code>destroy</code>.
+ * </p><p>
+ * If subclasses reimplement this method, they must
+ * call the <code>super</code> implementation.
+ * </p>
+ *
+ * @see #dispose
+ * @see #destroy
+ */
+protected void release () {
+	for (int i = 0; i < colors.length; i++) {
+		if (colors[i] != null) colors[i].dispose();
+	}
+	colors = null;
+	if (systemFont != null) systemFont.dispose();
+	systemFont = null;
+	if (tracking) {
+		synchronized (trackingLock) {
+			if (TRACK & objects != null) {
+				for (int i = 0; i < objects.length; i++) {
+					if (objects[i] != null) {
+						System.err.println(objects[i]);
+						errors[i].printStackTrace();
+					}
+				}
+			}
+		}
+	}
+}
+
+/**
+ * If the underlying window system supports printing warning messages
+ * to the console, setting warnings to <code>false</code> prevents these
+ * messages from being printed. If the argument is <code>true</code> then
+ * message printing is not blocked.
+ *
+ * @param warnings <code>true</code>if warnings should be printed, and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setWarnings (boolean warnings) {
+	checkDevice ();
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/DeviceData.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/DeviceData.java
new file mode 100644
index 0000000..ad0c2b2
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/DeviceData.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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.graphics;
+
+
+public class DeviceData {
+	/*
+	* Debug fields - may not be honoured
+	* on some SWT platforms.
+	*/
+	public boolean debug;
+	public boolean tracking;
+	public Error [] errors;
+	public Object [] objects;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Font.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Font.java
new file mode 100644
index 0000000..7ade47e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Font.java
@@ -0,0 +1,291 @@
+/*******************************************************************************
+ * 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.graphics;
+
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+
+/**
+ * Instances of this class manage operating system resources that
+ * define how text looks when it is displayed. Fonts may be constructed
+ * by providing a device and either name, size and style information
+ * or a <code>FontData</code> object which encapsulates this data.
+ * <p>
+ * Application code must explicitly invoke the <code>Font.dispose()</code> 
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ *
+ * @see FontData
+ * @see <a href="http://www.eclipse.org/swt/snippets/#font">Font snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Examples: GraphicsExample, PaintExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+
+public final class Font extends Resource {
+	
+	/**
+	 * the handle to the OS font resource
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public int handle;
+	
+	/**
+	 * the handle to the OS font resource
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public double size;
+	
+/**
+ * Prevents uninitialized instances from being created outside the package.
+ */
+Font(Device device) {
+	super(device);
+}
+
+/**	 
+ * Constructs a new font given a device and font data
+ * which describes the desired font's appearance.
+ * <p>
+ * You must dispose the font when it is no longer required. 
+ * </p>
+ *
+ * @param device the device to create the font on
+ * @param fd the FontData that describes the desired font (must not be null)
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the fd argument is null</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES - if a font could not be created from the given font data</li>
+ * </ul>
+ */
+public Font(Device device, FontData fd) {
+	super(device);
+	init(fd);
+	init();
+}
+
+/**	 
+ * Constructs a new font given a device and an array
+ * of font data which describes the desired font's
+ * appearance.
+ * <p>
+ * You must dispose the font when it is no longer required. 
+ * </p>
+ *
+ * @param device the device to create the font on
+ * @param fds the array of FontData that describes the desired font (must not be null)
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the fds argument is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the length of fds is zero</li>
+ *    <li>ERROR_NULL_ARGUMENT - if any fd in the array is null</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES - if a font could not be created from the given font data</li>
+ * </ul>
+ * 
+ * @since 2.1
+ */
+public Font(Device device, FontData[] fds) {
+	super(device);
+	if (fds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (fds.length == 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	for (int i=0; i<fds.length; i++) {
+		if (fds[i] == null) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	init(fds[0]);
+	init();
+}
+
+/**	 
+ * Constructs a new font given a device, a font name,
+ * the height of the desired font in points, and a font
+ * style.
+ * <p>
+ * You must dispose the font when it is no longer required. 
+ * </p>
+ *
+ * @param device the device to create the font on
+ * @param name the name of the font (must not be null)
+ * @param height the font height in points
+ * @param style a bit or combination of NORMAL, BOLD, ITALIC
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the name argument is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the height is negative</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES - if a font could not be created from the given arguments</li>
+ * </ul>
+ */
+public Font(Device device, String name, int height, int style) {
+	super(device);
+	if (name == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	init(new FontData (name, height, style));
+	init();
+}
+
+void destroy() {
+	OS.GCHandle_Free(handle);
+	handle = 0;
+}
+
+/**
+ * Compares the argument to the receiver, and returns true
+ * if they represent the <em>same</em> object using a class
+ * specific comparison.
+ *
+ * @param object the object to compare with this object
+ * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
+ *
+ * @see #hashCode
+ */
+public boolean equals(Object object) {
+	if (object == this) return true;
+	if (!(object instanceof Font)) return false;
+	Font font = (Font) object;
+	return device == font.device && handle == font.handle && size == font.size;
+}
+
+/**
+ * Returns an array of <code>FontData</code>s representing the receiver.
+ * On Windows, only one FontData will be returned per font. On X however, 
+ * a <code>Font</code> object <em>may</em> be composed of multiple X 
+ * fonts. To support this case, we return an array of font data objects.
+ *
+ * @return an array of font data objects describing the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public FontData[] getFontData() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	int fontFamily = OS.Typeface_FontFamily(handle);
+	int style = OS.Typeface_Style(handle);
+	int weight = OS.Typeface_Weight(handle);
+	int stretch = OS.Typeface_Stretch(handle);
+	int str = OS.FontFamily_Source(fontFamily);
+	int charArray = OS.String_ToCharArray(str);
+	char[] chars = new char[OS.String_Length(str)];
+	OS.memcpy(chars, charArray, chars.length * 2);
+	int fontStyle = OS.FontStyles_Normal;
+	if (OS.Object_Equals(style, OS.FontStyles_Italic)) fontStyle = OS.FontStyles_Italic;
+	if (OS.Object_Equals(style, OS.FontStyles_Oblique)) fontStyle = OS.FontStyles_Oblique;
+	int size = (int) (this.size * 72 / 96f);
+	FontData data = FontData.wpf_new(new String(chars), fontStyle, OS.FontWeight_ToOpenTypeWeight(weight), OS.FontStretch_ToOpenTypeStretch(stretch), (int)size);
+	OS.GCHandle_Free(charArray);
+	OS.GCHandle_Free(str);
+	OS.GCHandle_Free(fontFamily);
+	OS.GCHandle_Free(style);
+	OS.GCHandle_Free(weight);
+	OS.GCHandle_Free(stretch);
+	return new FontData[] {data};
+}
+
+/**
+ * Returns an integer hash code for the receiver. Any two 
+ * objects that return <code>true</code> when passed to 
+ * <code>equals</code> must return the same value for this
+ * method.
+ *
+ * @return the receiver's hash
+ *
+ * @see #equals
+ */
+public int hashCode () {
+	return handle;
+}
+
+void init (FontData fd) {
+	if (fd == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	int length = fd.fontFamily.length();
+	char[] chars = new char[length + 1];
+	fd.fontFamily.getChars(0, length, chars, 0);
+	int str = OS.gcnew_String(chars);
+	int fontFamily = OS.gcnew_FontFamily(str);
+	int style = fd.style;
+	int weight = OS.FontWeight_FromOpenTypeWeight(fd.weight);
+	int stretch = OS.FontStretch_FromOpenTypeStretch(fd.stretch);
+	handle = OS.gcnew_Typeface(fontFamily, style, weight, stretch);
+	OS.GCHandle_Free(fontFamily);
+	OS.GCHandle_Free(str);
+	OS.GCHandle_Free(weight);
+	OS.GCHandle_Free(stretch);
+	size = fd.height * 96 / 72f;
+	if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+}
+
+/**
+ * Returns <code>true</code> if the font has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the font.
+ * When a font has been disposed, it is an error to
+ * invoke any other method using the font.
+ *
+ * @return <code>true</code> when the font is disposed and <code>false</code> otherwise
+ */
+public boolean isDisposed() {
+	return handle == 0;
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the receiver
+ */
+public String toString () {
+	if (isDisposed()) return "Font {*DISPOSED*}";
+	return "Font {" + handle + "}";
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new font.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Font</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param device the device on which to allocate the color
+ * @param handle the handle for the font
+ * @return a new font object containing the specified device and handle
+ */
+public static Font wpf_new(Device device, int handle, double size) {
+	Font font = new Font(device);
+	font.handle = handle;
+	font.size = size;
+	return font;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/FontData.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/FontData.java
new file mode 100644
index 0000000..42211bc
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/FontData.java
@@ -0,0 +1,540 @@
+/*******************************************************************************
+ * 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.graphics;
+
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+
+/**
+ * Instances of this class describe operating system fonts.
+ * <p>
+ * For platform-independent behaviour, use the get and set methods
+ * corresponding to the following properties:
+ * <dl>
+ * <dt>height</dt><dd>the height of the font in points</dd>
+ * <dt>name</dt><dd>the face name of the font, which may include the foundry</dd>
+ * <dt>style</dt><dd>A bitwise combination of NORMAL, ITALIC and BOLD</dd>
+ * </dl>
+ * If extra, platform-dependent functionality is required:
+ * <ul>
+ * <li>On <em>Windows</em>, the data member of the <code>FontData</code>
+ * corresponds to a Windows <code>LOGFONT</code> structure whose fields
+ * may be retrieved and modified.</li>
+ * <li>On <em>X</em>, the fields of the <code>FontData</code> correspond
+ * to the entries in the font's XLFD name and may be retrieved and modified.
+ * </ul>
+ * Application code does <em>not</em> need to explicitly release the
+ * resources managed by each instance when those instances are no longer
+ * required, and thus no <code>dispose()</code> method is provided.
+ *
+ * @see Font
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+
+public final class FontData {
+	
+	/**
+	 * A WPF font
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public String fontFamily;
+	
+	/**
+	 * A WPF font style
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public int style;
+
+	/**
+	 * A WPF font weight
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */	
+	public int weight;
+	
+	/**
+	 * A WPF font stretch
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public int stretch;
+	
+	/**
+	 * The height of the font data in points
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public int height;
+	
+	/**
+	 * The locales of the font
+	 */
+	String lang, country, variant;
+	
+/**	 
+ * Constructs a new uninitialized font data.
+ */
+public FontData() {
+	fontFamily = "";
+	style = OS.FontStyles_Normal;
+	weight = OS.FontWeight_ToOpenTypeWeight(OS.FontWeights_Normal);
+	stretch = OS.FontStretch_ToOpenTypeStretch(OS.FontStretches_Normal);
+	height = 12;
+}
+
+/**
+ * Constructs a new FontData given a string representation
+ * in the form generated by the <code>FontData.toString</code>
+ * method.
+ * <p>
+ * Note that the representation varies between platforms,
+ * and a FontData can only be created from a string that was 
+ * generated on the same platform.
+ * </p>
+ *
+ * @param string the string representation of a <code>FontData</code> (must not be null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument does not represent a valid description</li>
+ * </ul>
+ *
+ * @see #toString
+ */
+public FontData(String string) {
+	if (string == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	int start = 0;
+	int end = string.indexOf('|');
+	if (end == -1) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	String version1 = string.substring(start, end);
+	try {
+		if (Integer.parseInt(version1) != 1) SWT.error(SWT.ERROR_INVALID_ARGUMENT); 
+	} catch (NumberFormatException e) {
+		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	
+	start = end + 1;
+	end = string.indexOf('|', start);
+	if (end == -1) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	String name = string.substring(start, end);
+	
+	start = end + 1;
+	end = string.indexOf('|', start);
+	if (end == -1) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	int height = 0;
+	try {
+		height = Integer.parseInt(string.substring(start, end));
+	} catch (NumberFormatException e) {
+		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	
+	start = end + 1;
+	end = string.indexOf('|', start);
+	if (end == -1) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	int style = 0;
+	try {
+		style = Integer.parseInt(string.substring(start, end));
+	} catch (NumberFormatException e) {
+		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+
+	start = end + 1;
+	end = string.indexOf('|', start);
+	setName(name);
+	setHeight(height);
+	setStyle(style);
+	if (end == -1) return;
+	String platform = string.substring(start, end);
+
+	start = end + 1;
+	end = string.indexOf('|', start);
+	if (end == -1) return;
+	String version2 = string.substring(start, end);
+	
+	stretch = OS.FontStretch_ToOpenTypeStretch(OS.FontStretches_Normal);
+	if (platform.equals("WPF") && version2.equals("1")) {
+		try {
+			start = end + 1;
+			end = string.indexOf('|', start);
+			if (end == -1) return;
+			fontFamily = string.substring(start, end);
+			start = end + 1;
+			end = string.indexOf('|', start);
+			if (end == -1) return;
+			String styleStr = string.substring(start, end);
+			int length = styleStr.length();
+			char[] chars = new char[length + 1];
+			styleStr.getChars(0, length, chars, 0);
+			int str = OS.gcnew_String(chars);
+			int converter = OS.TypeDescriptor_GetConverter(OS.FontStyles_Normal);
+			this.style = OS.FontStyles_Normal;
+			int fontStyle = OS.TypeConverter_ConvertFromString(converter, str);
+			if (fontStyle != 0) {
+				if (OS.Object_Equals(OS.FontStyles_Italic, fontStyle)) this.style = OS.FontStyles_Italic;
+				if (OS.Object_Equals(OS.FontStyles_Oblique, fontStyle)) this.style = OS.FontStyles_Oblique;
+				OS.GCHandle_Free(fontStyle);
+			}
+			OS.GCHandle_Free(converter);
+			OS.GCHandle_Free(str);
+			start = end + 1;
+			end = string.indexOf('|', start);
+			if (end == -1) return;
+			weight = Integer.parseInt(string.substring(start, end));
+			start = end + 1;
+			end = string.indexOf('|', start);
+			if (end == -1) end = string.length();
+			stretch = Integer.parseInt(string.substring(start, end));
+		} catch (NumberFormatException e) {
+			setName(name);
+			setHeight(height);
+			setStyle(style);
+			return;
+		}
+	}
+}
+
+/**	 
+ * Constructs a new font data given a font name,
+ * the height of the desired font in points, 
+ * and a font style.
+ *
+ * @param name the name of the font (must not be null)
+ * @param height the font height in points
+ * @param style a bit or combination of NORMAL, BOLD, ITALIC
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - when the font name is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the height is negative</li>
+ * </ul>
+ */
+public FontData(String name, int height, int style) {
+	if (name == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	setName(name);
+	setHeight(height);
+	setStyle(style);
+	stretch = OS.FontStretch_ToOpenTypeStretch(OS.FontStretches_Normal);
+}
+
+/**
+ * Compares the argument to the receiver, and returns true
+ * if they represent the <em>same</em> object using a class
+ * specific comparison.
+ *
+ * @param object the object to compare with this object
+ * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
+ *
+ * @see #hashCode
+ */
+public boolean equals (Object object) {
+	if (object == this) return true;
+	if (!(object instanceof FontData)) return false;
+	FontData fd = (FontData)object;
+	return style == fd.style &&
+		height == fd.height &&
+		weight == fd.weight &&
+		stretch == fd.stretch &&
+		getName().equals(fd.getName());
+}
+
+/**
+ * Returns the height of the receiver in points.
+ *
+ * @return the height of this FontData
+ *
+ * @see #setHeight(int)
+ */
+public int getHeight() {
+	return height;
+}
+
+/**
+ * Returns the locale of the receiver.
+ * <p>
+ * The locale determines which platform character set this
+ * font is going to use. Widgets and graphics operations that
+ * use this font will convert UNICODE strings to the platform
+ * character set of the specified locale.
+ * </p>
+ * <p>
+ * On platforms where there are multiple character sets for a
+ * given language/country locale, the variant portion of the
+ * locale will determine the character set.
+ * </p>
+ * 
+ * @return the <code>String</code> representing a Locale object
+ * @since 3.0
+ */
+public String getLocale () {
+	StringBuffer buffer = new StringBuffer ();
+	char sep = '_';
+	if (lang != null) {
+		buffer.append (lang);
+		buffer.append (sep);
+	}
+	if (country != null) {
+		buffer.append (country);
+		buffer.append (sep);
+	}
+	if (variant != null) {
+		buffer.append (variant);
+	}
+	
+	String result = buffer.toString ();
+	int length = result.length ();
+	if (length > 0) {
+		if (result.charAt (length - 1) == sep) {
+			result = result.substring (0, length - 1);
+		}
+	} 
+	return result;
+}
+
+/**
+ * Returns the name of the receiver.
+ * On platforms that support font foundries, the return value will
+ * be the foundry followed by a dash ("-") followed by the face name.
+ *
+ * @return the name of this <code>FontData</code>
+ *
+ * @see #setName
+ */
+public String getName() {
+	return fontFamily;
+}
+
+/**
+ * Returns the style of the receiver which is a bitwise OR of 
+ * one or more of the <code>SWT</code> constants NORMAL, BOLD
+ * and ITALIC.
+ *
+ * @return the style of this <code>FontData</code>
+ * 
+ * @see #setStyle
+ */
+public int getStyle() {
+	int style = SWT.NORMAL;
+	if (weight == OS.FontWeight_ToOpenTypeWeight(OS.FontWeights_Bold)) style |= SWT.BOLD;
+	if (style == OS.FontStyles_Italic) style |= SWT.ITALIC;
+	return style;
+}
+
+/**
+ * Returns an integer hash code for the receiver. Any two 
+ * objects that return <code>true</code> when passed to 
+ * <code>equals</code> must return the same value for this
+ * method.
+ *
+ * @return the receiver's hash
+ *
+ * @see #equals
+ */
+public int hashCode () {
+	return style ^ weight ^ stretch ^ getName().hashCode();
+}
+
+/**
+ * Sets the height of the receiver. The parameter is
+ * specified in terms of points, where a point is one
+ * seventy-second of an inch.
+ *
+ * @param height the height of the <code>FontData</code>
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the height is negative</li>
+ * </ul>
+ * 
+ * @see #getHeight
+ */
+public void setHeight(int height) {
+	if (height < 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	this.height = height;
+}
+
+/**
+ * Sets the locale of the receiver.
+ * <p>
+ * The locale determines which platform character set this
+ * font is going to use. Widgets and graphics operations that
+ * use this font will convert UNICODE strings to the platform
+ * character set of the specified locale.
+ * </p>
+ * <p>
+ * On platforms where there are multiple character sets for a
+ * given language/country locale, the variant portion of the
+ * locale will determine the character set.
+ * </p>
+ * 
+ * @param locale the <code>String</code> representing a Locale object
+ * @see java.util.Locale#toString
+ */
+public void setLocale(String locale) {
+	lang = country = variant = null;
+	if (locale != null) {
+		char sep = '_';
+		int length = locale.length();
+		int firstSep, secondSep;
+		
+		firstSep = locale.indexOf(sep);
+		if (firstSep == -1) {
+			firstSep = secondSep = length;
+		} else {
+			secondSep = locale.indexOf(sep, firstSep + 1);
+			if (secondSep == -1) secondSep = length;
+		}
+		if (firstSep > 0) lang = locale.substring(0, firstSep);
+		if (secondSep > firstSep + 1) country = locale.substring(firstSep + 1, secondSep);
+		if (length > secondSep + 1) variant = locale.substring(secondSep + 1);
+	}	
+}
+
+/**
+ * Sets the name of the receiver.
+ * <p>
+ * Some platforms support font foundries. On these platforms, the name
+ * of the font specified in setName() may have one of the following forms:
+ * <ol>
+ * <li>a face name (for example, "courier")</li>
+ * <li>a foundry followed by a dash ("-") followed by a face name (for example, "adobe-courier")</li>
+ * </ol>
+ * In either case, the name returned from getName() will include the
+ * foundry.
+ * </p>
+ * <p>
+ * On platforms that do not support font foundries, only the face name
+ * (for example, "courier") is used in <code>setName()</code> and 
+ * <code>getName()</code>.
+ * </p>
+ *
+ * @param name the name of the font data (must not be null)
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - when the font name is null</li>
+ * </ul>
+ *
+ * @see #getName
+ */
+public void setName(String name) {
+	if (name == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	fontFamily = name;
+}
+
+/**
+ * Sets the style of the receiver to the argument which must
+ * be a bitwise OR of one or more of the <code>SWT</code> 
+ * constants NORMAL, BOLD and ITALIC.  All other style bits are
+ * ignored.
+ *
+ * @param style the new style for this <code>FontData</code>
+ *
+ * @see #getStyle
+ */
+public void setStyle(int style) {
+	if ((style & SWT.BOLD) == SWT.BOLD) {
+		weight = OS.FontWeight_ToOpenTypeWeight(OS.FontWeights_Bold);
+	} else {
+		weight = OS.FontWeight_ToOpenTypeWeight(OS.FontWeights_Normal);
+	}
+	if ((style & SWT.ITALIC) == SWT.ITALIC) {
+		this.style = OS.FontStyles_Italic;
+	} else {
+		this.style = OS.FontStyles_Normal;
+	}
+}
+
+/**
+ * Returns a string representation of the receiver which is suitable
+ * for constructing an equivalent instance using the 
+ * <code>FontData(String)</code> constructor.
+ *
+ * @return a string representation of the FontData
+ *
+ * @see FontData
+ */
+public String toString() {
+	StringBuffer buffer = new StringBuffer();
+	buffer.append("1|"); //$NON-NLS-1$
+	buffer.append(getName());
+	buffer.append("|"); //$NON-NLS-1$
+	buffer.append(getHeight());
+	buffer.append("|"); //$NON-NLS-1$
+	buffer.append(getStyle());
+	buffer.append("|"); //$NON-NLS-1$
+	buffer.append("WPF|1|"); //$NON-NLS-1$
+	buffer.append(fontFamily);
+	buffer.append("|"); //$NON-NLS-1$
+	int converter = OS.TypeDescriptor_GetConverter(OS.FontStyles_Normal);
+	int str = OS.TypeConverter_ConvertToString(converter, style != 0 ? style : OS.FontStyles_Normal);
+	int charArray = OS.String_ToCharArray(str);
+	char[] chars = new char[OS.String_Length(str)];
+	OS.memcpy(chars, charArray, chars.length * 2);
+	OS.GCHandle_Free (charArray);
+	OS.GCHandle_Free (str);
+	OS.GCHandle_Free (converter);
+	buffer.append(chars);
+	buffer.append("|"); //$NON-NLS-1$
+	buffer.append(weight);
+	buffer.append("|"); //$NON-NLS-1$
+	buffer.append(stretch);
+	return buffer.toString();
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new font data.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>FontData</code>. It is marked public only so that
+ * it can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param data the <code>LOGFONT</code> for the font data
+ * @param height the height of the font data
+ * @return a new font data object containing the specified <code>LOGFONT</code> and height
+ */
+public static FontData wpf_new(String fontFamily, int style, int weight, int stretch, int height) {
+	FontData data = new FontData();
+	data.fontFamily = fontFamily;
+	data.style = style;
+	data.weight = weight;
+	data.stretch = stretch;
+	data.height = height;
+	return data;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/FontMetrics.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/FontMetrics.java
new file mode 100644
index 0000000..4a8b8b1
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/FontMetrics.java
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * 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.graphics;
+
+
+/**
+ * Instances of this class provide measurement information
+ * about fonts including ascent, descent, height, leading
+ * space between rows, and average character width.
+ * <code>FontMetrics</code> are obtained from <code>GC</code>s
+ * using the <code>getFontMetrics()</code> method.
+ *
+ * @see GC#getFontMetrics
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public final class FontMetrics {
+	int ascent, descent, averageCharWidth, leading, height;
+
+FontMetrics() {
+}
+
+/**
+ * Compares the argument to the receiver, and returns true
+ * if they represent the <em>same</em> object using a class
+ * specific comparison.
+ *
+ * @param object the object to compare with this object
+ * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
+ *
+ * @see #hashCode
+ */
+public boolean equals (Object object) {
+	if (object == this) return true;
+	if (!(object instanceof FontMetrics)) return false;
+	FontMetrics metrics = (FontMetrics)object;
+	return ascent == metrics.ascent && descent == metrics.descent &&
+		averageCharWidth == metrics.averageCharWidth && leading == metrics.leading &&
+		height == metrics.height;
+}
+
+/**
+ * Returns the ascent of the font described by the receiver. A
+ * font's <em>ascent</em> is the distance from the baseline to the 
+ * top of actual characters, not including any of the leading area,
+ * measured in pixels.
+ *
+ * @return the ascent of the font
+ */
+public int getAscent() {
+	return ascent;
+}
+
+/**
+ * Returns the average character width, measured in pixels,
+ * of the font described by the receiver.
+ *
+ * @return the average character width of the font
+ */
+public int getAverageCharWidth() {
+	return averageCharWidth;
+}
+
+/**
+ * Returns the descent of the font described by the receiver. A
+ * font's <em>descent</em> is the distance from the baseline to the
+ * bottom of actual characters, not including any of the leading area,
+ * measured in pixels.
+ *
+ * @return the descent of the font
+ */
+public int getDescent() {
+	return descent;
+}
+
+/**
+ * Returns the height of the font described by the receiver, 
+ * measured in pixels. A font's <em>height</em> is the sum of
+ * its ascent, descent and leading area.
+ *
+ * @return the height of the font
+ *
+ * @see #getAscent
+ * @see #getDescent
+ * @see #getLeading
+ */
+public int getHeight() {
+	return height;
+}
+
+/**
+ * Returns the leading area of the font described by the
+ * receiver. A font's <em>leading area</em> is the space
+ * above its ascent which may include accents or other marks.
+ *
+ * @return the leading space of the font
+ */
+public int getLeading() {
+	return leading;
+}
+
+/**
+ * Returns an integer hash code for the receiver. Any two 
+ * objects that return <code>true</code> when passed to 
+ * <code>equals</code> must return the same value for this
+ * method.
+ *
+ * @return the receiver's hash
+ *
+ * @see #equals
+ */
+public int hashCode() {
+	return ascent ^ descent ^ averageCharWidth ^ leading ^ height;
+}
+
+public static FontMetrics wpf_new(int ascent, int descent, int averageCharWidth, int leading, int height) {
+	FontMetrics fontMetrics = new FontMetrics();
+	fontMetrics.ascent = ascent;
+	fontMetrics.descent = descent;
+	fontMetrics.averageCharWidth = averageCharWidth;
+	fontMetrics.leading = leading;
+	fontMetrics.height = height;
+	return fontMetrics;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/GC.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/GC.java
new file mode 100644
index 0000000..dae4748
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/GC.java
@@ -0,0 +1,3112 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.graphics;
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+
+/**
+ * Class <code>GC</code> is where all of the drawing capabilities that are 
+ * supported by SWT are located. Instances are used to draw on either an 
+ * <code>Image</code>, a <code>Control</code>, or directly on a <code>Display</code>.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>LEFT_TO_RIGHT, RIGHT_TO_LEFT</dd>
+ * </dl>
+ * 
+ * <p>
+ * The SWT drawing coordinate system is the two-dimensional space with the origin
+ * (0,0) at the top left corner of the drawing area and with (x,y) values increasing
+ * to the right and downward respectively.
+ * </p>
+ * 
+ * <p>
+ * The result of drawing on an image that was created with an indexed
+ * palette using a color that is not in the palette is platform specific.
+ * Some platforms will match to the nearest color while other will draw
+ * the color itself. This happens because the allocated image might use
+ * a direct palette on platforms that do not support indexed palette.
+ * </p>
+ * 
+ * <p>
+ * Application code must explicitly invoke the <code>GC.dispose()</code> 
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required. This is <em>particularly</em>
+ * important on Windows95 and Windows98 where the operating system has a limited
+ * number of device contexts available.
+ * </p>
+ * 
+ * <p>
+ * Note: Only one of LEFT_TO_RIGHT and RIGHT_TO_LEFT may be specified.
+ * </p>
+ *
+ * @see org.eclipse.swt.events.PaintEvent
+ * @see <a href="http://www.eclipse.org/swt/snippets/#gc">GC snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Examples: GraphicsExample, PaintExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+
+public final class GC extends Resource {
+	
+	/**
+	 * the handle to the OS device context
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public int handle;
+
+	Drawable drawable;
+	GCData data;
+
+	static final int FOREGROUND = 1 << 0;
+	static final int BACKGROUND = 1 << 1;
+	static final int FONT = 1 << 2;
+	static final int LINE_STYLE = 1 << 3;
+	static final int LINE_WIDTH = 1 << 4;
+	static final int LINE_CAP = 1 << 5;
+	static final int LINE_JOIN = 1 << 6;
+	static final int LINE_MITERLIMIT = 1 << 7;
+	static final int ALPHA = 1 << 8;
+	static final int CLIPPING = 1 << 9;
+	static final int TRANSFORM = 1 << 10;
+
+	static final int DRAW = FOREGROUND | LINE_STYLE | LINE_WIDTH | LINE_CAP | LINE_JOIN | ALPHA | CLIPPING | TRANSFORM;
+	static final int FILL = BACKGROUND | ALPHA | CLIPPING | TRANSFORM;
+	static final int IMAGE = ALPHA | CLIPPING | TRANSFORM;
+
+	static final double[] LINE_DOT_ZERO = new double[]{3, 3};
+	static final double[] LINE_DASH_ZERO = new double[]{18, 6};
+	static final double[] LINE_DASHDOT_ZERO = new double[]{9, 6, 3, 6};
+	static final double[] LINE_DASHDOTDOT_ZERO = new double[]{9, 3, 3, 3, 3, 3};
+
+/**
+ * Prevents uninitialized instances from being created outside the package.
+ */
+GC() {
+}
+
+/**	 
+ * Constructs a new instance of this class which has been
+ * configured to draw on the specified drawable. Sets the
+ * foreground color, background color and font in the GC
+ * to match those in the drawable.
+ * <p>
+ * You must dispose the graphics context when it is no longer required. 
+ * </p>
+ * @param drawable the drawable to draw on
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the drawable is null</li>
+ *    <li>ERROR_NULL_ARGUMENT - if there is no current device</li>
+ *    <li>ERROR_INVALID_ARGUMENT
+ *          - if the drawable is an image that is not a bitmap or an icon
+ *          - if the drawable is an image or printer that is already selected
+ *            into another graphics context</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for GC creation</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS if not called from the thread that created the drawable</li>
+ * </ul>
+ */
+public GC(Drawable drawable) {
+	this(drawable, SWT.NONE);
+}
+
+/**	 
+ * Constructs a new instance of this class which has been
+ * configured to draw on the specified drawable. Sets the
+ * foreground color, background color and font in the GC
+ * to match those in the drawable.
+ * <p>
+ * You must dispose the graphics context when it is no longer required. 
+ * </p>
+ * 
+ * @param drawable the drawable to draw on
+ * @param style the style of GC to construct
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the drawable is null</li>
+ *    <li>ERROR_NULL_ARGUMENT - if there is no current device</li>
+ *    <li>ERROR_INVALID_ARGUMENT
+ *          - if the drawable is an image that is not a bitmap or an icon
+ *          - if the drawable is an image or printer that is already selected
+ *            into another graphics context</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for GC creation</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS if not called from the thread that created the drawable</li>
+ * </ul>
+ *  
+ * @since 2.1.2
+ */
+public GC(Drawable drawable, int style) {
+	if (drawable == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	GCData data = new GCData ();
+	data.style = checkStyle(style);
+	int hDC = drawable.internal_new_GC(data);
+	Device device = data.device;
+	if (device == null) device = Device.getDevice();
+	if (device == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	this.device = data.device = device;
+	init (drawable, data, hDC);
+	init();
+}
+
+static int checkStyle(int style) {
+	if ((style & SWT.LEFT_TO_RIGHT) != 0) style &= ~SWT.RIGHT_TO_LEFT;
+	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+}
+
+void checkGC(int mask) {
+	int state = data.state;
+	if ((state & mask) == mask) return;
+	state = (state ^ mask) & mask;
+	data.state |= mask;
+	if ((state & (FOREGROUND | LINE_WIDTH | LINE_STYLE | LINE_JOIN | LINE_CAP | LINE_MITERLIMIT)) != 0) {
+		int pen = data.pen;
+		if (pen != 0) OS.GCHandle_Free(pen); 
+		pen = data.pen = OS.gcnew_Pen();
+		int brush;
+		Pattern pattern = data.foregroundPattern;
+		if (pattern != null) {
+			brush = pattern.handle;
+		} else {
+			int foreground = data.foreground;
+			brush = OS.gcnew_SolidColorBrush(foreground);
+			if (brush == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+		}
+		OS.Pen_Brush(pen, brush);
+		if (pattern == null) OS.GCHandle_Free(brush);
+		float width = data.lineWidth;
+		OS.Pen_Thickness(pen, width == 0 ? 1 : width);
+		double[] dashes = null;
+		int dashStyle = 0; 
+		switch (data.lineStyle) {
+			case SWT.LINE_SOLID: dashStyle = OS.DashStyles_Solid(); break;
+			case SWT.LINE_DOT: if (width == 0) dashes = LINE_DOT_ZERO; else dashStyle = OS.DashStyles_Dot(); break;
+			case SWT.LINE_DASH: if (width == 0) dashes = LINE_DASH_ZERO; else dashStyle = OS.DashStyles_Dash(); break;
+			case SWT.LINE_DASHDOT: if (width == 0) dashes = LINE_DASHDOT_ZERO; else dashStyle = OS.DashStyles_DashDot(); break;
+			case SWT.LINE_DASHDOTDOT: if (width == 0) dashes = LINE_DASHDOTDOT_ZERO; else dashStyle = OS.DashStyles_DashDotDot(); break;
+			case SWT.LINE_CUSTOM: {
+				if (data.lineDashes != null) {
+					dashes = new double[data.lineDashes.length * 2];
+					for (int i = 0; i < data.lineDashes.length; i++) {
+						double dash = (double)data.lineDashes[i] / Math.max (1, width);
+						dashes[i] = dash;
+						dashes[i + data.lineDashes.length] = dash;
+					}
+				} else {
+					dashStyle = OS.DashStyles_Solid();
+				}
+			}
+		}
+		if (dashes != null) {
+			int list = OS.gcnew_DoubleCollection(dashes.length);
+			for (int i = 0; i < dashes.length; i++) {
+				OS.DoubleCollection_Add(list, dashes[i]);
+			}
+			dashStyle = OS.gcnew_DashStyle(list, data.lineDashesOffset);
+			OS.GCHandle_Free(list);
+		}
+		OS.Pen_DashStyle(pen, dashStyle);
+		OS.GCHandle_Free(dashStyle);
+		int joinStyle = 0;
+		switch (data.lineJoin) {
+			case SWT.JOIN_MITER: joinStyle = OS.PenLineJoin_Miter; break;
+			case SWT.JOIN_BEVEL: joinStyle = OS.PenLineJoin_Bevel; break;
+			case SWT.JOIN_ROUND: joinStyle = OS.PenLineJoin_Round; break;
+		}
+		OS.Pen_LineJoin(pen, joinStyle);
+		int capStyle = OS.PenLineCap_Flat;
+		switch (data.lineCap) {
+			case SWT.CAP_FLAT: capStyle = OS.PenLineCap_Flat; break;
+			case SWT.CAP_ROUND: capStyle = OS.PenLineCap_Round; break;
+			case SWT.CAP_SQUARE: capStyle = OS.PenLineCap_Square; break;
+		}
+		OS.Pen_DashCap(pen, capStyle);
+		OS.Pen_EndLineCap(pen, capStyle);
+		OS.Pen_StartLineCap(pen, capStyle);
+		OS.Pen_MiterLimit(pen, data.lineMiterLimit);
+	}
+	if ((state & BACKGROUND) != 0) {
+		if (data.brush != 0) OS.GCHandle_Free(data.brush);
+		data.brush = 0;
+		Pattern pattern = data.backgroundPattern;
+		if (pattern != null) {
+			data.currentBrush = pattern.handle;
+		} else {
+			int background = data.background;
+			int brush = OS.gcnew_SolidColorBrush(background);
+			if (brush == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+			data.currentBrush = data.brush = brush;
+		}
+	}
+	if ((state & (ALPHA | CLIPPING | TRANSFORM)) != 0) {
+		for (int i = 0; i < data.pushCount; i++) OS.DrawingContext_Pop(handle);
+		data.pushCount = 0;
+		if (data.alpha != 0xFF) {
+			OS.DrawingContext_PushOpacity(handle, (data.alpha & 0xFF) / (double)0xFF);
+			data.pushCount++;
+		}
+		if (data.clip != 0) {
+			OS.DrawingContext_PushClip(handle, data.clip);
+			data.pushCount++;
+		}
+		if (data.transform != 0) {
+			OS.DrawingContext_PushTransform(handle, data.transform);
+			data.pushCount++;
+		}
+	}
+
+}
+
+/**
+ * Copies a rectangular area of the receiver at the specified
+ * position into the image, which must be of type <code>SWT.BITMAP</code>.
+ *
+ * @param image the image to copy into
+ * @param x the x coordinate in the receiver of the area to be copied
+ * @param y the y coordinate in the receiver of the area to be copied
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the image is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image is not a bitmap or has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void copyArea(Image image, int x, int y) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (image == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (image.type != SWT.BITMAP || image.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+
+	//TODO - implement copyArea
+}
+
+/**
+ * Copies a rectangular area of the receiver at the source
+ * position onto the receiver at the destination position.
+ *
+ * @param srcX the x coordinate in the receiver of the area to be copied
+ * @param srcY the y coordinate in the receiver of the area to be copied
+ * @param width the width of the area to copy
+ * @param height the height of the area to copy
+ * @param destX the x coordinate in the receiver of the area to copy to
+ * @param destY the y coordinate in the receiver of the area to copy to
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void copyArea(int srcX, int srcY, int width, int height, int destX, int destY) {
+	copyArea(srcX, srcY, width, height, destX, destY, true);
+}
+
+/**
+ * Copies a rectangular area of the receiver at the source
+ * position onto the receiver at the destination position.
+ *
+ * @param srcX the x coordinate in the receiver of the area to be copied
+ * @param srcY the y coordinate in the receiver of the area to be copied
+ * @param width the width of the area to copy
+ * @param height the height of the area to copy
+ * @param destX the x coordinate in the receiver of the area to copy to
+ * @param destY the y coordinate in the receiver of the area to copy to
+ * @param paint if <code>true</code> paint events will be generated for old and obscured areas
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1 
+ */
+public void copyArea(int srcX, int srcY, int width, int height, int destX, int destY, boolean paint) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+
+	//TODO - implement copyArea
+
+//	/*
+//	* Feature in WinCE.  The function WindowFromDC is not part of the
+//	* WinCE SDK.  The fix is to remember the HWND.
+//	*/
+//	int hwnd = data.hwnd;
+//	if (hwnd == 0) {
+//		OS.BitBlt(handle, destX, destY, width, height, handle, srcX, srcY, OS.SRCCOPY);
+//	} else {
+//		RECT lprcClip = null;
+//		int hrgn = OS.CreateRectRgn(0, 0, 0, 0);
+//		if (OS.GetClipRgn(handle, hrgn) == 1) {
+//			lprcClip = new RECT();
+//			OS.GetRgnBox(hrgn, lprcClip);
+//		}
+//		OS.DeleteObject(hrgn);
+//		RECT lprcScroll = new RECT();
+//		OS.SetRect(lprcScroll, srcX, srcY, srcX + width, srcY + height);
+//		int flags = paint ? OS.SW_INVALIDATE | OS.SW_ERASE : 0;
+//		int res = OS.ScrollWindowEx(hwnd, destX - srcX, destY - srcY, lprcScroll, lprcClip, 0, null, flags); 
+//
+//		/*
+//		* Feature in WinCE.  ScrollWindowEx does not accept combined
+//		* vertical and horizontal scrolling.  The fix is to do a
+//		* BitBlt and invalidate the appropriate source area.
+//		*/
+//		if (res == 0 && OS.IsWinCE) {
+//			OS.BitBlt(handle, destX, destY, width, height, handle, srcX, srcY, OS.SRCCOPY);
+//			if (paint) {
+//				int deltaX = destX - srcX, deltaY = destY - srcY;
+//				boolean disjoint = (destX + width < srcX) || (srcX + width < destX) || (destY + height < srcY) || (srcY + height < destY);
+//				if (disjoint) {
+//					OS.InvalidateRect(hwnd, lprcScroll, true);
+//				} else {
+//					if (deltaX != 0) {
+//						int newX = destX - deltaX;
+//						if (deltaX < 0) newX = destX + width;
+//						OS.SetRect(lprcScroll, newX, srcY, newX + Math.abs(deltaX), srcY + height);
+//						OS.InvalidateRect(hwnd, lprcScroll, true);
+//					}
+//					if (deltaY != 0) {
+//						int newY = destY - deltaY;
+//						if (deltaY < 0) newY = destY + height;
+//						OS.SetRect(lprcScroll, srcX, newY, srcX + width, newY + Math.abs(deltaY));
+//						OS.InvalidateRect(hwnd, lprcScroll, true);
+//					}
+//				}
+//			}
+//		}
+//	}
+}
+
+void destroy() {
+	int brush = data.brush;
+	if (brush != 0) OS.GCHandle_Free(brush);
+	data.brush = 0;
+	int pen = data.pen;
+	if (pen != 0) OS.GCHandle_Free(pen);
+	data.pen = 0;
+	int clip = data.clip;
+	if (clip != 0) OS.GCHandle_Free(clip);
+	data.clip = 0;
+	int transform = data.transform;
+	if (transform != 0) OS.GCHandle_Free(transform);
+	data.transform = 0;
+
+	Image image = data.image;
+	if (image != null) image.memGC = null;
+	
+	if (drawable != null) drawable.internal_dispose_GC(handle, data);
+	drawable = null;
+	handle = 0;
+	data.image = null;
+	data = null;
+}
+
+/**
+ * Draws the outline of a circular or elliptical arc 
+ * within the specified rectangular area.
+ * <p>
+ * The resulting arc begins at <code>startAngle</code> and extends  
+ * for <code>arcAngle</code> degrees, using the current color.
+ * Angles are interpreted such that 0 degrees is at the 3 o'clock
+ * position. A positive value indicates a counter-clockwise rotation
+ * while a negative value indicates a clockwise rotation.
+ * </p><p>
+ * The center of the arc is the center of the rectangle whose origin 
+ * is (<code>x</code>, <code>y</code>) and whose size is specified by the 
+ * <code>width</code> and <code>height</code> arguments. 
+ * </p><p>
+ * The resulting arc covers an area <code>width + 1</code> pixels wide
+ * by <code>height + 1</code> pixels tall.
+ * </p>
+ *
+ * @param x the x coordinate of the upper-left corner of the arc to be drawn
+ * @param y the y coordinate of the upper-left corner of the arc to be drawn
+ * @param width the width of the arc to be drawn
+ * @param height the height of the arc to be drawn
+ * @param startAngle the beginning angle
+ * @param arcAngle the angular extent of the arc, relative to the start angle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawArc (int x, int y, int width, int height, int startAngle, int arcAngle) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	checkGC(DRAW);
+	if (width < 0) {
+		x = x + width;
+		width = -width;
+	}
+	if (height < 0) {
+		y = y + height;
+		height = -height;
+	}
+	if (width == 0 || height == 0 || arcAngle == 0) return;
+	double offset = 0;
+	if (data.lineWidth == 0 || (data.lineWidth % 2) == 1) offset = 0.5;
+	if (arcAngle >= 360 || arcAngle <= -360) {
+		int center = OS.gcnew_Point(x + offset + width / 2f, y + offset + height / 2f);
+		OS.DrawingContext_DrawEllipse(handle, 0, data.pen, center, width / 2f, height / 2f);
+		OS.GCHandle_Free(center);
+		return;
+	}
+	boolean isNegative = arcAngle < 0;
+	boolean isLargeAngle = arcAngle > 180 || arcAngle < -180;
+	arcAngle = arcAngle + startAngle;
+	if (isNegative) {
+		// swap angles
+	   	int tmp = startAngle;
+		startAngle = arcAngle;
+		arcAngle = tmp;
+	}
+	double x1 = Math.cos(startAngle * Math.PI / 180) * width/2.0 + x + offset + width/2.0;
+	double y1 = -1 * Math.sin(startAngle * Math.PI / 180) * height/2.0 + y + offset + height/2.0;
+	double x2 = Math.cos(arcAngle * Math.PI / 180) * width/2.0 + x + offset + width/2.0;
+	double y2 = -1 * Math.sin(arcAngle * Math.PI / 180) * height/2.0 + y + offset + height/2.0; 
+	int startPoint = OS.gcnew_Point(x1, y1);
+	int endPoint = OS.gcnew_Point(x2, y2);
+	int size = OS.gcnew_Size(width / 2.0, height / 2.0);
+	int arc = OS.gcnew_ArcSegment(endPoint, size, 0, isLargeAngle, OS.SweepDirection_Clockwise, true);
+	int figure = OS.gcnew_PathFigure();
+	OS.PathFigure_StartPoint(figure, startPoint);
+	int segments = OS.PathFigure_Segments(figure);
+	OS.PathSegmentCollection_Add(segments, arc);
+	int path = OS.gcnew_PathGeometry();
+	int figures = OS.PathGeometry_Figures(path);
+	OS.PathFigureCollection_Add(figures, figure);
+	OS.DrawingContext_DrawGeometry(handle, 0, data.pen, path);
+	OS.GCHandle_Free(figures);
+	OS.GCHandle_Free(path);
+	OS.GCHandle_Free(segments);
+	OS.GCHandle_Free(figure);
+	OS.GCHandle_Free(arc);
+	OS.GCHandle_Free(size);
+	OS.GCHandle_Free(endPoint);
+	OS.GCHandle_Free(startPoint);
+}
+
+/** 
+ * Draws a rectangle, based on the specified arguments, which has
+ * the appearance of the platform's <em>focus rectangle</em> if the
+ * platform supports such a notion, and otherwise draws a simple
+ * rectangle in the receiver's foreground color.
+ *
+ * @param x the x coordinate of the rectangle
+ * @param y the y coordinate of the rectangle
+ * @param width the width of the rectangle
+ * @param height the height of the rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #drawRectangle(int, int, int, int)
+ */	 
+public void drawFocus (int x, int y, int width, int height) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	//TODO - implement drawFocus
+}
+
+/**
+ * Draws the given image in the receiver at the specified
+ * coordinates.
+ *
+ * @param image the image to draw
+ * @param x the x coordinate of where to draw
+ * @param y the y coordinate of where to draw
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the image is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the given coordinates are outside the bounds of the image</li>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES - if no handles are available to perform the operation</li>
+ * </ul>
+ */
+public void drawImage(Image image, int x, int y) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (image == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	if (image.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	drawImage(image, 0, 0, -1, -1, x, y, -1, -1, true);
+}
+
+/**
+ * Copies a rectangular area from the source image into a (potentially
+ * different sized) rectangular area in the receiver. If the source
+ * and destination areas are of differing sizes, then the source
+ * area will be stretched or shrunk to fit the destination area
+ * as it is copied. The copy fails if any part of the source rectangle
+ * lies outside the bounds of the source image, or if any of the width
+ * or height arguments are negative.
+ *
+ * @param image the source image
+ * @param srcX the x coordinate in the source image to copy from
+ * @param srcY the y coordinate in the source image to copy from
+ * @param srcWidth the width in pixels to copy from the source
+ * @param srcHeight the height in pixels to copy from the source
+ * @param destX the x coordinate in the destination to copy to
+ * @param destY the y coordinate in the destination to copy to
+ * @param destWidth the width in pixels of the destination rectangle
+ * @param destHeight the height in pixels of the destination rectangle
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the image is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if any of the width or height arguments are negative.
+ *    <li>ERROR_INVALID_ARGUMENT - if the source rectangle is not contained within the bounds of the source image</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES - if no handles are available to perform the operation</li>
+ * </ul>
+ */
+public void drawImage(Image image, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (srcWidth == 0 || srcHeight == 0 || destWidth == 0 || destHeight == 0) return;
+	if (srcX < 0 || srcY < 0 || srcWidth < 0 || srcHeight < 0 || destWidth < 0 || destHeight < 0) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	if (image == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	if (image.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	drawImage(image, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, false);	
+}
+
+void drawImage(Image image, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, boolean simple) {
+	checkGC(IMAGE);
+	int imageHandle = image.handle;
+	int imgWidth = OS.BitmapSource_PixelWidth(imageHandle);
+	int imgHeight = OS.BitmapSource_PixelHeight(imageHandle);
+ 	if (simple) {
+ 		srcWidth = destWidth = imgWidth;
+ 		srcHeight = destHeight = imgHeight;
+ 	} else {
+ 		simple = srcX == 0 && srcY == 0 &&
+ 			srcWidth == destWidth && destWidth == imgWidth &&
+ 			srcHeight == destHeight && destHeight == imgHeight;
+		if (srcX + srcWidth > imgWidth || srcY + srcHeight > imgHeight) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+ 	}
+ 	int mode = 0;
+	switch (data.interpolation) {
+		case SWT.DEFAULT: mode = OS.BitmapScalingMode_Unspecified; break;
+		case SWT.NONE: mode = OS.BitmapScalingMode_LowQuality; break;
+		case SWT.LOW: mode = OS.BitmapScalingMode_LowQuality; break;
+		case SWT.HIGH: mode = OS.BitmapScalingMode_HighQuality; break;
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+ 	if (srcX != 0 || srcY != 0 || srcWidth != imgWidth || srcHeight != imgHeight) {
+ 		int rect = OS.gcnew_Int32Rect(srcX, srcY, srcWidth, srcHeight);
+ 		imageHandle = OS.gcnew_CroppedBitmap(imageHandle, rect);
+ 		OS.RenderOptions_SetBitmapScalingMode(imageHandle, mode);
+ 		OS.GCHandle_Free(rect);
+ 	} else {
+ 		if (mode != OS.RenderOptions_GetBitmapScalingMode(imageHandle)) {
+ 			imageHandle = OS.Freezable_Clone(imageHandle); 
+ 			OS.RenderOptions_SetBitmapScalingMode(imageHandle, mode);
+ 		}
+ 	}
+	int rect = OS.gcnew_Rect(destX, destY, destWidth, destHeight);
+	OS.DrawingContext_DrawImage(handle, imageHandle, rect);
+	OS.GCHandle_Free(rect);
+	if (image.handle != imageHandle) OS.GCHandle_Free(imageHandle);
+}
+
+/** 
+ * Draws a line, using the foreground color, between the points 
+ * (<code>x1</code>, <code>y1</code>) and (<code>x2</code>, <code>y2</code>).
+ *
+ * @param x1 the first point's x coordinate
+ * @param y1 the first point's y coordinate
+ * @param x2 the second point's x coordinate
+ * @param y2 the second point's y coordinate
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawLine (int x1, int y1, int x2, int y2) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	checkGC(DRAW);
+	double offset = 0;
+	if (data.lineWidth == 0 || (data.lineWidth % 2) == 1) offset = 0.5;
+	int point0 = OS.gcnew_Point(x1 + offset, y1 + offset);
+	int point1 = OS.gcnew_Point(x2 + offset, y2 + offset);
+	OS.DrawingContext_DrawLine(handle, data.pen, point0, point1);
+	OS.GCHandle_Free(point0);
+	OS.GCHandle_Free(point1);
+}
+
+/** 
+ * Draws the outline of an oval, using the foreground color,
+ * within the specified rectangular area.
+ * <p>
+ * The result is a circle or ellipse that fits within the 
+ * rectangle specified by the <code>x</code>, <code>y</code>, 
+ * <code>width</code>, and <code>height</code> arguments. 
+ * </p><p> 
+ * The oval covers an area that is <code>width + 1</code> 
+ * pixels wide and <code>height + 1</code> pixels tall.
+ * </p>
+ *
+ * @param x the x coordinate of the upper left corner of the oval to be drawn
+ * @param y the y coordinate of the upper left corner of the oval to be drawn
+ * @param width the width of the oval to be drawn
+ * @param height the height of the oval to be drawn
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */	 
+public void drawOval (int x, int y, int width, int height) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	checkGC(DRAW);
+	if (width < 0) {
+		x = x + width;
+		width = -width;
+	}
+	if (height < 0) {
+		y = y + height;
+		height = -height;
+	}
+	double offset = 0;
+	if (data.lineWidth == 0 || (data.lineWidth % 2) == 1) offset = 0.5;
+	int center = OS.gcnew_Point(x + offset + width / 2f, y + offset + height / 2f);
+	OS.DrawingContext_DrawEllipse(handle, 0, data.pen, center, width / 2f, height / 2f);
+	OS.GCHandle_Free(center);
+}
+
+/** 
+ * Draws the path described by the parameter.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param path the path to draw
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parameter is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * 
+ * @see Path
+ * 
+ * @since 3.1
+ */
+public void drawPath (Path path) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (path == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (path.handle == 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	checkGC(DRAW);
+	//TODO - check offset to draw in the midle of pixel
+	OS.PathGeometry_FillRule(path.handle, data.fillRule == SWT.FILL_EVEN_ODD ? OS.FillRule_EvenOdd : OS.FillRule_Nonzero);
+	OS.DrawingContext_DrawGeometry(handle, 0, data.pen, path.handle);
+}
+
+/** 
+ * Draws a pixel, using the foreground color, at the specified
+ * point (<code>x</code>, <code>y</code>).
+ * <p>
+ * Note that the receiver's line attributes do not affect this
+ * operation.
+ * </p>
+ *
+ * @param x the point's x coordinate
+ * @param y the point's y coordinate
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *  
+ * @since 3.0
+ */
+public void drawPoint (int x, int y) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	checkGC(DRAW);
+	int rect = OS.gcnew_Rect(x, y, 1, 1);
+	int brush = OS.Pen_Brush(data.pen);
+	OS.DrawingContext_DrawRectangle(handle, brush, 0, rect);
+	OS.GCHandle_Free(brush);
+	OS.GCHandle_Free(rect);
+}
+
+/** 
+ * Draws the closed polygon which is defined by the specified array
+ * of integer coordinates, using the receiver's foreground color. The array 
+ * contains alternating x and y values which are considered to represent
+ * points which are the vertices of the polygon. Lines are drawn between
+ * each consecutive pair, and between the first pair and last pair in the
+ * array.
+ *
+ * @param pointArray an array of alternating x and y values which are the vertices of the polygon
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT if pointArray is null</li>
+ * </ul>	
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawPolygon(int[] pointArray) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (pointArray == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	checkGC(DRAW);
+	drawPolyLineSegment(pointArray, true, true);
+}
+
+void drawPolyLineSegment(int[] pointArray, boolean closed, boolean stroked) {
+	if (pointArray.length < 4) return;
+	int list = OS.gcnew_PointCollection(pointArray.length / 2);
+	double offset = 0;
+	if (stroked && (data.lineWidth == 0 || (data.lineWidth % 2) == 1)) offset = 0.5;
+	for (int i = 2; i < pointArray.length; i += 2) {
+		int point = OS.gcnew_Point(pointArray[i] + offset, pointArray[i + 1] + offset);
+		OS.PointCollection_Add(list, point);
+		OS.GCHandle_Free(point);
+	}
+	int poly = OS.gcnew_PolyLineSegment(list, stroked);
+	OS.GCHandle_Free(list);
+	int figure = OS.gcnew_PathFigure();
+	int startPoint = OS.gcnew_Point(pointArray[0] + offset, pointArray[1] + offset);
+	OS.PathFigure_StartPoint(figure, startPoint);
+	OS.PathFigure_IsClosed(figure, closed);
+	int segments = OS.PathFigure_Segments(figure);
+	OS.PathSegmentCollection_Add(segments, poly);
+	int path = OS.gcnew_PathGeometry();
+//	int mode = 0;
+//	switch (data.antialias) {
+//		case SWT.DEFAULT:
+//		case SWT.ON: mode = OS.EdgeMode_Unspecified; break;
+//		case SWT.OFF: mode = OS.EdgeMode_Aliased; break;
+//	}
+//	OS.RenderOptions_SetEdgeMode(path, mode);
+	if (!stroked) OS.PathGeometry_FillRule(path, data.fillRule == SWT.FILL_EVEN_ODD ? OS.FillRule_EvenOdd : OS.FillRule_Nonzero);
+	int figures = OS.PathGeometry_Figures(path);
+	OS.PathFigureCollection_Add(figures, figure);
+	OS.DrawingContext_DrawGeometry(handle, stroked ? 0 : data.currentBrush, stroked ? data.pen : 0, path);
+	OS.GCHandle_Free(figures);
+	OS.GCHandle_Free(path);
+	OS.GCHandle_Free(segments);
+	OS.GCHandle_Free(figure);
+	OS.GCHandle_Free(startPoint);
+	OS.GCHandle_Free(poly);
+}
+
+/** 
+ * Draws the polyline which is defined by the specified array
+ * of integer coordinates, using the receiver's foreground color. The array 
+ * contains alternating x and y values which are considered to represent
+ * points which are the corners of the polyline. Lines are drawn between
+ * each consecutive pair, but not between the first pair and last pair in
+ * the array.
+ *
+ * @param pointArray an array of alternating x and y values which are the corners of the polyline
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point array is null</li>
+ * </ul>	
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawPolyline(int[] pointArray) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (pointArray == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	checkGC(DRAW);
+	drawPolyLineSegment(pointArray, false, true);
+}
+
+/** 
+ * Draws the outline of the rectangle specified by the arguments,
+ * using the receiver's foreground color. The left and right edges
+ * of the rectangle are at <code>x</code> and <code>x + width</code>. 
+ * The top and bottom edges are at <code>y</code> and <code>y + height</code>. 
+ *
+ * @param x the x coordinate of the rectangle to be drawn
+ * @param y the y coordinate of the rectangle to be drawn
+ * @param width the width of the rectangle to be drawn
+ * @param height the height of the rectangle to be drawn
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawRectangle (int x, int y, int width, int height) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	checkGC(DRAW);
+	if (width < 0) {
+		x = x + width;
+		width = -width;
+	}
+	if (height < 0) {
+		y = y + height;
+		height = -height;
+	}
+	double offset = 0;
+	if (data.lineWidth == 0 || (data.lineWidth % 2) == 1) offset = 0.5;
+	int rect = OS.gcnew_Rect(x + offset, y + offset, width, height);
+	OS.DrawingContext_DrawRectangle(handle, 0, data.pen, rect);
+	OS.GCHandle_Free(rect);
+}
+
+/** 
+ * Draws the outline of the specified rectangle, using the receiver's
+ * foreground color. The left and right edges of the rectangle are at
+ * <code>rect.x</code> and <code>rect.x + rect.width</code>. The top 
+ * and bottom edges are at <code>rect.y</code> and 
+ * <code>rect.y + rect.height</code>. 
+ *
+ * @param rect the rectangle to draw
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the rectangle is null</li>
+ * </ul>	
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawRectangle (Rectangle rect) {
+	if (rect == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	drawRectangle (rect.x, rect.y, rect.width, rect.height);
+}
+
+/** 
+ * Draws the outline of the round-cornered rectangle specified by 
+ * the arguments, using the receiver's foreground color. The left and
+ * right edges of the rectangle are at <code>x</code> and <code>x + width</code>. 
+ * The top and bottom edges are at <code>y</code> and <code>y + height</code>.
+ * The <em>roundness</em> of the corners is specified by the 
+ * <code>arcWidth</code> and <code>arcHeight</code> arguments, which
+ * are respectively the width and height of the ellipse used to draw
+ * the corners.
+ *
+ * @param x the x coordinate of the rectangle to be drawn
+ * @param y the y coordinate of the rectangle to be drawn
+ * @param width the width of the rectangle to be drawn
+ * @param height the height of the rectangle to be drawn
+ * @param arcWidth the width of the arc
+ * @param arcHeight the height of the arc
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawRoundRectangle (int x, int y, int width, int height, int arcWidth, int arcHeight) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (arcWidth < 0 || arcHeight < 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	checkGC(DRAW);
+	if (width < 0) {
+		x = x + width;
+		width = -width;
+	}
+	if (height < 0) {
+		y = y + height;
+		height = -height;
+	}
+	if (arcWidth < 0) arcWidth = -arcWidth;
+	if (arcHeight < 0) arcHeight = -arcHeight;
+	double offset = 0;
+	if (data.lineWidth == 0 || (data.lineWidth % 2) == 1) offset = 0.5;
+	int rect = OS.gcnew_Rect(x + offset, y + offset, width, height);
+	OS.DrawingContext_DrawRoundedRectangle(handle, 0, data.pen, rect, arcWidth / 2f, arcHeight / 2f);
+	OS.GCHandle_Free(rect);
+}
+
+/** 
+ * Draws the given string, using the receiver's current font and
+ * foreground color. No tab expansion or carriage return processing
+ * will be performed. The background of the rectangular area where
+ * the string is being drawn will be filled with the receiver's
+ * background color.
+ *
+ * @param string the string to be drawn
+ * @param x the x coordinate of the top left corner of the rectangular area where the string is to be drawn
+ * @param y the y coordinate of the top left corner of the rectangular area where the string is to be drawn
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>	
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawString (String string, int x, int y) {
+	drawString(string, x, y, false);
+}
+
+/** 
+ * Draws the given string, using the receiver's current font and
+ * foreground color. No tab expansion or carriage return processing
+ * will be performed. If <code>isTransparent</code> is <code>true</code>,
+ * then the background of the rectangular area where the string is being
+ * drawn will not be modified, otherwise it will be filled with the
+ * receiver's background color.
+ *
+ * @param string the string to be drawn
+ * @param x the x coordinate of the top left corner of the rectangular area where the string is to be drawn
+ * @param y the y coordinate of the top left corner of the rectangular area where the string is to be drawn
+ * @param isTransparent if <code>true</code> the background will be transparent, otherwise it will be opaque
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>	
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawString (String string, int x, int y, boolean isTransparent) {
+	drawText(string, x, y, isTransparent ? SWT.DRAW_TRANSPARENT : 0);
+}
+
+/** 
+ * Draws the given string, using the receiver's current font and
+ * foreground color. Tab expansion and carriage return processing
+ * are performed. The background of the rectangular area where
+ * the text is being drawn will be filled with the receiver's
+ * background color.
+ *
+ * @param string the string to be drawn
+ * @param x the x coordinate of the top left corner of the rectangular area where the text is to be drawn
+ * @param y the y coordinate of the top left corner of the rectangular area where the text is to be drawn
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>	
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawText (String string, int x, int y) {
+	drawText(string, x, y, SWT.DRAW_DELIMITER | SWT.DRAW_TAB);
+}
+
+/** 
+ * Draws the given string, using the receiver's current font and
+ * foreground color. Tab expansion and carriage return processing
+ * are performed. If <code>isTransparent</code> is <code>true</code>,
+ * then the background of the rectangular area where the text is being
+ * drawn will not be modified, otherwise it will be filled with the
+ * receiver's background color.
+ *
+ * @param string the string to be drawn
+ * @param x the x coordinate of the top left corner of the rectangular area where the text is to be drawn
+ * @param y the y coordinate of the top left corner of the rectangular area where the text is to be drawn
+ * @param isTransparent if <code>true</code> the background will be transparent, otherwise it will be opaque
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>	
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawText (String string, int x, int y, boolean isTransparent) {
+	int flags = SWT.DRAW_DELIMITER | SWT.DRAW_TAB;
+	if (isTransparent) flags |= SWT.DRAW_TRANSPARENT;
+	drawText(string, x, y, flags);
+}
+
+/** 
+ * Draws the given string, using the receiver's current font and
+ * foreground color. Tab expansion, line delimiter and mnemonic
+ * processing are performed according to the specified flags. If
+ * <code>flags</code> includes <code>DRAW_TRANSPARENT</code>,
+ * then the background of the rectangular area where the text is being
+ * drawn will not be modified, otherwise it will be filled with the
+ * receiver's background color.
+ * <p>
+ * The parameter <code>flags</code> may be a combination of:
+ * <dl>
+ * <dt><b>DRAW_DELIMITER</b></dt>
+ * <dd>draw multiple lines</dd>
+ * <dt><b>DRAW_TAB</b></dt>
+ * <dd>expand tabs</dd>
+ * <dt><b>DRAW_MNEMONIC</b></dt>
+ * <dd>underline the mnemonic character</dd>
+ * <dt><b>DRAW_TRANSPARENT</b></dt>
+ * <dd>transparent background</dd>
+ * </dl>
+ * </p>
+ *
+ * @param string the string to be drawn
+ * @param x the x coordinate of the top left corner of the rectangular area where the text is to be drawn
+ * @param y the y coordinate of the top left corner of the rectangular area where the text is to be drawn
+ * @param flags the flags specifying how to process the text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>	
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void drawText (String string, int x, int y, int flags) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (string == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	int length = string.length ();
+	if (length == 0) return;
+	checkGC(FONT | FOREGROUND | ALPHA | CLIPPING | TRANSFORM | ((flags & SWT.DRAW_TRANSPARENT) != 0 ? 0 : BACKGROUND));
+	char [] buffer = new char [length + 1];
+	string.getChars(0, length, buffer, 0);
+	int mask = SWT.DRAW_DELIMITER | SWT.DRAW_TAB | SWT.DRAW_MNEMONIC;
+	int mnemonic = -1;
+	if ((flags & mask) != mask) {
+		for (int i = 0, j = 0; i < buffer.length; i++) {
+			char c = buffer[i];
+			switch (c) {
+				case '&': {
+					if ((flags & SWT.DRAW_MNEMONIC) != 0) {
+						if (i + 1 < length) {
+							if (buffer[i + 1] == '&') {
+								i++;
+							} else {
+								if (mnemonic == -1) mnemonic = j;
+							}
+						}
+						continue;
+					}
+					break;
+				}
+				case '\r':
+				case '\n':
+					if ((flags & SWT.DRAW_DELIMITER) == 0) continue;
+					break;
+				case '\t':
+					if ((flags & SWT.DRAW_TAB) == 0) continue;
+					break;
+			}
+			buffer[j++] = c;
+		}
+	}
+	int str = OS.gcnew_String (buffer);
+	int culture = OS.CultureInfo_CurrentUICulture();
+	Font font = data.font;
+	int direction = (data.style & SWT.RIGHT_TO_LEFT) != 0 ? OS.FlowDirection_RightToLeft : OS.FlowDirection_LeftToRight;
+	int brush = OS.Pen_Brush(data.pen);
+	int text = OS.gcnew_FormattedText(str, culture, direction, font.handle, font.size, brush);
+	int point = OS.gcnew_Point(x, y);
+	if (mnemonic != -1) {
+		int underline = OS.TextDecorations_Underline();
+		OS.FormattedText_SetTextDecorations(text, underline, mnemonic, 1);
+		OS.GCHandle_Free(underline);
+	}
+	if ((flags & SWT.DRAW_TRANSPARENT) == 0) {
+		double width = OS.FormattedText_WidthIncludingTrailingWhitespace(text);
+		double height = OS.FormattedText_Height(text);
+		int rect = OS.gcnew_Rect(x, y, width, height);
+		OS.DrawingContext_DrawRectangle(handle, data.currentBrush, 0, rect);
+		OS.GCHandle_Free(rect);
+
+	}
+	OS.DrawingContext_DrawText(handle, text, point);
+	OS.GCHandle_Free(point);
+	OS.GCHandle_Free(culture);
+	OS.GCHandle_Free(str);
+	OS.GCHandle_Free(brush);
+	OS.GCHandle_Free(text);
+}
+
+/**
+ * Compares the argument to the receiver, and returns true
+ * if they represent the <em>same</em> object using a class
+ * specific comparison.
+ *
+ * @param object the object to compare with this object
+ * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
+ *
+ * @see #hashCode
+ */
+public boolean equals (Object object) {
+	return (object == this) || ((object instanceof GC) && (handle == ((GC)object).handle));
+}
+
+/**
+ * Fills the interior of a circular or elliptical arc within
+ * the specified rectangular area, with the receiver's background
+ * color.
+ * <p>
+ * The resulting arc begins at <code>startAngle</code> and extends  
+ * for <code>arcAngle</code> degrees, using the current color.
+ * Angles are interpreted such that 0 degrees is at the 3 o'clock
+ * position. A positive value indicates a counter-clockwise rotation
+ * while a negative value indicates a clockwise rotation.
+ * </p><p>
+ * The center of the arc is the center of the rectangle whose origin 
+ * is (<code>x</code>, <code>y</code>) and whose size is specified by the 
+ * <code>width</code> and <code>height</code> arguments. 
+ * </p><p>
+ * The resulting arc covers an area <code>width + 1</code> pixels wide
+ * by <code>height + 1</code> pixels tall.
+ * </p>
+ *
+ * @param x the x coordinate of the upper-left corner of the arc to be filled
+ * @param y the y coordinate of the upper-left corner of the arc to be filled
+ * @param width the width of the arc to be filled
+ * @param height the height of the arc to be filled
+ * @param startAngle the beginning angle
+ * @param arcAngle the angular extent of the arc, relative to the start angle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #drawArc
+ */
+public void fillArc (int x, int y, int width, int height, int startAngle, int arcAngle) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	checkGC(FILL);
+	if (width < 0) {
+		x = x + width;
+		width = -width;
+	}
+	if (height < 0) {
+		y = y + height;
+		height = -height;
+	}
+	if (width == 0 || height == 0 || arcAngle == 0) return;
+	if (arcAngle >= 360 || arcAngle <= -360) {
+		int center = OS.gcnew_Point(x + width / 2f, y + height / 2f);
+		OS.DrawingContext_DrawEllipse(handle, data.currentBrush, 0, center, width / 2f, height / 2f);
+		OS.GCHandle_Free(center);
+		return;
+	}
+	boolean isNegative = arcAngle < 0;
+	boolean isLargeAngle = arcAngle > 180 || arcAngle < -180;
+	arcAngle = arcAngle + startAngle;
+	if (isNegative) {
+		// swap angles
+	   	int tmp = startAngle;
+		startAngle = arcAngle;
+		arcAngle = tmp;
+	}
+	double x1 = Math.cos(startAngle * Math.PI / 180) * width/2.0 + x + width/2.0;
+	double y1 = -1 * Math.sin(startAngle * Math.PI / 180) * height/2.0 + y + height/2.0;
+	double x2 = Math.cos(arcAngle * Math.PI / 180) * width/2.0 + x + width/2.0;
+	double y2 = -1 * Math.sin(arcAngle * Math.PI / 180) * height/2.0 + y + height/2.0; 
+	int startPoint = OS.gcnew_Point(x1, y1);
+	int endPoint = OS.gcnew_Point(x2, y2);
+	int center = OS.gcnew_Point(x + width / 2.0, y + height / 2.0);
+	int size = OS.gcnew_Size(width / 2.0, height / 2.0);
+	int arc = OS.gcnew_ArcSegment(endPoint, size, 0, isLargeAngle, OS.SweepDirection_Clockwise, false);
+	int line = OS.gcnew_LineSegment(center, false);
+	int figure = OS.gcnew_PathFigure();
+	OS.PathFigure_StartPoint(figure, startPoint);
+	int segments = OS.PathFigure_Segments(figure);
+	OS.PathSegmentCollection_Add(segments, arc);
+	OS.PathSegmentCollection_Add(segments, line);
+	int path = OS.gcnew_PathGeometry();
+	int figures = OS.PathGeometry_Figures(path);
+	OS.PathFigureCollection_Add(figures, figure);
+	OS.DrawingContext_DrawGeometry(handle, data.currentBrush, 0, path);
+	OS.GCHandle_Free(figures);
+	OS.GCHandle_Free(path);
+	OS.GCHandle_Free(segments);
+	OS.GCHandle_Free(figure);
+	OS.GCHandle_Free(arc);
+	OS.GCHandle_Free(line);
+	OS.GCHandle_Free(size);
+	OS.GCHandle_Free(endPoint);
+	OS.GCHandle_Free(startPoint);
+}
+
+/**
+ * Fills the interior of the specified rectangle with a gradient
+ * sweeping from left to right or top to bottom progressing
+ * from the receiver's foreground color to its background color.
+ *
+ * @param x the x coordinate of the rectangle to be filled
+ * @param y the y coordinate of the rectangle to be filled
+ * @param width the width of the rectangle to be filled, may be negative
+ *        (inverts direction of gradient if horizontal)
+ * @param height the height of the rectangle to be filled, may be negative
+ *        (inverts direction of gradient if vertical)
+ * @param vertical if true sweeps from top to bottom, else 
+ *        sweeps from left to right
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #drawRectangle(int, int, int, int)
+ */
+public void fillGradientRectangle(int x, int y, int width, int height, boolean vertical) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (width == 0 || height == 0) return;
+	checkGC(FILL);
+
+	int fromColor = data.foreground;
+	int toColor   = data.background;
+
+	boolean swapColors = false;
+	if (width < 0) {
+		x += width; width = -width;
+		if (! vertical) swapColors = true;
+	}
+	if (height < 0) {
+		y += height; height = -height;
+		if (vertical) swapColors = true;
+	}
+	if (swapColors) {
+		int temp = fromColor;
+		fromColor = toColor;
+		toColor   = temp;
+	}
+	int brush = OS.gcnew_LinearGradientBrush(fromColor, toColor, vertical ? 90 : 0);
+	int rect = OS.gcnew_Rect(x, y, width, height);
+	OS.DrawingContext_DrawRectangle(handle, brush, 0, rect);
+	OS.GCHandle_Free(rect);
+	OS.GCHandle_Free(brush);
+}
+
+/** 
+ * Fills the interior of an oval, within the specified
+ * rectangular area, with the receiver's background
+ * color.
+ *
+ * @param x the x coordinate of the upper left corner of the oval to be filled
+ * @param y the y coordinate of the upper left corner of the oval to be filled
+ * @param width the width of the oval to be filled
+ * @param height the height of the oval to be filled
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #drawOval
+ */	 
+public void fillOval (int x, int y, int width, int height) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	checkGC(FILL);
+	if (width < 0) {
+		x = x + width;
+		width = -width;
+	}
+	if (height < 0) {
+		y = y + height;
+		height = -height;
+	}
+	int center = OS.gcnew_Point(x + width / 2f, y + height / 2f);
+	OS.DrawingContext_DrawEllipse(handle, data.currentBrush, 0, center, width / 2f, height / 2f);
+	OS.GCHandle_Free(center);
+}
+
+/** 
+ * Fills the path described by the parameter.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ *
+ * @param path the path to fill
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parameter is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * 
+ * @see Path
+ * 
+ * @since 3.1
+ */
+public void fillPath (Path path) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (path == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (path.handle == 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	checkGC(FILL);
+	OS.PathGeometry_FillRule(path.handle, data.fillRule == SWT.FILL_EVEN_ODD ? OS.FillRule_EvenOdd : OS.FillRule_Nonzero);
+	OS.DrawingContext_DrawGeometry(handle, data.currentBrush, 0, path.handle);
+}
+
+/** 
+ * Fills the interior of the closed polygon which is defined by the
+ * specified array of integer coordinates, using the receiver's
+ * background color. The array contains alternating x and y values
+ * which are considered to represent points which are the vertices of
+ * the polygon. Lines are drawn between each consecutive pair, and
+ * between the first pair and last pair in the array.
+ *
+ * @param pointArray an array of alternating x and y values which are the vertices of the polygon
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT if pointArray is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #drawPolygon	
+ */
+public void fillPolygon(int[] pointArray) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (pointArray == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	checkGC(FILL);
+	drawPolyLineSegment(pointArray, true, false);
+}
+
+/** 
+ * Fills the interior of the rectangle specified by the arguments,
+ * using the receiver's background color. 
+ *
+ * @param x the x coordinate of the rectangle to be filled
+ * @param y the y coordinate of the rectangle to be filled
+ * @param width the width of the rectangle to be filled
+ * @param height the height of the rectangle to be filled
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #drawRectangle(int, int, int, int)
+ */
+public void fillRectangle (int x, int y, int width, int height) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	checkGC(FILL);
+	if (width < 0) {
+		x = x + width;
+		width = -width;
+	}
+	if (height < 0) {
+		y = y + height;
+		height = -height;
+	}
+	int rect = OS.gcnew_Rect(x, y, width, height);
+	OS.DrawingContext_DrawRectangle(handle, data.currentBrush, 0, rect);
+	OS.GCHandle_Free(rect);
+}
+
+/** 
+ * Fills the interior of the specified rectangle, using the receiver's
+ * background color. 
+ *
+ * @param rect the rectangle to be filled
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the rectangle is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #drawRectangle(int, int, int, int)
+ */
+public void fillRectangle (Rectangle rect) {
+	if (rect == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	fillRectangle (rect.x, rect.y, rect.width, rect.height);
+}
+
+/** 
+ * Fills the interior of the round-cornered rectangle specified by 
+ * the arguments, using the receiver's background color. 
+ *
+ * @param x the x coordinate of the rectangle to be filled
+ * @param y the y coordinate of the rectangle to be filled
+ * @param width the width of the rectangle to be filled
+ * @param height the height of the rectangle to be filled
+ * @param arcWidth the width of the arc
+ * @param arcHeight the height of the arc
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #drawRoundRectangle
+ */
+public void fillRoundRectangle (int x, int y, int width, int height, int arcWidth, int arcHeight) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	checkGC(FILL);
+	if (width < 0) {
+		x = x + width;
+		width = -width;
+	}
+	if (height < 0) {
+		y = y + height;
+		height = -height;
+	}
+	if (arcWidth < 0) arcWidth = -arcWidth;
+	if (arcHeight < 0) arcHeight = -arcHeight;
+	int rect = OS.gcnew_Rect(x, y, width, height);
+	OS.DrawingContext_DrawRoundedRectangle(handle, data.currentBrush, 0, rect, arcWidth / 2f, arcHeight / 2f);
+	OS.GCHandle_Free(rect);
+}
+
+/**
+ * Returns the <em>advance width</em> of the specified character in
+ * the font which is currently selected into the receiver.
+ * <p>
+ * The advance width is defined as the horizontal distance the cursor
+ * should move after printing the character in the selected font.
+ * </p>
+ *
+ * @param ch the character to measure
+ * @return the distance in the x direction to move past the character before painting the next
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getAdvanceWidth(char ch) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	//NOT DONE
+	return stringExtent(new String(new char[]{ch})).x;
+}
+
+/**
+ * Returns <code>true</code> if receiver is using the operating system's
+ * advanced graphics subsystem.  Otherwise, <code>false</code> is returned
+ * to indicate that normal graphics are in use.
+ * <p>
+ * Advanced graphics may not be installed for the operating system.  In this
+ * case, <code>false</code> is always returned.  Some operating system have
+ * only one graphics subsystem.  If this subsystem supports advanced graphics,
+ * then <code>true</code> is always returned.  If any graphics operation such
+ * as alpha, antialias, patterns, interpolation, paths, clipping or transformation
+ * has caused the receiver to switch from regular to advanced graphics mode,
+ * <code>true</code> is returned.  If the receiver has been explicitly switched
+ * to advanced mode and this mode is supported, <code>true</code> is returned.
+ * </p>
+ *
+ * @return the advanced value
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #setAdvanced
+ * 
+ * @since 3.1
+ */
+public boolean getAdvanced() {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return true;
+}
+
+/**
+ * Returns the receiver's alpha value. The alpha value
+ * is between 0 (transparent) and 255 (opaque).
+ *
+ * @return the alpha value
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public int getAlpha() {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.alpha;
+}
+
+/**
+ * Returns the receiver's anti-aliasing setting value, which will be
+ * one of <code>SWT.DEFAULT</code>, <code>SWT.OFF</code> or
+ * <code>SWT.ON</code>. Note that this controls anti-aliasing for all
+ * <em>non-text drawing</em> operations.
+ *
+ * @return the anti-aliasing setting
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #getTextAntialias
+ * 
+ * @since 3.1
+ */
+public int getAntialias() {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.antialias;
+}
+
+/** 
+ * Returns the background color.
+ *
+ * @return the receiver's background color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Color getBackground() {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return Color.wpf_new(data.device, data.background);
+}
+
+/** 
+ * Returns the background pattern. The default value is
+ * <code>null</code>.
+ *
+ * @return the receiver's background pattern
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see Pattern
+ * 
+ * @since 3.1
+ */
+public Pattern getBackgroundPattern() {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.backgroundPattern;
+}
+
+/**
+ * Returns the width of the specified character in the font
+ * selected into the receiver. 
+ * <p>
+ * The width is defined as the space taken up by the actual
+ * character, not including the leading and tailing whitespace
+ * or overhang.
+ * </p>
+ *
+ * @param ch the character to measure
+ * @return the width of the character
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getCharWidth(char ch) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	//NOT DONE
+	return stringExtent(new String(new char[]{ch})).x;
+}
+
+/** 
+ * Returns the bounding rectangle of the receiver's clipping
+ * region. If no clipping region is set, the return value
+ * will be a rectangle which covers the entire bounds of the
+ * object the receiver is drawing on.
+ *
+ * @return the bounding rectangle of the clipping region
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Rectangle getClipping() {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	int x = 0, y = 0, width = 0, height = 0;
+	int visualType = OS.Object_GetType(data.visual);
+	int drawingVisualType = OS.DrawingVisual_typeid();
+	if (OS.Object_Equals(visualType, drawingVisualType)) {			
+		int clip = OS.ContainerVisual_Clip(data.visual);
+		int rect = OS.Geometry_Bounds(clip);
+		width = (int)OS.Rect_Width(rect);
+		height = (int)OS.Rect_Height(rect);
+		OS.GCHandle_Free(rect);
+		OS.GCHandle_Free(clip);
+	} else {
+		width = (int)OS.FrameworkElement_ActualWidth(data.visual);
+		height = (int)OS.FrameworkElement_ActualHeight(data.visual);
+	}
+	OS.GCHandle_Free(drawingVisualType);
+	OS.GCHandle_Free(visualType);
+	if (data.clip != 0) {
+		int bounds = OS.gcnew_Rect(x, y, width, height);
+		int rect = OS.Geometry_Bounds(data.clip);
+		OS.Rect_Intersect(bounds, rect);
+		x = (int)OS.Rect_X(bounds);
+		y = (int)OS.Rect_Y(bounds);
+		width = (int)OS.Rect_Width(bounds);
+		height = (int)OS.Rect_Height(bounds);
+		OS.GCHandle_Free(rect);
+		OS.GCHandle_Free(bounds);
+	}
+	return new Rectangle(x, y, width, height);
+}
+
+/** 
+ * Sets the region managed by the argument to the current
+ * clipping region of the receiver.
+ *
+ * @param region the region to fill with the clipping region
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the region is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the region is disposed</li>
+ * </ul>	
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void getClipping (Region region) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (region == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	if (region.isDisposed()) SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	int bounds;
+	int visualType = OS.Object_GetType(data.visual);
+	int drawingVisualType = OS.DrawingVisual_typeid();
+	if (OS.Object_Equals(visualType, drawingVisualType)) {			
+		bounds = OS.ContainerVisual_Clip(data.visual);
+	} else {
+		double width = OS.FrameworkElement_ActualWidth(data.visual);
+		double height = OS.FrameworkElement_ActualHeight(data.visual);
+		int rect = OS.gcnew_Rect(0, 0, width, height);
+		bounds = OS.gcnew_RectangleGeometry(rect);
+		OS.GCHandle_Free(rect);
+	}
+	OS.GCHandle_Free(drawingVisualType);
+	OS.GCHandle_Free(visualType);
+	int geometries = OS.GeometryGroup_Children(region.handle);
+	OS.GeometryCollection_Clear(geometries);
+	if (data.clip != 0) {
+		int clip = OS.Geometry_GetFlattenedPathGeometry(data.clip);
+		int newGeometry = OS.gcnew_CombinedGeometry(OS.GeometryCombineMode_Intersect, bounds, clip);
+		OS.GeometryCollection_Add(geometries, newGeometry);
+		OS.GCHandle_Free(clip);
+		OS.GCHandle_Free(newGeometry);
+	} else {
+		OS.GeometryCollection_Add(geometries, bounds);
+	}
+	OS.GCHandle_Free(bounds);
+	OS.GCHandle_Free(geometries);
+}
+
+/** 
+ * Returns the receiver's fill rule, which will be one of
+ * <code>SWT.FILL_EVEN_ODD</code> or <code>SWT.FILL_WINDING</code>.
+ *
+ * @return the receiver's fill rule
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public int getFillRule() {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.fillRule;
+}
+
+/** 
+ * Returns the font currently being used by the receiver
+ * to draw and measure text.
+ *
+ * @return the receiver's font
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Font getFont () {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.font;
+}
+
+/**
+ * Returns a FontMetrics which contains information
+ * about the font currently being used by the receiver
+ * to draw and measure text.
+ *
+ * @return font metrics for the receiver's font
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public FontMetrics getFontMetrics() {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	checkGC(FONT);
+	//TODO - find a better way of getting font metrics
+	String string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+	int length = string.length();
+	char [] buffer = new char [length + 1];
+	string.getChars (0, length, buffer, 0);
+	int str = OS.gcnew_String (buffer);
+	int culture = OS.CultureInfo_CurrentUICulture();
+	Font font = data.font;
+	int direction = (data.style & SWT.RIGHT_TO_LEFT) != 0 ? OS.FlowDirection_RightToLeft : OS.FlowDirection_LeftToRight;
+	int brush = OS.Brushes_White();
+	int text = OS.gcnew_FormattedText(str, culture, direction, font.handle, font.size, brush);
+	double width = OS.FormattedText_WidthIncludingTrailingWhitespace(text);
+	double height = OS.FormattedText_Height(text);
+	double baseline = OS.FormattedText_Baseline(text);
+	OS.GCHandle_Free(text);
+	OS.GCHandle_Free(brush);
+	OS.GCHandle_Free(culture);
+	OS.GCHandle_Free(str);
+	return FontMetrics.wpf_new((int)baseline, (int)(height - baseline), (int)width / string.length(), 0, (int)height);
+}
+
+/** 
+ * Returns the receiver's foreground color.
+ *
+ * @return the color used for drawing foreground things
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Color getForeground() {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return Color.wpf_new(data.device, data.foreground);
+}
+
+/** 
+ * Returns the foreground pattern. The default value is
+ * <code>null</code>.
+ *
+ * @return the receiver's foreground pattern
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see Pattern
+ * 
+ * @since 3.1
+ */
+public Pattern getForegroundPattern() {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.foregroundPattern;
+}
+
+/** 
+ * Returns the GCData.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>GC</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @return the receiver's GCData
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see GCData
+ * 
+ * @since 3.2
+ * @noreference This method is not intended to be referenced by clients.
+ */
+public GCData getGCData() {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data;
+}
+
+/** 
+ * Returns the receiver's interpolation setting, which will be one of
+ * <code>SWT.DEFAULT</code>, <code>SWT.NONE</code>, 
+ * <code>SWT.LOW</code> or <code>SWT.HIGH</code>.
+ *
+ * @return the receiver's interpolation setting
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public int getInterpolation() {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.interpolation;
+}
+
+/** 
+ * Returns the receiver's line attributes.
+ *
+ * @return the line attributes used for drawing lines
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.3 
+ */
+public LineAttributes getLineAttributes() {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	float[] dashes = null;
+	if (data.lineDashes != null) {
+		dashes = new float[data.lineDashes.length];
+		System.arraycopy(data.lineDashes, 0, dashes, 0, dashes.length);
+	}
+	return new LineAttributes(data.lineWidth, data.lineCap, data.lineJoin, data.lineStyle, dashes, data.lineDashesOffset, data.lineMiterLimit);
+}
+
+/** 
+ * Returns the receiver's line cap style, which will be one
+ * of the constants <code>SWT.CAP_FLAT</code>, <code>SWT.CAP_ROUND</code>,
+ * or <code>SWT.CAP_SQUARE</code>.
+ *
+ * @return the cap style used for drawing lines
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1 
+ */
+public int getLineCap() {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.lineCap;
+}
+
+/** 
+ * Returns the receiver's line dash style. The default value is
+ * <code>null</code>.
+ *
+ * @return the line dash style used for drawing lines
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1 
+ */
+public int[] getLineDash() {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (data.lineDashes == null) return null;
+	int[] lineDashes = new int[data.lineDashes.length];
+	System.arraycopy(data.lineDashes, 0, lineDashes, 0, lineDashes.length);
+	return lineDashes;	
+}
+
+/** 
+ * Returns the receiver's line join style, which will be one
+ * of the constants <code>SWT.JOIN_MITER</code>, <code>SWT.JOIN_ROUND</code>,
+ * or <code>SWT.JOIN_BEVEL</code>.
+ *
+ * @return the join style used for drawing lines
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1 
+ */
+public int getLineJoin() {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.lineJoin;
+}
+
+/** 
+ * Returns the receiver's line style, which will be one
+ * of the constants <code>SWT.LINE_SOLID</code>, <code>SWT.LINE_DASH</code>,
+ * <code>SWT.LINE_DOT</code>, <code>SWT.LINE_DASHDOT</code> or
+ * <code>SWT.LINE_DASHDOTDOT</code>.
+ *
+ * @return the style used for drawing lines
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getLineStyle() {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.lineStyle;
+}
+
+/** 
+ * Returns the width that will be used when drawing lines
+ * for all of the figure drawing operations (that is,
+ * <code>drawLine</code>, <code>drawRectangle</code>, 
+ * <code>drawPolyline</code>, and so forth.
+ *
+ * @return the receiver's line width 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getLineWidth() {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return (int)data.lineWidth;
+}
+
+/**
+ * Returns the receiver's style information.
+ * <p>
+ * Note that the value which is returned by this method <em>may
+ * not match</em> the value which was provided to the constructor
+ * when the receiver was created. This can occur when the underlying
+ * operating system does not support a particular combination of
+ * requested styles. 
+ * </p>
+ *
+ * @return the style bits
+ *  
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *   
+ * @since 2.1.2
+ */
+public int getStyle () {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.style;
+}
+
+/**
+ * Returns the receiver's text drawing anti-aliasing setting value,
+ * which will be one of <code>SWT.DEFAULT</code>, <code>SWT.OFF</code> or
+ * <code>SWT.ON</code>. Note that this controls anti-aliasing
+ * <em>only</em> for text drawing operations.
+ *
+ * @return the anti-aliasing setting
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #getAntialias
+ * 
+ * @since 3.1
+ */
+public int getTextAntialias() {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.textAntialias;
+}
+
+/** 
+ * Sets the parameter to the transform that is currently being
+ * used by the receiver.
+ *
+ * @param transform the destination to copy the transform into
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parameter is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see Transform
+ * 
+ * @since 3.1
+ */
+public void getTransform(Transform transform) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (transform == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (transform.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (data.transform != 0) {
+		OS.MatrixTransform_Matrix(transform.handle, data.transform);
+	} else {
+		transform.setElements(1, 0, 0, 1, 0, 0);
+	}
+}
+
+/** 
+ * Returns <code>true</code> if this GC is drawing in the mode
+ * where the resulting color in the destination is the
+ * <em>exclusive or</em> of the color values in the source
+ * and the destination, and <code>false</code> if it is
+ * drawing in the mode where the destination color is being
+ * replaced with the source color value.
+ *
+ * @return <code>true</code> true if the receiver is in XOR mode, and false otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public boolean getXORMode() {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.xorMode;
+}
+
+void init(Drawable drawable, GCData data, int hDC) {
+	int foreground = data.foreground;
+	if (foreground != -1) data.state &= ~FOREGROUND;
+	int background = data.background;
+	if (background != 0) data.state &= ~BACKGROUND;
+	Font font = data.font;
+	if (font != null) data.state &= ~FONT;
+	Image image = data.image;
+	if (image != null) image.memGC = this;
+//	int layout = data.layout;
+//	if (layout != -1) {
+//		if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION(4, 10)) {
+//			int flags = OS.GetLayout(hDC);
+//			if ((flags & OS.LAYOUT_RTL) != (layout & OS.LAYOUT_RTL)) {
+//				flags &= ~OS.LAYOUT_RTL;
+//				OS.SetLayout(hDC, flags | layout);
+//			}
+//			if ((data.style & SWT.RIGHT_TO_LEFT) != 0) data.style |= SWT.MIRRORED;
+//		}
+//	}	
+	this.drawable = drawable;
+	this.data = data;
+	handle = hDC;
+}
+
+/**
+ * Returns an integer hash code for the receiver. Any two 
+ * objects that return <code>true</code> when passed to 
+ * <code>equals</code> must return the same value for this
+ * method.
+ *
+ * @return the receiver's hash
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #equals
+ */
+public int hashCode () {
+	return handle;
+}
+
+/**
+ * Returns <code>true</code> if the receiver has a clipping
+ * region set into it, and <code>false</code> otherwise.
+ * If this method returns false, the receiver will draw on all
+ * available space in the destination. If it returns true, 
+ * it will draw only in the area that is covered by the region
+ * that can be accessed with <code>getClipping(region)</code>.
+ *
+ * @return <code>true</code> if the GC has a clipping region, and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public boolean isClipped() {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return data.clip != 0;
+}
+
+/**
+ * Returns <code>true</code> if the GC has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the GC.
+ * When a GC has been disposed, it is an error to
+ * invoke any other method using the GC.
+ *
+ * @return <code>true</code> when the GC is disposed and <code>false</code> otherwise
+ */
+public boolean isDisposed() {
+	return handle == 0;
+}
+
+/**
+ * Sets the receiver to always use the operating system's advanced graphics
+ * subsystem for all graphics operations if the argument is <code>true</code>.
+ * If the argument is <code>false</code>, the advanced graphics subsystem is 
+ * no longer used, advanced graphics state is cleared and the normal graphics
+ * subsystem is used from now on.
+ * <p>
+ * Normally, the advanced graphics subsystem is invoked automatically when
+ * any one of the alpha, antialias, patterns, interpolation, paths, clipping
+ * or transformation operations in the receiver is requested.  When the receiver
+ * is switched into advanced mode, the advanced graphics subsystem performs both
+ * advanced and normal graphics operations.  Because the two subsystems are
+ * different, their output may differ.  Switching to advanced graphics before
+ * any graphics operations are performed ensures that the output is consistent.
+ * </p><p>
+ * Advanced graphics may not be installed for the operating system.  In this
+ * case, this operation does nothing.  Some operating system have only one
+ * graphics subsystem, so switching from normal to advanced graphics does
+ * nothing.  However, switching from advanced to normal graphics will always
+ * clear the advanced graphics state, even for operating systems that have
+ * only one graphics subsystem.
+ * </p>
+ *
+ * @param advanced the new advanced graphics state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #setAlpha
+ * @see #setAntialias
+ * @see #setBackgroundPattern
+ * @see #setClipping(Path)
+ * @see #setForegroundPattern
+ * @see #setLineAttributes
+ * @see #setInterpolation
+ * @see #setTextAntialias
+ * @see #setTransform
+ * @see #getAdvanced
+ * 
+ * @since 3.1
+ */
+public void setAdvanced(boolean advanced) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (!advanced) {
+		setAlpha(0xFF);
+		setAntialias(SWT.DEFAULT);
+		setBackgroundPattern(null);
+		setClipping((Rectangle)null);
+		setForegroundPattern(null);
+		setInterpolation(SWT.DEFAULT);
+		setTextAntialias(SWT.DEFAULT);
+		setTransform(null);
+	}
+}
+
+/**
+ * Sets the receiver's anti-aliasing value to the parameter, 
+ * which must be one of <code>SWT.DEFAULT</code>, <code>SWT.OFF</code>
+ * or <code>SWT.ON</code>. Note that this controls anti-aliasing for all
+ * <em>non-text drawing</em> operations.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ *
+ * @param antialias the anti-aliasing setting
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter is not one of <code>SWT.DEFAULT</code>,
+ *                                 <code>SWT.OFF</code> or <code>SWT.ON</code></li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * 
+ * @see #getAdvanced
+ * @see #setAdvanced
+ * @see #setTextAntialias
+ * 
+ * @since 3.1
+ */
+public void setAntialias(int antialias) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	switch (antialias) {
+		case SWT.DEFAULT:
+		case SWT.OFF:
+		case SWT.ON:
+			break;
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	data.antialias = antialias;
+}
+
+/**
+ * Sets the receiver's alpha value which must be
+ * between 0 (transparent) and 255 (opaque).
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * @param alpha the alpha value
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * 
+ * @see #getAdvanced
+ * @see #setAdvanced
+ * 
+ * @since 3.1
+ */
+public void setAlpha(int alpha) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	data.alpha = alpha & 0xFF;
+	data.state &= ~ALPHA;
+}
+
+/**
+ * Sets the background color. The background color is used
+ * for fill operations and as the background color when text
+ * is drawn.
+ *
+ * @param color the new background color for the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the color is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the color has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setBackground (Color color) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (color == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (color.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (data.backgroundPattern == null && data.background == color.handle) return;
+	data.backgroundPattern = null;
+	data.background = color.handle;
+	data.state &= ~BACKGROUND;
+}
+
+/** 
+ * Sets the background pattern. The default value is <code>null</code>.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param pattern the new background pattern
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * 
+ * @see Pattern
+ * @see #getAdvanced
+ * @see #setAdvanced
+ * 
+ * @since 3.1
+ */
+public void setBackgroundPattern (Pattern pattern) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (pattern != null && pattern.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (data.backgroundPattern == pattern) return;
+	data.backgroundPattern = pattern;
+	data.state &= ~BACKGROUND;
+}
+
+/**
+ * Sets the area of the receiver which can be changed
+ * by drawing operations to the rectangular area specified
+ * by the arguments.
+ *
+ * @param x the x coordinate of the clipping rectangle
+ * @param y the y coordinate of the clipping rectangle
+ * @param width the width of the clipping rectangle
+ * @param height the height of the clipping rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setClipping (int x, int y, int width, int height) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (width < 0) {
+		x = x + width;
+		width = -width;
+	}
+	if (height < 0) {
+		y = y + height;
+		height = -height;
+	}
+	int rect = OS.gcnew_Rect(x, y, width, height);
+	int clip = OS.gcnew_RectangleGeometry(rect);
+	OS.GCHandle_Free(rect);
+	if (data.clip != 0) OS.GCHandle_Free(data.clip);
+	data.clip = clip;
+	data.state &= ~CLIPPING;
+}
+
+/**
+ * Sets the area of the receiver which can be changed
+ * by drawing operations to the path specified
+ * by the argument.  
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param path the clipping path.
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the path has been disposed</li>
+ * </ul> 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * 
+ * @see Path
+ * @see #getAdvanced
+ * @see #setAdvanced
+ * 
+ * @since 3.1
+ */
+public void setClipping (Path path) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (path != null && path.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (data.clip != 0) OS.GCHandle_Free(data.clip);
+	data.clip = path != null ? OS.Geometry_Clone(path.handle) : 0;
+	data.state &= ~CLIPPING;
+}
+
+/**
+ * Sets the area of the receiver which can be changed
+ * by drawing operations to the rectangular area specified
+ * by the argument.  Specifying <code>null</code> for the
+ * rectangle reverts the receiver's clipping area to its
+ * original value.
+ *
+ * @param rect the clipping rectangle or <code>null</code>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setClipping (Rectangle rect) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (rect == null) {
+		if (data.clip != 0) OS.GCHandle_Free(data.clip);
+		data.clip = 0;
+		data.state &= ~CLIPPING;
+	} else {
+		setClipping(rect.x, rect.y, rect.width, rect.height);
+	}
+}
+
+/**
+ * Sets the area of the receiver which can be changed
+ * by drawing operations to the region specified
+ * by the argument.  Specifying <code>null</code> for the
+ * region reverts the receiver's clipping area to its
+ * original value.
+ *
+ * @param region the clipping region or <code>null</code>
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the region has been disposed</li>
+ * </ul> 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setClipping (Region region) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (region != null && region.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (data.clip != 0) OS.GCHandle_Free(data.clip);
+	data.clip = region != null ? OS.Geometry_Clone(region.handle) : 0;
+	data.state &= ~CLIPPING;
+}
+
+/** 
+ * Sets the receiver's fill rule to the parameter, which must be one of
+ * <code>SWT.FILL_EVEN_ODD</code> or <code>SWT.FILL_WINDING</code>.
+ *
+ * @param rule the new fill rule
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the rule is not one of <code>SWT.FILL_EVEN_ODD</code>
+ *                                 or <code>SWT.FILL_WINDING</code></li>
+ * </ul> 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void setFillRule(int rule) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	switch (rule) {
+		case SWT.FILL_WINDING:
+		case SWT.FILL_EVEN_ODD: break;
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	data.fillRule = rule;
+}
+
+/** 
+ * Sets the font which will be used by the receiver
+ * to draw and measure text to the argument. If the
+ * argument is null, then a default font appropriate
+ * for the platform will be used instead.
+ *
+ * @param font the new font for the receiver, or null to indicate a default font
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the font has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setFont (Font font) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (font != null && font.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	data.font = font != null ? font : data.device.systemFont;
+	data.state &= ~FONT;
+}
+
+/**
+ * Sets the foreground color. The foreground color is used
+ * for drawing operations including when text is drawn.
+ *
+ * @param color the new foreground color for the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the color is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the color has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setForeground (Color color) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (color == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (color.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (data.foregroundPattern == null && color.handle == data.foreground) return;
+	data.foregroundPattern = null;
+	data.foreground = color.handle;
+	data.state &= ~FOREGROUND;
+}
+
+/** 
+ * Sets the foreground pattern. The default value is <code>null</code>.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * @param pattern the new foreground pattern
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * 
+ * @see Pattern
+ * @see #getAdvanced
+ * @see #setAdvanced
+ * 
+ * @since 3.1
+ */
+public void setForegroundPattern (Pattern pattern) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (pattern != null && pattern.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (data.foregroundPattern == pattern) return;
+	data.foregroundPattern = pattern;
+	data.state &= ~FOREGROUND;
+}
+
+/** 
+ * Sets the receiver's interpolation setting to the parameter, which
+ * must be one of <code>SWT.DEFAULT</code>, <code>SWT.NONE</code>, 
+ * <code>SWT.LOW</code> or <code>SWT.HIGH</code>.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param interpolation the new interpolation setting
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the rule is not one of <code>SWT.DEFAULT</code>, 
+ *                                 <code>SWT.NONE</code>, <code>SWT.LOW</code> or <code>SWT.HIGH</code>
+ * </ul> 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * 
+ * @see #getAdvanced
+ * @see #setAdvanced
+ * 
+ * @since 3.1
+ */
+public void setInterpolation(int interpolation) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	switch (interpolation) {
+		case SWT.DEFAULT: break;
+		case SWT.NONE: break;
+		case SWT.LOW: break;
+		case SWT.HIGH: break;
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	data.interpolation = interpolation;
+}
+
+/**
+ * Sets the receiver's line attributes.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * @param attributes the line attributes
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the attributes is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if any of the line attributes is not valid</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * 
+ * @see LineAttributes
+ * @see #getAdvanced
+ * @see #setAdvanced
+ * 
+ * @since 3.3
+ */
+public void setLineAttributes(LineAttributes attributes) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (attributes == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	int mask = 0;
+	float lineWidth = attributes.width;
+	if (lineWidth != data.lineWidth) {
+		mask |= LINE_WIDTH;
+	}
+	int lineStyle = attributes.style;
+	if (lineStyle != data.lineStyle) {
+		mask |= LINE_STYLE;
+		switch (lineStyle) {
+			case SWT.LINE_SOLID:
+			case SWT.LINE_DASH:
+			case SWT.LINE_DOT:
+			case SWT.LINE_DASHDOT:
+			case SWT.LINE_DASHDOTDOT:
+				break;
+			case SWT.LINE_CUSTOM:
+				if (attributes.dash == null) lineStyle = SWT.LINE_SOLID;
+				break;
+			default:
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+	}
+	int join = attributes.join;
+	if (join != data.lineJoin) {
+		mask |= LINE_JOIN;
+		switch (join) {
+			case SWT.CAP_ROUND:
+			case SWT.CAP_FLAT:
+			case SWT.CAP_SQUARE:
+				break;
+			default:
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+	}
+	int cap = attributes.cap;
+	if (cap != data.lineCap) {
+		mask |= LINE_CAP;
+		switch (cap) {
+			case SWT.JOIN_MITER:
+			case SWT.JOIN_ROUND:
+			case SWT.JOIN_BEVEL:
+				break;
+			default:
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+	}
+	float[] dashes = attributes.dash;
+	float[] lineDashes = data.lineDashes;
+	if (dashes != null && dashes.length > 0) {
+		boolean changed = lineDashes == null || lineDashes.length != dashes.length;
+		for (int i = 0; i < dashes.length; i++) {
+			float dash = dashes[i];
+			if (dash <= 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			if (!changed && lineDashes[i] != dash) changed = true;
+		}
+		if (changed) {
+			float[] newDashes = new float[dashes.length];
+			System.arraycopy(dashes, 0, newDashes, 0, dashes.length);
+			dashes = newDashes;
+			mask |= LINE_STYLE;
+		} else {
+			dashes = lineDashes;
+		}
+	} else {
+		if (lineDashes != null && lineDashes.length > 0) {
+			mask |= LINE_STYLE;
+		} else {
+			dashes = lineDashes;
+		}
+	}
+	float dashOffset = attributes.dashOffset;
+	if (dashOffset != data.lineDashesOffset) {
+		mask |= LINE_STYLE;
+	}
+	float miterLimit = attributes.miterLimit;
+	if (miterLimit != data.lineMiterLimit) {
+		mask |= LINE_MITERLIMIT;
+	}
+	if (mask == 0) return;
+	data.lineWidth = lineWidth;
+	data.lineStyle = lineStyle;
+	data.lineCap = cap;
+	data.lineJoin = join;
+	data.lineDashes = dashes;
+	data.lineDashesOffset = dashOffset;
+	data.lineMiterLimit = miterLimit;
+	data.state &= ~mask;
+}
+
+/** 
+ * Sets the receiver's line cap style to the argument, which must be one
+ * of the constants <code>SWT.CAP_FLAT</code>, <code>SWT.CAP_ROUND</code>,
+ * or <code>SWT.CAP_SQUARE</code>.
+ *
+ * @param cap the cap style to be used for drawing lines
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the style is not valid</li>
+ * </ul> 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1 
+ */
+public void setLineCap(int cap) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (data.lineCap == cap) return;
+	switch (cap) {
+		case SWT.CAP_ROUND:
+		case SWT.CAP_FLAT:
+		case SWT.CAP_SQUARE:
+			break;
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	data.lineCap = cap;
+	data.state &= ~LINE_CAP;
+}
+
+/** 
+ * Sets the receiver's line dash style to the argument. The default
+ * value is <code>null</code>. If the argument is not <code>null</code>,
+ * the receiver's line style is set to <code>SWT.LINE_CUSTOM</code>, otherwise
+ * it is set to <code>SWT.LINE_SOLID</code>.
+ *
+ * @param dashes the dash style to be used for drawing lines
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if any of the values in the array is less than or equal 0</li>
+ * </ul> 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1 
+ */
+public void setLineDash(int[] dashes) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	float[] lineDashes = data.lineDashes;
+	if (dashes != null && dashes.length > 0) {
+		boolean changed = data.lineStyle != SWT.LINE_CUSTOM || lineDashes == null || lineDashes.length != dashes.length;
+		for (int i = 0; i < dashes.length; i++) {
+			int dash = dashes[i];
+			if (dash <= 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+			if (!changed && lineDashes[i] != dash) changed = true;
+		}
+		if (!changed) return;
+		data.lineDashes = new float[dashes.length];
+		for (int i = 0; i < dashes.length; i++) {
+			data.lineDashes[i] = dashes[i];
+		}
+		data.lineStyle = SWT.LINE_CUSTOM;
+	} else {
+		if (data.lineStyle == SWT.LINE_SOLID && (lineDashes == null || lineDashes.length == 0)) return;
+		data.lineDashes = null;
+		data.lineStyle = SWT.LINE_SOLID;
+	}
+	data.state &= ~LINE_STYLE;
+}
+
+/** 
+ * Sets the receiver's line join style to the argument, which must be one
+ * of the constants <code>SWT.JOIN_MITER</code>, <code>SWT.JOIN_ROUND</code>,
+ * or <code>SWT.JOIN_BEVEL</code>.
+ *
+ * @param join the join style to be used for drawing lines
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the style is not valid</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1 
+ */
+public void setLineJoin(int join) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (data.lineJoin == join) return;
+	switch (join) {
+		case SWT.JOIN_MITER:
+		case SWT.JOIN_ROUND:
+		case SWT.JOIN_BEVEL:
+			break;
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	data.lineJoin = join;
+	data.state &= ~LINE_JOIN;
+}
+
+/** 
+ * Sets the receiver's line style to the argument, which must be one
+ * of the constants <code>SWT.LINE_SOLID</code>, <code>SWT.LINE_DASH</code>,
+ * <code>SWT.LINE_DOT</code>, <code>SWT.LINE_DASHDOT</code> or
+ * <code>SWT.LINE_DASHDOTDOT</code>.
+ *
+ * @param lineStyle the style to be used for drawing lines
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the style is not valid</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setLineStyle(int lineStyle) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (data.lineStyle == lineStyle) return;
+	switch (lineStyle) {
+		case SWT.LINE_SOLID:
+		case SWT.LINE_DASH:
+		case SWT.LINE_DOT:
+		case SWT.LINE_DASHDOT:
+		case SWT.LINE_DASHDOTDOT:
+			break;
+		case SWT.LINE_CUSTOM:
+			if (data.lineDashes == null) lineStyle = SWT.LINE_SOLID;
+			break;
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	data.lineStyle = lineStyle;
+	data.state &= ~LINE_STYLE;
+}
+
+/** 
+ * Sets the width that will be used when drawing lines
+ * for all of the figure drawing operations (that is,
+ * <code>drawLine</code>, <code>drawRectangle</code>, 
+ * <code>drawPolyline</code>, and so forth.
+ * <p>
+ * Note that line width of zero is used as a hint to
+ * indicate that the fastest possible line drawing
+ * algorithms should be used. This means that the
+ * output may be different from line width one.
+ * </p>
+ *
+ * @param lineWidth the width of a line
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setLineWidth(int lineWidth) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (data.lineWidth == lineWidth) return;
+	data.lineWidth = lineWidth;
+	data.state &= ~LINE_WIDTH;
+	switch (data.lineStyle) {
+		case SWT.LINE_DOT:
+		case SWT.LINE_DASH:
+		case SWT.LINE_DASHDOT:
+		case SWT.LINE_DASHDOTDOT:
+			data.state &= ~LINE_STYLE;
+	}
+}
+
+/** 
+ * If the argument is <code>true</code>, puts the receiver
+ * in a drawing mode where the resulting color in the destination
+ * is the <em>exclusive or</em> of the color values in the source
+ * and the destination, and if the argument is <code>false</code>,
+ * puts the receiver in a drawing mode where the destination color
+ * is replaced with the source color value.
+ * <p>
+ * Note that this mode in fundamentally unsupportable on certain
+ * platforms, notably Carbon (Mac OS X). Clients that want their
+ * code to run on all platforms need to avoid this method.
+ * </p>
+ *
+ * @param xor if <code>true</code>, then <em>xor</em> mode is used, otherwise <em>source copy</em> mode is used
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @deprecated this functionality is not supported on some platforms
+ */
+public void setXORMode(boolean xor) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	data.xorMode = xor;
+}
+
+/**
+ * Sets the receiver's text anti-aliasing value to the parameter, 
+ * which must be one of <code>SWT.DEFAULT</code>, <code>SWT.OFF</code>
+ * or <code>SWT.ON</code>. Note that this controls anti-aliasing only
+ * for all <em>text drawing</em> operations.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param antialias the anti-aliasing setting
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter is not one of <code>SWT.DEFAULT</code>,
+ *                                 <code>SWT.OFF</code> or <code>SWT.ON</code></li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * 
+ * @see #getAdvanced
+ * @see #setAdvanced
+ * @see #setAntialias
+ * 
+ * @since 3.1
+ */
+public void setTextAntialias(int antialias) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	switch (antialias) {
+		case SWT.DEFAULT:
+		case SWT.OFF:
+		case SWT.ON:
+			break;
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	data.textAntialias = antialias;
+}
+
+/**
+ * Sets the transform that is currently being used by the receiver. If
+ * the argument is <code>null</code>, the current transform is set to
+ * the identity transform.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param transform the transform to set
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * 
+ * @see Transform
+ * @see #getAdvanced
+ * @see #setAdvanced
+ * 
+ * @since 3.1
+ */
+public void setTransform(Transform transform) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (transform != null && transform.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	data.transform = transform != null ? OS.gcnew_MatrixTransform(transform.handle) : 0;
+	data.state &= ~TRANSFORM;
+}
+
+/**
+ * Returns the extent of the given string. No tab
+ * expansion or carriage return processing will be performed.
+ * <p>
+ * The <em>extent</em> of a string is the width and height of
+ * the rectangular area it would cover if drawn in a particular
+ * font (in this case, the current font in the receiver).
+ * </p>
+ *
+ * @param string the string to measure
+ * @return a point containing the extent of the string
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Point stringExtent(String string) {
+	return textExtent(string, 0);
+}
+
+/**
+ * Returns the extent of the given string. Tab expansion and
+ * carriage return processing are performed.
+ * <p>
+ * The <em>extent</em> of a string is the width and height of
+ * the rectangular area it would cover if drawn in a particular
+ * font (in this case, the current font in the receiver).
+ * </p>
+ *
+ * @param string the string to measure
+ * @return a point containing the extent of the string
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Point textExtent(String string) {
+	return textExtent(string, SWT.DRAW_DELIMITER | SWT.DRAW_TAB);
+}
+
+/**
+ * Returns the extent of the given string. Tab expansion, line
+ * delimiter and mnemonic processing are performed according to
+ * the specified flags, which can be a combination of:
+ * <dl>
+ * <dt><b>DRAW_DELIMITER</b></dt>
+ * <dd>draw multiple lines</dd>
+ * <dt><b>DRAW_TAB</b></dt>
+ * <dd>expand tabs</dd>
+ * <dt><b>DRAW_MNEMONIC</b></dt>
+ * <dd>underline the mnemonic character</dd>
+ * <dt><b>DRAW_TRANSPARENT</b></dt>
+ * <dd>transparent background</dd>
+ * </dl>
+ * <p>
+ * The <em>extent</em> of a string is the width and height of
+ * the rectangular area it would cover if drawn in a particular
+ * font (in this case, the current font in the receiver).
+ * </p>
+ *
+ * @param string the string to measure
+ * @param flags the flags specifying how to process the text
+ * @return a point containing the extent of the string
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Point textExtent(String string, int flags) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (string == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	checkGC(FONT);
+	int length = string.length();
+	char [] buffer = new char [length + 1];
+	string.getChars (0, length, buffer, 0);
+	if ((flags & (SWT.DRAW_DELIMITER | SWT.DRAW_TAB)) != (SWT.DRAW_DELIMITER | SWT.DRAW_TAB)) {
+		for (int i = 0, j = 0; i < buffer.length; i++) {
+			char c = buffer[i];
+			switch (c) {
+				case '\r':
+				case '\n':
+					if ((flags & SWT.DRAW_DELIMITER) == 0) continue;
+					break;
+				case '\t':
+					if ((flags & SWT.DRAW_TAB) == 0) continue;
+					break;
+			}
+			buffer[j++] = c;
+		}
+	}
+	int str = OS.gcnew_String (buffer);
+	int culture = OS.CultureInfo_CurrentUICulture();
+	Font font = data.font;
+	int direction = (data.style & SWT.RIGHT_TO_LEFT) != 0 ? OS.FlowDirection_RightToLeft : OS.FlowDirection_LeftToRight;
+	int brush = OS.Brushes_White();
+	int text = OS.gcnew_FormattedText(str, culture, direction, font.handle, font.size, brush);
+	double width = OS.FormattedText_WidthIncludingTrailingWhitespace(text);
+	double height = OS.FormattedText_Height(text);
+	OS.GCHandle_Free(text);
+	OS.GCHandle_Free(brush);
+	OS.GCHandle_Free(culture);
+	OS.GCHandle_Free(str);
+	return new Point((int)width, (int)height);
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the receiver
+ */
+public String toString () {
+	if (isDisposed()) return "GC {*DISPOSED*}";
+	return "GC {" + handle + "}";
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new graphics context.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>GC</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param drawable the Drawable for the receiver.
+ * @param data the data for the receiver.
+ *
+ * @return a new <code>GC</code>
+ */
+public static GC wpf_new(Drawable drawable, GCData data) {
+	GC gc = new GC();
+	int hDC = drawable.internal_new_GC(data);
+	gc.device = data.device;
+	gc.init(drawable, data, hDC);
+	return gc;
+}
+
+/**	 
+ * Invokes platform specific functionality to wrap a graphics context.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>GC</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param hDC the Windows HDC.
+ * @param data the data for the receiver.
+ *
+ * @return a new <code>GC</code>
+ */
+public static GC wpf_new(int hDC, GCData data) {
+	GC gc = new GC();
+	gc.device = data.device;
+	gc.init(null, data, hDC);
+	return gc;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/GCData.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/GCData.java
new file mode 100644
index 0000000..e6ad477
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/GCData.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.graphics;
+
+ 
+import org.eclipse.swt.*;
+
+/**
+ * Instances of this class are descriptions of GCs in terms
+ * of unallocated platform-specific data fields.
+ * <p>
+ * <b>IMPORTANT:</b> This class is <em>not</em> part of the public
+ * API for SWT. It is marked public only so that it can be shared
+ * within the packages provided by SWT. It is not available on all
+ * platforms, and should never be called from application code.
+ * </p>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ */
+
+public final class GCData {
+	public Device device;
+	public int style, state = -1;
+	public int foreground;
+	public int background;
+	public Font font;
+	public Pattern foregroundPattern;
+	public Pattern backgroundPattern;
+	public boolean xorMode;
+	public int fillRule = SWT.FILL_EVEN_ODD;
+	public int interpolation = SWT.DEFAULT;
+	public int antialias = SWT.DEFAULT;
+	public int textAntialias = SWT.DEFAULT;
+	public int lineStyle = SWT.LINE_SOLID;
+	public float lineWidth;
+	public int lineCap = SWT.CAP_FLAT;
+	public int lineJoin = SWT.JOIN_MITER;
+	public float lineDashesOffset;
+	public float[] lineDashes;
+	public float lineMiterLimit = 10;
+	public int alpha = 0xFF;
+
+	public Image image;
+	public int pen;
+	public int brush, currentBrush;
+	public int pushCount;
+	public int clip;
+	public int transform;
+	public int visual;
+	public int drawingContext;
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Image.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Image.java
new file mode 100644
index 0000000..90366cf
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Image.java
@@ -0,0 +1,1127 @@
+/*******************************************************************************
+ * 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.graphics;
+
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+
+import java.io.*;
+
+/**
+ * Instances of this class are graphics which have been prepared
+ * for display on a specific device. That is, they are ready
+ * to paint using methods such as <code>GC.drawImage()</code>
+ * and display on widgets with, for example, <code>Button.setImage()</code>.
+ * <p>
+ * If loaded from a file format that supports it, an
+ * <code>Image</code> may have transparency, meaning that certain
+ * pixels are specified as being transparent when drawn. Examples
+ * of file formats that support transparency are GIF and PNG.
+ * </p><p>
+ * There are two primary ways to use <code>Images</code>. 
+ * The first is to load a graphic file from disk and create an
+ * <code>Image</code> from it. This is done using an <code>Image</code>
+ * constructor, for example:
+ * <pre>
+ *    Image i = new Image(device, "C:\\graphic.bmp");
+ * </pre>
+ * A graphic file may contain a color table specifying which
+ * colors the image was intended to possess. In the above example,
+ * these colors will be mapped to the closest available color in
+ * SWT. It is possible to get more control over the mapping of
+ * colors as the image is being created, using code of the form:
+ * <pre>
+ *    ImageData data = new ImageData("C:\\graphic.bmp"); 
+ *    RGB[] rgbs = data.getRGBs(); 
+ *    // At this point, rgbs contains specifications of all
+ *    // the colors contained within this image. You may
+ *    // allocate as many of these colors as you wish by
+ *    // using the Color constructor Color(RGB), then
+ *    // create the image:
+ *    Image i = new Image(device, data);
+ * </pre>
+ * <p>
+ * Applications which require even greater control over the image
+ * loading process should use the support provided in class
+ * <code>ImageLoader</code>.
+ * </p><p>
+ * Application code must explicitly invoke the <code>Image.dispose()</code> 
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ *
+ * @see Color
+ * @see ImageData
+ * @see ImageLoader
+ * @see <a href="http://www.eclipse.org/swt/snippets/#image">Image snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Examples: GraphicsExample, ImageAnalyzer</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+
+public final class Image extends Resource implements Drawable {
+	
+	/**
+	 * specifies whether the receiver is a bitmap or an icon
+	 * (one of <code>SWT.BITMAP</code>, <code>SWT.ICON</code>)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public int type;
+	
+	/**
+	 * the handle to the OS image resource
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public int handle;
+		
+	/**
+	 * specifies the transparent pixel
+	 */
+	int transparentPixel = -1;
+	
+	/**
+	 * the GC which is drawing on the image
+	 */
+	GC memGC;
+	
+	/**
+	 * the alpha data for the image
+	 */
+	byte[] alphaData;
+	
+	/**
+	 * the global alpha value to be used for every pixel
+	 */
+	int alpha = -1;
+	
+	/**
+	 * the image data used to create this image if it is a
+	 * icon. Used only in WinCE
+	 */
+	ImageData data;
+	
+	/**
+	 * width of the image
+	 */
+	int width = -1;
+	
+	/**
+	 * height of the image
+	 */
+	int height = -1;
+	
+	/**
+	 * specifies the default scanline padding
+	 */
+	static final int DEFAULT_SCANLINE_PAD = 4;
+
+/**
+ * Prevents uninitialized instances from being created outside the package.
+ */
+Image (Device device) {
+	super(device);
+}
+
+/**
+ * Constructs an empty instance of this class with the
+ * specified width and height. The result may be drawn upon
+ * by creating a GC and using any of its drawing operations,
+ * as shown in the following example:
+ * <pre>
+ *    Image i = new Image(device, width, height);
+ *    GC gc = new GC(i);
+ *    gc.drawRectangle(0, 0, 50, 50);
+ *    gc.dispose();
+ * </pre>
+ * <p>
+ * Note: Some platforms may have a limitation on the size
+ * of image that can be created (size depends on width, height,
+ * and depth). For example, Windows 95, 98, and ME do not allow
+ * images larger than 16M.
+ * </p>
+ *
+ * @param device the device on which to create the image
+ * @param width the width of the new image
+ * @param height the height of the new image
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if either the width or height is negative or zero</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for image creation</li>
+ * </ul>
+ */
+public Image(Device device, int width, int height) {
+	super(device);
+	init(width, height);
+	init();
+}
+
+/**
+ * Constructs a new instance of this class based on the
+ * provided image, with an appearance that varies depending
+ * on the value of the flag. The possible flag values are:
+ * <dl>
+ * <dt><b>{@link SWT#IMAGE_COPY}</b></dt>
+ * <dd>the result is an identical copy of srcImage</dd>
+ * <dt><b>{@link SWT#IMAGE_DISABLE}</b></dt>
+ * <dd>the result is a copy of srcImage which has a <em>disabled</em> look</dd>
+ * <dt><b>{@link SWT#IMAGE_GRAY}</b></dt>
+ * <dd>the result is a copy of srcImage which has a <em>gray scale</em> look</dd>
+ * </dl>
+ *
+ * @param device the device on which to create the image
+ * @param srcImage the image to use as the source
+ * @param flag the style, either <code>IMAGE_COPY</code>, <code>IMAGE_DISABLE</code> or <code>IMAGE_GRAY</code>
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if srcImage is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the flag is not one of <code>IMAGE_COPY</code>, <code>IMAGE_DISABLE</code> or <code>IMAGE_GRAY</code></li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_INVALID_IMAGE - if the image is not a bitmap or an icon, or is otherwise in an invalid state</li>
+ *    <li>ERROR_UNSUPPORTED_DEPTH - if the depth of the image is not supported</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for image creation</li>
+ * </ul>
+ */
+public Image(Device device, Image srcImage, int flag) {
+	super(device);
+	device = this.device;
+	if (srcImage == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (srcImage.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	Rectangle rect = srcImage.getBounds();
+	switch (flag) {
+		case SWT.IMAGE_COPY: {
+			type = srcImage.type;
+			handle = OS.BitmapSource_Clone(srcImage.handle);
+			transparentPixel = srcImage.transparentPixel;
+			alpha = srcImage.alpha;
+			if (srcImage.alphaData != null) {
+				alphaData = new byte[srcImage.alphaData.length];
+				System.arraycopy(srcImage.alphaData, 0, alphaData, 0, alphaData.length);
+			}
+			break;
+		}
+		case SWT.IMAGE_DISABLE: {
+			ImageData data = srcImage.getImageData();
+			PaletteData palette = data.palette;
+			RGB[] rgbs = new RGB[3];
+			rgbs[0] = device.getSystemColor(SWT.COLOR_BLACK).getRGB();
+			rgbs[1] = device.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW).getRGB();
+			rgbs[2] = device.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND).getRGB();
+			ImageData newData = new ImageData(rect.width, rect.height, 8, new PaletteData(rgbs));
+			newData.alpha = data.alpha;
+			newData.alphaData = data.alphaData;
+			newData.maskData = data.maskData;
+			newData.maskPad = data.maskPad;
+			if (data.transparentPixel != -1) newData.transparentPixel = 0;
+
+			/* Convert the pixels. */
+			int[] scanline = new int[rect.width];
+			int[] maskScanline = null;
+			ImageData mask = null;
+			if (data.maskData != null) mask = data.getTransparencyMask();
+			if (mask != null) maskScanline = new int[rect.width];
+			int redMask = palette.redMask;
+			int greenMask = palette.greenMask;
+			int blueMask = palette.blueMask;
+			int redShift = palette.redShift;
+			int greenShift = palette.greenShift;
+			int blueShift = palette.blueShift;
+			for (int y=0; y<rect.height; y++) {
+				int offset = y * newData.bytesPerLine;
+				data.getPixels(0, y, rect.width, scanline, 0);
+				if (mask != null) mask.getPixels(0, y, rect.width, maskScanline, 0);
+				for (int x=0; x<rect.width; x++) {
+					int pixel = scanline[x];
+					if (!(pixel == data.transparentPixel || (mask != null && maskScanline[x] == 0))) {
+						int red, green, blue;
+						if (palette.isDirect) {
+							red = pixel & redMask;
+							red = (redShift < 0) ? red >>> -redShift : red << redShift;
+							green = pixel & greenMask;
+							green = (greenShift < 0) ? green >>> -greenShift : green << greenShift;
+							blue = pixel & blueMask;
+							blue = (blueShift < 0) ? blue >>> -blueShift : blue << blueShift;
+						} else {
+							red = palette.colors[pixel].red;
+							green = palette.colors[pixel].green;
+							blue = palette.colors[pixel].blue;
+						}
+						int intensity = red * red + green * green + blue * blue;
+						if (intensity < 98304) {
+							newData.data[offset] = (byte)1;
+						} else {
+							newData.data[offset] = (byte)2;	
+						}
+					}
+					offset++;
+				}
+			}
+			init (newData);
+			break;
+		}
+		case SWT.IMAGE_GRAY: {
+			ImageData data = srcImage.getImageData();
+			PaletteData palette = data.palette;
+			ImageData newData = data;
+			if (!palette.isDirect) {
+				/* Convert the palette entries to gray. */
+				RGB [] rgbs = palette.getRGBs();
+				for (int i=0; i<rgbs.length; i++) {
+					if (data.transparentPixel != i) {
+						RGB color = rgbs [i];
+						int red = color.red;
+						int green = color.green;
+						int blue = color.blue;
+						int intensity = (red+red+green+green+green+green+green+blue) >> 3;
+						color.red = color.green = color.blue = intensity;
+					}
+				}
+				newData.palette = new PaletteData(rgbs);
+			} else {
+				/* Create a 8 bit depth image data with a gray palette. */
+				RGB[] rgbs = new RGB[256];
+				for (int i=0; i<rgbs.length; i++) {
+					rgbs[i] = new RGB(i, i, i);
+				}
+				newData = new ImageData(rect.width, rect.height, 8, new PaletteData(rgbs));
+				newData.alpha = data.alpha;
+				newData.alphaData = data.alphaData;
+				newData.maskData = data.maskData;
+				newData.maskPad = data.maskPad;
+				if (data.transparentPixel != -1) newData.transparentPixel = 254; 
+
+				/* Convert the pixels. */
+				int[] scanline = new int[rect.width];
+				int redMask = palette.redMask;
+				int greenMask = palette.greenMask;
+				int blueMask = palette.blueMask;
+				int redShift = palette.redShift;
+				int greenShift = palette.greenShift;
+				int blueShift = palette.blueShift;
+				for (int y=0; y<rect.height; y++) {
+					int offset = y * newData.bytesPerLine;
+					data.getPixels(0, y, rect.width, scanline, 0);
+					for (int x=0; x<rect.width; x++) {
+						int pixel = scanline[x];
+						if (pixel != data.transparentPixel) {
+							int red = pixel & redMask;
+							red = (redShift < 0) ? red >>> -redShift : red << redShift;
+							int green = pixel & greenMask;
+							green = (greenShift < 0) ? green >>> -greenShift : green << greenShift;
+							int blue = pixel & blueMask;
+							blue = (blueShift < 0) ? blue >>> -blueShift : blue << blueShift;
+							int intensity = (red+red+green+green+green+green+green+blue) >> 3;
+							if (newData.transparentPixel == intensity) intensity = 255;
+							newData.data[offset] = (byte)intensity;
+						} else {
+							newData.data[offset] = (byte)254;
+						}
+						offset++;
+					}
+				}
+			}
+			init (newData);
+			break;
+		}
+		default:
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	init();
+}
+
+/**
+ * Constructs an empty instance of this class with the
+ * width and height of the specified rectangle. The result
+ * may be drawn upon by creating a GC and using any of its
+ * drawing operations, as shown in the following example:
+ * <pre>
+ *    Image i = new Image(device, boundsRectangle);
+ *    GC gc = new GC(i);
+ *    gc.drawRectangle(0, 0, 50, 50);
+ *    gc.dispose();
+ * </pre>
+ * <p>
+ * Note: Some platforms may have a limitation on the size
+ * of image that can be created (size depends on width, height,
+ * and depth). For example, Windows 95, 98, and ME do not allow
+ * images larger than 16M.
+ * </p>
+ *
+ * @param device the device on which to create the image
+ * @param bounds a rectangle specifying the image's width and height (must not be null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the bounds rectangle is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if either the rectangle's width or height is negative</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for image creation</li>
+ * </ul>
+ */
+public Image(Device device, Rectangle bounds) {
+	super(device);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	init(bounds.width, bounds.height);
+	init();
+}
+
+/**
+ * Constructs an instance of this class from the given
+ * <code>ImageData</code>.
+ *
+ * @param device the device on which to create the image
+ * @param data the image data to create the image from (must not be null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the image data is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_UNSUPPORTED_DEPTH - if the depth of the ImageData is not supported</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for image creation</li>
+ * </ul>
+ */
+public Image(Device device, ImageData data) {
+	super(device);
+	init(data);
+	init();
+}
+
+/**
+ * Constructs an instance of this class, whose type is 
+ * <code>SWT.ICON</code>, from the two given <code>ImageData</code>
+ * objects. The two images must be the same size. Pixel transparency
+ * in either image will be ignored.
+ * <p>
+ * The mask image should contain white wherever the icon is to be visible,
+ * and black wherever the icon is to be transparent. In addition,
+ * the source image should contain black wherever the icon is to be
+ * transparent.
+ * </p>
+ *
+ * @param device the device on which to create the icon
+ * @param source the color data for the icon
+ * @param mask the mask data for the icon
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if either the source or mask is null </li>
+ *    <li>ERROR_INVALID_ARGUMENT - if source and mask are different sizes</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for image creation</li>
+ * </ul>
+ */
+public Image(Device device, ImageData source, ImageData mask) {
+	super(device);
+	if (source == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (mask == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (source.width != mask.width || source.height != mask.height) {
+		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	mask = ImageData.convertMask (mask);
+	ImageData image = new ImageData(source.width, source.height, source.depth, source.palette, source.scanlinePad, source.data);
+	image.maskPad = mask.scanlinePad;
+	image.maskData = mask.data;
+	init(image);
+	init();
+}
+
+/**
+ * Constructs an instance of this class by loading its representation
+ * from the specified input stream. Throws an error if an error
+ * occurs while loading the image, or if the result is an image
+ * of an unsupported type.  Application code is still responsible
+ * for closing the input stream.
+ * <p>
+ * This constructor is provided for convenience when loading a single
+ * image only. If the stream contains multiple images, only the first
+ * one will be loaded. To load multiple images, use 
+ * <code>ImageLoader.load()</code>.
+ * </p><p>
+ * This constructor may be used to load a resource as follows:
+ * </p>
+ * <pre>
+ *     static Image loadImage (Display display, Class clazz, String string) {
+ *          InputStream stream = clazz.getResourceAsStream (string);
+ *          if (stream == null) return null;
+ *          Image image = null;
+ *          try {
+ *               image = new Image (display, stream);
+ *          } catch (SWTException ex) {
+ *          } finally {
+ *               try {
+ *                    stream.close ();
+ *               } catch (IOException ex) {}
+ *          }
+ *          return image;
+ *     }
+ * </pre>
+ *
+ * @param device the device on which to create the image
+ * @param stream the input stream to load the image from
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the stream is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_IO - if an IO error occurs while reading from the stream</li>
+ *    <li>ERROR_INVALID_IMAGE - if the image stream contains invalid data </li>
+ *    <li>ERROR_UNSUPPORTED_DEPTH - if the image stream describes an image with an unsupported depth</li>
+ *    <li>ERROR_UNSUPPORTED_FORMAT - if the image stream contains an unrecognized format</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for image creation</li>
+ * </ul>
+ */
+public Image (Device device, InputStream stream) {
+	super(device);
+	init(new ImageData(stream));
+	init();
+}
+
+/**
+ * Constructs an instance of this class by loading its representation
+ * from the file with the specified name. Throws an error if an error
+ * occurs while loading the image, or if the result is an image
+ * of an unsupported type.
+ * <p>
+ * This constructor is provided for convenience when loading
+ * a single image only. If the specified file contains
+ * multiple images, only the first one will be used.
+ *
+ * @param device the device on which to create the image
+ * @param filename the name of the file to load the image from
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the file name is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_IO - if an IO error occurs while reading from the file</li>
+ *    <li>ERROR_INVALID_IMAGE - if the image file contains invalid data </li>
+ *    <li>ERROR_UNSUPPORTED_DEPTH - if the image file describes an image with an unsupported depth</li>
+ *    <li>ERROR_UNSUPPORTED_FORMAT - if the image file contains an unrecognized format</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for image creation</li>
+ * </ul>
+ */
+public Image (Device device, String filename) {
+	super(device);
+	if (filename == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	try {
+		handle = OS.gcnew_BitmapImage();
+		if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+		int length = filename.length();
+		char[] chars = new char[length + 1];
+		filename.getChars(0, length, chars, 0);
+		int str = OS.gcnew_String(chars);
+		if (str == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+		if (!OS.File_Exists(str)) SWT.error(SWT.ERROR_IO);
+		int uri = OS.gcnew_Uri(str, OS.UriKind_RelativeOrAbsolute);
+		if (uri == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+		OS.BitmapImage_BeginInit(handle);
+		OS.BitmapImage_CreateOptions(handle, OS.BitmapCreateOptions_PreservePixelFormat);
+		OS.BitmapImage_UriSource(handle, uri);
+		OS.BitmapImage_EndInit(handle);
+		if (OS.Freezable_CanFreeze(handle)) OS.Freezable_Freeze(handle);
+		OS.GCHandle_Free(uri);
+		OS.GCHandle_Free(str);
+		return;
+	} catch (SWTException e) {}
+	init(new ImageData(filename));
+	init();
+}
+
+void destroy() {
+	if (memGC != null) memGC.dispose();
+	OS.GCHandle_Free(handle);
+	handle = 0;
+	memGC = null;
+}
+
+/**
+ * Compares the argument to the receiver, and returns true
+ * if they represent the <em>same</em> object using a class
+ * specific comparison.
+ *
+ * @param object the object to compare with this object
+ * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
+ *
+ * @see #hashCode
+ */
+public boolean equals (Object object) {
+	if (object == this) return true;
+	if (!(object instanceof Image)) return false;
+	Image image = (Image) object;
+	return device == image.device && handle == image.handle;
+}
+
+/**
+ * Returns the color to which to map the transparent pixel, or null if
+ * the receiver has no transparent pixel.
+ * <p>
+ * There are certain uses of Images that do not support transparency
+ * (for example, setting an image into a button or label). In these cases,
+ * it may be desired to simulate transparency by using the background
+ * color of the widget to paint the transparent pixels of the image.
+ * Use this method to check which color will be used in these cases
+ * in place of transparency. This value may be set with setBackground().
+ * <p>
+ *
+ * @return the background color of the image, or null if there is no transparency in the image
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Color getBackground() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (transparentPixel == -1) return null;
+	//TODO implement Image.getBackground()
+	return null;
+}
+
+/**
+ * Returns the bounds of the receiver. The rectangle will always
+ * have x and y values of 0, and the width and height of the
+ * image.
+ *
+ * @return a rectangle specifying the image's bounds
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_INVALID_IMAGE - if the image is not a bitmap or an icon</li>
+ * </ul>
+ */
+public Rectangle getBounds() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (width == -1 || height == -1) {
+		width = OS.BitmapSource_PixelWidth(handle);
+		height = OS.BitmapSource_PixelHeight(handle);
+	}
+	return new Rectangle(0, 0, width, height);
+}
+
+Point getDPI () {
+	//TODO
+	return new Point (96, 96);
+}
+
+/**
+ * Returns an <code>ImageData</code> based on the receiver
+ * Modifications made to this <code>ImageData</code> will not
+ * affect the Image.
+ *
+ * @return an <code>ImageData</code> containing the image's data and attributes
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_INVALID_IMAGE - if the image is not a bitmap or an icon</li>
+ * </ul>
+ *
+ * @see ImageData
+ */
+public ImageData getImageData() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	int format = OS.BitmapSource_Format(handle);
+	int depth = OS.PixelFormat_BitsPerPixel(format);
+	int width = OS.BitmapSource_PixelWidth(handle);
+	int height = OS.BitmapSource_PixelHeight(handle);
+	int scanlinePad = DEFAULT_SCANLINE_PAD;
+	int bytesPerLine = (((width * depth + 7) / 8) + (scanlinePad - 1))	/ scanlinePad * scanlinePad;
+	byte[] buffer = new byte[bytesPerLine * height];
+	int rect = OS.Int32Rect_Empty();
+	OS.BitmapSource_CopyPixels(handle, rect, buffer, buffer.length, bytesPerLine);
+	OS.GCHandle_Free(rect);
+	PaletteData paletteData = null;
+	int palette = OS.BitmapSource_Palette(handle);
+	if (palette != 0) {
+		int colors = OS.BitmapPalette_Colors(palette);
+		int count = OS.ColorList_Count(colors);
+		RGB[] rgbs = new RGB[count];
+		paletteData = new PaletteData(rgbs);
+		if (count != 0) {
+			int index = 0;
+			int enumerator = OS.ColorList_GetEnumerator(colors);
+			while (OS.IEnumerator_MoveNext(enumerator)) {
+				int color = OS.ColorList_Current(enumerator);
+				rgbs[index++] = new RGB(OS.Color_R(color) & 0xFF, OS.Color_G(color) & 0xFF, OS.Color_B(color) & 0xFF);
+				OS.GCHandle_Free(color);
+			}
+			OS.GCHandle_Free(enumerator);
+		}
+		OS.GCHandle_Free(colors);
+		OS.GCHandle_Free(palette);
+	} else {
+		int[] formats = {
+			OS.PixelFormats_Bgr555(),
+			OS.PixelFormats_Bgr565(),
+			OS.PixelFormats_Bgr24(),
+			OS.PixelFormats_Rgb24(),
+			OS.PixelFormats_Bgr32(),
+			OS.PixelFormats_Bgra32(),
+			OS.PixelFormats_Pbgra32(),
+			OS.PixelFormats_Bgr101010(),
+		};
+		for (int i = 0; i < formats.length; i++) {
+			if (OS.Object_Equals(format, formats[i])) {
+				switch (i) {
+					case 0: paletteData = new PaletteData(0x7C00, 0x3E0, 0x1F); break;
+					case 1: paletteData = new PaletteData(0xF800, 0x7E0, 0x1F); break;
+					case 2: paletteData = new PaletteData(0xFF, 0xFF00, 0xFF0000); break;
+					case 3: paletteData = new PaletteData(0xFF0000, 0xFF00, 0xFF); break;
+					case 4:
+					case 5:
+					case 6: paletteData = new PaletteData(0xFF00, 0xFF0000, 0xFF000000); break;
+					case 7: paletteData = new PaletteData(0x3FF, 0xFFC00, 0x3FF0000); break;
+				}
+			}
+			OS.GCHandle_Free(formats[i]);
+		}
+	}
+	OS.GCHandle_Free(format);
+	ImageData data = new ImageData(width, height, depth, paletteData, scanlinePad, buffer);
+	data.transparentPixel = transparentPixel;
+	if (transparentPixel == -1 && type == SWT.ICON) {
+		/* Get the icon mask data */
+		int maskPad = 2;
+		int maskBpl = (((width + 7) / 8) + (maskPad - 1)) / maskPad * maskPad;
+		byte[] maskData = new byte[height * maskBpl];
+		int offset = 3, maskOffset = 0;
+		for (int y = 0; y<height; y++) {
+			for (int x = 0; x<width; x++) {
+				if (buffer[offset] != 0) {
+					maskData[maskOffset + (x >> 3)] |= (1 << (7 - (x & 0x7)));
+				} else {
+					maskData[maskOffset + (x >> 3)] &= ~(1 << (7 - (x & 0x7)));
+				}
+				offset += 4;
+			}
+			maskOffset += maskBpl;
+		}
+		data.maskData = maskData;
+		data.maskPad = maskPad;
+	}
+	data.alpha = alpha;
+	if (alpha == -1 && alphaData != null) {
+		data.alphaData = new byte[alphaData.length];
+		System.arraycopy(alphaData, 0, data.alphaData, 0, alphaData.length);
+	}
+	return data;
+}
+
+/**
+ * Returns an integer hash code for the receiver. Any two 
+ * objects that return <code>true</code> when passed to 
+ * <code>equals</code> must return the same value for this
+ * method.
+ *
+ * @return the receiver's hash
+ *
+ * @see #equals
+ */
+public int hashCode () {
+	return handle;
+}
+
+void init(int width, int height) {
+	if (width <= 0 || height <= 0) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	type = SWT.BITMAP;
+	Point dpi = getDPI();
+	int pixelFormat = OS.PixelFormats_Bgr24();
+	int stride = width * 3;
+	byte[] buffer = new byte[stride * height];
+	for (int i = 0; i < buffer.length; i++) {
+		buffer[i] = (byte)0xFF;
+	}
+	handle = OS.BitmapSource_Create(width, height, dpi.x, dpi.y, pixelFormat, 0, buffer, buffer.length, stride);	
+	if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	OS.GCHandle_Free(pixelFormat);
+	if (OS.Freezable_CanFreeze(handle)) OS.Freezable_Freeze(handle);
+}
+
+void init(ImageData data) {
+	PaletteData palette = data.palette;
+	if (!(((data.depth == 1 || data.depth == 2 || data.depth == 4 || data.depth == 8) && !palette.isDirect) ||
+		((data.depth == 8) || (data.depth == 16 || data.depth == 24 || data.depth == 32) && palette.isDirect)))
+			SWT.error (SWT.ERROR_UNSUPPORTED_DEPTH);
+	int width = data.width;
+	int height = data.height;
+	int redMask = palette.redMask;
+	int greenMask = palette.greenMask;
+	int blueMask = palette.blueMask;
+	ImageData newData = null;
+	int pixelFormat = 0;
+	boolean transparent = false;
+	if (data.maskData != null) {
+		transparent= true;
+	} else {
+		if (data.transparentPixel != -1) {
+			transparent = palette.isDirect;
+		} else {
+			if (data.alpha != -1) {
+				transparent = palette.isDirect;
+			} else {
+				transparent = data.alphaData != null;
+			}
+		}
+	}
+	if (transparent) {
+		pixelFormat = OS.PixelFormats_Bgra32();
+		if (!(palette.isDirect && data.depth == 32 && redMask == 0xFF00 && greenMask == 0xFF0000 && blueMask == 0xFF000000)) {
+			newData = new ImageData(width, height, 32, new PaletteData(0xFF00, 0xFF0000, 0xFF000000));
+		}
+	} else {
+		switch (data.depth) {
+			case 1: pixelFormat = OS.PixelFormats_Indexed1(); break;
+			case 2: pixelFormat = OS.PixelFormats_Indexed2(); break;
+			case 4: pixelFormat = OS.PixelFormats_Indexed4(); break;
+			case 8:
+				if (!palette.isDirect) {
+					pixelFormat = OS.PixelFormats_Indexed8();
+				} else {
+					pixelFormat = OS.PixelFormats_Bgr32();
+					newData = new ImageData(data.width, data.height, 32, new PaletteData(0xFF00, 0xFF0000, 0xFF000000));
+				}
+				break;
+			case 16:
+				if (redMask == 0x7C00 && greenMask == 0x3E0 && blueMask == 0x1F) {
+					pixelFormat = OS.PixelFormats_Bgr555();
+				} else if (redMask == 0xF800 && greenMask == 0x7E0 && blueMask == 0x1F) {
+					pixelFormat = OS.PixelFormats_Bgr565();
+				} else {
+					pixelFormat = OS.PixelFormats_Bgr555();
+					newData = new ImageData(data.width, data.height, 16, new PaletteData(0x7C00, 0x3E0, 0x1F));
+				}
+				break;
+			case 24:
+				if (redMask == 0xFF && greenMask == 0xFF00 && blueMask == 0xFF0000) {
+					pixelFormat = OS.PixelFormats_Bgr24();
+				} else if (redMask == 0xFF0000 && greenMask == 0xFF00 && blueMask == 0xFF) {
+					pixelFormat = OS.PixelFormats_Rgb24();
+				} else {
+					pixelFormat = OS.PixelFormats_Bgr24();
+					newData = new ImageData(data.width, data.height, 24, new PaletteData(0xFF, 0xFF00, 0xFF0000));
+				}
+				break;
+			case 32:
+				if (redMask == 0x3FF && greenMask == 0xFFC00 && blueMask == 0x3FF0000) {
+					pixelFormat = OS.PixelFormats_Bgr101010();
+				} else if (redMask == 0xFF00 && greenMask == 0xFF0000 && blueMask == 0xFF000000) {
+					pixelFormat = OS.PixelFormats_Bgr32();
+				} else {
+					pixelFormat = OS.PixelFormats_Bgr32();
+					newData = new ImageData(data.width, data.height, 32, new PaletteData(0xFF00, 0xFF0000, 0xFF000000));
+				}
+				break;
+		}
+	}
+	if (newData != null) {
+		PaletteData newPalette = newData.palette;
+		if (palette.isDirect) {
+			ImageData.blit(ImageData.BLIT_SRC, 
+					data.data, data.depth, data.bytesPerLine, data.getByteOrder(), 0, 0, width, height, redMask, greenMask, blueMask,
+					ImageData.ALPHA_OPAQUE, null, 0, 0, 0,
+					newData.data, newData.depth, newData.bytesPerLine, newData.getByteOrder(), 0, 0, width, height, newPalette.redMask, newPalette.greenMask, newPalette.blueMask,
+					false, false);
+		} else {
+			RGB[] rgbs = palette.getRGBs();
+			int length = rgbs.length;
+			byte[] srcReds = new byte[length];
+			byte[] srcGreens = new byte[length];
+			byte[] srcBlues = new byte[length];
+			for (int i = 0; i < rgbs.length; i++) {
+				RGB rgb = rgbs[i];
+				if (rgb == null) continue;
+				srcReds[i] = (byte)rgb.red;
+				srcGreens[i] = (byte)rgb.green;
+				srcBlues[i] = (byte)rgb.blue;
+			}
+			ImageData.blit(ImageData.BLIT_SRC,
+				data.data, data.depth, data.bytesPerLine, data.getByteOrder(), 0, 0, width, height, srcReds, srcGreens, srcBlues,
+				ImageData.ALPHA_OPAQUE, null, 0, 0, 0,
+				newData.data, newData.depth, newData.bytesPerLine, newData.getByteOrder(), 0, 0, width, height, newPalette.redMask, newPalette.greenMask, newPalette.blueMask,
+				false, false);
+		}
+		if (data.transparentPixel != -1) {
+			newData.transparentPixel = newPalette.getPixel(palette.getRGB(data.transparentPixel));
+		}
+		newData.maskPad = data.maskPad;
+		newData.maskData = data.maskData;
+		newData.alpha = data.alpha;
+		newData.alphaData = data.alphaData;
+		data = newData;
+		palette = data.palette;
+	}
+	int bitmapPalette = 0;
+	if (!palette.isDirect) {
+		if (data.transparentPixel != -1) {
+			transparentPixel = data.transparentPixel;
+		} else {
+			alpha = data.alpha;
+		}
+		RGB[] rgbs = palette.colors;
+		int list = OS.gcnew_ColorList(rgbs.length);
+		for (int i = 0; i < rgbs.length; i++) {
+			RGB rgb = rgbs[i];
+			byte alpha;
+			if (data.transparentPixel != -1) {
+				alpha = (byte)(i == data.transparentPixel ? 0 : 0xFF);
+			} else {
+				alpha = (byte)(data.alpha & 0xFF);
+			}
+			int color = OS.Color_FromArgb(alpha, (byte)rgb.red, (byte)rgb.green, (byte)rgb.blue);
+			OS.ColorList_Add(list, color);
+			OS.GCHandle_Free(color);
+		}
+		bitmapPalette = OS.gcnew_BitmapPalette(list);
+		OS.GCHandle_Free(list);
+	}
+	type = SWT.BITMAP;
+	if (transparent) {
+		if (data.maskData != null || data.transparentPixel != -1) {
+			this.type = data.transparentPixel != -1 ? SWT.BITMAP : SWT.ICON;
+			transparentPixel = data.transparentPixel;
+			ImageData maskImage = data.getTransparencyMask();
+			byte[] maskData = maskImage.data;
+			int maskBpl = maskImage.bytesPerLine;
+			int offset = 3, maskOffset = 0;
+			for (int y = 0; y<height; y++) {
+				for (int x = 0; x<width; x++) {
+					data.data[offset] = ((maskData[maskOffset + (x >> 3)]) & (1 << (7 - (x & 0x7)))) != 0 ? (byte)0xff : 0;
+					offset += 4;
+				}
+				maskOffset += maskBpl;
+			}
+		} else if (data.alpha != -1) {
+			alpha = data.alpha;
+			for (int i = 3, j = 0; i < data.data.length; i+=4, j++) {
+				data.data[i] = (byte)alpha;
+			}
+		} else {
+			int length = data.alphaData.length;
+			alphaData = new byte[length];
+			System.arraycopy(data.alphaData, 0, alphaData, 0, length);
+			for (int i = 3, j = 0; i < data.data.length; i+=4, j++) {
+				data.data[i] = alphaData[j];
+			}
+		}
+	}
+	Point dpi = getDPI();
+	handle = OS.BitmapSource_Create(width, height, dpi.x, dpi.y, pixelFormat, bitmapPalette, data.data, data.data.length, data.bytesPerLine);
+	if (OS.Freezable_CanFreeze(handle)) OS.Freezable_Freeze(handle);
+	OS.GCHandle_Free(pixelFormat);
+	if (bitmapPalette != 0) OS.GCHandle_Free(bitmapPalette);
+	if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new GC handle.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Image</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param data the platform specific GC data 
+ * @return the platform specific GC handle
+ */
+public int internal_new_GC (GCData data) {
+	if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	/*
+	* Create a new GC that can draw into the image.
+	* Only supported for bitmaps.
+	*/
+	if (type != SWT.BITMAP || memGC != null) {
+		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	if (width == -1 || height == -1) {
+		width = OS.BitmapSource_PixelWidth(handle);
+		height = OS.BitmapSource_PixelHeight(handle);
+	}
+	
+	int visual = OS.gcnew_DrawingVisual();
+	if (visual == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	int rect = OS.gcnew_Rect(0, 0, width, height);
+	int geometry = OS.gcnew_RectangleGeometry(rect);
+	OS.ContainerVisual_Clip (visual, geometry);
+	int dc = OS.DrawingVisual_RenderOpen(visual);
+	if (dc == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	OS.DrawingContext_DrawImage(dc, handle, rect);
+	OS.GCHandle_Free(rect);
+	OS.GCHandle_Free(geometry);
+	if (data != null) {
+		int mask = SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT;
+		if ((data.style & mask) == 0) {
+			data.style |= SWT.LEFT_TO_RIGHT;
+		}
+		data.device = device;
+		data.image = this;
+		data.background = OS.Colors_White;
+		data.foreground = OS.Colors_Black;
+		data.font = device.systemFont;
+		data.visual = visual;
+	}
+	return dc;
+}
+
+/**	 
+ * Invokes platform specific functionality to dispose a GC handle.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Image</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param hDC the platform specific GC handle
+ * @param data the platform specific GC data 
+ */
+public void internal_dispose_GC (int dc, GCData data) {
+	OS.DrawingContext_Close(dc);
+	Point dpi = getDPI();
+	int pixelFormat = OS.PixelFormats_Pbgra32();
+	int	renderHandle = OS.gcnew_RenderTargetBitmap(width, height, dpi.x, dpi.y, pixelFormat);
+	OS.GCHandle_Free(pixelFormat);
+	if (renderHandle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	OS.RenderTargetBitmap_Render(renderHandle, data.visual);
+	OS.GCHandle_Free(data.visual);
+	OS.GCHandle_Free(dc);
+	int format = OS.BitmapSource_Format(handle);
+	int palette = OS.BitmapSource_Palette(handle);
+	OS.GCHandle_Free(handle);
+	handle = OS.gcnew_FormatConvertedBitmap(renderHandle, format, palette, 100);
+	OS.GCHandle_Free(palette);
+	OS.GCHandle_Free(format);
+	if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	OS.GCHandle_Free(renderHandle);
+	if (OS.Freezable_CanFreeze(handle)) OS.Freezable_Freeze(handle);
+}
+
+/**
+ * Returns <code>true</code> if the image has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the image.
+ * When an image has been disposed, it is an error to
+ * invoke any other method using the image.
+ *
+ * @return <code>true</code> when the image is disposed and <code>false</code> otherwise
+ */
+public boolean isDisposed() {
+	return handle == 0;
+}
+
+/**
+ * Sets the color to which to map the transparent pixel.
+ * <p>
+ * There are certain uses of <code>Images</code> that do not support
+ * transparency (for example, setting an image into a button or label).
+ * In these cases, it may be desired to simulate transparency by using
+ * the background color of the widget to paint the transparent pixels
+ * of the image. This method specifies the color that will be used in
+ * these cases. For example:
+ * <pre>
+ *    Button b = new Button();
+ *    image.setBackground(b.getBackground());
+ *    b.setImage(image);
+ * </pre>
+ * </p><p>
+ * The image may be modified by this operation (in effect, the
+ * transparent regions may be filled with the supplied color).  Hence
+ * this operation is not reversible and it is not legal to call
+ * this function twice or with a null argument.
+ * </p><p>
+ * This method has no effect if the receiver does not have a transparent
+ * pixel value.
+ * </p>
+ *
+ * @param color the color to use when a transparent pixel is specified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the color is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the color has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setBackground(Color color) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (color == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (color.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (transparentPixel == -1) return;
+	//TODO implement Image.setBackground()
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the receiver
+ */
+public String toString () {
+	if (isDisposed()) return "Image {*DISPOSED*}";
+	return "Image {" + handle + "}";
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new image.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Image</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param device the device on which to allocate the color
+ * @param type the type of the image (<code>SWT.BITMAP</code> or <code>SWT.ICON</code>)
+ * @param handle the OS handle for the image
+ * @return a new image object containing the specified device, type and handle
+ */
+public static Image wpf_new(Device device, int type, int handle) {
+	Image image = new Image(device);
+	image.type = type;
+	image.handle = handle;
+	return image;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Path.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Path.java
new file mode 100644
index 0000000..420d66f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Path.java
@@ -0,0 +1,695 @@
+/*******************************************************************************
+ * 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.graphics;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.wpf.*;
+
+/**
+ * Instances of this class represent paths through the two-dimensional
+ * coordinate system. Paths do not have to be continuous, and can be
+ * described using lines, rectangles, arcs, cubic or quadratic bezier curves,
+ * glyphs, or other paths.
+ * <p>
+ * Application code must explicitly invoke the <code>Path.dispose()</code> 
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ * <p>
+ * This class requires the operating system's advanced graphics subsystem
+ * which may not be available on some platforms.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#path">Path, Pattern snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: GraphicsExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.1
+ */
+public class Path extends Resource {
+	
+	/**
+	 * the OS resource for the Path
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public int handle;
+	
+	int currentFigure, currentPoint;
+	
+/**
+ * Constructs a new empty Path.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param device the device on which to allocate the path
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the device is null and there is no current device</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle for the path could not be obtained</li>
+ * </ul>
+ * 
+ * @see #dispose()
+ */
+public Path (Device device) {
+	super(device);
+	handle = OS.gcnew_PathGeometry();
+	if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	init();
+}
+
+/**
+ * Constructs a new Path that is a copy of <code>path</code>. If
+ * <code>flatness</code> is less than or equal to zero, an unflatten
+ * copy of the path is created. Otherwise, it specifies the maximum
+ * error between the path and its flatten copy. Smaller numbers give
+ * better approximation.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param device the device on which to allocate the path
+ * @param path the path to make a copy
+ * @param flatness the flatness value
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the path is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the path has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle for the path could not be obtained</li>
+ * </ul>
+ * 
+ * @see #dispose()
+ * @since 3.4
+ */
+public Path (Device device, Path path, float flatness) {
+	super(device);
+	if (path == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (path.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	flatness = Math.max(0, flatness);
+	if (flatness == 0) {
+		handle = OS.PathGeometry_Clone(path.handle);
+	} else {
+		handle = OS.Geometry_GetFlattenedPathGeometry(path.handle, flatness, OS.ToleranceType_Absolute);
+	}
+	if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	init();
+}
+
+/**
+ * Constructs a new Path with the specifed PathData.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param device the device on which to allocate the path
+ * @param data the data for the path
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the device is null and there is no current device</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the data is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle for the path could not be obtained</li>
+ * </ul>
+ * 
+ * @see #dispose()
+ * @since 3.4
+ */
+public Path (Device device, PathData data) {
+	this(device);
+	if (data == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	init(data);
+}
+
+/**
+ * Adds to the receiver a circular or elliptical arc that lies within
+ * the specified rectangular area.
+ * <p>
+ * The resulting arc begins at <code>startAngle</code> and extends  
+ * for <code>arcAngle</code> degrees.
+ * Angles are interpreted such that 0 degrees is at the 3 o'clock
+ * position. A positive value indicates a counter-clockwise rotation
+ * while a negative value indicates a clockwise rotation.
+ * </p><p>
+ * The center of the arc is the center of the rectangle whose origin 
+ * is (<code>x</code>, <code>y</code>) and whose size is specified by the 
+ * <code>width</code> and <code>height</code> arguments. 
+ * </p><p>
+ * The resulting arc covers an area <code>width + 1</code> pixels wide
+ * by <code>height + 1</code> pixels tall.
+ * </p>
+ *
+ * @param x the x coordinate of the upper-left corner of the arc
+ * @param y the y coordinate of the upper-left corner of the arc
+ * @param width the width of the arc
+ * @param height the height of the arc
+ * @param startAngle the beginning angle
+ * @param arcAngle the angular extent of the arc, relative to the start angle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void addArc(float x, float y, float width, float height, float startAngle, float arcAngle) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (width < 0) {
+		x = x + width;
+		width = -width;
+	}
+	if (height < 0) {
+		y = y + height;
+		height = -height;
+	}
+	if (width == 0 || height == 0 || arcAngle == 0) return;
+	boolean isNegative = arcAngle < 0;
+	boolean isLargeAngle = arcAngle > 180 || arcAngle < -180;
+	arcAngle = arcAngle + startAngle;
+	if (isNegative) {
+		// swap angles
+	   	float tmp = startAngle;
+		startAngle = arcAngle;
+		arcAngle = tmp;
+	}
+	double x1 = Math.cos(startAngle * Math.PI / 180) * width/2.0 + x + width/2.0;
+	double y1 = -1 * Math.sin(startAngle * Math.PI / 180) * height/2.0 + y + height/2.0;
+	double x2 = Math.cos(arcAngle * Math.PI / 180) * width/2.0 + x + width/2.0;
+	double y2 = -1 * Math.sin(arcAngle * Math.PI / 180) * height/2.0 + y + height/2.0;	
+	if (currentFigure == 0) {
+		currentFigure = OS.gcnew_PathFigure();
+		int figures = OS.PathGeometry_Figures(handle);
+		OS.PathFigureCollection_Add(figures, currentFigure);
+		OS.GCHandle_Free(figures);
+	}
+	int startPoint = OS.gcnew_Point(x1, y1);
+	int endPoint = OS.gcnew_Point(x2, y2);
+	int segments = OS.PathFigure_Segments(currentFigure);
+	if (OS.PathSegmentCollection_Count(segments) != 0) {
+		int segment = OS.gcnew_LineSegment(startPoint, true);
+		OS.PathSegmentCollection_Add(segments, segment);
+		OS.GCHandle_Free(segment);
+	} else {
+		OS.PathFigure_StartPoint(currentFigure, startPoint);
+	}
+	if (arcAngle >= 360 || arcAngle <= -360) {
+		int rect = OS.gcnew_Rect(x, y, width, height);
+		int geometry = OS.gcnew_EllipseGeometry(rect);
+		OS.PathGeometry_AddGeometry(handle, geometry);
+		OS.GCHandle_Free(geometry);
+		OS.GCHandle_Free(rect);
+		OS.GCHandle_Free(currentFigure);
+		currentFigure = 0;
+	} else {
+		int size = OS.gcnew_Size(width / 2.0, height / 2.0);
+		int arc = OS.gcnew_ArcSegment(endPoint, size, 0, isLargeAngle, OS.SweepDirection_Clockwise, true);
+		OS.PathSegmentCollection_Add(segments, arc);
+		OS.GCHandle_Free(size);
+		OS.GCHandle_Free(arc);
+	}
+	OS.GCHandle_Free(segments);
+	OS.GCHandle_Free(startPoint);
+	if (currentPoint != 0) OS.GCHandle_Free(currentPoint);
+	currentPoint = endPoint;	
+}
+
+/**
+ * Adds to the receiver the path described by the parameter.
+ *
+ * @param path the path to add to the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parameter is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void addPath(Path path) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (path == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (path.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	OS.PathGeometry_AddGeometry(handle, path.handle);
+	if (path.currentPoint != 0) {
+		currentPoint = OS.gcnew_Point(OS.Point_X(path.currentPoint), OS.Point_Y(path.currentPoint));
+	}
+	int figures = OS.PathGeometry_Figures(handle);
+	int count = OS.PathFigureCollection_Count(figures);
+	OS.GCHandle_Free(figures);
+	if (count != 0) {
+		int figure = OS.PathGeometry_Figures(handle, count - 1);
+		if (!OS.PathFigure_IsClosed(figure)) {
+			currentFigure = figure;
+			return;
+		}
+		OS.GCHandle_Free(figure);
+	}
+	
+}
+
+/**
+ * Adds to the receiver the rectangle specified by x, y, width and height.
+ *
+ * @param x the x coordinate of the rectangle to add
+ * @param y the y coordinate of the rectangle to add
+ * @param width the width of the rectangle to add
+ * @param height the height of the rectangle to add
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void addRectangle(float x, float y, float width, float height) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	int rect = OS.gcnew_Rect(x, y, width, height);
+	int geometry = OS.gcnew_RectangleGeometry(rect);
+	OS.PathGeometry_AddGeometry(handle, geometry);
+	OS.GCHandle_Free(geometry);
+	OS.GCHandle_Free(rect);
+	if (currentFigure != 0) OS.GCHandle_Free(currentFigure);
+	currentFigure = 0;
+	int point = OS.gcnew_Point(x, y);
+	if (currentPoint != 0) OS.GCHandle_Free(currentPoint);
+	currentPoint = point;
+	
+}
+
+/**
+ * Adds to the receiver the pattern of glyphs generated by drawing
+ * the given string using the given font starting at the point (x, y).
+ *
+ * @param string the text to use
+ * @param x the x coordinate of the starting point
+ * @param y the y coordinate of the starting point
+ * @param font the font to use
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the font is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the font has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void addString(String string, float x, float y, Font font) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (font == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (font.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	int length = string.length();
+	char [] buffer = new char [length + 1];
+	string.getChars (0, length, buffer, 0);
+	int str = OS.gcnew_String (buffer);
+	int culture = OS.CultureInfo_CurrentUICulture();
+	int point = OS.gcnew_Point(x, y);
+	int brush = OS.Brushes_White();
+	int text = OS.gcnew_FormattedText(str, culture, OS.FlowDirection_LeftToRight, font.handle, font.size, brush);
+	int geometry = OS.FormattedText_BuildGeometry(text, point);
+	OS.PathGeometry_AddGeometry(handle, geometry);
+	OS.GCHandle_Free(brush);
+	OS.GCHandle_Free(geometry);
+	OS.GCHandle_Free(culture);
+	OS.GCHandle_Free(str);
+	OS.GCHandle_Free(point);
+	OS.GCHandle_Free(text);
+	if (currentFigure != 0) OS.GCHandle_Free(currentFigure);
+	currentFigure = 0;
+	if (currentPoint != 0) OS.GCHandle_Free(currentPoint);
+	currentPoint = 0;
+}
+
+/**
+ * Closes the current sub path by adding to the receiver a line
+ * from the current point of the path back to the starting point
+ * of the sub path.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void close() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (currentFigure != 0) OS.PathFigure_IsClosed(currentFigure, true);
+	currentFigure = 0;
+}
+
+/**
+ * Returns <code>true</code> if the specified point is contained by
+ * the receiver and false otherwise.
+ * <p>
+ * If outline is <code>true</code>, the point (x, y) checked for containment in
+ * the receiver's outline. If outline is <code>false</code>, the point is
+ * checked to see if it is contained within the bounds of the (closed) area
+ * covered by the receiver.
+ *
+ * @param x the x coordinate of the point to test for containment
+ * @param y the y coordinate of the point to test for containment
+ * @param gc the GC to use when testing for containment
+ * @param outline controls whether to check the outline or contained area of the path
+ * @return <code>true</code> if the path contains the point and <code>false</code> otherwise
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the gc is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the gc has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public boolean contains(float x, float y, GC gc, boolean outline) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	gc.checkGC(GC.LINE_CAP | GC.LINE_JOIN | GC.LINE_STYLE | GC.LINE_WIDTH | GC.LINE_MITERLIMIT | GC.TRANSFORM);
+	boolean result;
+	int point = OS.gcnew_Point(x, y);
+	if (outline) {
+		result = OS.Geometry_StrokeContains(handle, gc.data.pen, point);
+	} else {
+		result = OS.Geometry_FillContains(handle, point);
+	}
+	OS.GCHandle_Free(point);
+	return result;
+}
+
+/**
+ * Adds to the receiver a cubic bezier curve based on the parameters.
+ *
+ * @param cx1 the x coordinate of the first control point of the spline
+ * @param cy1 the y coordinate of the first control of the spline
+ * @param cx2 the x coordinate of the second control of the spline
+ * @param cy2 the y coordinate of the second control of the spline
+ * @param x the x coordinate of the end point of the spline
+ * @param y the y coordinate of the end point of the spline
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void cubicTo(float cx1, float cy1, float cx2, float cy2, float x, float y) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	int controlPoint1 = OS.gcnew_Point(cx1, cy1);
+	int controlPoint2 = OS.gcnew_Point(cx2, cy2);
+	int point = OS.gcnew_Point(x, y);
+	if (currentFigure == 0) newFigure();
+	if (currentPoint != 0) OS.GCHandle_Free(currentPoint);
+	currentPoint = point;
+	int segment = OS.gcnew_BezierSegment(controlPoint1, controlPoint2, point, true);
+	int segments = OS.PathFigure_Segments(currentFigure);
+	OS.PathSegmentCollection_Add(segments, segment);
+	OS.GCHandle_Free(segments);
+	OS.GCHandle_Free(segment);
+	OS.GCHandle_Free(controlPoint1);
+	OS.GCHandle_Free(controlPoint2);
+}
+
+void destroy() {
+	OS.GCHandle_Free(handle);
+	handle = 0;
+	if (currentFigure != 0) OS.GCHandle_Free(currentFigure);
+	currentFigure = 0;
+	if (currentPoint != 0) OS.GCHandle_Free(currentPoint);
+	currentPoint = 0;
+}
+
+/**
+ * Replaces the first four elements in the parameter with values that
+ * describe the smallest rectangle that will completely contain the
+ * receiver (i.e. the bounding box).
+ *
+ * @param bounds the array to hold the result
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parameter is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter is too small to hold the bounding box</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void getBounds(float[] bounds) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (bounds == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (bounds.length < 4) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	int rect = OS.PathGeometry_Bounds(handle);
+	bounds[0] = (float)OS.Rect_X(rect);
+	bounds[1] = (float)OS.Rect_Y(rect);
+	bounds[2] = (float)OS.Rect_Width(rect);
+	bounds[3] = (float)OS.Rect_Height(rect);
+	OS.GCHandle_Free(rect);
+}
+
+/**
+ * Replaces the first two elements in the parameter with values that
+ * describe the current point of the path.
+ *
+ * @param point the array to hold the result
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parameter is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter is too small to hold the end point</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void getCurrentPoint(float[] point) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (point == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (point.length < 2) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (currentPoint != 0) {
+		point[0] = (float)OS.Point_X(currentPoint);
+		point[1] = (float)OS.Point_Y(currentPoint);
+	} else {
+		point[0] = point[1] = 0;
+	}
+}
+
+/**
+ * Returns a device independent representation of the receiver.
+ * 
+ * @return the PathData for the receiver
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see PathData
+ */
+public PathData getPathData() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	byte[] types = new byte[128];
+	float[] points = new float[128 * 2];
+	int pointsIndex = 0, typesIndex = 0;
+	int figures = OS.PathGeometry_Figures(handle);
+	int figureCount = OS.PathFigureCollection_Count(figures);
+	OS.GCHandle_Free(figures);
+	for (int i = 0; i < figureCount; i++) {
+		int figure = OS.PathGeometry_Figures(handle, i);
+		int segments = OS.PathFigure_Segments(figure);
+		int segmentCount = OS.PathSegmentCollection_Count(segments);
+		OS.GCHandle_Free(segments);
+		for (int j = 0; j < segmentCount; j++) {
+			int segment = OS.PathFigure_Segments(figure, j);
+			int type = OS.Object_GetType(segment);
+			//TODO - need get points out of every segment
+			//TODO - need to convert ArcSegment to beziers
+			
+			
+			OS.GCHandle_Free(type);
+			OS.GCHandle_Free(segment);
+		}
+		OS.GCHandle_Free(figure);
+	}
+	if (typesIndex != types.length) {
+		byte[] newTypes = new byte[typesIndex];
+		System.arraycopy(types, 0, newTypes, 0, typesIndex);
+		types = newTypes;
+	}
+	if (pointsIndex != points.length) {
+		float[] newPoints  = new float[pointsIndex];
+		System.arraycopy(points, 0, newPoints, 0, pointsIndex);
+		points = newPoints;
+	}
+	PathData result = new PathData();
+	result.types = types;
+	result.points = points;
+	return result;
+}
+
+/**
+ * Adds to the receiver a line from the current point to
+ * the point specified by (x, y).
+ *
+ * @param x the x coordinate of the end of the line to add
+ * @param y the y coordinate of the end of the line to add
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void lineTo(float x, float y) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	int point = OS.gcnew_Point(x, y);
+	if (currentFigure == 0) newFigure();
+	if (currentPoint != 0) OS.GCHandle_Free(currentPoint);
+	currentPoint = point;
+	int segment = OS.gcnew_LineSegment(point, true);
+	int segments = OS.PathFigure_Segments(currentFigure);
+	OS.PathSegmentCollection_Add(segments, segment);
+	OS.GCHandle_Free(segments);
+	OS.GCHandle_Free(segment);
+}
+
+void init(PathData data) {
+	byte[] types = data.types;
+	float[] points = data.points;
+	for (int i = 0, j = 0; i < types.length; i++) {
+		switch (types[i]) {
+			case SWT.PATH_MOVE_TO:
+				moveTo(points[j++], points[j++]);
+				break;
+			case SWT.PATH_LINE_TO:
+				lineTo(points[j++], points[j++]);
+				break;
+			case SWT.PATH_CUBIC_TO:
+				cubicTo(points[j++], points[j++], points[j++], points[j++], points[j++], points[j++]);
+				break;
+			case SWT.PATH_QUAD_TO:
+				quadTo(points[j++], points[j++], points[j++], points[j++]);
+				break;
+			case SWT.PATH_CLOSE:
+				close();
+				break;
+			default:
+				dispose();
+				SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+	}
+}
+
+/**
+ * Returns <code>true</code> if the Path has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the Path.
+ * When a Path has been disposed, it is an error to
+ * invoke any other method using the Path.
+ *
+ * @return <code>true</code> when the Path is disposed, and <code>false</code> otherwise
+ */
+public boolean isDisposed() {
+	return handle == 0;
+}
+
+/**
+ * Sets the current point of the receiver to the point
+ * specified by (x, y). Note that this starts a new
+ * sub path.
+ *
+ * @param x the x coordinate of the new end point
+ * @param y the y coordinate of the new end point
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void moveTo(float x, float y) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	int point = OS.gcnew_Point(x, y);
+	if (currentPoint != 0) OS.GCHandle_Free(currentPoint);
+	currentPoint = point;
+	if (currentFigure != 0) {
+		int segments = OS.PathFigure_Segments(currentFigure);
+		int count = OS.PathSegmentCollection_Count(segments);
+		OS.GCHandle_Free(segments);
+		if (count == 0) {
+			OS.PathFigure_StartPoint(currentFigure, point);
+			return;
+		}
+	}
+	if (currentFigure != 0) OS.GCHandle_Free(currentFigure);
+	newFigure();
+}
+
+void newFigure() {
+	currentFigure = OS.gcnew_PathFigure();
+	if (currentPoint != 0) {
+		OS.PathFigure_StartPoint(currentFigure, currentPoint);
+	}
+	int figures = OS.PathGeometry_Figures(handle);
+	OS.PathFigureCollection_Add(figures, currentFigure);
+	OS.GCHandle_Free(figures);
+}
+
+/**
+ * Adds to the receiver a quadratic curve based on the parameters.
+ *
+ * @param cx the x coordinate of the control point of the spline
+ * @param cy the y coordinate of the control point of the spline
+ * @param x the x coordinate of the end point of the spline
+ * @param y the y coordinate of the end point of the spline
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void quadTo(float cx, float cy, float x, float y) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	int controlPoint = OS.gcnew_Point(cx, cy);
+	int point = OS.gcnew_Point(x, y);
+	if (currentFigure == 0) newFigure();
+	if (currentPoint != 0) OS.GCHandle_Free(currentPoint);
+	currentPoint = point;
+	int segment = OS.gcnew_QuadraticBezierSegment(controlPoint, point, true);
+	int segments = OS.PathFigure_Segments(currentFigure);
+	OS.PathSegmentCollection_Add(segments, segment);
+	OS.GCHandle_Free(segments);
+	OS.GCHandle_Free(segment);
+	OS.GCHandle_Free(controlPoint);
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the receiver
+ */
+public String toString() {
+	if (isDisposed()) return "Path {*DISPOSED*}";
+	return "Path {" + handle + "}";
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Pattern.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Pattern.java
new file mode 100644
index 0000000..ec1394e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Pattern.java
@@ -0,0 +1,217 @@
+/*******************************************************************************
+ * 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.graphics;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.wpf.*;
+
+/**
+ * Instances of this class represent patterns to use while drawing. Patterns
+ * can be specified either as bitmaps or gradients.
+ * <p>
+ * Application code must explicitly invoke the <code>Pattern.dispose()</code> 
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ * <p>
+ * This class requires the operating system's advanced graphics subsystem
+ * which may not be available on some platforms.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#path">Path, Pattern snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: GraphicsExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ *
+ * @since 3.1
+ */
+public class Pattern extends Resource {
+
+	/**
+	 * the OS resource for the Pattern
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public int handle;
+
+/**
+ * Constructs a new Pattern given an image. Drawing with the resulting
+ * pattern will cause the image to be tiled over the resulting area.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param device the device on which to allocate the pattern
+ * @param image the image that the pattern will draw
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the device is null and there is no current device, or the image is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle for the pattern could not be obtained</li>
+ * </ul>
+ * 
+ * @see #dispose()
+ */
+public Pattern(Device device, Image image) {
+	super(device);
+	if (image == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (image.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	handle = OS.gcnew_ImageBrush(image.handle);
+	if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	OS.TileBrush_TileMode(handle, OS.TileMode_Tile);
+	OS.TileBrush_Stretch(handle, OS.Stretch_Fill);
+	OS.TileBrush_ViewportUnits(handle, OS.BrushMappingMode_Absolute);
+	int rect = OS.gcnew_Rect(0, 0, OS.BitmapSource_PixelWidth(image.handle), OS.BitmapSource_PixelHeight(image.handle));
+	OS.TileBrush_Viewport(handle, rect);
+	OS.GCHandle_Free(rect);
+	init();
+}
+
+/**
+ * Constructs a new Pattern that represents a linear, two color
+ * gradient. Drawing with the pattern will cause the resulting area to be
+ * tiled with the gradient specified by the arguments.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param device the device on which to allocate the pattern
+ * @param x1 the x coordinate of the starting corner of the gradient
+ * @param y1 the y coordinate of the starting corner of the gradient
+ * @param x2 the x coordinate of the ending corner of the gradient
+ * @param y2 the y coordinate of the ending corner of the gradient
+ * @param color1 the starting color of the gradient
+ * @param color2 the ending color of the gradient
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the device is null and there is no current device, 
+ *                              or if either color1 or color2 is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if either color1 or color2 has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle for the pattern could not be obtained</li>
+ * </ul>
+ * 
+ * @see #dispose()
+ */
+public Pattern(Device device, float x1, float y1, float x2, float y2, Color color1, Color color2) {
+	this(device, x1, y1, x2, y2, color1, 0xFF, color2, 0xFF);
+}
+
+/**
+ * Constructs a new Pattern that represents a linear, two color
+ * gradient. Drawing with the pattern will cause the resulting area to be
+ * tiled with the gradient specified by the arguments.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param device the device on which to allocate the pattern
+ * @param x1 the x coordinate of the starting corner of the gradient
+ * @param y1 the y coordinate of the starting corner of the gradient
+ * @param x2 the x coordinate of the ending corner of the gradient
+ * @param y2 the y coordinate of the ending corner of the gradient
+ * @param color1 the starting color of the gradient
+ * @param alpha1 the starting alpha value of the gradient
+ * @param color2 the ending color of the gradient
+ * @param alpha2 the ending alpha value of the gradient
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the device is null and there is no current device, 
+ *                              or if either color1 or color2 is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if either color1 or color2 has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle for the pattern could not be obtained</li>
+ * </ul>
+ * 
+ * @see #dispose()
+ * 
+ * @since 3.2
+ */
+public Pattern(Device device, float x1, float y1, float x2, float y2, Color color1, int alpha1, Color color2, int alpha2) {
+	super(device);
+	if (color1 == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (color1.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (color2 == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (color2.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	int startColor = OS.Color_FromArgb((byte)(alpha1 & 0xFF), OS.Color_R(color1.handle), OS.Color_G(color1.handle), OS.Color_B(color1.handle));
+	if (x1 == x2 && y1 == y2) {
+		handle = OS.gcnew_SolidColorBrush(startColor);
+		if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	} else {
+		int startPoint = OS.gcnew_Point(x1, y1);
+		int endColor = OS.Color_FromArgb((byte)(alpha2 & 0xFF), OS.Color_R(color2.handle), OS.Color_G(color2.handle), OS.Color_B(color2.handle));
+		int endPoint = OS.gcnew_Point(x2, y2);
+		handle = OS.gcnew_LinearGradientBrush(startColor, endColor, startPoint, endPoint);
+		if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+		OS.GradientBrush_MappingMode(handle, OS.BrushMappingMode_Absolute);
+		OS.GradientBrush_SpreadMethod(handle, OS.GradientSpreadMethod_Repeat);
+		OS.GCHandle_Free(endColor);
+		OS.GCHandle_Free(endPoint);
+		OS.GCHandle_Free(startPoint);
+	}
+	OS.GCHandle_Free(startColor);
+	init();
+}
+	
+void destroy() {
+	OS.GCHandle_Free(handle);
+	handle = 0;
+}
+
+/**
+ * Returns <code>true</code> if the Pattern has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the Pattern.
+ * When a Pattern has been disposed, it is an error to
+ * invoke any other method using the Pattern.
+ *
+ * @return <code>true</code> when the Pattern is disposed, and <code>false</code> otherwise
+ */
+public boolean isDisposed() {
+	return handle == 0;
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the receiver
+ */
+public String toString() {
+	if (isDisposed()) return "Pattern {*DISPOSED*}";
+	return "Pattern {" + handle + "}";
+}
+	
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Region.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Region.java
new file mode 100644
index 0000000..e988c51
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Region.java
@@ -0,0 +1,712 @@
+/*******************************************************************************
+ * 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.graphics;
+
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+
+/**
+ * Instances of this class represent areas of an x-y coordinate
+ * system that are aggregates of the areas covered by a number
+ * of polygons.
+ * <p>
+ * Application code must explicitly invoke the <code>Region.dispose()</code> 
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: GraphicsExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+
+public final class Region extends Resource {
+	
+	/**
+	 * the OS resource for the region
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public int handle;
+
+/**
+ * Constructs a new empty region.
+ * 
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for region creation</li>
+ * </ul>
+ */
+public Region () {
+	this(null);
+}
+
+/**
+ * Constructs a new empty region.
+ * <p>
+ * You must dispose the region when it is no longer required. 
+ * </p>
+ *
+ * @param device the device on which to allocate the region
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for region creation</li>
+ * </ul>
+ *
+ * @see #dispose
+ * 
+ * @since 3.0
+ */
+public Region (Device device) {
+	super(device);
+	handle = OS.gcnew_GeometryGroup();
+	if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	init();
+}
+
+/**
+ * Constructs a new region given a handle to the operating
+ * system resources that it should represent.
+ * 
+ * @param handle the handle for the result
+ */
+Region(Device device, int handle) {
+	super(device);
+	this.handle = handle;
+}
+
+/**
+ * Adds the given polygon to the collection of polygons
+ * the receiver maintains to describe its area.
+ *
+ * @param pointArray points that describe the polygon to merge with the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @since 3.0
+*
+ */
+public void add (int[] pointArray) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (pointArray == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	combine(pointArray, OS.GeometryCombineMode_Union);
+}
+
+
+
+/**
+ * Adds the given rectangle to the collection of polygons
+ * the receiver maintains to describe its area.
+ *
+ * @param rect the rectangle to merge with the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the rectangle's width or height is negative</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void add (Rectangle rect) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (rect == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	add (rect.x, rect.y, rect.width, rect.height);
+}
+
+/**
+ * Adds the given rectangle to the collection of polygons
+ * the receiver maintains to describe its area.
+ *
+ * @param x the x coordinate of the rectangle
+ * @param y the y coordinate of the rectangle
+ * @param width the width coordinate of the rectangle
+ * @param height the height coordinate of the rectangle
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the rectangle's width or height is negative</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void add (int x, int y, int width, int height) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (width < 0 || height < 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	int rect = OS.gcnew_Rect(x, y, width, height);
+	int geometry1 = OS.gcnew_RectangleGeometry(rect);
+	int geometries = OS.GeometryGroup_Children(handle);
+	if (OS.GeometryCollection_Count(geometries) == 0) {
+		OS.GeometryCollection_Add(geometries, geometry1);
+	} else {
+		int geometry2 = OS.GeometryGroup_Children(handle, 0);
+		int geometry3 = OS.gcnew_CombinedGeometry(OS.GeometryCombineMode_Union, geometry1, geometry2);
+		OS.GeometryCollection_Remove(geometries, geometry2);
+		OS.GeometryCollection_Add(geometries, geometry3);
+		OS.GCHandle_Free(geometry2);
+		OS.GCHandle_Free(geometry3);
+	}
+	OS.GCHandle_Free(rect);
+	OS.GCHandle_Free(geometry1);
+	OS.GCHandle_Free(geometries);
+}
+
+/**
+ * Adds all of the polygons which make up the area covered
+ * by the argument to the collection of polygons the receiver
+ * maintains to describe its area.
+ *
+ * @param region the region to merge
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void add (Region region) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (region == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (region.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	int geometries = OS.GeometryGroup_Children(handle);
+	if (OS.GeometryCollection_Count(geometries) == 0) {
+		OS.GeometryCollection_Add(geometries, region.handle);
+	} else {
+		int geometry2 = OS.GeometryGroup_Children(handle, 0);
+		int geometry3 = OS.gcnew_CombinedGeometry(OS.GeometryCombineMode_Union, region.handle, geometry2);
+		OS.GeometryCollection_Remove(geometries, geometry2);
+		OS.GeometryCollection_Add(geometries, geometry3);
+		OS.GCHandle_Free(geometry2);
+		OS.GCHandle_Free(geometry3);
+	}
+	OS.GCHandle_Free(geometries);
+}
+
+
+void combine (int[] pointArray, int mode) {
+	if (pointArray.length < 4) return;
+	int list = OS.gcnew_PointCollection(pointArray.length / 2);
+	for (int i = 2; i < pointArray.length; i += 2) {
+		int point = OS.gcnew_Point(pointArray[i], pointArray[i + 1]);
+		OS.PointCollection_Add(list, point);
+		OS.GCHandle_Free(point);
+	}
+	int poly = OS.gcnew_PolyLineSegment(list, true);
+	OS.GCHandle_Free(list);
+	int figure = OS.gcnew_PathFigure();
+	int startPoint = OS.gcnew_Point(pointArray[0], pointArray[1]);
+	OS.PathFigure_StartPoint(figure, startPoint);
+	OS.PathFigure_IsClosed(figure, true);
+	int segments = OS.PathFigure_Segments(figure);
+	OS.PathSegmentCollection_Add(segments, poly);
+	int path = OS.gcnew_PathGeometry();
+	int figures = OS.PathGeometry_Figures(path);
+	OS.PathFigureCollection_Add(figures, figure);
+	int geometries = OS.GeometryGroup_Children(handle);
+	if (OS.GeometryCollection_Count(geometries) == 0) {
+		if (mode == OS.GeometryCombineMode_Union) OS.GeometryCollection_Add(geometries, path);
+	} else {
+		int geometry2 = OS.GeometryGroup_Children(handle, 0);
+		int geometry3 = OS.gcnew_CombinedGeometry(mode, geometry2, path);
+		OS.GeometryCollection_Remove(geometries, geometry2);
+		OS.GeometryCollection_Add(geometries, geometry3);
+		OS.GCHandle_Free(geometry2);
+		OS.GCHandle_Free(geometry3);
+	}
+	OS.GCHandle_Free(geometries);
+	OS.GCHandle_Free(figures);
+	OS.GCHandle_Free(path);
+	OS.GCHandle_Free(segments);
+	OS.GCHandle_Free(figure);
+	OS.GCHandle_Free(startPoint);
+	OS.GCHandle_Free(poly);
+}
+
+/**
+ * Returns <code>true</code> if the point specified by the
+ * arguments is inside the area specified by the receiver,
+ * and <code>false</code> otherwise.
+ *
+ * @param x the x coordinate of the point to test for containment
+ * @param y the y coordinate of the point to test for containment
+ * @return <code>true</code> if the region contains the point and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public boolean contains (int x, int y) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	int point = OS.gcnew_Point(x, y);
+	boolean result = OS.Geometry_FillContains(handle, point);
+	OS.GCHandle_Free(point);
+	return result;
+}
+
+/**
+ * Returns <code>true</code> if the given point is inside the
+ * area specified by the receiver, and <code>false</code>
+ * otherwise.
+ *
+ * @param pt the point to test for containment
+ * @return <code>true</code> if the region contains the point and <code>false</code> otherwise
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public boolean contains (Point pt) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (pt == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	return contains(pt.x, pt.y);
+}
+
+void destroy() {
+	OS.GCHandle_Free(handle);
+	handle = 0;
+}
+
+/**
+ * Compares the argument to the receiver, and returns true
+ * if they represent the <em>same</em> object using a class
+ * specific comparison.
+ *
+ * @param object the object to compare with this object
+ * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise
+ *
+ * @see #hashCode
+ */
+public boolean equals (Object object) {
+	if (this == object) return true;
+	if (!(object instanceof Region)) return false;
+	Region rgn = (Region)object;
+	return handle == rgn.handle;
+}
+
+/**
+ * Returns a rectangle which represents the rectangular
+ * union of the collection of polygons the receiver
+ * maintains to describe its area.
+ *
+ * @return a bounding rectangle for the region
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see Rectangle#union
+ */
+public Rectangle getBounds() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (OS.Geometry_IsEmpty(handle)) return new Rectangle(0, 0, 0, 0);
+	int rect = OS.Geometry_Bounds(handle);
+	Rectangle result = new Rectangle((int)OS.Rect_X(rect), (int)OS.Rect_Y(rect), (int)OS.Rect_Width(rect), (int)OS.Rect_Height(rect));
+	OS.GCHandle_Free(rect);
+	return result;
+}
+
+/**
+ * Returns an integer hash code for the receiver. Any two 
+ * objects that return <code>true</code> when passed to 
+ * <code>equals</code> must return the same value for this
+ * method.
+ *
+ * @return the receiver's hash
+ *
+ * @see #equals
+ */
+public int hashCode () {
+	return handle;
+}
+
+/**
+ * Intersects the given rectangle to the collection of polygons
+ * the receiver maintains to describe its area.
+ *
+ * @param rect the rectangle to intersect with the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the rectangle's width or height is negative</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void intersect (Rectangle rect) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (rect == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	intersect (rect.x, rect.y, rect.width, rect.height);
+}
+
+/**
+ * Intersects the given rectangle to the collection of polygons
+ * the receiver maintains to describe its area.
+ *
+ * @param x the x coordinate of the rectangle
+ * @param y the y coordinate of the rectangle
+ * @param width the width coordinate of the rectangle
+ * @param height the height coordinate of the rectangle
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the rectangle's width or height is negative</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void intersect (int x, int y, int width, int height) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (width < 0 || height < 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	int rect = OS.gcnew_Rect(x, y, width, height);
+	int geometry1 = OS.gcnew_RectangleGeometry(rect);
+	int geometries = OS.GeometryGroup_Children(handle);
+	if (OS.GeometryCollection_Count(geometries) != 0) {
+		int geometry2 = OS.GeometryGroup_Children(handle, 0);
+		int geometry3 = OS.gcnew_CombinedGeometry(OS.GeometryCombineMode_Intersect, geometry1, geometry2);
+		OS.GeometryCollection_Remove(geometries, geometry2);
+		OS.GeometryCollection_Add(geometries, geometry3);
+		OS.GCHandle_Free(geometry2);
+		OS.GCHandle_Free(geometry3);
+	}
+	OS.GCHandle_Free(rect);
+	OS.GCHandle_Free(geometry1);
+	OS.GCHandle_Free(geometries);
+}
+
+/**
+ * Intersects all of the polygons which make up the area covered
+ * by the argument to the collection of polygons the receiver
+ * maintains to describe its area.
+ *
+ * @param region the region to intersect
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void intersect (Region region) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (region == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (region.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	int geometries = OS.GeometryGroup_Children(handle);
+	if (OS.GeometryCollection_Count(geometries) != 0) {
+		int geometry2 = OS.GeometryGroup_Children(handle, 0);
+		int geometry3 = OS.gcnew_CombinedGeometry(OS.GeometryCombineMode_Intersect, region.handle, geometry2);
+		OS.GeometryCollection_Remove(geometries, geometry2);
+		OS.GeometryCollection_Add(geometries, geometry3);
+		OS.GCHandle_Free(geometry2);
+		OS.GCHandle_Free(geometry3);
+	}
+	OS.GCHandle_Free(geometries);
+}
+
+/**
+ * Returns <code>true</code> if the rectangle described by the
+ * arguments intersects with any of the polygons the receiver
+ * maintains to describe its area, and <code>false</code> otherwise.
+ *
+ * @param x the x coordinate of the origin of the rectangle
+ * @param y the y coordinate of the origin of the rectangle
+ * @param width the width of the rectangle
+ * @param height the height of the rectangle
+ * @return <code>true</code> if the rectangle intersects with the receiver, and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see Rectangle#intersects(Rectangle)
+ */
+public boolean intersects (int x, int y, int width, int height) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	int rect = OS.gcnew_Rect(x, y, width, height);
+	int geometry = OS.gcnew_RectangleGeometry(rect);
+	int result = OS.Geometry_FillContainsWithDetail(handle, geometry);
+	OS.GCHandle_Free(geometry);
+	OS.GCHandle_Free(rect);
+	return result != OS.IntersectionDetail_Empty;
+}
+
+/**
+ * Returns <code>true</code> if the given rectangle intersects
+ * with any of the polygons the receiver maintains to describe
+ * its area and <code>false</code> otherwise.
+ *
+ * @param rect the rectangle to test for intersection
+ * @return <code>true</code> if the rectangle intersects with the receiver, and <code>false</code> otherwise
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see Rectangle#intersects(Rectangle)
+ */
+public boolean intersects (Rectangle rect) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (rect == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	return intersects(rect.x, rect.y, rect.width, rect.height);
+}
+
+/**
+ * Returns <code>true</code> if the region has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the region.
+ * When a region has been disposed, it is an error to
+ * invoke any other method using the region.
+ *
+ * @return <code>true</code> when the region is disposed, and <code>false</code> otherwise
+ */
+public boolean isDisposed() {
+	return handle == 0;
+}
+
+/**
+ * Returns <code>true</code> if the receiver does not cover any
+ * area in the (x, y) coordinate plane, and <code>false</code> if
+ * the receiver does cover some area in the plane.
+ *
+ * @return <code>true</code> if the receiver is empty, and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public boolean isEmpty () {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return OS.Geometry_IsEmpty(handle);
+}
+
+/**
+ * Subtracts the given polygon from the collection of polygons
+ * the receiver maintains to describe its area.
+ *
+ * @param pointArray points that describe the polygon to merge with the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void subtract (int[] pointArray) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (pointArray == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	combine(pointArray, OS.GeometryCombineMode_Exclude);
+}
+
+/**
+ * Subtracts the given rectangle from the collection of polygons
+ * the receiver maintains to describe its area.
+ *
+ * @param rect the rectangle to subtract from the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the rectangle's width or height is negative</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void subtract (Rectangle rect) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (rect == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	subtract (rect.x, rect.y, rect.width, rect.height);
+}
+
+/**
+ * Subtracts the given rectangle from the collection of polygons
+ * the receiver maintains to describe its area.
+ *
+ * @param x the x coordinate of the rectangle
+ * @param y the y coordinate of the rectangle
+ * @param width the width coordinate of the rectangle
+ * @param height the height coordinate of the rectangle
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the rectangle's width or height is negative</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void subtract (int x, int y, int width, int height) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (width < 0 || height < 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);	
+	int rect = OS.gcnew_Rect(x, y, width, height);
+	int geometry1 = OS.gcnew_RectangleGeometry(rect);
+	int geometries = OS.GeometryGroup_Children(handle);
+	if (OS.GeometryCollection_Count(geometries) != 0) {
+		int geometry2 = OS.GeometryGroup_Children(handle, 0);
+		int geometry3 = OS.gcnew_CombinedGeometry(OS.GeometryCombineMode_Exclude, geometry2, geometry1);
+		OS.GeometryCollection_Remove(geometries, geometry2);
+		OS.GeometryCollection_Add(geometries, geometry3);
+		OS.GCHandle_Free(geometry2);
+		OS.GCHandle_Free(geometry3);
+	}
+	OS.GCHandle_Free(rect);
+	OS.GCHandle_Free(geometry1);
+	OS.GCHandle_Free(geometries);
+}
+
+/**
+ * Subtracts all of the polygons which make up the area covered
+ * by the argument from the collection of polygons the receiver
+ * maintains to describe its area.
+ *
+ * @param region the region to subtract
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void subtract (Region region) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (region == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (region.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	int geometries = OS.GeometryGroup_Children(handle);
+	if (OS.GeometryCollection_Count(geometries) != 0) {
+		int geometry2 = OS.GeometryGroup_Children(handle, 0);
+		int geometry3 = OS.gcnew_CombinedGeometry(OS.GeometryCombineMode_Exclude, geometry2, region.handle);
+		OS.GeometryCollection_Remove(geometries, geometry2);
+		OS.GeometryCollection_Add(geometries, geometry3);
+		OS.GCHandle_Free(geometry2);
+		OS.GCHandle_Free(geometry3);
+	}
+	OS.GCHandle_Free(geometries);
+}
+
+/**
+ * Translate all of the polygons the receiver maintains to describe
+ * its area by the specified point.
+ *
+ * @param x the x coordinate of the point to translate
+ * @param y the y coordinate of the point to translate
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void translate (int x, int y) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	int transform1 = OS.Geometry_Transform(handle);
+	int transform2 = OS.gcnew_TranslateTransform(x, y);
+	int transform = OS.gcnew_TransformGroup();
+	int transforms = OS.TransformGroup_Children(transform);
+	OS.TransformCollection_Add(transforms, transform1);
+	OS.TransformCollection_Add(transforms, transform2);
+	OS.Geometry_Transform(handle, transform);
+	OS.GCHandle_Free(transform1);
+	OS.GCHandle_Free(transform2);
+	OS.GCHandle_Free(transform);
+	OS.GCHandle_Free(transforms);
+}
+
+/**
+ * Translate all of the polygons the receiver maintains to describe
+ * its area by the specified point.
+ *
+ * @param pt the point to translate
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the argument is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void translate (Point pt) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (pt == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	translate (pt.x, pt.y);
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the receiver
+ */
+public String toString () {
+	if (isDisposed()) return "Region {*DISPOSED*}";
+	return "Region {" + handle + "}";
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new region.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Region</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param device the device on which to allocate the region
+ * @param handle the handle for the region
+ * @return a new region object containing the specified device and handle
+ */
+public static Region wpf_new(Device device, int handle) {
+	return new Region(device, handle);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/TextLayout.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/TextLayout.java
new file mode 100644
index 0000000..ad7af71
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/TextLayout.java
@@ -0,0 +1,1877 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.graphics;
+
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+
+/**
+ * <code>TextLayout</code> is a graphic object that represents
+ * styled text.
+ * <p>
+ * Instances of this class provide support for drawing, cursor
+ * navigation, hit testing, text wrapping, alignment, tab expansion
+ * line breaking, etc.  These are aspects required for rendering internationalized text.
+ * </p><p>
+ * Application code must explicitly invoke the <code>TextLayout#dispose()</code> 
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#textlayout">TextLayout, TextStyle snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: CustomControlExample, StyledText tab</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.0
+ */
+public final class TextLayout extends Resource {
+	Font font;
+	String text, segmentsText;
+	int lineSpacing;
+	int ascent, descent;
+	int alignment;
+	int wrapWidth;
+	int orientation;
+	int indent;
+	boolean justify;
+	int[] tabs;
+	int[] segments;
+	StyleItem[] styles;
+	
+	int string, defaultTextProperties;
+	int[] runs;
+	int[] lines;
+
+	static final RGB LINK_FOREGROUND = new RGB (0, 51, 153);
+	static final char LTR_MARK = '\u200E', RTL_MARK = '\u200F';
+	static final int TAB_COUNT = 32;
+	
+class StyleItem {
+	TextStyle style;
+	int start, length;
+	int textProperties;
+	
+	void free() {		
+		if (textProperties != 0) OS.GCHandle_Free(textProperties);
+		textProperties = 0;
+	}
+	public String toString () {
+		return "StyleItem {" + start + ", " + style + "}";
+	}
+}
+
+/**	 
+ * Constructs a new instance of this class on the given device.
+ * <p>
+ * You must dispose the text layout when it is no longer required. 
+ * </p>
+ * 
+ * @param device the device on which to allocate the text layout
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ * </ul>
+ * 
+ * @see #dispose()
+ */
+public TextLayout (Device device) {
+	super(device);
+	wrapWidth = ascent = descent = -1;
+	lineSpacing = 0;
+	orientation = SWT.LEFT_TO_RIGHT;
+	styles = new StyleItem[2];
+	styles[0] = new StyleItem();
+	styles[1] = new StyleItem();
+	text = ""; //$NON-NLS-1$
+	init();
+}
+
+void checkLayout () {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+}
+
+/* 
+*  Compute the runs: itemize, shape, place, and reorder the runs.
+* 	Break paragraphs into lines, wraps the text, and initialize caches.
+*/
+void computeRuns () {
+	if (lines != null) return;
+	
+	int jniRef = OS.NewGlobalRef(this);
+	int textSource = OS.gcnew_SWTTextSource(jniRef);
+	int formatter = OS.TextFormatter_Create();
+	Font font = this.font != null ? this.font : device.systemFont;
+	segmentsText = getSegmentsText();
+	int length = segmentsText.length();
+	char [] buffer = new char [length];
+	segmentsText.getChars (0, length, buffer, 0);
+	string = OS.gcnew_String(buffer, 0 ,length);
+	int culture = OS.CultureInfo_CurrentUICulture();
+	defaultTextProperties = OS.gcnew_SWTTextRunProperties(font.handle, font.size, font.size, 0, 0, 0, OS.BaselineAlignment_Baseline, culture);
+	for (int i = 0; i < styles.length; i++) {
+		StyleItem run = styles[i];
+		TextStyle style = run.style;
+		if (style != null) {
+			Font styleFont = style.font != null ? style.font : font;
+			int fg = 0;
+			if (style.foreground != null) {
+				fg = OS.gcnew_SolidColorBrush(style.foreground.handle);
+			} else {
+				if (style.underline && style.underlineStyle == SWT.UNDERLINE_LINK) {
+					int color = OS.Color_FromArgb((byte)0xFF, (byte)LINK_FOREGROUND.red, (byte)LINK_FOREGROUND.green, (byte)LINK_FOREGROUND.blue);
+					fg = OS.gcnew_SolidColorBrush(color);
+					OS.GCHandle_Free(color);
+				}
+			}
+			int bg = 0;
+			if (style.background != null) {
+				bg = OS.gcnew_SolidColorBrush(style.background.handle);
+			}
+			int decorations = 0;
+			if (style.strikeout || style.underline) {
+				decorations = OS.gcnew_TextDecorationCollection(2);
+				if (style.strikeout) {
+					int pen = 0;
+					if (style.strikeoutColor != null) {
+						int color = style.strikeoutColor.handle;
+						int brush = OS.gcnew_SolidColorBrush(color);
+						pen = OS.gcnew_Pen(brush, 1);
+						OS.GCHandle_Free(brush);
+					}
+					int strikeout = OS.gcnew_TextDecoration(OS.TextDecorationLocation_Strikethrough, pen, 0, OS.TextDecorationUnit_FontRecommended, OS.TextDecorationUnit_FontRecommended);
+					OS.TextDecorationCollection_Add(decorations, strikeout);
+					OS.GCHandle_Free(strikeout);
+					if (pen != 0) OS.GCHandle_Free(pen);
+				}
+				if (style.underline) {
+					int brush;
+					if (style.underlineColor != null) {
+						Color color = style.underlineColor;
+						brush = OS.gcnew_SolidColorBrush(color.handle);
+					} else {
+						if (fg != 0) {
+							brush = fg;
+						} else {
+							brush = OS.Brushes_Black();
+						}
+					}
+					int pen = OS.gcnew_Pen(brush, 1f);
+					if (brush != fg) OS.GCHandle_Free(brush);
+					int underline;
+					switch (style.underlineStyle) {
+						case SWT.UNDERLINE_SQUIGGLE:
+							//TODO implement
+						case SWT.UNDERLINE_ERROR:
+							int dashStyle = OS.DashStyles_Dash();
+							OS.Pen_DashStyle(pen, dashStyle);
+							underline = OS.gcnew_TextDecoration(OS.TextDecorationLocation_Underline, pen, 0, OS.TextDecorationUnit_FontRecommended, OS.TextDecorationUnit_FontRecommended);
+							OS.TextDecorationCollection_Add(decorations, underline);
+							OS.GCHandle_Free(underline);
+							OS.GCHandle_Free(dashStyle);
+							break;
+						case SWT.UNDERLINE_DOUBLE: 
+							underline = OS.gcnew_TextDecoration(OS.TextDecorationLocation_Underline, pen, 1, OS.TextDecorationUnit_FontRecommended, OS.TextDecorationUnit_FontRecommended);
+							OS.TextDecorationCollection_Add(decorations, underline);
+							OS.GCHandle_Free(underline);
+							//FALLTHROU
+						case SWT.UNDERLINE_LINK: 
+						case SWT.UNDERLINE_SINGLE: 
+							underline = OS.gcnew_TextDecoration(OS.TextDecorationLocation_Underline, pen, 0, OS.TextDecorationUnit_FontRecommended, OS.TextDecorationUnit_FontRecommended);
+							OS.TextDecorationCollection_Add(decorations, underline);
+							OS.GCHandle_Free(underline);
+							break;
+					}
+					if (pen != 0) OS.GCHandle_Free(pen);
+				}
+			}
+			run.textProperties = OS.gcnew_SWTTextRunProperties(styleFont.handle, styleFont.size, styleFont.size, decorations, fg, bg, OS.BaselineAlignment_Baseline, culture);
+			if (fg != 0) OS.GCHandle_Free(fg);
+			if (bg != 0) OS.GCHandle_Free(bg);
+			if (decorations != 0) OS.GCHandle_Free(decorations);
+		}
+	}
+	int textAlignment = OS.TextAlignment_Left;
+	if (justify) {
+		textAlignment = OS.TextAlignment_Justify;
+	} else {
+		switch (alignment) {
+			case SWT.CENTER: textAlignment = OS.TextAlignment_Center; break; 
+			case SWT.RIGHT: textAlignment = OS.TextAlignment_Right; break;
+		}
+	}
+	int flowDirection = (orientation & SWT.RIGHT_TO_LEFT) != 0 ? OS.FlowDirection_RightToLeft : OS.FlowDirection_LeftToRight;
+	int textWrapping = wrapWidth != -1 ? OS.TextWrapping_Wrap : OS.TextWrapping_NoWrap;
+	int tabCollection = 0;
+	if (tabs != null) {
+		int position = 0;
+		int tabLength = Math.max(tabs.length, TAB_COUNT), i;
+		tabCollection = OS.gcnew_TextTabPropertiesCollection(tabLength);
+		for (i = 0; i < tabs.length; i++) {
+			position = tabs[i];
+			int tab = OS.gcnew_TextTabProperties(OS.TextTabAlignment_Left, position, 0, 0);
+			OS.TextTabPropertiesCollection_Add(tabCollection, tab);
+			OS.GCHandle_Free(tab);
+		}
+		int width = tabs[tabs.length - 1];
+		if (tabs.length > 1) width -= tabs[tabs.length - 2];
+		if (width > 0) {
+			for (; i < length; i++) {
+				position += width;
+				int tab = OS.gcnew_TextTabProperties(OS.TextTabAlignment_Left, position, 0, 0);
+				OS.TextTabPropertiesCollection_Add(tabCollection, tab);
+				OS.GCHandle_Free(tab);
+			}
+		}
+	}
+	int paragraphProperties = OS.gcnew_SWTTextParagraphProperties(flowDirection, textAlignment, false, defaultTextProperties, textWrapping, 0, 0, tabCollection); 
+	int firstParagraphProperties = OS.gcnew_SWTTextParagraphProperties(flowDirection, textAlignment, true, defaultTextProperties, textWrapping, 0, indent, tabCollection);  
+	int offset = 0;
+	int index = 0;
+	lines = new int[4];
+	int lineBreak = 0;
+	while (offset < length || offset == 0) {
+		char ch;
+		boolean firstLine = offset == 0 || (ch = segmentsText.charAt(offset - 1)) == '\r' || ch == '\n';
+		int paragraphProps = firstLine ? firstParagraphProperties : paragraphProperties;
+		int textLine = OS.TextFormatter_FormatLine(formatter, textSource, offset, wrapWidth != -1 ? wrapWidth : 0, paragraphProps, lineBreak);
+		offset += OS.TextLine_Length(textLine);
+		lineBreak = OS.TextLine_GetTextLineBreak(textLine);
+		if (index == lines.length) {
+			int[] tmpLines = new int[index + 4];
+			System.arraycopy(lines, 0, tmpLines, 0, index);
+			lines = tmpLines;
+		}
+		lines[index++] = textLine;
+	}
+	if (index != lines.length) {
+		int[] tmpLines = new int[index];
+		System.arraycopy(lines, 0, tmpLines, 0, index);
+		lines = tmpLines;
+	}
+	if (tabCollection != 0) OS.GCHandle_Free(tabCollection);
+	OS.GCHandle_Free(paragraphProperties);
+	OS.GCHandle_Free(firstParagraphProperties);
+	OS.GCHandle_Free(culture);
+	OS.GCHandle_Free(formatter);
+	OS.GCHandle_Free(textSource);
+	OS.DeleteGlobalRef(jniRef);
+}
+
+ void destroy() {
+	freeRuns();
+	font = null;	
+	text = null;
+	segmentsText = null;
+	tabs = null;
+	styles = null;
+//	lineOffset = null;
+//	lineY = null;
+//	lineWidth = null;
+}
+
+/**
+ * Draws the receiver's text using the specified GC at the specified
+ * point.
+ * 
+ * @param gc the GC to draw
+ * @param x the x coordinate of the top left corner of the rectangular area where the text is to be drawn
+ * @param y the y coordinate of the top left corner of the rectangular area where the text is to be drawn
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the gc is null</li>
+ * </ul>
+ */
+public void draw (GC gc, int x, int y) {
+	draw(gc, x, y, -1, -1, null, null);
+}
+
+/**
+ * Draws the receiver's text using the specified GC at the specified
+ * point.
+ * 
+ * @param gc the GC to draw
+ * @param x the x coordinate of the top left corner of the rectangular area where the text is to be drawn
+ * @param y the y coordinate of the top left corner of the rectangular area where the text is to be drawn
+ * @param selectionStart the offset where the selections starts, or -1 indicating no selection
+ * @param selectionEnd the offset where the selections ends, or -1 indicating no selection
+ * @param selectionForeground selection foreground, or NULL to use the system default color
+ * @param selectionBackground selection background, or NULL to use the system default color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the gc is null</li>
+ * </ul>
+ */
+public void draw (GC gc, int x, int y, int selectionStart, int selectionEnd, Color selectionForeground, Color selectionBackground) {
+	draw(gc, x, y, selectionStart, selectionEnd, selectionForeground, selectionBackground, 0);
+}
+/**
+ * Draws the receiver's text using the specified GC at the specified
+ * point.
+ * <p>
+ * The parameter <code>flags</code> can include one of <code>SWT.DELIMITER_SELECTION</code>
+ * or <code>SWT.FULL_SELECTION</code> to specify the selection behavior on all lines except
+ * for the last line, and can also include <code>SWT.LAST_LINE_SELECTION</code> to extend
+ * the specified selection behavior to the last line.
+ * </p>
+ * @param gc the GC to draw
+ * @param x the x coordinate of the top left corner of the rectangular area where the text is to be drawn
+ * @param y the y coordinate of the top left corner of the rectangular area where the text is to be drawn
+ * @param selectionStart the offset where the selections starts, or -1 indicating no selection
+ * @param selectionEnd the offset where the selections ends, or -1 indicating no selection
+ * @param selectionForeground selection foreground, or NULL to use the system default color
+ * @param selectionBackground selection background, or NULL to use the system default color
+ * @param flags drawing options
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the gc is null</li>
+ * </ul>
+ * 
+ * @since 3.3
+ */
+public void draw (GC gc, int x, int y, int selectionStart, int selectionEnd, Color selectionForeground, Color selectionBackground, int flags) {
+	checkLayout();
+	computeRuns();
+	if (gc == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);	
+	if (selectionForeground != null && selectionForeground.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (selectionBackground != null && selectionBackground.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	int length = text.length();
+	if (length == 0 && flags == 0) return;
+	gc.checkGC(GC.FOREGROUND);
+	int fg = OS.Pen_Brush(gc.data.pen);
+	OS.SWTTextRunProperties_ForegroundBrush(defaultTextProperties, fg);
+	for (int i = 0; i < styles.length; i++) {
+		StyleItem run = styles[i];
+		if (run.textProperties == 0) continue;
+		if (run.style != null && run.style.foreground != null) continue;
+		if (run.style != null && run.style.underline && run.style.underlineStyle == SWT.UNDERLINE_LINK) continue;
+		OS.SWTTextRunProperties_ForegroundBrush(run.textProperties, fg);
+	}
+	int drawingContext = gc.handle;
+	boolean hasSelection = selectionStart <= selectionEnd && selectionStart != -1 && selectionEnd != -1;
+	int selBrush = 0, selGeometry = 0, geometries = 0;
+	if (hasSelection || (flags & SWT.LAST_LINE_SELECTION) != 0) {
+		selectionStart = Math.min(Math.max(0, selectionStart), length - 1);
+		selectionEnd = Math.min(Math.max(0, selectionEnd), length - 1);
+		selectionStart = translateOffset(selectionStart);
+		selectionEnd = translateOffset(selectionEnd);
+		if (selectionBackground != null) {
+			selBrush = OS.gcnew_SolidColorBrush(selectionBackground.handle);
+		} else {
+			selBrush = OS.Brushes_LightSkyBlue();
+		}
+		selGeometry = OS.gcnew_GeometryGroup();
+		geometries = OS.GeometryGroup_Children(selGeometry);
+	}
+	int lineStart = 0, lineEnd = 0;
+	double drawY = y;
+	for (int i = 0; i < lines.length; i++) {
+		int line = lines[i];
+		if (line == 0) break;
+		lineStart = lineEnd;
+		lineEnd = lineStart + OS.TextLine_Length(line);
+		double nextDrawY, selY = drawY;
+		int lineHeight = (int)OS.TextLine_Height(line);
+		if (ascent != -1 && descent != -1) {
+			lineHeight = Math.max(lineHeight, ascent + descent);
+			nextDrawY = drawY + lineHeight + lineSpacing;
+			int baseline = (int)OS.TextLine_Baseline(line);
+			if (ascent > baseline) drawY += ascent - baseline;
+		} else {
+			nextDrawY = drawY + lineHeight + lineSpacing;
+		}
+
+		//draw line text
+		int point = OS.gcnew_Point(x, drawY);
+		OS.TextLine_Draw(line, drawingContext, point, 0);
+		OS.GCHandle_Free(point);
+		
+		//draw line selection
+		boolean fullSelection = selectionStart <= lineStart && selectionEnd >= lineEnd;
+		boolean partialSelection = !(selectionStart > lineEnd || lineStart > selectionEnd);
+		if (flags != 0 && (hasSelection || (flags & SWT.LAST_LINE_SELECTION) != 0)) {
+			boolean extent = false;
+			if (i == lines.length - 1 && (flags & SWT.LAST_LINE_SELECTION) != 0) {
+				extent = true;
+			} else {
+				int breakLength = OS.TextLine_NewlineLength(line);
+				if (breakLength != 0) {
+					if (selectionStart <= lineEnd && lineEnd <= selectionEnd) extent = true;
+				} else {
+					if (selectionStart <= lineEnd && lineEnd < selectionEnd && (flags & SWT.FULL_SELECTION) != 0) {
+						extent = true;
+					}
+				}
+			}
+			if (extent) {
+				int extentWidth = (flags & SWT.FULL_SELECTION) != 0 ? 0x7ffffff : lineHeight / 3;
+				int textRect = OS.gcnew_Rect(OS.TextLine_WidthIncludingTrailingWhitespace(line) + x, selY, extentWidth, lineHeight);
+				int geometry = OS.gcnew_RectangleGeometry(textRect);
+				OS.GeometryCollection_Add(geometries, geometry);
+				OS.GCHandle_Free(geometry);
+				OS.GCHandle_Free(textRect);
+			}
+		}
+		if (hasSelection && (fullSelection || partialSelection)) {
+			int selLineStart = Math.max (lineStart, selectionStart);
+			int selLineEnd = Math.min (lineEnd, selectionEnd);
+			int rects = OS.TextLine_GetTextBounds(line, selLineStart, selLineEnd - selLineStart + 1);
+			if (rects != 0) {
+				int enumerator = OS.TextBoundsCollection_GetEnumerator(rects);
+				while (OS.IEnumerator_MoveNext(enumerator)) {
+					int bounds = OS.TextBoundsCollection_Current(enumerator);
+					int textRect = OS.TextBounds_Rectangle(bounds);
+					OS.Rect_X(textRect, OS.Rect_X(textRect) + x);
+					OS.Rect_Y(textRect, selY);
+					OS.Rect_Height(textRect, lineHeight);
+					int geometry = OS.gcnew_RectangleGeometry(textRect);
+					OS.GeometryCollection_Add(geometries, geometry);
+					OS.GCHandle_Free(geometry);
+					OS.GCHandle_Free(textRect);
+					OS.GCHandle_Free(bounds);
+				}
+				OS.GCHandle_Free(enumerator);
+			}
+			OS.GCHandle_Free(rects);
+		}
+
+		drawY = nextDrawY;
+	}
+	for (int i = 0; i < styles.length - 1; i++) {
+		StyleItem run = styles[i];
+		TextStyle style = run.style;
+		if (style == null) continue;
+		if (style.borderStyle != SWT.NONE && (i + 1 >= styles.length || !style.isAdherentBorder(styles[i + 1].style))) {
+			int start = run.start;
+			int end = styles[i + 1].start - 1;
+			for (int j = i; j > 0 && style.isAdherentBorder(styles[j - 1].style); j--) {
+				start = styles[j - 1].start;
+			}
+			Color color = style.borderColor;
+			if (color == null) color = style.foreground;
+			if (color == null) color = gc.getForeground();
+			int brush = OS.gcnew_SolidColorBrush(color.handle);
+			int pen = OS.gcnew_Pen(brush, 1);
+			OS.GCHandle_Free(brush);
+			int dashStyle = 0;
+			switch (style.borderStyle) {
+				case SWT.BORDER_SOLID:
+					dashStyle = OS.DashStyles_Solid(); break;
+				case SWT.BORDER_DOT:
+					dashStyle = OS.DashStyles_Dot(); break;
+				case SWT.BORDER_DASH:
+					dashStyle = OS.DashStyles_Dash(); break;
+			}
+			OS.Pen_DashStyle(pen, dashStyle);
+			if (dashStyle != 0) OS.GCHandle_Free(dashStyle);
+			int lineY = y;
+			lineStart = lineEnd = 0;
+			for (int j = 0; j < lines.length; j++) {
+				int lineLength = OS.TextLine_Length(lines[j]);
+				lineStart = lineEnd;
+				lineEnd = lineStart + lineLength;
+				if (start < lineEnd) {
+					if (end < lineStart) break;
+					int rangeStart = Math.max(start, lineStart);
+					int rangLength = Math.min(end, lineEnd) - rangeStart + 1;
+					int rects = OS.TextLine_GetTextBounds(lines[j], rangeStart, rangLength);	
+					if (rects != 0) {
+						int enumerator = OS.TextBoundsCollection_GetEnumerator(rects);
+						while (OS.IEnumerator_MoveNext(enumerator)) {
+							int bounds = OS.TextBoundsCollection_Current(enumerator);
+							int textRect = OS.TextBounds_Rectangle(bounds);
+							OS.Rect_Y(textRect, OS.Rect_Y(textRect) + lineY);
+							OS.Rect_X(textRect, OS.Rect_X(textRect) + x);
+							OS.Rect_Width(textRect, OS.Rect_Width(textRect) - 1);
+							OS.Rect_Height(textRect, OS.Rect_Height(textRect) - 1);
+							OS.DrawingContext_DrawRectangle(drawingContext, 0, pen, textRect);
+							OS.GCHandle_Free(textRect);
+							OS.GCHandle_Free(bounds);
+						}
+						OS.GCHandle_Free(enumerator);
+					}
+					OS.GCHandle_Free(rects);
+				}
+				int lineHeight = (int)OS.TextLine_Height(lines[j]);
+				if (ascent != -1 && descent != -1) lineHeight = Math.max(lineHeight, ascent + descent);
+				lineY += lineHeight + lineSpacing;
+			}
+			OS.GCHandle_Free(pen);
+		} 
+	}
+	
+	if (selGeometry != 0) {
+		OS.DrawingContext_PushOpacity(drawingContext, 0.4);
+		OS.DrawingContext_DrawGeometry(drawingContext, selBrush, 0, selGeometry);
+		OS.DrawingContext_Pop(drawingContext);
+		OS.GCHandle_Free(geometries);
+		OS.GCHandle_Free(selGeometry);
+	}
+	if (selBrush != 0) OS.GCHandle_Free(selBrush);
+	OS.GCHandle_Free(fg);
+}
+
+void freeRuns () {
+	if (lines == null) return;
+	for (int i = 0; i < lines.length; i++) {
+		if (lines[i] != 0) {
+			OS.GCHandle_Free(lines[i]);
+		}
+	}
+	lines = null;
+	if (runs != null) {
+		for (int i = 0; i < runs.length; i++) {
+			if (runs[i] == 0) break;
+			OS.GCHandle_Free(runs[i]);
+		}
+		runs = null;
+	}
+	for (int i = 0; i < styles.length; i++) {
+		 styles[i].free();
+	}
+	if (defaultTextProperties != 0) OS.GCHandle_Free(defaultTextProperties);
+	if (string != 0) OS.GCHandle_Free(string);
+	defaultTextProperties = string = 0;
+	segmentsText = null;
+}
+
+/** 
+ * Returns the receiver's horizontal text alignment, which will be one
+ * of <code>SWT.LEFT</code>, <code>SWT.CENTER</code> or
+ * <code>SWT.RIGHT</code>.
+ *
+ * @return the alignment used to positioned text horizontally
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getAlignment () {
+	checkLayout();
+	return alignment;
+}
+
+/**
+ * Returns the ascent of the receiver.
+ *
+ * @return the ascent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #getDescent()
+ * @see #setDescent(int)
+ * @see #setAscent(int)
+ * @see #getLineMetrics(int)
+ */
+public int getAscent () {
+	checkLayout();
+	return ascent;
+}
+
+/**
+ * Returns the bounds of the receiver. The width returned is either the
+ * width of the longest line or the width set using {@link TextLayout#setWidth(int)}.
+ * To obtain the text bounds of a line use {@link TextLayout#getLineBounds(int)}.
+ * 
+ * @return the bounds of the receiver
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #setWidth(int)
+ * @see #getLineBounds(int)
+ */
+public Rectangle getBounds () {
+	checkLayout();
+	computeRuns();
+	double width = 0;
+	double height = 0;
+	for (int line=0; line<lines.length; line++) {
+		if (wrapWidth == -1) width = Math.max(width, OS.TextLine_WidthIncludingTrailingWhitespace(lines[line]));
+		int lineHeight = (int)OS.TextLine_Height(lines[line]);
+		if (ascent != -1 && descent != -1) lineHeight = Math.max(lineHeight, ascent + descent);
+		height += lineHeight + lineSpacing;
+	}
+	if (wrapWidth != -1) width = wrapWidth; 
+	return new Rectangle (0, 0, (int)width, (int)height);
+}
+
+/**
+ * Returns the bounds for the specified range of characters. The
+ * bounds is the smallest rectangle that encompasses all characters
+ * in the range. The start and end offsets are inclusive and will be
+ * clamped if out of range.
+ * 
+ * @param start the start offset
+ * @param end the end offset
+ * @return the bounds of the character range
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Rectangle getBounds (int start, int end) {
+	checkLayout();
+	computeRuns();
+	int length = text.length();
+	if (length == 0) return new Rectangle(0, 0, 0, 0);
+	if (start > end) return new Rectangle(0, 0, 0, 0);
+	start = Math.min(Math.max(0, start), length - 1);
+	end = Math.min(Math.max(0, end), length - 1);
+	start = translateOffset(start);
+	end = translateOffset(end);
+	int lineStart = 0, lineEnd = 0, lineY = 0;
+	int rect = 0;
+	for (int i = 0; i < lines.length; i++) {
+		int lineLength = OS.TextLine_Length(lines[i]);
+		lineStart = lineEnd;
+		lineEnd = lineStart + lineLength;
+		if (start < lineEnd) {
+			if (end < lineStart) break;
+			int rangeStart = Math.max(start, lineStart);
+			int rangLength = Math.min(end, lineEnd) - rangeStart + 1;
+			int rects = OS.TextLine_GetTextBounds(lines[i], rangeStart, rangLength);	
+			if (rects != 0) {
+				int enumerator = OS.TextBoundsCollection_GetEnumerator(rects);
+				while (OS.IEnumerator_MoveNext(enumerator)) {
+					int bounds = OS.TextBoundsCollection_Current(enumerator);
+					int textRect = OS.TextBounds_Rectangle(bounds);
+					OS.Rect_Y(textRect, OS.Rect_Y(textRect) + lineY);
+					if (rect != 0) {
+						OS.Rect_Union(rect, textRect);
+						OS.GCHandle_Free(textRect);
+					} else {
+						rect = textRect;
+					}				
+					OS.GCHandle_Free(bounds);
+				}
+				OS.GCHandle_Free(enumerator);
+			}
+			OS.GCHandle_Free(rects);
+		}
+		int lineHeight = (int)OS.TextLine_Height(lines[i]);
+		if (ascent != -1 && descent != -1) lineHeight = Math.max(lineHeight, ascent + descent);
+		lineY += lineHeight + lineSpacing;
+	}
+	if (rect == 0) return new Rectangle(0, 0, 0, 0);
+	Rectangle result = new Rectangle((int)OS.Rect_X(rect), (int)OS.Rect_Y(rect), (int)OS.Rect_Width(rect), (int)OS.Rect_Height(rect));
+	OS.GCHandle_Free(rect);
+	return result;
+}
+
+/**
+ * Returns the descent of the receiver.
+ *
+ * @return the descent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #getAscent()
+ * @see #setAscent(int)
+ * @see #setDescent(int)
+ * @see #getLineMetrics(int)
+ */
+public int getDescent () {
+	checkLayout();
+	return descent;
+}
+
+/** 
+ * Returns the default font currently being used by the receiver
+ * to draw and measure text.
+ *
+ * @return the receiver's font
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Font getFont () {
+	checkLayout();
+	return font;
+}
+
+/**
+* Returns the receiver's indent.
+*
+* @return the receiver's indent
+* 
+* @exception SWTException <ul>
+*    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+* </ul>
+* 
+* @since 3.2
+*/
+public int getIndent () {
+	checkLayout();
+	return indent;
+}
+
+/**
+* Returns the receiver's justification.
+*
+* @return the receiver's justification
+* 
+* @exception SWTException <ul>
+*    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+* </ul>
+* 
+* @since 3.2
+*/
+public boolean getJustify () {
+	checkLayout();
+	return justify;
+}
+
+/**
+ * Returns the embedding level for the specified character offset. The
+ * embedding level is usually used to determine the directionality of a
+ * character in bidirectional text.
+ * 
+ * @param offset the character offset
+ * @return the embedding level
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the character offset is out of range</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ */
+public int getLevel (int offset) {
+	checkLayout();
+	computeRuns();
+	int length = text.length();
+	if (!(0 <= offset && offset <= length)) SWT.error(SWT.ERROR_INVALID_RANGE);
+	offset = translateOffset(offset);
+	int level = (orientation & SWT.RIGHT_TO_LEFT) != 0 ? 1 : 0;
+	for (int i = 0; i < lines.length; i++) {
+		int lineLength = OS.TextLine_Length(lines[i]);
+		if (lineLength > offset) {
+			int runs = OS.TextLine_GetIndexedGlyphRuns (lines[i]);
+			int enumerator = OS.IndexedGlyphRunCollection_GetEnumerator(runs);
+			while (OS.IEnumerator_MoveNext(enumerator)) {
+				int indexedGlyphRun = OS.IndexedGlyphRunCollection_Current(enumerator);
+				int rangeStart = OS.IndexedGlyphRun_TextSourceCharacterIndex(indexedGlyphRun);
+				int rangeEnd = rangeStart +  OS.IndexedGlyphRun_TextSourceLength(indexedGlyphRun);
+				int glyphRun = OS.IndexedGlyphRun_GlyphRun(indexedGlyphRun);
+				int bidiLevel = OS.GlyphRun_BidiLevel(glyphRun);
+				OS.GCHandle_Free(glyphRun);
+				OS.GCHandle_Free(indexedGlyphRun);
+				if (rangeStart <= offset && offset < rangeEnd) {
+					level = bidiLevel;
+					break;
+				}
+			}
+			OS.GCHandle_Free(enumerator);
+			OS.GCHandle_Free(runs);
+			break;
+		}
+	}
+	return level;
+}
+
+/**
+ * Returns the bounds of the line for the specified line index.
+ * 
+ * @param lineIndex the line index
+ * @return the line bounds 
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the line index is out of range</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Rectangle getLineBounds(int lineIndex) {
+	checkLayout();
+	computeRuns();
+	if (!(0 <= lineIndex && lineIndex < runs.length)) SWT.error(SWT.ERROR_INVALID_RANGE);
+	int offset = 0;
+	double y = 0;
+	for (int i=0; i<lineIndex; i++) {
+		offset += OS.TextLine_Length(lines[i]);
+		int lineHeight = (int)OS.TextLine_Height(lines[i]);
+		if (ascent != -1 && descent != -1) lineHeight = Math.max(lineHeight, ascent + descent);
+		y += lineHeight + lineSpacing;
+	}
+	int line = lines[lineIndex];
+	double x = OS.TextLine_Start(line);
+	double width = OS.TextLine_WidthIncludingTrailingWhitespace(line);
+	double height = OS.TextLine_Height(line);
+	if (ascent != -1 && descent != -1) height = Math.max(height, ascent + descent);
+	char ch;
+	boolean firstLine = offset == 0 || (ch = segmentsText.charAt(offset - 1)) == '\r' || ch == '\n';
+	if (firstLine) {
+		x += indent;
+		width -= indent;
+	}
+	return new Rectangle ((int)x, (int)y, (int)width, (int)height);
+}
+
+/**
+ * Returns the receiver's line count. This includes lines caused
+ * by wrapping.
+ *
+ * @return the line count
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getLineCount () {
+	checkLayout();
+	computeRuns();
+	return lines.length;
+}
+
+/**
+ * Returns the index of the line that contains the specified
+ * character offset.
+ * 
+ * @param offset the character offset
+ * @return the line index
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the character offset is out of range</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getLineIndex (int offset) {
+	checkLayout();
+	computeRuns();
+	int length = text.length();
+	if (!(0 <= offset && offset <= length)) SWT.error(SWT.ERROR_INVALID_RANGE);
+	offset = translateOffset(offset);
+	int start = 0;
+	for (int line=0; line<lines.length; line++) {
+		int lineLength = OS.TextLine_Length(lines[line]);
+		if (start + lineLength > offset) return line;
+		start += lineLength;
+	}
+	return lines.length - 1;
+}
+
+/**
+ * Returns the font metrics for the specified line index.
+ * 
+ * @param lineIndex the line index
+ * @return the font metrics 
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the line index is out of range</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public FontMetrics getLineMetrics (int lineIndex) {
+	checkLayout();
+	computeRuns();
+	if (!(0 <= lineIndex && lineIndex < runs.length)) SWT.error(SWT.ERROR_INVALID_RANGE);
+	int length = text.length();
+	double baseline, height;
+	if (length == 0) {
+		Font font = this.font != null ? this.font : device.systemFont;
+		int str = OS.gcnew_String (new char []{' ', '\0'});
+		int culture = OS.CultureInfo_CurrentUICulture();
+		int direction = (orientation & SWT.RIGHT_TO_LEFT) != 0 ? OS.FlowDirection_RightToLeft : OS.FlowDirection_LeftToRight;
+		int brush = OS.Brushes_White();
+		int text = OS.gcnew_FormattedText(str, culture, direction, font.handle, font.size, brush);
+		height = OS.FormattedText_Height(text);
+		baseline = OS.FormattedText_Baseline(text);
+		OS.GCHandle_Free(text);
+		OS.GCHandle_Free(str);
+		OS.GCHandle_Free(brush);
+		OS.GCHandle_Free(culture);
+	} else {
+		baseline = OS.TextLine_Baseline(lines[lineIndex]);
+		height = OS.TextLine_Height(lines[lineIndex]);
+		if (ascent != -1 && descent != -1) {
+			baseline = Math.max(baseline, ascent);
+			height = Math.max(height, ascent + descent);
+		}
+	}
+	return FontMetrics.wpf_new((int)baseline, (int)height - (int)baseline, 0, 0, (int)height);
+}
+
+/**
+ * Returns the line offsets.  Each value in the array is the
+ * offset for the first character in a line except for the last
+ * value, which contains the length of the text.
+ * 
+ * @return the line offsets
+ *  
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int[] getLineOffsets () {
+	checkLayout();
+	computeRuns();
+	int start = 0;
+	int[] offsets = new int[lines.length+1];
+	for (int i = 0; i < lines.length; i++) {
+		start += OS.TextLine_Length(lines[i]);
+		offsets[i+1] = untranslateOffset(start);
+	}
+	return offsets;
+}
+
+/**
+ * Returns the location for the specified character offset. The
+ * <code>trailing</code> argument indicates whether the offset
+ * corresponds to the leading or trailing edge of the cluster.
+ * 
+ * @param offset the character offset
+ * @param trailing the trailing flag
+ * @return the location of the character offset
+ *  
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #getOffset(Point, int[])
+ * @see #getOffset(int, int, int[])
+ */
+public Point getLocation (int offset, boolean trailing) {
+	checkLayout();
+	computeRuns();
+	int length = text.length();
+	if (!(0 <= offset && offset <= length)) SWT.error(SWT.ERROR_INVALID_RANGE);
+	offset = translateOffset(offset);
+	double y = 0;
+	int start = 0, line;	
+	for (line=0; line<lines.length; line++) {
+		int lineLength = OS.TextLine_Length(lines[line]);
+		if (start + lineLength > offset) break;
+		start += lineLength;
+		int lineHeight = (int)OS.TextLine_Height(lines[line]);
+		if (ascent != -1 && descent != -1) lineHeight = Math.max(lineHeight, ascent + descent);
+		y += lineHeight + lineSpacing;
+	}
+	int characterHit = OS.gcnew_CharacterHit(offset, trailing ? 1 : 0);
+	double x = OS.TextLine_GetDistanceFromCharacterHit(lines[line], characterHit);
+	OS.GCHandle_Free(characterHit);
+	return new Point((int)x, (int)y);
+}
+
+/**
+ * Returns the next offset for the specified offset and movement
+ * type.  The movement is one of <code>SWT.MOVEMENT_CHAR</code>, 
+ * <code>SWT.MOVEMENT_CLUSTER</code>, <code>SWT.MOVEMENT_WORD</code>,
+ * <code>SWT.MOVEMENT_WORD_END</code> or <code>SWT.MOVEMENT_WORD_START</code>.
+ * 
+ * @param offset the start offset
+ * @param movement the movement type 
+ * @return the next offset
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the offset is out of range</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #getPreviousOffset(int, int)
+ */
+public int getNextOffset (int offset, int movement) {
+	checkLayout();
+	return _getOffset (offset, movement, true);
+}
+
+int _getOffset(int offset, int movement, boolean forward) {
+	computeRuns();
+	int length = text.length();
+	if (!(0 <= offset && offset <= length)) SWT.error(SWT.ERROR_INVALID_RANGE);
+	if (forward && offset == length) return length;
+	if (!forward && offset == 0) return 0;
+	int step = forward ? 1 : -1;
+	if ((movement & SWT.MOVEMENT_CHAR) != 0) return offset + step;
+	offset = translateOffset(offset);
+	int lineStart = 0, lineIndex;	
+	for (lineIndex=0; lineIndex<lines.length; lineIndex++) {
+		int lineLength = OS.TextLine_Length(lines[lineIndex]);
+		if (lineStart + lineLength > offset) break;
+		lineStart += lineLength;
+	}
+	int line = lines[lineIndex];
+	int lineLength = OS.TextLine_Length(line);
+	int lineBreak = OS.TextLine_NewlineLength (line);
+	while (lineStart <= offset && offset <= lineStart + lineLength) {
+		int resultCharHit;
+		int characterHit = OS.gcnew_CharacterHit(offset, 0);
+		if (forward) {
+			resultCharHit = OS.TextLine_GetNextCaretCharacterHit(line, characterHit);
+		} else {
+			resultCharHit = OS.TextLine_GetPreviousCaretCharacterHit(line, characterHit);
+		}
+		int newOffset = OS.CharacterHit_FirstCharacterIndex(resultCharHit);
+		int trailing = OS.CharacterHit_TrailingLength(resultCharHit);
+		OS.GCHandle_Free(resultCharHit);
+		OS.GCHandle_Free(characterHit);
+		if (forward) {
+			if (newOffset + trailing >= lineStart + lineLength - lineBreak) {
+				int lineEnd = lineStart + lineLength;
+				if (trailing != 0) lineEnd -= lineBreak;
+				return untranslateOffset(Math.min(length, lineEnd)); 
+			}
+		} else {
+			if (newOffset + trailing == lineStart) {
+				if (lineIndex == 0) return 0;
+				int lineEnd = 0;
+				if (newOffset + trailing == offset) lineEnd = OS.TextLine_NewlineLength(lines[lineIndex - 1]);
+				return untranslateOffset(Math.max(0, newOffset + trailing - lineEnd)); 
+			}
+		}
+		offset = newOffset + trailing;
+
+		switch (movement) {
+			case SWT.MOVEMENT_CLUSTER:
+				return untranslateOffset(offset);
+			case SWT.MOVEMENT_WORD:
+			case SWT.MOVEMENT_WORD_START: {
+				if (offset > 0) {
+					boolean letterOrDigit = Compatibility.isLetterOrDigit(segmentsText.charAt(offset));
+					boolean previousLetterOrDigit = Compatibility.isLetterOrDigit(segmentsText.charAt(offset - 1));
+					if (letterOrDigit != previousLetterOrDigit || !letterOrDigit) {
+						if (!Compatibility.isWhitespace(segmentsText.charAt(offset))) {
+							return untranslateOffset(offset);
+						}
+					}
+				}
+				break;
+			}
+			case SWT.MOVEMENT_WORD_END: {
+				if (offset > 0) {
+					boolean isLetterOrDigit = Compatibility.isLetterOrDigit(segmentsText.charAt(offset));
+					boolean previousLetterOrDigit = Compatibility.isLetterOrDigit(segmentsText.charAt(offset - 1));
+					if (!isLetterOrDigit && previousLetterOrDigit) {
+						return untranslateOffset(offset);
+					}
+				}
+				break;
+			}
+		}
+	}
+	return forward ? length : 0;
+}
+
+/**
+ * Returns the character offset for the specified point.  
+ * For a typical character, the trailing argument will be filled in to 
+ * indicate whether the point is closer to the leading edge (0) or
+ * the trailing edge (1).  When the point is over a cluster composed 
+ * of multiple characters, the trailing argument will be filled with the 
+ * position of the character in the cluster that is closest to
+ * the point.
+ * 
+ * @param point the point
+ * @param trailing the trailing buffer
+ * @return the character offset
+ *  
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the trailing length is less than <code>1</code></li>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #getLocation(int, boolean)
+ */
+public int getOffset (Point point, int[] trailing) {
+	checkLayout();
+	if (point == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	return getOffset (point.x, point.y, trailing) ;
+}
+
+/**
+ * Returns the character offset for the specified point.  
+ * For a typical character, the trailing argument will be filled in to 
+ * indicate whether the point is closer to the leading edge (0) or
+ * the trailing edge (1).  When the point is over a cluster composed 
+ * of multiple characters, the trailing argument will be filled with the 
+ * position of the character in the cluster that is closest to
+ * the point.
+ * 
+ * @param x the x coordinate of the point
+ * @param y the y coordinate of the point
+ * @param trailing the trailing buffer
+ * @return the character offset
+ *  
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the trailing length is less than <code>1</code></li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #getLocation(int, boolean)
+ */
+public int getOffset (int x, int y, int[] trailing) {
+	checkLayout();
+	computeRuns();
+	if (trailing != null && trailing.length < 1) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	double lineY = 0;
+	int line;	
+	for (line=0; line<lines.length; line++) {
+		double lineHeight = OS.TextLine_Length(lines[line]);
+		if (lineY + lineHeight > y) break;
+		lineY += lineHeight;
+	}
+	if (line >= lines.length) line = lines.length - 1;
+	int characterHit = OS.TextLine_GetCharacterHitFromDistance(lines[line], x);
+	int offset = OS.CharacterHit_FirstCharacterIndex(characterHit);
+	if (trailing != null) trailing[0] = OS.CharacterHit_TrailingLength(characterHit);
+	OS.GCHandle_Free(characterHit);
+	return untranslateOffset(offset);
+}
+
+/**
+ * Returns the orientation of the receiver.
+ *
+ * @return the orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getOrientation () {
+	checkLayout();
+	return orientation;
+}
+
+/**
+ * Returns the previous offset for the specified offset and movement
+ * type.  The movement is one of <code>SWT.MOVEMENT_CHAR</code>, 
+ * <code>SWT.MOVEMENT_CLUSTER</code> or <code>SWT.MOVEMENT_WORD</code>,
+ * <code>SWT.MOVEMENT_WORD_END</code> or <code>SWT.MOVEMENT_WORD_START</code>.
+ * 
+ * @param offset the start offset
+ * @param movement the movement type 
+ * @return the previous offset
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the offset is out of range</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #getNextOffset(int, int)
+ */
+public int getPreviousOffset (int offset, int movement) {
+	checkLayout();
+	return _getOffset (offset, movement, false);
+}
+
+/**
+ * Gets the ranges of text that are associated with a <code>TextStyle</code>.
+ *
+ * @return the ranges, an array of offsets representing the start and end of each
+ * text style. 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #getStyles()
+ * 
+ * @since 3.2
+ */
+public int[] getRanges () {
+	checkLayout();
+	int[] result = new int[styles.length * 2];
+	int count = 0;
+	for (int i=0; i<styles.length - 1; i++) {
+		if (styles[i].style != null) {
+			result[count++] = styles[i].start;
+			result[count++] = styles[i + 1].start - 1;
+		}
+	}
+	if (count != result.length) {
+		int[] newResult = new int[count];
+		System.arraycopy(result, 0, newResult, 0, count);
+		result = newResult;
+	}
+	return result;
+}
+
+/**
+ * Returns the text segments offsets of the receiver.
+ *
+ * @return the text segments offsets
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int[] getSegments () {
+	checkLayout();
+	return segments;
+}
+
+String getSegmentsText() {
+	if (segments == null) return text;
+	int nSegments = segments.length;
+	if (nSegments <= 1) return text;
+	int length = text.length();
+	if (length == 0) return text;
+	if (nSegments == 2) {
+		if (segments[0] == 0 && segments[1] == length) return text;
+	}
+	char[] oldChars = new char[length];
+	text.getChars(0, length, oldChars, 0);
+	char[] newChars = new char[length + nSegments];
+	int charCount = 0, segmentCount = 0;
+	char separator = orientation == SWT.RIGHT_TO_LEFT ? RTL_MARK : LTR_MARK;
+	while (charCount < length) {
+		if (segmentCount < nSegments && charCount == segments[segmentCount]) {
+			newChars[charCount + segmentCount++] = separator;
+		} else {
+			newChars[charCount + segmentCount] = oldChars[charCount++];
+		}
+	}
+	if (segmentCount < nSegments) {
+		segments[segmentCount] = charCount;
+		newChars[charCount + segmentCount++] = separator;
+	}
+	return new String(newChars, 0, Math.min(charCount + segmentCount, newChars.length));
+}
+
+/**
+ * Returns the line spacing of the receiver.
+ *
+ * @return the line spacing
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getSpacing () {
+	checkLayout();	
+	return lineSpacing;
+}
+
+/**
+ * Gets the style of the receiver at the specified character offset.
+ *
+ * @param offset the text offset
+ * @return the style or <code>null</code> if not set
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the character offset is out of range</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public TextStyle getStyle (int offset) {
+	checkLayout();
+	int length = text.length();
+	if (!(0 <= offset && offset < length)) SWT.error(SWT.ERROR_INVALID_RANGE);
+	for (int i=1; i<styles.length; i++) {
+		if (styles[i].start > offset) {
+			return styles[i - 1].style;
+		}
+	}
+	return null;
+}
+
+/**
+ * Gets all styles of the receiver.
+ *
+ * @return the styles
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #getRanges()
+ * 
+ * @since 3.2
+ */
+public TextStyle[] getStyles () {
+	checkLayout();
+	TextStyle[] result = new TextStyle[styles.length];
+	int count = 0;
+	for (int i=0; i<styles.length; i++) {
+		if (styles[i].style != null) {
+			result[count++] = styles[i].style;
+		}
+	}
+	if (count != result.length) {
+		TextStyle[] newResult = new TextStyle[count];
+		System.arraycopy(result, 0, newResult, 0, count);
+		result = newResult;
+	}
+	return result;
+}
+
+/**
+ * Returns the tab list of the receiver.
+ *
+ * @return the tab list
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int[] getTabs () {
+	checkLayout();
+	return tabs;
+}
+
+int GetTextRun(int textSourceCharacterIndex) {
+	if (runs == null) runs = new int[4];
+	int index = 0;
+	while (index < runs.length && runs[index] != 0) index++; 
+	if (index == runs.length) {
+		int[] tmpRuns = new int[index + 4];
+		System.arraycopy(runs, 0, tmpRuns, 0, index);
+		runs = tmpRuns;
+	}
+	int length = OS.String_Length(string);
+	if (textSourceCharacterIndex >= length) {
+		runs[index] = OS.gcnew_TextEndOfParagraph(1, defaultTextProperties);
+	} else {
+		int styleIndex = 1;
+		while (styleIndex < styles.length && styles[styleIndex].start <= textSourceCharacterIndex) styleIndex++;
+		TextStyle textStyle = styles[styleIndex - 1].style;
+		int textProperties = styles[styleIndex - 1].textProperties;
+		if (textProperties == 0) textProperties = defaultTextProperties;
+		int end = styles[styleIndex].start;
+		if (textStyle != null && textStyle.metrics != null) {
+			GlyphMetrics metrics = textStyle.metrics; 
+			runs[index] = OS.gcnew_SWTTextEmbeddedObject(textProperties, end - textSourceCharacterIndex, metrics.width, metrics.ascent + metrics.descent, metrics.ascent);
+		} else {
+			char ch = segmentsText.charAt(textSourceCharacterIndex);
+			if (ch == '\n' || ch == '\r') {
+				int breakLength = 1;
+				if (ch == '\r' && textSourceCharacterIndex + 1 < end && segmentsText.charAt(textSourceCharacterIndex + 1) == '\n') breakLength++;
+				runs[index] = OS.gcnew_TextEndOfLine(breakLength, textProperties);
+			} else {
+				int i = textSourceCharacterIndex;
+				while (i < end && (ch = segmentsText.charAt(i)) != '\n' && ch != '\r') i++;
+				runs[index] = OS.gcnew_TextCharacters(string, textSourceCharacterIndex, i - textSourceCharacterIndex, textProperties);
+			}
+		}
+	}
+	return runs[index];
+}
+
+int GetPrecedingText(int textSourceCharacterIndexLimit) {
+	return 0;
+}
+
+/**
+ * Gets the receiver's text, which will be an empty
+ * string if it has never been set.
+ *
+ * @return the receiver's text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public String getText () {
+	checkLayout();
+	return text;
+}
+
+/**
+ * Returns the width of the receiver.
+ *
+ * @return the width
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getWidth () {
+	checkLayout();
+	return wrapWidth;
+}
+
+/**
+ * Returns <code>true</code> if the text layout has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the text layout.
+ * When a text layout has been disposed, it is an error to
+ * invoke any other method using the text layout.
+ * </p>
+ *
+ * @return <code>true</code> when the text layout is disposed and <code>false</code> otherwise
+ */
+public boolean isDisposed () {
+	return device == null;
+}
+
+/**
+ * Sets the text alignment for the receiver. The alignment controls
+ * how a line of text is positioned horizontally. The argument should
+ * be one of <code>SWT.LEFT</code>, <code>SWT.RIGHT</code> or <code>SWT.CENTER</code>.
+ * <p>
+ * The default alignment is <code>SWT.LEFT</code>.  Note that the receiver's
+ * width must be set in order to use <code>SWT.RIGHT</code> or <code>SWT.CENTER</code>
+ * alignment.
+ * </p>
+ *
+ * @param alignment the new alignment 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #setWidth(int)
+ */
+public void setAlignment (int alignment) {
+	checkLayout();
+	int mask = SWT.LEFT | SWT.CENTER | SWT.RIGHT;
+	alignment &= mask;
+	if (alignment == 0) return;
+	if ((alignment & SWT.LEFT) != 0) alignment = SWT.LEFT;
+	if ((alignment & SWT.RIGHT) != 0) alignment = SWT.RIGHT;
+	if (this.alignment == alignment) return;
+	freeRuns();
+	this.alignment = alignment;
+}
+
+/**
+ * Sets the ascent of the receiver. The ascent is distance in pixels
+ * from the baseline to the top of the line and it is applied to all
+ * lines. The default value is <code>-1</code> which means that the
+ * ascent is calculated from the line fonts.
+ *
+ * @param ascent the new ascent
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the ascent is less than <code>-1</code></li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #setDescent(int)
+ * @see #getLineMetrics(int)
+ */
+public void setAscent(int ascent) {
+	checkLayout();
+	if (ascent < -1) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (this.ascent == ascent) return;
+	freeRuns();
+	this.ascent = ascent;
+}
+
+/**
+ * Sets the descent of the receiver. The descent is distance in pixels
+ * from the baseline to the bottom of the line and it is applied to all
+ * lines. The default value is <code>-1</code> which means that the
+ * descent is calculated from the line fonts.
+ *
+ * @param descent the new descent
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the descent is less than <code>-1</code></li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #setAscent(int)
+ * @see #getLineMetrics(int)
+ */
+public void setDescent(int descent) {
+	checkLayout();
+	if (descent < -1) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (this.descent == descent) return;
+	freeRuns();
+	this.descent = descent;
+}
+
+/** 
+ * Sets the default font which will be used by the receiver
+ * to draw and measure text. If the
+ * argument is null, then a default font appropriate
+ * for the platform will be used instead. Note that a text
+ * style can override the default font.
+ *
+ * @param font the new font for the receiver, or null to indicate a default font
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the font has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setFont (Font font) {
+	checkLayout();
+	if (font != null && font.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	Font oldFont = this.font;
+	if (oldFont == font) return;
+	this.font = font;
+	if (oldFont != null && oldFont.equals(font)) return;
+	freeRuns();
+}
+
+/**
+ * Sets the indent of the receiver. This indent it applied of the first line of 
+ * each paragraph.  
+ *
+ * @param indent new indent
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setIndent (int indent) {
+	checkLayout();
+	if (indent < 0) return;	
+	if (this.indent == indent) return;
+	freeRuns();
+	this.indent = indent;
+}
+
+/**
+ * Sets the justification of the receiver. Note that the receiver's
+ * width must be set in order to use justification. 
+ *
+ * @param justify new justify
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setJustify (boolean justify) {
+	checkLayout();
+	if (this.justify == justify) return;
+	freeRuns();
+	this.justify = justify;
+}
+ 
+/**
+ * Sets the orientation of the receiver, which must be one
+ * of <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ *
+ * @param orientation new orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setOrientation (int orientation) {
+	checkLayout();
+	int mask = SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT;
+	orientation &= mask;
+	if (orientation == 0) return;
+	if ((orientation & SWT.LEFT_TO_RIGHT) != 0) orientation = SWT.LEFT_TO_RIGHT;
+	if (this.orientation == orientation) return;
+	this.orientation = orientation;
+	freeRuns();
+}
+
+/**
+ * Sets the offsets of the receiver's text segments. Text segments are used to
+ * override the default behaviour of the bidirectional algorithm.
+ * Bidirectional reordering can happen within a text segment but not 
+ * between two adjacent segments.
+ * <p>
+ * Each text segment is determined by two consecutive offsets in the 
+ * <code>segments</code> arrays. The first element of the array should 
+ * always be zero and the last one should always be equals to length of
+ * the text.
+ * </p>
+ * 
+ * @param segments the text segments offset
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setSegments(int[] segments) {
+	checkLayout();
+	if (this.segments == null && segments == null) return;
+	if (this.segments != null && segments != null) {
+		if (this.segments.length == segments.length) {
+			int i;
+			for (i = 0; i <segments.length; i++) {
+				if (this.segments[i] != segments[i]) break;
+			}
+			if (i == segments.length) return;
+		}
+	}
+	freeRuns();
+	this.segments = segments;
+}
+
+/**
+ * Sets the line spacing of the receiver.  The line spacing
+ * is the space left between lines.
+ *
+ * @param spacing the new line spacing 
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the spacing is negative</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setSpacing (int spacing) {
+	checkLayout();
+	if (spacing < 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (this.lineSpacing == spacing) return;
+	freeRuns();
+	this.lineSpacing = spacing;
+}
+
+/**
+ * Sets the style of the receiver for the specified range.  Styles previously
+ * set for that range will be overwritten.  The start and end offsets are
+ * inclusive and will be clamped if out of range.
+ * 
+ * @param style the style
+ * @param start the start offset
+ * @param end the end offset
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setStyle (TextStyle style, int start, int end) {
+	checkLayout();
+	int length = text.length();
+	if (length == 0) return;
+	if (start > end) return;
+	start = Math.min(Math.max(0, start), length - 1);
+	end = Math.min(Math.max(0, end), length - 1);
+	int low = -1;
+	int high = styles.length;
+	while (high - low > 1) {
+		int index = (high + low) / 2;
+		if (styles[index + 1].start > start) {
+			high = index;
+		} else {
+			low = index;
+		}
+	}
+	if (0 <= high && high < styles.length) {
+		StyleItem item = styles[high];
+		if (item.start == start && styles[high + 1].start - 1 == end) {
+			if (style == null) {
+				if (item.style == null) return;
+			} else {
+				if (style.equals(item.style)) return;
+			}
+		}
+	}
+	freeRuns();
+	int modifyStart = high;
+	int modifyEnd = modifyStart;
+	while (modifyEnd < styles.length) {
+		if (styles[modifyEnd + 1].start > end) break;
+		modifyEnd++;
+	}
+	if (modifyStart == modifyEnd) {
+		int styleStart = styles[modifyStart].start; 
+		int styleEnd = styles[modifyEnd + 1].start - 1;
+		if (styleStart == start && styleEnd == end) {
+			styles[modifyStart].style = style;
+			return;
+		}
+		if (styleStart != start && styleEnd != end) {
+			StyleItem[] newStyles = new StyleItem[styles.length + 2];
+			System.arraycopy(styles, 0, newStyles, 0, modifyStart + 1);
+			StyleItem item = new StyleItem();
+			item.start = start;
+			item.style = style;
+			newStyles[modifyStart + 1] = item;	
+			item = new StyleItem();
+			item.start = end + 1;
+			item.style = styles[modifyStart].style;
+			newStyles[modifyStart + 2] = item;
+			System.arraycopy(styles, modifyEnd + 1, newStyles, modifyEnd + 3, styles.length - modifyEnd - 1);
+			styles = newStyles;
+			return;
+		}
+	}
+	if (start == styles[modifyStart].start) modifyStart--;
+	if (end == styles[modifyEnd + 1].start - 1) modifyEnd++;
+	int newLength = styles.length + 1 - (modifyEnd - modifyStart - 1);
+	StyleItem[] newStyles = new StyleItem[newLength];
+	System.arraycopy(styles, 0, newStyles, 0, modifyStart + 1);	
+	StyleItem item = new StyleItem();
+	item.start = start;
+	item.style = style;
+	newStyles[modifyStart + 1] = item;
+	styles[modifyEnd].start = end + 1;
+	System.arraycopy(styles, modifyEnd, newStyles, modifyStart + 2, styles.length - modifyEnd);
+	styles = newStyles;
+}
+
+/**
+ * Sets the receiver's tab list. Each value in the tab list specifies
+ * the space in pixels from the origin of the text layout to the respective
+ * tab stop.  The last tab stop width is repeated continuously.
+ * 
+ * @param tabs the new tab list
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setTabs (int[] tabs) {
+	checkLayout();
+	if (this.tabs == null && tabs == null) return;
+	if (this.tabs != null && tabs !=null) {
+		if (this.tabs.length == tabs.length) {
+			int i;
+			for (i = 0; i <tabs.length; i++) {
+				if (this.tabs[i] != tabs[i]) break;
+			}
+			if (i == tabs.length) return;
+		}
+	}
+	freeRuns();
+	this.tabs = tabs;
+} 
+
+/**
+ * Sets the receiver's text.
+ *<p>
+ * Note: Setting the text also clears all the styles. This method 
+ * returns without doing anything if the new text is the same as 
+ * the current text.
+ * </p>
+ * 
+ * @param text the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setText (String text) {
+	checkLayout();
+	if (text == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (text.equals(this.text)) return;
+	freeRuns();
+	this.text = text;
+	styles = new StyleItem[2];
+	styles[0] = new StyleItem();
+	styles[1] = new StyleItem();
+	styles[1].start = text.length();
+}
+
+/**
+ * Sets the line width of the receiver, which determines how
+ * text should be wrapped and aligned. The default value is
+ * <code>-1</code> which means wrapping is disabled.
+ *
+ * @param width the new width 
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the width is <code>0</code> or less than <code>-1</code></li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #setAlignment(int)
+ */
+public void setWidth (int width) {
+	checkLayout();
+	if (width < -1 || width == 0) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (this.wrapWidth == width) return;
+	freeRuns();
+	this.wrapWidth = width;
+}
+
+int validadeOffset(int offset, int step) {
+	offset += step;
+	if (segments != null && segments.length > 2) {
+		for (int i = 0; i < segments.length; i++) {
+			if (translateOffset(segments[i]) - 1 == offset) {
+				offset += step;
+				break;
+			}
+		}
+	}	
+	return offset;
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the receiver
+ */
+public String toString () {
+	if (isDisposed()) return "TextLayout {*DISPOSED*}";
+	return "TextLayout {}";
+}
+
+int translateOffset(int offset) {
+	if (segments == null) return offset;
+	int nSegments = segments.length;
+	if (nSegments <= 1) return offset;
+	int length = text.length();
+	if (length == 0) return offset;
+	if (nSegments == 2) {
+		if (segments[0] == 0 && segments[1] == length) return offset;
+	}
+	for (int i = 0; i < nSegments && offset - i >= segments[i]; i++) {
+		offset++;
+	}	
+	return offset;
+}
+
+int untranslateOffset(int offset) {
+	if (segments == null) return offset;
+	int nSegments = segments.length;
+	if (nSegments <= 1) return offset;
+	int length = text.length();
+	if (length == 0) return offset;
+	if (nSegments == 2) {
+		if (segments[0] == 0 && segments[1] == length) return offset;
+	}
+	for (int i = 0; i < nSegments && offset > segments[i]; i++) {
+		offset--;
+	}
+	return offset;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Transform.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Transform.java
new file mode 100644
index 0000000..9bd58865
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/graphics/Transform.java
@@ -0,0 +1,408 @@
+/*******************************************************************************
+ * 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.graphics;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.wpf.*;
+
+/**
+ * Instances of this class represent transformation matrices for 
+ * points expressed as (x, y) pairs of floating point numbers.
+ * <p>
+ * Application code must explicitly invoke the <code>Transform.dispose()</code> 
+ * method to release the operating system resources managed by each instance
+ * when those instances are no longer required.
+ * </p>
+ * <p>
+ * This class requires the operating system's advanced graphics subsystem
+ * which may not be available on some platforms.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: GraphicsExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.1
+ */
+public class Transform extends Resource {
+
+	/**
+	 * the OS resource for the Transform
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public int handle;
+	
+/**
+ * Constructs a new identity Transform.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param device the device on which to allocate the Transform
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle for the Transform could not be obtained</li>
+ * </ul>
+ * 
+ * @see #dispose()
+ */
+public Transform (Device device) {
+	this(device, 1, 0, 0, 1, 0, 0);
+}
+
+/**
+ * Constructs a new Transform given an array of elements that represent the 
+ * matrix that describes the transformation.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param device the device on which to allocate the Transform
+ * @param elements an array of floats that describe the transformation matrix
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device, or the elements array is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the elements array is too small to hold the matrix values</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle for the Transform could not be obtained</li>
+ * </ul>
+ * 
+ * @see #dispose()
+ */
+public Transform(Device device, float[] elements) {
+	this (device, checkTransform(elements)[0], elements[1], elements[2], elements[3], elements[4], elements[5]);
+}
+
+/**
+ * Constructs a new Transform given all of the elements that represent the 
+ * matrix that describes the transformation.
+ * <p>
+ * This operation requires the operating system's advanced
+ * graphics subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * 
+ * @param device the device on which to allocate the Transform
+ * @param m11 the first element of the first row of the matrix
+ * @param m12 the second element of the first row of the matrix
+ * @param m21 the first element of the second row of the matrix
+ * @param m22 the second element of the second row of the matrix
+ * @param dx the third element of the first row of the matrix
+ * @param dy the third element of the second row of the matrix
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle for the Transform could not be obtained</li>
+ * </ul>
+ * 
+ * @see #dispose()
+ */
+public Transform (Device device, float m11, float m12, float m21, float m22, float dx, float dy) {
+	super(device);
+	handle = OS.gcnew_Matrix(m11, m12, m21, m22, dx, dy);
+	if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	init();
+}
+
+static float[] checkTransform(float[] elements) {
+	if (elements == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (elements.length < 6) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	return elements;
+}
+
+/**
+ * Disposes of the operating system resources associated with
+ * the Transform. Applications must dispose of all Transforms that
+ * they allocate.
+ */
+void destroy() {
+	OS.GCHandle_Free(handle);
+	handle = 0;
+}
+
+/**
+ * Fills the parameter with the values of the transformation matrix
+ * that the receiver represents, in the order {m11, m12, m21, m22, dx, dy}.
+ *
+ * @param elements array to hold the matrix values
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parameter is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter is too small to hold the matrix values</li>
+ * </ul>
+ */
+public void getElements(float[] elements) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (elements == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (elements.length < 6) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	elements[0] = (float)OS.Matrix_M11(handle);
+	elements[1] = (float)OS.Matrix_M12(handle);
+	elements[2] = (float)OS.Matrix_M21(handle);
+	elements[3] = (float)OS.Matrix_M22(handle);
+	elements[4] = (float)OS.Matrix_OffsetX(handle);
+	elements[5] = (float)OS.Matrix_OffsetY(handle);
+}
+
+/**
+ * Modifies the receiver such that the matrix it represents becomes the
+ * identity matrix. 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public void identity() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	OS.Matrix_SetIdentity(handle);
+}
+
+/**
+ * Modifies the receiver such that the matrix it represents becomes
+ * the mathematical inverse of the matrix it previously represented. 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_CANNOT_INVERT_MATRIX - if the matrix is not invertible</li>
+ * </ul>
+ */
+public void invert() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	OS.Matrix_Invert(handle);
+	//TODO handle matrix invert exception
+	//SWT.error(SWT.ERROR_CANNOT_INVERT_MATRIX);
+}
+
+/**
+ * Returns <code>true</code> if the Transform has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the Transform.
+ * When a Transform has been disposed, it is an error to
+ * invoke any other method using the Transform.
+ *
+ * @return <code>true</code> when the Transform is disposed, and <code>false</code> otherwise
+ */
+public boolean isDisposed() {
+	return handle == 0;
+}
+
+/**
+ * Returns <code>true</code> if the Transform represents the identity matrix
+ * and false otherwise.
+ *
+ * @return <code>true</code> if the receiver is an identity Transform, and <code>false</code> otherwise
+ */
+public boolean isIdentity() {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	return OS.Matrix_IsIdentity(handle);
+}
+
+/**
+ * Modifies the receiver such that the matrix it represents becomes the
+ * the result of multiplying the matrix it previously represented by the
+ * argument. 
+ *
+ * @param matrix the matrix to multiply the receiver by
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parameter is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parameter has been disposed</li>
+ * </ul>
+ */
+public void multiply(Transform matrix) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (matrix == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	if (matrix.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	int result = OS.Matrix_Multiply(handle, matrix.handle);
+	OS.Matrix_M11(handle, OS.Matrix_M11(result));
+	OS.Matrix_M12(handle, OS.Matrix_M12(result));
+	OS.Matrix_M21(handle, OS.Matrix_M21(result));
+	OS.Matrix_M22(handle, OS.Matrix_M22(result));
+	OS.Matrix_OffsetX(handle, OS.Matrix_OffsetX(result));
+	OS.Matrix_OffsetY(handle, OS.Matrix_OffsetY(result));
+	OS.GCHandle_Free(result);
+}
+
+/**
+ * Modifies the receiver so that it represents a transformation that is
+ * equivalent to its previous transformation rotated by the specified angle.
+ * The angle is specified in degrees and for the identity transform 0 degrees
+ * is at the 3 o'clock position. A positive value indicates a clockwise rotation
+ * while a negative value indicates a counter-clockwise rotation.
+ *
+ * @param angle the angle to rotate the transformation by
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void rotate(float angle) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	OS.Matrix_RotatePrepend(handle, angle);
+}
+
+/**
+ * Modifies the receiver so that it represents a transformation that is
+ * equivalent to its previous transformation scaled by (scaleX, scaleY).
+ * 
+ * @param scaleX the amount to scale in the X direction
+ * @param scaleY the amount to scale in the Y direction
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void scale(float scaleX, float scaleY) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	OS.Matrix_ScalePrepend(handle, scaleX, scaleY);
+}
+
+/**
+ * Modifies the receiver to represent a new transformation given all of
+ * the elements that represent the matrix that describes that transformation.
+ * 
+ * @param m11 the first element of the first row of the matrix
+ * @param m12 the second element of the first row of the matrix
+ * @param m21 the first element of the second row of the matrix
+ * @param m22 the second element of the second row of the matrix
+ * @param dx the third element of the first row of the matrix
+ * @param dy the third element of the second row of the matrix
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void setElements(float m11, float m12, float m21, float m22, float dx, float dy) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	OS.Matrix_M11(handle, m11);
+	OS.Matrix_M12(handle, m12);
+	OS.Matrix_M21(handle, m21);
+	OS.Matrix_M22(handle, m22);
+	OS.Matrix_OffsetX(handle, dx);
+	OS.Matrix_OffsetY(handle, dy);
+}
+
+/**
+ * Modifies the receiver so that it represents a transformation that is
+ * equivalent to its previous transformation sheared by (shearX, shearY).
+ * 
+ * @param shearX the shear factor in the X direction
+ * @param shearY the shear factor in the Y direction
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public void shear(float shearX, float shearY) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	int matrix = OS.gcnew_Matrix(1, shearX, shearY, 1, 0, 0);
+	int result = OS.Matrix_Multiply(handle, matrix);
+	OS.Matrix_M11(handle, OS.Matrix_M11(result));
+	OS.Matrix_M12(handle, OS.Matrix_M12(result));
+	OS.Matrix_M21(handle, OS.Matrix_M21(result));
+	OS.Matrix_M22(handle, OS.Matrix_M22(result));
+	OS.Matrix_OffsetX(handle, OS.Matrix_OffsetX(result));
+	OS.Matrix_OffsetY(handle, OS.Matrix_OffsetY(result));
+	OS.GCHandle_Free(result);
+	OS.GCHandle_Free(matrix);
+}
+
+/** 
+ * Given an array containing points described by alternating x and y values,
+ * modify that array such that each point has been replaced with the result of
+ * applying the transformation represented by the receiver to that point.
+ *
+ * @param pointArray an array of alternating x and y values to be transformed
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point array is null</li>
+ * </ul>	
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void transform(float[] pointArray) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	if (pointArray == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
+	for (int i = 0; i < pointArray.length; i += 2) {
+		int point = OS.gcnew_Point(pointArray[i], pointArray[i + 1]);
+		int result = OS.Matrix_Transform(handle, point);
+		pointArray[i] = (float)OS.Point_X(result);
+		pointArray[i + 1] = (float)OS.Point_Y(result);
+		OS.GCHandle_Free(point);
+		OS.GCHandle_Free(result);		
+	}
+}
+
+/**
+ * Modifies the receiver so that it represents a transformation that is
+ * equivalent to its previous transformation translated by (offsetX, offsetY).
+ * 
+ * @param offsetX the distance to translate in the X direction
+ * @param offsetY the distance to translate in the Y direction
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void translate(float offsetX, float offsetY) {
+	if (isDisposed()) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
+	OS.Matrix_TranslatePrepend(handle, offsetX, offsetY);
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the receiver
+ */
+public String toString() {
+	if (isDisposed()) return "Transform {*DISPOSED*}";
+	float[] elements = new float[6];
+	getElements(elements);
+	return "Transform {" + elements [0] + "," + elements [1] + "," +elements [2] + "," +elements [3] + "," +elements [4] + "," +elements [5] + "}";
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Button.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Button.java
new file mode 100644
index 0000000..99237de
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Button.java
@@ -0,0 +1,652 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * Instances of this class represent a selectable user interface object that
+ * issues notification when pressed and released. 
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>ARROW, CHECK, PUSH, RADIO, TOGGLE, FLAT</dd>
+ * <dd>UP, DOWN, LEFT, RIGHT, CENTER</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles ARROW, CHECK, PUSH, RADIO, and TOGGLE 
+ * may be specified.
+ * </p><p>
+ * Note: Only one of the styles LEFT, RIGHT, and CENTER may be specified.
+ * </p><p>
+ * Note: Only one of the styles UP, DOWN, LEFT, and RIGHT may be specified
+ * when the ARROW style is specified.
+ * </p><p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#button">Button snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class Button extends Control {
+	String text = "";
+	Image image;
+	int textHandle, imageHandle;
+	boolean ignoreSelection, grayed;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#ARROW
+ * @see SWT#CHECK
+ * @see SWT#PUSH
+ * @see SWT#RADIO
+ * @see SWT#TOGGLE
+ * @see SWT#FLAT
+ * @see SWT#UP
+ * @see SWT#DOWN
+ * @see SWT#LEFT
+ * @see SWT#RIGHT
+ * @see SWT#CENTER
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Button (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is called when the control is selected by the user.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+static int checkStyle (int style) {
+	style = checkBits (style, SWT.PUSH, SWT.ARROW, SWT.CHECK, SWT.RADIO, SWT.TOGGLE, 0);
+	if ((style & (SWT.PUSH | SWT.TOGGLE)) != 0) {
+		return checkBits (style, SWT.CENTER, SWT.LEFT, SWT.RIGHT, 0, 0, 0);
+	}
+	if ((style & (SWT.CHECK | SWT.RADIO)) != 0) {
+		return checkBits (style, SWT.LEFT, SWT.RIGHT, SWT.CENTER, 0, 0, 0);
+	}
+	if ((style & SWT.ARROW) != 0) {
+		style |= SWT.NO_FOCUS;
+		return checkBits (style, SWT.UP, SWT.DOWN, SWT.LEFT, SWT.RIGHT, 0, 0);
+	}
+	return style;
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget ();
+	Point size = computeSize (handle, wHint, hHint, changed);
+	if ((style & SWT.ARROW) == 0) {
+		int border = getBorderWidth ();
+		size.x += border * 2;
+		size.y += border * 2;
+	}
+	return size;
+}
+
+void createArrow () { 
+	int geometry = OS.gcnew_StreamGeometry ();
+	int context = OS.StreamGeometry_Open (geometry);
+	int start = 0, point = 0, end = 0;
+	int mask = SWT.RIGHT | SWT.LEFT | SWT.DOWN | SWT.UP;
+	switch (style & mask) {
+		case SWT.RIGHT:
+			start = OS.gcnew_Point (1, 0);
+			point = OS.gcnew_Point (4, 3);
+			end = OS.gcnew_Point (1, 6);
+			break;
+		case SWT.LEFT:
+			start = OS.gcnew_Point (4, 1);
+			point = OS.gcnew_Point (1, 3);
+			end = OS.gcnew_Point (4, 6);
+			break;
+		case SWT.DOWN:
+			start = OS.gcnew_Point (0, 1);
+			point = OS.gcnew_Point (3, 4);
+			end = OS.gcnew_Point (6, 1);
+			break;
+		case SWT.UP:
+			start = OS.gcnew_Point (0, 4);
+			point = OS.gcnew_Point (3, 1);
+			end = OS.gcnew_Point (6, 4);
+			break;
+	}
+	OS.StreamGeometryContext_BeginFigure (context, start, true, true);
+	OS.StreamGeometryContext_LineTo (context, point, true, true);
+	OS.StreamGeometryContext_LineTo (context, end, true, true);
+	OS.StreamGeometryContext_Close (context);
+	int path = OS.gcnew_Path ();
+	OS.Path_Data (path, geometry);
+	int padding = OS.gcnew_Thickness (3, 3, 3, 3);
+	OS.FrameworkElement_Margin (path, padding);
+	int brush = OS.Brushes_Black ();
+	OS.Path_Fill (path, brush);
+	OS.FrameworkElement_Width (path, 6);
+	OS.FrameworkElement_Height (path, 6);
+	OS.FrameworkElement_HorizontalAlignment (path, OS.HorizontalAlignment_Center);
+	OS.FrameworkElement_VerticalAlignment (path, OS.VerticalAlignment_Center);
+	OS.ContentControl_Content (handle, path);
+	OS.GCHandle_Free (padding);
+	OS.GCHandle_Free (start);
+	OS.GCHandle_Free (point);
+	OS.GCHandle_Free (end);
+	OS.GCHandle_Free (brush);
+	OS.GCHandle_Free (path);
+	OS.GCHandle_Free (context);
+	OS.GCHandle_Free (geometry);
+}
+
+void createHandle () {
+	if ((style & SWT.PUSH) == 0) state |= THEME_BACKGROUND;
+	int bits =  SWT.TOGGLE | SWT.ARROW | SWT.PUSH | SWT.RADIO | SWT.CHECK;
+	switch (style & bits) {
+		case SWT.TOGGLE:
+			handle = OS.gcnew_ToggleButton ();
+			if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+			break;
+		case SWT.ARROW:
+			handle = OS.gcnew_Button ();
+			if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+			createArrow ();
+			break;
+		case SWT.RADIO:
+			handle = OS.gcnew_RadioButton ();
+			if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+			break;
+		case SWT.CHECK:
+			handle = OS.gcnew_CheckBox ();
+			if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+			break;
+		case SWT.PUSH:
+		default:
+			handle = OS.gcnew_Button ();
+			if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+			break;
+	}
+	if ((style & SWT.ARROW) != 0) return;
+	int value = OS.HorizontalAlignment_Left;
+	if ((style & SWT.CENTER) != 0) value = OS.HorizontalAlignment_Center;
+	if ((style & SWT.RIGHT) != 0) value = OS.HorizontalAlignment_Right;
+	OS.Control_HorizontalContentAlignment (handle, value);
+	imageHandle = OS.gcnew_Image ();
+	if (imageHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.Image_Stretch (imageHandle, OS.Stretch_None);
+	OS.UIElement_Visibility (imageHandle, OS.Visibility_Collapsed);
+	textHandle = OS.gcnew_AccessText ();
+	if (textHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.FrameworkElement_VerticalAlignment (textHandle, OS.VerticalAlignment_Center);
+	int panel = OS.gcnew_StackPanel ();
+	if (panel == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.StackPanel_Orientation (panel, OS.Orientation_Horizontal);
+	int thickness = OS.gcnew_Thickness (1, 1, 1, 1);
+	if (thickness == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.FrameworkElement_Margin (panel, thickness);
+	OS.GCHandle_Free(thickness);
+	int children = OS.Panel_Children (panel);
+	OS.UIElementCollection_Add (children, imageHandle);
+	OS.UIElementCollection_Add (children, textHandle);
+	OS.ContentControl_Content (handle, panel);
+	OS.GCHandle_Free (children);
+	OS.GCHandle_Free (panel);
+}
+
+int defaultBackground () {
+	if ((style & SWT.PUSH) == 0) return OS.SystemColors_ControlColor;
+	return 0;
+}
+
+/**
+ * Returns a value which describes the position of the
+ * text or image in the receiver. The value will be one of
+ * <code>LEFT</code>, <code>RIGHT</code> or <code>CENTER</code>
+ * unless the receiver is an <code>ARROW</code> button, in 
+ * which case, the alignment will indicate the direction of
+ * the arrow (one of <code>LEFT</code>, <code>RIGHT</code>, 
+ * <code>UP</code> or <code>DOWN</code>).
+ *
+ * @return the alignment 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getAlignment () {
+	checkWidget ();
+	if ((style & SWT.ARROW) != 0) {
+		if ((style & SWT.UP) != 0) return SWT.UP;
+		if ((style & SWT.DOWN) != 0) return SWT.DOWN;
+		if ((style & SWT.LEFT) != 0) return SWT.LEFT;
+		if ((style & SWT.RIGHT) != 0) return SWT.RIGHT;
+		return SWT.UP;
+	}
+	if ((style & SWT.LEFT) != 0) return SWT.LEFT;
+	if ((style & SWT.CENTER) != 0) return SWT.CENTER;
+	if ((style & SWT.RIGHT) != 0) return SWT.RIGHT;
+	return SWT.LEFT;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is grayed,
+ * and false otherwise. When the widget does not have
+ * the <code>CHECK</code> style, return false.
+ *
+ * @return the grayed state of the checkbox
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public boolean getGrayed () {
+	checkWidget ();
+	if ((style & SWT.CHECK) == 0) return false;
+	return grayed;
+}
+
+/**
+ * Returns the receiver's image if it has one, or null
+ * if it does not.
+ *
+ * @return the receiver's image
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Image getImage () {
+	checkWidget ();
+	return image;
+}
+
+String getNameText () {
+	return getText ();
+}
+
+/**
+ * Returns <code>true</code> if the receiver is selected,
+ * and false otherwise.
+ * <p>
+ * When the receiver is of type <code>CHECK</code> or <code>RADIO</code>,
+ * it is selected when it is checked. When it is of type <code>TOGGLE</code>,
+ * it is selected when it is pushed in. If the receiver is of any other type,
+ * this method returns false.
+ *
+ * @return the selection state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getSelection () {
+	checkWidget ();
+	if ((style & (SWT.CHECK | SWT.RADIO | SWT.TOGGLE)) == 0) return false;
+	if ((style & SWT.CHECK) != 0 && grayed) {
+		int property = OS.ToggleButton_IsCheckedProperty();
+		int value = OS.DependencyObject_GetValue(handle, property);
+		OS.GCHandle_Free(property);
+		if (value == 0) return true;
+		OS.GCHandle_Free(value);
+	}
+	return OS.ToggleButton_IsChecked (handle);
+}
+
+/**
+ * Returns the receiver's text, which will be an empty
+ * string if it has never been set or if the receiver is
+ * an <code>ARROW</code> button.
+ *
+ * @return the receiver's text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getText () {
+	checkWidget ();
+	if ((style & SWT.ARROW) != 0) return "";
+	return text;
+}
+
+void HandleClick (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if ((style & SWT.CHECK) != 0) {
+		if (grayed) {
+			if (OS.ToggleButton_IsChecked (handle)) {
+				ignoreSelection = true;
+				OS.ToggleButton_IsCheckedNullSetter (handle);
+				ignoreSelection = false;
+			}
+		}
+	}
+	if (!ignoreSelection) postEvent (SWT.Selection);	
+}
+
+void hookEvents () {
+	super.hookEvents ();
+	if ((style & (SWT.TOGGLE | SWT.RADIO | SWT.CHECK)) != 0) {
+		int handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleClick");
+		if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+		OS.ToggleButton_Checked (handle, handler);
+		OS.GCHandle_Free (handler);		
+		handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleClick");
+		if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+		OS.ToggleButton_Unchecked (handle, handler);
+		OS.GCHandle_Free (handler);
+	} else {
+		int handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleClick");
+		if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+		OS.ButtonBase_Click (handle, handler);
+		OS.GCHandle_Free (handler);
+	}
+}
+
+boolean mnemonicHit (char ch) {
+	//TODO
+	return false;
+}
+
+boolean mnemonicMatch (char key) {
+	return super.mnemonicMatch (textHandle, key);
+}
+
+void releaseHandle() {
+	super.releaseHandle ();
+	if (textHandle != 0) OS.GCHandle_Free (textHandle);
+	textHandle = 0;
+	if (imageHandle !=0 )OS.GCHandle_Free (imageHandle);
+	imageHandle = 0;
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	text = null;
+	image = null;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+/**
+ * Controls how text, images and arrows will be displayed
+ * in the receiver. The argument should be one of
+ * <code>LEFT</code>, <code>RIGHT</code> or <code>CENTER</code>
+ * unless the receiver is an <code>ARROW</code> button, in 
+ * which case, the argument indicates the direction of
+ * the arrow (one of <code>LEFT</code>, <code>RIGHT</code>, 
+ * <code>UP</code> or <code>DOWN</code>).
+ *
+ * @param alignment the new alignment 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setAlignment (int alignment) {
+	checkWidget ();
+	if ((style & SWT.ARROW) != 0) {
+		if ((style & (SWT.UP | SWT.DOWN | SWT.LEFT | SWT.RIGHT)) == 0) return; 
+		style &= ~(SWT.UP | SWT.DOWN | SWT.LEFT | SWT.RIGHT);
+		style |= alignment & (SWT.UP | SWT.DOWN | SWT.LEFT | SWT.RIGHT);
+		createArrow ();
+		return;
+	}
+	if ((alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER)) == 0) return;
+	style &= ~(SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+	style |= alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+	int value = OS.HorizontalAlignment_Left;
+	if ((style & SWT.CENTER) != 0) value = OS.HorizontalAlignment_Center;
+	if ((style & SWT.RIGHT) != 0) value = OS.HorizontalAlignment_Right;
+	OS.Control_HorizontalContentAlignment (handle, value);
+}
+
+/**
+ * Sets the grayed state of the receiver.  This state change 
+ * only applies if the control was created with the SWT.CHECK
+ * style.
+ *
+ * @param grayed the new grayed state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public void setGrayed (boolean grayed) {
+	checkWidget ();
+	if ((style & SWT.CHECK) == 0) return;
+	boolean checked = getSelection();
+	this.grayed = grayed;
+	ignoreSelection = true;
+	if (checked){
+	if (grayed) {
+				OS.ToggleButton_IsCheckedNullSetter(handle);
+			} else {
+				OS.ToggleButton_IsChecked(handle, true);
+			}
+		}
+	setSelection (checked);
+	ignoreSelection = false;
+}
+
+void setDefault (boolean value) {
+	if ((style & SWT.PUSH) == 0) return;
+	OS.Button_IsDefault (handle, value);
+}
+
+/**
+ * Sets the receiver's image to the argument, which may be
+ * <code>null</code> indicating that no image should be displayed.
+ * <p>
+ * Note that a Button can display an image and text simultaneously
+ * on Windows (starting with XP), GTK+ and OSX.  On other platforms,
+ * a Button that has an image and text set into it will display the
+ * image or text that was set most recently.
+ * </p>
+ * @param image the image to display on the receiver (may be <code>null</code>)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li>
+ * </ul> 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setImage (Image image) {
+	checkWidget ();
+	if (image != null && image.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT);
+	if ((style & SWT.ARROW) != 0) return;
+	this.image = image;
+	OS.Image_Source (imageHandle, image != null ? image.handle : 0);
+	OS.UIElement_Visibility (imageHandle, image != null ? OS.Visibility_Visible : OS.Visibility_Collapsed);
+	OS.UIElement_Visibility (textHandle, image != null && text.length () == 0 ? OS.Visibility_Collapsed : OS.Visibility_Visible);
+	int spacing = image != null && text.length ()!= 0 ? 3 : 0;
+	int margin = OS.gcnew_Thickness (0, 0, spacing, 0);
+	if (margin == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.FrameworkElement_Margin (imageHandle, margin);
+	OS.GCHandle_Free (margin);
+}
+
+/**
+ * Sets the selection state of the receiver, if it is of type <code>CHECK</code>, 
+ * <code>RADIO</code>, or <code>TOGGLE</code>.
+ *
+ * <p>
+ * When the receiver is of type <code>CHECK</code> or <code>RADIO</code>,
+ * it is selected when it is checked. When it is of type <code>TOGGLE</code>,
+ * it is selected when it is pushed in.
+ *
+ * @param selected the new selection state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (boolean selected) {
+	checkWidget ();
+	if ((style & (SWT.CHECK | SWT.RADIO | SWT.TOGGLE)) == 0) return;
+	ignoreSelection = true;
+	if ((style & SWT.CHECK) != 0 && grayed) {
+		OS.ToggleButton_IsCheckedNullSetter (handle);
+	} else {
+		OS.ToggleButton_IsChecked (handle, selected);
+	}
+	ignoreSelection = false;
+}
+
+/**
+ * Sets the receiver's text.
+ * <p>
+ * This method sets the button label.  The label may include
+ * the mnemonic character but must not contain line delimiters.
+ * </p>
+ * <p>
+ * Mnemonics are indicated by an '&amp;' that causes the next
+ * character to be the mnemonic.  When the user presses a
+ * key sequence that matches the mnemonic, a selection
+ * event occurs. On most platforms, the mnemonic appears
+ * underlined but may be emphasized in a platform specific
+ * manner.  The mnemonic indicator character '&amp;' can be
+ * escaped by doubling it in the string, causing a single
+ * '&amp;' to be displayed.
+ * </p><p>
+ * Note that a Button can display an image and text simultaneously
+ * on Windows (starting with XP), GTK+ and OSX.  On other platforms,
+ * a Button that has an image and text set into it will display the
+ * image or text that was set most recently.
+ * </p>
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setText (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if ((style & SWT.ARROW) != 0) return;
+	if (string.equals (text)) return;
+	text = string;
+	int strPtr = createDotNetString (text, true);
+	if (strPtr == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.AccessText_Text (textHandle, strPtr);
+	OS.GCHandle_Free (strPtr);
+	OS.UIElement_Visibility (textHandle, string.length () == 0 && image != null ? OS.Visibility_Collapsed : OS.Visibility_Visible);
+	int spacing = image != null && text.length () != 0 ? 3 : 0;
+	int margin = OS.gcnew_Thickness (0, 0, spacing, 0);
+	if (margin == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.FrameworkElement_Margin (imageHandle, margin);
+	OS.GCHandle_Free (margin);
+}
+
+int traversalCode (int key, int event) {
+	int code = super.traversalCode (key, event);
+	if ((style & SWT.ARROW) != 0) code &= ~(SWT.TRAVERSE_TAB_NEXT | SWT.TRAVERSE_TAB_PREVIOUS);
+	if ((style & SWT.RADIO) != 0) code |= SWT.TRAVERSE_ARROW_NEXT | SWT.TRAVERSE_ARROW_PREVIOUS;
+	return code;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Canvas.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Canvas.java
new file mode 100644
index 0000000..d662b69
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Canvas.java
@@ -0,0 +1,313 @@
+/*******************************************************************************
+ * 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.widgets;
+
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class provide a surface for drawing
+ * arbitrary graphics.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * This class may be subclassed by custom control implementors
+ * who are building controls that are <em>not</em> constructed
+ * from aggregates of other controls. That is, they are either
+ * painted using SWT graphics calls or are handled by native
+ * methods.
+ * </p>
+ *
+ * @see Composite
+ * @see <a href="http://www.eclipse.org/swt/snippets/#canvas">Canvas snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+
+public class Canvas extends Composite {
+	Caret caret;
+	IME ime;
+	
+/**
+ * Prevents uninitialized instances from being created outside the package.
+ */
+Canvas () {
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Canvas (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+void clearArea (int x, int y, int width, int height) {
+	checkWidget ();
+//	if (OS.IsWindowVisible (handle)) {
+//		RECT rect = new RECT ();
+//		OS.SetRect (rect, x, y, x + width, y + height);
+//		int hDC = OS.GetDCEx (handle, 0, OS.DCX_CACHE | OS.DCX_CLIPCHILDREN | OS.DCX_CLIPSIBLINGS);
+//		drawBackground (hDC, rect);
+//		OS.ReleaseDC (handle, hDC);
+//	}
+}
+
+/**
+ * Returns the caret.
+ * <p>
+ * The caret for the control is automatically hidden
+ * and shown when the control is painted or resized,
+ * when focus is gained or lost and when an the control
+ * is scrolled.  To avoid drawing on top of the caret,
+ * the programmer must hide and show the caret when
+ * drawing in the window any other time.
+ * </p>
+ *
+ * @return the caret for the receiver, may be null
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Caret getCaret () {
+	checkWidget ();
+	return caret;
+}
+
+int getCaretHandle () {
+	if (caret != null && !caret.isDisposed()) {
+		return caret.handle;
+	}
+	return 0;
+}
+
+/**
+ * Returns the IME.
+ *
+ * @return the IME
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public IME getIME () {
+	checkWidget ();
+	return ime;
+}
+
+void releaseChildren (boolean destroy) {
+	super.releaseChildren (destroy);
+	if (caret != null) {
+		caret.release (false);
+		caret = null;
+	}
+	if (ime != null) {
+		ime.release (false);
+		ime = null;
+	}
+}
+
+/** 
+ * Fills the interior of the rectangle specified by the arguments,
+ * with the receiver's background. 
+ *
+ * @param gc the gc where the rectangle is to be filled
+ * @param x the x coordinate of the rectangle to be filled
+ * @param y the y coordinate of the rectangle to be filled
+ * @param width the width of the rectangle to be filled
+ * @param height the height of the rectangle to be filled
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the gc is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the gc has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void drawBackground (GC gc, int x, int y, int width, int height) {
+	checkWidget ();
+	if (gc == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	Control control = findBackgroundControl ();
+	if (control != null) {
+		if (width < 0) {
+			x = x + width;
+			width = -width;
+		}
+		if (height < 0) {
+			y = y + height;
+			height = -height;
+		}
+		Point pt = display.map (this, control, 0, 0);
+		int transform = OS.gcnew_TranslateTransform (-pt.x, -pt.y);
+		OS.DrawingContext_PushTransform (gc.handle, transform);
+		x += pt.x;
+		y += pt.y;
+		int rect = OS.gcnew_Rect (x, y, width, height);
+		int backgroundHandle = control.backgroundHandle ();
+		int property = backgroundProperty ();
+		int brush = OS.DependencyObject_GetValue (backgroundHandle, property);
+		OS.GCHandle_Free (property);
+		OS.DrawingContext_DrawRectangle (gc.handle, brush, 0, rect);
+		OS.DrawingContext_Pop (gc.handle);
+		OS.GCHandle_Free (transform);
+		OS.GCHandle_Free (rect);
+		OS.GCHandle_Free (brush);
+	} else {
+		gc.fillRectangle (x, y, width, height);
+	}
+
+}
+
+/**
+ * Scrolls a rectangular area of the receiver by first copying 
+ * the source area to the destination and then causing the area
+ * of the source which is not covered by the destination to
+ * be repainted. Children that intersect the rectangle are
+ * optionally moved during the operation. In addition, outstanding
+ * paint events are flushed before the source area is copied to
+ * ensure that the contents of the canvas are drawn correctly.
+ *
+ * @param destX the x coordinate of the destination
+ * @param destY the y coordinate of the destination
+ * @param x the x coordinate of the source
+ * @param y the y coordinate of the source
+ * @param width the width of the area
+ * @param height the height of the area
+ * @param all <code>true</code>if children should be scrolled, and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void scroll (int destX, int destY, int x, int y, int width, int height, boolean all) {
+	checkWidget ();
+//	boolean isFocus = caret != null && caret.isFocusCaret ();
+//	if (isFocus) caret.killFocus ();
+	//TODO 
+	redraw (false);
+//	if (isFocus) caret.setFocus ();
+}
+
+/**
+ * Sets the receiver's caret.
+ * <p>
+ * The caret for the control is automatically hidden
+ * and shown when the control is painted or resized,
+ * when focus is gained or lost and when an the control
+ * is scrolled.  To avoid drawing on top of the caret,
+ * the programmer must hide and show the caret when
+ * drawing in the window any other time.
+ * </p>
+ * @param caret the new caret for the receiver, may be null
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the caret has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setCaret (Caret caret) {
+	checkWidget ();
+	if (caret != null && caret.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
+	int children = OS.Panel_Children (handle);
+	if (this.caret != null) {
+		OS.UIElementCollection_Remove (children, this.caret.handle);
+	}
+	this.caret = caret;
+	if (caret != null) {
+		OS.UIElementCollection_Insert (children, 0, caret.handle);
+		if (hasFocus ()) caret.show (); 
+	}
+	OS.GCHandle_Free (children);
+}
+
+public void setFont (Font font) {
+	checkWidget ();
+	if (caret != null) caret.setFont (font);
+	super.setFont (font);
+}
+
+/**
+ * Sets the receiver's IME.
+ * 
+ * @param ime the new IME for the receiver, may be null
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the IME has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public void setIME (IME ime) {
+	checkWidget ();
+	if (ime != null && ime.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
+	this.ime = ime;
+}
+
+void HandlePreviewGotKeyboardFocus (int sender, int e) {
+	if (!checkEvent (e)) return;
+	super.HandlePreviewGotKeyboardFocus (sender, e);
+	if (caret != null) caret.show ();
+}
+
+void HandleLostKeyboardFocus (int sender, int e) {
+	if (!checkEvent (e)) return;
+	super.HandleLostKeyboardFocus (sender, e);
+	if (caret != null) caret.hide ();
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Caret.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Caret.java
new file mode 100644
index 0000000..f72e2b3
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Caret.java
@@ -0,0 +1,530 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class provide an i-beam that is typically used
+ * as the insertion point for text.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#caret">Caret snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Canvas tab</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class Caret extends Widget {
+	Canvas parent;
+	int x, y, width, height;
+	int imageHandle;
+	boolean isVisible;
+	Image image;
+	Font font;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Caret (Canvas parent, int style) {
+	super (parent, style);
+	this.parent = parent;
+	createWidget ();
+}
+
+void createWidget () {
+	createHandle ();
+	if (parent.getCaret () == null) {
+		parent.setCaret (this);
+	}
+}
+
+void createHandle() {
+	handle = OS.gcnew_StackPanel ();
+	//handle = OS.gcnew_ContentControl ();
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	
+	int animation = OS.gcnew_DoubleAnimationUsingKeyFrames ();
+	if (animation == 0) error (SWT.ERROR_NO_HANDLES);
+	int timespan = OS.gcnew_TimeSpan (6000000);
+	if (timespan == 0) error (SWT.ERROR_NO_HANDLES);
+	int duration = OS.gcnew_Duration (timespan);
+	if (duration == 0) error (SWT.ERROR_NO_HANDLES);
+	int repeatBehavior = OS.RepeatBehavior_Forever();
+	
+	OS.Timeline_AutoReverse(animation, true);	
+	OS.Timeline_Duration(animation, duration);
+	OS.Timeline_RepeatBehavior(animation, repeatBehavior);
+	int keyFrames = OS.DoubleAnimationUsingKeyFrames_KeyFrames(animation);
+	int keyTime = OS.KeyTime_Uniform();
+	int keyFrame0 = OS.gcnew_DiscreteDoubleKeyFrame(0, keyTime);
+	int keyFrame1 = OS.gcnew_DiscreteDoubleKeyFrame(0, keyTime);
+	OS.DoubleKeyFrameCollection_Add(keyFrames, keyFrame0);
+	OS.DoubleKeyFrameCollection_Add(keyFrames, keyFrame1);
+	int opacityProperty = OS.UIElement_OpacityProperty();
+	OS.UIElement_BeginAnimation(handle, opacityProperty, animation);
+	
+	int brush = OS.SystemColors_ControlTextBrush ();
+	OS.Panel_Background(handle, brush);
+	
+	imageHandle = OS.gcnew_Image ();
+	if (imageHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.Image_Stretch (imageHandle, OS.Stretch_None);
+	OS.UIElement_Visibility (imageHandle, OS.Visibility_Collapsed);
+	
+	int children = OS.Panel_Children (handle);
+	OS.UIElementCollection_Add (children, imageHandle);
+	OS.GCHandle_Free (children);
+	hide ();
+	OS.GCHandle_Free(brush);
+	OS.GCHandle_Free(opacityProperty);
+	OS.GCHandle_Free(keyFrames);
+	OS.GCHandle_Free(keyTime);
+	OS.GCHandle_Free(keyFrame0);
+	OS.GCHandle_Free(keyFrame1);
+	OS.GCHandle_Free(animation);
+	OS.GCHandle_Free(duration);
+	OS.GCHandle_Free(timespan);
+	OS.GCHandle_Free(repeatBehavior);
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location
+ * relative to its parent (or its display if its parent is null).
+ *
+ * @return the receiver's bounding rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Rectangle getBounds () {
+	checkWidget();
+	if (image != null) {
+		Rectangle rect = image.getBounds ();
+		return new Rectangle (x, y, rect.width, rect.height);
+	}
+	return new Rectangle (x, y, width, height);
+}
+
+/**
+ * Returns the font that the receiver will use to paint textual information.
+ *
+ * @return the receiver's font
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Font getFont () {
+	checkWidget();
+	if (font == null) {
+		return parent.display.systemFont;
+	}
+	return font;
+}
+
+/**
+ * Returns the image that the receiver will use to paint the caret.
+ *
+ * @return the receiver's image
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Image getImage () {
+	checkWidget();
+	return image;
+}
+
+/**
+ * Returns a point describing the receiver's location relative
+ * to its parent (or its display if its parent is null).
+ *
+ * @return the receiver's location
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Point getLocation () {
+	checkWidget();
+	return new Point (x, y);
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>Canvas</code>.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Canvas getParent () {
+	checkWidget();
+	return parent;
+}
+
+/**
+ * Returns a point describing the receiver's size.
+ *
+ * @return the receiver's size
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Point getSize () {
+	checkWidget();
+	if (image != null) {
+		Rectangle rect = image.getBounds ();
+		return new Point (rect.width, rect.height);
+	}
+	return new Point (width, height);
+}
+
+/**
+ * Returns <code>true</code> if the receiver is visible, and
+ * <code>false</code> otherwise.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, this method
+ * may still indicate that it is considered visible even though
+ * it may not actually be showing.
+ * </p>
+ *
+ * @return the receiver's visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getVisible () {
+	checkWidget ();
+	return isVisible;
+}
+
+boolean hasFocus () {	
+	return OS.UIElement_IsKeyboardFocused (parent.handle);
+}
+
+boolean isFocusCaret () {
+	return parent.caret == this && hasFocus ();
+}
+
+/**
+ * Returns <code>true</code> if the receiver is visible and all
+ * of the receiver's ancestors are visible and <code>false</code>
+ * otherwise.
+ *
+ * @return the receiver's visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getVisible
+ */
+public boolean isVisible () {
+	checkWidget();
+	return OS.UIElement_IsVisible (handle) && parent.isVisible () && hasFocus ();
+}
+
+void hide () {
+	OS.UIElement_Visibility (handle, OS.Visibility_Collapsed);
+} 
+
+void move (int x, int y) {
+	OS.Canvas_SetLeft (handle, x);
+	OS.Canvas_SetTop (handle, y);
+}
+
+void releaseHandle() {
+	if (handle != 0) OS.GCHandle_Free (handle);
+	handle = 0;
+	if (imageHandle != 0) OS.GCHandle_Free (imageHandle);
+	imageHandle = 0; 
+	super.releaseHandle ();
+}
+
+void releaseParent () {
+	super.releaseParent ();
+	if (this == parent.getCaret ()) parent.setCaret (null);
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	parent = null;
+	image = null;
+	font = null;
+}
+
+void resize (int width, int height) {
+	if (image != null) {
+		Rectangle rect = image.getBounds();
+		width = rect.width;
+		height = rect.height;
+	}
+	if (width == 0) width = 1;
+	OS.FrameworkElement_Width (handle, width);
+	OS.FrameworkElement_Height (handle, height);
+}
+
+/**
+ * Sets the receiver's size and location to the rectangular
+ * area specified by the arguments. The <code>x</code> and 
+ * <code>y</code> arguments are relative to the receiver's
+ * parent (or its display if its parent is null).
+ *
+ * @param x the new x coordinate for the receiver
+ * @param y the new y coordinate for the receiver
+ * @param width the new width for the receiver
+ * @param height the new height for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setBounds (int x, int y, int width, int height) {
+	checkWidget();
+	boolean samePosition = this.x == x && this.y == y;
+	boolean sameExtent = this.width == width && this.height == height;
+	if (samePosition && sameExtent) return;
+	this.x = x;  this.y = y;
+	this.width = width;  this.height = height;
+	if (!sameExtent) resize (width, height);
+	if (!samePosition) move (x, y);
+}
+
+/**
+ * Sets the receiver's size and location to the rectangular
+ * area specified by the argument. The <code>x</code> and 
+ * <code>y</code> fields of the rectangle are relative to
+ * the receiver's parent (or its display if its parent is null).
+ *
+ * @param rect the new bounds for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setBounds (Rectangle rect) {
+	if (rect == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setBounds (rect.x, rect.y, rect.width, rect.height);
+}
+
+void show () {
+	OS.UIElement_Visibility (handle, OS.Visibility_Visible);
+}
+
+/**
+ * Sets the font that the receiver will use to paint textual information
+ * to the font specified by the argument, or to the default font for that
+ * kind of control if the argument is null.
+ *
+ * @param font the new font (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the font has been disposed</li>
+ * </ul> 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setFont (Font font) {
+	checkWidget();
+	if (font != null && font.isDisposed ()) {
+		error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	this.font = font;
+}
+
+/**
+ * Sets the image that the receiver will use to paint the caret
+ * to the image specified by the argument, or to the default
+ * which is a filled rectangle if the argument is null
+ *
+ * @param image the new image (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li>
+ * </ul> 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setImage (Image image) {
+	checkWidget();
+	if (image != null && image.isDisposed ()) {
+		error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	this.image = image;
+	if (image != null) {
+		OS.Image_Source (imageHandle, image.handle);
+		OS.UIElement_Visibility (imageHandle, OS.Visibility_Visible);
+	} else {
+		OS.Image_Source (imageHandle, 0);
+		OS.UIElement_Visibility (imageHandle, OS.Visibility_Collapsed);
+	}
+	resize (width, height);
+}
+
+/**
+ * Sets the receiver's location to the point specified by
+ * the arguments which are relative to the receiver's
+ * parent (or its display if its parent is null).
+ *
+ * @param x the new x coordinate for the receiver
+ * @param y the new y coordinate for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setLocation (int x, int y) {
+	checkWidget();
+	if (this.x == x && this.y == y) return;
+	this.x = x;  this.y = y;
+	move (x, y);
+}
+
+/**
+ * Sets the receiver's location to the point specified by
+ * the argument which is relative to the receiver's
+ * parent (or its display if its parent is null).
+ *
+ * @param location the new location for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setLocation (Point location) {
+	checkWidget();
+	if (location == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setLocation (location.x, location.y);
+}
+
+/**
+ * Sets the receiver's size to the point specified by the arguments.
+ *
+ * @param width the new width for the receiver
+ * @param height the new height for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSize (int width, int height) {
+	checkWidget();
+	if (this.width == width && this.height == height) return;
+	this.width = width;  this.height = height;
+	resize (width, height);
+}
+
+/**
+ * Sets the receiver's size to the point specified by the argument.
+ *
+ * @param size the new extent for the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSize (Point size) {
+	checkWidget();
+	if (size == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setSize (size.x, size.y);
+}
+
+/**
+ * Marks the receiver as visible if the argument is <code>true</code>,
+ * and marks it invisible otherwise. 
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, marking
+ * it visible may not actually cause it to be displayed.
+ * </p>
+ *
+ * @param visible the new visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setVisible (boolean visible) {
+	checkWidget();
+	if (visible == isVisible) return;
+	isVisible = visible;
+	if (!hasFocus()) return;
+	OS.UIElement_Visibility(handle, visible ? OS.Visibility_Visible : OS.Visibility_Hidden);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ColorDialog.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ColorDialog.java
new file mode 100644
index 0000000..a67b241
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ColorDialog.java
@@ -0,0 +1,158 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class allow the user to select a color
+ * from a predefined set of available colors.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class ColorDialog extends Dialog {
+	RGB rgb;
+	
+/**
+ * Constructs a new instance of this class given only its parent.
+ *
+ * @param parent a composite control which will be the parent of the new instance
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public ColorDialog (Shell parent) {
+	this (parent, SWT.APPLICATION_MODAL);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public ColorDialog (Shell parent, int style) {
+	super (parent, checkStyle (parent, style));
+	checkSubclass ();
+}
+
+/**
+ * Returns the currently selected color in the receiver.
+ *
+ * @return the RGB value for the selected color, may be null
+ *
+ * @see PaletteData#getRGBs
+ */
+public RGB getRGB () {
+	return rgb;
+}
+
+/**
+ * Makes the receiver visible and brings it to the front
+ * of the display.
+ *
+ * @return the selected color, or null if the dialog was
+ *         cancelled, no color was selected, or an error
+ *         occurred
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public RGB open () {
+	int dialog = OS.gcnew_ColorDialog ();
+	if (rgb != null) {
+		int color = OS.DrawingColor_FromArgb (174, rgb.red, rgb.blue, rgb.green);
+		OS.ColorDialog_Color (dialog, color);
+		OS.GCHandle_Free (color);
+	}
+	Display display = parent.getDisplay ();
+	int customColors = display.customColors;
+	OS.ColorDialog_AnyColor (dialog, true);
+	OS.ColorDialog_CustomColors (dialog, customColors);
+	int result = OS.FormsCommonDialog_ShowDialog (dialog);
+	RGB rgb = null;
+	if (result == OS.DialogResult_OK) {
+		int color = OS.ColorDialog_Color (dialog);
+		int argb = OS.DrawingColor_ToArgb (color);	
+		int red = (argb & 0xFF0000) >> 16;
+		int green = (argb & 0xFF00) >> 8;
+		int blue = argb & 0xFF;
+		OS.GCHandle_Free (color);
+		rgb = new RGB (red, green, blue);
+		if (customColors != 0) OS.GCHandle_Free (customColors);
+		display.customColors = OS.ColorDialog_CustomColors (dialog);
+	}
+	OS.GCHandle_Free (dialog);
+	return rgb;
+}
+
+/**
+ * Sets the receiver's selected color to be the argument.
+ *
+ * @param rgb the new RGB value for the selected color, may be
+ *        null to let the platform select a default when
+ *        open() is called
+ * @see PaletteData#getRGBs
+ */
+public void setRGB (RGB rgb) {
+	this.rgb = rgb;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Combo.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Combo.java
new file mode 100644
index 0000000..796bce5
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Combo.java
@@ -0,0 +1,1424 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.wpf.OS;
+
+/**
+ * Instances of this class are controls that allow the user
+ * to choose an item from a list of items, or optionally 
+ * enter a new value by typing it into an editable text
+ * field. Often, <code>Combo</code>s are used in the same place
+ * where a single selection <code>List</code> widget could
+ * be used but space is limited. A <code>Combo</code> takes
+ * less space than a <code>List</code> widget and shows
+ * similar information.
+ * <p>
+ * Note: Since <code>Combo</code>s can contain both a list
+ * and an editable text field, it is possible to confuse methods
+ * which access one versus the other (compare for example,
+ * <code>clearSelection()</code> and <code>deselectAll()</code>).
+ * The API documentation is careful to indicate either "the
+ * receiver's list" or the "the receiver's text field" to 
+ * distinguish between the two cases.
+ * </p><p>
+ * Note that although this class is a subclass of <code>Composite</code>,
+ * it does not make sense to add children to it, or set a layout on it.
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>DROP_DOWN, READ_ONLY, SIMPLE</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>DefaultSelection, Modify, Selection, Verify</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles DROP_DOWN and SIMPLE may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see List
+ * @see <a href="http://www.eclipse.org/swt/snippets/#combo">Combo snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class Combo extends Composite {
+	int textHandle;
+	boolean ignoreSelection;
+	
+	/**
+	 * the operating system limit for the number of characters
+	 * that the text field in an instance of this class can hold
+	 */
+	public static final int LIMIT;
+	
+	/*
+	 * These values can be different on different platforms.
+	 * Therefore they are not initialized in the declaration
+	 * to stop the compiler from inlining.
+	 */
+	static {
+		LIMIT = 0x7FFFFFFF;	
+	}
+	
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#DROP_DOWN
+ * @see SWT#READ_ONLY
+ * @see SWT#SIMPLE
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Combo (Composite parent, int style) {
+	super (parent, checkStyle (style));
+	/* This code is intentionally commented */
+	//if ((style & SWT.H_SCROLL) != 0) this.style |= SWT.H_SCROLL;
+	this.style |= SWT.H_SCROLL;
+}
+
+Control [] _getChildren () {
+	return new Control [0];
+}
+
+/**
+ * Adds the argument to the end of the receiver's list.
+ *
+ * @param string the new item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #add(String,int)
+ */
+public void add (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int itemHandle = OS.gcnew_ComboBoxItem ();
+	int strPtr = createDotNetString (string, false);
+	OS.ContentControl_Content (itemHandle, strPtr);
+	OS.GCHandle_Free (strPtr);
+	int itemCollection = OS.ItemsControl_Items (handle);
+	OS.ItemCollection_Add (itemCollection, itemHandle);
+	OS.GCHandle_Free (itemCollection);
+	OS.GCHandle_Free (itemHandle);
+}
+
+/**
+ * Adds the argument to the receiver's list at the given
+ * zero-relative index.
+ * <p>
+ * Note: To add an item at the end of the list, use the
+ * result of calling <code>getItemCount()</code> as the
+ * index or use <code>add(String)</code>.
+ * </p>
+ *
+ * @param string the new item
+ * @param index the index for the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #add(String)
+ */
+public void add (String string, int index) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (index < 0) error (SWT.ERROR_INVALID_ARGUMENT);
+	int items = OS.ItemsControl_Items (handle);
+	int count = OS.ItemCollection_Count (items);
+	OS.GCHandle_Free (items);
+	if (index > count) error (SWT.ERROR_INVALID_ARGUMENT);
+	int itemHandle = OS.gcnew_ComboBoxItem ();
+	int strPtr = createDotNetString (string, false);
+	OS.ContentControl_Content (itemHandle, strPtr);
+	OS.GCHandle_Free (strPtr);
+	int itemCollection = OS.ItemsControl_Items (handle);
+	OS.ItemCollection_Insert (itemCollection, index, itemHandle);
+	OS.GCHandle_Free (itemCollection);
+	OS.GCHandle_Free (itemHandle);
+}
+
+void addChild (Control control) {
+}	
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the receiver's text is modified, by sending
+ * it one of the messages defined in the <code>ModifyListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ModifyListener
+ * @see #removeModifyListener
+ */
+public void addModifyListener (ModifyListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Modify, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the user changes the receiver's selection, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is called when the user changes the combo's list selection.
+ * <code>widgetDefaultSelected</code> is typically called when ENTER is pressed the combo's text area.
+ * </p>
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the receiver's text is verified, by sending
+ * it one of the messages defined in the <code>VerifyListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see VerifyListener
+ * @see #removeVerifyListener
+ * 
+ * @since 3.1
+ */
+public void addVerifyListener (VerifyListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Verify, typedListener);
+}
+
+void addWidget () {
+	super.addWidget ();
+	if ((style & SWT.READ_ONLY) == 0) {
+		updateLayout (handle);
+		int name = createDotNetString ("PART_EditableTextBox", false);
+		int template = OS.Control_Template (handle);
+		textHandle = OS.FrameworkTemplate_FindName (template, name, handle);
+		OS.GCHandle_Free (name);
+		OS.GCHandle_Free (template);
+	}
+}
+
+int backgroundProperty () {
+	return OS.Control_BackgroundProperty ();
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+static int checkStyle (int style) {
+	/*
+	 * Feature in Windows.  It is not possible to create
+	 * a combo box that has a border using Windows style
+	 * bits.  All combo boxes draw their own border and
+	 * do not use the standard Windows border styles.
+	 * Therefore, no matter what style bits are specified,
+	 * clear the BORDER bits so that the SWT style will
+	 * match the Windows widget.
+	 *
+	 * The Windows behavior is currently implemented on
+	 * all platforms.
+	 */
+	style &= ~SWT.BORDER;
+	
+	/*
+	 * Even though it is legal to create this widget
+	 * with scroll bars, they serve no useful purpose
+	 * because they do not automatically scroll the
+	 * widget's client area.  The fix is to clear
+	 * the SWT style.
+	 */
+	style &= ~(SWT.H_SCROLL | SWT.V_SCROLL);
+	style = checkBits (style, SWT.DROP_DOWN, SWT.SIMPLE, 0, 0, 0, 0);
+	if ((style & SWT.SIMPLE) != 0) return style & ~SWT.READ_ONLY;
+	return style;
+}
+
+/**
+ * Sets the selection in the receiver's text field to an empty
+ * selection starting just before the first character. If the
+ * text field is editable, this has the effect of placing the
+ * i-beam at the start of the text.
+ * <p>
+ * Note: To clear the selected items in the receiver's list, 
+ * use <code>deselectAll()</code>.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #deselectAll
+ */
+public void clearSelection () {
+	checkWidget ();
+	if ((style & SWT.READ_ONLY) == 0) {
+		OS.TextBox_Select (textHandle, 0, 0);
+	}
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget ();
+	ignoreSelection = true;
+	int itemCount = getItemCount();
+	int text = 0;
+	if (textHandle != 0) {
+		text = OS.TextBox_Text (textHandle);
+	}
+	int selectedIndex = OS.Selector_SelectedIndex (handle);
+	int width = wHint, height = hHint;
+	if (wHint == SWT.DEFAULT) width = 0x7FFFFFFF;
+	if (hHint == SWT.DEFAULT) height = 0x7FFFFFFF;
+	width = Math.max (0, width);
+	height = Math.max (0, height);
+	int availSize = OS.gcnew_Size ((double) width, (double) height);
+	if (availSize == 0) error (SWT.ERROR_NO_HANDLES);
+	double requestWidth = OS.FrameworkElement_Width (handle);
+	double requestHeight = OS.FrameworkElement_Height (handle);
+	int widthDP = OS.FrameworkElement_WidthProperty ();
+	int heightDP = OS.FrameworkElement_HeightProperty ();
+	OS.DependencyObject_ClearValue (handle, widthDP);
+	OS.DependencyObject_ClearValue (handle, heightDP);
+	OS.UIElement_Measure (handle, availSize);
+	int size = OS.UIElement_DesiredSize (handle);
+	width = (int) OS.Size_Width (size);
+	height = (int) OS.Size_Height (size);
+	OS.GCHandle_Free (size);
+	for (int i = 0; i < itemCount; i++) {
+		OS.Selector_SelectedIndex (handle, i);
+		updateLayout (handle);
+		OS.UIElement_Measure (handle, availSize);
+		size = OS.UIElement_DesiredSize (handle);
+		width = Math.max (width, (int) OS.Size_Width (size));
+		height = Math.max (height, (int) OS.Size_Height (size));
+		OS.GCHandle_Free (size);
+	}
+	OS.GCHandle_Free (availSize);
+	OS.FrameworkElement_Width (handle, requestWidth);
+	OS.FrameworkElement_Height (handle, requestHeight);
+	OS.Selector_SelectedIndex (handle, selectedIndex);
+	if (textHandle != 0) {
+		OS.TextBox_Text (textHandle, text);
+		OS.GCHandle_Free (text);
+	}
+	OS.GCHandle_Free (widthDP);
+	OS.GCHandle_Free (heightDP);
+	if (wHint != SWT.DEFAULT) width = wHint;
+	if (hHint != SWT.DEFAULT) height = hHint;
+	ignoreSelection = false;
+	return new Point (width, height);
+}
+
+/**
+ * Copies the selected text.
+ * <p>
+ * The current selection is copied to the clipboard.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.1
+ */
+public void copy () {
+	checkWidget ();
+	if ((style & SWT.READ_ONLY) != 0) return; //TODO
+	OS.TextBoxBase_Copy (textHandle);
+}
+
+void createHandle () {
+	handle = OS.gcnew_ComboBox ();
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	if ((style & SWT.READ_ONLY) == 0) {
+		OS.ComboBox_IsEditable (handle, true);
+		OS.ItemsControl_IsTextSearchEnabled (handle, false);
+	}
+}
+
+/**
+ * Cuts the selected text.
+ * <p>
+ * The current selection is first copied to the
+ * clipboard and then deleted from the widget.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.1
+ */
+public void cut () {
+	checkWidget ();
+	if ((style & SWT.READ_ONLY) != 0) return;
+	OS.TextBoxBase_Cut (textHandle);
+}
+
+/**
+ * Deselects the item at the given zero-relative index in the receiver's 
+ * list.  If the item at the index was already deselected, it remains
+ * deselected. Indices that are out of range are ignored.
+ *
+ * @param index the index of the item to deselect
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void deselect (int index) {
+	checkWidget ();
+	ignoreSelection = true;	
+	int selected = OS.Selector_SelectedIndex (handle);
+	if (selected == index) OS.Selector_SelectedIndex (handle, -1);
+	ignoreSelection = false;
+//	FIXME: May need to send modify event here. 
+//	if ((style & SWT.READ_ONLY) == 0) {
+//		sendEvent (SWT.Modify);
+//	}
+}
+
+/**
+ * Deselects all selected items in the receiver's list.
+ * <p>
+ * Note: To clear the selection in the receiver's text field,
+ * use <code>clearSelection()</code>.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #clearSelection
+ */
+public void deselectAll () {
+	checkWidget ();
+	ignoreSelection = true;
+	OS.Selector_SelectedIndex (handle, -1);
+	ignoreSelection = false;
+}
+
+/**
+ * Returns the item at the given, zero-relative index in the
+ * receiver's list. Throws an exception if the index is out
+ * of range.
+ *
+ * @param index the index of the item to return
+ * @return the item at the given index
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getItem (int index) {
+	checkWidget ();
+	int count = getItemCount ();
+	if (index < 0 || index >= count) error (SWT.ERROR_INVALID_RANGE);
+	int itemCollection = OS.ItemsControl_Items (handle);
+	int comboBoxItem = OS.ItemCollection_GetItemAt (itemCollection, index);
+	OS.GCHandle_Free (itemCollection);
+	int content = OS.ContentControl_Content (comboBoxItem);
+	String string = createJavaString(content);
+	OS.GCHandle_Free (comboBoxItem);
+	OS.GCHandle_Free (content);
+	return string;
+}
+
+/**
+ * Returns the number of items contained in the receiver's list.
+ *
+ * @return the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemCount () {
+	checkWidget ();
+	int itemCollection = OS.ItemsControl_Items (handle);
+	int count = OS.ItemCollection_Count (itemCollection);
+	OS.GCHandle_Free (itemCollection);
+	return count;
+}
+
+/**
+ * Returns the height of the area which would be used to
+ * display <em>one</em> of the items in the receiver's list.
+ *
+ * @return the height of one item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemHeight () {
+	checkWidget ();
+	//todo
+	int result = 0;
+//	if (result == OS.CB_ERR) error (SWT.ERROR_CANNOT_GET_ITEM_HEIGHT);
+	return result;
+}
+
+/**
+ * Returns a (possibly empty) array of <code>String</code>s which are
+ * the items in the receiver's list. 
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the items in the receiver's list
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String [] getItems () {
+	checkWidget ();
+	int count = getItemCount ();
+	String [] result = new String [count];
+	for (int i=0; i<count; i++) result [i] = getItem (i);
+	return result;
+}
+
+/**
+ * Returns <code>true</code> if the receiver's list is visible,
+ * and <code>false</code> otherwise.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, this method
+ * may still indicate that it is considered visible even though
+ * it may not actually be showing.
+ * </p>
+ *
+ * @return the receiver's list's visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public boolean getListVisible () {
+	checkWidget ();
+	return OS.ComboBox_IsDropDownOpen (handle);
+}
+
+String getNameText () {
+	return getText ();
+}
+
+/**
+ * Returns the orientation of the receiver.
+ *
+ * @return the orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.1.2
+ */
+public int getOrientation () {
+	checkWidget ();
+	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+}
+
+/**
+ * Returns a <code>Point</code> whose x coordinate is the
+ * character position representing the start of the selection
+ * in the receiver's text field, and whose y coordinate is the
+ * character position representing the end of the selection.
+ * An "empty" selection is indicated by the x and y coordinates
+ * having the same value.
+ * <p>
+ * Indexing is zero based.  The range of a selection is from
+ * 0..N where N is the number of characters in the widget.
+ * </p>
+ *
+ * @return a point representing the selection start and end
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Point getSelection () {
+	checkWidget ();
+	if ((style & SWT.READ_ONLY) != 0) return new Point (0,0);
+	int start = OS.TextBox_SelectionStart (textHandle);
+	int length = OS.TextBox_SelectionLength (textHandle);
+	return new Point (start, start + length);
+}
+
+/**
+ * Returns the zero-relative index of the item which is currently
+ * selected in the receiver's list, or -1 if no item is selected.
+ *
+ * @return the index of the selected item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelectionIndex () {
+	checkWidget ();
+	return OS.Selector_SelectedIndex (handle);
+}
+
+/**
+ * Returns a string containing a copy of the contents of the
+ * receiver's text field, or an empty string if there are no
+ * contents.
+ *
+ * @return the receiver's text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getText () {
+	checkWidget ();
+	String text;
+	if ((style & SWT.READ_ONLY) != 0) {
+		int item = OS.ComboBox_SelectionBoxItem (handle);
+		text = createJavaString (item);
+		OS.GCHandle_Free (item);
+	} else {
+		int content = OS.TextBox_Text (textHandle);
+		text = createJavaString (content);
+		OS.GCHandle_Free (content);
+	}
+	return text;
+}
+
+/**
+ * Returns the height of the receivers's text field.
+ *
+ * @return the text height
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getTextHeight () {
+	checkWidget ();
+	if (textHandle != 0) {
+		return (int) OS.FrameworkElement_ActualHeight(textHandle);
+	}
+	return 0;
+}
+
+/**
+ * Returns the maximum number of characters that the receiver's
+ * text field is capable of holding. If this has not been changed
+ * by <code>setTextLimit()</code>, it will be the constant
+ * <code>Combo.LIMIT</code>.
+ * 
+ * @return the text limit
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #LIMIT
+ */
+public int getTextLimit () {
+	checkWidget ();
+	if ((style & SWT.READ_ONLY) != 0) return LIMIT;
+	return OS.TextBox_MaxLength (textHandle);
+}
+
+/**
+ * Gets the number of items that are visible in the drop
+ * down portion of the receiver's list.
+ * <p>
+ * Note: This operation is a hint and is not supported on
+ * platforms that do not have this concept.
+ * </p>
+ *
+ * @return the number of items that are visible
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public int getVisibleItemCount () {
+	checkWidget ();
+	return 0;
+}
+
+void HandleSelectionChanged (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if (!ignoreSelection) postEvent (SWT.Selection);
+}
+
+void HandlePreviewExecutedRoutedEvent (int sender, int e) {
+	if (!checkEvent (e)) return;
+	int command = OS.ExecutedRoutedEventArgs_Command (e);
+	boolean doVerify = false;
+	String input = null;
+	int paste = OS.ApplicationCommands_Paste ();
+	int cut = OS.ApplicationCommands_Cut ();
+	int redo = OS.ApplicationCommands_Redo ();
+	int undo = OS.ApplicationCommands_Undo ();
+	int backspace = OS.EditingCommands_Backspace ();
+	int delete = OS.EditingCommands_Delete ();
+	int deleteNext = OS.EditingCommands_DeleteNextWord ();
+	int deletePrevious = OS.EditingCommands_DeletePreviousWord ();
+	if (OS.Object_Equals (command, paste)) {
+		doVerify = true;
+		int clipboardText = OS.Clipboard_GetText ();
+		input = createJavaString(clipboardText);
+		OS.GCHandle_Free(clipboardText);
+	} else if (OS.Object_Equals (command, cut)){
+		doVerify = true;
+		int content = OS.TextBox_SelectedText (textHandle);
+		input = createJavaString (content);
+		OS.GCHandle_Free (content);
+	} else if (OS.Object_Equals(command, redo)) {
+		//FIXME
+		//doVerify = true;
+		OS.ExecutedRoutedEventArgs_Handled (e, true);
+	} else if (OS.Object_Equals(command, undo)) {
+		//FIXME
+		//doVerify = true;
+		OS.ExecutedRoutedEventArgs_Handled (e, true);
+	} else if (OS.Object_Equals (command, backspace)) {
+		doVerify = true;
+		input = "";
+	} else if (OS.Object_Equals (command, delete)) {
+		doVerify = true;
+		input = "";
+	} else if (OS.Object_Equals(command, deleteNext)) {
+		//FIXME
+		//doVerify = true;
+		OS.ExecutedRoutedEventArgs_Handled (e, true);
+	} else if (OS.Object_Equals(command, deletePrevious)) {
+		//FIXME
+		//doVerify = true;
+		OS.ExecutedRoutedEventArgs_Handled (e, true);
+	}
+	OS.GCHandle_Free (paste);
+	OS.GCHandle_Free (cut);
+	OS.GCHandle_Free (redo);
+	OS.GCHandle_Free (undo);
+	OS.GCHandle_Free (backspace);
+	OS.GCHandle_Free (delete);
+	OS.GCHandle_Free (deleteNext);
+	OS.GCHandle_Free (deletePrevious);
+	OS.GCHandle_Free(command);
+	/*
+	* FIXME - should do this first, but for now we want to swallow
+	* all Redo, Undo, DeleteNextWord and DeletePreviousWord to 
+	* prevent those from changing the TextBox w/o Verify events
+	*/
+	if (!hooks (SWT.Verify)) return;
+	if (!doVerify) return;
+	String text = verifyText (input);
+	if (text != null && !text.equals (input)) {
+		int strPtr = createDotNetString (text, false);
+		OS.TextBox_SelectedText (textHandle, strPtr);
+		OS.GCHandle_Free (strPtr);
+		int start = OS.TextBox_SelectionStart (textHandle);
+		int length = OS.TextBox_SelectionLength (textHandle);
+		OS.TextBox_Select (textHandle, start+length, 0);
+		OS.TextBox_SelectionLength (textHandle, 0);
+		text = null;
+	}
+	if (text == null) OS.ExecutedRoutedEventArgs_Handled (e, true);
+}
+
+void HandlePreviewKeyDown (int sender, int e) {
+	super.HandlePreviewKeyDown (sender, e);
+	if (!checkEvent (e)) return;
+	int key = OS.KeyEventArgs_Key (e);
+	if (key == OS.Key_Return) postEvent (SWT.DefaultSelection);
+}
+
+void HandlePreviewTextInput (int sender, int e) {
+	super.HandlePreviewTextInput (sender, e);
+	if (!checkEvent (e)) return;
+	int textPtr = OS.TextCompositionEventArgs_Text (e);
+	String input = createJavaString(textPtr);
+	OS.GCHandle_Free (textPtr);
+	String text = verifyText (input);
+	if (text != null && !text.equals (input)) {
+		textPtr = createDotNetString (text, false);
+		OS.TextBox_SelectedText (textHandle, textPtr);
+		OS.GCHandle_Free (textPtr);
+		int start = OS.TextBox_SelectionStart (textHandle);
+		int length = OS.TextBox_SelectionLength (textHandle);
+		OS.TextBox_Select (textHandle, start+length, 0);
+		OS.TextBox_SelectionLength (textHandle, 0);
+		text = null;
+	}
+	if (text == null) OS.TextCompositionEventArgs_Handled (e, true);
+}
+
+void HandleTextChanged (int sender, int e) {
+	if (!checkEvent (e)) return;
+	sendEvent (SWT.Modify);
+}
+
+void hookEvents() {
+	super.hookEvents ();
+	int handler = OS.gcnew_SelectionChangedEventHandler (jniRef, "HandleSelectionChanged");
+	OS.Selector_SelectionChanged (handle, handler);
+	OS.GCHandle_Free (handler);
+	if (textHandle != 0) {
+		handler = OS.gcnew_ExecutedRoutedEventHandler (jniRef, "HandlePreviewExecutedRoutedEvent");
+		if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+		OS.CommandManager_AddPreviewExecutedHandler (textHandle, handler);
+		OS.GCHandle_Free (handler);
+		handler = OS.gcnew_TextChangedEventHandler (jniRef, "HandleTextChanged");
+		if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+		OS.TextBoxBase_TextChanged (textHandle, handler);
+		OS.GCHandle_Free (handler);
+	}
+}
+
+/**
+ * Searches the receiver's list starting at the first item
+ * (index 0) until an item is found that is equal to the 
+ * argument, and returns the index of that item. If no item
+ * is found, returns -1.
+ *
+ * @param string the search item
+ * @return the index of the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int indexOf (String string) {
+	return indexOf (string, 0);
+}
+
+/**
+ * Searches the receiver's list starting at the given, 
+ * zero-relative index until an item is found that is equal
+ * to the argument, and returns the index of that item. If
+ * no item is found or the starting index is out of range,
+ * returns -1.
+ *
+ * @param string the search item
+ * @param start the zero-relative index at which to begin the search
+ * @return the index of the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int indexOf (String string, int start) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int count = getItemCount ();
+	if (start < 0 || start >= count) return -1;
+	start = Math.max (start, 0);
+	int strPtr = createDotNetString (string, false);
+	int itemCollection = OS.ItemsControl_Items (handle);
+	int index = -1;
+	while (start < count && index == -1) {
+		int item = OS.ItemCollection_GetItemAt (itemCollection, start);
+		int itemContent = OS.ContentControl_Content (item);
+		OS.GCHandle_Free (item);
+		if (itemContent != 0 && OS.Object_Equals (itemContent, strPtr)) index = start; 
+		OS.GCHandle_Free (itemContent);
+		start ++;
+	}
+	OS.GCHandle_Free (strPtr);
+	OS.GCHandle_Free (itemCollection);
+	return index;
+}
+
+/**
+ * Pastes text from clipboard.
+ * <p>
+ * The selected text is deleted from the widget
+ * and new text inserted from the clipboard.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.1
+ */
+public void paste () {
+	checkWidget ();
+	if ((style & SWT.READ_ONLY) != 0) return;
+	OS.TextBoxBase_Paste (textHandle);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (textHandle != 0) OS.GCHandle_Free (textHandle);
+	textHandle = 0;
+}
+/**
+ * Removes the item from the receiver's list at the given
+ * zero-relative index.
+ *
+ * @param index the index for the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void remove (int index) {
+	checkWidget ();
+	if (index < 0 || index >= getItemCount ()) error (SWT.ERROR_INVALID_RANGE);
+	int itemCollection = OS.ItemsControl_Items(handle);
+	OS.ItemCollection_RemoveAt(itemCollection, index);
+	OS.GCHandle_Free(itemCollection);
+}
+
+/**
+ * Removes the items from the receiver's list which are
+ * between the given zero-relative start and end 
+ * indices (inclusive).
+ *
+ * @param start the start of the range
+ * @param end the end of the range
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if either the start or end are not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void remove (int start, int end) {
+	checkWidget ();
+	int count = getItemCount ();
+	if (start < 0 || start >= count) error (SWT.ERROR_INVALID_RANGE);
+	if (end < 0 || end >= count) error (SWT.ERROR_INVALID_RANGE);
+	int itemCollection = OS.ItemsControl_Items(handle);
+	for (int i = end; i >= start; i--) {
+		OS.ItemCollection_RemoveAt(itemCollection, i);
+	}
+	OS.GCHandle_Free(itemCollection);
+}
+
+/**
+ * Searches the receiver's list starting at the first item
+ * until an item is found that is equal to the argument, 
+ * and removes that item from the list.
+ *
+ * @param string the item to remove
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the string is not found in the list</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void remove (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int index = indexOf (string, 0);
+	if (index == -1) error (SWT.ERROR_INVALID_ARGUMENT);
+	remove (index);
+}
+
+/**
+ * Removes all of the items from the receiver's list and clear the
+ * contents of receiver's text field.
+ * <p>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void removeAll () {
+	checkWidget ();
+	int itemCollection = OS.ItemsControl_Items (handle);
+	ignoreSelection = true;
+	OS.ItemCollection_Clear (itemCollection);
+	ignoreSelection = false;
+	OS.GCHandle_Free (itemCollection);
+}
+
+void removeChild(Control control) {
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the receiver's text is modified.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ModifyListener
+ * @see #addModifyListener
+ */
+public void removeModifyListener (ModifyListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Modify, listener);	
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the user changes the receiver's selection.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is verified.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see VerifyListener
+ * @see #addVerifyListener
+ * 
+ * @since 3.1
+ */
+public void removeVerifyListener (VerifyListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Verify, listener);	
+}
+
+/**
+ * Selects the item at the given zero-relative index in the receiver's 
+ * list.  If the item at the index was already selected, it remains
+ * selected. Indices that are out of range are ignored.
+ *
+ * @param index the index of the item to select
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void select (int index) {
+	checkWidget ();
+	int itemCollection = OS.ItemsControl_Items(handle);
+	int count = OS.ItemCollection_Count(itemCollection);
+	OS.GCHandle_Free(itemCollection);
+	if (0 <= index && index < count) {
+//		int selection = OS.Selector_SelectedIndex (handle);
+		ignoreSelection = true;
+		OS.Selector_SelectedIndex(handle, index);
+		ignoreSelection = false;
+//		int code = OS.Selector_SelectedIndex(handle);
+//		if (code != -1 && code != selection) {
+//			sendEvent (SWT.Modify);
+//		}
+	}
+}
+
+void setForegroundBrush (int brush) {
+	if (brush != 0) {
+		OS.Control_Foreground (handle, brush);
+	} else {
+		int property = OS.Control_ForegroundProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+	}
+}
+
+/**
+ * Sets the text of the item in the receiver's list at the given
+ * zero-relative index to the string argument.
+ *
+ * @param index the index for the item
+ * @param string the new text for the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setItem (int index, String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (index < 0 || index >= getItemCount()) error (SWT.ERROR_INVALID_RANGE);
+	int itemCollection = OS.ItemsControl_Items(handle);
+	int item = OS.ItemCollection_GetItemAt(itemCollection, index);
+	OS.GCHandle_Free(itemCollection);
+	int strPtr = createDotNetString (string, false);
+	OS.ContentControl_Content(item, strPtr);
+	OS.GCHandle_Free(strPtr);
+	OS.GCHandle_Free(item);
+}
+
+/**
+ * Sets the receiver's list to be the given array of items.
+ *
+ * @param items the array of items
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the items array is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if an item in the items array is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setItems (String [] items) {
+	checkWidget ();
+	if (items == null) error (SWT.ERROR_NULL_ARGUMENT);
+	for (int i=0; i<items.length; i++) {
+		if (items [i] == null) error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	int itemCollection = OS.ItemsControl_Items(handle);
+	ignoreSelection = true;
+	OS.ItemCollection_Clear(itemCollection);
+	for (int i = 0; i < items.length; i++) {
+		int itemHandle = OS.gcnew_ComboBoxItem ();
+		int strPtr = createDotNetString (items [i], false);
+		OS.ContentControl_Content (itemHandle, strPtr);
+		OS.GCHandle_Free (strPtr);
+		OS.ItemCollection_Add (itemCollection, itemHandle);
+		OS.GCHandle_Free (itemHandle);
+	}
+	ignoreSelection = false;
+	OS.GCHandle_Free(itemCollection);
+}
+
+/**
+ * Marks the receiver's list as visible if the argument is <code>true</code>,
+ * and marks it invisible otherwise.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, marking
+ * it visible may not actually cause it to be displayed.
+ * </p>
+ *
+ * @param visible the new visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public void setListVisible (boolean visible) {
+	checkWidget ();
+	OS.ComboBox_IsDropDownOpen (handle, visible);
+}
+
+/**
+ * Sets the orientation of the receiver, which must be one
+ * of the constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ * <p>
+ *
+ * @param orientation new orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.1.2
+ */
+public void setOrientation (int orientation) {
+	checkWidget();
+	int flowDirection = orientation == SWT.RIGHT_TO_LEFT ? OS.FlowDirection_RightToLeft  : OS.FlowDirection_LeftToRight;
+	OS.FrameworkElement_FlowDirection (handle, flowDirection);
+}
+
+/**
+ * Sets the selection in the receiver's text field to the
+ * range specified by the argument whose x coordinate is the
+ * start of the selection and whose y coordinate is the end
+ * of the selection. 
+ *
+ * @param selection a point representing the new selection start and end
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (Point selection) {
+	checkWidget ();
+	if ((style & SWT.READ_ONLY) != 0) return;
+	if (selection == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int start = selection.x, length = selection.y - selection.x;
+	OS.TextBox_SelectionLength (textHandle, length);
+	OS.TextBox_SelectionStart (textHandle, start);
+}
+
+/**
+ * Sets the contents of the receiver's text field to the
+ * given string.
+ * <p>
+ * This call is ignored when the receiver is read only and 
+ * the given string is not in the receiver's list.
+ * </p>
+ * <p>
+ * Note: The text field in a <code>Combo</code> is typically
+ * only capable of displaying a single line of text. Thus,
+ * setting the text to a string containing line breaks or
+ * other special characters will probably cause it to 
+ * display incorrectly.
+ * </p>
+ *
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setText (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if ((style & SWT.READ_ONLY) != 0) {
+		int index = indexOf (string);
+		if (index != -1) select (index);
+		return;
+	}
+	int strPtr = createDotNetString (string, false);
+	OS.TextBox_Text (textHandle, strPtr);
+	OS.GCHandle_Free (strPtr);
+}
+
+/**
+ * Sets the maximum number of characters that the receiver's
+ * text field is capable of holding to be the argument.
+ * <p>
+ * To reset this value to the default, use <code>setTextLimit(Combo.LIMIT)</code>.
+ * Specifying a limit value larger than <code>Combo.LIMIT</code> sets the
+ * receiver's limit to <code>Combo.LIMIT</code>.
+ * </p>
+ * @param limit new text limit
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_CANNOT_BE_ZERO - if the limit is zero</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #LIMIT
+ */
+public void setTextLimit (int limit) {
+	checkWidget ();
+	if (limit == 0) error (SWT.ERROR_CANNOT_BE_ZERO);
+	if ((style & SWT.READ_ONLY) != 0) return;
+	OS.TextBox_MaxLength (textHandle, limit);
+}
+
+/**
+ * Sets the number of items that are visible in the drop
+ * down portion of the receiver's list.
+ * <p>
+ * Note: This operation is a hint and is not supported on
+ * platforms that do not have this concept.
+ * </p>
+ *
+ * @param count the new number of items to be visible
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void setVisibleItemCount (int count) {
+	checkWidget ();
+	return;
+}
+
+String verifyText (String text) {
+	int start = OS.TextBox_SelectionStart (textHandle);
+	int length = OS.TextBox_SelectionLength (textHandle);
+	Event event = new Event ();
+	event.text = text;
+	event.start = start;
+	/*
+	* FIXME: end can be greater than start+length+1
+	* when Deleting special characters. 
+	* Note that backspace deletes one character at 
+	* a time. 
+	*/
+	event.end = start+length+1;
+	sendEvent (SWT.Verify, event);
+	if (!event.doit) return null;
+	return event.text;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Composite.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Composite.java
new file mode 100644
index 0000000..e7e27d2
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Composite.java
@@ -0,0 +1,1157 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class are controls which are capable
+ * of containing other controls.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>NO_BACKGROUND, NO_FOCUS, NO_MERGE_PAINTS, NO_REDRAW_RESIZE, NO_RADIO_GROUP, EMBEDDED, DOUBLE_BUFFERED</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * Note: The <code>NO_BACKGROUND</code>, <code>NO_FOCUS</code>, <code>NO_MERGE_PAINTS</code>,
+ * and <code>NO_REDRAW_RESIZE</code> styles are intended for use with <code>Canvas</code>.
+ * They can be used with <code>Composite</code> if you are drawing your own, but their
+ * behavior is undefined if they are used with subclasses of <code>Composite</code> other
+ * than <code>Canvas</code>.
+ * </p><p>
+ * Note: The <code>CENTER</code> style, although undefined for composites, has the
+ * same value as <code>EMBEDDED</code> which is used to embed widgets from other
+ * widget toolkits into SWT.  On some operating systems (GTK, Motif), this may cause
+ * the children of this composite to be obscured.
+ * </p><p>
+ * This class may be subclassed by custom control implementors
+ * who are building controls that are constructed from aggregates
+ * of other controls.
+ * </p>
+ *
+ * @see Canvas
+ * @see <a href="http://www.eclipse.org/swt/snippets/#composite">Composite snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+
+public class Composite extends Scrollable {
+	Layout layout;
+	Control [] tabList;
+	int layoutCount, backgroundMode;
+
+/**
+ * Prevents uninitialized instances from being created outside the package.
+ */
+Composite () {
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a widget which will be the parent of the new instance (cannot be null)
+ * @param style the style of widget to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ * </ul>
+ *
+ * @see SWT#NO_BACKGROUND
+ * @see SWT#NO_FOCUS
+ * @see SWT#NO_MERGE_PAINTS
+ * @see SWT#NO_REDRAW_RESIZE
+ * @see SWT#NO_RADIO_GROUP
+ * @see SWT#EMBEDDED
+ * @see SWT#DOUBLE_BUFFERED
+ * @see Widget#getStyle
+ */
+public Composite (Composite parent, int style) {
+	super (parent, style);
+}
+
+static int checkStyle (int style) {
+	style &= ~SWT.TRANSPARENT;
+	return style;
+}
+
+int getCaretHandle () {
+	return 0;
+}
+
+Control [] _getChildren () {
+	int parentHandle = parentingHandle ();
+	int elements = OS.Panel_Children (parentHandle);
+	int count = OS.UIElementCollection_Count (elements);
+	int caretHandle = getCaretHandle ();
+	if (caretHandle != 0) count--;
+	Control [] children = new Control [count];
+	int index = count - 1;
+	if (count != 0) {
+		int enumerator = OS.UIElementCollection_GetEnumerator (elements);
+		while (OS.IEnumerator_MoveNext (enumerator)) {
+			int current = OS.UIElementCollection_Current (enumerator);
+			if (caretHandle != 0 && OS.Object_Equals(caretHandle, current)) {
+				OS.GCHandle_Free (current);
+				continue;
+			}
+			Widget widget = display.getWidget (current);
+			if (widget != null && widget != this) {
+				if (widget instanceof Control) {
+					children [index--] = (Control)widget;
+				}
+			}
+			OS.GCHandle_Free (current);
+		}
+		OS.GCHandle_Free (enumerator);
+	}
+	OS.GCHandle_Free (elements);
+	if (index == -1) return children;
+	Control [] newChildren = new Control [count - index - 1];
+	System.arraycopy (children, index + 1, newChildren, 0, newChildren.length);
+	return newChildren;
+}
+
+Control [] _getTabList () {
+	if (tabList == null) return tabList;
+	int count = 0;
+	for (int i=0; i<tabList.length; i++) {
+		if (!tabList [i].isDisposed ()) count++;
+	}
+	if (count == tabList.length) return tabList;
+	Control [] newList = new Control [count];
+	int index = 0;
+	for (int i=0; i<tabList.length; i++) {
+		if (!tabList [i].isDisposed ()) {
+			newList [index++] = tabList [i];
+		}
+	}
+	tabList = newList;
+	return tabList;
+}
+
+void addChild (Control control) {
+	int parentHandle = parentingHandle ();
+	int children = OS.Panel_Children (parentHandle);
+	int index = 0;
+	if (parentHandle != handle) {
+		if (OS.UIElementCollection_Contains (children, handle)) {
+			index = 1;
+		}
+	}
+	int topHandle = control.topHandle ();
+	OS.UIElementCollection_Insert (children, index, topHandle);
+	OS.GCHandle_Free (children);
+	OS.FrameworkElement_Width (topHandle, 0);
+	OS.FrameworkElement_Height (topHandle, 0);
+}
+
+int backgoundProperty () {
+	return OS.Panel_BackgroundProperty();
+}
+
+/**
+ * Clears any data that has been cached by a Layout for all widgets that 
+ * are in the parent hierarchy of the changed control up to and including the 
+ * receiver.  If an ancestor does not have a layout, it is skipped.
+ * 
+ * @param changed an array of controls that changed state and require a recalculation of size
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the changed array is null any of its controls are null or have been disposed</li> 
+ *    <li>ERROR_INVALID_PARENT - if any control in changed is not in the widget tree of the receiver</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.1
+ */
+public void changed (Control[] changed) {
+	checkWidget ();
+	if (changed == null) error (SWT.ERROR_INVALID_ARGUMENT);
+	for (int i=0; i<changed.length; i++) {
+		Control control = changed [i];
+		if (control == null) error (SWT.ERROR_INVALID_ARGUMENT);
+		if (control.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+		boolean ancestor = false;
+		Composite composite = control.parent;
+		while (composite != null) {
+			ancestor = composite == this;
+			if (ancestor) break;
+			composite = composite.parent;
+		}
+		if (!ancestor) error (SWT.ERROR_INVALID_PARENT);
+	}
+	for (int i=0; i<changed.length; i++) {
+		Control child = changed [i];
+		Composite composite = child.parent;
+		while (child != this) {
+			if (composite.layout == null || !composite.layout.flushCache (child)) {
+				composite.state |= LAYOUT_CHANGED;
+			}
+			child = composite;
+			composite = child.parent;
+		}
+	}
+}
+
+protected void checkSubclass () {
+	/* Do nothing - Subclassing is allowed */
+}
+
+Control [] computeTabList () {
+	Control result [] = super.computeTabList ();
+	if (result.length == 0) return result;
+	Control [] list = tabList != null ? _getTabList () : _getChildren ();
+	for (int i=0; i<list.length; i++) {
+		Control child = list [i];
+		Control [] childList = child.computeTabList ();
+		if (childList.length != 0) {
+			Control [] newResult = new Control [result.length + childList.length];
+			System.arraycopy (result, 0, newResult, 0, result.length);
+			System.arraycopy (childList, 0, newResult, result.length, childList.length);
+			result = newResult;
+		}
+	}
+	return result;
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget ();
+	Point size;
+	if (layout != null) {
+		if (wHint == SWT.DEFAULT || hHint == SWT.DEFAULT) {
+			changed |= (state & LAYOUT_CHANGED) != 0;
+			state &= ~LAYOUT_CHANGED;
+			size = layout.computeSize (this, wHint, hHint, changed);
+		} else {
+			size = new Point (wHint, hHint);
+		}
+	} else {
+		size = minimumSize (wHint, hHint, changed);
+	}
+	if (size.x == 0) size.x = DEFAULT_WIDTH;
+	if (size.y == 0) size.y = DEFAULT_HEIGHT;
+	if (wHint != SWT.DEFAULT) size.x = wHint;
+	if (hHint != SWT.DEFAULT) size.y = hHint;
+	Rectangle trim = computeTrim (0, 0, size.x, size.y);
+	return new Point (trim.width, trim.height);
+}
+
+void createHandle () {
+	state |= CANVAS;
+	if ((style & (SWT.H_SCROLL | SWT.V_SCROLL)) == 0) {
+		state |= THEME_BACKGROUND;
+	}
+	boolean scrolled = (style & (SWT.H_SCROLL | SWT.V_SCROLL)) != 0;
+	createHandle (scrolled, false);
+}
+
+void createHandle (boolean scrolled, boolean menubar) {
+	handle = OS.gcnew_SWTCanvas (jniRef);
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.FrameworkElement_FocusVisualStyle (handle, 0);
+	if ((style & SWT.NO_FOCUS) == 0) { 
+		OS.UIElement_Focusable (handle, true);
+	}
+	if (scrolled || menubar) {
+		scrolledHandle = OS.gcnew_Grid ();
+		if (scrolledHandle == 0) error (SWT.ERROR_NO_HANDLES);
+
+		/* Create grid definition */
+		int gridLength = OS.gcnew_GridLength (1, OS.GridUnitType_Auto);
+		if (gridLength == 0) error (SWT.ERROR_NO_HANDLES);
+		int columnDefinitions = OS.Grid_ColumnDefinitions (scrolledHandle);
+		int column0 = OS.gcnew_ColumnDefinition ();
+		if (column0 == 0) error (SWT.ERROR_NO_HANDLES);
+		OS.ColumnDefinitionCollection_Add (columnDefinitions, column0);
+		int column1 = OS.gcnew_ColumnDefinition ();
+		if (column1 == 0) error (SWT.ERROR_NO_HANDLES);
+		OS.ColumnDefinition_Width (column1, gridLength);
+		OS.ColumnDefinitionCollection_Add (columnDefinitions, column1);
+		int rowDefinitions = OS.Grid_RowDefinitions (scrolledHandle);
+		int row0 = OS.gcnew_RowDefinition ();
+		if (row0  == 0) error (SWT.ERROR_NO_HANDLES);
+		OS.RowDefinition_Height (row0, gridLength);
+		OS.RowDefinitionCollection_Add (rowDefinitions, row0);
+		int row1 = OS.gcnew_RowDefinition ();
+		if (row1  == 0) error (SWT.ERROR_NO_HANDLES);
+		OS.RowDefinitionCollection_Add (rowDefinitions, row1);
+		int row2 = OS.gcnew_RowDefinition ();
+		if (row2  == 0) error (SWT.ERROR_NO_HANDLES);
+		OS.RowDefinition_Height (row2, gridLength);
+		OS.RowDefinitionCollection_Add (rowDefinitions, row2);
+		OS.GCHandle_Free (column0);
+		OS.GCHandle_Free (column1);
+		OS.GCHandle_Free (row0);
+		OS.GCHandle_Free (row1);
+		OS.GCHandle_Free (row2);
+		OS.GCHandle_Free (gridLength);
+		OS.GCHandle_Free (columnDefinitions);
+		OS.GCHandle_Free (rowDefinitions);
+
+		/* create children */
+		int children = OS.Panel_Children (scrolledHandle);
+		OS.UIElementCollection_Add (children, handle);		
+		OS.Grid_SetRow (handle, 1);
+		OS.Grid_SetColumn (handle, 0);
+		if ((style & SWT.V_SCROLL) != 0) {
+			int vScroll = OS.gcnew_ScrollBar ();
+			if (vScroll == 0) error (SWT.ERROR_NO_HANDLES);
+			OS.ScrollBar_Orientation (vScroll, OS.Orientation_Vertical);
+			OS.RangeBase_Maximum(vScroll, 90);
+			OS.RangeBase_LargeChange (vScroll, 10);
+			OS.ScrollBar_ViewportSize (vScroll, 10);
+			OS.Grid_SetRow (vScroll, 1);
+			OS.Grid_SetColumn (vScroll, 1);
+			OS.UIElementCollection_Add (children, vScroll);			
+			OS.GCHandle_Free (vScroll);
+		}
+		if ((style & SWT.H_SCROLL) != 0) {
+			int hScroll = OS.gcnew_ScrollBar ();	
+			if (hScroll == 0) error (SWT.ERROR_NO_HANDLES);
+			OS.ScrollBar_Orientation (hScroll, OS.Orientation_Horizontal);
+			OS.RangeBase_Maximum (hScroll, 90);
+			OS.RangeBase_LargeChange (hScroll, 10);
+			OS.ScrollBar_ViewportSize (hScroll, 10);
+			OS.Grid_SetRow (hScroll, 2);
+			OS.Grid_SetColumn (hScroll, 0);
+			OS.UIElementCollection_Add (children, hScroll);
+			OS.GCHandle_Free (hScroll);
+		}
+		OS.GCHandle_Free (children);		
+	}
+}
+
+int defaultBackground () {
+	if ((state & CANVAS) != 0) {
+		return OS.SystemColors_ControlColor;
+	}
+	return 0;
+}
+
+void enableWidget (boolean enabled) {
+	if ((state & CANVAS) != 0) {
+		OS.UIElement_IsHitTestVisible (topHandle (), enabled);
+	} else {
+		OS.UIElement_IsEnabled (handle, enabled);
+		OS.UIElement_IsHitTestVisible (parentingHandle (), enabled);
+	}
+}
+
+Composite findDeferredControl () {
+	return layoutCount > 0 ? this : parent.findDeferredControl ();
+}
+
+Menu [] findMenus (Control control) {
+	if (control == this) return new Menu [0];
+	Menu result [] = super.findMenus (control);
+	Control [] children = _getChildren ();
+	for (int i=0; i<children.length; i++) {
+		Control child = children [i];
+		Menu [] menuList = child.findMenus (control);
+		if (menuList.length != 0) {
+			Menu [] newResult = new Menu [result.length + menuList.length];
+			System.arraycopy (result, 0, newResult, 0, result.length);
+			System.arraycopy (menuList, 0, newResult, result.length, menuList.length);
+			result = newResult;
+		}
+	}
+	return result;
+}
+
+void fixScrollbarVisibility () {
+}
+
+void fixTabList (Control control) {
+	if (tabList == null) return;
+	int count = 0;
+	for (int i=0; i<tabList.length; i++) {
+		if (tabList [i] == control) count++;
+	}
+	if (count == 0) return;
+	Control [] newList = null;
+	int length = tabList.length - count;
+	if (length != 0) {
+		newList = new Control [length];
+		int index = 0;
+		for (int i=0; i<tabList.length; i++) {
+			if (tabList [i] != control) {
+				newList [index++] = tabList [i];
+			}
+		}
+	}
+	tabList = newList;
+}
+
+/**
+ * Returns the receiver's background drawing mode. This
+ * will be one of the following constants defined in class
+ * <code>SWT</code>:
+ * <code>INHERIT_NONE</code>, <code>INHERIT_DEFAULT</code>,
+ * <code>INHERTIT_FORCE</code>.
+ *
+ * @return the background mode
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SWT
+ * 
+ * @since 3.2
+ */
+public int getBackgroundMode () {
+	checkWidget ();
+	return backgroundMode;
+}
+
+/**
+ * Returns a (possibly empty) array containing the receiver's children.
+ * Children are returned in the order that they are drawn.  The topmost
+ * control appears at the beginning of the array.  Subsequent controls
+ * draw beneath this control and appear later in the array.
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of children, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return an array of children
+ * 
+ * @see Control#moveAbove
+ * @see Control#moveBelow
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Control [] getChildren () {
+	checkWidget ();
+	return _getChildren ();
+}
+
+/**
+ * Returns layout which is associated with the receiver, or
+ * null if one has not been set.
+ *
+ * @return the receiver's layout or null
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Layout getLayout () {
+	checkWidget ();
+	return layout;
+}
+
+Point getLocation (Control child) {
+	int topHandle = child.topHandle ();
+	int x = (int) OS.Canvas_GetLeft (topHandle);
+	int y = (int) OS.Canvas_GetTop (topHandle);
+	return new Point (x, y);
+}
+
+/**
+ * Gets the (possibly empty) tabbing order for the control.
+ *
+ * @return tabList the ordered list of controls representing the tab order
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setTabList
+ */
+public Control [] getTabList () {
+	checkWidget ();
+	Control [] tabList = _getTabList ();
+	if (tabList == null) {
+		int count = 0;
+		Control [] list =_getChildren ();
+		for (int i=0; i<list.length; i++) {
+			if (list [i].isTabGroup ()) count++;
+		}
+		tabList = new Control [count];
+		int index = 0;
+		for (int i=0; i<list.length; i++) {
+			if (list [i].isTabGroup ()) {
+				tabList [index++] = list [i];
+			}
+		}
+	}
+	return tabList;
+}
+
+boolean hooksKeys () {
+	return hooks (SWT.KeyDown) || hooks (SWT.KeyUp);
+}
+
+/**
+ * Returns <code>true</code> if the receiver has deferred
+ * the performing of layout, and <code>false</code> otherwise.
+ *
+ * @return the receiver's deferred layout state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setLayoutDeferred(boolean)
+ * @see #isLayoutDeferred()
+ *
+ * @since 3.1
+ */
+public boolean getLayoutDeferred () {
+	checkWidget ();
+	return layoutCount > 0 ;
+}
+
+void HandlePreviewKeyDown (int sender, int e) {
+	super.HandlePreviewKeyDown (sender, e);
+	if (!checkEvent (e)) return;
+	/*
+	* In WPF arrows key move the focus around, this
+	* behavior is not expected in SWT.  
+	*/
+	if ((state & CANVAS) != 0) {
+		int key = OS.KeyEventArgs_Key (e);
+		switch (key) {
+			case OS.Key_Up:
+			case OS.Key_Left: 
+			case OS.Key_Down:
+			case OS.Key_Right: {
+				OS.RoutedEventArgs_Handled (e, true);
+				break;
+			}
+		}
+	}
+}
+
+void HandlePreviewMouseDown(int sender, int e) {
+	if (!checkEvent (e)) return;
+	super.HandlePreviewMouseDown (sender, e);
+	
+	/* Set focus for a canvas with no children */
+	if ((state & CANVAS) != 0) {
+		if ((style & SWT.NO_FOCUS) == 0 && hooksKeys ()) {
+			int children = OS.Panel_Children (handle);
+			int count = OS.UIElementCollection_Count (children);
+			OS.GCHandle_Free (children);
+			int caretHandle = getCaretHandle ();
+			if (caretHandle != 0) count--;
+			if (count == 0) {
+				OS.UIElement_Focus (handle);
+			}
+		}
+	}
+}
+
+void HandlePreviewTextInput(int sender, int e) {
+	super.HandlePreviewTextInput (sender, e);
+	if (!checkEvent (e)) return;
+	if ((state & CANVAS) != 0) {
+		OS.RoutedEventArgs_Handled (e, true);
+	}
+}
+
+/**
+ * Returns <code>true</code> if the receiver or any ancestor 
+ * up to and including the receiver's nearest ancestor shell
+ * has deferred the performing of layouts.  Otherwise, <code>false</code>
+ * is returned.
+ *
+ * @return the receiver's deferred layout state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setLayoutDeferred(boolean)
+ * @see #getLayoutDeferred()
+ * 
+ * @since 3.1
+ */
+public boolean isLayoutDeferred () {
+	checkWidget ();
+	return findDeferredControl () != null;
+}
+
+boolean isTabGroup() {
+	if ((state & CANVAS) != 0) return true;
+	return super.isTabGroup();
+}
+
+/**
+ * If the receiver has a layout, asks the layout to <em>lay out</em>
+ * (that is, set the size and location of) the receiver's children. 
+ * If the receiver does not have a layout, do nothing.
+ * <p>
+ * This is equivalent to calling <code>layout(true)</code>.
+ * </p>
+ * <p>
+ * Note: Layout is different from painting. If a child is
+ * moved or resized such that an area in the parent is
+ * exposed, then the parent will paint. If no child is
+ * affected, the parent will not paint.
+ * </p>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void layout () {
+	checkWidget ();
+	layout (true);
+}
+
+/**
+ * If the receiver has a layout, asks the layout to <em>lay out</em>
+ * (that is, set the size and location of) the receiver's children. 
+ * If the argument is <code>true</code> the layout must not rely
+ * on any information it has cached about the immediate children. If it
+ * is <code>false</code> the layout may (potentially) optimize the
+ * work it is doing by assuming that none of the receiver's 
+ * children has changed state since the last layout.
+ * If the receiver does not have a layout, do nothing.
+ * <p>
+ * If a child is resized as a result of a call to layout, the 
+ * resize event will invoke the layout of the child.  The layout
+ * will cascade down through all child widgets in the receiver's widget 
+ * tree until a child is encountered that does not resize.  Note that 
+ * a layout due to a resize will not flush any cached information 
+ * (same as <code>layout(false)</code>).
+ * </p>
+ * <p>
+ * Note: Layout is different from painting. If a child is
+ * moved or resized such that an area in the parent is
+ * exposed, then the parent will paint. If no child is
+ * affected, the parent will not paint.
+ * </p>
+ *
+ * @param changed <code>true</code> if the layout must flush its caches, and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void layout (boolean changed) {
+	checkWidget ();
+	if (layout == null) return;
+	layout (changed, false);
+}
+
+/**
+ * If the receiver has a layout, asks the layout to <em>lay out</em>
+ * (that is, set the size and location of) the receiver's children. 
+ * If the changed argument is <code>true</code> the layout must not rely
+ * on any information it has cached about its children. If it
+ * is <code>false</code> the layout may (potentially) optimize the
+ * work it is doing by assuming that none of the receiver's 
+ * children has changed state since the last layout.
+ * If the all argument is <code>true</code> the layout will cascade down
+ * through all child widgets in the receiver's widget tree, regardless of
+ * whether the child has changed size.  The changed argument is applied to 
+ * all layouts.  If the all argument is <code>false</code>, the layout will
+ * <em>not</em> cascade down through all child widgets in the receiver's widget 
+ * tree.  However, if a child is resized as a result of a call to layout, the 
+ * resize event will invoke the layout of the child.  Note that 
+ * a layout due to a resize will not flush any cached information 
+ * (same as <code>layout(false)</code>).
+ * </p>
+ * <p>
+ * Note: Layout is different from painting. If a child is
+ * moved or resized such that an area in the parent is
+ * exposed, then the parent will paint. If no child is
+ * affected, the parent will not paint.
+ * </p>
+ *
+ * @param changed <code>true</code> if the layout must flush its caches, and <code>false</code> otherwise
+ * @param all <code>true</code> if all children in the receiver's widget tree should be laid out, and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.1
+ */
+public void layout (boolean changed, boolean all) {
+	checkWidget ();
+	if (layout == null && !all) return;
+	markLayout (changed, all);
+	updateLayout (true, all);
+}
+
+/**
+ * Forces a lay out (that is, sets the size and location) of all widgets that 
+ * are in the parent hierarchy of the changed control up to and including the 
+ * receiver.  The layouts in the hierarchy must not rely on any information 
+ * cached about the changed control or any of its ancestors.  The layout may 
+ * (potentially) optimize the work it is doing by assuming that none of the 
+ * peers of the changed control have changed state since the last layout.
+ * If an ancestor does not have a layout, skip it.
+ * <p>
+ * Note: Layout is different from painting. If a child is
+ * moved or resized such that an area in the parent is
+ * exposed, then the parent will paint. If no child is
+ * affected, the parent will not paint.
+ * </p>
+ * 
+ * @param changed a control that has had a state change which requires a recalculation of its size
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the changed array is null any of its controls are null or have been disposed</li> 
+ *    <li>ERROR_INVALID_PARENT - if any control in changed is not in the widget tree of the receiver</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.1
+ */
+public void layout (Control [] changed) {
+	checkWidget ();
+	if (changed == null) error (SWT.ERROR_INVALID_ARGUMENT);
+	for (int i=0; i<changed.length; i++) {
+		Control control = changed [i];
+		if (control == null) error (SWT.ERROR_INVALID_ARGUMENT);
+		if (control.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+		boolean ancestor = false;
+		Composite composite = control.parent;
+		while (composite != null) {
+			ancestor = composite == this;
+			if (ancestor) break;
+			composite = composite.parent;
+		}
+		if (!ancestor) error (SWT.ERROR_INVALID_PARENT);
+	}
+	int updateCount = 0;
+	Composite [] update = new Composite [16];
+	for (int i=0; i<changed.length; i++) {
+		Control child = changed [i];
+		Composite composite = child.parent;
+		while (child != this) {
+			if (composite.layout != null) {
+				composite.state |= LAYOUT_NEEDED;
+				if (!composite.layout.flushCache (child)) {
+					composite.state |= LAYOUT_CHANGED;
+				}
+			}
+			if (updateCount == update.length) {
+				Composite [] newUpdate = new Composite [update.length + 16];
+				System.arraycopy (update, 0, newUpdate, 0, update.length);
+				update = newUpdate;
+			}
+			child = update [updateCount++] = composite;
+			composite = child.parent;
+		}
+	}
+	for (int i=updateCount-1; i>=0; i--) {
+		update [i].updateLayout (true, false);
+	}
+}
+
+void OnRender(int drawingContext) {
+	if (isDisposed ()) return;
+	OS.SWTCanvas_Visual (handle, 0);
+	if (display.ignoreRender) {
+		display.addInvalidate (this);
+		return;
+	}
+	if (!hooks (SWT.Paint)) return;
+	int width = (int)OS.FrameworkElement_ActualWidth (handle);
+	int height = (int)OS.FrameworkElement_ActualHeight (handle);
+	if (width != 0 && height != 0) {
+		GCData data = new GCData ();
+		data.device = display;
+		data.drawingContext = drawingContext;		 
+		GC gc = GC.wpf_new (this, data);
+		Event event = new Event ();
+		event.gc = gc;
+		event.width = width;
+		event.height = height;
+		sendEvent (SWT.Paint, event);
+		event.gc = null;
+		gc.dispose ();
+	}
+}
+
+void markLayout (boolean changed, boolean all) {
+	if (layout != null) {
+		state |= LAYOUT_NEEDED;
+		if (changed) state |= LAYOUT_CHANGED;
+	}
+	if (all) {
+		Control [] children = _getChildren ();
+		for (int i=0; i<children.length; i++) {
+			children [i].markLayout (changed, all);
+		}
+	}
+}
+
+Point minimumSize (int wHint, int hHint, boolean changed) {
+	Control [] children = _getChildren ();
+	int width = 0, height = 0;
+	for (int i=0; i<children.length; i++) {
+		Rectangle rect = children [i].getBounds ();
+		width = Math.max (width, rect.x + rect.width);
+		height = Math.max (height, rect.y + rect.height);
+	}
+	return new Point (width, height);
+}
+
+int parentingHandle () {
+	return handle;
+}
+
+void releaseChildren (boolean destroy) {
+	Control [] children = _getChildren ();
+	for (int i=0; i<children.length; i++) {
+		Control child = children [i];
+		if (child != null && !child.isDisposed ()) {
+			child.release (false);
+		}
+	}
+	super.releaseChildren (destroy);
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+//	if ((state & CANVAS) != 0 && (style & SWT.EMBEDDED) != 0) {
+//		int hwndChild = OS.GetWindow (handle, OS.GW_CHILD);
+//		if (hwndChild != 0) {
+//			int threadId = OS.GetWindowThreadProcessId (hwndChild, null);
+//			if (threadId != OS.GetCurrentThreadId ()) {
+//				OS.ShowWindow (hwndChild, OS.SW_HIDE);
+//				OS.SetParent (hwndChild, 0);
+//			}
+//		}
+//	}
+	layout = null;
+	tabList = null;
+}
+
+void removeChild (Control control) {
+	int topHandle = control.topHandle ();
+	int parentHandle = parentingHandle ();
+	int children = OS.Panel_Children (parentHandle);
+	OS.UIElementCollection_Remove (children, topHandle);
+	OS.GCHandle_Free (children);
+}
+
+void removeControl (Control control) {
+	fixTabList (control);
+}
+
+void resized () {
+	super.resized();
+	if (isDisposed ()) return;
+	if (layout != null) {
+		markLayout (false, false);
+		updateLayout (false, false);
+	}
+}
+
+/**
+ * WARNING: THIS API IS UNDER CONSTRUCTION AND SHOULD NOT BE USED
+ */
+public void setAlpha(int alpha) {
+	checkWidget ();
+	int backgroundHandle = backgroundHandle ();
+	int property = backgroundProperty ();
+	int brush = OS.DependencyObject_GetValue (backgroundHandle, property);
+	if (brush != 0) {
+		int newBrush = OS.Freezable_Clone(brush);
+		OS.Brush_Opacity (newBrush, (alpha & 0xFF) / (double)0xFF);
+		OS.DependencyObject_SetValue (backgroundHandle, property, newBrush);
+		OS.GCHandle_Free (brush);
+		OS.GCHandle_Free (newBrush);
+	}
+	OS.GCHandle_Free (property);
+//	OS.UIElement_Opacity (handle, (alpha & 0xFF) / (double)0xFF);
+}
+
+void setBackgroundBrush (int brush) {
+	if (brush != 0) {
+		OS.Panel_Background (handle, brush);
+	} else {
+		int property = OS.Panel_BackgroundProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+	}
+}
+
+/**
+ * Sets the background drawing mode to the argument which should
+ * be one of the following constants defined in class <code>SWT</code>:
+ * <code>INHERIT_NONE</code>, <code>INHERIT_DEFAULT</code>,
+ * <code>INHERIT_FORCE</code>.
+ *
+ * @param mode the new background mode
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SWT
+ * 
+ * @since 3.2
+ */
+public void setBackgroundMode (int mode) {
+	checkWidget ();
+	backgroundMode = mode;
+	Control [] children = _getChildren ();
+	for (int i = 0; i < children.length; i++) {
+		children [i].updateBackgroundMode ();		
+	}
+}
+
+int setBounds (int x, int y, int width, int height, int flags) {
+	int result = super.setBounds (x, y, width, height, flags);
+	if ((result & RESIZED) != 0 && layout != null) {
+		markLayout (false, false);
+		updateLayout (false, false);
+	}
+	return result;
+}
+
+void setClipping () {
+	OS.UIElement_ClipToBounds (topHandle (), true);
+}
+
+public boolean setFocus () {
+	checkWidget();
+	Control [] children = _getChildren ();
+	for (int i=0; i<children.length; i++) {
+		Control child = children [i];
+		if (child.getVisible () && child.setFocus ()) return true;
+	}
+	return super.setFocus ();
+}
+
+void setFont (int font, double size) {
+}
+
+void setForegroundBrush (int brush) {
+	OS.UIElement_InvalidateVisual (handle);
+}
+
+/**
+ * Sets the layout which is associated with the receiver to be
+ * the argument which may be null.
+ *
+ * @param layout the receiver's new layout or null
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setLayout (Layout layout) {
+	checkWidget ();
+	this.layout = layout;
+}
+
+/**
+ * If the argument is <code>true</code>, causes subsequent layout
+ * operations in the receiver or any of its children to be ignored.
+ * No layout of any kind can occur in the receiver or any of its
+ * children until the flag is set to false.
+ * Layout operations that occurred while the flag was
+ * <code>true</code> are remembered and when the flag is set to 
+ * <code>false</code>, the layout operations are performed in an
+ * optimized manner.  Nested calls to this method are stacked.
+ *
+ * @param defer the new defer state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #layout(boolean)
+ * @see #layout(Control[])
+ *
+ * @since 3.1
+ */
+public void setLayoutDeferred (boolean defer) {
+	if (!defer) {
+		if (--layoutCount == 0) {
+			if ((state & LAYOUT_CHILD) != 0 || (state & LAYOUT_NEEDED) != 0) {
+				updateLayout (true, true);
+			}
+		}
+	} else {
+		layoutCount++;
+	}
+}
+
+/**
+ * Sets the tabbing order for the specified controls to
+ * match the order that they occur in the argument list.
+ *
+ * @param tabList the ordered list of controls representing the tab order or null
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if a widget in the tabList is null or has been disposed</li> 
+ *    <li>ERROR_INVALID_PARENT - if widget in the tabList is not in the same widget tree</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setTabList (Control [] tabList) {
+	checkWidget ();
+	if (tabList != null) {
+		for (int i=0; i<tabList.length; i++) {
+			Control control = tabList [i];
+			if (control == null) error (SWT.ERROR_INVALID_ARGUMENT);
+			if (control.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+			if (control.parent != this) error (SWT.ERROR_INVALID_PARENT);
+		}
+		Control [] newList = new Control [tabList.length];
+		System.arraycopy (tabList, 0, newList, 0, tabList.length);
+		tabList = newList;
+	} 
+	this.tabList = tabList;
+}
+
+boolean setTabGroupFocus () {
+	if (isTabItem ()) return setTabItemFocus ();
+	boolean takeFocus = (style & SWT.NO_FOCUS) == 0;
+	if ((state & CANVAS) != 0) {
+		takeFocus = hooksKeys ();
+		if ((style & SWT.EMBEDDED) != 0) takeFocus = true;
+	}
+	if (takeFocus && setTabItemFocus ()) return true;
+	Control [] children = _getChildren ();
+	for (int i=0; i<children.length; i++) {
+		Control child = children [i];
+		if (child.isTabItem () && child.setTabItemFocus ()) return true;
+	}
+	return false;
+}
+
+boolean translateMnemonic (Event event, Control control) {
+	if (super.translateMnemonic (event, control)) return true;
+	if (control != null) {
+		Control [] children = _getChildren ();
+		for (int i=0; i<children.length; i++) {
+			Control child = children [i];
+			if (child.translateMnemonic (event, control)) return true;
+		}
+	}
+	return false;
+}
+
+int traversalCode(int key, int event) {
+	if ((state & CANVAS) != 0) {
+		if ((style & SWT.NO_FOCUS) != 0) return 0;
+		if (hooksKeys ()) return 0;
+	}
+	return super.traversalCode (key, event);
+}
+
+boolean translateTraversal (int msg) {
+	if ((state & CANVAS) != 0 && (style & SWT.EMBEDDED) != 0) return false;
+	return super.translateTraversal (msg);
+}
+
+void updateBackgroundColor () {
+	super.updateBackgroundColor ();
+	Control [] children = _getChildren ();
+	for (int i=0; i<children.length; i++) {
+		if ((children [i].state & PARENT_BACKGROUND) != 0) {
+			children [i].updateBackgroundColor ();
+		}
+	}
+}
+
+void updateBackgroundImage () {
+	super.updateBackgroundImage ();
+	Control [] children = _getChildren ();
+	for (int i=0; i<children.length; i++) {
+		if ((children [i].state & PARENT_BACKGROUND) != 0) {
+			children [i].updateBackgroundImage ();
+		}
+	}
+}
+
+void updateBackgroundMode () {
+	super.updateBackgroundMode ();
+	Control [] children = _getChildren ();
+	for (int i = 0; i < children.length; i++) {
+		children [i].updateBackgroundMode ();		
+	}
+}
+
+void updateFont (Font oldFont, Font newFont) {
+	super.updateFont (oldFont, newFont);
+	Control [] children = _getChildren ();
+	for (int i=0; i<children.length; i++) {
+		Control control = children [i];
+		if (!control.isDisposed ()) {
+			control.updateFont (oldFont, newFont);
+		}
+	}
+}
+
+void updateLayout (boolean resize, boolean all) {
+	Composite parent = findDeferredControl ();
+	if (parent != null) {
+		parent.state |= LAYOUT_CHILD;
+		return;
+	}
+	if ((state & LAYOUT_NEEDED) != 0) {
+		boolean changed = (state & LAYOUT_CHANGED) != 0;
+		state &= ~(LAYOUT_NEEDED | LAYOUT_CHANGED);
+		layout.layout (this, changed);
+	}
+	if (all) {
+		state &= ~LAYOUT_CHILD;
+		Control [] children = _getChildren ();
+		for (int i=0; i<children.length; i++) {
+			children [i].updateLayout (resize, all);
+		}
+	}
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Control.java
new file mode 100644
index 0000000..1cbda10
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Control.java
@@ -0,0 +1,3621 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.accessibility.*;
+
+//TEMPORARY CODE
+import org.eclipse.swt.effects.*;
+
+/**
+ * Control is the abstract superclass of all windowed user interface classes.
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b>
+ * <dd>BORDER</dd>
+ * <dd>LEFT_TO_RIGHT, RIGHT_TO_LEFT</dd>
+ * <dt><b>Events:</b>
+ * <dd>DragDetect, FocusIn, FocusOut, Help, KeyDown, KeyUp, MenuDetect, MouseDoubleClick, MouseDown, MouseEnter,
+ *     MouseExit, MouseHover, MouseUp, MouseMove, Move, Paint, Resize, Traverse</dd>
+ * </dl>
+ * </p><p>
+ * Only one of LEFT_TO_RIGHT or RIGHT_TO_LEFT may be specified.
+ * </p><p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#control">Control snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public abstract class Control extends Widget implements Drawable {
+	Cursor cursor;
+	Menu menu;
+	String toolTipText;
+	Object layoutData;
+	Accessible accessible;
+	Image backgroundImage;
+	Region region;
+//	int drawCount;
+	int foreground, background;
+	int x, y, width, height;
+	Font font;
+	Composite parent;
+
+/**
+ * Prevents uninitialized instances from being created outside the package.
+ */
+Control () {
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#BORDER
+ * @see SWT#LEFT_TO_RIGHT
+ * @see SWT#RIGHT_TO_LEFT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Control (Composite parent, int style) {
+	super (parent, style);
+	this.parent = parent;
+	createWidget ();
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is moved or resized, by sending
+ * it one of the messages defined in the <code>ControlListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ControlListener
+ * @see #removeControlListener
+ */
+public void addControlListener(ControlListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Resize,typedListener);
+	addListener (SWT.Move,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when a drag gesture occurs, by sending it
+ * one of the messages defined in the <code>DragDetectListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see DragDetectListener
+ * @see #removeDragDetectListener
+ * 
+ * @since 3.3
+ */
+public void addDragDetectListener (DragDetectListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.DragDetect,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control gains or loses focus, by sending
+ * it one of the messages defined in the <code>FocusListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see FocusListener
+ * @see #removeFocusListener
+ */
+public void addFocusListener (FocusListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.FocusIn,typedListener);
+	addListener (SWT.FocusOut,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when help events are generated for the control,
+ * by sending it one of the messages defined in the
+ * <code>HelpListener</code> interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see HelpListener
+ * @see #removeHelpListener
+ */
+public void addHelpListener (HelpListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Help, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when keys are pressed and released on the system keyboard, by sending
+ * it one of the messages defined in the <code>KeyListener</code>
+ * interface.
+ * <p>
+ * When a key listener is added to a control, the control
+ * will take part in widget traversal.  By default, all
+ * traversal keys (such as the tab key and so on) are
+ * delivered to the control.  In order for a control to take
+ * part in traversal, it should listen for traversal events.
+ * Otherwise, the user can traverse into a control but not
+ * out.  Note that native controls such as table and tree
+ * implement key traversal in the operating system.  It is
+ * not necessary to add traversal listeners for these controls,
+ * unless you want to override the default traversal.
+ * </p>
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see KeyListener
+ * @see #removeKeyListener
+ */
+public void addKeyListener (KeyListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.KeyUp,typedListener);
+	addListener (SWT.KeyDown,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the platform-specific context menu trigger
+ * has occurred, by sending it one of the messages defined in
+ * the <code>MenuDetectListener</code> interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MenuDetectListener
+ * @see #removeMenuDetectListener
+ *
+ * @since 3.3
+ */
+public void addMenuDetectListener (MenuDetectListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.MenuDetect, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when mouse buttons are pressed and released, by sending
+ * it one of the messages defined in the <code>MouseListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MouseListener
+ * @see #removeMouseListener
+ */
+public void addMouseListener (MouseListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.MouseDown,typedListener);
+	addListener (SWT.MouseUp,typedListener);
+	addListener (SWT.MouseDoubleClick,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the mouse passes or hovers over controls, by sending
+ * it one of the messages defined in the <code>MouseTrackListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MouseTrackListener
+ * @see #removeMouseTrackListener
+ */
+public void addMouseTrackListener (MouseTrackListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.MouseEnter,typedListener);
+	addListener (SWT.MouseExit,typedListener);
+	addListener (SWT.MouseHover,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the mouse moves, by sending it one of the
+ * messages defined in the <code>MouseMoveListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MouseMoveListener
+ * @see #removeMouseMoveListener
+ */
+public void addMouseMoveListener (MouseMoveListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.MouseMove,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the mouse wheel is scrolled, by sending
+ * it one of the messages defined in the
+ * <code>MouseWheelListener</code> interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MouseWheelListener
+ * @see #removeMouseWheelListener
+ *
+ * @since 3.3
+ */
+public void addMouseWheelListener (MouseWheelListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.MouseWheel, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the receiver needs to be painted, by sending it
+ * one of the messages defined in the <code>PaintListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see PaintListener
+ * @see #removePaintListener
+ */
+public void addPaintListener (PaintListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Paint,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when traversal events occur, by sending it
+ * one of the messages defined in the <code>TraverseListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see TraverseListener
+ * @see #removeTraverseListener
+ */
+public void addTraverseListener (TraverseListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Traverse,typedListener);
+}
+
+void addWidget () {
+	parent.addChild (this);
+}
+
+int borderHandle () {
+	return handle;
+}
+
+void checkBackground () {
+	Shell shell = getShell ();
+	if (this == shell) return;
+	state &= ~PARENT_BACKGROUND;
+	Composite composite = parent;
+	do {
+		int mode = composite.backgroundMode;
+		if (mode != 0) {
+			if (mode == SWT.INHERIT_DEFAULT) {
+				Control control = this;
+				do {
+					if ((control.state & THEME_BACKGROUND) == 0) {
+						return;
+					}
+					control = control.parent;
+				} while (control != composite);
+			}
+			state |= PARENT_BACKGROUND;
+			return;
+		}
+		if (composite == shell) break;
+		composite = composite.parent;
+	} while (true);	
+}
+
+void checkBorder () {
+	if (getBorderWidth () == 0) style &= ~SWT.BORDER;
+}
+
+void checkBuffered () {
+	style |= SWT.DOUBLE_BUFFERED;
+}
+
+/**
+ * Returns the preferred size of the receiver.
+ * <p>
+ * The <em>preferred size</em> of a control is the size that it would
+ * best be displayed at. The width hint and height hint arguments
+ * allow the caller to ask a control questions such as "Given a particular
+ * width, how high does the control need to be to show all of the contents?"
+ * To indicate that the caller does not wish to constrain a particular 
+ * dimension, the constant <code>SWT.DEFAULT</code> is passed for the hint. 
+ * </p>
+ *
+ * @param wHint the width hint (can be <code>SWT.DEFAULT</code>)
+ * @param hHint the height hint (can be <code>SWT.DEFAULT</code>)
+ * @return the preferred size of the control
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Layout
+ * @see #getBorderWidth
+ * @see #getBounds
+ * @see #getSize
+ * @see #pack(boolean)
+ * @see "computeTrim, getClientArea for controls that implement them"
+ */
+public Point computeSize (int wHint, int hHint) {
+	return computeSize (wHint, hHint, true);
+}
+
+/**
+ * Returns the preferred size of the receiver.
+ * <p>
+ * The <em>preferred size</em> of a control is the size that it would
+ * best be displayed at. The width hint and height hint arguments
+ * allow the caller to ask a control questions such as "Given a particular
+ * width, how high does the control need to be to show all of the contents?"
+ * To indicate that the caller does not wish to constrain a particular 
+ * dimension, the constant <code>SWT.DEFAULT</code> is passed for the hint. 
+ * </p><p>
+ * If the changed flag is <code>true</code>, it indicates that the receiver's
+ * <em>contents</em> have changed, therefore any caches that a layout manager
+ * containing the control may have been keeping need to be flushed. When the
+ * control is resized, the changed flag will be <code>false</code>, so layout
+ * manager caches can be retained. 
+ * </p>
+ *
+ * @param wHint the width hint (can be <code>SWT.DEFAULT</code>)
+ * @param hHint the height hint (can be <code>SWT.DEFAULT</code>)
+ * @param changed <code>true</code> if the control's contents have changed, and <code>false</code> otherwise
+ * @return the preferred size of the control.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Layout
+ * @see #getBorderWidth
+ * @see #getBounds
+ * @see #getSize
+ * @see #pack(boolean)
+ * @see "computeTrim, getClientArea for controls that implement them"
+ */
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget ();
+	return computeSize (handle, wHint, hHint, changed);
+}
+
+Point computeSize (int handle, int wHint, int hHint, boolean changed) {
+	int width = wHint, height = hHint;
+	if (wHint == SWT.DEFAULT) width = 0x7FFFFFFF;
+	if (hHint == SWT.DEFAULT) height = 0x7FFFFFFF;
+	width = Math.max (0, width);
+	height = Math.max (0, height);
+	int availSize = OS.gcnew_Size ((double)width, (double)height);
+	if (availSize == 0) error (SWT.ERROR_NO_HANDLES);
+	double requestWidth = OS.FrameworkElement_Width (handle);
+	if (requestWidth >= 0) {
+		int widthDP = OS.FrameworkElement_WidthProperty ();
+		OS.DependencyObject_ClearValue (handle, widthDP);
+		OS.GCHandle_Free (widthDP);
+	}
+	double requestHeight = OS.FrameworkElement_Height (handle);
+	if (requestHeight >= 0) {
+		int heightDP = OS.FrameworkElement_HeightProperty ();
+		OS.DependencyObject_ClearValue (handle, heightDP);
+		OS.GCHandle_Free (heightDP);
+	}
+	OS.UIElement_Measure (handle, availSize);
+	OS.GCHandle_Free (availSize);
+	int size = OS.UIElement_DesiredSize (handle);
+	width = (int) OS.Size_Width (size);
+	height = (int) OS.Size_Height (size);
+	OS.GCHandle_Free (size);
+	if (requestWidth >= 0) OS.FrameworkElement_Width (handle, requestWidth);
+	if (requestHeight >= 0) OS.FrameworkElement_Height (handle, requestHeight);
+	if (wHint != SWT.DEFAULT) width = wHint;
+	if (hHint != SWT.DEFAULT) height = hHint;
+	return new Point (width, height);
+}
+
+Control computeTabGroup () {
+	if (isTabGroup ()) return this;
+	return parent.computeTabGroup ();
+}
+
+Control computeTabRoot () {
+	Control [] tabList = parent._getTabList ();
+	if (tabList != null) {
+		int index = 0;
+		while (index < tabList.length) {
+			if (tabList [index] == this) break;
+			index++;
+		}
+		if (index == tabList.length) {
+			if (isTabGroup ()) return this;
+		}
+	}
+	return parent.computeTabRoot ();
+}
+
+Control [] computeTabList () {
+	if (isTabGroup ()) {
+		if (getVisible () && getEnabled ()) {
+			return new Control [] {this};
+		}
+	}
+	return new Control [0];
+}
+
+void createWidget () {
+	state |= DRAG_DETECT;
+	checkOrientation (parent);
+	super.createWidget ();
+	checkBackground ();
+	checkBuffered ();
+	setClipping ();
+	if (defaultBackground () != 0 || (state & PARENT_BACKGROUND) != 0) {
+		setBackground ();
+	}
+}
+
+/**
+ * WARNING: THIS API IS UNDER CONSTRUCTION AND SHOULD NOT BE USED
+ */
+public void setAlpha(int alpha) {
+	checkWidget ();
+	OS.UIElement_Opacity (handle, (alpha & 0xFF) / (double)0xFF);
+}
+
+void setClipping () {
+	//accept default clipping
+}
+
+int defaultBackground () {
+	return 0;
+}
+
+Font defaultFont () {
+	return display.getSystemFont ();
+}
+
+int defaultForeground () {
+	return display.getSystemColor (SWT.COLOR_BLACK).handle;
+}
+
+void deregister () {
+	display.removeWidget (handle);
+}
+
+void destroyWidget () {
+	parent.removeChild (this);
+	releaseHandle ();
+}
+
+/**
+ * Detects a drag and drop gesture.  This method is used
+ * to detect a drag gesture when called from within a mouse
+ * down listener.
+ * 
+ * <p>By default, a drag is detected when the gesture
+ * occurs anywhere within the client area of a control.
+ * Some controls, such as tables and trees, override this
+ * behavior.  In addition to the operating system specific
+ * drag gesture, they require the mouse to be inside an
+ * item.  Custom widget writers can use <code>setDragDetect</code>
+ * to disable the default detection, listen for mouse down,
+ * and then call <code>dragDetect()</code> from within the
+ * listener to conditionally detect a drag.
+ * </p>
+ *
+ * @param event the mouse down event
+ * 
+ * @return <code>true</code> if the gesture occurred, and <code>false</code> otherwise.
+ *
+ * @exception IllegalArgumentException <ul>
+ *   <li>ERROR_NULL_ARGUMENT when the event is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *  
+ * @see DragDetectListener
+ * @see #addDragDetectListener
+ * 
+ * @see #getDragDetect
+ * @see #setDragDetect
+ * 
+ * @since 3.3
+ */
+public boolean dragDetect (Event event) {
+	checkWidget ();
+	if (event == null) error (SWT.ERROR_NULL_ARGUMENT);
+	return dragDetect (event.button, event.count, event.stateMask, event.x, event.y);
+}
+
+/**
+ * Detects a drag and drop gesture.  This method is used
+ * to detect a drag gesture when called from within a mouse
+ * down listener.
+ * 
+ * <p>By default, a drag is detected when the gesture
+ * occurs anywhere within the client area of a control.
+ * Some controls, such as tables and trees, override this
+ * behavior.  In addition to the operating system specific
+ * drag gesture, they require the mouse to be inside an
+ * item.  Custom widget writers can use <code>setDragDetect</code>
+ * to disable the default detection, listen for mouse down,
+ * and then call <code>dragDetect()</code> from within the
+ * listener to conditionally detect a drag.
+ * </p>
+ *
+ * @param event the mouse down event
+ * 
+ * @return <code>true</code> if the gesture occurred, and <code>false</code> otherwise.
+ *
+ * @exception IllegalArgumentException <ul>
+ *   <li>ERROR_NULL_ARGUMENT when the event is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see DragDetectListener
+ * @see #addDragDetectListener
+ * 
+ * @see #getDragDetect
+ * @see #setDragDetect
+ * 
+ * @since 3.3
+ */
+public boolean dragDetect (MouseEvent event) {
+	checkWidget ();
+	if (event == null) error (SWT.ERROR_NULL_ARGUMENT);
+	return dragDetect (event.button, event.count, event.stateMask, event.x, event.y);
+}
+
+boolean dragDetect (int button, int count, int stateMask, int x, int y) {
+	if (button != 1 || count != 1) return false;
+	boolean dragging = dragDetect (x, y, false);
+	if (dragging) return sendDragEvent (button, stateMask, x, y);
+	return false;
+}
+
+void dragHandler () {
+	int frame = display.dragDetectFrame = OS.gcnew_DispatcherFrame ();
+	OS.Dispatcher_PushFrame (frame);
+	OS.GCHandle_Free (frame);
+	OS.GCHandle_Free (display.dragRect);
+	if (display.dragMouseDown != 0) OS.GCHandle_Free (display.dragMouseDown);
+	display.dragMouseDown = display.dragDetectFrame = display.dragRect = 0;
+}
+
+boolean dragDetect (double x, double y, boolean post) {
+	display.dragging = false;
+	double minH = OS.SystemParameters_MinimumHorizontalDragDistance ();
+	double minV = OS.SystemParameters_MinimumVerticalDragDistance ();
+	display.dragRect = OS.gcnew_Rect(x - minH, y - minV, minH * 2, minV * 2);
+	if (post) {
+		int handler = OS.gcnew_NoArgsDelegate (jniRef, "dragHandler");
+		int operation = OS.Dispatcher_BeginInvoke (display.dispatcher, OS.DispatcherPriority_Send, handler);
+		OS.GCHandle_Free (operation);
+		OS.GCHandle_Free (handler);
+	} else {
+		dragHandler ();
+	}
+	return display.dragging;
+}
+
+void enableWidget (boolean enabled) {
+	OS.UIElement_IsEnabled (handle, enabled);
+}
+
+boolean drawGripper (int x, int y, int width, int height, boolean vertical) {
+	return false;
+}
+
+Control findBackgroundControl () {
+	if (background != 0 || backgroundImage != null) return this;
+	return (state & PARENT_BACKGROUND) != 0 ? parent.findBackgroundControl () : null;
+}
+
+Control findThemeControl () {
+	return background == 0 && backgroundImage == null ? parent.findThemeControl () : null;
+}
+
+Control findImageControl () {
+	Control control = findBackgroundControl ();
+	return control != null && control.backgroundImage != null ? control : null;
+}
+
+Menu [] findMenus (Control control) {
+	if (menu != null && this != control) return new Menu [] {menu};
+	return new Menu [0];
+}
+
+char findMnemonic (String string) {
+	int index = 0;
+	int length = string.length ();
+	do {
+		while (index < length && string.charAt (index) != '&') index++;
+		if (++index >= length) return '\0';
+		if (string.charAt (index) != '&') return string.charAt (index);
+		index++;
+	} while (index < length);
+ 	return '\0';
+}
+
+void fixFocus (Control focusControl) {
+	Shell shell = getShell ();
+	Control control = this;
+	while (control != shell && (control = control.parent) != null) {
+		if (control.setFocus ()) return;
+	}
+	shell.setSavedFocus (focusControl);
+	OS.UIElement_Focus (shell.shellHandle);
+}
+
+/**
+ * Forces the receiver to have the <em>keyboard focus</em>, causing
+ * all keyboard events to be delivered to it.
+ *
+ * @return <code>true</code> if the control got focus, and <code>false</code> if it was unable to.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #setFocus
+ */
+public boolean forceFocus () {
+	checkWidget ();
+//	if (display.focusEvent == SWT.FocusOut) return false;
+	Decorations shell = menuShell ();
+	shell.setSavedFocus (this);
+	if (!isEnabled () || !isVisible () || !isActive ()) return false;
+	if (isFocusControl ()) return true;
+	shell.setSavedFocus (null);
+	OS.UIElement_Focus (handle);
+	if (isDisposed ()) return false;
+	shell.setSavedFocus (this);
+	return isFocusControl ();
+}
+
+/**
+ * Returns the accessible object for the receiver.
+ * If this is the first time this object is requested,
+ * then the object is created and returned.
+ *
+ * @return the accessible object
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Accessible#addAccessibleListener
+ * @see Accessible#addAccessibleControlListener
+ * 
+ * @since 2.0
+ */
+public Accessible getAccessible () {
+	checkWidget ();
+	if (accessible == null) accessible = new_Accessible (this);
+	return accessible;
+}
+
+/**
+ * WARNING: THIS API IS UNDER CONSTRUCTION AND SHOULD NOT BE USED
+ */
+public int getAlpha () {
+	checkWidget ();
+	return (int) (0XFF * OS.UIElement_Opacity (handle));
+}
+
+/**
+ * Returns the receiver's background color.
+ * <p>
+ * Note: This operation is a hint and may be overridden by the platform.
+ * For example, on some versions of Windows the background of a TabFolder,
+ * is a gradient rather than a solid color.
+ * </p>
+ * @return the background color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Color getBackground () {
+	checkWidget ();
+	Control control = findBackgroundControl ();
+	if (control == null) control = this;
+	return Color.wpf_new (display, control.getBackgroundColor ());
+}
+
+/**
+ * Returns the receiver's background image.
+ *
+ * @return the background image
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public Image getBackgroundImage () {
+	checkWidget ();
+	Control control = findBackgroundControl ();
+	if (control == null) control = this;
+	return control.backgroundImage;
+}
+
+int getBackgroundColor () {
+	int color = background;
+	if (color == 0) color = defaultBackground ();
+	if (color == 0) color = OS.SystemColors_ControlColor;//TODO
+	return color;
+}
+
+/**
+ * Returns the receiver's border width.
+ *
+ * @return the border width
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getBorderWidth () {
+	checkWidget ();
+	//FIXME
+	return 2;
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location
+ * relative to its parent (or its display if its parent is null),
+ * unless the receiver is a shell. In this case, the location is
+ * relative to the display.
+ *
+ * @return the receiver's bounding rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Rectangle getBounds () {
+	checkWidget ();
+	int topHandle = topHandle ();
+	Point location = parent.getLocation (this);
+	int width = (int) OS.FrameworkElement_Width (topHandle);
+	int height = (int) OS.FrameworkElement_Height (topHandle);
+	return new Rectangle (location.x, location.y, width, height);
+}
+
+String getClipboardText () {
+	String string = "";
+	int text = OS.Clipboard_GetText ();
+	if (text != 0) {
+		string = createJavaString (text);
+		OS.GCHandle_Free(text);
+	}
+	return string;
+}
+
+/**
+ * Returns the receiver's cursor, or null if it has not been set.
+ * <p>
+ * When the mouse pointer passes over a control its appearance
+ * is changed to match the control's cursor.
+ * </p>
+ *
+ * @return the receiver's cursor or <code>null</code>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.3
+ */
+public Cursor getCursor () {
+	checkWidget ();
+	return cursor;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is detecting
+ * drag gestures, and  <code>false</code> otherwise. 
+ *
+ * @return the receiver's drag detect state
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.3
+ */
+public boolean getDragDetect () {
+	checkWidget ();
+	return (state & DRAG_DETECT) != 0;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is enabled, and
+ * <code>false</code> otherwise. A disabled control is typically
+ * not selectable from the user interface and draws with an
+ * inactive or "grayed" look.
+ *
+ * @return the receiver's enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #isEnabled
+ */
+public boolean getEnabled () {
+	checkWidget ();
+	return (state & DISABLED) == 0;
+}
+
+/**
+ * Returns the font that the receiver will use to paint textual information.
+ *
+ * @return the receiver's font
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Font getFont () {
+	checkWidget ();	
+	return font != null ? font : defaultFont ();
+}
+
+/**
+ * Returns the foreground color that the receiver will use to draw.
+ *
+ * @return the receiver's foreground color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Color getForeground () {
+	checkWidget ();
+	return Color.wpf_new (display, getForegroundColor ());
+}
+
+int getForegroundColor () {
+	return foreground != 0 ? foreground : defaultForeground ();
+}
+
+/**
+ * Returns layout data which is associated with the receiver.
+ *
+ * @return the receiver's layout data
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Object getLayoutData () {
+	checkWidget ();
+	return layoutData;
+}
+
+/**
+ * Returns a point describing the receiver's location relative
+ * to its parent (or its display if its parent is null), unless
+ * the receiver is a shell. In this case, the point is 
+ * relative to the display. 
+ *
+ * @return the receiver's location
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Point getLocation () {
+	checkWidget ();
+	return parent.getLocation (this);
+}
+
+/**
+ * Returns the receiver's pop up menu if it has one, or null
+ * if it does not. All controls may optionally have a pop up
+ * menu that is displayed when the user requests one for
+ * the control. The sequence of key strokes, button presses
+ * and/or button releases that are used to request a pop up
+ * menu is platform specific.
+ *
+ * @return the receiver's menu
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Menu getMenu () {
+	checkWidget ();
+	return menu;
+}
+
+/**
+ * Returns the receiver's monitor.
+ * 
+ * @return the receiver's monitor
+ * 
+ * @since 3.0
+ */
+public Monitor getMonitor () {
+	checkWidget ();
+	//TODO 
+	return display.getPrimaryMonitor ();
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>Composite</code>
+ * or null when the receiver is a shell that was created with null or
+ * a display for a parent.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Composite getParent () {
+	checkWidget ();
+	return parent;
+}
+
+Control [] getPath () {
+	int count = 0;
+	Shell shell = getShell ();
+	Control control = this;
+	while (control != shell) {
+		count++;
+		control = control.parent;
+	}
+	control = this;
+	Control [] result = new Control [count];
+	while (control != shell) {
+		result [--count] = control;
+		control = control.parent;
+	}
+	return result;
+}
+
+/** 
+ * Returns the region that defines the shape of the control,
+ * or null if the control has the default shape.
+ *
+ * @return the region that defines the shape of the shell (or null)
+ *	
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.4
+ */
+public Region getRegion () {
+	checkWidget ();
+	return region;
+}
+
+/**
+ * Returns the receiver's shell. For all controls other than
+ * shells, this simply returns the control's nearest ancestor
+ * shell. Shells return themselves, even if they are children
+ * of other shells.
+ *
+ * @return the receiver's shell
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getParent
+ */
+public Shell getShell () {
+	checkWidget ();
+	return parent.getShell ();
+}
+
+/**
+ * Returns a point describing the receiver's size. The
+ * x coordinate of the result is the width of the receiver.
+ * The y coordinate of the result is the height of the
+ * receiver.
+ *
+ * @return the receiver's size
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Point getSize () {
+	checkWidget ();
+	int topHandle = topHandle ();
+	int width = (int) OS.FrameworkElement_Width (topHandle);
+	int height = (int) OS.FrameworkElement_Height (topHandle);
+	return new Point (width, height);
+}
+
+/**
+ * Returns the receiver's tool tip text, or null if it has
+ * not been set.
+ *
+ * @return the receiver's tool tip text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getToolTipText () {
+	checkWidget ();
+	return toolTipText;
+}
+
+/**
+ * WARNING: THIS API IS UNDER CONSTRUCTION AND SHOULD NOT BE USED
+ */
+public Transform getTransform () {
+	int transform = OS.FrameworkElement_RenderTransform (handle);
+	int matrix = OS.MatrixTransform_Matrix (transform);
+	OS.GCHandle_Free (transform);
+	float m11 = (float) OS.Matrix_M11 (matrix);
+	float m12 = (float) OS.Matrix_M12 (matrix);
+	float m21 = (float) OS.Matrix_M21 (matrix);
+	float m22 = (float) OS.Matrix_M22 (matrix);
+	float dx = (float) OS.Matrix_OffsetX (matrix);
+	float dy = (float) OS.Matrix_OffsetY (matrix);
+	OS.GCHandle_Free (matrix);
+	//TODO - leaking
+	return new Transform (display, m11, m12, m21, m22, dx, dy);
+}
+
+/**
+ * Returns <code>true</code> if the receiver is visible, and
+ * <code>false</code> otherwise.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, this method
+ * may still indicate that it is considered visible even though
+ * it may not actually be showing.
+ * </p>
+ *
+ * @return the receiver's visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getVisible () {
+	checkWidget ();
+	return OS.UIElement_Visibility (topHandle ()) == OS.Visibility_Visible;
+}
+
+Control getWidgetControl () {
+	return this;
+}
+
+void hookEvents () {
+	super.hookEvents ();
+	int handler = OS.gcnew_KeyEventHandler (jniRef, "HandlePreviewKeyDown");
+	OS.UIElement_PreviewKeyDown (handle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_KeyEventHandler (jniRef, "HandlePreviewKeyUp");
+	OS.UIElement_PreviewKeyUp (handle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_TextCompositionEventHandler (jniRef, "HandlePreviewTextInput");
+	OS.UIElement_PreviewTextInput (handle, handler);
+	OS.GCHandle_Free (handler);
+	
+	int topHandle = topHandle ();
+	handler = OS.gcnew_MouseButtonEventHandler (jniRef, "HandlePreviewMouseDown");
+	OS.UIElement_PreviewMouseDown (topHandle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_MouseButtonEventHandler (jniRef, "HandlePreviewMouseUp");
+	OS.UIElement_PreviewMouseUp (topHandle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_MouseEventHandler (jniRef, "HandleMouseEnter");
+	OS.UIElement_MouseEnter (topHandle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_MouseEventHandler (jniRef, "HandleMouseLeave");
+	OS.UIElement_MouseLeave (topHandle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_MouseEventHandler (jniRef, "HandlePreviewMouseMove");
+	OS.UIElement_PreviewMouseMove (topHandle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_MouseWheelEventHandler (jniRef, "HandlePreviewMouseWheel");
+	OS.UIElement_PreviewMouseWheel (topHandle, handler);
+	OS.GCHandle_Free (handler);
+
+	handler = OS.gcnew_KeyboardFocusChangedEventHandler (jniRef, "HandlePreviewGotKeyboardFocus");
+	OS.UIElement_PreviewGotKeyboardFocus (handle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_KeyboardFocusChangedEventHandler (jniRef, "HandleLostKeyboardFocus");
+	OS.UIElement_LostKeyboardFocus (handle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_ContextMenuEventHandler (jniRef, "HandleContextMenuOpening");
+	OS.FrameworkElement_ContextMenuOpening (handle, handler);
+	OS.GCHandle_Free (handler);
+	
+	handler = OS.gcnew_SizeChangedEventHandler(jniRef, "HandleSizeChanged");
+	OS.FrameworkElement_SizeChanged (topHandle, handler);
+	OS.GCHandle_Free (handler);
+	
+	int typeid = OS.Canvas_typeid();
+	handler = OS.gcnew_EventHandler(jniRef, "HandleTopChanged");
+	int property = OS.Canvas_TopProperty();
+	int dpd = OS.DependencyPropertyDescriptor_FromProperty(property, typeid);
+	OS.DependencyPropertyDescriptor_AddValueChanged(dpd, topHandle, handler);
+	OS.GCHandle_Free(handler);
+	OS.GCHandle_Free(property);
+	OS.GCHandle_Free(dpd);
+	handler = OS.gcnew_EventHandler(jniRef, "HandleLeftChanged");
+	property = OS.Canvas_LeftProperty();
+	dpd = OS.DependencyPropertyDescriptor_FromProperty(property, typeid);
+	OS.DependencyPropertyDescriptor_AddValueChanged(dpd, topHandle, handler);
+	OS.GCHandle_Free(handler);
+	OS.GCHandle_Free(property);
+	OS.GCHandle_Free(dpd);
+	OS.GCHandle_Free(typeid);
+}
+
+void HandleLeftChanged (int sender, int e) {
+	int topHandle = topHandle();
+	int x = (int)OS.Canvas_GetLeft(topHandle);
+	int y = (int)OS.Canvas_GetTop(topHandle);
+	if (x != this.x || y != this.y) {
+		this.x = x;
+		this.y = y;
+		sendEvent(SWT.Move);
+	}
+}
+
+void HandleTopChanged (int sender, int e) {
+	int topHandle = topHandle();
+	int x = (int)OS.Canvas_GetLeft(topHandle);
+	int y = (int)OS.Canvas_GetTop(topHandle);
+	if (x != this.x || y != this.y) {
+		this.x = x;
+		this.y = y;
+		sendEvent(SWT.Move);
+	}
+}
+
+void HandleContextMenuOpening (int sender, int e) {
+	if (!checkEvent (e)) return;
+	int mouse = OS.Mouse_GetPosition (handle);
+	int x = (int) OS.Point_X (mouse);
+	int y = (int) OS.Point_Y (mouse);
+	OS.GCHandle_Free (mouse);
+	Point point = display.map (this, null, x, y);
+	showMenu (point.x, point.y);
+	OS.RoutedEventArgs_Handled (e, true);
+}
+
+void HandlePreviewGotKeyboardFocus (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if (OS.UIElement_IsKeyboardFocusWithin (handle)) return;
+	sendFocusEvent (SWT.FocusIn);
+}
+
+void HandleLostKeyboardFocus (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if (OS.UIElement_IsKeyboardFocusWithin (handle)) return;
+	sendFocusEvent (SWT.FocusOut);
+}
+
+void HandlePreviewKeyDown (int sender, int e) {
+	if (!checkEvent (e)) return;
+	
+	if (display.dragDetectFrame != 0) {
+		if (OS.KeyEventArgs_Key (e) == OS.Key_Escape) {
+			OS.DispatcherFrame_Continue (display.dragDetectFrame, false);
+		}
+	}
+
+	/* Let OS handle mnemonics for now */	
+//	if (translateMnemonic (e)) {
+//		OS.RoutedEventArgs_Handled (e, true);
+//		return;
+//	}
+	if (translateTraversal (e)) {
+		OS.RoutedEventArgs_Handled (e, true);
+		return;
+	}
+	sendKeyEvent (SWT.KeyDown, e, false);
+}
+
+void HandlePreviewKeyUp (int sender, int e) {
+	if (!checkEvent (e)) return;
+	sendKeyEvent (SWT.KeyUp, e, false);
+}
+
+void HandlePreviewMouseDown (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if ((state & CANVAS) != 0) {
+		OS.UIElement_CaptureMouse (handle);
+	}
+	
+	if (OS.MouseButtonEventArgs_ChangedButton (e) == 0 && OS.MouseButtonEventArgs_ClickCount (e) == 1) {
+		if ((state & DRAG_DETECT) != 0 && hooks (SWT.DragDetect)) {
+			int point = OS.MouseEventArgs_GetPosition (e, handle);
+			double x = OS.Point_X (point);
+			double y = OS.Point_Y (point);
+			OS.GCHandle_Free (point);
+			display.dragMouseDown = OS.GCHandle_Alloc (e);
+			dragDetect (x, y, true);
+		}
+	}
+	
+	sendMouseEvent (SWT.MouseDown, e, false);
+}
+
+void HandlePreviewMouseUp (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if ((state & CANVAS) != 0) {
+		OS.UIElement_ReleaseMouseCapture (handle);
+	}
+	if (display.dragDetectFrame != 0) {
+		OS.DispatcherFrame_Continue (display.dragDetectFrame, false);
+	}
+	sendMouseEvent (SWT.MouseUp, e, false);
+}
+
+void HandleMouseEnter (int sender, int e) {
+	if (!checkEvent (e)) return;
+	Control control = display.getCursorControl ();
+	if (control != this) return;
+	
+	Control lastMouseControl = display.mouseControl;
+	if (lastMouseControl != null && !lastMouseControl.isDisposed() && lastMouseControl != this) {
+		if (OS.Visual_IsDescendantOf (topHandle (), lastMouseControl.topHandle())) {
+			lastMouseControl.sendMouseEvent (SWT.MouseExit, e, false);
+		}
+	}
+	display.mouseControl = this;
+	sendMouseEvent (SWT.MouseEnter, e, false);
+}
+
+void HandleMouseLeave (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if (this != display.mouseControl) return;
+	sendMouseEvent (SWT.MouseExit, e, false);
+}
+
+void HandlePreviewMouseMove (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if (display.dragDetectFrame != 0) {
+		OS.RoutedEventArgs_Handled (e, true);
+		int point = OS.MouseEventArgs_GetPosition (e, handle);
+		boolean contains = OS.Rect_Contains (display.dragRect, point);
+		OS.GCHandle_Free (point);
+		if (!contains) {
+			display.dragging = true;
+			OS.DispatcherFrame_Continue (display.dragDetectFrame, false);
+			if (display.dragMouseDown != 0) {
+				sendDragEvent (display.dragMouseDown);
+				OS.GCHandle_Free (display.dragMouseDown);
+				display.dragMouseDown = 0;
+			}
+		}
+		return;
+	}
+	Control lastMouseControl = display.mouseControl;
+	if (lastMouseControl != null && !lastMouseControl.isDisposed() && lastMouseControl != this) {
+		if (OS.Visual_IsAncestorOf (topHandle (), lastMouseControl.topHandle ())) {
+			sendMouseEvent (SWT.MouseEnter, e, false);
+		}
+	}
+	display.mouseControl = this;
+	sendMouseEvent (SWT.MouseMove, e, false);
+}
+
+void HandlePreviewMouseWheel (int sender, int e) {
+	if (!checkEvent (e)) return; 
+	sendMouseEvent (SWT.MouseWheel, e, false);
+}
+
+void HandlePreviewTextInput(int sender, int e) {
+	if (!checkEvent (e)) return;
+	sendKeyEvent (SWT.KeyDown, e, true);
+}
+
+void HandleSizeChanged (int sender, int e) {
+	if (!checkEvent (e)) return;
+	int topHandle = topHandle();
+	int width = (int) OS.FrameworkElement_ActualWidth (topHandle);
+	int height = (int) OS.FrameworkElement_ActualHeight (topHandle);
+	if (this.width != width || this.height != height) {
+		this.width = width;
+		this.height = height; 
+		resized ();
+	}
+}
+
+void resized () {
+	sendEvent (SWT.Resize);
+}
+
+boolean hasFocus () {
+//	return OS.UIElement_IsFocused (handle);
+//	return OS.UIElement_IsKeyboardFocused (handle);
+	return display.getFocusControl() == this;
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new GC handle.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Control</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param data the platform specific GC data 
+ * @return the platform specific GC handle
+ */
+public int internal_new_GC (GCData data) {
+	checkWidget();
+	int drawingContext = data != null ? data.drawingContext : 0;
+	int visual = handle;
+	double width = OS.FrameworkElement_ActualWidth (handle);
+	double height = OS.FrameworkElement_ActualHeight (handle);
+	int rect = OS.gcnew_Rect (0, 0, width, height);
+	int clip = OS.gcnew_RectangleGeometry (rect);
+	if (drawingContext != 0) {
+		OS.DrawingContext_PushClip(drawingContext, clip);
+	} else {
+		if ((state & CANVAS) != 0) {
+			visual = OS.SWTCanvas_Visual (handle);
+			if (visual == 0) {
+				visual = OS.gcnew_DrawingVisual();
+				if (visual == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+				OS.SWTCanvas_Visual (handle, visual);
+			}
+		} else {
+			visual = OS.gcnew_DrawingVisual();
+			if (visual == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+		}
+		OS.ContainerVisual_Clip (visual, clip);
+		int dc = OS.DrawingVisual_RenderOpen (visual);
+		if (dc == 0) SWT.error (SWT.ERROR_NO_HANDLES);		
+		drawingContext = dc;
+		int drawing = OS.DrawingVisual_Drawing(visual);
+		OS.DrawingContext_DrawDrawing(drawingContext, drawing);
+		OS.GCHandle_Free(drawing);
+	}
+	OS.GCHandle_Free (rect);
+	OS.GCHandle_Free (clip);
+	if (data != null) {
+		int mask = SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT;
+		if ((data.style & mask) == 0) {
+			data.style |= style & (mask | SWT.MIRRORED);
+		}
+		data.device = display;
+		data.foreground = getForegroundColor ();
+		Control control = findBackgroundControl ();
+		if (control == null) control = this;
+		data.background = control.getBackgroundColor ();
+		data.font = font != null ? font : defaultFont ();
+		data.visual = visual;
+	}
+	return drawingContext;
+}
+
+/**	 
+ * Invokes platform specific functionality to dispose a GC handle.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Control</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param hDC the platform specific GC handle
+ * @param data the platform specific GC data 
+ */
+public void internal_dispose_GC (int dc, GCData data) {
+	checkWidget ();
+	if (data != null && data.drawingContext == 0) {
+		OS.DrawingContext_Close (dc);
+		OS.GCHandle_Free (dc);
+		OS.GCHandle_Free (data.visual);
+	}
+}
+
+boolean isActive () {
+//	Shell dialogShell = display.getModalDialogShell ();
+//	if (dialogShell != null && dialogShell != getShell ()) {
+//		return false;
+//	}
+	Shell shell = null;
+	Shell [] modalShells = display.modalShells;
+	if (modalShells != null) {
+		int bits = SWT.APPLICATION_MODAL | SWT.SYSTEM_MODAL;
+		int index = modalShells.length;
+		while (--index >= 0) {
+			Shell modal = modalShells [index];
+			if (modal != null) {
+				if ((modal.style & bits) != 0) {
+					Control control = this;
+					while (control != null) {
+						if (control == modal) break;
+						control = control.parent;
+					}
+					if (control != modal) return false;
+					break;
+				}
+				if ((modal.style & SWT.PRIMARY_MODAL) != 0) {
+					if (shell == null) shell = getShell ();
+					if (modal.parent == shell) return false;
+				}
+			}
+		}
+	}
+	if (shell == null) shell = getShell ();
+	return shell.getEnabled ();
+}
+
+/**
+ * Returns <code>true</code> if the receiver is enabled and all
+ * ancestors up to and including the receiver's nearest ancestor
+ * shell are enabled.  Otherwise, <code>false</code> is returned.
+ * A disabled control is typically not selectable from the user
+ * interface and draws with an inactive or "grayed" look.
+ *
+ * @return the receiver's enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #getEnabled
+ */
+public boolean isEnabled () {
+	checkWidget ();
+	return getEnabled () && parent.isEnabled ();
+}
+
+/**
+ * Returns <code>true</code> if the receiver has the user-interface
+ * focus, and <code>false</code> otherwise.
+ *
+ * @return the receiver's focus state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean isFocusControl () {
+	checkWidget ();
+	return hasFocus ();
+}
+
+boolean isFocusAncestor (Control control) {
+	while (control != null && control != this && !(control instanceof Shell)) {
+		control = control.parent;
+	}
+	return control == this;
+}
+
+/**
+ * Returns <code>true</code> if the underlying operating
+ * system supports this reparenting, otherwise <code>false</code>
+ *
+ * @return <code>true</code> if the widget can be reparented, otherwise <code>false</code>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean isReparentable () {
+	checkWidget ();
+	return false;
+}
+
+boolean isShowing () {
+	/*
+	* This is not complete.  Need to check if the
+	* widget is obscurred by a parent or sibling.
+	*/
+	if (!isVisible ()) return false;
+	Control control = this;
+	while (control != null) {
+		Point size = control.getSize ();
+		if (size.x == 0 || size.y == 0) {
+			return false;
+		}
+		control = control.parent;
+	}
+	return true;
+	/*
+	* Check to see if current damage is included.
+	*/
+//	if (!OS.IsWindowVisible (handle)) return false;
+//	int flags = OS.DCX_CACHE | OS.DCX_CLIPCHILDREN | OS.DCX_CLIPSIBLINGS;
+//	int hDC = OS.GetDCEx (handle, 0, flags);
+//	int result = OS.GetClipBox (hDC, new RECT ());
+//	OS.ReleaseDC (handle, hDC);
+//	return result != OS.NULLREGION;
+}
+
+boolean isTabGroup () {
+	Control [] tabList = parent._getTabList ();
+	if (tabList != null) {
+		for (int i=0; i<tabList.length; i++) {
+			if (tabList [i] == this) return true;
+		}
+	}
+	int code = traversalCode (0, 0);
+	if ((code & (SWT.TRAVERSE_ARROW_PREVIOUS | SWT.TRAVERSE_ARROW_NEXT)) != 0) return false;
+	return (code & (SWT.TRAVERSE_TAB_PREVIOUS | SWT.TRAVERSE_TAB_NEXT)) != 0;
+}
+
+boolean isTabItem () {
+	Control [] tabList = parent._getTabList ();
+	if (tabList != null) {
+		for (int i=0; i<tabList.length; i++) {
+			if (tabList [i] == this) return false;
+		}
+	}
+	int code = traversalCode (0, 0);
+	return (code & (SWT.TRAVERSE_ARROW_PREVIOUS | SWT.TRAVERSE_ARROW_NEXT)) != 0;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is visible and all
+ * ancestors up to and including the receiver's nearest ancestor
+ * shell are visible. Otherwise, <code>false</code> is returned.
+ *
+ * @return the receiver's visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getVisible
+ */
+public boolean isVisible () {
+	checkWidget ();
+	int topHandle = topHandle ();
+	updateLayout (topHandle);
+	return OS.UIElement_IsVisible (topHandle);
+}
+
+void markLayout (boolean changed, boolean all) {
+	/* Do nothing */
+}
+
+Decorations menuShell () {
+	return parent.menuShell ();
+}
+
+boolean mnemonicHit (char key) {
+	return false;
+}
+
+boolean mnemonicMatch (char key) {
+	return false;
+}
+
+/**
+ * Moves the receiver above the specified control in the
+ * drawing order. If the argument is null, then the receiver
+ * is moved to the top of the drawing order. The control at
+ * the top of the drawing order will not be covered by other
+ * controls even if they occupy intersecting areas.
+ *
+ * @param control the sibling control (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the control has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Control#moveBelow
+ * @see Composite#getChildren
+ */
+public void moveAbove (Control control) {
+	checkWidget ();
+	if (parent == null) return; //TODO
+	if (control != null) {
+		if (control.isDisposed ()) error(SWT.ERROR_INVALID_ARGUMENT);
+		if (parent != control.parent) return;
+	}
+	int index;
+	int parentHandle = parent.parentingHandle ();
+	int children = OS.Panel_Children (parentHandle);
+	if (control != null) {
+		index = OS.UIElementCollection_IndexOf (children, control.topHandle ());
+	} else {
+		index = OS.UIElementCollection_Count (children) - 1;
+	}
+	int topHandle = topHandle ();
+	if (OS.UIElementCollection_IndexOf (children, topHandle) < index) {
+		OS.UIElementCollection_Remove (children, topHandle);
+		OS.UIElementCollection_Insert (children, index, topHandle);
+	}
+	OS.GCHandle_Free (children);
+}
+
+/**
+ * Moves the receiver below the specified control in the
+ * drawing order. If the argument is null, then the receiver
+ * is moved to the bottom of the drawing order. The control at
+ * the bottom of the drawing order will be covered by all other
+ * controls which occupy intersecting areas.
+ *
+ * @param control the sibling control (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the control has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Control#moveAbove
+ * @see Composite#getChildren
+ */
+public void moveBelow (Control control) {
+	checkWidget ();
+	if (parent == null) return; //TODO
+	if (control != null) {
+		if (control.isDisposed ()) error(SWT.ERROR_INVALID_ARGUMENT);
+		if (parent != control.parent) return;
+	}
+	int index;
+	int parentHandle = parent.parentingHandle ();
+	int children = OS.Panel_Children (parentHandle);
+	if (control != null) {
+		index = Math.max (0, OS.UIElementCollection_IndexOf (children, control.topHandle ()) - 1);
+	} else {
+		if (parentHandle != parent.handle) {
+			index = 1;
+		} else {
+			index = 0;
+		}
+	}
+	int topHandle = topHandle ();
+	if (OS.UIElementCollection_IndexOf (children, topHandle) > index) {
+		OS.UIElementCollection_Remove (children, topHandle);
+		OS.UIElementCollection_Insert (children, index, topHandle);
+	}
+	OS.GCHandle_Free (children);
+}
+
+Accessible new_Accessible (Control control) {
+	return Accessible.internal_new_Accessible (this);
+}
+
+/**
+ * Causes the receiver to be resized to its preferred size.
+ * For a composite, this involves computing the preferred size
+ * from its layout, if there is one.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #computeSize(int, int, boolean)
+ */
+public void pack () {
+	checkWidget ();
+	pack (true);
+}
+
+/**
+ * Causes the receiver to be resized to its preferred size.
+ * For a composite, this involves computing the preferred size
+ * from its layout, if there is one.
+ * <p>
+ * If the changed flag is <code>true</code>, it indicates that the receiver's
+ * <em>contents</em> have changed, therefore any caches that a layout manager
+ * containing the control may have been keeping need to be flushed. When the
+ * control is resized, the changed flag will be <code>false</code>, so layout
+ * manager caches can be retained. 
+ * </p>
+ *
+ * @param changed whether or not the receiver's contents have changed
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #computeSize(int, int, boolean)
+ */
+public void pack (boolean changed) {
+	checkWidget ();
+	setSize (computeSize (SWT.DEFAULT, SWT.DEFAULT, changed));
+}
+
+/**
+ * Prints the receiver and all children.
+ * 
+ * @param gc the gc where the drawing occurs
+ * @return <code>true</code> if the operation was successful and <code>false</code> otherwise
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the gc is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the gc has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public boolean print (GC gc) {
+	checkWidget ();
+	if (gc == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	return false;
+}
+
+/**
+ * Causes the entire bounds of the receiver to be marked
+ * as needing to be redrawn. The next time a paint request
+ * is processed, the control will be completely painted,
+ * including the background.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #update()
+ * @see PaintListener
+ * @see SWT#Paint
+ * @see SWT#NO_BACKGROUND
+ * @see SWT#NO_REDRAW_RESIZE
+ * @see SWT#NO_MERGE_PAINTS
+ * @see SWT#DOUBLE_BUFFERED
+ */
+public void redraw () {
+	checkWidget ();
+	redraw (false);
+}
+
+void redraw (boolean all) {
+//	checkWidget ();
+	//TODO InvalidateVisual invalidates the entire visual tree
+	OS.UIElement_InvalidateVisual (topHandle ()); 
+	OS.UIElement_InvalidateVisual (handle);
+}
+
+/**
+ * Causes the rectangular area of the receiver specified by
+ * the arguments to be marked as needing to be redrawn. 
+ * The next time a paint request is processed, that area of
+ * the receiver will be painted, including the background.
+ * If the <code>all</code> flag is <code>true</code>, any
+ * children of the receiver which intersect with the specified
+ * area will also paint their intersecting areas. If the
+ * <code>all</code> flag is <code>false</code>, the children
+ * will not be painted.
+ *
+ * @param x the x coordinate of the area to draw
+ * @param y the y coordinate of the area to draw
+ * @param width the width of the area to draw
+ * @param height the height of the area to draw
+ * @param all <code>true</code> if children should redraw, and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #update()
+ * @see PaintListener
+ * @see SWT#Paint
+ * @see SWT#NO_BACKGROUND
+ * @see SWT#NO_REDRAW_RESIZE
+ * @see SWT#NO_MERGE_PAINTS
+ * @see SWT#DOUBLE_BUFFERED
+ */
+public void redraw (int x, int y, int width, int height, boolean all) {
+	checkWidget ();
+	if (width <= 0 || height <= 0) return;
+	//TODO redraw only rect
+	redraw(true);
+}
+
+void register () {
+	display.addWidget (handle, this);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (handle != 0) OS.GCHandle_Free (handle);
+	handle = 0;
+	parent = null;
+}
+
+void releaseParent () {
+	parent.removeControl (this);
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+//	if (toolTipText != null) {
+//		setToolTipText (getShell (), null);
+//	}
+	toolTipText = null;
+	if (menu != null && !menu.isDisposed ()) {
+		menu.dispose ();
+	}
+	menu = null;
+	cursor = null;
+	layoutData = null;
+	if (accessible != null) {
+		accessible.internal_dispose_Accessible ();
+	}
+	accessible = null;
+	region = null;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is moved or resized.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ControlListener
+ * @see #addControlListener
+ */
+public void removeControlListener (ControlListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Move, listener);
+	eventTable.unhook (SWT.Resize, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when a drag gesture occurs.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see DragDetectListener
+ * @see #addDragDetectListener
+ * 
+ * @since 3.3
+ */
+public void removeDragDetectListener(DragDetectListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.DragDetect, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control gains or loses focus.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see FocusListener
+ * @see #addFocusListener
+ */
+public void removeFocusListener(FocusListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.FocusIn, listener);
+	eventTable.unhook (SWT.FocusOut, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the help events are generated for the control.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see HelpListener
+ * @see #addHelpListener
+ */
+public void removeHelpListener (HelpListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Help, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when keys are pressed and released on the system keyboard.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see KeyListener
+ * @see #addKeyListener
+ */
+public void removeKeyListener(KeyListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.KeyUp, listener);
+	eventTable.unhook (SWT.KeyDown, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the platform-specific context menu trigger has
+ * occurred.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MenuDetectListener
+ * @see #addMenuDetectListener
+ *
+ * @since 3.3
+ */
+public void removeMenuDetectListener (MenuDetectListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.MenuDetect, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the mouse passes or hovers over controls.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MouseTrackListener
+ * @see #addMouseTrackListener
+ */
+public void removeMouseTrackListener(MouseTrackListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.MouseEnter, listener);
+	eventTable.unhook (SWT.MouseExit, listener);
+	eventTable.unhook (SWT.MouseHover, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when mouse buttons are pressed and released.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MouseListener
+ * @see #addMouseListener
+ */
+public void removeMouseListener (MouseListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.MouseDown, listener);
+	eventTable.unhook (SWT.MouseUp, listener);
+	eventTable.unhook (SWT.MouseDoubleClick, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the mouse moves.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MouseMoveListener
+ * @see #addMouseMoveListener
+ */
+public void removeMouseMoveListener(MouseMoveListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.MouseMove, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the mouse wheel is scrolled.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MouseWheelListener
+ * @see #addMouseWheelListener
+ *
+ * @since 3.3
+ */
+public void removeMouseWheelListener (MouseWheelListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.MouseWheel, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the receiver needs to be painted.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see PaintListener
+ * @see #addPaintListener
+ */
+public void removePaintListener(PaintListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook(SWT.Paint, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when traversal events occur.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see TraverseListener
+ * @see #addTraverseListener
+ */
+public void removeTraverseListener(TraverseListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Traverse, listener);
+}
+
+boolean sendFocusEvent (int type) {
+	Shell shell = getShell ();
+	
+	Display display = this.display;
+	display.focusControl = this;
+	sendEvent (type);
+	display.focusControl = null;
+
+	/*
+	* It is possible that the shell may be
+	* disposed at this point.  If this happens
+	* don't send the activate and deactivate
+	* events.
+	*/	
+	if (!shell.isDisposed ()) {
+		switch (type) {
+			case SWT.FocusIn:
+				shell.setActiveControl (this);
+				break;
+			case SWT.FocusOut:
+				if (shell != display.getActiveShell ()) {
+					shell.setActiveControl (null);
+				}
+				break;
+		}
+	}
+	return true;
+}
+
+/**
+ * Sets the receiver's background color to the color specified
+ * by the argument, or to the default system color for the control
+ * if the argument is null.
+ * <p>
+ * Note: This operation is a hint and may be overridden by the platform.
+ * For example, on Windows the background of a Button cannot be changed.
+ * </p>
+ * @param color the new color (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setBackground (Color color) {
+	checkWidget ();
+	if (color != null) {
+		if (color.isDisposed ()) SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+		if (background != 0 && OS.Object_Equals (color.handle, background)) return;
+		background = color.handle;
+	} else {
+		if (background == 0) return;
+		background = 0;
+	}
+	setBackground ();
+//	updateBackgroundColor ();
+}
+
+int backgroundHandle () {
+	return handle;
+}
+
+int backgroundProperty () {
+	return OS.Control_BackgroundProperty ();
+} 
+
+void setBackground () {
+	int backgroundHandle = backgroundHandle ();
+	int property = backgroundProperty ();
+	int brush = 0;
+	if ((state & PARENT_BACKGROUND) == 0) {
+		if (backgroundImage != null) {
+			int imageHandle = backgroundImage.handle;
+			brush = OS.gcnew_ImageBrush (imageHandle);
+			OS.TileBrush_TileMode (brush, OS.TileMode_Tile);
+			OS.TileBrush_Stretch (brush, OS.Stretch_Fill);
+			OS.TileBrush_ViewportUnits (brush, OS.BrushMappingMode_Absolute);
+			int rect = OS.gcnew_Rect (0, 0, OS.BitmapSource_PixelWidth (imageHandle), OS.BitmapSource_PixelHeight (imageHandle));
+			OS.TileBrush_Viewport (brush, rect);
+			OS.GCHandle_Free (rect);
+		} else {
+			int color = background;
+			if (color == 0) {
+				color = defaultBackground ();
+				if ((state & THEME_BACKGROUND) != 0) {
+					Control themeControl = findThemeControl ();
+					if (themeControl != null) {
+						if (color != 0) {
+							/*
+							* Feature in WPF. If the control does not have a background
+							* brush it does not receive input events.
+							* The fix is to set a transparent background.  
+							*/
+							color = OS.Colors_Transparent;
+						}
+					}
+				}
+			}
+			if (color != 0) {
+				brush = OS.gcnew_SolidColorBrush (color);
+			}
+		}
+	}
+	if (brush != 0) {
+		OS.DependencyObject_SetValue (backgroundHandle, property, brush);
+		OS.GCHandle_Free (brush);
+	} else {
+		OS.DependencyObject_ClearValue (backgroundHandle, property);
+	}
+	OS.GCHandle_Free (property);
+}
+
+/**
+ * Sets the receiver's background image to the image specified
+ * by the argument, or to the default system color for the control
+ * if the argument is null.  The background image is tiled to fill
+ * the available space.
+ * <p>
+ * Note: This operation is a hint and may be overridden by the platform.
+ * For example, on Windows the background of a Button cannot be changed.
+ * </p>
+ * @param image the new image (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument is not a bitmap</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setBackgroundImage (Image image) {
+	checkWidget ();
+	if (image != null) {
+		if (image.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+		if (image.type != SWT.BITMAP) error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	if (backgroundImage == image) return;
+	backgroundImage = image;
+	setBackground ();
+}
+
+/**
+ * Sets the receiver's size and location to the rectangular
+ * area specified by the arguments. The <code>x</code> and 
+ * <code>y</code> arguments are relative to the receiver's
+ * parent (or its display if its parent is null), unless 
+ * the receiver is a shell. In this case, the <code>x</code>
+ * and <code>y</code> arguments are relative to the display.
+ * <p>
+ * Note: Attempting to set the width or height of the
+ * receiver to a negative number will cause that
+ * value to be set to zero instead.
+ * </p>
+ *
+ * @param x the new x coordinate for the receiver
+ * @param y the new y coordinate for the receiver
+ * @param width the new width for the receiver
+ * @param height the new height for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setBounds (int x, int y, int width, int height) {
+	checkWidget ();
+	int flags = MOVED | RESIZED;
+	setBounds (x, y, Math.max (0, width), Math.max (0, height), flags);
+}
+
+int setBounds (int x, int y, int width, int height, int flags) {
+	int result = 0;
+	int topHandle = topHandle ();
+	if ((flags & MOVED) != 0) {
+		int oldX = (int) OS.Canvas_GetLeft (topHandle);
+		int oldY = (int) OS.Canvas_GetTop (topHandle);
+		if (oldX != x) {
+			this.x = x;
+			OS.Canvas_SetLeft (topHandle, x);
+		}
+		if (oldY != y) {
+			this.y = y;
+			OS.Canvas_SetTop (topHandle, y);
+		}
+		if (oldX != x || oldY != y) {
+			sendEvent (SWT.Move);
+			if (isDisposed ()) return 0;
+			result |= MOVED;
+		}
+	}
+	if ((flags & RESIZED) != 0) {
+		int oldWidth = (int) OS.FrameworkElement_Width (topHandle);
+		int oldHeight = (int) OS.FrameworkElement_Height (topHandle);
+		if (oldWidth != width) {
+			this.width = width;
+			OS.FrameworkElement_Width (topHandle, width);
+		}
+		if (oldHeight != height) {
+			this.height = height;
+			OS.FrameworkElement_Height (topHandle, height);
+		}
+		if (oldWidth != width || oldHeight != height) {
+			sendEvent (SWT.Resize);
+			if (isDisposed ()) return 0;
+			result |= RESIZED;
+		}
+	}
+	return result;
+}
+
+/**
+ * Sets the receiver's size and location to the rectangular
+ * area specified by the argument. The <code>x</code> and 
+ * <code>y</code> fields of the rectangle are relative to
+ * the receiver's parent (or its display if its parent is null).
+ * <p>
+ * Note: Attempting to set the width or height of the
+ * receiver to a negative number will cause that
+ * value to be set to zero instead.
+ * </p>
+ *
+ * @param rect the new bounds for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setBounds (Rectangle rect) {
+	checkWidget ();
+	if (rect == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setBounds (rect.x, rect.y, rect.width, rect.height);
+}
+
+/**
+ * If the argument is <code>true</code>, causes the receiver to have
+ * all mouse events delivered to it until the method is called with
+ * <code>false</code> as the argument.  Note that on some platforms,
+ * a mouse button must currently be down for capture to be assigned.
+ *
+ * @param capture <code>true</code> to capture the mouse, and <code>false</code> to release it
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setCapture (boolean capture) {
+	checkWidget ();
+	if (capture) {
+		OS.UIElement_CaptureMouse (handle);
+	} else {
+		OS.UIElement_ReleaseMouseCapture (handle);
+	}
+}
+
+/**
+ * Sets the receiver's cursor to the cursor specified by the
+ * argument, or to the default cursor for that kind of control
+ * if the argument is null.
+ * <p>
+ * When the mouse pointer passes over a control its appearance
+ * is changed to match the control's cursor.
+ * </p>
+ *
+ * @param cursor the new cursor (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setCursor (Cursor cursor) {
+	checkWidget ();
+	if (cursor != null && cursor.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	this.cursor = cursor;
+	if (cursor != null) {
+		OS.FrameworkElement_Cursor (handle, cursor.handle);
+	} else {
+		int property = OS.FrameworkElement_CursorProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+	}
+}
+
+/**
+ * Sets the receiver's drag detect state. If the argument is
+ * <code>true</code>, the receiver will detect drag gestures,
+ * otherwise these gestures will be ignored.
+ *
+ * @param dragDetect the new drag detect state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.3
+ */
+public void setDragDetect (boolean dragDetect) {
+	checkWidget ();
+	if (dragDetect) {
+		state |= DRAG_DETECT;
+	} else {
+		state &= ~DRAG_DETECT;
+	}
+}
+
+/**
+ * WARNING: THIS API IS UNDER CONSTRUCTION AND SHOULD NOT BE USED
+ */
+public void setEffect(Effect effect){
+	checkWidget ();
+	if (effect != null && effect.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT);
+	if (effect != null) {
+		OS.UIElement_BitmapEffect (handle, effect.handle);
+		OS.UIElement_ClipToBounds (topHandle (), false);
+	} else {
+		OS.UIElement_BitmapEffect (handle, 0);
+		setClipping();
+	}
+//	updateLayout(handle);
+}
+
+/**
+ * Enables the receiver if the argument is <code>true</code>,
+ * and disables it otherwise. A disabled control is typically
+ * not selectable from the user interface and draws with an
+ * inactive or "grayed" look.
+ *
+ * @param enabled the new enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setEnabled (boolean enabled) {
+	checkWidget ();
+	if (((state & DISABLED) == 0) == enabled) return;
+	/*
+	* Feature in Windows.  If the receiver has focus, disabling
+	* the receiver causes no window to have focus.  The fix is
+	* to assign focus to the first ancestor window that takes
+	* focus.  If no window will take focus, set focus to the
+	* desktop.
+	*/
+	Control control = null;
+	boolean fixFocus = false;
+	if (!enabled) {
+//		if (display.focusEvent != SWT.FocusOut) {
+			control = display.getFocusControl ();
+			fixFocus = isFocusAncestor (control);
+//		}
+	}
+	if (enabled) {
+		state &= ~DISABLED;
+	} else {
+		state |= DISABLED;
+	}
+	enableWidget (enabled);
+	if (fixFocus) fixFocus (control);
+}
+
+/**
+ * Causes the receiver to have the <em>keyboard focus</em>, 
+ * such that all keyboard events will be delivered to it.  Focus
+ * reassignment will respect applicable platform constraints.
+ *
+ * @return <code>true</code> if the control got focus, and <code>false</code> if it was unable to.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #forceFocus
+ */
+public boolean setFocus () {
+	checkWidget ();
+	if ((style & SWT.NO_FOCUS) != 0) return false;
+	return forceFocus ();
+}
+
+/**
+ * Sets the font that the receiver will use to paint textual information
+ * to the font specified by the argument, or to the default font for that
+ * kind of control if the argument is null.
+ *
+ * @param font the new font (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setFont (Font font) {
+	checkWidget ();
+	if (font != null) { 
+		if (font.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	this.font = font;
+	if (font == null) font = defaultFont();
+	setFont (font.handle, font.size);
+}
+
+void setFont (int font, double size) {
+	if (font != 0) {
+		int fontFamily = OS.Typeface_FontFamily( font);
+		int style = OS.Typeface_Style (font);
+		int weight = OS.Typeface_Weight (font);
+		int stretch = OS.Typeface_Stretch (font);
+		OS.Control_FontFamily (handle, fontFamily);
+		OS.Control_FontStyle (handle, style);
+		OS.Control_FontWeight (handle, weight);
+		OS.Control_FontStretch (handle, stretch);
+		OS.Control_FontSize (handle, size);
+		OS.GCHandle_Free (fontFamily);
+		OS.GCHandle_Free (style);
+		OS.GCHandle_Free (weight);
+		OS.GCHandle_Free (stretch);
+	} else {
+		int property = OS.Control_FontFamilyProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS.Control_FontStyleProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS.Control_FontWeightProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS.Control_FontStretchProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS.Control_FontSizeProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+	}
+}
+
+/**
+ * Sets the receiver's foreground color to the color specified
+ * by the argument, or to the default system color for the control
+ * if the argument is null.
+ * <p>
+ * Note: This operation is a hint and may be overridden by the platform.
+ * </p>
+ * @param color the new color (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setForeground (Color color) {
+	checkWidget ();
+	int brush = 0;
+	if (color != null) {
+		if (color.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		if (foreground != 0 && OS.Object_Equals (color.handle, foreground)) return;
+		foreground = color.handle;
+		brush = OS.gcnew_SolidColorBrush (foreground);
+	} else {
+		if (foreground == 0) return;
+		foreground = 0;
+	}
+	setForegroundBrush (brush);
+	if (brush != 0) OS.GCHandle_Free (brush);
+}
+
+void setForegroundBrush (int brush) {
+	if (brush != 0) {
+		OS.Control_Foreground (handle, brush);
+	} else {
+		int property = OS.Control_ForegroundProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+	}
+}
+
+/**
+ * Sets the layout data associated with the receiver to the argument.
+ * 
+ * @param layoutData the new layout data for the receiver.
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setLayoutData (Object layoutData) {
+	checkWidget ();
+	this.layoutData = layoutData;
+}
+
+/**
+ * Sets the receiver's location to the point specified by
+ * the arguments which are relative to the receiver's
+ * parent (or its display if its parent is null), unless 
+ * the receiver is a shell. In this case, the point is 
+ * relative to the display. 
+ *
+ * @param x the new x coordinate for the receiver
+ * @param y the new y coordinate for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setLocation (int x, int y) {
+	checkWidget ();
+	int flags = MOVED;
+	setBounds (x, y, 0, 0, flags);
+}
+
+/**
+ * Sets the receiver's location to the point specified by
+ * the arguments which are relative to the receiver's
+ * parent (or its display if its parent is null), unless 
+ * the receiver is a shell. In this case, the point is 
+ * relative to the display. 
+ *
+ * @param location the new location for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setLocation (Point location) {
+	checkWidget ();
+	if (location == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setLocation (location.x, location.y);
+}
+
+/**
+ * Sets the receiver's pop up menu to the argument.
+ * All controls may optionally have a pop up
+ * menu that is displayed when the user requests one for
+ * the control. The sequence of key strokes, button presses
+ * and/or button releases that are used to request a pop up
+ * menu is platform specific.
+ * <p>
+ * Note: Disposing of a control that has a pop up menu will
+ * dispose of the menu.  To avoid this behavior, set the
+ * menu to null before the control is disposed.
+ * </p>
+ *
+ * @param menu the new pop up menu
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_MENU_NOT_POP_UP - the menu is not a pop up menu</li>
+ *    <li>ERROR_INVALID_PARENT - if the menu is not in the same widget tree</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the menu has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMenu (Menu menu) {
+	checkWidget ();
+	if (menu != null) {
+		if (menu.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		if ((menu.style & SWT.POP_UP) == 0) {
+			error (SWT.ERROR_MENU_NOT_POP_UP);
+		}
+		if (menu.parent != menuShell ()) {
+			error (SWT.ERROR_INVALID_PARENT);
+		}
+	}
+	this.menu = menu;
+	OS.FrameworkElement_ContextMenu(handle, menu != null ? menu.handle : 0);
+}
+
+/**
+ * If the argument is <code>false</code>, causes subsequent drawing
+ * operations in the receiver to be ignored. No drawing of any kind
+ * can occur in the receiver until the flag is set to true.
+ * Graphics operations that occurred while the flag was
+ * <code>false</code> are lost. When the flag is set to <code>true</code>,
+ * the entire widget is marked as needing to be redrawn.  Nested calls
+ * to this method are stacked.
+ * <p>
+ * Note: This operation is a hint and may not be supported on some
+ * platforms or for some widgets.
+ * </p>
+ *
+ * @param redraw the new redraw state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #redraw(int, int, int, int, boolean)
+ * @see #update()
+ */
+public void setRedraw (boolean redraw) {
+	checkWidget ();
+	/*
+	 * Feature in Windows.  When WM_SETREDRAW is used to turn
+	 * off drawing in a widget, it clears the WS_VISIBLE bits
+	 * and then sets them when redraw is turned back on.  This
+	 * means that WM_SETREDRAW will make a widget unexpectedly
+	 * visible.  The fix is to track the visibility state while
+	 * drawing is turned off and restore it when drawing is
+	 * turned back on.
+	 */
+//	if (drawCount == 0) {
+//		int bits = OS.GetWindowLong (handle, OS.GWL_STYLE);
+//		if ((bits & OS.WS_VISIBLE) == 0) state |= HIDDEN;
+//	}
+//	if (redraw) {
+//		if (--drawCount == 0) {
+//			OS.SendMessage (handle, OS.WM_SETREDRAW, 1, 0);
+//			if ((state & HIDDEN) != 0) {
+//				state &= ~HIDDEN;
+//				OS.ShowWindow (handle, OS.SW_HIDE);
+//			} else {
+//				if (OS.IsWinCE) {
+//					OS.InvalidateRect (handle, null, true);
+//				} else {
+//					int flags = OS.RDW_ERASE | OS.RDW_FRAME | OS.RDW_INVALIDATE | OS.RDW_ALLCHILDREN;
+//					OS.RedrawWindow (handle, null, 0, flags);
+//				}
+//			}
+//		}
+//	} else {
+//		if (drawCount++ == 0) {
+//			OS.SendMessage (handle, OS.WM_SETREDRAW, 0, 0);
+//		}
+//	}
+	redraw ();
+}
+
+/**
+ * Sets the shape of the control to the region specified
+ * by the argument.  When the argument is null, the
+ * default shape of the control is restored.
+ *
+ * @param region the region that defines the shape of the control (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the region has been disposed</li>
+ * </ul>  
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.4
+ */
+public void setRegion (Region region) {
+	checkWidget ();
+	if (region != null && region.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT);
+	OS.UIElement_Clip (topHandle (), region.handle);
+	this.region = region;
+}
+
+boolean setSavedFocus () {
+	return forceFocus ();
+}
+
+/**
+ * Sets the receiver's size to the point specified by the arguments.
+ * <p>
+ * Note: Attempting to set the width or height of the
+ * receiver to a negative number will cause that
+ * value to be set to zero instead.
+ * </p>
+ *
+ * @param width the new width for the receiver
+ * @param height the new height for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSize (int width, int height) {
+	checkWidget ();
+	int flags = RESIZED;
+	setBounds (0, 0, Math.max (0, width), Math.max (0, height), flags);
+}
+
+/**
+ * Sets the receiver's size to the point specified by the argument.
+ * <p>
+ * Note: Attempting to set the width or height of the
+ * receiver to a negative number will cause them to be
+ * set to zero instead.
+ * </p>
+ *
+ * @param size the new size for the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSize (Point size) {
+	checkWidget ();
+	if (size == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setSize (size.x, size.y);
+}
+
+boolean setTabGroupFocus () {
+	return setTabItemFocus ();
+}
+
+boolean setTabItemFocus () {
+	if (!isShowing ()) return false;
+	return forceFocus ();
+}
+
+/**
+ * Sets the receiver's tool tip text to the argument, which
+ * may be null indicating that the default tool tip for the 
+ * control will be shown. For a control that has a default
+ * tool tip, such as the Tree control on Windows, setting
+ * the tool tip text to an empty string replaces the default,
+ * causing no tool tip text to be shown.
+ * <p>
+ * The mnemonic indicator (character '&amp;') is not displayed in a tool tip.
+ * To display a single '&amp;' in the tool tip, the character '&amp;' can be 
+ * escaped by doubling it in the string.
+ * </p>
+ * 
+ * @param string the new tool tip text (or null)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setToolTipText (String string) {
+	checkWidget ();
+	toolTipText = string;
+	if (string != null && string.length() == 0) string = null;
+	int strPtr = createDotNetString (string, false);
+	OS.FrameworkElement_ToolTip (handle, strPtr);
+	if (strPtr != 0) OS.GCHandle_Free (strPtr);
+}
+
+/**
+ * WARNING: THIS API IS UNDER CONSTRUCTION AND SHOULD NOT BE USED
+ */
+public void setTransform (Transform t) {
+	checkWidget ();
+	if (t == null) {
+		OS.FrameworkElement_RenderTransform (handle, 0);
+		return;
+	}
+	int matrixTransform = OS.gcnew_MatrixTransform (t.handle);
+//	OS.FrameworkElement_LayoutTransform (handle, matrixTransform);
+	OS.FrameworkElement_RenderTransform (handle, matrixTransform);
+	OS.GCHandle_Free (matrixTransform);
+}
+
+/**
+ * Marks the receiver as visible if the argument is <code>true</code>,
+ * and marks it invisible otherwise. 
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, marking
+ * it visible may not actually cause it to be displayed.
+ * </p>
+ *
+ * @param visible the new visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setVisible (boolean visible) {
+	checkWidget ();
+	int topHandle = topHandle ();
+	if ((OS.UIElement_Visibility (topHandle) == OS.Visibility_Visible) == visible) return;
+	if (visible) {
+		sendEvent (SWT.Show);
+		if (isDisposed ()) return;
+	}
+	
+	/*
+	* Feature in Windows.  If the receiver has focus, hiding
+	* the receiver causes no window to have focus.  The fix is
+	* to assign focus to the first ancestor window that takes
+	* focus.  If no window will take focus, set focus to the
+	* desktop.
+	*/
+	Control control = null;
+	boolean fixFocus = false;
+	if (!visible) {
+//		if (display.focusEvent != SWT.FocusOut) {
+			control = display.getFocusControl ();
+			fixFocus = isFocusAncestor (control);
+//		}
+	}
+	OS.UIElement_Visibility (topHandle, visible ? OS.Visibility_Visible : OS.Visibility_Hidden);
+	if (isDisposed ()) return;
+	if (!visible) {
+		sendEvent (SWT.Hide);
+		if (isDisposed ()) return;
+	}
+	if (fixFocus) fixFocus (control);
+}
+
+void sort (int [] items) {
+	/* Shell Sort from K&R, pg 108 */
+	int length = items.length;
+	for (int gap=length/2; gap>0; gap/=2) {
+		for (int i=gap; i<length; i++) {
+			for (int j=i-gap; j>=0; j-=gap) {
+		   		if (items [j] <= items [j + gap]) {
+					int swap = items [j];
+					items [j] = items [j + gap];
+					items [j + gap] = swap;
+		   		}
+	    	}
+	    }
+	}
+}
+
+void sortAscending (int [] items) {
+	/* Shell Sort from K&R, pg 108 */
+	int length = items.length;
+	for (int gap=length/2; gap>0; gap/=2) {
+		for (int i=gap; i<length; i++) {
+			for (int j=i-gap; j>=0; j-=gap) {
+		   		if (items [j] >= items [j + gap]) {
+					int swap = items [j];
+					items [j] = items [j + gap];
+					items [j + gap] = swap;
+		   		}
+	    	}
+	    }
+	}
+}
+
+/**
+ * Returns a point which is the result of converting the
+ * argument, which is specified in display relative coordinates,
+ * to coordinates relative to the receiver.
+ * <p>
+ * @param x the x coordinate to be translated
+ * @param y the y coordinate to be translated
+ * @return the translated coordinates
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.1
+ */
+public Point toControl (int x, int y) {
+	checkWidget ();
+	return display.map (null, this, x, y);
+}
+
+/**
+ * Returns a point which is the result of converting the
+ * argument, which is specified in display relative coordinates,
+ * to coordinates relative to the receiver.
+ * <p>
+ * @param point the point to be translated (must not be null)
+ * @return the translated coordinates
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Point toControl (Point point) {
+	checkWidget ();
+	if (point == null) error (SWT.ERROR_NULL_ARGUMENT);
+	return toControl (point.x, point.y);
+}
+
+/**
+ * Returns a point which is the result of converting the
+ * argument, which is specified in coordinates relative to
+ * the receiver, to display relative coordinates.
+ * <p>
+ * @param x the x coordinate to be translated
+ * @param y the y coordinate to be translated
+ * @return the translated coordinates
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.1
+ */
+public Point toDisplay (int x, int y) {
+	checkWidget ();
+	return display.map (this, null, x, y);
+}
+
+/**
+ * Returns a point which is the result of converting the
+ * argument, which is specified in coordinates relative to
+ * the receiver, to display relative coordinates.
+ * <p>
+ * @param point the point to be translated (must not be null)
+ * @return the translated coordinates
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Point toDisplay (Point point) {
+	checkWidget ();
+	if (point == null) error (SWT.ERROR_NULL_ARGUMENT);
+	return toDisplay (point.x, point.y);
+}
+
+boolean translateMnemonic (Event event, Control control) {
+	if (control == this) return false;
+	if (!isVisible () || !isEnabled ()) return false;
+	event.doit = mnemonicMatch (event.character);
+	return traverse (event);
+}
+
+boolean translateMnemonic (int e) {
+	int key = OS.KeyEventArgs_Key(e);
+	if (key < 0x20) return false;
+	int keyboardDevice = OS.KeyboardEventArgs_KeyboardDevice(e);
+	int modifiers = OS.KeyboardDevice_Modifiers(keyboardDevice);
+	OS.GCHandle_Free(keyboardDevice);
+	if (modifiers == 0) {
+		int code = traversalCode (key, e);
+		if ((code & SWT.TRAVERSE_MNEMONIC) == 0) return false;
+	} else {
+		if ((modifiers & OS.ModifierKeys_Alt) == 0) return false;
+	}
+	Decorations shell = menuShell ();
+	if (shell.isVisible () && shell.isEnabled ()) {
+		Event event = new Event ();
+		event.detail = SWT.TRAVERSE_MNEMONIC;
+		if (setKeyState (event, SWT.Traverse, e)) {
+			return translateMnemonic (event, null) || shell.translateMnemonic (event, this);
+		}
+	}
+	return false;
+}
+
+int traversalCode (int key, int event) {
+	int code = SWT.TRAVERSE_RETURN | SWT.TRAVERSE_TAB_NEXT |  SWT.TRAVERSE_TAB_PREVIOUS | SWT.TRAVERSE_PAGE_NEXT | SWT.TRAVERSE_PAGE_PREVIOUS;
+	Shell shell = getShell ();
+	if (shell.parent != null) code |= SWT.TRAVERSE_ESCAPE;
+	return code;
+}
+
+boolean translateTraversal (int e) {
+	int detail = SWT.TRAVERSE_NONE;
+	int key = OS.KeyEventArgs_Key(e);
+	int code = traversalCode (key, e);
+	boolean all = false;
+	switch (key) {
+		case OS.Key_Escape: {
+			all = true;
+			detail = SWT.TRAVERSE_ESCAPE;
+			break;
+		}
+		case OS.Key_Return: {
+			all = true;
+			detail = SWT.TRAVERSE_RETURN;
+			break;
+		}
+		case OS.Key_Tab: {
+			int keyboardDevice = OS.KeyboardEventArgs_KeyboardDevice (e);
+			int modifiers = OS.KeyboardDevice_Modifiers (keyboardDevice);
+			OS.GCHandle_Free (keyboardDevice);
+			boolean next = (modifiers & OS.ModifierKeys_Shift) == 0;
+			detail = next ? SWT.TRAVERSE_TAB_NEXT : SWT.TRAVERSE_TAB_PREVIOUS;
+			break;
+		}
+		case OS.Key_Up:
+		case OS.Key_Left: 
+		case OS.Key_Down:
+		case OS.Key_Right: {
+			boolean next = key == OS.Key_Down || key == OS.Key_Right;
+			detail = next ? SWT.TRAVERSE_ARROW_NEXT : SWT.TRAVERSE_ARROW_PREVIOUS;
+			break;
+		}
+		case OS.Key_PageUp:
+		case OS.Key_PageDown: {
+			all = true;
+			int keyboardDevice = OS.KeyboardEventArgs_KeyboardDevice (e);
+			int modifiers = OS.KeyboardDevice_Modifiers (keyboardDevice);
+			OS.GCHandle_Free (keyboardDevice);
+			if ((modifiers & OS.ModifierKeys_Control) == 0) return false;
+			detail = key == OS.Key_PageDown ? SWT.TRAVERSE_PAGE_NEXT : SWT.TRAVERSE_PAGE_PREVIOUS;
+			break;
+		}
+		default:
+			return false;
+	}
+	Event event = new Event ();
+	event.doit = (code & detail) != 0;
+	event.detail = detail;
+	event.time = OS.InputEventArgs_Timestamp (e);
+	if (!setKeyState (event, SWT.Traverse, e)) return false;
+	Shell shell = getShell ();
+	Control control = this;
+	do {
+		if (control.traverse (event)) return true;
+		if (!event.doit && control.hooks (SWT.Traverse)) return false;
+		if (control == shell) return false;
+		control = control.parent;
+	} while (all && control != null);
+	return false;
+}
+
+boolean traverse (Event event) {
+	/*
+	* It is possible (but unlikely), that application
+	* code could have disposed the widget in the traverse
+	* event.  If this happens, return true to stop further
+	* event processing.
+	*/	
+	sendEvent (SWT.Traverse, event);
+	if (isDisposed ()) return true;
+	if (!event.doit) return false;
+	switch (event.detail) {
+		case SWT.TRAVERSE_NONE:			return true;
+		case SWT.TRAVERSE_ESCAPE:			return traverseEscape ();
+		case SWT.TRAVERSE_RETURN:			return traverseReturn ();
+		case SWT.TRAVERSE_TAB_NEXT:		return traverseGroup (true);
+		case SWT.TRAVERSE_TAB_PREVIOUS:	return traverseGroup (false);
+		case SWT.TRAVERSE_ARROW_NEXT:		return traverseItem (true);
+		case SWT.TRAVERSE_ARROW_PREVIOUS:	return traverseItem (false);
+		case SWT.TRAVERSE_MNEMONIC:		return traverseMnemonic (event.character);	
+		case SWT.TRAVERSE_PAGE_NEXT:		return traversePage (true);
+		case SWT.TRAVERSE_PAGE_PREVIOUS:	return traversePage (false);
+	}
+	return false;
+}
+
+/**
+ * Based on the argument, perform one of the expected platform
+ * traversal action. The argument should be one of the constants:
+ * <code>SWT.TRAVERSE_ESCAPE</code>, <code>SWT.TRAVERSE_RETURN</code>, 
+ * <code>SWT.TRAVERSE_TAB_NEXT</code>, <code>SWT.TRAVERSE_TAB_PREVIOUS</code>, 
+ * <code>SWT.TRAVERSE_ARROW_NEXT</code> and <code>SWT.TRAVERSE_ARROW_PREVIOUS</code>.
+ *
+ * @param traversal the type of traversal
+ * @return true if the traversal succeeded
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean traverse (int traversal) {
+	checkWidget ();
+	Event event = new Event ();
+	event.doit = true;
+	event.detail = traversal;
+	return traverse (event);
+}
+
+boolean traverseEscape () {
+	return false;
+}
+
+boolean traverseGroup (boolean next) {
+	Control root = computeTabRoot ();
+	Control group = computeTabGroup ();
+	Control [] list = root.computeTabList ();
+	int length = list.length;
+	int index = 0;
+	while (index < length) {
+		if (list [index] == group) break;
+		index++;
+	}
+	/*
+	* It is possible (but unlikely), that application
+	* code could have disposed the widget in focus in
+	* or out events.  Ensure that a disposed widget is
+	* not accessed.
+	*/
+	if (index == length) return false;
+	int start = index, offset = (next) ? 1 : -1;
+	while ((index = ((index + offset + length) % length)) != start) {
+		Control control = list [index];
+		if (!control.isDisposed () && control.setTabGroupFocus ()) {
+			return true;
+		}
+	}
+	if (group.isDisposed ()) return false;
+	return group.setTabGroupFocus ();
+}
+
+boolean traverseItem (boolean next) {
+	Control [] children = parent._getChildren ();
+	int length = children.length;
+	int index = 0;
+	while (index < length) {
+		if (children [index] == this) break;
+		index++;
+	}
+	/*
+	* It is possible (but unlikely), that application
+	* code could have disposed the widget in focus in
+	* or out events.  Ensure that a disposed widget is
+	* not accessed.
+	*/
+	if (index == length) return false;
+	int start = index, offset = (next) ? 1 : -1;
+	while ((index = (index + offset + length) % length) != start) {
+		Control child = children [index];
+		if (!child.isDisposed () && child.isTabItem ()) {
+			if (child.setTabItemFocus ()) return true;
+		}
+	}
+	return false;
+}
+
+boolean traverseMnemonic (char key) {
+	return mnemonicHit (key);
+}
+
+boolean traversePage (boolean next) {
+	return false;
+}
+
+boolean traverseReturn () {
+	return false;
+}
+
+/**
+ * Forces all outstanding paint requests for the widget
+ * to be processed before this method returns. If there
+ * are no outstanding paint request, this method does
+ * nothing.
+ * <p>
+ * Note: This method does not cause a redraw.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #redraw()
+ * @see #redraw(int, int, int, int, boolean)
+ * @see PaintListener
+ * @see SWT#Paint
+ */
+public void update () {
+	checkWidget ();
+	update (false);
+}
+
+void update (boolean all) {
+	checkWidget ();
+	//TODO 
+//	if (OS.IsWinCE) {
+//		OS.UpdateWindow (handle);
+//	} else {
+//		int flags = OS.RDW_UPDATENOW;
+//		if (all) flags |= OS.RDW_ALLCHILDREN;
+//		OS.RedrawWindow (handle, null, 0, flags);
+//	}
+}
+
+void updateBackgroundColor () {
+//	Control control = findBackgroundControl ();
+//	if (control == null) control = this;
+//	setBackgroundPixel (control.background);
+}
+
+void updateBackgroundImage () {
+//	Control control = findBackgroundControl ();
+//	Image image = control != null ? control.backgroundImage : backgroundImage;
+//	setBackgroundImage (image != null ? image.handle : 0);
+}
+
+void updateBackgroundMode () {
+	int oldState = state & PARENT_BACKGROUND;
+	checkBackground ();
+	if (oldState != (state & PARENT_BACKGROUND)) {
+		setBackground ();
+	}
+}
+
+void updateFont (Font oldFont, Font newFont) {
+	if (getFont ().equals (oldFont)) setFont (newFont);
+}
+
+void updateImages () {
+	/* Do nothing */
+}
+
+void updateLayout (boolean resize, boolean all) {
+	/* Do nothing */
+}
+
+int widgetParent () {
+	return parent.handle;
+}
+
+/**
+ * Changes the parent of the widget to be the one provided if
+ * the underlying operating system supports this feature.
+ * Returns <code>true</code> if the parent is successfully changed.
+ *
+ * @param parent the new parent for the control.
+ * @return <code>true</code> if the parent is changed and <code>false</code> otherwise.
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is <code>null</code></li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *	</ul>
+ */
+public boolean setParent (Composite parent) {
+	checkWidget ();
+	if (parent == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (parent.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	if (this.parent == parent) return true;
+	if (!isReparentable ()) return false;
+	return false;
+}
+
+}
+
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/CoolBar.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/CoolBar.java
new file mode 100644
index 0000000..2b35cec
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/CoolBar.java
@@ -0,0 +1,709 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class provide an area for dynamically
+ * positioning the items they contain.
+ * <p>
+ * The item children that may be added to instances of this class
+ * must be of type <code>CoolItem</code>.
+ * </p><p>
+ * Note that although this class is a subclass of <code>Composite</code>,
+ * it does not make sense to add <code>Control</code> children to it,
+ * or set a layout on it.
+ * </p><p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>FLAT, HORIZONTAL, VERTICAL</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * </p><p>
+ * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#coolbar">CoolBar snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class CoolBar extends Composite {
+	Control [] children;
+	CoolItem [] items;
+	int parentingHandle;
+	int itemCount, childCount;
+	
+	//TEMPORARY CODE
+	static boolean IsVertical;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see SWT#FLAT
+ * @see SWT#HORIZONTAL
+ * @see SWT#VERTICAL
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public CoolBar (Composite parent, int style) {
+	super (parent, checkStyle (style));
+	if ((style & SWT.VERTICAL) != 0) {
+		this.style |= SWT.VERTICAL;
+	} else {
+		this.style |= SWT.HORIZONTAL;
+	}
+}
+
+static int checkStyle (int style) {
+	style |= SWT.NO_FOCUS;
+	IsVertical = (style & SWT.V_SCROLL) != 0;
+	/*
+	* Even though it is legal to create this widget
+	* with scroll bars, they serve no useful purpose
+	* because they do not automatically scroll the
+	* widget's client area.  The fix is to clear
+	* the SWT style.
+	*/
+	return style & ~(SWT.H_SCROLL | SWT.V_SCROLL);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+void addChild (Control widget) {
+	super.addChild (widget);
+	if (childCount == children.length) {
+		Control [] newChildren = new Control [childCount + 4];
+		System.arraycopy (children, 0, newChildren, 0, childCount);
+		children = newChildren;
+	}
+	children [childCount++] = widget;
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget ();
+	return computeSize (handle, wHint, hHint, changed);
+}
+
+void createHandle () {
+	parentingHandle = OS.gcnew_Canvas ();
+	if (parentingHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	handle = OS.gcnew_ToolBarTray ();
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	int children = OS.Panel_Children (parentingHandle);
+	OS.UIElementCollection_Add (children, handle);
+	OS.GCHandle_Free (children);
+	if (IsVertical) OS.ToolBarTray_Orientation (handle, OS.Orientation_Vertical);
+}
+
+void createItem (CoolItem item, int index) {
+	if (!(0 <= index && index <= itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	item.createWidget ();
+	int toolbars = OS.ToolBarTray_ToolBars (handle);
+	int itemHandle = item.topHandle ();
+	OS.IList_Insert (toolbars, index, item.topHandle ());
+	int count = OS.ICollection_Count (toolbars);
+	if (itemCount == count) error (SWT.ERROR_ITEM_NOT_ADDED);
+	int band = 0;
+	int bandIndex = 0;
+	if (index != itemCount) {
+		band = OS.ToolBar_Band (items [index].topHandle ());
+		bandIndex = OS.ToolBar_BandIndex (items [index].topHandle ());
+		for (int i=0; i<count; i++) {
+			int current = OS.IList_default (toolbars, i);
+			int currentBand = OS.ToolBar_Band (current);
+			int currentIndex = OS.ToolBar_BandIndex (current);
+			if (currentBand == band && currentIndex >= bandIndex) {
+				OS.ToolBar_BandIndex (current, currentIndex + 1);
+			}
+			OS.GCHandle_Free (current);
+		}
+	} else {
+		if (itemCount > 0) {
+			int [] log2vis = logicalToVisualIndices ();
+			int lastItem = items [log2vis [itemCount - 1]].topHandle ();
+			band = OS.ToolBar_Band (lastItem);
+			bandIndex = OS.ToolBar_BandIndex (lastItem) + 1;
+		}
+	}
+	OS.ToolBar_Band (itemHandle, band);
+	OS.ToolBar_BandIndex (itemHandle, bandIndex);
+	OS.GCHandle_Free (toolbars);
+	if (itemCount == items.length) {
+		CoolItem [] newItems = new CoolItem [items.length + 4];
+		System.arraycopy (items, 0, newItems, 0, items.length);
+		items = newItems;
+	}
+	System.arraycopy (items, index, items, index + 1, itemCount - index);
+	items [index] = item;	
+	itemCount++;
+}
+
+void createWidget () {
+	super.createWidget ();
+	items = new CoolItem [4];
+	children = new Control [4];
+}
+
+int defaultBackground () {
+	return OS.Colors_Transparent;
+}
+
+void deregister () {
+	super.deregister ();
+	display.removeWidget (parentingHandle);
+}
+
+void destroyItem (CoolItem item) {
+	int toolbars = OS.ToolBarTray_ToolBars (handle);
+	int itemHandle = item.topHandle ();
+	int band =  OS.ToolBar_Band (itemHandle);
+	int bandIndex = OS.ToolBar_BandIndex (itemHandle);
+	OS.IList_Remove (toolbars, itemHandle);
+	int count = OS.ICollection_Count (toolbars);
+	if (itemCount == count) error (SWT.ERROR_ITEM_NOT_REMOVED);
+	itemCount--;
+	for (int i=0; i<itemCount; i++) {
+		int current = OS.IList_default (toolbars, i);
+		int currentBand = OS.ToolBar_Band (current);
+		int currentIndex = OS.ToolBar_BandIndex (current);
+		if (currentBand == band && currentIndex >= bandIndex) {
+			OS.ToolBar_BandIndex (current, currentIndex - 1);
+		}
+		OS.GCHandle_Free (current);
+	}
+	OS.GCHandle_Free (toolbars);
+	int index = 0;
+	while (index < items.length) {
+		if (items [index] == item) break;
+		index++;
+	}
+	System.arraycopy (items, index + 1, items, index, itemCount - index);
+	items [itemCount] = null;
+}
+
+Control [] _getChildren () {
+	// return children in reverse order.
+	Control[] result = new Control [childCount];
+	for (int i =0; i < childCount; i++) {
+		result [childCount - i - 1] = children [i]; 
+	}
+	return result;
+}
+
+int [] logicalToVisualIndices () {
+	int [] bandLengths = new int [4];
+	for (int i = 0; i < itemCount; i++) {
+		int topHandle = items [i].topHandle ();
+		int band = OS.ToolBar_Band (topHandle);
+		int bandIndex = OS.ToolBar_BandIndex (topHandle);
+		if (band >= bandLengths.length) {
+			int [] newLengths = new int [band + 4];
+			System.arraycopy (bandLengths, 0, newLengths, 0, bandLengths.length);
+			bandLengths = newLengths;
+		}
+		if (bandIndex + 1 > bandLengths [band]) bandLengths [band] = bandIndex + 1;
+	}
+	int [] result = new int [itemCount];
+	for (int i = 0; i < itemCount; i++) {
+		int topHandle = items [i].topHandle ();
+		int band = OS.ToolBar_Band (topHandle);
+		int bandIndex = OS.ToolBar_BandIndex (topHandle);
+		int index = bandIndex;
+		for (int j=0; j<band; j++) index += bandLengths [j];
+		result [index] = i;
+	}
+	return result;
+}
+
+/**
+ * Returns the item that is currently displayed at the given,
+ * zero-relative index. Throws an exception if the index is
+ * out of range.
+ *
+ * @param index the visual index of the item to return
+ * @return the item at the given visual index
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public CoolItem getItem (int index) {
+	checkWidget ();
+	if (index < 0 || index >= itemCount) error (SWT.ERROR_INVALID_RANGE);
+	int [] log2vis = logicalToVisualIndices ();
+	return items [log2vis [index]];
+}
+
+/**
+ * Returns the number of items contained in the receiver.
+ *
+ * @return the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemCount () {
+	checkWidget ();
+	return itemCount;
+}
+
+/**
+ * Returns an array of zero-relative ints that map
+ * the creation order of the receiver's items to the
+ * order in which they are currently being displayed.
+ * <p>
+ * Specifically, the indices of the returned array represent
+ * the current visual order of the items, and the contents
+ * of the array represent the creation order of the items.
+ * </p><p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the current visual order of the receiver's items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int [] getItemOrder () {
+	checkWidget ();
+	return logicalToVisualIndices ();
+}
+
+/**
+ * Returns an array of <code>CoolItem</code>s in the order
+ * in which they are currently being displayed.
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the receiver's items in their current visual order
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public CoolItem [] getItems () {
+	checkWidget ();
+	CoolItem [] result = new CoolItem [itemCount];
+	int [] log2vis = logicalToVisualIndices ();
+	for (int i = 0; i < itemCount; i++) {
+		result [i] = items [log2vis [i]];
+	}
+	return result;
+}
+
+/**
+ * Returns an array of points whose x and y coordinates describe
+ * the widths and heights (respectively) of the items in the receiver
+ * in the order in which they are currently being displayed.
+ *
+ * @return the receiver's item sizes in their current visual order
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Point [] getItemSizes () {
+	checkWidget ();	
+	int [] log2vis = logicalToVisualIndices ();
+	Point [] result = new Point [itemCount];
+	for (int i = 0; i < itemCount; i++) {
+		result [i] = items [log2vis [i]].getSize ();
+	}
+	return result;
+}
+
+Point getLocation (Control child) {
+	int topHandle = child.topHandle ();
+	int point = OS.gcnew_Point (0, 0);
+	if (point == 0) error (SWT.ERROR_NO_HANDLES);
+	int location = OS.UIElement_TranslatePoint (topHandle, point, handle);
+	int x = (int) OS.Point_X (location);
+	int y = (int) OS.Point_Y (location);
+	OS.GCHandle_Free (point);
+	OS.GCHandle_Free (location);
+	return new Point (x, y);
+}
+
+/**
+ * Returns whether or not the receiver is 'locked'. When a coolbar
+ * is locked, its items cannot be repositioned.
+ *
+ * @return true if the coolbar is locked, false otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.0
+ */
+public boolean getLocked () {
+	checkWidget ();
+	return OS.ToolBarTray_IsLocked (handle);
+}
+
+/**
+ * Returns an array of ints that describe the zero-relative
+ * indices of any item(s) in the receiver that will begin on
+ * a new row. The 0th visible item always begins the first row,
+ * therefore it does not count as a wrap index.
+ *
+ * @return an array containing the receiver's wrap indices, or an empty array if all items are in one row
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int [] getWrapIndices () {
+	checkWidget ();
+	int bands = 1;
+	int [] bandLengths = new int [4];
+	for (int i = 0; i < itemCount; i++) {
+		int topHandle = items [i].topHandle ();
+		int band = OS.ToolBar_Band (topHandle);
+		int bandIndex = OS.ToolBar_BandIndex (topHandle);
+		if (band >= bandLengths.length) {
+			int [] newLengths = new int [band + 4];
+			System.arraycopy (bandLengths, 0, newLengths, 0, bandLengths.length);
+			bandLengths = newLengths;
+		}
+		if (band != 0 && bandLengths [band] == 0) bands ++;
+		if (bandIndex + 1 > bandLengths [band]) bandLengths [band] = bandIndex + 1;
+	}
+	if (bands == 1) return new int [0];
+	int [] result = new int [bands-1];
+	int sum = 0;
+	for (int i = 0; i < result.length; i++) {
+		sum += bandLengths [i];
+		result [i] = sum;
+	}
+	return result;
+}
+
+void HandleSizeChanged (int sender, int e) {
+	postEvent (SWT.Resize);
+}
+
+void hookEvents () {
+	super.hookEvents ();
+	int handler = OS.gcnew_SizeChangedEventHandler (jniRef, "HandleSizeChanged");
+	OS.FrameworkElement_SizeChanged (handle, handler);
+	OS.GCHandle_Free (handler);
+}
+
+/**
+ * Searches the receiver's items in the order they are currently
+ * being displayed, starting at the first item (index 0), until
+ * an item is found that is equal to the argument, and returns
+ * the index of that item. If no item is found, returns -1.
+ *
+ * @param item the search item
+ * @return the visual order index of the search item, or -1 if the item is not found
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item is disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int indexOf (CoolItem item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (item.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	for (int i = 0; i < itemCount; i++) {
+		if (item.equals (items [i])) {
+			int [] log2vis = logicalToVisualIndices ();
+			return log2vis [i];
+		}
+	}
+	return -1;
+}
+
+int parentingHandle () {
+	return parentingHandle;
+}
+
+void register () {
+	super.register ();
+	display.addWidget (parentingHandle, this);
+}
+
+void releaseChildren (boolean destroy) {
+	for (int i=0; i<itemCount; i++) {
+		CoolItem item = items [i];
+		if (item != null && !item.isDisposed ()) item.release (false);
+	}
+	super.releaseChildren (destroy);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (parentingHandle != 0) OS.GCHandle_Free (parentingHandle);
+	parentingHandle = 0;
+}
+
+void removeChild (Control control) {
+	super.removeChild (control);
+	int index = 0;
+	while (index < childCount) {
+		if (children [index] == control) break;
+		index++;
+	}
+	if (index == childCount) return;
+	System.arraycopy (children, index+1, children, index, --childCount - index);
+	children [childCount] = null;
+}
+
+void removeControl (Control control) {
+	super.removeControl (control);
+	for (int i=0; i<itemCount; i++) {
+		CoolItem item = items [i];
+		if (item.control == control) {
+			item.setControl (null);
+			break;
+		}
+	}
+}
+
+int setBounds (int x, int y, int width, int height, int flags) {
+	int result = super.setBounds (x, y, width, height, flags);
+	if ((result & RESIZED) != 0) {
+		if ((style & SWT.VERTICAL) != 0) {
+			OS.FrameworkElement_Height (handle, height);
+		} else {
+			OS.FrameworkElement_Width (handle, width);
+		}
+	}
+	return result;
+}
+
+/**
+ * Sets the receiver's item order, wrap indices, and item sizes
+ * all at once. This method is typically used to restore the
+ * displayed state of the receiver to a previously stored state.
+ * <p>
+ * The item order is the order in which the items in the receiver
+ * should be displayed, given in terms of the zero-relative ordering
+ * of when the items were added.
+ * </p><p>
+ * The wrap indices are the indices of all item(s) in the receiver
+ * that will begin on a new row. The indices are given in the order
+ * specified by the item order. The 0th item always begins the first
+ * row, therefore it does not count as a wrap index. If wrap indices
+ * is null or empty, the items will be placed on one line.
+ * </p><p>
+ * The sizes are specified in an array of points whose x and y
+ * coordinates describe the new widths and heights (respectively)
+ * of the receiver's items in the order specified by the item order.
+ * </p>
+ *
+ * @param itemOrder an array of indices that describe the new order to display the items in
+ * @param wrapIndices an array of wrap indices, or null
+ * @param sizes an array containing the new sizes for each of the receiver's items in visual order
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if item order or sizes is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if item order or sizes is not the same length as the number of items</li>
+ * </ul>
+ */
+public void setItemLayout (int [] itemOrder, int [] wrapIndices, Point [] sizes) {
+	checkWidget ();
+	setItemOrder (itemOrder);
+	setWrapIndices (wrapIndices);
+	setItemSizes (sizes);
+}
+
+/*
+ * Sets the order that the items in the receiver should 
+ * be displayed in to the given argument which is described
+ * in terms of the zero-relative ordering of when the items
+ * were added.
+ *
+ * @param itemOrder the new order to display the items in
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item order is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item order is not the same length as the number of items</li>
+ * </ul>
+ */
+void setItemOrder (int [] itemOrder) {
+	checkWidget ();
+	if (itemOrder == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (itemOrder.length != itemCount) error (SWT.ERROR_INVALID_ARGUMENT);
+	/* Ensure that itemOrder does not contain any duplicates. */
+	boolean [] set = new boolean [itemCount];
+	for (int i=0; i<itemOrder.length; i++) {
+		int index = itemOrder [i];
+		if (index < 0 || index >= itemCount) error (SWT.ERROR_INVALID_RANGE);
+		if (set [index]) error (SWT.ERROR_INVALID_ARGUMENT);
+		set [index] = true;
+	}
+	for (int i=0; i<itemCount; i++) {
+		CoolItem item = items [itemOrder [i]];
+		int itemHandle = item.topHandle (); 
+		OS.ToolBar_Band (itemHandle, 0);
+		OS.ToolBar_BandIndex (itemHandle, i);
+	}
+}
+
+/*
+ * Sets the width and height of the receiver's items to the ones
+ * specified by the argument, which is an array of points whose x
+ * and y coordinates describe the widths and heights (respectively)
+ * in the order in which the items are currently being displayed.
+ *
+ * @param sizes an array containing the new sizes for each of the receiver's items in visual order
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array of sizes is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the array of sizes is not the same length as the number of items</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+void setItemSizes (Point [] sizes) {
+	if (sizes == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (sizes.length != itemCount) error (SWT.ERROR_INVALID_ARGUMENT);
+	int [] log2vis = logicalToVisualIndices ();
+	for (int i=0; i<itemCount; i++) {
+		items [log2vis [i]].setSize (sizes [i].x, sizes [i].y);
+	}
+}
+
+/**
+ * Sets whether or not the receiver is 'locked'. When a coolbar
+ * is locked, its items cannot be repositioned.
+ *
+ * @param locked lock the coolbar if true, otherwise unlock the coolbar
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.0
+ */
+public void setLocked (boolean locked) {
+	checkWidget ();
+	OS.ToolBarTray_IsLocked (handle, locked);
+}
+
+/**
+ * Sets the indices of all item(s) in the receiver that will
+ * begin on a new row. The indices are given in the order in
+ * which they are currently being displayed. The 0th item
+ * always begins the first row, therefore it does not count
+ * as a wrap index. If indices is null or empty, the items
+ * will be placed on one line.
+ *
+ * @param indices an array of wrap indices, or null
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setWrapIndices (int [] indices) {
+	checkWidget ();
+	if (indices == null) indices = new int [0];
+	int count = getItemCount ();
+	for (int i=0; i<indices.length; i++) {
+		if (indices [i] < 0 || indices [i] >= count) {
+			error (SWT.ERROR_INVALID_RANGE);
+		}	
+	}
+	sortAscending (indices);
+	int [] log2vis = logicalToVisualIndices ();
+	int band = 0;
+	int bandIndex = 0;
+	int wrapIndex = 0;
+	for (int i = 0; i < itemCount; i++) {
+		int wrap = indices.length > wrapIndex ? indices [wrapIndex] : itemCount;
+		if (i == wrap) {
+			if (wrap != 0) {
+				band ++;
+				bandIndex = 0;
+			}
+			wrapIndex ++;
+		}
+		int topHandle = items [log2vis [i]].topHandle ();
+		OS.ToolBar_Band (topHandle, band);
+		OS.ToolBar_BandIndex (topHandle, bandIndex);
+		bandIndex ++;
+	}
+}
+
+int topHandle () {
+	return parentingHandle;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/CoolItem.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/CoolItem.java
new file mode 100644
index 0000000..87ac42f
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/CoolItem.java
@@ -0,0 +1,665 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * Instances of this class are selectable user interface
+ * objects that represent the dynamically positionable
+ * areas of a <code>CoolBar</code>.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>DROP_DOWN</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class CoolItem extends Item {
+	CoolBar parent;
+	Control control;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>CoolBar</code>) and a style value
+ * describing its behavior and appearance. The item is added
+ * to the end of the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#DROP_DOWN
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public CoolItem (CoolBar parent, int style) {
+	this (parent, style, parent.itemCount);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>CoolBar</code>), a style value
+ * describing its behavior and appearance, and the index
+ * at which to place it in the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ * @param index the zero-relative index at which to store the receiver in its parent
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the parent (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#DROP_DOWN
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public CoolItem (CoolBar parent, int style, int index) {
+	super (parent, style);
+	this.parent = parent;
+	parent.createItem (this, index);
+	updateLayout (handle);
+	setButtonVisibility (OS.Visibility_Collapsed);
+}
+
+/**
+ * Adds the listener to the collection of listeners that will
+ * be notified when the control is selected by the user, by sending it one
+ * of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * If <code>widgetSelected</code> is called when the mouse is over
+ * the drop-down arrow (or 'chevron') portion of the cool item,
+ * the event object detail field contains the value <code>SWT.ARROW</code>,
+ * and the x and y fields in the event object represent the point at
+ * the bottom left of the chevron, where the menu should be popped up.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the control is selected by the user
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ * 
+ * @since 2.0
+ */
+public void addSelectionListener(SelectionListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+void createHandle () {
+	handle = OS.gcnew_ToolBar ();
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+}
+
+void createWidget () {
+	super.createWidget ();
+	int background = OS.Brushes_Transparent ();
+	OS.Control_Background (handle, background);
+	OS.GCHandle_Free (background);
+}
+
+/**
+ * Returns the preferred size of the receiver.
+ * <p>
+ * The <em>preferred size</em> of a <code>CoolItem</code> is the size that
+ * it would best be displayed at. The width hint and height hint arguments
+ * allow the caller to ask the instance questions such as "Given a particular
+ * width, how high does it need to be to show all of the contents?"
+ * To indicate that the caller does not wish to constrain a particular 
+ * dimension, the constant <code>SWT.DEFAULT</code> is passed for the hint. 
+ * </p>
+ *
+ * @param wHint the width hint (can be <code>SWT.DEFAULT</code>)
+ * @param hHint the height hint (can be <code>SWT.DEFAULT</code>)
+ * @return the preferred size
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Layout
+ * @see #getBounds
+ * @see #getSize
+ * @see Control#getBorderWidth
+ * @see Scrollable#computeTrim
+ * @see Scrollable#getClientArea
+ */
+public Point computeSize (int wHint, int hHint) {
+	checkWidget ();
+	if (isToolBar (control)) {
+		return control.computeSize (SWT.DEFAULT, SWT.DEFAULT);	
+	}
+	int template = OS.Control_Template (handle);
+	int partName = createDotNetString ("PART_ToolBarPanel", false);
+	int part = OS.FrameworkTemplate_FindName (template, partName, handle);
+	int width = wHint, height = hHint;
+	width = Math.max (0, width);
+	height = Math.max (0, height);
+	int margin = OS.FrameworkElement_Margin (part);
+	width += OS.Thickness_Left (margin) + OS.Thickness_Right (margin);
+	height += OS.Thickness_Top (margin) + OS.Thickness_Bottom (margin);
+	OS.GCHandle_Free (partName);
+	OS.GCHandle_Free (part);
+	OS.GCHandle_Free (margin);
+	
+	partName = createDotNetString ("ToolBarThumb", false);
+	part = OS.FrameworkTemplate_FindName (template, partName, handle);
+	width += OS.FrameworkElement_Width (part);	
+	OS.GCHandle_Free (partName);
+	OS.GCHandle_Free (part);
+	OS.GCHandle_Free (template);
+	return new Point (width, height);
+}
+
+void destroyWidget () {
+	parent.destroyItem (this);
+	releaseHandle ();
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location
+ * relative to its parent.
+ *
+ * @return the receiver's bounding rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Rectangle getBounds () {
+	checkWidget ();
+	int parentHandle = parent.handle;
+	int topHandle = topHandle ();
+	int point = OS.gcnew_Point (0, 0);
+	if (point == 0) error (SWT.ERROR_NO_HANDLES);
+	int location = OS.UIElement_TranslatePoint (topHandle, point, parentHandle);
+	int x = (int) OS.Point_X (location);
+	int y = (int) OS.Point_Y (location);
+	OS.GCHandle_Free (point);
+	OS.GCHandle_Free (location);
+	int width = (int) OS.FrameworkElement_ActualWidth (topHandle);
+	int height = (int) OS.FrameworkElement_ActualHeight (topHandle);
+	return new Rectangle (x, y, width, height);
+}
+
+/**
+ * Returns the control that is associated with the receiver.
+ *
+ * @return the control that is contained by the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Control getControl () {
+	checkWidget ();
+	return control;
+}
+
+/**
+ * Returns the minimum size that the cool item can
+ * be resized to using the cool item's gripper.
+ * 
+ * @return a point containing the minimum width and height of the cool item, in pixels
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.0
+ */
+public Point getMinimumSize () {
+	checkWidget ();
+	int width = (int) OS.FrameworkElement_MinWidth (handle);
+	int height = (int) OS.FrameworkElement_MinHeight (handle);
+	return new Point (width, height);
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>CoolBar</code>.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public CoolBar getParent () {
+	checkWidget ();
+	return parent;
+}
+
+/**
+ * Returns a point describing the receiver's ideal size.
+ * The x coordinate of the result is the ideal width of the receiver.
+ * The y coordinate of the result is the ideal height of the receiver.
+ *
+ * @return the receiver's ideal size
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Point getPreferredSize () {
+	checkWidget ();
+	return getSize ();
+}
+
+/**
+ * Returns a point describing the receiver's size. The
+ * x coordinate of the result is the width of the receiver.
+ * The y coordinate of the result is the height of the
+ * receiver.
+ *
+ * @return the receiver's size
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Point getSize() {
+	checkWidget ();
+	int width = (int) OS.FrameworkElement_Width (handle);
+	int height = (int) OS.FrameworkElement_Height (handle);
+	return new Point (width, height);
+}
+
+void HandleSizeChanged (int sender, int e) {
+	if (isToolBar (control)) {
+		ToolBar toolbar = (ToolBar) control;
+		boolean overflow = OS.ToolBar_HasOverflowItems (toolbar.handle);
+		toolbar.setButtonVisibility (overflow ? OS.Visibility_Visible : OS.Visibility_Collapsed);
+	} else {
+		boolean overflow = OS.ToolBar_HasOverflowItems (handle);
+		setButtonVisibility (overflow ? OS.Visibility_Visible : OS.Visibility_Collapsed);
+		if (control != null) {
+			int template = OS.Control_Template (handle);
+			int partName = createDotNetString ("PART_ToolBarPanel", false);
+			int part = OS.FrameworkTemplate_FindName (template, partName, handle);
+			int width = (int) OS.FrameworkElement_ActualWidth (part);
+			int height = (int) OS.FrameworkElement_ActualHeight (part);
+			control.setSize (width, height);
+			OS.GCHandle_Free (part);
+			OS.GCHandle_Free (partName);
+			OS.GCHandle_Free (template);
+		}
+	}
+}
+
+void hookEvents () {
+	super.hookEvents ();
+	int handler = OS.gcnew_SizeChangedEventHandler (jniRef, "HandleSizeChanged");
+	OS.FrameworkElement_SizeChanged (handle, handler);
+	OS.GCHandle_Free (handler);
+}
+
+boolean isToolBar (Control control) {
+	if (control == null || control.isDisposed ()) return false;
+	int type = OS.ToolBar_typeid ();
+	boolean result = OS.Type_IsInstanceOfType (type, control.handle);
+	OS.GCHandle_Free (type);
+	return result;
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (handle != 0) OS.GCHandle_Free (handle);
+	handle = 0;
+	parent = null;
+}
+
+/**
+ * Removes the listener from the collection of listeners that
+ * will be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ * 
+ * @since 2.0
+ */
+public void removeSelectionListener(SelectionListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+void setButtonVisibility (byte visibility) {
+	int template = OS.Control_Template (handle);
+	int overFlowName = createDotNetString ("OverflowGrid", false);
+	int overFlowGrid = OS.FrameworkTemplate_FindName (template, overFlowName, handle);
+	if (overFlowGrid != 0) {
+		OS.UIElement_Visibility (overFlowGrid, visibility);
+		OS.GCHandle_Free (overFlowGrid);
+	}
+	OS.GCHandle_Free (overFlowName);
+	int borderName = createDotNetString ("MainPanelBorder", false);
+	int border = OS.FrameworkTemplate_FindName (template, borderName, handle);
+	if (border != 0) {
+		int right = visibility == OS.Visibility_Collapsed ? 0 : 11;
+		int margin = OS.gcnew_Thickness (0, 0, right, 0);
+		OS.FrameworkElement_Margin (border, margin);
+		OS.GCHandle_Free (border);
+		OS.GCHandle_Free (margin);
+	}
+	OS.GCHandle_Free (borderName);
+	OS.GCHandle_Free (template);
+}
+
+/**
+ * Sets the control that is associated with the receiver
+ * to the argument.
+ *
+ * @param control the new control that will be contained by the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the control has been disposed</li> 
+ *    <li>ERROR_INVALID_PARENT - if the control is not in the same widget tree</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setControl (Control control) {
+	checkWidget ();
+	if (control != null) {
+		if (control.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT);
+		if (control.parent != parent) error (SWT.ERROR_INVALID_PARENT);
+	}
+	if (this.control != null && this.control.isDisposed ()) {
+		this.control = null;
+	}
+	int topHandle = topHandle ();
+	int toolbars = OS.ToolBarTray_ToolBars (parent.handle);
+	int index = OS.IList_IndexOf (toolbars, topHandle);
+	int band = OS.ToolBar_Band (topHandle);
+	int bandIndex = OS.ToolBar_BandIndex (topHandle);
+	Control oldControl = this.control, newControl = control;	
+	this.control = control;
+	if (oldControl != null) {
+		if (isToolBar (oldControl)) {
+			ToolBar toolbar = (ToolBar) oldControl;
+			toolbar.setThumbVisibility (OS.Visibility_Collapsed);
+			toolbar.setButtonVisibility (OS.Visibility_Collapsed);
+			OS.IList_Remove (toolbars, toolbar.handle);
+			int children = OS.ToolBarTray_ToolBars (toolbar.trayHandle);
+			OS.IList_Add (children, toolbar.handle);
+			OS.GCHandle_Free (children);
+			OS.IList_Insert (toolbars, index, handle);
+			OS.ToolBar_Band (handle, band);
+			OS.ToolBar_BandIndex (handle, bandIndex);
+		} else {
+			int controlHandle = oldControl.topHandle ();
+			int items = OS.ItemsControl_Items (handle);
+			OS.ItemCollection_Remove (items, controlHandle);
+			OS.GCHandle_Free (items);
+			int children = OS.Panel_Children (parent.parentingHandle);
+			OS.UIElementCollection_Add (children, controlHandle);
+			OS.GCHandle_Free (children);
+		}
+	}
+	if (newControl != null) {
+		if (isToolBar (newControl)) {
+			ToolBar toolbar = (ToolBar) newControl;
+			int controlHandle = toolbar.handle;
+			int children = OS.ToolBarTray_ToolBars (toolbar.trayHandle);
+			OS.IList_Remove (children, controlHandle);
+			OS.GCHandle_Free (children);
+			OS.IList_Remove (toolbars, handle);
+			OS.IList_Insert (toolbars, index, controlHandle);
+			
+			boolean locked = OS.ToolBarTray_IsLocked (parent.handle);
+			boolean overflow = OS.ToolBar_HasOverflowItems (controlHandle);
+			toolbar.setThumbVisibility (locked ? OS.Visibility_Collapsed : OS.Visibility_Visible);
+			toolbar.setButtonVisibility (overflow ? OS.Visibility_Visible : OS.Visibility_Collapsed);
+			OS.ToolBar_Band (controlHandle, band);
+			OS.ToolBar_BandIndex (controlHandle, bandIndex);
+			double width = OS.FrameworkElement_Width (handle);
+			if (width > 0) OS.FrameworkElement_Width (controlHandle, width); 
+			double height =  OS.FrameworkElement_Height (handle);
+			if (height > 0) OS.FrameworkElement_Height (controlHandle, height);
+			double minWidth = OS.FrameworkElement_MinWidth (handle);
+			if (minWidth > 0) OS.FrameworkElement_MinWidth (controlHandle, minWidth);
+			double minHeight = OS.FrameworkElement_MinHeight (handle);
+			if (minHeight > 0) OS.FrameworkElement_MinHeight (controlHandle, minHeight);
+			updateLayout (controlHandle);
+		} else {		
+			int controlHandle = newControl.topHandle ();
+			int children = OS.Panel_Children (parent.parentingHandle ());
+			OS.UIElementCollection_Remove (children, controlHandle);
+			OS.GCHandle_Free (children);
+			int items = OS.ItemsControl_Items (handle);
+			OS.ItemCollection_Add (items, controlHandle);
+			OS.GCHandle_Free (items);
+		}
+	}
+	OS.GCHandle_Free (toolbars);
+}
+
+/**
+ * Sets the minimum size that the cool item can be resized to
+ * using the cool item's gripper, to the point specified by the arguments.
+ * 
+ * @param width the minimum width of the cool item, in pixels
+ * @param height the minimum height of the cool item, in pixels
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.0
+ */
+public void setMinimumSize (int width, int height) {
+	checkWidget ();
+	width = Math.max (0, width);
+	height = Math.max (0, height);
+	OS.FrameworkElement_MinWidth (handle, width);
+	OS.FrameworkElement_MinHeight (handle, height);
+	if (isToolBar (control)) {
+		OS.FrameworkElement_MinWidth (control.handle, width);
+		OS.FrameworkElement_MinHeight (control.handle, height);
+	}
+}
+
+/**
+ * Sets the minimum size that the cool item can be resized to
+ * using the cool item's gripper, to the point specified by the argument.
+ * 
+ * @param size a point representing the minimum width and height of the cool item, in pixels
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.0
+ */
+public void setMinimumSize (Point size) {
+	checkWidget ();
+	if (size == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setMinimumSize (size.x, size.y);
+}
+
+/**
+ * Sets the receiver's ideal size to the point specified by the arguments.
+ *
+ * @param width the new ideal width for the receiver
+ * @param height the new ideal height for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setPreferredSize (int width, int height) {
+	checkWidget ();
+	setSize (width, height);
+}
+
+/**
+ * Sets the receiver's ideal size to the point specified by the argument.
+ *
+ * @param size the new ideal size for the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setPreferredSize (Point size) {
+	checkWidget ();
+	if (size == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setPreferredSize (size.x, size.y);
+}
+
+/**
+ * Sets the receiver's size to the point specified by the arguments.
+ * <p>
+ * Note: Attempting to set the width or height of the
+ * receiver to a negative number will cause that
+ * value to be set to zero instead.
+ * </p>
+ *
+ * @param width the new width for the receiver
+ * @param height the new height for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSize (int width, int height) {
+	checkWidget ();
+	width = Math.max (0, width);
+	height = Math.max (0, height);
+	OS.FrameworkElement_Width (handle, width);
+	OS.FrameworkElement_Height (handle, height);
+	if (isToolBar (control)) {
+		OS.FrameworkElement_Width (control.handle, width);
+		OS.FrameworkElement_Height (control.handle, height);
+	}
+}
+
+/**
+ * Sets the receiver's size to the point specified by the argument.
+ * <p>
+ * Note: Attempting to set the width or height of the
+ * receiver to a negative number will cause them to be
+ * set to zero instead.
+ * </p>
+ *
+ * @param size the new size for the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSize (Point size) {
+	if (size == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setSize (size.x, size.y);
+}
+
+int topHandle () {
+	if (isToolBar (control)) return control.handle;
+	return handle;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Decorations.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Decorations.java
new file mode 100644
index 0000000..95b6884
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Decorations.java
@@ -0,0 +1,895 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class provide the appearance and
+ * behavior of <code>Shells</code>, but are not top
+ * level shells or dialogs. Class <code>Shell</code>
+ * shares a significant amount of code with this class,
+ * and is a subclass.
+ * <p>
+ * IMPORTANT: This class was intended to be abstract and
+ * should <em>never</em> be referenced or instantiated.
+ * Instead, the class <code>Shell</code> should be used.
+ * </p>
+ * <p>
+ * Instances are always displayed in one of the maximized, 
+ * minimized or normal states:
+ * <ul>
+ * <li>
+ * When an instance is marked as <em>maximized</em>, the
+ * window manager will typically resize it to fill the
+ * entire visible area of the display, and the instance
+ * is usually put in a state where it can not be resized 
+ * (even if it has style <code>RESIZE</code>) until it is
+ * no longer maximized.
+ * </li><li>
+ * When an instance is in the <em>normal</em> state (neither
+ * maximized or minimized), its appearance is controlled by
+ * the style constants which were specified when it was created
+ * and the restrictions of the window manager (see below).
+ * </li><li>
+ * When an instance has been marked as <em>minimized</em>,
+ * its contents (client area) will usually not be visible,
+ * and depending on the window manager, it may be
+ * "iconified" (that is, replaced on the desktop by a small
+ * simplified representation of itself), relocated to a
+ * distinguished area of the screen, or hidden. Combinations
+ * of these changes are also possible.
+ * </li>
+ * </ul>
+ * </p>
+ * Note: The styles supported by this class must be treated
+ * as <em>HINT</em>s, since the window manager for the
+ * desktop on which the instance is visible has ultimate
+ * control over the appearance and behavior of decorations.
+ * For example, some window managers only support resizable
+ * windows and will always assume the RESIZE style, even if
+ * it is not set.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>BORDER, CLOSE, MIN, MAX, NO_TRIM, RESIZE, TITLE, ON_TOP, TOOL</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * Class <code>SWT</code> provides two "convenience constants"
+ * for the most commonly required style combinations:
+ * <dl>
+ * <dt><code>SHELL_TRIM</code></dt>
+ * <dd>
+ * the result of combining the constants which are required
+ * to produce a typical application top level shell: (that 
+ * is, <code>CLOSE | TITLE | MIN | MAX | RESIZE</code>)
+ * </dd>
+ * <dt><code>DIALOG_TRIM</code></dt>
+ * <dd>
+ * the result of combining the constants which are required
+ * to produce a typical application dialog shell: (that 
+ * is, <code>TITLE | CLOSE | BORDER</code>)
+ * </dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ *
+ * @see #getMinimized
+ * @see #getMaximized
+ * @see Shell
+ * @see SWT
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class Decorations extends Canvas {
+	int shellHandle;
+	Image image;
+//	Image image, smallImage, largeImage;
+	Image [] images;
+	Menu menuBar;
+	Menu [] menus;
+	Control savedFocus;
+	Button defaultButton, saveDefault;
+
+/**
+ * Prevents uninitialized instances from being created outside the package.
+ */
+Decorations () {
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#BORDER
+ * @see SWT#CLOSE
+ * @see SWT#MIN
+ * @see SWT#MAX
+ * @see SWT#RESIZE
+ * @see SWT#TITLE
+ * @see SWT#NO_TRIM
+ * @see SWT#SHELL_TRIM
+ * @see SWT#DIALOG_TRIM
+ * @see SWT#ON_TOP
+ * @see SWT#TOOL
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Decorations (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+void addMenu (Menu menu) {
+	if (menus == null) menus = new Menu [4];
+	for (int i=0; i<menus.length; i++) {
+		if (menus [i] == null) {
+			menus [i] = menu;
+			return;
+		}
+	}
+	Menu [] newMenus = new Menu [menus.length + 4];
+	newMenus [menus.length] = menu;
+	System.arraycopy (menus, 0, newMenus, 0, menus.length);
+	menus = newMenus;
+}
+
+void bringToTop () {	
+//	/*
+//	* This code is intentionally commented.  On some platforms,
+//	* the ON_TOP style creates a shell that will stay on top
+//	* of every other shell on the desktop.  Using SetWindowPos ()
+//	* with HWND_TOP caused problems on Windows 98 so this code is
+//	* commented out until this functionality is specified and
+//	* the problems are fixed.
+//	*/
+////	if ((style & SWT.ON_TOP) != 0) {
+////		int flags = OS.SWP_NOSIZE | OS.SWP_NOMOVE | OS.SWP_NOACTIVATE; 
+////		OS.SetWindowPos (handle, OS.HWND_TOP, 0, 0, 0, 0, flags);
+////	} else {
+//		OS.BringWindowToTop (handle);
+//		// widget could be disposed at this point
+////	}
+}
+
+static int checkStyle (int style) {
+	if ((style & SWT.NO_TRIM) != 0) {
+		style &= ~(SWT.CLOSE | SWT.TITLE | SWT.MIN | SWT.MAX | SWT.RESIZE | SWT.BORDER);
+	}
+	if ((style & (SWT.MENU | SWT.MIN | SWT.MAX | SWT.CLOSE)) != 0) {
+		style |= SWT.TITLE;
+	}
+//	
+//	/*
+//	* If either WS_MINIMIZEBOX or WS_MAXIMIZEBOX are set,
+//	* we must also set WS_SYSMENU or the buttons will not
+//	* appear.
+//	*/
+//	if ((style & (SWT.MIN | SWT.MAX)) != 0) style |= SWT.CLOSE;
+//	
+//	/*
+//	* Both WS_SYSMENU and WS_CAPTION must be set in order
+//	* to for the system menu to appear.
+//	*/
+//	if ((style & SWT.CLOSE) != 0) style |= SWT.TITLE;
+//	
+//	/*
+//	* Bug in Windows.  The WS_CAPTION style must be
+//	* set when the window is resizable or it does not
+//	* draw properly.
+//	*/
+//	/*
+//	* This code is intentionally commented.  It seems
+//	* that this problem originally in Windows 3.11,
+//	* has been fixed in later versions.  Because the
+//	* exact nature of the drawing problem is unknown,
+//	* keep the commented code around in case it comes
+//	* back.
+//	*/
+////	if ((style & SWT.RESIZE) != 0) style |= SWT.TITLE;
+//	
+	return style;
+}
+
+void checkBorder () {
+	/* Do nothing */
+}
+
+void checkOpened () {
+	//TODO - add back
+//	if (!opened) resized = false;
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+void closeWidget () {
+	Event event = new Event ();
+	sendEvent (SWT.Close, event);
+	if (event.doit && !isDisposed ()) dispose ();
+}
+
+int compare (ImageData data1, ImageData data2) {
+	int transparent1 = data1.getTransparencyType ();
+	int transparent2 = data2.getTransparencyType ();
+	if (transparent1 == transparent2) {
+		if (data1.depth != data2.depth) {
+			return data1.depth > data2.depth ? -1 : 1;
+		}
+		if (data1.width * data1.height != data2.width * data2.height) {
+			return (data1.width * data1.height) > (data2.width * data2.height) ? -1 : 1;
+		}
+	}
+	if (transparent1 == SWT.TRANSPARENCY_ALPHA) return -1;
+	if (transparent2 == SWT.TRANSPARENCY_ALPHA) return 1;
+	if (transparent1 == SWT.TRANSPARENCY_MASK) return -1;
+	if (transparent2 == SWT.TRANSPARENCY_MASK) return 1;
+	if (transparent1 == SWT.TRANSPARENCY_PIXEL) return -1;
+	if (transparent2 == SWT.TRANSPARENCY_PIXEL) return 1;
+	return 0;
+}
+
+Control computeTabGroup () {
+	return this;
+}
+
+Control computeTabRoot () {
+	return this;
+}
+
+public void dispose () {
+	if (isDisposed()) return;
+	if (!isValidThread ()) error (SWT.ERROR_THREAD_INVALID_ACCESS);
+	if (!(this instanceof Shell)) {
+		setVisible (false);
+		if (!traverseDecorations (false)) {
+			Shell shell = getShell ();
+			shell.setFocus ();
+		}
+	}
+	super.dispose ();
+}
+
+Menu findMenu (int hMenu) {
+	if (menus == null) return null;
+	for (int i=0; i<menus.length; i++) {
+		Menu menu = menus [i];
+		if (menu != null && hMenu == menu.handle) return menu;
+	}
+	return null;
+}
+
+void fixDecorations (Decorations newDecorations, Control control, Menu [] menus) {
+	if (this == newDecorations) return;
+	if (control == savedFocus) savedFocus = null;
+	if (control == defaultButton) defaultButton = null;
+	if (control == saveDefault) saveDefault = null;
+	if (menus == null) return;
+	Menu menu = control.menu;
+	if (menu != null) {
+		int index = 0;
+		while (index <menus.length) {
+			if (menus [index] == menu) {
+				control.setMenu (null);
+				return;
+			}
+			index++;
+		}
+		menu.fixMenus (newDecorations);
+//		destroyAccelerators ();
+//		newDecorations.destroyAccelerators ();
+	}
+}
+
+/**
+ * Returns the receiver's default button if one had
+ * previously been set, otherwise returns null.
+ *
+ * @return the default button or null
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #setDefaultButton(Button)
+ */
+public Button getDefaultButton () {
+	checkWidget ();
+	return defaultButton;
+}
+
+/**
+ * Returns the receiver's image if it had previously been 
+ * set using <code>setImage()</code>. The image is typically
+ * displayed by the window manager when the instance is
+ * marked as iconified, and may also be displayed somewhere
+ * in the trim when the instance is in normal or maximized
+ * states.
+ * <p>
+ * Note: This method will return null if called before
+ * <code>setImage()</code> is called. It does not provide
+ * access to a window manager provided, "default" image
+ * even if one exists.
+ * </p>
+ * 
+ * @return the image
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Image getImage () {
+	checkWidget ();
+	return image;
+}
+
+/**
+ * Returns the receiver's images if they had previously been 
+ * set using <code>setImages()</code>. Images are typically
+ * displayed by the window manager when the instance is
+ * marked as iconified, and may also be displayed somewhere
+ * in the trim when the instance is in normal or maximized
+ * states. Depending where the icon is displayed, the platform
+ * chooses the icon with the "best" attributes.  It is expected
+ * that the array will contain the same icon rendered at different
+ * sizes, with different depth and transparency attributes.
+ * 
+ * <p>
+ * Note: This method will return an empty array if called before
+ * <code>setImages()</code> is called. It does not provide
+ * access to a window manager provided, "default" image
+ * even if one exists.
+ * </p>
+ * 
+ * @return the images
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public Image [] getImages () {
+	checkWidget ();
+	if (images == null) return new Image [0];
+	Image [] result = new Image [images.length];
+	System.arraycopy (images, 0, result, 0, images.length);
+	return result;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is currently
+ * maximized, and false otherwise. 
+ * <p>
+ *
+ * @return the maximized state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #setMaximized
+ */
+public boolean getMaximized () {
+	checkWidget ();
+	if ((style & SWT.ON_TOP) != 0) return false;
+	return OS.Window_WindowState (shellHandle) == OS.WindowState_Maximized;
+}
+
+/**
+ * Returns the receiver's menu bar if one had previously
+ * been set, otherwise returns null.
+ *
+ * @return the menu bar or null
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Menu getMenuBar () {
+	checkWidget ();
+	return menuBar;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is currently
+ * minimized, and false otherwise. 
+ * <p>
+ *
+ * @return the minimized state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #setMinimized
+ */
+public boolean getMinimized () {
+	checkWidget ();
+	if ((style & SWT.ON_TOP) != 0) return false;
+	return OS.Window_WindowState (shellHandle) == OS.WindowState_Minimized;
+}
+
+String getNameText () {
+	return getText ();
+}
+
+/**
+ * Returns the receiver's text, which is the string that the
+ * window manager will typically display as the receiver's
+ * <em>title</em>. If the text has not previously been set, 
+ * returns an empty string.
+ *
+ * @return the text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getText () {
+	checkWidget ();
+	if ((style & SWT.ON_TOP) != 0) return "";
+	int shellHandle = topHandle ();
+	int str = OS.Window_Title (shellHandle);
+	String string = createJavaString(str);
+	OS.GCHandle_Free (str);
+	return string;
+}
+
+boolean isTabGroup () {
+	/*
+	* Can't test WS_TAB bits because they are the same as WS_MAXIMIZEBOX.
+	*/
+	return true;
+}
+
+boolean isTabItem () {
+	/*
+	* Can't test WS_TAB bits because they are the same as WS_MAXIMIZEBOX.
+	*/
+	return false;
+}
+
+Decorations menuShell () {
+	return this;
+}
+
+void releaseChildren (boolean destroy) {
+	if (menuBar != null) {
+		menuBar.release (false);
+		menuBar = null;
+	}
+	super.releaseChildren (destroy);
+	if (menus != null) {
+		for (int i=0; i<menus.length; i++) {
+			Menu menu = menus [i];
+			if (menu != null && !menu.isDisposed ()) {
+				menu.dispose ();
+			}
+		}
+		menus = null;
+	}
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	image = null;
+	images = null;
+	savedFocus = null;
+//	defaultButton = saveDefault = null;
+}
+
+void removeMenu (Menu menu) {
+	if (menus == null) return;
+	for (int i=0; i<menus.length; i++) {
+		if (menus [i] == menu) {
+			menus [i] = null;
+			return;
+		}
+	}
+}
+
+boolean restoreFocus () {
+//	if (display.ignoreRestoreFocus) return true;
+	if (savedFocus != null && savedFocus.isDisposed ()) savedFocus = null;
+	if (savedFocus != null && savedFocus.setSavedFocus ()) return true;
+	/*
+	* This code is intentionally commented.  When no widget
+	* has been given focus, some platforms give focus to the
+	* default button.  Windows doesn't do this.
+	*/
+//	if (defaultButton != null && !defaultButton.isDisposed ()) {
+//		if (defaultButton.setFocus ()) return true;
+//	}
+	return false;
+}
+
+void saveFocus () {
+	Control control = display._getFocusControl ();
+	if (control != null && control != this && this == control.menuShell ()) {
+		setSavedFocus (control);
+	}
+}
+
+/**
+ * If the argument is not null, sets the receiver's default
+ * button to the argument, and if the argument is null, sets
+ * the receiver's default button to the first button which
+ * was set as the receiver's default button (called the 
+ * <em>saved default button</em>). If no default button had
+ * previously been set, or the saved default button was
+ * disposed, the receiver's default button will be set to
+ * null.
+ * <p>
+ * The default button is the button that is selected when
+ * the receiver is active and the user presses ENTER.
+ * </p>
+ *
+ * @param button the new default button
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the button has been disposed</li> 
+ *    <li>ERROR_INVALID_PARENT - if the control is not in the same widget tree</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setDefaultButton (Button button) {
+	checkWidget ();
+	if (button != null) {
+		if (button.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+		if (button.menuShell () != this) error(SWT.ERROR_INVALID_PARENT);
+	}
+	setDefaultButton (button, true);
+}
+
+void setDefaultButton (Button button, boolean save) {
+	if (button == null) {
+		if (defaultButton == saveDefault) {
+			if (save) saveDefault = null;
+			return;
+		}
+	} else {
+		if ((button.style & SWT.PUSH) == 0) return;
+		if (button == defaultButton) return;
+	}
+	if (defaultButton != null) {
+		if (!defaultButton.isDisposed ()) defaultButton.setDefault (false);
+	}
+	if ((defaultButton = button) == null) defaultButton = saveDefault;
+	if (defaultButton != null) {
+		if (!defaultButton.isDisposed ()) defaultButton.setDefault (true);
+	}
+	if (save) saveDefault = defaultButton;
+	if (saveDefault != null && saveDefault.isDisposed ()) saveDefault = null;
+}
+
+/**
+ * Sets the receiver's image to the argument, which may
+ * be null. The image is typically displayed by the window
+ * manager when the instance is marked as iconified, and
+ * may also be displayed somewhere in the trim when the
+ * instance is in normal or maximized states.
+ * 
+ * @param image the new image (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setImage (Image image) {
+	checkWidget ();
+	if (image != null && image.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	this.image = image;
+	setImages (image, null);
+}
+
+void setImages (Image image, Image [] images) {
+	if ((style & SWT.ON_TOP) != 0) return;
+	int encoder = OS.gcnew_TiffBitmapEncoder ();
+	int frames = OS.BitmapEncoder_Frames (encoder);
+	if (image != null) {
+		int frame = OS.BitmapFrame_Create (image.handle);
+		OS.BitmapFrameCollection_Add (frames, frame);
+		OS.GCHandle_Free (frame);
+	}
+	if (images != null) {
+		if (images.length > 1) {
+			ImageData [] datas = null;
+			Image [] bestImages = new Image [images.length];
+			System.arraycopy (images, 0, bestImages, 0, images.length);
+			datas = new ImageData [images.length];
+			for (int i=0; i<datas.length; i++) {
+				datas [i] = images [i].getImageData ();
+			}
+			images = bestImages;
+			sort (images, datas);
+		}
+		for (int i = 0; i < images.length; i++) {
+			int frame = OS.BitmapFrame_Create (images [i].handle);
+			OS.BitmapFrameCollection_Add (frames, frame);
+			OS.GCHandle_Free (frame);
+		}
+	}
+	OS.GCHandle_Free (frames);
+	int stream = OS.gcnew_MemoryStream ();
+	OS.BitmapEncoder_Save (encoder, stream);
+	OS.GCHandle_Free (encoder);
+	int decoder = OS.BitmapDecoder_Create (stream, OS.BitmapCreateOptions_None, OS.BitmapCacheOption_Default);
+	OS.GCHandle_Free (stream);
+	frames = OS.BitmapDecoder_Frames (decoder);
+	int icon = OS.BitmapFrameCollection_default (frames, 0);
+	OS.GCHandle_Free (frames);
+	OS.GCHandle_Free (decoder);
+	OS.Window_Icon(shellHandle, icon);
+	OS.GCHandle_Free (icon);
+}
+
+/**
+ * Sets the receiver's images to the argument, which may
+ * be an empty array. Images are typically displayed by the
+ * window manager when the instance is marked as iconified,
+ * and may also be displayed somewhere in the trim when the
+ * instance is in normal or maximized states. Depending where
+ * the icon is displayed, the platform chooses the icon with
+ * the "best" attributes. It is expected that the array will
+ * contain the same icon rendered at different sizes, with
+ * different depth and transparency attributes.
+ * 
+ * @param images the new image array
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array of images is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if one of the images is null or has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void setImages (Image [] images) {
+	checkWidget ();
+	if (images == null) error (SWT.ERROR_INVALID_ARGUMENT);
+	for (int i = 0; i < images.length; i++) {
+		if (images [i] == null || images [i].isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	this.images = images;
+	setImages (null, images);
+}
+
+/**
+ * Sets the maximized state of the receiver.
+ * If the argument is <code>true</code> causes the receiver
+ * to switch to the maximized state, and if the argument is
+ * <code>false</code> and the receiver was previously maximized,
+ * causes the receiver to switch back to either the minimized
+ * or normal states.
+ * <p>
+ * Note: The result of intermixing calls to <code>setMaximized(true)</code>
+ * and <code>setMinimized(true)</code> will vary by platform. Typically,
+ * the behavior will match the platform user's expectations, but not
+ * always. This should be avoided if possible.
+ * </p>
+ *
+ * @param maximized the new maximized state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #setMinimized
+ */
+public void setMaximized (boolean maximized) {
+	checkWidget ();
+	if ((style & SWT.ON_TOP) != 0) return;
+	int state = maximized ? OS.WindowState_Maximized : OS.WindowState_Normal;
+	OS.Window_WindowState (shellHandle, state);
+}
+
+/**
+ * Sets the receiver's menu bar to the argument, which
+ * may be null.
+ *
+ * @param menu the new menu bar
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the menu has been disposed</li> 
+ *    <li>ERROR_INVALID_PARENT - if the menu is not in the same widget tree</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMenuBar (Menu menu) {
+	checkWidget ();
+	if (menuBar == menu) return;
+	if (menu != null) {
+		if (menu.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
+		if ((menu.style & SWT.BAR) == 0) error (SWT.ERROR_MENU_NOT_BAR);
+		if (menu.parent != this) error (SWT.ERROR_INVALID_PARENT);
+	}
+	int children = OS.Panel_Children (scrolledHandle);
+	if (menuBar != null) {
+		OS.Menu_IsMainMenu (menuBar.handle, false);
+		OS.UIElementCollection_Remove (children, menuBar.handle);
+	}
+	menuBar = menu;
+	if (menuBar != null) {
+		int menuHandle = menuBar.handle;
+		OS.Menu_IsMainMenu (menuHandle, true);
+		OS.Grid_SetRow (menuHandle, 0);
+		OS.Grid_SetColumn (menuHandle, 0);
+		OS.Grid_SetColumnSpan (menuHandle, 2);
+		OS.UIElementCollection_Add (children, menuHandle);
+	}
+	OS.GCHandle_Free (children);
+}
+
+/**
+ * Sets the minimized stated of the receiver.
+ * If the argument is <code>true</code> causes the receiver
+ * to switch to the minimized state, and if the argument is
+ * <code>false</code> and the receiver was previously minimized,
+ * causes the receiver to switch back to either the maximized
+ * or normal states.
+ * <p>
+ * Note: The result of intermixing calls to <code>setMaximized(true)</code>
+ * and <code>setMinimized(true)</code> will vary by platform. Typically,
+ * the behavior will match the platform user's expectations, but not
+ * always. This should be avoided if possible.
+ * </p>
+ *
+ * @param minimized the new maximized state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #setMaximized
+ */
+public void setMinimized (boolean minimized) {
+	checkWidget ();
+	if ((style & SWT.ON_TOP) != 0) return;
+	int state = minimized ? OS.WindowState_Minimized : OS.WindowState_Normal;
+	OS.Window_WindowState (shellHandle, state);
+}
+
+void setSavedFocus (Control control) {
+	savedFocus = control;
+}
+
+/**
+ * Sets the receiver's text, which is the string that the
+ * window manager will typically display as the receiver's
+ * <em>title</em>, to the argument, which must not be null. 
+ *
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setText (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if ((style & SWT.ON_TOP) != 0) return;
+	int strPtr = createDotNetString (string, false);
+	int shellHandle = topHandle ();
+	OS.Window_Title (shellHandle, strPtr);
+	OS.GCHandle_Free (strPtr);
+}
+
+void sort (Image [] images, ImageData [] datas) {
+	/* Shell Sort from K&R, pg 108 */
+	int length = images.length;
+	if (length <= 1) return;
+	for (int gap=length/2; gap>0; gap/=2) {
+		for (int i=gap; i<length; i++) {
+			for (int j=i-gap; j>=0; j-=gap) {
+		   		if (compare (datas [j], datas [j + gap]) >= 0) {
+					Image swap = images [j];
+					images [j] = images [j + gap];
+					images [j + gap] = swap;
+					ImageData swapData = datas [j];
+					datas [j] = datas [j + gap];
+					datas [j + gap] = swapData;
+		   		}
+	    	}
+	    }
+	}
+}
+
+boolean traverseDecorations (boolean next) {
+	Control [] children = parent._getChildren ();
+	int length = children.length;
+	int index = 0;
+	while (index < length) {
+		if (children [index] == this) break;
+		index++;
+	}
+	/*
+	* It is possible (but unlikely), that application
+	* code could have disposed the widget in focus in
+	* or out events.  Ensure that a disposed widget is
+	* not accessed.
+	*/
+	int start = index, offset = (next) ? 1 : -1;
+	while ((index = (index + offset + length) % length) != start) {
+		Control child = children [index];
+		if (!child.isDisposed () && child instanceof Decorations) {
+			if (child.setFocus ()) return true;
+		}
+	}
+	return false;
+}
+
+boolean traverseItem (boolean next) {
+	return false;
+}
+
+boolean traverseReturn () {
+	if (defaultButton == null || defaultButton.isDisposed ()) return false;
+	if (!defaultButton.isVisible () || !defaultButton.isEnabled ()) return false;
+//	defaultButton.click ();
+//	TODO
+	defaultButton.sendEvent (SWT.Selection);
+	return true;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/DirectoryDialog.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/DirectoryDialog.java
new file mode 100644
index 0000000..3993e0c
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/DirectoryDialog.java
@@ -0,0 +1,171 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.wpf.*;
+
+/**
+ * Instances of this class allow the user to navigate
+ * the file system and select a directory.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#directorydialog">DirectoryDialog snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class DirectoryDialog extends Dialog {
+	String message = "", filterPath = "";  //$NON-NLS-1$//$NON-NLS-2$
+	
+/**
+ * Constructs a new instance of this class given only its parent.
+ *
+ * @param parent a shell which will be the parent of the new instance
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ */
+public DirectoryDialog (Shell parent) {
+	this (parent, SWT.APPLICATION_MODAL);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a shell which will be the parent of the new instance
+ * @param style the style of dialog to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ */
+public DirectoryDialog (Shell parent, int style) {
+	super (parent, checkStyle (parent, style));
+	checkSubclass ();
+}
+
+/**
+ * Returns the path which the dialog will use to filter
+ * the directories it shows.
+ *
+ * @return the filter path
+ * 
+ * @see #setFilterPath
+ */
+public String getFilterPath () {
+	return filterPath;
+}
+
+/**
+ * Returns the dialog's message, which is a description of
+ * the purpose for which it was opened. This message will be
+ * visible on the dialog while it is open.
+ *
+ * @return the message
+ */
+public String getMessage () {
+	return message;
+}
+
+/**
+ * Makes the dialog visible and brings it to the front
+ * of the display.
+ *
+ * @return a string describing the absolute path of the selected directory,
+ *         or null if the dialog was cancelled or an error occurred
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the dialog has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the dialog</li>
+ * </ul>
+ */
+public String open () {
+	int dialog = OS.gcnew_FolderBrowserDialog ();
+	if (dialog == 0) error (SWT.ERROR_NO_HANDLES);
+	int messagePtr = parent.createDotNetString (message, false);
+	OS.FolderBrowserDialog_Description (dialog, messagePtr);
+	OS.GCHandle_Free (messagePtr);
+	//TODO: filter path...
+	String result = null;
+	if (OS.FormsCommonDialog_ShowDialog (dialog) == OS.DialogResult_OK) {
+		int ptr = OS.FolderBrowserDialog_SelectedPath (dialog);
+		result = Widget.createJavaString (ptr);
+		OS.GCHandle_Free (ptr);
+	}
+	OS.GCHandle_Free (dialog);
+	return result;
+}
+
+/**
+ * Sets the path that the dialog will use to filter
+ * the directories it shows to the argument, which may
+ * be null. If the string is null, then the operating
+ * system's default filter path will be used.
+ * <p>
+ * Note that the path string is platform dependent.
+ * For convenience, either '/' or '\' can be used
+ * as a path separator.
+ * </p>
+ *
+ * @param string the filter path
+ */
+public void setFilterPath (String string) {
+	filterPath = string;
+}
+
+/**
+ * Sets the dialog's message, which is a description of
+ * the purpose for which it was opened. This message will be
+ * visible on the dialog while it is open.
+ *
+ * @param string the message
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ */
+public void setMessage (String string) {
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	message = string;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Display.java
new file mode 100644
index 0000000..3ed8cd3
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Display.java
@@ -0,0 +1,3018 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.internal.win32.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class are responsible for managing the
+ * connection between SWT and the underlying operating
+ * system. Their most important function is to implement
+ * the SWT event loop in terms of the platform event model.
+ * They also provide various methods for accessing information
+ * about the operating system, and have overall control over
+ * the operating system resources which SWT allocates.
+ * <p>
+ * Applications which are built with SWT will <em>almost always</em>
+ * require only a single display. In particular, some platforms
+ * which SWT supports will not allow more than one <em>active</em>
+ * display. In other words, some platforms do not support
+ * creating a new display if one already exists that has not been
+ * sent the <code>dispose()</code> message.
+ * <p>
+ * In SWT, the thread which creates a <code>Display</code>
+ * instance is distinguished as the <em>user-interface thread</em>
+ * for that display.
+ * </p>
+ * The user-interface thread for a particular display has the
+ * following special attributes:
+ * <ul>
+ * <li>
+ * The event loop for that display must be run from the thread.
+ * </li>
+ * <li>
+ * Some SWT API methods (notably, most of the public methods in
+ * <code>Widget</code> and its subclasses), may only be called
+ * from the thread. (To support multi-threaded user-interface
+ * applications, class <code>Display</code> provides inter-thread
+ * communication methods which allow threads other than the 
+ * user-interface thread to request that it perform operations
+ * on their behalf.)
+ * </li>
+ * <li>
+ * The thread is not allowed to construct other 
+ * <code>Display</code>s until that display has been disposed.
+ * (Note that, this is in addition to the restriction mentioned
+ * above concerning platform support for multiple displays. Thus,
+ * the only way to have multiple simultaneously active displays,
+ * even on platforms which support it, is to have multiple threads.)
+ * </li>
+ * </ul>
+ * Enforcing these attributes allows SWT to be implemented directly
+ * on the underlying operating system's event model. This has 
+ * numerous benefits including smaller footprint, better use of 
+ * resources, safer memory management, clearer program logic,
+ * better performance, and fewer overall operating system threads
+ * required. The down side however, is that care must be taken
+ * (only) when constructing multi-threaded applications to use the
+ * inter-thread communication mechanisms which this class provides
+ * when required.
+ * </p><p>
+ * All SWT API methods which may only be called from the user-interface
+ * thread are distinguished in their documentation by indicating that
+ * they throw the "<code>ERROR_THREAD_INVALID_ACCESS</code>"
+ * SWT exception.
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Close, Dispose, Settings</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * @see #syncExec
+ * @see #asyncExec
+ * @see #wake
+ * @see #readAndDispatch
+ * @see #sleep
+ * @see Device#dispose
+ * @see <a href="http://www.eclipse.org/swt/snippets/#display">Display snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class Display extends Device {
+
+	int application, dispatcher, frame, jniRef, nameScope;
+	boolean idle;
+	int sleepOperation, operation;
+	int operationCount;
+	
+	/* Windows and Events */
+	Event [] eventQueue;
+	EventTable eventTable, filterTable;
+	
+	int lastKey;
+	char lastChar;
+	boolean deadChar;
+
+	/* Track Mouse Control */
+	Control mouseControl;
+	
+	/* Focus */
+	Control focusControl;
+
+	/* Menus */
+	Menu []  popups;
+
+	/* Sync/Async Widget Communication */
+	Synchronizer synchronizer = new Synchronizer (this);
+	Thread thread;
+
+	/* Display Shutdown */
+	Runnable [] disposeList;
+	
+	/* System Tray */
+	Tray tray;
+	
+	/* Timers */
+	int timerHandler;
+	int [] timerHandles;
+	Runnable [] timerList;
+
+//	/* System Resources */
+	Font systemFont;
+	Image errorImage, infoImage, questionImage, warningIcon;
+	Cursor [] cursors = new Cursor [SWT.CURSOR_HAND + 1];
+	Color [] colors;
+
+	/* Sort Indicators */
+//	Image upArrow, downArrow;
+	
+	/* Color dialog custom dialgos */
+	int customColors;
+	
+	/* Display Data */
+	Object data;
+	String [] keys;
+	Object [] values;
+	
+	/* DragDetect */
+	boolean dragging;
+	int dragDetectFrame, dragRect, dragMouseDown;
+
+	Control[] invalidate;
+	int invalidateHandler;
+	boolean ignoreRender;
+	
+	Shell [] shells;
+
+	/* Key Mappings */
+	static final int [] [] KeyTable = {
+		
+		/* Keyboard and Mouse Masks */
+		{OS.Key_LeftAlt,	SWT.ALT},
+		{OS.Key_RightAlt,	SWT.ALT},
+		{OS.Key_LeftShift,	SWT.SHIFT},
+		{OS.Key_RightShift,	SWT.SHIFT},
+		{OS.Key_LeftCtrl,	SWT.CONTROL},
+		{OS.Key_RightCtrl,	SWT.CONTROL},
+//		{OS.VK_????,	SWT.COMMAND},
+
+		/* NOT CURRENTLY USED */		
+//		{OS.VK_LBUTTON, SWT.BUTTON1},
+//		{OS.VK_MBUTTON, SWT.BUTTON3},
+//		{OS.VK_RBUTTON, SWT.BUTTON2},
+		
+		/* Non-Numeric Keypad Keys */
+		{OS.Key_Up,		SWT.ARROW_UP},
+		{OS.Key_Down,	SWT.ARROW_DOWN},
+		{OS.Key_Left,	SWT.ARROW_LEFT},
+		{OS.Key_Right,	SWT.ARROW_RIGHT},
+		{OS.Key_PageUp,	SWT.PAGE_UP},
+		{OS.Key_PageDown,	SWT.PAGE_DOWN},
+		{OS.Key_Home,	SWT.HOME},
+		{OS.Key_End,		SWT.END},
+		{OS.Key_Insert,	SWT.INSERT},
+
+		/* Virtual and Ascii Keys */
+		{OS.Key_Back,	SWT.BS},
+		{OS.Key_Return,	SWT.CR},
+		{OS.Key_Delete,	SWT.DEL},
+		{OS.Key_Escape,	SWT.ESC},
+		{OS.Key_Return,	SWT.LF},
+		{OS.Key_Tab,		SWT.TAB},
+	
+		/* Functions Keys */
+		{OS.Key_F1,	SWT.F1},
+		{OS.Key_F2,	SWT.F2},
+		{OS.Key_F3,	SWT.F3},
+		{OS.Key_F4,	SWT.F4},
+		{OS.Key_F5,	SWT.F5},
+		{OS.Key_F6,	SWT.F6},
+		{OS.Key_F7,	SWT.F7},
+		{OS.Key_F8,	SWT.F8},
+		{OS.Key_F9,	SWT.F9},
+		{OS.Key_F10,	SWT.F10},
+		{OS.Key_F11,	SWT.F11},
+		{OS.Key_F12,	SWT.F12},
+		{OS.Key_F13,	SWT.F13},
+		{OS.Key_F14,	SWT.F14},
+		{OS.Key_F15,	SWT.F15},
+		
+		/* Numeric Keypad Keys */
+		{OS.Key_Multiply,	SWT.KEYPAD_MULTIPLY},
+		{OS.Key_Add,			SWT.KEYPAD_ADD},
+		{OS.Key_Return,		SWT.KEYPAD_CR},
+		{OS.Key_Subtract,	SWT.KEYPAD_SUBTRACT},
+		{OS.Key_Decimal,		SWT.KEYPAD_DECIMAL},
+		{OS.Key_Divide,		SWT.KEYPAD_DIVIDE},
+		{OS.Key_NumPad0,		SWT.KEYPAD_0},
+		{OS.Key_NumPad1,		SWT.KEYPAD_1},
+		{OS.Key_NumPad2,		SWT.KEYPAD_2},
+		{OS.Key_NumPad3,		SWT.KEYPAD_3},
+		{OS.Key_NumPad4,		SWT.KEYPAD_4},
+		{OS.Key_NumPad5,		SWT.KEYPAD_5},
+		{OS.Key_NumPad6,		SWT.KEYPAD_6},
+		{OS.Key_NumPad7,		SWT.KEYPAD_7},
+		{OS.Key_NumPad8,		SWT.KEYPAD_8},
+		{OS.Key_NumPad9,		SWT.KEYPAD_9},
+//		{OS.VK_????,		SWT.KEYPAD_EQUAL},
+
+		/* Other keys */
+		{OS.Key_CapsLock,		SWT.CAPS_LOCK},
+		{OS.Key_NumLock,		SWT.NUM_LOCK},
+		{OS.Key_Scroll,		SWT.SCROLL_LOCK},
+		{OS.Key_Pause,		SWT.PAUSE},
+		{OS.Key_Cancel,		SWT.BREAK},
+		{OS.Key_PrintScreen,	SWT.PRINT_SCREEN},
+//		{OS.VK_????,		SWT.HELP},
+		
+
+		{OS.Key_D0, '0'},
+		{OS.Key_D1, '1'},
+		{OS.Key_D2, '2'},
+		{OS.Key_D3, '3'},
+		{OS.Key_D4, '4'},
+		{OS.Key_D5, '5'},
+		{OS.Key_D6, '6'},
+		{OS.Key_D7, '7'},
+		{OS.Key_D8, '8'},
+		{OS.Key_D9, '9'},
+		{OS.Key_A, 'a'},
+		{OS.Key_B, 'b'},
+		{OS.Key_C, 'c'},
+		{OS.Key_D, 'd'},
+		{OS.Key_E, 'e'},
+		{OS.Key_F, 'f'},
+		{OS.Key_G, 'g'},
+		{OS.Key_H, 'h'},
+		{OS.Key_I, 'i'},
+		{OS.Key_J, 'j'},
+		{OS.Key_K, 'k'},
+		{OS.Key_L, 'l'},
+		{OS.Key_M, 'm'},
+		{OS.Key_N, 'n'},
+		{OS.Key_O, 'o'},
+		{OS.Key_P, 'p'},
+		{OS.Key_Q, 'q'},
+		{OS.Key_R, 'r'},
+		{OS.Key_S, 's'},
+		{OS.Key_T, 't'},
+		{OS.Key_U, 'u'},
+		{OS.Key_V, 'v'},
+		{OS.Key_W, 'w'},
+		{OS.Key_X, 'x'},
+		{OS.Key_Y, 'y'},
+		{OS.Key_Z, 'z'},
+		
+		{OS.Key_OemTilde, '`'},
+		{OS.Key_OemMinus, '-'},
+		{OS.Key_OemPlus, '='},
+		{OS.Key_Oem4, '['},
+		{OS.Key_Oem6, ']'},
+		{OS.Key_OemPipe, '\\'},
+		{OS.Key_OemSemicolon, ';'},
+		{OS.Key_Oem7, '\''},
+		{OS.Key_OemComma, ','},
+		{OS.Key_OemPeriod, '.'},
+		{OS.Key_Oem2, '/'},
+		
+	};
+
+	/* Multiple Displays */
+	static Display Default;
+	static Display [] Displays = new Display [4];
+
+	/* Multiple Monitors */
+	static Monitor[] monitors = null;
+	static int monitorCount = 0;
+	
+	/* Modality */
+	Shell [] modalShells;
+//	Shell modalDialogShell;
+
+	/* Package Name */
+	static final String PACKAGE_PREFIX = "org.eclipse.swt.widgets."; //$NON-NLS-1$
+	/*
+	* This code is intentionally commented.  In order
+	* to support CLDC, .class cannot be used because
+	* it does not compile on some Java compilers when
+	* they are targeted for CLDC.
+	*/
+//	static {
+//		String name = Display.class.getName ();
+//		int index = name.lastIndexOf ('.');
+//		PACKAGE_PREFIX = name.substring (0, index + 1);
+//	}
+
+	/*
+	* TEMPORARY CODE.  Install the runnable that
+	* gets the current display. This code will
+	* be removed in the future.
+	*/
+	static {
+		DeviceFinder = new Runnable () {
+			public void run () {
+				Device device = getCurrent ();
+				if (device == null) {
+					device = getDefault ();
+				}
+				setDevice (device);
+			}
+		};
+	}	
+
+/*
+* TEMPORARY CODE.
+*/
+static void setDevice (Device device) {
+	CurrentDevice = device;
+}
+	
+/**
+ * Constructs a new instance of this class.
+ * <p>
+ * Note: The resulting display is marked as the <em>current</em>
+ * display. If this is the first display which has been 
+ * constructed since the application started, it is also
+ * marked as the <em>default</em> display.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if called from a thread that already created an existing display</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see #getCurrent
+ * @see #getDefault
+ * @see Widget#checkSubclass
+ * @see Shell
+ */
+public Display () {
+	this (null);
+}
+
+/**
+ * Constructs a new instance of this class using the parameter.
+ * 
+ * @param data the device data
+ */
+public Display (DeviceData data) {
+	super (data);
+}
+
+Control _getFocusControl () {
+	int focusedElement = OS.Keyboard_FocusedElement ();
+	Control control = null;
+	if (focusedElement != 0) {
+		Widget widget = getWidget (focusedElement);
+		if (widget instanceof Menu) {
+			Shell shell = ((Menu)widget).getShell();
+			OS.GCHandle_Free (focusedElement);
+			focusedElement = OS.FocusManager_GetFocusedElement (shell.shellHandle);
+			if (focusedElement == 0) return null;
+			widget = getWidget (focusedElement);
+		}
+		if (widget != null) control = widget.getWidgetControl ();
+		OS.GCHandle_Free (focusedElement);
+	}
+	return control;
+}
+
+void addWidget (int handle, Widget widget) {
+	if (handle == 0) return;
+	int tag = OS.gcnew_IntPtr (widget.jniRef);
+	OS.FrameworkElement_Tag (handle, tag);
+	OS.GCHandle_Free (tag);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when an event of the given type occurs anywhere
+ * in a widget. The event type is one of the event constants
+ * defined in class <code>SWT</code>. When the event does occur,
+ * the listener is notified by sending it the <code>handleEvent()</code>
+ * message.
+ * <p>
+ * Setting the type of an event to <code>SWT.None</code> from
+ * within the <code>handleEvent()</code> method can be used to
+ * change the event type and stop subsequent Java listeners
+ * from running. Because event filters run before other listeners,
+ * event filters can both block other listeners and set arbitrary
+ * fields within an event. For this reason, event filters are both
+ * powerful and dangerous. They should generally be avoided for
+ * performance, debugging and code maintenance reasons.
+ * </p>
+ * 
+ * @param eventType the type of event to listen for
+ * @param listener the listener which should be notified when the event occurs
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see Listener
+ * @see SWT
+ * @see #removeFilter
+ * @see #removeListener
+ * 
+ * @since 3.0 
+ */
+public void addFilter (int eventType, Listener listener) {
+	checkDevice ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (filterTable == null) filterTable = new EventTable ();
+	filterTable.hook (eventType, listener);
+}
+
+void addInvalidate (Control control) {
+	if (invalidate == null) invalidate = new Control [4];
+	int length = invalidate.length;
+	for (int i=0; i<length; i++) {
+		if (invalidate [i] == control) return;
+	}
+	int index = 0;
+	while (index < length) {
+		if (invalidate [index] == null) break;
+		index++;
+	}
+	if (index == length) {
+		Control [] temp = new Control [length + 4];
+		System.arraycopy (invalidate, 0, temp, 0, length);
+		invalidate = temp;
+	}
+	invalidate [index] = control;
+	if (invalidateHandler == 0) {
+		int handler = invalidateHandler = OS.gcnew_NoArgsDelegate (jniRef, "invalidateHandler");
+		int operation = OS.Dispatcher_BeginInvoke (dispatcher, OS.DispatcherPriority_Send, handler);
+		OS.GCHandle_Free (operation);
+		OS.GCHandle_Free (handler);
+	}
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when an event of the given type occurs. The event
+ * type is one of the event constants defined in class <code>SWT</code>.
+ * When the event does occur in the display, the listener is notified by
+ * sending it the <code>handleEvent()</code> message.
+ *
+ * @param eventType the type of event to listen for
+ * @param listener the listener which should be notified when the event occurs
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see Listener
+ * @see SWT
+ * @see #removeListener
+ * 
+ * @since 2.0 
+ */
+public void addListener (int eventType, Listener listener) {
+	checkDevice ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) eventTable = new EventTable ();
+	eventTable.hook (eventType, listener);
+}
+
+void addPopup (Menu menu) {
+	if (popups == null) popups = new Menu [4];
+	int length = popups.length;
+	for (int i=0; i<length; i++) {
+		if (popups [i] == menu) return;
+	}
+	int index = 0;
+	while (index < length) {
+		if (popups [index] == null) break;
+		index++;
+	}
+	if (index == length) {
+		Menu [] newPopups = new Menu [length + 4];
+		System.arraycopy (popups, 0, newPopups, 0, length);
+		popups = newPopups;
+	}
+	popups [index] = menu;
+}
+
+void addShell (Shell shell) {
+	if (shells == null) shells = new Shell [4];
+	int length = shells.length;
+	for (int i=0; i<length; i++) {
+		if (shells [i] == shell) return;
+	}
+	int index = 0;
+	while (index < length) {
+		if (shells [index] == null) break;
+		index++;
+	}
+	if (index == length) {
+		Shell [] temp = new Shell [length + 4];
+		System.arraycopy (shells, 0, temp, 0, length);
+		shells = temp;
+	}
+	shells [index] = shell;
+}
+
+/**
+ * Causes the <code>run()</code> method of the runnable to
+ * be invoked by the user-interface thread at the next 
+ * reasonable opportunity. The caller of this method continues 
+ * to run in parallel, and is not notified when the
+ * runnable has completed.  Specifying <code>null</code> as the
+ * runnable simply wakes the user-interface thread when run.
+ * <p>
+ * Note that at the time the runnable is invoked, widgets 
+ * that have the receiver as their display may have been
+ * disposed. Therefore, it is necessary to check for this
+ * case inside the runnable before accessing the widget.
+ * </p>
+ *
+ * @param runnable code to run on the user-interface thread or <code>null</code>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #syncExec
+ */
+public void asyncExec (Runnable runnable) {
+	synchronized (Device.class) {
+		if (isDisposed ()) error (SWT.ERROR_DEVICE_DISPOSED);
+		synchronizer.asyncExec (runnable);
+	}
+}
+
+/**
+ * Causes the system hardware to emit a short sound
+ * (if it supports this capability).
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void beep () {
+	checkDevice ();
+	OS.Console_Beep ();
+}
+
+/**
+ * Checks that this class can be subclassed.
+ * <p>
+ * IMPORTANT: See the comment in <code>Widget.checkSubclass()</code>.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see Widget#checkSubclass
+ */
+protected void checkSubclass () {
+	if (!isValidClass (getClass ())) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+protected void checkDevice () {
+	if (thread == null) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (thread != Thread.currentThread ()) error (SWT.ERROR_THREAD_INVALID_ACCESS);
+	if (isDisposed ()) error (SWT.ERROR_DEVICE_DISPOSED);
+}
+
+static void checkDisplay (Thread thread, boolean multiple) {
+	synchronized (Device.class) {
+		for (int i=0; i<Displays.length; i++) {
+			if (Displays [i] != null) {
+				if (!multiple) SWT.error (SWT.ERROR_NOT_IMPLEMENTED, null, " [multiple displays]");
+				if (Displays [i].thread == thread) SWT.error (SWT.ERROR_THREAD_INVALID_ACCESS);
+			}
+		}
+	}
+}
+
+void clearModal (Shell shell) {
+	if (modalShells == null) return;
+	int index = 0, length = modalShells.length;
+	while (index < length) {
+		if (modalShells [index] == shell) break;
+		if (modalShells [index] == null) return;
+		index++;
+	}
+	if (index == length) return;
+	System.arraycopy (modalShells, index + 1, modalShells, index, --length - index);
+	modalShells [length] = null;
+	if (index == 0 && modalShells [0] == null) modalShells = null;
+	Shell [] shells = getShells ();
+	for (int i=0; i<shells.length; i++) shells [i].updateModal ();
+}
+
+/**
+ * Requests that the connection between SWT and the underlying
+ * operating system be closed.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see Device#dispose
+ * 
+ * @since 2.0
+ */
+public void close () {
+	checkDevice ();
+	Event event = new Event ();
+	sendEvent (SWT.Close, event);
+	if (event.doit) dispose ();
+}
+
+/**
+ * Creates the device in the operating system.  If the device
+ * does not have a handle, this method may do nothing depending
+ * on the device.
+ * <p>
+ * This method is called before <code>init</code>.
+ * </p>
+ *
+ * @param data the DeviceData which describes the receiver
+ *
+ * @see #init
+ */
+protected void create (DeviceData data) {
+	checkSubclass ();
+	checkDisplay (thread = Thread.currentThread (), true);
+	createDisplay (data);
+	register (this);
+	if (Default == null) Default = this;
+}
+
+void createDisplay (DeviceData data) {
+	Win32.OleInitialize (0);
+	application = OS.gcnew_Application();
+	if (application == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	OS.Application_ShutdownMode (application, OS.ShutdownMode_OnExplicitShutdown);
+	nameScope = OS.gcnew_NameScope ();
+	if (nameScope == 0) SWT.error (SWT.ERROR_NO_HANDLES);
+}
+
+static void deregister (Display display) {
+	synchronized (Device.class) {
+		for (int i=0; i<Displays.length; i++) {
+			if (display == Displays [i]) Displays [i] = null;
+		}
+	}
+}
+
+/**
+ * Destroys the device in the operating system and releases
+ * the device's handle.  If the device does not have a handle,
+ * this method may do nothing depending on the device.
+ * <p>
+ * This method is called after <code>release</code>.
+ * </p>
+ * @see Device#dispose
+ * @see #release
+ */
+protected void destroy () {
+	if (this == Default) Default = null;
+	deregister (this);
+	destroyDisplay ();
+}
+
+void destroyDisplay () {
+	OS.GCHandle_Dump();
+}
+
+/**
+ * Causes the <code>run()</code> method of the runnable to
+ * be invoked by the user-interface thread just before the
+ * receiver is disposed.  Specifying a <code>null</code> runnable
+ * is ignored.
+ *
+ * @param runnable code to run at dispose time.
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public void disposeExec (Runnable runnable) {
+	checkDevice ();
+	if (disposeList == null) disposeList = new Runnable [4];
+	for (int i=0; i<disposeList.length; i++) {
+		if (disposeList [i] == null) {
+			disposeList [i] = runnable;
+			return;
+		}
+	}
+	Runnable [] newDisposeList = new Runnable [disposeList.length + 4];
+	System.arraycopy (disposeList, 0, newDisposeList, 0, disposeList.length);
+	newDisposeList [disposeList.length] = runnable;
+	disposeList = newDisposeList;
+}
+
+/**
+ * Does whatever display specific cleanup is required, and then
+ * uses the code in <code>SWTError.error</code> to handle the error.
+ *
+ * @param code the descriptive error code
+ *
+ * @see SWT#error(int)
+ */
+void error (int code) {
+	SWT.error (code);
+}
+
+boolean filterEvent (Event event) {
+	if (filterTable != null) filterTable.sendEvent (event);
+	return false;
+}
+
+boolean filters (int eventType) {
+	if (filterTable == null) return false;
+	return filterTable.hooks (eventType);
+}
+
+/**
+ * Given the operating system handle for a widget, returns
+ * the instance of the <code>Widget</code> subclass which
+ * represents it in the currently running application, if
+ * such exists, or null if no matching widget can be found.
+ * <p>
+ * <b>IMPORTANT:</b> This method should not be called from
+ * application code. The arguments are platform-specific.
+ * </p>
+ *
+ * @param handle the handle for the widget
+ * @return the SWT widget that the handle represents
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Widget findWidget (int handle) {
+	checkDevice ();
+	return getWidget (handle);
+}
+
+/**
+ * Given the operating system handle for a widget,
+ * and widget-specific id, returns the instance of
+ * the <code>Widget</code> subclass which represents
+ * the handle/id pair in the currently running application,
+ * if such exists, or null if no matching widget can be found.
+ * <p>
+ * <b>IMPORTANT:</b> This method should not be called from
+ * application code. The arguments are platform-specific.
+ * </p>
+ *
+ * @param handle the handle for the widget
+ * @param id the id for the subwidget (usually an item)
+ * @return the SWT widget that the handle/id pair represents
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public Widget findWidget (int handle, int id) {
+	checkDevice ();
+	return null;
+}
+
+/**
+ * Given a widget and a widget-specific id, returns the
+ * instance of the <code>Widget</code> subclass which represents
+ * the widget/id pair in the currently running application,
+ * if such exists, or null if no matching widget can be found.
+ *
+ * @param widget the widget
+ * @param id the id for the subwidget (usually an item)
+ * @return the SWT subwidget (usually an item) that the widget/id pair represents
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.3
+ */
+public Widget findWidget (Widget widget, int id) {
+	checkDevice ();
+	return null;
+}
+
+/**
+ * Returns the display which the given thread is the
+ * user-interface thread for, or null if the given thread
+ * is not a user-interface thread for any display.  Specifying
+ * <code>null</code> as the thread will return <code>null</code>
+ * for the display. 
+ *
+ * @param thread the user-interface thread
+ * @return the display for the given thread
+ */
+public static Display findDisplay (Thread thread) {
+	synchronized (Device.class) {
+		for (int i=0; i<Displays.length; i++) {
+			Display display = Displays [i];
+			if (display != null && display.thread == thread) {
+				return display;
+			}
+		}
+		return null;
+	}
+}
+
+/**
+ * Returns the currently active <code>Shell</code>, or null
+ * if no shell belonging to the currently running application
+ * is active.
+ *
+ * @return the active shell or null
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Shell getActiveShell () {
+	checkDevice ();
+	int windows = OS.Application_Windows (application);
+	int count = OS.WindowCollection_Count (windows);
+	int activeWindow = 0;
+	if (count != 0) {
+		int enumerator = OS.WindowCollection_GetEnumerator (windows);
+		while (OS.IEnumerator_MoveNext (enumerator)) {
+			int window = OS.WindowCollection_Current (enumerator);
+			if (OS.Window_IsActive (window)) {
+				activeWindow = window;
+				break;
+			}
+			OS.GCHandle_Free (window);
+		}
+		OS.GCHandle_Free (enumerator);
+	}
+	OS.GCHandle_Free (windows);
+	Shell shell = (Shell)getWidget (activeWindow);
+	if (activeWindow != 0) OS.GCHandle_Free (activeWindow);
+	return shell;
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location. Note that
+ * on multi-monitor systems the origin can be negative.
+ *
+ * @return the bounding rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Rectangle getBounds () {
+	checkDevice ();
+	int x = (int) OS.SystemParameters_VirtualScreenLeft ();
+	int y = (int) OS.SystemParameters_VirtualScreenTop ();
+	int width = (int) OS.SystemParameters_VirtualScreenWidth ();
+	int height = (int) OS.SystemParameters_VirtualScreenHeight ();
+	return new Rectangle (x, y, width, height);
+}
+
+/**
+ * Returns the display which the currently running thread is
+ * the user-interface thread for, or null if the currently
+ * running thread is not a user-interface thread for any display.
+ *
+ * @return the current display
+ */
+public static Display getCurrent () {
+	return findDisplay (Thread.currentThread ());
+}
+
+/**
+ * Returns a rectangle which describes the area of the
+ * receiver which is capable of displaying data.
+ * 
+ * @return the client area
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #getBounds
+ */
+public Rectangle getClientArea () {
+	checkDevice ();
+//	if (true/*OS.GetSystemMetrics (OS.SM_CMONITORS) < 2*/) {
+		int rect = OS.SystemParameters_WorkArea ();
+		int x = (int) OS.Rect_X (rect);
+		int y = (int) OS.Rect_Y (rect);
+		int width = (int) OS.Rect_Width (rect);
+		int height = (int) OS.Rect_Height (rect);
+		OS.GCHandle_Free (rect);
+		return new Rectangle (x, y, width, height);
+//	}
+//	int x = (int) OS.SystemParameters_VirtualScreenLeft ();
+//	int y = (int) OS.SystemParameters_VirtualScreenTop ();
+//	int width = (int) OS.SystemParameters_VirtualScreenWidth ();
+//	int height = (int) OS.SystemParameters_VirtualScreenHeight ();
+//	return new Rectangle (x, y, width, height);
+}
+
+Widget getWidget (int handle) {
+	if (handle == 0) return null;
+	int frameworkElementType = OS.FrameworkElement_typeid ();
+	int frameworkContentElementType = OS.FrameworkContentElement_typeid ();
+	int widget = handle;
+	int jniRef = 0;
+	do {
+		int parent = 0;
+		if (OS.Type_IsInstanceOfType (frameworkElementType, widget)) {
+			int tag = OS.FrameworkElement_Tag (widget);
+			if (tag != 0) {
+				jniRef = OS.IntPtr_ToInt32 (tag);
+				OS.GCHandle_Free (tag);
+				break;
+			}
+			parent = OS.FrameworkElement_Parent (widget);
+			if (parent == 0) { 
+				parent = OS.VisualTreeHelper_GetParent (widget);
+			}
+		} else {
+			if (OS.Type_IsInstanceOfType (frameworkContentElementType, widget)) {
+				parent = OS.FrameworkContentElement_Parent (widget);
+			}
+		}
+		if (widget != handle) OS.GCHandle_Free (widget);
+		widget = parent;
+	} while (widget != 0);
+	if (widget != handle && widget != 0) OS.GCHandle_Free (widget);
+	OS.GCHandle_Free (frameworkElementType);
+	OS.GCHandle_Free (frameworkContentElementType);
+	return jniRef != 0 ? (Widget) OS.JNIGetObject (jniRef) : null;
+}
+
+/**
+ * Returns the control which the on-screen pointer is currently
+ * over top of, or null if it is not currently over one of the
+ * controls built by the currently running application.
+ *
+ * @return the control under the cursor
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Control getCursorControl () {
+	checkDevice ();
+	int inputElement = 0;
+	int captured = OS.Mouse_Captured ();
+	if (captured != 0) {
+		int sources = OS.PresentationSource_CurrentSources ();
+		int enumerator = OS.IEnumerable_GetEnumerator (sources);
+		while (OS.IEnumerator_MoveNext (enumerator) && inputElement == 0) {
+			int current = OS.IEnumerator_Current (enumerator);
+			int root = OS.PresentationSource_RootVisual (current);
+			if (root != 0) {
+				int pt = OS.Mouse_GetPosition (root);
+				inputElement = OS.UIElement_InputHitTest (root, pt);
+				OS.GCHandle_Free (pt);
+				OS.GCHandle_Free (root);
+			}
+			OS.GCHandle_Free (current);
+		}
+		OS.GCHandle_Free (enumerator);
+		OS.GCHandle_Free (sources);
+		OS.GCHandle_Free (captured);
+	} else {
+		inputElement = OS.Mouse_DirectlyOver ();
+	}
+	if (inputElement != 0) {
+		Widget widget = getWidget (inputElement);
+		OS.GCHandle_Free (inputElement);
+		if (widget != null) return widget.getWidgetControl ();
+	}
+	return null;
+}
+
+/**
+ * Returns the location of the on-screen pointer relative
+ * to the top left corner of the screen.
+ *
+ * @return the cursor location
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Point getCursorLocation () {
+	checkDevice ();	
+	POINT pt = new POINT ();
+	Win32.GetCursorPos (pt);
+	return new Point (pt.x, pt.y);
+}
+
+/**
+ * Returns an array containing the recommended cursor sizes.
+ *
+ * @return the array of cursor sizes
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public Point [] getCursorSizes () {
+	checkDevice ();
+//	return new Point [] {
+//		new Point (OS.GetSystemMetrics (OS.SM_CXCURSOR), OS.GetSystemMetrics (OS.SM_CYCURSOR))};
+	return null;
+}
+
+/**
+ * Returns the default display. One is created (making the
+ * thread that invokes this method its user-interface thread)
+ * if it did not already exist.
+ *
+ * @return the default display
+ */
+public static Display getDefault () {
+	synchronized (Device.class) {
+		if (Default == null) Default = new Display ();
+		return Default;
+	}
+}
+
+static boolean isValidClass (Class clazz) {
+	String name = clazz.getName ();
+	int index = name.lastIndexOf ('.');
+	return name.substring (0, index + 1).equals (PACKAGE_PREFIX);
+}
+
+/**
+ * Returns the application defined property of the receiver
+ * with the specified name, or null if it has not been set.
+ * <p>
+ * Applications may have associated arbitrary objects with the
+ * receiver in this fashion. If the objects stored in the
+ * properties need to be notified when the display is disposed
+ * of, it is the application's responsibility to provide a
+ * <code>disposeExec()</code> handler which does so.
+ * </p>
+ *
+ * @param key the name of the property
+ * @return the value of the property or null if it has not been set
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the key is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #setData(String, Object)
+ * @see #disposeExec(Runnable)
+ */
+public Object getData (String key) {
+	checkDevice ();
+	if (key == null) error (SWT.ERROR_NULL_ARGUMENT);
+//	if (key.equals (RUN_MESSAGES_IN_IDLE_KEY)) {
+//		return new Boolean (runMessagesInIdle);
+//	}
+	if (keys == null) return null;
+	for (int i=0; i<keys.length; i++) {
+		if (keys [i].equals (key)) return values [i];
+	}
+	return null;
+}
+
+/**
+ * Returns the application defined, display specific data
+ * associated with the receiver, or null if it has not been
+ * set. The <em>display specific data</em> is a single,
+ * unnamed field that is stored with every display. 
+ * <p>
+ * Applications may put arbitrary objects in this field. If
+ * the object stored in the display specific data needs to
+ * be notified when the display is disposed of, it is the
+ * application's responsibility to provide a
+ * <code>disposeExec()</code> handler which does so.
+ * </p>
+ *
+ * @return the display specific data
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #setData(Object)
+ * @see #disposeExec(Runnable)
+ */
+public Object getData () {
+	checkDevice ();
+	return data;
+}
+
+/**
+ * Returns the button dismissal alignment, one of <code>LEFT</code> or <code>RIGHT</code>.
+ * The button dismissal alignment is the ordering that should be used when positioning the
+ * default dismissal button for a dialog.  For example, in a dialog that contains an OK and
+ * CANCEL button, on platforms where the button dismissal alignment is <code>LEFT</code>, the
+ * button ordering should be OK/CANCEL.  When button dismissal alignment is <code>RIGHT</code>,
+ * the button ordering should be CANCEL/OK.
+ *
+ * @return the button dismissal order
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 2.1
+ */
+public int getDismissalAlignment () {
+	checkDevice ();
+	return SWT.LEFT;
+}
+
+
+/**
+ * Returns the longest duration, in milliseconds, between
+ * two mouse button clicks that will be considered a
+ * <em>double click</em> by the underlying operating system.
+ *
+ * @return the double click time
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public int getDoubleClickTime () {
+	checkDevice ();
+	//TODO
+	return 500;
+}
+
+/**
+ * Returns the control which currently has keyboard focus,
+ * or null if keyboard events are not currently going to
+ * any of the controls built by the currently running
+ * application.
+ *
+ * @return the control under the cursor
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Control getFocusControl () {
+	checkDevice ();
+	if (focusControl != null && !focusControl.isDisposed ()) {
+		return focusControl;
+	}
+	return _getFocusControl ();
+}
+
+/**
+ * Returns true when the high contrast mode is enabled.
+ * Otherwise, false is returned.
+ * <p>
+ * Note: This operation is a hint and is not supported on
+ * platforms that do not have this concept.
+ * </p>
+ *
+ * @return the high contrast mode
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public boolean getHighContrast () {
+	checkDevice ();
+	return OS.SystemParameters_HighContrast ();
+}
+
+/**
+ * Returns the maximum allowed depth of icons on this display, in bits per pixel.
+ * On some platforms, this may be different than the actual depth of the display.
+ *
+ * @return the maximum icon depth
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see Device#getDepth
+ */
+public int getIconDepth () {
+	checkDevice ();
+//	if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) {
+//		if (getDepth () >= 24) return 32;
+//	}
+//
+//	/* Use the character encoding for the default locale */
+//	TCHAR buffer1 = new TCHAR (0, "Control Panel\\Desktop\\WindowMetrics", true); //$NON-NLS-1$
+//
+//	int [] phkResult = new int [1];
+//	int result = OS.RegOpenKeyEx (OS.HKEY_CURRENT_USER, buffer1, 0, OS.KEY_READ, phkResult);
+//	if (result != 0) return 4;
+	int depth = 4;
+//	int [] lpcbData = new int [1];
+//	
+//	/* Use the character encoding for the default locale */
+//	TCHAR buffer2 = new TCHAR (0, "Shell Icon BPP", true); //$NON-NLS-1$
+//	result = OS.RegQueryValueEx (phkResult [0], buffer2, 0, null, (TCHAR) null, lpcbData);
+//	if (result == 0) {
+//		TCHAR lpData = new TCHAR (0, lpcbData [0] / TCHAR.sizeof);
+//		result = OS.RegQueryValueEx (phkResult [0], buffer2, 0, null, lpData, lpcbData);
+//		if (result == 0) {
+//			try {
+//				depth = Integer.parseInt (lpData.toString (0, lpData.strlen ()));
+//			} catch (NumberFormatException e) {}
+//		}
+//	}
+//	OS.RegCloseKey (phkResult [0]);
+	return depth;
+}
+
+/**
+ * Returns an array containing the recommended icon sizes.
+ *
+ * @return the array of icon sizes
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see Decorations#setImages(Image[])
+ * 
+ * @since 3.0
+ */
+public Point [] getIconSizes () {
+	checkDevice ();
+	//TODO
+//	return new Point [] {
+//		new Point (OS.GetSystemMetrics (OS.SM_CXSMICON), OS.GetSystemMetrics (OS.SM_CYSMICON)),
+//		new Point (OS.GetSystemMetrics (OS.SM_CXICON), OS.GetSystemMetrics (OS.SM_CYICON)),
+//	};	
+	return null;
+}
+
+int getLastEventTime () {
+	//TODO - use OS
+	return (int)System.currentTimeMillis();
+}
+
+int getMessageCount () {
+	return synchronizer.getMessageCount ();
+}
+
+
+Shell getModalShell () {
+	if (modalShells == null) return null;
+	int index = modalShells.length;
+	while (--index >= 0) {
+		Shell shell = modalShells [index];
+		if (shell != null) return shell;
+	}
+	return null;
+}
+
+//Shell getModalDialogShell () {
+//	if (modalDialogShell != null && modalDialogShell.isDisposed ()) modalDialogShell = null;
+//	return modalDialogShell;
+//}
+
+/**
+ * Returns an array of monitors attached to the device.
+ * 
+ * @return the array of monitors
+ * 
+ * @since 3.0
+ */
+public Monitor [] getMonitors () {
+	checkDevice ();
+	int screens = OS.Screen_AllScreens ();
+	if (screens == 0) error (SWT.ERROR_NO_HANDLES);
+	int screenCount = OS.ICollection_Count (screens);
+	Monitor [] monitors = new Monitor [screenCount];
+	for (int i=0; i<screenCount; i++) {
+		int screen = OS.IList_default (screens, i);
+		int bounds = OS.Screen_Bounds (screen);
+		int workingArea = OS.Screen_WorkingArea (screen);
+		Monitor monitor = new Monitor ();
+		monitor.x = OS.Rectangle_X (bounds); 
+		monitor.y = OS.Rectangle_Y (bounds);
+		monitor.width = OS.Rectangle_Width (bounds);
+		monitor.height = OS.Rectangle_Height (bounds); 
+		monitor.clientX = OS.Rectangle_X (workingArea);
+		monitor.clientY = OS.Rectangle_Y (workingArea);
+		monitor.clientWidth = OS.Rectangle_Width (workingArea);
+		monitor.clientHeight = OS.Rectangle_Height (workingArea);
+		monitors [i] = monitor;
+		OS.GCHandle_Free (workingArea);
+		OS.GCHandle_Free (bounds);
+		OS.GCHandle_Free (screen);
+	}
+	OS.GCHandle_Free (screens);
+	return monitors;
+}
+
+/**
+ * Returns the primary monitor for that device.
+ * 
+ * @return the primary monitor
+ * 
+ * @since 3.0
+ */
+public Monitor getPrimaryMonitor () {
+	checkDevice ();
+	int screen = OS.Screen_PrimaryScreen ();
+	if (screen == 0) error (SWT.ERROR_NO_HANDLES);
+	int bounds = OS.Screen_Bounds (screen);
+	int workingArea = OS.Screen_WorkingArea (screen);
+	Monitor monitor = new Monitor ();
+	monitor.x = OS.Rectangle_X (bounds); 
+	monitor.y = OS.Rectangle_Y (bounds);
+	monitor.width = OS.Rectangle_Width (bounds);
+	monitor.height = OS.Rectangle_Height (bounds); 
+	monitor.clientX = OS.Rectangle_X (workingArea);
+	monitor.clientY = OS.Rectangle_Y (workingArea);
+	monitor.clientWidth = OS.Rectangle_Width (workingArea);
+	monitor.clientHeight = OS.Rectangle_Height (workingArea);
+	OS.GCHandle_Free (workingArea);
+	OS.GCHandle_Free (bounds);
+	OS.GCHandle_Free (screen);
+	return monitor;		
+}
+
+/**
+ * Returns a (possibly empty) array containing all shells which have
+ * not been disposed and have the receiver as their display.
+ *
+ * @return the receiver's shells
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Shell [] getShells () {
+	checkDevice ();
+	if (shells == null) return new Shell [0];
+	int length = 0;
+	for (int i=0; i<shells.length; i++) {
+		if (shells [i] != null) length++;
+	}
+	int index = 0;
+	Shell [] result = new Shell [length];
+	for (int i=0; i<shells.length; i++) {
+		Shell widget = shells [i];
+		if (widget != null) result [index++] = widget;
+	}
+	return result;
+}
+
+/**
+ * Gets the synchronizer used by the display.
+ *
+ * @return the receiver's synchronizer
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public Synchronizer getSynchronizer () {
+	checkDevice ();
+	return synchronizer;
+}
+
+/**
+ * Returns the thread that has invoked <code>syncExec</code>
+ * or null if no such runnable is currently being invoked by
+ * the user-interface thread.
+ * <p>
+ * Note: If a runnable invoked by asyncExec is currently
+ * running, this method will return null.
+ * </p>
+ *
+ * @return the receiver's sync-interface thread
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Thread getSyncThread () {
+	synchronized (Device.class) {
+		if (isDisposed ()) error (SWT.ERROR_DEVICE_DISPOSED);
+		return synchronizer.syncThread;
+	}
+}
+
+/**
+ * Returns the matching standard color for the given
+ * constant, which should be one of the color constants
+ * specified in class <code>SWT</code>. Any value other
+ * than one of the SWT color constants which is passed
+ * in will result in the color black. This color should
+ * not be free'd because it was allocated by the system,
+ * not the application.
+ *
+ * @param id the color constant
+ * @return the matching color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see SWT
+ */
+public Color getSystemColor (int id) {
+	checkDevice ();
+	Color color = null;
+	if (0 <= id && id < colors.length) {
+		color = colors [id];
+	}
+	return color != null ? color : super.getSystemColor (id);
+}
+
+/**
+ * Returns the matching standard platform cursor for the given
+ * constant, which should be one of the cursor constants
+ * specified in class <code>SWT</code>. This cursor should
+ * not be free'd because it was allocated by the system,
+ * not the application.  A value of <code>null</code> will
+ * be returned if the supplied constant is not an SWT cursor
+ * constant. 
+ *
+ * @param id the SWT cursor constant
+ * @return the corresponding cursor or <code>null</code>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see SWT#CURSOR_ARROW
+ * @see SWT#CURSOR_WAIT
+ * @see SWT#CURSOR_CROSS
+ * @see SWT#CURSOR_APPSTARTING
+ * @see SWT#CURSOR_HELP
+ * @see SWT#CURSOR_SIZEALL
+ * @see SWT#CURSOR_SIZENESW
+ * @see SWT#CURSOR_SIZENS
+ * @see SWT#CURSOR_SIZENWSE
+ * @see SWT#CURSOR_SIZEWE
+ * @see SWT#CURSOR_SIZEN
+ * @see SWT#CURSOR_SIZES
+ * @see SWT#CURSOR_SIZEE
+ * @see SWT#CURSOR_SIZEW
+ * @see SWT#CURSOR_SIZENE
+ * @see SWT#CURSOR_SIZESE
+ * @see SWT#CURSOR_SIZESW
+ * @see SWT#CURSOR_SIZENW
+ * @see SWT#CURSOR_UPARROW
+ * @see SWT#CURSOR_IBEAM
+ * @see SWT#CURSOR_NO
+ * @see SWT#CURSOR_HAND
+ * 
+ * @since 3.0
+ */
+public Cursor getSystemCursor (int id) {
+	checkDevice ();
+	if (!(0 <= id && id < cursors.length)) return null;
+	if (cursors [id] == null) {
+		cursors [id] = new Cursor (this, id);
+	}
+	return cursors [id];
+}
+
+/**
+ * Returns the matching standard platform image for the given
+ * constant, which should be one of the icon constants
+ * specified in class <code>SWT</code>. This image should
+ * not be free'd because it was allocated by the system,
+ * not the application.  A value of <code>null</code> will
+ * be returned either if the supplied constant is not an
+ * SWT icon constant or if the platform does not define an
+ * image that corresponds to the constant. 
+ *
+ * @param id the SWT icon constant
+ * @return the corresponding image or <code>null</code>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see SWT#ICON_ERROR
+ * @see SWT#ICON_INFORMATION
+ * @see SWT#ICON_QUESTION
+ * @see SWT#ICON_WARNING
+ * @see SWT#ICON_WORKING
+ * 
+ * @since 3.0
+ */
+public Image getSystemImage (int id) {
+	checkDevice ();
+	switch (id) {
+		case SWT.ICON_ERROR: {
+			if (errorImage != null) return errorImage;
+			int hIcon = Win32.LoadImage (0, Win32.OIC_HAND, Win32.IMAGE_ICON, 0, 0, Win32.LR_SHARED);
+			int empty = OS.Int32Rect_Empty ();
+			int source = OS.Imaging_CreateBitmapSourceFromHIcon (hIcon, empty, 0);
+			errorImage = Image.wpf_new (this, SWT.BITMAP, source);
+			OS.GCHandle_Free (empty);
+			Win32.DestroyIcon (hIcon);
+			return errorImage;
+		}
+		case SWT.ICON_WORKING:
+		case SWT.ICON_INFORMATION: {
+			if (infoImage != null) return infoImage;
+			int hIcon = Win32.LoadImage (0, Win32.OIC_INFORMATION, Win32.IMAGE_ICON, 0, 0, Win32.LR_SHARED);
+			int empty = OS.Int32Rect_Empty ();
+			int source = OS.Imaging_CreateBitmapSourceFromHIcon (hIcon, empty, 0);
+			infoImage = Image.wpf_new (this, SWT.BITMAP, source);
+			OS.GCHandle_Free (empty);
+			Win32.DestroyIcon (hIcon);
+			return infoImage;
+		}
+		case SWT.ICON_QUESTION: {
+			if (questionImage != null) return questionImage;
+			int hIcon = Win32.LoadImage (0, Win32.OIC_QUES, Win32.IMAGE_ICON, 0, 0, Win32.LR_SHARED);
+			int empty = OS.Int32Rect_Empty ();
+			int source = OS.Imaging_CreateBitmapSourceFromHIcon (hIcon, empty, 0);
+			questionImage = Image.wpf_new (this, SWT.BITMAP, source);
+			OS.GCHandle_Free (empty);
+			Win32.DestroyIcon (hIcon);
+			return questionImage;
+		}
+		case SWT.ICON_WARNING: {
+			if (warningIcon != null) return warningIcon;
+			int hIcon = Win32.LoadImage (0, Win32.OIC_BANG, Win32.IMAGE_ICON, 0, 0, Win32.LR_SHARED);
+			int empty = OS.Int32Rect_Empty ();
+			int source = OS.Imaging_CreateBitmapSourceFromHIcon (hIcon, empty, 0);
+			warningIcon = Image.wpf_new (this, SWT.BITMAP, source);
+			OS.GCHandle_Free (empty);
+			Win32.DestroyIcon (hIcon);
+			return warningIcon;
+		}
+	}
+	return null;
+}
+
+/**
+ * Returns the single instance of the system tray or null
+ * when there is no system tray available for the platform.
+ *
+ * @return the system tray or <code>null</code>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @since 3.0
+ */
+public Tray getSystemTray () {
+	checkDevice ();
+	if (tray != null) return tray;
+	tray = new Tray (this, SWT.NONE);
+	return tray;
+}
+
+/**
+ * Returns the user-interface thread for the receiver.
+ *
+ * @return the receiver's user-interface thread
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Thread getThread () {
+	synchronized (Device.class) {
+		if (isDisposed ()) error (SWT.ERROR_DEVICE_DISPOSED);
+		return thread;
+	}
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new GC handle.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Display</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param data the platform specific GC data 
+ * @return the platform specific GC handle
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * @exception SWTError <ul>
+ *    <li>ERROR_NO_HANDLES if a handle could not be obtained for gc creation</li>
+ * </ul>
+ */
+public int internal_new_GC (GCData data) {
+	if (isDisposed()) SWT.error(SWT.ERROR_DEVICE_DISPOSED);
+	//TODO - for now, return a drawing context that can measure text
+	if (data == null) return 0;
+	int visual = OS.gcnew_DrawingVisual();
+	if (visual == 0) SWT.error(SWT.ERROR_NO_HANDLES);
+	int dc = OS.DrawingVisual_RenderOpen (visual);
+	if (dc == 0) SWT.error (SWT.ERROR_NO_HANDLES);
+	data.visual = visual;
+	data.font = getSystemFont ();
+	return dc;
+}
+
+/**
+ * Initializes any internal resources needed by the
+ * device.
+ * <p>
+ * This method is called after <code>create</code>.
+ * </p>
+ * 
+ * @see #create
+ */
+protected void init () {
+	super.init ();
+		
+	dispatcher = OS.Application_Dispatcher (application);
+	if (dispatcher == 0) SWT.error (SWT.ERROR_NO_HANDLES);
+	frame = OS.gcnew_DispatcherFrame ();
+	if (frame == 0) SWT.error (SWT.ERROR_NO_HANDLES);
+	jniRef = OS.NewGlobalRef (this);
+	if (jniRef == 0) SWT.error (SWT.ERROR_NO_HANDLES);
+	int hooks = OS.Dispatcher_Hooks (dispatcher);
+	int handler = OS.gcnew_EventHandler (jniRef, "HandleDispatcherInactive");
+	OS.DispatcherHooks_DispatcherInactive (hooks, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_DispatcherHookEventHandler (jniRef, "HandleOperationCompleted");
+	OS.DispatcherHooks_OperationCompleted (hooks, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_DispatcherHookEventHandler (jniRef, "HandleOperationPosted");
+	OS.DispatcherHooks_OperationPosted (hooks, handler);
+	OS.GCHandle_Free (handler);
+	OS.GCHandle_Free (hooks);
+	timerHandler = OS.gcnew_TimerHandler(jniRef, "timerProc");
+	
+
+	/* Create the standard colors */
+	colors = new Color [SWT.COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT + 1];
+	colors [SWT.COLOR_WIDGET_DARK_SHADOW] = Color.wpf_new( this, OS.SystemColors_ControlDarkDarkColor ());
+	colors [SWT.COLOR_WIDGET_NORMAL_SHADOW] = Color.wpf_new (this, OS.SystemColors_ControlDarkColor ());
+	colors [SWT.COLOR_WIDGET_LIGHT_SHADOW] = Color.wpf_new (this, OS.SystemColors_ControlLightColor ());
+	colors [SWT.COLOR_WIDGET_HIGHLIGHT_SHADOW] = Color.wpf_new (this, OS.SystemColors_ControlLightLightColor ());
+	colors [SWT.COLOR_WIDGET_FOREGROUND] = Color.wpf_new (this, OS.SystemColors_ControlTextColor ());
+	colors [SWT.COLOR_WIDGET_BACKGROUND] = Color.wpf_new (this, OS.SystemColors_ControlColor ());
+	colors [SWT.COLOR_WIDGET_BORDER] = Color.wpf_new (this, OS.SystemColors_ActiveBorderColor ());
+	colors [SWT.COLOR_LIST_FOREGROUND] = Color.wpf_new (this, OS.SystemColors_WindowTextColor ());
+	colors [SWT.COLOR_LIST_BACKGROUND] = Color.wpf_new (this, OS.SystemColors_WindowColor ());
+	colors [SWT.COLOR_LIST_SELECTION] = Color.wpf_new (this, OS.SystemColors_HighlightColor ());
+	colors [SWT.COLOR_LIST_SELECTION_TEXT] = Color.wpf_new (this, OS.SystemColors_HighlightTextColor ());
+	colors [SWT.COLOR_INFO_FOREGROUND] = Color.wpf_new (this, OS.SystemColors_InfoTextColor ());
+	colors [SWT.COLOR_INFO_BACKGROUND] = Color.wpf_new (this, OS.SystemColors_InfoColor ());
+	colors [SWT.COLOR_TITLE_FOREGROUND] = Color.wpf_new (this, OS.SystemColors_ActiveCaptionTextColor ());
+	colors [SWT.COLOR_TITLE_BACKGROUND] = Color.wpf_new (this, OS.SystemColors_ActiveCaptionColor ());
+	colors [SWT.COLOR_TITLE_BACKGROUND_GRADIENT] = Color.wpf_new (this, OS.SystemColors_GradientActiveCaptionColor ());
+	colors [SWT.COLOR_TITLE_INACTIVE_FOREGROUND] = Color.wpf_new (this, OS.SystemColors_InactiveCaptionTextColor ());
+	colors [SWT.COLOR_TITLE_INACTIVE_BACKGROUND] = Color.wpf_new (this, OS.SystemColors_InactiveCaptionColor ());
+	colors [SWT.COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT] = Color.wpf_new (this, OS.SystemColors_GradientInactiveCaptionColor ());
+		
+}
+
+void invalidateHandler () {
+	invalidateHandler = 0;
+	if (invalidate != null) {
+		Control[] invalidate = this.invalidate;
+		this.invalidate = null;
+		for (int i = 0; i < invalidate.length; i++) {
+			Control control = invalidate [i];
+			if (control != null && !control.isDisposed()) {
+				control.redraw (true);
+			}
+		}
+	}
+}
+
+void HandleDispatcherInactive (int sender, int e) {
+	if (runAsyncMessages (false)) wakeThread ();
+}
+
+void HandleOperationCompleted (int sender, int e) {
+	if (operation != 0) {
+		int current = OS.DispatcherHookEventArgs_Operation(e);
+		int priority = OS.DispatcherOperation_Priority(current);
+		if (priority == 5) OS.DispatcherOperation_Abort(operation);
+		OS.GCHandle_Free(current);
+	}
+}
+
+void HandleOperationPosted (int sender, int e) {
+	if (sleepOperation != 0) OS.DispatcherOperation_Priority(sleepOperation, OS.DispatcherPriority_Send);
+}
+
+/**	 
+ * Invokes platform specific functionality to dispose a GC handle.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Display</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param hDC the platform specific GC handle
+ * @param data the platform specific GC data 
+ */
+public void internal_dispose_GC (int dc, GCData data) {
+	//TODO - the wrong drawing context was created
+	if (data != null && data.drawingContext == 0) {
+		OS.DrawingContext_Close (dc);
+		OS.GCHandle_Free (dc);
+		OS.GCHandle_Free (data.visual);
+	}
+}
+
+boolean isValidThread () {
+	return thread == Thread.currentThread ();
+}
+
+/**
+ * Maps a point from one coordinate system to another.
+ * When the control is null, coordinates are mapped to
+ * the display.
+ * <p>
+ * NOTE: On right-to-left platforms where the coordinate
+ * systems are mirrored, special care needs to be taken
+ * when mapping coordinates from one control to another
+ * to ensure the result is correctly mirrored.
+ * 
+ * Mapping a point that is the origin of a rectangle and
+ * then adding the width and height is not equivalent to
+ * mapping the rectangle.  When one control is mirrored
+ * and the other is not, adding the width and height to a
+ * point that was mapped causes the rectangle to extend
+ * in the wrong direction.  Mapping the entire rectangle
+ * instead of just one point causes both the origin and
+ * the corner of the rectangle to be mapped.
+ * </p>
+ * 
+ * @param from the source <code>Control</code> or <code>null</code>
+ * @param to the destination <code>Control</code> or <code>null</code>
+ * @param point to be mapped 
+ * @return point with mapped coordinates 
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the Control from or the Control to have been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 2.1.2
+ */
+public Point map (Control from, Control to, Point point) {
+	checkDevice ();
+	if (point == null) error (SWT.ERROR_NULL_ARGUMENT);	
+	return map (from, to, point.x, point.y);
+}
+
+/**
+ * Maps a point from one coordinate system to another.
+ * When the control is null, coordinates are mapped to
+ * the display.
+ * <p>
+ * NOTE: On right-to-left platforms where the coordinate
+ * systems are mirrored, special care needs to be taken
+ * when mapping coordinates from one control to another
+ * to ensure the result is correctly mirrored.
+ * 
+ * Mapping a point that is the origin of a rectangle and
+ * then adding the width and height is not equivalent to
+ * mapping the rectangle.  When one control is mirrored
+ * and the other is not, adding the width and height to a
+ * point that was mapped causes the rectangle to extend
+ * in the wrong direction.  Mapping the entire rectangle
+ * instead of just one point causes both the origin and
+ * the corner of the rectangle to be mapped.
+ * </p>
+ * 
+ * @param from the source <code>Control</code> or <code>null</code>
+ * @param to the destination <code>Control</code> or <code>null</code>
+ * @param x coordinates to be mapped
+ * @param y coordinates to be mapped
+ * @return point with mapped coordinates
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the Control from or the Control to have been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 2.1.2
+ */
+public Point map (Control from, Control to, int x, int y) {
+	checkDevice ();
+	if (from != null && from.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	if (to != null && to.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	if (from == to) return new Point (x, y);
+	int newX, newY;
+	if (from != null && to != null) {
+		int point = OS.gcnew_Point (x, y);
+		int newPoint = OS.UIElement_TranslatePoint (from.handle, point, to.handle);
+		newX = (int) (OS.Point_X (newPoint) + 0.5);
+		newY = (int) (OS.Point_Y (newPoint) + 0.5);
+		OS.GCHandle_Free (point);
+		OS.GCHandle_Free (newPoint);
+	} else {
+		if (from == null) {
+			int toHandle = to.handle;
+			to.updateLayout (toHandle);
+			int source = OS.PresentationSource_FromVisual (toHandle);
+			int window = OS.PresentationSource_RootVisual (source);
+			OS.GCHandle_Free (source);
+			int point = OS.gcnew_Point (x, y);
+			int temp = OS.Visual_PointFromScreen (window, point);
+			int newPoint = OS.UIElement_TranslatePoint (window, temp, toHandle);
+			newX = (int) OS.Point_X (newPoint);
+			newY = (int) OS.Point_Y (newPoint);
+			OS.GCHandle_Free (temp);
+			OS.GCHandle_Free (point);
+			OS.GCHandle_Free (newPoint);
+			OS.GCHandle_Free (window);
+		} else {
+			int fromHandle = from.handle;
+			from.updateLayout (fromHandle);
+			int source = OS.PresentationSource_FromVisual (fromHandle);
+			int window = OS.PresentationSource_RootVisual (source);
+			OS.GCHandle_Free (source);
+			int point = OS.gcnew_Point (x, y);
+			int temp = OS.UIElement_TranslatePoint (fromHandle, point, window);
+			int newPoint = OS.Visual_PointToScreen (window, temp);
+			newX = (int) OS.Point_X (newPoint);
+			newY = (int) OS.Point_Y (newPoint);
+			OS.GCHandle_Free (temp);
+			OS.GCHandle_Free (point);
+			OS.GCHandle_Free (newPoint);
+			OS.GCHandle_Free (window);
+		}
+	}
+	return new Point (newX, newY);
+}
+
+/**
+ * Maps a point from one coordinate system to another.
+ * When the control is null, coordinates are mapped to
+ * the display.
+ * <p>
+ * NOTE: On right-to-left platforms where the coordinate
+ * systems are mirrored, special care needs to be taken
+ * when mapping coordinates from one control to another
+ * to ensure the result is correctly mirrored.
+ * 
+ * Mapping a point that is the origin of a rectangle and
+ * then adding the width and height is not equivalent to
+ * mapping the rectangle.  When one control is mirrored
+ * and the other is not, adding the width and height to a
+ * point that was mapped causes the rectangle to extend
+ * in the wrong direction.  Mapping the entire rectangle
+ * instead of just one point causes both the origin and
+ * the corner of the rectangle to be mapped.
+ * </p>
+ * 
+ * @param from the source <code>Control</code> or <code>null</code>
+ * @param to the destination <code>Control</code> or <code>null</code>
+ * @param rectangle to be mapped
+ * @return rectangle with mapped coordinates
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the rectangle is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the Control from or the Control to have been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 2.1.2
+ */
+public Rectangle map (Control from, Control to, Rectangle rectangle) {
+	checkDevice ();
+	if (rectangle == null) error (SWT.ERROR_NULL_ARGUMENT);	
+	return map (from, to, rectangle.x, rectangle.y, rectangle.width, rectangle.height);
+}
+
+/**
+ * Maps a point from one coordinate system to another.
+ * When the control is null, coordinates are mapped to
+ * the display.
+ * <p>
+ * NOTE: On right-to-left platforms where the coordinate
+ * systems are mirrored, special care needs to be taken
+ * when mapping coordinates from one control to another
+ * to ensure the result is correctly mirrored.
+ * 
+ * Mapping a point that is the origin of a rectangle and
+ * then adding the width and height is not equivalent to
+ * mapping the rectangle.  When one control is mirrored
+ * and the other is not, adding the width and height to a
+ * point that was mapped causes the rectangle to extend
+ * in the wrong direction.  Mapping the entire rectangle
+ * instead of just one point causes both the origin and
+ * the corner of the rectangle to be mapped.
+ * </p>
+ * 
+ * @param from the source <code>Control</code> or <code>null</code>
+ * @param to the destination <code>Control</code> or <code>null</code>
+ * @param x coordinates to be mapped
+ * @param y coordinates to be mapped
+ * @param width coordinates to be mapped
+ * @param height coordinates to be mapped
+ * @return rectangle with mapped coordinates
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the Control from or the Control to have been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 2.1.2
+ */
+public Rectangle map (Control from, Control to, int x, int y, int width, int height) {
+	checkDevice ();
+	if (from != null && from.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT);
+	if (to != null && to.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT);
+	if (from == to) return new Rectangle (x, y, width, height);
+	//TODO
+	Point point = map (from, to, x, y);
+	return new Rectangle (point.x, point.y, width, height);
+}
+
+/**
+ * Generate a low level system event.
+ * 
+ * <code>post</code> is used to generate low level keyboard
+ * and mouse events. The intent is to enable automated UI
+ * testing by simulating the input from the user.  Most
+ * SWT applications should never need to call this method.
+ * <p>
+ * Note that this operation can fail when the operating system
+ * fails to generate the event for any reason.  For example,
+ * this can happen when there is no such key or mouse button
+ * or when the system event queue is full.
+ * </p>
+ * <p>
+ * <b>Event Types:</b>
+ * <p>KeyDown, KeyUp
+ * <p>The following fields in the <code>Event</code> apply:
+ * <ul>
+ * <li>(in) type KeyDown or KeyUp</li>
+ * <p> Either one of:
+ * <li>(in) character a character that corresponds to a keyboard key</li>
+ * <li>(in) keyCode the key code of the key that was typed,
+ *          as defined by the key code constants in class <code>SWT</code></li>
+ * </ul>
+ * <p>MouseDown, MouseUp</p>
+ * <p>The following fields in the <code>Event</code> apply:
+ * <ul>
+ * <li>(in) type MouseDown or MouseUp
+ * <li>(in) button the button that is pressed or released
+ * </ul>
+ * <p>MouseMove</p>
+ * <p>The following fields in the <code>Event</code> apply:
+ * <ul>
+ * <li>(in) type MouseMove
+ * <li>(in) x the x coordinate to move the mouse pointer to in screen coordinates
+ * <li>(in) y the y coordinate to move the mouse pointer to in screen coordinates
+ * </ul>
+ * <p>MouseWheel</p>
+ * <p>The following fields in the <code>Event</code> apply:
+ * <ul>
+ * <li>(in) type MouseWheel
+ * <li>(in) detail either SWT.SCROLL_LINE or SWT.SCROLL_PAGE
+ * <li>(in) count the number of lines or pages to scroll
+ * </ul>
+ * </dl>
+ * 
+ * @param event the event to be generated
+ * 
+ * @return true if the event was generated or false otherwise
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the event is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @since 3.0
+ * 
+ */
+public boolean post (Event event) {
+	synchronized (Device.class) {
+		if (isDisposed ()) error (SWT.ERROR_DEVICE_DISPOSED);
+		if (event == null) error (SWT.ERROR_NULL_ARGUMENT);
+//		int type = event.type;
+//		switch (type){
+//			case SWT.KeyDown:
+//			case SWT.KeyUp: {
+//				KEYBDINPUT inputs = new KEYBDINPUT ();
+//				inputs.wVk = (short) untranslateKey (event.keyCode);
+//				if (inputs.wVk == 0) {
+//					char key = event.character;
+//					switch (key) {
+//						case SWT.BS: inputs.wVk = (short) OS.VK_BACK; break;
+//						case SWT.CR: inputs.wVk = (short) OS.VK_RETURN; break;
+//						case SWT.DEL: inputs.wVk = (short) OS.VK_DELETE; break;
+//						case SWT.ESC: inputs.wVk = (short) OS.VK_ESCAPE; break;
+//						case SWT.TAB: inputs.wVk = (short) OS.VK_TAB; break;
+//						/*
+//						* Since there is no LF key on the keyboard, do not attempt
+//						* to map LF to CR or attempt to post an LF key.
+//						*/
+//	//					case SWT.LF: inputs.wVk = (short) OS.VK_RETURN; break;
+//						case SWT.LF: return false;
+//						default: {
+//							if (OS.IsWinCE) {
+//								inputs.wVk = OS.CharUpper ((short) key);
+//							} else {
+//								inputs.wVk = OS.VkKeyScan ((short) wcsToMbcs (key, 0));
+//								if (inputs.wVk == -1) return false;
+//								inputs.wVk &= 0xFF;
+//							}
+//						}
+//					}
+//				}
+//				inputs.dwFlags = type == SWT.KeyUp ? OS.KEYEVENTF_KEYUP : 0;
+//				int hHeap = OS.GetProcessHeap ();
+//				int pInputs = OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY, INPUT.sizeof);
+//				OS.MoveMemory(pInputs, new int[] {OS.INPUT_KEYBOARD}, 4);
+//				OS.MoveMemory (pInputs + 4, inputs, KEYBDINPUT.sizeof);
+//				boolean result = OS.SendInput (1, pInputs, INPUT.sizeof) != 0;
+//				OS.HeapFree (hHeap, 0, pInputs);
+//				return result;
+//			}
+//			case SWT.MouseDown:
+//			case SWT.MouseMove: 
+//			case SWT.MouseUp: {
+//				MOUSEINPUT inputs = new MOUSEINPUT ();
+//				if (type == SWT.MouseMove){
+//					inputs.dwFlags = OS.MOUSEEVENTF_MOVE | OS.MOUSEEVENTF_ABSOLUTE;
+//					inputs.dx = event.x * 65535 / (OS.GetSystemMetrics (OS.SM_CXSCREEN) - 1);
+//					inputs.dy = event.y * 65535 / (OS.GetSystemMetrics (OS.SM_CYSCREEN) - 1);
+//				} else {
+//					switch (event.button) {
+//						case 1: inputs.dwFlags = type == SWT.MouseDown ? OS.MOUSEEVENTF_LEFTDOWN : OS.MOUSEEVENTF_LEFTUP; break;
+//						case 2: inputs.dwFlags = type == SWT.MouseDown ? OS.MOUSEEVENTF_MIDDLEDOWN : OS.MOUSEEVENTF_MIDDLEUP; break;
+//						case 3: inputs.dwFlags = type == SWT.MouseDown ? OS.MOUSEEVENTF_RIGHTDOWN : OS.MOUSEEVENTF_RIGHTUP; break;
+//						default: return false;
+//					}
+//				}
+//				int hHeap = OS.GetProcessHeap ();
+//				int pInputs = OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY, INPUT.sizeof);
+//				OS.MoveMemory(pInputs, new int[] {OS.INPUT_MOUSE}, 4);
+//				OS.MoveMemory (pInputs + 4, inputs, MOUSEINPUT.sizeof);
+//				boolean result = OS.SendInput (1, pInputs, INPUT.sizeof) != 0;
+//				OS.HeapFree (hHeap, 0, pInputs);
+//				return result;
+//			}
+//		} 
+		return false;
+	}
+}
+
+void postEvent (Event event) {
+	/*
+	* Place the event at the end of the event queue.
+	* This code is always called in the Display's
+	* thread so it must be re-enterant but does not
+	* need to be synchronized.
+	*/
+	if (eventQueue == null) eventQueue = new Event [4];
+	int index = 0;
+	int length = eventQueue.length;
+	while (index < length) {
+		if (eventQueue [index] == null) break;
+		index++;
+	}
+	if (index == length) {
+		Event [] newQueue = new Event [length + 4];
+		System.arraycopy (eventQueue, 0, newQueue, 0, length);
+		eventQueue = newQueue;
+	}
+	eventQueue [index] = event;
+}
+
+void removePopup (Menu menu) {
+	if (popups == null) return;
+	for (int i=0; i<popups.length; i++) {
+		if (popups [i] == menu) {
+			popups [i] = null;
+			return;
+		}
+	}
+}
+
+void removeShell (Shell shell) {
+	if (shells == null) return;
+	for (int i=0; i<shells.length; i++) {
+		if (shells [i] == shell) {
+			shells [i] = null;
+			return;
+		}
+	}
+}
+
+/**
+ * Reads an event from the operating system's event queue,
+ * dispatches it appropriately, and returns <code>true</code>
+ * if there is potentially more work to do, or <code>false</code>
+ * if the caller can sleep until another event is placed on
+ * the event queue.
+ * <p>
+ * In addition to checking the system event queue, this method also
+ * checks if any inter-thread messages (created by <code>syncExec()</code>
+ * or <code>asyncExec()</code>) are waiting to be processed, and if
+ * so handles them before returning.
+ * </p>
+ *
+ * @return <code>false</code> if the caller can sleep upon return from this method
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_FAILED_EXEC - if an exception occurred while running an inter-thread message</li>
+ * </ul>
+ *
+ * @see #sleep
+ * @see #wake
+ */
+public boolean readAndDispatch () {
+	checkDevice ();
+	runPopups ();
+	idle = false;
+	int handler = OS.gcnew_NoArgsDelegate(jniRef, "setIdleHandler");
+	operation = OS.Dispatcher_BeginInvoke(dispatcher, 2, handler);
+	OS.DispatcherOperation_Wait(operation);
+	OS.GCHandle_Free(handler);
+	OS.GCHandle_Free(operation);
+	operation = 0;
+	if (!idle) {
+		runDeferredEvents();
+		return true;
+	}
+	return isDisposed () || runAsyncMessages(false);
+}
+
+static void register (Display display) {
+	synchronized (Device.class) {
+		for (int i=0; i<Displays.length; i++) {
+			if (Displays [i] == null) {
+				Displays [i] = display;
+				return;
+			}
+		}
+		Display [] newDisplays = new Display [Displays.length + 4];
+		System.arraycopy (Displays, 0, newDisplays, 0, Displays.length);
+		newDisplays [Displays.length] = display;
+		Displays = newDisplays;
+	}
+}
+
+/**
+ * Releases any internal resources back to the operating
+ * system and clears all fields except the device handle.
+ * <p>
+ * Disposes all shells which are currently open on the display. 
+ * After this method has been invoked, all related related shells
+ * will answer <code>true</code> when sent the message
+ * <code>isDisposed()</code>.
+ * </p><p>
+ * When a device is destroyed, resources that were acquired
+ * on behalf of the programmer need to be returned to the
+ * operating system.  For example, if the device allocated a
+ * font to be used as the system font, this font would be
+ * freed in <code>release</code>.  Also,to assist the garbage
+ * collector and minimize the amount of memory that is not
+ * reclaimed when the programmer keeps a reference to a
+ * disposed device, all fields except the handle are zero'd.
+ * The handle is needed by <code>destroy</code>.
+ * </p>
+ * This method is called before <code>destroy</code>.
+ * 
+ * @see Device#dispose
+ * @see #destroy
+ */
+protected void release () {
+	sendEvent (SWT.Dispose, new Event ());
+	Shell [] shells = getShells ();
+	for (int i=0; i<shells.length; i++) {
+		Shell shell = shells [i];
+		if (!shell.isDisposed ()) shell.dispose ();
+	}
+	if (tray != null) tray.dispose ();
+	tray = null;
+	
+	//hack... readAndDispatch Always returns true right now, prevents apps from shutting down.
+	//while (readAndDispatch ()) {}
+	
+	if (disposeList != null) {
+		for (int i=0; i<disposeList.length; i++) {
+			if (disposeList [i] != null) disposeList [i].run ();
+		}
+	}
+	disposeList = null;
+	synchronizer.releaseSynchronizer ();
+	synchronizer = null;
+	releaseDisplay ();
+	super.release ();
+}
+
+void releaseDisplay () {
+	/* Release the timers */
+	OS.GCHandle_Free (timerHandler);
+	timerHandler = 0;
+	if (timerHandles != null) {
+		for (int i = 0; i < timerHandles.length; i++) {
+			int timer = timerHandles [i];
+			if (timer != 0) {
+				OS.DispatcherTimer_Stop (timer);
+				OS.GCHandle_Free (timer);
+			}
+		}
+	}
+	timerHandles = null;
+	timerList = null;
+	if (nameScope != 0) OS.GCHandle_Free (nameScope);
+	nameScope = 0;
+	if (application != 0) {
+		OS.Application_Shutdown (application);
+		OS.GCHandle_Free (application);
+	}
+	application = 0;
+	if (dispatcher != 0) OS.GCHandle_Free (dispatcher);
+	dispatcher = 0;
+	if (frame != 0) OS.GCHandle_Free (frame);
+	frame = 0;
+	if (jniRef != 0) OS.DeleteGlobalRef (jniRef);
+	jniRef = 0;
+	
+	for (int i = 0; i < colors.length; i++) {
+		if (colors [i] != null) colors [i].dispose ();
+	}
+	colors = null;
+	
+//	/* Release the System fonts */
+//	if (systemFont != null) systemFont.dispose ();
+//	systemFont = null;
+//	lfSystemFont = null;
+		
+	/* Release the System Images */
+	if (errorImage != null) errorImage.dispose ();
+	if (infoImage != null) infoImage.dispose ();
+	if (questionImage != null) questionImage.dispose ();
+	if (warningIcon != null) warningIcon.dispose ();
+	errorImage = infoImage = questionImage = warningIcon = null;
+	
+	/* Release the System Cursors */
+	for (int i = 0; i < cursors.length; i++) {
+		if (cursors [i] != null) cursors [i].dispose ();
+	}
+	cursors = null;
+	
+//	/* Release Acquired Resources */
+//	if (resources != null) {
+//		for (int i=0; i<resources.length; i++) {
+//			if (resources [i] != null) resources [i].dispose ();
+//		}
+//		resources = null;
+//	}
+//
+	/* Release Custom Colors for ChooseColor */
+	if (customColors != 0) OS.GCHandle_Free (customColors);
+	customColors = 0;
+
+	/* Release references */
+	thread = null;
+//	modalDialogShell = null;
+	modalShells = null;
+	data = null;
+	keys = null;
+	values = null;
+	popups = null;
+	mouseControl = null;
+	shells = null;
+	eventTable = filterTable = null;
+
+	/* Uninitialize OLE */
+	Win32.OleUninitialize ();
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when an event of the given type occurs anywhere in
+ * a widget. The event type is one of the event constants defined
+ * in class <code>SWT</code>.
+ *
+ * @param eventType the type of event to listen for
+ * @param listener the listener which should no longer be notified when the event occurs
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Listener
+ * @see SWT
+ * @see #addFilter
+ * @see #addListener
+ * 
+ * @since 3.0
+ */
+public void removeFilter (int eventType, Listener listener) {
+	checkDevice ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (filterTable == null) return;
+	filterTable.unhook (eventType, listener);
+	if (filterTable.size () == 0) filterTable = null;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when an event of the given type occurs. The event type
+ * is one of the event constants defined in class <code>SWT</code>.
+ *
+ * @param eventType the type of event to listen for
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see Listener
+ * @see SWT
+ * @see #addListener
+ * 
+ * @since 2.0 
+ */
+public void removeListener (int eventType, Listener listener) {
+	checkDevice ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (eventType, listener);
+}
+
+Widget removeWidget (int handle) {
+	if (handle == 0) return null;
+	int tag = OS.FrameworkElement_Tag (handle), ref = 0;
+	if (tag != 0) {
+		ref = OS.IntPtr_ToInt32(tag);
+		OS.GCHandle_Free(tag);
+	}
+	Widget widget = null;
+	if (ref != 0) {
+		OS.FrameworkElement_Tag (handle, 0);
+		widget = (Widget) OS.JNIGetObject (ref);
+	}
+	return widget;
+}
+
+boolean runAsyncMessages (boolean all) {
+	return synchronizer.runAsyncMessages (all);
+}
+
+boolean runDeferredEvents () {
+	boolean run = false;
+	/*
+	* Run deferred events.  This code is always
+	* called in the Display's thread so it must
+	* be re-enterant but need not be synchronized.
+	*/
+	while (eventQueue != null) {
+		
+		/* Take an event off the queue */
+		Event event = eventQueue [0];
+		if (event == null) break;
+		int length = eventQueue.length;
+		System.arraycopy (eventQueue, 1, eventQueue, 0, --length);
+		eventQueue [length] = null;
+
+		/* Run the event */
+		Widget widget = event.widget;
+		if (widget != null && !widget.isDisposed ()) {
+			Widget item = event.item;
+			if (item == null || !item.isDisposed ()) {
+				run = true;
+				widget.sendEvent (event);
+			}
+		}
+
+		/*
+		* At this point, the event queue could
+		* be null due to a recursive invokation
+		* when running the event.
+		*/
+	}
+
+	/* Clear the queue */
+	eventQueue = null;
+	return run;
+}
+
+boolean runPopups () {
+	if (popups == null) return false;
+	boolean result = false;
+	while (popups != null) {
+		Menu menu = popups [0];
+		if (menu == null) break;
+		int length = popups.length;
+		System.arraycopy (popups, 1, popups, 0, --length);
+		popups [length] = null;
+		runDeferredEvents ();
+		if (!menu.isDisposed()) menu._setVisible (true);
+		result = true;
+	}
+	popups = null;
+	return result;
+}
+
+void runSettings () {
+	Font oldFont = getSystemFont ();
+	saveResources ();
+//	updateImages ();
+	sendEvent (SWT.Settings, null);
+	Font newFont = getSystemFont ();
+	boolean sameFont = oldFont.equals (newFont);
+	Shell [] shells = getShells ();
+	for (int i=0; i<shells.length; i++) {
+		Shell shell = shells [i];
+		if (!shell.isDisposed ()) {
+			if (!sameFont) {
+				shell.updateFont (oldFont, newFont);
+			}
+			/* This code is intentionally commented */
+			//shell.redraw (true);
+			shell.layout (true, true);
+		}
+	}
+}
+
+void saveResources () {
+//	int resourceCount = 0;
+//	if (resources == null) {
+//		resources = new Resource [RESOURCE_SIZE];
+//	} else {
+//		resourceCount = resources.length;
+//		Resource [] newResources = new Resource [resourceCount + RESOURCE_SIZE];
+//		System.arraycopy (resources, 0, newResources, 0, resourceCount);
+//		resources = newResources;
+//	}
+//	if (systemFont != null) {
+//		if (!OS.IsWinCE) {
+//			NONCLIENTMETRICS info = OS.IsUnicode ? (NONCLIENTMETRICS) new NONCLIENTMETRICSW () : new NONCLIENTMETRICSA ();
+//			info.cbSize = NONCLIENTMETRICS.sizeof;
+//			if (OS.SystemParametersInfo (OS.SPI_GETNONCLIENTMETRICS, 0, info, 0)) {
+//				LOGFONT logFont = OS.IsUnicode ? (LOGFONT) ((NONCLIENTMETRICSW)info).lfMessageFont : ((NONCLIENTMETRICSA)info).lfMessageFont;
+//				if (lfSystemFont == null ||
+//					logFont.lfCharSet != lfSystemFont.lfCharSet ||
+//					logFont.lfHeight != lfSystemFont.lfHeight ||
+//					logFont.lfWidth != lfSystemFont.lfWidth ||
+//					logFont.lfEscapement != lfSystemFont.lfEscapement ||
+//					logFont.lfOrientation != lfSystemFont.lfOrientation ||
+//					logFont.lfWeight != lfSystemFont.lfWeight ||
+//					logFont.lfItalic != lfSystemFont.lfItalic ||
+//					logFont.lfUnderline != lfSystemFont.lfUnderline ||
+//					logFont.lfStrikeOut != lfSystemFont.lfStrikeOut ||
+//					logFont.lfCharSet != lfSystemFont.lfCharSet ||
+//					logFont.lfOutPrecision != lfSystemFont.lfOutPrecision ||
+//					logFont.lfClipPrecision != lfSystemFont.lfClipPrecision ||
+//					logFont.lfQuality != lfSystemFont.lfQuality ||
+//					logFont.lfPitchAndFamily != lfSystemFont.lfPitchAndFamily ||
+//					!getFontName (logFont).equals (getFontName (lfSystemFont))) {
+//						resources [resourceCount++] = systemFont;
+//						lfSystemFont = logFont;
+//						systemFont = null;
+//				}
+//			}
+//		}
+//	}
+//	if (errorImage != null) resources [resourceCount++] = errorImage;
+//	if (infoImage != null) resources [resourceCount++] = infoImage;
+//	if (questionImage != null) resources [resourceCount++] = questionImage;
+//	if (warningIcon != null) resources [resourceCount++] = warningIcon;
+//	errorImage = infoImage = questionImage = warningIcon = null;
+//	for (int i=0; i<cursors.length; i++) {
+//		if (cursors [i] != null) resources [resourceCount++] = cursors [i];
+//		cursors [i] = null;
+//	}
+//	if (resourceCount < RESOURCE_SIZE) {
+//		Resource [] newResources = new Resource [resourceCount];
+//		System.arraycopy (resources, 0, newResources, 0, resourceCount);
+//		resources = newResources;
+//	}
+}
+
+void sendEvent (int eventType, Event event) {
+	if (eventTable == null && filterTable == null) {
+		return;
+	}
+	if (event == null) event = new Event ();
+	event.display = this;
+	event.type = eventType;
+	if (event.time == 0) event.time = getLastEventTime ();
+	if (!filterEvent (event)) {
+		if (eventTable != null) eventTable.sendEvent (event);
+	}
+}
+
+/**
+ * Sets the location of the on-screen pointer relative to the top left corner
+ * of the screen.  <b>Note: It is typically considered bad practice for a
+ * program to move the on-screen pointer location.</b>
+ *
+ * @param x the new x coordinate for the cursor
+ * @param y the new y coordinate for the cursor
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 2.1
+ */
+public void setCursorLocation (int x, int y) {
+	checkDevice ();
+	Win32.SetCursorPos (x, y);
+}
+
+/**
+ * Sets the location of the on-screen pointer relative to the top left corner
+ * of the screen.  <b>Note: It is typically considered bad practice for a
+ * program to move the on-screen pointer location.</b>
+ *
+ * @param point new position
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @since 2.0
+ */
+public void setCursorLocation (Point point) {
+	checkDevice ();
+	if (point == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setCursorLocation (point.x, point.y);
+}
+
+/**
+ * Sets the application defined property of the receiver
+ * with the specified name to the given argument.
+ * <p>
+ * Applications may have associated arbitrary objects with the
+ * receiver in this fashion. If the objects stored in the
+ * properties need to be notified when the display is disposed
+ * of, it is the application's responsibility provide a
+ * <code>disposeExec()</code> handler which does so.
+ * </p>
+ *
+ * @param key the name of the property
+ * @param value the new value for the property
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the key is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #getData(String)
+ * @see #disposeExec(Runnable)
+ */
+public void setData (String key, Object value) {
+	checkDevice ();
+	if (key == null) error (SWT.ERROR_NULL_ARGUMENT);
+
+//	if (key.equals (RUN_MESSAGES_IN_IDLE_KEY)) {
+//		Boolean data = (Boolean) value;
+//		runMessagesInIdle = data != null && data.booleanValue ();
+//		return;
+//	}
+	
+	/* Remove the key/value pair */
+	if (value == null) {
+		if (keys == null) return;
+		int index = 0;
+		while (index < keys.length && !keys [index].equals (key)) index++;
+		if (index == keys.length) return;
+		if (keys.length == 1) {
+			keys = null;
+			values = null;
+		} else {
+			String [] newKeys = new String [keys.length - 1];
+			Object [] newValues = new Object [values.length - 1];
+			System.arraycopy (keys, 0, newKeys, 0, index);
+			System.arraycopy (keys, index + 1, newKeys, index, newKeys.length - index);
+			System.arraycopy (values, 0, newValues, 0, index);
+			System.arraycopy (values, index + 1, newValues, index, newValues.length - index);
+			keys = newKeys;
+			values = newValues;
+		}
+		return;
+	}
+	
+	/* Add the key/value pair */
+	if (keys == null) {
+		keys = new String [] {key};
+		values = new Object [] {value};
+		return;
+	}
+	for (int i=0; i<keys.length; i++) {
+		if (keys [i].equals (key)) {
+			values [i] = value;
+			return;
+		}
+	}
+	String [] newKeys = new String [keys.length + 1];
+	Object [] newValues = new Object [values.length + 1];
+	System.arraycopy (keys, 0, newKeys, 0, keys.length);
+	System.arraycopy (values, 0, newValues, 0, values.length);
+	newKeys [keys.length] = key;
+	newValues [values.length] = value;
+	keys = newKeys;
+	values = newValues;
+}
+
+/**
+ * Sets the application defined, display specific data
+ * associated with the receiver, to the argument.
+ * The <em>display specific data</em> is a single,
+ * unnamed field that is stored with every display. 
+ * <p>
+ * Applications may put arbitrary objects in this field. If
+ * the object stored in the display specific data needs to
+ * be notified when the display is disposed of, it is the
+ * application's responsibility provide a
+ * <code>disposeExec()</code> handler which does so.
+ * </p>
+ *
+ * @param data the new display specific data
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #getData()
+ * @see #disposeExec(Runnable)
+ */
+public void setData (Object data) {
+	checkDevice ();
+	this.data = data;
+}
+
+/**
+ * On platforms which support it, sets the application name
+ * to be the argument. On Motif, for example, this can be used
+ * to set the name used for resource lookup.  Specifying
+ * <code>null</code> for the name clears it.
+ *
+ * @param name the new app name or <code>null</code>
+ */
+public static void setAppName (String name) {
+	/* Do nothing */
+}
+
+//void setModalDialogShell (Shell modalDailog) {
+//	if (modalDialogShell != null && modalDialogShell.isDisposed ()) modalDialogShell = null;
+//	this.modalDialogShell = modalDailog;
+//	Shell [] shells = getShells ();
+//	for (int i=0; i<shells.length; i++) shells [i].updateModal ();
+//}
+
+void setIdleHandler () {
+	idle = true;
+}
+
+void setModalShell (Shell shell) {
+	if (modalShells == null) modalShells = new Shell [4];
+	int index = 0, length = modalShells.length;
+	while (index < length) {
+		if (modalShells [index] == shell) return;
+		if (modalShells [index] == null) break;
+		index++;
+	}
+	if (index == length) {
+		Shell [] newModalShells = new Shell [length + 4];
+		System.arraycopy (modalShells, 0, newModalShells, 0, length);
+		modalShells = newModalShells;
+	}
+	modalShells [index] = shell;
+	Shell [] shells = getShells ();
+	for (int i=0; i<shells.length; i++) shells [i].updateModal ();
+}
+
+/**
+ * Sets the synchronizer used by the display to be
+ * the argument, which can not be null.
+ *
+ * @param synchronizer the new synchronizer for the display (must not be null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the synchronizer is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_FAILED_EXEC - if an exception occurred while running an inter-thread message</li>
+ * </ul>
+ */
+public void setSynchronizer (Synchronizer synchronizer) {
+	checkDevice ();
+	if (synchronizer == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (synchronizer == this.synchronizer) return;
+	Synchronizer oldSynchronizer;
+	synchronized (Device.class) {
+		oldSynchronizer = this.synchronizer;
+		this.synchronizer = synchronizer;
+	}
+	if (oldSynchronizer != null) {
+		oldSynchronizer.runAsyncMessages(true);
+	}
+}
+
+/**
+ * Causes the user-interface thread to <em>sleep</em> (that is,
+ * to be put in a state where it does not consume CPU cycles)
+ * until an event is received or it is otherwise awakened.
+ *
+ * @return <code>true</code> if an event requiring dispatching was placed on the queue.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #wake
+ */
+public boolean sleep () {
+	checkDevice ();
+	int handler = OS.gcnew_NoArgsDelegate (jniRef, "sleep_noop");
+	sleepOperation = OS.Dispatcher_BeginInvoke(dispatcher, OS.DispatcherPriority_Inactive, handler);
+	OS.DispatcherOperation_Wait(sleepOperation);
+	OS.GCHandle_Free(handler);
+	OS.GCHandle_Free(sleepOperation);
+	sleepOperation = 0;
+	return true;
+}
+
+void sleep_noop() {
+}
+
+/**
+ * Causes the <code>run()</code> method of the runnable to
+ * be invoked by the user-interface thread at the next 
+ * reasonable opportunity. The thread which calls this method
+ * is suspended until the runnable completes.  Specifying <code>null</code>
+ * as the runnable simply wakes the user-interface thread.
+ * <p>
+ * Note that at the time the runnable is invoked, widgets 
+ * that have the receiver as their display may have been
+ * disposed. Therefore, it is necessary to check for this
+ * case inside the runnable before accessing the widget.
+ * </p>
+ * 
+ * @param runnable code to run on the user-interface thread or <code>null</code>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_FAILED_EXEC - if an exception occurred when executing the runnable</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #asyncExec
+ */
+public void syncExec (Runnable runnable) {
+	Synchronizer synchronizer;
+	synchronized (Device.class) {
+		if (isDisposed ()) error (SWT.ERROR_DEVICE_DISPOSED);
+		synchronizer = this.synchronizer;
+	}
+	synchronizer.syncExec (runnable);
+}
+
+/**
+ * Causes the <code>run()</code> method of the runnable to
+ * be invoked by the user-interface thread after the specified
+ * number of milliseconds have elapsed. If milliseconds is less
+ * than zero, the runnable is not executed.
+ * <p>
+ * Note that at the time the runnable is invoked, widgets 
+ * that have the receiver as their display may have been
+ * disposed. Therefore, it is necessary to check for this
+ * case inside the runnable before accessing the widget.
+ * </p>
+ *
+ * @param milliseconds the delay before running the runnable
+ * @param runnable code to run on the user-interface thread
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the runnable is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ *
+ * @see #asyncExec
+ */
+public void timerExec (int milliseconds, Runnable runnable) {
+	checkDevice ();
+	if (runnable == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (timerList == null) timerList = new Runnable [4];
+	if (timerHandles == null) timerHandles = new int [4];
+	int index = 0;
+	while (index < timerList.length) {
+		if (timerList [index] == runnable) break;
+		index++;
+	}
+	int timer = 0;
+	if (index != timerList.length) {
+		timer = timerHandles [index];
+		if (milliseconds < 0) {
+			OS.DispatcherTimer_Stop (timer);
+			timerList [index] = null;
+			OS.GCHandle_Free (timer);
+			timerHandles [index] = 0;
+			return;
+		}
+	} else {
+		if (milliseconds < 0) return;
+		index = 0;
+		while (index < timerList.length) {
+			if (timerList [index] == null) break;
+			index++;
+		}
+		if (index == timerList.length) {
+			Runnable [] newTimerList = new Runnable [timerList.length + 4];
+			System.arraycopy (timerList, 0, newTimerList, 0, timerList.length);
+			timerList = newTimerList;
+			int [] newTimerHandles = new int [timerHandles.length + 4];
+			System.arraycopy (timerHandles, 0, newTimerHandles, 0, timerHandles.length);
+			timerHandles = newTimerHandles;
+		}
+	}
+	if (timer == 0) timer = OS.gcnew_DispatcherTimer();
+	if (timer != 0) {
+		OS.DispatcherTimer_Tag (timer, index);
+		int timeSpan = OS.TimeSpan_FromMilliseconds (milliseconds);
+		OS.DispatcherTimer_Interval(timer, timeSpan);
+		OS.DispatcherTimer_Tick (timer, timerHandler);
+		OS.DispatcherTimer_Start (timer);
+		timerList [index] = runnable;
+		timerHandles [index] = timer;
+		OS.GCHandle_Free (timeSpan);
+	}
+}
+
+void timerProc (int index, int e) {
+	if (0 <= index && index < timerHandles.length) {
+		int timer = timerHandles [index];
+		if (timer != 0) {
+			OS.DispatcherTimer_Stop (timer);
+			OS.GCHandle_Free (timer);
+			timerHandles [index] = 0;
+			Runnable runnable = timerList [index];
+			timerList [index] = null;
+			runnable.run ();
+		}
+	}
+}
+
+static int translateKey (int key) {
+	for (int i=0; i<KeyTable.length; i++) {
+		if (KeyTable [i] [0] == key) return KeyTable [i] [1];
+	}
+	return 0;
+}
+
+static int untranslateKey (int key) {
+	for (int i=0; i<KeyTable.length; i++) {
+		if (KeyTable [i] [1] == key) return KeyTable [i] [0];
+	}
+	return 0;
+}
+
+/**
+ * Forces all outstanding paint requests for the display
+ * to be processed before this method returns.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see Control#update()
+ */
+public void update() {
+	checkDevice ();
+	Shell[] shells = getShells ();
+	for (int i=0; i<shells.length; i++) {
+		Shell shell = shells [i];
+		if (!shell.isDisposed ()) shell.update (true);
+	}
+}
+
+/**
+ * If the receiver's user-interface thread was <code>sleep</code>ing, 
+ * causes it to be awakened and start running again. Note that this
+ * method may be called from any thread.
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_DEVICE_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ * 
+ * @see #sleep
+ */
+public void wake () {
+	synchronized (Device.class) {
+		if (isDisposed ()) error (SWT.ERROR_DEVICE_DISPOSED);
+		if (thread == Thread.currentThread ()) return;
+		wakeThread ();
+	}
+}
+
+void wakeThreadHandler () {
+}
+
+void wakeThread () {
+	int handler = OS.gcnew_NoArgsDelegate (jniRef, "wakeThreadHandler");
+	int operation = OS.Dispatcher_BeginInvoke (dispatcher, OS.DispatcherPriority_Normal, handler);
+	OS.GCHandle_Free (operation);
+	OS.GCHandle_Free (handler);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ExpandBar.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ExpandBar.java
new file mode 100644
index 0000000..b6cfac1
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ExpandBar.java
@@ -0,0 +1,459 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * Instances of this class support the layout of selectable
+ * expand bar items.
+ * <p>
+ * The item children that may be added to instances of this class
+ * must be of type <code>ExpandItem</code>.
+ * </p><p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>V_SCROLL</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Expand, Collapse</dd>
+ * </dl>
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see ExpandItem
+ * @see ExpandEvent
+ * @see ExpandListener
+ * @see ExpandAdapter
+ * @see <a href="http://www.eclipse.org/swt/snippets/#expandbar">ExpandBar snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.2
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class ExpandBar extends Composite {
+	int parentingHandle;
+	Control [] children;
+	int itemCount, childCount;
+	int spacing;
+	
+	
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#V_SCROLL
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public ExpandBar (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+Control [] _getChildren () {
+	// return children in reverse order.
+	Control[] result = new Control [childCount];
+	for (int i = 0; i < childCount; i++) {
+		result [childCount - i - 1] = children [i]; 
+	}
+	return result;
+}
+
+void addChild (Control control) {
+	super.addChild (control);
+	if (childCount == children.length) {
+		Control [] newChildren = new Control [childCount + 4];
+		System.arraycopy (children, 0, newChildren, 0, childCount);
+		children = newChildren;
+	}
+	children [childCount++] = control;
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when an item in the receiver is expanded or collapsed
+ * by sending it one of the messages defined in the <code>ExpandListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ExpandListener
+ * @see #removeExpandListener
+ */
+public void addExpandListener (ExpandListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Expand, typedListener);
+	addListener (SWT.Collapse, typedListener);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+static int checkStyle (int style) {
+	style &= ~SWT.H_SCROLL;
+	return style;
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget ();
+	Point size = computeSize (handle, wHint, hHint, changed);
+	Rectangle trim = computeTrim (0, 0, size.x, size.y);
+	return new Point (trim.width, trim.height);
+}
+
+void createHandle () {
+	state |= THEME_BACKGROUND;
+	parentingHandle = OS.gcnew_Canvas ();
+	if (parentingHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	scrolledHandle = OS.gcnew_ScrollViewer ();
+	if (scrolledHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	handle = OS.gcnew_StackPanel ();
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	int children = OS.Panel_Children (parentingHandle);
+	OS.UIElementCollection_Add (children, scrolledHandle);
+	OS.GCHandle_Free (children);
+	OS.ContentControl_Content (scrolledHandle, handle);
+}
+
+void createItem (ExpandItem item, int style, int index) {
+	if (!(0 <= index && index <= itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	item.createWidget ();
+	int items = OS.Panel_Children (handle);
+	OS.UIElementCollection_Insert (items, index, item.topHandle ());
+	int count = OS.UIElementCollection_Count (items);
+	OS.GCHandle_Free (items);
+	if (itemCount == count) error (SWT.ERROR_ITEM_NOT_ADDED);
+	itemCount++;
+}
+
+void createWidget () {
+	super.createWidget ();
+	children = new Control [4];
+}
+
+int defaultBackground () {
+	return OS.SystemColors_ControlColor;
+}
+
+void deregister () {
+	super.deregister ();
+	display.removeWidget (parentingHandle);
+}
+
+void destroyItem (ExpandItem item) {
+	int items = OS.Panel_Children (handle);
+	OS.UIElementCollection_Remove (items, item.topHandle ());
+	int count = OS.UIElementCollection_Count (items);
+	OS.GCHandle_Free (items);
+	if (itemCount == count) error (SWT.ERROR_ITEM_NOT_REMOVED);
+	itemCount--;
+}
+
+void fixScrollbarVisibility () {
+	OS.ScrollViewer_SetHorizontalScrollBarVisibility (scrolledHandle, OS.ScrollBarVisibility_Hidden);
+	if ((style & SWT.V_SCROLL) == 0) {
+		OS.ScrollViewer_SetVerticalScrollBarVisibility (scrolledHandle, OS.ScrollBarVisibility_Hidden);
+	} else {
+		OS.ScrollViewer_SetVerticalScrollBarVisibility (scrolledHandle, OS.ScrollBarVisibility_Auto);
+	}
+}
+
+Point getLocation (Control child) {
+	int topHandle = child.topHandle ();
+	int point = OS.gcnew_Point (0, 0);
+	if (point == 0) error (SWT.ERROR_NO_HANDLES);
+	int location = OS.UIElement_TranslatePoint (topHandle, point, handle);
+	int x = (int) OS.Point_X (location);
+	int y = (int) OS.Point_Y (location);
+	OS.GCHandle_Free (point);
+	OS.GCHandle_Free (location);
+	return new Point (x, y);
+}
+
+/**
+ * Returns the item at the given, zero-relative index in the
+ * receiver. Throws an exception if the index is out of range.
+ *
+ * @param index the index of the item to return
+ * @return the item at the given index
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public ExpandItem getItem (int index) {
+	checkWidget ();
+	if (!(0 <= index && index < itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	int items = OS.Panel_Children (handle);
+	ExpandItem item = getItem (items, index);
+	OS.GCHandle_Free (items);
+	return item;
+}
+
+ExpandItem getItem (int items, int index) {
+	int item = OS.UIElementCollection_default (items, index);
+	ExpandItem result = (ExpandItem) display.getWidget (item);
+	OS.GCHandle_Free (item);
+	return result;
+}
+
+/**
+ * Returns the number of items contained in the receiver.
+ *
+ * @return the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemCount () {
+	checkWidget ();
+	return itemCount;
+}
+
+/**
+ * Returns an array of <code>ExpandItem</code>s which are the items
+ * in the receiver. 
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the items in the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public ExpandItem [] getItems () {
+	checkWidget ();
+	ExpandItem [] result = new ExpandItem [itemCount];
+	int items = OS.Panel_Children (handle);
+	for (int i=0; i<itemCount; i++) {
+		result [i] = getItem (items, i);
+	}
+	OS.GCHandle_Free (items);
+	return result;
+}
+
+int getScrollBarHandle (int style) {
+	if ((style & SWT.H_SCROLL) != 0) return 0;
+	updateLayout (handle);
+	int template = OS.Control_Template (scrolledHandle);
+	int part = createDotNetString ("PART_VerticalScrollBar", false);
+	int scrollbar = OS.FrameworkTemplate_FindName (template, part, scrolledHandle);
+	OS.GCHandle_Free (part);
+	OS.GCHandle_Free (template);
+	return scrollbar;
+}
+
+/**
+ * Returns the receiver's spacing.
+ *
+ * @return the spacing
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSpacing () {
+	checkWidget ();
+	return spacing;
+}
+
+boolean hasItems () {
+	return true;
+}
+
+/**
+ * Searches the receiver's list starting at the first item
+ * (index 0) until an item is found that is equal to the 
+ * argument, and returns the index of that item. If no item
+ * is found, returns -1.
+ *
+ * @param item the search item
+ * @return the index of the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int indexOf (ExpandItem item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int items = OS.Panel_Children (handle);
+	int index = OS.UIElementCollection_IndexOf (items, item.topHandle ());
+	OS.GCHandle_Free (items);
+	return index;
+}
+
+int parentingHandle() {
+	return parentingHandle;
+}
+
+void register () {
+	super.register ();
+	display.addWidget (parentingHandle, this);
+}
+
+void releaseChildren (boolean destroy) {
+	int items = OS.Panel_Children (handle);
+	for (int i=0; i<itemCount; i++) {
+		ExpandItem item = getItem (items, i);
+		if (item != null && !item.isDisposed ()) item.release (false);
+	}
+	OS.GCHandle_Free (items);
+	super.releaseChildren (destroy);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (parentingHandle != 0) OS.GCHandle_Free (parentingHandle);
+	parentingHandle = 0;
+}
+
+void removeChild (Control control) {
+	super.removeChild (control);
+	int index = 0;
+	while (index < childCount) {
+		if (children [index] == control) break;
+		index++;
+	}
+	if (index == childCount) return;
+	System.arraycopy (children, index+1, children, index, --childCount - index);
+	children [childCount] = null;
+}
+
+void removeControl (Control control) {
+	super.removeControl (control);
+	int items = OS.Panel_Children (handle);
+	for (int i=0; i<itemCount; i++) {
+		ExpandItem item = getItem (items, i);
+		if (item.control == control) { 
+			item.setControl (null);
+			break;
+		}
+	}
+	OS.GCHandle_Free (items);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when items in the receiver are expanded or collapsed.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ExpandListener
+ * @see #addExpandListener
+ */
+public void removeExpandListener (ExpandListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Expand, listener);
+	eventTable.unhook (SWT.Collapse, listener);	
+}
+
+int setBounds (int x, int y, int width, int height, int flags) {
+	int result = super.setBounds (x, y, width, height, flags);
+	if ((result & RESIZED) != 0) {
+		OS.FrameworkElement_Height (scrolledHandle, height);
+		OS.FrameworkElement_Width (scrolledHandle, width);
+	}
+	return result;
+}
+
+/**
+ * Sets the receiver's spacing. Spacing specifies the number of pixels allocated around 
+ * each item.
+ * 
+ * @param spacing the spacing around each item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSpacing (int spacing) {
+	checkWidget ();
+	if (spacing < 0) return;
+	if (spacing == this.spacing) return;
+	this.spacing = spacing;
+	int thickness = OS.gcnew_Thickness (spacing, spacing, spacing, spacing);
+	int items = OS.Panel_Children (handle);
+	for (int i = 0; i < itemCount; i++) {
+		ExpandItem item = getItem (items, i);
+		OS.FrameworkElement_Margin (item.handle, thickness);	
+	}
+	OS.GCHandle_Free (items);
+	OS.GCHandle_Free (thickness);	
+}
+
+int topHandle () {
+	return parentingHandle;
+}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ExpandItem.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ExpandItem.java
new file mode 100644
index 0000000..b7b55c5
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ExpandItem.java
@@ -0,0 +1,397 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+
+/**
+ * Instances of this class represent a selectable user interface object
+ * that represents a expandable item in a expand bar.
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see ExpandBar
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.2
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class ExpandItem extends Item {
+	ExpandBar parent;
+	Control control;
+	int imageHandle, textHandle, contentHandle;
+	
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public ExpandItem (ExpandBar parent, int style) {
+	this (parent, style, checkNull (parent).getItemCount ());
+}
+
+/**
+ * Constructs a new instance of this class given its parent, a
+ * style value describing its behavior and appearance, and the index
+ * at which to place it in the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ * @param index the zero-relative index to store the receiver in its parent
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the parent (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public ExpandItem (ExpandBar parent, int style, int index) {
+	super (parent, style);
+	this.parent = parent;
+	parent.createItem (this, style, index);
+}
+
+static ExpandBar checkNull (ExpandBar control) {
+	if (control == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	return control;	
+}
+
+void createHandle () {
+	handle = OS.gcnew_Expander ();
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	int spacing = parent.spacing;
+	int thickness = OS.gcnew_Thickness (spacing, spacing, spacing, spacing);
+	OS.FrameworkElement_Margin (handle, thickness);	
+	OS.GCHandle_Free (thickness);
+	imageHandle = OS.gcnew_Image ();
+	if (imageHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.Image_Stretch (imageHandle, OS.Stretch_None);
+	OS.UIElement_Visibility (imageHandle, OS.Visibility_Collapsed);
+	textHandle = OS.gcnew_TextBlock ();
+	if (textHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	int panel = OS.gcnew_StackPanel ();
+	if (panel == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.StackPanel_Orientation (panel, OS.Orientation_Horizontal);
+	thickness = OS.gcnew_Thickness (1, 1, 1, 1);
+	if (thickness == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.FrameworkElement_Margin (panel, thickness);
+	OS.GCHandle_Free (thickness);
+	int children = OS.Panel_Children (panel);
+	OS.UIElementCollection_Add (children, imageHandle);
+	OS.UIElementCollection_Add (children, textHandle);
+	OS.GCHandle_Free (children);
+	OS.HeaderedContentControl_Header (handle, panel);
+	OS.GCHandle_Free (panel);
+	contentHandle = OS.gcnew_Canvas ();
+	if (contentHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.ContentControl_Content (handle, contentHandle);
+}
+
+void deregister () {
+	display.removeWidget (handle);
+}
+
+void destroyWidget () {
+	parent.destroyItem (this);
+	releaseHandle ();
+}
+
+/**
+ * Returns the control that is shown when the item is expanded.
+ * If no control has been set, return <code>null</code>.
+ *
+ * @return the control
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Control getControl () {
+	checkWidget ();
+	return control;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is expanded,
+ * and false otherwise.
+ *
+ * @return the expanded state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getExpanded () {
+	checkWidget ();
+	return OS.Expander_IsExpanded (handle);
+}
+
+/**
+ * Returns the height of the receiver's header 
+ *
+ * @return the height of the header 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getHeaderHeight () {
+	checkWidget ();
+	int panel = OS.HeaderedContentControl_Header (handle);
+	return (int) OS.FrameworkElement_ActualHeight (panel);
+}
+
+/**
+ * Gets the height of the receiver.
+ *
+ * @return the height
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getHeight () {
+	checkWidget ();
+	return (int) OS.FrameworkElement_Height (contentHandle);
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>ExpandBar</code>.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public ExpandBar getParent () {
+	checkWidget ();
+	return parent;
+}
+
+Control getWidgetControl () {
+	return parent;
+}
+
+void HandleExpanded (int sender, int e) {
+	if (!checkEvent (e)) return;
+	Event event = new Event ();
+	event.item = this;
+	parent.notifyListeners (SWT.Expand, event);
+}
+
+void HandleCollapsed (int sender, int e) {
+	if (!checkEvent (e)) return;
+	Event event = new Event ();
+	event.item = this;
+	parent.notifyListeners (SWT.Collapse, event);
+}
+
+void HandleSizeChanged (int sender, int e) {
+	if (!checkEvent (e)) return;
+	resizeControl ();
+}
+
+void hookEvents () {
+	super.hookEvents ();
+	int handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleExpanded");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.Expander_Expanded (handle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleCollapsed");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.Expander_Collapsed (handle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_SizeChangedEventHandler (jniRef, "HandleSizeChanged");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.FrameworkElement_SizeChanged (contentHandle, handler);
+	OS.GCHandle_Free (handler);
+}
+
+void register () {
+	display.addWidget (handle, this);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (handle != 0) OS.GCHandle_Free (handle);
+	handle = 0;
+	parent = null;
+	if (textHandle != 0) OS.GCHandle_Free (textHandle);
+	textHandle = 0;
+	if (imageHandle !=0 )OS.GCHandle_Free (imageHandle);
+	imageHandle = 0;
+	if (contentHandle != 0) OS.GCHandle_Free (contentHandle);
+	contentHandle = 0;
+}
+
+void resizeControl () {
+	if (control != null) { 
+		int width = (int) OS.FrameworkElement_ActualWidth (contentHandle);
+		int height = (int) OS.FrameworkElement_Height (contentHandle);
+		control.setSize (width, height);
+	}
+}
+
+/**
+ * Sets the control that is shown when the item is expanded.
+ *
+ * @param control the new control (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the control has been disposed</li> 
+ *    <li>ERROR_INVALID_PARENT - if the control is not in the same widget tree</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setControl (Control control) {
+	checkWidget ();
+	if (control != null) {
+		if (control.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+		if (control.parent != parent) error (SWT.ERROR_INVALID_PARENT);
+	}
+	Control oldControl = this.control, newControl = control;
+	this.control = control;
+	int children = OS.Panel_Children (contentHandle);
+	int parentHandle = parent.parentingHandle ();
+	int parentChildren = OS.Panel_Children (parentHandle);
+	if (newControl != null) {
+		int topHandle = newControl.topHandle ();
+		OS.UIElementCollection_Remove (parentChildren, topHandle);
+		OS.UIElementCollection_Add (children, topHandle);
+	}
+	if (oldControl != null) {
+		int topHandle = oldControl.topHandle ();
+		OS.UIElementCollection_Remove (children, topHandle);
+		OS.UIElementCollection_Add (parentChildren, topHandle);
+	}
+	OS.GCHandle_Free (children);
+	OS.GCHandle_Free (parentChildren);
+}
+
+/**
+ * Sets the expanded state of the receiver.
+ *
+ * @param expanded the new expanded state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setExpanded (boolean expanded) {
+	checkWidget ();
+	OS.Expander_IsExpanded(handle, expanded);
+}
+
+/**
+ * Sets the height of the receiver. This is height of the item when it is expanded, 
+ * excluding the height of the header.
+ *
+ * @param height the new height
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setHeight (int height) {
+	checkWidget ();
+	if (height < 0) return;
+	OS.FrameworkElement_Height (contentHandle, height);
+}
+
+public void setImage (Image image) {
+	super.setImage (image);
+	if (image != null && image.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
+	this.image = image;
+	OS.Image_Source (imageHandle, image != null ? image.handle : 0);
+	OS.UIElement_Visibility (imageHandle, image != null ? OS.Visibility_Visible : OS.Visibility_Collapsed);
+	OS.UIElement_Visibility (textHandle, image != null && text.length () == 0 ? OS.Visibility_Collapsed : OS.Visibility_Visible);
+	int spacing = image != null && text.length () != 0 ? 3 : 0;
+	int margin = OS.gcnew_Thickness (0, 0, spacing, 0);
+	if (margin == 0) error(SWT.ERROR_NO_HANDLES);
+	OS.FrameworkElement_Margin (imageHandle, margin);
+	OS.GCHandle_Free (margin);
+}
+
+public void setText (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (string.equals (text)) return;
+	text = string;
+	int ptr = createDotNetString (text, false);
+	if (ptr == 0) error(SWT.ERROR_NO_HANDLES);
+	OS.TextBlock_Text (textHandle, ptr);
+	OS.GCHandle_Free (ptr);
+	OS.UIElement_Visibility (textHandle, text.length() == 0 && image != null ? OS.Visibility_Collapsed : OS.Visibility_Visible);
+	int spacing = image != null && text.length () != 0 ? 3 : 0;
+	int margin = OS.gcnew_Thickness (0, 0, spacing, 0);
+	if (margin == 0) error(SWT.ERROR_NO_HANDLES);
+	OS.FrameworkElement_Margin (imageHandle, margin);
+	OS.GCHandle_Free (margin);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/FileDialog.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/FileDialog.java
new file mode 100644
index 0000000..af8aa3c
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/FileDialog.java
@@ -0,0 +1,374 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+
+/**
+ * Instances of this class allow the user to navigate
+ * the file system and select or enter a file name.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>SAVE, OPEN, MULTI</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles SAVE and OPEN may be specified.
+ * </p><p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/snippets/#filedialog">FileDialog snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class FileDialog extends Dialog {
+	String [] filterNames = new String [0];
+	String [] filterExtensions = new String [0];
+	String [] fileNames = new String [0];
+	String filterPath = "", fileName = "";  //$NON-NLS-1$//$NON-NLS-2$
+	int filterIndex = -1;
+	boolean overwrite = false;
+
+/**
+ * Constructs a new instance of this class given only its parent.
+ *
+ * @param parent a shell which will be the parent of the new instance
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ */
+public FileDialog (Shell parent) {
+	this (parent, SWT.APPLICATION_MODAL);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a shell which will be the parent of the new instance
+ * @param style the style of dialog to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ * 
+ * @see SWT#SAVE
+ * @see SWT#OPEN
+ * @see SWT#MULTI
+ */
+public FileDialog (Shell parent, int style) {
+	super (parent, checkStyle (parent, style));
+	checkSubclass ();
+}
+
+/**
+ * Returns the path of the first file that was
+ * selected in the dialog relative to the filter path, or an
+ * empty string if no such file has been selected.
+ * 
+ * @return the relative path of the file
+ */
+public String getFileName () {
+	return fileName;
+}
+
+/**
+ * Returns a (possibly empty) array with the paths of all files
+ * that were selected in the dialog relative to the filter path.
+ * 
+ * @return the relative paths of the files
+ */
+public String [] getFileNames () {
+	return fileNames;
+}
+
+/**
+ * Returns the file extensions which the dialog will
+ * use to filter the files it shows.
+ *
+ * @return the file extensions filter
+ */
+public String [] getFilterExtensions () {
+	return filterExtensions;
+}
+
+/**
+ * Get the 0-based index of the file extension filter
+ * which was selected by the user, or -1 if no filter
+ * was selected.
+ * <p>
+ * This is an index into the FilterExtensions array and
+ * the FilterNames array.
+ * </p>
+ *
+ * @return index the file extension filter index
+ * 
+ * @see #getFilterExtensions
+ * @see #getFilterNames
+ * 
+ * @since 3.4
+ */
+public int getFilterIndex () {
+	return filterIndex;
+}
+
+/**
+ * Returns the names that describe the filter extensions
+ * which the dialog will use to filter the files it shows.
+ *
+ * @return the list of filter names
+ */
+public String [] getFilterNames () {
+	return filterNames;
+}
+
+/**
+ * Returns the directory path that the dialog will use, or an empty
+ * string if this is not set.  File names in this path will appear
+ * in the dialog, filtered according to the filter extensions.
+ *
+ * @return the directory path string
+ * 
+ * @see #setFilterExtensions
+ */
+public String getFilterPath () {
+	return filterPath;
+}
+
+/**
+ * Returns the flag that the dialog will use to
+ * determine whether to prompt the user for file
+ * overwrite if the selected file already exists.
+ *
+ * @return true if the dialog will prompt for file overwrite, false otherwise
+ * 
+ * @since 3.4
+ */
+public boolean getOverwrite () {
+	return overwrite;
+}
+
+/**
+ * Makes the dialog visible and brings it to the front
+ * of the display.
+ *
+ * @return a string describing the absolute path of the first selected file,
+ *         or null if the dialog was cancelled or an error occurred
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the dialog has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the dialog</li>
+ * </ul>
+ */
+public String open () {
+	int dialog;
+	if ((style & SWT.SAVE) != 0) {
+		dialog = OS.gcnew_SaveFileDialog ();
+	} else {
+		dialog = OS.gcnew_OpenFileDialog ();
+		if ((style & SWT.MULTI) != 0) OS.OpenFileDialog_Multiselect (dialog, true);
+	}
+	int titlePtr = parent.createDotNetString (title, false);
+	OS.FileDialog_Title (dialog, titlePtr);
+	OS.GCHandle_Free (titlePtr);
+	int fileNamePtr = parent.createDotNetString (fileName, false);
+	OS.FileDialog_FileName (dialog, fileNamePtr);
+	OS.GCHandle_Free (fileNamePtr);
+
+	if (filterExtensions != null && filterExtensions.length > 0) {
+		StringBuffer strFilter = new StringBuffer();
+		for (int i=0; i<filterExtensions.length; i++) {
+			if (i > 0) strFilter.append("|");
+			if (filterNames != null && i < filterNames.length) {
+				strFilter.append(filterNames [i]);
+			} else {
+				strFilter.append(filterExtensions [i]);
+			}
+			strFilter.append("|");
+			strFilter.append(filterExtensions [i]);
+		}
+		int filterPtr = parent.createDotNetString(strFilter.toString (), false);
+		OS.FileDialog_Filter (dialog, filterPtr);
+		OS.GCHandle_Free (filterPtr);
+		if (filterIndex != -1) OS.FileDialog_FilterIndex (dialog, filterIndex + 1);
+	}
+	
+	int filterPathPtr = parent.createDotNetString (filterPath, false);
+	OS.FileDialog_InitialDirectory (dialog, filterPathPtr);
+	OS.GCHandle_Free (filterPathPtr);
+	
+	if ((style & SWT.SAVE) != 0) OS.SaveFileDialog_OverwritePrompt (dialog, overwrite);
+	
+	int parentHandle = (parent.style & SWT.ON_TOP) == 0 ? parent.shellHandle : 0;
+	boolean success = OS.CommonDialog_ShowDialog (dialog, parentHandle);
+
+	/* Set the new path, file name and filter */
+	String fullPath = null;
+	if (success) {
+		int strings = OS.FileDialog_FileNames (dialog);
+		int length = OS.ICollection_Count (strings);
+		fileNames = new String [length];
+		for (int i = 0; i < length; i++) {
+			int str = OS.IList_default (strings, i);
+			int fileInfo = OS.gcnew_FileInfo (str);
+			int name = OS.FileInfo_Name (fileInfo);
+			fileNames [i] = Widget.createJavaString (name);
+			if (i == 0) {
+				int dir = OS.FileInfo_DirectoryName (fileInfo);
+				filterPath = Widget.createJavaString (dir);
+				OS.GCHandle_Free (dir);
+			}
+			OS.GCHandle_Free (name);
+			OS.GCHandle_Free (fileInfo);
+			OS.GCHandle_Free (str);
+		}
+		OS.GCHandle_Free (strings);
+		fullPath = filterPath + "\\" + fileNames [0];
+		fileName = fileNames [0];
+	} else {
+		fileNames = new String [0];
+	}
+	filterIndex = OS.FileDialog_FilterIndex (dialog) - 1;
+	
+	OS.GCHandle_Free (dialog);
+	/* Answer the full path or null */
+	return fullPath;
+}
+
+/**
+ * Set the initial filename which the dialog will
+ * select by default when opened to the argument,
+ * which may be null.  The name will be prefixed with
+ * the filter path when one is supplied.
+ * 
+ * @param string the file name
+ */
+public void setFileName (String string) {
+	fileName = string;
+}
+
+/**
+ * Set the file extensions which the dialog will
+ * use to filter the files it shows to the argument,
+ * which may be null.
+ * <p>
+ * The strings are platform specific. For example, on
+ * some platforms, an extension filter string is typically
+ * of the form "*.extension", where "*.*" matches all files.
+ * For filters with multiple extensions, use semicolon as
+ * a separator, e.g. "*.jpg;*.png".
+ * </p>
+ *
+ * @param extensions the file extension filter
+ * 
+ * @see #setFilterNames to specify the user-friendly
+ * names corresponding to the extensions
+ */
+public void setFilterExtensions (String [] extensions) {
+	filterExtensions = extensions;
+}
+
+/**
+ * Set the 0-based index of the file extension filter
+ * which the dialog will use initially to filter the files
+ * it shows to the argument.
+ * <p>
+ * This is an index into the FilterExtensions array and
+ * the FilterNames array.
+ * </p>
+ *
+ * @param index the file extension filter index
+ * 
+ * @see #setFilterExtensions
+ * @see #setFilterNames
+ * 
+ * @since 3.4
+ */
+public void setFilterIndex (int index) {
+	filterIndex = index;
+}
+
+/**
+ * Sets the names that describe the filter extensions
+ * which the dialog will use to filter the files it shows
+ * to the argument, which may be null.
+ * <p>
+ * Each name is a user-friendly short description shown for
+ * its corresponding filter. The <code>names</code> array must
+ * be the same length as the <code>extensions</code> array.
+ * </p>
+ *
+ * @param names the list of filter names, or null for no filter names
+ * 
+ * @see #setFilterExtensions
+ */
+public void setFilterNames (String [] names) {
+	filterNames = names;
+}
+
+/**
+ * Sets the directory path that the dialog will use
+ * to the argument, which may be null. File names in this
+ * path will appear in the dialog, filtered according
+ * to the filter extensions. If the string is null,
+ * then the operating system's default filter path
+ * will be used.
+ * <p>
+ * Note that the path string is platform dependent.
+ * For convenience, either '/' or '\' can be used
+ * as a path separator.
+ * </p>
+ *
+ * @param string the directory path
+ * 
+ * @see #setFilterExtensions
+ */
+public void setFilterPath (String string) {
+	filterPath = string;
+}
+
+/**
+ * Sets the flag that the dialog will use to
+ * determine whether to prompt the user for file
+ * overwrite if the selected file already exists.
+ *
+ * @param overwrite true if the dialog will prompt for file overwrite, false otherwise
+ * 
+ * @since 3.4
+ */
+public void setOverwrite (boolean overwrite) {
+	this.overwrite = overwrite;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/FontDialog.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/FontDialog.java
new file mode 100644
index 0000000..345524e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/FontDialog.java
@@ -0,0 +1,243 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.wpf.OS;
+
+/**
+ * Instances of this class allow the user to select a font
+ * from all available fonts in the system.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class FontDialog extends Dialog {
+	FontData fontData;
+	RGB rgb;
+	
+/**
+ * Constructs a new instance of this class given only its parent.
+ *
+ * @param parent a shell which will be the parent of the new instance
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ */
+public FontDialog (Shell parent) {
+	this (parent, SWT.APPLICATION_MODAL);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a shell which will be the parent of the new instance
+ * @param style the style of dialog to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ */
+public FontDialog (Shell parent, int style) {
+	super (parent, checkStyle (parent, style));
+	checkSubclass ();
+}
+
+/**
+ * Returns a FontData object describing the font that was
+ * selected in the dialog, or null if none is available.
+ * 
+ * @return the FontData for the selected font, or null
+ * @deprecated use #getFontList ()
+ */
+public FontData getFontData () {
+	return fontData;
+}
+
+/**
+ * Returns a FontData set describing the font that was
+ * selected in the dialog, or null if none is available.
+ * 
+ * @return the FontData for the selected font, or null
+ * @since 2.1.1
+ */
+public FontData [] getFontList () {
+	if (fontData == null) return null;
+	FontData [] result = new FontData [1];
+	result [0] = fontData;
+	return result;
+}
+
+/**
+ * Returns an RGB describing the color that was selected
+ * in the dialog, or null if none is available.
+ *
+ * @return the RGB value for the selected color, or null
+ *
+ * @see PaletteData#getRGBs
+ * 
+ * @since 2.1
+ */
+public RGB getRGB () {
+	return rgb;
+}
+
+/**
+ * Makes the dialog visible and brings it to the front
+ * of the display.
+ *
+ * @return a FontData object describing the font that was selected,
+ *         or null if the dialog was cancelled or an error occurred
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the dialog has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the dialog</li>
+ * </ul>
+ */
+public FontData open () {
+	int dialog = OS.gcnew_FontDialog ();
+	OS.FontDialog_ShowColor  (dialog, true);
+	if (fontData != null) {
+		int fontFamily = parent.createDotNetString (fontData.fontFamily, false);
+		int fontStyle = 0;
+		int fontWeight = OS.FontWeight_ToOpenTypeWeight (OS.FontWeights_Bold);
+		if (fontWeight == fontData.weight) fontStyle |= OS.FontStyle_Bold;
+		if (fontData.style == OS.FontStyles_Italic) fontStyle |= OS.FontStyle_Italic;
+		if (fontData.style == OS.FontStyles_Normal) fontStyle |= OS.FontStyle_Regular;
+		//TODO strikethrough/underline
+		int font = OS.gcnew_Font (fontFamily, fontData.height, fontStyle);
+		OS.FontDialog_Font (dialog, font);
+		OS.GCHandle_Free (font);
+		OS.GCHandle_Free (fontFamily);
+	}
+	if (rgb != null) {
+		int color = OS.DrawingColor_FromArgb (174, rgb.red, rgb.blue, rgb.green);
+		OS.FontDialog_Color (dialog, color);
+		OS.GCHandle_Free (color);
+	}
+	int result = OS.FormsCommonDialog_ShowDialog (dialog);
+	boolean success = result == OS.DialogResult_OK; 
+	if (success) {
+		int font = OS.FontDialog_Font (dialog);
+		int fontFamilyPtr = OS.Font_FontFamily (font);
+		int fontFamilyName = OS.DrawingFontFamily_Name (fontFamilyPtr);
+		String fontFamily = Widget.createJavaString (fontFamilyName);
+		int fontStyle = OS.Font_Style (font);
+		int fontDataStyle;
+		if ((fontStyle & OS.FontStyle_Italic) != 0) {
+			fontDataStyle = OS.FontStyles_Italic;
+		} else {
+			fontDataStyle = OS.FontStyles_Normal;
+		}
+		int weight; 
+		if ((fontStyle & OS.FontStyle_Bold) != 0) {
+			weight = OS.FontWeight_ToOpenTypeWeight (OS.FontWeights_Bold);
+		} else {
+			weight = OS.FontWeight_ToOpenTypeWeight (OS.FontWeights_Normal);
+		}
+		int height = OS.Font_Size (font);
+		OS.GCHandle_Free(fontFamilyName);
+		OS.GCHandle_Free(fontFamilyPtr);
+		OS.GCHandle_Free(font);
+		fontData = FontData.wpf_new (fontFamily, fontDataStyle, weight, 1, height);
+				
+		int color = OS.FontDialog_Color (dialog);
+		int argb = OS.DrawingColor_ToArgb (color);	
+		int red = (argb & 0xFF0000) >> 16;
+		int green = (argb & 0xFF00) >> 8;
+		int blue = argb & 0xFF;
+		OS.GCHandle_Free (color);
+		rgb = new RGB (red, green, blue);
+	}
+	OS.GCHandle_Free (dialog);
+	return success ? fontData : null;
+}
+
+/**
+ * Sets a FontData object describing the font to be
+ * selected by default in the dialog, or null to let
+ * the platform choose one.
+ * 
+ * @param fontData the FontData to use initially, or null
+ * @deprecated use #setFontList (FontData [])
+ */
+public void setFontData (FontData fontData) {
+	this.fontData = fontData;
+}
+
+/**
+ * Sets the set of FontData objects describing the font to
+ * be selected by default in the dialog, or null to let
+ * the platform choose one.
+ * 
+ * @param fontData the set of FontData objects to use initially, or null
+ *        to let the platform select a default when open() is called
+ *
+ * @see Font#getFontData
+ * 
+ * @since 2.1.1
+ */
+public void setFontList (FontData [] fontData) {
+	if (fontData != null && fontData.length > 0) {
+		this.fontData = fontData [0];
+	} else {
+		this.fontData = null;
+	}
+}
+
+/**
+ * Sets the RGB describing the color to be selected by default
+ * in the dialog, or null to let the platform choose one.
+ *
+ * @param rgb the RGB value to use initially, or null to let
+ *        the platform select a default when open() is called
+ *
+ * @see PaletteData#getRGBs
+ * 
+ * @since 2.1
+ */
+public void setRGB (RGB rgb) {
+	this.rgb = rgb;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Group.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Group.java
new file mode 100644
index 0000000..5877f27
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Group.java
@@ -0,0 +1,240 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+
+/**
+ * Instances of this class provide an etched border
+ * with an optional title.
+ * <p>
+ * Shadow styles are hints and may not be honoured
+ * by the platform.  To create a group with the
+ * default shadow style for the platform, do not
+ * specify a shadow style.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>SHADOW_ETCHED_IN, SHADOW_ETCHED_OUT, SHADOW_IN, SHADOW_OUT, SHADOW_NONE</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the above styles may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ * 
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class Group extends Composite {
+	int parentingHandle;
+	String text;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#SHADOW_ETCHED_IN
+ * @see SWT#SHADOW_ETCHED_OUT
+ * @see SWT#SHADOW_IN
+ * @see SWT#SHADOW_OUT
+ * @see SWT#SHADOW_NONE
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Group (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+static int checkStyle (int style) {
+	style |= SWT.NO_FOCUS;
+	/*
+	* Even though it is legal to create this widget
+	* with scroll bars, they serve no useful purpose
+	* because they do not automatically scroll the
+	* widget's client area.  The fix is to clear
+	* the SWT style.
+	*/
+	return style & ~(SWT.H_SCROLL | SWT.V_SCROLL);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+int backgroundProperty () {
+	return OS.Control_BackgroundProperty ();
+}
+
+int clientHandle () {
+	return parentingHandle;
+}
+
+void createHandle () {
+	state |= THEME_BACKGROUND;
+	handle = OS.gcnew_GroupBox ();
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	parentingHandle = OS.gcnew_Canvas ();
+	if (parentingHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.ContentControl_Content (handle, parentingHandle);
+}
+
+public Rectangle computeTrim (int x, int y, int width, int height) {
+	int topHandle = topHandle ();
+	int clientHandle = clientHandle();
+	if (clientHandle != topHandle) {
+		double currentWidth = OS.FrameworkElement_Width (topHandle);
+		double currentHeight = OS.FrameworkElement_Height (topHandle);
+		OS.FrameworkElement_Width (topHandle, 100);
+		OS.FrameworkElement_Height (topHandle, 100);
+		updateLayout (topHandle);
+		int w = (int) OS.FrameworkElement_ActualWidth (topHandle);
+		int h = (int) OS.FrameworkElement_ActualHeight (topHandle);
+		int clientWidth = (int) OS.FrameworkElement_ActualWidth (clientHandle);
+		int clientHeight = (int) OS.FrameworkElement_ActualHeight (clientHandle);
+		int point = OS.gcnew_Point (0, 0);
+		int result = OS.UIElement_TranslatePoint (clientHandle, point, topHandle);
+		x -= (int) OS.Point_X (result);
+		y -= (int) OS.Point_Y (result);
+		width += (w - clientWidth);
+		height += (h - clientHeight);
+		OS.GCHandle_Free (point);
+		OS.GCHandle_Free (result);
+		OS.FrameworkElement_Width (topHandle, currentWidth);
+		OS.FrameworkElement_Height (topHandle, currentHeight);
+	}
+	return new Rectangle (x, y, width, height);
+}
+
+int defaultBackground () {
+	return OS.SystemColors_ControlColor;
+}
+
+void enableWidget (boolean enabled) {
+	OS.UIElement_IsHitTestVisible (handle, enabled);
+}
+
+String getNameText () {
+	return getText ();
+}
+
+/**
+ * Returns the receiver's text, which is the string that the
+ * is used as the <em>title</em>. If the text has not previously
+ * been set, returns an empty string.
+ *
+ * @return the text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getText () {
+	checkWidget ();
+	return text;
+}
+
+boolean mnemonicHit (char key) {
+	return false;
+}
+
+boolean mnemonicMatch (char key) {
+	int accessText = OS.HeaderedContentControl_Header (handle);
+	boolean result = super.mnemonicMatch (accessText, key);
+	OS.GCHandle_Free (accessText);
+	return result;
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	OS.GCHandle_Free (parentingHandle);
+	parentingHandle = 0;
+}
+
+void setForegroundBrush (int brush) {
+	if (brush != 0) {
+		OS.Control_Foreground (handle, brush);
+	} else {
+		int property = OS.Control_ForegroundProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+	}
+}
+
+/**
+ * Sets the receiver's text, which is the string that will
+ * be displayed as the receiver's <em>title</em>, to the argument,
+ * which may not be null. The string may include the mnemonic character.
+ * </p>
+ * Mnemonics are indicated by an '&amp;' that causes the next
+ * character to be the mnemonic.  When the user presses a
+ * key sequence that matches the mnemonic, focus is assigned
+ * to the first child of the group. On most platforms, the
+ * mnemonic appears underlined but may be emphasised in a
+ * platform specific manner.  The mnemonic indicator character
+ * '&amp;' can be escaped by doubling it in the string, causing
+ * a single '&amp;' to be displayed.
+ * </p>
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setText (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (string.equals (text)) return;
+	text = string;
+	int ptr = createDotNetString (text, true);
+	int accessText = OS.gcnew_AccessText ();
+	if (ptr != 0) OS.AccessText_Text (accessText, ptr);
+	OS.HeaderedContentControl_Header (handle, accessText);
+	if (ptr != 0) OS.GCHandle_Free (ptr);
+	OS.GCHandle_Free (accessText);
+}
+
+int parentingHandle () {
+	return parentingHandle;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Label.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Label.java
new file mode 100644
index 0000000..d3bc102
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Label.java
@@ -0,0 +1,320 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class represent a non-selectable
+ * user interface object that displays a string or image.
+ * When SEPARATOR is specified, displays a single
+ * vertical or horizontal line.
+ * <p>
+ * Shadow styles are hints and may not be honored
+ * by the platform.  To create a separator label
+ * with the default shadow style for the platform,
+ * do not specify a shadow style.
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>SEPARATOR, HORIZONTAL, VERTICAL</dd>
+ * <dd>SHADOW_IN, SHADOW_OUT, SHADOW_NONE</dd>
+ * <dd>CENTER, LEFT, RIGHT, WRAP</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of SHADOW_IN, SHADOW_OUT and SHADOW_NONE may be specified.
+ * SHADOW_NONE is a HINT. Only one of HORIZONTAL and VERTICAL may be specified.
+ * Only one of CENTER, LEFT and RIGHT may be specified.
+ * </p><p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#label">Label snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Label extends Control {
+	String text = "";
+	Image image;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#SEPARATOR
+ * @see SWT#HORIZONTAL
+ * @see SWT#VERTICAL
+ * @see SWT#SHADOW_IN
+ * @see SWT#SHADOW_OUT
+ * @see SWT#SHADOW_NONE
+ * @see SWT#CENTER
+ * @see SWT#LEFT
+ * @see SWT#RIGHT
+ * @see SWT#WRAP
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Label (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+static int checkStyle (int style) {
+	style |= SWT.NO_FOCUS;
+	if ((style & SWT.SEPARATOR) != 0) {
+		style = checkBits (style, SWT.VERTICAL, SWT.HORIZONTAL, 0, 0, 0, 0);
+		return checkBits (style, SWT.SHADOW_OUT, SWT.SHADOW_IN, SWT.SHADOW_NONE, 0, 0, 0);
+	} 
+	return checkBits (style, SWT.LEFT, SWT.CENTER, SWT.RIGHT, 0, 0, 0);
+}
+
+void createHandle () {
+	state |= THEME_BACKGROUND;
+	if ((style & SWT.SEPARATOR) != 0) {
+		handle = OS.gcnew_UserControl ();
+		if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+		int separator = OS.gcnew_Label ();
+		if (separator == 0) error (SWT.ERROR_NO_HANDLES);
+		OS.ContentControl_Content (handle, separator);
+		if ((style & SWT.VERTICAL) != 0) {
+			OS.FrameworkElement_Width (separator, OS.SystemParameters_ThinVerticalBorderWidth ());
+			OS.Control_HorizontalContentAlignment (handle, OS.HorizontalAlignment_Center);
+			OS.Control_VerticalContentAlignment (handle, OS.VerticalAlignment_Stretch);
+		} else {
+			OS.FrameworkElement_Height (separator, OS.SystemParameters_ThinHorizontalBorderHeight ());
+			OS.Control_HorizontalContentAlignment (handle, OS.HorizontalAlignment_Stretch);
+			OS.Control_VerticalContentAlignment (handle, OS.VerticalAlignment_Center);
+		}
+		int brush = OS.SystemColors_ActiveBorderBrush ();
+		OS.Control_Background (separator, brush);
+		OS.GCHandle_Free (brush);
+		OS.GCHandle_Free (separator);
+	} else {
+		handle = OS.gcnew_Label ();
+		if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+		int value = OS.HorizontalAlignment_Left;
+		if ((style & SWT.CENTER) != 0) value = OS.HorizontalAlignment_Center;
+		if ((style & SWT.RIGHT) != 0) value = OS.HorizontalAlignment_Right;
+		OS.Control_HorizontalContentAlignment (handle, value);
+		int margin = OS.gcnew_Thickness (0, 0, 0, 0);
+		OS.Control_Padding (handle, margin);
+		OS.GCHandle_Free (margin);
+	}
+}
+
+int defaultBackground () {
+	//TEMPORARY CODE
+//	return OS.SystemColors_ControlColor;
+	return 0;
+}
+
+/**
+ * Returns a value which describes the position of the
+ * text or image in the receiver. The value will be one of
+ * <code>LEFT</code>, <code>RIGHT</code> or <code>CENTER</code>
+ * unless the receiver is a <code>SEPARATOR</code> label, in 
+ * which case, <code>NONE</code> is returned.
+ *
+ * @return the alignment 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getAlignment () {
+	checkWidget ();
+	if ((style & SWT.SEPARATOR) != 0) return 0;
+	if ((style & SWT.LEFT) != 0) return SWT.LEFT;
+	if ((style & SWT.CENTER) != 0) return SWT.CENTER;
+	if ((style & SWT.RIGHT) != 0) return SWT.RIGHT;
+	return SWT.LEFT;
+}
+
+/**
+ * Returns the receiver's image if it has one, or null
+ * if it does not.
+ *
+ * @return the receiver's image
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Image getImage () {
+	checkWidget ();
+	return image;
+}
+
+String getNameText () {
+	return getText ();
+}
+
+/**
+ * Returns the receiver's text, which will be an empty
+ * string if it has never been set or if the receiver is
+ * a <code>SEPARATOR</code> label.
+ *
+ * @return the receiver's text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getText () {
+	checkWidget ();
+	if ((style & SWT.SEPARATOR) != 0) return "";
+	return text;
+}
+
+boolean mnemonicHit (char key) {
+	//TODO
+	return false;
+}
+
+boolean mnemonicMatch (char key) {
+	int accessText = OS.ContentControl_Content (handle);
+	boolean result = super.mnemonicMatch (accessText, key);
+	OS.GCHandle_Free (accessText);
+	return result;
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	text = null;
+	image = null;
+}
+
+/**
+ * Controls how text and images will be displayed in the receiver.
+ * The argument should be one of <code>LEFT</code>, <code>RIGHT</code>
+ * or <code>CENTER</code>.  If the receiver is a <code>SEPARATOR</code>
+ * label, the argument is ignored and the alignment is not changed.
+ *
+ * @param alignment the new alignment 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setAlignment (int alignment) {
+	checkWidget ();
+	if ((style & SWT.SEPARATOR) != 0) return;
+	if ((alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER)) == 0) return;
+	style &= ~(SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+	style |= alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+	int value = OS.HorizontalAlignment_Left;
+	if ((style & SWT.CENTER) != 0) value = OS.HorizontalAlignment_Center;
+	if ((style & SWT.RIGHT) != 0) value = OS.HorizontalAlignment_Right;
+	OS.Control_HorizontalContentAlignment (handle, value);
+}
+
+/**
+ * Sets the receiver's image to the argument, which may be
+ * null indicating that no image should be displayed.
+ *
+ * @param image the image to display on the receiver (may be null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setImage (Image image) {
+	checkWidget ();
+	if ((style & SWT.SEPARATOR) != 0) return;
+	if (image != null && image.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	this.image = image;
+	int imageHandle = OS.gcnew_Image ();
+	OS.Image_Stretch (imageHandle, OS.Stretch_None);
+	OS.Image_Source (imageHandle, image != null ? image.handle : 0);
+	OS.ContentControl_Content (handle, imageHandle);
+	OS.GCHandle_Free (imageHandle);
+}
+
+/**
+ * Sets the receiver's text.
+ * <p>
+ * This method sets the widget label.  The label may include
+ * the mnemonic character and line delimiters.
+ * </p>
+ * <p>
+ * Mnemonics are indicated by an '&amp;' that causes the next
+ * character to be the mnemonic.  When the user presses a
+ * key sequence that matches the mnemonic, focus is assigned
+ * to the control that follows the label. On most platforms,
+ * the mnemonic appears underlined but may be emphasised in a
+ * platform specific manner.  The mnemonic indicator character
+ * '&amp;' can be escaped by doubling it in the string, causing
+ * a single '&amp;' to be displayed.
+ * </p>
+ * 
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setText (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if ((style & SWT.SEPARATOR) != 0) return;
+	if (string.equals (text)) return;
+	text = string;
+	int ptr = createDotNetString (text, true);
+	int accessText = OS.gcnew_AccessText ();
+	if (accessText == 0) error (SWT.ERROR_NO_HANDLES);
+	if ((style & SWT.WRAP) != 0) {
+		OS.AccessText_TextWrapping (accessText, OS.TextWrapping_WrapWithOverflow);
+	}
+	OS.AccessText_Text (accessText, ptr);
+	OS.ContentControl_Content (handle, accessText);
+	OS.GCHandle_Free (ptr);
+	OS.GCHandle_Free (accessText);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Link.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Link.java
new file mode 100644
index 0000000..4a6895c
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Link.java
@@ -0,0 +1,461 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * Instances of this class represent a selectable
+ * user interface object that displays a text with 
+ * links.
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#link">Link snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.1
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Link extends Control {
+	Point [] offsets;
+	Point selection;
+	String [] ids;
+	String text;
+	private int[] mnemonics;
+	
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Link (Composite parent, int style) {
+	super (parent, style);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is called when the control is selected by the user.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection, typedListener);
+	addListener (SWT.DefaultSelection, typedListener);
+}
+
+int backgroundProperty () {
+	return OS.TextBlock_BackgroundProperty ();
+}
+
+void createHandle () {
+	state |= THEME_BACKGROUND;
+	handle = OS.gcnew_TextBlock ();
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+}
+
+int defaultBackground () {
+	return OS.SystemColors_ControlColor;
+}
+
+String getNameText () {
+	return getText ();
+}
+
+/**
+ * Returns the receiver's text, which will be an empty
+ * string if it has never been set.
+ *
+ * @return the receiver's text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getText () {
+	checkWidget ();
+	return text;
+}
+
+void HandleClick (int sender, int e) {
+	if (!checkEvent (e)) return;
+	int source = OS.RoutedEventArgs_Source (e);
+	int i = OS.FrameworkContentElement_Tag (source);
+	OS.GCHandle_Free (source);
+	Event event = new Event ();
+	event.text = ids [i];
+	sendEvent (SWT.Selection, event);	
+}
+
+String parse (String string) {
+	int length = string.length ();
+	offsets = new Point [length / 4];
+	ids = new String [length / 4];
+	mnemonics = new int [length / 4 + 1];
+	StringBuffer result = new StringBuffer ();
+	char [] buffer = new char [length];
+	string.getChars (0, string.length (), buffer, 0);
+	int index = 0, state = 0, linkIndex = 0;
+	int start = 0, tagStart = 0, linkStart = 0, endtagStart = 0, refStart = 0;
+	while (index < length) {
+		char c = Character.toLowerCase (buffer [index]);
+		switch (state) {
+			case 0: 
+				if (c == '<') {
+					tagStart = index;
+					state++;
+				}
+				break;
+			case 1:
+				if (c == 'a') state++;
+				break;
+			case 2:
+				switch (c) {
+					case 'h':
+						state = 7;
+						break;
+					case '>':
+						linkStart = index  + 1;
+						state++;
+						break;
+					default:
+						if (Character.isWhitespace(c)) break;
+						else state = 13;
+				}
+				break;
+			case 3:
+				if (c == '<') {
+					endtagStart = index;
+					state++;
+				}
+				break;
+			case 4:
+				state = c == '/' ? state + 1 : 3;
+				break;
+			case 5:
+				state = c == 'a' ? state + 1 : 3;
+				break;
+			case 6:
+				if (c == '>') {
+					mnemonics [linkIndex] = parseMnemonics (buffer, start, tagStart, result);
+					int offset = result.length ();
+					parseMnemonics (buffer, linkStart, endtagStart, result);
+					offsets [linkIndex] = new Point (offset, result.length () - 1);
+					if (ids [linkIndex] == null) {
+						ids [linkIndex] = new String (buffer, linkStart, endtagStart - linkStart);
+					}
+					linkIndex++;
+					start = tagStart = linkStart = endtagStart = refStart = index + 1;
+					state = 0;
+				} else {
+					state = 3;
+				}
+				break;
+			case 7:
+				state = c == 'r' ? state + 1 : 0;
+				break;
+			case 8:
+				state = c == 'e' ? state + 1 : 0;
+				break;
+			case 9:
+				state = c == 'f' ? state + 1 : 0;
+				break;
+			case 10:
+				state = c == '=' ? state + 1 : 0;
+				break;
+			case 11:
+				if (c == '"') {
+					state++;
+					refStart = index + 1;
+				} else {
+					state = 0;
+				}
+				break;
+			case 12:
+				if (c == '"') {
+					ids[linkIndex] = new String (buffer, refStart, index - refStart);
+					state = 2;
+				}
+				break;
+			case 13:
+				if (Character.isWhitespace (c)) {
+					state = 0;
+				} else if (c == '='){
+					state++;
+				}
+				break;
+			case 14:
+				state = c == '"' ? state + 1 : 0;
+				break;
+			case 15:
+				if (c == '"') state = 2;
+				break;
+			default:
+				state = 0;
+				break;
+		}
+		index++;
+	}
+	if (start < length) {
+		int tmp = parseMnemonics (buffer, start, tagStart, result);
+		int mnemonic = parseMnemonics (buffer, Math.max (tagStart, linkStart), length, result);
+		if (mnemonic == -1) mnemonic = tmp;
+		mnemonics [linkIndex] = mnemonic;
+	} else {
+		mnemonics [linkIndex] = -1;
+	}
+	if (offsets.length != linkIndex) {
+		Point [] newOffsets = new Point [linkIndex];
+		System.arraycopy (offsets, 0, newOffsets, 0, linkIndex);
+		offsets = newOffsets;
+		String [] newIDs = new String [linkIndex];
+		System.arraycopy (ids, 0, newIDs, 0, linkIndex);
+		ids = newIDs;
+		int [] newMnemonics = new int [linkIndex + 1];
+		System.arraycopy (mnemonics, 0, newMnemonics, 0, linkIndex + 1);
+		mnemonics = newMnemonics;		
+	}
+	return result.toString ();
+}
+
+int parseMnemonics (char [] buffer, int start, int end, StringBuffer result) {
+	int mnemonic = -1, index = start;
+	while (index < end) {
+		if (buffer [index] == '&') {
+			if (index + 1 < end && buffer [index + 1] == '&') {
+				result.append (buffer [index]);
+				index++;
+			} else {
+				mnemonic = result.length();
+			}
+		} else {
+			result.append (buffer [index]);
+		}
+		index++;
+	}
+	return mnemonic;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection, listener);	
+}
+
+void setFont (int font, double size) {
+	if (font != 0) {
+		int fontFamily = OS.Typeface_FontFamily( font);
+		int style = OS.Typeface_Style (font);
+		int weight = OS.Typeface_Weight (font);
+		int stretch = OS.Typeface_Stretch (font);
+		OS.TextBlock_FontFamily (handle, fontFamily);
+		OS.TextBlock_FontStyle (handle, style);
+		OS.TextBlock_FontWeight (handle, weight);
+		OS.TextBlock_FontStretch (handle, stretch);
+		OS.TextBlock_FontSize (handle, size);
+		OS.GCHandle_Free (fontFamily);
+		OS.GCHandle_Free (style);
+		OS.GCHandle_Free (weight);
+		OS.GCHandle_Free (stretch);
+	} else {
+		int property = OS.TextBlock_FontFamilyProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS.TextBlock_FontStyleProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS.TextBlock_FontWeightProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS.TextBlock_FontStretchProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS.TextBlock_FontSizeProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+	}
+}
+
+void setForegroundBrush (int brush) {
+//TODO	
+}
+
+/**
+ * Sets the receiver's text.
+ * <p>
+ * The string can contain both regular text and hyperlinks.  A hyperlink
+ * is delimited by an anchor tag, &lt;A&gt; and &lt;/A&gt;.  Within an
+ * anchor, a single HREF attribute is supported.  When a hyperlink is
+ * selected, the text field of the selection event contains either the
+ * text of the hyperlink or the value of its HREF, if one was specified.
+ * In the rare case of identical hyperlinks within the same string, the
+ * HREF attribute can be used to distinguish between them.  The string may
+ * include the mnemonic character and line delimiters. The only delimiter
+ * the HREF attribute supports is the quotation mark (").
+ * </p>
+ * 
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setText (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (string.equals (text)) return;
+	text = string;	
+	String parsed = parse (string);
+	int inlines = OS.TextBlock_Inlines (handle);
+	OS.InlineCollection_Clear (inlines);
+	int start = 0, end = parsed.length ();
+	int offsetIndex = 0;
+	while (start < end) {
+		Point point = offsetIndex < offsets.length ? offsets [offsetIndex] : null;
+		if (point == null) {
+			String substring = parsed.substring (start, end);
+			int stringPtr = createDotNetString (substring, false);
+			if (stringPtr == 0) error(SWT.ERROR_NO_HANDLES);
+			int run = OS.gcnew_Run ();
+			if (run == 0) error(SWT.ERROR_NO_HANDLES);
+			OS.Run_Text (run, stringPtr);
+			OS.InlineCollection_Add (inlines, run);
+			OS.GCHandle_Free (stringPtr);
+			OS.GCHandle_Free (run);
+			start = end;
+		} else {
+			if (start < point.x) {
+				String substring = parsed.substring (start, point.x);
+				int stringPtr = createDotNetString (substring, false);
+				if (stringPtr == 0) error(SWT.ERROR_NO_HANDLES);
+				int run = OS.gcnew_Run ();
+				if (run == 0) error(SWT.ERROR_NO_HANDLES);
+				OS.Run_Text (run, stringPtr);
+				OS.InlineCollection_Add (inlines, run);
+				OS.GCHandle_Free (stringPtr);
+				OS.GCHandle_Free (run);
+				start = point.x;
+			} else {
+				String substring = parsed.substring (point.x, point.y+1);
+				int stringPtr = createDotNetString (substring, false);
+				if (stringPtr == 0) error(SWT.ERROR_NO_HANDLES);
+				int run = OS.gcnew_Run ();
+				if (run == 0) error(SWT.ERROR_NO_HANDLES);
+				OS.Run_Text (run, stringPtr);
+				int hyperlink = OS.gcnew_Hyperlink (run);
+				OS.FrameworkContentElement_Tag (hyperlink, offsetIndex);
+				OS.InlineCollection_Add (inlines, hyperlink);
+				int handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleClick");
+				OS.Hyperlink_Click (hyperlink, handler);
+				OS.GCHandle_Free (handler);
+				OS.GCHandle_Free (stringPtr);
+				OS.GCHandle_Free (run);
+				OS.GCHandle_Free (hyperlink);
+				start = point.y+1;
+				offsetIndex++;
+			}
+		}
+	}
+	OS.GCHandle_Free (inlines);
+}
+
+int traversalCode (int key, int event) {
+//	if (offsets.length == 0) return 0;
+	int bits = super.traversalCode (key, event);
+//	if (key == OS.Key_Tab && focusIndex < offsets.length - 1) {
+//		return bits & ~SWT.TRAVERSE_TAB_NEXT;
+//	}
+//	if (key == OS.GDK_ISO_Left_Tab && focusIndex > 0) {
+//		return bits & ~SWT.TRAVERSE_TAB_PREVIOUS;
+//	}
+	//TODO
+	return bits;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/List.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/List.java
new file mode 100644
index 0000000..6040ec4
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/List.java
@@ -0,0 +1,1186 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+
+/** 
+ * Instances of this class represent a selectable user interface
+ * object that displays a list of strings and issues notification
+ * when a string is selected.  A list may be single or multi select.
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>SINGLE, MULTI</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection, DefaultSelection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of SINGLE and MULTI may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#list">List snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class List extends Scrollable {
+	boolean ignoreSelection;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#SINGLE
+ * @see SWT#MULTI
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public List (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+/**
+ * Adds the argument to the end of the receiver's list.
+ *
+ * @param string the new item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #add(String,int)
+ */
+public void add (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int item = OS.gcnew_ListBoxItem ();
+	int strPtr = createDotNetString (string, false);
+	OS.ContentControl_Content (item, strPtr);
+	OS.GCHandle_Free (strPtr);
+	int items = OS.ItemsControl_Items (handle);
+	OS.ItemCollection_Add (items, item);
+	OS.GCHandle_Free (items);
+	OS.GCHandle_Free (item);
+}
+
+/**
+ * Adds the argument to the receiver's list at the given
+ * zero-relative index.
+ * <p>
+ * Note: To add an item at the end of the list, use the
+ * result of calling <code>getItemCount()</code> as the
+ * index or use <code>add(String)</code>.
+ * </p>
+ *
+ * @param string the new item
+ * @param index the index for the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #add(String)
+ */
+public void add (String string, int index) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (index < 0 || index > getItemCount ()) error (SWT.ERROR_INVALID_RANGE);
+	int item = OS.gcnew_ListBoxItem ();
+	int strPtr = createDotNetString (string, false);
+	OS.ContentControl_Content (item, strPtr);
+	OS.GCHandle_Free (strPtr);
+	int items = OS.ItemsControl_Items (handle);
+	OS.ItemCollection_Insert (items, index, item);
+	OS.GCHandle_Free (items);
+	OS.GCHandle_Free (item);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the user changes the receiver's selection, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is called when the selection changes.
+ * <code>widgetDefaultSelected</code> is typically called when an item is double-clicked.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the user changes the receiver's selection
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+static int checkStyle (int style) {
+	return checkBits (style, SWT.SINGLE, SWT.MULTI, 0, 0, 0, 0);
+}
+
+void createHandle () {
+	handle = OS.gcnew_ListBox ();
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.Selector_IsSynchronizedWithCurrentItem (handle, true);
+	if ((style & SWT.MULTI) != 0) OS.ListBox_SelectionMode (handle, OS.SelectionMode_Extended);
+}
+
+/**
+ * Deselects the items at the given zero-relative indices in the receiver.
+ * If the item at the given zero-relative index in the receiver 
+ * is selected, it is deselected.  If the item at the index
+ * was not selected, it remains deselected. Indices that are out
+ * of range and duplicate indices are ignored.
+ *
+ * @param indices the array of indices for the items to deselect
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the set of indices is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void deselect (int [] indices) {
+	checkWidget ();
+	if (indices == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (indices.length == 0) return;
+	int count = getItemCount ();
+	int items = OS.ItemsControl_Items (handle);
+	ignoreSelection = true;
+	for (int i = 0; i < indices.length; i++) {
+		int index = indices [i];
+		if (0 <= index && index < count) {
+			int item = OS.ItemCollection_GetItemAt (items, index);
+			OS.ListBoxItem_IsSelected (item, false);
+			OS.GCHandle_Free (item);
+		}
+	}
+	ignoreSelection = false;
+	OS.GCHandle_Free (items);
+}
+
+/**
+ * Deselects the item at the given zero-relative index in the receiver.
+ * If the item at the index was already deselected, it remains
+ * deselected. Indices that are out of range are ignored.
+ *
+ * @param index the index of the item to deselect
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void deselect (int index) {
+	checkWidget ();
+	if (index == -1) return;
+	if (0 <= index && index < getItemCount ()) {
+		int items = OS.ItemsControl_Items (handle);
+		int item = OS.ItemCollection_GetItemAt (items, index);
+		OS.GCHandle_Free (items);
+		ignoreSelection = true;
+		OS.ListBoxItem_IsSelected (item, false);
+		ignoreSelection = false;
+		OS.GCHandle_Free (item);
+	}
+}
+
+/**
+ * Deselects the items at the given zero-relative indices in the receiver.
+ * If the item at the given zero-relative index in the receiver 
+ * is selected, it is deselected.  If the item at the index
+ * was not selected, it remains deselected.  The range of the
+ * indices is inclusive. Indices that are out of range are ignored.
+ *
+ * @param start the start index of the items to deselect
+ * @param end the end index of the items to deselect
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void deselect (int start, int end) {
+	checkWidget ();
+	if (start > end) return;
+	int count = getItemCount ();
+	int items = OS.ItemsControl_Items (handle);
+	ignoreSelection = true;
+	for (int i = end; i >= start; i--) {
+		if (0 <= i && i < count) {
+			int item = OS.ItemCollection_GetItemAt (items, i);
+			OS.ListBoxItem_IsSelected (item, false);
+			OS.GCHandle_Free (item);
+		}
+	}
+	ignoreSelection = false;
+	OS.GCHandle_Free (items);
+}
+
+/**
+ * Deselects all selected items in the receiver.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void deselectAll () {
+	checkWidget ();
+	ignoreSelection = true;
+	OS.ListBox_UnselectAll (handle);
+	ignoreSelection = false;
+}
+
+/**
+ * Returns the zero-relative index of the item which currently
+ * has the focus in the receiver, or -1 if no item has focus.
+ *
+ * @return the index of the selected item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getFocusIndex () {
+	checkWidget ();
+	int items = OS.ItemsControl_Items (handle);
+	int index = OS.ItemCollection_CurrentPosition (items);
+	OS.GCHandle_Free (items);
+	return index;	
+}
+
+/**
+ * Returns the item at the given, zero-relative index in the
+ * receiver. Throws an exception if the index is out of range.
+ *
+ * @param index the index of the item to return
+ * @return the item at the given index
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getItem (int index) {
+	checkWidget ();
+	int count = getItemCount ();
+	if (index < 0 || index >= count) error (SWT.ERROR_INVALID_RANGE);
+	int items = OS.ItemsControl_Items (handle);
+	int item = OS.ItemCollection_GetItemAt (items, index);
+	int content = OS.ContentControl_Content (item);
+	String string = createJavaString (content);
+	OS.GCHandle_Free (item);
+	OS.GCHandle_Free (items);
+	OS.GCHandle_Free (content);
+	return string;
+}
+
+/**
+ * Returns the number of items contained in the receiver.
+ *
+ * @return the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemCount () {
+	checkWidget ();	
+	int items = OS.ItemsControl_Items (handle);
+	int count = OS.ItemCollection_Count (items);
+	OS.GCHandle_Free (items);
+	return count;
+}
+
+/**
+ * Returns the height of the area which would be used to
+ * display <em>one</em> of the items in the list.
+ *
+ * @return the height of one item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemHeight () {
+	checkWidget ();
+	//FIXME what is the default size?
+	if (!OS.ItemsControl_HasItems (handle)) return 16;
+	int items = OS.ItemsControl_Items (handle);
+	int item = OS.ItemCollection_GetItemAt (items, 0);
+	double height = OS.FrameworkElement_ActualHeight (item);
+	OS.GCHandle_Free (item);
+	OS.GCHandle_Free (items);
+	return height != 0 ? (int) height : 16;
+}
+
+/**
+ * Returns a (possibly empty) array of <code>String</code>s which
+ * are the items in the receiver. 
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the items in the receiver's list
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String [] getItems () {
+	checkWidget ();
+	int count = getItemCount ();
+	String [] result = new String [count];
+	for (int i=0; i<count; i++) result [i] = getItem (i);
+	return result;
+}
+
+/**
+ * Returns an array of <code>String</code>s that are currently
+ * selected in the receiver.  The order of the items is unspecified.
+ * An empty array indicates that no items are selected.
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its selection, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ * @return an array representing the selection
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String [] getSelection () {
+	checkWidget ();
+	int [] indices = getSelectionIndices ();
+	String [] result = new String [indices.length];
+	for (int i=0; i<indices.length; i++) {
+		result [i] = getItem (indices [i]);
+	}
+	return result;
+}
+
+/**
+ * Returns the number of selected items contained in the receiver.
+ *
+ * @return the number of selected items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelectionCount () {
+	checkWidget ();
+	int selectedItems = OS.ListBox_SelectedItems (handle);
+	int result = OS.ICollection_Count (selectedItems);
+	OS.GCHandle_Free (selectedItems);
+	return result;
+}
+
+/**
+ * Returns the zero-relative index of the item which is currently
+ * selected in the receiver, or -1 if no item is selected.
+ *
+ * @return the index of the selected item or -1
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelectionIndex () {
+	checkWidget ();
+	return OS.Selector_SelectedIndex (handle);
+}
+
+/**
+ * Returns the zero-relative indices of the items which are currently
+ * selected in the receiver.  The order of the indices is unspecified.
+ * The array is empty if no items are selected.
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its selection, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ * @return the array of indices of the selected items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int [] getSelectionIndices () {
+	checkWidget ();
+	int items = OS.ItemsControl_Items (handle);
+	int list = OS.ListBox_SelectedItems (handle);
+	int enumerator = OS.IList_GetEnumerator (list);
+	int count = OS.ICollection_Count (list);
+	int [] indices = new int [count];
+	int index = 0;
+    while (OS.IEnumerator_MoveNext (enumerator)) {
+    	int item = OS.IEnumerator_Current (enumerator);
+		indices [index++] = OS.ItemCollection_IndexOf (items, item);
+		OS.GCHandle_Free (item);
+	}
+    OS.GCHandle_Free (enumerator);
+	OS.GCHandle_Free (list);
+	OS.GCHandle_Free (items);
+	sortAscending (indices);
+	return indices;
+}
+
+/**
+ * Returns the zero-relative index of the item which is currently
+ * at the top of the receiver. This index can change when items are
+ * scrolled or new items are added or removed.
+ *
+ * @return the index of the top item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getTopIndex () {
+	checkWidget ();
+	int topIndex = 0;
+	if (OS.ItemsControl_HasItems (handle)) {
+		int items = OS.ItemsControl_Items (handle);
+		int item = OS.ItemCollection_GetItemAt (items, 0);
+		OS.GCHandle_Free (items);
+		int virtualizingStackPanel = OS.VisualTreeHelper_GetParent (item);
+		OS.GCHandle_Free (item);
+		if (virtualizingStackPanel != 0) {
+			topIndex = (int) OS.VirtualizingStackPanel_VerticalOffset (virtualizingStackPanel);
+			OS.GCHandle_Free (virtualizingStackPanel); 
+		}
+	}
+	return topIndex;
+}
+
+void HandleMouseDoubleClick (int sender, int e) {
+	if (!checkEvent (e)) return;
+	postEvent (SWT.DefaultSelection);
+}
+
+void HandleSelectionChanged (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if (!ignoreSelection) postEvent(SWT.Selection);
+}
+
+void HandlePreviewKeyDown (int sender, int e) {
+	super.HandlePreviewKeyDown (sender, e);
+	if (!checkEvent (e)) return;
+	int key = OS.KeyEventArgs_Key (e);
+	if (key == OS.Key_Return) {
+		postEvent (SWT.DefaultSelection);
+	}
+}
+
+void hookEvents () {
+	super.hookEvents ();
+	int handler = OS.gcnew_SelectionChangedEventHandler (jniRef, "HandleSelectionChanged");
+	OS.Selector_SelectionChanged (handle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_MouseButtonEventHandler (jniRef, "HandleMouseDoubleClick");
+	OS.Control_MouseDoubleClick (handle, handler);
+	OS.GCHandle_Free (handler);
+}
+
+/**
+ * Gets the index of an item.
+ * <p>
+ * The list is searched starting at 0 until an
+ * item is found that is equal to the search item.
+ * If no item is found, -1 is returned.  Indexing
+ * is zero based.
+ *
+ * @param string the search item
+ * @return the index of the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int indexOf (String string) {
+	return indexOf (string, 0);
+}
+
+/**
+ * Searches the receiver's list starting at the given, 
+ * zero-relative index until an item is found that is equal
+ * to the argument, and returns the index of that item. If
+ * no item is found or the starting index is out of range,
+ * returns -1.
+ *
+ * @param string the search item
+ * @param start the zero-relative index at which to start the search
+ * @return the index of the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int indexOf (String string, int start) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int count = getItemCount ();
+	if (start >= count) return -1;
+	start = Math.max (start, 0);
+	int strPtr = createDotNetString (string, false);
+	int items = OS.ItemsControl_Items (handle);
+	int index = -1;
+	while (start < count && index == -1) {
+		int item = OS.ItemCollection_GetItemAt (items, start);
+		int content = OS.ContentControl_Content (item);
+		OS.GCHandle_Free (item);
+		if (content != 0) {
+			if (OS.Object_Equals (content, strPtr)) index = start;
+			OS.GCHandle_Free (content);
+		}  
+		start++;
+	}
+	OS.GCHandle_Free (strPtr);
+	OS.GCHandle_Free (items);
+	return index;
+}
+
+/**
+ * Returns <code>true</code> if the item is selected,
+ * and <code>false</code> otherwise.  Indices out of
+ * range are ignored.
+ *
+ * @param index the index of the item
+ * @return the selection state of the item at the index
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean isSelected (int index) {
+	checkWidget ();
+	boolean selected = false;
+	if (index >= 0 && index < getItemCount ()) {
+		int items = OS.ItemsControl_Items (handle);
+		int item = OS.ItemCollection_GetItemAt (items, index);
+		selected = OS.ListBoxItem_IsSelected (item);
+		OS.GCHandle_Free (items);
+		OS.GCHandle_Free (item);
+	}
+	return selected;
+}
+
+/**
+ * Removes the items from the receiver at the given
+ * zero-relative indices.
+ *
+ * @param indices the array of indices of the items
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the indices array is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void remove (int [] indices) {
+	checkWidget ();
+	if (indices == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (indices.length == 0) return;
+	int [] newIndices = new int [indices.length];
+	System.arraycopy (indices, 0, newIndices, 0, indices.length);
+	sort (newIndices);
+	int start = newIndices [newIndices.length - 1], end = newIndices [0];
+	int count = getItemCount ();
+	if (!(0 <= start && start <= end && end < count)) {
+		error (SWT.ERROR_INVALID_RANGE);
+	}
+	int items = OS.ItemsControl_Items (handle);
+	for (int i = newIndices.length-1; i >= 0; i--) {
+		OS.ItemCollection_RemoveAt (items, indices [i]);
+	}
+	OS.GCHandle_Free (items);
+}
+
+/**
+ * Removes the item from the receiver at the given
+ * zero-relative index.
+ *
+ * @param index the index for the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void remove (int index) {
+	checkWidget ();
+	if (index < 0 || index >= getItemCount ()) error (SWT.ERROR_INVALID_RANGE);
+	int items = OS.ItemsControl_Items (handle);
+	OS.ItemCollection_RemoveAt (items, index);
+	OS.GCHandle_Free (items);
+}
+
+/**
+ * Removes the items from the receiver which are
+ * between the given zero-relative start and end 
+ * indices (inclusive).
+ *
+ * @param start the start of the range
+ * @param end the end of the range
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if either the start or end are not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void remove (int start, int end) {
+	checkWidget ();
+	if (start > end) return;
+	int count = getItemCount ();
+	if (!(0 <= start && start <= end && end < count)) error (SWT.ERROR_INVALID_RANGE);
+	if (start == 0 && end == count - 1) {
+		removeAll ();
+		return;
+	} 
+	int items = OS.ItemsControl_Items (handle);
+	for (int i = end; i >= start; i--) {
+		OS.ItemCollection_RemoveAt (items, i);
+	}
+	OS.GCHandle_Free (items);
+}
+
+/**
+ * Searches the receiver's list starting at the first item
+ * until an item is found that is equal to the argument, 
+ * and removes that item from the list.
+ *
+ * @param string the item to remove
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the string is not found in the list</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void remove (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int index = indexOf (string, 0);
+	if (index == -1) error (SWT.ERROR_INVALID_ARGUMENT);
+	remove (index);
+}
+
+/**
+ * Removes all of the items from the receiver.
+ * <p>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void removeAll () {
+	checkWidget ();
+	int items = OS.ItemsControl_Items (handle);
+	ignoreSelection = true;
+	OS.ItemCollection_Clear (items);
+	ignoreSelection = false;
+	OS.GCHandle_Free (items);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the user changes the receiver's selection.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+/**
+ * Selects the items at the given zero-relative indices in the receiver.
+ * The current selection is not cleared before the new items are selected.
+ * <p>
+ * If the item at a given index is not selected, it is selected.
+ * If the item at a given index was already selected, it remains selected.
+ * Indices that are out of range and duplicate indices are ignored.
+ * If the receiver is single-select and multiple indices are specified,
+ * then all indices are ignored.
+ *
+ * @param indices the array of indices for the items to select
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array of indices is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see List#setSelection(int[])
+ */
+public void select (int [] indices) {
+	checkWidget ();
+	if (indices == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int length = indices.length;
+	if (length == 0 || ((style & SWT.SINGLE) != 0 && length > 1)) return;
+	select (indices, false);
+}
+
+void select (int [] indices, boolean scroll) {
+	int i = 0;
+	while (i < indices.length) {
+		int index = indices [i];
+		if (index != -1) {
+			select (index, false);
+		}
+		i++;
+	}
+	if (scroll) showSelection ();
+}
+
+/**
+ * Selects the item at the given zero-relative index in the receiver's 
+ * list.  If the item at the index was already selected, it remains
+ * selected. Indices that are out of range are ignored.
+ *
+ * @param index the index of the item to select
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void select (int index) {
+	checkWidget ();
+	select (index, false);
+}
+
+void select (int index, boolean scroll) {
+	if (index < 0) return;
+	int count = getItemCount ();
+	if (index >= count) return;
+	int items = OS.ItemsControl_Items (handle);
+	int item = OS.ItemCollection_GetItemAt (items, index);
+	OS.GCHandle_Free (items);
+	ignoreSelection = true;
+	OS.ListBoxItem_IsSelected (item, true);
+	ignoreSelection = false;
+	if (scroll) OS.FrameworkElement_BringIntoView (item);
+	OS.GCHandle_Free (item);
+}
+
+/**
+ * Selects the items in the range specified by the given zero-relative
+ * indices in the receiver. The range of indices is inclusive.
+ * The current selection is not cleared before the new items are selected.
+ * <p>
+ * If an item in the given range is not selected, it is selected.
+ * If an item in the given range was already selected, it remains selected.
+ * Indices that are out of range are ignored and no items will be selected
+ * if start is greater than end.
+ * If the receiver is single-select and there is more than one item in the
+ * given range, then all indices are ignored.
+ *
+ * @param start the start of the range
+ * @param end the end of the range
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see List#setSelection(int,int)
+ */
+public void select (int start, int end) {
+	checkWidget ();
+	if (end < 0 || start > end || ((style & SWT.SINGLE) != 0 && start != end)) return;
+	int count = getItemCount ();
+	if (count == 0 || start >= count) return;
+	start = Math.max (0, start);
+	end = Math.min (end, count - 1);
+	ignoreSelection = true;
+	if ((style & SWT.SINGLE) != 0) {
+		select (start, false);
+	} else {
+		select (start, end, false);
+	}
+	ignoreSelection = false;
+}
+
+void select (int start, int end, boolean scroll) {
+	int items = OS.ItemsControl_Items (handle);
+	ignoreSelection = true;
+	for (int i = start; i<=end; i++) {
+		int item = OS.ItemCollection_GetItemAt (items, i);
+		OS.ListBoxItem_IsSelected (item, true);
+		OS.GCHandle_Free (item);
+	}
+	ignoreSelection = false;
+	OS.GCHandle_Free (items);
+	if (scroll) showSelection ();
+}
+	
+/**
+ * Selects all of the items in the receiver.
+ * <p>
+ * If the receiver is single-select, do nothing.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void selectAll () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) return;
+	ignoreSelection = true;
+	OS.ListBox_SelectAll (handle);
+	ignoreSelection = false;
+}
+
+/**
+ * Sets the text of the item in the receiver's list at the given
+ * zero-relative index to the string argument.
+ *
+ * @param index the index for the item
+ * @param string the new text for the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setItem (int index, String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int topIndex = getTopIndex ();
+	boolean isSelected = isSelected (index);
+	remove (index);
+	add (string, index);
+	if (isSelected) select (index, false);
+	setTopIndex (topIndex);
+}
+
+/**
+ * Sets the receiver's items to be the given array of items.
+ *
+ * @param items the array of items
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the items array is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if an item in the items array is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setItems (String [] items) {
+	checkWidget ();
+	if (items == null) error (SWT.ERROR_NULL_ARGUMENT);
+	for (int i=0; i<items.length; i++) {
+		if (items [i] == null) error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	int itemCollection = OS.ItemsControl_Items (handle);
+	ignoreSelection = true;
+	OS.ItemCollection_Clear (itemCollection);
+	for (int i = 0; i < items.length; i++) {
+		String string = items [i];
+		int item = OS.gcnew_ListBoxItem ();
+		int strPtr = createDotNetString (string, false);
+		OS.ContentControl_Content (item, strPtr);
+		OS.GCHandle_Free (strPtr);
+		OS.ItemCollection_Add (itemCollection, item);
+		OS.GCHandle_Free (item);
+	}
+	ignoreSelection = false;
+	OS.GCHandle_Free (itemCollection);
+}
+
+/**
+ * Selects the items at the given zero-relative indices in the receiver.
+ * The current selection is cleared before the new items are selected.
+ * <p>
+ * Indices that are out of range and duplicate indices are ignored.
+ * If the receiver is single-select and multiple indices are specified,
+ * then all indices are ignored.
+ *
+ * @param indices the indices of the items to select
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array of indices is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see List#deselectAll()
+ * @see List#select(int[])
+ */
+public void setSelection (int [] indices) {
+	checkWidget ();
+	if (indices == null) error (SWT.ERROR_NULL_ARGUMENT);
+	deselectAll ();
+	int length = indices.length;
+	if (length == 0 || ((style & SWT.SINGLE) != 0 && length > 1)) return;
+	select (indices, true);
+}
+
+/**
+ * Sets the receiver's selection to be the given array of items.
+ * The current selection is cleared before the new items are selected.
+ * <p>
+ * Items that are not in the receiver are ignored.
+ * If the receiver is single-select and multiple items are specified,
+ * then all items are ignored.
+ *
+ * @param items the array of items
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array of items is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see List#deselectAll()
+ * @see List#select(int[])
+ * @see List#setSelection(int[])
+ */
+public void setSelection (String [] items) {
+	checkWidget ();
+	if (items == null) error (SWT.ERROR_NULL_ARGUMENT);
+	deselectAll ();
+	int length = items.length;
+	if (length == 0 || ((style & SWT.SINGLE) != 0 && length > 1)) return;
+	for (int i=length-1; i>=0; --i) {
+		String string = items [i];
+		int index = 0;
+		if (string != null) {
+			while ((index = indexOf (string, index)) != -1) {
+				select (index, false);
+				if ((style & SWT.SINGLE) != 0 && isSelected (index)) {
+					showSelection ();
+					return;
+				}
+				index++;
+			}
+		}
+	}
+}
+
+/**
+ * Selects the item at the given zero-relative index in the receiver. 
+ * If the item at the index was already selected, it remains selected.
+ * The current selection is first cleared, then the new item is selected.
+ * Indices that are out of range are ignored.
+ *
+ * @param index the index of the item to select
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * @see List#deselectAll()
+ * @see List#select(int)
+ */
+public void setSelection (int index) {
+	checkWidget ();
+	deselectAll ();
+	select (index, true);
+}
+
+/**
+ * Selects the items in the range specified by the given zero-relative
+ * indices in the receiver. The range of indices is inclusive.
+ * The current selection is cleared before the new items are selected.
+ * <p>
+ * Indices that are out of range are ignored and no items will be selected
+ * if start is greater than end.
+ * If the receiver is single-select and there is more than one item in the
+ * given range, then all indices are ignored.
+ *
+ * @param start the start index of the items to select
+ * @param end the end index of the items to select
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see List#deselectAll()
+ * @see List#select(int,int)
+ */
+public void setSelection (int start, int end) {
+	checkWidget ();
+	deselectAll ();
+	if (end < 0 || start > end || ((style & SWT.SINGLE) != 0 && start != end)) return;
+	int count = getItemCount ();
+	if (count == 0 || start >= count) return;
+	start = Math.max (0, start);
+	end = Math.min (end, count - 1);
+	if ((style & SWT.SINGLE) != 0) {
+		select (start, true);
+	} else {
+		select (start, end, true);
+	}
+}
+
+/**
+ * Sets the zero-relative index of the item which is currently
+ * at the top of the receiver. This index can change when items
+ * are scrolled or new items are added and removed.
+ *
+ * @param index the index of the top item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setTopIndex (int index) {
+	checkWidget ();
+	//FIXME: VirtualizingStackPanel.VerticalIndex cannot be set.
+}
+
+/**
+ * Shows the selection.  If the selection is already showing in the receiver,
+ * this method simply returns.  Otherwise, the items are scrolled until
+ * the selection is visible.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void showSelection () {
+	//TODO: does this scroll the first selected item into view if 
+	// part of the selection is visible already???
+	checkWidget ();
+	int items = OS.ItemsControl_Items (handle);
+	int selectedItems = OS.ListBox_SelectedItems (handle);
+	int enumerator = OS.IList_GetEnumerator (selectedItems);
+	if (OS.IEnumerator_MoveNext (enumerator)) {
+		int item = OS.IEnumerator_Current (enumerator);
+	    OS.ListBox_ScrollIntoView (handle, item);
+		OS.GCHandle_Free (item);
+	}
+    OS.GCHandle_Free (enumerator);
+	OS.GCHandle_Free (selectedItems);
+	OS.GCHandle_Free (items);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Menu.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Menu.java
new file mode 100644
index 0000000..b6462e7
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Menu.java
@@ -0,0 +1,916 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+ 
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * Instances of this class are user interface objects that contain
+ * menu items.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>BAR, DROP_DOWN, POP_UP, NO_RADIO_GROUP</dd>
+ * <dd>LEFT_TO_RIGHT, RIGHT_TO_LEFT</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Help, Hide, Show </dd>
+ * </dl>
+ * <p>
+ * Note: Only one of BAR, DROP_DOWN and POP_UP may be specified.
+ * Only one of LEFT_TO_RIGHT or RIGHT_TO_LEFT may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#menu">Menu snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class Menu extends Widget {
+	int itemCount;
+	MenuItem cascade, selected;
+	Decorations parent;
+
+/**
+ * Constructs a new instance of this class given its parent,
+ * and sets the style for the instance so that the instance
+ * will be a popup menu on the given parent's shell.
+ * <p>
+ * After constructing a menu, it can be set into its parent
+ * using <code>parent.setMenu(menu)</code>.  In this case, the parent may
+ * be any control in the same widget tree as the parent.
+ * </p>
+ *
+ * @param parent a control which will be the parent of the new instance (cannot be null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#POP_UP
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Menu (Control parent) {
+	this (checkNull (parent).menuShell (), SWT.POP_UP);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Decorations</code>) and a style value
+ * describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p><p>
+ * After constructing a menu or menuBar, it can be set into its parent
+ * using <code>parent.setMenu(menu)</code> or <code>parent.setMenuBar(menuBar)</code>.
+ * </p>
+ *
+ * @param parent a decorations control which will be the parent of the new instance (cannot be null)
+ * @param style the style of menu to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#BAR
+ * @see SWT#DROP_DOWN
+ * @see SWT#POP_UP
+ * @see SWT#NO_RADIO_GROUP
+ * @see SWT#LEFT_TO_RIGHT
+ * @see SWT#RIGHT_TO_LEFT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Menu (Decorations parent, int style) {
+	this (parent, checkStyle (style), 0);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Menu</code>) and sets the style
+ * for the instance so that the instance will be a drop-down
+ * menu on the given parent's parent.
+ * <p>
+ * After constructing a drop-down menu, it can be set into its parentMenu
+ * using <code>parentMenu.setMenu(menu)</code>.
+ * </p>
+ *
+ * @param parentMenu a menu which will be the parent of the new instance (cannot be null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#DROP_DOWN
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Menu (Menu parentMenu) {
+	this (checkNull (parentMenu).parent, SWT.DROP_DOWN);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>MenuItem</code>) and sets the style
+ * for the instance so that the instance will be a drop-down
+ * menu on the given parent's parent menu.
+ * <p>
+ * After constructing a drop-down menu, it can be set into its parentItem
+ * using <code>parentItem.setMenu(menu)</code>.
+ * </p>
+ *
+ * @param parentItem a menu item which will be the parent of the new instance (cannot be null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#DROP_DOWN
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Menu (MenuItem parentItem) {
+	this (checkNull (parentItem).parent);
+}
+
+Menu (Decorations parent, int style, int handle) {
+	super (parent, checkStyle (style));
+	this.parent = parent;
+	this.handle = handle;
+	createWidget ();
+}
+
+void _setVisible (boolean visible) {
+	if ((style & (SWT.BAR | SWT.DROP_DOWN)) != 0) return;
+	OS.ContextMenu_IsOpen (handle, visible);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when help events are generated for the control,
+ * by sending it one of the messages defined in the
+ * <code>HelpListener</code> interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see HelpListener
+ * @see #removeHelpListener
+ */
+public void addHelpListener (HelpListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Help, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when menus are hidden or shown, by sending it
+ * one of the messages defined in the <code>MenuListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MenuListener
+ * @see #removeMenuListener
+ */
+public void addMenuListener (MenuListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Hide,typedListener);
+	addListener (SWT.Show,typedListener);
+}
+
+static Control checkNull (Control control) {
+	if (control == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	return control;
+}
+
+static Menu checkNull (Menu menu) {
+	if (menu == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	return menu;
+}
+
+static MenuItem checkNull (MenuItem item) {
+	if (item == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	return item;
+}
+
+static int checkStyle (int style) {
+	return checkBits (style, SWT.POP_UP, SWT.BAR, SWT.DROP_DOWN, 0, 0, 0);
+}
+
+void createHandle () {
+	int bits =  SWT.BAR | SWT.DROP_DOWN | SWT.POP_UP;
+	switch (style & bits) {
+		case SWT.BAR:
+			handle = OS.gcnew_Menu ();
+			if (handle == 0) SWT.error (SWT.ERROR_NO_HANDLES);
+			break;
+		case SWT.POP_UP:	
+			handle = OS.gcnew_ContextMenu ();
+			if (handle == 0) SWT.error (SWT.ERROR_NO_HANDLES);
+			OS.ContextMenu_Placement (handle, OS.PlacementMode_MousePoint);
+			break;
+		case SWT.DROP_DOWN:	
+			handle = OS.gcnew_CompositeCollection ();
+			if (handle == 0) SWT.error (SWT.ERROR_NO_HANDLES);
+			int defaultItem = OS.gcnew_MenuItem ();
+			OS.CompositeCollection_Insert (handle, 0, defaultItem);
+			OS.GCHandle_Free (defaultItem);
+			break;
+	}
+}
+
+void createItem (MenuItem item, int index) {
+	if (!(0 <= index && index <= itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	item.createWidget ();
+	if ((style & SWT.DROP_DOWN) != 0) {
+		if (itemCount == 0) OS.CompositeCollection_RemoveAt (handle, 0);
+		OS.CompositeCollection_Insert (handle, index, item.handle);
+	} else {
+		int items = OS.ItemsControl_Items (handle);
+		OS.ItemCollection_Insert (items, index, item.handle);
+		OS.GCHandle_Free (items);
+	}
+	itemCount++;
+}
+	
+void createWidget () {
+	checkOrientation (parent);
+	super.createWidget ();
+	parent.addMenu (this);
+}
+
+void deregister () {
+	if ((style & SWT.DROP_DOWN) != 0) return;
+	display.removeWidget (handle);
+}
+
+void destroyItem (MenuItem item) {
+	if ((style & SWT.DROP_DOWN) != 0) {
+		OS.CompositeCollection_Remove (handle, item.handle);
+		if (itemCount == 1) {
+			int defaultItem = OS.gcnew_MenuItem ();
+			OS.CompositeCollection_Insert (handle, 0, defaultItem);
+			OS.GCHandle_Free (defaultItem);
+		}
+	} else {
+		int items = OS.ItemsControl_Items (handle);
+		OS.ItemCollection_Remove (items, item.handle);
+		OS.GCHandle_Free (items);
+	}
+	itemCount--;
+}
+
+void fixMenus (Decorations newParent) {
+	MenuItem [] items = getItems ();
+	for (int i=0; i<items.length; i++) {
+		items [i].fixMenus (newParent);
+	}
+	parent.removeMenu (this);
+	newParent.addMenu (this);
+	this.parent = newParent;
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location
+ * relative to its parent (or its display if its parent is null),
+ * unless the receiver is a menu or a shell. In this case, the
+ * location is relative to the display.
+ * <p>
+ * Note that the bounds of a menu or menu item are undefined when
+ * the menu is not visible.  This is because most platforms compute
+ * the bounds of a menu dynamically just before it is displayed.
+ * </p>
+ *
+ * @return the receiver's bounding rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+/*public*/ Rectangle getBounds () {
+	checkWidget ();
+	if ((style & SWT.DROP_DOWN) != 0) return new Rectangle (0, 0, 0, 0);
+	if (!OS.UIElement_IsVisible (handle)) return new Rectangle (0, 0, 0, 0);
+	int point = OS.gcnew_Point (0, 0);
+	int location = OS.UIElement_TranslatePoint (handle, point, parent.handle);
+	int x = (int) OS.Point_X (location);
+	int y = (int) OS.Point_Y (location);
+	OS.GCHandle_Free (point);
+	OS.GCHandle_Free (location);
+	int width = (int) OS.FrameworkElement_ActualWidth (handle);
+	int height = (int) OS.FrameworkElement_ActualHeight (handle);
+	return new Rectangle (x, y, width, height);
+}
+
+/**
+ * Returns the default menu item or null if none has
+ * been previously set.
+ *
+ * @return the default menu item.
+ *
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public MenuItem getDefaultItem () {
+	checkWidget ();
+	return null;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is enabled, and
+ * <code>false</code> otherwise. A disabled menu is typically
+ * not selectable from the user interface and draws with an
+ * inactive or "grayed" look.
+ *
+ * @return the receiver's enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #isEnabled
+ */
+public boolean getEnabled () {
+	checkWidget ();
+	return (state & DISABLED) == 0;
+}
+
+/**
+ * Returns the item at the given, zero-relative index in the
+ * receiver. Throws an exception if the index is out of range.
+ *
+ * @param index the index of the item to return
+ * @return the item at the given index
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public MenuItem getItem (int index) {
+	checkWidget ();
+	if (index < 0 || index >= itemCount) error(SWT.ERROR_INVALID_RANGE);
+	if ((style & SWT.DROP_DOWN) != 0) return getItem (handle, index);
+	int items = OS.ItemsControl_Items (handle);
+	MenuItem result = getItem (items, index);
+	OS.GCHandle_Free (items);
+	return result;
+}
+
+MenuItem getItem (int items, int index) {
+	int item;
+	if ((style & SWT.DROP_DOWN) != 0) {
+		item = OS.IList_default (handle, index);
+	} else {
+		item = OS.ItemCollection_GetItemAt (items, index);
+	}
+	MenuItem result = (MenuItem) display.getWidget (item);
+	OS.GCHandle_Free (item);
+	return result;
+}
+
+/**
+ * Returns the number of items contained in the receiver.
+ *
+ * @return the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemCount () {
+	checkWidget ();
+	return itemCount;
+}
+
+/**
+ * Returns a (possibly empty) array of <code>MenuItem</code>s which
+ * are the items in the receiver. 
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the items in the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public MenuItem [] getItems () {
+	checkWidget ();
+	MenuItem [] result = new MenuItem [itemCount];
+	int items = (style & SWT.DROP_DOWN) == 0 ? OS.ItemsControl_Items (handle) : handle;
+	for (int i = 0; i < itemCount; i++) {
+		result [i] = getItem (items, i);
+	}
+	if (items != handle) OS.GCHandle_Free (items);
+	return result;
+}
+
+String getNameText () {
+	String result = "";
+	MenuItem [] items = getItems ();
+	int length = items.length;
+	if (length > 0) {
+		for (int i=0; i<length-1; i++) {
+			result = result + items [i].getNameText() + ", ";
+		}
+		result = result + items [length-1].getNameText ();
+	}
+	return result;
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>Decorations</code>.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Decorations getParent () {
+	checkWidget ();
+	return parent;
+}
+
+/**
+ * Returns the receiver's parent item, which must be a
+ * <code>MenuItem</code> or null when the receiver is a
+ * root.
+ *
+ * @return the receiver's parent item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public MenuItem getParentItem () {
+	checkWidget ();
+	return cascade;
+}
+
+/**
+ * Returns the receiver's parent item, which must be a
+ * <code>Menu</code> or null when the receiver is a
+ * root.
+ *
+ * @return the receiver's parent item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Menu getParentMenu () {
+	checkWidget ();
+	if (cascade != null) return cascade.parent;
+	return null;
+}
+
+/**
+ * Returns the receiver's shell. For all controls other than
+ * shells, this simply returns the control's nearest ancestor
+ * shell. Shells return themselves, even if they are children
+ * of other shells.
+ *
+ * @return the receiver's shell
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getParent
+ */
+public Shell getShell () {
+	checkWidget ();
+	return parent.getShell ();
+}
+
+/**
+ * Returns <code>true</code> if the receiver is visible, and
+ * <code>false</code> otherwise.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, this method
+ * may still indicate that it is considered visible even though
+ * it may not actually be showing.
+ * </p>
+ *
+ * @return the receiver's visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getVisible () {
+	checkWidget ();
+	if ((style & SWT.BAR) != 0) {
+		return this == parent.menuShell ().menuBar;
+	}
+	if ((style & SWT.POP_UP) != 0) {
+		Menu [] popups = display.popups;
+		if (popups == null) return false;
+		for (int i=0; i<popups.length; i++) {
+			if (popups [i] == this) return true;
+		}
+	}
+//	Shell shell = getShell ();
+//	Menu menu = shell.activeMenu;
+//	while (menu != null && menu != this) {
+//		menu = menu.getParentMenu ();
+//	}
+//	return this == menu;
+	return OS.UIElement_Visibility (handle) == OS.Visibility_Visible;
+}
+
+void HandleClosed (int sender, int e) {
+	if (!checkEvent (e)) return;
+	sendEvent (SWT.Hide);
+}
+
+void HandleOpened (int sender, int e) {
+	if (!checkEvent (e)) return;
+	sendEvent (SWT.Show);
+}
+
+void hookEvents() {
+	super.hookEvents ();
+	if ((style & SWT.POP_UP) != 0) {
+		int handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleClosed");
+		OS.ContextMenu_Closed (handle, handler);
+		OS.GCHandle_Free (handler);
+		handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleOpened");
+		OS.ContextMenu_Opened (handle, handler);
+		OS.GCHandle_Free (handler);
+	}
+}
+
+/**
+ * Searches the receiver's list starting at the first item
+ * (index 0) until an item is found that is equal to the 
+ * argument, and returns the index of that item. If no item
+ * is found, returns -1.
+ *
+ * @param item the search item
+ * @return the index of the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int indexOf (MenuItem item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (item.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT);
+	int index = -1;
+	if ((style & SWT.DROP_DOWN) != 0) {
+		index = OS.CompositeCollection_IndexOf (handle, item.handle);
+	} else {
+		int items = OS.ItemsControl_Items (handle);
+		index = OS.ItemCollection_IndexOf (items, item.handle);
+		OS.GCHandle_Free (items);
+	}
+	return index;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is enabled and all
+ * of the receiver's ancestors are enabled, and <code>false</code>
+ * otherwise. A disabled menu is typically not selectable from the
+ * user interface and draws with an inactive or "grayed" look.
+ *
+ * @return the receiver's enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #getEnabled
+ */
+public boolean isEnabled () {
+	checkWidget ();
+	Menu parentMenu = getParentMenu ();
+	if (parentMenu == null) return getEnabled ();
+	return getEnabled () && parentMenu.isEnabled ();
+}
+
+/**
+ * Returns <code>true</code> if the receiver is visible and all
+ * of the receiver's ancestors are visible and <code>false</code>
+ * otherwise.
+ *
+ * @return the receiver's visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getVisible
+ */
+public boolean isVisible () {
+	checkWidget ();
+	return getVisible ();
+}
+
+void register() {
+	if ((style & SWT.DROP_DOWN) != 0) return;
+	display.addWidget (handle, this);
+}
+
+void releaseChildren (boolean destroy) {
+	MenuItem [] items = getItems ();
+	for (int i=0; i<items.length; i++) {
+		MenuItem item = items [i];
+		if (item != null && !item.isDisposed ()) {
+			item.release (false);
+		}
+	}
+	super.releaseChildren (destroy);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (handle != 0) OS.GCHandle_Free (handle);
+	handle = 0;
+	parent = null;
+}
+
+void releaseParent () {
+	super.releaseParent ();
+	if (cascade != null) cascade.releaseMenu ();
+	if ((style & SWT.BAR) != 0) {
+		if (this == parent.menuBar) {
+			parent.setMenuBar (null);
+		}
+	} else {
+		if ((style & SWT.POP_UP) != 0) {
+			display.removePopup (this);
+		}
+	}
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	if (parent != null) parent.removeMenu (this);
+	parent = null;
+	cascade = null;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the help events are generated for the control.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see HelpListener
+ * @see #addHelpListener
+ */
+public void removeHelpListener (HelpListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Help, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the menu events are generated for the control.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MenuListener
+ * @see #addMenuListener
+ */
+public void removeMenuListener (MenuListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Hide, listener);
+	eventTable.unhook (SWT.Show, listener);
+}
+
+/**
+ * Sets the default menu item to the argument or removes
+ * the default emphasis when the argument is <code>null</code>.
+ * 
+ * @param item the default menu item or null
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the menu item has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setDefaultItem (MenuItem item) {
+	checkWidget ();	
+}
+
+/**
+ * Enables the receiver if the argument is <code>true</code>,
+ * and disables it otherwise. A disabled menu is typically
+ * not selectable from the user interface and draws with an
+ * inactive or "grayed" look.
+ *
+ * @param enabled the new enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setEnabled (boolean enabled) {
+	checkWidget ();
+	state &= ~DISABLED;
+	if (!enabled) state |= DISABLED;
+}
+
+/**
+ * Sets the location of the receiver, which must be a popup,
+ * to the point specified by the arguments which are relative
+ * to the display.
+ * <p>
+ * Note that this is different from most widgets where the
+ * location of the widget is relative to the parent.
+ * </p><p>
+ * Note that the platform window manager ultimately has control
+ * over the location of popup menus.
+ * </p>
+ *
+ * @param x the new x coordinate for the receiver
+ * @param y the new y coordinate for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setLocation (int x, int y) {
+	checkWidget ();
+	if ((style & (SWT.BAR | SWT.DROP_DOWN)) != 0) return;
+	OS.ContextMenu_Placement (handle, OS.PlacementMode_AbsolutePoint);
+	OS.ContextMenu_HorizontalOffset (handle, x);
+	OS.ContextMenu_VerticalOffset (handle, y);
+}
+
+/**
+ * Sets the location of the receiver, which must be a popup,
+ * to the point specified by the argument which is relative
+ * to the display.
+ * <p>
+ * Note that this is different from most widgets where the
+ * location of the widget is relative to the parent.
+ * </p><p>
+ * Note that the platform window manager ultimately has control
+ * over the location of popup menus.
+ * </p>
+ *
+ * @param location the new location for the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.1
+ */
+public void setLocation (Point location) {
+	checkWidget ();
+	if (location == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	setLocation (location.x, location.y);
+}
+
+void setNameScope() {
+	// DO NOTHING
+}
+
+/**
+ * Marks the receiver as visible if the argument is <code>true</code>,
+ * and marks it invisible otherwise. 
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, marking
+ * it visible may not actually cause it to be displayed.
+ * </p>
+ *
+ * @param visible the new visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setVisible (boolean visible) {
+	checkWidget ();
+	if ((style & (SWT.BAR | SWT.DROP_DOWN)) != 0) return;
+	if (visible) {
+		display.addPopup (this);
+	} else {
+		display.removePopup (this);
+		_setVisible (false);
+	}
+}
+
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/MenuItem.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/MenuItem.java
new file mode 100644
index 0000000..cc5a802
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/MenuItem.java
@@ -0,0 +1,739 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+ 
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * Instances of this class represent a selectable user interface object
+ * that issues notification when pressed and released. 
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>CHECK, CASCADE, PUSH, RADIO, SEPARATOR</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Arm, Help, Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles CHECK, CASCADE, PUSH, RADIO and SEPARATOR
+ * may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class MenuItem extends Item {
+	Menu parent, menu;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Menu</code>) and a style value
+ * describing its behavior and appearance. The item is added
+ * to the end of the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a menu control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#CHECK
+ * @see SWT#CASCADE
+ * @see SWT#PUSH
+ * @see SWT#RADIO
+ * @see SWT#SEPARATOR
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public MenuItem (Menu parent, int style) {
+	super (parent, checkStyle (style));
+	this.parent = parent;
+	parent.createItem (this, parent.getItemCount ());
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Menu</code>), a style value
+ * describing its behavior and appearance, and the index
+ * at which to place it in the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a menu control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ * @param index the zero-relative index to store the receiver in its parent
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the parent (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#CHECK
+ * @see SWT#CASCADE
+ * @see SWT#PUSH
+ * @see SWT#RADIO
+ * @see SWT#SEPARATOR
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public MenuItem (Menu parent, int style, int index) {
+	super (parent, checkStyle (style));
+	this.parent = parent;
+	parent.createItem (this, index);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the arm events are generated for the control, by sending
+ * it one of the messages defined in the <code>ArmListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ArmListener
+ * @see #removeArmListener
+ */
+public void addArmListener (ArmListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Arm, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the help events are generated for the control, by sending
+ * it one of the messages defined in the <code>HelpListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see HelpListener
+ * @see #removeHelpListener
+ */
+public void addHelpListener (HelpListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Help, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the menu item is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * When <code>widgetSelected</code> is called, the stateMask field of the event object is valid.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the menu item is selected by the user
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener(listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+static int checkStyle (int style) {
+	return checkBits (style, SWT.PUSH, SWT.CHECK, SWT.RADIO, SWT.SEPARATOR, SWT.CASCADE, 0);
+}
+
+void createHandle () {
+	if ((style & SWT.SEPARATOR) != 0) {
+		handle = OS.gcnew_Separator ();
+		if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	} else {
+		handle = OS.gcnew_MenuItem ();
+		if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+		if ((style & (SWT.CHECK | SWT.RADIO)) != 0) OS.MenuItem_IsCheckable (handle, true);
+	}
+}
+
+void deregister () {
+	display.removeWidget (handle);
+}
+
+void destroyWidget () {
+	parent.destroyItem (this);
+	releaseHandle ();
+}
+
+void fixMenus (Decorations newParent) {
+	if (menu != null) menu.fixMenus (newParent);
+}
+
+/**
+ * Returns the widget accelerator.  An accelerator is the bit-wise
+ * OR of zero or more modifier masks and a key. Examples:
+ * <code>SWT.CONTROL | SWT.SHIFT | 'T', SWT.ALT | SWT.F2</code>.
+ * The default value is zero, indicating that the menu item does
+ * not have an accelerator.
+ *
+ * @return the accelerator or 0
+ *
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getAccelerator () {
+	checkWidget ();
+	//FIXME
+	return 0;
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location
+ * relative to its parent (or its display if its parent is null).
+ *
+ * @return the receiver's bounding rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+/*public*/ Rectangle getBounds () {
+	checkWidget ();
+	if (!OS.UIElement_IsVisible(handle)) return new Rectangle (0, 0, 0, 0);
+	int point = OS.gcnew_Point (0, 0);
+	if (point == 0) error(SWT.ERROR_NO_HANDLES);
+	int location = OS.UIElement_TranslatePoint (handle, point, parent.handle);
+	int x = (int) OS.Point_X (location);
+	int y = (int) OS.Point_Y (location);
+	OS.GCHandle_Free (point);
+	OS.GCHandle_Free (location);
+	int width = (int) OS.FrameworkElement_ActualWidth (handle);
+	int height = (int) OS.FrameworkElement_ActualHeight (handle);
+	return new Rectangle (x, y, width, height);
+}
+
+/**
+ * Returns <code>true</code> if the receiver is enabled, and
+ * <code>false</code> otherwise. A disabled menu item is typically
+ * not selectable from the user interface and draws with an
+ * inactive or "grayed" look.
+ *
+ * @return the receiver's enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #isEnabled
+ */
+public boolean getEnabled () {
+	checkWidget ();
+	return OS.UIElement_IsEnabled (handle);
+
+}
+
+/**
+ * Returns the receiver's cascade menu if it has one or null
+ * if it does not. Only <code>CASCADE</code> menu items can have
+ * a pull down menu. The sequence of key strokes, button presses 
+ * and/or button releases that are used to request a pull down
+ * menu is platform specific.
+ *
+ * @return the receiver's menu
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Menu getMenu () {
+	checkWidget ();
+	return menu;
+}
+
+String getNameText () {
+	if ((style & SWT.SEPARATOR) != 0) return "|";
+	return super.getNameText ();
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>Menu</code>.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Menu getParent () {
+	checkWidget ();
+	return parent;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is selected,
+ * and false otherwise.
+ * <p>
+ * When the receiver is of type <code>CHECK</code> or <code>RADIO</code>,
+ * it is selected when it is checked.
+ *
+ * @return the selection state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getSelection () {
+	checkWidget ();
+	if ((style & (SWT.CHECK | SWT.RADIO)) == 0) return false;
+	return OS.MenuItem_IsChecked (handle);
+}
+
+void HandleClick (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if ((style & SWT.RADIO) != 0 && (parent.style & SWT.NO_RADIO_GROUP) == 0) {
+		if (parent.selected == this) {
+			OS.MenuItem_IsChecked (handle, true);
+			return;
+		}
+		if (parent.selected != null) OS.MenuItem_IsChecked (parent.selected.handle, false);
+		parent.selected = this;
+	}
+	Event event = new Event ();
+	setInputState (event, SWT.Selection, 0, 0);
+	postEvent (SWT.Selection, event);	
+}
+
+void HandleSubmenuOpened (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if (menu != null) {
+		menu.sendEvent (SWT.Show);
+	}
+}
+
+void HandleSubmenuClosed (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if (menu != null) {
+		menu.sendEvent (SWT.Hide);
+	}	
+}
+
+void hookEvents() {
+	if ((style & SWT.SEPARATOR) != 0) return;
+	super.hookEvents();
+	if ((style & SWT.CASCADE) == 0) {
+		int handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleClick");
+		if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+		OS.MenuItem_Click (handle, handler);
+		OS.GCHandle_Free (handler);
+	} else {
+		int handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleSubmenuOpened");
+		if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+		OS.MenuItem_SubmenuOpened (handle, handler);
+		OS.GCHandle_Free (handler);
+		handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleSubmenuClosed");
+		if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+		OS.MenuItem_SubmenuClosed (handle, handler);
+		OS.GCHandle_Free (handler);
+	}
+}
+
+/**
+ * Returns <code>true</code> if the receiver is enabled and all
+ * of the receiver's ancestors are enabled, and <code>false</code>
+ * otherwise. A disabled menu item is typically not selectable from the
+ * user interface and draws with an inactive or "grayed" look.
+ *
+ * @return the receiver's enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #getEnabled
+ */
+public boolean isEnabled () {
+	return getEnabled () && parent.isEnabled ();
+}
+
+void register() {
+	display.addWidget (handle, this);
+}
+
+void releaseChildren (boolean destroy) {
+	if (menu != null) {
+		menu.release (false);
+		menu = null;
+	}
+	super.releaseChildren (destroy);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (handle != 0) OS.GCHandle_Free (handle);
+	handle = 0;
+	parent = null;
+}
+
+void releaseMenu () {
+	setMenu (null);
+}
+
+void releaseParent () {
+	super.releaseParent ();
+	if (menu != null) menu.dispose ();
+	menu = null;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the arm events are generated for the control.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ArmListener
+ * @see #addArmListener
+ */
+public void removeArmListener (ArmListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Arm, listener);
+}
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the help events are generated for the control.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see HelpListener
+ * @see #addHelpListener
+ */
+public void removeHelpListener (HelpListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Help, listener);
+}
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+/**
+ * Sets the widget accelerator.  An accelerator is the bit-wise
+ * OR of zero or more modifier masks and a key. Examples:
+ * <code>SWT.MOD1 | SWT.MOD2 | 'T', SWT.MOD3 | SWT.F2</code>.
+ * <code>SWT.CONTROL | SWT.SHIFT | 'T', SWT.ALT | SWT.F2</code>.
+ * The default value is zero, indicating that the menu item does
+ * not have an accelerator.
+ *
+ * @param accelerator an integer that is the bit-wise OR of masks and a key
+ *
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setAccelerator (int accelerator) {
+	checkWidget ();
+	//FIXME
+}
+
+/**
+ * Enables the receiver if the argument is <code>true</code>,
+ * and disables it otherwise. A disabled menu item is typically
+ * not selectable from the user interface and draws with an
+ * inactive or "grayed" look.
+ *
+ * @param enabled the new enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setEnabled (boolean enabled) {
+	checkWidget ();
+	OS.UIElement_IsEnabled (handle, enabled);
+}
+
+/**
+ * Sets the image the receiver will display to the argument.
+ * <p>
+ * Note: This operation is a hint and is not supported on
+ * platforms that do not have this concept (for example, Windows NT).
+ * Furthermore, some platforms (such as GTK), cannot display both
+ * a check box and an image at the same time.  Instead, they hide
+ * the image and display the check box.
+ * </p>
+ *
+ * @param image the image to display
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setImage (Image image) {
+	checkWidget ();
+	if ((style & SWT.SEPARATOR) != 0) return;
+	if (image != null && image.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT);
+	this.image = image;
+	if (image != null) {
+		int img = OS.gcnew_Image ();
+		if (img == 0) error(SWT.ERROR_NO_HANDLES);
+		OS.Image_Source (img, image.handle);
+		OS.Image_Stretch (img, OS.Stretch_None);
+		OS.MenuItem_Icon (handle, img);
+		OS.GCHandle_Free (img);
+	} else {
+		OS.MenuItem_Icon (handle, 0);
+	}
+}
+
+/**
+ * Sets the receiver's pull down menu to the argument.
+ * Only <code>CASCADE</code> menu items can have a
+ * pull down menu. The sequence of key strokes, button presses
+ * and/or button releases that are used to request a pull down
+ * menu is platform specific.
+ * <p>
+ * Note: Disposing of a menu item that has a pull down menu
+ * will dispose of the menu.  To avoid this behavior, set the
+ * menu to null before the menu item is disposed.
+ * </p>
+ *
+ * @param menu the new pull down menu
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_MENU_NOT_DROP_DOWN - if the menu is not a drop down menu</li>
+ *    <li>ERROR_MENUITEM_NOT_CASCADE - if the menu item is not a <code>CASCADE</code></li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the menu has been disposed</li>
+ *    <li>ERROR_INVALID_PARENT - if the menu is not in the same widget tree</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMenu (Menu menu) {
+	checkWidget ();
+	if ((style & SWT.CASCADE) == 0) error (SWT.ERROR_MENUITEM_NOT_CASCADE);
+	if (menu != null) {
+		if (menu.cascade != null) { 
+//			FIXME: Change this error type, or fix the javadoc.
+			error (SWT.ERROR_INVALID_PARENT);
+		}
+		if (menu.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT);
+		if ((menu.style & SWT.DROP_DOWN) == 0) {
+			error (SWT.ERROR_MENU_NOT_DROP_DOWN);
+		}
+		if (menu.parent != parent.parent) {
+			error (SWT.ERROR_INVALID_PARENT);
+		}
+		Menu oldMenu = this.menu;
+		if (oldMenu == menu) return;
+		if (oldMenu != null) oldMenu.cascade = null;
+		this.menu = menu;
+		OS.ItemsControl_ItemsSource (handle, menu.handle);
+		menu.cascade = this;
+	} else {
+		OS.ItemsControl_ItemsSource (handle, 0);
+		if (this.menu != null) this.menu.cascade = null;
+	}
+}
+
+/**
+ * Sets the selection state of the receiver.
+ * <p>
+ * When the receiver is of type <code>CHECK</code> or <code>RADIO</code>,
+ * it is selected when it is checked.
+ *
+ * @param selected the new selection state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (boolean selected) {
+	checkWidget ();
+	if ((style & (SWT.CHECK | SWT.RADIO)) == 0) return;
+	OS.MenuItem_IsChecked (handle, selected);
+}
+/**
+ * Sets the receiver's text. The string may include
+ * the mnemonic character and accelerator text.
+ * <p>
+ * Mnemonics are indicated by an '&amp;' that causes the next
+ * character to be the mnemonic.  When the user presses a
+ * key sequence that matches the mnemonic, a selection
+ * event occurs. On most platforms, the mnemonic appears
+ * underlined but may be emphasised in a platform specific
+ * manner.  The mnemonic indicator character '&amp;' can be
+ * escaped by doubling it in the string, causing a single
+ * '&amp;' to be displayed.
+ * </p>
+ * <p>
+ * Accelerator text is indicated by the '\t' character.
+ * On platforms that support accelerator text, the text
+ * that follows the '\t' character is displayed to the user,
+ * typically indicating the key stroke that will cause
+ * the item to become selected.  On most platforms, the
+ * accelerator text appears right aligned in the menu.
+ * Setting the accelerator text does not install the
+ * accelerator key sequence. The accelerator key sequence
+ * is installed using #setAccelerator.
+ * </p>
+ * 
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setAccelerator
+ */
+public void setText (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if ((style & SWT.SEPARATOR) != 0) return;
+	if (text.equals (string)) return;
+	super.setText (string);
+	String accelString = null;
+	int index = string.indexOf ('\t');
+	if (index != -1) {
+		accelString = string.substring (index+1, string.length());
+		string = string.substring (0, index);
+	}
+	int ptr = createDotNetString (string, true);
+	OS.HeaderedItemsControl_Header (handle, ptr);
+	OS.GCHandle_Free (ptr);
+	if (accelString != null) {
+		ptr = createDotNetString (accelString, false);
+		OS.MenuItem_InputGestureText (handle, ptr);
+		OS.GCHandle_Free (ptr);
+	}
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/MessageBox.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/MessageBox.java
new file mode 100644
index 0000000..1f870e8
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/MessageBox.java
@@ -0,0 +1,197 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+
+/**
+ * Instances of this class are used to inform or warn the user.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>ICON_ERROR, ICON_INFORMATION, ICON_QUESTION, ICON_WARNING, ICON_WORKING</dd>
+ * <dd>OK, OK | CANCEL</dd>
+ * <dd>YES | NO, YES | NO | CANCEL</dd>
+ * <dd>RETRY | CANCEL</dd>
+ * <dd>ABORT | RETRY | IGNORE</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles ICON_ERROR, ICON_INFORMATION, ICON_QUESTION,
+ * ICON_WARNING and ICON_WORKING may be specified.
+ * </p><p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample, Dialog tab</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public  class MessageBox extends Dialog {
+	String message;
+	
+/**
+ * Constructs a new instance of this class given only its parent.
+ *
+ * @param parent a shell which will be the parent of the new instance
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ */
+public MessageBox (Shell parent) {
+	this (parent, SWT.OK | SWT.ICON_INFORMATION | SWT.APPLICATION_MODAL);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ *
+ * @param parent a shell which will be the parent of the new instance
+ * @param style the style of dialog to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ * 
+ * @see SWT#ICON_ERROR
+ * @see SWT#ICON_INFORMATION
+ * @see SWT#ICON_QUESTION
+ * @see SWT#ICON_WARNING
+ * @see SWT#ICON_WORKING
+ * @see SWT#OK
+ * @see SWT#CANCEL
+ * @see SWT#YES
+ * @see SWT#NO
+ * @see SWT#ABORT
+ * @see SWT#RETRY
+ * @see SWT#IGNORE
+ */
+public MessageBox (Shell parent, int style) {
+	super (parent, checkStyle (parent, checkStyle (style)));
+	checkSubclass ();
+	message = "";
+}
+
+static int checkStyle (int style) {
+	int mask = (SWT.YES | SWT.NO | SWT.OK | SWT.CANCEL | SWT.ABORT | SWT.RETRY | SWT.IGNORE);
+	int bits = style & mask;
+	if (bits == SWT.OK || bits == SWT.CANCEL || bits == (SWT.OK | SWT.CANCEL)) return style;
+	if (bits == SWT.YES || bits == SWT.NO || bits == (SWT.YES | SWT.NO) || bits == (SWT.YES | SWT.NO | SWT.CANCEL)) return style;
+	if (bits == (SWT.RETRY | SWT.CANCEL) || bits == (SWT.ABORT | SWT.RETRY | SWT.IGNORE)) return style;
+	style = (style & ~mask) | SWT.OK;
+	return style;
+}
+
+/**
+ * Returns the dialog's message, or an empty string if it does not have one.
+ * The message is a description of the purpose for which the dialog was opened.
+ * This message will be visible in the dialog while it is open.
+ *
+ * @return the message
+ */
+public String getMessage () {
+	return message;
+}
+
+/**
+ * Makes the dialog visible and brings it to the front
+ * of the display.
+ *
+ * @return the ID of the button that was selected to dismiss the
+ *         message box (e.g. SWT.OK, SWT.CANCEL, etc.)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the dialog has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the dialog</li>
+ * </ul>
+ */
+public int open () {
+
+	/* Compute the MessageBox style */
+	int buttonBits = 0;
+	if ((style & SWT.OK) == SWT.OK) buttonBits = OS.MessageBoxButton_OK;
+	if ((style & (SWT.OK | SWT.CANCEL)) == (SWT.OK | SWT.CANCEL)) buttonBits = OS.MessageBoxButton_OKCancel;
+	if ((style & (SWT.YES | SWT.NO)) == (SWT.YES | SWT.NO)) buttonBits = OS.MessageBoxButton_YesNo;
+	if ((style & (SWT.YES | SWT.NO | SWT.CANCEL)) == (SWT.YES | SWT.NO | SWT.CANCEL)) buttonBits = OS.MessageBoxButton_YesNoCancel;
+	/*
+	* Feature in WPF.  MessageBoxButton does not define Retry, Abort, or 
+	* Ignore buttons.  The work around is to use OK/Cancel instead and map
+	* OK to Retry for Retry/Cancel, and Abort for Abort/Retry/Cancel message
+	* boxes.
+	*/
+	if ((style & (SWT.RETRY | SWT.CANCEL)) == (SWT.RETRY | SWT.CANCEL)) buttonBits = OS.MessageBoxButton_OKCancel;
+	if ((style & (SWT.ABORT | SWT.RETRY | SWT.IGNORE)) == (SWT.ABORT | SWT.RETRY | SWT.IGNORE)) buttonBits = OS.MessageBoxButton_OKCancel;
+	if (buttonBits == 0) buttonBits = OS.MessageBoxButton_OK;
+
+	int iconBits = 0;
+	if ((style & SWT.ICON_ERROR) != 0) iconBits = OS.MessageBoxImage_Error;
+	if ((style & SWT.ICON_INFORMATION) != 0) iconBits = OS.MessageBoxImage_Information;
+	if ((style & SWT.ICON_QUESTION) != 0) iconBits = OS.MessageBoxImage_Question;
+	if ((style & SWT.ICON_WARNING) != 0) iconBits = OS.MessageBoxImage_Warning;
+	if ((style & SWT.ICON_WORKING) != 0) iconBits = OS.MessageBoxImage_Information;
+
+	int messagePtr = parent.createDotNetString (message, false);
+	int titlePtr = parent.createDotNetString (title, false);
+	int code = OS.MessageBox_Show (messagePtr, titlePtr, buttonBits, iconBits, 0);
+	OS.GCHandle_Free (titlePtr);
+	OS.GCHandle_Free (messagePtr);
+	
+	/* Compute and return the result */
+	switch (code) {
+		case OS.MessageBoxResult_No: return SWT.NO;
+		case OS.MessageBoxResult_OK:
+			if ((style & (SWT.RETRY | SWT.CANCEL)) == (SWT.RETRY | SWT.CANCEL)) return SWT.RETRY;
+			if ((style & (SWT.ABORT | SWT.RETRY | SWT.IGNORE)) == (SWT.ABORT | SWT.RETRY | SWT.IGNORE)) return SWT.ABORT;
+			return SWT.OK;
+		case OS.MessageBoxResult_Yes: return SWT.YES;
+		case OS.MessageBoxResult_Cancel:
+		default:
+			return SWT.CANCEL;
+	}
+}
+
+/**
+ * Sets the dialog's message, which is a description of
+ * the purpose for which it was opened. This message will be
+ * visible on the dialog while it is open.
+ *
+ * @param string the message
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ */
+public void setMessage (String string) {
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	message = string;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ProgressBar.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ProgressBar.java
new file mode 100644
index 0000000..98ca836
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ProgressBar.java
@@ -0,0 +1,262 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.wpf.*;
+
+/**
+ * Instances of the receiver represent an unselectable
+ * user interface object that is used to display progress,
+ * typically in the form of a bar.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>SMOOTH, HORIZONTAL, VERTICAL, INDETERMINATE</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
+ * </p><p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#progressbar">ProgressBar snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class ProgressBar extends Control {
+	
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#SMOOTH
+ * @see SWT#HORIZONTAL
+ * @see SWT#VERTICAL
+ * @see SWT#INDETERMINATE
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public ProgressBar (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+static int checkStyle (int style) {
+	style |= SWT.NO_FOCUS;
+	return checkBits (style, SWT.HORIZONTAL, SWT.VERTICAL, 0, 0, 0, 0);
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget ();
+	int border = getBorderWidth ();
+	int width = border * 2, height = border * 2;
+	if ((style & SWT.HORIZONTAL) != 0) {
+		width += OS.SystemParameters_HorizontalScrollBarButtonWidth () * 10;
+		height += OS.SystemParameters_HorizontalScrollBarHeight ();
+	} else {
+		width += OS.SystemParameters_VerticalScrollBarWidth ();
+		height += OS.SystemParameters_VerticalScrollBarButtonHeight () * 10;
+	}
+	if (wHint != SWT.DEFAULT) width = wHint + (border * 2);
+	if (hHint != SWT.DEFAULT) height = hHint + (border * 2);
+	return new Point (width, height);
+}
+
+void createHandle () {
+	handle = OS.gcnew_ProgressBar();
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	if ((style & SWT.VERTICAL) != 0) OS.ProgressBar_Orientation (handle, OS.Orientation_Vertical);
+	if ((style & SWT.INDETERMINATE) != 0) {
+		OS.ProgressBar_IsIndeterminate (handle, true) ;
+	}
+}
+
+/**
+ * Returns the maximum value which the receiver will allow.
+ *
+ * @return the maximum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMaximum () {
+	checkWidget ();
+	return (int) OS.RangeBase_Maximum (handle);
+}
+
+/**
+ * Returns the minimum value which the receiver will allow.
+ *
+ * @return the minimum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMinimum () {
+	checkWidget ();
+	return (int) OS.RangeBase_Minimum (handle);
+}
+
+/**
+ * Returns the single 'selection' that is the receiver's position.
+ *
+ * @return the selection
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelection () {
+	checkWidget ();
+	return (int) OS.RangeBase_Value (handle);
+}
+
+/**
+ * Returns the state of the receiver. The value will be one of:
+ * <ul>
+ * 	<li>{@link SWT#NORMAL}</li>
+ * 	<li>{@link SWT#ERROR}</li>
+ * 	<li>{@link SWT#PAUSED}</li>
+ * </ul>
+ *
+ * @return the state 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public int getState () {
+	checkWidget ();
+	return SWT.NORMAL;
+}
+
+/**
+ * Sets the maximum value that the receiver will allow.  This new
+ * value will be ignored if it is not greater than the receiver's current
+ * minimum value.  If the new maximum is applied then the receiver's
+ * selection value will be adjusted if necessary to fall within its new range.
+ *
+ * @param value the new maximum, which must be greater than the current minimum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMaximum (int value) {
+	checkWidget ();
+	int minimum = (int) OS.RangeBase_Minimum (handle);
+	if (0 <= minimum && minimum < value) {
+		OS.RangeBase_Maximum (handle, value);
+	}
+	
+	//FIXME - If the new maximum is applied then the receiver's
+	// selection value will be adjusted if necessary to fall within its new range.
+}
+
+/**
+ * Sets the minimum value that the receiver will allow.  This new
+ * value will be ignored if it is negative or is not less than the receiver's
+ * current maximum value.  If the new minimum is applied then the receiver's
+ * selection value will be adjusted if necessary to fall within its new range.
+ *
+ * @param value the new minimum, which must be nonnegative and less than the current maximum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMinimum (int value) {
+	checkWidget ();
+	int maximum = (int) OS.RangeBase_Maximum (handle);
+	if (0 <= maximum && value < maximum) {
+		OS.RangeBase_Minimum (handle, value);
+	}
+	
+	//FIXME - If the new minimum is applied then the receiver's
+	 //selection value will be adjusted if necessary to fall within its new range
+}
+
+/**
+ * Sets the single 'selection' that is the receiver's
+ * position to the argument which must be greater than or equal
+ * to zero.
+ *
+ * @param value the new selection (must be zero or greater)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (int value) {
+	checkWidget ();
+	if (value < 0) return;
+	OS.RangeBase_Value (handle, value);
+}
+
+/**
+ * Sets the state of the receiver. The state must be one of these values:
+ * <ul>
+ * 	<li>{@link SWT#NORMAL}</li>
+ * 	<li>{@link SWT#ERROR}</li>
+ * 	<li>{@link SWT#PAUSED}</li>
+ * </ul>
+ *
+ * @param state the new state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public void setState (int state) {
+	checkWidget ();
+	//NOT IMPLEMENTED
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Sash.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Sash.java
new file mode 100644
index 0000000..9aeb38b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Sash.java
@@ -0,0 +1,305 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * Instances of the receiver represent a selectable user interface object
+ * that allows the user to drag a rubber banded outline of the sash within
+ * the parent control.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>HORIZONTAL, VERTICAL, SMOOTH</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
+ * </p><p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#sash">Sash snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Sash extends Control {
+	boolean dragging;
+	int startX, startY, lastX, lastY;
+	final static int INCREMENT = 1;
+	final static int PAGE_INCREMENT = 9;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#HORIZONTAL
+ * @see SWT#VERTICAL
+ * @see SWT#SMOOTH
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Sash (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * When <code>widgetSelected</code> is called, the x, y, width, and height fields of the event object are valid.
+ * If the receiver is being dragged, the event object detail field contains the value <code>SWT.DRAG</code>.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the control is selected by the user
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+static int checkStyle (int style) {
+	return checkBits (style, SWT.HORIZONTAL, SWT.VERTICAL, 0, 0, 0, 0);
+}
+
+void createHandle () {
+	state |= THEME_BACKGROUND;
+	handle = OS.gcnew_Canvas ();
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.UIElement_Focusable (handle, true);
+	int newCursor = (style & SWT.VERTICAL)!= 0 ? OS.Cursors_SizeWE () : OS.Cursors_SizeNS ();  
+	OS.FrameworkElement_Cursor (handle, newCursor);
+	OS.GCHandle_Free (newCursor);
+}
+
+int defaultBackground () {
+	return OS.SystemColors_ControlColor;
+}
+
+void HandlePreviewGotKeyboardFocus (int sender, int e) {
+	super.HandlePreviewGotKeyboardFocus (sender, e);
+	if (!checkEvent (e)) return;
+	Point location = getLocation();
+	lastX = location.x;
+	lastY = location.y;
+}
+
+void HandlePreviewKeyDown (int sender, int e) {
+	super.HandlePreviewKeyDown (sender, e);
+	if (!checkEvent (e)) return;
+	int key = OS.KeyEventArgs_Key (e);
+	switch (key) {
+		case OS.Key_Left:
+		case OS.Key_Right:
+		case OS.Key_Up:
+		case OS.Key_Down:
+			int xChange = 0, yChange = 0;
+			int stepSize = PAGE_INCREMENT;
+			int keyboardDevice = OS.KeyboardEventArgs_KeyboardDevice(e);
+			int modifiers = OS.KeyboardDevice_Modifiers(keyboardDevice);
+			OS.GCHandle_Free(keyboardDevice);
+			if ((modifiers & OS.ModifierKeys_Control) != 0) stepSize = INCREMENT;
+			if ((style & SWT.VERTICAL) != 0) {
+				if (key == OS.Key_Up || key == OS.Key_Down) break;
+				xChange = key == OS.Key_Left ? -stepSize : stepSize;
+			} else {
+				if (key == OS.Key_Left || key == OS.Key_Right) break;
+				yChange = key == OS.Key_Up ? -stepSize : stepSize;
+			}
+			
+			Rectangle bounds = getBounds ();
+			int width = bounds.width, height = bounds.height;
+			Rectangle parentBounds = parent.getBounds ();
+			int parentWidth = parentBounds.width;
+			int parentHeight = parentBounds.height;
+			int newX = lastX, newY = lastY;
+			if ((style & SWT.VERTICAL) != 0) {
+				newX = Math.min (Math.max (0, lastX + xChange), parentWidth - width);
+			} else {
+				newY = Math.min (Math.max (0, lastY + yChange), parentHeight - height);
+			}
+			if (newX == lastX && newY == lastY) return;
+			Event event = new Event ();
+			event.x = newX;
+			event.y = newY;
+			event.width = width;
+			event.height = height;
+			sendEvent (SWT.Selection, event);
+			if (isDisposed ()) break;
+			if (event.doit) {
+				setBounds (event.x, event.y, width, height);
+				if (isDisposed ()) break;
+				lastX = event.x;
+				lastY = event.y;
+				if (isDisposed ()) return;
+				int cursorX = event.x, cursorY = event.y;
+				if ((style & SWT.VERTICAL) != 0) {
+					cursorY += height / 2;
+				} else {
+					cursorX += width / 2;
+				}
+				display.setCursorLocation (parent.toDisplay (cursorX, cursorY));
+			}
+			OS.RoutedEventArgs_Handled(e, true);
+			break;
+	}	
+}
+
+void HandlePreviewMouseDown (int sender, int e) {
+	super.HandlePreviewMouseDown (sender, e);
+	int eventPos = OS.MouseEventArgs_GetPosition (e, handle);
+	startX = (int) OS.Point_X (eventPos); 
+	startY = (int) OS.Point_Y (eventPos);
+	OS.GCHandle_Free (eventPos);
+	Point location = parent.getLocation (this);
+	int x = location.x;
+	int y = location.y;
+	int width = (int) OS.FrameworkElement_ActualWidth (handle);
+	int height = (int) OS.FrameworkElement_ActualHeight (handle);
+	lastX = x; 
+	lastY = y;
+	Event event = new Event ();
+	event.x = lastX;
+	event.y = lastY;
+	event.width = width;
+	event.height = height;
+	sendEvent (SWT.Selection, event);
+	if (event.doit) {
+		dragging = true;
+		lastX = event.x;
+		lastY = event.y;
+		OS.UIElement_CaptureMouse (handle);
+	}
+}
+
+void HandlePreviewMouseUp (int sender, int e) {
+	super.HandlePreviewMouseUp (sender, e);
+	if (!dragging) return;
+	OS.UIElement_ReleaseMouseCapture (handle);
+	dragging = false;
+	int width = (int) OS.FrameworkElement_ActualWidth (handle);
+	int height = (int) OS.FrameworkElement_ActualHeight (handle);
+	Event event = new Event ();
+	event.x = lastX;
+	event.y = lastY;
+	event.width = width;
+	event.height = height;
+	sendEvent (SWT.Selection, event);
+}
+
+void HandlePreviewMouseMove (int sender, int e) {
+	super.HandlePreviewMouseMove (sender, e);
+	if (!dragging) return;
+	int eventPos = OS.MouseEventArgs_GetPosition (e, handle);
+	int eventX = (int) OS.Point_X (eventPos); 
+	int eventY = (int) OS.Point_Y (eventPos);
+	OS.GCHandle_Free (eventPos);
+	Point location = parent.getLocation (this);
+	int x = location.x;
+	int y = location.y;
+	int width = (int) OS.FrameworkElement_ActualWidth (handle);
+	int height = (int) OS.FrameworkElement_ActualHeight (handle);
+	int parentWidth =  (int) OS.FrameworkElement_ActualWidth (parent.handle);
+	int parentHeight = (int) OS.FrameworkElement_ActualHeight (parent.handle);
+	int newX = lastX, newY = lastY;
+	if ((style & SWT.VERTICAL) != 0) {
+		newX = Math.min (Math.max (0, eventX + x - startX), parentWidth - width);
+	} else {
+		newY = Math.min (Math.max (0, eventY + y - startY), parentHeight - height);
+	}
+	if (newX == lastX && newY == lastY) return;	
+	Event event = new Event ();
+	event.x = newX;
+	event.y = newY;
+	event.width = width;
+	event.height = height;
+	sendEvent (SWT.Selection, event);
+	if (isDisposed ()) return;
+	if (event.doit) {
+		lastX = event.x;
+		lastY = event.y;
+	}
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+int traversalCode (int key, int event) {
+	return 0;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Scale.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Scale.java
new file mode 100644
index 0000000..776a370
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Scale.java
@@ -0,0 +1,361 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+ 
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * Instances of the receiver represent a selectable user
+ * interface object that present a range of continuous
+ * numeric values.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>HORIZONTAL, VERTICAL</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
+ * </p><p>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#scale">Scale snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class Scale extends Control {
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#HORIZONTAL
+ * @see SWT#VERTICAL
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Scale (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the user changes the receiver's value, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is called when the user changes the receiver's value.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ */
+public void addSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+static int checkStyle (int style) {
+	return checkBits (style, SWT.HORIZONTAL, SWT.VERTICAL, 0, 0, 0, 0);
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget ();
+	int border = getBorderWidth ();
+	int width = border * 2, height = border * 2;
+	if ((style & SWT.HORIZONTAL) != 0) {
+		width += OS.SystemParameters_HorizontalScrollBarButtonWidth () * 10;
+		height += OS.SystemParameters_HorizontalScrollBarHeight () * 2;
+	} else {
+		width += OS.SystemParameters_VerticalScrollBarWidth () * 2;
+		height += OS.SystemParameters_VerticalScrollBarButtonHeight () * 10;
+	}
+	if (wHint != SWT.DEFAULT) width = wHint + (border * 2);
+	if (hHint != SWT.DEFAULT) height = hHint + (border * 2);
+	return new Point (width, height);
+}
+
+void createHandle () {
+	state |= THEME_BACKGROUND;
+	handle = OS.gcnew_Slider ();
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	if ((style & SWT.VERTICAL) != 0) OS.Slider_Orientation (handle, OS.Orientation_Vertical);
+	OS.RangeBase_Maximum (handle, 100);
+	OS.RangeBase_LargeChange (handle, 10);
+	OS.RangeBase_SmallChange (handle, 1);
+	OS.Slider_TickFrequency (handle, 10);
+	OS.Slider_TickPlacement (handle, OS.TickPlacement_Both);
+}
+
+int defaultBackground () {
+	return OS.SystemColors_ControlColor;
+}
+
+/**
+ * Returns the amount that the receiver's value will be
+ * modified by when the up/down (or right/left) arrows
+ * are pressed.
+ *
+ * @return the increment
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getIncrement () {
+	checkWidget ();
+	return (int) OS.RangeBase_SmallChange (handle);
+}
+
+/**
+ * Returns the maximum value which the receiver will allow.
+ *
+ * @return the maximum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMaximum () {
+	checkWidget ();
+	return (int) OS.RangeBase_Maximum (handle); 
+}
+
+/**
+ * Returns the minimum value which the receiver will allow.
+ *
+ * @return the minimum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMinimum () {
+	checkWidget ();
+	return (int) OS.RangeBase_Minimum (handle); 
+}
+
+/**
+ * Returns the amount that the receiver's value will be
+ * modified by when the page increment/decrement areas
+ * are selected.
+ *
+ * @return the page increment
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getPageIncrement () {
+	checkWidget ();
+	return (int) OS.RangeBase_LargeChange(handle);
+}
+
+/**
+ * Returns the 'selection', which is the receiver's position.
+ *
+ * @return the selection
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelection () {
+	checkWidget ();
+	return (int) OS.RangeBase_Value (handle);
+}
+
+void HandleValueChanged (int sender, int e) {
+	if (!checkEvent (e)) return;
+	postEvent (SWT.Selection);
+}
+
+void hookEvents() {
+	super.hookEvents ();
+	int handler = OS.gcnew_RoutedPropertyChangedEventHandler (jniRef, "HandleValueChanged");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.RangeBase_ValueChanged (handle, handler);
+	OS.GCHandle_Free (handler);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the user changes the receiver's value.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+/**
+ * Sets the amount that the receiver's value will be
+ * modified by when the up/down (or right/left) arrows
+ * are pressed to the argument, which must be at least 
+ * one.
+ *
+ * @param increment the new increment (must be greater than zero)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setIncrement (int increment) {
+	checkWidget ();
+	if (increment < 1) return;
+	int minimum = (int) OS.RangeBase_Minimum(handle);
+	int maximum = (int) OS.RangeBase_Maximum(handle);
+	if (increment > maximum - minimum) return;
+	OS.RangeBase_SmallChange(handle, increment);
+}
+
+/**
+ * Sets the maximum value that the receiver will allow.  This new
+ * value will be ignored if it is not greater than the receiver's current
+ * minimum value.  If the new maximum is applied then the receiver's
+ * selection value will be adjusted if necessary to fall within its new range.
+ *
+ * @param value the new maximum, which must be greater than the current minimum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMaximum (int value) {
+	checkWidget ();
+	int minimum = (int) OS.RangeBase_Minimum (handle);
+	if (0 <= minimum && minimum < value) OS.RangeBase_Maximum (handle, value);
+}
+
+/**
+ * Sets the minimum value that the receiver will allow.  This new
+ * value will be ignored if it is negative or is not less than the receiver's
+ * current maximum value.  If the new minimum is applied then the receiver's
+ * selection value will be adjusted if necessary to fall within its new range.
+ *
+ * @param value the new minimum, which must be nonnegative and less than the current maximum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMinimum (int value) {
+	checkWidget ();
+	int maximum = (int) OS.RangeBase_Maximum (handle);
+	if (0 <= value && value < maximum) OS.RangeBase_Minimum (handle, value);
+}
+
+/**
+ * Sets the amount that the receiver's value will be
+ * modified by when the page increment/decrement areas
+ * are selected to the argument, which must be at least
+ * one.
+ *
+ * @param pageIncrement the page increment (must be greater than zero)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setPageIncrement (int pageIncrement) {
+	checkWidget ();
+	if (pageIncrement < 1) return;
+	int minimum = (int) OS.RangeBase_Minimum(handle);
+	int maximum = (int) OS.RangeBase_Maximum(handle);
+	if (pageIncrement > maximum - minimum) return;
+	OS.RangeBase_LargeChange(handle, pageIncrement);
+	OS.Slider_TickFrequency(handle, pageIncrement);
+}
+
+/**
+ * Sets the 'selection', which is the receiver's value,
+ * to the argument which must be greater than or equal to zero.
+ *
+ * @param value the new selection (must be zero or greater)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (int value) {
+	checkWidget ();
+	OS.RangeBase_Value (handle, value);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ScrollBar.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ScrollBar.java
new file mode 100644
index 0000000..db6026d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ScrollBar.java
@@ -0,0 +1,693 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * Instances of this class are selectable user interface
+ * objects that represent a range of positive, numeric values. 
+ * <p>
+ * At any given moment, a given scroll bar will have a 
+ * single 'selection' that is considered to be its
+ * value, which is constrained to be within the range of
+ * values the scroll bar represents (that is, between its
+ * <em>minimum</em> and <em>maximum</em> values).
+ * </p><p>
+ * Typically, scroll bars will be made up of five areas:
+ * <ol>
+ * <li>an arrow button for decrementing the value</li>
+ * <li>a page decrement area for decrementing the value by a larger amount</li>
+ * <li>a <em>thumb</em> for modifying the value by mouse dragging</li>
+ * <li>a page increment area for incrementing the value by a larger amount</li>
+ * <li>an arrow button for incrementing the value</li>
+ * </ol>
+ * Based on their style, scroll bars are either <code>HORIZONTAL</code>
+ * (which have a left facing button for decrementing the value and a
+ * right facing button for incrementing it) or <code>VERTICAL</code>
+ * (which have an upward facing button for decrementing the value
+ * and a downward facing buttons for incrementing it).
+ * </p><p>
+ * On some platforms, the size of the scroll bar's thumb can be
+ * varied relative to the magnitude of the range of values it
+ * represents (that is, relative to the difference between its
+ * maximum and minimum values). Typically, this is used to
+ * indicate some proportional value such as the ratio of the
+ * visible area of a document to the total amount of space that
+ * it would take to display it. SWT supports setting the thumb
+ * size even if the underlying platform does not, but in this
+ * case the appearance of the scroll bar will not change.
+ * </p><p>
+ * Scroll bars are created by specifying either <code>H_SCROLL</code>,
+ * <code>V_SCROLL</code> or both when creating a <code>Scrollable</code>.
+ * They are accessed from the <code>Scrollable</code> using
+ * <code>getHorizontalBar</code> and <code>getVerticalBar</code>.
+ * </p><p>
+ * Note: Scroll bars are not Controls.  On some platforms, scroll bars
+ * that appear as part of some standard controls such as a text or list
+ * have no operating system resources and are not children of the control.
+ * For this reason, scroll bars are treated specially.  To create a control
+ * that looks like a scroll bar but has operating system resources, use
+ * <code>Slider</code>. 
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>HORIZONTAL, VERTICAL</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see Slider
+ * @see Scrollable
+ * @see Scrollable#getHorizontalBar
+ * @see Scrollable#getVerticalBar
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class ScrollBar extends Widget {	
+	Scrollable parent;
+	
+/** 
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#HORIZONTAL
+ * @see SWT#VERTICAL
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+ScrollBar (Scrollable parent, int style) {
+	super (parent, checkStyle (style));
+	this.parent = parent;
+	createWidget ();
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the user changes the receiver's value, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * When <code>widgetSelected</code> is called, the event object detail field contains one of the following values:
+ * <code>SWT.NONE</code> - for the end of a drag.
+ * <code>SWT.DRAG</code>.
+ * <code>SWT.HOME</code>.
+ * <code>SWT.END</code>.
+ * <code>SWT.ARROW_DOWN</code>.
+ * <code>SWT.ARROW_UP</code>.
+ * <code>SWT.PAGE_DOWN</code>.
+ * <code>SWT.PAGE_UP</code>.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the user changes the receiver's value
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener (SelectionListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener(listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+static int checkStyle (int style) {
+	return checkBits (style, SWT.HORIZONTAL, SWT.VERTICAL, 0, 0, 0, 0);
+}
+
+void createHandle () {
+	handle = parent.getScrollBarHandle (style);
+}
+
+void deregister () {
+	display.removeWidget (handle);
+}
+
+void destroyWidget () {
+	int topHandle = topHandle ();
+	OS.UIElement_Visibility (topHandle, OS.Visibility_Collapsed);
+	if (parent.scrolledHandle != 0) {
+		int parentHandle = parent.handle;
+		int children = OS.Panel_Children (parentHandle);
+		OS.UIElementCollection_Remove (children, topHandle);
+	}
+	releaseHandle ();
+}
+
+/**
+ * Returns <code>true</code> if the receiver is enabled, and
+ * <code>false</code> otherwise. A disabled control is typically
+ * not selectable from the user interface and draws with an
+ * inactive or "grayed" look.
+ *
+ * @return the receiver's enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #isEnabled
+ */
+public boolean getEnabled () {
+	checkWidget();
+	return OS.UIElement_IsEnabled (topHandle ());
+}
+
+/**
+ * Returns the amount that the receiver's value will be
+ * modified by when the up/down (or right/left) arrows
+ * are pressed.
+ *
+ * @return the increment
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getIncrement () {
+	checkWidget();
+	return (int) OS.RangeBase_SmallChange (handle);
+}
+
+/**
+ * Returns the maximum value which the receiver will allow.
+ *
+ * @return the maximum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMaximum () {
+	checkWidget();
+	int maximum = (int) OS.RangeBase_Maximum (handle);
+	int viewSize = (int) OS.ScrollBar_ViewportSize (handle);
+    return maximum + viewSize;
+}
+
+/**
+ * Returns the minimum value which the receiver will allow.
+ *
+ * @return the minimum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMinimum () {
+	checkWidget();
+	return (int) OS.RangeBase_Minimum (handle);
+}
+
+/**
+ * Returns the amount that the receiver's value will be
+ * modified by when the page increment/decrement areas
+ * are selected.
+ *
+ * @return the page increment
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getPageIncrement () {
+	checkWidget();
+	return (int) OS.RangeBase_LargeChange (handle);
+}
+
+/**
+ * Returns the receiver's parent, which must be a Scrollable.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Scrollable getParent () {
+	checkWidget();
+	return parent;
+}
+
+/**
+ * Returns the single 'selection' that is the receiver's value.
+ *
+ * @return the selection
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelection () {
+	checkWidget();
+	return (int) OS.RangeBase_Value (handle);
+}
+
+/**
+ * Returns a point describing the receiver's size. The
+ * x coordinate of the result is the width of the receiver.
+ * The y coordinate of the result is the height of the
+ * receiver.
+ *
+ * @return the receiver's size
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Point getSize () {
+	checkWidget();
+	int topHandle = topHandle ();
+	int width = (int) OS.FrameworkElement_ActualWidth (topHandle);
+	int height = (int) OS.FrameworkElement_ActualHeight (topHandle);
+	return new Point (width, height);
+}
+
+/**
+ * Returns the size of the receiver's thumb relative to the
+ * difference between its maximum and minimum values.
+ *
+ * @return the thumb value
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ScrollBar
+ */
+public int getThumb () {
+	checkWidget();
+	return (int) OS.ScrollBar_ViewportSize (handle);
+}
+
+/**
+ * Returns <code>true</code> if the receiver is visible, and
+ * <code>false</code> otherwise.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, this method
+ * may still indicate that it is considered visible even though
+ * it may not actually be showing.
+ * </p>
+ *
+ * @return the receiver's visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getVisible () {
+	checkWidget();
+	return OS.UIElement_Visibility (handle) == OS.Visibility_Visible;
+}
+
+void HandleScroll (int sender, int e) {
+	if (!checkEvent (e)) return;
+	Event event = new Event ();
+	switch (OS.ScrollEventArgs_ScrollEventType (e)) {
+		case OS.ScrollEventType_EndScroll: 		return;
+		case OS.ScrollEventType_ThumbPosition: 	event.detail = SWT.NONE; break;
+		case OS.ScrollEventType_ThumbTrack:		event.detail = SWT.DRAG; break;
+		case OS.ScrollEventType_First:			event.detail = SWT.HOME; break;
+		case OS.ScrollEventType_Last:			event.detail = SWT.END; break;
+		case OS.ScrollEventType_LargeIncrement:	event.detail = SWT.PAGE_DOWN; break;
+		case OS.ScrollEventType_LargeDecrement: event.detail = SWT.PAGE_UP; break;
+		case OS.ScrollEventType_SmallIncrement: event.detail = SWT.ARROW_DOWN; break;
+		case OS.ScrollEventType_SmallDecrement: event.detail = SWT.ARROW_UP; break;
+	}
+	postEvent (SWT.Selection, event);
+}
+
+void hookEvents () {
+	super.hookEvents ();
+	int handler = OS.gcnew_ScrollEventHandler (jniRef, "HandleScroll");
+	OS.ScrollBar_Scroll (handle, handler);
+	OS.GCHandle_Free (handler);
+}
+
+/**
+ * Returns <code>true</code> if the receiver is enabled and all
+ * of the receiver's ancestors are enabled, and <code>false</code>
+ * otherwise. A disabled control is typically not selectable from the
+ * user interface and draws with an inactive or "grayed" look.
+ *
+ * @return the receiver's enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #getEnabled
+ */
+public boolean isEnabled () {
+	checkWidget();
+	return getEnabled () && parent.isEnabled ();
+}
+
+/**
+ * Returns <code>true</code> if the receiver is visible and all
+ * of the receiver's ancestors are visible and <code>false</code>
+ * otherwise.
+ *
+ * @return the receiver's visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getVisible
+ */
+public boolean isVisible () {
+	checkWidget();
+	return getVisible () && parent.isVisible ();
+}
+
+void register () {
+	display.addWidget (handle, this);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (handle != 0) OS.GCHandle_Free (handle);
+	handle = 0;
+	parent = null;
+}
+
+void releaseParent () {
+	super.releaseParent ();
+	if (parent.horizontalBar == this) parent.horizontalBar = null;
+	if (parent.verticalBar == this) parent.verticalBar = null;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the user changes the receiver's value.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener (SelectionListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+/**
+ * Enables the receiver if the argument is <code>true</code>,
+ * and disables it otherwise. A disabled control is typically
+ * not selectable from the user interface and draws with an
+ * inactive or "grayed" look.
+ *
+ * @param enabled the new enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setEnabled (boolean enabled) {
+	checkWidget();
+	OS.UIElement_IsEnabled (handle, enabled);
+}
+
+/**
+ * Sets the amount that the receiver's value will be
+ * modified by when the up/down (or right/left) arrows
+ * are pressed to the argument, which must be at least 
+ * one.
+ *
+ * @param value the new increment (must be greater than zero)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setIncrement (int value) {
+	checkWidget();
+	if (value < 1) return;
+	OS.RangeBase_SmallChange (handle, value);
+}
+
+/**
+ * Sets the maximum. If this value is negative or less than or
+ * equal to the minimum, the value is ignored. If necessary, first
+ * the thumb and then the selection are adjusted to fit within the
+ * new range.
+ *
+ * @param value the new maximum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMaximum (int value) {
+	checkWidget();
+	if (value < 0) return;
+	int minimum = (int) OS.RangeBase_Minimum (handle);
+	if (value <= minimum) return;
+	int viewSize = (int) OS.ScrollBar_ViewportSize (handle);
+	if (value - minimum < viewSize) {
+		viewSize = value - minimum;
+		OS.ScrollBar_ViewportSize (handle, viewSize);
+	}	
+	OS.RangeBase_Maximum (handle, value - viewSize);
+}
+
+/**
+ * Sets the minimum value. If this value is negative or greater
+ * than or equal to the maximum, the value is ignored. If necessary,
+ * first the thumb and then the selection are adjusted to fit within
+ * the new range.
+ *
+ * @param value the new minimum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMinimum (int value) {
+	checkWidget();
+	if (value < 0) return;
+	int viewSize = (int) OS.ScrollBar_ViewportSize (handle);
+	int maximum = (int) OS.RangeBase_Maximum (handle) + viewSize;
+	if (value >= maximum) return;
+	if (maximum - value < viewSize) {
+		viewSize = maximum - value;
+		OS.RangeBase_Maximum (handle, maximum - viewSize);
+		OS.ScrollBar_ViewportSize (handle, viewSize);
+	}
+	OS.RangeBase_Minimum (handle, value);
+}
+
+/**
+ * Sets the amount that the receiver's value will be
+ * modified by when the page increment/decrement areas
+ * are selected to the argument, which must be at least
+ * one.
+ *
+ * @param value the page increment (must be greater than zero)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setPageIncrement (int value) {
+	checkWidget();
+	if (value < 1) return;
+	OS.RangeBase_LargeChange (handle, value);
+}
+
+/**
+ * Sets the single <em>selection</em> that is the receiver's
+ * value to the argument which must be greater than or equal
+ * to zero.
+ *
+ * @param selection the new selection (must be zero or greater)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (int selection) {
+	checkWidget();
+	OS.RangeBase_Value (handle, selection);
+}
+
+/**
+ * Sets the size of the receiver's thumb relative to the
+ * difference between its maximum and minimum values.  This new
+ * value will be ignored if it is less than one, and will be
+ * clamped if it exceeds the receiver's current range.
+ *
+ * @param value the new thumb value, which must be at least one and not
+ * larger than the size of the current range
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setThumb (int value) {
+	checkWidget();
+	if (value < 1) return;
+	int minimum = (int) OS.RangeBase_Minimum (handle);
+	int viewSize = (int) OS.ScrollBar_ViewportSize (handle);
+	int maximum = (int) OS.RangeBase_Maximum (handle) + viewSize;
+	value = Math.min (value, maximum - minimum);
+	OS.RangeBase_Maximum (handle, maximum - value);
+    OS.ScrollBar_ViewportSize (handle, value);
+}
+
+/**
+ * Sets the receiver's selection, minimum value, maximum
+ * value, thumb, increment and page increment all at once.
+ * <p>
+ * Note: This is similar to setting the values individually
+ * using the appropriate methods, but may be implemented in a 
+ * more efficient fashion on some platforms.
+ * </p>
+ *
+ * @param selection the new selection value
+ * @param minimum the new minimum value
+ * @param maximum the new maximum value
+ * @param thumb the new thumb value
+ * @param increment the new increment value
+ * @param pageIncrement the new pageIncrement value
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setValues (int selection, int minimum, int maximum, int thumb, int increment, int pageIncrement) {
+	checkWidget();
+	if (minimum < 0) return;
+	if (maximum < 0) return;
+	if (thumb < 1) return;
+	if (increment < 1) return;
+	if (pageIncrement < 1) return;
+	thumb = Math.min (thumb, maximum - minimum);
+	OS.RangeBase_Minimum (handle, minimum);
+	OS.RangeBase_Maximum (handle, maximum - thumb);
+	OS.ScrollBar_ViewportSize (handle, thumb);
+	OS.RangeBase_Value (handle, selection);
+	OS.RangeBase_LargeChange (handle, pageIncrement);
+	OS.RangeBase_SmallChange (handle, increment);
+}
+
+/**
+ * Marks the receiver as visible if the argument is <code>true</code>,
+ * and marks it invisible otherwise. 
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, marking
+ * it visible may not actually cause it to be displayed.
+ * </p>
+ *
+ * @param visible the new visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setVisible (boolean visible) {
+	checkWidget ();
+	int topHandle = topHandle ();
+	if ((OS.UIElement_Visibility (topHandle) == OS.Visibility_Visible) == visible) return;
+	if (visible) {
+		sendEvent (SWT.Show);
+		if (isDisposed ()) return;
+	}
+	OS.UIElement_Visibility (topHandle, visible ? OS.Visibility_Visible : OS.Visibility_Collapsed);
+	if (isDisposed ()) return;
+	if (!visible) {
+		sendEvent (SWT.Hide);
+		if (isDisposed ()) return;
+	}
+}
+
+int topHandle () {
+	return handle;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Scrollable.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Scrollable.java
new file mode 100644
index 0000000..2176dd0
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Scrollable.java
@@ -0,0 +1,313 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * This class is the abstract superclass of all classes which
+ * represent controls that have standard scroll bars.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>H_SCROLL, V_SCROLL</dd>
+ * <dt><b>Events:</b>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public abstract class Scrollable extends Control {
+	ScrollBar horizontalBar, verticalBar;
+	int scrolledHandle;
+
+/**
+ * Prevents uninitialized instances from being created outside the package.
+ */
+Scrollable () {
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#H_SCROLL
+ * @see SWT#V_SCROLL
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Scrollable (Composite parent, int style) {
+	super (parent, style);
+}
+
+int clientHandle () {
+	return handle;
+}
+
+/**
+ * Given a desired <em>client area</em> for the receiver
+ * (as described by the arguments), returns the bounding
+ * rectangle which would be required to produce that client
+ * area.
+ * <p>
+ * In other words, it returns a rectangle such that, if the
+ * receiver's bounds were set to that rectangle, the area
+ * of the receiver which is capable of displaying data
+ * (that is, not covered by the "trimmings") would be the
+ * rectangle described by the arguments (relative to the
+ * receiver's parent).
+ * </p>
+ * 
+ * @param x the desired x coordinate of the client area
+ * @param y the desired y coordinate of the client area
+ * @param width the desired width of the client area
+ * @param height the desired height of the client area
+ * @return the required bounds to produce the given client area
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getClientArea
+ */
+public Rectangle computeTrim (int x, int y, int width, int height) {
+	checkWidget ();
+	if (verticalBar != null) width += OS.SystemParameters_VerticalScrollBarWidth ();
+	if (horizontalBar != null) height += OS.SystemParameters_HorizontalScrollBarHeight ();
+	return new Rectangle (x, y, width, height);
+}
+
+ScrollBar createScrollBar (int type) {
+	return new ScrollBar (this, type);
+}
+
+void createWidget () {
+	super.createWidget ();
+	if ((style & SWT.H_SCROLL) != 0) horizontalBar = createScrollBar (SWT.H_SCROLL);
+	if ((style & SWT.V_SCROLL) != 0) verticalBar = createScrollBar (SWT.V_SCROLL);
+	fixScrollbarVisibility ();
+}
+
+void deregister () {
+	super.deregister ();
+	if (scrolledHandle != 0) display.removeWidget (scrolledHandle);
+}
+
+int findScrollViewer (int current, int scrollViewerType) {
+	int type = OS.Object_GetType (current);
+	boolean found = OS.Object_Equals (scrollViewerType, type);
+	OS.GCHandle_Free (type);
+	if (found) return current;
+	int childCount = OS.VisualTreeHelper_GetChildrenCount (current);
+	for (int i = 0; i < childCount; i++) {
+		int child = OS.VisualTreeHelper_GetChild (current, i);
+		int result = findScrollViewer (child, scrollViewerType);
+		if (child != result) OS.GCHandle_Free (child);
+		if (result != 0) return result;
+	}
+	return 0;
+}
+
+void fixScrollbarVisibility () {
+	if ((style & SWT.H_SCROLL) == 0) {
+		OS.ScrollViewer_SetHorizontalScrollBarVisibility (handle, OS.ScrollBarVisibility_Hidden);
+	}
+	if ((style & SWT.V_SCROLL) == 0) {
+		OS.ScrollViewer_SetVerticalScrollBarVisibility (handle, OS.ScrollBarVisibility_Hidden);
+	}
+}
+
+/**
+ * Returns a rectangle which describes the area of the
+ * receiver which is capable of displaying data (that is,
+ * not covered by the "trimmings").
+ * 
+ * @return the client area
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #computeTrim
+ */
+public Rectangle getClientArea () {
+	checkWidget ();
+	int clientHandle = clientHandle ();
+	int topHandle = topHandle (); 
+	updateLayout (topHandle);
+	int width = (int) OS.FrameworkElement_ActualWidth (clientHandle);
+	int height = (int) OS.FrameworkElement_ActualHeight (clientHandle);
+	return new Rectangle (0, 0, width, height);
+}
+
+/**
+ * Returns the receiver's horizontal scroll bar if it has
+ * one, and null if it does not.
+ *
+ * @return the horizontal scroll bar (or null)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public ScrollBar getHorizontalBar () {
+	checkWidget ();
+	return horizontalBar;
+}
+
+int getScrollBarHandle (int style) {
+	int scrollbar = 0;
+	if (scrolledHandle != 0) {
+		int children = OS.Panel_Children (scrolledHandle);
+		int enumerator = OS.UIElementCollection_GetEnumerator (children);
+		int scrollType = OS.ScrollBar_typeid ();
+		while (OS.IEnumerator_MoveNext (enumerator)) {
+			int current = OS.IEnumerator_Current (enumerator);
+			if (OS.Type_IsInstanceOfType (scrollType, current)) {
+				int orientation = OS.ScrollBar_Orientation (current);
+				if ((style & SWT.H_SCROLL) != 0 && orientation == OS.Orientation_Horizontal) {
+					scrollbar = current;
+					break;
+				}
+				if ((style & SWT.V_SCROLL) != 0 && orientation == OS.Orientation_Vertical) { 
+					scrollbar = current;
+					break;
+				}
+			}
+			OS.GCHandle_Free (current);
+		}
+		OS.GCHandle_Free (scrollType);
+		OS.GCHandle_Free (enumerator);
+		OS.GCHandle_Free (children);
+	} else {
+		updateLayout (handle);
+		int scrollViewerType = OS.ScrollViewer_typeid ();
+		int scrollViewer = findScrollViewer (handle, scrollViewerType);
+		int template = OS.Control_Template (scrollViewer);
+		int part;
+		if ((style & SWT.H_SCROLL) != 0) {
+			part = createDotNetString ("PART_HorizontalScrollBar", false);
+		} else {
+			part = createDotNetString ("PART_VerticalScrollBar", false);
+		}
+		scrollbar = OS.FrameworkTemplate_FindName (template, part, scrollViewer);
+		OS.GCHandle_Free (part);
+		OS.GCHandle_Free (template);
+		OS.GCHandle_Free (scrollViewer);
+		OS.GCHandle_Free (scrollViewerType);
+	}
+	return scrollbar;
+}
+
+/**
+ * Returns the receiver's vertical scroll bar if it has
+ * one, and null if it does not.
+ *
+ * @return the vertical scroll bar (or null)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public ScrollBar getVerticalBar () {
+	checkWidget ();
+	return verticalBar;
+}
+
+void HandlePreviewMouseWheel (int sender, int e) {
+	super.HandlePreviewMouseWheel (sender, e);
+	if (!checkEvent (e)) return;
+	if ((state & CANVAS) != 0) {
+		if (verticalBar != null) {
+			int vHandle = verticalBar.handle;
+			int delta = OS.MouseWheelEventArgs_Delta (e);
+			int lines = OS.SystemParameters_WheelScrollLines ();
+			double value = OS.RangeBase_Value (vHandle);
+			double newValue = value;
+			Event event = new Event ();
+			if (lines != -1) {
+				double smallIncrement = OS.RangeBase_SmallChange (vHandle);
+				newValue += smallIncrement * (-delta/120) * lines;
+				event.detail = delta < 0 ? SWT.ARROW_DOWN : SWT.ARROW_UP;
+			} else {
+				double largeIncrement = OS.RangeBase_LargeChange (vHandle);
+				newValue += largeIncrement * (-delta/120);
+				event.detail = delta < 0 ? SWT.PAGE_DOWN : SWT.PAGE_UP;
+			}
+			OS.RangeBase_Value (vHandle, newValue);
+			newValue = OS.RangeBase_Value (vHandle);
+			if (value != newValue) {
+				verticalBar.postEvent (SWT.Selection, event);
+			}
+		}
+	}
+}
+
+void register () {
+	super.register ();
+	if (scrolledHandle != 0) display.addWidget (scrolledHandle, this);
+}
+
+void releaseChildren (boolean destroy) {
+	if (horizontalBar != null) {
+		horizontalBar.release (false);
+		horizontalBar = null;
+	}
+	if (verticalBar != null) {
+		verticalBar.release (false);
+		verticalBar = null;
+	}
+	super.releaseChildren (destroy);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (scrolledHandle != 0) OS.GCHandle_Free (scrolledHandle);
+	scrolledHandle = 0;
+}
+
+int topHandle () {
+	return scrolledHandle != 0 ? scrolledHandle : super.topHandle ();
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Shell.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Shell.java
new file mode 100644
index 0000000..6ec9c27
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Shell.java
@@ -0,0 +1,1536 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.internal.win32.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * Instances of this class represent the "windows"
+ * which the desktop or "window manager" is managing.
+ * Instances that do not have a parent (that is, they
+ * are built using the constructor, which takes a 
+ * <code>Display</code> as the argument) are described
+ * as <em>top level</em> shells. Instances that do have
+ * a parent are described as <em>secondary</em> or
+ * <em>dialog</em> shells.
+ * <p>
+ * Instances are always displayed in one of the maximized, 
+ * minimized or normal states:
+ * <ul>
+ * <li>
+ * When an instance is marked as <em>maximized</em>, the
+ * window manager will typically resize it to fill the
+ * entire visible area of the display, and the instance
+ * is usually put in a state where it can not be resized 
+ * (even if it has style <code>RESIZE</code>) until it is
+ * no longer maximized.
+ * </li><li>
+ * When an instance is in the <em>normal</em> state (neither
+ * maximized or minimized), its appearance is controlled by
+ * the style constants which were specified when it was created
+ * and the restrictions of the window manager (see below).
+ * </li><li>
+ * When an instance has been marked as <em>minimized</em>,
+ * its contents (client area) will usually not be visible,
+ * and depending on the window manager, it may be
+ * "iconified" (that is, replaced on the desktop by a small
+ * simplified representation of itself), relocated to a
+ * distinguished area of the screen, or hidden. Combinations
+ * of these changes are also possible.
+ * </li>
+ * </ul>
+ * </p><p>
+ * The <em>modality</em> of an instance may be specified using
+ * style bits. The modality style bits are used to determine
+ * whether input is blocked for other shells on the display.
+ * The <code>PRIMARY_MODAL</code> style allows an instance to block
+ * input to its parent. The <code>APPLICATION_MODAL</code> style
+ * allows an instance to block input to every other shell in the
+ * display. The <code>SYSTEM_MODAL</code> style allows an instance
+ * to block input to all shells, including shells belonging to
+ * different applications.
+ * </p><p>
+ * Note: The styles supported by this class are treated
+ * as <em>HINT</em>s, since the window manager for the
+ * desktop on which the instance is visible has ultimate
+ * control over the appearance and behavior of decorations
+ * and modality. For example, some window managers only
+ * support resizable windows and will always assume the
+ * RESIZE style, even if it is not set. In addition, if a
+ * modality style is not supported, it is "upgraded" to a
+ * more restrictive modality style that is supported. For
+ * example, if <code>PRIMARY_MODAL</code> is not supported,
+ * it would be upgraded to <code>APPLICATION_MODAL</code>.
+ * A modality style may also be "downgraded" to a less
+ * restrictive style. For example, most operating systems
+ * no longer support <code>SYSTEM_MODAL</code> because
+ * it can freeze up the desktop, so this is typically
+ * downgraded to <code>APPLICATION_MODAL</code>.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>BORDER, CLOSE, MIN, MAX, NO_TRIM, RESIZE, TITLE, ON_TOP, TOOL, SHEET</dd>
+ * <dd>APPLICATION_MODAL, MODELESS, PRIMARY_MODAL, SYSTEM_MODAL</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Activate, Close, Deactivate, Deiconify, Iconify</dd>
+ * </dl>
+ * Class <code>SWT</code> provides two "convenience constants"
+ * for the most commonly required style combinations:
+ * <dl>
+ * <dt><code>SHELL_TRIM</code></dt>
+ * <dd>
+ * the result of combining the constants which are required
+ * to produce a typical application top level shell: (that 
+ * is, <code>CLOSE | TITLE | MIN | MAX | RESIZE</code>)
+ * </dd>
+ * <dt><code>DIALOG_TRIM</code></dt>
+ * <dd>
+ * the result of combining the constants which are required
+ * to produce a typical application dialog shell: (that 
+ * is, <code>TITLE | CLOSE | BORDER</code>)
+ * </dd>
+ * </dl>
+ * </p>
+ * <p>
+ * Note: Only one of the styles APPLICATION_MODAL, MODELESS, 
+ * PRIMARY_MODAL and SYSTEM_MODAL may be specified.
+ * </p><p>
+ * IMPORTANT: This class is not intended to be subclassed.
+ * </p>
+ *
+ * @see Decorations
+ * @see SWT
+ * @see <a href="http://www.eclipse.org/swt/snippets/#shell">Shell snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+public class Shell extends Decorations {
+	Control lastActive;
+	boolean closing;
+	boolean moved, resized, opened, fullScreen, modified, center;
+	int oldX, oldY, oldWidth, oldHeight;
+	int oldWindowStyle, oldWindowState;
+	
+/**
+ * Constructs a new instance of this class. This is equivalent
+ * to calling <code>Shell((Display) null)</code>.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ */
+public Shell () {
+	this ((Display) null);
+}
+
+/**
+ * Constructs a new instance of this class given only the style
+ * value describing its behavior and appearance. This is equivalent
+ * to calling <code>Shell((Display) null, style)</code>.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param style the style of control to construct
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ * 
+ * @see SWT#BORDER
+ * @see SWT#CLOSE
+ * @see SWT#MIN
+ * @see SWT#MAX
+ * @see SWT#RESIZE
+ * @see SWT#TITLE
+ * @see SWT#TOOL
+ * @see SWT#NO_TRIM
+ * @see SWT#SHELL_TRIM
+ * @see SWT#DIALOG_TRIM
+ * @see SWT#ON_TOP
+ * @see SWT#MODELESS
+ * @see SWT#PRIMARY_MODAL
+ * @see SWT#APPLICATION_MODAL
+ * @see SWT#SYSTEM_MODAL
+ * @see SWT#SHEET
+ */
+public Shell (int style) {
+	this ((Display) null, style);
+}
+
+/**
+ * Constructs a new instance of this class given only the display
+ * to create it on. It is created with style <code>SWT.SHELL_TRIM</code>.
+ * <p>
+ * Note: Currently, null can be passed in for the display argument.
+ * This has the effect of creating the shell on the currently active
+ * display if there is one. If there is no current display, the 
+ * shell is created on a "default" display. <b>Passing in null as
+ * the display argument is not considered to be good coding style,
+ * and may not be supported in a future release of SWT.</b>
+ * </p>
+ *
+ * @param display the display to create the shell on
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ */
+public Shell (Display display) {
+	this (display, SWT.SHELL_TRIM);
+}
+
+/**
+ * Constructs a new instance of this class given the display
+ * to create it on and a style value describing its behavior
+ * and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p><p>
+ * Note: Currently, null can be passed in for the display argument.
+ * This has the effect of creating the shell on the currently active
+ * display if there is one. If there is no current display, the 
+ * shell is created on a "default" display. <b>Passing in null as
+ * the display argument is not considered to be good coding style,
+ * and may not be supported in a future release of SWT.</b>
+ * </p>
+ *
+ * @param display the display to create the shell on
+ * @param style the style of control to construct
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ * 
+ * @see SWT#BORDER
+ * @see SWT#CLOSE
+ * @see SWT#MIN
+ * @see SWT#MAX
+ * @see SWT#RESIZE
+ * @see SWT#TITLE
+ * @see SWT#TOOL
+ * @see SWT#NO_TRIM
+ * @see SWT#SHELL_TRIM
+ * @see SWT#DIALOG_TRIM
+ * @see SWT#ON_TOP
+ * @see SWT#MODELESS
+ * @see SWT#PRIMARY_MODAL
+ * @see SWT#APPLICATION_MODAL
+ * @see SWT#SYSTEM_MODAL
+ * @see SWT#SHEET
+ */
+public Shell (Display display, int style) {
+	this (display, null, style, 0, false);
+}
+
+Shell (Display display, Shell parent, int style, int handle, boolean embedded) {
+	super ();
+	checkSubclass ();
+	if (display == null) display = Display.getCurrent ();
+	if (display == null) display = Display.getDefault ();
+	if (!display.isValidThread ()) {
+		error (SWT.ERROR_THREAD_INVALID_ACCESS);
+	}
+	if (parent != null && parent.isDisposed ()) {
+		error (SWT.ERROR_INVALID_ARGUMENT);	
+	}
+	this.center = parent != null && (style & SWT.SHEET) != 0;
+	this.style = checkStyle (parent, style);
+	this.parent = parent;
+	this.display = display;
+	if (handle != 0) {
+		if (embedded) {
+			this.handle = handle;
+		} else {
+			shellHandle = handle;
+		}
+	}
+	createWidget ();
+}
+
+/**
+ * Constructs a new instance of this class given only its
+ * parent. It is created with style <code>SWT.DIALOG_TRIM</code>.
+ * <p>
+ * Note: Currently, null can be passed in for the parent.
+ * This has the effect of creating the shell on the currently active
+ * display if there is one. If there is no current display, the 
+ * shell is created on a "default" display. <b>Passing in null as
+ * the parent is not considered to be good coding style,
+ * and may not be supported in a future release of SWT.</b>
+ * </p>
+ *
+ * @param parent a shell which will be the parent of the new instance
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parent is disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ */
+public Shell (Shell parent) {
+	this (parent, SWT.DIALOG_TRIM);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p><p>
+ * Note: Currently, null can be passed in for the parent.
+ * This has the effect of creating the shell on the currently active
+ * display if there is one. If there is no current display, the 
+ * shell is created on a "default" display. <b>Passing in null as
+ * the parent is not considered to be good coding style,
+ * and may not be supported in a future release of SWT.</b>
+ * </p>
+ *
+ * @param parent a shell which will be the parent of the new instance
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parent is disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ * 
+ * @see SWT#BORDER
+ * @see SWT#CLOSE
+ * @see SWT#MIN
+ * @see SWT#MAX
+ * @see SWT#RESIZE
+ * @see SWT#TITLE
+ * @see SWT#NO_TRIM
+ * @see SWT#SHELL_TRIM
+ * @see SWT#DIALOG_TRIM
+ * @see SWT#ON_TOP
+ * @see SWT#TOOL
+ * @see SWT#MODELESS
+ * @see SWT#PRIMARY_MODAL
+ * @see SWT#APPLICATION_MODAL
+ * @see SWT#SYSTEM_MODAL
+ * @see SWT#SHEET
+ */
+public Shell (Shell parent, int style) {
+	this (parent != null ? parent.display : null, parent, style, 0, false);
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new shell.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Shell</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param display the display for the shell
+ * @param handle the handle for the shell
+ * @return a new shell object containing the specified display and handle
+ */
+public static Shell wpf_new (Display display, int handle) {
+	return new Shell (display, null, SWT.NO_TRIM, handle, true);
+}
+
+/**	 
+ * Invokes platform specific functionality to allocate a new shell
+ * that is not embedded.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the public
+ * API for <code>Shell</code>. It is marked public only so that it
+ * can be shared within the packages provided by SWT. It is not
+ * available on all platforms, and should never be called from
+ * application code.
+ * </p>
+ *
+ * @param display the display for the shell
+ * @param handle the handle for the shell
+ * @return a new shell object containing the specified display and handle
+ * 
+ * @since 3.3
+ */
+public static Shell internal_new (Display display, int handle) {
+	handle = OS.GCHandle_ToHandle (handle);
+	return new Shell (display, null, SWT.NO_TRIM, handle, false);
+}
+
+static int checkStyle (Shell parent, int style) {
+	style = Decorations.checkStyle (style);
+	style &= ~SWT.TRANSPARENT;
+	int mask = SWT.SYSTEM_MODAL | SWT.APPLICATION_MODAL | SWT.PRIMARY_MODAL;
+	if ((style & SWT.SHEET) != 0) {
+		style &= ~SWT.SHEET;
+		style |= parent == null ? SWT.SHELL_TRIM : SWT.DIALOG_TRIM;
+		if ((style & mask) == 0) {
+			style |= parent == null ? SWT.APPLICATION_MODAL : SWT.PRIMARY_MODAL;
+		}
+	}
+	int bits = style & ~mask;
+	if ((style & SWT.SYSTEM_MODAL) != 0) return bits | SWT.SYSTEM_MODAL;
+	if ((style & SWT.APPLICATION_MODAL) != 0) return bits | SWT.APPLICATION_MODAL;
+	if ((style & SWT.PRIMARY_MODAL) != 0) return bits | SWT.PRIMARY_MODAL;
+	return bits;
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when operations are performed on the receiver,
+ * by sending the listener one of the messages defined in the
+ * <code>ShellListener</code> interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ShellListener
+ * @see #removeShellListener
+ */
+public void addShellListener (ShellListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Close,typedListener);
+	addListener (SWT.Iconify,typedListener);
+	addListener (SWT.Deiconify,typedListener);
+	addListener (SWT.Activate, typedListener);
+	addListener (SWT.Deactivate, typedListener);
+}
+
+void addWidget () {
+	if ((style & SWT.ON_TOP) != 0) return;
+	if (parent != null) {
+		if ((parent.style & SWT.ON_TOP) != 0) return;
+		OS.Window_Owner (shellHandle, ((Shell)parent).shellHandle);
+	}
+}
+
+void bringToTop () {
+	if ((style & SWT.ON_TOP) != 0) return;
+	OS.Window_Activate (shellHandle);
+}
+
+void center () {
+	if (parent == null) return;
+	Rectangle rect = getBounds ();
+	Rectangle parentRect = display.map (parent, null, parent.getClientArea());
+	int x = Math.max (parentRect.x, parentRect.x + (parentRect.width - rect.width) / 2);
+	int y = Math.max (parentRect.y, parentRect.y + (parentRect.height - rect.height) / 2);
+	Rectangle monitorRect = parent.getMonitor ().getClientArea();
+	if (x + rect.width > monitorRect.x + monitorRect.width) {
+		x = Math.max (monitorRect.x, monitorRect.x + monitorRect.width - rect.width);
+	} else {
+		x = Math.max (x, monitorRect.x);
+	}
+	if (y + rect.height > monitorRect.y + monitorRect.height) {
+		y = Math.max (monitorRect.y, monitorRect.y + monitorRect.height - rect.height);
+	} else {
+		y = Math.max (y, monitorRect.y);
+	}
+	setLocation (x, y);
+}
+
+void checkOpened () {
+	if (!opened) resized = false;
+}
+
+/**
+ * Requests that the window manager close the receiver in
+ * the same way it would be closed when the user clicks on
+ * the "close box" or performs some other platform specific
+ * key or mouse combination that indicates the window
+ * should be removed.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SWT#Close
+ * @see #dispose
+ */
+public void close () {
+	checkWidget ();
+	closeWidget ();
+}
+
+void createHandle () {
+	if (shellHandle != 0) {
+		scrolledHandle = OS.ContentControl_Content (shellHandle);
+		if (scrolledHandle == 0) error (SWT.ERROR_NO_HANDLES);
+		int children = OS.Panel_Children (scrolledHandle);
+		handle = OS.UIElementCollection_default (children, 0);
+		if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+		OS.GCHandle_Free (children);
+		return;
+	}
+	state |= CANVAS;
+	if ((style & SWT.ON_TOP) != 0) {
+		shellHandle = OS.gcnew_Popup ();
+		if (shellHandle == 0) error (SWT.ERROR_NO_HANDLES);
+		if ((style & SWT.NO_TRIM) != 0) OS.Popup_AllowsTransparency (shellHandle, true);
+		OS.KeyboardNavigation_SetTabNavigation (shellHandle, OS.KeyboardNavigationMode_None);
+		boolean scrolled = (style & (SWT.H_SCROLL | SWT.V_SCROLL)) != 0;
+		createHandle (scrolled, true);
+		OS.Popup_Child (shellHandle, super.topHandle());
+		OS.Popup_IsOpen (shellHandle, true);
+		OS.Popup_IsOpen (shellHandle, false);
+		return;
+	}
+	shellHandle = OS.gcnew_Window();
+	if (shellHandle == 0) error(SWT.ERROR_NO_HANDLES);
+	if ((style & SWT.NO_TRIM) != 0) OS.Window_AllowsTransparency (shellHandle, true);
+
+	/*
+	* Feature in WPF.  ...
+	*/
+	OS.Window_ShowInTaskbar (shellHandle, false);
+	OS.Window_ResizeMode (shellHandle, OS.ResizeMode_NoResize);
+	OS.Window_WindowStyle (shellHandle, OS.WindowStyle_None);
+	OS.FrameworkElement_Width (shellHandle, 0);
+	OS.FrameworkElement_Height (shellHandle, 0);
+	OS.Window_Show (shellHandle);
+	OS.Window_Hide (shellHandle);
+	Rectangle bounds = getMonitor ().getBounds ();
+	OS.FrameworkElement_Width (shellHandle, bounds.width * 5 / 8);
+	OS.FrameworkElement_Height (shellHandle, bounds.height * 5 / 8);
+
+	int windowStyle = OS.WindowStyle_None, resizeMode = OS.ResizeMode_NoResize;
+	if ((style & SWT.NO_TRIM) == 0) {
+		if ((style & SWT.TOOL) != 0) {
+			windowStyle = OS.WindowStyle_ToolWindow;
+		} else if ((style & SWT.SHELL_TRIM) != 0) {
+			windowStyle = OS.WindowStyle_SingleBorderWindow;
+		}
+		if ((style & SWT.RESIZE) != 0) {
+			resizeMode |= OS.ResizeMode_CanResize;			
+		}
+	}
+	OS.Window_ShowInTaskbar (shellHandle, parent == null);
+	OS.Window_ResizeMode (shellHandle, resizeMode);
+	OS.Window_WindowStyle (shellHandle, windowStyle);
+	OS.KeyboardNavigation_SetTabNavigation (shellHandle, OS.KeyboardNavigationMode_None);
+	
+	boolean scrolled = (style & (SWT.H_SCROLL | SWT.V_SCROLL)) != 0;
+	createHandle (scrolled, true);
+	OS.ContentControl_Content (shellHandle, super.topHandle());
+}
+
+void createWidget() {
+	super.createWidget ();
+	display.addShell (this);
+}
+
+public Rectangle computeTrim (int x, int y, int width, int height) {
+	checkWidget ();
+	if ((style & SWT.ON_TOP) != 0) return new Rectangle (x, y, width, height);
+	updateLayout (shellHandle);
+	int clientX = (int) OS.Window_Left (shellHandle);
+	int clientY = (int) OS.Window_Top (shellHandle);
+	int w = (int) OS.FrameworkElement_ActualWidth (shellHandle);
+	int h = (int) OS.FrameworkElement_ActualHeight (shellHandle);
+	int clientWidth = (int) OS.FrameworkElement_ActualWidth (handle);
+	int clientHeight = (int) OS.FrameworkElement_ActualHeight (handle);
+	int point = OS.gcnew_Point (clientX, clientY);
+	int result = OS.Visual_PointFromScreen (shellHandle, point);
+	OS.GCHandle_Free (point);
+	clientX = -(int) OS.Point_X (result);
+	clientY = -(int) OS.Point_Y (result);
+	OS.GCHandle_Free (result);
+	x -= clientX;
+	y -= clientY;
+	width += (w - clientWidth);
+	height += (h - clientHeight);
+	return new Rectangle (x, y, width, height);
+}
+
+void deregister () {
+	super.deregister ();
+	display.removeWidget (shellHandle);
+}
+
+
+void destroyWidget () {
+	if (shellHandle != 0 && !closing) {
+		if ((style & SWT.ON_TOP) != 0) {
+			OS.Popup_IsOpen (shellHandle, false);
+		} else {
+			OS.Window_Close (shellHandle);
+		}
+	}
+	releaseHandle ();
+}
+
+public void dispose () {
+	/*
+	* This code is intentionally commented.  On some
+	* platforms, the owner window is repainted right
+	* away when a dialog window exits.  This behavior
+	* is currently unspecified.
+	*/
+//	/*
+//	* Note:  It is valid to attempt to dispose a widget
+//	* more than once.  If this happens, fail silently.
+//	*/
+//	if (!isValidWidget ()) return;
+//	if (!isValidThread ()) error (SWT.ERROR_THREAD_INVALID_ACCESS);
+//	Display oldDisplay = display;
+	super.dispose ();
+	// widget is disposed at this point
+//	if (oldDisplay != null) oldDisplay.update ();
+}
+
+Control findBackgroundControl () {
+	return background != -1 || backgroundImage != null ? this : null;
+}
+
+Control findThemeControl () {
+	return null;
+}
+
+/**
+ * If the receiver is visible, moves it to the top of the 
+ * drawing order for the display on which it was created 
+ * (so that all other shells on that display, which are not 
+ * the receiver's children will be drawn behind it) and forces 
+ * the window manager to make the shell active.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 2.0
+ * @see Control#moveAbove
+ * @see Control#setFocus
+ * @see Control#setVisible
+ * @see Display#getActiveShell
+ * @see Decorations#setDefaultButton(Button)
+ * @see Shell#open
+ * @see Shell#setActive
+ */
+public void forceActive () {
+	checkWidget ();
+	if(!isVisible()) return;
+	if ((style & SWT.ON_TOP) != 0) return;
+//	OS.SetForegroundWindow (handle);
+	OS.Window_Activate (shellHandle);
+}
+
+/**
+ * Returns the receiver's alpha value. The alpha value
+ * is between 0 (transparent) and 255 (opaque).
+ *
+ * @return the alpha value
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public int getAlpha () {
+	checkWidget ();
+	return 255;
+}
+
+public Rectangle getBounds () {
+	checkWidget ();
+	int x, y;
+	if ((style & SWT.ON_TOP) != 0) {
+		x = (int) OS.Popup_HorizontalOffset (shellHandle);
+		y = (int) OS.Popup_VerticalOffset (shellHandle);
+	} else {
+		x = (int) OS.Window_Left (shellHandle);
+		y = (int) OS.Window_Top (shellHandle);
+	}
+	int renderSize = OS.UIElement_RenderSize (shellHandle);
+	int width = (int) OS.Size_Width (renderSize);
+	int height = (int) OS.Size_Height (renderSize);
+	OS.GCHandle_Free (renderSize);
+	return new Rectangle (x, y, width, height);
+}
+
+/**
+ * Returns <code>true</code> if the receiver is currently
+ * in fullscreen state, and false otherwise. 
+ * <p>
+ *
+ * @return the fullscreen state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.4
+ */
+public boolean getFullScreen() {
+	checkWidget ();
+	return fullScreen; 
+}
+
+/**
+ * Returns the receiver's input method editor mode. This
+ * will be the result of bitwise OR'ing together one or
+ * more of the following constants defined in class
+ * <code>SWT</code>:
+ * <code>NONE</code>, <code>ROMAN</code>, <code>DBCS</code>, 
+ * <code>PHONETIC</code>, <code>NATIVE</code>, <code>ALPHA</code>.
+ *
+ * @return the IME mode
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SWT
+ */
+public int getImeInputMode () {
+	checkWidget ();
+	//TODO
+	return SWT.ROMAN;
+}
+
+public Point getLocation () {
+	checkWidget ();
+	int x, y;
+	if ((style & SWT.ON_TOP) != 0) {
+		x = (int) OS.Popup_HorizontalOffset (shellHandle);
+		y = (int) OS.Popup_VerticalOffset (shellHandle);
+	} else {
+		x = (int) OS.Window_Left (shellHandle);
+		y = (int) OS.Window_Top (shellHandle);
+	}
+	return new Point (x, y);
+}
+
+public boolean getMaximized () {
+	checkWidget ();
+	return !fullScreen && super.getMaximized ();
+}
+
+/**
+ * Returns a point describing the minimum receiver's size. The
+ * x coordinate of the result is the minimum width of the receiver.
+ * The y coordinate of the result is the minimum height of the
+ * receiver.
+ *
+ * @return the receiver's size
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public Point getMinimumSize () {
+	checkWidget ();
+//	int width = Math.max (0, minWidth);
+//	int trim = SWT.TITLE | SWT.CLOSE | SWT.MIN | SWT.MAX;
+//	if ((style & SWT.NO_TRIM) == 0 && (style & trim) != 0) {
+//		width = Math.max (width, OS.GetSystemMetrics (OS.SM_CXMINTRACK));
+//	}
+//	int height = Math.max (0, minHeight);
+//	if ((style & SWT.NO_TRIM) == 0 && (style & trim) != 0) {
+//		if ((style & SWT.RESIZE) != 0) {
+//			height = Math.max (height, OS.GetSystemMetrics (OS.SM_CYMINTRACK));
+//		} else {
+//			RECT rect = new RECT ();
+//			int bits1 = OS.GetWindowLong (handle, OS.GWL_STYLE);
+//			int bits2 = OS.GetWindowLong (handle, OS.GWL_EXSTYLE);
+//			OS.AdjustWindowRectEx (rect, bits1, false, bits2);
+//			height = Math.max (height, rect.bottom - rect.top);
+//		}
+//	}
+	int width = (int) OS.FrameworkElement_MinWidth (shellHandle);
+	int height = (int) OS.FrameworkElement_MinHeight (shellHandle);
+	return new Point (width,  height);
+}
+
+/**
+ * Gets the receiver's modified state.
+ *
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.5
+ */
+public boolean getModified () {
+	checkWidget ();
+	return modified;
+}
+
+/** 
+ * Returns the region that defines the shape of the shell,
+ * or null if the shell has the default shape.
+ *
+ * @return the region that defines the shape of the shell (or null)
+ *	
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.0
+ *
+ */
+public Region getRegion () {
+	/* This method is needed for the @since 3.0 Javadoc tag*/
+	checkWidget ();
+	return region;
+}
+
+public Shell getShell () {
+	checkWidget ();
+	return this;
+}
+
+public boolean getVisible () {
+	checkWidget ();
+	if ((style & SWT.ON_TOP) != 0)return OS.Popup_IsOpen (shellHandle);
+	return super.getVisible ();
+}
+
+/**
+ * Returns an array containing all shells which are 
+ * descendants of the receiver.
+ * <p>
+ * @return the dialog shells
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Shell [] getShells () {
+	checkWidget ();
+	int count = 0;
+	Shell [] shells = display.getShells ();
+	for (int i=0; i<shells.length; i++) {
+		Control shell = shells [i];
+		do {
+			shell = shell.parent;
+		} while (shell != null && shell != this);
+		if (shell == this) count++;
+	}
+	int index = 0;
+	Shell [] result = new Shell [count];
+	for (int i=0; i<shells.length; i++) {
+		Control shell = shells [i];
+		do {
+			shell = shell.parent;
+		} while (shell != null && shell != this);
+		if (shell == this) {
+			result [index++] = shells [i];
+		}
+	}
+	return result;
+}
+
+Composite findDeferredControl () {
+	return layoutCount > 0 ? this : null;
+}
+
+public boolean isEnabled () {
+	checkWidget ();
+	return getEnabled ();
+}
+
+void hookEvents () {
+	super.hookEvents ();
+	int handler = OS.gcnew_SizeChangedEventHandler (jniRef, "HandleSizeChanged");
+	OS.FrameworkElement_SizeChanged (shellHandle, handler);
+	OS.GCHandle_Free (handler);
+	if ((style & SWT.ON_TOP) != 0) {
+		handler = OS.gcnew_EventHandler (jniRef, "HandleClosed");
+		OS.Popup_Closed (shellHandle, handler);
+		OS.GCHandle_Free (handler);
+		handler = OS.gcnew_KeyboardFocusChangedEventHandler (jniRef, "HandlePreviewGotKeyboardFocusActivate");
+		OS.UIElement_PreviewGotKeyboardFocus (shellHandle, handler);
+		OS.GCHandle_Free (handler);
+		handler = OS.gcnew_KeyboardFocusChangedEventHandler (jniRef, "HandleLostKeyboardFocusDeactivate");
+		OS.UIElement_LostKeyboardFocus (shellHandle, handler);
+		OS.GCHandle_Free (handler);
+	} else {
+		handler = OS.gcnew_CancelEventHandler (jniRef, "HandleClosing");
+		OS.Window_Closing (shellHandle, handler);
+		OS.GCHandle_Free (handler);
+		handler = OS.gcnew_EventHandler (jniRef, "HandleActivated");
+		OS.Window_Activated (shellHandle, handler);
+		OS.GCHandle_Free (handler);
+		handler = OS.gcnew_EventHandler (jniRef, "HandleDeactivated");
+		OS.Window_Deactivated (shellHandle, handler);
+		OS.GCHandle_Free (handler);
+		handler = OS.gcnew_EventHandler (jniRef, "HandleLocationChanged");
+		OS.Window_LocationChanged (shellHandle, handler);
+		OS.GCHandle_Free (handler);
+	}
+}
+
+void HandleActivated (int sender, int e) {
+	if (!checkEvent (e)) return;
+	sendEvent (SWT.Activate);
+	if (isDisposed ()) return;
+	restoreFocus ();
+}
+
+void HandleClosed (int sender, int e) {
+	if (!checkEvent (e)) return;
+	closing = true;
+	sendEvent (SWT.Close);
+	closing = false;
+}
+
+void HandleClosing (int sender, int e) {
+	if (!checkEvent (e)) return;
+	closing = true;
+	boolean doit = false;
+	if (isEnabled ()) {
+		Event event = new Event ();
+		sendEvent (SWT.Close, event);
+		doit = event.doit || isDisposed ();
+	}
+	if (doit) {
+		/** 
+		* Bug in WPF. When a window has more than
+		* two child windows, and all the the child
+		* windows are closed, the parent window is not 
+		* brought to the front. The work around is to 
+		* null out the Owner property of the child window
+		* before disposing it.
+		*/
+		if (shellHandle != 0) OS.Window_Owner (shellHandle, 0);
+		if (!isDisposed ()) release (false);
+	} else {
+		OS.CancelEventArgs_Cancel (e, true);
+	}
+	closing = false;
+}
+
+void HandleDeactivated (int sender, int e) {
+	if (!checkEvent (e)) return;
+	sendEvent (SWT.Deactivate);
+	if (isDisposed ()) return;
+	saveFocus ();
+}
+
+void HandleLocationChanged (int sender, int e) {
+	if (!checkEvent (e)) return;
+	int x = (int) OS.Window_Left (shellHandle);
+	int y = (int) OS.Window_Top (shellHandle);
+	if (!moved || oldX != x || oldY != y) {
+		moved = true;
+		oldX = x;
+		oldY = y;
+		sendEvent (SWT.Move);
+	}
+}
+
+void HandleLostKeyboardFocusDeactivate (int sender, int e) {
+	if (isDisposed ()) return;
+	if (OS.UIElement_IsKeyboardFocusWithin (handle)) return;
+	sendEvent (SWT.Deactivate);
+}
+
+void HandleMouseLeave (int sender, int e) {
+	super.HandleMouseLeave (sender, e);
+	if (!checkEvent (e)) return;
+	display.mouseControl = null;
+}
+
+void HandlePreviewGotKeyboardFocusActivate (int sender, int e) {
+	if (isDisposed ()) return;
+	if (!OS.UIElement_IsKeyboardFocusWithin (handle)) return;
+	sendEvent (SWT.Activate);
+}
+
+void HandleSizeChanged (int sender, int e) {
+	if (!checkEvent (e)) return;
+	int width = (int) OS.FrameworkElement_ActualWidth (shellHandle);
+	int height = (int) OS.FrameworkElement_ActualHeight (shellHandle);
+	if (!resized || oldWidth != width || oldHeight != height) {
+		resized = true;
+		oldWidth = width;
+		oldHeight = height; 
+		sendEvent (SWT.Resize);
+		if (isDisposed ()) return;
+		if (layout != null) {
+			markLayout (false, false);
+			updateLayout (false, false);
+		}
+	}
+}
+
+/**
+ * Moves the receiver to the top of the drawing order for
+ * the display on which it was created (so that all other
+ * shells on that display, which are not the receiver's
+ * children will be drawn behind it), marks it visible,
+ * sets the focus and asks the window manager to make the
+ * shell active.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Control#moveAbove
+ * @see Control#setFocus
+ * @see Control#setVisible
+ * @see Display#getActiveShell
+ * @see Decorations#setDefaultButton(Button)
+ * @see Shell#setActive
+ * @see Shell#forceActive
+ */
+public void open () {
+	checkWidget ();
+	bringToTop ();
+	if (isDisposed ()) return;
+	setVisible (true);
+	if (isDisposed ()) return;
+	if (!restoreFocus () && !traverseGroup (true)) setFocus (); 
+}
+
+public boolean print (GC gc) {
+	checkWidget ();
+	if (gc == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (gc.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	return false;
+}
+
+void register () {
+	super.register ();
+	display.addWidget (shellHandle, this);
+}
+
+void releaseChildren (boolean destroy) {
+	Shell [] shells = getShells ();
+	for (int i=0; i<shells.length; i++) {
+		Shell shell = shells [i];
+		if (shell != null && !shell.isDisposed ()) {
+			shell.release ((style & SWT.ON_TOP) != 0);
+		}
+	}
+	super.releaseChildren (destroy);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (shellHandle != 0) OS.GCHandle_Free (shellHandle);
+	shellHandle = 0;
+}
+
+void releaseParent () {
+	/* Do nothing */
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	display.clearModal (this);
+	display.removeShell (this);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when operations are performed on the receiver.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ShellListener
+ * @see #addShellListener
+ */
+public void removeShellListener (ShellListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Close, listener);
+	eventTable.unhook (SWT.Iconify,listener);
+	eventTable.unhook (SWT.Deiconify,listener);
+	eventTable.unhook (SWT.Activate, listener);
+	eventTable.unhook (SWT.Deactivate, listener);
+}
+
+/**
+ * If the receiver is visible, moves it to the top of the 
+ * drawing order for the display on which it was created 
+ * (so that all other shells on that display, which are not 
+ * the receiver's children will be drawn behind it) and asks 
+ * the window manager to make the shell active 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 2.0
+ * @see Control#moveAbove
+ * @see Control#setFocus
+ * @see Control#setVisible
+ * @see Display#getActiveShell
+ * @see Decorations#setDefaultButton(Button)
+ * @see Shell#open
+ * @see Shell#setActive
+ */
+public void setActive () {
+	checkWidget ();
+	if(!isVisible()) return;
+	bringToTop ();
+	// widget could be disposed at this point
+}
+
+void setActiveControl (Control control) {
+	if (control != null && control.isDisposed ()) control = null;
+	if (lastActive != null && lastActive.isDisposed ()) lastActive = null;
+	if (lastActive == control) return;
+	
+	/*
+	* Compute the list of controls to be activated and
+	* deactivated by finding the first common parent
+	* control.
+	*/
+	Control [] activate = (control == null) ? new Control [0] : control.getPath ();
+	Control [] deactivate = (lastActive == null) ? new Control [0] : lastActive.getPath ();
+	lastActive = control;
+	int index = 0, length = Math.min (activate.length, deactivate.length);
+	while (index < length) {
+		if (activate [index] != deactivate [index]) break;
+		index++;
+	}
+	
+	/*
+	* It is possible (but unlikely), that application
+	* code could have destroyed some of the widgets. If
+	* this happens, keep processing those widgets that
+	* are not disposed.
+	*/
+	for (int i=deactivate.length-1; i>=index; --i) {
+		if (!deactivate [i].isDisposed ()) {
+			deactivate [i].sendEvent (SWT.Deactivate);
+		}
+	}
+	for (int i=activate.length-1; i>=index; --i) {
+		if (!activate [i].isDisposed ()) {
+			activate [i].sendEvent (SWT.Activate);
+		}
+	}
+}
+
+/**
+ * Sets the receiver's alpha value which must be
+ * between 0 (transparent) and 255 (opaque).
+ * <p>
+ * This operation requires the operating system's advanced
+ * widgets subsystem which may not be available on some
+ * platforms.
+ * </p>
+ * @param alpha the alpha value
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public void setAlpha (int alpha) {
+	checkWidget ();
+	/* Not implemented */
+}
+
+int setBounds (int x, int y, int width, int height, int flags) {
+	if (fullScreen) setFullScreen (false);
+	int result = 0;
+	if ((flags & MOVED) != 0) {
+		int currentX, currentY;
+		if ((style & SWT.ON_TOP) != 0) {
+			currentX = (int) OS.Popup_HorizontalOffset (shellHandle);
+			currentY = (int) OS.Popup_VerticalOffset (shellHandle);
+		} else {
+			currentX = (int) OS.Window_Left (shellHandle);
+			currentY = (int) OS.Window_Top (shellHandle);
+		}
+		if (currentX != x || currentY != y) {
+			moved = true;
+			oldX = x;
+			oldY = currentY;
+			if ((style & SWT.ON_TOP) != 0) {
+				OS.Popup_HorizontalOffset (shellHandle, x);
+				oldY = y;
+				OS.Popup_VerticalOffset (shellHandle, y);
+			} else {
+				OS.Window_Left (shellHandle, x);
+				oldY = y;
+				OS.Window_Top (shellHandle, y);
+			}
+			sendEvent (SWT.Move);
+			if (isDisposed ()) return 0;
+			result |= MOVED;
+		}
+	}
+	if ((flags & RESIZED) != 0) {
+		int currentWidth = (int) OS.FrameworkElement_ActualWidth (shellHandle);
+		int currentHeight = (int) OS.FrameworkElement_ActualHeight (shellHandle);
+		if (currentWidth != width || currentHeight != height) {
+			resized = true;
+			oldWidth = width;
+			oldHeight = currentHeight;
+			OS.FrameworkElement_Width (shellHandle, width);
+			oldHeight = height;
+			OS.FrameworkElement_Height (shellHandle, height);
+			sendEvent (SWT.Resize);
+			if (isDisposed ()) return 0;
+			result |= RESIZED;
+			if (layout != null) {
+				markLayout (false, false);
+				updateLayout (false, false);
+			}
+		}
+	}
+	return result;
+}
+
+void setClipping () {
+	
+}
+
+public void setEnabled (boolean enabled) {
+	checkWidget ();
+	if (enabled == getEnabled ()) return;
+	super.setEnabled (enabled);
+	if ((style & SWT.ON_TOP) != 0) return;
+	if (enabled && OS.Window_IsActive (shellHandle)) {
+		if (!restoreFocus ()) traverseGroup (true);
+	}
+}
+
+/**
+ * Sets the full screen state of the receiver.
+ * If the argument is <code>true</code> causes the receiver
+ * to switch to the full screen state, and if the argument is
+ * <code>false</code> and the receiver was previously switched
+ * into full screen state, causes the receiver to switch back
+ * to either the maximized or normal states.
+ * <p>
+ * Note: The result of intermixing calls to <code>setFullScreen(true)</code>, 
+ * <code>setMaximized(true)</code> and <code>setMinimized(true)</code> will 
+ * vary by platform. Typically, the behavior will match the platform user's 
+ * expectations, but not always. This should be avoided if possible.
+ * </p>
+ * 
+ * @param fullScreen the new fullscreen state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.4
+ */
+public void setFullScreen (boolean fullScreen) {
+	checkWidget ();
+	if (this.fullScreen == fullScreen) return;
+	if(fullScreen) {
+		oldWindowStyle = OS.Window_WindowStyle (shellHandle);
+		oldWindowState = OS.Window_WindowState (shellHandle);
+		boolean visible = getVisible ();
+		OS.Window_Hide (shellHandle);
+		OS.Window_WindowStyle (shellHandle, OS.WindowStyle_None);
+		if (visible) OS.Window_Show (shellHandle);
+		OS.Window_WindowState (shellHandle, OS.WindowState_Maximized);
+	} else {
+		OS.Window_WindowStyle (shellHandle, oldWindowStyle);
+		OS.Window_WindowState (shellHandle, oldWindowState);
+		oldWindowState = 0;
+		oldWindowStyle = 0;
+	}
+	this.fullScreen = fullScreen;
+}
+
+/**
+ * Sets the input method editor mode to the argument which 
+ * should be the result of bitwise OR'ing together one or more
+ * of the following constants defined in class <code>SWT</code>:
+ * <code>NONE</code>, <code>ROMAN</code>, <code>DBCS</code>, 
+ * <code>PHONETIC</code>, <code>NATIVE</code>, <code>ALPHA</code>.
+ *
+ * @param mode the new IME mode
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SWT
+ */
+public void setImeInputMode (int mode) {
+	checkWidget ();
+	//TODO
+}
+
+/**
+ * Sets the receiver's minimum size to the size specified by the arguments.
+ * If the new minimum size is larger than the current size of the receiver,
+ * the receiver is resized to the new minimum size.
+ *
+ * @param width the new minimum width for the receiver
+ * @param height the new minimum height for the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void setMinimumSize (int width, int height) {
+	checkWidget ();
+	int widthLimit = 0, heightLimit = 0;
+	int trim = SWT.TITLE | SWT.CLOSE | SWT.MIN | SWT.MAX;
+	if ((style & SWT.NO_TRIM) == 0 && (style & trim) != 0) {
+//		widthLimit = OS.GetSystemMetrics (OS.SM_CXMINTRACK);
+//		if ((style & SWT.RESIZE) != 0) {
+//			heightLimit = OS.GetSystemMetrics (OS.SM_CYMINTRACK);
+//		} else {
+//			RECT rect = new RECT ();
+//			int bits1 = OS.GetWindowLong (handle, OS.GWL_STYLE);
+//			int bits2 = OS.GetWindowLong (handle, OS.GWL_EXSTYLE);
+//			OS.AdjustWindowRectEx (rect, bits1, false, bits2);
+//			heightLimit = rect.bottom - rect.top;
+//		}
+	} 
+	int minWidth = Math.max (widthLimit, width);
+	int minHeight = Math.max (heightLimit, height);
+	OS.FrameworkElement_MinWidth(shellHandle, minWidth);
+	OS.FrameworkElement_MinHeight(shellHandle, minHeight);
+}
+
+/**
+ * Sets the receiver's minimum size to the size specified by the argument.
+ * If the new minimum size is larger than the current size of the receiver,
+ * the receiver is resized to the new minimum size.
+ *
+ * @param size the new minimum size for the receiver
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void setMinimumSize (Point size) {
+	checkWidget ();
+	if (size == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setMinimumSize (size.x, size.y);
+}
+
+/**
+ * Sets the receiver's modified state as specified by the argument.
+ *
+ * @param modified the new modified state for the receiver
+ *
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.5
+ */
+public void setModified (boolean modified) {
+	checkWidget ();
+	this.modified = modified;
+}
+
+void setParent () {
+	/* Do nothing.  Not necessary for Shells */
+}
+
+/**
+ * Sets the shape of the shell to the region specified
+ * by the argument.  When the argument is null, the
+ * default shape of the shell is restored.  The shell
+ * must be created with the style SWT.NO_TRIM in order
+ * to specify a region.
+ *
+ * @param region the region that defines the shape of the shell (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the region has been disposed</li>
+ * </ul>  
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.0
+ *
+ */
+public void setRegion (Region region) {
+	checkWidget ();
+	if ((style & SWT.NO_TRIM) == 0) return;
+	super.setRegion (region);
+}
+
+public void setVisible (boolean visible) {
+	checkWidget ();
+	if (getVisible () == visible) return;
+	
+	int mask = SWT.PRIMARY_MODAL | SWT.APPLICATION_MODAL | SWT.SYSTEM_MODAL;
+	if ((style & mask) != 0) {
+		if (visible) {
+			display.setModalShell (this);
+//				Control control = display._getFocusControl ();
+//				if (control != null && !control.isActive ()) {
+//					bringToTop ();
+//					if (isDisposed ()) return;
+//				}
+//				int hwndShell = OS.GetActiveWindow ();
+//				if (hwndShell == 0) {
+//					if (parent != null) hwndShell = parent.handle;
+//				}
+//				if (hwndShell != 0) {
+//					OS.SendMessage (hwndShell, OS.WM_CANCELMODE, 0, 0);
+//				}
+//				OS.ReleaseCapture ();
+		} else {
+			display.clearModal (this);
+		}
+	} else {
+		updateModal ();
+	}
+
+	if (visible) {
+		if (center && !moved) {
+			center ();
+			if (isDisposed ()) return;
+		}
+		if ((style & SWT.ON_TOP) != 0) {
+			OS.Popup_IsOpen (shellHandle, visible);
+		} else {
+			OS.Window_Show (shellHandle);
+		}
+		
+		opened = true;
+		if (!moved) {
+			moved = true;
+			Point location = getLocation();
+			oldX = location.x;
+			oldY = location.y;
+			sendEvent (SWT.Move);
+			if (isDisposed ()) return;
+		}
+		if (!resized) {
+			resized = true;
+			Point size = getSize ();
+			oldWidth = size.x;// - trimWidth ();
+			oldHeight = size.y;// - trimHeight ();
+			sendEvent (SWT.Resize);
+			if (isDisposed ()) return;
+			if (layout != null) {
+				markLayout (false, false);
+				updateLayout (false, false);
+			}
+		}
+		
+	} else {
+		if (!closing) {
+			if ((style & SWT.ON_TOP) != 0) {
+				OS.Popup_IsOpen (shellHandle, visible);
+			} else {				
+				OS.Window_Hide (shellHandle);
+			}
+		}
+	}
+}
+
+int topHandle () {
+	return shellHandle;
+}
+
+//boolean translateAccelerator (MSG msg) {
+//	if (!isEnabled () || !isActive ()) return false;
+//	if (menuBar != null && !menuBar.isEnabled ()) return false;
+//	return translateMDIAccelerator (msg) || translateMenuAccelerator (msg);
+//}
+
+boolean traverseEscape () {
+	if (parent == null) return false;
+	if (!isVisible () || !isEnabled ()) return false;
+	close ();
+	return true;
+}
+
+void updateModal () {
+	int source = OS.PresentationSource_FromVisual (handle);
+	if (source != 0) {
+		int hwnd = OS.HwndSource_Handle (source);
+		Win32.EnableWindow (OS.IntPtr_ToInt32 (hwnd), isActive ());
+		OS.GCHandle_Free (hwnd);
+		OS.GCHandle_Free (source);
+	}
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Slider.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Slider.java
new file mode 100644
index 0000000..c806643
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Slider.java
@@ -0,0 +1,492 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * Instances of this class are selectable user interface
+ * objects that represent a range of positive, numeric values. 
+ * <p>
+ * At any given moment, a given slider will have a 
+ * single 'selection' that is considered to be its
+ * value, which is constrained to be within the range of
+ * values the slider represents (that is, between its
+ * <em>minimum</em> and <em>maximum</em> values).
+ * </p><p>
+ * Typically, sliders will be made up of five areas:
+ * <ol>
+ * <li>an arrow button for decrementing the value</li>
+ * <li>a page decrement area for decrementing the value by a larger amount</li>
+ * <li>a <em>thumb</em> for modifying the value by mouse dragging</li>
+ * <li>a page increment area for incrementing the value by a larger amount</li>
+ * <li>an arrow button for incrementing the value</li>
+ * </ol>
+ * Based on their style, sliders are either <code>HORIZONTAL</code>
+ * (which have a left facing button for decrementing the value and a
+ * right facing button for incrementing it) or <code>VERTICAL</code>
+ * (which have an upward facing button for decrementing the value
+ * and a downward facing buttons for incrementing it).
+ * </p><p>
+ * On some platforms, the size of the slider's thumb can be
+ * varied relative to the magnitude of the range of values it
+ * represents (that is, relative to the difference between its
+ * maximum and minimum values). Typically, this is used to
+ * indicate some proportional value such as the ratio of the
+ * visible area of a document to the total amount of space that
+ * it would take to display it. SWT supports setting the thumb
+ * size even if the underlying platform does not, but in this
+ * case the appearance of the slider will not change.
+ * </p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>HORIZONTAL, VERTICAL</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see ScrollBar
+ * @see <a href="http://www.eclipse.org/swt/snippets/#slider">Slider snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Slider extends Control {
+	boolean ignoreFocus;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#HORIZONTAL
+ * @see SWT#VERTICAL
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Slider (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the user changes the receiver's value, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * When <code>widgetSelected</code> is called, the event object detail field contains one of the following values:
+ * <code>SWT.NONE</code> - for the end of a drag.
+ * <code>SWT.DRAG</code>.
+ * <code>SWT.HOME</code>.
+ * <code>SWT.END</code>.
+ * <code>SWT.ARROW_DOWN</code>.
+ * <code>SWT.ARROW_UP</code>.
+ * <code>SWT.PAGE_DOWN</code>.
+ * <code>SWT.PAGE_UP</code>.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the user changes the receiver's value
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener(listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+static int checkStyle (int style) {
+	return checkBits (style, SWT.HORIZONTAL, SWT.VERTICAL, 0, 0, 0, 0);
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget ();
+	int border = getBorderWidth ();
+	int width = border * 2, height = border * 2;
+	if ((style & SWT.HORIZONTAL) != 0) {
+		width += OS.SystemParameters_HorizontalScrollBarButtonWidth () * 10;
+		height += OS.SystemParameters_HorizontalScrollBarHeight ();
+	} else {
+		width += OS.SystemParameters_VerticalScrollBarWidth ();
+		height += OS.SystemParameters_VerticalScrollBarButtonHeight () * 10;
+	}
+	if (wHint != SWT.DEFAULT) width = wHint + (border * 2);
+	if (hHint != SWT.DEFAULT) height = hHint + (border * 2);
+	return new Point (width, height);
+}
+
+void createHandle () {
+	handle = OS.gcnew_ScrollBar ();
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	if ((style & SWT.HORIZONTAL) != 0) OS.ScrollBar_Orientation (handle, OS.Orientation_Horizontal);
+	OS.RangeBase_Maximum (handle, 100);
+	OS.RangeBase_LargeChange (handle, 10);
+	OS.RangeBase_SmallChange (handle, 1);	
+}
+
+/**
+ * Returns the amount that the receiver's value will be
+ * modified by when the up/down (or right/left) arrows
+ * are pressed.
+ *
+ * @return the increment
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getIncrement () {
+	checkWidget ();
+	return (int) OS.RangeBase_SmallChange (handle);
+}
+
+/**
+ * Returns the maximum value which the receiver will allow.
+ *
+ * @return the maximum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMaximum () {
+	checkWidget ();
+	int maximum = (int) OS.RangeBase_Maximum (handle);
+	int viewSize = (int) OS.ScrollBar_ViewportSize (handle);
+    return maximum + viewSize;
+}
+
+/**
+ * Returns the minimum value which the receiver will allow.
+ *
+ * @return the minimum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMinimum () {
+	checkWidget ();
+	return (int) OS.RangeBase_Minimum (handle);
+}
+
+/**
+ * Returns the amount that the receiver's value will be
+ * modified by when the page increment/decrement areas
+ * are selected.
+ *
+ * @return the page increment
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getPageIncrement () {
+	checkWidget ();
+	return (int) OS.RangeBase_LargeChange (handle);
+}
+
+/**
+ * Returns the 'selection', which is the receiver's value.
+ *
+ * @return the selection
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelection () {
+	checkWidget ();
+	return (int) OS.RangeBase_Value (handle);
+}
+
+/**
+ * Returns the size of the receiver's thumb relative to the
+ * difference between its maximum and minimum values.
+ *
+ * @return the thumb value
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getThumb () {
+	checkWidget ();
+	return (int) OS.ScrollBar_ViewportSize (handle);
+}
+
+void HandleScroll (int sender, int e) {
+	if (!checkEvent (e)) return;
+	Event event = new Event ();
+	switch (OS.ScrollEventArgs_ScrollEventType (e)) {
+		case OS.ScrollEventType_EndScroll: 		return;
+		case OS.ScrollEventType_ThumbPosition: 	event.detail = SWT.NONE; break;
+		case OS.ScrollEventType_ThumbTrack:		event.detail = SWT.DRAG; break;
+		case OS.ScrollEventType_First:			event.detail = SWT.HOME; break;
+		case OS.ScrollEventType_Last:			event.detail = SWT.END; break;
+		case OS.ScrollEventType_LargeIncrement:	event.detail = SWT.PAGE_DOWN; break;
+		case OS.ScrollEventType_LargeDecrement: event.detail = SWT.PAGE_UP; break;
+		case OS.ScrollEventType_SmallIncrement: event.detail = SWT.ARROW_DOWN; break;
+		case OS.ScrollEventType_SmallDecrement: event.detail = SWT.ARROW_UP; break;
+	}
+	postEvent (SWT.Selection, event);
+}
+
+void hookEvents () {
+	super.hookEvents ();
+	int handler = OS.gcnew_ScrollEventHandler (jniRef, "HandleScroll");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.ScrollBar_Scroll (handle, handler);
+	OS.GCHandle_Free (handler);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the user changes the receiver's value.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+/**
+ * Sets the amount that the receiver's value will be
+ * modified by when the up/down (or right/left) arrows
+ * are pressed to the argument, which must be at least 
+ * one.
+ *
+ * @param value the new increment (must be greater than zero)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setIncrement (int value) {
+	checkWidget ();
+	if (value < 1) return;
+	OS.RangeBase_SmallChange (handle, value);
+}
+
+/**
+ * Sets the maximum. If this value is negative or less than or
+ * equal to the minimum, the value is ignored. If necessary, first
+ * the thumb and then the selection are adjusted to fit within the
+ * new range.
+ *
+ * @param value the new maximum, which must be greater than the current minimum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMaximum (int value) {
+	checkWidget ();
+	if (value < 0) return;
+	int minimum = (int) OS.RangeBase_Minimum (handle);
+	if (value <= minimum) return;
+	int viewSize = (int) OS.ScrollBar_ViewportSize (handle);
+	if (value - minimum < viewSize) {
+		viewSize = value - minimum;
+		OS.ScrollBar_ViewportSize (handle, viewSize);
+	}	
+	OS.RangeBase_Maximum (handle, value - viewSize);
+}
+
+/**
+ * Sets the minimum value. If this value is negative or greater
+ * than or equal to the maximum, the value is ignored. If necessary,
+ * first the thumb and then the selection are adjusted to fit within
+ * the new range.
+ *
+ * @param value the new minimum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMinimum (int value) {
+	checkWidget ();
+	if (value < 0) return;
+	int viewSize = (int) OS.ScrollBar_ViewportSize (handle);
+	int maximum = (int) OS.RangeBase_Maximum (handle) + viewSize;
+	if (value >= maximum) return;
+	if (maximum - value < viewSize) {
+		viewSize = maximum - value;
+		OS.RangeBase_Maximum (handle, maximum - viewSize);
+		OS.ScrollBar_ViewportSize (handle, viewSize);
+	}
+	OS.RangeBase_Minimum (handle, value);
+}
+
+/**
+ * Sets the amount that the receiver's value will be
+ * modified by when the page increment/decrement areas
+ * are selected to the argument, which must be at least
+ * one.
+ *
+ * @param value the page increment (must be greater than zero)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setPageIncrement (int value) {
+	checkWidget ();
+	if (value < 1) return;
+	OS.RangeBase_LargeChange (handle, value);
+}
+
+/**
+ * Sets the 'selection', which is the receiver's
+ * value, to the argument which must be greater than or equal
+ * to zero.
+ *
+ * @param value the new selection (must be zero or greater)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (int value) {
+	checkWidget ();
+	OS.RangeBase_Value (handle, value);
+}
+
+/**
+ * Sets the size of the receiver's thumb relative to the
+ * difference between its maximum and minimum values.  This new
+ * value will be ignored if it is less than one, and will be
+ * clamped if it exceeds the receiver's current range.
+ *
+ * @param value the new thumb value, which must be at least one and not
+ * larger than the size of the current range
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setThumb (int value) {
+	checkWidget ();
+	if (value < 1) return;
+	int minimum = (int) OS.RangeBase_Minimum (handle);
+	int viewSize = (int) OS.ScrollBar_ViewportSize (handle);
+	int maximum = (int) OS.RangeBase_Maximum (handle) + viewSize;
+	value = Math.min (value, maximum - minimum);
+	OS.RangeBase_Maximum (handle, maximum - value);
+    OS.ScrollBar_ViewportSize (handle, value);
+}
+
+/**
+ * Sets the receiver's selection, minimum value, maximum
+ * value, thumb, increment and page increment all at once.
+ * <p>
+ * Note: This is similar to setting the values individually
+ * using the appropriate methods, but may be implemented in a 
+ * more efficient fashion on some platforms.
+ * </p>
+ *
+ * @param selection the new selection value
+ * @param minimum the new minimum value
+ * @param maximum the new maximum value
+ * @param thumb the new thumb value
+ * @param increment the new increment value
+ * @param pageIncrement the new pageIncrement value
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setValues (int selection, int minimum, int maximum, int thumb, int increment, int pageIncrement) {
+	checkWidget();
+	if (minimum < 0) return;
+	if (maximum < 0) return;
+	if (thumb < 1) return;
+	if (increment < 1) return;
+	if (pageIncrement < 1) return;
+	thumb = Math.min (thumb, maximum - minimum);
+	OS.RangeBase_Minimum (handle, minimum);
+	OS.RangeBase_Maximum (handle, maximum - thumb);
+	OS.ScrollBar_ViewportSize (handle, thumb);
+	OS.RangeBase_Value (handle, selection);
+	OS.RangeBase_LargeChange (handle, pageIncrement);
+	OS.RangeBase_SmallChange (handle, increment);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Spinner.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Spinner.java
new file mode 100644
index 0000000..96a1f83
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Spinner.java
@@ -0,0 +1,991 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * Instances of this class are selectable user interface
+ * objects that allow the user to enter and modify numeric
+ * values.
+ * <p>
+ * Note that although this class is a subclass of <code>Composite</code>,
+ * it does not make sense to add children to it, or set a layout on it.
+ * </p><p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>READ_ONLY, WRAP</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection, Modify, Verify</dd>
+ * </dl>
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#spinner">Spinner snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.1
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Spinner extends Composite {
+	int textHandle, upHandle, downHandle;
+	int increment, pageIncrement, digits, max, min, value;
+	
+	/**
+	 * the operating system limit for the number of characters
+	 * that the text field in an instance of this class can hold
+	 * 
+	 * @since 3.4
+	 */
+	public static final int LIMIT;
+	
+	/*
+	 * These values can be different on different platforms.
+	 * Therefore they are not initialized in the declaration
+	 * to stop the compiler from inlining.
+	 */
+	static {
+		LIMIT = 0x7FFFFFFF;	
+	}
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#READ_ONLY
+ * @see SWT#WRAP
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Spinner (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+Control [] _getChildren () {
+	return new Control [0];
+}
+
+static int checkStyle (int style) {
+	/*
+	* Even though it is legal to create this widget
+	* with scroll bars, they serve no useful purpose
+	* because they do not automatically scroll the
+	* widget's client area.  The fix is to clear
+	* the SWT style.
+	*/
+	return style & ~(SWT.H_SCROLL | SWT.V_SCROLL);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+int backgroundHandle () {
+	return textHandle;
+}
+
+int backgroundProperty () {
+	return OS.Control_BackgroundProperty ();
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget ();
+	return super.computeSize (handle, wHint, hHint, changed);
+}
+
+int createArrow (int direction) { 
+	int geometry = OS.gcnew_StreamGeometry ();
+	int context = OS.StreamGeometry_Open (geometry);
+	int start = 0, point = 0, end = 0;
+	switch (direction) {
+		case SWT.DOWN:
+			start = OS.gcnew_Point (0, 0);
+			point = OS.gcnew_Point (3, 3);
+			end = OS.gcnew_Point (6, 0);
+			break;
+		case SWT.UP:
+			start = OS.gcnew_Point (0, 3);
+			point = OS.gcnew_Point (3, 0);
+			end = OS.gcnew_Point (6, 3);
+			break;
+	}
+	OS.StreamGeometryContext_BeginFigure (context, start, true, true);
+	OS.StreamGeometryContext_LineTo (context, point, true, true);
+	OS.StreamGeometryContext_LineTo (context, end, true, true);
+	OS.StreamGeometryContext_Close (context);
+	int path = OS.gcnew_Path ();
+	OS.Path_Data (path, geometry);
+	int padding = OS.gcnew_Thickness (3, 0, 3, 0);
+	OS.FrameworkElement_Margin (path, padding);
+	int brush = OS.Brushes_Black ();
+	OS.Path_Fill (path, brush);
+	OS.FrameworkElement_HorizontalAlignment (path, OS.HorizontalAlignment_Center);
+	OS.FrameworkElement_VerticalAlignment (path, OS.VerticalAlignment_Center);
+	OS.GCHandle_Free (padding);
+	OS.GCHandle_Free (start);
+	OS.GCHandle_Free (point);
+	OS.GCHandle_Free (end);
+	OS.GCHandle_Free (brush);
+	OS.GCHandle_Free (context);
+	OS.GCHandle_Free (geometry);
+	return path;
+}
+
+void createHandle () {
+	handle = OS.gcnew_Grid ();
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	int row0 = OS.gcnew_RowDefinition ();
+	int row1 = OS.gcnew_RowDefinition ();
+	int rows = OS.Grid_RowDefinitions (handle);
+	OS.RowDefinitionCollection_Add (rows, row0);
+	OS.RowDefinitionCollection_Add (rows, row1);
+	int col0 = OS.gcnew_ColumnDefinition ();
+	int col1 = OS.gcnew_ColumnDefinition ();
+	int columns = OS.Grid_ColumnDefinitions (handle);
+	OS.ColumnDefinitionCollection_Add (columns, col0);
+	OS.ColumnDefinitionCollection_Add (columns, col1);
+	int gridChildren = OS.Panel_Children (handle);
+	textHandle = OS.gcnew_TextBox ();
+	if (textHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.Grid_SetRowSpan (textHandle, 2);
+	OS.UIElementCollection_Add (gridChildren, textHandle);
+	if ((style & SWT.READ_ONLY) != 0) OS.TextBoxBase_IsReadOnly (textHandle, true);
+	upHandle = OS.gcnew_RepeatButton ();
+	if (upHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	int upArrow = createArrow (SWT.UP);
+	OS.ContentControl_Content (upHandle, upArrow);
+	OS.Grid_SetColumn (upHandle, 1);
+	OS.UIElementCollection_Add (gridChildren, upHandle);
+	downHandle = OS.gcnew_RepeatButton ();
+	if (downHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	int downArrow = createArrow (SWT.DOWN);
+	OS.ContentControl_Content (downHandle, downArrow);
+	OS.Grid_SetColumn (downHandle, 1);
+	OS.Grid_SetRow (downHandle, 1);
+	OS.UIElementCollection_Add (gridChildren, downHandle);
+	int colWidth0 = OS.gcnew_GridLength (10, OS.GridUnitType_Star);
+	OS.ColumnDefinition_Width(col0, colWidth0);
+	int colWidth1 = OS.gcnew_GridLength (1, OS.GridUnitType_Auto);
+	OS.ColumnDefinition_Width (col1, colWidth1);
+	OS.GCHandle_Free (colWidth0);
+	OS.GCHandle_Free (colWidth1);
+	OS.GCHandle_Free (upArrow);
+	OS.GCHandle_Free (downArrow);
+	OS.GCHandle_Free (row0);
+	OS.GCHandle_Free (row1);
+	OS.GCHandle_Free (rows);
+	OS.GCHandle_Free (col0);
+	OS.GCHandle_Free (col1);
+	OS.GCHandle_Free (columns);
+	OS.GCHandle_Free (gridChildren);
+}
+
+void createWidget () {
+	super.createWidget();
+	increment = 1;
+	pageIncrement = 10;
+	digits = 0;
+	max = 100;
+	value = 0;
+	int ptr = createDotNetString ("0", false);
+	OS.TextBox_Text (textHandle, ptr);
+	OS.GCHandle_Free (ptr);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the receiver's text is modified, by sending
+ * it one of the messages defined in the <code>ModifyListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ModifyListener
+ * @see #removeModifyListener
+ */
+public void addModifyListener (ModifyListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Modify, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is not called for texts.
+ * <code>widgetDefaultSelected</code> is typically called when ENTER is pressed in a single-line text.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the control is selected by the user
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the receiver's text is verified, by sending
+ * it one of the messages defined in the <code>VerifyListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see VerifyListener
+ * @see #removeVerifyListener
+ */
+void addVerifyListener (VerifyListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Verify, typedListener);
+}
+
+/**
+ * Copies the selected text.
+ * <p>
+ * The current selection is copied to the clipboard.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void copy () {
+	checkWidget ();
+	//TODO
+}
+
+/**
+ * Cuts the selected text.
+ * <p>
+ * The current selection is first copied to the
+ * clipboard and then deleted from the widget.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void cut () {
+	checkWidget ();
+	if ((style & SWT.READ_ONLY) != 0) return;
+	//TODO
+}
+
+/**
+ * Returns the number of decimal places used by the receiver.
+ *
+ * @return the digits
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getDigits () {
+	checkWidget ();
+	return digits;
+}
+
+String getDecimalSeparator () {
+	return ".";
+}
+
+/**
+ * Returns the amount that the receiver's value will be
+ * modified by when the up/down arrows are pressed.
+ *
+ * @return the increment
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getIncrement () {
+	checkWidget ();
+	return increment;
+}
+
+/**
+ * Returns the maximum value which the receiver will allow.
+ *
+ * @return the maximum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMaximum () {
+	checkWidget ();
+	return max;
+}
+
+/**
+ * Returns the minimum value which the receiver will allow.
+ *
+ * @return the minimum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getMinimum () {
+	checkWidget ();
+	return min;
+}
+
+/**
+ * Returns the amount that the receiver's position will be
+ * modified by when the page up/down keys are pressed.
+ *
+ * @return the page increment
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getPageIncrement () {
+	checkWidget ();
+	return pageIncrement;
+}
+
+/**
+ * Returns the <em>selection</em>, which is the receiver's position.
+ *
+ * @return the selection 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelection () {
+	checkWidget ();
+	return value;
+}
+
+int getSelectionText (boolean [] parseFail) {
+	int textPtr = OS.TextBox_Text (textHandle);
+	String string = createJavaString (textPtr);
+	OS.GCHandle_Free (textPtr);
+	try {
+		int value;
+		if (digits > 0) {
+			String decimalSeparator = getDecimalSeparator ();
+			int index = string.indexOf (decimalSeparator);
+			if (index != -1)  {
+				int startIndex = string.startsWith ("+") || string.startsWith ("-") ? 1 : 0;
+				String wholePart = startIndex != index ? string.substring (startIndex, index) : "0";
+				String decimalPart = string.substring (index + 1);
+				if (decimalPart.length () > digits) {
+					decimalPart = decimalPart.substring (0, digits);
+				} else {
+					int i = digits - decimalPart.length ();
+					for (int j = 0; j < i; j++) {
+						decimalPart = decimalPart + "0";
+					}
+				}
+				int wholeValue = Integer.parseInt (wholePart);
+				int decimalValue = Integer.parseInt (decimalPart);
+				for (int i = 0; i < digits; i++) wholeValue *= 10;
+				value = wholeValue + decimalValue;
+				if (string.startsWith ("-")) value = -value;
+			} else {
+				value = Integer.parseInt (string);
+				for (int i = 0; i < digits; i++) value *= 10;
+			}
+		} else {
+			value = Integer.parseInt (string);
+		}
+		if (min <= value && value <= max) return value;
+	} catch (NumberFormatException e) {
+	}
+	parseFail [0] = true;
+	return -1;
+}
+
+/**
+ * Returns a string containing a copy of the contents of the
+ * receiver's text field, or an empty string if there are no
+ * contents.
+ *
+ * @return the receiver's text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public String getText () {
+	checkWidget ();
+	int text = OS.TextBox_Text (textHandle);
+	String string = createJavaString (text);
+	OS.GCHandle_Free (text);
+	return string;
+}
+
+/**
+ * Returns the maximum number of characters that the receiver's
+ * text field is capable of holding. If this has not been changed
+ * by <code>setTextLimit()</code>, it will be the constant
+ * <code>Spinner.LIMIT</code>.
+ * 
+ * @return the text limit
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #LIMIT
+ * 
+ * @since 3.4
+ */
+public int getTextLimit () {
+	checkWidget ();
+	return OS.TextBox_MaxLength (textHandle);
+}
+
+void HandleDownClick (int sender, int e) {
+	if (!checkEvent (e)) return;
+	updateSelection (-increment);
+}
+
+void HandleLostKeyboardFocus (int sender, int e) {
+	if (!checkEvent (e)) return;
+	boolean [] parseFail = new boolean [1];
+	getSelectionText (parseFail);
+	if (parseFail [0]) {
+		setSelection (value, false, true, false);
+	}
+	super.HandleLostKeyboardFocus (sender, e);
+}
+
+void HandlePreviewKeyDown (int sender, int e) {
+	super.HandlePreviewKeyDown (sender, e);
+	if (!checkEvent (e)) return;
+	int key = OS.KeyEventArgs_Key (e);
+	int delta = 0;
+	switch (key) {
+		case OS.Key_Return:
+			postEvent (SWT.DefaultSelection);
+			break;
+		case OS.Key_Down: delta -= increment; break;
+		case OS.Key_Up: delta += increment; break;
+		case OS.Key_PageDown: delta -= pageIncrement; break;
+		case OS.Key_PageUp: delta += pageIncrement; break;
+	}
+	if (delta != 0) {
+		updateSelection (delta);
+	}
+}
+
+void HandlePreviewTextInput (int sender, int e) {
+	super.HandlePreviewTextInput (sender, e);
+	if (!checkEvent (e)) return;
+	int textPtr = OS.TextCompositionEventArgs_Text (e);
+	String input = createJavaString(textPtr);
+	OS.GCHandle_Free (textPtr);
+	int start = OS.TextBox_SelectionStart (textHandle);
+	int end = start + OS.TextBox_SelectionLength (textHandle);
+	String text = verifyText (input, start, end);
+	if (text != null && !text.equals (input)) {
+		textPtr = createDotNetString (text, false);
+		OS.TextBox_SelectedText (textHandle, textPtr);
+		OS.GCHandle_Free (textPtr);
+		start = OS.TextBox_SelectionStart (textHandle);
+		int length = OS.TextBox_SelectionLength (textHandle);
+		OS.TextBox_Select (textHandle, start+length, 0);
+		OS.TextBox_SelectionLength (textHandle, 0);
+		text = null;
+	}
+	if (text == null) OS.TextCompositionEventArgs_Handled (e, true);
+}
+
+void HandleTextChanged (int sender, int e) {
+	if (!checkEvent (e)) return;
+	boolean [] parseFail = new boolean [1];
+	int value = getSelectionText (parseFail);
+	if (!parseFail [0]) {
+		if (this.value != value) setSelection(value, true, false, true);
+	}
+	sendEvent (SWT.Modify);
+}
+
+void HandleUpClick (int sender, int e) {
+	if (!checkEvent (e)) return;
+	updateSelection (increment);
+}
+
+void hookEvents () {
+	super.hookEvents();	
+	//TEXT
+	int handler = OS.gcnew_TextCompositionEventHandler (jniRef, "HandlePreviewTextInput");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.UIElement_PreviewTextInput (textHandle, handler);
+	OS.GCHandle_Free (handler);
+//	handler = OS.gcnew_ExecutedRoutedEventHandler(jniRef, "HandlePreviewExecutedRoutedEvent");
+//	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+//	OS.CommandManager_AddPreviewExecutedHandler(handle, handler);
+//	OS.GCHandle_Free(handler);
+	handler = OS.gcnew_TextChangedEventHandler (jniRef, "HandleTextChanged");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.TextBoxBase_TextChanged (textHandle, handler);
+	OS.GCHandle_Free (handler);
+	
+	//BUTTON
+	handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleDownClick");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.ButtonBase_Click (downHandle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleUpClick");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.ButtonBase_Click (upHandle, handler);
+	OS.GCHandle_Free (handler);
+}
+
+/**
+ * Pastes text from clipboard.
+ * <p>
+ * The selected text is deleted from the widget
+ * and new text inserted from the clipboard.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void paste () {
+	checkWidget ();
+	//TODO
+}
+
+void releaseHandle () {
+	super.releaseHandle();
+	OS.GCHandle_Free (textHandle);
+	OS.GCHandle_Free (upHandle);
+	OS.GCHandle_Free (downHandle);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the receiver's text is modified.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ModifyListener
+ * @see #addModifyListener
+ */
+public void removeModifyListener (ModifyListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Modify, listener);	
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is verified.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see VerifyListener
+ * @see #addVerifyListener
+ */
+void removeVerifyListener (VerifyListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Verify, listener);	
+}
+
+/**
+ * Sets the number of decimal places used by the receiver.
+ * <p>
+ * The digit setting is used to allow for floating point values in the receiver.
+ * For example, to set the selection to a floating point value of 1.37 call setDigits() with 
+ * a value of 2 and setSelection() with a value of 137. Similarly, if getDigits() has a value
+ * of 2 and getSelection() returns 137 this should be interpreted as 1.37. This applies to all
+ * numeric APIs. 
+ * </p>
+ * 
+ * @param value the new digits (must be greater than or equal to zero)
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the value is less than zero</li>
+ * </ul> 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setDigits (int value) {
+	checkWidget ();
+	if (value < 0) error (SWT.ERROR_INVALID_ARGUMENT);
+	digits = value;
+	setSelection (this.value, false, true, false);
+}
+
+/**
+ * Sets the amount that the receiver's value will be
+ * modified by when the up/down arrows are pressed to
+ * the argument, which must be at least one.
+ *
+ * @param value the new increment (must be greater than zero)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setIncrement (int value) {
+	checkWidget ();
+	if (value < 1) return;
+	increment = value;
+}
+
+/**
+ * Sets the maximum value that the receiver will allow.  This new
+ * value will be ignored if it is not greater than the receiver's current
+ * minimum value.  If the new maximum is applied then the receiver's
+ * selection value will be adjusted if necessary to fall within its new range.
+ *
+ * @param value the new maximum, which must be greater than the current minimum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMaximum (int value) {
+	checkWidget ();
+	if (value <= min) return;
+	max = value;
+	if (this.value > value) setSelection (value, true, true, false);
+}
+
+/**
+ * Sets the minimum value that the receiver will allow.  This new
+ * value will be ignored if it is not less than the receiver's
+ * current maximum value.  If the new minimum is applied then the receiver's
+ * selection value will be adjusted if necessary to fall within its new range.
+ *
+ * @param value the new minimum, which must be less than the current maximum
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMinimum (int value) {
+	checkWidget ();
+	if (value >= max) return;
+	min = value;
+	if (this.value < value) setSelection (value, true, true, false);
+}
+
+/**
+ * Sets the amount that the receiver's position will be
+ * modified by when the page up/down keys are pressed
+ * to the argument, which must be at least one.
+ *
+ * @param value the page increment (must be greater than zero)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setPageIncrement (int value) {
+	checkWidget ();
+	if (value < 1) return;
+	pageIncrement = value;
+}
+
+/**
+ * Sets the <em>selection</em>, which is the receiver's
+ * position, to the argument. If the argument is not within
+ * the range specified by minimum and maximum, it will be
+ * adjusted to fall within this range.
+ *
+ * @param value the new selection (must be zero or greater)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (int value) {
+	checkWidget ();
+	value = Math.min (Math.max (min, value), max);
+	setSelection (value, true, true, false);
+}
+
+void setSelection (int value, boolean setPos, boolean setText, boolean notify) {
+	if (setPos) {
+		this.value = value;
+	}
+	if (setText) {
+		String string;
+		if (digits == 0) {
+			string = String.valueOf (value);
+		} else {
+			string = String.valueOf (Math.abs (value));
+			String decimalSeparator = getDecimalSeparator ();
+			int index = string.length () - digits;
+			StringBuffer buffer = new StringBuffer ();
+			if (value < 0) buffer.append ("-");
+			if (index > 0) {
+				buffer.append (string.substring (0, index));
+				buffer.append (decimalSeparator);
+				buffer.append (string.substring (index));
+			} else {
+				buffer.append ("0");
+				buffer.append (decimalSeparator);
+				while (index++ < 0) buffer.append ("0");
+				buffer.append (string);
+			}
+			string = buffer.toString ();
+		}
+//		if (hooks (SWT.Verify) || filters (SWT.Verify)) {
+//			int length = OS.GetWindowTextLength (hwndText);
+//			string = verifyText (string, 0, length, null);
+//			if (string == null) return;
+//		}
+		int ptr = createDotNetString (string, false);
+		OS.TextBox_Text (textHandle, ptr);
+		OS.GCHandle_Free (ptr);
+	}
+	if (notify) postEvent (SWT.Selection);
+}
+
+/**
+ * Sets the maximum number of characters that the receiver's
+ * text field is capable of holding to be the argument.
+ * <p>
+ * To reset this value to the default, use <code>setTextLimit(Spinner.LIMIT)</code>.
+ * Specifying a limit value larger than <code>Spinner.LIMIT</code> sets the
+ * receiver's limit to <code>Spinner.LIMIT</code>.
+ * </p>
+ * @param limit new text limit
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_CANNOT_BE_ZERO - if the limit is zero</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #LIMIT
+ * 
+ * @since 3.4
+ */
+public void setTextLimit (int limit) {
+	checkWidget ();
+	if (limit == 0) error (SWT.ERROR_CANNOT_BE_ZERO);
+	OS.TextBox_MaxLength (textHandle, limit);
+}
+
+/**
+ * Sets the receiver's selection, minimum value, maximum
+ * value, digits, increment and page increment all at once.
+ * <p>
+ * Note: This is similar to setting the values individually
+ * using the appropriate methods, but may be implemented in a 
+ * more efficient fashion on some platforms.
+ * </p>
+ *
+ * @param selection the new selection value
+ * @param minimum the new minimum value
+ * @param maximum the new maximum value
+ * @param digits the new digits value
+ * @param increment the new increment value
+ * @param pageIncrement the new pageIncrement value
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setValues (int selection, int minimum, int maximum, int digits, int increment, int pageIncrement) {
+	checkWidget ();
+	if (maximum <= minimum) return;
+	if (digits < 0) return;
+	if (increment < 1) return;
+	if (pageIncrement < 1) return;
+	selection = Math.min (Math.max (minimum, selection), maximum);
+	this.pageIncrement = pageIncrement;
+	this.increment = increment;
+	this.digits = digits;
+	this.min = minimum;
+	this.max = maximum;
+	setSelection (selection, true, true, false);
+}
+
+void updateSelection (int delta) { 
+	boolean [] parseFail = new boolean [1];
+	int value = getSelectionText (parseFail);
+	if (parseFail [0]) value = this.value;
+	int newValue = value + delta;
+	if ((style & SWT.WRAP) != 0) {
+		if (newValue < min) newValue = max;
+		if (newValue > max) newValue = min;
+	}
+	newValue = Math.min (Math.max (min, newValue), max);
+	if (value != newValue) setSelection (newValue, true, true, true);
+}
+
+String verifyText (String string, int start, int end) {
+	Event event = new Event ();
+	event.text = string;
+	event.start = start;
+	event.end = end;
+	if (string.length () == 1) {
+		event.character = string.charAt (0);
+		setInputState (event, SWT.KeyDown, 0, 0);
+	}
+	int index = 0;
+	if (digits > 0) {
+		String decimalSeparator = getDecimalSeparator ();
+		index = string.indexOf (decimalSeparator);
+		if (index != -1) {
+			string = string.substring (0, index) + string.substring (index + 1);
+		}
+		index = 0;
+	}
+	if (string.length() > 0) {
+		if (min < 0 && string.charAt (0) == '-') index++;
+	}
+	while (index < string.length ()) {
+		if (!Character.isDigit (string.charAt (index))) break;
+		index++;
+	}
+	event.doit = index == string.length ();
+	sendEvent (SWT.Verify, event);
+	if (!event.doit || isDisposed ()) return null;
+	return event.text;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TabFolder.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TabFolder.java
new file mode 100644
index 0000000..9100ff4
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TabFolder.java
@@ -0,0 +1,731 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.wpf.*;
+
+/**
+ * Instances of this class implement the notebook user interface
+ * metaphor.  It allows the user to select a notebook page from
+ * set of pages.
+ * <p>
+ * The item children that may be added to instances of this class
+ * must be of type <code>TabItem</code>.
+ * <code>Control</code> children are created and then set into a
+ * tab item using <code>TabItem#setControl</code>.
+ * </p><p>
+ * Note that although this class is a subclass of <code>Composite</code>,
+ * it does not make sense to set a layout on it.
+ * </p><p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>TOP, BOTTOM</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles TOP and BOTTOM may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tabfolder">TabFolder, TabItem snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class TabFolder extends Composite {
+	int parentingHandle;
+	int itemCount;	
+	Control [] children;
+	int childCount;
+	boolean ignoreSelection;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see SWT#TOP
+ * @see SWT#BOTTOM
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TabFolder (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+int backgroundProperty () {
+	return OS.Control_BackgroundProperty ();
+}
+
+void addChild (Control widget) {
+	super.addChild (widget);
+	if (childCount == children.length) {
+		Control [] newChildren = new Control [childCount + 4];
+		System.arraycopy (children, 0, newChildren, 0, childCount);
+		children = newChildren;
+	}
+	children [childCount++] = widget;
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the user changes the receiver's selection, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * When <code>widgetSelected</code> is called, the item field of the event object is valid.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the user changes the receiver's selection
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener(listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+static int checkStyle (int style) {
+	/*
+	* When the SWT.TOP style has not been set, force the
+	* tabs to be on the bottom for tab folders on PPC.
+	*/
+//	if (OS.IsPPC) {
+//		if ((style & SWT.TOP) == 0) style |= SWT.BOTTOM;
+//	}
+	style = checkBits (style, SWT.TOP, SWT.BOTTOM, 0, 0, 0, 0);
+	
+	/*
+	* Even though it is legal to create this widget
+	* with scroll bars, they serve no useful purpose
+	* because they do not automatically scroll the
+	* widget's client area.  The fix is to clear
+	* the SWT style.
+	*/
+	return style & ~(SWT.H_SCROLL | SWT.V_SCROLL);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+int clientHandle () {
+	int index = OS.Selector_SelectedIndex (handle);
+	if (index != -1) {
+		int items = OS.ItemsControl_Items (handle);
+		TabItem item = getItem (items, index);
+		OS.GCHandle_Free (items);
+		return item.contentHandle;
+	}
+	return handle;
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	Point size = super.computeSize (wHint, hHint, changed); 
+	Point sizeTabFolder = computeSize (handle, wHint, hHint, changed);
+	return new Point (Math.max(sizeTabFolder.x + 1, size.x + 10), size.y + sizeTabFolder.y + 10);
+}
+
+void createItem (TabItem item, int index) {
+	if (!(0 <= index && index <= itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	item.createWidget ();
+	int items = OS.ItemsControl_Items (handle);
+	OS.ItemCollection_Insert (items, index, item.topHandle ());
+	int count = OS.ItemCollection_Count (items);
+	OS.GCHandle_Free (items);
+	if (itemCount == count) error (SWT.ERROR_ITEM_NOT_ADDED);
+	itemCount++;
+}
+
+void createHandle () {
+	parentingHandle = OS.gcnew_Canvas ();
+	if (parentingHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	handle = OS.gcnew_TabControl ();
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	if ((style & SWT.BOTTOM) != 0) OS.TabControl_TabStripPlacement (handle, OS.Dock_Bottom);
+	int children = OS.Panel_Children (parentingHandle);
+	OS.UIElementCollection_Add (children, handle);
+	OS.GCHandle_Free (children);
+	OS.Canvas_SetLeft (handle, 0);
+	OS.Canvas_SetTop (handle, 0);
+}
+
+void createWidget () {
+	super.createWidget ();
+	children = new Control [4];
+}
+
+void deregister () {
+	super.deregister ();
+	display.removeWidget (parentingHandle);
+}
+
+void destroyItem (TabItem item) {
+	int items = OS.ItemsControl_Items (handle);
+	OS.ItemCollection_Remove (items, item.topHandle ());
+	int count = OS.ItemCollection_Count (items);
+	OS.GCHandle_Free (items);
+	if (itemCount == count) error (SWT.ERROR_ITEM_NOT_REMOVED);
+	itemCount--;
+}
+
+Control findThemeControl () {
+	return this;
+}
+
+Control [] _getChildren () {
+	// return children in reverse order.
+	Control[] result = new Control [childCount];
+	for (int i =0; i < childCount; i++) {
+		result [childCount - i - 1] = children [i]; 
+	}
+	return result;
+}
+
+public Rectangle getClientArea () {
+	checkWidget ();
+	Rectangle rect = super.getClientArea ();
+	int clientHandle = clientHandle ();
+	int topHandle = topHandle ();
+	int point = OS.gcnew_Point (0, 0);
+	int result = OS.UIElement_TranslatePoint (clientHandle, point, topHandle);
+	rect.x = (int) OS.Point_X (result);
+	rect.y = (int) OS.Point_Y (result);
+	OS.GCHandle_Free (point);
+	OS.GCHandle_Free (result);
+	return rect;
+}
+
+/**
+ * Returns the item at the given, zero-relative index in the
+ * receiver. Throws an exception if the index is out of range.
+ *
+ * @param index the index of the item to return
+ * @return the item at the given index
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TabItem getItem (int index) {
+	checkWidget ();
+	if (!(0 <= index && index < itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	int items = OS.ItemsControl_Items (handle);
+	TabItem item = getItem (items, index); 
+	OS.GCHandle_Free (items);
+	return item;
+}
+
+TabItem getItem (int items, int index) {
+	int item = OS.ItemCollection_GetItemAt (items, index);
+	TabItem result = (TabItem) display.getWidget (item);
+	OS.GCHandle_Free (item);
+	return result;
+}
+
+/**
+ * Returns the tab item at the given point in the receiver
+ * or null if no such item exists. The point is in the
+ * coordinate system of the receiver.
+ *
+ * @param point the point used to locate the item
+ * @return the tab item at the given point, or null if the point is not in a tab item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public TabItem getItem (Point point) {
+	checkWidget();
+	if (point == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int items = OS.ItemsControl_Items (handle);
+	for (int index = 0; index < itemCount; index++) {
+		TabItem item = getItem (items, index); 
+		Rectangle bounds = item.getBounds();
+		if (bounds.contains(point)) {
+			OS.GCHandle_Free (items);
+			return item;
+		}
+	}
+	OS.GCHandle_Free (items);
+	return null;
+}
+
+/**
+ * Returns the number of items contained in the receiver.
+ *
+ * @return the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemCount () {
+	return itemCount;
+}
+
+/**
+ * Returns an array of <code>TabItem</code>s which are the items
+ * in the receiver. 
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the items in the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TabItem [] getItems () {
+	checkWidget ();
+	TabItem [] result = new TabItem [itemCount];
+	int items = OS.ItemsControl_Items (handle);
+	for (int i=0; i<itemCount; i++) {
+		result [i] = getItem (items, i);
+	}
+	OS.GCHandle_Free (items);
+	return result;
+}
+
+/**
+ * Returns an array of <code>TabItem</code>s that are currently
+ * selected in the receiver. An empty array indicates that no
+ * items are selected.
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its selection, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ * @return an array representing the selection
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TabItem [] getSelection () {
+	checkWidget ();
+	int index = OS.Selector_SelectedIndex (handle);
+	if (index == -1) return new TabItem [0];
+	int items = OS.ItemsControl_Items (handle);
+	TabItem item = getItem (items, index);
+	OS.GCHandle_Free (items);
+	return new TabItem [] {item};
+}
+
+/**
+ * Returns the zero-relative index of the item which is currently
+ * selected in the receiver, or -1 if no item is selected.
+ *
+ * @return the index of the selected item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelectionIndex () {
+	checkWidget ();
+	return OS.Selector_SelectedIndex (handle);
+}
+
+boolean hasItems () {
+	return true;
+}
+
+void HandleSelectionChanged (int sender, int e) {
+	if (!checkEvent (e)) return;
+	int removed = OS.SelectionChangedEventArgs_RemovedItems (e);
+	if (OS.ICollection_Count (removed) > 0) {
+		int oldSelection = OS.IList_default (removed, 0);
+		TabItem item = (TabItem) display.getWidget (oldSelection);
+		OS.GCHandle_Free (oldSelection);
+		Control control = item.getControl(); 
+		if (control != null && !control.isDisposed ()) {
+			control.setVisible (false);
+		}
+	}
+	OS.GCHandle_Free (removed);
+	int selectedItem = OS.Selector_SelectedItem (handle);
+	if (selectedItem == 0) return;
+	TabItem item = (TabItem) display.getWidget (selectedItem);
+	OS.GCHandle_Free (selectedItem);
+	
+	Control control = item.getControl(); 
+	if (control != null && !control.isDisposed ()) {
+		control.setVisible (true);
+	}
+	if (ignoreSelection) return;
+	Event event = new Event ();
+	event.item = item;
+	postEvent (SWT.Selection, event);
+}
+
+void hookEvents () {
+	super.hookEvents ();
+	int handler = OS.gcnew_SelectionChangedEventHandler (jniRef, "HandleSelectionChanged");
+	OS.Selector_SelectionChanged (handle, handler);
+	OS.GCHandle_Free (handler);
+}
+
+/**
+ * Searches the receiver's list starting at the first item
+ * (index 0) until an item is found that is equal to the 
+ * argument, and returns the index of that item. If no item
+ * is found, returns -1.
+ *
+ * @param item the search item
+ * @return the index of the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int indexOf (TabItem item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int items = OS.ItemsControl_Items (handle);
+	int index = OS.ItemCollection_IndexOf (items, item.topHandle ());
+	OS.GCHandle_Free (items);
+	return index;
+}
+
+Point minimumSize (int wHint, int hHint, boolean flushCache) {
+	Control [] children = _getChildren ();
+	int width = 0, height = 0;
+	int items = OS.ItemsControl_Items (handle);
+	for (int i=0; i<children.length; i++) {
+		Control child = children [i];
+		int index = 0;	
+		while (index < itemCount) {
+			TabItem item = getItem (items, index); 
+			if (item.control == child) break;
+			index++;
+		}
+		if (index == itemCount) {
+			Rectangle rect = child.getBounds ();
+			width = Math.max (width, rect.x + rect.width);
+			height = Math.max (height, rect.y + rect.height);
+		} else {
+			Point size = child.computeSize (wHint, hHint, flushCache);
+			width = Math.max (width, size.x);
+			height = Math.max (height, size.y);
+		}
+	}
+	OS.GCHandle_Free (items);
+	return new Point (width, height);
+}
+
+boolean mnemonicHit (char key) {
+	//TODO
+	return false;
+}
+
+boolean mnemonicMatch (char key) {
+	boolean found = false;
+	int items = OS.ItemsControl_Items (handle);
+	for (int i=0; i<itemCount; i++) {
+		TabItem item = getItem (items, i);
+		if (mnemonicMatch (item.textHandle, key)) {
+			found = true;
+			break;
+		}
+	}
+	OS.GCHandle_Free (items);
+	return found;
+}
+
+int parentingHandle() {
+	return parentingHandle;
+}
+
+void register () {
+	super.register ();
+	display.addWidget (parentingHandle, this);
+}
+
+void releaseChildren (boolean destroy) {
+	int items = OS.ItemsControl_Items (handle);
+	for (int i=0; i<itemCount; i++) {
+		TabItem item = getItem (items, i);
+		if (item != null && !item.isDisposed ()) item.release (false);
+	}
+	OS.GCHandle_Free (items);
+	super.releaseChildren (destroy);
+}
+
+void removeChild (Control control) {
+	super.removeChild (control);
+	int index = 0;
+	while (index < childCount) {
+		if (children [index] == control) break;
+		index++;
+	}
+	if (index == childCount) return;
+	System.arraycopy (children, index+1, children, index, --childCount - index);
+	children [childCount] = null;
+}
+
+void releaseHandle() {
+	super.releaseHandle ();
+	if (parentingHandle != 0) OS.GCHandle_Free (parentingHandle);
+	parentingHandle = 0;
+}
+
+void removeControl (Control control) {
+	super.removeControl (control);
+	int items = OS.ItemsControl_Items (handle);
+	for (int i=0; i<itemCount; i++) {
+		TabItem item = getItem (items, i);
+		if (item.control == control) { 
+			item.setControl (null);
+			break;
+		}
+	}
+	OS.GCHandle_Free (items);	
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the user changes the receiver's selection.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+int setBounds (int x, int y, int width, int height, int flags) {
+	int result = super.setBounds (x, y, width, height, flags);
+	if ((result & RESIZED) != 0) {
+		OS.FrameworkElement_Height (handle, height);
+		OS.FrameworkElement_Width (handle, width);
+		int selectedItem = OS.Selector_SelectedItem (handle);
+		if (selectedItem != 0) {
+			TabItem item = (TabItem) display.getWidget (selectedItem);
+			OS.GCHandle_Free (selectedItem);
+			Control control = item.control;
+			if (control != null && !control.isDisposed ()) {
+				control.setBounds (getClientArea ());
+			}
+		}
+	}
+	return result;
+}
+
+void setForegroundBrush (int brush) {
+	if (brush != 0) {
+		OS.Control_Foreground (handle, brush);
+	} else {
+		int property = OS.Control_ForegroundProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+	}
+}
+
+/**
+ * Sets the receiver's selection to the given item.
+ * The current selected is first cleared, then the new item is
+ * selected.
+ *
+ * @param item the item to select
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setSelection (TabItem item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setSelection (new TabItem [] {item});
+}
+
+/**
+ * Sets the receiver's selection to be the given array of items.
+ * The current selected is first cleared, then the new items are
+ * selected.
+ *
+ * @param items the array of items
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the items array is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (TabItem [] items) {
+	checkWidget ();
+	if (items == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (items.length == 0) {
+		setSelection (-1, false);
+	} else {
+		for (int i=items.length-1; i>=0; --i) {
+			int index = indexOf (items [i]);
+			if (index != -1) setSelection (index, false);
+		}
+	}
+}
+
+/**
+ * Selects the item at the given zero-relative index in the receiver. 
+ * If the item at the index was already selected, it remains selected.
+ * The current selection is first cleared, then the new items are
+ * selected. Indices that are out of range are ignored.
+ *
+ * @param index the index of the item to select
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (int index) {
+	checkWidget ();
+	if (!(0 <= index && index < itemCount)) return;
+	setSelection (index, false);
+}
+
+void setSelection (int index, boolean notify) {
+	int oldIndex = OS.Selector_SelectedIndex (handle);
+	if (oldIndex != -1) {
+		int items = OS.ItemsControl_Items (handle);
+		TabItem item = getItem (items, oldIndex);
+		OS.GCHandle_Free (items);
+		Control control = item.control;
+		if (control != null && !control.isDisposed ()) {
+			control.setVisible (false);
+		}
+	}
+	ignoreSelection = true;
+	OS.Selector_SelectedIndex (handle, index);
+	ignoreSelection = false;
+	int newIndex = OS.Selector_SelectedIndex (handle);
+	if (newIndex != -1) {
+		int items = OS.ItemsControl_Items (handle);
+		TabItem item = getItem (items, newIndex);
+		OS.GCHandle_Free (items);
+		Control control = item.control;
+		if (control != null && !control.isDisposed ()) {
+//			control.setBounds (getClientArea ());
+			control.setVisible (true);
+		}
+		if (notify) {
+			Event event = new Event ();
+			event.item = item;
+			sendEvent (SWT.Selection, event);
+		}
+	}
+}
+
+int topHandle() {
+	return parentingHandle;
+}
+
+boolean traversePage (boolean next) {
+//	GTK: OS.g_signal_emit_by_name (handle, OS.change_current_page, next ? 1 : -1);
+	int count = getItemCount ();
+	if (count <= 1) return false;
+	int index = getSelectionIndex ();
+	if (index == -1) {
+		index = 0;
+	} else {
+		int offset = (next) ? 1 : -1;
+		index = (index + offset + count) % count;
+	}
+	setSelection (index, true);
+	if (index == getSelectionIndex ()) {
+//		OS.SendMessage (handle, OS.WM_CHANGEUISTATE, OS.UIS_INITIALIZE, 0);
+		return true;
+	}
+	return false;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TabItem.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TabItem.java
new file mode 100644
index 0000000..2a87cd4
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TabItem.java
@@ -0,0 +1,406 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class represent a selectable user interface object
+ * corresponding to a tab for a page in a tab folder.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tabfolder">TabFolder, TabItem snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class TabItem extends Item {
+	TabFolder parent;
+	Control control;
+	String toolTipText;
+	int imageHandle, textHandle, contentHandle;
+	
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>TabFolder</code>) and a style value
+ * describing its behavior and appearance. The item is added
+ * to the end of the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TabItem (TabFolder parent, int style) {
+	super (parent, style);
+	this.parent = parent;
+	parent.createItem (this, parent.getItemCount ());
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>TabFolder</code>), a style value
+ * describing its behavior and appearance, and the index
+ * at which to place it in the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ * @param index the zero-relative index to store the receiver in its parent
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the parent (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TabItem (TabFolder parent, int style, int index) {
+	super (parent, style);
+	this.parent = parent;
+	parent.createItem (this, index);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+void createHandle () {
+	handle = OS.gcnew_TabItem ();
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	imageHandle = OS.gcnew_Image ();
+	if (imageHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.Image_Stretch (imageHandle, OS.Stretch_None);
+	int thickness = OS.gcnew_Thickness (0, 0, 3, 0);
+	if (thickness == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.FrameworkElement_Margin (imageHandle, thickness);
+	OS.GCHandle_Free (thickness);
+	OS.UIElement_Visibility (imageHandle, OS.Visibility_Collapsed);
+	textHandle = OS.gcnew_AccessText ();
+	if (textHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.FrameworkElement_VerticalAlignment (textHandle, OS.VerticalAlignment_Center);
+	int panel = OS.gcnew_StackPanel ();
+	if (panel == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.StackPanel_Orientation (panel, OS.Orientation_Horizontal);
+	thickness = OS.gcnew_Thickness (1, 1, 1, 1);
+	if (thickness == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.FrameworkElement_Margin (panel, thickness);
+	OS.GCHandle_Free(thickness);
+	int children = OS.Panel_Children (panel);
+	OS.UIElementCollection_Add (children, imageHandle);
+	OS.UIElementCollection_Add (children, textHandle);
+	OS.HeaderedContentControl_Header (handle, panel);
+	OS.GCHandle_Free (children);
+	OS.GCHandle_Free (panel);
+	contentHandle = OS.gcnew_Canvas ();
+	if (contentHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.ContentControl_Content (handle, contentHandle);
+}
+
+void deregister () {
+	display.removeWidget (handle);
+}
+
+void destroyWidget () {
+	parent.destroyItem (this);
+	releaseHandle ();
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location
+ * relative to its parent.
+ *
+ * @return the receiver's bounding rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.4
+ */
+public Rectangle getBounds () {
+	checkWidget ();
+	int topHandle =	handle;
+	int point = OS.gcnew_Point (0, 0);
+	if (point == 0) error (SWT.ERROR_NO_HANDLES);
+	int location = OS.UIElement_TranslatePoint (topHandle, point, parent.handle);
+	int x = (int) OS.Point_X (location);
+	int y = (int) OS.Point_Y (location);
+	OS.GCHandle_Free (point);
+	OS.GCHandle_Free (location);
+	int width = (int) OS.FrameworkElement_ActualWidth (topHandle);
+	int height = (int) OS.FrameworkElement_ActualHeight (topHandle);
+	return new Rectangle (x, y, width, height);
+}
+
+/**
+ * Returns the control that is used to fill the client area of
+ * the tab folder when the user selects the tab item.  If no
+ * control has been set, return <code>null</code>.
+ * <p>
+ * @return the control
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Control getControl () {
+	checkWidget();
+	return control;
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>TabFolder</code>.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TabFolder getParent () {
+	checkWidget();
+	return parent;
+}
+
+Control getWidgetControl () {
+	return parent;
+}
+
+/**
+ * Returns the receiver's tool tip text, or null if it has
+ * not been set.
+ *
+ * @return the receiver's tool tip text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getToolTipText () {
+	checkWidget();
+	return toolTipText;
+}
+
+void HandleSizeChanged (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if (control == null) return;
+	control.setBounds (parent.getClientArea ());
+}
+
+void hookEvents () {
+	super.hookEvents ();
+	int handler = OS.gcnew_SizeChangedEventHandler (jniRef, "HandleSizeChanged");
+	OS.FrameworkElement_SizeChanged (contentHandle, handler);
+	OS.GCHandle_Free (handler);
+}
+
+void register() {
+	display.addWidget (handle, this);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (handle != 0) OS.GCHandle_Free (handle);
+	handle = 0;
+	parent = null;
+	if (textHandle != 0) OS.GCHandle_Free (textHandle);
+	textHandle = 0;
+	if (imageHandle !=0 )OS.GCHandle_Free (imageHandle);
+	imageHandle = 0;
+	if (contentHandle != 0) OS.GCHandle_Free (contentHandle);
+	contentHandle = 0;
+}
+
+void releaseParent () {
+	super.releaseParent ();
+	int index = parent.indexOf (this);
+	if (index == parent.getSelectionIndex ()) {
+		if (control != null) control.setVisible (false);
+	}
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	control = null;
+	toolTipText = null;
+}
+
+/**
+ * Sets the control that is used to fill the client area of
+ * the tab folder when the user selects the tab item.
+ * <p>
+ * @param control the new control (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the control has been disposed</li> 
+ *    <li>ERROR_INVALID_PARENT - if the control is not in the same widget tree</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setControl (Control control) {
+	checkWidget();
+	if (control != null) {
+		if (control.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT);
+		if (control.parent != parent) error (SWT.ERROR_INVALID_PARENT);
+	}
+	if (this.control != null && this.control.isDisposed ()) {
+		this.control = null;
+	}
+	Control oldControl = this.control, newControl = control;
+	this.control = control;
+	int index = parent.indexOf (this), selectionIndex = parent.getSelectionIndex();
+	if (index != selectionIndex) {
+		if (newControl != null) {
+			if (selectionIndex != -1) {
+				Control selectedControl = parent.getItem(selectionIndex).getControl();
+				if (selectedControl == newControl) return;
+			}
+			newControl.setVisible(false);
+			return;
+		}
+	}
+	if (newControl != null) {
+		newControl.setBounds (parent.getClientArea ());
+		newControl.setVisible (true);
+	}
+	if (oldControl != null) oldControl.setVisible (false);
+}
+
+public void setImage (Image image) {
+	checkWidget();
+	super.setImage (image);
+	OS.Image_Source (imageHandle, image != null ? image.handle : 0);
+	OS.UIElement_Visibility (imageHandle, image != null ? OS.Visibility_Visible : OS.Visibility_Collapsed);
+}
+
+/**
+ * Sets the receiver's text.  The string may include
+ * the mnemonic character.
+ * </p>
+ * <p>
+ * Mnemonics are indicated by an '&amp;' that causes the next
+ * character to be the mnemonic.  When the user presses a
+ * key sequence that matches the mnemonic, a selection
+ * event occurs. On most platforms, the mnemonic appears
+ * underlined but may be emphasised in a platform specific
+ * manner.  The mnemonic indicator character '&amp;' can be
+ * escaped by doubling it in the string, causing a single
+ * '&amp;' to be displayed.
+ * </p>
+ * 
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ */
+public void setText (String string) {
+	checkWidget();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (string.equals (text)) return;
+	super.setText (string);
+	int strPtr = createDotNetString (string, true);
+	if (strPtr == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.AccessText_Text (textHandle, strPtr);
+	OS.GCHandle_Free (strPtr);
+//	OS.UIElement_Visibility (textHandle, string.length() == 0 ? OS.Visibility_Collapsed : OS.Visibility_Visible);
+}
+
+/**
+ * Sets the receiver's tool tip text to the argument, which
+ * may be null indicating that the default tool tip for the 
+ * control will be shown. For a control that has a default
+ * tool tip, such as the Tree control on Windows, setting
+ * the tool tip text to an empty string replaces the default,
+ * causing no tool tip text to be shown.
+ * <p>
+ * The mnemonic indicator (character '&amp;') is not displayed in a tool tip.
+ * To display a single '&amp;' in the tool tip, the character '&amp;' can be 
+ * escaped by doubling it in the string.
+ * </p>
+ * 
+ * @param string the new tool tip text (or null)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setToolTipText (String string) {
+	checkWidget();
+	toolTipText = string;
+	if (string != null && string.length() == 0) string = null;
+	int strPtr = createDotNetString (string, false);
+	int header = OS.HeaderedContentControl_Header (handle);
+	OS.FrameworkElement_ToolTip (header, strPtr);
+	if (strPtr != 0) OS.GCHandle_Free (strPtr);
+	OS.GCHandle_Free (header);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Table.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Table.java
new file mode 100644
index 0000000..068104d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Table.java
@@ -0,0 +1,2417 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.wpf.OS;
+
+/** 
+ * Instances of this class implement a selectable user interface
+ * object that displays a list of images and strings and issues
+ * notification when selected.
+ * <p>
+ * The item children that may be added to instances of this class
+ * must be of type <code>TableItem</code>.
+ * </p><p>
+ * Style <code>VIRTUAL</code> is used to create a <code>Table</code> whose
+ * <code>TableItem</code>s are to be populated by the client on an on-demand basis
+ * instead of up-front.  This can provide significant performance improvements for
+ * tables that are very large or for which <code>TableItem</code> population is
+ * expensive (for example, retrieving values from an external source).
+ * </p><p>
+ * Here is an example of using a <code>Table</code> with style <code>VIRTUAL</code>:
+ * <code><pre>
+ *  final Table table = new Table (parent, SWT.VIRTUAL | SWT.BORDER);
+ *  table.setItemCount (1000000);
+ *  table.addListener (SWT.SetData, new Listener () {
+ *      public void handleEvent (Event event) {
+ *          TableItem item = (TableItem) event.item;
+ *          int index = table.indexOf (item);
+ *          item.setText ("Item " + index);
+ *          System.out.println (item.getText ());
+ *      }
+ *  }); 
+ * </pre></code>
+ * </p><p>
+ * Note that although this class is a subclass of <code>Composite</code>,
+ * it does not normally make sense to add <code>Control</code> children to
+ * it, or set a layout on it, unless implementing something like a cell
+ * editor.
+ * </p><p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>SINGLE, MULTI, CHECK, FULL_SELECTION, HIDE_SELECTION, VIRTUAL, NO_SCROLL</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection, DefaultSelection, SetData, MeasureItem, EraseItem, PaintItem</dd>
+ * </dl>
+ * </p><p>
+ * Note: Only one of the styles SINGLE, and MULTI may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#table">Table, TableItem, TableColumn snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class Table extends Composite {
+	int gridViewHandle, parentingHandle;
+	int columnCount, itemCount;
+	boolean ignoreSelection;
+	TableColumn [] columns;
+	boolean linesVisible;
+	
+	static final String CHECKBOX_PART_NAME = "SWT_PART_CHECKBOX";
+	static final String IMAGE_PART_NAME = "SWT_PART_IMAGE";
+	static final String TEXT_PART_NAME = "SWT_PART_TEXT";
+	static final String CONTENTPANEL_PART_NAME = "SWT_PART_CONTENTPANEL";
+	static final String RENDER_PANEL_NAME = "SWT_PART_RENDERPANEL";
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#SINGLE
+ * @see SWT#MULTI
+ * @see SWT#CHECK
+ * @see SWT#FULL_SELECTION
+ * @see SWT#HIDE_SELECTION
+ * @see SWT#VIRTUAL
+ * @see SWT#NO_SCROLL
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Table (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+void _addListener (int eventType, Listener listener) {
+	super._addListener (eventType, listener);
+	switch (eventType) {
+		case SWT.MeasureItem:
+		case SWT.EraseItem:
+		case SWT.PaintItem:
+			//TODO
+			break;
+	}
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the user changes the receiver's selection, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * When <code>widgetSelected</code> is called, the item field of the event object is valid.
+ * If the receiver has the <code>SWT.CHECK</code> style and the check selection changes,
+ * the event object detail field contains the value <code>SWT.CHECK</code>.
+ * <code>widgetDefaultSelected</code> is typically called when an item is double-clicked.
+ * The item field of the event object is valid for default selection, but the detail field is not used.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the user changes the receiver's selection
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection, typedListener);
+	addListener (SWT.DefaultSelection, typedListener);
+}
+
+int backgroundProperty () {
+	return OS.Control_BackgroundProperty ();
+}
+
+boolean checkData (TableItem item) {
+	if ((style & SWT.VIRTUAL) == 0) return true;
+	if (!item.cached) {
+		item.cached = true;
+		Event event = new Event ();
+		event.item = item;
+		event.index = indexOf (item);
+		sendEvent (SWT.SetData, event);
+		//widget could be disposed at this point
+		if (isDisposed () || item.isDisposed ()) return false;
+	}
+	return true;
+}
+
+static int checkStyle (int style) {
+	/*
+	* Feature in Windows.  Even when WS_HSCROLL or
+	* WS_VSCROLL is not specified, Windows creates
+	* trees and tables with scroll bars.  The fix
+	* is to set H_SCROLL and V_SCROLL.
+	* 
+	* NOTE: This code appears on all platforms so that
+	* applications have consistent scroll bar behavior.
+	*/
+	if ((style & SWT.NO_SCROLL) == 0) {
+		style |= SWT.H_SCROLL | SWT.V_SCROLL;
+	}
+	/* WPF is always FULL_SELECTION */
+	style |= SWT.FULL_SELECTION;
+	return checkBits (style, SWT.SINGLE, SWT.MULTI, 0, 0, 0, 0);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+/**
+ * Clears the item at the given zero-relative index in the receiver.
+ * The text, icon and other attributes of the item are set to the default
+ * value.  If the table was created with the <code>SWT.VIRTUAL</code> style,
+ * these attributes are requested again as needed.
+ *
+ * @param index the index of the item to clear
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see SWT#VIRTUAL
+ * @see SWT#SetData
+ * 
+ * @since 3.0
+ */
+public void clear (int index) {
+	checkWidget ();
+	if (!(0 <= index && index < itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	int items = OS.ItemsControl_Items (handle);
+	TableItem item = getItem (items, index, false);
+	OS.GCHandle_Free (items);
+	if (item != null) item.clear ();
+}
+
+/**
+ * Removes the items from the receiver which are between the given
+ * zero-relative start and end indices (inclusive).  The text, icon
+ * and other attributes of the items are set to their default values.
+ * If the table was created with the <code>SWT.VIRTUAL</code> style,
+ * these attributes are requested again as needed.
+ *
+ * @param start the start index of the item to clear
+ * @param end the end index of the item to clear
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if either the start or end are not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see SWT#VIRTUAL
+ * @see SWT#SetData
+ * 
+ * @since 3.0
+ */
+public void clear (int start, int end) {
+	checkWidget ();
+	checkWidget ();
+	if (start > end) return;
+	if (!(0 <= start && start <= end && end < itemCount)) {
+		error (SWT.ERROR_INVALID_RANGE);
+	}
+	if (start == 0 && end == itemCount - 1) {
+		clearAll ();
+	} else {
+		int items = OS.ItemsControl_Items (handle);
+		for (int i=start; i<=end; i++) {
+			TableItem item = getItem (items, i, false);
+			if (item != null) item.clear ();
+		}
+		OS.GCHandle_Free (items);
+	}
+}
+
+/**
+ * Clears the items at the given zero-relative indices in the receiver.
+ * The text, icon and other attributes of the items are set to their default
+ * values.  If the table was created with the <code>SWT.VIRTUAL</code> style,
+ * these attributes are requested again as needed.
+ *
+ * @param indices the array of indices of the items
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the indices array is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see SWT#VIRTUAL
+ * @see SWT#SetData
+ * 
+ * @since 3.0
+ */
+public void clear (int [] indices) {
+	checkWidget ();
+	if (indices == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (indices.length == 0) return;
+	for (int i=0; i<indices.length; i++) {
+		if (!(0 <= indices [i] && indices [i] < itemCount)) {
+			error (SWT.ERROR_INVALID_RANGE);
+		}
+	}
+	int items = OS.ItemsControl_Items (handle);
+	for (int i=0; i<indices.length; i++) {
+		int index = indices [i];
+		TableItem item = getItem (items, index, false);
+		if (item != null) item.clear ();
+	}
+	OS.GCHandle_Free (items);
+}
+
+/**
+ * Clears all the items in the receiver. The text, icon and other
+ * attributes of the items are set to their default values. If the
+ * table was created with the <code>SWT.VIRTUAL</code> style, these
+ * attributes are requested again as needed.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see SWT#VIRTUAL
+ * @see SWT#SetData
+ * 
+ * @since 3.0
+ */
+public void clearAll () {
+	checkWidget ();
+	int items = OS.ItemsControl_Items (handle);
+	for (int i=0; i<itemCount; i++) {
+		TableItem item = getItem (items, i, false);
+		if (item != null) item.clear ();
+	}
+	OS.GCHandle_Free (items);
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget ();
+	updateLayout (parent.handle);
+	if (columnCount == 0) { // pack the default column
+		double width = 0;
+		int columns = OS.GridView_Columns (gridViewHandle);
+		int column = OS.GridViewColumnCollection_default (columns, 0);
+		OS.GCHandle_Free (columns);
+		int columnHeader = OS.GridViewColumn_Header (column);
+		if (columnHeader != 0) {
+			int size = OS.UIElement_DesiredSize (columnHeader);
+			width = OS.Size_Width (size);
+			OS.GCHandle_Free (size);
+			OS.GCHandle_Free (columnHeader);
+		}
+		int items = OS.ItemsControl_Items (handle);
+		for (int i=0; i<itemCount; i++) {
+			TableItem item = getItem (items, i, false);
+			if (item != null) width = Math.max (width, item.computeWidth (0));
+		}
+		OS.GCHandle_Free (items);
+		OS.GridViewColumn_Width (column, width);
+		OS.GCHandle_Free (column);
+	}
+	Point size = computeSize (handle, wHint, hHint, changed);
+	if (size.x == 0) size.x = DEFAULT_WIDTH;
+	if (size.y == 0) size.y = DEFAULT_HEIGHT;
+	if (wHint != SWT.DEFAULT) size.x = wHint;
+	if (hHint != SWT.DEFAULT) size.y = hHint;
+	Rectangle trim = computeTrim (0, 0, size.x, size.y);
+	return new Point (trim.width, trim.height);
+}
+
+int createCellTemplate (int index) {
+	int template = OS.gcnew_DataTemplate ();
+	int renderPanelType = OS.SWTDockPanel_typeid ();
+	int renderPanelName = createDotNetString(RENDER_PANEL_NAME, false);
+	int onRenderNode = OS.gcnew_FrameworkElementFactory (renderPanelType, renderPanelName);
+	OS.GCHandle_Free(renderPanelName);
+	OS.GCHandle_Free (renderPanelType);
+	int jniRefProperty = OS.SWTDockPanel_JNIRefProperty ();
+	OS.FrameworkElementFactory_SetValueInt (onRenderNode, jniRefProperty, jniRef);
+	OS.GCHandle_Free (jniRefProperty);
+	int contentPanelName = createDotNetString (CONTENTPANEL_PART_NAME, false);
+	int contentPanelType = OS.StackPanel_typeid ();
+	int cellContentNode = OS.gcnew_FrameworkElementFactory (contentPanelType, contentPanelName);
+	OS.GCHandle_Free (contentPanelType);
+	OS.GCHandle_Free (contentPanelName);
+	int clipProperty = OS.UIElement_ClipToBoundsProperty ();
+	OS.FrameworkElementFactory_SetValue (cellContentNode, clipProperty, true);
+	OS.GCHandle_Free (clipProperty);
+	int orientationProperty = OS.StackPanel_OrientationProperty ();
+	OS.FrameworkElementFactory_SetValueOrientation (cellContentNode, orientationProperty, OS.Orientation_Horizontal);
+	OS.GCHandle_Free (orientationProperty);
+	if (index == 0 && (style & SWT.CHECK) != 0) {
+		int checkBoxType = OS.CheckBox_typeid ();
+		int checkBoxName = createDotNetString (CHECKBOX_PART_NAME, false);
+		int checkBoxNode = OS.gcnew_FrameworkElementFactory (checkBoxType, checkBoxName);
+		int verticalAlignmentProperty = OS.FrameworkElement_VerticalAlignmentProperty ();
+		OS.FrameworkElementFactory_SetValueVerticalAlignment (checkBoxNode, verticalAlignmentProperty, OS.VerticalAlignment_Center);
+		int marginProperty = OS.FrameworkElement_MarginProperty ();
+		int thickness = OS.gcnew_Thickness (0,0,4,0);
+		OS.FrameworkElementFactory_SetValue (checkBoxNode, marginProperty, thickness);
+		OS.FrameworkElementFactory_AppendChild (cellContentNode, checkBoxNode);
+		OS.GCHandle_Free (thickness);
+		OS.GCHandle_Free (marginProperty);
+		OS.GCHandle_Free (verticalAlignmentProperty);
+		OS.GCHandle_Free (checkBoxName);
+		OS.GCHandle_Free (checkBoxNode);
+		OS.GCHandle_Free (checkBoxType);
+	}
+	int textType = OS.TextBlock_typeid ();
+	int textName = createDotNetString (TEXT_PART_NAME, false);
+	int textNode = OS.gcnew_FrameworkElementFactory (textType, textName);
+	OS.GCHandle_Free (textName);
+	OS.GCHandle_Free (textType);
+	int verticalAlignmentProperty = OS.FrameworkElement_VerticalAlignmentProperty ();
+	OS.FrameworkElementFactory_SetValueVerticalAlignment (textNode, verticalAlignmentProperty, OS.VerticalAlignment_Center);
+	OS.GCHandle_Free (verticalAlignmentProperty);
+	int imageType = OS.Image_typeid ();
+	int imageName = createDotNetString (IMAGE_PART_NAME, false);
+	int imageNode = OS.gcnew_FrameworkElementFactory (imageType, imageName);
+	OS.GCHandle_Free (imageName);
+	OS.GCHandle_Free (imageType);
+	int marginProperty = OS.FrameworkElement_MarginProperty ();
+	int thickness = OS.gcnew_Thickness (0,0,4,0);
+	OS.FrameworkElementFactory_SetValue (imageNode, marginProperty, thickness);
+	OS.GCHandle_Free (marginProperty);
+	OS.GCHandle_Free (thickness);
+	int stretchProperty = OS.Image_StretchProperty ();
+	OS.FrameworkElementFactory_SetValueStretch(imageNode, stretchProperty, OS.Stretch_None);
+	OS.GCHandle_Free(stretchProperty);
+	OS.FrameworkElementFactory_AppendChild (cellContentNode, imageNode);
+	OS.GCHandle_Free (imageNode);
+	OS.FrameworkElementFactory_AppendChild (cellContentNode, textNode);
+	OS.GCHandle_Free (textNode);
+	OS.FrameworkElementFactory_AppendChild (onRenderNode, cellContentNode);
+	OS.GCHandle_Free (cellContentNode);
+	OS.FrameworkTemplate_VisualTree (template, onRenderNode);
+	OS.GCHandle_Free (onRenderNode);
+	return template;
+}
+
+void createDefaultColumn () {
+	int column = OS.gcnew_GridViewColumn ();
+	int columnCollection = OS.GridView_Columns (gridViewHandle);
+	int headerHandle = OS.gcnew_GridViewColumnHeader ();
+	OS.GridViewColumn_Header (column, headerHandle);
+	OS.GCHandle_Free (headerHandle);
+	OS.GridViewColumnCollection_Insert (columnCollection, 0, column);
+	int cellTemplate = createCellTemplate (0);
+	OS.GridViewColumn_CellTemplate (column, cellTemplate);
+	OS.GCHandle_Free (columnCollection);
+	OS.GCHandle_Free (column);
+	OS.GCHandle_Free (cellTemplate);
+}
+
+void createHandle () {
+	parentingHandle = OS.gcnew_Canvas ();
+	if (parentingHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	handle = OS.gcnew_ListView ();
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	gridViewHandle = OS.gcnew_GridView ();
+	if (gridViewHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.ListView_View (handle, gridViewHandle);
+	if ((style & SWT.MULTI) == 0) OS.ListBox_SelectionMode (handle, OS.SelectionMode_Single);
+	createDefaultColumn ();
+	setHeaderVisible (false);
+	OS.Selector_IsSynchronizedWithCurrentItem (handle, true);
+	OS.GridView_AllowsColumnReorder (gridViewHandle, false);
+	OS.Canvas_SetLeft (handle, 0);
+	OS.Canvas_SetTop (handle, 0);
+	int children = OS.Panel_Children (parentingHandle);
+	OS.UIElementCollection_Add (children, handle);
+	OS.GCHandle_Free (children);
+}
+
+int createHeaderTemplate (int columnJniRef) {
+	int template = OS.gcnew_DataTemplate ();
+	int stackPanelType = OS.StackPanel_typeid ();
+	int stackPanelName = createDotNetString (CONTENTPANEL_PART_NAME, false);
+	int stackPanelNode = OS.gcnew_FrameworkElementFactory (stackPanelType, stackPanelName);
+	int textType = OS.TextBlock_typeid ();
+	int textName = createDotNetString(TEXT_PART_NAME, false);
+	int textNode = OS.gcnew_FrameworkElementFactory (textType, textName);
+	int verticalAlignmentProperty = OS.FrameworkElement_VerticalAlignmentProperty ();
+	OS.FrameworkElementFactory_SetValueVerticalAlignment (textNode, verticalAlignmentProperty, OS.VerticalAlignment_Center);
+	int imageType = OS.Image_typeid ();
+	int imageName = createDotNetString(IMAGE_PART_NAME, false);
+	int imageNode = OS.gcnew_FrameworkElementFactory (imageType, imageName);
+	int marginProperty = OS.FrameworkElement_MarginProperty ();
+	int thickness = OS.gcnew_Thickness (0,0,4,0);
+	OS.FrameworkElementFactory_SetValue (imageNode, marginProperty, thickness);
+	int orientationProperty = OS.StackPanel_OrientationProperty ();
+	OS.FrameworkElementFactory_SetValueOrientation (stackPanelNode, orientationProperty, OS.Orientation_Horizontal);
+	OS.FrameworkElementFactory_AppendChild (stackPanelNode, imageNode);
+	OS.FrameworkElementFactory_AppendChild (stackPanelNode, textNode);
+	OS.FrameworkTemplate_VisualTree (template, stackPanelNode);
+	OS.GCHandle_Free (stackPanelName);
+	OS.GCHandle_Free (imageType);
+	OS.GCHandle_Free (imageName);
+	OS.GCHandle_Free (marginProperty);
+	OS.GCHandle_Free (thickness);
+	OS.GCHandle_Free (textType);
+	OS.GCHandle_Free (textName);
+	OS.GCHandle_Free (stackPanelType);
+	OS.GCHandle_Free (stackPanelNode);
+	OS.GCHandle_Free (textNode);
+	OS.GCHandle_Free (imageNode);
+	OS.GCHandle_Free (orientationProperty);
+	OS.GCHandle_Free (verticalAlignmentProperty);
+	return template;
+}
+
+void createItem (TableColumn column, int index) {
+    if (index == -1) index = columnCount;
+    if (!(0 <= index && index <= columnCount)) error (SWT.ERROR_INVALID_RANGE);
+	column.createWidget ();
+	int template = createHeaderTemplate (column.jniRef);
+	OS.GridViewColumn_HeaderTemplate (column.handle, template);
+	OS.GCHandle_Free (template);
+	template = createCellTemplate (index);
+	OS.GridViewColumn_CellTemplate (column.handle, template);
+	OS.GCHandle_Free (template);
+	int gvColumns = OS.GridView_Columns (gridViewHandle);
+	if (columnCount == 0) OS.GridViewColumnCollection_Clear (gvColumns);
+	OS.GridViewColumnCollection_Insert (gvColumns, index, column.handle);
+	OS.GCHandle_Free (gvColumns);
+	// When columnCount is 0, a "default column" is created in
+	// the WPF control, therefore there is no need to manipulate 
+	// the item's array the first time a TableColumn is created
+	// because the number of columns in the OS control is still one.
+	if (columnCount != 0) {
+		int items = OS.ItemsControl_Items (handle);
+		for (int i=0; i<itemCount; i++) {
+			TableItem item = getItem (items, i, false);
+			if (item != null) item.columnAdded (index);
+		}
+		OS.GCHandle_Free (items);
+	}
+	if (columns == null) columns = new TableColumn [4];
+	if (columns.length == columnCount) {
+		TableColumn [] newColumns = new TableColumn [columnCount + 4];
+		System.arraycopy(columns, 0, newColumns, 0, columnCount);
+		columns = newColumns;
+	}
+	columns [columnCount] = column;
+	columnCount++;
+}
+
+void createItem (TableItem item, int index) {
+	if (index == -1) index = itemCount;
+	if (!(0 <= index && index <= itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	item.createWidget ();
+	int items = OS.ItemsControl_Items (handle);
+	OS.ItemCollection_Insert (items, index, item.handle);
+	int count = OS.ItemCollection_Count (items);
+	OS.GCHandle_Free (items);
+	if (itemCount == count) error (SWT.ERROR_ITEM_NOT_ADDED);
+	itemCount++;
+}
+
+int defaultBackground () {
+	return display.getSystemColor (SWT.COLOR_LIST_BACKGROUND).handle;
+}
+
+int defaultForeground () {
+	return display.getSystemColor (SWT.COLOR_LIST_FOREGROUND).handle;
+}
+
+void deregister () {
+	super.deregister ();
+	display.removeWidget (parentingHandle);
+}
+
+/**
+ * Deselects the items at the given zero-relative indices in the receiver.
+ * If the item at the given zero-relative index in the receiver 
+ * is selected, it is deselected.  If the item at the index
+ * was not selected, it remains deselected. Indices that are out
+ * of range and duplicate indices are ignored.
+ *
+ * @param indices the array of indices for the items to deselect
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the set of indices is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void deselect (int [] indices) {
+	checkWidget ();
+	if (indices == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (indices.length == 0) return;
+	int items = OS.ItemsControl_Items (handle);
+	ignoreSelection = true;
+	for (int i=0; i<indices.length; i++) {
+		int index = indices [i];
+		if (!(0 <= index && index < itemCount)) continue;
+		int item = OS.ItemCollection_GetItemAt (items, index);
+		OS.ListBoxItem_IsSelected (item, false);
+		OS.GCHandle_Free (item);
+	}
+	ignoreSelection = false;
+	OS.GCHandle_Free (items);
+}
+
+/**
+ * Deselects the item at the given zero-relative index in the receiver.
+ * If the item at the index was already deselected, it remains
+ * deselected. Indices that are out of range are ignored.
+ *
+ * @param index the index of the item to deselect
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void deselect (int index) {
+	checkWidget ();
+	if (!(0 <= index && index < itemCount)) return;
+	int items = OS.ItemsControl_Items (handle); 
+	int item = OS.ItemCollection_GetItemAt (items, index);
+	ignoreSelection = true;
+	OS.ListBoxItem_IsSelected (item, false);
+	ignoreSelection = false;
+	OS.GCHandle_Free (item);
+	OS.GCHandle_Free (items);
+}
+
+/**
+ * Deselects the items at the given zero-relative indices in the receiver.
+ * If the item at the given zero-relative index in the receiver 
+ * is selected, it is deselected.  If the item at the index
+ * was not selected, it remains deselected.  The range of the
+ * indices is inclusive. Indices that are out of range are ignored.
+ *
+ * @param start the start index of the items to deselect
+ * @param end the end index of the items to deselect
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void deselect (int start, int end) {
+	checkWidget ();
+	if (start <= 0 && end >= itemCount - 1) {
+		deselectAll ();
+	} else {
+		start = Math.max (0, start);
+		end = Math.min (end, itemCount - 1);
+		int items = OS.ItemsControl_Items (handle);
+		ignoreSelection = true;
+		for (int i=start; i<=end; i++) {
+			int item = OS.ItemCollection_GetItemAt (items, i);
+			OS.ListBoxItem_IsSelected (item, false);
+			OS.GCHandle_Free (item);
+		}
+		ignoreSelection = false;
+		OS.GCHandle_Free (items);
+	}
+}
+
+/**
+ * Deselects all selected items in the receiver.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void deselectAll () {
+	checkWidget ();
+	ignoreSelection = true;
+	OS.ListBox_UnselectAll(handle);
+	ignoreSelection = false;
+}
+
+void destroyItem (TableColumn column) {
+	int gvColumns = OS.GridView_Columns (gridViewHandle);
+	int index = OS.GridViewColumnCollection_IndexOf (gvColumns, column.handle);
+    boolean removed = OS.GridViewColumnCollection_Remove (gvColumns, column.handle);
+    OS.GCHandle_Free (gvColumns);
+    if (!removed) error (SWT.ERROR_ITEM_NOT_REMOVED);
+    int arrayIndex = -1;
+    for (int i = 0; i < columnCount; i++) {
+    	TableColumn tc = columns [i];
+    	if (tc.equals(column)) {
+    		arrayIndex = i;
+    		break;
+    	}
+    }
+	columnCount--;
+	columns [arrayIndex] = null;
+	if (arrayIndex < columnCount) System.arraycopy (columns, arrayIndex+1, columns, arrayIndex, columnCount - arrayIndex);
+	if (columnCount == 0) {
+		createDefaultColumn ();
+	}
+	int items = OS.ItemsControl_Items (handle);
+    for (int i=0; i<itemCount; i++) {
+		TableItem item = getItem (items, i, false);
+		if (item != null) item.columnRemoved (index);
+	}
+    OS.GCHandle_Free (items);
+}
+
+void destroyItem (TableItem item) {
+	int items = OS.ItemsControl_Items (handle);
+	ignoreSelection = true;
+	OS.ItemCollection_Remove (items, item.handle);
+	ignoreSelection = false;
+	int count = OS.ItemCollection_Count (items);
+	OS.GCHandle_Free (items);
+	if (itemCount == count) error (SWT.ERROR_ITEM_NOT_REMOVED);
+	itemCount--;
+}
+
+int findPartByType (int source, int type) {
+	if (OS.Type_IsInstanceOfType (type, source)) return source;
+	int parent = OS.VisualTreeHelper_GetParent(source);
+	if (parent == 0) return 0;
+	int result = findPartByType(parent, type);
+	if (result != parent) OS.GCHandle_Free(parent);
+	return result;
+}
+
+/**
+ * Returns the column at the given, zero-relative index in the
+ * receiver. Throws an exception if the index is out of range.
+ * Columns are returned in the order that they were created.
+ * If no <code>TableColumn</code>s were created by the programmer,
+ * this method will throw <code>ERROR_INVALID_RANGE</code> despite
+ * the fact that a single column of data may be visible in the table.
+ * This occurs when the programmer uses the table like a list, adding
+ * items but never creating a column.
+ *
+ * @param index the index of the column to return
+ * @return the column at the given index
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Table#getColumnOrder()
+ * @see Table#setColumnOrder(int[])
+ * @see TableColumn#getMoveable()
+ * @see TableColumn#setMoveable(boolean)
+ * @see SWT#Move
+ */
+public TableColumn getColumn (int index) {
+	checkWidget ();
+	if (!(0 <= index && index < columnCount)) error (SWT.ERROR_INVALID_RANGE);
+	return columns [index];
+}
+
+TableColumn getColumn (int columns, int index) {
+	int gridColumn = OS.GridViewColumnCollection_default (columns, index);
+	int header = OS.GridViewColumn_Header (gridColumn);
+	TableColumn column = (TableColumn) display.getWidget (header);
+	OS.GCHandle_Free (header);
+	OS.GCHandle_Free (gridColumn);
+	return column;
+}
+
+/**
+ * Returns the number of columns contained in the receiver.
+ * If no <code>TableColumn</code>s were created by the programmer,
+ * this value is zero, despite the fact that visually, one column
+ * of items may be visible. This occurs when the programmer uses
+ * the table like a list, adding items but never creating a column.
+ *
+ * @return the number of columns
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getColumnCount () {
+	checkWidget ();
+    return columnCount;
+}
+
+/**
+ * Returns an array of zero-relative integers that map
+ * the creation order of the receiver's items to the
+ * order in which they are currently being displayed.
+ * <p>
+ * Specifically, the indices of the returned array represent
+ * the current visual order of the items, and the contents
+ * of the array represent the creation order of the items.
+ * </p><p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the current visual order of the receiver's items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Table#setColumnOrder(int[])
+ * @see TableColumn#getMoveable()
+ * @see TableColumn#setMoveable(boolean)
+ * @see SWT#Move
+ * 
+ * @since 3.1
+ */
+public int[] getColumnOrder () {
+	checkWidget ();
+	int [] order = new int [columnCount];
+	for (int i=0; i<order.length; i++) order [i] = i;
+	int gvColumns = OS.GridView_Columns (gridViewHandle);
+	for (int i = 0; i < order.length; i++) {
+		TableColumn column = columns [i];
+		int index = OS.IList_IndexOf (gvColumns, column.handle);
+		order [index] = i;	
+	}
+	OS.GCHandle_Free (gvColumns);
+	return order;
+}
+
+/**
+ * Returns an array of <code>TableColumn</code>s which are the
+ * columns in the receiver.  Columns are returned in the order
+ * that they were created.  If no <code>TableColumn</code>s were
+ * created by the programmer, the array is empty, despite the fact
+ * that visually, one column of items may be visible. This occurs
+ * when the programmer uses the table like a list, adding items but
+ * never creating a column.
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the items in the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Table#getColumnOrder()
+ * @see Table#setColumnOrder(int[])
+ * @see TableColumn#getMoveable()
+ * @see TableColumn#setMoveable(boolean)
+ * @see SWT#Move
+ */
+public TableColumn [] getColumns () {
+	checkWidget ();
+	TableColumn [] result = new TableColumn [columnCount];
+	for (int i = 0; i < result.length; i++) {
+		result [i] = columns [i];
+	}
+	return result;
+}
+
+/**
+ * Returns the width in pixels of a grid line.
+ *
+ * @return the width of a grid line in pixels
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getGridLineWidth () {
+	checkWidget ();
+	return 0; //FIXME: No grid lines yet
+}
+
+/**
+ * Returns the height of the receiver's header 
+ *
+ * @return the height of the header or zero if the header is not visible
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.0 
+ */
+public int getHeaderHeight () {
+	checkWidget ();
+	int columns = OS.GridView_Columns (gridViewHandle);
+	int column = OS.GridViewColumnCollection_default (columns, 0);
+	int height = 0;
+	int header = OS.GridViewColumn_Header (column);
+	if (header != 0) {
+		height = (int) OS.FrameworkElement_ActualHeight (header);
+		if (height == 0) { 
+			updateLayout (header);
+			height = (int) OS.FrameworkElement_ActualHeight (header);
+		}
+		OS.GCHandle_Free (header);
+	}
+	OS.GCHandle_Free (column);
+	OS.GCHandle_Free (columns);
+	return height;
+}
+
+/**
+ * Returns <code>true</code> if the receiver's header is visible,
+ * and <code>false</code> otherwise.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, this method
+ * may still indicate that it is considered visible even though
+ * it may not actually be showing.
+ * </p>
+ *
+ * @return the receiver's header's visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getHeaderVisible () {
+	checkWidget ();
+	int columns = OS.GridView_Columns (gridViewHandle);
+	int column = OS.GridViewColumnCollection_default (columns, 0);
+	int header = OS.GridViewColumn_Header (column);
+	boolean visible = OS.UIElement_Visibility (header) == OS.Visibility_Visible;
+	OS.GCHandle_Free (header);
+	OS.GCHandle_Free (column);
+	OS.GCHandle_Free (columns);
+	return visible;
+}
+
+/**
+ * Returns the item at the given, zero-relative index in the
+ * receiver. Throws an exception if the index is out of range.
+ *
+ * @param index the index of the item to return
+ * @return the item at the given index
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TableItem getItem (int index) {
+	checkWidget ();
+	if (!(0 <= index && index < itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	int items = OS.ItemsControl_Items (handle);
+	TableItem item = getItem (items, index, true); 
+	OS.GCHandle_Free (items);
+	return item;
+}
+
+TableItem getItem (int items, int index, boolean create) {
+	int item = OS.ItemCollection_GetItemAt (items, index);
+	TableItem result = getItem (item, create);
+	OS.GCHandle_Free (item);
+	return result;
+}
+
+TableItem getItem (int item, boolean create) {
+	int tag = OS.FrameworkElement_Tag (item);
+	if (tag != 0) {
+		int contentValue = OS.IntPtr_ToInt32 (tag);
+		OS.GCHandle_Free (tag);
+		return (TableItem) OS.JNIGetObject (contentValue);
+	}
+	if (create) {
+		int itemHandle = OS.GCHandle_Alloc (item);
+		return new TableItem (this, SWT.NONE, 0, itemHandle);
+	}
+	return null;
+}
+
+/**
+ * Returns the item at the given point in the receiver
+ * or null if no such item exists. The point is in the
+ * coordinate system of the receiver.
+ * <p>
+ * The item that is returned represents an item that could be selected by the user.
+ * For example, if selection only occurs in items in the first column, then null is 
+ * returned if the point is outside of the item. 
+ * Note that the SWT.FULL_SELECTION style hint, which specifies the selection policy,
+ * determines the extent of the selection.
+ * </p>
+ *
+ * @param point the point used to locate the item
+ * @return the item at the given point, or null if the point is not in a selectable item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TableItem getItem (Point point) {
+	checkWidget ();
+	if (point == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int pt = OS.gcnew_Point (point.x, point.y);
+	int input = OS.UIElement_InputHitTest (handle, pt);
+	OS.GCHandle_Free (pt);
+	if (input == 0) return null;
+	Widget widget = display.getWidget (input);
+	OS.GCHandle_Free (input);
+	if (widget instanceof TableItem) {
+		return (TableItem) widget;
+	}
+	return null;
+}
+
+/**
+ * Returns the number of items contained in the receiver.
+ *
+ * @return the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemCount () {
+	checkWidget ();
+	return itemCount;
+}
+
+/**
+ * Returns the height of the area which would be used to
+ * display <em>one</em> of the items in the receiver.
+ *
+ * @return the height of one item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemHeight () {
+	checkWidget ();
+	//FIXME what is the default size?
+	if (itemCount == 0) return 16;
+	int items = OS.ItemsControl_Items (handle);
+	int item = OS.ItemCollection_GetItemAt (items, 0);
+	double height = OS.FrameworkElement_ActualHeight (item);
+	OS.GCHandle_Free (item);
+	OS.GCHandle_Free (items);
+	return height != 0 ? (int) height : 16;
+}
+
+/**
+ * Returns a (possibly empty) array of <code>TableItem</code>s which
+ * are the items in the receiver. 
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the items in the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TableItem [] getItems () {
+	checkWidget ();
+	TableItem [] result = new TableItem [itemCount];
+	int items = OS.ItemsControl_Items (handle);
+	for (int i=0; i<itemCount; i++) {
+		result [i] = getItem (items, i, true);
+	}
+	OS.GCHandle_Free (items);
+	return result;
+}
+
+/**
+ * Returns <code>true</code> if the receiver's lines are visible,
+ * and <code>false</code> otherwise. Note that some platforms draw 
+ * grid lines while others may draw alternating row colors.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, this method
+ * may still indicate that it is considered visible even though
+ * it may not actually be showing.
+ * </p>
+ *
+ * @return the visibility state of the lines
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getLinesVisible () {
+	checkWidget ();
+	//TODO
+	return linesVisible; 
+}
+
+/**
+ * Returns an array of <code>TableItem</code>s that are currently
+ * selected in the receiver. The order of the items is unspecified.
+ * An empty array indicates that no items are selected.
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its selection, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ * @return an array representing the selection
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TableItem [] getSelection () {
+	checkWidget ();
+	int selected = OS.ListBox_SelectedItems (handle);
+	int enumerator = OS.IList_GetEnumerator (selected);
+	int count = OS.ICollection_Count (selected);
+	TableItem [] result = new TableItem [count];
+	int index = 0;
+    while (OS.IEnumerator_MoveNext (enumerator)) {
+    	int item = OS.IEnumerator_Current (enumerator);
+    	result [index++] = getItem (item, true);
+		OS.GCHandle_Free (item);
+	}
+    OS.GCHandle_Free (enumerator);
+	OS.GCHandle_Free (selected);
+	return result;
+}
+
+/**
+ * Returns the number of selected items contained in the receiver.
+ *
+ * @return the number of selected items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelectionCount () {
+	checkWidget ();
+	int selected = OS.ListBox_SelectedItems (handle);
+	int count = OS.ICollection_Count (selected);
+	OS.GCHandle_Free (selected);
+	return count;
+}
+
+/**
+ * Returns the zero-relative index of the item which is currently
+ * selected in the receiver, or -1 if no item is selected.
+ *
+ * @return the index of the selected item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelectionIndex () {
+	checkWidget ();
+	return OS.Selector_SelectedIndex (handle);
+}
+
+/**
+ * Returns the zero-relative indices of the items which are currently
+ * selected in the receiver. The order of the indices is unspecified.
+ * The array is empty if no items are selected.
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its selection, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ * @return the array of indices of the selected items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int [] getSelectionIndices () {
+	checkWidget ();
+	int items = OS.ItemsControl_Items (handle);
+	int list = OS.ListBox_SelectedItems (handle);
+	int enumerator = OS.IList_GetEnumerator (list);
+	int count = OS.ICollection_Count (list);
+	int [] indices = new int [count];
+	int index = 0;
+    while (OS.IEnumerator_MoveNext (enumerator)) {
+    	int item = OS.IEnumerator_Current (enumerator);
+		indices [index++] = OS.ItemCollection_IndexOf (items, item);
+		OS.GCHandle_Free (item);
+	}
+    OS.GCHandle_Free (enumerator);
+	OS.GCHandle_Free (list);
+	OS.GCHandle_Free (items);
+	sortAscending (indices);
+	return indices;
+}
+
+/**
+ * Returns the column which shows the sort indicator for
+ * the receiver. The value may be null if no column shows
+ * the sort indicator.
+ *
+ * @return the sort indicator 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setSortColumn(TableColumn)
+ * 
+ * @since 3.2
+ */
+public TableColumn getSortColumn () {
+	checkWidget ();
+	//TODO
+	return null;
+}
+
+/**
+ * Returns the direction of the sort indicator for the receiver. 
+ * The value will be one of <code>UP</code>, <code>DOWN</code> 
+ * or <code>NONE</code>.
+ *
+ * @return the sort direction
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setSortDirection(int)
+ * 
+ * @since 3.2
+ */
+public int getSortDirection () {
+	checkWidget ();
+	//TODO
+	return -1;
+}
+
+/**
+ * Returns the zero-relative index of the item which is currently
+ * at the top of the receiver. This index can change when items are
+ * scrolled or new items are added or removed.
+ *
+ * @return the index of the top item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getTopIndex () {
+	checkWidget ();
+	int items = OS.ItemsControl_Items (handle);
+	int item = OS.ItemCollection_GetItemAt (items, 0);
+	OS.GCHandle_Free (items);
+	int virtualizingStackPanel = OS.VisualTreeHelper_GetParent (item);
+	OS.GCHandle_Free (item);
+	int topIndex = 0;
+	if (virtualizingStackPanel != 0) {
+		topIndex = (int) OS.VirtualizingStackPanel_VerticalOffset (virtualizingStackPanel);
+		OS.GCHandle_Free (virtualizingStackPanel); 
+	}
+	return topIndex;
+}
+
+boolean hasItems () {
+	return true;
+}
+
+void HandleChecked (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if (ignoreSelection) return;
+	int source = OS.RoutedEventArgs_Source (e);
+	TableItem item = (TableItem) display.getWidget (source);
+	OS.GCHandle_Free (source);
+	if (item.grayed) {
+		int checkbox = item.findPart (0, CHECKBOX_PART_NAME);
+		if (checkbox != 0) {
+			OS.ToggleButton_IsCheckedNullSetter (checkbox);
+			OS.GCHandle_Free (checkbox);
+		}
+	}
+	item.checked = true;
+	Event event = new Event ();
+	event.item = item;
+	event.detail = SWT.CHECK;
+	sendEvent (SWT.Selection, event);
+}
+
+void HandleIndeterminate (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if (ignoreSelection) return;
+	int source = OS.RoutedEventArgs_Source (e);
+	TableItem item = (TableItem) display.getWidget (source);
+	OS.GCHandle_Free (source);
+	if (!item.grayed) {
+		int checkbox = item.findPart (0, CHECKBOX_PART_NAME);
+		if (checkbox != 0) {
+			OS.ToggleButton_IsChecked (checkbox, false);
+			OS.GCHandle_Free (checkbox);
+		}
+	}
+}
+
+void HandlePreviewKeyDown (int sender, int e) {
+	super.HandlePreviewKeyDown (sender, e);
+	if (!checkEvent (e)) return;
+	int key = OS.KeyEventArgs_Key (e);
+	if (key == OS.Key_Return) {
+		int source = OS.RoutedEventArgs_OriginalSource (e);
+		Widget widget = display.getWidget (source);
+		OS.GCHandle_Free (source);
+		if (widget instanceof TableItem) {
+			Event event = new Event ();
+			event.item = (TableItem)widget;
+			postEvent (SWT.DefaultSelection, event);
+		}
+	}
+}
+
+void HandleMouseDoubleClick (int sender, int e) {
+	if (!checkEvent (e)) return;
+	int source = OS.RoutedEventArgs_OriginalSource (e);
+	Widget widget = display.getWidget (source);
+	OS.GCHandle_Free (source);
+	if (widget instanceof TableItem) {
+		Event event = new Event ();
+		event.item = (TableItem)widget;
+		postEvent (SWT.DefaultSelection, event);
+	}
+}
+
+void HandleSelectionChanged (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if (ignoreSelection) return;
+	int item = 0;
+	int list = OS.SelectionChangedEventArgs_AddedItems (e);
+	if (list != 0) {
+		int count = OS.ICollection_Count (list);
+		if (count > 0) item	= OS.IList_default (list, count - 1);
+	}
+	OS.GCHandle_Free (list);
+	if (item == 0) {
+		list = OS.SelectionChangedEventArgs_RemovedItems (e);
+		int count = OS.ICollection_Count (list);
+		if (count > 0) item	= OS.IList_default (list, count - 1);
+		OS.GCHandle_Free (list);
+	}
+	if (item != 0) {
+		TableItem result = getItem (item, true);
+		OS.GCHandle_Free (item);
+		if (result != null) {
+			Event event = new Event ();
+			event.item = result;
+			postEvent (SWT.Selection, event);
+		}
+	}
+}
+
+void HandleUnchecked (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if (ignoreSelection) return;
+	int source = OS.RoutedEventArgs_Source (e);
+	TableItem item = (TableItem) display.getWidget (source);
+	OS.GCHandle_Free (source);
+	item.checked = false;
+	Event event = new Event ();
+	event.item = item;
+	event.detail = SWT.CHECK;
+	sendEvent (SWT.Selection, event);
+}
+
+void hookEvents () {
+	super.hookEvents ();
+	int handler = OS.gcnew_SelectionChangedEventHandler (jniRef, "HandleSelectionChanged");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.Selector_SelectionChanged (handle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_MouseButtonEventHandler (jniRef, "HandleMouseDoubleClick");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.Control_MouseDoubleClick (handle, handler);
+	OS.GCHandle_Free (handler);
+	if ((style & SWT.CHECK) != 0) {
+		/* Item events */
+		handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleChecked");
+		if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+		int event = OS.ToggleButton_CheckedEvent ();
+		OS.UIElement_AddHandler (handle, event, handler, false);
+		OS.GCHandle_Free (event);
+		OS.GCHandle_Free (handler);
+		handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleUnchecked");
+		if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+		event = OS.ToggleButton_UncheckedEvent ();
+		OS.UIElement_AddHandler (handle, event, handler, false);
+		OS.GCHandle_Free (event);
+		OS.GCHandle_Free (handler);
+		handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleIndeterminate");
+		if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+		event = OS.ToggleButton_IndeterminateEvent ();
+		OS.UIElement_AddHandler (handle, event, handler, false);
+		OS.GCHandle_Free (event);
+		OS.GCHandle_Free (handler);
+	}
+}
+
+/**
+ * Searches the receiver's list starting at the first column
+ * (index 0) until a column is found that is equal to the 
+ * argument, and returns the index of that column. If no column
+ * is found, returns -1.
+ *
+ * @param column the search column
+ * @return the index of the column
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the column is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int indexOf (TableColumn column) {
+	checkWidget ();
+	if (column == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int columns = OS.GridView_Columns (gridViewHandle);
+	int index = OS.GridViewColumnCollection_IndexOf (columns, column.handle);
+	OS.GCHandle_Free (columns);
+	return index;
+}
+
+/**
+ * Searches the receiver's list starting at the first item
+ * (index 0) until an item is found that is equal to the 
+ * argument, and returns the index of that item. If no item
+ * is found, returns -1.
+ *
+ * @param item the search item
+ * @return the index of the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int indexOf (TableItem item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int items = OS.ItemsControl_Items(handle);
+	int index = OS.ItemCollection_IndexOf(items, item.handle);
+	OS.GCHandle_Free (items);
+	return index;
+}
+
+/**
+ * Returns <code>true</code> if the item is selected,
+ * and <code>false</code> otherwise.  Indices out of
+ * range are ignored.
+ *
+ * @param index the index of the item
+ * @return the selection state of the item at the index
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean isSelected (int index) {
+	checkWidget ();
+	int items = OS.ItemsControl_Items (handle);
+	int item = OS.ItemCollection_GetItemAt (items, index);
+	boolean result = OS.ListBoxItem_IsSelected (item);
+	OS.GCHandle_Free (item);
+	OS.GCHandle_Free (items);
+	return result;
+}
+
+void OnRender (int source, int dc) {
+	if (isDisposed ()) return;
+	int type =  OS.ListViewItem_typeid();
+	int itemHandle = findPartByType (source, type);
+	OS.GCHandle_Free (type);
+	TableItem item = getItem (itemHandle, true);
+	OS.GCHandle_Free (itemHandle);
+	if ((item.cached || (style & SWT.VIRTUAL) == 0) && item.rowHandle != 0) return;
+	checkData (item);
+	if (item.rowHandle == 0) {
+		int rowPresenterType = OS.GridViewRowPresenter_typeid ();
+		item.rowHandle = item.findRowPresenter (item.handle, rowPresenterType);
+		OS.GCHandle_Free (rowPresenterType);
+	}
+	int columns = columnCount == 0 ? 1 : columnCount;
+	item.updateCheck ();
+	for (int i=0; i<columns; i++) {
+		item.updateText (i);
+		item.updateImage (i);
+		item.updateBackground (i);
+		item.updateForeground (i);
+		item.updateFont (i);
+	}
+}
+
+int parentingHandle () {
+	return parentingHandle;
+}
+
+void register() {
+	super.register();
+	display.addWidget (parentingHandle, this);
+}
+
+void releaseChildren (boolean destroy) {
+	int items = OS.ItemsControl_Items (handle);
+	for (int i=0; i<itemCount; i++) {
+		TableItem item = getItem (items, i, false);
+		if (item != null && !item.isDisposed ()) item.release (false);
+	}
+	OS.GCHandle_Free (items);
+	int columns = OS.GridView_Columns (gridViewHandle);
+	for (int i=0; i<columnCount; i++) {
+		TableColumn column = getColumn(columns, i);
+		if (!column.isDisposed ()) column.release (false);
+	}
+	OS.GCHandle_Free (columns);
+	super.releaseChildren (destroy);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	OS.GCHandle_Free (gridViewHandle);
+	gridViewHandle = 0;
+	OS.GCHandle_Free (parentingHandle);
+	parentingHandle = 0;
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	columns = null;
+}
+
+/**
+ * Removes the items from the receiver's list at the given
+ * zero-relative indices.
+ *
+ * @param indices the array of indices of the items
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ *    <li>ERROR_NULL_ARGUMENT - if the indices array is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void remove (int [] indices) {
+	checkWidget ();
+	if (indices == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (indices.length == 0) return;
+	int [] newIndices = new int [indices.length];
+	System.arraycopy (indices, 0, newIndices, 0, indices.length);
+	sort (newIndices);
+	int start = newIndices [newIndices.length - 1], end = newIndices [0];
+	if (!(0 <= start && start <= end && end < itemCount)) {
+		error (SWT.ERROR_INVALID_RANGE);
+	}
+	int items = OS.ItemsControl_Items (handle);
+	ignoreSelection = true;
+	int lastIndex = -1;
+	for (int i = newIndices.length-1; i >= 0; i--) {
+		int index = newIndices [i];
+		if (index != lastIndex) {
+			TableItem item = getItem (items, index, false);
+			if (item != null && !item.isDisposed ()) item.release (false);
+			OS.ItemCollection_RemoveAt (items, index);
+			lastIndex = index;
+		}
+	}
+	ignoreSelection = false;
+	itemCount = OS.ItemCollection_Count (items);
+	OS.GCHandle_Free (items);
+}
+
+/**
+ * Removes the item from the receiver at the given
+ * zero-relative index.
+ *
+ * @param index the index for the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void remove (int index) {
+	checkWidget ();
+	if (!(0 <= index && index < itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	int items = OS.ItemsControl_Items (handle);
+	TableItem item = getItem (items, index, false);
+	if (item != null && !item.isDisposed ()) item.release (false);
+	ignoreSelection = true;
+	OS.ItemCollection_RemoveAt (items, index);
+	ignoreSelection = false;
+	itemCount = OS.ItemCollection_Count (items);
+	OS.GCHandle_Free (items);
+}
+
+/**
+ * Removes the items from the receiver which are
+ * between the given zero-relative start and end 
+ * indices (inclusive).
+ *
+ * @param start the start of the range
+ * @param end the end of the range
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if either the start or end are not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void remove (int start, int end) {
+	checkWidget ();
+	if (start > end) return;
+	if (!(0 <= start && start <= end && end < itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	if (start == 0 && end == itemCount - 1) {
+		removeAll ();
+		return;
+	} 
+	int items = OS.ItemsControl_Items (handle);
+	ignoreSelection = true;
+	for (int i = end; i >= start; i--) {
+		TableItem item = getItem (items, i, false);
+		if (item != null && !item.isDisposed ()) item.release (false);
+		OS.ItemCollection_RemoveAt (items, i);
+	}
+	ignoreSelection = false;
+	itemCount = OS.ItemCollection_Count (items);
+	OS.GCHandle_Free (items);
+}
+
+/**
+ * Removes all of the items from the receiver.
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void removeAll () {
+	checkWidget ();
+	int items = OS.ItemsControl_Items (handle);
+	for (int i = 0; i < itemCount; i++) {
+		TableItem item = getItem (items, i, false);
+		if (item != null && !item.isDisposed ()) item.release (false);
+	}
+	
+	ignoreSelection = true;
+	OS.ItemCollection_Clear (items);
+	ignoreSelection = false;
+	itemCount = OS.ItemCollection_Count (items);
+	OS.GCHandle_Free (items);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the user changes the receiver's selection.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener(SelectionListener)
+ */
+public void removeSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+/**
+ * Selects the items at the given zero-relative indices in the receiver.
+ * The current selection is not cleared before the new items are selected.
+ * <p>
+ * If the item at a given index is not selected, it is selected.
+ * If the item at a given index was already selected, it remains selected.
+ * Indices that are out of range and duplicate indices are ignored.
+ * If the receiver is single-select and multiple indices are specified,
+ * then all indices are ignored.
+ * </p>
+ *
+ * @param indices the array of indices for the items to select
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array of indices is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Table#setSelection(int[])
+ */
+public void select (int [] indices) {
+	checkWidget ();
+	if (indices == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int length = indices.length;
+	if (length == 0 || ((style & SWT.SINGLE) != 0 && length > 1)) return;
+	ignoreSelection = true;
+	int items = OS.ItemsControl_Items (handle);
+	for (int i = 0; i < indices.length; i++) {
+		if (!(0 <= indices[i] && indices[i] < itemCount)) continue;
+		int item = OS.ItemCollection_GetItemAt (items, indices[i]);
+		OS.ListBoxItem_IsSelected (item, true);
+		OS.GCHandle_Free (item);
+	}
+	OS.GCHandle_Free (items);
+	ignoreSelection = false;
+}
+
+/**
+ * Selects the item at the given zero-relative index in the receiver. 
+ * If the item at the index was already selected, it remains
+ * selected. Indices that are out of range are ignored.
+ *
+ * @param index the index of the item to select
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void select (int index) {
+	checkWidget ();
+	if (!(0 <= index && index < itemCount)) return;
+	int items = OS.ItemsControl_Items (handle); 
+	int item = OS.ItemCollection_GetItemAt (items, index);
+	ignoreSelection = true;
+	OS.ListBoxItem_IsSelected (item, true);
+	ignoreSelection = false;
+	OS.GCHandle_Free (item);
+	OS.GCHandle_Free (items);
+}
+
+/**
+ * Selects the items in the range specified by the given zero-relative
+ * indices in the receiver. The range of indices is inclusive.
+ * The current selection is not cleared before the new items are selected.
+ * <p>
+ * If an item in the given range is not selected, it is selected.
+ * If an item in the given range was already selected, it remains selected.
+ * Indices that are out of range are ignored and no items will be selected
+ * if start is greater than end.
+ * If the receiver is single-select and there is more than one item in the
+ * given range, then all indices are ignored.
+ * </p>
+ *
+ * @param start the start of the range
+ * @param end the end of the range
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Table#setSelection(int,int)
+ */
+public void select (int start, int end) {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0 && start != end) return;
+	if (start <= 0 && end >= itemCount - 1) {
+		selectAll ();
+	} else {
+		start = Math.max (0, start);
+		end = Math.min (end, itemCount - 1);
+		int items = OS.ItemsControl_Items (handle); 
+		ignoreSelection = true;
+		for (int i=start; i<=end; i++) {
+			int item = OS.ItemCollection_GetItemAt (items, i);
+			OS.ListBoxItem_IsSelected (item, true);
+			OS.GCHandle_Free (item);
+		}
+		ignoreSelection = false;
+		OS.GCHandle_Free (items);
+	}
+}
+
+/**
+ * Selects all of the items in the receiver.
+ * <p>
+ * If the receiver is single-select, do nothing.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void selectAll () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) return;
+	ignoreSelection = true;
+	OS.ListBox_SelectAll (handle);
+	ignoreSelection = false;
+}
+
+void setBackgroundBrush(int brush) {
+	if (brush != 0) {
+		OS.Control_Background (handle, brush);
+	} else {
+		int property = OS.Control_BackgroundProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+	}
+}
+
+int setBounds (int x, int y, int width, int height, int flags) {
+	int result = super.setBounds (x, y, width, height, flags);
+	if ((result & RESIZED) != 0) {
+		if (columnCount == 0) {
+			int columns = OS.GridView_Columns (gridViewHandle);
+			int column = OS.GridViewColumnCollection_default (columns, 0);
+			OS.GridViewColumn_Width (column, width);
+			OS.GCHandle_Free (column);
+			OS.GCHandle_Free (columns);
+		}
+		OS.FrameworkElement_Width (handle, width);
+		OS.FrameworkElement_Height (handle, height);
+	}
+	return result;
+}
+
+/**
+ * Sets the order that the items in the receiver should 
+ * be displayed in to the given argument which is described
+ * in terms of the zero-relative ordering of when the items
+ * were added.
+ *
+ * @param order the new order to display the items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item order is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item order is not the same length as the number of items</li>
+ * </ul>
+ * 
+ * @see Table#getColumnOrder()
+ * @see TableColumn#getMoveable()
+ * @see TableColumn#setMoveable(boolean)
+ * @see SWT#Move
+ * 
+ * @since 3.1
+ */
+public void setColumnOrder (int [] order) {
+	checkWidget ();
+	if (order == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (order.length != columnCount) error (SWT.ERROR_INVALID_ARGUMENT);
+	int [] oldOrder = getColumnOrder ();
+	boolean reorder = false;
+	boolean [] seen = new boolean [columnCount];
+	for (int i=0; i<order.length; i++) {
+		int index = order [i];
+		if (index < 0 || index >= columnCount) error (SWT.ERROR_INVALID_ARGUMENT);
+		if (seen [index]) error (SWT.ERROR_INVALID_ARGUMENT);
+		seen [index] = true;
+		if (order [i] != oldOrder [i]) reorder = true;
+	}
+	if (!reorder) return;
+	int gvColumns = OS.GridView_Columns (gridViewHandle);
+	for (int i = 0; i < order.length; i++) {
+		TableColumn column = columns [order [i]];
+		int index = OS.IList_IndexOf (gvColumns, column.handle);
+		if (index != i) OS.ObservableCollectionGridViewColumn_Move (gvColumns, index, i);	
+	}
+	OS.GCHandle_Free (gvColumns);
+}
+
+void setFont (int font, double size) {
+	if (font != 0) {
+		int fontFamily = OS.Typeface_FontFamily( font);
+		int style = OS.Typeface_Style (font);
+		int weight = OS.Typeface_Weight (font);
+		int stretch = OS.Typeface_Stretch (font);
+		OS.Control_FontFamily (handle, fontFamily);
+		OS.Control_FontStyle (handle, style);
+		OS.Control_FontWeight (handle, weight);
+		OS.Control_FontStretch (handle, stretch);
+		OS.Control_FontSize (handle, size);
+		OS.GCHandle_Free (fontFamily);
+		OS.GCHandle_Free (style);
+		OS.GCHandle_Free (weight);
+		OS.GCHandle_Free (stretch);
+	} else {
+		int property = OS.Control_FontFamilyProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS.Control_FontStyleProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS.Control_FontWeightProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS.Control_FontStretchProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS.Control_FontSizeProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+	}
+}
+
+void setForegroundBrush (int brush) {
+	if (brush != 0) {
+		OS.Control_Foreground (handle, brush);
+	} else {
+		int property = OS.Control_ForegroundProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+	}
+}
+
+/**
+ * Marks the receiver's header as visible if the argument is <code>true</code>,
+ * and marks it invisible otherwise. 
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, marking
+ * it visible may not actually cause it to be displayed.
+ * </p>
+ *
+ * @param show the new visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setHeaderVisible (boolean show) {
+	checkWidget ();
+	int style = 0;
+	if (!show) {
+		style = OS.gcnew_Style ();
+		int dp = OS.UIElement_VisibilityProperty ();
+		int setter = OS.gcnew_SetterVisibility (dp, OS.Visibility_Collapsed);
+		int collection = OS.Style_Setters (style);
+		OS.SetterBaseCollection_Add (collection, setter);
+		OS.GCHandle_Free (collection);
+		OS.GCHandle_Free (setter);
+		OS.GCHandle_Free (dp);
+	}
+	OS.GridView_ColumnHeaderContainerStyle (gridViewHandle, style);
+	if (style != 0) OS.GCHandle_Free (style);
+	for (int i=0; i<columnCount; i++) {
+		TableColumn column = getColumn (i);
+		column.updateImage ();
+		column.updateText ();
+	}
+}
+
+/**
+ * Sets the number of items contained in the receiver.
+ *
+ * @param count the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.0
+ */
+public void setItemCount (int count) {
+	checkWidget ();
+	count = Math.max (0, count);
+	if (count == itemCount) return;
+	int index = itemCount - 1;
+	int items = OS.ItemsControl_Items (handle);
+	while (index >= count) {
+		TableItem item = getItem (items, index, false);
+		if (item != null) {
+			if (!item.isDisposed()) item.release (true);
+		} else {
+			OS.ItemCollection_RemoveAt (items, index);
+		}
+		index--;
+	}
+	if (OS.ItemCollection_Count (items) > count) error (SWT.ERROR_ITEM_NOT_REMOVED);
+	if ((style & SWT.VIRTUAL) != 0) {
+		for (int i=itemCount; i<count; i++) {
+			int item = OS.gcnew_ListViewItem ();
+			if (item == 0) error (SWT.ERROR_NO_HANDLES);
+			OS.ItemCollection_Add (items, item);
+			OS.GCHandle_Free (item);
+		}
+	} else {
+		for (int i=itemCount; i<count; i++) {
+			new TableItem (this, SWT.NONE, i);
+		}
+	}
+	itemCount = OS.ItemCollection_Count (items);
+	OS.GCHandle_Free (items);
+	if (itemCount != count) error (SWT.ERROR_ITEM_NOT_ADDED);
+}
+
+/**
+ * Sets the height of the area which would be used to
+ * display <em>one</em> of the items in the table.
+ *
+ * @return the height of one item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+/*public*/ void setItemHeight (int itemHeight) {
+	checkWidget ();
+}
+
+/**
+ * Marks the receiver's lines as visible if the argument is <code>true</code>,
+ * and marks it invisible otherwise. Note that some platforms draw grid lines
+ * while others may draw alternating row colors.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, marking
+ * it visible may not actually cause it to be displayed.
+ * </p>
+ *
+ * @param show the new visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setLinesVisible (boolean show) {
+	checkWidget ();
+	linesVisible = show;
+}
+
+/**
+ * Selects the items at the given zero-relative indices in the receiver.
+ * The current selection is cleared before the new items are selected.
+ * <p>
+ * Indices that are out of range and duplicate indices are ignored.
+ * If the receiver is single-select and multiple indices are specified,
+ * then all indices are ignored.
+ * </p>
+ *
+ * @param indices the indices of the items to select
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array of indices is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Table#deselectAll()
+ * @see Table#select(int[])
+ */
+public void setSelection (int [] indices) {
+	checkWidget ();
+	if (indices == null) error (SWT.ERROR_NULL_ARGUMENT);
+	deselectAll ();
+	int length = indices.length;
+	if (length == 0 || ((style & SWT.SINGLE) != 0 && length > 1)) return;
+	select (indices);
+	//TODO
+//	int focusIndex = indices [0];
+//	if (focusIndex != -1) setFocusIndex (focusIndex);
+	showSelection ();
+}
+
+/**
+ * Sets the receiver's selection to the given item.
+ * The current selection is cleared before the new item is selected.
+ * <p>
+ * If the item is not in the receiver, then it is ignored.
+ * </p>
+ *
+ * @param item the item to select
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setSelection (TableItem  item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setSelection (new TableItem [] {item});
+}
+
+/**
+ * Sets the receiver's selection to be the given array of items.
+ * The current selection is cleared before the new items are selected.
+ * <p>
+ * Items that are not in the receiver are ignored.
+ * If the receiver is single-select and multiple items are specified,
+ * then all items are ignored.
+ * </p>
+ *
+ * @param items the array of items
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array of items is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if one of the items has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Table#deselectAll()
+ * @see Table#select(int[])
+ * @see Table#setSelection(int[])
+ */
+public void setSelection (TableItem [] items) {
+	checkWidget ();
+	if (items == null) error (SWT.ERROR_NULL_ARGUMENT);
+	deselectAll ();
+	int length = items.length;
+	if (length == 0 || ((style & SWT.SINGLE) != 0 && length > 1)) return;
+	for (int i=0; i<length; i++) {
+		int index = indexOf (items [i]);
+		if (index != -1) {
+			select (index);
+		}
+	}
+	//TODO
+//	if (focusIndex != -1) setFocusIndex (focusIndex);
+	showSelection ();
+}
+
+/**
+ * Selects the item at the given zero-relative index in the receiver. 
+ * The current selection is first cleared, then the new item is selected.
+ *
+ * @param index the index of the item to select
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Table#deselectAll()
+ * @see Table#select(int)
+ */
+public void setSelection (int index) {
+	checkWidget ();
+	deselectAll ();
+	select (index);
+	//TODO
+//	if (index != -1) setFocusIndex (index);
+	showSelection ();
+}
+
+/**
+ * Selects the items in the range specified by the given zero-relative
+ * indices in the receiver. The range of indices is inclusive.
+ * The current selection is cleared before the new items are selected.
+ * <p>
+ * Indices that are out of range are ignored and no items will be selected
+ * if start is greater than end.
+ * If the receiver is single-select and there is more than one item in the
+ * given range, then all indices are ignored.
+ * </p>
+ * 
+ * @param start the start index of the items to select
+ * @param end the end index of the items to select
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Table#deselectAll()
+ * @see Table#select(int,int)
+ */
+public void setSelection (int start, int end) {
+	checkWidget ();
+	deselectAll ();
+	if (end < 0 || start > end || ((style & SWT.SINGLE) != 0 && start != end)) return;
+	if (itemCount == 0 || start >= itemCount) return;
+	start = Math.max (0, start);
+	end = Math.min (end, itemCount - 1);
+	select (start, end);
+	//TODO
+//	setFocusIndex (start);
+	showSelection ();
+}
+
+/**
+ * Sets the column used by the sort indicator for the receiver. A null
+ * value will clear the sort indicator.  The current sort column is cleared 
+ * before the new column is set.
+ *
+ * @param column the column used by the sort indicator or <code>null</code>
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the column is disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setSortColumn (TableColumn column) {
+	checkWidget ();
+	if (column != null && column.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	//TODO
+//	if (sortColumn != null && !sortColumn.isDisposed ()) {
+//		sortColumn.setSortDirection (SWT.NONE);
+//	}
+//	sortColumn = column;
+//	if (sortColumn != null && sortDirection != SWT.NONE) {
+//		sortColumn.setSortDirection (sortDirection);
+//	}
+}
+
+/**
+ * Sets the direction of the sort indicator for the receiver. The value 
+ * can be one of <code>UP</code>, <code>DOWN</code> or <code>NONE</code>.
+ *
+ * @param direction the direction of the sort indicator 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setSortDirection (int direction) {
+	checkWidget ();
+	if ((direction & (SWT.UP | SWT.DOWN)) == 0 && direction != SWT.NONE) return;
+	//TODO
+//	sortDirection = direction;
+//	if (sortColumn != null && !sortColumn.isDisposed ()) {
+//		sortColumn.setSortDirection (direction);
+//	}
+}
+
+/**
+ * Sets the zero-relative index of the item which is currently
+ * at the top of the receiver. This index can change when items
+ * are scrolled or new items are added and removed.
+ *
+ * @param index the index of the top item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setTopIndex (int index) {
+	checkWidget (); 
+	//TODO
+}
+
+/**
+ * Shows the column.  If the column is already showing in the receiver,
+ * this method simply returns.  Otherwise, the columns are scrolled until
+ * the column is visible.
+ *
+ * @param column the column to be shown
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the column is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the column has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.0
+ */
+public void showColumn (TableColumn column) {
+	checkWidget ();
+	if (column == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (column.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT);
+	if (column.parent != this) return;
+	int index = indexOf (column);
+	if (!(0 <= index && index < columnCount)) return;
+	//TODO
+}
+
+/**
+ * Shows the item.  If the item is already showing in the receiver,
+ * this method simply returns.  Otherwise, the items are scrolled until
+ * the item is visible.
+ *
+ * @param item the item to be shown
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Table#showSelection()
+ */
+public void showItem (TableItem item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (item.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT);
+	OS.ListBox_ScrollIntoView (handle, item.handle);
+}
+
+/**
+ * Shows the selection.  If the selection is already showing in the receiver,
+ * this method simply returns.  Otherwise, the items are scrolled until
+ * the selection is visible.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Table#showItem(TableItem)
+ */
+public void showSelection () {
+	checkWidget (); 
+	int itemCollection = OS.ItemsControl_Items (handle);
+	int list = OS.ListBox_SelectedItems (handle);
+	int enumerator = OS.IList_GetEnumerator (list);
+	if (OS.IEnumerator_MoveNext (enumerator)) {
+		int item = OS.IEnumerator_Current (enumerator);
+	    OS.ListBox_ScrollIntoView (handle, item);
+		OS.GCHandle_Free (item);
+	}
+    OS.GCHandle_Free (enumerator);
+	OS.GCHandle_Free (list);
+	OS.GCHandle_Free (itemCollection);
+}
+
+int topHandle () {
+	return parentingHandle;
+}
+
+void updateMoveable () {
+	int columns = OS.GridView_Columns (gridViewHandle);
+	boolean moveable = true;
+	for (int i = 0; moveable && i < columnCount; i++) {
+		TableColumn column = getColumn (columns, i);
+		if (!column.moveable) moveable = false;
+	}
+	OS.GCHandle_Free (columns);
+	OS.GridView_AllowsColumnReorder (gridViewHandle, moveable);
+} 
+
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TableColumn.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TableColumn.java
new file mode 100644
index 0000000..dd5fdd3
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TableColumn.java
@@ -0,0 +1,644 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+ 
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * Instances of this class represent a column in a table widget.
+ * <p><dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>LEFT, RIGHT, CENTER</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd> Move, Resize, Selection</dd>
+ * </dl>
+ * </p><p>
+ * Note: Only one of the styles LEFT, RIGHT and CENTER may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#table">Table, TableItem, TableColumn snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class TableColumn extends Item {
+	static final int IMAGE_PART = 0;
+	static final int TEXT_PART = 1;
+	int headerHandle, stringHandle;
+	boolean moveable, resizable;
+	Table parent;
+
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Table</code>) and a style value
+ * describing its behavior and appearance. The item is added
+ * to the end of the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#LEFT
+ * @see SWT#RIGHT
+ * @see SWT#CENTER
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TableColumn (Table parent, int style) {
+	super (parent, checkStyle (style));
+	resizable = true;
+	this.parent = parent;
+	parent.createItem (this, parent.getColumnCount ());
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Table</code>), a style value
+ * describing its behavior and appearance, and the index
+ * at which to place it in the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ * <p>
+ * Note that due to a restriction on some platforms, the first column
+ * is always left aligned.
+ * </p>
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ * @param index the zero-relative index to store the receiver in its parent
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the parent (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#LEFT
+ * @see SWT#RIGHT
+ * @see SWT#CENTER
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TableColumn (Table parent, int style, int index) {
+	super (parent, checkStyle (style));
+	resizable = true;
+	this.parent = parent;
+	parent.createItem (this, index);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is moved or resized, by sending
+ * it one of the messages defined in the <code>ControlListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ControlListener
+ * @see #removeControlListener
+ */
+public void addControlListener(ControlListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Resize,typedListener);
+	addListener (SWT.Move,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is called when the column header is selected.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the control is selected by the user
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+static int checkStyle (int style) {
+	return checkBits (style, SWT.LEFT, SWT.CENTER, SWT.RIGHT, 0, 0, 0);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+void createHandle () {
+	handle = OS.gcnew_GridViewColumn ();
+	if (handle == 0) SWT.error (SWT.ERROR_NO_HANDLES);
+	headerHandle = OS.gcnew_GridViewColumnHeader ();
+	OS.GridViewColumn_Header (handle, headerHandle);
+}
+
+void deregister () {
+	display.removeWidget (headerHandle);
+}
+
+void destroyWidget () {
+	parent.destroyItem (this);
+	releaseHandle ();
+}
+
+int findPart (String part) {
+	updateLayout (headerHandle);
+	int headerTemplate = OS.Control_Template (headerHandle);
+	int name = createDotNetString ("HeaderContent", false);
+	int contentPresenter = OS.FrameworkTemplate_FindName (headerTemplate, name, headerHandle);
+	OS.GCHandle_Free (name);
+	OS.GCHandle_Free (headerTemplate);
+	if (contentPresenter == 0) return 0;
+	int dataTemplate = OS.GridViewColumn_HeaderTemplate (handle);
+	name = createDotNetString (part, false);
+	int result = OS.FrameworkTemplate_FindName (dataTemplate, name, contentPresenter);
+	OS.GCHandle_Free (contentPresenter);
+	OS.GCHandle_Free (dataTemplate);
+	OS.GCHandle_Free (name);
+	return result;
+}
+
+/**
+ * Returns a value which describes the position of the
+ * text or image in the receiver. The value will be one of
+ * <code>LEFT</code>, <code>RIGHT</code> or <code>CENTER</code>.
+ *
+ * @return the alignment 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getAlignment () {
+	checkWidget ();
+	if ((style & SWT.LEFT) != 0) return SWT.LEFT;
+	if ((style & SWT.CENTER) != 0) return SWT.CENTER;
+	if ((style & SWT.RIGHT) != 0) return SWT.RIGHT;
+	return SWT.LEFT;
+}
+
+String getNameText () {
+	return getText ();
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>Table</code>.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Table getParent () {
+	checkWidget ();
+	return parent;
+}
+
+/**
+ * Gets the moveable attribute. A column that is
+ * not moveable cannot be reordered by the user 
+ * by dragging the header but may be reordered 
+ * by the programmer.
+ *
+ * @return the moveable attribute
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Table#getColumnOrder()
+ * @see Table#setColumnOrder(int[])
+ * @see TableColumn#setMoveable(boolean)
+ * @see SWT#Move
+ * 
+ * @since 3.1
+ */
+public boolean getMoveable () {
+	checkWidget ();
+	return moveable;
+}
+
+/**
+ * Gets the resizable attribute. A column that is
+ * not resizable cannot be dragged by the user but
+ * may be resized by the programmer.
+ *
+ * @return the resizable attribute
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getResizable () {
+	checkWidget ();
+	return resizable;
+}
+
+/**
+ * Returns the receiver's tool tip text, or null if it has
+ * not been set.
+ *
+ * @return the receiver's tool tip text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public String getToolTipText () {
+	checkWidget ();
+	int strPtr = OS.FrameworkElement_ToolTip (headerHandle);
+	String string = createJavaString (strPtr);
+	OS.GCHandle_Free (strPtr);
+	return string;
+}
+
+/**
+ * Gets the width of the receiver.
+ *
+ * @return the width
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getWidth () {
+	checkWidget ();
+	return (int) OS.GridViewColumn_ActualWidth (handle);
+}
+
+void HandleClick (int sender, int e) {
+	if (!checkEvent (e)) return;
+	postEvent (SWT.Selection);
+}
+
+void HandleLoaded (int sender, int e) {
+	if (isDisposed ()) return;
+	updateImage ();
+	updateText ();
+}
+
+void HandleMouseDoubleClick (int sender, int e) {
+	if (!checkEvent (e)) return;
+	postEvent (SWT.DefaultSelection);
+}
+
+void HandleSizeChanged (int sender, int e) {
+	if (!checkEvent(e)) return;
+	sendEvent (SWT.Resize);
+}
+
+void hookEvents() {
+	super.hookEvents ();
+	int handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleLoaded");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.FrameworkElement_Loaded (headerHandle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleClick");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	int event = OS.ButtonBase_ClickEvent ();
+	OS.UIElement_AddHandler (headerHandle, event, handler, false);
+	OS.GCHandle_Free (event);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleMouseDoubleClick");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	event = OS.Control_MouseDoubleClickEvent ();
+	OS.UIElement_AddHandler (headerHandle, event, handler, false);
+	OS.GCHandle_Free (event);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleSizeChanged");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	event = OS.FrameworkElement_SizeChangedEvent ();
+	OS.UIElement_AddHandler (headerHandle, event, handler, false);
+	OS.GCHandle_Free (event);
+	OS.GCHandle_Free (handler);
+}
+
+/**
+ * Causes the receiver to be resized to its preferred size.
+ * For a composite, this involves computing the preferred size
+ * from its layout, if there is one.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ */
+public void pack () {
+	checkWidget ();
+	updateLayout (parent.handle);
+	double width = 0;
+	if (headerHandle != 0) {
+		int size = OS.UIElement_DesiredSize (headerHandle);
+		width = OS.Size_Width (size);
+		OS.GCHandle_Free (size);
+	}
+	int columnIndex = parent.indexOf (this);
+	int items = OS.ItemsControl_Items (parent.handle);
+	for (int i=0; i<parent.itemCount; i++) {
+		TableItem item = parent.getItem (items, i, false);
+		if (item != null) {
+			width = Math.max (width, item.computeWidth (columnIndex));
+		}
+	}
+	OS.GCHandle_Free (items);
+	OS.GridViewColumn_Width (handle, width);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (handle != 0) OS.GCHandle_Free (handle);
+	handle = 0;
+	OS.GCHandle_Free (headerHandle);
+	parent = null;
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	if (stringHandle != 0) OS.GCHandle_Free (stringHandle);
+	stringHandle = 0;
+}
+
+void register() {
+	display.addWidget (headerHandle, this);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is moved or resized.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ControlListener
+ * @see #addControlListener
+ */
+public void removeControlListener (ControlListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Move, listener);
+	eventTable.unhook (SWT.Resize, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+/**
+ * Controls how text and images will be displayed in the receiver.
+ * The argument should be one of <code>LEFT</code>, <code>RIGHT</code>
+ * or <code>CENTER</code>.
+ * <p>
+ * Note that due to a restriction on some platforms, the first column
+ * is always left aligned.
+ * </p>
+ * @param alignment the new alignment 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setAlignment (int alignment) {
+	checkWidget ();
+	if ((alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER)) == 0) return;
+	int index = parent.indexOf (this);
+	if (index == -1 || index == 0) return;
+	style &= ~(SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+	style |= alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+	//TODO
+}
+
+public void setImage (Image image) {
+	checkWidget ();
+	super.setImage (image);
+	updateImage ();
+}
+
+/**
+ * Sets the moveable attribute.  A column that is
+ * moveable can be reordered by the user by dragging
+ * the header. A column that is not moveable cannot be 
+ * dragged by the user but may be reordered 
+ * by the programmer.
+ *
+ * @param moveable the moveable attribute
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Table#setColumnOrder(int[])
+ * @see Table#getColumnOrder()
+ * @see TableColumn#getMoveable()
+ * @see SWT#Move
+ * 
+ * @since 3.1
+ */
+public void setMoveable (boolean moveable) {
+	checkWidget ();
+	this.moveable = moveable;
+	parent.updateMoveable ();
+}
+
+/**
+ * Sets the resizable attribute.  A column that is
+ * resizable can be resized by the user dragging the
+ * edge of the header.  A column that is not resizable 
+ * cannot be dragged by the user but may be resized 
+ * by the programmer.
+ *
+ * @param resizable the resize attribute
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setResizable (boolean resizable) {
+	checkWidget ();
+	this.resizable = resizable;
+}
+
+void setSortDirection (int direction) {
+	//TODO
+}
+
+public void setText (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (string.equals (text)) return;
+	text = string;
+	updateText ();
+}
+
+/**
+ * Sets the receiver's tool tip text to the argument, which
+ * may be null indicating that the default tool tip for the 
+ * control will be shown. For a control that has a default
+ * tool tip, such as the Tree control on Windows, setting
+ * the tool tip text to an empty string replaces the default,
+ * causing no tool tip text to be shown.
+ * <p>
+ * The mnemonic indicator (character '&amp;') is not displayed in a tool tip.
+ * To display a single '&amp;' in the tool tip, the character '&amp;' can be 
+ * escaped by doubling it in the string.
+ * </p>
+ * 
+ * @param string the new tool tip text (or null)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setToolTipText (String string) {
+	checkWidget ();
+	if (string != null && string.length() == 0) string = null;
+	int strPtr = createDotNetString (string, false);
+	OS.FrameworkElement_ToolTip (headerHandle, strPtr);
+	OS.GCHandle_Free (strPtr);
+}
+
+/**
+ * Sets the width of the receiver.
+ *
+ * @param width the new width
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setWidth (int width) {
+	checkWidget ();
+	if (width < 0) return;
+	updateLayout (parent.handle);
+	OS.GridViewColumn_Width (handle, width);
+}
+
+void updateImage() {
+	int part = findPart (Table.IMAGE_PART_NAME);
+	if (part == 0) return;
+	OS.Image_Source (part, image == null ? 0 : image.handle);
+	OS.GCHandle_Free (part);
+}
+
+void updateText () {
+	int part = findPart (Table.TEXT_PART_NAME);
+	if (part == 0) return;
+	int str = createDotNetString (text, false);
+	OS.TextBlock_Text (part, str);
+	OS.GCHandle_Free (str);
+	OS.GCHandle_Free (part);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TableItem.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TableItem.java
new file mode 100644
index 0000000..6e4946d
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TableItem.java
@@ -0,0 +1,1208 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+ 
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class represent a selectable user interface object
+ * that represents an item in a table.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#table">Table, TableItem, TableColumn snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class TableItem extends Item {
+	Table parent;
+	Image [] images;
+	String [] strings;
+	Color [] cellBackground, cellForeground;
+	Font [] cellFont;
+	int rowHandle;
+	boolean checked, grayed, cached; 
+	Color background, foreground;
+	Font font;
+	
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Table</code>) and a style value
+ * describing its behavior and appearance. The item is added
+ * to the end of the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TableItem (Table parent, int style) {
+	this (parent, style, -1);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Table</code>), a style value
+ * describing its behavior and appearance, and the index
+ * at which to place it in the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ * @param index the zero-relative index to store the receiver in its parent
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the parent (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TableItem (Table parent, int style, int index) {
+	this (parent, style, index, 0);
+}
+
+TableItem (Table parent, int style, int index, int handle) {
+	super (parent, style);
+	this.parent = parent;
+	this.handle = handle;
+	if (handle == 0) {
+		parent.createItem (this, index);
+	} else {
+		createWidget ();
+	}
+}
+
+double computeWidth (int columnIndex) {
+	int rowPresenterType = OS.GridViewRowPresenter_typeid ();
+	double width = 0;
+	if (rowHandle != 0) {
+		int contentPresenter = OS.VisualTreeHelper_GetChild (rowHandle, columnIndex);
+		int availSize = OS.gcnew_Size (0x7FFFFFFF,0x7FFFFFFF);
+		OS.UIElement_Measure (contentPresenter, availSize);
+		OS.GCHandle_Free (availSize);
+		int size = OS.UIElement_DesiredSize (contentPresenter);
+		width = OS.Size_Width (size);
+		OS.GCHandle_Free (size);
+		OS.GCHandle_Free (contentPresenter);
+	}
+	OS.GCHandle_Free (rowPresenterType);
+	return width;
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+void columnAdded (int index) {
+	int newLength = parent.columnCount + 1;
+	if (strings != null) {
+		String [] temp = new String [newLength];
+		System.arraycopy (strings, 0, temp, 0, index);
+		System.arraycopy (strings, index, temp, index + 1, parent.columnCount - index);
+		strings = temp;
+	}
+	if (images != null) {
+		Image [] temp = new Image [newLength];
+		System.arraycopy (images, 0, temp, 0, index);
+		System.arraycopy (images, index, temp, index + 1, parent.columnCount - index);
+		images = temp;
+	}
+	if (cellBackground != null) {
+		Color [] temp = new Color [newLength];
+		System.arraycopy (cellBackground, 0, temp, 0, index);
+		System.arraycopy (cellBackground, index, temp, index + 1, parent.columnCount - index);
+		cellBackground = temp;
+	}
+	if (cellForeground != null) {
+		Color [] temp = new Color [newLength];
+		System.arraycopy (cellForeground, 0, temp, 0, index);
+		System.arraycopy (cellForeground, index, temp, index + 1, parent.columnCount - index);
+		cellForeground = temp;
+	}
+	if (cellFont != null) {
+		Font [] temp = new Font [newLength];
+		System.arraycopy (cellFont, 0, temp, 0, index);
+		System.arraycopy (cellFont, index, temp, index + 1, parent.columnCount - index);
+		cellFont = temp;
+	}
+}
+
+void columnRemoved (int index) {
+	if (strings != null) {
+		String [] temp = new String [parent.columnCount];
+		System.arraycopy (strings, 0, temp, 0, index);
+		System.arraycopy (strings, index + 1, temp, index, parent.columnCount - index);
+		strings = temp;		
+	}
+	if (images != null) {
+		Image [] temp = new Image [parent.columnCount];
+		System.arraycopy (images, 0, temp, 0, index);
+		System.arraycopy (images, index + 1, temp, index, parent.columnCount - index);
+		images = temp;
+	}
+	if (cellBackground != null) {
+		Color [] temp = new Color [parent.columnCount];
+		System.arraycopy (cellBackground, 0, temp, 0, index);
+		System.arraycopy (cellBackground, index + 1, temp, index, parent.columnCount - index);
+		cellBackground = temp;
+	}
+	if (cellForeground != null) {
+		Color [] temp = new Color [parent.columnCount];
+		System.arraycopy (cellForeground, 0, temp, 0, index);
+		System.arraycopy (cellForeground, index + 1, temp, index, parent.columnCount - index);
+		cellForeground = temp;
+	}
+	if (cellFont != null) {
+		Font [] temp = new Font [parent.columnCount];
+		System.arraycopy (cellFont, 0, temp, 0, index);
+		System.arraycopy (cellFont, index + 1, temp, index, parent.columnCount - index);
+		cellFont = temp;
+	}
+}
+
+void createHandle () {
+	if (handle == 0) {
+		handle = OS.gcnew_ListViewItem ();
+		if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	}
+	OS.Control_HorizontalContentAlignment (handle, OS.HorizontalAlignment_Stretch);
+	OS.Control_VerticalContentAlignment (handle, OS.VerticalAlignment_Stretch);
+}
+
+void clear () {
+	strings = null;
+	images = null;
+	checked = grayed = false;
+	setFont (null);
+	setForeground (null);
+	setBackground (null);
+	if ((parent.style & SWT.VIRTUAL) != 0) cached = false;
+	updateCheck ();
+	int columns = parent.columnCount == 0 ? 1 : parent.columnCount;
+	for (int i = 0; i < columns; i++) {
+		updateText (i);
+		updateImage (i);
+		updateBackground (i);
+		updateForeground (i);
+		updateFont (i);
+	}
+	if ((parent.style & SWT.VIRTUAL) != 0) cached = false;
+	int part = findPart (0, Table.RENDER_PANEL_NAME);
+	if (part != 0) OS.UIElement_InvalidateVisual (part);
+	OS.GCHandle_Free (part);
+}
+
+void deregister () {
+	display.removeWidget (handle);
+}
+
+void destroyWidget () {
+	parent.destroyItem (this);
+	releaseHandle ();
+}
+
+int findRowPresenter (int current, int rowPresenterType) {
+	int type = OS.Object_GetType (current);
+	boolean found = OS.Object_Equals (rowPresenterType, type);
+	OS.GCHandle_Free (type);
+	if (found) return current;
+	int childCount = OS.VisualTreeHelper_GetChildrenCount (current);
+	for (int i = 0; i < childCount; i++) {
+		int child = OS.VisualTreeHelper_GetChild (current, i);
+		int result = findRowPresenter (child, rowPresenterType);
+		if (child != result) OS.GCHandle_Free (child);
+		if (result != 0) return result;
+	}
+	return 0;
+}
+
+int findPart (int column, String partName) {
+	if (rowHandle == 0) return 0; //not Loaded yet.
+	updateLayout (rowHandle);
+	int contentPresenter = OS.VisualTreeHelper_GetChild (rowHandle, column);
+	if (contentPresenter == 0) return 0;
+	int columnHandle;
+	if (parent.columnCount == 0) {
+		int columns = OS.GridView_Columns (parent.gridViewHandle);
+		columnHandle = OS.GridViewColumnCollection_default (columns, column);
+		OS.GCHandle_Free (columns);
+	} else {
+		columnHandle = parent.columns [column].handle;
+	}
+	int cellTemplate = OS.GridViewColumn_CellTemplate (columnHandle);
+	int name = createDotNetString (partName, false);
+	int result = OS.FrameworkTemplate_FindName (cellTemplate, name, contentPresenter);
+	OS.GCHandle_Free (contentPresenter);
+	if (parent.columnCount == 0) OS.GCHandle_Free (columnHandle);
+	OS.GCHandle_Free (cellTemplate);
+	OS.GCHandle_Free (name);
+	return result;
+}
+
+/**
+ * Returns the receiver's background color.
+ *
+ * @return the background color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.0
+ */
+public Color getBackground () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	return background != null ? background : parent.getBackground ();
+}
+
+/**
+ * Returns the background color at the given column index in the receiver.
+ *
+ * @param index the column index
+ * @return the background color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public Color getBackground (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	int count = Math.max (1, parent.columnCount);
+	if (0 > index || index > count -1) return getBackground ();
+	if (cellBackground == null || cellBackground [index] == null) return getBackground ();
+	return cellBackground [index];
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location
+ * relative to its parent.
+ *
+ * @return the receiver's bounding rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public Rectangle getBounds () {
+	checkWidget();
+	return getTextBounds (0);
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location
+ * relative to its parent at a column in the table.
+ *
+ * @param index the index that specifies the column
+ * @return the receiver's bounding column rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Rectangle getBounds (int index) {
+	checkWidget();
+	if (index != 0 && !parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (!(0 <= index && index < parent.columnCount)) return new Rectangle (0, 0, 0, 0);
+	int rowPresenterType = OS.GridViewRowPresenter_typeid ();
+	int contentPresenter = OS.VisualTreeHelper_GetChild (rowHandle, index);
+	int point = OS.gcnew_Point (0, 0);
+	if (point == 0) error (SWT.ERROR_NO_HANDLES);
+	int parentHandle = parent.topHandle ();
+	int location = OS.UIElement_TranslatePoint (contentPresenter, point, parentHandle);
+	int x = (int) OS.Point_X (location);
+	int y = (int) OS.Point_Y (location);
+	int width = (int) OS.FrameworkElement_ActualWidth (contentPresenter);
+	int height = (int) OS.FrameworkElement_ActualHeight (handle);
+	OS.GCHandle_Free (rowPresenterType);
+	OS.GCHandle_Free (point);
+	OS.GCHandle_Free (location);
+	OS.GCHandle_Free (contentPresenter);
+	return new Rectangle (x, y, width, height);
+}
+
+/**
+ * Returns <code>true</code> if the receiver is checked,
+ * and false otherwise.  When the parent does not have
+ * the <code>CHECK</code> style, return false.
+ *
+ * @return the checked state of the checkbox
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getChecked () {
+	checkWidget();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if ((parent.style & SWT.CHECK) == 0) return false;
+	return checked;
+}
+
+/**
+ * Returns the font that the receiver will use to paint textual information for this item.
+ *
+ * @return the receiver's font
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.0
+ */
+public Font getFont () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	return font != null ? font : parent.getFont ();
+}
+
+/**
+ * Returns the font that the receiver will use to paint textual information
+ * for the specified cell in this item.
+ *
+ * @param index the column index
+ * @return the receiver's font
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.0
+ */
+public Font getFont (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	int count = Math.max (1, parent.columnCount);
+	if (0 > index || index > count -1) return getFont ();
+	if (cellFont == null || cellFont [index] == null) return getFont ();
+	return cellFont [index];
+}
+
+/**
+ * Returns the foreground color that the receiver will use to draw.
+ *
+ * @return the receiver's foreground color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.0
+ */
+public Color getForeground () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	return foreground != null ? foreground : parent.getForeground ();
+}
+
+/**
+ * 
+ * Returns the foreground color at the given column index in the receiver.
+ *
+ * @param index the column index
+ * @return the foreground color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public Color getForeground (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	int count = Math.max (1, parent.columnCount);
+	if (0 > index || index > count -1) return getForeground ();
+	if (cellForeground == null || cellForeground [index] == null) return getForeground ();
+	return cellForeground [index];
+}
+
+/**
+ * Returns <code>true</code> if the receiver is grayed,
+ * and false otherwise. When the parent does not have
+ * the <code>CHECK</code> style, return false.
+ *
+ * @return the grayed state of the checkbox
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getGrayed () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if ((parent.style & SWT.CHECK) == 0) return false;
+	return grayed;
+}
+
+public Image getImage () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	return getImage (0);
+}
+
+/**
+ * Returns the image stored at the given column index in the receiver,
+ * or null if the image has not been set or if the column does not exist.
+ *
+ * @param index the column index
+ * @return the image stored at the given column index in the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Image getImage (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (images != null) {
+		if (0 <= index && index < images.length) return images [index];
+	}
+	return null;
+}
+
+/**
+ * Returns a rectangle describing the size and location
+ * relative to its parent of an image at a column in the
+ * table.  An empty rectangle is returned if index exceeds
+ * the index of the table's last column.
+ *
+ * @param index the index that specifies the column
+ * @return the receiver's bounding image rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Rectangle getImageBounds (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (index != 0 && !(0 <= index && index < parent.columnCount)) return new Rectangle (0, 0, 0, 0);
+	int parentHandle = parent.topHandle ();
+	int image = findPart (index, Table.IMAGE_PART_NAME);
+	int point = OS.gcnew_Point (0, 0);
+	if (point == 0) error (SWT.ERROR_NO_HANDLES);
+	int location = OS.UIElement_TranslatePoint (image, point, parentHandle);
+	int x = (int) OS.Point_X (location);
+	int y = (int) OS.Point_Y (location);
+	OS.GCHandle_Free (point);
+	OS.GCHandle_Free (location);
+	int width = (int) OS.FrameworkElement_ActualWidth (image);
+	int height = (int) OS.FrameworkElement_ActualHeight (image);
+	OS.GCHandle_Free (image);
+	return new Rectangle (x, y, width, height);
+}
+
+/**
+ * Gets the image indent.
+ *
+ * @return the indent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getImageIndent () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	//TODO
+	return 0;
+//	return imageIndent;
+}
+
+String getNameText () {
+	if ((parent.style & SWT.VIRTUAL) != 0) {
+		if (!cached) return "*virtual*"; //$NON-NLS-1$
+	}
+	return super.getNameText ();
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>Table</code>.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Table getParent () {
+	checkWidget ();
+	return parent;
+}
+
+/**
+ * Returns a rectangle describing the size and location
+ * relative to its parent of the text at a column in the
+ * table.  An empty rectangle is returned if index exceeds
+ * the index of the table's last column.
+ *
+ * @param index the index that specifies the column
+ * @return the receiver's bounding text rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.3
+ */
+public Rectangle getTextBounds (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (index != 0 && !(0 <= index && index < parent.columnCount)) return new Rectangle (0, 0, 0, 0);
+	int parentHandle = parent.topHandle (); 
+	int point = OS.gcnew_Point (0, 0);
+	if (point == 0) error (SWT.ERROR_NO_HANDLES);
+	int textBlock = findPart (index, Table.TEXT_PART_NAME);
+	int renderPanel = findPart (index, Table.RENDER_PANEL_NAME);
+	Rectangle result = new Rectangle (0, 0, 0, 0);
+	if (textBlock != 0 && renderPanel != 0) {
+		int location = OS.UIElement_TranslatePoint (textBlock, point, parentHandle);
+		int x = (int) OS.Point_X (location);
+		int y = (int) OS.Point_Y (location);
+		OS.GCHandle_Free (location);
+		double textWidth = OS.FrameworkElement_ActualWidth (textBlock);
+		int panelLocation = OS.UIElement_TranslatePoint (textBlock, point, renderPanel);
+		double visibleWidth = Math.max (0, OS.FrameworkElement_ActualWidth (renderPanel) - OS.Point_X (panelLocation));
+		OS.GCHandle_Free (panelLocation);
+		int width = (int) Math.min (textWidth, visibleWidth);
+		int height = (int) OS.FrameworkElement_ActualHeight (textBlock);
+		result = new Rectangle (x, y, width, height);
+	}
+	OS.GCHandle_Free (point);
+	if (textBlock != 0) OS.GCHandle_Free (textBlock);
+	if (renderPanel != 0) OS.GCHandle_Free (renderPanel);
+	return result;
+}
+
+public String getText () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	return getText (0);
+}
+
+/**
+ * Returns the text stored at the given column index in the receiver,
+ * or empty string if the text has not been set.
+ *
+ * @param index the column index
+ * @return the text stored at the given column index in the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getText (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (strings != null && 0 <= index && index < strings.length) {
+		return strings [index]!= null ? strings[index] : "";
+	}
+	return "";
+}
+
+Control getWidgetControl () {
+	return parent;
+}
+
+void register () {
+	display.addWidget (handle, this);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (handle != 0) OS.GCHandle_Free (handle);
+	handle = 0;
+	if (rowHandle != 0) OS.GCHandle_Free (rowHandle);
+	rowHandle = 0;
+	parent = null;
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	strings = null;
+	images = null;
+	cellBackground = cellForeground = null;
+	cellFont = null;
+}
+
+/**
+ * Sets the receiver's background color to the color specified
+ * by the argument, or to the default system color for the item
+ * if the argument is null.
+ *
+ * @param color the new color (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.0
+ */
+public void setBackground (Color color) {
+	checkWidget ();
+	if (color != null && color.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	if (color != null) {
+		int brush = OS.gcnew_SolidColorBrush (color.handle);
+		OS.Control_Background (handle, brush);
+		OS.GCHandle_Free (brush);
+	} else {
+		int property = OS.Control_BackgroundProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+	}
+	background = color;
+	if ((parent.style & SWT.VIRTUAL) != 0) cached = true;
+}
+
+/**
+ * Sets the background color at the given column index in the receiver 
+ * to the color specified by the argument, or to the default system color for the item
+ * if the argument is null.
+ *
+ * @param index the column index
+ * @param color the new color (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void setBackground (int index, Color color) {
+	checkWidget ();
+	if (color != null && color.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	int count = Math.max (1, parent.getColumnCount ());
+	if (0 > index || index > count - 1) return;
+	if (cellBackground == null) cellBackground = new Color [count];
+	cellBackground [index] = color;
+	updateBackground (index);
+	if ((parent.style & SWT.VIRTUAL) != 0) cached = true;
+}
+
+/**
+ * Sets the checked state of the checkbox for this item.  This state change 
+ * only applies if the Table was created with the SWT.CHECK style.
+ *
+ * @param checked the new checked state of the checkbox
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setChecked (boolean checked) {
+	checkWidget();
+	if ((parent.style & SWT.CHECK) == 0) return;
+	if (this.checked == checked) return;
+	this.checked = checked;
+	if ((parent.style & SWT.VIRTUAL) != 0) cached = true;
+	updateCheck ();
+}
+
+/**
+ * Sets the font that the receiver will use to paint textual information
+ * for this item to the font specified by the argument, or to the default font
+ * for that kind of control if the argument is null.
+ *
+ * @param font the new font (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void setFont (Font font){
+	checkWidget ();
+	if (font != null && font.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	if (font != null) {
+		int family = OS.Typeface_FontFamily (font.handle);
+		OS.Control_FontFamily (handle, family);
+		OS.GCHandle_Free (family);
+		int stretch = OS.Typeface_Stretch (font.handle);
+		OS.Control_FontStretch (handle, stretch);
+		OS.GCHandle_Free (stretch);
+		int style = OS.Typeface_Style (font.handle);
+		OS.Control_FontStyle (handle, style);
+		OS.GCHandle_Free (style);
+		int weight = OS.Typeface_Weight (font.handle);
+		OS.Control_FontWeight (handle, weight);
+		OS.GCHandle_Free (weight);
+		OS.Control_FontSize (handle, font.size);
+	} else {
+		int property = OS.Control_FontFamilyProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS. Control_FontStyleProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS.Control_FontStretchProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS.Control_FontWeightProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS.Control_FontSizeProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+	}
+	this.font = font;
+	if ((parent.style & SWT.VIRTUAL) != 0) cached = true;
+}
+
+/**
+ * Sets the font that the receiver will use to paint textual information
+ * for the specified cell in this item to the font specified by the 
+ * argument, or to the default font for that kind of control if the 
+ * argument is null.
+ *
+ * @param index the column index
+ * @param font the new font (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void setFont (int index, Font font) {
+	checkWidget ();
+	if (font != null && font.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	int count = Math.max (1, parent.getColumnCount ());
+	if (0 > index || index > count - 1) return;
+	if (cellFont == null) {
+		if (font == null) return;
+		cellFont = new Font [count];
+	}
+	Font oldFont = cellFont [index];
+	if (oldFont == font) return;
+	cellFont [index] = font;
+	if (oldFont != null && oldFont.equals (font)) return;
+	updateFont (index);
+	if ((parent.style & SWT.VIRTUAL) != 0) cached = true;
+}
+
+/**
+ * Sets the receiver's foreground color to the color specified
+ * by the argument, or to the default system color for the item
+ * if the argument is null.
+ *
+ * @param color the new color (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.0
+ */
+public void setForeground (Color color){
+	checkWidget ();
+	if (color != null && color.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	if (color != null) {
+		int brush = OS.gcnew_SolidColorBrush (color.handle);
+		OS.Control_Foreground (handle, brush);
+		OS.GCHandle_Free (brush);
+	} else {
+		int property = OS.Control_ForegroundProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+	}
+	foreground = color;
+	if ((parent.style & SWT.VIRTUAL) != 0) cached = true;
+}
+
+/**
+ * Sets the foreground color at the given column index in the receiver 
+ * to the color specified by the argument, or to the default system color for the item
+ * if the argument is null.
+ *
+ * @param index the column index
+ * @param color the new color (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void setForeground (int index, Color color){
+	checkWidget ();
+	if (color != null && color.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	int count = Math.max (1, parent.getColumnCount ());
+	if (0 > index || index > count - 1) return;
+	if (cellForeground == null) cellForeground = new Color [count];
+	cellForeground [index] = color;
+	updateForeground (index);
+	if ((parent.style & SWT.VIRTUAL) != 0) cached = true;
+}
+
+/**
+ * Sets the grayed state of the checkbox for this item.  This state change 
+ * only applies if the Table was created with the SWT.CHECK style.
+ *
+ * @param grayed the new grayed state of the checkbox; 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setGrayed (boolean grayed) {
+	checkWidget ();
+	if ((parent.style & SWT.CHECK) == 0) return;
+	if (this.grayed == grayed) return;
+	this.grayed = grayed;
+	if ((parent.style & SWT.VIRTUAL) != 0) cached = true;
+	updateCheck ();
+}
+
+/**
+ * Sets the image for multiple columns in the table. 
+ * 
+ * @param images the array of new images
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array of images is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if one of the images has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setImage (Image [] images) {
+	checkWidget ();
+	if (images == null) error (SWT.ERROR_NULL_ARGUMENT);
+	for (int i=0; i<images.length; i++) {
+		setImage (i, images [i]);
+	}
+}
+
+/**
+ * Sets the receiver's image at a column.
+ *
+ * @param index the column index
+ * @param image the new image
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setImage (int index, Image image) {
+	checkWidget ();
+	if (image != null && image.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	int count = Math.max (1, parent.getColumnCount ());
+	if (0 > index || index > count - 1) return;
+	if (images == null) images = new Image [count];
+	images [index] = image;
+	updateImage (index);
+	if ((parent.style & SWT.VIRTUAL) != 0) cached = true;
+}
+
+public void setImage (Image image) {
+	checkWidget ();
+	setImage (0, image);
+}
+
+/**
+ * Sets the indent of the first column's image, expressed in terms of the image's width.
+ *
+ * @param indent the new indent
+ *
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @deprecated this functionality is not supported on most platforms
+ */
+public void setImageIndent (int indent) {
+	checkWidget ();
+}
+
+/**
+ * Sets the text for multiple columns in the table. 
+ * 
+ * @param strings the array of new strings
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setText (String [] strings) {
+	checkWidget ();
+	if (strings == null) error (SWT.ERROR_NULL_ARGUMENT);
+	for (int i=0; i<strings.length; i++) {
+		String string = strings [i];
+		if (string != null) setText (i, string);
+	}
+}
+
+/**
+ * Sets the receiver's text at a column
+ *
+ * @param index the column index
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setText (int index, String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int count = Math.max (1, parent.getColumnCount ());
+	if (0 > index || index > count - 1) return;
+	if (strings == null) strings = new String [count];
+	if ((parent.style & SWT.VIRTUAL) != 0) cached = true;
+	strings [index] = string;
+	updateText (index);
+}
+
+public void setText (String string) {
+	checkWidget ();
+	setText (0, string);
+}
+
+void updateBackground (int index) {
+	int panel = findPart (index, Table.CONTENTPANEL_PART_NAME);
+	if (panel != 0) {
+		if (cellBackground != null && cellBackground [index] != null) {
+			int brush = OS.gcnew_SolidColorBrush (cellBackground [index].handle);
+			int current = OS.Panel_Background (panel);
+			if (!OS.Object_Equals (brush, current))
+				OS.Panel_Background (panel, brush);
+			OS.GCHandle_Free (current);
+			OS.GCHandle_Free (brush);
+		} else {
+			int property = OS.Panel_BackgroundProperty ();
+			OS.DependencyObject_ClearValue (panel, property);
+			OS.GCHandle_Free (property);
+		}
+		OS.GCHandle_Free (panel);
+	}
+}
+
+void updateCheck () {
+	if ((parent.style & SWT.CHECK) == 0) return;
+	int checkBox = findPart (0, Table.CHECKBOX_PART_NAME);
+	if (checkBox != 0) {
+		parent.ignoreSelection = true;
+		if (!grayed) {
+			OS.ToggleButton_IsChecked (checkBox, checked);
+		} else {
+			if (checked) 
+				OS.ToggleButton_IsCheckedNullSetter (checkBox);
+		}
+		parent.ignoreSelection = false;
+		OS.GCHandle_Free (checkBox);
+	}
+}
+
+void updateFont (int index) {
+	int textBlock = findPart (index, Table.TEXT_PART_NAME);
+	if (textBlock != 0) {
+		Font font = cellFont != null ? cellFont [index] : null;
+		if (font != null) {
+			int family = OS.Typeface_FontFamily (font.handle);
+			OS.TextBlock_FontFamily (textBlock, family);
+			OS.GCHandle_Free (family);
+			int stretch = OS.Typeface_Stretch (font.handle);
+			OS.TextBlock_FontStretch (textBlock, stretch);
+			OS.GCHandle_Free (stretch);
+			int style = OS.Typeface_Style (font.handle);
+			OS.TextBlock_FontStyle (textBlock, style);
+			OS.GCHandle_Free (style);
+			int weight = OS.Typeface_Weight (font.handle);
+			OS.TextBlock_FontWeight (textBlock, weight);
+			OS.GCHandle_Free (weight);
+			OS.TextBlock_FontSize (textBlock, font.size);
+		} else {
+			int property = OS.TextBlock_FontFamilyProperty ();
+			OS.DependencyObject_ClearValue (textBlock, property);
+			OS.GCHandle_Free (property);
+			property = OS.TextBlock_FontSizeProperty ();
+			OS.DependencyObject_ClearValue (textBlock, property);
+			OS.GCHandle_Free (property);
+			property = OS.TextBlock_FontStretchProperty ();
+			OS.DependencyObject_ClearValue (textBlock, property);
+			OS.GCHandle_Free (property);
+			property = OS.TextBlock_FontWeightProperty ();
+			OS.DependencyObject_ClearValue (textBlock, property);
+			OS.GCHandle_Free (property);
+			property = OS.TextBlock_FontStyleProperty ();
+			OS.DependencyObject_ClearValue (textBlock, property);
+			OS.GCHandle_Free (property);
+		}
+		OS.GCHandle_Free (textBlock);
+	}
+}
+
+void updateForeground (int index) {
+	int textBlock = findPart (index, Table.TEXT_PART_NAME);
+	if (textBlock != 0) {
+		if (cellForeground != null && cellForeground [index] != null) {
+			int brush = OS.gcnew_SolidColorBrush (cellForeground [index].handle);
+			OS.TextBlock_Foreground (textBlock, brush);
+			OS.GCHandle_Free (brush);
+		} else {
+			int property = OS.Control_ForegroundProperty ();
+			OS.DependencyObject_ClearValue (textBlock, property);
+			OS.GCHandle_Free (property);
+		}
+		OS.GCHandle_Free (textBlock);
+	}
+}
+
+void updateImage (int index) {
+	int img = findPart (index, Table.IMAGE_PART_NAME);
+	if (img != 0) {
+		int src = 0;
+		if (images != null) src = images [index] != null ? images [index].handle : 0;
+		int current = OS.Image_Source (img);
+		OS.Image_Source (img, src);
+		OS.GCHandle_Free (current);
+		OS.GCHandle_Free (img);
+	}
+}
+
+void updateText (int index) {
+	int textBlock = findPart (index, Table.TEXT_PART_NAME);
+	if (textBlock != 0) {
+		if (strings != null && strings [index] != null) {
+			int strPtr = createDotNetString (strings [index], false);
+			OS.TextBlock_Text (textBlock, strPtr);
+			OS.GCHandle_Free (strPtr);
+		} else {
+			int property = OS.TextBlock_TextProperty ();
+			OS.DependencyObject_ClearValue (textBlock, property);
+			OS.GCHandle_Free (property);
+		}
+		OS.GCHandle_Free (textBlock);
+	}
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Text.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Text.java
new file mode 100644
index 0000000..b5295c1
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Text.java
@@ -0,0 +1,1510 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * Instances of this class are selectable user interface
+ * objects that allow the user to enter and modify text.
+ * Text controls can be either single or multi-line.
+ * When a text control is created with a border, the
+ * operating system includes a platform specific inset
+ * around the contents of the control.  When created
+ * without a border, an effort is made to remove the
+ * inset such that the preferred size of the control
+ * is the same size as the contents.
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>CENTER, ICON_CANCEL, ICON_SEARCH, LEFT, MULTI, PASSWORD, SEARCH, SINGLE, RIGHT, READ_ONLY, WRAP</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>DefaultSelection, Modify, Verify</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles MULTI and SINGLE may be specified,
+ * and only one of the styles LEFT, CENTER, and RIGHT may be specified.
+ * </p>
+ * <p>
+ * Note: The styles ICON_CANCEL and ICON_SEARCH are hints used in combination with SEARCH.
+ * When the platform supports the hint, the text control shows these icons.  When an icon
+ * is selected, a default selection event is sent with the detail field set to one of
+ * ICON_CANCEL or ICON_SEARCH.  Normally, application code does not need to check the
+ * detail.  In the case of ICON_CANCEL, the text is cleared before the default selection
+ * event is sent causing the application to search for an empty string.
+ * </p>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#text">Text snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Text extends Scrollable {
+	boolean doubleClick;
+	
+	/**
+	* The maximum number of characters that can be entered
+	* into a text widget.
+	* <p>
+	* Note that this value is platform dependent, based upon
+	* the native widget implementation.
+	* </p>
+	*/
+	public static final int LIMIT;
+	
+	/**
+	* The delimiter used by multi-line text widgets.  When text
+	* is queried and from the widget, it will be delimited using
+	* this delimiter.
+	*/
+	public static final String DELIMITER;
+	
+	/*
+	* This code is intentionally commented.
+	*/
+//	static final char PASSWORD;
+	
+	/*
+	* These values can be different on different platforms.
+	* Therefore they are not initialized in the declaration
+	* to stop the compiler from inlining.
+	*/
+	static {
+		LIMIT = 0x7FFFFFFF;
+		DELIMITER = "\r\n";
+	}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#SINGLE
+ * @see SWT#MULTI
+ * @see SWT#READ_ONLY
+ * @see SWT#WRAP
+ * @see SWT#LEFT
+ * @see SWT#RIGHT
+ * @see SWT#CENTER
+ * @see SWT#PASSWORD
+ * @see SWT#SEARCH
+ * @see SWT#ICON_SEARCH
+ * @see SWT#ICON_CANCEL
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Text (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the receiver's text is modified, by sending
+ * it one of the messages defined in the <code>ModifyListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ModifyListener
+ * @see #removeModifyListener
+ */
+public void addModifyListener (ModifyListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Modify, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is not called for texts.
+ * <code>widgetDefaultSelected</code> is typically called when ENTER is pressed in a single-line text,
+ * or when ENTER is pressed in a search text. If the receiver has the <code>SWT.SEARCH | SWT.CANCEL</code> style
+ * and the user cancels the search, the event object detail field contains the value <code>SWT.CANCEL</code>.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the control is selected by the user
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection, typedListener);
+	addListener (SWT.DefaultSelection, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the receiver's text is verified, by sending
+ * it one of the messages defined in the <code>VerifyListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see VerifyListener
+ * @see #removeVerifyListener
+ */
+public void addVerifyListener (VerifyListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Verify, typedListener);
+}
+
+/**
+ * Appends a string.
+ * <p>
+ * The new text is appended to the text at
+ * the end of the widget.
+ * </p>
+ *
+ * @param string the string to be appended
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void append (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if ((style & SWT.PASSWORD) != 0) return;
+	OS.TextBox_SelectionStart (handle, getCharCount ());
+	if (hooks (SWT.Verify) || filters (SWT.Verify)) {
+		int start = OS.TextBox_SelectionStart (handle);
+		int end = start + OS.TextBox_SelectionLength (handle);
+		string = verifyText (string, start, end, false);
+		if (string == null) return;
+	}
+	int strPtr = createDotNetString (string, false);
+	OS.TextBoxBase_AppendText (handle, strPtr);
+	OS.TextBox_SelectionLength (handle, 0);
+	OS.GCHandle_Free (strPtr);
+}
+
+static int checkStyle (int style) {
+	if ((style & SWT.SEARCH) != 0) {
+		style |= SWT.SINGLE | SWT.BORDER;
+		style &= ~SWT.PASSWORD;
+	}
+	style &= ~SWT.SEARCH;
+	if ((style & SWT.SINGLE) != 0 && (style & SWT.MULTI) != 0) {
+		style &= ~SWT.MULTI;
+	}
+	style = checkBits (style, SWT.LEFT, SWT.CENTER, SWT.RIGHT, 0, 0, 0);
+	if ((style & SWT.SINGLE) != 0) style &= ~(SWT.H_SCROLL | SWT.V_SCROLL | SWT.WRAP);
+	if ((style & SWT.WRAP) != 0) {
+		style |= SWT.MULTI;
+		style &= ~SWT.H_SCROLL;
+	}
+	if ((style & SWT.MULTI) != 0) style &= ~SWT.PASSWORD;
+	if ((style & (SWT.SINGLE | SWT.MULTI)) != 0) return style;
+	if ((style & (SWT.H_SCROLL | SWT.V_SCROLL)) != 0) return style | SWT.MULTI;
+	return style | SWT.SINGLE;
+}
+
+/**
+ * Clears the selection.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void clearSelection () {
+	checkWidget ();
+	if ((style & SWT.PASSWORD) != 0) return;
+	int start = OS.TextBox_SelectionStart (handle);
+	int len = OS.TextBox_SelectionLength (handle);
+	OS.TextBox_SelectionStart (handle, start + len);
+	OS.TextBox_SelectionLength (handle, 0); 
+}
+
+/**
+ * Copies the selected text.
+ * <p>
+ * The current selection is copied to the clipboard.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void copy () {
+	checkWidget ();
+	if ((style & SWT.PASSWORD) != 0) return;
+	OS.TextBoxBase_Copy (handle);
+}
+
+void createHandle () {
+	if ((style & SWT.PASSWORD) != 0) {
+		handle = OS.gcnew_PasswordBox ();
+		if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+		return;
+	}
+	handle = OS.gcnew_TextBox ();
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	if ((style & SWT.MULTI) != 0) {
+		OS.TextBoxBase_AcceptsReturn (handle, true);
+		OS.TextBoxBase_AcceptsTab (handle, true);
+		if ((style & SWT.WRAP) != 0) OS.TextBox_TextWrapping (handle, OS.TextWrapping_Wrap);
+	}
+	if ((style & SWT.BORDER) == 0) {
+		int thickness = OS.gcnew_Thickness (0, 0, 0, 0);
+		OS.Control_BorderThickness (handle, thickness);
+		OS.Control_Padding(handle, thickness);
+		OS.GCHandle_Free (thickness);
+	}
+	
+	if ((style & SWT.READ_ONLY) != 0) OS.TextBoxBase_IsReadOnly (handle, true);
+	if ((style & SWT.CENTER) != 0) OS.Control_HorizontalContentAlignment (handle, OS.HorizontalAlignment_Center);
+	if ((style & SWT.RIGHT) != 0) OS.Control_HorizontalContentAlignment (handle, OS.HorizontalAlignment_Right);
+	if ((style & SWT.V_SCROLL) != 0) OS.TextBoxBase_VerticalScrollBarVisibility (handle, OS.ScrollBarVisibility_Visible);
+	if ((style & SWT.H_SCROLL) != 0) OS.TextBoxBase_HorizontalScrollBarVisibility (handle, OS.ScrollBarVisibility_Visible);
+}
+
+void createWidget () {
+	super.createWidget ();
+	doubleClick = true;
+//	setTabStops (8);
+}
+
+/**
+ * Cuts the selected text.
+ * <p>
+ * The current selection is first copied to the
+ * clipboard and then deleted from the widget.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void cut () {
+	checkWidget ();
+	if ((style & SWT.READ_ONLY) != 0) return;
+	if ((style & SWT.PASSWORD) != 0) return;
+	OS.TextBoxBase_Cut (handle);
+}
+
+/**
+ * Returns the line number of the caret.
+ * <p>
+ * The line number of the caret is returned.
+ * </p>
+ *
+ * @return the line number
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getCaretLineNumber () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) return 0; 
+	if ((style & SWT.PASSWORD) != 0) return 0;
+	int caretIndex = OS.TextBox_CaretIndex (handle);
+	return OS.TextBox_GetLineIndexFromCharacterIndex (handle, caretIndex); 
+}
+
+/**
+ * Returns a point describing the receiver's location relative
+ * to its parent (or its display if its parent is null).
+ * <p>
+ * The location of the caret is returned.
+ * </p>
+ *
+ * @return a point, the location of the caret
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Point getCaretLocation () {
+	checkWidget ();
+	if ((style & SWT.PASSWORD) != 0) return new Point (0, 0);
+	int caretIndex = OS.TextBox_CaretIndex (handle);
+	int rect = OS.TextBox_GetRectFromCharacterIndex (handle, caretIndex);
+	Point result = new Point ((int)OS.Rect_X (rect), (int)OS.Rect_Y (rect));
+	OS.GCHandle_Free (rect);
+	return result;
+}
+
+/**
+ * Returns the character position of the caret.
+ * <p>
+ * Indexing is zero based.
+ * </p>
+ *
+ * @return the position of the caret
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getCaretPosition () {
+	checkWidget ();
+	if ((style & SWT.PASSWORD) != 0) return 0;
+	return OS.TextBox_CaretIndex (handle);
+}
+
+/**
+ * Returns the number of characters.
+ *
+ * @return number of characters in the widget
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getCharCount () {
+	checkWidget ();
+	int text;
+	if ((style & SWT.PASSWORD) != 0) {
+		text = OS.PasswordBox_Password (handle);
+	} else {
+		text = OS.TextBox_Text (handle);
+	}
+	int length = OS.String_Length (text);
+	OS.GCHandle_Free (text);
+	return length;
+}
+
+/**
+ * Returns the double click enabled flag.
+ * <p>
+ * The double click flag enables or disables the
+ * default action of the text widget when the user
+ * double clicks.
+ * </p>
+ * 
+ * @return whether or not double click is enabled
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getDoubleClickEnabled () {
+	checkWidget ();
+	return doubleClick;
+}
+
+/**
+ * Returns the echo character.
+ * <p>
+ * The echo character is the character that is
+ * displayed when the user enters text or the
+ * text is changed by the programmer.
+ * </p>
+ * 
+ * @return the echo character
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setEchoChar
+ */
+public char getEchoChar () {
+	checkWidget ();
+	if ((style & SWT.PASSWORD) == 0) return 0;
+	return OS.PasswordBox_PasswordChar (handle);
+}
+
+/**
+ * Returns the editable state.
+ *
+ * @return whether or not the receiver is editable
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getEditable () {
+	checkWidget ();
+	if ((style & SWT.PASSWORD) != 0) return true;
+	return !OS.TextBoxBase_IsReadOnly (handle);
+}
+
+/**
+ * Returns the number of lines.
+ *
+ * @return the number of lines in the widget
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getLineCount () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) return 1;
+	if ((style & SWT.PASSWORD) != 0) return 1;
+	int lines = OS.TextBox_LineCount (handle);
+	if (lines == -1) {
+		updateLayout (handle);
+		lines = OS.TextBox_LineCount (handle);
+	}
+	return lines;
+}
+
+/**
+ * Returns the line delimiter.
+ *
+ * @return a string that is the line delimiter
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #DELIMITER
+ */
+public String getLineDelimiter () {
+	checkWidget ();
+	return DELIMITER;
+}
+
+/**
+ * Returns the height of a line.
+ *
+ * @return the height of a row of text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getLineHeight () {
+	checkWidget ();
+	int family = OS.Control_FontFamily (handle);
+	double lineSpacing = OS.FontFamily_LineSpacing (family);
+	OS.GCHandle_Free (family);
+	double size = OS.Control_FontSize (handle);
+	return (int) (lineSpacing * size);
+}
+
+/**
+ * Returns the widget message.  The message text is displayed
+ * as a hint for the user, indicating the purpose of the field.
+ * <p>
+ * Typically this is used in conjunction with <code>SWT.SEARCH</code>.
+ * </p>
+ * 
+ * @return the widget message
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.3
+ */
+public String getMessage () {
+	checkWidget ();
+	return "";
+}
+
+/**
+ * Returns the orientation of the receiver, which will be one of the
+ * constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ *
+ * @return the orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.1.2
+ */
+public int getOrientation () {
+	checkWidget();
+	return style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);
+}
+
+/**
+ * Returns a <code>Point</code> whose x coordinate is the
+ * character position representing the start of the selected
+ * text, and whose y coordinate is the character position
+ * representing the end of the selection. An "empty" selection
+ * is indicated by the x and y coordinates having the same value.
+ * <p>
+ * Indexing is zero based.  The range of a selection is from
+ * 0..N where N is the number of characters in the widget.
+ * </p>
+ *
+ * @return a point representing the selection start and end
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Point getSelection () {
+	checkWidget ();
+	if ((style & SWT.PASSWORD) != 0) return new Point (0, 0);
+	int start = OS.TextBox_SelectionStart (handle);
+	int length = OS.TextBox_SelectionLength (handle);
+	return new Point (start, start+length);
+}
+
+/**
+ * Returns the number of selected characters.
+ *
+ * @return the number of selected characters.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelectionCount () {
+	checkWidget ();
+	Point selection = getSelection ();
+	return selection.y - selection.x;
+}
+
+/**
+ * Gets the selected text, or an empty string if there is no current selection.
+ *
+ * @return the selected text
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getSelectionText () {
+	checkWidget ();
+	if ((style & SWT.PASSWORD) != 0) return "";
+	int content = OS.TextBox_SelectedText (handle);
+	String string = createJavaString (content);
+	OS.GCHandle_Free (content);
+	return string;
+}
+
+/**
+ * Returns the number of tabs.
+ * <p>
+ * Tab stop spacing is specified in terms of the
+ * space (' ') character.  The width of a single
+ * tab stop is the pixel width of the spaces.
+ * </p>
+ *
+ * @return the number of tab characters
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getTabs () {
+	checkWidget ();
+	//FIXME
+	return 8;
+}
+
+/**
+ * Returns the widget text.
+ * <p>
+ * The text for a text widget is the characters in the widget, or
+ * an empty string if this has never been set.
+ * </p>
+ *
+ * @return the widget text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getText () {
+	checkWidget();
+	int text;
+	if ((style & SWT.PASSWORD) != 0) {
+		text = OS.PasswordBox_Password (handle);
+	} else {
+		text = OS.TextBox_Text (handle);
+	}
+	String string = createJavaString (text);
+	OS.GCHandle_Free (text);
+	return string;
+}
+
+/**
+ * Returns a range of text.  Returns an empty string if the
+ * start of the range is greater than the end.
+ * <p>
+ * Indexing is zero based.  The range of
+ * a selection is from 0..N-1 where N is
+ * the number of characters in the widget.
+ * </p>
+ *
+ * @param start the start of the range
+ * @param end the end of the range
+ * @return the range of text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getText (int start, int end) {
+	checkWidget ();
+	if (!(start <= end && 0 <= end)) return "";
+	String text = getText ();
+	int length = text.length();
+	end = Math.min (end, length - 1);
+	if (start > end) return "";
+	start = Math.max (0, start);
+	/*
+	* NOTE: The current implementation uses substring ()
+	* which can reference a potentially large character
+	* array.
+	*/	
+	return text.substring (start, end + 1);
+}
+
+/**
+ * Returns the maximum number of characters that the receiver is capable of holding. 
+ * <p>
+ * If this has not been changed by <code>setTextLimit()</code>,
+ * it will be the constant <code>Text.LIMIT</code>.
+ * </p>
+ * 
+ * @return the text limit
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #LIMIT
+ */
+public int getTextLimit () {
+	checkWidget ();
+	if ((style & SWT.PASSWORD) != 0) return OS.PasswordBox_MaxLength (handle);
+	return OS.TextBox_MaxLength (handle);
+}
+
+/**
+ * Returns the zero-relative index of the line which is currently
+ * at the top of the receiver.
+ * <p>
+ * This index can change when lines are scrolled or new lines are added or removed.
+ * </p>
+ *
+ * @return the index of the top line
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getTopIndex () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) return 0;
+	if ((style & SWT.PASSWORD) != 0) return 0;
+	return OS.TextBox_GetFirstVisibleLineIndex (handle);
+}
+
+/**
+ * Returns the top pixel.
+ * <p>
+ * The top pixel is the pixel position of the line
+ * that is currently at the top of the widget.  On
+ * some platforms, a text widget can be scrolled by
+ * pixels instead of lines so that a partial line
+ * is displayed at the top of the widget.
+ * </p><p>
+ * The top pixel changes when the widget is scrolled.
+ * The top pixel does not include the widget trimming.
+ * </p>
+ *
+ * @return the pixel position of the top line
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getTopPixel () {
+	checkWidget ();
+	int name = createDotNetString ("PART_ContentHost", false);
+	int template = OS.Control_Template (handle);
+	int scroller = OS.FrameworkTemplate_FindName (template, name, handle);
+	if (scroller == 0) {
+		updateLayout (handle);
+		scroller = OS.FrameworkTemplate_FindName (template, name, handle);
+	}
+	OS.GCHandle_Free (name);
+	OS.GCHandle_Free (template);
+	if (scroller == 0) return 0;
+	double vertOffset = OS.ScrollViewer_VerticalOffset (scroller);
+	OS.GCHandle_Free (scroller);
+	return (int) vertOffset;
+}
+
+void HandlePreviewKeyDown (int sender, int e) {
+	super.HandlePreviewKeyDown (sender, e);
+	if (!checkEvent (e)) return;
+	if ((style & SWT.SINGLE) != 0) {
+		int key = OS.KeyEventArgs_Key (e);
+		if (key == OS.Key_Return) postEvent (SWT.DefaultSelection);
+	}
+}
+
+void HandlePreviewExecutedRoutedEvent (int sender, int e) {
+	if (!checkEvent (e)) return;
+	int command = OS.ExecutedRoutedEventArgs_Command (e);
+	boolean doVerify = false;
+	String input = null;
+	int paste = OS.ApplicationCommands_Paste ();
+	int cut = OS.ApplicationCommands_Cut ();
+	int redo = OS.ApplicationCommands_Redo ();
+	int undo = OS.ApplicationCommands_Undo ();
+	int backspace = OS.EditingCommands_Backspace ();
+	int delete = OS.EditingCommands_Delete ();
+	int deleteNext = OS.EditingCommands_DeleteNextWord ();
+	int deletePrevious = OS.EditingCommands_DeletePreviousWord ();
+	if (OS.Object_Equals (command, paste)) {
+		doVerify = true;
+		int clipboardText = OS.Clipboard_GetText ();
+		input = createJavaString(clipboardText);
+		OS.GCHandle_Free(clipboardText);
+	} else if (OS.Object_Equals (command, cut)){
+		doVerify = true;
+		input = getSelectionText ();
+	} else if (OS.Object_Equals(command, redo)) {
+		//FIXME
+		//doVerify = true;
+		OS.ExecutedRoutedEventArgs_Handled (e, true);
+	} else if (OS.Object_Equals(command, undo)) {
+		//FIXME
+		//doVerify = true;
+		OS.ExecutedRoutedEventArgs_Handled (e, true);
+	} else if (OS.Object_Equals (command, backspace)) {
+		doVerify = true;
+		input = "";
+	} else if (OS.Object_Equals (command, delete)) {
+		doVerify = true;
+		input = "";
+	} else if (OS.Object_Equals(command, deleteNext)) {
+		//FIXME
+		//doVerify = true;
+		OS.ExecutedRoutedEventArgs_Handled (e, true);
+	} else if (OS.Object_Equals(command, deletePrevious)) {
+		//FIXME
+		//doVerify = true;
+		OS.ExecutedRoutedEventArgs_Handled (e, true);
+	}
+	OS.GCHandle_Free (paste);
+	OS.GCHandle_Free (cut);
+	OS.GCHandle_Free (redo);
+	OS.GCHandle_Free (undo);
+	OS.GCHandle_Free (backspace);
+	OS.GCHandle_Free (delete);
+	OS.GCHandle_Free (deleteNext);
+	OS.GCHandle_Free (deletePrevious);
+	OS.GCHandle_Free (command);
+	/*
+	* FIXME - should do this first, but for now we want to swallow
+	* all Redo, Undo, DeleteNextWord and DeletePreviousWord to 
+	* prevent those from changing the TextBox w/o Verify events
+	*/
+	if (!hooks (SWT.Verify)) return;
+	if (!doVerify) return;
+	int start = OS.TextBox_SelectionStart (handle);
+	int end = start + OS.TextBox_SelectionLength (handle);
+	String text = verifyText (input, start, end, true);
+	if (text != null && !text.equals (input)) {
+		int strPtr = createDotNetString (text, false);
+		OS.TextBox_SelectedText (handle, strPtr);
+		OS.GCHandle_Free (strPtr);
+		start = OS.TextBox_SelectionStart (handle);
+		int length = OS.TextBox_SelectionLength (handle);
+		OS.TextBox_Select (handle, start+length, 0);
+		OS.TextBox_SelectionLength (handle, 0);
+		text = null;
+	}
+	if (text == null) OS.ExecutedRoutedEventArgs_Handled (e, true);
+}
+
+void HandlePreviewTextInput (int sender, int e) {
+	super.HandlePreviewTextInput (sender, e);
+	if (!checkEvent (e)) return;
+	if ((style & SWT.PASSWORD) != 0) return;
+	int textPtr = OS.TextCompositionEventArgs_Text (e);
+	String input = createJavaString(textPtr);
+	OS.GCHandle_Free (textPtr);
+	int start = OS.TextBox_SelectionStart (handle);
+	int end = start + OS.TextBox_SelectionLength (handle);
+	String text = verifyText (input, start, end, true);
+	if (text != null && !text.equals (input)) {
+		textPtr = createDotNetString (text, false);
+		OS.TextBox_SelectedText (handle, textPtr);
+		OS.GCHandle_Free (textPtr);
+		start = OS.TextBox_SelectionStart (handle);
+		int length = OS.TextBox_SelectionLength (handle);
+		OS.TextBox_Select (handle, start+length, 0);
+		OS.TextBox_SelectionLength (handle, 0);
+		text = null;
+	}
+	if (text == null) OS.TextCompositionEventArgs_Handled (e, true);
+}
+
+void HandleTextChanged (int sender, int e) {
+	if (!checkEvent (e)) return;
+	sendEvent (SWT.Modify);
+}
+
+void hookEvents () {
+	super.hookEvents();
+	if ((style & SWT.PASSWORD) != 0) {
+		int handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleTextChanged");
+		if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+		OS.PasswordBox_PasswordChanged (handle, handler);
+		OS.GCHandle_Free(handler);
+		return;
+	}
+	
+	int handler = OS.gcnew_ExecutedRoutedEventHandler (jniRef, "HandlePreviewExecutedRoutedEvent");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.CommandManager_AddPreviewExecutedHandler (handle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_TextChangedEventHandler (jniRef, "HandleTextChanged");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.TextBoxBase_TextChanged (handle, handler);
+	OS.GCHandle_Free (handler);
+}
+
+/**
+ * Inserts a string.
+ * <p>
+ * The old selection is replaced with the new text.
+ * </p>
+ *
+ * @param string the string
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is <code>null</code></li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void insert (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if ((style & SWT.PASSWORD) != 0) return;
+	if (hooks (SWT.Verify) || filters (SWT.Verify)) {
+		int start = OS.TextBox_SelectionStart (handle);
+		string = verifyText (string, start, start, false);
+		if (string == null) return;
+	}
+	int strPtr = createDotNetString (string, false);
+	OS.TextBox_SelectionLength (handle, 0);
+	OS.TextBox_SelectedText (handle, strPtr);
+	OS.GCHandle_Free (strPtr);
+	int end = OS.TextBox_SelectionStart (handle) + OS.TextBox_SelectionLength (handle);
+	OS.TextBox_Select (handle, end, 0);
+}
+
+/**
+ * Pastes text from clipboard.
+ * <p>
+ * The selected text is deleted from the widget
+ * and new text inserted from the clipboard.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void paste () {
+	checkWidget ();
+	if ((style & SWT.PASSWORD) != 0) {
+		OS.PasswordBox_Paste (handle);
+		return;
+	}
+	OS.TextBoxBase_Paste (handle);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the receiver's text is modified.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ModifyListener
+ * @see #addModifyListener
+ */
+public void removeModifyListener (ModifyListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Modify, listener);	
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is verified.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see VerifyListener
+ * @see #addVerifyListener
+ */
+public void removeVerifyListener (VerifyListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Verify, listener);	
+}
+
+/**
+ * Selects all the text in the receiver.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void selectAll () {
+	checkWidget ();
+	if ((style & SWT.PASSWORD) != 0) return;
+	OS.TextBoxBase_SelectAll (handle);
+}
+
+/**
+ * Sets the double click enabled flag.
+ * <p>
+ * The double click flag enables or disables the
+ * default action of the text widget when the user
+ * double clicks.
+ * </p><p>
+ * Note: This operation is a hint and is not supported on
+ * platforms that do not have this concept.
+ * </p>
+ * 
+ * @param doubleClick the new double click flag
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setDoubleClickEnabled (boolean doubleClick) {
+	checkWidget ();
+	this.doubleClick = doubleClick;
+}
+
+/**
+ * Sets the echo character.
+ * <p>
+ * The echo character is the character that is
+ * displayed when the user enters text or the
+ * text is changed by the programmer. Setting
+ * the echo character to '\0' clears the echo
+ * character and redraws the original text.
+ * If for any reason the echo character is invalid,
+ * or if the platform does not allow modification
+ * of the echo character, the default echo character
+ * for the platform is used.
+ * </p>
+ *
+ * @param echo the new echo character
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setEchoChar (char echo) {
+	checkWidget ();
+	if ((style & SWT.PASSWORD) == 0) return;
+	OS.PasswordBox_PasswordChar (handle, echo);
+}
+
+/**
+ * Sets the editable state.
+ *
+ * @param editable the new editable state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setEditable (boolean editable) {
+	checkWidget ();
+	style &= ~SWT.READ_ONLY;
+	if (!editable) style |= SWT.READ_ONLY;
+	if ((style & SWT.PASSWORD) != 0) return;
+	OS.TextBoxBase_IsReadOnly (handle, !editable);
+}
+
+void setFont (int font, double size) {
+	super.setFont (font, size);
+	//FIXME
+//	setTabStops (tabs);
+}
+
+/**
+ * Sets the widget message. The message text is displayed
+ * as a hint for the user, indicating the purpose of the field.
+ * <p>
+ * Typically this is used in conjunction with <code>SWT.SEARCH</code>.
+ * </p>
+ * 
+ * @param message the new message
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the message is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.3
+ */
+public void setMessage (String message) {
+	checkWidget ();
+	if (message == null) error (SWT.ERROR_NULL_ARGUMENT);
+	//TODO
+}
+
+/**
+ * Sets the orientation of the receiver, which must be one
+ * of the constants <code>SWT.LEFT_TO_RIGHT</code> or <code>SWT.RIGHT_TO_LEFT</code>.
+ * <p>
+ * Note: This operation is a hint and is not supported on
+ * platforms that do not have this concept.
+ * </p>
+ *
+ * @param orientation new orientation style
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.1.2
+ */
+public void setOrientation (int orientation) {
+	checkWidget();
+	int flags = SWT.RIGHT_TO_LEFT | SWT.LEFT_TO_RIGHT;
+	if ((orientation & flags) == 0 || (orientation & flags) == flags) return;
+	style &= ~flags;
+	style |= orientation & flags;
+	//FIXME FrameworkElement.FlowDirection ??
+}
+
+/**
+ * Sets the selection.
+ * <p>
+ * Indexing is zero based.  The range of
+ * a selection is from 0..N where N is
+ * the number of characters in the widget.
+ * </p><p>
+ * Text selections are specified in terms of
+ * caret positions.  In a text widget that
+ * contains N characters, there are N+1 caret
+ * positions, ranging from 0..N.  This differs
+ * from other functions that address character
+ * position such as getText () that use the
+ * regular array indexing rules.
+ * </p>
+ *
+ * @param start new caret position
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (int start) {
+	checkWidget ();
+	if ((style & SWT.PASSWORD) != 0) return;
+	OS.TextBox_CaretIndex (handle, start);
+}
+
+/**
+ * Sets the selection to the range specified
+ * by the given start and end indices.
+ * <p>
+ * Indexing is zero based.  The range of
+ * a selection is from 0..N where N is
+ * the number of characters in the widget.
+ * </p><p>
+ * Text selections are specified in terms of
+ * caret positions.  In a text widget that
+ * contains N characters, there are N+1 caret
+ * positions, ranging from 0..N.  This differs
+ * from other functions that address character
+ * position such as getText () that use the
+ * usual array indexing rules.
+ * </p>
+ *
+ * @param start the start of the range
+ * @param end the end of the range
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (int start, int end) {
+	checkWidget ();
+	if ((style & SWT.PASSWORD) != 0) return;
+	int first = Math.max (Math.min (start, end), 0);
+	int last = Math.min (Math.max (start, end), getCharCount ());
+	OS.TextBox_Select (handle, first, last-first);
+}
+
+/**
+ * Sets the selection to the range specified
+ * by the given point, where the x coordinate
+ * represents the start index and the y coordinate
+ * represents the end index.
+ * <p>
+ * Indexing is zero based.  The range of
+ * a selection is from 0..N where N is
+ * the number of characters in the widget.
+ * </p><p>
+ * Text selections are specified in terms of
+ * caret positions.  In a text widget that
+ * contains N characters, there are N+1 caret
+ * positions, ranging from 0..N.  This differs
+ * from other functions that address character
+ * position such as getText () that use the
+ * usual array indexing rules.
+ * </p>
+ *
+ * @param selection the point
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (Point selection) {
+	checkWidget ();
+	if (selection == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setSelection (selection.x, selection.y);
+}
+
+/**
+ * Sets the number of tabs.
+ * <p>
+ * Tab stop spacing is specified in terms of the
+ * space (' ') character.  The width of a single
+ * tab stop is the pixel width of the spaces.
+ * </p>
+ *
+ * @param tabs the number of tabs
+ *
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setTabs (int tabs) {
+	checkWidget ();
+	if (tabs < 0) return;
+	//FIXME - no equivalent API in WPF TextBox
+//	setTabStops (this.tabs = tabs);
+}
+
+/**
+ * Sets the contents of the receiver to the given string. If the receiver has style
+ * SINGLE and the argument contains multiple lines of text, the result of this
+ * operation is undefined and may vary from platform to platform.
+ *
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the string is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setText (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (hooks (SWT.Verify) || filters (SWT.Verify)) {
+		string = verifyText (string, 0, getCharCount (), false);
+		if (string == null) return;
+	}
+	int ptr = createDotNetString (string, false);
+	if ((style & SWT.PASSWORD) != 0) {
+		OS.PasswordBox_Password (handle, ptr);
+	} else {
+		OS.TextBox_Text (handle, ptr);
+	}
+	OS.GCHandle_Free (ptr);
+}
+
+/**
+ * Sets the maximum number of characters that the receiver
+ * is capable of holding to be the argument.
+ * <p>
+ * Instead of trying to set the text limit to zero, consider
+ * creating a read-only text widget.
+ * </p><p>
+ * To reset this value to the default, use <code>setTextLimit(Text.LIMIT)</code>.
+ * Specifying a limit value larger than <code>Text.LIMIT</code> sets the
+ * receiver's limit to <code>Text.LIMIT</code>.
+ * </p>
+ *
+ * @param limit new text limit
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_CANNOT_BE_ZERO - if the limit is zero</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #LIMIT
+ */
+public void setTextLimit (int limit) {
+	checkWidget ();
+	if (limit == 0) error (SWT.ERROR_CANNOT_BE_ZERO);
+	if (limit < 0) limit = LIMIT;
+	limit = Math.min (limit, LIMIT);
+	if ((style & SWT.PASSWORD) != 0) {
+		OS.PasswordBox_MaxLength (handle, limit);
+	} else {
+		OS.TextBox_MaxLength (handle, limit);
+	}
+}
+
+/**
+ * Sets the zero-relative index of the line which is currently
+ * at the top of the receiver. This index can change when lines
+ * are scrolled or new lines are added and removed.
+ *
+ * @param index the index of the top item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setTopIndex (int index) {	
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) return;
+	if ((style & SWT.PASSWORD) != 0) return;
+	int count = OS.TextBox_LineCount (handle);
+	if (count == -1) {
+		updateLayout (handle);
+		count = OS.TextBox_LineCount (handle);
+	}
+	index = Math.max(0, Math.min (index, count-1));
+	int family = OS.Control_FontFamily (handle);
+	double lineSpacing = OS.FontFamily_LineSpacing (family);
+	OS.GCHandle_Free (family);
+	double size = OS.Control_FontSize (handle);
+	double lineHeight = lineSpacing * size;
+	int name = createDotNetString ("PART_ContentHost", false);
+	int template = OS.Control_Template (handle);
+	int scroller = OS.FrameworkTemplate_FindName (template, name, handle);
+	OS.GCHandle_Free (name);
+	OS.GCHandle_Free (template);
+	if (scroller == 0) return;
+	double vertOffset = index*lineHeight;
+	OS.ScrollViewer_ScrollToVerticalOffset (scroller, vertOffset);
+	OS.GCHandle_Free (scroller);
+	updateLayout(handle);
+}
+
+/**
+ * Shows the selection.
+ * <p>
+ * If the selection is already showing
+ * in the receiver, this method simply returns.  Otherwise,
+ * lines are scrolled until the selection is visible.
+ * </p>
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void showSelection () {
+	checkWidget ();
+	if ((style & SWT.PASSWORD) != 0) return;
+	double offset = OS.TextBoxBase_VerticalOffset (handle);
+	OS.TextBoxBase_ScrollToVerticalOffset (handle, offset);
+}
+
+int traversalCode (int key, int event) {
+	int bits = super.traversalCode (key, event);
+	if ((style & SWT.READ_ONLY) != 0)  return bits;
+	if ((style & SWT.MULTI) != 0) {
+		bits &= ~SWT.TRAVERSE_RETURN;
+		if (key == OS.Key_Tab && event != 0) {
+			int keyboardDevice = OS.KeyboardEventArgs_KeyboardDevice(event);
+			int modifiers = OS.KeyboardDevice_Modifiers(keyboardDevice);
+			OS.GCHandle_Free(keyboardDevice);
+			boolean next = (modifiers & OS.ModifierKeys_Shift) == 0;
+			if (next && (modifiers & OS.ModifierKeys_Control) == 0) {
+				bits &= ~(SWT.TRAVERSE_TAB_NEXT | SWT.TRAVERSE_TAB_PREVIOUS);
+			}
+		}
+	}
+	return bits;
+}
+
+String verifyText (String string, int start, int end, boolean keyEvent) {
+	Event event = new Event ();
+	event.text = string;
+	event.start = start;
+	event.end = end;
+	if (keyEvent && string.length () == 1) {
+		event.character = string.charAt (0);
+		setInputState (event, SWT.KeyDown, 0, 0);
+	}
+	/*
+	* It is possible (but unlikely), that application
+	* code could have disposed the widget in the verify
+	* event.  If this happens, answer null to cancel
+	* the operation.
+	*/
+	sendEvent (SWT.Verify, event);
+	if (!event.doit || isDisposed ()) return null;
+	return event.text;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ToolBar.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ToolBar.java
new file mode 100644
index 0000000..ddc1d15
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ToolBar.java
@@ -0,0 +1,471 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.wpf.*;
+
+/**
+ * Instances of this class support the layout of selectable
+ * tool bar items.
+ * <p>
+ * The item children that may be added to instances of this class
+ * must be of type <code>ToolItem</code>.
+ * </p><p>
+ * Note that although this class is a subclass of <code>Composite</code>,
+ * it does not make sense to add <code>Control</code> children to it,
+ * or set a layout on it.
+ * </p><p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>FLAT, WRAP, RIGHT, HORIZONTAL, VERTICAL, SHADOW_OUT</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#toolbar">ToolBar, ToolItem snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class ToolBar extends Composite {
+	int parentingHandle, trayHandle;
+	int itemCount;
+	Control [] children;
+	int childCount;
+	
+	//TEMPORARY CODE
+	static boolean IsVertical;
+	
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#FLAT
+ * @see SWT#WRAP
+ * @see SWT#RIGHT
+ * @see SWT#HORIZONTAL
+ * @see SWT#SHADOW_OUT
+ * @see SWT#VERTICAL
+ * @see Widget#checkSubclass()
+ * @see Widget#getStyle()
+ */
+public ToolBar (Composite parent, int style) {
+	super (parent, checkStyle (style));
+	
+	/*
+	* Ensure that either of HORIZONTAL or VERTICAL is set.
+	* NOTE: HORIZONTAL and VERTICAL have the same values
+	* as H_SCROLL and V_SCROLL so it is necessary to first
+	* clear these bits to avoid scroll bars and then reset
+	* the bits using the original style supplied by the
+	* programmer.
+	*/
+	if ((style & SWT.VERTICAL) != 0) {
+		this.style |= SWT.VERTICAL;
+	} else {
+		this.style |= SWT.HORIZONTAL;
+	}
+}
+
+static int checkStyle (int style) {
+	IsVertical = (style & SWT.V_SCROLL) != 0;
+	/*
+	* Even though it is legal to create this widget
+	* with scroll bars, they serve no useful purpose
+	* because they do not automatically scroll the
+	* widget's client area.  The fix is to clear
+	* the SWT style.
+	*/
+	return style & ~(SWT.H_SCROLL | SWT.V_SCROLL);
+}
+
+void addChild (Control widget) {
+	super.addChild (widget);
+	if (childCount == children.length) {
+		Control [] newChildren = new Control [childCount + 4];
+		System.arraycopy(children, 0, newChildren, 0, childCount);
+		children = newChildren;
+	}
+	children [childCount++] = widget;
+}
+
+int backgroundProperty () {
+	return OS.Control_BackgroundProperty ();
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+	checkWidget ();
+	return super.computeSize (handle, wHint, hHint, changed);
+}
+
+void createHandle () {
+	parentingHandle = OS.gcnew_Canvas ();
+	if (parentingHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	handle = OS.gcnew_ToolBar ();
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	trayHandle = OS.gcnew_ToolBarTray ();
+	if (trayHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	int brush = OS.Brushes_Transparent ();
+	OS.ToolBarTray_Background (trayHandle, brush);
+	OS.GCHandle_Free (brush);
+	int toolbars = OS.ToolBarTray_ToolBars (trayHandle);
+	OS.IList_Add (toolbars, handle);
+	OS.GCHandle_Free (toolbars);
+	if (IsVertical) OS.ToolBarTray_Orientation (trayHandle, OS.Orientation_Vertical);
+	int children = OS.Panel_Children (parentingHandle);
+	OS.UIElementCollection_Add (children, trayHandle);
+	OS.GCHandle_Free (children);
+	//FIXME: FLAT, WRAP, RIGHT, SHADOW_OUT
+}
+
+void createItem (ToolItem item, int index) {
+	if (!(0 <= index && index <= itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	item.createWidget ();
+	int items = OS.ItemsControl_Items (handle);
+	OS.ItemCollection_Insert (items, index, item.topHandle ());
+	int count = OS.ItemCollection_Count (items);
+	OS.GCHandle_Free (items);
+	if (itemCount == count) error (SWT.ERROR_ITEM_NOT_ADDED);
+	itemCount++;
+}
+
+void createWidget () {
+	super.createWidget();
+	children = new Control [4];
+	updateLayout (parentingHandle);
+	setThumbVisibility (OS.Visibility_Collapsed);
+	setButtonVisibility (OS.Visibility_Collapsed);
+}
+
+void deregister () {
+	super.deregister ();
+	display.removeWidget (parentingHandle);
+}
+
+int defaultBackground () {
+	if ((style & SWT.FLAT) != 0) {
+		return OS.Colors_Transparent;
+	}
+	return 0;
+}
+
+void destroyItem (ToolItem item) {
+	int items = OS.ItemsControl_Items (handle);
+	OS.ItemCollection_Remove (items,  item.topHandle ());
+	int count = OS.ItemCollection_Count (items);
+	OS.GCHandle_Free (items);
+	if (itemCount == count) error (SWT.ERROR_ITEM_NOT_REMOVED);
+	itemCount--;
+}
+
+Control [] _getChildren () {
+	// return children in reverse order.
+	Control[] result = new Control [childCount];
+	for (int i =0; i < childCount; i++) {
+		result [childCount - i - 1] = children [i]; 
+	}
+	return result;
+}
+
+ToolItem getItem (int items, int index) {
+	int item = OS.ItemCollection_GetItemAt (items, index);
+	ToolItem result = (ToolItem) display.getWidget (item);
+	OS.GCHandle_Free (item);
+	return result;
+}
+
+/**
+ * Returns the item at the given, zero-relative index in the
+ * receiver. Throws an exception if the index is out of range.
+ *
+ * @param index the index of the item to return
+ * @return the item at the given index
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public ToolItem getItem (int index) {
+	checkWidget ();
+	if (index < 0 || index >= itemCount) error (SWT.ERROR_INVALID_RANGE);
+	int items = OS.ItemsControl_Items (handle);
+	ToolItem result = getItem (items, index); 
+	OS.GCHandle_Free (items);
+	return result;
+}
+
+/**
+ * Returns the item at the given point in the receiver
+ * or null if no such item exists. The point is in the
+ * coordinate system of the receiver.
+ *
+ * @param point the point used to locate the item
+ * @return the item at the given point
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public ToolItem getItem (Point point) {
+	checkWidget ();
+	if (point == null) error (SWT.ERROR_NULL_ARGUMENT);
+	ToolItem [] items = getItems ();
+	for (int i=0; i<items.length; i++) {
+		Rectangle rect = items [i].getBounds ();
+		if (rect.contains (point)) return items [i];
+	}
+	return null;
+}
+
+/**
+ * Returns the number of items contained in the receiver.
+ *
+ * @return the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemCount () {
+	checkWidget ();
+	return itemCount;
+}
+
+/**
+ * Returns an array of <code>ToolItem</code>s which are the items
+ * in the receiver. 
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the items in the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public ToolItem [] getItems () {
+	checkWidget ();
+	ToolItem [] result = new ToolItem [itemCount];
+	int items = OS.ItemsControl_Items (handle);
+	for (int i = 0; i < itemCount; i++) {
+		result[i] = getItem (items, i);
+	}
+	OS.GCHandle_Free (items);
+	return result;
+}
+
+/**
+ * Returns the number of rows in the receiver. When
+ * the receiver has the <code>WRAP</code> style, the
+ * number of rows can be greater than one.  Otherwise,
+ * the number of rows is always one.
+ *
+ * @return the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getRowCount () {
+	checkWidget ();
+	//FIXME: when WRAP implemented
+	return 1;
+}
+
+boolean hasItems () {
+	return true;
+}
+
+/**
+ * Searches the receiver's list starting at the first item
+ * (index 0) until an item is found that is equal to the 
+ * argument, and returns the index of that item. If no item
+ * is found, returns -1.
+ *
+ * @param item the search item
+ * @return the index of the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the tool item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the tool item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int indexOf (ToolItem item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (item.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
+	int items = OS.ItemsControl_Items (handle);
+	int index = OS.ItemCollection_IndexOf (items, item.topHandle ());
+	OS.GCHandle_Free (items);
+	return index;
+}
+
+boolean mnemonicHit (char key) {
+	//TODO
+	return false;
+}
+
+boolean mnemonicMatch (char key) {
+//	for (int i=0; i<itemCount; i++) {
+//		if (mnemonicMatch (items [i].textHandle, key)) return true;
+//	}
+	return false;
+}
+
+int parentingHandle () {
+	return parentingHandle;
+}
+
+void register () {
+	super.register ();
+	display.addWidget (parentingHandle, this);
+}
+
+void releaseChildren (boolean destroy) {
+	int items = OS.ItemsControl_Items (handle);
+	for (int i=0; i<itemCount; i++) {
+		ToolItem item = getItem (items, i);
+		if (item != null && !item.isDisposed ()) item.release (false);
+	}
+	OS.GCHandle_Free (items);
+	super.releaseChildren (destroy);
+}
+
+void removeChild (Control control) {
+	super.removeChild (control);
+	int index = 0;
+	while (index < childCount) {
+		if (children [index] == control) break;
+		index++;
+	}
+	if (index == childCount) return;
+	System.arraycopy (children, index+1, children, index, --childCount - index);
+	children [childCount] = null;
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (parentingHandle != 0) OS.GCHandle_Free (parentingHandle);
+	parentingHandle = 0;
+	if (trayHandle != 0) OS.GCHandle_Free (trayHandle);
+	trayHandle = 0;
+}
+
+void removeControl (Control control) {
+	super.removeControl (control);
+	int items = OS.ItemsControl_Items (handle);
+	for (int i=0; i<itemCount; i++) {
+		ToolItem item = getItem (items, i);
+		if (item.control == control) {
+			item.setControl (null);
+			break;
+		}
+	}
+	OS.GCHandle_Free (items);
+}
+
+void setButtonVisibility (byte visibility) {
+	int template = OS.Control_Template (handle);
+	int overFlowName = createDotNetString ("OverflowGrid", false);
+	int overFlowGrid = OS.FrameworkTemplate_FindName (template, overFlowName, handle);
+	if (overFlowGrid != 0) {
+		OS.UIElement_Visibility (overFlowGrid, visibility);
+		OS.GCHandle_Free (overFlowGrid);
+	}
+	OS.GCHandle_Free (overFlowName);
+	int borderName = createDotNetString ("MainPanelBorder", false);
+	int border = OS.FrameworkTemplate_FindName (template, borderName, handle);
+	if (border != 0) {
+		int left = visibility == OS.Visibility_Visible ? 11 : 0;
+		int margin = OS.gcnew_Thickness (0, 0, left, 0);
+		OS.FrameworkElement_Margin (border, margin);
+		OS.GCHandle_Free (border);
+		OS.GCHandle_Free (margin);
+	}
+	OS.GCHandle_Free (borderName);
+	OS.GCHandle_Free (template);	
+}
+
+void setForegroundBrush (int brush) {
+	if (brush != 0) {
+		OS.Control_Foreground (handle, brush);
+	} else {
+		int property = OS.Control_ForegroundProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+	}
+}
+
+void setThumbVisibility (byte visibility) {
+	int template = OS.Control_Template (handle);
+	int thumbName = createDotNetString ("ToolBarThumb", false);
+	int thumb = OS.FrameworkTemplate_FindName (template, thumbName, handle);
+	if (thumb != 0) {
+		OS.UIElement_Visibility (thumb, visibility);
+		OS.GCHandle_Free (thumb);
+	}
+	OS.GCHandle_Free (thumbName);
+	OS.GCHandle_Free (template);	
+}
+
+int topHandle() {
+	return parentingHandle;
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ToolItem.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ToolItem.java
new file mode 100644
index 0000000..5dda1d3
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/ToolItem.java
@@ -0,0 +1,849 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+ 
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * Instances of this class represent a selectable user interface object
+ * that represents a button in a tool bar.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>PUSH, CHECK, RADIO, SEPARATOR, DROP_DOWN</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection</dd>
+ * </dl>
+ * <p>
+ * Note: Only one of the styles CHECK, PUSH, RADIO, SEPARATOR and DROP_DOWN 
+ * may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#toolbar">ToolBar, ToolItem snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class ToolItem extends Item {
+	int imageHandle, textHandle, arrowHandle;
+	ToolBar parent;
+	Control control;
+	String toolTipText;
+	Image disabledImage, hotImage;
+	boolean ignoreSelection;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>ToolBar</code>) and a style value
+ * describing its behavior and appearance. The item is added
+ * to the end of the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#PUSH
+ * @see SWT#CHECK
+ * @see SWT#RADIO
+ * @see SWT#SEPARATOR
+ * @see SWT#DROP_DOWN
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public ToolItem (ToolBar parent, int style) {
+	super (parent, checkStyle (style));
+	this.parent = parent;
+	parent.createItem (this, parent.getItemCount ());
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>ToolBar</code>), a style value
+ * describing its behavior and appearance, and the index
+ * at which to place it in the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ * @param index the zero-relative index to store the receiver in its parent
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the parent (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#PUSH
+ * @see SWT#CHECK
+ * @see SWT#RADIO
+ * @see SWT#SEPARATOR
+ * @see SWT#DROP_DOWN
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public ToolItem (ToolBar parent, int style, int index) {
+	super (parent, checkStyle (style));
+	this.parent = parent;
+	parent.createItem (this, index);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * When <code>widgetSelected</code> is called when the mouse is over the arrow portion of a drop-down tool,
+ * the event object detail field contains the value <code>SWT.ARROW</code>.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the control is selected by the user,
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+static int checkStyle (int style) {
+	return checkBits (style, SWT.PUSH, SWT.CHECK, SWT.RADIO, SWT.SEPARATOR, SWT.DROP_DOWN, 0);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+int createArrow () { 
+	int geometry = OS.gcnew_StreamGeometry ();
+	int context = OS.StreamGeometry_Open (geometry);
+	int start = OS.gcnew_Point (0, 1);
+	int point = OS.gcnew_Point (3, 4);
+	int end = OS.gcnew_Point (6, 1);
+	OS.StreamGeometryContext_BeginFigure (context, start, true, true);
+	OS.StreamGeometryContext_LineTo (context, point, true, true);
+	OS.StreamGeometryContext_LineTo (context, end, true, true);
+	OS.StreamGeometryContext_Close (context);
+	int path = OS.gcnew_Path ();
+	OS.Path_Data (path, geometry);
+	int padding = OS.gcnew_Thickness (3, 0, 0, 0);
+	OS.FrameworkElement_Margin (path, padding);
+	int brush = OS.Brushes_Black ();
+	OS.Path_Fill (path, brush);
+	OS.FrameworkElement_Width (path, 6);
+	OS.FrameworkElement_Height (path, 6);
+	OS.FrameworkElement_HorizontalAlignment (path, OS.HorizontalAlignment_Center);
+	OS.FrameworkElement_VerticalAlignment (path, OS.VerticalAlignment_Center);
+	OS.GCHandle_Free (padding);
+	OS.GCHandle_Free (start);
+	OS.GCHandle_Free (point);
+	OS.GCHandle_Free (end);
+	OS.GCHandle_Free (brush);
+	OS.GCHandle_Free (context);
+	OS.GCHandle_Free (geometry);
+	return path;
+}
+
+void createHandle () {
+	if ((style & SWT.SEPARATOR) != 0) {
+		handle = OS.gcnew_Separator ();
+		if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+		return;
+	}	
+	int bits = SWT.RADIO | SWT.CHECK | SWT.PUSH | SWT.DROP_DOWN;
+	switch (style & bits) {
+		case SWT.RADIO:
+			handle = OS.gcnew_RadioButton();
+			if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+			break;
+		case SWT.CHECK:
+			handle = OS.gcnew_CheckBox();
+			if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+			break;
+		case SWT.DROP_DOWN:
+			handle = OS.gcnew_Button();
+			if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+			break;
+		case SWT.PUSH:
+		default:
+			handle = OS.gcnew_Button();
+			if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+			break;
+	}
+	OS.ToolBar_SetOverflowMode (handle, OS.OverflowMode_Never);
+	imageHandle = OS.gcnew_Image ();
+	if (imageHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.Image_Stretch (imageHandle, OS.Stretch_None);
+	OS.UIElement_Visibility (imageHandle, OS.Visibility_Collapsed);
+	textHandle = OS.gcnew_AccessText ();
+	if (textHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.FrameworkElement_VerticalAlignment (textHandle, OS.VerticalAlignment_Center);
+	OS.FrameworkElement_HorizontalAlignment (textHandle, OS.HorizontalAlignment_Center);
+	int panel = OS.gcnew_StackPanel ();
+	if (panel == 0) error (SWT.ERROR_NO_HANDLES);
+	int orientation = (parent.style & SWT.RIGHT) != 0 ? OS.Orientation_Horizontal : OS.Orientation_Vertical;
+	OS.StackPanel_Orientation (panel, orientation);
+	int thickness = OS.gcnew_Thickness (1, 1, 1, 1);
+	if (thickness == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.FrameworkElement_Margin (panel, thickness);
+	OS.GCHandle_Free (thickness);
+	int children = OS.Panel_Children (panel);
+	OS.UIElementCollection_Add (children, imageHandle);
+	OS.UIElementCollection_Add (children, textHandle);
+	if ((style & SWT.DROP_DOWN) != 0) {
+		arrowHandle = createArrow ();
+		if ((parent.style & SWT.RIGHT) != 0) {
+			OS.UIElementCollection_Add (children, arrowHandle);
+		} else {
+			int newPanel = OS.gcnew_StackPanel ();
+			OS.StackPanel_Orientation (newPanel, OS.Orientation_Horizontal);
+			int horizontalChildren = OS.Panel_Children (newPanel);
+			OS.UIElementCollection_Add (horizontalChildren, panel);
+			OS.UIElementCollection_Add (horizontalChildren, arrowHandle);
+			OS.GCHandle_Free (horizontalChildren);
+			OS.GCHandle_Free (panel);
+			panel = newPanel;
+		}
+	}
+	OS.ContentControl_Content (handle, panel);
+	OS.GCHandle_Free (children);
+	OS.GCHandle_Free (panel);
+	int margin = OS.gcnew_Thickness (0, 0, 0, 0);
+	OS.Control_Padding (handle, margin);
+	OS.GCHandle_Free (margin);
+}
+
+void deregister () {
+	display.removeWidget (handle);
+}
+
+void destroyWidget () {
+	parent.destroyItem (this);
+	releaseHandle ();
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location
+ * relative to its parent.
+ *
+ * @return the receiver's bounding rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Rectangle getBounds () {
+	checkWidget ();
+	int parentHandle = parent.handle;
+	int topHandle = control == null  ? topHandle () : control.topHandle ();
+	int point = OS.gcnew_Point (0, 0);
+	if (point == 0) error (SWT.ERROR_NO_HANDLES);
+	int location = OS.UIElement_TranslatePoint (topHandle, point, parentHandle);
+	int x = (int) OS.Point_X (location);
+	int y = (int) OS.Point_Y (location);
+	OS.GCHandle_Free (point);
+	OS.GCHandle_Free (location);
+	int width = (int) OS.FrameworkElement_ActualWidth (topHandle);
+	int height = (int) OS.FrameworkElement_ActualHeight (topHandle);
+	return new Rectangle (x, y, width, height);
+}
+
+/**
+ * Returns the control that is used to fill the bounds of
+ * the item when the item is a <code>SEPARATOR</code>.
+ *
+ * @return the control
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Control getControl () {
+	checkWidget ();
+	return control;
+}
+
+/**
+ * Returns the receiver's disabled image if it has one, or null
+ * if it does not.
+ * <p>
+ * The disabled image is displayed when the receiver is disabled.
+ * </p>
+ *
+ * @return the receiver's disabled image
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Image getDisabledImage () {
+	checkWidget ();
+	return disabledImage;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is enabled, and
+ * <code>false</code> otherwise. A disabled control is typically
+ * not selectable from the user interface and draws with an
+ * inactive or "grayed" look.
+ *
+ * @return the receiver's enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #isEnabled
+ */
+public boolean getEnabled () {
+	checkWidget ();
+	return OS.UIElement_IsEnabled (handle);
+}
+
+/**
+ * Returns the receiver's hot image if it has one, or null
+ * if it does not.
+ * <p>
+ * The hot image is displayed when the mouse enters the receiver.
+ * </p>
+ *
+ * @return the receiver's hot image
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Image getHotImage () {
+	checkWidget ();
+	return hotImage;
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>ToolBar</code>.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public ToolBar getParent () {
+	checkWidget ();
+	return parent;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is selected,
+ * and false otherwise.
+ * <p>
+ * When the receiver is of type <code>CHECK</code> or <code>RADIO</code>,
+ * it is selected when it is checked (which some platforms draw as a
+ * pushed in button). If the receiver is of any other type, this method
+ * returns false.
+ * </p>
+ *
+ * @return the selection state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getSelection () {
+	checkWidget ();
+	if ((style & (SWT.CHECK | SWT.RADIO)) == 0) return false;
+	return OS.ToggleButton_IsChecked(handle);
+}
+
+/**
+ * Returns the receiver's tool tip text, or null if it has not been set.
+ *
+ * @return the receiver's tool tip text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getToolTipText () {
+	checkWidget ();
+	return toolTipText;
+}
+
+Control getWidgetControl () {
+	return parent;
+}
+
+/**
+ * Gets the width of the receiver.
+ *
+ * @return the width
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getWidth () {
+	checkWidget ();
+	return (int) OS.FrameworkElement_ActualWidth (topHandle ());
+}
+
+void HandleChecked (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if (ignoreSelection) return;
+	postEvent (SWT.Selection);
+}
+
+void HandleClick (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if (ignoreSelection) return;
+	Event event = new Event ();
+	if ((style & SWT.DROP_DOWN) != 0) {
+		int mousePos = OS.Mouse_GetPosition (handle);
+		int zero = OS.gcnew_Point (0, OS.FrameworkElement_ActualHeight (topHandle ()));
+		int arrowPos = OS.UIElement_TranslatePoint (arrowHandle, zero, handle);
+		if (OS.Point_X (mousePos) > OS.Point_X (arrowPos)) {
+			event.detail = SWT.ARROW;
+			int location = OS.UIElement_TranslatePoint (handle, zero, parent.handle);
+			event.x = (int) OS.Point_X (location);
+			event.y = (int) OS.Point_Y (location);
+			OS.GCHandle_Free (location);
+		}
+		OS.GCHandle_Free (arrowPos);
+		OS.GCHandle_Free (zero);
+		OS.GCHandle_Free (mousePos);
+	}
+	postEvent (SWT.Selection, event);
+}
+
+void HandleUnchecked (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if (ignoreSelection) return;
+	postEvent (SWT.Selection);
+}
+
+void HandleMouseEnter (int sender, int e) {
+	if (!checkEvent (e)) return;
+	updateImages (getEnabled () && parent.getEnabled ());
+}
+
+void HandleMouseLeave (int sender, int e) {
+	if (!checkEvent (e)) return;
+	updateImages (getEnabled () && parent.getEnabled ());
+}
+
+void hookEvents() {
+	super.hookEvents ();
+	if ((style & SWT.SEPARATOR) != 0) return;
+	if ((style & (SWT.RADIO | SWT.CHECK)) != 0) {
+		int handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleChecked");
+		if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+		OS.ToggleButton_Checked (handle, handler);
+		OS.GCHandle_Free (handler);	
+		handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleUnchecked");
+		if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+		OS.ToggleButton_Unchecked (handle, handler);
+		OS.GCHandle_Free (handler);
+	} else {
+		int handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleClick");
+		if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+		OS.ButtonBase_Click (handle, handler);
+		OS.GCHandle_Free (handler);
+	}	
+	int handler = OS.gcnew_MouseEventHandler (jniRef, "HandleMouseEnter");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.UIElement_MouseEnter (handle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_MouseEventHandler (jniRef, "HandleMouseLeave");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.UIElement_MouseLeave (handle, handler);
+	OS.GCHandle_Free (handler);
+}
+
+/**
+ * Returns <code>true</code> if the receiver is enabled and all
+ * of the receiver's ancestors are enabled, and <code>false</code>
+ * otherwise. A disabled control is typically not selectable from the
+ * user interface and draws with an inactive or "grayed" look.
+ *
+ * @return the receiver's enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #getEnabled
+ */
+public boolean isEnabled () {
+	checkWidget ();
+	return getEnabled () && parent.isEnabled ();
+}
+
+void register () { 
+	display.addWidget (handle, this);
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	control = null;
+	toolTipText = null;
+	image = disabledImage = hotImage = null;
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (handle != 0) OS.GCHandle_Free (handle);
+	handle = 0;
+	if (imageHandle != 0) {
+		OS.GCHandle_Free (imageHandle);
+		imageHandle = 0;
+	}
+	if (textHandle != 0) {
+		OS.GCHandle_Free (textHandle);
+		textHandle = 0;
+	}
+	if (arrowHandle != 0) {
+		OS.GCHandle_Free (arrowHandle);
+		arrowHandle = 0;
+	}
+	parent = null;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+/**
+ * Sets the control that is used to fill the bounds of
+ * the item when the item is a <code>SEPARATOR</code>.
+ *
+ * @param control the new control
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the control has been disposed</li> 
+ *    <li>ERROR_INVALID_PARENT - if the control is not in the same widget tree</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setControl (Control control) {
+	checkWidget ();
+	if (control != null) {
+		if (control.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+		if (control.parent != parent) error (SWT.ERROR_INVALID_PARENT);
+	}
+	if ((style & SWT.SEPARATOR) == 0) return;
+	if (control == null) {
+		int property = OS.Control_BackgroundProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		Control oldControl = this.control;
+		if (oldControl != null && !oldControl.isDisposed ()) OS.Panel_SetZIndex (oldControl.handle, 0);
+	} else {
+		int brush = OS.Brushes_Transparent ();
+		OS.Control_Background (handle, brush);
+		OS.GCHandle_Free (brush);
+		int pt = OS.gcnew_Point (0, 0);
+		if (pt == 0) error (SWT.ERROR_NO_HANDLES);
+		int loc = OS.UIElement_TranslatePoint (handle, pt, parent.parentingHandle);
+		OS.GCHandle_Free (pt);
+		OS.Canvas_SetLeft (control.handle, OS.Point_X (loc));
+		OS.Canvas_SetTop (control.handle, OS.Point_Y (loc));
+		OS.Panel_SetZIndex (control.handle, parent.childCount);
+		OS.GCHandle_Free (loc);
+	}
+	this.control = control;	
+}
+
+/**
+ * Enables the receiver if the argument is <code>true</code>,
+ * and disables it otherwise.
+ * <p>
+ * A disabled control is typically
+ * not selectable from the user interface and draws with an
+ * inactive or "grayed" look.
+ * </p>
+ *
+ * @param enabled the new enabled state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setEnabled (boolean enabled) {
+	checkWidget ();
+	OS.UIElement_IsEnabled (handle, enabled);
+	updateImages (enabled && parent.getEnabled ());
+	if (arrowHandle != 0) {
+		OS.UIElement_Opacity (arrowHandle, enabled ? 1 : 0.4);
+	}
+}
+
+/**
+ * Sets the receiver's disabled image to the argument, which may be
+ * null indicating that no disabled image should be displayed.
+ * <p>
+ * The disabled image is displayed when the receiver is disabled.
+ * </p>
+ *
+ * @param image the disabled image to display on the receiver (may be null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setDisabledImage (Image image) {
+	checkWidget ();
+	if ((style & SWT.SEPARATOR) != 0) return;
+	if (image != null && image.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	disabledImage = image;
+	updateImages (getEnabled () && parent.getEnabled ());
+}
+
+/**
+ * Sets the receiver's hot image to the argument, which may be
+ * null indicating that no hot image should be displayed.
+ * <p>
+ * The hot image is displayed when the mouse enters the receiver.
+ * </p>
+ *
+ * @param image the hot image to display on the receiver (may be null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setHotImage (Image image) {
+	checkWidget ();
+	if ((style & SWT.SEPARATOR) != 0) return;
+	if (image != null && image.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	hotImage = image;
+	updateImages (getEnabled () && parent.getEnabled ());
+}
+
+public void setImage (Image image) {
+	checkWidget ();
+	if ((style & SWT.SEPARATOR) != 0) return;
+	if (image != null && image.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	super.setImage (image);
+	updateImages (getEnabled () && parent.getEnabled ());
+}
+
+/**
+ * Sets the selection state of the receiver.
+ * <p>
+ * When the receiver is of type <code>CHECK</code> or <code>RADIO</code>,
+ * it is selected when it is checked (which some platforms draw as a
+ * pushed in button).
+ * </p>
+ *
+ * @param selected the new selection state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setSelection (boolean selected) {
+	checkWidget ();
+	if ((style & (SWT.CHECK | SWT.RADIO)) == 0) return;
+	ignoreSelection = true;
+	OS.ToggleButton_IsChecked (handle, selected);
+	ignoreSelection = false;
+}
+
+/**
+ * Sets the receiver's text. The string may include
+ * the mnemonic character.
+ * </p>
+ * <p>
+ * Mnemonics are indicated by an '&amp;' that causes the next
+ * character to be the mnemonic.  When the user presses a
+ * key sequence that matches the mnemonic, a selection
+ * event occurs. On most platforms, the mnemonic appears
+ * underlined but may be emphasised in a platform specific
+ * manner.  The mnemonic indicator character '&amp;' can be
+ * escaped by doubling it in the string, causing a single
+ * '&amp;' to be displayed.
+ * </p>
+ * 
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setText (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if ((style & SWT.SEPARATOR) != 0) return;
+	if (string.equals (text)) return;
+	super.setText (string);	
+	int strPtr = createDotNetString (string, true);
+	if (strPtr == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.AccessText_Text (textHandle, strPtr);
+	OS.GCHandle_Free (strPtr);
+	OS.UIElement_Visibility (textHandle, string.length() == 0 && image != null ? OS.Visibility_Collapsed : OS.Visibility_Visible);
+	int spacing = image != null && text.length () != 0 ? 3 : 0;
+	int margin = (parent.style & SWT.RIGHT) != 0 ? OS.gcnew_Thickness (0, 0, spacing, 0) : OS.gcnew_Thickness (0, 0, 0, spacing);
+	OS.FrameworkElement_Margin (imageHandle, margin);
+	OS.GCHandle_Free (margin);
+}
+
+/**
+ * Sets the receiver's tool tip text to the argument, which
+ * may be null indicating that the default tool tip for the 
+ * control will be shown. For a control that has a default
+ * tool tip, such as the Tree control on Windows, setting
+ * the tool tip text to an empty string replaces the default,
+ * causing no tool tip text to be shown.
+ * <p>
+ * The mnemonic indicator (character '&amp;') is not displayed in a tool tip.
+ * To display a single '&amp;' in the tool tip, the character '&amp;' can be 
+ * escaped by doubling it in the string.
+ * </p>
+ * 
+ * @param string the new tool tip text (or null)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setToolTipText (String string) {
+	checkWidget ();
+	toolTipText = string;
+	if (string != null && string.length() == 0) string = null;
+	int strPtr = createDotNetString (string, false);
+	OS.FrameworkElement_ToolTip (handle, strPtr);
+	if (strPtr != 0) OS.GCHandle_Free (strPtr);
+}
+
+/**
+ * Sets the width of the receiver, for <code>SEPARATOR</code> ToolItems.
+ *
+ * @param width the new width
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setWidth (int width) {
+	checkWidget ();
+	int controlHandle = control != null ? control.handle : handle;
+	OS.FrameworkElement_Width (controlHandle, width);
+}
+
+void updateImages (boolean enabled) {
+	if ((style & SWT.SEPARATOR) != 0) return;
+	Image next = image;
+	if (image != null && !enabled && disabledImage != null) next = disabledImage;
+	if (image != null && enabled && hotImage != null && OS.UIElement_IsMouseOver (handle)) next = hotImage;
+	OS.Image_Source (imageHandle, next != null ? next.handle : 0);	
+	OS.UIElement_Visibility (imageHandle, next != null ? OS.Visibility_Visible : OS.Visibility_Collapsed);
+	OS.UIElement_Visibility (textHandle, next != null && text.length () == 0 ? OS.Visibility_Collapsed : OS.Visibility_Visible);
+	int spacing = next != null && text.length () != 0 ? 3 : 0;
+	int margin = (parent.style & SWT.RIGHT) != 0 ? OS.gcnew_Thickness (0, 0, spacing, 0) : OS.gcnew_Thickness (0, 0, 0, spacing);
+	if (margin == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.FrameworkElement_Margin (imageHandle, margin);
+	OS.GCHandle_Free (margin);
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Tracker.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Tracker.java
new file mode 100644
index 0000000..884c71b
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Tracker.java
@@ -0,0 +1,892 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+ 
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+
+/**
+ *  Instances of this class implement rubber banding rectangles that are
+ *  drawn onto a parent <code>Composite</code> or <code>Display</code>.
+ *  These rectangles can be specified to respond to mouse and key events
+ *  by either moving or resizing themselves accordingly.  Trackers are
+ *  typically used to represent window geometries in a lightweight manner.
+ *  
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>LEFT, RIGHT, UP, DOWN, RESIZE</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Move, Resize</dd>
+ * </dl>
+ * <p>
+ * Note: Rectangle move behavior is assumed unless RESIZE is specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tracker">Tracker snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Tracker extends Widget {
+	Composite parent;
+	boolean cancelled, stippled;
+	Rectangle [] rectangles, proportions;
+	Rectangle bounds;
+	Cursor clientCursor;
+	int resizeCursor, cursorOrientation = SWT.NONE;
+	int oldX, oldY;
+	int canvasHandle;
+	int frame;
+	
+	/*
+	* The following values mirror step sizes on Windows
+	*/
+	final static int STEPSIZE_SMALL = 1;
+	final static int STEPSIZE_LARGE = 9;
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a widget which will be the parent of the new instance (cannot be null)
+ * @param style the style of widget to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#LEFT
+ * @see SWT#RIGHT
+ * @see SWT#UP
+ * @see SWT#DOWN
+ * @see SWT#RESIZE
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Tracker (Composite parent, int style) {
+	super (parent, checkStyle (style));
+	this.parent = parent;
+}
+
+/**
+ * Constructs a new instance of this class given the display
+ * to create it on and a style value describing its behavior
+ * and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p><p>
+ * Note: Currently, null can be passed in for the display argument.
+ * This has the effect of creating the tracker on the currently active
+ * display if there is one. If there is no current display, the 
+ * tracker is created on a "default" display. <b>Passing in null as
+ * the display argument is not considered to be good coding style,
+ * and may not be supported in a future release of SWT.</b>
+ * </p>
+ *
+ * @param display the display to create the tracker on
+ * @param style the style of control to construct
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ * 
+ * @see SWT#LEFT
+ * @see SWT#RIGHT
+ * @see SWT#UP
+ * @see SWT#DOWN
+ * @see SWT#RESIZE
+ */
+public Tracker (Display display, int style) {
+	if (display == null) display = Display.getCurrent ();
+	if (display == null) display = Display.getDefault ();
+	if (!display.isValidThread ()) {
+		error (SWT.ERROR_THREAD_INVALID_ACCESS);
+	}
+	this.style = checkStyle (style);
+	this.display = display;
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is moved or resized, by sending
+ * it one of the messages defined in the <code>ControlListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ControlListener
+ * @see #removeControlListener
+ */
+public void addControlListener (ControlListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Resize, typedListener);
+	addListener (SWT.Move, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when keys are pressed and released on the system keyboard, by sending
+ * it one of the messages defined in the <code>KeyListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see KeyListener
+ * @see #removeKeyListener
+ */
+public void addKeyListener (KeyListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.KeyUp,typedListener);
+	addListener (SWT.KeyDown,typedListener);
+}
+
+Point adjustMoveCursor () {
+	if (bounds == null) return null;
+	int newX = bounds.x + bounds.width / 2;
+	int newY = bounds.y;
+	Point point = display.map (parent, null, newX, newY);
+	display.setCursorLocation (point);
+	return point;
+}
+
+Point adjustResizeCursor () {
+	if (bounds == null) return null;
+	int newX, newY;
+	if ((cursorOrientation & SWT.LEFT) != 0) {
+		newX = bounds.x;
+	} else if ((cursorOrientation & SWT.RIGHT) != 0) {
+		newX = bounds.x + bounds.width;
+	} else {
+		newX = bounds.x + bounds.width / 2;
+	}
+	if ((cursorOrientation & SWT.UP) != 0) {
+		newY = bounds.y;
+	} else if ((cursorOrientation & SWT.DOWN) != 0) {
+		newY = bounds.y + bounds.height;
+	} else {
+		newY = bounds.y + bounds.height / 2;
+	}
+
+	Point point = display.map (parent, null, newX, newY);
+	display.setCursorLocation (point);
+
+	/*
+	* If the client has not provided a custom cursor then determine
+	* the appropriate resize cursor.
+	*/
+	if (clientCursor == null) {
+		int newCursor = 0;
+		switch (cursorOrientation) {
+			case SWT.UP:
+				newCursor = OS.Cursors_SizeNS ();
+				break;
+			case SWT.DOWN:
+				newCursor = OS.Cursors_SizeNS ();
+				break;
+			case SWT.LEFT:
+				newCursor = OS.Cursors_SizeWE ();
+				break;
+			case SWT.RIGHT:
+				newCursor = OS.Cursors_SizeWE ();
+				break;
+			case SWT.LEFT | SWT.UP:
+				newCursor = OS.Cursors_SizeNWSE ();
+				break;
+			case SWT.RIGHT | SWT.DOWN:
+				newCursor = OS.Cursors_SizeNWSE ();
+				break;
+			case SWT.LEFT | SWT.DOWN:
+				newCursor = OS.Cursors_SizeNESW ();
+				break;
+			case SWT.RIGHT | SWT.UP:
+				newCursor = OS.Cursors_SizeNESW ();
+				break;
+			default:
+				newCursor = OS.Cursors_SizeAll ();
+				break;
+		}
+		OS.FrameworkElement_Cursor (canvasHandle, newCursor);
+		if (resizeCursor != 0) {
+			OS.GCHandle_Free (resizeCursor);
+		}
+		resizeCursor = newCursor;
+	}
+	return point;
+}
+
+static int checkStyle (int style) {
+	if ((style & (SWT.LEFT | SWT.RIGHT | SWT.UP | SWT.DOWN)) == 0) {
+		style |= SWT.LEFT | SWT.RIGHT | SWT.UP | SWT.DOWN;
+	}
+	return style;
+}
+
+/**
+ * Stops displaying the tracker rectangles.  Note that this is not considered
+ * to be a cancelation by the user.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void close () {
+	checkWidget ();
+	if (frame != 0) OS.DispatcherFrame_Continue(frame, false);
+}
+
+Rectangle computeBounds () {
+	if (rectangles.length == 0) return null;
+	int xMin = rectangles [0].x;
+	int yMin = rectangles [0].y;
+	int xMax = rectangles [0].x + rectangles [0].width;
+	int yMax = rectangles [0].y + rectangles [0].height;
+	
+	for (int i = 1; i < rectangles.length; i++) {
+		if (rectangles [i].x < xMin) xMin = rectangles [i].x;
+		if (rectangles [i].y < yMin) yMin = rectangles [i].y;
+		int rectRight = rectangles [i].x + rectangles [i].width;
+		if (rectRight > xMax) xMax = rectRight;		
+		int rectBottom = rectangles [i].y + rectangles [i].height;
+		if (rectBottom > yMax) yMax = rectBottom;
+	}
+	
+	return new Rectangle (xMin, yMin, xMax - xMin, yMax - yMin);
+}
+
+Rectangle [] computeProportions (Rectangle [] rects) {
+	Rectangle [] result = new Rectangle [rects.length];
+	bounds = computeBounds ();
+	if (bounds != null) {
+		for (int i = 0; i < rects.length; i++) {
+			int x = 0, y = 0, width = 0, height = 0;
+			if (bounds.width != 0) {
+				x = (rects [i].x - bounds.x) * 100 / bounds.width;
+				width = rects [i].width * 100 / bounds.width;
+			} else {
+				width = 100;
+			}
+			if (bounds.height != 0) {
+				y = (rects [i].y - bounds.y) * 100 / bounds.height;
+				height = rects [i].height * 100 / bounds.height;
+			} else {
+				height = 100;
+			}
+			result [i] = new Rectangle (x, y, width, height);			
+		}
+	}
+	return result;
+}
+
+/**
+ * Draw the rectangles displayed by the tracker.
+ */
+void drawRectangles () {
+	Rectangle bounds = this.bounds;
+	if (bounds == null) return;
+	int children = OS.Panel_Children (canvasHandle);
+	OS.UIElementCollection_Clear (children);
+	if (parent != null) {
+		Rectangle rect = parent.getClientArea ();
+		rect.intersect (bounds);
+		bounds = rect;
+		Point pt = display.map (parent, null, bounds.x, bounds.y);
+		OS.Popup_HorizontalOffset (handle, pt.x);
+		OS.Popup_VerticalOffset (handle, pt.y);
+	} else {
+		OS.Popup_HorizontalOffset (handle, bounds.x);
+		OS.Popup_VerticalOffset (handle, bounds.y);
+	}
+	OS.FrameworkElement_Width (handle, bounds.width);
+	OS.FrameworkElement_Height (handle, bounds.height);
+	int stroke, brush;
+	if (stippled) {
+		stroke = 3;
+		int pixelFormat = OS.PixelFormats_BlackWhite ();
+		byte [] buffer = {-86, 0, 85, 0, -86, 0, 85, 0, -86, 0, 85, 0, -86, 0, 85, 0};
+		int image = OS.BitmapSource_Create (8, 8, 96, 96, pixelFormat, 0, buffer, buffer.length, 2);	
+		OS.GCHandle_Free (pixelFormat);
+		brush = OS.gcnew_ImageBrush (image);
+		OS.TileBrush_TileMode (brush, OS.TileMode_Tile);
+		OS.TileBrush_Stretch (brush, OS.Stretch_Fill);
+		OS.TileBrush_ViewportUnits (brush, OS.BrushMappingMode_Absolute);
+		int rect = OS.gcnew_Rect (0, 0, OS.BitmapSource_PixelWidth(image), OS.BitmapSource_PixelHeight(image));
+		OS.TileBrush_Viewport (brush, rect);
+		OS.GCHandle_Free (rect);
+		OS.GCHandle_Free (image);
+	} else {
+		stroke = 1;
+		brush = OS.Brushes_Black ();
+	}
+	for (int i = 0; i < rectangles.length; i++) {
+		int child = OS.gcnew_Rectangle ();
+		OS.UIElementCollection_Add (children, child);
+		OS.Shape_StrokeThickness (child, stroke);
+		OS.Shape_Stroke (child, brush);
+		Rectangle rect = rectangles [i];
+		OS.Canvas_SetLeft (child, rect.x - bounds.x);
+		OS.Canvas_SetTop (child, rect.y - bounds.y);
+		OS.FrameworkElement_Width (child, rect.width);
+		OS.FrameworkElement_Height (child, rect.height);
+		OS.GCHandle_Free (child);
+	}
+	OS.GCHandle_Free (brush);
+	OS.GCHandle_Free (children);
+}
+
+/**
+ * Returns the bounds that are being drawn, expressed relative to the parent
+ * widget.  If the parent is a <code>Display</code> then these are screen
+ * coordinates.
+ *
+ * @return the bounds of the Rectangles being drawn
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Rectangle [] getRectangles () {
+	checkWidget();
+	int length = 0;
+	if (rectangles != null) length = rectangles.length;
+	Rectangle [] result = new Rectangle [length];
+	for (int i = 0; i < length; i++) {
+		Rectangle current = rectangles [i];
+		result [i] = new Rectangle (current.x, current.y, current.width, current.height);
+	}
+	return result;
+}
+
+/**
+ * Returns <code>true</code> if the rectangles are drawn with a stippled line, <code>false</code> otherwise.
+ *
+ * @return the stippled effect of the rectangles
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getStippled () {
+	checkWidget ();
+	return stippled;
+}
+
+void HandleKeyUp (int sender, int e) {
+	if (handle == 0) return;
+	if (!sendKeyEvent (SWT.KeyUp, e, false)) return;
+}
+
+void HandleKeyDown (int sender, int e) {
+	if (handle == 0) return;
+	if (!sendKeyEvent (SWT.KeyDown, e, false)) return;
+	
+	boolean ctrlDown = (OS.Keyboard_Modifiers() & OS.ModifierKeys_Control) != 0;
+	int stepSize = ctrlDown ? STEPSIZE_SMALL : STEPSIZE_LARGE;
+	int key = OS.KeyEventArgs_Key(e);
+	int xChange = 0, yChange = 0;
+	switch (key) {
+		case OS.Key_System:
+		case OS.Key_Escape:
+			cancelled = true;
+			if (frame != 0) OS.DispatcherFrame_Continue (frame, false);
+			break;
+		case OS.Key_Return:
+			if (frame != 0) OS.DispatcherFrame_Continue (frame, false);
+			break;
+		case OS.Key_Left:
+			xChange = -stepSize;
+			break;
+		case OS.Key_Right:
+			xChange = stepSize;
+			break;
+		case OS.Key_Up:
+			yChange = -stepSize;
+			break;
+		case OS.Key_Down:
+			yChange = stepSize;
+			break;
+	}
+	if (xChange != 0 || yChange != 0) {
+		Event event = new Event ();
+		event.x = oldX + xChange;
+		event.y = oldY + yChange;
+		Point cursorPos;
+		if ((style & SWT.RESIZE) != 0) {
+			resizeRectangles (xChange, yChange);
+			sendEvent (SWT.Resize, event);
+			if (isDisposed ()) {
+				cancelled = true;
+				if (frame != 0) OS.DispatcherFrame_Continue (frame, false);
+				return;
+			}
+			drawRectangles ();
+			cursorPos = adjustResizeCursor ();
+		} else {
+			moveRectangles (xChange, yChange);
+			sendEvent (SWT.Move, event);
+			if (isDisposed ()) {
+				cancelled = true;
+				if (frame != 0) OS.DispatcherFrame_Continue (frame, false);
+				return;
+			}
+			drawRectangles ();
+			cursorPos = adjustMoveCursor ();
+		}
+		oldX = cursorPos.x;
+		oldY = cursorPos.y;
+	}
+}
+
+void HandleMouseUp (int sender, int e) {
+	if (handle == 0) return;
+	if (!sendMouseEvent (SWT.MouseUp, e, false)) return;
+	if (frame != 0) OS.DispatcherFrame_Continue (frame, false);
+}
+
+void HandleMouseDown (int sender, int e) {
+	if (handle == 0) return;
+	if (!sendMouseEvent (SWT.MouseDown, e, false)) return;
+	if (frame != 0) OS.DispatcherFrame_Continue (frame, false);
+}
+
+void HandleMouseMove (int sender, int e) {
+	if (handle == 0) return;
+	if (!sendMouseEvent (SWT.MouseMove, e, false)) return;
+	int pointCanvas = OS.MouseEventArgs_GetPosition (e, canvasHandle);
+	int point = OS.Visual_PointToScreen (canvasHandle, pointCanvas);
+	int newX = (int) OS.Point_X (point);
+	int newY = (int) OS.Point_Y (point);
+	OS.GCHandle_Free (pointCanvas);
+	OS.GCHandle_Free (point);
+	if (newX != oldX || newY != oldY) {
+		Event event = new Event ();
+		event.x = newX;
+		event.y = newY;
+		if ((style & SWT.RESIZE) != 0) {
+			resizeRectangles (newX - oldX, newY - oldY);
+			sendEvent (SWT.Resize, event);
+			if (isDisposed ()) {
+				cancelled = true;
+				if (frame != 0) OS.DispatcherFrame_Continue (frame, false);
+			}
+			drawRectangles ();
+			Point cursorPos = adjustResizeCursor ();
+			if (cursorPos != null) {
+				newX = cursorPos.x;  
+				newY = cursorPos.y;
+			}
+		} else {
+			moveRectangles (newX - oldX, newY - oldY);
+			sendEvent (SWT.Move, event);
+			if (isDisposed ()) {
+				cancelled = true;
+				if (frame != 0) OS.DispatcherFrame_Continue (frame, false);
+			}
+			drawRectangles ();
+		}
+		oldX = newX;
+		oldY = newY;
+	}
+}
+
+void moveRectangles (int xChange, int yChange) {
+	if (bounds == null) return;
+	if (xChange < 0 && ((style & SWT.LEFT) == 0)) xChange = 0;
+	if (xChange > 0 && ((style & SWT.RIGHT) == 0)) xChange = 0;
+	if (yChange < 0 && ((style & SWT.UP) == 0)) yChange = 0;
+	if (yChange > 0 && ((style & SWT.DOWN) == 0)) yChange = 0;
+	if (xChange == 0 && yChange == 0) return;
+	bounds.x += xChange; bounds.y += yChange;
+	for (int i = 0; i < rectangles.length; i++) {
+		rectangles [i].x += xChange;
+		rectangles [i].y += yChange;
+	}
+}
+
+/**
+ * Displays the Tracker rectangles for manipulation by the user.  Returns when
+ * the user has either finished manipulating the rectangles or has cancelled the
+ * Tracker.
+ * 
+ * @return <code>true</code> if the user did not cancel the Tracker, <code>false</code> otherwise
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean open () {
+	checkWidget ();
+	if (rectangles == null) return false;
+	if (rectangles.length == 0) return false;
+	cancelled = false;
+
+	/*
+	* If exactly one of UP/DOWN is specified as a style then set the cursor
+	* orientation accordingly (the same is done for LEFT/RIGHT styles below).
+	*/
+	int vStyle = style & (SWT.UP | SWT.DOWN);
+	if (vStyle == SWT.UP || vStyle == SWT.DOWN) {
+		cursorOrientation |= vStyle;
+	}
+	int hStyle = style & (SWT.LEFT | SWT.RIGHT);
+	if (hStyle == SWT.LEFT || hStyle == SWT.RIGHT) {
+		cursorOrientation |= hStyle;
+	}
+	
+	jniRef = OS.NewGlobalRef (this);
+	if (jniRef == 0) error (SWT.ERROR_NO_HANDLES);
+	handle = OS.gcnew_Popup ();
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.Popup_AllowsTransparency (handle, true);
+	
+	canvasHandle = OS.gcnew_Canvas ();
+	if (canvasHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.Popup_Child (handle, canvasHandle);
+	OS.UIElement_IsHitTestVisible (canvasHandle, false);
+	OS.FrameworkElement_FocusVisualStyle (canvasHandle, 0);
+	if (clientCursor != null) {
+		OS.FrameworkElement_Cursor (canvasHandle, clientCursor.handle);
+	}
+
+	drawRectangles ();
+	
+	OS.Popup_IsOpen (handle, true);
+	OS.UIElement_Focusable (canvasHandle, true);
+	OS.UIElement_Focus (canvasHandle);
+	OS.UIElement_CaptureMouse (canvasHandle);
+	
+	boolean mouseDown = OS.Mouse_LeftButton() == OS.MouseButtonState_Pressed;
+	Point cursorPos;
+	if (mouseDown) {
+		int pointCanvas = OS.Mouse_GetPosition (canvasHandle);
+		int point = OS.Visual_PointToScreen (canvasHandle, pointCanvas);
+		cursorPos = new Point ((int) OS.Point_X (point), (int) OS.Point_Y (point));
+		OS.GCHandle_Free (pointCanvas);
+		OS.GCHandle_Free (point);
+	} else {
+		if ((style & SWT.RESIZE) != 0) {
+			cursorPos = adjustResizeCursor ();
+		} else {
+			cursorPos = adjustMoveCursor ();
+		}
+	}
+	oldX = cursorPos.x;
+	oldY = cursorPos.y;
+	
+	int handler = OS.gcnew_KeyEventHandler (jniRef, "HandleKeyDown");
+	OS.UIElement_KeyDown (canvasHandle, handler);	
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_KeyEventHandler (jniRef, "HandleKeyUp");
+	OS.UIElement_KeyUp (canvasHandle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_MouseEventHandler (jniRef, "HandleMouseMove");
+	OS.UIElement_MouseMove (canvasHandle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_MouseButtonEventHandler (jniRef, "HandleMouseUp");
+	OS.UIElement_MouseUp (canvasHandle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_MouseButtonEventHandler (jniRef, "HandleMouseDown");
+	OS.UIElement_MouseDown (canvasHandle, handler);
+	OS.GCHandle_Free (handler);
+	
+	/* Tracker behaves like a Dialog with its own OS event loop. */
+	frame = OS.gcnew_DispatcherFrame ();
+	OS.Dispatcher_PushFrame (frame);
+
+	if (resizeCursor != 0) {
+		OS.GCHandle_Free (resizeCursor);
+		resizeCursor = 0;
+	}
+	OS.UIElement_ReleaseMouseCapture (canvasHandle);
+	OS.Popup_IsOpen (handle, false);
+	OS.GCHandle_Free (canvasHandle);
+	OS.GCHandle_Free (handle);
+	if (frame != 0) OS.GCHandle_Free (frame);
+	OS.DeleteGlobalRef (jniRef);
+	jniRef = handle = canvasHandle = frame = 0;
+	
+	return !cancelled;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is moved or resized.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ControlListener
+ * @see #addControlListener
+ */
+public void removeControlListener (ControlListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Resize, listener);
+	eventTable.unhook (SWT.Move, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when keys are pressed and released on the system keyboard.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see KeyListener
+ * @see #addKeyListener
+ */
+public void removeKeyListener(KeyListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.KeyUp, listener);
+	eventTable.unhook (SWT.KeyDown, listener);
+}
+
+void resizeRectangles (int xChange, int yChange) {
+	if (bounds == null) return;
+	/*
+	* If the cursor orientation has not been set in the orientation of
+	* this change then try to set it here.
+	*/
+	if (xChange < 0 && ((style & SWT.LEFT) != 0) && ((cursorOrientation & SWT.RIGHT) == 0)) {
+		cursorOrientation |= SWT.LEFT;
+	}
+	if (xChange > 0 && ((style & SWT.RIGHT) != 0) && ((cursorOrientation & SWT.LEFT) == 0)) {
+		cursorOrientation |= SWT.RIGHT;
+	}
+	if (yChange < 0 && ((style & SWT.UP) != 0) && ((cursorOrientation & SWT.DOWN) == 0)) {
+		cursorOrientation |= SWT.UP;
+	}
+	if (yChange > 0 && ((style & SWT.DOWN) != 0) && ((cursorOrientation & SWT.UP) == 0)) {
+		cursorOrientation |= SWT.DOWN;
+	}
+	
+	/*
+	 * If the bounds will flip about the x or y axis then apply the adjustment
+	 * up to the axis (ie.- where bounds width/height becomes 0), change the
+	 * cursor's orientation accordingly, and flip each Rectangle's origin (only
+	 * necessary for > 1 Rectangles) 
+	 */
+	if ((cursorOrientation & SWT.LEFT) != 0) {
+		if (xChange > bounds.width) {
+			if ((style & SWT.RIGHT) == 0) return;
+			cursorOrientation |= SWT.RIGHT;
+			cursorOrientation &= ~SWT.LEFT;
+			bounds.x += bounds.width;
+			xChange -= bounds.width;
+			bounds.width = 0;
+			if (proportions.length > 1) {
+				for (int i = 0; i < proportions.length; i++) {
+					Rectangle proportion = proportions [i];
+					proportion.x = 100 - proportion.x - proportion.width;
+				}
+			}
+		}
+	} else if ((cursorOrientation & SWT.RIGHT) != 0) {
+		if (bounds.width < -xChange) {
+			if ((style & SWT.LEFT) == 0) return;
+			cursorOrientation |= SWT.LEFT;
+			cursorOrientation &= ~SWT.RIGHT;
+			xChange += bounds.width;
+			bounds.width = 0;
+			if (proportions.length > 1) {
+				for (int i = 0; i < proportions.length; i++) {
+					Rectangle proportion = proportions [i];
+					proportion.x = 100 - proportion.x - proportion.width;
+				}
+			}
+		}
+	}
+	if ((cursorOrientation & SWT.UP) != 0) {
+		if (yChange > bounds.height) {
+			if ((style & SWT.DOWN) == 0) return;
+			cursorOrientation |= SWT.DOWN;
+			cursorOrientation &= ~SWT.UP;
+			bounds.y += bounds.height;
+			yChange -= bounds.height;
+			bounds.height = 0;
+			if (proportions.length > 1) {
+				for (int i = 0; i < proportions.length; i++) {
+					Rectangle proportion = proportions [i];
+					proportion.y = 100 - proportion.y - proportion.height;
+				}
+			}
+		}
+	} else if ((cursorOrientation & SWT.DOWN) != 0) {
+		if (bounds.height < -yChange) {
+			if ((style & SWT.UP) == 0) return;
+			cursorOrientation |= SWT.UP;
+			cursorOrientation &= ~SWT.DOWN;
+			yChange += bounds.height;
+			bounds.height = 0;
+			if (proportions.length > 1) {
+				for (int i = 0; i < proportions.length; i++) {
+					Rectangle proportion = proportions [i];
+					proportion.y = 100 - proportion.y - proportion.height;
+				}
+			}
+		}
+	}
+	
+	// apply the bounds adjustment
+	if ((cursorOrientation & SWT.LEFT) != 0) {
+		bounds.x += xChange;
+		bounds.width -= xChange;
+	} else if ((cursorOrientation & SWT.RIGHT) != 0) {
+		bounds.width += xChange;
+	}
+	if ((cursorOrientation & SWT.UP) != 0) {
+		bounds.y += yChange;
+		bounds.height -= yChange;
+	} else if ((cursorOrientation & SWT.DOWN) != 0) {
+		bounds.height += yChange;
+	}
+	
+	Rectangle [] newRects = new Rectangle [rectangles.length];
+	for (int i = 0; i < rectangles.length; i++) {
+		Rectangle proportion = proportions[i];
+		newRects[i] = new Rectangle (
+			proportion.x * bounds.width / 100 + bounds.x,
+			proportion.y * bounds.height / 100 + bounds.y,
+			proportion.width * bounds.width / 100,
+			proportion.height * bounds.height / 100);
+	}
+	rectangles = newRects;	
+}
+
+/**
+ * Sets the <code>Cursor</code> of the Tracker.  If this cursor is <code>null</code>
+ * then the cursor reverts to the default.
+ *
+ * @param newCursor the new <code>Cursor</code> to display
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setCursor(Cursor newCursor) {
+	checkWidget();
+	clientCursor = newCursor;
+	if (canvasHandle != 0) {
+		OS.FrameworkElement_Cursor (canvasHandle, clientCursor != null ? clientCursor.handle : 0);
+	}
+}
+
+/**
+ * Specifies the rectangles that should be drawn, expressed relative to the parent
+ * widget.  If the parent is a Display then these are screen coordinates.
+ *
+ * @param rectangles the bounds of the rectangles to be drawn
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the set of rectangles is null or contains a null rectangle</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setRectangles (Rectangle [] rectangles) {
+	checkWidget ();
+	if (rectangles == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int length = rectangles.length;
+	this.rectangles = new Rectangle [length];
+	for (int i = 0; i < length; i++) {
+		Rectangle current = rectangles [i];
+		if (current == null) error (SWT.ERROR_NULL_ARGUMENT);
+		this.rectangles [i] = new Rectangle (current.x, current.y, current.width, current.height);
+	}
+	proportions = computeProportions (rectangles);
+}
+
+/**
+ * Changes the appearance of the line used to draw the rectangles.
+ *
+ * @param stippled <code>true</code> if rectangle should appear stippled
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setStippled (boolean stippled) {
+	checkWidget ();
+	this.stippled = stippled;
+	if (handle != 0) {
+		//TODO CHANGE RECT BRUSH
+	}
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TrayItem.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TrayItem.java
new file mode 100644
index 0000000..15db30e
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TrayItem.java
@@ -0,0 +1,447 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.internal.win32.*;
+
+/**
+ * Instances of this class represent icons that can be placed on the
+ * system tray or task bar status area.
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>DefaultSelection, MenuDetect, Selection</dd>
+ * </dl>
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tray">Tray, TrayItem snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.0
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class TrayItem extends Item {
+	Tray parent;
+	int id;
+	ToolTip toolTip;
+	String toolTipText;
+	boolean visible = true;
+	
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Tray</code>) and a style value
+ * describing its behavior and appearance. The item is added
+ * to the end of the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TrayItem (Tray parent, int style) {
+	super (parent, style);
+	this.parent = parent;
+	parent.createItem (this, parent.getItemCount ());
+	createWidget ();
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the receiver is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is called when the receiver is selected
+ * <code>widgetDefaultSelected</code> is called when the receiver is double-clicked
+ * </p>
+ *
+ * @param listener the listener which should be notified when the receiver is selected by the user
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the platform-specific context menu trigger
+ * has occurred, by sending it one of the messages defined in
+ * the <code>MenuDetectListener</code> interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MenuDetectListener
+ * @see #removeMenuDetectListener
+ *
+ * @since 3.3
+ */
+public void addMenuDetectListener (MenuDetectListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.MenuDetect, typedListener);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+void createHandle () {
+	handle = OS.gcnew_NotifyIcon ();
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.NotifyIcon_Visible (handle, true);
+}
+
+void destroyWidget () {
+	parent.destroyItem (this);
+	releaseHandle ();
+}
+
+Point getLocation () {
+	return display.getCursorLocation ();
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>Tray</code>.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public Tray getParent () {
+	checkWidget ();
+	return parent;
+}
+
+/**
+ * Returns the receiver's tool tip, or null if it has
+ * not been set.
+ *
+ * @return the receiver's tool tip text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public ToolTip getToolTip () {
+	checkWidget ();
+	return toolTip;
+}
+
+/**
+ * Returns the receiver's tool tip text, or null if it has
+ * not been set.
+ *
+ * @return the receiver's tool tip text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public String getToolTipText () {
+	checkWidget ();
+	return toolTipText;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is visible and 
+ * <code>false</code> otherwise.
+ *
+ * @return the receiver's visibility
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getVisible () {
+	checkWidget ();
+	return visible;
+}
+
+void HandleDoubleClick (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if (hooks (SWT.DefaultSelection)) {
+		postEvent (SWT.DefaultSelection);
+	}
+	display.wakeThread ();
+}
+
+void HandleMouseDown (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if (hooks (SWT.Selection)) {
+		postEvent (SWT.Selection);
+	}
+	display.wakeThread ();
+}
+
+void HandleMouseUp (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if (hooks (SWT.MenuDetect)) {
+		int button = OS.FormsMouseEventArgs_Button (e);
+		if (button == OS.MouseButtons_Right) sendEvent (SWT.MenuDetect);
+	}
+	display.wakeThread ();
+}
+
+void hookEvents() {
+	super.hookEvents ();
+	int handler = OS.gcnew_FormsMouseEventHandler (jniRef, "HandleMouseDown");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.NotifyIcon_MouseDown (handle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_FormsMouseEventHandler (jniRef, "HandleMouseUp");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.NotifyIcon_MouseUp (handle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_EventHandler (jniRef, "HandleDoubleClick");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.NotifyIcon_DoubleClick (handle, handler);
+	OS.GCHandle_Free (handler);
+}
+
+void releaseHandle () {
+	setImage (null);
+	super.releaseHandle ();
+	if (handle != 0) OS.GCHandle_Free (handle);
+	handle = 0;
+	parent = null;
+}
+	
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the receiver is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener(SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the platform-specific context menu trigger has
+ * occurred.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see MenuDetectListener
+ * @see #addMenuDetectListener
+ *
+ * @since 3.3
+ */
+public void removeMenuDetectListener (MenuDetectListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.MenuDetect, listener);
+}
+
+/**
+ * Sets the receiver's image.
+ *
+ * @param image the new image
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setImage (Image image) {
+	checkWidget ();
+	if (image != null && image.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	super.setImage (image);
+	if (image != null) {
+		int format = OS.PixelFormats_Bgra32 ();
+		int newImage = OS.gcnew_FormatConvertedBitmap (image.handle, format, OS.BitmapSource_Palette(image.handle), 0);
+		int depth = OS.PixelFormat_BitsPerPixel (format);
+		OS.GCHandle_Free (format);
+		int width = OS.BitmapSource_PixelWidth (newImage);
+		int height = OS.BitmapSource_PixelHeight (newImage);
+		int scanlinePad = 4;
+		int bytesPerLine = (((width * depth + 7) / 8) + (scanlinePad - 1))	/ scanlinePad * scanlinePad;
+		byte[] buffer = new byte [bytesPerLine * height];
+		int rect = OS.Int32Rect_Empty ();
+		OS.BitmapSource_CopyPixels (newImage, rect, buffer, buffer.length, bytesPerLine);
+		OS.GCHandle_Free (rect);
+		OS.GCHandle_Free (newImage);
+		int bitmap = OS.gcnew_Bitmap (width, height, bytesPerLine, Win32.PixelFormat_Format32bppArgb, buffer);//TODO
+		int hIcon = OS.Bitmap_GetHicon (bitmap);
+		OS.GCHandle_Free (bitmap);
+		int icon = OS.Icon_FromHandle (hIcon);
+		OS.NotifyIcon_Icon (handle, icon);
+		OS.GCHandle_Free (icon);
+	} else {
+		OS.NotifyIcon_Icon (handle, 0);
+	}
+}
+
+/**
+ * Sets the receiver's tool tip to the argument, which
+ * may be null indicating that no tool tip should be shown.
+ *
+ * @param toolTip the new tool tip (or null)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setToolTip (ToolTip toolTip) {
+	checkWidget ();
+	this.toolTip = toolTip;
+}
+
+/**
+ * Sets the receiver's tool tip text to the argument, which
+ * may be null indicating that the default tool tip for the 
+ * control will be shown. For a control that has a default
+ * tool tip, such as the Tree control on Windows, setting
+ * the tool tip text to an empty string replaces the default,
+ * causing no tool tip text to be shown.
+ * <p>
+ * The mnemonic indicator (character '&amp;') is not displayed in a tool tip.
+ * To display a single '&amp;' in the tool tip, the character '&amp;' can be 
+ * escaped by doubling it in the string.
+ * </p>
+ * 
+ * @param string the new tool tip text (or null)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setToolTipText (String value) {
+	checkWidget ();
+	toolTipText = value;
+	int strPtr = createDotNetString (value, false);
+	OS.NotifyIcon_Text (handle, strPtr);
+	OS.GCHandle_Free (strPtr);
+}
+
+/**
+ * Makes the receiver visible if the argument is <code>true</code>,
+ * and makes it invisible otherwise. 
+ *
+ * @param visible the new visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setVisible (boolean visible) {
+	checkWidget ();
+	if (this.visible == visible) return;
+	if (visible) {
+		/*
+		* It is possible (but unlikely), that application
+		* code could have disposed the widget in the show
+		* event.  If this happens, just return.
+		*/
+		sendEvent (SWT.Show);
+		if (isDisposed ()) return;
+	}
+	this.visible = visible;
+	OS.NotifyIcon_Visible (handle, visible);
+	if (!visible) sendEvent (SWT.Hide);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Tree.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Tree.java
new file mode 100644
index 0000000..72d06c0
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Tree.java
@@ -0,0 +1,2406 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * Instances of this class provide a selectable user interface object
+ * that displays a hierarchy of items and issues notification when an
+ * item in the hierarchy is selected.
+ * <p>
+ * The item children that may be added to instances of this class
+ * must be of type <code>TreeItem</code>.
+ * </p><p>
+ * Style <code>VIRTUAL</code> is used to create a <code>Tree</code> whose
+ * <code>TreeItem</code>s are to be populated by the client on an on-demand basis
+ * instead of up-front.  This can provide significant performance improvements for
+ * trees that are very large or for which <code>TreeItem</code> population is
+ * expensive (for example, retrieving values from an external source).
+ * </p><p>
+ * Here is an example of using a <code>Tree</code> with style <code>VIRTUAL</code>:
+ * <code><pre>
+ *  final Tree tree = new Tree(parent, SWT.VIRTUAL | SWT.BORDER);
+ *  tree.setItemCount(20);
+ *  tree.addListener(SWT.SetData, new Listener() {
+ *      public void handleEvent(Event event) {
+ *          TreeItem item = (TreeItem)event.item;
+ *          TreeItem parentItem = item.getParentItem();
+ *          String text = null;
+ *          if (parentItem == null) {
+ *              text = "node " + tree.indexOf(item);
+ *          } else {
+ *              text = parentItem.getText() + " - " + parentItem.indexOf(item);
+ *          }
+ *          item.setText(text);
+ *          System.out.println(text);
+ *          item.setItemCount(10);
+ *      }
+ *  });
+ * </pre></code>
+ * </p><p>
+ * Note that although this class is a subclass of <code>Composite</code>,
+ * it does not normally make sense to add <code>Control</code> children to
+ * it, or set a layout on it, unless implementing something like a cell
+ * editor.
+ * </p><p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>SINGLE, MULTI, CHECK, FULL_SELECTION, VIRTUAL, NO_SCROLL</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Selection, DefaultSelection, Collapse, Expand, SetData, MeasureItem, EraseItem, PaintItem</dd>
+ * </dl>
+ * </p><p>
+ * Note: Only one of the styles SINGLE and MULTI may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tree">Tree, TreeItem, TreeColumn snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class Tree extends Composite {
+	int gvColumns, parentingHandle, headerTemplate;
+	int columnCount, itemCount;
+	TreeItem anchor, lastSelection, unselect, reselect;
+	TreeColumn [] columns;
+	byte headerVisibility = OS.Visibility_Collapsed;
+	boolean ignoreSelection, shiftDown, ctrlDown;
+
+	static final String HEADER_PART_NAME = "SWT_PART_HEADER";
+	static final String SCROLLVIEWER_PART_NAME = "SWT_PART_SCROLLVIEWER";
+	static final String CHECKBOX_PART_NAME = "SWT_PART_CHECKBOX";
+	static final String IMAGE_PART_NAME = "SWT_PART_IMAGE";
+	static final String TEXT_PART_NAME = "SWT_PART_TEXT";
+	static final String CONTENTPANEL_PART_NAME = "SWT_PART_CONTENTPANEL";
+	static final String RENDER_PANEL_NAME = "SWT_PART_RENDERPANEL";
+	
+	static String scrollViewerStyle = "<Style TargetType=\"ScrollViewer\" " +
+			"xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" " +
+			"xmlns:s=\"clr-namespace:System;assembly=mscorlib\" " +
+			"xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">" +
+		"<Setter Property=\"UIElement.Focusable\" Value=\"False\"/>" +
+		"<Setter Property=\"Control.Template\">" +
+			"<Setter.Value>" +
+				"<ControlTemplate TargetType=\"ScrollViewer\">" +
+					"<Grid Background=\"{TemplateBinding Control.Background}\" SnapsToDevicePixels=\"True\">" +
+						"<Grid.ColumnDefinitions>" +
+							"<ColumnDefinition Width=\"*\" />" +
+							"<ColumnDefinition Width=\"Auto\" />" +
+						"</Grid.ColumnDefinitions>" +
+						"<Grid.RowDefinitions>" +
+							"<RowDefinition Height=\"*\" />" +
+							"<RowDefinition Height=\"Auto\" />" +
+						"</Grid.RowDefinitions>" +
+						"<DockPanel Margin=\"{TemplateBinding Control.Padding}\">" +
+							"<ScrollViewer HorizontalScrollBarVisibility=\"Hidden\" VerticalScrollBarVisibility=\"Hidden\" Focusable=\"False\" DockPanel.Dock=\"Top\">" +
+								"<GridViewHeaderRowPresenter Name=\"SWT_PART_HEADER\" Margin=\"2,0,2,0\" Visibility=\"Collapsed\" ColumnHeaderToolTip=\"{x:Null}\" " +
+										"ColumnHeaderContainerStyle=\"{x:Null}\" SnapsToDevicePixels=\"{TemplateBinding UIElement.SnapsToDevicePixels}\" " +
+										"AllowsColumnReorder=\"True\" ColumnHeaderTemplate=\"{x:Null}\" ColumnHeaderContextMenu=\"{x:Null}\">" +
+									"<GridViewHeaderRowPresenter.Columns>" +
+										"<TemplateBinding Property=\"GridViewHeaderRowPresenter.Columns\"/>" +
+									"</GridViewHeaderRowPresenter.Columns>" +
+								"</GridViewHeaderRowPresenter>" +
+							"</ScrollViewer>" +
+							"<ScrollContentPresenter VirtualizingStackPanel.IsVirtualizing=\"True\" CanVerticallyScroll=\"False\" " +
+									"CanHorizontallyScroll=\"False\" Name=\"PART_ScrollContentPresenter\" " +
+									"SnapsToDevicePixels=\"{TemplateBinding UIElement.SnapsToDevicePixels}\" " +
+									"ContentTemplate=\"{TemplateBinding ContentControl.ContentTemplate}\" " +
+									"CanContentScroll=\"{TemplateBinding ScrollViewer.CanContentScroll}\" " +
+									"Content=\"{TemplateBinding ContentControl.Content}\" KeyboardNavigation.DirectionalNavigation=\"Local\" />" +
+						"</DockPanel>" +
+						"<ScrollBar Value=\"{TemplateBinding HorizontalOffset}\" Maximum=\"{TemplateBinding ScrollViewer.ScrollableWidth}\" " +
+								"Visibility=\"{TemplateBinding ScrollViewer.ComputedHorizontalScrollBarVisibility}\" Name=\"PART_HorizontalScrollBar\" " +
+								"Cursor=\"Arrow\"  Minimum=\"0\"  Orientation=\"Horizontal\"  Grid.Row=\"1\" " +
+								"ViewportSize=\"{TemplateBinding ViewportWidth}\"/>" +
+						"<ScrollBar Value=\"{TemplateBinding VerticalOffset}\" Maximum=\"{TemplateBinding ScrollViewer.ScrollableHeight}\" " +
+								"Visibility=\"{TemplateBinding ScrollViewer.ComputedVerticalScrollBarVisibility}\"  Name=\"PART_VerticalScrollBar\" " +
+								"Cursor=\"Arrow\" Minimum=\"0\" Orientation=\"Vertical\" Grid.Column=\"1\" " +
+								"ViewportSize=\"{TemplateBinding ViewportHeight}\" />" +
+						"<DockPanel Background=\"{x:Null}\" LastChildFill=\"False\" Grid.Column=\"1\" Grid.Row=\"1\">" +
+							"<Rectangle Width=\"1\" Visibility=\"{TemplateBinding ScrollViewer.ComputedVerticalScrollBarVisibility}\" " +
+									"Fill=\"#FFFFFFFF\" DockPanel.Dock=\"Left\" />" +
+							"<Rectangle Height=\"1\" Visibility=\"{TemplateBinding ScrollViewer.ComputedHorizontalScrollBarVisibility}\" " +
+									"Fill=\"#FFFFFFFF\" DockPanel.Dock=\"Top\" />" +
+						"</DockPanel>" +
+					"</Grid>" +
+				"</ControlTemplate>" +
+			"</Setter.Value>" +
+		"</Setter>" +
+   	"</Style>";
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#SINGLE
+ * @see SWT#MULTI
+ * @see SWT#CHECK
+ * @see SWT#FULL_SELECTION
+ * @see SWT#VIRTUAL
+ * @see SWT#NO_SCROLL
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public Tree (Composite parent, int style) {
+	super (parent, checkStyle (style));
+}
+
+static int checkStyle (int style) {
+	/*
+	* Feature in Windows.  Even when WS_HSCROLL or
+	* WS_VSCROLL is not specified, Windows creates
+	* trees and tables with scroll bars.  The fix
+	* is to set H_SCROLL and V_SCROLL.
+	* 
+	* NOTE: This code appears on all platforms so that
+	* applications have consistent scroll bar behavior.
+	*/
+	if ((style & SWT.NO_SCROLL) == 0) {
+		style |= SWT.H_SCROLL | SWT.V_SCROLL;
+	}
+	/* WPF is always FULL_SELECTION */
+	style |= SWT.FULL_SELECTION;
+	return checkBits (style, SWT.SINGLE, SWT.MULTI, 0, 0, 0, 0);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the user changes the receiver's selection, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * When <code>widgetSelected</code> is called, the item field of the event object is valid.
+ * If the receiver has the <code>SWT.CHECK</code> style and the check selection changes,
+ * the event object detail field contains the value <code>SWT.CHECK</code>.
+ * <code>widgetDefaultSelected</code> is typically called when an item is double-clicked.
+ * The item field of the event object is valid for default selection, but the detail field is not used.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the user changes the receiver's selection
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection, typedListener);
+	addListener (SWT.DefaultSelection, typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when an item in the receiver is expanded or collapsed
+ * by sending it one of the messages defined in the <code>TreeListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see TreeListener
+ * @see #removeTreeListener
+ */
+public void addTreeListener (TreeListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Expand, typedListener);
+	addListener (SWT.Collapse, typedListener);
+} 
+
+int backgroundHandle () {
+	return parentingHandle;
+}
+
+boolean checkData (TreeItem item) {
+	if ((style & SWT.VIRTUAL) == 0) return true;
+	if (!item.cached) {
+		item.cached = true;
+		int parentItem = OS.FrameworkElement_Parent (item.handle);
+		int items = OS.ItemsControl_Items (parentItem);
+		int index = OS.ItemCollection_IndexOf (items, item.handle);
+		OS.GCHandle_Free (items);
+		OS.GCHandle_Free (parentItem);
+		Event event = new Event ();
+		event.item = item;
+		event.index = index;
+		sendEvent (SWT.SetData, event);
+		if (isDisposed () || item.isDisposed ()) return false;
+	}
+	return true;
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+/**
+ * Clears the item at the given zero-relative index in the receiver.
+ * The text, icon and other attributes of the item are set to the default
+ * value.  If the tree was created with the <code>SWT.VIRTUAL</code> style,
+ * these attributes are requested again as needed.
+ *
+ * @param index the index of the item to clear
+ * @param all <code>true</code> if all child items of the indexed item should be
+ * cleared recursively, and <code>false</code> otherwise
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see SWT#VIRTUAL
+ * @see SWT#SetData
+ * 
+ * @since 3.2
+ */
+public void clear (int index, boolean all) {
+	checkWidget ();
+	if (index < 0 || index >= itemCount) SWT.error (SWT.ERROR_INVALID_RANGE);
+	clear (handle, index, all);
+}
+
+void clear (int parentHandle, int index, boolean all) {
+	int items = OS.ItemsControl_Items (parentHandle);
+	TreeItem item = getItem (items, index, false);
+	if (item != null) {
+		item.clear ();
+		if (all) clearAll (item, true);
+	}
+	OS.GCHandle_Free (items);
+}
+
+/**
+ * Clears all the items in the receiver. The text, icon and other
+ * attributes of the items are set to their default values. If the
+ * tree was created with the <code>SWT.VIRTUAL</code> style, these
+ * attributes are requested again as needed.
+ * 
+ * @param all <code>true</code> if all child items should be cleared
+ * recursively, and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see SWT#VIRTUAL
+ * @see SWT#SetData
+ * 
+ * @since 3.2
+ */
+public void clearAll (boolean all) {
+	checkWidget ();
+	clearAll (null, all);
+}
+
+void clearAll (TreeItem parentItem, boolean all) {
+	int count = parentItem != null ? parentItem.itemCount : itemCount;
+	int parentHandle = parentItem != null ? parentItem.handle : handle;
+	int items = OS.ItemsControl_Items (parentHandle);
+	for (int i=0; i<count; i++) {
+		TreeItem item = getItem (items, i, false);
+		if (item != null) {
+			item.clear ();
+			if (all) clearAll (item, true);
+		}
+	}
+	OS.GCHandle_Free (items);
+}
+
+int createCellTemplate (int index) {
+	int template = OS.gcnew_DataTemplate ();
+	int renderPanelType = OS.SWTDockPanel_typeid ();
+	int renderPanelName = createDotNetString(RENDER_PANEL_NAME, false);
+	int onRenderNode = OS.gcnew_FrameworkElementFactory (renderPanelType, renderPanelName);
+	OS.GCHandle_Free(renderPanelName);
+	OS.GCHandle_Free (renderPanelType);
+	int jniRefProperty = OS.SWTDockPanel_JNIRefProperty ();
+	OS.FrameworkElementFactory_SetValueInt (onRenderNode, jniRefProperty, jniRef);
+	OS.GCHandle_Free (jniRefProperty);
+	int contentPanelName = createDotNetString (CONTENTPANEL_PART_NAME, false);
+	int contentPanelType = OS.StackPanel_typeid ();
+	int cellContentNode = OS.gcnew_FrameworkElementFactory (contentPanelType, contentPanelName);
+	OS.GCHandle_Free (contentPanelType);
+	OS.GCHandle_Free (contentPanelName);
+	int clipProperty = OS.UIElement_ClipToBoundsProperty ();
+	OS.FrameworkElementFactory_SetValue (cellContentNode, clipProperty, true);
+	OS.GCHandle_Free (clipProperty);
+	int orientationProperty = OS.StackPanel_OrientationProperty ();
+	OS.FrameworkElementFactory_SetValueOrientation (cellContentNode, orientationProperty, OS.Orientation_Horizontal);
+	OS.GCHandle_Free (orientationProperty);
+	
+	
+//	int vert = OS.FrameworkElement_VerticalAlignmentProperty();
+//	OS.FrameworkElementFactory_SetValueVerticalAlignment(onRenderNode, vert, OS.VerticalAlignment_Stretch);
+//	OS.GCHandle_Free (vert);
+//	
+//	int dp = OS.Panel_BackgroundProperty();
+//	int red = OS.Brushes_Red();
+//	int navy = OS.Brushes_Navy();
+//	OS.FrameworkElementFactory_SetValue(cellContentNode, dp, red);
+//	OS.FrameworkElementFactory_SetValue(onRenderNode, dp, navy);
+//	OS.GCHandle_Free (dp);
+//	OS.GCHandle_Free (red);
+//	OS.GCHandle_Free (navy);
+	
+	
+	if (index == 0 && (style & SWT.CHECK) != 0) {
+		int checkBoxType = OS.CheckBox_typeid ();
+		int checkBoxName = createDotNetString (CHECKBOX_PART_NAME, false);
+		int checkBoxNode = OS.gcnew_FrameworkElementFactory (checkBoxType, checkBoxName);
+		int verticalAlignmentProperty = OS.FrameworkElement_VerticalAlignmentProperty ();
+		OS.FrameworkElementFactory_SetValueVerticalAlignment (checkBoxNode, verticalAlignmentProperty, OS.VerticalAlignment_Center);
+		int marginProperty = OS.FrameworkElement_MarginProperty ();
+		int thickness = OS.gcnew_Thickness (0,0,4,0);
+		OS.FrameworkElementFactory_SetValue (checkBoxNode, marginProperty, thickness);
+		OS.FrameworkElementFactory_AppendChild (cellContentNode, checkBoxNode);
+		OS.GCHandle_Free (thickness);
+		OS.GCHandle_Free (marginProperty);
+		OS.GCHandle_Free (verticalAlignmentProperty);
+		OS.GCHandle_Free (checkBoxName);
+		OS.GCHandle_Free (checkBoxNode);
+		OS.GCHandle_Free (checkBoxType);
+	}
+	int textType = OS.TextBlock_typeid ();
+	int textName = createDotNetString (TEXT_PART_NAME, false);
+	int textNode = OS.gcnew_FrameworkElementFactory (textType, textName);
+	OS.GCHandle_Free (textName);
+	OS.GCHandle_Free (textType);
+	int verticalAlignmentProperty = OS.FrameworkElement_VerticalAlignmentProperty ();
+	OS.FrameworkElementFactory_SetValueVerticalAlignment (textNode, verticalAlignmentProperty, OS.VerticalAlignment_Center);
+	OS.GCHandle_Free (verticalAlignmentProperty);
+	int imageType = OS.Image_typeid ();
+	int imageName = createDotNetString (IMAGE_PART_NAME, false);
+	int imageNode = OS.gcnew_FrameworkElementFactory (imageType, imageName);
+	OS.GCHandle_Free (imageName);
+	OS.GCHandle_Free (imageType);
+	int marginProperty = OS.FrameworkElement_MarginProperty ();
+	int thickness = OS.gcnew_Thickness (0,0,4,0);
+	OS.FrameworkElementFactory_SetValue (imageNode, marginProperty, thickness);
+	OS.GCHandle_Free (marginProperty);
+	OS.GCHandle_Free (thickness);
+	int stretchProperty = OS.Image_StretchProperty ();
+	OS.FrameworkElementFactory_SetValueStretch(imageNode, stretchProperty, OS.Stretch_None);
+	OS.GCHandle_Free(stretchProperty);
+	OS.FrameworkElementFactory_AppendChild (cellContentNode, imageNode);
+	OS.GCHandle_Free (imageNode);
+	OS.FrameworkElementFactory_AppendChild (cellContentNode, textNode);
+	OS.GCHandle_Free (textNode);
+	OS.FrameworkElementFactory_AppendChild (onRenderNode, cellContentNode);
+	OS.GCHandle_Free (cellContentNode);
+	OS.FrameworkTemplate_VisualTree (template, onRenderNode);
+	OS.GCHandle_Free (onRenderNode);
+	return template;
+}
+
+int createControlTemplate () {
+	int template = OS.gcnew_ControlTemplate ();
+	int borderType = OS.Border_typeid ();
+	int borderNode = OS.gcnew_FrameworkElementFactory (borderType);
+	int brushProperty = OS.Control_BorderBrushProperty ();
+	int brushBinding = OS.gcnew_TemplateBindingExtension (brushProperty);
+	OS.FrameworkElementFactory_SetValue (borderNode, brushProperty, brushBinding);
+	int thicknessProperty = OS.Control_BorderThicknessProperty ();
+	int thicknessBinding = OS.gcnew_TemplateBindingExtension (thicknessProperty);
+	OS.FrameworkElementFactory_SetValue (borderNode, thicknessProperty, thicknessBinding);
+	int scrollViewerType = OS.ScrollViewer_typeid ();
+	int scrollViewerName = createDotNetString (SCROLLVIEWER_PART_NAME, false);
+	int scrollViewerNode = OS.gcnew_FrameworkElementFactory (scrollViewerType, scrollViewerName);
+	int itemsPresenterType = OS.ItemsPresenter_typeid ();
+	int itemsPresenterNode = OS.gcnew_FrameworkElementFactory (itemsPresenterType);
+	OS.FrameworkElementFactory_AppendChild (borderNode, scrollViewerNode);
+	OS.FrameworkElementFactory_AppendChild (scrollViewerNode, itemsPresenterNode);
+	int scrollStyle = createDotNetString(scrollViewerStyle, false);
+	int stringReader = OS.gcnew_StringReader (scrollStyle);
+	int xmlReader = OS.XmlReader_Create (stringReader);
+	int xamlStyle = OS.XamlReader_Load (xmlReader);
+	int styleProperty = OS.FrameworkElement_StyleProperty();
+	OS.FrameworkElementFactory_SetValue (scrollViewerNode, styleProperty, xamlStyle);
+	int columnsProperty = OS.GridViewRowPresenterBase_ColumnsProperty ();
+	OS.FrameworkElementFactory_SetValue (scrollViewerNode, columnsProperty, gvColumns);
+	OS.FrameworkTemplate_VisualTree (template, borderNode);
+	OS.GCHandle_Free (brushProperty);
+	OS.GCHandle_Free (thicknessProperty);
+	OS.GCHandle_Free (brushBinding);
+	OS.GCHandle_Free (thicknessBinding);	
+	OS.GCHandle_Free (scrollStyle);
+	OS.GCHandle_Free (stringReader);
+	OS.GCHandle_Free (xmlReader);
+	OS.GCHandle_Free (styleProperty);
+	OS.GCHandle_Free (columnsProperty);
+	OS.GCHandle_Free (xamlStyle);
+	OS.GCHandle_Free (scrollViewerType);
+	OS.GCHandle_Free (scrollViewerName);
+	OS.GCHandle_Free (scrollViewerNode);
+	OS.GCHandle_Free (borderType);
+	OS.GCHandle_Free (borderNode);
+	OS.GCHandle_Free (itemsPresenterType);
+	OS.GCHandle_Free (itemsPresenterNode);
+    return template;
+}
+
+void createHandle () {
+	parentingHandle = OS.gcnew_Canvas ();
+	if (parentingHandle == 0) error (SWT.ERROR_NO_HANDLES);
+	if ((style & SWT.SINGLE) != 0) {
+		handle = OS.gcnew_TreeView ();
+	} else {
+		handle = OS.gcnew_SWTTreeView (jniRef);
+	}
+	if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.Canvas_SetLeft (handle, 0);
+	OS.Canvas_SetTop (handle, 0);
+	int children = OS.Panel_Children (parentingHandle);
+	OS.UIElementCollection_Add (children, handle);
+	OS.GCHandle_Free (children);
+}
+
+int createHeaderTemplate (int columnJniRef) {
+	int template = OS.gcnew_DataTemplate ();
+	int stackPanelType = OS.StackPanel_typeid ();
+	int stackPanelName = createDotNetString (CONTENTPANEL_PART_NAME, false);
+	int stackPanelNode = OS.gcnew_FrameworkElementFactory (stackPanelType, stackPanelName);
+	OS.GCHandle_Free (stackPanelName);
+	OS.GCHandle_Free (stackPanelType);
+	int textType = OS.TextBlock_typeid ();
+	int textName = createDotNetString (TEXT_PART_NAME, false);
+	int textNode = OS.gcnew_FrameworkElementFactory (textType, textName);
+	OS.GCHandle_Free (textName);
+	OS.GCHandle_Free (textType);
+	int imageType = OS.Image_typeid ();
+	int imageName = createDotNetString (IMAGE_PART_NAME, false);
+	int imageNode = OS.gcnew_FrameworkElementFactory (imageType, imageName);
+	OS.GCHandle_Free (imageName);
+	OS.GCHandle_Free (imageType);
+	int marginProperty = OS.FrameworkElement_MarginProperty ();
+	int thickness = OS.gcnew_Thickness (0,0,4,0);
+	OS.FrameworkElementFactory_SetValue (imageNode, marginProperty, thickness);
+	OS.GCHandle_Free (thickness);
+	OS.GCHandle_Free (marginProperty);
+	int orientationProperty = OS.StackPanel_OrientationProperty ();
+	OS.FrameworkElementFactory_SetValueOrientation (stackPanelNode, orientationProperty, OS.Orientation_Horizontal);
+	OS.GCHandle_Free (orientationProperty);
+	int stretchProperty = OS.Image_StretchProperty ();
+	OS.FrameworkElementFactory_SetValueStretch (imageNode, stretchProperty, OS.Stretch_None);
+	OS.GCHandle_Free (stretchProperty);
+	OS.FrameworkElementFactory_AppendChild (stackPanelNode, imageNode);
+	OS.GCHandle_Free (imageNode);
+	OS.FrameworkElementFactory_AppendChild (stackPanelNode, textNode);
+	OS.GCHandle_Free (textNode);
+	OS.FrameworkTemplate_VisualTree (template, stackPanelNode);
+	OS.GCHandle_Free (stackPanelNode);
+	return template;
+}
+
+void createItem (TreeColumn column, int index) {
+    if (!(0 <= index && index <= columnCount)) error (SWT.ERROR_INVALID_RANGE);
+    if (columnCount == 0) {
+    	gvColumns = OS.gcnew_GridViewColumnCollection ();
+    	if (gvColumns == 0) error (SWT.ERROR_NO_HANDLES);
+    	int template = createControlTemplate ();
+    	OS.Control_Template (handle, template);   	
+    	OS.GCHandle_Free (template);
+    	updateHeaderVisibility ();
+    }
+	column.createWidget ();
+	int template = createHeaderTemplate (column.jniRef);
+	OS.GridViewColumn_HeaderTemplate (column.handle, template);
+	OS.GCHandle_Free (template);
+	template = createCellTemplate (index);
+	OS.GridViewColumn_CellTemplate (column.handle, template);
+	OS.GCHandle_Free (template);
+	if (columnCount == 0) { 
+		OS.GridViewColumnCollection_Clear (gvColumns);
+	}
+    OS.GridViewColumnCollection_Insert (gvColumns, index, column.handle);
+    int items = OS.ItemsControl_Items (handle);
+    for (int i=0; i<itemCount; i++) {
+    	TreeItem item = getItem (items, i, false);
+    	if (item != null) {
+    		item.columnAdded (index);
+    	}
+    }
+    OS.GCHandle_Free (items);
+	if (columns == null) columns = new TreeColumn [4];
+	if (columns.length == columnCount) {
+		TreeColumn [] newColumns = new TreeColumn [columnCount + 4];
+		System.arraycopy(columns, 0, newColumns, 0, columnCount);
+		columns = newColumns;
+	}
+	columns [columnCount] = column;
+    columnCount++;
+}
+
+void createItem (TreeItem item, TreeItem parentItem, int index) {
+	int itemCount = parentItem != null ? parentItem.itemCount : this.itemCount;
+	if (!(0 <= index && index <= itemCount)) error (SWT.ERROR_INVALID_RANGE);
+	item.createWidget ();
+	int parentHandle = parentItem != null ? parentItem.handle : handle;
+	int items = OS.ItemsControl_Items (parentHandle);
+	OS.ItemCollection_Insert (items, index, item.handle);		
+	int count = OS.ItemCollection_Count (items);
+	OS.GCHandle_Free (items);
+	if (itemCount == count) error (SWT.ERROR_ITEM_NOT_ADDED);
+	if (parentItem != null) {
+		parentItem.itemCount++;
+	} else {
+		this.itemCount++;
+	}
+}
+
+void createWidget() {
+	super.createWidget ();
+	headerTemplate = createCellTemplate (0);
+	int brush = OS.Brushes_Transparent ();
+	OS.Control_Background (handle, brush);
+	OS.GCHandle_Free (brush);
+}
+
+int defaultBackground () {
+	return display.getSystemColor (SWT.COLOR_LIST_BACKGROUND).handle;
+}
+
+int defaultForeground () {
+	return display.getSystemColor (SWT.COLOR_LIST_FOREGROUND).handle;
+}
+
+void deregister () {
+	super.deregister ();
+	display.removeWidget (parentingHandle);
+}
+
+/**
+ * Deselects an item in the receiver.  If the item was already
+ * deselected, it remains deselected.
+ *
+ * @param item the item to be deselected
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.4
+ */
+public void deselect (TreeItem item) {
+	if (item == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	if (item.isDisposed ()) SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	if ((style & SWT.SINGLE) != 0) {
+		ignoreSelection = true;
+		OS.TreeViewItem_IsSelected (item.handle, false);
+		ignoreSelection = false;
+		return;
+	}
+	ignoreSelection = true;
+	setIsSelectionActiveProperty(true);
+	OS.TreeViewItem_IsSelected (item.handle, false);	
+	setIsSelectionActiveProperty(false);
+	ignoreSelection = false;
+}
+
+/**
+ * Deselects all selected items in the receiver.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void deselectAll () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) {
+	int tvItem = OS.TreeView_SelectedItem (handle);
+	if (tvItem != 0) {
+		ignoreSelection = true;
+		OS.TreeViewItem_IsSelected (tvItem, false);
+		ignoreSelection = false;
+		OS.GCHandle_Free (tvItem);
+	}
+	} else {
+	    int items = OS.ItemsControl_Items (handle);
+	    int itemCount = OS.ItemCollection_Count (items);
+	    boolean[] selecting = new boolean[] {false};
+	    for (int i = 0; i < itemCount; i++) {
+			int item = OS.ItemCollection_GetItemAt (items, i);
+			fixSelection (item, null, null, selecting);
+			OS.GCHandle_Free (item);
+		}
+	    OS.GCHandle_Free (items);
+	}
+}
+
+void destroyItem (TreeColumn column) {
+	int index = OS.GridViewColumnCollection_IndexOf (gvColumns, column.handle);
+    boolean removed = OS.GridViewColumnCollection_Remove (gvColumns, column.handle);
+    if (!removed) error (SWT.ERROR_ITEM_NOT_REMOVED);
+    int arrayIndex = -1;
+    for (int i = 0; i < columnCount; i++) {
+    	TreeColumn tc = columns [i];
+    	if (tc.equals(column)) {
+    		arrayIndex = i;
+    		break;
+    	}
+    }
+	columnCount--;
+	columns [arrayIndex] = null;
+	if (arrayIndex < columnCount) System.arraycopy (columns, arrayIndex+1, columns, arrayIndex, columnCount - arrayIndex);
+	if (columnCount == 0) {
+		OS.GCHandle_Free (gvColumns);
+		gvColumns = 0;
+		int templateProperty = OS.Control_TemplateProperty ();
+		OS.DependencyObject_ClearValue(handle, templateProperty);
+		OS.GCHandle_Free(templateProperty);
+	} 
+	int items = OS.ItemsControl_Items (handle);
+    for (int i=0; i<itemCount; i++) {
+		TreeItem item = getItem (items, i, false);
+		if (item != null) {
+			item.columnRemoved (index);
+		}
+	}
+    OS.GCHandle_Free (items);
+}
+
+void destroyItem (TreeItem item) {
+	TreeItem parentItem = item.getParentItem ();
+	int itemCount = parentItem != null ? parentItem.itemCount : this.itemCount;
+	int parentHandle = parentItem != null ? parentItem.handle : handle;
+	int items = OS.ItemsControl_Items (parentHandle);
+	OS.ItemCollection_Remove (items, item.handle);
+	int count = OS.ItemCollection_Count (items);
+	OS.GCHandle_Free (items);
+	if (count == itemCount) error (SWT.ERROR_ITEM_NOT_REMOVED);
+	if (parentItem != null) {
+		parentItem.itemCount--;
+	} else {
+		this.itemCount--;
+	}
+}
+
+int findScrollViewer(int current, int scrollViewerType) {
+	if (columnCount != 0) {
+		int template = OS.Control_Template (handle);
+		int scrollViewerName = createDotNetString (SCROLLVIEWER_PART_NAME, false);
+		int scrollViewer = OS.FrameworkTemplate_FindName (template, scrollViewerName, handle);
+		OS.GCHandle_Free (scrollViewerName);
+		OS.GCHandle_Free (template);
+		return scrollViewer;
+	}
+	return super.findScrollViewer (current, scrollViewerType);
+}
+
+int findPartOfType (int source, int type) {
+	if (OS.Type_IsInstanceOfType (type, source)) return source;
+	int parent = OS.VisualTreeHelper_GetParent(source);
+	if (parent == 0) return 0;
+	int result = findPartOfType(parent, type);
+	if (result != parent) OS.GCHandle_Free(parent);
+	return result;
+}
+
+void fixScrollbarVisibility () {
+	int typeid = OS.ScrollViewer_typeid();
+	int scrolledHandle = findScrollViewer(handle, typeid);
+	OS.ScrollViewer_SetHorizontalScrollBarVisibility (scrolledHandle, OS.ScrollBarVisibility_Visible);
+	OS.ScrollViewer_SetVerticalScrollBarVisibility (scrolledHandle, OS.ScrollBarVisibility_Visible);
+	OS.GCHandle_Free(scrolledHandle);
+	OS.GCHandle_Free(typeid);
+}
+
+/**
+ * Returns the width in pixels of a grid line.
+ *
+ * @return the width of a grid line in pixels
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public int getGridLineWidth () {
+	checkWidget ();
+	//TODO
+	return 0;
+}
+
+/**
+ * Returns the height of the receiver's header 
+ *
+ * @return the height of the header or zero if the header is not visible
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1 
+ */
+public int getHeaderHeight () {
+	checkWidget ();
+	if (gvColumns == 0) return 0;
+	int column = OS.GridViewColumnCollection_default (gvColumns, 0);
+	int height = 0;
+	int header = OS.GridViewColumn_Header (column);
+	if (header != 0) {
+		height = (int) OS.FrameworkElement_ActualHeight (header);
+		if (height == 0) { 
+			updateLayout (header);
+			height = (int) OS.FrameworkElement_ActualHeight (header);
+		}
+		OS.GCHandle_Free (header);
+	}
+	OS.GCHandle_Free (column);
+	OS.GCHandle_Free (gvColumns);
+	return height;
+}
+
+/**
+ * Returns <code>true</code> if the receiver's header is visible,
+ * and <code>false</code> otherwise.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, this method
+ * may still indicate that it is considered visible even though
+ * it may not actually be showing.
+ * </p>
+ *
+ * @return the receiver's header's visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public boolean getHeaderVisible () {
+	checkWidget ();
+	if (gvColumns == 0) return false;
+	int column = OS.GridViewColumnCollection_default (gvColumns, 0);
+	int header = OS.GridViewColumn_Header (column);
+	boolean visible = OS.UIElement_Visibility (header) == OS.Visibility_Visible;
+	OS.GCHandle_Free (header);
+	OS.GCHandle_Free (column);
+	return visible;
+}
+
+/**
+ * Returns the column at the given, zero-relative index in the
+ * receiver. Throws an exception if the index is out of range.
+ * Columns are returned in the order that they were created.
+ * If no <code>TreeColumn</code>s were created by the programmer,
+ * this method will throw <code>ERROR_INVALID_RANGE</code> despite
+ * the fact that a single column of data may be visible in the tree.
+ * This occurs when the programmer uses the tree like a list, adding
+ * items but never creating a column.
+ *
+ * @param index the index of the column to return
+ * @return the column at the given index
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Tree#getColumnOrder()
+ * @see Tree#setColumnOrder(int[])
+ * @see TreeColumn#getMoveable()
+ * @see TreeColumn#setMoveable(boolean)
+ * @see SWT#Move
+ * 
+ * @since 3.1
+ */
+public TreeColumn getColumn (int index) {
+	checkWidget ();
+	if (!(0 <= index && index < columnCount)) error (SWT.ERROR_INVALID_RANGE);
+	return columns [index];
+}
+
+//TreeColumn _getColumn (int index) {
+//	if (columnCount == 0) return null;
+//	int gridColumn = OS.GridViewColumnCollection_default (gvColumns, index);
+//	int header = OS.GridViewColumn_Header (gridColumn);
+//	TreeColumn column = (TreeColumn) display.getWidget (header);
+//	OS.GCHandle_Free (gridColumn);
+//	OS.GCHandle_Free (header);
+//	return column;
+//}
+
+/**
+ * Returns the number of columns contained in the receiver.
+ * If no <code>TreeColumn</code>s were created by the programmer,
+ * this value is zero, despite the fact that visually, one column
+ * of items may be visible. This occurs when the programmer uses
+ * the tree like a list, adding items but never creating a column.
+ *
+ * @return the number of columns
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public int getColumnCount () {
+	checkWidget ();
+	return columnCount;
+}
+
+/**
+ * Returns an array of zero-relative integers that map
+ * the creation order of the receiver's items to the
+ * order in which they are currently being displayed.
+ * <p>
+ * Specifically, the indices of the returned array represent
+ * the current visual order of the items, and the contents
+ * of the array represent the creation order of the items.
+ * </p><p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the current visual order of the receiver's items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Tree#setColumnOrder(int[])
+ * @see TreeColumn#getMoveable()
+ * @see TreeColumn#setMoveable(boolean)
+ * @see SWT#Move
+ * 
+ * @since 3.2
+ */
+public int[] getColumnOrder () {
+	checkWidget ();
+	int [] order = new int [columnCount];
+	for (int i=0; i<order.length; i++) order [i] = i;
+	for (int i = 0; i < order.length; i++) {
+		TreeColumn column = columns [i];
+		int index = OS.IList_IndexOf (gvColumns, column.handle);
+		order [index] = i;	
+	}
+	return order;
+}
+
+/**
+ * Returns an array of <code>TreeColumn</code>s which are the
+ * columns in the receiver. Columns are returned in the order
+ * that they were created.  If no <code>TreeColumn</code>s were
+ * created by the programmer, the array is empty, despite the fact
+ * that visually, one column of items may be visible. This occurs
+ * when the programmer uses the tree like a list, adding items but
+ * never creating a column.
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the items in the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Tree#getColumnOrder()
+ * @see Tree#setColumnOrder(int[])
+ * @see TreeColumn#getMoveable()
+ * @see TreeColumn#setMoveable(boolean)
+ * @see SWT#Move
+ * 
+ * @since 3.1
+ */
+public TreeColumn [] getColumns () {
+	checkWidget ();
+	TreeColumn [] result = new TreeColumn [columnCount];
+	for (int i = 0; i < result.length; i++) {
+		result [i] = columns [i];
+	}
+	return result;
+}
+
+/**
+ * Returns the item at the given, zero-relative index in the
+ * receiver. Throws an exception if the index is out of range.
+ *
+ * @param index the index of the item to return
+ * @return the item at the given index
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public TreeItem getItem (int index) {
+	checkWidget ();
+	if (index < 0 || index >= itemCount) error (SWT.ERROR_INVALID_RANGE);
+	int items = OS.ItemsControl_Items (handle);
+	TreeItem treeItem = getItem (items, index, true);
+	OS.GCHandle_Free (items);
+	return treeItem;
+}
+
+TreeItem getItem (int items, int index, boolean create) {
+	int item = OS.ItemCollection_GetItemAt (items, index);
+	TreeItem result = getItem (item, create);
+	OS.GCHandle_Free (item);
+	return result;
+}
+
+TreeItem getItem (int item, boolean create) {
+	int tag = OS.FrameworkElement_Tag (item);
+	if (tag != 0) {
+		int contentValue = OS.IntPtr_ToInt32 (tag);
+		OS.GCHandle_Free (tag);
+		return (TreeItem) OS.JNIGetObject (contentValue);
+	}
+	if (create) {
+		int itemHandle = OS.GCHandle_Alloc (item);
+		int parentHandle = OS.FrameworkElement_Parent (item);
+		TreeItem parentItem = null;
+		if (!OS.Object_Equals (parentHandle, handle)) parentItem = (TreeItem) display.getWidget (parentHandle);
+		OS.GCHandle_Free (parentHandle);
+		return new TreeItem (this, parentItem, SWT.NONE, 0, itemHandle);
+	}
+	return null;
+}
+
+/**
+ * Returns the item at the given point in the receiver
+ * or null if no such item exists. The point is in the
+ * coordinate system of the receiver.
+ * <p>
+ * The item that is returned represents an item that could be selected by the user.
+ * For example, if selection only occurs in items in the first column, then null is 
+ * returned if the point is outside of the item. 
+ * Note that the SWT.FULL_SELECTION style hint, which specifies the selection policy,
+ * determines the extent of the selection.
+ * </p>
+ *
+ * @param point the point used to locate the item
+ * @return the item at the given point, or null if the point is not in a selectable item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the point is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TreeItem getItem (Point point) {
+	checkWidget ();
+	if (point == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int pt = OS.gcnew_Point (point.x, point.y);
+	int input = OS.UIElement_InputHitTest (handle, pt);
+	OS.GCHandle_Free (pt);
+	if (input == 0) return null;
+	Widget widget = display.getWidget (input);
+	OS.GCHandle_Free (input);
+	if (widget instanceof TreeItem) {
+		return (TreeItem) widget;
+	}
+	return null;
+}
+
+/**
+ * Returns the number of items contained in the receiver
+ * that are direct item children of the receiver.  The
+ * number that is returned is the number of roots in the
+ * tree.
+ *
+ * @return the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemCount () {
+	checkWidget ();
+	return itemCount;
+}
+
+/**
+ * Returns the height of the area which would be used to
+ * display <em>one</em> of the items in the tree.
+ *
+ * @return the height of one item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemHeight () {
+	checkWidget ();
+	//FIXME
+	if (itemCount == 0) return 16;
+	int items = OS.ItemsControl_Items (handle);
+	int item = OS.ItemCollection_GetItemAt (items, 0);
+	double height = OS.FrameworkElement_ActualHeight (item);
+	OS.GCHandle_Free (item);
+	OS.GCHandle_Free (items);
+	return height != 0 ? (int) height : 16;
+}
+
+/**
+ * Returns a (possibly empty) array of items contained in the
+ * receiver that are direct item children of the receiver.  These
+ * are the roots of the tree.
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TreeItem [] getItems () {
+	checkWidget ();
+	TreeItem [] result = new TreeItem [itemCount];
+	int items = OS.ItemsControl_Items (handle);
+	for (int i = 0; i < itemCount; i++) {
+      	result [i] = getItem (items, i, true);
+	}
+	OS.GCHandle_Free (items);
+	return result;
+}
+
+/**
+ * Returns <code>true</code> if the receiver's lines are visible,
+ * and <code>false</code> otherwise. Note that some platforms draw 
+ * grid lines while others may draw alternating row colors.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, this method
+ * may still indicate that it is considered visible even though
+ * it may not actually be showing.
+ * </p>
+ *
+ * @return the visibility state of the lines
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public boolean getLinesVisible () {
+	checkWidget ();
+	//TODO
+	return false;
+}
+
+/**
+ * Returns the receiver's parent item, which must be a
+ * <code>TreeItem</code> or null when the receiver is a
+ * root.
+ *
+ * @return the receiver's parent item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TreeItem getParentItem () {
+	checkWidget ();
+	return null;
+}
+
+/**
+ * Returns an array of <code>TreeItem</code>s that are currently
+ * selected in the receiver. The order of the items is unspecified.
+ * An empty array indicates that no items are selected. 
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its selection, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ * @return an array representing the selection
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TreeItem [] getSelection () {
+	checkWidget ();
+	TreeItem [] result;
+	if ((style & SWT.SINGLE) != 0) {
+		int item = OS.TreeView_SelectedItem (handle);
+		if (item == 0) return new TreeItem [0];
+		result = new TreeItem [] { (TreeItem) display.getWidget (item) };
+		OS.GCHandle_Free (item);
+	} else {
+		result = getSelectedItems (handle, new TreeItem [4], new int [1]);
+	}
+	return result;
+}
+
+TreeItem[] getSelectedItems(int itemsControl, TreeItem [] selectedItems, int [] nextIndex) {
+	int items = OS.ItemsControl_Items (itemsControl);
+	int count = OS.ItemCollection_Count (items);
+	for (int i = 0; i < count; i++) {
+		int item = OS.ItemCollection_GetItemAt (items, i);
+		boolean selected = OS.TreeViewItem_IsSelected (item);
+		if (selected) {
+			if (nextIndex [0] == selectedItems.length) {
+				TreeItem [] newArray = new TreeItem [selectedItems.length + 4];
+				System.arraycopy (selectedItems, 0, newArray, 0, selectedItems.length);
+				selectedItems = newArray;
+			}
+			selectedItems [nextIndex[0]++] = getItem (item, true);
+		}
+		if (OS.TreeViewItem_IsExpanded (item)) {
+			selectedItems = getSelectedItems (item, selectedItems, nextIndex);
+		}
+		OS.GCHandle_Free (item);
+	}
+	OS.GCHandle_Free (items);
+	if (selectedItems.length != nextIndex [0]) {
+		TreeItem[] newArray = new TreeItem [nextIndex[0]];
+		System.arraycopy (selectedItems, 0, newArray, 0, nextIndex [0]);
+		selectedItems = newArray;
+	}
+	return selectedItems;
+}
+
+/**
+ * Returns the number of selected items contained in the receiver.
+ *
+ * @return the number of selected items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getSelectionCount () {
+	checkWidget ();
+	int result;
+	if ((style & SWT.SINGLE) != 0) {
+		int item = OS.TreeView_SelectedItem (handle);
+		result = item == 0 ? 0 : 1;
+		OS.GCHandle_Free (item);
+	} else {
+		TreeItem[] selectedItems = getSelectedItems(handle, new TreeItem[4], new int[] {0});
+		result = selectedItems.length;
+	}
+	return result;
+}
+
+/**
+ * Returns the column which shows the sort indicator for
+ * the receiver. The value may be null if no column shows
+ * the sort indicator.
+ *
+ * @return the sort indicator 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setSortColumn(TreeColumn)
+ * 
+ * @since 3.2
+ */
+public TreeColumn getSortColumn () {
+	checkWidget ();
+	//TODO
+	return null;
+}
+
+/**
+ * Returns the direction of the sort indicator for the receiver. 
+ * The value will be one of <code>UP</code>, <code>DOWN</code> 
+ * or <code>NONE</code>.
+ *
+ * @return the sort direction
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see #setSortDirection(int)
+ * 
+ * @since 3.2
+ */
+public int getSortDirection () {
+	checkWidget ();
+	//TODO
+	return SWT.NONE;
+}
+
+/**
+ * Returns the item which is currently at the top of the receiver.
+ * This item can change when items are expanded, collapsed, scrolled
+ * or new items are added or removed.
+ *
+ * @return the item at the top of the receiver 
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.1
+ */
+public TreeItem getTopItem () {
+	checkWidget ();
+	//TODO
+	return null;
+}
+
+boolean hasItems () {
+	return true;
+}
+
+void HandleChecked (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if (ignoreSelection) return;
+	int origsource = OS.RoutedEventArgs_OriginalSource (e);
+	int typeid = OS.CheckBox_typeid ();
+	boolean isCheckBox = OS.Type_IsInstanceOfType (typeid, origsource);
+	OS.GCHandle_Free (typeid);
+	OS.GCHandle_Free (origsource);
+	if (!isCheckBox) return;
+	int source = OS.RoutedEventArgs_Source (e);
+	TreeItem item = (TreeItem) display.getWidget (source);
+	OS.GCHandle_Free (source);
+	if (item.grayed) {
+		int checkbox = item.findPart (0, CHECKBOX_PART_NAME);
+		if (checkbox != 0) {
+			OS.ToggleButton_IsCheckedNullSetter (checkbox);
+			OS.GCHandle_Free (checkbox);
+		}
+	}
+	item.checked = true;
+	item.updateCheck ();
+	Event event = new Event ();
+	event.item = item;
+	event.detail = SWT.CHECK;
+	sendEvent (SWT.Selection, event);
+
+}
+
+void HandleCollapsed (int sender, int e) {
+	if (!checkEvent (e)) return;
+	int source = OS.RoutedEventArgs_Source (e);
+	if (OS.ItemsControl_HasItems (source)) {
+		TreeItem item = (TreeItem) display.getWidget (source);
+		int items = OS.ItemsControl_Items (item.handle);
+		int count = OS.ItemCollection_Count (items);
+		boolean[] selecting = new boolean [] {false};
+		for (int i = 0; i < count; i++) {
+			int child = OS.ItemCollection_GetItemAt (items, i);
+			fixSelection (child, null, null, selecting);
+			OS.GCHandle_Free (child);
+		}
+		OS.GCHandle_Free (items);
+		Event event = new Event ();
+		event.item = item;
+		sendEvent (SWT.Collapse, event);
+	}
+	OS.GCHandle_Free (source);
+}
+
+void HandleExpanded (int sender, int e) {
+	if (!checkEvent (e)) return;
+	int source = OS.RoutedEventArgs_Source (e);
+	if (OS.ItemsControl_HasItems (source)) {
+		Event event = new Event ();
+		event.item = (TreeItem) display.getWidget (source);
+		sendEvent (SWT.Expand, event);
+	}
+	OS.GCHandle_Free (source);
+}
+
+void HandlePreviewKeyDown (int sender, int e) {
+	super.HandlePreviewKeyDown (sender, e);
+	if (!checkEvent (e)) return;
+	int key = OS.KeyEventArgs_Key (e);
+	if (key == OS.Key_Return) {
+		int source = OS.RoutedEventArgs_OriginalSource (e);
+		Widget widget = display.getWidget (source);
+		OS.GCHandle_Free (source);
+		if (widget instanceof TreeItem) {
+			Event event = new Event ();
+			event.item = (TreeItem) widget;
+			postEvent (SWT.DefaultSelection, event);
+		}
+	}
+	if (key == OS.Key_RightShift || key == OS.Key_LeftShift) shiftDown = true;
+	if (key == OS.Key_RightCtrl || key == OS.Key_LeftCtrl) ctrlDown = true;
+}
+
+void HandlePreviewKeyUp (int sender, int e) {
+	super.HandlePreviewKeyUp (sender, e);
+	if (!checkEvent (e)) return;
+	int key = OS.KeyEventArgs_Key (e);
+	if (key == OS.Key_RightShift || key == OS.Key_LeftShift) shiftDown = false;
+	if (key == OS.Key_RightCtrl || key == OS.Key_LeftCtrl) ctrlDown = false;
+}
+
+void HandleLoaded (int sender, int e) {
+	if (!checkEvent (e)) return;
+	updateHeaderVisibility();
+}
+
+void HandlePreviewMouseDoubleClick (int sender, int e) {
+	if (!checkEvent (e)) return;
+	int source = OS.RoutedEventArgs_OriginalSource (e);
+	Widget widget = display.getWidget (source);
+	OS.GCHandle_Free (source);
+	if (widget instanceof TreeItem) {
+		Event event = new Event ();
+		event.item = (TreeItem) widget;
+		postEvent (SWT.DefaultSelection, event);
+	}
+	if (hooks (SWT.DefaultSelection)) OS.RoutedEventArgs_Handled(e, true);
+}
+
+void HandlePreviewMouseDown (int sender, int e) {
+	super.HandlePreviewMouseDown (sender, e);
+	if (!checkEvent (e)) return;
+	if ((style & SWT.SINGLE) != 0) return;
+	int source = OS.RoutedEventArgs_Source (e);
+	Widget widget = display.getWidget (source);
+	OS.GCHandle_Free (source);
+	if (widget instanceof TreeItem) {
+		TreeItem item = (TreeItem) widget;
+		/* Check that content of item was clicked, not the expander */
+		int point = OS.MouseEventArgs_GetPosition (e, item.contentHandle);
+		int input = OS.UIElement_InputHitTest (item.contentHandle, point);
+		OS.GCHandle_Free (point);
+		if (input != 0) {
+			OS.GCHandle_Free (input);
+			boolean rightClick = OS.MouseEventArgs_RightButton (e) == OS.MouseButtonState_Pressed;
+			if (rightClick && (ctrlDown || shiftDown)) return;
+			if (ctrlDown) {
+				boolean selected = OS.TreeViewItem_IsSelected (item.handle);
+				if (widget.equals (lastSelection)) {
+					OS.TreeViewItem_IsSelected (item.handle, !selected);
+				} else {
+					if (selected) unselect = item;
+					if (lastSelection != null && OS.TreeViewItem_IsSelected (lastSelection.handle)) reselect = lastSelection;
+				}
+			}
+			if (!shiftDown && !ctrlDown) {
+				boolean selected = OS.TreeViewItem_IsSelected (item.handle);
+	    		if (selected && rightClick) return;
+	   			deselectAll ();
+	   			OS.TreeViewItem_IsSelected (item.handle, true);
+			}
+		}
+		lastSelection = item;
+	}
+}
+
+void HandleSelectedItemChanged (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if (ignoreSelection) return;
+	int selectedItem = OS.TreeView_SelectedItem (handle);
+	if (selectedItem == 0) return;
+	TreeItem item = (TreeItem) display.getWidget (selectedItem);
+	OS.GCHandle_Free (selectedItem);
+	Event event = new Event ();
+	event.item = item;
+	postEvent (SWT.Selection, event);
+}
+
+void HandleUnchecked (int sender, int e) {
+	if (!checkEvent (e)) return;
+	if (ignoreSelection) return;
+	int origsource = OS.RoutedEventArgs_OriginalSource (e);
+	int typeid = OS.CheckBox_typeid ();
+	boolean isCheckBox = OS.Type_IsInstanceOfType (typeid, origsource);
+	OS.GCHandle_Free (typeid);
+	OS.GCHandle_Free (origsource);
+	if (!isCheckBox) return;
+	int source = OS.RoutedEventArgs_Source (e);
+	TreeItem item = (TreeItem) display.getWidget (source);
+	OS.GCHandle_Free (source);
+	item.checked = false;
+	item.updateCheck ();
+	Event event = new Event ();
+	event.item = item;
+	event.detail = SWT.CHECK;
+	sendEvent (SWT.Selection, event);
+}
+
+void hookEvents () {
+	super.hookEvents ();
+	int handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleLoaded");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.FrameworkElement_Loaded (handle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_RoutedPropertyChangedEventHandlerObject (jniRef, "HandleSelectedItemChanged");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.TreeView_SelectedItemChanged (handle, handler);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_MouseButtonEventHandler (jniRef, "HandlePreviewMouseDoubleClick");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.Control_PreviewMouseDoubleClick (handle, handler);
+	OS.GCHandle_Free (handler);
+	
+	/* Item events */
+	handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleExpanded");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	int event = OS.TreeViewItem_ExpandedEvent ();
+	OS.UIElement_AddHandler (handle, event, handler, false);
+	OS.GCHandle_Free (event);
+	OS.GCHandle_Free (handler);
+	handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleCollapsed");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	event = OS.TreeViewItem_CollapsedEvent ();
+	OS.UIElement_AddHandler (handle, event, handler, false);
+	OS.GCHandle_Free (event);
+	OS.GCHandle_Free (handler);
+	if ((style & SWT.CHECK) != 0) {
+		handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleChecked");
+		if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+		event = OS.ToggleButton_CheckedEvent ();
+		OS.UIElement_AddHandler (handle, event, handler, false);
+		OS.GCHandle_Free (event);
+		OS.GCHandle_Free (handler);
+		handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleUnchecked");
+		if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+		event = OS.ToggleButton_UncheckedEvent ();
+		OS.UIElement_AddHandler (handle, event, handler, false);
+		OS.GCHandle_Free (event);
+		OS.GCHandle_Free (handler);
+	}
+}
+
+/**
+ * Searches the receiver's list starting at the first column
+ * (index 0) until a column is found that is equal to the 
+ * argument, and returns the index of that column. If no column
+ * is found, returns -1.
+ *
+ * @param column the search column
+ * @return the index of the column
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the column is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public int indexOf (TreeColumn column) {
+	checkWidget ();
+	if (column == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (gvColumns == 0) return -1; 
+	int index = OS.GridViewColumnCollection_IndexOf (gvColumns, column.handle);
+	return index;
+}
+
+/**
+ * Searches the receiver's list starting at the first item
+ * (index 0) until an item is found that is equal to the 
+ * argument, and returns the index of that item. If no item
+ * is found, returns -1.
+ *
+ * @param item the search item
+ * @return the index of the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public int indexOf (TreeItem item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (item.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	int items = OS.ItemsControl_Items (handle);
+	int index = OS.ItemCollection_IndexOf (items, item.handle);
+	OS.GCHandle_Free (items);
+	return index;
+}
+
+void OnRender (int source, int dc) {
+	int type =  OS.TreeViewItem_typeid ();
+	int itemHandle = findPartOfType (source, type);
+	OS.GCHandle_Free (type);
+	TreeItem item = getItem (itemHandle, true);
+	OS.GCHandle_Free (itemHandle);
+	if ((item.cached || (style & SWT.VIRTUAL) == 0) && item.contentHandle != 0) return;
+	checkData (item);
+	if (item.contentHandle == 0) {
+		item.contentHandle = item.findContentPresenter();
+	}
+	int columns = columnCount == 0 ? 1 : columnCount;
+	item.updateCheck ();
+	for (int i=0; i<columns; i++) {
+		item.updateText (i);
+		item.updateImage (i);
+		item.updateBackground (i);
+		item.updateForeground (i);
+		item.updateFont (i);
+	}
+}
+
+void OnSelectedItemChanged (int args) {
+	int newItemRef = OS.RoutedPropertyChangedEventArgs_NewValue (args);
+	TreeItem newItem = null;
+	if (newItemRef != 0) {
+		int unsetValue = OS.DependencyProperty_UnsetValue ();
+		if (!OS.Object_Equals (newItemRef, unsetValue)) newItem = getItem (newItemRef, false);
+		OS.GCHandle_Free (newItemRef);
+		OS.GCHandle_Free (unsetValue);
+		newItemRef = 0;
+	}
+    setIsSelectionActiveProperty (true);
+    if (!shiftDown && !ctrlDown) {
+    	deselectAll ();
+    	if (newItem != null) OS.TreeViewItem_IsSelected (newItem.handle, true);
+    	anchor = newItem;
+    } else {
+    	if (shiftDown) {
+    		deselectAll ();
+    		if (anchor == null || anchor == newItem) {
+    	    	if (newItem != null) OS.TreeViewItem_IsSelected (newItem.handle, true);
+    	    	anchor = newItem;
+    		} else {
+    			int zero = OS.gcnew_Point (0, 0);
+    			int point = OS.UIElement_TranslatePoint (anchor.handle, zero, newItem.handle);
+    			OS.GCHandle_Free (zero);
+    		    boolean down = OS.Point_Y (point) < 0;
+    		    OS.GCHandle_Free (point);
+    		    TreeItem from = down ? anchor : newItem;
+    		    TreeItem to = down ? newItem : anchor;
+    		    int items = OS.ItemsControl_Items (handle);
+    		    int itemCount = OS.ItemCollection_Count (items);
+    		    boolean[] selecting = new boolean[] {false};
+    		    for (int i = 0; i < itemCount; i++) {
+					int item = OS.ItemCollection_GetItemAt(items, i);
+					fixSelection (item, from, to, selecting);
+					OS.GCHandle_Free (item);
+				}
+    		    OS.GCHandle_Free (items);
+    		}
+    	} else {
+			if (unselect != null) {
+    			OS.TreeViewItem_IsSelected (unselect.handle, false);
+    			unselect = null;
+    		}
+    		if (reselect != null) {
+    			OS.TreeViewItem_IsSelected (reselect.handle, true);
+    			reselect = null;
+    		}
+    		anchor = newItem;
+    	}
+    } 
+    setIsSelectionActiveProperty (false);
+}
+
+private void fixSelection (int tvItem, TreeItem from, TreeItem to, boolean [] selecting) {
+    if (selecting [0]) {
+    	OS.TreeViewItem_IsSelected (tvItem, true);
+    	if (to != null && OS.Object_Equals (tvItem, to.handle)) selecting [0] = false;
+    } else {
+    	if (from != null && OS.Object_Equals (tvItem, from.handle)) selecting [0] = true;
+        OS.TreeViewItem_IsSelected(tvItem, selecting [0]);
+    }
+    if (OS.TreeViewItem_IsExpanded (tvItem)) {
+    	int items = OS.ItemsControl_Items (tvItem);
+    	int itemCount = OS.ItemCollection_Count (items);
+    	for (int i = 0; i < itemCount; i++) {
+    		int tvChild = OS.ItemCollection_GetItemAt (items, i);
+			fixSelection (tvChild, from, to, selecting);
+			OS.GCHandle_Free (tvChild);
+		}
+    	OS.GCHandle_Free (items);
+    }
+}
+
+int parentingHandle () {
+	return parentingHandle;
+}
+
+void register() {
+	super.register();
+	display.addWidget (parentingHandle, this);
+}
+
+void releaseChildren (boolean destroy) {
+	int items = OS.ItemsControl_Items (handle);
+	for (int i=0; i<itemCount; i++) {
+		TreeItem item = getItem (items, i, false);
+		if (item != null && !item.isDisposed ()) item.release (false);
+	}
+	OS.GCHandle_Free (items);
+	for (int i=0; i<columnCount; i++) {
+		TreeColumn column = columns [i];
+		if (column != null && !column.isDisposed ()) {
+			column.release (false);
+		}
+	}
+	super.releaseChildren (destroy);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (gvColumns != 0) OS.GCHandle_Free (gvColumns);
+	gvColumns = 0;
+	if (headerTemplate != 0) OS.GCHandle_Free (headerTemplate);
+	headerTemplate = 0;
+	OS.GCHandle_Free (parentingHandle);
+	parentingHandle = 0;
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	columns = null;
+}
+
+/**
+ * Removes all of the items from the receiver.
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void removeAll () {
+	checkWidget ();
+	int items = OS.ItemsControl_Items (handle);
+	for (int i = 0; i < itemCount; i++) {
+		TreeItem item = getItem (items, i, false);
+		if (item != null && !item.isDisposed ()) item.release (false);
+	}
+	ignoreSelection = true;
+	OS.ItemCollection_Clear (items);
+	ignoreSelection = false;
+	itemCount = OS.ItemCollection_Count (items);
+	OS.GCHandle_Free (items);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the user changes the receiver's selection.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection, listener);	
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when items in the receiver are expanded or collapsed.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see TreeListener
+ * @see #addTreeListener
+ */
+public void removeTreeListener(TreeListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Expand, listener);
+	eventTable.unhook (SWT.Collapse, listener);
+}
+
+int setBounds (int x, int y, int width, int height, int flags) {
+	int result = super.setBounds (x, y, width, height, flags);
+	if ((result & RESIZED) != 0) {
+		OS.FrameworkElement_Width (handle, width);
+		OS.FrameworkElement_Height (handle, height);
+	}
+	return result;
+}
+
+/**
+ * Display a mark indicating the point at which an item will be inserted.
+ * The drop insert item has a visual hint to show where a dragged item 
+ * will be inserted when dropped on the tree.
+ * 
+ * @param item the insert item.  Null will clear the insertion mark.
+ * @param before true places the insert mark above 'item'. false places 
+ *	the insert mark below 'item'.
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setInsertMark (TreeItem item, boolean before) {
+	checkWidget ();
+	if (item != null && item.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	//TODO
+}
+
+/**
+ * Sets the number of root-level items contained in the receiver.
+ *
+ * @param count the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.2
+ */
+public void setItemCount (int count) {
+	checkWidget ();
+	setItemCount (null, count);
+}
+
+void setItemCount (TreeItem parentItem, int count) {
+	int itemCount = parentItem != null ? parentItem.itemCount : this.itemCount;
+	count = Math.max (0, count);
+	if (count == itemCount) return;
+	int parentHandle = parentItem != null ? parentItem.handle : handle;
+	int index = itemCount - 1;
+	int items = OS.ItemsControl_Items (parentHandle);
+	while (index >= count) {
+		TreeItem item = getItem (items, index, false);
+		if (item != null) {
+			if (!item.isDisposed()) item.release (true);
+		} else {
+			OS.ItemCollection_RemoveAt (items, index);
+		}
+		index--;
+	}
+	if (OS.ItemCollection_Count (items) > count) error (SWT.ERROR_ITEM_NOT_REMOVED);
+	if ((style & SWT.VIRTUAL) != 0) {
+		for (int i=itemCount; i<count; i++) {
+			int item = OS.gcnew_TreeViewItem ();
+			if (item == 0) error (SWT.ERROR_NO_HANDLES);
+			if (columnCount != 0) {
+				int headerHandle = OS.gcnew_SWTTreeViewRowPresenter (handle);
+				if (headerHandle == 0) error (SWT.ERROR_NO_HANDLES);
+				OS.GridViewRowPresenterBase_Columns (headerHandle, gvColumns);
+				OS.HeaderedItemsControl_Header (item, headerHandle);
+				OS.GCHandle_Free (headerHandle);
+			} else {
+				OS.TreeViewItem_HeaderTemplate (item, headerTemplate);
+			}
+			OS.ItemCollection_Add (items, item);
+			OS.GCHandle_Free (item);
+		}
+	} else {
+		for (int i=itemCount; i<count; i++) {
+			new TreeItem (this, parentItem, SWT.NONE, i, 0);
+		}
+	}
+	itemCount = OS.ItemCollection_Count (items);
+	OS.GCHandle_Free (items);
+	if (itemCount != count) error (SWT.ERROR_ITEM_NOT_ADDED);
+	if (parentItem != null) {
+		parentItem.itemCount = itemCount;
+	} else {
+		this.itemCount = itemCount;
+	}
+}
+
+/**
+ * Sets the height of the area which would be used to
+ * display <em>one</em> of the items in the tree.
+ *
+ * @return the height of one item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+/*public*/ void setItemHeight (int itemHeight) {
+	checkWidget ();
+	if (itemHeight < -1) error (SWT.ERROR_INVALID_ARGUMENT);
+	//TODO
+}
+
+/**
+ * Marks the receiver's lines as visible if the argument is <code>true</code>,
+ * and marks it invisible otherwise. Note that some platforms draw 
+ * grid lines while others may draw alternating row colors.
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, marking
+ * it visible may not actually cause it to be displayed.
+ * </p>
+ *
+ * @param show the new visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void setLinesVisible (boolean show) {
+	checkWidget ();
+	//TODO
+}
+
+/**
+ * Selects an item in the receiver.  If the item was already
+ * selected, it remains selected.
+ *
+ * @param item the item to be selected
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.4
+ */
+public void select (TreeItem item) {
+	if (item == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	if (item.isDisposed ()) SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	if ((style & SWT.SINGLE) != 0) {
+		ignoreSelection = true;
+		OS.TreeViewItem_IsSelected (item.handle, true);
+		ignoreSelection = false;
+		return;
+	}
+	
+	ignoreSelection = true;
+	setIsSelectionActiveProperty(true);
+	OS.TreeViewItem_IsSelected (item.handle, true);	
+	setIsSelectionActiveProperty(false);
+	ignoreSelection = false;
+}
+
+/**
+ * Selects all of the items in the receiver.
+ * <p>
+ * If the receiver is single-select, do nothing.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void selectAll () {
+	checkWidget ();
+	if ((style & SWT.SINGLE) != 0) return;
+	int items = OS.ItemsControl_Items (handle);
+    int itemCount = OS.ItemCollection_Count (items);
+    boolean[] selecting = new boolean[] {true};
+    setIsSelectionActiveProperty(true);
+    for (int i = 0; i < itemCount; i++) {
+		int item = OS.ItemCollection_GetItemAt(items, i);
+		fixSelection(item, null, null, selecting);
+		OS.GCHandle_Free(item);
+	}
+    setIsSelectionActiveProperty(false);
+    OS.GCHandle_Free(items);
+}
+
+/**
+ * Sets the order that the items in the receiver should 
+ * be displayed in to the given argument which is described
+ * in terms of the zero-relative ordering of when the items
+ * were added.
+ *
+ * @param order the new order to display the items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item order is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item order is not the same length as the number of items</li>
+ * </ul>
+ * 
+ * @see Tree#getColumnOrder()
+ * @see TreeColumn#getMoveable()
+ * @see TreeColumn#setMoveable(boolean)
+ * @see SWT#Move
+ * 
+ * @since 3.2
+ */
+public void setColumnOrder (int [] order) {
+	checkWidget ();
+	if (order == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (order.length != columnCount) error (SWT.ERROR_INVALID_ARGUMENT);
+	int [] oldOrder = getColumnOrder ();
+	boolean reorder = false;
+	boolean [] seen = new boolean [columnCount];
+	for (int i=0; i<order.length; i++) {
+		int index = order [i];
+		if (index < 0 || index >= columnCount) error (SWT.ERROR_INVALID_ARGUMENT);
+		if (seen [index]) error (SWT.ERROR_INVALID_ARGUMENT);
+		seen [index] = true;
+		if (order [i] != oldOrder [i]) reorder = true;
+	}
+	if (!reorder) return;
+	for (int i = 0; i < order.length; i++) {
+		TreeColumn column = columns [order [i]];
+		int index = OS.IList_IndexOf (gvColumns, column.handle);
+		if (index != i) OS.ObservableCollectionGridViewColumn_Move (gvColumns, index, i);	
+	}
+}
+
+void setFont (int font, double size) {
+	if (font != 0) {
+		int fontFamily = OS.Typeface_FontFamily( font);
+		int style = OS.Typeface_Style (font);
+		int weight = OS.Typeface_Weight (font);
+		int stretch = OS.Typeface_Stretch (font);
+		OS.Control_FontFamily (handle, fontFamily);
+		OS.Control_FontStyle (handle, style);
+		OS.Control_FontWeight (handle, weight);
+		OS.Control_FontStretch (handle, stretch);
+		OS.Control_FontSize (handle, size);
+		OS.GCHandle_Free (fontFamily);
+		OS.GCHandle_Free (style);
+		OS.GCHandle_Free (weight);
+		OS.GCHandle_Free (stretch);
+	} else {
+		int property = OS.Control_FontFamilyProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS.Control_FontStyleProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS.Control_FontWeightProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS.Control_FontStretchProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS.Control_FontSizeProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+	}
+}
+
+void setForegroundBrush (int brush) {
+	if (brush != 0) {
+		OS.Control_Foreground (handle, brush);
+	} else {
+		int property = OS.Control_ForegroundProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+	}
+}
+
+/**
+ * Marks the receiver's header as visible if the argument is <code>true</code>,
+ * and marks it invisible otherwise. 
+ * <p>
+ * If one of the receiver's ancestors is not visible or some
+ * other condition makes the receiver not visible, marking
+ * it visible may not actually cause it to be displayed.
+ * </p>
+ *
+ * @param show the new visibility state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void setHeaderVisible (boolean show) {
+	checkWidget ();
+	headerVisibility = show ? OS.Visibility_Visible : OS.Visibility_Collapsed;
+	updateHeaderVisibility ();
+	for (int i=0; i<columnCount; i++) {
+		TreeColumn column = getColumn(i);
+		column.updateImage ();
+		column.updateText ();
+	}
+}
+
+void setIsSelectionActiveProperty(boolean active) {
+	int treeType = OS.Object_GetType (handle);
+    int propertyName = createDotNetString ("IsSelectionChangeActive", false);
+    int property = OS.Type_GetProperty (treeType, propertyName, OS.BindingFlags_Instance | OS.BindingFlags_NonPublic);
+    OS.GCHandle_Free (treeType);
+    OS.GCHandle_Free (propertyName);
+    OS.PropertyInfo_SetValueBoolean (property, handle, active, 0);
+	OS.GCHandle_Free (property);
+}
+
+/**
+ * Sets the receiver's selection to the given item.
+ * The current selection is cleared before the new item is selected.
+ * <p>
+ * If the item is not in the receiver, then it is ignored.
+ * </p>
+ *
+ * @param item the item to select
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setSelection (TreeItem item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	setSelection (new TreeItem [] {item});
+}
+
+/**
+ * Sets the receiver's selection to be the given array of items.
+ * The current selection is cleared before the new items are selected.
+ * <p>
+ * Items that are not in the receiver are ignored.
+ * If the receiver is single-select and multiple items are specified,
+ * then all items are ignored.
+ * </p>
+ *
+ * @param items the array of items
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array of items is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if one of the items has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Tree#deselectAll()
+ */
+public void setSelection (TreeItem [] items) {
+	checkWidget ();
+	if (items == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int length = items.length;
+	if (length == 0 || ((style & SWT.SINGLE) != 0 && length > 1)) {
+		deselectAll ();
+		return;
+	}
+	for (int i = 0; i < items.length; i++) {
+		TreeItem item = items [i];
+		if (item != null && item.isDisposed ()) error (SWT.ERROR_WIDGET_DISPOSED);
+	}
+	deselectAll ();
+	ignoreSelection = true;
+	if ((style & SWT.SINGLE) != 0) {
+		TreeItem select = items [0];
+		if (select != null) {
+			OS.TreeViewItem_IsSelected (items [0].handle, true);
+		}
+	} else {
+		setIsSelectionActiveProperty (true);
+		for (int i = 0; i < length; i++) {
+			TreeItem item = items [i];
+			if (item != null) OS.TreeViewItem_IsSelected (item.handle, true);	
+		}
+		setIsSelectionActiveProperty (false);
+	}
+	ignoreSelection = false;
+}
+
+/**
+ * Sets the column used by the sort indicator for the receiver. A null
+ * value will clear the sort indicator.  The current sort column is cleared 
+ * before the new column is set.
+ *
+ * @param column the column used by the sort indicator or <code>null</code>
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the column is disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setSortColumn (TreeColumn column) {
+	checkWidget ();
+	//TODO
+}
+
+/**
+ * Sets the direction of the sort indicator for the receiver. The value 
+ * can be one of <code>UP</code>, <code>DOWN</code> or <code>NONE</code>.
+ *
+ * @param direction the direction of the sort indicator 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setSortDirection (int direction) {
+	checkWidget ();
+	//TODO
+}
+
+/**
+ * Sets the item which is currently at the top of the receiver.
+ * This item can change when items are expanded, collapsed, scrolled
+ * or new items are added or removed.
+ *
+ * @param item the item to be shown
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Tree#getTopItem()
+ * 
+ * @since 2.1
+ */
+public void setTopItem (TreeItem item) {
+	checkWidget ();
+	if (item == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	if (item.isDisposed ()) SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	//TODO
+}
+
+/**
+ * Shows the column.  If the column is already showing in the receiver,
+ * this method simply returns.  Otherwise, the columns are scrolled until
+ * the column is visible.
+ *
+ * @param column the column to be shown
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.1
+ */
+public void showColumn (TreeColumn column) {
+	checkWidget ();
+	if (column == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (column.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	if (column.parent != this) return;
+	int index = indexOf (column);
+	if (index == -1) return;
+	//TODO
+}
+
+/**
+ * Shows the item.  If the item is already showing in the receiver,
+ * this method simply returns.  Otherwise, the items are scrolled
+ * and expanded until the item is visible.
+ *
+ * @param item the item to be shown
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Tree#showSelection()
+ */
+public void showItem (TreeItem item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (item.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	if (item.parent != this) return;
+	int parent = OS.FrameworkElement_Parent (item.handle);
+	while (!OS.Object_Equals (parent, handle)) {
+		OS.TreeViewItem_IsExpanded (parent, true);
+		int newParent = OS.FrameworkElement_Parent (parent);
+		OS.GCHandle_Free (parent);
+		parent = newParent;
+	}
+	OS.GCHandle_Free (parent);
+	OS.FrameworkElement_BringIntoView (item.handle);
+}
+
+/**
+ * Shows the selection.  If the selection is already showing in the receiver,
+ * this method simply returns.  Otherwise, the items are scrolled until
+ * the selection is visible.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Tree#showItem(TreeItem)
+ */
+public void showSelection () {
+	checkWidget ();
+	int item = OS.TreeView_SelectedItem (handle);
+	if (item != 0) {
+		OS.FrameworkElement_BringIntoView (item);
+		OS.GCHandle_Free (item);
+	}
+}
+
+int topHandle () {
+	return parentingHandle;
+}
+
+void updateHeaderVisibility() {
+	int template = OS.Control_Template (handle);
+	int scrollViewerName = createDotNetString (SCROLLVIEWER_PART_NAME, false);
+	int scrollViewer = OS.FrameworkTemplate_FindName (template, scrollViewerName, handle);
+	if (scrollViewer != 0) {
+		int scrollViewerTemplate = OS.Control_Template(scrollViewer);
+		int headerName = createDotNetString(HEADER_PART_NAME, false);
+		int header = OS.FrameworkTemplate_FindName (scrollViewerTemplate, headerName, scrollViewer);
+		if (header != 0) {
+			OS.UIElement_Visibility (header, headerVisibility);
+			OS.GCHandle_Free (header);
+		}
+		OS.GCHandle_Free (scrollViewerTemplate);
+		OS.GCHandle_Free (headerName);
+		OS.GCHandle_Free (scrollViewer);
+	}
+	OS.GCHandle_Free (scrollViewerName);
+	OS.GCHandle_Free (template);
+}
+
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TreeColumn.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TreeColumn.java
new file mode 100644
index 0000000..3671770
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TreeColumn.java
@@ -0,0 +1,613 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+ 
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * Instances of this class represent a column in a tree widget.
+ * <p><dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>LEFT, RIGHT, CENTER</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd> Move, Resize, Selection</dd>
+ * </dl>
+ * </p><p>
+ * Note: Only one of the styles LEFT, RIGHT and CENTER may be specified.
+ * </p><p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tree">Tree, TreeItem, TreeColumn snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * 
+ * @since 3.1
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class TreeColumn extends Item {
+	Tree parent;
+	int headerHandle; 
+	int stringPtr;
+	boolean moveable, resizable;
+	
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Tree</code>) and a style value
+ * describing its behavior and appearance. The item is added
+ * to the end of the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#LEFT
+ * @see SWT#RIGHT
+ * @see SWT#CENTER
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TreeColumn (Tree parent, int style) {
+	this (checkNull(parent), checkStyle (style), parent.columnCount);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Tree</code>), a style value
+ * describing its behavior and appearance, and the index
+ * at which to place it in the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ * <p>
+ * Note that due to a restriction on some platforms, the first column
+ * is always left aligned.
+ * </p>
+ * @param parent a composite control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ * @param index the zero-relative index to store the receiver in its parent
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the parent (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT#LEFT
+ * @see SWT#RIGHT
+ * @see SWT#CENTER
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TreeColumn (Tree parent, int style, int index) {
+	super (parent, checkStyle (style));
+	resizable = true;
+	this.parent = parent;
+	parent.createItem (this, index);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is moved or resized, by sending
+ * it one of the messages defined in the <code>ControlListener</code>
+ * interface.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ControlListener
+ * @see #removeControlListener
+ */
+public void addControlListener(ControlListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Resize,typedListener);
+	addListener (SWT.Move,typedListener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is selected by the user, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is called when the column header is selected.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified when the control is selected by the user
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
+ */
+public void addSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Selection,typedListener);
+	addListener (SWT.DefaultSelection,typedListener);
+}
+
+static Tree checkNull (Tree tree) {
+	if (tree == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	return tree;
+}
+
+static int checkStyle (int style) {
+	return checkBits (style, SWT.LEFT, SWT.CENTER, SWT.RIGHT, 0, 0, 0);
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+void createHandle () {
+	handle = OS.gcnew_GridViewColumn ();
+	if (handle == 0) SWT.error (SWT.ERROR_NO_HANDLES);
+	headerHandle = OS.gcnew_GridViewColumnHeader ();
+	OS.GridViewColumn_Header (handle, headerHandle);
+	OS.GridViewColumn_Width (handle, 0);
+}
+
+void deregister () {
+	display.removeWidget (headerHandle);
+}
+
+void destroyWidget () {
+	parent.destroyItem (this);
+	releaseHandle ();
+}
+
+int findContentPresenter (int element, int contentPresenterType) {
+	int type = OS.Object_GetType (element);
+	boolean found = OS.Object_Equals (contentPresenterType, type);
+	OS.GCHandle_Free (type);
+	if (found) return element;
+	int count = OS.VisualTreeHelper_GetChildrenCount (element);
+	for (int i = 0; i < count; i++) {
+		int child = OS.VisualTreeHelper_GetChild (element, i);
+		int result = findContentPresenter (child, contentPresenterType);
+		if (child != result) OS.GCHandle_Free (child);
+		if (result != 0) return result;
+	}
+	return 0;
+}
+
+int findPart (String part) {
+	int contentPresenterType = OS.ContentPresenter_typeid ();
+	int contentPresenter = findContentPresenter (headerHandle, contentPresenterType);
+	int result = 0;
+	if (contentPresenter != 0) {
+		int template = OS.GridViewColumn_HeaderTemplate (handle);
+		int strPtr = createDotNetString (part, false);
+		result = OS.FrameworkTemplate_FindName (template, strPtr, contentPresenter);
+		OS.GCHandle_Free (strPtr);
+		OS.GCHandle_Free (template);
+		OS.GCHandle_Free (contentPresenter);
+	}
+	OS.GCHandle_Free (contentPresenterType);
+	return result;
+}
+
+/**
+ * Returns a value which describes the position of the
+ * text or image in the receiver. The value will be one of
+ * <code>LEFT</code>, <code>RIGHT</code> or <code>CENTER</code>.
+ *
+ * @return the alignment 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getAlignment () {
+	checkWidget ();
+	if ((style & SWT.LEFT) != 0) return SWT.LEFT;
+	if ((style & SWT.CENTER) != 0) return SWT.CENTER;
+	if ((style & SWT.RIGHT) != 0) return SWT.RIGHT;
+	return SWT.LEFT;
+}
+
+/**
+ * Gets the moveable attribute. A column that is
+ * not moveable cannot be reordered by the user 
+ * by dragging the header but may be reordered 
+ * by the programmer.
+ *
+ * @return the moveable attribute
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Tree#getColumnOrder()
+ * @see Tree#setColumnOrder(int[])
+ * @see TreeColumn#setMoveable(boolean)
+ * @see SWT#Move
+ * 
+ * @since 3.2
+ */
+public boolean getMoveable () {
+	checkWidget ();
+	return moveable;
+}
+
+String getNameText () {
+	return getText ();
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>Tree</code>.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Tree getParent () {
+	checkWidget ();
+	return parent;
+}
+
+/**
+ * Gets the resizable attribute. A column that is
+ * not resizable cannot be dragged by the user but
+ * may be resized by the programmer.
+ *
+ * @return the resizable attribute
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getResizable () {
+	checkWidget ();
+	return resizable;
+}
+
+/**
+ * Returns the receiver's tool tip text, or null if it has
+ * not been set.
+ *
+ * @return the receiver's tool tip text
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public String getToolTipText () {
+	checkWidget ();
+	int strPtr = OS.FrameworkElement_ToolTip (headerHandle);
+	String string = createJavaString (strPtr);
+	OS.GCHandle_Free (strPtr);
+	return string;
+}
+
+/**
+ * Gets the width of the receiver.
+ *
+ * @return the width
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getWidth () {
+	checkWidget ();
+	return (int) OS.GridViewColumn_ActualWidth(handle);
+}
+
+
+void HandleLoaded (int source, int e) {
+	updateImage ();
+	updateText ();	
+}
+
+void hookEvents() {
+	super.hookEvents ();
+	int handler = OS.gcnew_RoutedEventHandler (jniRef, "HandleLoaded");
+	if (handler == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.FrameworkElement_Loaded (headerHandle, handler);
+	OS.GCHandle_Free (handler);
+}
+
+/**
+ * Causes the receiver to be resized to its preferred size.
+ * For a composite, this involves computing the preferred size
+ * from its layout, if there is one.
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ */
+public void pack () {
+	checkWidget ();
+	int index = parent.indexOf (this);
+	if (index == -1) return;
+	int widthProperty = OS.GridViewColumn_WidthProperty ();
+	OS.DependencyObject_ClearValue (handle, widthProperty);
+	OS.GCHandle_Free (widthProperty);
+}
+
+void register() {
+	display.addWidget (headerHandle, this);
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (handle != 0) OS.GCHandle_Free (handle);
+	handle = 0;
+	OS.GCHandle_Free (headerHandle);
+	headerHandle = 0;
+	parent = null;
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	if (stringPtr != 0) OS.GCHandle_Free (stringPtr);
+	stringPtr = 0;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is moved or resized.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see ControlListener
+ * @see #addControlListener
+ */
+public void removeControlListener (ControlListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Move, listener);
+	eventTable.unhook (SWT.Resize, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected by the user.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener (SelectionListener listener) {
+	checkWidget ();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Selection, listener);
+	eventTable.unhook (SWT.DefaultSelection,listener);	
+}
+
+/**
+ * Controls how text and images will be displayed in the receiver.
+ * The argument should be one of <code>LEFT</code>, <code>RIGHT</code>
+ * or <code>CENTER</code>.
+ * <p>
+ * Note that due to a restriction on some platforms, the first column
+ * is always left aligned.
+ * </p>
+ * @param alignment the new alignment 
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setAlignment (int alignment) {
+	checkWidget ();
+	if ((alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER)) == 0) return;
+	int index = parent.indexOf (this);
+	if (index == -1 || index == 0) return;
+	style &= ~(SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+	style |= alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+	//TODO
+}
+
+public void setImage (Image image) {
+	checkWidget ();
+	super.setImage (image);
+	updateImage ();
+}
+
+/**
+ * Sets the moveable attribute.  A column that is
+ * moveable can be reordered by the user by dragging
+ * the header. A column that is not moveable cannot be 
+ * dragged by the user but may be reordered 
+ * by the programmer.
+ *
+ * @param moveable the moveable attribute
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see Tree#setColumnOrder(int[])
+ * @see Tree#getColumnOrder()
+ * @see TreeColumn#getMoveable()
+ * @see SWT#Move
+ * 
+ * @since 3.2
+ */
+public void setMoveable (boolean moveable) {
+	checkWidget ();
+	this.moveable = moveable;
+}
+
+/**
+ * Sets the resizable attribute.  A column that is
+ * not resizable cannot be dragged by the user but
+ * may be resized by the programmer.
+ *
+ * @param resizable the resize attribute
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setResizable (boolean resizable) {
+	checkWidget ();
+	this.resizable = resizable;
+}
+
+void setSortDirection (int direction) {
+	//TODO
+}
+
+public void setText (String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (string.equals (text)) return;
+	text = string;
+	updateText ();
+}
+
+/**
+ * Sets the receiver's tool tip text to the argument, which
+ * may be null indicating that the default tool tip for the 
+ * control will be shown. For a control that has a default
+ * tool tip, such as the Tree control on Windows, setting
+ * the tool tip text to an empty string replaces the default,
+ * causing no tool tip text to be shown.
+ * <p>
+ * The mnemonic indicator (character '&amp;') is not displayed in a tool tip.
+ * To display a single '&amp;' in the tool tip, the character '&amp;' can be 
+ * escaped by doubling it in the string.
+ * </p>
+ * 
+ * @param string the new tool tip text (or null)
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.2
+ */
+public void setToolTipText (String string) {
+	checkWidget();
+	if (string != null && string.length() == 0) string = null;
+	int strPtr = createDotNetString (string, false);
+	OS.FrameworkElement_ToolTip (headerHandle, strPtr);
+	OS.GCHandle_Free (strPtr);
+}
+
+/**
+ * Sets the width of the receiver.
+ *
+ * @param width the new width
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setWidth (int width) {
+	checkWidget ();
+	if (width < 0) return;
+	OS.GridViewColumn_Width (handle, width);
+}
+
+void updateImage() {
+	int part = findPart (Tree.IMAGE_PART_NAME);
+	if (part == 0) return;
+	OS.Image_Source (part, image == null ? 0 : image.handle);
+	OS.GCHandle_Free (part);
+}
+
+void updateText () {
+	int part = findPart (Tree.TEXT_PART_NAME);
+	if (part == 0) return;
+	int str = createDotNetString (text, false);
+	OS.TextBlock_Text (part, str);
+	OS.GCHandle_Free (str);
+	OS.GCHandle_Free (part);
+}
+
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TreeItem.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TreeItem.java
new file mode 100644
index 0000000..24e2c25
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/TreeItem.java
@@ -0,0 +1,1638 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2009 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.widgets;
+
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+
+/**
+ * Instances of this class represent a selectable user interface object
+ * that represents a hierarchy of tree items in a tree widget.
+ * 
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>(none)</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is <em>not</em> intended to be subclassed.
+ * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#tree">Tree, TreeItem, TreeColumn snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+
+public class TreeItem extends Item {
+	Tree parent;
+	int contentHandle;
+	int itemCount;
+	Image [] images;
+	String [] strings;
+	Color [] cellBackground, cellForeground;
+	Font [] cellFont;
+	boolean checked, grayed, cached, ignoreNotify;
+	Color background, foreground;
+	Font font;
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Tree</code> or a <code>TreeItem</code>)
+ * and a style value describing its behavior and appearance.
+ * The item is added to the end of the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a tree control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TreeItem (Tree parent, int style) {
+	this (checkNull (parent), null, style, parent.itemCount, 0);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Tree</code> or a <code>TreeItem</code>),
+ * a style value describing its behavior and appearance, and the index
+ * at which to place it in the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a tree control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ * @param index the zero-relative index to store the receiver in its parent
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the parent (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TreeItem (Tree parent, int style, int index) {
+	this (checkNull (parent), null, style, index, 0);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Tree</code> or a <code>TreeItem</code>)
+ * and a style value describing its behavior and appearance.
+ * The item is added to the end of the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parentItem a tree control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TreeItem (TreeItem parentItem, int style) {
+	this (checkNull (parentItem).parent, parentItem, style, parentItem.itemCount, 0);
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * (which must be a <code>Tree</code> or a <code>TreeItem</code>),
+ * a style value describing its behavior and appearance, and the index
+ * at which to place it in the items maintained by its parent.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parentItem a tree control which will be the parent of the new instance (cannot be null)
+ * @param style the style of control to construct
+ * @param index the zero-relative index to store the receiver in its parent
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the parent (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see Widget#checkSubclass
+ * @see Widget#getStyle
+ */
+public TreeItem (TreeItem parentItem, int style, int index) {
+	this (checkNull (parentItem).parent, parentItem, style, index, 0);
+}
+
+TreeItem (Tree parent, TreeItem parentItem, int style, int index, int handle) {
+	super (parent, style);
+	this.parent = parent;
+	this.handle = handle;
+	if (handle == 0) {
+		parent.createItem (this, parentItem, index);
+	} else {
+		createWidget ();
+	}
+}
+
+static Tree checkNull (Tree tree) {
+	if (tree == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	return tree;
+}
+
+static TreeItem checkNull (TreeItem item) {
+	if (item == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
+	return item;
+}
+
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+void clear () {
+	strings = null;
+	images = null;
+	checked = grayed = false;
+	updateCheck ();
+	setForeground (null);
+	setBackground (null);
+	setFont (null);
+	int columns = parent.columnCount == 0 ? 1 : parent.columnCount;
+	for (int i = 0; i < columns; i++) {
+		updateText (i);
+		updateImage (i);
+		updateBackground (i);
+		updateForeground (i);
+		updateFont (i);
+	}
+	if ((parent.style & SWT.VIRTUAL) != 0) cached = false;
+	int part = findPart (0, Tree.RENDER_PANEL_NAME);
+	if (part != 0) OS.UIElement_InvalidateVisual (part);
+	OS.GCHandle_Free (part);
+}
+
+/**
+ * Clears the item at the given zero-relative index in the receiver.
+ * The text, icon and other attributes of the item are set to the default
+ * value.  If the tree was created with the <code>SWT.VIRTUAL</code> style,
+ * these attributes are requested again as needed.
+ *
+ * @param index the index of the item to clear
+ * @param all <code>true</code> if all child items of the indexed item should be
+ * cleared recursively, and <code>false</code> otherwise
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see SWT#VIRTUAL
+ * @see SWT#SetData
+ * 
+ * @since 3.2
+ */
+public void clear (int index, boolean all) {
+	checkWidget ();
+	if (index < 0 || index >= itemCount) SWT.error (SWT.ERROR_INVALID_RANGE);
+	parent.clear (handle, index, all);
+}
+
+/**
+ * Clears all the items in the receiver. The text, icon and other
+ * attributes of the items are set to their default values. If the
+ * tree was created with the <code>SWT.VIRTUAL</code> style, these
+ * attributes are requested again as needed.
+ * 
+ * @param all <code>true</code> if all child items should be cleared
+ * recursively, and <code>false</code> otherwise
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see SWT#VIRTUAL
+ * @see SWT#SetData
+ * 
+ * @since 3.2
+ */
+public void clearAll (boolean all) {
+	checkWidget ();
+	parent.clearAll (this, all);
+}
+
+void columnAdded (int index) {
+	if (parent.columnCount == 0) {
+		int headerTemplate = OS.HeaderedItemsControl_HeaderTemplateProperty ();
+		OS.DependencyObject_ClearValue (handle, headerTemplate);
+		OS.GCHandle_Free (headerTemplate);
+		int header = OS.gcnew_SWTTreeViewRowPresenter (parent.handle);
+		if (header == 0) error (SWT.ERROR_NO_HANDLES);
+		OS.GridViewRowPresenterBase_Columns (header, parent.gvColumns);
+		OS.HeaderedItemsControl_Header (handle, header);
+		OS.GCHandle_Free (header);
+	} else {
+		int newLength = parent.columnCount + 1;
+		if (strings != null) {
+			String [] temp = new String [newLength];
+			System.arraycopy (strings, 0, temp, 0, index);
+			System.arraycopy (strings, index, temp, index + 1, parent.columnCount - index);
+			strings = temp;
+		}
+		if (images != null) {
+			Image [] temp = new Image [newLength];
+			System.arraycopy (images, 0, temp, 0, index);
+			System.arraycopy (images, index, temp, index + 1, parent.columnCount - index);
+			images = temp;
+		}
+		if (cellBackground != null) {
+			Color [] temp = new Color [newLength];
+			System.arraycopy (cellBackground, 0, temp, 0, index);
+			System.arraycopy (cellBackground, index, temp, index + 1, parent.columnCount - index);
+			cellBackground = temp;
+		}
+		if (cellForeground != null) {
+			Color [] temp = new Color [newLength];
+			System.arraycopy (cellForeground, 0, temp, 0, index);
+			System.arraycopy (cellForeground, index, temp, index + 1, parent.columnCount - index);
+			cellForeground = temp;
+		}
+		if (cellFont != null) {
+			Font [] temp = new Font [newLength];
+			System.arraycopy (cellFont, 0, temp, 0, index);
+			System.arraycopy (cellFont, index, temp, index + 1, parent.columnCount - index);
+			cellFont = temp;
+		}
+	}
+	int items = OS.ItemsControl_Items (handle);
+    for (int i=0; i<itemCount; i++) {
+		TreeItem item = parent.getItem (items, i, false);
+		if (item != null) {
+			item.columnAdded (index);
+		}
+    }
+    OS.GCHandle_Free (items);
+}
+
+void columnRemoved(int index) {
+	if (parent.columnCount == 0) {
+		OS.TreeViewItem_HeaderTemplate (handle, parent.headerTemplate);
+	} else {
+		if (strings == null) {
+			String [] temp = new String [parent.columnCount];
+			System.arraycopy (strings, 0, temp, 0, index);
+			System.arraycopy (strings, index + 1, temp, index, parent.columnCount - index);
+			strings = temp;
+		}
+		if (images != null) {
+			Image [] temp = new Image [parent.columnCount];
+			System.arraycopy (images, 0, temp, 0, index);
+			System.arraycopy (images, index + 1, temp, index, parent.columnCount - index);
+			images = temp;
+		}
+		if (cellBackground != null) {
+			Color [] temp = new Color [parent.columnCount];
+			System.arraycopy (cellBackground, 0, temp, 0, index);
+			System.arraycopy (cellBackground, index + 1, temp, index, parent.columnCount - index);
+			cellBackground = temp;
+		}
+		if (cellForeground != null) {
+			Color [] temp = new Color [parent.columnCount];
+			System.arraycopy (cellForeground, 0, temp, 0, index);
+			System.arraycopy (cellForeground, index + 1, temp, index, parent.columnCount - index);
+			cellForeground = temp;
+		}
+		if (cellFont != null) {
+			Font [] temp = new Font [parent.columnCount];
+			System.arraycopy (cellFont, 0, temp, 0, index);
+			System.arraycopy (cellFont, index + 1, temp, index, parent.columnCount - index);
+			cellFont = temp;
+		}
+	}
+	int items = OS.ItemsControl_Items (handle);
+    for (int i=0; i<itemCount; i++) {
+		TreeItem item = parent.getItem (items, i, false);
+		if (item != null) {
+			item.columnRemoved (index);
+		}
+    }
+    OS.GCHandle_Free (items);
+}
+
+void createHandle () {
+	if (handle == 0) {
+		handle = OS.gcnew_TreeViewItem ();
+		if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+		if (parent.columnCount != 0) {
+			int headerHandle = OS.gcnew_SWTTreeViewRowPresenter (parent.handle);
+			if (headerHandle == 0) error (SWT.ERROR_NO_HANDLES);
+			OS.GridViewRowPresenterBase_Columns (headerHandle, parent.gvColumns);
+			OS.HeaderedItemsControl_Header (handle, headerHandle);
+			OS.GCHandle_Free (headerHandle);
+		} else {
+			OS.TreeViewItem_HeaderTemplate (handle, parent.headerTemplate);
+		}
+	}
+	OS.Control_HorizontalContentAlignment (handle, OS.HorizontalAlignment_Stretch);
+	OS.Control_VerticalContentAlignment (handle, OS.VerticalAlignment_Stretch);
+	updateCheck ();
+	fixStyle ();
+}
+
+void deregister () {
+	display.removeWidget (handle);
+}
+
+void destroyWidget () {
+	parent.destroyItem (this);
+	releaseHandle ();
+}
+
+int findContentPresenter () {
+	updateLayout (handle);
+	int controlTemplate = OS.Control_Template (handle);
+	int headerName = createDotNetString ("PART_Header", false);
+	int contentPresenter = OS.FrameworkTemplate_FindName (controlTemplate, headerName, handle);
+	OS.GCHandle_Free (headerName);
+	OS.GCHandle_Free (controlTemplate);
+	return contentPresenter;
+}
+
+int findPart (int column, String partName) {
+	if (contentHandle == 0) updateLayout (handle);
+	if (contentHandle == 0) return 0;
+	int name = createDotNetString (partName, false);
+	int result = 0;
+	if (parent.columnCount == 0) {
+		int template = OS.TreeViewItem_HeaderTemplate (handle);		
+		result = OS.FrameworkTemplate_FindName (template, name, contentHandle);
+		OS.GCHandle_Free (template);
+	} else {
+		int rowPresenter = OS.HeaderedItemsControl_Header (handle);
+		int contentPresenter = OS.VisualTreeHelper_GetChild (rowPresenter, column);
+		OS.GCHandle_Free (rowPresenter);
+		int columnHandle = OS.GridViewColumnCollection_default (parent.gvColumns, column);
+		int template = OS.GridViewColumn_CellTemplate (columnHandle);
+		OS.GCHandle_Free (columnHandle);
+		result = OS.FrameworkTemplate_FindName (template, name, contentPresenter);
+		OS.GCHandle_Free (contentPresenter);
+		OS.GCHandle_Free (template);
+	}
+	OS.GCHandle_Free (name);
+	return result;
+}
+
+void fixStyle () {
+	int itemStyle = OS.gcnew_Style ();
+	if (itemStyle == 0) error (SWT.ERROR_NO_HANDLES);
+	int setters = OS.Style_Setters (itemStyle);
+	int source = OS.gcnew_RelativeSource (OS.RelativeSourceMode_FindAncestor);
+	int treeViewType = OS.TreeView_typeid ();
+
+	/* clear the templated foreground color */
+	int property = OS.Control_ForegroundProperty ();
+	int propertyPath = createDotNetString ("Foreground", false);
+	int binding = OS.gcnew_Binding (propertyPath);
+	if (binding == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.GCHandle_Free (propertyPath);
+	OS.RelativeSource_AncestorType (source, treeViewType);
+	OS.Binding_RelativeSource (binding, source);
+	int setter = OS.gcnew_Setter (property, binding);
+	OS.GCHandle_Free (property);
+	OS.GCHandle_Free (binding);
+	OS.SetterBaseCollection_Add (setters, setter);
+	OS.GCHandle_Free (setter);
+
+	/* bind font properties to tree instead of parent item */
+	property = OS.Control_FontSizeProperty ();
+	propertyPath = createDotNetString ("FontSize", false);
+	binding = OS.gcnew_Binding (propertyPath);
+	if (binding == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.GCHandle_Free (propertyPath);
+	OS.Binding_RelativeSource (binding, source);
+	setter = OS.gcnew_Setter (property, binding);
+	OS.GCHandle_Free (property);
+	OS.GCHandle_Free (binding);
+	OS.SetterBaseCollection_Add (setters, setter);
+	OS.GCHandle_Free (setter);
+	
+	property = OS.TextBlock_FontFamilyProperty ();
+	propertyPath = createDotNetString ("FontFamily", false);
+	binding = OS.gcnew_Binding (propertyPath);
+	if (binding == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.GCHandle_Free (propertyPath);
+	OS.Binding_RelativeSource (binding, source);
+	setter = OS.gcnew_Setter (property, binding);
+	OS.GCHandle_Free (property);
+	OS.GCHandle_Free (binding);
+	OS.SetterBaseCollection_Add (setters, setter);
+	OS.GCHandle_Free (setter);
+	
+	property = OS.TextBlock_FontStretchProperty ();
+	propertyPath = createDotNetString ("FontStretch", false);
+	binding = OS.gcnew_Binding (propertyPath);
+	if (binding == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.GCHandle_Free (propertyPath);
+	OS.Binding_RelativeSource (binding, source);
+	setter = OS.gcnew_Setter (property, binding);
+	OS.GCHandle_Free (property);
+	OS.GCHandle_Free (binding);
+	OS.SetterBaseCollection_Add (setters, setter);
+	OS.GCHandle_Free (setter);
+	
+	property = OS.TextBlock_FontWeightProperty ();
+	propertyPath = createDotNetString ("FontWeight", false);
+	binding = OS.gcnew_Binding (propertyPath);
+	if (binding == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.GCHandle_Free (propertyPath);
+	OS.Binding_RelativeSource (binding, source);
+	setter = OS.gcnew_Setter (property, binding);
+	OS.GCHandle_Free (property);
+	OS.GCHandle_Free (binding);
+	OS.SetterBaseCollection_Add (setters, setter);
+	OS.GCHandle_Free (setter);
+	
+	property = OS.TextBlock_FontStyleProperty ();
+	propertyPath = createDotNetString ("FontStyle", false);
+	binding = OS.gcnew_Binding (propertyPath);
+	if (binding == 0) error (SWT.ERROR_NO_HANDLES);
+	OS.GCHandle_Free (propertyPath);
+	OS.Binding_RelativeSource (binding, source);
+	setter = OS.gcnew_Setter (property, binding);
+	OS.GCHandle_Free (property);
+	OS.GCHandle_Free (binding);
+	OS.SetterBaseCollection_Add (setters, setter);
+	OS.GCHandle_Free (setter);
+	
+	OS.FrameworkElement_Style (handle, itemStyle);
+	OS.GCHandle_Free (treeViewType);
+	OS.GCHandle_Free (source);
+	OS.GCHandle_Free (setters);
+	OS.GCHandle_Free (itemStyle);
+}
+/**
+ * Returns the receiver's background color.
+ *
+ * @return the background color
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.0
+ * 
+ */
+public Color getBackground () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	return background != null ? background : parent.getBackground ();
+}
+
+/**
+ * Returns the background color at the given column index in the receiver.
+ *
+ * @param index the column index
+ * @return the background color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public Color getBackground (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	int count = Math.max (1, parent.columnCount);
+	if (0 > index || index > count -1) return getBackground ();
+	if (cellBackground == null || cellBackground [index] == null) return getBackground ();
+	return cellBackground [index];
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location
+ * relative to its parent.
+ *
+ * @return the receiver's bounding rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Rectangle getBounds () {
+	checkWidget ();
+	return getTextBounds (0);
+}
+
+/**
+ * Returns a rectangle describing the receiver's size and location
+ * relative to its parent at a column in the tree.
+ *
+ * @param index the index that specifies the column
+ * @return the receiver's bounding column rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public Rectangle getBounds (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (index != 0 && !(0 <= index && index < parent.columnCount)) return new Rectangle (0, 0, 0, 0);
+	if (!OS.UIElement_IsVisible (handle)) return new Rectangle (0, 0, 0, 0);
+	updateLayout (handle);
+	int point = OS.gcnew_Point (0, 0);
+	int stackPanel = findPart (index, Tree.CONTENTPANEL_PART_NAME);
+	int location = OS.UIElement_TranslatePoint (stackPanel, point, parent.handle);
+	int x = (int) OS.Point_X (location);
+	int y = (int) OS.Point_Y (location);
+	int width = (int) OS.FrameworkElement_ActualWidth (stackPanel);
+	int height = (int) OS.FrameworkElement_ActualHeight (stackPanel);
+	OS.GCHandle_Free (point);
+	OS.GCHandle_Free (location);
+	OS.GCHandle_Free (stackPanel);
+	return new Rectangle (x, y, width, height);
+}
+
+/**
+ * Returns <code>true</code> if the receiver is checked,
+ * and false otherwise.  When the parent does not have
+ * the <code>CHECK style, return false.
+ * <p>
+ *
+ * @return the checked state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getChecked () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if ((parent.style & SWT.CHECK) == 0) return false;
+	return checked;
+}
+
+/**
+ * Returns <code>true</code> if the receiver is expanded,
+ * and false otherwise.
+ * <p>
+ *
+ * @return the expanded state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getExpanded () {
+	checkWidget ();
+	return OS.TreeViewItem_IsExpanded (handle);
+}
+
+/**
+ * Returns the font that the receiver will use to paint textual information for this item.
+ *
+ * @return the receiver's font
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.0
+ */
+public Font getFont () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	return font != null ? font : parent.getFont ();
+}
+
+/**
+ * Returns the font that the receiver will use to paint textual information
+ * for the specified cell in this item.
+ *
+ * @param index the column index
+ * @return the receiver's font
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.1
+ */
+public Font getFont (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	int count = Math.max (1, parent.columnCount);
+	if (0 > index || index > count -1) return getFont ();
+	if (cellFont == null || cellFont [index] == null) return getFont ();
+	return cellFont [index];
+}
+
+/**
+ * Returns the foreground color that the receiver will use to draw.
+ *
+ * @return the receiver's foreground color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.0
+ * 
+ */
+public Color getForeground () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	return foreground != null ? foreground : parent.getForeground ();
+}
+
+/**
+ * 
+ * Returns the foreground color at the given column index in the receiver.
+ *
+ * @param index the column index
+ * @return the foreground color
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public Color getForeground (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	int count = Math.max (1, parent.columnCount);
+	if (0 > index || index > count -1) return getForeground ();
+	if (cellForeground == null || cellForeground [index] == null) return getForeground ();
+	return cellForeground [index];
+}
+
+/**
+ * Returns <code>true</code> if the receiver is grayed,
+ * and false otherwise. When the parent does not have
+ * the <code>CHECK style, return false.
+ * <p>
+ *
+ * @return the grayed state of the checkbox
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public boolean getGrayed () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if ((parent.style & SWT.CHECK) == 0) return false;
+	return false;
+}
+
+/**
+ * Returns the item at the given, zero-relative index in the
+ * receiver. Throws an exception if the index is out of range.
+ *
+ * @param index the index of the item to return
+ * @return the item at the given index
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_RANGE - if the index is not between 0 and the number of elements in the list minus 1 (inclusive)</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public TreeItem getItem (int index) {
+	checkWidget ();
+	if (index < 0 || index >= itemCount) error (SWT.ERROR_INVALID_RANGE);	
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	int items = OS.ItemsControl_Items (handle);
+	TreeItem item = parent.getItem (items, index, true);
+	OS.GCHandle_Free (items);
+	return item;
+}
+
+/**
+ * Returns the number of items contained in the receiver
+ * that are direct item children of the receiver.
+ *
+ * @return the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getItemCount () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	return itemCount;
+}
+
+/**
+ * Returns a (possibly empty) array of <code>TreeItem</code>s which
+ * are the direct item children of the receiver.
+ * <p>
+ * Note: This is not the actual structure used by the receiver
+ * to maintain its list of items, so modifying the array will
+ * not affect the receiver. 
+ * </p>
+ *
+ * @return the receiver's items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TreeItem [] getItems () {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	int items = OS.ItemsControl_Items (handle);
+	TreeItem [] result = new TreeItem [itemCount];
+	for (int i = 0; i < result.length; i++) {
+      	result [i] = parent.getItem (items, i, true);
+	}
+	OS.GCHandle_Free (items);
+	return result;
+}
+
+public Image getImage () {
+	checkWidget ();
+	return getImage (0);
+}
+
+/**
+ * Returns the image stored at the given column index in the receiver,
+ * or null if the image has not been set or if the column does not exist.
+ *
+ * @param index the column index
+ * @return the image stored at the given column index in the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public Image getImage (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (images != null) {
+		if (0 <= index && index < images.length) return images [index];
+	}
+	return null;
+}
+
+/**
+ * Returns a rectangle describing the size and location
+ * relative to its parent of an image at a column in the
+ * tree.
+ *
+ * @param index the index that specifies the column
+ * @return the receiver's bounding image rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public Rectangle getImageBounds (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (index != 0 && !(0 <= index && index < parent.columnCount)) return new Rectangle (0, 0, 0, 0);
+	int parentHandle = parent.topHandle ();
+	int part = findPart (index, Tree.IMAGE_PART_NAME);
+	int point = OS.gcnew_Point (0, 0);
+	if (point == 0) error (SWT.ERROR_NO_HANDLES);
+	int location = OS.UIElement_TranslatePoint (part, point, parentHandle);
+	int x = (int) OS.Point_X (location);
+	int y = (int) OS.Point_Y (location);
+	OS.GCHandle_Free (point);
+	OS.GCHandle_Free (location);
+	int width = (int) OS.FrameworkElement_ActualWidth (part);
+	int height = (int) OS.FrameworkElement_ActualHeight (part);
+	OS.GCHandle_Free (part);
+	return new Rectangle (x, y, width, height);
+}
+
+/**
+ * Returns the receiver's parent, which must be a <code>Tree</code>.
+ *
+ * @return the receiver's parent
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public Tree getParent () {
+	checkWidget ();
+	return parent;
+}
+
+/**
+ * Returns the receiver's parent item, which must be a
+ * <code>TreeItem</code> or null when the receiver is a
+ * root.
+ *
+ * @return the receiver's parent item
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public TreeItem getParentItem () {
+	checkWidget ();
+	int parentItem = OS.FrameworkElement_Parent (handle);
+	TreeItem result = null;
+	if (!OS.Object_Equals (parentItem, parent.handle)) {
+		result = (TreeItem) display.getWidget (parentItem);
+	}
+	OS.GCHandle_Free (parentItem);
+	return result;
+}
+
+/**
+ * Returns a rectangle describing the size and location
+ * relative to its parent of the text at a column in the
+ * tree.
+ *
+ * @param index the index that specifies the column
+ * @return the receiver's bounding text rectangle
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.3
+ */
+public Rectangle getTextBounds (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (index != 0 && !(0 <= index && index < parent.columnCount)) return new Rectangle (0, 0, 0, 0);
+	int parentHandle = parent.topHandle ();
+	int point = OS.gcnew_Point (0, 0);
+	if (point == 0) error (SWT.ERROR_NO_HANDLES);
+	int textBlock = findPart (index, Tree.TEXT_PART_NAME);
+	int renderPanel = findPart (index, Table.RENDER_PANEL_NAME);
+	Rectangle result = new Rectangle (0, 0, 0, 0);
+	if (textBlock != 0 && renderPanel != 0) {
+		int location = OS.UIElement_TranslatePoint (textBlock, point, parentHandle);
+		int x = (int) OS.Point_X (location);
+		int y = (int) OS.Point_Y (location);
+		OS.GCHandle_Free (location);
+		double textWidth = OS.FrameworkElement_ActualWidth (textBlock);
+		int panelLocation = OS.UIElement_TranslatePoint (textBlock, point, renderPanel);
+		double visibleWidth = Math.max (0, OS.FrameworkElement_ActualWidth (renderPanel) - OS.Point_X (panelLocation));
+		OS.GCHandle_Free (panelLocation);
+		int width = (int) Math.min (textWidth, visibleWidth);
+		int height = (int) OS.FrameworkElement_ActualHeight (textBlock);
+		result = new Rectangle (x, y, width, height);
+	}
+	OS.GCHandle_Free (point);
+	if (textBlock != 0) OS.GCHandle_Free (textBlock);
+	if (renderPanel != 0) OS.GCHandle_Free (renderPanel);
+	return result;
+}
+
+public String getText () {
+	checkWidget ();
+	return getText (0);
+}
+
+/**
+ * Returns the text stored at the given column index in the receiver,
+ * or empty string if the text has not been set.
+ *
+ * @param index the column index
+ * @return the text stored at the given column index in the receiver
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public String getText (int index) {
+	checkWidget ();
+	if (!parent.checkData (this)) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (strings != null && 0 <= index && index < strings.length) {
+		return strings [index]!= null ? strings [index] : "";
+	}
+	return "";
+}
+
+Control getWidgetControl () {
+	return parent;
+}
+
+/**
+ * Searches the receiver's list starting at the first item
+ * (index 0) until an item is found that is equal to the 
+ * argument, and returns the index of that item. If no item
+ * is found, returns -1.
+ *
+ * @param item the search item
+ * @return the index of the item
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the item is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the item has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public int indexOf (TreeItem item) {
+	checkWidget ();
+	if (item == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (item.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT);
+	int items = OS.ItemsControl_Items (handle);
+	int index = OS.ItemCollection_IndexOf (items, item.handle);
+	OS.GCHandle_Free (items);
+	return index;
+}
+
+void register () {
+	display.addWidget (handle, this);
+}
+
+void releaseChildren (boolean destroy) {
+	int items = OS.ItemsControl_Items (handle);
+	for (int i=0; i<itemCount; i++) {
+		TreeItem item = parent.getItem (items, i, false);
+		if (item != null && !item.isDisposed ()) item.release (false);
+	}
+	OS.GCHandle_Free (items);
+	super.releaseChildren (destroy);	
+}
+
+void releaseHandle () {
+	super.releaseHandle ();
+	if (handle != 0) OS.GCHandle_Free (handle);
+	handle = 0;
+	if (contentHandle != 0) OS.GCHandle_Free (contentHandle);
+	contentHandle = 0;
+	parent = null;
+}
+
+void releaseWidget () {
+	super.releaseWidget ();
+	strings = null;
+	images = null;
+	cellBackground = cellForeground = null;
+	cellFont = null;
+}
+
+/**
+ * Removes all of the items from the receiver.
+ * <p>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.1
+ */
+public void removeAll () {
+	checkWidget ();
+	int items = OS.ItemsControl_Items (handle);
+	for (int i = 0; i < itemCount; i++) {
+		TreeItem item = parent.getItem (items, i, false);
+		if (item != null && !item.isDisposed ()) item.release (false);
+	}
+	parent.ignoreSelection = true;
+	OS.ItemCollection_Clear (items);
+	parent.ignoreSelection = false;
+	OS.GCHandle_Free (items);
+}
+
+/**
+ * Sets the receiver's background color to the color specified
+ * by the argument, or to the default system color for the item
+ * if the argument is null.
+ *
+ * @param color the new color (or null)
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.0
+ * 
+ */
+public void setBackground (Color color) {
+	checkWidget ();
+	if (color != null && color.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	if (color != null && color.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	if (color != null) {
+		int brush = OS.gcnew_SolidColorBrush (color.handle);
+		OS.Control_Background (handle, brush);
+		OS.GCHandle_Free (brush);
+	} else {
+		int property = OS.Control_BackgroundProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+	}
+	background = color;
+	if ((parent.style & SWT.VIRTUAL) != 0) cached = true;
+}
+
+/**
+ * Sets the background color at the given column index in the receiver 
+ * to the color specified by the argument, or to the default system color for the item
+ * if the argument is null.
+ *
+ * @param index the column index
+ * @param color the new color (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ * 
+ */
+public void setBackground (int index, Color color) {
+	checkWidget ();
+	if (color != null && color.isDisposed ())  SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	int count = Math.max (1, parent.getColumnCount ());
+	if (0 > index || index > count - 1) return;
+	if (cellBackground == null) cellBackground = new Color [count];
+	cellBackground [index] = color;
+	updateBackground (index);
+	if ((parent.style & SWT.VIRTUAL) != 0) cached = true;
+}
+
+/**
+ * Sets the checked state of the receiver.
+ * <p>
+ *
+ * @param checked the new checked state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setChecked (boolean checked) {
+	checkWidget ();
+	if ((parent.style & SWT.CHECK) == 0) return;
+	if (this.checked == checked) return;
+	this.checked = checked;
+	if ((parent.style & SWT.VIRTUAL) != 0) cached = true;
+	parent.ignoreSelection = true;
+	updateCheck ();
+	parent.ignoreSelection = false;
+}
+
+/**
+ * Sets the expanded state of the receiver.
+ * <p>
+ *
+ * @param expanded the new expanded state
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setExpanded (boolean expanded) {
+	checkWidget ();
+	OS.TreeViewItem_IsExpanded (handle, expanded);
+}
+
+/**
+ * Sets the font that the receiver will use to paint textual information
+ * for this item to the font specified by the argument, or to the default font
+ * for that kind of control if the argument is null.
+ *
+ * @param font the new font (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.0
+ */
+public void setFont (Font font){
+	checkWidget ();
+	if (font != null && font.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	if (font != null) {
+		int family = OS.Typeface_FontFamily (font.handle);
+		OS.Control_FontFamily (handle, family);
+		OS.GCHandle_Free (family);
+		int stretch = OS.Typeface_Stretch (font.handle);
+		OS.Control_FontStretch (handle, stretch);
+		OS.GCHandle_Free (stretch);
+		int style = OS.Typeface_Style (font.handle);
+		OS.Control_FontStyle (handle, style);
+		OS.GCHandle_Free (style);
+		int weight = OS.Typeface_Weight (font.handle);
+		OS.Control_FontWeight (handle, weight);
+		OS.GCHandle_Free (weight);
+		OS.Control_FontSize (handle, font.size);
+	} else {
+		int property = OS.Control_FontFamilyProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS. Control_FontStyleProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS.Control_FontStretchProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS.Control_FontWeightProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+		property = OS.Control_FontSizeProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+	}
+	this.font = font;
+	if ((parent.style & SWT.VIRTUAL) != 0) cached = true;
+}
+
+
+/**
+ * Sets the font that the receiver will use to paint textual information
+ * for the specified cell in this item to the font specified by the 
+ * argument, or to the default font for that kind of control if the 
+ * argument is null.
+ *
+ * @param index the column index
+ * @param font the new font (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void setFont (int index, Font font) {
+	checkWidget ();
+	if (font != null && font.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	int count = Math.max (1, parent.getColumnCount ());
+	if (0 > index || index > count - 1) return;
+	if (cellFont == null) {
+		if (font == null) return;
+		cellFont = new Font [count];
+	}
+	Font oldFont = cellFont [index];
+	if (oldFont == font) return;
+	cellFont [index] = font;
+	if (oldFont != null && oldFont.equals (font)) return;
+	updateFont (index);
+	if ((parent.style & SWT.VIRTUAL) != 0) cached = true;
+}
+
+/**
+ * Sets the receiver's foreground color to the color specified
+ * by the argument, or to the default system color for the item
+ * if the argument is null.
+ *
+ * @param color the new color (or null)
+ *
+ * @since 2.0
+ * 
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 2.0
+ * 
+ */
+public void setForeground (Color color) {
+	checkWidget ();
+	if (color != null && color.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	if (color != null) {
+		int brush = OS.gcnew_SolidColorBrush (color.handle);
+		OS.Control_Foreground (handle, brush);
+		OS.GCHandle_Free (brush);
+	} else {
+		int property = OS.Control_ForegroundProperty ();
+		OS.DependencyObject_ClearValue (handle, property);
+		OS.GCHandle_Free (property);
+	}
+	foreground = color;
+	if ((parent.style & SWT.VIRTUAL) != 0) cached = true;
+}
+
+/**
+ * Sets the foreground color at the given column index in the receiver 
+ * to the color specified by the argument, or to the default system color for the item
+ * if the argument is null.
+ *
+ * @param index the column index
+ * @param color the new color (or null)
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the argument has been disposed</li> 
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ * 
+ */
+public void setForeground (int index, Color color){
+	checkWidget ();
+	if (color != null && color.isDisposed ()) {
+		SWT.error (SWT.ERROR_INVALID_ARGUMENT);
+	}
+	int count = Math.max (1, parent.getColumnCount ());
+	if (0 > index || index > count - 1) return;
+	if (cellForeground == null) cellForeground = new Color [count];
+	cellForeground [index] = color;
+	updateForeground (index);
+	if ((parent.style & SWT.VIRTUAL) != 0) cached = true;
+}
+
+/**
+ * Sets the grayed state of the checkbox for this item.  This state change 
+ * only applies if the Tree was created with the SWT.CHECK style.
+ *
+ * @param grayed the new grayed state of the checkbox
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setGrayed (boolean grayed) {
+	checkWidget ();
+	if ((parent.style & SWT.CHECK) == 0) return;
+	if (this.grayed == grayed) return;
+	this.grayed = grayed;
+	if ((parent.style & SWT.VIRTUAL) != 0) cached = true;
+	parent.ignoreSelection = true;
+	updateCheck ();
+	parent.ignoreSelection = false;
+}
+
+/**
+ * Sets the image for multiple columns in the tree. 
+ * 
+ * @param images the array of new images
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the array of images is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if one of the images has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void setImage (Image [] images) {
+	checkWidget ();
+	if (images == null) error (SWT.ERROR_NULL_ARGUMENT);
+	for (int i=0; i<images.length; i++) {
+		setImage (i, images [i]);
+	}
+}
+
+/**
+ * Sets the receiver's image at a column.
+ *
+ * @param index the column index
+ * @param image the new image
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void setImage (int index, Image image) {
+	checkWidget ();
+	if (image != null && image.isDisposed ()) {
+		error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	int count = Math.max (1, parent.getColumnCount ());
+	if (0 > index || index > count - 1) return;
+	if (images == null) images = new Image [count];
+	images [index] = image;
+	updateImage (index);
+	if ((parent.style & SWT.VIRTUAL) != 0) cached = true;
+}
+
+public void setImage (Image image) {
+	checkWidget ();
+	setImage (0, image);
+}
+
+/**
+ * Sets the number of child items contained in the receiver.
+ *
+ * @param count the number of items
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @since 3.2
+ */
+public void setItemCount (int count) {
+	checkWidget ();
+	parent.setItemCount (this, count);
+}
+
+/**
+ * Sets the text for multiple columns in the tree. 
+ * 
+ * @param strings the array of new strings
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void setText (String [] strings) {
+	checkWidget ();
+	if (strings == null) error (SWT.ERROR_NULL_ARGUMENT);
+	for (int i=0; i<strings.length; i++) {
+		String string = strings [i];
+		if (string != null) setText (i, string);
+	}
+}
+
+/**
+ * Sets the receiver's text at a column
+ *
+ * @param index the column index
+ * @param string the new text
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the text is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @since 3.1
+ */
+public void setText (int index, String string) {
+	checkWidget ();
+	if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int count = Math.max (1, parent.getColumnCount ());
+	if (0 > index || index > count - 1) return;
+	if (strings == null) strings = new String [count];
+	if ((parent.style & SWT.VIRTUAL) != 0) cached = true;
+	strings [index] = string;
+	updateText (index);
+}
+
+public void setText (String string) {
+	checkWidget ();
+	setText (0, string);
+}
+
+void updateBackground (int index) {
+	int panel = findPart (index, Tree.CONTENTPANEL_PART_NAME);
+	if (panel != 0) {
+		if (cellBackground != null && cellBackground [index] != null) {
+			int brush = OS.gcnew_SolidColorBrush (cellBackground [index].handle);
+			OS.Panel_Background (panel, brush);
+			OS.GCHandle_Free (brush);
+		} else {
+			int property = OS.Panel_BackgroundProperty ();
+			OS.DependencyObject_ClearValue (panel, property);
+			OS.GCHandle_Free (property);
+		}
+		OS.GCHandle_Free (panel);
+	}
+}
+
+void updateCheck () {
+	if ((parent.style & SWT.CHECK) == 0) return;
+	int checkBox = findPart (0, Tree.CHECKBOX_PART_NAME);
+	if (checkBox != 0) {
+		parent.ignoreSelection = true;
+		if (!grayed) {
+			OS.ToggleButton_IsChecked (checkBox, checked);
+		} else {
+			if (checked) 
+				OS.ToggleButton_IsCheckedNullSetter (checkBox);
+		}
+		parent.ignoreSelection = false;
+		OS.GCHandle_Free (checkBox);
+	}
+}
+
+void updateFont (int index) {
+	if (cellFont == null) return;
+	int textBlock = findPart (index, Tree.TEXT_PART_NAME);
+	if (textBlock != 0) {
+		Font font = cellFont != null ? cellFont [index] : null;
+		if (font != null) {
+			int family = OS.Typeface_FontFamily (font.handle);
+			OS.TextBlock_FontFamily (textBlock, family);
+			OS.GCHandle_Free (family);
+			int stretch = OS.Typeface_Stretch (font.handle);
+			OS.TextBlock_FontStretch (textBlock, stretch);
+			OS.GCHandle_Free (stretch);
+			int style = OS.Typeface_Style (font.handle);
+			OS.TextBlock_FontStyle (textBlock, style);
+			OS.GCHandle_Free (style);
+			int weight = OS.Typeface_Weight (font.handle);
+			OS.TextBlock_FontWeight (textBlock, weight);
+			OS.GCHandle_Free (weight);
+			OS.TextBlock_FontSize (textBlock, font.size);
+		} else {
+			int property = OS.TextBlock_FontFamilyProperty ();
+			OS.DependencyObject_ClearValue (textBlock, property);
+			OS.GCHandle_Free (property);
+			property = OS.TextBlock_FontSizeProperty ();
+			OS.DependencyObject_ClearValue (textBlock, property);
+			OS.GCHandle_Free (property);
+			property = OS.TextBlock_FontStretchProperty ();
+			OS.DependencyObject_ClearValue (textBlock, property);
+			OS.GCHandle_Free (property);
+			property = OS.TextBlock_FontWeightProperty ();
+			OS.DependencyObject_ClearValue (textBlock, property);
+			OS.GCHandle_Free (property);
+			property = OS.TextBlock_FontStyleProperty ();
+			OS.DependencyObject_ClearValue (textBlock, property);
+			OS.GCHandle_Free (property);
+		}
+		OS.GCHandle_Free (textBlock);
+	}
+}
+
+void updateForeground (int index) {
+	int textBlock = findPart (index, Tree.TEXT_PART_NAME);
+	if (textBlock != 0) {
+		if (cellForeground != null && cellForeground [index] != null) {
+			int brush = OS.gcnew_SolidColorBrush (cellForeground [index].handle);
+			OS.TextBlock_Foreground (textBlock, brush);
+			OS.GCHandle_Free (brush);
+		} else {
+			int property = OS.Control_ForegroundProperty ();
+			OS.DependencyObject_ClearValue (textBlock, property);
+			OS.GCHandle_Free (property);
+		}
+		OS.GCHandle_Free (textBlock);
+	}
+}
+
+void updateImage (int index) {
+	if (images == null) return;
+	int img = findPart (index, Tree.IMAGE_PART_NAME);
+	if (img != 0) {
+		int src = 0;
+		if (images != null) src = images [index] != null ? images [index].handle : 0;
+		OS.Image_Source (img, src);
+		OS.GCHandle_Free (img);
+	}
+}
+
+void updateText (int index) {
+	int textBlock = findPart (index, Tree.TEXT_PART_NAME);
+	if (textBlock != 0) {
+		if (strings != null && strings [index] != null) {
+			int strPtr = createDotNetString (strings [index], false);
+			OS.TextBlock_Text (textBlock, strPtr);
+			OS.GCHandle_Free (strPtr);
+		} else {
+			int property = OS.TextBlock_TextProperty ();
+			OS.DependencyObject_ClearValue (textBlock, property);
+			OS.GCHandle_Free (property);
+		}
+		OS.GCHandle_Free (textBlock);
+	}
+}
+}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Widget.java b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Widget.java
new file mode 100644
index 0000000..1ef18e0
--- /dev/null
+++ b/bundles/org.eclipse.swt/Eclipse SWT/wpf/org/eclipse/swt/widgets/Widget.java
@@ -0,0 +1,1478 @@
+/*******************************************************************************
+ * 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.widgets;
+
+
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.wpf.*;
+import org.eclipse.swt.internal.win32.*;
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+
+/**
+ * This class is the abstract superclass of all user interface objects.  
+ * Widgets are created, disposed and issue notification to listeners
+ * when events occur which affect them.
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>(none)</dd>
+ * <dt><b>Events:</b></dt>
+ * <dd>Dispose</dd>
+ * </dl>
+ * <p>
+ * IMPORTANT: This class is intended to be subclassed <em>only</em>
+ * within the SWT implementation. However, it has not been marked
+ * final to allow those outside of the SWT development team to implement
+ * patched versions of the class in order to get around specific
+ * limitations in advance of when those limitations can be addressed
+ * by the team.  Any class built using subclassing to access the internals
+ * of this class will likely fail to compile or run between releases and
+ * may be strongly platform specific. Subclassing should not be attempted
+ * without an intimate and detailed understanding of the workings of the
+ * hierarchy. No support is provided for user-written classes which are
+ * implemented as subclasses of this class.
+ * </p>
+ *
+ * @see #checkSubclass
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
+ */
+
+public abstract class Widget {
+	/**
+	 * the handle to the OS resource 
+	 * (Warning: This field is platform dependent)
+	 * <p>
+	 * <b>IMPORTANT:</b> This field is <em>not</em> part of the SWT
+	 * public API. It is marked public only so that it can be shared
+	 * within the packages provided by SWT. It is not available on all
+	 * platforms and should never be accessed from application code.
+	 * </p>
+	 */
+	public int handle;
+	int jniRef;
+	int style, state;
+	Display display;
+	EventTable eventTable;
+	Object data;
+
+	/* Global state flags */
+	static final int DISPOSED		= 1<<0;
+	static final int CANVAS			= 1<<1;
+	static final int KEYED_DATA		= 1<<2;
+	static final int DISABLED		= 1<<3;
+	static final int HIDDEN			= 1<<4;
+	
+	/* A layout was requested on this widget */
+	static final int LAYOUT_NEEDED	= 1<<5;
+	
+	/* The preferred size of a child has changed */
+	static final int LAYOUT_CHANGED = 1<<6;
+	
+	/* A layout was requested in this widget hierachy */
+	static final int LAYOUT_CHILD = 1<<7;
+
+	/* Background flags */
+	static final int THEME_BACKGROUND = 1<<8;
+	static final int DRAW_BACKGROUND = 1<<9;
+	static final int PARENT_BACKGROUND = 1<<10;
+	
+	/* Dispose and release flags */
+	static final int RELEASED		= 1<<11;
+	static final int DISPOSE_SENT	= 1<<12;
+	
+	static final int MOVED		= 1<<13;
+	static final int RESIZED	= 1<<14;
+	
+	/* DragDetect */
+	static final int DRAG_DETECT	= 1<<15;
+	
+	/* Default size for widgets */
+	static final int DEFAULT_WIDTH	= 64;
+	static final int DEFAULT_HEIGHT	= 64;
+
+
+	static final int CLICK = 1;
+	
+/**
+ * Prevents uninitialized instances from being created outside the package.
+ */
+Widget () {
+}
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a widget which will be the parent of the new instance (cannot be null)
+ * @param style the style of widget to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parent is disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ *
+ * @see SWT
+ * @see #checkSubclass
+ * @see #getStyle
+ */
+public Widget (Widget parent, int style) {
+	checkSubclass ();
+	checkParent (parent);
+	this.style = style;
+	display = parent.display;
+}
+
+void _addListener (int eventType, Listener listener) {
+	if (eventTable == null) eventTable = new EventTable ();
+	eventTable.hook (eventType, listener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when an event of the given type occurs. When the
+ * event does occur in the widget, the listener is notified by
+ * sending it the <code>handleEvent()</code> message. The event
+ * type is one of the event constants defined in class <code>SWT</code>.
+ *
+ * @param eventType the type of event to listen for
+ * @param listener the listener which should be notified when the event occurs
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Listener
+ * @see SWT
+ * @see #getListeners(int)
+ * @see #removeListener(int, Listener)
+ * @see #notifyListeners
+ */
+public void addListener (int eventType, Listener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	_addListener (eventType, listener);
+}
+
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the widget is disposed. When the widget is
+ * disposed, the listener is notified by sending it the
+ * <code>widgetDisposed()</code> message.
+ *
+ * @param listener the listener which should be notified when the receiver is disposed
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see DisposeListener
+ * @see #removeDisposeListener
+ */
+public void addDisposeListener (DisposeListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	TypedListener typedListener = new TypedListener (listener);
+	addListener (SWT.Dispose, typedListener);
+}
+
+void addWidget () {
+}
+
+/**
+ * Returns a style with exactly one style bit set out of
+ * the specified set of exclusive style bits. All other
+ * possible bits are cleared when the first matching bit
+ * is found. Bits that are not part of the possible set
+ * are untouched.
+ *
+ * @param style the original style bits
+ * @param int0 the 0th possible style bit
+ * @param int1 the 1st possible style bit
+ * @param int2 the 2nd possible style bit
+ * @param int3 the 3rd possible style bit
+ * @param int4 the 4th possible style bit
+ * @param int5 the 5th possible style bit
+ *
+ * @return the new style bits
+ */
+static int checkBits (int style, int int0, int int1, int int2, int int3, int int4, int int5) {
+	int mask = int0 | int1 | int2 | int3 | int4 | int5;
+	if ((style & mask) == 0) style |= int0;
+	if ((style & int0) != 0) style = (style & ~mask) | int0;
+	if ((style & int1) != 0) style = (style & ~mask) | int1;
+	if ((style & int2) != 0) style = (style & ~mask) | int2;
+	if ((style & int3) != 0) style = (style & ~mask) | int3;
+	if ((style & int4) != 0) style = (style & ~mask) | int4;
+	if ((style & int5) != 0) style = (style & ~mask) | int5;
+	return style;
+}
+
+boolean checkEvent (int e) {
+	if (isDisposed ()) return false;
+	int routedEventType =  OS.RoutedEventArgs_typeid ();
+	int source = 0;
+	if (OS.Type_IsInstanceOfType (routedEventType, e)) {
+		source = OS.RoutedEventArgs_OriginalSource (e);
+	}
+	OS.GCHandle_Free (routedEventType);
+	if (source == 0) return true;
+	if (OS.Object_Equals (source, handle)) {
+		OS.GCHandle_Free (source);
+		return true;
+	}
+	Widget widget = display.getWidget (source);
+	OS.GCHandle_Free (source);
+	if (widget == this) return true;
+	if (hasItems ()) {
+		if (this == widget.getWidgetControl ()) return true;
+	} 
+	return false;
+}
+
+void checkOrientation (Widget parent) {
+	style &= ~SWT.MIRRORED;
+	if ((style & (SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT)) == 0) {
+		if (parent != null) {
+			if ((parent.style & SWT.LEFT_TO_RIGHT) != 0) style |= SWT.LEFT_TO_RIGHT;
+			if ((parent.style & SWT.RIGHT_TO_LEFT) != 0) style |= SWT.RIGHT_TO_LEFT;
+		}
+	}
+	style = checkBits (style, SWT.LEFT_TO_RIGHT, SWT.RIGHT_TO_LEFT, 0, 0, 0, 0);
+}
+
+void checkOpened () {
+	/* Do nothing */
+}
+
+/**
+ * Throws an exception if the specified widget can not be
+ * used as a parent for the receiver.
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the parent is disposed</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ * </ul>
+ */
+void checkParent (Widget parent) {
+	if (parent == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (parent.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT);
+	parent.checkWidget ();
+	parent.checkOpened ();
+}
+
+/**
+ * Checks that this class can be subclassed.
+ * <p>
+ * The SWT class library is intended to be subclassed 
+ * only at specific, controlled points (most notably, 
+ * <code>Composite</code> and <code>Canvas</code> when
+ * implementing new widgets). This method enforces this
+ * rule unless it is overridden.
+ * </p><p>
+ * <em>IMPORTANT:</em> By providing an implementation of this
+ * method that allows a subclass of a class which does not 
+ * normally allow subclassing to be created, the implementer
+ * agrees to be fully responsible for the fact that any such
+ * subclass will likely fail between SWT releases and will be
+ * strongly platform specific. No support is provided for
+ * user-written classes which are implemented in this fashion.
+ * </p><p>
+ * The ability to subclass outside of the allowed SWT classes
+ * is intended purely to enable those not on the SWT development
+ * team to implement patches in order to get around specific
+ * limitations in advance of when those limitations can be
+ * addressed by the team. Subclassing should not be attempted
+ * without an intimate and detailed understanding of the hierarchy.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+ * </ul>
+ */
+protected void checkSubclass () {
+	if (!isValidSubclass ()) error (SWT.ERROR_INVALID_SUBCLASS);
+}
+
+/**
+ * Throws an <code>SWTException</code> if the receiver can not
+ * be accessed by the caller. This may include both checks on
+ * the state of the receiver and more generally on the entire
+ * execution context. This method <em>should</em> be called by
+ * widget implementors to enforce the standard SWT invariants.
+ * <p>
+ * Currently, it is an error to invoke any method (other than
+ * <code>isDisposed()</code>) on a widget that has had its 
+ * <code>dispose()</code> method called. It is also an error
+ * to call widget methods from any thread that is different
+ * from the thread that created the widget.
+ * </p><p>
+ * In future releases of SWT, there may be more or fewer error
+ * checks and exceptions may be thrown for different reasons.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+protected void checkWidget () {
+	Display display = this.display;
+	if (display == null) error (SWT.ERROR_WIDGET_DISPOSED);
+	if (display.thread != Thread.currentThread ()) error (SWT.ERROR_THREAD_INVALID_ACCESS);
+	if ((state & DISPOSED) != 0) error (SWT.ERROR_WIDGET_DISPOSED);
+}
+
+void createHandle () {
+}
+
+int createDotNetString (String string, boolean fixMnemonic) {
+	if (string == null) return 0;
+	char [] buffer;
+	if (fixMnemonic) {
+		buffer = fixMnemonic (string); 
+	} else {
+		int length = string.length ();
+		buffer = new char [length + 1];
+		string.getChars (0, length, buffer, 0);
+	}
+	int ptr = OS.gcnew_String (buffer);
+	if (ptr == 0) error (SWT.ERROR_NO_HANDLES);
+	return ptr;
+}
+
+static String createJavaString (int ptr) {
+	int charArray = OS.String_ToCharArray (ptr);
+	char[] chars = new char[OS.String_Length (ptr)];
+	OS.memcpy (chars, charArray, chars.length * 2);
+	OS.GCHandle_Free (charArray);
+	return new String (chars);
+}
+
+void createWidget () {
+	jniRef = OS.NewGlobalRef (this);
+	if (jniRef == 0) error (SWT.ERROR_NO_HANDLES);
+	createHandle ();
+	addWidget ();
+	register ();
+	hookEvents ();
+	setNameScope ();
+}
+
+void deregister () {
+}
+
+/**
+ * Destroys the widget in the operating system and releases
+ * the widget's handle.  If the widget does not have a handle,
+ * this method may hide the widget, mark the widget as destroyed
+ * or do nothing, depending on the widget.
+ * <p>
+ * When a widget is destroyed in the operating system, its
+ * descendents are also destroyed by the operating system.
+ * This means that it is only necessary to call <code>destroyWidget</code>
+ * on the root of the widget tree.
+ * </p><p>
+ * This method is called after <code>releaseWidget()</code>.
+ * </p><p>
+ * See also <code>releaseChild()</code>, <code>releaseWidget()</code>
+ * and <code>releaseHandle()</code>.
+ * </p>
+ * 
+ * @see #dispose
+ */
+void destroyWidget () {
+	releaseHandle ();
+}
+
+/**
+ * Disposes of the operating system resources associated with
+ * the receiver and all its descendants. After this method has
+ * been invoked, the receiver and all descendants will answer
+ * <code>true</code> when sent the message <code>isDisposed()</code>.
+ * Any internal connections between the widgets in the tree will
+ * have been removed to facilitate garbage collection.
+ * <p>
+ * NOTE: This method is not called recursively on the descendants
+ * of the receiver. This means that, widget implementers can not
+ * detect when a widget is being disposed of by re-implementing
+ * this method, but should instead listen for the <code>Dispose</code>
+ * event.
+ * </p>
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #addDisposeListener
+ * @see #removeDisposeListener
+ * @see #checkWidget
+ */
+public void dispose () {
+	/*
+	* Note:  It is valid to attempt to dispose a widget
+	* more than once.  If this happens, fail silently.
+	*/
+	if (isDisposed ()) return;
+	if (!isValidThread ()) error (SWT.ERROR_THREAD_INVALID_ACCESS);
+	release (true);
+}
+
+boolean dragOverride () {
+	return false;
+}
+
+static void dumpObjectType (int object) {
+	int objectType = OS.Object_GetType(object);
+	int type = OS.Type_FullName(objectType);
+	String typeName = createJavaString(type);
+	OS.GCHandle_Free(objectType);
+	OS.GCHandle_Free(type);
+	System.out.println(typeName);
+}
+
+void dumpVisualTree (int visual, int depth) {
+	for (int i = 0; i < depth; i++) System.out.print ("\t");
+	int type = OS.Object_GetType (visual);
+	int typeNamePtr = OS.Type_FullName (type);
+	OS.GCHandle_Free (type);
+	String typeName = createJavaString (typeNamePtr);
+	OS.GCHandle_Free(typeNamePtr);
+	int name = OS.FrameworkElement_Name (visual);
+	double width = OS.FrameworkElement_Width (visual);
+	double actualWidth = OS.FrameworkElement_ActualWidth (visual);
+	double height = OS.FrameworkElement_Height (visual);
+	double actualHeight = OS.FrameworkElement_ActualHeight (visual);
+	String widgetName = createJavaString (name);
+	OS.GCHandle_Free (name);
+	System.out.println(typeName + " ["+widgetName+ " width=" + width + " actualWidth=" + actualWidth + " height=" + height + " actualHeight=" + actualHeight+"]");
+	int count = OS.VisualTreeHelper_GetChildrenCount(visual);
+	for (int i = 0; i < count; i++) {
+		int child = OS.VisualTreeHelper_GetChild (visual, i);
+		dumpVisualTree(child, depth+1);
+		OS.GCHandle_Free(child);
+	}	
+}
+/**
+ * Does whatever widget specific cleanup is required, and then
+ * uses the code in <code>SWTError.error</code> to handle the error.
+ *
+ * @param code the descriptive error code
+ *
+ * @see SWT#error(int)
+ */
+void error (int code) {
+	SWT.error(code);
+}
+
+boolean filters (int eventType) {
+	return display.filters (eventType);
+}
+
+char [] fixMnemonic (String string) {
+	int length = string.length ();
+	char [] text = new char [length];
+	string.getChars (0, length, text, 0);
+	int i = 0, j = 0;
+	char [] result = new char [length * 2 + 1];
+	while (i < length) {
+		switch (text [i]) {
+			case '&':
+				if (i + 1 < length && text [i + 1] == '&') {
+					i++; 
+				} else {
+					text [i] = '_';
+				}
+				break;
+			case '_':
+				result [j++] = '_';
+				break;
+		}
+		result [j++] = text [i++];
+	}
+	return result;
+}
+
+/**
+ * Returns the application defined widget data associated
+ * with the receiver, or null if it has not been set. The
+ * <em>widget data</em> is a single, unnamed field that is
+ * stored with every widget. 
+ * <p>
+ * Applications may put arbitrary objects in this field. If
+ * the object stored in the widget data needs to be notified
+ * when the widget is disposed of, it is the application's
+ * responsibility to hook the Dispose event on the widget and
+ * do so.
+ * </p>
+ *
+ * @return the widget data
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - when the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - when called from the wrong thread</li>
+ * </ul>
+ *
+ * @see #setData(Object)
+ */
+public Object getData () {
+	checkWidget();
+	return (state & KEYED_DATA) != 0 ? ((Object []) data) [0] : data;
+}
+
+/**
+ * Returns the application defined property of the receiver
+ * with the specified name, or null if it has not been set.
+ * <p>
+ * Applications may have associated arbitrary objects with the
+ * receiver in this fashion. If the objects stored in the
+ * properties need to be notified when the widget is disposed
+ * of, it is the application's responsibility to hook the
+ * Dispose event on the widget and do so.
+ * </p>
+ *
+ * @param	key the name of the property
+ * @return the value of the property or null if it has not been set
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the key is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #setData(String, Object)
+ */
+public Object getData (String key) {
+	checkWidget();
+	if (key == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if ((state & KEYED_DATA) != 0) {
+		Object [] table = (Object []) data;
+		for (int i=1; i<table.length; i+=2) {
+			if (key.equals (table [i])) return table [i+1];
+		}
+	}
+	return null;
+}
+
+/**
+ * Returns the <code>Display</code> that is associated with
+ * the receiver.
+ * <p>
+ * A widget's display is either provided when it is created
+ * (for example, top level <code>Shell</code>s) or is the
+ * same as its parent's display.
+ * </p>
+ *
+ * @return the receiver's display
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ * </ul>
+ */
+public Display getDisplay () {
+	Display display = this.display;
+	if (display == null) error (SWT.ERROR_WIDGET_DISPOSED);
+	return display;
+}
+
+/**
+ * Returns an array of listeners who will be notified when an event 
+ * of the given type occurs. The event type is one of the event constants 
+ * defined in class <code>SWT</code>.
+ *
+ * @param eventType the type of event to listen for
+ * @return an array of listeners that will be notified when the event occurs
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Listener
+ * @see SWT
+ * @see #addListener(int, Listener)
+ * @see #removeListener(int, Listener)
+ * @see #notifyListeners
+ * 
+ * @since 3.4
+ */
+public Listener[] getListeners (int eventType) {
+	checkWidget();
+	if (eventTable == null) return new Listener[0];
+	return eventTable.getListeners(eventType);
+}
+
+Menu getMenu () {
+	return null;
+}
+
+/**
+ * Returns the name of the widget. This is the name of
+ * the class without the package name.
+ *
+ * @return the name of the widget
+ */
+String getName () {
+	String string = getClass ().getName ();
+	int index = string.lastIndexOf ('.');
+	if (index == -1) return string;
+	return string.substring (index + 1, string.length ());
+}
+
+/*
+ * Returns a short printable representation for the contents
+ * of a widget. For example, a button may answer the label
+ * text. This is used by <code>toString</code> to provide a
+ * more meaningful description of the widget.
+ *
+ * @return the contents string for the widget
+ *
+ * @see #toString
+ */
+String getNameText () {
+	return ""; //$NON-NLS-1$
+}
+
+/**
+ * Returns the receiver's style information.
+ * <p>
+ * Note that the value which is returned by this method <em>may
+ * not match</em> the value which was provided to the constructor
+ * when the receiver was created. This can occur when the underlying
+ * operating system does not support a particular combination of
+ * requested styles. For example, if the platform widget used to
+ * implement a particular SWT widget always has scroll bars, the
+ * result of calling this method would always have the
+ * <code>SWT.H_SCROLL</code> and <code>SWT.V_SCROLL</code> bits set.
+ * </p>
+ *
+ * @return the style bits
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public int getStyle () {
+	checkWidget();
+	return style;
+}
+
+Control getWidgetControl () {
+	return null;
+}
+
+boolean hasItems () {
+	return false;
+}
+
+void hookEvents () {
+}
+
+/*
+ * Returns <code>true</code> if the specified eventType is
+ * hooked, and <code>false</code> otherwise. Implementations
+ * of SWT can avoid creating objects and sending events
+ * when an event happens in the operating system but
+ * there are no listeners hooked for the event.
+ *
+ * @param eventType the event to be checked
+ *
+ * @return <code>true</code> when the eventType is hooked and <code>false</code> otherwise
+ *
+ * @see #isListening
+ */
+boolean hooks (int eventType) {
+	if (eventTable == null) return false;
+	return eventTable.hooks (eventType);
+}
+
+/**
+ * Returns <code>true</code> if the widget has been disposed,
+ * and <code>false</code> otherwise.
+ * <p>
+ * This method gets the dispose state for the widget.
+ * When a widget has been disposed, it is an error to
+ * invoke any other method using the widget.
+ * </p>
+ *
+ * @return <code>true</code> when the widget is disposed and <code>false</code> otherwise
+ */
+public boolean isDisposed () {
+	return (state & DISPOSED) != 0;
+}
+
+/**
+ * Returns <code>true</code> if there are any listeners
+ * for the specified event type associated with the receiver,
+ * and <code>false</code> otherwise. The event type is one of
+ * the event constants defined in class <code>SWT</code>.
+ *
+ * @param eventType the type of event
+ * @return true if the event is hooked
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SWT
+ */
+public boolean isListening (int eventType) {
+	checkWidget();
+	return hooks (eventType);
+}
+
+/*
+ * Returns <code>true</code> when subclassing is
+ * allowed and <code>false</code> otherwise
+ *
+ * @return <code>true</code> when subclassing is allowed and <code>false</code> otherwise
+ */
+boolean isValidSubclass () {
+	return Display.isValidClass (getClass ());
+}
+
+/*
+ * Returns <code>true</code> when the current thread is
+ * the thread that created the widget and <code>false</code>
+ * otherwise.
+ *
+ * @return <code>true</code> when the current thread is the thread that created the widget and <code>false</code> otherwise
+ */
+boolean isValidThread () {
+	return getDisplay ().isValidThread ();
+}
+
+void mapEvent (int hwnd, Event event) {
+}
+
+boolean mnemonicMatch (int accessText, char key) {
+	if (accessText == 0) return false;
+	char mnemonic = OS.AccessText_AccessKey (accessText);
+	return Character.toLowerCase (key) == Character.toLowerCase (mnemonic);
+}
+
+/**
+ * Notifies all of the receiver's listeners for events
+ * of the given type that one such event has occurred by
+ * invoking their <code>handleEvent()</code> method.  The
+ * event type is one of the event constants defined in class
+ * <code>SWT</code>.
+ *
+ * @param eventType the type of event which has occurred
+ * @param event the event data
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ * 
+ * @see SWT
+ * @see #addListener
+ * @see #getListeners(int)
+ * @see #removeListener(int, Listener)
+ */
+public void notifyListeners (int eventType, Event event) {
+	checkWidget();
+	if (event == null) event = new Event ();
+	sendEvent (eventType, event);
+}
+
+void postEvent (int eventType) {
+	sendEvent (eventType, null, false);
+}
+
+void postEvent (int eventType, Event event) {
+	sendEvent (eventType, event, false);
+}
+
+void register () {
+}
+
+/*
+ * Releases the widget hiearchy and optionally destroys
+ * the receiver.
+ * <p>
+ * Typically, a widget with children will broadcast this
+ * message to all children so that they too can release their
+ * resources.  The <code>releaseHandle</code> method is used
+ * as part of this broadcast to zero the handle fields of the
+ * children without calling <code>destroyWidget</code>.  In
+ * this scenario, the children are actually destroyed later,
+ * when the operating system destroys the widget tree.
+ * </p>
+ * 
+ * @param destroy indicates that the receiver should be destroyed
+ * 
+ * @see #dispose
+ * @see #releaseHandle
+ * @see #releaseParent
+ * @see #releaseWidget
+*/
+void release (boolean destroy) {
+	if ((state & DISPOSE_SENT) == 0) {
+		state |= DISPOSE_SENT;
+		sendEvent (SWT.Dispose);
+	}
+	if ((state & DISPOSED) == 0) {
+		releaseChildren (destroy);
+	}
+	if ((state & RELEASED) == 0) {
+		state |= RELEASED;
+		if (destroy) {
+			releaseParent ();
+			releaseWidget ();
+			destroyWidget ();
+		} else {
+			releaseWidget ();
+			releaseHandle ();
+		}
+	}
+}
+
+void releaseChildren (boolean destroy) {
+}
+
+/*
+ * Releases the widget's handle by zero'ing it out.
+ * Does not destroy or release any operating system
+ * resources.
+ * <p>
+ * This method is called after <code>releaseWidget</code>
+ * or from <code>destroyWidget</code> when a widget is being
+ * destroyed to ensure that the widget is marked as destroyed
+ * in case the act of destroying the widget in the operating
+ * system causes application code to run in callback that
+ * could access the widget.
+ * </p>
+ *
+ * @see #dispose
+ * @see #releaseChildren
+ * @see #releaseParent
+ * @see #releaseWidget
+ */
+void releaseHandle () {
+	state |= DISPOSED;
+	display = null;
+	if (jniRef != 0) OS.DeleteGlobalRef (jniRef);
+	jniRef = 0;
+}
+
+/*
+ * Releases the receiver, a child in a widget hierarchy,
+ * from its parent.
+ * <p>
+ * When a widget is destroyed, it may be necessary to remove
+ * it from an internal data structure of the parent. When
+ * a widget has no handle, it may also be necessary for the
+ * parent to hide the widget or otherwise indicate that the
+ * widget has been disposed. For example, disposing a menu
+ * bar requires that the menu bar first be released from the
+ * shell when the menu bar is active.
+ * </p>
+ * 
+ * @see #dispose
+ * @see #releaseChildren
+ * @see #releaseWidget
+ * @see #releaseHandle
+ */
+void releaseParent () {
+}
+
+/*
+ * Releases any internal resources back to the operating
+ * system and clears all fields except the widget handle.
+ * <p>
+ * When a widget is destroyed, resources that were acquired
+ * on behalf of the programmer need to be returned to the
+ * operating system.  For example, if the widget made a
+ * copy of an icon, supplied by the programmer, this copy
+ * would be freed in <code>releaseWidget</code>.  Also,
+ * to assist the garbage collector and minimize the amount
+ * of memory that is not reclaimed when the programmer keeps
+ * a reference to a disposed widget, all fields except the
+ * handle are zero'd.  The handle is needed by <code>destroyWidget</code>.
+ * </p>
+ * 
+ * @see #dispose
+ * @see #releaseChildren
+ * @see #releaseHandle
+ * @see #releaseParent
+ */
+void releaseWidget () {
+	deregister ();
+	eventTable = null;
+	data = null;
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when an event of the given type occurs. The event
+ * type is one of the event constants defined in class <code>SWT</code>.
+ *
+ * @param eventType the type of event to listen for
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Listener
+ * @see SWT
+ * @see #addListener
+ * @see #getListeners(int)
+ * @see #notifyListeners
+ */
+public void removeListener (int eventType, Listener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (eventType, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when an event of the given type occurs.
+ * <p>
+ * <b>IMPORTANT:</b> This method is <em>not</em> part of the SWT
+ * public API. It is marked public only so that it can be shared
+ * within the packages provided by SWT. It should never be
+ * referenced from application code.
+ * </p>
+ *
+ * @param eventType the type of event to listen for
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see Listener
+ * @see #addListener
+ */
+protected void removeListener (int eventType, SWTEventListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (eventType, listener);
+}
+
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the widget is disposed.
+ *
+ * @param listener the listener which should no longer be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see DisposeListener
+ * @see #addDisposeListener
+ */
+public void removeDisposeListener (DisposeListener listener) {
+	checkWidget();
+	if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+	if (eventTable == null) return;
+	eventTable.unhook (SWT.Dispose, listener);
+}
+
+boolean sendDragEvent (int e) {
+	return sendMouseEvent (SWT.DragDetect, e, false);
+}
+
+boolean sendDragEvent (int button, int stateMask, int x, int y) {
+	Event event = new Event ();
+	event.button = button;
+	event.x = x;
+	event.y = y;
+	event.stateMask = stateMask;
+	postEvent (SWT.DragDetect, event);
+	return event.doit;
+}
+
+void sendEvent (Event event) {
+	Display display = event.display;
+	if (!display.filterEvent (event)) {
+		if (eventTable != null) eventTable.sendEvent (event);
+	}
+}
+
+void sendEvent (int eventType) {
+	sendEvent (eventType, null, true);
+}
+
+void sendEvent (int eventType, Event event) {
+	sendEvent (eventType, event, true);
+}
+
+void sendEvent (int eventType, Event event, boolean send) {
+	if (eventTable == null && !display.filters (eventType)) {
+		return;
+	}
+	if (event == null) event = new Event ();
+	event.type = eventType;
+	event.display = display;
+	event.widget = this;
+	if (event.time == 0) {
+		event.time = display.getLastEventTime ();
+	}
+	if (send) {
+		sendEvent (event);
+	} else {
+		display.postEvent (event);
+	}
+}
+
+boolean sendKeyEvent (int type, int e, boolean textInput) {
+	if (textInput) {
+		int text = OS.TextCompositionEventArgs_Text(e);
+		if (OS.String_Length(text) == 0) {
+			OS.GCHandle_Free(text);
+			text = OS.TextCompositionEventArgs_SystemText(e);
+			if (OS.String_Length(text) == 0) {
+				OS.GCHandle_Free(text);
+				text = OS.TextCompositionEventArgs_ControlText(e);
+				if (OS.String_Length(text) == 0) {
+					return false;
+				}
+			}
+		}
+		int chars = OS.String_ToCharArray(text);
+		char[] buffer = new char[OS.String_Length(text)]; 
+		OS.memcpy(buffer, chars, buffer.length * 2);
+		OS.GCHandle_Free(chars);
+		OS.GCHandle_Free(text);
+		for (int i = 0; i < buffer.length; i++) {
+			Event event = new Event ();
+			if (buffer.length == 1) {
+				event.keyCode = Display.translateKey(display.lastKey);
+			}
+			event.character = buffer[i];
+			//hack for dead key
+			if (display.deadChar) {
+				event.character = display.lastChar;
+				display.deadChar = false;
+			}
+			setInputState(event, type, 0, 0);
+			sendEvent (type, event);
+			if (isDisposed ()) return false;
+		}
+		return true;
+	} else {
+		Event event = new Event ();
+		if (!setKeyState (event, type, e)) return true;
+		sendEvent (type, event);
+		if (isDisposed ()) return false;
+		return event.doit;
+	}
+}
+
+boolean sendMouseEvent (int type, int e, boolean send) {
+	boolean hooksType = hooks (type) || filters (type);
+	boolean hooksDoubleClick = type == SWT.MouseDown && (hooks (SWT.MouseDoubleClick) || filters (SWT.MouseDoubleClick));
+	if (!hooksType && !hooksDoubleClick) return true;
+	Event event = new Event ();
+	if (type == SWT.MouseDown || type == SWT.MouseUp || type == SWT.DragDetect) {
+		event.button = OS.MouseButtonEventArgs_ChangedButton (e) + 1;
+		event.count = OS.MouseButtonEventArgs_ClickCount (e);
+	}
+	if (type == SWT.MouseWheel) {
+		int lines = OS.SystemParameters_WheelScrollLines ();
+		int delta = OS.MouseWheelEventArgs_Delta (e);
+		if (lines == -1) {
+			event.detail = SWT.SCROLL_PAGE;
+			event.count = delta / 120;
+		} else {
+			event.detail = SWT.SCROLL_LINE;
+			event.count = delta * lines / 120;
+		}
+	}
+	int point = OS.MouseEventArgs_GetPosition (e, handle);
+	event.x = (int) OS.Point_X (point);
+	event.y = (int) OS.Point_Y (point);
+	OS.GCHandle_Free (point);
+	setInputState (event, type, e, 0);
+	Event doubleClick = null; 
+	if (hooksDoubleClick && (event.count & 1) == 0) {
+		doubleClick = new Event();
+		doubleClick.button = event.button;
+		doubleClick.x = event.x;
+		doubleClick.y = event.y;
+		doubleClick.count = event.count;
+		doubleClick.stateMask = event.stateMask;
+	}
+	if (send) {
+		sendEvent (type, event);
+		if (isDisposed ()) return false;
+	} else {
+		postEvent (type, event);
+	}
+	if (doubleClick != null) {
+		if (send) {
+			sendEvent (SWT.MouseDoubleClick, doubleClick);
+			if (isDisposed ()) return false;
+		} else {
+			postEvent (SWT.MouseDoubleClick, doubleClick);
+		}
+	}
+	return event.doit;
+}
+
+//TEMPORARY CODE
+void setClipping (int widget, boolean clip) {
+	//TODO - should be is-kind-of UIElement rather than not DrawingVisual
+	int type = OS.Object_GetType(widget);
+	int drawingVisualType = OS.DrawingVisual_typeid();
+	if (!OS.Object_Equals(type, drawingVisualType)) {	
+		OS.UIElement_ClipToBounds (widget, clip);
+	}
+	OS.GCHandle_Free(drawingVisualType);
+	OS.GCHandle_Free(type);
+	int count = OS.VisualTreeHelper_GetChildrenCount(widget);
+	for (int i = 0; i < count; i++) {
+		int child = OS.VisualTreeHelper_GetChild (widget, i);
+		setClipping(child, clip);
+		OS.GCHandle_Free(child);
+	}		
+}
+
+/**
+ * Sets the application defined widget data associated
+ * with the receiver to be the argument. The <em>widget
+ * data</em> is a single, unnamed field that is stored
+ * with every widget. 
+ * <p>
+ * Applications may put arbitrary objects in this field. If
+ * the object stored in the widget data needs to be notified
+ * when the widget is disposed of, it is the application's
+ * responsibility to hook the Dispose event on the widget and
+ * do so.
+ * </p>
+ *
+ * @param data the widget data
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - when the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - when called from the wrong thread</li>
+ * </ul>
+ * 
+ * @see #getData()
+ */
+public void setData (Object data) {
+	checkWidget();
+	if ((state & KEYED_DATA) != 0) {
+		((Object []) this.data) [0] = data;
+	} else {
+		this.data = data;
+	}
+}
+
+/**
+ * Sets the application defined property of the receiver
+ * with the specified name to the given value.
+ * <p>
+ * Applications may associate arbitrary objects with the
+ * receiver in this fashion. If the objects stored in the
+ * properties need to be notified when the widget is disposed
+ * of, it is the application's responsibility to hook the
+ * Dispose event on the widget and do so.
+ * </p>
+ *
+ * @param key the name of the property
+ * @param value the new value for the property
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the key is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see #getData(String)
+ */
+public void setData (String key, Object value) {
+	checkWidget();
+	if (key == null) error (SWT.ERROR_NULL_ARGUMENT);
+	int index = 1;
+	Object [] table = null;
+	if ((state & KEYED_DATA) != 0) {
+		table = (Object []) data;
+		while (index < table.length) {
+			if (key.equals (table [index])) break;
+			index += 2;
+		}
+	}
+	if (value != null) {
+		if ((state & KEYED_DATA) != 0) {
+			if (index == table.length) {
+				Object [] newTable = new Object [table.length + 2];
+				System.arraycopy (table, 0, newTable, 0, table.length);
+				data = table = newTable;
+			}
+		} else {
+			table = new Object [3];
+			table [0] = data;
+			data = table;
+			state |= KEYED_DATA;
+		}
+		table [index] = key;
+		table [index + 1] = value;
+	} else {
+		if ((state & KEYED_DATA) != 0) {
+			if (index != table.length) {
+				int length = table.length - 2;
+				if (length == 1) {
+					data = table [0];
+					state &= ~KEYED_DATA;
+				} else {
+					Object [] newTable = new Object [length];
+					System.arraycopy (table, 0, newTable, 0, index);
+					System.arraycopy (table, index + 2, newTable, index, length - index);
+					data = newTable;
+				}
+			}
+		}
+	}
+	
+	// Demo 
+	if ("XAML".equals(key) && value instanceof String) {
+		setClipping (topHandle (), false);
+		String string = (String) value;
+		int ptr = createDotNetString(string, false);
+		int stringReader = OS.gcnew_StringReader (ptr);
+		int xmlReader = OS.XmlReader_Create (stringReader);
+		int resource = OS.XamlReader_Load (xmlReader);
+		if (resource != 0) {
+			OS.FrameworkElement_Resources (handle, resource);
+			OS.GCHandle_Free(resource);
+		}
+		OS.GCHandle_Free(xmlReader);
+		OS.GCHandle_Free(stringReader);
+		OS.GCHandle_Free(ptr);
+	}
+	if ("ResourceDictionary".equals(key) && value instanceof String) {
+		String string = (String) value;
+		int ptr = createDotNetString(string, false);
+		int uri = OS.gcnew_Uri(ptr, OS.UriKind_RelativeOrAbsolute);
+		int resources = OS.gcnew_ResourceDictionary();
+		OS.ResourceDictionary_Source(resources, uri);
+		OS.FrameworkElement_Resources(handle, resources);
+		OS.GCHandle_Free(resources);
+		OS.GCHandle_Free(uri);
+		OS.GCHandle_Free(ptr);
+	}
+}
+
+boolean sendFocusEvent (int type) {
+	sendEvent (type);
+	// widget could be disposed at this point
+	return true;
+}
+
+boolean setInputState (Event event, int type, int mouseEvent, int keyEvent) {
+	int modifiers;
+	if (keyEvent != 0) {
+		int keyboardDevice = OS.KeyboardEventArgs_KeyboardDevice(keyEvent);
+		modifiers = OS.KeyboardDevice_Modifiers(keyboardDevice);
+		OS.GCHandle_Free(keyboardDevice);
+	} else {
+		modifiers = OS.Keyboard_Modifiers();
+	}
+	if ((modifiers & OS.ModifierKeys_Alt) != 0) event.stateMask |= SWT.ALT;
+	if ((modifiers & OS.ModifierKeys_Shift) != 0) event.stateMask |= SWT.SHIFT;
+	if ((modifiers & OS.ModifierKeys_Control) != 0) event.stateMask |= SWT.CONTROL;	
+	if (mouseEvent != 0) {
+		if (OS.MouseEventArgs_LeftButton(mouseEvent) == OS.MouseButtonState_Pressed) event.stateMask |= SWT.BUTTON1;
+		if (OS.MouseEventArgs_MiddleButton(mouseEvent) == OS.MouseButtonState_Pressed) event.stateMask |= SWT.BUTTON2;
+		if (OS.MouseEventArgs_RightButton(mouseEvent) == OS.MouseButtonState_Pressed) event.stateMask |= SWT.BUTTON3;
+		if (OS.MouseEventArgs_XButton1(mouseEvent) == OS.MouseButtonState_Pressed) event.stateMask |= SWT.BUTTON4;
+		if (OS.MouseEventArgs_XButton2(mouseEvent) == OS.MouseButtonState_Pressed) event.stateMask |= SWT.BUTTON5;
+	} else {
+		if (OS.Mouse_LeftButton() == OS.MouseButtonState_Pressed) event.stateMask |= SWT.BUTTON1;
+		if (OS.Mouse_MiddleButton() == OS.MouseButtonState_Pressed) event.stateMask |= SWT.BUTTON2;
+		if (OS.Mouse_RightButton() == OS.MouseButtonState_Pressed) event.stateMask |= SWT.BUTTON3;
+		if (OS.Mouse_XButton1() == OS.MouseButtonState_Pressed) event.stateMask |= SWT.BUTTON4;
+		if (OS.Mouse_XButton2() == OS.MouseButtonState_Pressed) event.stateMask |= SWT.BUTTON5;
+	}
+	switch (type) {
+		case SWT.MouseDown:
+		case SWT.MouseDoubleClick:
+			if (event.button == 1) event.stateMask &= ~SWT.BUTTON1;
+			if (event.button == 2) event.stateMask &= ~SWT.BUTTON2;
+			if (event.button == 3) event.stateMask &= ~SWT.BUTTON3;
+			if (event.button == 4) event.stateMask &= ~SWT.BUTTON4;
+			if (event.button == 5) event.stateMask &= ~SWT.BUTTON5;
+			break;
+		case SWT.MouseUp:
+			if (event.button == 1) event.stateMask |= SWT.BUTTON1;
+			if (event.button == 2) event.stateMask |= SWT.BUTTON2;
+			if (event.button == 3) event.stateMask |= SWT.BUTTON3;
+			if (event.button == 4) event.stateMask |= SWT.BUTTON4;
+			if (event.button == 5) event.stateMask |= SWT.BUTTON5;
+			break;
+		case SWT.KeyDown:
+		case SWT.Traverse:
+			if (event.keyCode == SWT.ALT) event.stateMask &= ~SWT.ALT;
+			if (event.keyCode == SWT.SHIFT) event.stateMask &= ~SWT.SHIFT;
+			if (event.keyCode == SWT.CONTROL) event.stateMask &= ~SWT.CONTROL;
+			break;
+		case SWT.KeyUp:
+			if (event.keyCode == SWT.ALT) event.stateMask |= SWT.ALT;
+			if (event.keyCode == SWT.SHIFT) event.stateMask |= SWT.SHIFT;
+			if (event.keyCode == SWT.CONTROL) event.stateMask |= SWT.CONTROL;
+			break;
+	}		
+	return true;
+}
+
+boolean setKeyState (Event event, int type, int e) {
+	int key = display.lastKey = OS.KeyEventArgs_Key(e);
+	boolean repeat = OS.KeyEventArgs_IsRepeat(e);
+	switch (key) {
+		case OS.Key_ImeProcessed:
+			return false;
+		case OS.Key_LeftAlt:
+		case OS.Key_RightAlt:
+		case OS.Key_LeftCtrl:
+		case OS.Key_LeftShift:
+		case OS.Key_RightCtrl:
+		case OS.Key_RightShift:
+			if (repeat) return false;
+			break;
+		case OS.Key_System:
+			key = OS.KeyEventArgs_SystemKey(e);
+			switch (key) {
+				case OS.Key_LeftAlt:
+				case OS.Key_RightAlt:
+					if (repeat) return false;
+			}
+	}
+	boolean textual = false;
+	int vKey = OS.KeyInterop_VirtualKeyFromKey (key);
+	int mapKey = Win32.MapVirtualKeyW (vKey, 2);
+	if ((mapKey & 0x80000000) != 0) {
+		display.deadChar = true;
+		return false;
+	}
+	char [] result = new char [1];
+	byte [] keyboard = new byte [256];
+	Win32.GetKeyboardState (keyboard);
+	textual = Win32.ToUnicode (vKey, 0, keyboard, result, 1, 0) == 1;
+	if (textual && type == SWT.KeyDown) {
+		if (display.deadChar) display.lastChar = result [0];
+		//TODO  problem: in german, dead key + non-combing key
+		// example: '^' + 'p' fails. 
+		return false;
+	}
+	event.keyCode = Display.translateKey (key);
+	switch (key) {
+		case OS.Key_Back:		event.character = SWT.BS; break;
+		case OS.Key_LineFeed:	event.character = SWT.LF; break;
+		case OS.Key_Return: 	event.character = SWT.CR; break;
+		case OS.Key_Delete:		event.character = SWT.DEL; break;
+		case OS.Key_Escape:		event.character = SWT.ESC; break;
+		case OS.Key_Tab: 		event.character = SWT.TAB; break;
+	}
+	if (type == SWT.KeyUp) event.character = result [0];
+	return setInputState (event, type, 0, e);
+}
+
+void setNameScope() {
+//	Name Scope should most likely be on topHandle, but animation
+//	is using handle right now because topHandle isn't visible
+//	OS.NameScope_SetNameScope(topHandle(), display.nameScope);
+	OS.NameScope_SetNameScope(handle, display.nameScope);
+}
+
+boolean showMenu (int x, int y) {
+	Event event = new Event ();
+	event.x = x;
+	event.y = y;
+	sendEvent (SWT.MenuDetect, event);
+	if (!event.doit) return true;
+	Menu menu = getMenu ();
+	if (menu != null && !menu.isDisposed ()) {
+		if (x != event.x || y != event.y) {
+			menu.setLocation (event.x, event.y);
+		}
+		menu.setVisible (true);
+		return true;
+	}
+	return false;
+}
+
+int topHandle () {
+	return handle;
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the receiver
+ */
+public String toString () {
+	String string = "*Disposed*"; //$NON-NLS-1$
+	if (!isDisposed ()) {
+		string = "*Wrong Thread*"; //$NON-NLS-1$
+		if (isValidThread ()) string = getNameText ();
+	}
+	return getName () + " {" + string + "}"; //$NON-NLS-1$ //$NON-NLS-2$
+}
+
+void updateLayout (int updateHandle) {
+	boolean ignore = display.ignoreRender;
+	display.ignoreRender = true;
+	OS.UIElement_UpdateLayout (updateHandle);
+	display.ignoreRender = ignore;
+}
+
+}
diff --git a/bundles/org.eclipse.swt/META-INF/p2.inf b/bundles/org.eclipse.swt/META-INF/p2.inf
new file mode 100644
index 0000000..5730e8a
--- /dev/null
+++ b/bundles/org.eclipse.swt/META-INF/p2.inf
@@ -0,0 +1,11 @@
+requires.1.namespace=java.package
+requires.1.name=org.mozilla.xpcom
+requires.1.optional=true
+requires.1.greedy=false
+requires.1.range=0.0.0
+
+requires.2.namespace=java.package
+requires.2.name=org.eclipse.swt.accessibility2
+requires.2.optional=true
+requires.2.greedy=false
+requires.2.range=0.0.0
\ No newline at end of file
diff --git a/bundles/org.eclipse.swt/about_files/IJG_README b/bundles/org.eclipse.swt/about_files/IJG_README
new file mode 100644
index 0000000..86cc206
--- /dev/null
+++ b/bundles/org.eclipse.swt/about_files/IJG_README
@@ -0,0 +1,385 @@
+The Independent JPEG Group's JPEG software
+==========================================
+
+README for release 6b of 27-Mar-1998
+====================================
+
+This distribution contains the sixth public release of the Independent JPEG
+Group's free JPEG software.  You are welcome to redistribute this software and
+to use it for any purpose, subject to the conditions under LEGAL ISSUES, below.
+
+Serious users of this software (particularly those incorporating it into
+larger programs) should contact IJG at jpeg-info@uunet.uu.net to be added to
+our electronic mailing list.  Mailing list members are notified of updates
+and have a chance to participate in technical discussions, etc.
+
+This software is the work of Tom Lane, Philip Gladstone, Jim Boucher,
+Lee Crocker, Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi,
+Guido Vollbeding, Ge' Weijers, and other members of the Independent JPEG
+Group.
+
+IJG is not affiliated with the official ISO JPEG standards committee.
+
+
+DOCUMENTATION ROADMAP
+=====================
+
+This file contains the following sections:
+
+OVERVIEW            General description of JPEG and the IJG software.
+LEGAL ISSUES        Copyright, lack of warranty, terms of distribution.
+REFERENCES          Where to learn more about JPEG.
+ARCHIVE LOCATIONS   Where to find newer versions of this software.
+RELATED SOFTWARE    Other stuff you should get.
+FILE FORMAT WARS    Software *not* to get.
+TO DO               Plans for future IJG releases.
+
+Other documentation files in the distribution are:
+
+User documentation:
+  install.doc       How to configure and install the IJG software.
+  usage.doc         Usage instructions for cjpeg, djpeg, jpegtran,
+                    rdjpgcom, and wrjpgcom.
+  *.1               Unix-style man pages for programs (same info as usage.doc).
+  wizard.doc        Advanced usage instructions for JPEG wizards only.
+  change.log        Version-to-version change highlights.
+Programmer and internal documentation:
+  libjpeg.doc       How to use the JPEG library in your own programs.
+  example.c         Sample code for calling the JPEG library.
+  structure.doc     Overview of the JPEG library's internal structure.
+  filelist.doc      Road map of IJG files.
+  coderules.doc     Coding style rules --- please read if you contribute code.
+
+Please read at least the files install.doc and usage.doc.  Useful information
+can also be found in the JPEG FAQ (Frequently Asked Questions) article.  See
+ARCHIVE LOCATIONS below to find out where to obtain the FAQ article.
+
+If you want to understand how the JPEG code works, we suggest reading one or
+more of the REFERENCES, then looking at the documentation files (in roughly
+the order listed) before diving into the code.
+
+
+OVERVIEW
+========
+
+This package contains C software to implement JPEG image compression and
+decompression.  JPEG (pronounced "jay-peg") is a standardized compression
+method for full-color and gray-scale images.  JPEG is intended for compressing
+"real-world" scenes; line drawings, cartoons and other non-realistic images
+are not its strong suit.  JPEG is lossy, meaning that the output image is not
+exactly identical to the input image.  Hence you must not use JPEG if you
+have to have identical output bits.  However, on typical photographic images,
+very good compression levels can be obtained with no visible change, and
+remarkably high compression levels are possible if you can tolerate a
+low-quality image.  For more details, see the references, or just experiment
+with various compression settings.
+
+This software implements JPEG baseline, extended-sequential, and progressive
+compression processes.  Provision is made for supporting all variants of these
+processes, although some uncommon parameter settings aren't implemented yet.
+For legal reasons, we are not distributing code for the arithmetic-coding
+variants of JPEG; see LEGAL ISSUES.  We have made no provision for supporting
+the hierarchical or lossless processes defined in the standard.
+
+We provide a set of library routines for reading and writing JPEG image files,
+plus two sample applications "cjpeg" and "djpeg", which use the library to
+perform conversion between JPEG and some other popular image file formats.
+The library is intended to be reused in other applications.
+
+In order to support file conversion and viewing software, we have included
+considerable functionality beyond the bare JPEG coding/decoding capability;
+for example, the color quantization modules are not strictly part of JPEG
+decoding, but they are essential for output to colormapped file formats or
+colormapped displays.  These extra functions can be compiled out of the
+library if not required for a particular application.  We have also included
+"jpegtran", a utility for lossless transcoding between different JPEG
+processes, and "rdjpgcom" and "wrjpgcom", two simple applications for
+inserting and extracting textual comments in JFIF files.
+
+The emphasis in designing this software has been on achieving portability and
+flexibility, while also making it fast enough to be useful.  In particular,
+the software is not intended to be read as a tutorial on JPEG.  (See the
+REFERENCES section for introductory material.)  Rather, it is intended to
+be reliable, portable, industrial-strength code.  We do not claim to have
+achieved that goal in every aspect of the software, but we strive for it.
+
+We welcome the use of this software as a component of commercial products.
+No royalty is required, but we do ask for an acknowledgement in product
+documentation, as described under LEGAL ISSUES.
+
+
+LEGAL ISSUES
+============
+
+In plain English:
+
+1. We don't promise that this software works.  (But if you find any bugs,
+   please let us know!)
+2. You can use this software for whatever you want.  You don't have to pay us.
+3. You may not pretend that you wrote this software.  If you use it in a
+   program, you must acknowledge somewhere in your documentation that
+   you've used the IJG code.
+
+In legalese:
+
+The authors make NO WARRANTY or representation, either express or implied,
+with respect to this software, its quality, accuracy, merchantability, or
+fitness for a particular purpose.  This software is provided "AS IS", and you,
+its user, assume the entire risk as to its quality and accuracy.
+
+This software is copyright (C) 1991-1998, Thomas G. Lane.
+All Rights Reserved except as specified below.
+
+Permission is hereby granted to use, copy, modify, and distribute this
+software (or portions thereof) for any purpose, without fee, subject to these
+conditions:
+(1) If any part of the source code for this software is distributed, then this
+README file must be included, with this copyright and no-warranty notice
+unaltered; and any additions, deletions, or changes to the original files
+must be clearly indicated in accompanying documentation.
+(2) If only executable code is distributed, then the accompanying
+documentation must state that "this software is based in part on the work of
+the Independent JPEG Group".
+(3) Permission for use of this software is granted only if the user accepts
+full responsibility for any undesirable consequences; the authors accept
+NO LIABILITY for damages of any kind.
+
+These conditions apply to any software derived from or based on the IJG code,
+not just to the unmodified library.  If you use our work, you ought to
+acknowledge us.
+
+Permission is NOT granted for the use of any IJG author's name or company name
+in advertising or publicity relating to this software or products derived from
+it.  This software may be referred to only as "the Independent JPEG Group's
+software".
+
+We specifically permit and encourage the use of this software as the basis of
+commercial products, provided that all warranty or liability claims are
+assumed by the product vendor.
+
+
+ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
+sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
+ansi2knr.c is NOT covered by the above copyright and conditions, but instead
+by the usual distribution terms of the Free Software Foundation; principally,
+that you must include source code if you redistribute it.  (See the file
+ansi2knr.c for full details.)  However, since ansi2knr.c is not needed as part
+of any program generated from the IJG code, this does not limit you more than
+the foregoing paragraphs do.
+
+The Unix configuration script "configure" was produced with GNU Autoconf.
+It is copyright by the Free Software Foundation but is freely distributable.
+The same holds for its supporting scripts (config.guess, config.sub,
+ltconfig, ltmain.sh).  Another support script, install-sh, is copyright
+by M.I.T. but is also freely distributable.
+
+It appears that the arithmetic coding option of the JPEG spec is covered by
+patents owned by IBM, AT&T, and Mitsubishi.  Hence arithmetic coding cannot
+legally be used without obtaining one or more licenses.  For this reason,
+support for arithmetic coding has been removed from the free JPEG software.
+(Since arithmetic coding provides only a marginal gain over the unpatented
+Huffman mode, it is unlikely that very many implementations will support it.)
+So far as we are aware, there are no patent restrictions on the remaining
+code.
+
+The IJG distribution formerly included code to read and write GIF files.
+To avoid entanglement with the Unisys LZW patent, GIF reading support has
+been removed altogether, and the GIF writer has been simplified to produce
+"uncompressed GIFs".  This technique does not use the LZW algorithm; the
+resulting GIF files are larger than usual, but are readable by all standard
+GIF decoders.
+
+We are required to state that
+    "The Graphics Interchange Format(c) is the Copyright property of
+    CompuServe Incorporated.  GIF(sm) is a Service Mark property of
+    CompuServe Incorporated."
+
+
+REFERENCES
+==========
+
+We highly recommend reading one or more of these references before trying to
+understand the innards of the JPEG software.
+
+The best short technical introduction to the JPEG compression algorithm is
+	Wallace, Gregory K.  "The JPEG Still Picture Compression Standard",
+	Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
+(Adjacent articles in that issue discuss MPEG motion picture compression,
+applications of JPEG, and related topics.)  If you don't have the CACM issue
+handy, a PostScript file containing a revised version of Wallace's article is
+available at ftp://ftp.uu.net/graphics/jpeg/wallace.ps.gz.  The file (actually
+a preprint for an article that appeared in IEEE Trans. Consumer Electronics)
+omits the sample images that appeared in CACM, but it includes corrections
+and some added material.  Note: the Wallace article is copyright ACM and IEEE,
+and it may not be used for commercial purposes.
+
+A somewhat less technical, more leisurely introduction to JPEG can be found in
+"The Data Compression Book" by Mark Nelson and Jean-loup Gailly, published by
+M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1.  This book provides
+good explanations and example C code for a multitude of compression methods
+including JPEG.  It is an excellent source if you are comfortable reading C
+code but don't know much about data compression in general.  The book's JPEG
+sample code is far from industrial-strength, but when you are ready to look
+at a full implementation, you've got one here...
+
+The best full description of JPEG is the textbook "JPEG Still Image Data
+Compression Standard" by William B. Pennebaker and Joan L. Mitchell, published
+by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1.  Price US$59.95, 638 pp.
+The book includes the complete text of the ISO JPEG standards (DIS 10918-1
+and draft DIS 10918-2).  This is by far the most complete exposition of JPEG
+in existence, and we highly recommend it.
+
+The JPEG standard itself is not available electronically; you must order a
+paper copy through ISO or ITU.  (Unless you feel a need to own a certified
+official copy, we recommend buying the Pennebaker and Mitchell book instead;
+it's much cheaper and includes a great deal of useful explanatory material.)
+In the USA, copies of the standard may be ordered from ANSI Sales at (212)
+642-4900, or from Global Engineering Documents at (800) 854-7179.  (ANSI
+doesn't take credit card orders, but Global does.)  It's not cheap: as of
+1992, ANSI was charging $95 for Part 1 and $47 for Part 2, plus 7%
+shipping/handling.  The standard is divided into two parts, Part 1 being the
+actual specification, while Part 2 covers compliance testing methods.  Part 1
+is titled "Digital Compression and Coding of Continuous-tone Still Images,
+Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS
+10918-1, ITU-T T.81.  Part 2 is titled "Digital Compression and Coding of
+Continuous-tone Still Images, Part 2: Compliance testing" and has document
+numbers ISO/IEC IS 10918-2, ITU-T T.83.
+
+Some extensions to the original JPEG standard are defined in JPEG Part 3,
+a newer ISO standard numbered ISO/IEC IS 10918-3 and ITU-T T.84.  IJG
+currently does not support any Part 3 extensions.
+
+The JPEG standard does not specify all details of an interchangeable file
+format.  For the omitted details we follow the "JFIF" conventions, revision
+1.02.  A copy of the JFIF spec is available from:
+	Literature Department
+	C-Cube Microsystems, Inc.
+	1778 McCarthy Blvd.
+	Milpitas, CA 95035
+	phone (408) 944-6300,  fax (408) 944-6314
+A PostScript version of this document is available by FTP at
+ftp://ftp.uu.net/graphics/jpeg/jfif.ps.gz.  There is also a plain text
+version at ftp://ftp.uu.net/graphics/jpeg/jfif.txt.gz, but it is missing
+the figures.
+
+The TIFF 6.0 file format specification can be obtained by FTP from
+ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz.  The JPEG incorporation scheme
+found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems.
+IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6).
+Instead, we recommend the JPEG design proposed by TIFF Technical Note #2
+(Compression tag 7).  Copies of this Note can be obtained from ftp.sgi.com or
+from ftp://ftp.uu.net/graphics/jpeg/.  It is expected that the next revision
+of the TIFF spec will replace the 6.0 JPEG design with the Note's design.
+Although IJG's own code does not support TIFF/JPEG, the free libtiff library
+uses our library to implement TIFF/JPEG per the Note.  libtiff is available
+from ftp://ftp.sgi.com/graphics/tiff/.
+
+
+ARCHIVE LOCATIONS
+=================
+
+The "official" archive site for this software is ftp.uu.net (Internet
+address 192.48.96.9).  The most recent released version can always be found
+there in directory graphics/jpeg.  This particular version will be archived
+as ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz.  If you don't have
+direct Internet access, UUNET's archives are also available via UUCP; contact
+help@uunet.uu.net for information on retrieving files that way.
+
+Numerous Internet sites maintain copies of the UUNET files.  However, only
+ftp.uu.net is guaranteed to have the latest official version.
+
+You can also obtain this software in DOS-compatible "zip" archive format from
+the SimTel archives (ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/), or
+on CompuServe in the Graphics Support forum (GO CIS:GRAPHSUP), library 12
+"JPEG Tools".  Again, these versions may sometimes lag behind the ftp.uu.net
+release.
+
+The JPEG FAQ (Frequently Asked Questions) article is a useful source of
+general information about JPEG.  It is updated constantly and therefore is
+not included in this distribution.  The FAQ is posted every two weeks to
+Usenet newsgroups comp.graphics.misc, news.answers, and other groups.
+It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq/
+and other news.answers archive sites, including the official news.answers
+archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/.
+If you don't have Web or FTP access, send e-mail to mail-server@rtfm.mit.edu
+with body
+	send usenet/news.answers/jpeg-faq/part1
+	send usenet/news.answers/jpeg-faq/part2
+
+
+RELATED SOFTWARE
+================
+
+Numerous viewing and image manipulation programs now support JPEG.  (Quite a
+few of them use this library to do so.)  The JPEG FAQ described above lists
+some of the more popular free and shareware viewers, and tells where to
+obtain them on Internet.
+
+If you are on a Unix machine, we highly recommend Jef Poskanzer's free
+PBMPLUS software, which provides many useful operations on PPM-format image
+files.  In particular, it can convert PPM images to and from a wide range of
+other formats, thus making cjpeg/djpeg considerably more useful.  The latest
+version is distributed by the NetPBM group, and is available from numerous
+sites, notably ftp://wuarchive.wustl.edu/graphics/graphics/packages/NetPBM/.
+Unfortunately PBMPLUS/NETPBM is not nearly as portable as the IJG software is;
+you are likely to have difficulty making it work on any non-Unix machine.
+
+A different free JPEG implementation, written by the PVRG group at Stanford,
+is available from ftp://havefun.stanford.edu/pub/jpeg/.  This program
+is designed for research and experimentation rather than production use;
+it is slower, harder to use, and less portable than the IJG code, but it
+is easier to read and modify.  Also, the PVRG code supports lossless JPEG,
+which we do not.  (On the other hand, it doesn't do progressive JPEG.)
+
+
+FILE FORMAT WARS
+================
+
+Some JPEG programs produce files that are not compatible with our library.
+The root of the problem is that the ISO JPEG committee failed to specify a
+concrete file format.  Some vendors "filled in the blanks" on their own,
+creating proprietary formats that no one else could read.  (For example, none
+of the early commercial JPEG implementations for the Macintosh were able to
+exchange compressed files.)
+
+The file format we have adopted is called JFIF (see REFERENCES).  This format
+has been agreed to by a number of major commercial JPEG vendors, and it has
+become the de facto standard.  JFIF is a minimal or "low end" representation.
+We recommend the use of TIFF/JPEG (TIFF revision 6.0 as modified by TIFF
+Technical Note #2) for "high end" applications that need to record a lot of
+additional data about an image.  TIFF/JPEG is fairly new and not yet widely
+supported, unfortunately.
+
+The upcoming JPEG Part 3 standard defines a file format called SPIFF.
+SPIFF is interoperable with JFIF, in the sense that most JFIF decoders should
+be able to read the most common variant of SPIFF.  SPIFF has some technical
+advantages over JFIF, but its major claim to fame is simply that it is an
+official standard rather than an informal one.  At this point it is unclear
+whether SPIFF will supersede JFIF or whether JFIF will remain the de-facto
+standard.  IJG intends to support SPIFF once the standard is frozen, but we
+have not decided whether it should become our default output format or not.
+(In any case, our decoder will remain capable of reading JFIF indefinitely.)
+
+Various proprietary file formats incorporating JPEG compression also exist.
+We have little or no sympathy for the existence of these formats.  Indeed,
+one of the original reasons for developing this free software was to help
+force convergence on common, open format standards for JPEG files.  Don't
+use a proprietary file format!
+
+
+TO DO
+=====
+
+The major thrust for v7 will probably be improvement of visual quality.
+The current method for scaling the quantization tables is known not to be
+very good at low Q values.  We also intend to investigate block boundary
+smoothing, "poor man's variable quantization", and other means of improving
+quality-vs-file-size performance without sacrificing compatibility.
+
+In future versions, we are considering supporting some of the upcoming JPEG
+Part 3 extensions --- principally, variable quantization and the SPIFF file
+format.
+
+As always, speeding things up is of great interest.
+
+Please send bug reports, offers of help, etc. to jpeg-info@uunet.uu.net.
diff --git a/bundles/org.eclipse.swt/components/external.idl b/bundles/org.eclipse.swt/components/external.idl
new file mode 100644
index 0000000..fbc6d82
--- /dev/null
+++ b/bundles/org.eclipse.swt/components/external.idl
@@ -0,0 +1,10 @@
+// to compile: xpidl -m typelib -I J:\teamswt\swt-builddir\gecko-sdk\idl\ -e External.xpt External.idl
+
+#include "nsISupports.idl"
+#include "nsIVariant.idl"
+
+[scriptable, uuid(ded01d20-ba6f-11dd-ad8b-0800200c9a66)]
+
+interface External : nsISupports {
+    nsIVariant callJava (in unsigned long index, in nsIVariant args);
+};
diff --git a/bundles/org.eclipse.swt/components/external.xpt b/bundles/org.eclipse.swt/components/external.xpt
new file mode 100644
index 0000000..f57da7e
--- /dev/null
+++ b/bundles/org.eclipse.swt/components/external.xpt
Binary files differ
diff --git a/bundles/org.eclipse.swt/extra_jars/exceptions.jar b/bundles/org.eclipse.swt/extra_jars/exceptions.jar
new file mode 100644
index 0000000..91cd047
--- /dev/null
+++ b/bundles/org.eclipse.swt/extra_jars/exceptions.jar
Binary files differ
diff --git a/bundles/org.eclipse.swt/extra_jars/readme.txt b/bundles/org.eclipse.swt/extra_jars/readme.txt
new file mode 100644
index 0000000..02168b6
--- /dev/null
+++ b/bundles/org.eclipse.swt/extra_jars/readme.txt
@@ -0,0 +1,4 @@
+The additional jars in this folder are required to
+compile at development time because they do not 
+appear in CDC-1.0 Foundation-1.0.
+The jars in this folder are not required at run time.
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.examples.browser.demos/.classpath b/examples/org.eclipse.swt.examples.browser.demos/.classpath
deleted file mode 100644
index 065ac06..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/examples/org.eclipse.swt.examples.browser.demos/.project b/examples/org.eclipse.swt.examples.browser.demos/.project
deleted file mode 100644
index db0b47d..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.swt.examples.BrowserDemo</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/examples/org.eclipse.swt.examples.browser.demos/about.html b/examples/org.eclipse.swt.examples.browser.demos/about.html
deleted file mode 100644
index 6f6b96c..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/about.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>February 24, 2005</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.examples.browser.demos/build.properties b/examples/org.eclipse.swt.examples.browser.demos/build.properties
deleted file mode 100644
index 9764da6..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/build.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-###############################################################################
-# Copyright (c) 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
-###############################################################################
-source.BrowserDemo.jar = src/
-output.BrowserDemo.jar = bin/
-bin.includes = doc-html/,\
-			   plugin.properties,\
-			   plugin.xml,\
-			   about.html,\
-               BrowserDemo.jar,\
-               css1/,\
-               css2/,\
-               css3/,\
-               css4/,\
-               icons/
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css1/back1.jpg b/examples/org.eclipse.swt.examples.browser.demos/css1/back1.jpg
deleted file mode 100644
index bab9f33..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css1/back1.jpg
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css1/back2.jpg b/examples/org.eclipse.swt.examples.browser.demos/css1/back2.jpg
deleted file mode 100644
index 83f68de..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css1/back2.jpg
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css1/black.gif b/examples/org.eclipse.swt.examples.browser.demos/css1/black.gif
deleted file mode 100644
index 976c1e9..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css1/black.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css1/board1.jpg b/examples/org.eclipse.swt.examples.browser.demos/css1/board1.jpg
deleted file mode 100644
index 0cc4d5e..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css1/board1.jpg
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css1/empty.gif b/examples/org.eclipse.swt.examples.browser.demos/css1/empty.gif
deleted file mode 100644
index a6bce4d..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css1/empty.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css1/line1.gif b/examples/org.eclipse.swt.examples.browser.demos/css1/line1.gif
deleted file mode 100644
index f9a0f34..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css1/line1.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css1/style.css b/examples/org.eclipse.swt.examples.browser.demos/css1/style.css
deleted file mode 100644
index 7b36fa9..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css1/style.css
+++ /dev/null
@@ -1,30 +0,0 @@
-body {background: url(./back2.jpg) fixed; font-size: 10pt; font-family:Verdana, Arial, Helv, Helvetica, sans-serif;}

-h1 {text-align: center; font-size: 14pt; font-family: Verdana, Arial, Helv, Helvetica, sans-serif;}

-h2 {background: url(./line1.gif) no-repeat right bottom; font-size: 12pt; font-family:Verdana, Arial, Helv, Helvetica, sans-serif;}

-h3 {font-size: 10pt; font-family:Verdana, Arial, Helv, Helvetica, sans-serif;}

-

-ul {list-style: none; padding: 0; margin:0; font: 12pt Times;}

-li.white {background: url(./white.gif) no-repeat; padding: 3px 0 32px 64px; margin: 0;}

-li.black {background: url(./black.gif) no-repeat; padding: 3px 0 32px 64px; margin: 0;}

-li.wall {background: url(./wall.gif) no-repeat; padding: 3px 0 32px 64px; margin: 0;}

-

-.board {text-align: center;}

-table { border-collapse: collapse; margin: 0;}

-tr {}

-td {height: 32px; width:32px; table-layout: fixed;}

-

-.whitelink a {display: block; background: url(./empty.gif) no-repeat; width:32px; height:32px;}

-.blacklink a {display: block; background: url(./empty.gif) no-repeat; width:32px; height:32px;}

-.empty {display: block; background: url(./empty.gif) no-repeat; width:32px; height:32px;}

-

-.whitelink a:hover {display: block; background: url(./white.gif) no-repeat; width:32px; height:32px;}

-.blacklink a:hover {display: block; background: url(./black.gif) no-repeat; width:32px; height:32px;}

-.white {background: url(./white.gif) no-repeat;}

-.black {background: url(./black.gif) no-repeat;}

-.wall {background: url(./wall.gif) no-repeat;}

-

-.playerwhite {float: left; margin: 1em 1em; border: 1px solid gray; background: url(./white.gif) no-repeat; text-align: right; width:100px; height:32px;}

-.playerblack {float: right; margin: 1em 1em; border: 1px solid gray; background: url(./black.gif) no-repeat; text-align: right; width:100px; height:32px;}

-

-.winner {border: 4px solid blue; font: bold 16pt Times, serif;}

-.loser {border: 1px solid black; font: 12pt Times, serif;}

diff --git a/examples/org.eclipse.swt.examples.browser.demos/css1/wall.gif b/examples/org.eclipse.swt.examples.browser.demos/css1/wall.gif
deleted file mode 100644
index fb97fc1..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css1/wall.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css1/welcome.html b/examples/org.eclipse.swt.examples.browser.demos/css1/welcome.html
deleted file mode 100644
index 58e92a3..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css1/welcome.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<html>
-<head>
-	<title>Start a game</title>
-	<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
-	<link rel="stylesheet" type="text/css" href="./style.css">
-</head>
-<body>
-<h1>Pawns Game</h1>
-<div class="start">
-<a class="start" href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actionstart1player">1 player</a>
-<a class="start" href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actionstart2players">2 players</a>
-</div>
-<h2>How to play</h2>
-This board game is a variant of Reversi and Tic Tac Toe. Each one of the two players sets a pawn on an empty cell of the board.
-<h3>Pawns</h3>
-<ul>
-<li class="white">Player 1</li>
-<li class="black">Player 2</li>
-<li class="wall">Wall. Cannot be reversed.</li>
-</ul>
-<div class="theme">
-Different themes are supported. Theme is configured through a Cascading Style Sheet (CSS) that determines how the HTML content is rendered by the SWT Browser widget.
-<ul class="theme">
-<li><a href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actiontheme/css1">Theme 1</a></li>
-<li><a href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actiontheme/css2">Theme 2</a></li>
-<li><a href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actiontheme/css3">Theme 3</a></li>
-<li><a href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actiontheme/css4">Theme 4</a></li>
-</ul>
-
-</div>
-<h2>How to win</h2>
-The game ends when all cells are filled. The winner is the one with most pawns of their colour. 
-
-<h2>Java and HTML integrated through the SWT Browser widget</h2>
-<p>
-Rendering is based on HTML and CSS techniques. Computer moves are programmed in regular
-Java code in the Eclipse plug-in. The SWT Browser widget is used for rendering and reacting
-to user input.
-</p>
-<h3>Implementation</h3>
-<p>
-The board is a table filled with hyperlinks. Cascading Style Sheets
-provide various themes and control the table aesthetic appearance.
-<br>The API <code>org.eclipse.swt.browser.Browser.setText(java.lang.String)</code> draws
-the board game from HTML generated in memory.
-<br>Player moves are captured by implementing the interface <code>org.eclipse.swt.browser.LocationListener</code>.
-e.g the player clicks on a cell that may generate a hyperlink with a URL similar to
-<code>http://www.org.eclipse.swt.examples.browser.demos/xx1yy2</code>. That hyperlink identifies
-the position of the cell selected by the player (column 1, row 2). The move is completed by generating
-new HTML content and invoking <code>Browser.setText</code> to update the board game.
-</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css1/white.gif b/examples/org.eclipse.swt.examples.browser.demos/css1/white.gif
deleted file mode 100644
index c43fd96..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css1/white.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css2/Back640x440.gif b/examples/org.eclipse.swt.examples.browser.demos/css2/Back640x440.gif
deleted file mode 100644
index 6533821..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css2/Back640x440.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css2/black_chip.gif b/examples/org.eclipse.swt.examples.browser.demos/css2/black_chip.gif
deleted file mode 100644
index c7c6ebd..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css2/black_chip.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css2/line1.gif b/examples/org.eclipse.swt.examples.browser.demos/css2/line1.gif
deleted file mode 100644
index f9a0f34..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css2/line1.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css2/style.css b/examples/org.eclipse.swt.examples.browser.demos/css2/style.css
deleted file mode 100644
index 590749c..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css2/style.css
+++ /dev/null
@@ -1,30 +0,0 @@
-body {background: url(./Back640x440.gif) fixed; font-size: 10pt; font-family:Verdana, Arial, Helv, Helvetica, sans-serif;}

-h1 {text-align: center; font-size: 14pt; font-family: Verdana, Arial, Helv, Helvetica, sans-serif;}

-h2 {background: url(./line1.gif) no-repeat right bottom; font-size: 12pt; font-family:Verdana, Arial, Helv, Helvetica, sans-serif;}

-h3 {font-size: 10pt; font-family:Verdana, Arial, Helv, Helvetica, sans-serif;}

-

-ul {list-style: none; padding: 0; margin:0; font: 12pt Times;}

-li.white {background: url(./white_chip.gif) no-repeat; padding: 3px 0 32px 64px; margin: 0;}

-li.black {background: url(./black_chip.gif) no-repeat; padding: 3px 0 32px 64px; margin: 0;}

-li.wall {background: url(./wall_chip.gif) no-repeat; padding: 3px 0 32px 64px; margin: 0;}

-

-.board {text-align: left;}

-table { border-collapse: collapse; margin: 0; padding:0; background: url(./texture_cells.gif)}

-tr {}

-td {height:48px; width:48px; table-layout: fixed;}

-

-.whitelink a {display: block; width:48px; height:48px;}

-.blacklink a {display: block; width:48px; height:48px;}

-.empty {display: block; width:48px; height:48px;}

-

-.whitelink a:hover {display: block; background: url(./white_chip.gif) no-repeat; width:48px; height:48px;}

-.blacklink a:hover {display: block; background: url(./black_chip.gif) no-repeat; width:48px; height:48px;}

-.white {background: url(./white_chip.gif) no-repeat;}

-.black {background: url(./black_chip.gif) no-repeat;}

-.wall {background: url(./wall_chip.gif) no-repeat;}

-

-.playerwhite {position: absolute; top: 50px; right:10px; margin: 1em 10px; border: 3px solid blue; background: url(./white_chip.gif) no-repeat right; text-align: left; width:100px; height:48px; font: 36pt Times, serif;}

-.playerblack {position: absolute; top: 300px; right:10px; margin: 1em 10px; border: 3px solid blue; background: url(./black_chip.gif) no-repeat right; text-align: left; width:100px; height:48px; font: 36pt Times, serif;}

-

-.winner {border: 4px solid white; font: bold 16pt Times, serif;}

-.loser {border: 1px solid black; font: 12pt Times, serif;}

diff --git a/examples/org.eclipse.swt.examples.browser.demos/css2/texture_cells.gif b/examples/org.eclipse.swt.examples.browser.demos/css2/texture_cells.gif
deleted file mode 100644
index f7fee9d..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css2/texture_cells.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css2/wall_chip.gif b/examples/org.eclipse.swt.examples.browser.demos/css2/wall_chip.gif
deleted file mode 100644
index bdf0b30..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css2/wall_chip.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css2/welcome.html b/examples/org.eclipse.swt.examples.browser.demos/css2/welcome.html
deleted file mode 100644
index 58e92a3..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css2/welcome.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<html>
-<head>
-	<title>Start a game</title>
-	<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
-	<link rel="stylesheet" type="text/css" href="./style.css">
-</head>
-<body>
-<h1>Pawns Game</h1>
-<div class="start">
-<a class="start" href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actionstart1player">1 player</a>
-<a class="start" href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actionstart2players">2 players</a>
-</div>
-<h2>How to play</h2>
-This board game is a variant of Reversi and Tic Tac Toe. Each one of the two players sets a pawn on an empty cell of the board.
-<h3>Pawns</h3>
-<ul>
-<li class="white">Player 1</li>
-<li class="black">Player 2</li>
-<li class="wall">Wall. Cannot be reversed.</li>
-</ul>
-<div class="theme">
-Different themes are supported. Theme is configured through a Cascading Style Sheet (CSS) that determines how the HTML content is rendered by the SWT Browser widget.
-<ul class="theme">
-<li><a href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actiontheme/css1">Theme 1</a></li>
-<li><a href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actiontheme/css2">Theme 2</a></li>
-<li><a href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actiontheme/css3">Theme 3</a></li>
-<li><a href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actiontheme/css4">Theme 4</a></li>
-</ul>
-
-</div>
-<h2>How to win</h2>
-The game ends when all cells are filled. The winner is the one with most pawns of their colour. 
-
-<h2>Java and HTML integrated through the SWT Browser widget</h2>
-<p>
-Rendering is based on HTML and CSS techniques. Computer moves are programmed in regular
-Java code in the Eclipse plug-in. The SWT Browser widget is used for rendering and reacting
-to user input.
-</p>
-<h3>Implementation</h3>
-<p>
-The board is a table filled with hyperlinks. Cascading Style Sheets
-provide various themes and control the table aesthetic appearance.
-<br>The API <code>org.eclipse.swt.browser.Browser.setText(java.lang.String)</code> draws
-the board game from HTML generated in memory.
-<br>Player moves are captured by implementing the interface <code>org.eclipse.swt.browser.LocationListener</code>.
-e.g the player clicks on a cell that may generate a hyperlink with a URL similar to
-<code>http://www.org.eclipse.swt.examples.browser.demos/xx1yy2</code>. That hyperlink identifies
-the position of the cell selected by the player (column 1, row 2). The move is completed by generating
-new HTML content and invoking <code>Browser.setText</code> to update the board game.
-</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css2/white_chip.gif b/examples/org.eclipse.swt.examples.browser.demos/css2/white_chip.gif
deleted file mode 100644
index 3c6d658..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css2/white_chip.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css3/Back640x440.gif b/examples/org.eclipse.swt.examples.browser.demos/css3/Back640x440.gif
deleted file mode 100644
index 6533821..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css3/Back640x440.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css3/black_pawn.gif b/examples/org.eclipse.swt.examples.browser.demos/css3/black_pawn.gif
deleted file mode 100644
index 6e1a41d..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css3/black_pawn.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css3/line1.gif b/examples/org.eclipse.swt.examples.browser.demos/css3/line1.gif
deleted file mode 100644
index f9a0f34..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css3/line1.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css3/style.css b/examples/org.eclipse.swt.examples.browser.demos/css3/style.css
deleted file mode 100644
index bddf04e..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css3/style.css
+++ /dev/null
@@ -1,30 +0,0 @@
-body {background: url(./Back640x440.gif) fixed; font-size: 10pt; font-family:Verdana, Arial, Helv, Helvetica, sans-serif;}

-h1 {text-align: center; font-size: 14pt; font-family: Verdana, Arial, Helv, Helvetica, sans-serif;}

-h2 {background: url(./line1.gif) no-repeat right bottom; font-size: 12pt; font-family:Verdana, Arial, Helv, Helvetica, sans-serif;}

-h3 {font-size: 10pt; font-family:Verdana, Arial, Helv, Helvetica, sans-serif;}

-

-ul {list-style: none; padding: 0; margin:0; font: 12pt Times;}

-li.white {background: url(./white_pawn.gif) no-repeat; padding: 3px 0 32px 64px; margin: 0;}

-li.black {background: url(./black_pawn.gif) no-repeat; padding: 3px 0 32px 64px; margin: 0;}

-li.wall {background: url(./wall_pawn.gif) no-repeat; padding: 3px 0 32px 64px; margin: 0;}

-

-.board {text-align: left;}

-table { border-collapse: collapse; margin: 0; padding:0; background: url(./texture_cells.gif)}

-tr {}

-td {height:48px; width:48px; table-layout: fixed;}

-

-.whitelink a {display: block; width:48px; height:48px;}

-.blacklink a {display: block; width:48px; height:48px;}

-.empty {display: block; width:48px; height:48px;}

-

-.whitelink a:hover {display: block; background: url(./white_pawn.gif) no-repeat; width:48px; height:48px;}

-.blacklink a:hover {display: block; background: url(./black_pawn.gif) no-repeat; width:48px; height:48px;}

-.white {background: url(./white_pawn.gif) no-repeat;}

-.black {background: url(./black_pawn.gif) no-repeat;}

-.wall {background: url(./wall_pawn.gif) no-repeat;}

-

-.playerwhite {position: absolute; top: 50px; right:10px; margin: 1em 10px; border: 3px solid blue; background: url(./white_pawn.gif) no-repeat right; text-align: left; width:100px; height:48px; font: 36pt Times, serif;}

-.playerblack {position: absolute; top: 300px; right:10px; margin: 1em 10px; border: 3px solid blue; background: url(./black_pawn.gif) no-repeat right; text-align: left; width:100px; height:48px; font: 36pt Times, serif;}

-

-.winner {border: 4px solid white; font: bold 16pt Times, serif;}

-.loser {border: 1px solid black; font: 12pt Times, serif;}

diff --git a/examples/org.eclipse.swt.examples.browser.demos/css3/texture_cells.gif b/examples/org.eclipse.swt.examples.browser.demos/css3/texture_cells.gif
deleted file mode 100644
index f7fee9d..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css3/texture_cells.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css3/wall_pawn.gif b/examples/org.eclipse.swt.examples.browser.demos/css3/wall_pawn.gif
deleted file mode 100644
index d05cd50..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css3/wall_pawn.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css3/welcome.html b/examples/org.eclipse.swt.examples.browser.demos/css3/welcome.html
deleted file mode 100644
index 58e92a3..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css3/welcome.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<html>
-<head>
-	<title>Start a game</title>
-	<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
-	<link rel="stylesheet" type="text/css" href="./style.css">
-</head>
-<body>
-<h1>Pawns Game</h1>
-<div class="start">
-<a class="start" href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actionstart1player">1 player</a>
-<a class="start" href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actionstart2players">2 players</a>
-</div>
-<h2>How to play</h2>
-This board game is a variant of Reversi and Tic Tac Toe. Each one of the two players sets a pawn on an empty cell of the board.
-<h3>Pawns</h3>
-<ul>
-<li class="white">Player 1</li>
-<li class="black">Player 2</li>
-<li class="wall">Wall. Cannot be reversed.</li>
-</ul>
-<div class="theme">
-Different themes are supported. Theme is configured through a Cascading Style Sheet (CSS) that determines how the HTML content is rendered by the SWT Browser widget.
-<ul class="theme">
-<li><a href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actiontheme/css1">Theme 1</a></li>
-<li><a href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actiontheme/css2">Theme 2</a></li>
-<li><a href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actiontheme/css3">Theme 3</a></li>
-<li><a href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actiontheme/css4">Theme 4</a></li>
-</ul>
-
-</div>
-<h2>How to win</h2>
-The game ends when all cells are filled. The winner is the one with most pawns of their colour. 
-
-<h2>Java and HTML integrated through the SWT Browser widget</h2>
-<p>
-Rendering is based on HTML and CSS techniques. Computer moves are programmed in regular
-Java code in the Eclipse plug-in. The SWT Browser widget is used for rendering and reacting
-to user input.
-</p>
-<h3>Implementation</h3>
-<p>
-The board is a table filled with hyperlinks. Cascading Style Sheets
-provide various themes and control the table aesthetic appearance.
-<br>The API <code>org.eclipse.swt.browser.Browser.setText(java.lang.String)</code> draws
-the board game from HTML generated in memory.
-<br>Player moves are captured by implementing the interface <code>org.eclipse.swt.browser.LocationListener</code>.
-e.g the player clicks on a cell that may generate a hyperlink with a URL similar to
-<code>http://www.org.eclipse.swt.examples.browser.demos/xx1yy2</code>. That hyperlink identifies
-the position of the cell selected by the player (column 1, row 2). The move is completed by generating
-new HTML content and invoking <code>Browser.setText</code> to update the board game.
-</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css3/white_pawn.gif b/examples/org.eclipse.swt.examples.browser.demos/css3/white_pawn.gif
deleted file mode 100644
index 98f5e53..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css3/white_pawn.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css4/Back640x440.gif b/examples/org.eclipse.swt.examples.browser.demos/css4/Back640x440.gif
deleted file mode 100644
index 6533821..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css4/Back640x440.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css4/blue_people.gif b/examples/org.eclipse.swt.examples.browser.demos/css4/blue_people.gif
deleted file mode 100644
index a710c55..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css4/blue_people.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css4/gold_people.gif b/examples/org.eclipse.swt.examples.browser.demos/css4/gold_people.gif
deleted file mode 100644
index 605090a..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css4/gold_people.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css4/line1.gif b/examples/org.eclipse.swt.examples.browser.demos/css4/line1.gif
deleted file mode 100644
index f9a0f34..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css4/line1.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css4/style.css b/examples/org.eclipse.swt.examples.browser.demos/css4/style.css
deleted file mode 100644
index e15b096..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css4/style.css
+++ /dev/null
@@ -1,30 +0,0 @@
-body {background: url(./Back640x440.gif) fixed; font-size: 10pt; font-family:Verdana, Arial, Helv, Helvetica, sans-serif;}

-h1 {text-align: center; font-size: 14pt; font-family: Verdana, Arial, Helv, Helvetica, sans-serif;}

-h2 {background: url(./line1.gif) no-repeat right bottom; font-size: 12pt; font-family:Verdana, Arial, Helv, Helvetica, sans-serif;}

-h3 {font-size: 10pt; font-family:Verdana, Arial, Helv, Helvetica, sans-serif;}

-

-ul {list-style: none; padding: 0; margin:0; font: 12pt Times;}

-li.white {background: url(./blue_people.gif) no-repeat; padding: 3px 0 32px 64px; margin: 0;}

-li.black {background: url(./gold_people.gif) no-repeat; padding: 3px 0 32px 64px; margin: 0;}

-li.wall {background: url(./wall_people.gif) no-repeat; padding: 3px 0 32px 64px; margin: 0;}

-

-.board {text-align: left;}

-table { border-collapse: collapse; margin: 0; padding:0; background: url(./texture_cells.gif)}

-tr {}

-td {height:48px; width:48px; table-layout: fixed;}

-

-.whitelink a {display: block; width:48px; height:48px;}

-.blacklink a {display: block; width:48px; height:48px;}

-.empty {display: block; width:48px; height:48px;}

-

-.whitelink a:hover {display: block; background: url(./blue_people.gif) no-repeat; width:48px; height:48px;}

-.blacklink a:hover {display: block; background: url(./gold_people.gif) no-repeat; width:48px; height:48px;}

-.white {background: url(./blue_people.gif) no-repeat;}

-.black {background: url(./gold_people.gif) no-repeat;}

-.wall {background: url(./wall_people.gif) no-repeat;}

-

-.playerwhite {position: absolute; top: 50px; right:10px; margin: 1em 10px; border: 3px solid blue; background: url(./blue_people.gif) no-repeat right; text-align: left; width:100px; height:48px; font: 36pt Times, serif;}

-.playerblack {position: absolute; top: 300px; right:10px; margin: 1em 10px; border: 3px solid blue; background: url(./gold_people.gif) no-repeat right; text-align: left; width:100px; height:48px; font: 36pt Times, serif;}

-

-.winner {border: 4px solid white; font: bold 16pt Times, serif;}

-.loser {border: 1px solid black; font: 12pt Times, serif;}

diff --git a/examples/org.eclipse.swt.examples.browser.demos/css4/texture_cells.gif b/examples/org.eclipse.swt.examples.browser.demos/css4/texture_cells.gif
deleted file mode 100644
index f7fee9d..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css4/texture_cells.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css4/wall_people.gif b/examples/org.eclipse.swt.examples.browser.demos/css4/wall_people.gif
deleted file mode 100644
index 5616c81..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css4/wall_people.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/css4/welcome.html b/examples/org.eclipse.swt.examples.browser.demos/css4/welcome.html
deleted file mode 100644
index 58e92a3..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/css4/welcome.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<html>
-<head>
-	<title>Start a game</title>
-	<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
-	<link rel="stylesheet" type="text/css" href="./style.css">
-</head>
-<body>
-<h1>Pawns Game</h1>
-<div class="start">
-<a class="start" href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actionstart1player">1 player</a>
-<a class="start" href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actionstart2players">2 players</a>
-</div>
-<h2>How to play</h2>
-This board game is a variant of Reversi and Tic Tac Toe. Each one of the two players sets a pawn on an empty cell of the board.
-<h3>Pawns</h3>
-<ul>
-<li class="white">Player 1</li>
-<li class="black">Player 2</li>
-<li class="wall">Wall. Cannot be reversed.</li>
-</ul>
-<div class="theme">
-Different themes are supported. Theme is configured through a Cascading Style Sheet (CSS) that determines how the HTML content is rendered by the SWT Browser widget.
-<ul class="theme">
-<li><a href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actiontheme/css1">Theme 1</a></li>
-<li><a href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actiontheme/css2">Theme 2</a></li>
-<li><a href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actiontheme/css3">Theme 3</a></li>
-<li><a href="http://www.org.eclipse.swt.examples.browser.demos.pawns/actiontheme/css4">Theme 4</a></li>
-</ul>
-
-</div>
-<h2>How to win</h2>
-The game ends when all cells are filled. The winner is the one with most pawns of their colour. 
-
-<h2>Java and HTML integrated through the SWT Browser widget</h2>
-<p>
-Rendering is based on HTML and CSS techniques. Computer moves are programmed in regular
-Java code in the Eclipse plug-in. The SWT Browser widget is used for rendering and reacting
-to user input.
-</p>
-<h3>Implementation</h3>
-<p>
-The board is a table filled with hyperlinks. Cascading Style Sheets
-provide various themes and control the table aesthetic appearance.
-<br>The API <code>org.eclipse.swt.browser.Browser.setText(java.lang.String)</code> draws
-the board game from HTML generated in memory.
-<br>Player moves are captured by implementing the interface <code>org.eclipse.swt.browser.LocationListener</code>.
-e.g the player clicks on a cell that may generate a hyperlink with a URL similar to
-<code>http://www.org.eclipse.swt.examples.browser.demos/xx1yy2</code>. That hyperlink identifies
-the position of the cell selected by the player (column 1, row 2). The move is completed by generating
-new HTML content and invoking <code>Browser.setText</code> to update the board game.
-</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.examples.browser.demos/doc-html/swt_browser_demos_ex.html b/examples/org.eclipse.swt.examples.browser.demos/doc-html/swt_browser_demos_ex.html
deleted file mode 100644
index 12975b0..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/doc-html/swt_browser_demos_ex.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <title>SWT - Controls Overview</title>
-</head>
-<body>
-
-<h2>SWT example - Browser Demos</h2>
-
-<p>
-The Browser Demos demonstrate various features of the SWT Browser widget. 
-</p><p>The Pawns Game is a board game that can be played against the computer
-or against another player. Rendering is based on HTML and CSS techniques. The
-board is a table filled with hyperlinks. Cascading Style Sheets
-provide various themes and control the table aesthetic appearance.
-The API <code>org.eclipse.swt.browser.Browser.setText(java.lang.String)</code> draws
-the board game from HTML generated in memory.
-Player moves are captured by implementing the interface <code>org.eclipse.swt.browser.LocationListener</code>.
-e.g the player clicks on a cell that may generate an hyperlink with a URL similar to
-http://www.org.eclipse.swt.examples.browser.demos/xx1yy2. That hyperlink identifies
-the position of the cell selected by the player. The move is completed by generating
-new HTML content and invoking <code>Browser.setText</code> to update the board game.
-</p>
-
-<h3>Running the example</h3>
-<p>
-Follow the <a href="../../org.eclipse.swt.examples/doc-html/swt_manual_setup.html">SWT standalone examples setup</a> 
-instructions to install and run the example from your workspace.
-</p>
-<p>
-The "Main" class is <code>org.eclipse.swt.examples.browser.demos.BrowserDemoView</code>.
-</p>
-<p>
-This example can also be run using the <a href="../../org.eclipse.swt.examples.launcher/doc-html/swt_launcher_ex.html">Example Launcher</a>.
-Select the <strong>Browser Demo</strong> item from the <strong>Workbench Views</strong> category and click <strong>Run</strong>.
-</p>
-
-</body>
-</html>
diff --git a/examples/org.eclipse.swt.examples.browser.demos/icons/pawn.gif b/examples/org.eclipse.swt.examples.browser.demos/icons/pawn.gif
deleted file mode 100644
index c811f8b..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/icons/pawn.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser.demos/plugin.properties b/examples/org.eclipse.swt.examples.browser.demos/plugin.properties
deleted file mode 100644
index e2a0fea..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/plugin.properties
+++ /dev/null
@@ -1,31 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2004 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
-###############################################################################
-providerName = Eclipse.org
-plugin.SWTBrowserDemos.name = SWT Browser Demos Plugin
-category.SWTExamples.name = SWT Examples
-view.BrowserDemos.name = Browser Demo
-
-launchcategory.SWTViewExamples.name = Workbench Views
-launchcategory.SWTViewExamples.description = \
-	A collection of Standard Widget Toolkit examples that run as Views inside the Workbench.  \
-	These examples will create a new View in the current Perspective.
-
-launchitem.BrowserDemos.name = Browser Demo
-launchitem.BrowserDemos.description = \
-	The example illustrates how to use the SWT Browser widget for HTML rendering.\n\n\
-	The Pawns Game is a board game that can be played against the computer or against another player.\n\n\
-	Rendering is based on HTML and CSS techniques. The board is a table filled with hyperlinks. Cascading Style Sheets \
-	provide various themes and control the table aesthetic appearance. \n\
-	The API org.eclipse.swt.browser.Browser.setText(java.lang.String) draws the board game from HTML generated in memory.\n\
-	Player moves are captured by implementing the interface org.eclipse.swt.browser.LocationListener. e.g the player clicks \
-	on a cell that defines an hyperlink with a URL http://www.org.eclipse.swt.examples.browser.demos/xx1yy2.\
-	That hyperlink identifies the position of the cell selected by the player. The move is completed by generating \
-	new HTML content and invoking Browser.setText to update the board game.
diff --git a/examples/org.eclipse.swt.examples.browser.demos/plugin.xml b/examples/org.eclipse.swt.examples.browser.demos/plugin.xml
deleted file mode 100644
index 371ee25..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/plugin.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin
-   id="org.eclipse.swt.examples.browser.demos"
-   name="%plugin.SWTBrowserDemos.name"
-   version="3.1.0"
-   provider-name="%providerName"
-   class="org.eclipse.swt.examples.browser.demos.BrowserDemoPlugin">
-
-   <runtime>
-      <library name="BrowserDemo.jar">
-         <export name="*"/>
-      </library>
-   </runtime>
-
-   <requires>
-      <import plugin="org.eclipse.ui"/>
-      <import plugin="org.eclipse.core.runtime"/>
-   </requires>
-
-   <extension
-         point="org.eclipse.ui.views">
-      <category
-            name="%view.BrowserDemos.name"
-            id="org.eclipse.swt.examples.browser.demos.BrowserDemo">
-      </category>
-      <view
-            allowMultiple="false"
-            class="org.eclipse.swt.examples.browser.demos.views.BrowserDemoView"
-            icon="icons/pawn.gif"
-            category="org.eclipse.swt.examples.category"
-            name="Browser Demo"
-            id="org.eclipse.swt.examples.browser.demos.views.BrowserDemoView">
-      </view>
-   </extension>
-   
-   <extension
-         point="org.eclipse.swt.examples.launcher.launchItems">
-      <category
-            name="%launchcategory.SWTViewExamples.name"
-            description="%launchcategory.SWTViewExamples.description"
-            id="org.eclipse.swt.examples.launchViewCategory">
-      </category>
-      <item
-            name="%launchitem.BrowserDemos.name"
-            icon="icons/sample.gif"
-            category="org.eclipse.swt.examples.launchViewCategory"
-            description="%launchitem.BrowserDemos.description"
-            id="org.eclipse.swt.examples.browserdemos.viewlauncher">
-         <view
-               viewId="org.eclipse.swt.examples.browser.demos.views.BrowserDemoView">
-         </view>
-      </item>
-   </extension>
-</plugin>
diff --git a/examples/org.eclipse.swt.examples.browser.demos/src/org/eclipse/swt/examples/browser/demos/BrowserDemoPlugin.java b/examples/org.eclipse.swt.examples.browser.demos/src/org/eclipse/swt/examples/browser/demos/BrowserDemoPlugin.java
deleted file mode 100644
index 823dbde..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/src/org/eclipse/swt/examples/browser/demos/BrowserDemoPlugin.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.examples.browser.demos;
-
-import org.eclipse.ui.plugin.*;
-import org.osgi.framework.BundleContext;
-import java.util.*;
-import org.eclipse.core.runtime.*;
-
-public class BrowserDemoPlugin extends AbstractUIPlugin {
-
-	public static BrowserDemoPlugin plugin;
-	ResourceBundle resourceBundle;
-	public static String PLUGIN_PATH = null;
-	
-	public BrowserDemoPlugin() {
-		super();
-		plugin = this;
-		try {
-			resourceBundle = ResourceBundle.getBundle("org.eclipse.swt.examples.browser.demos.BrowserDemoPluginResources");
-		} catch (MissingResourceException x) {
-			resourceBundle = null;
-		}
-	}
-
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-		PLUGIN_PATH = Platform.resolve(plugin.getBundle().getEntry(".")).toString();
-	}
-
-	public void stop(BundleContext context) throws Exception {
-		super.stop(context);
-	}
-
-	public static BrowserDemoPlugin getDefault() {
-		return plugin;
-	}
-
-	public static String getResourceString(String key) {
-		ResourceBundle bundle = BrowserDemoPlugin.getDefault().getResourceBundle();
-		try {
-			return (bundle != null) ? bundle.getString(key) : key;
-		} catch (MissingResourceException e) {
-			return key;
-		}
-	}
-
-	public ResourceBundle getResourceBundle() {
-		return resourceBundle;
-	}	
-}
diff --git a/examples/org.eclipse.swt.examples.browser.demos/src/org/eclipse/swt/examples/browser/demos/Pawns.java b/examples/org.eclipse.swt.examples.browser.demos/src/org/eclipse/swt/examples/browser/demos/Pawns.java
deleted file mode 100644
index 1e2ef70..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/src/org/eclipse/swt/examples/browser/demos/Pawns.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.examples.browser.demos;
-
-public class Pawns {
-
-	/* Current board representation in compacted form */
-	byte[] game = new byte[64];
-	/* Best move */
-	int bestIndex = -1;
-	/* Related best score */
-	int bestScore = Integer.MIN_VALUE;
-	/* Estimated strategic value of each cell based on proximity to walls */
-	static int[] gameWallWeight = new int[64];
-	Thread thread = null;
-	boolean threadStop = false;
-	
-	final static byte EMPTY = 0;
-	final static byte WHITE = 1;
-	final static byte BLACK = 2;
-	final static byte WALL = 3;
-	
-public Pawns() {
-}
-
-/* Provide the current game and ignitiate the search of the best move for the given type
- * Must return immediately as it will be called from the UI thread.
- * The UI thread will fetch the best move any time thereafter.
- */
-public void playRequest(byte[][] game, int type) {
-	threadStop = true;
-	synchronized (this) {
-		bestIndex = -1;
-		bestScore = Integer.MIN_VALUE;
-		convert(game, this.game);
-		initPawnBorders(this.game, gameWallWeight);
-		/* Quickly compute a legal move */
-		for (int i = 0; i < this.game.length; i++) {
-			if (this.game[i] == EMPTY) {
-				bestIndex = i;
-				break;
-			}
-		}
-		new Thread() {
-			public void run() {
-				synchronized(Pawns.this) {
-					threadStop = false;
-					int[] result = new int[2];
-					/* if long time, must check for threadStop and exit early */ 
-					evalBest(Pawns.this.game, BLACK, 2, result);
-					bestIndex = result[0];
-					bestScore = result[1];
-				}
-			}
-		}.start();
-	}
-}
-
-/* Fetch best move in natural coordinates for the board previously given in
- * the call to playRequest.
- */
-public void getBestMove(int[] point) {
-	convert(bestIndex, point);
-	threadStop = true;
-}
-
-/* Given an expanded representation of the board, format internal compact mode */
-static void convert(byte[][] board, byte[] g) {
-	for (int i = 0; i < board.length; i++) System.arraycopy(board[i], 0, g, i * 8, 8);
-}
-/* Update given compact model based on player move in natural coordinates */
-static void set(byte[] g, int x, int y, byte type) {
-	g[x*8+y] = type;
-}
-/* Given an index in compact representation, return natural coordinates */
-static void convert(int index, /*out [0] x [1] y */int[] point) {
-	point[0] = index / 8;
-	point[1] = index % 8;
-}
-/* Given an index into the compact model and the neighbour code,
- * return the index of the corresponding neighbour index.
- * Returns -1 if there is no neighbour.
- * 
- * Neighbour code for the index X
- * 0 1 2
- * 3 X 4
- * 5 6 7 
- */
-static int getNeighbourIndex(byte[] g, int index, int neighbour) {
-	if (index < 0 || index >= g.length) return -1;
-	int result = -1;
-	switch (neighbour) {
-		case 0: result = index < 8 || index % 8 == 0 ? -1 : index - 9; break;
-		case 1: result = index < 8 ? -1 : index - 8; break;
-		case 2: result = index < 8 || index % 8 == 7 ? -1 : index - 7; break;
-		case 3: result = index % 8 == 0 ? -1 : index - 1; break;
-		case 4: result = index % 8 == 7 ? -1 : index + 1; break;
-		case 5: result = index % 8 == 0 || index >= 56 ? -1 : index + 7; break;
-		case 6: result = index >= 56 ? -1 : index + 8; break;
-		case 7: result = index % 8 == 7 || index >= 56 ? -1 : index + 9; break;
-	}
-	return result;
-}
-/* Make the player type play at index on given compact board 
- * Compute all pawns that must be reversed.
- */
-static void play(byte[] g, int index, byte type) {
-	byte opponentType = type == WHITE ? BLACK : WHITE;
-	for (int neighbour = 0; neighbour <= 7; neighbour++) {
-		int nIndex = getNeighbourIndex(g, index, neighbour);
-		int[] reversiIndeces = new int[6];
-		int nReversi = 0;
-		while (nIndex != -1 && nReversi < 6 && g[nIndex] == opponentType) {
-			reversiIndeces[nReversi] = nIndex;
-			nReversi++;
-			nIndex = getNeighbourIndex(g, nIndex, neighbour);			
-		}
-		if (nReversi > 0 && nIndex != -1 && g[nIndex] == type) {
-			for (int i = 0; i < nReversi; i++) g[reversiIndeces[i]] = type;
-		}
-	}
-	g[index] = type;
-}
-/* Evaluate the given compact model based on pawns distribution 
- * High means white has advantage. Below zero means black has advantage.
- */
-static int eval(byte[] g) {
-	int cntWhite = 0, cntBlack = 0, cntEmpty = 0;
-	int cntWhiteWallAdvantage = 0, cntBlackWallAdvantage = 0;
-	for (int i = 0; i < 64; i++) {
-		if (g[i] == WHITE) {
-			cntWhite++;
-			cntWhiteWallAdvantage += gameWallWeight[i];
-		}
-		else if (g[i] == BLACK) {
-			cntBlack++;
-			cntBlackWallAdvantage += gameWallWeight[i];
-		}
-		else if (g[i] == EMPTY) cntEmpty++;
-	}
-	if (cntEmpty == 0) {
-		if (cntWhite > cntBlack) return Integer.MAX_VALUE; /* White wins */
-		if (cntWhite < cntBlack) return Integer.MIN_VALUE; /* Black wins */
-		return 0; /* Stalemate */
-	}
-	return cntWhite + cntWhiteWallAdvantage - cntBlack - cntBlackWallAdvantage;
-}
-
-/* Recognize pawns protected by walls or borders 
- * TBD - note this should be called only once for each cell and stored
- * in a separate byte[] gWallGain
- * */
-static void initPawnBorders(byte[] g, int[] gameWallWeight) {
-	/* A pawn has 8 neighbours on 4 axes.
-	 * Strategic pawns have one side of each axis protected by a wall and the other
-	 * side not closed by a wall.
-	 * A pawn cannot be reversed when each of its 4 axes are protected by a wall on
-	 * one side. Pawns that have more than 4 walls are less interesting since they
-	 * are not open enough to the board.
-	 * 
-	 * Nbr walls, nbr axis covered, estimated value
-	 * 0 n/a 0
-	 * 1 1 2
-	 * 2 1 1
-	 * 2 2 6
-	 * 3 2 4
-	 * 4 2 2
-	 * 3 3 9
-	 * 4 3 8
-	 * 4 4 16
-	 * 5 4 14
-	 * 6 4 9
-	 * 7 4 6
-	 * 8 4 0
-	 */
-	int[] nTypes = new int[8];
-	for (int i = 0; i < 64; i++) {
-		int nWalls = 0;
-		int nAxis = 0;
-		for (int n = 0; n < 8; n++) {
-			int nIndex = getNeighbourIndex(g, i, n);
-			nTypes[n] = nIndex != -1 ? g[nIndex] : WALL;
-			if (nTypes[n] == WALL) nWalls++;
-		}
-		int score = nWalls;
-		if (nWalls > 0) {
-			if (nTypes[0] == WALL || nTypes[7] == WALL) nAxis++;
-			if (nTypes[1] == WALL || nTypes[6] == WALL) nAxis++;
-			if (nTypes[2] == WALL || nTypes[5] == WALL) nAxis++;
-			if (nTypes[4] == WALL || nTypes[3] == WALL) nAxis++;
-			switch (nAxis) {
-				case 4: switch (nWalls) { case 4: score = 16; break; case 5: score = 14; break; case 6: score = 9; case 7: score = 6; break; case 8: score = 0; break;} break;
-				case 3: switch (nWalls) { case 3: score = 9; break; case 4: score = 8;} break;
-				case 2: switch (nWalls) { case 2: score = 6; break; case 3: score = 4; break; case 4: score = 2; } break;
-				case 1: switch (nWalls) { case 1: score = 2; break; case 2: score = 1; break;} break;
-			}
-		}
-		gameWallWeight[i] = score;
-	}
-}
-
-/* Evaluate the best move for player type for the given board, doing a depth 1 search */
-static void evalBest(byte[] g, byte type, int depth, /* out [0] best move, [1] minimax */int[] result) {
-	byte[] tmp = new byte[64];
-	byte opponentType = type == WHITE ? BLACK : WHITE;
-	result[0] = -1; result[1] = Integer.MIN_VALUE;
-	for (int i = 0; i < 64; i++) {
-		if (g[i] == EMPTY) {
-			System.arraycopy(g, 0, tmp, 0, 64);
-			play(tmp, i, type);
-			int score = eval(tmp);
-			if (depth > 1) {
-				int[] tmpResult = new int[2];
-				evalBest(tmp, opponentType, depth - 1, tmpResult);
-				score = tmpResult[1];
-			}
-			if ((type == WHITE && score > result[1]) || (type == BLACK && score < result[1]) || result[0] == -1) {
-				result[0] = i;
-				result[1] = score;
-			}
-		}
-	}
-}
-}
diff --git a/examples/org.eclipse.swt.examples.browser.demos/src/org/eclipse/swt/examples/browser/demos/views/BrowserDemoView.java b/examples/org.eclipse.swt.examples.browser.demos/src/org/eclipse/swt/examples/browser/demos/views/BrowserDemoView.java
deleted file mode 100644
index 6123701..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/src/org/eclipse/swt/examples/browser/demos/views/BrowserDemoView.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.examples.browser.demos.views;
-
-import org.eclipse.ui.part.*;
-import org.eclipse.jface.action.*;
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.browser.*;
-
-public class BrowserDemoView extends ViewPart {
-	Action pawnAction;
-	Action editAction;
-	Composite parent;
-	
-	public BrowserDemoView() {
-	}
-	public void createPartControl(Composite parent) {
-		this.parent = parent;
-		parent.setLayout(new FillLayout());
-		try {
-			Browser browser = new Browser(parent, SWT.NONE);
-			browser.dispose();
-		} catch (SWTError e) {
-			Text text = new Text(parent, SWT.MULTI | SWT.READ_ONLY);
-			text.setText("Browser widget cannot be instantiated. The exact error is:\r\n"+e);
-			parent.layout(true);
-			return;
-		}
-		TabFolder folder = new TabFolder(parent, SWT.NONE);
-		TabItem item = new TabItem(folder, SWT.NONE);
-		new PawnTab(item);
-		
-		item = new TabItem(folder, SWT.NONE);
-		new EditorTab(item);
-	}
-	
-	public void setFocus() {
-	}
-	
-
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.examples.browser.demos/src/org/eclipse/swt/examples/browser/demos/views/EditorTab.java b/examples/org.eclipse.swt.examples.browser.demos/src/org/eclipse/swt/examples/browser/demos/views/EditorTab.java
deleted file mode 100644
index 8053165..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/src/org/eclipse/swt/examples/browser/demos/views/EditorTab.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.examples.browser.demos.views;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.browser.*;
-import org.eclipse.swt.graphics.*;
-
-public class EditorTab {
-	Browser browser;
-	Text htmlText, scriptText;
-	Button htmlButton, scriptButton;
-	static String html = 
-		"<html>\r\n"+
-		"	<body>\r\n"+
-		"		<h1 id='myid'>HTML Document</h1>\r\n"+
-		"		<h2>Set HTML content</h2>\r\n"+
-		"		<ol>\r\n"+
-		"			<li>Enter html data into the 'setText' pane</li>\r\n"+
-		"			<li>Click on 'setText' to set the new content</li>\r\n"+
-		"		</ol>\r\n"+
-		"		<h2>Query or modify HTML document</h2>\r\n"+
-		"		<ol>\r\n"+
-		"		<li>Enter javascript commands into the 'execute' pane</li>\r\n"+
-		"		<li>Click on 'execute' to run the javascript in the current document</li>\r\n"+
-		"		</ol>\r\n"+
-		"	</body>\r\n"+
-		"</html>";
-	
-	static String script = 
-		"var node = document.createElement('P');\r\n"+
-		"var text = document.createTextNode('Content inserted!');\r\n"+
-		"node.appendChild(text);\r\n"+
-		"document.getElementById('myid').appendChild(node);\r\n\r\n"+
-		"document.bgColor = 'yellow';";
-	
-	public EditorTab(TabItem item) {
-		final Composite parent = new Composite(item.getParent(), SWT.NONE);
-		item.setText("Editor");
-		item.setControl(parent);
-		
-		try {
-			browser = new Browser(parent, SWT.NONE);
-		} catch (SWTError e) {
-			e.printStackTrace();
-			return;
-		}
-		final Sash sash = new Sash(parent, SWT.VERTICAL);
-		Composite panel = new Composite(parent, SWT.NONE);
-		final FormLayout form = new FormLayout();
-		parent.setLayout(form);
-		
-		FormData data = new FormData();
-		data.left = new FormAttachment(0, 0);
-		data.right = new FormAttachment(sash, 0);
-		data.top = new FormAttachment(0, 0);
-		data.bottom = new FormAttachment(100, 0);
-		browser.setLayoutData(data);
-		
-		final FormData sashData = new FormData();
-		sashData.left = new FormAttachment(50, 0);
-		sashData.top = new FormAttachment(0, 0);
-		sashData.bottom = new FormAttachment(100, 0);
-		sash.setLayoutData(sashData);
-		sash.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				Rectangle rect = sash.getBounds();
-				Rectangle parentRect = sash.getParent().getClientArea();
-				int right = parentRect.width - rect.width - 20;
-				e.x = Math.max(Math.min(e.x, right), 20);
-				if (e.x != rect.x) {
-					sashData.left = new FormAttachment(0, e.x);
-					parent.layout();
-				}
-			}			
-		});
-		data = new FormData();
-		data.left = new FormAttachment(sash, 0);
-		data.right = new FormAttachment(100, 0);
-		data.top = new FormAttachment(0, 0);
-		data.bottom = new FormAttachment(100, 0);
-		panel.setLayoutData(data);
-		
-		/* Initialize Panel */
-		panel.setLayout(new FillLayout(SWT.VERTICAL));
-		Group htmlGroup = new Group(panel, SWT.NONE);
-		htmlGroup.setText("setText");
-		htmlText = new Text(htmlGroup, SWT.MULTI);
-		htmlButton = new Button(htmlGroup, SWT.PUSH);
-		htmlButton.setText("setText");
-		GridLayout gridLayout = new GridLayout();
-		htmlGroup.setLayout(gridLayout);
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		htmlText.setLayoutData(gridData);
-		gridData = new GridData();
-		gridData.horizontalAlignment = GridData.END;
-		htmlButton.setLayoutData(gridData);
-		htmlGroup.layout();
-		
-		Group scriptGroup = new Group(panel, SWT.NONE);
-		scriptGroup.setText("execute");
-		scriptText = new Text(scriptGroup, SWT.MULTI);
-		scriptButton = new Button(scriptGroup, SWT.PUSH);
-		scriptButton.setText("execute");
-		gridLayout = new GridLayout();
-		scriptGroup.setLayout(gridLayout);
-		gridData = new GridData();
-		gridData.horizontalAlignment = GridData.FILL;
-		gridData.verticalAlignment = GridData.FILL;
-		gridData.grabExcessHorizontalSpace = true;
-		gridData.grabExcessVerticalSpace = true;
-		scriptText.setLayoutData(gridData);
-		gridData = new GridData();
-		gridData.horizontalAlignment = GridData.END;
-		scriptButton.setLayoutData(gridData);
-		scriptGroup.layout();
-		
-		browser.setText(html);
-		htmlText.setText(html);
-		scriptText.setText(script);
-		parent.layout();
-		
-		Listener listener = new Listener() {
-			public void handleEvent(Event e) {
-				Widget w = e.widget;
-				if (w == htmlButton) browser.setText(htmlText.getText());
-				if (w == scriptButton) browser.execute(scriptText.getText());
-			}
-		};
-		
-		htmlButton.addListener(SWT.Selection, listener);
-		scriptButton.addListener(SWT.Selection, listener);
-	}
-}
diff --git a/examples/org.eclipse.swt.examples.browser.demos/src/org/eclipse/swt/examples/browser/demos/views/PawnTab.java b/examples/org.eclipse.swt.examples.browser.demos/src/org/eclipse/swt/examples/browser/demos/views/PawnTab.java
deleted file mode 100644
index 513f12e..0000000
--- a/examples/org.eclipse.swt.examples.browser.demos/src/org/eclipse/swt/examples/browser/demos/views/PawnTab.java
+++ /dev/null
@@ -1,261 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.examples.browser.demos.views;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.browser.*;
-import org.eclipse.swt.examples.browser.demos.BrowserDemoPlugin;
-import org.eclipse.swt.examples.browser.demos.Pawns;
-
-public class PawnTab {
-
-	Action pawnAction;
-	Action editAction;
-	
-	Browser browser = null;
-	ReversiListener reversiListener;
-
-	final static int TYPE_WELCOME = 1;
-	final static int TYPE_START = 2;
-	final static int TYPE_BOARD = 3;
-	final static int TYPE_BOARD_OVER = 4;
-
-	final static String URL = "http://www.org.eclipse.swt.examples.browser.demos.pawns/";
-	static String PLUGIN_PATH = BrowserDemoPlugin.PLUGIN_PATH;
-	static String CSS_FOLDER = "css2";
-	static String URL_CSS = PLUGIN_PATH+CSS_FOLDER+"/style.css";
-	static String URL_WELCOME =PLUGIN_PATH+CSS_FOLDER+"/welcome.html";
-
-	final static String ACTION_START_2_PLAYERS = "actionstart2players";
-	final static String ACTION_START_1_PLAYER = "actionstart1player";
-	final static String ACTION_WHITE = "actionwhite";
-	final static String ACTION_BLACK = "actionblack";
-	final static String ACTION_THEME = "actiontheme";
-
-	static byte[][] game = null;
-	static boolean isWhite = true;
-	static int cntWhite = 0, cntBlack = 0;
-	static boolean computer = false;
-	static int cx, cy;
-	final static byte EMPTY = 0;
-	final static byte WHITE = 1;
-	final static byte BLACK = 2;
-	final static byte WALL = 3;
-	
-	static Pawns ttr = null;
-	static int[] move = new int[2];
-	static Menu menu = null;
-	
-	public PawnTab(TabItem item) {		
-		try {
-			browser = new Browser(item.getParent(), SWT.NONE);
-		} catch (SWTError e) {
-			e.printStackTrace();
-			return;
-		}
-		item.setText("Pawns");
-		item.setControl(browser);
-
-		menu = new Menu(browser.getShell(), SWT.POP_UP);
-		MenuItem item2 = new MenuItem(menu, SWT.PUSH);
-		item2.setText("End Game");
-		item2.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				game = null;
-				isWhite = true;
-				cntWhite = 0; cntBlack = 0;
-				ttr = null;
-				browser.setUrl(URL_WELCOME);
-			}
-		});
-		browser.setMenu(menu);
-		
-		reversiListener = new ReversiListener();
-		browser.addLocationListener(reversiListener);
-		browser.setUrl(URL_WELCOME);
-	}
-
-	static String getHtml(int type) {
-		String html = null;
-		switch (type) {
-		case TYPE_BOARD:
-		case TYPE_BOARD_OVER: {
-			html = "<html><header><link rel=\"stylesheet\" type=\"text/css\" href=\""+URL_CSS+"\"></header><body><div class=\"board\"><table><tbody>";
-			String classPlayerWhite = "playerwhite", classPlayerBlack = "playerblack";
-			if (type == TYPE_BOARD_OVER) {
-				if (cntWhite > cntBlack) {
-					classPlayerWhite += " winner";
-					classPlayerBlack += " loser";
-				} else {
-					classPlayerWhite += " loser";
-					classPlayerBlack += " winner";
-				}
-			}
-			String white = "<td class=\"white\"/>";
-			String black = "<td class=\"black\"/>";
-			String wall = "<td class=\"wall\"/>";
-			for (int i = 0; i < game.length; i++) {
-				html += "<tr>";
-				for (int j = 0; j < game[0].length; j++) {
-					switch (game[i][j]) {
-						case EMPTY: {
-							String empty = "<td class=\""+(isWhite ? "whitelink" : "blacklink")+"\">"+ (isWhite || (!isWhite && !computer) ? "<a href=\""+URL+(isWhite ? ACTION_WHITE : ACTION_BLACK)+"/xx"+i+"yy"+j+"\" class=\"empty\"/>" : "<div class=\"empty\"/>")+"</td>";
-							html += empty; break;
-						}
-						case WHITE: html += white; break;
-						case BLACK: html += black; break;
-						case WALL: html += wall; break;
-					}
-				}
-				html +="</tr>";
-			}
-			html += "</tbody></table></div>";
-			html += "<div class=\""+classPlayerWhite+"\">"+cntWhite+"</div>";
-			html += "<div class=\""+classPlayerBlack+"\">"+cntBlack+"</div>";
-			html += "</body></html>";
-			break;
-		}
-		}
-		return html;
-	}
-
-	public class ReversiListener implements LocationListener {
-		public void changed(LocationEvent e) {
-		}
-		public void changing(LocationEvent e) {
-			try {
-			final Browser browser = (Browser)e.widget;
-			if (e.location.indexOf(ACTION_START_1_PLAYER) != -1 || e.location.indexOf(ACTION_START_2_PLAYERS) != -1) {
-				computer = e.location.indexOf(ACTION_START_1_PLAYER) != -1;
-				game = new byte[8][8];
-				if (computer) ttr = new Pawns();
-				for (int i = 0; i < 5; i++) game[(int)(Math.random()*game.length)][(int)(Math.random()*game[0].length)] = WALL;
-				e.display.asyncExec(new Runnable() {
-					public void run() {
-						browser.setText(getHtml(TYPE_BOARD));
-				}});
-				e.doit = false;
-				return;
-			}
-			if (e.location.indexOf(ACTION_THEME) != -1) {
-				int index = e.location.indexOf(ACTION_THEME) + ACTION_THEME.length() + 1;
-				CSS_FOLDER = e.location.substring(index, index + 4);
-				URL_CSS = PLUGIN_PATH+CSS_FOLDER+"/style.css";
-				URL_WELCOME = PLUGIN_PATH+CSS_FOLDER+"/welcome.html";
-				e.display.asyncExec(new Runnable() {
-					public void run() {
-						browser.setUrl(URL_WELCOME);
-				}});
-				e.doit = false;
-				return;
-			}
-			byte player = EMPTY;
-			if (e.location.indexOf(ACTION_WHITE) != -1) player = WHITE;
-			else if (e.location.indexOf(ACTION_BLACK) != -1) player = BLACK;
-			if (player != EMPTY) {
-				int index = e.location.indexOf("xx") + 2;
-				int x = Integer.parseInt(e.location.substring(index, index + 1));
-				index = e.location.indexOf("yy") + 2;
-				int y = Integer.parseInt(e.location.substring(index, index + 1));
-				boolean hasMore = add(x, y, player);
-				isWhite = player != WHITE;
-				browser.setText(getHtml(hasMore ? TYPE_BOARD : TYPE_BOARD_OVER));
-				if (computer && hasMore && !isWhite) play(e.display, browser, 5000);
-				e.doit = false;
-			}
-			}catch (Exception e1 ) {
-				e1.printStackTrace();
-			}
-		}
-	}
-
-	public static boolean add(int x, int y, byte color) {
-		game[x][y] = color;
-		int cnt = Math.min(x, y), n = 0;
-		int other_color = color == WHITE ? BLACK : WHITE;
-		for (int d = 1; d <= cnt; d++) {
-			if (game[x-d][y-d] == other_color) n++;
-			else if (game[x-d][y-d] != color) break;
-			else { if (n > 0) for (d = 1; d <= n; d++) game[x-d][y-d] = color; break; }
-		}
-		cnt = Math.min(game.length - 1 - x, game[0].length - 1 - y); n = 0;
-		for (int d = 1; d <= cnt; d++) {
-			if (game[x+d][y+d] == other_color) n++;
-			else if (game[x+d][y+d] != color) break;
-			else { if (n > 0) for (d = 1; d <= n; d++) game[x+d][y+d] = color; break; }
-		}
-		cnt = Math.min(game.length - 1 - x, y); n = 0;
-		for (int d = 1; d <= cnt; d++) {
-			if (game[x+d][y-d] == other_color) n++;
-			else if (game[x+d][y-d] != color) break;
-			else { if (n > 0) for (d = 1; d <= n; d++) game[x+d][y-d] = color; break; }
-		}
-		cnt = Math.min(x, game[0].length - 1 - y); n = 0;
-		for (int d = 1; d <= cnt; d++) {
-			if (game[x-d][y+d] == other_color) n++;
-			else if (game[x-d][y+d] != color) break;
-			else { if (n > 0) for (d = 1; d <= n; d++) game[x-d][y+d] = color; break; }
-		}
-		cnt = y; n = 0;
-		for (int d = 1; d <= cnt; d++) {
-			if (game[x][y-d] == other_color) n++;
-			else if (game[x][y-d] != color) break;
-			else { if (n > 0) for (d = 1; d <= n; d++) game[x][y-d] = color; break; }
-		}
-		cnt = game[0].length - 1 - y; n = 0;
-		for (int d = 1; d <= cnt; d++) {
-			if (game[x][y+d] == other_color) n++;
-			else if (game[x][y+d] != color) break;
-			else { if (n > 0) for (d = 1; d <= n; d++) game[x][y+d] = color; break; }
-		}
-		cnt = x; n = 0;
-		for (int d = 1; d <= cnt; d++) {
-			if (game[x-d][y] == other_color) n++;
-			else if (game[x-d][y] != color) break;
-			else { if (n > 0) for (d = 1; d <= n; d++) game[x-d][y] = color; break; }
-		}
-		cnt = game.length - 1 - x; n = 0;
-		for (int d = 1; d <= cnt; d++) {
-			if (game[x+d][y] == other_color) n++;
-			else if (game[x+d][y] != color) break;
-			else { if (n > 0) for (d = 1; d <= n; d++) game[x+d][y] = color; break; }
-		}
-
-		boolean hasMore = false;
-		cntWhite = 0; cntBlack = 0;
-		for (int i = 0; i < game.length; i++)
-			for (int j = 0; j < game[0].length; j++) {
-				switch (game[i][j]) {
-					case EMPTY: hasMore = true; break;
-					case WHITE: cntWhite++; break;
-					case BLACK: cntBlack++; break;
-				}
-			}
-		return hasMore;
-	}
-	
-	public static void play(final Display display, final Browser browser, int delay) {
-		ttr.playRequest(game, BLACK);
-		display.timerExec(3000, new Runnable() {
-				public void run() {
-					ttr.getBestMove(move);
-					boolean hasMore = add(move[0], move[1], BLACK);
-					isWhite = true;
-					browser.setText(getHtml(hasMore ? TYPE_BOARD : TYPE_BOARD_OVER));
-				}
-		});
-	}
-	
-	public static void main(String[] args) {
-	}
-}
diff --git a/examples/org.eclipse.swt.examples.browser/.classpath b/examples/org.eclipse.swt.examples.browser/.classpath
deleted file mode 100644
index 7b14e15..0000000
--- a/examples/org.eclipse.swt.examples.browser/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.examples.browser/.cvsignore b/examples/org.eclipse.swt.examples.browser/.cvsignore
deleted file mode 100644
index c5e82d7..0000000
--- a/examples/org.eclipse.swt.examples.browser/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.examples.browser/.project b/examples/org.eclipse.swt.examples.browser/.project
deleted file mode 100644
index 6fd5ee5..0000000
--- a/examples/org.eclipse.swt.examples.browser/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.swt.examples.browser</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/examples/org.eclipse.swt.examples.browser/about.html b/examples/org.eclipse.swt.examples.browser/about.html
deleted file mode 100644
index 6f6b96c..0000000
--- a/examples/org.eclipse.swt.examples.browser/about.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>February 24, 2005</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.examples.browser/build.properties b/examples/org.eclipse.swt.examples.browser/build.properties
deleted file mode 100644
index ade644b..0000000
--- a/examples/org.eclipse.swt.examples.browser/build.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 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
-###############################################################################
-bin.includes = doc-html/,\
-               icons/,\
-               plugin.properties,\
-               plugin.xml,\
-               about.html,\
-	           *.jar
-
-src.includes = about.html
-	       
-source.browserexample.jar = src/
diff --git a/examples/org.eclipse.swt.examples.browser/doc-html/swt_browser_ex.html b/examples/org.eclipse.swt.examples.browser/doc-html/swt_browser_ex.html
deleted file mode 100644
index af5e181..0000000
--- a/examples/org.eclipse.swt.examples.browser/doc-html/swt_browser_ex.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <title>SWT - Controls Overview</title>
-</head>
-<body>
-
-<h2>SWT example - Browser</h2>
-
-<p>
-The Browser Example is a simple demonstration of the SWT Browser widget. 
-It consists of a composite containing a Browser widget to render HTML and some
-additional widgets to implement actions commonly found on browsers (toolbar
-with back, forward, refresh and stop buttons, status bar etc.).
-</p>
-
-<h3>Running the example</h3>
-<p>
-Follow the <a href="../../org.eclipse.swt.examples/doc-html/swt_manual_setup.html">SWT standalone examples setup</a> 
-instructions to install and run the example from your workspace.
-</p>
-<p>
-The "Main" class is <code>org.eclipse.swt.examples.browserexample.BrowserExample</code>.
-</p>
-<p>
-This example can also be run using the <a href="../../org.eclipse.swt.examples.launcher/doc-html/swt_launcher_ex.html">Example Launcher</a>.
-Select the <strong>Browser</strong> item from the <strong>Workbench Views</strong> category and click <strong>Run</strong>.
-</p>
-</body>
-</html>
diff --git a/examples/org.eclipse.swt.examples.browser/icons/browser_example.gif b/examples/org.eclipse.swt.examples.browser/icons/browser_example.gif
deleted file mode 100644
index 895e221..0000000
--- a/examples/org.eclipse.swt.examples.browser/icons/browser_example.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.browser/plugin.properties b/examples/org.eclipse.swt.examples.browser/plugin.properties
deleted file mode 100644
index b797cf2..0000000
--- a/examples/org.eclipse.swt.examples.browser/plugin.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2004 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
-###############################################################################
-providerName = Eclipse.org
-plugin.SWTBrowserExample.name = SWT Browser Example Plugin
-category.SWTExamples.name = SWT Examples
-view.BrowserExample.name = Web Browser
-
-launchcategory.SWTViewExamples.name = Workbench Views
-launchcategory.SWTViewExamples.description = \
-	A collection of Standard Widget Toolkit examples that run as Views inside the Workbench.  \
-	These examples will create a new View in the current Perspective.
-
-launchitem.BrowserExample.name = Web Browser
-launchitem.BrowserExample.description = \
-	This example demonstrates how to integrate a Web Browser with the SWT Browser widget.\n\n\
-	It consists of a composite containing a Browser widget to render HTML. \
-	Additional widgets allow the user to perform typical browser actions (for example, navigate to a particular URL, go back, forward, refresh and stop).
-
diff --git a/examples/org.eclipse.swt.examples.browser/plugin.xml b/examples/org.eclipse.swt.examples.browser/plugin.xml
deleted file mode 100644
index d553458..0000000
--- a/examples/org.eclipse.swt.examples.browser/plugin.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin
-   id="org.eclipse.swt.examples.browser"
-   name="%plugin.SWTBrowserExample.name"
-   version="3.1.0"
-   provider-name="%providerName"
-   class="org.eclipse.swt.examples.browserexample.BrowserPlugin">
-
-<!-- Runtime -->
-   <runtime>
-      <library name="browserexample.jar">
-      </library>
-   </runtime>
-<!-- Required plugins -->
-   <requires>
-      <import plugin="org.eclipse.ui.ide"/>
-      <import plugin="org.eclipse.ui.views"/>
-      <import plugin="org.eclipse.jface.text"/>
-      <import plugin="org.eclipse.ui.workbench.texteditor"/>
-      <import plugin="org.eclipse.ui.editors"/>
-      <import plugin="org.eclipse.core.runtime"/>
-      <import plugin="org.eclipse.ui"/>
-      <import plugin="org.eclipse.swt"/>
-      <import plugin="org.eclipse.swt.examples"/>
-   </requires>
-
-
-<!-- Extension points -->
-<!-- Extensions -->
-   <extension
-         point="org.eclipse.ui.views">
-      <view
-            name="%view.BrowserExample.name"
-            icon="icons/browser_example.gif"
-            category="org.eclipse.swt.examples.category"
-            class="org.eclipse.swt.examples.browserexample.BrowserView"
-            id="org.eclipse.swt.examples.browserexample.view">
-      </view>
-   </extension>
-   <extension
-         point="org.eclipse.swt.examples.launcher.launchItems">
-      <category
-            name="%launchcategory.SWTViewExamples.name"
-            description="%launchcategory.SWTViewExamples.description"
-            id="org.eclipse.swt.examples.launchViewCategory">
-      </category>
-      <item
-            name="%launchitem.BrowserExample.name"
-            icon="icons/browser_example.gif"
-            category="org.eclipse.swt.examples.launchViewCategory"
-            description="%launchitem.BrowserExample.description"
-            id="org.eclipse.swt.examples.browserexample.viewlauncher">
-         <view
-               viewId="org.eclipse.swt.examples.browserexample.view">
-         </view>
-      </item>
-   </extension>
-
-</plugin>
diff --git a/examples/org.eclipse.swt.examples.browser/src/import.properties b/examples/org.eclipse.swt.examples.browser/src/import.properties
deleted file mode 100644
index 8241dac..0000000
--- a/examples/org.eclipse.swt.examples.browser/src/import.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 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
-###############################################################################
-# Persist project settings for later import 
-natures = org.eclipse.jdt.core.javanature; org.eclipse.pde.PluginNature
-builders = org.eclipse.jdt.core.javabuilder; org.eclipse.pde.ManifestBuilder; org.eclipse.pde.SchemaBuilder
-var.ECLIPSE_PLUGINS = <<ECLIPSE_PLUGINS>>
diff --git a/examples/org.eclipse.swt.examples.browser/src/org/eclipse/swt/examples/browserexample/BrowserPlugin.java b/examples/org.eclipse.swt.examples.browser/src/org/eclipse/swt/examples/browserexample/BrowserPlugin.java
deleted file mode 100644
index 096160f..0000000
--- a/examples/org.eclipse.swt.examples.browser/src/org/eclipse/swt/examples/browserexample/BrowserPlugin.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.examples.browserexample;
-
-
-import org.eclipse.ui.plugin.*;
-
-/**
- * The main plugin class to be used in the desktop.
- */
-public class BrowserPlugin extends AbstractUIPlugin {
-	/**
-	 * The constructor.
-	 */
-	public BrowserPlugin() {
-		super();
-	}
-}
diff --git a/examples/org.eclipse.swt.examples.browser/src/org/eclipse/swt/examples/browserexample/BrowserView.java b/examples/org.eclipse.swt.examples.browser/src/org/eclipse/swt/examples/browserexample/BrowserView.java
deleted file mode 100644
index 54f6ce0..0000000
--- a/examples/org.eclipse.swt.examples.browser/src/org/eclipse/swt/examples/browserexample/BrowserView.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.examples.browserexample;
-
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.part.*;
-
-/**
- * <code>BrowserView</code> is a simple demonstration
- * of the SWT Browser widget.  It consists of a workbench
- * view and tab folder where each tab in the folder allows the
- * user to interact with a control.
- * 
- * @see ViewPart
- */
-public class BrowserView extends ViewPart {
-	BrowserExample instance = null;
-	
-	/**
-	 * Create the example
-	 * 
-	 * @see ViewPart#createPartControl
-	 */
-	public void createPartControl(Composite frame) {
-		instance = new BrowserExample(frame, true);
-	}
-
-	/**
-	 * Called when we must grab focus.
-	 * 
-	 * @see org.eclipse.ui.part.ViewPart#setFocus
-	 */
-	public void setFocus() {
-		instance.focus();
-	}
-
-	/**
-	 * Called when the View is to be disposed
-	 */	
-	public void dispose() {
-		instance.dispose();
-		instance = null;
-		super.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.examples.controls/.classpath b/examples/org.eclipse.swt.examples.controls/.classpath
deleted file mode 100755
index 065ac06..0000000
--- a/examples/org.eclipse.swt.examples.controls/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/examples/org.eclipse.swt.examples.controls/.cvsignore b/examples/org.eclipse.swt.examples.controls/.cvsignore
deleted file mode 100755
index c5e82d7..0000000
--- a/examples/org.eclipse.swt.examples.controls/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.examples.controls/.project b/examples/org.eclipse.swt.examples.controls/.project
deleted file mode 100644
index f8c68eb..0000000
--- a/examples/org.eclipse.swt.examples.controls/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.swt.examples.controls</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/examples/org.eclipse.swt.examples.controls/about.html b/examples/org.eclipse.swt.examples.controls/about.html
deleted file mode 100644
index 6f6b96c..0000000
--- a/examples/org.eclipse.swt.examples.controls/about.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>February 24, 2005</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.examples.controls/build.properties b/examples/org.eclipse.swt.examples.controls/build.properties
deleted file mode 100755
index 2d5c76f..0000000
--- a/examples/org.eclipse.swt.examples.controls/build.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 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
-###############################################################################
-bin.includes = doc-html/,\
-               icons/,\
-               plugin.properties,\
-               plugin.xml,\
-               about.html,\
-	           *.jar
-
-src.includes = about.html
-	       
-source.controls.jar = src/
diff --git a/examples/org.eclipse.swt.examples.controls/doc-html/swt_controls_ex.html b/examples/org.eclipse.swt.examples.controls/doc-html/swt_controls_ex.html
deleted file mode 100755
index 7946309..0000000
--- a/examples/org.eclipse.swt.examples.controls/doc-html/swt_controls_ex.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <title>SWT - Controls Overview</title>
-</head>
-<body>
-
-<h2>SWT example - Controls</h2>
-
-<p>
-The Controls Example is a simple demonstration of common SWT controls. 
-It consists of a tab folder where each tab in the folder allows the user 
-to interact with a different control.
-The user can change styles and settings and view how this affects each control.
-</p>
-
-<h3>Running the example</h3>
-<p>
-Follow the <a href="../../org.eclipse.swt.examples/doc-html/swt_manual_setup.html">SWT standalone examples setup</a> 
-instructions to install and run the example from your workspace.
-</p>
-<p>
-The "Main" class is <code>org.eclipse.swt.examples.controlexample.ControlExample</code>.
-</p>
-<p>
-This example can also be run using the <a href="../../org.eclipse.swt.examples.launcher/doc-html/swt_launcher_ex.html">Example Launcher</a>.
-Select the <strong>Controls</strong> item from the <strong>Workbench Views</strong> category and click <strong>Run</strong>.
-</p>
-
-</body>
-</html>
diff --git a/examples/org.eclipse.swt.examples.controls/doc-html/swt_customcontrols_ex.html b/examples/org.eclipse.swt.examples.controls/doc-html/swt_customcontrols_ex.html
deleted file mode 100644
index bdb0d27..0000000
--- a/examples/org.eclipse.swt.examples.controls/doc-html/swt_customcontrols_ex.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <title>SWT - Controls Overview</title>
-</head>
-<body>
-
-<h2>SWT example - Custom Controls</h2>
-
-<p>
-The Custom Controls example is a simple demonstration of emulated SWT controls. 
-It consists of a tab folder where each tab in the folder allows the user 
-to interact with a different emulated control.
-The user can change styles and settings and view how this affects each control.
-</p>
-
-<h3>Running the example</h3>
-<p>
-Follow the <a href="../../org.eclipse.swt.examples/doc-html/swt_manual_setup.html">SWT standalone examples setup</a> 
-instructions to install and run the example from your workspace.
-</p>
-<p>
-The "Main" class is <code>org.eclipse.swt.examples.controlexample.CustomControlExample</code>.
-</p>
-<p>
-This example can also be run using the <a href="../../org.eclipse.swt.examples.launcher/doc-html/swt_launcher_ex.html">Example Launcher</a>.
-Select the <strong>Custom Controls</strong> item from the <strong>Workbench Views</strong> category and click <strong>Run</strong>.
-</p>
-
-</body>
-</html>
diff --git a/examples/org.eclipse.swt.examples.controls/icons/controls_example.gif b/examples/org.eclipse.swt.examples.controls/icons/controls_example.gif
deleted file mode 100755
index cbdee97..0000000
--- a/examples/org.eclipse.swt.examples.controls/icons/controls_example.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.controls/plugin.properties b/examples/org.eclipse.swt.examples.controls/plugin.properties
deleted file mode 100755
index 107c0cd..0000000
--- a/examples/org.eclipse.swt.examples.controls/plugin.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 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
-###############################################################################
-providerName = Eclipse.org
-plugin.SWTControlsExample.name = SWT Controls Example Plugin
-category.SWTExamples.name = SWT Examples
-view.ControlsExample.name = SWT Controls
-view.CustomControlsExample.name = SWT Custom Controls
-
-launchcategory.SWTViewExamples.name = Workbench Views
-launchcategory.SWTViewExamples.description = \
-	A collection of Standard Widget Toolkit examples that run as Views inside the Workbench.  \
-	These examples will create a new View in the current Perspective.
-
-launchitem.ControlsExample.name = Controls
-launchitem.ControlsExample.description = \
-	This example is a simple demonstration of native SWT controls.\n\n\
-	It consists of a tab folder where each tab allows the user \
-	to interact with a different SWT control. \
-	The user can change styles and settings and view how this affects the control.
-	
-launchitem.CustomControlsExample.name = Custom Controls
-launchitem.CustomControlsExample.description = \
-	This example is a simple demonstration of custom SWT controls.\n\n\
-	It consists of a tab folder where each tab allows the user \
-	to interact with a different SWT custom control. \
-	The user can change styles and settings and view how this affects the control.
diff --git a/examples/org.eclipse.swt.examples.controls/plugin.xml b/examples/org.eclipse.swt.examples.controls/plugin.xml
deleted file mode 100755
index b649483..0000000
--- a/examples/org.eclipse.swt.examples.controls/plugin.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin
-   id="org.eclipse.swt.examples.controls"
-   name="%plugin.SWTControlsExample.name"
-   version="3.1.0"
-   provider-name="%providerName"
-   class="org.eclipse.swt.examples.controls.ControlPlugin">
-
-<!-- Runtime -->
-   <runtime>
-      <library name="controls.jar">
-      </library>
-   </runtime>
-<!-- Required plugins -->
-   <requires>
-      <import plugin="org.eclipse.ui.ide"/>
-      <import plugin="org.eclipse.ui.views"/>
-      <import plugin="org.eclipse.jface.text"/>
-      <import plugin="org.eclipse.ui.workbench.texteditor"/>
-      <import plugin="org.eclipse.ui.editors"/>
-      <import plugin="org.eclipse.core.runtime"/>
-      <import plugin="org.eclipse.ui"/>
-      <import plugin="org.eclipse.swt"/>
-      <import plugin="org.eclipse.swt.examples"/>
-   </requires>
-
-
-<!-- Extension points -->
-<!-- Extensions -->
-   <extension
-         point="org.eclipse.ui.views">
-      <view
-            name="%view.ControlsExample.name"
-            icon="icons/controls_example.gif"
-            category="org.eclipse.swt.examples.category"
-            class="org.eclipse.swt.examples.controls.ControlView"
-            id="org.eclipse.swt.examples.controls.view">
-      </view>
-      <view
-            name="%view.CustomControlsExample.name"
-            icon="icons/controls_example.gif"
-            category="org.eclipse.swt.examples.category"
-            class="org.eclipse.swt.examples.controls.CustomControlView"
-            id="org.eclipse.swt.examples.customcontrols.view">
-      </view>
-   </extension>
-   <extension
-         point="org.eclipse.swt.examples.launcher.launchItems">
-      <category
-            name="%launchcategory.SWTViewExamples.name"
-            description="%launchcategory.SWTViewExamples.description"
-            id="org.eclipse.swt.examples.launchViewCategory">
-      </category>
-      <item
-            name="%launchitem.ControlsExample.name"
-            icon="icons/controls_example.gif"
-            description="%launchitem.ControlsExample.description"
-            category="org.eclipse.swt.examples.launchViewCategory"
-            id="org.eclipse.swt.examples.controls.viewlauncher">
-         <view
-               viewId="org.eclipse.swt.examples.controls.view">
-         </view>
-      </item>
-      <item
-            name="%launchitem.CustomControlsExample.name"
-            icon="icons/controls_example.gif"
-            description="%launchitem.CustomControlsExample.description"
-            category="org.eclipse.swt.examples.launchViewCategory"
-            id="org.eclipse.swt.examples.customcontrols.viewlauncher">
-         <view
-               viewId="org.eclipse.swt.examples.customcontrols.view">
-         </view>
-      </item>
-   </extension>
-
-</plugin>
diff --git a/examples/org.eclipse.swt.examples.controls/src/import.properties b/examples/org.eclipse.swt.examples.controls/src/import.properties
deleted file mode 100644
index 8241dac..0000000
--- a/examples/org.eclipse.swt.examples.controls/src/import.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 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
-###############################################################################
-# Persist project settings for later import 
-natures = org.eclipse.jdt.core.javanature; org.eclipse.pde.PluginNature
-builders = org.eclipse.jdt.core.javabuilder; org.eclipse.pde.ManifestBuilder; org.eclipse.pde.SchemaBuilder
-var.ECLIPSE_PLUGINS = <<ECLIPSE_PLUGINS>>
diff --git a/examples/org.eclipse.swt.examples.controls/src/org/eclipse/swt/examples/controls/ControlPlugin.java b/examples/org.eclipse.swt.examples.controls/src/org/eclipse/swt/examples/controls/ControlPlugin.java
deleted file mode 100755
index 5eb6d55..0000000
--- a/examples/org.eclipse.swt.examples.controls/src/org/eclipse/swt/examples/controls/ControlPlugin.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.examples.controls;
-
-
-import org.eclipse.ui.plugin.*;
-
-/**
- * The main plugin class to be used in the desktop.
- */
-public class ControlPlugin extends AbstractUIPlugin {
-	/**
-	 * The constructor.
-	 */
-	public ControlPlugin() {
-		super();
-	}
-}
diff --git a/examples/org.eclipse.swt.examples.controls/src/org/eclipse/swt/examples/controls/ControlView.java b/examples/org.eclipse.swt.examples.controls/src/org/eclipse/swt/examples/controls/ControlView.java
deleted file mode 100755
index da95327..0000000
--- a/examples/org.eclipse.swt.examples.controls/src/org/eclipse/swt/examples/controls/ControlView.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.examples.controls;
-
- 
-import org.eclipse.swt.examples.controlexample.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.part.*;
-
-/**
- * <code>Controls</code> is a simple demonstration
- * of the native controls defined by SWT.  It consists of a workbench
- * view and tab folder where each tab in the folder allows the
- * user to interact with a control.
- * 
- * @see ViewPart
- */
-public class ControlView extends ViewPart {
-	ControlExample instance = null;
-	
-	/**
-	 * Create the example
-	 * 
-	 * @see ViewPart#createPartControl
-	 */
-	public void createPartControl(Composite frame) {
-		instance = new ControlExample(frame);
-	}
-
-	/**
-	 * Called when we must grab focus.
-	 * 
-	 * @see org.eclipse.ui.part.ViewPart#setFocus
-	 */
-	public void setFocus() {
-		instance.setFocus();
-	}
-
-	/**
-	 * Called when the View is to be disposed
-	 */	
-	public void dispose() {
-		instance.dispose();
-		instance = null;
-		super.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.examples.controls/src/org/eclipse/swt/examples/controls/CustomControlView.java b/examples/org.eclipse.swt.examples.controls/src/org/eclipse/swt/examples/controls/CustomControlView.java
deleted file mode 100644
index 054302d..0000000
--- a/examples/org.eclipse.swt.examples.controls/src/org/eclipse/swt/examples/controls/CustomControlView.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.examples.controls;
-
-
-import org.eclipse.swt.examples.controlexample.*;
-import org.eclipse.swt.widgets.*;
-
-/**
- * <code>CustomControls</code> is a simple demonstration
- * of the custom controls defined by SWT.  It consists of a workbench
- * view and tab folder where each tab in the folder allows the
- * user to interact with a control.
- * 
- * @see ViewPart
- */
-public class CustomControlView extends ControlView {
-
-	/**
-	 * Create the example
-	 * 
-	 * @see ViewPart#createPartControl
-	 */
-	public void createPartControl(Composite frame) {
-		instance = new CustomControlExample(frame);
-	}
-}
diff --git a/examples/org.eclipse.swt.examples.launcher/.classpath b/examples/org.eclipse.swt.examples.launcher/.classpath
deleted file mode 100755
index 065ac06..0000000
--- a/examples/org.eclipse.swt.examples.launcher/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/examples/org.eclipse.swt.examples.launcher/.cvsignore b/examples/org.eclipse.swt.examples.launcher/.cvsignore
deleted file mode 100755
index c5e82d7..0000000
--- a/examples/org.eclipse.swt.examples.launcher/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.examples.launcher/.project b/examples/org.eclipse.swt.examples.launcher/.project
deleted file mode 100644
index 08cc7ff..0000000
--- a/examples/org.eclipse.swt.examples.launcher/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.swt.examples.launcher</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/examples/org.eclipse.swt.examples.launcher/about.html b/examples/org.eclipse.swt.examples.launcher/about.html
deleted file mode 100644
index 6f6b96c..0000000
--- a/examples/org.eclipse.swt.examples.launcher/about.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>February 24, 2005</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.examples.launcher/build.properties b/examples/org.eclipse.swt.examples.launcher/build.properties
deleted file mode 100755
index 219e498..0000000
--- a/examples/org.eclipse.swt.examples.launcher/build.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 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
-###############################################################################
-bin.includes = doc/,\
-               doc-html/,\
-               icons/,\
-               schema/,\
-               plugin.properties,\
-               plugin.xml,\
-               about.html,\
-	           *.jar
-	           
-src.includes = about.html
-
-source.launcher.jar = src/
diff --git a/examples/org.eclipse.swt.examples.launcher/doc-html/swt_launcher_ex.html b/examples/org.eclipse.swt.examples.launcher/doc-html/swt_launcher_ex.html
deleted file mode 100755
index b5f4f8c..0000000
--- a/examples/org.eclipse.swt.examples.launcher/doc-html/swt_launcher_ex.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <title>SWT - Example Launcher</title>
-</head>
-<body>
-
-<h2>SWT Example Launcher</h2>
-
-<p>
-The Example Launcher is used to launch SWT examples, which can either be Workbench views 
-or standalone applications.
-</p>
-
-<ul>
-<li>Workbench views are examples that are integrated into Eclipse.  When the launcher
-starts a Workbench view, it is opened in the currently active perspective.
-<li>Standalone applications are launched in a separate window.
-</ul>
-
-<p>
-For information on how to run the standalone examples without the SWT Example Launcher, 
-refer to <a href="../../org.eclipse.swt.examples/doc-html/swt_manual_setup.html">SWT standalone examples setup</a>.
-</p>
-<p>
-The SWT Workbench view examples can also be launched directly without using the SWT Example 
-Launcher.  SWT Workbench view examples can be found under the <strong>SWT Examples</strong> category of the 
-<strong>Show Views</strong> dialog.
-</p>
-
-<h3>Running the Example Launcher</h3>
-
-<p>
-From Eclipse's <strong>Window</strong> menu, select <strong>Show View &gt; Other</strong>. 
-In the <strong>Show View</strong> dialog, expand <strong>SWT Examples</strong> and select the <strong>SWT Example Launcher</strong> view. 
-A view containing a list of examples will appear in your current perspective.
-When you select an example from the list a brief description of the example is displayed.
-Click on the <strong>Run</strong> button to launch the example.
-</p>
-
-</body>
-</html>
diff --git a/examples/org.eclipse.swt.examples.launcher/doc/org.eclipse.swt.examples.launcher.launchItems.html b/examples/org.eclipse.swt.examples.launcher/doc/org.eclipse.swt.examples.launcher.launchItems.html
deleted file mode 100755
index 3edf918..0000000
--- a/examples/org.eclipse.swt.examples.launcher/doc/org.eclipse.swt.examples.launcher.launchItems.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HEAD>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-</HEAD>
-<HTML>
-<BODY>
-<H1><CENTER>Launch Items</CENTER></H1>
-<H2>Identifier</H2>
-org.eclipse.swt.examples.launcher.launchItems<H2>Description</H2>
-This extension point is used to add 'standalone program' and
-'Workbench view'
-launch items to the Launcher, optionally grouping them into
-categories so as to form a multi-tiered hierarchy.
-Standalone programs are executed using the platform's event loop.
-Workbench views are created within the active Workbench Perspective.<H2>Markup</H2>
-<p><samp>&nbsp;&nbsp; &lt;!ELEMENT extension EMPTY&gt;</samp>
-<br><samp>&nbsp;&nbsp; &lt;!ATTLIST extension</samp>
-<br><samp>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;point&nbsp;CDATA #REQUIRED</samp>
-<br><samp>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</samp>
-<br><samp>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;&nbsp;CDATA #IMPLIED</samp>
-<br><samp>&nbsp;&nbsp; &gt;</samp>
-<ul>
-<li><b>point</b> - </li><li><b>id</b> - </li><li><b>name</b> - </li></ul>
-<p><samp>&nbsp;&nbsp; &lt;!ELEMENT program EMPTY&gt;</samp>
-<br><samp>&nbsp;&nbsp; &lt;!ATTLIST program</samp>
-<br><samp>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mainClass&nbsp;CDATA #REQUIRED</samp>
-<br><samp>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pluginId&nbsp;&nbsp;CDATA #REQUIRED</samp>
-<br><samp>&nbsp;&nbsp; &gt;</samp>
-<ul>
-<li><b>mainClass</b> - The fully-qualified name of the class whose main() method is to be launched.</li><li><b>pluginId</b> - The unique id of the Eclipse Platform plugin containing the program.</li></ul>
-<p><samp>&nbsp;&nbsp; &lt;!ELEMENT view EMPTY&gt;</samp>
-<br><samp>&nbsp;&nbsp; &lt;!ATTLIST view</samp>
-<br><samp>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;viewId&nbsp;CDATA #REQUIRED</samp>
-<br><samp>&nbsp;&nbsp; &gt;</samp>
-<ul>
-<li><b>viewId</b> - The unique id of the Workbench View to be activated when the item is launched.</li></ul>
-<p><samp>&nbsp;&nbsp; &lt;!ELEMENT category EMPTY&gt;</samp>
-<br><samp>&nbsp;&nbsp; &lt;!ATTLIST category</samp>
-<br><samp>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</samp>
-<br><samp>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</samp>
-<br><samp>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;category&nbsp;CDATA #IMPLIED</samp>
-<br><samp>&nbsp;&nbsp; &gt;</samp>
-<ul>
-<li><b>name</b> - The localized name of this category.</li><li><b>id</b> - The unique id of this category.  Categories with duplicate id's will be discarded.</li><li><b>category</b> - The unique id of the parent category.</li></ul>
-<p><samp>&nbsp;&nbsp; &lt;!ELEMENT item EMPTY&gt;</samp>
-<br><samp>&nbsp;&nbsp; &lt;!ATTLIST item</samp>
-<br><samp>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</samp>
-<br><samp>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED</samp>
-<br><samp>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;category&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</samp>
-<br><samp>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;icon&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED</samp>
-<br><samp>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enabled&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true | false) "false""true"</samp>
-<br><samp>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;description&nbsp;CDATA #IMPLIED</samp>
-<br><samp>&nbsp;&nbsp; &gt;</samp>
-<ul>
-<li><b>name</b> - The localized name of this launch item.</li><li><b>id</b> - The unique id of this launch item. Launch items with duplicate id's will be discarded.</li><li><b>category</b> - The unique id of the category this launch item belongs to.</li><li><b>icon</b> - The declaring plugin relative path of an icon to display with this launch item in the Launcher.</li><li><b>enabled</b> - Set to "false" to disable this launch item, or to "true" to enable it (default).</li><li><b>description</b> - The localized plain-text description of this launch item.</li></ul>
-<H2>Example</H2>
-<H2>API Information</H2>
-<H2>Supplied Implementation</H2>
-</BODY>
-</HTML>
diff --git a/examples/org.eclipse.swt.examples.launcher/icons/closedFolder.gif b/examples/org.eclipse.swt.examples.launcher/icons/closedFolder.gif
deleted file mode 100755
index beb6ed1..0000000
--- a/examples/org.eclipse.swt.examples.launcher/icons/closedFolder.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.launcher/icons/generic_example.gif b/examples/org.eclipse.swt.examples.launcher/icons/generic_example.gif
deleted file mode 100755
index f9fb6b0..0000000
--- a/examples/org.eclipse.swt.examples.launcher/icons/generic_example.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.launcher/icons/launcher_example.gif b/examples/org.eclipse.swt.examples.launcher/icons/launcher_example.gif
deleted file mode 100755
index 3ab4d32..0000000
--- a/examples/org.eclipse.swt.examples.launcher/icons/launcher_example.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.launcher/icons/openFolder.gif b/examples/org.eclipse.swt.examples.launcher/icons/openFolder.gif
deleted file mode 100755
index a9c77734..0000000
--- a/examples/org.eclipse.swt.examples.launcher/icons/openFolder.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.launcher/plugin.properties b/examples/org.eclipse.swt.examples.launcher/plugin.properties
deleted file mode 100755
index 5a03aa1..0000000
--- a/examples/org.eclipse.swt.examples.launcher/plugin.properties
+++ /dev/null
@@ -1,49 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 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
-###############################################################################
-providerName = Eclipse.org
-plugin.SWTLauncherExample.name = SWT Launcher Example Plugin
-category.SWTExamples.name = SWT Examples
-view.LauncherExample.name = SWT Example Launcher
-
-extension-point.launchItems.name = Launch Items
-
-launchcategory.SWTViewExamples.name = Workbench Views
-launchcategory.SWTViewExamples.description = \
-	A collection of Standard Widget Toolkit examples that run as Views inside the Workbench.  \
-	These examples will create a new View in the current Perspective.
-
-launchitem.LauncherExample.name = Launcher
-launchitem.LauncherExample.description = \
-	The Example Launcher is used to launch SWT examples which can either be \
-	Workbench Views, or Standalone applications.\n\n\
-	Workbench Views are examples that are integrated into Eclipse.  When the Launcher \
-	starts a Workbench View, it is opened in the currently active perspective.\n\n\
-	Standalone applications are launched in a separate window.
-
-error.CouldNotLoadResources = Unable to load resources
-error.CouldNotFindRegisteredExtensions = Could Not Find Registered Extensions
-error.IncompleteProgramLaunchItem = Incomplete XML ProgramLaunchItem definition, id = {0}
-error.IncompleteViewLaunchItem = Incomplete XML ViewLaunchItem definition, id = {0}
-error.IncompleteLaunchItem = Incomplete or unrecognized XML LaunchItem definition, id = {0}
-
-launchitem.Null.description = <<no item selected>>
-
-launchitem.Missing.name = <<unnamed>>
-launchitem.Missing.description = <<no description available>>
-
-view.launchGroup.text = Examples
-view.launchButton.text = Run
-view.descriptionGroup.text = Description
-
-run.error.Invocation = A fatal error occurred while launching the program.
-run.error.DoesNotImplementMethod = The class does not implement the open() method.
-run.error.CouldNotFindClass = Could not find the class to run.
-run.error.CouldNotInstantiateClass = Could not instantiate the class to run.
diff --git a/examples/org.eclipse.swt.examples.launcher/plugin.xml b/examples/org.eclipse.swt.examples.launcher/plugin.xml
deleted file mode 100755
index 40281b4..0000000
--- a/examples/org.eclipse.swt.examples.launcher/plugin.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin
-   id="org.eclipse.swt.examples.launcher"
-   name="%plugin.SWTLauncherExample.name"
-   version="3.1.0"
-   provider-name="%providerName"
-   class="org.eclipse.swt.examples.launcher.LauncherPlugin">
-
-<!-- Runtime -->
-<!-- Runtime -->
-<!-- Runtime -->
-<!-- Runtime -->
-   <runtime>
-      <library name="launcher.jar">
-      </library>
-   </runtime>
-<!-- Required plugins -->
-   <requires>
-      <import plugin="org.eclipse.ui.ide"/>
-      <import plugin="org.eclipse.ui.views"/>
-      <import plugin="org.eclipse.jface.text"/>
-      <import plugin="org.eclipse.ui.workbench.texteditor"/>
-      <import plugin="org.eclipse.ui.editors"/>
-      <import plugin="org.eclipse.core.runtime"/>
-      <import plugin="org.eclipse.core.resources"/>
-      <import plugin="org.eclipse.ui"/>
-      <import plugin="org.eclipse.swt"/>
-      <import plugin="org.eclipse.jdt.launching"/>
-      <import plugin="org.eclipse.debug.core"/>
-      <import plugin="org.eclipse.core.boot"/>
-      <import plugin="org.eclipse.jdt.core"/>
-   </requires>
-
-
-<!-- Extension points -->
-   <extension-point id="launchItems" name="%extension-point.launchItems.name" schema="schema/org.eclipse.swt.examples.launcher.launchItems.exsd"/>
-
-<!-- Extensions -->
-   <extension
-         id="application"
-         point="org.eclipse.core.runtime.applications">
-   </extension>
-   <extension
-         point="org.eclipse.ui.views">
-      <category
-            name="%category.SWTExamples.name"
-            id="org.eclipse.swt.examples.category">
-      </category>
-      <view
-            name="%view.LauncherExample.name"
-            icon="icons/launcher_example.gif"
-            category="org.eclipse.swt.examples.category"
-            class="org.eclipse.swt.examples.launcher.LauncherView"
-            id="org.eclipse.swt.examples.launcher.view">
-      </view>
-   </extension>
-   <extension
-         point="org.eclipse.swt.examples.launcher.launchItems">
-      <category
-            name="%launchcategory.SWTViewExamples.name"
-            description="%launchcategory.SWTViewExamples.description"
-            id="org.eclipse.swt.examples.launchViewCategory">
-      </category>
-      <item
-            name="%launchitem.LauncherExample.name"
-            enabled="false"
-            icon="icons/launcher_example.gif"
-            description="%launchitem.LauncherExample.description"
-            category="org.eclipse.swt.examples.launchViewCategory"
-            id="org.eclipse.swt.examples.launcher.viewlauncher">
-         <view
-               viewId="org.eclipse.swt.examples.launcher.view">
-         </view>
-      </item>
-   </extension>
-
-</plugin>
diff --git a/examples/org.eclipse.swt.examples.launcher/schema/org.eclipse.swt.examples.launcher.launchItems.exsd b/examples/org.eclipse.swt.examples.launcher/schema/org.eclipse.swt.examples.launcher.launchItems.exsd
deleted file mode 100644
index 30b7d8b..0000000
--- a/examples/org.eclipse.swt.examples.launcher/schema/org.eclipse.swt.examples.launcher.launchItems.exsd
+++ /dev/null
@@ -1,222 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.swt.examples.launcher">
-<annotation>
-      <appInfo>
-         <meta.schema plugin="org.eclipse.swt.examples.launcher" id="launchItems" name="Launch Items"/>
-      </appInfo>
-      <documentation>
-         This extension point is used to add &apos;standalone program&apos; and
-&apos;Workbench view&apos;
-launch items to the Launcher, optionally grouping them into
-categories so as to form a multi-tiered hierarchy.
-Standalone programs are executed using the platform&apos;s event loop.
-Workbench views are created within the active Workbench Perspective.
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <complexType>
-         <choice minOccurs="0" maxOccurs="unbounded">
-            <element ref="category"/>
-            <element ref="item"/>
-         </choice>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="name" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="program">
-      <annotation>
-         <documentation>
-            Specifies a &quot;Standalone Program&quot; for a launch item to run.
-         </documentation>
-      </annotation>
-      <complexType>
-         <attribute name="mainClass" type="string" use="required">
-            <annotation>
-               <documentation>
-                  The fully-qualified name of the class whose main() method is to be launched.
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="pluginId" type="string" use="required">
-            <annotation>
-               <documentation>
-                  The unique id of the Eclipse Platform plugin containing the program.
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="view">
-      <annotation>
-         <documentation>
-            Specifies a &quot;Workbench View&quot; for a launch item to activate.
-         </documentation>
-      </annotation>
-      <complexType>
-         <attribute name="viewId" type="string" use="required">
-            <annotation>
-               <documentation>
-                  The unique id of the Workbench View to be activated when the item is launched.
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="category">
-      <annotation>
-         <documentation>
-            Specifies a launch item category heading.
-         </documentation>
-      </annotation>
-      <complexType>
-         <attribute name="name" type="string" use="required">
-            <annotation>
-               <documentation>
-                  The localized name of this category.
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string" use="required">
-            <annotation>
-               <documentation>
-                  The unique id of this category.  Categories with duplicate id&apos;s will be discarded.
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="category" type="string">
-            <annotation>
-               <documentation>
-                  The unique id of the parent category.
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="description" type="string">
-            <annotation>
-               <documentation>
-                  Specifies a launch item category description.
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="item">
-      <annotation>
-         <documentation>
-            Specifies a launch item.
-         </documentation>
-      </annotation>
-      <complexType>
-         <choice>
-            <element ref="view"/>
-            <element ref="program"/>
-         </choice>
-         <attribute name="name" type="string" use="required">
-            <annotation>
-               <documentation>
-                  The localized name of this launch item.
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string" use="required">
-            <annotation>
-               <documentation>
-                  The unique id of this launch item. Launch items with duplicate id&apos;s will be discarded.
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="category" type="string">
-            <annotation>
-               <documentation>
-                  The unique id of the category this launch item belongs to.
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="icon" type="string">
-            <annotation>
-               <documentation>
-                  The declaring plugin relative path of an icon to display with this launch item in the Launcher.
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="enabled" type="boolean" use="default" value="true">
-            <annotation>
-               <documentation>
-                  Set to &quot;false&quot; to disable this launch item, or to &quot;true&quot; to enable it (default).
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="description" type="string">
-            <annotation>
-               <documentation>
-                  The localized plain-text description of this launch item.
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="copyright"/>
-      </appInfo>
-      <documentation>
-         Copyright (c) 2002, 2004 IBM Corporation and others.&lt;br&gt;
-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 &lt;a 
-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
-      </documentation>
-   </annotation>
-</schema>
diff --git a/examples/org.eclipse.swt.examples.launcher/src/import.properties b/examples/org.eclipse.swt.examples.launcher/src/import.properties
deleted file mode 100644
index 8241dac..0000000
--- a/examples/org.eclipse.swt.examples.launcher/src/import.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 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
-###############################################################################
-# Persist project settings for later import 
-natures = org.eclipse.jdt.core.javanature; org.eclipse.pde.PluginNature
-builders = org.eclipse.jdt.core.javabuilder; org.eclipse.pde.ManifestBuilder; org.eclipse.pde.SchemaBuilder
-var.ECLIPSE_PLUGINS = <<ECLIPSE_PLUGINS>>
diff --git a/examples/org.eclipse.swt.examples.launcher/src/org/eclipse/swt/examples/launcher/ItemDescriptor.java b/examples/org.eclipse.swt.examples.launcher/src/org/eclipse/swt/examples/launcher/ItemDescriptor.java
deleted file mode 100755
index fc105f2..0000000
--- a/examples/org.eclipse.swt.examples.launcher/src/org/eclipse/swt/examples/launcher/ItemDescriptor.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.examples.launcher;
-
-
-import org.eclipse.core.runtime.*;
-import org.eclipse.swt.graphics.*;
-
-/**
- * ItemDescriptor collects information about a launch item.
- */
-class ItemDescriptor {
-	private String id;
-	private String name;
-	private String description;
-	private Image  icon;
-	private String view;
-	private String mainType;
-	private String pluginId;
-	private IConfigurationElement element;
-	
-	
-	/**
-	 * Constructs an ItemDescriptor.
-	 *
-	 * @param id the id
-	 * @param name the name
-	 * @param description the description
-	 * @param icon the icon
-	 * @param view the host view may be null if it is a standalone application
-	 * @param mainType the fully qualified class name to run may be null if it is a view
-	 * @param pluginId the name of the plugin which contains the main class
-	 */
-	public ItemDescriptor(String id, String name, String description,
-		Image icon, String view, String mainType, String pluginId, IConfigurationElement element) {
-		this.id = id;
-		this.name = name;
-		this.description = description;
-		this.icon = icon;
-		this.view = view;
-		this.mainType = mainType;
-		this.pluginId = pluginId;
-		this.element = element;
-	}
-
-	/**
-	 * Creates and returns an instance of the extension's specified type,
-	 * or <code>null</code> if no type was specified by the extension.
-	 * 
-	 * @return an instance of the extension's specified type or <code>null</code>
-	 */
-	public Object createItemInstance() throws CoreException {
-		if (element == null) return null;
-		return element.createExecutableExtension(LauncherPlugin.LAUNCH_ITEMS_XML_PROGRAM_CLASS);
-	}
-
-	/**
-	 * Returns the ID for this program.
-	 *
-	 * @return the user-specified ID for this program
-	 */
-	public String getId() {
-		return id;
-	}
-	
-	/**
-	 * Returns the translated name for the program.
-	 * 
-	 * @return the name of the program
-	 */
-	public String getName() {
-		return name;
-	}
-	
-	/**
-	 * Returns a short description for the program.
-	 * 
-	 * @return a newline-delimited string describing the program, null if no description is available
-	 */
-	public String getDescription() {
-		return description;
-	}
-
-	/**
-	 * Returns an icon for this descriptor
-	 * 
-	 * @returns an icon, null if the item is a folder
-	 */
-	public Image getIcon() {
-		return icon;
-	}
-	
-	/**
-	 * Returns the host view for the program.
-	 * 
-	 * @return the host view, null if the item is a standalone program.
-	 */
-	public String getView () {
-		return view;
-	}
-	
-	/**
-	 * Returns the fully qualified class to run
-	 * for the program.
-	 * 
-	 * @return the class to run for the program.
-	 */
-	public String getMainType () {
-		return mainType;
-	}
-	
-	/**
-	 * Returns the name of the plugin that contains the program.
-	 * 
-	 * @return the name of the plugin that contains the program.
-	 */
-	public String getPluginId () {
-		return pluginId;
-	}
-	
-	/**
-	 * Determines if an item is a folder.
-	 *
-	 * @return true if the item is a folder
-	 */
-	public boolean isFolder() {
-		return (mainType == null && view == null);
-	}
-	
-	/**
-	 * Determines the equality of descriptors.
-	 * 
-	 * @return true if this.getId().equalsIgnoreCase(other.getId())
-	 */
-	public boolean equals(Object other) {
-		if (other instanceof ItemDescriptor) {
-			ItemDescriptor otherDescriptor = (ItemDescriptor) other;
-			return getId().equalsIgnoreCase(otherDescriptor.getId());
-		}
-		return false;
-	}
-	
-	/**
-	 * Produces a hashcode.
-	 * 
-	 * @return the hashcode
-	 */
-	public int hashCode() {
-		return id.toUpperCase().hashCode();
-	}
-}
diff --git a/examples/org.eclipse.swt.examples.launcher/src/org/eclipse/swt/examples/launcher/ItemTreeNode.java b/examples/org.eclipse.swt.examples.launcher/src/org/eclipse/swt/examples/launcher/ItemTreeNode.java
deleted file mode 100755
index 06030a5..0000000
--- a/examples/org.eclipse.swt.examples.launcher/src/org/eclipse/swt/examples/launcher/ItemTreeNode.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.examples.launcher;
-
-
-/**
- * Internal class used to store tree structures of ItemDescriptors
- */
-class ItemTreeNode {
-	private ItemTreeNode nextSibling;
-	private ItemTreeNode firstChild;
-	private ItemDescriptor descriptor;
-
-	/**
-	 * Constructs a leaf ItemTreeNode with a given descriptor.
-	 * 
-	 * @param descriptor the descriptor
-	 */
-	public ItemTreeNode(ItemDescriptor descriptor) {
-		this.descriptor = descriptor;
-	}
-
-	/**
-	 * Adds a node to the Tree in sorted order by name.
-	 * 
-	 * @param node the node to add. Note that node.nextSibling must be null
-	 */
-	public void addSortedNode(ItemTreeNode node) {
-		if (firstChild == null) {
-			firstChild = node;
-		} else if (firstChild.descriptor.getName().compareTo(node.descriptor.getName()) > 0) {
-			node.nextSibling = firstChild;
-			firstChild = node;
-		} else {
-			ItemTreeNode cursor;
-			for (cursor = firstChild; cursor.nextSibling != null; cursor = cursor.nextSibling) {
-				ItemTreeNode sibling = cursor.nextSibling;
-				if (sibling.descriptor.getName().compareTo(node.descriptor.getName()) > 0) break;
-			}
-			node.nextSibling = cursor.nextSibling;
-			cursor.nextSibling = node;
-		}
-	}
-	
-	/**
-	 * Returns the descriptor for this node.
-	 * 
-	 * @return the descriptor
-	 */
-	public ItemDescriptor getDescriptor() {
-		return descriptor;
-	}
-
-	/**
-	 * Returns the next sibling of this node.
-	 * 
-	 * @return the next sibling, or null if none
-	 */
-	public ItemTreeNode getNextSibling() {
-		return nextSibling;
-	}
-
-	/**
-	 * Returns the first child of this node.
-	 * 
-	 * @return the first child, or null if none
-	 */
-	public ItemTreeNode getFirstChild() {
-		return firstChild;
-	}
-}
diff --git a/examples/org.eclipse.swt.examples.launcher/src/org/eclipse/swt/examples/launcher/LauncherPlugin.java b/examples/org.eclipse.swt.examples.launcher/src/org/eclipse/swt/examples/launcher/LauncherPlugin.java
deleted file mode 100755
index 11ef335..0000000
--- a/examples/org.eclipse.swt.examples.launcher/src/org/eclipse/swt/examples/launcher/LauncherPlugin.java
+++ /dev/null
@@ -1,396 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.examples.launcher;
-
-
-import java.io.*;
-import java.net.*;
-import java.text.*;
-import java.util.*;
-
-import org.eclipse.core.runtime.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.ui.plugin.*;
-import org.osgi.framework.*;
-
-/**
- * The main plugin class to be used in the desktop.
- */
-public class LauncherPlugin extends AbstractUIPlugin {
-	//The shared instance.
-	private static LauncherPlugin plugin;
-	private static ResourceBundle resourceBundle;
-
-	public static final String
-		LAUNCH_ITEMS_POINT_ID = "org.eclipse.swt.examples.launcher.launchItems",
-		LAUNCH_ITEMS_XML_CATEGORY = "category",
-		LAUNCH_ITEMS_XML_ITEM = "item",
-		LAUNCH_ITEMS_XML_ITEM_ICON = "icon",
-		LAUNCH_ITEMS_XML_ITEM_DESCRIPTION = "description",
-		LAUNCH_ITEMS_XML_PROGRAM = "program",
-		LAUNCH_ITEMS_XML_PROGRAM_PLUGIN = "pluginId",
-		LAUNCH_ITEMS_XML_PROGRAM_CLASS = "mainClass",
-		LAUNCH_ITEMS_XML_VIEW = "view",
-		LAUNCH_ITEMS_XML_VIEW_VIEWID = "viewId",
-		LAUNCH_ITEMS_XML_ATTRIB_ID = "id",
-		LAUNCH_ITEMS_XML_ATTRIB_NAME = "name",
-		LAUNCH_ITEMS_XML_ATTRIB_ENABLED = "enabled",
-		LAUNCH_ITEMS_XML_ATTRIB_CATEGORY = "category",
-		LAUNCH_ITEMS_XML_VALUE_TRUE = "true",
-		LAUNCH_ITEMS_XML_VALUE_FALSE = "false";		
-
-	static final int
-		liClosedFolder = 0,
-		liOpenFolder = 1,
-		liGenericExample = 2;
-	static final String[] imageLocations = {
-		"icons/closedFolder.gif",
-		"icons/openFolder.gif",
-		"icons/generic_example.gif" };
-	static Image images[];
-
-	/**
-	 * Constructs the LauncherPlugin.
-	 */
-	public LauncherPlugin() {
-		super();
-		plugin = this;
-	}
-
-    public void start(BundleContext context) throws Exception {
-        super.start(context);
-        resourceBundle = Platform.getResourceBundle(getBundle());
-    }
-    
-	/**
-	 * Clean up
-	 */
-	public void stop(BundleContext context) throws Exception {
-		freeResources();
-		super.stop(context);
-	}
-
-	/**
-	 * Returns the shared instance.
-	 */
-	public static LauncherPlugin getDefault() {
-		return plugin;
-	}
-
-	/**
-	 * Loads the resources
-	 */
-	public static void initResources() {
-		if (images == null) {
-			images = new Image[imageLocations.length];
-				
-			for (int i = 0; i < imageLocations.length; ++i) {
-				images[i] = getImageFromPlugin(plugin.getBundle(), imageLocations[i]);
-				if (images[i] == null) {
-					freeResources();
-					logError(getResourceString("error.CouldNotLoadResources"), null);
-					throw new IllegalStateException();
-				}
-			}
-		}	
-	}
-
-	/**
-	 * Frees the resources
-	 */
-	public static void freeResources() {
-		if (images != null) {
-			for (int i = 0; i < images.length; ++i) {
-				final Image image = images[i];
-				if (image != null) image.dispose();
-			}
-			images = null;
-		}
-	}
-
-	/**
-	 * Log an error to the ILog for this plugin
-	 * 
-	 * @param message the localized error message text
-	 * @param exception the associated exception, or null
-	 */
-	public static void logError(String message, Throwable exception) {
-		plugin.getLog().log(new Status(
-			IStatus.ERROR, plugin.getBundle().getSymbolicName(), 0, message, exception));
-	}
-
-	/**
-	 * Returns a string from the resource bundle.
-	 * We don't want to crash because of a missing String.
-	 * Returns the key if not found.
-	 */
-	public static String getResourceString(String key) {
-		try {
-			return resourceBundle.getString(key);
-		} catch (MissingResourceException e) {
-			return key;
-		} catch (NullPointerException e) {
-			return "!" + key + "!";
-		}			
-	}
-
-	/**
-	 * Returns a string from the resource bundle and binds it
-	 * with the given arguments. If the key is not found,
-	 * return the key.
-	 */
-	public static String getResourceString(String key, Object[] args) {
-		try {
-			return MessageFormat.format(getResourceString(key), args);
-		} catch (MissingResourceException e) {
-			return key;
-		} catch (NullPointerException e) {
-			return "!" + key + "!";
-		}
-	}
-
-	/**
-     * Constructs a list of available programs from registered extensions.
-     * 
-     * @return an ItemTreeNode representing the root of a tree of items (the root is not to be displayed)
-	 */
-	public static ItemTreeNode getLaunchItemTree() {
-		ItemTreeNode categoryTree =
-			new ItemTreeNode(new ItemDescriptor("<<Root>>", "<<Root>>", null, null, null, null, null, null));
-
-		// get the platform's public plugin registry
-		IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry();
-		// retrieve all configuration elements registered at our launchItems extension-point
-		IConfigurationElement[] configurationElements =
-			extensionRegistry.getConfigurationElementsFor(LAUNCH_ITEMS_POINT_ID);
-			
-		if (configurationElements == null || configurationElements.length == 0) {
-			logError(getResourceString("error.CouldNotFindRegisteredExtensions"), null);
-			return categoryTree;
-		}
-		
-		/* Collect all launch categories -- coalesce those with same ID */
-		HashMap idMap = new HashMap();
-		for (int i = 0; i < configurationElements.length; ++i) {
-			final IConfigurationElement ce = configurationElements[i];
-			final String ceName = ce.getName();
-			final String attribId = getItemAttribute(ce, LAUNCH_ITEMS_XML_ATTRIB_ID, null);
-			
-			if (idMap.containsKey(attribId)) continue;
-			if (ceName.equalsIgnoreCase(LAUNCH_ITEMS_XML_CATEGORY)) {
-				final String attribName = getItemName(ce); 
-				ItemDescriptor theDescriptor = new ItemDescriptor(attribId, attribName,
-					getItemDescription(ce), null, null, null, null, ce);
-				idMap.put(attribId, new ItemTreeNode(theDescriptor));
-			}
-		}
-		
-		/* Generate launch category hierarchy */
-		Set tempIdSet = new HashSet(); // used to prevent duplicates from being entered into the tree
-		for (int i = 0; i < configurationElements.length; ++i) {
-			final IConfigurationElement ce = configurationElements[i];
-			final String ceName = ce.getName();
-			final String attribId = getItemAttribute(ce, LAUNCH_ITEMS_XML_ATTRIB_ID, null);
-			
-			if (tempIdSet.contains(attribId)) continue;
-			if (ceName.equalsIgnoreCase(LAUNCH_ITEMS_XML_CATEGORY)) {
-				final ItemTreeNode theNode = (ItemTreeNode) idMap.get(attribId);
-				addItemByCategory(ce, categoryTree, theNode, idMap);
-				tempIdSet.add(attribId);
-			}
-		}
-		
-		/* Generate program tree */
-		for (int i = 0; i < configurationElements.length; ++i) {
-			final IConfigurationElement ce = configurationElements[i];
-			final String ceName = ce.getName();
-			final String attribId = getItemAttribute(ce, LAUNCH_ITEMS_XML_ATTRIB_ID, null);
-
-			if (idMap.containsKey(attribId)) continue;
-			if (ceName.equalsIgnoreCase(LAUNCH_ITEMS_XML_CATEGORY)) {
-				// ignore
-			} else if (ceName.equalsIgnoreCase(LAUNCH_ITEMS_XML_ITEM)) {
-				final String enabled = getItemAttribute(ce, LAUNCH_ITEMS_XML_ATTRIB_ENABLED, 
-					LAUNCH_ITEMS_XML_VALUE_TRUE);
-				if (enabled.equalsIgnoreCase(LAUNCH_ITEMS_XML_VALUE_FALSE)) continue;
-				ItemDescriptor theDescriptor = createItemDescriptor(ce, attribId);				
-			
-				if (theDescriptor != null) {
-					final ItemTreeNode theNode = new ItemTreeNode(theDescriptor);
-					addItemByCategory(ce, categoryTree, theNode, idMap);
-					idMap.put(attribId, theNode);
-				}
-			}
-		}
-		return categoryTree;
-	}
-
-				
-	/**
-	 * Adds an item to the category tree.
-	 */
-	private static void addItemByCategory(IConfigurationElement ce, ItemTreeNode root,
-		ItemTreeNode theNode, HashMap idMap) {
-		final String attribCategory = getItemAttribute(ce, LAUNCH_ITEMS_XML_ATTRIB_CATEGORY, null);
-				
-		// locate the parent node
-		ItemTreeNode parentNode = null;
-		if (attribCategory != null) {
-			parentNode = (ItemTreeNode) idMap.get(attribCategory);
-		}
-		if (parentNode == null) parentNode = root;
-				
-		// add the item
-		parentNode.addSortedNode(theNode);
-	}
-
-	/**
-	 * Creates an ItemDescriptor from an XML definition.
-	 * 
-	 * @param ce the IConfigurationElement describing the item
-	 * @param attribId the attribute id
-	 * @return a new ItemDescriptor, or null if an error occurs
-	 */
-	private static ItemDescriptor createItemDescriptor(IConfigurationElement ce, String attribId) {
-		final String attribName = getItemName(ce);
-		final Image  attribIcon = getItemIcon(ce);
-		final String attribDescription = getItemDescription(ce);
-
-		IConfigurationElement viewCE = getItemElement(ce, LAUNCH_ITEMS_XML_VIEW);
-		if (viewCE != null) {
-			//Item is a view
-			final String attribView = getItemAttribute(viewCE, LAUNCH_ITEMS_XML_VIEW_VIEWID, null);		
-			if (attribView == null) {
-				logError(getResourceString("error.IncompleteViewLaunchItem",
-					new Object[] { attribId } ), null);
-				return null;
-			}
-			return new ItemDescriptor(attribId, attribName, attribDescription,
-					attribIcon, attribView, null, null, viewCE);
-		} else {
-			//Item is a standalone
-			IConfigurationElement programCE = getItemElement(ce, LAUNCH_ITEMS_XML_PROGRAM);
-			if (programCE != null) {
-				final String attribPluginId = getItemAttribute(programCE, LAUNCH_ITEMS_XML_PROGRAM_PLUGIN, null);
-				final String attribClass    = getItemAttribute(programCE, LAUNCH_ITEMS_XML_PROGRAM_CLASS, null);
-				if (attribClass == null || attribPluginId == null) {
-					logError(getResourceString("error.IncompleteProgramLaunchItem",
-					new Object[] { attribId } ), null);
-					return null;
-				}
-				return new ItemDescriptor(attribId, attribName, attribDescription,
-					attribIcon, null, attribClass, attribPluginId, programCE);
-			} else {
-				logError(getResourceString("error.IncompleteLaunchItem",
-					new Object[] { attribId } ), null);
-				return null;
-			}
-		}
-	}
-
-	/**
-	 * Returns the first instance of a particular child XML element.
-	 * 
-	 * @param ce the IConfigurationElement parent
-	 * @param element the name of the element to fetch
-	 * @return the element's IConfigurationElement, or null if not found
-	 */
-	private static IConfigurationElement getItemElement(IConfigurationElement ce, String element) {
-		IConfigurationElement[] elementCEs = ce.getChildren(element);
-		return (elementCEs != null && elementCEs.length != 0) ? elementCEs[0] : null;
-	}
-
-	/**
-	 * Returns the value of an XML attribute for an item.
-	 * 
-	 * @param ce the IConfigurationElement describing the item
-	 * @param attribute the attribute to fetch
-	 * @param defaultValue the value to return if the attribute is not found
-	 * @return the attribute value
-	 */
-	private static String getItemAttribute(IConfigurationElement ce, String attribute, String defaultValue) {
-		String value = ce.getAttribute(attribute);
-		return (value != null) ? value : defaultValue;
-	}
-
-	/**
-	 * Returns the description string given the IConfigurationElement for an item.
-	 * 
-	 * @param ce the IConfigurationElement describing the item
-	 * @return a newline-delimited string that describes this item, or null if none
-	 */
-	private static String getItemDescription(IConfigurationElement ce) {
-		String description = getItemAttribute(ce, LAUNCH_ITEMS_XML_ITEM_DESCRIPTION, "");
-		return (description.length() == 0) ? null : description;
-	}
-
-	/**
-	 * Returns the name of an item.
-	 * 
-	 * @param ce the IConfigurationElement describing the item
-	 * @return the attribute value
-	 */
-	private static String getItemName(IConfigurationElement ce) {
-		return getItemAttribute(ce, LAUNCH_ITEMS_XML_ATTRIB_NAME,
-			getResourceString("launchitem.Missing.name"));
-	}
-
-
-	/**
-	 * Returns the icon for an item.
-	 * 
-	 * @param ce the IConfigurationElement describing the item
-	 * @return an icon
-	 */
-	private static Image getItemIcon(IConfigurationElement ce) {
-		String iconPath = getItemAttribute(ce, LAUNCH_ITEMS_XML_ITEM_ICON, "");
-		if (iconPath.length() != 0) {
-			String symbolicName = ce.getDeclaringExtension().getNamespace();
-			Bundle bundle = Platform.getBundle(symbolicName);
-			Image icon = getImageFromPlugin(bundle, iconPath);
-			if (icon != null) {
-				Image[] newImages = new Image[images.length + 1];
-				System.arraycopy(images, 0, newImages, 0, images.length);
-				newImages[images.length] = icon;
-				images = newImages;
-				return icon;
-			}
-		}
-		return images[liGenericExample];
-	}
-
-	/**
-	 * Gets an image from a path relative to the plugin install directory.
-	 *
-	 * @param bundle the plugin descriptor for the plugin with the image
-	 * @param iconPath the path relative to the install directory
-	 * @return the image, or null if not found
-	 */
-	private static Image getImageFromPlugin(Bundle bundle, String iconPath) {
-		InputStream is = null;
-		try {
-			URL installUrl = bundle.getEntry("/");
-			URL url = new URL(installUrl, iconPath);
-			is = url.openConnection().getInputStream();
-			ImageData source = new ImageData(is);
-			ImageData mask = source.getTransparencyMask();
-			Image image = new Image(null, source, mask);
-			return image;
-		} catch (Throwable ex) {
-			return null;
-		} finally {
-			try {
-				if (is != null) is.close();
-			} catch (IOException e) {
-			}
-		}
-	}
-}
diff --git a/examples/org.eclipse.swt.examples.launcher/src/org/eclipse/swt/examples/launcher/LauncherView.java b/examples/org.eclipse.swt.examples.launcher/src/org/eclipse/swt/examples/launcher/LauncherView.java
deleted file mode 100755
index 7eea248..0000000
--- a/examples/org.eclipse.swt.examples.launcher/src/org/eclipse/swt/examples/launcher/LauncherView.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.examples.launcher;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.*;
-import org.eclipse.ui.part.*;
-import java.lang.reflect.*;
-
-/**
- * Launcher uses <code>org.eclipse.swt</code> 
- * to launch the other registered examples.
- * 
- * @see ViewPart
- */
-public class LauncherView extends ViewPart {
-	private Shell workbenchShell;
-	
-	private Tree launchTree;
-	private Text descriptionText;
-	private Button runButton;
-
-	/**
-	 * Constructs a LauncherView.
-	 */
-	public LauncherView() {
-		LauncherPlugin.initResources();
-	}
-
-	/**
-	 * Creates the example.
-	 * 
-	 * @see ViewPart#createPartControl
-	 */
-	public void createPartControl(Composite parent) {
-		workbenchShell = getSite().getShell();
-		parent.setLayout(new SplitLayout());
-				
-		Group launchGroup = new Group(parent, SWT.NONE);
-		launchGroup.setText(LauncherPlugin.getResourceString("view.launchGroup.text"));
-		
-		GridLayout gridLayout = new GridLayout();
-		gridLayout.numColumns = 2;
-		launchGroup.setLayout(gridLayout);
-
-		launchTree = new Tree(launchGroup, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
-		GridData gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
-		gridData.horizontalSpan = 2;
-		launchTree.setLayoutData(gridData);
-		launchTree.addSelectionListener(new SelectionListener() {
-			public void widgetSelected(SelectionEvent event) {
-				final ItemDescriptor item = getSelectedItem();
-				setDescriptionByItem(item);
-			}
-			public void widgetDefaultSelected(SelectionEvent event) {
-				final ItemDescriptor item = getSelectedItem();
-				setDescriptionByItem(item);
-				if (item.getMainType() == null && item.getView() == null) {
-					// Category selected, so just expand/colapse the node
-					TreeItem treeItem = (TreeItem) event.item;
-					boolean expanded = treeItem.getExpanded();
-					if (treeItem != null) treeItem.setExpanded(!expanded);
-					treeItem.setImage(LauncherPlugin.images[expanded ? LauncherPlugin.liClosedFolder : LauncherPlugin.liOpenFolder]);
-				} else {
-					launchItem(getSelectedItem());
-				}
-			}
-		});
-		launchTree.addTreeListener(new TreeListener() {
-			public void treeCollapsed(TreeEvent event) {
-				final TreeItem item = (TreeItem) event.item;
-				if (item == null) return;
-				item.setImage(LauncherPlugin.images[LauncherPlugin.liClosedFolder]);
-			}
-			public void treeExpanded(TreeEvent event) {
-				final TreeItem item = (TreeItem) event.item;
-				if (item == null) return;
-				item.setImage(LauncherPlugin.images[LauncherPlugin.liOpenFolder]);
-			}
-		});
-
-		runButton = new Button(launchGroup, SWT.PUSH);
-		runButton.setText(LauncherPlugin.getResourceString("view.launchButton.text"));
-		runButton.addSelectionListener(new SelectionListener() {
-			public void widgetSelected(SelectionEvent event) {
-				launchItem(getSelectedItem());
-			}
-			public void widgetDefaultSelected(SelectionEvent event) {
-			}
-		});
-
-		Group descriptionGroup = new Group(parent, SWT.NONE);
-		descriptionGroup.setText(LauncherPlugin.getResourceString("view.descriptionGroup.text"));
-		descriptionGroup.setLayout(new FillLayout());
-		
-		descriptionText = new Text(descriptionGroup, SWT.MULTI | SWT.BORDER |
-			SWT.WRAP | SWT.V_SCROLL | SWT.READ_ONLY);
-
-		setDescriptionByItem(null);
-		setItemDescriptors(LauncherPlugin.getLaunchItemTree());
-	}
-
-	/**
-	 * Called when we must grab focus.
-	 * 
-	 * @see org.eclipse.ui.part.ViewPart#setFocus
-	 */
-	public void setFocus()  {
-		launchTree.setFocus();
-		runButton.getShell().setDefaultButton(runButton);
-	}
-
-	/**
-	 * Called when the View is to be disposed
-	 */	
-	public void dispose() {
-		workbenchShell = null;
-		launchTree = null;
-		descriptionText = null;
-		runButton = null;		
-		super.dispose();
-	}
-
-	/**
-	 * Installs a new launch list.
-	 * 
-	 * @param newRoot the new tree of launch items for the UI
-	 */
-	public void setItemDescriptors(final ItemTreeNode newRoot) {
-		if (workbenchShell == null) return;
-		workbenchShell.getDisplay().syncExec(new Runnable() {
-			public void run() {
-				if ((launchTree == null) || (launchTree.isDisposed())) return;
-				launchTree.removeAll();
-			
-				for (ItemTreeNode node = newRoot.getFirstChild(); node != null;
-					node = node.getNextSibling()) {
-					doNode(node, new TreeItem(launchTree, SWT.NONE)); // top-level TreeItem
-				}
-			}
-			private void addGroup(TreeItem parent, ItemTreeNode node) {
-				for (;node != null; node = node.getNextSibling()) {
-					doNode(node, new TreeItem(parent, SWT.NONE)); // TreeItem at depth > 0
-				}
-			}
-			private void doNode(ItemTreeNode node, TreeItem treeItem) {
-				final ItemDescriptor item = node.getDescriptor();
-				treeItem.setText(item.getName());
-				treeItem.setData(item);
-				if (node.getDescriptor().isFolder()) {
-					treeItem.setExpanded(false);
-					treeItem.setImage(LauncherPlugin.images[LauncherPlugin.liClosedFolder]);
-				} else {
-					treeItem.setImage(node.getDescriptor().getIcon());
-				}
-				addGroup(treeItem, node.getFirstChild());
-			}
-		});
-	}
-
-	/**
-	 * Runs the specified launch item.
-	 * 
-	 * @param itemDescriptor the launch item to execute
-	 */
-	private void launchItem(ItemDescriptor itemDescriptor) {
-		/* Case 1: The launch item is a view */
-		String pluginViewId = itemDescriptor.getView ();
-		if (pluginViewId != null) {
-			final IWorkbenchPart workbenchPart = this;
-			final IWorkbenchPartSite workbenchPartSite = workbenchPart.getSite();
-			final IWorkbenchPage workbenchPage = workbenchPartSite.getPage();
-			try {
-				workbenchPage.showView(pluginViewId);
-			} catch (PartInitException e) {
-				LauncherPlugin.logError(LauncherPlugin.getResourceString("run.error.Invocation"), e);
-			}
-			return;
-		}
-		/* Case 2: The launch item is a standalone program */
-		if (workbenchShell == null) return;
-		try {
-			Object instance = itemDescriptor.createItemInstance();
-			if (instance != null) {
-				Display display = workbenchShell.getDisplay();
-				Method openMethod = instance.getClass().getDeclaredMethod("open", new Class[] {Display.class});
-				openMethod.invoke(instance, new Object[] {display});
-			}
-		} catch (NoSuchMethodException e) {
-			LauncherPlugin.logError(LauncherPlugin.getResourceString("run.error.DoesNotImplementMethod"), null);
-		} catch (Exception e) {
-			LauncherPlugin.logError(LauncherPlugin.getResourceString("run.error.CouldNotInstantiateClass"), e);
-		}		
-	}
-
-	/**
-	 * Obtains the selected launch item.
-	 * 
-	 * @return the currently selected ItemDescriptor
-	 */
-	private ItemDescriptor getSelectedItem() {
-		final TreeItem[] selections = launchTree.getSelection();
-		if (selections.length == 0) return null;
-		final ItemDescriptor itemDescriptor = (ItemDescriptor) selections[0].getData();
-		return itemDescriptor;
-	}
-	
-	/**
-	 * Sets the currently visible description text to reflect that of a particular ItemDescriptor.
-	 *
-	 * @param itemDescriptor the launch item whose description is to be displayed, or null if none
-	 */
-	private void setDescriptionByItem(ItemDescriptor itemDescriptor) {
-		String description;
-		if (itemDescriptor == null) {
-			description = LauncherPlugin.getResourceString("launchitem.Null.description");
-			if (runButton != null) runButton.setEnabled(false);
-		} else {
-			description = itemDescriptor.getDescription();
-			if (description == null)
-				description = LauncherPlugin.getResourceString("launchitem.Missing.description");
-			if (runButton != null) {
-				runButton.setEnabled(itemDescriptor.getView() != null || itemDescriptor.getMainType() != null);
-			}
-		}
-		descriptionText.setText(description);
-	}
-}
diff --git a/examples/org.eclipse.swt.examples.launcher/src/org/eclipse/swt/examples/launcher/SplitLayout.java b/examples/org.eclipse.swt.examples.launcher/src/org/eclipse/swt/examples/launcher/SplitLayout.java
deleted file mode 100755
index 6637af1..0000000
--- a/examples/org.eclipse.swt.examples.launcher/src/org/eclipse/swt/examples/launcher/SplitLayout.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.examples.launcher;
-
- 
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-/**
- * A Layout class that automatically switches from a horizontal split to a vertical
- * split layout to accomodate changing size conditions.
- * 
- * Later on we might improve this class to take into account the "preferred" size of
- * the widgets.
- */
-public class SplitLayout extends Layout {
-	private static final int
-		splitHorizontally = 0,
-		splitVertically = 1;
-	private int splitDirection = splitHorizontally;
-
-	public int spacing = 3;
-	public int marginTop = 3;
-	public int marginLeft = 3;
-	public int marginRight = 3;
-	public int marginBottom = 3;
-
-	/**
-	 * Creates a new layout
-	 */
-	public SplitLayout() {
-	}
-
-	/**
-	 * @see Layout#computeSize(Composite, int, int, boolean)
-	 */
-	protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
-		if (wHint == SWT.DEFAULT) {
-			if (hHint == SWT.DEFAULT) {
-				Point hSplitSize = computeHSplitSize(composite, wHint, hHint, flushCache);
-				Point vSplitSize = computeVSplitSize(composite, wHint, hHint, false);
-				int hSplitArea = hSplitSize.x * hSplitSize.y;
-				int vSplitArea = vSplitSize.x * vSplitSize.y;
-				// Choose direction consuming least area
-				if (hSplitArea < vSplitArea) {
-					splitDirection = splitHorizontally;
-					return hSplitSize;
-				} else {
-					splitDirection = splitVertically;
-					return vSplitSize;
-				}
-			} else {
-				// Constrained in height: split vertically
-				splitDirection = splitVertically;
-				return computeVSplitSize(composite, wHint, hHint, flushCache);
-			}
-		} else {
-			if (hHint == SWT.DEFAULT) {
-				// Constrained in width: split horizontally
-				splitDirection = splitHorizontally;
-				return computeHSplitSize(composite, wHint, hHint, flushCache);
-			} else {
-				if (hHint < wHint) {
-					splitDirection = splitVertically;
-					return computeVSplitSize(composite, wHint, hHint, flushCache);
-				} else {
-					splitDirection = splitHorizontally;
-					return computeHSplitSize(composite, wHint, hHint, flushCache);
-				}					
-			}
-		}
-	}
-	/**
-	 * @see Layout#layout(Composite, boolean)
-	 */
-	protected void layout(Composite composite, boolean flushCache) {
-		Rectangle clientArea = composite.getClientArea();
-		computeSize(composite, clientArea.width, clientArea.height, false);
-		
-		Control[] children = composite.getChildren();
-		clientArea.x += marginLeft;
-		clientArea.y += marginTop;
-		clientArea.width -= marginRight + marginLeft;
-		clientArea.height -= marginBottom + marginTop;
-		Point position = new Point(clientArea.x, clientArea.y);
-
-		for (int i = 0; i < children.length; ++i) {
-			final Control child = children[i];
-			final Rectangle bounds;
-			if (splitDirection == splitHorizontally) {
-				int height = clientArea.height / children.length;
-				bounds = new Rectangle(position.x, position.y, clientArea.width, height);
-				position.y += height + spacing;
-			} else {
-				int width = clientArea.width / children.length;
-				bounds = new Rectangle(position.x, position.y, width, clientArea.height);
-				position.x += width + spacing;
-			}
-			bounds.width = Math.max(bounds.width, 0);
-			bounds.height = Math.max(bounds.height, 0);
-			child.setBounds(bounds);
-		}
-	}
-
-	private Point computeHSplitSize(Composite composite, int wHint, int hHint, boolean flushCache) {
-		Point size = new Point(marginLeft + marginRight, marginTop + marginBottom);
-		Control[] children = composite.getChildren();
-		for (int i = 0; i < children.length; ++i) {
-			final Control child = children[i];
-
-			Point childSize = child.computeSize(wHint, hHint, flushCache);
-			size.x = Math.max(size.x, childSize.x);
-			size.y += childSize.y + spacing;
-		}
-		return size;
-	}
-
-	private Point computeVSplitSize(Composite composite, int wHint, int hHint, boolean flushCache) {
-		Point size = new Point(marginLeft + marginRight, marginTop + marginBottom);
-		Control[] children = composite.getChildren();
-		for (int i = 0; i < children.length; ++i) {
-			final Control child = children[i];
-
-			Point childSize = child.computeSize(wHint, hHint, flushCache);
-			size.x += childSize.x + spacing;
-			size.y = Math.max(size.y, childSize.y);
-		}
-		return size;
-	}
-}
diff --git a/examples/org.eclipse.swt.examples.layouts/.classpath b/examples/org.eclipse.swt.examples.layouts/.classpath
deleted file mode 100644
index 065ac06..0000000
--- a/examples/org.eclipse.swt.examples.layouts/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/examples/org.eclipse.swt.examples.layouts/.cvsignore b/examples/org.eclipse.swt.examples.layouts/.cvsignore
deleted file mode 100644
index c5e82d7..0000000
--- a/examples/org.eclipse.swt.examples.layouts/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.examples.layouts/.project b/examples/org.eclipse.swt.examples.layouts/.project
deleted file mode 100644
index a6fc2cb..0000000
--- a/examples/org.eclipse.swt.examples.layouts/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.swt.examples.layouts</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/examples/org.eclipse.swt.examples.layouts/about.html b/examples/org.eclipse.swt.examples.layouts/about.html
deleted file mode 100644
index 6f6b96c..0000000
--- a/examples/org.eclipse.swt.examples.layouts/about.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>February 24, 2005</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.examples.layouts/build.properties b/examples/org.eclipse.swt.examples.layouts/build.properties
deleted file mode 100644
index 68e55d5..0000000
--- a/examples/org.eclipse.swt.examples.layouts/build.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 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
-###############################################################################
-bin.includes = doc-html/,\
-               icons/,\
-               plugin.properties,\
-               plugin.xml,\
-               about.html,\
-               *.jar
-
-src.includes = about.html
-
-source.layouts.jar = src/
diff --git a/examples/org.eclipse.swt.examples.layouts/doc-html/swt_layout_ex.html b/examples/org.eclipse.swt.examples.layouts/doc-html/swt_layout_ex.html
deleted file mode 100644
index 4a829fc..0000000
--- a/examples/org.eclipse.swt.examples.layouts/doc-html/swt_layout_ex.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <title>SWT - Layout Example</title>
-</head>
-<body>
-
-<h2>SWT example - Layouts</h2>
-
-<p>
-This example is a simple demonstration of common SWT layouts. 
-It consists of a tab folder where each tab in the folder allows the 
-user to interact with a different SWT layout.
-The user can insert widgets into a layout and set the values of the layout data
-using a property sheet.  When the user has a suitable arrangement, the underlying
-code can be generated by clicking on the <strong>Code</strong> button.
-</p>
-
-<h3>Running the example</h3>
-<p>
-Follow the <a href="../../org.eclipse.swt.examples/doc-html/swt_manual_setup.html">SWT standalone examples setup</a> 
-instructions to install and run the example from your workspace.
-</p>
-<p>
-The "Main" class is <code>org.eclipse.swt.examples.layoutexample.LayoutExample</code>.
-</p>
-<p>
-This example can also be run using the <a href="../../org.eclipse.swt.examples.launcher/doc-html/swt_launcher_ex.html">Example Launcher</a>.
-Select the <strong>Layouts</strong> item from the <strong>Workbench Views</strong> category and click <strong>Run</strong>.
-</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.examples.layouts/icons/layouts_example.gif b/examples/org.eclipse.swt.examples.layouts/icons/layouts_example.gif
deleted file mode 100644
index d945dde..0000000
--- a/examples/org.eclipse.swt.examples.layouts/icons/layouts_example.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.layouts/plugin.properties b/examples/org.eclipse.swt.examples.layouts/plugin.properties
deleted file mode 100644
index 810bdb0..0000000
--- a/examples/org.eclipse.swt.examples.layouts/plugin.properties
+++ /dev/null
@@ -1,28 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 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
-###############################################################################
-providerName = Eclipse.org
-plugin.SWTLayoutExample.name = SWT Layout Example Plugin
-category.SWTExamples.name = SWT Examples
-view.LayoutExample.name = SWT Layouts
-
-launchcategory.SWTViewExamples.name = Workbench Views
-launchcategory.SWTViewExamples.description = \
-	A collection of Standard Widget Toolkit examples that run as Views inside the Workbench.  \
-	These examples will create a new View in the current Perspective.
-
-launchitem.LayoutExample.name = Layouts
-launchitem.LayoutExample.description = \
-	This example is a simple demonstration of common SWT layouts. \n\n\
-	It consists of a tab folder where each tab allows the \
-	user to interact with a different SWT layout.\
-	The user can insert widgets into a layout and set the values of the layout data \
-	using a property sheet.  When the user has a suitable arrangement, code can be \
-	generated by clicking on the Code button.
diff --git a/examples/org.eclipse.swt.examples.layouts/plugin.xml b/examples/org.eclipse.swt.examples.layouts/plugin.xml
deleted file mode 100644
index d939063..0000000
--- a/examples/org.eclipse.swt.examples.layouts/plugin.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin
-   id="org.eclipse.swt.examples.layouts"
-   name="%plugin.SWTLayoutExample.name"
-   version="3.1.0"
-   provider-name="%providerName"
-   class="org.eclipse.swt.examples.layouts.LayoutPlugin">
-
-<!-- Runtime -->
-<!-- Runtime -->
-   <runtime>
-      <library name="layouts.jar">
-      </library>
-   </runtime>
-<!-- Required plugins -->
-   <requires>
-      <import plugin="org.eclipse.ui.ide"/>
-      <import plugin="org.eclipse.ui.views"/>
-      <import plugin="org.eclipse.jface.text"/>
-      <import plugin="org.eclipse.ui.workbench.texteditor"/>
-      <import plugin="org.eclipse.ui.editors"/>
-      <import plugin="org.eclipse.core.runtime"/>
-      <import plugin="org.eclipse.ui"/>
-      <import plugin="org.eclipse.swt"/>
-      <import plugin="org.eclipse.swt.examples"/>
-   </requires>
-
-
-<!-- Extension points -->
-<!-- Extensions -->
-   <extension
-         point="org.eclipse.ui.views">
-      <view
-            name="%view.LayoutExample.name"
-            icon="icons/layouts_example.gif"
-            category="org.eclipse.swt.examples.category"
-            class="org.eclipse.swt.examples.layouts.LayoutView"
-            id="org.eclipse.swt.examples.layouts.view">
-      </view>
-   </extension>
-   <extension
-         point="org.eclipse.swt.examples.launcher.launchItems">
-      <category
-            name="%launchcategory.SWTViewExamples.name"
-            description="%launchcategory.SWTViewExamples.description"
-            id="org.eclipse.swt.examples.launchViewCategory">
-      </category>
-      <item
-            name="%launchitem.LayoutExample.name"
-            icon="icons/layouts_example.gif"
-            description="%launchitem.LayoutExample.description"
-            category="org.eclipse.swt.examples.launchViewCategory"
-            id="org.eclipse.swt.examples.layouts.viewlauncher">
-         <view
-               viewId="org.eclipse.swt.examples.layouts.view">
-         </view>
-      </item>
-   </extension>
-
-</plugin>
diff --git a/examples/org.eclipse.swt.examples.layouts/src/import.properties b/examples/org.eclipse.swt.examples.layouts/src/import.properties
deleted file mode 100644
index 8241dac..0000000
--- a/examples/org.eclipse.swt.examples.layouts/src/import.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 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
-###############################################################################
-# Persist project settings for later import 
-natures = org.eclipse.jdt.core.javanature; org.eclipse.pde.PluginNature
-builders = org.eclipse.jdt.core.javabuilder; org.eclipse.pde.ManifestBuilder; org.eclipse.pde.SchemaBuilder
-var.ECLIPSE_PLUGINS = <<ECLIPSE_PLUGINS>>
diff --git a/examples/org.eclipse.swt.examples.layouts/src/org/eclipse/swt/examples/layouts/LayoutPlugin.java b/examples/org.eclipse.swt.examples.layouts/src/org/eclipse/swt/examples/layouts/LayoutPlugin.java
deleted file mode 100644
index 3dd2da3..0000000
--- a/examples/org.eclipse.swt.examples.layouts/src/org/eclipse/swt/examples/layouts/LayoutPlugin.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.examples.layouts;
-
-
-import org.eclipse.ui.plugin.*;
-
-/**
- * The main plugin class to be used in the desktop.
- */
-public class LayoutPlugin extends AbstractUIPlugin {
-	/**
-	 * The constructor.
-	 */
-	public LayoutPlugin() {
-		super();
-	}
-}
diff --git a/examples/org.eclipse.swt.examples.layouts/src/org/eclipse/swt/examples/layouts/LayoutView.java b/examples/org.eclipse.swt.examples.layouts/src/org/eclipse/swt/examples/layouts/LayoutView.java
deleted file mode 100644
index cc69b3d..0000000
--- a/examples/org.eclipse.swt.examples.layouts/src/org/eclipse/swt/examples/layouts/LayoutView.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.examples.layouts;
-
- 
-import org.eclipse.swt.examples.layoutexample.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.part.*;
-
-/**
- * <code>Layouts</code> is a simple demonstration
- * of the layouts defined by SWT.  It consists of a workbench
- * view and tab folder where each tab in the folder allows the
- * user to interact with a layout.
- * 
- * @see ViewPart
- */
-public class LayoutView extends ViewPart {
-	LayoutExample instance = null;
-	
-	/**
-	 * Create the example
-	 * 
-	 * @see ViewPart#createPartControl
-	 */
-	public void createPartControl(Composite frame) {
-		instance = new LayoutExample(frame);
-	}
-
-	/**
-	 * Called when we must grab focus.
-	 * 
-	 * @see org.eclipse.ui.part.ViewPart#setFocus
-	 */
-	public void setFocus() {
-		instance.setFocus();
-	}
-
-	/**
-	 * Called when the View is to be disposed
-	 */	
-	public void dispose() {
-		instance.dispose();
-		instance = null;
-		super.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.examples.ole.win32/.classpath b/examples/org.eclipse.swt.examples.ole.win32/.classpath
deleted file mode 100755
index 065ac06..0000000
--- a/examples/org.eclipse.swt.examples.ole.win32/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/examples/org.eclipse.swt.examples.ole.win32/.cvsignore b/examples/org.eclipse.swt.examples.ole.win32/.cvsignore
deleted file mode 100755
index c5e82d7..0000000
--- a/examples/org.eclipse.swt.examples.ole.win32/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.examples.ole.win32/.project b/examples/org.eclipse.swt.examples.ole.win32/.project
deleted file mode 100644
index ff00f68..0000000
--- a/examples/org.eclipse.swt.examples.ole.win32/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.swt.examples.ole.win32</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/examples/org.eclipse.swt.examples.ole.win32/about.html b/examples/org.eclipse.swt.examples.ole.win32/about.html
deleted file mode 100644
index 6f6b96c..0000000
--- a/examples/org.eclipse.swt.examples.ole.win32/about.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>February 24, 2005</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.examples.ole.win32/build.properties b/examples/org.eclipse.swt.examples.ole.win32/build.properties
deleted file mode 100755
index bfe7608..0000000
--- a/examples/org.eclipse.swt.examples.ole.win32/build.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 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
-###############################################################################
-bin.includes = doc-html/,\
-               icons/,\
-               plugin.properties,\
-               plugin.xml,\
-               about.html,\
-               *.jar
-
-src.includes = about.html
-            
-source.olewin32.jar = src/
diff --git a/examples/org.eclipse.swt.examples.ole.win32/doc-html/swt_ole_ex.html b/examples/org.eclipse.swt.examples.ole.win32/doc-html/swt_ole_ex.html
deleted file mode 100755
index d27da8e..0000000
--- a/examples/org.eclipse.swt.examples.ole.win32/doc-html/swt_ole_ex.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <title>SWT - OLE Web Browser</title>
-</head>
-<body>
-
-<h2>SWT example - OLE Web Browser</h2>
-
-<p>
-This example shows how to embed an Active X control into an SWT application or an Eclipse view.
-</p>
-<p>
-When the view is opened, it will create an instance of the Windows Internet Explorer
-control.  The OLE web browser has
-<strong>Back</strong> and <strong>Forward</strong> buttons to take you to recently visited pages.  The browser also contains
-a <strong>Home</strong> button to take you to the web browser's home page, a <strong>Stop</strong> button which stops the 
-current transfer, a <strong>Search</strong> button which will search for text typed in the <strong>Address</strong> text field, and
-a <strong>Refresh</strong> button which re-draws the contents of the currently displayed page. There is also a
-<strong>Go</strong> button which, when clicked, will attempt to load the page specified in the <strong>Address</strong> field.
-</p>
-
-<h3>Running the example</h3>
-
-<p>
-From Eclipse's <strong>Window</strong> menu select <strong>Show View</strong> &gt; <strong>Other</strong>.  
-In the <strong>Show View</strong> dialog, expand <strong>SWT Examples</strong> and select
-the view named <strong>OLE Web Browser (win32)</strong>. A view containing a web browser will appear.
-</p>
-<p>
-This example can also be run using the <a href="../../org.eclipse.swt.examples.launcher/doc-html/swt_launcher_ex.html">Example Launcher</a>.
-Select the <strong>OLE Web Browser</strong> item from the <strong>Win32 only</strong> category and click <strong>Run</strong>.
-</p>
-</body>
-</html>
diff --git a/examples/org.eclipse.swt.examples.ole.win32/icons/backward_nav.gif b/examples/org.eclipse.swt.examples.ole.win32/icons/backward_nav.gif
deleted file mode 100755
index 5fcf41b..0000000
--- a/examples/org.eclipse.swt.examples.ole.win32/icons/backward_nav.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.ole.win32/icons/forward_nav.gif b/examples/org.eclipse.swt.examples.ole.win32/icons/forward_nav.gif
deleted file mode 100755
index 3b9b6af..0000000
--- a/examples/org.eclipse.swt.examples.ole.win32/icons/forward_nav.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.ole.win32/icons/home_nav.gif b/examples/org.eclipse.swt.examples.ole.win32/icons/home_nav.gif
deleted file mode 100755
index 77a2306..0000000
--- a/examples/org.eclipse.swt.examples.ole.win32/icons/home_nav.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.ole.win32/icons/refresh_nav.gif b/examples/org.eclipse.swt.examples.ole.win32/icons/refresh_nav.gif
deleted file mode 100755
index e270e18..0000000
--- a/examples/org.eclipse.swt.examples.ole.win32/icons/refresh_nav.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.ole.win32/icons/search_nav.gif b/examples/org.eclipse.swt.examples.ole.win32/icons/search_nav.gif
deleted file mode 100755
index 73ac91b..0000000
--- a/examples/org.eclipse.swt.examples.ole.win32/icons/search_nav.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.ole.win32/icons/stop_nav.gif b/examples/org.eclipse.swt.examples.ole.win32/icons/stop_nav.gif
deleted file mode 100755
index 653d347..0000000
--- a/examples/org.eclipse.swt.examples.ole.win32/icons/stop_nav.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.ole.win32/icons/webbrowser_example.gif b/examples/org.eclipse.swt.examples.ole.win32/icons/webbrowser_example.gif
deleted file mode 100755
index 895e221..0000000
--- a/examples/org.eclipse.swt.examples.ole.win32/icons/webbrowser_example.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.ole.win32/plugin.properties b/examples/org.eclipse.swt.examples.ole.win32/plugin.properties
deleted file mode 100755
index 4811388..0000000
--- a/examples/org.eclipse.swt.examples.ole.win32/plugin.properties
+++ /dev/null
@@ -1,60 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 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
-###############################################################################
-providerName = Eclipse.org
-plugin.SWTOLEExample.name = SWT OLE Example Plugin (Win32)
-category.SWTExamples.name = SWT Examples
-view.OLEWebBrowserExample.name = OLE Web Browser (Win32)
-
-launchcategory.SWTWin32OnlyExamples.name = Win32 only
-launchcategory.SWTWin32OnlyExamples.description = \
-	A collection of Standard Widget Toolkit examples for Windows systems only.
-
-launchitem.OLEWebBrowserExample.name = OLE Web Browser
-launchitem.OLEWebBrowserExample.description = \
-	This example demonstrates how to embed an Active X control into an SWT application or an Eclipse view.\n\n\
-	When the view is opened, it will create an instance of the Windows Internet Explorer \
-	control.  The OLE Web Browser has \
-	Back and Forward buttons to take you to recently visited pages.  The browser also contains \
-	a Home button to take you to the web browser's home page, a Stop button which stops the \
-	current transfer, a Search button which will search for text typed in the Address text field, and \
-	a Refresh button which re-draws the contents of the currently displayed page. There is also a \
-	Go button which, when clicked, will attempt to load the page specified in the Address field.
-
-browser.Back.text = Backward
-browser.Back.tooltip = Go to previous Web site in the history list
-
-browser.Forward.text = Forward
-browser.Forward.tooltip = Go to next Web site in the history list
-
-browser.Home.text = Home
-browser.Home.tooltip = Go to home Web site
-
-browser.Stop.text = Stop
-browser.Stop.tooltip = Stop loading current Web site
-
-browser.Refresh.text = Refresh
-browser.Refresh.tooltip = Refresh current Web site
-
-browser.Search.text = Search
-browser.Search.tooltip = Search the Web
-
-browser.Address.label = Address :
-
-browser.Go.text = Go
-
-browser.State.Uninitialized.text = Not ready.
-browser.State.Loading.text = Loading Web site...
-browser.State.Loaded.text = Ready.
-browser.State.Interactive.text = Loading Web site...
-browser.State.Complete.text = Done.
-
-error.CouldNotLoadResources = Unable to load resources
-error.CouldNotCreateBrowserControl = Unable to create <<Browser Control>>
diff --git a/examples/org.eclipse.swt.examples.ole.win32/plugin.xml b/examples/org.eclipse.swt.examples.ole.win32/plugin.xml
deleted file mode 100755
index 410724f..0000000
--- a/examples/org.eclipse.swt.examples.ole.win32/plugin.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<!-- File written by PDE 1.0 -->
-<plugin
-   id="org.eclipse.swt.examples.ole.win32"
-   name="%plugin.SWTOLEExample.name"
-   version="3.1.0"
-   provider-name="%providerName"
-   class="org.eclipse.swt.examples.ole.win32.OlePlugin">
-<!-- Required plugins -->
-<requires>
-   <import plugin="org.eclipse.ui.ide"/>
-   <import plugin="org.eclipse.ui.views"/>
-   <import plugin="org.eclipse.jface.text"/>
-   <import plugin="org.eclipse.ui.workbench.texteditor"/>
-   <import plugin="org.eclipse.ui.editors"/>
-   <import plugin="org.eclipse.core.runtime"/>
-   <import plugin="org.eclipse.core.resources"/>
-   <import plugin="org.eclipse.ui"/>
-   <import plugin="org.eclipse.swt"/>
-</requires>
-
-<!-- Runtime -->
-<!-- Runtime -->
-<runtime>
-   <library name="olewin32.jar">
-   </library>
-</runtime>
-
-<!-- Extensions -->
-<!-- Extension points -->
-<extension
-      point="org.eclipse.ui.views">
-   <view
-         name="%view.OLEWebBrowserExample.name"
-         icon="icons/webbrowser_example.gif"
-         category="org.eclipse.swt.examples.category"
-         class="org.eclipse.swt.examples.ole.win32.OleBrowserView"
-         id="org.eclipse.swt.examples.ole.win32.browserView">
-   </view>
-</extension>
-<extension
-      point="org.eclipse.swt.examples.launcher.launchItems">
-   <category
-         name="%launchcategory.SWTWin32OnlyExamples.name"
-         description="%launchcategory.SWTWin32OnlyExamples.description"
-         id="org.eclipse.swt.examples.launchWin32OnlyCategory">
-   </category>
-   <item
-         name="%launchitem.OLEWebBrowserExample.name"
-         icon="icons/webbrowser_example.gif"
-         description="%launchitem.OLEWebBrowserExample.description"
-         category="org.eclipse.swt.examples.launchWin32OnlyCategory"
-         id="org.eclipse.swt.examples.ole.win32.viewlauncher">
-      <view
-            viewId="org.eclipse.swt.examples.ole.win32.browserView">
-      </view>
-   </item>
-</extension>
-</plugin>
diff --git a/examples/org.eclipse.swt.examples.ole.win32/src/import.properties b/examples/org.eclipse.swt.examples.ole.win32/src/import.properties
deleted file mode 100644
index 8241dac..0000000
--- a/examples/org.eclipse.swt.examples.ole.win32/src/import.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 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
-###############################################################################
-# Persist project settings for later import 
-natures = org.eclipse.jdt.core.javanature; org.eclipse.pde.PluginNature
-builders = org.eclipse.jdt.core.javabuilder; org.eclipse.pde.ManifestBuilder; org.eclipse.pde.SchemaBuilder
-var.ECLIPSE_PLUGINS = <<ECLIPSE_PLUGINS>>
diff --git a/examples/org.eclipse.swt.examples.ole.win32/src/org/eclipse/swt/examples/ole/win32/OleBrowserView.java b/examples/org.eclipse.swt.examples.ole.win32/src/org/eclipse/swt/examples/ole/win32/OleBrowserView.java
deleted file mode 100755
index e9ba5d4..0000000
--- a/examples/org.eclipse.swt.examples.ole.win32/src/org/eclipse/swt/examples/ole/win32/OleBrowserView.java
+++ /dev/null
@@ -1,370 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.examples.ole.win32;
-
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.ole.win32.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.part.*;
-
-/**
- * Ole uses <code>org.eclipse.swt</code> to demonstrate Win32 OLE / ActiveX
- * integration.
- * 
- * @see ViewPart
- */
-public class OleBrowserView extends ViewPart {
-
-	private Composite      displayArea;
-
-	private OleFrame       webFrame;
-	private OleWebBrowser  webBrowser;
-	private Text           webUrl;
-	private OleControlSite webControlSite;
-	private ProgressBar    webProgress;
-	private Label          webStatus;
-	private Button         webNavigateButton;
-	
-	private ToolItem webCommandBackward;
-	private ToolItem webCommandForward;
-	private ToolItem webCommandHome;
-	private ToolItem webCommandStop;
-	private ToolItem webCommandRefresh;
-	private ToolItem webCommandSearch;
-	
-	private boolean activated = false;
-
-	private static final int DISPID_AMBIENT_DLCONTROL = -5512;
-	private static final int DLCTL_NO_SCRIPTS = 0x80;
-	
-	/**
-	 * Constructs the OLE browser view.
-	 */
-	public OleBrowserView() {
-		OlePlugin.initResources();
-	}
-
-	/**
-	 * Creates the example.
-	 * 
-	 * @see ViewPart#createPartControl
-	 */
-	public void createPartControl(Composite parent) {
-		displayArea = new Composite(parent, SWT.NONE);
-
-		GridLayout gridLayout = new GridLayout();
-		gridLayout.numColumns = 3;
-		displayArea.setLayout(gridLayout);
-		
-		createToolbar();
-		createBrowserFrame();		
-		createStatusArea();
-		createBrowserControl();	
-	}
-	
-	/**
-	 * Cleanup
-	 */
-	public void dispose() {
-		if (activated) {
-			webControlSite.deactivateInPlaceClient();
-			activated = false;
-		}
-		if (webBrowser != null) webBrowser.dispose();
-		webBrowser = null;
-		super.dispose();
-	}
-	
-	/**
-	 * Called when we must grab focus.
-	 * 
-	 * @see org.eclipse.ui.part.ViewPart#setFocus
-	 */
-	public void setFocus()  {
-		webUrl.setFocus();
-	}
-
-	/**
-	 * Creates the Web browser toolbar.
-	 */
-	private void createToolbar() {
-		// Add a toolbar
-		ToolBar bar = new ToolBar(displayArea, SWT.NONE);
-		GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
-		gridData.horizontalSpan = 3;
-		bar.setLayoutData(gridData);
-		
-		// Add a button to navigate backwards through previously visited web sites
-		webCommandBackward = new ToolItem(bar, SWT.NONE);
-		webCommandBackward.setToolTipText(OlePlugin.getResourceString("browser.Back.tooltip"));
-		webCommandBackward.setText(OlePlugin.getResourceString("browser.Back.text"));
-		webCommandBackward.setImage(OlePlugin.images[OlePlugin.biBack]);
-		webCommandBackward.setEnabled(false);
-		webCommandBackward.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				if (webBrowser == null) return;
-				webBrowser.GoBack();
-			}
-		});
-	
-		// Add a button to navigate forward through previously visited web sites
-		webCommandForward = new ToolItem(bar, SWT.NONE);
-		webCommandForward.setToolTipText(OlePlugin.getResourceString("browser.Forward.tooltip"));
-		webCommandForward.setText(OlePlugin.getResourceString("browser.Forward.text"));
-		webCommandForward.setImage(OlePlugin.images[OlePlugin.biForward]);
-		webCommandForward.setEnabled(false);
-		webCommandForward.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				if (webBrowser == null) return;
-				webBrowser.GoForward();
-			}
-		});
-
-		// Add a separator
-		new ToolItem(bar, SWT.SEPARATOR);
-		
-		// Add a button to navigate to the Home page
-		webCommandHome = new ToolItem(bar, SWT.NONE);
-		webCommandHome.setToolTipText(OlePlugin.getResourceString("browser.Home.tooltip"));
-		webCommandHome.setText(OlePlugin.getResourceString("browser.Home.text"));
-		webCommandHome.setImage(OlePlugin.images[OlePlugin.biHome]);
-		webCommandHome.setEnabled(false);
-		webCommandHome.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				if (webBrowser == null) return;
-				webBrowser.GoHome();
-			}
-		});
-
-		// Add a button to abort web page loading
-		webCommandStop = new ToolItem(bar, SWT.NONE);
-		webCommandStop.setToolTipText(OlePlugin.getResourceString("browser.Stop.tooltip"));
-		webCommandStop.setText(OlePlugin.getResourceString("browser.Stop.text"));
-		webCommandStop.setImage(OlePlugin.images[OlePlugin.biStop]);
-		webCommandStop.setEnabled(false);
-		webCommandStop.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				if (webBrowser == null) return;
-				webBrowser.Stop();
-			}
-		});
-
-		// Add a button to refresh the current web page
-		webCommandRefresh = new ToolItem(bar, SWT.NONE);
-		webCommandRefresh.setToolTipText(OlePlugin.getResourceString("browser.Refresh.tooltip"));
-		webCommandRefresh.setText(OlePlugin.getResourceString("browser.Refresh.text"));
-		webCommandRefresh.setImage(OlePlugin.images[OlePlugin.biRefresh]);
-		webCommandRefresh.setEnabled(false);
-		webCommandRefresh.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				if (webBrowser == null) return;
-				webBrowser.Refresh();
-			}
-		});
-
-		// Add a separator
-		new ToolItem(bar, SWT.SEPARATOR);
-
-		// Add a button to search the web
-		webCommandSearch = new ToolItem(bar, SWT.NONE);
-		webCommandSearch.setToolTipText(OlePlugin.getResourceString("browser.Search.tooltip"));
-		webCommandSearch.setText(OlePlugin.getResourceString("browser.Search.text"));
-		webCommandSearch.setImage(OlePlugin.images[OlePlugin.biSearch]);
-		webCommandSearch.setEnabled(false);
-		webCommandSearch.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				if (webBrowser == null) return;
-				webBrowser.GoSearch();
-			}
-		});
-
-		// Add a text area for Users to enter a url
-		Composite addressBar = new Composite(displayArea, SWT.NONE);
-		gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL);
-		gridData.horizontalSpan = 3;
-		addressBar.setLayoutData(gridData);
-		GridLayout gridLayout = new GridLayout();
-		gridLayout.numColumns = 3;
-		addressBar.setLayout(gridLayout);
-
-		Label addressLabel = new Label(addressBar, SWT.NONE);
-		gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL);
-		addressLabel.setLayoutData(gridData);
-		addressLabel.setText(OlePlugin.getResourceString("browser.Address.label"));
-		addressLabel.setFont(OlePlugin.browserFont);
-		
-		webUrl = new Text(addressBar, SWT.SINGLE | SWT.BORDER);
-		webUrl.setFont(OlePlugin.browserFont);
-		gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL);
-		webUrl.setLayoutData(gridData);
-		webUrl.addFocusListener(new FocusAdapter() {
-			public void focusGained(FocusEvent e) {
-				webNavigateButton.getShell().setDefaultButton(webNavigateButton);
-			}
-		});
-	
-		// Add a button to navigate to the web site specified in the Text area defined above
-		webNavigateButton = new Button(addressBar, SWT.PUSH);
-		gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL);
-		webNavigateButton.setLayoutData(gridData);
-		webNavigateButton.setText(OlePlugin.getResourceString("browser.Go.text"));
-		webNavigateButton.setFont(OlePlugin.browserFont);
-		webNavigateButton.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event event) {
-				if (webBrowser == null) return;
-				webBrowser.Navigate(webUrl.getText());
-			}
-		});
-	}
-
-	/**
-	 * Creates the Web browser OleFrame.
-	 */
-	private void createBrowserFrame() {
-		// Every control must have an associated OleFrame:
-		webFrame = new OleFrame(displayArea, SWT.NONE);
-		GridData gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
-		gridData.horizontalSpan = 3;
-		webFrame.setLayoutData(gridData);
-	}
-	
-	/**
-	 * Creates the Web browser status area.
-	 */
-	private void createStatusArea() {
-		// Add a progress bar to display downloading progress information
-		webProgress = new ProgressBar(displayArea, SWT.BORDER);
-		GridData gridData = new GridData();
-		gridData.horizontalAlignment = GridData.BEGINNING;
-		gridData.verticalAlignment = GridData.FILL;
-		webProgress.setLayoutData(gridData);		
-
-		// Add a label for displaying status messages as they are received from the control
-		webStatus = new Label(displayArea, SWT.SINGLE | SWT.READ_ONLY | SWT.BORDER);
-		gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL);
-		gridData.horizontalSpan = 2;
-		webStatus.setLayoutData(gridData);
-		webStatus.setFont(OlePlugin.browserFont);
-	}	
-
-	/**
-	 * Creates Web browser control.
-	 */
-	private void createBrowserControl() {
-		try {
-			// Create an Automation object for access to extended capabilities
-			webControlSite = new OleControlSite(webFrame, SWT.NONE, "Shell.Explorer");
-			Variant download = new Variant(DLCTL_NO_SCRIPTS);
-			webControlSite.setSiteProperty(DISPID_AMBIENT_DLCONTROL, download);
-			OleAutomation oleAutomation = new OleAutomation(webControlSite);
-			webBrowser = new OleWebBrowser(oleAutomation);
-		} catch (SWTException ex) {
-			// Creation may have failed because control is not installed on machine
-			Label label = new Label(webFrame, SWT.BORDER);
-			OlePlugin.logError(OlePlugin.getResourceString("error.CouldNotCreateBrowserControl"), ex);
-			label.setText(OlePlugin.getResourceString("error.CouldNotCreateBrowserControl"));
-			return;
-		}
-
-		// Respond to ProgressChange events by updating the Progress bar
-		webControlSite.addEventListener(OleWebBrowser.ProgressChange, new OleListener() {
-			public void handleEvent(OleEvent event) {
-				Variant progress = event.arguments[0];
-				Variant maxProgress = event.arguments[1];
-				if (progress == null || maxProgress == null)
-					return;
-				webProgress.setMaximum(maxProgress.getInt());
-				webProgress.setSelection(progress.getInt());
-			}
-		});
-		
-		// Respond to StatusTextChange events by updating the Status Text label
-		webControlSite.addEventListener(OleWebBrowser.StatusTextChange, new OleListener() {
-			public void handleEvent(OleEvent event) {
-				Variant statusText = event.arguments[0];
-				if (statusText == null)	return;
-				String text = statusText.getString();
-				if (text != null)
-					webStatus.setText(text);
-			}
-		});
-		
-		// Listen for changes to the ready state and print out the current state 
-		webControlSite.addPropertyListener(OleWebBrowser.DISPID_READYSTATE, new OleListener() {
-			public void handleEvent(OleEvent event) {
-				if (event.detail == OLE.PROPERTY_CHANGING) return;
-				int state = webBrowser.getReadyState();
-				switch (state) {
-					case OleWebBrowser.READYSTATE_UNINITIALIZED:
-						webStatus.setText(
-							OlePlugin.getResourceString("browser.State.Uninitialized.text"));
-						webCommandBackward.setEnabled(false);
-						webCommandForward.setEnabled(false);
-						webCommandHome.setEnabled(false);
-						webCommandRefresh.setEnabled(false);
-						webCommandStop.setEnabled(false);
-						webCommandSearch.setEnabled(false);
-						break;
-					case OleWebBrowser.READYSTATE_LOADING:
-						webStatus.setText(
-							OlePlugin.getResourceString("browser.State.Loading.text"));
-						webCommandHome.setEnabled(true);
-						webCommandRefresh.setEnabled(true);
-						webCommandStop.setEnabled(true);
-						webCommandSearch.setEnabled(true);
-						break;
-					case OleWebBrowser.READYSTATE_LOADED:
-						webStatus.setText(
-							OlePlugin.getResourceString("browser.State.Loaded.text"));
-						webCommandStop.setEnabled(true);
-						break;
-					case OleWebBrowser.READYSTATE_INTERACTIVE:
-						webStatus.setText(
-							OlePlugin.getResourceString("browser.State.Interactive.text"));
-						webCommandStop.setEnabled(true);
-						break;
-					case OleWebBrowser.READYSTATE_COMPLETE:
-						webStatus.setText(
-							OlePlugin.getResourceString("browser.State.Complete.text"));
-						webCommandStop.setEnabled(false);
-						break;
-				}
-			}
-		});
-
-		// Listen for changes to the active command states
-		webControlSite.addEventListener(OleWebBrowser.CommandStateChange, new OleListener() {
-			public void handleEvent(OleEvent event) {
-				if (event.type != OleWebBrowser.CommandStateChange) return;
-				final int commandID =
-					(event.arguments[0] != null) ? event.arguments[0].getInt() : 0;
-				final boolean commandEnabled =
-					(event.arguments[1] != null) ? event.arguments[1].getBoolean() : false;
-				
-				switch (commandID) {
-					case OleWebBrowser.CSC_NAVIGATEBACK:
-					 	webCommandBackward.setEnabled(commandEnabled);
-					 	break;
-					case OleWebBrowser.CSC_NAVIGATEFORWARD:
-					 	webCommandForward.setEnabled(commandEnabled);
-						break;
-				}
-			}
-		});
-
-		// in place activate the ActiveX control		
-		activated = (webControlSite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE) == OLE.S_OK);
-		if (activated) webBrowser.GoHome();
-	}
-}
diff --git a/examples/org.eclipse.swt.examples.ole.win32/src/org/eclipse/swt/examples/ole/win32/OlePlugin.java b/examples/org.eclipse.swt.examples.ole.win32/src/org/eclipse/swt/examples/ole/win32/OlePlugin.java
deleted file mode 100755
index a55c2e3..0000000
--- a/examples/org.eclipse.swt.examples.ole.win32/src/org/eclipse/swt/examples/ole/win32/OlePlugin.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.examples.ole.win32;
-
-
-import java.io.*;
-import java.net.*;
-import java.text.*;
-import java.util.*;
-
-import org.eclipse.core.runtime.*;
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.ui.plugin.*;
-import org.osgi.framework.*;
-
-/**
- * The main plugin class to be used in the desktop.
- */
-public class OlePlugin extends AbstractUIPlugin {
-	//The shared instance.
-	private static OlePlugin plugin;
-	private static ResourceBundle resourceBundle;
-
-	static final int
-		biBack = 0,
-		biForward = 1,
-		biHome = 2,
-		biStop = 3,
-		biRefresh = 4,
-		biSearch = 5;
-	static final String[] imageLocations = {
-		"icons/backward_nav.gif",
-		"icons/forward_nav.gif",
-		"icons/home_nav.gif",
-		"icons/stop_nav.gif",
-		"icons/refresh_nav.gif",
-		"icons/search_nav.gif" };
-	static Image images[];
-	static Font  browserFont;
-   
-	/**
-	 * Constructs an OLE plugin.
-	 */
-	public OlePlugin() {
-		super();
-		plugin = this;
-	}
-	
-    public void start(BundleContext context) throws Exception {
-        super.start(context);
-        resourceBundle = Platform.getResourceBundle(getBundle());
-    }
-    
-	/**
-	 * Clean up
-	 */
-	public void stop(BundleContext context) throws Exception {
-		freeResources();
-		super.stop(context);
-	}
-
-	/**
-	 * Returns the shared instance.
-	 */
-	public static OlePlugin getDefault() {
-		return plugin;
-	}
-
-	/**
-	 * Returns a string from the resource bundle.
-	 * We don't want to crash because of a missing String.
-	 * Returns the key if not found.
-	 */
-	public static String getResourceString(String key) {
-		try {
-			return resourceBundle.getString(key);
-		} catch (MissingResourceException e) {
-			return key;
-		} catch (NullPointerException e) {
-			return "!" + key + "!";
-		}			
-	}
-
-	/**
-	 * Returns a string from the resource bundle and binds it
-	 * with the given arguments. If the key is not found,
-	 * return the key.
-	 */
-	public static String getResourceString(String key, Object[] args) {
-		try {
-			return MessageFormat.format(getResourceString(key), args);
-		} catch (MissingResourceException e) {
-			return key;
-		} catch (NullPointerException e) {
-			return "!" + key + "!";
-		}
-	}
-
-	/**
-	 * Log an error to the ILog for this plugin
-	 * 
-	 * @param message the localized error message text
-	 * @param exception the associated exception, or null
-	 */
-	public static void logError(String message, Throwable exception) {
-		plugin.getLog().log(new Status(
-			IStatus.ERROR, plugin.getBundle().getSymbolicName(), 0, message, exception));
-	}
-
-	/**
-	 * Loads the resources.
-	 */
-	public static void initResources() {
-		if (images == null) {
-			images = new Image[imageLocations.length];
-				
-			for (int i = 0; i < imageLocations.length; ++i) {
-				images[i] = getImageFromPlugin(plugin.getBundle(), imageLocations[i]);
-				if (images[i] == null) {
-					freeResources();
-					logError(getResourceString("error.CouldNotLoadResources"), null);
-					throw new IllegalStateException();
-				}
-			}
-		}
-		if (browserFont == null) {
-			try {
-				browserFont = new Font (null, "MS Sans Serif", 8, SWT.NULL);
-			} catch (Throwable ex) {
-			}
-		}
-		if (images == null || browserFont == null) {
-			freeResources();
-			logError(getResourceString("error.CouldNotLoadResources"), null);
-			throw new IllegalStateException();
-		}
-	}
-
-	/**
-	 * Frees the resources
-	 */
-	public static void freeResources() {
-		if (images != null) {
-			for (int i = 0; i < images.length; ++i) {
-				final Image image = images[i];
-				if (image != null) image.dispose();
-			}
-			images = null;
-		}
-		if (browserFont != null) browserFont.dispose ();
-		browserFont = null;
-	}
-	
-	/**
-	 * Gets an image from a path relative to the plugin install directory.
-	 *
-	 * @param pd the plugin descriptor for the plugin with the image
-	 * @param iconPath the path relative to the install directory
-	 * @return the image, or null if not found
-	 */
-	private static Image getImageFromPlugin(Bundle bundle, String iconPath) {
-		InputStream is = null;
-		try {
-			URL installUrl = bundle.getEntry("/");
-			URL url = new URL(installUrl, iconPath);
-			is = url.openConnection().getInputStream();
-			ImageData source = new ImageData(is);
-			ImageData mask = source.getTransparencyMask();
-			Image image = new Image(null, source, mask);
-			return image;
-		} catch (Throwable ex) {
-			return null;
-		} finally {
-			try {
-				if (is != null) is.close();
-			} catch (IOException e) {
-			}
-		}
-	}
-}
diff --git a/examples/org.eclipse.swt.examples.ole.win32/src/org/eclipse/swt/examples/ole/win32/OleWebBrowser.java b/examples/org.eclipse.swt.examples.ole.win32/src/org/eclipse/swt/examples/ole/win32/OleWebBrowser.java
deleted file mode 100755
index 4498813..0000000
--- a/examples/org.eclipse.swt.examples.ole.win32/src/org/eclipse/swt/examples/ole/win32/OleWebBrowser.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.examples.ole.win32;
-
-
-import org.eclipse.swt.ole.win32.*;
-
-/**
- * Wrapper for an OleAutomation object used to send commands
- * to a Win32 "Shell.Explorer" OLE control.
- * 
- * Instances of this class manage the setup, typical use and teardown of
- * a simple web browser.
- */
-class OleWebBrowser {
-	/* See the Windows Platform SDK documentation for more information about the
-	 * OLE control used here and its usage.
-	 */
-	// Generated from typelib filename: shdocvw.dll
-
-	// Constants for WebBrowser CommandStateChange
-	public static final int CSC_UPDATECOMMANDS = -1;
-	public static final int CSC_NAVIGATEFORWARD = 1;
-	public static final int CSC_NAVIGATEBACK = 2;
-
-	// COnstants for Web Browser ReadyState
-	public static final int READYSTATE_UNINITIALIZED = 0;
-	public static final int READYSTATE_LOADING = 1;
-	public static final int READYSTATE_LOADED = 2;
-	public static final int READYSTATE_INTERACTIVE = 3;
-	public static final int READYSTATE_COMPLETE = 4;
-	
-	// Web Browser Control Events 
-	public static final int BeforeNavigate        = 100; // Fired when a new hyperlink is being navigated to.
-	public static final int NavigateComplete      = 101; // Fired when the document being navigated to becomes visible and enters the navigation stack.
-	public static final int StatusTextChange      = 102; // Statusbar text changed.
-	public static final int ProgressChange        = 108; // Fired when download progress is updated.
-	public static final int DownloadComplete      = 104; // Download of page complete.
-	public static final int CommandStateChange    = 105; // The enabled state of a command changed
-	public static final int DownloadBegin         = 106; // Download of a page started.
-	public static final int NewWindow             = 107; // Fired when a new window should be created.
-	public static final int TitleChange           = 113; // Document title changed.
-	public static final int FrameBeforeNavigate   = 200; // Fired when a new hyperlink is being navigated to in a frame.
-	public static final int FrameNavigateComplete = 201; // Fired when a new hyperlink is being navigated to in a frame.
-	public static final int FrameNewWindow        = 204; // Fired when a new window should be created.
-	public static final int Quit                  = 103; // Fired when application is quiting.
-	public static final int WindowMove            = 109; // Fired when window has been moved.
-	public static final int WindowResize          = 110; // Fired when window has been sized.
-	public static final int WindowActivate        = 111; // Fired when window has been activated.
-	public static final int PropertyChange        = 112; // Fired when the PutProperty method has been called.
-
-	// Web Browser properties
-	public static final int DISPID_READYSTATE = -525;
-
-	private OleAutomation  oleAutomation;
-
-	/**
-	 * Creates a Web browser control.
-	 * <p>
-	 * Typical use:<br>
-	 * <code>
-	 * OleControlSite oleControlSite = new OleControlSite(oleFrame, style, "Shell.Explorer");<br>
-	 * OleAutomation oleAutomation = new OleAutomation(oleControlSite);<br>
-	 * OleWebBrowser webBrowser = new OleWebBrowser(oleControlSite, oleAutomation);<br>
-	 * </code>
-	 * 
-     * @param oleAutomation the OleAutomation object for this control.
-     * @param oleControlSite the OleControlSite object for this control.
-	 */
-	public OleWebBrowser(OleAutomation oleAutomation) {
-		this.oleAutomation = oleAutomation;
-	}
-	
-	
-	/**
-	 * Disposes of the Web browser control.
-	 */
-	public void dispose() {
-		if (oleAutomation != null) oleAutomation.dispose();
-		oleAutomation = null;
-	}
-	
-	/*
-	 * Interact with the Control via OLE Automation
-	 * 
-	 * Note: You can hard code the DISPIDs if you know them beforehand
-	 *       this is of course the fastest way, but you increase coupling
-	 *       to the control.
-	 */
-	 
-	/**
-	 * Returns the current web page title.
-	 * 
-	 * @return the current web page title String
-	 */
-	public String getLocationName() {
-		// dispid=210, type=PROPGET, name="LocationName"
-		int[] rgdispid = oleAutomation.getIDsOfNames(new String[]{"LocationName"}); 
-		int dispIdMember = rgdispid[0];
-		Variant pVarResult = oleAutomation.getProperty(dispIdMember);
-		if (pVarResult == null || pVarResult.getType() != OLE.VT_BSTR) return null;
-		return pVarResult.getString();
-	}
-	
-	/**
-	 * Returns the current URL.
-	 * 
-	 * @return the current URL String
-	 */
-	public String getLocationURL() {
-		// dispid=211, type=PROPGET, name="LocationURL"
-		int[] rgdispid = oleAutomation.getIDsOfNames(new String[]{"LocationURL"}); 
-		int dispIdMember = rgdispid[0];
-		
-		Variant pVarResult = oleAutomation.getProperty(dispIdMember);
-		if (pVarResult == null || pVarResult.getType() != OLE.VT_BSTR) return null;
-		return pVarResult.getString();
-	}
-	
-	/**
-	 * Returns the current state of the control.
-	 * 
-	 * @return the current state of the control, one of:
-	 *         READYSTATE_UNINITIALIZED;
-	 *         READYSTATE_LOADING;
-	 *         READYSTATE_LOADED;
-	 *         READYSTATE_INTERACTIVE;
-	 *         READYSTATE_COMPLETE.
-	 */
-	public int getReadyState() {
-		// dispid=4294966771, type=PROPGET, name="ReadyState"
-		int[] rgdispid = oleAutomation.getIDsOfNames(new String[]{"ReadyState"}); 
-		int dispIdMember = rgdispid[0];
-		
-		Variant pVarResult = oleAutomation.getProperty(dispIdMember);
-		if (pVarResult == null || pVarResult.getType() != OLE.VT_I4) return -1;
-		return pVarResult.getInt();
-	}
-	
-	/**
-	 * Navigates backwards through previously visited web sites.
-	 */
-	public void GoBack() {
-	
-		// dispid=100, type=METHOD, name="GoBack"
-		int[] rgdispid = oleAutomation.getIDsOfNames(new String[]{"GoBack"}); 
-		int dispIdMember = rgdispid[0];
-		oleAutomation.invoke(dispIdMember);
-	}
-	
-	/**
-	 * Navigates backwards through previously visited web sites.
-	 */
-	public void GoForward() {
-	
-		// dispid=101, type=METHOD, name="GoForward"
-		int[] rgdispid = oleAutomation.getIDsOfNames(new String[]{"GoForward"}); 
-		int dispIdMember = rgdispid[0];
-		oleAutomation.invoke(dispIdMember);
-	}
-	
-	/**
-	 * Navigates to home page.
-	 */
-	public void GoHome() {
-		// dispid=102, type=METHOD, name="GoHome"
-		int[] rgdispid = oleAutomation.getIDsOfNames(new String[]{"GoHome"}); 
-		int dispIdMember = rgdispid[0];
-		oleAutomation.invoke(dispIdMember);
-	}
-	
-	/**
-	 * Navigates to user-specified Web search gateway.
-	 */
-	public void GoSearch() {
-		// dispid=103, type=METHOD, name="GoSearch"
-		int[] rgdispid = oleAutomation.getIDsOfNames(new String[]{"GoSearch"}); 
-		int dispIdMember = rgdispid[0];
-		oleAutomation.invoke(dispIdMember);
-	}
-	
-	/**
-	 * Navigates to a particular URL.
-	 */
-	public void Navigate(String url) {
-		// dispid=104, type=METHOD, name="Navigate"
-		int[] rgdispid = oleAutomation.getIDsOfNames(new String[]{"Navigate", "URL"}); 
-		int dispIdMember = rgdispid[0];
-		
-		Variant[] rgvarg = new Variant[1];
-		rgvarg[0] = new Variant(url);
-		int[] rgdispidNamedArgs = new int[1];
-		rgdispidNamedArgs[0] = rgdispid[1]; // identifier of argument
-		oleAutomation.invoke(dispIdMember, rgvarg, rgdispidNamedArgs);
-	}
-	
-	/**
-	 * Refreshes the currently viewed page.
-	 *
-	 * @return the platform-defined result code for the "Refresh" method invocation
-	 */
-	public void Refresh(){
-		// dispid= 4294966746, type=METHOD, name="Refresh"
-		int[] rgdispid = oleAutomation.getIDsOfNames(new String[]{"Refresh"}); 
-		int dispIdMember = rgdispid[0];
-		oleAutomation.invokeNoReply(dispIdMember);
-	}
-	
-	/**
-	 * Aborts loading of the currnet page.
-	 *
-	 * @return the platform-defined result code for the "Stop" method invocation
-	 */
-	public void Stop() {
-		// dispid=106, type=METHOD, name="Stop"
-		int[] rgdispid = oleAutomation.getIDsOfNames(new String[]{"Stop"}); 
-		int dispIdMember = rgdispid[0];
-		oleAutomation.invoke(dispIdMember);
-	}	
-}
diff --git a/examples/org.eclipse.swt.examples.paint/.classpath b/examples/org.eclipse.swt.examples.paint/.classpath
deleted file mode 100755
index 065ac06..0000000
--- a/examples/org.eclipse.swt.examples.paint/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/examples/org.eclipse.swt.examples.paint/.cvsignore b/examples/org.eclipse.swt.examples.paint/.cvsignore
deleted file mode 100755
index c5e82d7..0000000
--- a/examples/org.eclipse.swt.examples.paint/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.examples.paint/.project b/examples/org.eclipse.swt.examples.paint/.project
deleted file mode 100644
index 8d39af0..0000000
--- a/examples/org.eclipse.swt.examples.paint/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.swt.examples.paint</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/examples/org.eclipse.swt.examples.paint/about.html b/examples/org.eclipse.swt.examples.paint/about.html
deleted file mode 100644
index 6f6b96c..0000000
--- a/examples/org.eclipse.swt.examples.paint/about.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>February 24, 2005</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.examples.paint/build.properties b/examples/org.eclipse.swt.examples.paint/build.properties
deleted file mode 100755
index ef0ae0e..0000000
--- a/examples/org.eclipse.swt.examples.paint/build.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 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
-###############################################################################
-bin.includes = doc-html/,\
-               icons/,\
-               plugin.properties,\
-               plugin.xml,\
-               about.html,\
-               *.jar
-
-src.includes = about.html
-
-source.paint.jar = src/
diff --git a/examples/org.eclipse.swt.examples.paint/doc-html/swt_paint_ex.html b/examples/org.eclipse.swt.examples.paint/doc-html/swt_paint_ex.html
deleted file mode 100755
index e48e7ce..0000000
--- a/examples/org.eclipse.swt.examples.paint/doc-html/swt_paint_ex.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <title>SWT - Paint Tool</title>
-</head>
-<body>
-
-<h2>SWT example - Paint Tool</h2>
-
-<p>	
-This example demonstrates the use of SWT graphics operations in the form of a
-rudimentary bitmap painting program.  The Paint Tool implementation also 
-demonstrates a mechanism for managing timed GUI operations in the background 
-that are triggered by user input.
-</p>
-<p>	
-Select a tool with which to draw in the drawing area.  There are a number of tools
-to choose from on the toolbar.  To change the color selection, click on a color in the
-palette below the drawing area; left-click to set the foreground color, right-click to set the
-background color.
-</p>
-
-<h3>Running the example</h3>
-
-<p>
-From Eclipse's <strong>Window</strong> menu select <strong>Show View</strong> &gt; <strong>Other</strong>.  
-In the <strong>Show View</strong> dialog, expand <strong>SWT Examples</strong> and select
-the view named <strong>Paint</strong>. A view containing the paint program will appear.
-</p>
-<p>
-This example can also be run using the <a href="../../org.eclipse.swt.examples.launcher/doc-html/swt_launcher_ex.html">Example Launcher</a>.
-Select the <strong>Paint</strong> item from the <strong>Workbench Views</strong> category and click <strong>Run</strong>.
-</p>
-
-</body>
-</html>
diff --git a/examples/org.eclipse.swt.examples.paint/icons/paint_example.gif b/examples/org.eclipse.swt.examples.paint/icons/paint_example.gif
deleted file mode 100755
index d945dde..0000000
--- a/examples/org.eclipse.swt.examples.paint/icons/paint_example.gif
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.examples.paint/plugin.properties b/examples/org.eclipse.swt.examples.paint/plugin.properties
deleted file mode 100755
index ed78759..0000000
--- a/examples/org.eclipse.swt.examples.paint/plugin.properties
+++ /dev/null
@@ -1,31 +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
-###############################################################################
-providerName = Eclipse.org
-plugin.SWTPaintExample.name = SWT Paint Example Plugin
-category.SWTExamples.name = SWT Examples
-view.PaintExample.name = Paint
-
-launchcategory.SWTViewExamples.name = Workbench Views
-launchcategory.SWTViewExamples.description = \
-	A collection of Standard Widget Toolkit examples that run as Views inside the Workbench.  \
-	These examples will create a new View in the current Perspective.
-
-launchitem.PaintExample.name = Paint
-launchitem.PaintExample.description = \
-	This example demonstrates the use of SWT graphics operations in the form of a \
-	rudimentary bitmap painting program.  The Airbrush Tool implementation also \
-	demonstrates a mechanism for managing timed GUI operations in the background \
-	that are triggered by user input.\n\n\
-	Select a tool with which to draw in the drawing area.  There are a number of tools \
-	to choose from on the toolbar.  To change the color selection, click on a color in the \
-	palette below the drawing area: left-click for the foreground color, right-click for the \
-	background color.\n\n\
-	Uses SWT's GC and FontDialog, and JFace's InputDialog and action set support.
diff --git a/examples/org.eclipse.swt.examples.paint/plugin.xml b/examples/org.eclipse.swt.examples.paint/plugin.xml
deleted file mode 100755
index a31c882..0000000
--- a/examples/org.eclipse.swt.examples.paint/plugin.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin
-   id="org.eclipse.swt.examples.paint"
-   name="%plugin.SWTPaintExample.name"
-   version="3.1.0"
-   provider-name="%providerName"
-   class="org.eclipse.swt.examples.paint.PaintPlugin">
-
-<!-- Runtime -->
-   <runtime>
-      <library name="paint.jar">
-      </library>
-   </runtime>
-<!-- Required plugins -->
-   <requires>
-      <import plugin="org.eclipse.ui.ide"/>
-      <import plugin="org.eclipse.ui.views"/>
-      <import plugin="org.eclipse.jface.text"/>
-      <import plugin="org.eclipse.ui.workbench.texteditor"/>
-      <import plugin="org.eclipse.ui.editors"/>
-      <import plugin="org.eclipse.core.runtime"/>
-      <import plugin="org.eclipse.core.resources"/>
-      <import plugin="org.eclipse.ui"/>
-      <import plugin="org.eclipse.swt"/>
-      <import plugin="org.eclipse.swt.examples"/>
-   </requires>
-
-
-<!-- Extension points -->
-<!-- Extensions -->
-   <extension
-         point="org.eclipse.ui.views">
-      <view
-            name="%view.PaintExample.name"
-            icon="icons/paint_example.gif"
-            category="org.eclipse.swt.examples.category"
-            class="org.eclipse.swt.examples.paint.PaintView"
-            id="org.eclipse.swt.examples.paint.view">
-      </view>
-   </extension>
-   <extension
-         point="org.eclipse.swt.examples.launcher.launchItems">
-      <category
-            name="%launchcategory.SWTViewExamples.name"
-            description="%launchcategory.SWTViewExamples.description"
-            id="org.eclipse.swt.examples.launchViewCategory">
-      </category>
-      <item
-            name="%launchitem.PaintExample.name"
-            icon="icons/paint_example.gif"
-            description="%launchitem.PaintExample.description"
-            category="org.eclipse.swt.examples.launchViewCategory"
-            id="org.eclipse.swt.examples.paint.viewlauncher">
-         <view
-               viewId="org.eclipse.swt.examples.paint.view">
-         </view>
-      </item>
-   </extension>
-
-</plugin>
diff --git a/examples/org.eclipse.swt.examples.paint/src/import.properties b/examples/org.eclipse.swt.examples.paint/src/import.properties
deleted file mode 100644
index 8241dac..0000000
--- a/examples/org.eclipse.swt.examples.paint/src/import.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 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
-###############################################################################
-# Persist project settings for later import 
-natures = org.eclipse.jdt.core.javanature; org.eclipse.pde.PluginNature
-builders = org.eclipse.jdt.core.javabuilder; org.eclipse.pde.ManifestBuilder; org.eclipse.pde.SchemaBuilder
-var.ECLIPSE_PLUGINS = <<ECLIPSE_PLUGINS>>
diff --git a/examples/org.eclipse.swt.examples.paint/src/org/eclipse/swt/examples/paint/PaintPlugin.java b/examples/org.eclipse.swt.examples.paint/src/org/eclipse/swt/examples/paint/PaintPlugin.java
deleted file mode 100755
index 19437fc..0000000
--- a/examples/org.eclipse.swt.examples.paint/src/org/eclipse/swt/examples/paint/PaintPlugin.java
+++ /dev/null
@@ -1,41 +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.examples.paint;
-
-
-import org.eclipse.core.runtime.*;
-import org.eclipse.ui.plugin.*;
-
-/**
- * The main plugin class to be used in the desktop.
- */
-public class PaintPlugin extends AbstractUIPlugin {
-	private static PaintPlugin plugin;
-
-	/**
-	 * Constructs the Paint plugin.
-	 */
-	public PaintPlugin() {
-		super();
-		plugin = this;
-	}
-	
-	/**
-	 * Log an error to the ILog for this plugin
-	 * 
-	 * @param message the localized error message text
-	 * @param exception the associated exception, or null
-	 */
-	public static void logError(String message, Throwable exception) {
-		plugin.getLog().log(
-			new Status(IStatus.ERROR, plugin.getBundle().getSymbolicName(), 0, message, exception));
-	}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.examples.paint/src/org/eclipse/swt/examples/paint/PaintView.java b/examples/org.eclipse.swt.examples.paint/src/org/eclipse/swt/examples/paint/PaintView.java
deleted file mode 100755
index 1250f49..0000000
--- a/examples/org.eclipse.swt.examples.paint/src/org/eclipse/swt/examples/paint/PaintView.java
+++ /dev/null
@@ -1,118 +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.examples.paint;
-
-
-import org.eclipse.jface.action.*;
-import org.eclipse.jface.resource.*;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.*;
-import org.eclipse.ui.part.*;
-
-/**
- * The view for the paint application.
- * All rendering happens inside the area created by createPartControl().
- * 
- * @see ViewPart
- */
-public class PaintView extends ViewPart {
-	PaintExample instance = null;
-
-	/**
-	 * Constructs a Paint view.
-	 */
-	public PaintView() {
-	}
-
-	/**
-	 * Creates the example.
-	 * 
-	 * @see ViewPart#createPartControl
-	 */
-	public void createPartControl(Composite parent) {
-		instance = new PaintExample(parent);
-		instance.createGUI(parent);
-
-		/*** Add toolbar contributions ***/
-		final IActionBars actionBars = getViewSite().getActionBars();
-		IToolBarManager toolbarManager = actionBars.getToolBarManager();
-		Tool tools[] = PaintExample.tools;
-		String group = tools[0].group;
-		toolbarManager.add(new GroupMarker(group));
-		for (int i = 0; i < tools.length; i++) {
-			Tool tool = tools[i];
-			if (!tool.group.equals(group)) {
-				toolbarManager.add(new Separator());
-				toolbarManager.add(new GroupMarker(tool.group));
-			}
-			group = tool.group;
-			PaintAction action = new PaintAction(tool);
-			toolbarManager.appendToGroup(group, action);
-			if (i == PaintExample.Default_tool || i == PaintExample.Default_fill || i == PaintExample.Default_linestyle) {
-				action.setChecked(true);
-			}
-		}
-		actionBars.updateActionBars();
-
-		instance.setDefaults();
-	}
-
-	/**
-	 * Called when the View is to be disposed
-	 */	
-	public void dispose() {
-		instance.dispose();
-		instance = null;
-		super.dispose();
-	}
-	
-	/**
-	 * Returns the Display.
-	 * 
-	 * @return the display we're using
-	 */
-	public Display getDisplay() {
-		return instance.getDisplay();
-	}
-	
-	/**
-	 * Called when we must grab focus.
-	 * 
-	 * @see org.eclipse.ui.part.ViewPart#setFocus
-	 */
-	public void setFocus() {
-		instance.setFocus();
-	}
-
-	/**
-	 * Action set glue.
-	 */
-	class PaintAction extends Action {
-		private int style;
-		private Runnable action;
-		public PaintAction(Tool tool) {
-			super();
-			String id = tool.group + '.' + tool.name;
-			setId(id);
-			style = tool.type == SWT.RADIO ? IAction.AS_RADIO_BUTTON : IAction.AS_PUSH_BUTTON;
-			action = tool.action;
-			setText(PaintExample.getResourceString(id + ".label"));
-			setToolTipText(PaintExample.getResourceString(id + ".tooltip"));
-			setDescription(PaintExample.getResourceString(id + ".description"));
-			setImageDescriptor(ImageDescriptor.createFromFile(
-					PaintExample.class,
-					PaintExample.getResourceString(id + ".image")));
-		}
-		public int getStyle() { return style; }
-		public void run() { action.run(); }
-	}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/StyledTextTab.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/StyledTextTab.java
index 2c361de..65ad1f3 100644
--- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/StyledTextTab.java
+++ b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/StyledTextTab.java
@@ -32,7 +32,6 @@
 	Image boldImage, italicImage, redImage, yellowImage, underlineImage, strikeoutImage;
 	
 	/* Variables for saving state. */
-	String text;
 	StyleRange[] styleRanges;
 
 	/**
@@ -105,10 +104,6 @@
 		styledText.append ("\n");
 		styledText.append (ControlExample.getResourceString("One_Two_Three"));
 		
-		if (text != null) {
-			styledText.setText(text);
-			text = null;
-		}
 		if (styleRanges != null) {
 			styledText.setStyleRanges(styleRanges);
 			styleRanges = null;
@@ -287,7 +282,6 @@
 		/* store the state of the styledText if applicable */
 		if (styledText != null) {
 			styleRanges = styledText.getStyleRanges();
-			text = styledText.getText();
 		}
 		super.disposeExampleWidgets();	
 	}
diff --git a/examples/org.eclipse.swt.opengl.examples/.classpath b/examples/org.eclipse.swt.opengl.examples/.classpath
deleted file mode 100644
index 065ac06..0000000
--- a/examples/org.eclipse.swt.opengl.examples/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/examples/org.eclipse.swt.opengl.examples/.cvsignore b/examples/org.eclipse.swt.opengl.examples/.cvsignore
deleted file mode 100644
index c5e82d7..0000000
--- a/examples/org.eclipse.swt.opengl.examples/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.opengl.examples/.project b/examples/org.eclipse.swt.opengl.examples/.project
deleted file mode 100644
index cb316b4..0000000
--- a/examples/org.eclipse.swt.opengl.examples/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.swt.opengl.examples</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/examples/org.eclipse.swt.opengl.examples/about.html b/examples/org.eclipse.swt.opengl.examples/about.html
deleted file mode 100644
index 6f6b96c..0000000
--- a/examples/org.eclipse.swt.opengl.examples/about.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>February 24, 2005</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.opengl.examples/build.properties b/examples/org.eclipse.swt.opengl.examples/build.properties
deleted file mode 100644
index 6698d19..0000000
--- a/examples/org.eclipse.swt.opengl.examples/build.properties
+++ /dev/null
@@ -1,21 +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
-###############################################################################
-bin.includes = doc-html/,\
-               plugin.properties,\
-               plugin.xml,\
-               about.html,\
-               glexamples.jar
-
-src.includes = about.html,\
-               doc-html/,\
-               src/
-               
-source.glexamples.jar = src/
diff --git a/examples/org.eclipse.swt.opengl.examples/plugin.properties b/examples/org.eclipse.swt.opengl.examples/plugin.properties
deleted file mode 100755
index 53ce66c..0000000
--- a/examples/org.eclipse.swt.opengl.examples/plugin.properties
+++ /dev/null
@@ -1,17 +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
-###############################################################################
-providerName = Eclipse.org
-plugin.OpenGLExampleSet.name = SWT OpenGL Examples Plugin
-
-launchitem.OpenGLExample.name = OpenGL Example
-launchitem.OpenGLExample.description = \
-	The OpenGL example shows how to use many OpenGL features in \
-	an SWT application.
diff --git a/examples/org.eclipse.swt.opengl.examples/plugin.xml b/examples/org.eclipse.swt.opengl.examples/plugin.xml
deleted file mode 100755
index 118725e..0000000
--- a/examples/org.eclipse.swt.opengl.examples/plugin.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin
-   id="org.eclipse.swt.opengl.examples"
-   name="%plugin.OpenGLExampleSet.name"
-   version="0.5.0"
-   provider-name="%providerName"
-   class="">
-
-<!-- Required plugins -->
-<requires>
-   <import plugin="org.eclipse.swt"/>
-   <import plugin="org.eclipse.opengl" version="0.5.0" match="greaterOrEqual"/>
-</requires>
-
-<!-- Runtime -->
-<runtime>
-   <library name="glexamples.jar">
-      <export name="*"/>
-   </library>
-</runtime>
-
-<!-- Extensions -->
-<!-- Extension points -->
-<extension
-      point="org.eclipse.swt.examples.launcher.launchItems">
-   <item
-         name="%launchitem.OpenGLExample.name"
-         description="%launchitem.OpenGLExample.description"
-         category="org.eclipse.swt.examples.launchStandaloneCategory"
-         id="org.eclipse.swt.opengl.examples.OpenGLExample.standalonelauncher">
-      <program
-            pluginId="org.eclipse.swt.opengl.examples"
-            mainClass="org.eclipse.swt.opengl.examples.OpenGLExample">
-      </program>
-   </item>
-</extension>
-</plugin>
diff --git a/examples/org.eclipse.swt.opengl.examples/src/examples_opengl.properties b/examples/org.eclipse.swt.opengl.examples/src/examples_opengl.properties
deleted file mode 100755
index 4927132..0000000
--- a/examples/org.eclipse.swt.opengl.examples/src/examples_opengl.properties
+++ /dev/null
@@ -1,12 +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
-###############################################################################
-error.CouldNotLoadResources = Unable to load resources
-window.title = SWT OpenGL Example
diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/AntialiasingTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/AntialiasingTab.java
deleted file mode 100644
index 2ffacb9..0000000
--- a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/AntialiasingTab.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl.examples;
-
-
-import org.eclipse.opengl.*;
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-class AntialiasingTab extends OpenGLTab {
-	private Button antiAliasButton;
-	private float xPos = 0.0f, yPos = 0.0f, zPos = -6.0f;
-	
-	/**
-	 * @see OpenGLTab#createControls(Composite)
-	 */
-	void createControls(Composite composite) {
-		Group movementGroup = new Group(composite, SWT.NONE);
-		movementGroup.setText("Translation");
-		movementGroup.setLayout(new GridLayout(2, false));
-
-		new Label(movementGroup, SWT.NONE).setText("X:");
-		final Slider xMove = new Slider(movementGroup, SWT.NONE);
-		xMove.setIncrement(1);
-		xMove.setMaximum(12);
-		xMove.setMinimum(0);
-		xMove.setThumb(2);
-		xMove.setPageIncrement(2);
-		xMove.setSelection(5);
-		xMove.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				xPos = xMove.getSelection() - 5;
-			}
-		});
-
-		new Label(movementGroup, SWT.NONE).setText("Y:");
-		final Slider yMove = new Slider(movementGroup, SWT.NONE);
-		yMove.setIncrement(1);
-		yMove.setMaximum(12);
-		yMove.setMinimum(0);
-		yMove.setThumb(2);
-		yMove.setPageIncrement(2);
-		yMove.setSelection(5);
-		yMove.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				yPos = yMove.getSelection() - 5;
-			}
-		});
-
-		new Label(movementGroup, SWT.NONE).setText("Z:");
-		final Slider zMove = new Slider(movementGroup, SWT.NONE);
-		zMove.setIncrement(1);
-		zMove.setMaximum(12);
-		zMove.setMinimum(0);
-		zMove.setThumb(2);
-		zMove.setPageIncrement(2);
-		zMove.setSelection(5);
-		zMove.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				zPos = zMove.getSelection() - 11;
-			}
-		});
-
-		antiAliasButton = new Button(composite, SWT.CHECK);
-		antiAliasButton.setText("Anti-Aliasing");
-		antiAliasButton.setSelection(true);
-		antiAliasButton.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				if (antiAliasButton.getSelection()) {
-					GL.glEnable(GL.GL_LINE_SMOOTH);
-				} else {
-					GL.glDisable(GL.GL_LINE_SMOOTH);
-				}
-			}
-		});
-		
-		ColorSelectionGroup colorGroup =
-			new ColorSelectionGroup(composite, SWT.NONE);
-		colorGroup.setText("Foreground color");
-		colorGroup.addColorSelectionListener(new IColorSelectionListener() {
-			public void handleColorSelection(RGB rgb) {
-				GL.glColor3ub((byte) rgb.red, (byte) rgb.green, (byte) rgb.blue);
-			}
-		});
-	}
-
-	/**
-	 * @see OpenGLTab#dispose()
-	 */
-	void dispose() {
-		super.dispose();
-		GL.glDeleteLists(1, 1);
-	}
-
-	/**
-	 * @see OpenGLTab#getTabText()
-	 */
-	String getTabText() {
-		return "Anti-aliasing";
-	}
-
-	/**
-	 * @see OpenGLTab#init()
-	 */
-	void init() {
-		GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
-		GL.glColor3f(1.0f, 0.0f, 0.0f);
-		final float[] BEZIER_POINTS = {
-			-1.5f, -1.5f, 4.0f, -0.5f, -1.5f, 2.0f, 0.5f, -1.5f,
-			-1.0f, 1.5f, -1.5f, 2.0f, -1.5f, -0.5f, 1.0f, -0.5f,
-			-0.5f, 3.0f, 0.5f, -0.5f, 0.0f, 1.5f, -0.5f, -1.0f,
-			-1.5f, 0.5f, 4.0f, -0.5f, 0.5f, 0.0f, 0.5f, 0.5f,
-			3.0f, 1.5f, 0.5f, 4.0f, -1.5f, 1.5f, -2.0f, -0.5f,
-			1.5f, -2.0f, 0.5f, 1.5f, 0.0f, 1.5f, 1.5f, -1.0f,
-		};
-		GL.glHint(GL.GL_LINE_SMOOTH_HINT, GL.GL_NICEST);
-		GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
-		GL.glMap2f(GL.GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, BEZIER_POINTS);
-		GL.glMapGrid2f(30, 0.0f, 1.0f, 30, 0.0f, 1.0f);
-
-		GL.glEnable(GL.GL_AUTO_NORMAL);
-		GL.glEnable(GL.GL_LINE_SMOOTH);
-		GL.glEnable(GL.GL_LINE_STIPPLE);
-		GL.glEnable(GL.GL_BLEND);
-		GL.glEnable(GL.GL_MAP2_VERTEX_3);
-
-		// create display lists
-		GL.glNewList(1, GL.GL_COMPILE);
-		GL.glEvalMesh2(GL.GL_LINE, 0, 30, 0, 30);
-		GL.glEndList();
-	}
-
-	/**
-	 * @see OpenGLTab#renderScene()
-	 */
-	void renderScene() {
-		GL.glClear(GL.GL_COLOR_BUFFER_BIT);
-		GL.glLoadIdentity();
-		GL.glTranslatef(xPos, yPos, zPos);
-		GL.glCallList(1);	// draw the beizer surface
-	}
-}
diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/AreaTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/AreaTab.java
deleted file mode 100644
index be5ee72..0000000
--- a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/AreaTab.java
+++ /dev/null
@@ -1,434 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl.examples;
-
-
-import org.eclipse.opengl.*;
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-class AreaTab extends OpenGLTab {
-	abstract class Shape {
-		abstract void draw();
-	}
-	class State {
-		private String name;
-		private int index;
-		/**
-		 * Constructor.
-		 * 
-		 * @param name the display name of this state
-		 * @param index the display list index corresponding to this state
-		 */
-		State (String name, int index) {
-			super();
-			this.index = index;
-			this.name = name;
-		}
-		void display() {
-			GL.glCallList(index);
-		}
-		void dispose() {
-			GL.glDeleteLists(index, 1);
-		}
-		String getName() {
-			return name;
-		}
-	}
-
-	private State[] states;
-	private State currentState;
-	private float xPos = 0.0f, yPos = 0.0f, zPos = -30.0f;
-	private float xRot = 90.0f, yRot = 0.0f, zRot = 0.0f;
-	private int quadratic, disk;
-
-	/**
-	 * @see OpenGLTab#createControls(Composite)
-	 */
-	void createControls(Composite composite) {
-		Group movementGroup = new Group(composite, SWT.NONE);
-		movementGroup.setText("Translation");
-		movementGroup.setLayout(new GridLayout(2, false));
-
-		new Label(movementGroup, SWT.NONE).setText("X:");
-		final Slider xMove = new Slider(movementGroup, SWT.NONE);
-		xMove.setIncrement(1);
-		xMove.setMaximum(22);
-		xMove.setMinimum(0);
-		xMove.setThumb(2);
-		xMove.setPageIncrement(2);
-		xMove.setSelection(10);
-		xMove.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				xPos = xMove.getSelection() - 10;
-			}
-		});
-
-		new Label(movementGroup, SWT.NONE).setText("Y:");
-		final Slider yMove = new Slider(movementGroup, SWT.NONE);
-		yMove.setIncrement(1);
-		yMove.setMaximum(22);
-		yMove.setMinimum(0);
-		yMove.setThumb(2);
-		yMove.setPageIncrement(2);
-		yMove.setSelection(10);
-		yMove.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				yPos = yMove.getSelection() - 10;
-			}
-		});
-
-		new Label(movementGroup, SWT.NONE).setText("Z:");
-		final Slider zMove = new Slider(movementGroup, SWT.NONE);
-		zMove.setIncrement(1);
-		zMove.setMaximum(22);
-		zMove.setMinimum(0);
-		zMove.setThumb(2);
-		zMove.setPageIncrement(2);
-		zMove.setSelection(10);
-		zMove.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				zPos = zMove.getSelection() - 40;
-			}
-		});
-
-		Group rotationGroup = new Group(composite, SWT.NONE);
-		rotationGroup.setText("Rotation");
-		rotationGroup.setLayout(new GridLayout(2, false));
-
-		new Label(rotationGroup, SWT.NONE).setText("X:");
-		final Slider xRotation = new Slider(rotationGroup, SWT.NONE);
-		xRotation.setIncrement(10);
-		xRotation.setMaximum(362);
-		xRotation.setMinimum(0);
-		xRotation.setThumb(2);
-		xRotation.setPageIncrement(20);
-		xRotation.setSelection(90);
-		xRotation.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				xRot = xRotation.getSelection();
-			}
-		});
-
-		new Label(rotationGroup, SWT.NONE).setText("Y:");
-		final Slider yRotation = new Slider(rotationGroup, SWT.NONE);
-		yRotation.setIncrement(10);
-		yRotation.setMaximum(362);
-		yRotation.setMinimum(0);
-		yRotation.setThumb(2);
-		yRotation.setPageIncrement(20);
-		yRotation.setSelection(0);
-		yRotation.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				yRot = yRotation.getSelection();
-			}
-		});
-
-		new Label(rotationGroup, SWT.NONE).setText("Z:");
-		final Slider zRotation = new Slider(rotationGroup, SWT.NONE);
-		zRotation.setIncrement(10);
-		zRotation.setMaximum(362);
-		zRotation.setMinimum(0);
-		zRotation.setThumb(2);
-		zRotation.setPageIncrement(20);
-		zRotation.setSelection(0);
-		zRotation.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				zRot = zRotation.getSelection();
-			}
-		});
-
-		Composite optionsGroup = new Composite(composite, SWT.NONE);
-		GridLayout layout = new GridLayout(2, false);
-		layout.marginWidth = 0;
-		optionsGroup.setLayout(layout);
-
-		new Label(optionsGroup, SWT.NONE).setText("Shape:");
-
-		final Combo statesCombo = new Combo(optionsGroup, SWT.READ_ONLY);
-		for (int i = 0; i < states.length; i++) {
-			statesCombo.add(states[i].getName());
-		}
-		statesCombo.select(0);
-		statesCombo.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				currentState = states[statesCombo.getSelectionIndex()];
-			}
-		});
-
-		final Button lightsButton = new Button(composite, SWT.CHECK);
-		lightsButton.setText("Lights");
-		lightsButton.setSelection(true);
-		lightsButton.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				if (lightsButton.getSelection()) {
-					GL.glEnable(GL.GL_LIGHTING);
-				} else {
-					GL.glDisable(GL.GL_LIGHTING);
-				}
-			}
-		});
-	}
-
-	/**
-	 * @see OpenGLTab#dispose()
-	 */
-	void dispose() {
-		super.dispose();
-		GLU.gluDeleteQuadric(quadratic);
-		GLU.gluDeleteQuadric(disk);
-		if (states != null) {
-			for (int i = 0; i < states.length; i++) {
-				states [i].dispose();
-			}
-		}
-	}
-
-	/**
-	 * Draws the logical AND of two shapes.
-	 *
-	 * @param a shape A
-	 * @param b shape B
-	 */
-	void drawAandB(Shape a, Shape b) {
-		// draw parts of B that are inside A
-		drawAinsideB(a, b, GL.GL_BACK, GL.GL_NOTEQUAL);
-		// we do not want the following to show up
-		GL.glColorMask(false, false, false, false);
-		// turn on depth testing
-		GL.glEnable(GL.GL_DEPTH_TEST);
-		GL.glDepthFunc(GL.GL_ALWAYS);
-		// render the front face of B
-		b.draw();
-		// reset the depth function
-		GL.glDepthFunc(GL.GL_LESS);
-		// draw parts of A that are inside B
-		drawAinsideB(b, a, GL.GL_BACK, GL.GL_NOTEQUAL);
-	}
-
-	/**
-	 * Draws the contents of one shape that appear within another.
-	 *
-	 * @param a the shape to draw
-	 * @param b the constraining shape
-	 * @param face
-	 * @param test
-	 */
-	void drawAinsideB(Shape a, Shape b, int face, int test) {
-		// turn off the color buffer
-		GL.glColorMask(false, false, false, false);
-		// clear the stencil buffer
-		GL.glClearStencil(0);
-		GL.glEnable(GL.GL_DEPTH_TEST);
-		// set to proper Culling
-		GL.glCullFace(face);
-		// render shape A
-		a.draw();
-		// set depth mask
-		GL.glDepthMask(false);
-		// enable stencil test
-		GL.glEnable(GL.GL_STENCIL_TEST);
-		GL.glStencilFunc(GL.GL_ALWAYS, 0, 0);
-		// set the stencil buffer to increment if the depth test passes
-		GL.glStencilOp(GL.GL_KEEP, GL.GL_KEEP, GL.GL_INCR);
-		// turn on back face culling
-		GL.glCullFace(GL.GL_BACK);
-		// render B
-		b.draw();
-		// set the stencil buffer to decrement if the depth test passes
-		GL.glStencilOp(GL.GL_KEEP, GL.GL_KEEP, GL.GL_DECR);
-		// cull the front face
-		GL.glCullFace(GL.GL_FRONT);
-		// render B again
-		b.draw();
-		// set depth mask
-		GL.glDepthMask(true);
-		GL.glColorMask(true, true, true, true);
-		// set the stencil buffer
-		GL.glStencilFunc(test, 0, 1);
-		// turn off depth testing
-		GL.glDisable(GL.GL_DEPTH_TEST);
-		// set to proper culling
-		GL.glCullFace(face);
-		// render A
-		a.draw();
-		// disable stencil test
-		GL.glDisable(GL.GL_STENCIL_TEST);
-	}
-
-	/**
-	 * Draws the logical OR of two shapes.
-	 *
-	 * @param a shape A
-	 * @param b shape B
-	 */
-	void drawAorB(Shape a, Shape b) {
-		GL.glEnable(GL.GL_DEPTH_TEST);
-		a.draw();
-		b.draw();
-		GL.glDisable(GL.GL_DEPTH_TEST);
-	}
-
-	/**
-	 * Draws one shape subtracted from another.
-	 *
-	 * @param a the base shape
-	 * @param b the shape to subtract
-	 */
-	void drawAsubB(Shape a, Shape b) {
-		// draw back parts of B inside A
-		drawAinsideB(b, a, GL.GL_FRONT, GL.GL_NOTEQUAL);
-		// we do not want the following to show up
-		GL.glColorMask(false, false, false, false);
-		GL.glEnable(GL.GL_DEPTH_TEST);
-		// change the depth test to GL_ALWAYS
-		GL.glDepthFunc(GL.GL_ALWAYS);
-		// render the front face of B
-		a.draw();
-		// reset the depth function
-		GL.glDepthFunc(GL.GL_LESS);
-		// draw front parts of A outside B
-		drawAinsideB(a, b, GL.GL_BACK, GL.GL_EQUAL);
-	}
-
-	/**
-	 * Draws the specifed shape.
-	 * 
-	 * @param shape the shape to draw
-	 */
-	void drawShape(Shape shape) {
-		GL.glEnable(GL.GL_DEPTH_TEST);
-		shape.draw();
-		GL.glDisable(GL.GL_DEPTH_TEST);
-	}
-
-	/**
-	 * @see OpenGLTab#getTabText()
-	 */
-	String getTabText() {
-		return "Area";
-	}
-	
-	/**
-	 * @see OpenGLTab#init()
-	 */
-	void init() {
-		if (!hasStencilSupport()) return;
-		
-		GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
-		float[] lightPos = { 0.0f, 5.0f, -10.0f, 1.0f };
-		GL.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, lightPos);
-		quadratic = GLU.gluNewQuadric();
-		disk = GLU.gluNewQuadric();
-	
-		GL.glEnable(GL.GL_CULL_FACE);
-		GL.glEnable(GL.GL_LIST_MODE);
-		GL.glEnable(GL.GL_LIGHT0);
-		GL.glEnable(GL.GL_LIGHTING);
-		GL.glLightModeli(GL.GL_LIGHT_MODEL_TWO_SIDE, GL.GL_TRUE);
-
-		final float[] sphereMaterial = { 0.0f, 1.0f, 0.0f, 1.0f };
-		final float[] cylinderMaterial = { 1.0f, 0.0f, 0.0f, 1.0f };
-
-		Shape sphere = new Shape() {
-			public void draw() {
-				GL.glMaterialfv(
-					GL.GL_FRONT_AND_BACK,
-					GL.GL_AMBIENT_AND_DIFFUSE,
-					sphereMaterial);
-				GL.glColor3f(0.0f, 1.0f, 0.0f);
-				GLU.gluSphere(quadratic, 3, 32, 32);
-			}
-		};
-		Shape cylinder = new Shape() {
-			public void draw() {
-				GL.glMaterialfv(
-					GL.GL_FRONT_AND_BACK,
-					GL.GL_AMBIENT_AND_DIFFUSE,
-					cylinderMaterial);
-				GL.glColor3f(1.0f, 0.0f, 0.0f);
-				GLU.gluQuadricOrientation(disk, GLU.GLU_INSIDE);
-				GL.glPushMatrix();
-				GL.glTranslatef(1.0f, 1.0f, 0.0f);
-				GLU.gluDisk(disk, 0, 3, 32, 32);
-				GLU.gluCylinder(quadratic, 3, 3, 6, 32, 32);
-				GL.glPushMatrix();
-				GL.glTranslatef(0.0f, 0.0f, 6.0f);
-				GLU.gluQuadricOrientation(disk, GLU.GLU_OUTSIDE);
-				GLU.gluDisk(disk, 0, 3, 32, 32);
-				GL.glPopMatrix();
-				GL.glPopMatrix();
-			}
-		};
-
-		// create the display lists and states
-		states = new State[6];
-		int index = 1;
-		
-		GL.glNewList(index, GL.GL_COMPILE);
-		drawShape(cylinder);
-		GL.glEndList();
-		states[0] = new State("Cylinder",index++);
-
-		GL.glNewList(index, GL.GL_COMPILE);
-		drawShape(sphere);
-		GL.glEndList();
-		states[1] = new State("Sphere",index++);
-
-		GL.glNewList(index, GL.GL_COMPILE);
-		drawAorB(cylinder, sphere);
-		GL.glEndList();
-		states[2] = new State("Cylinder OR Sphere",index++);
-
-		GL.glNewList(index, GL.GL_COMPILE);
-		drawAandB(cylinder, sphere);
-		GL.glEndList();
-		states[3] = new State("Cylinder AND Sphere",index++);
-
-		GL.glNewList(index, GL.GL_COMPILE);
-		drawAsubB(cylinder, sphere);
-		GL.glEndList();
-		states[4] = new State("Cylinder SUB Sphere",index++);
-		
-		GL.glNewList(index, GL.GL_COMPILE);
-		drawAsubB(sphere, cylinder);
-		GL.glEndList();
-		states[5] = new State("Sphere SUB Cylinder",index++);
-
-		currentState = states[0];
-	}
-	
-	/**
-	 * @see OpenGLTab#isStencilSupportNeeded
-	 */
-	boolean isStencilSupportNeeded() {
-		return true;
-	}
-
-	/**
-	 * @see OpenGLTab#renderScene()
-	 */
-	void renderScene() {
-		GL.glClear(
-			GL.GL_COLOR_BUFFER_BIT
-				| GL.GL_DEPTH_BUFFER_BIT
-				| GL.GL_STENCIL_BUFFER_BIT);
-
-		GL.glLoadIdentity();
-		GL.glTranslatef(xPos, yPos, zPos);
-		GL.glRotatef(xRot, 1.0f, 0.0f, 0.0f);
-		GL.glRotatef(yRot, 0.0f, 1.0f, 0.0f);
-		GL.glRotatef(zRot, 0.0f, 0.0f, 1.0f);
-
-		currentState.display();
-	}
-}
diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ColorSelectionGroup.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ColorSelectionGroup.java
deleted file mode 100644
index c5dbb53..0000000
--- a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ColorSelectionGroup.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl.examples;
-
-
-import java.util.Vector;
-
-import org.eclipse.opengl.*;
-import org.eclipse.swt.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-class ColorSelectionGroup implements Listener {
-	private Color color;
-	private Label label;
-	private Image image;
-	private Button button;
-	private Vector listeners = new Vector();
-
-	/**
-	 * Constructor.
-	 * 
-	 * @param parent the parent composite
-	 * @param style style bits to be applied to the color group
-	 */
-	ColorSelectionGroup(Composite parent, int style) {
-		super();
-		initColor(parent.getDisplay());
-
-		Composite colorGroup = new Composite(parent, style);
-		GridLayout layout = new GridLayout(2, false);
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
-		colorGroup.setLayout(layout);
-//		GridData data = new GridData(GridData.FILL_HORIZONTAL);
-//		data.grabExcessHorizontalSpace = true;
-//		colorGroup.setLayoutData(data);
-
-		button = new Button(colorGroup, SWT.NONE);
-		button.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
-		image = new Image(button.getDisplay(), 12, 12);
-		drawButtonImage();
-		button.setImage(image);
-		button.addListener(SWT.Selection, this);
-		button.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent event) {
-				if (image != null) image.dispose();
-				if (color != null) color.dispose();
-			}
-		});
-		
-		label = new Label(colorGroup, SWT.NONE);
-		label.setText("Color");
-//		data = new GridData(GridData.FILL_HORIZONTAL);
-//		data.grabExcessHorizontalSpace = true;
-//		label.setLayoutData(data);
-	}
-
-	/**
-	 * Adds the argument to this group's collection of
-	 * color selection listeners.
-	 * 
-	 * @param listener
-	 */
-	void addColorSelectionListener(IColorSelectionListener listener) {
-		listeners.addElement(listener);
-	}
-	
-	/**
-	 * Draws the colored square on the selection button.
-	 */
-	void drawButtonImage() {
-		GC gc = new GC(image);
-		gc.setBackground(color);
-		Rectangle bounds = image.getBounds();
-		gc.fillRectangle(0, 0, bounds.width, bounds.height);
-		gc.drawRectangle(0, 0, bounds.width - 1, bounds.height - 1);
-		gc.dispose();
-	}
-
-	/**
-	 * @see org.eclipse.swt.widgets.Listener#handleEvent(Event)
-	 */
-	public void handleEvent(Event e) {
-		Shell shell = button.getShell();
-		ColorDialog colorDialog = new ColorDialog(shell);
-		colorDialog.setRGB(
-			new RGB(color.getRed(), color.getGreen(), color.getBlue()));
-		RGB rgb = colorDialog.open();
-		if (rgb == null) return;
-		setRGB(rgb);
-		notifyListeners(rgb);
-	}
-
-	/**
-	 * Initializes the color by querying for the current color.
-	 * 
-	 * @param display
-	 */
-	void initColor(Display display) {
-		double[] currentColor = new double[4];
-		GL.glGetDoublev(GL.GL_CURRENT_COLOR, currentColor);
-		RGB rgb =
-			new RGB(
-				(int) currentColor[0] * 255,
-				(int) currentColor[1] * 255,
-				(int) currentColor[2] * 255);
-		color = new Color(display, rgb);
-	}
-	
-	/**
-	 * Notifies all registered color selection listeners.
-	 * 
-	 * @param value
-	 */
-	void notifyListeners(RGB rgb) {
-		IColorSelectionListener[] listenersArr =
-			new IColorSelectionListener[listeners.size()];
-		listeners.copyInto(listenersArr);
-		for (int i = 0; i < listenersArr.length; i++) {
-			listenersArr [i].handleColorSelection(rgb);
-		}
-	}
-
-	/**
-	 * Removes the argument from this group's collection of color selection
-	 * listeners.  If the argument is not a registered listener then does
-	 * nothing.
-	 * 
-	 * @param listener
-	 */
-	void removeColorSelectionListener(IColorSelectionListener listener) {
-		listeners.removeElement(listener);
-	}
-
-	/**
-	 * Sets the text for the group's label.
-	 * 
-	 * @param text the new label text
-	 */
-	void setText(String text) {
-		label.setText(text);
-	}
-
-	/**
-	 * Sets the current color.
-	 * 
-	 * @param rgb the rgb of the new color
-	 */
-	void setRGB(RGB rgb) {
-		Color oldColor = color;
-		color = new Color(button.getDisplay(), rgb);
-		drawButtonImage();
-		button.setImage(image);
-		if (oldColor != null) oldColor.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/FogTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/FogTab.java
deleted file mode 100644
index 9320d59..0000000
--- a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/FogTab.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl.examples;
-
-
-import org.eclipse.opengl.*;
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-class FogTab extends OpenGLTab {
-
-	private float rotY = 0.0f;
-	private float yPos = 0.0f, xPos = 0.0f, zPos = -15.0f;
-	private int cubeListIndexBase;
-	private final static int[] FOG_TYPES = { GL.GL_LINEAR, GL.GL_EXP, GL.GL_EXP2 };
-	private final static String[] FOG_NAMES = { "LINEAR", "GL_EXP", "GL_EXP2" };
-	private final static int SLEEP_LENGTH = 0;
-
-	/**
-	 * @see OpenGLTab#createControls(Composite)
-	 */
-	void createControls(Composite composite) {
-		Group movementGroup = new Group(composite, SWT.NONE);
-		movementGroup.setText("Translation");
-		movementGroup.setLayout(new GridLayout(2, false));
-
-		new Label(movementGroup, SWT.NONE).setText("X:");
-		final Slider xMove = new Slider(movementGroup, SWT.NONE);
-		xMove.setIncrement(1);
-		xMove.setMaximum(12);
-		xMove.setMinimum(0);
-		xMove.setThumb(2);
-		xMove.setPageIncrement(2);
-		xMove.setSelection(5);
-		xMove.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				xPos = xMove.getSelection() - 5;
-			}
-		});
-
-		new Label(movementGroup, SWT.NONE).setText("Y:");
-		final Slider yMove = new Slider(movementGroup, SWT.NONE);
-		yMove.setIncrement(1);
-		yMove.setMaximum(12);
-		yMove.setMinimum(0);
-		yMove.setThumb(2);
-		yMove.setPageIncrement(2);
-		yMove.setSelection(5);
-		yMove.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				yPos = yMove.getSelection() - 5;
-			}
-		});
-
-		new Label(movementGroup, SWT.NONE).setText("Z:");
-		final Slider zMove = new Slider(movementGroup, SWT.NONE);
-		zMove.setIncrement(1);
-		zMove.setMaximum(24);
-		zMove.setMinimum(0);
-		zMove.setThumb(4);
-		zMove.setPageIncrement(2);
-		zMove.setSelection(10);
-		zMove.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				zPos = zMove.getSelection() - 25;
-			}
-		});
-
-		Composite fogTypesGroup = new Composite(composite,SWT.NONE);
-		GridLayout layout = new GridLayout(2,false);
-		layout.marginHeight = 0;
-		layout.marginWidth = 0;
-		fogTypesGroup.setLayout(layout);
-		fogTypesGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
-
-		new Label(fogTypesGroup, SWT.NONE).setText("Fog Types:");
-		final Combo fogTypeCombo = new Combo(fogTypesGroup, SWT.READ_ONLY);
-		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-		data.grabExcessHorizontalSpace = true;
-		fogTypeCombo.setLayoutData(data);
-		fogTypeCombo.setItems(FOG_NAMES);
-		fogTypeCombo.select(0);
-
-		new Label(composite, SWT.NONE).setText("Fog Density:");
-		final Slider fogDensitySlider = new Slider(composite, SWT.NONE);
-		fogDensitySlider.setIncrement(1);
-		fogDensitySlider.setMaximum(32);
-		fogDensitySlider.setMinimum(0);
-		fogDensitySlider.setThumb(2);
-		fogDensitySlider.setPageIncrement(5);
-		fogDensitySlider.setSelection(0);
-		fogDensitySlider.setEnabled(false);
-		fogDensitySlider.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				float fogDensity = ((float)fogDensitySlider.getSelection()) / 100;
-				GL.glFogf(GL.GL_FOG_DENSITY, fogDensity);
-			}
-		});
-		fogTypeCombo.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				int currentSelection = fogTypeCombo.getSelectionIndex();
-				// fog type GL.GL_LINEAR does not utilize fogDensity, but the other fog types do
-				fogDensitySlider.setEnabled(currentSelection != 0);
-				GL.glFogf(GL.GL_FOG_MODE, FOG_TYPES[currentSelection]);
-			}
-		});
-	}
-
-	/**
-	 * Creates a cube at 0,0 in the viewport.
-	 */
- 	void createCube() {
-		GL.glNewList(cubeListIndexBase, GL.GL_COMPILE);
-		GL.glBegin(GL.GL_QUADS);
-		// front
-		GL.glColor3f(0.0f, 1.0f, 0.0f);
-		GL.glVertex3f(-0.5f, -0.5f, 0.5f);	// bottom left 
-		GL.glColor3f(0.0f, 0.0f, 1.0f);
-		GL.glVertex3f(0.5f, -0.5f, 0.5f);	// bottom right
-		GL.glColor3f(1.0f, 1.0f, 0.0f);
-		GL.glVertex3f(0.5f, 0.5f, 0.5f);	// top right
-		GL.glColor3f(1.0f, 0.0f, 0.0f);
-		GL.glVertex3f(-0.5f, 0.5f, 0.5f);	// top left
-		// back
-		GL.glColor3f(0.0f, 0.0f, 1.0f);
-		GL.glVertex3f(-0.5f, -0.5f, -0.5f);	// bottom left 
-		GL.glColor3f(0.0f, 1.0f, 0.0f);
-		GL.glVertex3f(0.5f, -0.5f, -0.5f);	// bottom right
-		GL.glColor3f(1.0f, 0.0f, 0.0f);
-		GL.glVertex3f(0.5f, 0.5f, -0.5f);	// top right
-		GL.glColor3f(1.0f, 1.0f, 0.0f);
-		GL.glVertex3f(-0.5f, 0.5f, -0.5f);	// top left
-		// left
-		GL.glColor3f(0.0f, 0.0f, 1.0f);
-		GL.glVertex3f(-0.5f, -0.5f, -0.5f);	// bottom left
-		GL.glColor3f(0.0f, 1.0f, 0.0f);
-		GL.glVertex3f(-0.5f, -0.5f, 0.5f);	// bottom right
-		GL.glColor3f(1.0f, 0.0f, 0.0f);
-		GL.glVertex3f(-0.5f, 0.5f, 0.5f);	// top right
-		GL.glColor3f(1.0f, 1.0f, 0.0f);
-		GL.glVertex3f(-0.5f, 0.5f, -0.5f);	// top left	
-		// right
-		GL.glColor3f(0.0f, 0.0f, 1.0f);
-		GL.glVertex3f(0.5f, -0.5f, 0.5f);	// bottom left
-		GL.glColor3f(0.0f, 1.0f, 0.0f);
-		GL.glVertex3f(0.5f, -0.5f, -0.5f);	// bottom right
-		GL.glColor3f(1.0f, 0.0f, 0.0f);
-		GL.glVertex3f(0.5f, 0.5f, -0.5f);	// top right
-		GL.glColor3f(1.0f, 1.0f, 0.0f);
-		GL.glVertex3f(0.5f, 0.5f, 0.5f);	// top left
-		// top
-		GL.glColor3f(1.0f, 0.0f, 0.0f);
-		GL.glVertex3f(0.5f, 0.5f, -0.5f);
-		GL.glColor3f(1.0f, 1.0f, 0.0f);
-		GL.glVertex3f(-0.5f, 0.5f, -0.5f);
-		GL.glColor3f(1.0f, 0.0f, 0.0f);
-		GL.glVertex3f(-0.5f, 0.5f, 0.5f);
-		GL.glColor3f(1.0f, 1.0f, 0.0f);
-		GL.glVertex3f(0.5f, 0.5f, 0.5f);
-		// bottom
-		GL.glColor3f(0.0f, 0.0f, 1.0f);
-		GL.glVertex3f(0.5f, -0.5f, 0.5f);
-		GL.glColor3f(0.0f, 1.0f, 0.0f);
-		GL.glVertex3f(-0.5f, -0.5f, 0.5f);
-		GL.glColor3f(0.0f, 0.0f, 1.0f);
-		GL.glVertex3f(-0.5f, -0.5f, -0.5f);
-		GL.glColor3f(0.0f, 1.0f, 0.0f);
-		GL.glVertex3f(0.5f, -0.5f, -0.5f);
-		GL.glEnd();
-		GL.glEndList();
-	}
-
-	/**
-	 * @see OpenGLTab#dispose()
-	 */
-	void dispose() {
-		super.dispose();
-		GL.glDeleteLists(cubeListIndexBase, 1);
-	}
-
-	/**
-	 * @see OpenGLTab#getSleepLength()
-	 */
-	int getSleepLength() {
-		return SLEEP_LENGTH;	
-	}
-	/**
-	 * @see OpenGLTab#getTabText()
-	 */
-	String getTabText() {
-		return "Fog";
-	}
-
-	/**
-	 * @see OpenGLTab#init()
-	 */
-	void init() {
-		GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
-		// fog color should be the same as the clear color
-		// to look appropriate
-		float[] fogColor = { 1.0f, 1.0f, 1.0f, 1.0f };
-		GL.glFogfv(GL.GL_FOG_COLOR, fogColor);
-		GL.glHint(GL.GL_FOG_HINT, GL.GL_DONT_CARE);
-		GL.glFogf(GL.GL_FOG_START, 0);
-		GL.glFogf(GL.GL_FOG_DENSITY, 0.0f);
-		// set the end of the start distance; anything > 15
-		// units from the camera will be covered in fog
-		GL.glFogf(GL.GL_FOG_END, 15);
-		GL.glFogf(GL.GL_FOG_MODE, FOG_TYPES[0]);
-		GL.glEnable(GL.GL_FOG);
-		GL.glEnable(GL.GL_DEPTH_TEST);
-
-		cubeListIndexBase = GL.glGenLists(1);
-		createCube();
-	}
-
-	/**
-	 * @see OpenGLTab#renderScene()
-	 */
-	void renderScene() {
-		GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
-		GL.glLoadIdentity();
-		GL.glTranslatef(xPos, yPos, zPos);
-		GL.glRotatef(rotY, 0.0f, 1.0f, 0.0f);
-
-		GL.glCallList(cubeListIndexBase);
-
-		GL.glPushMatrix();
-		GL.glTranslatef(3, 0, -3);
-		GL.glCallList(cubeListIndexBase);
-		GL.glPopMatrix();
-
-		GL.glPushMatrix();
-		GL.glTranslatef(-3, 0, -3);
-		GL.glCallList(cubeListIndexBase);
-		GL.glPopMatrix();
-
-		GL.glPushMatrix();
-		GL.glTranslatef(0, 0, 4);
-		GL.glCallList(cubeListIndexBase);
-		GL.glPopMatrix();
-
-		rotY += 0.6f;
-	}
-}
diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/GradientTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/GradientTab.java
deleted file mode 100644
index cd9d5df..0000000
--- a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/GradientTab.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl.examples;
-
-
-import org.eclipse.opengl.*;
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-class GradientTab extends OpenGLTab {
-	private float xPos = 0.0f, yPos = 0.0f, zPos = -7.0f;
-	private float xRot = 180.0f, yRot = 180.0f, zRot = 180.0f;
-	private int currentSelection = 1;
-	private final static float[] BEZIER_COLORS = {
-		0.0f, 1.0f, 0.0f, 0.0f, 0.3f, 0.6f, 0.1f, 0.0f,
-		0.8f, 0.2f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f,
-		0.0f, 0.0f, 1.0f, 0.0f, 0.8f, 0.8f, 0.8f, 0.0f
-	};
-	private final static float[] BEZIER_POINTS = {
-		-1.5f, -1.5f, 4.0f, -0.5f, -1.5f, 2.0f, 0.5f, -1.5f,
-		-1.0f, 1.5f, -1.5f, 2.0f, -1.5f, -0.5f, 1.0f, -0.5f,
-		-0.5f, 3.0f, 0.5f, -0.5f, 0.0f, 1.5f, -0.5f, -1.0f,
-		-1.5f, 0.5f, 4.0f, -0.5f, 0.5f, 0.0f, 0.5f, 0.5f,
-		3.0f, 1.5f, 0.5f, 4.0f, -1.5f, 1.5f, -2.0f, -0.5f,
-		1.5f, -2.0f, 0.5f, 1.5f, 0.0f, 1.5f, 1.5f, -1.0f,
-	};
-	private final static String[] OBJECT_NAMES = { "Bezier", "Square" };
-
-	/**
-	 * @see OpenGLTab#createControls(Composite)
-	 */
-	void createControls(Composite composite) {
-		Group movementGroup = new Group(composite, SWT.NONE);
-		movementGroup.setText("Translation");
-		movementGroup.setLayout(new GridLayout(2, false));
-
-		new Label(movementGroup, SWT.NONE).setText("X:");
-		final Slider xMove = new Slider(movementGroup, SWT.NONE);
-		xMove.setIncrement(1);
-		xMove.setMaximum(12);
-		xMove.setMinimum(0);
-		xMove.setThumb(2);
-		xMove.setPageIncrement(2);
-		xMove.setSelection(5);
-		xMove.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				xPos = xMove.getSelection() - 5;
-			}
-		});
-
-		new Label(movementGroup, SWT.NONE).setText("Y:");
-		final Slider yMove = new Slider(movementGroup, SWT.NONE);
-		yMove.setIncrement(1);
-		yMove.setMaximum(12);
-		yMove.setMinimum(0);
-		yMove.setThumb(2);
-		yMove.setPageIncrement(2);
-		yMove.setSelection(5);
-		yMove.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				yPos = yMove.getSelection() - 5;
-			}
-		});
-
-		new Label(movementGroup, SWT.NONE).setText("Z:");
-		final Slider zMove = new Slider(movementGroup, SWT.NONE);
-		zMove.setIncrement(1);
-		zMove.setMaximum(12);
-		zMove.setMinimum(0);
-		zMove.setThumb(2);
-		zMove.setPageIncrement(2);
-		zMove.setSelection(5);
-		zMove.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				zPos = zMove.getSelection() - 12;
-			}
-		});
-
-		Group rotationGroup = new Group(composite, SWT.NONE);
-		rotationGroup.setText("Rotation");
-		rotationGroup.setLayout(new GridLayout(2, false));
-
-		new Label(rotationGroup, SWT.NONE).setText("X:");
-		final Slider xRotation = new Slider(rotationGroup, SWT.NONE);
-		xRotation.setIncrement(10);
-		xRotation.setMaximum(362);
-		xRotation.setMinimum(0);
-		xRotation.setThumb(2);
-		xRotation.setPageIncrement(20);
-		xRotation.setSelection(180);
-		xRotation.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				xRot = xRotation.getSelection();
-			}
-		});
-
-		new Label(rotationGroup, SWT.NONE).setText("Y:");
-		final Slider yRotation = new Slider(rotationGroup, SWT.NONE);
-		yRotation.setIncrement(10);
-		yRotation.setMaximum(362);
-		yRotation.setMinimum(0);
-		yRotation.setThumb(2);
-		yRotation.setPageIncrement(20);
-		yRotation.setSelection(180);
-		yRotation.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				yRot = yRotation.getSelection();
-			}
-		});
-
-		new Label(rotationGroup, SWT.NONE).setText("Z:");
-		final Slider zRotation = new Slider(rotationGroup, SWT.NONE);
-		zRotation.setIncrement(10);
-		zRotation.setMaximum(362);
-		zRotation.setMinimum(0);
-		zRotation.setThumb(2);
-		zRotation.setPageIncrement(20);
-		zRotation.setSelection(180);
-		zRotation.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				zRot = zRotation.getSelection();
-			}
-		});
-		
-		Composite objectGroup = new Composite(composite,SWT.NONE);
-		GridLayout layout = new GridLayout(2,false);
-		layout.marginHeight = 0;
-		layout.marginWidth = 0;
-		objectGroup.setLayout(layout);
-		objectGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
-
-		new Label(objectGroup, SWT.NONE).setText("Object:");
-		final Combo objectCombo = new Combo(objectGroup, SWT.READ_ONLY);
-		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-		data.grabExcessHorizontalSpace = true;
-		objectCombo.setLayoutData(data);
-		objectCombo.setItems(OBJECT_NAMES);
-		objectCombo.select(0);
-		objectCombo.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				currentSelection = objectCombo.getSelectionIndex() + 1;
-			}
-		});
-	}
-	
-	/**
-	 * @see OpenGLTab#dispose()
-	 */
-	void dispose() {
-		super.dispose();
-		GL.glDeleteLists(1, 2);
-	}
-	
-	/**
-	 * @see OpenGLTab#getTabText()
-	 */
-	String getTabText() {
-		return "Gradients";
-	}
-	
-	/**
-	 * @see OpenGLTab#init()
-	 */
-	void init() {
-		GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
-		GL.glHint(GL.GL_LINE_SMOOTH_HINT, GL.GL_NICEST);
-		GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
-		GL.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_FILL);
-		GL.glMap2f(GL.GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, BEZIER_POINTS);
-		GL.glMap2f(GL.GL_MAP2_COLOR_4, 0, 1, 4, 1, 0, 1, 4, 6, BEZIER_COLORS);
-		GL.glMapGrid2f(20, 0.0f, 1.0f, 20, 0.0f, 1.0f);
-		GL.glShadeModel(GL.GL_SMOOTH);
-		GL.glEnable(GL.GL_LINE_SMOOTH);
-		GL.glEnable(GL.GL_LINE_STIPPLE);
-		GL.glEnable(GL.GL_BLEND);
-		GL.glEnable(GL.GL_MAP2_COLOR_4);
-		GL.glEnable(GL.GL_MAP2_VERTEX_3);
-		GL.glEnable(GL.GL_DEPTH_TEST);
-
-		// create display lists
-		GL.glNewList(1, GL.GL_COMPILE);
-		GL.glEvalMesh2(GL.GL_FILL, 0, 20, 0, 20);
-		GL.glEndList();
-		GL.glNewList(2, GL.GL_COMPILE);
-		GL.glBegin(GL.GL_TRIANGLE_FAN);
-		GL.glColor3f(0.0f, 1.0f, 0.0f);
-		GL.glVertex3f(0.0f, 0.0f, 0.0f);
-		GL.glColor3f(1.0f, 0.0f, 0.0f);
-		GL.glVertex3f(0.0f, 2.0f, 0.0f);
-		GL.glColor3f(0.0f, 1.0f, 0.0f);
-		GL.glVertex3f(-2.0f, 2.0f, 0.0f);
-		GL.glColor3f(0.0f, 0.0f, 1.0f);
-		GL.glVertex3f(-2.0f, 0.0f, 0.0f);
-		GL.glColor3f(0.0f, 1.0f, 0.0f);
-		GL.glVertex3f(-2.0f, -2.0f, 0.0f);
-		GL.glColor3f(1.0f, 0.0f, 0.0f);
-		GL.glVertex3f(0.0f, -2.0f, 0.0f);
-		GL.glColor3f(0.0f, 1.0f, 0.0f);
-		GL.glVertex3f(2.0f, -2.0f, 0.0f);
-		GL.glColor3f(0.0f, 0.0f, 1.0f);
-		GL.glVertex3f(2.0f, 0.0f, 0.0f);
-		GL.glColor3f(0.0f, 1.0f, 0.0f);
-		GL.glVertex3f(2.0f, 2.0f, 0.0f);
-		GL.glColor3f(1.0f, 0.0f, 0.0f);
-		GL.glVertex3f(0.0f, 2.0f, 0.0f);
-		GL.glEnd();
-		GL.glEndList();
-	}
-	
-	/**
-	 * @see OpenGLTab#renderScene()
-	 */
-	void renderScene() {
-		GL.glClear(GL.GL_COLOR_BUFFER_BIT);
-		GL.glLoadIdentity();
-		GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
-		GL.glTranslatef(xPos, yPos, zPos);
-		GL.glRotatef(xRot, 1.0f, 0.0f, 0.0f);
-		GL.glRotatef(yRot, 0.0f, 1.0f, 0.0f);
-		GL.glRotatef(zRot, 0.0f, 0.0f, 1.0f);
-		GL.glColor3f(1.0f, 0.0f, 0.0f);
-		GL.glCallList(currentSelection);
-	}
-}
diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/IColorSelectionListener.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/IColorSelectionListener.java
deleted file mode 100644
index 8e93541..0000000
--- a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/IColorSelectionListener.java
+++ /dev/null
@@ -1,17 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl.examples;
-
-import org.eclipse.swt.graphics.RGB;
-
-public interface IColorSelectionListener {
-	public void handleColorSelection(RGB rgb);
-}
diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ImageDataUtil.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ImageDataUtil.java
deleted file mode 100755
index 9166ae9..0000000
--- a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ImageDataUtil.java
+++ /dev/null
@@ -1,559 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl.examples;
-
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.PaletteData;
-
-public class ImageDataUtil {
-	/**
-	 * Alpha mode, values 0 - 255 specify global alpha level
-	 */
-	static final int
-		ALPHA_OPAQUE = 255,           // Fully opaque (ignores any alpha data)
-		ALPHA_TRANSPARENT = 0,        // Fully transparent (ignores any alpha data)
-		ALPHA_CHANNEL_SEPARATE = -1,  // Use alpha channel from separate alphaData
-		ALPHA_CHANNEL_SOURCE = -2,    // Use alpha channel embedded in sourceData
-		ALPHA_MASK_UNPACKED = -3,     // Use transparency mask formed by bytes in alphaData (non-zero is opaque)
-		ALPHA_MASK_PACKED = -4,       // Use transparency mask formed by packed bits in alphaData
-		ALPHA_MASK_INDEX = -5,        // Consider source palette indices transparent if in alphaData array
-		ALPHA_MASK_RGB = -6;          // Consider source RGBs transparent if in RGB888 format alphaData array
-		
-	/**
-	 * Data types (internal)
-	 */
-	private static final int
-		// direct / true color formats with arbitrary masks & shifts
-		TYPE_GENERIC_8 = 0,
-		TYPE_GENERIC_16_MSB = 1,
-		TYPE_GENERIC_16_LSB = 2,
-		TYPE_GENERIC_24 = 3,
-		TYPE_GENERIC_32_MSB = 4,
-		TYPE_GENERIC_32_LSB = 5;
-		
-	/**
-	 * Byte and bit order constants.
-	 */
-	static final int LSB_FIRST = 0;
-	static final int MSB_FIRST = 1;
-	
-	/**
-	 * Blit operation bits to be OR'ed together to specify the desired operation.
-	 */
-	static final int
-		BLIT_SRC = 1,     // copy source directly, else applies logic operations
-		BLIT_ALPHA = 2,   // enable alpha blending
-		BLIT_DITHER = 4;  // enable dithering in low color modes
-		
-	/**
-	 * Arbitrary channel width data to 8-bit conversion table.
-	 */
-	static final byte[][] ANY_TO_EIGHT = new byte[9][];
-	static {
-		for (int b = 0; b < 9; ++b) {
-			byte[] data = ANY_TO_EIGHT[b] = new byte[1 << b];
-			if (b == 0) continue;
-			int inc = 0;
-			for (int bit = 0x10000; (bit >>= b) != 0;) inc |= bit;
-			for (int v = 0, p = 0; v < 0x10000; v+= inc) data[p++] = (byte)(v >> 8);
-		}
-	}
-
-	/**
-	 * Blits a direct palette image into a direct palette image.
-	 * <p>
-	 * Note: When the source and destination depth, order and masks
-	 * are pairwise equal and the blitter operation is BLIT_SRC,
-	 * the masks are ignored.  Hence when not changing the image
-	 * data format, 0 may be specified for the masks.
-	 * </p>
-	 * 
-	 * @param op the blitter operation: a combination of BLIT_xxx flags
-	 *        (see BLIT_xxx constants)
-	 * @param srcData the source byte array containing image data
-	 * @param srcDepth the source depth: one of 8, 16, 24, 32
-	 * @param srcStride the source number of bytes per line
-	 * @param srcOrder the source byte ordering: one of MSB_FIRST or LSB_FIRST;
-	 *        ignored if srcDepth is not 16 or 32
-	 * @param srcX the top-left x-coord of the source blit region
-	 * @param srcY the top-left y-coord of the source blit region
-	 * @param srcWidth the width of the source blit region
-	 * @param srcHeight the height of the source blit region
-	 * @param srcRedMask the source red channel mask
-	 * @param srcGreenMask the source green channel mask
-	 * @param srcBlueMask the source blue channel mask
-	 * @param alphaMode the alpha blending or mask mode, may be
-	 *        an integer 0-255 for global alpha; ignored if BLIT_ALPHA
-	 *        not specified in the blitter operations
-	 *        (see ALPHA_MODE_xxx constants)
-	 * @param alphaData the alpha blending or mask data, varies depending
-	 *        on the value of alphaMode and sometimes ignored
-	 * @param alphaStride the alpha data number of bytes per line
-	 * @param alphaX the top-left x-coord of the alpha blit region
-	 * @param alphaY the top-left y-coord of the alpha blit region
-	 * @param destData the destination byte array containing image data
-	 * @param destDepth the destination depth: one of 8, 16, 24, 32
-	 * @param destStride the destination number of bytes per line
-	 * @param destOrder the destination byte ordering: one of MSB_FIRST or LSB_FIRST;
-	 *        ignored if destDepth is not 16 or 32
-	 * @param destX the top-left x-coord of the destination blit region
-	 * @param destY the top-left y-coord of the destination blit region
-	 * @param destWidth the width of the destination blit region
-	 * @param destHeight the height of the destination blit region
-	 * @param destRedMask the destination red channel mask
-	 * @param destGreenMask the destination green channel mask
-	 * @param destBlueMask the destination blue channel mask
-	 * @param flipX if true the resulting image is flipped along the vertical axis
-	 * @param flipY if true the resulting image is flipped along the horizontal axis
-	 */
-	static void blit(int op,
-		byte[] srcData, int srcDepth, int srcStride, int srcOrder,
-		int srcX, int srcY, int srcWidth, int srcHeight,
-		int srcRedMask, int srcGreenMask, int srcBlueMask,
-		int alphaMode, byte[] alphaData, int alphaStride, int alphaX, int alphaY,
-		byte[] destData, int destDepth, int destStride, int destOrder,
-		int destX, int destY, int destWidth, int destHeight,
-		int destRedMask, int destGreenMask, int destBlueMask,
-		boolean flipX, boolean flipY) {
-		if ((destWidth <= 0) || (destHeight <= 0) || (alphaMode == ALPHA_TRANSPARENT)) return;
-
-		// these should be supplied as params later
-		final int srcAlphaMask = 0, destAlphaMask = 0;
-
-		/*** Prepare scaling data ***/
-		final int dwm1 = destWidth - 1;
-		final int sfxi = (dwm1 != 0) ? (int)((((long)srcWidth << 16) - 1) / dwm1) : 0;
-		final int dhm1 = destHeight - 1;
-		final int sfyi = (dhm1 != 0) ? (int)((((long)srcHeight << 16) - 1) / dhm1) : 0;
-
-		/*** Prepare source-related data ***/
-		final int sbpp, stype;
-		switch (srcDepth) {
-			case 8:
-				sbpp = 1;
-				stype = TYPE_GENERIC_8;
-				break;
-			case 16:
-				sbpp = 2;
-				stype = (srcOrder == MSB_FIRST) ? TYPE_GENERIC_16_MSB : TYPE_GENERIC_16_LSB;
-				break;
-			case 24:
-				sbpp = 3;
-				stype = TYPE_GENERIC_24;
-				break;
-			case 32:
-				sbpp = 4;
-				stype = (srcOrder == MSB_FIRST) ? TYPE_GENERIC_32_MSB : TYPE_GENERIC_32_LSB;
-				break;
-			default:
-				//throw new IllegalArgumentException("Invalid source type");
-				return;
-		}			
-		int spr = srcY * srcStride + srcX * sbpp;
-
-		/*** Prepare destination-related data ***/
-		final int dbpp, dtype;
-		switch (destDepth) {
-			case 8:
-				dbpp = 1;
-				dtype = TYPE_GENERIC_8;
-				break;
-			case 16:
-				dbpp = 2;
-				dtype = (destOrder == MSB_FIRST) ? TYPE_GENERIC_16_MSB : TYPE_GENERIC_16_LSB;
-				break;
-			case 24:
-				dbpp = 3;
-				dtype = TYPE_GENERIC_24;
-				break;
-			case 32:
-				dbpp = 4;
-				dtype = (destOrder == MSB_FIRST) ? TYPE_GENERIC_32_MSB : TYPE_GENERIC_32_LSB;
-				break;
-			default:
-				//throw new IllegalArgumentException("Invalid destination type");
-				return;
-		}			
-		int dpr = ((flipY) ? destY + dhm1 : destY) * destStride + ((flipX) ? destX + dwm1 : destX) * dbpp;
-		final int dprxi = (flipX) ? -dbpp : dbpp;
-		final int dpryi = (flipY) ? -destStride : destStride;
-
-		/*** Prepare special processing data ***/
-		int apr;
-		if ((op & BLIT_ALPHA) != 0) {
-			switch (alphaMode) {
-				case ALPHA_MASK_UNPACKED:
-				case ALPHA_CHANNEL_SEPARATE:
-					if (alphaData == null) alphaMode = 0x10000;
-					apr = alphaY * alphaStride + alphaX;
-					break;
-				case ALPHA_MASK_PACKED:
-					if (alphaData == null) alphaMode = 0x10000;
-					alphaStride <<= 3;
-					apr = alphaY * alphaStride + alphaX;
-					break;
-				case ALPHA_MASK_INDEX:
-					//throw new IllegalArgumentException("Invalid alpha type");
-					return;
-				case ALPHA_MASK_RGB:
-					if (alphaData == null) alphaMode = 0x10000;
-					apr = 0;
-					break;
-				default:
-					alphaMode = (alphaMode << 16) / 255; // prescale
-				case ALPHA_CHANNEL_SOURCE:
-					apr = 0;
-					break;
-			}
-		} else {
-			alphaMode = 0x10000;
-			apr = 0;
-		}
-
-		/*** Blit ***/
-		int dp = dpr;
-		int sp = spr;
-		if ((alphaMode == 0x10000) && (stype == dtype) &&
-			(srcRedMask == destRedMask) && (srcGreenMask == destGreenMask) &&
-			(srcBlueMask == destBlueMask) && (srcAlphaMask == destAlphaMask)) {
-			/*** Fast blit (straight copy) ***/
-			switch (sbpp) {
-				case 1:
-					for (int dy = destHeight, sfy = sfyi; dy > 0; --dy, sp = spr += (sfy >>> 16) * srcStride, sfy = (sfy & 0xffff) + sfyi, dp = dpr += dpryi) {
-						for (int dx = destWidth, sfx = sfxi; dx > 0; --dx, dp += dprxi, sfx = (sfx & 0xffff) + sfxi) {
-							destData[dp] = srcData[sp];
-							sp += (sfx >>> 16);
-						}
-					}
-					break;					
-				case 2:
-					for (int dy = destHeight, sfy = sfyi; dy > 0; --dy, sp = spr += (sfy >>> 16) * srcStride, sfy = (sfy & 0xffff) + sfyi, dp = dpr += dpryi) {
-						for (int dx = destWidth, sfx = sfxi; dx > 0; --dx, dp += dprxi, sfx = (sfx & 0xffff) + sfxi) {
-							destData[dp] = srcData[sp];
-							destData[dp + 1] = srcData[sp + 1];
-							sp += (sfx >>> 16) * 2;
-						}
-					}
-					break;
-				case 3:
-					for (int dy = destHeight, sfy = sfyi; dy > 0; --dy, sp = spr += (sfy >>> 16) * srcStride, sfy = (sfy & 0xffff) + sfyi, dp = dpr += dpryi) {
-						for (int dx = destWidth, sfx = sfxi; dx > 0; --dx, dp += dprxi, sfx = (sfx & 0xffff) + sfxi) {
-							destData[dp] = srcData[sp];
-							destData[dp + 1] = srcData[sp + 1];
-							destData[dp + 2] = srcData[sp + 2];
-							sp += (sfx >>> 16) * 3;
-						}
-					}
-					break;
-				case 4:
-					for (int dy = destHeight, sfy = sfyi; dy > 0; --dy, sp = spr += (sfy >>> 16) * srcStride, sfy = (sfy & 0xffff) + sfyi, dp = dpr += dpryi) {
-						for (int dx = destWidth, sfx = sfxi; dx > 0; --dx, dp += dprxi, sfx = (sfx & 0xffff) + sfxi) {
-							destData[dp] = srcData[sp];
-							destData[dp + 1] = srcData[sp + 1];
-							destData[dp + 2] = srcData[sp + 2];
-							destData[dp + 3] = srcData[sp + 3];
-							sp += (sfx >>> 16) * 4;
-						}
-					}
-					break;
-			}
-			return;
-		}
-		/*** Comprehensive blit (apply transformations) ***/
-		final int srcRedShift = getChannelShift(srcRedMask);
-		final byte[] srcReds = ANY_TO_EIGHT[getChannelWidth(srcRedMask, srcRedShift)];
-		final int srcGreenShift = getChannelShift(srcGreenMask);
-		final byte[] srcGreens = ANY_TO_EIGHT[getChannelWidth(srcGreenMask, srcGreenShift)];
-		final int srcBlueShift = getChannelShift(srcBlueMask);
-		final byte[] srcBlues = ANY_TO_EIGHT[getChannelWidth(srcBlueMask, srcBlueShift)];
-		final int srcAlphaShift = getChannelShift(srcAlphaMask);
-		final byte[] srcAlphas = ANY_TO_EIGHT[getChannelWidth(srcAlphaMask, srcAlphaShift)];
-
-		final int destRedShift = getChannelShift(destRedMask);
-		final int destRedWidth = getChannelWidth(destRedMask, destRedShift);
-		final byte[] destReds = ANY_TO_EIGHT[destRedWidth];
-		final int destRedPreShift = 8 - destRedWidth;
-		final int destGreenShift = getChannelShift(destGreenMask);
-		final int destGreenWidth = getChannelWidth(destGreenMask, destGreenShift);
-		final byte[] destGreens = ANY_TO_EIGHT[destGreenWidth];
-		final int destGreenPreShift = 8 - destGreenWidth;
-		final int destBlueShift = getChannelShift(destBlueMask);
-		final int destBlueWidth = getChannelWidth(destBlueMask, destBlueShift);
-		final byte[] destBlues = ANY_TO_EIGHT[destBlueWidth];
-		final int destBluePreShift = 8 - destBlueWidth;
-		final int destAlphaShift = getChannelShift(destAlphaMask);
-		final int destAlphaWidth = getChannelWidth(destAlphaMask, destAlphaShift);
-		final byte[] destAlphas = ANY_TO_EIGHT[destAlphaWidth];
-		final int destAlphaPreShift = 8 - destAlphaWidth;
-
-		int ap = apr, alpha = alphaMode;
-		int r = 0, g = 0, b = 0, a = 0;
-		int rq = 0, gq = 0, bq = 0, aq = 0;
-		for (int dy = destHeight, sfy = sfyi; dy > 0; --dy,
-				sp = spr += (sfy >>> 16) * srcStride,
-				ap = apr += (sfy >>> 16) * alphaStride,
-				sfy = (sfy & 0xffff) + sfyi,
-				dp = dpr += dpryi) {
-			for (int dx = destWidth, sfx = sfxi; dx > 0; --dx,
-					dp += dprxi,
-					sfx = (sfx & 0xffff) + sfxi) {
-				/*** READ NEXT PIXEL ***/
-				switch (stype) {
-					case TYPE_GENERIC_8: {
-						final int data = srcData[sp] & 0xff;
-						sp += (sfx >>> 16);
-						r = srcReds[(data & srcRedMask) >>> srcRedShift] & 0xff;
-						g = srcGreens[(data & srcGreenMask) >>> srcGreenShift] & 0xff;
-						b = srcBlues[(data & srcBlueMask) >>> srcBlueShift] & 0xff;
-						a = srcAlphas[(data & srcAlphaMask) >>> srcAlphaShift] & 0xff;
-					} break;
-					case TYPE_GENERIC_16_MSB: {
-						final int data = ((srcData[sp] & 0xff) << 8) | (srcData[sp + 1] & 0xff);
-						sp += (sfx >>> 16) * 2;
-						r = srcReds[(data & srcRedMask) >>> srcRedShift] & 0xff;
-						g = srcGreens[(data & srcGreenMask) >>> srcGreenShift] & 0xff;
-						b = srcBlues[(data & srcBlueMask) >>> srcBlueShift] & 0xff;
-						a = srcAlphas[(data & srcAlphaMask) >>> srcAlphaShift] & 0xff;
-					} break;
-					case TYPE_GENERIC_16_LSB: {
-						final int data = ((srcData[sp + 1] & 0xff) << 8) | (srcData[sp] & 0xff);
-						sp += (sfx >>> 16) * 2;
-						r = srcReds[(data & srcRedMask) >>> srcRedShift] & 0xff;
-						g = srcGreens[(data & srcGreenMask) >>> srcGreenShift] & 0xff;
-						b = srcBlues[(data & srcBlueMask) >>> srcBlueShift] & 0xff;
-						a = srcAlphas[(data & srcAlphaMask) >>> srcAlphaShift] & 0xff;
-					} break;
-					case TYPE_GENERIC_24: {
-						final int data = (( ((srcData[sp] & 0xff) << 8) |
-							(srcData[sp + 1] & 0xff)) << 8) |
-							(srcData[sp + 2] & 0xff);
-						sp += (sfx >>> 16) * 3;
-						r = srcReds[(data & srcRedMask) >>> srcRedShift] & 0xff;
-						g = srcGreens[(data & srcGreenMask) >>> srcGreenShift] & 0xff;
-						b = srcBlues[(data & srcBlueMask) >>> srcBlueShift] & 0xff;
-						a = srcAlphas[(data & srcAlphaMask) >>> srcAlphaShift] & 0xff;
-					} break;
-					case TYPE_GENERIC_32_MSB: {
-						final int data = (( (( ((srcData[sp] & 0xff) << 8) |
-							(srcData[sp + 1] & 0xff)) << 8) |
-							(srcData[sp + 2] & 0xff)) << 8) |
-							(srcData[sp + 3] & 0xff);
-						sp += (sfx >>> 16) * 4;
-						r = srcReds[(data & srcRedMask) >>> srcRedShift] & 0xff;
-						g = srcGreens[(data & srcGreenMask) >>> srcGreenShift] & 0xff;
-						b = srcBlues[(data & srcBlueMask) >>> srcBlueShift] & 0xff;
-						a = srcAlphas[(data & srcAlphaMask) >>> srcAlphaShift] & 0xff;
-					} break;
-					case TYPE_GENERIC_32_LSB: {
-						final int data = (( (( ((srcData[sp + 3] & 0xff) << 8) |
-							(srcData[sp + 2] & 0xff)) << 8) |
-							(srcData[sp + 1] & 0xff)) << 8) |
-							(srcData[sp] & 0xff);
-						sp += (sfx >>> 16) * 4;
-						r = srcReds[(data & srcRedMask) >>> srcRedShift] & 0xff;
-						g = srcGreens[(data & srcGreenMask) >>> srcGreenShift] & 0xff;
-						b = srcBlues[(data & srcBlueMask) >>> srcBlueShift] & 0xff;
-						a = srcAlphas[(data & srcAlphaMask) >>> srcAlphaShift] & 0xff;
-					} break;
-				}
-
-				/*** DO SPECIAL PROCESSING IF REQUIRED ***/
-				switch (alphaMode) {
-					case ALPHA_CHANNEL_SEPARATE:
-						alpha = ((alphaData[ap] & 0xff) << 16) / 255;
-						ap += (sfx >> 16);
-						break;
-					case ALPHA_CHANNEL_SOURCE:
-						alpha = (a << 16) / 255;
-						break;
-					case ALPHA_MASK_UNPACKED:
-						alpha = (alphaData[ap] != 0) ? 0x10000 : 0;
-						ap += (sfx >> 16);
-						break;						
-					case ALPHA_MASK_PACKED:
-						alpha = (alphaData[ap >> 3] << ((ap & 7) + 9)) & 0x10000;
-						ap += (sfx >> 16);
-						break;
-					case ALPHA_MASK_RGB:
-						alpha = 0x10000;
-						for (int i = 0; i < alphaData.length; i += 3) {
-							if ((r == alphaData[i]) && (g == alphaData[i + 1]) && (b == alphaData[i + 2])) {
-								alpha = 0x0000;
-								break;
-							}
-						}
-						break;
-				}
-				if (alpha != 0x10000) {
-					if (alpha == 0x0000) continue;
-					switch (dtype) {
-						case TYPE_GENERIC_8: {
-							final int data = destData[dp] & 0xff;
-							rq = destReds[(data & destRedMask) >>> destRedShift] & 0xff;
-							gq = destGreens[(data & destGreenMask) >>> destGreenShift] & 0xff;
-							bq = destBlues[(data & destBlueMask) >>> destBlueShift] & 0xff;
-							aq = destAlphas[(data & destAlphaMask) >>> destAlphaShift] & 0xff;
-						} break;
-						case TYPE_GENERIC_16_MSB: {
-							final int data = ((destData[dp] & 0xff) << 8) | (destData[dp + 1] & 0xff);
-							rq = destReds[(data & destRedMask) >>> destRedShift] & 0xff;
-							gq = destGreens[(data & destGreenMask) >>> destGreenShift] & 0xff;
-							bq = destBlues[(data & destBlueMask) >>> destBlueShift] & 0xff;
-							aq = destAlphas[(data & destAlphaMask) >>> destAlphaShift] & 0xff;
-						} break;
-						case TYPE_GENERIC_16_LSB: {
-							final int data = ((destData[dp + 1] & 0xff) << 8) | (destData[dp] & 0xff);
-							rq = destReds[(data & destRedMask) >>> destRedShift] & 0xff;
-							gq = destGreens[(data & destGreenMask) >>> destGreenShift] & 0xff;
-							bq = destBlues[(data & destBlueMask) >>> destBlueShift] & 0xff;
-							aq = destAlphas[(data & destAlphaMask) >>> destAlphaShift] & 0xff;
-						} break;
-						case TYPE_GENERIC_24: {
-							final int data = (( ((destData[dp] & 0xff) << 8) |
-								(destData[dp + 1] & 0xff)) << 8) |
-								(destData[dp + 2] & 0xff);
-							rq = destReds[(data & destRedMask) >>> destRedShift] & 0xff;
-							gq = destGreens[(data & destGreenMask) >>> destGreenShift] & 0xff;
-							bq = destBlues[(data & destBlueMask) >>> destBlueShift] & 0xff;
-							aq = destAlphas[(data & destAlphaMask) >>> destAlphaShift] & 0xff;
-						} break;
-						case TYPE_GENERIC_32_MSB: {
-							final int data = (( (( ((destData[dp] & 0xff) << 8) |
-								(destData[dp + 1] & 0xff)) << 8) |
-								(destData[dp + 2] & 0xff)) << 8) |
-								(destData[dp + 3] & 0xff);
-							rq = destReds[(data & destRedMask) >>> destRedShift] & 0xff;
-							gq = destGreens[(data & destGreenMask) >>> destGreenShift] & 0xff;
-							bq = destBlues[(data & destBlueMask) >>> destBlueShift] & 0xff;
-							aq = destAlphas[(data & destAlphaMask) >>> destAlphaShift] & 0xff;
-						} break;
-						case TYPE_GENERIC_32_LSB: {
-							final int data = (( (( ((destData[dp + 3] & 0xff) << 8) |
-								(destData[dp + 2] & 0xff)) << 8) |
-								(destData[dp + 1] & 0xff)) << 8) |
-								(destData[dp] & 0xff);
-							rq = destReds[(data & destRedMask) >>> destRedShift] & 0xff;
-							gq = destGreens[(data & destGreenMask) >>> destGreenShift] & 0xff;
-							bq = destBlues[(data & destBlueMask) >>> destBlueShift] & 0xff;
-							aq = destAlphas[(data & destAlphaMask) >>> destAlphaShift] & 0xff;
-						} break;
-					}
-					// Perform alpha blending
-					a = aq + ((a - aq) * alpha >> 16);
-					r = rq + ((r - rq) * alpha >> 16);
-					g = gq + ((g - gq) * alpha >> 16);
-					b = bq + ((b - bq) * alpha >> 16);
-				}
-
-				/*** WRITE NEXT PIXEL ***/
-				final int data = 
-					(r >>> destRedPreShift << destRedShift) |
-					(g >>> destGreenPreShift << destGreenShift) |
-					(b >>> destBluePreShift << destBlueShift) |
-					(a >>> destAlphaPreShift << destAlphaShift);
-				switch (dtype) {
-					case TYPE_GENERIC_8: {
-						destData[dp] = (byte) data;
-					} break;
-					case TYPE_GENERIC_16_MSB: {
-						destData[dp] = (byte) (data >>> 8);
-						destData[dp + 1] = (byte) (data & 0xff);
-					} break;
-					case TYPE_GENERIC_16_LSB: {
-						destData[dp] = (byte) (data & 0xff);
-						destData[dp + 1] = (byte) (data >>> 8);
-					} break;
-					case TYPE_GENERIC_24: {
-						destData[dp] = (byte) (data >>> 16);
-						destData[dp + 1] = (byte) (data >>> 8);
-						destData[dp + 2] = (byte) (data & 0xff);
-					} break;
-					case TYPE_GENERIC_32_MSB: {
-						destData[dp] = (byte) (data >>> 24);
-						destData[dp + 1] = (byte) (data >>> 16);
-						destData[dp + 2] = (byte) (data >>> 8);
-						destData[dp + 3] = (byte) (data & 0xff);
-					} break;
-					case TYPE_GENERIC_32_LSB: {
-						destData[dp] = (byte) (data & 0xff);
-						destData[dp + 1] = (byte) (data >>> 8);
-						destData[dp + 2] = (byte) (data >>> 16);
-						destData[dp + 3] = (byte) (data >>> 24);
-					} break;
-				}
-			}
-		}			
-	}
-
-	/**
-	 * Computes the required channel shift from a mask.
-	 */
-	static int getChannelShift(int mask) {
-		if (mask == 0) return 0;
-		int i;
-		for (i = 0; ((mask & 1) == 0) && (i < 32); ++i) {
-			mask >>>= 1;
-		}
-		return i;
-	}
-	
-	/**
-	 * Computes the required channel width (depth) from a mask.
-	 */
-	static int getChannelWidth(int mask, int shift) {
-		if (mask == 0) return 0;
-		int i;
-		mask >>>= shift;
-		for (i = shift; ((mask & 1) != 0) && (i < 32); ++i) {
-			mask >>>= 1;
-		}
-		return i - shift;
-	}
-
-	public static ImageData convertImageData (ImageData source) {
-		PaletteData palette = new PaletteData (0xff0000, 0xff00, 0xff);
-		ImageData newSource = new ImageData (source.width, source.height, 24, palette);
-
-		ImageDataUtil.blit (
-			1,
-			source.data,
-			source.depth,
-			source.bytesPerLine,
-			(source.depth != 16) ? MSB_FIRST : LSB_FIRST,
-			0,
-			0,
-			source.width,
-			source.height,
-			source.palette.redMask,
-			source.palette.greenMask,
-			source.palette.blueMask,
-			255,
-			null,
-			0,
-			0,
-			0,
-			newSource.data,
-			newSource.depth,
-			newSource.bytesPerLine,
-			(newSource.depth != 16) ? MSB_FIRST : LSB_FIRST,
-			0,
-			0,
-			newSource.width,
-			newSource.height,
-			newSource.palette.redMask,
-			newSource.palette.greenMask,
-			newSource.palette.blueMask,
-			false,
-			true);
-
-		return newSource;
-	}
-}
diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/LWJGLExample.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/LWJGLExample.java
deleted file mode 100644
index 11d1c20..0000000
--- a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/LWJGLExample.java
+++ /dev/null
@@ -1,130 +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.opengl.examples;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.opengl.GLCanvas;
-import org.eclipse.swt.opengl.GLData;
-import org.lwjgl.opengl.GL11;
-import org.lwjgl.opengl.GLContext;
-import org.lwjgl.opengl.glu.GLU;
-import org.lwjgl.LWJGLException;
-
-/*
- * SWT OpenGL snippet: use LWJGL to draw to an SWT GLCanvas
- */
-public class LWJGLExample {
-	static void drawTorus(float r, float R, int nsides, int rings) {
-		float ringDelta = 2.0f * (float) Math.PI / rings;
-		float sideDelta = 2.0f * (float) Math.PI / nsides;
-		float theta = 0.0f, cosTheta = 1.0f, sinTheta = 0.0f;
-		for (int i = rings - 1; i >= 0; i--) {
-			float theta1 = theta + ringDelta;
-			float cosTheta1 = (float) Math.cos(theta1);
-			float sinTheta1 = (float) Math.sin(theta1);
-			GL11.glBegin(GL11.GL_QUAD_STRIP);
-			float phi = 0.0f;
-			for (int j = nsides; j >= 0; j--) {
-				phi += sideDelta;
-				float cosPhi = (float) Math.cos(phi);
-				float sinPhi = (float) Math.sin(phi);
-				float dist = R + r * cosPhi;
-				GL11.glNormal3f(cosTheta1 * cosPhi, -sinTheta1 * cosPhi, sinPhi);
-				GL11.glVertex3f(cosTheta1 * dist, -sinTheta1 * dist, r * sinPhi);
-				GL11.glNormal3f(cosTheta * cosPhi, -sinTheta * cosPhi, sinPhi);
-				GL11.glVertex3f(cosTheta * dist, -sinTheta * dist, r * sinPhi);
-			}
-			GL11.glEnd();
-			theta = theta1;
-			cosTheta = cosTheta1;
-			sinTheta = sinTheta1;
-		}
-	}
-
-	public static void main(String [] args) {
-		final Display display = new Display();
-		Shell shell = new Shell(display);
-		shell.setLayout(new FillLayout());
-		Composite comp = new Composite(shell, SWT.NONE);
-		comp.setLayout(new FillLayout());
-		GLData data = new GLData ();
-		data.doubleBuffer = true;
-		final GLCanvas canvas = new GLCanvas(comp, SWT.NONE, data);
-
-		canvas.setCurrent();
-		try {
-       		GLContext.useContext(canvas);
-        } catch(LWJGLException e) { e.printStackTrace(); }
-        
-        canvas.addListener(SWT.Resize, new Listener() {
-        	public void handleEvent(Event event) {
-        		Rectangle bounds = canvas.getBounds();
-        		float fAspect = (float) bounds.width / (float) bounds.height;
-				canvas.setCurrent();
-				try {
-					GLContext.useContext(canvas);
-		        } catch(LWJGLException e) { e.printStackTrace(); }
-        		GL11.glViewport(0, 0, bounds.width, bounds.height);
-        		GL11.glMatrixMode(GL11.GL_PROJECTION);
-        		GL11.glLoadIdentity();
-        		GLU.gluPerspective(45.0f, fAspect, 0.5f, 400.0f);
-        		GL11.glMatrixMode(GL11.GL_MODELVIEW);
-        		GL11.glLoadIdentity();
-        	}
-        });
-
-		GL11.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
-		GL11.glColor3f(1.0f, 0.0f, 0.0f);
-		GL11.glHint(GL11.GL_PERSPECTIVE_CORRECTION_HINT, GL11.GL_NICEST);
-		GL11.glClearDepth(1.0);
-		GL11.glLineWidth(2);
-		GL11.glEnable(GL11.GL_DEPTH_TEST);
-
-		shell.setText("SWT/LWJGL Example");
-		shell.setSize(640, 480);
-		shell.open();
-
-	    display.asyncExec(new Runnable() {
-	    	int rot = 0;
-			public void run() {
-				if (!canvas.isDisposed()) {
-					canvas.setCurrent();
-					try {
-						GLContext.useContext(canvas);
-			        } catch(LWJGLException e) { e.printStackTrace(); }
-					GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
-					GL11.glClearColor(.3f, .5f, .8f, 1.0f);
-					GL11.glLoadIdentity();
-					GL11.glTranslatef(0.0f, 0.0f, -10.0f);
-					float frot = rot;
-					GL11.glRotatef(0.15f * rot, 2.0f * frot, 10.0f * frot, 1.0f);
-					GL11.glRotatef(0.3f * rot, 3.0f * frot, 1.0f * frot, 1.0f);
-					rot++;
-					GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_LINE);
-					GL11.glColor3f(0.9f, 0.9f, 0.9f);
-					drawTorus(1, 1.9f + ((float) Math.sin((0.004f * frot))), 15, 15);
-					canvas.swapBuffers();
-					display.asyncExec(this);
-				}
-			}
-		});
-
-		while(!shell.isDisposed()) {
-			if (!display.readAndDispatch()) {
-				display.sleep();
-			}
-		}
-		display.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/LightTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/LightTab.java
deleted file mode 100644
index 801e948..0000000
--- a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/LightTab.java
+++ /dev/null
@@ -1,350 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl.examples;
-
-
-import org.eclipse.opengl.*;
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-class LightTab extends OpenGLTab {
-	private float[] materialShininess = { 25.0f };
-	private float[] lightPosition = { 0.0f, 0.0f, 0.0f, 1.0f };
-	private float[][] colorValues = {
-		{ 1.0f, 1.0f, 1.0f, 1.0f },	// light diffuse
-		{ 1.0f, 1.0f, 1.0f, 1.0f },	// light ambient
-		{ 1.0f, 1.0f, 1.0f, 1.0f },	// light specular
-		{ 0.5f, 0.5f, 0.5f, 1.0f },	// light main ambient
-		{ 0.0f, 0.0f, 1.0f, 1.0f },	// material diffuse
-		{ 0.3f, 0.3f, 0.3f, 1.0f },	// material ambient
-		{ 1.0f, 1.0f, 1.0f, 1.0f }	// material specular
-	};
-	private float yPos = 0.0f, xPos = 0.0f, zPos = -20.0f;
-	private int quadratic, sphere;
-
-	/**
-	 * @see OpenGLTab#createControls(Composite)
-	 */
-	void createControls(Composite composite) {
-		Group movementGroup = new Group(composite, SWT.NONE);
-		movementGroup.setText("Translation");
-		movementGroup.setLayout(new GridLayout(2, false));
-
-		new Label(movementGroup, SWT.NONE).setText("X:");
-		final Slider xMove = new Slider(movementGroup, SWT.NONE);
-		xMove.setIncrement(1);
-		xMove.setMaximum(22);
-		xMove.setMinimum(0);
-		xMove.setThumb(2);
-		xMove.setPageIncrement(2);
-		xMove.setSelection(10);
-		xMove.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				xPos = xMove.getSelection() - 10;
-			}
-		});
-
-		new Label(movementGroup, SWT.NONE).setText("Y:");
-		final Slider yMove = new Slider(movementGroup, SWT.NONE);
-		yMove.setIncrement(1);
-		yMove.setMaximum(22);
-		yMove.setMinimum(0);
-		yMove.setThumb(2);
-		yMove.setPageIncrement(2);
-		yMove.setSelection(10);
-		yMove.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				yPos = yMove.getSelection() - 10;
-			}
-		});
-
-		new Label(movementGroup, SWT.NONE).setText("Z:");
-		final Slider zMove = new Slider(movementGroup, SWT.NONE);
-		zMove.setIncrement(1);
-		zMove.setMaximum(22);
-		zMove.setMinimum(0);
-		zMove.setThumb(2);
-		zMove.setPageIncrement(2);
-		zMove.setSelection(10);
-		zMove.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				zPos = zMove.getSelection() - 30;
-			}
-		});
-
-		Group positionGroup = new Group(composite, SWT.NONE);
-		positionGroup.setText("Light Position");
-		positionGroup.setLayout(new GridLayout(2, false));
-
-		new Label(positionGroup, SWT.NONE).setText("X:");
-		final Slider lightX = new Slider(positionGroup, SWT.NONE);
-		lightX.setIncrement(1);
-		lightX.setMaximum(22);
-		lightX.setMinimum(0);
-		lightX.setThumb(2);
-		lightX.setPageIncrement(2);
-		lightX.setSelection(10);
-		lightX.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				lightPosition[0] = ((float) lightX.getSelection() * 10) - 100;
-			}
-		});
-
-		new Label(positionGroup, SWT.NONE).setText("Y:");
-		final Slider lightY = new Slider(positionGroup, SWT.NONE);
-		lightY.setIncrement(1);
-		lightY.setMaximum(22);
-		lightY.setMinimum(0);
-		lightY.setThumb(2);
-		lightY.setPageIncrement(2);
-		lightY.setSelection(10);
-		lightY.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				lightPosition[1] = ((float) lightY.getSelection() * 10) - 100;
-			}
-		});
-
-		new Label(positionGroup, SWT.NONE).setText("Z:");
-		final Slider lightZ = new Slider(positionGroup, SWT.NONE);
-		lightZ.setIncrement(1);
-		lightZ.setMaximum(22);
-		lightZ.setMinimum(0);
-		lightZ.setThumb(2);
-		lightZ.setPageIncrement(2);
-		lightZ.setSelection(10);
-		lightZ.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				lightPosition[2] = ((float) lightZ.getSelection() * 10) - 20;
-			}
-		});
-
-		Group lightColorsGroup = new Group(composite, SWT.NONE);
-		lightColorsGroup.setText("Light Colors");
-		lightColorsGroup.setLayout(new GridLayout());
-		GridData data = new GridData(GridData.FILL_BOTH);
-		lightColorsGroup.setLayoutData(data);
-
-		ColorSelectionGroup lightDiffuseButton =
-			new ColorSelectionGroup(lightColorsGroup, SWT.NONE);
-		lightDiffuseButton.setText("Diffuse");
-		lightDiffuseButton.setRGB(
-			new RGB(
-				(int) (colorValues[0][0] * 255),
-				(int) (colorValues[0][1] * 255),
-				(int) (colorValues[0][2] * 255)));
-		lightDiffuseButton
-			.addColorSelectionListener(new IColorSelectionListener() {
-			public void handleColorSelection(RGB rgb) {
-				colorValues[0][0] = ((float) rgb.red) / 255;
-				colorValues[0][1] = ((float) rgb.green) / 255;
-				colorValues[0][2] = ((float) rgb.blue) / 255;
-				setColorValues();
-			}
-		});
-
-		ColorSelectionGroup lightAmbientButton =
-			new ColorSelectionGroup(lightColorsGroup, SWT.NONE);
-		lightAmbientButton.setText("Ambient");
-		lightAmbientButton.setRGB(
-			new RGB(
-				(int) (colorValues[1][0] * 255),
-				(int) (colorValues[1][1] * 255),
-				(int) (colorValues[1][2] * 255)));
-		lightAmbientButton
-			.addColorSelectionListener(new IColorSelectionListener() {
-			public void handleColorSelection(RGB rgb) {
-				colorValues[1][0] = ((float) rgb.red) / 255;
-				colorValues[1][1] = ((float) rgb.green) / 255;
-				colorValues[1][2] = ((float) rgb.blue) / 255;
-				setColorValues();
-			}
-		});
-
-		ColorSelectionGroup lightSpecularButton =
-			new ColorSelectionGroup(lightColorsGroup, SWT.NONE);
-		lightSpecularButton.setText("Specular");
-		lightSpecularButton.setRGB(
-			new RGB(
-				(int) (colorValues[2][0] * 255),
-				(int) (colorValues[2][1] * 255),
-				(int) (colorValues[2][2] * 255)));
-		lightSpecularButton
-			.addColorSelectionListener(new IColorSelectionListener() {
-			public void handleColorSelection(RGB rgb) {
-				colorValues[2][0] = ((float) rgb.red) / 255;
-				colorValues[2][1] = ((float) rgb.green) / 255;
-				colorValues[2][2] = ((float) rgb.blue) / 255;
-				setColorValues();
-			}
-		});
-
-		ColorSelectionGroup lightMainAmbientButton =
-			new ColorSelectionGroup(lightColorsGroup, SWT.NONE);
-		lightMainAmbientButton.setText("Main Ambient");
-		lightMainAmbientButton.setRGB(
-			new RGB(
-				(int) (colorValues[3][0] * 255),
-				(int) (colorValues[3][1] * 255),
-				(int) (colorValues[3][2] * 255)));
-		lightMainAmbientButton
-			.addColorSelectionListener(new IColorSelectionListener() {
-			public void handleColorSelection(RGB rgb) {
-				colorValues[3][0] = ((float) rgb.red) / 255;
-				colorValues[3][1] = ((float) rgb.green) / 255;
-				colorValues[3][2] = ((float) rgb.blue) / 255;
-				setColorValues();
-			}
-		});
-
-		Group materialColorsGroup = new Group(composite, SWT.NONE);
-		materialColorsGroup.setText("Material Colors");
-		materialColorsGroup.setLayout(new GridLayout());
-		data = new GridData(GridData.FILL_BOTH);
-		materialColorsGroup.setLayoutData(data);
-
-		ColorSelectionGroup materialDiffuseButton =
-			new ColorSelectionGroup(materialColorsGroup, SWT.NONE);
-		materialDiffuseButton.setText("Diffuse");
-		materialDiffuseButton.setRGB(
-			new RGB(
-				(int) (colorValues[4][0] * 255),
-				(int) (colorValues[4][1] * 255),
-				(int) (colorValues[4][2] * 255)));
-		materialDiffuseButton
-			.addColorSelectionListener(new IColorSelectionListener() {
-			public void handleColorSelection(RGB rgb) {
-				colorValues[4][0] = ((float) rgb.red) / 255;
-				colorValues[4][1] = ((float) rgb.green) / 255;
-				colorValues[4][2] = ((float) rgb.blue) / 255;
-				setColorValues();
-			}
-		});
-
-		ColorSelectionGroup materialAmbientButton =
-			new ColorSelectionGroup(materialColorsGroup, SWT.NONE);
-		materialAmbientButton.setText("Ambient");
-		materialAmbientButton.setRGB(
-			new RGB(
-				(int) (colorValues[5][0] * 255),
-				(int) (colorValues[5][1] * 255),
-				(int) (colorValues[5][2] * 255)));
-		materialAmbientButton
-			.addColorSelectionListener(new IColorSelectionListener() {
-			public void handleColorSelection(RGB rgb) {
-				colorValues[5][0] = ((float) rgb.red) / 255;
-				colorValues[5][1] = ((float) rgb.green) / 255;
-				colorValues[5][2] = ((float) rgb.blue) / 255;
-				setColorValues();
-			}
-		});
-
-		ColorSelectionGroup materialSpecularButton =
-			new ColorSelectionGroup(materialColorsGroup, SWT.NONE);
-		materialSpecularButton.setText("Specular");
-		materialSpecularButton.setRGB(
-			new RGB(
-				(int) (colorValues[6][0] * 255),
-				(int) (colorValues[6][1] * 255),
-				(int) (colorValues[6][2] * 255)));
-		materialSpecularButton
-			.addColorSelectionListener(new IColorSelectionListener() {
-			public void handleColorSelection(RGB rgb) {
-				colorValues[6][0] = ((float) rgb.red) / 255;
-				colorValues[6][1] = ((float) rgb.green) / 255;
-				colorValues[6][2] = ((float) rgb.blue) / 255;
-				setColorValues();
-			}
-		});
-
-		new Label(composite, SWT.NONE).setText("Material Shininess:");
-		final Slider shineSlider = new Slider(composite, SWT.NONE);
-		shineSlider.setIncrement(5);
-		shineSlider.setMaximum(102);
-		shineSlider.setMinimum(0);
-		shineSlider.setThumb(2);
-		shineSlider.setPageIncrement(10);
-		shineSlider.setSelection(25);
-		shineSlider.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				materialShininess[0] = shineSlider.getSelection();
-				GL.glMaterialfv(GL.GL_FRONT_AND_BACK,
-					GL.GL_SHININESS,
-					materialShininess);
-			}
-		});
-	}
-
-	/**
-	 * @see OpenGLTab#dispose()
-	 */
-	void dispose() {
-		super.dispose();
-		GLU.gluDeleteQuadric(quadratic);
-		GL.glDeleteLists(sphere, 1);
-	}
-
-	/**
-	 * @see OpenGLTab#getTabText()
-	 */
-	String getTabText() {
-		return "Light";
-	}
-
-	/**
-	 * @see OpenGLTab#init()
-	 */
-	void init() {
-		GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
-		GL.glClearDepth(1.0);
-		setColorValues();
-		GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_SHININESS, materialShininess);
-		quadratic = GLU.gluNewQuadric();
-		GLU.gluQuadricNormals(quadratic, GLU.GLU_SMOOTH);
-		GL.glHint(GL.GL_LINE_SMOOTH_HINT, GL.GL_NICEST);
-		GL.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST);
-		GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
-		GL.glPointSize(2.0f);
-		GL.glEnable(GL.GL_LIGHTING);
-		GL.glEnable(GL.GL_LIGHT0);
-		GL.glEnable(GL.GL_DEPTH_TEST);
-		sphere = GL.glGenLists(1);
-		GL.glNewList(sphere, GL.GL_COMPILE);
-		GLU.gluSphere(quadratic, 3, 32, 32);
-		GL.glEndList();
-	}
-
-	/**
-	 * @see OpenGLTab#renderScene()
-	 */
-	void renderScene() {
-		GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
-		GL.glLoadIdentity();
-		GL.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, lightPosition);
-		GL.glTranslatef(xPos, yPos, zPos);
-		GL.glCallList(sphere);
-	}
-
-	/**
-	 * Sets the current color values into the rendered display.
-	 */
-	void setColorValues() {
-		GL.glLightfv(GL.GL_LIGHT0, GL.GL_DIFFUSE, colorValues[0]);
-		GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_DIFFUSE, colorValues[4]);
-		GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT, colorValues[5]);
-		GL.glLightfv(GL.GL_LIGHT0, GL.GL_AMBIENT, colorValues[1]);
-		GL.glLightfv(GL.GL_LIGHT0, GL.GL_SPECULAR, colorValues[2]);
-		GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_SPECULAR, colorValues[6]);
-		GL.glLightModelfv(GL.GL_LIGHT_MODEL_AMBIENT, colorValues[3]);
-		GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_SHININESS, materialShininess);
-	}
-}
diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/NurbTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/NurbTab.java
deleted file mode 100644
index d83f047..0000000
--- a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/NurbTab.java
+++ /dev/null
@@ -1,294 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl.examples;
-
-
-import org.eclipse.opengl.*;
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-class NurbTab extends OpenGLTab {
-	private float xPos = -5.0f, yPos = -5.0f, zPos = -25.0f;
-	private float xRot = 330.0f, yRot = 0.0f, zRot = 0.0f;
-	private int nurb;
-
-	/**
-	 * Returns a 3 dimensional array to store vertex points for the nurb
-	 * surface.
-	 * 
-	 * @return the array
-	 */
-	float[][][] buildNurb() {
-		float[][][] ctrl = new float[4][4][3];
-		for (int i = 0; i < 4; i++) {
-			for (int j = 0; j < 4; j++) {
-				// set the x value
-				ctrl[i][j][0] = 2 * (i + (float) Math.cos(i + j));
-				// set the y value
-				ctrl[i][j][1] = 2 * (j + (float) Math.cos(i + j));
-				// set the z value
-				if ((i == 1 && j == 1) || (i == 2 && j == 2)) {
-					// this makes the hill
-					ctrl[i][j][2] = 6.0f;
-				} else {
-					ctrl[i][j][2] = 0.0f;
-				}
-			}
-		}
-		// sets this particular z value to a large number to make a high
-		// hill
-		ctrl[2][2][2] = 8.0f;
-
-		return ctrl;
-	}
-	
-	/**
-	 * Returns a 1 dimensional array representing the 3 dimensional
-	 * argument.  This result can be passed to the nurb renderer
-	 * 
-	 * @param ctrl source 3D array
-	 * @return 1D array
-	 */
-	float[] convert(float[][][] ctrl) {
-		float[] pts =
-			new float[ctrl.length * ctrl[0].length * ctrl[0][0].length];
-		int row = 0;
-		int col = 0;
-		// set rowIncr to number of columns * depth 
-		int rowIncr = ctrl[0].length * ctrl[0][0].length;
-		// set colIncr to depth 
-		int colIncr = ctrl[0][0].length;
-		// loop through rows 
-		for (int i = 0; i < ctrl.length; i++) {
-			col = 0;
-			// loop through columns
-			for (int j = 0; j < ctrl[0].length; j++) {
-				// loop through to get the depth values
-				for (int k = 0; k < ctrl[0][0].length; k++) {
-					pts[row + col + k] = ctrl[i][j][k];
-				}
-				col += colIncr;
-			}
-			row += rowIncr;
-		}
-		return pts;
-	}
-	
-	/**
-	 * @see OpenGLTab#createControls(Composite)
-	 */
-	void createControls(final Composite composite) {
-		Group movementGroup = new Group(composite, SWT.NONE);
-		movementGroup.setText("Translation");
-		movementGroup.setLayout(new GridLayout(2, false));
-
-		new Label(movementGroup, SWT.NONE).setText("X:");
-		final Slider xMove = new Slider(movementGroup, SWT.NONE);
-		xMove.setIncrement(1);
-		xMove.setMaximum(12);
-		xMove.setMinimum(0);
-		xMove.setThumb(2);
-		xMove.setPageIncrement(2);
-		xMove.setSelection(5);
-		xMove.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				xPos = xMove.getSelection() - 10;
-			}
-		});
-
-		new Label(movementGroup, SWT.NONE).setText("Y:");
-		final Slider yMove = new Slider(movementGroup, SWT.NONE);
-		yMove.setIncrement(1);
-		yMove.setMaximum(12);
-		yMove.setMinimum(0);
-		yMove.setThumb(2);
-		yMove.setPageIncrement(2);
-		yMove.setSelection(5);
-		yMove.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				yPos = yMove.getSelection() - 10;
-			}
-		});
-
-		new Label(movementGroup, SWT.NONE).setText("Z:");
-		final Slider zMove = new Slider(movementGroup, SWT.NONE);
-		zMove.setIncrement(1);
-		zMove.setMaximum(12);
-		zMove.setMinimum(0);
-		zMove.setThumb(2);
-		zMove.setPageIncrement(2);
-		zMove.setSelection(5);
-		zMove.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				zPos = zMove.getSelection() - 30;
-			}
-		});
-
-		Group rotationGroup = new Group(composite, SWT.NONE);
-		rotationGroup.setText("Rotation");
-		rotationGroup.setLayout(new GridLayout(2, false));
-
-		new Label(rotationGroup, SWT.NONE).setText("X:");
-		final Slider xRotation = new Slider(rotationGroup, SWT.NONE);
-		xRotation.setIncrement(10);
-		xRotation.setMaximum(362);
-		xRotation.setMinimum(0);
-		xRotation.setThumb(2);
-		xRotation.setPageIncrement(20);
-		xRotation.setSelection(330);
-		xRotation.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				xRot = xRotation.getSelection();
-			}
-		});
-
-		new Label(rotationGroup, SWT.NONE).setText("Y:");
-		final Slider yRotation = new Slider(rotationGroup, SWT.NONE);
-		yRotation.setIncrement(10);
-		yRotation.setMaximum(362);
-		yRotation.setMinimum(0);
-		yRotation.setThumb(2);
-		yRotation.setPageIncrement(20);
-		yRotation.setSelection(0);
-		yRotation.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				yRot = yRotation.getSelection();
-			}
-		});
-
-		new Label(rotationGroup, SWT.NONE).setText("Z:");
-		final Slider zRotation = new Slider(rotationGroup, SWT.NONE);
-		zRotation.setIncrement(10);
-		zRotation.setMaximum(362);
-		zRotation.setMinimum(0);
-		zRotation.setThumb(2);
-		zRotation.setPageIncrement(20);
-		zRotation.setSelection(0);
-		zRotation.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				zRot = zRotation.getSelection();
-			}
-		});
-
-		new Label(composite, SWT.NONE).setText("Sampling Tolerance:");
-		final Slider sSlider = new Slider(composite, SWT.NONE);
-		sSlider.setIncrement(1);
-		sSlider.setMaximum(101);
-		sSlider.setMinimum(0);
-		sSlider.setThumb(2);
-		sSlider.setPageIncrement(2);
-		sSlider.setSelection(75);
-		sSlider.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				GLU.gluNurbsProperty(
-					nurb,
-					GLU.GLU_SAMPLING_TOLERANCE,
-					sSlider.getSelection() + 1);
-			}
-		});
-
-		final Button fillButton = new Button(composite, SWT.CHECK);
-		fillButton.setText("Fill");
-		fillButton.setSelection(true);
-		fillButton.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				if (fillButton.getSelection()) {
-					GLU.gluNurbsProperty(
-						nurb,
-						GLU.GLU_DISPLAY_MODE,
-						GLU.GLU_FILL);
-				} else {
-					GLU.gluNurbsProperty(
-						nurb,
-						GLU.GLU_DISPLAY_MODE,
-						GLU.GLU_OUTLINE_POLYGON);
-				}
-			}
-		});
-		
-		ColorSelectionGroup colorGroup =
-			new ColorSelectionGroup(composite, SWT.NONE);
-		colorGroup.setText("Foreground color");
-		colorGroup.addColorSelectionListener(new IColorSelectionListener() {
-			public void handleColorSelection(RGB rgb) {
-				GL.glColor3ub((byte) rgb.red, (byte) rgb.green, (byte) rgb.blue);
-			}
-		});
-	}
-	
-	/**
-	 * @see OpenGLTab#dispose()
-	 */
-	void dispose() {
-		super.dispose();
-		GLU.gluDeleteNurbsRenderer(nurb);
-	}
-	
-	/**
-	 * @see OpenGLTab#getTabText()
-	 */
-	String getTabText() {
-		return "Nurb";
-	}
-	
-	/**
-	 * @see OpenGLTab#init()
-	 */
-	void init() {
-		GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
-		GL.glColor3f(1.0f, 0.0f, 0.0f);
-		// set up material color which helps show curves
-		float mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
-		float mat_shininess[] = { 100.0f };
-		GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_SPECULAR, mat_specular);
-		GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_SHININESS, mat_shininess);
-		GL.glColorMaterial(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT_AND_DIFFUSE);
-		
-		GL.glEnable(GL.GL_LIGHTING);
-		GL.glEnable(GL.GL_LIGHT0);
-		GL.glEnable(GL.GL_COLOR_MATERIAL);
-		GL.glEnable(GL.GL_DEPTH_TEST);
-		GL.glEnable(GL.GL_AUTO_NORMAL);
-		GL.glEnable(GL.GL_NORMALIZE);
-		
-		nurb = GLU.gluNewNurbsRenderer();
-
-		GLU.gluNurbsProperty(
-			nurb,
-			GLU.GLU_SAMPLING_METHOD,
-			GLU.GLU_PATH_LENGTH);
-		// sampling tolerance is specific for GLU.GLU_PATH_LENGTH
-		GLU.gluNurbsProperty(nurb, GLU.GLU_SAMPLING_TOLERANCE, 75.0f);
-		GLU.gluNurbsProperty(nurb, GLU.GLU_DISPLAY_MODE, GLU.GLU_FILL);
-	}
-	
-	/**
-	 * @see OpenGLTab#renderScene()
-	 */
-	void renderScene() {
-		GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
-		GL.glLoadIdentity();
-		// do translation and rotation
-		GL.glTranslatef(xPos, yPos, zPos);
-		GL.glRotatef(xRot, 1.0f, 0.0f, 0.0f);
-		GL.glRotatef(yRot, 0.0f, 1.0f, 0.0f);
-		GL.glRotatef(zRot, 0.0f, 0.0f, 1.0f);
-		// define nurbs surface
-		float[] knots = { 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f };
-		GLU.gluBeginSurface(nurb);
-		GLU.gluNurbsSurface(
-			nurb, 8, knots, 8, knots, 12, 3,
-			convert(buildNurb()), 4, 4, GL.GL_MAP2_VERTEX_3);
-		GLU.gluEndSurface(nurb);
-	}
-}
diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ObjectsTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ObjectsTab.java
deleted file mode 100644
index 3191e0f..0000000
--- a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ObjectsTab.java
+++ /dev/null
@@ -1,376 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl.examples;
-
-
-import org.eclipse.opengl.*;
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-class ObjectsTab extends OpenGLTab {
-	private class Shape {
-		private String name;
-		private int index;
-		/**
-		 * Constructor.
-		 * 
-		 * @param name the display name of this shape
-		 * @param index the display list index corresponding to this shape
-		 */
-		Shape(String name, int index) {
-			super();
-			this.index = index;
-			this.name = name;
-		}
-		void dispose() {
-			GL.glDeleteLists(index, 1);
-		}
-		void draw() {
-			GL.glCallList(index);
-		}
-		String getName() {
-			return name;
-		}
-	}
-
-	private Shape[] shapes;
-	private Shape currentShape;
-	private float xRot = 0.0f, yRot = 0.0f;
-	private boolean fill = true;
-	private int quadratic;
-	private final static int SLEEP_LENGTH = 50;
-
-	/**
-	 * @see OpenGLTab#createControls(Composite)
-	 */
-	void createControls(final Composite composite) {
-		GridLayout layout = new GridLayout(2, false);
-		layout.marginWidth = 0;
-		Composite controls = new Composite(composite, SWT.NONE);
-		controls.setLayout(layout);
-		
-		new Label(controls, SWT.NONE).setText("Object:");
-		final Combo objectsCombo = new Combo(controls, SWT.READ_ONLY);
-		for (int i = 0; i < shapes.length; i++) {
-			objectsCombo.add(shapes[i].getName());
-		}
-		objectsCombo.select(0);
-		objectsCombo.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				currentShape = shapes[objectsCombo.getSelectionIndex()];
-			}
-		});
-
-		final Button fillToggleButton = new Button(controls, SWT.CHECK);
-		fillToggleButton.setText("Fill");
-		fillToggleButton.setSelection(true);
-		fillToggleButton.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				fill = fillToggleButton.getSelection();
-			}
-		});
-		
-		ColorSelectionGroup colorGroup =
-			new ColorSelectionGroup(composite, SWT.NONE);
-		colorGroup.setText("Foreground color");
-		colorGroup.addColorSelectionListener(new IColorSelectionListener() {
-			public void handleColorSelection(RGB rgb) {
-				GL.glColor3ub((byte) rgb.red, (byte) rgb.green, (byte) rgb.blue);
-			}
-		});
-	}
-
-	/**
-	 * @see OpenGLTab#dispose()
-	 */
-	void dispose() {
-		super.dispose();
-		GLU.gluDeleteQuadric(quadratic);
-		for (int i = 0; i < shapes.length; i++) {
-			shapes [i].dispose();
-		}
-	}
-	
-	/**
-	 * Creates a circle centered at 0,0 in the viewport.
-	 * 
-	 * @param radius
-	 * @param xShrink
-	 * @param yShrink
-	 */
-	void drawCircle(float radius, float xShrink, float yShrink) {
-		GL.glBegin(GL.GL_POLYGON);
-		float dia = (float) 2.0 * (float) Math.PI;
-		for (float angle = 0.0f; angle <= dia; angle += 0.1f) {
-			GL.glVertex2d(radius * Math.cos(angle), radius * Math.sin(angle));
-		}
-		GL.glEnd();
-	}
-	
-	/**
-	 * Creates a cube centered at 0,0 in the viewport.
-	 * 
-	 * @param width
-	 * @param height
-	 * @param depth
-	 */
-	void drawCube(float width, float height, float depth) {
-		GL.glBegin(GL.GL_QUADS);
-		// front
-		GL.glVertex3f(-width, -height, depth);	// bottom left 			
-		GL.glVertex3f(width, -height, depth);	// bottom right
-		GL.glVertex3f(width, height, depth);	// top right
-		GL.glVertex3f(-width, height, depth);	// top left
-		// back
-		GL.glVertex3f(-width, -height, -depth);	// bottom left 			
-		GL.glVertex3f(width, -height, -depth);	// bottom right
-		GL.glVertex3f(width, height, -depth);	// top right
-		GL.glVertex3f(-width, height, -depth);	// top left
-		// left
-		GL.glVertex3f(-width, -height, -depth);	// bottom left				
-		GL.glVertex3f(-width, -height, depth);	// bottom right
-		GL.glVertex3f(-width, height, depth);	// top right
-		GL.glVertex3f(-width, height, -depth);	// top left	
-		// right
-		GL.glVertex3f(width, -height, depth);	// bottom left				
-		GL.glVertex3f(width, -height, -depth);	// bottom right
-		GL.glVertex3f(width, height, -depth);	// top right
-		GL.glVertex3f(width, height, depth);	// top left
-		// top
-		GL.glVertex3f(width, height, -depth);	// back right
-		GL.glVertex3f(-width, height, -depth);	// back left
-		GL.glVertex3f(-width, height, depth);	// front left
-		GL.glVertex3f(width, height, depth);	// front right
-		// bottom
-		GL.glVertex3f(width, -height, depth);	// front right
-		GL.glVertex3f(-width, -height, depth);	// front left
-		GL.glVertex3f(-width, -height, -depth);	// back left
-		GL.glVertex3f(width, -height, -depth);	// back right
-		GL.glEnd();
-	}
-	
-	/**
-	 * Creates a pyramid centered at 0,0 in the viewport.
-	 * 
-	 * @param width
-	 * @param height
-	 * @param depth
-	 */
-	void drawPyramid(float width, float height, float depth) {
-		GL.glBegin(GL.GL_TRIANGLES);
-		// front
-		GL.glVertex3f(0.0f, height, 0.0f);		// top				
-		GL.glVertex3f(-width, -height, depth);	// left	
-		GL.glVertex3f(width, -height, depth);	// right
-		// left
-		GL.glVertex3f(0.0f, height, 0.0f);		// top				
-		GL.glVertex3f(-width, -height, -depth);	// left	
-		GL.glVertex3f(-width, -height, depth);	// right	
-		// front
-		GL.glVertex3f(-width, -height, -depth);	// left	
-		GL.glVertex3f(0.0f, height, 0.0f);		// top						
-		GL.glVertex3f(width, -height, -depth);	// right
-		// right
-		GL.glVertex3f(0.0f, height, 0.0f);		// top				
-		GL.glVertex3f(width, -height, depth);	// left	
-		GL.glVertex3f(width, -height, -depth);	// right			
-		GL.glEnd();
-		GL.glBegin(GL.GL_QUADS);
-		// bottom
-		GL.glVertex3f(-width, -height, depth);	// front left
-		GL.glVertex3f(-width, -height, -depth);	// back left
-		GL.glVertex3f(width, -height, -depth);	// back right
-		GL.glVertex3f(width, -height, depth);	// front right
-		GL.glEnd();
-	}
-	
-	/**
-	 * Creates a square centered at 0,0 in the viewport.
-	 * 
-	 * @param width
-	 * @param height
-	 */
-	void drawSquare(float width, float height) {
-		GL.glBegin(GL.GL_QUADS);
-		GL.glVertex3f(-width, -height, 0.0f);	// bottom left 			
-		GL.glVertex3f(width, -height, 0.0f);	// bottom right
-		GL.glVertex3f(width, height, 0.0f);		// top right
-		GL.glVertex3f(-width, height, 0.0f);	// top left
-		GL.glEnd();
-	}
-	
-	/**
-	 * This method is from glut_shapes.c .
-	 * 
-	 * @param r
-	 * @param R
-	 * @param nsides
-	 * @param rings
-	 */
-	void drawTorus(float r, float R, int nsides, int rings) {
-		float ringDelta = 2.0f * (float) Math.PI / rings;
-		float sideDelta = 2.0f * (float) Math.PI / nsides;
-		float theta = 0.0f;
-		float cosTheta = 1.0f;
-		float sinTheta = 0.0f;
-		
-		for (int i = rings - 1; i >= 0; i--) {
-			float theta1 = theta + ringDelta;
-			float cosTheta1 = (float) Math.cos(theta1);
-			float sinTheta1 = (float) Math.sin(theta1);
-			GL.glBegin(GL.GL_QUAD_STRIP);
-			float phi = 0.0f;
-			
-			for (int j = nsides; j >= 0; j--) {
-				phi += sideDelta;
-				float cosPhi = (float) Math.cos(phi);
-				float sinPhi = (float) Math.sin(phi);
-				float dist = R + r * cosPhi;
-				GL.glNormal3f(cosTheta1 * cosPhi, -sinTheta1 * cosPhi, sinPhi);
-				GL.glVertex3f(cosTheta1 * dist, -sinTheta1 * dist, r * sinPhi);
-				GL.glNormal3f(cosTheta * cosPhi, -sinTheta * cosPhi, sinPhi);
-				GL.glVertex3f(cosTheta * dist, -sinTheta * dist, r * sinPhi);
-			}
-			
-			GL.glEnd();
-			theta = theta1;
-			cosTheta = cosTheta1;
-			sinTheta = sinTheta1;
-		}
-	}
-	
-	/**
-	 * Creates a triangle centered at 0,0 in the viewport.
-	 * 
-	 * @param width
-	 * @param height
-	 */
-	void drawTriangle(float width, float height) {
-		GL.glBegin(GL.GL_TRIANGLES);
-		GL.glVertex3f(0.0f, height, 0.0f);		// middle 
-		GL.glVertex3f(-width, -height, 0.0f);	// left 
-		GL.glVertex3f(width, -height, 0.0f);	// right		 		
-		GL.glEnd();
-	}
-	
-	/**
-	 * @see OpenGLTab#getSleepLength()
-	 */
-	int getSleepLength() {
-		return SLEEP_LENGTH;	
-	}
-	
-	/**
-	 * @see OpenGLTab#getTabText()
-	 */
-	String getTabText() {
-		return "Objects";
-	}
-	
-	/**
-	 * @see OpenGLTab#init()
-	 */
-	void init() {
-		GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
-		GL.glColor3f(1.0f, 0.0f, 0.0f);
-		GL.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST);
-		GL.glClearDepth(1.0);
-		quadratic = GLU.gluNewQuadric();
-		GLU.gluQuadricNormals(quadratic, GLU.GLU_SMOOTH);
-		GL.glLineWidth(2);
-
-		GL.glEnable(GL.GL_DEPTH_TEST);
-
-		// create the display lists and shapes
-		shapes = new Shape[11];
-		int index = 1;
-
-		GL.glNewList(index, GL.GL_COMPILE);
-		drawTriangle(2.0f, 2.0f);
-		GL.glEndList();
-		shapes[0] = new Shape("Triangle", index++);
-
-		GL.glNewList(index, GL.GL_COMPILE);
-		drawPyramid(2.0f, 2.0f, 2.0f);
-		GL.glEndList();
-		shapes[1] = new Shape("Pyramid", index++);
-
-		GL.glNewList(index, GL.GL_COMPILE);
-		drawSquare(2.0f, 2.0f);
-		GL.glEndList();
-		shapes[2] = new Shape("Square", index++);
-
-		GL.glNewList(index, GL.GL_COMPILE);
-		drawCube(2.0f, 2.0f, 2.0f);
-		GL.glEndList();
-		shapes[3] = new Shape("Cube", index++);
-
-		GL.glNewList(index, GL.GL_COMPILE);
-		drawCircle(2.0f, 0.0f, 0.0f);
-		GL.glEndList();
-		shapes[4] = new Shape("Circle", index++);
-
-		GL.glNewList(index, GL.GL_COMPILE);
-		GLU.gluPartialDisk(quadratic, 0.5, 2.0, 18, 18, 90, 125);
-		GL.glEndList();
-		shapes[5] = new Shape("Partial Disk", index++);
-
-		GL.glNewList(index, GL.GL_COMPILE);
-		GLU.gluDisk(quadratic, 0.5, 2.0, 18, 18);
-		GL.glEndList();
-		shapes[6] = new Shape("Disk", index++);
-
-		GL.glNewList(index, GL.GL_COMPILE);
-		drawTorus(1, 2, 18, 18);
-		GL.glEndList();
-		shapes[7] = new Shape("Torus", index++);
-
-		GL.glNewList(index, GL.GL_COMPILE);
-		GLU.gluSphere(quadratic, 2.0, 18, 18);
-		GL.glEndList();
-		shapes[8] = new Shape("Sphere", index++);
-
-		GL.glNewList(index, GL.GL_COMPILE);
-		GLU.gluCylinder(quadratic, 2.0, 2.0, 4, 18, 18);
-		GL.glEndList();
-		shapes[9] = new Shape("Cylinder", index++);
-
-		GL.glNewList(index, GL.GL_COMPILE);
-		GLU.gluCylinder(quadratic, 0, 2.0, 4, 18, 18);
-		GL.glEndList();
-		shapes[10] = new Shape("Cone", index++);
-
-		currentShape = shapes[0];
-	}
-	
-	/**
-	 * @see OpenGLTab#renderScene()
-	 */
-	void renderScene() {
-		GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
-		GL.glLoadIdentity();
-		GL.glTranslatef(0.0f, 0.0f, -14.0f);
-		// rotate around X and Y axis
-		GL.glRotatef(yRot, 0.0f, 1.0f, 0.0f);
-		GL.glRotatef(xRot, 1.0f, 0.0f, 0.0f);
-		// sets polygon fill mode
-		if (fill) {
-			GL.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_FILL);
-		} else {
-			GL.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_LINE);
-		}
-		currentShape.draw();
-		yRot += 1.5;
-		xRot += 1.5;
-	}
-}
diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/OpenGLExample.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/OpenGLExample.java
deleted file mode 100644
index a13da25..0000000
--- a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/OpenGLExample.java
+++ /dev/null
@@ -1,143 +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.opengl.examples;
-
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-import java.util.*;
-
-public class OpenGLExample {
-	private static ResourceBundle resourceBundle =
-		ResourceBundle.getBundle("examples_opengl");
-	private TabFolder tabFolder;
-	private OpenGLTab[] tabs;
-	private int sleep;
-	
-	public OpenGLExample() {}
-
-	/**
-	 * Creates an instance of an OpenGLExample embedded inside
-	 * the supplied parent Composite.
-	 * 
-	 * @param parent the container of the example
-	 */
-	public OpenGLExample(Composite parent) {
-		tabFolder = new TabFolder(parent, SWT.NONE);
-		tabs =
-			new OpenGLTab[] {
-				new AntialiasingTab(),
-				new AreaTab(),
-				new FogTab(),
-				new GradientTab(),
-				new LightTab(),
-				new NurbTab(),
-				new ObjectsTab(),
-				new ReflectionTab(),
-				new StencilTab(),
-				new TextureTab(),
-				new TransparencyTab()
-			};
-				
-		for (int i = 0; i < tabs.length; i++) {
-			TabItem item = new TabItem(tabFolder, SWT.NONE);
-			item.setText(tabs[i].getTabText());
-			item.setControl(tabs[i].createTabFolderPage(tabFolder));
-		}
-		
-		tabFolder.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				OpenGLTab tab = tabs[tabFolder.getSelectionIndex()];
-				tab.setCurrent();
-				sleep = tab.getSleepLength();
-			}
-		});
-		if (tabs.length > 0) {
-			tabs[0].setCurrent();
-			sleep = tabs[0].getSleepLength();
-		}
-		
-		Runnable timer = new Runnable() {
-			public void run() {
-				if (tabFolder.isDisposed()) return;
-				display();
-				tabFolder.getDisplay().timerExec(sleep, this);
-			}
-		};
-		timer.run();
-		tabFolder.addListener(SWT.Dispose, new Listener() {
-			public void handleEvent(Event e) {
-				dispose();
-			}
-		});
-	}
-
-	/**
-	 * Renders the scene of the current tab.
-	 */
-	void display() {
-		int index = tabFolder.getSelectionIndex();
-		tabs[index].render();
-		tabs[index].swap();
-	}
-	
-	/**
-	 * Disposes of all contained tabs.
-	 */
-	void dispose() {
-		tabFolder = null;
-		for (int i = 0; i < tabs.length; i++) {
-			tabs[i].dispose();
-		}
-	}
-
-	/**
-	 * Gets a string from the resource bundle.
-	 * We don't want to crash because of a missing String.
-	 * Returns the key if not found.
-	 */
-	static String getResourceString(String key) {
-		try {
-			return resourceBundle.getString(key);
-		} catch (MissingResourceException e) {
-			return key;
-		} catch (NullPointerException e) {
-			return "!" + key + "!";
-		}			
-	}
-
-	/**
-	 * Invokes as a standalone program.
-	 */
-	public static void main(String[] args) {
-		Display display = new Display();
-		Shell shell = new Shell(display);
-		shell.setLayout(new FillLayout());
-		OpenGLExample instance = new OpenGLExample(shell);
-		shell.setText(getResourceString("window.title"));
-		shell.open();
-		while (! shell.isDisposed()) {
-			if (! display.readAndDispatch()) display.sleep();
-		}
-		instance.dispose();
-	}
-
-	public Shell open (Display display) {
-		Shell shell = new Shell (display);
-		shell.setLayout(new FillLayout());
-		new OpenGLExample(shell);
-		shell.setText(getResourceString("window.title"));
-		shell.open();
-		return shell;
-	}
-}
diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/OpenGLTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/OpenGLTab.java
deleted file mode 100644
index 6799e8d..0000000
--- a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/OpenGLTab.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl.examples;
-
-
-import org.eclipse.opengl.*;
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.opengl.*;
-
-/**
- * <code>OpenGLTab</code> is the abstract superclass of every page
- * in the example's tab folder.  Each page in the tab folder
- * displays a different example.
- *
- * An OpenGLTab itself is not a control but instead provides a hierarchy
- * with which to share code that is common to every page in the folder.
- */
-abstract class OpenGLTab {
-	private GLCanvas glCanvas;
-	private Composite tabFolderPage;
-	private boolean stencilSupport;
-	private final static int DEFAULT_SLEEP_LENGTH = 100;
-
-	/**
-	 * Creates this tab's controls.  Subclasses must override.
-	 *
-	 * @param composite the parent composite
-	 */
-	abstract void createControls(Composite composite);
-
-	/**
-	 * Creates the tab folder page.
-	 *
-	 * @param tabFolder the parent tab folder
-	 * @return the new page
-	 */
-	Composite createTabFolderPage(TabFolder tabFolder) {
-		tabFolderPage = new Composite(tabFolder, SWT.NONE);
-		tabFolderPage.setLayout(new GridLayout(2, false));
-
-		GridData gridData = new GridData();
-		gridData.heightHint = 400;
-		gridData.widthHint = 400;
-		gridData.verticalAlignment = GridData.BEGINNING;
-		GLData data = new GLData();
-		data.doubleBuffer = true;
-		data.stencilSize = 8;
-		glCanvas = new GLCanvas(tabFolderPage, SWT.NO_BACKGROUND, data);
-		glCanvas.setLayout(new GridLayout());
-		glCanvas.setLayoutData(gridData);
-		glCanvas.setSize(400, 400);		// needed for windows
-
-		gridData = new GridData();
-		gridData.verticalAlignment = GridData.BEGINNING;
-		Composite controlComposite = new Composite(tabFolderPage, SWT.NONE);
-		controlComposite.setLayout(new GridLayout());
-		controlComposite.setLayoutData(gridData);
-
-		// create the OpenGL Screen and controls
-		setCurrent();
-		setupViewingArea();
-
-		// determine if native stencil support is available
-		int[] param = new int[1];
-		GL.glGetIntegerv(GL.GL_STENCIL_BITS, param);
-		stencilSupport = param[0] != 0;
-
-		init();
-
-		if (!isStencilSupportNeeded() || hasStencilSupport()) {
-			createControls(controlComposite);
-		} else {
-			Label label = new Label(controlComposite, SWT.NONE);
-			label.setText("This tab requires native stencil support.");
-		}
-
-		return tabFolderPage;
-	}
-
-	/**
-	 * Disposes all resources allocated by this tab.
-	 */
-	void dispose() {
-	}
-
-	/**
-	 * Returns the glCanvas for this tab.
-	 * 
-	 * @return Canvas
-	 */
-	GLCanvas getGlCanvas() {
-		return glCanvas;
-	}
-
-	/**
-	 * Returns the length of time in milliseconds that the example
-	 * should sleep between animation redraws.  As this length
-	 * increases, user responsiveness increases and the frequency of
-	 * animation redraws decreases.  Subclasses with moving animations
-	 * may wish to override this default implementation to return a
-	 * smaller value if their animations do not occur frequently enough. 
-	 *
-	 * @return the length of time in milliseconds to sleep between redraws
-	 */
-	int getSleepLength() {
-		return DEFAULT_SLEEP_LENGTH;	
-	}
-
-	/**
-	 * Returns the text for this tab.  Subclasses must override.
-	 *
-	 * @return the text for the tab item
-	 */
-	abstract String getTabText();
-
-	/**
-	 * Returns whether this machine has native stencils support.
-	 * 
-	 * @return boolean
-	 */
-	boolean hasStencilSupport() {
-		return stencilSupport;
-	}
-
-	/**
-	 * Initialize OpenGL resources for this tab.  Subclasses must override.
-	 */
-	abstract void init();
-
-	/**
-	 * Loads a texture.
-	 * 
-	 * @param context
-	 * @param fileName
-	 * @param index
-	 * @param texture[]
-	 */
-	static void loadTexture(GLCanvas context, String fileName, int index, int[] texture) {
-		GL.glBindTexture(GL.GL_TEXTURE_2D, texture[index]);
-		ImageData source =
-			new ImageData(OpenGLTab.class.getResourceAsStream(fileName));
-		Image image = new Image(Display.getCurrent(), source);
-		Image newImage = new Image(Display.getCurrent(), 256, 256);
-		GC gc = new GC(newImage);
-		gc.drawImage(image, 0, 0, source.width, source.height, 0, 0, 256, 256);
-		source = newImage.getImageData();
-		gc.dispose();
-		source = ImageDataUtil.convertImageData(source);
-		newImage.dispose();
-		image.dispose();
-		GL.glTexImage2D(
-			GL.GL_TEXTURE_2D, 0, 3, 
-			source.width, source.height, 0,
-			GL.GL_RGB, GL.GL_UNSIGNED_BYTE, source.data);
-		GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR);
-		GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR);
-	}
-
-	/**
-	 * Renders this tab.
-	 */
-	void render() {
-		setCurrent();
-		if (!isStencilSupportNeeded() || hasStencilSupport()) {
-			renderScene();
-		} else {
-			GL.glClear(GL.GL_COLOR_BUFFER_BIT);
-		}
-	}
-
-	/**
-	 * Renders the scene for this tab.  Subclasses must override.
-	 */
-	abstract void renderScene();
-
-	/**
-	 * Returns whether this tab requires stencil support in order to display
-	 * properly. Subclasses may wish to override this method.
-	 * 
-	 * @return boolean
-	 */
-	boolean isStencilSupportNeeded() {
-		return false;
-	}
-
-	/**
-	 * Sets this rendering context to be current.
-	 */
-	void setCurrent() {
-		glCanvas.setCurrent();
-	}
-	
-	/**
-	 * Sets up the viewing area for the OpenGL screen.  The default
-	 * behavior is to use a perspective view, but there also exist frustrum
-	 * and ortho views.  Subclasses may wish to override this method.
-	 */
-	void setupViewingArea() {
-		Rectangle rect = glCanvas.getClientArea();
-		int width = rect.width;
-		int height = rect.height;
-		height = Math.max(height, 1);
-		GL.glViewport(0, 0, width, height);
-		GL.glMatrixMode(GL.GL_PROJECTION);	// select the projection matrix
-		GL.glLoadIdentity();				// reset the projection matrix
-		float fAspect = (float) width / (float) height;
-		GLU.gluPerspective(45.0f, fAspect, 0.5f, 400.0f);
-		GL.glMatrixMode(GL.GL_MODELVIEW);	// select the modelview matrix
-		GL.glLoadIdentity();
-	}
-
-	/**
-	 * Swaps the buffers.
-	 */
-	void swap() {
-		glCanvas.swapBuffers();
-	}
-}
diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ReflectionTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ReflectionTab.java
deleted file mode 100644
index db654b1..0000000
--- a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ReflectionTab.java
+++ /dev/null
@@ -1,556 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl.examples;
-
-
-import org.eclipse.opengl.*;
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-class ReflectionTab extends OpenGLTab {
-	private float ballY = 0.0f;
-	private float ballZ = 1.6666666f;
-	private float ballX = 0.0f;
-	private float ballRot = 0.0f;
-	private float cubeX = 2.5f;
-	private float cubeY = -2.0f;
-	private float cubeZ = 2.0f;
-	private float xPos = 0.0f;
-	private float yPos = 0.0f;
-	private float zPos = 22.0f;
-	private float ballRotSpeed = 0.0f;
-	private int quadratic;
-	private int[] textures = new int[3];
-	private final static int
-		LIST_INDEX_BALL = 1,LIST_INDEX_BOX = 2,
-		LIST_INDEX_MIRROR = 3, LIST_INDEX_ROOM = 4;
-	private final static int
-		TEXTURE_INDEX_BALL = 0, TEXTURE_INDEX_FLOOR = 1,
-		TEXTURE_INDEX_BOX = 2;
-	private final static String[] IMAGES = {
-		"images/Ball.jpg", "images/Floor.jpg", "images/Box.bmp" };
-	private final static int SLEEP_LENGTH = 50;
-
-	/**
-	 * Draws the ball
-	 */
-	void createBall() {
-		GL.glNewList(LIST_INDEX_BALL, GL.GL_COMPILE);
-		GL.glColor3f(1.0f, 1.0f, 1.0f);
-		GL.glBindTexture(GL.GL_TEXTURE_2D, textures[TEXTURE_INDEX_BALL]);
-		GLU.gluSphere(quadratic, 0.35f, 32, 16);
-		GL.glDisable(GL.GL_BLEND);
-		GL.glEndList();
-	}
-
-	/**
-	 * Draws the box
-	 */
-	void createBox() {
-		float size = 1.0f;
-		GL.glNewList(LIST_INDEX_BOX, GL.GL_COMPILE);
-		GL.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
-		GL.glBindTexture(GL.GL_TEXTURE_2D, textures[TEXTURE_INDEX_BOX]);
-		GL.glBegin(GL.GL_QUADS);
-		// front	
-		GL.glNormal3f(0.0f, 0.0f, 1.0f);
-		GL.glTexCoord2f(0.0f, 0.0f);
-		GL.glVertex3f(-size, -size, size);
-		GL.glTexCoord2f(1.0f, 0.0f);
-		GL.glVertex3f(size, -size, size);
-		GL.glTexCoord2f(1.0f, 1.0f);
-		GL.glVertex3f(size, size, size);
-		GL.glTexCoord2f(0.0f, 1.0f);
-		GL.glVertex3f(-size, size, size);
-		// back	
-		GL.glNormal3f(0.0f, 0.0f, -1.0f);
-		GL.glTexCoord2f(0.0f, 0.0f);
-		GL.glVertex3f(-size, -size, -size);
-		GL.glTexCoord2f(1.0f, 0.0f);
-		GL.glVertex3f(size, -size, -size);
-		GL.glTexCoord2f(1.0f, 1.0f);
-		GL.glVertex3f(size, size, -size);
-		GL.glTexCoord2f(0.0f, 1.0f);
-		GL.glVertex3f(-size, size, -size);
-		// left	
-		GL.glNormal3f(-1.0f, 0.0f, 0.0f);
-		GL.glTexCoord2f(0.0f, 0.0f);
-		GL.glVertex3f(-size, -size, -size);
-		GL.glTexCoord2f(1.0f, 0.0f);
-		GL.glVertex3f(-size, -size, size);
-		GL.glTexCoord2f(1.0f, 1.0f);
-		GL.glVertex3f(-size, size, size);
-		GL.glTexCoord2f(0.0f, 1.0f);
-		GL.glVertex3f(-size, size, -size);
-		// right	
-		GL.glNormal3f(1.0f, 0.0f, 0.0f);
-		GL.glTexCoord2f(0.0f, 0.0f);
-		GL.glVertex3f(size, -size, -size);
-		GL.glTexCoord2f(1.0f, 0.0f);
-		GL.glVertex3f(size, -size, size);
-		GL.glTexCoord2f(1.0f, 1.0f);
-		GL.glVertex3f(size, size, size);
-		GL.glTexCoord2f(0.0f, 1.0f);
-		GL.glVertex3f(size, size, -size);
-		// top	
-		GL.glNormal3f(0.0f, 1.0f, 0.0f);
-		GL.glTexCoord2f(0.0f, 0.0f);
-		GL.glVertex3f(size, size, -size);
-		GL.glTexCoord2f(1.0f, 0.0f);
-		GL.glVertex3f(-size, size, -size);
-		GL.glTexCoord2f(1.0f, 1.0f);
-		GL.glVertex3f(-size, size, size);
-		GL.glTexCoord2f(0.0f, 1.0f);
-		GL.glVertex3f(size, size, size);
-		// bottom	
-		GL.glNormal3f(0.0f, -1.0f, 0.0f);
-		GL.glTexCoord2f(0.0f, 0.0f);
-		GL.glVertex3f(size, -size, -size);
-		GL.glTexCoord2f(1.0f, 0.0f);
-		GL.glVertex3f(-size, -size, -size);
-		GL.glTexCoord2f(1.0f, 1.0f);
-		GL.glVertex3f(-size, -size, size);
-		GL.glTexCoord2f(0.0f, 1.0f);
-		GL.glVertex3f(size, -size, size);
-		GL.glEnd();
-		GL.glEndList();
-	}
-
-	/**
-	 * @see OpenGLTab#createControls(Composite)
-	 */
-	void createControls(Composite composite) {
-		Group ballTranslation = new Group(composite, SWT.NONE);
-		ballTranslation.setLayout(new GridLayout(2, false));
-		ballTranslation.setText("Ball Translation");
-
-		new Label(ballTranslation, SWT.NONE).setText("X:");
-		final Slider ballXPosSlider = new Slider(ballTranslation, SWT.NONE);
-		ballXPosSlider.setIncrement(1);
-		ballXPosSlider.setMaximum(38);
-		ballXPosSlider.setMinimum(0);
-		ballXPosSlider.setThumb(2);
-		ballXPosSlider.setPageIncrement(2);
-		ballXPosSlider.setSelection(18);
-		ballXPosSlider.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				ballX = (float) (ballXPosSlider.getSelection() - 18) / 5;
-			}
-		});
-
-		new Label(ballTranslation, SWT.NONE).setText("Y:");
-		final Slider ballYPosSlider = new Slider(ballTranslation, SWT.NONE);
-		ballYPosSlider.setIncrement(1);
-		ballYPosSlider.setMaximum(38);
-		ballYPosSlider.setMinimum(0);
-		ballYPosSlider.setThumb(2);
-		ballYPosSlider.setPageIncrement(2);
-		ballYPosSlider.setSelection(18);
-		ballYPosSlider.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				ballY = (float) (ballYPosSlider.getSelection() - 18) / 5;
-			}
-		});
-
-		new Label(ballTranslation, SWT.NONE).setText("Z:");
-		final Slider ballZPosSlider = new Slider(ballTranslation, SWT.NONE);
-		ballZPosSlider.setIncrement(1);
-		ballZPosSlider.setMaximum(24);
-		ballZPosSlider.setMinimum(0);
-		ballZPosSlider.setThumb(1);
-		ballZPosSlider.setPageIncrement(2);
-		ballZPosSlider.setSelection(4);
-		ballZPosSlider.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				ballZ = (float) (ballZPosSlider.getSelection() + 1) / 3;
-			}
-		});
-
-		Group cubeTranslation = new Group(composite, SWT.NONE);
-		cubeTranslation.setLayout(new GridLayout(2, false));
-		cubeTranslation.setText("Cube Translation");
-
-		new Label(cubeTranslation, SWT.NONE).setText("X:");
-		final Slider cubeXPosSlider = new Slider(cubeTranslation, SWT.NONE);
-		cubeXPosSlider.setIncrement(1);
-		cubeXPosSlider.setMaximum(14);
-		cubeXPosSlider.setMinimum(0);
-		cubeXPosSlider.setThumb(2);
-		cubeXPosSlider.setPageIncrement(2);
-		cubeXPosSlider.setSelection(11);
-		cubeXPosSlider.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				cubeX = (float) (cubeXPosSlider.getSelection() - 6) / 2;
-			}
-		});
-
-		new Label(cubeTranslation, SWT.NONE).setText("Y:");
-		final Slider cubeYPosSlider = new Slider(cubeTranslation, SWT.NONE);
-		cubeYPosSlider.setIncrement(1);
-		cubeYPosSlider.setMaximum(14);
-		cubeYPosSlider.setMinimum(0);
-		cubeYPosSlider.setThumb(2);
-		cubeYPosSlider.setPageIncrement(2);
-		cubeYPosSlider.setSelection(2);
-		cubeYPosSlider.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				cubeY = (float) (cubeYPosSlider.getSelection() - 6) / 2;
-			}
-		});
-
-		new Label(cubeTranslation, SWT.NONE).setText("Z:");
-		final Slider cubeZPosSlider = new Slider(cubeTranslation, SWT.NONE);
-		cubeZPosSlider.setIncrement(1);
-		cubeZPosSlider.setMaximum(10);
-		cubeZPosSlider.setMinimum(1);
-		cubeZPosSlider.setThumb(1);
-		cubeZPosSlider.setPageIncrement(2);
-		cubeZPosSlider.setSelection(2);
-		cubeZPosSlider.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				cubeZ = (float) (cubeZPosSlider.getSelection() + 2) / 2;
-			}
-		});
-
-		Group movementGroup = new Group(composite, SWT.NONE);
-		movementGroup.setLayout(new GridLayout(2, false));
-		movementGroup.setText("Room Rotation");
-
-		new Label(movementGroup, SWT.NONE).setText("X:");
-		final Slider screenXPosSlider = new Slider(movementGroup, SWT.NONE);
-		screenXPosSlider.setIncrement(1);
-		screenXPosSlider.setMaximum(42);
-		screenXPosSlider.setMinimum(0);
-		screenXPosSlider.setThumb(2);
-		screenXPosSlider.setPageIncrement(2);
-		screenXPosSlider.setSelection(20);
-		screenXPosSlider.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				xPos = screenXPosSlider.getSelection() - 20;
-			}
-		});
-
-		new Label(movementGroup, SWT.NONE).setText("Y:");
-		final Slider screenYPosSlider = new Slider(movementGroup, SWT.NONE);
-		screenYPosSlider.setIncrement(1);
-		screenYPosSlider.setMaximum(42);
-		screenYPosSlider.setMinimum(0);
-		screenYPosSlider.setThumb(2);
-		screenYPosSlider.setPageIncrement(2);
-		screenYPosSlider.setSelection(20);
-		screenYPosSlider.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				yPos = screenYPosSlider.getSelection() - 20;
-			}
-		});
-
-		new Label(movementGroup, SWT.NONE).setText("Z:");
-		final Slider screenZPosSlider = new Slider(movementGroup, SWT.NONE);
-		screenZPosSlider.setIncrement(1);
-		screenZPosSlider.setMaximum(42);
-		screenZPosSlider.setMinimum(0);
-		screenZPosSlider.setThumb(2);
-		screenZPosSlider.setPageIncrement(2);
-		screenZPosSlider.setSelection(20);
-		screenZPosSlider.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				zPos = screenZPosSlider.getSelection() + 2;
-			}
-		});
-
-		new Label(composite, SWT.NONE).setText("Ball Rotation Speed:");
-		final Slider ballRotSlider = new Slider(composite, SWT.NONE);
-		ballRotSlider.setIncrement(1);
-		ballRotSlider.setMaximum(22);
-		ballRotSlider.setMinimum(0);
-		ballRotSlider.setThumb(2);
-		ballRotSlider.setPageIncrement(2);
-		ballRotSlider.setSelection(0);
-		ballRotSlider.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				ballRotSpeed = ballRotSlider.getSelection();
-			}
-		});
-	}
-	
-	/**
-	 * Draws the mirror
-	 */
-	void createMirror() {
-		GL.glNewList(LIST_INDEX_MIRROR, GL.GL_COMPILE);
-		GL.glDisable(GL.GL_TEXTURE_2D);
-		GL.glColor4f(1.0f, 1.0f, 1.0f, 0.4f);
-		GL.glNormal3f(0.0f, 0.0f, 1.0f);
-		GL.glBegin(GL.GL_QUADS);
-		GL.glTexCoord2f(0.0f, 0.0f);
-		GL.glVertex3f(-2.0f, 2.0f, 0.0f);
-		GL.glTexCoord2f(1.0f, 0.0f);
-		GL.glVertex3f(-2.0f, -2.0f, 0.0f);
-		GL.glTexCoord2f(1.0f, 1.0f);
-		GL.glVertex3f(2.0f, -2.0f, 0.0f);
-		GL.glTexCoord2f(0.0f, 1.0f);
-		GL.glVertex3f(2.0f, 2.0f, 0.0f);
-		GL.glEnd();
-		GL.glEnable(GL.GL_TEXTURE_2D);
-		GL.glEndList();
-	}
-	
-	/**
-	 * Draws the room
-	 */
-	void createRoom() {
-		GL.glNewList(LIST_INDEX_ROOM, GL.GL_COMPILE);
-		GL.glDisable(GL.GL_TEXTURE_2D);
-		GL.glBegin(GL.GL_QUADS);
-		// left wall
-		GL.glNormal3f(1.0f, 0.0f, 0.0f);
-		GL.glVertex3f(-4.0f, 4.0f, 0.0f);
-		GL.glVertex3f(-4.0f, 4.0f, 6.0f);
-		GL.glVertex3f(-4.0f, -4.0f, 6.0f);
-		GL.glVertex3f(-4.0f, -4.0f, 0.0f);
-		// right wall
-		GL.glNormal3f(-1.0f, 0.0f, 01.0f);
-		GL.glVertex3f(4.0f, 4.0f, 0.0f);
-		GL.glVertex3f(4.0f, 4.0f, 6.0f);
-		GL.glVertex3f(4.0f, -4.0f, 6.0f);
-		GL.glVertex3f(4.0f, -4.0f, 0.0f);
-		// ceiling	
-		GL.glNormal3f(0.0f, -1.0f, 0.0f);
-		GL.glColor3f(0.9f, 0.9f, 0.9f);
-		GL.glVertex3f(-4.0f, 4.0f, 0.0f);
-		GL.glVertex3f(-4.0f, 4.0f, 6.0f);
-		GL.glVertex3f(4.0f, 4.0f, 6.0f);
-		GL.glVertex3f(4.0f, 4.0f, 0.0f);
-		GL.glEnd();
-		// back wall with triangle strip to illiminate t-intersections 
-		GL.glBegin(GL.GL_TRIANGLE_STRIP);
-		GL.glNormal3f(0.0f, 0.0f, 1.0f);
-		GL.glVertex3d(-4.0, -4.0, 0.0);
-		GL.glVertex3d(-2.2, -4.0, 0.0);
-		GL.glVertex3d(-2.2, -2.2, 0.0);
-		GL.glVertex3d(2.2, -4.0, 0.0);
-		GL.glVertex3d(2.2, -2.2, 0.0);
-		GL.glVertex3d(4.0, -4.0, 0.0);
-		GL.glVertex3d(2.2, -2.2, 0.0);
-		GL.glVertex3d(4.0, -2.2, 0.0);
-		GL.glVertex3d(2.2, 2.2, 0.0);
-		GL.glVertex3d(4.0, 2.2, 0.0);
-		GL.glVertex3d(2.2, 2.2, 0.0);
-		GL.glVertex3d(4.0, 4.0, 0.0);
-		GL.glVertex3d(2.2, 2.2, 0.0);
-		GL.glVertex3d(2.2, 4.0, 0.0);
-		GL.glVertex3d(-2.2, 2.2, 0.0);
-		GL.glVertex3d(-2.2, 4.0, 0.0);
-		GL.glVertex3d(-4.0, 4.0, 0.0);
-		GL.glVertex3d(-2.2, 2.2, 0.0);
-		GL.glVertex3d(-4.0, 2.2, 0.0);
-		GL.glVertex3d(-2.2, -2.2, 0.0);
-		GL.glVertex3d(-4.0, -2.2, 0.0);
-		GL.glVertex3d(-4.0, -4.0, 0.0);
-		GL.glEnd();
-		GL.glEnable(GL.GL_TEXTURE_2D);
-		// draw floor
-		GL.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
-		GL.glBindTexture(GL.GL_TEXTURE_2D, textures[TEXTURE_INDEX_FLOOR]);
-		GL.glNormal3f(0.0f, 1.0f, 0.0f);
-		GL.glBegin(GL.GL_QUADS);
-		// floor
-		GL.glTexCoord2f(0.0f, 0.0f);
-		GL.glVertex3f(-4.0f, -4.0f, 6.0f);
-		GL.glTexCoord2f(1.0f, 0.0f);
-		GL.glVertex3f(-4.0f, -4.0f, 0.0f);
-		GL.glTexCoord2f(1.0f, 1.0f);
-		GL.glVertex3f(4.0f, -4.0f, 0.0f);
-		GL.glTexCoord2f(0.0f, 1.0f);
-		GL.glVertex3f(4.0f, -4.0f, 6.0f);
-		GL.glEnd();
-		// draw mirror frame
-		GL.glBindTexture(GL.GL_TEXTURE_2D, textures[TEXTURE_INDEX_BOX]);
-		GL.glNormal3f(0.0f, 0.0f, 1.0f);
-		GL.glBegin(GL.GL_QUADS);
-		// top
-		GL.glTexCoord2f(0.0f, 0.0f);
-		GL.glVertex3f(-2.2f, 2.0f, 0.0f);
-		GL.glTexCoord2f(1.0f, 0.0f);
-		GL.glVertex3f(2.2f, 2.0f, 0.0f);
-		GL.glTexCoord2f(1.0f, 1.0f);
-		GL.glVertex3f(2.2f, 2.2f, 0.0f);
-		GL.glTexCoord2f(0.0f, 1.0f);
-		GL.glVertex3f(-2.2f, 2.2f, 0.0f);
-		// right
-		GL.glTexCoord2f(0.0f, 0.0f);
-		GL.glVertex3f(2.0f, 2.0f, 0.0f);
-		GL.glTexCoord2f(1.0f, 0.0f);
-		GL.glVertex3f(2.0f, -2.0f, 0.0f);
-		GL.glTexCoord2f(1.0f, 1.0f);
-		GL.glVertex3f(2.2f, -2.0f, 0.0f);
-		GL.glTexCoord2f(0.0f, 1.0f);
-		GL.glVertex3f(2.2f, 2.0f, 0.0f);
-		// bottom
-		GL.glTexCoord2f(0.0f, 0.0f);
-		GL.glVertex3f(-2.2f, -2.0f, 0.0f);
-		GL.glTexCoord2f(1.0f, 0.0f);
-		GL.glVertex3f(2.2f, -2.0f, 0.0f);
-		GL.glTexCoord2f(1.0f, 1.0f);
-		GL.glVertex3f(2.2f, -2.2f, 0.0f);
-		GL.glTexCoord2f(0.0f, 1.0f);
-		GL.glVertex3f(-2.2f, -2.2f, 0.0f);
-		// left
-		GL.glTexCoord2f(0.0f, 0.0f);
-		GL.glVertex3f(-2.0f, 2.0f, 0.0f);
-		GL.glTexCoord2f(1.0f, 0.0f);
-		GL.glVertex3f(-2.0f, -2.0f, 0.0f);
-		GL.glTexCoord2f(1.0f, 1.0f);
-		GL.glVertex3f(-2.2f, -2.0f, 0.0f);
-		GL.glTexCoord2f(0.0f, 1.0f);
-		GL.glVertex3f(-2.2f, 2.0f, 0.0f);
-		GL.glEnd();
-		GL.glEndList();
-	}
-
-	/**
-	 * @see OpenGLTab#dispose()
-	 */
-	void dispose() {
-		super.dispose();
-		GLU.gluDeleteQuadric(quadratic);
-		GL.glDeleteLists(LIST_INDEX_BALL, 1);
-		GL.glDeleteLists(LIST_INDEX_BOX, 1);
-		GL.glDeleteLists(LIST_INDEX_MIRROR, 1);
-		GL.glDeleteLists(LIST_INDEX_ROOM, 1);
-	}
-
-	/**
-	 * @see OpenGLTab#getSleepLength()
-	 */
-	int getSleepLength() {
-		return SLEEP_LENGTH;
-	}
-	
-	/**
-	 * @see OpenGLTab#getTabText()
-	 */
-	String getTabText() {
-		return "Reflection";
-	}
-
-	/**
-	 * @see OpenGLTab#init()
-	 */
-	void init() {
-		if (!hasStencilSupport()) return;
-
-		GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
-		GL.glClearDepth(1.0f);
-		GL.glClearStencil(0);
-		GL.glGenTextures(IMAGES.length, textures);
-		for (int i = 0; i < IMAGES.length; i++) {
-			loadTexture(getGlCanvas(), IMAGES[i], i, textures);
-		}
-
-		GL.glShadeModel(GL.GL_SMOOTH);
-		quadratic = GLU.gluNewQuadric();
-		GLU.gluQuadricNormals(quadratic, GL.GL_SMOOTH);
-		GLU.gluQuadricTexture(quadratic, true);
-		GL.glDepthFunc(GL.GL_LEQUAL);
-		GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
-		GL.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST);
-
-		// set up the lights
-		float[] LightAmb = { 0.7f, 0.7f, 0.7f, 1.0f };
-		float[] LightDif = { 1.0f, 1.0f, 1.0f, 1.0f };
-		float[] lightsAmbient = { 0.5f, 0.5f, 0.5f, 1.0f };
-		GL.glLightModelfv(GL.GL_LIGHT_MODEL_AMBIENT, lightsAmbient);
-		GL.glLightfv(GL.GL_LIGHT0, GL.GL_AMBIENT, LightAmb);
-		GL.glLightfv(GL.GL_LIGHT0, GL.GL_DIFFUSE, LightDif);
-
-		GL.glEnable(GL.GL_LIGHT0);
-		GL.glEnable(GL.GL_LIGHTING);
-		GL.glEnable(GL.GL_LINE_SMOOTH);
-		GL.glEnable(GL.GL_DEPTH_TEST);
-		GL.glEnable(GL.GL_TEXTURE_2D);
-		GL.glEnable(GL.GL_BLEND);
-
-		createRoom();
-		createBall();
-		createBox();
-		createMirror();
-	}
-
-	/**
-	 * @see OpenGLTab#isStencilSupportNeeded
-	 */
-	boolean isStencilSupportNeeded() {
-		return true;
-	}
-
-	/**
-	 * @see OpenGLTab#renderScene()
-	 */
-	void renderScene() {
-		GL.glClear(
-			GL.GL_COLOR_BUFFER_BIT
-				| GL.GL_DEPTH_BUFFER_BIT
-				| GL.GL_STENCIL_BUFFER_BIT);
-
-		GL.glLoadIdentity();
-		GLU.gluLookAt(xPos, yPos, zPos, 0, 0, 0, 0, 1, 0);
-		// clip plane equation
-		double clipEquation[] = { 0.0f, 0.0f, -1.0f, 0.0f };
-		float[] LightPos = { 0.0f, 2.0f, 7.0f, 1.0f };
-		GL.glColorMask(false, false, false, false);
-		// enable stencil buffer for "marking" the mirror		
-		GL.glEnable(GL.GL_STENCIL_TEST);
-		// set the stencil buffer to 1 where a polygon is drawn
-		GL.glStencilFunc(GL.GL_ALWAYS, 1, 1);
-		GL.glStencilOp(GL.GL_KEEP, GL.GL_KEEP, GL.GL_REPLACE);
-		GL.glDisable(GL.GL_DEPTH_TEST);
-		GL.glCallList(LIST_INDEX_MIRROR);
-		GL.glEnable(GL.GL_DEPTH_TEST);
-		GL.glColorMask(true, true, true, true);
-		GL.glStencilFunc(GL.GL_EQUAL, 1, 1);
-		// draw where the stencil is 1						
-		GL.glStencilOp(GL.GL_KEEP, GL.GL_KEEP, GL.GL_KEEP);
-		GL.glEnable(GL.GL_CLIP_PLANE0);
-		GL.glClipPlane(GL.GL_CLIP_PLANE0, clipEquation);
-		GL.glPushMatrix();
-		GL.glScalef(1.0f, 1.0f, -1.0f);
-		GL.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, LightPos);
-		GL.glCallList(LIST_INDEX_ROOM);			// reflection
-		GL.glPushMatrix();
-		GL.glTranslatef(cubeX, cubeY, cubeZ);
-		GL.glCallList(LIST_INDEX_BOX);			// reflection
-		GL.glPopMatrix();
-		GL.glTranslatef(ballX, ballY, ballZ);
-		GL.glRotatef(ballRot, 1.0f, 0.0f, 0.0f);
-		GL.glCallList(LIST_INDEX_BALL);			// reflection
-		GL.glPopMatrix();
-		GL.glDisable(GL.GL_CLIP_PLANE0);
-		GL.glDisable(GL.GL_STENCIL_TEST);
-		GL.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, LightPos);
-		GL.glEnable(GL.GL_BLEND);
-		GL.glDisable(GL.GL_LIGHTING);
-		GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
-		GL.glCallList(LIST_INDEX_MIRROR);
-		GL.glEnable(GL.GL_LIGHTING);
-		GL.glDisable(GL.GL_BLEND);
-		GL.glCallList(LIST_INDEX_ROOM);
-		GL.glPushMatrix();
-		GL.glTranslatef(cubeX, cubeY, cubeZ);
-		GL.glCallList(LIST_INDEX_BOX);
-		GL.glPopMatrix();
-		GL.glTranslatef(ballX, ballY, ballZ);
-		GL.glRotatef(ballRot, 1.0f, 0.0f, 0.0f);
-		GL.glCallList(LIST_INDEX_BALL);
-		ballRot += ballRotSpeed;
-	}
-}
diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/StencilTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/StencilTab.java
deleted file mode 100644
index 3b337e6..0000000
--- a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/StencilTab.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl.examples;
-
-
-import org.eclipse.opengl.*;
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-class StencilTab extends OpenGLTab {
-	private abstract class Shape {
-		private String name;
-		/**
-		 * Constructor
-		 * 
-		 * @param name the shape's name
-		 */
-		Shape(String name) {
-			super();
-			this.name = name;
-		}
-		/**
-		 * Draws this shape.
-		 */
-		abstract void draw();
-		/**
-		 * Returns the name.
-		 * 
-		 * @return String
-		 */
-		String getName() {
-			return name;
-		}
-	}
-
-	private Shape[] shapes = new Shape[5];
-	private Shape currentShape;
-	private float xPos = 0, yPos = 0;
-	private float size = 0.45f;
-	private int texture;
-	private int quadratic;
-	private final static String IMAGE = "images/splash.bmp";
-	private final static int SLEEP_LENGTH = 50;
-
-	/**
-	 * @see OpenGLTab#createControls(Composite)
-	 */
-	void createControls(Composite composite) {
-		Composite controls = new Composite(composite, SWT.NONE);
-		GridLayout layout = new GridLayout(2, false);
-		layout.marginHeight = 0;
-		layout.marginWidth = 0;
-		controls.setLayout(layout);
-		new Label(controls, SWT.NONE).setText("Object:");
-		final Combo shapeCombo = new Combo(controls, SWT.READ_ONLY);
-		for (int i = 0; i < shapes.length; i++) {
-			shapeCombo.add(shapes[i].getName());
-		}
-		shapeCombo.select(0);
-		shapeCombo.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				currentShape = shapes[shapeCombo.getSelectionIndex()];
-			}
-		});
-
-		new Label(composite, SWT.NONE).setText("Size:");
-		final Slider sizeSlider = new Slider(composite, SWT.HORIZONTAL);
-		sizeSlider.setValues(0, 15, 75, 5, 5, 10);
-		sizeSlider.setSelection(45);
-		sizeSlider.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				size = ((float) sizeSlider.getSelection()) / 100;
-			}
-		});
-	}
-
-	/**
-	 * @see OpenGLTab#dispose()
-	 */
-	void dispose() {
-		super.dispose();
-		GLU.gluDeleteQuadric(quadratic);
-	}
-
-	/**
-	 * @see OpenGLTab#getSleepLength()
-	 */
-	int getSleepLength() {
-		return SLEEP_LENGTH;
-	}
-	
-	/**
-	 * @see OpenGLTab#getTabText()
-	 */
-	String getTabText() {
-		return "Stencil";
-	}
-
-	/**
-	 * @see OpenGLTab#init()
-	 */
-	void init() {
-		if (!hasStencilSupport()) return;
-		
-		GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
-		GL.glClearDepth(1.0f);
-		int[] textureOut = new int[1];
-		GL.glGenTextures(1, textureOut);
-		loadTexture(getGlCanvas(), IMAGE, 0, textureOut);
-		this.texture = textureOut[0];
-		quadratic = GLU.gluNewQuadric();
-		GLU.gluQuadricNormals(quadratic, GLU.GLU_SMOOTH);
-		GL.glDepthFunc(GL.GL_LEQUAL);
-		GL.glEnable(GL.GL_STENCIL_TEST);
-		GL.glEnable(GL.GL_TEXTURE_2D);
-		GL.glEnable(GL.GL_DEPTH_TEST);
-		// create shapes
-		shapes[0] = new Shape("Triangle") {
-			public void draw() {
-				GL.glBegin(GL.GL_TRIANGLES);
-				GL.glVertex3f(0.0f, size, 0.0f);
-				GL.glVertex3f(-size, -size, 0.0f);
-				GL.glVertex3f(size, -size, 0.0f);
-				GL.glEnd();
-			}
-		};
-
-		shapes[1] = new Shape("Disk") {
-			public void draw() {
-				GLU.gluDisk(quadratic, 0.0f, size, 32, 32);
-			}
-		};
-
-		shapes[2] = new Shape("Square") {
-			public void draw() {
-				GL.glRectf(-size, -size, size, size);
-			}
-		};
-
-		shapes[3] = new Shape("Hour Glass") {
-			public void draw() {
-				GL.glBegin(GL.GL_TRIANGLES);
-				GL.glVertex3f(0.0f, size, 0.0f);
-				GL.glVertex3f(-size, -size, 0.0f);
-				GL.glVertex3f(size, -size, 0.0f);
-				GL.glVertex3f(0.0f, -size, 0.0f);
-				GL.glVertex3f(size, size, 0.0f);
-				GL.glVertex3f(-size, size, 0.0f);
-				GL.glEnd();
-			}
-		};
-
-		shapes[4] = new Shape("Star") {
-			public void draw() {
-				GL.glBegin(GL.GL_TRIANGLES);
-				GL.glVertex3f(-0.3f, 0, 0.0f);
-				GL.glVertex3f(2 * size - 0.3f, 0, 0.0f);
-				GL.glVertex3f(size - 0.3f, 2 * size * 0.85f, 0.0f);
-				GL.glVertex3f(2 * size - 0.3f, size, 0.0f);
-				GL.glVertex3f(0 - 0.3f, size, 0.0f);
-				GL.glVertex3f(size - 0.3f, -size * 0.85f, 0.0f);
-				GL.glEnd();
-			}
-		};
-
-		currentShape = shapes[0];
-	}
-
-	/**
-	 * @see OpenGLTab#isStencilSupportNeeded
-	 */
-	boolean isStencilSupportNeeded() {
-		return true;
-	}
-
-	/**
-	 * @see OpenGLTab#renderScene()
-	 */
-	void renderScene() {
-		GL.glClear(
-			GL.GL_COLOR_BUFFER_BIT
-				| GL.GL_DEPTH_BUFFER_BIT
-				| GL.GL_STENCIL_BUFFER_BIT);
-
-		GL.glLoadIdentity();
-		GL.glTranslatef(
-			(float) (1.5 * Math.cos(xPos)),
-			(float) (1.0 * Math.sin(yPos)),
-			-3.0f);
-		xPos += 0.15f;
-		yPos += 0.3f;
-
-		GL.glColorMask(false, false, false, false);
-		GL.glStencilFunc(GL.GL_ALWAYS, 1, 1);
-		GL.glStencilOp(GL.GL_KEEP, GL.GL_KEEP, GL.GL_REPLACE);
-		GL.glDisable(GL.GL_DEPTH_TEST);
-		GL.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
-
-		currentShape.draw();
-
-		GL.glEnable(GL.GL_DEPTH_TEST);
-		GL.glColorMask(true, true, true, true);
-		GL.glStencilFunc(GL.GL_EQUAL, 1, 1);
-		GL.glStencilOp(GL.GL_KEEP, GL.GL_KEEP, GL.GL_KEEP);
-
-		GL.glLoadIdentity();
-		// load the texture behind the stencil object
-		GL.glTranslatef(0.0f, 0.0f, -3.1f);
-		GL.glBindTexture(GL.GL_TEXTURE_2D, texture);
-		GL.glBegin(GL.GL_QUADS);
-		GL.glTexCoord2f(0.0f, 0.0f);
-		GL.glVertex3f(-0.85f, -0.85f, 1.0f);
-		GL.glTexCoord2f(1.0f, 0.0f);
-		GL.glVertex3f(0.85f, -0.85f, 1.0f);
-		GL.glTexCoord2f(1.0f, 1.0f);
-		GL.glVertex3f(0.85f, 0.85f, 1.0f);
-		GL.glTexCoord2f(0.0f, 1.0f);
-		GL.glVertex3f(-0.85f, 0.85f, 1.0f);
-		GL.glEnd();
-	}
-}
diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/TextureTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/TextureTab.java
deleted file mode 100644
index 6dae11a..0000000
--- a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/TextureTab.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl.examples;
-
-
-import org.eclipse.opengl.*;
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-class TextureTab extends OpenGLTab {
-	private float yrot = 0, zrot = 0;
-	private float xPos = 0.0f, yPos = 0.0f, zPos = -20;
-	private int texture = 0;
-	private float[][][] points = new float[45][45][3];
-	private final static String IMAGE = "images/splash.bmp";
-	private final static int SLEEP_LENGTH = 50;
-
-	/**
-	 * @see OpenGLTab#createControls(Composite)
-	 */
-	void createControls(Composite composite) {
-		Group movementGroup = new Group(composite, SWT.NONE);
-		movementGroup.setText("Translation");
-		movementGroup.setLayout(new GridLayout(2, false));
-
-		new Label(movementGroup, SWT.NONE).setText("X:");
-		final Slider xMove = new Slider(movementGroup, SWT.NONE);
-		xMove.setIncrement(1);
-		xMove.setMaximum(12);
-		xMove.setMinimum(0);
-		xMove.setThumb(2);
-		xMove.setPageIncrement(2);
-		xMove.setSelection(5);
-		xMove.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				xPos = xMove.getSelection() - 5;
-			}
-		});
-
-		new Label(movementGroup, SWT.NONE).setText("Y:");
-		final Slider yMove = new Slider(movementGroup, SWT.NONE);
-		yMove.setIncrement(1);
-		yMove.setMaximum(12);
-		yMove.setMinimum(0);
-		yMove.setThumb(2);
-		yMove.setPageIncrement(2);
-		yMove.setSelection(5);
-		yMove.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				yPos = yMove.getSelection() - 5;
-			}
-		});
-
-		new Label(movementGroup, SWT.NONE).setText("Z:");
-		final Slider zMove = new Slider(movementGroup, SWT.NONE);
-		zMove.setIncrement(1);
-		zMove.setMaximum(24);
-		zMove.setMinimum(0);
-		zMove.setThumb(4);
-		zMove.setPageIncrement(2);
-		zMove.setSelection(10);
-		zMove.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				zPos = zMove.getSelection() - 30;
-			}
-		});
-	}
-
-	/**
-	 * @see OpenGLTab#getSleepLength()
-	 */
-	int getSleepLength() {
-		return SLEEP_LENGTH;
-	}
-	
-	/**
-	 * @see OpenGLTab#getTabText()
-	 */
-	String getTabText() {
-		return "Texture";
-	}
-
-	/**
-	 * @see OpenGLTab#init()
-	 */
-	void init() {
-		//GL.glClearColor(0.0f, 0.0f, 0.3f, 1.0f); 
-		GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
-		GL.glClearDepth(1.0f);
-		int[] textureOut = new int[1];
-		GL.glGenTextures(1, textureOut);
-		loadTexture(getGlCanvas(), IMAGE, 0, textureOut);
-		texture = textureOut[0];
-		GL.glDepthFunc(GL.GL_LEQUAL);
-		GL.glPolygonMode(GL.GL_BACK, GL.GL_FILL);
-		GL.glPolygonMode(GL.GL_FRONT, GL.GL_LINE);
-		GL.glEnable(GL.GL_LIST_MODE);
-		GL.glEnable(GL.GL_TEXTURE_2D);
-		GL.glEnable(GL.GL_DEPTH_TEST);
-		// initialize points	
-		for (int x = 0; x < 45; x++) {
-			for (int y = 0; y < 45; y++) {
-				points[x][y][0] = x / 5.0f - 4.5f;
-				points[x][y][1] = y / 5.0f - 4.5f;
-				points[x][y][2] =
-					(float) Math.sin(
-						(((x / 5.0f) * 40.0f) / 360.0f) * Math.PI * 2);
-			}
-		}
-	}
-
-	/**
-	 * @see OpenGLTab#renderScene()
-	 */
-	void renderScene() {
-		GL.glClear(
-			GL.GL_COLOR_BUFFER_BIT
-				| GL.GL_DEPTH_BUFFER_BIT
-				| GL.GL_STENCIL_BUFFER_BIT);
-		GL.glLoadIdentity();
-		GL.glTranslatef(xPos, yPos, zPos);
-		GL.glRotatef(yrot, 0.0f, 1.0f, 0.0f);
-		GL.glRotatef(zrot, 0.0f, 0.0f, 1.0f);
-		GL.glBindTexture(GL.GL_TEXTURE_2D, texture);
-
-		GL.glBegin(GL.GL_QUADS);
-		for (int x = 0; x < 44; x++) {
-			for (int y = 0; y < 44; y++) {
-				float fx = x / 44.0f;
-				float fy = y / 44.0f;
-				float fxb = (x + 1) / 44.0f;
-				float fyb = (y + 1) / 44.0f;
-				GL.glTexCoord2f(fx, fy);
-				GL.glVertex3f(
-					points[x][y][0],
-					points[x][y][1],
-					points[x][y][2]);
-				GL.glTexCoord2f(fx, fyb);
-				GL.glVertex3f(
-					points[x][y + 1][0],
-					points[x][y + 1][1],
-					points[x][y + 1][2]);
-				GL.glTexCoord2f(fxb, fyb);
-				GL.glVertex3f(
-					points[x + 1][y + 1][0],
-					points[x + 1][y + 1][1],
-					points[x + 1][y + 1][2]);
-				GL.glTexCoord2f(fxb, fy);
-				GL.glVertex3f(
-					points[x + 1][y][0],
-					points[x + 1][y][1],
-					points[x + 1][y][2]);
-			}
-		}
-		GL.glEnd();
-		// perform wave motion
-		for (int y = 0; y < 45; y++) {
-			float hold = points[0][y][2];
-			for (int x = 0; x < 44; x++) {
-				points[x][y][2] = points[x + 1][y][2];
-			}
-			points[44][y][2] = hold;
-		}
-		yrot += 0.9f;
-		zrot += 0.6f;
-	}
-}
diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/TransparencyTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/TransparencyTab.java
deleted file mode 100644
index 4d9db53..0000000
--- a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/TransparencyTab.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 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.opengl.examples;
-
-
-import org.eclipse.opengl.*;
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-class TransparencyTab extends OpenGLTab {
-	private float[] alphas = { 0.3f, 0.5f, 1.0f };
-	private int quadratic;
-	private int currentSelection = 1;
-	private final static int
-		INDEX_TRIANGLE = 1, INDEX_SPHERE = 2, INDEX_DISK = 3;
-	private final static String[] OBJECTS = {"Triangle", "Sphere", "Disk" };
-
-	/**
-	 * @see OpenGLTab#createControls(Composite)
-	 */
-	void createControls(Composite composite) {
-		Composite objectGroup = new Composite(composite, SWT.NONE);
-		GridLayout layout = new GridLayout(2, false);
-		layout.marginHeight = 0;
-		layout.marginWidth = 0;
-		objectGroup.setLayout(layout);
-		objectGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
-
-		new Label(objectGroup, SWT.NONE).setText("Object:");
-		final Combo objectCombo = new Combo(objectGroup, SWT.READ_ONLY);
-		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-		data.grabExcessHorizontalSpace = true;
-		objectCombo.setLayoutData(data);
-		objectCombo.setItems(OBJECTS);
-		objectCombo.select(0);
-		
-		new Label(composite, SWT.NONE).setText("Transparency:");
-		final Slider transparencySlider = new Slider(composite, SWT.HORIZONTAL);
-		transparencySlider.setValues(0, 0, 11, 1, 1, 2);
-		transparencySlider.setSelection(7);
-		transparencySlider.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				float alpha = transparencySlider.getSelection();
-				alpha = 1.0f - alpha / 10;
-				alphas[currentSelection - 1] = alpha;
-			}
-		});
-		objectCombo.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				currentSelection = objectCombo.getSelectionIndex() + 1;
-				transparencySlider.setSelection(
-					(int) ((1.0f - alphas[currentSelection - 1]) * 10));
-			}
-		});
-	}
-
-	/**
-	 * @see OpenGLTab#dispose()
-	 */
-	void dispose() {
-		super.dispose();
-		GLU.gluDeleteQuadric(quadratic);
-		GL.glDeleteLists(INDEX_DISK, 1);
-		GL.glDeleteLists(INDEX_SPHERE, 1);
-		GL.glDeleteLists(INDEX_TRIANGLE, 1);
-	}
-
-	/**
-	 * @see OpenGLTab#getTabText()
-	 */
-	String getTabText() {
-		return "Transparency";
-	}
-
-	/**
-	 * @see OpenGLTab#init()
-	 */
-	void init() {
-		GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
-		GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
-		quadratic = GLU.gluNewQuadric();
-		GLU.gluQuadricNormals(quadratic, GLU.GLU_SMOOTH);
-		GL.glEnable(GL.GL_CULL_FACE);
-		GL.glEnable(GL.GL_DEPTH_TEST);
-		GL.glEnable(GL.GL_BLEND);
-		// create display lists		
-		GL.glNewList(INDEX_SPHERE, GL.GL_COMPILE);
-		GLU.gluQuadricDrawStyle(quadratic, GLU.GLU_FILL);
-		GLU.gluSphere(quadratic, 1.5, 32, 32);
-		GL.glEndList();
-		GL.glNewList(INDEX_DISK, GL.GL_COMPILE);
-		GLU.gluQuadricDrawStyle(quadratic, GLU.GLU_FILL);
-		GLU.gluDisk(quadratic, 1.0, 3, 32, 32);
-		GL.glEndList();
-		GL.glNewList(INDEX_TRIANGLE, GL.GL_COMPILE);
-		GL.glBegin(GL.GL_TRIANGLES);
-		GL.glVertex3f(0.0f, 2.0f, 0.0f);
-		GL.glVertex3f(-2.0f, -2.0f, 2.0f);
-		GL.glVertex3f(2.0f, -2.0f, 2.0f);
-		GL.glEnd();
-		GL.glEndList();
-	}
-
-	/**
-	 * @see SelectionTab.processPick (int[], int)
-	 */
-	void processPick(int[] pSelectBuff, int hits) {
-		int zDepth;
-		int tempSelection = pSelectBuff[3];
-		zDepth = pSelectBuff[2];
-		// pick object with largest z value
-		for (int i = 4; i <= 4 * (hits - 1); i = i + 4) {
-			if (zDepth > pSelectBuff[i + 2]) {
-				zDepth = pSelectBuff[i + 2];
-				tempSelection = pSelectBuff[i + 3];
-			}
-		}
-		if (tempSelection > 0) currentSelection = tempSelection;
-	}
-
-	/**
-	 * @see OpenGLTab#renderScene()
-	 */
-	void renderScene() {
-		// draw items with transparent qualities in reverse Z order
-		GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
-		GL.glLoadIdentity();
-		GL.glTranslatef(0.0f, 0.0f, -14.0f);
-		GL.glPushName(0);
-
-		// draw disk
-		GL.glPushMatrix();
-		GL.glTranslatef(-1.0f, 0.0f, 1.0f);
-		GL.glColor4f(0.0f, 1.0f, 0.0f, alphas[2]);
-		GL.glLoadName(INDEX_DISK);
-		GL.glCallList(INDEX_DISK);
-		if (currentSelection == INDEX_DISK) {
-			GL.glColor3f(1.0f, 0.0f, 0.0f);
-			GLU.gluQuadricDrawStyle(quadratic, GLU.GLU_LINE);
-			GLU.gluDisk(quadratic, 0.98, 3.02, 32, 32);
-		}
-		GL.glPopMatrix();
-
-		// draw triangle
-		GL.glTranslatef(0.0f, 0.0f, +3.0f);
-		GL.glLoadName(INDEX_TRIANGLE);
-		GL.glColor4f(1.0f, 0.0f, 0.0f, alphas[0]);
-		GL.glCallList(INDEX_TRIANGLE);
-		GL.glPointSize(5.0f);
-		if (currentSelection == INDEX_TRIANGLE) {
-			GL.glBegin(GL.GL_POINTS);
-			GL.glColor3f(1.0f, 0.0f, 0.0f);
-			GL.glVertex3f(0.0f, 2.0f, 0.0f);
-			GL.glVertex3f(-2.0f, -2.0f, 2.0f);
-			GL.glVertex3f(2.0f, -2.0f, 2.0f);
-			GL.glEnd();
-		}
-
-		// draw sphere
-		GL.glPushMatrix();
-		GL.glTranslatef(1.0f, 0.0f, +3.0f);
-		GL.glColor4f(0.0f, 0.0f, 1.0f, alphas[1]);
-		GL.glLoadName(INDEX_SPHERE);
-		GL.glCallList(INDEX_SPHERE);
-		if (currentSelection == INDEX_SPHERE) {
-			GL.glColor3f(1.0f, 0.0f, 0.0f);
-			GLU.gluQuadricDrawStyle(quadratic, GLU.GLU_LINE);
-			GLU.gluSphere(quadratic, 1.51, 8, 8);
-		}
-		GL.glPopMatrix();
-	}
-}
diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/Ball.jpg b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/Ball.jpg
deleted file mode 100644
index 6890d26..0000000
--- a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/Ball.jpg
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/Box.bmp b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/Box.bmp
deleted file mode 100644
index 5eef663..0000000
--- a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/Box.bmp
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/Floor.jpg b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/Floor.jpg
deleted file mode 100644
index 4934c9c..0000000
--- a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/Floor.jpg
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/splash.bmp b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/splash.bmp
deleted file mode 100644
index 6ec75da..0000000
--- a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/splash.bmp
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/untitled.jpg b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/untitled.jpg
deleted file mode 100644
index f5d6aa1..0000000
--- a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/untitled.jpg
+++ /dev/null
Binary files differ
diff --git a/examples/org.eclipse.swt.snippets/.classpath b/examples/org.eclipse.swt.snippets/.classpath
deleted file mode 100644
index 751c8f2..0000000
--- a/examples/org.eclipse.swt.snippets/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/examples/org.eclipse.swt.snippets/.cvsignore b/examples/org.eclipse.swt.snippets/.cvsignore
deleted file mode 100644
index c5e82d7..0000000
--- a/examples/org.eclipse.swt.snippets/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/.project b/examples/org.eclipse.swt.snippets/.project
deleted file mode 100644
index da5ce16..0000000
--- a/examples/org.eclipse.swt.snippets/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.swt.snippets</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/examples/org.eclipse.swt.snippets/about.html b/examples/org.eclipse.swt.snippets/about.html
deleted file mode 100644
index 6f6b96c..0000000
--- a/examples/org.eclipse.swt.snippets/about.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>February 24, 2005</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/build.properties b/examples/org.eclipse.swt.snippets/build.properties
deleted file mode 100644
index ceaaa93..0000000
--- a/examples/org.eclipse.swt.snippets/build.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2004 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
-###############################################################################
-source.swtsnippets.jar = src/
diff --git a/examples/org.eclipse.swt.snippets/plugin.properties b/examples/org.eclipse.swt.snippets/plugin.properties
deleted file mode 100644
index d1e0212..0000000
--- a/examples/org.eclipse.swt.snippets/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2004 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
-###############################################################################
-pluginName = SWT Snippets
-providerName = Eclipse.org
diff --git a/examples/org.eclipse.swt.snippets/plugin.xml b/examples/org.eclipse.swt.snippets/plugin.xml
deleted file mode 100644
index b73d5a6..0000000
--- a/examples/org.eclipse.swt.snippets/plugin.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin
-   id="org.eclipse.swt.snippets"
-   name="%pluginName"
-   version="3.1.0"
-   provider-name="%providerName">
-
-   <requires>
-      <import plugin="org.eclipse.swt" export="true"/>
-   </requires>
-
-</plugin>
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet1.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet1.java
deleted file mode 100644
index 7ba0b1c..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet1.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/* 
- * example snippet: Hello World
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.widgets.*;
-
-public class Snippet1 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell(display);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet10.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet10.java
deleted file mode 100644
index 2e8c90e..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet10.java
+++ /dev/null
@@ -1,67 +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.snippets;
-
-/* 
- * Drawing with transformations, paths and alpha blending
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.1
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet10 {
-	public static void main(String[] args) {
-		final Display display = new Display();
-		final Shell shell = new Shell(display);
-		shell.setText("Advanced Graphics");
-		FontData fd = shell.getFont().getFontData()[0];
-		final Font font = new Font(display, fd.getName(), 60, SWT.BOLD | SWT.ITALIC);
-		final Image image = new Image(display, 640, 480);
-		final Rectangle rect = image.getBounds();
-		GC gc = new GC(image);
-		gc.setBackground(display.getSystemColor(SWT.COLOR_RED));
-		gc.fillOval(rect.x, rect.y, rect.width, rect.height);
-		gc.dispose();
-		shell.addListener(SWT.Paint, new Listener() {
-			public void handleEvent(Event event) {
-				GC gc = event.gc;				
-				Transform tr = new Transform(display);
-				tr.translate(50, 120);
-				tr.rotate(-30);
-				gc.drawImage(image, 0, 0, rect.width, rect.height, 0, 0, rect.width / 2, rect.height / 2);
-				gc.setAlpha(100);
-				gc.setTransform(tr);
-				Path path = new Path(display);
-				path.addString("SWT", 0, 0, font);
-				gc.setBackground(display.getSystemColor(SWT.COLOR_GREEN));
-				gc.setForeground(display.getSystemColor(SWT.COLOR_BLUE));
-				gc.fillPath(path);
-				gc.drawPath(path);
-				tr.dispose();
-				path.dispose();
-			}			
-		});
-		shell.setSize(shell.computeSize(rect.width / 2, rect.height / 2));
-		shell.open();
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		image.dispose();
-		font.dispose();
-		display.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet100.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet100.java
deleted file mode 100644
index 2fff80a..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet100.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Font example snippet: create a large font for use by a text widget
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet100 {
-
-public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setBounds(10, 10, 200, 200);
-	Text text = new Text(shell, SWT.MULTI);
-	text.setBounds(10, 10, 150, 150);
-	Font initialFont = text.getFont();
-	FontData[] fontData = initialFont.getFontData();
-	for (int i = 0; i < fontData.length; i++) {
-		fontData[i].setHeight(24);
-	}
-	Font newFont = new Font(display, fontData);
-	text.setFont(newFont);
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	newFont.dispose();
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet101.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet101.java
deleted file mode 100644
index d70e976..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet101.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Table example snippet: insert a table item (at an index)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet101 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Table table = new Table (shell, SWT.BORDER | SWT.MULTI);
-	table.setSize (200, 200);
-	for (int i=0; i<12; i++) {
-		TableItem item = new TableItem (table, SWT.NONE);
-		item.setText ("Item " + i);
-	}
-	TableItem item = new TableItem (table, SWT.NONE, 1);
-	item.setText ("*** New Item " + table.indexOf (item) + " ***");
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-
-}
-
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet102.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet102.java
deleted file mode 100644
index 23056b6..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet102.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Tree example snippet: insert a tree item (at an index)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet102 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Tree tree = new Tree (shell, SWT.BORDER | SWT.MULTI);
-	tree.setSize (200, 200);
-	for (int i=0; i<12; i++) {
-		TreeItem item = new TreeItem (tree, SWT.NONE);
-		item.setText ("Item " + i);
-	}
-	TreeItem item = new TreeItem (tree, SWT.NONE, 1);
-	TreeItem [] items = tree.getItems ();
-	int index = 0;
-	while (index < items.length && items [index] != item) index++;
-	item.setText ("*** New Item " + index + " ***");
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet103.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet103.java
deleted file mode 100644
index 5ab73fb..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet103.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Table example snippet: update table item text
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet103 {
-
-static char content = 'a';
-public static void main(String[] args) {
-	final Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setBounds(10, 10, 200, 240);
-	Table table = new Table(shell, SWT.NONE);
-	table.setBounds(10, 10, 160, 160);
-
-	final TableItem[] items = new TableItem[4];
-	for (int i = 0; i < 4; i++) {
-		new TableColumn(table, SWT.NONE).setWidth(40);
-	}
-	for (int i = 0; i < 4; i++) {
-		items[i] = new TableItem(table, SWT.NONE);
-		populateItem(items[i]);
-	}
-
-	Button button = new Button(shell, SWT.PUSH);
-	button.setText("Change");
-	button.pack();
-	button.setLocation(10, 180);
-	button.addListener(SWT.Selection, new Listener() {
-		public void handleEvent(Event event) {
-			for (int i = 0; i < 4; i++) {
-				populateItem(items[i]);
-			}
-		}
-	});
-
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch()) display.sleep();
-	}
-	display.dispose();
-}
-
-static void populateItem(TableItem item) {
-	String stringContent = String.valueOf(content);
-	item.setText(
-		new String[] {
-			stringContent,
-			stringContent,
-			stringContent,
-			stringContent });
-	content++;
-	if (content > 'z') content = 'a';
-}
-
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet104.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet104.java
deleted file mode 100644
index 4dd38d2..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet104.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Shell example snippet: create a splash screen
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet104 {
-
-public static void main(String[] args) {
-	final Display display = new Display();
-	final int [] count = new int [] {4};
-	final Image image = new Image(display, 300, 300);
-	GC gc = new GC(image);
-	gc.setBackground(display.getSystemColor(SWT.COLOR_CYAN));
-	gc.fillRectangle(image.getBounds());
-	gc.drawText("Splash Screen", 10, 10);
-	gc.dispose();
-	final Shell splash = new Shell(SWT.ON_TOP);
-	final ProgressBar bar = new ProgressBar(splash, SWT.NONE);
-	bar.setMaximum(count[0]);
-	Label label = new Label(splash, SWT.NONE);
-	label.setImage(image);
-	FormLayout layout = new FormLayout();
-	splash.setLayout(layout);
-	FormData labelData = new FormData ();
-	labelData.right = new FormAttachment (100, 0);
-	labelData.bottom = new FormAttachment (100, 0);
-	label.setLayoutData(labelData);
-	FormData progressData = new FormData ();
-	progressData.left = new FormAttachment (0, 5);
-	progressData.right = new FormAttachment (100, -5);
-	progressData.bottom = new FormAttachment (100, -5);
-	bar.setLayoutData(progressData);
-	splash.pack();
-	Rectangle splashRect = splash.getBounds();
-	Rectangle displayRect = display.getBounds();
-	int x = (displayRect.width - splashRect.width) / 2;
-	int y = (displayRect.height - splashRect.height) / 2;
-	splash.setLocation(x, y);
-	splash.open();
-	display.asyncExec(new Runnable() {
-		public void run() {
-			Shell [] shells = new Shell[count[0]];
-			for (int i=0; i<count[0]; i++) {
-				shells [i] = new Shell(display);
-				shells [i].setSize (300, 300);
-				shells [i].addListener(SWT.Close, new Listener() {
-					public void handleEvent (Event e) {
-						--count[0];
-					}
-				});
-				bar.setSelection(i+1);
-				try {Thread.sleep(1000);} catch (Throwable e) {}
-			}
-			splash.close();
-			image.dispose();
-			for (int i=0; i<count[0]; i++) {
-				shells [i].open();
-			}
-		}
-	});
-	while (count [0] != 0) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose();
-}
-
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet105.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet105.java
deleted file mode 100644
index c23d327..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet105.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Program example snippet: invoke an external batch file
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.program.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet105 {
-
-public static void main(String[] args) {
-	Display display = new Display ();
-	Program.launch("c:\\cygwin\\cygwin.bat");
-	display.dispose ();
-}
-
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet106.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet106.java
deleted file mode 100644
index 68c3aca..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet106.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Table example snippet: insert a table column (at an index)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet106 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setLayout (new RowLayout (SWT.VERTICAL));
-	final Table table = new Table (shell, SWT.BORDER | SWT.MULTI);
-	table.setHeaderVisible (true);
-	for (int i=0; i<4; i++) {
-		TableColumn column = new TableColumn (table, SWT.NONE);
-		column.setText ("Column " + i);
-	}
-	final TableColumn [] columns = table.getColumns ();
-	for (int i=0; i<12; i++) {
-		TableItem item = new TableItem (table, SWT.NONE);
-		for (int j=0; j<columns.length; j++) {
-			item.setText (j, "Item " + i);
-		}
-	}
-	for (int i=0; i<columns.length; i++) columns [i].pack ();
-	Button button = new Button (shell, SWT.PUSH);
-	final int index = 1;
-	button.setText ("Insert Column " + index + "a");
-	button.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event e) {
-			TableColumn column = new TableColumn (table, SWT.NONE, index);
-			column.setText ("Column " + index + "a");
-			TableItem [] items = table.getItems ();
-			for (int i=0; i<items.length; i++) {
-				items [i].setText (index, "Item " + i + "a");
-			}
-			column.pack ();
-		}
-	});
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet107.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet107.java
deleted file mode 100644
index 9f13698..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet107.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-/*
- * Sash example snippet: implement a simple splitter (with a 20 pixel limit)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet107 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	final Shell shell = new Shell (display);
-	Button button1 = new Button (shell, SWT.PUSH);
-	button1.setText ("Button 1");
-	final Sash sash = new Sash (shell, SWT.VERTICAL);
-	Button button2 = new Button (shell, SWT.PUSH);
-	button2.setText ("Button 2");
-	
-	final FormLayout form = new FormLayout ();
-	shell.setLayout (form);
-	
-	FormData button1Data = new FormData ();
-	button1Data.left = new FormAttachment (0, 0);
-	button1Data.right = new FormAttachment (sash, 0);
-	button1Data.top = new FormAttachment (0, 0);
-	button1Data.bottom = new FormAttachment (100, 0);
-	button1.setLayoutData (button1Data);
-
-	final int limit = 20, percent = 50;
-	final FormData sashData = new FormData ();
-	sashData.left = new FormAttachment (percent, 0);
-	sashData.top = new FormAttachment (0, 0);
-	sashData.bottom = new FormAttachment (100, 0);
-	sash.setLayoutData (sashData);
-	sash.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event e) {
-			Rectangle sashRect = sash.getBounds ();
-			Rectangle shellRect = shell.getClientArea ();
-			int right = shellRect.width - sashRect.width - limit;
-			e.x = Math.max (Math.min (e.x, right), limit);
-			if (e.x != sashRect.x)  {
-				sashData.left = new FormAttachment (0, e.x);
-				shell.layout ();
-			}
-		}
-	});
-	
-	FormData button2Data = new FormData ();
-	button2Data.left = new FormAttachment (sash, 0);
-	button2Data.right = new FormAttachment (100, 0);
-	button2Data.top = new FormAttachment (0, 0);
-	button2Data.bottom = new FormAttachment (100, 0);
-	button2.setLayoutData (button2Data);
-	
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet108.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet108.java
deleted file mode 100644
index 887fa3b..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet108.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Button example snippet: set the default button
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet108 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Label label = new Label (shell, SWT.NONE);
-	label.setText ("Enter your name:");
-	Text text = new Text (shell, SWT.BORDER);
-	text.setLayoutData (new RowData (100, SWT.DEFAULT));
-	Button ok = new Button (shell, SWT.PUSH);
-	ok.setText ("OK");
-	ok.addSelectionListener(new SelectionAdapter() {
-		public void widgetSelected(SelectionEvent e) {
-			System.out.println("OK");
-		}
-	});
-	Button cancel = new Button (shell, SWT.PUSH);
-	cancel.setText ("Cancel");
-	cancel.addSelectionListener(new SelectionAdapter() {
-		public void widgetSelected(SelectionEvent e) {
-			System.out.println("Cancel");
-		}
-	});
-	shell.setDefaultButton (cancel);
-	shell.setLayout (new RowLayout ());
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet109.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet109.java
deleted file mode 100644
index 37b25bc..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet109.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * SashForm example snippet: create a sash form with three children
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.custom.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet109 {
-
-public static void main (String [] args) {
-	final Display display = new Display ();
-	Shell shell = new Shell(display);
-	shell.setLayout (new FillLayout());
-
-	SashForm form = new SashForm(shell,SWT.HORIZONTAL);
-	form.setLayout(new FillLayout());
-	
-	Composite child1 = new Composite(form,SWT.NONE);
-	child1.setLayout(new FillLayout());
-	new Label(child1,SWT.NONE).setText("Label in pane 1");
-	
-	Composite child2 = new Composite(form,SWT.NONE);
-	child2.setLayout(new FillLayout());
-	new Button(child2,SWT.PUSH).setText("Button in pane2");
-
-	Composite child3 = new Composite(form,SWT.NONE);
-	child3.setLayout(new FillLayout());
-	new Label(child3,SWT.PUSH).setText("Label in pane3");
-	
-	form.setWeights(new int[] {30,40,30});
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet11.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet11.java
deleted file mode 100644
index fd6c001..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet11.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Text example snippet: set the selection (i-beam)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet11 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Text text = new Text (shell, SWT.BORDER | SWT.V_SCROLL);
-	text.setBounds (10, 10, 100, 100);
-	for (int i=0; i<16; i++) {
-		text.append ("Line " + i + "\n");
-	}
-	shell.open ();
-	text.setSelection (30);
-	System.out.println (text.getCaretLocation ());
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet110.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet110.java
deleted file mode 100644
index 5bda0c3..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet110.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Table example snippet: find a table cell from mouse down (works for any table style)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.graphics.*;
-
-public class Snippet110 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	final Table table = new Table (shell, SWT.BORDER | SWT.V_SCROLL);
-	table.setHeaderVisible (true);
-	table.setLinesVisible (true);
-	final int rowCount = 64, columnCount = 4;
-	for (int i=0; i < columnCount; i++) {
-		TableColumn column = new TableColumn (table, SWT.NONE);
-		column.setText ("Column " + i);
-	}
-	for (int i=0; i < rowCount; i++) {
-		TableItem item = new TableItem (table, SWT.NONE);
-		for (int j=0; j < columnCount; j++) {
-			item.setText (j, "Item " + i + "-" + j);
-		}
-	}
-	for (int i=0; i < columnCount; i++) {
-		table.getColumn (i).pack ();
-	}
-	Point size = table.computeSize (SWT.DEFAULT, 200);
-	table.setSize (size);
-	shell.pack ();
-	table.addListener (SWT.MouseDown, new Listener () {
-		public void handleEvent (Event event) {
-			Rectangle clientArea = table.getClientArea ();
-			Point pt = new Point (event.x, event.y);
-			int index = table.getTopIndex ();
-			while (index < table.getItemCount ()) {
-				boolean visible = false;
-				TableItem item = table.getItem (index);
-				for (int i=0; i < columnCount; i++) {
-					Rectangle rect = item.getBounds (i);
-					if (rect.contains (pt)) {
-						System.out.println ("Item " + index + "-" + i);
-					}
-					if (!visible && rect.intersects (clientArea)) {
-						visible = true;
-					}
-				}
-				if (!visible) return;
-				index++;
-			}
-		}
-	});
-	shell.open ();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet111.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet111.java
deleted file mode 100644
index 3f7e596..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet111.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * TreeEditor example snippet: edit the text of a tree item (in place, fancy)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.custom.*;
-
-public class Snippet111 {
-
-public static void main (String [] args) {
-	final Display display = new Display ();
-	final Color black = display.getSystemColor (SWT.COLOR_BLACK);
-	Shell shell = new Shell (display);
-	shell.setLayout (new FillLayout ());
-	final Tree tree = new Tree (shell, SWT.BORDER);
-	for (int i=0; i<16; i++) {
-		TreeItem itemI = new TreeItem (tree, SWT.NONE);
-		itemI.setText ("Item " + i);
-		for (int j=0; j<16; j++) {
-			TreeItem itemJ = new TreeItem (itemI, SWT.NONE);
-			itemJ.setText ("Item " + j);
-		}
-	}
-	final TreeItem [] lastItem = new TreeItem [1];
-	final TreeEditor editor = new TreeEditor (tree);
-	tree.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event event) {
-			final TreeItem item = (TreeItem) event.item;
-			if (item != null && item == lastItem [0]) {
-				boolean isCarbon = SWT.getPlatform ().equals ("carbon");
-				final Composite composite = new Composite (tree, SWT.NONE);
-				if (!isCarbon) composite.setBackground (black);
-				final Text text = new Text (composite, SWT.NONE);
-				final int inset = isCarbon ? 0 : 1;
-				composite.addListener (SWT.Resize, new Listener () {
-					public void handleEvent (Event e) {
-						Rectangle rect = composite.getClientArea ();
-						text.setBounds (rect.x + inset, rect.y + inset, rect.width - inset * 2, rect.height - inset * 2);
-					}
-				});
-				Listener textListener = new Listener () {
-					public void handleEvent (final Event e) {
-						switch (e.type) {
-							case SWT.FocusOut:
-								item.setText (text.getText ());
-								composite.dispose ();
-								break;
-							case SWT.Verify:
-								String newText = text.getText ();
-								String leftText = newText.substring (0, e.start);
-								String rightText = newText.substring (e.end, newText.length ());
-								GC gc = new GC (text);
-								Point size = gc.textExtent (leftText + e.text + rightText);
-								gc.dispose ();
-								size = text.computeSize (size.x, SWT.DEFAULT);
-								editor.horizontalAlignment = SWT.LEFT;
-								Rectangle itemRect = item.getBounds (), rect = tree.getClientArea ();
-								editor.minimumWidth = Math.max (size.x, itemRect.width) + inset * 2;
-								int left = itemRect.x, right = rect.x + rect.width;
-								editor.minimumWidth = Math.min (editor.minimumWidth, right - left);
-								editor.minimumHeight = size.y + inset * 2;
-								editor.layout ();
-								break;
-							case SWT.Traverse:
-								switch (e.detail) {
-									case SWT.TRAVERSE_RETURN:
-										item.setText (text.getText ());
-										//FALL THROUGH
-									case SWT.TRAVERSE_ESCAPE:
-										composite.dispose ();
-										e.doit = false;
-								}
-								break;
-						}
-					}
-				};
-				text.addListener (SWT.FocusOut, textListener);
-				text.addListener (SWT.Traverse, textListener);
-				text.addListener (SWT.Verify, textListener);
-				editor.setEditor (composite, item);
-				text.setText (item.getText ());
-				text.selectAll ();
-				text.setFocus ();
-			}
-			lastItem [0] = item;
-		}
-	});
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet112.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet112.java
deleted file mode 100644
index b76e398..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet112.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Image example snippet: display an image in a group
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet112 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	final Image image = new Image (display, 20, 20);
-	Color color = display.getSystemColor (SWT.COLOR_RED);
-	GC gc = new GC (image);
-	gc.setBackground (color);
-	gc.fillRectangle (image.getBounds ());
-	gc.dispose ();
-	color.dispose ();
-
-	Shell shell = new Shell (display);
-	shell.setLayout (new FillLayout ());
-	Group group = new Group (shell, SWT.NONE);
-	group.setLayout (new FillLayout ());
-	group.setText ("a square");
-	Canvas canvas = new Canvas (group, SWT.NONE);
-	canvas.addPaintListener (new PaintListener () {
-		public void paintControl (PaintEvent e) {
-			e.gc.drawImage (image, 0, 0);
-		}
-	});
-
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ())
-			display.sleep ();
-	}
-	image.dispose ();
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet113.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet113.java
deleted file mode 100644
index 87ba34e..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet113.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Table example snippet: detect a selection or check event in a table (SWT.CHECK)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet113 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Table table = new Table (shell, SWT.CHECK | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
-	for (int i=0; i<12; i++) {
-		TableItem item = new TableItem (table, SWT.NONE);
-		item.setText ("Item " + i);
-	}
-	table.setSize (100, 100);
-	table.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event event) {
-			String string = event.detail == SWT.CHECK ? "Checked" : "Selected";
-			System.out.println (event.item + " " + string);
-		}
-	});
-	shell.setSize (200, 200);
-	shell.open ();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet114.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet114.java
deleted file mode 100644
index cec6fc6..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet114.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Tree example snippet: detect a selection or check event in a tree (SWT.CHECK)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet114 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Tree tree = new Tree (shell, SWT.CHECK | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
-	for (int i=0; i<12; i++) {
-		TreeItem item = new TreeItem (tree, SWT.NONE);
-		item.setText ("Item " + i);
-	}
-	tree.setSize (100, 100);
-	tree.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event event) {
-			String string = event.detail == SWT.CHECK ? "Checked" : "Selected";
-			System.out.println (event.item + " " + string);
-		}
-	});
-	shell.setSize (200, 200);
-	shell.open ();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet115.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet115.java
deleted file mode 100644
index 45d2245..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet115.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Composite example snippet: force radio behavior on two different composites
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet115 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setLayout (new RowLayout (SWT.VERTICAL));
-	Composite c1 = new Composite (shell, SWT.BORDER | SWT.NO_RADIO_GROUP);
-	c1.setLayout (new RowLayout ());
-	Composite c2 = new Composite (shell, SWT.BORDER | SWT.NO_RADIO_GROUP);
-	c2.setLayout (new RowLayout ());
-	final Composite [] composites = new Composite [] {c1, c2};
-	Listener radioGroup = new Listener () {
-		public void handleEvent (Event event) {
-			for (int i=0; i<composites.length; i++) {
-				Composite composite = composites [i];
-				Control [] children = composite.getChildren ();
-				for (int j=0; j<children.length; j++) {
-					Control child = children [j];
-					if (child instanceof Button) {
-						Button button = (Button) child;
-						if ((button.getStyle () & SWT.RADIO) != 0) button.setSelection (false);
-					}
-				}
-			}
-			Button button = (Button) event.widget;
-			button.setSelection (true);
-		}
-	};
-	for (int i=0; i<4; i++) {
-		Button button = new Button (c1, SWT.RADIO);
-		button.setText ("Button " + i);
-		button.addListener (SWT.Selection, radioGroup);
-	}
-	for (int i=0; i<4; i++) {
-		Button button = new Button (c2, SWT.RADIO);
-		button.setText ("Button " + (i + 4));
-		button.addListener (SWT.Selection, radioGroup);
-	}
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet116.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet116.java
deleted file mode 100644
index ac95ef8..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet116.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Text example snippet: stop CR from going to the default button
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet116  {
-public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setLayout(new GridLayout());
-	Text text = new Text(shell, SWT.SINGLE | SWT.BORDER);
-	text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-	text.setText("Here is some text");
-	text.addSelectionListener(new SelectionAdapter() {
-		public void widgetDefaultSelected(SelectionEvent e) {
-			System.out.println("Text default selected (overrides default button)");
-		}
-	});
-	text.addTraverseListener(new TraverseListener() {
-		public void keyTraversed(TraverseEvent e) {
-			if (e.detail == SWT.TRAVERSE_RETURN) {
-				e.doit = false;
-				e.detail = SWT.TRAVERSE_NONE;
-			}
-		}
-	});
-	Button button = new Button(shell, SWT.PUSH);
-	button.setText("Ok");
-	button.addSelectionListener(new SelectionAdapter() {
-		public void widgetSelected(SelectionEvent e) {
-			System.out.println("Button selected");
-		}
-	});
-	shell.setDefaultButton(button);
-	shell.pack();
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet117.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet117.java
deleted file mode 100644
index 5938fc3..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet117.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Text example snippet: add a select all menu item to the control
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet117  {
-public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setLayout(new FillLayout());
-	final Text t = new Text(shell, SWT.BORDER | SWT.MULTI);
-    
-	Menu bar = new Menu (shell, SWT.BAR);
-	shell.setMenuBar (bar);
-	MenuItem editItem = new MenuItem (bar, SWT.CASCADE);
-	editItem.setText ("Edit");
-	Menu submenu = new Menu (shell, SWT.DROP_DOWN);
-	editItem.setMenu (submenu);
-
-	MenuItem item = new MenuItem (submenu, SWT.PUSH);
-	item.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event e) {
-			t.selectAll();
-		}
-	});
-	item.setText ("Select &All\tCtrl+A");
-	item.setAccelerator (SWT.CTRL + 'A');
-	
-	// Note that as long as your application has not overridden 
-	// the global accelerators for copy, paste, and cut 
-	//(CTRL+C or CTRL+INSERT, CTRL+V or SHIFT+INSERT, and CTRL+X or SHIFT+DELETE)
-	// these behaviours are already available by default.
-	// If your application overrides these accelerators,
-	// you will need to call Text.copy(), Text.paste() and Text.cut()
-	// from the Selection callback for the accelerator when the 
-	// text widget has focus.
-
-	shell.setSize(200, 200);
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet118.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet118.java
deleted file mode 100644
index 45650c8..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet118.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Cursor example snippet: create a color cursor from an image file
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet118 {
-
-public static void main (String [] args) {
-	final Display display = new Display();
-	final Shell shell = new Shell(display);
-	shell.setSize(150, 150);
-	final Cursor[] cursor = new Cursor[1];
-	Button button = new Button(shell, SWT.PUSH);
-	button.setText("Change cursor");
-	Point size = button.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-	button.setSize(size);
-	button.addListener(SWT.Selection, new Listener() {
-		public void handleEvent(Event e) {
-			FileDialog dialog = new FileDialog(shell);
-			dialog.setFilterExtensions(new String[] {"*.ico", "*.gif", "*.*"});
-			String name = dialog.open();
-			if (name == null) return;
-			ImageData image = new ImageData(name);
-			Cursor oldCursor = cursor[0];
-			cursor[0] = new Cursor(display, image, 0, 0);
-			shell.setCursor(cursor[0]);
-			if (oldCursor != null) oldCursor.dispose();
-		}
-	});
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	if (cursor[0] != null) cursor[0].dispose();
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet119.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet119.java
deleted file mode 100644
index 03f7939..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet119.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Cursor example snippet: create a color cursor from a source and a mask
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet119 {
-
-static byte[] srcData = {
-	(byte)0x11, (byte)0x11, (byte)0x11, (byte)0x00, (byte)0x00, (byte)0x11, (byte)0x11, (byte)0x11,
-	(byte)0x11, (byte)0x10, (byte)0x00, (byte)0x01, (byte)0x10, (byte)0x00, (byte)0x01, (byte)0x11, 
-	(byte)0x11, (byte)0x00, (byte)0x22, (byte)0x01, (byte)0x10, (byte)0x33, (byte)0x00, (byte)0x11,
-	(byte)0x10, (byte)0x02, (byte)0x22, (byte)0x01, (byte)0x10, (byte)0x33, (byte)0x30, (byte)0x01,
-	(byte)0x10, (byte)0x22, (byte)0x22, (byte)0x01, (byte)0x10, (byte)0x33, (byte)0x33, (byte)0x01,
-	(byte)0x10, (byte)0x22, (byte)0x22, (byte)0x01, (byte)0x10, (byte)0x33, (byte)0x33, (byte)0x01,
-	(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-	(byte)0x01, (byte)0x11, (byte)0x11, (byte)0x01, (byte)0x10, (byte)0x11, (byte)0x11, (byte)0x10,
-	(byte)0x01, (byte)0x11, (byte)0x11, (byte)0x01, (byte)0x10, (byte)0x11, (byte)0x11, (byte)0x10,
-	(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-	(byte)0x10, (byte)0x44, (byte)0x44, (byte)0x01, (byte)0x10, (byte)0x55, (byte)0x55, (byte)0x01,
-	(byte)0x10, (byte)0x44, (byte)0x44, (byte)0x01, (byte)0x10, (byte)0x55, (byte)0x55, (byte)0x01,
-	(byte)0x10, (byte)0x04, (byte)0x44, (byte)0x01, (byte)0x10, (byte)0x55, (byte)0x50, (byte)0x01,
-	(byte)0x11, (byte)0x00, (byte)0x44, (byte)0x01, (byte)0x10, (byte)0x55, (byte)0x00, (byte)0x11,
-	(byte)0x11, (byte)0x10, (byte)0x00, (byte)0x01, (byte)0x10, (byte)0x00, (byte)0x01, (byte)0x11,
-	(byte)0x11, (byte)0x11, (byte)0x11, (byte)0x00, (byte)0x00, (byte)0x11, (byte)0x11, (byte)0x11,
-};
-
-static byte[] mskData = {
-	(byte)0x03, (byte)0xc0, 
-	(byte)0x1f, (byte)0xf8,
-	(byte)0x3f, (byte)0xfc,
-	(byte)0x7f, (byte)0xfe,
-	(byte)0x7f, (byte)0xfe,
-	(byte)0x7f, (byte)0xfe,
-	(byte)0xff, (byte)0xff,
-	(byte)0xfe, (byte)0x7f,
-	(byte)0xfe, (byte)0x7f,
-	(byte)0xff, (byte)0xff,
-	(byte)0x7f, (byte)0xfe,
-	(byte)0x7f, (byte)0xfe,
-	(byte)0x7f, (byte)0xfe,
-	(byte)0x3f, (byte)0xfc,
-	(byte)0x1f, (byte)0xf8,
-	(byte)0x03, (byte)0xc0
-};
-
-public static void main (String [] args) {
-	Display display = new Display();
-	Color white = display.getSystemColor (SWT.COLOR_WHITE);
-	Color black = display.getSystemColor (SWT.COLOR_BLACK);
-	Color yellow = display.getSystemColor (SWT.COLOR_YELLOW);
-	Color red = display.getSystemColor (SWT.COLOR_RED);
-	Color green = display.getSystemColor (SWT.COLOR_GREEN);
-	Color blue = display.getSystemColor (SWT.COLOR_BLUE);
-	
-	//Create a source ImageData of depth 4
-	PaletteData palette = new PaletteData (new RGB[] {
-		black.getRGB(), white.getRGB(), yellow.getRGB(), 
-		red.getRGB(), blue.getRGB(), green.getRGB()});
-	ImageData sourceData = new ImageData (16, 16, 4, palette, 1, srcData);
-	
-	//Create a mask ImageData of depth 1 (monochrome)
-	palette = new PaletteData (new RGB [] {black.getRGB(), white.getRGB(),});
-	ImageData maskData = new ImageData (16, 16, 1, palette, 1, mskData);
-
-	//Set mask
-	sourceData.maskData = maskData.data;
-	sourceData.maskPad = maskData.scanlinePad;
-
-	//Create cursor
-	Cursor cursor = new Cursor(display, sourceData, 10, 10);
-
-	//Remove mask to draw them separately just to show what they look like
-	sourceData.maskData = null;
-	sourceData.maskPad = -1;
-
-	Shell shell = new Shell(display);
-	final Image source = new Image (display,sourceData);
-	final Image mask = new Image (display, maskData);
-	shell.addPaintListener(new PaintListener() {
-		public void paintControl(PaintEvent e) {
-			GC gc = e.gc;
-			int x = 10, y = 10;
-			String stringSource = "source: ";
-			String stringMask = "mask: ";
-			gc.drawString(stringSource, x, y);
-			gc.drawString(stringMask, x, y + 30);
-			x += Math.max(gc.stringExtent(stringSource).x, gc.stringExtent(stringMask).x);
-			gc.drawImage(source, x, y);
-			gc.drawImage(mask, x, y + 30);
-		}
-	});
-	shell.setSize(150, 150);
-	shell.open();
-	shell.setCursor(cursor);
-	
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	cursor.dispose();
-	source.dispose();
-	mask.dispose();
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet12.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet12.java
deleted file mode 100644
index fb41fa3..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet12.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Text example snippet: set the selection (start, end)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet12 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Text text = new Text (shell, SWT.BORDER | SWT.V_SCROLL);
-	text.setBounds (10, 10, 100, 100);
-	for (int i=0; i<16; i++) {
-		text.append ("Line " + i + "\n");
-	}
-	shell.open ();
-	text.setSelection (30, 38);
-	System.out.println (text.getCaretLocation ());
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-} 
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet120.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet120.java
deleted file mode 100644
index 12070cd..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet120.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Monitor example snippet: center a shell on the primary monitor
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet120 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setSize (200, 200);
-	Monitor primary = display.getPrimaryMonitor ();
-	Rectangle bounds = primary.getBounds ();
-	Rectangle rect = shell.getBounds ();
-	int x = bounds.x + (bounds.width - rect.width) / 2;
-	int y = bounds.y + (bounds.height - rect.height) / 2;
-	shell.setLocation (x, y);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet121.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet121.java
deleted file mode 100644
index 45016a0..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet121.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Text example snippet: prompt for a password (set the echo character)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet121 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setLayout (new FillLayout ());
-	Text text = new Text (shell, SWT.SINGLE | SWT.BORDER);
-	text.setEchoChar ('*');
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet122.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet122.java
deleted file mode 100644
index c6afbd7..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet122.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Clipboard example snippet: enable/disable menu depending on clipboard content availability
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.dnd.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet122 {
-	
-public static void main(String[] args) {
-	Display display = new Display();
-	final Clipboard cb = new Clipboard(display);
-	Shell shell = new Shell(display);
-	shell.setLayout(new FillLayout());
-	final Text text = new Text(shell, SWT.BORDER | SWT.MULTI | SWT.WRAP);
-	Menu menu = new Menu(shell, SWT.POP_UP);
-	final MenuItem copyItem = new MenuItem(menu, SWT.PUSH);
-	copyItem.setText("Copy");
-	copyItem.addSelectionListener(new SelectionAdapter(){
-		public void widgetSelected(SelectionEvent e) {
-			String selection = text.getSelectionText();
-			if (selection.length() == 0) return;
-			Object[] data = new Object[]{selection};
-			Transfer[] types = new Transfer[] {TextTransfer.getInstance()};
-			cb.setContents(data, types);
-		}
-	});
-	final MenuItem pasteItem = new MenuItem(menu, SWT.PUSH);
-	pasteItem.setText ("Paste");
-	pasteItem.addSelectionListener(new SelectionAdapter(){
-		public void widgetSelected(SelectionEvent e) {
-			String string = (String)(cb.getContents(TextTransfer.getInstance()));
-			if (string != null) text.insert(string);
-		}
-	});
-	menu.addMenuListener(new MenuAdapter() {
-		public void menuShown(MenuEvent e) {
-			// is copy valid?
-			String selection = text.getSelectionText();
-			copyItem.setEnabled(selection.length() > 0);
-			// is paste valid?
-			TransferData[] available = cb.getAvailableTypes();
-			boolean enabled = false;
-			for (int i = 0; i < available.length; i++) {
-				if (TextTransfer.getInstance().isSupportedType(available[i])) {
-					enabled = true;
-					break;
-				}
-			}
-			pasteItem.setEnabled(enabled);
-		}
-	});
-	text.setMenu (menu);
-
-	shell.setSize(200, 200);
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	cb.dispose();
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet123.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet123.java
deleted file mode 100644
index 59e459e..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet123.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * OLE and ActiveX example snippet: get events from IE control (win32 only)
- * NOTE: This snippet uses internal SWT packages that are
- * subject to change without notice.
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.ole.win32.*;
-import org.eclipse.swt.internal.ole.win32.*;
-
-public class Snippet123 {
-
-public static void main(String[] args) {
-	final Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setLayout(new FillLayout());
-	OleControlSite controlSite;
-	try {
-		OleFrame frame = new OleFrame(shell, SWT.NONE);
-		controlSite = new OleControlSite(frame, SWT.NONE, "Shell.Explorer");
-		controlSite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);
-	} catch (SWTError e) {
-		System.out.println("Unable to open activeX control");
-		return;
-	}
-	shell.open();
-	
-	// IWebBrowser
-	final OleAutomation webBrowser = new OleAutomation(controlSite);
-
-	// When a new document is loaded, access the document object for the new page.
-	int DownloadComplete = 104;
-	controlSite.addEventListener(DownloadComplete, new OleListener() {
-		public void handleEvent(OleEvent event) {
-			int[] htmlDocumentID = webBrowser.getIDsOfNames(new String[]{"Document"}); 
-			if (htmlDocumentID == null) return;
-			Variant pVarResult = webBrowser.getProperty(htmlDocumentID[0]);
-			if (pVarResult == null || pVarResult.getType() == 0) return;
-			//IHTMLDocument2
-			OleAutomation htmlDocument = pVarResult.getAutomation();
-
-			// Request to be notified of click, double click and key down events
-			EventDispatch myDispatch = new EventDispatch(EventDispatch.onclick);
-			IDispatch idispatch = new IDispatch(myDispatch.getAddress());
-			Variant dispatch = new Variant(idispatch);
-			htmlDocument.setProperty(EventDispatch.onclick, dispatch);
-
-			myDispatch = new EventDispatch(EventDispatch.ondblclick);
-			idispatch = new IDispatch(myDispatch.getAddress());
-			dispatch = new Variant(idispatch);
-			htmlDocument.setProperty(EventDispatch.ondblclick, dispatch);
-
-			myDispatch = new EventDispatch(EventDispatch.onkeydown);
-			idispatch = new IDispatch(myDispatch.getAddress());
-			dispatch = new Variant(idispatch);
-			htmlDocument.setProperty(EventDispatch.onkeydown, dispatch);
-			
-			//Remember to release OleAutomation Object
-			htmlDocument.dispose();
-		}
-	});
-	
-	// Navigate to a web site
-	int[] ids = webBrowser.getIDsOfNames(new String[]{"Navigate", "URL"}); 
-	Variant[] rgvarg = new Variant[] {new Variant("http://www.google.com")};
-	int[] rgdispidNamedArgs = new int[]{ids[1]};
-	webBrowser.invoke(ids[0], rgvarg, rgdispidNamedArgs);
-		
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	//Remember to release OleAutomation Object
-	webBrowser.dispose();
-	display.dispose();
-	
-}
-}
-// EventDispatch implements a simple IDispatch interface which will be called 
-// when the event is fired.
-class EventDispatch {
-	private COMObject iDispatch;
-	private int refCount = 0;
-	private int eventID;
-	
-	final static int onhelp = 0x8001177d;
-	final static int onclick = 0x80011778;
-	final static int ondblclick = 0x80011779;
-	final static int onkeyup = 0x80011776;
-	final static int onkeydown = 0x80011775;
-	final static int onkeypress = 0x80011777;
-	final static int onmouseup = 0x80011773;
-	final static int onmousedown = 0x80011772;
-	final static int onmousemove = 0x80011774;
-	final static int onmouseout = 0x80011771;
-	final static int onmouseover = 0x80011770;
-	final static int onreadystatechange = 0x80011789;
-	final static int onafterupdate = 0x80011786;
-	final static int onrowexit= 0x80011782;
-	final static int onrowenter = 0x80011783;
-	final static int ondragstart = 0x80011793;
-	final static int onselectstart = 0x80011795;
-
-	EventDispatch(int eventID) {
-		this.eventID = eventID;
-		createCOMInterfaces();
-	}
-	int getAddress() {
-		return iDispatch.getAddress();
-	}
-	private void createCOMInterfaces() {
-		iDispatch = new COMObject(new int[]{2, 0, 0, 1, 3, 4, 8}){
-			public int method0(int[] args) {return QueryInterface(args[0], args[1]);}
-			public int method1(int[] args) {return AddRef();}
-			public int method2(int[] args) {return Release();}
-			// method3 GetTypeInfoCount - not implemented
-			// method4 GetTypeInfo - not implemented
-			// method5 GetIDsOfNames - not implemented
-			public int method6(int[] args) {return Invoke(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);}
-		};
-	}
-	private void disposeCOMInterfaces() {
-		if (iDispatch != null)
-			iDispatch.dispose();
-		iDispatch = null;
-		
-	}
-	private int AddRef() {
-		refCount++;
-		return refCount;
-	}
-	private int Invoke(int dispIdMember, int riid, int lcid, int dwFlags, int pDispParams, int pVarResult, int pExcepInfo, int pArgErr)	{
-		switch (eventID) {
-			case onhelp: System.out.println("onhelp"); break;
-			case onclick: System.out.println("onclick"); break;
-			case ondblclick: System.out.println("ondblclick"); break;
-			case onkeyup: System.out.println("onkeyup"); break;
-			case onkeydown: System.out.println("onkeydown"); break;
-			case onkeypress: System.out.println("onkeypress"); break;
-			case onmouseup: System.out.println("onmouseup"); break;
-			case onmousedown: System.out.println("onmousedown"); break;
-			case onmousemove: System.out.println("onmousemove"); break;
-			case onmouseout: System.out.println("onmouseout"); break;
-			case onmouseover: System.out.println("onmouseover"); break;
-			case onreadystatechange: System.out.println("onreadystatechange"); break;
-			case onafterupdate: System.out.println("onafterupdate"); break;
-			case onrowexit: System.out.println("onrowexit"); break;
-			case onrowenter: System.out.println("onrowenter"); break;
-			case ondragstart: System.out.println("ondragstart"); break;
-			case onselectstart: System.out.println("onselectstart"); break;
-		}
-		return COM.S_OK;
-	}
-	private int QueryInterface(int riid, int ppvObject) {
-		if (riid == 0 || ppvObject == 0) return COM.E_INVALIDARG;
-		GUID guid = new GUID();
-		COM.MoveMemory(guid, riid, GUID.sizeof);
-	
-		if ( COM.IsEqualGUID(guid, COM.IIDIUnknown) || COM.IsEqualGUID(guid, COM.IIDIDispatch)) {
-			COM.MoveMemory(ppvObject, new int[] {iDispatch.getAddress()}, 4);
-			AddRef();
-			return COM.S_OK;
-		}
-		COM.MoveMemory(ppvObject, new int[] {0}, 4);
-		return COM.E_NOINTERFACE;
-	}
-	int Release() {
-		refCount--;
-		if (refCount == 0) {
-			disposeCOMInterfaces();
-		}
-		return refCount;
-	}
-}
-
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet124.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet124.java
deleted file mode 100644
index 6b01fbd..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet124.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * TableEditor example snippet: edit a cell in a table (in place, fancy)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.custom.*;
-
-public class Snippet124 {
-public static void main (String[] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setLayout (new FillLayout ());
-	final Table table = new Table(shell, SWT.BORDER | SWT.MULTI);
-	table.setLinesVisible (true);
-	for (int i=0; i<3; i++) {
-		TableColumn column = new TableColumn (table, SWT.NONE);
-		column.setWidth(100);
-	}
-	for (int i=0; i<3; i++) {
-		TableItem item = new TableItem (table, SWT.NONE);
-		item.setText(new String [] {"" + i, "" + i , "" + i});
-	}
-	final TableEditor editor = new TableEditor (table);
-	editor.horizontalAlignment = SWT.LEFT;
-	editor.grabHorizontal = true;
-	table.addListener (SWT.MouseDown, new Listener () {
-		public void handleEvent (Event event) {
-			Rectangle clientArea = table.getClientArea ();
-			Point pt = new Point (event.x, event.y);
-			int index = table.getTopIndex ();
-			while (index < table.getItemCount ()) {
-				boolean visible = false;
-				final TableItem item = table.getItem (index);
-				for (int i=0; i<table.getColumnCount (); i++) {
-					Rectangle rect = item.getBounds (i);
-					if (rect.contains (pt)) {
-						final int column = i;
-						final Text text = new Text (table, SWT.NONE);
-						Listener textListener = new Listener () {
-							public void handleEvent (final Event e) {
-								switch (e.type) {
-									case SWT.FocusOut:
-										item.setText (column, text.getText ());
-										text.dispose ();
-										break;
-									case SWT.Traverse:
-										switch (e.detail) {
-											case SWT.TRAVERSE_RETURN:
-												item.setText (column, text.getText ());
-												//FALL THROUGH
-											case SWT.TRAVERSE_ESCAPE:
-												text.dispose ();
-												e.doit = false;
-										}
-										break;
-								}
-							}
-						};
-						text.addListener (SWT.FocusOut, textListener);
-						text.addListener (SWT.Traverse, textListener);
-						editor.setEditor (text, item, i);
-						text.setText (item.getText (i));
-						text.selectAll ();
-						text.setFocus ();
-						return;
-					}
-					if (!visible && rect.intersects (clientArea)) {
-						visible = true;
-					}
-				}
-				if (!visible) return;
-				index++;
-			}
-		}
-	});
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet125.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet125.java
deleted file mode 100644
index 7e6f87a..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet125.java
+++ /dev/null
@@ -1,107 +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.snippets;
-
-/*
- * Tool Tips example snippet: create fake tool tips for items in a table
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet125 {
-
-public static void main (String[] args) {
-	final Display display = new Display ();
-	final Shell shell = new Shell (display);
-	shell.setLayout (new FillLayout ());
-	final Table table = new Table (shell, SWT.BORDER);
-	for (int i = 0; i < 20; i++) {
-		TableItem item = new TableItem (table, SWT.NONE);
-		item.setText ("item " + i);
-	}
-	// Disable native tooltip
-	table.setToolTipText ("");
-	
-	// Implement a "fake" tooltip
-	final Listener labelListener = new Listener () {
-		public void handleEvent (Event event) {
-			Label label = (Label)event.widget;
-			Shell shell = label.getShell ();
-			switch (event.type) {
-				case SWT.MouseDown:
-					Event e = new Event ();
-					e.item = (TableItem) label.getData ("_TABLEITEM");
-					// Assuming table is single select, set the selection as if
-					// the mouse down event went through to the table
-					table.setSelection (new TableItem [] {(TableItem) e.item});
-					table.notifyListeners (SWT.Selection, e);
-					// fall through
-				case SWT.MouseExit:
-					shell.dispose ();
-					break;
-			}
-		}
-	};
-	
-	Listener tableListener = new Listener () {
-		Shell tip = null;
-		Label label = null;
-		public void handleEvent (Event event) {
-			switch (event.type) {
-				case SWT.Dispose:
-				case SWT.KeyDown:
-				case SWT.MouseMove: {
-					if (tip == null) break;
-					tip.dispose ();
-					tip = null;
-					label = null;
-					break;
-				}
-				case SWT.MouseHover: {
-					TableItem item = table.getItem (new Point (event.x, event.y));
-					if (item != null) {
-						if (tip != null  && !tip.isDisposed ()) tip.dispose ();
-						tip = new Shell (shell, SWT.ON_TOP | SWT.TOOL);
-						tip.setLayout (new FillLayout ());
-						label = new Label (tip, SWT.NONE);
-						label.setForeground (display.getSystemColor (SWT.COLOR_INFO_FOREGROUND));
-						label.setBackground (display.getSystemColor (SWT.COLOR_INFO_BACKGROUND));
-						label.setData ("_TABLEITEM", item);
-						label.setText ("tooltip "+item.getText ());
-						label.addListener (SWT.MouseExit, labelListener);
-						label.addListener (SWT.MouseDown, labelListener);
-						Point size = tip.computeSize (SWT.DEFAULT, SWT.DEFAULT);
-						Rectangle rect = item.getBounds (0);
-						Point pt = table.toDisplay (rect.x, rect.y);
-						tip.setBounds (pt.x, pt.y, size.x, size.y);
-						tip.setVisible (true);
-					}
-				}
-			}
-		}
-	};
-	table.addListener (SWT.Dispose, tableListener);
-	table.addListener (SWT.KeyDown, tableListener);
-	table.addListener (SWT.MouseMove, tableListener);
-	table.addListener (SWT.MouseHover, tableListener);
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet126.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet126.java
deleted file mode 100644
index ec3bac5..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet126.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Table example snippet: place arbitrary controls in a table
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.custom.*;
-
-public class Snippet126 {
-public static void main(String[] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setLayout (new FillLayout ());
-	Table table = new Table (shell, SWT.BORDER | SWT.MULTI);
-	table.setLinesVisible (true);
-	for (int i=0; i<3; i++) {
-		TableColumn column = new TableColumn(table, SWT.NONE);
-		column.setWidth (100);
-	}
-	for (int i=0; i<12; i++) {
-		new TableItem (table, SWT.NONE);
-	}
-	TableItem [] items = table.getItems ();
-	for (int i=0; i<items.length; i++) {
-		TableEditor editor = new TableEditor (table);
-		CCombo combo = new CCombo (table, SWT.NONE);
-		combo.setText("CCombo");
-		combo.add("item 1");
-		combo.add("item 2");
-		editor.grabHorizontal = true;
-		editor.setEditor(combo, items[i], 0);
-		editor = new TableEditor (table);
-		Text text = new Text (table, SWT.NONE);
-		text.setText("Text");
-		editor.grabHorizontal = true;
-		editor.setEditor(text, items[i], 1);
-		editor = new TableEditor (table);
-		Button button = new Button (table, SWT.CHECK);
-		button.pack ();
-		editor.minimumWidth = button.getSize ().x;
-		editor.horizontalAlignment = SWT.LEFT;
-		editor.setEditor (button, items[i], 2);
-	}
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet127.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet127.java
deleted file mode 100644
index 7a55d81..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet127.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Control example snippet: prevent Tab from traversing out of a control
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet127 {
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Button button1 = new Button(shell, SWT.PUSH);
-	button1.setBounds(10,10,180,30);
-	button1.setText("no traverse");
-	button1.addTraverseListener(new TraverseListener () {
-		public void keyTraversed(TraverseEvent e) {
-			switch (e.detail) {
-				case SWT.TRAVERSE_TAB_NEXT:
-				case SWT.TRAVERSE_TAB_PREVIOUS: {
-					e.doit = false;
-				}
-			}
-		}
-	});
-	Button button2 = new Button (shell, SWT.PUSH);
-	button2.setBounds(200,10,180,30);
-	button2.setText("can traverse");
-	shell.pack ();
-	shell.open();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet128.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet128.java
deleted file mode 100644
index c8b605b..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet128.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Browser example snippet: bring up a browser
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.browser.*;
-
-public class Snippet128 {
-	public static void main(String [] args) {
-		Display display = new Display();
-		final Shell shell = new Shell(display);
-		GridLayout gridLayout = new GridLayout();
-		gridLayout.numColumns = 3;
-		shell.setLayout(gridLayout);
-		ToolBar toolbar = new ToolBar(shell, SWT.NONE);
-		ToolItem itemBack = new ToolItem(toolbar, SWT.PUSH);
-		itemBack.setText("Back");
-		ToolItem itemForward = new ToolItem(toolbar, SWT.PUSH);
-		itemForward.setText("Forward");
-		ToolItem itemStop = new ToolItem(toolbar, SWT.PUSH);
-		itemStop.setText("Stop");
-		ToolItem itemRefresh = new ToolItem(toolbar, SWT.PUSH);
-		itemRefresh.setText("Refresh");
-		ToolItem itemGo = new ToolItem(toolbar, SWT.PUSH);
-		itemGo.setText("Go");
-		
-		GridData data = new GridData();
-		data.horizontalSpan = 3;
-		toolbar.setLayoutData(data);
-
-		Label labelAddress = new Label(shell, SWT.NONE);
-		labelAddress.setText("Address");
-		
-		final Text location = new Text(shell, SWT.BORDER);
-		data = new GridData();
-		data.horizontalAlignment = GridData.FILL;
-		data.horizontalSpan = 2;
-		data.grabExcessHorizontalSpace = true;
-		location.setLayoutData(data);
-
-		final Browser browser = new Browser(shell, SWT.NONE);
-		data = new GridData();
-		data.horizontalAlignment = GridData.FILL;
-		data.verticalAlignment = GridData.FILL;
-		data.horizontalSpan = 3;
-		data.grabExcessHorizontalSpace = true;
-		data.grabExcessVerticalSpace = true;
-		browser.setLayoutData(data);
-
-		final Label status = new Label(shell, SWT.NONE);
-		data = new GridData(GridData.FILL_HORIZONTAL);
-		data.horizontalSpan = 2;
-		status.setLayoutData(data);
-
-		final ProgressBar progressBar = new ProgressBar(shell, SWT.NONE);
-		data = new GridData();
-		data.horizontalAlignment = GridData.END;
-		progressBar.setLayoutData(data);
-
-		/* event handling */
-		Listener listener = new Listener() {
-			public void handleEvent(Event event) {
-				ToolItem item = (ToolItem)event.widget;
-				String string = item.getText();
-				if (string.equals("Back")) browser.back(); 
-				else if (string.equals("Forward")) browser.forward();
-				else if (string.equals("Stop")) browser.stop();
-				else if (string.equals("Refresh")) browser.refresh();
-				else if (string.equals("Go")) browser.setUrl(location.getText());
-		   }
-		};
-		browser.addProgressListener(new ProgressListener() {
-			public void changed(ProgressEvent event) {
-					if (event.total == 0) return;                            
-					int ratio = event.current * 100 / event.total;
-					progressBar.setSelection(ratio);
-			}
-			public void completed(ProgressEvent event) {
-				progressBar.setSelection(0);
-			}
-		});
-		browser.addStatusTextListener(new StatusTextListener() {
-			public void changed(StatusTextEvent event) {
-				status.setText(event.text);	
-			}
-		});
-		browser.addLocationListener(new LocationListener() {
-			public void changed(LocationEvent event) {
-				if (event.top) location.setText(event.location);
-			}
-			public void changing(LocationEvent event) {
-			}
-		});
-		itemBack.addListener(SWT.Selection, listener);
-		itemForward.addListener(SWT.Selection, listener);
-		itemStop.addListener(SWT.Selection, listener);
-		itemRefresh.addListener(SWT.Selection, listener);
-		itemGo.addListener(SWT.Selection, listener);
-		location.addListener(SWT.DefaultSelection, new Listener() {
-			public void handleEvent(Event e) {
-				browser.setUrl(location.getText());
-			}
-		});
-		
-		shell.open();
-		browser.setUrl("http://eclipse.org");
-		
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		display.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet129.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet129.java
deleted file mode 100644
index 22d1ba0..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet129.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Table example snippet: color cells and rows in table
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet129 {
- 
-public static void main(String[] args) {
-	Display display = new Display();
-	Color red = display.getSystemColor(SWT.COLOR_RED);
-	Color blue = display.getSystemColor(SWT.COLOR_BLUE);
-	Color white = display.getSystemColor(SWT.COLOR_WHITE);
-	Color gray = display.getSystemColor(SWT.COLOR_GRAY);
-	Shell shell = new Shell(display);
-	shell.setLayout(new FillLayout());
-	Table table = new Table(shell, SWT.BORDER);
-	table.setBackground(gray);
-	TableColumn column1 = new TableColumn(table, SWT.NONE);
-	TableColumn column2 = new TableColumn(table, SWT.NONE);
-	TableColumn column3 = new TableColumn(table, SWT.NONE);
-	TableItem item = new TableItem(table, SWT.NONE);
-	item.setText(new String[] {"entire","row","red foreground"});
-	item.setForeground(red);
-	item = new TableItem(table, SWT.NONE);
-	item.setText(new String[] {"entire","row","red background"});
-	item.setBackground(red);
-	item = new TableItem(table, SWT.NONE);
-	item.setText(new String[] {"entire","row","white fore/red back"});
-	item.setForeground(white);
-	item.setBackground(red);
-	item = new TableItem(table, SWT.NONE);
-	item.setText(new String[] {"normal","blue foreground","red foreground"});
-	item.setForeground(1, blue);
-	item.setForeground(2, red);
-	item = new TableItem(table, SWT.NONE);
-	item.setText(new String[] {"normal","blue background","red background"});
-	item.setBackground(1, blue);
-	item.setBackground(2, red);
-	item = new TableItem(table, SWT.NONE);
-	item.setText(new String[] {"white fore/blue back","normal","white fore/red back"});
-	item.setForeground(0, white);
-	item.setBackground(0, blue);
-	item.setForeground(2, white);
-	item.setBackground(2, red);
-	
-	column1.pack();
-	column2.pack();
-	column3.pack();
-	
-	shell.pack();
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet13.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet13.java
deleted file mode 100644
index 59a8d09..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet13.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * GC example snippet: draw a thick line
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet13 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.open ();
-	GC gc = new GC (shell);
-	gc.setLineWidth (4);
-	gc.drawRectangle (20, 20, 100, 100);
-	gc.dispose ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet130.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet130.java
deleted file mode 100644
index 2c80cb8..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet130.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * BusyIndicator example snippet: display busy cursor during long running task
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.custom.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet130 {
-
-	public static void main(String[] args) {
-		final Display display = new Display();
-		final Shell shell = new Shell(display);
-		shell.setLayout(new GridLayout());
-		final Text text = new Text(shell, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL);
-		text.setLayoutData(new GridData(GridData.FILL_BOTH));
-		final int[] nextId = new int[1];
-		Button b = new Button(shell, SWT.PUSH);
-		b.setText("invoke long running job");
-		b.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				Runnable longJob = new Runnable() {
-					boolean done = false;
-					int id;
-					public void run() {
-						Thread thread = new Thread(new Runnable() {
-							public void run() {
-								id = nextId[0]++;
-								display.syncExec(new Runnable() {
-									public void run() {
-										if (text.isDisposed()) return;
-										text.append("\nStart long running task "+id);
-									}
-								});
-								for (int i = 0; i < 100000; i++) {
-									if (display.isDisposed()) return;
-									System.out.println("do task that takes a long time in a separate thread "+id);
-								}
-								if (display.isDisposed()) return;
-								display.syncExec(new Runnable() {
-									public void run() {
-										if (text.isDisposed()) return;
-										text.append("\nCompleted long running task "+id);
-									}
-								});
-								done = true;
-								display.wake();
-							}
-						});
-						thread.start();
-						while (!done && !shell.isDisposed()) {
-							if (!display.readAndDispatch())
-								display.sleep();
-						}
-					}
-				};
-				BusyIndicator.showWhile(display, longJob);
-			}
-		});
-		shell.setSize(250, 150);
-		shell.open();
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		display.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet131.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet131.java
deleted file mode 100644
index b0d0c05..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet131.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Menu example snippet: show a popup menu (wait for it to close)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet131 {
-public static void main (String [] args) {
-	final Display display = new Display ();
-	final Shell shell = new Shell (display);
-	shell.addListener (SWT.MenuDetect, new Listener () {
-		public void handleEvent (Event event) {
-			Menu menu = new Menu (shell, SWT.POP_UP);
-			MenuItem item = new MenuItem (menu, SWT.PUSH);
-			item.setText ("Menu Item");
-			item.addListener (SWT.Selection, new Listener () {
-				public void handleEvent (Event e) {
-					System.out.println ("Item Selected");
-				}
-			});
-			menu.setLocation (event.x, event.y);
-			menu.setVisible (true);
-			while (!menu.isDisposed () && menu.isVisible ()) {
-				if (!display.readAndDispatch ()) display.sleep ();
-			}
-			menu.dispose ();
-		}
-	});
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet132.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet132.java
deleted file mode 100644
index 3da81a3..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet132.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-  
-/*
- * Printing example snippet: print "Hello World!" in black, outlined in red, to default printer
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.printing.*;
-
-public class Snippet132 {
-
-public static void main (String [] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.open ();
-	PrinterData data = Printer.getDefaultPrinterData();
-	if (data == null) {
-		System.out.println("Warning: No default printer.");
-		return;
-	}
-	Printer printer = new Printer(data);
-	if (printer.startJob("SWT Printing Snippet")) {
-		Color black = printer.getSystemColor(SWT.COLOR_BLACK);
-		Color white = printer.getSystemColor(SWT.COLOR_WHITE);
-		Color red = printer.getSystemColor(SWT.COLOR_RED);
-		Rectangle trim = printer.computeTrim(0, 0, 0, 0);
-		Point dpi = printer.getDPI();
-		int leftMargin = dpi.x + trim.x; // one inch from left side of paper
-		int topMargin = dpi.y / 2 + trim.y; // one-half inch from top edge of paper
-		GC gc = new GC(printer);
-		Font font = gc.getFont(); // example just uses printer's default font
-		if (printer.startPage()) {
-			gc.setBackground(white);
-			gc.setForeground(black);
-			String testString = "Hello World!";
-			Point extent = gc.stringExtent(testString);
-			gc.drawString(testString, leftMargin, topMargin + font.getFontData()[0].getHeight());
-			gc.setForeground(red);
-			gc.drawRectangle(leftMargin, topMargin, extent.x, extent.y);
-			printer.endPage();
-		}
-		gc.dispose();
-		printer.endJob();
-		}
-	printer.dispose();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet133.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet133.java
deleted file mode 100644
index 2fc7e35..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet133.java
+++ /dev/null
@@ -1,324 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-  
-/*
- * Printing example snippet: print text to printer, with word wrap and pagination
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import java.io.*;
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.printing.*;
-
-public class Snippet133 {
-	Display display;
-	Shell shell;
-	Text text;
-	Font font;
-	Color foregroundColor, backgroundColor;
-	
-	Printer printer;
-	GC gc;
-	Font printerFont;
-	Color printerForegroundColor, printerBackgroundColor;
-
-	int lineHeight = 0;
-	int tabWidth = 0;
-	int leftMargin, rightMargin, topMargin, bottomMargin;
-	int x, y;
-	int index, end;
-	String textToPrint;
-	String tabs;
-	StringBuffer wordBuffer;
-
-	public static void main(String[] args) {
-		new Snippet133().open();
-	}
-	
-	void open() {
-		display = new Display();
-		font = new Font(display, "Courier", 10, SWT.NORMAL);
-		foregroundColor = display.getSystemColor(SWT.COLOR_BLACK);
-		backgroundColor = display.getSystemColor(SWT.COLOR_WHITE);
-		shell = new Shell(display);
-		shell.setLayout(new FillLayout());
-		shell.setText("Print Text");
-		shell.setMaximized(true);
-		text = new Text(shell, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL);
-		text.setFont(font);
-		text.setForeground(foregroundColor);
-		text.setBackground(backgroundColor);
-		
-		Menu menuBar = new Menu(shell, SWT.BAR);
-		shell.setMenuBar(menuBar);
-		MenuItem item = new MenuItem(menuBar, SWT.CASCADE);
-		item.setText("&File");
-		Menu fileMenu = new Menu(shell, SWT.DROP_DOWN);
-		item.setMenu(fileMenu);
-		item = new MenuItem(fileMenu, SWT.PUSH);
-		item.setText("&Open...");
-		item.setAccelerator(SWT.CTRL + 'O');
-		item.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent event) {
-				menuOpen();
-			}
-		});
-		item = new MenuItem(fileMenu, SWT.PUSH);
-		item.setText("Font...");
-		item.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent event) {
-				menuFont();
-			}
-		});
-		item = new MenuItem(fileMenu, SWT.PUSH);
-		item.setText("Foreground Color...");
-		item.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent event) {
-				menuForegroundColor();
-			}
-		});
-		item = new MenuItem(fileMenu, SWT.PUSH);
-		item.setText("Background Color...");
-		item.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent event) {
-				menuBackgroundColor();
-			}
-		});
-		item = new MenuItem(fileMenu, SWT.PUSH);
-		item.setText("&Print...");
-		item.setAccelerator(SWT.CTRL + 'P');
-		item.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent event) {
-				menuPrint();
-			}
-		});
-		new MenuItem(fileMenu, SWT.SEPARATOR);
-		item = new MenuItem(fileMenu, SWT.PUSH);
-		item.setText("E&xit");
-		item.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent event) {
-				System.exit(0);
-			}
-		});
-		
-		shell.pack();
-		shell.open();
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch()) display.sleep();
-		}
-		if (font != null) font.dispose();
-		if (foregroundColor != null) foregroundColor.dispose();
-		if (backgroundColor != null) backgroundColor.dispose();
-		display.dispose();
-	}
-		
-	void menuOpen() {
-		final String textString;
-		FileDialog dialog = new FileDialog(shell, SWT.OPEN);
-		dialog.setFilterExtensions(new String[] {"*.java", "*.*"});
-		String name = dialog.open();
-		if ((name == null) || (name.length() == 0)) return;
-	
-		try {
-			File file = new File(name);
-			FileInputStream stream= new FileInputStream(file.getPath());
-			try {
-				Reader in = new BufferedReader(new InputStreamReader(stream));
-				char[] readBuffer= new char[2048];
-				StringBuffer buffer= new StringBuffer((int) file.length());
-				int n;
-				while ((n = in.read(readBuffer)) > 0) {
-					buffer.append(readBuffer, 0, n);
-				}
-				textString = buffer.toString();
-				stream.close();
-			} catch (IOException e) {
-				MessageBox box = new MessageBox(shell, SWT.ICON_ERROR);
-				box.setMessage("Error reading file:\n" + name);
-				box.open();
-				return;
-			}
-		} catch (FileNotFoundException e) {
-			MessageBox box = new MessageBox(shell, SWT.ICON_ERROR);
-			box.setMessage("File not found:\n" + name);
-			box.open();
-			return;
-		}	
-		text.setText(textString);
-	}
-
-	void menuFont() {
-		FontDialog fontDialog = new FontDialog(shell);
-		fontDialog.setFontList(font.getFontData());
-		FontData fontData = fontDialog.open();
-		if (fontData != null) {
-			if (font != null) font.dispose();
-			font = new Font(display, fontData);
-			text.setFont(font);
-		}
-	}
-
-	void menuForegroundColor() {
-		ColorDialog colorDialog = new ColorDialog(shell);
-		colorDialog.setRGB(foregroundColor.getRGB());
-		RGB rgb = colorDialog.open();
-		if (rgb != null) {
-			if (foregroundColor != null) foregroundColor.dispose();
-			foregroundColor = new Color(display, rgb);
-			text.setForeground(foregroundColor);
-		}
-	}
-
-	void menuBackgroundColor() {
-		ColorDialog colorDialog = new ColorDialog(shell);
-		colorDialog.setRGB(backgroundColor.getRGB());
-		RGB rgb = colorDialog.open();
-		if (rgb != null) {
-			if (backgroundColor != null) backgroundColor.dispose();
-			backgroundColor = new Color(display, rgb);
-			text.setBackground(backgroundColor);
-		}
-	}
-
-	void menuPrint() {
-		PrintDialog dialog = new PrintDialog(shell, SWT.NONE);
-		PrinterData data = dialog.open();
-		if (data == null) return;
-		if (data.printToFile) {
-			data.fileName = "print.out"; // you probably want to ask the user for a filename
-		}
-		
-		/* Get the text to print from the Text widget (you could get it from anywhere, i.e. your java model) */
-		textToPrint = text.getText();
-
-		/* Do the printing in a background thread so that spooling does not freeze the UI. */
-		printer = new Printer(data);
-		Thread printingThread = new Thread("Printing") {
-			public void run() {
-				print(printer);
-				printer.dispose();
-			}
-		};
-		printingThread.start();
-	}
-	
-	void print(Printer printer) {
-		if (printer.startJob("Text")) {   // the string is the job name - shows up in the printer's job list
-			Rectangle clientArea = printer.getClientArea();
-			Rectangle trim = printer.computeTrim(0, 0, 0, 0);
-			Point dpi = printer.getDPI();
-			leftMargin = dpi.x + trim.x; // one inch from left side of paper
-			rightMargin = clientArea.width - dpi.x + trim.x + trim.width; // one inch from right side of paper
-			topMargin = dpi.y + trim.y; // one inch from top edge of paper
-			bottomMargin = clientArea.height - dpi.y + trim.y + trim.height; // one inch from bottom edge of paper
-			
-			/* Create a buffer for computing tab width. */
-			int tabSize = 4; // is tab width a user setting in your UI?
-			StringBuffer tabBuffer = new StringBuffer(tabSize);
-			for (int i = 0; i < tabSize; i++) tabBuffer.append(' ');
-			tabs = tabBuffer.toString();
-
-			/* Create printer GC, and create and set the printer font & foreground color. */
-			gc = new GC(printer);
-			
-			FontData fontData = font.getFontData()[0];
-			printerFont = new Font(printer, fontData.getName(), fontData.getHeight(), fontData.getStyle());
-			gc.setFont(printerFont);
-			tabWidth = gc.stringExtent(tabs).x;
-			lineHeight = gc.getFontMetrics().getHeight();
-			
-			RGB rgb = foregroundColor.getRGB();
-			printerForegroundColor = new Color(printer, rgb);
-			gc.setForeground(printerForegroundColor);
-		
-			rgb = backgroundColor.getRGB();
-			printerBackgroundColor = new Color(printer, rgb);
-			gc.setBackground(printerBackgroundColor);
-		
-			/* Print text to current gc using word wrap */
-			printText();
-			printer.endJob();
-
-			/* Cleanup graphics resources used in printing */
-			printerFont.dispose();
-			printerForegroundColor.dispose();
-			printerBackgroundColor.dispose();
-			gc.dispose();
-		}
-	}
-	
-	void printText() {
-		printer.startPage();
-		wordBuffer = new StringBuffer();
-		x = leftMargin;
-		y = topMargin;
-		index = 0;
-		end = textToPrint.length();
-		while (index < end) {
-			char c = textToPrint.charAt(index);
-			index++;
-			if (c != 0) {
-				if (c == 0x0a || c == 0x0d) {
-					if (c == 0x0d && index < end && textToPrint.charAt(index) == 0x0a) {
-						index++; // if this is cr-lf, skip the lf
-					}
-					printWordBuffer();
-					newline();
-				} else {
-					if (c != '\t') {
-						wordBuffer.append(c);
-					}
-					if (Character.isWhitespace(c)) {
-						printWordBuffer();
-						if (c == '\t') {
-							x += tabWidth;
-						}
-					}
-				}
-			}
-		}
-		if (y + lineHeight <= bottomMargin) {
-			printer.endPage();
-		}
-	}
-
-	void printWordBuffer() {
-		if (wordBuffer.length() > 0) {
-			String word = wordBuffer.toString();
-			int wordWidth = gc.stringExtent(word).x;
-			if (x + wordWidth > rightMargin) {
-				/* word doesn't fit on current line, so wrap */
-				newline();
-			}
-			gc.drawString(word, x, y, false);
-			x += wordWidth;
-			wordBuffer = new StringBuffer();
-		}
-	}
-
-	void newline() {
-		x = leftMargin;
-		y += lineHeight;
-		if (y + lineHeight > bottomMargin) {
-			printer.endPage();
-			if (index + 1 < end) {
-				y = topMargin;
-				printer.startPage();
-			}
-		}
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet134.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet134.java
deleted file mode 100644
index c8d819a..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet134.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Shell example snippet: create a non-rectangular window
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet134 {
-
-static int[] circle(int r, int offsetX, int offsetY) {
-	int[] polygon = new int[8 * r + 4];
-	//x^2 + y^2 = r^2
-	for (int i = 0; i < 2 * r + 1; i++) {
-		int x = i - r;
-		int y = (int)Math.sqrt(r*r - x*x);
-		polygon[2*i] = offsetX + x;
-		polygon[2*i+1] = offsetY + y;
-		polygon[8*r - 2*i - 2] = offsetX + x;
-		polygon[8*r - 2*i - 1] = offsetY - y;
-	}
-	return polygon;
-}
-
-public static void main(String[] args) {
-	final Display display = new Display();
-	//Shell must be created with style SWT.NO_TRIM
-	final Shell shell = new Shell(display, SWT.NO_TRIM | SWT.ON_TOP);
-	shell.setBackground(display.getSystemColor(SWT.COLOR_RED));
-	//define a region that looks like a key hole
-	Region region = new Region();
-	region.add(circle(67, 67, 67));
-	region.subtract(circle(20, 67, 50));
-	region.subtract(new int[]{67, 50, 55, 105, 79, 105});
-	//define the shape of the shell using setRegion
-	shell.setRegion(region);
-	Rectangle size = region.getBounds();
-	shell.setSize(size.width, size.height);
-	//add ability to move shell around
-	Listener l = new Listener() {
-		Point origin;
-		public void handleEvent(Event e) {
-			switch (e.type) {
-				case SWT.MouseDown:
-					origin = new Point(e.x, e.y);
-					break;
-				case SWT.MouseUp:
-					origin = null;
-					break;
-				case SWT.MouseMove:
-					if (origin != null) {
-						Point p = display.map(shell, null, e.x, e.y);
-						shell.setLocation(p.x - origin.x, p.y - origin.y);
-					}
-					break;
-			}
-		}
-	};
-	shell.addListener(SWT.MouseDown, l);
-	shell.addListener(SWT.MouseUp, l);
-	shell.addListener(SWT.MouseMove, l);
-	//add ability to close shell
-	Button b = new Button(shell, SWT.PUSH);
-	b.setBackground(shell.getBackground());
-	b.setText("close");
-	b.pack();
-	b.setLocation(10, 68);
-	b.addListener(SWT.Selection, new Listener() {
-		public void handleEvent(Event e) {
-			shell.close();
-		}
-	});
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	region.dispose();
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet135.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet135.java
deleted file mode 100644
index b28f714..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet135.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * example snippet: embed Swing/AWT in SWT
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import java.awt.EventQueue;
-import java.io.*;
-import java.util.*;
-import javax.swing.*;
-import javax.swing.table.*;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.awt.SWT_AWT;
-
-public class Snippet135 {
-
-	static class FileTableModel extends AbstractTableModel {		
-		File[] files;        
-		String[] columnsName = {"Name", "Size", "Date Modified"};
-		
-		public FileTableModel (File[] files) {
-			this.files = files;
-		}
-		public int getColumnCount () {
-			return columnsName.length;
-		}
-		public Class getColumnClass (int col) {
-			if (col == 1) return Long.class;
-			if (col == 2) return Date.class;
-			return String.class;
-		}
-		public int getRowCount () {
-			return files == null ? 0 : files.length;
-		}
-		public Object getValueAt (int row, int col) {
-			if (col == 0) return files[row].getName();
-			if (col == 1) return new Long(files[row].length());
-			if (col == 2) return new Date(files[row].lastModified());
-			return "";
-		}
-		public String getColumnName (int col) {
-			return columnsName[col];
-		}
-	}
-
-	public static void main(String[] args) {
-		final Display display = new Display();
-		final Shell shell = new Shell(display);
-		shell.setText("SWT and Swing/AWT Example");
-
-		Listener exitListener = new Listener() {
-			public void handleEvent(Event e) {
-				MessageBox dialog = new MessageBox(shell, SWT.OK | SWT.CANCEL | SWT.ICON_QUESTION);
-				dialog.setText("Question");
-				dialog.setMessage("Exit?");
-				if (e.type == SWT.Close) e.doit = false;
-				if (dialog.open() != SWT.OK) return;
-				shell.dispose();
-			}
-		};	
-		Listener aboutListener = new Listener() {
-			public void handleEvent(Event e) {
-				final Shell s = new Shell(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-				s.setText("About");
-				GridLayout layout = new GridLayout(1, false);
-				layout.verticalSpacing = 20;
-				layout.marginHeight = layout.marginWidth = 10;
-				s.setLayout(layout);
-				Label label = new Label(s, SWT.NONE);
-				label.setText("SWT and AWT Example.");
-				Button button = new Button(s, SWT.PUSH);
-				button.setText("OK");
-				GridData data = new GridData();
-				data.horizontalAlignment = GridData.CENTER;
-				button.setLayoutData(data);
-				button.addListener(SWT.Selection, new Listener() {
-					public void handleEvent(Event event) {
-						s.dispose();
-					}
-				});
-				s.pack();
-				Rectangle parentBounds = shell.getBounds();
-				Rectangle bounds = s.getBounds();
-				int x = parentBounds.x + (parentBounds.width - bounds.width) / 2;
-				int y = parentBounds.y + (parentBounds.height - bounds.height) / 2;
-				s.setLocation(x, y);
-				s.open();
-				while (!s.isDisposed()) {
-					if (!display.readAndDispatch()) display.sleep();
-				}
-			}
-		};
-		shell.addListener(SWT.Close, exitListener);
-		Menu mb = new Menu(shell, SWT.BAR);
-		MenuItem fileItem = new MenuItem(mb, SWT.CASCADE);
-		fileItem.setText("&File");
-		Menu fileMenu = new Menu(shell, SWT.DROP_DOWN);
-		fileItem.setMenu(fileMenu);
-		MenuItem exitItem = new MenuItem(fileMenu, SWT.PUSH);
-		exitItem.setText("&Exit\tCtrl+X");
-		exitItem.setAccelerator(SWT.CONTROL + 'X');
-		exitItem.addListener(SWT.Selection, exitListener);
-		MenuItem aboutItem = new MenuItem(fileMenu, SWT.PUSH);
-		aboutItem.setText("&About\tCtrl+A");
-		aboutItem.setAccelerator(SWT.CONTROL + 'A');
-		aboutItem.addListener(SWT.Selection, aboutListener);
-		shell.setMenuBar(mb);
-
-		RGB color = shell.getBackground().getRGB();
-		Label separator1 = new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);
-		Label locationLb = new Label(shell, SWT.NONE);
-		locationLb.setText("Location:");
-		Composite locationComp = new Composite(shell, SWT.EMBEDDED);
-		ToolBar toolBar = new ToolBar(shell, SWT.FLAT);
-		ToolItem exitToolItem = new ToolItem(toolBar, SWT.PUSH);
-		exitToolItem.setText("&Exit");
-		exitToolItem.addListener(SWT.Selection, exitListener);
-		ToolItem aboutToolItem = new ToolItem(toolBar, SWT.PUSH);
-		aboutToolItem.setText("&About");
-		aboutToolItem.addListener(SWT.Selection, aboutListener);
-		Label separator2 = new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);
-		final Composite comp = new Composite(shell, SWT.NONE);
-		final Tree fileTree = new Tree(comp, SWT.SINGLE | SWT.BORDER);
-		Sash sash = new Sash(comp, SWT.VERTICAL);
-		Composite tableComp = new Composite(comp, SWT.EMBEDDED);
-		Label separator3 = new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);
-		Composite statusComp = new Composite(shell, SWT.EMBEDDED);
-
-		java.awt.Frame locationFrame = SWT_AWT.new_Frame(locationComp);
-		final java.awt.TextField locationText = new java.awt.TextField();
-		locationFrame.add(locationText);
-
-		java.awt.Frame fileTableFrame = SWT_AWT.new_Frame(tableComp);
-		java.awt.Panel panel = new java.awt.Panel(new java.awt.BorderLayout());
-		fileTableFrame.add(panel);
-		final JTable fileTable = new JTable(new FileTableModel(null));
-		fileTable.setDoubleBuffered(true);
-		fileTable.setShowGrid(false);
-		fileTable.createDefaultColumnsFromModel();
-		JScrollPane scrollPane = new JScrollPane(fileTable);
-		panel.add(scrollPane);
-
-		java.awt.Frame statusFrame = SWT_AWT.new_Frame(statusComp);
-		statusFrame.setBackground(new java.awt.Color(color.red, color.green, color.blue));
-		final java.awt.Label statusLabel = new java.awt.Label();
-		statusFrame.add(statusLabel);
-		statusLabel.setText("Select a file");
-
-		sash.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				if (e.detail == SWT.DRAG) return;
-				GridData data = (GridData)fileTree.getLayoutData();
-				Rectangle trim = fileTree.computeTrim(0, 0, 0, 0);
-				data.widthHint = e.x - trim.width;
-				comp.layout();
-			}
-		});
-
-		File[] roots = File.listRoots();
-		for (int i = 0; i < roots.length; i++) {
-			File file = roots[i];
-			TreeItem treeItem = new TreeItem(fileTree, SWT.NONE);
-			treeItem.setText(file.getAbsolutePath());
-			treeItem.setData(file);
-			new TreeItem(treeItem, SWT.NONE);
-		}
-		fileTree.addListener(SWT.Expand, new Listener() {
-			public void handleEvent(Event e) {
-				TreeItem item = (TreeItem)e.item;
-				if (item == null) return;
-				if (item.getItemCount() == 1) {
-					TreeItem firstItem = item.getItems()[0];
-					if (firstItem.getData() != null) return;
-					firstItem.dispose();
-				} else {
-					return;
-				}
-				File root = (File)item.getData();
-				File[] files = root.listFiles();
-				if (files == null) return;
-				for (int i = 0; i < files.length; i++) {
-					File file = files[i];
-					if (file.isDirectory()) {
-						TreeItem treeItem = new TreeItem(item, SWT.NONE);
-						treeItem.setText(file.getName());
-						treeItem.setData(file);
-						new TreeItem(treeItem, SWT.NONE);
-					}
-				}
-			}
-		});
-		fileTree.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				TreeItem item = (TreeItem)e.item;
-				if (item == null) return;
-				final File root = (File)item.getData();
-				EventQueue.invokeLater(new Runnable() {
-					public void run() {
-						statusLabel.setText(root.getAbsolutePath());
-						locationText.setText(root.getAbsolutePath());
-						fileTable.setModel(new FileTableModel(root.listFiles()));
-					}
-				});
-			}
-		});
-		
-		GridLayout layout = new GridLayout(4, false);
-		layout.marginWidth = layout.marginHeight = 0;
-		layout.horizontalSpacing = layout.verticalSpacing = 1;
-		shell.setLayout(layout);
-		GridData data;		
-		data = new GridData(GridData.FILL_HORIZONTAL);
-		data.horizontalSpan = 4;
-		separator1.setLayoutData(data);
-		data = new GridData();
-		data.horizontalSpan = 1;
-		data.horizontalIndent = 10;
-		locationLb.setLayoutData(data);
-		data = new GridData(GridData.FILL_HORIZONTAL);
-		data.horizontalSpan = 2;
-		data.heightHint = locationText.getPreferredSize().height;
-		locationComp.setLayoutData(data);
-		data = new GridData(GridData.FILL_HORIZONTAL);
-		data.horizontalSpan = 1;
-		toolBar.setLayoutData(data);
-		data = new GridData(GridData.FILL_HORIZONTAL);
-		data.horizontalSpan = 4;
-		separator2.setLayoutData(data);
-		data = new GridData(GridData.FILL_BOTH);
-		data.horizontalSpan = 4;
-		comp.setLayoutData(data);
-		data = new GridData(GridData.FILL_HORIZONTAL);
-		data.horizontalSpan = 4;
-		separator3.setLayoutData(data);
-		data = new GridData(GridData.FILL_HORIZONTAL);
-		data.horizontalSpan = 4;
-		data.heightHint = statusLabel.getPreferredSize().height;
-		statusComp.setLayoutData(data);
-		
-		layout = new GridLayout(3, false);
-		layout.marginWidth = layout.marginHeight = 0;
-		layout.horizontalSpacing = layout.verticalSpacing = 1;
-		comp.setLayout(layout);			
-		data = new GridData(GridData.FILL_VERTICAL);
-		data.widthHint = 200;
-		fileTree.setLayoutData(data);		
-		data = new GridData(GridData.FILL_VERTICAL);
-		sash.setLayoutData(data);		
-		data = new GridData(GridData.FILL_BOTH);
-		tableComp.setLayoutData(data);
-
-		shell.open();
-		while(!shell.isDisposed()) {
-			if (!display.readAndDispatch()) display.sleep();
-		}
-		display.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet136.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet136.java
deleted file mode 100644
index 7f6fcef..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet136.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Browser example snippet: render HTML from memory
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.browser.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet136 {
-	public static void main(String [] args) {
-		String html = "<HTML><HEAD><TITLE>HTML Test</TITLE></HEAD><BODY>";
-		for (int i = 0; i < 100; i++) html += "<P>This is line "+i+"</P>";
-		html += "</BODY></HTML>";
-
-		Display display = new Display();
-		Shell shell = new Shell(display);
-		shell.setLayout(new FillLayout());
-		Browser browser = new Browser(shell, SWT.NONE);
-		browser.setText(html);
-		shell.open();
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		display.dispose();
-	}
-}
-
-
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet137.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet137.java
deleted file mode 100644
index 2c599d9..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet137.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Browser example snippet: render HTML that includes relative links from memory
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.browser.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet137 {
-
-public static void main(String [] args) {
-	/* Relative links: use the HTML base tag */
-	String html = "<html><head>"+
-		"<base href=\"http://www.eclipse.org/swt/\" >"+
-		"<title>HTML Test</title></head>"+
-		"<body><a href=\"faq.php\">local link</a></body></html>";
-
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setLayout(new FillLayout());
-	Browser browser = new Browser(shell, SWT.NONE);
-	browser.setText(html);
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet138.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet138.java
deleted file mode 100644
index 72c8425..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet138.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * example snippet: set icons with different resolutions
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet138 {
-	public static void main(String[] args) {
-		Display display = new Display();
-		
-		Image small = new Image(display, 16, 16);
-		GC gc = new GC(small);
-		gc.setBackground(display.getSystemColor(SWT.COLOR_RED));
-		gc.fillArc(0, 0, 16, 16, 45, 270);
-		gc.dispose();
-		
-		Image large = new Image(display, 32, 32);
-		gc = new GC(large);
-		gc.setBackground(display.getSystemColor(SWT.COLOR_RED));
-		gc.fillArc(0, 0, 32, 32, 45, 270);
-		gc.dispose();
-		
-		/* Provide different resolutions for icons to get
-		 * high quality rendering wherever the OS needs 
-		 * large icons. For example, the ALT+TAB window 
-		 * on certain systems uses a larger icon.
-		 */
-		Shell shell = new Shell(display);
-		shell.setText("Small and Large icons");
-		shell.setImages(new Image[] {small, large});
-
-		/* No large icon: the OS will scale up the
-		 * small icon when it needs a large one.
-		 */
-		Shell shell2 = new Shell(display);
-		shell2.setText("Small icon");
-		shell2.setImage(small);
-		
-		shell.open();
-		shell2.open();
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		small.dispose();
-		large.dispose();
-		display.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet139.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet139.java
deleted file mode 100644
index c351f75..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet139.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * This snippet was adapted from org.eclipse.draw2d.ImageUtilities in 
- * http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.draw2d/?cvsroot=Tools_Project
- * by Pratik Shah.
- *
- * example snippet: rotate and flip an image
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet139 {	
-
-static ImageData rotate(ImageData srcData, int direction) {
-	int bytesPerPixel = srcData.bytesPerLine / srcData.width;
-	int destBytesPerLine = (direction == SWT.DOWN)? srcData.width * bytesPerPixel : srcData.height * bytesPerPixel;
-	byte[] newData = new byte[(direction == SWT.DOWN)? srcData.height * destBytesPerLine : srcData.width * destBytesPerLine];
-	int width = 0, height = 0;
-	for (int srcY = 0; srcY < srcData.height; srcY++) {
-		for (int srcX = 0; srcX < srcData.width; srcX++) {
-			int destX = 0, destY = 0, destIndex = 0, srcIndex = 0;
-			switch (direction){
-				case SWT.LEFT: // left 90 degrees
-					destX = srcY;
-					destY = srcData.width - srcX - 1;
-					width = srcData.height;
-					height = srcData.width; 
-					break;
-				case SWT.RIGHT: // right 90 degrees
-					destX = srcData.height - srcY - 1;
-					destY = srcX;
-					width = srcData.height;
-					height = srcData.width; 
-					break;
-				case SWT.DOWN: // 180 degrees
-					destX = srcData.width - srcX - 1;
-					destY = srcData.height - srcY - 1;
-					width = srcData.width;
-					height = srcData.height; 
-					break;
-			}
-			destIndex = (destY * destBytesPerLine) + (destX * bytesPerPixel);
-			srcIndex = (srcY * srcData.bytesPerLine) + (srcX * bytesPerPixel);
-			System.arraycopy(srcData.data, srcIndex, newData, destIndex, bytesPerPixel);
-		}
-	}
-	// destBytesPerLine is used as scanlinePad to ensure that no padding is required
-	return new ImageData(width, height, srcData.depth, srcData.palette, destBytesPerLine, newData);
-}
-static ImageData flip(ImageData srcData, boolean vertical) {
-	int bytesPerPixel = srcData.bytesPerLine / srcData.width;
-	int destBytesPerLine = srcData.width * bytesPerPixel;
-	byte[] newData = new byte[srcData.data.length];
-	for (int srcY = 0; srcY < srcData.height; srcY++) {
-		for (int srcX = 0; srcX < srcData.width; srcX++) {
-			int destX = 0, destY = 0, destIndex = 0, srcIndex = 0;
-			if (vertical){
-				destX = srcX;
-				destY = srcData.height - srcY - 1;
-			} else {
-				destX = srcData.width - srcX - 1;
-				destY = srcY; 
-			}
-			destIndex = (destY * destBytesPerLine) + (destX * bytesPerPixel);
-			srcIndex = (srcY * srcData.bytesPerLine) + (srcX * bytesPerPixel);
-			System.arraycopy(srcData.data, srcIndex, newData, destIndex, bytesPerPixel);
-		}
-	}
-	// destBytesPerLine is used as scanlinePad to ensure that no padding is required
-	return new ImageData(srcData.width, srcData.height, srcData.depth, srcData.palette, destBytesPerLine, newData);
-}
-
-public static void main(String[] args) {
-	Display display = new Display();
-	
-	// create an image with the word "hello" on it
-	final Image image0 = new Image(display, 50, 30);
-	GC gc = new GC(image0);
-	gc.setBackground(display.getSystemColor(SWT.COLOR_RED));
-	gc.fillRectangle(image0.getBounds());
-	gc.drawString("hello",	5, 5, true);
-	gc.dispose();
-	
-	ImageData data = image0.getImageData();
-	// rotate and flip this image
-	final Image image1 = new Image(display, rotate(data, SWT.LEFT));
-	final Image image2 = new Image(display, rotate(data, SWT.RIGHT));
-	final Image image3 = new Image(display, rotate(data, SWT.DOWN));
-	final Image image4 = new Image(display, flip(data, true));
-	final Image image5 = new Image(display, flip(data, false));
-
-	Shell shell = new Shell(display);
-	// draw the results on the shell
-	shell.addPaintListener(new PaintListener(){
-		public void paintControl(PaintEvent e) {
-			e.gc.drawText("Original Image:", 10, 10, true);
-			e.gc.drawImage(image0, 10, 40);
-			e.gc.drawText("Left, Right, 180:", 10, 80, true);
-			e.gc.drawImage(image1, 10, 110);
-			e.gc.drawImage(image2, 50, 110);
-			e.gc.drawImage(image3, 90, 110);
-			e.gc.drawText("Flipped Vertical, Horizontal:", 10, 170, true);
-			e.gc.drawImage(image4, 10, 200);
-			e.gc.drawImage(image5, 70, 200);
-		}
-	});
-	shell.setSize(300, 300);
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	image0.dispose();
-	image1.dispose();
-	image2.dispose();
-	image3.dispose();
-	image4.dispose();
-	image5.dispose();
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet14.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet14.java
deleted file mode 100644
index d26c6ba..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet14.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Control example snippet: detect mouse enter, exit and hover events
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet14 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setSize (100, 100);
-	shell.addListener (SWT.MouseEnter, new Listener () {
-		public void handleEvent (Event e) {
-			System.out.println ("ENTER");
-		}
-	});
-	shell.addListener (SWT.MouseExit, new Listener () {
-		public void handleEvent (Event e) {
-			System.out.println ("EXIT");
-		}
-	});
-	shell.addListener (SWT.MouseHover, new Listener () {
-		public void handleEvent (Event e) {
-			System.out.println ("HOVER");
-		}
-	});
-	shell.open ();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet140.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet140.java
deleted file mode 100644
index ea3e8cb..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet140.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-  
-/*
- * CoolBar example snippet: drop-down a chevron menu containing hidden tool items
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet140 {
-	static Display display;
-	static Shell shell;
-	static CoolBar coolBar;
-	static Menu chevronMenu = null;
-	
-public static void main (String [] args) {
-	display = new Display ();
-	shell = new Shell (display);
-	shell.setLayout(new GridLayout());
-	coolBar = new CoolBar(shell, SWT.FLAT | SWT.BORDER);
-	coolBar.setLayoutData(new GridData(GridData.FILL_BOTH));
-	ToolBar toolBar = new ToolBar(coolBar, SWT.FLAT | SWT.WRAP);
-	int minWidth = 0;
-	for (int j = 0; j < 5; j++) {
-		int width = 0;
-		ToolItem item = new ToolItem(toolBar, SWT.PUSH);
-		item.setText("B" + j);
-		width = item.getWidth();
-		/* find the width of the widest tool */
-		if (width > minWidth) minWidth = width;
-	}
-	CoolItem coolItem = new CoolItem(coolBar, SWT.DROP_DOWN);
-	coolItem.setControl(toolBar);
-	Point size = toolBar.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-	Point coolSize = coolItem.computeSize (size.x, size.y);
-	coolItem.setMinimumSize(minWidth, coolSize.y);
-	coolItem.setPreferredSize(coolSize);
-	coolItem.setSize(coolSize);
-	coolItem.addSelectionListener(new SelectionAdapter() {
-		public void widgetSelected(SelectionEvent event) {
-			if (event.detail == SWT.ARROW) {
-				CoolItem item = (CoolItem) event.widget;
-				Rectangle itemBounds = item.getBounds ();
-				Point pt = coolBar.toDisplay(new Point(itemBounds.x, itemBounds.y));
-				itemBounds.x = pt.x;
-				itemBounds.y = pt.y;
-				ToolBar bar = (ToolBar) item.getControl ();
-				ToolItem[] tools = bar.getItems ();
-				
-				int i = 0;
-				while (i < tools.length) {
-					Rectangle toolBounds = tools[i].getBounds ();
-					pt = bar.toDisplay(new Point(toolBounds.x, toolBounds.y));
-					toolBounds.x = pt.x;
-					toolBounds.y = pt.y;
-					
-					/* Figure out the visible portion of the tool by looking at the
-					 * intersection of the tool bounds with the cool item bounds. */
-			  		Rectangle intersection = itemBounds.intersection (toolBounds);
-			  		
-					/* If the tool is not completely within the cool item bounds, then it
-					 * is partially hidden, and all remaining tools are completely hidden. */
-			  		if (!intersection.equals (toolBounds)) break;
-			  		i++;
-				}
-				
-				/* Create a menu with items for each of the completely hidden buttons. */
-				if (chevronMenu != null) chevronMenu.dispose();
-				chevronMenu = new Menu (coolBar);
-				for (int j = i; j < tools.length; j++) {
-					MenuItem menuItem = new MenuItem (chevronMenu, SWT.PUSH);
-					menuItem.setText (tools[j].getText());
-				}
-				
-				/* Drop down the menu below the chevron, with the left edges aligned. */
-				pt = coolBar.toDisplay(new Point(event.x, event.y));
-				chevronMenu.setLocation (pt.x, pt.y);
-				chevronMenu.setVisible (true);
-			}
-		}
-	});
-
-	shell.pack();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet141.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet141.java
deleted file mode 100644
index faa1e6d..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet141.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Image example snippet: display an animated GIF
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet141 {
-	static Display display;
-	static Shell shell;
-	static GC shellGC;
-	static Color shellBackground;
-	static ImageLoader loader;
-	static ImageData[] imageDataArray;
-	static Thread animateThread;
-	static Image image;
-	static final boolean useGIFBackground = false;
-	
-	public static void main(String[] args) {
-		display = new Display();
-		shell = new Shell(display);
-		shell.setSize(300, 300);
-		shell.open();
-		shellGC = new GC(shell);
-		shellBackground = shell.getBackground();
-
-		FileDialog dialog = new FileDialog(shell);
-		dialog.setFilterExtensions(new String[] {"*.gif"});
-		String fileName = dialog.open();
-		if (fileName != null) {
-			loader = new ImageLoader();
-			try {
-				imageDataArray = loader.load(fileName);
-				if (imageDataArray.length > 1) {
-					animateThread = new Thread("Animation") {
-						public void run() {
-							/* Create an off-screen image to draw on, and fill it with the shell background. */
-							Image offScreenImage = new Image(display, loader.logicalScreenWidth, loader.logicalScreenHeight);
-							GC offScreenImageGC = new GC(offScreenImage);
-							offScreenImageGC.setBackground(shellBackground);
-							offScreenImageGC.fillRectangle(0, 0, loader.logicalScreenWidth, loader.logicalScreenHeight);
-								
-							try {
-								/* Create the first image and draw it on the off-screen image. */
-								int imageDataIndex = 0;	
-								ImageData imageData = imageDataArray[imageDataIndex];
-								if (image != null && !image.isDisposed()) image.dispose();
-								image = new Image(display, imageData);
-								offScreenImageGC.drawImage(
-									image,
-									0,
-									0,
-									imageData.width,
-									imageData.height,
-									imageData.x,
-									imageData.y,
-									imageData.width,
-									imageData.height);
-
-								/* Now loop through the images, creating and drawing each one
-								 * on the off-screen image before drawing it on the shell. */
-								int repeatCount = loader.repeatCount;
-								while (loader.repeatCount == 0 || repeatCount > 0) {
-									switch (imageData.disposalMethod) {
-									case SWT.DM_FILL_BACKGROUND:
-										/* Fill with the background color before drawing. */
-										Color bgColor = null;
-										if (useGIFBackground && loader.backgroundPixel != -1) {
-											bgColor = new Color(display, imageData.palette.getRGB(loader.backgroundPixel));
-										}
-										offScreenImageGC.setBackground(bgColor != null ? bgColor : shellBackground);
-										offScreenImageGC.fillRectangle(imageData.x, imageData.y, imageData.width, imageData.height);
-										if (bgColor != null) bgColor.dispose();
-										break;
-									case SWT.DM_FILL_PREVIOUS:
-										/* Restore the previous image before drawing. */
-										offScreenImageGC.drawImage(
-											image,
-											0,
-											0,
-											imageData.width,
-											imageData.height,
-											imageData.x,
-											imageData.y,
-											imageData.width,
-											imageData.height);
-										break;
-									}
-														
-									imageDataIndex = (imageDataIndex + 1) % imageDataArray.length;
-									imageData = imageDataArray[imageDataIndex];
-									image.dispose();
-									image = new Image(display, imageData);
-									offScreenImageGC.drawImage(
-										image,
-										0,
-										0,
-										imageData.width,
-										imageData.height,
-										imageData.x,
-										imageData.y,
-										imageData.width,
-										imageData.height);
-									
-									/* Draw the off-screen image to the shell. */
-									shellGC.drawImage(offScreenImage, 0, 0);
-									
-									/* Sleep for the specified delay time (adding commonly-used slow-down fudge factors). */
-									try {
-										int ms = imageData.delayTime * 10;
-										if (ms < 20) ms += 30;
-										if (ms < 30) ms += 10;
-										Thread.sleep(ms);
-									} catch (InterruptedException e) {
-									}
-									
-									/* If we have just drawn the last image, decrement the repeat count and start again. */
-									if (imageDataIndex == imageDataArray.length - 1) repeatCount--;
-								}
-							} catch (SWTException ex) {
-								System.out.println("There was an error animating the GIF");
-							} finally {
-								if (offScreenImage != null && !offScreenImage.isDisposed()) offScreenImage.dispose();
-								if (offScreenImageGC != null && !offScreenImageGC.isDisposed()) offScreenImageGC.dispose();
-								if (image != null && !image.isDisposed()) image.dispose();
-							}
-						}
-					};
-					animateThread.setDaemon(true);
-					animateThread.start();
-				}
-			} catch (SWTException ex) {
-				System.out.println("There was an error loading the GIF");
-			}
-		}
-
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch()) display.sleep();
-		}
-		display.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet142.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet142.java
deleted file mode 100644
index 7caf14b..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet142.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-  
-/*
- * UI Automation (for testing tools) snippet: post mouse events
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet142 {
-
-public static void main(String[] args) {
-	final Display display = new Display();
-	final Shell shell = new Shell(display);
-	final Button button = new Button(shell,SWT.NONE);
-	button.setSize(100,100);
-	button.setText("Click");
-	shell.pack();
-	shell.open();
-	button.addListener(SWT.MouseDown, new Listener() {
-		public void handleEvent(Event e){
-			System.out.println("Mouse Down (button: " + e.button + " x: " + e.x + " y: " + e.y + ")");
-		}
-	});
-	final Point pt = display.map(shell, null, 50, 50);
-	new Thread(){
-		Event event;
-		public void run(){
-			try {
-				Thread.sleep(300);
-			} catch (InterruptedException e) {}
-			event = new Event();
-			event.type = SWT.MouseMove;
-			event.x = pt.x;
-			event.y = pt.y;
-			display.post(event);
-			try {
-				Thread.sleep(300);
-			} catch (InterruptedException e) {}
-			event.type = SWT.MouseDown;
-			event.button = 1;
-			display.post(event);
-			try {
-				Thread.sleep(300);
-			} catch (InterruptedException e) {}
-			event.type = SWT.MouseUp;
-			display.post(event);
-		}	
-	}.start();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch()) display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet143.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet143.java
deleted file mode 100644
index 314a925..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet143.java
+++ /dev/null
@@ -1,83 +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.snippets;
-  
-/*
- * Tray example snippet: place an icon with a popup menu on the system tray
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet143 {
-
-public static void main(String[] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Image image = new Image (display, 16, 16);
-	final Tray tray = display.getSystemTray ();
-	if (tray == null) {
-		System.out.println ("The system tray is not available");
-	} else {
-		final TrayItem item = new TrayItem (tray, SWT.NONE);
-		item.setToolTipText("SWT TrayItem");
-		item.addListener (SWT.Show, new Listener () {
-			public void handleEvent (Event event) {
-				System.out.println("show");
-			}
-		});
-		item.addListener (SWT.Hide, new Listener () {
-			public void handleEvent (Event event) {
-				System.out.println("hide");
-			}
-		});
-		item.addListener (SWT.Selection, new Listener () {
-			public void handleEvent (Event event) {
-				System.out.println("selection");
-			}
-		});
-		item.addListener (SWT.DefaultSelection, new Listener () {
-			public void handleEvent (Event event) {
-				System.out.println("default selection");
-			}
-		});
-		final Menu menu = new Menu (shell, SWT.POP_UP);
-		for (int i = 0; i < 8; i++) {
-			MenuItem mi = new MenuItem (menu, SWT.PUSH);
-			mi.setText ("Item" + i);
-			mi.addListener (SWT.Selection, new Listener () {
-				public void handleEvent (Event event) {
-					System.out.println("selection " + event.widget);
-				}
-			});
-			if (i == 0) menu.setDefaultItem(mi);
-		}
-		item.addListener (SWT.MenuDetect, new Listener () {
-			public void handleEvent (Event event) {
-				menu.setVisible (true);
-			}
-		});
-		item.setImage (image);
-	}
-	shell.setBounds(50, 50, 300, 200);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	image.dispose ();
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet144.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet144.java
deleted file mode 100644
index a569625..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet144.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Virtual Table example snippet: create a table with 1,000,000 items (lazy)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet144 {
-
-static final int COUNT = 1000000;
-
-public static void main(String[] args) {
-	Display display = new Display ();
-	final Shell shell = new Shell (display);
-	shell.setLayout (new RowLayout (SWT.VERTICAL));
-	final Table table = new Table (shell, SWT.VIRTUAL | SWT.BORDER);
-	table.addListener (SWT.SetData, new Listener () {
-		public void handleEvent (Event event) {
-			TableItem item = (TableItem) event.item;
-			int index = table.indexOf (item);
-			item.setText ("Item " + index);
-			System.out.println (item.getText ());
-		}
-	});
-	table.setLayoutData (new RowData (200, 200));
-	Button button = new Button (shell, SWT.PUSH);
-	button.setText ("Add Items");
-	final Label label = new Label(shell, SWT.NONE);
-	button.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event event) {
-			long t1 = System.currentTimeMillis ();
-			table.setItemCount (COUNT);
-			long t2 = System.currentTimeMillis ();
-			label.setText ("Items: " + COUNT + ", Time: " + (t2 - t1) + " (ms)");
-			shell.layout ();
-		}
-	});
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet145.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet145.java
deleted file mode 100644
index 07c650f..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet145.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * TextLayout example snippet: draw internationalized styled text on a shell
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.graphics.*;
-
-public class Snippet145 {
-
-	public static void main(String[] args) {
-		Display display = new Display();
-		Shell shell = new Shell (display);
-		
-		Font font1 = new Font(display, "Tahoma", 14, SWT.BOLD);
-		Font font2 = new Font(display, "MS Mincho", 20, SWT.ITALIC);
-		Font font3 = new Font(display, "Arabic Transparent", 18, SWT.NORMAL);
-		
-		Color blue = display.getSystemColor(SWT.COLOR_BLUE);
-		Color green = display.getSystemColor(SWT.COLOR_GREEN);
-		Color yellow = display.getSystemColor(SWT.COLOR_YELLOW);
-		Color gray = display.getSystemColor(SWT.COLOR_GRAY);
-		
-		final TextLayout layout = new TextLayout(display);
-		TextStyle style1 = new TextStyle(font1, yellow, blue);
-		TextStyle style2 = new TextStyle(font2, green, null);
-		TextStyle style3 = new TextStyle(font3, blue, gray);
-		
-		layout.setText("English \u65E5\u672C\u8A9E  \u0627\u0644\u0639\u0631\u0628\u064A\u0651\u0629");
-		layout.setStyle(style1, 0, 6);
-		layout.setStyle(style2, 8, 10);
-		layout.setStyle(style3, 13, 21);
-					
-		shell.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
-		shell.addListener(SWT.Paint, new Listener() {
-			public void handleEvent (Event event) {
-				layout.draw(event.gc, 10, 10);
-			}
-		});
-		shell.open();	
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch()) display.sleep();
-		}
-		font1.dispose();
-		font2.dispose();
-		font3.dispose();
-		layout.dispose();
-		display.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet146.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet146.java
deleted file mode 100644
index 2b229af..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet146.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-  
-/*
- * UI Automation (for testing tools) snippet: post key events
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet146 {
-
-public static void main(String[] args) {
-	final Display display = new Display();
-	final Shell shell = new Shell(display);
-	final Text text = new Text(shell, SWT.BORDER);
-	text.setSize(text.computeSize(150, SWT.DEFAULT));
-	shell.pack();
-	shell.open();
-	new Thread(){
-		public void run(){
-			String string = "Love the method.";
-			for (int i = 0; i < string.length(); i++) {
-				char ch = string.charAt(i);
-				boolean shift = Character.isUpperCase(ch);
-				ch = Character.toLowerCase(ch);
-				if (shift) {
-					Event event = new Event();
-					event.type = SWT.KeyDown;
-					event.keyCode = SWT.SHIFT;
-					display.post(event);	
-				}
-				Event event = new Event();
-				event.type = SWT.KeyDown;
-				event.character = ch;
-				display.post(event);
-				try {
-					Thread.sleep(10);
-				} catch (InterruptedException e) {}
-				event.type = SWT.KeyUp;
-				display.post(event);
-				try {
-					Thread.sleep(100);
-				} catch (InterruptedException e) {}
-				if (shift) {
-					event = new Event();
-					event.type = SWT.KeyUp;
-					event.keyCode = SWT.SHIFT;
-					display.post(event);	
-				}
-			}
-		}	
-	}.start();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch()) display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet147.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet147.java
deleted file mode 100644
index 4b29d5b..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet147.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Text example snippet: stop CR from going to the default button
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet147  {
-public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setLayout(new GridLayout());
-	Combo combo = new Combo(shell, SWT.NONE);
-	combo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-	combo.setText("Here is some text");
-	combo.addSelectionListener(new SelectionAdapter() {
-		public void widgetDefaultSelected(SelectionEvent e) {
-			System.out.println("Combo default selected (overrides default button)");
-		}
-	});
-	combo.addTraverseListener(new TraverseListener() {
-		public void keyTraversed(TraverseEvent e) {
-			if (e.detail == SWT.TRAVERSE_RETURN) {
-				e.doit = false;
-				e.detail = SWT.TRAVERSE_NONE;
-			}
-		}
-	});
-	Button button = new Button(shell, SWT.PUSH);
-	button.setText("Ok");
-	button.addSelectionListener(new SelectionAdapter() {
-		public void widgetSelected(SelectionEvent e) {
-			System.out.println("Button selected");
-		}
-	});
-	shell.setDefaultButton(button);
-	shell.pack();
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet148.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet148.java
deleted file mode 100644
index d395c28..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet148.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Text example snippet: check if the browser is available or not
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.browser.*;
-
-public class Snippet148 {
-
-	public static void main(String[] args) {
-		final Display display = new Display();
-		Shell shell = new Shell(display);
-		shell.setLayout(new FillLayout());
-		Browser browser = null;
-		try {
-			browser = new Browser(shell, SWT.NONE);
-		} catch (SWTError e) {
-			/* The Browser widget throws an SWTError if it fails to
-			 * instantiate properly. Application code should catch
-			 * this SWTError and disable any feature requiring the
-			 * Browser widget.
-			 * Platform requirements for the SWT Browser widget are available
-			 * from the SWT FAQ website. 
-			 */
-		}
-		if (browser != null) {
-			/* The Browser widget can be used */
-			browser.setUrl("http://www.eclipse.org");
-		}
-		shell.open();
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		display.dispose();
-	}
-}
-
-
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet149.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet149.java
deleted file mode 100644
index ed36315..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet149.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * TableEditor example snippet: place a progress bar in a table
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.custom.*;
-
-public class Snippet149 {
-	public static void main(String[] args) {
-		Display display = new Display();
-		Shell shell = new Shell(display);
-		shell.setLayout (new FillLayout ());
-		Table table = new Table (shell, SWT.BORDER);
-		table.setHeaderVisible (true);
-		table.setLinesVisible(true);
-		for (int i=0; i<2; i++) {
-			new TableColumn (table, SWT.NONE);
-		}
-		table.getColumn (0).setText ("Task");
-		table.getColumn (1).setText ("Progress");
-		for (int i=0; i<40; i++) {
-			TableItem item = new TableItem (table, SWT.NONE);
-			item.setText ("Task " + i);
-			if ( i % 5 == 0) {
-				ProgressBar bar = new ProgressBar (table, SWT.NONE);
-				bar.setSelection (i);
-				TableEditor editor = new TableEditor (table);
-				editor.grabHorizontal = editor.grabVertical = true;
-				editor.setEditor (bar, item, 1);
-			}
-		}
-		table.getColumn (0).pack ();
-		table.getColumn (1).setWidth (128);
-		shell.pack ();
-		shell.open();
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch()) {
-				display.sleep();
-			}
-		}
-		display.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet15.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet15.java
deleted file mode 100644
index 7c08fd7..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet15.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Tree example snippet: create a tree
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet15 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	final Tree tree = new Tree (shell, SWT.BORDER);
-	tree.setSize (100, 100);
-	shell.setSize (200, 200);
-	for (int i=0; i<4; i++) {
-		TreeItem iItem = new TreeItem (tree, 0);
-		iItem.setText ("TreeItem (0) -" + i);
-		for (int j=0; j<4; j++) {
-			TreeItem jItem = new TreeItem (iItem, 0);
-			jItem.setText ("TreeItem (1) -" + j);
-			for (int k=0; k<4; k++) {
-				TreeItem kItem = new TreeItem (jItem, 0);
-				kItem.setText ("TreeItem (2) -" + k);
-				for (int l=0; l<4; l++) {
-					TreeItem lItem = new TreeItem (kItem, 0);
-					lItem.setText ("TreeItem (3) -" + l);
-				}
-			}
-		}
-	}
-	shell.open ();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet150.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet150.java
deleted file mode 100644
index 53f12f0..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet150.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * CoolBar example snippet: create a coolbar (relayout when resized)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet150 {
-
-static int itemCount;
-static CoolItem createItem(CoolBar coolBar, int count) {
-    ToolBar toolBar = new ToolBar(coolBar, SWT.FLAT);
-    for (int i = 0; i < count; i++) {
-        ToolItem item = new ToolItem(toolBar, SWT.PUSH);
-        item.setText(itemCount++ +"");
-    }
-    toolBar.pack();
-    Point size = toolBar.getSize();
-    CoolItem item = new CoolItem(coolBar, SWT.NONE);
-    item.setControl(toolBar);
-    Point preferred = item.computeSize(size.x, size.y);
-    item.setPreferredSize(preferred);
-    return item;
-}
-
-public static void main(String[] args) {
-    Display display = new Display();
-    final Shell shell = new Shell(display);
-    CoolBar coolBar = new CoolBar(shell, SWT.NONE);
-    createItem(coolBar, 3);
-    createItem(coolBar, 2);
-    createItem(coolBar, 3);
-    createItem(coolBar, 4);
-    int style = SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL;
-    Text text = new Text(shell, style);
-    FormLayout layout = new FormLayout();
-    shell.setLayout(layout);
-    FormData coolData = new FormData();
-    coolData.left = new FormAttachment(0);
-    coolData.right = new FormAttachment(100);
-    coolData.top = new FormAttachment(0);
-    coolBar.setLayoutData(coolData);
-    coolBar.addListener(SWT.Resize, new Listener() {
-        public void handleEvent(Event event) {
-            shell.layout();
-        }
-    });
-    FormData textData = new FormData();
-    textData.left = new FormAttachment(0);
-    textData.right = new FormAttachment(100);
-    textData.top = new FormAttachment(coolBar);
-    textData.bottom = new FormAttachment(100);
-    text.setLayoutData(textData);
-    shell.open();
-    while (!shell.isDisposed()) {
-        if (!display.readAndDispatch()) display.sleep();
-    }
-    display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet151.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet151.java
deleted file mode 100644
index f9ab2de..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet151.java
+++ /dev/null
@@ -1,76 +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.snippets;
-
-/*
- * Create a virtual table and add 1000 entries to it every 500 ms.
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import java.util.*;
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet151 {
-
-static int[] data = new int[0];
-
-public static void main (String [] args) {
-	final Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setLayout(new FillLayout());
-	final Table table = new Table(shell, SWT.BORDER | SWT.VIRTUAL);
-	table.addListener(SWT.SetData, new Listener() {
-		public void handleEvent(Event e) {
-			TableItem item = (TableItem)e.item;
-			int index = table.indexOf(item);
-			item.setText("Item "+data[index]);
-		}
-	});
-	Thread thread = new Thread() {
-		public void run() {
-			int count = 0;
-			Random random = new Random();
-			while (count++ < 500) {
-				if (table.isDisposed()) return;
-				// add 10 random numbers to array and sort
-				int grow = 10;
-				int[] newData = new int[data.length + grow];
-				System.arraycopy(data, 0, newData, 0, data.length);
-				int index = data.length;
-				data = newData;
-				for (int j = 0; j < grow; j++) {
-					data[index++] = random.nextInt();
-				}
-				Arrays.sort(data);
-				display.syncExec(new Runnable() {
-					public void run() {
-						if (table.isDisposed()) return;
-						table.setItemCount(data.length);
-						table.clearAll();
-					}
-				});
-				try {Thread.sleep(500);} catch (Throwable t) {}
-			}
-		}
-	};
-	thread.start();
-	shell.open ();
-	while (!shell.isDisposed() || thread.isAlive()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet152.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet152.java
deleted file mode 100644
index 96a2d52..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet152.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Control example snippet: update a status line when an item is armed
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet152 {
-
-public static void main(String[] args) {
-    Display display = new Display();
-    Shell shell = new Shell(display);
-    FormLayout layout = new FormLayout();
-    shell.setLayout(layout);
-    final Label label = new Label(shell, SWT.BORDER);
-    Listener armListener = new Listener() {
-        public void handleEvent(Event event) {
-            MenuItem item = (MenuItem) event.widget;
-            label.setText(item.getText());
-            label.update();
-        }
-    };
-    Listener showListener = new Listener() {
-        public void handleEvent(Event event) {
-            Menu menu = (Menu) event.widget;
-            MenuItem item = menu.getParentItem();
-            if (item != null) {
-                label.setText(item.getText());
-                label.update();
-            }
-        }
-    };
-    Listener hideListener = new Listener() {
-        public void handleEvent(Event event) {
-            label.setText("");
-            label.update();
-        }
-    };
-    FormData labelData = new FormData();
-    labelData.left = new FormAttachment(0);
-    labelData.right = new FormAttachment(100);
-    labelData.bottom = new FormAttachment(100);
-    label.setLayoutData(labelData);
-    Menu menuBar = new Menu(shell, SWT.BAR);
-    shell.setMenuBar(menuBar);
-    MenuItem fileItem = new MenuItem(menuBar, SWT.CASCADE);
-    fileItem.setText("File");
-    fileItem.addListener(SWT.Arm, armListener);
-    MenuItem editItem = new MenuItem(menuBar, SWT.CASCADE);
-    editItem.setText("Edit");
-    editItem.addListener(SWT.Arm, armListener);
-    Menu fileMenu = new Menu(shell, SWT.DROP_DOWN);
-    fileMenu.addListener(SWT.Hide, hideListener);
-    fileMenu.addListener(SWT.Show, showListener);
-    fileItem.setMenu(fileMenu);
-    String[] fileStrings = { "New", "Close", "Exit" };
-    for (int i = 0; i < fileStrings.length; i++) {
-        MenuItem item = new MenuItem(fileMenu, SWT.PUSH);
-        item.setText(fileStrings[i]);
-        item.addListener(SWT.Arm, armListener);
-    }
-    Menu editMenu = new Menu(shell, SWT.DROP_DOWN);
-    editMenu.addListener(SWT.Hide, hideListener);
-    editMenu.addListener(SWT.Show, showListener);
-    String[] editStrings = { "Cut", "Copy", "Paste" };
-    editItem.setMenu(editMenu);
-    for (int i = 0; i < editStrings.length; i++) {
-        MenuItem item = new MenuItem(editMenu, SWT.PUSH);
-        item.setText(editStrings[i]);
-        item.addListener(SWT.Arm, armListener);
-    }
-    shell.open();
-    while (!shell.isDisposed()) {
-        if (!display.readAndDispatch()) display.sleep();
-    }
-    display.dispose();
-}
-
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet153.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet153.java
deleted file mode 100644
index 5b6862f..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet153.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * ToolBar example snippet: update a status line when the pointer enters a ToolItem
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet153 {
-	
-static String statusText = "";
-public static void main(String[] args) {
-    final Display display = new Display();
-    Shell shell = new Shell(display);
-    shell.setBounds(10, 10, 200, 200);
-    final ToolBar bar = new ToolBar(shell, SWT.BORDER);
-    bar.setBounds(10, 10, 150, 50);
-    final Label statusLine = new Label(shell, SWT.BORDER);
-    statusLine.setBounds(10, 90, 150, 30);
-    new ToolItem(bar, SWT.NONE).setText("item 1");
-    new ToolItem(bar, SWT.NONE).setText("item 2");
-    new ToolItem(bar, SWT.NONE).setText("item 3");
-    bar.addMouseMoveListener(new MouseMoveListener() {
-        public void mouseMove(MouseEvent e) {
-            ToolItem item = bar.getItem(new Point(e.x, e.y));
-            String name = "";
-            if (item != null) {
-                name = item.getText();
-            }
-            if (!statusText.equals(name)) {
-                statusLine.setText(name);
-                statusText = name;
-            }
-        }
-    });
-    shell.open();
-    while (!shell.isDisposed()) {
-        if (!display.readAndDispatch()) display.sleep();
-    }
-    display.dispose();
-}
-
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet154.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet154.java
deleted file mode 100644
index f997ca0..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet154.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * example snippet: embed a JTable in SWT (no flicker)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import java.awt.BorderLayout;
-import java.awt.Frame;
-import java.awt.Panel;
-import javax.swing.*;
-import java.util.Vector;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.awt.SWT_AWT;
-
-public class Snippet154 {
-
-	public static void main(String[] args) {
-		final Display display = new Display();
-		final Shell shell = new Shell(display);
-		shell.setLayout(new FillLayout());
-
-		Composite composite = new Composite(shell, SWT.NO_BACKGROUND | SWT.EMBEDDED);
-		
-		/*
-		* Set a Windows specific AWT property that prevents heavyweight
-		* components from erasing their background. Note that this
-		* is a global property and cannot be scoped. It might not be
-		* suitable for your application.
-		*/
-		try {
-			System.setProperty("sun.awt.noerasebackground","true");
-		} catch (NoSuchMethodError error) {}
-
-		/* Create and setting up frame */
-		Frame frame = SWT_AWT.new_Frame(composite);
-		Panel panel = new Panel(new BorderLayout()) {
-			public void update(java.awt.Graphics g) {
-				/* Do not erase the background */ 
-				paint(g);
-			}
-		};
-		frame.add(panel);
-		JRootPane root = new JRootPane();
-		panel.add(root);
-		java.awt.Container contentPane = root.getContentPane();
-
-		/* Creating components */
-		int nrows = 1000, ncolumns = 10;
-		Vector rows = new Vector();
-		for (int i = 0; i < nrows; i++) {
-			Vector row = new Vector();
-			for (int j = 0; j < ncolumns; j++) {
-				row.addElement("Item " + i + "-" + j);
-			}
-			rows.addElement(row);
-		}
-		Vector columns = new Vector();
-		for (int i = 0; i < ncolumns; i++) {
-			columns.addElement("Column " + i);
-		}
-		JTable table = new JTable(rows, columns);
-		table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
-		table.createDefaultColumnsFromModel();
-		JScrollPane scrollPane = new JScrollPane(table);
-		contentPane.setLayout(new BorderLayout());
-		contentPane.add(scrollPane);
-		
-		shell.open();
-		while(!shell.isDisposed()) {
-			if (!display.readAndDispatch()) display.sleep();
-		}
-		display.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet155.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet155.java
deleted file mode 100644
index 1b3d8ed..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet155.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * example snippet: draw an X using AWT Graphics
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import java.awt.Frame;
-import java.awt.Canvas;
-import java.awt.Graphics;
-import java.awt.Dimension;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.awt.SWT_AWT;
-
-public class Snippet155 {
-
-	public static void main(String[] args) {
-		final Display display = new Display();
-		final Shell shell = new Shell(display);
-		shell.setLayout(new FillLayout());
-		Composite composite = new Composite(shell, SWT.EMBEDDED);
-		
-		/* Draw an X using AWT */
-		Frame frame = SWT_AWT.new_Frame(composite);
-		Canvas canvas = new Canvas() {
-			public void paint (Graphics g) {
-				Dimension d = getSize();
-				g.drawLine(0, 0, d.width, d.height);
-				g.drawLine(d.width, 0, 0, d.height);
-			}
-		};
-		frame.add(canvas);
-
-		shell.open();
-		while(!shell.isDisposed()) {
-			if (!display.readAndDispatch()) display.sleep();
-		}
-		display.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet156.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet156.java
deleted file mode 100644
index 9710946..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet156.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * example snippet: convert between SWT Image and AWT BufferedImage
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import java.awt.Frame;
-import java.awt.Graphics;
-import java.awt.Insets;
-import java.awt.image.BufferedImage;
-import java.awt.image.ColorModel;
-import java.awt.image.DirectColorModel;
-import java.awt.image.IndexColorModel;
-import java.awt.image.WritableRaster;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.graphics.*;
-
-public class Snippet156 {
-	
-static BufferedImage convertToAWT(ImageData data) {
-	ColorModel colorModel = null;
-	PaletteData palette = data.palette;
-	if (palette.isDirect) {
-		colorModel = new DirectColorModel(data.depth, palette.redMask, palette.greenMask, palette.blueMask);
-		BufferedImage bufferedImage = new BufferedImage(colorModel, colorModel.createCompatibleWritableRaster(data.width, data.height), false, null);
-		WritableRaster raster = bufferedImage.getRaster();
-		int[] pixelArray = new int[3];
-		for (int y = 0; y < data.height; y++) {
-			for (int x = 0; x < data.width; x++) {
-				int pixel = data.getPixel(x, y);
-				RGB rgb = palette.getRGB(pixel);
-				pixelArray[0] = rgb.red;
-				pixelArray[1] = rgb.green;
-				pixelArray[2] = rgb.blue;
-				raster.setPixels(x, y, 1, 1, pixelArray);
-			}
-		}
-		return bufferedImage;
-	} else {
-		RGB[] rgbs = palette.getRGBs();
-		byte[] red = new byte[rgbs.length];
-		byte[] green = new byte[rgbs.length];
-		byte[] blue = new byte[rgbs.length];
-		for (int i = 0; i < rgbs.length; i++) {
-			RGB rgb = rgbs[i];
-			red[i] = (byte)rgb.red;
-			green[i] = (byte)rgb.green;
-			blue[i] = (byte)rgb.blue;
-		}
-		if (data.transparentPixel != -1) {
-			colorModel = new IndexColorModel(data.depth, rgbs.length, red, green, blue, data.transparentPixel);
-		} else {
-			colorModel = new IndexColorModel(data.depth, rgbs.length, red, green, blue);
-		}		
-		BufferedImage bufferedImage = new BufferedImage(colorModel, colorModel.createCompatibleWritableRaster(data.width, data.height), false, null);
-		WritableRaster raster = bufferedImage.getRaster();
-		int[] pixelArray = new int[1];
-		for (int y = 0; y < data.height; y++) {
-			for (int x = 0; x < data.width; x++) {
-				int pixel = data.getPixel(x, y);
-				pixelArray[0] = pixel;
-				raster.setPixel(x, y, pixelArray);
-			}
-		}
-		return bufferedImage;
-	}
-}
-
-static ImageData convertToSWT(BufferedImage bufferedImage) {
-	if (bufferedImage.getColorModel() instanceof DirectColorModel) {
-		DirectColorModel colorModel = (DirectColorModel)bufferedImage.getColorModel();
-		PaletteData palette = new PaletteData(colorModel.getRedMask(), colorModel.getGreenMask(), colorModel.getBlueMask());
-		ImageData data = new ImageData(bufferedImage.getWidth(), bufferedImage.getHeight(), colorModel.getPixelSize(), palette);
-		WritableRaster raster = bufferedImage.getRaster();
-		int[] pixelArray = new int[3];
-		for (int y = 0; y < data.height; y++) {
-			for (int x = 0; x < data.width; x++) {
-				raster.getPixel(x, y, pixelArray);
-				int pixel = palette.getPixel(new RGB(pixelArray[0], pixelArray[1], pixelArray[2]));
-				data.setPixel(x, y, pixel);
-			}
-		}		
-		return data;		
-	} else if (bufferedImage.getColorModel() instanceof IndexColorModel) {
-		IndexColorModel colorModel = (IndexColorModel)bufferedImage.getColorModel();
-		int size = colorModel.getMapSize();
-		byte[] reds = new byte[size];
-		byte[] greens = new byte[size];
-		byte[] blues = new byte[size];
-		colorModel.getReds(reds);
-		colorModel.getGreens(greens);
-		colorModel.getBlues(blues);
-		RGB[] rgbs = new RGB[size];
-		for (int i = 0; i < rgbs.length; i++) {
-			rgbs[i] = new RGB(reds[i] & 0xFF, greens[i] & 0xFF, blues[i] & 0xFF);
-		}
-		PaletteData palette = new PaletteData(rgbs);
-		ImageData data = new ImageData(bufferedImage.getWidth(), bufferedImage.getHeight(), colorModel.getPixelSize(), palette);
-		data.transparentPixel = colorModel.getTransparentPixel();
-		WritableRaster raster = bufferedImage.getRaster();
-		int[] pixelArray = new int[1];
-		for (int y = 0; y < data.height; y++) {
-			for (int x = 0; x < data.width; x++) {
-				raster.getPixel(x, y, pixelArray);
-				data.setPixel(x, y, pixelArray[0]);
-			}
-		}
-		return data;
-	}
-	return null;
-}
-
-static ImageData createSampleImage(Display display) {
-	Image image = new Image(display, 100, 100);
-	Rectangle bounds = image.getBounds();
-	GC gc = new GC(image);
-	gc.setBackground(display.getSystemColor(SWT.COLOR_BLUE));
-	gc.fillRectangle(bounds);
-	gc.setBackground(display.getSystemColor(SWT.COLOR_GREEN));
-	gc.fillOval(0, 0, bounds.width, bounds.height);
-	gc.setForeground(display.getSystemColor(SWT.COLOR_RED));
-	gc.drawLine(0, 0, bounds.width, bounds.height);
-	gc.drawLine(bounds.width, 0, 0, bounds.height);
-	gc.dispose();
-	ImageData data = image.getImageData();
-	image.dispose();
-	return data;
-}
-
-public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setText("SWT Image");
-	ImageData data;
-	if (args.length > 0) {
-		String fileName = args[0];
-		data = new ImageData(fileName);
-	} else {
-		data = createSampleImage(display);
-	}
-	final Image swtImage = new Image(display, data);
-	final BufferedImage awtImage = convertToAWT(data);
-	final Image swtImage2 = new Image(display, convertToSWT(awtImage));
-	shell.addListener(SWT.Paint, new Listener() {
-		public void handleEvent(Event e) {
-			int y = 10;
-			if (swtImage != null) {
-				e.gc.drawImage(swtImage, 10, y);
-				y += swtImage.getBounds().height + 10;
-			}
-			if (swtImage2 != null) {
-				e.gc.drawImage(swtImage2, 10, y);
-			}
-		}
-	});
-	Frame frame = new Frame() {
-		public void paint(Graphics g) {
-			Insets insets = getInsets();
-			if (awtImage != null) {
-				g.drawImage(awtImage, 10 + insets.left, 10 + insets.top, null);
-			}
-		}
-	};
-	frame.setTitle("AWT Image");
-	shell.setLocation(50, 50);
-	Rectangle bounds = swtImage.getBounds();
-	shell.setSize(bounds.width + 50, bounds.height * 2 + 100);
-	Point size = shell.getSize();
-	Point location = shell.getLocation();
-	Insets insets = frame.getInsets();
-	frame.setLocation(location.x + size.x + 10, location.y);
-	frame.setSize(size.x - (insets.left + insets.right), size.y - (insets.top + insets.bottom));
-	frame.setVisible(true);	
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch()) display.sleep();
-	}
-	if (swtImage != null) swtImage.dispose();
-	if (swtImage2 != null) swtImage.dispose();
-	frame.dispose();
-	display.dispose();
-	/* Note: If you are using JDK 1.3.x, you need to use System.exit(0) at the end of your program to exit AWT.
-	 * This is because in 1.3.x, AWT does not exit when the frame is disposed, because the AWT thread is not a daemon.
-	 * This was fixed in JDK 1.4.x with the addition of the AWT Shutdown thread.
-	 */
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet157.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet157.java
deleted file mode 100644
index de1cdf5..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet157.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * example snippet: Embed Word in an applet (win32 only)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-	
-import java.applet.*;
-	 
-public class Snippet157 extends Applet {
-	
-	org.eclipse.swt.widgets.Display display;
-	org.eclipse.swt.widgets.Shell swtParent;
-	java.awt.Canvas awtParent;
-
-public void init () {
-	Thread thread = new Thread (new Runnable () {
-		public void run () {
-			setLayout(new java.awt.GridLayout (1, 1));
-			awtParent = new java.awt.Canvas ();
-			add (awtParent);
-			display = new org.eclipse.swt.widgets.Display ();
-			swtParent = org.eclipse.swt.awt.SWT_AWT.new_Shell (display, awtParent);
-			swtParent.setLayout (new org.eclipse.swt.layout.FillLayout ());
-			org.eclipse.swt.ole.win32.OleFrame frame = new org.eclipse.swt.ole.win32.OleFrame (swtParent, org.eclipse.swt.SWT.NONE);
-			org.eclipse.swt.ole.win32.OleClientSite site;
-			try {
-				site = new org.eclipse.swt.ole.win32.OleClientSite (frame, org.eclipse.swt.SWT.NONE, "Word.Document");
-			} catch (org.eclipse.swt.SWTException e) {
-				String str = "Create OleClientSite Error" + e.toString ();
-				System.out.println (str);
-				return;
-			}
-			setSize (500, 500);
-			validate ();
-			site.doVerb (org.eclipse.swt.ole.win32.OLE.OLEIVERB_SHOW);
-			
-			while (swtParent != null && !swtParent.isDisposed ()) {
-				if (!display.readAndDispatch ()) display.sleep ();		
-			}	
-		}
-	});
-	thread.start ();
-}
- public void stop (){
- 	if (display != null && !display.isDisposed ()){
- 		display.syncExec(new Runnable () {
- 			public void run () {
- 				if (swtParent != null && !swtParent.isDisposed ()) swtParent.dispose ();
- 				swtParent = null;
- 				display.dispose ();
- 				display = null;
- 			}
- 		});
- 		remove (awtParent);
- 		awtParent = null;
- 	}
- }
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet158.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet158.java
deleted file mode 100644
index 2379fdf..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet158.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Drag and Drop example snippet: determine native data types available (motif only)
- * NOTE: This snippet uses internal SWT packages that are
- * subject to change without notice.
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.dnd.*;
-import org.eclipse.swt.internal.*;
-import org.eclipse.swt.internal.motif.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet158 extends ByteArrayTransfer {
-
-private static Snippet158 _instance = new Snippet158();
-private int[] ids;
-private String[] names;
-	
-public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setLayout(new FillLayout());
-	final Table control = new Table(shell, SWT.NONE);
-	TableItem item = new TableItem(control, SWT.NONE);
-	item.setText("Drag data over this site to see the native transfer type.");
-	DropTarget target = new DropTarget(control, DND.DROP_DEFAULT | DND.DROP_COPY | DND.DROP_LINK | DND.DROP_MOVE);
-	target.setTransfer(new Transfer[] {Snippet158.getInstance()});
-	target.addDropListener(new DropTargetAdapter() {
-		public void dragEnter(DropTargetEvent event) {			
-			String ops = "";
-			if ((event.operations & DND.DROP_COPY) != 0) ops += "Copy;";
-			if ((event.operations & DND.DROP_MOVE) != 0) ops += "Move;";
-			if ((event.operations & DND.DROP_LINK) != 0) ops += "Link;";
-			control.removeAll();
-			TableItem item1 = new TableItem(control,SWT.NONE);
-			item1.setText("Allowed Operations are "+ops);
-			
-			if (event.detail == DND.DROP_DEFAULT) {
-				if ((event.operations & DND.DROP_COPY) != 0) {
-					event.detail = DND.DROP_COPY;
-				} else if ((event.operations & DND.DROP_LINK) != 0) {
-					event.detail = DND.DROP_LINK;
-				} else if ((event.operations & DND.DROP_MOVE) != 0) {
-					event.detail = DND.DROP_MOVE;
-				}
-			}
-			
-			TransferData[] data = event.dataTypes;
-			for (int i = 0; i < data.length; i++) {
-				int id = data[i].type;
-				String name = getNameFromId(id);
-				TableItem item2 = new TableItem(control,SWT.NONE);
-				item2.setText("Data type is "+id+" "+name);
-			}
-		}
-	});
-	
-	shell.setSize(400, 400);
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-
-public static Snippet158 getInstance () {
-	return _instance;
-}
-Snippet158() {
-}
-public void javaToNative (Object object, TransferData transferData) {
-}
-public Object nativeToJava(TransferData transferData){
-	return "Hello World";
-}
-protected String[] getTypeNames(){
-	return names;
-}
-static int shellHandle;
-protected int[] getTypeIds(){
-	if (ids == null) {
-		Display display = Display.getCurrent();
-		int widgetClass = OS.topLevelShellWidgetClass ();
-		shellHandle = OS.XtAppCreateShell (null, null, widgetClass, display.xDisplay, null, 0);
-		OS.XtSetMappedWhenManaged (shellHandle, false);
-		OS.XtRealizeWidget (shellHandle);
-		
-		ids = new int[840];
-		names = new String[840];
-		for (int i = 0; i < ids.length; i++) {
-			ids[i] = i+i;
-			names[i] = getNameFromId(i+1);
-		}
-	}
-	return ids;
-}
-static String getNameFromId(int id) {
-	int xDisplay = OS.XtDisplay (shellHandle);
-	int ptr = 0;
-	try {
-		ptr = OS.XmGetAtomName(xDisplay, id);
-	} catch (Throwable t) {
-	}
-	if (ptr == 0) return "invalid "+id;
-	int length = OS.strlen(ptr);
-	byte[] nameBuf = new byte[length];
-	OS.memmove(nameBuf, ptr, length);
-	OS.XFree(ptr);
-	return new String(Converter.mbcsToWcs(null, nameBuf)).toLowerCase();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet159.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet159.java
deleted file mode 100644
index 4146d0f..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet159.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Browser example snippet: modify HTML title tag
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.1
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.browser.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet159 {
-	public static void main(String [] args) {
-		final String newTitle = "New Value for Title";
-		Display display = new Display();
-		final Shell shell = new Shell(display);
-		shell.setLayout(new FillLayout());
-		final Browser browser = new Browser(shell, SWT.NONE);
-		browser.addTitleListener(new TitleListener() {
-			public void changed(TitleEvent event) {
-				System.out.println("TitleEvent: "+event.title);
-				shell.setText(event.title);
-			}
-		});
-		browser.addProgressListener(new ProgressListener() {
-			public void changed(ProgressEvent event) {
-			}
-			public void completed(ProgressEvent event) {
-				/* Set HTML title tag using JavaScript and DOM when page has been loaded */
-				boolean result = browser.execute("document.title='"+newTitle+"'");
-				if (!result) {
-					/* Script may fail or may not be supported on certain platforms. */
-					System.out.println("Script was not executed.");
-				}
-			}
-		});
-		/* Load an HTML document */
-		browser.setUrl("http://www.eclipse.org");
-		shell.open();
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		display.dispose();
-	}
-}
-
-
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet16.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet16.java
deleted file mode 100644
index 7c6ca33..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet16.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Display example snippet: create one repeating timer (every 500 ms)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet16 {
-
-public static void main (String [] args) {
-	final Display display = new Display ();
-	final Shell shell = new Shell (display);
-	final int time = 500;
-	Runnable timer = new Runnable () {
-		public void run () {
-			Point point = display.getCursorLocation ();
-			Rectangle rect = shell.getBounds ();
-			if (rect.contains (point)) {
-				System.out.println ("In");
-			} else {
-				System.out.println ("Out");
-			}
-			display.timerExec (time, this);
-		}
-	};
-	display.timerExec (time, timer);
-	shell.setSize (200, 200);
-	shell.open ();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();	
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet160.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet160.java
deleted file mode 100644
index daee7fa..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet160.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Browser example snippet: query DOM node value
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.1
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.browser.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet160 {
-	public static void main(String [] args) {
-		final String html = "<html><title>Snippet</title><body><p id='myid'>Best Friends</p><p id='myid2'>Cat and Dog</p></body></html>";
-		Display display = new Display();
-		final Shell shell = new Shell(display);
-		shell.setLayout(new FillLayout());
-		final Browser browser = new Browser(shell, SWT.NONE);
-		browser.addStatusTextListener(new StatusTextListener() {
-			public void changed(StatusTextEvent event) {
-				browser.setData("query", event.text);
-			}
-		});
-		browser.addProgressListener(new ProgressListener() {
-			public void changed(ProgressEvent event) {
-			}
-			public void completed(ProgressEvent event) {
-				/* 
-				 * Use JavaScript to query the desired node content through the Document Object Model
-				 * 
-				 * Assign result to the window property status to pass the result to the StatusTextListener
-				 * This trick is required since <code>execute</code> does not return the <code>String</code>
-				 * directly.
-				 */
-				boolean result = browser.execute("window.status=document.getElementById('myid').childNodes[0].nodeValue;");
-				if (!result) {
-					/* Script may fail or may not be supported on certain platforms. */
-					System.out.println("Script was not executed.");
-					return;
-				}
-				String value = (String)browser.getData("query");
-				System.out.println("Node value: "+value);
-			}
-		});
-		/* Load an HTML document */
-		browser.setText(html);
-		shell.open();
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		display.dispose();
-	}
-}
-
-
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet161.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet161.java
deleted file mode 100644
index f2f5e9d..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet161.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Browser example snippet: modify DOM (executing javascript)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.1
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.browser.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet161 {
-	public static void main(String [] args) {
-		final String html = "<html><title>Snippet</title><body><p id='myid'>Best Friends</p><p id='myid2'>Cat and Dog</p></body></html>";
-		Display display = new Display();
-		final Shell shell = new Shell(display);
-		shell.setLayout(new FillLayout());
-		final Browser browser = new Browser(shell, SWT.BORDER);
-		Composite comp = new Composite(shell, SWT.NONE);
-		comp.setLayout(new FillLayout(SWT.VERTICAL));
-		final Text text = new Text(comp, SWT.MULTI);
-		text.setText("var newNode = document.createElement('P'); \r\n"+
-				"var text = document.createTextNode('At least when I am around');\r\n"+
-				"newNode.appendChild(text);\r\n"+
-				"document.getElementById('myid').appendChild(newNode);\r\n"+
-				"\r\n"+
-				"document.bgColor='yellow';");
-		final Button button = new Button(comp, SWT.PUSH);
-		button.setText("Execute Script");
-		button.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event event) {
-				boolean result = browser.execute(text.getText());
-				if (!result) {
-					/* Script may fail or may not be supported on certain platforms. */
-					System.out.println("Script was not executed.");
-				}
-			}
-		});
-		browser.setText(html);
-		shell.open();
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		display.dispose();
-	}
-}
-
-
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet162.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet162.java
deleted file mode 100644
index 92d286a..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet162.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Adding an accessible listener to provide state information
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.accessibility.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet162 {
-
-final static String STATE = "CheckedIndices";
-
-public static void main (String [] args) {
-	final Display display = new Display ();
-	Image checkedImage = getCheckedImage (display);
-	Image uncheckedImage = getUncheckedImage (display);
-	Shell shell = new Shell (display);
-	shell.setLayout (new FillLayout ());
-	final Table table = new Table (shell, SWT.BORDER);
-	TableColumn column1 = new TableColumn (table, SWT.NONE);
-	TableColumn column2 = new TableColumn (table, SWT.NONE);
-	TableColumn column3 = new TableColumn (table, SWT.NONE);
-	TableItem item1 = new TableItem (table, SWT.NONE);
-	item1.setText (new String [] {"first item", "a", "b"});
-	item1.setImage (1, uncheckedImage);
-	item1.setImage (2, uncheckedImage);
-	item1.setData (STATE, null);
-	TableItem item2 = new TableItem (table, SWT.NONE);
-	item2.setText (new String [] {"second item", "c", "d"});
-	item2.setImage (1, uncheckedImage);
-	item2.setImage (2, checkedImage);
-	item2.setData (STATE, new int [] {2});
-	TableItem item3 = new TableItem (table, SWT.NONE);
-	item3.setText (new String [] {"third", "e", "f"});
-	item3.setImage (1, checkedImage);
-	item3.setImage (2, checkedImage);
-	item3.setData (STATE, new int [] {1, 2});
-	column1.pack ();
-	column2.pack ();
-	column3.pack ();
-	Accessible accessible = table.getAccessible ();
-	accessible.addAccessibleListener (new AccessibleAdapter () {
-		public void getName (AccessibleEvent e) {
-			super.getName (e);
-			if (e.childID >= 0 && e.childID < table.getItemCount ()) {
-				TableItem item = table.getItem (e.childID);
-				Point pt = display.getCursorLocation ();
-				pt = display.map (null, table, pt);
-				for (int i = 0; i < table.getColumnCount (); i++) {
-					if (item.getBounds (i).contains (pt)) {
-						int [] data = (int []) item.getData (STATE);
-						boolean checked = false;
-						if (data != null) {
-							for (int j = 0; j < data.length; j++) {
-								if (data [j] == i) {
-									checked = true;
-									break;
-								}
-							}
-						}
-						e.result = item.getText (i) + " " + (checked ? "checked" : "unchecked");
-						break;
-					}
-				}
-			}
-		}
-	});
-	accessible.addAccessibleControlListener (new AccessibleControlAdapter () {
-		public void getState (AccessibleControlEvent e) {
-			super.getState (e);
-			if (e.childID >= 0 && e.childID < table.getItemCount ()) {
-				TableItem item = table.getItem (e.childID);
-				int [] data = (int []) item.getData (STATE);
-				if (data != null) {
-					Point pt = display.getCursorLocation ();
-					pt = display.map (null, table, pt);
-					for (int i = 0; i < data.length; i++) {
-						if (item.getBounds (data [i]).contains (pt)) {
-							e.detail |= ACC.STATE_CHECKED;
-							break;
-						}
-					}
-				}
-			}
-		}
-	});
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	checkedImage.dispose ();
-	uncheckedImage.dispose ();
-	display.dispose ();
-}
-
-static Image getCheckedImage (Display display) {
-	Image image = new Image (display, 16, 16);
-	GC gc = new GC (image);
-	gc.setBackground (display.getSystemColor (SWT.COLOR_YELLOW));
-	gc.fillOval (0, 0, 16, 16);
-	gc.setForeground (display.getSystemColor (SWT.COLOR_DARK_GREEN));
-	gc.drawLine (0, 0, 16, 16);
-	gc.drawLine (16, 0, 0, 16);
-	gc.dispose ();
-	return image;
-}
-
-static Image getUncheckedImage (Display display) {
-	Image image = new Image (display, 16, 16);
-	GC gc = new GC (image);
-	gc.setBackground (display.getSystemColor (SWT.COLOR_YELLOW));
-	gc.fillOval (0, 0, 16, 16);
-	gc.dispose ();
-	return image;
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet163.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet163.java
deleted file mode 100644
index f97fd4b..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet163.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Setting the font style, foreground and background colors of StyledText
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.custom.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet163 {
-
-public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setLayout(new FillLayout());
-	StyledText text = new StyledText (shell, SWT.BORDER);
-	text.setText("0123456789 ABCDEFGHIJKLM NOPQRSTUVWXYZ");
-	// make 0123456789 appear bold
-	StyleRange style1 = new StyleRange();
-	style1.start = 0;
-	style1.length = 10;
-	style1.fontStyle = SWT.BOLD;
-	text.setStyleRange(style1);
-	// make ABCDEFGHIJKLM have a red font
-	StyleRange style2 = new StyleRange();
-	style2.start = 11;
-	style2.length = 13;
-	style2.foreground = display.getSystemColor(SWT.COLOR_RED);
-	text.setStyleRange(style2);
-	// make NOPQRSTUVWXYZ have a blue background
-	StyleRange style3 = new StyleRange();
-	style3.start = 25;
-	style3.length = 13;
-	style3.background = display.getSystemColor(SWT.COLOR_BLUE);
-	text.setStyleRange(style3);
-	
-	shell.pack();
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet164.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet164.java
deleted file mode 100644
index 2f945f4..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet164.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Override the text that is spoken for a native Button.
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.accessibility.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet164 {
-
-public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setBounds(10, 10, 200, 200);
-
-	Button button1 = new Button (shell, SWT.PUSH);
-	button1.setText("&Typical button");
-	button1.setBounds(10,10,180,30);
-	Button button2 = new Button (shell, SWT.PUSH);
-	button2.setText("&Overidden button");
-	button2.setBounds(10,50,180,30);
-	button2.getAccessible().addAccessibleListener(new AccessibleAdapter() {
-		public void getName(AccessibleEvent e) {
-			e.result = "Speak this instead of the button text";
-		}
-	});
-	
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch()) display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet165.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet165.java
deleted file mode 100644
index b5cb18b..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet165.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Create a CTabFolder with min and max buttons, as well as close button and 
- * image only on selected tab.
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.custom.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet165 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Image image = new Image(display, 16, 16);
-	GC gc = new GC(image);
-	gc.setBackground(display.getSystemColor(SWT.COLOR_BLUE));
-	gc.fillRectangle(0, 0, 16, 16);
-	gc.setBackground(display.getSystemColor(SWT.COLOR_YELLOW));
-	gc.fillRectangle(3, 3, 10, 10);
-	gc.dispose();
-	final Shell shell = new Shell (display);
-	shell.setLayout(new GridLayout());
-	final CTabFolder folder = new CTabFolder(shell, SWT.BORDER);
-	folder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
-	folder.setSimple(false);
-	folder.setUnselectedImageVisible(false);
-	folder.setUnselectedCloseVisible(false);
-	for (int i = 0; i < 8; i++) {
-		CTabItem item = new CTabItem(folder, SWT.CLOSE);
-		item.setText("Item "+i);
-		item.setImage(image);
-		Text text = new Text(folder, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL);
-		text.setText("Text for item "+i+"\n\none, two, three\n\nabcdefghijklmnop");
-		item.setControl(text);
-	}
-	folder.setMinimizeVisible(true);
-	folder.setMaximizeVisible(true);
-	folder.addCTabFolder2Listener(new CTabFolder2Adapter() {
-		public void minimize(CTabFolderEvent event) {
-			folder.setMinimized(true);
-			shell.layout(true);
-		}
-		public void maximize(CTabFolderEvent event) {
-			folder.setMaximized(true);
-			folder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-			shell.layout(true);
-		}
-		public void restore(CTabFolderEvent event) {
-			folder.setMinimized(false);
-			folder.setMaximized(false);
-			folder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
-			shell.layout(true);
-		}
-	});
-	shell.setSize(300, 300);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	image.dispose();
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet166.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet166.java
deleted file mode 100644
index 14727f0..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet166.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Create a ScrolledComposite with wrapping content.
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.custom.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet166 {
-
-public static void main(String[] args) {
-	Display display = new Display();
-	Image image1 = display.getSystemImage(SWT.ICON_WORKING);
-	Image image2 = display.getSystemImage(SWT.ICON_QUESTION);
-	Image image3 = display.getSystemImage(SWT.ICON_ERROR);
-	
-	Shell shell = new Shell(display);
-	shell.setLayout(new FillLayout());
-	
-	final ScrolledComposite scrollComposite = new ScrolledComposite(shell, SWT.V_SCROLL | SWT.BORDER);
-
-	final Composite parent = new Composite(scrollComposite, SWT.NONE);
-	for(int i = 0; i <= 50; i++) {
-		Label label = new Label(parent, SWT.NONE);
-		if (i % 3 == 0) label.setImage(image1);
-		if (i % 3 == 1) label.setImage(image2);
-		if (i % 3 == 2) label.setImage(image3);
-	}
-	RowLayout layout = new RowLayout(SWT.HORIZONTAL);
-	layout.wrap = true;
-	parent.setLayout(layout);
-	
-	scrollComposite.setContent(parent);
-	scrollComposite.setExpandVertical(true);
-	scrollComposite.setExpandHorizontal(true);
-	scrollComposite.addControlListener(new ControlAdapter() {
-		public void controlResized(ControlEvent e) {
-			Rectangle r = scrollComposite.getClientArea();
-			scrollComposite.setMinSize(parent.computeSize(r.width, SWT.DEFAULT));
-		}
-	});
-
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch()) {
-			display.sleep();
-		}
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet167.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet167.java
deleted file mode 100644
index 9b6211b..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet167.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Create two ScrolledComposites that scroll in tandem.
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.custom.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet167 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setLayout(new FillLayout());
-
-	final ScrolledComposite sc1 = new ScrolledComposite (shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
-	Button button1 = new Button (sc1, SWT.PUSH);
-	button1.setText ("Button 1");
-	button1.setSize (400, 300);
-	sc1.setContent (button1);
-
-	final ScrolledComposite sc2 = new ScrolledComposite (shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
-	Button button2 = new Button(sc2, SWT.PUSH);
-	button2.setText ("Button 2");
-	button2.setSize (300, 400);
-	sc2.setContent (button2);
-
-	final ScrollBar vBar1 = sc1.getVerticalBar ();
-	final ScrollBar vBar2 = sc2.getVerticalBar ();
-	final ScrollBar hBar1 = sc1.getHorizontalBar ();
-	final ScrollBar hBar2 = sc2.getHorizontalBar ();
-	SelectionListener listener1 = new SelectionAdapter () {
-		public void widgetSelected (SelectionEvent e) {
-			int x =  hBar1.getSelection() * (hBar2.getMaximum() - hBar2.getThumb()) / Math.max(1, hBar1.getMaximum() - hBar1.getThumb());
-			int y =  vBar1.getSelection() * (vBar2.getMaximum() - vBar2.getThumb()) / Math.max(1, vBar1.getMaximum() - vBar1.getThumb());
-			sc2.setOrigin (x, y);
-		}
-	};
-	SelectionListener listener2 = new SelectionAdapter () {
-		public void widgetSelected (SelectionEvent e) {
-			int x =  hBar2.getSelection() * (hBar1.getMaximum() - hBar1.getThumb()) / Math.max(1, hBar2.getMaximum() - hBar2.getThumb());
-			int y =  vBar2.getSelection() * (vBar1.getMaximum() - vBar1.getThumb()) / Math.max(1, vBar2.getMaximum() - vBar2.getThumb());
-			sc1.setOrigin (x, y);
-		}
-	};
-	vBar1.addSelectionListener (listener1);
-	hBar1.addSelectionListener (listener1);
-	vBar2.addSelectionListener (listener2);
-	hBar2.addSelectionListener (listener2);
-
-	shell.setSize (400, 300);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet168.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet168.java
deleted file mode 100644
index e74245e..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet168.java
+++ /dev/null
@@ -1,57 +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.snippets;
-
-/*
- * Draw lines and polygons with different cap and join styles
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.1
- */
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet168 {
-
-public static void main(String[] args) {
-	final Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.addListener(SWT.Paint, new Listener() {
-		public void handleEvent(Event event) {
-			int x = 20, y = 20, w = 120, h = 60;
-			GC gc = event.gc;
-			gc.setForeground(display.getSystemColor(SWT.COLOR_BLUE));
-			gc.setLineWidth(10);
-			int[] caps = {SWT.CAP_FLAT, SWT.CAP_ROUND, SWT.CAP_SQUARE};
-			for (int i = 0; i < caps.length; i++) {
-				gc.setLineCap(caps[i]);
-				gc.drawLine(x, y, x + w, y);
-				y += 20;
-			}
-			int[] joins = {SWT.JOIN_BEVEL, SWT.JOIN_MITER, SWT.JOIN_ROUND};
-			for (int i = 0; i < joins.length; i++) {
-				gc.setLineJoin(joins[i]);
-				gc.drawPolygon(new int[] {x, y, x + w/2, y + h, x + w, y});
-				y += h + 20;
-			}
-		}
-	});
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch()) display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet169.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet169.java
deleted file mode 100644
index c3da321..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet169.java
+++ /dev/null
@@ -1,54 +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.snippets;
-
-/*
- * Make a toggle button have radio behavior
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet169 {
-public static void main (String [] args) {
-	Display display = new Display ();
-	final Shell shell = new Shell (display);
-	shell.setLayout (new FillLayout ());
-	Listener listener = new Listener () {
-		public void handleEvent (Event e) {
-			Control [] children = shell.getChildren ();
-			for (int i=0; i<children.length; i++) {
-				Control child = children [i];
-				if (e.widget != child && child instanceof Button && (child.getStyle () & SWT.TOGGLE) != 0) {
-					((Button) child).setSelection (false);
-				}
-			}
-			((Button) e.widget).setSelection (true);
-		}
-	};
-	for (int i=0; i<20; i++) {
-		Button button = new Button (shell, SWT.TOGGLE);
-		button.setText ("B" + i);
-		button.addListener (SWT.Selection, listener);
-		if (i == 0) button.setSelection (true);
-	}
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet17.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet17.java
deleted file mode 100644
index f0ff83b..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet17.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Slider example snippet: print scroll event details
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet17 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Slider slider = new Slider (shell, SWT.HORIZONTAL);
-	slider.setBounds (10, 10, 200, 32);
-	slider.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event event) {
-			String string = "SWT.NONE";
-			switch (event.detail) {
-				case SWT.DRAG: string = "SWT.DRAG"; break;
-				case SWT.HOME: string = "SWT.HOME"; break;
-				case SWT.END: string = "SWT.END"; break;
-				case SWT.ARROW_DOWN: string = "SWT.ARROW_DOWN"; break;
-				case SWT.ARROW_UP: string = "SWT.ARROW_UP"; break;
-				case SWT.PAGE_DOWN: string = "SWT.PAGE_DOWN"; break;
-				case SWT.PAGE_UP: string = "SWT.PAGE_UP"; break;
-			}
-			System.out.println ("Scroll detail -> " + string);
-		}
-	});
-	shell.open ();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet170.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet170.java
deleted file mode 100644
index 317b9e7..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet170.java
+++ /dev/null
@@ -1,63 +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.snippets;
-
-/*
- * Create a Tree with columns
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.1
- */
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet170 {
-	public static void main(String[] args) {
-		Display display = new Display();
-		final Shell shell = new Shell(display);
-		shell.setLayout(new FillLayout());
-		Tree tree = new Tree(shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
-		tree.setHeaderVisible(true);
-		TreeColumn column1 = new TreeColumn(tree, SWT.LEFT);
-		column1.setText("Column 1");
-		column1.setWidth(200);
-		TreeColumn column2 = new TreeColumn(tree, SWT.CENTER);
-		column2.setText("Column 2");
-		column2.setWidth(200);
-		TreeColumn column3 = new TreeColumn(tree, SWT.RIGHT);
-		column3.setText("Column 3");
-		column3.setWidth(200);
-		for (int i = 0; i < 4; i++) {
-			TreeItem item = new TreeItem(tree, SWT.NONE);
-			item.setText(new String[] { "item " + i, "abc", "defghi" });
-			for (int j = 0; j < 4; j++) {
-				TreeItem subItem = new TreeItem(item, SWT.NONE);
-				subItem.setText(new String[] { "subitem " + j, "jklmnop", "qrs" });
-				for (int k = 0; k < 4; k++) {
-					TreeItem subsubItem = new TreeItem(subItem, SWT.NONE);
-					subsubItem.setText(new String[] { "subsubitem " + k, "tuv", "wxyz" });
-				}
-			}
-		}
-		shell.pack();
-		shell.open();
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch()) {
-				display.sleep();
-			}
-		}
-		display.dispose();
-	}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet171.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet171.java
deleted file mode 100644
index 797baec..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet171.java
+++ /dev/null
@@ -1,290 +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.snippets;
-
-/*
- * Drag and Drop example snippet: define data transfer types that subclass each
- * other
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.1
- */
-import java.io.*;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.dnd.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet171 {
-
-/*
- * The data being transferred is an <bold>array of type MyType</bold> where
- * MyType is define as:
- */
-static class MyType {
-	String fileName;
-	long fileLength;
-	long lastModified;
-}
-
-static class MyTransfer extends ByteArrayTransfer {
-
-	private static final String MYTYPENAME = "MytypeTransfer";
-	private static final int MYTYPEID = registerType(MYTYPENAME);
-	private static MyTransfer _instance = new MyTransfer();
-
-	public static Transfer getInstance() {
-		return _instance;
-	}
-
-	byte[] javaToByteArray(Object object) {
-		MyType data = (MyType) object;
-		try {
-			ByteArrayOutputStream out = new ByteArrayOutputStream();
-			DataOutputStream writeOut = new DataOutputStream(out);
-			byte[] buffer = data.fileName.getBytes();
-			writeOut.writeInt(buffer.length);
-			writeOut.write(buffer);
-			writeOut.writeLong(data.fileLength);
-			writeOut.writeLong(data.lastModified);
-			buffer = out.toByteArray();
-			writeOut.close();
-			return buffer;
-		} catch (IOException e) {
-		}
-		return null;
-	}
-
-	Object byteArrayToJava(byte[] bytes) {
-		MyType data = new MyType();
-		try {
-			ByteArrayInputStream in = new ByteArrayInputStream(bytes);
-			DataInputStream readIn = new DataInputStream(in);
-			int size = readIn.readInt();
-			byte[] buffer = new byte[size];
-			readIn.read(buffer);
-			data.fileName = new String(buffer);
-			data.fileLength = readIn.readLong();
-			data.lastModified = readIn.readLong();
-			readIn.close();
-		} catch (IOException ex) {
-			return null;
-		}
-		return data;
-	}
-
-	public void javaToNative(Object object, TransferData transferData) {
-		if (!checkMyType(object) || !isSupportedType(transferData)) {
-			DND.error(DND.ERROR_INVALID_DATA);
-		}
-		byte[] buffer = javaToByteArray(object);
-		super.javaToNative(buffer, transferData);
-	}
-
-	public Object nativeToJava(TransferData transferData) {
-		if (isSupportedType(transferData)) {
-			byte[] buffer = (byte[]) super.nativeToJava(transferData);
-			if (buffer == null)
-				return null;
-			return byteArrayToJava(buffer);
-		}
-		return null;
-	}
-
-	protected String[] getTypeNames() {
-		return new String[] { MYTYPENAME };
-	}
-
-	protected int[] getTypeIds() {
-		return new int[] { MYTYPEID };
-	}
-
-	boolean checkMyType(Object object) {
-		return object != null && object instanceof MyType;
-	}
-
-	protected boolean validate(Object object) {
-		return checkMyType(object);
-	}
-}
-
-/*
- * The data being transferred is an <bold>array of type MyType2</bold>
- * where MyType2 is define as:
- */
-static class MyType2 extends MyType {
-	String version;
-}
-
-static class MyTransfer2 extends MyTransfer {
-
-	private static final String MYTYPE2NAME = "Mytype2Transfer";
-	private static final int MYTYPE2ID = registerType(MYTYPE2NAME);
-	private static MyTransfer _instance = new MyTransfer2();
-
-	public static Transfer getInstance() {
-		return _instance;
-	}
-
-	protected String[] getTypeNames() {
-		return new String[] { MYTYPE2NAME };
-	}
-
-	protected int[] getTypeIds() {
-		return new int[] { MYTYPE2ID };
-	}
-
-	byte[] javaToByteArray(Object object) {
-		MyType2 data = (MyType2) object;
-		try {
-			ByteArrayOutputStream out = new ByteArrayOutputStream();
-			DataOutputStream writeOut = new DataOutputStream(out);
-			byte[] buffer = data.fileName.getBytes();
-			writeOut.writeInt(buffer.length);
-			writeOut.write(buffer);
-			writeOut.writeLong(data.fileLength);
-			writeOut.writeLong(data.lastModified);
-			buffer = data.version.getBytes();
-			writeOut.writeInt(buffer.length);
-			writeOut.write(buffer);
-			buffer = out.toByteArray();
-			writeOut.close();
-			return buffer;
-		} catch (IOException e) {
-		}
-		return null;
-	}
-
-	Object byteArrayToJava(byte[] bytes) {
-		MyType2 data = new MyType2();
-		try {
-			ByteArrayInputStream in = new ByteArrayInputStream(bytes);
-			DataInputStream readIn = new DataInputStream(in);
-			int size = readIn.readInt();
-			byte[] buffer = new byte[size];
-			readIn.read(buffer);
-			data.fileName = new String(buffer);
-			data.fileLength = readIn.readLong();
-			data.lastModified = readIn.readLong();
-			size = readIn.readInt();
-			buffer = new byte[size];
-			readIn.read(buffer);
-			data.version = new String(buffer);
-			readIn.close();
-		} catch (IOException ex) {
-			return null;
-		}
-		return data;
-	}
-
-	public void javaToNative(Object object, TransferData transferData) {
-		if (!checkMyType2(object)) {
-			DND.error(DND.ERROR_INVALID_DATA);
-		}
-		super.javaToNative(object, transferData);
-	}
-
-	boolean checkMyType2(Object object) {
-		if (!checkMyType(object))
-			return false;
-		return object != null && object instanceof MyType2;
-	}
-
-	protected boolean validate(Object object) {
-		return checkMyType2(object);
-	}
-}
-
-public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setLayout(new FillLayout());
-	final Label label1 = new Label(shell, SWT.BORDER | SWT.WRAP);
-	label1.setText("Drag Source for MyData and MyData2");
-	final Label label2 = new Label(shell, SWT.BORDER | SWT.WRAP);
-	label2.setText("Drop Target for MyData");
-	final Label label3 = new Label(shell, SWT.BORDER | SWT.WRAP);
-	label3.setText("Drop Target for MyData2");
-
-	DragSource source = new DragSource(label1, DND.DROP_COPY);
-	source.setTransfer(new Transfer[] { MyTransfer.getInstance(),
-			MyTransfer2.getInstance() });
-	source.addDragListener(new DragSourceAdapter() {
-		public void dragSetData(DragSourceEvent event) {
-			MyType2 myType = new MyType2();
-			myType.fileName = "C:\\abc.txt";
-			myType.fileLength = 1000;
-			myType.lastModified = 12312313;
-			myType.version = "version 2";
-			event.data = myType;
-		}
-	});
-	DropTarget targetMyType = new DropTarget(label2, DND.DROP_COPY | DND.DROP_DEFAULT);
-	targetMyType.setTransfer(new Transfer[] { MyTransfer.getInstance() });
-	targetMyType.addDropListener(new DropTargetAdapter() {
-		public void dragEnter(DropTargetEvent event) {
-			if (event.detail == DND.DROP_DEFAULT)
-				event.detail = DND.DROP_COPY;
-		}
-
-		public void dragOperationChanged(DropTargetEvent event) {
-			if (event.detail == DND.DROP_DEFAULT)
-				event.detail = DND.DROP_COPY;
-		}
-
-		public void drop(DropTargetEvent event) {
-			if (event.data != null) {
-				MyType myType = (MyType) event.data;
-				if (myType != null) {
-					String string = "MyType: " + myType.fileName;
-					label2.setText(string);
-				}
-			}
-		}
-
-	});
-	DropTarget targetMyType2 = new DropTarget(label3, DND.DROP_COPY	| DND.DROP_DEFAULT);
-	targetMyType2.setTransfer(new Transfer[] { MyTransfer2.getInstance() });
-	targetMyType2.addDropListener(new DropTargetAdapter() {
-		public void dragEnter(DropTargetEvent event) {
-			if (event.detail == DND.DROP_DEFAULT)
-				event.detail = DND.DROP_COPY;
-		}
-
-		public void dragOperationChanged(DropTargetEvent event) {
-			if (event.detail == DND.DROP_DEFAULT)
-				event.detail = DND.DROP_COPY;
-		}
-
-		public void drop(DropTargetEvent event) {
-			if (event.data != null) {
-				MyType2 myType = (MyType2) event.data;
-				if (myType != null) {
-					String string = "MyType2: " + myType.fileName + ":"
-							+ myType.version;
-					label3.setText(string);
-				}
-			}
-		}
-
-	});
-	shell.setSize(300, 200);
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet172.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet172.java
deleted file mode 100644
index 671eff6..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet172.java
+++ /dev/null
@@ -1,88 +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.snippets;
-
-/*
- * GridLayout snippet: align widgets in a GridLayout
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet172 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	GridLayout layout = new GridLayout(4, false);
-	shell.setLayout(layout);
-	
-	Button b = new Button(shell, SWT.PUSH);
-	b.setText("LEFT, TOP");
-	b.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, true, 1, 1));
-	b = new Button(shell, SWT.PUSH);
-	b.setText("LEFT, CENTER");
-	b.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, true, 1, 1));
-	b = new Button(shell, SWT.PUSH);
-	b.setText("LEFT, BOTTOM");
-	b.setLayoutData(new GridData(SWT.LEFT, SWT.BOTTOM, true, true, 1, 1));
-	b = new Button(shell, SWT.PUSH);
-	b.setText("LEFT, FILL");
-	b.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, true, true, 1, 1));
-	b = new Button(shell, SWT.PUSH);
-	b.setText("CENTER, TOP");
-	b.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, true, true, 1, 1));
-	b = new Button(shell, SWT.PUSH);
-	b.setText("CENTER, CENTER");
-	b.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true, 1, 1));
-	b = new Button(shell, SWT.PUSH);
-	b.setText("CENTER, BOTTOM");
-	b.setLayoutData(new GridData(SWT.CENTER, SWT.BOTTOM, true, true, 1, 1));
-	b = new Button(shell, SWT.PUSH);
-	b.setText("CENTER, FILL");
-	b.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, true, true, 1, 1));
-	b = new Button(shell, SWT.PUSH);
-	b.setText("RIGHT, TOP");
-	b.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, true, true, 1, 1));
-	b = new Button(shell, SWT.PUSH);
-	b.setText("RIGHT, CENTER");
-	b.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true, 1, 1));
-	b = new Button(shell, SWT.PUSH);
-	b.setText("RIGHT, BOTTOM");
-	b.setLayoutData(new GridData(SWT.RIGHT, SWT.BOTTOM, true, true, 1, 1));
-	b = new Button(shell, SWT.PUSH);
-	b.setText("RIGHT, FILL");
-	b.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, true, true, 1, 1));
-	b = new Button(shell, SWT.PUSH);
-	b.setText("FILL, TOP");
-	b.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true, 1, 1));
-	b = new Button(shell, SWT.PUSH);
-	b.setText("FILL, CENTER");
-	b.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true, 1, 1));
-	b = new Button(shell, SWT.PUSH);
-	b.setText("FILL, BOTTOM");
-	b.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM, true, true, 1, 1));
-	b = new Button(shell, SWT.PUSH);
-	b.setText("FILL, FILL");
-	b.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
-	
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet173.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet173.java
deleted file mode 100644
index 42b3bec..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet173.java
+++ /dev/null
@@ -1,93 +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.snippets;
-
-/*
- * Browser snippet: bring up a browser (pop-up blocker)
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.1
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.browser.*;
-
-public class Snippet173 {
-
-public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setText("Main Window");
-	shell.setLayout(new FillLayout());
-	Browser browser = new Browser(shell, SWT.NONE);
-	initialize(display, browser);
-	shell.open();
-	/* any website with popups */
-	browser.setUrl("http://www.cnn.com");
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-		}
-		display.dispose();
-	}
-
-/* register WindowEvent listeners */
-static void initialize(final Display display, Browser browser) {
-	browser.addOpenWindowListener(new OpenWindowListener() {
-		public void open(WindowEvent event) {
-			Shell shell = new Shell(display);
-			shell.setText("New Window");
-			shell.setLayout(new FillLayout());
-			Browser browser = new Browser(shell, SWT.NONE);
-			initialize(display, browser);
-			event.browser = browser;
-		}
-	});
-	browser.addVisibilityWindowListener(new VisibilityWindowListener() {
-		public void hide(WindowEvent event) {
-			Browser browser = (Browser)event.widget;
-			Shell shell = browser.getShell();
-			shell.setVisible(false);
-		}
-		public void show(WindowEvent event) {
-			Browser browser = (Browser)event.widget;
-			final Shell shell = browser.getShell();
-			/* popup blocker - ignore windows with no style */
-			if (!event.addressBar && !event.menuBar && !event.statusBar && !event.toolBar) {
-				System.out.println("Popup blocked.");
-				event.display.asyncExec(new Runnable() {
-					public void run() {
-						shell.close();
-					}
-				});
-				return;
-			}
-			if (event.location != null) shell.setLocation(event.location);
-			if (event.size != null) {
-				Point size = event.size;
-				shell.setSize(shell.computeSize(size.x, size.y));
-			}
-			shell.open();
-		}
-	});
-	browser.addCloseWindowListener(new CloseWindowListener() {
-		public void close(WindowEvent event) {
-			Browser browser = (Browser)event.widget;
-			Shell shell = browser.getShell();
-			shell.close();
-		}
-	});
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet174.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet174.java
deleted file mode 100644
index 84014a1..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet174.java
+++ /dev/null
@@ -1,100 +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:
- *     Sebastian Davids - initial implementation
- *     IBM Corporation
- *******************************************************************************/
-package org.eclipse.swt.snippets;
-
-/*
- * SWT OpenGL snippet: draw a square
- * 
- * This snippet requires the experimental org.eclipse.swt.opengl plugin, which
- * is not included in swt by default.  For information on this plugin see
- * http://www.eclipse.org/swt/opengl/opengl.html  
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-import org.eclipse.opengl.*;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.opengl.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet174 {
-
-public static void main(String[] args) {
-    Display display = new Display();
-    Shell shell = new Shell(display);
-    shell.setText("OpenGL in SWT");
-    shell.setLayout(new FillLayout());
-    GLData data = new GLData();
-    data.doubleBuffer = true;
-    final GLCanvas canvas = new GLCanvas(shell, SWT.NO_BACKGROUND, data);
-    canvas.addControlListener(new ControlAdapter() {
-        public void controlResized(ControlEvent e) {
-            resize(canvas);
-        }
-    });
-    init(canvas);
-    new Runnable() {
-        public void run() {
-            if (canvas.isDisposed()) return;
-            render();
-            canvas.swapBuffers();
-            canvas.getDisplay().timerExec(50, this);
-        }
-    }.run();
-    shell.open();
-    while (!shell.isDisposed()) {
-        if (!display.readAndDispatch()) display.sleep();
-    }
-    display.dispose();
-}
-
-static void init(GLCanvas canvas) {
-    canvas.setCurrent();
-    resize(canvas);
-    GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
-    GL.glColor3f(0.0f, 0.0f, 0.0f);
-    GL.glClearDepth(1.0f);
-    GL.glEnable(GL.GL_DEPTH_TEST);
-    GL.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST);
-}
-
-static void render() {
-    GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
-    GL.glLoadIdentity();
-    GL.glTranslatef(0.0f, 0.0f, -6.0f);
-    GL.glBegin(GL.GL_QUADS);
-    GL.glVertex3f(-1.0f, 1.0f, 0.0f);
-    GL.glVertex3f(1.0f, 1.0f, 0.0f);
-    GL.glVertex3f(1.0f, -1.0f, 0.0f);
-    GL.glVertex3f(-1.0f, -1.0f, 0.0f);
-    GL.glEnd();
-}
-
-static void resize(GLCanvas canvas) {
-    canvas.setCurrent();
-    Rectangle rect = canvas.getClientArea();
-    int width = rect.width;
-    int height = Math.max(rect.height, 1);
-    GL.glViewport(0, 0, width, height);
-    GL.glMatrixMode(GL.GL_PROJECTION);
-    GL.glLoadIdentity();
-    float aspect = (float) width / (float) height;
-    GLU.gluPerspective(45.0f, aspect, 0.5f, 400.0f);
-    GL.glMatrixMode(GL.GL_MODELVIEW);
-    GL.glLoadIdentity();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet175.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet175.java
deleted file mode 100644
index a4fc973..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet175.java
+++ /dev/null
@@ -1,72 +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.snippets;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-/*
- * Exclude a widget from a GridLayout
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.1
- */
-
-public class Snippet175 {
-
-public static void main(String[] args) {
-
-	Display display = new Display();
-	final Shell shell = new Shell(display);
-	shell.setLayout(new GridLayout(3, false));
-
-	Button b = new Button(shell, SWT.PUSH);
-	b.setText("Button 0");
-
-	final Button bHidden = new Button(shell, SWT.PUSH);
-	bHidden.setText("Button 1");
-	GridData data = new GridData();
-	data.exclude = true;
-	data.horizontalSpan = 2;
-	data.horizontalAlignment = SWT.FILL;
-	bHidden.setLayoutData(data);
-
-	b = new Button(shell, SWT.PUSH);
-	b.setText("Button 2");
-	b = new Button(shell, SWT.PUSH);
-	b.setText("Button 3");
-	b = new Button(shell, SWT.PUSH);
-	b.setText("Button 4");
-
-	b = new Button(shell, SWT.CHECK);
-	b.setText("hide");
-	b.setSelection(true);
-	b.addListener(SWT.Selection, new Listener() {
-		public void handleEvent(Event e) {
-			Button b = (Button) e.widget;
-			GridData data = (GridData) bHidden.getLayoutData();
-			data.exclude = b.getSelection();
-			bHidden.setVisible(!data.exclude);
-			shell.layout(false);
-		}
-	});
-	shell.setSize(400, 400);
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet176.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet176.java
deleted file mode 100644
index 92630db..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet176.java
+++ /dev/null
@@ -1,72 +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.snippets;
-
-/*
- * GridLayout snippet: align widgets in a horizontal row
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.1
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet176 {
-
-	public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	RowLayout layout = new RowLayout(SWT.HORIZONTAL);
-	layout.wrap = true;
-	layout.fill = false;
-	layout.justify = true;
-	shell.setLayout(layout);
-
-	Button b = new Button(shell, SWT.PUSH);
-	b.setText("Button 1");
-	b = new Button(shell, SWT.PUSH);
-
-	b.setText("Button 2");
-
-	b = new Button(shell, SWT.PUSH);
-	b.setText("Button 3");
-
-	b = new Button(shell, SWT.PUSH);
-	b.setText("Not shown");
-	b.setVisible(false);
-	RowData data = new RowData();
-	data.exclude = true;
-	b.setLayoutData(data);
-
-	b = new Button(shell, SWT.PUSH);
-	b.setText("Button 200 high");
-	data = new RowData();
-	data.height = 200;
-	b.setLayoutData(data);
-
-	b = new Button(shell, SWT.PUSH);
-	b.setText("Button 200 wide");
-	data = new RowData();
-	data.width = 200;
-	b.setLayoutData(data);
-
-	shell.pack();
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet177.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet177.java
deleted file mode 100644
index 42ab49f..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet177.java
+++ /dev/null
@@ -1,72 +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.snippets;
-
-/*
- * GridLayout snippet: align widgets in a vertical column
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.1
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet177 {
-
-public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	RowLayout layout = new RowLayout(SWT.VERTICAL);
-	layout.wrap = true;
-	layout.fill = true;
-	layout.justify = false;
-	shell.setLayout(layout);
-
-	Button b = new Button(shell, SWT.PUSH);
-	b.setText("Button 1");
-	b = new Button(shell, SWT.PUSH);
-
-	b.setText("Button 2");
-
-	b = new Button(shell, SWT.PUSH);
-	b.setText("Button 3");
-
-	b = new Button(shell, SWT.PUSH);
-	b.setText("Not shown");
-	b.setVisible(false);
-	RowData data = new RowData();
-	data.exclude = true;
-	b.setLayoutData(data);
-
-	b = new Button(shell, SWT.PUSH);
-	b.setText("Button 200 high");
-	data = new RowData();
-	data.height = 200;
-	b.setLayoutData(data);
-
-	b = new Button(shell, SWT.PUSH);
-	b.setText("Button 200 wide");
-	data = new RowData();
-	data.width = 200;
-	b.setLayoutData(data);
-
-	shell.pack();
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet178.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet178.java
deleted file mode 100644
index 30754bc..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet178.java
+++ /dev/null
@@ -1,131 +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.snippets;
-
-/*
- * How to access About, Preferences and Quit menus on carbon.
- * NOTE: This snippet uses internal SWT packages that are
- * subject to change without notice.
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-
-import org.eclipse.swt.internal.*;
-import org.eclipse.swt.internal.carbon.*;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet178 {
-
-	private static final int kHICommandPreferences = ('p' << 24) + ('r' << 16)
-			+ ('e' << 8) + 'f';
-
-	private static final int kHICommandAbout = ('a' << 24) + ('b' << 16)
-			+ ('o' << 8) + 'u';
-
-	private static final int kHICommandServices = ('s' << 24) + ('e' << 16)
-			+ ('r' << 8) + 'v';
-
-public static void main(String[] arg) {
-	Display.setAppName("AppMenu"); // sets name in Dock
-	Display display = new Display();
-	hookApplicationMenu(display, "About AppMenu");
-	Shell shell = new Shell(display);
-	shell.setText("Main Window");
-	shell.open();
-	while (!shell.isDisposed())
-		if (!display.readAndDispatch())
-			display.sleep();
-
-	display.dispose();
-}
-
-static void hookApplicationMenu(Display display, final String aboutName) {
-	// Callback target
-	Object target = new Object() {
-		int commandProc(int nextHandler, int theEvent, int userData) {
-			if (OS.GetEventKind(theEvent) == OS.kEventProcessCommand) {
-				HICommand command = new HICommand();
-				OS.GetEventParameter(theEvent, OS.kEventParamDirectObject,
-						OS.typeHICommand, null, HICommand.sizeof, null,
-						command);
-				switch (command.commandID) {
-				case kHICommandPreferences:
-					return handleCommand("Preferences"); //$NON-NLS-1$
-				case kHICommandAbout:
-					return handleCommand(aboutName);
-				default:
-					break;
-				}
-			}
-			return OS.eventNotHandledErr;
-		}
-
-		int handleCommand(String command) {
-			Shell shell = new Shell();
-			MessageBox preferences = new MessageBox(shell, SWT.ICON_WARNING);
-			preferences.setText(command);
-			preferences.open();
-			shell.dispose();
-			return OS.noErr;
-		}
-	};
-
-	final Callback commandCallback = new Callback(target, "commandProc", 3); //$NON-NLS-1$
-	int commandProc = commandCallback.getAddress();
-	if (commandProc == 0) {
-		commandCallback.dispose();
-		return; // give up
-	}
-
-	// Install event handler for commands
-	int[] mask = new int[] { OS.kEventClassCommand, OS.kEventProcessCommand };
-	OS.InstallEventHandler(OS.GetApplicationEventTarget(), commandProc,
-			mask.length / 2, mask, 0, null);
-
-	// create About ... menu command
-	int[] outMenu = new int[1];
-	short[] outIndex = new short[1];
-	if (OS.GetIndMenuItemWithCommandID(0, kHICommandPreferences, 1,
-			outMenu, outIndex) == OS.noErr
-			&& outMenu[0] != 0) {
-		int menu = outMenu[0];
-
-		int l = aboutName.length();
-		char buffer[] = new char[l];
-		aboutName.getChars(0, l, buffer, 0);
-		int str = OS.CFStringCreateWithCharacters(OS.kCFAllocatorDefault,
-				buffer, l);
-		OS.InsertMenuItemTextWithCFString(menu, str, (short) 0, 0,
-				kHICommandAbout);
-		OS.CFRelease(str);
-
-		// add separator between About & Preferences
-		OS.InsertMenuItemTextWithCFString(menu, 0, (short) 1,
-				OS.kMenuItemAttrSeparator, 0);
-
-		// enable pref menu
-		OS.EnableMenuCommand(menu, kHICommandPreferences);
-
-		// disable services menu
-		OS.DisableMenuCommand(menu, kHICommandServices);
-	}
-
-	// schedule disposal of callback object
-	display.disposeExec(new Runnable() {
-		public void run() {
-			commandCallback.dispose();
-		}
-	});
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet179.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet179.java
deleted file mode 100644
index 13805f8..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet179.java
+++ /dev/null
@@ -1,136 +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.snippets;
-
-/*
- * Text example snippet: verify input (format for date)
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import java.util.*;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet179 {
-
-public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setLayout(new GridLayout());
-	final Text text = new Text(shell, SWT.BORDER);
-	text.setText("YYYY/MM/DD");;	
-	final Calendar calendar = Calendar.getInstance();
-	text.addListener(SWT.Verify, new Listener() {
-		boolean ignore;
-		public void handleEvent(Event e) {
-			if (ignore) return;
-			e.doit = false;
-			StringBuffer buffer = new StringBuffer(e.text);
-			char[] chars = new char[buffer.length()];
-			buffer.getChars(0, chars.length, chars, 0);
-			if (e.character == '\b') {
-				for (int i = e.start; i < e.end; i++) {
-					switch (i) {
-						case 0: /* [Y]YYY */
-						case 1: /* Y[Y]YY */
-						case 2: /* YY[Y]Y */
-						case 3: /* YYY[Y] */ {
-							buffer.append('Y'); 	break;
-						}
-						case 5: /* [M]M*/
-						case 6: /* M[M] */{
-							buffer.append('M'); break;
-						}
-						case 8: /* [D]D */
-						case 9: /* D[D] */ {
-							buffer.append('D'); break;
-						}
-						case 4: /* YYYY[/]MM */
-						case 7: /* MM[/]DD */ {
-							buffer.append('/'); break;
-						}
-						default:
-							return;
-					}
-				}
-				text.setSelection(e.start, e.start + buffer.length());
-				ignore = true;
-				text.insert(buffer.toString());
-				ignore = false;
-				text.setSelection(e.start, e.start);
-				return;
-			}
-		
-			int start = e.start;
-			if (start > 9) return;
-			int index = 0;
-			for (int i = 0; i < chars.length; i++) {
-				if (start + index == 4 || start + index == 7) {
-					if (chars[i] == '/') {
-						index++;
-						continue;
-					}
-					buffer.insert(index++, '/');
-				}
-				if (chars[i] < '0' || '9' < chars[i]) return;
-				if (start + index == 5 &&  '1' < chars[i]) return; /* [M]M */
-				if (start + index == 8 &&  '3' < chars[i]) return; /* [D]D */
-				index++;
-			}
-			String newText = buffer.toString();
-			int length = newText.length();
-			StringBuffer date = new StringBuffer(text.getText());
-			date.replace(e.start, e.start + length, newText);
-			calendar.set(Calendar.YEAR, 1901);
-			calendar.set(Calendar.MONTH, Calendar.JANUARY);
-			calendar.set(Calendar.DATE, 1);
-			String yyyy = date.substring(0, 4);
-			if (yyyy.indexOf('Y') == -1) {
-				int year = Integer.parseInt(yyyy);
-				calendar.set(Calendar.YEAR, year);
-			}
-			String mm = date.substring(5, 7);
-			if (mm.indexOf('M') == -1) {
-				int month =  Integer.parseInt(mm) - 1;
-				int maxMonth = calendar.getActualMaximum(Calendar.MONTH);
-				if (0 > month || month > maxMonth) return;
-				calendar.set(Calendar.MONTH, month);
-			}
-			String dd = date.substring(8,10);
-			if (dd.indexOf('D') == -1) {
-				int day = Integer.parseInt(dd);
-				int maxDay = calendar.getActualMaximum(Calendar.DATE);
-				if (1 > day || day > maxDay) return;
-				calendar.set(Calendar.DATE, day);
-			} else {
-				if (calendar.get(Calendar.MONTH)  == Calendar.FEBRUARY) {
-					char firstChar = date.charAt(8);
-					if (firstChar != 'D' && '2' < firstChar) return;
-				}
-			}
-			text.setSelection(e.start, e.start + length);
-			ignore = true;
-			text.insert(newText);
-			ignore = false;
-		}
-	});
-	shell.pack();
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet18.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet18.java
deleted file mode 100644
index 808bfb9..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet18.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * ToolBar example snippet: create a tool bar (text)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet18 {
-
-public static void main (String [] args) {
-	Shell shell = new Shell ();
-	ToolBar bar = new ToolBar (shell, SWT.BORDER);
-	for (int i=0; i<8; i++) {
-		ToolItem item = new ToolItem (bar, SWT.PUSH);
-		item.setText ("Item " + i);
-	}
-	bar.pack ();
-	shell.open ();
-	Display display = shell.getDisplay ();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-} 
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet180.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet180.java
deleted file mode 100644
index 0e7f31c..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet180.java
+++ /dev/null
@@ -1,63 +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.snippets;
-
-/*
- * Create a non-rectangular shell to simulate transparency
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet180 {
-
-public static void main(String[] args) {
-	Display display = new Display();
-	final Image image = display.getSystemImage(SWT.ICON_WARNING);
-	//Shell must be created with style SWT.NO_TRIM
-	final Shell shell = new Shell(display, SWT.NO_TRIM | SWT.ON_TOP);
-	shell.setBackground(display.getSystemColor(SWT.COLOR_RED));
-	//define a region 
-	Region region = new Region();
-	Rectangle pixel = new Rectangle(0, 0, 1, 1);
-	for (int y = 0; y < 200; y+=2) {
-			for (int x = 0; x < 200; x+=2) {
-				pixel.x = x;
-				pixel.y = y;
-				region.add(pixel);
-			}
-		}
-	//define the shape of the shell using setRegion
-	shell.setRegion(region);
-	Rectangle size = region.getBounds();
-	shell.setSize(size.width, size.height);
-	shell.addPaintListener(new PaintListener() {
-		public void paintControl(PaintEvent e) {
-			Rectangle bounds = image.getBounds();
-			Point size = shell.getSize();
-			e.gc.drawImage(image, 0, 0, bounds.width, bounds.height, 10, 10, size.x-20, size.y-20);
-		}
-	});
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	region.dispose();
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet181.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet181.java
deleted file mode 100644
index 2dd1588..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet181.java
+++ /dev/null
@@ -1,81 +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.snippets;
-
-/*
- * Allow user to reorder columns and reorder columns programmatically.
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.1
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet181 {
-
-	public static void main(String[] args) {
-		Display display = new Display();
-		Shell shell = new Shell(display);
-		shell.setLayout(new RowLayout(SWT.HORIZONTAL));
-		final Table table = new Table(shell, SWT.BORDER | SWT.CHECK);
-		table.setLayoutData(new RowData(-1, 300));
-		table.setHeaderVisible(true);
-		TableColumn column = new TableColumn(table, SWT.LEFT);
-		column.setText("Column 0");
-		column = new TableColumn(table, SWT.CENTER);
-		column.setText("Column 1");
-		column = new TableColumn(table, SWT.CENTER);
-		column.setText("Column 2");
-		column = new TableColumn(table, SWT.CENTER);
-		column.setText("Column 3");
-		column = new TableColumn(table, SWT.CENTER);
-		column.setText("Column 4");
-		for (int i = 0; i < 100; i++) {
-			TableItem item = new TableItem(table, SWT.NONE);
-			String[] text = new String[]{i+" 0", i+" 1", i+" 2", i+" 3", i+" 4"};
-			item.setText(text);
-		}
-		Listener listener = new Listener() {
-			public void handleEvent(Event e) {
-				System.out.println("Move "+e.widget);
-			}
-		};
-		TableColumn[] columns = table.getColumns();
-		for (int i = 0; i < columns.length; i++) {
-			columns[i].pack();
-			columns[i].setMoveable(true);
-			columns[i].addListener(SWT.Move, listener);
-		}
-		Button b = new Button(shell, SWT.PUSH);
-		b.setText("invert column order");
-		b.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				int[] order = table.getColumnOrder();
-				for (int i = 0; i < order.length / 2; i++) {
-					int temp = order[i];
-					order[i] = order[order.length - i - 1];
-					order[order.length - i - 1] = temp;
-				}
-				table.setColumnOrder(order);
-			}
-		});
-		shell.pack();
-		shell.open();
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		display.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet182.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet182.java
deleted file mode 100644
index f710f21..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet182.java
+++ /dev/null
@@ -1,40 +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.snippets;
-
-/*
- * Link example snippet: create a link widget
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.1
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet182 {
-
-	public static void main(String[] args) {
-		Display display = new Display();
-		Shell shell = new Shell(display);
-		Link link = new Link(shell, SWT.BORDER);
-		link.setText("This a very simple <A>link</A> widget.");
-		link.setSize(140, 40);
-		shell.pack ();
-		shell.open();
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		display.dispose();
-	}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet183.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet183.java
deleted file mode 100644
index 88c5a1e..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet183.java
+++ /dev/null
@@ -1,46 +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.snippets;
-
-/*
- * Link example snippet: detect selection events in a link widget
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.1
- */
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet183 {
-	
-	public static void main(String[] args) {
-		Display display = new Display();
-		Shell shell = new Shell(display);
-		Link link = new Link(shell, SWT.NONE);
-		String text = "The SWT component is designed to provide <a>efficient</a>, <a>portable</a> <a href=\"native\">access to the user-interface facilities of the operating systems</a> on which it is implemented.";
-		link.setText(text);
-		link.setSize(400, 400);
-		link.addListener (SWT.Selection, new Listener () {
-			public void handleEvent(Event event) {
-				System.out.println("Selection: " + event.text);
-			}
-		});
-		shell.pack ();
-		shell.open();
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		display.dispose();
-	}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet184.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet184.java
deleted file mode 100644
index 331895a..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet184.java
+++ /dev/null
@@ -1,44 +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.snippets;
-
-/*
- * Spinner example snippet: create and initialize a spinner widget
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.1
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet184 {
-
-	public static void main(String[] args) {
-		Display display = new Display();
-		Shell shell = new Shell(display);
-		Spinner spinner = new Spinner (shell, SWT.BORDER);
-		spinner.setMinimum(0);
-		spinner.setMaximum(1000);
-		spinner.setSelection(500);
-		spinner.setIncrement(1);
-		spinner.setPageIncrement(100);
-		spinner.pack();
-		shell.pack();
-		shell.open();
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		display.dispose();
-	}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet185.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet185.java
deleted file mode 100644
index 2dc31a4..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet185.java
+++ /dev/null
@@ -1,122 +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.snippets;
-
-/*
- * Dropped data type depends on target item in table
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import java.io.*;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.dnd.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet185 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setLayout(new FillLayout());
-	Label label1 = new Label(shell, SWT.BORDER);
-	label1.setText("Drag Source");
-	final Table table = new Table(shell, SWT.BORDER);
-	for (int i = 0; i < 4; i++) {
-		TableItem item = new TableItem(table, SWT.NONE);
-		if (i % 2 == 0) item.setText("Drop a file");
-		if (i % 2 == 1) item.setText("Drop text");
-	}
-	DragSource dragSource = new DragSource(label1, DND.DROP_COPY);
-	dragSource.setTransfer(new Transfer[] {TextTransfer.getInstance(), FileTransfer.getInstance()});
-	dragSource.addDragListener(new DragSourceAdapter() {
-		public void dragSetData(DragSourceEvent event) {
-			if (FileTransfer.getInstance().isSupportedType(event.dataType)) {
-				File file = new File("temp");
-				event.data = new String[] {file.getAbsolutePath()};
-			}
-			if (TextTransfer.getInstance().isSupportedType(event.dataType)) {
-				event.data = "once upon a time";
-			}
-		} 
-	});
-	DropTarget dropTarget = new DropTarget(table, DND.DROP_COPY | DND.DROP_DEFAULT);
-	dropTarget.setTransfer(new Transfer[] {TextTransfer.getInstance(), FileTransfer.getInstance()});
-	dropTarget.addDropListener(new DropTargetAdapter() {
-		FileTransfer fileTransfer = FileTransfer.getInstance();
-		TextTransfer textTransfer = TextTransfer.getInstance();
-		public void dragEnter(DropTargetEvent event) {
-			if (event.detail == DND.DROP_DEFAULT) event.detail = DND.DROP_COPY;
-		}
-		public void dragOperationChanged(DropTargetEvent event) {
-			if (event.detail == DND.DROP_DEFAULT) event.detail = DND.DROP_COPY;
-		}
-		public void dragOver(DropTargetEvent event) {
-			event.detail = DND.DROP_NONE;
-			TableItem item = (TableItem)event.item;
-			if (item == null) return;
-			int itemIndex = table.indexOf(item);
-			if (itemIndex % 2 == 0) {
-				int index = 0;
-				while (index < event.dataTypes.length) {
-					if (fileTransfer.isSupportedType(event.dataTypes[index])) break;
-					index++;
-				}
-				if (index < event.dataTypes.length) {
-					event.currentDataType = event.dataTypes[index];
-					event.detail = DND.DROP_COPY;
-					return;
-				}
-			} else {
-				int index = 0;
-				while (index < event.dataTypes.length) {
-					if (textTransfer.isSupportedType(event.dataTypes[index])) break;
-					index++;
-				}
-				if (index < event.dataTypes.length) {
-					event.currentDataType = event.dataTypes[index];
-					event.detail = DND.DROP_COPY;
-					return;
-				}
-			}
-		}
-
-		public void drop(DropTargetEvent event) {
-			TableItem item = (TableItem)event.item;
-			if (item == null) {
-				event.detail = DND.DROP_NONE;
-				return;
-			}
-			if (fileTransfer.isSupportedType(event.currentDataType)) {
-				String[] files = (String[])event.data;
-				if (files != null && files.length > 0) {
-					item.setText(files[0]);
-				}
-			}
-			if (textTransfer.isSupportedType(event.currentDataType)) {
-				String text = (String)event.data;
-				if (text != null) {
-					item.setText(text);
-				}
-			}
-		}
-		
-	});
-	shell.setSize(300, 150);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet186.html b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet186.html
deleted file mode 100644
index d9f8803..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet186.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<HTML>
-  <HEAD>
-    <TITLE>Post</TITLE>
-	<p>Test for Posting Data in IE</p>
-
-  </HEAD>
-
-  <BODY>
-    <FORM METHOD="post"
-       ACTION="http://host/cgi-bin/mas_form">
-    <INPUT TYPE="text" NAME="name"
-       SIZE=20 VALUE="Try it (post)">
- </FORM>
- 
-  </BODY>
-</HTML>
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet186.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet186.java
deleted file mode 100644
index 61187e4..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet186.java
+++ /dev/null
@@ -1,202 +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.snippets;
-
-/*
- * Reading and writing to a SAFEARRAY
- * 
- * This example reads from a PostData object in a BeforeNavigate2 event and
- * creates a PostData object in a call to Navigate. (win32 only)
- * NOTE: This snippet uses internal SWT packages that are
- * subject to change without notice.
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.internal.win32.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.ole.win32.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet186 {
-
-static int CodePage = OS.GetACP();
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setLayout(new GridLayout(2, false));
-	
-	final Text text = new Text(shell, SWT.BORDER);
-	text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-	Button go = new Button(shell, SWT.PUSH);
-	go.setText("Go");
-	OleFrame oleFrame = new OleFrame(shell, SWT.NONE);
-	oleFrame.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
-	OleControlSite controlSite;
-	OleAutomation automation;
-	try {
-		controlSite = new OleControlSite(oleFrame, SWT.NONE, "Shell.Explorer");
-		automation = new OleAutomation(controlSite);
-		controlSite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);
-	} catch (SWTException ex) {
-		return;
-	}
-	
-	final OleAutomation auto = automation;
-	go.addListener(SWT.Selection, new Listener() {
-		public void handleEvent(Event e) {
-			String url = text.getText();
-			int[] rgdispid = auto.getIDsOfNames(new String[]{"Navigate", "URL"}); 
-			int dispIdMember = rgdispid[0];
-			Variant[] rgvarg = new Variant[1];
-			rgvarg[0] = new Variant(url);
-			int[] rgdispidNamedArgs = new int[1];
-			rgdispidNamedArgs[0] = rgdispid[1];
-			auto.invoke(dispIdMember, rgvarg, rgdispidNamedArgs);
-		}
-	});
-	
-	
-	// Read PostData whenever we navigate to a site that uses it
-	int BeforeNavigate2 = 0xfa;
-	controlSite.addEventListener(BeforeNavigate2, new OleListener() {
-		public void handleEvent(OleEvent event) {
-			Variant url = event.arguments[1];
-			Variant postData = event.arguments[4];
-			if (postData != null) {
-				System.out.println("PostData = "+readSafeArray(postData)+", URL = "+url.getString());
-			}
-		}
-	});
-	
-	// Navigate to this web site which uses post data to fill in the text field
-	// and put the string "hello world" into the text box
-	text.setText("file://"+Snippet186.class.getResource("Snippet186.html").getFile());
-	int[] rgdispid = automation.getIDsOfNames(new String[]{"Navigate", "URL", "PostData"}); 
-	int dispIdMember = rgdispid[0];	
-	Variant[] rgvarg = new Variant[2];
-	rgvarg[0] = new Variant(text.getText());
-	rgvarg[1] = writeSafeArray("hello world");
-	int[] rgdispidNamedArgs = new int[2];
-	rgdispidNamedArgs[0] = rgdispid[1];
-	rgdispidNamedArgs[1] = rgdispid[2];
-	automation.invoke(dispIdMember, rgvarg, rgdispidNamedArgs);
-		
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-
-// The following structs are accessed in the readSafeArray and writeSafeArray
-// functions:
-//
-// VARIANT:
-// 		short vt
-// 		short wReserved1
-// 		short wReserved2
-// 		short wReserved3
-// 		int parray
-//
-// SAFEARRAY:
-//      short cDims      // Count of dimensions in this array
-//      short fFeatures  // Flags used by the SafeArray
-//      int cbElements   // Size of an element of the array
-//      int cLocks       // Number of times the array has been locked without corresponding unlock
-//      int pvData       // Pointer to the data
-//      SAFEARRAYBOUND[] rgsabound // One bound for each dimension
-//
-// SAFEARRAYBOUND:
-//      int cElements    // the number of elements in the dimension
-//      int lLbound      // the lower bound of the dimension 
-
-static String readSafeArray(Variant variantByRef) {
-	// Read a safearray that contains data of 
-	// type VT_UI1 (unsigned shorts) which contains
-	// a text stream.
-    int pPostData = variantByRef.getByRef();
-    short[] vt_type = new short[1];
-    OS.MoveMemory(vt_type, pPostData, 2);
-    String result = null;
-    if (vt_type[0] == (short)(OLE.VT_BYREF | OLE.VT_VARIANT)) {
-        int[] pVariant = new int[1];
-        OS.MoveMemory(pVariant, pPostData + 8, 4);
-        vt_type = new short[1];
-        OS.MoveMemory(vt_type, pVariant[0], 2);
-        if (vt_type[0] == (short)(OLE.VT_ARRAY | OLE.VT_UI1)) {
-            int[] pSafearray = new int[1];
-            OS.MoveMemory(pSafearray, pVariant[0] + 8, 4);
-            short[] cDims = new short[1];
-            OS.MoveMemory(cDims, pSafearray[0], 2);
-            int[] pvData = new int[1];
-            OS.MoveMemory(pvData, pSafearray[0] + 12, 4);
-            int safearrayboundOffset = 0;
-            for (int i = 0; i < cDims[0]; i++) {
-                int[] cElements = new int[1];
-                OS.MoveMemory(cElements, pSafearray[0] + 16 + safearrayboundOffset, 4);
-                safearrayboundOffset += 8;
-                int cchWideChar = OS.MultiByteToWideChar (CodePage, OS.MB_PRECOMPOSED,  pvData[0], -1, null, 0);
-				if (cchWideChar == 0) return null;
-				char[] lpWideCharStr = new char [cchWideChar - 1];
-				OS.MultiByteToWideChar (CodePage, OS.MB_PRECOMPOSED,  pvData[0], -1, lpWideCharStr, lpWideCharStr.length);
-				result = new String(lpWideCharStr);
-            }
-        }
-    }
-    return result;
-}
-
-static Variant writeSafeArray (String string) {
-	// Create a one dimensional safearray containing two VT_UI1 values
-	// where VT_UI1 is an unsigned char
-	
-	// Define cDims, fFeatures and cbElements
-	short cDims = 1;
-	short FADF_FIXEDSIZE = 0x10;
-	short FADF_HAVEVARTYPE = 0x80;
-	short fFeatures = (short)(FADF_FIXEDSIZE | FADF_HAVEVARTYPE);
-	int cbElements = 1;
-	// Create a pointer and copy the data into it
-	int count = string.length();
-	char[] chars = new char[count + 1];
-	string.getChars(0, count, chars, 0);
-	int cchMultiByte = OS.WideCharToMultiByte(CodePage, 0, chars, -1, null, 0, null, null);
-	if (cchMultiByte == 0) return null;
-	int pvData = OS.GlobalAlloc(OS.GMEM_FIXED | OS.GMEM_ZEROINIT, cchMultiByte);
-	OS.WideCharToMultiByte(CodePage, 0, chars, -1, pvData, cchMultiByte, null, null);
-	int cElements1 = cchMultiByte;
-	int lLbound1 = 0;
-	// Create a safearray in memory
-	// 12 bytes for cDims, fFeatures and cbElements + 4 bytes for pvData + number of dimensions * (size of safearraybound)
-	int sizeofSafeArray = 12 + 4 + 1*8;
-	int pSafeArray = OS.GlobalAlloc(OS.GMEM_FIXED | OS.GMEM_ZEROINIT, sizeofSafeArray);
-	// Copy the data into the safe array
-	int offset = 0;
-	OS.MoveMemory(pSafeArray + offset, new short[] {cDims}, 2); offset += 2;
-	OS.MoveMemory(pSafeArray + offset, new short[] {fFeatures}, 2); offset += 2;
-	OS.MoveMemory(pSafeArray + offset, new int[] {cbElements}, 4); offset += 4;
-	OS.MoveMemory(pSafeArray + offset, new int[] {0}, 4); offset += 4;
-	OS.MoveMemory(pSafeArray + offset, new int[] {pvData}, 4); offset += 4;
-	OS.MoveMemory(pSafeArray + offset, new int[] {cElements1}, 4); offset += 4;
-	OS.MoveMemory(pSafeArray + offset, new int[] {lLbound1}, 4); offset += 4;
-	// Create a variant in memory to hold the safearray
-	int pVariant = OS.GlobalAlloc(OS.GMEM_FIXED | OS.GMEM_ZEROINIT, Variant.sizeof);
-	short vt = (short)(OLE.VT_ARRAY | OLE.VT_UI1);
-	OS.MoveMemory(pVariant, new short[] {vt}, 2);
-	OS.MoveMemory(pVariant + 8, new int[]{pSafeArray}, 4);
-	// Create a by ref variant
-	Variant variantByRef = new Variant(pVariant, (short)(OLE.VT_BYREF | OLE.VT_VARIANT));
-	return variantByRef;
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet187.html b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet187.html
deleted file mode 100644
index c9b2762..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet187.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<HTML>
-  <HEAD>
-    <TITLE>Evaluate</TITLE>
-	<p>Test for IE Script</p>
-    <SCRIPT>
-      function evaluate(x)
-      {
-         alert("hello")
-         return eval(x)
-      }
-   </SCRIPT>
-  </HEAD>
-
-  <BODY>
-  </BODY>
-</HTML>
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet187.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet187.java
deleted file mode 100644
index ccb0162..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet187.java
+++ /dev/null
@@ -1,100 +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.snippets;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.ole.win32.*;
-import org.eclipse.swt.widgets.*;
-
-/*
- * Running a script within IE. (win32 only)
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-
-public class Snippet187 {
-	
-public static void main(String[] args) {
-	final Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setLayout(new FillLayout());
-	OleControlSite controlSite;
-	try {
-		OleFrame frame = new OleFrame(shell, SWT.NONE);
-		controlSite = new OleControlSite(frame, SWT.NONE, "Shell.Explorer");
-		controlSite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);
-	} catch (SWTError e) {
-		System.out.println("Unable to open activeX control");
-		return;
-	}
-	
-	// IWebBrowser
-	final OleAutomation webBrowser = new OleAutomation(controlSite);
-
-	// When the document is loaded, access the document object for the new page
-	// and evalute expression using Script.
-	int DownloadComplete = 104;
-	controlSite.addEventListener(DownloadComplete, new OleListener() {
-		public void handleEvent(OleEvent event) {
-			int[] htmlDocumentID = webBrowser.getIDsOfNames(new String[]{"Document"}); 
-			if (htmlDocumentID == null) return;
-			Variant pVarResult = webBrowser.getProperty(htmlDocumentID[0]);
-			if (pVarResult == null || pVarResult.getType() == 0) return;
-			//IHTMLDocument2
-			OleAutomation htmlDocument = null;
-			try {
-				htmlDocument = pVarResult.getAutomation();
-				pVarResult.dispose();
-	
-				int[] scriptID = htmlDocument.getIDsOfNames(new String[]{"Script"}); 
-				if (scriptID == null) return;
-				pVarResult = htmlDocument.getProperty(scriptID[0]);
-				if (pVarResult == null || pVarResult.getType() == 0) return;
-				OleAutomation htmlWindow = null;
-				try {
-					//IHTMLWindow2
-					htmlWindow = pVarResult.getAutomation();
-					pVarResult.dispose();
-					int[] evaluateID = htmlWindow.getIDsOfNames(new String[] {"evaluate"});
-					if (evaluateID == null) return;
-					String expression = "5+Math.sin(9)";
-					Variant[] rgvarg = new Variant[] {new Variant(expression)};
-					pVarResult = htmlWindow.invoke(evaluateID[0], rgvarg, null);
-					if (pVarResult == null || pVarResult.getType() == 0) return;
-					System.out.println(expression+" ="+pVarResult.getString());
-				} finally {
-					htmlWindow.dispose();
-				}
-			} finally {
-				htmlDocument.dispose();
-			}
-		}
-	});
-	
-	// Navigate to a web site
-	int[] ids = webBrowser.getIDsOfNames(new String[]{"Navigate", "URL"}); 
-	Variant[] rgvarg = new Variant[] {new Variant("http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet187.html")};
-	int[] rgdispidNamedArgs = new int[]{ids[1]};
-	webBrowser.invoke(ids[0], rgvarg, rgdispidNamedArgs);
-
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	//Remember to release OleAutomation Object
-	webBrowser.dispose();
-	display.dispose();
-	
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet188.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet188.java
deleted file mode 100644
index 14ccb8c..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet188.java
+++ /dev/null
@@ -1,78 +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.snippets;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.custom.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-/*
- * Scroll widgets into view when they get focus
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-
-public class Snippet188 {
-	
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setLayout(new GridLayout());
-	Button b1 = new Button(shell, SWT.PUSH);
-	b1.setText("top");
-	b1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
-	final ScrolledComposite sc = new ScrolledComposite(shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
-	sc.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
-	Composite c = new Composite(sc, SWT.NONE);
-	c.setLayout(new GridLayout(10, true));
-	for (int i = 0 ; i < 300; i++) {
-		Button b = new Button(c, SWT.PUSH);
-		b.setText("Button "+i);
-	}
-	Button b2 = new Button(shell, SWT.PUSH);
-	b2.setText("bottom");
-	b2.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
-	
-	sc.setContent(c);
-	sc.setExpandHorizontal(true);
-	sc.setExpandVertical(true);
-	sc.setMinSize(c.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-
-	Listener listener = new Listener() {
-		public void handleEvent(Event e) {
-			Control child = (Control)e.widget;
-			Rectangle bounds = child.getBounds();
-			Rectangle area = sc.getClientArea();
-			Point origin = sc.getOrigin();
-			if (origin.x > bounds.x) origin.x = Math.max(0, bounds.x);
-			if (origin.y > bounds.y) origin.y = Math.max(0, bounds.y);
-			if (origin.x + area.width < bounds.x + bounds.width) origin.x = Math.max(0, bounds.x + bounds.width - area.width);
-			if (origin.y + area.height < bounds.y + bounds.height) origin.y = Math.max(0, bounds.y + bounds.height - area.height);
-			sc.setOrigin(origin);
-		}
-	};
-	Control[] controls = c.getChildren();
-	for (int i = 0; i < controls.length; i++) {
-		controls[i].addListener(SWT.Activate, listener);
-	}
-	shell.setSize(300, 500);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet189.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet189.java
deleted file mode 100644
index 54f30b2..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet189.java
+++ /dev/null
@@ -1,62 +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.snippets;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.custom.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-/*
- * Text with underline and strike through
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.1
- */
-
-public class Snippet189 {
-	
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setText("StyledText with underline and strike through");
-	shell.setLayout(new FillLayout());
-	StyledText text = new StyledText (shell, SWT.BORDER);
-	text.setText("0123456789 ABCDEFGHIJKLM NOPQRSTUVWXYZ");
-	// make 0123456789 appear underlined
-	StyleRange style1 = new StyleRange();
-	style1.start = 0;
-	style1.length = 10;
-	style1.underline = true;
-	text.setStyleRange(style1);
-	// make ABCDEFGHIJKLM have a strike through
-	StyleRange style2 = new StyleRange();
-	style2.start = 11;
-	style2.length = 13;
-	style2.strikeout = true;
-	text.setStyleRange(style2);
-	// make NOPQRSTUVWXYZ appear underlined and have a strike through
-	StyleRange style3 = new StyleRange();
-	style3.start = 25;
-	style3.length = 13;
-	style3.underline = true;
-	style3.strikeout = true;
-	text.setStyleRange(style3);
-	shell.pack();
-	shell.open();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet19.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet19.java
deleted file mode 100644
index be69169..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet19.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Text example snippet: verify input (only allow digits)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet19 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Text text = new Text (shell, SWT.BORDER | SWT.V_SCROLL);
-	text.setBounds (10, 10, 200, 200);
-	text.addListener (SWT.Verify, new Listener () {
-		public void handleEvent (Event e) {
-			String string = e.text;
-			char [] chars = new char [string.length ()];
-			string.getChars (0, chars.length, chars, 0);
-			for (int i=0; i<chars.length; i++) {
-				if (!('0' <= chars [i] && chars [i] <= '9')) {
-					e.doit = false;
-					return;
-				}
-			}
-		}
-	});
-	shell.open ();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet190.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet190.java
deleted file mode 100644
index b9d71c4..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet190.java
+++ /dev/null
@@ -1,59 +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.snippets;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-/*
- * Floating point values in Spinner
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.1
- */
-
-public class Snippet190 {
-	
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setText("Spinner with float values");
-	shell.setLayout(new GridLayout());
-	final Spinner spinner = new Spinner(shell, SWT.NONE);
-	// allow 3 decimal places
-	spinner.setDigits(3);
-	// set the minimum value to 0.001
-	spinner.setMinimum(1);
-	// set the maximum value to 20
-	spinner.setMaximum(20000);
-	// set the increment value to 0.010
-	spinner.setIncrement(10);
-	// set the seletion to 3.456
-	spinner.setSelection(3456);
-	spinner.addSelectionListener(new SelectionAdapter() {
-		public void widgetSelected(SelectionEvent e) {
-			int selection = spinner.getSelection();
-			int digits = spinner.getDigits();
-			System.out.println("Selection is "+(selection / Math.pow(10, digits)));
-		}
-	});
-	shell.setSize(200, 200);
-	shell.open();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet191.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet191.java
deleted file mode 100644
index 0fac1a6..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet191.java
+++ /dev/null
@@ -1,69 +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.snippets;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-/*
- * Detect when the user scrolls a text control
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-
-public class Snippet191 {
-public static void main(String[] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setLayout (new FillLayout ());
-	final Text text = new Text (shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
-	for (int i=0; i<32; i++) {
-		text.append (i + "-This is a line of text in a widget-" + i + "\n");
-	}
-	text.setSelection (0);
-	Listener listener = new Listener () {
-		int lastIndex = text.getTopIndex ();
-		public void handleEvent (Event e) {
-			int index = text.getTopIndex ();
-			if (index != lastIndex) {
-				lastIndex = index;
-				System.out.println ("Scrolled, topIndex=" + index);
-			}
-		}
-	};
-	/* NOTE: Only detects scrolling by the user */
-	text.addListener (SWT.MouseDown, listener);
-	text.addListener (SWT.MouseMove, listener);
-	text.addListener (SWT.MouseUp, listener);
-	text.addListener (SWT.KeyDown, listener);
-	text.addListener (SWT.KeyUp, listener);
-	text.addListener (SWT.Resize, listener);
-	ScrollBar hBar = text.getHorizontalBar();
-	if (hBar != null) {
-		hBar.addListener (SWT.Selection, listener);
-	}
-	ScrollBar vBar = text.getVerticalBar();
-	if (vBar != null) {
-		vBar.addListener (SWT.Selection, listener);
-	}
-	shell.pack ();
-	Point size = shell.computeSize (SWT.DEFAULT, SWT.DEFAULT);
-	shell.setSize (size. x - 32, size.y / 2);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet192.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet192.java
deleted file mode 100644
index 3d8d6d0..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet192.java
+++ /dev/null
@@ -1,104 +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.snippets;
-
-import java.util.*;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-/*
- * Show a sort indicator in the column header
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-
-public class Snippet192 {
-public static void main(String[] args) {
-	// initialize data with keys and random values
-	int size = 100;
-	Random random = new Random();
-	final int[][] data = new int[size][];
-	for (int i = 0; i < data.length; i++) {
-		data[i] = new int[] {i, random.nextInt()};
-	}
-	// create a virtual table to display data
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setLayout(new FillLayout());
-	final Table table = new Table(shell, SWT.VIRTUAL);
-	table.setHeaderVisible(true);
-	table.setLinesVisible(true);
-	table.setItemCount(size);
-	final TableColumn column1 = new TableColumn(table, SWT.NONE);
-	column1.setText("Key");
-	column1.setWidth(200);
-	final TableColumn column2 = new TableColumn(table, SWT.NONE);
-	column2.setText("Value");
-	column2.setWidth(200);
-	table.addListener(SWT.SetData, new Listener() {
-		public void handleEvent(Event e) {
-			TableItem item = (TableItem) e.item;
-			int index = table.indexOf(item);
-			int[] datum = data[index];
-			item.setText(new String[] {Integer.toString(datum[0]),
-					Integer.toString(datum[1]) });
-		}
-	});
-	// Add sort indicator and sort data when column selected
-	Listener sortListener = new Listener() {
-		public void handleEvent(Event e) {
-			// determine new sort column and direction
-			TableColumn sortColumn = table.getSortColumn();
-			TableColumn currentColumn = (TableColumn) e.widget;
-			int dir = table.getSortDirection();
-			if (sortColumn == currentColumn) {
-				dir = dir == SWT.UP ? SWT.DOWN : SWT.UP;
-			} else {
-				table.setSortColumn(currentColumn);
-				dir = SWT.UP;
-			}
-			// sort the data based on column and direction
-			final int index = currentColumn == column1 ? 0 : 1;
-			final int direction = dir;
-			Arrays.sort(data, new Comparator() {
-				public int compare(Object arg0, Object arg1) {
-					int[] a = (int[]) arg0;
-					int[] b = (int[]) arg1;
-					if (a[index] == b[index]) return 0;
-					if (direction == SWT.UP) {
-						return a[index] < b[index] ? -1 : 1;
-					}
-					return a[index] < b[index] ? 1 : -1;
-				}
-			});
-			// update data displayed in table
-			table.setSortDirection(dir);
-			table.clearAll();
-		}
-	};
-	column1.addListener(SWT.Selection, sortListener);
-	column2.addListener(SWT.Selection, sortListener);
-	table.setSortColumn(column1);
-	table.setSortDirection(SWT.UP);
-	shell.setSize(shell.computeSize(SWT.DEFAULT, SWT.DEFAULT).x, 300);
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet193.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet193.java
deleted file mode 100644
index 3d441cd..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet193.java
+++ /dev/null
@@ -1,91 +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.snippets;
-
-/*
- * Allow user to reorder columns and reorder columns programmatically.
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet193 {
-
-	public static void main(String[] args) {
-		Display display = new Display();
-		Shell shell = new Shell(display);
-		shell.setLayout(new RowLayout(SWT.HORIZONTAL));
-		final Tree tree = new Tree(shell, SWT.BORDER | SWT.CHECK);
-		tree.setLayoutData(new RowData(-1, 300));
-		tree.setHeaderVisible(true);
-		TreeColumn column = new TreeColumn(tree, SWT.LEFT);
-		column.setText("Column 0");
-		column = new TreeColumn(tree, SWT.CENTER);
-		column.setText("Column 1");
-		column = new TreeColumn(tree, SWT.LEFT);
-		column.setText("Column 2");
-		column = new TreeColumn(tree, SWT.RIGHT);
-		column.setText("Column 3");
-		column = new TreeColumn(tree, SWT.CENTER);
-		column.setText("Column 4");
-		for (int i = 0; i < 5; i++) {
-			TreeItem item = new TreeItem(tree, SWT.NONE);
-			String[] text = new String[]{i+":0", i+":1", i+":2", i+":3", i+":4"};
-			item.setText(text);
-			for (int j = 0; j < 5; j++) {
-				TreeItem subItem = new TreeItem(item, SWT.NONE);
-				text = new String[]{i+","+j+":0", i+","+j+":1", i+","+j+":2", i+","+j+":3", i+","+j+":4"};
-				subItem.setText(text);
-				for (int k = 0; k < 5; k++) {
-					TreeItem subsubItem = new TreeItem(subItem, SWT.NONE);
-					text = new String[]{i+","+j+","+k+":0", i+","+j+","+k+":1", i+","+j+","+k+":2", i+","+j+","+k+":3", i+","+j+","+k+":4"};
-					subsubItem.setText(text);
-				}
-			}
-		}
-		Listener listener = new Listener() {
-			public void handleEvent(Event e) {
-				System.out.println("Move "+e.widget);
-			}
-		};
-		TreeColumn[] columns = tree.getColumns();
-		for (int i = 0; i < columns.length; i++) {
-			columns[i].setWidth(100);
-			columns[i].setMoveable(true);
-			columns[i].addListener(SWT.Move, listener);
-		}
-		Button b = new Button(shell, SWT.PUSH);
-		b.setText("invert column order");
-		b.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				int[] order = tree.getColumnOrder();
-				for (int i = 0; i < order.length / 2; i++) {
-					int temp = order[i];
-					order[i] = order[order.length - i - 1];
-					order[order.length - i - 1] = temp;
-				}
-				tree.setColumnOrder(order);
-			}
-		});
-		shell.pack();
-		shell.open();
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		display.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet194.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet194.java
deleted file mode 100644
index 046253f..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet194.java
+++ /dev/null
@@ -1,91 +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.snippets;
-
-/*
- * Write an animated GIF to a file.
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet194 {
-	Display display;
-	Color white, red, green, blue;
-	PaletteData palette;
-	Font font;
-
-	public static void main(String[] args) {
-		new Snippet194().run();
-	}
-	
-	public void run() {
-		display = new Display();
-		RGB whiteRGB = new RGB(0xff, 0xff, 0xff);
-		RGB redRGB = new RGB(0xff, 0, 0);
-		RGB greenRGB = new RGB(0, 0xff, 0);
-		RGB blueRGB = new RGB(0, 0, 0xff);
-		palette = new PaletteData(new RGB[] {
-				whiteRGB,	// 0
-				redRGB,		// 1
-				greenRGB,	// 2
-				blueRGB });	// 3
-		white = new Color(display, whiteRGB);
-		red = new Color(display, redRGB);
-		green = new Color(display, greenRGB);
-		blue = new Color(display, blueRGB);
-		font = new Font(display, "Comic Sans MS", 24, SWT.BOLD);
-		
-		ImageData[] data = new ImageData[4];
-		data[0] = newFrame("",  white, false, 0, 0, 101, 55, SWT.DM_FILL_NONE, 40);
-		data[1] = newFrame("S", red,   true,  0, 0,  30, 55, SWT.DM_FILL_NONE, 40);
-		data[2] = newFrame("W", green, true, 28, 0,  39, 55, SWT.DM_FILL_NONE, 40);
-		data[3] = newFrame("T", blue,  true, 69, 0,  32, 55, SWT.DM_FILL_BACKGROUND, 200);
-		
-		ImageLoader loader = new ImageLoader();
-		loader.data = data;
-		loader.backgroundPixel = 0;
-		loader.logicalScreenHeight = data[0].height;
-		loader.logicalScreenWidth = data[0].width;
-		loader.repeatCount = 0; // run forever
-		loader.save("swt.gif", SWT.IMAGE_GIF);
-
-		white.dispose();
-		red.dispose();
-		green.dispose();
-		blue.dispose();
-		font.dispose();
-		display.dispose();
-	}
-
-	ImageData newFrame(String letter, Color color, boolean transparent, int x, int y, int width, int height, int disposalMethod, int delayTime) {
-		ImageData temp = new ImageData(width, height, 2, palette); // 4-color palette has depth 2
-		Image image = new Image(display, temp);
-		GC gc = new GC(image);
-		gc.setBackground(white);
-		gc.fillRectangle(0, 0, width, height);
-		gc.setForeground(color);
-		gc.setFont(font);
-		gc.drawString(letter, 5, 5);
-		gc.dispose();
-		ImageData frame = image.getImageData();
-		if (transparent) frame.transparentPixel = 0; // white
-		image.dispose();
-		frame.x = x;
-		frame.y = y;
-		frame.disposalMethod = disposalMethod;
-		frame.delayTime = delayTime;
-		return frame;
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet195.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet195.java
deleted file mode 100644
index b3758ad..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet195.java
+++ /dev/null
@@ -1,134 +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.snippets;
-
-/*
- * SWT OpenGL snippet: use LWJGL to draw to an SWT GLCanvas
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.opengl.GLCanvas;
-import org.eclipse.swt.opengl.GLData;
-import org.lwjgl.opengl.GL11;
-import org.lwjgl.opengl.GLContext;
-import org.lwjgl.opengl.glu.GLU;
-import org.lwjgl.LWJGLException;
-
-public class Snippet195 {
-	static void drawTorus(float r, float R, int nsides, int rings) {
-		float ringDelta = 2.0f * (float) Math.PI / rings;
-		float sideDelta = 2.0f * (float) Math.PI / nsides;
-		float theta = 0.0f, cosTheta = 1.0f, sinTheta = 0.0f;
-		for (int i = rings - 1; i >= 0; i--) {
-			float theta1 = theta + ringDelta;
-			float cosTheta1 = (float) Math.cos(theta1);
-			float sinTheta1 = (float) Math.sin(theta1);
-			GL11.glBegin(GL11.GL_QUAD_STRIP);
-			float phi = 0.0f;
-			for (int j = nsides; j >= 0; j--) {
-				phi += sideDelta;
-				float cosPhi = (float) Math.cos(phi);
-				float sinPhi = (float) Math.sin(phi);
-				float dist = R + r * cosPhi;
-				GL11.glNormal3f(cosTheta1 * cosPhi, -sinTheta1 * cosPhi, sinPhi);
-				GL11.glVertex3f(cosTheta1 * dist, -sinTheta1 * dist, r * sinPhi);
-				GL11.glNormal3f(cosTheta * cosPhi, -sinTheta * cosPhi, sinPhi);
-				GL11.glVertex3f(cosTheta * dist, -sinTheta * dist, r * sinPhi);
-			}
-			GL11.glEnd();
-			theta = theta1;
-			cosTheta = cosTheta1;
-			sinTheta = sinTheta1;
-		}
-	}
-
-	public static void main(String [] args) {
-		final Display display = new Display();
-		Shell shell = new Shell(display);
-		shell.setLayout(new FillLayout());
-		Composite comp = new Composite(shell, SWT.NONE);
-		comp.setLayout(new FillLayout());
-		GLData data = new GLData ();
-		data.doubleBuffer = true;
-		final GLCanvas canvas = new GLCanvas(comp, SWT.NONE, data);
-
-		canvas.setCurrent();
-		try {
-        		GLContext.useContext(canvas);
-        } catch(LWJGLException e) { e.printStackTrace(); }
-        
-        canvas.addListener(SWT.Resize, new Listener() {
-        	public void handleEvent(Event event) {
-        		Rectangle bounds = canvas.getBounds();
-        		float fAspect = (float) bounds.width / (float) bounds.height;
-				canvas.setCurrent();
-				try {
-					GLContext.useContext(canvas);
-		        } catch(LWJGLException e) { e.printStackTrace(); }
-        		GL11.glViewport(0, 0, bounds.width, bounds.height);
-        		GL11.glMatrixMode(GL11.GL_PROJECTION);
-        		GL11.glLoadIdentity();
-        		GLU.gluPerspective(45.0f, fAspect, 0.5f, 400.0f);
-        		GL11.glMatrixMode(GL11.GL_MODELVIEW);
-        		GL11.glLoadIdentity();
-        	}
-        });
-
-		GL11.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
-		GL11.glColor3f(1.0f, 0.0f, 0.0f);
-		GL11.glHint(GL11.GL_PERSPECTIVE_CORRECTION_HINT, GL11.GL_NICEST);
-		GL11.glClearDepth(1.0);
-		GL11.glLineWidth(2);
-		GL11.glEnable(GL11.GL_DEPTH_TEST);
-
-		shell.setText("SWT/LWJGL Example");
-		shell.setSize(640, 480);
-		shell.open();
-
-	    display.asyncExec(new Runnable() {
-	    	int rot = 0;
-			public void run() {
-				if (!canvas.isDisposed()) {
-					canvas.setCurrent();
-					try {
-						GLContext.useContext(canvas);
-			        } catch(LWJGLException e) { e.printStackTrace(); }
-					GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
-					GL11.glClearColor(.3f, .5f, .8f, 1.0f);
-					GL11.glLoadIdentity();
-					GL11.glTranslatef(0.0f, 0.0f, -10.0f);
-					float frot = rot;
-					GL11.glRotatef(0.15f * rot, 2.0f * frot, 10.0f * frot, 1.0f);
-					GL11.glRotatef(0.3f * rot, 3.0f * frot, 1.0f * frot, 1.0f);
-					rot++;
-					GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_LINE);
-					GL11.glColor3f(0.9f, 0.9f, 0.9f);
-					drawTorus(1, 1.9f + ((float) Math.sin((0.004f * frot))), 15, 15);
-					canvas.swapBuffers();
-					display.asyncExec(this);
-				}
-			}
-		});
-
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		display.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet196.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet196.java
deleted file mode 100644
index 98081d4..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet196.java
+++ /dev/null
@@ -1,140 +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.snippets;
-
-/*
- * Text example snippet: use a regular expression to verify input
- * In this case a phone number is used.
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import java.util.regex.*;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet196 {
-	/*
-	 * Phone numbers follow the rule [(][1-9][1-9][1-9][)][1-9][1-9][1-9][-][1-9][1-9][1-9][1-9]
-	 */
-	private static final String REGEX = "[(]\\d{3}[)]\\d{3}[-]\\d{4}";  //$NON-NLS-1$
-	private static final String template = "(###)###-####"; //$NON-NLS-1$
-	private static final String defaultText = "(000)000-0000"; //$NON-NLS-1$
-	
-	
-public static void main(String[] args) {
-	
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setLayout(new GridLayout());
-	final Text text = new Text(shell, SWT.BORDER);
-	Font font = new Font(display, "Courier New", 10, SWT.NONE); //$NON-NLS-1$
-	text.setFont(font);
-	text.setText(template);	
-	text.addListener(SWT.Verify, new Listener() {
-		//create the pattern for verification
-		Pattern pattern = Pattern.compile(REGEX);	
-		//ignore event when caused by inserting text inside event handler
-		boolean ignore;
-		public void handleEvent(Event e) {
-			if (ignore) return;
-			e.doit = false;
-			if (e.start > 13 || e.end > 14) return;
-			StringBuffer buffer = new StringBuffer(e.text);
-			
-			//handle backspace
-			if (e.character == '\b') {
-				for (int i = e.start; i < e.end; i++) {
-					// skip over separators
-					switch (i) {
-						case 0: 
-							if (e.start + 1 == e.end) {
-								return;
-							} else {
-								buffer.append('(');
-							}
-							break;
-						case 4:
-							if (e.start + 1 == e.end) {
-								buffer.append(new char [] {'#',')'});
-								e.start--;
-							} else {
-								buffer.append(')');
-							}
-							break;
-						case 8:
-							if (e.start + 1 == e.end) {
-								buffer.append(new char [] {'#','-'});
-								e.start--;
-							} else {
-								buffer.append('-');
-							}
-							break;
-						default: buffer.append('#');
-					}
-				}
-				text.setSelection(e.start, e.start + buffer.length());
-				ignore = true;
-				text.insert(buffer.toString());
-				ignore = false;
-				// move cursor backwards over separators
-				if (e.start == 5 || e.start == 9) e.start--;
-				text.setSelection(e.start, e.start);
-				return;
-			}
-			
-			StringBuffer newText = new StringBuffer(defaultText);
-			char[] chars = e.text.toCharArray();
-			int index = e.start - 1;
-			for (int i = 0; i < e.text.length(); i++) {
-				index++;
-				switch (index) {
-					case 0:
-						if (chars[i] == '(') continue;
-						index++;
-						break;
-					case 4:
-						if (chars[i] == ')') continue;
-						index++;
-						break;
-					case 8:
-						if (chars[i] == '-') continue;
-						index++;
-						break;
-				}
-				if (index >= newText.length()) return;
-				newText.setCharAt(index, chars[i]);
-			}
-			// if text is selected, do not paste beyond range of selection
-			if (e.start < e.end && index + 1 != e.end) return;
-			Matcher matcher = pattern.matcher(newText);
-			if (matcher.lookingAt()) {
-				text.setSelection(e.start, index + 1);
-				ignore = true;
-				text.insert(newText.substring(e.start, index + 1));
-				ignore = false;
-			}			
-		}
-	});
-		
-	shell.pack();
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	font.dispose();
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet197.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet197.java
deleted file mode 100644
index 3a609bc..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet197.java
+++ /dev/null
@@ -1,54 +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.snippets;
-
-/*
- * Draw wrapped text using TextLayout
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet197 {
-	final static String longString = "The preferred size of a widget is the minimum size needed to show its content. In the case of a Composite, the preferred size is the smallest rectangle that contains all of its children. If children have been positioned by the application, the Composite computes its own preferred size based on the size and position of the children. If a Composite is using a layout class to position its children, it asks the Layout to compute the size of its clientArea, and then it adds in the trim to determine its preferred size.";
-public static void main(String[] args) {
-	Display display = new Display();
-	final Shell shell = new Shell(display);
-	final TextLayout layout = new TextLayout(display);
-	layout.setText(longString);
-	Listener listener = new Listener() {
-		public void handleEvent (Event event) {
-			switch (event.type) {
-			case SWT.Paint:
-				layout.draw(event.gc, 10, 10);
-				break;
-			case SWT.Resize:
-				layout.setWidth(shell.getSize().x - 20);
-				break;
-			}
-		}
-	};
-	shell.addListener(SWT.Paint, listener);
-	shell.addListener(SWT.Resize, listener);
-	shell.setSize(300, 300);
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet198.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet198.java
deleted file mode 100644
index 26621fd..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet198.java
+++ /dev/null
@@ -1,61 +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.snippets;
-
-/*
- * Create a path from some text
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.1
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet198 {
-public static void main(String[] args) {
-	Display display = new Display();
-	FontData data = display.getSystemFont().getFontData()[0];
-	Font font = new Font(display, data.getName(), 96, SWT.BOLD | SWT.ITALIC);
-	final Color green = display.getSystemColor(SWT.COLOR_GREEN);
-	final Color blue = display.getSystemColor(SWT.COLOR_BLUE);
-	final Path path;
-	try {
-		path = new Path(display);
-		path.addString("SWT", 0, 0, font);
-	} catch (SWTException e) {
-		//Advanced Graphics not supported.  
-		//This new API requires the Cairo Vector engine on GTK and Motif and GDI+ on Windows.
-		System.out.println(e.getMessage());
-		return;
-	}
-	Shell shell = new Shell(display);
-	shell.addListener(SWT.Paint, new Listener() {
-		public void handleEvent(Event e) {			
-			GC gc = e.gc;
-			gc.setBackground(green);
-			gc.setForeground(blue);
-			gc.fillPath(path);
-			gc.drawPath(path);
-		}
-	});
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	path.dispose();
-	font.dispose();
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet199.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet199.java
deleted file mode 100644
index 4b6f831..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet199.java
+++ /dev/null
@@ -1,91 +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.snippets;
-
-/*
- * Listen for events in Excel (win32 only)
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.ole.win32.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet199 {
-	static String IID_AppEvents = "{00024413-0000-0000-C000-000000000046}";
-	// Event ID
-	static int NewWorkbook            = 0x0000061d;
-	static int SheetSelectionChange   = 0x00000616;
-	static int SheetBeforeDoubleClick = 0x00000617;
-	static int SheetBeforeRightClick  = 0x00000618;
-	static int SheetActivate          = 0x00000619;
-	static int SheetDeactivate        = 0x0000061a;
-	static int SheetCalculate         = 0x0000061b;
-	static int SheetChange            = 0x0000061c;
-	static int WorkbookOpen           = 0x0000061f;
-	static int WorkbookActivate       = 0x00000620;
-	static int WorkbookDeactivate     = 0x00000621;
-	static int WorkbookBeforeClose    = 0x00000622;
-	static int WorkbookBeforeSave     = 0x00000623;
-	static int WorkbookBeforePrint    = 0x00000624;
-	static int WorkbookNewSheet       = 0x00000625;
-	static int WorkbookAddinInstall   = 0x00000626;
-	static int WorkbookAddinUninstall = 0x00000627;
-	static int WindowResize           = 0x00000612;
-	static int WindowActivate         = 0x00000614;
-	static int WindowDeactivate       = 0x00000615;
-	static int SheetFollowHyperlink   = 0x0000073e;
-
- public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setLayout(new FillLayout());
-	OleControlSite controlSite;
-	try {
-		OleFrame frame = new OleFrame(shell, SWT.NONE);
-		controlSite = new OleControlSite(frame, SWT.NONE, "Excel.Sheet");
-		controlSite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);
-	} catch (SWTError e) {
-		System.out.println("Unable to open activeX control");
-		return;
-	}
-	shell.open();
-
-	OleAutomation excelSheet = new OleAutomation(controlSite);
-	int[] dispIDs = excelSheet.getIDsOfNames(new String[] {"Application"});
-	Variant pVarResult = excelSheet.getProperty(dispIDs[0]);
-	OleAutomation application = pVarResult.getAutomation();
-	pVarResult.dispose();
-	excelSheet.dispose();
-	
-	int eventID = SheetSelectionChange;
-	OleListener listener = new OleListener() {
-		public void handleEvent (OleEvent e) {
-			System.out.println("selection has changed");
-			// two arguments which must be released (row and column)
-			Variant[] args = e.arguments;
-			for (int i = 0; i < args.length; i++) {
-				System.out.println(args[i]);
-				args [i].dispose();
-			}
-		}
-	};
-	controlSite.addEventListener(application, IID_AppEvents, eventID, listener);
-	
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	application.dispose();
-	display.dispose ();
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet2.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet2.java
deleted file mode 100644
index 78e5bd6..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet2.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Table example snippet: sort a table by column
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-import java.text.*;
-import java.util.*;
-
-public class Snippet2 {
-
-public static void main (String [] args) {
-    Display display = new Display ();
-    Shell shell = new Shell (display);
-    shell.setLayout(new FillLayout());
-    final Table table = new Table(shell, SWT.BORDER);
-    table.setHeaderVisible(true);
-    final TableColumn column1 = new TableColumn(table, SWT.NONE);
-    column1.setText("Column 1");
-    final TableColumn column2 = new TableColumn(table, SWT.NONE);
-    column2.setText("Column 2");
-    TableItem item = new TableItem(table, SWT.NONE);
-    item.setText(new String[] {"a", "3"});
-    item = new TableItem(table, SWT.NONE);
-    item.setText(new String[] {"b", "2"});
-    item = new TableItem(table, SWT.NONE);
-    item.setText(new String[] {"c", "1"});
-    column1.setWidth(100);
-    column2.setWidth(100);
-    Listener sortListener = new Listener() {
-        public void handleEvent(Event e) {
-            TableItem[] items = table.getItems();
-            Collator collator = Collator.getInstance(Locale.getDefault());
-            TableColumn column = (TableColumn)e.widget;
-            int index = column == column1 ? 0 : 1;
-            for (int i = 1; i < items.length; i++) {
-                String value1 = items[i].getText(index);
-                for (int j = 0; j < i; j++){
-                    String value2 = items[j].getText(index);
-                    if (collator.compare(value1, value2) < 0) {
-                        String[] values = {items[i].getText(0), items[i].getText(1)};
-                        items[i].dispose();
-                        TableItem item = new TableItem(table, SWT.NONE, j);
-                        item.setText(values);
-                        items = table.getItems();
-                        break;
-                    }
-                }
-            }
-            table.setSortColumn(column);
-        }
-    };
-    column1.addListener(SWT.Selection, sortListener);
-    column2.addListener(SWT.Selection, sortListener);
-    table.setSortColumn(column1);
-    table.setSortDirection(SWT.UP);
-    shell.setSize(shell.computeSize(SWT.DEFAULT, SWT.DEFAULT).x, 300);
-    shell.open();
-    while (!shell.isDisposed ()) {
-        if (!display.readAndDispatch ()) display.sleep ();
-    }
-    display.dispose ();
-}
-
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet20.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet20.java
deleted file mode 100644
index 46f0bd9..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet20.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * CoolBar example snippet: create a cool bar
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet20 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	CoolBar bar = new CoolBar (shell, SWT.BORDER);
-	for (int i=0; i<2; i++) {
-		CoolItem item = new CoolItem (bar, SWT.NONE);
-		Button button = new Button (bar, SWT.PUSH);
-		button.setText ("Button " + i);
-		Point size = button.computeSize (SWT.DEFAULT, SWT.DEFAULT);
-		item.setPreferredSize (item.computeSize (size.x, size.y));
-		item.setControl (button);
-	}
-	bar.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet200.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet200.java
deleted file mode 100644
index 5cd43da..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet200.java
+++ /dev/null
@@ -1,74 +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.snippets;
-
-/*
- * Fill a shape with a predefined pattern
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.1
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet200 {
-public static void main(String[] args) {
-	Display display = new Display();
-	//define a pattern on an image
-	final Image image = new Image(display, 1000, 1000);
-	Color blue = display.getSystemColor(SWT.COLOR_BLUE);
-	Color yellow = display.getSystemColor(SWT.COLOR_YELLOW);
-	Color white = display.getSystemColor(SWT.COLOR_WHITE);
-	GC gc = new GC(image);
-	gc.setBackground(white);
-	gc.setForeground(yellow);
-	gc.fillGradientRectangle(0, 0, 1000, 1000, true);
-	for (int i=-500; i<1000; i+=10) {
-		gc.setForeground(blue);
-		gc.drawLine(i, 0, 500 + i, 1000);
-		gc.drawLine(500 + i, 0, i, 1000);
-	}	
-	gc.dispose();
-	final Pattern pattern;
-	try {
-		pattern = new Pattern(display, image);
-	} catch (SWTException e) {
-		//Advanced Graphics not supported.  
-		//This new API requires the Cairo Vector engine on GTK and Motif and GDI+ on Windows.
-		System.out.println(e.getMessage());
-		return;
-	}
-	
-	Shell shell = new Shell(display);
-	shell.setLayout(new FillLayout());
-	Composite c = new Composite(shell, SWT.DOUBLE_BUFFERED);
-	c.addListener(SWT.Paint, new Listener() {
-		public void handleEvent(Event event) {
-			Rectangle r = ((Composite)event.widget).getClientArea();
-			GC gc = event.gc;
-			gc.setBackgroundPattern(pattern);
-			gc.fillOval(5, 5, r.width - 10, r.height - 10);	
-		}
-	});
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	image.dispose();
-	pattern.dispose();
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet201.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet201.java
deleted file mode 100644
index 074f833..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet201.java
+++ /dev/null
@@ -1,67 +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.snippets;
-
-/*
- * Virtual Table example snippet: create a table with 1,000,000 items (lazy, page size 64)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */ 
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet201 {
-
-static final int PAGE_SIZE = 64;
-static final int COUNT = 100000;
-
-public static void main(String[] args) {
-	Display display = new Display ();
-	final Shell shell = new Shell (display);
-	shell.setLayout (new RowLayout (SWT.VERTICAL));
-	final Table table = new Table (shell, SWT.VIRTUAL | SWT.BORDER);
-	table.addListener (SWT.SetData, new Listener () {
-		public void handleEvent (Event event) {
-			TableItem item = (TableItem) event.item;
-			int index = table.indexOf (item);
-			int start = Math.max (0, index - PAGE_SIZE / 2);
-			int end = Math.min (table.getItemCount (), index + PAGE_SIZE / 2);
-			for (int i=start; i<end; i++) {
-				item = table.getItem (i);
-				item.setText ("Item " + i);
-			}
-		}
-	});
-	table.setLayoutData (new RowData (200, 200));
-	Button button = new Button (shell, SWT.PUSH);
-	button.setText ("Add Items");
-	final Label label = new Label(shell, SWT.NONE);
-	button.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event event) {
-			long t1 = System.currentTimeMillis ();
-			table.setItemCount (COUNT);
-			long t2 = System.currentTimeMillis ();
-			label.setText ("Items: " + COUNT + ", Time: " + (t2 - t1) + " (ms) [page=" + PAGE_SIZE + "]");
-			shell.layout ();
-		}
-	});
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet202.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet202.java
deleted file mode 100644
index 3eb9047..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet202.java
+++ /dev/null
@@ -1,54 +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.snippets;
-
-/*
- * Virtual Tree example snippet: populate tree lazily
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */ 
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet202 {
-
-public static void main(String[] args) {
-	Display display = new Display();
-	final Shell shell = new Shell(display);
-	shell.setLayout (new FillLayout());
-	final Tree tree = new Tree(shell, SWT.VIRTUAL | SWT.BORDER);
-	tree.addListener(SWT.SetData, new Listener() {
-		public void handleEvent(Event event) {
-			TreeItem item = (TreeItem)event.item;
-			TreeItem parentItem = item.getParentItem();
-			String text = null;
-			if (parentItem == null) {
-				text = "node "+tree.indexOf(item);
-			} else {
-				text = parentItem.getText()+" - "+parentItem.indexOf(item);
-			}
-			item.setText(text);
-			item.setItemCount(10);
-		}
-	});
-	tree.setItemCount(20);
-	shell.setSize(400, 300);
-	shell.open();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet203.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet203.java
deleted file mode 100644
index 6fb6de8..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet203.java
+++ /dev/null
@@ -1,67 +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.snippets;
-
-/*
- * TextLayout example snippet: using TextLayout justify, alignment and indent 
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */ 
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.graphics.*;
-
-public class Snippet203 {
-	
-public static void main(String[] args) {
-	Display display = new Display();
-	final Shell shell = new Shell(display, SWT.SHELL_TRIM | SWT.DOUBLE_BUFFERED);	
-	shell.setText("Indent, Justify, Align");
-	String[] texts = {
-		"Plans do not materialize out of nowhere, nor are they entirely static. To ensure the planning process is transparent and open to the entire Eclipse community, we (the Eclipse PMC) post plans in an embryonic form and revise them throughout the release cycle.",
-		"The first part of the plan deals with the important matters of release deliverables, release milestones, target operating environments, and release-to-release compatibility. These are all things that need to be clear for any release, even if no features were to change.",
-		"The remainder of the plan consists of plan items for the various Eclipse subprojects. Each plan item covers a feature or API that is to be added to Eclipse, or some aspect of Eclipse that is to be improved. Each plan item has its own entry in the Eclipse bugzilla database, with a title and a concise summary (usually a single paragraph) that explains the work item at a suitably high enough level so that everyone can readily understand what the work item is without having to understand the nitty-gritty detail.",
-	};
-	int[] alignments = {SWT.LEFT, SWT.CENTER, SWT.RIGHT};
-	final TextLayout[] layouts = new TextLayout[texts.length];
-	for (int i = 0; i < layouts.length; i++) {
-		TextLayout layout = new TextLayout(display);
-		layout.setText(texts[i]);
-		layout.setIndent(30);
-		layout.setJustify(true);
-		layout.setAlignment(alignments[i]);		
-		layouts[i] = layout;
-	}
-	shell.addListener(SWT.Paint, new Listener() {
-		public void handleEvent(Event event) {
-			Point point = new Point(10, 10);
-			int width = shell.getClientArea().width - 2 * point.x;
-			for (int i = 0; i < layouts.length; i++) {
-				TextLayout layout = layouts[i];
-				layout.setWidth(width);
-				layout.draw(event.gc, point.x, point.y);
-				point.y += layout.getBounds().height + 10;
-			}			
-		}
-	});
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch()) display.sleep();
-	}
-	for (int i = 0; i < layouts.length; i++) {
-		layouts[i].dispose();		
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet204.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet204.java
deleted file mode 100644
index d4b608d..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet204.java
+++ /dev/null
@@ -1,103 +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.snippets;
-
-/*
- * TextLayout example snippet: using the rise field of a TextStyle.
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */ 
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.graphics.*;
-
-public class Snippet204 {
-	
-public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display, SWT.SHELL_TRIM | SWT.DOUBLE_BUFFERED);
-	shell.setText("Modify Rise");
-	FontData data = display.getSystemFont().getFontData()[0];
-	Font font = new Font(display, data.getName(), 24, SWT.NORMAL);
-	Font smallFont = new Font(display, data.getName(), 8, SWT.NORMAL);
-	GC gc = new GC(shell);
-	gc.setFont(smallFont);
-	FontMetrics smallMetrics = gc.getFontMetrics();
-	final int smallBaseline = smallMetrics.getAscent() + smallMetrics.getLeading();
-	gc.setFont(font);
-	FontMetrics metrics = gc.getFontMetrics();
-	final int baseline = metrics.getAscent() + metrics.getLeading();
-	gc.dispose();
-	
-	final TextLayout layout0 = new TextLayout(display);
-	layout0.setText("SubscriptScriptSuperscript");
-	layout0.setFont(font);
-	TextStyle subscript0 = new TextStyle(smallFont, null, null);
-	TextStyle superscript0 = new TextStyle(smallFont, null, null);
-	superscript0.rise = baseline - smallBaseline;
-	layout0.setStyle(subscript0, 0, 8);
-	layout0.setStyle(superscript0, 15, 25);
-		
-	final TextLayout layout1 = new TextLayout(display);
-	layout1.setText("SubscriptScriptSuperscript");
-	layout1.setFont(font);
-	TextStyle subscript1 = new TextStyle(smallFont, null, null);
-	subscript1.rise = -smallBaseline;
-	TextStyle superscript1 = new TextStyle(smallFont, null, null);
-	superscript1.rise = baseline;
-	layout1.setStyle(subscript1, 0, 8);
-	layout1.setStyle(superscript1, 15, 25);
-	
-	shell.addListener(SWT.Paint, new Listener() {
-		public void handleEvent(Event event) {
-			Display display = event.display;
-			GC gc = event.gc;
-			
-			Rectangle rect0 = layout0.getBounds();
-			rect0.x += 10;
-			rect0.y += 10;
-			gc.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
-			gc.setForeground(display.getSystemColor(SWT.COLOR_BLACK));
-			gc.fillRectangle(rect0);
-			layout0.draw(gc, rect0.x, rect0.y);
-			gc.setForeground(display.getSystemColor(SWT.COLOR_MAGENTA));
-			gc.drawLine(rect0.x, rect0.y, rect0.x + rect0.width, rect0.y);
-			gc.drawLine(rect0.x, rect0.y + baseline, rect0.x + rect0.width, rect0.y + baseline);
-			gc.drawLine(rect0.x + rect0.width / 2, rect0.y, rect0.x + rect0.width / 2, rect0.y + rect0.height);
-			
-			Rectangle rect1 = layout1.getBounds();
-			rect1.x += 10;
-			rect1.y += 20 + rect0.height;
-			gc.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
-			gc.setForeground(display.getSystemColor(SWT.COLOR_BLACK));
-			gc.fillRectangle(rect1);			
-			layout1.draw(gc, rect1.x, rect1.y);
-			
-			gc.setForeground(display.getSystemColor(SWT.COLOR_MAGENTA));
-			gc.drawLine(rect1.x, rect1.y + smallBaseline, rect1.x + rect1.width, rect1.y + smallBaseline);
-			gc.drawLine(rect1.x, rect1.y + baseline + smallBaseline, rect1.x + rect1.width, rect1.y + baseline + smallBaseline);
-			gc.drawLine(rect1.x + rect1.width / 2, rect1.y, rect1.x + rect1.width / 2, rect1.y + rect1.height);
-		}
-	});
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch()) display.sleep();
-	}
-	layout0.dispose();
-	layout1.dispose();
-	smallFont.dispose();
-	font.dispose();
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet205.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet205.java
deleted file mode 100644
index 978f135..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet205.java
+++ /dev/null
@@ -1,93 +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.snippets;
-
-/*
- * TextLayout example snippet: using the GlyphMetrics to embedded images in 
- * a TextLayout. 
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */ 
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.graphics.*;
-
-
-public class Snippet205 {
-	
-public static void main(String[] args) {
-	Display display = new Display();
-	final Shell shell = new Shell(display, SWT.SHELL_TRIM | SWT.DOUBLE_BUFFERED);
-	shell.setText("Embedding objects in text");
-	final Image[] images = {new Image(display, 32, 32), new Image(display, 20, 40), new Image(display, 40, 20)};
-	int[] colors  = {SWT.COLOR_BLUE, SWT.COLOR_MAGENTA, SWT.COLOR_GREEN};
-	for (int i = 0; i < images.length; i++) {
-		GC gc = new GC(images[i]);
-		gc.setBackground(display.getSystemColor(colors[i]));
-		gc.fillRectangle(images[i].getBounds());
-		gc.dispose();
-	}
-	
-	final Button button = new Button(shell, SWT.PUSH);
-	button.setText("Button");
-	button.pack();
-	String text = "Here is some text with a blue image \uFFFC, a magenta image \uFFFC, a green image \uFFFC, and a button: \uFFFC.";
-	final int[] imageOffsets = {36, 55, 72};
-	final TextLayout layout = new TextLayout(display);
-	layout.setText(text);
-	for (int i = 0; i < images.length; i++) {
-		Rectangle bounds = images[i].getBounds();
-		TextStyle imageStyle = new TextStyle(null, null, null);
-		imageStyle.metrics = new GlyphMetrics(bounds.height, 0, bounds.width); 
-		layout.setStyle(imageStyle, imageOffsets[i], imageOffsets[i]);
-	}
-	Rectangle bounds = button.getBounds();
-	TextStyle buttonStyle = new TextStyle(null, null, null);
-	buttonStyle.metrics = new GlyphMetrics(bounds.height, 0, bounds.width); 
-	final int buttonOffset = text.length() - 2;
-	layout.setStyle(buttonStyle, buttonOffset, buttonOffset);
-	
-	shell.addListener(SWT.Paint, new Listener() {
-		public void handleEvent(Event event) {
-			GC gc = event.gc;
-			Point margin = new Point(10, 10);
-			layout.setWidth(shell.getClientArea().width - 2 * margin.x);
-			layout.draw(event.gc, margin.x, margin.y);
-			for (int i = 0; i < images.length; i++) {
-				int offset = imageOffsets[i];
-				int lineIndex = layout.getLineIndex(offset);
-				FontMetrics lineMetrics = layout.getLineMetrics(lineIndex);
-				Point point = layout.getLocation(offset, false);
-				GlyphMetrics glyphMetrics = layout.getStyle(offset).metrics;
-				gc.drawImage(images[i], point.x + margin.x, point.y + margin.y + lineMetrics.getAscent() - glyphMetrics.ascent);
-			}
-			int lineIndex = layout.getLineIndex(buttonOffset);
-			FontMetrics lineMetrics = layout.getLineMetrics(lineIndex);
-			Point point = layout.getLocation(buttonOffset, false);
-			GlyphMetrics glyphMetrics = layout.getStyle(buttonOffset).metrics;
-			button.setLocation(point.x + margin.x, point.y + margin.y + lineMetrics.getAscent() - glyphMetrics.ascent);
-		}
-	});
-
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch()) display.sleep();
-	}
-	layout.dispose();
-	for (int i = 0; i < images.length; i++) {
-		images[i].dispose();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet206.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet206.java
deleted file mode 100644
index 81453b5..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet206.java
+++ /dev/null
@@ -1,43 +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.snippets;
-
-/*
- * A button with text and image
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */ 
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet206 {
-
-public static void main(String[] args) {
-	Display display = new Display();
-	Image image = display.getSystemImage(SWT.ICON_QUESTION);
-	Shell shell = new Shell(display);
-	shell.setLayout (new GridLayout());
-	Button button = new Button(shell, SWT.PUSH);
-	button.setImage(image);
-	button.setText("Button");
-	shell.setSize(300, 300);
-	shell.open();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet207.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet207.java
deleted file mode 100644
index 35e090e..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet207.java
+++ /dev/null
@@ -1,119 +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.snippets;
-
-/*
- * Use transformation matrices to reflect, rotate and shear images
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet207 {	
-	public static void main(String[] args) {
-		final Display display = new Display();
-		
-		final Image image = new Image(display, 110, 60);
-		GC gc = new GC(image);
-		Font font = new Font(display, "Times", 30, SWT.BOLD);
-		gc.setFont(font);
-		gc.setBackground(display.getSystemColor(SWT.COLOR_RED));
-		gc.fillRectangle(0, 0, 110, 60);
-		gc.setForeground(display.getSystemColor(SWT.COLOR_WHITE));
-		gc.drawText("SWT", 10, 10, true);
-		font.dispose();
-		gc.dispose();
-		
-		final Rectangle rect = image.getBounds();
-		Shell shell = new Shell(display);
-		shell.setText("Matrix Tranformations");
-		shell.setLayout(new FillLayout());
-		final Canvas canvas = new Canvas(shell, SWT.DOUBLE_BUFFERED);
-		canvas.addPaintListener(new PaintListener () {
-			public void paintControl(PaintEvent e) {	
-				GC gc = e.gc;
-				gc.setAdvanced(true);
-				if (!gc.getAdvanced()){
-					gc.drawText("Advanced graphics not supported", 30, 30, true);
-					return;
-				}
-				
-				// Original image
-				int x = 30, y = 30;
-				gc.drawImage(image, x, y); 
-				x += rect.width + 30;
-				
-				Transform transform = new Transform(display);
-				
-				// Note that the tranform is applied to the whole GC therefore
-				// the coordinates need to be adjusted too.
-				
-				// Reflect around the y axis.
-				transform.setElements(-1, 0, 0, 1, 0 ,0);
-				gc.setTransform(transform);
-				gc.drawImage(image, -1*x-rect.width, y);
-				
-				x = 30; y += rect.height + 30;
-				
-				// Reflect around the x axis. 
-				transform.setElements(1, 0, 0, -1, 0, 0);
-				gc.setTransform(transform);
-				gc.drawImage(image, x, -1*y-rect.height);
-				
-				x += rect.width + 30;
-				
-				// Reflect around the x and y axes	
-				transform.setElements(-1, 0, 0, -1, 0, 0);
-				gc.setTransform(transform);
-				gc.drawImage(image, -1*x-rect.width, -1*y-rect.height);
-				
-				x = 30; y += rect.height + 30;
-				
-				// Shear in the x-direction
-				transform.setElements(1, 0, -1, 1, 0, 0);
-				gc.setTransform(transform);
-				gc.drawImage(image, 300, y);
-				
-				// Shear in y-direction
-				transform.setElements(1, -1, 0, 1, 0, 0);
-				gc.setTransform(transform);
-				gc.drawImage(image, 150, 475);
-				
-				// Rotate by 45 degrees	
-				float cos45 = (float)Math.cos(45);
-				float sin45 = (float)Math.sin(45);
-				transform.setElements(cos45, sin45, -sin45, cos45, 0, 0);
-				gc.setTransform(transform);
-				gc.drawImage(image, 350, 100);
-				
-				transform.dispose();
-			}
-		});
-		
-		shell.setSize(350, 550);
-		shell.open();
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		image.dispose();
-		display.dispose();
-	}
-}
-	
-
-
-
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet208.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet208.java
deleted file mode 100644
index 7a8865c..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet208.java
+++ /dev/null
@@ -1,110 +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.snippets;
-
-/*
- * Change hue, saturation and brightness of a color
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet208 {	 
-
-public static void main (String [] args) {
-	PaletteData palette = new PaletteData(0xff, 0xff00, 0xff0000);	
-	
-	// ImageData showing variations of hue	
-	ImageData hueData = new ImageData(360, 100, 24, palette);	
-	float hue = 0;
-	for (int x = 0; x < hueData.width; x++) {
-		for (int y = 0; y < hueData.height; y++) {
-			int pixel = palette.getPixel(new RGB(hue, 1f, 1f));
-			hueData.setPixel(x, y, pixel);
-		}
-		hue += 360f / hueData.width;
-	}
-
-	// ImageData showing saturation on x axis and brightness on y axis
-	ImageData saturationBrightnessData = new ImageData(360, 360, 24, palette);
-	float saturation = 0f;
-	float brightness = 1f;
-	for (int x = 0; x < saturationBrightnessData.width; x++) {
-		brightness = 1f;
-		for (int y = 0; y < saturationBrightnessData.height; y++) {
-			int pixel = palette.getPixel(new RGB(360f, saturation, brightness));	
-			saturationBrightnessData.setPixel(x, y, pixel);
-			brightness -= 1f / saturationBrightnessData.height;
-		}
-		saturation += 1f / saturationBrightnessData.width;
-	}
-		
-	Display display = new Display();
-	Image hueImage = new Image(display, hueData);
-	Image saturationImage = new Image(display, saturationBrightnessData);
-	Shell shell = new Shell(display);
-	shell.setText("Hue, Saturation, Brightness");
-	GridLayout gridLayout = new GridLayout(2, false);
-	gridLayout.verticalSpacing = 10;
-	gridLayout.marginWidth = gridLayout.marginHeight = 16;
-	shell.setLayout(gridLayout);		
-	
-	Label label = new Label(shell, SWT.CENTER);
-	label.setImage(hueImage);
-	GridData data = new GridData(SWT.RIGHT, SWT.CENTER, false, false, 2, 1);
-	label.setLayoutData(data);	
-	
-	label = new Label(shell, SWT.CENTER); //spacer
-	label = new Label(shell, SWT.CENTER);
-	label.setText("Hue");
-	data = new GridData(SWT.CENTER, SWT.CENTER, false, false);
-	label.setLayoutData(data);
-	label = new Label(shell, SWT.CENTER); //spacer
-	data = new GridData(SWT.CENTER, SWT.CENTER, false, false, 2, 1);
-	label.setLayoutData(data);
-	
-	label = new Label(shell, SWT.LEFT);
-	label.setText("Brightness");
-	data = new GridData(SWT.LEFT, SWT.CENTER, false, false);
-	label.setLayoutData(data);
-	
-	label = new Label(shell, SWT.CENTER);
-	label.setImage(saturationImage);
-	data = new GridData(SWT.CENTER, SWT.CENTER, false, false);
-	label.setLayoutData (data);
-	
-	label = new Label(shell, SWT.CENTER); //spacer
-	label = new Label(shell, SWT.CENTER);
-	label.setText("Saturation");
-	data = new GridData(SWT.CENTER, SWT.CENTER, false, false);
-	label.setLayoutData(data);
-	
-	shell.pack();
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch()) {
-			display.sleep();
-		}
-	}
-	hueImage.dispose();
-	saturationImage.dispose();	
-	display.dispose();
-}
-
-}
-
-
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet209.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet209.java
deleted file mode 100644
index 8992502..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet209.java
+++ /dev/null
@@ -1,137 +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.snippets;
-
-/*
- * SWT OpenGL snippet: use JOGL to draw to an SWT GLCanvas
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.opengl.GLCanvas;
-import org.eclipse.swt.opengl.GLData;
-
-import javax.media.opengl.GL;
-import javax.media.opengl.GLContext;
-import javax.media.opengl.GLDrawableFactory;
-import javax.media.opengl.glu.GLU;
-
-public class Snippet209 {
-	static void drawTorus(GL gl, float r, float R, int nsides, int rings) {
-		float ringDelta = 2.0f * (float) Math.PI / rings;
-		float sideDelta = 2.0f * (float) Math.PI / nsides;
-		float theta = 0.0f, cosTheta = 1.0f, sinTheta = 0.0f;
-		for (int i = rings - 1; i >= 0; i--) {
-			float theta1 = theta + ringDelta;
-			float cosTheta1 = (float) Math.cos(theta1);
-			float sinTheta1 = (float) Math.sin(theta1);
-			gl.glBegin(GL.GL_QUAD_STRIP);
-			float phi = 0.0f;
-			for (int j = nsides; j >= 0; j--) {
-				phi += sideDelta;
-				float cosPhi = (float) Math.cos(phi);
-				float sinPhi = (float) Math.sin(phi);
-				float dist = R + r * cosPhi;
-				gl.glNormal3f(cosTheta1 * cosPhi, -sinTheta1 * cosPhi, sinPhi);
-				gl.glVertex3f(cosTheta1 * dist, -sinTheta1 * dist, r * sinPhi);
-				gl.glNormal3f(cosTheta * cosPhi, -sinTheta * cosPhi, sinPhi);
-				gl.glVertex3f(cosTheta * dist, -sinTheta * dist, r * sinPhi);
-			}
-			gl.glEnd();
-			theta = theta1;
-			cosTheta = cosTheta1;
-			sinTheta = sinTheta1;
-		}
-	}
-
-	public static void main(String [] args) {
-		final Display display = new Display();
-		Shell shell = new Shell(display);
-		shell.setLayout(new FillLayout());
-		Composite comp = new Composite(shell, SWT.NONE);
-		comp.setLayout(new FillLayout());
-		GLData data = new GLData ();
-		data.doubleBuffer = true;
-		final GLCanvas canvas = new GLCanvas(comp, SWT.NONE, data);
-
-		canvas.setCurrent();
-		final GLContext context = GLDrawableFactory.getFactory().createExternalGLContext();
-
-		canvas.addListener(SWT.Resize, new Listener() {
-			public void handleEvent(Event event) {
-				Rectangle bounds = canvas.getBounds();
-				float fAspect = (float) bounds.width / (float) bounds.height;
-				canvas.setCurrent();
-				context.makeCurrent();
-				GL gl = context.getGL ();
-				gl.glViewport(0, 0, bounds.width, bounds.height);
-				gl.glMatrixMode(GL.GL_PROJECTION);
-				gl.glLoadIdentity();
-				GLU glu = new GLU();
-				glu.gluPerspective(45.0f, fAspect, 0.5f, 400.0f);
-				gl.glMatrixMode(GL.GL_MODELVIEW);
-				gl.glLoadIdentity();
-				context.release();
-			}
-		});
-
-		context.makeCurrent();
-		GL gl = context.getGL ();
-		gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
-		gl.glColor3f(1.0f, 0.0f, 0.0f);
-		gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST);
-		gl.glClearDepth(1.0);
-		gl.glLineWidth(2);
-		gl.glEnable(GL.GL_DEPTH_TEST);
-		context.release();
-
-		shell.setText("SWT/JOGL Example");
-		shell.setSize(640, 480);
-		shell.open();
-
-		display.asyncExec(new Runnable() {
-			int rot = 0;
-			public void run() {
-				if (!canvas.isDisposed()) {
-					canvas.setCurrent();
-					context.makeCurrent();
-					GL gl = context.getGL ();
-					gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
-					gl.glClearColor(.3f, .5f, .8f, 1.0f);
-					gl.glLoadIdentity();
-					gl.glTranslatef(0.0f, 0.0f, -10.0f);
-					float frot = rot;
-					gl.glRotatef(0.15f * rot, 2.0f * frot, 10.0f * frot, 1.0f);
-					gl.glRotatef(0.3f * rot, 3.0f * frot, 1.0f * frot, 1.0f);
-					rot++;
-					gl.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_LINE);
-					gl.glColor3f(0.9f, 0.9f, 0.9f);
-					drawTorus(gl, 1, 1.9f + ((float) Math.sin((0.004f * frot))), 15, 15);
-					canvas.swapBuffers();
-					context.release();
-					display.asyncExec(this);
-				}
-			}
-		});
-
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		display.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet21.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet21.java
deleted file mode 100644
index 42ba008..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet21.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Canvas example snippet: implement tab traversal (behave like a tab group)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet21 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	final Color red = display.getSystemColor (SWT.COLOR_RED);
-	final Color blue = display.getSystemColor (SWT.COLOR_BLUE);
-	Shell shell = new Shell (display);
-	Button b = new Button (shell, SWT.PUSH);
-	b.setBounds (10, 10, 100, 32);
-	b.setText ("Button");
-	shell.setDefaultButton (b);
-	final Canvas c = new Canvas (shell, SWT.BORDER);
-	c.setBounds (10, 50, 100, 32);
-	c.addListener (SWT.Traverse, new Listener () {
-		public void handleEvent (Event e) {
-			switch (e.detail) {
-				/* Do tab group traversal */
-				case SWT.TRAVERSE_ESCAPE:
-				case SWT.TRAVERSE_RETURN:
-				case SWT.TRAVERSE_TAB_NEXT:	
-				case SWT.TRAVERSE_TAB_PREVIOUS:
-				case SWT.TRAVERSE_PAGE_NEXT:	
-				case SWT.TRAVERSE_PAGE_PREVIOUS:
-					e.doit = true;
-					break;
-			}
-		}
-	});
-	c.addListener (SWT.FocusIn, new Listener () {
-		public void handleEvent (Event e) {
-			c.setBackground (red);
-		}
-	});
-	c.addListener (SWT.FocusOut, new Listener () {
-		public void handleEvent (Event e) {
-			c.setBackground (blue);
-		}
-	});
-	c.addListener (SWT.KeyDown, new Listener () {
-		public void handleEvent (Event e) {
-			System.out.println ("KEY");
-			for (int i=0; i<64; i++) {
-				Color c1 = red, c2 = blue;
-				if (c.isFocusControl ()) {
-					c1 = blue;  c2 = red;
-				}
-				c.setBackground (c1);
-				c.update ();
-				c.setBackground (c2);
-			}
-		}
-	});
-	Text t = new Text (shell, SWT.SINGLE | SWT.BORDER);
-	t.setBounds (10, 85, 100, 32);
-
-	Text r = new Text (shell, SWT.MULTI | SWT.BORDER);
-	r.setBounds (10, 120, 100, 32);
-	
-	c.setFocus ();
-	shell.setSize (200, 200);
-	shell.open ();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet210.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet210.java
deleted file mode 100644
index 8410297..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet210.java
+++ /dev/null
@@ -1,96 +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.snippets;
-
-/*
- * Dragging text in a StyledText widget
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */ 
-import org.eclipse.swt.*;
-import org.eclipse.swt.custom.*;
-import org.eclipse.swt.dnd.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet210 {
-	static String string1 = "A drag source is the provider of data in a Drag and Drop data transfer as well as "+
-                           "the originator of the Drag and Drop operation. The data provided by the drag source "+
-                           "may be transferred to another location in the same widget, to a different widget "+
-                           "within the same application, or to a different application altogether. For example, "+
-                           "you can drag text from your application and drop it on an email application, or you "+
-                           "could drag an item in a tree and drop it below a different node in the same tree.";
-
-	static String string2 = "A drop target receives data in a Drag and Drop operation. The data received by "+
-	                        "the drop target may have come from the same widget, from a different widget within "+
-	                        "the same application, or from a different application altogether. For example, you "+
-	                        "can drag text from an email application and drop it on your application, or you could "+
-	                        "drag an item in a tree and drop it below a different node in the same tree.";
-	
-public static void main (String [] args) {
-	final Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setLayout(new FillLayout());
-	int style = SWT.MULTI | SWT.WRAP | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER;
-	final StyledText text1 = new StyledText(shell, style);
-	text1.setText(string1);
-	DragSource source = new DragSource(text1, DND.DROP_COPY | DND.DROP_MOVE);
-	source.setTransfer(new Transfer[] {TextTransfer.getInstance()});
-	source.addDragListener(new DragSourceAdapter() {
-		public void dragStart(DragSourceEvent e) {
-			Point selection = text1.getSelection();
-			try {
-				int offset = text1.getOffsetAtLocation(new Point(e.x, e.y));
-				e.doit = offset > selection.x && offset < selection.y;
-			} catch (IllegalArgumentException ex) {
-			}
-		}
-		public void dragSetData(DragSourceEvent e) {
-			Point selection = text1.getSelection();
-			if (selection.x != selection.y) {
-				e.data = text1.getText(selection.x, selection.y-1);
-			}
-		}
-		public void dragFinished(DragSourceEvent e) {
-			if (e.detail == DND.DROP_MOVE) {
-				text1.insert("");
-			}
-		}
-	});
-	
-	final StyledText text2 = new StyledText(shell, style);
-	text2.setText(string2);
-	DropTarget target = new DropTarget(text2, DND.DROP_DEFAULT | DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK);
-	target.setTransfer(new Transfer[] {TextTransfer.getInstance()});
-	target.addDropListener(new DropTargetAdapter() {
-		public void dragEnter(DropTargetEvent e) {
-			if (e.detail == DND.DROP_DEFAULT)
-				e.detail = DND.DROP_COPY;
-		}
-		public void dragOperationChanged(DropTargetEvent e) {
-			if (e.detail == DND.DROP_DEFAULT)
-				e.detail = DND.DROP_COPY;
-		}
-		public void drop(DropTargetEvent e) {
-			text2.insert((String)e.data);
-		}
-	});
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet211.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet211.java
deleted file mode 100644
index 038598c..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet211.java
+++ /dev/null
@@ -1,83 +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.snippets;
-
-/*
- * SWT StyledText snippet: use rise and font with StyleRange. 
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.custom.*;
-
-public class Snippet211 {
-
-	static String text = 
-		"You can set any font you want in a range. You can also set a baseline rise and all other old features" + 
-		" like background and foreground, and mix them any way you want. Totally awesome.";
-	
-	public static void main(String [] args) {
-		Display display = new Display();
-		Shell shell = new Shell(display);
-		shell.setLayout(new FillLayout());
-		StyledText styledText = new StyledText(shell, SWT.WRAP | SWT.BORDER);
-		styledText.setText(text);
-		FontData data = styledText.getFont().getFontData()[0];
-		Font font1 = new Font(display, data.getName(), data.getHeight() * 2, data.getStyle());
-		Font font2 = new Font(display, data.getName(), data.getHeight() * 4 / 5, data.getStyle());
-		StyleRange[] styles = new StyleRange[8];
-		styles[0] = new StyleRange();
-		styles[0].font = font1; 
-		styles[1] = new StyleRange();
-		styles[1].rise = data.getHeight() / 3; 
-		styles[2] = new StyleRange();
-		styles[2].background = display.getSystemColor(SWT.COLOR_GREEN); 
-		styles[3] = new StyleRange();
-		styles[3].foreground = display.getSystemColor(SWT.COLOR_MAGENTA); 
-		styles[4] = new StyleRange();
-		styles[4].font = font2; 
-		styles[4].foreground = display.getSystemColor(SWT.COLOR_BLUE);;
-		styles[4].underline = true;
-		styles[5] = new StyleRange();
-		styles[5].rise = -data.getHeight() / 3; 
-		styles[5].strikeout = true;
-		styles[5].underline = true;
-		styles[6] = new StyleRange();
-		styles[6].font = font1; 
-		styles[6].foreground = display.getSystemColor(SWT.COLOR_YELLOW);
-		styles[6].background = display.getSystemColor(SWT.COLOR_BLUE);
-		styles[7] = new StyleRange();
-		styles[7].rise =  data.getHeight() / 3;
-		styles[7].underline = true;
-		styles[7].fontStyle = SWT.BOLD;
-		styles[7].foreground = display.getSystemColor(SWT.COLOR_RED);
-		styles[7].background = display.getSystemColor(SWT.COLOR_BLACK);
-		
-		int[] ranges = new int[] {16, 4, 61, 13, 107, 10, 122, 10, 134, 3, 143, 6, 160, 7, 168, 7};
-		styledText.setStyleRanges(ranges, styles);
-		
-		shell.setSize(300, 300);
-		shell.open();
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		font1.dispose();
-		font2.dispose();		
-		display.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet212.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet212.java
deleted file mode 100644
index 3bef3b7..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet212.java
+++ /dev/null
@@ -1,153 +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.snippets;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.custom.*;
-
-/**
- * StyledText snippet: embed images
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-public class Snippet212 {
-	
-	static StyledText styledText;
-	static String text = 
-		"This snippet shows how to embed images in a StyledText.\n"+
-		"Here is one: \uFFFC, and here is another: \uFFFC."+
-		"Use the add button to add an image from your filesystem to the StyledText at the current caret offset.";
-	static Image[] images;
-	static int[] offsets;
-
-	static void addImage(Image image, int offset) {
-		StyleRange style = new StyleRange ();
-		style.start = offset;
-		style.length = 1;
-		Rectangle rect = image.getBounds();
-		style.metrics = new GlyphMetrics(rect.height, 0, rect.width);
-		styledText.setStyleRange(style);		
-	}
-	
-	public static void main(String [] args) {
-		final Display display = new Display();
-		final Shell shell = new Shell(display);
-		shell.setLayout(new GridLayout());
-		styledText = new StyledText(shell, SWT.WRAP | SWT.BORDER);
-		styledText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		styledText.setText(text);
-		images = new Image[] {
-			display.getSystemImage(SWT.ICON_QUESTION),
-			display.getSystemImage(SWT.ICON_INFORMATION),
-		};
-		offsets = new int[images.length];
-		int lastOffset = 0;
-		for (int i = 0; i < images.length; i++) {
-			int offset = text.indexOf("\uFFFC", lastOffset);
-			offsets[i] = offset;
-			addImage(images[i], offset);
-			lastOffset = offset + 1;
-		}
-		
-		// use a verify listener to keep the offsets up to date
-		styledText.addVerifyListener(new VerifyListener()  {
-			public void verifyText(VerifyEvent e) {
-				int start = e.start;
-				int replaceCharCount = e.end - e.start;
-				int newCharCount = e.text.length();
-				for (int i = 0; i < offsets.length; i++) {
-					int offset = offsets[i];
-					if (start <= offset && offset < start + replaceCharCount) {
-						// this image is being deleted from the text
-						if (images[i] != null && !images[i].isDisposed()) {
-							images[i].dispose();
-							images[i] = null;
-						}
-						offset = -1;
-					}
-					if (offset != -1 && offset >= start) offset += newCharCount - replaceCharCount;
-					offsets[i] = offset;
-				}
-			}
-		});
-		styledText.addPaintObjectListener(new PaintObjectListener() {
-			public void paintObject(PaintObjectEvent event) {
-				GC gc = event.gc;
-				StyleRange style = event.style;
-				int start = style.start;
-				for (int i = 0; i < offsets.length; i++) {
-					int offset = offsets[i];
-					if (start == offset) {
-						Image image = images[i];
-						int x = event.x;
-						int y = event.y + event.ascent - style.metrics.ascent;						
-						gc.drawImage(image, x, y);
-					}
-				}
-			}
-		});
-		
-		Button button = new Button (shell, SWT.PUSH);
-		button.setText("Add Image");
-		button.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
-		button.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event event) {
-				FileDialog dialog = new FileDialog(shell);
-				String filename = dialog.open();
-				if (filename != null) {
-					try {
-						Image image = new Image(display, filename);
-						int offset = styledText.getCaretOffset();
-						styledText.replaceTextRange(offset, 0, "\uFFFC");
-						int index = 0;
-						while (index < offsets.length) {
-							if (offsets[index] == -1 && images[index] == null) break;
-							index++;
-						}
-						if (index == offsets.length) {
-							int[] tmpOffsets = new int[index + 1];
-							System.arraycopy(offsets, 0, tmpOffsets, 0, offsets.length);
-							offsets = tmpOffsets;
-							Image[] tmpImages = new Image[index + 1];
-							System.arraycopy(images, 0, tmpImages, 0, images.length);
-							images = tmpImages;
-						}
-						offsets[index] = offset;
-						images[index] = image;
-						addImage(image, offset);
-					} catch (Exception e) {
-						e.printStackTrace();
-					}
-				}				
-			}
-		});
-		shell.setSize(400, 400);
-		shell.open();
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		for (int i = 0; i < images.length; i++) {
-			Image image = images[i];
-			if (image != null && !image.isDisposed()) {
-				image.dispose();
-			}
-		}
-		display.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet213.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet213.java
deleted file mode 100644
index e49b430..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet213.java
+++ /dev/null
@@ -1,54 +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.snippets;
-
-/*
- * SWT StyledText snippet: use indent, alignment and justify.
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.custom.*;
-
-public class Snippet213 {
-
-	static String text = 
-		"The first paragraph has an indentation of fifty pixels. Indentation is the amount of white space in front of the first line of a paragraph. If this paragraph wraps to several lines you should see the indentation only on the first line.\n\n" +
-		"The second paragraph is center aligned. Alignment only works when the StyledText is using word wrap. Alignment, as with all other line attributes, can be set for the whole widget or just for a set of lines.\n\n" +
-		"The third paragraph is justified. Like alignment, justify only works when the StyledText is using word wrap. If the paragraph wraps to several lines, the justification is performed on all lines but the last one.\n\n" +		
-		"The last paragraph is justified and right aligned. In this case, the alignment is only noticeable in the final line.";
-	
-	public static void main(String [] args) {
-		Display display = new Display();
-		Shell shell = new Shell(display);
-		shell.setLayout(new FillLayout());
-		StyledText styledText = new StyledText(shell, SWT.WRAP | SWT.BORDER);
-		styledText.setText(text);
-		styledText.setLineIndent(0, 1, 50);
-		styledText.setLineAlignment(2, 1, SWT.CENTER);
-		styledText.setLineJustify(4, 1, true);
-		styledText.setLineAlignment(6, 1, SWT.RIGHT);
-		styledText.setLineJustify(6, 1, true);
-		
-		shell.setSize(300, 400);
-		shell.open();
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		display.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet214.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet214.java
deleted file mode 100644
index 3b3b121..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet214.java
+++ /dev/null
@@ -1,66 +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.snippets;
-
-/*
- * Control example snippet: set a background image
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet214 {
-	static Image oldImage;
-	public static void main(String [] args) {
-		final Display display = new Display ();
-		final Shell shell = new Shell (display);
-		shell.setBackgroundMode (SWT.INHERIT_DEFAULT);
-		FillLayout layout1 = new FillLayout (SWT.VERTICAL);
-		layout1.marginWidth = layout1.marginHeight = 10;
-		shell.setLayout (layout1);
-		Group group = new Group (shell, SWT.NONE);
-		group.setText ("Group ");
-		RowLayout layout2 = new RowLayout (SWT.VERTICAL);
-		layout2.marginWidth = layout2.marginHeight = layout2.spacing = 10;
-		group.setLayout (layout2);
-		for (int i=0; i<8; i++) {
-			Button button = new Button (group, SWT.RADIO);
-			button.setText ("Button " + i);
-		}
-		shell.addListener (SWT.Resize, new Listener () {
-			public void handleEvent (Event event) {
-				Rectangle rect = shell.getClientArea ();
-				Image newImage = new Image (display, Math.max (1, rect.width), 1);	
-				GC gc = new GC (newImage);
-				gc.setForeground (display.getSystemColor (SWT.COLOR_WHITE));
-				gc.setBackground (display.getSystemColor (SWT.COLOR_BLUE));
-				gc.fillGradientRectangle (rect.x, rect.y, rect.width, 1, false);
-				gc.dispose ();
-				shell.setBackgroundImage (newImage);
-				if (oldImage != null) oldImage.dispose ();
-				oldImage = newImage;
-			}
-		});
-		shell.pack ();
-		shell.open ();
-		while (!shell.isDisposed ()) {
-			if (!display.readAndDispatch ()) display.sleep ();
-		}
-		if (oldImage != null) oldImage.dispose ();
-		display.dispose ();
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet215.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet215.java
deleted file mode 100644
index 0d7331f..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet215.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * GC example snippet: take a screen shot with a GC
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.custom.*;
-
-public class Snippet215 {
-
-public static void main(String[] args) {
-	final Display display = new Display();
-	final Shell shell = new Shell(display);
-	shell.setLayout(new FillLayout());
-	Button button = new Button(shell, SWT.PUSH);
-	button.setText("Capture");
-	button.addListener(SWT.Selection, new Listener() {
-		public void handleEvent(Event event) {
-			
-			/* Take the screen shot */
-			GC gc = new GC(display);
-			final Image image = new Image(display, display.getBounds());
-			gc.copyArea(image, 0, 0);
-			gc.dispose();
-			
-			Shell popup = new Shell(shell, SWT.SHELL_TRIM);
-			popup.setLayout(new FillLayout());
-			popup.setText("Image");
-			popup.setBounds(50, 50, 200, 200);
-			popup.addListener(SWT.Close, new Listener() {
-				public void handleEvent(Event e) {
-					image.dispose();
-				}
-			});
-			
-			ScrolledComposite sc = new ScrolledComposite (popup, SWT.V_SCROLL | SWT.H_SCROLL);
-			Canvas canvas = new Canvas(sc, SWT.NONE);
-			sc.setContent(canvas);
-			canvas.setBounds(display.getBounds ());
-			canvas.addPaintListener(new PaintListener() {
-				public void paintControl(PaintEvent e) {
-					e.gc.drawImage(image, 0, 0);
-				}
-			});
-			popup.open();
-		}
-	});
-	shell.pack();
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch()) display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet216.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet216.java
deleted file mode 100644
index ee8f7c4..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet216.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Tool Tips example snippet: show a tool tip inside a rectangle
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet216 {
-	public static void main (String [] args) {
-		Display display = new Display ();
-		final Color [] colors = {
-			display.getSystemColor (SWT.COLOR_RED),
-			display.getSystemColor (SWT.COLOR_GREEN),
-			display.getSystemColor (SWT.COLOR_BLUE),
-		};
-		final Rectangle [] rects = {
-			new Rectangle (10, 10, 30, 30),
-			new Rectangle (20, 45, 25, 35),
-			new Rectangle (80, 80, 10, 10),
-		};
-		final Shell shell = new Shell (display);
-		Listener mouseListener = new Listener () {
-			public void handleEvent (Event event) {
-				switch (event.type) {
-					case SWT.MouseEnter:
-					case SWT.MouseMove:
-						for (int i=0; i<rects.length; i++) {
-							if (rects [i].contains (event.x, event.y)) {
-								String text = "ToolTip " + i;
-								if (!(text.equals (shell.getToolTipText ()))) {
-									shell.setToolTipText ("ToolTip " + i);
-								}
-								return;
-							}
-						}
-						shell.setToolTipText (null);
-						break;
-					}
-			}
-		};
-		shell.addListener (SWT.MouseMove, mouseListener);
-		shell.addListener (SWT.MouseEnter, mouseListener);
-		shell.addListener (SWT.Paint, new Listener () {
-			public void handleEvent (Event event) {
-				GC gc = event.gc;
-				for (int i=0; i<rects.length; i++) {
-					gc.setBackground (colors [i]);
-					gc.fillRectangle (rects [i]);
-					gc.drawRectangle (rects [i]);
-				}
-			}
-		});
-		shell.setSize (200, 200);
-		shell.open ();
-		while (!shell.isDisposed ()) {
-			if (!display.readAndDispatch ()) display.sleep ();
-		}
-		display.dispose ();
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet217.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet217.java
deleted file mode 100644
index 3f511e4..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet217.java
+++ /dev/null
@@ -1,125 +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.snippets;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.custom.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-/**
- * StyledText snippet: embed controls
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-public class Snippet217 {
-	
-	static StyledText styledText;
-	static String text = 
-		"This snippet shows how to embed widgets in a StyledText.\n"+
-		"Here is one: \uFFFC, and here is another: \uFFFC.";
-	static int[] offsets;
-	static Control[] controls;
-	static int MARGIN = 5;
-	
-	static void addControl(Control control, int offset) {
-		StyleRange style = new StyleRange ();
-		style.start = offset;
-		style.length = 1;
-		control.pack();
-		Rectangle rect = control.getBounds();
-		int ascent = 2*rect.height/3;
-		int descent = rect.height - ascent;
-		style.metrics = new GlyphMetrics(ascent + MARGIN, descent + MARGIN, rect.width + 2*MARGIN);
-		styledText.setStyleRange(style);	
-	}
-	
-	public static void main(String [] args) {
-		final Display display = new Display();
-		Font font = new Font(display, "Tahoma", 32, SWT.NORMAL);
-		final Shell shell = new Shell(display);
-		shell.setLayout(new GridLayout());
-		styledText = new StyledText(shell, SWT.WRAP | SWT.BORDER);
-		styledText.setFont(font);
-		styledText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		styledText.setText(text);
-		controls = new Control[2];
-		Button button = new Button(styledText, SWT.PUSH);
-		button.setText("Button 1");
-		controls[0] = button;
-		Combo combo = new Combo(styledText, SWT.NONE);
-		combo.add("item 1");
-		combo.add("another item");
-		controls[1] = combo;
-		offsets = new int[controls.length];
-		int lastOffset = 0;
-		for (int i = 0; i < controls.length; i++) {
-			int offset = text.indexOf("\uFFFC", lastOffset);
-			offsets[i] = offset;
-			addControl(controls[i], offsets[i]);
-			lastOffset = offset + 1;
-		}
-		
-		// use a verify listener to keep the offsets up to date
-		styledText.addVerifyListener(new VerifyListener()  {
-			public void verifyText(VerifyEvent e) {
-				int start = e.start;
-				int replaceCharCount = e.end - e.start;
-				int newCharCount = e.text.length();
-				for (int i = 0; i < offsets.length; i++) {
-					int offset = offsets[i];
-					if (start <= offset && offset < start + replaceCharCount) {
-						// this widget is being deleted from the text
-						if (controls[i] != null && !controls[i].isDisposed()) {
-							controls[i].dispose();
-							controls[i] = null;
-						}
-						offset = -1;
-					}
-					if (offset != -1 && offset >= start) offset += newCharCount - replaceCharCount;
-					offsets[i] = offset;
-				}
-			}
-		});
-		
-		// reposition widgets on paint event
-		styledText.addPaintObjectListener(new PaintObjectListener() {
-			public void paintObject(PaintObjectEvent event) {
-				StyleRange style = event.style;
-				int start = style.start;
-				for (int i = 0; i < offsets.length; i++) {
-					int offset = offsets[i];
-					if (start == offset) {
-						Point pt = controls[i].getSize();
-						int x = event.x + MARGIN;
-						int y = event.y + event.ascent - 2*pt.y/3;
-						controls[i].setLocation(x, y);
-						break;
-					}
-				}
-			}
-		});
-			
-		shell.setSize(400, 400);
-		shell.open();
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		font.dispose();
-		display.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet218.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet218.java
deleted file mode 100644
index fd24a40..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet218.java
+++ /dev/null
@@ -1,71 +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.snippets;
-
-/*
- * SWT StyledText snippet: use gradient background.
- * 
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.custom.*;
-import org.eclipse.swt.graphics.*;
-
-public class Snippet218 {
-
-	static String text = "Plans do not materialize out of nowhere, nor are they entirely static. To ensure the planning process is " +
-		"transparent and open to the entire Eclipse community, we (the Eclipse PMC) post plans in an embryonic "+
-		"form and revise them throughout the release cycle. \n"+
-		"The first part of the plan deals with the important matters of release deliverables, release milestones, target "+
-		"operating environments, and release-to-release compatibility. These are all things that need to be clear for "+
-		"any release, even if no features were to change.  \n";
-	static Image oldImage;
-	
-	public static void main(String [] args) {
-		final Display display = new Display();
-		final Shell shell = new Shell(display);
-		shell.setLayout(new FillLayout());
-		final StyledText styledText = new StyledText(shell, SWT.WRAP | SWT.BORDER);
-		styledText.setText(text);
-		FontData data = display.getSystemFont().getFontData()[0];
-		Font font = new Font(display, data.getName(), 16, SWT.BOLD);
-		styledText.setFont(font);
-		styledText.setForeground(display.getSystemColor (SWT.COLOR_BLUE));
-		styledText.addListener (SWT.Resize, new Listener () {
-			public void handleEvent (Event event) {
-				Rectangle rect = styledText.getClientArea ();
-				Image newImage = new Image (display, 1, Math.max (1, rect.height));
-				GC gc = new GC (newImage);
-				gc.setForeground (display.getSystemColor (SWT.COLOR_WHITE));
-				gc.setBackground (display.getSystemColor (SWT.COLOR_YELLOW));
-				gc.fillGradientRectangle (rect.x, rect.y, 1, rect.height, true);
-				gc.dispose ();
-				styledText.setBackgroundImage (newImage);
-				if (oldImage != null) oldImage.dispose ();
-				oldImage = newImage;
-			}
-		});	
-		shell.setSize(700, 400);
-		shell.open();
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		if (oldImage != null) oldImage.dispose ();
-		font.dispose();
-		display.dispose();
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet219.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet219.java
deleted file mode 100644
index ae37609..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet219.java
+++ /dev/null
@@ -1,94 +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.snippets;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-/**
- * Region snippet: Create non-rectangular shell from an image with transparency
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-public class Snippet219 {
-	public static void main(String[] args) {
-        final Display display = new Display ();
-        final Image image = display.getSystemImage(SWT.ICON_INFORMATION);
-        final Shell shell = new Shell (display, SWT.NO_TRIM);
-        Region region = new Region();
-        final ImageData imageData = image.getImageData();
-        if (imageData.alphaData != null) {
-        	Rectangle pixel = new Rectangle(0, 0, 1, 1);
-        	for (int y = 0; y < imageData.height; y++) {
-	            for (int x = 0; x < imageData.width; x++) {
-	                if (imageData.getAlpha(x, y) == 255) {
-	                	pixel.x = imageData.x + x;
-    					pixel.y = imageData.y + y;
-	                    region.add(pixel);
-	                } 
-	            }
-	        }
-        } else {
-        	ImageData mask = imageData.getTransparencyMask();
-        	Rectangle pixel = new Rectangle(0, 0, 1, 1);
-    		for (int y = 0; y < mask.height; y++) {
-    			for (int x = 0; x < mask.width; x++) {
-    				if (mask.getPixel(x, y) != 0) {
-    					pixel.x = imageData.x + x;
-    					pixel.y = imageData.y + y;
-    					region.add(pixel);
-    				}
-    			}
-    		}
-        }
-        shell.setRegion(region);
-
-        Listener l = new Listener() {
-        	int startX, startY;
-            public void handleEvent(Event e)  {
-            	if (e.type == SWT.KeyDown && e.character == SWT.ESC) {
-            		shell.dispose();
-            	}
-				if (e.type == SWT.MouseDown && e.button == 1) {
-					startX = e.x;
-					startY = e.y; 
-				}
-				if (e.type == SWT.MouseMove && (e.stateMask & SWT.BUTTON1) != 0) {
-					Point p = shell.toDisplay(e.x, e.y);
-					p.x -= startX;
-					p.y -= startY;
-					shell.setLocation(p);
-				}
-				if (e.type == SWT.Paint) {
-					e.gc.drawImage(image, imageData.x, imageData.y);
-				}
-            }
-        };
-        shell.addListener(SWT.KeyDown, l);
-        shell.addListener(SWT.MouseDown, l);
-        shell.addListener(SWT.MouseMove, l);
-        shell.addListener(SWT.Paint, l);
-
-        shell.setSize(imageData.x + imageData.width, imageData.y + imageData.height);
-        shell.open ();
-        while (!shell.isDisposed ()) {
-            if (!display.readAndDispatch ())
-                display.sleep ();
-        }
-        region.dispose();
-        image.dispose ();
-        display.dispose ();
-    }
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet22.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet22.java
deleted file mode 100644
index 765b5ba..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet22.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Text example snippet: select all the text in the control
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.widgets.*;
-
-public class Snippet22 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Text text = new Text (shell, 0);
-	text.setText ("ASDF");
-	text.setSize (64, 32);
-	text.selectAll ();
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet220.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet220.java
deleted file mode 100644
index 7914b7e..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet220.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 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.snippets;
-/* 
- * Tree example snippet: Images on the right side of the TreeItem
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet220 {	
-	
-public static void main(String [] args) {
-	Display display = new Display();
-	final Image image = display.getSystemImage(SWT.ICON_INFORMATION);
-	Shell shell = new Shell(display);
-	shell.setText("Images on the right side of the TreeItem");
-	shell.setLayout(new FillLayout ());
-	Tree tree = new Tree(shell, SWT.MULTI | SWT.FULL_SELECTION);
-	tree.setHeaderVisible(true);
-	tree.setLinesVisible(true);			
-	int columnCount = 4;
-	for(int i = 0; i < columnCount; i++) {
-		TreeColumn column = new TreeColumn(tree, SWT.NONE);
-		column.setText("Column " + i);	
-	}
-	int itemCount = 3;
-	for (int i=0; i<itemCount; i++) {
-		TreeItem item1 = new TreeItem(tree, SWT.NONE);
-		item1.setText("item "+i);
-		for (int c=1; c < columnCount; c++) {
-			item1.setText(c, "item ["+i+"-"+c+"]");
-		}
-		for (int j=0; j<itemCount; j++) {
-			TreeItem item2 = new TreeItem(item1, SWT.NONE);
-			item2.setText("item ["+i+" "+j+"]");
-			for (int c=1; c<columnCount; c++) {
-				item2.setText(c, "item ["+i+" "+j+"-"+c+"]");
-			}
-			for (int k=0; k<itemCount; k++) {
-				TreeItem item3 = new TreeItem(item2, SWT.NONE);
-				item3.setText("item ["+i+" "+j+" "+k+"]");
-				for (int c=1; c<columnCount; c++) {
-					item3.setText(c, "item ["+i+" "+j+" "+k+"-"+c+"]");
-				}
-			}
-		}
-	}
-	/*
-	 * NOTE: MeasureItem, PaintItem and EraseItem are called repeatedly.
-	 * Therefore, it is critical for performance that these methods be
-	 * as efficient as possible.
-	 */
-	Listener paintListener = new Listener() {
-		public void handleEvent(Event event) {			
-			switch(event.type) {
-				case SWT.MeasureItem: {
-					Rectangle rect = image.getBounds();
-					event.width += rect.width;
-					event.height = Math.max(event.height, rect.height + 2);
-					break;
-				}
-				case SWT.PaintItem: {
-					int x = event.x + event.width;
-					Rectangle rect = image.getBounds();
-					int offset = Math.max(0, (event.height - rect.height) / 2);
-					event.gc.drawImage(image, x, event.y + offset);
-					break;
-				}
-			}
-		}
-	};		
-	tree.addListener(SWT.MeasureItem, paintListener);
-	tree.addListener(SWT.PaintItem, paintListener);		
-
-	for(int i = 0; i < columnCount; i++) {
-		tree.getColumn(i).pack();
-	}	
-	shell.setSize(500, 200);
-	shell.open();
-	while(!shell.isDisposed ()) {
-		if(!display.readAndDispatch()) display.sleep();
-	}
-	if(image != null) image.dispose();
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet221.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet221.java
deleted file mode 100644
index 3e09e59..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet221.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-/* 
- * example snippet: Scroll table when mouse at top or bottom
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet221 {
-	static Runnable Heartbeat;
-	static boolean Tracking;
-	static int ScrollSpeed = 40;
-	
-public static void main(String[] args) {
-	final Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setLayout(new FillLayout());
-	final Tree tree = new Tree(shell, SWT.FULL_SELECTION | SWT.BORDER);
-	tree.setHeaderVisible(true);
-	TreeColumn column0 = new TreeColumn(tree, SWT.LEFT);
-	column0.setText("Column 0");
-	TreeColumn column1 = new TreeColumn(tree, SWT.LEFT);
-	column1.setText("Column 1");
-	TreeColumn column2 = new TreeColumn(tree, SWT.LEFT);
-	column2.setText("Column 2");
-	for (int i = 0; i < 9; i++) {
-		TreeItem item = new TreeItem(tree, SWT.NONE);
-		item.setText("item "+i);
-		item.setText(1, "column 1 - "+i);
-		item.setText(2, "column 2 - "+i);
-		for (int j = 0; j < 9; j++) {
-			TreeItem subItem = new TreeItem(item, SWT.NONE);
-			subItem.setText("item "+i+" "+j);
-			subItem.setText(1, "column 1 - "+i+" "+j);
-			subItem.setText(2, "column 2 - "+i+" "+j);
-			for (int k = 0; k < 9; k++) {
-				TreeItem subsubItem = new TreeItem(subItem, SWT.NONE);
-				subsubItem.setText("item "+i+" "+j+" "+k);
-				subsubItem.setText(1, "column 1 - "+i+" "+j+" "+k);
-				subsubItem.setText(2, "column 2 - "+i+" "+j+" "+k);
-			}
-		}
-	}
-	column0.pack();
-	column1.pack();
-	column2.pack();
-	
-	Heartbeat = new Runnable() {
-		public void run() {
-			if (!Tracking || tree.isDisposed()) return;
-			Point cursor = display.getCursorLocation();
-			cursor = display.map(null, tree, cursor);
-			Scroll(tree, cursor.x, cursor.y);
-			display.timerExec(ScrollSpeed, Heartbeat);
-		}
-	};
-	Listener listener = new Listener() {
-		public void handleEvent(Event event) {
-			switch (event.type) {
-			case SWT.MouseEnter:
-				Tracking = true;
-				display.timerExec(0, Heartbeat);
-				break;
-			case SWT.MouseExit:
-				Tracking = false;
-				break;
-			}
-		}
-	};
-	tree.addListener(SWT.MouseEnter, listener); 
-	tree.addListener(SWT.MouseExit, listener);
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-static void Scroll(Tree tree, int x, int y) {
-	TreeItem item = tree.getItem(new Point(x, y));
-	if (item == null) return;
-	Rectangle area = tree.getClientArea();
-	int headerHeight = tree.getHeaderHeight();
-	int itemHeight= tree.getItemHeight();
-	TreeItem nextItem = null;
-	if (y < area.y + headerHeight + 2 * itemHeight) {
-		nextItem = PreviousItem(tree, item);
-	}
-	if (y > area.y + area.height - 2 * itemHeight) {
-		nextItem = NextItem(tree, item);
-	}
-	if (nextItem != null) tree.showItem(nextItem);
-}
-
-static TreeItem PreviousItem(Tree tree, TreeItem item) {
-	if (item == null) return null;
-	TreeItem childItem = item;
-	TreeItem parentItem = childItem.getParentItem();
-	int index = parentItem == null ? tree.indexOf(childItem) : parentItem.indexOf(childItem);
-	if (index == 0) {
-		return parentItem;
-	} else {
-		TreeItem nextItem = parentItem == null ? tree.getItem(index-1) : parentItem.getItem(index-1);
-		int count = nextItem.getItemCount();
-		while (count > 0 && nextItem.getExpanded()) {
-			nextItem = nextItem.getItem(count - 1);
-			count = nextItem.getItemCount();
-		}
-		return nextItem;
-	}
-}
-static TreeItem NextItem(Tree tree, TreeItem item) {
-	if (item == null) return null;
-	if (item.getExpanded()) {
-		return item.getItem(0);
-	} else {
-		TreeItem childItem = item;
-		TreeItem parentItem = childItem.getParentItem();
-		int index = parentItem == null ? tree.indexOf(childItem) : parentItem.indexOf(childItem);
-		int count = parentItem == null ? tree.getItemCount() : parentItem.getItemCount();
-		while (true) {
-			if (index + 1 < count) {
-				return parentItem == null ? tree.getItem(index + 1) : parentItem.getItem(index + 1);
-			} else {
-				if (parentItem == null) {
-					return null;
-				} else {
-					childItem = parentItem;
-					parentItem = childItem.getParentItem();
-					index = parentItem == null ? tree.indexOf(childItem) : parentItem.indexOf(childItem);
-					count = parentItem == null ? tree.getItemCount() : parentItem.getItemCount();
-				}
-			}
-		}
-	}
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet222.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet222.java
deleted file mode 100644
index 2f99385..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet222.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 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.snippets;
-/* 
- * example snippet: StyledText bulleted list example
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.custom.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet222 {
-	
-public static void main(String[] args) {	
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setText("StyledText Bullet Example");
-	shell.setLayout(new FillLayout());
-	final StyledText styledText = new StyledText (shell, SWT.FULL_SELECTION | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
-	StringBuffer text = new StringBuffer();
-	text.append("Here is StyledText with some bulleted lists:\n\n");
-	for (int i = 0; i < 4; i++) text.append("Red Bullet List Item " + i + "\n");
-	text.append("\n");
-	for (int i = 0; i < 2; i++) text.append("Numbered List Item " + i + "\n");
-	for (int i = 0; i < 4; i++) text.append("Sub List Item " + i + "\n");
-	for (int i = 0; i < 2; i++) text.append("Numbered List Item " + (2 + i) + "\n");
-	text.append("\n");
-	for (int i = 0; i < 4; i++) text.append("Custom Draw List Item " + i + "\n");	
-	styledText.setText(text.toString());
-		
-	StyleRange style0 = new StyleRange();
-	style0.metrics = new GlyphMetrics(0, 0, 40);
-	style0.foreground = display.getSystemColor(SWT.COLOR_RED);
-	Bullet bullet0 = new Bullet (style0);
-	StyleRange style1 = new StyleRange();
-	style1.metrics = new GlyphMetrics(0, 0, 50);
-	style1.foreground = display.getSystemColor(SWT.COLOR_BLUE);
-	Bullet bullet1 = new Bullet (ST.BULLET_NUMBER | ST.BULLET_TEXT, style1);
-	bullet1.text = ".";
-	StyleRange style2 = new StyleRange();
-	style2.metrics = new GlyphMetrics(0, 0, 80);
-	style2.foreground = display.getSystemColor(SWT.COLOR_GREEN);
-	Bullet bullet2 = new Bullet (ST.BULLET_TEXT, style2);
-	bullet2.text = "\u2713";
-	StyleRange style3 = new StyleRange();
-	style3.metrics = new GlyphMetrics(0, 0, 50);
-	Bullet bullet3 = new Bullet (ST.BULLET_CUSTOM, style2);
-
-	styledText.setLineBullet(2, 4, bullet0);
-	styledText.setLineBullet(7, 2, bullet1);
-	styledText.setLineBullet(9, 4, bullet2);
-	styledText.setLineBullet(13, 2, bullet1);
-	styledText.setLineBullet(16, 4, bullet3);
-
-	styledText.addPaintObjectListener(new PaintObjectListener() {
-		public void paintObject(PaintObjectEvent event) {
-			Display display = event.display;
-			StyleRange style = event.style;
-			Font font = style.font;
-			if (font == null) font = styledText.getFont();
-			TextLayout layout = new TextLayout(display);
-			layout.setAscent(event.ascent);
-			layout.setDescent(event.descent);
-			layout.setFont(font);
-			layout.setText("\u2023 1." + event.bulletIndex + ")");
-			layout.draw(event.gc, event.x + 10, event.y);
-			layout.dispose();
-		}
-	});
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch()) display.sleep();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet223.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet223.java
deleted file mode 100644
index 96844d2..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet223.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 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.snippets;
-/* 
- * example snippet: ExpandBar example
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.graphics.*;
-
-public class Snippet223 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setLayout(new FillLayout());
-	shell.setText("ExpandBar Example");
-	ExpandBar bar = new ExpandBar (shell, SWT.V_SCROLL);
-	Image image = new Image(display, Snippet223.class.getResourceAsStream("eclipse.png")); 
-	
-	// First item
-	Composite composite = new Composite (bar, SWT.NONE);
-	GridLayout layout = new GridLayout ();
-	layout.marginLeft = layout.marginTop = layout.marginRight = layout.marginBottom = 10;
-	layout.verticalSpacing = 10;
-	composite.setLayout(layout);
-	Button button = new Button (composite, SWT.PUSH);
-	button.setText("SWT.PUSH");
-	button = new Button (composite, SWT.RADIO);
-	button.setText("SWT.RADIO");
-	button = new Button (composite, SWT.CHECK);
-	button.setText("SWT.CHECK");
-	button = new Button (composite, SWT.TOGGLE);
-	button.setText("SWT.TOGGLE");
-	ExpandItem item0 = new ExpandItem (bar, SWT.NONE, 0);
-	item0.setText("What is your favorite button");
-	item0.setHeight(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT).y);
-	item0.setControl(composite);
-	item0.setImage(image);
-	
-	// Second item
-	composite = new Composite (bar, SWT.NONE);
-	layout = new GridLayout (2, false);
-	layout.marginLeft = layout.marginTop = layout.marginRight = layout.marginBottom = 10;
-	layout.verticalSpacing = 10;
-	composite.setLayout(layout);	
-	Label label = new Label (composite, SWT.NONE);
-	label.setImage(display.getSystemImage(SWT.ICON_ERROR));
-	label = new Label (composite, SWT.NONE);
-	label.setText("SWT.ICON_ERROR");
-	label = new Label (composite, SWT.NONE);
-	label.setImage(display.getSystemImage(SWT.ICON_INFORMATION));
-	label = new Label (composite, SWT.NONE);
-	label.setText("SWT.ICON_INFORMATION");
-	label = new Label (composite, SWT.NONE);
-	label.setImage(display.getSystemImage(SWT.ICON_WARNING));
-	label = new Label (composite, SWT.NONE);
-	label.setText("SWT.ICON_WARNING");
-	label = new Label (composite, SWT.NONE);
-	label.setImage(display.getSystemImage(SWT.ICON_QUESTION));
-	label = new Label (composite, SWT.NONE);
-	label.setText("SWT.ICON_QUESTION");
-	ExpandItem item1 = new ExpandItem (bar, SWT.NONE, 1);
-	item1.setText("What is your favorite icon");
-	item1.setHeight(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT).y);
-	item1.setControl(composite);
-	item1.setImage(image);
-	
-	// Third item
-	composite = new Composite (bar, SWT.NONE);
-	layout = new GridLayout (2, true);
-	layout.marginLeft = layout.marginTop = layout.marginRight = layout.marginBottom = 10;
-	layout.verticalSpacing = 10;
-	composite.setLayout(layout);
-	label = new Label (composite, SWT.NONE);
-	label.setText("Scale");	
-	new Scale (composite, SWT.NONE);
-	label = new Label (composite, SWT.NONE);
-	label.setText("Spinner");	
-	new Spinner (composite, SWT.BORDER);
-	label = new Label (composite, SWT.NONE);
-	label.setText("Slider");	
-	new Slider (composite, SWT.NONE);
-	ExpandItem item2 = new ExpandItem (bar, SWT.NONE, 2);
-	item2.setText("What is your favorite range widget");
-	item2.setHeight(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT).y);
-	item2.setControl(composite);
-	item2.setImage(image);
-	
-	item1.setExpanded(true);
-	bar.setSpacing(8);
-	shell.setSize(400, 350);
-	shell.open();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) {
-			display.sleep ();
-		}
-	}
-	image.dispose();
-	display.dispose();
-}
-
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet224.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet224.java
deleted file mode 100644
index 125087e..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet224.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 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.snippets;
-
-/*
- * implement radio behavior for setSelection()
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet224 {
-public static void main (String [] args) {
-	Display display = new Display ();
-	final Shell shell = new Shell (display);
-	shell.setLayout (new RowLayout (SWT.VERTICAL));
-	for (int i=0; i<8; i++) {
-		Button button = new Button (shell, SWT.RADIO);
-		button.setText ("B" + i);
-		if (i == 0) button.setSelection (true);
-	}
-	Button button = new Button (shell, SWT.PUSH);
-	button.setText ("Set Selection to B4");
-	button.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event event) {
-			Control [] children = shell.getChildren ();
-			Button newButton = (Button) children [4];
-			for (int i=0; i<children.length; i++) {
-				Control child = children [i];
-				if (child instanceof Button && (child.getStyle () & SWT.RADIO) != 0) {
-					((Button) child).setSelection (false);
-				}
-			}
-			newButton.setSelection (true);
-		}
-	});
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet225.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet225.java
deleted file mode 100644
index 59b3705..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet225.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 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.snippets;
-  
-/*
- * Tooltip example snippet: create a balloon tooltip for a tray item
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet225 {
-
-public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	Image image = null;
-	final ToolTip tip = new ToolTip(shell, SWT.BALLOON | SWT.ICON_INFORMATION);
-	tip.setMessage("Here is a message for the user. When the message is too long it wraps. I should say something cool but nothing comes to my mind.");
-	Tray tray = display.getSystemTray();
-	if (tray != null) {
-		TrayItem item = new TrayItem(tray, SWT.NONE);
-		image = new Image(display, Snippet225.class.getResourceAsStream("eclipse.png"));
-		item.setImage(image);
-		tip.setText("Notification from a tray item");
-		item.setToolTip(tip);
-	} else {
-		tip.setText("Notification from anywhere");
-		tip.setLocation(400, 400);
-	}
-	Button button = new Button (shell, SWT.PUSH);
-	button.setText("Press for balloon tip");
-	button.addListener(SWT.Selection, new Listener() {
-		public void handleEvent(Event event) {
-			tip.setVisible(true);
-		}
-	});
-	button.pack();
-	shell.setBounds(50, 50, 300, 200);
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch()) display.sleep();
-	}
-	if (image != null) image.dispose();
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet226.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet226.java
deleted file mode 100644
index caa2660..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet226.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 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.snippets;
-
-/* 
- * Tree example snippet: Draw a custom gradient selection
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet226 {
-	
-public static void main(String [] args) {
-	final Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setText("Custom gradient selection for Tree");
-	shell.setLayout(new FillLayout());
-	final Tree tree = new Tree(shell, SWT.MULTI | SWT.FULL_SELECTION);
-	tree.setHeaderVisible(true);
-	tree.setLinesVisible(true);
-	int columnCount = 4;
-	for (int i=0; i<columnCount; i++) {
-		TreeColumn column = new TreeColumn(tree, SWT.NONE);
-		column.setText("Column " + i);	
-	}
-	int itemCount = 3;
-	for (int i=0; i<itemCount; i++) {
-		TreeItem item1 = new TreeItem(tree, SWT.NONE);
-		item1.setText("item "+i);
-		for (int c=1; c < columnCount; c++) {
-			item1.setText(c, "item ["+i+"-"+c+"]");
-		}
-		for (int j=0; j<itemCount; j++) {
-			TreeItem item2 = new TreeItem(item1, SWT.NONE);
-			item2.setText("item ["+i+" "+j+"]");
-			for (int c=1; c<columnCount; c++) {
-				item2.setText(c, "item ["+i+" "+j+"-"+c+"]");
-			}
-			for (int k=0; k<itemCount; k++) {
-				TreeItem item3 = new TreeItem(item2, SWT.NONE);
-				item3.setText("item ["+i+" "+j+" "+k+"]");
-				for (int c=1; c<columnCount; c++) {
-					item3.setText(c, "item ["+i+" "+j+" "+k+"-"+c+"]");
-				}
-			}
-		}
-	}
-
-	/*
-	 * NOTE: MeasureItem, PaintItem and EraseItem are called repeatedly.
-	 * Therefore, it is critical for performance that these methods be
-	 * as efficient as possible.
-	 */
-	tree.addListener(SWT.EraseItem, new Listener() {
-		public void handleEvent(Event event) {			
-			if ((event.detail & SWT.SELECTED) != 0) {
-				GC gc = event.gc;
-				Rectangle area = tree.getClientArea();
-				/*
-				 * If you wish to paint the selection beyond the end of
-				 * last column, you must change the clipping region.
-				 */
-				int columnCount = tree.getColumnCount();
-				if (event.index == columnCount - 1 || columnCount == 0) {
-					int width = area.x + area.width - event.x;
-					if (width > 0) {
-						Region region = new Region();
-						gc.getClipping(region);
-						region.add(event.x, event.y, width, event.height); 
-						gc.setClipping(region);
-						region.dispose();
-					}
-				}
-				gc.setAdvanced(true);
-				if (gc.getAdvanced()) gc.setAlpha(127);								
-				Rectangle rect = event.getBounds();
-				Color foreground = gc.getForeground();
-				Color background = gc.getBackground();
-				gc.setForeground(display.getSystemColor(SWT.COLOR_RED));
-				gc.setBackground(display.getSystemColor(SWT.COLOR_LIST_BACKGROUND));
-				gc.fillGradientRectangle(0, rect.y, 500, rect.height, false);
-				// restore colors for subsequent drawing
-				gc.setForeground(foreground);
-				gc.setBackground(background);
-				event.detail &= ~SWT.SELECTED;					
-			}						
-		}
-	});		
-	for (int i=0; i<columnCount; i++) {
-		tree.getColumn(i).pack();
-	}	
-	tree.setSelection(tree.getItem(0));
-	shell.setSize(500, 200);
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch()) display.sleep();
-	}
-	display.dispose();	
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet227.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet227.java
deleted file mode 100644
index 911b58f..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet227.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 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.snippets;
-/* 
- * Tree example snippet: Multiple lines in a TreeItem
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet227 {	
-public static void main(String [] args) {
-	Display display = new Display();
-	Shell shell = new Shell (display);
-	shell.setText("Multiple lines in a TreeItem");
-	shell.setLayout (new FillLayout());
-	final Tree tree = new Tree(shell, SWT.MULTI | SWT.FULL_SELECTION);
-	tree.setHeaderVisible(true);
-	tree.setLinesVisible(true);
-	int columnCount = 4;
-	for (int i=0; i<columnCount; i++) {
-		TreeColumn column = new TreeColumn(tree, SWT.NONE);
-		column.setText("Column " + i);
-		column.setWidth(100);
-	}
-	int itemCount = 3;
-	for (int i=0; i<itemCount; i++) {
-		TreeItem item1 = new TreeItem(tree, SWT.NONE);
-		item1.setText("item "+i);
-		for (int c=1; c < columnCount; c++) {
-			item1.setText(c, "item ["+i+"-"+c+"]");
-		}
-		for (int j=0; j<itemCount; j++) {
-			TreeItem item2 = new TreeItem(item1, SWT.NONE);
-			item2.setText("item ["+i+" "+j+"]");
-			for (int c=1; c<columnCount; c++) {
-				item2.setText(c, "item ["+i+" "+j+"-"+c+"]");
-			}
-			for (int k=0; k<itemCount; k++) {
-				TreeItem item3 = new TreeItem(item2, SWT.NONE);
-				item3.setText("item ["+i+" "+j+" "+k+"]");
-				for (int c=1; c<columnCount; c++) {
-					item3.setText(c, "item ["+i+" "+j+" "+k+"-"+c+"]");
-				}
-			}
-		}
-	}
-
-	/*
-	 * NOTE: MeasureItem, PaintItem and EraseItem are called repeatedly.
-	 * Therefore, it is critical for performance that these methods be
-	 * as efficient as possible.
-	 */
-	Listener paintListener = new Listener() {
-		public void handleEvent(Event event) {
-			switch(event.type) {		
-				case SWT.MeasureItem: {
-					TreeItem item = (TreeItem)event.item;
-					String text = getText(item, event.index);
-					Point size = event.gc.textExtent(text);
-					event.width = size.x;
-					event.height = Math.max(event.height, size.y);
-					break;
-				}
-				case SWT.PaintItem: {
-					TreeItem item = (TreeItem)event.item;
-					String text = getText(item, event.index);
-					Point size = event.gc.textExtent(text);					
-					int offset2 = event.index == 0 ? Math.max(0, (event.height - size.y) / 2) : 0;
-					event.gc.drawText(text, event.x, event.y + offset2, true);
-					break;
-				}
-				case SWT.EraseItem: {	
-					event.detail &= ~SWT.FOREGROUND;
-					break;
-				}
-			}
-		}
-		String getText(TreeItem item, int column) {
-			String text = item.getText(column);
-			if (column != 0) {
-				TreeItem parent = item.getParentItem();
-				int index = parent == null ? tree.indexOf(item) : parent.indexOf(item);
-				if ((index+column) % 3 == 1){
-					text +="\nnew line";
-				}
-				if ((index+column) % 3 == 2) {
-					text +="\nnew line\nnew line";
-				}
-			}
-			return text;
-		}
-	};
-	tree.addListener(SWT.MeasureItem, paintListener);
-	tree.addListener(SWT.PaintItem, paintListener);
-	tree.addListener(SWT.EraseItem, paintListener);
-
-	shell.setSize(600, 400);
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch()) display.sleep();
-	}
-	display.dispose();
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet228.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet228.java
deleted file mode 100644
index 2528710..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet228.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 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.snippets;
-
-/* 
- * Table example snippet: Draw a bar graph
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet228 {
-	
-public static void main(String [] args) {
-	final Display display = new Display();		
-	Shell shell = new Shell(display);
-	shell.setLayout(new FillLayout());
-	shell.setText("Show results as a bar chart in Table");
-	final Table table = new Table(shell, SWT.BORDER);
-	table.setHeaderVisible(true);
-	table.setLinesVisible(true);
-	TableColumn column1 = new TableColumn(table, SWT.NONE);
-	column1.setText("Bug Status");
-	column1.setWidth(100);
-	final TableColumn column2 = new TableColumn(table, SWT.NONE);
-	column2.setText("Percent");
-	column2.setWidth(200);
-	String[] labels = new String[]{"Resolved", "New", "Won't Fix", "Invalid"};
-	for (int i=0; i<labels.length; i++) {
-		 TableItem item = new TableItem(table, SWT.NONE);
-		 item.setText(labels[i]);
-	}
-
-	/*
-	 * NOTE: MeasureItem, PaintItem and EraseItem are called repeatedly.
-	 * Therefore, it is critical for performance that these methods be
-	 * as efficient as possible.
-	 */
-	table.addListener(SWT.PaintItem, new Listener() {
-		int[] percents = new int[] {50, 30, 5, 15};
-		public void handleEvent(Event event) {
-			if (event.index == 1) {
-				GC gc = event.gc;
-				TableItem item = (TableItem)event.item;
-				int index = table.indexOf(item);
-				int percent = percents[index];
-				Color foreground = gc.getForeground();
-				Color background = gc.getBackground();
-				gc.setForeground(display.getSystemColor(SWT.COLOR_RED));
-				gc.setBackground(display.getSystemColor(SWT.COLOR_YELLOW));
-				int width = (column2.getWidth() - 1) * percent / 100;
-				gc.fillGradientRectangle(event.x, event.y, width, event.height, true);					
-				Rectangle rect2 = new Rectangle(event.x, event.y, width-1, event.height-1);
-				gc.drawRectangle(rect2);
-				gc.setForeground(display.getSystemColor(SWT.COLOR_LIST_FOREGROUND));
-				String text = percent+"%";
-				Point size = event.gc.textExtent(text);					
-				int offset = Math.max(0, (event.height - size.y) / 2);
-				gc.drawText(text, event.x+2, event.y+offset, true);
-				gc.setForeground(background);
-				gc.setBackground(foreground);
-			}
-		}
-	});		
-			
-	shell.pack();
-	shell.open();
-	while(!shell.isDisposed()) {
-		if(!display.readAndDispatch()) display.sleep();
-	}
-	display.dispose();
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet229.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet229.java
deleted file mode 100644
index 7c3290c..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet229.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 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.snippets;
-
-/* 
- * Table example snippet: Draw a custom gradient selection
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet229 {
-public static void main(String [] args) {
-	final Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setText("Custom gradient selection for Table");
-	shell.setLayout(new FillLayout());
-	final Table table = new Table(shell, SWT.MULTI | SWT.FULL_SELECTION);
-	table.setHeaderVisible(true);
-	table.setLinesVisible(true);
-	int columnCount = 3;
-	for (int i=0; i<columnCount; i++) {
-		TableColumn column = new TableColumn(table, SWT.NONE);
-		column.setText("Column " + i);	
-	}
-	int itemCount = 8;
-	for(int i = 0; i < itemCount; i++) {
-		TableItem item = new TableItem(table, SWT.NONE);
-		item.setText(new String[] {"item "+i+" a", "item "+i+" b", "item "+i+" c"});
-	}		
-	/*
-	 * NOTE: MeasureItem, PaintItem and EraseItem are called repeatedly.
-	 * Therefore, it is critical for performance that these methods be
-	 * as efficient as possible.
-	 */
-	table.addListener(SWT.EraseItem, new Listener() {
-		public void handleEvent(Event event) {			
-			if((event.detail & SWT.SELECTED) != 0) {
-				GC gc = event.gc;
-				Rectangle area = table.getClientArea();
-				/*
-				 * If you wish to paint the selection beyond the end of
-				 * last column, you must change the clipping region.
-				 */
-				int columnCount = table.getColumnCount();
-				if (event.index == columnCount - 1 || columnCount == 0) {
-					int width = area.x + area.width - event.x;
-					if (width > 0) {
-						Region region = new Region();
-						gc.getClipping(region);
-						region.add(event.x, event.y, width, event.height); 
-						gc.setClipping(region);
-						region.dispose();
-					}
-				}
-				gc.setAdvanced(true);
-				if (gc.getAdvanced()) gc.setAlpha(127);								
-				Rectangle rect = event.getBounds();
-				Color foreground = gc.getForeground();
-				Color background = gc.getBackground();
-				gc.setForeground(display.getSystemColor(SWT.COLOR_RED));
-				gc.setBackground(display.getSystemColor(SWT.COLOR_LIST_BACKGROUND));
-				gc.fillGradientRectangle(0, rect.y, 500, rect.height, false);
-				// restore colors for subsequent drawing
-				gc.setForeground(foreground);
-				gc.setBackground(background);
-				event.detail &= ~SWT.SELECTED;					
-			}						
-		}
-	});		
-	for (int i=0; i<columnCount; i++) {
-		table.getColumn(i).pack();
-	}	
-	table.setSelection(table.getItem(0));
-	shell.setSize(500, 200);
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch()) display.sleep();
-	}
-	display.dispose();	
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet23.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet23.java
deleted file mode 100644
index 5123690..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet23.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Tracker example snippet: create a tracker (drag on mouse down)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet23 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	final Shell shell = new Shell (display);
-	shell.open ();
-	shell.addListener (SWT.MouseDown, new Listener () {
-		public void handleEvent (Event e) {
-			Tracker tracker = new Tracker (shell, SWT.NONE);
-			tracker.setRectangles (new Rectangle [] {
-				new Rectangle (e.x, e.y, 100, 100),
-			});
-			tracker.open ();
-		}
-	});
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet230.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet230.java
deleted file mode 100644
index ee062db..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet230.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 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.snippets;
-
-/* 
- * Table example snippet: Images on the right hand side of a TableItem
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet230 {
-	
-public static void main(String [] args) {
-	Display display = new Display();
-	final Image image = display.getSystemImage(SWT.ICON_INFORMATION);
-	Shell shell = new Shell(display);
-	shell.setText("Images on the right side of the TableItem");
-	shell.setLayout(new FillLayout ());
-	Table table = new Table(shell, SWT.MULTI | SWT.FULL_SELECTION);
-	table.setHeaderVisible(true);
-	table.setLinesVisible(true);			
-	int columnCount = 3;
-	for (int i=0; i<columnCount; i++) {
-		TableColumn column = new TableColumn(table, SWT.NONE);
-		column.setText("Column " + i);	
-	}
-	int itemCount = 8;
-	for(int i = 0; i < itemCount; i++) {
-		TableItem item = new TableItem(table, SWT.NONE);
-		item.setText(new String[] {"item "+i+" a", "item "+i+" b", "item "+i+" c"});
-	}
-	/*
-	 * NOTE: MeasureItem, PaintItem and EraseItem are called repeatedly.
-	 * Therefore, it is critical for performance that these methods be
-	 * as efficient as possible.
-	 */
-	Listener paintListener = new Listener() {
-		public void handleEvent(Event event) {		
-			switch(event.type) {
-				case SWT.MeasureItem: {
-					Rectangle rect = image.getBounds();
-					event.width += rect.width;
-					event.height = Math.max(event.height, rect.height + 2);
-					break;
-				}
-				case SWT.PaintItem: {
-					int x = event.x + event.width;
-					Rectangle rect = image.getBounds();
-					int offset = Math.max(0, (event.height - rect.height) / 2);
-					event.gc.drawImage(image, x, event.y + offset);
-					break;
-				}
-			}
-		}
-	};		
-	table.addListener(SWT.MeasureItem, paintListener);
-	table.addListener(SWT.PaintItem, paintListener);		
-
-	for(int i = 0; i < columnCount; i++) {
-		table.getColumn(i).pack();
-	}	
-	shell.setSize(500, 200);
-	shell.open();
-	while(!shell.isDisposed ()) {
-		if(!display.readAndDispatch()) display.sleep();
-	}
-	if(image != null) image.dispose();
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet231.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet231.java
deleted file mode 100644
index 388164e..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet231.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 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.snippets;
-
-/* 
- * example snippet: Multiple lines per TableItem
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet231 {
-	
-public static void main(String [] args) {
-	Display display = new Display();
-	Shell shell = new Shell (display);
-	shell.setText("Multiple lines in a TableItem");
-	shell.setLayout (new FillLayout());
-	final Table table = new Table(shell, SWT.MULTI | SWT.FULL_SELECTION);
-	table.setHeaderVisible(true);
-	table.setLinesVisible(true);
-	int columnCount = 4;
-	for (int i=0; i<columnCount; i++) {
-		TableColumn column = new TableColumn(table, SWT.NONE);
-		column.setText("Column " + i);	
-	}
-	int itemCount = 8;
-	for(int i = 0; i < itemCount; i++) {
-		TableItem item = new TableItem(table, SWT.NONE);
-		item.setText(new String[] {"item "+i+" a", "item "+i+" b", "item "+i+" c", "item "+i+" d"});
-	}	
-	/*
-	 * NOTE: MeasureItem, PaintItem and EraseItem are called repeatedly.
-	 * Therefore, it is critical for performance that these methods be
-	 * as efficient as possible.
-	 */
-	Listener paintListener = new Listener() {
-		public void handleEvent(Event event) {
-			switch(event.type) {		
-				case SWT.MeasureItem: {
-					TableItem item = (TableItem)event.item;
-					String text = getText(item, event.index);
-					Point size = event.gc.textExtent(text);
-					event.width = size.x;
-					event.height = Math.max(event.height, size.y);
-					break;
-				}
-				case SWT.PaintItem: {
-					TableItem item = (TableItem)event.item;
-					String text = getText(item, event.index);
-					Point size = event.gc.textExtent(text);					
-					int offset2 = event.index == 0 ? Math.max(0, (event.height - size.y) / 2) : 0;
-					event.gc.drawText(text, event.x, event.y + offset2, true);
-					break;
-				}
-				case SWT.EraseItem: {	
-					event.detail &= ~SWT.FOREGROUND;
-					break;
-				}
-			}
-		}
-		String getText(TableItem item, int column) {
-			String text = item.getText(column);
-			if (column != 0) {
-				int index = table.indexOf(item);
-				if ((index+column) % 3 == 1){
-					text +="\nnew line";
-				}
-				if ((index+column) % 3 == 2) {
-					text +="\nnew line\nnew line";
-				}
-			}
-			return text;
-		}
-	};
-	table.addListener(SWT.MeasureItem, paintListener);
-	table.addListener(SWT.PaintItem, paintListener);
-	table.addListener(SWT.EraseItem, paintListener);
-	for (int i = 0; i < columnCount; i++) {
-		table.getColumn(i).pack();
-	}
-	shell.pack();
-	shell.open();
-	while(!shell.isDisposed()) {
-		if(!display.readAndDispatch()) display.sleep();
-	}
-	display.dispose();
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet232.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet232.java
deleted file mode 100644
index c6d1f40..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet232.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 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.snippets;
-
-/* 
- * Table example snippet: Draw a bar graph
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.2
- */
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet232 {
-	
-public static void main(String [] args) {
-	final Display display = new Display();		
-	Shell shell = new Shell(display);
-	shell.setLayout(new FillLayout());
-	shell.setText("Show results as a bar chart in Tree");
-	final Tree tree = new Tree(shell, SWT.BORDER);
-	tree.setHeaderVisible(true);
-	tree.setLinesVisible(true);
-	TreeColumn column1 = new TreeColumn(tree, SWT.NONE);
-	column1.setText("Bug Status");
-	column1.setWidth(100);
-	final TreeColumn column2 = new TreeColumn(tree, SWT.NONE);
-	column2.setText("Percent");
-	column2.setWidth(200);
-	String[] states = new String[]{"Resolved", "New", "Won't Fix", "Invalid"};
-	String[] teams = new String[] {"UI", "SWT", "OSGI"};
-	for (int i=0; i<teams.length; i++) {
-		TreeItem item = new TreeItem(tree, SWT.NONE);
-		item.setText(teams[i]);
-		for (int j = 0; j < states.length; j++) {
-			TreeItem subItem = new TreeItem(item, SWT.NONE);
-			subItem.setText(states[j]);	
-		}
-	}
-
-	/*
-	 * NOTE: MeasureItem, PaintItem and EraseItem are called repeatedly.
-	 * Therefore, it is critical for performance that these methods be
-	 * as efficient as possible.
-	 */
-	tree.addListener(SWT.PaintItem, new Listener() {
-		int[] percents = new int[] {50, 30, 5, 15};
-		public void handleEvent(Event event) {
-			if (event.index == 1) {
-				TreeItem item = (TreeItem)event.item;
-				TreeItem parent = item.getParentItem();
-				if (parent != null) {
-					GC gc = event.gc;
-					int index = parent.indexOf(item);
-					int percent = percents[index];
-					Color foreground = gc.getForeground();
-					Color background = gc.getBackground();
-					gc.setForeground(display.getSystemColor(SWT.COLOR_RED));
-					gc.setBackground(display.getSystemColor(SWT.COLOR_YELLOW));
-					int width = (column2.getWidth() - 1) * percent / 100;
-					gc.fillGradientRectangle(event.x, event.y, width, event.height, true);					
-					Rectangle rect2 = new Rectangle(event.x, event.y, width-1, event.height-1);
-					gc.drawRectangle(rect2);
-					gc.setForeground(display.getSystemColor(SWT.COLOR_LIST_FOREGROUND));
-					String text = percent+"%";
-					Point size = event.gc.textExtent(text);					
-					int offset = Math.max(0, (event.height - size.y) / 2);
-					gc.drawText(text, event.x+2, event.y+offset, true);
-					gc.setForeground(background);
-					gc.setBackground(foreground);
-				}
-			}
-		}
-	});		
-			
-	shell.pack();
-	shell.open();
-	while(!shell.isDisposed()) {
-		if(!display.readAndDispatch()) display.sleep();
-	}
-	display.dispose();
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet233.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet233.java
deleted file mode 100644
index 220412d..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet233.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 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.snippets;
-
-/* 
- * Shell example snippet: create a dialog shell and position it
- * with upper left corner at cursor position
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.events.*;
-
-public class Snippet233 {
-	public static void main (String [] args) {
-		final Display display = new Display ();
-		final Shell shell = new Shell (display);
-		shell.setText ("Parent Shell");
-		shell.addMouseListener (new MouseAdapter() {
-			public void mouseDown (MouseEvent e) {
-				Shell dialog = new Shell (shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-				Point pt = display.getCursorLocation ();
-				dialog.setLocation (pt.x, pt.y);
-				dialog.setText ("Dialog Shell");
-				dialog.setSize (100, 100);
-				dialog.open (); 
-			}});
-		shell.setSize (400, 400);
-		shell.open ();
-		while (!shell.isDisposed ()) {
-			if (!display.readAndDispatch ()) display.sleep ();
-		}
-		display.dispose ();
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet24.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet24.java
deleted file mode 100644
index fda44ac..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet24.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * example snippet: detect CR in a text or combo control (default selection)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet24 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setLayout (new RowLayout ());
-	Combo combo = new Combo (shell, SWT.NONE);
-	combo.setItems (new String [] {"A-1", "B-1", "C-1"});
-	Text text = new Text (shell, SWT.SINGLE | SWT.BORDER);
-	text.setText ("some text");
-	combo.addListener (SWT.DefaultSelection, new Listener () {
-		public void handleEvent (Event e) {
-			System.out.println (e.widget + " - Default Selection");
-		}
-	});
-	text.addListener (SWT.DefaultSelection, new Listener () {
-		public void handleEvent (Event e) {
-			System.out.println (e.widget + " - Default Selection");
-		}
-	});
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet25.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet25.java
deleted file mode 100644
index 93bc7e2..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet25.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Control example snippet: print key state, code and character
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet25 {
-
-static String stateMask (int stateMask) {
-	String string = "";
-	if ((stateMask & SWT.CTRL) != 0) string += " CTRL";
-	if ((stateMask & SWT.ALT) != 0) string += " ALT";
-	if ((stateMask & SWT.SHIFT) != 0) string += " SHIFT";
-	if ((stateMask & SWT.COMMAND) != 0) string += " COMMAND";
-	return string;
-}
-
-static String character (char character) {
-	switch (character) {
-		case 0: 		return "'\\0'";
-		case SWT.BS:	return "'\\b'";
-		case SWT.CR:	return "'\\r'";
-		case SWT.DEL:	return "DEL";
-		case SWT.ESC:	return "ESC";
-		case SWT.LF:	return "'\\n'";
-		case SWT.TAB:	return "'\\t'";
-	}
-	return "'" + character +"'";
-}
-
-static String keyCode (int keyCode) {
-	switch (keyCode) {
-		
-		/* Keyboard and Mouse Masks */
-		case SWT.ALT: 		return "ALT";
-		case SWT.SHIFT: 	return "SHIFT";
-		case SWT.CONTROL:	return "CONTROL";
-		case SWT.COMMAND:	return "COMMAND";
-			
-		/* Non-Numeric Keypad Keys */
-		case SWT.ARROW_UP:		return "ARROW_UP";
-		case SWT.ARROW_DOWN:	return "ARROW_DOWN";
-		case SWT.ARROW_LEFT:	return "ARROW_LEFT";
-		case SWT.ARROW_RIGHT:	return "ARROW_RIGHT";
-		case SWT.PAGE_UP:		return "PAGE_UP";
-		case SWT.PAGE_DOWN:		return "PAGE_DOWN";
-		case SWT.HOME:			return "HOME";
-		case SWT.END:			return "END";
-		case SWT.INSERT:		return "INSERT";
-
-		/* Virtual and Ascii Keys */
-		case SWT.BS:	return "BS";
-		case SWT.CR:	return "CR";		
-		case SWT.DEL:	return "DEL";
-		case SWT.ESC:	return "ESC";
-		case SWT.LF:	return "LF";
-		case SWT.TAB:	return "TAB";
-	
-		/* Functions Keys */
-		case SWT.F1:	return "F1";
-		case SWT.F2:	return "F2";
-		case SWT.F3:	return "F3";
-		case SWT.F4:	return "F4";
-		case SWT.F5:	return "F5";
-		case SWT.F6:	return "F6";
-		case SWT.F7:	return "F7";
-		case SWT.F8:	return "F8";
-		case SWT.F9:	return "F9";
-		case SWT.F10:	return "F10";
-		case SWT.F11:	return "F11";
-		case SWT.F12:	return "F12";
-		case SWT.F13:	return "F13";
-		case SWT.F14:	return "F14";
-		case SWT.F15:	return "F15";
-		
-		/* Numeric Keypad Keys */
-		case SWT.KEYPAD_ADD:		return "KEYPAD_ADD";
-		case SWT.KEYPAD_SUBTRACT:	return "KEYPAD_SUBTRACT";
-		case SWT.KEYPAD_MULTIPLY:	return "KEYPAD_MULTIPLY";
-		case SWT.KEYPAD_DIVIDE:		return "KEYPAD_DIVIDE";
-		case SWT.KEYPAD_DECIMAL:	return "KEYPAD_DECIMAL";
-		case SWT.KEYPAD_CR:			return "KEYPAD_CR";
-		case SWT.KEYPAD_0:			return "KEYPAD_0";
-		case SWT.KEYPAD_1:			return "KEYPAD_1";
-		case SWT.KEYPAD_2:			return "KEYPAD_2";
-		case SWT.KEYPAD_3:			return "KEYPAD_3";
-		case SWT.KEYPAD_4:			return "KEYPAD_4";
-		case SWT.KEYPAD_5:			return "KEYPAD_5";
-		case SWT.KEYPAD_6:			return "KEYPAD_6";
-		case SWT.KEYPAD_7:			return "KEYPAD_7";
-		case SWT.KEYPAD_8:			return "KEYPAD_8";
-		case SWT.KEYPAD_9:			return "KEYPAD_9";
-		case SWT.KEYPAD_EQUAL:		return "KEYPAD_EQUAL";
-
-		/* Other keys */
-		case SWT.CAPS_LOCK:		return "CAPS_LOCK";
-		case SWT.NUM_LOCK:		return "NUM_LOCK";
-		case SWT.SCROLL_LOCK:	return "SCROLL_LOCK";
-		case SWT.PAUSE:			return "PAUSE";
-		case SWT.BREAK:			return "BREAK";
-		case SWT.PRINT_SCREEN:	return "PRINT_SCREEN";
-		case SWT.HELP:			return "HELP";
-	}
-	return character ((char) keyCode);
-}
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Listener listener = new Listener () {
-		public void handleEvent (Event e) {
-			String string = e.type == SWT.KeyDown ? "DOWN:" : "UP  :";
-			string += " stateMask=0x" + Integer.toHexString (e.stateMask) + stateMask (e.stateMask) + ",";
-			string += " keyCode=0x" + Integer.toHexString (e.keyCode) + " " + keyCode (e.keyCode) + ",";
-			string += " character=0x" + Integer.toHexString (e.character) + " " + character (e.character);
-			System.out.println (string);
-		}
-	};
-	shell.addListener (SWT.KeyDown, listener);
-	shell.addListener (SWT.KeyUp, listener);
-	shell.setSize (200, 200);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet26.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet26.java
deleted file mode 100644
index 7cce5e8..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet26.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Combo example snippet: create a combo box (non-editable)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet26 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Combo combo = new Combo (shell, SWT.READ_ONLY);
-	combo.setItems (new String [] {"A", "B", "C"});
-	combo.setSize (200, 200);
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet27.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet27.java
deleted file mode 100644
index 333a9c2..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet27.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Shell example snippet: open a shell minimized (iconified)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.widgets.*;
-
-public class Snippet27 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setMinimized (true);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet28.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet28.java
deleted file mode 100644
index c891fcc..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet28.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Shell example snippet: open a shell maximized (full screen)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.widgets.*;
-
-public class Snippet28 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setMaximized (true);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet29.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet29.java
deleted file mode 100644
index ee47ffb..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet29.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Menu example snippet: create a bar and pull down menu (accelerators, mnemonics)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet29 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Menu bar = new Menu (shell, SWT.BAR);
-	shell.setMenuBar (bar);
-	MenuItem fileItem = new MenuItem (bar, SWT.CASCADE);
-	fileItem.setText ("File");
-	Menu submenu = new Menu (shell, SWT.DROP_DOWN);
-	fileItem.setMenu (submenu);
-	MenuItem item = new MenuItem (submenu, SWT.PUSH);
-	item.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event e) {
-			System.out.println ("Select All");
-		}
-	});
-	item.setText ("Select &All\tCtrl+A");
-	item.setAccelerator (SWT.CTRL + 'A');
-	shell.setSize (200, 200);
-	shell.open ();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet3.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet3.java
deleted file mode 100644
index a95f1ed..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet3.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Table example snippet: find a table cell from mouse down (SWT.FULL_SELECTION)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.graphics.*;
-
-public class Snippet3 {
-
-public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	final Table table = new Table(shell, SWT.BORDER | SWT.V_SCROLL
-			| SWT.FULL_SELECTION);
-	table.setHeaderVisible(true);
-	table.setLinesVisible(true);
-	final int rowCount = 64, columnCount = 4;
-	for (int i = 0; i < columnCount; i++) {
-		TableColumn column = new TableColumn(table, SWT.NONE);
-		column.setText("Column " + i);
-	}
-	for (int i = 0; i < rowCount; i++) {
-		TableItem item = new TableItem(table, SWT.NONE);
-		for (int j = 0; j < columnCount; j++) {
-			item.setText(j, "Item " + i + "-" + j);
-		}
-	}
-	for (int i = 0; i < columnCount; i++) {
-		table.getColumn(i).pack();
-	}
-	Point size = table.computeSize(SWT.DEFAULT, 200);
-	table.setSize(size);
-	shell.pack();
-	table.addListener(SWT.MouseDown, new Listener() {
-		public void handleEvent(Event event) {
-			Point pt = new Point(event.x, event.y);
-			TableItem item = table.getItem(pt);
-			if (item == null)
-				return;
-			for (int i = 0; i < columnCount; i++) {
-				Rectangle rect = item.getBounds(i);
-				if (rect.contains(pt)) {
-					int index = table.indexOf(item);
-					System.out.println("Item " + index + "-" + i);
-				}
-			}
-		}
-	});
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet30.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet30.java
deleted file mode 100644
index d681389..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet30.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Program example snippet: invoke the system text editor on autoexec.bat
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.program.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet30 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Program p = Program.findProgram (".txt");
-	if (p != null) p.execute ("c:\\autoexec.bat");
-	display.dispose ();
-}
-
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet31.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet31.java
deleted file mode 100644
index e898c1e..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet31.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Tracker example snippet: create a tracker (drag when "torn off")
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet31 {
-
-public static void main (String [] args) {
-	final Display display = new Display ();
-	final Shell shell = new Shell (display);
-	shell.setSize (200, 200);
-	shell.open ();
-	Listener listener = new Listener () {
-		Point point = null;
-		static final int JITTER = 8;
-		public void handleEvent (Event event) {
-			switch (event.type) {
-				case SWT.MouseDown:
-					point = new Point (event.x, event.y);
-					break;
-				case SWT.MouseMove:
-					if (point == null) return;
-					int deltaX = point.x - event.x, deltaY = point.y - event.y;
-					if (Math.abs (deltaX) < JITTER && Math.abs (deltaY) < JITTER) {
-						return;
-					}
-					Tracker tracker = new Tracker (display, SWT.NONE);
-					Rectangle rect = display.map (shell, null, shell.getClientArea ());
-					rect.x -= deltaX;
-					rect.y -= deltaY;
-					tracker.setRectangles (new Rectangle [] {rect});
-					tracker.open ();
-					//FALL THROUGH
-				case SWT.MouseUp:
-					point = null;
-					break;
-			}
-		}
-	};
-	shell.addListener (SWT.MouseDown, listener);
-	shell.addListener (SWT.MouseMove, listener);
-	shell.addListener (SWT.MouseUp, listener);
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet32.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet32.java
deleted file mode 100644
index 61cbda9..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet32.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Program example snippet: find the icon of the program that edits .bmp files
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.program.*;
-
-public class Snippet32 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Label label = new Label (shell, SWT.NONE);
-	label.setText ("Can't find icon for .bmp");
-	Image image = null;
-	Program p = Program.findProgram (".bmp");
-	if (p != null) {
-		ImageData data = p.getImageData ();
-		if (data != null) {
-			image = new Image (display, data);
-			label.setImage (image);
-		}
-	}
-	label.pack ();
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	if (image != null) image.dispose ();
-	display.dispose ();
-}
-
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet33.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet33.java
deleted file mode 100644
index 24fc913..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet33.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * DirectoryDialog example snippet: prompt for a directory
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.widgets.*;
-
-public class Snippet33 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.open ();
-	DirectoryDialog dialog = new DirectoryDialog (shell);
-	dialog.setFilterPath ("c:\\"); //Windows specific
-	System.out.println ("RESULT=" + dialog.open ());
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet34.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet34.java
deleted file mode 100644
index 27765cb..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet34.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Label example snippet: create a label (with an image)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet34 {
-
-public static void main (String[] args) {
-	Display display = new Display();
-	Image image = new Image (display, 16, 16);
-	Color color = display.getSystemColor (SWT.COLOR_RED);
-	GC gc = new GC (image);
-	gc.setBackground (color);
-	gc.fillRectangle (image.getBounds ());
-	gc.dispose ();
-	Shell shell = new Shell (display);
-	Label label = new Label (shell, SWT.BORDER);
-	label.setImage (image);
-	label.pack ();
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep (); 
-	} 
-	image.dispose ();
-	display.dispose ();
-}
-
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet35.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet35.java
deleted file mode 100644
index 38387ce..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet35.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Table example snippet: create a table (no columns, no headers)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet35 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Table table = new Table (shell, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
-	for (int i=0; i<12; i++) {
-		TableItem item = new TableItem (table, 0);
-		item.setText ("Item " + i);
-	}
-	table.setSize (100, 100);
-	shell.setSize (200, 200);
-	shell.open ();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet36.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet36.java
deleted file mode 100644
index 85e7284..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet36.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * ToolBar example snippet: create a flat tool bar (images)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet36 {
-
-public static void main (String [] args) {
-	Display display = new Display();
-	Image image = new Image (display, 16, 16);
-	Color color = display.getSystemColor (SWT.COLOR_RED);
-	GC gc = new GC (image);
-	gc.setBackground (color);
-	gc.fillRectangle (image.getBounds ());
-	gc.dispose ();
-	Shell shell = new Shell (display);
-	ToolBar toolBar = new ToolBar (shell, SWT.FLAT | SWT.BORDER);
-	for (int i=0; i<12; i++) {
-		ToolItem item = new ToolItem (toolBar, SWT.DROP_DOWN);
-		item.setImage (image);
-	}
-	toolBar.pack ();
-	shell.open ();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	image.dispose ();
-	display.dispose ();
-}
-
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet37.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet37.java
deleted file mode 100644
index 6dcf6cb..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet37.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Label example snippet: create a label (a separator)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet37 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setLayout (new FillLayout ());
-	new Label (shell, SWT.SEPARATOR | SWT.HORIZONTAL);
-	new Label (shell, SWT.SEPARATOR | SWT.VERTICAL);
-	shell.setSize (200, 200);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet38.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet38.java
deleted file mode 100644
index 4bae3a5..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet38.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Table example snippet: create a table (columns, headers, lines)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet38 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Table table = new Table (shell, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
-	table.setLinesVisible (true);
-	table.setHeaderVisible (true);
-	String[] titles = {" ", "C", "!", "Description", "Resource", "In Folder", "Location"};
-	for (int i=0; i<titles.length; i++) {
-		TableColumn column = new TableColumn (table, SWT.NONE);
-		column.setText (titles [i]);
-	}	
-	int count = 128;
-	for (int i=0; i<count; i++) {
-		TableItem item = new TableItem (table, SWT.NONE);
-		item.setText (0, "x");
-		item.setText (1, "y");
-		item.setText (2, "!");
-		item.setText (3, "this stuff behaves the way I expect");
-		item.setText (4, "almost everywhere");
-		item.setText (5, "some.folder");
-		item.setText (6, "line " + i + " in nowhere");
-	}
-	for (int i=0; i<titles.length; i++) {
-		table.getColumn (i).pack ();
-	}	
-	table.setSize (table.computeSize (SWT.DEFAULT, 200));
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet39.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet39.java
deleted file mode 100644
index a5c42a5..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet39.java
+++ /dev/null
@@ -1,15 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-public class Snippet39 {
-
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet4.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet4.java
deleted file mode 100644
index 8fc8411..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet4.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Shell example snippet: prevent escape from closing a dialog
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet4 {
-
-	public static void main(String[] args) {
-		Display display = new Display();
-		final Shell shell = new Shell(display);
-		Button b = new Button(shell, SWT.PUSH);
-		b.setText("Open Dialog ...");
-		b.pack();
-		b.setLocation(10, 10);
-		b.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent se) {
-				Shell dialog = new Shell(shell, SWT.DIALOG_TRIM);
-				dialog.addListener(SWT.Traverse, new Listener() {
-					public void handleEvent(Event e) {
-						if (e.detail == SWT.TRAVERSE_ESCAPE) {
-							e.doit = false;
-						}
-					}
-				});
-				dialog.open();
-			}
-		});
-		shell.open();
-		while (!shell.isDisposed()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		display.dispose();
-	}
-
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet40.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet40.java
deleted file mode 100644
index 582576b..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet40.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Menu example snippet: create a popup menu (set in multiple controls)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet40 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Composite c1 = new Composite (shell, SWT.BORDER);
-	c1.setSize (100, 100);
-	Composite c2 = new Composite (shell, SWT.BORDER);
-	c2.setBounds (100, 0, 100, 100);
-	Menu menu = new Menu (shell, SWT.POP_UP);
-	MenuItem item = new MenuItem (menu, SWT.PUSH);
-	item.setText ("Popup");
-	c1.setMenu (menu);
-	c2.setMenu (menu);
-	shell.setMenu (menu);
-	shell.setSize (300, 300);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet41.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet41.java
deleted file mode 100644
index 0ba1c70..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet41.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Tool Tips example snippet: create tool tips for a tab folder, tool bar and control
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet41 {
-
-public static void main (String [] args) {
-	String string = "This is a string\nwith a new line.";
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.open ();
-	TabFolder folder = new TabFolder (shell, SWT.BORDER);
-	folder.setSize (200, 200);
-	TabItem item0 = new TabItem (folder, 0);
-	item0.setToolTipText (string);
-	ToolBar bar = new ToolBar (shell, SWT.BORDER);
-	bar.setBounds (0, 200, 200, 64);
-	ToolItem item1 = new ToolItem (bar, 0);
-	item1.setToolTipText (string);
-	shell.setToolTipText (string);
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet42.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet42.java
deleted file mode 100644
index 13269f8..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet42.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Display example snippet: get the bounds and client area of a display
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.widgets.*;
-
-public class Snippet42 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	System.out.println ("BOUNDS=" + display.getBounds () + " CLIENT=" + display.getClientArea ());
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet43.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet43.java
deleted file mode 100644
index c8e6344..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet43.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Caret example snippet: create a caret (using an image)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet43 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.open ();
-	Caret caret = new Caret (shell, SWT.NONE);
-	Color white = display.getSystemColor (SWT.COLOR_WHITE);
-	Color black = display.getSystemColor (SWT.COLOR_BLACK);
-	Image image = new Image (display, 20, 20);
-	GC gc = new GC (image);
-	gc.setBackground (black);
-	gc.fillRectangle (0, 0, 20, 20);
-	gc.setForeground (white);
-	gc.drawLine (0, 0, 19, 19);
-	gc.drawLine (19, 0, 0, 19);
-	gc.dispose ();
-	caret.setLocation (10, 10);
-	caret.setImage (image);
-	gc = new GC (shell);
-	gc.drawImage (image, 10, 64);
-	caret.setVisible (false);
-	gc.drawString ("Test", 12, 12);
-	caret.setVisible (true);
-	gc.dispose ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	image.dispose ();
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet44.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet44.java
deleted file mode 100644
index 8056868..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet44.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Cursor example snippet: set the hand cursor into a control
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet44 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	final Cursor cursor = new Cursor (display, SWT.CURSOR_HAND);
-	Shell shell = new Shell (display);
-	shell.open ();
-	final Button b = new Button (shell, 0);
-	b.setBounds (10, 10, 200, 200);
-	b.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event e) {
-			b.setCursor (cursor);
-		}
-	});
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	cursor.dispose ();
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet45.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet45.java
deleted file mode 100644
index 52acee3..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet45.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Scale example snippet: create a scale (maximum 40, page increment 5)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet45 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Scale scale = new Scale (shell, SWT.BORDER);
-	scale.setSize (200, 64);
-	scale.setMaximum (40);
-	scale.setPageIncrement (5);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet46.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet46.java
deleted file mode 100644
index 37ac629..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet46.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Composite example snippet: intercept mouse events (drag a button with the mouse)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet46 {
-public static void main (String [] args) {
-	Display display = new Display ();
-	final Shell shell = new Shell (display);
-	final Composite composite = new Composite (shell, SWT.NONE);
-	composite.setEnabled (false);
-	composite.setLayout (new FillLayout ());
-	Button button = new Button (composite, SWT.PUSH);
-	button.setText ("Button");
-	composite.pack ();
-	composite.setLocation (10, 10);
-	final Point [] offset = new Point [1];
-	Listener listener = new Listener () {
-		public void handleEvent (Event event) {
-			switch (event.type) {
-				case SWT.MouseDown:
-					Rectangle rect = composite.getBounds ();
-					if (rect.contains (event.x, event.y)) {
-						Point pt1 = composite.toDisplay (0, 0);
-						Point pt2 = shell.toDisplay (event.x, event.y); 
-						offset [0] = new Point (pt2.x - pt1.x, pt2.y - pt1.y);
-					}
-					break;
-				case SWT.MouseMove:
-					if (offset [0] != null) {
-						Point pt = offset [0];
-						composite.setLocation (event.x - pt.x, event.y - pt.y);
-					}
-					break;
-				case SWT.MouseUp:
-					offset [0] = null;
-					break;
-			}
-		}
-	};
-	shell.addListener (SWT.MouseDown, listener);
-	shell.addListener (SWT.MouseUp, listener);
-	shell.addListener (SWT.MouseMove, listener);
-	shell.setSize (300, 300);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet47.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet47.java
deleted file mode 100644
index 78f070f..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet47.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * ToolBar example snippet: create tool bar (normal, hot and disabled images)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet47 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-
-	Image image = new Image (display, 20, 20);
-	Color color = display.getSystemColor (SWT.COLOR_BLUE);
-	GC gc = new GC (image);
-	gc.setBackground (color);
-	gc.fillRectangle (image.getBounds ());
-	gc.dispose ();
-	
-	Image disabledImage = new Image (display, 20, 20);
-	color = display.getSystemColor (SWT.COLOR_GREEN);
-	gc = new GC (disabledImage);
-	gc.setBackground (color);
-	gc.fillRectangle (disabledImage.getBounds ());
-	gc.dispose ();
-	
-	Image hotImage = new Image (display, 20, 20);
-	color = display.getSystemColor (SWT.COLOR_RED);
-	gc = new GC (hotImage);
-	gc.setBackground (color);
-	gc.fillRectangle (hotImage.getBounds ());
-	gc.dispose ();
-	
-	ToolBar bar = new ToolBar (shell, SWT.BORDER | SWT.FLAT);
-	bar.setSize (200, 32);
-	for (int i=0; i<12; i++) {
-		ToolItem item = new ToolItem (bar, 0);
-		item.setImage (image);
-		item.setDisabledImage (disabledImage);
-		item.setHotImage (hotImage);
-		if (i % 3 == 0) item.setEnabled (false);
-	}
-	
-	shell.open ();
-	bar.getItems () [1].setImage (disabledImage);
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	image.dispose ();
-	disabledImage.dispose ();
-	hotImage.dispose ();
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet48.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet48.java
deleted file mode 100644
index f63ba77..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet48.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Canvas example snippet: scroll an image (flicker free, no double buffering)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet48 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setLayout(new FillLayout());
-	Image originalImage = null;
-	FileDialog dialog = new FileDialog (shell, SWT.OPEN);
-	dialog.setText ("Open an image file or cancel");
-	String string = dialog.open ();
-	if (string != null) {
-		originalImage = new Image (display, string);
-	}
-	if (originalImage == null) {
-		int width = 150, height = 200;
-		originalImage = new Image (display, width, height);
-		GC gc = new GC (originalImage);
-		gc.fillRectangle (0, 0, width, height);
-		gc.drawLine (0, 0, width, height);
-		gc.drawLine (0, height, width, 0);
-		gc.drawText ("Default Image", 10, 10);
-		gc.dispose ();
-	}
-	final Image image = originalImage;
-	final Point origin = new Point (0, 0);
-	final Canvas canvas = new Canvas (shell, SWT.NO_BACKGROUND |
-			SWT.NO_REDRAW_RESIZE | SWT.V_SCROLL | SWT.H_SCROLL);
-	final ScrollBar hBar = canvas.getHorizontalBar ();
-	hBar.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event e) {
-			int hSelection = hBar.getSelection ();
-			int destX = -hSelection - origin.x;
-			Rectangle rect = image.getBounds ();
-			canvas.scroll (destX, 0, 0, 0, rect.width, rect.height, false);
-			origin.x = -hSelection;
-		}
-	});
-	final ScrollBar vBar = canvas.getVerticalBar ();
-	vBar.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event e) {
-			int vSelection = vBar.getSelection ();
-			int destY = -vSelection - origin.y;
-			Rectangle rect = image.getBounds ();
-			canvas.scroll (0, destY, 0, 0, rect.width, rect.height, false);
-			origin.y = -vSelection;
-		}
-	});
-	canvas.addListener (SWT.Resize,  new Listener () {
-		public void handleEvent (Event e) {
-			Rectangle rect = image.getBounds ();
-			Rectangle client = canvas.getClientArea ();
-			hBar.setMaximum (rect.width);
-			vBar.setMaximum (rect.height);
-			hBar.setThumb (Math.min (rect.width, client.width));
-			vBar.setThumb (Math.min (rect.height, client.height));
-			int hPage = rect.width - client.width;
-			int vPage = rect.height - client.height;
-			int hSelection = hBar.getSelection ();
-			int vSelection = vBar.getSelection ();
-			if (hSelection >= hPage) {
-				if (hPage <= 0) hSelection = 0;
-				origin.x = -hSelection;
-			}
-			if (vSelection >= vPage) {
-				if (vPage <= 0) vSelection = 0;
-				origin.y = -vSelection;
-			}
-			canvas.redraw ();
-		}
-	});
-	canvas.addListener (SWT.Paint, new Listener () {
-		public void handleEvent (Event e) {
-			GC gc = e.gc;
-			gc.drawImage (image, origin.x, origin.y);
-			Rectangle rect = image.getBounds ();
-			Rectangle client = canvas.getClientArea ();
-			int marginWidth = client.width - rect.width;
-			if (marginWidth > 0) {
-				gc.fillRectangle (rect.width, 0, marginWidth, client.height);
-			}
-			int marginHeight = client.height - rect.height;
-			if (marginHeight > 0) {
-				gc.fillRectangle (0, rect.height, client.width, marginHeight);
-			}
-		}
-	});
-	shell.setSize (200, 150);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	originalImage.dispose();
-	display.dispose ();
-}
-
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet49.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet49.java
deleted file mode 100644
index b66a128..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet49.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * ToolBar example snippet: create tool bar (wrap on resize)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet49 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	final Shell shell = new Shell (display);
-	final ToolBar toolBar = new ToolBar (shell, SWT.WRAP);
-	for (int i=0; i<12; i++) {
-		ToolItem item = new ToolItem (toolBar, SWT.PUSH);
-		item.setText ("Item " + i);
-	}
-	shell.addListener (SWT.Resize, new Listener () {
-		public void handleEvent (Event e) {
-			Rectangle rect = shell.getClientArea ();
-			Point size = toolBar.computeSize (rect.width, SWT.DEFAULT);
-			toolBar.setSize (size);
-		}
-	});
-	toolBar.pack ();
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet5.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet5.java
deleted file mode 100644
index e3ea978..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet5.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * ScrolledComposite example snippet: scroll a control in a scrolled composite
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.custom.*;
-
-public class Snippet5 {
-
-public static void main (String [] args) 
-{
-    Display display = new Display ();
-    Shell shell = new Shell (display);
-    shell.setLayout(new FillLayout());
-
-    // this button is always 400 x 400. Scrollbars appear if the window is resized to be
-    // too small to show part of the button
-    ScrolledComposite c1 = new ScrolledComposite(shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
-    Button b1 = new Button(c1, SWT.PUSH);
-    b1.setText("fixed size button");
-    b1.setSize(400, 400);
-    c1.setContent(b1);
-
-    // this button has a minimum size of 400 x 400. If the window is resized to be big
-    // enough to show more than 400 x 400, the button will grow in size. If the window
-    // is made too small to show 400 x 400, scrollbars will appear.
-    ScrolledComposite c2 = new ScrolledComposite(shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
-    Button b2 = new Button(c2, SWT.PUSH);
-    b2.setText("expanding button");
-    c2.setContent(b2);
-    c2.setExpandHorizontal(true);
-    c2.setExpandVertical(true);
-    c2.setMinWidth(400);
-    c2.setMinHeight(400);
-
-    shell.setSize(600, 300);
-    shell.open ();
-    while (!shell.isDisposed ()) {
-        if (!display.readAndDispatch ()) display.sleep ();
-    }
-    display.dispose ();
-}
-
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet50.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet50.java
deleted file mode 100644
index 786d299..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet50.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Shell example snippet: create a dialog shell
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.widgets.*;
-
-public class Snippet50 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setText ("Shell");
-	shell.setSize (200, 200);
-	shell.open ();
-	Shell dialog = new Shell (shell);
-	dialog.setText ("Dialog");
-	dialog.setSize (200, 200);
-	dialog.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet51.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet51.java
deleted file mode 100644
index 301bd74..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet51.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Table example snippet: scroll a table (set the top index)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet51 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Table table = new Table (shell, SWT.BORDER | SWT.MULTI);
-	table.setSize (200, 200);
-	for (int i=0; i<128; i++) {
-		TableItem item = new TableItem (table, SWT.NONE);
-		item.setText ("Item " + i);
-	}
-	table.setTopIndex (95);
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet52.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet52.java
deleted file mode 100644
index 3442460..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet52.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Table example snippet: select an index (select and scroll)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet52 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Table table = new Table (shell, SWT.BORDER | SWT.MULTI);
-	table.setSize (200, 200);
-	for (int i=0; i<128; i++) {
-		TableItem item = new TableItem (table, SWT.NONE);
-		item.setText ("Item " + i);
-	}
-	table.setSelection (95);
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet53.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet53.java
deleted file mode 100644
index 26cae45..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet53.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Table example snippet: remove selected items
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet53 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	final Table table = new Table (shell, SWT.BORDER | SWT.MULTI);
-	table.setSize (200, 200);
-	for (int i=0; i<128; i++) {
-		TableItem item = new TableItem (table, SWT.NONE);
-		item.setText ("Item " + i);
-	}
-	Menu menu = new Menu (shell, SWT.POP_UP);
-	table.setMenu (menu);
-	MenuItem item = new MenuItem (menu, SWT.PUSH);
-	item.setText ("Delete Selection");
-	item.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event event) {
-			table.remove (table.getSelectionIndices ());
-		}
-	});
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet54.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet54.java
deleted file mode 100644
index 910b3a4..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet54.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Sash example snippet: create a sash (allow it to be moved)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet54 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	final Sash sash = new Sash (shell, SWT.BORDER | SWT.VERTICAL);
-	sash.setBounds (10, 10, 32, 100);
-	sash.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event e) {
-			sash.setBounds (e.x, e.y, e.width, e.height);
-		}
-	});
-	shell.open ();
-	sash.setFocus ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet55.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet55.java
deleted file mode 100644
index 0e6a83f..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet55.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Text example snippet: resize a text control (show about 10 characters)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet55 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Text text = new Text (shell, SWT.BORDER);
-	int columns = 10;
-	GC gc = new GC (text);
-	FontMetrics fm = gc.getFontMetrics ();
-	int width = columns * fm.getAverageCharWidth ();
-	int height = fm.getHeight ();
-	gc.dispose ();
-	text.setSize (text.computeSize (width, height));
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet56.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet56.java
deleted file mode 100644
index 9eeabb8..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet56.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * ProgressBar example snippet: update a progress bar (from another thread)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet56 {
-
-	public static void main(String[] args) {
-		final Display display = new Display();
-		Shell shell = new Shell(display);
-		final ProgressBar bar = new ProgressBar(shell, SWT.SMOOTH);
-		bar.setBounds(10, 10, 200, 32);
-		shell.open();
-		final int maximum = bar.getMaximum();
-		new Thread() {
-			public void run() {
-				for (final int[] i = new int[1]; i[0] <= maximum; i[0]++) {
-				try {Thread.sleep (100);} catch (Throwable th) {}
-					if (display.isDisposed()) return;
-					display.asyncExec(new Runnable() {
-						public void run() {
-						if (bar.isDisposed ()) return;
-							bar.setSelection(i[0]);
-						}
-					});
-				}
-			}
-		}.start();
-		while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-		}
-		display.dispose();
-	}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet57.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet57.java
deleted file mode 100644
index 84295f6..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet57.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * ProgressBar example snippet: update a progress bar (from the UI thread)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet57 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	ProgressBar bar = new ProgressBar (shell, SWT.SMOOTH);
-	bar.setBounds (10, 10, 200, 32);
-	shell.open ();
-	for (int i=0; i<=bar.getMaximum (); i++) {
-		try {Thread.sleep (100);} catch (Throwable th) {}
-		bar.setSelection (i);
-	}
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet58.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet58.java
deleted file mode 100644
index a914414..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet58.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * ToolBar example snippet: place a combo box in a tool bar
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet58 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	ToolBar bar = new ToolBar (shell, SWT.BORDER);
-	for (int i=0; i<4; i++) {
-		ToolItem item = new ToolItem (bar, 0);
-		item.setText ("Item " + i);
-	}
-	ToolItem sep = new ToolItem (bar, SWT.SEPARATOR);
-	int start = bar.getItemCount ();
-	for (int i=start; i<start+4; i++) {
-		ToolItem item = new ToolItem (bar, 0);
-		item.setText ("Item " + i);
-	}
-	Combo combo = new Combo (bar, SWT.READ_ONLY);
-	for (int i=0; i<4; i++) {
-		combo.add ("Item " + i);
-	}
-	combo.pack ();
-	sep.setWidth (combo.getSize ().x);
-	sep.setControl (combo);
-	bar.pack ();
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet59.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet59.java
deleted file mode 100644
index 978dacd..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet59.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * List example snippet: print selected items in a list
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet59 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	final List list = new List (shell, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
-	for (int i=0; i<128; i++) list.add ("Item " + i);
-	list.setBounds (0, 0, 100, 100);
-	list.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event e) {
-			String string = "";
-			int [] selection = list.getSelectionIndices ();
-			for (int i=0; i<selection.length; i++) string += selection [i] + " ";
-			System.out.println ("Selection={" + string + "}");
-		}
-	});
-	list.addListener (SWT.DefaultSelection, new Listener () {
-		public void handleEvent (Event e) {
-			String string = "";
-			int [] selection = list.getSelectionIndices ();
-			for (int i=0; i<selection.length; i++) string += selection [i] + " ";
-			System.out.println ("DefaultSelection={" + string + "}");
-		}
-	});
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet6.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet6.java
deleted file mode 100644
index 5332477..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet6.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * GridLayout example snippet: insert widgets into a grid layout
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.1
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet6 {
-
-public static void main (String [] args) {
-    Display display = new Display ();
-    final Shell shell = new Shell (display);
-    shell.setLayout(new GridLayout());
-    final Composite c = new Composite(shell, SWT.NONE);
-    GridLayout layout = new GridLayout();
-    layout.numColumns = 3;
-    c.setLayout(layout);
-    for (int i = 0; i < 10; i++) {
-        Button b = new Button(c, SWT.PUSH);
-        b.setText("Button "+i);
-    }
-
-    Button b = new Button(shell, SWT.PUSH);
-    b.setText("add a new button at row 2 column 1");
-    final int[] index = new int[1];
-    b.addListener(SWT.Selection, new Listener() {
-        public void handleEvent(Event e) {
-            Button s = new Button(c, SWT.PUSH);
-            s.setText("Special "+index[0]);
-            index[0]++;
-            Control[] children = c.getChildren();
-            s.moveAbove(children[3]);
-            shell.layout(new Control[] {s});
-        }
-    });
-
-    shell.open ();
-    while (!shell.isDisposed ()) {
-        if (!display.readAndDispatch ()) display.sleep ();
-    }
-    display.dispose ();
-}
-
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet60.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet60.java
deleted file mode 100644
index 92bce12..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet60.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Display example snippet: create two one shot timers (5000 ms, 2000 ms)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.widgets.*;
-
-public class Snippet60 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setSize (200, 200);
-	shell.open ();
-	display.timerExec (5000, new Runnable () {
-		public void run () {
-			System.out.println ("5000");
-		}
-	});
-	display.timerExec (2000, new Runnable () {
-		public void run () {
-			System.out.println ("2000");
-		}
-	});
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet61.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet61.java
deleted file mode 100644
index 9482880..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet61.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Tree example snippet: print selected items in a tree
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet61 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	final Tree tree = new Tree (shell, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
-	for (int i=0; i<4; i++) {
-		TreeItem item0 = new TreeItem (tree, 0);
-		item0.setText ("Item " + i);
-		for (int j=0; j<4; j++) {
-			TreeItem item1 = new TreeItem (item0, 0);
-			item1.setText ("SubItem " + i + " " + j);
-			for (int k=0; k<4; k++) {
-				TreeItem item2 = new TreeItem (item1, 0);
-				item2.setText ("SubItem " + i + " " + j + " " + k);
-			}	
-		}
-	}
-	tree.setBounds (0, 0, 100, 100);
-	tree.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event e) {
-			String string = "";
-			TreeItem [] selection = tree.getSelection ();
-			for (int i=0; i<selection.length; i++) string += selection [i] + " ";
-			System.out.println ("Selection={" + string + "}");
-		}
-	});
-	tree.addListener (SWT.DefaultSelection, new Listener () {
-		public void handleEvent (Event e) {
-			String string = "";
-			TreeItem [] selection = tree.getSelection ();
-			for (int i=0; i<selection.length; i++) string += selection [i] + " ";
-			System.out.println ("DefaultSelection={" + string + "}");
-		}
-	});
-	tree.addListener (SWT.Expand, new Listener () {
-		public void handleEvent (Event e) {
-			System.out.println ("Expand={" + e.item + "}");
-		}
-	});
-	tree.addListener (SWT.Collapse, new Listener () {
-		public void handleEvent (Event e) {
-			System.out.println ("Collapse={" + e.item + "}");
-		}
-	});
-	tree.getItems () [0].setExpanded (true);
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet62.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet62.java
deleted file mode 100644
index b1fbec9..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet62.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Control example snippet: print mouse state and button (down, move, up)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.1
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet62 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	final Shell shell = new Shell (display);
-	Listener listener = new Listener () {
-		public void handleEvent (Event e) {
-			String string = "Unknown";
-			switch (e.type) {
-				case SWT.MouseDown: string = "DOWN"; break;
-				case SWT.MouseMove: string = "MOVE"; break;
-				case SWT.MouseUp: string = "UP"; break;
-			}
-			string +=": button: " + e.button + ", ";
-			string += "stateMask=0x" + Integer.toHexString (e.stateMask);
-			if ((e.stateMask & SWT.BUTTON1) != 0) string += " BUTTON1";
-			if ((e.stateMask & SWT.BUTTON2) != 0) string += " BUTTON2";
-			if ((e.stateMask & SWT.BUTTON3) != 0) string += " BUTTON3";
-			if ((e.stateMask & SWT.BUTTON4) != 0) string += " BUTTON4";
-			if ((e.stateMask & SWT.BUTTON5) != 0) string += " BUTTON5";
-			System.out.println (string);
-		}
-	};
-	shell.addListener (SWT.MouseDown, listener);
-	shell.addListener (SWT.MouseMove, listener);
-	shell.addListener (SWT.MouseUp, listener);
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet63.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet63.java
deleted file mode 100644
index 70d7731..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet63.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Shell example snippet: create a dialog shell (prompt for a value)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet63 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.pack ();
-	shell.open ();
-	final boolean [] result = new boolean [1];
-	final Shell dialog = new Shell (shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-	dialog.setLayout (new RowLayout ());
-	final Button ok = new Button (dialog, SWT.PUSH);
-	ok.setText ("Ok");
-	Button cancel = new Button (dialog, SWT.PUSH);
-	cancel.setText ("Cancel");
-	Listener listener =new Listener () {
-		public void handleEvent (Event event) {
-			result [0] = event.widget == ok;
-			dialog.close ();
-		}
-	};
-	ok.addListener (SWT.Selection, listener);
-	cancel.addListener (SWT.Selection, listener);
-	dialog.pack ();
-	dialog.open ();
-	System.out.println ("Prompt ...");
-	while (!dialog.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	System.out.println ("Result: " + result [0]);
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet64.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet64.java
deleted file mode 100644
index 8a8db13..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet64.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Table example snippet: print selected items in a table
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet64 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	final Table table = new Table (shell, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
-	for (int i=0; i<16; i++) {
-		TableItem item = new TableItem (table, 0);
-		item.setText ("Item " + i);
-	}
-	table.setBounds (0, 0, 100, 100);
-	table.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event e) {
-			String string = "";
-			TableItem [] selection = table.getSelection ();
-			for (int i=0; i<selection.length; i++) string += selection [i] + " ";
-			System.out.println ("Selection={" + string + "}");
-		}
-	});
-	table.addListener (SWT.DefaultSelection, new Listener () {
-		public void handleEvent (Event e) {
-			String string = "";
-			TableItem [] selection = table.getSelection ();
-			for (int i=0; i<selection.length; i++) string += selection [i] + " ";
-			System.out.println ("DefaultSelection={" + string + "}");
-		}
-	});
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet65.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet65.java
deleted file mode 100644
index 3cb67a7..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet65.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * FormLayout example snippet: create a simple dialog using form layout
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet65 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	final Shell shell = new Shell (display);
-	Label label = new Label (shell, SWT.WRAP);
-	label.setText ("This is a long text string that will wrap when the dialog is resized.");
-	List list = new List (shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
-	list.setItems (new String [] {"Item 1", "Item2"});
-	Button button1 = new Button (shell, SWT.PUSH);
-	button1.setText ("Ok");
-	Button button2 = new Button (shell, SWT.PUSH);
-	button2.setText ("Cancel");
-	
-	final int insetX = 4, insetY = 4;
-	FormLayout formLayout = new FormLayout ();
-	formLayout.marginWidth = insetX;
-	formLayout.marginHeight = insetY;
-	shell.setLayout (formLayout);
-	
-	Point size = label.computeSize (SWT.DEFAULT, SWT.DEFAULT);
-	final FormData labelData = new FormData (size.x, SWT.DEFAULT);
-	labelData.left = new FormAttachment (0, 0);
-	labelData.right = new FormAttachment (100, 0);
-	label.setLayoutData (labelData);
-	shell.addListener (SWT.Resize, new Listener () {
-		public void handleEvent (Event e) {
-			Rectangle rect = shell.getClientArea ();
-			labelData.width = rect.width - insetX * 2;
-			shell.layout ();
-		}
-	});
-		
-	FormData button2Data = new FormData ();
-	button2Data.right = new FormAttachment (100, -insetX);
-	button2Data.bottom = new FormAttachment (100, 0);
-	button2.setLayoutData (button2Data);
-	
-	FormData button1Data = new FormData ();
-	button1Data.right = new FormAttachment (button2, -insetX);
-	button1Data.bottom = new FormAttachment (100, 0);
-	button1.setLayoutData (button1Data);
-	
-	FormData listData = new FormData ();
-	listData.left = new FormAttachment (0, 0);
-	listData.right = new FormAttachment (100, 0);
-	listData.top = new FormAttachment (label, insetY);
-	listData.bottom = new FormAttachment (button2, -insetY);
-	list.setLayoutData (listData);
-	
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet66.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet66.java
deleted file mode 100644
index 2328f87..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet66.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * GC example snippet: implement a simple scribble program
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet66 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	final Shell shell = new Shell (display);
-	Listener listener = new Listener () {
-		int lastX = 0, lastY = 0;
-		public void handleEvent (Event event) {
-			switch (event.type) {
-				case SWT.MouseMove:
-					if ((event.stateMask & SWT.BUTTON1) == 0) break;
-					GC gc = new GC (shell);
-					gc.drawLine (lastX, lastY, event.x, event.y);
-					gc.dispose ();
-					//FALL THROUGH
-				case SWT.MouseDown:
-					lastX = event.x;
-					lastY = event.y;
-					break;
-			}
-		}
-	};
-	shell.addListener (SWT.MouseDown, listener);
-	shell.addListener (SWT.MouseMove, listener);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet67.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet67.java
deleted file mode 100644
index 0214e9d..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet67.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * ToolBar example snippet: place a drop down menu in a tool bar
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet67 {
-
-public static void main (String [] args) {
-	final Display display = new Display ();
-	final Shell shell = new Shell (display);
-	final ToolBar toolBar = new ToolBar (shell, SWT.NONE);
-	final Menu menu = new Menu (shell, SWT.POP_UP);
-	for (int i=0; i<8; i++) {
-		MenuItem item = new MenuItem (menu, SWT.PUSH);
-		item.setText ("Item " + i);
-	}
-	final ToolItem item = new ToolItem (toolBar, SWT.DROP_DOWN);
-	item.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event event) {
-			if (event.detail == SWT.ARROW) {
-				Rectangle rect = item.getBounds ();
-				Point pt = new Point (rect.x, rect.y + rect.height);
-				pt = toolBar.toDisplay (pt);
-				menu.setLocation (pt.x, pt.y);
-				menu.setVisible (true);
-			}
-		}
-	});
-	toolBar.pack ();
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	menu.dispose ();
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet68.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet68.java
deleted file mode 100644
index d952b1e..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet68.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Display example snippet: stop a repeating timer when a button is pressed
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet68 {
-
-public static void main (String [] args) {
-	final Display display = new Display ();
-	final Color red = display.getSystemColor (SWT.COLOR_RED);
-	final Color blue = display.getSystemColor (SWT.COLOR_BLUE);
-	Shell shell = new Shell (display);
-	shell.setLayout (new RowLayout ());
-	Button button = new Button (shell, SWT.PUSH);
-	button.setText ("Stop Timer");
-	final Label label = new Label (shell, SWT.BORDER);
-	label.setBackground (red);
-	final int time = 500;
-	final Runnable timer = new Runnable () {
-		public void run () {
-			if (label.isDisposed ()) return;
-			Color color = label.getBackground ().equals (red) ? blue : red;
-			label.setBackground (color);
-			display.timerExec (time, this);
-		}
-	};
-	display.timerExec (time, timer);
-	button.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event event) {
-			display.timerExec (-1, timer);
-		}
-	});
-	button.pack ();
-	label.setLayoutData (new RowData (button.getSize ()));
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet69.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet69.java
deleted file mode 100644
index 94bf999..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet69.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * FormLayout example snippet: center a label and single line text using a form layout
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet69 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Label label = new Label (shell, SWT.NONE | SWT.BORDER);
-	label.setText ("Name");
-	Text text = new Text (shell, SWT.NONE);
-
-	FormLayout layout = new FormLayout ();
-	layout.marginWidth = layout.marginHeight = 5;
-	shell.setLayout (layout);
-
-	GC gc = new GC (text);
-	FontMetrics fm = gc.getFontMetrics ();
-	int charWidth = fm.getAverageCharWidth ();
-	int width = text.computeSize (charWidth * 8, SWT.DEFAULT).x;
-	gc.dispose ();
-	FormData data = new FormData (width, SWT.DEFAULT);
-	text.setLayoutData (data);
-	data.left = new FormAttachment (label, 5);
-	data.top = new FormAttachment (label, 0, SWT.CENTER);
-	
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet7.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet7.java
deleted file mode 100644
index e28363e..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet7.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * example snippet: create a table (lazy)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet7 {
-	
-public static void main (String [] args) {
-	final Display display = new Display ();
-	final Image image = new Image (display, 16, 16);
-	GC gc = new GC (image);
-	gc.setBackground (display.getSystemColor (SWT.COLOR_RED));
-	gc.fillRectangle (image.getBounds ());
-	gc.dispose ();
-	final Shell shell = new Shell (display);
-	shell.setText ("Lazy Table");
-	shell.setLayout (new FillLayout ());
-	final Table table = new Table (shell, SWT.BORDER | SWT.MULTI);
-	table.setSize (200, 200);
-	Thread thread = new Thread () {
-		public void run () {
-			for (int i=0; i<20000; i++) {
-				if (table.isDisposed ()) return;
-				final int [] index = new int [] {i};
-				display.syncExec (new Runnable () {
-					public void run () {
-						if (table.isDisposed ()) return;
-						TableItem item = new TableItem (table, SWT.NONE);
-						item.setText ("Table Item " + index [0]);
-						item.setImage (image);
-					}
-				});
-			}
-		}
-	};
-	thread.start ();
-	shell.setSize (200, 200);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	image.dispose ();
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet70.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet70.java
deleted file mode 100644
index aac2779..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet70.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * GC example snippet: create an icon (in memory)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet70 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Color red = display.getSystemColor (SWT.COLOR_RED);
-	Color white = display.getSystemColor (SWT.COLOR_WHITE);
-	Color black = display.getSystemColor (SWT.COLOR_BLACK);
-	
-	Image image = new Image (display, 20, 20);
-	GC gc = new GC (image);
-	gc.setBackground (red);
-	gc.fillRectangle (5, 5, 10, 10);
-	gc.dispose ();
-	ImageData imageData = image.getImageData ();
-	
-	PaletteData palette = new PaletteData (
-		new RGB [] {
-			new RGB (0, 0, 0),
-			new RGB (0xFF, 0xFF, 0xFF),
-		});
-	ImageData maskData = new ImageData (20, 20, 1, palette);
-	Image mask = new Image (display, maskData);
-	gc = new GC (mask);
-	gc.setBackground (black);
-	gc.fillRectangle (0, 0, 20, 20);
-	gc.setBackground (white);
-	gc.fillRectangle (5, 5, 10, 10);
-	gc.dispose ();
-	maskData = mask.getImageData ();
-	
-	Image icon = new Image (display, imageData, maskData);
-	Shell shell = new Shell (display);
-	Button button = new Button (shell, SWT.PUSH);
-	button.setImage (icon);
-	button.setSize (60, 60);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	icon.dispose ();
-	image.dispose ();
-	mask.dispose ();
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet71.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet71.java
deleted file mode 100644
index ca0d4fc..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet71.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * FormLayout example snippet: create a simple OK/CANCEL dialog using form layout
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet71 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.pack ();
-	shell.open ();
-	Shell dialog = new Shell (shell, SWT.DIALOG_TRIM);
-	Label label = new Label (dialog, SWT.NONE);
-	label.setText ("Exit the application?");
-	Button okButton = new Button (dialog, SWT.PUSH);
-	okButton.setText ("&OK");
-	Button cancelButton = new Button (dialog, SWT.PUSH);
-	cancelButton.setText ("&Cancel");
-	
-	FormLayout form = new FormLayout ();
-	form.marginWidth = form.marginHeight = 8;
-	dialog.setLayout (form);
-	FormData okData = new FormData ();
-	okData.top = new FormAttachment (label, 8);
-	okButton.setLayoutData (okData);
-	FormData cancelData = new FormData ();
-	cancelData.left = new FormAttachment (okButton, 8);
-	cancelData.top = new FormAttachment (okButton, 0, SWT.TOP);
-	cancelButton.setLayoutData (cancelData);
-	
-	dialog.setDefaultButton (okButton);
-	dialog.pack ();
-	dialog.open ();
-	
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet72.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet72.java
deleted file mode 100644
index 2d6c89a..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet72.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * FileDialog example snippet: prompt for a file name (to save)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet72 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.open ();
-	FileDialog dialog = new FileDialog (shell, SWT.SAVE);
-	dialog.setFilterNames (new String [] {"Batch Files", "All Files (*.*)"});
-	dialog.setFilterExtensions (new String [] {"*.bat", "*.*"}); //Windows wild cards
-	dialog.setFilterPath ("c:\\"); //Windows path
-	dialog.setFileName ("fred.bat");
-	System.out.println ("Save to: " + dialog.open ());
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet73.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet73.java
deleted file mode 100644
index 45d855c..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet73.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Menu example snippet: enable menu items dynamically (when menu shown)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet73 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	final Tree tree = new Tree (shell, SWT.BORDER | SWT.MULTI);
-	final Menu menu = new Menu (shell, SWT.POP_UP);
-	tree.setMenu (menu);
-	for (int i=0; i<12; i++) {
-		TreeItem treeItem = new TreeItem (tree, SWT.NONE);
-		treeItem.setText ("Item " + i);
-		MenuItem menuItem = new MenuItem (menu, SWT.PUSH);
-		menuItem.setText (treeItem.getText ());
-	}
-	menu.addListener (SWT.Show, new Listener () {
-		public void handleEvent (Event event) {
-			MenuItem [] menuItems = menu.getItems ();
-			TreeItem [] treeItems = tree.getSelection ();
-			for (int i=0; i<menuItems.length; i++) {
-				String text = menuItems [i].getText ();
-				int index = 0;
-				while (index<treeItems.length) {
-					if (treeItems [index].getText ().equals (text)) break;
-					index++;
-				}
-				menuItems [i].setEnabled (index != treeItems.length);
-			}
-		}
-	});
-	tree.setSize (200, 200);
-	shell.setSize (300, 300);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet74.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet74.java
deleted file mode 100644
index de8bdb0..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet74.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Caret example snippet: create a caret
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet74 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Caret caret = new Caret (shell, SWT.NONE);
-	caret.setBounds (10, 10, 2, 32);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet75.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet75.java
deleted file mode 100644
index fe1780f..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet75.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Composite example snippet: set the tab traversal order of children
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet75 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setLayout (new RowLayout ());
-	
-	Composite c1 = new Composite (shell, SWT.BORDER);
-	c1.setLayout (new RowLayout ());
-	Button b1 = new Button (c1, SWT.PUSH);
-	b1.setText ("B1");
-	Button [] radios = new Button [3];
-	for (int i=0; i<radios.length; i++) {
-		radios [i] = new Button (c1, SWT.RADIO);
-		radios [i].setText ("R" + (i ==1 ? "&" : "") + i);
-	}
-	Button b2 = new Button (c1, SWT.PUSH);
-	b2.setText ("B2");
-	List l1 = new List (c1, SWT.SINGLE | SWT.BORDER);
-	l1.setItems (new String [] {"L1"});
-	Button b3 = new Button (c1, SWT.PUSH);
-	b3.setText ("B&3");
-	Button b3_1 = new Button (c1, SWT.PUSH);
-	b3_1.setText ("B3_1");
-	
-	Composite c2 = new Composite (shell, SWT.BORDER);
-	c2.setLayout (new RowLayout ());
-	Button b4 = new Button (c2, SWT.PUSH);
-	b4.setText ("B&4");
-	Button b5 = new Button (c2, SWT.PUSH);
-	b5.setText ("B&5");
-	
-	List l2 = new List (shell, SWT.SINGLE | SWT.BORDER);
-	l2.setItems (new String [] {"L2"});
-	
-	ToolBar tb1 = new ToolBar (shell, SWT.FLAT | SWT.BORDER);
-	ToolItem i1 = new ToolItem (tb1, SWT.RADIO);
-	i1.setText ("I1");
-	ToolItem i2 = new ToolItem (tb1, SWT.RADIO);
-	i2.setText ("I&2");
-	Combo combo1 = new Combo (tb1, SWT.READ_ONLY | SWT.BORDER);
-	combo1.setItems (new String [] {"C1"});
-	combo1.setText ("C1");
-	combo1.pack ();
-	ToolItem i3 = new ToolItem (tb1, SWT.SEPARATOR);
-	i3.setWidth (combo1.getSize ().x);
-	i3.setControl (combo1);
-	i3.setText ("I3");
-	ToolItem i4 = new ToolItem (tb1, SWT.PUSH);
-	i4.setText ("I4");
-	ToolItem i5 = new ToolItem (tb1, SWT.CHECK);
-	i5.setText ("I5");
-	
-	Button b6 = new Button (shell, SWT.PUSH);
-	b6.setText ("B&6");
-	
-	Composite c4 = new Composite (shell, SWT.BORDER);
-	c4.setSize (32, 32);
-	Composite c5 = new Composite (c4, SWT.BORDER);
-	c5.setSize (20, 20);
-
-	Control [] list1 = new Control [] {b2, b1, b3_1, b3};
-	c1.setTabList (list1);
-	Control [] list2 = new Control [] {c1, b6, tb1, c4, c2, l2};
-	shell.setTabList (list2);
-
-	shell.pack ();
-	shell.open ();
-	
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet76.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet76.java
deleted file mode 100644
index 86a580e..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet76.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * TabFolder example snippet: create a tab folder (six pages)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet76 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	final Shell shell = new Shell (display);
-	final TabFolder tabFolder = new TabFolder (shell, SWT.BORDER);
-	for (int i=0; i<6; i++) {
-		TabItem item = new TabItem (tabFolder, SWT.NONE);
-		item.setText ("TabItem " + i);
-		Button button = new Button (tabFolder, SWT.PUSH);
-		button.setText ("Page " + i);
-		item.setControl (button);
-	}
-	tabFolder.setSize (400, 200);
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet77.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet77.java
deleted file mode 100644
index e255329..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet77.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Table example snippet: resize columns as table resizes
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet77 {
-
-public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setLayout(new FillLayout());
-		
-	final Composite comp = new Composite(shell, SWT.NONE);
-	final Table table = new Table(comp, SWT.BORDER | SWT.V_SCROLL);
-	table.setHeaderVisible(true);
-	table.setLinesVisible(true);
-	final TableColumn column1 = new TableColumn(table, SWT.NONE);
-	column1.setText("Column 1");
-	final TableColumn column2 = new TableColumn(table, SWT.NONE);
-	column2.setText("Column 2");
-	for (int i = 0; i < 10; i++) {
-		TableItem item = new TableItem(table, SWT.NONE);
-		item.setText(new String[] {"item 0" + i, "item 1"+i});
-	}
-	comp.addControlListener(new ControlAdapter() {
-		public void controlResized(ControlEvent e) {
-			Rectangle area = comp.getClientArea();
-			Point preferredSize = table.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-			int width = area.width - 2*table.getBorderWidth();
-			if (preferredSize.y > area.height + table.getHeaderHeight()) {
-				// Subtract the scrollbar width from the total column width
-				// if a vertical scrollbar will be required
-				Point vBarSize = table.getVerticalBar().getSize();
-				width -= vBarSize.x;
-			}
-			Point oldSize = table.getSize();
-			if (oldSize.x > area.width) {
-				// table is getting smaller so make the columns 
-				// smaller first and then resize the table to
-				// match the client area width
-				column1.setWidth(width/3);
-				column2.setWidth(width - column1.getWidth());
-				table.setSize(area.width, area.height);
-			} else {
-				// table is getting bigger so make the table 
-				// bigger first and then make the columns wider
-				// to match the client area width
-				table.setSize(area.width, area.height);
-				column1.setWidth(width/3);
-				column2.setWidth(width - column1.getWidth());
-			}
-		}
-	});
-		
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet78.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet78.java
deleted file mode 100644
index e81da90..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet78.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Drag and Drop example snippet: drag text between two labels
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.dnd.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet78 {
-
-public static void main (String [] args) {
-	
-	Display display = new Display ();
-	final Shell shell = new Shell (display);
-	shell.setLayout(new FillLayout());
-	final Label label1 = new Label (shell, SWT.BORDER);
-	label1.setText ("TEXT");
-	final Label label2 = new Label (shell, SWT.BORDER);
-	setDragDrop (label1);
-	setDragDrop (label2);
-	shell.setSize (200, 200);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-public static void setDragDrop (final Label label) {
-	
-	Transfer[] types = new Transfer[] {TextTransfer.getInstance()};
-	int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;
-	
-	final DragSource source = new DragSource (label, operations);
-	source.setTransfer(types);
-	source.addDragListener (new DragSourceListener () {
-		public void dragStart(DragSourceEvent event) {
-			event.doit = (label.getText ().length () != 0);
-		}
-		public void dragSetData (DragSourceEvent event) {
-			event.data = label.getText ();
-		}
-		public void dragFinished(DragSourceEvent event) {
-			if (event.detail == DND.DROP_MOVE)
-				label.setText ("");
-		}
-	});
-
-	DropTarget target = new DropTarget(label, operations);
-	target.setTransfer(types);
-	target.addDropListener (new DropTargetAdapter() {
-		public void drop(DropTargetEvent event) {
-			if (event.data == null) {
-				event.detail = DND.DROP_NONE;
-				return;
-			}
-			label.setText ((String) event.data);
-		}
-	});
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet79.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet79.java
deleted file mode 100644
index 945d35f..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet79.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Drag and Drop example snippet: define my own data transfer type
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.1
- */
-import java.io.*;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.dnd.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet79 {
-
-/* The data being transferred is an <bold>array of type MyType</bold> where MyType is define as: */
-static class MyType {
-	String fileName;
-	long fileLength;
-	long lastModified;
-}
-
-static class MyTransfer extends ByteArrayTransfer {
-
-	private static final String MYTYPENAME = "name_for_my_type";
-	private static final int MYTYPEID = registerType (MYTYPENAME);
-	private static MyTransfer _instance = new MyTransfer ();
-
-public static MyTransfer getInstance () {
-	return _instance;
-}
-
-public void javaToNative (Object object, TransferData transferData) {
-	if (!checkMyType(object) || !isSupportedType (transferData)) {
-		DND.error(DND.ERROR_INVALID_DATA);
-	}
-	MyType [] myTypes = (MyType []) object;
-	try {
-		// write data to a byte array and then ask super to convert to pMedium
-		ByteArrayOutputStream out = new ByteArrayOutputStream ();
-		DataOutputStream writeOut = new DataOutputStream (out);
-		for (int i = 0, length = myTypes.length; i < length; i++) {
-			byte [] buffer = myTypes [i].fileName.getBytes ();
-			writeOut.writeInt (buffer.length);
-			writeOut.write (buffer);
-			writeOut.writeLong (myTypes [i].fileLength);
-			writeOut.writeLong (myTypes [i].lastModified);
-		}
-		byte [] buffer = out.toByteArray ();
-		writeOut.close ();
-		super.javaToNative (buffer, transferData);
-	}
-	catch (IOException e) {}
-}
-
-public Object nativeToJava (TransferData transferData) {
-	if (isSupportedType (transferData)) {
-		byte [] buffer = (byte []) super.nativeToJava (transferData);
-		if (buffer == null) return null;
-
-		MyType [] myData = new MyType [0];
-		try {
-			ByteArrayInputStream in = new ByteArrayInputStream (buffer);
-			DataInputStream readIn = new DataInputStream (in);
-			while (readIn.available () > 20) {
-				MyType datum = new MyType ();
-				int size = readIn.readInt ();
-				byte [] name = new byte [size];
-				readIn.read (name);
-				datum.fileName = new String (name);
-				datum.fileLength = readIn.readLong ();
-				datum.lastModified = readIn.readLong ();
-				MyType [] newMyData = new MyType [myData.length + 1];
-				System.arraycopy (myData, 0, newMyData, 0, myData.length);
-				newMyData [myData.length] = datum;
-				myData = newMyData;
-			}
-			readIn.close ();
-		}
-		catch (IOException ex) {
-			return null;
-		}
-		return myData;
-	}
-
-	return null;
-}
-
-protected String [] getTypeNames () {
-	return new String [] {MYTYPENAME};
-}
-
-protected int [] getTypeIds () {
-	return new int [] {MYTYPEID};
-}
-
-boolean checkMyType(Object object) {
-	if (object == null || 
-		!(object instanceof MyType[]) || 
-		((MyType[])object).length == 0) {
-		return false;
-	}
-	MyType[] myTypes = (MyType[])object;
-	for (int i = 0; i < myTypes.length; i++) {
-		if (myTypes[i] == null || 
-			myTypes[i].fileName == null || 
-			myTypes[i].fileName.length() == 0) {
-			return false;
-		}
-	}
-	return true;
-}
-
-protected boolean validate(Object object) {
-	return checkMyType(object);
-}
-}
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setLayout (new FillLayout ());
-	final Label label1 = new Label (shell, SWT.BORDER | SWT.WRAP);
-	label1.setText ("Drag Source for MyData[]");
-	final Label label2 = new Label (shell, SWT.BORDER | SWT.WRAP);
-	label2.setText ("Drop Target for MyData[]");
-
-	DragSource source = new DragSource (label1, DND.DROP_COPY);
-	source.setTransfer (new Transfer [] {MyTransfer.getInstance ()});
-	source.addDragListener (new DragSourceAdapter () {
-		public void dragSetData (DragSourceEvent event) {
-			MyType myType1 = new MyType ();
-			myType1.fileName = "C:\\abc.txt";
-			myType1.fileLength = 1000;
-			myType1.lastModified = 12312313;
-			MyType myType2 = new MyType ();
-			myType2.fileName = "C:\\xyz.txt";
-			myType2.fileLength = 500;
-			myType2.lastModified = 12312323;
-			event.data = new MyType [] {myType1, myType2};
-		}
-	});
-	DropTarget target = new DropTarget (label2, DND.DROP_COPY | DND.DROP_DEFAULT);
-	target.setTransfer (new Transfer [] {MyTransfer.getInstance ()});
-	target.addDropListener (new DropTargetAdapter () {
-		public void dragEnter (DropTargetEvent event) {
-			if (event.detail == DND.DROP_DEFAULT) {
-				event.detail = DND.DROP_COPY;
-			}
-		}
-
-		public void dragOperationChanged (DropTargetEvent event) {
-			if (event.detail == DND.DROP_DEFAULT) {
-				event.detail = DND.DROP_COPY;
-			}
-		}
-
-		public void drop (DropTargetEvent event) {
-			if (event.data != null) {
-				MyType [] myTypes = (MyType []) event.data;
-				if (myTypes != null) {
-					String string = "";
-					for (int i = 0; i < myTypes.length; i++) {
-						string += myTypes [i].fileName + " ";
-					}
-					label2.setText (string);
-				}
-			}
-		}
-
-	});
-	shell.setSize (200, 200);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
\ No newline at end of file
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet8.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet8.java
deleted file mode 100644
index 0912b79..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet8.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Tree example snippet: create a tree (lazy)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-import java.io.*;
-
-public class Snippet8 {
-	
-public static void main (String [] args) {
-	final Display display = new Display ();
-	final Shell shell = new Shell (display);
-	shell.setText ("Lazy Tree");
-	shell.setLayout (new FillLayout ());
-	final Tree tree = new Tree (shell, SWT.BORDER);
-	File [] roots = File.listRoots ();
-	for (int i=0; i<roots.length; i++) {
-		TreeItem root = new TreeItem (tree, 0);
-		root.setText (roots [i].toString ());
-		root.setData (roots [i]);
-		new TreeItem (root, 0);
-	}
-	tree.addListener (SWT.Expand, new Listener () {
-		public void handleEvent (final Event event) {
-			final TreeItem root = (TreeItem) event.item;
-			TreeItem [] items = root.getItems ();
-			for (int i= 0; i<items.length; i++) {
-				if (items [i].getData () != null) return;
-				items [i].dispose ();
-			}
-			File file = (File) root.getData ();
-			File [] files = file.listFiles ();
-			if (files == null) return;
-			for (int i= 0; i<files.length; i++) {
-				TreeItem item = new TreeItem (root, 0);
-				item.setText (files [i].getName ());
-				item.setData (files [i]);
-				if (files [i].isDirectory()) {
-					new TreeItem (item, 0);
-				}
-			}
-		}
-	});
-	Point size = tree.computeSize (300, SWT.DEFAULT);
-	int width = Math.max (300, size.x);
-	int height = Math.max (300, size.y);
-	shell.setSize (shell.computeSize (width, height));
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet80.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet80.java
deleted file mode 100644
index 6505582..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet80.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Tree example snippet: limit selection to items that match a pattern
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet80 {
-	
-public static void main(String[] args) {
-	final Display display = new Display();
-	final Shell shell = new Shell(display);
-	shell.setLayout(new FillLayout());
-	final Tree tree = new Tree(shell, SWT.BORDER | SWT.MULTI);
-	for (int i = 0; i < 2; i++) {
-		TreeItem item = new TreeItem(tree, SWT.NONE);
-		item.setText("item " + i);
-		for (int j = 0; j < 2; j++) {
-			TreeItem subItem = new TreeItem(item, SWT.NONE);
-			subItem.setText("item " + j);
-			for (int k = 0; k < 2; k++) {
-				TreeItem subsubItem = new TreeItem(subItem, SWT.NONE);
-				subsubItem.setText("item " + k);
-			}
-		}
-	}
-	
-	tree.addSelectionListener(new SelectionAdapter() {
-		public void widgetSelected(SelectionEvent e) {
-			TreeItem[] selection = tree.getSelection();
-			TreeItem[] revisedSelection = new TreeItem[0];
-			for (int i = 0; i < selection.length; i++) {
-				String text = selection[i].getText();
-				if (text.indexOf("1") > 0) {
-					TreeItem[] newSelection = new TreeItem[revisedSelection.length + 1];
-					System.arraycopy(revisedSelection, 0, newSelection, 0, revisedSelection.length);
-					newSelection[revisedSelection.length] = selection[i];
-					revisedSelection = newSelection;
-				}
-			}
-			tree.setSelection(revisedSelection);
-		}
-	});
-
-	shell.setSize(300, 300);
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet81.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet81.java
deleted file mode 100644
index de57edd..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet81.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * OLE and ActiveX example snippet: browse the typelibinfo for a program id (win32 only)
- * NOTE: This snippet uses internal SWT packages that are
- * subject to change without notice.
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.internal.ole.win32.*;
-import org.eclipse.swt.ole.win32.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet81 {
-	
-public static void main(String[] args) {
-	
-	if (args.length == 0) {
-		System.out.println("Usage: java Main <program id>");
-		return;
-	}
-
-	String progID = args[0];
-	
-	Display display = new Display();
-	Shell shell = new Shell(display);
-
-	OleFrame frame = new OleFrame(shell, SWT.NONE);
-	OleControlSite site = null;
-	OleAutomation auto = null;
-	try {
-		site = new OleControlSite(frame, SWT.NONE, progID);	
-		auto = new OleAutomation(site);
-	} catch (SWTException ex) {
-		System.out.println("Unable to open type library for "+progID);
-		return;
-	}
-		
-	printTypeInfo(auto);
-	
-	auto.dispose();
-	shell.dispose();
-	display.dispose();
-
-}
-
-private static void printTypeInfo(OleAutomation auto) {
-	TYPEATTR typeattr = auto.getTypeInfoAttributes();
-	if (typeattr != null) {		
-		if (typeattr.cFuncs > 0) System.out.println("Functions :\n");
-		for (int i = 0; i < typeattr.cFuncs; i++) {			
-			OleFunctionDescription data = auto.getFunctionDescription(i);
-			String argList = "";
-			int firstOptionalArgIndex = data.args.length - data.optionalArgCount;
-			for (int j = 0; j < data.args.length; j++) {
-				argList += "[";
-				if (j >= firstOptionalArgIndex) argList += "optional, ";
-				argList += getDirection(data.args[j].flags)+"] "+getTypeName(data.args[j].type)+" "+data.args[j].name;
-				if ( j < data.args.length - 1) argList += ", ";
-			}			
-			System.out.println(getInvokeKind(data.invokeKind)+" (id = "+data.id+") : "
-					        +"\n\tSignature   : "+getTypeName(data.returnType)+" "+data.name+"("+argList+")"
-			                    +"\n\tDescription : "+data.documentation
-			                    +"\n\tHelp File   : "+data.helpFile+"\n");
-		}
-		
-		if (typeattr.cVars > 0) System.out.println("\n\nVariables  :\n");
-		for (int i = 0; i < typeattr.cVars; i++) {
-			OlePropertyDescription data = auto.getPropertyDescription(i);
-			System.out.println("PROPERTY (id = "+data.id+") :"
-			                    +"\n\tName : "+data.name
-			                    +"\n\tType : "+getTypeName(data.type)+"\n");
-		}
-	}
-}
-private static String getTypeName(int type) {
-	switch (type) {
-		case OLE.VT_BOOL : return "boolean";
-		case OLE.VT_R4 : return "float";
-		case OLE.VT_R8 : return "double";
-		case OLE.VT_I4 : return "int";
-		case OLE.VT_DISPATCH : return "IDispatch";
-		case OLE.VT_UNKNOWN : return "IUnknown";
-		case OLE.VT_I2 : return "short";
-		case OLE.VT_BSTR : return "String";
-		case OLE.VT_VARIANT : return "Variant";
-		case OLE.VT_CY : return "Currency";
-		case OLE.VT_DATE : return "Date";
-		case OLE.VT_UI1 : return "unsigned char";
-		case OLE.VT_UI4 : return "unsigned int";
-		case OLE.VT_USERDEFINED : return "UserDefined";
-		case OLE.VT_HRESULT : return "int";
-		case OLE.VT_VOID : return "void";
-		
-		case OLE.VT_BYREF | OLE.VT_BOOL : return "boolean *";
-		case OLE.VT_BYREF | OLE.VT_R4 : return "float *";
-		case OLE.VT_BYREF | OLE.VT_R8 : return "double *";
-		case OLE.VT_BYREF | OLE.VT_I4 : return "int *";
-		case OLE.VT_BYREF | OLE.VT_DISPATCH : return "IDispatch *";
-		case OLE.VT_BYREF | OLE.VT_UNKNOWN : return "IUnknown *";
-		case OLE.VT_BYREF | OLE.VT_I2 : return "short *";
-		case OLE.VT_BYREF | OLE.VT_BSTR : return "String *";
-		case OLE.VT_BYREF | OLE.VT_VARIANT : return "Variant *";
-		case OLE.VT_BYREF | OLE.VT_CY : return "Currency *";
-		case OLE.VT_BYREF | OLE.VT_DATE : return "Date *";
-		case OLE.VT_BYREF | OLE.VT_UI1 : return "unsigned char *";
-		case OLE.VT_BYREF | OLE.VT_UI4 : return "unsigned int *";
-		case OLE.VT_BYREF | OLE.VT_USERDEFINED : return "UserDefined *";
-	}
-	return "unknown "+ type;	
-}
-private static String getDirection(int direction){
-	String dirString = "";
-	boolean comma = false;
-	if ((direction & OLE.IDLFLAG_FIN) != 0) {
-		dirString += "in";
-		comma = true;
-	}
-	if ((direction & OLE.IDLFLAG_FOUT) != 0){
-		if (comma) dirString += ", ";
-		dirString += "out";
-		comma = true;
-	}
-	if ((direction & OLE.IDLFLAG_FLCID) != 0){
-		if (comma) dirString += ", ";
-		dirString += "lcid";
-		comma = true;
-	}
-	if ((direction & OLE.IDLFLAG_FRETVAL) != 0){
-		if (comma) dirString += ", "; 
-		dirString += "retval";
-	}
-	
-	return dirString;
-}
-private static String getInvokeKind(int invKind) {
-	switch (invKind) {
-		case OLE.INVOKE_FUNC : return "METHOD";
-		case OLE.INVOKE_PROPERTYGET : return "PROPERTY GET";
-		case OLE.INVOKE_PROPERTYPUT : return "PROPERTY PUT";
-		case OLE.INVOKE_PROPERTYPUTREF : return "PROPERTY PUT BY REF";
-	}
-	return "unknown "+invKind;
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet82.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet82.java
deleted file mode 100644
index 2bd7232..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet82.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * CTabFolder example snippet: prevent an item from closing
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- * 
- * @since 3.0
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.custom.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet82 {
-	
-public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setLayout(new FillLayout());
-	CTabFolder folder = new CTabFolder(shell, SWT.BORDER);
-	for (int i = 0; i < 4; i++) {
-		CTabItem item = new CTabItem(folder, SWT.CLOSE);
-		item.setText("Item "+i);
-		Text text = new Text(folder, SWT.MULTI);
-		text.setText("Content for Item "+i);
-		item.setControl(text);
-	}
-	
-	final CTabItem specialItem = new CTabItem(folder, SWT.CLOSE);
-	specialItem.setText("Don't Close Me");
-	Text text = new Text(folder, SWT.MULTI);
-	text.setText("This tab can never be closed");
-	specialItem.setControl(text);
-		
-	folder.addCTabFolder2Listener(new CTabFolder2Adapter() {
-		public void close(CTabFolderEvent event) {
-			if (event.item.equals(specialItem)) {
-				event.doit = false;
-			}
-		}
-	});
-	
-	final CTabItem noCloseItem = new CTabItem(folder, SWT.NONE);
-	noCloseItem.setText("No Close Button");
-	Text text2 = new Text(folder, SWT.MULTI);
-	text2.setText("This tab does not have a close button");
-	noCloseItem.setControl(text2);
-	
-	shell.pack();
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet83.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet83.java
deleted file mode 100644
index eff8fcd..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet83.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Drag and Drop example snippet: determine data types available (win32 only)
- * NOTE: This snippet uses internal SWT packages that are
- * subject to change without notice.
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.dnd.*;
-import org.eclipse.swt.internal.ole.win32.*;
-import org.eclipse.swt.internal.win32.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet83 extends ByteArrayTransfer {
-
-private static Snippet83 _instance = new Snippet83();
-private int[] ids;
-private String[] names;
-	
-public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setLayout(new FillLayout());
-	final Table control = new Table(shell, SWT.NONE);
-	TableItem item = new TableItem(control, SWT.NONE);
-	item.setText("Drag data over this site to see the native transfer type.");
-	DropTarget target = new DropTarget(control, DND.DROP_DEFAULT | DND.DROP_COPY | DND.DROP_LINK | DND.DROP_MOVE);
-	target.setTransfer(new Transfer[] {Snippet83.getInstance()});
-	target.addDropListener(new DropTargetAdapter() {
-		public void dragEnter(DropTargetEvent event) {			
-			String ops = "";
-			if ((event.operations & DND.DROP_COPY) != 0) ops += "Copy;";
-			if ((event.operations & DND.DROP_MOVE) != 0) ops += "Move;";
-			if ((event.operations & DND.DROP_LINK) != 0) ops += "Link;";
-			control.removeAll();
-			TableItem item1 = new TableItem(control,SWT.NONE);
-			item1.setText("Allowed Operations are "+ops);
-			
-			if (event.detail == DND.DROP_DEFAULT) {
-				if ((event.operations & DND.DROP_COPY) != 0) {
-					event.detail = DND.DROP_COPY;
-				} else if ((event.operations & DND.DROP_LINK) != 0) {
-					event.detail = DND.DROP_LINK;
-				} else if ((event.operations & DND.DROP_MOVE) != 0) {
-					event.detail = DND.DROP_MOVE;
-				}
-			}
-			
-			TransferData[] data = event.dataTypes;
-			for (int i = 0; i < data.length; i++) {
-				int id = data[i].type;
-				String name = getNameFromId(id);
-				TableItem item2 = new TableItem(control,SWT.NONE);
-				item2.setText("Data type is "+id+" "+name);
-			}
-		}
-	});
-	
-	shell.setSize(400, 400);
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-
-public static Snippet83 getInstance () {
-	return _instance;
-}
-Snippet83() {
-	ids = new int[80000];
-	names = new String[80000];
-	for (int i = 0; i < ids.length; i++) {
-		ids[i] = i;
-		names[i] = getNameFromId(i);
-	}
-}
-public void javaToNative (Object object, TransferData transferData) {
-}
-public Object nativeToJava(TransferData transferData){
-	return "Hello World";
-}
-protected String[] getTypeNames(){
-	return names;
-}
-protected int[] getTypeIds(){
-	return ids;
-}
-static String getNameFromId(int id) {
-	String name = null;
-	int maxSize = 128;
-	TCHAR buffer = new TCHAR(0, maxSize);
-	int size = COM.GetClipboardFormatName(id, buffer, maxSize);
-	if (size != 0) {
-		name = buffer.toString(0, size);
-	} else {
-		switch (id) {
-			case COM.CF_HDROP:
-				name = "CF_HDROP";
-				break;
-			case COM.CF_TEXT:
-				name = "CF_TEXT";
-				break;
-			case COM.CF_BITMAP:
-				name = "CF_BITMAP";
-				break;
-			case COM.CF_METAFILEPICT:
-				name = "CF_METAFILEPICT";
-				break;
-			case COM.CF_SYLK:
-				name = "CF_SYLK";
-				break;
-			case COM.CF_DIF:
-				name = "CF_DIF";
-				break;
-			case COM.CF_TIFF:
-				name = "CF_TIFF";
-				break;
-			case COM.CF_OEMTEXT:
-				name = "CF_OEMTEXT";
-				break;
-			case COM.CF_DIB:
-				name = "CF_DIB";
-				break;
-			case COM.CF_PALETTE:
-				name = "CF_PALETTE";
-				break;
-			case COM.CF_PENDATA:
-				name = "CF_PENDATA";
-				break;
-			case COM.CF_RIFF:
-				name = "CF_RIFF";
-				break;
-			case COM.CF_WAVE:
-				name = "CF_WAVE";
-				break;
-			case COM.CF_UNICODETEXT:
-				name = "CF_UNICODETEXT";
-				break;
-			case COM.CF_ENHMETAFILE:
-				name = "CF_ENHMETAFILE";
-				break;
-			case COM.CF_LOCALE:
-				name = "CF_LOCALE";
-				break;
-			case COM.CF_MAX:
-				name = "CF_MAX";
-				break;
-		}
-		
-	}
-	return name;
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet84.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet84.java
deleted file mode 100644
index 01ff113..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet84.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Drag and Drop example snippet: define a default operation (in this example, Copy)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.dnd.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet84 {
-	
-public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setLayout(new FillLayout());
-	
-	final Label label = new Label(shell, SWT.BORDER);
-	label.setText("Drag Source");
-	DragSource source = new DragSource(label, DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK);
-	source.setTransfer(new Transfer[] {TextTransfer.getInstance()});
-	source.addDragListener(new DragSourceAdapter() {
-		public void dragSetData(DragSourceEvent event) {
-			event.data = "Text Transferred";
-		}
-		public void dragFinished(DragSourceEvent event) {
-			if (event.doit) {
-				String operation = null;
-				switch (event.detail) {
-				case DND.DROP_MOVE:
-					operation = "moved"; break;
-				case DND.DROP_COPY:
-					operation = "copied"; break;
-				case DND.DROP_LINK:
-					operation = "linked"; break;
-				case DND.DROP_NONE:
-					operation = "disallowed"; break;
-				default:
-					operation = "unknown"; break;
-				}
-				label.setText("Drag Source (data "+operation+")");
-			} else {
-				label.setText("Drag Source (drag cancelled)");
-			}
-		}
-	});
-
-	final Text text = new Text(shell, SWT.BORDER | SWT.MULTI);
-	text.setText("Drop Target");
-	DropTarget target = new DropTarget(text, DND.DROP_DEFAULT | DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK);
-	target.setTransfer(new Transfer[] {TextTransfer.getInstance()});
-	target.addDropListener(new DropTargetAdapter() {
-		public void dragEnter(DropTargetEvent event) {
-			if (event.detail == DND.DROP_DEFAULT) event.detail = DND.DROP_COPY;
-		}
-		public void dragOperationChanged(DropTargetEvent event) {
-			if (event.detail == DND.DROP_DEFAULT) event.detail = DND.DROP_COPY;
-		}
-		public void drop(DropTargetEvent event) {
-			String operation = null;
-			switch (event.detail) {
-			case DND.DROP_MOVE:
-				operation = "moved"; break;
-			case DND.DROP_COPY:
-				operation = "copied"; break;
-			case DND.DROP_LINK:
-				operation = "linked"; break;
-			case DND.DROP_NONE:
-				operation = "disallowed"; break;
-			default:
-				operation = "unknown"; break;
-			}
-			text.append("\n"+operation+(String)event.data);
-		}
-	});
-	
-	shell.setSize(400, 400);
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet85.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet85.java
deleted file mode 100644
index 22cd08d..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet85.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * PocketPC example snippet: Hello World
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet85 {
-
-public static void main(String[] args) {
-	Display display = new Display();
-
-	/* 
-	 * Create a Shell with the default style
-	 * i.e. full screen, no decoration on PocketPC.
-	 */
-	Shell shell = new Shell(display);
-
-	/* 
-	 * Set a text so that the top level Shell
-	 * also appears in the PocketPC task list
-	 */
-	shell.setText("Main");
-
-	/*
-	 * Set a menubar to follow UI guidelines
-	 * on PocketPC
-	 */
-	Menu mb = new Menu(shell, SWT.BAR);
-	shell.setMenuBar(mb);
-
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet86.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet86.java
deleted file mode 100644
index 5299249..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet86.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * PocketPC Shell example snippet: 'Ok' button
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet86 {
-
-public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display, SWT.CLOSE);
-	shell.setText("Main");
-	Menu mb = new Menu(shell, SWT.BAR);
-	shell.setMenuBar(mb);
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet87.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet87.java
deleted file mode 100644
index a400686..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet87.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * PocketPC Shell example snippet: resize automatically as SIP is on or off
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet87 {
-
-public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display, SWT.RESIZE);
-	shell.setText("Main");
-	Menu mb = new Menu(shell, SWT.BAR);
-	shell.setMenuBar(mb);
-	/* Add a button to make the resize more visual */
-	FillLayout layout = new FillLayout();
-	shell.setLayout(layout);
-	Button button = new Button(shell, SWT.PUSH);
-	button.setText("Main");
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet88.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet88.java
deleted file mode 100644
index 36c60df..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet88.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * TableEditor example snippet: edit the text of a table item (in place)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.custom.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet88 {
-	
-public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setLayout(new FillLayout());
-	final Table table = new Table(shell, SWT.FULL_SELECTION | SWT.HIDE_SELECTION);
-	TableColumn column1 = new TableColumn(table, SWT.NONE);
-	TableColumn column2 = new TableColumn(table, SWT.NONE);
-	for (int i = 0; i < 10; i++) {
-		TableItem item = new TableItem(table, SWT.NONE);
-		item.setText(new String[] {"item " + i, "edit this value"});
-	}
-	column1.pack();
-	column2.pack();
-	
-	final TableEditor editor = new TableEditor(table);
-	//The editor must have the same size as the cell and must
-	//not be any smaller than 50 pixels.
-	editor.horizontalAlignment = SWT.LEFT;
-	editor.grabHorizontal = true;
-	editor.minimumWidth = 50;
-	// editing the second column
-	final int EDITABLECOLUMN = 1;
-	
-	table.addSelectionListener(new SelectionAdapter() {
-		public void widgetSelected(SelectionEvent e) {
-			// Clean up any previous editor control
-			Control oldEditor = editor.getEditor();
-			if (oldEditor != null) oldEditor.dispose();
-	
-			// Identify the selected row
-			TableItem item = (TableItem)e.item;
-			if (item == null) return;
-	
-			// The control that will be the editor must be a child of the Table
-			Text newEditor = new Text(table, SWT.NONE);
-			newEditor.setText(item.getText(EDITABLECOLUMN));
-			newEditor.addModifyListener(new ModifyListener() {
-				public void modifyText(ModifyEvent me) {
-					Text text = (Text)editor.getEditor();
-					editor.getItem().setText(EDITABLECOLUMN, text.getText());
-				}
-			});
-			newEditor.selectAll();
-			newEditor.setFocus();
-			editor.setEditor(newEditor, item, EDITABLECOLUMN);
-		}
-	});
-	shell.setSize(300, 300);
-	shell.open();
-	
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet89.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet89.java
deleted file mode 100644
index f6725bc..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet89.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Menu example snippet: create a menu with radio items
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.events.*;
-
-public class Snippet89 {
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	Menu menu = new Menu (shell, SWT.POP_UP);
-	for (int i=0; i<4; i++) {
-		MenuItem item = new MenuItem (menu, SWT.RADIO);
-		item.setText ("Item " + i);
-		item.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				MenuItem item = (MenuItem)e.widget;
-				if (item.getSelection ()) {
-					System.out.println (item + " selected");
-				} else {
-					System.out.println (item + " unselected");
-				}
-			}
-		});
-	}
-	shell.setMenu (menu);
-	shell.setSize (300, 300);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet9.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet9.java
deleted file mode 100644
index 3e6ae73..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet9.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Composite example snippet: scroll a child control automatically
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet9 {
-	
-public static void main (String [] args) {
-	Display display = new Display ();
-	final Shell shell = new Shell (display, SWT.SHELL_TRIM | SWT.H_SCROLL | SWT.V_SCROLL);
-	final Composite composite = new Composite (shell, SWT.BORDER);
-	composite.setSize (200, 400);
-	final ScrollBar hBar = shell.getHorizontalBar ();
-	hBar.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event e) {
-			Point location = composite.getLocation ();
-			location.x = -hBar.getSelection ();
-			composite.setLocation (location);
-		}
-	});
-	final ScrollBar vBar = shell.getVerticalBar ();
-	vBar.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event e) {
-			Point location = composite.getLocation ();
-			location.y = -vBar.getSelection ();
-			composite.setLocation (location);
-		}
-	});
-	shell.addListener (SWT.Resize,  new Listener () {
-		public void handleEvent (Event e) {
-			Point size = composite.getSize ();
-			Rectangle rect = shell.getClientArea ();
-			hBar.setMaximum (size.x);
-			vBar.setMaximum (size.y);
-			hBar.setThumb (Math.min (size.x, rect.width));
-			vBar.setThumb (Math.min (size.y, rect.height));
-			int hPage = size.x - rect.width;
-			int vPage = size.y - rect.height;
-			int hSelection = hBar.getSelection ();
-			int vSelection = vBar.getSelection ();
-			Point location = composite.getLocation ();
-			if (hSelection >= hPage) {
-				if (hPage <= 0) hSelection = 0;
-				location.x = -hSelection;
-			}
-			if (vSelection >= vPage) {
-				if (vPage <= 0) vSelection = 0;
-				location.y = -vSelection;
-			}
-			composite.setLocation (location);
-		}
-	});
-	shell.open ();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet90.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet90.java
deleted file mode 100644
index 7bf13cd..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet90.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Tree example snippet: detect mouse down in a tree item
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet90 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	final Tree tree = new Tree (shell, SWT.BORDER | SWT.MULTI);
-	for (int i=0; i<12; i++) {
-		TreeItem treeItem = new TreeItem (tree, SWT.NONE);
-		treeItem.setText ("Item " + i);
-	}
-	tree.addListener (SWT.MouseDown, new Listener () {
-		public void handleEvent (Event event) {
-			Point point = new Point (event.x, event.y);
-			TreeItem item = tree.getItem (point);
-			if (item != null) {
-				System.out.println ("Mouse down: " + item);
-			}
-		}
-	});
-	tree.setSize (200, 200);
-	shell.setSize (300, 300);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet91.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet91.java
deleted file mode 100644
index cff9535..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet91.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Drag and Drop example snippet: drag leaf items in a tree
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.dnd.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet91 {
-
-public static void main (String [] args) {
-	
-	final Display display = new Display ();
-	final Shell shell = new Shell (display);
-	shell.setLayout(new FillLayout());
-	final Tree tree = new Tree(shell, SWT.BORDER);
-	for (int i = 0; i < 3; i++) {
-		TreeItem item = new TreeItem(tree, SWT.NONE);
-		item.setText("item "+i);
-		for (int j = 0; j < 3; j++) {
-			TreeItem subItem = new TreeItem(item, SWT.NONE);
-			subItem.setText("item "+i+" "+j);
-			for (int k = 0; k < 3; k++) {
-				TreeItem subsubItem = new TreeItem(subItem, SWT.NONE);
-				subsubItem.setText("item "+i+" "+j+" "+k);
-			}
-		}
-	}
-	
-	Transfer[] types = new Transfer[] {TextTransfer.getInstance()};
-	int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;
-	
-	final DragSource source = new DragSource (tree, operations);
-	source.setTransfer(types);
-	final TreeItem[] dragSourceItem = new TreeItem[1];
-	source.addDragListener (new DragSourceListener () {
-		public void dragStart(DragSourceEvent event) {
-			TreeItem[] selection = tree.getSelection();
-			if (selection.length > 0 && selection[0].getItemCount() == 0) {
-				event.doit = true;
-				dragSourceItem[0] = selection[0];
-			} else {
-				event.doit = false;
-			}
-		};
-		public void dragSetData (DragSourceEvent event) {
-			event.data = dragSourceItem[0].getText();
-		}
-		public void dragFinished(DragSourceEvent event) {
-			if (event.detail == DND.DROP_MOVE)
-				dragSourceItem[0].dispose();
-				dragSourceItem[0] = null;
-		}
-	});
-
-	DropTarget target = new DropTarget(tree, operations);
-	target.setTransfer(types);
-	target.addDropListener (new DropTargetAdapter() {
-		public void dragOver(DropTargetEvent event) {
-			event.feedback = DND.FEEDBACK_EXPAND | DND.FEEDBACK_SCROLL;
-			if (event.item != null) {
-				TreeItem item = (TreeItem)event.item;
-				Point pt = display.map(null, tree, event.x, event.y);
-				Rectangle bounds = item.getBounds();
-				if (pt.y < bounds.y + bounds.height/3) {
-					event.feedback |= DND.FEEDBACK_INSERT_BEFORE;
-				} else if (pt.y > bounds.y + 2*bounds.height/3) {
-					event.feedback |= DND.FEEDBACK_INSERT_AFTER;
-				} else {
-					event.feedback |= DND.FEEDBACK_SELECT;
-				}
-			}
-		}
-		public void drop(DropTargetEvent event) {
-			if (event.data == null) {
-				event.detail = DND.DROP_NONE;
-				return;
-			}
-			String text = (String)event.data;
-			if (event.item == null) {
-				TreeItem item = new TreeItem(tree, SWT.NONE);
-				item.setText(text);
-			} else {
-				TreeItem item = (TreeItem)event.item;
-				Point pt = display.map(null, tree, event.x, event.y);
-				Rectangle bounds = item.getBounds();
-				TreeItem parent = item.getParentItem();
-				if (parent != null) {
-					TreeItem[] items = parent.getItems();
-					int index = 0;
-					for (int i = 0; i < items.length; i++) {
-						if (items[i] == item) {
-							index = i;
-							break;
-						}
-					}
-					if (pt.y < bounds.y + bounds.height/3) {
-						TreeItem newItem = new TreeItem(parent, SWT.NONE, index);
-						newItem.setText(text);
-					} else if (pt.y > bounds.y + 2*bounds.height/3) {
-						TreeItem newItem = new TreeItem(parent, SWT.NONE, index+1);
-						newItem.setText(text);
-					} else {
-						TreeItem newItem = new TreeItem(item, SWT.NONE);
-						newItem.setText(text);
-					}
-					
-				} else {
-					TreeItem[] items = tree.getItems();
-					int index = 0;
-					for (int i = 0; i < items.length; i++) {
-						if (items[i] == item) {
-							index = i;
-							break;
-						}
-					}
-					if (pt.y < bounds.y + bounds.height/3) {
-						TreeItem newItem = new TreeItem(tree, SWT.NONE, index);
-						newItem.setText(text);
-					} else if (pt.y > bounds.y + 2*bounds.height/3) {
-						TreeItem newItem = new TreeItem(tree, SWT.NONE, index+1);
-						newItem.setText(text);
-					} else {
-						TreeItem newItem = new TreeItem(item, SWT.NONE);
-						newItem.setText(text);
-					}
-				}
-				
-				
-			}
-		}
-	});
-
-	shell.setSize (400, 400);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet92.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet92.java
deleted file mode 100644
index 0e2f532..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet92.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Cursor example snippet: create a cursor from a source and a mask
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet92 {
-
-public static void main (String [] args) {
-	Display display = new Display();
-	Color white = display.getSystemColor (SWT.COLOR_WHITE);
-	Color black = display.getSystemColor (SWT.COLOR_BLACK);
-	
-	//Create a source ImageData of depth 1 (monochrome)
-	PaletteData palette = new PaletteData (new RGB [] {white.getRGB(), black.getRGB(),});
-	ImageData sourceData = new ImageData (20, 20, 1, palette);
-	for (int i = 0; i < 10; i ++) {
-		for (int j = 0; j < 20; j++) {
-			sourceData.setPixel(i, j, 1);
-		}
-	}
-	
-	//Create a mask ImageData of depth 1 (monochrome)
-	palette = new PaletteData (new RGB [] {white.getRGB(), black.getRGB(),});
-	ImageData maskData = new ImageData (20, 20, 1, palette);
-	for (int i = 0; i < 20; i ++) {
-		for (int j = 0; j < 10; j++) {
-			maskData.setPixel(i, j, 1);
-		}
-	}
-	//Create cursor
-	Cursor cursor = new Cursor(display, sourceData, maskData, 10, 10);
-	
-	Shell shell = new Shell(display);
-	final Image source = new Image (display,sourceData);
-	final Image mask = new Image (display, maskData);
-	//Draw source and mask just to show what they look like
-	shell.addPaintListener(new PaintListener() {
-		public void paintControl(PaintEvent e) {
-			GC gc = e.gc;
-			gc.drawString("source: ", 10, 10);
-			gc.drawImage(source, 0, 0, 20, 20, 50, 10, 20, 20);
-			gc.drawString("mask: ",10, 40);
-			gc.drawImage(mask, 0, 0, 20, 20, 50, 40, 20, 20);
-		}
-	});
-	shell.setSize(150, 150);
-	shell.open();
-	shell.setCursor(cursor);
-	
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	cursor.dispose();
-	source.dispose();
-	mask.dispose();
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet93.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet93.java
deleted file mode 100644
index 255729d..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet93.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * GC example snippet: measure a string
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-
-public class Snippet93 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	Shell shell = new Shell (display);
-	shell.setLayout (new RowLayout ());
-	Label label = new Label (shell, SWT.NONE);
-	GC gc = new GC (label);
-	Point size = gc.textExtent ("Hello");
-	gc.dispose ();
-	label.setText ("Hello -> " + size);
-	shell.pack ();
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet94.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet94.java
deleted file mode 100644
index 5aeb0c6..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet94.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * Clipboard example snippet: copy and paste data with the clipboard
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.dnd.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet94 {
-
-public static void main( String[] args) {
-	Display display = new Display ();
-	final Clipboard cb = new Clipboard(display);
-	final Shell shell = new Shell (display);
-	shell.setLayout(new FormLayout());
-	final Text text = new Text(shell, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL);
-	
-	Button copy = new Button(shell, SWT.PUSH);
-	copy.setText("Copy");
-	copy.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event e) {
-			String textData = text.getSelectionText();
-			TextTransfer textTransfer = TextTransfer.getInstance();
-			cb.setContents(new Object[]{textData}, new Transfer[]{textTransfer});
-		}
-	});
-	
-	Button paste = new Button(shell, SWT.PUSH);
-	paste.setText("Paste");
-	paste.addListener (SWT.Selection, new Listener () {
-		public void handleEvent (Event e) {
-			TextTransfer transfer = TextTransfer.getInstance();
-			String data = (String)cb.getContents(transfer);
-			if (data != null) {
-				text.insert(data);
-			}
-		}
-	});
-	
-	FormData data = new FormData();
-	data.right = new FormAttachment(100, -5);
-	data.top = new FormAttachment(0, 5);
-	copy.setLayoutData(data);
-	
-	data = new FormData();
-	data.right = new FormAttachment(100, -5);
-	data.top = new FormAttachment(copy, 5);
-	paste.setLayoutData(data);
-	
-	data = new FormData();
-	data.left = new FormAttachment(0, 5);
-	data.top = new FormAttachment(0, 5);
-	data.right = new FormAttachment(copy, -5);
-	data.bottom = new FormAttachment(100, -5);
-	text.setLayoutData(data);
-	
-	shell.setSize(200, 200);
-	shell.open();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	cb.dispose();
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet95.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet95.java
deleted file mode 100644
index 2ce755a..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet95.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * GC example snippet: capture a widget image with a GC
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet95 {
-
-public static void main(String[] args) {
-	final Display display = new Display();
-	final Shell shell = new Shell(display);
-	shell.setText("Widget");
-	shell.setBounds(10, 10, 200, 200);
-	
-	final Table table = new Table(shell, SWT.MULTI);
-	table.setLinesVisible(true);
-	table.setBounds(10, 10, 100, 100);
-	for (int i = 0; i < 9; i++) {
-		new TableItem(table, SWT.NONE).setText("item" + i);
-	}
-	
-	Button button = new Button(shell, SWT.PUSH);
-	button.setText("Capture");
-	button.setBounds(10, 140, 50, 20);
-	button.addListener(SWT.Selection, new Listener() {
-		public void handleEvent(Event event) {
-			Point tableSize = table.getSize();
-			GC gc = new GC(table);
-			final Image image =
-				new Image(display, tableSize.x, tableSize.y);
-			gc.copyArea(image, 0, 0);
-			gc.dispose();
-			
-			Shell popup = new Shell(shell);
-			popup.setText("Image");
-			popup.setBounds(50, 50, 200, 200);
-			popup.addListener(SWT.Close, new Listener() {
-				public void handleEvent(Event e) {
-					image.dispose();
-				}
-			});
-			
-			Canvas canvas = new Canvas(popup, SWT.NONE);
-			canvas.setBounds(10, 10, 150, 150);
-			canvas.addPaintListener(new PaintListener() {
-				public void paintControl(PaintEvent e) {
-					e.gc.drawImage(image, 0, 0);
-				}
-			});
-			popup.open();
-		}
-	});
-	
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch()) display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet96.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet96.java
deleted file mode 100644
index cfe2485..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet96.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
-
-/*
- * TableCursor example snippet: navigate a table cells with arrow keys. 
- * Edit when user hits Return key.  Exit edit mode by hitting Escape (cancels edit)
- * or Return (applies edit to table).
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.custom.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet96 {
-
-public static void main(String[] args) {
-	Display display = new Display();
-	Shell shell = new Shell(display);
-	shell.setLayout(new GridLayout());
-
-	// create a a table with 3 columns and fill with data
-	final Table table = new Table(shell, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);
-	table.setLayoutData(new GridData(GridData.FILL_BOTH));
-	TableColumn column1 = new TableColumn(table, SWT.NONE);
-	TableColumn column2 = new TableColumn(table, SWT.NONE);
-	TableColumn column3 = new TableColumn(table, SWT.NONE);
-	for (int i = 0; i < 100; i++) {
-		TableItem item = new TableItem(table, SWT.NONE);
-		item.setText(new String[] {"cell " + i + " 0", 	"cell " + i + " 1", "cell " + i + " 2" });
-	}
-	column1.pack();
-	column2.pack();
-	column3.pack();
-
-	// create a TableCursor to navigate around the table
-	final TableCursor cursor = new TableCursor(table, SWT.NONE);
-	// create an editor to edit the cell when the user hits "ENTER" 
-	// while over a cell in the table
-	final ControlEditor editor = new ControlEditor(cursor);
-	editor.grabHorizontal = true;
-	editor.grabVertical = true;
-
-	cursor.addSelectionListener(new SelectionAdapter() {
-		// when the TableEditor is over a cell, select the corresponding row in 
-		// the table
-		public void widgetSelected(SelectionEvent e) {
-			table.setSelection(new TableItem[] { cursor.getRow()});
-		}
-		// when the user hits "ENTER" in the TableCursor, pop up a text editor so that 
-		// they can change the text of the cell
-		public void widgetDefaultSelected(SelectionEvent e) {
-			final Text text = new Text(cursor, SWT.NONE);
-			TableItem row = cursor.getRow();
-			int column = cursor.getColumn();
-			text.setText(row.getText(column));
-			text.addKeyListener(new KeyAdapter() {
-				public void keyPressed(KeyEvent e) {
-					// close the text editor and copy the data over 
-					// when the user hits "ENTER"
-					if (e.character == SWT.CR) {
-						TableItem row = cursor.getRow();
-						int column = cursor.getColumn();
-						row.setText(column, text.getText());
-						text.dispose();
-					}
-					// close the text editor when the user hits "ESC"
-					if (e.character == SWT.ESC) {
-						text.dispose();
-					}
-				}
-			});
-			// close the text editor when the user tabs away
-			text.addFocusListener(new FocusAdapter() {
-				public void focusLost(FocusEvent e) {
-					text.dispose();
-				}
-			});
-			editor.setEditor(text);
-			text.setFocus();
-		}
-	});
-	// Hide the TableCursor when the user hits the "CTRL" or "SHIFT" key.
-	// This alows the user to select multiple items in the table.
-	cursor.addKeyListener(new KeyAdapter() {
-		public void keyPressed(KeyEvent e) {
-			if (e.keyCode == SWT.CTRL
-				|| e.keyCode == SWT.SHIFT
-				|| (e.stateMask & SWT.CONTROL) != 0
-				|| (e.stateMask & SWT.SHIFT) != 0) {
-				cursor.setVisible(false);
-			}
-		}
-	});
-	// When the user double clicks in the TableCursor, pop up a text editor so that 
-	// they can change the text of the cell
-	cursor.addMouseListener(new MouseAdapter() {
-		public void mouseDown(MouseEvent e) {
-			final Text text = new Text(cursor, SWT.NONE);
-			TableItem row = cursor.getRow();
-			int column = cursor.getColumn();
-			text.setText(row.getText(column));
-			text.addKeyListener(new KeyAdapter() {
-				public void keyPressed(KeyEvent e) {
-					// close the text editor and copy the data over 
-					// when the user hits "ENTER"
-					if (e.character == SWT.CR) {
-						TableItem row = cursor.getRow();
-						int column = cursor.getColumn();
-						row.setText(column, text.getText());
-						text.dispose();
-					}
-					// close the text editor when the user hits "ESC"
-					if (e.character == SWT.ESC) {
-						text.dispose();
-					}
-				}
-			});
-			// close the text editor when the user clicks away
-			text.addFocusListener(new FocusAdapter() {
-				public void focusLost(FocusEvent e) {
-					text.dispose();
-				}
-			});
-			editor.setEditor(text);
-			text.setFocus();
-		}
-	});
-	
-	// Show the TableCursor when the user releases the "SHIFT" or "CTRL" key.
-	// This signals the end of the multiple selection task.
-	table.addKeyListener(new KeyAdapter() {
-		public void keyReleased(KeyEvent e) {
-			if (e.keyCode == SWT.CONTROL && (e.stateMask & SWT.SHIFT) != 0)
-				return;
-			if (e.keyCode == SWT.SHIFT && (e.stateMask & SWT.CONTROL) != 0)
-				return;
-			if (e.keyCode != SWT.CONTROL
-				&& (e.stateMask & SWT.CONTROL) != 0)
-				return;
-			if (e.keyCode != SWT.SHIFT && (e.stateMask & SWT.SHIFT) != 0)
-				return;
-
-			TableItem[] selection = table.getSelection();
-			TableItem row = (selection.length == 0) ? table.getItem(table.getTopIndex()) : selection[0];
-			table.showItem(row);
-			cursor.setSelection(row, 0);
-			cursor.setVisible(true);
-			cursor.setFocus();
-		}
-	});
-
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet97.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet97.java
deleted file mode 100644
index 1d0174c..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet97.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Menu example snippet: fill a menu dynamically (when menu shown)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet97 {
-
-public static void main (String [] args) {
-	final Display display = new Display ();
-	Shell shell = new Shell (display);
-	final Tree tree = new Tree (shell, SWT.BORDER | SWT.MULTI);
-	final Menu menu = new Menu (shell, SWT.POP_UP);
-	tree.setMenu (menu);
-	for (int i=0; i<12; i++) {
-		TreeItem item = new TreeItem (tree, SWT.NONE);
-		item.setText ("Item " + i);
-	}
-	menu.addListener (SWT.Show, new Listener () {
-		public void handleEvent (Event event) {
-			MenuItem [] menuItems = menu.getItems ();
-			for (int i=0; i<menuItems.length; i++) {
-				menuItems [i].dispose ();
-			}
-			TreeItem [] treeItems = tree.getSelection ();
-			for (int i=0; i<treeItems.length; i++) {
-				MenuItem menuItem = new MenuItem (menu, SWT.PUSH);
-				menuItem.setText (treeItems [i].getText ());
-			}
-		}
-	});
-	tree.setSize (200, 200);
-	shell.setSize (300, 300);
-	shell.open ();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-} 
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet98.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet98.java
deleted file mode 100644
index f779186..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet98.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Composite example snippet: create and dispose children of a composite
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet98 {
-
-static int pageNum = 0;
-static Composite pageComposite;
-
-public static void main(String args[]) {
-	Display display = new Display();
-	final Shell shell = new Shell(display);
-	shell.setLayout(new GridLayout());
-	Button button = new Button(shell, SWT.PUSH);
-	button.setText("Push");
-	pageComposite = new Composite(shell, SWT.NONE);
-	pageComposite.setLayout(new GridLayout());
-	pageComposite.setLayoutData(new GridData());
-
-	button.addListener(SWT.Selection, new Listener() {
-		public void handleEvent(Event event) {
-			if ((pageComposite != null) && (!pageComposite.isDisposed())) {
-				pageComposite.dispose();
-			}
-			pageComposite = new Composite(shell, SWT.NONE);
-			pageComposite.setLayout(new GridLayout());
-			pageComposite.setLayoutData(new GridData());
-			if (pageNum++ % 2 == 0) {
-				Table table = new Table(pageComposite, SWT.BORDER);
-				table.setLayoutData(new GridData());
-				for (int i = 0; i < 5; i++) {
-					new TableItem(table, SWT.NONE).setText("table item " + i);
-				}
-			} else {
-				new Button(pageComposite, SWT.RADIO).setText("radio");
-			}
-			shell.layout(true);
-		}
-	});
-
-	shell.open();
-	while (!shell.isDisposed()) {
-		if (!display.readAndDispatch())
-			display.sleep();
-	}
-	display.dispose();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet99.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet99.java
deleted file mode 100644
index 86a3acc..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet99.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.snippets;
- 
-/*
- * Shell example snippet: prevent a shell from closing (prompt the user)
- *
- * For a list of all SWT example snippets see
- * http://www.eclipse.org/swt/snippets/
- */
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-
-public class Snippet99 {
-
-public static void main (String [] args) {
-	Display display = new Display ();
-	final Shell shell = new Shell (display);
-	shell.addListener (SWT.Close, new Listener () {
-		public void handleEvent (Event event) {
-			int style = SWT.APPLICATION_MODAL | SWT.YES | SWT.NO;
-			MessageBox messageBox = new MessageBox (shell, style);
-			messageBox.setText ("Information");
-			messageBox.setMessage ("Close the shell?");
-			event.doit = messageBox.open () == SWT.YES;
-		}
-	});
-	shell.pack ();
-	shell.open();
-	while (!shell.isDisposed ()) {
-		if (!display.readAndDispatch ()) display.sleep ();
-	}
-	display.dispose ();
-}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/SnippetLauncher.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/SnippetLauncher.java
deleted file mode 100644
index bbb6439..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/SnippetLauncher.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package org.eclipse.swt.snippets;
-
-/*
- * Simple "hackable" code that runs all of the SWT Snippets,
- * typically for testing. One example of a useful "hack" is
- * to add the line:
- *    if (source.indexOf("Table") == -1 && source.indexOf("Tree") == -1) continue;
- * after the line:
- *    String source = String.valueOf(buffer);
- * in order to run all of the Table and Tree Snippets.
- */
-import java.lang.reflect.*;
-import java.io.*;
-import org.eclipse.swt.SWT;
-
-public class SnippetLauncher {
-
-	public static void main (String [] args) {
-		File sourceDir = new File("src/org/eclipse/swt/snippets");
-		boolean hasSource = sourceDir.exists();
-		int count = 300;
-		if (hasSource) {
-			File [] files = sourceDir.listFiles();
-			if (files.length > 0) count = files.length;
-		}
-		for (int i = 1; i < count; i++) {
-			if (i == 136 || i == 151 || i == 180 || i == 219) continue;
-			String className = "Snippet" + i;
-			Class clazz = null;
-			try {
-				clazz = Class.forName("org.eclipse.swt.snippets." + className);
-			} catch (ClassNotFoundException e) {}
-			if (clazz != null) {
-				System.out.println("\n" + clazz.getName());
-				if (hasSource) {
-					File sourceFile = new File(sourceDir, className + ".java");
-					try {
-						FileReader reader = new FileReader(sourceFile);
-						char [] buffer = new char [(int)sourceFile.length()];
-						reader.read(buffer);
-						String source = String.valueOf(buffer);
-						int start = source.indexOf("package");
-						start = source.indexOf("/*", start);
-						int end = source.indexOf("* For a list of all");
-						System.out.println(source.substring(start, end-3));
-						boolean skip = false;
-						String platform = SWT.getPlatform();
-						if (source.indexOf("PocketPC") != -1) {
-							platform = "PocketPC";
-							skip = true;
-						} else if (source.indexOf("OpenGL") != -1) {
-							platform = "OpenGL";
-							skip = true;
-						} else {
-							String [] platforms = {"win32", "motif", "gtk", "photon", "carbon"};
-							for (int p = 0; p < platforms.length; p++) {
-								if (!platforms[p].equals(platform) && source.indexOf("." + platforms[p]) != -1) {
-									platform = platforms[p];
-									skip = true;
-									break;
-								}
-							}
-						}
-						if (skip) {
-							System.out.println("...skipping " + platform + " example...");
-							continue;
-						}
-					} catch (Exception e) {}
-				}
-				Method method = null;
-				String [] param = new String [0];
-				try {
-					method = clazz.getMethod("main", new Class[] {param.getClass()});
-				} catch (NoSuchMethodException e) {
-					System.out.println("   Did not find main(String [])");
-				}
-				if (method != null) {
-					try {
-						method.invoke(clazz, new Object [] {param});
-					} catch (IllegalAccessException e) {
-						System.out.println("   Failed to launch (illegal access)");
-					} catch (IllegalArgumentException e) {
-						System.out.println("   Failed to launch (illegal argument to main)");
-					} catch (InvocationTargetException e) {
-						System.out.println("   Exception in Snippet: " + e.getTargetException());
-					}
-				}
-			}
-		}
-	}
-}
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/eclipse.png b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/eclipse.png
deleted file mode 100644
index 7397524..0000000
--- a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/eclipse.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.swt.tests/.settings/org.eclipse.jdt.core.prefs b/tests/org.eclipse.swt.tests/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..9998782
--- /dev/null
+++ b/tests/org.eclipse.swt.tests/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Mon Dec 11 15:12:19 EST 2006
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.3
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllCarbonTests.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllCarbonTests.java
index 27c0d0a..d22ead4 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllCarbonTests.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllCarbonTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2007 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
@@ -38,7 +38,7 @@
 	"test_getSelectionIndex(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_Combo)",
 	"test_paste(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_Combo)",
 	"test_setSelectionLorg_eclipse_swt_graphics_Point(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_Combo)",
-	"test_setSelectionI(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_TabFolder)",
+	"test_setSelectionEmpty(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_TabFolder)",
 	"Browser4(org.eclipse.swt.tests.junit.browser.Test_BrowserSuite)",
 	"Browser5(org.eclipse.swt.tests.junit.browser.Test_BrowserSuite)",
 	//
@@ -50,6 +50,11 @@
 	"test_cut(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_custom_StyledText)",
 	"test_invokeActionI(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_custom_StyledText)",
 	"test_paste(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_custom_StyledText)",
+	
+	// The following tests (cut/copy/paste) fail during the build process. They do not fail locally.
+	"test_copy(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_custom_CCombo)",
+	"test_cut(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_custom_CCombo)",
+	"test_paste(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_custom_CCombo)",
 };
 
 static boolean isExcluded(String name) {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllCocoaTests.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllCocoaTests.java
new file mode 100644
index 0000000..6712410
--- /dev/null
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllCocoaTests.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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.tests.junit;
+
+
+import junit.framework.*;
+import junit.textui.*;
+
+/**
+ * Suite for running all SWT test cases.
+ */
+public class AllCocoaTests extends TestSuite {
+
+/**
+ * Tests not run because they consistently fail
+ */
+static String[] excludeTests = {
+	"test_getBoundsI(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_TableItem)",
+	"test_getBoundsI(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_TreeItem)",
+	"test_getBounds(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_TreeItem)",
+	"test_getTopPixel(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_Text)",
+	"test_postLorg_eclipse_swt_widgets_Event(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_Display)",
+	
+	//tests pass locally, but fail on the releng machine
+	"test_copy(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_Text)",
+	"test_cut(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_Text)",
+	"test_paste(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_Text)",
+	"test_selectAll(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_Text)",
+	"test_copy(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_Combo)",
+	"test_cut(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_Combo)",
+	"test_paste(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_Combo)",
+	"test_copy(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_custom_CCombo)",
+	"test_cut(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_custom_CCombo)",
+	"test_paste(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_custom_CCombo)",
+	"test_copy(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_custom_StyledText)",
+	"test_cut(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_custom_StyledText)",
+	"test_invokeActionI(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_custom_StyledText)",
+	"test_paste(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_custom_StyledText)",
+};
+
+static boolean isExcluded(String name) {
+	for (int i = 0; i < excludeTests.length; i++) {
+		if (name.equals(excludeTests[i])) return true;
+	}
+	return false;
+}
+
+public static void main(String[] args) {
+	SwtTestCase.unimplementedMethods = 0;
+	TestRunner.run(suite());
+	if (SwtTestCase.unimplementedMethods > 0) {
+		System.out.println("\nCalls to warnUnimpl: " + SwtTestCase.unimplementedMethods);
+		System.out.println("\nExcluded Tests: " + excludeTests.length);
+	}
+}
+
+public static Test suite() {
+	TestSuite fullSuite = (TestSuite)AllTests.suite();
+	TestSuite filteredSuite = new TestSuite();
+	for (int i = 0; i < fullSuite.testCount(); i++) {
+		Test candidateTest = fullSuite.testAt(i);
+		if (candidateTest instanceof TestSuite) {
+			TestSuite suite = (TestSuite)candidateTest;
+			for (int j = 0; j < suite.testCount(); j++) {
+				Test test = suite.testAt(j);
+				if (!isExcluded(test.toString())) filteredSuite.addTest(test);				
+			}
+		}
+	}
+	return filteredSuite;
+}
+}
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllGtkTests.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllGtkTests.java
index a1c03fa..8b7f79b 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllGtkTests.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllGtkTests.java
@@ -40,7 +40,7 @@
 	"test_setTextLimitI(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_Text)",
 	"test_setTopIndexI(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_Text)",
 	"test_getHeaderHeight(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_Tree)",
-	"test_setSelectionI(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_TabFolder)",
+	"test_setSelectionEmpty(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_TabFolder)",
 	"test_getSelectionIndex(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_Combo)",
 	"test_getRowCount(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_ToolBar)",
 	"test_getHeaderHeight(org.eclipse.swt.tests.junit.Test_org_eclipse_swt_widgets_Table)",
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllMotifTests.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllMotifTests.java
index 9ca1947..1ffba0c 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllMotifTests.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllMotifTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllTests.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllTests.java
index a6528de..57452f3 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllTests.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -113,6 +113,7 @@
 	addTest(Test_org_eclipse_swt_widgets_ProgressBar.suite());
 	addTest(Test_org_eclipse_swt_widgets_Composite.suite());
 	addTest(Test_org_eclipse_swt_widgets_Link.suite());
+	addTest(Test_org_eclipse_swt_widgets_DateTime.suite());
 	//addTest(Test_org_eclipse_swt_widgets_CoolBar.suite());
 
 	addTest(Test_org_eclipse_swt_widgets_ColorDialog.suite());
@@ -227,6 +228,5 @@
 	addTest(Test_org_eclipse_swt_browser_VisibilityWindowListener.suite());
 	addTest(org.eclipse.swt.tests.junit.browser.Test_BrowserSuite.suite());
 
-
 }
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllWidgetTests.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllWidgetTests.java
index 42f089b..eadd889 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllWidgetTests.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllWidgetTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -59,8 +59,9 @@
 	suite.addTest(Test_org_eclipse_swt_widgets_Slider.suite());
 	suite.addTest(Test_org_eclipse_swt_widgets_ProgressBar.suite());
 	suite.addTest(Test_org_eclipse_swt_widgets_Composite.suite());
-	//suite.addTest(Test_org_eclipse_swt_widgets_CoolBar.suite());
 	suite.addTest(Test_org_eclipse_swt_widgets_Link.suite());
+	suite.addTest(Test_org_eclipse_swt_widgets_DateTime.suite());
+	//suite.addTest(Test_org_eclipse_swt_widgets_CoolBar.suite());
 
 	suite.addTest(Test_org_eclipse_swt_widgets_ColorDialog.suite());
 	suite.addTest(Test_org_eclipse_swt_widgets_FileDialog.suite());
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/ConsistencyUtility.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/ConsistencyUtility.java
index ab31f2f..bd18ebc 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/ConsistencyUtility.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/ConsistencyUtility.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/SwtJunit.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/SwtJunit.java
index 0ad4852..1b59e64 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/SwtJunit.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/SwtJunit.java
@@ -21,6 +21,7 @@
 	public static final String testFontName;
 	public final static boolean isWindows = SWT.getPlatform().startsWith("win32");
 	public final static boolean isCarbon = SWT.getPlatform().startsWith("carbon");
+	public final static boolean isCocoa = SWT.getPlatform().startsWith("cocoa");
 	public final static boolean isMotif = SWT.getPlatform().equals("motif");
 	public final static boolean isGTK = SWT.getPlatform().equals("gtk");
 	public final static boolean isPhoton = SWT.getPlatform().equals("photon");
@@ -28,6 +29,7 @@
 	public final static boolean isAIX = System.getProperty("os.name").equals("AIX");
 	public final static boolean isSolaris = System.getProperty("os.name").equals("Solaris") || System.getProperty("os.name").equals("SunOS");
 	public final static boolean isHPUX = System.getProperty("os.name").equals("HP-UX");
+	public final static boolean isWPF = SWT.getPlatform().startsWith("wpf");
 	
 	static {
 		if (isMotif) {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/SwtTestCase.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/SwtTestCase.java
index 496ae7c..68cbb30 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/SwtTestCase.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/SwtTestCase.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2007 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
@@ -12,7 +12,9 @@
 
 
 import java.io.*;
+
 import junit.framework.*;
+
 import org.eclipse.swt.*;
 import org.eclipse.swt.internal.*;
 
@@ -62,7 +64,7 @@
 	public static String[] transparentImageFilenames = new String[] {"transparent.png"};
 	
 	// specify reparentable platforms
-	public static String[] reparentablePlatforms = new String[] {"win32", "gtk"};
+	public static String[] reparentablePlatforms = new String[] {"win32", "gtk", "carbon", "cocoa"};
 	
 public SwtTestCase(String name) {
 	super(name);
@@ -185,13 +187,6 @@
 static public void assertEquals(int expected[], int actual[]) {
     assertEquals(null, expected, actual);
 }
-// copied exactly from junit.framework.TestCase so that it can be called from here even though private
-static private void failNotEquals(String message, Object expected, Object actual) {
-	String formatted= "";
-	if (message != null)
-		formatted= message+" ";
-	fail(formatted+"expected:<"+expected+"> but was:<"+actual+">");
-}
 
 static private void failNotEquals(String message, Object[] expected, Object[] actual) {
 	String formatted= "";
@@ -235,6 +230,23 @@
 	return false;
 }
 
+protected boolean isBidi() {
+	return  SWT.getPlatform().equals("gtk") || SWT.getPlatform().equals("carbon") ||  SWT.getPlatform().equals("cocoa") || BidiUtil.isBidiPlatform();// || isMirrored;
+}
+
+protected void setUp() {
+	try {
+		super.setUp();
+	} catch (Exception e) {
+		SWTError error = new SWTError();
+		error.throwable = e;
+		throw error;
+	}
+}
+
+protected void tearDown() {
+}
+
 protected void warnUnimpl(String message) {
 	if (verbose) {
 		System.out.println(this.getClass() + ": " + message);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_SWT.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_SWT.java
index b0955b6..8e6398c 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_SWT.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_SWT.java
@@ -29,12 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	// Do nothing. Class SWT is not intended to be subclassed.
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_SWTError.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_SWTError.java
index 289da79..e36179c 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_SWTError.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_SWTError.java
@@ -30,12 +30,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	assertTrue (
 		"did not fill in code properly",
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_SWTException.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_SWTException.java
index 4b3b15d..aae2c1a 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_SWTException.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_SWTException.java
@@ -31,12 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	assertTrue (
 		"did not fill in code properly",
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_ACC.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_ACC.java
index 28ed8f4..75bd28b 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_ACC.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_ACC.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_Accessible.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_Accessible.java
index 6d6c392..f53417f 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_Accessible.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_Accessible.java
@@ -31,6 +31,7 @@
 }
 
 protected void setUp() {
+	super.setUp();
 	shell = new Shell();
 	accessible = shell.getAccessible();
 }
@@ -39,6 +40,7 @@
 	assertEquals(false, shell.isDisposed());
 	shell.dispose();
 	assertTrue(shell.isDisposed());
+	super.tearDown();
 }
 
 public void test_addAccessibleControlListenerLorg_eclipse_swt_accessibility_AccessibleControlListener() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleAdapter.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleAdapter.java
index c0898f6..2870f13 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleAdapter.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleAdapter.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleControlAdapter.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleControlAdapter.java
index a22dcad..fa54b10 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleControlAdapter.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleControlAdapter.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleControlEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleControlEvent.java
index df7d38e..c221164 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleControlEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleControlEvent.java
@@ -31,11 +31,13 @@
 }
 
 protected void setUp() {
+	super.setUp();
 	shell = new Shell();
 }
 
 protected void tearDown() {
 	shell.dispose();
+	super.tearDown();
 }
 
 public void test_ConstructorLjava_lang_Object() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleControlListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleControlListener.java
index 5128986..6e3c94b 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleControlListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleControlListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_getChildAtPointLorg_eclipse_swt_accessibility_AccessibleControlEvent() {
 	warnUnimpl("Test test_getChildAtPointLorg_eclipse_swt_accessibility_AccessibleControlEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleEvent.java
index 3564c60..c1a50aa 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleEvent.java
@@ -31,11 +31,13 @@
 }
 
 protected void setUp() {
+	super.setUp();
 	shell = new Shell();
 }
 
 protected void tearDown() {
 	shell.dispose();
+	super.tearDown();
 }
 
 public void test_ConstructorLjava_lang_Object() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleListener.java
index 4f37228..dccead8 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_getDescriptionLorg_eclipse_swt_accessibility_AccessibleEvent() {
 	warnUnimpl("Test test_getDescriptionLorg_eclipse_swt_accessibility_AccessibleEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleTextAdapter.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleTextAdapter.java
index 6bb3c0c..6f1f3eb 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleTextAdapter.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleTextAdapter.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleTextEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleTextEvent.java
index ceef003..e840339 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleTextEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleTextEvent.java
@@ -31,11 +31,13 @@
 }
 
 protected void setUp() {
+	super.setUp();
 	shell = new Shell();
 }
 
 protected void tearDown() {
 	shell.dispose();
+	super.tearDown();
 }
 
 public void test_ConstructorLjava_lang_Object() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleTextListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleTextListener.java
index f61a425..ebe7f8c 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleTextListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_accessibility_AccessibleTextListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_getCaretOffsetLorg_eclipse_swt_accessibility_AccessibleTextEvent() {
 	warnUnimpl("Test test_getCaretOffsetLorg_eclipse_swt_accessibility_AccessibleTextEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_awt_SWT_AWT.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_awt_SWT_AWT.java
index 57f2dfd..63ed75f 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_awt_SWT_AWT.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_awt_SWT_AWT.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java
index af1b3cf..e2b9690 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java
@@ -38,10 +38,6 @@
 	browser = new Browser(shell, SWT.NONE);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	shell.setText("test_ConstructorLorg_eclipse_swt_widgets_CompositeI");
 	Browser browser = new Browser(shell, SWT.NONE);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_CloseWindowListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_CloseWindowListener.java
index e5493a0..13bd5c1 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_CloseWindowListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_CloseWindowListener.java
@@ -31,12 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_closeLorg_eclipse_swt_browser_WindowEvent() {
 	Display display = Display.getCurrent();
 	Shell shell = new Shell(display);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_LocationAdapter.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_LocationAdapter.java
index 4c9573d..84f63f1 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_LocationAdapter.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_LocationAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -31,14 +31,8 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
-	LocationAdapter adapter = new LocationAdapter() {};
+	new LocationAdapter() {};
 }
 
 public void test_changedLorg_eclipse_swt_browser_LocationEvent() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_LocationListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_LocationListener.java
index 28ece11..51d96fd 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_LocationListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_LocationListener.java
@@ -31,12 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_changedLorg_eclipse_swt_browser_LocationEvent() {
 	Display display = Display.getCurrent();
 	Shell shell = new Shell(display);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_OpenWindowListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_OpenWindowListener.java
index bf7771b..0fe578d 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_OpenWindowListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_OpenWindowListener.java
@@ -31,12 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_openWindowLorg_eclipse_swt_browser_WindowEvent() {
 	Display display = Display.getCurrent();
 	Shell shell = new Shell(display);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_ProgressAdapter.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_ProgressAdapter.java
index ad8fde0..35d37f4 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_ProgressAdapter.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_ProgressAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -31,14 +31,8 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
-	ProgressAdapter adapter = new ProgressAdapter() {};
+	new ProgressAdapter() {};
 }
 
 public void test_changedLorg_eclipse_swt_browser_ProgressEvent() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_ProgressListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_ProgressListener.java
index 35b2b14..cda3ee0 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_ProgressListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_ProgressListener.java
@@ -31,12 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_changedLorg_eclipse_swt_browser_ProgressEvent() {
 	Display display = Display.getCurrent();
 	Shell shell = new Shell(display);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_StatusTextListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_StatusTextListener.java
index 4f3b3f7..60a7d00 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_StatusTextListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_StatusTextListener.java
@@ -31,12 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_changedLorg_eclipse_swt_browser_StatusTextEvent() {
 	Display display = Display.getCurrent();
 	Shell shell = new Shell(display);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_TitleListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_TitleListener.java
index 55be226..ba25204 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_TitleListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_TitleListener.java
@@ -32,12 +32,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_changedLorg_eclipse_swt_browser_TitleEvent() {
 	Display display = Display.getCurrent();
 	Shell shell = new Shell(display);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_VisibilityWindowAdapter.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_VisibilityWindowAdapter.java
index 83cd271..1ee68c6 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_VisibilityWindowAdapter.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_VisibilityWindowAdapter.java
@@ -31,12 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	new VisibilityWindowAdapter() {};
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_VisibilityWindowListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_VisibilityWindowListener.java
index ef84072..23a9c3a 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_VisibilityWindowListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_VisibilityWindowListener.java
@@ -31,12 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_hideLorg_eclipse_swt_browser_WindowEvent() {
 	Display display = Display.getCurrent();
 	Shell shell = new Shell(display);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_AnimatedProgress.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_AnimatedProgress.java
index d767c5b..cf22800 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_AnimatedProgress.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_AnimatedProgress.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_CompositeI not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_BidiSegmentEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_BidiSegmentEvent.java
index 3a6ff00..410c136 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_BidiSegmentEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_BidiSegmentEvent.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public static Test suite() {
 	TestSuite suite = new TestSuite();
 	java.util.Vector methodNames = methodNames();
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_BidiSegmentListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_BidiSegmentListener.java
index 82dc0c0..f54c450 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_BidiSegmentListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_BidiSegmentListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -20,7 +20,6 @@
 import org.eclipse.swt.custom.StyleRange;
 import org.eclipse.swt.custom.StyledText;
 import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.internal.BidiUtil;
 
 /**
  * Automated Test Suite for class org.eclipse.swt.custom.BidiSegmentListener
@@ -39,10 +38,6 @@
 public Test_org_eclipse_swt_custom_BidiSegmentListener(String name) {
 	super(name);
 }
-
-private boolean isBidi() {
-	return BidiUtil.isBidiPlatform();
-}
 protected void setUp() {
 	shell = new Shell();
 	text = new StyledText(shell, SWT.NULL);
@@ -58,6 +53,7 @@
 }
 protected void tearDown() {
 	shell.dispose();
+	super.tearDown();
 }
 private void testListener(final String message, final int[] segments, boolean exceptionExpected) {
 	boolean exceptionThrown = false;
@@ -114,7 +110,7 @@
 		for (int i=0; i<boldRanges.length; i+=2) {
 			StyleRange styleRange = new StyleRange(boldRanges[i], boldRanges[i+1], null, null, SWT.BOLD);
 			text.setStyleRange(styleRange);
-		};
+		}
 		text.getLocationAtOffset(0);
 	}
 	catch (IllegalArgumentException e) {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_BusyIndicator.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_BusyIndicator.java
index a0c5a31..aae7758 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_BusyIndicator.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_BusyIndicator.java
@@ -29,12 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CCombo.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CCombo.java
index 2570ec9..09e9733 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CCombo.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CCombo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -13,6 +13,7 @@
 
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CCombo;
+import org.eclipse.swt.graphics.Point;
 
 import junit.framework.*;
 import junit.textui.*;
@@ -38,14 +39,26 @@
 	setWidget(ccombo);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_CompositeI not written");
 }
 
+public void test_copy() {
+	ccombo.setText("123456");
+	ccombo.setSelection(new Point(1,3));
+	ccombo.copy();
+	ccombo.setSelection(new Point(0,0));
+	ccombo.paste();
+	assertTrue(":a:", ccombo.getText().equals("23123456"));
+}
+
+public void test_cut() {
+	ccombo.setText("123456");
+	ccombo.setSelection(new Point(1,3));
+	ccombo.cut();
+	assertTrue(":a:", ccombo.getText().equals("1456"));
+}
+
 public void test_addLjava_lang_String() {
 	warnUnimpl("Test test_addLjava_lang_String not written");
 }
@@ -138,6 +151,15 @@
 	warnUnimpl("Test test_isFocusControl not written");
 }
 
+public void test_paste() {
+	ccombo.setText("123456");
+	ccombo.setSelection(new Point(1,3));
+	ccombo.cut();
+	assertTrue(":a:", ccombo.getText().equals("1456"));
+	ccombo.paste();
+	assertTrue(":a:", ccombo.getText().equals("123456"));
+}
+
 public void test_redraw() {
 	warnUnimpl("Test test_redraw not written");
 }
@@ -245,6 +267,8 @@
 	methodNames.addElement("test_addSelectionListenerLorg_eclipse_swt_events_SelectionListener");
 	methodNames.addElement("test_clearSelection");
 	methodNames.addElement("test_computeSizeIIZ");
+	methodNames.addElement("test_copy");
+	methodNames.addElement("test_cut");
 	methodNames.addElement("test_deselectAll");
 	methodNames.addElement("test_deselectI");
 	methodNames.addElement("test_getChildren");
@@ -262,6 +286,7 @@
 	methodNames.addElement("test_indexOfLjava_lang_String");
 	methodNames.addElement("test_indexOfLjava_lang_StringI");
 	methodNames.addElement("test_isFocusControl");
+	methodNames.addElement("test_paste");
 	methodNames.addElement("test_redraw");
 	methodNames.addElement("test_redrawIIIIZ");
 	methodNames.addElement("test_removeAll");
@@ -301,6 +326,8 @@
 	else if (getName().equals("test_addSelectionListenerLorg_eclipse_swt_events_SelectionListener")) test_addSelectionListenerLorg_eclipse_swt_events_SelectionListener();
 	else if (getName().equals("test_clearSelection")) test_clearSelection();
 	else if (getName().equals("test_computeSizeIIZ")) test_computeSizeIIZ();
+	else if (getName().equals("test_copy")) test_copy();
+	else if (getName().equals("test_cut")) test_cut();
 	else if (getName().equals("test_deselectAll")) test_deselectAll();
 	else if (getName().equals("test_deselectI")) test_deselectI();
 	else if (getName().equals("test_getChildren")) test_getChildren();
@@ -318,6 +345,7 @@
 	else if (getName().equals("test_indexOfLjava_lang_String")) test_indexOfLjava_lang_String();
 	else if (getName().equals("test_indexOfLjava_lang_StringI")) test_indexOfLjava_lang_StringI();
 	else if (getName().equals("test_isFocusControl")) test_isFocusControl();
+	else if (getName().equals("test_paste")) test_paste();
 	else if (getName().equals("test_redraw")) test_redraw();
 	else if (getName().equals("test_redrawIIIIZ")) test_redrawIIIIZ();
 	else if (getName().equals("test_removeAll")) test_removeAll();
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CLabel.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CLabel.java
index 3084831..3010e2d 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CLabel.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CLabel.java
@@ -37,10 +37,6 @@
 	setWidget(label);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_CompositeI not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolder.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolder.java
index 6572136..c62ed63 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolder.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolder.java
@@ -41,10 +41,6 @@
 	makeCleanEnvironment();
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_CompositeI not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolderAdapter.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolderAdapter.java
index c29cde3..1bee8df 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolderAdapter.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolderAdapter.java
@@ -29,12 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolderEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolderEvent.java
index 247928f..38ce5a5 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolderEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolderEvent.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public static Test suite() {
 	TestSuite suite = new TestSuite();
 	java.util.Vector methodNames = methodNames();
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolderListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolderListener.java
index f842ecf..2728109 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolderListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabFolderListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_itemClosedLorg_eclipse_swt_custom_CTabFolderEvent() {
 	warnUnimpl("Test test_itemClosedLorg_eclipse_swt_custom_CTabFolderEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabItem.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabItem.java
index a0ad6b9..d23492e 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabItem.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_CTabItem.java
@@ -41,10 +41,6 @@
 	setWidget(cTabItem);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_custom_CTabFolderI() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_custom_CTabFolderI not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ControlEditor.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ControlEditor.java
index 887bf78..e88cd7d 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ControlEditor.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ControlEditor.java
@@ -29,12 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Composite() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_Composite not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ExtendedModifyEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ExtendedModifyEvent.java
index 5c00507..ee00558 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ExtendedModifyEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ExtendedModifyEvent.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_custom_StyledTextEvent() {
 	// this method tested by other test classes
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ExtendedModifyListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ExtendedModifyListener.java
index bd523e1..23d8c26 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ExtendedModifyListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ExtendedModifyListener.java
@@ -35,14 +35,12 @@
 	TestRunner.run(suite());
 }
 protected void setUp() {
+	super.setUp();
 	shell = new Shell();
 	styledText = new StyledText(shell, SWT.NULL);
 	shell.open();
 }
 
-protected void tearDown() {
-}
-
 public void test_modifyTextLorg_eclipse_swt_custom_ExtendedModifyEvent() {
 	ExtendedModifyListener listener = new ExtendedModifyListener() {
 		public void modifyText(ExtendedModifyEvent event) {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_LineBackgroundEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_LineBackgroundEvent.java
index ae17655..6c5043f 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_LineBackgroundEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_LineBackgroundEvent.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_custom_StyledTextEvent() {
 	// this method tested by other test classes
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_LineBackgroundListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_LineBackgroundListener.java
index 9df977d..fc03e4f 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_LineBackgroundListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_LineBackgroundListener.java
@@ -33,12 +33,11 @@
 	TestRunner.run(suite());
 }
 protected void setUp() {
+	super.setUp();
 	shell = new Shell();
 	styledText = new StyledText(shell, SWT.NULL);
 	shell.open();
 }
-protected void tearDown() {
-}
 
 public void test_lineGetBackgroundLorg_eclipse_swt_custom_LineBackgroundEvent() {
 	LineBackgroundListener listener = new LineBackgroundListener() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_LineStyleEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_LineStyleEvent.java
index f54558f..2921a04 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_LineStyleEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_LineStyleEvent.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_custom_StyledTextEvent() {
 	// this method tested by other test classes
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_LineStyleListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_LineStyleListener.java
index 97c7f39..5d1fcf1 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_LineStyleListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_LineStyleListener.java
@@ -33,14 +33,12 @@
 	TestRunner.run(suite());
 }
 protected void setUp() {
+	super.setUp();
 	shell = new Shell();
 	styledText = new StyledText(shell, SWT.NULL);
 	shell.open();
 }
 
-protected void tearDown() {
-}
-
 public void test_lineGetStyleLorg_eclipse_swt_custom_LineStyleEvent() {
 	LineStyleListener listener = new LineStyleListener() {
 		public void lineGetStyle(LineStyleEvent event) {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_PopupList.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_PopupList.java
index a392025..9b13abf 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_PopupList.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_PopupList.java
@@ -29,12 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Shell() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_Shell not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ST.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ST.java
index d43d239..5d203de 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ST.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ST.java
@@ -29,12 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	// doesn't make sense to test this, ST is constants class
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_SashForm.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_SashForm.java
index a971550..d4c3a7b 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_SashForm.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_SashForm.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_CompositeI not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ScrolledComposite.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ScrolledComposite.java
index 68364bc..8fd5f77 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ScrolledComposite.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ScrolledComposite.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_CompositeI not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StackLayout.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StackLayout.java
index 49f0d4e..926e3fd 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StackLayout.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StackLayout.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyleRange.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyleRange.java
index 8f41e95..0eba295 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyleRange.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyleRange.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -50,15 +50,17 @@
 }
 
 protected void setUp() {
+	super.setUp();
 	initializeColors();
 }
 
 protected void tearDown() {
 	Enumeration elements = colors.keys();
 	while (elements.hasMoreElements()) {
-		Color color = (Color)colors.get((RGB)elements.nextElement());
+		Color color = (Color)colors.get(elements.nextElement());
 		color.dispose();
 	}
+	super.tearDown();
 }
 
 public void test_Constructor() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledText.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledText.java
index 279e6a3..5bbaad5 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledText.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledText.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -85,7 +85,7 @@
 private String textString() {
 	return "This is the text component in testing\nNew Line1\nNew Line2\nNew Line3\nNew Line4.";
 }
-private boolean isBidi() {
+boolean isBidiCaret() {
 	return BidiUtil.isBidiPlatform();
 }
 // this method must not be public so that the auto-gen tool keeps it
@@ -227,7 +227,7 @@
 	text.addBidiSegmentListener(listener);
 	// cause StyledText to call the BidiSegmentListener. 
 	text.getLocationAtOffset(0);
-	if (isBidi() || SWT.getPlatform().equals("gtk")) {
+	if (isBidi()) {
 		assertTrue("Listener not called", listenerCalled);
 	}
 	else {
@@ -1074,7 +1074,7 @@
 
 public void test_getLocationAtOffsetI(){
 	// copy from StyledText, has to match value used by StyledText
-	final int XINSET = isBidi() ? 2 : 0;
+	final int XINSET = isBidiCaret() ? 2 : 0;
 	
 	assertTrue(":a:", text.getLocationAtOffset(0).equals(new Point(XINSET, 0)));
 	try {
@@ -1153,8 +1153,9 @@
 public void test_getOffsetAtLocationLorg_eclipse_swt_graphics_Point() {
 	boolean exceptionThrown = false;
 	Point location;
+	final int XINSET = isBidiCaret() ? 2 : 0;
 	
-	assertTrue(":a:", text.getOffsetAtLocation(new Point(0, 0)) == 0);
+	assertTrue(":a:", text.getOffsetAtLocation(new Point(XINSET, 0)) == 0);
 	try {
 		text.getOffsetAtLocation(new Point(-1, 0));
 	}
@@ -1176,7 +1177,7 @@
 	text.setText("Line0\r\nLine1");	
 	location = text.getLocationAtOffset(5);
 	assertTrue(":d:", text.getOffsetAtLocation(new Point(10, 0)) > 0);
-	assertTrue(":e:", text.getOffsetAtLocation(new Point(location.x - 1, 0)) == 4);
+	assertTrue(":e:", text.getOffsetAtLocation(new Point(location.x - 1, 0)) == 5);
 	location = text.getLocationAtOffset(7);	
 	assertTrue(":f:", text.getOffsetAtLocation(location) == 7);
 	try {
@@ -1198,12 +1199,12 @@
 	exceptionThrown = false;
 
 	text.setTopIndex(1);
-	assertTrue(":i:", text.getOffsetAtLocation(new Point(0, -5)) == 0);
-	assertTrue(":j:", text.getOffsetAtLocation(new Point(0, 0)) == 7);
+	assertTrue(":i:", text.getOffsetAtLocation(new Point(XINSET, -5)) == 0);
+	assertTrue(":j:", text.getOffsetAtLocation(new Point(XINSET, 0)) == 7);
 	
 	text.setHorizontalIndex(1);
-	assertTrue(":k:", text.getOffsetAtLocation(new Point(-5, -5)) == 0);
-	assertTrue(":l:", text.getOffsetAtLocation(new Point(-5, 0)) == 7);
+	assertTrue(":k:", text.getOffsetAtLocation(new Point(XINSET + -5, -5)) == 0);
+	assertTrue(":l:", text.getOffsetAtLocation(new Point(XINSET + -5, 0)) == 7);
 
 	// 1GL4ZVE
 	assertTrue(":m:", text.getOffsetAtLocation(text.getLocationAtOffset(2)) == 2);
@@ -1215,6 +1216,254 @@
 	warnUnimpl("Test test_getOrientation not written");
 }
 
+void testStyles (String msg, int[] resultRanges, int[] expectedRanges, StyleRange[] resultStyles, StyleRange[] expectedStyles) {
+	assertNotNull("resultRanges is null on: " + msg, resultRanges);
+	assertNotNull("expectedRanges is null on: " + msg, expectedRanges);
+	assertNotNull("resultStyles is null on: " + msg, resultStyles);
+	assertNotNull("expectedStyles is null on: " + msg, expectedStyles);
+	assertEquals("result ranges and styles length don't match on: " + msg, resultRanges.length, resultStyles.length * 2);
+	assertEquals("expected ranges and styles length don't match on: " + msg, expectedRanges.length, expectedStyles.length * 2);
+	assertEquals("expected and result ranges are differnt on: " + msg, expectedRanges, resultRanges);
+	assertEquals("expected and result styles are differnt on: " + msg, expectedStyles, resultStyles);
+}
+
+public void test_getRanges(){
+	StyleRange style0 = new StyleRange();
+	style0.rise = 10;
+	StyleRange style1 = new StyleRange();
+	style1.rise = 5;
+	StyleRange style2 = new StyleRange();
+	style2.rise = 30;
+	StyleRange[] expectedStyles;
+	int[] expectedRanges;
+	
+	// tests using the new API
+	text.setText ("");
+	text.setText ("0123456789");
+	text.setStyleRanges(0, 0, new int[] {0, 10}, new StyleRange[] {style0});
+	expectedStyles = new StyleRange[] {style0};
+	expectedRanges = new int[] {0, 10};
+	testStyles("Test 1", text.getRanges(0,10), expectedRanges, text.getStyleRanges(false), expectedStyles);
+
+	text.setText ("");
+	text.setText ("0123456789");
+	text.setStyleRanges(0, 0, new int[] {3, 4}, new StyleRange[] {style1});
+	expectedStyles = new StyleRange[] {style1};
+	expectedRanges = new int[] {3, 4};
+	testStyles("Test 2", text.getRanges(0,10), expectedRanges, text.getStyleRanges(false), expectedStyles);
+
+	text.setText ("");
+	text.setText ("0123456789");
+	text.setStyleRanges(0, 0, new int[] {0, 10}, new StyleRange[] {style0});
+	text.setStyleRanges(0, 0, new int[] {3, 4}, new StyleRange[] {style1});
+	expectedStyles = new StyleRange[] {style0, style1, style0};
+	expectedRanges = new int[] {0, 3, 3, 4, 7, 3};
+	testStyles("Test 3", text.getRanges(0,10), expectedRanges, text.getStyleRanges(false), expectedStyles);
+	
+	text.setText ("");
+	text.setText ("0123456789");
+	text.setStyleRanges(0, 0, new int[] {0, 10}, new StyleRange[] {style0});
+	text.setStyleRanges(0, 0, new int[] {3, 4}, new StyleRange[] {style1});
+	text.setStyleRanges(0, 0, new int[] {1, 4}, new StyleRange[] {style2});
+	expectedStyles = new StyleRange[] {style0, style2, style1, style0};
+	expectedRanges = new int[] {0, 1, 1, 4, 5, 2, 7, 3};
+	testStyles("Test 4", text.getRanges(0,10), expectedRanges, text.getStyleRanges(false), expectedStyles);
+		
+	text.setText ("");
+	text.setText ("0123456789");
+	text.setStyleRanges(0, 0, new int[] {0, 10}, new StyleRange[] {style0});
+	text.setStyleRanges(0, 0, new int[] {3, 4}, new StyleRange[] {style1});
+	text.setStyleRanges(0, 0, new int[] {1, 8}, new StyleRange[] {style2});
+	expectedStyles = new StyleRange[] {style0, style2, style0};
+	expectedRanges = new int[] {0, 1, 1, 8, 9, 1};
+	testStyles("Test 5", text.getRanges(0,10), expectedRanges, text.getStyleRanges(false), expectedStyles);
+	
+	text.setText ("");
+	text.setText ("0123456789");
+	text.setStyleRanges(0, 0, new int[] {0, 10}, new StyleRange[] {style0});
+	text.setStyleRanges(0, 0, new int[] {3, 4}, new StyleRange[] {style1});
+	text.setStyleRanges(0, 0, new int[] {0, 5}, new StyleRange[] {style2});
+	expectedStyles = new StyleRange[] {style2, style1, style0};
+	expectedRanges = new int[] {0, 5, 5, 2, 7, 3};
+	testStyles("Test 6", text.getRanges(0,10), expectedRanges, text.getStyleRanges(false), expectedStyles);
+
+	text.setText ("");
+	text.setText ("0123456789");
+	text.setStyleRanges(0, 0, new int[] {0, 10}, new StyleRange[] {style0});
+	text.setStyleRanges(0, 0, new int[] {3, 4}, new StyleRange[] {style1});
+	text.setStyleRanges(0, 0, new int[] {1, 6}, new StyleRange[] {style2});
+	expectedStyles = new StyleRange[] {style0, style2, style0};
+	expectedRanges = new int[] {0, 1, 1, 6, 7, 3};
+	testStyles("Test 7", text.getRanges(0,10), expectedRanges, text.getStyleRanges(false), expectedStyles);
+
+	text.setText ("");
+	text.setText ("0123456789");
+	text.setStyleRanges(0, 0, new int[] {0, 10}, new StyleRange[] {style0});
+	text.setStyleRanges(0, 0, new int[] {3, 4}, new StyleRange[] {style1});
+	text.setStyleRanges(0, 0, new int[] {3, 4}, new StyleRange[] {style2});
+	expectedStyles = new StyleRange[] {style0, style2, style0};
+	expectedRanges = new int[] {0, 3, 3, 4, 7, 3};
+	testStyles("Test 8", text.getRanges(0,10), expectedRanges, text.getStyleRanges(false), expectedStyles);
+			
+	text.setText ("");
+	text.setText ("0123456789");
+	text.setStyleRanges(0, 0, new int[] {0, 10}, new StyleRange[] {style0});
+	text.setStyleRanges(0, 0, new int[] {3, 4}, new StyleRange[] {style1});
+	text.setStyleRanges(0, 0, new int[] {0, 3}, new StyleRange[] {style2});
+	expectedStyles = new StyleRange[] {style2, style1, style0};
+	expectedRanges = new int[] {0, 3, 3, 4, 7, 3};
+	testStyles("Test 9", text.getRanges(0,10), expectedRanges, text.getStyleRanges(false), expectedStyles);
+
+	text.setText ("");
+	text.setText ("0123456789");
+	text.setStyleRanges(0, 0, new int[] {0, 10}, new StyleRange[] {style0});
+	text.setStyleRanges(0, 0, new int[] {3, 4}, new StyleRange[] {style1});
+	text.setStyleRanges(0, 0, new int[] {7, 3}, new StyleRange[] {style2});
+	expectedStyles = new StyleRange[] {style0, style1, style2};
+	expectedRanges = new int[] {0, 3, 3, 4, 7, 3};
+	testStyles("Test 10", text.getRanges(0,10), expectedRanges, text.getStyleRanges(false), expectedStyles);
+	
+	text.setText ("");
+	text.setText ("0123456789");
+	text.setStyleRanges(0, 0, new int[] {0, 10}, new StyleRange[] {style0});
+	text.setStyleRanges(0, 0, new int[] {3, 4}, new StyleRange[] {style1});
+	text.setStyleRanges(0, 0, new int[] {4, 2}, new StyleRange[] {style2});
+	expectedStyles = new StyleRange[] {style0, style1, style2, style1, style0};
+	expectedRanges = new int[] {0, 3, 3, 1, 4, 2, 6, 1, 7, 3};
+	testStyles("Test 11", text.getRanges(0,10), expectedRanges, text.getStyleRanges(false), expectedStyles);
+
+	text.setText ("");
+	text.setText ("0123456789");
+	text.setStyleRanges(0, 0, new int[] {0, 10}, new StyleRange[] {style0});
+	text.setStyleRanges(0, 0, new int[] {3, 4}, new StyleRange[] {style1});
+	text.setStyleRanges(0, 0, new int[] {2, 6}, new StyleRange[] {style2});
+	expectedStyles = new StyleRange[] {style0, style2, style0};
+	expectedRanges = new int[] {0, 2, 2, 6, 8, 2};
+	testStyles("Test 12", text.getRanges(0,10), expectedRanges, text.getStyleRanges(false), expectedStyles);
+	
+	text.setText ("");
+	text.setText ("0123456789");
+	text.setStyleRanges(0, 0, new int[] {0, 10}, new StyleRange[] {style0});
+	text.setStyleRanges(0, 0, new int[] {0, 10}, new StyleRange[] {style1});
+	expectedStyles = new StyleRange[] {style1};
+	expectedRanges = new int[] {0, 10};
+	testStyles("Test 13", text.getRanges(0,10), expectedRanges, text.getStyleRanges(false), expectedStyles);
+
+	text.setText ("");
+	text.setText ("0123456789AB");
+	text.setStyleRanges(0, 0, new int[] {1, 3}, new StyleRange[] {style0});
+	text.setStyleRanges(0, 0, new int[] {5, 1}, new StyleRange[] {style1});
+	text.setStyleRanges(0, 0, new int[] {7, 1}, new StyleRange[] {style0});
+	text.setStyleRanges(0, 0, new int[] {9, 2}, new StyleRange[] {style1});
+	expectedStyles = new StyleRange[] {style0, style1, style0, style1};
+	expectedRanges = new int[] {1,3, 5,1, 7,1, 9,2};
+	testStyles("Test 14", text.getRanges(0,12), expectedRanges, text.getStyleRanges(false), expectedStyles);
+
+	text.setText ("");
+	text.setText ("0123456789AB");
+	text.setStyleRanges(0, 0, new int[] {1, 3}, new StyleRange[] {style0});
+	text.setStyleRanges(0, 0, new int[] {5, 1}, new StyleRange[] {style1});
+	text.setStyleRanges(0, 0, new int[] {7, 1}, new StyleRange[] {style0});
+	text.setStyleRanges(0, 0, new int[] {9, 2}, new StyleRange[] {style1});
+	text.setStyleRanges(0, 0, new int[] {2, 8}, new StyleRange[] {style2});
+	expectedStyles = new StyleRange[] {style0, style2, style1};
+	expectedRanges = new int[] {1,1, 2,8, 10,1};
+	testStyles("Test 15", text.getRanges(0,12), expectedRanges, text.getStyleRanges(false), expectedStyles);
+	
+	//tests mixing the old API and the new API
+	text.setText ("");
+	text.setText ("0123456789");
+	text.setStyleRanges(new StyleRange[]{new StyleRange(3,4,null,null,SWT.BOLD)});
+	expectedStyles = new StyleRange[]{new StyleRange(3,4,null,null,SWT.BOLD)};
+	expectedRanges = new int[] {3, 4};
+	testStyles("Test 16", text.getRanges(0,10), expectedRanges, text.getStyleRanges(false), expectedStyles);
+
+	
+	//test the merging code
+	text.setText ("");
+	text.setText ("0123456789");
+	text.setStyleRanges(new int[] {1, 3, 6, 3}, new StyleRange[] {style0, style0});
+	text.setStyleRanges(0, 0, new int[] {4, 2}, new StyleRange[] {style0});
+	expectedStyles = new StyleRange[] {style0};
+	expectedRanges = new int[] {1, 8};
+	testStyles("Test 17", text.getRanges(0,10), expectedRanges, text.getStyleRanges(false), expectedStyles);
+	
+	text.setText ("");
+	text.setText ("0123456789");
+	text.setStyleRanges(new int[] {1, 3, 6, 3}, new StyleRange[] {style0, style0});
+	text.setStyleRanges(0, 0, new int[] {2, 6}, new StyleRange[] {style0});
+	expectedStyles = new StyleRange[] {style0};
+	expectedRanges = new int[] {1, 8};
+	testStyles("Test 18", text.getRanges(0,10), expectedRanges, text.getStyleRanges(false), expectedStyles);
+
+	text.setText ("");
+	text.setText ("0123456789");
+	text.setStyleRanges(new int[] {1, 3, 6, 3}, new StyleRange[] {style0, style0});
+	text.setStyleRanges(3, 4, new int[] {0, 1, 9, 1}, new StyleRange[] {style0, style0});
+	expectedStyles = new StyleRange[] {style0, style0};
+	expectedRanges = new int[] {0, 3, 7, 3};
+	testStyles("Test 19", text.getRanges(0,10), expectedRanges, text.getStyleRanges(false), expectedStyles);
+
+	//tests mixing the old API and the new API
+	text.setText ("");
+	text.setText ("0123456789");
+	text.setStyleRanges(new StyleRange[]{new StyleRange(3,4,null,null,SWT.BOLD)});
+	expectedStyles = new StyleRange[]{};
+	expectedRanges = new int[] {};
+	testStyles("Test 20", text.getRanges(3,0), expectedRanges, text.getStyleRanges(3, 0, false), expectedStyles);	
+
+	//bug 250859 (getRanges)
+	text.setText ("");
+	text.setText ("The Eclipse Foundation is currently going through the exercise");
+	text.setStyleRanges(new int[] {12, 10, 36, 5}, new StyleRange[] {style0, style1});
+	expectedStyles = new StyleRange[] {style0};
+	expectedRanges = new int[] {12, 10};
+	testStyles("Test 21 (bug 250859)", text.getRanges(12, 10), expectedRanges, text.getStyleRanges(12, 10, false), expectedStyles);
+	
+	//bug 250193
+	text.setText ("");
+	text.setText("The Eclipse Foundation is currently going through the exercise");
+	StyleRange sr1 = new StyleRange();
+	sr1.underline = true;
+	StyleRange sr2 = new StyleRange();
+	sr2.strikeout = true;
+	sr1.start = 12;
+	sr1.length = 10;
+	sr2.start = 36;
+	sr2.length = 5;
+	text.setStyleRange(sr1);
+	text.setStyleRange(sr2);
+	text.replaceTextRange(12, 10, "");
+	expectedStyles = new StyleRange[] {sr2};
+	expectedRanges = new int[] {26, 5};
+	testStyles("Test 22 (bug 250193)", text.getRanges(26, 5), expectedRanges, text.getStyleRanges(26, 5, false), expectedStyles);
+	
+	//bug 212851 (getStyleRanges)
+	text.setText("");
+	text.setText("line0\nline1\nline2");
+	text.setStyleRanges(new int[] {0,2,2,2,4,4,13,3}, new StyleRange[] {style0, style1, style2, style0});
+	expectedRanges = new int[] {6, 2};	
+	expectedStyles = new StyleRange[] {style2}; 
+	testStyles("Test 23 (bug 212851 - getRanges)", text.getRanges(6, 6), expectedRanges, text.getStyleRanges(6, 6, false), expectedStyles);
+	StyleRange[] styles = text.getStyleRanges(6, 6, true);
+	int[] ranges = new int[styles.length * 2];
+	for (int i = 0; i < ranges.length; i+=2) {
+		ranges[i] = styles[i/2].start;
+		ranges[i+1] = styles[i/2].length;
+	}
+	testStyles("Test 24 (bug 212851 - getStyleRanges)", ranges, expectedRanges, text.getStyleRanges(6, 6, false), expectedStyles);
+	expectedRanges = new int[] {6, 2, 13, 1};
+	expectedStyles = new StyleRange[] {style2, style0}; 
+	testStyles("Test 25 ", text.getRanges(6, 8), expectedRanges, text.getStyleRanges(6, 8, false), expectedStyles);
+	styles = text.getStyleRanges(6, 8, true);
+	ranges = new int[styles.length * 2];
+	for (int i = 0; i < ranges.length; i+=2) {
+		ranges[i] = styles[i/2].start;
+		ranges[i+1] = styles[i/2].length;
+	}
+	testStyles("Test 26 ", ranges, expectedRanges, text.getStyleRanges(6, 8, false), expectedStyles);
+}
+
 public void test_getSelection(){
 	text.setText("01234567890");
 	text.setSelection(new Point(2, 2));
@@ -1892,7 +2141,7 @@
 
 	boolean exceptionThrown = false;
 	try {
-		text.print(null);
+		text.print((Printer) null);
 	} catch (IllegalArgumentException ex) {
 		exceptionThrown = true;
 	}	
@@ -2694,7 +2943,7 @@
 
 public void test_setCaretLorg_eclipse_swt_widgets_Caret() {
 	Caret caret = new Caret(text, SWT.NONE);
-	final int XINSET = isBidi() ? 2 : 0;
+	final int XINSET = isBidiCaret() ? 2 : 0;
 	
 	text.setCaret(caret);
 	assertEquals(XINSET, text.getCaret().getLocation().x);
@@ -4210,6 +4459,7 @@
 	methodNames.addElement("test_getOffsetAtLineI");
 	methodNames.addElement("test_getOffsetAtLocationLorg_eclipse_swt_graphics_Point");
 	methodNames.addElement("test_getOrientation");
+	methodNames.addElement("test_getRanges");
 	methodNames.addElement("test_getSelection");
 	methodNames.addElement("test_getSelectionBackground");
 	methodNames.addElement("test_getSelectionCount");
@@ -4321,6 +4571,7 @@
 	else if (getName().equals("test_getOffsetAtLineI")) test_getOffsetAtLineI();
 	else if (getName().equals("test_getOffsetAtLocationLorg_eclipse_swt_graphics_Point")) test_getOffsetAtLocationLorg_eclipse_swt_graphics_Point();
 	else if (getName().equals("test_getOrientation")) test_getOrientation();
+	else if (getName().equals("test_getRanges")) test_getRanges();
 	else if (getName().equals("test_getSelection")) test_getSelection();
 	else if (getName().equals("test_getSelectionBackground")) test_getSelectionBackground();
 	else if (getName().equals("test_getSelectionCount")) test_getSelectionCount();
@@ -4449,6 +4700,7 @@
 	// cause StyledText to call the listener. 
 	text.setSelection(0, text.getCharCount());
 	text.addLineStyleListener(listener);
+	linesCalled[0] = 0;
 	text.copy();
 	assertTrue("not all lines tested for RTF copy", linesCalled[0] == text.getLineCount());
 	
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledTextContent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledTextContent.java
index d688e96..1b1bfbe 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledTextContent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledTextContent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * 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
@@ -17,7 +17,6 @@
 import org.eclipse.swt.custom.*;
 import org.eclipse.swt.widgets.*;
 import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.internal.BidiUtil;
 
 /**
  * Automated Test Suite for class org.eclipse.swt.custom.StyledTextContent
@@ -74,10 +73,8 @@
 	TestRunner.run(suite());
 }
 
-private boolean isBidi() {
-	return BidiUtil.isBidiPlatform();
-}
 protected void setUp() {
+	super.setUp();
 	if (isBidi()) XINSET = 2;
 	else XINSET = 0;
 	shell = new Shell();
@@ -85,9 +82,6 @@
 	styledText.setContent(content);
 }
 
-protected void tearDown() {
-}
-
 public void test_addTextChangeListenerLorg_eclipse_swt_custom_TextChangeListener() {
 	// does not make sense to test, not called by StyledText
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableCursor.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableCursor.java
index d485796..673fce4 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableCursor.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableCursor.java
@@ -28,14 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_TableI() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_TableI not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableEditor.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableEditor.java
index 3472fed..04d1ca2 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableEditor.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableEditor.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Table() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_Table not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableTree.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableTree.java
index e9a0795..1a5d3a5 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableTree.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableTree.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * 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
@@ -40,10 +40,6 @@
 	setWidget(tableTree);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_CompositeI not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableTreeEditor.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableTreeEditor.java
index 26f7ecc..82d1073 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableTreeEditor.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableTreeEditor.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_custom_TableTree() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_custom_TableTree not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableTreeItem.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableTreeItem.java
index 862c7f1..0bec4da 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableTreeItem.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TableTreeItem.java
@@ -40,10 +40,6 @@
 	setWidget(tableTreeItem);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_custom_TableTreeI() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_custom_TableTreeI not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TextChangeListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TextChangeListener.java
index d0db00d..d549e92 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TextChangeListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TextChangeListener.java
@@ -34,11 +34,10 @@
 	TestRunner.run(suite());
 }
 protected void setUp() {
+	super.setUp();
 	shell = new Shell();
 	styledText = new StyledText(shell, SWT.NULL);
 }
-protected void tearDown() {
-}
 
 public void test_textChangedLorg_eclipse_swt_custom_TextChangedEvent() {
 	StyledTextContent content = styledText.getContent();
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TextChangedEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TextChangedEvent.java
index 923e5b2..1086692 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TextChangedEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TextChangedEvent.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_custom_StyledTextContent() {
 	// this method tested by other test classes
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TextChangingEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TextChangingEvent.java
index a19a34a..3e45699 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TextChangingEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TextChangingEvent.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_custom_StyledTextContent() {
 	// this method tested by other test classes
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TreeEditor.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TreeEditor.java
index a507679..f8ca7c2 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TreeEditor.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_TreeEditor.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Tree() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_Tree not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_VerifyKeyListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_VerifyKeyListener.java
index f1fea2b..fad140e 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_VerifyKeyListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_VerifyKeyListener.java
@@ -35,14 +35,12 @@
 	TestRunner.run(suite());
 }
 protected void setUp() {
+	super.setUp();
 	shell = new Shell();
 	styledText = new StyledText(shell, SWT.NULL);
 	shell.open();
 }
 
-protected void tearDown() {
-}
-
 public void test_verifyKeyLorg_eclipse_swt_events_VerifyEvent() {
 	VerifyKeyListener listener = new VerifyKeyListener() {
 		public void verifyKey(VerifyEvent event) {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ViewForm.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ViewForm.java
index 7544e11..5db6f1d 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ViewForm.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_ViewForm.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_CompositeI not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_ByteArrayTransfer.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_ByteArrayTransfer.java
index 34da235..a8d59d4 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_ByteArrayTransfer.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_ByteArrayTransfer.java
@@ -28,14 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_Clipboard.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_Clipboard.java
index cea5084..bd583ac 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_Clipboard.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_Clipboard.java
@@ -29,12 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Display() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_Display not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DND.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DND.java
index e8905e2..c58a290 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DND.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DND.java
@@ -29,12 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DragSource.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DragSource.java
index 1406bc6..1845a93 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DragSource.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DragSource.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_ControlI() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_ControlI not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DragSourceAdapter.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DragSourceAdapter.java
index da40e85..587c6a8 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DragSourceAdapter.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DragSourceAdapter.java
@@ -29,12 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DragSourceEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DragSourceEvent.java
index de2378d..00a4aa8 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DragSourceEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DragSourceEvent.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_dnd_DNDEvent() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_dnd_DNDEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DragSourceListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DragSourceListener.java
index 2d3e5ca..729f438 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DragSourceListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DragSourceListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_dragFinishedLorg_eclipse_swt_dnd_DragSourceEvent() {
 	warnUnimpl("Test test_dragFinishedLorg_eclipse_swt_dnd_DragSourceEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DropTarget.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DropTarget.java
index d62b6ec..58a386a 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DropTarget.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DropTarget.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_ControlI() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_ControlI not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DropTargetAdapter.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DropTargetAdapter.java
index 12096b8..f22d347 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DropTargetAdapter.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DropTargetAdapter.java
@@ -29,12 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DropTargetEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DropTargetEvent.java
index aa9b3a9..78e62af 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DropTargetEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DropTargetEvent.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_dnd_DNDEvent() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_dnd_DNDEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DropTargetListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DropTargetListener.java
index c95076d..441e941 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DropTargetListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_DropTargetListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_dragEnterLorg_eclipse_swt_dnd_DropTargetEvent() {
 	warnUnimpl("Test test_dragEnterLorg_eclipse_swt_dnd_DropTargetEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_FileTransfer.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_FileTransfer.java
index 4ad82c4..250b099 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_FileTransfer.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_FileTransfer.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_getInstance() {
 	warnUnimpl("Test test_getInstance not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_RTFTransfer.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_RTFTransfer.java
index 1f664e0..221018f 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_RTFTransfer.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_RTFTransfer.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_getInstance() {
 	warnUnimpl("Test test_getInstance not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_TextTransfer.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_TextTransfer.java
index 2adabb2..34f1f73 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_TextTransfer.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_TextTransfer.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_getInstance() {
 	warnUnimpl("Test test_getInstance not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_Transfer.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_Transfer.java
index d7c40f1..fae38a2 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_Transfer.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_Transfer.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_TransferData.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_TransferData.java
index a071bea..925b650 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_TransferData.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_dnd_TransferData.java
@@ -29,12 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ArmEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ArmEvent.java
index ef73e6f..892552c 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ArmEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ArmEvent.java
@@ -31,14 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Event() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_Event not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ArmListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ArmListener.java
index 064bee9..a9165ec 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ArmListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ArmListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_widgetArmedLorg_eclipse_swt_events_ArmEvent() {
 	warnUnimpl("Test test_widgetArmedLorg_eclipse_swt_events_ArmEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ControlAdapter.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ControlAdapter.java
index 3713028..5f505d3 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ControlAdapter.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ControlAdapter.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ControlEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ControlEvent.java
index 3e39901..f62bec8 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ControlEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ControlEvent.java
@@ -31,14 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Event() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_Event not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ControlListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ControlListener.java
index e8145fe..4281c02 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ControlListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ControlListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_controlMovedLorg_eclipse_swt_events_ControlEvent() {
 	warnUnimpl("Test test_controlMovedLorg_eclipse_swt_events_ControlEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_DisposeEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_DisposeEvent.java
index 57d2058..c347738 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_DisposeEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_DisposeEvent.java
@@ -31,14 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Event() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_Event not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_DisposeListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_DisposeListener.java
index 168d8b3..b17cfe9 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_DisposeListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_DisposeListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_widgetDisposedLorg_eclipse_swt_events_DisposeEvent() {
 	warnUnimpl("Test test_widgetDisposedLorg_eclipse_swt_events_DisposeEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_FocusAdapter.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_FocusAdapter.java
index 636ba1b..884ecf6 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_FocusAdapter.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_FocusAdapter.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_FocusEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_FocusEvent.java
index 5026605..367d6de 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_FocusEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_FocusEvent.java
@@ -31,14 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Event() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_Event not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_FocusListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_FocusListener.java
index dc6be66..c1df6dc 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_FocusListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_FocusListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_focusGainedLorg_eclipse_swt_events_FocusEvent() {
 	warnUnimpl("Test test_focusGainedLorg_eclipse_swt_events_FocusEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_HelpEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_HelpEvent.java
index 2a1778e..5007dab 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_HelpEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_HelpEvent.java
@@ -31,14 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Event() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_Event not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_HelpListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_HelpListener.java
index 0439180..99b8cfa 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_HelpListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_HelpListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_helpRequestedLorg_eclipse_swt_events_HelpEvent() {
 	warnUnimpl("Test test_helpRequestedLorg_eclipse_swt_events_HelpEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_KeyAdapter.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_KeyAdapter.java
index 73a3d61..6bf6a8e 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_KeyAdapter.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_KeyAdapter.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_KeyEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_KeyEvent.java
index 3bc0f0a..eb2bc51 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_KeyEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_KeyEvent.java
@@ -31,14 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Event() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_Event not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_KeyListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_KeyListener.java
index b3f3b59..73a1383 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_KeyListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_KeyListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_keyPressedLorg_eclipse_swt_events_KeyEvent() {
 	warnUnimpl("Test test_keyPressedLorg_eclipse_swt_events_KeyEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MenuAdapter.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MenuAdapter.java
index 376877b..c74b243 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MenuAdapter.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MenuAdapter.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MenuEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MenuEvent.java
index 336c1f1..caa1baf 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MenuEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MenuEvent.java
@@ -31,14 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Event() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_Event not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MenuListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MenuListener.java
index 4d42be2..292261a 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MenuListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MenuListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_menuHiddenLorg_eclipse_swt_events_MenuEvent() {
 	warnUnimpl("Test test_menuHiddenLorg_eclipse_swt_events_MenuEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ModifyEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ModifyEvent.java
index 0da9321..a3edb24 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ModifyEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ModifyEvent.java
@@ -31,14 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Event() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_Event not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ModifyListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ModifyListener.java
index e315d58..8041899 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ModifyListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ModifyListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_modifyTextLorg_eclipse_swt_events_ModifyEvent() {
 	warnUnimpl("Test test_modifyTextLorg_eclipse_swt_events_ModifyEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseAdapter.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseAdapter.java
index d0ae996..cbde38c 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseAdapter.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseAdapter.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseEvent.java
index 43f0355..73616b5 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseEvent.java
@@ -31,14 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Event() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_Event not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseListener.java
index f293a16..169fa58 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_mouseDoubleClickLorg_eclipse_swt_events_MouseEvent() {
 	warnUnimpl("Test test_mouseDoubleClickLorg_eclipse_swt_events_MouseEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseMoveListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseMoveListener.java
index 584759b..92c0717 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseMoveListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseMoveListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_mouseMoveLorg_eclipse_swt_events_MouseEvent() {
 	warnUnimpl("Test test_mouseMoveLorg_eclipse_swt_events_MouseEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseTrackAdapter.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseTrackAdapter.java
index 26c4f3f..80fde10 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseTrackAdapter.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseTrackAdapter.java
@@ -29,12 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseTrackListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseTrackListener.java
index c7549ea..fb7cc16 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseTrackListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_MouseTrackListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_mouseEnterLorg_eclipse_swt_events_MouseEvent() {
 	warnUnimpl("Test test_mouseEnterLorg_eclipse_swt_events_MouseEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_PaintEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_PaintEvent.java
index 56ce988..07771f2 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_PaintEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_PaintEvent.java
@@ -31,14 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Event() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_Event not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_PaintListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_PaintListener.java
index 6613ad6..7dc7ba4 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_PaintListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_PaintListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_paintControlLorg_eclipse_swt_events_PaintEvent() {
 	warnUnimpl("Test test_paintControlLorg_eclipse_swt_events_PaintEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_SelectionAdapter.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_SelectionAdapter.java
index 9e57407..7f3137d 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_SelectionAdapter.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_SelectionAdapter.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_SelectionEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_SelectionEvent.java
index e866c94..2d40555 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_SelectionEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_SelectionEvent.java
@@ -31,14 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Event() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_Event not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_SelectionListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_SelectionListener.java
index 13e44c0..28e8409 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_SelectionListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_SelectionListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_widgetDefaultSelectedLorg_eclipse_swt_events_SelectionEvent() {
 	warnUnimpl("Test test_widgetDefaultSelectedLorg_eclipse_swt_events_SelectionEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ShellAdapter.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ShellAdapter.java
index 9cc2ec3..070d6b0 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ShellAdapter.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ShellAdapter.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ShellEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ShellEvent.java
index c89995c..e5fc984 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ShellEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ShellEvent.java
@@ -31,14 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Event() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_Event not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ShellListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ShellListener.java
index 67938bd..2b6c816 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ShellListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_ShellListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_shellActivatedLorg_eclipse_swt_events_ShellEvent() {
 	warnUnimpl("Test test_shellActivatedLorg_eclipse_swt_events_ShellEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TraverseEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TraverseEvent.java
index cc01a15..3c76d8e 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TraverseEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TraverseEvent.java
@@ -31,14 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Event() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_Event not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TraverseListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TraverseListener.java
index e8ed1dc..5e1078d 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TraverseListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TraverseListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_keyTraversedLorg_eclipse_swt_events_TraverseEvent() {
 	warnUnimpl("Test test_keyTraversedLorg_eclipse_swt_events_TraverseEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TreeAdapter.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TreeAdapter.java
index 32a7389..75942f7 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TreeAdapter.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TreeAdapter.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TreeEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TreeEvent.java
index 30d1c17..e77db98 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TreeEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TreeEvent.java
@@ -31,14 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Event() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_Event not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TreeListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TreeListener.java
index d399371..c77f1ba 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TreeListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TreeListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_treeCollapsedLorg_eclipse_swt_events_TreeEvent() {
 	warnUnimpl("Test test_treeCollapsedLorg_eclipse_swt_events_TreeEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TypedEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TypedEvent.java
index dabeccf..5795a22 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TypedEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_TypedEvent.java
@@ -34,10 +34,12 @@
 
 protected void setUp() {
 	shell = new Shell();
+	super.setUp();
 }
 
 protected void tearDown() {
 	shell.dispose();
+	super.tearDown();
 }
 
 public void test_ConstructorLjava_lang_Object() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_VerifyEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_VerifyEvent.java
index a37246c..ae2ddd8 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_VerifyEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_VerifyEvent.java
@@ -31,14 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Event() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_Event not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_VerifyListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_VerifyListener.java
index c6c531f..04810f6 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_VerifyListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_events_VerifyListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_verifyTextLorg_eclipse_swt_events_VerifyEvent() {
 	warnUnimpl("Test test_verifyTextLorg_eclipse_swt_events_VerifyEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Color.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Color.java
index 358ca66..d556551 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Color.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Color.java
@@ -32,9 +32,7 @@
 
 protected void setUp() {
 	display = Display.getDefault();
-}
-
-protected void tearDown() {
+	super.setUp();
 }
 
 public void test_ConstructorLorg_eclipse_swt_graphics_DeviceIII() {
@@ -196,6 +194,7 @@
 	Color color = new Color(display, 255, 255, 255);
 	assertNotNull(color.getRGB());
 	assertEquals(new RGB(255, 255, 255), color.getRGB());
+	color.dispose();
 }
 
 public void test_getRed() {
@@ -214,6 +213,8 @@
 	if (color.equals(otherColor)) {
 		assertEquals("Hash codes of equal objects should be equal", color.hashCode(), otherColor.hashCode());
 	}
+	color.dispose();
+	otherColor.dispose();
 }
 
 public void test_isDisposed() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Cursor.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Cursor.java
index 38aefaf..2378bb7 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Cursor.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Cursor.java
@@ -37,9 +37,7 @@
 
 protected void setUp() {
 	display = Display.getDefault();
-}
-
-protected void tearDown() {
+	super.setUp();
 }
 
 public void test_ConstructorLorg_eclipse_swt_graphics_DeviceI() {
@@ -201,8 +199,12 @@
 
 public void test_toString() {
 	Cursor cursor = new Cursor(display, SWT.CURSOR_WAIT);
-	assertNotNull(cursor.toString());
-	assertTrue(cursor.toString().length() > 0);
+	try {
+		assertNotNull(cursor.toString());
+		assertTrue(cursor.toString().length() > 0);
+	} finally {
+		cursor.dispose();
+	}
 }
 
 public void test_win32_newLorg_eclipse_swt_graphics_DeviceI() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Device.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Device.java
index b071d83..ce2f6ba 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Device.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Device.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_ConstructorLorg_eclipse_swt_graphics_DeviceData() {
 	// Device is abstract - test in subclasses
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_graphics_DeviceData not written");
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_DeviceData.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_DeviceData.java
index 950846b..9236015 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_DeviceData.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_DeviceData.java
@@ -30,12 +30,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	DeviceData data = new DeviceData();
 	data.debug = true;
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Drawable.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Drawable.java
index 8a59ffc..05825ed 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Drawable.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Drawable.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_internal_dispose_GCILorg_eclipse_swt_graphics_GCData() {
 	warnUnimpl("Test test_internal_dispose_GCILorg_eclipse_swt_graphics_GCData not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Font.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Font.java
index 4438600..26d7069 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Font.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Font.java
@@ -36,9 +36,7 @@
 
 protected void setUp() {
 	display = Display.getDefault();
-}
-
-protected void tearDown() {
+	super.setUp();
 }
 
 public void test_ConstructorLorg_eclipse_swt_graphics_Device$Lorg_eclipse_swt_graphics_FontData() {
@@ -105,15 +103,7 @@
 	} catch (IllegalArgumentException e) {
 		exceptionThrown = true;
 	} 
-	assertTrue("null data element 1",exceptionThrown);
-	
-	// test that FontData is set correctly
-	
-	FontData data = new FontData();
-	Font font = new Font(display,data);
-	FontData[] returnedData = font.getFontData();
-	assertEquals(data,returnedData[0]);
-	font.dispose();
+	assertTrue("null data element 1",exceptionThrown);	
 }
 
 public void test_ConstructorLorg_eclipse_swt_graphics_DeviceLorg_eclipse_swt_graphics_FontData() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_FontData.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_FontData.java
index 2e63364..f92a69f 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_FontData.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_FontData.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -31,15 +31,9 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	// Test new FontData()
-	FontData fd = new FontData();
+	new FontData();
 }
 
 public void test_ConstructorLjava_lang_String() {
@@ -52,39 +46,39 @@
 public void test_ConstructorLjava_lang_StringII() {
 	// Test new FontData(String name, int height, int style)
 	// valid font data with no name (strange, but apparently valid)
-	FontData fd = new FontData("", 10, SWT.NORMAL);
+	new FontData("", 10, SWT.NORMAL);
 
 	// valid font data with unknown name (strange, but apparently valid)
-	fd = new FontData("bad-font", 10, SWT.NORMAL);
+	new FontData("bad-font", 10, SWT.NORMAL);
 
 	// valid font data with 0 height (strange, but apparently valid)
-	fd = new FontData(SwtJunit.testFontName, 0, SWT.NORMAL);
+	new FontData(SwtJunit.testFontName, 0, SWT.NORMAL);
 
 	// valid font data with 1000 height (pretty big, but apparently valid)
-	fd = new FontData(SwtJunit.testFontName, 1000, SWT.NORMAL);
+	
 
 	// valid normal 10-point font data
-	fd = new FontData(SwtJunit.testFontName, 10, SWT.NORMAL);
+	new FontData(SwtJunit.testFontName, 10, SWT.NORMAL);
 
 	// valid bold 10-point font data
-	fd = new FontData(SwtJunit.testFontName, 10, SWT.BOLD);
+	new FontData(SwtJunit.testFontName, 10, SWT.BOLD);
 
 	// valid italic 10-point font data
-	fd = new FontData(SwtJunit.testFontName, 10, SWT.ITALIC);
+	new FontData(SwtJunit.testFontName, 10, SWT.ITALIC);
 
 	// valid bold italic 10-point font data
-	fd = new FontData(SwtJunit.testFontName, 10, SWT.BOLD | SWT.ITALIC);
+	new FontData(SwtJunit.testFontName, 10, SWT.BOLD | SWT.ITALIC);
 
 	// illegal argument, name == null
 	try {
-		fd = new FontData(null, 10, SWT.NORMAL);
+		new FontData(null, 10, SWT.NORMAL);
 		fail("No exception thrown for name == null");
 	} catch (IllegalArgumentException e) {
 	}
 
 	// illegal argument, height < 0
 	try {
-		fd = new FontData(SwtJunit.testFontName, -10, SWT.NORMAL);
+		new FontData(SwtJunit.testFontName, -10, SWT.NORMAL);
 		fail("No exception thrown for height < 0");
 	} catch (IllegalArgumentException e) {
 	}
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_FontMetrics.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_FontMetrics.java
index 1560609..959805f 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_FontMetrics.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_FontMetrics.java
@@ -32,6 +32,7 @@
 }
 
 protected void setUp() {
+	super.setUp();
 	display = Display.getDefault();
 	shell = new Shell(display);
 	gc = new GC(shell);
@@ -40,6 +41,7 @@
 protected void tearDown() {
 	gc.dispose();
 	shell.dispose();
+	super.tearDown();
 }
 
 public void test_equalsLjava_lang_Object() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_GC.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_GC.java
index 43b187a..c22a2e4 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_GC.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_GC.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * 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
@@ -15,7 +15,6 @@
 
 import org.eclipse.swt.*;
 import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.printing.*;
 import org.eclipse.swt.widgets.*;
 
 /**
@@ -34,6 +33,7 @@
 }
 
 protected void setUp() {
+	super.setUp();
 	display = Display.getDefault();
 	shell = new Shell(display);
 	shell.setBounds(0,30,240,290);
@@ -45,6 +45,7 @@
 	gc.dispose();
 	image.dispose();
 	shell.dispose();
+	super.tearDown();
 }
 public void test_ConstructorLorg_eclipse_swt_graphics_Drawable() {
 	try {
@@ -54,46 +55,20 @@
 	} catch (IllegalArgumentException e) {
 		assertEquals("Incorrect exception thrown for drawable == null", SWT.ERROR_NULL_ARGUMENT, e);
 	}
-
+	
+	Image image = null;
+	GC gc1 = null, gc2 = null;
 	try {
-		Image image = new Image(display, 10, 10);
-		GC gc1 = new GC(image);
-		GC gc2 = new GC(image);
-		gc1.dispose();
-		gc2.dispose();
-		image.dispose();
+		image = new Image(display, 10, 10);
+		gc1 = new GC(image);
+		gc2 = new GC(image);
 		fail("No exception thrown for more than one GC on one image");
 	} catch (IllegalArgumentException e) {
 		assertEquals("Incorrect exception thrown for more than one GC on one image", SWT.ERROR_INVALID_ARGUMENT, e);
-	}
-
-	if (Printer.getDefaultPrinterData() == null) {
-		// No printer installed. Skip test.
-		return;
-	}
-	Class printerClass = null;
-	try {
-		printerClass = Class.forName("org.eclipse.swt.printing.Printer");
-	} catch (ClassNotFoundException e) {
-		// Printer class not present (eSWT). Skip test.
-		return;
-	}
-	try {
-		// Direct instantiation results in a NoClassDefFoundError during class 
-		// loading/initialization. Casting seems to be ok.
-		Object printer = printerClass.newInstance();
-		GC gc1 = new GC((Printer) printer);
-		GC gc2 = new GC((Printer) printer);
-		gc1.dispose();
-		gc2.dispose();
-		((Printer) printer).dispose();
-		fail("No exception thrown for more than one GC on one printer");
-	} catch (IllegalArgumentException e) {
-		assertEquals("Incorrect exception thrown for more than one GC on one printer", SWT.ERROR_INVALID_ARGUMENT, e);
-	} catch (InstantiationException e) {
-		e.printStackTrace();
-	} catch (IllegalAccessException e) {
-		e.printStackTrace();
+	} finally {
+		if (image != null) image.dispose();
+		if (gc1 != null) gc1.dispose();
+		if (gc2 != null) gc2.dispose();
 	}
 }
 
@@ -106,16 +81,19 @@
 		assertEquals("Incorrect exception thrown for drawable == null", SWT.ERROR_NULL_ARGUMENT, e);
 	}
 
+	Image image = null;
+	GC gc1 = null, gc2 = null;
 	try {
-		Image image = new Image(display, 10, 10);
-		GC gc1 = new GC(image, SWT.RIGHT_TO_LEFT);
-		GC gc2 = new GC(image, SWT.LEFT_TO_RIGHT);
-		gc1.dispose();
-		gc2.dispose();
-		image.dispose();
+		image = new Image(display, 10, 10);
+		gc1 = new GC(image, SWT.RIGHT_TO_LEFT);
+		gc2 = new GC(image, SWT.LEFT_TO_RIGHT);
 		fail("No exception thrown for more than one GC on one image");
 	} catch (IllegalArgumentException e) {
 		assertEquals("Incorrect exception thrown for more than one GC on one image", SWT.ERROR_INVALID_ARGUMENT, e);
+	} finally {
+		if (image != null) image.dispose();
+		if (gc1 != null) gc1.dispose();
+		if (gc2 != null) gc2.dispose();
 	}
 
 	Canvas canvas = new Canvas(shell, SWT.NULL);
@@ -124,35 +102,6 @@
 	testGC = new GC(canvas, SWT.LEFT_TO_RIGHT);
 	testGC.dispose();
 	canvas.dispose();
-
-	if (Printer.getDefaultPrinterData() == null) {
-		// No printer installed. Skip test.
-		return;
-	}
-	Class printerClass = null;
-	try {
-		printerClass = Class.forName("org.eclipse.swt.printing.Printer");
-	} catch (ClassNotFoundException e) {
-		// Printer class not present (eSWT). Skip test.
-		return;
-	}
-	try {
-		// Direct instantiation results in a NoClassDefFoundError during class 
-		// loading/initialization. Casting seems to be ok.
-		Object printer = printerClass.newInstance();
-		GC gc1 = new GC((Printer)printer, SWT.RIGHT_TO_LEFT);
-		GC gc2 = new GC((Printer)printer, SWT.LEFT_TO_RIGHT);
-		gc1.dispose();
-		gc2.dispose();
-		((Printer) printer).dispose();
-		fail("No exception thrown for more than one GC on one printer");
-	} catch (IllegalArgumentException e) {
-		assertEquals("Incorrect exception thrown for more than one GC on one printer", SWT.ERROR_INVALID_ARGUMENT, e);
-	} catch (InstantiationException e) {
-		e.printStackTrace();
-	} catch (IllegalAccessException e) {
-		e.printStackTrace();
-	}
 }
 
 public void test_copyAreaIIIIII() {
@@ -258,6 +207,9 @@
 	image.dispose();
 	imageTransparent.dispose();
 	imageAlpha.dispose();
+	c1.dispose();
+	c2.dispose();
+	c3.dispose();
 }
 
 public void test_drawImageLorg_eclipse_swt_graphics_ImageIIIIIIII() {
@@ -298,6 +250,9 @@
 	image.dispose();
 	imageAlpha.dispose();
 	imageTransparent.dispose();
+	c1.dispose();
+	c2.dispose();
+	c3.dispose();
 }
 
 public void test_drawLineIIII() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_GCData.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_GCData.java
index 8652c8d..a391fd9 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_GCData.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_GCData.java
@@ -29,12 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Image.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Image.java
index 74319fb..a237b71 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Image.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Image.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -37,12 +37,10 @@
 }
 
 protected void setUp() {
+	super.setUp();
 	display = Display.getDefault();
 }
 
-protected void tearDown() {
-}
-
 public void test_ConstructorLorg_eclipse_swt_graphics_DeviceII() {
 	Image image;
 	try {
@@ -292,7 +290,7 @@
 		String fileName = SwtTestCase.invalidImageFilenames[0];
 		Display[] displays = {display, null};
 		for (int j = 0; j < displays.length; j++) {
-			Display tempDisplay = displays[j];
+//			Display tempDisplay = displays[j];
 			for (int i=0; i<numFormats; i++) {
 				String format = SwtTestCase.imageFormats[i];
 				stream = SwtTestCase.class.getResourceAsStream(fileName + "." + format);
@@ -381,7 +379,7 @@
 		fileName = SwtTestCase.invalidImageFilenames[0];
 		Display[] displays = {display, null};
 		for (int j = 0; j < displays.length; j++) {
-			Display tempDisplay = displays[j];
+//			Display tempDisplay = displays[j];
 			for (int i=0; i<numFormats; i++) {
 				String format = SwtTestCase.imageFormats[i];
 	
@@ -409,7 +407,7 @@
 	
 		// create valid images
 		for (int j = 0; j < displays.length; j++) {
-			Display tempDisplay = displays[j];
+//			Display tempDisplay = displays[j];
 			int numFileNames = SwtTestCase.imageFilenames.length;
 			for (int k=0; k<numFileNames; k++) {
 				fileName = SwtTestCase.imageFilenames[k];
@@ -430,7 +428,7 @@
 
 public void test_equalsLjava_lang_Object() {
 	Image image = null;
-	Image image1 = null;;
+	Image image1 = null;
 
 	try {
 		image = new Image(display, 10, 10);
@@ -501,7 +499,7 @@
 
 public void test_hashCode() {
 	Image image = null;
-	Image image1 = null;;
+	Image image1 = null;
 
 	try {
 		image = new Image(display, 10, 10);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_ImageData.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_ImageData.java
index 71b64ea..e66bc65 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_ImageData.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_ImageData.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -36,12 +36,10 @@
 }
 
 protected void setUp() {
+	super.setUp();
 	imageData = new ImageData(IMAGE_DIMENSION, IMAGE_DIMENSION, 32, new PaletteData(0xFF0000, 0xFF00, 0xFF));
 }
 
-protected void tearDown() {
-}
-
 public void test_ConstructorIIILorg_eclipse_swt_graphics_PaletteData() {
 	try {
 		new ImageData(-1, 1, 1, new PaletteData(new RGB[] {new RGB(0, 0, 0)}));
@@ -56,7 +54,7 @@
 	}
 
 	try {
-		new ImageData(1, 1, 1, null, 0, new byte[] {});
+		new ImageData(1, 1, 1, null, 0, new byte[] {0, 0x4f, 0x4f, 0});
 		fail("No exception thrown for paletteData == null");
 	} catch (IllegalArgumentException e) {
 	}
@@ -70,24 +68,26 @@
 	int[] validDepths = {1, 2, 4, 8, 16, 24, 32};
 	for (int i = 0; i < validDepths.length; i++) {
 		new ImageData(1, 1, validDepths[i], new PaletteData(new RGB[] {new RGB(0, 0, 0)}));
-	};
+	}
 }
 
 public void test_ConstructorIIILorg_eclipse_swt_graphics_PaletteDataI$B() {
+	byte[] validData = new byte[] {0, 0x4f, 0x4f, 0};
+	
 	try {
-		new ImageData(-1, 1, 1, new PaletteData(new RGB[] {new RGB(0, 0, 0)}), 1, new byte[] {});
+		new ImageData(-1, 1, 1, new PaletteData(new RGB[] {new RGB(0, 0, 0)}), 1, validData);
 		fail("No exception thrown for width < 0");
 	} catch (IllegalArgumentException e) {
 	}
 
 	try {
-		new ImageData(1, -1, 1, new PaletteData(new RGB[] {new RGB(0, 0, 0)}), 1, new byte[] {});
+		new ImageData(1, -1, 1, new PaletteData(new RGB[] {new RGB(0, 0, 0)}), 1, validData);
 		fail("No exception thrown for height < 0");
 	} catch (IllegalArgumentException e) {
 	}
 
 	try {
-		new ImageData(1, 1, 1, null, 0, new byte[] {});
+		new ImageData(1, 1, 1, null, 0, validData);
 		fail("No exception thrown for paletteData == null");
 	} catch (IllegalArgumentException e) {
 	}
@@ -99,26 +99,44 @@
 	}
 
 	try {
-		new ImageData(1, 1, 3, new PaletteData(new RGB[] {new RGB(0, 0, 0)}), 1, new byte[] {});
+		new ImageData(1, 1, 1, new PaletteData(new RGB[] {new RGB(0, 0, 0)}), 1, new byte[] {});
+		fail("No exception thrown for data array too small");
+	} catch (IllegalArgumentException e) {
+	}
+
+	try {
+		new ImageData(1, 1, 16, new PaletteData(new RGB[] {new RGB(0, 0, 0)}), 1, new byte[] {0x4f});
+		fail("No exception thrown for data array too small");
+	} catch (IllegalArgumentException e) {
+	}
+
+	try {
+		new ImageData(1, 1, 32, new PaletteData(new RGB[] {new RGB(0, 0, 0)}), 1, new byte[] {0x4f, 0x4f});
+		fail("No exception thrown for data array too small");
+	} catch (IllegalArgumentException e) {
+	}
+
+	try {
+		new ImageData(2, 2, 8, new PaletteData(new RGB[] {new RGB(0, 0, 0)}), 1, new byte[] {0x4f, 0x4f, 0x4f});
+		fail("No exception thrown for data array too small");
+	} catch (IllegalArgumentException e) {
+	}
+
+	try {
+		new ImageData(1, 1, 3, new PaletteData(new RGB[] {new RGB(0, 0, 0)}), 1, validData);
 		fail("No exception thrown for unsupported depth");
 	} catch (IllegalArgumentException e) {
 	}
 	
+	// verify all valid depths
 	int[] validDepths = {1, 2, 4, 8, 16, 24, 32};
 	for (int i = 0; i < validDepths.length; i++) {
-		new ImageData(1, 1, validDepths[i], new PaletteData(new RGB[] {new RGB(0, 0, 0)}), 1, new byte[] {});
-	};
-	
-	// illegal argument, data is null
-	try {
-		new ImageData(1, 1, 8, new PaletteData(new RGB[] {new RGB(0, 0, 0)}), 4, null);
-		fail("No exception thrown for null data");
-	} catch (IllegalArgumentException e) {
+		new ImageData(1, 1, validDepths[i], new PaletteData(new RGB[] {new RGB(0, 0, 0)}), 1, validData);
 	}
 	
-	// divide by zero exception if scanlinePad == 0
+	// verify no divide by zero exception if scanlinePad == 0
 	try {
-		new ImageData(1, 1, 8, new PaletteData(new RGB[] {new RGB(0, 0, 0)}), 0, new byte[] {});
+		new ImageData(1, 1, 8, new PaletteData(new RGB[] {new RGB(0, 0, 0)}), 0, validData);
 		fail("No exception thrown for scanlinePad == 0");
 	} catch (IllegalArgumentException e) {
 	}
@@ -354,7 +372,6 @@
 }
 
 public void test_getPixelsIII$BI() {
-	byte value;
 	final int SIZE = 20; 
 	final int GET_WIDTH = 10;
 	final int OFFSET = 10;
@@ -492,7 +509,6 @@
 }
 
 public void test_getPixelsIII$II() {
-	int value;
 	final int SIZE = 20; 
 	final int GET_WIDTH = 10;
 	final int OFFSET = 10;
@@ -701,6 +717,7 @@
 	imageData = image.getImageData();
 	ImageData maskData = imageData.getTransparencyMask();
 	assertNotNull(":b:", maskData);
+	image.dispose();
 
 //	Bug 71472 - transparency mask should be null	
 /*	image = new Image(Display.getDefault(), getClass().getResourceAsStream(imageFilenames[0] + '.' + imageFormats[imageFormats.length-1]));
@@ -720,6 +737,7 @@
 	} catch (IOException e) {}
 	imageData = image.getImageData();
 	assertFalse(":b:", SWT.TRANSPARENCY_NONE == imageData.getTransparencyType());
+	image.dispose();
 	
 	stream = getClass().getResourceAsStream(imageFilenames[0] + '.' + imageFormats[imageFormats.length-1]);
 	image = new Image(Display.getDefault(), stream);
@@ -728,6 +746,7 @@
 	} catch (IOException e) {}
 	imageData = image.getImageData();
 	assertEquals(":c:", SWT.TRANSPARENCY_NONE, imageData.getTransparencyType());
+	image.dispose();
 }
 
 public void test_internal_newIIILorg_eclipse_swt_graphics_PaletteDataI$BI$B$BIIIIIII() {
@@ -898,7 +917,6 @@
 }
 
 public void test_setPixelsIII$BI() {
-	byte value;
 	final int SIZE = 20; 
 	final int OFFSET = 1;
 	byte[] pixelData = new byte[SIZE];
@@ -1007,7 +1025,6 @@
 }
 
 public void test_setPixelsIII$II() {
-	int value;
 	final int SIZE = 20; 
 	final int OFFSET = 1;
 	int[] pixelData = new int[SIZE];
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_ImageLoader.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_ImageLoader.java
index 0e617f5..262890d 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_ImageLoader.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_ImageLoader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -34,14 +34,8 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
-	ImageLoader loader = new ImageLoader();
+	new ImageLoader();
 }
 
 public void test_addImageLoaderListenerLorg_eclipse_swt_graphics_ImageLoaderListener() {
@@ -49,7 +43,7 @@
 	ImageLoaderListener loaderListener = new ImageLoaderListener() {
 		public void imageDataLoaded(ImageLoaderEvent e) {
 			loaderListenerCalled = true;
-		};
+		}
 	};
 	
 	try {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_ImageLoaderEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_ImageLoaderEvent.java
index d09884c..0bc8831 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_ImageLoaderEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_ImageLoaderEvent.java
@@ -31,12 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_ConstructorLorg_eclipse_swt_graphics_ImageLoaderLorg_eclipse_swt_graphics_ImageDataIZ() {
 	try {
 		new ImageLoaderEvent(null, null, 0, true);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_ImageLoaderListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_ImageLoaderListener.java
index dfd65f0..86873c9 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_ImageLoaderListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_ImageLoaderListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_imageDataLoadedLorg_eclipse_swt_graphics_ImageLoaderEvent() {
 	warnUnimpl("Test test_imageDataLoadedLorg_eclipse_swt_graphics_ImageLoaderEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_PaletteData.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_PaletteData.java
index 93bdd58..63f699e 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_PaletteData.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_PaletteData.java
@@ -31,12 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor$Lorg_eclipse_swt_graphics_RGB() {
 	try {
 		new PaletteData(null);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Point.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Point.java
index 17a20c4..e85b5db 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Point.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Point.java
@@ -30,12 +30,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_ConstructorII() {
 	// Test new Point (int x, int y)
 	Point p = new Point(3, 4);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_RGB.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_RGB.java
index ef6d910..592c56a 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_RGB.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_RGB.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -29,57 +29,51 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_ConstructorIII() {
 	// Test RGB(int red, int green, int blue)
-	RGB rgb = new RGB(20,100,200);
+	new RGB(20,100,200);
 	
-	rgb = new RGB(0,0,0);
+	new RGB(0,0,0);
 
-	rgb = new RGB(255,255,255);
+	
 
 	try {
-		rgb = new RGB(-1, 20, 50);
+		new RGB(-1, 20, 50);
 		fail("No exception thrown for red < 0");
 	}
 	catch (IllegalArgumentException e) {
 	}
 	
 	try {
-		rgb = new RGB(256, 20, 50);
+		new RGB(256, 20, 50);
 		fail("No exception thrown for red > 255");
 	}
 	catch (IllegalArgumentException e) {
 	}
 	
 	try {
-		rgb = new RGB(20, -1, 50);
+		new RGB(20, -1, 50);
 		fail("No exception thrown for green < 0");
 	}
 	catch (IllegalArgumentException e) {
 	}
 	
 	try {
-		rgb = new RGB(20, 256, 50);
+		new RGB(20, 256, 50);
 		fail("No exception thrown for green > 255");
 	}
 	catch (IllegalArgumentException e) {
 	}
 
 	try {
-		rgb = new RGB(20, 50, -1);
+		new RGB(20, 50, -1);
 		fail("No exception thrown for blue < 0");
 	}
 	catch (IllegalArgumentException e) {
 	}
 	
 	try {
-		rgb = new RGB(20, 50, 256);
+		new RGB(20, 50, 256);
 		fail("No exception thrown for blue > 255");
 	}
 	catch (IllegalArgumentException e) {
@@ -89,139 +83,139 @@
 
 public void test_ConstructorFFF() {
 
-	RGB rgb = new RGB(0f,0f,0f);
-	rgb = new RGB(0f,1f,1f);
-	rgb = new RGB(0f,1f,0f);
-	rgb = new RGB(0f,0f,1f);
-	rgb = new RGB(0f,0.6f,0.4f);
-	rgb = new RGB(1f,0f,1f);
-	rgb = new RGB(1f,1f,1f);
-	rgb = new RGB(1f,0f,1f);
-	rgb = new RGB(1f,1f,0f);
-	rgb = new RGB(1f,0.6f,0.4f);
-	rgb = new RGB(59f,0f,1f);
-	rgb = new RGB(59f,1f,1f);
-	rgb = new RGB(59f,0f,1f);
-	rgb = new RGB(59f,1f,0f);
-	rgb = new RGB(59f,0.6f,0.4f);
-	rgb = new RGB(60f,0f,1f);
-	rgb = new RGB(60f,1f,1f);
-	rgb = new RGB(60f,0f,1f);
-	rgb = new RGB(60f,1f,0f);
-	rgb = new RGB(60f,0.6f,0.4f);
-	rgb = new RGB(61f,0f,1f);
-	rgb = new RGB(61f,1f,1f);
-	rgb = new RGB(61f,0f,1f);
-	rgb = new RGB(61f,1f,0f);
-	rgb = new RGB(61f,0.6f,0.4f);
-	rgb = new RGB(119f,0f,1f);
-	rgb = new RGB(119f,1f,1f);
-	rgb = new RGB(119f,0f,1f);
-	rgb = new RGB(119f,1f,0f);
-	rgb = new RGB(119f,0.6f,0.4f);
-	rgb = new RGB(120f,0f,1f);
-	rgb = new RGB(120f,1f,1f);
-	rgb = new RGB(120f,0f,1f);
-	rgb = new RGB(120f,1f,0f);
-	rgb = new RGB(120f,0.6f,0.4f);
-	rgb = new RGB(121f,0f,1f);
-	rgb = new RGB(121f,1f,1f);
-	rgb = new RGB(121f,0f,1f);
-	rgb = new RGB(121f,1f,0f);
-	rgb = new RGB(121f,0.6f,0.4f);
-	rgb = new RGB(179f,0f,1f);
-	rgb = new RGB(179f,1f,1f);
-	rgb = new RGB(179f,0f,1f);
-	rgb = new RGB(179f,1f,0f);
-	rgb = new RGB(179f,0.6f,0.4f);
-	rgb = new RGB(180f,0f,1f);
-	rgb = new RGB(180f,1f,1f);
-	rgb = new RGB(180f,0f,1f);
-	rgb = new RGB(180f,1f,0f);
-	rgb = new RGB(180f,0.6f,0.4f);
-	rgb = new RGB(181f,0f,1f);
-	rgb = new RGB(181f,1f,1f);
-	rgb = new RGB(181f,0f,1f);
-	rgb = new RGB(181f,1f,0f);
-	rgb = new RGB(181f,0.6f,0.4f);
-	rgb = new RGB(239f,0f,1f);
-	rgb = new RGB(239f,1f,1f);
-	rgb = new RGB(239f,0f,1f);
-	rgb = new RGB(239f,1f,0f);
-	rgb = new RGB(239f,0.6f,0.4f);
-	rgb = new RGB(240f,0f,1f);
-	rgb = new RGB(240f,1f,1f);
-	rgb = new RGB(240f,0f,1f);
-	rgb = new RGB(240f,1f,0f);
-	rgb = new RGB(240f,0.6f,0.4f);
-	rgb = new RGB(241f,0f,1f);
-	rgb = new RGB(241f,1f,1f);
-	rgb = new RGB(241f,0f,1f);
-	rgb = new RGB(241f,1f,0f);
-	rgb = new RGB(241f,0.6f,0.4f);
-	rgb = new RGB(299f,0f,1f);
-	rgb = new RGB(299f,1f,1f);
-	rgb = new RGB(299f,0f,1f);
-	rgb = new RGB(299f,1f,0f);
-	rgb = new RGB(299f,0.6f,0.4f);
-	rgb = new RGB(300f,0f,1f);
-	rgb = new RGB(300f,1f,1f);
-	rgb = new RGB(300f,0f,1f);
-	rgb = new RGB(300f,1f,0f);
-	rgb = new RGB(300f,0.6f,0.4f);
-	rgb = new RGB(301f,0f,1f);
-	rgb = new RGB(301f,1f,1f);
-	rgb = new RGB(301f,0f,1f);
-	rgb = new RGB(301f,1f,0f);
-	rgb = new RGB(301f,0.6f,0.4f);
-	rgb = new RGB(359f,0f,1f);
-	rgb = new RGB(359f,1f,1f);
-	rgb = new RGB(359f,0f,1f);
-	rgb = new RGB(359f,1f,0f);
-	rgb = new RGB(359f,0.6f,0.4f);
-	rgb = new RGB(360f,0f,1f);
-	rgb = new RGB(360f,1f,1f);
-	rgb = new RGB(360f,0f,1f);
-	rgb = new RGB(360f,1f,0f);
-	rgb = new RGB(360f,0.6f,0.4f);
+	new RGB(0f,0f,0f);
+	
+	new RGB(0f,1f,0f);
+	new RGB(0f,0f,1f);
+	new RGB(0f,0.6f,0.4f);
+	new RGB(1f,0f,1f);
+	new RGB(1f,1f,1f);
+	new RGB(1f,0f,1f);
+	new RGB(1f,1f,0f);
+	new RGB(1f,0.6f,0.4f);
+	new RGB(59f,0f,1f);
+	new RGB(59f,1f,1f);
+	new RGB(59f,0f,1f);
+	new RGB(59f,1f,0f);
+	new RGB(59f,0.6f,0.4f);
+	new RGB(60f,0f,1f);
+	new RGB(60f,1f,1f);
+	new RGB(60f,0f,1f);
+	new RGB(60f,1f,0f);
+	new RGB(60f,0.6f,0.4f);
+	new RGB(61f,0f,1f);
+	new RGB(61f,1f,1f);
+	new RGB(61f,0f,1f);
+	new RGB(61f,1f,0f);
+	new RGB(61f,0.6f,0.4f);
+	new RGB(119f,0f,1f);
+	new RGB(119f,1f,1f);
+	new RGB(119f,0f,1f);
+	new RGB(119f,1f,0f);
+	new RGB(119f,0.6f,0.4f);
+	new RGB(120f,0f,1f);
+	new RGB(120f,1f,1f);
+	new RGB(120f,0f,1f);
+	new RGB(120f,1f,0f);
+	new RGB(120f,0.6f,0.4f);
+	new RGB(121f,0f,1f);
+	new RGB(121f,1f,1f);
+	new RGB(121f,0f,1f);
+	new RGB(121f,1f,0f);
+	new RGB(121f,0.6f,0.4f);
+	new RGB(179f,0f,1f);
+	new RGB(179f,1f,1f);
+	new RGB(179f,0f,1f);
+	new RGB(179f,1f,0f);
+	new RGB(179f,0.6f,0.4f);
+	new RGB(180f,0f,1f);
+	new RGB(180f,1f,1f);
+	new RGB(180f,0f,1f);
+	new RGB(180f,1f,0f);
+	new RGB(180f,0.6f,0.4f);
+	new RGB(181f,0f,1f);
+	new RGB(181f,1f,1f);
+	new RGB(181f,0f,1f);
+	new RGB(181f,1f,0f);
+	new RGB(181f,0.6f,0.4f);
+	new RGB(239f,0f,1f);
+	new RGB(239f,1f,1f);
+	new RGB(239f,0f,1f);
+	new RGB(239f,1f,0f);
+	new RGB(239f,0.6f,0.4f);
+	new RGB(240f,0f,1f);
+	new RGB(240f,1f,1f);
+	new RGB(240f,0f,1f);
+	new RGB(240f,1f,0f);
+	new RGB(240f,0.6f,0.4f);
+	new RGB(241f,0f,1f);
+	new RGB(241f,1f,1f);
+	new RGB(241f,0f,1f);
+	new RGB(241f,1f,0f);
+	new RGB(241f,0.6f,0.4f);
+	new RGB(299f,0f,1f);
+	new RGB(299f,1f,1f);
+	new RGB(299f,0f,1f);
+	new RGB(299f,1f,0f);
+	new RGB(299f,0.6f,0.4f);
+	new RGB(300f,0f,1f);
+	new RGB(300f,1f,1f);
+	new RGB(300f,0f,1f);
+	new RGB(300f,1f,0f);
+	new RGB(300f,0.6f,0.4f);
+	new RGB(301f,0f,1f);
+	new RGB(301f,1f,1f);
+	new RGB(301f,0f,1f);
+	new RGB(301f,1f,0f);
+	new RGB(301f,0.6f,0.4f);
+	new RGB(359f,0f,1f);
+	new RGB(359f,1f,1f);
+	new RGB(359f,0f,1f);
+	new RGB(359f,1f,0f);
+	new RGB(359f,0.6f,0.4f);
+	new RGB(360f,0f,1f);
+	new RGB(360f,1f,1f);
+	new RGB(360f,0f,1f);
+	new RGB(360f,1f,0f);
+	new RGB(360f,0.6f,0.4f);
 	
 	try {
-		rgb = new RGB(400f, 0.5f, 0.5f);
+		new RGB(400f, 0.5f, 0.5f);
 		fail("No exception thrown for hue > 360");
 	}
 	catch (IllegalArgumentException e) {
 	}
 	
 	try {
-		rgb = new RGB(-5f, 0.5f, 0.5f);
+		new RGB(-5f, 0.5f, 0.5f);
 		fail("No exception thrown for hue < 0");
 	}
 	catch (IllegalArgumentException e) {
 	}
 	
 	try {
-		rgb = new RGB(200f, -0.5f, 0.5f);
+		new RGB(200f, -0.5f, 0.5f);
 		fail("No exception thrown for saturation < 0");
 	}
 	catch (IllegalArgumentException e) {
 	}
 	
 	try {
-		rgb = new RGB(200f, 300f, 0.5f);
+		new RGB(200f, 300f, 0.5f);
 		fail("No exception thrown for saturation > 1");
 	}
 	catch (IllegalArgumentException e) {
 	}
 	
 	try {
-		rgb = new RGB(200f, 0.5f, -0.5f);
+		new RGB(200f, 0.5f, -0.5f);
 		fail("No exception thrown for brightness < 0");
 	}
 	catch (IllegalArgumentException e) {
 	}
 	
 	try {
-		rgb = new RGB(200f, 0.5f, 400f);
+		new RGB(200f, 0.5f, 400f);
 		fail("No exception thrown for brightness > 1");
 	}
 	catch (IllegalArgumentException e) {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Rectangle.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Rectangle.java
index eba4ee2..9d64145 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Rectangle.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Rectangle.java
@@ -31,12 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_ConstructorIIII() {
 	// Test new Rectangle (int x, int y, int width, int height)
 	Rectangle r = new Rectangle(3, 4, 5, 6);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Region.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Region.java
index 28420fd..586db4f 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Region.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Region.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -32,12 +32,10 @@
 }
 
 protected void setUp() {
+	super.setUp();
 	display = Display.getDefault();
 }
 
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	// test Region()
 	Region reg = new Region();
@@ -133,6 +131,7 @@
 	Region reg2 = new Region(display);
 	reg2.add(new Rectangle(40, 50, 10, 20));
 	reg1.add(reg2);
+	reg2.dispose();
 
 	try {
 		reg1.add((Region)null);
@@ -160,6 +159,8 @@
 		fail("no exception thrown for adding a Region to a Region which got disposed");
 	}
 	catch (SWTException e) {
+	} finally {
+		if (reg2 != null) reg2.dispose();
 	}
 }
 
@@ -173,7 +174,7 @@
 	Region reg = new Region(display);
 	reg.dispose();
 	try {
-		boolean res = reg.contains(pointInRect1.x, pointInRect1.y);
+		reg.contains(pointInRect1.x, pointInRect1.y);
 		fail("no exception thrown on disposed region");
 	}
 	catch (Exception e) {
@@ -212,7 +213,7 @@
 	Region reg = new Region(display);
 	reg.dispose();
 	try {
-		boolean res = reg.contains(pointInRect1);
+		reg.contains(pointInRect1);
 		fail("no exception thrown on disposed region");
 	}
 	catch (Exception e) {
@@ -308,7 +309,7 @@
 	reg.dispose();
 	
 	try {
-		Rectangle rect = reg.getBounds();
+		reg.getBounds();
 		fail("Region disposed should throw Exception");
 	}
 	catch (Exception e) {
@@ -520,6 +521,7 @@
 	reg.dispose();
 	reg1.dispose();
 	reg4.dispose();
+	reg5.dispose();
 }
 
 public void test_intersectsIIII() {
@@ -535,7 +537,7 @@
 	Region reg = new Region(display);
 	reg.dispose();
 	try {
-		boolean res = reg.intersects(rectInter1.x, rectInter1.y, rectInter1.width, rectInter1.height);
+		reg.intersects(rectInter1.x, rectInter1.y, rectInter1.width, rectInter1.height);
 		fail("no exception thrown on disposed region");
 	}
 	catch (Exception e) {
@@ -589,7 +591,7 @@
 	Region reg = new Region(display);
 	reg.dispose();
 	try {
-		boolean res = reg.intersects(rectInter1);
+		reg.intersects(rectInter1);
 		fail("no exception thrown on disposed region");
 	}
 	catch (Exception e) {
@@ -894,6 +896,38 @@
 	}
 }
 
+public void test_add_intArray() {
+	Region reg = new Region(display);
+	int[] points = new int[] {1};
+	reg.add(points);
+	reg.dispose();
+	
+	Region reg2 = new Region(display);
+	points = new int[] {1,2};
+	reg2.add(points);
+	reg2.dispose();
+	
+	Region reg3 = new Region(display);
+	points = new int[] {1,2,3};
+	reg3.add(points);
+	reg3.dispose();
+	
+	Region reg4 = new Region(display);
+	points = new int[] {1,2,3,4};
+	reg4.add(points);
+	reg4.dispose();
+	
+	Region reg5 = new Region(display);
+	points = new int[] {1,2,3,4,5};
+	reg5.add(points);
+	reg5.dispose();
+	
+	Region reg6 = new Region(display);
+	points = new int[] {1,2,3,4,5,6};
+	reg6.add(points);
+	reg6.dispose();
+}
+
 public static Test suite() {
 	TestSuite suite = new TestSuite();
 	java.util.Vector methodNames = methodNames();
@@ -927,6 +961,7 @@
 	methodNames.addElement("test_subtractLorg_eclipse_swt_graphics_Region");
 	methodNames.addElement("test_toString");
 	methodNames.addElement("test_win32_newLorg_eclipse_swt_graphics_DeviceI");
+	methodNames.addElement("test_add_intArray");
 	return methodNames;
 }
 protected void runTest() throws Throwable {
@@ -952,6 +987,7 @@
 	else if (getName().equals("test_subtractLorg_eclipse_swt_graphics_Region")) test_subtractLorg_eclipse_swt_graphics_Region();
 	else if (getName().equals("test_toString")) test_toString();
 	else if (getName().equals("test_win32_newLorg_eclipse_swt_graphics_DeviceI")) test_win32_newLorg_eclipse_swt_graphics_DeviceI();
+	else if (getName().equals("test_add_intArray")) test_add_intArray();
 }
 
 /* custom */
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_FillLayout.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_FillLayout.java
index 7a8a663..99eb406 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_FillLayout.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_FillLayout.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_FormAttachment.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_FormAttachment.java
index 5db215d..4ddfd0b 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_FormAttachment.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_FormAttachment.java
@@ -32,11 +32,13 @@
 }
 
 protected void setUp() {
+	super.setUp();
 	shell = new Shell();
 }
 
 protected void tearDown() {
 	shell.dispose();
+	super.tearDown();
 }
 
 public void test_ConstructorI() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_FormData.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_FormData.java
index 6cbd2a0..7c2c5cd 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_FormData.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_FormData.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_FormLayout.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_FormLayout.java
index 7cc5e47..d15c597 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_FormLayout.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_FormLayout.java
@@ -28,14 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_GridData.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_GridData.java
index e9f3693..9ddd2e4 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_GridData.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_GridData.java
@@ -31,12 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	GridData data = new GridData();
 	assertNotNull(data);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_GridLayout.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_GridLayout.java
index 3dbf2cc..1cb5119 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_GridLayout.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_GridLayout.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_RowData.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_RowData.java
index 6c547c2..565b4ea 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_RowData.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_RowData.java
@@ -29,12 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_RowLayout.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_RowLayout.java
index 449496a..7c19c5f 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_RowLayout.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_layout_RowLayout.java
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OLE.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OLE.java
index d3d3fac..26f0ab6 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OLE.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OLE.java
@@ -28,14 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleAutomation.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleAutomation.java
index bbb2775..1b806d1 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleAutomation.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleAutomation.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_ConstructorLorg_eclipse_swt_ole_win32_OleClientSite() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_ole_win32_OleClientSite not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleClientSite.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleClientSite.java
index 56717d5..1b45015 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleClientSite.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleClientSite.java
@@ -28,14 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeILjava_io_File() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_CompositeILjava_io_File not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleControlSite.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleControlSite.java
index 114da8b..e227d90 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleControlSite.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleControlSite.java
@@ -28,14 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeILjava_lang_String() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_CompositeILjava_lang_String not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleEvent.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleEvent.java
index 425eb90..68bf78c 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleEvent.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleEvent.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleFrame.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleFrame.java
index 2be6d7f..0d773c8 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleFrame.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleFrame.java
@@ -28,14 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_CompositeI not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleFunctionDescription.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleFunctionDescription.java
index 05a7283..417576f 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleFunctionDescription.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleFunctionDescription.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleListener.java
index a0dc5ba..1d7df7f 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleListener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_handleEventLorg_eclipse_swt_ole_win32_OleEvent() {
 	warnUnimpl("Test test_handleEventLorg_eclipse_swt_ole_win32_OleEvent not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleParameterDescription.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleParameterDescription.java
index c42061f..0c82130 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleParameterDescription.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OleParameterDescription.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OlePropertyDescription.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OlePropertyDescription.java
index a3b91a5..a1b9388 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OlePropertyDescription.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_OlePropertyDescription.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_Variant.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_Variant.java
index 14bd5ba..c54deb2 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_Variant.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_ole_win32_Variant.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	warnUnimpl("Test test_Constructor not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_printing_PrintDialog.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_printing_PrintDialog.java
index 8683395..2f3b0c0 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_printing_PrintDialog.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_printing_PrintDialog.java
@@ -36,10 +36,6 @@
 	setDialog(printDialog);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Shell() {
 	new PrintDialog(shell);
 	
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_printing_Printer.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_printing_Printer.java
index dbfe307..467eb46 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_printing_Printer.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_printing_Printer.java
@@ -32,14 +32,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_Constructor() {
 	boolean exceptionThrown = false;
 	String detail = "";
@@ -172,8 +164,18 @@
 		 * printer list is empty.
 		 */
 		PrinterData list[] = Printer.getPrinterList();
+		if (list.length  == 1) {
+			if (SWT.getPlatform().equals("gtk")) {
+				/* Even though there is no default printer data, 
+				 * on GTK it is still possible to have a print 
+				 * to file backend
+				 */
+				assertTrue(list[0].driver.equals("GtkPrintBackendFile"));
+			}
+		} else {
 		assertTrue("printer list contains items even though there are no printers",
 				list.length == 0);
+		}
 	} else {
 		/* If there is at least a default printer, verify
 		 * that the printer list is not empty.
@@ -211,22 +213,22 @@
 }
 public static java.util.Vector methodNames() {
 	java.util.Vector methodNames = new java.util.Vector();
-	methodNames.addElement("test_Constructor");
-	methodNames.addElement("test_ConstructorLorg_eclipse_swt_printing_PrinterData");
-	methodNames.addElement("test_cancelJob");
-	methodNames.addElement("test_computeTrimIIII");
-	methodNames.addElement("test_endJob");
-	methodNames.addElement("test_endPage");
-	methodNames.addElement("test_getBounds");
-	methodNames.addElement("test_getClientArea");
-	methodNames.addElement("test_getDPI");
-	methodNames.addElement("test_getDefaultPrinterData");
+//	methodNames.addElement("test_Constructor");
+//	methodNames.addElement("test_ConstructorLorg_eclipse_swt_printing_PrinterData");
+//	methodNames.addElement("test_cancelJob");
+//	methodNames.addElement("test_computeTrimIIII");
+//	methodNames.addElement("test_endJob");
+//	methodNames.addElement("test_endPage");
+//	methodNames.addElement("test_getBounds");
+//	methodNames.addElement("test_getClientArea");
+//	methodNames.addElement("test_getDPI");
+//	methodNames.addElement("test_getDefaultPrinterData");
 	methodNames.addElement("test_getPrinterData");
 	methodNames.addElement("test_getPrinterList");
-	methodNames.addElement("test_internal_dispose_GCILorg_eclipse_swt_graphics_GCData");
-	methodNames.addElement("test_internal_new_GCLorg_eclipse_swt_graphics_GCData");
-	methodNames.addElement("test_startJobLjava_lang_String");
-	methodNames.addElement("test_startPage");
+//	methodNames.addElement("test_internal_dispose_GCILorg_eclipse_swt_graphics_GCData");
+//	methodNames.addElement("test_internal_new_GCLorg_eclipse_swt_graphics_GCData");
+//	methodNames.addElement("test_startJobLjava_lang_String");
+//	methodNames.addElement("test_startPage");
 	methodNames.addAll(Test_org_eclipse_swt_graphics_Device.methodNames()); // add superclass method names
 	return methodNames;
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_printing_PrinterData.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_printing_PrinterData.java
index 0fe61a9..1aa1716 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_printing_PrinterData.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_printing_PrinterData.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -29,20 +29,12 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_Constructor() {
-	PrinterData data = new PrinterData();
+	new PrinterData();
 }
 
 public void test_ConstructorLjava_lang_StringLjava_lang_String() {
-	PrinterData data = new PrinterData("hello", "there");
+	new PrinterData("hello", "there");
 }
 
 public void test_toString() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_program_Program.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_program_Program.java
index 978e5cf..a3a9b30 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_program_Program.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_program_Program.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -15,7 +15,6 @@
 import junit.framework.*;
 import junit.textui.*;
 import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
 import org.eclipse.swt.program.*;
 import org.eclipse.swt.widgets.*;
 
@@ -25,8 +24,6 @@
  * @see org.eclipse.swt.program.Program
  */
 public class Test_org_eclipse_swt_program_Program extends SwtTestCase {
-
-	private Display display;
 	
 public Test_org_eclipse_swt_program_Program(String name) {
 	super(name);
@@ -37,10 +34,8 @@
 }
 
 protected void setUp() {
-	display = Display.getDefault();
-}
-
-protected void tearDown() {
+	super.setUp();
+	Display.getDefault();
 }
 
 public void test_equalsLjava_lang_Object() {
@@ -84,13 +79,13 @@
 	// No assertion here because the doc does not guarantee a non-null result.
 	if (extensions != null) {
 		for (int i=0; i<extensions.length; i++) {
-			Program program = Program.findProgram(extensions[i]);
+			Program.findProgram(extensions[i]);
 			// No assertion here because a null result is allowed.
 		}
 	}
 	
 	try {
-		Program program = Program.findProgram(null);
+		Program.findProgram(null);
 		fail("Failed to throw ERROR_NULL_ARGUMENT");
 	} catch (IllegalArgumentException e) {
 		assertEquals("Failed to throw ERROR_NULL_ARGUMENT", SWT.ERROR_NULL_ARGUMENT, e);
@@ -118,7 +113,7 @@
 		for (int i=0; i<extensions.length; i++) {
 			Program program = Program.findProgram(extensions[i]);
 			if (program != null) {
-				ImageData data = program.getImageData();
+				program.getImageData();
 				// Nothing to do.
 			}
 		}
@@ -157,7 +152,7 @@
 		int hashCode = programs[i].hashCode();
 		Integer key = new Integer(hashCode);
 		if (lookup.contains(key)) {
-			fail("Duplicate hash code for "+programs[i]+" (same as "+(Program)lookup.get(key)+")");
+			fail("Duplicate hash code for "+programs[i]+" (same as "+lookup.get(key)+")");
 		}
 		else {
 			lookup.put(key,programs[i]);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Button.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Button.java
index f709dd2..11fc0a9 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Button.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Button.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -41,26 +41,22 @@
 	setWidget(button);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	// Test Button(Composite parent, int style)
-	Button button = new Button(shell, SWT.NULL);
+	new Button(shell, SWT.NULL);
 
-	button = new Button(shell, SWT.PUSH);
+	new Button(shell, SWT.PUSH);
 
-	button = new Button(shell, SWT.CHECK);
+	new Button(shell, SWT.CHECK);
 
-	button = new Button(shell, SWT.TOGGLE);
+	new Button(shell, SWT.TOGGLE);
 
-	button = new Button(shell, SWT.ARROW);
+	new Button(shell, SWT.ARROW);
 
-	button = new Button(shell, SWT.PUSH | SWT.CHECK);
+	new Button(shell, SWT.PUSH | SWT.CHECK);
 
 	try {
-		button = new Button(null, 0);
+		new Button(null, 0);
 		fail("No exception thrown for parent == null");
 	}
 	catch (IllegalArgumentException e) {
@@ -72,9 +68,9 @@
 	SelectionListener listener = new SelectionListener() {
 		public void widgetSelected(SelectionEvent e) {
 			listenerCalled = true;
-		};
+		}
 		public void widgetDefaultSelected(SelectionEvent e) {
-		};
+		}
 	};
 	
 	try {
@@ -245,7 +241,7 @@
 	for (int i=0; i<goodCases; i++){
 		button.setText(cases[i]);
 		assertTrue("good case: " + String.valueOf(i), button.getText().equals(cases[i]));
-	};
+	}
 
 	try {
 		button.setText(null);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Canvas.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Canvas.java
index 11e6511..ef4364d 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Canvas.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Canvas.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -41,10 +41,6 @@
 	super.setWidget(canvas);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 protected void setWidget(Widget w) {
 	if (!canvas.isDisposed())
 		canvas.dispose();
@@ -53,9 +49,8 @@
 }
 
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
-	Canvas newCanvas;
 	try {
-		newCanvas = new Canvas(null, SWT.NONE);
+		new Canvas(null, SWT.NONE);
 		fail("No exception thrown for parent == null");
 	}
 	catch (IllegalArgumentException e) {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Caret.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Caret.java
index a6b9b09..28da72f 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Caret.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Caret.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -42,14 +42,9 @@
 	setWidget(caret);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CanvasI() {
-	Caret newCaret;
 	try {
-		newCaret = new Caret(null, 0);
+		new Caret(null, 0);
 		fail("No exception thrown for parent == null");
 	}
 	catch (IllegalArgumentException e) {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ColorDialog.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ColorDialog.java
index 88a0e3d..69da01a 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ColorDialog.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ColorDialog.java
@@ -40,9 +40,6 @@
 	setDialog(colorDialog);
 }
 
-protected void tearDown() {
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Shell() {
 	new ColorDialog(shell);
 	
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Combo.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Combo.java
index 9b9d752..c67792b 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Combo.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Combo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -42,10 +42,6 @@
 	setWidget(combo);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	try {
 		combo = new Combo(null, 0);
@@ -142,6 +138,7 @@
 		exceptionThrown = true;
 	}
 	assertTrue("Expected exception not thrown", exceptionThrown);
+	exceptionThrown = false;
 	
 	// test whether all content modifying API methods send a Modify event	
 	combo.addModifyListener(listener);
@@ -160,6 +157,7 @@
 	catch (IllegalArgumentException e) {
 		exceptionThrown = true;
 	}
+	assertTrue("Expected exception not thrown", exceptionThrown);
 }
 
 public void test_addSelectionListenerLorg_eclipse_swt_events_SelectionListener() {
@@ -178,6 +176,8 @@
 	catch (IllegalArgumentException e) {
 		exceptionThrown = true;
 	}
+	assertTrue("Expected exception not thrown", exceptionThrown);
+	exceptionThrown = false;
 	combo.addSelectionListener(listener);
 	combo.select(0);
 	assertTrue(":a:", listenerCalled == false);
@@ -188,6 +188,7 @@
 	catch (IllegalArgumentException e) {
 		exceptionThrown = true;
 	}
+	assertTrue("Expected exception not thrown", exceptionThrown);
 }
 
 public void test_clearSelection() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Composite.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Composite.java
index ce8a088..998c528 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Composite.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Composite.java
@@ -40,10 +40,6 @@
 	super.setWidget(composite);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	try {
 		composite = new Composite(null, 0);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Control.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Control.java
index 15deaa2..23d1dc2 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Control.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Control.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -36,14 +36,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	// abstract class
 }
@@ -52,10 +44,10 @@
 	ControlListener listener = new ControlListener() {
 		public void controlMoved(ControlEvent e) {
 			eventOccurred = true;
-		};
+		}
 		public void controlResized(ControlEvent e) {
 			eventOccurred = true;
-		};
+		}
 	};
 	control.addControlListener(listener);
 	eventOccurred = false;
@@ -71,10 +63,10 @@
 	FocusListener listener = new FocusListener() {
 		public void focusGained(FocusEvent e) {
 			eventOccurred = true;
-		};
+		}
 		public void focusLost(FocusEvent e) {
 			eventOccurred = true;
-		};
+		}
 	};
 	control.addFocusListener(listener);
 	eventOccurred = false;
@@ -90,7 +82,7 @@
 	HelpListener listener = new HelpListener() {
 		public void helpRequested(HelpEvent e) {
 			eventOccurred = true;
-		};
+		}
 	};
 	control.addHelpListener(listener);
 	eventOccurred = false;
@@ -103,10 +95,10 @@
 	KeyListener listener = new KeyListener() {
 		public void keyPressed(KeyEvent e) {
 			eventOccurred = true;
-		};
+		}
 		public void keyReleased(KeyEvent e) {
 			eventOccurred = true;
-		};
+		}
 	};
 	control.addKeyListener(listener);
 	eventOccurred = false;
@@ -122,13 +114,13 @@
 	MouseListener listener = new MouseListener() {
 		public void mouseDown(MouseEvent e) {
 			eventOccurred = true;
-		};
+		}
 		public void mouseUp(MouseEvent e) {
 			eventOccurred = true;
-		};
+		}
 		public void mouseDoubleClick(MouseEvent e) {
 			eventOccurred = true;
-		};
+		}
 	};
 	control.addMouseListener(listener);
 	eventOccurred = false;
@@ -147,7 +139,7 @@
 	MouseMoveListener listener = new MouseMoveListener() {
 		public void mouseMove(MouseEvent e) {
 			eventOccurred = true;
-		};
+		}
 	};
 	control.addMouseMoveListener(listener);
 	eventOccurred = false;
@@ -160,13 +152,13 @@
 	MouseTrackListener listener = new MouseTrackListener() {
 		public void mouseEnter(MouseEvent e) {
 			eventOccurred = true;
-		};
+		}
 		public void mouseExit(MouseEvent e) {
 			eventOccurred = true;
-		};
+		}
 		public void mouseHover(MouseEvent e) {
 			eventOccurred = true;
-		};
+		}
 	};
 	control.addMouseTrackListener(listener);
 	eventOccurred = false;
@@ -185,7 +177,7 @@
 	PaintListener listener = new PaintListener() {
 		public void paintControl(PaintEvent e) {
 			eventOccurred = true;
-		};
+		}
 	};
 	control.addPaintListener(listener);
 	eventOccurred = false;
@@ -201,7 +193,7 @@
 	TraverseListener listener = new TraverseListener() {
 		public void keyTraversed(TraverseEvent e) {
 			eventOccurred = true;
-		};
+		}
 	};
 	control.addTraverseListener(listener);
 	eventOccurred = false;
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_CoolBar.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_CoolBar.java
index 35a00d2..c318e8a 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_CoolBar.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_CoolBar.java
@@ -44,10 +44,6 @@
 	setWidget(coolBar);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_CompositeI not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_CoolItem.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_CoolItem.java
index 80ec9fa..0f49b5a 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_CoolItem.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_CoolItem.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -39,16 +39,12 @@
 	setWidget(coolItem);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CoolBarI() {
 	CoolBar coolBar = new CoolBar(shell, 0);
-	CoolItem coolItem = new CoolItem(coolBar, 0);
+	new CoolItem(coolBar, 0);
 	
 	try {
-		coolItem = new CoolItem(null, 0);
+		new CoolItem(null, 0);
 		fail("No exception thrown for parent == null");	
 	}
 	catch (IllegalArgumentException e) {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_DateTime.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_DateTime.java
new file mode 100644
index 0000000..62be3ba
--- /dev/null
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_DateTime.java
@@ -0,0 +1,568 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.tests.junit;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.widgets.*;
+
+import junit.framework.*;
+import junit.textui.*;
+
+/**
+ * Automated Test Suite for class org.eclipse.swt.widgets.DateTime
+ *
+ * @see org.eclipse.swt.widgets.DateTime
+ */
+public class Test_org_eclipse_swt_widgets_DateTime extends Test_org_eclipse_swt_widgets_Control {
+	static final int JAN = 0, FEB = 1, AUG = 7, NOV = 10;
+	DateTime datetime;
+	int style = SWT.DATE;
+
+public Test_org_eclipse_swt_widgets_DateTime(String name) {
+	super(name);
+}
+
+public Test_org_eclipse_swt_widgets_DateTime(String name, int style) {
+	this(name);
+	this.style = style;
+}
+
+public static void main(String[] args) {
+	TestRunner.run(suite());
+}
+
+protected void setUp() {
+	super.setUp();
+	datetime = new DateTime(shell, style);
+	setWidget(datetime);
+}
+
+public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
+	new DateTime(shell, SWT.NULL);
+
+	new DateTime(shell, SWT.DATE);
+
+	new DateTime(shell, SWT.TIME);
+
+	new DateTime(shell, SWT.CALENDAR);
+
+	new DateTime(shell, SWT.DATE | SWT.LONG);
+
+	new DateTime(shell, SWT.TIME | SWT.LONG);
+
+	new DateTime(shell, SWT.CALENDAR | SWT.LONG);
+
+	new DateTime(shell, SWT.DATE | SWT.MEDIUM);
+
+	new DateTime(shell, SWT.TIME | SWT.MEDIUM);
+
+	new DateTime(shell, SWT.CALENDAR | SWT.MEDIUM);
+
+	new DateTime(shell, SWT.DATE | SWT.SHORT);
+
+	new DateTime(shell, SWT.TIME | SWT.SHORT);
+
+	new DateTime(shell, SWT.CALENDAR | SWT.SHORT);
+
+	try {
+		new DateTime(null, 0);
+		fail("No exception thrown for parent == null");
+	}
+	catch (IllegalArgumentException e) {
+	}
+}
+
+public void test_addSelectionListenerLorg_eclipse_swt_events_SelectionListener() {
+	listenerCalled = false;
+	SelectionListener listener = new SelectionListener() {
+		public void widgetSelected(SelectionEvent e) {
+			listenerCalled = true;
+		}
+		public void widgetDefaultSelected(SelectionEvent e) {
+		}
+	};
+	
+	try {
+		datetime.addSelectionListener(null);
+		fail("No exception thrown for addSelectionListener with null argument");
+	} catch (IllegalArgumentException e) {
+	}
+	
+	datetime.addSelectionListener(listener);
+	datetime.notifyListeners(SWT.Selection, new Event());
+	assertTrue(listenerCalled);
+	
+	try {
+		datetime.removeSelectionListener(null);
+		fail("No exception thrown for removeSelectionListener with null argument");
+	} catch (IllegalArgumentException e) {
+	}
+	listenerCalled = false;
+	datetime.removeSelectionListener(listener);
+	datetime.notifyListeners(SWT.Selection, new Event());
+	assertFalse(listenerCalled);
+}
+
+public void test_getDay() {
+	// tested in test_setDayI
+}
+
+public void test_getHours() {
+	// tested in test_setHoursI
+}
+
+public void test_getMinutes() {
+	// tested in test_setMinutesI
+}
+
+public void test_getMonth() {
+	// tested in test_setMonthI
+}
+
+public void test_getSeconds() {
+	// tested in test_setSecondsI
+}
+
+public void test_getYear() {
+	// tested in test_setYearI
+}
+
+public void test_setDateIII() {
+	datetime.setDate(2008, AUG, 31);
+	assertEquals(31, datetime.getDay());
+	assertEquals(AUG, datetime.getMonth());
+	assertEquals(2008, datetime.getYear());
+
+	datetime.setDate(2008, NOV, 30);
+	assertEquals(30, datetime.getDay());
+	assertEquals(NOV, datetime.getMonth());
+	assertEquals(2008, datetime.getYear());
+
+	datetime.setDate(2008, FEB, 29);
+	assertEquals(29, datetime.getDay());
+	assertEquals(FEB, datetime.getMonth());
+	assertEquals(2008, datetime.getYear());
+
+	datetime.setDate(2007, FEB, 28);
+	assertEquals(28, datetime.getDay());
+	assertEquals(FEB, datetime.getMonth());
+	assertEquals(2007, datetime.getYear());
+
+	datetime.setDate(2008, JAN, 1);
+	assertEquals(1, datetime.getDay());
+	assertEquals(JAN, datetime.getMonth());
+	assertEquals(2008, datetime.getYear());
+
+	// The following lines are commented out because they fail on Windows.
+	// The UK and the US adopted the Gregorian calendar on September 14, 1752
+	// so the Windows control considers Jan 1, 1752 to be in the Julian calendar.
+//	datetime.setDate(1752, JAN, 1);
+//	assertEquals(1, datetime.getDay());
+//	assertEquals(JAN, datetime.getMonth());
+//	assertEquals(1752, datetime.getYear());
+
+	datetime.setDate(1752, NOV, 30);
+	assertEquals(30, datetime.getDay());
+	assertEquals(NOV, datetime.getMonth());
+	assertEquals(1752, datetime.getYear());
+	datetime.setDate(2008, JAN, 1);
+
+	datetime.setDate(9999, JAN, 1);
+	assertEquals(1, datetime.getDay());
+	assertEquals(JAN, datetime.getMonth());
+	assertEquals(9999, datetime.getYear());
+
+	datetime.setDate(2008, 0, 1);
+	assertEquals(1, datetime.getDay());
+	assertEquals(0, datetime.getMonth());
+	assertEquals(2008, datetime.getYear());
+
+	datetime.setDate(2008, 11, 1);
+	assertEquals(1, datetime.getDay());
+	assertEquals(11, datetime.getMonth());
+	assertEquals(2008, datetime.getYear());
+
+	datetime.setDate(2008, JAN, 1);
+	assertEquals(1, datetime.getDay());
+	assertEquals(JAN, datetime.getMonth());
+	assertEquals(2008, datetime.getYear());
+
+	datetime.setDate(1999, FEB, 29); // Feb 29, 1999 is not valid, so setDate should be ignored
+	assertEquals(1, datetime.getDay());
+	assertEquals(JAN, datetime.getMonth());
+	assertEquals(2008, datetime.getYear());
+
+	datetime.setDate(1999, NOV, 31); // Nov 31 is not valid, so setDate should be ignored
+	assertEquals(1, datetime.getDay());
+	assertEquals(JAN, datetime.getMonth());
+	assertEquals(2008, datetime.getYear());
+
+	datetime.setDate(1751, JAN, 1);
+	assertEquals(1, datetime.getDay());
+	assertEquals(JAN, datetime.getMonth());
+	assertEquals(2008, datetime.getYear());
+
+	datetime.setDate(10000, JAN, 1);
+	assertEquals(1, datetime.getDay());
+	assertEquals(JAN, datetime.getMonth());
+	assertEquals(2008, datetime.getYear());
+
+	datetime.setDate(2008, -1, 1);
+	assertEquals(1, datetime.getDay());
+	assertEquals(JAN, datetime.getMonth());
+	assertEquals(2008, datetime.getYear());
+
+	datetime.setDate(2008, 12, 1);
+	assertEquals(1, datetime.getDay());
+	assertEquals(JAN, datetime.getMonth());
+	assertEquals(2008, datetime.getYear());
+
+	datetime.setDate(2008, JAN, 0);
+	assertEquals(1, datetime.getDay());
+	assertEquals(JAN, datetime.getMonth());
+	assertEquals(2008, datetime.getYear());
+
+	datetime.setDate(2008, JAN, 99);
+	assertEquals(1, datetime.getDay());
+	assertEquals(JAN, datetime.getMonth());
+	assertEquals(2008, datetime.getYear());
+}
+
+public void test_setDayI() {
+	datetime.setDate(2008, AUG, 1);
+	for (int day = 1; day <= 31; day++) {
+		datetime.setDay(day);
+		assertEquals(day, datetime.getDay());
+	}
+
+	int day = datetime.getDay();
+	datetime.setDay(32); // No month has 32 days, so setDay should be ignored
+	assertEquals(day, datetime.getDay());
+
+	datetime.setDay(-5); // Make sure negative setDay is ignored
+	assertEquals(day, datetime.getDay());
+
+	datetime.setDate(2008, FEB, 1);
+	datetime.setDay(30); // Feb never has 30 days, so setDay should be ignored
+	assertEquals(1, datetime.getDay());
+
+	datetime.setDate(2007, FEB, 5);
+	datetime.setDay(29); // Feb 2007 did not have 29 days, so setDay should be ignored
+	assertEquals(5, datetime.getDay());
+}
+
+public void test_setHoursI() {
+	datetime.setTime(2, 10, 30);
+	datetime.setHours(21);
+	assertEquals(21, datetime.getHours());
+	assertEquals(10, datetime.getMinutes());
+	assertEquals(30, datetime.getSeconds());
+
+	datetime.setHours(24); // The max is 23 hours, so the setHours should be ignored
+	assertEquals(21, datetime.getHours());
+	assertEquals(10, datetime.getMinutes());
+	assertEquals(30, datetime.getSeconds());
+
+	datetime.setHours(-1); // The min is 0 hours, so the setHours should be ignored
+	assertEquals(21, datetime.getHours());
+	assertEquals(10, datetime.getMinutes());
+	assertEquals(30, datetime.getSeconds());
+}
+
+public void test_setMinutesI() {
+	datetime.setTime(2, 10, 30);
+	datetime.setMinutes(22);
+	assertEquals(2, datetime.getHours());
+	assertEquals(22, datetime.getMinutes());
+	assertEquals(30, datetime.getSeconds());
+
+	datetime.setMinutes(0);
+	assertEquals(2, datetime.getHours());
+	assertEquals(0, datetime.getMinutes());
+	assertEquals(30, datetime.getSeconds());
+
+	datetime.setMinutes(59);
+	assertEquals(2, datetime.getHours());
+	assertEquals(59, datetime.getMinutes());
+	assertEquals(30, datetime.getSeconds());
+
+	datetime.setMinutes(-1); // The max is 59 minutes, so the setMinutes should be ignored
+	assertEquals(2, datetime.getHours());
+	assertEquals(59, datetime.getMinutes());
+	assertEquals(30, datetime.getSeconds());
+
+	datetime.setMinutes(60); // The min is 0 minutes, so the setMinutes should be ignored
+	assertEquals(2, datetime.getHours());
+	assertEquals(59, datetime.getMinutes());
+	assertEquals(30, datetime.getSeconds());
+}
+
+public void test_setMonthI() {
+	datetime.setDate(2008, NOV, 1);
+	datetime.setMonth(AUG);
+	assertEquals(AUG, datetime.getMonth());
+
+	datetime.setMonth(JAN);
+	assertEquals(JAN, datetime.getMonth());
+
+	datetime.setMonth(FEB);
+	assertEquals(FEB, datetime.getMonth());
+
+	datetime.setMonth(NOV);
+	assertEquals(NOV, datetime.getMonth());
+
+	datetime.setDate(2008, NOV, 30);
+	datetime.setMonth(FEB); // Feb does not have 30 days, so setMonth should be ignored
+	assertEquals(NOV, datetime.getMonth());
+
+	datetime.setDate(2008, AUG, 31);
+	datetime.setMonth(NOV); // Nov does not have 31 days, so setMonth should be ignored
+	assertEquals(AUG, datetime.getMonth());
+
+	datetime.setDate(2007, NOV, 29);
+	datetime.setMonth(FEB); // Feb 2007 does not have 29 days, so setMonth should be ignored
+	assertEquals(NOV, datetime.getMonth());
+}
+
+public void test_setSecondsI() {
+	datetime.setTime(2, 10, 30);
+	datetime.setSeconds(52);
+	assertEquals(2, datetime.getHours());
+	assertEquals(10, datetime.getMinutes());
+	assertEquals(52, datetime.getSeconds());
+
+	datetime.setSeconds(0);
+	assertEquals(2, datetime.getHours());
+	assertEquals(10, datetime.getMinutes());
+	assertEquals(0, datetime.getSeconds());
+
+	datetime.setSeconds(59);
+	assertEquals(2, datetime.getHours());
+	assertEquals(10, datetime.getMinutes());
+	assertEquals(59, datetime.getSeconds());
+
+	datetime.setSeconds(-1); // The max is 59 seconds, so the setSeconds should be ignored
+	assertEquals(2, datetime.getHours());
+	assertEquals(10, datetime.getMinutes());
+	assertEquals(59, datetime.getSeconds());
+
+	datetime.setSeconds(60); // The min is 0 seconds, so the setSeconds should be ignored
+	assertEquals(2, datetime.getHours());
+	assertEquals(10, datetime.getMinutes());
+	assertEquals(59, datetime.getSeconds());
+}
+
+public void test_setTimeIII() {
+	datetime.setTime(2, 10, 30);
+	assertEquals(2, datetime.getHours());
+	assertEquals(10, datetime.getMinutes());
+	assertEquals(30, datetime.getSeconds());
+
+	datetime.setTime(0, 10, 30);
+	assertEquals(0, datetime.getHours());
+	assertEquals(10, datetime.getMinutes());
+	assertEquals(30, datetime.getSeconds());
+
+	datetime.setTime(23, 10, 30);
+	assertEquals(23, datetime.getHours());
+	assertEquals(10, datetime.getMinutes());
+	assertEquals(30, datetime.getSeconds());
+
+	datetime.setTime(2, 0, 30);
+	assertEquals(2, datetime.getHours());
+	assertEquals(0, datetime.getMinutes());
+	assertEquals(30, datetime.getSeconds());
+
+	datetime.setTime(2, 59, 30);
+	assertEquals(2, datetime.getHours());
+	assertEquals(59, datetime.getMinutes());
+	assertEquals(30, datetime.getSeconds());
+
+	datetime.setTime(2, 10, 0);
+	assertEquals(2, datetime.getHours());
+	assertEquals(10, datetime.getMinutes());
+	assertEquals(0, datetime.getSeconds());
+
+	datetime.setTime(2, 10, 59);
+	assertEquals(2, datetime.getHours());
+	assertEquals(10, datetime.getMinutes());
+	assertEquals(59, datetime.getSeconds());
+
+	datetime.setTime(29, 10, 30); // Max hours is 23 so the entire setTime should be ignored
+	assertEquals(2, datetime.getHours());
+	assertEquals(10, datetime.getMinutes());
+	assertEquals(59, datetime.getSeconds());
+
+	datetime.setTime(2, 73, 30); // Max minutes is 59 so the entire setTime should be ignored
+	assertEquals(2, datetime.getHours());
+	assertEquals(10, datetime.getMinutes());
+	assertEquals(59, datetime.getSeconds());
+
+	datetime.setTime(2, 10, 95); // Max seconds is 59 so the entire setTime should be ignored
+	assertEquals(2, datetime.getHours());
+	assertEquals(10, datetime.getMinutes());
+	assertEquals(59, datetime.getSeconds());
+}
+
+public void test_setYearI() {
+	datetime.setDate(2008, NOV, 1);
+	datetime.setYear(1947);
+	assertEquals(1947, datetime.getYear());
+
+	datetime.setYear(1752);
+	assertEquals(1752, datetime.getYear());
+
+	datetime.setYear(9999);
+	assertEquals(9999, datetime.getYear());
+
+	datetime.setYear(2005);
+	assertEquals(2005, datetime.getYear());
+
+	datetime.setYear(0);
+	assertEquals(2005, datetime.getYear());
+
+	datetime.setYear(-1947);
+	assertEquals(2005, datetime.getYear());
+	
+	datetime.setDate(2008, FEB, 29);
+	datetime.setYear(2007);
+	assertEquals(2008, datetime.getYear());
+}
+
+public void test_removeSelectionListenerLorg_eclipse_swt_events_SelectionListener() {
+	// tested in test_addSelectionListenerLorg_eclipse_swt_events_SelectionListener()
+}
+
+public static Test suite() {
+	TestSuite suite = new TestSuite();
+	java.util.Vector methodNames = methodNames();
+	java.util.Enumeration e = methodNames.elements();
+	while (e.hasMoreElements()) {
+		String methodName = (String)e.nextElement();
+		suite.addTest(new Test_org_eclipse_swt_widgets_DateTime(methodName, SWT.DATE));
+		suite.addTest(new Test_org_eclipse_swt_widgets_DateTime(methodName, SWT.TIME));
+		suite.addTest(new Test_org_eclipse_swt_widgets_DateTime(methodName, SWT.CALENDAR));
+	}
+	return suite;
+}
+
+public static java.util.Vector methodNames() {
+	java.util.Vector methodNames = new java.util.Vector();
+	methodNames.addElement("test_ConstructorLorg_eclipse_swt_widgets_CompositeI");
+	methodNames.addElement("test_addSelectionListenerLorg_eclipse_swt_events_SelectionListener");
+	methodNames.addElement("test_removeSelectionListenerLorg_eclipse_swt_events_SelectionListener");
+	methodNames.addElement("test_setDateIII");
+	methodNames.addElement("test_setTimeIII");
+	methodNames.addElement("test_getDay");
+	methodNames.addElement("test_getHours");
+	methodNames.addElement("test_getMinutes");
+	methodNames.addElement("test_getMonth");
+	methodNames.addElement("test_getSeconds");
+	methodNames.addElement("test_getYear");
+	methodNames.addElement("test_setDayI");
+	methodNames.addElement("test_setHoursI");
+	methodNames.addElement("test_setMinutesI");
+	methodNames.addElement("test_setMonthI");
+	methodNames.addElement("test_setSecondsI");
+	methodNames.addElement("test_setYearI");
+	methodNames.addElement("test_consistency_MenuDetect");
+	methodNames.addElement("test_consistency_DragDetect");
+	methodNames.addElement("test_consistency_MouseSelection");
+	methodNames.addElement("test_consistency_EnterSelection");
+	methodNames.addAll(Test_org_eclipse_swt_widgets_Control.methodNames()); // add superclass method names
+	return methodNames;
+}
+protected void runTest() throws Throwable {
+	if (getName().equals("test_ConstructorLorg_eclipse_swt_widgets_CompositeI")) test_ConstructorLorg_eclipse_swt_widgets_CompositeI();
+	else if (getName().equals("test_addSelectionListenerLorg_eclipse_swt_events_SelectionListener")) test_addSelectionListenerLorg_eclipse_swt_events_SelectionListener();
+	else if (getName().equals("test_removeSelectionListenerLorg_eclipse_swt_events_SelectionListener")) test_removeSelectionListenerLorg_eclipse_swt_events_SelectionListener();
+	else if (getName().equals("test_setDateIII")) test_setDateIII();
+	else if (getName().equals("test_setTimeIII")) test_setTimeIII();
+	else if (getName().equals("test_getDay")) test_getDay();
+	else if (getName().equals("test_getHours")) test_getHours();
+	else if (getName().equals("test_getMinutes")) test_getMinutes();
+	else if (getName().equals("test_getMonth")) test_getMonth();
+	else if (getName().equals("test_getSeconds")) test_getSeconds();
+	else if (getName().equals("test_getYear")) test_getYear();
+	else if (getName().equals("test_setDayI")) test_setDayI();
+	else if (getName().equals("test_setHoursI")) test_setHoursI();
+	else if (getName().equals("test_setMinutesI")) test_setMinutesI();
+	else if (getName().equals("test_setMonthI")) test_setMonthI();
+	else if (getName().equals("test_setSecondsI")) test_setSecondsI();
+	else if (getName().equals("test_setYearI")) test_setYearI();
+	else if (getName().equals("test_consistency_MenuDetect")) test_consistency_MenuDetect();
+	else if (getName().equals("test_consistency_DragDetect")) test_consistency_DragDetect();
+	else if (getName().equals("test_consistency_MouseSelection")) test_consistency_MouseSelection();
+	else if (getName().equals("test_consistency_EnterSelection")) test_consistency_EnterSelection();
+	else super.runTest();
+}
+
+protected void setUp(int style) {
+    super.setUp();
+    datetime = new DateTime(shell, style);
+    setWidget(datetime);
+}
+
+public void test_consistency_MenuDetect () {
+    consistencyEvent(10, 10, 3, 0, ConsistencyUtility.MOUSE_CLICK);
+    tearDown();
+    setUp(SWT.DATE);
+    consistencyEvent(5, 5, 3, 0, ConsistencyUtility.MOUSE_CLICK);
+    tearDown();
+    setUp(SWT.TIME);
+    consistencyEvent(5, 5, 3, 0, ConsistencyUtility.MOUSE_CLICK);
+    tearDown();
+    setUp(SWT.CALENDAR);
+    consistencyEvent(5, 5, 3, 0, ConsistencyUtility.MOUSE_CLICK);
+    
+}
+
+public void test_consistency_MouseSelection () {
+    consistencyEvent(10, 10, 1, 0, ConsistencyUtility.MOUSE_CLICK);
+    tearDown();
+    setUp(SWT.DATE);
+    consistencyEvent(5, 5, 1, 0, ConsistencyUtility.MOUSE_CLICK);
+    tearDown();
+    setUp(SWT.TIME);
+    consistencyEvent(5, 5, 1, 0, ConsistencyUtility.MOUSE_CLICK);
+    tearDown();
+    setUp(SWT.CALENDAR);
+    consistencyEvent(5, 5, 1, 0, ConsistencyUtility.MOUSE_CLICK);
+}
+
+public void test_consistency_EnterSelection () {
+    tearDown();
+    setUp(SWT.DATE);
+    consistencyEvent(10, 13, 0, 0, ConsistencyUtility.KEY_PRESS);
+    tearDown();
+    setUp(SWT.TIME);
+    consistencyEvent(10, 13, 0, 0, ConsistencyUtility.KEY_PRESS);
+    tearDown();
+    setUp(SWT.CALENDAR);
+    consistencyEvent(10, 13, 0, 0, ConsistencyUtility.KEY_PRESS);
+}
+
+public void test_consistency_DragDetect () {
+    consistencyEvent(10, 10, 20, 20, ConsistencyUtility.MOUSE_DRAG);
+    tearDown();
+    setUp(SWT.DATE);
+    consistencyEvent(5, 5, 15, 15, ConsistencyUtility.MOUSE_DRAG);
+    tearDown();
+    setUp(SWT.TIME);
+    consistencyEvent(5, 5, 15, 15, ConsistencyUtility.MOUSE_DRAG);
+    tearDown();
+    setUp(SWT.CALENDAR);
+    consistencyEvent(5, 5, 15, 15, ConsistencyUtility.MOUSE_DRAG);
+}
+
+
+}
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Decorations.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Decorations.java
index 5ca8df0..97d7d03 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Decorations.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Decorations.java
@@ -35,16 +35,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-	// do nothing, even though this is not an abstract class, it was never meant to 
-	// be instantiated
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	// do nothing, even though this is not an abstract class, it was never meant to 
 	// be instantiated
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Dialog.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Dialog.java
index 154ac89..f54f3a2 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Dialog.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Dialog.java
@@ -30,11 +30,13 @@
 }
 
 protected void setUp() {
+	super.setUp();
 	shell = new Shell();
 }
 
 protected void tearDown() {
 	shell.dispose();
+	super.tearDown();
 }
 
 public void test_ConstructorLorg_eclipse_swt_widgets_Shell() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_DirectoryDialog.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_DirectoryDialog.java
index 9e62e98..500cd4f 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_DirectoryDialog.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_DirectoryDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -36,12 +36,8 @@
 	setDialog(dirDialog);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Shell() {
-	DirectoryDialog dd = new DirectoryDialog(shell);
+	new DirectoryDialog(shell);
 	try {
 		new DirectoryDialog(null);
 		fail("No exception thrown for null parent");
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Display.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Display.java
index 9de4a82..d087b17 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Display.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Display.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -69,7 +69,7 @@
 				callbackReceived[CLOSE_CALLBACK] = true;
 			else if (e.type == SWT.Dispose)
 				callbackReceived[DISPOSE_CALLBACK] = true;
-		};
+		}
 	};
 	
 	Display display = new Display();
@@ -100,7 +100,7 @@
 				callbackReceived[CLOSE_CALLBACK] = true;
 			else if (e.type == SWT.Dispose)
 				callbackReceived[DISPOSE_CALLBACK] = true;
-		};
+		}
 	};
 	
 	Display display = new Display();
@@ -794,7 +794,7 @@
 				callbackReceived[CLOSE_CALLBACK] = true;
 			else if (e.type == SWT.Dispose)
 				callbackReceived[DISPOSE_CALLBACK] = true;
-		};
+		}
 	};
 	
 	Display display = new Display();
@@ -826,7 +826,7 @@
 				callbackReceived[CLOSE_CALLBACK] = true;
 			else if (e.type == SWT.Dispose)
 				callbackReceived[DISPOSE_CALLBACK] = true;
-		};
+		}
 	};
 	
 	Display display = new Display();
@@ -1234,7 +1234,7 @@
 public void test_getWarnings() {
 	Display display = new Display();
 	try {
-		boolean result = display.getWarnings();
+		display.getWarnings();
 		// Since the behavior is platform specific, there's
 		// no good test for the result value.
 	} finally {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Event.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Event.java
index 6de507b..bbdd064 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Event.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Event.java
@@ -30,12 +30,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_Constructor() {
 	Event event = new Event();
 	assertNotNull(event);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ExpandBar.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ExpandBar.java
index 749e780..c2f8589 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ExpandBar.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ExpandBar.java
@@ -40,10 +40,6 @@
 	setWidget(expandBar);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_addExpandListenerLorg_eclipse_swt_events_ExpandListener() {
 	final boolean[] listenerCalled = new boolean[] {false};
 	ExpandListener expandListener = new ExpandListener() {		
@@ -52,7 +48,7 @@
 		}
 		public void itemExpanded(ExpandEvent e) {
 			listenerCalled[0] = true;			
-		};
+		}
 	};
 
 	try {
@@ -92,10 +88,9 @@
 
 public void test_getItemCount() {
 	int number = 10;
-	ExpandItem item;
 	for (int i = 0; i < number; i++) {
 		assertTrue(":a:" + i, expandBar.getItemCount() == i);
-	  	item = new ExpandItem(expandBar, 0);
+	  	new ExpandItem(expandBar, 0);
 	}
 }
 
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ExpandItem.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ExpandItem.java
index 9784a7b..920b921 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ExpandItem.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ExpandItem.java
@@ -36,10 +36,6 @@
 	setWidget(expandItem);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_ExpandItemI() {
 	try {
 		new ExpandItem(null, SWT.NULL);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_FileDialog.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_FileDialog.java
index 006caca..61a4d15 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_FileDialog.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_FileDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -36,13 +36,9 @@
 	setDialog(fileDialog);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Shell() {
 	// Test FileDialog(Shell)
-	FileDialog fd = new FileDialog(shell);
+	new FileDialog(shell);
 	try {
 		new FileDialog(null);
 		fail("No exception thrown for parent == null");
@@ -55,14 +51,31 @@
 	// Test FileDialog(Shell, int)
 	FileDialog fd;
 	fd = new FileDialog(shell, SWT.NULL);
-	assertTrue(fd.getStyle()==SWT.NULL);
+	int style = fd.getStyle();
+	style &= ~SWT.LEFT_TO_RIGHT;
+	style &= ~SWT.RIGHT_TO_LEFT;
+	assertTrue(style==SWT.APPLICATION_MODAL);
+	
 	fd = new FileDialog(shell, SWT.APPLICATION_MODAL);
-	assertTrue(fd.getStyle()==SWT.APPLICATION_MODAL);
+	style = fd.getStyle();
+	style &= ~SWT.LEFT_TO_RIGHT;
+	style &= ~SWT.RIGHT_TO_LEFT;
+	assertTrue(style==SWT.APPLICATION_MODAL);
+	
 	fd = new FileDialog(shell, SWT.PRIMARY_MODAL);
-	assertTrue(fd.getStyle()==SWT.PRIMARY_MODAL);
+	style = fd.getStyle();
+	style &= ~SWT.LEFT_TO_RIGHT;
+	style &= ~SWT.RIGHT_TO_LEFT;
+	assertTrue(style==SWT.PRIMARY_MODAL);
+	
 	fd = new FileDialog(shell, SWT.SYSTEM_MODAL);
-	assertTrue(fd.getStyle()==SWT.SYSTEM_MODAL);
+	style = fd.getStyle();
+	style &= ~SWT.LEFT_TO_RIGHT;
+	style &= ~SWT.RIGHT_TO_LEFT;
+	assertTrue(style==SWT.SYSTEM_MODAL);
 }
+
+
 public void test_getFileName() {
 	//	tested in test_setFileNameLjava_lang_String()
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_FontDialog.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_FontDialog.java
index 1079d95..ea3ab56 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_FontDialog.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_FontDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -37,11 +37,8 @@
 	setDialog(fontDialog);
 }
 
-protected void tearDown() {
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Shell() {
-	FontDialog fd = new FontDialog(shell);
+	new FontDialog(shell);
 	try {
 		new FontDialog(null);
 		fail("No exception thrown for parent == null");
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Group.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Group.java
index be28397..66b6795 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Group.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Group.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -36,10 +36,6 @@
 	setWidget(group);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	try {
 		group = new Group(null, 0);
@@ -70,7 +66,7 @@
 	for (int i = 0; i < cases.length; i++) {
 		group.setText(cases[i]);
 		assertTrue("case: " + String.valueOf(i), group.getText().equals(cases[i]));
-	};
+	}
 }
 
 public static Test suite() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Label.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Label.java
index d3c0060..da66827 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Label.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Label.java
@@ -37,21 +37,6 @@
 	setWidget(label);
 }
 
-protected void tearDown() {
-//	super.tearDown();
-
-	if (label != null) {
-		assertEquals(shell.isDisposed(), false);
-		assertEquals(label.isDisposed(), false);
-	}
-
-	shell.dispose();
-	if (label != null) {
-		assertTrue(shell.isDisposed());
-		assertTrue(label.isDisposed());
-	}
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI(){
 	try {
 		label = new Label(null, 0);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Layout.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Layout.java
index a175781..7d508e9 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Layout.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Layout.java
@@ -34,6 +34,7 @@
 }
 
 protected void setUp() {
+	super.setUp();
 	shell = new Shell();
 	composite = new Composite(shell, 0);
 }
@@ -45,6 +46,7 @@
 	if (shell != null) {
 		shell.dispose();
 	}
+	super.tearDown();
 }
 
 public void test_Constructor() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Link.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Link.java
index 0c17e63..58dd87d 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Link.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Link.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -40,10 +40,6 @@
 	setWidget(link);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	// Test Link(Composite parent, int style)
 	link = new Link(shell, SWT.NULL);
@@ -65,9 +61,9 @@
 	SelectionListener listener = new SelectionListener() {
 		public void widgetSelected(SelectionEvent e) {
 			listenerCalled = true;
-		};
+		}
 		public void widgetDefaultSelected(SelectionEvent e) {
-		};
+		}
 	};
 	
 	try {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_List.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_List.java
index 4917aa9..091981d 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_List.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_List.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -41,10 +41,6 @@
 	setWidget(list);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	try {
 		list = new List(null, 0);
@@ -220,8 +216,6 @@
 
 public void test_deselect$I() {
 	String[] items = { "item0", "item1", "item2", "item3" };
-	String[] empty = {
-	};
 	list.setItems(items);
 	list.setSelection(items);
 	assertSame(":a:", list.getSelection(), items);
@@ -298,8 +292,6 @@
 	list.setItems(items);
 
 	String[] items2 = { "item0", "item1", "item2", "item3" };
-	String[] empty = {
-	};
 	list.setItems(items2);
 	list.setSelection(items2);
 	assertSame(items2, list.getSelection());
@@ -354,8 +346,6 @@
 	// done
 
 	String[] items2 = { "item0", "item1", "item2", "item3" };
-	String[] empty = {
-	};
 	list.setItems(items2);
 	list.setSelection(items2);
 	assertSame(":a:", items2, list.getSelection());
@@ -471,18 +461,15 @@
 
 public void test_getItemI() {
 	String[] items = { "item0", "item1", "item2", "item3" };
-	String[] empty = {
-	};
 	list.setItems(items);
-	String item = null;
 	try {
-		item = list.getItem(5);
+		list.getItem(5);
 		fail("No exception thrown");
 	} catch (IllegalArgumentException e) {
 	}
 
 	try {
-		item = list.getItem(-1);
+		list.getItem(-1);
 		fail("No exception thrown for index < 0");
 	} catch (IllegalArgumentException e) {
 	}
@@ -493,13 +480,13 @@
 	setSingleList();
 	list.setItems(items);
 	try {
-		item = list.getItem(5);
+		list.getItem(5);
 		fail("No exception thrown");
 	} catch (IllegalArgumentException e) {
 	}
 	
 	try {
-		item = list.getItem(-1);
+		list.getItem(-1);
 		fail("No exception thrown for index < 0");
 	} catch (IllegalArgumentException e) {
 	}
@@ -734,9 +721,8 @@
 	assertEquals(list.indexOf("text3"), 2);
 	assertEquals(list.indexOf("text4"), -1);
 
-	int ind;
 	try {
-		ind = list.indexOf(null);
+		list.indexOf(null);
 		fail("No exception thrown for item == null");
 	} catch (IllegalArgumentException e) {
 	}
@@ -760,7 +746,7 @@
 
 	
 	try {
-		ind = list.indexOf(null);
+		list.indexOf(null);
 		fail("No exception thrown");
 	} catch (IllegalArgumentException e) {
 	}
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Listener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Listener.java
index 64bec76..db61448 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Listener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Listener.java
@@ -28,12 +28,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_handleEventLorg_eclipse_swt_widgets_Event() {
 	warnUnimpl("Test test_handleEventLorg_eclipse_swt_widgets_Event not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Menu.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Menu.java
index 18fc1a1..df4ce22 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Menu.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Menu.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -38,13 +38,9 @@
 	setWidget(menu);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Control() {
 	Composite comp = new Composite(shell, SWT.NULL);
-	Menu testMenu = new Menu(comp);
+	new Menu(comp);
 	comp.dispose();
 }
 
@@ -62,8 +58,7 @@
 }
 
 public void test_ConstructorLorg_eclipse_swt_widgets_Menu() {
-	Menu newMenu;
-	newMenu = new Menu(menu);
+	new Menu(menu);
 }
 
 public void test_ConstructorLorg_eclipse_swt_widgets_MenuItem() {
@@ -85,7 +80,7 @@
 	HelpListener listener = new HelpListener() {
 		public void helpRequested(HelpEvent e) {
 			listenerCalled = true;
-		};
+		}
 	};
 	
 	try {
@@ -115,10 +110,10 @@
 	MenuListener menuListener = new MenuListener() {
 		public void menuShown(MenuEvent e) {
 			listenerCalled = true;
-		};
+		}
 		public void menuHidden(MenuEvent e) {
 			listenerCalled = true;
-		};
+		}
 	};
 
 	try {
@@ -157,10 +152,9 @@
 
 public void test_getItemCount() {
 	int number = 10;
-	MenuItem ti;
 	for (int i = 0; i<number ; i++){
 		assertEquals(menu.getItemCount(), i);
-	  	ti = new MenuItem(menu, 0);
+	  	new MenuItem(menu, 0);
 	}
 }
 
@@ -240,15 +234,16 @@
 	// If we add menu items to the menu then a second problem is encountered 
 	// because menu.setVisible() enters into a modal loop and execution of 
 	// the JUnit test case will not continue until the menu is selected and closed.
-	if (true) return;
-	menu.setVisible(true);
-	assertTrue(menu.isVisible());
-
-	// api not implemented yet
-	if (fCheckVisibility) {
-		menu.setVisible(false);
-		assertEquals(menu.isVisible(), false);
-	}
+	return;
+	
+//	menu.setVisible(true);
+//	assertTrue(menu.isVisible());
+//
+//	// api not implemented yet
+//	if (fCheckVisibility) {
+//		menu.setVisible(false);
+//		assertEquals(menu.isVisible(), false);
+//	}
 }
 
 public void test_removeHelpListenerLorg_eclipse_swt_events_HelpListener() {
@@ -297,14 +292,15 @@
 	// If we add menu items to the menu then a second problem is encountered 
 	// because menu.setVisible() enters into a modal loop and execution of 
 	// the JUnit test case will not continue until the menu is selected and closed.
-	if (true) return;
-	menu.setVisible(true);
-	assertTrue(menu.getVisible());
-	// API not implemented yet 
-	if (fCheckVisibility) {
-		menu.setVisible(false);
-		assertEquals(menu.getVisible(), false);
-	}
+	return;
+	
+//	menu.setVisible(true);
+//	assertTrue(menu.getVisible());
+//	// API not implemented yet 
+//	if (fCheckVisibility) {
+//		menu.setVisible(false);
+//		assertEquals(menu.getVisible(), false);
+//	}
 }
 
 public static Test suite() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_MenuItem.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_MenuItem.java
index 380b56e..b129f45 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_MenuItem.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_MenuItem.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -38,10 +38,6 @@
 	setWidget(menuItem);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_MenuI() {
 	MenuItem mItem = new MenuItem(menu, SWT.NULL);
 	assertNotNull(mItem);
@@ -83,7 +79,7 @@
 	ArmListener listener = new ArmListener() {
 		public void widgetArmed(ArmEvent e) {
 			listenerCalled = true;
-		};
+		}
 	};
 	
 	try {
@@ -112,7 +108,7 @@
 	HelpListener listener = new HelpListener() {
 		public void helpRequested(HelpEvent e) {
 			listenerCalled = true;
-		};
+		}
 	};
 	
 	try {
@@ -141,9 +137,9 @@
 	SelectionListener listener = new SelectionListener() {
 		public void widgetSelected(SelectionEvent e) {
 			listenerCalled = true;
-		};
+		}
 		public void widgetDefaultSelected(SelectionEvent e) {
-		};
+		}
 	};
 	
 	try {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_MessageBox.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_MessageBox.java
index 2a73067..3519be1 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_MessageBox.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_MessageBox.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -36,10 +36,6 @@
 	setDialog(messageBox);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 /**
  * Possible exceptions:
  * 
@@ -52,7 +48,7 @@
  * </ul>
  */
 public void test_ConstructorLorg_eclipse_swt_widgets_Shell(){
-	MessageBox mb = new MessageBox(shell);
+	new MessageBox(shell);
 	try {
 		new MessageBox(null);
 		fail("No exception thrown for parent == null");
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Monitor.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Monitor.java
index 6584aa4..f3dd42b 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Monitor.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Monitor.java
@@ -31,14 +31,12 @@
 }
 
 protected void setUp() {
+	super.setUp();
 	display = Display.getDefault();
 	monitors = display.getMonitors();
 	primary = display.getPrimaryMonitor();
 }
 
-protected void tearDown() {
-}
-
 public void test_equalsLjava_lang_Object() {
 	int i;
 	for (i = 0; i < monitors.length; i++) {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ProgressBar.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ProgressBar.java
index 640b3e1..f977f74 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ProgressBar.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ProgressBar.java
@@ -36,10 +36,6 @@
 	setWidget(progressBar);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	try {
 		progressBar = new ProgressBar(null, 0);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Sash.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Sash.java
index 8ff51a4..07926b6 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Sash.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Sash.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -36,10 +36,6 @@
 	setWidget(sash);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	try {
 		sash = new Sash(null, 0);
@@ -108,9 +104,9 @@
 private void createSash() {
     tearDown();
     super.setUp();
-    Button b1 = new Button(shell, SWT.PUSH);
+    new Button(shell, SWT.PUSH);
     Sash sash = new Sash(shell, SWT.VERTICAL);
-    Button b2 = new Button(shell, SWT.PUSH);
+    new Button(shell, SWT.PUSH);
     setWidget(sash);
 }
 
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Scale.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Scale.java
index 7d41248..0f6562f5 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Scale.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Scale.java
@@ -37,10 +37,6 @@
 	setWidget(scale);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	try {
 		scale = new Scale(null, 0);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ScrollBar.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ScrollBar.java
index baa0459..ab86ed4 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ScrollBar.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ScrollBar.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -41,9 +41,6 @@
 	shell.open();
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
 protected String valueString(int[] intArray) {
 	return " ("+intArray[1]+","+intArray[2]+","+intArray[3]+","+intArray[4]+")";
 }
@@ -63,6 +60,8 @@
 	catch (IllegalArgumentException e) {
 		exceptionThrown = true;
 	}
+	assertTrue("Expected exception not thrown", exceptionThrown);
+	exceptionThrown = false;
 	scrollBar.addSelectionListener(listener);
 	scrollBar.setSelection(100);
 	assertTrue(":a:", listenerCalled == false);
@@ -73,6 +72,7 @@
 	catch (IllegalArgumentException e) {
 		exceptionThrown = true;
 	}
+	assertTrue("Expected exception not thrown", exceptionThrown);
 }
 
 public void test_dispose() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Scrollable.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Scrollable.java
index 93eb2e7..39e99fa 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Scrollable.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Scrollable.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -29,14 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-	super.setUp();
-}
-
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	// abstract class
 }
@@ -50,11 +42,11 @@
 }
 
 public void test_getHorizontalBar() {
-	ScrollBar hbar = scrollable.getHorizontalBar();
+	scrollable.getHorizontalBar();
 }
 
 public void test_getVerticalBar() {
-	ScrollBar vbar = scrollable.getVerticalBar();
+	scrollable.getVerticalBar();
 }
 
 public static Test suite() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Shell.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Shell.java
index c87dbdb..abbce87 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Shell.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Shell.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -43,10 +43,6 @@
 	assertTrue(testShell.getParent() == shell);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_Constructor() {
 	Shell newShell = new Shell();
 	assertNotNull("a: ", newShell.getDisplay());
@@ -124,6 +120,8 @@
 	catch (IllegalArgumentException e) {
 		exceptionThrown = true;
 	}
+	assertTrue("Expected exception not thrown", exceptionThrown);
+	exceptionThrown = false;
 	shell.addShellListener(listener);
 	shell.forceActive();
 	/* can't assume listener is synchronously called when forceActive returned */
@@ -140,6 +138,7 @@
 	catch (IllegalArgumentException e) {
 		exceptionThrown = true;
 	}
+	assertTrue("Expected exception not thrown", exceptionThrown);
 }
 
 public void test_close() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Slider.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Slider.java
index b15fa60..8db604a 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Slider.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Slider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -38,9 +38,6 @@
 	setWidget(slider);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
 protected String valueString(int[] intArray) {
 	return " ("+intArray[1]+","+intArray[2]+","+intArray[3]+","+intArray[4]+")";
 }
@@ -74,6 +71,8 @@
 	catch (IllegalArgumentException e) {
 		exceptionThrown = true;
 	}
+	assertTrue("Expected exception not thrown", exceptionThrown);
+	exceptionThrown = false;
 	slider.addSelectionListener(listener);
 	slider.setSelection(0);
 	assertTrue(":a:", listenerCalled == false);
@@ -84,6 +83,7 @@
 	catch (IllegalArgumentException e) {
 		exceptionThrown = true;
 	}
+	assertTrue("Expected exception not thrown", exceptionThrown);
 }
 
 public void test_computeSizeIIZ() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Synchronizer.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Synchronizer.java
index 729bf40..8524d2f 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Synchronizer.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Synchronizer.java
@@ -29,12 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_Display() {
 	// tested in Test_org_eclipse_swt_widgets_Display.test_setSynchronizerLorg_eclipse_swt_widgets_Synchronizer
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TabFolder.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TabFolder.java
index e0418ec..09628d1 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TabFolder.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TabFolder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -37,14 +37,9 @@
 	makeCleanEnvironment();
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
-	TabFolder newTabFolder;
 	try {
-		newTabFolder = new TabFolder(null, 0);
+		new TabFolder(null, 0);
 		fail("No exception thrown for parent == null");
 	}
 	catch (IllegalArgumentException e) {
@@ -69,10 +64,9 @@
 
 public void test_getItemCount() {
 	int number = 10;
-	TabItem ti;
 	for (int i = 0; i<number ; i++){
 		assertTrue(":a:" + i, tabFolder.getItemCount()==i);
-	  	ti = new TabItem(tabFolder, 0);
+	  	new TabItem(tabFolder, 0);
 	}
 }
 
@@ -222,11 +216,25 @@
 	warnUnimpl("Test test_setSelection$Lorg_eclipse_swt_widgets_TabItem not written");
 }
 
+public void test_setSelectionEmpty() {
+	int number = 10;
+	for (int i = 0; i<number ; i++){
+	  	new TabItem(tabFolder, 0);
+	}
+	for (int i = 0; i<number ; i++){
+		tabFolder.setSelection(i);
+		assertEquals(i, tabFolder.getSelectionIndex());
+	}
+	
+	makeCleanEnvironment();
+	tabFolder.setSelection(-1);
+	assertEquals(0, tabFolder.getSelection().length);	
+}
+
 public void test_setSelectionI() {
 	int number = 10;
-	TabItem ti;
 	for (int i = 0; i<number ; i++){
-	  	ti = new TabItem(tabFolder, 0);
+	  	new TabItem(tabFolder, 0);
 	}
 	for (int i = 0; i<number ; i++){
 		tabFolder.setSelection(i);
@@ -237,7 +245,7 @@
 	makeCleanEnvironment();
 	
 	for (int i = 0; i<number ; i++){
-	  	ti = new TabItem(tabFolder, 0);
+	  	new TabItem(tabFolder, 0);
 	  	assertEquals("i=" + i, 0, tabFolder.getSelectionIndex());
 	}
 
@@ -308,9 +316,6 @@
 	tabFolder.setSelection(items[0]);
 	assertEquals(new TabItem[]{items[0]}, tabFolder.getSelection());
 	
-	tabFolder.setSelection(new TabItem[]{});
-	assertEquals(new TabItem[]{}, tabFolder.getSelection());
-		
 	tabFolder.setSelection(new TabItem[] {items[0]});
 	assertEquals(new TabItem[] {items[0]}, tabFolder.getSelection());
 
@@ -368,6 +373,7 @@
 	methodNames.addElement("test_removeSelectionListenerLorg_eclipse_swt_events_SelectionListener");
 	methodNames.addElement("test_setSelection$Lorg_eclipse_swt_widgets_TabItem");
 	methodNames.addElement("test_setSelectionI");
+	methodNames.addElement("test_setSelectionEmpty");
 	methodNames.addElement("test_consistency_KeySelection");
 	methodNames.addElement("test_consistency_MouseSelection");
 	methodNames.addElement("test_consistency_PgupSelection");
@@ -392,6 +398,7 @@
 	else if (getName().equals("test_removeSelectionListenerLorg_eclipse_swt_events_SelectionListener")) test_removeSelectionListenerLorg_eclipse_swt_events_SelectionListener();
 	else if (getName().equals("test_setSelection$Lorg_eclipse_swt_widgets_TabItem")) test_setSelection$Lorg_eclipse_swt_widgets_TabItem();
 	else if (getName().equals("test_setSelectionI")) test_setSelectionI();
+	else if (getName().equals("test_setSelectionEmpty")) test_setSelectionEmpty();
 	else if (getName().equals("test_consistency_KeySelection")) test_consistency_KeySelection();
 	else if (getName().equals("test_consistency_MouseSelection")) test_consistency_MouseSelection();
 	else if (getName().equals("test_consistency_PgdwnSelection")) test_consistency_PgdwnSelection();
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TabItem.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TabItem.java
index 3abad72..54235b3 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TabItem.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TabItem.java
@@ -38,10 +38,6 @@
 	setWidget(tabItem);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_TabFolderI() {
 	try {
 		new TabItem(null, SWT.NULL);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Table.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Table.java
index 1567e25..4821677 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Table.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Table.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -38,10 +38,6 @@
 	makeCleanEnvironment(false); // by default, use multi-select table.	
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	try {
 		new Table(null, 0);
@@ -325,7 +321,7 @@
 	int[] cases = {0, 10, 100};
 	for (int j = 0; j < cases.length; j++) {
 		for (int i = 0; i < cases[j]; i++) {
-			TableItem ti = new TableItem(table, 0);
+			new TableItem(table, 0);
 		}
 		assertEquals("j="+ j, cases[j], table.getItemCount());
 		table.removeAll();
@@ -335,7 +331,7 @@
 	makeCleanEnvironment(true);	
 	for (int j = 0; j < cases.length; j++) {
 		for (int i = 0; i < cases[j]; i++) {
-			TableItem ti = new TableItem(table, 0);
+			new TableItem(table, 0);
 		}
 		assertEquals("j="+ j, cases[j], table.getItemCount());
 		table.removeAll();
@@ -401,7 +397,7 @@
 	int[] cases = {0, 10, 100};
 	for (int j = 0; j < cases.length; j++) {
 		for (int i = 0; i < cases[j]; i++) {
-			TableItem ti = new TableItem(table, 0);
+			new TableItem(table, 0);
 		}
 		assertEquals("j=" + j, cases[j], table.getItems().length);
 		table.removeAll();
@@ -424,7 +420,7 @@
 	
 	for (int j = 0; j < cases.length; j++) {
 		for (int i = 0; i < cases[j]; i++) {
-			TableItem ti = new TableItem(table, 0);
+			new TableItem(table, 0);
 		}
 		assertEquals("j=" + j, cases[j], table.getItems().length);
 		table.removeAll();
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TableColumn.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TableColumn.java
index f2ac29b..a0c5a50 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TableColumn.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TableColumn.java
@@ -38,10 +38,6 @@
 	setWidget(tableColumn);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_TableI() {
 	try {
 		new TableColumn(null, SWT.NULL);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TableItem.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TableItem.java
index 35b2ecf..e3331dc 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TableItem.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TableItem.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -36,10 +36,6 @@
 	makeCleanEnvironment();
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_TableI() {
 	try {
 		new TableItem(null, SWT.NULL);
@@ -233,7 +229,7 @@
 	makeCleanEnvironment();
 	
 	tableItem.setText("hello");
-	TableColumn column = new TableColumn(table, SWT.RIGHT);
+	new TableColumn(table, SWT.RIGHT);
 	bounds = tableItem.getBounds(0);
 	assertTrue(":3s:", bounds.x > 0 && bounds.height > 0 && bounds.width  == 0);
 	
@@ -318,7 +314,7 @@
 	tableItem2 = new TableItem(table2, SWT.NONE);
 	
 	tableItem2.setText("hello");
-	column = new TableColumn(table2, SWT.RIGHT);
+	new TableColumn(table2, SWT.RIGHT);
 	bounds = tableItem2.getBounds(0);
 	assertTrue(":4s:", bounds.x > 0 && bounds.height > 0 && bounds.width  == 0);
 }
@@ -372,11 +368,11 @@
 	makeCleanEnvironment();
 	
 	Image image = images[0];	
-	int imageWidth = image.getBounds().width;
-	int imageHeight;
+//	int imageWidth = image.getBounds().width;
+//	int imageHeight;
 	
 	tableItem.setImage(0, image);
-	imageHeight = table.getItemHeight() - table.getGridLineWidth();
+//	imageHeight = table.getItemHeight() - table.getGridLineWidth();
 	assertEquals(new Rectangle(0, 0, 0, 0), tableItem.getImageBounds(-1));
 	
 	bounds = tableItem.getImageBounds(0);
@@ -391,9 +387,9 @@
 	table2 = new Table(shell, SWT.CHECK);
 	tableItem2.dispose();
 	tableItem2 = new TableItem(table2, SWT.NULL);
-	Rectangle imageBounds = image.getBounds();
-	imageWidth = imageBounds.width; 	tableItem2.setImage(0, image);
-	imageHeight = table2.getItemHeight() - table2.getGridLineWidth();
+//	Rectangle imageBounds = image.getBounds();
+//	imageWidth = imageBounds.width; 	tableItem2.setImage(0, image);
+//	imageHeight = table2.getItemHeight() - table2.getGridLineWidth();
 	assertEquals(new Rectangle(0, 0, 0, 0), tableItem2.getImageBounds(-1));
 	
 	bounds = tableItem2.getImageBounds(0);	// bounds.width should be check box width if they are wider than image
@@ -409,10 +405,10 @@
 	tableItem2.dispose();
 	tableItem2 = new TableItem(table2, SWT.NULL);
 	image = images[1];
-	imageBounds = image.getBounds();
-	imageWidth = imageBounds.width;
+//	imageBounds = image.getBounds();
+//	imageWidth = imageBounds.width;
  	tableItem2.setImage(0, image);
-	imageHeight = table2.getItemHeight() - table2.getGridLineWidth();
+//	imageHeight = table2.getItemHeight() - table2.getGridLineWidth();
 	assertEquals(new Rectangle(0, 0, 0, 0), tableItem2.getImageBounds(-1));
  	bounds = tableItem2.getImageBounds(0);	// bounds.width should be check box width if check box is wider than image
 //	assertTrue(":b:", bounds.x > 0 && bounds.width > 0 && bounds.height == imageHeight);
@@ -451,8 +447,8 @@
 	assertEquals(tableItem.getBackground(), tableItem.getBackground(10));
 	
 	// with columns
-	TableColumn column1 = new TableColumn(table, SWT.LEFT);
-	TableColumn column2 = new TableColumn(table, SWT.LEFT);
+	new TableColumn(table, SWT.LEFT);
+	new TableColumn(table, SWT.LEFT);
 	
 	// index beyond range - no error
 	tableItem.setBackground(10, red);
@@ -548,8 +544,8 @@
 	assertTrue(tableItem.getFont().equals(tableItem.getFont(10)));
 	
 	// with columns
-	TableColumn column1 = new TableColumn(table, SWT.LEFT);
-	TableColumn column2 = new TableColumn(table, SWT.LEFT);
+	new TableColumn(table, SWT.LEFT);
+	new TableColumn(table, SWT.LEFT);
 	
 	// index beyond range - no error
 	tableItem.setFont(10, font);
@@ -599,8 +595,8 @@
 	assertEquals(tableItem.getForeground(), tableItem.getForeground(10));
 	
 	// with columns
-	TableColumn column1 = new TableColumn(table, SWT.LEFT);
-	TableColumn column2 = new TableColumn(table, SWT.LEFT);
+	new TableColumn(table, SWT.LEFT);
+	new TableColumn(table, SWT.LEFT);
 	
 	// index beyond range - no error
 	tableItem.setForeground(10, red);
@@ -671,7 +667,7 @@
 	int columnCount = table.getColumnCount();
 	if (columnCount < texts.length) {
 		for (int i = columnCount; i < texts.length; i++){
-			TableColumn column = new TableColumn(table, SWT.NONE);
+			new TableColumn(table, SWT.NONE);
 		}
 	}
 	TableColumn[] columns = table.getColumns();
@@ -703,8 +699,8 @@
 	assertEquals(null, tableItem.getImage(10));
 	
 	// with columns
-	TableColumn column1 = new TableColumn(table, SWT.LEFT);
-	TableColumn column2 = new TableColumn(table, SWT.LEFT);
+	new TableColumn(table, SWT.LEFT);
+	new TableColumn(table, SWT.LEFT);
 	
 	// index beyond range - no error
 	tableItem.setImage(10, images[0]);
@@ -733,7 +729,7 @@
 }
 
 public void test_setImageIndentI() {
-	if (SwtJunit.isCarbon || SwtJunit.isGTK) {
+	if (SwtJunit.isCarbon || SwtJunit.isCocoa || SwtJunit.isGTK) {
 		//setImageIndent not implemented on Carbon
 		tableItem.setImageIndent(1);
 		return; 
@@ -778,7 +774,7 @@
 	int columnCount = table.getColumnCount();
 	if (columnCount < images.length) {
 		for (int i = columnCount; i < images.length; i++){
-			TableColumn column = new TableColumn(table, SWT.NONE);
+			new TableColumn(table, SWT.NONE);
 		}
 	}
 	TableColumn[] columns = table.getColumns();
@@ -819,7 +815,7 @@
 	int columnCount = table.getColumnCount();
 	if (columnCount < images.length) {
 		for (int i = columnCount; i < images.length; i++){
-			TableColumn column = new TableColumn(table, SWT.NONE);
+			new TableColumn(table, SWT.NONE);
 		}
 	}
 	TableColumn[] columns = table.getColumns();
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Text.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Text.java
index f83c309..0eea772 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Text.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Text.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2007 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
@@ -40,11 +40,6 @@
 	makeCleanEnvironment(false); // use multi-line by default
 }
 
-protected void tearDown() {
-	super.tearDown();
-	shell.dispose();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	try {
 		text = new Text(null, 0);
@@ -73,6 +68,7 @@
 		exceptionThrown = true;
 	}
 	assertTrue("Expected exception not thrown", exceptionThrown);
+	exceptionThrown = false;
 	
 	// test whether all content modifying API methods send a Modify event	
 	text.addModifyListener(listener);
@@ -91,6 +87,7 @@
 	catch (IllegalArgumentException e) {
 		exceptionThrown = true;
 	}
+	assertTrue("Expected exception not thrown", exceptionThrown);
 }
 
 public void test_addSelectionListenerLorg_eclipse_swt_events_SelectionListener() {
@@ -109,6 +106,8 @@
 	catch (IllegalArgumentException e) {
 		exceptionThrown = true;
 	}
+	assertTrue("Expected exception not thrown", exceptionThrown);
+	exceptionThrown = false;
 	text.addSelectionListener(listener);
 	text.setText("12345");
 	text.setSelection(1,3);
@@ -120,6 +119,7 @@
 	catch (IllegalArgumentException e) {
 		exceptionThrown = true;
 	}
+	assertTrue("Expected exception not thrown", exceptionThrown);
 }
 
 public void test_addVerifyListenerLorg_eclipse_swt_events_VerifyListener() {
@@ -583,6 +583,22 @@
 	String string = "012345" + delimiterString + "67890";
 	text.setText(string);
 	assertEquals(string, text.getText());
+	
+	// tests a SINGLE line text editor
+	makeCleanEnvironment(true);
+	assertEquals("", text.getText());
+	text.setText("01234567890");
+	assertEquals("01234567890", text.getText());
+	text.setText("");
+	assertEquals("", text.getText());
+	
+	// tests a SINGLE line text editor with border
+	makeCleanEnvironment(true, true);
+	assertEquals("", text.getText());
+	text.setText("01234567890");
+	assertEquals("01234567890", text.getText());
+	text.setText("");
+	assertEquals("", text.getText());
 }
 
 public void test_getTextII() {
@@ -594,6 +610,7 @@
 	assertEquals("", text.getText(-1,0));
 	assertEquals("", text.getText(0,0));
 	assertEquals("", text.getText(0,1));
+	assertEquals("", text.getText(10,20));
 	
 	text.setText("a");
 	assertEquals("", text.getText(-4,-4));
@@ -603,12 +620,14 @@
 	assertEquals("a", text.getText(-1,0));
 	assertEquals("a", text.getText(0,0));
 	assertEquals("a", text.getText(0,1));
+	assertEquals("", text.getText(10,20));
 	
 	text.setText("01234567890");
 	assertEquals("345", text.getText(3, 5));
 	assertEquals("012", text.getText(-1, 2));
 	assertEquals("34567890", text.getText(3, 100));
 	assertEquals("", text.getText(5, 3));
+	assertEquals("0", text.getText(10,20));
 	
 	text.setText("");
 	text.setEchoChar('*');
@@ -621,6 +640,7 @@
 	assertEquals("", text.getText(-1,0));
 	assertEquals("", text.getText(0,0));
 	assertEquals("", text.getText(0,1));
+	assertEquals("", text.getText(10,20));
 	
 	text.setText("a");
 	assertEquals("", text.getText(-4,-4));
@@ -630,12 +650,132 @@
 	assertEquals("a", text.getText(-1,0));
 	assertEquals("a", text.getText(0,0));
 	assertEquals("a", text.getText(0,1));
+	assertEquals("", text.getText(10,20));
 	
 	text.setText("01234567890");
 	assertEquals("345", text.getText(3, 5));
 	assertEquals("012", text.getText(-1, 2));
 	assertEquals("34567890", text.getText(3, 100));
-	assertEquals("", text.getText(5, 3));	
+	assertEquals("", text.getText(5, 3));
+	assertEquals("0", text.getText(10,20));
+	
+	// tests a SINGLE line text editor
+	makeCleanEnvironment(true);
+	assertEquals("", text.getText());
+	assertEquals("", text.getText(-4,-4));
+	assertEquals("", text.getText(-4,-2));
+	assertEquals("", text.getText(-2,-1));
+	assertEquals("", text.getText(-1,-1));
+	assertEquals("", text.getText(-1,0));
+	assertEquals("", text.getText(0,0));
+	assertEquals("", text.getText(0,1));
+	assertEquals("", text.getText(10,20));
+	
+	text.setText("a");
+	assertEquals("", text.getText(-4,-4));
+	assertEquals("", text.getText(-4,-2));
+	assertEquals("", text.getText(-2,-1));
+	assertEquals("", text.getText(-1,-1));
+	assertEquals("a", text.getText(-1,0));
+	assertEquals("a", text.getText(0,0));
+	assertEquals("a", text.getText(0,1));
+	assertEquals("", text.getText(10,20));
+	
+	text.setText("01234567890");
+	assertEquals("345", text.getText(3, 5));
+	assertEquals("012", text.getText(-1, 2));
+	assertEquals("34567890", text.getText(3, 100));
+	assertEquals("", text.getText(5, 3));
+	assertEquals("0", text.getText(10,20));
+	
+	text.setText("");
+	text.setEchoChar('*');
+	
+	assertEquals("", text.getText());
+	assertEquals("", text.getText(-4,-4));
+	assertEquals("", text.getText(-4,-2));
+	assertEquals("", text.getText(-2,-1));
+	assertEquals("", text.getText(-1,-1));
+	assertEquals("", text.getText(-1,0));
+	assertEquals("", text.getText(0,0));
+	assertEquals("", text.getText(0,1));
+	assertEquals("", text.getText(10,20));
+	
+	text.setText("a");
+	assertEquals("", text.getText(-4,-4));
+	assertEquals("", text.getText(-4,-2));
+	assertEquals("", text.getText(-2,-1));
+	assertEquals("", text.getText(-1,-1));
+	assertEquals("a", text.getText(-1,0));
+	assertEquals("a", text.getText(0,0));
+	assertEquals("a", text.getText(0,1));
+	assertEquals("", text.getText(10,20));
+	
+	text.setText("01234567890");
+	assertEquals("345", text.getText(3, 5));
+	assertEquals("012", text.getText(-1, 2));
+	assertEquals("34567890", text.getText(3, 100));
+	assertEquals("", text.getText(5, 3));
+	assertEquals("0", text.getText(10,20));
+	
+	// tests a SINGLE line text editor
+	makeCleanEnvironment(true, true);
+	assertEquals("", text.getText());
+	assertEquals("", text.getText(-4,-4));
+	assertEquals("", text.getText(-4,-2));
+	assertEquals("", text.getText(-2,-1));
+	assertEquals("", text.getText(-1,-1));
+	assertEquals("", text.getText(-1,0));
+	assertEquals("", text.getText(0,0));
+	assertEquals("", text.getText(0,1));
+	assertEquals("", text.getText(10,20));
+	
+	text.setText("a");
+	assertEquals("", text.getText(-4,-4));
+	assertEquals("", text.getText(-4,-2));
+	assertEquals("", text.getText(-2,-1));
+	assertEquals("", text.getText(-1,-1));
+	assertEquals("a", text.getText(-1,0));
+	assertEquals("a", text.getText(0,0));
+	assertEquals("a", text.getText(0,1));
+	assertEquals("", text.getText(10,20));
+	
+	text.setText("01234567890");
+	assertEquals("345", text.getText(3, 5));
+	assertEquals("012", text.getText(-1, 2));
+	assertEquals("34567890", text.getText(3, 100));
+	assertEquals("", text.getText(5, 3));
+	assertEquals("0", text.getText(10,20));
+	
+	text.setText("");
+	text.setEchoChar('*');
+	
+	assertEquals("", text.getText());
+	assertEquals("", text.getText(-4,-4));
+	assertEquals("", text.getText(-4,-2));
+	assertEquals("", text.getText(-2,-1));
+	assertEquals("", text.getText(-1,-1));
+	assertEquals("", text.getText(-1,0));
+	assertEquals("", text.getText(0,0));
+	assertEquals("", text.getText(0,1));
+	assertEquals("", text.getText(10,20));
+	
+	text.setText("a");
+	assertEquals("", text.getText(-4,-4));
+	assertEquals("", text.getText(-4,-2));
+	assertEquals("", text.getText(-2,-1));
+	assertEquals("", text.getText(-1,-1));
+	assertEquals("a", text.getText(-1,0));
+	assertEquals("a", text.getText(0,0));
+	assertEquals("a", text.getText(0,1));
+	assertEquals("", text.getText(10,20));
+	
+	text.setText("01234567890");
+	assertEquals("345", text.getText(3, 5));
+	assertEquals("012", text.getText(-1, 2));
+	assertEquals("34567890", text.getText(3, 100));
+	assertEquals("", text.getText(5, 3));
+	assertEquals("0", text.getText(10,20));
 }
 
 public void test_getTextLimit() {
@@ -1076,8 +1216,7 @@
 	catch (IllegalArgumentException e) {
 		exceptionThrown = true;
 	}
-	assertTrue(":c:", exceptionThrown == true);
-	exceptionThrown = false;
+	assertTrue(":c:", exceptionThrown);
 }
 
 public void test_setTextLjava_lang_String() {
@@ -1317,17 +1456,23 @@
  * 
  * @param single true if the new text widget should be single-line.
  */
+
 private void makeCleanEnvironment(boolean single) {
+	makeCleanEnvironment (single, false);
+}
+
+private void makeCleanEnvironment(boolean single, boolean border) {
 // this method must be private or protected so the auto-gen tool keeps it
 	if ( text != null ) text.dispose();
 
 	if ( single == true )
-		text = new Text(shell, SWT.SINGLE);	
+		text = new Text(shell, SWT.SINGLE | (border ? SWT.BORDER : SWT.NULL));	
 	else
-		text = new Text(shell, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL);
+		text = new Text(shell, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL | (border ? SWT.BORDER : SWT.NULL));
 	setWidget(text);
 	delimiterString = Text.DELIMITER;
 }
+
 protected void setWidget(Widget w) {
 	text = (Text)w;
 	super.setWidget(w);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ToolBar.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ToolBar.java
index 2d26268..8261bb9 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ToolBar.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ToolBar.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -38,10 +38,6 @@
 	setWidget(toolBar);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	try {
 		new ToolBar(null, 0);
@@ -61,10 +57,9 @@
 
 public void test_getItemCount() {
 	int number = 10;
-	ToolItem ti;
 	for (int i = 0; i<number ; i++){
 		assertTrue(":a:" + i, toolBar.getItemCount()==i);
-	  	ti = new ToolItem(toolBar, 0);
+	  	new ToolItem(toolBar, 0);
 	}
 }
 
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ToolItem.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ToolItem.java
index b324b01..f4ea0d9 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ToolItem.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ToolItem.java
@@ -38,10 +38,6 @@
 	setWidget(toolItem);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_ToolBarI() {
 	try {
 		new ToolItem(null, SWT.NULL);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Tracker.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Tracker.java
index 102d17b..0b86891 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Tracker.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Tracker.java
@@ -35,10 +35,6 @@
 	setWidget(tracker);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	warnUnimpl("Test test_ConstructorLorg_eclipse_swt_widgets_CompositeI not written");
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Tree.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Tree.java
index b555ca2..401b3a8 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Tree.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Tree.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -38,10 +38,6 @@
 	setWidget(tree);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	try {
 		tree = new Tree(null, 0);
@@ -57,7 +53,7 @@
 	cases = new int[]{0, 10, 100};
 	for (int j = 0; j < cases.length; j++) {
 		for (int i = 0; i < cases[j]; i++) {
-			TreeItem ti = new TreeItem(tree, 0);
+			new TreeItem(tree, 0);
 		}
 		assertEquals(cases[j], tree.getItemCount());
 		tree.removeAll();
@@ -390,14 +386,14 @@
 	tree.removeAll();
 	assertEquals(0, tree.getItemCount());
 	for (int i=0; i<8; i++) {
-		TreeItem item = new TreeItem(tree, SWT.NULL);
+		new TreeItem(tree, SWT.NULL);
 		assertEquals(i+1, tree.getItemCount());
 	}
 	assertEquals(8, tree.getItemCount());
 	assertEquals(4, tree.indexOf(tree.getItems()[4]));
 	tree.getItem(1).dispose();
 	assertEquals(7, tree.getItemCount());
-	TreeItem item = new TreeItem (tree, SWT.NULL, 0);
+	new TreeItem (tree, SWT.NULL, 0);
 	assertEquals(1, tree.indexOf(tree.getItems()[1]));
 	assertEquals(8, tree.getItemCount());
 	tree.removeAll();
@@ -604,17 +600,17 @@
 public void test_setTopItemLorg_eclipse_swt_widgets_TreeItem() {
 	tree.removeAll();
 	for (int i = 0; i < 10; i++) {
-		TreeItem item = new TreeItem(tree, 0);	
+		new TreeItem(tree, 0);	
 	}
 	TreeItem top = new TreeItem(tree, 0);
 	for (int i = 0; i < 10; i++) {
-		TreeItem item = new TreeItem(tree, 0);	
+		new TreeItem(tree, 0);	
 	}
 	tree.setSize(50,50);
 	shell.open();
 	tree.setTopItem(top);
 	for (int i = 0; i < 10; i++) {
-		TreeItem item = new TreeItem(tree, 0);	
+		new TreeItem(tree, 0);	
 	}
 	TreeItem top2 = tree.getTopItem();
 	shell.setVisible(false);
@@ -663,7 +659,7 @@
 	TreeItem[] items2 = new TreeItem[number];
 	for (int i = 0; i < number; i++) {
 		items2[i] = new TreeItem(tree2, 0);
-	};
+	}
 
 	for(int i=0; i<number; i++)
 		tree.showItem(items2[i]);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TreeColumn.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TreeColumn.java
index e6f0e50..09f9a2d 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TreeColumn.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TreeColumn.java
@@ -38,10 +38,6 @@
 	setWidget(treeColumn);
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_TreeI() {
 	try {
 		new TreeColumn(null, SWT.NULL);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TreeItem.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TreeItem.java
index 539b60f..984bcaf 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TreeItem.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TreeItem.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -36,10 +36,6 @@
 	makeCleanEnvironment();
 }
 
-protected void tearDown() {
-	super.tearDown();
-}
-
 public void test_ConstructorLorg_eclipse_swt_widgets_TreeI() {
 	try {
 		new TreeItem((TreeItem)null, SWT.NULL);
@@ -399,7 +395,7 @@
 	makeCleanEnvironment();
 	
 	treeItem.setText(string1);
-	TreeColumn column = new TreeColumn(tree, SWT.RIGHT);
+	new TreeColumn(tree, SWT.RIGHT);
 	bounds = treeItem.getBounds(0);
 	assertTrue(":3x:", bounds.x > 0 && bounds.height > stringExtent1.y && bounds.width  == 0);
 }
@@ -516,7 +512,7 @@
 	treeItem2 = new TreeItem(tree2, SWT.NONE);
 	
 	treeItem2.setText(string1);
-	TreeColumn column = new TreeColumn(tree2, SWT.RIGHT);
+	new TreeColumn(tree2, SWT.RIGHT);
 	bounds = treeItem2.getBounds(0);
 	assertTrue(":4x:", bounds.x > 0 && bounds.height > stringExtent1.y && bounds.width  == 0);
 }
@@ -587,11 +583,11 @@
 	makeCleanEnvironment();
 	
 	Image image = images[0];	
-	int imageWidth = image.getBounds().width;
-	int imageHeight;
+//	int imageWidth = image.getBounds().width;
+//	int imageHeight;
 	
 	treeItem.setImage(0, image);
-	imageHeight = tree.getItemHeight() - tree.getGridLineWidth();
+//	imageHeight = tree.getItemHeight() - tree.getGridLineWidth();
 	assertEquals(new Rectangle(0, 0, 0, 0), treeItem.getImageBounds(-1));
 	
 	bounds = treeItem.getImageBounds(0);
@@ -606,9 +602,9 @@
 	tree2 = new Tree(shell, SWT.CHECK);
 	treeItem2.dispose();
 	treeItem2 = new TreeItem(tree2, SWT.NULL);
-	Rectangle imageBounds = image.getBounds();
-	imageWidth = imageBounds.width; 	treeItem2.setImage(0, image);
-	imageHeight = tree2.getItemHeight() - tree2.getGridLineWidth();
+//	Rectangle imageBounds = image.getBounds();
+//	imageWidth = imageBounds.width; 	treeItem2.setImage(0, image);
+//	imageHeight = tree2.getItemHeight() - tree2.getGridLineWidth();
 	assertEquals(new Rectangle(0, 0, 0, 0), treeItem2.getImageBounds(-1));
 	
 	bounds = treeItem2.getImageBounds(0);	// bounds.width should be check box width if they are wider than image
@@ -624,10 +620,10 @@
 	treeItem2.dispose();
 	treeItem2 = new TreeItem(tree2, SWT.NULL);
 	image = images[1];
-	imageBounds = image.getBounds();
-	imageWidth = imageBounds.width;
+//	imageBounds = image.getBounds();
+//	imageWidth = imageBounds.width;
  	treeItem2.setImage(0, image);
-	imageHeight = tree2.getItemHeight() - tree2.getGridLineWidth();
+//	imageHeight = tree2.getItemHeight() - tree2.getGridLineWidth();
 	assertEquals(new Rectangle(0, 0, 0, 0), treeItem2.getImageBounds(-1));
  	bounds = treeItem2.getImageBounds(0);	// bounds.width should be check box width if check box is wider than image
 //	assertTrue(":b:", bounds.x > 0 && bounds.width > 0 && bounds.height == imageHeight);
@@ -724,8 +720,8 @@
 	assertEquals(treeItem.getBackground(), treeItem.getBackground(10));
 	
 	// with columns
-	TreeColumn column1 = new TreeColumn(tree, SWT.LEFT);
-	TreeColumn column2 = new TreeColumn(tree, SWT.LEFT);
+	new TreeColumn(tree, SWT.LEFT);
+	new TreeColumn(tree, SWT.LEFT);
 	
 	// index beyond range - no error
 	treeItem.setBackground(10, red);
@@ -842,8 +838,8 @@
 	assertTrue(treeItem.getFont().equals(treeItem.getFont(10)));
 	
 	// with columns
-	TreeColumn column1 = new TreeColumn(tree, SWT.LEFT);
-	TreeColumn column2 = new TreeColumn(tree, SWT.LEFT);
+	new TreeColumn(tree, SWT.LEFT);
+	new TreeColumn(tree, SWT.LEFT);
 	
 	// index beyond range - no error
 	treeItem.setFont(10, font);
@@ -893,8 +889,8 @@
 	assertEquals(treeItem.getForeground(), treeItem.getForeground(10));
 	
 	// with columns
-	TreeColumn column1 = new TreeColumn(tree, SWT.LEFT);
-	TreeColumn column2 = new TreeColumn(tree, SWT.LEFT);
+	new TreeColumn(tree, SWT.LEFT);
+	new TreeColumn(tree, SWT.LEFT);
 	
 	// index beyond range - no error
 	treeItem.setForeground(10, red);
@@ -965,7 +961,7 @@
 	int columnCount = tree.getColumnCount();
 	if (columnCount < texts.length) {
 		for (int i = columnCount; i < texts.length; i++){
-			TreeColumn column = new TreeColumn(tree, SWT.NONE);
+			new TreeColumn(tree, SWT.NONE);
 		}
 	}
 	TreeColumn[] columns = tree.getColumns();
@@ -997,8 +993,8 @@
 	assertEquals(null, treeItem.getImage(10));
 	
 	// with columns
-	TreeColumn column1 = new TreeColumn(tree, SWT.LEFT);
-	TreeColumn column2 = new TreeColumn(tree, SWT.LEFT);
+	new TreeColumn(tree, SWT.LEFT);
+	new TreeColumn(tree, SWT.LEFT);
 	
 	// index beyond range - no error
 	treeItem.setImage(10, images[0]);
@@ -1059,7 +1055,7 @@
 	int columnCount = tree.getColumnCount();
 	if (columnCount < images.length) {
 		for (int i = columnCount; i < images.length; i++){
-			TreeColumn column = new TreeColumn(tree, SWT.NONE);
+			new TreeColumn(tree, SWT.NONE);
 		}
 	}
 	TreeColumn[] columns = tree.getColumns();
@@ -1100,7 +1096,7 @@
 	int columnCount = tree.getColumnCount();
 	if (columnCount < images.length) {
 		for (int i = columnCount; i < images.length; i++){
-			TreeColumn column = new TreeColumn(tree, SWT.NONE);
+			new TreeColumn(tree, SWT.NONE);
 		}
 	}
 	TreeColumn[] columns = tree.getColumns();
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TypedListener.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TypedListener.java
index 104c29c..0ef4f7e 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TypedListener.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_TypedListener.java
@@ -29,12 +29,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void test_ConstructorLorg_eclipse_swt_internal_SWTEventListener() {
 	// do not test internal public methods (non-API)
 }
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Widget.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Widget.java
index 8004cd7..9a29e2a 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Widget.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Widget.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -48,6 +48,7 @@
 		assertTrue(widget.isDisposed());
 	}
 	assertTrue(shell.isDisposed());
+	super.tearDown();
 }
 
 public void test_ConstructorLorg_eclipse_swt_widgets_WidgetI() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser1.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser1.java
index ddf0c42..7763117 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser1.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser1.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.swt.tests.junit.browser;
 
+import org.eclipse.swt.tests.junit.SwtJunit;
 import org.eclipse.swt.widgets.*;
 import org.eclipse.swt.layout.*;
 import org.eclipse.swt.browser.*;
@@ -21,6 +22,7 @@
 	public static boolean locationChanging = false;
 	public static boolean locationChanged = false;
 	public static boolean progressCompleted = false;
+	public static boolean isMozilla = SwtJunit.isGTK || SwtJunit.isMotif;
 	
 	public static boolean test1(String url) {
 		if (verbose) System.out.println("URL Loading - args: "+url+" Expected Event Sequence: Location.changing > Location.changed (top true)> Progress.completed");
@@ -95,7 +97,6 @@
 		if (verbose) System.out.println("URL Loading Filtering - args: "+url+" Expected Event Sequence: Location.changing cancel true > no Location.changed, no Progress.completed");
 		locationChanging = locationChanged = progressCompleted = false;
 		passed = false;
-		final String[] locationCancelled = new String[1];
 		final Display display = new Display();
 		final Shell shell = new Shell(display);
 		shell.setLayout(new FillLayout());
@@ -113,7 +114,7 @@
 				new Thread() {
 					public void run() {
 						if (verbose) System.out.println("timer start");
-						try { sleep(2000); } catch (Exception e) {};
+						try { sleep(2000); } catch (Exception e) {}
 						if (!display.isDisposed())
 							display.asyncExec(new Runnable(){
 								public void run() {
@@ -122,7 +123,7 @@
 								}
 							});
 						if (verbose) System.out.println("timer over");
-					};
+					}
 				}.start();
 			}
 			public void changed(LocationEvent event) {
@@ -194,15 +195,18 @@
 	public static boolean test() {
 		int fail = 0;
 		String[] urls = {"http://www.google.com"};
-		for (int i = 0; i < urls.length; i++) {
-			boolean result = test1(urls[i]); 
-			if (verbose) System.out.print(result ? "." : "E");
-			if (!result) fail++; 
-		}
-		for (int i = 0; i < urls.length; i++) {
-			boolean result = test2(urls[i]); 
-			if (verbose) System.out.print(result ? "." : "E");
-			if (!result) fail++; 
+		// TEMPORARILY NOT RUN FOR MOZILLA
+		if (!isMozilla) {
+			for (int i = 0; i < urls.length; i++) {
+				boolean result = test1(urls[i]); 
+				if (verbose) System.out.print(result ? "." : "E");
+				if (!result) fail++; 
+			}
+			for (int i = 0; i < urls.length; i++) {
+				boolean result = test2(urls[i]); 
+				if (verbose) System.out.print(result ? "." : "E");
+				if (!result) fail++; 
+			}
 		}
 		return fail == 0;
 	}
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser2.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser2.java
index b834c56..dac23cb 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser2.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser2.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -61,7 +61,7 @@
 					new Thread() {
 						public void run() {
 							if (verbose) System.out.println("timer start");
-							try { sleep(2000); } catch (Exception e) {};
+							try { sleep(2000); } catch (Exception e) {}
 							if (!display.isDisposed())
 								display.asyncExec(new Runnable(){
 									public void run() {
@@ -70,7 +70,7 @@
 									}
 								});
 							if (verbose) System.out.println("timer over");
-						};
+						}
 					}.start();
 				}
 			}
@@ -89,7 +89,6 @@
 		if (verbose) System.out.println("setText URL Loading Filtering - args: "+html+" Expected Event Sequence: Location.changing cancel true > no Location.changed, no Progress.completed");
 		locationChanging = locationChanged = progressCompleted = false;
 		passed = false;
-		final String[] locationCancelled = new String[1];
 		final Display display = new Display();
 		final Shell shell = new Shell(display);
 		shell.setLayout(new FillLayout());
@@ -115,7 +114,7 @@
 				new Thread() {
 					public void run() {
 						if (verbose) System.out.println("timer start");
-						try { sleep(2000); } catch (Exception e) {};
+						try { sleep(2000); } catch (Exception e) {}
 						if (!display.isDisposed())
 							display.asyncExec(new Runnable(){
 								public void run() {
@@ -124,7 +123,7 @@
 								}
 							});
 						if (verbose) System.out.println("timer over");
-					};
+					}
 				}.start();
 			}
 			public void changed(LocationEvent event) {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser3.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser3.java
index 6e399b4..170a7f5 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser3.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser3.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -95,7 +95,7 @@
 				new Thread() {
 					public void run() {
 						if (verbose) System.out.println("timer start");
-						try { sleep(2000); } catch (Exception e) {};
+						try { sleep(2000); } catch (Exception e) {}
 						passed = true;
 						if (!display.isDisposed())
 							display.asyncExec(new Runnable(){
@@ -105,7 +105,7 @@
 								}
 							});
 						if (verbose) System.out.println("timer over");
-					};
+					}
 				}.start();
 			}
 		});
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser4.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser4.java
index b5480ca..204a823 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser4.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser4.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -118,7 +118,7 @@
 				new Thread() {
 					public void run() {
 						if (verbose) System.out.println("timer start");
-						try { sleep(2000); } catch (Exception e) {};
+						try { sleep(2000); } catch (Exception e) {}
 						passed = true;
 						if (!display.isDisposed())
 							display.asyncExec(new Runnable(){
@@ -128,7 +128,7 @@
 								}
 							});
 						if (verbose) System.out.println("timer over");
-					};
+					}
 				}.start();
 			}
 		});
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser5.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser5.java
index 891922f..e826266 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser5.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser5.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.swt.tests.junit.browser;
 
+import org.eclipse.swt.tests.junit.SwtJunit;
 import org.eclipse.swt.widgets.*;
 import org.eclipse.swt.layout.*;
 import org.eclipse.swt.browser.*;
@@ -27,6 +28,7 @@
 	static int index = 0;
 	static int cntPassed = 0;
 	static int cntClosed = 0;
+	public static boolean isMozilla = SwtJunit.isGTK || SwtJunit.isMotif;
 	
 	public static boolean test1(String url) {
 		if (verbose) System.out.println("javascript window.open with location and size parameters - args: "+url+"\n  Expected Event Sequence: Visibility.show");
@@ -156,9 +158,12 @@
 		else url = pluginPath + "/data/browser5.html";
 		String[] urls = {url};
 		for (int i = 0; i < urls.length; i++) {
-			boolean result = test1(urls[i]); 
-			if (verbose) System.out.print(result ? "." : "E");
-			if (!result) fail++; 
+			// TEST1 TEMPORARILY NOT RUN FOR MOZILLA
+			if (!isMozilla) {
+				boolean result = test1(urls[i]); 
+				if (verbose) System.out.print(result ? "." : "E");
+				if (!result) fail++;
+			}
 		}
 		return fail == 0;
 	}
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser6.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser6.java
index 240d3f2..0dc74b5 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser6.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser6.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2007 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
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.swt.tests.junit.browser;
 
+import org.eclipse.swt.tests.junit.SwtJunit;
 import org.eclipse.swt.widgets.*;
 import org.eclipse.swt.layout.*;
 import org.eclipse.swt.browser.*;
@@ -17,7 +18,8 @@
 
 public class Browser6 {
 	public static boolean verbose = false;
-	public static boolean passed = false;	
+	public static boolean passed = false;
+	public static boolean isMozilla = SwtJunit.isGTK || SwtJunit.isMotif;
 	
 	public static boolean test1(String url) {
 		if (verbose) System.out.println("URL Loading, verify get title event - args: "+url+" Expected Event Sequence: Title.changed");
@@ -33,7 +35,16 @@
 				String url = browser.getUrl();
 				if (verbose) System.out.println("Title changed <"+event.title+"> for location <"+url+">");
 				passed = true;
-				shell.close();
+				Runnable runnable = new Runnable() {
+					public void run() {
+						shell.close();
+					}
+				};
+				if (isMozilla) {
+					display.asyncExec(runnable);
+				} else {
+					runnable.run();
+				}
 			}
 		});
 		
@@ -112,9 +123,12 @@
 		
 		String[] urls = {"http://www.google.com"};
 		for (int i = 0; i < urls.length; i++) {
-			boolean result = test1(urls[i]); 
-			if (verbose) System.out.print(result ? "." : "E");
-			if (!result) fail++; 
+			// TEST1 TEMPORARILY NOT RUN FOR MOZILLA
+			if (!isMozilla) {
+				boolean result = test1(urls[i]); 
+				if (verbose) System.out.print(result ? "." : "E");
+				if (!result) fail++;
+			}
 		}
 		
 		String pluginPath = System.getProperty("PLUGIN_PATH");
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser7.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser7.java
index 290c1c0..130f0ee 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser7.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser7.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * 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
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser8.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser8.java
index c9f9f70..d13f54d 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser8.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser8.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * 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
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.swt.tests.junit.browser;
 
+import org.eclipse.swt.tests.junit.SwtJunit;
 import org.eclipse.swt.widgets.*;
 import org.eclipse.swt.layout.*;
 import org.eclipse.swt.browser.*;
@@ -17,7 +18,8 @@
 
 public class Browser8 {
 	public static boolean verbose = false;
-	public static boolean passed = false;	
+	public static boolean passed = false;
+	public static boolean isMozilla = SwtJunit.isGTK || SwtJunit.isMotif;
 	
 	static String html[] = {"<html><title>Snippet</title><body><p id='myid'>Best Friends</p><p id='myid2'>Cat and Dog</p></body></html>"};
 	static String script[] = {
@@ -88,9 +90,12 @@
 		else url = pluginPath + "/data/browser7.html";
 		String[] urls = new String[] {url};
 		for (int i = 0; i < urls.length; i++) {
-			boolean result = test(i); 
-			if (verbose) System.out.print(result ? "." : "E");
-			if (!result) fail++; 
+			// TEST TEMPORARILY NOT RUN FOR MOZILLA
+			if (!isMozilla) {
+				boolean result = test(i); 
+				if (verbose) System.out.print(result ? "." : "E");
+				if (!result) fail++;
+			}
 		}
 		return fail == 0;
 	}
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser9.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser9.java
index 2be4b0f..a8f6e3e 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser9.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Browser9.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2009 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
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Test_BrowserSuite.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Test_BrowserSuite.java
index 95663b1..f1f6fc4 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Test_BrowserSuite.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/browser/Test_BrowserSuite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * Copyright (c) 2000, 2009 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
@@ -31,12 +31,6 @@
 	TestRunner.run(suite());
 }
 
-protected void setUp() {
-}
-
-protected void tearDown() {
-}
-
 public void Browser1() {
 	if (verbose) System.out.println("** Browser1 **");
 	boolean result = Browser1.test();
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/performance/Test_situational.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/performance/Test_situational.java
index 451030f..ab911fa 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/performance/Test_situational.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/performance/Test_situational.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2006 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
@@ -60,7 +60,7 @@
 	PerformanceMeter meter = createMeter("Create composites");
 	int samples;
 
-    Performance performance = Performance.getDefault();
+    Performance.getDefault();
 	
 	// Warm up.
 	for(samples = 0; samples < 2; samples++) {
@@ -68,11 +68,11 @@
 		for (int i = 0; i < 100; i++) {
 			Composite c = new Composite(shell, SWT.NONE);
 			for (int j = 0; j < 10; j++) {
-				Composite c2 = new Composite(c, SWT.NONE);
+				new Composite(c, SWT.NONE);
 			}
 		}
 		shell.dispose();
-		while(display.readAndDispatch());
+		while(display.readAndDispatch()){/*empty*/}
 	}
 
 	for(samples = 0; samples < 100; samples++) {
@@ -81,12 +81,12 @@
 		for (int i = 0; i < 100; i++) {
 			Composite c = new Composite(shell, SWT.NONE);
 			for (int j = 0; j < 50; j++) {
-				Composite c2 = new Composite(c, SWT.NONE);
+				new Composite(c, SWT.NONE);
 			}
 		}
 		meter.stop();
 		shell.dispose();
-		while(display.readAndDispatch());
+		while(display.readAndDispatch()){/*empty*/}
 	}	
 	disposeMeter(meter);
 }
@@ -105,30 +105,30 @@
 		for (int i = 0; i < 50; i++) {
 			Composite c = new Composite(shell, SWT.NONE);
 			for (int j = 0; j < 10; j++) {
-				Button b = new Button(c, SWT.PUSH);
-				Label label = new Label(c, SWT.NONE);
-				Scale scale = new Scale(c, SWT.NONE);
-				ProgressBar bar = new ProgressBar(c, SWT.NONE);
-				List list = new List(c, SWT.NONE);
-				Text text = new Text(c, SWT.SINGLE);
-				Text multitext = new Text(c, SWT.MULTI);
-				Slider slider = new Slider(c, SWT.NONE);
-				Tree tree = new Tree(c, SWT.NONE);
-				Table table = new Table(c, SWT.NONE);
-				TabFolder tabFolder = new TabFolder(c, SWT.NONE);
-				Group g = new Group(c, SWT.BORDER);				
-				Composite c2 = new Composite(c, SWT.NONE);
+				new Button(c, SWT.PUSH);
+				new Label(c, SWT.NONE);
+				new Scale(c, SWT.NONE);
+				new ProgressBar(c, SWT.NONE);
+				new List(c, SWT.NONE);
+				new Text(c, SWT.SINGLE);
+				new Text(c, SWT.MULTI);
+				new Slider(c, SWT.NONE);
+				new Tree(c, SWT.NONE);
+				new Table(c, SWT.NONE);
+				new TabFolder(c, SWT.NONE);
+				new Group(c, SWT.BORDER);				
+				new Composite(c, SWT.NONE);
 			}
 		}
 		meter.stop();
 		shell.dispose();
-		while(display.readAndDispatch());
+		while(display.readAndDispatch()){/*empty*/}
 	}	
 	disposeMeter(meter);
 }
 
 public void test_layout() {
-	PerformanceMeter meter = createMeter("layout composites");
+	PerformanceMeter meter = createMeter("Layout Composites");
 	int samples;
 
 	for(samples = 0; samples < 10; samples++) {
@@ -185,9 +185,9 @@
 		changedLabel.setLayoutData(data);
 		
 		shell.open();
-		while(display.readAndDispatch());
+		while(display.readAndDispatch()){/*empty*/}
 		try { Thread.sleep(2000); } catch (Exception e) {}
-		while(display.readAndDispatch());
+		while(display.readAndDispatch()){/*empty*/}
 		meter.start();
 		for(int numlayouts = 0; numlayouts < 20; numlayouts++) {
 			shell.layout(true);
@@ -197,7 +197,7 @@
 		}
 		meter.stop();
 		shell.dispose();
-		while(display.readAndDispatch());
+		while(display.readAndDispatch()){/*empty*/}
 	}	
 	disposeMeter(meter);
 }
@@ -231,13 +231,18 @@
 		image.dispose();
 		color1.dispose();
 		color2.dispose();
-		while(display.readAndDispatch());
+		while(display.readAndDispatch()){/*empty*/}
 	}	
 	disposeMeter(meter);
 }
 
 public void test_windowDrawing() {
 	PerformanceMeter meter = createMeter("Draw on a window");
+	Performance performance= Performance.getDefault();
+	performance.setComment(meter, 
+			Performance.EXPLAINS_DEGRADATION_COMMENT, 
+			"Regression due to a issue on the Releng test machine");
+			
 	int samples;
 	
 	for(samples = 0; samples < 10; samples++) {
@@ -252,9 +257,9 @@
 		c.setLayoutData(data);
 		shell.pack();
 		shell.open();
-		while(display.readAndDispatch());
+		while(display.readAndDispatch()){/*empty*/}
 		try { Thread.sleep(2000); } catch (Exception e) {}
-		while(display.readAndDispatch());
+		while(display.readAndDispatch()){/*empty*/}
 		Color color1 = new Color(display, 0xff, 0, 0xff);
 		Color color2 = new Color(display, 0, 0xff, 0xff);
 		int x1 = 0, y1 = height/2, x2 = width/2, y2 = 0;
@@ -276,7 +281,7 @@
 		shell.dispose();
 		color1.dispose();
 		color2.dispose();
-		while(display.readAndDispatch());
+		while(display.readAndDispatch()){/*empty*/}
 	}	
 	disposeMeter(meter);
 }
@@ -297,9 +302,9 @@
 		c.setLayoutData(data);
 		shell.pack();
 		shell.open();
-		while(display.readAndDispatch());
+		while(display.readAndDispatch()){/*empty*/}
 		try { Thread.sleep(2000); } catch (Exception e) {}
-		while(display.readAndDispatch());
+		while(display.readAndDispatch()){/*empty*/}
 		Color color1 = new Color(display, 0xff, 0, 0xff);
 		Color color2 = new Color(display, 0, 0xff, 0xff);
 		Font font1 = new Font(display, "Helvetica", 20, SWT.NONE);
@@ -324,7 +329,7 @@
 		color2.dispose();
 		font1.dispose();
 		font2.dispose();
-		while(display.readAndDispatch());
+		while(display.readAndDispatch()){/*empty*/}
 	}	
 	disposeMeter(meter);
 }
@@ -345,9 +350,9 @@
 		c.setLayoutData(data);
 		shell.pack();
 		shell.open();
-		while(display.readAndDispatch());
+		while(display.readAndDispatch()){/*empty*/}
 		try { Thread.sleep(2000); } catch (Exception e) {}
-		while(display.readAndDispatch());
+		while(display.readAndDispatch()){/*empty*/}
 		Color color1 = new Color(display, 0xff, 0, 0xff);
 		Color color2 = new Color(display, 0, 0xff, 0xff);
 		Font font1 = new Font(display, "Helvetica", 20, SWT.NONE);
@@ -371,7 +376,7 @@
 		color2.dispose();
 		font1.dispose();
 		font2.dispose();
-		while(display.readAndDispatch());
+		while(display.readAndDispatch()){/*empty*/}
 	}	
 	disposeMeter(meter);
 }
diff --git a/tests/org.eclipse.swt.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.swt.tests/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..f204330
--- /dev/null
+++ b/tests/org.eclipse.swt.tests/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.swt.tests
+Bundle-Version: 3.4.0
+Bundle-ClassPath: swttests.jar
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Export-Package: org.eclipse.swt.tests.junit,
+ org.eclipse.swt.tests.junit.browser,
+ org.eclipse.swt.tests.junit.performance
+Require-Bundle: org.junit,
+ org.eclipse.swt,
+ org.eclipse.test.performance
diff --git a/tests/org.eclipse.swt.tests/about.html b/tests/org.eclipse.swt.tests/about.html
index 6f6b96c..4602330 100644
--- a/tests/org.eclipse.swt.tests/about.html
+++ b/tests/org.eclipse.swt.tests/about.html
@@ -1,22 +1,28 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
 <title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
 </head>
 <body lang="EN-US">
 <h2>About This Content</h2>
  
-<p>February 24, 2005</p>	
+<p>June 2, 2006</p>	
 <h3>License</h3>
 
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
 For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
 
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
 
 </body>
 </html>
\ No newline at end of file
diff --git a/tests/org.eclipse.swt.tests/build.properties b/tests/org.eclipse.swt.tests/build.properties
index 270e997..b912184 100644
--- a/tests/org.eclipse.swt.tests/build.properties
+++ b/tests/org.eclipse.swt.tests/build.properties
@@ -10,4 +10,11 @@
 ###############################################################################
 source.swttests.jar=JUnit Tests/
 
-bin.includes=*.jar,plugin.xml,test.xml,about.html,plugin.properties,data/
\ No newline at end of file
+bin.includes = *.jar,\
+               plugin.xml,\
+               test.xml,\
+               about.html,\
+               plugin.properties,\
+               data/,\
+               META-INF/
+
diff --git a/tests/org.eclipse.swt.tests/plugin.xml b/tests/org.eclipse.swt.tests/plugin.xml
deleted file mode 100644
index e81e88f..0000000
--- a/tests/org.eclipse.swt.tests/plugin.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<!-- File written by PDE 1.0 -->
-<plugin
-   id="org.eclipse.swt.tests"
-   name="%pluginName"
-   provider-name="%providerName"
-   version="3.1.0">
-
-<requires>
-   <import plugin="org.junit"/>
-   <import plugin="org.eclipse.swt"/>
-   <import plugin="org.eclipse.test.performance"/>
-</requires>
-
-<runtime>
-    <library name="swttests.jar">
-      <export name="*"/>
-    </library>
-  </runtime>
-</plugin>
diff --git a/tests/org.eclipse.swt.tests/test.xml b/tests/org.eclipse.swt.tests/test.xml
index f6d2edd..1e4d062 100644
--- a/tests/org.eclipse.swt.tests/test.xml
+++ b/tests/org.eclipse.swt.tests/test.xml
@@ -9,8 +9,8 @@
   <!-- sets the properties eclipse-home, and library-file -->
   <property name="eclipse-home" value="${basedir}/../.."/>
   <property name="plugin-name" value="org.eclipse.swt.tests"/>
-  <property name="plugin-path" value="${eclipse-home}/plugins/${org.eclipse.swt.tests}"/>
-  <property name="library-file" value="${eclipse-home}/plugins/org.eclipse.test/library.xml"/>
+  <property name="plugin-path" value="${eclipse-home}/dropins/eclipse/plugins/${org.eclipse.swt.tests}"/>
+  <property name="library-file" value="${eclipse-home}/dropins/eclipse/plugins/org.eclipse.test/library.xml"/>
 
   <!-- This target holds all initialization code that needs to be done for -->
   <!-- all tests that are to be run. Initialization for individual tests -->
@@ -30,8 +30,11 @@
     <condition property="class-tests" value="org.eclipse.swt.tests.junit.AllGtkTests">
       <equals arg1="${os}" arg2="linux"/>
     </condition>
-    <condition property="class-tests" value="org.eclipse.swt.tests.junit.AllCarbonTests">
-      <equals arg1="${os}" arg2="macosx"/>
+    <condition property="class-tests" value="org.eclipse.swt.tests.junit.AllCocoaTests">
+      <equals arg1="${ws}" arg2="cocoa"/>
+    </condition>
+  	<condition property="class-tests" value="org.eclipse.swt.tests.junit.AllCarbonTests">
+      <equals arg1="${ws}" arg2="carbon"/>
     </condition>
     <condition property="class-tests" value="org.eclipse.swt.tests.junit.AllTests">
       <equals arg1="${os}" arg2="win32"/>